我有一个文件,类似于
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是未宣布的。
这不可能吗?如果是这样,有什么替代方案?
答案 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