以下这种生成循环在系统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
答案 0 :(得分:0)
不。我什至不确定这段代码的行为是什么,或者它们以什么顺序执行。
genvar i,j;
for (i = 0; i <5; i++) begin
for (j = 5; j < 10; j++) begin
$display("%d", i*j);
end
end
您最终不需要'endgenerate'。
答案 1 :(得分:0)
在示例中,您不能对genvar做很多事情。
以下代码模仿了您的要求,但可能不适用于所有模拟器。它适用于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
想法是在generate循环内声明参数j
,以便其值是上一次迭代中声明的值的增量。您需要添加一个命名块'B'来有条件地声明。