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 )
);