Verilog - 为什么我不能在for语句中声明多个变量?

时间:2015-10-09 20:36:22

标签: 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

是否可以像其他语言一样拥有多个变量?

1 个答案:

答案 0 :(得分:2)

Verilog中有两种类型的for循环,过程for循环(在initialalways块内)并生成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循环仍然存在单个变量赋值限制。