こんにちは。

マクニカでインテル® FPGA の技術サポートをしている インテル・F・ハナコ です。

 

今回の "インテル® FPGA でLチカ" は

Nios® II ソフトコア・プロセッサー の登場です!

 

[関連情報] インテル® FPGA の Nios® II プロセッサー

 

基板上のプッシュボタンを押したときだけ LED が点灯し、プッシュボタンを離すと消灯する、

この動作を Nios® II ソフトコア・プロセッサー (以下 Nios® II) におこなわせます。

★ 今回実施する L チカを 動画でチェック

 

※ HDL 言語の論理回路だけで L チカさせる方法は、こちら のコンテンツをご覧ください。

■ 用意するもの

今回の開発環境は、これらを使用します。

Quartus® Prime Standard Edition

または Lite Edition (無償)

&

Nios II Software Build Tools for Eclipse (※)

Questa* - Intel® FPGA Edition

または

Questa - Intel FPGA Starter Edition (無償)

MAX® 10 FPGA 開発キット

ご検討・ご購入は、弊社までお問い合わせください。

(Macnica Mouser でもご購入いただけます。)

※ Nios® II Software Build Tools の利用には、Windows Subsystem for Linux と Eclipse のインストールが必要です。

  詳細は、こちらのコンテンツ をご覧ください。

■ 開発ボードの接続構成

プッシュボタン [S1] と LED [LED0] は、基板上で図のような接続構成になっています。

(※ その他、プッシュボタン [S2] をシステムのリセット信号として使用します。)

 

「プッシュボタンを押したら LED が点灯して、プッシュボタンを離すと LED が消灯する」

この動作を Nios® II にさせるためには、作業が大きく2つあります。

 

✔ FPGA に Nios® II を組み込む

✔ Nios® II に実行させるプログラム (C 言語) を作る

 

今回の L チカ動作は HDL 言語だと簡単に書けてしまえますが、今回はあえて Nios® II を使ってみましょう。

(これが Nios® II を採用したシステム開発への第一歩です!)

▲ ページトップへ戻る

■ 作業ステップ

今回のサンプルプロジェクトでは、以下の作業をおこないます。

  1. Platform Designer で Nios® II と周辺回路を設計する
  2. FPGA のデザインを完成させる
  3. RTL レベル・シミュレーションをする
  4. 制約を設定する
  5. コンパイルをする
  6. タイミングを検証する
  7. FPGA にハードウエア・デザインをダウンロード
  8. Nios II Software Build Tools for Eclipse によりソフトウエアをシステムで実行する (Part 2 のページへ)
  9. Nios® II のブートプログラムを FPGA のオンチップ・メモリに組み込む (Part 2 のページへ)

 

各作業へのショートカットは、上記または画面左側の項目をクリックしてご利用ください。

大まかな開発の流れは、インテル® FPGA の開発フロー をご覧ください。

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

1-1. Quartus® Prime プロジェクト作成

Quartus® Prime の下記メニューを選択し、プロジェクトを作ります

 

File New Project Wizard

 

ここでは、プロジェクト名と最上位エンティティー名を presspb_led_nios2 に設定します。

ターゲットデバイスは、MAX® 10 FPGA 開発キットの 10M50DAF484C6GES を選択します。

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

1-2. Nios® II システムを作成

Quartus® Prime の下記メニューから Platform Designer を起動して、Nios® II プロセッサーと周辺回路を作ります。

 

Tools メニュー ➤ Platform Designer

 

今回サンプルプロジェクトで作成する Nios® II システム構成は、下図のとおりです。

また、 Nios® II のブートメモリーおよび実行メモリーは、On-Chip RAM とします。

サンプルプロジェクトにおける Nios II システムの構成

1-2-1.

Nios® II Processor を追加します。

Platform Designer の左上にある IP Catalog から Nios II Processor を選び、コアのタイプから Nios II/e を選択します。

([Finish] ボタンをクリックすると追加されます。)

Nios® II Processor のパラメーター

Messages タブ内にエラーが表示されますが、ここではこのまま進みます。

 

 

 

1-2-2.

On-Chip Memory を追加します。

Nios® II と同様に、IP Catalog から On-Chip Memory (RAM or ROM) Intel FPGA IP を選び、下図のように設定します。

それ以外はデフォルトのまま [Finish] ボタンをクリックします。

On-Chip Memory (RAM or ROM) Intel FPGA IP のパラメーター

  

 

1-2-3. 

PIO を追加します。

IP Catalog から PIO(Parallel I/O) Intel FPGA IP を選び、バス幅と入出力属性を指定します。

プッシュボタン用の PIO と LED 用の PIO を作ります。

PIO (Parallel I/O) Intel FPGA IP のパラメーター

 

 

1-2-4. 

JTAG UART を追加します。

printf デバッグをするため、パソコンと JTAG インターフェース(USB-Blaster™ II 経由)で UART 通信する JTAG UART Intel FPGA IP を作ります。

デフォルト設定のまま [Finish] ボタンをクリックします。

JTAG UART Intel FPGA IP のパラメーター

 

 

1-2-5. 

各コンポーネントの名前を変更します。

System Contents タブの Name 欄で Rename をします。

サンプルデザインでは、下表のとおりにします。

変更前の名称 変更後の名称
nios2_gen2_0 nios2_cpu
onchip_memory2_0 onchip_memory
pio_0 pb_pio
pio_1 led_pio
jtag_uart_0 jtag_uart

Rename 後の System Contents タブ

 

 

1-2-6. 

Connections 欄の白丸をクリックして黒丸(接続)に変更し、各コンポーネントを接続します。

サンプルプロジェクトでは、下図のように接続します。

各コンポーネントの接続

 

 

1-2-7. 

割り込みポートを接続します。

JTAG_UART の Interrupt Sender と Nios® II Processor の Interrupt Receiver を上図のように接続します。

値は優先順位を示しますが、今回は割り込みが1本なので0のままにしIます。

 



1-2-8. 

Nios® II の Reset Vector / Exception Vector を設定します。

サンプルプロジェクトでは、Nios® II のブートメモリーと実行メモリーを On-Chip RAM(onchip_memory)にするため

Nios® II の Reset VectorException Vector を下図のように設定します。

Nios® II Processor の Reset Vector と Exception Vector 設定

 

 

1-2-9.

リセット信号と PIO を Nios® II システムの外部に Export します。

clk_0 の clk_in_reset の Export 欄をダブルクリックし、ポートを作成します。

リセット信号を Export

pb_pio および led_pio の external_connection の Export 欄をそれぞれにダブルクリックし、ポートを作成します。

pio を Export

 

 

1-2-10.

ベース・アドレスが重複のないように設定します。

下記メニューを実行すると、ベース・アドレスが自動的に適切な値に設定されます。

 

Platform Designer の System メニュー ➤ Assign Base Address

 

 


1-2-11. 

これで Nios® II システムの完成です。

File メニュー ➤ Save As… で名前を付け qsys ファイルを保存します。

サンプルプロジェクトでは、nios2_system.qsys として保存します。

 

 

 

1-2-12.

Nios® II システムのモジュールを生成します。

Nios® II システムの生成 (例: VHDL を選択)

[Synthesis]

Create HDL design files for synthesis:
Quartus® Prime でコンパイルするときの論理合成用の HDL 言語を指定します。

[Simulation]

Create simulation model:
シミュレーション用モデルのHDL言語を指定します。

[Output Directory]

Path:

ファイルを生成するフォルダーを指定します。

(サンプルプロジェクトではデフォルトのままにします。)

Platform Designer 画面の右下にある [Generate] ボタンをクリックし、モジュールを生成します。

Generate Completed ウインドウ

ファイルの生成が完了し Generate Completed ウインドウを [Close] ボタンで閉じた後、Platform Designer の右下にある [Finish] ボタンをクリックし、Platform Designerを閉じます。

 

以下のウインドウが表示されますので、内容を確認し [OK] ボタンをクリックします。

(※ この記載内容は、操作2-2. で実施します。)

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

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

2-1. Nios® II システムをユーザーデザインにインプリメント

最上位階層の HDL デザインに Platform Designer で作成したシステムモジュールを組み込みます。

最上位階層デザインへ組み込みやすいように Platform Designer で作成した Nios II システムが保存されているフォルダー内に、インスタンス補助ファイル(*_inst.vhd / *_inst.v)があるので、コピペ & 編集で接続を完了させます。

生成された Nios® II システムのフォルダー

例えばこんな感じです。

 

 VHDL トップデザイン サンプル記述    Verilog HDL トップデザイン サンプル記述

 

File メニュー ➤ Save As… でファイル名を付け保存します。


このサンプルプロジェクトでは、presspb_led_nios2.vhd / presspb_led_nios2.v として保存します。 

ファイルを保存 (例: VHDL)

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

2-2. デザインを登録

HDL デザインと Nios® II システムを Quartus® Prime のプロジェクトに登録します。                   

 

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

 

作成した最上位の HDL デザイン (presspb_led_nios2.vhd または presspb_led_nios2.v) と、Nios® II システムの .qip ファイルを登録します。

同様に、あとで NativeLink で RTL シミュレーションを実行するために、Nios® II システムの .sip ファイルも登録しておきましょう。

Add/Remove Files in Project

なお

.qip は、Platform Designer で作成したモジュール用フォルダー/synthesis 内にあります。

.sip は、Platform Designer で作成したモジュール用フォルダー/simulation 内にあります。

 

<関連 FAQ> .sip ファイルとはどのようなファイルですか?

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

 

 

2-3. エラボレーション実行

Processing メニュー Start Start Analysis & Elaboration を実行します。

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

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

RTL シミュレーションを実行し、動作確認をします。

下表を参考に、シミュレーションを実施したい内容に応じて情報を参照してください。

実施するシミュレーションの内容

参照する情報

Nios® II のソフトウェア動作を除いた プロジェクトデザイン全体のハードウェア動作のみをシミュレーションする
Platform Designer のシステムモジュールのみを使用して、Nios® II のソフトウェア動作をシミュレーションする
Nios® II のソフトウェア動作を含むプロジェクトデザイン全体をシミュレーションする

 

なお このサンプルプロジェクトは、

3番目の ″Nios® II のソフトウェア動作を含むプロジェクトデザイン全体をシミュレーションする フローでご案内します。

 

3-1. ソフトウエア・プロジェクトを作成

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

サンプルプロジェクトでは、software フォルダーを作成します。

Quartus® Prime プロジェクト・フォルダー内に software フォルダーを作成

Quartus® Prime の下記 Tools メニューから 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 をインストールしてください。詳細は、下記コンテンツをご覧ください。

Quartus® Prime Pro Edition 19.2 および Standard Edition 19.1 以降における Nios® II Software Build Tools 環境構築⽅法

(Windows Subsystem for Linux と Eclipse のインストール)

 

起動した Workspace Launcher の Workspace 欄に、先ほど作成したワークスペース用フォルダー software を指定します。

Workspace Launcher

Nios II SBT が起動します。

Nios II SBT の下記メニューにより、プロジェクト作成用のウィザードを起動します。

 

File メニュー ➤ New ➤ Nios II Application and BSP from Template

 

以下を指定します。

 

項目名

設定内容

SOPC Information File name

nios2_system.sopcinfo

(操作1. Platform Designer で生成した 組み込みシステムのハードウェア情報が記述された

システム定義ファイル .sopcinfo を、ブラウザーで指定します。)

Project name

soft_test

Templates

Blank Project

Nios II Application and BSP from Template ウインドウ

[Finish] ボタンをクリックします。

新しいプロジェクトが作成され、Project Explorer タブ内に soft_test と soft_test_bsp が追加されます。

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

3-2. Nios® II に動作させる C ソースコードを作成

Nios II SBT 上の soft_test フォルダーを右クリックで選択し、New ➤ Source File 選択します。

新規 C ソースコード作成

 

 

New Source File ウインドウにおいて、Source folder を指定し、Source file に作成する C ソースコードのファイル名を入力します。

New Source File ウインドウ

[Finish] ボタンをクリックします。

メイン画面に表示されたエディターに、下記コードを記述します。

#include "sys/alt_stdio.h"
#include "system.h"
int main()
{
    alt_printf("Hello from Nios II !!");
    while(1)
  {
      int reg;
      reg = *(volatile unsigned char *) PB_PIO_BASE;
      *(volatile unsigned char *) LED_PIO_BASE = reg;
  }
   return (0);
}

  presspb_led_nios2.c サンプル記述 

 

記述完了後、File メニュー Save でファイルを保存します。

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

3-3. システムを設定

下記メニューにより BSP Editor を起動します。

 

″ソフトウエア・プロジェクト名″_bsp フォルダーを右クリック ➤ Nios II ➤ BSP Editor

 

サンプルプロジェクトは、Nios® II のブートメモリーと実行メモリーが共に On-Chip RAM なので

以下のように設定します。

 

[Main タブ]

・Settings ➤ Common ➤ hal

BSP Editor : Main タブ (Settings > Common > hal)

それ以外はデフォルトのままにします。

[注意]

“enable_sim_optimize“ オプションは、シミュレーション時に main() 関数の実行までの時間を短縮する効果があります。

シミュレーション作業が終了後は、Off にしてください。チェックを入れた状態でビルドしたコードは、実際のアプリケーションには使用できません。

 


・Settings ➤ Advanced ➤ hal.linker

BSP Editor : Main タブ (Settings > Advanced > hal.linker)

[Linker Script タブ]

.bss、.heap、.rodata、.rwdata、.stack、.text をすべて On-Chip RAM(onchip_memory)にします。

BSP Editor : Linker Script タブ

その後、[Generate] ボタンをクリックします。

″INFO: Finished generating BSP files. ″ のログを確認したら、[Exit] ボタンで BSP Editor を閉じます。

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

3-4. ソフトウエア・プロジェクトをビルド

アプリケーション・プロジェクト(_bsp がついていないフォルダー)をマウスで選択し

右クリック ➤ Build Project でビルドを実行します。

ソフトウエア・プロジェクトをビルド

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

3-5. ソフトウェアの Hex ファイルを生成

Nios® II SBT において、アプリケーション・プロジェクト (_bsp が付いていないフォルダー) を右クリック 選択し、下記メニューからソフトウエアの HEX ファイルを生成します。

 

Make Targets ➤ Build... ➤ mem_init_generate [Build] ボタンをクリック

mem_init_generate 実行

\\<アプリケーション・プロジェクト用フォルダー>\mem_init フォルダー内に、*_onchip_memory.hex が生成されたことが確認できます。

 

mem_init フォルダー内

Nios II SBT の File メニュー Exit で画面を閉じます。

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

3-6. *_onchip_memory.hexファイルをコピー

 先ほど生成した *_onchip_memory.hex ファイルを、シミュレーション・モデルの保存フォルダーの

<Quartus Prime プロジェクト>/<Platform Designer フォルダー>/simulation/submodules

へコピーします。

*_onchip_memory.hex ファイルをコピー

もし、Platform Designer で作成したオンチップ・メモリーの初期値設定が下図のようにデフォルト指定ではない場合は

生成された *_onchip_memory.hex ファイルを指定のフォルダーにコピーし、

さらにファイル名が異なる場合は、*_onchip_memory.hex ファイルを指定ファイル名に変更してください。

Platform Designer 上のオンチップ・メモリのパラメーター

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

3-7. NativeLink シミュレーションの設定

Quartus® Prime 上で NativeLink を実行するための環境を構築します。

こちらのコンテンツ の "環境を設定する" を参考に、設定してください。

 

Quartus® Prime の下記メニューから、NativeLink シミュレーションの設定をおこないます。

 

Assignments メニュー Settings EDA Tool Settings Simulation

 項目名

 設定内容

 Tool name シミュレーションに使用する EDA ツール
 Format for output netlist  

Verilog HDL を選択

(VHDL 設計であっても、ここでは Verilog を指定してください。)

 Output directory デフォルト (simulation/<tool_name>)
 Compile test bench

オリジナルのテストベンチを設定

 VHDL テストベンチ サンプル記述    Verilog HDL テストベンチ サンプル記述

(こちらの Web コンテンツにおいて、

作業フロー “3. NativeLink settings 内にて、テストベンチを登録します。” を参考にしてください。)

EDA Tool Settings (Simulation)

各ウインドウを OK で閉じます。

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

3-8. NativeLink でファンクション・シミュレーション実行

Tools メニュー ➤ Run Simulation Tool ➤ RTL Simulation をクリックします。

RTL Simulation 実行

※ RTL Simulation 実行には、事前に Analysis & Elaboration または Analysis & Synthesis、あるいは Fitter のプロセスが実行されている必要があります。

  ただし、Start Compilation (Processing メニュー) は実行しないでください。EDA Netlist Writer が自動的に実行されてしまい

  正常な RTL Simulation 用のスクリプトが生成されない場合があります。

  フルコンパイルを実行してしまった場合は、再度 Analysis & Elaboration または Analysis & Synthesis、あるいは Fitter を実行後に

  RTL Simulation を行ってください。

 


Wave ウインドウに波形が表示されます。

Questa - Intel FPGA Edition Wave ウインドウ

期待する動作になっていることを確認後、シミュレーションおよび Questa - Intel FPGA Edition を終了します。

 

Questa - Intel FPGA Edition の Simulate メニュー ➤ End Simulation、File メニュー ➤ Quit

 

その後、Quartus Prime の Assignments メニュー ➤ Settings ➤ EDA Tool Settings ➤ Simulation において、Tool name を <none> に戻します。

 

[参考]

NativeLink を活用せず ModelSim (Intel FPGA Edition を含む) でシミュレーションを実施する場合は

Platform Designer の生成フォルダー内にある シミュレーション用スクリプトファイル msim_setup.tcl をカスタマイズします。

/<Nios II システムのフォルダー>/simulation/mentor/msim_setup.tcl

 

msim_setup.tcl の編集や作業フローは、下記コンテンツを参考にしてください。

msim_setup.tcl を編集・使用する方法 

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

4. 制約を設定する

4-1. ピンアサインを設定

Quartus® Prime の Assignments メニュー ➤ Pin Planner を起動し、デザインのピンを FPGA へピンアサインします。

MAX® 10 FPGA 開発キットの場合、以下のようにピンを設定してください。

Pin Planner : All Pins List

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

4-2. コンフィグレーション・モードを選択

Quartus® Prime の Assignments メニュー ➤ Device Device and Pin Options により、コンフィグレーション・モードを指定します。

このサンプルプロジェクトでは、Single Compressed Image with Memory Initialization を選択します。 

Device and Pin Options : Configuration カテゴリー

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

4-3. タイミング制約を設定

プロジェクトデザインに対してタイミング制約を作成します。

サンプルプロジェクトは 50MHz のクロックで動作する仕様のため、クロック定義のコマンドを記述した SDC を作成し、

プロジェクトに追加登録します。

Nios® II システム用の SDC は、qip ファイルの登録時(操作2-2)に自動生成された SDC ファイルが

Timing Analyzer (Assignments メニュー ➤ Settings) に適用されています。

ユーザー I/O ピンのタイミング制約は本来必須ですが、

このサンプルプロジェクトでは入力信号(プッシュボタンを人が押す・離す)も出力信号(LED が点灯・消灯)も超低速なので、ここでは I/O のタイミング制約を省略しています。

sdc ファイル (サンプル)

ユーザー回路の sdc ファイルを作成し、プロジェクトに登録します。

 

   presspb_led_nios2.sdc サンプル記述 

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

5. コンパイルをする

以下のメニューにより、コンパイルを実行します。

Processing ➤ Start Compilation

 

論理合成と配置配線が実行され、FPGA 内部に書き込むプログラムデータも同時に生成されます。

コンパイル終了後に、生成された コンパイル・レポートを検証 します。

 

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

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

コンパイルレポート内の Timing Analyzer フォルダーを展開してタイミング検証をします。

各タイミングモデルがクロック周波数の制約条件をクリアしたことが確認できます。

Timing Analyzer レポート

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

7. FPGA にハードウエア・デザインをダウンロード

MAX® 10 FPGA 開発キットとパソコンを mini-USB ケーブルで接続します。

電源ケーブルを接続し、ボードに電源を供給 (On) します。

 

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

 

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

 

Tools ➤ Programmer

 

Hardware Setup から USB-Blaster II を選択します

MAX® 10 をコンパイルすると、2種類の書き込み用ファイル (.sof / .pof) が生成されます。

まずは、ハードウェア回路を実機に実装し、ソフトウェアの動作をデバッグするので、SOF ファイルをダウンロードします。

サンプルプロジェクトでは、presspb_led_nipos2.sof をセットし、Start ボタンをクリックします。

 
Programmer の Progress バーが100% (Successful) になったらデータ転送完了です。

Programmer

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

ハードウェアの回路データは FPGA に転送されましたが、内部の Nios® II が実行するためのプログラムがまだありません。

なので、開発ボード上のプッシュボタン [S1] を押しても もちろん LED はうんともすんとも言いません。

 

続いて、Nios® II に実行させるソフトウェアの開発をしましょう。

インテル FPGA の Nios® II で はじめての L チカ!(Part 2)

 

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

これからはじめるインテル FPGA

インテル FPGA で はじめての L チカ!

インテル FPGA の Nios® II で はじめてのLチカ! Part 1

インテル FPGA の Nios® II で はじめてのLチカ! Part 2

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

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

インテル® FPGA の Nios® II プロセッサー

インテル® FPGA の開発フロー/トップページ

 



おすすめセミナー/ワークショップはこちら

 「Nios® II 入門編トライアル 」を動画で大公開!

「カスタムマイコン設計トライアル 」を動画で大公開!

インテル® Cyclone® 10 LP FPGA Seminar In a Box