参数化模块 (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 中先前参数的参数