Я использую Icarus iVerilog для синтеза и тестирования своего кода, но я получаю неизвестные значения, когда логически должны появляться единицы. Вот пример того, что я пытаюсь сделать.
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
Я не могу найти причину появления крестиков и начинаю подозревать, что это проблема с iVerilog.
i>=0
вместоi>-1
и 2) считать вперед с 0, а не назад с 8. - person teadotjay   schedule 01.08.2016