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

Nan*_*ini 4 verilog

我有一个文件,类似于

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

  wire Out;
  assign Out = A & B;
endmodule
Run Code Online (Sandbox Code Playgroud)

我需要使用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];
Run Code Online (Sandbox Code Playgroud)

当我试图用索引i做这个时,我有:

AB g(a[i],b[i],Op[i]) for i = 0 to N-1. 
Run Code Online (Sandbox Code Playgroud)

如果我这样做,它说AB是未申报的.

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

Mar*_*rty 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
Run Code Online (Sandbox Code Playgroud)

这里a_in[3],b_in[3]并且out_a[3]被映射到的端口u0[3].


too*_*lic 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
Run Code Online (Sandbox Code Playgroud)

  • Thnk u Toolic :)我也有多重条件.我将不得不为此内部运行.我正在实现i次迭代j次,这取决于N.我实际上试图参数化Kogge-stone加法器.多个for循环的效率如何?它会非常严重地影响速度吗? (2认同)