Verilog - 为什么我不能在 for 语句中声明多个变量?
Verilog - Why I can't declare multiple vars in a for statement?
我有这样的代码:
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
是否可以像其他语言一样在 for 中使用多个变量?
Verilog 中有两种类型的 for 循环,程序 for 循环(在 initial
或 always
块内)和生成 for 循环(在 initial
之外)和 always
块)。两者都限于简单的单变量赋值。
通常您不需要由 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
有关 +:
数组切片运算符的更多信息,请参阅之前回答的问题:
Indexing vectors and arrays with +: and What is `+:` and `-:`?
注意:SystemVerilog 支持使用程序 for 循环的多个变量赋值。根据 IEEE Std 1800-2012.
生成 for 循环仍然存在单变量赋值限制
我有这样的代码:
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
是否可以像其他语言一样在 for 中使用多个变量?
Verilog 中有两种类型的 for 循环,程序 for 循环(在 initial
或 always
块内)和生成 for 循环(在 initial
之外)和 always
块)。两者都限于简单的单变量赋值。
通常您不需要由 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
有关 +:
数组切片运算符的更多信息,请参阅之前回答的问题:
Indexing vectors and arrays with +: and What is `+:` and `-:`?
注意:SystemVerilog 支持使用程序 for 循环的多个变量赋值。根据 IEEE Std 1800-2012.
生成 for 循环仍然存在单变量赋值限制