1. 概要(IP 等も含めた構成)
このコンテンツでは、Boot Copier 又は XIP で User I/O Pin に接続した Quad SPI Flash (QSPI Flash) から Nios® II プロセッサーを Boot させる為に、最低限必要な IP の各種パラメーターと BSP Editor の設定、各種ファイルの生成方法を説明します。
XIP と Boot Copier の違いについては、以下のコンテンツを参照ください。
・Nios® II Boot の種類 と 各 Boot Option における設定方法について
また、弊社のホームページにて、同様のコンテンツがサンプルデザインと一緒に用意されておりますので、そちらもご参照ください。
・Nios® II はじめてガイド Quad SPI Flash メモリからの Nios® II ブート方法(MAX® 10 FPGA 開発キット編)
AS Interface の Configuration ROM から Boot させたい場合は、下記コンテンツをご覧ください。
・Nios® II Boot Option ~ EPCQ Flash ~ (AS IF を使用)
Generic Serial Flash Interface Intel® FPGA IP を使用した Boot 方法は下記コンテンツをご参照ください。
・ Nios® II Boot Option ~ Generic Serial Flash Interface を使った Boot 方法 ~
今回、2つのデザインが必要になります。
-
Parallel Flash Loader デザイン(PFL デザイン)
Nios® II SBT で作成した Nios® II のソフトウェア・プログラムを PFL 経由で QSPI Flash に書き込むためのデザイン -
Main デザイン(Nios® II が搭載されているデザイン)
QSPI Flash に格納された Nios® II のソフトウェア・プログラムを実行するための Nios® II が実装されたデザイン
まずは、それぞれのデザインで使用する IP について説明します。
1-1. Parallel Flash Loader デザイン(PFL デザイン)
最低限必要な IP は下記の IP です (インテル® Quartus® Prime 開発ソフトウェア ver 18.1 を例にしています)。
Quartus® Prime で構成すると PFL のRTL Viewer は 図1 のようになります。
図1: PFL の RTL Viewer 例
1-1-1. Parallel Flash Loader Intel® FPGA IP
Parallel Flash Loader Intel® FPGA IP の パラメーター設定は、使用する環境に合わせて、図2、図3 の様に設定します。
図2: PFL のパラメーター設定例
図3: PFL のパラメーター設定例
Parallel Flash Loader を階層設計し、PIN アサインやタイミング制約など各種制約が完成したら、コンパイルを実行し、SOF ファイルを生成しておきます。
1-2. Main デザイン(Nios® II が搭載されているデザイン)
最低限必要な IP は下記の IP です (インテル® Quartus® Prime 開発ソフトウェア ver 18.1 の場合)。
- Nios® II Processor
- On-Chip Memory (RAM or ROM) Intel® FPGA IP: 実行メモリー
-
Generic QUAD SPI controller II Intel® FPGA IP: Boot メモリー ( QSPI Flash ) コントローラー
Platform Designer で構築すると 図4 の様になります。
図4:Platform Designer 構成例
1-2-1. Nios® II Processor
Reset Vector / Exception Vector を設定します。
XIP か Boot Copier のどちらの方式を使用するかによって設定が異なりますので、
「2. QSPI Flash から XIP で実行する際の Nios® II 設定」
「3. QSPI Flash から Boot Copier で実行する際の Nios® II 設定」
を参照ください。
1-2-2. On-Chip Memory (RAM or ROM) Intel® FPGA IP
図5 の様に、ソフトウェア実行に必要な Total Memory Size を設定してください。
図5:On-Chip Memory パラメーターの設定例
1-2-3. Generic QUAD SPI controller II Intel® FPGA IP
使用する QSPI Flash Device と I/O mode を ×4 (Quad) に選択します。
図6: Generic QUAD SPI controller の設定例
その他の Flash Controller に関してはこちらのコンテンツをご参照ください。
・「Embedded Peripherals IP - 各種 Flash Controller の比較」
1-2-4. Quartus® Prime Settings
MAX® 10 以外のデバイスの場合、使用する Configuration 方式の設定を Quartus® Prime の 制約として 図7 の様に設定する必要があります。MAX® 10 デバイスの場合の Configuration scheme は Internal Configuration になります。
Assignment tab → Device → Device and Pin Options → Configuration を開きます。
- Configuration scheme:使用する構成に合わせて、Configuration の形式を設定
- Active serial clock source : FPGA を Configuration するときのクロック周波数を設定
図7:Quartus® Prime の Device and Pin Options
2. QSPI Flash から XIP で実行する際の Nios® II 設定
Nios® II Processor の Reset Vector / Exception Vector の設定や BSP Editor の設定を説明します。
XIP の Boot 方式は、QSPI Flash 上で Nios® II を動作させるので、On Chip RAM 容量を確保できないシステムにおいて、有効な構成です。
.rodata、.rwdata、.exceptions などは alt_load() 関数を使用して、RAM 上にコピーを行います。メインソフトウェアである .text は、QSPI Flash 上に残り、QPIS Flash 上で、Nios® II が実行されます。
XIP 構成のデバッグ方法は、ハードウェア・ブレイクポイントが必須であり、方法については下記のコンテンツで紹介しています。
・Nios® II SBT for Eclipse における Run/Debug Configuration 設定の使い方
2-1. XIP 構成における Nios® II Processor のパラメーター設定
XIP で Nios® II を Boot させる場合、Nios® II Processor の Vectors 設定は 2種類あります。
- Reset Vector / Exception Vector 共に Generic QUAD SPI Controller を設定
- Reset Vector に Generic QUAD SPI Controller 、Exception Vector に On-Chip RAM 又は 外部 RAM を設定
図8:XIP 構成における Nios® II Vectors 設定
Exception Vector に RAM を設定することで、Flash に比べて例外処理を高速に動作させることができ、Nios® II のパフォーマンスを上げることができます。
これで、Platform Designer の設定は終了ですので、Generate を実行し、Quartus® Prime をコンパイルして SOF ファイルを生成しておきます。
2-2. XIP 構成における Nios® II SBT の BSP Editor 設定
Nios® II SBT を起動し、Application と BSP を生成します。
BSP Editor を起動し、Linker Script 設定、alt_load() 関数のオプション設定を行います。
Linker Script は 図9 の様に設定します。
.text Section は、Generic QUAD SPI Controller に設定し、それ以外の Section は On-Chip RAM か外部 RAM に設定します。
図9:XIP 構成における Linker Script 設定
Main タブにある Settings → Advanced → hal → linker の項目で alt_load() 関数のオプションを 図10 の様に設定します。
上記で記載した、2種類ある Nios® II Processor の Vectors 設定によって設定項目が異なります。
図10: XIP 構成における alt_load() 関数 設定
これで XIP 構成を実現するための各種設定が終わりました。
次は、QSPI Flash に持たせる HEX ファイルと Programming ファイル の生成を行っていきますので、4章を参照ください。
「4. Programming File の生成方法 & 書き込み方法」
3. QSPI Flash から Boot Copier で実行する際の Nios® II 設定
Nios® II Processor の Reset Vector / Exception Vector の設定や BSP Editor の設定を説明します。
3-1. Boot Copier 構成における Nios® II Processor のパラメーター設定
Boot Copier を使用して、Nios® II を Boot させる場合、Nios® II Processor の Vectors 設定は 1種類です。
- Reset Vector に UFM、Exception Vector に On-Chip RAM 又は 外部 RAM を設定
図11:Boot Copier を使用する構成における Nios® II Vectors 設定
これで、Platform Designer の設定は終了ですので、Generate を実行し、Quartus® Prime をコンパイルして SOF ファイルを生成しておきます。
3-2. Boot Copier 構成における Nios® II SBT の BSP Editor 設定
Nios® II SBT を起動し Application と BSP を生成します。
BSP Editor を起動し Linker Script 設定、alt_load() 関数のオプション設定を行います。
Linker Script は 図12 のように設定します。
.text Section は On-Chip RAM か外部 RAM に設定し、それ以外の Section も On-Chip RAM か外部 RAM に設定します。
図12 :Boot Copier を使用する構成における Linker Script 設定
そして、Main タブにある Settings → Advanced → hal → linker の項目で alt_load() 関数のオプションを 図13 のように設定します。
Boot Copier の構成は alt_load() を使用しないので、すべてのチェックボックスを外してください。
図13:Boot Copier を使用する構成における alt_load() 関数 設定
これで Boot Copier 構成を実現するための各種設定が終わりました。
FPGA に SOF ファイルを書き込み、Nios® II SBT の Run As にて、ソフトウェアが正しく動作することを確認したら、次は、QSPI Flash に持たせる HEX ファイルと Programming ファイル の生成を行っていきますので、4章を参照ください。
「4. Programming File の生成方法 & 書き込み方法」
4. Programming File の生成方法 & 書き込み方法
Main デザインの各種設定が終了したら、Platform Designer を Generate し、Quartus® Prime をフルコンパイルをして、SOF ファイル を生成します。そして、Nios® II SBT でソフトウェア開発を行った後、Build を実行し、ELF ファイルを生成します。
4-1. HEX ファイルの生成
ELF ファイルの生成が終了したら、図14 のように Nios® II アプリケーションを右クリックし、
Make Targets → Build... → mem_init_generate → Build で HEX ファイルを生成します。
図14: mem_init_generate for HEX
mem_init_generate で生成されるファイルは主に 3種類です。
- meminit.qip:On Chip RAM から Boot する際にプロジェクトに登録して使用
- on_chip_ram.hex:On Chip RAM から Boot する際に RAM の初期値ファイルとして使用
- <generic_quad_spi_controller>.hex: [今回使用]QSPI Flash に格納するソフトウェア・ファイル
4-2. POF ファイルの生成
main デザインの SOF ファイルを含んだ POF ファイルと Nios® II ソフトウェアファイルを含んだ POFファイルを別々に作成します。
図15 の様に、Convert Programming Files で Main デザインの SOF ファイルを含んだ POF ファイル を生成してください。
*MAX® 10 FPGA 以外のデバイスの場合、POF ファイルでなく、JIC ファイルでも Configuration ROM に書き込むことができます。
・FPGA 経由で EPCQ デバイスへプログラミング(JIC プログラミング)
図15:ハードウェア用 POF ファイルの生成
図16 のように、Convert Programming Files で Nios® II ソフトウェアファイルの HEX ファイルを含んだ POF ファイルを生成してください。
この時に、Bit-Level endianness 設定を Big Endian にしてください。
参考コンテンツ:Intel:MAX® 10 を 外部 Flash メモリ(QSPI)から Boot できません。
下記 User Guide に、Passive Serial Configuration (MAX® 10 FPGA 以外のデバイスにてサポートされている Configuration Mode)の場合に関する手順が記載されていますが、図 16 のように HEX だけ登録することで Configuration ROM ではない QSPI Flash に対しても使用できます。
・Parallel Flash Loader Intel® FPGA IP User Guide >1.4.1. Converting .sof Files to a .pof
図16:ソフトウェア用 POF ファイルの生成
4-3. POF ファイルの書き込み方法
① Parallel Flash Loader デザイン の SOF ファイルを FPGA に書き込みます
② その状態で、Auto Detect を押して、QSPI Flash を認識させます(参考:図17)
③ Device が QSPI Flash になっている項目に、図16 で生成させたソフトウェアの POF ファイルを登録します(参考:図17)
④ Start を押して、書き込みが終了したら、QSPI Flash への書き込みが完了です(参考:図17)
⑤ ハードウェア用の POF ファイルを CFM (MAX® 10 以外は Configuration ROM) に書き込みます
⑥ FPGA の電源を入れなおして、Configuration と Nios® II が Boot する事を確認します
Boot しなかった場合、ソフトウェアの POF ファイルを生成する際の、Bit-Level endianness 設定を見直してみてください。
図17: QSPI Flash への書き込み
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。