ModelSim/QuestaSim シミュレーションバッチ実行のすすめ
皆さんはModelSim/QuestaSimで機能検証をする場合にどのように実行されていますか?
最も簡単な実行方法はGUIを使い対話形式でシミュレーションを実行する方法です。
しかし、GUIを使う実行方法には、複数のテストを連続して実行したり、実行後にログや波形ファイルの保存先を変えたり、コードカバレッジデータベースを指定箇所に保存したり、カバレッジマージを実行したりなどと手作業が多く必要となり、実行時に人手を要します。
また手作業によるミスも起こりやすいため、機能検証の自動実行方法を考えられている方も多くいるかと思います。
そこで本ブログでは、このようなときの便利な方法として機能検証のシミュレーションバッチ実行について紹介します。
それでは、はじめましょう。
目次
シミュレーションのバッチ実行方法
シミュレーションのバッチ実行では以下のように行います。
- Windowsスクリプトファイル.batやLinuxシェルスクリプト.csh、Makefile等を用いて
シミュレーションの一連の操作を自動化 - ModelSimマクロファイル.doを用いてModelSim GUIのTranscriptウインドでの実行
.doや.bat/.csh/Makefile等にライブラリ作成、RTL/テストベンチのコンパイル、シミュレーション実行をあらかじめコマンドで記述し、実行します。
この実行形式では1度実行環境ができてしまうと次回以降はスクリプトを実行するだけの処理となり、間違いなく確実に自動実行することができます。
<実行例>
スクリプトsim.bat(Linuxでは.cshなど)を以下のように記述します。
vlib work
vmap work work
vlog and2.v cache.v gate.v memory.v proc.v set.v
vlog top.v
vsim -c top -do “log -r /*; run -all;”
実行方法はTerminal(WindowsではDOSコマンドプロンプト)などでスクリプト名を入力します。
sim.bat
ライブラリ作成とマッピング、RTL/テストベンチのコンパイル、シミュレーション実行と処理が自動で実行されます。
また、シミュレーション実行はスクリプトファイル1つで連続して実行することも可能です。
:
vlog tb_test1.v tb_test2.v tb_test3.v
vsim -c tb_test1 -do “log -r /*; run -all;” -l test1.log -wlf test1.wlf
vsim -c tb_test2 -do “log -r /*; run -all;” -l test2.log -wlf test2.wlf
vsim -c tb_test3 -do “log -r /*; run -all;” -l test3.log -wlf test3.wlf
実行後に以下のコマンドで波形ファイルを開き確認します。
vsim -view vsim.wlf
GUIが起動しますので確認したい波形を表示します。
弊社とご契約中のお客様はウェビナー「ModelSimウェビナー バッチ実行編」にご参加いただくことで、より詳細に学習できます。 |
ウェビナー情報につきましては、定期的にメール配信を行っています。ご登録がお済みでない方は以下のページからお申込みください。定期的にウェビナースケジュールをお送りさせていただきます!
それ以外の方は、こちらのブログ
【入門】ModelSimの使い方 <バッチスクリプト実行>
~ModelSim 2021.1 ModelSim Intel Edition, Microsemi Edition, ModelSim DE/PE/SE, QuestaSim対応版~
をぜひご参照ください。
リンク先には、動画での解説もご用意しています。併せてご確認ください。
シミュレータの制御
さらにバッチ実行ではシミュレータの制御も容易に行えます。
- TCLコマンドexaminを使用し、内部信号の状態やイベントでシミュレータを停止、再開
左右にスクロールしてご覧ください
while { [examine /tb/dut/pcnt] != 32'hF000FFFF} {run 5ms;}
- verilogの$value$plusargsを使用した入力パターンの変更
― テストパターンをファイルから読み込んでいる場合に実行時に指定が可能左右にスクロールしてご覧くださいvsim -c -do run.do +INPUT_FILE_NAME=test_pat1.txt vsim -c -do run.do +INPUT_FILE_NAME=test_pat2.txt :
- TCLコマンドforceコマンドを使い異常値を印加し異常時を模したテストの実行
左右にスクロールしてご覧ください
run 1ms; force -freeze /tb/dut/reg_a 32'h0000FFFF; run 1ms; noforce /tb/dut/reg_a
シミュレーションのバッチ実行メリット
バッチ実行には以下のようなメリットがあります。
- 繰り返し実行されるシミュレーションを自動化
RTL修正時のリグレッションテスト再実行をコマンド1つで自動化
- 社内の運用ルールや実行手順を標準化でき経験の浅い方でもミスなく実行できる
ログファイルや波形ファイル、カバレッジデータベースの保存場所とファイル名などをミスなく自動で保存
- 実行内容の履歴が残せる
読み込んだRTLや使用したテストベンチ、いつどのバージョンで実行したかなどの情報が残せる
- 夜間や休日に多数のテストを順番に実行でき、ライセンス使用効率を上げられる
長時間のシミュレーションや多数のテストベンチを繰り返し夜間や休日にまとめて実行できる
- ModelSimDE、Questa Base/Core/Primeではバッチ実行とデバッグ(波形ビュア)のライセンスを有効活用できる
1ライセンスでバッチシミュレーションを連続実行しながら終了したシミュレーション結果の波形を確認することが可能
バッチ実行には多数のコマンドやコマンドオプションの使いこなしが必要です。
ツール付帯のマニュアルは数百ページのボリュームになり、すべての内容を把握することは不可能に近いです。そこで頻繁に使用されるコマンドやコマンドオプションをまとめたコマンド一覧を作成しました。以下のページからダウンロードできますのでご参照ください。
まとめ
バッチ実行は一度覚えてしまえばシミュレーション実行を自動化でき、また細かなシミュレータの制御も可能になります。またModelSimDE/QuestaSimではライセンスを有効に活用することもできますので是非ご活用ください。
最後までご覧いただきありがとうございました。