Verilog:是否可以进行索引实例化?

时间:2011-04-08 09:49:09

标签: verilog

我有一个文件,类似于

module AB(A,B,Out);
  input A,B;
  output Out;

  wire Out;
  assign Out = A & B;
endmodule

我需要使用N个这个计算。 即我有一个= 1001; b = 0001,我需要执行像按位AND这样的操作,并且我有N位。

我用它作为实例化:

op[0] = a[0] & b[0];
op[1] = a[1] & b[1];
op[2] = a[2] & b[2];
op[3] = a[3] & b[3];
op[4] = a[4] & b[4];

当我尝试使用索引i执行此操作时,我有:

AB g(a[i],b[i],Op[i]) for i = 0 to N-1. 

如果我这样做,就说AB是未宣布的。

这不可能吗?如果是这样,有什么替代方案?

2 个答案:

答案 0 :(得分:8)

你有几个选择:

  • 模块中的参数化总线大小
  • 实例数组
  • generate陈述

但要回答这个问题,可以做实例数组。以下是AB模块的语法。

module testbench ();
   localparam WIDTH = 4;

   reg [WIDTH-1:0] a_in, b_in;
   wire [WIDTH-1:0] out_a;

   AB u0[WIDTH-1:0]
     (
      .A(a_in),
      .B(b_in),
      .Out(out_a)
     );

   initial begin
      ...
   end

endmodule

此处,a_in[3]b_in[3]out_a[3]已映射到u0[3]的端口。

答案 1 :(得分:6)

这可以使用支持实例数组的generate语句。该结构在Verilog IEEE Std 1364-2001中引入。

genvar i;
generate
    for (i=0; i<4; i=i+1) begin
        AB g (a[i], b[i], op[i]);
    end
endgenerate