参数化模块 (SystemVerilog)

Posted

技术标签:

【中文标题】参数化模块 (SystemVerilog)【英文标题】:Parameterized Modules (SystemVerilog) 【发布时间】:2017-06-21 10:21:51 【问题描述】:

我已阅读 David Harris 的书"Digital Design and Computers Architecture",我对本书中的 SystemVerilog 示例有疑问。在“参数化构造”中引入之后,即# (parameter ...),几乎在每个例子中都会用到这个操作符。

例如本书中的“减法器”模块:

module subtractor #(parameter N = 8)
(input logic [N - 1:0] a,b,
output logic [N - 1:0] y);
assign y = a - b;
endmodule

在这段代码中使用N 的原因是什么? 我们不能只写以下内容吗?:

input logic [7:0] a,b,
output logic [7:0] y);

此外,本书后面的几乎每个示例都使用了这些参数,但就我而言,没有理由使用它。 我们可以直接在方括号中设置位数,而无需使用额外的“参数”。

那么,上面这种编码形式的原因是什么?

【问题讨论】:

简而言之,参数是用于模块的泛化。 可重用性是参数化模块的主要目的。 @sharvil111 谢谢你的回复 @KaranShah 也谢谢你 【参考方案1】:

参数的使用有多种用途。

    使用与值关联的符号名称总是比直接使用文字值更好的编程习惯。 DATA_WIDTH 而不是 N 会是一个更合适的例子。这记录了值的含义。 当需要更改该值时,您可以在一个地方进行更改,并且您错过更改或更改意外值的可能性较小。 参数的使用允许您通过创建模板然后根据需要覆盖参数值,在许多不同的地方重复使用相同的代码。

【讨论】:

以上是关于参数化模块 (SystemVerilog)的主要内容,如果未能解决你的问题,请参考以下文章

systemverilog中的随机化方法

如何生成依赖于 systemverilog 中先前参数的参数

请教systemverilog中的interface问题

systemverilog interface

SystemVerilog搭建测试平台---第一章:验证导论(续)

systemverilog assertion