在Verilog中的模块之间传递参数



我正在学习如何在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))语法来显式地显示您正在传递一个参数。

最新更新