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

Passing parameters between modules in 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)) 语法来明确表明您正在传递参数。