BitStreamへのELF埋め込み
FPGAが起動したとき(MicroBlazeが起動したとき)に初期ブートローダを動作させるためには、プログラムがBRAMの初期値として設定されるようにします。
それを行うためには、コンパイル&リンクして出来上がったELFファイルをBitStreamに埋め込まなければなりません。
それを行うツールが、data2memというツールです。使い方は、
data2mem -bm bmmファイル名 -bt 入力BitStreamファイル名 -bd ELFファイル名 -o b 出力BitStreamファイル名
です。
つまり、-btで指定したBitStreamに、-bdで指定したELFを埋め込んで、最後に指定したBitStreamとして書き出すというものです。オプションの-o bは、BitStreamとして出力することを指定しています。
bmmファイルというのは、FPGA内にたくさんあるブロックRAMのどれが、どのアドレスに配置されるものかを示したものです。実際には下記のようなファイルです。
// BMM LOC annotation file. // Copyright (c) 1995-2014 Xilinx, Inc. All rights reserved. ADDRESS_MAP microblaze_0 MICROBLAZE-LE 100 ADDRESS_SPACE microblaze_0_bram_block_combined RAMB32 [0x00000000:0x00007FFF] BUS_BLOCK cpu_i/microblaze_0_bram_block/microblaze_0_bram_block/ramb36e1_0 RAMB32 [31:28] [0:8191] INPUT = microblaze_0_bram_block_combined_0.mem PLACED = X0Y23; cpu_i/microblaze_0_bram_block/microblaze_0_bram_block/ramb36e1_1 RAMB32 [27:24] [0:8191] INPUT = microblaze_0_bram_block_combined_1.mem PLACED = X0Y22; cpu_i/microblaze_0_bram_block/microblaze_0_bram_block/ramb36e1_2 RAMB32 [23:20] [0:8191] INPUT = microblaze_0_bram_block_combined_2.mem PLACED = X1Y28; cpu_i/microblaze_0_bram_block/microblaze_0_bram_block/ramb36e1_3 RAMB32 [19:16] [0:8191] INPUT = microblaze_0_bram_block_combined_3.mem PLACED = X1Y24; cpu_i/microblaze_0_bram_block/microblaze_0_bram_block/ramb36e1_4 RAMB32 [15:12] [0:8191] INPUT = microblaze_0_bram_block_combined_4.mem PLACED = X1Y21; cpu_i/microblaze_0_bram_block/microblaze_0_bram_block/ramb36e1_5 RAMB32 [11:8] [0:8191] INPUT = microblaze_0_bram_block_combined_5.mem PLACED = X0Y21; cpu_i/microblaze_0_bram_block/microblaze_0_bram_block/ramb36e1_6 RAMB32 [7:4] [0:8191] INPUT = microblaze_0_bram_block_combined_6.mem PLACED = X0Y20; cpu_i/microblaze_0_bram_block/microblaze_0_bram_block/ramb36e1_7 RAMB32 [3:0] [0:8191] INPUT = microblaze_0_bram_block_combined_7.mem PLACED = X0Y19; END_BUS_BLOCK; END_ADDRESS_SPACE; END_ADDRESS_MAP;
data2memを使うには?
data2memはXILINXのツールディレクトリに入っているプログラムなので、MS-DOSプロンプトを開いただけではパスが通っていません。
data2memを使うには、スタートメニューのXILINX Design Suite 14.5の中のAccesoriesの中にあるISE Design Suite Command Promptを起動します。
そして、コマンドプロンプトでコマンドを入力します。
data2mem -bm C:/naitou/np1064/artix7-mb_20131011/fpga_withmmu/edkBmmFile_bd.bmm -bt C:/naitou/np1064/artix7-mb_20131011/fpga_withmmu/main.bit -bd C:/naitou/np1064/artix7-mb_20131011/sdkprojects/srecboot_tokuden/Debug/srecboot_tokuden.elf tag microblaze_0 -o b C:/naitou/np1064/artix7-mb_20131011/sdkprojects/cpu_hw_platform/download.bit
各フォルダは適宜書き換えてください。
特に何もメッセージが表示されていなければ成功しています。
これで、上記のコマンドの場合は、C:/naitou/np1064/artix7-mb_20131011/sdkprojects/cpu_hw_platform/フォルダにdownload.bitとして、ELF入りのBitStreamが出力されました。
BitStreamのSPI ROMへの書き込み
できあがったBitStreamをSPI ROMに書き込むには、特電のs6a7jtagwツールを使うと便利です。
パソコンとArtix-7ボードをUSBで接続し、SPI ROMと書かれたほうを選択します。それから、FileOpenで先ほど作ったdownload.bitを指定して、AUTOボタンを押します。
これで、BitStreamがSPI ROMに書き込まれます。
なお、iMPACTを使ってもSPI ROMに書き込むことはできますが、Bit→MCSに変換してから書き込まなければなりません。その手順の説明は割愛します。
SRECBOOTを起動してみる
FPGAとMicroBlazeが正しく生成されていて、SRECBOOTも正しく作られている場合、次の図のように表示されるはずです。SPI ROMにSRECファイルが格納されていれば、そのままロードしてブートするはずです。
ここまでくれば、これまでの手順はすべて間違いなく実行できていたことが確かめられます。