サイト内検索

こんにちは。

マクニカで Altera® FPGA の技術サポートをしている アルテラ ハナコ です。

このページでは、Altera® FPGA に Nios® V を入れて L チカさせる方法 をご紹介しています。

これまで、下記 作業ステップのうち 操作 1 ~ 6 までを実施してきました。(詳細は Part 1: ハードウェア開発 をご覧ください。)

今回 Part 2: ソフトウェア開発 では、操作 7 ~ 11 をご紹介します。

Nios® V の開発フロー (再掲)

作業ステップ (再掲)

1.  Platform Designer で Nios® V と周辺回路を設計する

2.  FPGA のデザインを完成させる

3.  RTL シミュレーションをする

4.  制約を設定する

5.  コンパイルをする

6.  タイミングを検証する

<※ 今回は 以降の作業からご覧ください。>

7.  BSP を生成する

8.  アプリケーション・プロジェクトを生成する

9.  RiscFree IDE にインポートする

10.  アプリケーションをビルド / デバッグする

11.  Nios® V の Boot プログラムを FPGA のオンチップ・メモリーに組み込む

 

<Notes> Quartus® Prime の細かな操作は、Altera® FPGA の開発フロー をご覧ください。

 

なお 操作7、操作8 および 操作10 (ビルドのみ) は、Part 1: ハードウェア開発 "3. RTL シミュレーションをする" 内で一部実施済みですが

ここでは、ハードウェア開発とソフトウェア開発が別の設計者である可能性を考慮し、操作フローを紹介します。

Part 1 のフローに沿い実施済みの人は、Part 2 の各作業内容を確認した上で "スキップ or 実施" を自身で判断してください。

 

 また ページ後半では、Nios® V の Boot プログラムを変更した場合に便利な "時短アップデート方法" もご案内しています。必見ですよ!

7. BSP を生成する

事前に Quartus® Prime プロジェクトフォルダー内に、ソフトウエア開発用のワークスペース (フォルダー) を手動で作成します。

このサンプルでは、software フォルダーを作成します。

さらに、software フォルダー内に、アプリケーション・プロジェクト用フォルダー (app) と BSP 用フォルダー (hal_bsp) をそれぞれ作成します。

 

BSP (Board Support Package) を生成するため、Windows の スタート  Intel FPGA <version.build_number> <Standard or Lite> Edition フォルダーを開き、Nios V Command Shell (Quartus Prime <version>) をクリックして、Nios V command shell を起動します。

Nios V command shell に下記コマンドを入力し、Quartus® Prime のプロジェクトフォルダーをカレントディレクトリーに指定します。

 

 cd C:\AlteraFPGA_prj\niosv_sample

 

Nios V command shell に下記コマンドを入力し、BSP Editor を起動します。

 

 niosv-bsp-editor

 

BSP Editor の File メニュー  New BSP… を選択後、SOPC Infomation File Name 欄横のボタンを押下し、使用するハードウェア情報 (.sopcinfo ファイル) を BSP Editor に指定します。その後 New BSP ウィンドウの [OK] ボタンをクリックします。

BSP Editor / sopcinfo ファイルの指定

 

BSP Editor の GUI が表示されます。今回のサンプルでは編集はおこなわず、GUI 右下の [Generate] をクリックします。

Information タブに Finished generating BSP files. が表示されたのを確認後 [Exit] します。

BSP Generate (BSP Editor)

▲ 作業ステップの一覧へ戻る

8. アプリケーション・プロジェクトを生成する

あらかじめ作成しておいた Nios® V の Boot プログラム (C ソースファイル) を 先ほど作成した software/app フォルダーへ移動します。

 presspb_led_niosv.c サンプル記述 

このサンプルでは、ファイル名を presspb_led_niosv.c として保存します。 

 

次に Nios V Command Shell へ 次のコマンドを入力します。

 

# アプリケーション・プロジェクト・ファイルの生成
niosv-app --bsp-dir=software/hal_bsp --app-dir=software/app --srcs=software/app/presspb_led_niosv.c --elf-name=presspb_led_niosv.elf

 

# アプリケーション・プロジェクトの構築
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -B software/app/build/Debug -S software/app

Nios V command shell に下記コマンドを入力し、シェルウィンドウを閉じます。

 

exit

▲ 作業ステップの一覧へ戻る

9. RiscFree IDE にインポートする

Windows の スタート  Intel FPGA <version.build_number> <Standard or Lite> Edition フォルダーを開き、Ashling RiscFree IDE for Intel FPGAs (Quartus Prime <version>) をクリックして、RiscFree IDE を起動します。

 

[Browse] ボタンでソフトウェア開発用のワークスペース software フォルダー を指定し、[Launch] ボタンをクリックします。

RiscFree IDE の GUI が起動します。

Workspace Launcher / RiscFree IDE

RiscFree IDE の File メニュー  New   Project を選択し、表示されたウィンドウから C/C++ Project (C/C++ フォルダー内) を選択後に [Next] ボタンをクリックします。

New Project

表示された New C/C++ Project ウィンドウの左枠から All を選択し、右枠から C++ Managed Build を選択後、[Next] ボタンをクリックします。 

New C/C++ Project

表示された C++ Project ウィンドウにおいて 次の項目を設定します。

 Project name: app

 Project type:   CMake driven > Empty Project

 Toolchains:   CMake driven

C++ Project

▲ 作業ステップの一覧へ戻る

10. アプリケーションをビルド / デバッグする

10-1. アプリケーションをビルド

アプリケーション・プロジェクトをインポート後、app プロジェクトを右クリック選択し、Build Project を実行します。

Build Project

C ソースコードのビルドが完了し、実行ファイル .elf が生成されます。

elf ファイルが生成

▲ 作業ステップの一覧へ戻る

10-2. アプリケーションをデバッグ

Build Project により生成された elf ファイルを評価ボード上の FPGA で実行し、動作を確認します。

10-2-1. FPGA のコンフィグレーション

FPGA に ハードウェア用のプログラム sof ファイルをダウンロードします。

 <Notes>

  Cyclone® 10 LP 評価キット利用者は、事前に DIP スイッチ SW1 のうち SW1.4 を On にセットしてください。

  また、このボードは USB-Blaster II 用のデバイスドライバーをインストールしてご利用ください。

  [参考情報] USB-Blaster II ドライバーのインストール

 

Cyclone® 10 LP Evaluation Kit に付属しているケーブルにおいて、mini USB (Type-B) を評価ボードに接続し、次に USB ケーブル のうち黒いコネクターをパソコンへ接続します。ボードに電源が供給されます。

 

Quartus® Prime の下記メニューから Programmer を起動します。

 

Tools メニュー ➤ Programmer

 

Programmer ウィンドウの Hardware Setup ボタンをクリックし、Cyclone 10 LP Evaluation Kit を選択します。

Hardware Setup (Programmer)

Programmer ウィンドウの Mode プルダウン・リストより、 JTAG を選択します。

File 欄には Quartus Prime のコンパイルで生成した の niosv_led_c10lp.sof ファイルがすでに登録され 、Device 欄には プロジェクトで指定した FPGA の型番 (今回のサンプルは 10CL025YU256) が表示されています 。

sof ファイル登録 (Programmer)

<Notes>

 もし sof ファイルが未登録の場合は、 Add File ボタンをクリックし、 //Quartus® Prime プロジェクトフォルダー/output_files/niosv_led_c10lp.sof を選択後、Open ボタンをクリックして File 欄に登録してください。あるいは、別の sof ファイルが登録されている場合には、そのファイルを選択後に Change File ボタンをクリックして //Quartus® Prime プロジェクトフォルダー/output_files/niosv_led_c10lp.sof を指定し直してください。

 

Programmer ウィンドウ内 niosv_led_c10lp.sof 行の右側にある Program/Configure オプションにチェックを入れ、[Start] ボタンをクリックして

ハードウェア用プログラムをダウンロードします。

Progress バーが 100% になり、Quartus® Prime の Messages ウィンドウ (System タブ) に Info: Successfully performed operation(s) のメッセージを

確認できたら、ダウンロードは完了です。

Configuration Successfully

10-2-2. Juart-terminal 登録

RiscFree IDE は、UART のターミナルである JTAG コンソールをもっていないため、外部の Tool を登録して JTAG コンソールを使用します。

以下のメニューから External Tools Configurations を起動します。

 

Run メニュー ➤ External Tools Configurations...

Run メニュー

External Tools Configurations 画面左側の Program をハイライト選択し、左上の New launch confiurations アイコンをクリックします。

External Tools Configurations

表示された GUI において、juart-terminal を登録します。

 Name:   juart-terminal

 Location:   juart-terminal.exe の絶対パス ([Browse File System...] ボタンを活用)

         例) C:\altera\24.1std\quartus\bin64\juart-terminal.exe

 Working Directory: [Browse Workspace...] ボタンをクリックし、Folder Selection ウィンドウで app を選択

 

External Tools Configurations の右下にある [Apply] ボタンにより情報を登録し、[Run] ボタンをクリックして実行します。

juart-terminal の登録

10-2-3. Run Configuration 起動

Cyclone® 10 LP Evaluation Kit 上の FPGA にソフトウェア用プログラムの elf ファイルをダウンロードするため、app プロジェクトを右クリックし以下のメニューを選択します。

 

Run As  ➤ Run configurations...

Run As > Run configurations

Run configurations ウィンドウにおいて、Ashling RISC-V Hardware Debugging をダブルクリックします。

Main タブ内の [Search Project...] ボタンをクリックし、Program Selection ウィンドウから presspb_led_niosv.elf を選択して [OK] ボタンをクリックします。

elf ファイルを選択

Main タブにおいて、次の内容が反映されていることを確認します。

 Name:   任意名を入力 (今回のサンプルでは app Debug)

 Project:  app

 C/C++ Application: build/Debug/presspb_led_niosv.elf

Main タブ (Run Configurations)

Debugger タブに切り替え、[Auto-detect Scan Chain] ボタンをクリックし、Device/Tap selection 欄に 10CL025(Y|Z) が検出されたことを確認できたら、右下にある [Apply] ボタンをクリックします。

Debugger タブ (Run Configurations)

10-2-4. Run As 実行

Run Configuration ウィンドウの右下にある [Run] ボタンをクリックします。

プログラムが実行されると、RiscFree IDE の Console に alt_printf 関数で指定した "Hello from Nios V !!" が表示されます。

また、評価ボード上のプッシュボタン [PB3] を押下すると4つの LED は点灯し、[PB3] を離すと LED はすべて消灯することが確認できます。

Console の表示 / 評価キットの LED

 

 

動作確認を終えたら、RiscFree IDE の Console にある ■ ボタンをクリックし、プログラムを終了します。

 

RiscFreeIDE の File メニュー ➤ Exit を選択し、RiscFree IDE の作業を終了します。

▲ 作業ステップの一覧へ戻る

11. Nios® V の Boot プログラムを FPGA のオンチップ・メモリーに組み込む

ソフトウェア・プログラムが期待どおりに動作したので、この Boot プログラムを FPGA のオンチップ・メモリーに組み込んでみましょう。

11-1.Nios® V の Boot プログラムを hex ファイルに変換

Windows の スタート ➤ Intel FPGA <version.build_number> <Standard or Lite> Edition フォルダーを開き、Nios V Command Shell (Quartus Prime <version>) をクリックし、再び Nios V command shell を起動します。

 

Nios V command shell に下記コマンドを入力し、Quartus® Prime のプロジェクトフォルダーをカレントディレクトリーに指定します。

 

 cd C:\AlteraFPGA_prj\niosv_sample

elf2hex により生成された hex ファイル

次に 下記コマンドを入力し、elf ファイルを hex ファイルに変換します。

 

elf2hex app/build/<user_applicatio>.elf -o <hex_output_file>.hex -w <On-Chip RAM のデータ幅> -b <On-Chip RAM の ベースアドレス> -e <On-Chip RAM の エンドアドレス>

 

例)

elf2hex software/app/build/Debug/presspb_led_niosv.elf -o software/app/niosv_system_onchip_memory.hex -w 32 -b 0x00010000 -e 0x00019FFF

 

 <Notes>

 Platform Designer で作成した On-chip Memory の初期値設定がデフォルト (Initialize

 memory content = On) の場合は、hex ファイル名は niosv_system_onchip_memory.hex にしてください。

 もし、Enable non-default initialization file = On でデフォルト以外のファイルを指定している場合は、

 elf2hex コマンドの -o を 目的のファイル名およびパス先で指定してください。

 例) elf2hex software/app/build/Debug/presspb_led_niosv.elf -o ocram_init/niosv_boot.hex -w 32 -b 0x00010000 -e 0x00019FFF

 

▲ 作業ステップの一覧へ戻る

11-2. meminit.qip を作成し、Quartus® Prime のプロジェクトに登録しコンパイル

<Notes>

Platform Designer で作成した On-chip Memory の初期値設定が デフォルトではないファイルを指定している (つまり Enable non-default initialization file = On) 場合は、meminit.qip の作成は不要です。そのため、作業①~③ はスキップしてください。

 

 

① 先ほど作成した Nios® V 用 Boot プログラムの hex ファイルを FPGA 内蔵メモリー (Nios® V システムの On-Chip Memory) の初期値として反映させるため、

 下記制約をテキストファイルに記入します。

  

 set_global_assignment -name SEARCH_PATH $::quartus(qip_path)

 (  meminit.qip サンプル記述)

 

② ファイル名を meminit.qip とし、Nios® V 用 Boot プログラムの hex ファイルと同フォルダーに保存します。

③ Quartus® Prime の下記メニューにより、プロジェクトに meminit.qip を

  追加登録します。

 

  Project メニュー ➤ Add/Remove Files in Project

 

④ Quartus® Prime でコンパイルを実行します。

 

  Processing メニュー ➤ Start Compilation

 

コンパイルが完了すると、Nios® V の Boot プログラムを含んだ .sof が生成されます。

 

▲ 作業ステップの一覧へ戻る

11-3.FPGA に書き込み、実機検証

Quartus® Prime の Programmer を起動して .sof を書き込みます。

評価ボード上のプッシュボタン [PB3] を押下すると4つの LED は点灯し、[PB3] を離すと LED はすべて消灯することが確認できます。

Quartus® Prime の Programmer で .sof ダウンロード

これで、sof ファイルに Nios® V の Boot プログラムが組み込まれました!

 

FPGA のコンフィグレーション用 ROM 向けにプログラミングファイルが必要な場合は、Quartus® Prime の Convert Programming Files で この sof ファイルをもとにファイルを生成してご利用ください。

 

以上で、 Nios® V の L チカ作業は終了です。

▲ 作業ステップの一覧へ戻る 

Nios® V Boot プログラム 時短アップデート方法

FPGA のハードウェア側のデザインには変更がなく Nios® V の Boot プログラム (つまり On-Chip Memory の初期値データ) のみを更新させる場合、Quartus® Prime の再コンパイル実行が必要です。しかし、フルコンパイルせずに On-Chip Memory の初期値データだけをアップデートさせる方法があるんです!

 

なお、この時短方法は 以下 3点 の条件を満たしていることが前提です。

 ・ Platform Designer で作成した On-chip Memory の初期値を、Memory Initialization パラメーターで設定していること

 ・ Project メニュー ➤ Add/Remove Files in Project において meminit.qip が登録してあること (※ Initializememory content = On の場合のみ)

 ・ Quartus® Prime でフルコンパイルを実行していること

 

 

① Nios® V の Boot プログラム内容を変更します。

  

② Windows の スタート ➤ Intel FPGA <version.build_number> <Standard or Lite> Edition フォルダーを開き、

  Nios V Command Shell (Quartus Prime <version>) をクリックし、Nios V command shell を起動します。

 

③ 下記コマンドを入力し、Quartus® Prime のプロジェクトフォルダーをカレントディレクトリーに指定します。

  cd C:\AlteraFPGA_prj\niosv_sample

 

④ 下記コマンドを入力し、C ソースコードのビルドを実行し .elf を生成します。

  make -C software/app/build/Debug

 

⑤ 下記コマンドを入力し、elf ファイルを hex ファイルに変換します。

elf2hex app/build/<user_applicatio>.elf -o <hex_output_file>.hex -w <On-Chip RAM のデータ幅> -b <On-Chip RAM の ベースアドレス> -e <On-Chip RAM の エンドアドレス>

  例) elf2hex software/app/build/Debug/presspb_led_niosv.elf -o software/app/niosv_system_onchip_memory.hex -w 32 -b 0x00010000 -e 0x00019FFF

 

 <Notes>

 Platform Designer で作成した On-Chip Memory の初期値設定において、Enable non-default initialization file = On によりデフォルト以外のファイルを指定している場合は、

 elf2hex コマンドの -o を 目的のファイル名およびパス先で指定してください。

 例) elf2hex software/app/build/Debug/presspb_led_niosv.elf -o ocram_init/niosv_boot.hex -w 32 -b 0x00010000 -e 0x00019FFF

 

⑥ Quartus® Prime の下記メニューにより、FPGA 内蔵メモリーの初期値データ部分のみを更新します。

  Processing メニュー ➤ Update Memory Initialization File

Update Memory Initialization File

⑦ Quartus® Prime の下記メニューにより、FPGA 内蔵メモリーの初期値データ部分が更新された .sof ファイルが生成されます。

  Processing メニュー ➤ Start ➤ Start Assembler

Start Assembler

 

生成 (更新) された .sof を用いて、.pof や .jic を再生成してください。

▲ 作業ステップの一覧へ戻る

 

 

 今回のサンプルデザインは、わかりやすくシンプルな構成でしたが

ハードウェア側の論理回路や Nios® V システムをもっともっと拡張して作成すれば、さまざまな可能性が広がります。

みなさんも ぜひ挑戦してみてください。

 

サンプルプロジェクト

サンプルとして、今回の L チカ デザインの 作業ステップ 1~2 までを実施した Quartus® Prime プロジェクトの qar ファイルをアップロードします。

参考にしてください。

作業ステップ

 Cyclone® 10 評価キット用 Nios® V で L チカ  Quartus® Prime サンプルプロジェクト [VHDL] (Quartus® Prime Standard Edition 編)

 

 Cyclone® 10 評価キット用 Nios® V で L チカ Quartus® Prime サンプルプロジェクト [Verilog HDL] (Quartus® Prime Standard Edition 編)

 

 <Notes>

・ このサンプルプロジェクトは、Quartus® Prime Standard Edition 24.1 で作成しています。

・ Platform Designer で niosv_system.qsys を開き、Generate HDL を実行してから作業してください。

▲ 作業ステップの一覧へ戻る

おすすめ記事/資料はこちら

これからはじめる Altera® FPGA

Nios® V まとめページ

Altera® FPGA で はじめての L チカ!

FPGA のオンチップ・メモリーで Nios® II をブートさせてみよう

MAX® 10 の UFM で Nios® II をブートさせてみよう

Altera® FPGA の開発フロー

おすすめオンラインセミナーおよびワークショップはこちら

Agilex™ 5 FPGA で Nios® V を動かしてみよう

Nios® V プロセッサー 入門 コース