Cmod A7のSPIFlashにSDKのプロジェクトを書き込む

概要

Digilent社のCmodA7というFPGAボードにMicroBlazeを実装したBitstreamとそのSDKプロジェクトをSPI Flashに書き込む方法についてです。

この方法はDigilent社の公式HPに、そのやり方が書いてあるのですが、かなり省略された説明でわかりにくかったため、
分かりにくかったところを追記しようと思います。

基本的にはDigilent社のページを見ながらやって見てください。
How To Store Your SDK Project in SPI Flash [Reference.Digilentinc]

vivadoプロジェクトの作成

公式HPの説明ですと、Vivadoプロジェクトについて
「Before you start; this guide assumes that you already have a Microblaze system built complete with Quad SPI, External Memory, and Uart cores, and that you have the appropriate QSpi mode jumper setting. This tutorial takes place in SDK.」
としか書かれていません。

この部分について実際に作ってみましょう。

プロジェクトの作成

プロジェクト名:任意
ボードファイル:CmodA7-XXT (使う予定のボードに合わせてボードファイルを定義してください。)
でプロジェクトを作成してください。

BlockDesignの作成

BlockDesignの名前は適当につけてください。

まず、MicroBlazeを追加して、Run Block Automationを実行します。
このときの設定は、

Preset None
Local Memory 32kB
Local Memory ECC None
Cache Configuration None
Debug Module Debug Only
Peripheral AXI Port Enabled
Interrupt Controller Checked
Clock Connection New Clocking Wizard

としました。
メモリのサイズは適当です。

私は最初、Interrupt Controllerにチェックマークを入れず、自分でAXI Interrupt Controllerを入れていたのですが、なぜかこれでは後にSDKでエラーになってしまい、
かなり苦労しました。

この後は、画像のようにBoardタブより
・System Clock
・Cell Ram
・QSPI Flash
・Reset
・USB UART
を追加して、Run Connection Automationを実行しました。

次に、AXI UARTとAXI QUAD SPIからInterrupt ControllerにInterrupt信号を接続しましたが、これが必要かはわかりません。。。

ここまで終わったら、Generate Bitstreamを実行します。

公式HPに書いてあるBitstreamの圧縮は任意で行ってください。

SDKプロジェクトの作成

ここは公式HPどおりです。
Cmod-A7では、4MBのn25q032a13ef440fというSPI Flashを使っているため、
FLASH_IMAGE_BASEADDRは0x00300000
Program Flash MemoryのFlash Typeはn25q32-3.3v-spi-x1_x2_x4
に設定するというところに気をつける必要があります。

このような設定にしたところ、SPI FlashからSDKのプロジェクトを読み出すことができるようになりました。

さいごに

結局、Interrput Controllerを今回の方法で設定したらうまくいくようになったんですが、理由はよくわかりません。