1

我正在尝试生成 128 个并行异或门,然后将它们的输出连接到 Verilog 中的 64 个异或门。我使用了一个名为“EXOR”的模块。我的问题是:当我将此模块“EXOR”放入循环时,程序给出语法错误“unexpected token:'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
4

1 回答 1

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

两件事情:

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

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

于 2012-12-07T13:08:21.453 回答