Приведенный ниже вид цикла генерации действителен в системе verilog.
genvar i,j;
for (i=0,j=5; i<5 && j<10; i++,j++) begin:M1
integer t;
initial begin
t = i*j;
end
endgenerate
Приведенный ниже вид цикла генерации действителен в системе verilog.
genvar i,j;
for (i=0,j=5; i<5 && j<10; i++,j++) begin:M1
integer t;
initial begin
t = i*j;
end
endgenerate
Неа. Я даже не уверен, каким должно быть поведение этого кода или в каком порядке они выполняются.
genvar i,j;
for (i = 0; i <5; i++) begin
for (j = 5; j < 10; j++) begin
$display("%d", i*j);
end
end
вам не нужно 'endgenerate' в конце.
В вашем примере вы мало что можете сделать с genvars.
Следующий код имитирует то, что вы просили, но он может работать не со всеми симуляторами. Он работает с synopsys vcs, но не работает с icarus.
module g;
genvar i;
for (i=0; i<5; i++) begin:M
if (i == 0) begin:B
parameter j = 5;
end
else begin:B
parameter j = g.M[i-1].B.j + 1;
end
integer t;
initial begin
t = i*B.j;
$display(i, B.j, t);
end
end // block: M
endmodule // g
идея состоит в том, чтобы объявить параметр j
внутри цикла генерации, чтобы его значение было приращением значения, объявленного в предыдущей итерации. Вам нужно добавить именованный блок «B» для условного объявления.