【问题标题】:Can loop variables be used multiple times in Verilog?循环变量可以在 Verilog 中多次使用吗?
【发布时间】:2020-07-02 23:12:44
【问题描述】:

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

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。

提前致谢!

【问题讨论】:

  • 是的,它是有效的,并且会按照你的想法去做。
  • 很遗憾,我目前缺少必要的工具,无法尝试合成它。

标签: loops verilog variable-names


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2010-11-11
    相关资源
    最近更新 更多