我有一个文件,类似于
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是未申报的.
这不可能吗?如果是这样,有什么替代方案?
你有几个选择:
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].
这可以使用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)