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

我的问题是如何在funct2中调用funct

我还想知道如何在testbench文件夹中实例化funct。没有parameter,它看起来像这样

funct uut(.clk(clk),.in(in),.reset(reset),.L(L),.load(load),.shift(shift),.out(out));

解决方法

以下语法用于实例化funct2中的funct,并将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))语法来明确显示您正在传递参数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...