假设我们有以下任意参数化模块
module module_x #(parameter WIDTH = 1) (in_a, in_b, out);
input [WIDTH - 1] in_a, in_b;
output out;
// Some module instantiation here
endmodule
如何根据WIDTH的值实例化另一个?就像它是5我每次实例化它5次,是否有可能在Verilog中这样做?
答案 0 :(得分:4)
生成语句是一种常见的方法:Section 27 page 749 of IEEE 1800-1012。
一个简单的例子:
logic [WIDTH-1:0] a;
logic [WIDTH-1:0] b;
genvar i;
generate
for(i=0; i<WIDTH; i++) begin
module_name instance_name(
.a(a[i]),
.b(a[i])
);
end
endgenerate
正如@toolic指出的那样,实例数组也是可能的,而且更简单。
logic clk;
logic [WIDTH-1:0] a_i;
logic [WIDTH-1:0] b_i;
module_name instance_name[WIDTH-1:0] (
.clk ( clk ), //Single bit is replicated across instance array
.a ( a_i ), //connected wire a_i is wider than port so split across instances
.b ( b_i )
);