電気回路/HDL/ModelSim の radix define のバックアップソース(No.1)
更新[[公開メモ]] * ステートマシンのステートを記号で表示したい [#sd720719] ModelSim の wave ウィンドウでは、 刻々と変化する信号線の状態を、 2進数や16進数、アナロググラフなど、 さまざまな形式で表示することができます。 しかし、Verilog で書いたステートマシンのステートを、 分かりやすく記号で表示するのは一筋縄では行きません。 VHDL や SystemVerilog は enum が使えるので、 ステートを enum で記述すればシミュレーション時にそのまま読める形で表示されるのですが、 Verilog に enum は無いので、普通にやるとただの数値として表示されてしまいます。 こんなのを例として考えます。 module trimac_tx ( ... ); ... localparam stIdle = 0; localparam stMem = 1; localparam stTx = 2; localparam UdpChecksum0 = 3; localparam UdpChecksum1 = 4; localparam UdpChecksum2 = 5; localparam UdpChecksum3 = 6; localparam UdpChecksum4 = 7; localparam stDone = 8; localparam stRewound = 9; reg [3:0] state; always @(posedge tx_clk) if ( rst ) begin state <= stIdle; end else case (state) stIdle: if (tx_start) state <= stMem; ... この state を数値ではなく記号で表示する方法として、以下の2つの方法を見つけました。 色分けできることと処理が軽いことを考えると後者がお勧めです。 * 表示用の信号を別に用意する [#kb177b67] http://cafeandverify.blogspot.com/2007/09/verilog-modeenum.html にもあるように、テストベンチ側に表示用の信号を別に用意すれば、 かなり何でもできます。 以下のように、いくつかの状態を1つにまとめて表示するなど、 様々な応用を考えられます。 wire [8*6-1:0] trimac_tx_state = trimac.tx.state == 0 ? "Idle" : trimac.tx.state == 1 ? "Mem" : trimac.tx.state == 2 ? "Tx" : ( 3 <= trimac.tx.state && trimac.tx.state <= 7 ) ? "UdpChecksumX" : trimac.tx.state == 8 ? "Done" : trimac.tx.state == 9 ? "Rewound" : "???"; ModelSim ではテストベンチに SystemVerilog を使えるので、 enum 型に代入するだけでも行けそうです。 * radix define を使う [#k00e70a5] ModelSim の radix define コマンドを使います。 ModelSim の Transcript ウィンドウに以下を打ち込むか、 あるいは *.udo ファイルに以下を記述して読み込むと、 wave の Radix 指定で TrimacTxStates を選択できるようになります。 radix define TrimacTxStates { 4'd0 "Idle", 4'd1 "Mem", 4'd2 "Tx", 4'd3 "UdpChecksum0", 4'd4 "UdpChecksum1", 4'd5 "UdpChecksum2", 4'd6 "UdpChecksum3", 4'd7 "UdpChecksum4", 4'd8 "Done", 4'd9 "Rewound" -default decimal } この方法の良いところは、記号で表示するだけでなく以下のように色も指定できるため、 文字が読めないほど縮小した場合にも、大まかな流れがよく分かります。 radix define TrimacTxStates { 0 "Idle" -color white, 1 "Mem" -color yellow, 2 "Tx" -color yellow, 3 "UdpCrc0" -color yellow, 4 "UdpCrc1" -color yellow, 5 "UdpCrc2" -color yellow, 6 "UdpCrc3" -color yellow, 7 "UdpCrc4" -color yellow, 8 "Done" -color yellow, 9 "Rewound" -color red -default decimal -defaultcolor purple } ~-default と -defaultcolor は、 本来あり得ない 10 以上の数が現れたときに適用されます。 * コメント [#zc826d8f] #comment_kcaptcha
Counter: 15059 (from 2010/06/03),
today: 1,
yesterday: 2