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

问题描述 投票:0回答:1

我有这样的代码:

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-loop verilog hdl
1个回答
2
投票

在Verilog中有两种类型的for循环,程序for循环(在initialalways块内)并生成for循环(在initialalways块之外)。两者都局限于简单的单变量赋值。

通常,您不需要由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循环。

© www.soinside.com 2019 - 2024. All rights reserved.