Nios IIはアルテラのFPGAファミリーのために設計された32ビットの組み込み用途のプロセッサアーキテクチャである。Nios IIは、DSPからシステム制御までの幅広い組み込みコンピュータ用途により適すように、元のNiosアーキテクチャを大きく拡張している。

Nios IIは、ザイリンクスのFPGA用のソフトコアCPUであるMicroBlazeと競合している。MicroBlazeとは異なり、Nios IIはサードパーティーの知的所有権プロバイダであるシノプシスのDesignwareを通してライセンスを得られる。Designwareライセンスにより、設計者はNiosをベースとした設計をFPGAプラットフォームから、大量生産されるASICデバイスに移行させることができる。

## 主要な機能

元のNiosと同様に、Nios IIアーキテクチャは、アルテラのFPGAの構成可能な論理ブロックとメモリブロックで全面的に実装されたRISCソフトコアである。Nios IIアーキテクチャのソフトコアの特徴は、システムの設計者が要求に応じたNios IIコアを指定し生成し、特定の用途で求められる仕様に適合させることができることである。システムの設計者は、Nios IIの基本的な機能を拡張することができる。また、あらかじめ定義されたメモリ管理ユニットを追加したり、カスタム命令やカスタム周辺機器を定義することもできる。

### カスタム命令

Nios II本来の命令と同じように、ユーザの定義した命令も2基までの32ビットの読み込み元レジスタから値を読み込むことができる。オプションとして32ビットの書き込み先レジスタに結果を書き戻すこともできる。カスタム命令を使うことにより、システムの設計者は求めるパフォーマンスに合致するようにシステムのハードウェアを細かく調整することができ、設計者は簡単に命令をC言語またはC++言語によるマクロとして扱うことができる。

### カスタム周辺機器

ほとんどのCPUサイクルが特定の部分のコードを実行しているようなパフォーマンスが致命的となるシステムでは、ユーザの定義した周辺機器は、ソフトウェアによるアルゴリズムをユーザの定義したハードウェアによるロジックに移し、消費電力とスループットを効率化させられる可能性がある。

### メモリ管理ユニット

Quartus 8.0で導入されたMMUオプションにより、Nios IIでハードウェアによるページングとメモリの保護を必要とするLinuxカーネルのようなオペレーティングシステムを実行させるようにできる。MMUがない場合、Niosは単純化された保護と仮想記憶モデルを使ったオペレーティングシステム(例えばμClinuxベースのオペレーティングシステムやFreeRTOSしか実行させることができない。

### メモリ保護ユニット

Quartus 8.0で導入されたMPUオプションにより、MMUによって提供される機能と似ているが、より簡素化されたモデルを持ち、MMUによるパフォーマンスが悪化しない、メモリ保護が提供される。

## Nios II CPUファミリ

Nios IIには3種の異なった設定がある。Nios II/f (高速)、Nios II/s (標準)、Nios II/e (エコノミー) である。

### Nios II/f

Nios II/fコアはコアサイズが大きいが最大パフォーマンスを実現するように設計されている。
Nios II/fの機能は、以下のようである。

- 分離された命令用とデータ用のキャッシュ (512Bから64KB)
- オプションのMMUまたはMPU
- 最大2GBまでの外部アドレス空間
- オプションの命令とデータのための緊密に結合したメモリ
- 最大のDMIPS/MHz値を達成するための6段階パイプライン
- シングルサイクルで実行できるハードウェアによる乗算とバレルシフタ
- オプションのハードウェアによる除算
- 動的な分岐予測
- 最大256のカスタム命令と無制限のハードウェアアクセラレータ
- JTAGデバッグモジュール
- オプションのハードウェアブレークポイント、データトリガー。リアルタイムトレースを含んだJTAGデバッグモジュールの拡張

### Nios II/s

Nios II/sコアはパフォーマンスとコストのバランスを保つように設計されている。
Nios II/sの機能は、以下のようである。

- 命令キャッシュ
- 最大2GBまでの外部アドレス空間
- オプションの命令とデータのための緊密に結合したメモリ
- 6段階パイプライン
- 静的な分岐予測
- ハードウェアによる乗算、除算、バレルシフタ
- 最大256のカスタム命令
- JTAGデバッグモジュール
- オプションのハードウェアブレークポイント、データトリガー。リアルタイムトレースを含んだJTAGデバッグモジュールの拡張

### Nios II/e

Nios II/eコアはFPGAのロジックを可能な限り最小限使用するように設計されている。これは、低コストなCyclone II FPGAを使用する場合に特に効率が良くなる。Nios II/eの機能は、以下のようである。

- 最大2GBまでの外部アドレス空間
- JTAGデバッグモジュール
- 700より少ない論理素子数
- オプションのデバッグ用の拡張
- 最大256のカスタム命令

## Avalon スイッチ・ファブリック・インターフェース

Nios IIはAvalonスイッチ・ファブリックを組み込まれた周辺機器とのインターフェースとして使用している。唯一のバスマスターが一度バスにアクセスするプロセッサベースシステムにおける従来型のバスに比べ、Avalonスイッチ・ファブリックは、スレーブ側の調停スキームを使用し、複数のマスターが同時に操作できるようにしている。

## 開発プロセス

Nios IIの開発は、2つの別々の段階からなっている。ハードウェアの生成とソフトウェアの作成である。

アルテラのEmbedded Developer Suite (EDS)と呼ばれるアプリケーション内にホストされる。EDSは完全な統合開発環境で、ハードウェアとソフトウェアの両方を、2つの段階のいずれでも管理することができる。

### ハードウェアの生成プロセス

Nios IIハードウェアは、SOPC (System-on-a-Programmable-Chip) Builderを使って設計される。Quartus-IIパッケージのコンポーネントを使いNiosシステムの設定と生成をする。設定のためのグラフィカルユーザインタフェース (GUI) によりユーザはNios IIの機能セットを選択することができ、周辺機器とI/O ブロック (タイマやメモリコントローラ、シリアルインターフェースなど) を組み込むことができる。ハードウェアの使用を決め終えると、Quartus-IIは合成、ターゲットのFPGAシステム全体の配置と接続の実装をする。Quartus-II Web Edition 3.0 パッケージに統合されている SOPC Builder 3.0は、32ビットのNios IIがまだNiosと呼ばれている頃に存在した。

### ソフトウェア作成プロセス

Embedded Design Suiteと呼ばれるソフトウェアパッケージが、ソフトウェアの開発を管理する。Eclipse IDEをベースとしており、EDSはC/C++コンパイラ (GNUツールチェーンをベースとしている)、デバッガ、命令セットシミュレータかを含まれている。EDSでは、プログラマはアプリケーションをシミュレーションでテストすることができるし、実際のFPGAホストにコンパイル済みのアプリケーションをダウンロードして実行することもできる。

C/C++開発環境がGCCをベースにしているため、非常に多数のLinux用のオープンソースソフトウェアを、最低限の修正をするか、修正することなしにコンパイルすることができる。サードパーティーのオペレーティングシステムもNios IIへ移植されている。これらにはRTOSであるMicrium uC-OS II、eCos、μClinuxベースのオペレーティングシステム、FreeRTOSがある。

現在提供されていない元のNiosはアルテラの最初のFPGA製品向けの構成可能型16ビット組み込みプロセッサであった。新規の設計者に対して、アルテラは32ビットのNios IIを推奨している。

## 参照

- MicroBlaze