1. 概要
この記事では On-Chip Flash(以降 UFM と記載)から Nios® V プロセッサーを起動させる為に、最低限必要な IP の各種パラメーターと BSP Editor の設定をご紹介します。
この記事で紹介する Boot 方法では、UFM にソフトウェア・ファイルを格納することにより、外部にメモリーデバイスを実装しなくても、ワンチップで Nios® V の Boot を行うことが可能です。
必要な設定として、オペレーションの違いが多少ありますが、ほとんど Nios® II と同じであるため、Nios® II の Boot 設定方法について紹介している下記の記事も併せてご参照いただくことで、より理解が深まるかと思います。
参考資料:Nios® II Boot の種類 と 各 Boot Option における設定方法について
2. 構成と IP の設定
最低限必要な IP は下記のとおりです(インテル® Quartus® Prime Standard Edition ソフトウェア・バージョン 23.1 の場合)。
- Nios® V/m Processor Intel® FPGA IP(Nios® V/g, Nios® V/c も使用可)
- On-Chip Flash Intel® FPGA IP
- 書き換え可能データ展開用の Memory Device(On-Chip RAM 等)
Platform Designer で構築した場合下図の構成になります。
【図1】Platform Designer の構成
この記事ではコンソール出力用に JTAG_UART IP を実装しておりますが、こちらは必須ではないためご注意ください。
また実装している各 IP の名前は視認性を上げるため下記のとおりに設定しています。
- Clock Bridge Intel® FPGA IP : Clock
- Nios® V/m Processor Intel® FPGA IP : NiosV_m
- On-Chip Flash Intel® FPGA IP : Onchip_Flash
- On-Chip Memory (RAM or ROM) Intel® FPGA IP : OCRAM
- JTAG UART Intel® FPGA IP : JTAG_UART
最低限必要な Nios® V プロセッサー、UFM と On-Chip RAM の パラメーターの設定については次項でご紹介します。
2-1. Nios® V/m Processor Intel® FPGA IP
下図 のとおりに Debug セクションの "Enable Debug" と "Enable Reset From Debug Module" にチェックを入れて有効にした後、Vectors セクションの Reset Agent を "Onchip_Flash.data" に設定してください。
【図2】 Nios® V プロセッサーのパラメーター設定
注記:
Reset Agent : のプルダウン・メニューを選択する際に、"Onchip_Flash.data" ポートが表示されないことがあります。その際は一度別のポートを選択後に、再度プルダウン・メニューを開くことで選択可能になりますのでご注意ください。
2-2. On-Chip Memory (RAM or ROM) Intel® FPGA IP
下図 のとおりにソフトウェア実行に必要な Total memory Size の設定を行います。
【図3】 On Chip RAM のパラメーターの設定
2-3. On-Chip Flash Intel® FPGA IP
下図 のとおりに Configuration Mode セクションと Flash Initialization セクションの設定を行います。
詳細については次項で紹介します。
【図4】 On Chip Flash のパラメーターの設定
2-3-1. Configuration Mode
Configuration Mode では、コンフィグレーション・イメージの格納方法について設定します。各 Mode により Sector の割り当てが異なるため、概要は下図をご参照ください。
【図5】 各 Configuration Mode の Sector の割り当て
UFM Boot をサポートする Configuration Mode は下記 3 つです。
システム仕様に応じて下記の Configuration Mode から選択してください。
- Single Uncompressed Image
- Single Compressed Image
- Dual Compressed Images
2-3-2. Flash Initialization
Flash Initialization は UFM の初期値として登録する .hex ファイルを設定する項目です。
しかし Nios® V では meminit のオプションに対応していないため、Convert Programming File にて生成した .sof と .hex を .pof ファイルに変換します。そのため、初期値ファイルとして HEX ファイルの登録の必要はありません。下図 の様に Flash Initialization セクションの設定は無効にしてください。
.hex ファイルの作成方法については「4. Programming ファイルの生成方法」でご紹介します。
【図6】 Flash Initialization の設定
3. BSP Editor 設定
Nios® V Command Shell より BSP Editor を起動して Setting.bsp を作成します。作成方法がわからない場合は下記リンクをご参照ください。
参考資料:Ashling* RiscFree* IDE を使用した Nios® V プロジェクト開発手順
4. RiscFree* IDE での Nios® V プロセッサーの開発
3-1. Boot Copier で実行する際の設定
Boot Copier は Flash ROM から RAM に必要なデータを、Boot Copier と呼ばれる Boot Loader で展開して Nios® V を動作させる Boot 方法です。Boot Copier が必要なデータを全て RAM に展開してくれますので、hal.linker 内の全てのチェックボックス設定を OFF にします。下図に設定例を示します。
【図7】Boot Copier での hal.linker の設定
Linker Script の設定は BSP Editor で Linker Script タブを選択し、.text Section は On-Chip RAM(OCRAM)または外部 RAM に設定し、それ以外の Section も On-Chip RAM または外部 RAM に設定します
【図8】Boot Copier での Linker script の設定
3-2. XIP で実行する際の設定
XIP(Execute in Place)は Linker Section の .text 領域を Flash Controller に割り当てて、Flash ROM 上で Nios® V を動作させる Boot 方法です。.text 以外のセクションを RAM に格納する設定にした場合は、Boot 時に RAM に展開するために hal.linker 内の全てのチェックボックス設定を有効にする必要があります。
【図9】XIP での hal.linker の設定
Linker Script の設定は BSP Editor で Linker Script タブを選択し、下図の通りに .text の Section を "Onchip_Flash" に設定します。
注記:
.rwdata セクション、.heap セクション、.stack セクション(読み書き可能なデータ領域)は Flash の書き換えを伴うため、XIP の構成で使用する場合であっても必ず RAM に配置する必要があります。
【図10】XIP での Linker script の設定
メモ:
Exception vector memory を On chip Flash に設定した場合は、hal.linker 内の設定から "enable_alt_load_copy_exceptions" チェックボックスを OFF にします。
4. Programming ファイルの生成方法
UFM を使用した Nios® V Boot の場合は、mem_init が対応していないため、UFM に格納する .hex ファイルの生成は、Nios® V Command Shell にてコマンドを使用して生成します。
4-1. Boot Copier の場合の ELF to HEX コマンド
以下に Boot Copier 用 .hex ファイルの生成手順をご紹介します。
この項でご紹介する手順は、下記コンテンツに従いデバッガーで Nios® V のソフトウェアが動作することを確認した前提で記載していますのでご注意ください。
参考:Ashling* RiscFree* IDE を使用した Nios®V プロジェクト開発手順
-
- Build が完了し .elf ファイルが生成された Nios® V の app フォルダーに下記パスから Boot Copier(.srec)ファイルをコピーします。
<Quartus® Prime インストール・ディレクトリー>\niosv\components\bootloader
Nios® V/c 使用時:niosv_c_bootloader.srec
Nios® V/m 使用時:niosv_m_bootloader.srec
Nios® V/g 使用時:niosv_g_bootloader.srec
ポイント:絶対パスでコマンドが動かない等を避けるために、.elf ファイルと同じディレクトリーに Boot Copier をコピーします。
- Nios® V Command Shell を起動し、カレント・ディレクトリーを app フォルダーに設定します。
- 下記コマンドの引数を使用している環境に合わせ実行します。
- Build が完了し .elf ファイルが生成された Nios® V の app フォルダーに下記パスから Boot Copier(.srec)ファイルをコピーします。
ポイント:最初に 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 <UFM のベース・アドレス> --end <UFM のエンド・アドレス> --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 0x00000000 --base 0x00000000 --end 0x0006ffff --boot niosv_m_bootloader.srec
riscv32-unknown-elf-objcopy --input-target srec --output-target ihex flash.srec app.hex
4-2. XIP の場合の ELF to HEX コマンド
以下に XIP 用 .hex ファイルの生成手順をご紹介します。
一度 Boot Copier の設定に変更し、Run As で Nios® V ソフトウェアが動作することを確認してから、XIP の設定に戻し .hex ファイルを生成してください。XIP のデバッグに関しては下記参考情報をご参照ください。
-
- Nios® V Command Shell を起動し、カレント・ディレクトリーを app フォルダーに移動します。
- 下記コマンドの引数を環境に合わせ込み実行します。
実行コマンド
riscv32-unknown-elf-objcopy --output-target ihex <Input ファイル名(.elf)> <Output ファイル名(.hex)>
コマンド実行例
riscv32-unknown-elf-objcopy --output-target ihex app.elf app.hex
4-3. POF ファイルの生成
UFM から Boot する場合は、.sof ファイルと .hex ファイルを .pof ファイルに変換し UFM に書き込みます。手順については、Nios® II と同じであるため下記コンテンツをご参照ください。
参考資料:Nios® II - オンチップ・メモリからのブート手順
Convert Programming Files で .pof ファイルを生成完了後、実際に MAX® 10 デバイスにプログラミングして動作をご確認ください。
おわりに
以上が UFM を使用した Nios® V の Boot 方法です。
GUI やコマンドの差分がありますが、Nios® II と大きく変わりがないことをわかっていただけたかと思います。
Nios® V プロセッサーに関する情報については、下記メーカーのページより詳細をご確認いただけますので併せてご参照ください。
また、弊社では Nios® V に関する情報をまとめた「Nios® V まとめページ」をご用意しております。本記事以外にも有用な情報がありますので、こちらも併せてご確認ください。