1. 概要
Nios® V のブートは、Nios® II と同様に様々な方法があります。
この記事の内容は、Stratix® 10 FPGA や Agilex™ 7 FPGA など、SDM(Secure Device Manager)を搭載したデバイスを対象に、SDM に接続されている QSPI Flash ROM に Nios® V プロセッサーのコードを格納し、起動する方法をご紹介します。
SDM Boot に関しては、インテルよりリファレンス・デザインが提供されております。このデザインをベースに環境を構築することが可能です。
注記:
SDM とは、セキュア・デバイス・マネージャーの略です。Stratix® 10 FPGA や Agilex™ 7 FPGA では、セキュリティー機能が強化されていますが、これらのセキュリティー機能は SDM にて管理されます。Nios® V の SDM Boot を実施する際、SDM の細かい知識は不要です。SDM の機能について興味のある方は、Agilex™ FPGA 「セキュリティ」編 をご参照ください。
注記:
SDM ブートを使用するためには、FPGA のコンフィグレーション・モード(MSEL の設定)としてアクティブ・シリアル(AS-Fast もしくは AS-Normal)を選択する必要があります。Avalon-ST 方式など、アクティブ・シリアル以外のモードでコンフィグレーションされている場合、Nios® V プロセッサーは SDM ブートを実行することはできません。
Nios® V は SDM ブートのほかに、以下のブート方式に対応しています。それぞれ記事を用意しておりますので、詳細はそちらをご覧ください。
- Generic Serial Interface(GSFI)を介した QSPI Boot(近日公開予定)
- Nios® V Boot Option ~ On Chip RAM (XIP) ~ On-Chip Memory Boot
1-1. 全体構成
【図1】に全体構成図を示します。
【図1】 SDM Boot 全体構成
1-2. SDM ブートの流れ
SDM ブート は以下の流れで実行されます。
- Nios® V プロセッサーは、オンチップメモリーから SDM ブートローダーを実行する
- SDM ブートローダーは、SDM に接続されているコンフィグレーション Flash ROM に格納されている Nios® V プロセッサー向けソフトウェアを探す
- SDM ブートローダーは、ソフトウェアをコンフィグレーション Flash ROM から On-Chip RAM や 外部 RAM にコピーする
- コピー完了後、SDM ブートローダーからユーザー・アプリケーションにジャンプする
次章より実装方法をご紹介します。
2. ハードウェアの実装
この章ではハードウェアの実装方法を示します。ここでは Agilex™ 7 を例にしてご紹介します。
最低限必要な IP は下記の通りです(Quartus® Prime Pro Edition ソフトウェア・バージョン 22.4 の場合)。
- Nios® V/m Processor Intel® FPGA IP
- On-Chip Memory(RAM or ROM)Intel® FPGA IP(以下、On Chip RAM と表記)
- Mailbox Client Intel® FPGA IP
Platform Designer で構築すると 【図2】 のようになります。
【図2】Platform Designer の構成
この記事ではコンソール出力用に JTAG_UART IP を実装しておりますが、こちらは必須ではありませんのでご注意ください。
また実装している各 IP の名前は視認性を上げるため下記のように設定しています。
- Nios® V/m Processor Intel FPGA IP : cpu
- On-Chip Memory(RAM or ROM)Intel® FPGA IP : bootcopier_rom, bootcopier_ram, user_application_mem
- Mailbox Client Intel® FPGA IP:mailbox
- JTAG UART Intel® FPGA IP : uart
最低限必要な上記 3つ の IP の パラメーターの設定について次項で説明します。
2-1. Nios® V/m Processor
Vectors 項目より Reset Agent を 【図3】 のように "bootcopier_rom.s1" に設定してください。
【図3】 Nios® V/m Processor のパラメーター設定
注記:
Reset Agent : のプルダウンメニューを選択する際に、"bootcopier.s1" ポートが表示されないことがあります。その際は一度別のポートを選択後に、再度プルダウンメニューを開くことで選択可能になりますのでご注意ください。
2-2. On-Chip Memory(RAM or ROM)Intel® FPGA IP
このデザインでは On Chip RAM を 3 個使用します。以下にそれぞれの設定方法を説明します。
【図4】、【図5】、【図6】 のようにソフトウェア実行に必要な Total Memory Size の設定と、On chip RAM に登録する初期値ファイルを指定するために、Memory Initialization の設定を行います。
まずは bootcopier_rom の設定について説明します。
【図4】 bootcopier_rom のパラメーター設定例
Nios® II Processor では、memint.qip 使用する方法で登録ができましたが、Nios® V Processor で使用する RiscFree IDE では、meminit.qip を生成するコマンドが無いため、 【図4】 のように "Enable non-default initialization file" にもチェックを入れ、< 任意の名前 >.hex のパスを登録する必要があります。
この記事では下記のように設定しています。
- Type : ROM(Read-only)
- Total memory size : 6144 Bytes
- User created initialization file : bootcopier_rom.hex
次に bootcopier_ram の設定例です。
【図5】 bootcopier_ram のパラメーター設定例
bootcopier_ram はデフォルト値で RAM を初期化します。サイズ等は下記の通り設定しています。
- Type : RAM(Writable)
- Total memory size : 6144 Bytes
次に user_application_mem の設定例です。
【図6】 user_application_mem のパラメーター設定例
user_application_mem はデフォルト値で RAM を初期化します。サイズ等は下記の通り設定しています。
- Type : RAM(Writable)
- Total memory size : 262144Bytes
2-3. Mailbox Client Intel® FPGA IP
Mailbox Client Intel® FPGA IP はデフォルトのまま使用します。
【図7】 Mailbox Client Intel® FPGA IP のパラメーター設定
2-4. Quartus® Prime Settings
Assignments tab ⇒ Device ⇒ Device and Pin Options ⇒ Configuration を開いてください。
基板構成に応じて設定します。
- Configuration scheme:Active Serial x4(can use Configuration Device)
- Active serial clock source:FPGA を Configuration するときのクロック周波数を設定
【図8】 Quartus® Prime の Device and Pin Options
3. ソフトウェアの実装
SDM Boot では、SDM Boot Loader を使用して User Application をワークメモリーに Load します。この章では、SDM Boot Loader の生成方法と User Application の Build 方法をご紹介します。
この記事では【図9】に示すディレクトリー構成を前提に説明します。
【図9】 ディレクトリー構成
3-1. SDM Boot Loader
3-1-1. BSP の生成
Platform Designer より BSP Editor を起動して Settings.bsp を作成します。作成方法がわからない場合は下記リンクをご参照ください。
参考資料:
Ashling* RiscFree* IDE を使用した Nios® V プロジェクト開発手順
4. RiscFree* IDE での Nios® V プロセッサーの開発
BSP Editor の起動方法については Nios® II Processor と Nios® V/m Processor で違いがありますが、設定内容は同じであり hal の設定、hal.linker の設定、hal.make の設定、Linker Script の設定を行います。
まず main タブにある hal、hal.kinker、hal.make を【表1】と【図10】~【図12】を参考に設定します。
【表1】 BSP Editor の設定
Settings | 設定 |
hal.max_file_descriptors | 4 |
hal.log_port | None を選択 |
hal.enable_exit hal.enable_clean_exit hal.c_plus_plus |
チェックを外す |
hal.sys_clk_timer hal.timerstamp_timer hal.stdin hal.stdout hal.stderr |
None |
hal.linker |
以下設定にチェックを入れ有効にする
allow_code_at_reset |
hal.make.cflags_user_flags | -ffunction-sections -fdata-sections |
hal.make.link_flags | -Wl,--gc-sections |
hal.make.cflags_optimization | -Os |
【図10】 hal の設定
【図11】 hal.linker の設定
【図12】 hal.make の設定
次に BSP Software Package タブに移動し、altera_safeclib にチェックを入れます。
【図13】 Software Packages の設定
Linker Script の設定は BSP Linker Script タブを選択し、 【図14】 のように .entry 以外の Section を bootcopier_ram に設定します。
【図14】 BSP Linker Script の設定
以上で BSP から Boot させるための設定は完了しました。Generate BSP ボタンをクリックして、BSP を生成してください。
3-1-2. SDM Bootloader Application の生成
ここでは SDM Bootloader Application の生成方法を説明します。
SDM Bootloader Application は、Intel® FPGA Design Store から入手できる SDM Bootloader Example Design にて提供されます。まず、このデザインをダウンロードしてください。
注記:
ダウンロードしたデザインは、Stratix® 10 SX SoC L-Tile development kit 向けのデザインですが、提供されるアプリケーションは Agilex™ 7 FPGA など SDM を実装した他の FPGA でも使用できます。
デザインを展開すると、sw/mailbox_bootloader/app ディレクトリーが確認できます。
これが SDM Bootloader project となります。
このディレクトリー内にある、SDM bootloader(mailbox_bootloader.c)を今回生成する software/mailbox_bootloader/app にコピーします。
Nios® V Command Shell を起動し、以下コマンドを実行して CMakeLists.txt を作成します。
niosv-app --app-dir=software/mailbox_bootloader/app\
--bsp-dir=software/mailbox_bootloader/bsp\
--srcs=software/mailbox_bootloader/app/mailbox_bootloader.c
次にアプリケーションをビルドします。
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -B \
software/mailbox_bootloader/app/release -S \
software/mailbox_bootloader/app
make -C software/mailbox_bootloader/app/release
ビルド後、SDM bootloder(.elf)は以下フォルダに生成されます。
software/mailbox_bootloader/app/release
3-1-3. HEX File の生成と Memory の初期化
ソフトウェアのビルドが終了し ELF ファイルを生成したら、On Chip RAM の初期値として登録する HEX ファイルを生成します。
Nios® V Command shell を起動しプロジェクトまで移動します。
移動後、以下のコマンドを入力して HEX ファイルを生成してください。
elf2hex software/mailbox_bootloader/app/release/app.elf \
-o bootcopier_rom.hex -b <base address of Bootloader ROM> \
-w <data width of Bootloader ROM> -e <end address of Bootloader ROM> -r 4
生成された bootcopier_rom.hex は、bootcopier_rom の初期値として使用されます。
Platform Designer にて指定した場所に bootcopier_rom.hex をコピーした後に、FPGA のコンパイルを実施してください。
注記:
Quartus® Prime をフル・コンパイルせずに、更新した HEX ファイルを SOF ファイルに反映させる方法は下記の資料をご参照ください。
参考資料:
Nios® II - オンチップ・メモリからのブート手順
以上で SDM Bootloder の生成が完了しました。次章にて User Application のビルド方法をご紹介します。
3-2. User Application
3-2-1. BSP の生成
Platform Designer より BSP Editor を起動して Settings.bsp を作成します。作成方法がわからない場合は下記リンクをご参照ください。
参考資料:
Ashling* RiscFree* IDE を使用した Nios®V プロジェクト開発手順
4. RiscFree* IDE での Nios® V プロセッサーの開発
生成後、先程と同様の設定を行います。
hal.linker の設定は Main タブにある Settings ⇒ Advanced ⇒ hal の項目で、hal.linker オプションを 【図6】 のとおりに下記項目のチェックを入れます。
- enable_at_load
- enable_alt_load_copy_exceptions
【図15】 hal.linker の設定
Linker Script の設定は BSP Linker Script タブを選択し、 【図16】 のとおりに .entry 以外の Section を "user_application_mem" に設定します。
【図16】 BSP Linker Script の設定
3-2-2. Application の生成
Application プロジェクトを生成しビルドします。
ELF ファイルの生成までの手順は下記の記事をご参照ください。
参考資料:
Ashling* RiscFree* IDE を使用した Nios® V プロジェクト開発手順
4-4. RiscFree* IDE の起動
3-2-3. HEX ファイルの生成
生成したアプリケーションは、JTAG Indirect Configuration(JIC)プログラミングと呼ばれる手法を用いて QSPI に書き込みます。JIC プログラミングを行うためには、JIC ファイル(.jic)が必要です。
ここでは JIC ファイル生成に必要な HEX ファイル(.hex)を生成します。
先程生成した ELF ファイルを以下コマンドを用いて HEX ファイルに変換します。
elf2flash --input software/user_application/app/debug/<user application>.elf \
--output flash.srec –epcs –-offset 0x0
riscv32-unknown-elf-objcopy --input-target srec \
--output-target ihex flash.srec \
<user application>.hex
次章にてプログラミングファイルの生成を行います。
4. プログラミングファイルの生成
生成された HEX ファイルを使用して JIC ファイルを生成します。JIC を生成するには Programing File Generator を起動します。
ここでは、user_application.hex のみ書き込むためのファイルを生成する例を紹介します。
以下の通り設定し Generate してください。
- Start Address:mailbox_bootcopier.c の PAYLOAD_OFFSET に設定した値を指定
- Input File:user_application.hex を指定
- Flash Loader:使用するデバイスを指定
【図17】 Programing File Generator による JIC ファイルの生成
JIC ファイルの生成方法の詳細は、下記のコンテンツをご参照ください。
参考資料:
Nios® II Boot Option ~ EPCQ Flash ~(AS IF を使用)<4-2. JIC ファイルの生成>
生成された JIC ファイルを QSPI に書き込むと、Nios® V を SDM に接続された QSPI からブートすることができます。
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。
本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。