無償ツールで実践する「ハード・ソフト協調検証」(6) ―― 協調シミュレーションを実行する

Verification Enginnerの戯言

tag: 半導体

技術解説 2010年1月15日

無償の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

 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

※ ModelSim AE 6.5bをC:\altera\91にインストールしたと仮定する

 

 -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)を指定します.

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日