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 の問題ではないかと疑い始めています。