FC2カウンター FPGAの部屋 SMMのシミュレーション(NetGenとData2MEMを使用する)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

SMMのシミュレーション(NetGenとData2MEMを使用する)

The Simple MicroBlaze Microcontroller 6(シミュレーション)”で”SMMの問題点はシミュレーションができないことだと思う。実機デバックはできるが、シミュレーションは出来ない。”と書いたが、ひでみさんのブログや”AQUAXIS TECHNOLOGY”を見ていたら、ヒントがあったので、自分でやってみた。

The Simple MicroBlaze Microcontroller 6(シミュレーション)”のシミュレーション環境を使って、もう一度やり直してみた。

1.Simple_MicroBlaze_xapp1141\SMM_Ref\S3A_LCD_Ref\Work フォルダにsimulationフォルダを作成した。
SMM_sim_1_110626.png

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


を実行する。
SMM_sim_3_110626.png

5.smm.v、lmb_bram_wrapper_sim.v、lmb_bram_elaborate_sim.vが生成された。Verilogで書かれたネットリストだ。
SMM_sim_4_110626.png

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ファイルが生成される。
SMM_sim_5_110628.png

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ソースファイルだ。
SMM_sim_2_110626.png

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


SMM_sim_6_110628.png

11.ISimが立ち上がる。適当に信号を入れてみてみると、動いているようだ。下にMicroBlazeのデコード部の波形を示す。openMSP430の様にアセンブラを表示したいと思った。
SMM_sim_7_110628.png

動いていると思う。タイマーとかがあるとシミュレーション時間も長くなるし、バスモデルだけのシミュレーションの方が良い場合も多いと思う。それをクリアしたら、SDKでソフトウェアの実機デバックをする。Spartan-6、Virtex-5、Virtex-6だと、一緒にChipscope Proも使用できるので、更にデバック効率が上がることだろうと思う。

#やっとSMMのシミュレーションが物になりました。結構、いろいろなマニュアルを読んだりして、大変だったが勉強になりました。
  1. 2011年06月28日 19:56 |
  2. SMM
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/1837-e1096f05
この記事にトラックバックする(FC2ブログユーザー)