(VHDL版の記事はこちら)
QuartusII ウェブエディシションに含まれているModelSim Altera Starter Editionは、ライセンス不要のVerilog/VHDLシミュレータです。
無償で利用できるシミュレータの中で、SystemVerilogが部分的にサポートされているのが特徴の1つです。
ModelSimは、GUIまたはコマンドラインから実行できます。
例えば、次のrun_msim.shのようなシェル・スクリプト作ってModelSimの処理を記述しておくと、LinuxのターミナルやWindowsのcygwinからコマンドラインで実行できます。
$../bin/run_msim.sh ../scenario/test_1.v
run_msim.shの内容は次のとおりです。(このシェル・スクリプトでは、サーチパスにModelSimのbinディレクトリが含まれていることを前提としています)
#!/bin/sh # RTL directory RTL_DIR="../rtl" # ステップ1 ワークディレクトリの作成 if [ ! -e ./work ]; then vlib ./work fi sim_file=$1 echo "Test Scenario=" $simfile # ステップ2 デザインのコンパイル vlog \ +notimingchecks \ -sv \ -y ${RTL_DIR} \ +incdir+${RTL_DIR}/+ \ +libext+.v+ \ ${sim_file} # ステップ3 シミュレーションの実行 vsim -c -keepstdout test_module <<EOF run -all EOF
実際に実行できる環境をgithubにおきました。
GitHub - Kenji-Ishimaru/msim-sample-verilog: ModelSim verilog simulation environment sample
ModelSim verilog simulation environment sample. Contribute to Kenji-Ishimaru/msim-sample-verilog development by creating...
シェルスクリプトの処理
シェル・スクリプトで行っている処理は、次の3つです。
ステップ1: vlibでワークディレクトリを作成
vlibコマンドでModelSimのワークディレクトリを作成します。
if [ ! -e ./work ]; then vlib ./work fi
ステップ2: vlogでコンパイル
vlogでデザインのコンパイルを行います。-yや+incdirのオプションを使うと、指定したディレクトリから必要なモジュールをサーチしてコンパイルしてくれるので便利です。
vlog \ +notimingchecks \ -sv \ -y ${RTL_DIR} \ +incdir+${RTL_DIR}/+ \ +libext+.v+ \ ${sim_file}
ステップ3: vsimでシミュレーションを実行
vsimでシミュレーション実行を実行します。ヒアドキュメント(<<EOF)を使うと、vsimにrun -allなどの実行コマンドを渡せます。GUIを使いたい場合は、スクリプトのvsim -c -keepstdoutの部分をvsim -guiにします。
vsim -c -keepstdout test_module <<EOF run -all EOF
コマンドライン実行の利点
個人的には、次のような理由でコマンドライン実行を多用しています。
- 実行手順を簡略化できる
- GUIが起動するまでの待ち時間がない
- テストベンチの最上位ファイルを引数で渡せば、テスト内容の変更が容易