输出处于未定义状态
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 类型,以便我可以直接使用它。
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 类型,以便我可以直接使用它。