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.libinclude/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