如何在 Verilog 循环中使用准备好的模块?

use*_*118 1 loops verilog module

我试图生成 128 个并行异或门,然后将它们的输出连接到 Verilog 中的 64 个异或门。我使用一个名为“EXOR”的模块。我的问题是:当我将此模块“EXOR”放入循环中时,程序给出语法错误“意外标记:'EXOR'”。我想将门命名为​​ exor0、exor1、...。

我该如何解决?

initial begin 
  for (i=0; i<128 ; i=i +1 )
    EXOR exor[i](.I1(m[2*i]), .I2(m[2*i+1]), .o(t[i]));
end

initial begin 
  for (i=0; i<64 ; i=i +1 )
    EXOR exor[i+128](.I1(t[2*i]), .I2(t[2*i+1]), .o(f[i]));
end

initial begin 
  for (i=0; i<32 ; i=i +1 )
    EXOR exor[i+192](.I1(f[2*i]), .I2(f[2*i+1]), .o(g[i]));
end
Run Code Online (Sandbox Code Playgroud)

Bri*_*son 5

为了详细说明 Munkymorgy 的答案,您在这里寻找的是生成循环。“initial”和“always”块用于“运行时”构造。由于您正在尝试在实例上创建数组,因此您希望在详细说明时进行解释。

genvar i;

generate
   for (i = 0; i < 64; i = i + 1) begin : gen_loop
      EXOR exor(.I1(m[2 * i]), .I2(m[2 * i + 1], .o(t[i]));
   end
endgenerate
Run Code Online (Sandbox Code Playgroud)

两件事情:

1)循环变量必须声明为“genvar”

2)for循环需要命名。这将用于实例的分层名称。