ModelSimコマンドライン実行用スクリプトのVHDL版です。
ModelSimは、コマンドラインで直接実行することができます。例えば、次のようなシェル・スクリプト作ってModelSimの処理を記述しておくと、LinuxのターミナルやWindowsのcygwinからコマンドラインで実行できます。
$../bin/run_msim.sh ../scenario/test_1.vhd
シェル・スクリプトの内容は次のとおりです。(このシェル・スクリプトは、サーチパスにModelSimのインストール・ディレクトリが含まれていることを前提としています)
#!/bin/sh
# RTL directory
RTL_DIR="../rtl"
# ステップ1 ワークディレクトリの作成
if [ ! -e ./work ]; then
vlib ./work
fi
sim_file=$1
echo "Test Scenario=" $sim_file
vhdl_files="${RTL_DIR}/mod_a.vhd ${RTL_DIR}/mod_b.vhd ${RTL_DIR}/mod_top.vhd"
# ステップ2 デザインのコンパイル
vcom ${vhdl_files} ${sim_file}
# ステップ3 シミュレーションの実行
vsim -c -keepstdout test_module <<EOF
vcd file dumpvars.vcd
vcd add -r /test_module/*
run -all
quit
EOF
実際に実行できる環境をgithubにおきました。
シェルスクリプトの処理
シェル・スクリプトで行っている処理は、次の3つです。
ステップ1: vlibでワークディレクトリを作成
vlibコマンドでModelSimのワークディレクトリを作成します。
if [ ! -e ./work ]; then vlib ./work fi
ステップ2: vcomでコンパイル
vcomでデザインのコンパイルを行います。必要なVHDLファイルをすべてvcomに渡します。この例では、${vhdl_files}でデザインのファイルを、${sim_file}でテストベンチのファイルを指定しています。
vhdl_files="${RTL_DIR}/mod_a.vhd ${RTL_DIR}/mod_b.vhd ${RTL_DIR}/mod_top.vhd"
vcom ${vhdl_files} ${sim_file}
ステップ3: vsimでシミュレーションを実行
vsimでシミュレーション実行を実行します。ヒアドキュメント(<<EOF)を使うと、vsimに実行コマンドを渡せます。この例では、波形ファイル(vcd)の出力指定と出力範囲の指定(test_module以下の全信号)を行った後、run -allでシミュレーションを開始しています。GUIを使いたい場合は、スクリプトのvsim -c -keepstdoutの部分をvsim -guiにします。
vsim -c -keepstdout test_module <<EOF vcd file dumpvars.vcd vcd add -r /test_module/* run -all quit EOF
Verilog版との違い
Verilog版との違いは、「ステップ2」です。Verilogではvlogを使ってデザインのコンパイルを行いますが、VHDL版ではvcomを使います。vlogでは、モジュールを格納したファイルのサーチパスを-yオプションで指定することでファイルの自動検索が行えますが、vcomではデザインのファイルをすべて明示的に指定する必要があります。

