2016-07-30 72 views
0

環境変数を使用してVerilogで実行時にマクロを定義したいとします。verilogで環境変数やコマンドラインを使ってマクロの値を設定する方法は?

たとえば、DEBUGマクロが1と定義されている場合にのみ、テキストをファイルに出力したいとします。

`define DEBUG 0 
... 
if(DEBUG) $fwrite(file,"Debug message"); 

どのように私は、コマンドラインからシミュレーションを実行しているか、環境変数を使用している場合1DEBUGの定義をオーバーライドすることができますか?

代わりに、私は未定義のマクロを維持し、私は、シミュレーションを実行するときにマクロDEBUGを定義する必要があります。この場合、ifdef

`ifdef(DEBUG) $fwrite(file,"Debug message"); 

を使用することができます。これは可能ですか?

私はModelsimを使用しています。ありがとう。


EDIT:受け入れ答えは十分です。しかし、私はこの情報を、ここで不安を抱える人にも追加します。

-g<parameter>または-G<parameter>の引数をvsimに設定すると、パラメータの値を設定または上書きできます。 -gはパラメータ値がまだ設定されていない場合にのみ設定し、-Gは値が設定されていても設定します。私はパラメータを使ってシミュレーションの長さを制御すると便利だとわかりました。再コンパイルは必要ありません。

vsim -c work.top -gSIM_END_TIME // Sets value in all scope 
vsim -c work.top -g/top/dut/SIM_END_TIME // Sets value only in the defined scope 

答えて

3

あなたはVLOGコマンドラインオプションを使用してマクロ定義を無効にすることができ+定義+ < MACRO_NAME> [= < macro_text>]

より良いオプションは、マクロを残すことですコマンドラインで定義したかどうかをテストするには、`ifdefステートメントを使用します。

マクロを使用する場合は、マクロ値を変更するたびにソースコードを再コンパイルする必要があります。 Verilogは実行時にコマンドラインオプションをテストするために$test$plusargs$value$plusargsを提供するので、再コンパイルする必要はありません。

関連する問題