Verilog 中可以多次使用循环变量吗?

Can loop variables be used multiple times in Verilog?

我有两个数组,如下所示:

reg [3:0] foo [31:0];
reg [7:0] bar [63:0];

它们需要在 always 块中初始化如下:

integer i;
integer j;
always @(posedge clk) begin
  if(reset) begin
    for(i=0; i<32; i=i+1) foo[i] <= 4'h0;
    for(j=0; j<64; j=j+1) bar[j] <= 8'h0;
  end
end

据我了解,合成器会在编译时扩展每个循环,这意味着 ij 实际上不会被合成。因此,我可以为代码中的每个循环使用 same 循环变量名吗?例如,下面的代码有效吗?

integer k;
always @(posedge clk) begin
  if(reset) begin
    for(k=0; k<32; k=k+1) foo[k] <= 4'h0;
    for(k=0; k<64; k=k+1) bar[k] <= 8'h0;
  end
end

同样,genvar 个变量的答案是否也成立?

这个问题是关于 Verilog,而不是 SystemVerilog。

提前致谢!

此问题并非特定于 for 循环。在 any 程序代码块中,如果您在读取变量之前写入变量,并且不在程序块之外使用它,它会被合成为一个临时变量。您可以先写入,然后一遍又一遍地读取。每个配对都单独处理。

当使用 for 循环时,这实际上是 for 循环展开时发生的情况。它被分配一个常量值,然后是另一个。