MicroBoardのSPI ROMからMicroBlazeプログラムを読んで起動する話

MicroBlazeは便利ですが,ちょっと気の利いたプログラムを実行しようとすると,BlockRAMに入りきらなくなってしまって外部メモリ(DDR3やLPDDR)が必要になります.もちろん開発中はSDKで外部メモリにロードして実行すればよいのですが,製品に組み込む場合にはROMなどにプログラムを置いておいて展開,起動する仕組み(ブートローダー)が必要です.

SDK(ISE14.7付属)のサンプルにはBPI ROM用のブートローダのサンプルはありますが,SPI ROM用のブートローダはありません…が,AR#55026にKC705用のSPI ROMを使ったブートローダのサンプルが紹介されいますので,これをMicroBoardでも試してみました.QSPI ROMの#HOLDピンの処置が必要でしたが,概ねAR#55026でシステムの構築ができました.

手順

おおまかな作業手順は次の通りです.

  1. MicroBlazeシステムを作る (LPDDRの動作周波数の指定に注意)
  2. QSPIをシステムに追加 (クロックとピンのエクスポート)
  3. トップのHDLを作成,#HOLD用のピンを追加
  4. UCFを記述
  5. bootloaderとアプリケーションプログラムを用意 (リンカスクリプトの設定)
  6. bootloader.elfをBlockRAMに埋め込む
  7. アプリケーションプログラムを分割してbinに変換
  8. FPGAのbitファイル,アプリケーションプログラムをMCSにまとめ,ROMに書く

赤字は,各ステップで特に注意すべき点です.

続きはスライドでご覧ください(クリックするとslidshareのサイトに移動します).

試す場合のリソース一式:microblaze_base.zip

  • アプリケーションのソフトは”Hello World”ベースでLEDを点滅させる程度のもの.
  • 合成にはEDKが必須です.
  • 合成済,コンパイル済のファイルをimages直下に置いています.

_2015-09-08_17.36.37

シェアする

  • このエントリーをはてなブックマークに追加

フォローする