输出处于未定义状态

Output is in undefined state

Image。我正在尝试解决下面写的问题。我很困惑为什么我的输出处于未定义状态。 "population count" 电路计算输入向量中“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

confused why my output was in undefined state.

所有 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。我所做的只是将 'out' 设为 reg 类型,以便我可以直接使用它。