は私が module Foo #(parameter a = 8, parameter b= $clog2(a)) ...
(システム)Verilogパラメータはいつ計算されますか?
を定義し、算出したbのデフォルトパラメータである場合には
Foo #(.a(16)) bar (...)
のインスタンスを言いますか? aの実際の値またはaのデフォルト値に基づいて?インスタンスバーはb = 3またはb = 4を参照していますか?
は私が module Foo #(parameter a = 8, parameter b= $clog2(a)) ...
(システム)Verilogパラメータはいつ計算されますか?
を定義し、算出したbのデフォルトパラメータである場合には
Foo #(.a(16)) bar (...)
のインスタンスを言いますか? aの実際の値またはaのデフォルト値に基づいて?インスタンスバーはb = 3またはb = 4を参照していますか?
常にの最終の値です。
セクション23.10モジュールのパラメータを無効にする1800-2012 LRMのには、コンパイラがパラメータ値を設定するための手順が記述されています。基本的に、コンパイラはパラメータ値との依存関係を把握することができます。これは、パラメータ値に対する許容可能な式に制限があるためです。
23.10.3依存
パラメータ(例えば、MEMORY_SIZE)が他のパラメータ(例えば、word_size)を含む式で定義することができるパラメータ。ただし、defparamステートメントまたはモジュール・インスタンシエーション・ステートメントによるパラメーターのオーバーライドは、パラメーター定義を新しい式で置き換えます。 memory_sizeはword_sizeの値に依存するため、word_sizeを変更するとmemory_sizeの値が変更されます。たとえば、次のパラメータ宣言では、defparam文またはこれらの パラメータを定義したモジュールのインスタンシエーション文でword_sizeを更新すると、memory_sizeが自動的に更新されます。 memory_sizeがdefparamステートメントまたはインスタンス化ステートメントのいずれかによって更新された場合、word_sizeの値にかかわらず、その値になります。
parameter word_size = 32, memory_size = word_size * 4096;
この回答またはリンクされた仕様から明らかに質問に対する直接的な答えは何ですか?関連する抜粋を指摘できますか?ボトムラインは、答えはb = 3またはb = 4であり、なぜLRMによればですか? – ThePopMachine
特に23.10.3項のパラメータ依存性と 'word_size'を使用した例を参照してください –
私は関連セクションを引用する自由を取った。 – ThePopMachine
シミュレーションを実行すると簡単にこの質問に答えることができます。 – toolic