この記事では以下の略称を使用しています。
* Nios® II EDS = Nios® II Embedded Design Suite
* Nios® II SBT = Nios® II Software Build Tools for Eclipse
* Nios® II HAL API = Nios® II Hardware Abstraction Layer API
1. はじめに
このコンテンツでは、Read-Only Zip File System の構築方法とサンプル・ソフトウェアをご紹介します。
Nios® II HAL API には、簡単に Flash ROM 上で ファイルシステム を構築できる Read-Only Zip File System 機能があります。
Flash ROM 上にあらかじめファイルのバイナリーデータを保存しておき、fopen() や fread() などの ANSI C 標準ライブラリー I/O 関数を使って読み込み専用ファイルとしてアクセスすることができ、組み込みソフトウェア開発での使用に適しています。
注記:
読み込み専用となりますので、組み込みソフトウェアでのファイル更新はできません。
ユーザーガイドはこちらをご参照ください。
参考:Nios® II Software Developer Handbook] 13. Read-Only Zip File System
2. ファイルシステムの種類
【表1】に記載の通り、Nios® II EDS に用意されているファイルシステムは 2種類あります。
ファイルシステム名 | 概要 |
---|---|
Read-only zip file system | 予め用意しておいた Zip ファイルを Flash ファイルまたは HEX ファイルに変換して Flash ROM に格納しておくことで、fopen() や fread() でアクセスできる機能 |
Host file system | Nios® II SBT Debug AS で実行した時のみ使用可能で、Nios® II SBT Project に保存しているファイルに fopen() や fread() でアクセスできる機能![]() |
参考:[Nios® II Software Developer Handbook] 2.7. Intel FPGA Software Packages for Embedded Systems
3. システム要件
3-1. Flash Controller
Flash ROM(例えば、QSPI Flash や CFI Flash、MAX® 10 UFM など)にファイルのバイナリーデータを格納しておく必要があるため、Flash ROM にアクセスできる Platform Designer デザインが必要になります。【表2】を参考に、使用する Flash Controller を選択してください。
Flash ROM の種類 | Flash Controller の種類 |
---|---|
QSPI Flash | 下記コンテンツで紹介している No2 ~ No6 の Flash Controller を実装してください。![]() |
CFI Flash | 下記コンテンツで紹介している No7 の Generic Tri-state Controller を実装してください。![]() |
MAX® 10 UFM | MAX® 10 UFM の場合、On-Chip Flash Intel® FPGA IP Core を実装してください。![]() |
No2 ~ No5 の Flash Controller は、下記コンテンツで Memory Test ソフトウェアを用意しています。
参考: Embedded Peripherals IP - Flash Controller メモリーテストサンプル
No6 の Generic Serial Flash Interface は、下記コンテンツで Memory Test ソフトウェアを用意しています。
参考: Embedded Peripherals IP - Generic Serial Flash Interface メモリーテストサンプル
注記:
Generic Serial Flash Interface を使った場合、Nios® II Flash Programmer で Flash ファイルを書き込めないため、こちらの補足をご参照ください。
参考: 4-3-3. 補足)Generic Serial Flash Interface を使用した場合の Flash ファイルの格納方法
3-2. Zip 圧縮ツール
用意したファイルを Zip ファイルに変換するため、開発を行う PC に圧縮ツールが必要になります。
- Windows であれば、winzip や 7-zip
- Linux OS であれば、zip
などの準備が必要です。
今回、Quartus® Prime Ver20.1.1 の Nios® II Command Shell が WSL 経由で Ubuntu を起動しているため、zip パッケージを予めインストールしておきます。
WSL Ubuntu を起動し下記コマンドを実行して、パッケージをインストールください。
$ sudo apt-get install zip unzip
WSL に移行前の Quartus® Prime(Ver18.1.1_Std 、Ver19.1_Pro 以下)の場合、winzip や 7-zip などをご利用ください。
4. 構築手順
4-1. Nios® II SBT Project の BSP Editor の設定
Nios® II SBT Project を構築した後 BSP Editor を起動し、【図1】のように Software Packages タブの altera_ro_zipfs を有効にします。【表3】の概要を参考に仕様に合わせて設定を行います。
【図1】altera_ro_zipfs Software Packages の設定画面
設定項目 | 概要 |
---|---|
ro_zipfs_name | ファイルの保存パスを指定します。基本的にデフォルト設定で問題ありません。 |
ro_zipfs_offset | Flash ROM のどの番地にファイルが格納されているのか設定します。 |
ro_zipfs_base | Platform Designer で設定した Flash Controller の BASE Address を設定します。 |
4-2. Zip ファイルと Flash ファイルの作成方法
【図2】のように、Nios® II SBT Project にフォルダーを 1つ用意して、その中にバイナリーファイルを格納します。
【図2】バイナリーファイルの格納
【図3】のように、Application フォルダーを右クリックして、Nios II ⇒ Nios II Command Shell... から Nios® II Command Shell を起動します(Application フォルダーのパスで起動できます)。
【図3】Nios® II Command Shell の起動
【図4】のように、zip コマンドを実行して、非圧縮の Zip ファイルを作成します。
$ zip -0r flash_rom.zip flash_rom
【図4】Zip ファイルの生成
【図5】のように、bin2flash コマンドを実行して、Zip ファイルを Flash ファイルに変換します。
ro_zipfs_offset で設定した Offset を --location オプションにて指定します。
$ bin2flash.exe --location=0x100000 --input=flash_rom.zip --output=flash_rom.flash
【図5】Flash ファイルの生成
bin2flash コマンドに関しては、下記 User Guide をご覧ください。
参考:Nios® II Flash Programmer User Guide
4-3. Flash ファイル を Flash ROM に書き込む方法
使用する Flash Controller によって、Flsah ROM に書き込む方法が異なります。
4-3-1. QSPI Flash と CFI Flash の場合
Read-Only Zip File System を使用する Quartus® Prime Project を Compile し、SOF ファイルを生成します。
Quartus® Programmer で SOF ファイルを Kit に書き込み、FPGA を Configuration させておきます。
注記:
Nios® II Flash Programmer(quartus_pgm.exe --nios2)を使用して書き込みを行うため、Nios® II が存在していて、Nios® II から Flash ROM にアクセスできる SOF ファイルが必要になります。
コマンドの詳細は下記ユーザーガイドをご覧ください。
参考:Nios® II Flash Programmer User Guide
Nios® II Command Shell を起動し、
QSPI Flash には下記 quartus_pgm.exe コマンドを使用して書き込みます。
参考として書き込み時の画像を【図6】に示します。
$ quartus_pgm.exe --nios2 --base=0x00000000 --csr=0x04041000 flash_rom.flash --debug --epcq
--base:Platform Designer における Nios® II から見た Flash Controller の MEM Port ベースアドレス
--csr :Platform Designer における Nios® II から見た Flash Controller の CSR Port ベースアドレス
--debug:付与すると、Log 内容が増えます
--epcq :Flash ROM の容量によってオプションを付与します
【図6】Nios® II Flash Programmer を使用した QSPI Flash への Flash ファイルの書き込み
CFI Flash には下記 quartus_pgm.exe コマンドを使用して書き込みます。
$ quartus_pgm.exe --nios2 --base=0x00000000 flash_rom.flash --debug
--base:Platform Designer における Nios® II から見た Generic Tri-state Controller のベースアドレス
--debug:付与すると、Log 内容が増えます
4-3-2. MAX®10 UFM の場合
UFM の場合、SOF ファイルと HEX ファイルを含んだ POF ファイルを生成することで、UFM に格納可能です。その際、Flash ファイルを HEX ファイルに変換する必要があります。
下記 nios2-elf-objcopy.exe コマンドを使用して HEX ファイルに変換します。
$ nios2-elf-objcopy.exe --input-target srec --output-target ihex flash_rom.flash flash_rom.hex --verbose
POF ファイルの生成方法は下記コンテンツの「方法2の場合」をご参照ください。
その際、On Chip Flash IP Core の Initialize flash content が OFF になっている必要があります。
参考:Nios® II Boot Option ~ On Chip Flash (UFM) ~ (MAX® 10 のみ) > 4-2. POF ファイルの生成
4-3-3. 補足)Generic Serial Flash Interface を使用した場合の Flash ファイルの格納方法
Generic Serial Flash Interfaece を Flash Controller として使用している場合、Nios® II Flash Programmer を使用することができません。そのため下記の nios2-elf-objcopy.exe コマンドを使用して、HEX に変換した後、下記コンテンツを参考に POF ファイル、JIC ファイルを生成します。その後、Quartus® Programmer を使用して POF / JIC ファイルを書き込む必要があります。
$ nios2-elf-objcopy.exe --input-target srec --output-target ihex flash_rom.flash flash_rom.hex --verbose
参考:Nios® II Boot Option ~ Generic Serial Flash Interface を使った Boot 方法 ~ 6-3. JIC / POF ファイルの生成方法
5.サンプル・ソフトウェアの紹介
4章の構築手順を実施後、Read-Only Zip File System がうまく構築できているか簡単に確認するサンプル・ソフトウェアをご用意しております。
このサンプル・ソフトウェアは、Zip File System で Flash ROM に格納したファイルを fopen() でファイル・オープンさせ、ソフトウェアにより用意したバッファーに fread() で 4k Byte 分データを Read し、最後にダンプするサンプルになっています。
5-1. サンプル・ソフトウェアで必要なシステム要件
この記事で紹介するサンプル・ソフトウェアを動かすために必要なシステム要件を記載します。
- Platform Designer に 必要な IP
- Nios® II Processor
- 90K Bytes 程確保した Work RAM(On Chip RAM または 外部 RAM)
- stdout 機能の実装(JTAG UART または UART Core など、Printf 文で結果を表示するため)
- Flash Controller(3-1. Flash Controller をご参照ください)
- ソフトウェア容量の目安:
- program size(code + initialized data):85 KBytes
注記:
enable_small_c_library を有効にすると、Zip File System で使用する fopen() は使えなくなります。
5-2. サンプル・ソフトウェアの実装手順
システム要件を満たす Plaftom Designer のデザインであれば、どのシステムでも動作させることができます。
[手順】
- Platform Designer の Generate HDL で sopcinfo ファイルを生成
- Nios® II SBT にて Nios® II Application and BSP from Template を実行
(テンプレートは hello_world または Blank Project を選択) - Application フォルダーにサンプル・ソフトウェア に置き換える
- BSP Editor を On Chip RAM または 外部 RAM 実行に設定(参考)
- 4-1. Nios® II SBT Project の BSP Editor の設定 を参考に設定し、Generate BSP を実行
- 付属の flash_rom フォルダーを Apptication フォルダー に格納
- 4-2. Zip ファイルと Flash ファイルの作成方法 と 4-3. Flash ファイル を Flash ROM に書き込む方法 を参考に Flash ROM にファイルを格納
- Build を実行し Run AS を実行
5-3. サンプル・ソフトウェアの実行結果
Nios® II SBT の Run As で実行すると、Work RAM で Nios® II が実行されます。
実行した際の Log を以下に示します。
Hello from Nios II!
Zip File System Sample
allocate memory for buf_read_data
Open File System : /mnt/rozipfs/flash_rom/test.bin
Read from File System, Write to buf_read_data
Close File System
Print buf_read_data read from zip file system
0x40349c0 : Base Address of buf_read_data
-Address--|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f| ASCII
----------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+----------------
0x040349c0 3A 70 01 00 74 00 C0 04 3A 48 01 98 04 F8 FF 9C :p..t...:H......
0x040349d0 1E FD 3F 98 3A 20 00 00 3A E0 2E 00 06 20 00 00 ..?.: ..:.... ..
0x040349e0 C4 FF 7F 01 3A E0 2E 00 06 0B 00 00 3A 88 07 30 ....:.......:..0
0x040349f0 3A E0 2E 00 06 08 00 00 3A 88 09 30 26 04 00 18 :.......:..0&...
~~~~~~~~~~~~~~~~~ 割愛 ~~~~~~~~~~~~~~~~~
0x04035990 17 00 C0 10 17 FE BF E0 17 3F 80 10 3A 88 0B 10 .........?..:...
0x040359a0 3A 88 09 18 40 B4 15 00 15 02 80 80 17 F7 BF E0 :...@...........
0x040359b0 3A 91 04 10 17 FD FF E0 3A 88 85 18 17 FE FF E0 :.......:.......
*******************************************
Free buf_read_data.
Finish Nios II.
*******************************************
Zip File System で格納した、test.bin ファイルの中身を【図7】に示します。
同じデータを読み取れていることを確認することができます。
【図7】Zip File System で格納している test.bin の中身
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。