我正在学习如何在Verilog中传递参数。到目前为止,我了解到声明如下:
module funct #(parameter n = 32)
(input clk, input [n-1:0]in, input reset, input L,
input load, input shift, output reg[n-1:0] out);
我在这个模块中实例化了另一个依赖于参数的模块,所以我也在那里定义了参数。
module funct2 #(parameter n = 32) (
input clk,
input [n-1:0] in,
input rst,
input L,
output [n-1:0] out
);
我的问题是如何在funct
中调用funct2
?
我还想知道如何在testbench文件夹中实例化funct
。如果没有parameter
,它看起来就像这个
funct uut(.clk(clk),.in(in), .reset(reset),.L(L), .load(load), .shift(shift), .out(out));
以下语法用于在funct
中实例化funct2
,将parameter
传递到模块中:
funct2 #(.n(n)) i1 (.clk(clk), .in(in), .rst(reset), .L(L), .out(out));
请参阅IEEE Std 1800-2017第23.3.2节模块实例化语法。
正如您所发现的,用于在测试台中实例化funct
的语法是有效的。在这种情况下,将使用默认值32。或者,您可以使用#(.n(n))
语法来显式地显示您正在传递一个参数。