Module 根据Verilog中的参数值多次实例化模块

Module 根据Verilog中的参数值多次实例化模块,module,verilog,Module,Verilog,假设我们有以下任意参数化模块 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中执行此操作?生成语句是一种常见的方法: 一个简单的

假设我们有以下任意参数化模块

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中执行此操作?

生成语句是一种常见的方法:

一个简单的例子:

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 

如果我们的宽度>输入>1,会发生什么情况?@3bdalla据我所知,如果连接的导线比端口宽,则会分割并重复填充阵列。2位的输入。使用宽度为3的实例数组连接3位。导线3'bjkl将重复至
6'bjkljkl
,该导线将分为
jk
lj
kl
,至3个实例
jkl
用作占位符有效值来自
01zx
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 )
);