”The Simple MicroBlaze Microcontroller 6(シミュレーション)”のシミュレーション環境を使って、もう一度やり直してみた。
1.Simple_MicroBlaze_xapp1141\SMM_Ref\S3A_LCD_Ref\Work フォルダにsimulationフォルダを作成した。
2.コマンドプロンプトを起動して、ISEのインストールフォルダ(Xilinx\13.1\ISE_DS)のsettings32.bat(64ビット版の方はsettings64.bat?)を実行して、環境関数をセットする。
3.Simple_MicroBlaze_xapp1141\SMM_Ref\S3A_LCD_Ref\simulationに移動する。
4.まずは、NetGenコマンドでsmm.ngc をVerilogファイルに変換する。コマンドプロンプトで
%XILINX%\bin\nt\netgen -sim -ofmt verilog -mhf -w ..\ise\smm.ngc
を実行する。
5.smm.v、lmb_bram_wrapper_sim.v、lmb_bram_elaborate_sim.vが生成された。Verilogで書かれたネットリストだ。
6.次にData2MEMで命令ROM用の初期化データ、つまりソフトウェアが入った初期化データを生成する。コマンドプロンプトで
%XILINX%\bin\nt\data2mem -bm ..\ise\smm_bd.bmm -bd ..\sdk\empty_application_0\Debug\empty_application_0.elf -bx ./
を実行する。”-bx”オプションを付けるとmemファイルが生成される。
7.4つのmemファイルが生成された。そのうちのlmb_bram_combined_0.mem の一部を下に示す。このファイルは、lmb_bram_elaborate_sim.v のRAMB16BWEに書かれている
.INIT_FILE ( "lmb_bram_combined_0.mem" ),
に従って、RAMB16BWEプリミティブの初期化データとして読み込まれる。
@00000014
31 30 30 B9 80 B9 30 B8 E0 30 BE F9 B8 E9 F8 99 80 E8 E8 BE 30 B0 30 BC 30 99 80 30 F0 E9 B6 30
8.次にISimのプロジェクトファイル (lcd_ref_tb.prj) を作る。プロジェクトに入るHDLソースファイルとしては、lcd_ref.vhd、SMM、lcd_ctlr.vhd、timer.vhdとテストベンチのlcd_red_tb.vhd、そして先ほど生成したVerilogソースファイルだ。
verilog work smm.v
verilog work lmb_bram_wrapper_sim.v
verilog work lmb_bram_elaborate_sim.v
verilog work lcd_test_rom_init.v
vhdl work ../src/timer.vhd
vhdl work ../src/lcd_ctlr.vhd
vhdl work ../src/lcd_ref.vhd
vhdl work ../Work/src/Simulation/lcd_ref_tb.vhd
verilog work glbl.v
9.fuseコマンドでコンパイルを行う。下にコマンドを示す。
%XILINX%\bin\nt\fuse work.lcd_ref_tb work.glbl -L unisims_ver=K:\HDL\Xilinx\13.1\ISE_DS\ISE\verilog\hdp\nt\unisims_ver -L unisim=K:\HDL\Xilinx\13.1\ISE_DS\ISE\vhdl\hdp\nt\unisim -o lcd_ref_tb.exe -prj lcd_ref_tb.prj
10.コンパイルが正常終了したら、出来上がったlcd_ref_tb.exeを-guiモードで起動する。
lcd_ref_tb.exe -gui
11.ISimが立ち上がる。適当に信号を入れてみてみると、動いているようだ。下にMicroBlazeのデコード部の波形を示す。openMSP430の様にアセンブラを表示したいと思った。
動いていると思う。タイマーとかがあるとシミュレーション時間も長くなるし、バスモデルだけのシミュレーションの方が良い場合も多いと思う。それをクリアしたら、SDKでソフトウェアの実機デバックをする。Spartan-6、Virtex-5、Virtex-6だと、一緒にChipscope Proも使用できるので、更にデバック効率が上がることだろうと思う。
#やっとSMMのシミュレーションが物になりました。結構、いろいろなマニュアルを読んだりして、大変だったが勉強になりました。