我有这样的代码:
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
是否可以像其他语言一样拥有多个变量?
答案 0 :(得分:2)
Verilog中有两种类型的for循环,过程for循环(在initial
或always
块内)并生成for循环(在initial
和{之外) {1}}阻止)。两者都局限于简单的单变量赋值。
通常,您不需要由for循环管理的多个变量。在大多数情况下,其他值可以从一个索引中导出。您的代码不需要三个变量,因为所有内容都可以从always
确定:
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 +:和What is `+:` and `-:`?
注意:SystemVerilog支持带有过程for循环的多个变量赋值。根据{{3}}生成for循环仍然存在单个变量赋值限制。