Verilogパラメーターキーワードを使用します
-
21-09-2019 - |
質問
パラメーターキーワードを使用して、状態を定義します。つまり、リセット= 5'B00000です。 $ displayを使用して、バイナリ表現の代わりに状態名を印刷するか、シミュレーションWaveビューアに状態名を表示する場合、どうすればよいですか?弦としてそれを印刷しようとするのはうまくいきません(ご想像のとおり)ので、これができるかどうか疑問に思います。
解決
私は自動的に方法を知りません $display
aの名前 parameter
. 。ただし、コードの複製を気にしない場合は、 task
(また function
)あなたの目標を達成するために:
task show_name_state;
case (state)
5'b00000: $display("RESET");
5'b00001: $display("WAIT");
endcase
endtask
$display(state); show_name_state();
私は、パラメーターを認識し、波形ビューアーに名前を自動的に表示する機能を備えた少なくとも1つの(高価な)Verilogデバッガーを知っています。
他のヒント
あなたの目標が単なるシミュレーション中に状態の名前である場合、私は通常、次のようなことをします
`ifdef SIMULATION
reg [127:0] __state__;
case (state)
STATE_1 : __state__ = "STATE_1";
STATE_2 : __state__ = "STATE_2";
default : __state__ = "error";
endcase
`endif
ここで、州は問題にパラメーターを持っている州登録簿です。
同じ値を持ついくつかのパラメーターがある可能性があるため、一般に数値からその値のパラメーターの名前に移動することはできません。パラメーターはcのようなものです #define
s;それらを使用して一連の状態を定義できますが、変数と、可能な状態を表すために使用しているパラメーターのリストとの間に正式な関連性はありません。より良い選択肢がなかったので、以前はこの方法でパラメーターを使用する(MIS)を使用することに共通していましたが、SystemVerilogは導入しました enum
パラメーターメソッドの問題がないタイプ。使用しているツールについては言及していませんでしたが、ツールがSystemVerilog enumのタイプをサポートしていると仮定すると、それは状態価値に適しています。