“参数”和“localparam”之间的区别

时间:2015-05-17 15:46:18

标签: verilog

我正在用Verilog编写一个项目,并希望使用parameter在我的模块中定义一些参数。但是当我阅读一些源代码时,有时会使用localparam而不是parameter

他们之间有什么区别?

1 个答案:

答案 0 :(得分:27)

通常,localparam(添加到Verilog-2001标准)背后的想法是保护localparam的值不被最终用户意外或不正确的重新定义(与{{1}不同}值,这个值不能通过参数重新定义或parameter语句来修改。

基于IEEE 1364-2005(ch.4.10.2):

  

Verilog HDL本地参数与参数相同,只是它们不能通过defparam语句或模块实例参数值赋值直接修改。可以为本地参数分配包含参数的常量表达式,可以使用defparam语句或模块实例参数值赋值来修改这些参数。

此外,在SystemVerilog(IEEE 1800-2012(ch.6.20.4)中):

  

与非局部参数不同,可以在生成块,包,类主体或编译单元范围中声明局部参数。在这些上下文中,参数关键字应该是localparam关键字的同义词。

  可以在模块的parameter_port_list中声明本地参数。在localparam关键字和下一个参数关键字(或列表的末尾,如果没有下一个参数关键字)之间的此类列表中出现的任何参数声明都应是本地参数。此类列表中的任何其他参数声明都应是可以覆盖的非本地参数。

如果您想了解有关此主题的更多信息,我建议您使用Clifford E. Cummings论文" New Verilog-2001 Techniques for Creating Parameterized Models (or Down With `define and Death of a defparam!)"。