For loop Verilog-为什么我可以';在for语句中不声明多个变量?

For loop Verilog-为什么我可以';在for语句中不声明多个变量?,for-loop,verilog,hdl,For Loop,Verilog,Hdl,我有这样一个代码: generate genvar i, j, k; for (i = 0, j = 8, k = 0; i < 4; i = i + 1, j = j + 8, k = k + 8) Register Register_inst (.d(w_data), .en(decoder_out[i]), .clk(clk), .q(trunc_32_to_n_bits(reg_out, j-1, k))); endgenerate 生成 genvarⅠ,j,k; 对于(

我有这样一个代码:

generate
genvar i, j, k;
for (i = 0, j = 8, k = 0; i < 4; i = i + 1, j = j + 8, k = k + 8)
    Register Register_inst (.d(w_data), .en(decoder_out[i]), .clk(clk), .q(trunc_32_to_n_bits(reg_out, j-1, k)));
endgenerate
生成
genvarⅠ,j,k;
对于(i=0,j=8,k=0;i<4;i=i+1,j=j+8,k=k+8)
寄存器寄存器inst(.d(w_数据),.en(解码器输出[i]),.clk(时钟),.q(trunc_32_到n_位(寄存器输出,j-1,k));
最终生成

在一个for中是否可能有多个VAR,就像在其他语言中一样?

在Verilog中有两种for循环类型,过程for循环(在
初始
始终
块内)和生成for循环(在
初始
始终
块外)。这两种方法都仅限于简单的单变量赋值

通常,您不需要由for循环管理多个变量。在大多数情况下,可以从一个索引中导出其他值。您的代码不需要三个变量,因为一切都可以通过
i
确定:

generate
genvar i;
for (i = 0; i < 4; i = i + 1)
  Register Register_inst (.d(w_data), .en(decoder_out[i]), .clk(clk), .q(reg_out[i*8 +: 8));
endgenerate
生成
genvar i;
对于(i=0;i<4;i=i+1)
寄存器寄存器指令(.d(w_数据),.en(解码器输出[i]),.clk(时钟),.q(寄存器输出[i*8+:8]);
最终生成
有关
+:
阵列切片运算符的更多信息,请参阅前面回答的问题:

注:SystemVerilog支持使用过程for循环的多变量分配。根据,使用generate for循环仍然存在单变量分配限制