【发布时间】: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
据我了解,合成器将在编译时扩展每个循环,这意味着 i 和 j 实际上并没有被合成。因此,我可以为代码中的每个循环使用 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