Loops 在Verilog中可以多次使用循环变量吗?
我有两个如下所示的阵列:Loops 在Verilog中可以多次使用循环变量吗?,loops,verilog,variable-names,Loops,Verilog,Variable Names,我有两个如下所示的阵列: reg [3:0] foo [31:0]; reg [7:0] bar [63:0]; 它们需要在始终块中初始化,如下所示: 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
reg [3:0] foo [31:0];
reg [7:0] bar [63:0];
它们需要在始终
块中初始化,如下所示:
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
同样,对于genvar
变量,答案也是正确的吗
这个问题是关于Verilog的,不是关于SystemVerilog的
提前谢谢 对于循环,此问题不特定于
。在任何程序代码块中,如果在读取变量之前先写入变量,并且在程序块之外不使用它,则会将其合成为临时变量。你可以写,然后一遍又一遍地读。每对都会被分开处理
当使用for
循环时,这基本上就是for循环展开时发生的情况。它会被分配一个常量值,然后再分配另一个。是的,它是有效的,并且会执行您认为它可以执行的操作。不幸的是,我无法尝试合成它,因为我目前缺少必要的工具。
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