はじめに
VerilogではParameterは以下のように宣言できます。
parameter
module sample1();
parameter A = 1;
parameter B = 2;
また、SystemVerilogではParameterをPortのように宣言することもできます。
parameter port list
module sample #(
parameter A = 0,
parameter B = 1
)
これを同時に行うこともできます。
parameter + parameter port list
module sample #(
parameter A = 0
)();
parameter B = 1;
パラメータを上書きする
parameterは上位モジュールで上書きができます。
parameter もparameter port list 問題なく上書きできますが、混在していると上書きできませんでした。
parameter + parameter port listで上書き
sample#(
.A(0), // OK
.B(1) // NG
) i_sample;
LRMを確認してもそんな仕様は見つからなかりませんでした。
シミュレータ依存なんですかね。
まとめ
parameterとparameter port listを同時に使ったときの落とし穴でした。
parameterはparameter port listで宣言して、それ以外はlocalparamで宣言しろってことですかね。
コメント