1. 概要 (IP 等も含めた構成図)
このコンテンツでは、Boot Copier 又は XIP で Configuration ROM (又は サードパーティ製 Configuration ROM )から Nios® II プロセッサーを Boot させる為に、最低限必要な IP の各種パラメーターと BSP Editor の設定、各種ファイルの生成方法を説明します。
XIP と Boot Copier の違いについては、以下のコンテンツを参照ください。
・Nios® II Boot の種類 と 各 Boot Option における設定方法について
User I/O Pin に接続した Quad SPI Flash (QSPI Flash) から Boot させたい場合、下記コンテンツをご参照ください。
・Nios® II Boot Option ~ QSPI Flash ~ (User I/O IF を使用)
Generic Serial Flash Interface Intel® FPGA IP を使用した Boot 方法は下記コンテンツをご参照ください。
・ Nios® II Boot Option ~ Generic Serial Flash Interface を使った Boot 方法 ~
最低限必要な IP は下記の通りです (インテル® Quartus® Prime 開発ソフトウェア ver 18.1 の場合)。
- Nios® II Processor
- On-Chip Memory (RAM or ROM) Intel® FPGA IP: 実行メモリー
- Serial Flash Controller Intel® FPGA IP: Boot メモリー ( EPCQ Flash ) コントローラー
Platform Designer で構築すると 図1 のようになります。
図1:Platform Designer 構成例
以降、各種パラメーターの設定について説明します。
1-1. Nios® II Processor
Reset Vector / Exception Vector を設定します。
XIP か Boot Copier のどちらの方式を使用するかによって設定が異なりますので、
「2. EPCQ から XIP で実行する際の Nios® II 設定」
「3. EPCQ から Boot Copier で実行する際の Nios® II 設定」
を参照ください。
1-2. On-Chip Memory (RAM or ROM) Intel® FPGA IP
図2 のように、ソフトウェア実行に必要な Total Memory Size を設定してください。
図2:On-Chip Memory パラメーターの設定例
1-3. Serial Flash Controller Intel® FPGA IP
使用する Configuration Device* と I/O mode で ×1 (Standard) か ×4 (Quad) を選択します。
図3:Serial Flash Controller パラメーターの設定例
Serial Flash Controller は、入力クロックの上限値が 25MHz です。
*サードパーティ製 Configuration ROM ( MT25Q など ) を使用する場合は、
Configuration Device に表示されませんので、以下の Knowledge Database (KDB) の対応が必要です。
<KDB>
How do I enable Micron's MT25Q device support in replacement to End Of Life (EOL) EPCQ(>=256Mb) and EPCQ-L devices?
その他の Flash Controller に関してはこちらのコンテンツをご参照ください。
・「Embedded Peripherals IP - 各種 Flash Controller の比較」
1-4. Quartus® Prime Settings
Serial Flash Controller のパラメーター設定を Quartus® Prime の 制約として 図4 のように設定する必要があります。
Assignment tab > Device > Device and Pin Options > Configuration を開いてください。
- Configuration scheme: Serial Flash Controller パラメーターで設定した I /O mode を設定
- Active serial clock source : FPGA を Configuration するときのクロック周波数を設定
図4:Quartus® Prime の Device and Pin Options
2. EPCQ から XIP で実行する際の Nios® II 設定
Nios® II Processor の Reset Vector / Exception Vector の設定や BSP Editor の設定を説明します。
XIP の Boot 方式は、EPCQ Flash 上で Nios® II を動作させるので、On Chip RAM 容量を確保できないシステムにおいて、有効な構成です。.rodata、.rwdata、.exceptions などは alt_load() 関数を使用して、RAM 上にコピーを行います。メインソフトウェアである .text は、EPCQ Flash 上に残り、EPCQ 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 共に Serial Flash Controller を設定
- Reset Vector に Serial Flash Controller 、Exception Vector に On-Chip RAM 又は 外部 RAM を設定
図5:XIP 構成における Nios® II Vectors 設定
Exception Vector に RAM を設定することで、Flash に比べて例外処理を高速に動作させることができますので、Nios® II のパフォーマンスを上げることができます。
< Reset Vector offset の設定方法 >
EPCQ Flash に格納される Programming File の構成は SOF ファイル + HEX ファイルとなり、Serial Flash Controller は HEX ファイルのアドレス値を自由に設定できます。
従って、SOF ファイルのエンドアドレスを把握し、HEX ファイルのスタートアドレス値を Reset Vector Offset に設定する必要があります。
一度、Quartus® Prime をコンパイルし SOF ファイルを生成します。
SOF ファイルのエンドアドレスを SOF ファイルのサイズから計算する事も可能ですが、
一度該当する SOF ファイルだけ Convert Programming Files で JIC ファイルに変換すると、
一緒に生成される MAP ファイルに記載されている SOF ファイルのアドレス値から、エンドアドレスを的確に把握できます。
その SOF ファイルのエンドアドレスから少し間を取ったアドレス値を Reset Vector Offset に設定してください。
(図6 の例では、SOF ファイルのエンドアドレス: 0x41F013 に対して、Reset Vector Offset を 0x420000 に設定しています)。
図6:Reset Vector Offset の設定方法
また、Exception Vector を EPCQ Flash から On-Chip RAM もしくは 外部 RAM にコピーする処理は alt_load() 関数で実現するため、Boot Copier は不要となります。
Reset Vector Offset の設定が完了し、デザイン作成が完了したら、Quartus® Prime をコンパイルして SOF ファイルを生成しておきます。
2-2. XIP 構成における Nios® II SBT の BSP Editor 設定
Nios® II SBT を起動し、Application と BSP を生成します。
BSP Editor を起動し、Linker Script 設定、alt_load() 関数のオプション設定を行います。
Linker Script は 図7 のように設定します。
.text Section は、Serial Flash Controller に設定し、それ以外の Section は On-Chip RAM か外部 RAM に設定します。
図7:XIP 構成における Linker Script 設定
Main タブにある Settings > Advanced > hal > linker の項目で alt_load() 関数のオプションを 図8 のように設定します。
上記で記載した、2種類ある Nios® II Processor の Vectors 設定によって設定項目が異なります。
図8: XIP 構成における alt_load() 関数 設定
これで XIP 構成を実現するための各種設定が終わりました。
次は、EPCQ Flash に持たせる HEX ファイルと Programming ファイル の生成を行っていきますので、4章を参照ください。
3. EPCQ から 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 に Serial Flash Controller 、Exception Vector に On-Chip RAM 又は 外部 RAM を設定
図9:Boot Copier を使用する構成における Nios® II Vectors 設定
< Reset Vector offset の設定方法 >
EPCQ Flash に格納される Programming File の構成は SOF ファイル + HEX ファイルとなり、Serial Flash Controller は HEX ファイルのアドレス値を自由に設定できます。
従って、SOF ファイルのエンドアドレスを把握し、HEX ファイルのスタートアドレス値を Reset Vector Offset に設定する必要があります。
一度、Quartus® Prime をコンパイルし SOF ファイルを生成します。
SOF ファイルのエンドアドレスを SOF ファイルのサイズから計算する事も可能ですが、
一度該当する SOF ファイルだけ Convert Programming Files で JIC ファイルに変換すると、
一緒に生成される MAP ファイルに記載されている SOF ファイルのアドレス値から、エンドアドレスを的確に把握できます。
その SOF ファイルのエンドアドレスから少し間を取ったアドレス値を Reset Vector Offset に設定してください。
(図6 の例では、SOF ファイルのエンドアドレス: 0x41F013 に対して、Reset Vector Offset を 0x420000 に設定しています)。
図10:Reset Vector Offset の設定方法
Reset Vector Offset の設定が完了し、デザイン作成が完了したら、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 は 図11 のように設定します。
.text Section は On-Chip RAM か外部 RAM に設定し、それ以外の Section も On-Chip RAM か外部RAM に設定します。
図11 :Boot Copier を使用する構成における Linker Script 設定
そして、Main タブにある Settings > Advanced > hal > linker の項目で alt_load() 関数のオプションを 図12 のように設定します。
Boot Copier の構成は alt_load() を使用しないので、すべてのチェックボックスを外してください。
図12:Boot Copier を使用する構成における alt_load() 関数 設定
これで、Boot Copier 構成を実現するための各種設定が終わりました。
FPGA に SOF ファイルを書き込み、Nios® II SBT の Run As にて、ソフトウェアが正しく動作することを確認したら、次は、EPCQ Flash に持たせる HEX ファイルと Programming ファイル の生成を行っていきますので、4章を参照ください。
4. Programming File の生成方法
Nios® II SBT にてソフトウェアのコンパイルが終了し ELF ファイルを生成したら、次は HEX ファイルを生成します。HEX ファイルを SOF ファイルと共に JIC ファイルに変換することで、EPCQ Flash に HEX ファイルを持たせることができます。
4-1. HEX ファイルの生成
ELF ファイルの生成が終了したら、図13 のように Nios® II アプリケーションを右クリックし、
Make Targets > Build... > mem_init_generate > Build で HEX ファイルを生成します。
図13: mem_init_generate for HEX
mem_init_generate で生成されるファイルは主に 3種類です。
- meminit.qip:On Chip RAM から Boot する際にプロジェクトに登録して使用
- on_chip_ram.hex:On Chip RAM から Boot する際に RAM の初期値ファイルとして使用
- <Flash_Controller_Name>.hex: JIC ファイルに持たせるソフトウェア・ファイル
4-2. JIC ファイルの生成
HEX ファイルが生成できたら、Convert Programming Files で SOF ファイル と HEX ファイルを含んだ JIC ファイルを生成します。
Quartus® Prime > file tab > Convert Programming Files を起動してください。図14 のように設定します。
①. Programming file type を JTAG Indirect Configuration File (.jic) に設定
②. Configuration Device に該当する Configuration ROM の型番を選択
③. Mode を Active Serial か Active serial ×4 に設定
④. Flash loader に、ターゲットデバイスを選択
⑤. SOF Data に、該当する SOF ファイルを選択
⑥. Add Hex Data をクリックし、Absolute addressing 、Big endian を選択
⑦. HEX file に 該当するソフトウェア HEX ファイルを登録し OK をクリック
図14: JIC 生成時の Convert Programming Files
Convert Programming Files で JIC ファイルを生成し、実際に Configuration ROM にプログラミングして動作をご確認ください。
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。