我有这样的代码:
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
是否可以像其他语言一样拥有多个变量?
在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
有关qazxsw poi数组切片运算符的更多信息,请参阅前面已回答的问题:
qazxsw poi和+:
注意:SystemVerilog支持带有过程for循环的多个变量赋值。根据Indexing vectors and arrays with +:,仍然存在单个变量赋值限制和生成for循环。