图像。我正试图解决下面写的一个问题。我搞不懂为什么输出处于未定义的状态。“人口计数”电路计算输入向量中“1”的数目。为255位输入向量建立一个人口计数电路。
module top_module(
input [254:0] in,
output [7:0] out );
reg [7:0] counter=8'b0;
reg [7:0] counter_next=8'b0;
always @ (*)
begin
counter=counter_next;
end
always @ (*)
begin
for (int i=0; i<$bits(in);i++)
counter_next=counter+in[i];
end
assign out=counter;
endmodule发布于 2019-08-12 06:06:14
为什么我的输出处于未定义状态?
所有HDL变量都是未定义的(“X”或“U”),直到给出值为止。
然后,向未定义的值counter_next=counter+in[i];添加一个值,该值仍然提供未定义的值。所以它就一直这样。
另外,您使用的是“counter=counter_next”,这表明您已经看到了一些现有的HDL代码,并且试图复制它,但是您不明白为什么要以这种方式实现它。当有时钟时,使用“next”系统。你没有钟,因此它在这里是多余的。
您要查找的代码可能如下所示:
output reg [7:0] out
always @( * )
begin
out = 0;
for (int i=0; i<$bits(in);i++)
out =out+in[i];
end请注意,这里我没有使用额外的变量counter。我所做的就是做一个reg类型,这样我就可以直接使用它了。
https://stackoverflow.com/questions/57454192
复制相似问题