"for" 的输出是未知的,而不是 Verilog 中的 1
Output of "for" is unknown instead of 1 in Verilog
我正在使用 Icarus iVerilog 来综合和测试我的代码,但是当逻辑上应该出现 1 时我得到了未知值。这是我正在尝试做的一个例子。
reg [8:0] a = 000110100;
wire [8:0] b = 0;
generate
genvar i;
for (i = 8; i > -1; i = i - 1)
begin:loop
assign b[i] = |a[8:i];
end
endgenerate
这应该会产生一些形式为
的门
b[8] = a[8];
b[7] = a[8] | a[7];
b[6] = a[8] | a[7] | a[6];
b[5] = a[8] | a[7] | a[6] | a[5];
...
我的预期输出是
000111111
我实际上得到
000xxxxxx
我找不到 x 的任何原因,我开始怀疑这是 iVerilog 的问题。
请删除下面声明中的赋值。声明中指向 0 的分配线与 genvar 块中的分配 1 发生冲突
wire [8:0] b = 0;
改为
wire [8:0] b;
这是因为
wire [8:0] b = 0;
不是初始化,是连续赋值。相当于
wire [8:0] b;
assign b = 0;
因此,冲突。
我正在使用 Icarus iVerilog 来综合和测试我的代码,但是当逻辑上应该出现 1 时我得到了未知值。这是我正在尝试做的一个例子。
reg [8:0] a = 000110100;
wire [8:0] b = 0;
generate
genvar i;
for (i = 8; i > -1; i = i - 1)
begin:loop
assign b[i] = |a[8:i];
end
endgenerate
这应该会产生一些形式为
的门b[8] = a[8];
b[7] = a[8] | a[7];
b[6] = a[8] | a[7] | a[6];
b[5] = a[8] | a[7] | a[6] | a[5];
...
我的预期输出是
000111111
我实际上得到
000xxxxxx
我找不到 x 的任何原因,我开始怀疑这是 iVerilog 的问题。
请删除下面声明中的赋值。声明中指向 0 的分配线与 genvar 块中的分配 1 发生冲突
wire [8:0] b = 0;
改为
wire [8:0] b;
这是因为
wire [8:0] b = 0;
不是初始化,是连续赋值。相当于
wire [8:0] b;
assign b = 0;
因此,冲突。