parameter port listとparameterを宣言すると上書きできない SystemVerilog

はじめに

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で宣言しろってことですかね。

コメント

タイトルとURLをコピーしました