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

时间:2014-11-26 14:20:05

标签: 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中这样做?

1 个答案:

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