こんにちは。
マクニカでインテル® FPGA の技術サポートをしている インテル・F・ハナコ です。
このページでは、インテル FPGA に Nios® II を入れてLチカさせる方法 をご紹介しています。
これまで、下記のうち 操作 1 ~ 7 までを実施してきました。(今までの内容は、こちらのコンテンツ をご覧ください。)
今回 (Part 2) はその続編として、操作 8 ~ 9 をご紹介します。
1. Platform Designer で Nios® II と周辺回路を設計する
2. FPGA のデザインを完成させる
3. RTL レベル・シミュレーションをする
4. 制約を設定する
5. コンパイルをする
6. タイミングを検証する
7. FPGA にハードウエア・デザインをダウンロード
8. Nios II SBT によりソフトウエアをシステムで実行する
9. Nios® II のブートプログラムを FPGA のオンチップ・メモリーに組み込む
なお ここからは、Nios II SBT においてソフトウエア・プロジェクトが作成済みであることが前提でご案内しています。
ソフトウエア・プロジェクトをまだ作成していない場合には
インテル FPGA の Nios® II で はじめての L チカ! Part 1 において、操作3-1 ~ 操作3-3 までを実施後に、操作 8 以降をおこなってください。
また ページ後半では、Nios® II のブートプログラムを変更した場合に便利な
時短アップデート方法もご案内しています。必見ですよ!
8. Nios II SBT によりソフトウエアをシステムで実行
Nios II SBT でビルドしたソフトウエア・プログラムを ターゲットのシステムで実行します。
※ ソフトウエアを実行するには、あらかじめ FPGA にハードウエア・イメージ(*.sof)をプログラミングしている必要があります。
プログラミング方法は こちらのコンテンツ の "7. FPGA にハードウエア・デザインをダウンロード" を参照してください。
Quartus® Prime の下記メニューから Nios II Software Build Tools for Eclipse(以下 Nios II SBT)を起動します。
Tools メニュー ➤ Nios II Software Build Tools for Eclipse
<注意>
Quartus® Prime Standard Edition 19.1 以降の環境で Nios II SBT を利用するには、事前に WSL と Eclipse をインストールしてください。
詳細は、下記コンテンツをご覧ください。
(Windows Subsystem for Linux と Eclipse のインストール)
起動した Workspace Launcher の Workspace 欄に、ソフトウエア・プロジェクトのあるワークスペース用フォルダーを指定します。
サンプルプロジェクトでは、以下のとおりです。
\\<Quartus Prime プロジェクト>\ software
″操作3. RTL レベル・シミュレーション″ 時に設定したシミュレーション用のオプションを OFF にするため、
″ソフトウエア・プロジェクト名″_bsp フォルダーを右クリックし、
Nios II ➤ BSP Editor
により BSP Editor を再び起動し、“enable_sim_optimize“ オプション = Off にセットします。
[Main タブ]
・Settings ➤ Common ➤ hal
[Generate] ボタンをクリックし、″INFO: Finished generating BSP files. ″ のログを確認したら
[Exit] ボタンで BSP Editor を閉じます。
アプリケーション・プロジェクト(_bsp がついていないフォルダー)をマウスで 右クリック ➤ Build Project でビルドを実行します。
アプリケーション・プロジェクトのフォルダー (_bsp がついていない方) に対して
Run As ➤ Run Configurations
により、Run Configurations ウインドウを起動します。
Nios II Hardware を右クリック ➤ New を選択します。
Project タブ内 Project name において、ソフトウエア・プロジェクト名を選択します。 (サンプルプロジェクトでは soft_test)
Target Connectionタブを選択し、右上の [Refresh Connections] ボタンをクリックします。
図のように USB-Blaster II が検出され、ターゲット・ボードとの接続が確認できます。
点線枠内のオプションは、このサンプルプロジェクトではデフォルトのままとしますが
必要に応じて設定してください。
[Notes]
各オプションの内容は、以下のコンテンツで紹介しています。
Nios® II SBT for Eclipse における Run/Debug Configuration 設定の使い方
画面右下にある [Run] ボタンをクリックします。
Console ウインドウに、C 言語ソース上に記載した alt_printf 関数の出力キャラクター (Hello from Nios II !!) が確認でき
Nios® II がソフトウエア・プログラムを実行したことがわかります。
では、実際に MAX® 10 FPGA 開発キット上のプッシュボタン [S1] をポチッ♪と押してみましょう。
(画像をクリックすると、動画が見られます。)
できました!
Nios® II がブートプログラムを実行し、LED を点灯させています。
無事に Nios® II でLチカ、成功です!!
動作を確認したら、Nios II Console ウインドウの右上にある赤いボタンをクリックしてプログラムを終了します。
MAX® 10 は FPGA = プログラマブル・デバイスですから、
今回の論理回路はそのままに、出力ピンの番号を別の LED に接続されているピン番号に変更すれば、点灯する LED の位置も変わりますよ。
また、Nios® II のブートプログラムの内容を変えれば、ピンアサインはそのままに実行される動作を変えることもできます。
9. Nios® II のブートプログラムを FPGA のオンチップ・メモリーに組み込もう
ここからは、Nios® II ビギナーから ちょっとステップアップ ♪
ソフトウエア・プログラムがシステム上で期待どおりに動作したので
このブートプログラムを FPGA のオンチップ・メモリーに組み込んでみましょう。
9-1.Nios® II のブート・プログラムを HEX ファイルに変換
Nios II SBT において、アプリケーション・プロジェクト (_bsp が付いていないフォルダー) を右クリック 選択し
下記メニューからソフトウエアの HEX ファイルを生成します。
Make Targets ➤ Build... ➤ mem_init_generate ➤ [Build] ボタンをクリック
\\<アプリケーション・プロジェクト用フォルダー>\mem_int フォルダー内に
meminit.qip と *_onchip_memory.hex が確認できます。
9-2. meminit.qip を Quartus® Prime のプロジェクトに登録しコンパイル
Quartus® Prime の下記メニューにより、プロジェクトに meminit.qip を追加登録します。
Project メニュー ➤ Add/Remove Files in Project
その後、Quartus® Prime でコンパイルを実行します。
Processing メニュー ➤ Start Compilation
コンパイルが完了すると、Nios® II のブートプログラムを含んだ .sof および .pof が生成されます。
9-3.FPGA に書き込み、実機検証
Quartus® Prime の Programmer を起動して .sof を書き込み、MAX® 10 FPGA 開発キット上のプッシュボタン [S1] を ポチッ♪と押してみましょう。
Nios II SBT でブートプログラムを転送しなくても、sof ファイルだけで L チカします。
今書き込んだのは MAX® 10 内の CRAM なので、ボードの電源を OFF にするとデータは消去されます。
プログラミング・データを MAX® 10 内の CFM (不揮発性の Flash メモリー領域) に書き込む場合は
Programmer で .pof をダウンロードしてください。
これでボードの電源を OFF っても、データは消えることはありません。
以上で、 Nios® II の L チカ作業は終了です。
Nios® II ブートプログラム 時短アップデート方法
FPGA デザインの変更がなく、Nios® II のブートプログラム (つまりオンチップ・メモリーの初期値データ) のみを更新させる場合
再コンパイルを実行しますが、実は、フルコンパイルせずにアップデートさせる時短な方法があります。
なお この時短方法は、Project メニュー ➤ Add/Remove Files in Project において meminit.qip が既存登録されて
フルコンパイルした実績があることが前提です。
(meminit.qip 無しのアップデート時短方法は、こちらの "meminit.qip 無し編" を参考にしてください。)
① Nios II SBT でプログラム内容を変更し、Build Project を実行します。
② アプリケーション・プロジェクト (_bsp が付いていないフォルダー) を右クリック 選択し、下記メニューにより Hex ファイルを更新します。
Make Targets ➤ Build... ➤ mem_init_generate ➤ [Build] ボタンをクリック
③ Quartus® Prime の下記メニューにより、オンチップ・メモリーの初期値データ部分のみを更新します。
Processing メニュー ➤ Update Memory Initialization File
④ Quartus Prime の下記メニューにより、オンチップ・メモリーの初期値データのみが更新された .sof ファイルが生成されます。
Processing メニュー ➤ Start ➤ Start Assembler
この .sof を用いて、pof や jic を作成してください。
Nios® II ブートプログラム 時短アップデート方法 (meminit.qip 無し編)
この時短方法は、Platform Designer で作成したオンチップ・メモリーの初期値設定を特定に指定して
フルコンパイルした実績があることが前提です。
①Nios II SBT でプログラム内容を変更し、Build Project を実行します。
② アプリケーション・プロジェクト (_bsp が付いていないフォルダー) を右クリック 選択し、下記メニューにより Hex ファイルを更新します。
Make Targets ➤ Build... ➤ mem_init_generate ➤ [Build] ボタンをクリック
③ 先ほど生成した②の *_onchip_memory.hex ファイルをオンチップ・メモリーで指定した初期値ファイルへ上書きコピーします。
④ Quartus® Prime の下記メニューにより、オンチップ・メモリーの初期値データ部分のみを更新します。
Processing メニュー ➤ Update Memory Initialization File
⑤ Quartus® Prime の下記メニューにより、オンチップ・メモリーの初期値データのみが更新された .sof ファイルが生成されます。
Processing メニュー ➤ Start ➤ Start Assembler
この .sof を用いて、pof や jic を作成してください。
今回のサンプルデザインは、わかりやすくピンとピンをつなぐだけのシンプルな回路でしたが、
もっともっと拡張して論理回路や Nios® II システムを作れば、様々な可能が広がります。
みなさんもぜひ挑戦してみてください。
■ サンプルプロジェクト
今回の L チカのデザインは、このコンテンツどおり ゼロ から作成できますが
すぐに実機動作させたい場合は、操作 1~8 までを実施したサンプルプロジェクトをご利用ください。
※ このサンプルプロジェクトは、Quartus® Prime Standard Edition 20.1.0 Build711 で作成したものです。
※ サンプルプロジェクトのソフトウェア・プロジェクトを利用する際は、
ご自身の環境で Generate BSP および Build Project を実行してからご利用ください。
また、Run Configuration を実行する際は下記オプションを有効にして Run 実行してください。
・Ignore mismatched system ID = On
・Ignore mismatched system timestamp = On
おすすめ記事/資料はこちら
インテル® FPGA の Nios® II で はじめてのLチカ! Part 1
インテル® FPGA の Nios® II で はじめてのLチカ! Part 2
FPGA のオンチップ・メモリーで Nios® II をブートさせてみよう
MAX® 10 の UFM で Nios® II をブートさせてみよう
おすすめセミナー/ワークショップはこちら
インテル® Cyclone® 10 LP FPGA Seminar In a Box