Bitファイルにソフトウェアを埋め込む
74. 作ったソフトウェアを実行するのに、毎回毎回SDKからJTAGダウンロードするのは大変です。
FPGA内部のBlockRAMに収まるサイズのソフトなら、BitStreamにプログラムを埋め込んで、FPGAの起動と同時に実行させることができます。
SDKのプロジェクトでSRCの中にあるlscript.ldをクリックします。
次の図のようなダイアログが開きます。
この中で、Section to Memory Region Mapingを見ると、ddr3_sdram_mt41j256m8xx_15e_S_AXI_BASEADDRになっています。つまり、すべてのコードやデータがDDR3上に配置されています。
DDR3メモリは0xb0000000〜0xbfffffffなので、BitStreamの中には入りません。
75. このddr3_sdram_mt41j256m8xx_15e_S_AXI_BASEADDRをすべて、
microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrlに変更し、保存します。
そして、testapp.elfを削除し、さらにプロジェクトをクリーンしてから再ビルドします。
76. こうして出来上がったELFファイルは、アドレス0x0000〜0x7fffまでの範囲内にすべて収まっています。
これならBitStreamに埋め込んでROM化が可能です。
77. BitStreamに埋め込むには、data2memというツールを使います。
一番簡単な方法は、Eclipseのメニューから、Xilinx Tools→Programming FPGAを実行することです。
Programming FPGAというダイアログが開いたら、Bitstreamを設定し、それからBMMファイルを指定します。
BMMファイルというのは、出来上がったデザインの中でどのBRAMに何のデータが書かれているかを記述したファイルです。BitStreamができているフォルダに自動的に作られているはずです。2つある場合は、ファイル名の最後に_bdが付いている方を選びましょう。_bdのほうはBRAMのロケーションまで指定されています。
Software Configurationのところには、先ほど作られたELFファイルを指定します。
78. Programを押すと、コンソール内でdata2memが起動しているのが見えます。
ELFファイル中のプログラムがBitstreamに格納され、workspace/cpu_hw_platform/download.bitとして作られます。
79. 自動的にこのbitファイルが書き込まて、FPGAが起動すると同時にソフトウェアが走り出します。
80. 自分でdata2memを起動したい場合、SDKのLaunch Shellアイコンをクリックし、コマンドラインプロンプトを開き、コマンドラインから、
data2mem -bm BMMファイル名 -bd ELFファイル名 -bt BITファイル名
のように入力します。
BMMファイルは、BitStreamができているフォルダに自動的に作られているはずです。2つある場合は、ファイル名の最後に_bdが付いている方を選びましょう。_bdのほうはBRAMのロケーションまで指定されています。
具体的には、data2mem -bm c:¥share¥mbtest¥fpga¥edkBmmfile_bc.bmm -bt C:¥chare¥mbtest¥fpga¥main.bit -bd C:¥share¥mbtest¥workspace¥testapp¥Debug¥testapp.elf
と入力すれば十分です。tagオプションや-oオプション、PARTNAMEの指定はしなくても大丈夫です。
これでbitファイルにELFが埋め込まれます。出来上がったbitファイルは、元のファイル名_rp.bitになります。
このmain_rp.bitファイルなら、MITOUJTAGからでも書き込めます。