MAX10 Compact品で外部ROMからNiosIIをBootする方法

 ACM-207はMAX10 Compact品を搭載しています。Compact品には下記の特徴があります。

  • 内蔵コンフィギュレーションメモリエリアがひとつ
  • コンフィギュレーション時に内蔵メモリ(OCRAM)の初期化が行えない

 2つ目の理由により、コンフィギュレーションファイルにNiosIIのソフトウェアを含めることが出来ません。
ソフトウェアは別に格納する必要があります。具体的には下記から選択します。

  • 内蔵UFM(User Flash Memory)
  • 外部メモリ

このサイトでは外部メモリにソフトウェアを格納し、Bootする方法をご紹介します。

 ご紹介する内容はALTERA社資料「AN-730 Nios II Processor Booting Methods in MAX 10 FPGA Devices」に紹介されているものです。詳細な情報につきましては資料をご参照ください。
 開発環境はQuartus Prime 16.0.2 を使用しています。

 

内蔵UFM

 ソフトウェアを内蔵UFMに格納できます。実行時に別領域にコピーする・しないの選択が可能です。

  • UFMに格納し、UFM上で実行する
    AN730でOption 1として解説
    最小限のOCRAM領域で動作しますが、UFMをつねにアクセスしますのでパフォーマンスが劣ります
     
  • UFMに格納し、別領域(外部RAM/OCRAM)にコピーして実行する
    AN730でOption 2として解説
    別領域=OCRAMとする場合、あらかじめ余裕のある領域(静的+動的)を確保しておく必要があります

ここでの説明は省略します。設定方法はAN-730を参照してください。

 

外部メモリ

 ソフトウェアを外部QSPIメモリに格納できます。ACM-207は「N25Q032」を搭載しています。実行時に別領域にコピーする・しないの選択が可能です。

  • メモリに格納し、メモリ上で実行する
    AN730でOption 4として解説
    最小限のOCRAM領域で動作しますが、メモリをつねにアクセスしますのでパフォーマンスが劣ります
     
  • メモリに格納し、別領域(外部RAM/OCRAM)にコピーして実行する
    AN730でOption 5として解説
    別領域=OCRAMとする場合、あらかじめ余裕のある領域(静的+動的)を確保しておく必要があります

ここでは後者の設定方法を紹介します。

 

1.QSYSにて「Altera Generic QUAD SPI controller」を配置


<クリックして全体を表示>

 data_master, instruction_masterバスをそれぞれavl_csr, al_memに接続します。
clockの上限が25MHzを越えないようにしてください。ACM-207では30MHzが搭載されていますので、例では「Clock Bridge」を使用しました。

 

2.ProcessorのVectorを設定


<クリックして全体を表示>

 Reset vector memory に spi_controller の alv_mem を接続します。(alv_csrではありません)
Exception vector memory にはOCRAMを設定します。

 

3.「Altera Generic QUAD SPI controller」を設定


<クリックして全体を表示>

 Configuration device type に「N25Q032 ***」を選択します。容量があっていればOKです。

 

4.BSP を設定1


<クリックして全体を表示>

 Ecllipse にてBSP Editorを開き、Mainタブ「Settings - Advanced - hal - linker」にて全てのチェックを外します。

 

5.BSP を設定2


<クリックして全体を表示>

 同BSP Editor にて、Linkerタブを開き内容を確認します。今回の例ではOCRAMでプログラムが実行されるように設定しています。

 

6.HEXファイルを作成


<クリックして全体を表示>

 ソフトウェアのデバッグはツールがOCRAMにソフトウェアをダウンロードしてくれますので外部メモリを意識しなくても大丈夫です。
 ソフトウェアが完成したらプロジェクトを右クリック「Nios II - Make Targets - Build」(またはShift + F9)を開き、「mem_init_generate」を実行します。
プロジェクトのルートフォルダにmem_initディレクトリが作成され、そのなかに<spi_controller名>.hex が作成されています。この例は generic_quad_spi_controller_0.hex となります。

 

7.HEX → POF に変換


<クリックして全体を表示>

 外部メモリにはPOF形式で格納する必要がありますので、先ほど作成したHEXファイルをPOFに変換します。

 quartus.ini が必要です
バイトスワップされたPOFを作成するため「PGMIO_SWAP_HEX_BYTE_DATA=ON」を記載したquartus.iniファイルをQuartusのルートディレクトリまたはプロジェクトディレクトリに保存しておく必要があります。こちらからダウンロードしてください。

 Quartusの「File - Convert Programming Files...」を実行します。それぞれ下記のよう設定しPOFファイルを作成します。

  • Programming file type = pof
  • Configuration device = CFI_32Mb
  • Mode = 1-bit Passive Serial

 

8.インダイレクトデザインを作成


<クリックして全体を表示>


<クリックして全体を表示>

 JTAGとメモリをつなぐためFPGAにインダイレクトデザイン(中継経路)を作る必要があります。
「Altera Parallel Flash Loader」を使用した別プロジェクトを作成しSOFファイルを作成します。N25Q032へのピンアサインはACM-207の製品資料を参照してください。

 

9.ソフトウェアを外部ROMに書き込む

 Quartus Programmerにてインダイレクトデザインをコンフィギュレーションします。


 成功後、デバイスを再認識するとQSPI_32Mbを認識しますので、ソフトウェア(HEXから作成したPOFファイル)を割りつけてプログラムします。

 

10.ハードウェアをMAX10に書き込む

 SOFまたは内蔵コンフィグROMへPOFを書き込み、外部ROMのソフトウェアを正常に読込むかどうかを確認します。

 

下記もご参照ください

 

お問い合わせについて

開発ツールの使い方などは、弊社のサポート外とさせていただいております。
ご担当の代理店様などにお尋ねください。

ソースなどの提供は行っておりません。予めご了承ください。

 


[kw] 2016-11-11 ACM-207 MAX10 Compact NiosII Boot QSPI


[]