1. 概要(IP 等も含めた構成図)
このコンテンツでは、CFI Flash から Boot Copier 又は XIP で Nios® II Processor を Boot させる方法として、最低限必要な IP の各種パラメーターと BSP Editor の設定、各種ファイルの生成方法を説明します。
XIP と Boot Copier の違いについては、以下のコンテンツをご参照ください。
参考:Nios® II Boot の種類 と 各 Boot Option における設定方法について
CFI Flash は一般的に、Fast Passive Parallel (FPP) コンフィグレーション・スキームで使用されます。Development Kit などでは、FPP コンフィグレーション・スキームを採用しているものが多くあり、FPP コンフィギュレーションの制御機能を持った Parallel Flash Loader(PFL)IP を搭載した FPGA デバイスを使用して、CFI Flash へアクセスできるようにしています。
一方、Nios® II は Avalon Tri-State Conduit Component を使用して CFI フラッシュにアクセスします。
構成や詳しい解説は、メーカーの下記ユーザーガイドをご参照ください。
参考:Embedded Design Handbook 5.2.6. Nios II Processor Booting from CFI Flash
Nios® II から、CFI Flash にアクセスするために使用する Avalon Tri-State Conduit Component は、下記の機能を持つ IPです。
- Generic Tri-State Controller
パラメーターを設定することで、様々なフラッシュデバイスを制御できます。 - Tri-State Conduit Bridge
Tri-State Slave 信号を基板上のフラッシュデバイスと接続する双方向信号に変換します。 - Tri-State Conduit Pin Sharer
コントローラーが複数個ある場合に、入出力信号を統一にしてアクセスできるようします。
(今回のコンテンツでは、Tri-State Conduit Pin Sharer を使用しません)
Avalon Tri-State Conduit Component に関する情報は、こちらのコンテンツをご参照ください。
参考:Qsys におけるオフチップ・メモリ・インタフェースの接続方法
参考:Avalon Tri-state Conduit Components User Guide
最低限必要な IP は下記の通りです(Intel® Quartus® Prime 開発ソフトウェア ver 18.1 の場合)。
- Nios® II Processor
- On-Chip Memory(RAM or ROM)Intel® FPGA IP: 実行メモリー
- Generic Tri-State Controller
- Tri-State Conduit Bridge
Platform Designer で構築すると 図1 のようになります。
図1: Platform Designer の構成例
1-1. Nios® II Processor
Reset Vector / Exception Vector を設定します。
XIP か Boot Copier のどちらの方式を使用するかによって設定が異なりますので、
「2. CFI Flash から XIP で実行する際の Nios® II 設定」
「3. CFI Flash から 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. Generic Tri-State Controller のパラメーター設定
下記のコンテンツもご参照ください。
参考:Qsys におけるオフチップ・メモリ・インタフェースの接続方法
Library から、Flash Memory Interface(CFI)を選択して、Apply を押してください。
ご使用の CFI Flash デバイスのデータシートを参照し、各種パラメーターが合っているか確認してください。また、各種タブの設定が下記のようになっているかも併せてご確認下さい。
- Signal Selection タブにて、CFI Flash の仕様に合うように下記項目が正しく設定されているか確認
・Address width
・Data width
・Byteenable width
・Bytes per word
・readdata
・writedata
・read
・write
・chipselect
・address
- Signal Timing が CFI Flash の仕様に合っているか確認
- Signal Polarities タブにて、下記の信号と設定が有効になっていることを確認
・read
・write
・chipselect
- Parameters の Is memory device が有効になっていることを確認
- Module Assignments の設定が下記になっていることを確認
・embeddedsw.configuration.hwClassnameDriverSupportList
:altera_avalon_lan91c111:altera_avalon_cfi_flash
・embeddedsw.configuration.hwClassnameDriverSupportDefault
:altera_avalon_cfi_flash
- Avalon Connection Point Assignments の設定が下記になっていることを確認
・embeddedsw.configration.isFlash:1 Value
・embeddedsw.configuration.isMemoryDevice:1 Value
・Embeddedsw.configuration.isNonVolatileStorae:1 Value
図3:Generic Tri-State Controller 設定例
Platform Designer のシステム構築が終了したら Generate HDL にて、Generate させておきます。
1-4. Quartus® Prime Settings
Nios® II Processor の Boot に関して影響することは無い設定ですが、FPP を採用している場合は、Quartus® Prime の Assignments → Device → Device and Pin Options → Configuration を押して、Configuration Scheme を Passive Parallel ×8 /×16 /×32 のいずれかに設定してください。
図4:Quartus® Prime 設定
Platform Designer を Quartus® Prime プロジェクトに登録し、開発が終了したらコンパイルを回して、SOF ファイルを生成させておきます。
2. CFI Flash から XIP で 実行する際の Nios® II 設定
Nios® II Processor の Reset Vector / Exception Vector の設定や BSP Editor の設定を説明します。
XIP の Boot 方式は、CFI Flash 上で Nios® II を動作させるので、On Chip RAM 容量を確保できないシステムにおいて有効な構成です。しかしながら、Boot Copier 構成に比べて処理速度は低下します。
.rodata、.rwdata、.exceptions などは alt_load() 関数を使用して RAM 上にコピーを行います。メイン・ソフトウェアである .text は CFI Flash 上に残り、CFI 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 Tri-State Controller を設定
- Reset Vector に Generic Tri-State Controller 、Exception Vector に On-Chip RAM または 外部 RAM を設定
図5:XIP 構成における Nios® II Vectors 設定
Exception Vector に RAM を設定することで、Flash に比べて例外処理を高速に動作させることができますので、Nios® II のパフォーマンスを上げることができます。
< Reset Vector offset の設定方法 >
CFI Flash に格納する Nios® II ソフトウェアの格納場所に合わせて、Reset Vector Offset を設定する必要があります。動作確認に使用した Arria® V GX Starter Kit のユーザーガイドを確認すると、User_software 領域が 0x0528_0000 ~ 0x07FD_0000 であるため、図5 の設定の通り 0x05280000 を設定しています。
参考:Arria V GX Starter Kit User Guide
各種 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 は 図6 のように設定します。
.text Section は、Generic Tri-State Controller に設定し、それ以外の Section は On-Chip RAM か外部 RAM に設定します。
図6:XIP 構成における Linker Script 設定
Main タブにある Settings → Advanced → hal → linker の項目で alt_load() 関数のオプションを 図7 の様に設定します。
上記で記載した、2種類ある Nios® II Processor の Vectors 設定によって設定項目が異なります。
図7: XIP 構成における alt_load() 関数のオプション設定
これで XIP 構成を実現するための各種設定が終わりました。
次は、CFI Flash に持たせる HEX ファイルと Programming ファイル の生成を行っていきますので、
5章を参照ください。
3. CFI Flash から Boot Copier で 実行する際の Nios® II 設定
Nios® II Processor の Reset Vector / Exception Vector の設定や BSP Editor の設定を説明します。
Boot Copier における、Nios® II Boot 方式については、下記コンテンツで解説しています。
参考:3-2. Boot 形式 ② - その他 Controller 対応(現行)
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 を設定
図8:Boot Copier を使用する構成における Nios® II Vectors 設定
< Reset Vector offset の設定方法 >
CFI Flash に格納する Nios® II ソフトウェアの格納場所に合わせて、Reset Vector Offset を設定する必要があります。動作確認に使用した Arria® V GX Starter Kit のユーザーガイドを確認すると、User_software 領域が 0x0528_0000 ~ 0x07FD_0000 であるため、図8 の設定の通り 0x05280000 を設定しています。
参考:Arria V GX Starter Kit User Guide
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 は 図9 のように設定します。
.text Section は On-Chip RAM か外部 RAM に設定し、それ以外の Section も On-Chip RAM か外部 RAM に設定します。
図9 :Boot Copier を使用する構成における Linker Script 設定
そして、Main タブにある Settings → Advanced → hal → linker の項目で、alt_load() 関数のオプションを 図10 のように設定します。
Boot Copier の構成は alt_load() を使用しないので、すべてのチェックボックスを外してください。
図10:Boot Copier を使用する構成における alt_load() 関数のオプション設定
これで Boot Copier 構成を実現するための各種設定が終わりました。
FPGA に SOF ファイルを書き込み、Nios® II SBT の Run As にてソフトウェアが正しく動作することを確認したら、次は、CFI Flash に持たせる HEX ファイルと Programming ファイル の生成を行っていきますので、5章を参照ください。
4. Programming File の生成方法
Nios® II SBT にてソフトウェアのコンパイルが終了し ELF ファイルを生成したら、次は FLASH ファイルまたは、HEX ファイルを生成します。書き込む方法によって必要なファイルが異なります。
4-1. FLASH と HEX ファイルの生成
ELF ファイルの生成が終了したら、図11 のように Nios® II アプリケーションを右クリックし、
Make Targets → Build... → mem_init_generate → Build で FLASH ファイルを生成します。
「5-1. quartus_pgm -nios2 コマンドを使用して書き込む方法」を使用する場合、生成した FLASH ファイルを使用します。
図11: 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>.flash: CFI Flash 格納するソフトウェア・ファイル
(Project 直下に作られます)
「5-2. PFL を内蔵した FPGA 経由で Quartus® Programmer にて書き込む方法」を使用する場合、POF ファイルを生成します。POF ファイルに格納するにあたって、FLASH ファイルから、HEX ファイルに変換する必要があります。Nios® II Command Shell を起動して、下記コマンドを使って HEX ファイルに変換します。
Nios® II SBT の Application を右クリックし、Nios® II → Nios® II Command Shell を押すと、Application フォルダーでパスが切られた、Nios® II Command Shell が起動します。
nios2-elf-objcopy --input-target srec --output-target ihex CFI_Flash_Controller.flash CFI_Flash_Controller.hex --verbose
図12:FLASH ファイルから HEX ファイルに変換
4-2. POF ファイルの生成
「5-2. PFL を内蔵した FPGA 経由で Quartus® Programmer にて書き込む方法」を使用する場合、
格納したい CFI Flash のアドレスに HEX ファイルを持った POF ファイルを生成します。
Configuration Data も格納したい場合は、SOF ファイルも追加します。
詳しくは、メーカーの下記ユーザーガイドをご参照ください。
参考:Embedded Design Handbook 5.2.6.2.3. Programming
動作確認に使用した Arria® V GX Starter Kit のユーザーガイドを確認すると、User_software 領域が 0x0528_0000 ~ 0x07FD_0000 であるため、Convert Programming File にて、図13 のように作成します。
参考:Arria V GX Starter Kit User Guide
図13:POF 生成時の Convert Programming File
Programmer 設定の PFL を内蔵している FPGA デザインを用意することで、POF を CFI Flash に書き込むことができます。
5. CFI Flash への書き込み方法
5-1. quartus_pgm -nios2 コマンドを使用して書き込む方法
Nios® II Commad Shell を起動します。
SOF ファイルが保存されているパスに移動し、下記コマンドを実行して、使用するデザインの SOF を FPGA に書き込みます(Quartus® Programmer でも SOF を書き込めます)。
quartus_pgm.exe -c 1 -m jtag -o "P;CFI_Nios_boot.sof@1"
Flsah ファイルが保存されているパスに移動し、下記コマンドを実行すると、CFI Flash に Nios® II ソフトウェアを書き込むことができます。
quartus_pgm.exe --nios2 --base=0x00000000 CFI_Flash_Controller.flash --debug
--base:Platform Designer における Nios® II から見た Generic Tri-state Controller のベースアドレス
--debug:付与すると、Log 内容が増えます
Nios® II ソフトウェア領域を Erase する場合は、下記コマンドを実行します。
quartus_pgm.exe --nios2 --base=0x00000000 --erase=0x05280000,0x02d60000
--erase:=<Erase する Sector アドレス, Erase する容量>(CFI Flash の場合、Erase する容量を指定します)
コマンドの詳細は、メーカーの下記ユーザーガイドをご参照ください。
参考:Nios® II Flash Programmer User Guide
5-2. PFL を内蔵した FPGA 経由で Quartus ® Programmer にて書き込む方法
書き込むには、Programmer 設定の PFL を含んだ CFI Flsah に接続されているデザインが必要になります。
詳しい書き込み手順は、メーカーの下記ユーザーガイドをご参照ください。
参考:Embedded Design Handbook 5.2.6.2.3. Programming
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。