1. はじめに
この記事では、インテル® Quartus® Prime 開発ソフトウェア ver 19.1_Standard と ver 19.4_Pro 以降の状況を元に、Embedded Peripherals IP User Guide に掲載されている Serial Flash Controller の違いについてと、Nios® II Boot と Serial Flash Controller の関係性についてご紹介いたします。
どの Controller を使用すればよいのか判断に困った際の参考にしてください。
補足:
便宜上、QSPI Flash や SPI Flash を総称して Flash ROM と記載しております。Flash ROM にアクセスする Controller は総称して Serial Flash Controller と記載しております。
Flash Controller 関連コンテンツとして、下記のコンテンツもご参照ください。
参考: Nios® II 向け各種 Flash コントローラの紹介
Nios® II Boot に関するコンテンツとして、下記のコンテンツもご参照ください。
参考: Nios® II Boot の構成 と 各 Boot Option における設定について
Flash ROM に対して Memory Test を行う場合は、下記のコンテンツもご参照ください。
参考: Embedded Peripherals IP - Flash Controller サンプル
2. Flash Controller の種類
Embedded Peripherals IP User Guide に 5 つ 、その他のユーザーガイドに 2 つ 掲載されており、合計 7 つ の Flash Controller が Platform Designer に用意されています。
それぞれの違いについては、表 1 ~ 4 と各 Controller の説明文をご参照ください。
また、このコンテンツでは記載の簡易化のために、表 1 の略称を使用します(公式な略称ではないことにご注意ください)。
No | 名称 (ユーザーガイド・リンク) | 略称 |
1 | EPCS/EPCQA Serial Flash Controller Core | Legacy SFC |
2 | Intel FPGA Serial Flash Controller Core | SFC I |
3 | Intel FPGA Serial Flash Controller II Core | SFC II |
4 | Intel FPGA Generic QUAD SPI Controller Core | GQSPI I |
5 | Intel FPGA Generic QUAD SPI Controller II Core | GQSPI II |
6 | Generic Serial Flash Interface Intel FPGA IP Core | GSFI |
7 | Generic Tri-State Controller Intel FPGA IP | GTSC |
No | 名称(略称) | 新/旧 | 概要 |
1 | Legacy SFC | 旧 | 第 1 世代。新しいプロジェクトでは使用しません |
2 | SFC I | 旧 | 第 2 世代。新しいプロジェクトでは使用しません。 |
3 | SFC II | 現行 | 第 2 世代バージョンアップ版。メインで使用します |
4 | GQSPI I | 旧 | 第 2 世代。新しいプロジェクトでは使用しません |
5 | GQSPI II | 現行 | 第 2 世代バージョンアップ版。メインで使用します |
6 | GSFI | 最新 | 第 3 世代。全ての Flash ROM に対応可能 |
7 | GTSC | 現行 | CFI Flash 向け。メインで使用します |
No | 名称(略称) | 対応 Flash | I/O Mode *4 | Interface |
1 | Legacy SFC | EPCS/EPCQ/EPCQA | ×1 | AS |
2 | SFC I | EPCS/EPCQ/EPCQA/MT25Q *1 | ×1,×4 | AS |
3 | SFC II | EPCQ/EPCQL/EPCQA/MT25Q *1 | ×1,×4 | AS |
4 | GQSPI I | EPCQ/EPCQL/EPCQA/N25Q/MT25Q *1 | ×1,×4 | AS |
5 | GQSPI II | EPCQ/EPCQL/N25Q/MT25Q *1 | ×1,×4 | AS , User I/O |
6 | GSFI | ALL QUAD/Serial SPI Flash | ×1,×2,×4 | AS , User I/O |
7 | GTSC | ALL CFI Flash | Data Width | User I/O |
No | 名称(略称) | Nios® II HAL | Nios® II Boot | Boot 構成 |
1 | Legacy SFC | 有 | 可(注意あり)*2 | Boot Copier |
2 | SFC I | 有 | 可 | XIP, Boot Copier |
3 | SFC II | 有 | 可 | XIP, Boot Copier |
4 | GQSPI I | 有 | 可 | XIP, Boot Copier |
5 | GQSPI II | 有 | 可 | XIP, Boot Copier |
6 | GSFI | ver21.1_Pro にて有 *3 | 可 | XIP, Boot Copier |
7 | GTSC | 有 | 可 | XIP, Boot Copier |
*1:Quartus® Prime プロジェクト・ディレクトリーに、pgm_allow_mt25q=on を記載した quartus.ini ファイルを保存している状態でのサポート状況です。
参考: https://malt.zendesk.com/hc/ja/articles/900006258943
*2:Legacy SFC の Nios® II Boot はその他 Controller とは異なる形式ですので、仕様を理解したうえでご使用ください(2-1. EPCS/EPCQA Serial Flash Controller Core をご参照ください)。
*3: GSFI の サンプルデザインと Nios® II サンプル・ソフトウェアが提供されています。
また、ver21.1_Pro にて、Nios II HAL API が提供されました。
参考: Embedded Peripherals IP - Generic Serial Flash Interface サンプル
参考: Generic Serial Flash Interface Intel FPGA IP Core Reference Design
参考: Generic Serial Flash Interface Intel® FPGA IP User Guide > 1.9. Nios II HAL Driver
*4:デバイスによって、×1 しか選べない場合がございます。
2-1. EPCS/EPCQA Serial Flash Controller Core
図 1:Legacy SFC のパラメーター設定
第 1 世代 Serial Flash Controller で、Legacy と名前のついてるバージョンもあります。
最新の Pro バージョンでは、Legacy の文字が消え、章題の名称になっています。
現行の Serial Flash Controller と仕様が異なる点が多くあり注意が必要です。
インテル® が提供している EPCS/EPCQ/EPCQA Flash をサポートしており、AS Interface 経由で Flash ROM にアクセスすることができます。
Avalon MM のインターフェイスを備えており、Nios® II HAL API Driver も提供されているため、Nios® II から HAL API で Flash ROM に読み書きすることができます。
I/O mode は Standard(×1)のみサポートされています。
Nios® II の Boot にも使用することができますが、その他 Serial Flash Controller の Boot 形式とは異なり、XIP での Boot はサポートされておりません。また、SOF ファイルと ELF ファイルを格納する方法も異なることに注意が必要で、3-1. Boot 形式 ① Legacy Controller のみ対応(旧式)をご参照ください。
一般的に、こちらの Serial Flash Controller は使用しません。
2-2. Intel FPGA Serial Flash Controller Core
図 2:SFC I のパラメーター設定 (quartus.ini 有効時)
第 2 世代 Serial Flash Controller の中で、一番最初にリリースされた Controller です。
インテル® が提供している EPCS/EPCQ/EPCQA Flash と MT25Q Flash(quartus.ini 有効時)をサポートしており、AS Interface 経由で Flash ROM にアクセスすることができます。
Avalon MM のインターフェイスを備えており、Nios® II HAL API Driver も提供されているため、Nios® II から HAL API で Flash ROM に読み書きすることができます。
I/O mode は Standard(×1)、QUAD(×4)中から選ぶことが可能となっています。
Nios® II Boot については、3-2. Boot 形式 ② その他 Controller 対応(現行)をご参照ください。
動作周波数は 25 MHz までという制限があり、DCLK の周波数は動作周波数の 1/4 です。
2-3. Intel FPGA Serial Flash Controller II Core
図 3:SFC II のパラメーター設定 (quartus.ini 有効時)
Intel FPGA Serial Flash Controller Core のバージョンアップ版 Serial Flash Controller になります。
できることはほとんど同じですが、対応 Flash ROM と 動作周波数が異なります。
インテル® が提供している EPCQ/EPCQL/EPCQA Flash と MT25Q Flash(quartus.ini 有効時)をサポートしており、AS Interface 経由で Flash ROM にアクセスすることができます。
Avalon MM のインターフェイスを備えており、Nios® II HAL API Driver も提供されているため、Nios® II から HAL API で Flash ROM に読み書きすることができます。
I/O mode は Standard(×1)、QUAD(×4)中から選ぶことが可能となっています。
Nios® II Boot については、3-2. Boot 形式 ② その他 Controller 対応(現行)をご参照ください。
動作周波数は 50 MHz までという制限があり、DCLK の周波数は動作周波数の 1/4 です。
2-4. Intel FPGA Generic QUAD SPI Controller Core
図 4:GQSPI I のパラメーター設定 (quartus.ini 有効時)
汎用の Serial Flash に対応する為に登場した Serial Flash Controller です。
インテル®が提供している EPCQ/EPCQL/EPCQA Flash 以外にも、N25Q/MT25Q Flash にも対応しています。
サードパーティー製の Flash ROM をサポートしており、AS Interface 経由で Flash ROM にアクセスすることができます。Avalon MM のインターフェイスを備えており、Nios® II HAL API Driver も提供されているため、Nios® II から HAL API で Flash ROM に読み書きすることができます。
I/O mode は Standard(×1)、QUAD(×4)中から選ぶことが可能となっています。
Nios® II Boot については、3-2. Boot 形式② その他 Controller 対応(現行)をご参照ください。
動作周波数は 25 MHz までという制限があり、DCLK の周波数は動作周波数と同じです。
2-5. Intel FPGA Generic QUAD SPI Controller II Core
図 5:GQSPI II のパラメーター設定 (quartus.ini 有効時)
Intel® FPGA Generic QUAD SPI Controller Core のバージョンアップ版 Serial Flash Controller になります。
できることはほとんど同じですが、対応 Flash ROM や 動作周波数、User I/O Interface 対応 などが異なります。
インテル®が提供している EPCQ/EPCQL/ Flash 以外にも、N25Q/MT25Q Flash にも対応しています。
サードパーティー製の Flash ROM をサポートしており、AS Interface 経由だけでなく、User I/O 経由でも Flash ROM にアクセスすることができます。
Avalon MM のインターフェイスを備えており、Nios® II HAL API Driver も提供されているため、Nios® II から HAL API で Flash ROM に読み書きすることができます。
I/O mode は Standard(×1)、QUAD(×4)中から選ぶことが可能となっています。
Nios® II Boot については、3-2. Boot 形式 ② その他 Controller 対応(現行)をご参照ください。
動作周波数は 40 MHz までという制限があり、DCLK の周波数は動作周波数と同じです。
2-6. Generic Serial Flash Interface Intel® FPGA IP Core
図 6:GSFI のパラメーター設定
最新の Serial Flash Controller で、パラメーター設定やオペレーション・コードを CSR レジスターで設定できるため、すべての Flash ROM に対応しています。
AS Interface 経由だけでなく、 User I/O 経由でも Flash ROM にアクセスでき、
I/O mode は Standard(×1)、DUAL(×2) 、QUAD(×4)を選択できます。Register で設定します。
Avalon MM のインターフェイスを備えており、Nios® II からアクセスすることが可能です。
Nios® II HAL API Driver は提供されていませんでしたが、ver21.1_Pro 以降のバージョンでリリースされました。
参考:Generic Serial Flash Interface Intel® FPGA IP User Guide > 1.9. Nios II HAL Driver
一般的には、GSFI の サンプルデザインと Nios® II サンプル・ソフトウェアが下記サイトで提供されていますので、そちらを使用して開発を進めて頂く形になります。
参考: Embedded Peripherals IP - Generic Serial Flash Interface サンプル
参考: Generic Serial Flash Interface Intel FPGA IP Core Reference Design
Nios® II Boot につきましては、メーカーからアップデートがあり、下記コンテンツ通りに実装することで、実現可能です。
参考: Nios® II Boot Option ~ Generic Serial Flash Interface を使った Boot 方法 ~
Nios® II Boot については、3-2. Boot 形式 ② その他 Controller 対応(現行)もご参照ください。
動作周波数は、特に制限が設けられていませんが、CS アサート時間が 動作周波数の影響により ROM の仕様を満たせない可能性がある為、ver19.1_Std または ver20.2_Pro 以前のバージョンでは、60MHz 以下にしてください。
DCLK の周波数はレジスターで設定可能です。
2-7.[番外編]Generic Tri-State Controller Intel FPGA IP
図 7:GTSC のパラメーター設定
Flash ROM ではなく、CFI Flash にアクセスするときに使用する Flash Controller です。
ユーザー側で CFI Flash のパラメーターを IP パラメーターから設定して使用する Controller であり、プリセットがあらかじめ、ある程度用意されています。また、設定をプリセットとして保存することも可能です。
CFI Flash Controller 以外にも、SDRAM Controller としても使用することができます。
AS Interface への接続はできませんので、User I/O に PIN アサインをして使用してください。
使用方法については、下記コンテンツをご参照ください。
Nios® II Boot については、3-2. Boot 形式 ② その他 Controller 対応(現行)もご参照ください。
参考: 構築方法 - Qsys におけるオフチップ・メモリ・インタフェースの接続方法
参考: Nios® II Boot - 5.2.6. Nios II Processor Booting from CFI Flash
参考: Nios® II Boot - Nios® II Boot Option ~CFI Flash~
3. Nios® II Boot との関係性
Nios® II の Boot 構成は、Boot Copier と XIP の 2 種類に分類されます。
- Boot Copier は Boot Copier Software を使用して、Flash ROM から Work RAM に User Software を展開させて Nios® II を Boot した後、Work RAM で User Software を実行します。
- XIP は Flash ROM 上で User Software を実行する為、Boot Copier Softeare は必要なく、Flash ROM 上で Nios® II を Boot した後、User Software を Flash ROM 上で実行します。
それぞれのメリットとデメリットに関しては、下記コンテンツをご参照ください。
参考: Nios® II Boot の構成 と 各 Boot Option における設定について
そして、Flash Controller の種類によって、Boot 形式(Boot 時の挙動)が異なっており、Legacy SFC だけ、その他 Serial Flash Controller と Boot 形式が異なる点に注意が必要です。
その差分について解説いたします。
Boot 形式 No | 概要 |
①(旧式) | Boot Copier Software 格納用 RAM が Legacy SFC に内蔵されており、 その格納用 RAM 上で Boot Copier を実行し、User Software を Work RAM に展開する |
②(現行) | Flash ROM に Boot Copier Software と User Software を格納して、 Flash ROM 上で Boot Copier Software を実行し User Software を Work RAM に展開する |
Boot 形式 No | 対応 Controller | Flash ROM ソフトウェア格納方法 | Nios® II Reset Vector Offset |
①(旧式) | Legacy SFC | Nios® II Flash Programmer で ELF と SOF を 書き込む | 0x0000_0000 |
②(現行) | Legacy SFC 以外 | JIC や POF に SOF と HEX を格納して書き込む | HEX の格納アドレス |
3-1. Boot 形式 ① - Legacy Controller のみ対応(旧式)
Legacy SFC は 図8 のように、Avalon CSR Port のみしかなく、命令フェッチができない為、XIP には対応していません。
Legacy SFC における Boot 形式について解説します。
Legacy SFC は Boot Copier Software 用の RAM を搭載し、その Boot Copier Software 格納用 RAM 上で Boot Copier Software を実行して Flash ROM から Work RAM に User Software を展開した後、Work RAM 上で Nios® II を実行します。
Nios® II Reset Vector Offset の値は 0x0000_0000 を設定し、Nios® II Reset Vector は Avalon CSR Port の ベースアドレスを設定します。
そして、Legacy SFC の Boot Copier Software は、Flash ROM 上でハードウェア・データの直後に User Software が存在することが前提となっており、その通り格納しないと Nios®II は Boot できません。
また、Nios® II Flash Programmer を使用して、SOF と ELF を Flash ROM に格納することができ、ハードウェア・データの直後にソフトウェア・データが来るように自動的に格納されます。
図 8:Boot 形式 ① - Legacy Controller のみ対応(旧式)
3-2. Boot 形式 ② - その他 Controller 対応(現行)
Legacy SFC 以外の Serial Flash Controller は 図 9 のように、Avalon CSR と Avalon MEM Port があり、命令フェッチができる為、Flash ROM 上で 実行する XIP にも対応しています。
XIP は Boot Copier Software は必要なく、起動後 Flash ROM 上で User Software を実行します。
Boot Copier は 図9 のように、Boot Copier Software と User Software を Flash ROM に格納しておきます。起動後、Flash ROM 上で Boot Copier Software を実行し、Flash ROM から Work RAM に User Software を展開します。
その後、Nios® II は Work RAM で User Software を実行します。
Legacy SFC 以外の Flash Controller の場合、User Software を Flash ROM の任意の場所に格納しておけ、そのアドレス値を Nios® II Reset Vector Offset に設定します。従って、Nios® II Reset Vector は Avalon MEM の Base Address と Reset Vector Offset を足し合わせた値になります。
また、Flash ROM への格納は、Nios® II Flash Programmer ではなく、SOF と HEX が格納されている JIC や POF を使用して、Quartus® Prime Programmer で 書き込みます。
* 各種 Serial Flash Controller によって IP 内部構成は多少異なります。
図 9:Boot 形式 ② - その他 Controller 対応(現行)
4. まとめ
Serial Flash Controller は種類が多く、把握するのが難しいですが、表 1 ~ 4(表 1 に戻る)を参考に、実現したい仕様に合わせて使用する Controller を決めて頂ければと思います。
Nios® II Boot として使用するのであれば、SFC II や GQSPI II、GSFI を使用して、下記コンテンツで紹介している方法で実現可能です。
- Nios® II Boot Option ~ EPCQ Flash ~
- Nios® II Boot Option ~ QSPI Flash ~
- Nios® II Boot Option ~ Generic Serial Flash Interface を使った Boot 方法 ~
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。