FC2カウンター FPGAの部屋 VHDLでModelSimのシミュレーションを終了する方法
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

VHDLでModelSimのシミュレーションを終了する方法

Verilogでシミュレーションを終了させる方法としてはシステム・タスクの$finish があり、また停止させるシスタム・タスクとしては$stop がある。VHDLでは、シミュレーションを停止または終了させる明確な文がないが、assert文を使用してシミュレーションを停止させることができる。つまり、ModelSim で"run 3ms"などのコマンドを実行するときは、3msで終了するが、VHDLで普通に書くと"run -all"で停止させるにはbreakする必要がある。これを、Verilogで$finish や$stop で停止するようにVHDLでもしたいということだ。

PS/2キーボードインターフェース用テストベンチ(procedure使用)”を例にとると、ps2read_tb.vhdの一番下のプロセス文は下のように書いてある。

    process begin
        wait for 80 ns; -- 1クロック分リセット
        
        reset <= '0'; -- リセット解除
        PS2_SigGen(x"1C", ps2clk, ps2data);
        PS2_SigGen(x"32", ps2clk, ps2data);
    end process;


これを下のように変更する。

    process begin
        wait for 80 ns; -- 1クロック分リセット

        reset <= '0'; -- リセット解除
        PS2_SigGen(x"1C", ps2clk, ps2data);
        PS2_SigGen(x"32", ps2clk, ps2data);
        wait for 40 us;
        assert (false) report "Simulation End!" severity failure;
    end process;


assert文は次のcondition が偽の時、report節に書いてあるメッセージを出力する。severity節は重大性を表す。ここではfailure となっている。このassert文はconditionがfalse なので、必ずfailureレベルでメッセージを出力する。これでシミュレーションが停止する。
ModelSimのSimulateメニューのRuntime Options... を選択するとRuntime Optionsダイアログが表示される。それのAssertionsタブを見ると、Immediate Assertion Break Severity がFailure にチェックされているから、failureレベルでメッセージを出力する事でシミュレーションが停止する。assert文のseverity levelをfatalにしておくとより確実にシミュレーションが停止するだろう。
VHDL_Sim_Stop_100326.png

2010/03/28:追記
assert文のseverity levelをfatalにしておくと下のようなエラーが出た。

(vcom-1136) Unknown identifier "fatal".

  1. 2010年03月26日 09:44 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:2

コメント

modelsim の場合、tcl で vhdl の信号の終了条件をひっかけて
break するような技が使えます。
そーすると sim 再開も可能です。
でも、そろそろ vhdl も新規格が出て、
stop たら finish たらサポートするようですねえ。
  1. 2010/03/26(金) 12:51:43 |
  2. URL |
  3. astray #VWFaYlLU
  4. [ 編集 ]

astrayさん、教えていただいて、ありがとうございます。
そうかtcl でbreakできるんですね?次の課題にします。
VHDLもSTOPやFINISHサポートするとのこと、了解しました。
  1. 2010/03/26(金) 13:33:08 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1416-e761c1de
この記事にトラックバックする(FC2ブログユーザー)