For loop “for”的输出未知,而不是Verilog中的1

For loop “for”的输出未知,而不是Verilog中的1,for-loop,verilog,iverilog,For Loop,Verilog,Iverilog,我使用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] =

我使用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;

因此,存在冲突。

请删除下面声明中的赋值。声明中0的赋值连接与genvar块中的赋值1冲突

 wire [8:0] b = 0;
改为

wire [8:0] b;
这是因为

wire [8:0] b = 0;
不是初始化,而是连续分配。相当于

wire [8:0] b;
assign b = 0;

因此,存在冲突。

您的合成工具是否支持变量声明初始化?明天我可以在另一个工具中尝试,但现在可以尝试两件事:1使用I>=0而不是I>-1,2从0开始向前计数,而不是从8开始向后计数。您的合成工具是否支持变量声明初始化?明天我可以在另一个工具中尝试,但现在可以尝试两件事:1使用I>=0而不是I>-1,2从0开始向前计数而不是从8开始向后计数。