無償ツールで実践する「ハード・ソフト協調検証」(6) ―― 協調シミュレーションを実行する
無償のSystemVerilog対応シミュレータと無償のFPGA用オンチップ・バス・モデルを用いて,ハードウェア・ソフトウェア協調検証の一手法について解説する連載の第6回である.今回は,SystemVerilogコードとC言語プログラムをそれぞれコンパイルし,協調シミュレーションを実施する.また,ここで作成したSystemVerilogコードを,SOPC Builderのライブラリとして使えるように修正する.(編集部)
技術解説シリーズ「無償ツールで実践する『ハード・ソフト協調検証』」 第1回 SystemVerilogのDPI-C機能 第2回 テスト・プログラムはC言語で書く 第3回 Avalonインターフェースと検証用モデル 第4回 SystemVerilog側のDPI-Cの記述を作成する 第5回 テスト・プログラムの作成とBFMのコードの生成 |
12.シミュレーションの準備
では,シミュレーションの準備を行います.SOPC Builderが生成したシミュレーション用ディレクトリ(Quartus IIを起動したディレクトリにavalon_bfm_simというディレクトリが生成される)に,以下のファイルを解凍して配置してください.
Avalon_BFM_DPI_C.zipを展開すると,progというディレクトリが生成されます.このディレクトリに入っているのが,今回,Avalon BFMをDPI-Cで利用するために必要なファイルです.
シミュレーションを行うための最初の作業は,シミュレーション用コマンド・ファイル(set_sim.do)においてDPI-Cを利用できるようにすることです.set_sim.doをset_dpi_sim.doにコピーします(修正したset_dpi_sim.doファイルは,Avalon_BFM_DPI_C.zipを展開したprogディレクトリにも存在する).
set_dpi_sim.doファイル内の以下の2点を変更します.
まず,vsimコマンドの引き数に"-sv_root prog -sv_lib dpi_main"と"tb_prog"を追加します.
if { [ string match "*ModelSim ALTERA*" [ vsim -version ] ] } { alias _vsim { vsim -t ps +nowarnTFMPC -sv_root prog -sv_lib dpi_main -L lpm_ver -L sgate_ver -L altera_mf_ver -L altgxb_ver -L cycloneiv_pcie_hip_ver -L cycloneiv_hssi_ver test_bench tb_prog } } else { alias _vsim { vsim -t ps +nowarnTFMPC -sv_root prog -sv_lib dpi_main test_bench tb_prog } } |
"-sv_root prog"では,DPI-CのC言語側のオブジェクト・ファイルが存在するディレクトリ名を指定します."-sv_lib dpi_main"では,DPI-CのC言語側のオブジェクト・ファイル名(ただし,拡張子は除く)を指定します."tb_prog"では,DPI-CのSystemVerilog側のモジュール名をシミュレーションのトップ記述として指定します.
次に,vlogコマンドの引き数に"-sv"と"prog/tb_prog.sv"を追加します.
vlog -sv +incdir+.. ../avalon_bfm.v prog/tb_prog.sv ; |
"-sv"では,コンパイルするファイルがSystemVerilogのコードであることを指定します."prog/tb_prog.sv"では,DPI-CのSystemVerilog側のコードのファイル名を指定します.
13.SystemVerilogコードをコンパイルする
ModelSim AE 6.5b(ModelSim AEの概要については本連載の第8回で説明する予定)を起動し,プロジェクト・ファイル(avalon_bfm_sim.mpf)をロードし,set_dpi_sim.doマクロを実行します.set_dpi_sim.doマクロの実行が終了したら,コンパイル・コマンドs(set_dpi_sim.doマクロでaliasにて定義している)を実行し,関連するファイルをコンパイルします.
コンパイル後にシミュレーションが開始されますが,DPI-Cのライブラリが存在しないので,エラーで終了します.ここで一度,ModelSim AE 6.5bを終了します.
ModelSim AEでは,SystemVerilog側のDPI-Cに関連するコードをC言語側で利用できるようにするためのファイル(exportobj.obj)を生成する必要があります.このexportobj.objファイルを生成するには,MSYS(MSYSについても本連載の第8回で説明する予定)上でコマンドを実行します.
% vsim -c -dpiexportobj prog/exportobj.obj test_bench tb_prog |
vsimコマンドをコマンド・ラインで実行しなければならないので,-cオプションを指定します.次の-dpiexportobjオプションはexportobj.objを生成するためのもので,引き数のprog/exportobj.objに生成されます.最後の"test_bench tb_prog"はSystemVerilog側のDPI-Cに関連するトップ記述を指定します.このコマンドを実行すると,prog/exportobj.objが生成されます.
14.C言語プログラムをコンパイルする
C言語プログラムのコンパイルには,MSYS/MinGWのgccを使います(MSYS/MinGWについては,本連載の第8回で説明する予定).
まず,コンパイルします.
% gcc -c dpi_main.c |
次はライブラリ化です.
% gcc -shared -o dpi_main.dll dpi_main.o exportobj.obj \/c/altera/91/modelsim_ase/win32aloem/mtipli.dll |
-sharedはライブラリを生成するためのオプションです.-o dpi_main.dllでは,生成するライブラリ名(dpi_main.dll)を指定します(Windowsのライブラリの拡張子は.dllである).dpi_main.o exportobj.objはオブジェクト・ファイルです./c/altera/91/modelsim_ase/win32aloem/mtipli.dllは,ModelSim AE 6.5bのライブラリ(mtipli.dll)を指定します.