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?
答案 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;