3

キーワードを使用parameterして状態を定義しています。つまり、RESET=5'b00000です。バイナリ表現の代わりに状態名を印刷したり$display、シミュレーションウェーブビューアに状態名を表示したりする場合、どうすればよいですか?(ご想像のとおり)文字列として出力しようとしても機能しないので、これができるかどうか疑問に思います。

4

3 に答える 3

3

$displayの名前を自動的に作成する方法がわかりませんparameter。ただし、コードを複製してもかまわない場合は、目標を達成するためにtask(または)を作成できます。function

    task show_name_state;
        case (state)
            5'b00000: $display("RESET");
            5'b00001: $display("WAIT");
        endcase
    endtask

    $display(state); show_name_state();

パラメータを認識し、波形ビューアに名前を自動的に表示する機能を備えた(高価な)Verilogデバッガを少なくとも1つ知っています。Verdi(以前のDebussy)nWaveツールでこれを実行できます。

于 2010-02-20T23:54:47.770 に答える
2

シミュレーション中に状態の名前を表示するだけが目標の場合、通常は次のようなことを行います。

`ifdef SIMULATION
reg [127:0] __state__;
case (state)
  STATE_1 : __state__ = "STATE_1";
  STATE_2 : __state__ = "STATE_2";
  default : __state__ = "error";
endcase
`endif


ここで、stateは、問題のパラメーターを持つ状態レジスターです。

于 2010-03-03T05:37:19.500 に答える
1

同じ値を持つ複数のパラメーターが存在する可能性があるため、通常、数値からその値を持つパラメーターの名前に変更することはできません。パラメータはC#defineのようなものです。それらを使用して状態のセットを定義できますが、変数と、可能な状態を表すために使用しているパラメーターのリストとの間に正式な関連付けはありません。以前はこのようにパラメーターを(誤)使用するのが一般的だったより良いオプションがなかったため、SystemVerilogenumはパラメーターメソッドの問題がないタイプを導入しました。使用しているツールについては言及していませんが、ツールがSystemVerilog列挙型をサポートしていると仮定すると、状態値としてはそれがより適切な選択になります。

于 2010-02-20T17:10:19.117 に答える