無償ツールで実践する「ハード・ソフト協調検証」(6) ―― 協調シミュレーションを実行する
15.シミュレーションを行う
ModelSim AE 6.5bを起動し,プロジェクト・ファイル(avalon_bfm_sim.mpf)をロードし,set_dpi_sim.doマクロを実行します.set_dpi_sim.doマクロの実行が終了したら,シミュレーション・コマンド_vsim(set_dpi_sim.doマクロでaliasにて定義している)を実行し,シミュレーションが起動してロードされます.ここで,波形コマンド(wave.do)を実行します.wave.doファイルはAvalon_BFM_DPI_C.zipの中にあります.
do wave.do |
波形コマンド(wave.do)を実行したあと,シミュレーションを開始します.
シミュレーションは,tb_progモジュール(tb_prog.sv)のinitial文を実行し,
dpi_main(); |
で$finishシステム・タスクが実行されると,シミュレーション終了のダイアログが表示されます.ここで[No]ボタンをクリックします([Yes]ボタンをクリックするとModelSim AE 6.5bが終了してしまうので要注意).
[No]ボタンをクリックしてシミュレータが停止したあと,波形を見ると,ライト/リードのサイクルが3回繰り返されています.
16.Nios CPUを使ったときとの比較
Avalonインターフェースを持つ回路を検証する方法としては,ここで紹介したAvalon BFM + DPI-Cによる方法のほかに,Nios CPUによる方法があります.どちらもC言語によるプログラムにて,Avalonインターフェースを持つ回路を検証できます.しかし,Nios CPUによる方法では,Nios CPUがRTL記述であるため,Nios CPUを実行するためにシミュレーションに時間がかかります.また,テスト・プログラムのすべてがNios CPU上で実行されるので,バス・アクセスに関係ない部分のコードもNios CPUで実行せざるをえません.例えばデータの比較やエラー・メッセージ部分などをNios CPUで実行すると非常に時間がかかり,本来確かめたい部分であるAvalonインターフェース部分へのアクセスのコードに到達するまでに多くのシミュレーション時間が必要になります.
連載第5回の「10.テスト・プログラムを書いてみる」で説明したテスト・プログラム(test_8関数)を見てみましょう.この関数をDPI-Cで実行すると,バス・サイクルとして,bfm_write8,bfm_read8,bfm_nopの三つの関数だけでシミュレーション時間を進める部分になり,それ以外の部分はC言語のプログラム,つまりシミュレータの一部として実行されます.一方,Nios CPUを用いた場合は,test_8関数のすべてがNios CPU上で実行されます.特にprintf文をNios CPUで実行すると,非常に長いシミュレーション時間が必要になります.
int test_8( void ){ addr = 0x00000053; |
17.ライブラリ化する
今回作成したtb_prog.svを,SOPC Builderのライブラリとして使えるように変更していきます.ライブラリ名はavalon_cpuです.tb_prog.svファイルをavalon_cpu.svファイルにコピーします.
変更する点は次の二つです.
- モジュール名をtb_progからavalon_cpuに変更する
- BFMマクロを変更する
リスト9 変更前の記述(tb_prog)
module tb_prog; timeunit 1ns; `define BFM test_bench.DUT.the_mm_master_bfm_0.mm_master_bfm_0 ........ endmodule : tb_prog |
リスト10 変更前の記述(avalon_cpu)
module avalon_cpu; timeunit 1ns; `define BFM cpu ........ endmodule : avalon_cpu |
次にavalon_cpuモジュールにインターフェース信号を追加し,Avalon Memory Mapped Master BFMをインスタンスします.
リスト11 インターフェース信号とインスタンス
module avalon_cpu ( input wire clk, ); altera_avalon_mm_master_bfm #( .AV_ADDRESS_W (32), ) `define BFM cpu endmodule : avalon_cpu |
この時点で,avalon_cpuモジュールはDPI-C経由でC言語のテスト・プログラムが利用できるAvalon BFMになりました.