1. はじめに
この記事では Generic Serial Flash Interface Intel® FPGA IP(以下 GSFI)を使用して、Boot Copier 又は XIP(Execute in Place)で Nios® V を Flash ROM(Quad SPI Flash)から Boot させる方法をご紹介します。
GSFI に関しては以下の User Guide をご参照ください。
参考:Generic Serial Flash Interface Intel® FPGA IP User Guide
参考:Nios® V Processor Booting from Configuration QSPI Flash
XIP と Boot Copier の違いについては Nios® II の記事ではありますが、構成は同じであるため以下の記事をご参照ください。
参考:Nios® II Boot の種類 と 各 Boot Option における設定方法について
2. 概要
Nios® V を使用した QSPI Boot では User Guide でも紹介している方法として、Serial Flash controller に GSFI を採用しております。GSFI はインテル® が提供している最新の Serial Flash Controller であり、パラメーターの設定を行うことで全ての Flash ROM に対応することができます。
しかしながら、Serial Flash Controller に GSFI を採用する場合、下記 2 点の注意点があります。
- I/O Mode(Standard/QUAD)と Flash ROM の仕様に合わせて GSFI のパラメーター設定が必要である
- Nios® II SBT の mem_init に対応していない為、コマンドで HEX ファイルを生成する必要がある
「Boot と Flash Controller の関係性」や「構築方法の基本的な考え方」については、従来の Nios® II の Boot 方法について記載されている以下の記事と、Nios® V で大幅な差分はないため併せてご参照いただくことでより理解を深めることが可能です。
参考:Embedded Peripherals IP - 各種 Flash Controller の比較 > 3. Nios® II Boot との関係性
参考:Nios® II Boot Option ~ EPCQ Flash ~ (AS IF を使用)
参考:Nios® II Boot Option ~ QSPI Flash ~ (User I/O IF を使用)
3. Quartus® Prime の設定と Platform Designer システムの構成
3-1. Quartus® Prime の設定
Configuration ROM の中に Nios® V ソフトウェアを格納する場合は、GSFI のパラメーター設定と Quartus® Prime の Configuration scheme 設定を合わせる必要があります。
Assignments タブ ⇒ Device ⇒ Device and Pin Options ⇒ Configuration を開いて、【図1】に示す項目を設定してください。
- Standard mode の場合:Active Serial ×1(can use Configuration Device)
- Quad mode の場合:Active Serial ×4(can use Configuration Device)
【図1】Quartus® Prime の Device and Pin Options
JIC ファイルまたは POF ファイルを Configuration ROM に書き込むと、Flash ROM の容量と
AS ×1 / AS ×4 の組み合わせによって、Nonvolatile Configuration Register に書き込まれるダミーサイクルの値が変わります。
また、GSFI のパラメーターの設定と Configuration scheme の設定が合致していない場合、正しく Boot させることができません。
GSFI のパラメーターの設定方法は「5. GSFI のパラメーター設定」の章で紹介しています。
下記情報を参考にダミーサイクルの値を確認して、GSFI のパラメーターの調整を行ってください。
参考:Table 3 - Intel Supported Third Party Configuration Devices
3-2. Platform Designer システムの構成
Platform Designer の構成は、GSFI を除き下記記事と同じ構成で実現可能です。
参考:Nios® V Boot Option ~ On Chip RAM (XIP) ~
【図2】Platfom Designer のシステム図
-
- Clock Bridge Intel® FPGA IP:Clock
- Reset Bridge Intel® FPGA IP:Reset
- Nios® V/m Processor Intel® FPGA IP:NiosV
- On-Chip Memory (RAM or ROM) Intel® FPGA IP:OCRAM
- JTAG UART Intel® FPGA IP:JTAG_UART
- Generic Seial Flash Interface Intel® FPGA IP:GSFI
On Chip RAM からの Boot と同様に、JTAG_UART については動作確認のためのコンソール出力用に実装しているため、今回の構成に必須ではありません。
接続については、Nios® V の実行メモリーとして On Chip RAM の "s1" ポートと、データの格納先として GSFI の "avl_mem" ポートに Nios® V の "instruction_manager" を接続する必要があります。
その他の接続は【図2】の構成の通りに Nios® V からの制御が必要な IP の Avalon-MM slave に、 Nios® V の "data_manager" を接続してください。
4. Nios® V の パラメーター設定
Nios® V の GSFI Boot に必要なパラメータの設定では、Nios® V が Reset 解除後に参照するアドレスを設定します。
Flash ROM にプログラミングするファイルは、コンフィグレーション・データと Nios® V のデータ を JIC ファイルにコンバートして作成し、Nios® V のデータをどこに配置するかはユーザーが任意で設定することが可能です。そのため、Reset 解除後に参照する Nios® V のデータ(.hex)のスタートアドレスを Nios® V の Reset Offset に設定する必要があります。
4-1. Nios® V の各種設定項目
まず【図3】のとおりに Debug 以下の "Enable Debug" と "Enable Reset From Debug Module" を有効にしてください。
その後、Vector 以下の Reset Agent に "GSFI.avl_mem" を設定します。この時点では Vector 以下の Reset Offset については初期値(0x00000000)で問題ありません。
【図3】Nios® V のパラメーター
4-2. Reset Offset の設定方法
Reset Offset には、HEX ファイルのスタートアドレスを設定する必要があるため、生成した SOF ファイルのエンドアドレスを確認する必要があります。
ファイルのサイズからもエンドアドレスは計算可能ですが、生成した SOF ファイルから JIC ファイルを作成し、その際に生成された map ファイルからエンドアドレスを確認することも可能です。
JIC ファイルの生成方法は「7-3. JIC ファイルの生成方法」でご紹介しています。
【図4】では、SOF ファイルのエンドアドレスよりも大きい番地のアドレスを、HEX ファイルのスタートアドレスに設定する必要があるため、0x00b00000 を Reset Offset に設定しています。
【図4】Reset Offset の設定方法
Nios® V のパラメーター設定は以上です。
5. GSFI のパラメーター設定
Platform Designer で GSFI のパラメーターを設定する際は、Show/Hide Hidden Parameters というOption で通常は隠れている【図5】の Default Settings の項目を設定することで、IP 起動後の初期値を設定することができます。電源投入後 Nios® V が Boot するためには、各 Flash デバイスに応じて Default Settings 項目の設定が必要です。
Default Settings の表示方法と、各 Flash デバイスを使用する上での設定値については下記記事をご参照ください。
参考:Embedded Peripherals IP - Generic Serial Flash Interface サンプル
【図5】GSFI Default Settings の初期値
6. BSP Editor の設定
この章では、Nios® V の 各 Boot 方法の設定内容について紹介します。Platform Designer にて Generate HDL を実行後、BSP Editor を利用し設定します。
BSP Editor の起動方法については下記記事をご参照ください。
参考:Ashling* RiscFree* IDE を使用した Nios®V プロジェクト開発手順
6-1. Boot Copier で起動する場合の Nios® V の設定
Boot Copier は、Linker Section を全て RAM(On Chip RAM または外部 RAM)に設定し、Flash ROM から RAM に必要なデータを Boot Copier と呼ばれる Boot Loader で展開して、Nios® V を動作させる Boot 方法です。
Boot Loader で必要なデータを全て RAM に展開してくれますので、hal.linker 内の全ての設定を OFF にします。
【図6】に設定例を示します。
【図6】Boot Copier 構成での BSP Editor の設定
6-2. XIP で起動する場合の Nios® V の設定
XIP(Execute in Place)は Linker Section の .text 領域を Flash Controller に割り当てて、Flash ROM 上で Nios® V を動作させる Boot 方法です。
.text 以外のセクションを RAM に格納する設定にした場合は、Boot 時に RAM に展開するために hal.linker 内の全ての設定を有効にする必要があります。
注記:
.rwdata セクション、.heap セクション、.stack セクション(読み書き可能なデータ領域)は Flash の書き換えを伴うため、XIP の構成で使用する場合であっても必ず RAM に配置する必要があります。
【図7】に設定例を示します。
【図7】XIP における Nios® V SBT BSP Editor の設定
メモ:
Exception vector memory を GSFI に設定した場合は、hal.linker 内の設定から "enable_alt_load_copy_exceptions" を OFF にします。
次に BSP Drivers タブより、【図8】の赤枠で示している intel_generic_serial_flash_inteface_top の Enable のチェックを外してください。この設定により、GSFI の Device Driver が無効になります。
【図8】XIP における Nios® V SBT BSP Driver 設定
注記:
GSFI の Device Driver を有効とした場合、Nios® V の Boot の際に GSFI に接続しているメモリーの使用中に alt_sys_init() で GSFI の初期化が行われてしまうため、読み出されたデータが不正なものとなり正常に Boot が完了しません。
7. Programming File の生成方法
GSFI を使用した Nios® V Boot の場合は、mem_init が対応していないため、Flash ROM に格納する HEX ファイルの生成は、Nios® V Command Shell にてコマンドを使用し生成します
7-1. Boot Copier の場合の ELF to HEX コマンド
以下に Boot Copier 用 HEX ファイルの生成手順をご紹介します。
この項でご紹介する手順は、下記コンテンツに従いデバッガーで Nios® V のソフトウェアが動作することを確認した前提で、記載していますのでご注意ください。
参考:Ashling* RiscFree* IDE を使用した Nios®V プロジェクト開発手順
-
- Nios® V の app フォルダーに下記パスから Boot Copier(.serc)ファイルをコピーします。
<Quartus® Prime インストール・ディレクトリー>\niosv\components\bootloader
Nios® V/m 使用時:niosv_m_bootloader.srec
Nios® V/g 使用時:niosv_g_bootloader.srec
ポイント:絶対パスでコマンドが動かない等を避けるためにコピーします。
- Nios® V Command Shell を起動し、カレント・ディレクトリーを app フォルダーに設定します。
- 下記コマンドの引数を使用している環境に合わせ実行します。
- Nios® V の app フォルダーに下記パスから Boot Copier(.serc)ファイルをコピーします。
ポイント:最初に elf2flash.exe を実行して、アプリケーションの実行ファイル(.elf)と Boot Copier(.srec)をマージして S-Record フォーマット(.srec)を生成した後、objcopy にて Hex フォーマット(.hex)に変換する 2 段階の手順を踏みます。
実行コマンド
elf2flash.exe --input <Input ファイル名(.elf)> --output <Output ファイル名(.srec)> --reset <Nios® V の Reset Address> --base <GSFI のベース・アドレス> --end <GSFI のエンド・アドレス> --boot <Boot Copier(.srec)>
riscv32-unknown-elf-objcopy --input-target srec --output-target ihex <Input ファイル名(.srec)> <Output ファイル名(.hex)>
コマンド実行例
elf2flash.exe --input app.elf --output flash.srec --reset 0x00b00000 --base 0x00000000 --end 0x00ffffff --boot niosv_m_bootloader.srec
riscv32-unknown-elf-objcopy --input-target srec --output-target ihex flash.srec app.hex
7-2. XIP の場合の ELF to HEX コマンド
以下に XIP 用 HEX ファイルの生成手順をご紹介します。
一度 Boot Copier の設定に変更し、Run As で Nios® V ソフトウェアが動作することを確認してから、XIP の設定に戻し HEX ファイルを生成してください。XIP のデバッグに関しては下記をご参照ください。
-
- Nios® V Command Shell を起動し、カレント・ディレクトリーを app フォルダーに移動します。
- 下記コマンドの引数を環境に合わせ込み実行します。
ポイント:最初に elf2flash.exe を実行して、アプリケーションの実行ファイル(.elf)を
S-Record フォーマット(.srec)を生成した後、objcopy にて Hex フォーマット(.hex)に変換する 2 段階の手順を踏みます。
実行コマンド
elf2flash.exe --input <Input ファイル名(.elf)> --output <Output ファイル名(.srec)> --reset <Nios® V の Reset Address> --base <GSFI のベース・アドレス> --end <GSFI のエンド・アドレス>
riscv32-unknown-elf-objcopy --input-target srec --output-target ihex <Input ファイル名(.srec)> <Output ファイル名(.hex)>
コマンド実行例
elf2flash.exe --input app.elf --output flash.srec --reset 0x00b00000 --base 0x00000000 --end 0x00ffffff
riscv32-unknown-elf-objcopy --input-target srec --output-target ihex flash.srec app.hex
7-3. JIC ファイルの生成方法
Convert Programming File で JIC ファイルを生成します。
AS Interface の Configuration ROM に格納する場合は、JIC ファイルを生成して Quartus® Prime Programmer を使用して JTAG 経由で書き込むことができます。
また、Convert Programming File にて Create config data RPD を有効にしておくことで、JIC のバイナリーファイルを同時に生成することができます。
JIC ファイルを生成する方法は下記記事をご参照ください。
参考:Nios® II Boot Option ~ EPCQ Flash ~ (AS IF を使用) > 4-2. JIC ファイルの生成
ポイント:
XIP の場合、HEX ファイルの設定によって Absolute addressing がうまく機能しない場合があります。その際は下記 FAQ をご参照ください。
参考:Convert Programming Files の Relative Addressing で HEX の格納アドレスを調整する方法を教えてください。
おわりに
この記事では GSFI を使用して、Nios® V を Flash ROM(Quad SPI Flash)から Boot させる方法をご紹介しました。
Nios® V に関する情報については、下記メーカーのページより詳細をご確認いただけますので併せてご参照ください。