When are (System)Verilog parameters calculated?

时间:2016-11-15 16:37:05

标签: parameters verilog system-verilog

Say I define module Foo #(parameter a = 8, parameter b= $clog2(a)) ...

and then instantiate

Foo #(.a(16)) bar (...)

When is default parameter b calculated? Based on the actual value of a or the default value of a? Does instance bar see b=3 or b=4?

1 个答案:

答案 0 :(得分:1)

始终是最终值。

1800-2012 LRM中的 23.10覆盖模块参数部分描述了编译器设置参数值的详细过程。基本上,编译器可以计算出参数值之间的依赖关系,因为它会对可以对参数值进行的允许表达式进行限制。

  

23.10.3参数依赖性

     

可以使用包含其他参数的表达式(例如,word_size)定义参数(例如,memory_size)。但是,无论是通过defparam语句还是通过模块实例化语句覆盖参数,都会有效地用新表达式替换参数定义。因为memory_size取决于word_size的值,所以对word_size的修改会更改memory_size的值。例如,在以下参数声明中,更新word_size,无论是通过defparam语句还是在实例化语句中为定义这些的模块   参数,自动更新memory_size。如果memory_size由于defparam或instantiation语句而更新,则无论word_size的值如何,它都将采用该值。    parameter word_size = 32, memory_size = word_size * 4096;