MicroBlazeは便利ですが,ちょっと気の利いたプログラムを実行しようとすると,BlockRAMに入りきらなくなってしまって外部メモリ(DDR3やLPDDR)が必要になります.もちろん開発中はSDKで外部メモリにロードして実行すればよいのですが,製品に組み込む場合にはROMなどにプログラムを置いておいて展開,起動する仕組み(ブートローダー)が必要です.
SDK(ISE14.7付属)のサンプルにはBPI ROM用のブートローダのサンプルはありますが,SPI ROM用のブートローダはありません…が,AR#55026にKC705用のSPI ROMを使ったブートローダのサンプルが紹介されいますので,これをMicroBoardでも試してみました.QSPI ROMの#HOLDピンの処置が必要でしたが,概ねAR#55026でシステムの構築ができました.
手順
おおまかな作業手順は次の通りです.
- MicroBlazeシステムを作る (LPDDRの動作周波数の指定に注意)
- QSPIをシステムに追加 (クロックとピンのエクスポート)
- トップのHDLを作成,#HOLD用のピンを追加
- UCFを記述
- bootloaderとアプリケーションプログラムを用意 (リンカスクリプトの設定)
- bootloader.elfをBlockRAMに埋め込む
- アプリケーションプログラムを分割してbinに変換
- FPGAのbitファイル,アプリケーションプログラムをMCSにまとめ,ROMに書く
赤字は,各ステップで特に注意すべき点です.
続きはスライドでご覧ください(クリックするとslidshareのサイトに移動します).
試す場合のリソース一式:microblaze_base.zip
- アプリケーションのソフトは”Hello World”ベースでLEDを点滅させる程度のもの.
- 合成にはEDKが必須です.
- 合成済,コンパイル済のファイルをimages直下に置いています.
コメント