ModelSim Xilinx Edition (XE)でVMMを使ってみる
ModelSim Xilinx Edition (XE) Edition-III(6.4b)をMINGW32/MSYS上で動作させれば、VMM(1.1.1aで動作確認済み)が利用できます。
注意)、vmm-1.1.1aは、ModelSim 6.4b以降で動作可能なので、ModelSim Altera Edtion (AE) 6.4aでは利用できません。
ModelSIm Altera Edtion の最新版は、6.5bになりましたので、vmm-1.1.1aの動作可能になりました。
0、はじめに
MSYSは1.0.11をインストール後、下記のregexパッケージが必要です。
ダウンロードは、ここをクリック
MSYS regex
regex-1.20090805-1
libregex-1.20090805-1-msys-1.0.11-dev.tar.lzma
libregex-1.20090805-1-msys-1.0.11-dll-1.tar.lzma
ダウンロード後、MSYSのディレクトリに2つのファイルをコピーし、下記のコマンドでパッケージをインストールします。
% lzma -dc libregex-1.20090805-1-msys-1.0.11-dev.tar.lzma | tar xvf -
% lzma -dc libregex-1.20090805-1-msys-1.0.11-dll-1.tar.lzma
1、VMM-1.1.1aをダウンロードする
ModelSimで動作可能なVMM-1.1.1aをOVM Worldからダウンロードし、適当なディレクトリに展開します。
2、vmm_str_dpi.dllを作成する
VMM 1.1.1aでは、DPIライブラリ(vmm_str_dpi)のWindows版は含まれていません。
そこで、MINGW32のgccを使って、DPIライブラリ(vmm_str_dpi.dll)を作成します。
まず、vmm-1.1.1a/shared/libディレクトリの下にwin32というディレクトリを作成します。
このディレクトリに、ModelSim XE Edition-IIIをインストールしたディレクトリのwin32oem/mtipli.libとinclude/svdpi.hをコピーします。
また、vmm-1.1.1a/sv/std_lib/vmm_str_dpi.cもコピーします。
この時点で、3つのファイルをこのディレクトリ(vmm-1.1.1a/shared/lib/win32)にコピーしたことになります。
mtipli.lib
svdpi.h
vmm_str_dpi.c
次に、以下の内容のcompileというファイルを作成します。
ここから===========================================================
#!/bin/sh
gcc -c -I/include vmm_str_dpi.c
gcc -shared -Bsymbolic -o vmm_str_dpi.dll vmm_str_dpi.o -L. -lmtipli -L/lib -lregex
ここまで===========================================================
compileファイルを実行可能にします。
% chmod +x compile
そして、compileファイルを実行します。
% ./compile
エラーは無ければ、vmm_str_dpi.dll というファイルが生成されます。
ここでregexパッケージが正しくインストールされないと、regXXXというものが無いというエラーが表示されます。
なお、自分でvmm_str_dpi.dllファイルを作るのが面倒な人は、下の方にある添付ファイルから自己責任でダウンロードして使ってください。
3、例題で動作確認をする
例題(vmm-1.1.aa/sv/examples/std_lib/wishboneディレクトリ)に移動します。
% cd vmm-1.1.1a/sv/examples/std_lib/wishbone
このディレクトリのrun_questa.shファイル内のVMM_DPI_DIRの値を変更します。
変更前 : VMM_DPI_DIR=$VMM_HOME/shared/lib/linux_x86_64
変更後 : VMM_DPI_DIR=$VMM_HOME/shared/lib/win32
次に、vsimコマンドがModelSim XE Edition-IIIであるかどうかを確認します。
(ModelSim AE 6.4a Starterがインストールされていて、パス(PATH)が先の場合は、ModelSim XE Edition-IIIになるようにパス(PATH)を変更してください)
% which vsim
変更したら、run_questa.shファイルを実行してみます。
% sh run_questa.sh
コンパイル(vlogコマンド)が成功し、シミュレーション(vsimコマンド)で次のようなエラーが表示されたらOKです。(このログは、test.logファイルに出力されます。)
randomize()関数は、ModelSimではサポートしないのでエラーになってしまいます。
# vsim -do {set SolveArrayResizeMax 5000; run -all; quit} -l test.log -c -sv_lib ../../../../shared/lib/win32/vmm_str_dpi top test
# Loading sv_std.std
# Loading work.test_sv_unit
# Loading work.top
# Loading work.wb_if
# Loading work.test
# Loading .\../../../../shared/lib/win32/vmm_str_dpi.dll
# set SolveArrayResizeMax 5000
# 5000
# run -all
# ** Fatal: test.sv(61): Unable to check out verification license for randomize() feature.
# Time: 0 ps Iteration: 0 Process: /test/#INITIAL#136 File: test.sv
# Fatal error in Function gen_cfg at test.sv line 61
#
# HDL call sequence:
# Stopped at test.sv 61 Function gen_cfg
# called from ../../../../sv/std_lib/vmm_env.sv 167 Function build
# called from test.sv 70 Function build
# called from ../../../../sv/std_lib/vmm_env.sv 191 Task reset_dut
# called from ../../../../sv/std_lib/vmm_env.sv 211 Task cfg_dut
# called from ../../../../sv/std_lib/vmm_env.sv 118 Task pre_test
# called from ../../../../sv/std_lib/vmm_env.sv 84 Task run
# called from test.sv 138 Module test
#
# quit