Nios IIプロセッサ・リファレンス・ハンドブック Ver. 1.2

Nios II プロセッサ・リファレンス・ハンドブック
101 Innovation Drive
San Jose, CA 95134
(408) 544-7000
http://www.altera.com
NII5V1-1.2/JP
Copyright © 2003 Altera Corporation. All rights reserved. Altera, The Programmable Solutions Company, the stylized Altera logo, specific device designations, and all other words and logos that are identified as trademarks and/or service marks are, unless noted otherwise, the trademarks and
service marks of Altera Corporation in the U.S. and other countries. All other product or service names are the property of their respective holders. Altera products are protected under numerous U.S. and foreign patents and pending applications, maskwork rights, and copyrights. Altera warrants
performance of its semiconductor products to current specifications in accordance with Altera's standard warranty, but reserves the right to make
changes to any products and services at any time without notice. Altera assumes no responsibility or liability arising out of the application or use of any information, product, or service described herein except as expressly agreed to in writing by Altera
Corporation. Altera customers are advised to obtain the latest version of device specifications before relying on any published information and before placing orders for products or services.
Printed on recycled paper
ii
Altera Corporation
目次
改訂日付 .......................................................................................................................... xi
このハンドブックについて ........................................................................................... xiii
はじめに .......................................................................................................................................................................
対象読者 .................................................................................................................................................................
詳細情報について .......................................................................................................................................................
アルテラへのお問い合わせ .......................................................................................................................................
表記規則 .......................................................................................................................................................................
xiii
xiii
xiii
xiv
xiv
セクション I. Nios II プロセッサ
改定履歴 .................................................................................................................................................. セクション I–2
第 1 章 概要
はじめに ....................................................................................................................................................................... 1–1
Nios II プロセッサ・システムの基礎知識 ........................................................................................................ 1–1
Nios II プロセッサの使用開始 ............................................................................................................................ 1–2
Nios II プロセッサ・デザインのカスタマイズ ................................................................................................ 1–3
コンフィギュレーション可能なソフトコア・プロセッサの概念 ....................................................................... 1–4
コンフィギュレーション可能なソフトコア・プロセッサ ............................................................................. 1–4
柔軟なペリフェラル・セットとアドレス・マップ ......................................................................................... 1–4
カスタム命令 ......................................................................................................................................................... 1–5
自動システム生成 ................................................................................................................................................. 1–6
第 2 章 プロセッサ・アーキテクチャ
はじめに ....................................................................................................................................................................... 2–1
プロセッサの実装 ....................................................................................................................................................... 2–2
レジスタ・ファイル ................................................................................................................................................... 2–3
論理演算ユニット ....................................................................................................................................................... 2–3
未実装命令 ............................................................................................................................................................. 2–4
カスタム命令 ......................................................................................................................................................... 2–4
例外コントローラと割り込みコントローラ ........................................................................................................... 2–4
例外コントローラ ................................................................................................................................................. 2–4
統合割り込みコントローラ ................................................................................................................................. 2–4
メモリおよび I/O の構成 ........................................................................................................................................... 2–5
命令バスとデータバス ......................................................................................................................................... 2–6
キャッシュ・メモリ ............................................................................................................................................. 2–8
アドレス・マップ ............................................................................................................................................... 2–10
JTAG デバッグ・モジュール ................................................................................................................................... 2–10
JTAG ターゲット接続 ......................................................................................................................................... 2–11
ダウンロードおよび実行ソフトウェア ........................................................................................................... 2–11
ソフトウェア・ブレークポイント ................................................................................................................... 2–11
Altera Corporation
iii
Nios II プロセッサ・リファレンス・ハンドブック
目次
ハードウェア・ブレークポイント ................................................................................................................... 2–12
ハードウェア・トリガ ....................................................................................................................................... 2–12
トレース・キャプチャ ....................................................................................................................................... 2–13
第 3 章 プログラミング・モデル
はじめに ....................................................................................................................................................................... 3–1
汎用レジスタ ............................................................................................................................................................... 3–1
コントロール・レジスタ ........................................................................................................................................... 3–3
動作モード ................................................................................................................................................................... 3–5
スーパバイザ・モード ......................................................................................................................................... 3–5
ユーザ・モード ..................................................................................................................................................... 3–6
デバッグ・モード ................................................................................................................................................. 3–7
モードの変更 ......................................................................................................................................................... 3–7
例外処理 ....................................................................................................................................................................... 3–8
例外タイプ ............................................................................................................................................................. 3–9
例外の原因の特定 ............................................................................................................................................... 3–11
ネスト式例外 ....................................................................................................................................................... 3–13
例外からの復帰 ................................................................................................................................................... 3–13
ブレーク処理 ............................................................................................................................................................. 3–14
ブレークの処理 ................................................................................................................................................... 3–14
ブレークからの復帰 ........................................................................................................................................... 3–14
レジスタの使用 ................................................................................................................................................... 3–14
メモリ・アクセスとペリフェラル・アクセス ..................................................................................................... 3–15
アドレス指定モード ........................................................................................................................................... 3–15
キャッシュ・メモリ ........................................................................................................................................... 3–16
プロセッサのリセット状態 ..................................................................................................................................... 3–16
命令セットのカテゴリ ............................................................................................................................................. 3–17
データ転送命令 ................................................................................................................................................... 3–17
算術命令と論理命令 ........................................................................................................................................... 3–19
移動命令 ............................................................................................................................................................... 3–20
比較命令 ............................................................................................................................................................... 3–20
シフト命令と回転命令 ....................................................................................................................................... 3–21
プログラム制御命令 ........................................................................................................................................... 3–22
その他の制御命令 ............................................................................................................................................... 3–23
カスタム命令 ....................................................................................................................................................... 3–23
無動作命令 ........................................................................................................................................................... 3–24
未実装の可能性がある命令 ............................................................................................................................... 3–24
第 4 章 SOPC Builder での Nios II プロセッサの実装
はじめに ....................................................................................................................................................................... 4–1
Nios II Core タブ ......................................................................................................................................................... 4–2
コアの設定 ............................................................................................................................................................. 4–2
キャッシュ設定 ..................................................................................................................................................... 4–3
乗算および除算の設定 ......................................................................................................................................... 4–3
JTAG Debug Module タブ ......................................................................................................................................... 4–4
デバッグ・レベルの設定 ..................................................................................................................................... 4–5
オンチップ・トレース・バッファ設定 ............................................................................................................. 4–6
Custom Instructions タブ .......................................................................................................................................... 4–7
iv
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
目次
セクション II. ペリフェラル・サポート
改定履歴 ................................................................................................................................................. セクション II–2
第 5 章 Avalon インタフェース対応 SDRAM コントローラ
コアの概要 ................................................................................................................................................................... 5–1
機能の説明 ................................................................................................................................................................... 5–1
Avalon インタフェース ....................................................................................................................................... 5–2
オフチップ SDRAM インタフェース ................................................................................................................. 5–3
性能に関する検討事項 ......................................................................................................................................... 5–4
デバイスおよびツールのサポート ........................................................................................................................... 5–6
SOPC Builder でのコアのインスタンス化 .............................................................................................................. 5–6
Memory Profile タブ ............................................................................................................................................ 5–7
Timing タブ ............................................................................................................................................................ 5–8
ハードウェア・シミュレーションの検討事項 ....................................................................................................... 5–9
コンフィギュレーションの例 ................................................................................................................................. 5–11
ソフトウェア・プログラミング・モデル ............................................................................................................. 5–13
第 6 章 Avalon インタフェース対応 DMA コントローラ
コアの概要 ................................................................................................................................................................... 6–1
機能の説明 ................................................................................................................................................................... 6–1
DMA トランザクションの設定 .......................................................................................................................... 6–3
マスタ・リード・ポートとマスタ・ライト・ポート ..................................................................................... 6–3
アドレスのインクリメント ................................................................................................................................. 6–4
SOPC Builder でのコアのインスタンス化 .............................................................................................................. 6–4
DMA パラメータ(基本).................................................................................................................................... 6–5
高度なオプション ................................................................................................................................................. 6–5
ソフトウェア・プログラミング・モデル ............................................................................................................... 6–6
HAL システム・ライブラリ・サポート ............................................................................................................ 6–6
ソフトウェア・ファイル ..................................................................................................................................... 6–8
レジスタ・マップ ................................................................................................................................................. 6–8
割り込み動作 ....................................................................................................................................................... 6–13
第 7 章 Avalon インタフェース対応 PIO コア
コアの概要 ................................................................................................................................................................... 7–1
機能の説明 ................................................................................................................................................................... 7–1
データ入力および出力 ......................................................................................................................................... 7–3
エッジ・キャプチャ ............................................................................................................................................. 7–3
IRQ の生成 ............................................................................................................................................................. 7–3
設定の例 ....................................................................................................................................................................... 7–4
Avalon インタフェース ....................................................................................................................................... 7–4
SOPC Builder での PIO コアのインスタンス化 ..................................................................................................... 7–5
Basic Settings タブ ................................................................................................................................................ 7–5
Input Options タブ ............................................................................................................................................... 7–5
デバイスおよびツールのサポート ........................................................................................................................... 7–6
ソフトウェア・プログラミング・モデル ............................................................................................................... 7–6
ソフトウェア・ファイル ..................................................................................................................................... 7–7
レガシー SDK ルーチン ....................................................................................................................................... 7–7
レジスタ・マップ ................................................................................................................................................. 7–7
割り込み動作 ......................................................................................................................................................... 7–9
ソフトウェア・ファイル ..................................................................................................................................... 7–9
Altera Corporation
v
目次
Nios II プロセッサ・リファレンス・ハンドブック
第 8 章 Avalon インタフェース対応タイマ・コア
コアの概要 ................................................................................................................................................................... 8–1
機能の説明 ................................................................................................................................................................... 8–1
Avalon スレーブ・インタフェース ................................................................................................................... 8–3
デバイスとツールのサポート ................................................................................................................................... 8–3
SOPC Builder でのコアのインスタンス化 .............................................................................................................. 8–3
タイムアウト周期 ................................................................................................................................................. 8–3
ハードウェア・オプション ................................................................................................................................. 8–4
ウォッチドッグ・タイマとしてのタイマの設定 ............................................................................................. 8–5
ソフトウェア・プログラミング・モデル ............................................................................................................... 8–6
HAL システム・ライブラリ・サポート ............................................................................................................ 8–6
ソフトウェア・ファイル ..................................................................................................................................... 8–7
レジスタ・マップ ................................................................................................................................................. 8–7
割り込み動作 ....................................................................................................................................................... 8–10
第 9 章 Avalon インタフェース対応 JTAG UART コア
コアの概要 ................................................................................................................................................................... 9–1
機能の説明 ................................................................................................................................................................... 9–1
Avalon スレーブ・インタフェースとレジスタ ............................................................................................... 9–2
読み出しおよびライト FIFO ................................................................................................................................ 9–3
JTAG インタフェース ........................................................................................................................................... 9–3
ホスト・ターゲット接続 ..................................................................................................................................... 9–3
デバイスとツールのサポート ................................................................................................................................... 9–5
SOPC Builder でのコアのインスタンス化 .............................................................................................................. 9–5
Configuration タブ ............................................................................................................................................... 9–5
シミュレーション設定 ......................................................................................................................................... 9–7
ハードウェア・シミュレーションでの検討事項 ................................................................................................... 9–8
ソフトウェア・プログラミング・モデル ............................................................................................................... 9–8
HAL システム・ライブラリ・サポート ............................................................................................................ 9–9
ソフトウェア・ファイル ................................................................................................................................... 9–12
ホスト PC を介した JTAG UART コアへのアクセス .................................................................................... 9–13
レジスタ・マップ ............................................................................................................................................... 9–13
割り込み動作 ....................................................................................................................................................... 9–15
第 10 章 Avalon インタフェース対応 UART コア
コアの概要 ................................................................................................................................................................. 10–1
機能の説明 ................................................................................................................................................................. 10–2
Avalon スレーブ・インタフェースとレジスタ ............................................................................................. 10–2
RS-232 インタフェース ...................................................................................................................................... 10–3
トランスミッタ・ロジック ............................................................................................................................... 10–3
レシーバ・ロジック ........................................................................................................................................... 10–4
ボー・レートの生成 ........................................................................................................................................... 10–4
デバイスおよびツールのサポート ......................................................................................................................... 10–5
SOPC Builder でのコアのインスタンス化 ............................................................................................................ 10–5
コンフィギュレーション設定 ........................................................................................................................... 10–5
シミュレーション設定 ....................................................................................................................................... 10–8
ハードウェア・シミュレーションでの検討事項 ............................................................................................... 10–10
ソフトウェア・プログラミング・モデル ........................................................................................................... 10–10
HAL システム・ライブラリ・サポート ........................................................................................................ 10–10
ソフトウェア・ファイル ................................................................................................................................. 10–14
レガシー SDK ルーチン ................................................................................................................................... 10–15
vi
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
目次
レジスタ・マップ ............................................................................................................................................. 10–15
割り込み動作 ..................................................................................................................................................... 10–23
第 11 章 Avalon インタフェース対応 SPI コア
コアの概要 ................................................................................................................................................................. 11–1
機能の説明 ................................................................................................................................................................. 11–1
設定の例 ............................................................................................................................................................... 11–3
トランスミッタ・ロジック ............................................................................................................................... 11–4
レシーバ・ロジック ........................................................................................................................................... 11–4
マスタ・モードおよびスレーブ・モード ....................................................................................................... 11–5
Avalon インタフェース ..................................................................................................................................... 11–7
SOPC Builder における SPI コアのインスタンス化 ............................................................................................ 11–7
マスタ / スレーブ設定 ....................................................................................................................................... 11–7
データ・レジスタ設定 ....................................................................................................................................... 11–9
タイミング設定 ................................................................................................................................................... 11–9
デバイスおよびツールのサポート ....................................................................................................................... 11–10
ソフトウェア・プログラミング・モデル ........................................................................................................... 11–10
ハードウェア・アクセス・ルーチン ............................................................................................................. 11–10
ソフトウェア・ファイル ................................................................................................................................. 11–11
レガシー SDK ルーチン ................................................................................................................................... 11–12
レジスタ・マップ ............................................................................................................................................. 11–12
第 12 章 Avalon インタフェース対応 EPCS デバイス・コントローラ・コア
コアの概要 ................................................................................................................................................................. 12–1
機能の説明 ................................................................................................................................................................. 12–2
Avalon スレーブ・インタフェースとレジスタ ............................................................................................. 12–3
デバイスおよびツールのサポート ......................................................................................................................... 12–4
SOPC Builder でのコアのインスタンス化 ............................................................................................................ 12–4
ソフトウェア・プログラミング・モデル ............................................................................................................. 12–5
HAL システム・ライブラリ・サポート .......................................................................................................... 12–5
ソフトウェア・ファイル ................................................................................................................................... 12–5
第 13 章 Avalon インタフェース対応コモン・フラッシュ・インタフェース・
コントローラ
コアの概要 ................................................................................................................................................................. 13–1
機能の説明 ................................................................................................................................................................. 13–2
デバイスおよびツールのサポート ......................................................................................................................... 13–2
SOPC Builder でのコアのインスタンス化 ............................................................................................................ 13–3
Attributes タブ .................................................................................................................................................... 13–3
Timing タブ .......................................................................................................................................................... 13–4
ソフトウェア・プログラミング・モデル ............................................................................................................. 13–4
HAL システム・ライブラリ・サポート .......................................................................................................... 13–4
ソフトウェア・ファイル ................................................................................................................................... 13–5
第 14 章 Avalon インタフェース対応システム ID コア
コアの概要 ................................................................................................................................................................. 14–1
機能の説明 ................................................................................................................................................................. 14–1
デバイスおよびツールのサポート ......................................................................................................................... 14–2
SOPC Builder でのコアのインスタンス化 ............................................................................................................ 14–2
ソフトウェア・プログラミング・モデル ............................................................................................................. 14–2
ソフトウェア・ファイル ................................................................................................................................... 14–4
Altera Corporation
vii
目次
Nios II プロセッサ・リファレンス・ハンドブック
第 15 章 Avalon インタフェース対応キャラクタ LCD(Optrex 16207)コントローラ
コアの概要 ................................................................................................................................................................. 15–1
機能の説明 ................................................................................................................................................................. 15–1
デバイスおよびツールのサポート ......................................................................................................................... 15–2
SOPC Builder でのコアのインスタンス化 ............................................................................................................ 15–2
ソフトウェア・プログラミング・モデル ............................................................................................................. 15–2
HAL システム・ライブラリ・サポート .......................................................................................................... 15–3
LCD へのキャラクタの表示 .............................................................................................................................. 15–3
ソフトウェア・ファイル ................................................................................................................................... 15–4
レジスタ・マップ ............................................................................................................................................... 15–5
割り込み動作 ....................................................................................................................................................... 15–5
セクション III. 付録
改定履歴 ................................................................................................................................................ セクション III–1
第 16 章 Avalon インタフェース対応 Mutex コア
コアの概要 ................................................................................................................................................................. 16–1
機能の説明 ................................................................................................................................................................. 16–1
デバイスおよびツールのサポート ......................................................................................................................... 16–2
SOPC Builder でのコアのインスタンス化 ............................................................................................................ 16–2
ソフトウェア・プログラミング・モデル ............................................................................................................. 16–3
ソフトウェア・ファイル ................................................................................................................................... 16–3
ハードウェア Mutex ........................................................................................................................................... 16–3
Mutex API .................................................................................................................................................................. 16–5
第 17 章 Nios II コア実装の詳細
はじめに ..................................................................................................................................................................... 17–1
デバイス・サポート ................................................................................................................................................. 17–3
Nios II/f コア ............................................................................................................................................................. 17–3
概要 ....................................................................................................................................................................... 17–4
レジスタ・ファイル ........................................................................................................................................... 17–4
論理演算ユニット ............................................................................................................................................... 17–4
メモリ・アクセス ............................................................................................................................................... 17–6
実行パイプライン ............................................................................................................................................... 17–8
命令の性能 ........................................................................................................................................................... 17–9
例外処理 ............................................................................................................................................................. 17–11
JTAG デバッグ・モジュール ........................................................................................................................... 17–11
サポートされていない機能 ............................................................................................................................. 17–11
Nios II/s コア .......................................................................................................................................................... 17–11
概要 ..................................................................................................................................................................... 17–12
レジスタ・ファイル ......................................................................................................................................... 17–12
論理演算ユニット ............................................................................................................................................. 17–12
メモリ・アクセス ............................................................................................................................................. 17–13
実行パイプライン ............................................................................................................................................. 17–14
命令の性能 ......................................................................................................................................................... 17–15
例外処理 ............................................................................................................................................................. 17–16
JTAG デバッグ・モジュール ........................................................................................................................... 17–17
サポートされていない機能 ............................................................................................................................. 17–17
viii
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
目次
Nios II/e コア .......................................................................................................................................................... 17–17
概要 ..................................................................................................................................................................... 17–17
レジスタ・ファイル ......................................................................................................................................... 17–18
論理演算ユニット ............................................................................................................................................. 17–18
メモリ・アクセス ............................................................................................................................................. 17–18
命令実行ステージ ............................................................................................................................................. 17–18
命令の性能 ......................................................................................................................................................... 17–18
例外処理 ............................................................................................................................................................. 17–19
JTAG デバッグ・モジュール ........................................................................................................................... 17–19
サポートされていない機能 ............................................................................................................................. 17–19
第 18 章 Nios II プロセッサのリビジョン履歴
はじめに ..................................................................................................................................................................... 18–1
Nios II バージョン .................................................................................................................................................... 18–1
アーキテクチャ・リビジョン ................................................................................................................................. 18–2
コア・リビジョン ..................................................................................................................................................... 18–2
Nios II/f コア ....................................................................................................................................................... 18–3
Nios II/s コア ...................................................................................................................................................... 18–4
Nios II/e コア ...................................................................................................................................................... 18–5
JTAG デバッグ・モジュールのリビジョン .......................................................................................................... 18–5
第 19 章 アプリケーション・バイナリ・インタフェース
データ型 ..................................................................................................................................................................... 19–1
メモリ・アライメント ............................................................................................................................................. 19–1
レジスタの使用法 ..................................................................................................................................................... 19–2
データのエンディアン ............................................................................................................................................. 19–3
スタック ............................................................................................................................................................... 19–3
フレーム・ポインタの削除 ............................................................................................................................... 19–4
保存されたレジスタの呼び出し ....................................................................................................................... 19–4
その他のスタックの例 ....................................................................................................................................... 19–5
関数のプロログ ................................................................................................................................................... 19–6
引数と戻り値 ............................................................................................................................................................. 19–8
引数 ....................................................................................................................................................................... 19–8
戻り値 ................................................................................................................................................................... 19–8
第 20 章 命令セット・リファレンス
はじめに ..................................................................................................................................................................... 20–1
ワード形式 ................................................................................................................................................................. 20–1
I タイプ ................................................................................................................................................................. 20–1
R タイプ ................................................................................................................................................................ 20–2
J タイプ ................................................................................................................................................................. 20–3
命令オペコード ......................................................................................................................................................... 20–4
アセンブラ擬似命令 ................................................................................................................................................. 20–6
アセンブラ・マクロ ................................................................................................................................................. 20–7
命令セット・リファレンス ..................................................................................................................................... 20–8
索引
Altera Corporation
ix
目次
x
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
改訂日付
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
本書「Nios II プロセッサ・リファレンス・ハンドブック」の各章は、以下の日付で改訂されていま
す。章または章のグループは個別に提供されており、資料番号が記載されています。
このハンドブックについて
2004 年 9 月
改訂日付 :
1.
概要
改訂日付 :
資料番号 :
2004 年 9 月
NII51001-1.0
2.
プロセッサ・アーキテクチャ
2004 年 12 月
改訂日付 :
NII51002-1.2
資料番号 :
3.
プログラミング・モデル
2004 年 12 月
改訂日付 :
NII51003-1.2
資料番号 :
4.
SOPC Builder での Nios II プロセッサの実装
2004 年 12 月
改訂日付 :
NII51004-1.2
資料番号 :
5.
Avalon インタフェース対応 SDRAM コントローラ
2004 年 9 月
改訂日付 :
NII51005-1.1
資料番号 :
6.
Avalon インタフェース対応 DMA コントローラ
2004 年 12 月
改訂日付 :
NII51006-1.2
資料番号 :
7.
Avalon インタフェース対応 PIO コア
2004 年 9 月
改訂日付 :
NII51007-1.1
資料番号 :
8.
Avalon インタフェース対応タイマ・コア
2004 年 9 月
改訂日付 :
NII51008-1.1
資料番号 :
9.
Avalon インタフェース対応 JTAG UART コア
2004 年 12 月
改訂日付 :
NII51009-1.2
資料番号 :
Altera Corporation
xi
Nios II プロセッサ・リファレンス・ハンドブック
改訂日付
10.
Avalon インタフェース対応 UART コア
2004 年 9 月
改訂日付 :
NII51010-1.1
資料番号 :
11.
Avalon インタフェース対応 SPI コア
2004 年 9 月
改訂日付 :
NII51011-1.1
資料番号 :
12.
Avalon インタフェース対応 EPCS デバイス・コントローラ・コア
2004 年 9 月
改訂日付 :
NII51012-1.1
資料番号 :
13.
Avalon インタフェース対応コモン・フラッシュ・インタフェース・コントローラ
2004 年 12 月
改訂日付 :
NII51013-1.2
資料番号 :
14.
Avalon インタフェース対応システム ID コア
2004 年 9 月
改訂日付 :
NII51014-1.1
資料番号 :
15.
Avalon インタフェース対応キャラクタ LCD(Optrex 16207)コントローラ
2004 年 9 月
改訂日付 :
NII51015-1.0
資料番号 :
16.
Avalon インタフェース対応 Mutex コア
2004 年 12 月
改訂日付 :
NII51020-1.0
資料番号 :
17.
Nios II コア実装の詳細
2004 年 12 月
改訂日付 :
NII51015-1.2
資料番号 :
18.
Nios II プロセッサのリビジョン履歴
2004 年 12 月
改訂日付 :
NII51018-1.1
資料番号 :
19.
アプリケーション・バイナリ・インタフェース
2004 年 9 月
改訂日付 :
NII51016-1.0
資料番号 :
20.
命令セット・リファレンス
2004 年 12 月
改訂日付 :
NII51017-1.2
資料番号 :
xii
Altera Corporation
このハンドブックについて
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
はじめに
本書「Nios II プロセッサ・リファレンス・ハンドブック」は、Nios® II
エンベデッド・プロセッサ・ファミリの主要な参考資料です。このハン
ドブックは、ハイ・レベルな概念的説明から、基本的な実装の詳細まで、
「Nios II プロセッサとは何か?」という質問に答えます。このハンドブッ
クの各章では、Nios II プロセッサ・アーキテクチャ、プログラミング・
モデル、命令セット、ペリフェラルに関する情報などを定義しています。
このハンドブックは、Nios II プロセッサとその用途について解説した多
数のドキュメントの一部です。1–xiii ページの「詳細情報について」を
参照してください。
対象読者
このハンドブックは、読者にエンベデッド・プロセッサの概念に関する
基本的知識があることを想定しています。特定のアルテラのテクノロジ
やアルテラ開発ツールに関する知識は必要ありません。このハンドブッ
クでは、プロセッサ・システムのハードウェア実装の詳細に関する記述
は意図的に少なくしてあります。つまり、Nios II プロセッサは、アルテ
ラのフィールド・プログラマブル・ゲート・アレイ(FPGA)デバイス
向けに設計されているため、必然的に FPGA の実装概念が時々登場しま
す。FPGA テクノロジの知識は必要ありませんが、もしあれば Nios II プ
ロセッサのデザインおよび実装に関するエンジニアリング・トレードオ
フについてより深く理解できます。
詳細情報に
ついて
このハンドブックは、Nios II プロセッサ・ドキュメント集の一部です。
以下の参考資料も用意されています。
■ 「Nios II プロセッサ・リファレンス・ハンドブック」
(本書)では、
基本的なプロセッサのアーキテクチャと機能を定義しています。
■ 「Nios II ソフトウェア開発ハンドブック」では、ソフトウェア開発
■
Altera Corporation
2004 年 9 月
環境を説明し、Nios II プロセッサのアプリケーション・プログラミ
ングについて解説しています。
Nios II 統合開発環境(IDE)は、グラフィカル・ユーザ・インタフェー
ス(GUI)の機能を使用するためのオンライン・チュートリアルと
充実したリファレンスを提供しています。Nios II IDE を起動すると、
ヘルプ・システムが利用できます。
xiii
Nios II プロセッサ・リファレンス・ハンドブック
アルテラへのお問い合わせ
■
■
アルテラのオンライン・ソリューション・データベースは、使いや
すい検索エンジンによって、FAQ に対する回答を提供するインター
ネット・リソースです。www.altera.co.jp のサポート・センタにアク
セスし、Find Answers へのリンクをクリックしてください。
アルテラのアプリケーション・ノートとチュートリアルでは、特定
のアプリケーションまたは目的に対する Nios II プロセッサの使用方
法について、ステップごとに説明しています。多くの場合、これら
のドキュメントはアルテラの開発キットと同時にインストールされ
ますが、www.altera.co.jp から入手することもできます。
アルテラへの
お問い合わせ
アルテラ製品に関する最新情報は、アルテラの Web サイト、
www.altera.co.jp をご覧ください。テクニカル・サポートについては、
www.altera.co.jp/mysupport にアクセスしてください。また、アルテラの
販売代理店にもお問い合わせいただけます。
表記規則
本ハンドブックでは、以下の表記規則を使用しています。
書体
意味
太字かつ文頭が大文字
コマンド名、ダイアログ・ボックス・タイトル、チェックボックス・オプショ
ン、およびダイアログ・ボックス・オプションは、太字かつ文頭が大文字で表
記されています。例:Save As ダイアログ・ボックス。
太字
外部タイミング・パラメータ、ディレクトリ名、プロジェクト名、ディスク・
ドライブ名、ファイル名、ファイルの拡張子、およびソフトウェア・ユーティ
リティ名は、太字で表記されています。
例:fMAX, \qdesigns ディレクトリ、d: ドライブ、chiptrip.gdf ファイル。
斜体かつ文頭が大文字
資料のタイトルは、斜体かつ文頭が大文字で表記されています。
例:AN 75: High-Speed Board Design。
斜体
内部タイミング・パラメータおよび変数は、斜体で表記されています。
例:tPIA, n + 1。
変数は、山括弧(<>)で囲み、斜体で表記されています。
例:< ファイル名 >、< プロジェクト名 >.pof ファイル。
文頭が大文字
「小見出しタイトル」
キーボード・キーおよびメニュー名は、文頭が大文字で表記されています。
例:Delete キー、Options メニュー。
資料内の小見出しおよびオンライン・ヘルプ・トピックのタイトルは、鉤括弧
で囲んでいます。例:「表記規則」。
xiv
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Nios II プロセッサ・リファレンス・ハンドブック
書体
Courier フォント
表記規則
意味
信号およびポート名は、Courier フォントで表記されています。例:data1、
tdi、input。アクティブ Low 信号は、サフィックス n で表示されています
(例:resetn)。
表示されている通りに入力する必要のあるものは、Courier フォントで表記さ
れています(例:c:\qdesigns\tutorial\chiptrip.gdf)。また、
Report ファイルのような実際のファイル、ファイルの構成要素(例:AHDL
キーワードの SUBDESIGN)、ロジック・ファンクション名(例:TRI)も、
Courier フォントで表記されています。
1.、2.、3.、および
a.、b.、c. など
手順など項目の順序が重要なものは、番号が付けられリスト形式で表記されて
います。
■
箇条書きの黒点などは、項目の順序が重要ではないものに付いています。
●
•
√
チェックマークは、1 ステップしかない手順を表します。
指差しマークは、要注意箇所を表しています。
CAUTION マークは、特別な配慮および理解が必要であり、手順またはプロセ
スを始める前、または続ける際に確認すべき情報を示しています。
注意マークは、手順またはプロセスを始める前、または続ける際に確認すべき
情報を示しています。
矢印は、Enter キーを押すことを示しています。
足跡マークは、詳細情報の参照先を示しています。
Altera Corporation
2004 年 9 月
xv
Nios II プロセッサ・リファレンス・ハンドブック
表記規則
xvi
Nios II プロセッサ・リファレンス・ハンドブック
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
セクション I. Nios II プロセッサ
このセクションには、Nios® II プロセッサに関する情報が記載されてい
ます。
このセクションは、以下の章で構成されています。
Altera Corporation
■
第 1 章 概要
■
第 2 章 プロセッサ・アーキテクチャ
■
第 3 章 プログラミング・モデル
■
第 4 章 SOPC Builder での Nios II プロセッサの実装
セクション I–1
Nios II プロセッサ
改訂履歴
Nios II プロセッサ・リファレンス・ハンドブック
以下の表に、第 1 章∼第 4 章の改訂履歴を示します。これらのバージョン
番号は資料の改訂を追跡しているのもので、Nios II 開発キットや Nios II
プロセッサのバージョン番号には関係ありません。
章
1
2
3
日付 / バージョン
変更内容
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 12 月、v1.2
新しいコントロール・レジスタ
を追加。
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 9 月、v1.1
●
●
4
初版
2004 年 9 月、v1.1
●
2004 年 5 月、v1.0
セクション I–2
新しいコントロール・レジス
タ ctl5 の詳細を追加。
break インストラクションの
新しい動作を反映したデバッ
グ・モードおよびブレイク・
プロセッシングの詳細を更新。
2004 年 5 月、v1.0
●
ctl5
Nios II プロセッサ・バージョ
ン 1.1 の新規 GUI オプション
を反映した更新。
「乗算および除算設定」の項の
新規の詳細説明。
初版
Altera Corporation
1. 概要
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51001-1.0
はじめに
この章では、Nios® II エンベデッド・プロセッサ・ファミリについて説
明します。ハードウェア・エンジニアおよびソフトウェア・エンジニア
が、Nios II プロセッサと従来型のエンベデッド・プロセッサの類似点と
相違点を理解するのに役立ちます。
Nios II プロセッサ・システムの基礎知識
Nios II プロセッサは、以下の機能を備えた汎用 RISC プロセッサ・コア
です。
■
■
■
■
■
■
■
■
■
■
■
完全な 32 ビット命令セット、データ・パス、およびアドレス空間
32 個の汎用レジスタ
32 個の外部割り込みソース
32 ビットの演算結果を生成する単一命令の 32 × 32 乗算および除算
乗算の 64 ビットおよび 128 ビット積を計算するための専用命令
単一命令バレル・シフタ
各種オンチップ・ペリフェラルへのアクセスおよびオフチップ・メ
モリやペリフェラルへのインタフェース
統合開発環境(IDE)制御のもとで、プロセッサの起動、停止、ス
テップ、およびトレースを可能にするハードウェア支援デバッグ・モ
ジュール
GNU C/C++ ツール・チェインおよび Eclipse IDE をベースにしたソ
フトウェア開発環境
すべての Nios II プロセッサ・システム間で互換性のある命令セット・
アーキテクチャ(ISA)
150 DMIPS を上回る性能
Nios II プロセッサ・システムは、シングル・チップ上に CPU とペリフェ
ラルおよびメモリを組み合わせて搭載したマイクロコントローラまたは
コンピュータ・オンチップに相当します。「Nios II プロセッサ・システ
ム」という用語は、Nios II プロセッサ・コア、オンチップ・ペリフェラ
ルのセット、オンチップ・メモリ、およびオフチップ・メモリへのイン
タフェースを意味し、これらはすべて 1 個のアルテラ・チップに実装さ
れています。マイクロコントローラ・ファミリと同様に、すべての Nios II
プロセッサ・システムは一貫した命令セットとプログラミング・モデル
を使用しています。
Altera Corporation
2004 年 9 月
1–1
はじめに
Nios II プロセッサの使用開始
Nios II プロセッサの使用開始方法は、他のマイクロコントローラ・ファ
ミリの場合とほとんど同じです。既製の評価ボードと Nios II ソフトウェ
アの作成に必要なすべてのソフトウェア開発ツールを含んだ開発キット
をアルテラから購入すれば、最も簡単に効率よく設計を開始することが
できます。
Nios II ソフトウェア開発環境は、Nios II 統合開発環境(IDE)と呼ばれ
ます。Nios II IDE は、GNU C/C++ コンパイラと Eclipse IDE をベース
にしており、確立された一般的なソフトウェア開発環境を実現していま
す。Nios II IDE を使用すれば、設計者はすぐに Nios II ソフトウェア・
アプリケーションの開発およびシミュレーションを開始することができ
ます。アルテラ開発キットに付属の Nios II ハードウェア・リファレン
ス・デザインを使用すれば、カスタム・ハードウェア・プラットフォー
ムを構築する前に、ボードで動作するアプリケーションのプロトタイプ
を作成できます。図 1-1 に、アルテラの Nios II 開発キットで利用できる
Nios II プロセッサ・リファレンス・デザインの例を示します。
図 1-1. Nios II プロセッサ・システムの例
リセット
クロック
ソフトウェア・デバッガ
とのJTAG接続
JTAG
デバッグ・
モジュール
データ
送信
受信
命令
SDRAM
メモリ
SDRAM
コントローラ
オンチップROM
フラッシュ・
メモリ
オフチップ・メモリへの
トライステート・ブリッジ
SRAM
メモリ
1–2
Nios II プロセッサ・リファレンス・ハンドブック
Avalonスイッチ・ファブリック
Nios II
プロセッサ・コア
UART
タイマ1
タイマ2
LCDディスプレイ・
ドライバ
汎用I/O
イーサネット・
インタフェース
CompactFlash
インタフェース
LCD
画面
ボタン、
LEDなど
イーサネット
MAC/PHY
コンパクト・
フラッシュ
Altera Corporation
2004 年 9 月
概要
アルテラ提供のリファレンス・デザインを使用して、プロトタイプ・シ
ステムがデザイン要件を十分に満たす場合は、そのリファレンス・デザ
インをコピーして、最終ハードウェア・プラットフォームでそのまま使
用できます。そうでない場合でも、設計者はコストや性能の要求を満た
すように、Nios II プロセッサ・システムをカスタマイズできます。
Nios II プロセッサ・デザインのカスタマイズ
アルテラ FPGA は、プロセッサ・システムの機能の追加と性能強化を可
能にする柔軟性を実現しています。一方で、不要なプロセッサ機能とペ
リフェラルを削除して、デザインをより小型で低コストのデバイスに適
合させることが可能です。
アルテラ・デバイスのピンおよびロジック・リソースは変更可能なため、
以下のような多数のカスタマイズを実行できます。
■
ボード・デザインがより簡単になるようにチップのピンを再配置で
きます。例えば、外部 SDRAM メモリ用のアドレス・ピンとデータ・
ピンをチップの任意の側面に移動して、ボード・トレースを短くす
ることができます。
■
チップの余分なピンとロジック・リソースは、プロセッサに関係の
ない機能に使用できます。余分なリソースはボード・デザイン用の
「グルー・ロジック」として何個かのゲートやレジスタに利用したり、
あるいはシステム全体を実装することも可能です。例えば、Nios II
プロセッサ・システムは大規模なアルテラ FPGA の 5% しか消費し
ないため、残りのチップ・リソースを利用して他の機能を実装する
ことができます。
■
チップの余分なピンとロジックは、Nios II プロセッサ・システム用
の追加ペリフェラルの実装に使用できます。アルテラは、Nios II プ
ロセッサ・システムに容易に接続可能な多数のペリフェラル・ライ
ブラリを提供しています。
実際に、大部分の FPGA デザインでは、Nios II プロセッサ・システムに
加えて、何らかのロジックが実装されています。プログラマが Nios II プ
ロセッサを使用する場合、追加ロジックに配慮する必要はありません。
Altera Corporation
2004 年 9 月
1–3
Nios II プロセッサ・リファレンス・ハンドブック
コンフィギュレーション可能なソフトコア・プロセッサの概念
コンフィギュ
レーション可
能なソフトコ
ア・プロセッ
サの概念
このセクションでは、ディスクリート・マイクロコントローラとは異な
る Nios II 特有の概念について説明します。以下に述べる概念は、他の
機能を述べる際の基礎情報となるため、ここで説明しています。
これらの概念の大半は、ハードウェア設計者がシステム実装を微調整す
るための柔軟性に関するものです。ソフトウェア・プログラマは、一般
にハードウェア実装の詳細を考慮する必要はなく、また Nios II プロセッ
サ・コアのコンフィギュレーション可能な特性を意識しなくてもプログ
ラムを記述できます。
コンフィギュレーション可能なソフトコア・プロセッサ
Nios II プロセッサは、固定された市販のマイクロコントローラとは異な
り、コンフィギュレーション可能なソフトコア・プロセッサです。ここ
で、
「コンフィギュレーション可能」とは、性能目標または価格目標を満
たすためにシステム単位で機能を追加または削除できることを意味しま
す。
「ソフトコア」とは、CPU コアが「ソフト」デザイン形式(つまり、
シリコンに固定されない)で提供され、どのアルテラ FPGA ファミリで
もターゲットにできることを意味します。言い換えれば、アルテラは
「Nios II チップ」を販売するのではなく、ブランクの FPGA を販売して
います。Nios II プロセッサとペリフェラルを仕様に合わせて構成し、シ
ステムをアルテラ FPGA にプログラムするのはユーザです。
コンフィギュレーション可能であることは、設計者が新規デザインごと
に新しい Nios II プロセッサの構成を作成しなければならないという意
味ではありません。アルテラは、システム設計者がそのまま使用できる
既製の Nios II システムを提供しています。これらのデザインがシステ
ム要求を満たす場合は、デザインをそれ以上構成する必要はありません。
また、ソフトウェア設計者は、最終的なハードウェア・コンフィギュレー
ションが確定する前に、Nios II インストラクション・セット・シミュ
レータを使用して、Nios II アプリケーションの記述とデバッグを開始す
ることができます。
柔軟なペリフェラル・セットとアドレス・マップ
Nios II プロセッサ・システムと固定マイクロコントローラとの最も顕著
な違いの 1 つは、柔軟性に優れたペリフェラル・セットです。Nios II プ
ロセッサは本質的にソフトコアなので、ターゲット・アプリケーション
に必要なペリフェラル・セットを確実に備えた独自の Nios II プロセッ
サ・システムを容易に構築できます。
1–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
概要
ペリフェラルが柔軟性に優れているため、結果的にアドレス・マップも
柔軟なものになります。ソフトウェアの構造は、アドレス位置に関係な
く、総称的にメモリやペリフェラルにアクセスできるように構築されま
す。したがって、アプリケーション開発者がペリフェラル・セットとア
ドレス・マップの柔軟性を考慮する必要はありません。
ペリフェラルは、標準ペリフェラルとカスタム・ペリフェラルの 2 つの
大きなクラスに分類できます。
標準ペリフェラル
アルテラは、タイマ、シリアル通信インタフェース、汎用 I/O、SDRAM
コントローラ、その他のメモリ・インタフェースなど、マクロコントロー
ラで広く使用されるペリフェラル・セットを提供しています。アルテラ
とサードパーティ・ベンダは随時、新しいソフト・ペリフェラル・コア
をリリースしており、利用可能なペリフェラル・リストもますます充実
したものとなっています。
カスタム・ペリフェラル
設計者は、独自のカスタム・ペリフェラルを作成して、Nios II プロセッ
サ・システムに統合することもできます。性能が重視され、大部分の
CPU サイクルがコードの特定のセクションの実行に消費されるシステ
ムの場合、一般的な手法はハードウェアで同じ機能を実行するカスタム・
ペリフェラルを作成することです。この方法では、性能面で二重の利点
が得られます。つまり、ハードウェアでの実行がソフトウェアよりも高
速になること、そしてカスタム・ペリフェラルがデータを操作する間に、
プロセッサは並行して他の機能を実行できることです。
カスタム命令
カスタム・ペリフェラルと同様に、カスタム命令はプロセッサをカスタ
ム・ハードウェアで増強することによって、システム性能を向上させる
ための手段です。Nios II プロセッサのソフトコア特性により、設計者は
カスタム・ロジックを論理演算ユニット(ALU)に統合できます。Nios II
固有の命令と同様に、カスタム命令ロジックは、最大 2 個のソース・レ
ジスタから値を取得し、選択によって結果をディスティネーション・レ
ジスタに書き込むことができます。
カスタム命令を使用して、性能目標に適合するようにシステム・ハード
ウェアを微調整することができます。プロセッサは再プログラム可能な
アルテラ FPGA に実装されるため、ソフトウェア・エンジニアとハード
ウェア・エンジニアが連携して作業を進め、繰り返しハードウェアの最
適化を行い、実際のハードウェア上でのソフトウェアの実行結果をテス
トできます。
Altera Corporation
2004 年 9 月
1–5
Nios II プロセッサ・リファレンス・ハンドブック
コンフィギュレーション可能なソフトコア・プロセッサの概念
ソフトウェアの観点からすれば、カスタム命令はマシンで生成されたア
センブリ・マクロまたは C 関数のようなものなので、プログラマがカス
タム命令を使用するのにアセンブリを知る必要はありません。
自動システム生成
アルテラの SOPC Builder デザイン・ツールは、プロセッサ機能をコン
フィギュレーションするプロセスと、FPGA にプログラム可能なハード
ウェア・デザインを生成するプロセスを完全に自動化します。ハードウェ
ア設計者は、SOPC Builder のグラフィカル・ユーザ・インタフェース
(GUI)を使用して、任意の数のペリフェラルとメモリ・インタフェース
を持つ Nios II プロセッサ・システムをコンフィギュレーションするこ
とができます。また、回路図やハードウェア記述言語(HDL)によるデ
ザイン入力を実行することなく、プロセッサ・システム全体を作成でき
ます。SOPC Builder は設計者の HDL デザイン・ファイルをインポート
することもできるため、カスタム・ロジックを Nios II プロセッサ・シ
ステムに簡単に統合することが可能です。
システム生成の後、デザインをボードにプログラムし、ソフトウェアを
ボードで実行しながらデバッグできます。デザインをボードにプログラ
ムすると、プロセッサ・アーキテクチャは固定されます。ソフトウェア
開発は、コンフィギュレーションが不可能な従来型のプロセッサと同様
に進められます。
1–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
2. プロセッサ・アーキテクチャ
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51002-1.2
この章では、Nios® II アーキテクチャのすべての機能ユニットおよび
Nios II プロセッサ・ハードウェア実装の基礎など、Nios II プロセッサ
のハードウェア構造について説明します。
はじめに
Nios II アーキテクチャは、命令セット・アーキテクチャ(ISA)を記述
します。そのため、ISA は命令を実装する機能ユニットのセットを必要
とします。Nios II プロセッサ・コアとは、Nios II 命令セットを実装し、
本書で説明する機能ユニットをサポートするハードウェア・デザインで
す。このプロセッサ・コアには、ペリフェラルや外部との接続ロジック
は含まれていません。Nios II アーキテクチャの実装に必要な回路のみ搭
載されています。
図 2-1 に、Nios II プロセッサ・コアのブロック図を示します。
図 2-1. Nios II プロセッサ・コアのブロック図
Nios IIプロセッサ・コア
リセット
クロック
ソフトウェア・デバッガへの
JTAGインタフェース
JTAG
デバッグ・
モジュール
プログラム・
コントローラと
アドレス生成
汎用レジスタ
r0からr31
命令
キャッシュ
命令
マスタ・
ポート
例外
コントローラ
irq[ 31..0 ]
割り込み
コントローラ
コントロール・
レジスタ
ctl0からctl5
データ・
キャッシュ
カスタム
I/O信号
Altera Corporation
2004 年 12 月
カスタム
命令ロジック
データ・
マスタ・
ポート
論理演算ユニット
2–1
プロセッサの実装
Nios II アーキテクチャは、以下のユーザがアクセス可能な機能ユニッ
トを定義しています。
■
■
■
■
■
■
■
■
■
レジスタ・ファイル
演算ロジック・ユニット
カスタム命令ロジックへのインタフェース
例外コントローラ
割り込みコントローラ
命令バス
データ・バス
命令キャッシュおよびデータ・キャッシュ・メモリ
JTAG デバッグ・モジュール
以下のセクションでは、各機能ユニットに関するハードウェア実装の詳
細について説明します。
プロセッサの
実装
Nios II アーキテクチャの機能ユニットは、Nios II 命令セットの基礎を
形成します。ただし、いずれかのユニットがハードウェアに実装されて
いるという意味ではありません。Nios II アーキテクチャは、特定のハー
ドウェア実装ではなく命令セットを記述します。機能ユニットは、ハー
ドウェアに実装するか、ソフトウェアでエミュレートするか、あるいは
完全に省略することができます。
Nios II 実装とは、特定の Nios II プロセッサ・コアで実現されるデザイ
ンの選択セットです。すべての実装が、「Nios II プロセッサ・リファレ
ンス・ハンドブック」で定義される命令セットをサポートします。各実
装はコア・サイズの小型化や高性能化など、特定の目的を達成します。
これにより、Nios II アーキテクチャは様々なターゲット・アプリケー
ションの要求に適合できます。
実装の変数は一般に、3 つのトレードオフ・パターン(機能の増強また
は削減、機能の追加または除外、機能のハードウェア実装またはソフト
ウェア・エミュレーション)のいずれかに当てはまります。各トレード
オフの例を以下に示します。
■
機能の増強または削減 − 例えば、性能を微調整するために、命令
キャッシュ・メモリ容量を増減できます。キャッシュの容量を増や
すと大規模なプログラムの実行速度が向上し、キャッシュの容量を
減らすとオンチップ・メモリのリソースが節約できます。
■
機能の追加または除外 − 例えば、コストを削減するために、JTAG
デバッグ・モジュールを省略するよう選択できます。これによって、
オンチップ・ロジックとメモリ・リソースが節約できますが、ソフ
トウェア・デバッガを使用してアプリケーションをデバッグする機
能もなくなります。
2–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プロセッサ・アーキテクチャ
■
ハードウェア実装またはソフトウェア・エミュレーション − 例え
ば、複雑な演算をほとんど実行しない制御アプリケーションでは、除
算命令をソフトウェアでエミュレートするように選択できます。除
算用のハードウェアをなくすとオンチップ・リソースが節約できま
すが、除算演算の実行時間が増大します。
各 Nios II コアがサポートする機能の詳細については、第 17 章の「Nios II
コア実装の詳細」を参照してください。ユーザ選択可能な Nios II プロ
セッサのパラメータの詳細については、第 4 章の「SOPC Builder での
Nios II プロセッサの実装」を参照してください。
レジスタ・
ファイル
Nios II アーキテクチャは、32 個の 32 ビット汎用整数レジスタ、および
6 個のコントロール・レジスタからなるフラットなレジスタ・ファイル
をサポートしています。このアーキテクチャではスーパバイザ・モード
とユーザ・モードがサポートされており、システム・コードによって不
正なアプリケーションからコントロール・レジスタを保護することがで
きます。
Nios II アーキテクチャでは、後で浮動小数点レジスタを追加できます。
Nios II 論理演算ユニット(ALU)は、汎用レジスタに格納されたデータ
に対して演算を実行します。ALU 演算では、1 つまたは 2 つの入力をレ
ジスタから受け取り、演算結果をレジスタに格納します。ALU は表 2–1
に示すデータ演算をサポートしています。
論理演算
ユニット
表 2–1. Nios II ALU がサポートする演算
カテゴリ
詳細
演算
ALU は、符号付きおよび符号なしオペランドに対する加算、減算、乗算、および除算をサ
ポートしています。
関係
ALU は、符号付きおよび符号なしオペランドに対する「等しい」、「等しくない」、「大なり
または等しい」、
「小なり」の関係演算(==、!=、>=、<)をサポートしています。
論理
ALU は、AND、OR、NOR、および XOR 論理演算をサポートしています。
シフトおよび
回転
ALU はシフト演算と回転演算をサポートしており、命令ごとにデータを 0 ビットから 31
ビット位置だけシフト / 回転できます。ALU は算術右シフトおよび論理右 / 左シフトをサ
ポートしています。ALU は左 / 右回転をサポートしています。
その他の演算を実行する場合は、表 2–1 に示す基本演算の組み合わせを
ソフトウェアで実行して結果を算出します。
Altera Corporation
2004 年 12 月
2–3
Nios II プロセッサ・リファレンス・ハンドブック
例外コントローラと割り込みコントローラ
未実装命令
一部の Nios II プロセッサ・コアには、乗算または除算演算を実行する
ハードウェアが搭載されていません。このプロセッサ・コアがソフトウェ
ア で エ ミ ュ レ ー ト で き る 演 算 は、mul、multi、mulxss、mulxsu、
mulxuu、div、divu 命令のみです。このようなコアでは、これらは未
実装命令と認識されます。その他の命令はすべて、ハードウェアで実装
されます。
プロセッサは未実装命令を発行すると必ず例外を生成し、例外ハンドラ
がその演算をソフトウェアでエミュレートするルーチンを呼び出しま
す。したがって、プログラマは未実装命令によるプロセッサへの影響を
意識する必要はありません。
カスタム命令
Nios II アーキテクチャはユーザ定義のカスタム命令をサポートしてい
ます。Nios II ALU はカスタム命令ロジックに直接接続されるため、設
計者はネイティブ命令とまったく同様にアクセスし、使用できるハード
ウェア演算にカスタム命令を実装できます。詳細については、
「Nios II
Custom Instruction User Guide」を参照してください。
例外コント
ローラと割り
込みコント
ローラ
例外コントローラ
Nios II アーキテクチャでは、ベクタ化されていないシンプルな例外コン
トローラにより、すべての例外タイプを処理できます。ハードウェア割
り込みを含め、どの例外が発生してもプロセッサは 1 つの例外アドレス
に実行を移します。このアドレスの例外ハンドラは、例外の原因を特定
して、適切な例外ルーチンをディスパッチします。
例外アドレスは、システム生成時に指定されます。
統合割り込みコントローラ
Nios II アーキテクチャは、32 の外部ハードウェア割り込みをサポート
しています。プロセッサ・コアは、irq0 から irq31 までの 32 レベル
の割り込み要求(IRQ)入力を備えており、各割り込みソースに対して
固有の入力を提供します。IRQ の優先順位はソフトウェアで決定されま
す。このアーキテクチャは、ネスト型割り込みをサポートしています。
2–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プロセッサ・アーキテクチャ
このソフトウェアでは、各 IRQ 入力用の割り込みイネーブル・ビットを
備えた ienable コントロール・レジスタを介して、割り込みソースを個
別にイネーブルおよびディセーブルできます。また、ステータス・コン
トロール・レジスタの PIE ビットを介して、割り込みをグローバルにイ
ネーブルおよびディセーブルできます。ハードウェア割り込みは、以下
の 3 つの条件がすべて満たされた場合にのみ生成されます。
■
ステータス・レジスタの PIE ビットが 1
割り込み要求入力 irqn がアサートされている
■ ienable レジスタの対応するビット n が 1
■
メモリおよび
I/O の構成
このセクションでは、Nios II のメモリおよび I/O 構成のハードウェア実
装の詳細を説明します。ここでは、すべての Nios II プロセッサ・シス
テムに該当する一般的な概念と、システムごとに異なる機能について解
説します。
Nios II のメモリおよび I/O 構成の柔軟性は、Nios II プロセッサ・シス
テムと従来型のマイクロコントローラとの違いを最も顕著に示すもので
す。Nios II プロセッサ・システムはコンフィギュレーション可能なた
め、メモリとペリフェラルはシステムごとに異なります。その結果、メ
モリと I/O 構成もシステムごとに異なります。
Nios II アーキテクチャでは、プログラマからはハードウェアの詳細が認
識されないため、プログラマはハードウェア実装を意識することなく
Nios II アプリケーションを開発できます。プログラミングへの影響の詳
細については、第 3 章の「プログラミング・モデル」で解説します。
図 2-2 に、Nios II プロセッサ・コアのメモリおよび I/O 構成の図を示し
ます。
Altera Corporation
2004 年 12 月
2–5
Nios II プロセッサ・リファレンス・ハンドブック
メモリおよび I/O の構成
図 2-2. Nios II のメモリおよび I/O 構成
Nios IIプロセッサ・コア
汎用
レジスタ・
ファイル
プログラム・
カウンタ
データ・
キャッシュ
命令
キャッシュ
メモリ・
アクセス
命令
フェッチ
ペリフェラル・
アクセス
M
M
Avalon
スイッチ・
ファブリック
S
Avalon
スレーブ・
ペリフェラル
S
M Avalon
マスタ・
ポート
S Avalon
スレーブ・
ポート
メモリ
命令バスとデータバス
Nios II アーキテクチャは、独立した命令バスとデータバスをサポートし
ているため、Harvard アーキテクチャに分類されます。命令バスとデー
タバスはともに、Avalon™ インタフェース仕様に準拠する Avalon マス
タ・ポートとして実装されます。データ・マスタ・ポートはメモリ・コ
ンポーネントとペリフェラル・コンポーネントの両方に接続されますが、
命令マスタ・ポートはメモリ・コンポーネントにのみ接続されます。
Avalonインタフェースの詳細については、
「Avalon Interface Specification
Reference Manual」を参照してください。
メモリ・アクセスとペリフェラル・アクセス
Nios II アーキテクチャでは、メモリ・マップド I/O アクセスが利用でき
ます。データ・メモリとペリフェラルはともに、データ・マスタ・ポー
トのアドレス空間にマップされます。Nios II アーキテクチャはリトル・
エンディアンです。ワードとハーフワードは、上位アドレスを上位バイ
トとしてメモリに格納されます。
2–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プロセッサ・アーキテクチャ
Nios II アーキテクチャは、メモリとペリフェラルの使用に関して何も規
定していないため、メモリとペリフェラルの数量、タイプ、および接続
はシステムに依存します。通常、Nios II プロセッサ・システムは、高速
オンチップ・メモリと低速オフチップ・メモリを組み合わせて搭載して
います。ペリフェラルは一般にオンチップに搭載されていますが、オフ
チップ・ペリフェラルへのインタフェースも存在します。
命令マスタ・ポート
Nios II 命令バスは 32 ビット Avalon マスタ・ポートとして実装されま
す。命令マスタ・ポートは、1 つの機能、つまりプロセッサが実行する
フェッチ命令を実行します。命令マスタ・ポートは、書き込み操作は実
行しません。
命令マスタ・ポートは、レイテンシを認識できるため、レイテンシの高
いメモリ・デバイスを使用してパイプライン転送を実行できます。言い
換えれば、命令マスタ・ポートは前の要求からデータが返る前に、連続
して読み出し要求を発行します。Nios II プロセッサは、シーケンシャル
命令のプリフェッチをサポートしているため、分岐予測を実行して、命
令パイプを可能な限りアクティブに維持できます。レイテンシ付き
Avalon 転送のサポートによって、レイテンシが高いメモリへの影響が
軽減され、システムの全体的な fMAX が増大します。
命令マスタ・ポートは常に 32 ビットのデータを取得します。命令マスタ・
ポートは、プロセッサ、メモリ、およびペリフェラルを連結して一体化す
る Avalon スイッチ・ファブリックに搭載されているダイナミック・バス・
サイジング・ロジックを基礎としています。ダイナミック・バス・サイジ
ングにより、すべての命令フェッチはターゲット・メモリの幅に関係なく、
完全な命令ワードを返します。その結果、プログラムでは Nios II プロセッ
サ・システム内のメモリ幅を意識する必要はありません。
Nios II アーキテクチャは、低速メモリにアクセスするときの平均命令
フェッチ性能を改善するために、オンチップ・キャッシュ・メモリをサ
ポートしています。詳細については、2–8 ページの「キャッシュ・メモ
リ」を参照してください。
データ・マスタ・ポート
Nios II データ・バスは 32 ビット Avalon マスタ・ポートとして実装さ
れます。データ・マスタ・ポートは以下の 2 つの機能を実行します。
■
プロセッサがロード命令を実行するときに、メモリまたはペリフェ
ラルからデータを読み込む
■ プロセッサがストア命令を実行するときに、メモリまたはペリフェ
ラルにデータを書き込む
Altera Corporation
2004 年 12 月
2–7
Nios II プロセッサ・リファレンス・ハンドブック
メモリおよび I/O の構成
マスタ・ポート上のバイト・イネーブル信号は、ストア操作中に書き込
む 4 つのバイト・レーンのいずれかを指定します。データ・マスタ・ポー
トはレイテンシ付き Avalon 転送をサポートしていません。これは、デー
タ取得前にデータ・アドレスを予測したり、実行を継続しても意味がな
いためです。したがって、データ・マスタはメモリ・レイテンシをウェ
イト・ステートとして解釈します。データ・マスタ・ポートがゼロ・ウェ
イト・ステート・メモリに接続されている場合、ロード操作とストア操
作は 1 クロック・サイクルで完了できます。
Nios II アーキテクチャは、低速メモリにアクセスするときの平均データ転
送性能を改善するために、オンチップ・キャッシュ・メモリをサポートし
ています。詳細については、
「キャッシュ・メモリ」を参照してください。
命令およびデータ用の共有メモリ
通常、命令マスタ・ポートとデータ・マスタ・ポートは、命令とデータ
の両方を格納する 1 つのメモリを共有します。プロセッサ・コアは独立
した命令バスとデータ・バスを搭載していますが、Nios II プロセッサ・
システム全体としては、外部に対して 1 つの共有命令 / データ・バスを
提供することができます。Nios II プロセッサ・システムの外形は、シス
テム内のメモリとペリフェラル、および Avalon スイッチ・ファブリッ
クの構造によって異なります。
データ・マスタ・ポートと命令マスタ・ポートによって、一方のポート
が他方のポートを枯渇させるグリッドロック状態が発生することはあり
ません。最高の性能を実現するには、命令マスタ・ポートとデータ・マ
スタ・ポートが共有するメモリ上で、データ・マスタ・ポートに高いアー
ビトレーション・プライオリティを割り当てる必要があります。
キャッシュ・メモリ
Nios II アーキテクチャは、命令マスタ・ポート(命令キャッシュ)と
データ・マスタ・ポート(データ・キャッシュ)の両方でキャッシュ・
メモリをサポートしています。キャッシュ・メモリは、Nios II プロセッ
サ・コアの主要部分として、オンチップに搭載されています。キャッ
シュ・メモリを利用すると、プログラムやデータ格納用の SDRAM など
の低速オフチップ・メモリを使用する Nios II プロセッサ・システムの
平均メモリ・アクセス時間を改善できます。
命令キャッシュとデータ・キャッシュは、実行時には常にイネーブルさ
れますが、ペリフェラル・アクセス時にキャッシュされたデータが返さ
れないように、ソフトウェアによってデータ・キャッシュをバイパスす
る手段が用意されています。キャッシュ管理とキャッシュ・コヒーレン
シは、ソフトウェアで処理されます。Nios II 命令セットには、キャッ
シュ管理用の命令があります。
2–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プロセッサ・アーキテクチャ
コンフィギュレーション可能なキャッシュ・メモリ・オプション
キャッシュ・メモリはオプションです。高いメモリ性能(および、それ
に伴うキャッシュ・メモリ)が必要かどうかは、アプリケーションによっ
て決まります。多くのアプリケーションでは、可能な限り小さなプロセッ
サ・コアを必要とし、性能を犠牲にしてサイズを優先させる場合があり
ます。
Nios II プロセッサ・コアには、キャッシュ・メモリの一方または両方を
搭載するか、どちらも搭載しないことが可能です。さらに、データ・キャッ
シュと命令キャッシュの両方またはいずれか一方を備えたコアの場合、
キャッシュ・メモリのサイズはユーザが設定/構成可能です。キャッシュ・
メモリを搭載してもプログラムの機能には影響はありませんが、プロセッ
サが命令をフェッチする速度とデータを読み出し/書き込みする速度は影
響を受けます。
キャッシュ・メモリの効果的な使用法
性能を改善するためのキャッシュ・メモリの効果は、以下の前提に基づ
きます。
■
通常のメモリがオフチップで配置され、オンチップ・メモリと比較
してアクセス時間が長い
■ 性能が重視される最大命令ループが命令キャッシュよりも小さい
■ 性能が重視されるデータの最大ブロックがデータ・キャッシュより
も小さい
対象となるアプリケーションでの効果は設計者が判断できますが、最適
なキャッシュ構成はアプリケーションによって異なります。例えば、
Nios II プロセッサ・システムに、高速オンチップ・メモリしかない(つ
まり、低速オフチップ・メモリにはアクセスしない)場合、命令キャッ
シュまたはデータ・キャッシュによる性能向上は期待できません。もう
1 つ例を挙げれば、プログラムの重要なループが 2 K バイトでも、命令
キャッシュのサイズが 1 K バイトであれば、命令キャッシュによって実
行速度が向上することはありません。実際のところ、性能は低下すると
考えられます。
キャッシュ・バイパス方法
Nios II アーキテクチャでは、ldio や stio のように、データ・キャッ
シュをバイパスし、指定されたアドレスへの Avalon データ転送を強制
するロードおよびストア I/O 命令が利用できます。プロセッサ・コア実
装によっては、追加のキャッシュ・バイパス方法を利用することもでき
ます。
Altera Corporation
2004 年 12 月
2–9
Nios II プロセッサ・リファレンス・ハンドブック
JTAG デバッグ・モジュール
Nios II プロセッサ・コアのいくつかは、アドレスの最上位ビットの値に
応じてキャッシュをバイパスする、ビット 31 キャッシュ・バイパスと呼
ばれるメカニズムをサポートしています。詳細については、第 17 章の
「Nios II コア実装の詳細」を参照してください。
アドレス・マップ
Nios II プロセッサ・システムでのメモリおよびペリフェラルのアドレ
ス・マップは、デザインによって異なります。アドレス・マップは、シ
ステム生成時に設計者が指定します。
以下の 3 つのアドレスは、CPU の一部であり特に注意が必要です。
■
リセット・アドレス
例外アドレス
■ ブレーク・ハンドラ・アドレス
■
プログラマは、標準的なプログラム構成を使用してメモリとペリフェラ
ルにアクセスします。したがって、アプリケーション開発者がこの柔軟
なアドレス・マップを意識する必要はありません。
JTAG
デバッグ・
モジュール
Nios II アーキテクチャでは、オンチップ・エミュレーション機能を可
能にする JTAG デバッグ・モジュールがサポートされているため、プロ
セッサをホスト PC からリモートで制御できます。PC ベースのソフト
ウェア・デバッグ・ツールは、JTAG デバッグ・モジュールと通信し、
以下のような機能を実現します。
■
■
■
■
■
メモリへのプログラムのダウンロード
実行の開始および停止
ブレークポイントおよびウォッチポイントの設定
レジスタおよびメモリの解析
リアルタイム実行トレース・データの収集
デバッグ・モジュールは、アルテラの FPGA の JTAG 回路に接続されま
す。これにより、外部デバッグ・プローブから FPGA 上の標準 JTAG イ
ンタフェースを介してプロセッサにアクセスできます。プロセッサ側で
は、デバッグ・モジュールがプロセッサ・コア内部の信号に接続されま
す。デバッグ・モジュールには、プロセッサに対してマスク不能な制御
を行い、テスト中のアプリケーションにリンクされたソフトウェア・ス
タブは不要です。スーパバイザ・モードでプロセッサがアクセス可能な
すべてのシステム・リソースをデバッグ・モジュールで利用できます。
トレース・データ収集の場合、デバッグ・モジュールはオンチップまた
はデバッグ・プローブ内のメモリにトレース・データを格納します。
2–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プロセッサ・アーキテクチャ
デバッグ・モジュールは、ハードウェア・ブレーク信号をアサートする
か、実行するプログラム・メモリ内にブレーク命令を書き込むことによっ
て、プロセッサの制御を取得します。どちらの場合も、プロセッサは、
ブレーク・アドレスに配置されるルーチンに制御を移します。ブレーク・
アドレスはシステム生成時に指定されます。
Nios II プロセッサなどのソフトコア・プロセッサでは、従来型の固定プ
ロセッサにはない独自のデバッグ機能を利用できます。Nios II プロセッ
サのソフトコア特性により、設計者はフル機能のデバッグ・コアを使用
して、開発中のシステムをデバッグし、後でデバッグ機能を削除してロ
ジック・リソースを節約することができます。製品のリリース・バージョ
ンでは、JTAG デバッグ・モジュール機能は縮小するか完全に取り除く
ことができます。
以下のセクションでは、Nios II JTAG デバッグ・モジュール・ハードウェ
アの機能について説明します。すべてのハードウェア機能の使用は、
Nios II IDE のように、ターゲット・プロセッサへの接続を管理し、デ
バッグ・プロセスを制御するホスト・ソフトウェアに依存します。
JTAG ターゲット接続
JTAG ターゲット接続とは、アルテラ FPGA 上の標準 JTAG ピンを介し
て CPU に接続することを意味します。この機能によって、プロセッサ
の実行開始および停止、レジスタおよびメモリの確認 / 編集が可能にな
ります。また、JTAG ターゲット接続は、Nios II IDE Flash Programmer
を利用するための最低要件でもあります。
ダウンロードおよび実行ソフトウェア
ソフトウェアのダウンロードとは、JTAG 接続を介して、実行可能コー
ドとデータをプロセッサのメモリにダウンロードすることです。ソフト
ウェアをメモリにダウンロードすると、JTAG デバッグ・モジュールは
デバッグ・モードを終了して、実行可能コードの先頭に実行を移すこと
ができます。
ソフトウェア・ブレークポイント
ソフトウェア・ブレークポイントでは、RAM 内の命令にブレークポイ
ントを設定できます。ソフトウェア・ブレークポイント・メカニズムは、
RAM に格納されている実行可能コードにブレーク命令を書き込みます。
プロセッサがブレーク命令を実行すると、制御は JTAG デバッグ・モ
ジュールに移されます。
Altera Corporation
2004 年 12 月
2–11
Nios II プロセッサ・リファレンス・ハンドブック
JTAG デバッグ・モジュール
ハードウェア・ブレークポイント
ハードウェア・ブレークポイントでは、フラッシュ・メモリなどの不揮
発性メモリ内の命令にブレークポイントを設定できます。ハードウェア・
ブレークポイント・メカニズムは、プロセッサの現在の命令アドレスを
継続的にモニタします。命令アドレスがハードウェア・ブレークポイン
ト・アドレスと一致すると、JTAG デバッグ・モジュールがプロセッサ
を制御します。
ハードウェア・ブレークポイントは、JTAG デバッグ・モジュールのハー
ドウェア・トリガ機能を使用して実現されます。
ハードウェア・トリガ
ハードウェア・トリガは、リアルタイム・プログラム実行中の命令バス
またはデータ・バスの状態に基づいて、デバッグ動作をアクティブにし
ます。トリガは単にプロセッサの実行を停止するだけではありません。
例えば、リアルタイム・プロセッサ実行中のトレース・データ収集をイ
ネーブルするのにも使用できます。
表 2–2 に、トリガが発生するすべての条件を示します。ハードウェア・
トリガ条件は、命令バスまたはデータ・バスのいずれかに基づきます。
同一バス上のトリガ条件は論理積をとることができるため、例えば、
JTAG デバッグ・モジュールをライト・サイクルでのみ特定のアドレス
にトリガさせることができます。
表 2–2. トリガ条件
条件
バス
(1)
説明
特定のアドレス
D、I
バスが特定のアドレスにアクセスしたときにトリガ。
特定のデータ値
D
バス上に特定のデータ値が現れたときにトリガ。
リード・サイクル
D
リード・バス・サイクルでのトリガ。
ライト・サイクル
D
ライト・バス・サイクルでのトリガ。
アーム条件
D、I
アーム付きトリガ・イベント後にのみトリガ。2–13 ページの「アーム付きト
リガ」を参照してください。
範囲
D
アドレス値、データ値、またはその両方の範囲でのトリガ。2–13 ページの
「値の範囲でのトリガ」を参照してください。
注:
(1) 「I」は命令バス、「D」はデータ・バスを示します。
2–12
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プロセッサ・アーキテクチャ
プロセッサ実行中にトリガ条件が満たされると、JTAG デバッグ・モ
ジュールは、実行の停止やトレース・キャプチャの開始などの動作をト
リガします。表 2–3 に、Nios II JTAG デバッグ・モジュールでサポート
されているトリガ動作を示します。
表 2–3. トリガ動作
動作
説明
ブレーク
実行を停止し、制御を JTAG デバッグ・モジュールに移します。
外部トリガ
トリガ信号出力をアサートします。このトリガ出力を使用して、例えば外部ロジック・
アナライザをトリガすることができます。
トレース・オン
トレース収集をオンにします。
トレース・オフ
トレース収集をオフにします。
トレース・サンプル (1) バスの 1 つのサンプルをトレース・バッファに格納します。
アーム
アーム付きトリガをイネーブルします。
注:
(1) データ・バス上の状態によってのみこの動作がトリガされます。
アーム付きトリガ
JTAG デバッグ・モジュールには、アーム付きトリガと呼ばれる 2 つの
レベルの機能があります。アーム付きトリガにより、JTAG デバッグ・
モジュールは、イベント A の発生後にのみイベント B でトリガできま
す。この例では、イベント A によってイベント B のトリガをイネーブル
するトリガ動作が発生します。
値の範囲でのトリガ
JTAG デバッグ・モジュールは、データ・バス上のデータまたはアドレ
ス値の範囲でトリガすることができます。このメカニズムは、2 つのハー
ドウェア・トリガを併用し、指定範囲内においてある値の範囲でアクティ
ブになるトリガ条件を作成します。
トレース・キャプチャ
トレース・キャプチャとは、プロセッサがリアルタイムでコードを実行
中に、プロセッサの 1 命令ごとの実行を記録することです。JTAG デバッ
グ・モジュールには、以下のトレース機能があります。
■
■
Altera Corporation
2004 年 12 月
実行トレースをキャプチャする(命令バス・サイクル)。
データ・トレースをキャプチャする(データ・バス・サイクル)。
2–13
Nios II プロセッサ・リファレンス・ハンドブック
JTAG デバッグ・モジュール
■
■
■
■
■
■
各データ・バス・サイクルでアドレス、データ、またはその両方を
キャプチャする。
トリガに基づいて、リアルタイムでのトレースのキャプチャを開始
および停止する。
ホストの制御のもとで手動でトレースを開始および停止する。
トレース・バッファがいっぱいになったときに、オプションにより
トレースのキャプチャを停止して、プロセッサを実行させたままに
する。
JTAG デバッグ・モジュールのオンチップ・メモリ・バッファにトレー
ス・データを格納する。
(このメモリは JTAG 接続によってのみアク
セス可能)
トレース・データをオフチップ・デバッグ・プローブの大規模バッ
ファに格納する。
一部のトレース機能には、サードパーティのデバッグ・プロバイダが提
供する追加ライセンスまたはデバッグ・ツールが必要です。例えば、オ
ンチップ・トレース・バッファは Nios II プロセッサの標準機能ですが、
オフチップ・トレース・バッファを使用するには、First Silicon Solutions
(FS2)が提供する別のデバッグ・ソフトウェアとハードウェアが必要で
す。詳細については、www.fs2.com をご覧ください。
実行とデータ・トレース
JTAG デバッグ・モジュールは、命令バスのトレース(実行トレース)、
データ・バスのトレース(データ・トレース)、あるいは同時にその両方
のトレースをサポートしています。実行トレースでは、実行された命令
のアドレスのみが記録されるため、設計者はメモリ内のどの場所(すな
わち、どの関数)でコードが実行されたかを解析できます。データ・ト
レースでは、データ・バス上の各ロードおよびストア操作に関連するデー
タが記録されます。
JTAG デバッグ・モジュールは、リアルタイムでデータ・バス・トレー
スをフィルタして、以下のキャプチャを実行できます。
■
■
■
■
■
■
■
■
ロード・アドレスのみ
ストア・アドレスのみ
ロード・アドレスとストア・アドレスの両方
ロード・データのみ
ロード・アドレスとロード・データ
ストア・アドレスとストア・データ
ロードとストア両方のアドレスとデータ
トリガ・イベント時のデータ・バスのシングル・サンプル
2–14
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プロセッサ・アーキテクチャ
フレームのトレース
「フレーム」とは、トレース・データの収集用に割り当てられたメモリ単
位です。ただし、フレームはトレースの深さを示す絶対的な尺度ではあ
りません。
リアルタイムで動作中のプロセッサを追跡するために、実行トレースは、
分岐、呼び出し、トラップ、割り込みなど、選択したアドレスのみを保
存するように最適化されています。これらのアドレスから、ホスト側の
デバッグ・ソフトウェアは、厳密な命令ごとの実行トレースを後で再構
築することができます。さらに、実行トレース・データは、1 つのフレー
ムが複数の命令を表すような圧縮形式で保存されます。これらの最適化
によって、実行中におけるトレース収集の実際の開始点と停止点は、ユー
ザが指定した開始点および停止点とわずかに異なる場合があります。
データ・トレースでは、要求されたロードおよびストアの 100% がリア
ルタイムでトレース・バッファに格納されます。トレース・バッファへ
の格納時には、データ・トレース・フレームの優先順位は実行トレース・
フレームより低くなります。したがって、データ・フレームは常に古い
ものから順に格納されますが、実行トレースとデータ・トレースが互い
に正確に同期しているかどうかは保証されません。
Altera Corporation
2004 年 12 月
2–15
Nios II プロセッサ・リファレンス・ハンドブック
JTAG デバッグ・モジュール
2–16
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
3. プログラミング・モデル
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51003-1.2
はじめに
この 章で は、アセン ブリ 言語 レベル での プロ セッサ 機能 を中 心に、
Nios® II プログラミング・モデルについて説明します。以下の機能をプ
ログラマ向けに解説しています。
■
■
■
■
■
■
■
■
■
■
■
■
汎用レジスタ、3–1 ページ
コントロール・レジスタ、3–3 ページ
スーパバイザ・モードでの権限とユーザ・モードでの権限、3–5 ページ
ハードウェア支援デバッグ処理、3–14 ページ
例外処理、3–8 ページ
ハードウェア割り込み、3–9 ページ
未実装命令、3–11 ページ
メモリおよびペリフェラルの構成、3–15 ページ
キャッシュ・メモリ、3–16 ページ
プロセッサのリセット状態、3–16 ページ
命令セットのカテゴリ、3–17 ページ
カスタム命令、3–23 ページ
高水準ソフトウェア開発ツールについては、ここでは説明していません。
ソフトウェアの開発については、Nios II ソフトウェア開発ハンドブック
を参照してください。
汎用レジスタ
Nios II アーキテクチャは、r0 から r31 までの 32 個の 32 ビット汎用レジ
スタを提供します。3-2 ページの表 3–1 を参照してください。一部のレジス
タにはアセンブラで認識される名前が付いています。zero レジスタ(r0)
は常に値 0 を返すため、
zero に書き込んでも無効です。
ra レジスタ
(r31)
は、プロシージャ・コールで使用された戻りアドレスを保持しており、
call 命令と ret 命令によって暗黙的にアクセスされます。C および C++
コンパイラは共通のプロシージャ・コール規則を使用して、レジスタ r1
から r23 および r26 から r28 に特定の目的を割り当てます。
この規則は、
第 19 章の「アプリケーション・バイナリ・インタフェース」に記載されて
います。
et(r24)、bt(r25)、ea(r29)、および ba(r30)など、一部のレ
ジスタへのアクセスは、特定の実行モードに限定されます。詳細につい
ては、3–5 ページの「動作モード」を参照してください。
Altera Corporation
2004 年 12 月
3–1
汎用レジスタ
表 3–1. Nios II レジスタ・ファイル
汎用レジスタ
レジスタ
名称
機能
レジスタ
名称
機能
r0
zero
0x00000000
r16
r1
at
一時的なアセンブラ
r17
r2
戻り値
r18
r3
戻り値
r19
r4
レジスタ引数
r20
r5
レジスタ引数
r21
r6
レジスタ引数
r22
r7
レジスタ引数
r23
r8
呼び出し元保存レジスタ
r24
et
一時的な例外 (1)
r9
呼び出し元保存レジスタ
r25
bt
一時的なブレークポイント (2)
r10
呼び出し元保存レジスタ
r26
gp
グローバル・ポインタ
r11
呼び出し元保存レジスタ
r27
sp
スタック・ポインタ
r12
呼び出し元保存レジスタ
r28
fp
フレーム・ポインタ
r13
呼び出し元保存レジスタ
r29
ea
例外戻りアドレス (1)
r14
呼び出し元保存レジスタ
r30
ba
ブレークポイント戻りアドレス
(2)
r15
呼び出し元保存レジスタ
r31
ra
戻りアドレス
表 3–1 の注:
(1) このレジスタはユーザ・モードでは使用できません。
(2) このレジスタはユーザ・モードまたはスーパバイザ・モードでは使用できません。JTAG デバッグ・モ
ジュールで排他的に使用されます。
3–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
コントロール・
レジスタ
ctl0 から ctl5 までの 6 個の 32 ビット・コントロール・レジスタがあ
ります。すべてのコントロール・レジスタには、アセンブラで認識され
る名前が付いています。
コントロール・レジスタは、汎用レジスタとは異なる方法でアクセスさ
れます。特殊命令の rdctl および wrctl によってのみ、コントロール・
レジスタの読み出しと書き込みが可能です。コントロール・レジスタは
スーパバイザ・モードでのみアクセス可能で、ユーザ・モードではアク
セスできません。詳細については、3–5 ページの「動作モード」を参照
してください。
コントロール・レジスタの詳細は、表 3–2 に示します。コントロール・レ
ジスタと例外処理の関係についての詳細は、3–10 ページの図 3-2 を参照し
てください。
表 3–2. コントロール・レジスタとビット
レジスタ
名称
31…2
1
0
ctl0
status
予約済み
U
PIE
ctl1
estatus
予約済み
EU
EPIE
ctl2
bstatus
予約済み
BU
BPIE
ctl3
ienable
ctl4
ipending
ctl5
cpuid
割り込みイネーブル・ビット
割り込みペンディング・ビット
固有のプロセッサ識別子
status (ctl0)
status レジスタの値によって、Nios II プロセッサの状態を制御します。
プロセッサのリセット後に、すべてのステータス・ビットがクリアされ
ます。3–16 ページの「プロセッサのリセット状態」を参照してください。
表 3–3 に示すように、PIE と U の 2 ビットが定義されています。
表 3–3. ステータス・レジスタ・ビット
ビット
説明
PIE ビット
PIE はプロセッサ割り込みイネーブル・ビットです。PIE が 0 の場合、外部割込みは無視さ
外部割込みの受け入れが可能です。
れます。PIEが1の場合、ienableレジスタの値に応じて、
U ビット
U はユーザ・モード・ビットです。1 はユーザ・モード、0 はスーパバイザ・モードを示します。
Altera Corporation
2004 年 12 月
3–3
Nios II プロセッサ・リファレンス・ハンドブック
コントロール・レジスタ
estatus (ctl1)
estatus レジスタは、例外処理中の status レジスタの保存されたコ
ピーを保持します。EPIE と EU の 2 ビットが定義されています。これら
は、表 3–3 で定義するとおり、PIE と U の値を保存したものです。
例外ハンドラで estatus を調べて、例外発生前のプロセッサのステータ
スを確認できます。プロセッサは、割り込みからの復帰時に eret 命令に
よって、estatus を status にコピーし、例外発生前の status の値を復元
します。
詳細については、3–8 ページの「例外処理」を参照してください。
bstatus (ctl2)
bstatus レジスタは、デバッグ・ブレーク処理中の status レジスタ
の保存されたコピーを保持します。EPIE と BU の 2 ビットが定義されて
います。これらは、3–3 ページの表 3–3 で定義するとおり、PIE と U の
値を保存したものです。
ブレークが発生すると、status レジスタの値が bstatus にコピーさ
れます。bstatus を使用すると、status レジスタをブレーク発生前の
値に復元することができます。
詳細については、3–7 ページの「デバッグ・モード」を参照してください。
ienable (ctl3)
ienable レジスタは、外部ハードウェア割り込みの処理を制御します。
ienable レジスタの各ビットは、irp0 から irp31 までの割り込み入
力の 1 つに対応します。ビット値が 1 の場合は対応する割り込みがイネー
ブルされていることを意味し、ビット値が 0 の場合は、対応する割り込
みがディセーブルされていることを意味します。
詳細については、3–8 ページの「例外処理」を参照してください。
ipending (ctl4)
ipending レジスタの値は、どの割り込みがペンディング中であるかを
示します。ビット n の値が 1 の場合は対応する irqn 入力がアサートさ
れ、対応する割り込みが ienable レジスタでイネーブルされているこ
とを意味します。ipending レジスタに値を書き込んだ場合の影響は不
定です。
3–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
cpuid (ctl5)
cpuid レジスタは、マルチプロセッサ・システムでプロセッサを一意に
識別するスタティック値を保持します。cpuid の値はシステム生成時に
決定されます。cpuid レジスタに値を書き込んでも無効となります。
詳細については、3–8 ページの「例外処理」を参照してください。
動作モード
Nios II プロセッサには、以下の 3 つの動作モードがあります。
■
スーパバイザ・モード
ユーザ・モード
■ デバッグ・モード
■
以下のセクションでは、モードおよびモード間の移行について説明しま
す。この説明では、システム・コードとアプリケーション・コードを区
別しています。
■
システム・コードは、オペレーティング・システム(OS)や低水準
ハードウェア・ドライバなど、システム・レベルの機能を実行する
ルーチンで構成されています。一般に、システム・コードはランタ
イム・ライブラリまたは OS カーネルの一部分として提供されます。
通常、システム・コードはスーパバイザ・モードで実行されます。
■
アプリケーション・コードは、システム・コードで提供されるサー
ビス上で動作するルーチンで構成されています。アプリケーション・
コードは、一般にターゲット・アプリケーションを作成するプログ
ラマが記述します。
スーパバイザ・モード
スーパバイザ・モードでは、すべての定義済みのプロセッサ機能が利用で
き制約はありません。一般に、システム・コードはスーパバイザ・モード
で実行されます。ただし、オペレーティング・システムを使用しないシン
プルなプログラムは無限にスーパバイザ・モードのままで、アプリケー
ション・コードはスーパバイザ・モードのもとで正常に実行できます。
汎用レジスタ bt(r25)および ba(r30)は、スーパバイザ・モードで
は利用できません。プログラムがこれらのレジスタに値を格納しないよ
うにすることはできませんが、値が格納された場合、その値はデバッグ・
モードで変更できます。また、bstatus レジスタ(ctl2)もスーパバ
イザ・モードでは利用できません。
プロセッサがスーパバイザ・モードの場合、U ビットは 0 です。プロ
セッサは、リセット直後はスーパバイザ・モードになります。
Altera Corporation
2004 年 12 月
3–5
Nios II プロセッサ・リファレンス・ハンドブック
動作モード
ユーザ・モード
ユーザ・モードは、スーパバイザ・モード機能の限定されたサブセット
を提供します。ユーザ・モードでは、複数のタスクを監視するオペレー
ティング・システムに対して高い信頼性が実現されます。システム・コー
ドは、ユーザ・モードに切り替えてからアプリケーション・コードに制
御を渡すことを選択できます。
ユーザ・モードでは、一部のプロセッサ機能にはアクセスできず、アク
セスを試みると例外が発生します。コントロール・レジスタはユーザ・
モードでは利用できません。さらに、汎用レジスタの et(r24)、bt
(r25)、ea(r29)、および ba(r30)も利用できません。ユーザ・モー
ドで実行しているプログラムがこれらのレジスタに値を格納しないよう
にすることはできませんが、格納された値はスーパバイザ・モードの例
外ルーチンまたはデバッグ・モードで変更できます。
プロセッサがユーザ・モードの場合、以下の命令のいずれかを発行する
と例外が発生します。
■
■
■
■
■
■
rdctl
wrctl
bret
eret
initd
initi
プロセッサがユーザ・モードの場合、U ビットは 1 です。
プロセッサ実装とユーザ・モード・サポート
一部の Nios II プロセッサ実装では、ユーザ・モードはサポートされて
いません。これらのコアでは、すべてのコードがスーパバイザ・モード
で実行され、U ビットは常に 0 になります。したがって、正しく実行さ
せるには、U ビットの特定の値に動作が左右されないようにアプリケー
ション・コードを記述する必要があります。
アプリケーション・コードは、ユーザ・モードとスーパバイザ・モード
のどちらでも正常に実行されます。ユーザ・モードをサポートしていな
い Nios II プロセッサ・コアでは、システム・コードからユーザ・モー
ドまたは制限されたリソース保護のためのアクセス違反例外を利用する
ことはできません。
ユーザ・モードをサポートするプロセッサの詳細については、第 17 章の
「Nios II コア実装の詳細」を参照してください。
3–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
デバッグ・モード
デバッグ・モードは、ブレークポイントやウォッチポイントなどの機能
を実現するために、ソフトウェア・デバッグ・ツールで使用されていま
す。システム・コードとアプリケーション・コードはデバッグ・モード
では実行できません。プロセッサは、break 命令後、または JTAG デ
バッグ・モジュールがハードウェアでブレークを強制した場合にのみ、
デバッグ・モードに移行します。
デバッグ・モードでは、ソフトウェア・デバッグ・ツールからすべてのプ
ロセッサ機能が無制限に利用できます。デバッグ・モードでは U ビットは
0 です。詳細については、3–14 ページの「ブレーク処理」を参照してくだ
さい。
モードの変更
図 3-1 は、ユーザ・モード、スーパバイザ・モード、およびデバッグ・
モード間の移行を示します。
図 3-1. 動作モード間の遷移
ブレーク条件
リセット
スーパバイザ
(U = = 0)
デバッグ
(U = = 0)
bret
例外
bret
eret
ブレーク条件
ユーザ
(U = = 1)
プロセッサは、リセット後にスーパバイザ・モードで起動します。
プログラムは、eret(例外復帰)命令を使用してスーパバイザ・モード
からユーザ・モードに切り替えることができます。eret は、estatus
レジスタ(ctl1)の値を status レジスタ(ctl0)にコピーし、ea
(r29)レジスタのアドレスに制御を移します。プロセッサをリセットし
てから最初にユーザ・モードに入るには、システム・コードは estatus
レジスタとeaレジスタを設定し、eret命令を実行する必要があります。
Altera Corporation
2004 年 12 月
3–7
Nios II プロセッサ・リファレンス・ハンドブック
例外処理
プロセッサは例外処理が発生するまでユーザ・モードで維持され、例外
処理が発生した時点でスーパバイザ・モードに再入します。すべての例
外処理で、U ビットは 0 にクリアされ、status の内容は estatus に
保存されます。例外処理ルーチンが estatus レジスタを変更しないと
仮定すれば、eret を使用して例外処理から復帰すると、例外処理発生
前のモードに復元されます。
プロセッサは、ソフトウェア・デバッグ・ツールで指示された場合のみ、
デバッグ・モードに入ります。システム・コードとアプリケーション・
コードは、プロセッサがデバッグ・モードに移行するタイミングを制御
することはできません。プロセッサはデバッグ・モードを終了すると、
必ず前の状態に戻ります。
詳細については、3–8 ページの「例外処理」と 3–14 ページの「ブレーク
処理」を参照してください。
例外処理
例外は、プログラムの通常の実行フローから制御を移すことであり、こ
れはプロセッサの内部または外部のイベントによって発生し、即時の対
処が求められます。例外処理とは、例外に反応して動作し、その後で例
外が発生する前の実行状態に戻ることをいいます。
例外が発生すると、プロセッサは自動的に以下のステップを実行します。
プロセッサは、
1. status レジスタ(ctl0)の内容を estatus レジスタ(ctl1)に
コピーして、例外発生前のプロセッサの状態を保存します。
2. status レジスタの U ビットをクリアして、プロセッサを強制的にスー
パバイザ・モードにします。
3. status レジスタの PIE ビットをクリアして、外部プロセッサ割り込
みをディセーブルします。
4. 例外発生後の命令のアドレスを ea レジスタ(r29)に書き込みます。
5. 割り込みの原因を特定する例外ハンドラのアドレスに実行を移します。
例外ハンドラのアドレスは、システム生成時に指定されます。このアド
レスは実行時に確定され、ソフトウェアでは変更できません。プログラ
マが例外ハンドラのアドレスに直接アクセスすることはなく、アドレス
を意識しないでプログラムを記述できます。
例外ハンドラは各例外の原因を特定し、適切な例外ルーチンをディス
パッチして割り込みに応答します。
3–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
例外と割り込み処理を利用するプログラムの記述に関する詳細な説明は、
「Nios II ソフトウェア開発ハンドブック」の第 6 章「例外処理」を参照
してください。
例外タイプ
Nios II の例外は以下のカテゴリに分類されます。
■
ハードウェア割り込み
ソフトウェア・トラップ
■ 未実装命令
■ その他
■
各例外タイプについては、以下のセクションで詳細に説明します。
ハードウェア割り込み
ペリフェラル・デバイスなどの外部ソースは、プロセッサの 32 個の割り
込み要求入力、irq0 から irq31 のいずれかをアサートすることによっ
て、ハードウェア割り込みを要求できます。ハードウェア割り込みは、
以下の 3 つの条件がすべて満たされた場合にのみ生成されます。
■
status レジスタ(ctl0)の PIE ビットが 1
割り込み要求入力 irqn がアサートされている
■ ienable レジスタ(ctl3)の対応するビット n が 1
■
ハードウェア割り込み時に PIE ビットは 0 に設定され、以降の割り込み
をディセーブルします。ipending レジスタ(ctl4)の値は、どの割り
込み要求(IRQ)がペンディングされているかを示します。ペリフェラ
ル・デザインによって、プロセッサが明示的にペリフェラルに応答する
まで、IRQ ビットは必ずアサートされたままです。図 3-2 に、ipending、
ienable、PIE、および割り込みの生成の関係を示します。
Altera Corporation
2004 年 12 月
3–9
Nios II プロセッサ・リファレンス・ハンドブック
例外処理
図 3-2. ienable、ipending、PIE およびハードウェア割り込みの関係
31
0
ienableレジスタ
IENABLE0
IENABLE1
IENABLE2
irq0
irq1
irq2
irq3
外部ハードウェア
割り込み要求入力
irq[31..0]
...
31
0
ipendingレジスタ
IPENDING0
IPENDING1
IPENDING2
IPENDING3
...
...
PIEビット
ハードウェア
割り込みの生成
ソフトウェア例外ルーチンは、ペンディング中の割り込みでどれが最も
優先順位が高いかを判定し、適切な割り込みサービス・ルーチン(ISR)
に制御を移します。ISR は、復帰前または PIE を再イネーブルする前に、
割り込みを認識できないようにする(ソースでクリアするか、ienable
を使用してマスクする)必要があります。また ISR は、PIE を再イネー
ブルする前に、estatus(ctl1)と ea(r29)を保存しなければなり
ません。
割り込みは、PIE ビットに 1 を書き込むと再イネーブルでき、それによっ
て現在の ISR への割り込みを発生させることが可能です。通常、例外
ルーチンは ienable を調整して、割り込みを再イネーブルする前に、優
先順位が同じまたは低い IRQ がディセーブルされるようにします。
3–13 ページの「ネスト式例外」を参照してください。
3–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
ソフトウェア・トラップ
プログラムで trap 命令を発行すると、ソフトウェア・トラップ例外が
生成されます。通常、プログラムはオペレーティング・システムによる
処理を必要とするときに、ソフトウェア・トラップを発行します。オペ
レーティング・システム用の例外ハンドラは、トラップの原因を特定し、
適切に応答します。
未実装命令
プロセッサがハードウェアで実装されていない有効な命令を発行する
と、未実装命令例外が生成されます。例外ハンドラは例外を生成した命
令を特定します。その命令がハードウェアで実装されていない場合は、
ソフトウェアで動作をエミュレートする例外ルーチンに制御が渡されま
す。
詳細については、3–24 ページの「未実装の可能性がある命令」を参照し
てください。
「未実装命令」は「無効な命令」を意味するものではないことに注
意してください。
未定義つまり無効な命令ワードに対するプロセッ
サの動作は、Nios II コアによって異なります。大部分の Nios II コ
ア実装では、無効な命令を実行したときの結果は不定です。詳細
については、
第17章の
「Nios IIコア実装の詳細」
を参照してください。
その他の例外
ここまでのセクションでは、本書の発行時点で Nios II アーキテクチャ
によって定義されているすべての例外タイプについて説明しています。
ただし、一部のプロセッサ実装では、上記のカテゴリに分類されない例
外が生成される可能性があります。例えば、今後の実装では、アクセス
違反例外を生成するメモリ管理ユニット(MMU)が搭載される可能性
があります。したがって、例外ハンドラの堅牢なものにするには、例外
の原因を正確に特定できない場合は安全な応答(警告を発行するなど)
を提供することが必要です。
例外の原因の特定
例外ハンドラは、各例外の原因を特定し、適切な例外ルーチンに制御を
移すことが必要です。図 3-3 に、例外のソースを特定するのに使用され
るプロセスの例を示します。
Altera Corporation
2004 年 12 月
3–11
Nios II プロセッサ・リファレンス・ハンドブック
例外処理
図 3-3. 例外の原因を特定するプロセス
例外ハンドラへ移動
(EPIE == 1)&(ipending != 0)?
はい
ハードウェア
割り込みの処理
いいえ
(ea-4)の命令はトラップか?
はい
ソフトウェア・
トラップの処理
はい
未実装命令の
処理
いいえ
(ea-4)の命令は、
div、mul、mulxuuなどか?
いいえ
その他の例外
estatus レジスタ(ctl1)の EPIE ビットが 1 で、ipending レジスタ
(ctl4)の値がゼロでない場合、例外は外部ハードウェア割り込みによっ
て発生しています。そうでない場合、例外はソフトウェア・トラップまた
は未実装命令によって発生した可能性があります。ソフトウェア・トラッ
プと未実装命令を区別するには、アドレス ea–4 の命令を読み出します(こ
のアドレスを読み出すには、Nios II データ・マスタがコード・メモリにア
クセスできることが必要です)
。命令が trap であれば、例外はソフトウェ
ア・トラップです。アドレス ea-4 の命令が、ソフトウェアで実装された
可能性のある命令の場合、例外は未実装命令によって発生しています。詳
細については、3–24 ページの「未実装の可能性がある命令」を参照してく
ださい。上記のいずれの状態にも該当しない場合、例外タイプは認識され
ないため、例外ハンドラはその状態を報告する必要があります。
3–12
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
ネスト式例外
例外ルーチンでは、以下を実行する前に、特別な対策が必要です。
■
trap 命令の発行
未実装命令の発行
■ ハードウェア割り込みの再イネーブル
■
これらの動作を許可する前に、例外ルーチンは estatus(ctl1)およ
び ea(r29)を保存して、復帰前にこれらを正しく復元できるようにし
ておく必要があります。
例外からの復帰
eret 命令は、例外発生前のアドレスから実行を再開するのに使用され
ます。et レジスタ(r24)を除いて、例外処理中に変更されるレジスタ
は、例外処理から復帰する前に例外ルーチンで復元する必要があります。
eret 命令の実行時に、プロセッサは以下を行います。
1. estatus(ctl1)の内容を status(ctl0)にコピーする
2. プログラムの実行を ea レジスタ(r29)のアドレスに移す
戻りアドレス
戻りアドレスについては、例外処理ルーチンから復帰する場合に多少の
考慮が必要です。例外が発生すると、ea には、例外が生成された位置よ
り後の命令のアドレスが格納されます。
ソフトウェア・トラップおよび未実装命令例外から復帰するときには、
ソフトウェア・トラップまたは未実装命令に続く命令から実行を再開す
る必要があります。したがって、ea には正しい戻りアドレスが格納され
ています。
それに対して、ハードウェア割り込み例外では、割り込みを受けた命令
自体から実行を再開することが必要です。この場合、例外ハンドラは割
り込みを受けた命令を指すように、eaから4を減算する必要があります。
Altera Corporation
2004 年 12 月
3–13
Nios II プロセッサ・リファレンス・ハンドブック
ブレーク処理
ブレーク処理
ブレークとは、break 命令または JTAG デバッグ・モジュールによって、
プログラムの通常の実行フローから制御を移すことです。ソフトウェア・
デバッグ・ツールでは、JTAG デバッグ・モジュールを介して Nios II プ
ロセッサを制御することができます。デバッグ・モードで実行する場合
は、デバッグ・ツールのみがプロセッサを制御し、アプリケーションと
システム・コードはこのモードでは実行できません。
ブレーク処理は、ソフトウェア・デバッグ・ツールがブレークポイントや
ウォッチポイントなどのデバッグ機能や診断機能を実現する手段です。ブ
レーク処理は例外処理と類似していますが、ブレーク・メカニズムは例外
処理から独立しています。ブレークは例外処理中でも発生させることがで
きるため、デバッグ・ツールで例外ハンドラのデバッグが可能できます。
ブレークの処理
プロセッサは、以下の条件でブレーク処理状態に入ります。
■
■
プロセッサが break 命令を発行する
JTAG デバッグ・モジュールがハードウェア・ブレークをアサートする
ブレークが発生すると、プロセッサは以下の処理を自動的に実行します。
プロセッサは、
1. status レジスタ(ctl0)の内容を bstatus(ctl2)に格納しま
す。
2. status レジスタの U ビットをクリアして、プロセッサを強制的にスー
パバイザ・モードにします。
3. status レジスタの PIE ビットをクリアして、外部プロセッサ割り込
みをディセーブルします。
4. ブレークに続く命令のアドレスを ba(r30)レジスタに書き込みます。
5. 実行をブレーク・ハンドラのアドレスに移します。ブレーク・ハン
ドラのアドレスは、システム生成時に指定されます。
ブレークからの復帰
デバッグ・ツールは、ブレーク処理を実行した後、bret 命令を実行し
てプロセッサの制御を解放します。bret 命令は、status を復元し、ba
内のアドレスにプログラムの実行を戻します。
レジスタの使用
ブレーク・ハンドラは、bt(r25)を使用して、追加レジスタの保存に
役立てることができます。bt を除くすべてのレジスタは、ブレーク処理
ルーチンからの復帰後に必ずブレーク前の状態に戻ります。
3–14
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
メモリ・
アクセスと
ペリフェラル・
アクセス
Nios II のアドレスは 32 ビットであり、最大 4 ギガバイトのアドレス空間
にアクセス可能です。しかし、多くの Nios II コア実装では、アドレスは
31 ビット以下に制限されています。詳細については、第 17 章の「Nios II
コア実装の詳細」を参照してください。ペリフェラル、データ・メモリ、
およびプログラム・メモリは同じアドレス空間にマップされます。アドレ
ス空間内のメモリとペリフェラルの位置は、システム生成時に決定されま
す。メモリまたはペリフェラルにマップされないアドレスに読み書きを
行った場合、結果は不定です。
プロセッサのデータ・バスの幅は 32 ビットです。バイト、ハーフワード
(16 ビット)、またはワード(32 ビット)データの読み出しと書き込みを
実行する命令が用意されています。
Nios II アーキテクチャはリトル・エンディアンです。9 ビット以上の幅
のデータがメモリ内に格納される場合、上位ビットが上位アドレスに配
置されます。
アドレス指定モード
Nios II アーキテクチャは以下のアドレス指定モードをサポートしてい
ます。
■
レジスタ・アドレス指定
ディスプレースメント・アドレス指定
■ 即値アドレス指定
■ レジスタ間接アドレス指定
■ 絶対アドレス指定
■
レジスタ・アドレス指定では、すべてのオペランドがレジスタとなり、
結果はレジスタに再格納されます。ディスプレースメント・アドレス指
定では、アドレスはレジスタと符号付き 16 ビット即値として計算されま
す。即値アドレス指定では、オペランドは命令自体に含まれる定数です。
レジスタ間接アドレス指定は、ディスプレースメント・アドレス指定を
使用しますが、ディスプレースメントは定数 0 です。限定範囲の絶対ア
ドレス指定は、常に値が 0x00 のレジスタ r0 によるディスプレースメン
ト・アドレス指定を使用して実行されます。
Altera Corporation
2004 年 12 月
3–15
Nios II プロセッサ・リファレンス・ハンドブック
プロセッサのリセット状態
キャッシュ・メモリ
Nios II のアーキテクチャと命令セットは、データ・キャッシュ・メモリ
と命令キャッシュ・メモリの有無に対応しています。キャッシュ管理は、
キャッシュ管理命令を使用してソフトウェアで実行されます。キャッ
シュの初期化、必要に応じたキャッシュのフラッシュ、およびデータ・
キャッシュのバイパスによるメモリ・マップド・ペリフェラルへの適切
なアクセスを行う命令が用意されています。
一部の Nios II プロセッサ・コアは、アドレスの最上位ビットの値に応
じてキャッシュをバイパスする、ビット 31 キャッシュ・バイパスと呼ば
れるメカニズムをサポートしています。これらのプロセッサの実装アド
レス空間は 2 G バイトで、アドレスの上位ビットはデータ・メモリ・ア
クセスのキャッシュ処理を制御します。ビット 31 キャッシュ・バイパス
をサポートするプロセッサ・コアの詳細については、第 17 章の「Nios II
コア実装の詳細」を参照してください。
キャッシュ・メモリを搭載したプロセッサ・コア用に記述されたコード
は、キャッシュ・メモリを搭載していないプロセッサ・コア上でも正常
に動作します。ただし、その逆は成り立ちません。したがって、プログ
ラムがすべての Nios II プロセッサ・コア実装で正常に動作するには、プ
ログラムは命令キャッシュとデータ・キャッシュが存在するものとして
動作する必要があります。キャッシュ・メモリを搭載しないシステムで
は、キャッシュ管理命令は動作しないため影響はありません。キャッシュ
管理の詳細な説明は、「Nios II ソフトウェア開発ハンドブック」を参照
してください。
プロセッサ・リセット後のキャッシュ・コヒーレンシを保証するには、
若干の考慮が必要です。詳細については、この章の 3–16 ページの「プロ
セッサのリセット状態」を参照してください。キャッシュ・アーキテク
チャおよびメモリ階層の詳細については、第 2 章の「プロセッサ・アー
キテクチャ」を参照してください。
プロセッサの
リセット状態
リセット後に、Nios II プロセッサは以下を実行します。
1. status レジスタを 0x0 にクリアします。
2. リセット・アドレス、つまりリセット・ルーチンのアドレスに関連
付けられた命令キャッシュ・ラインを無効化します。
3. リセット・アドレスから実行を開始します。
3–16
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
status(ctl0)をクリアすると、プロセッサがスーパバイザ・モード
になり、ハードウェア割り込みをディセーブルします。リセット・キャッ
シュ・ラインを無効化すると、リセット・コードの命令フェッチは必ず
非キャッシュ・メモリから行われます。リセット・アドレスは、システ
ム生成時に指定されます。
リセット・アドレスに関連付けられた命令キャッシュ・ラインを除いて、
キャッシュ・メモリの内容はリセット後も不定です。リセット後のキャッ
シュ・コヒーレンシを保証するには、リセット・ルーチンが命令キャッ
シュを即座に初期化する必要があります。次に、リセット・ルーチンま
たは後続のルーチンのいずれかが、データ・キャッシュの初期化を実行
することが必要です。
リセット状態は、以下を含む(ただし、これらに限定されない)その他
すべてのシステム・コンポーネントに対して不定です。
■
■
■
■
■
■
命令セットの
カテゴリ
汎用レジスタ:ただし、永久にゼロである zero(r0)は除きます。
コントローラ・レジスタ:ただし、0x0 にリセットされる status
(ctl0)は除きます。
命令およびデータ・メモリ
キャッシュ・メモリ:ただし、リセット・アドレスに関連付けられた
命令キャッシュ・ラインは除きます。
ペリフェラル:リセット条件については、該当するペリフェラル・
データ・シートまたは仕様を参照してください。
カスタム命令ロジック:リセット条件については、カスタム命令の仕
様を参照してください。
このセクションでは、実行される処理のタイプ別に、Nios II 命令につい
て説明します。
データ転送命令
Nios II アーキテクチャは、ロード / ストア・アーキテクチャの一種で
す。レジスタ、メモリ、およびペリフェラル間のすべてのデータ移動は、
ロード命令とストア命令によって処理されます。メモリとペリフェラル
は共通アドレス空間を共有します。一部の Nios II プロセッサ・コアは、
メモリ・キャッシングと書き込みバッファリングの両方または一方を使
用して、メモリ帯域幅を向上させています。このアーキテクチャは、
キャッシュ・アクセスと非キャッシュ・アクセスの両方に対する命令を
提供しています。
Altera Corporation
2004 年 12 月
3–17
Nios II プロセッサ・リファレンス・ハンドブック
命令セットのカテゴリ
表 3–4 で、ldw、stw、ldwio、および stwio 命令について説明します。
表 3–4. データ転送命令(ldw、stw、ldwio および stwio)
命令
ldw
stw
説明
ldw および stw 命令はそれぞれ、32 ビット・データ・ワードをメモリからロード / メモリに格
納します。有効アドレスは、レジスタの内容と命令に含まれる符号付き即値との合計です。メモ
リ転送をキャッシュまたはバッファリングすると、プログラムの性能を向上させることができま
す。このキャッシングおよびバッファリングによってメモリ・サイクルの発生が乱れたり、キャッ
シングによって一部のサイクルが完全に抑制されることがあります。
I/O ペリフェラルのデータ転送では、 ldwio および stwio を使用する必要があります。
ldwio
stwio
ldwio および stwio 命令はそれぞれ、キャッシングやバッファリングを行わずに、32 ビット・
データ・ワードをペリフェラルからロード / ペリフェラルに格納します。 ldwio および stwio
命令のアクセス・サイクルは、命令の順番どおり発生することが保証されており、抑制されるこ
とはありません。
表 3–5 のデータ転送命令は、バイト転送とハーフワード転送をサポート
しています。
表 3–5. データ転送命令
命令
説明
ldb
ldbu
stb
ldh
ldhu
sth
ldb、 ldbu、 ldh、および ldhu はバイトまたはハーフワードをメモリからレジスタにロー
ドします。ldb および ldh は値を 32 ビットに符号拡張し、ldbu および ldhu は値を 32 ビッ
トにゼロ拡張します。
stb および sth はそれぞれ、バイト値およびハーフワード値を格納します。
メモリ・アクセスをキャッシュまたはバッファして、性能を向上させることができます。データ
を I/O ペリフェラルに転送するには、後述する命令の「io」バージョンを使用します。
ldbio
ldbuio
stbio
ldhio
ldhuio
sthio
これらの処理では、キャッシングまたはバッファリングを行わずに、バイトおよびハーフワー
ド・データをペリフェラルからロード / ペリフェラルに格納します。
3–18
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
算術命令と論理命令
論理命令は and、or、xor、および nor 演算をサポートしています。算
術命令は、加算、減算、乗算、および除算演算をサポートしています。
表 3–6 を参照してください。
表 3–6. 算術命令と論理命令
命令
説明
and
or
xor
nor
これらは標準的な 32 ビット論理演算です。これらの演算は、2 つのレジスタ値を受け取り、ビッ
ト単位で結合して、第 3 のレジスタに対する結果を生成します。
andi
ori
xori
これらの演算は、 and、 or、および xor 命令の即値バージョンです。16 ビットの即値が 32
ビットにゼロ拡張され、レジスタ値と結合されて結果を生成します。
andhi
orhi
xorhi
and、 or、および xor のこれらのバージョンでは、16 ビットの即値が論理的に 16 ビット左
シフトされ、32 ビットのオペランドを生成します。右からゼロがシフト・インされます。
add
sub
mul
div
divu
これらは標準的な 32 ビット算術演算です。これらの演算では、2 つのレジスタを入力として受
け取り、結果を第 3 のレジスタに格納します。
addi
subi
muli
これらの命令は、add、sub、および mul 命令の即値バージョンです。命令ワードには符号付
き 16 ビット値が含まれます。
mulxss
mulxuu
これらの命令は、32x32 乗算演算の上位 32 ビットへのアクセスを提供します。オペランドを符
号付き値または符号なし値のどちらで扱うかに応じて、適切な命令を選択します。これらの命
令の前に mul を付ける必要はありません。
mulxsu
この命令は、64x64 符号付き乗算の 128 ビット結果を計算するのに使用されます。
Altera Corporation
2004 年 12 月
3–19
Nios II プロセッサ・リファレンス・ハンドブック
命令セットのカテゴリ
移動命令
これらの命令は、レジスタの値または即値を別のレジスタにコピーする
移動操作を実現します。表 3–7 を参照してください。
表 3–7. 移動命令
命令
mov
movhi
movi
movui
movia
説明
mov はあるレジスタの値を別のレジスタにコピーします。movi は 16 ビットの符号付き即値を
レジスタに移動し、値を 32 ビットに符号拡張します。 movui および movhi はそれぞれ、レ
ジスタの下位または上位 16 ビットに、16 ビットの即値を移動し、残りのビット位置にゼロを挿
入します。レジスタにアドレスをロードするには、 movia を使用します。
比較命令
Nios II アーキテクチャは、多数の比較命令をサポートしています。これ
らの比較命令はすべて、2 つのレジスタまたは 1 つのレジスタと即値を
比較し、結果レジスタに 1(真の場合)または 0 を書き込みます。これ
らの命令は C プログラミング言語の等号演算子および関係演算子をすべ
て実行します。表 3–8 を参照してください。
表 3–8. 比較命令 ( 1 / 2 )
命令
説明
cmpeq
==
cmpne
!=
cmpge
符号付き >=
cmpgeu
符号なし >=
cmpgt
符号付き >
cmpgtu
符号なし >
cmple
符号なし <=
cmpleu
符号なし <=
cmplt
符号付き <
3–20
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
プログラミング・モデル
表 3–8. 比較命令 ( 2 / 2 )
命令
説明
cmpltu
符号なし <
cmpeqi
cmpnei
cmpgei
cmpgeui
cmpgti
cmpgtui
cmplei
cmpleui
cmplti
cmpltui
これらの命令は比較演算の即値バージョンです。レジスタの
値と 16 ビットの即値を比較します。符号付き演算では、即
値が 32 ビットに符号拡張されます。符号なし演算では上位
ビットにゼロが入ります。
シフト命令と回転命令
シフトおよび回転操作は以下の命令で提供されます。回転またはシフト
するビット数は、レジスタ内にまたは即値で指定できます。表 3–9 を参
照してください。
表 3–9. シフト命令と回転命令
命令
説明
rol
ror
roli
rol 命令と roli 命令は、左ビット回転を実行します。 roli は即値を使用して、回転する
ビット数を指定します。 ror 命令は右ビット回転を実行します。
roli を使用して同等の演算が実行できるため、 ror の即値バージョンはありません。
sll
slli
sra
srl
srai
srli
これらのシフト命令は、C プログラミング言語の << 演算子および >> 演算子の動作を実現しま
す。sll、slli、srl、srli 命令は、左および右論理ビット・シフト操作を実行し、ゼロを
挿入します。 sra および srai 命令は、算術右ビット・シフトを実行し、最上位ビットの符号
ビットを複製します。slli、srli、および srai は、即値を使用して、シフトするビット数
を指定します。
Altera Corporation
2004 年 12 月
3–21
Nios II プロセッサ・リファレンス・ハンドブック
命令セットのカテゴリ
プログラム制御命令
Nios II アーキテクチャは、表 3–10 に示す無条件ジャンプと呼び出し命令
をサポートしています。これらの命令には遅延スロットはありません。
表 3–10. 無条件ジャンプと呼び出し命令
命令
説明
call
この命令は、即値をサブルーチンの絶対アドレスとして使用してサブルーチンを呼び出し、レジ
スタ ra に戻りアドレスを格納します。
callr
この命令は、レジスタ内の絶対アドレスに置かれているサブルーチンを呼び出して、戻りアドレ
スをレジスタ ra に格納します。この命令は C 関数ポインタを逆参照する役割を果たします。
ret
ret 命令は、 call または callr で呼び出されたサブルーチンから復帰するために使用されま
す。 ret は、レジスタ ra のアドレスで指定される命令をロードして実行します。
jmp
jmp 命令は、レジスタに格納された絶対アドレスへのジャンプを実行します。 jmp は、C プロ
br
現在の命令に相対的な分岐。符号付き即値で、次に実行する命令のオフセットを設定します。
グラミング言語の switch 文を実現するのに使用されます。
条件付き分岐命令は、レジスタ値を直接比較し、式が真の場合は分岐し
ます。表 3–11 を参照してください。条件付き分岐は、C プログラミング
言語の以下の等号比較および関係比較をサポートしています。
■
== および !=
< および <=(符号付きおよび符号なし)
■ > および >=(符号付きおよび符号なし)
■
条件付き分岐命令には遅延スロットはありません。
表 3–11. 条件付き分岐命令
命令
bge
bgeu
bgt
bgtu
ble
bleu
blt
bltu
beq
bne
3–22
Nios II プロセッサ・リファレンス・ハンドブック
説明
これらの命令は、2 つのレジスタ値を比較する相対分岐を
実現し、式が真の場合は分岐します。実装されている関係
演算の説明は、3–20 ページの「比較命令」を参照してく
ださい。
Altera Corporation
2004 年 12 月
プログラミング・モデル
その他の制御命令
表 3–12 に、その他の制御命令を示します。
表 3–12. その他の制御命令
命令
説明
trap
eret
trap 命令と eret 命令は、例外を生成して、例外から戻ります。これらの命令は、call/ret
のペアと類似していますが、例外に対して使用されます。 trap は status レジスタの内容
を estatus レジスタに、戻りアドレスを ea レジスタに保存してから例外ハンドラに実行を
移します。eret は、estatus から status を復元し、ea のアドレスで指定された命令を
実行して例外処理から復帰します。
break
bret
break 命令はブレークを生成し、 bret 命令はブレークから復帰します。 break と bret
rdctl
wrctl
これらの命令は、status レジスタなどのコントロール・レジスタに読み出しと書き込みを行
います。値は 1 つの汎用レジスタに読み書きされます。
flushd
flushi
initd
initi
これらの命令は、データ・キャッシュ・メモリと命令キャッシュ・メモリの管理に使用されます。
flushp
この命令は、プリフェッチされたすべての命令をパイプラインからフラッシュします。この処
理は、最近変更された命令メモリにジャンプする前に実行する必要があります。
sync
この命令を実行すれば、すでに発行されたすべての操作が完了してから、後続のロードおよび
ストア操作が許可されるようになります。
は、ソフトウェア・デバッグ・ツールによって排他的に使用されます。プログラマがアプリケー
ション・コードでこれらの命令を使用することはありません。
カスタム命令
custom 命令は、カスタム命令ロジックへの低水準アクセスを提供しま
す。カスタム命令の組み込みはシステム生成時に指定され、カスタム命
令ロジックで実装される機能はデザインによって決まります。詳細につ
いては、第 2 章の「プロセッサ・アーキテクチャ」の 2–4 ページの「カ
スタム命令」および「Nios II Custom Instruction User Guide」を参照し
てください。
マシン生成された C 関数とアセンブリ・マクロを利用すると、カスタム
命令へのアクセスが可能になり、実装の詳細がユーザから隠蔽されます。
したがって、ほとんどのソフトウェア開発者は、custom アセンブリ命
令を直接使用することはありません。
Altera Corporation
2004 年 12 月
3–23
Nios II プロセッサ・リファレンス・ハンドブック
命令セットのカテゴリ
無動作命令
Nios II アセンブラでは、無動作命令 nop が利用できます。
未実装の可能性がある命令
Nios II プロセッサ・コアには、ハードウェアですべての命令をサポート
していないものもあります。その場合、プロセッサは、未実装命令を発
行した後で例外を生成します。未実装命令例外を生成できるのは、以下
の命令のみです。
■
■
■
■
■
■
■
mul
muli
mulxss
mulxsu
mulxuu
div
divu
その他のすべての命令は、未実装命令例外を生成しないことが保証され
ています。
例外ルーチンで上記の命令を使用する場合、それまでの例外が適切に処
理される前に別の例外が発生する可能性があるため、注意が必要です。
未実装命令の処理に関する詳細は、3–11 ページの「未実装命令」を参照
してください。
3–24
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
4. SOPC Builder での
Nios II プロセッサの実装
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51004-1.2
はじめに
この章では、SOPC Builder での Nios® II コンフィギュレーション・ウィ
ザードについて説明します。Nios II コンフィギュレーション・ウィザー
ドにより、特定の Nios II ハードウェア・システムに対してプロセッサ
機能を指定することができます。この章では、Nios II コンフィギュレー
ション・ウィザードによってコンフィギュレーション可能な Nios II プ
ロセッサの機能についてのみ説明します。本書は、完全な Nios II プロ
セッサ・システムを作成するためのユーザ・ガイドではありません。
SOPC Builder を使用してカスタム Nios II システムの設計を開始するに
は、Nios II Hardware Development Tutorial を参照してください。また、
Nios II 開発キットには、Nios II プロセッサの何種類かの構成の既製の
ハードウェア・デザイン例が多数用意されています。
Nios II プロセッサ・コンフィギュレーション・ウィザードには、いく
つかのタブがあります。以下のセクションでは、各タブで可能な設定に
ついて説明します。
Nios II コンフィギュレーション・ウィザードの進化と改良に
よって、この章で示されている図が SOPC Builder で実際に表
示される画面と一致しなくなる可能性があります。
Altera Corporation
2004 年 12 月
4–1
Nios II Core タブ
Nios II Core
タブ
Nios II Core タブでは、Nios II プロセッサ・コアをコンフィギュレー
ションするための主要な設定が表示されます。Nios II Core タブの例を
図 4-1 に示します。
図 4-1. Nios II コンフィギュレーション・ウィザードの Nios II Core タブ
コアの設定
Nios II Core タブの主な目的は、プロセッサ・コアを選択することです。
このタブで選択するコアによって、このタブやその他のタブで利用でき
るオプションが変化します。
現在、アルテラは以下の 3 つの Nios II コアを提供しています。
■
Nios II/f − Nios II/f の「高速」コアは、高速性能を達成するように設
計されています。そのため、このコアには大部分の構成オプション
が提供されており、プロセッサを微調整して性能を高めることがで
きます。
■
Nios II/s − Nios II/s の「標準」コアは、性能を維持しながら小型化
を実現するように設計されています。
■
Nios II/e − Nios II/e の「エコノミー」コアは、可能な限り最小のコ
ア・サイズを達成するように設計されています。そのため、このコ
アの機能セットは限定されており、Nios II/e コアを選択した場合は
多数の設定が利用できなくなります。
4–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
SOPC Builder での Nios II プロセッサの実装
4–2 ページの図 4-1 に示すように、Nios II Core タブは、各コアの基本プ
ロパティをリストする「Selector Guide」テーブルを表示します。各コア
の詳細については、第 17 章の「Nios II コア実装の詳細」を参照してく
ださい。
キャッシュ設定
命令キャッシュとデータ・キャッシュの両方または一方をサポートする
Nios II コアの場合、Nios II Core タブでキャッシュ設定をコンフィギュ
レーションできます。キャッシュが存在する場合は、キャッシュのサイ
ズをコンフィギュレーションできます。キャッシュ・メモリの容量が増
えるほど、オンチップ・メモリ・リソースの消費量も増大します。
最適なキャッシュ設定は、ターゲット・アプリケーションによって決ま
ります。一般に、命令キャッシュは、性能重視のソフトウェア・ループ
よりも大きなサイズにコンフィギュレーションし、データ・キャッシュ
は性能重視のソフトウェア・ループで使用されるデータ・バッファを十
分に格納できるサイズに構成することが必要です。
Nios II キャッシュ・メモリを使用したプログラミングの詳細について
は、「Nios II ソフトウェア開発ハンドブック」のキャッシュ・メモリの
章を参照してください。
乗算および除算の設定
Nios II/s コアと Nios II/f コアは、異なるハードウェア乗算および除算
オプションを提供します。エンベデッド乗算器の使用、ロジック・エレ
メント(LE)の使用、および性能の間でバランスを図るための最良のオ
プションを選択できます。
Hardware Multiply 設定では、以下のオプションを選択できます。
■
エンベデッド乗算器(つまり、Stratix デバイス等の DSP ブロック)を
論理演算ユニット(ALU)に搭載する。これは、エンベデッド乗算
器を搭載したデバイスをターゲットとする場合のデフォルトです。
■ LE ベースの乗算器を ALU に搭載する。このオプションはエンベデッ
ド乗算器リソースを消費しないで高度な乗算器性能を実現します。
■ ハードウェア乗算を省略する。このオプションでは、乗算ハードウェ
アを削除してロジック・リソースを節約します。乗算演算はソフト
ウェアでエミュレートされます。
Hardware Divide 設定をオンにすると、LE ベースの除算ハードウェア
が ALU ユニットに搭載されます。Hardware Divide オプションでは、
ソフトウェア・エミュレーションよりも大幅に高い性能が得られます。
Altera Corporation
2004 年 12 月
4–3
Nios II プロセッサ・リファレンス・ハンドブック
JTAG Debug Module タブ
Hardware Multiply オプションおよび Hardware Divide オプションが
性能に及ぼす影響の詳細については、本ハンドブックの「Nios II コア実
装の詳細」の章を参照してください。
JTAG Debug
Module タブ
JTAG Debug Module タブには、Nios II コアの JTAG デバッグ・モジュー
ルをコンフィギュレーションするための設定が表示されます。ターゲッ
ト・アプリケーションに適したデバッグ機能を選択することができます。
Nios II プロセッサなどのソフトコア・プロセッサは、従来型の固定プロ
セッサにはない独自のデバッグ機能を提供します。Nios II プロセッサの
ソフトコア特性により、フル機能を備えたデバッグ・コアを使用して、
開発中のシステムをデバッグし、後でデバッグ機能を削除してロジック・
リソースを節約することができます。製品のリリース・バージョンでは、
JTAG デバッグ・モジュール機能を削減したり、完全に削除するよう選
択できます。
表 4–1 に、システムのデバッグに使用可能なデバッグ機能を示します。
表 4–1. デバッグ・コンフィギュレーション機能
機能
説明
JTAG ターゲット接続
アルテラ FPGA の標準 JTAG ピンを介して、CPU に接続する機能。この機能によっ
て、プロセッサの開始および停止、レジスタとメモリの確認 / 編集が可能になります。
ソフトウェアのダウン JTAG 接続を介して実行可能コードをプロセッサのメモリにダウンロードする機能。
ロード
ソフトウェア・ブレー RAM 内に存在する命令に対してブレークポイントを設定する機能。
クポイント
ハードウェア・ブレー フラッシュ・メモリなどの不揮発性メモリ内の命令に対してブレークポイントを設定
クポイント
する機能。
データ・トリガ
アドレス値、データ値、またはリード・サイクルやライト・サイクルに基づいてトリ
ガする機能。トリガを使用して特定のイベントや条件でプロセッサを停止したり、実
行トレースの開始や外部ロジック・アナライザへのトリガ信号の送信など、その他の
イベントをアクティブ化することが可能です。2 つのデータ・トリガを組み合わせて、
一定のデータまたはアドレス範囲でアクティブになるトリガを形成できます。
オンチップ・トレース 実行トレース・データをオンチップ・メモリに格納する機能。
オフチップ・トレース トレース・データを外部デバッグ・プローブに格納する機能。オフチップ・トレース
には、First Silicon Solutions(FS2)が提供するデバッグ・プローブが必要です。
4–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
SOPC Builder での Nios II プロセッサの実装
デバッグ・レベルの設定
図 4-2 に示すように、JTAG Debug Module タブには 5 つのデバッグ・
レベルがあります。
図 4-2. Nios II コンフィギュレーション・ウィザードの JTAG Debug Module タブ
4–6 ページの表 4–2 は、各デバッグ・レベルの特性の詳細なリストです。
レベルによって消費されるオンチップ・リソース量が異なります。特定
の Nios II コアではデバッグ・オプションが限定されます。また、オプ
ションには、First Silicon Solutions(FS2)が提供するデバッグ・ツール
が必要なものもあります。
FS2から使用可能なNios IIデバッグ機能の詳細については、
www.fs2.com
をご覧ください。
Altera Corporation
2004 年 12 月
4–5
Nios II プロセッサ・リファレンス・ハンドブック
JTAG Debug Module タブ
表 4–2. JTAG デバッグ・モジュール・レベル
デバッグ機能
デバッグ
なし
Level 1
Level 2
Level 3
Level 4 (1)
2,400 ∼ 2,700 LE
3,000 ∼ 3,200 LE
ロジック使用
0
オンチップ・メモリの
使用
0
2 個の M4K
2 個の M4K
4 個の M4K
4 個の M4K
必要な外部 I/O ピン数
(2)
0
0
0
0
20
JTAG ターゲット接続
不可
可能
可能
可能
可能
ソフトウェアの
ダウンロード
不可
可能
可能
可能
可能
ソフトウェア・
ブレークポイント
なし
無制限
無制限
無制限
無制限
ハードウェア実行
ブレークポイント
0
なし
2
2
4
データ・トリガ
0
なし
2
2
4
オンチップ・トレース
0
なし
なし
最大 64K フレーム
(3)
最大 64K フレーム
オフチップ・トレース
(4)
0
なし
なし
なし
128K フレーム
300 ∼ 400 LE 800 ∼ 900 LE
表 4–2 の注:
(1)
(2)
(3)
(4)
Level4 を使用するには、FS2 からソフトウェア・アップグレードを購入する必要があります。
アルテラ FPGA の専用 JTAG ピンは含まれません。
16 を超えるフレームを使用するには、FS2 からの追加ライセンスが必要です。
オフチップ・トレースを使用するには、FS2 から追加ハードウェアを購入する必要があります。
オンチップ・トレース・バッファ設定
デバッグ・レベル 3 および 4 では、オンチップ・メモリ・バッファ内へ
のトレース・データ収集がサポートされます。オンチップ・トレース・
バッファのサイズは、128 から 64K トレース・フレームに設定できます。
バッファ・サイズが大きくなると、消費されるオンチップ M4K RAM ブ
ロック数も増加します。すべての M4K RAM ブロックに、最大 128K の
トレース・フレームが格納できます。
4–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
SOPC Builder での Nios II プロセッサの実装
Custom
Instructions
タブ
Custom Instructions タブでは、カスタム命令ロジックを Nios II 論理演
算ユニット(ALU)に接続できます。カスタム命令ロジックを使用して
性能重視の処理をハードウェアに実装すれば、場合によっては 10 倍から
100 倍と大幅に性能を改善できます。図 4-3 は、Custom Instructions タ
ブの例を示します。
図 4-3. Nios II コンフィギュレーション・ウィザードの Custom Instructions タブ
カスタム命令のハードウェアおよびソフトウェア・デザイン・プロセス
の詳細な説明は、この章の対象範囲外です。デザインの実用例など、カ
ス タ ム 命 令 に 関 す る ト ピ ッ ク の 詳 細 に つ い て は、「Nios II Custom
Instruction User Guide」を参照してください。
Altera Corporation
2004 年 12 月
4–7
Nios II プロセッサ・リファレンス・ハンドブック
Custom Instructions タブ
4–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
セクション II. ペリフェラル・
サポート
このセクションでは、Nios® II ペリフェラルに関する情報を提供します。
このセクションは、以下の章で構成されています。
Altera Corporation
■
第 5 章 Avalon インタフェース対応 SDRAM コントローラ
■
第 6 章 Avalon インタフェース対応 DMA コントローラ
■
第 7 章 Avalon インタフェース対応 PIO コア
■
第 8 章 Avalon インタフェース対応タイマ・コア
■
第 9 章 Avalon インタフェース対応 JTAG UART コア
■
第 10 章 Avalon インタフェース対応 UART コア
■
第 11 章 Avalon インタフェース対応 SPI コア
■
第 12 章 Avalon インタフェース対応 EPCS デバイス・コントローラ・
コア
■
第13章 Avalonインタフェース対応コモン・フラッシュ・インタフェー
ス・コントローラ
■
第 14 章 Avalon インタフェース対応システム ID コア
■
第15章 Avalonインタフェース対応キャラクタLCD
(Optrex 16207)
コントローラ
■
第 16 章 Avalon インタフェース対応 Mutex コア
セクション II–1
Nios II プロセッサ・リファレンス・ハンドブック
ペリフェラル・サポート
改訂履歴
以下の表では、第 5 章∼第 16 章の改訂履歴を示しています。これらの
バージョン番号は資料の改訂を追跡しているのもので、Nios II 開発キッ
トや Nios II プロセッサのバージョン番号には関係ありません。
章
5
6
日付 / バージョン
変更内容
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 12 月、v1.2
●
●
GO ビットの説明を更新。
表6-2の ioctl() マクロの説明
を更新。
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 12 月、v1.2
Cyclone II サポートを追加。
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 12 月、v1.2
Cyclone II サポートを追加。
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
15
2004 年 9 月、v1.0
初版
16
2004 年 12 月、v1.0
初版
7
8
9
10
11
12
13
14
セクション II–2
Altera Corporation
5. Avalon インタフェース対応
SDRAM コントローラ
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51005-1.1
コアの概要
Avalon™ インタフェース付き SDRAM コントローラは、オフチップ
SDRAM への Avalon インタフェースを提供します。SDRAM コントロー
ラにより、SDRAM チップに容易に接続できるカスタム・システムをア
ルテラ FPGA に構築することができます。SDRAM コントローラは、
PC100 規格で規定される標準 SDRAM をサポートしています。
SDRAM は大規模な不揮発性メモリを必要とするコスト重視のアプリ
ケーションに広く使用されています。SDRAM は比較的安価ですが、リ
フレッシュ動作、オープン・ロウ管理、その他の遅延およびコマンド・
シーケンスを実行するコントロール・ロジックが必要です。SDRAM コ
ントローラは、1 つまたは複数の SDRAM チップに接続され、すべての
SDRAM プロトコル要件に対応します。FPGA の内部では、コアはリニ
ア・メモリ(つまりフラット・アドレス空間)として扱うことができる
Avalon スレーブ・ポートを Avalon マスタ・ペリフェラルに提供します。
コアは、各種データ幅(8、16、32、または 64 ビット)、各種メモリ・サ
イズ、および複数のチップ・セレクトで SDRAM サブシステムにアクセ
スできます。Avalon インタフェースはレイテンシを認識できるため、
リード転送のパイプライン化が可能です。コアは、オプションによりア
ドレス・バスとデータ・バスを他のオフチップ Avalon トライステート・
デバイスと共有できます。この機能は I/O ピンが制限されたシステムで、
SDRAM の他に複数のメモリ・チップに接続する必要がある場合に有用
です。
Avalon インタフェース付き SDRAM コントローラは、SOPC Builder に
より対応が可能で、SOPC Builder で生成されたシステムに容易に統合で
きます。
機能の説明
図 5-1 に、外部 SDRAM チップに接続された SDRAM コントローラ・コ
アのブロック図を示します。
Altera Corporation
2004 年 9 月
5–1
機能の説明
図 5-1. Avalon インタフェース付き SDRAM コントローラのブロック図
Altera FPGA
PLL
クロック・
スキュー調整
SDRAMコントローラ
オンチップ・
ロジックへの
Avalon
スレーブ・
インタフェース
アドレス
データ、コントロール
ウェイト要求
正常なデータの
読み出し
コントロール・
ロジック
SDRAMピンへのインタフェース
Avalon
クロック
Avalonスレーブ・ポート
clk
cke
addr
ba
cs
cas
ras
we
dq
dqm
PC 100
SDRAM
以下のセクションでは、SDRAM コントローラ・コアのコンポーネント
について詳細に説明します。すべてのオプションは、システム生成時に
指定され、実行時には変更できません。
Avalon インタフェース
Avalon スレーブ・ポートは、SDRAM コントローラ・コアでユーザが認
識できる唯一の部分です。スレーブ・ポートは、SDRAM チップと同サ
イズの連続したフラットなメモリ空間を提供します。スレーブ・ポート
へのアクセス時には、PC100 SDRAM プロトコルの詳細は完全にトラン
スペアレントになります。Avalon インタフェースは、シンプルなメモ
リ・インタフェースとして動作します。メモリ・マップド・コンフィギュ
レーション・レジスタは存在しません。
5–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SDRAM コントローラ
Avalon スレーブ・ポートは、リード転送およびライト転送用にペリフェ
ラルで制御されるウェイト・ステートをサポートしています。スレーブ・
ポートは、有効なデータの供給が可能になるまでの間、転送を停止しま
す。また、スレーブ・ポートは可変レイテンシを使用したリード転送も
サポートしているため、パイプライン化された広帯域幅のリード転送が
可能です。マスタ・ペリフェラルがスレーブ・ポートからシーケンシャ
ル・アドレスを読み出すと、最初のデータはレイテンシの初期期間後に
返されます。以降の読み出しでは、クロック・サイクルごとに新しいデー
タを生成できます。ただし、SDRAM コントローラは周期的に休止して
SDRAM をリフレッシュする必要があるため、データは必ずクロック・
サイクルごとに返されるとは限りません。
Avalon 転送タイプの詳細については、
「Avalon Interface Specification
Reference Manual」を参照してください。
オフチップ SDRAM インタフェース
外部 SDRAM チップへのインタフェースは、PC100 規格で定義される信
号を供給します。これらの信号は、アルテラ FPGA の I/O ピンを介して
外部から SDRAM チップに接続する必要があります。
信号のタイミングおよび電気的特性
信号のタイミングとシーケンスは、コアのコンフィギュレーションに
よって決まります。ハードウェア設計者は、システムに選択した SDRAM
チップに適合するようにコアをコンフィギュレーションします。詳細に
ついては、5–6 ページの「SOPC Builder でのコアのインスタンス化」を
参照してください。FPGA ピンの電気的特性は、ターゲット・デバイス
のファミリと Quartus® II ソフトウェアで実行した割り当ての両方に依
存します。一部の FPGA ファミリはより広範囲の電気規格をサポートし
ているので、多様な SDRAM チップと通信が可能です。詳細については、
ターゲット FPGA ファミリのハンドブックを参照してください。
同期化
SDRAM チップは、Avalon インタフェースと同じクロック・レートでド
ライブされます。図 5-1 に示すとおり、SDRAM コントローラ・コアと
SDRAM チップの間のクロック・スキューを低減するために、オンチッ
プ PLL(Phase-Locked-Loop)がよく使用されます。クロック速度が低
い場合は、PLL が不要なこともあります。クロック・レートが高い場合、
ピンの信号が有効なときにウィンドウ内でトグルするように SDRAM ク
ロックを調整するために、PLL が必要になります。
Altera Corporation
2004 年 9 月
5–3
Nios II プロセッサ・リファレンス・ハンドブック
機能の説明
PLL ブロックは、SDRAM コントローラ・コアの不可欠な部分ではあり
ません。PLL が必要な場合、SOPC Builder で生成されたシステム・モ
ジュールの外部で、PLL を手動でインスタンス化しなければなりません。
アルテラ FPGA と SDRAM チップの組み合わせに応じて、異なる PLL
設定が必要です。
SDRAM コントローラは、クロック・ディセーブル・モードをサポート
していません。SDRAM コントローラは永久に cke ピンをアサートしま
す。
Nios® II 開発キットには、SDRAM コントローラを PLL と併用するハー
ドウェア・デザイン例が用意されています。
その他の Avalon トライステート・デバイスとのピンの共有
SOPC Builder システムに Avalon トライステート・ブリッジが存在する
場合、SDRAM コントローラ・コアは既存のトライステート・ブリッジ
とピンを共有できます。この場合、コアの addr、dq(データ)および
dqm(バイト・イネーブル)ピンは、Avalon トライステート・ブリッジ
に接続されているその他のデバイスと共有されます。この機能により
I/O ピン数が節約できます。これは、複数の外部メモリ・チップ(SDRAM
の他に、フラッシュ、SRAM など)を使用しているが、SDRAM チップ
専用に割り当てるピンが不足しているシステムに有効です。ピンの共有
が性能に与える影響の詳細については、5–4 ページの「性能に関する検
討事項」を参照してください。
性能に関する検討事項
最適な状態では、SDRAM コントローラ・コアの帯域幅は、1 クロック・
サイクルあたり 1 ワード近くになります。ただし、SDRAM のリフレッ
シュに伴うオーバヘッドのために、1 クロック・サイクルあたり 1 ワー
ドを達成することは不可能です。以下で説明するように、コアの性能は
その他の要因によっても影響を受けます。
オープン・ロウ管理
SDRAM チップは複数のメモリ・バンクとして編成され、各バンクは独
立したオープン・ロウ・アドレス管理が可能です。SDRAM コントロー
ラ・コアは、単一バンクに対するオープン・ロウ管理を活用しています。
同じロウおよびバンク内で連続的に読み出しまたは書き込みを実行する
と、動作レートは 1 クロックあたり 1 ワードに近づきます。異なるデス
ティネーション・バンクに頻繁にアクセスするアプリケーションでは、
ロウ・クローズおよびロウ・オープンのために余分な管理サイクルが必
要です。
5–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SDRAM コントローラ
データ・ピンとアドレス・ピンの共有
コントローラが他のトライステート・デバイスとピンを共有する場合は、
一般に平均アクセス時間は長くなり、帯域幅は減少します。他のデバイ
スにトライステート・ブリッジへのアクセスが許可されると、SDRAM
はロウ・オープンおよびロウ・クローズのオーバヘッド・サイクルを必
要とします。さらに、SDRAM コントローラは、再びアクセスが許可さ
れる前に、数クロック・サイクル待機する必要があります。
帯域幅を最大にするために、SDRAM コントローラは同一ロウおよびバ
ンク内で連続リード処理またはライト処理が続く限り、自動的にトライ
ステート・ブリッジの制御を維持します。
この動作によって、Avalon トライステート・ブリッジを共有す
る他のデバイスの平均アクセス時間が長くなる可能性があること
に注意してください。
SDRAM コントローラは、連続処理にブレークがある場合、またはリフ
レッシュ処理が要求される場合は、必ずオープン・ロウをクローズしま
す。その結果は、以下のようになります。
■
コントローラはトライステート・ブリッジを共有する他のデバイス
へのアクセスを永久にブロックすることがなくなる。
■ コントローラが SDRAM のロウ・オープン時間制限に違反しないこと
が保証される。
ハードウェア・デザインとターゲット FPGA
ハードウェア・デザインの達成可能な最大クロック周波数は、ターゲッ
ト FPGA によって影響されます。デバイス・ファミリによっては、他の
ファミリよりも fMAX 性能が高いものもあります。さらに、同じデバイ
ス・ファミリでは、スピード・グレードが高速になるほど性能が向上し
ます。SDRAM コントローラ・コアは、Stratix® FPGA など、アルテラ
の高性能デバイス・ファミリにおいて 100 MHz を達成できます。ただ
し、このコアがすべてのアルテラ FPGA ファミリで 100 MHz の性能を
保証しているわけではありません。
Altera Corporation
2004 年 9 月
5–5
Nios II プロセッサ・リファレンス・ハンドブック
デバイスおよびツールのサポート
また、fMAX 性能は、全体的なハードウェア・デザインにも依存します。
SOPC Builder システム・モジュール用マスタ・クロックは、SDRAM コ
ントローラ・コアと SDRAM チップの両方をドライブします。したがっ
て、システム・モジュールの全体的な性能によって、SDRAM コントロー
ラの性能が決まります。例えば、100 MHz の fMAX 性能を達成するには、
システム・モジュールは 100 MHz のクロック・レートに対応するよう
に設計する必要があり、また Quartus II ソフトウェアでのタイミング解
析によって、ハードウェア・デザインが 100 MHz の動作に対応可能で
あることを確認しなければなりません。
デバイスお
よびツール
のサポート
Avalon インタフェース付き SDRAM コントローラは、すべてのアルテ
ラ FPGA ファミリをサポートしています。サポートされる I/O 規格は
FPGA ファミリによって異なり、そのためコアが特定の SDRAM チップ
にインタフェースする機能が影響を受ける場合があります。サポートさ
れる I/O タイプの詳細については、ターゲット FPGA ファミリのハンド
ブックを参照してください。
SOPC Builder
でのコアのイン
スタンス化
設計者は SOPC Builder で SDRAM コントローラ用のコンフィギュレー
ション・ウィザードを使用して、ハードウェア機能とシミュレーション
機能を指定します。SDRAM コントローラのコンフィギュレーション・
ウィザードには、Memory Profile と Timing の 2 つのタブがあります。
このセクションでは、各タブで選択できるオプションについて説明しま
す。
Presets リストには、いくつかの定義済み SDRAM コンフィギュレーショ
ンが提供されます。ターゲット・ボード上の SDRAM サブシステムが、
プリ セッ ト・コンフ ィギ ュレ ーショ ンの いず れかに 適合 する 場合、
SDRAM コントローラ・コアは適切なプリセット値を選択することに
よって、容易にコンフィギュレーションできます。以下のプリセット・
コンフィギュレーションが定義されています。
■
■
■
■
■
■
■
Micron MT8LSDT1664HG モジュール
SDR100 8 M バイト x 16 チップ:4 つ
Micron MT48LC2M32B2-7 チップ:1 つ
Micron MT48LC4M32B2-7 チップ:1 つ
NEC D4564163-A80 チップ(64 M バイト x 16):1 つ
Alliance AS4LC1M16S1-10 チップ:1 つ
Alliance AS4LC2M8S0-10 チップ:1 つ
プリセット・コンフィギュレーションを選択すると、Memory Profile タ
ブと Timing タブの値は、特定のコンフィギュレーションに適合するよ
うに自動的に変化します。タブのコンフィギュレーション設定を変更す
ると、Preset 値は custom に変更されます。
5–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SDRAM コントローラ
Memory Profile タブ
Memory Profile タブでは、アドレスおよびデータ・バス幅、チップ・セ
レクト信号数、バンク数など、SDRAM サブシステムの構造を指定でき
ます。表 5–1 に、Memory Profile タブで指定できる設定を示します。
表 5–1. Memory Profile タブでの設定
設定
Data Width(データ幅)
許容値
8, 16, 32, 32
64
Architecture Chip Selects 1, 2, 4, 8
Settings
(チップ・
(アーキテク セレクト)
チャ設定)
Banks
(バンク)
デフォルト
値
2, 4
Controller shares
dq/dqm/addr I/O pins
(コントローラが
dq/dqm/addr I/O ピンを
共有)
SDRAM サブシステムでの独立したチップ・セレクト数。
複 数 の チ ッ プ・セ レ ク ト を 使 用 す る こ と に よ っ て、
SDRAM コントローラは複数の SDRAM チップを 1 つの
メモリ・サブシステムに結合できます。
4
SDRAM バンク数。この値は、SDRAM に接続する ba バ
ス(バンク・アドレス)幅を決定します。正しい値は、
ターゲット SDRAM のデータ・シートに記載されていま
す。
8 以上で 8
Row より
小さい値
Yes、No
Include a functional
Yes、No
memory
model in the system
testbench
(システム・テストベンチ
への機能メモリ・モデル
の組み込み)
Altera Corporation
2004 年 9 月
SDRAM データ・バス幅。この値は、 dq バス(データ)
およびdqmバス(バイト・イネーブル)の幅を決定します。
1
Address
Row(ロウ) 11,12, 13, 12
14
Width Settings
(アドレス幅
の設定)
Column
(カラム)
説明
ロウ・アドレス・ビット数。この値は、 addr バス幅を
決定します。ロウとカラムの値は、選択した SDRAM の
ジオメトリによって決まります。例えば、4096(212)ロ
ウ× 512 カラムとして構成された SDRAM の場合、ロウ
の値は 12 です。
カラム・アドレス・ビット数。例えば、4096(29)ロウ
× 512 カラムとして構成された SDRAM の場合、カラム
の値は 9 です。
No
No に設定すると、すべてのピンが SDRAM チップ専用に
なります。Yes に設定すると、 addr、 dq、および dqm
ピンは、システムのトライステート・ブリッジと共有で
きます。この場合、SOPC Builder では新しいコンフィ
ギュレーション・タブが表示され、ユーザはこのタブを
使用して SDRAM コントローラ・ピンを特定のトライス
テート・ブリッジに関連付けることができます。
Yes
こ のオ プ ショ ン をオ ン にす る と、SOPC Builder は
SDRAM チップの機能シミュレーション・モデルを作成
します。このデフォルトのメモリ・モデルにより、SDRAM
コントローラを使用するシステムを作成および検証する
プロセスが短縮されます。5–9 ページの「ハードウェア・
シミュレーションの検討事項」を参照してください。
5–7
Nios II プロセッサ・リファレンス・ハンドブック
SOPC Builder でのコアのインスタンス化
Memory Profile タ ブ で 入 力 し た 設 定 値 に 基 づ い て、ウ ィ ザ ー ド は
SDRAM サブシステムの予想メモリ容量を、メガバイト、メガビット、
およびアドレス指定可能ワード数の単位で表示します。これらの予想値
を選択した SDRAM の実際のサイズと比較すれば、設定が正しいかどう
かを確認するのに役立ちます。
Timing タブ
Timing タブでは、使用する SDRAM チップのタイミング仕様を入力で
きます。正しい値は、ターゲット SDRAM のメーカのデータ・シートに
記載されています。表 5–2 に、Timing タブで指定できる設定を示します。
表 5–2. Timing タブでの設定
(1/2)
許容値
デフォルト
値
1, 2, 3
3
リード・コマンドからデータ出力までのレイテンシ(クロッ
ク・サイクル単位)
。
1-8
2
この値は、SDRAM コントローラがリセット後の初期化シーケ
ンスの一部として実行するリフレッシュ・サイクル数を指定し
ます。
Issue one refresh
command every(リ
フレッシュ・コマン
ドを発行する間隔)
–
15.625 µs
この値は、SDRAM コントローラが SDRAM をリフレッシュす
る頻度を指定します。標準的な SDRAM は、64 ms ごとに 4,096
回のリフレッシュ・コマンドを必要とし、この条件は 64 ms /
4,096 = 15.625 µs ごとに 1 回のリフレッシュ・コマンドを発
行すると満たされます。
Delay after power up,
before initialization
(パワー・アップから
初期化までの遅延)
–
100 µs
クロックおよび電源安定化から SDRAM 初期化までの遅延。
Duration of refresh
command (t_rfc)
(リフレッシュ・
コマンドの持続時間
(t_rfc)
)
–
70 ns
自動リフレッシュ周期。
Duration of precharge
command (t_rp)
(プリチャージ・
コマンドの持続時間
(t_rp))
–
20 ns
プリチャージ・コマンドの持続時間。
設定
CAS latency
(CAS レイテンシ)
Initialization refresh
cycles(初期化リフ
レッシュ・サイクル)
説明
5–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SDRAM コントローラ
表 5–2. Timing タブでの設定
(2/2)
許容値
デフォルト
値
ACTIVE to READ or
WRITE delay (t_rcd)
(ACTIVE から READ
または WRITE までの
遅延(t_rcd)
)
–
20 ns
ACTIVE から READ または WRITE までの遅延。
Access time (t_ac)
(アクセス時間(t_ac)
)
–
17 ns
クロック・エッジからのアクセス時間。この値は CAS レイテ
ンシに依存することがあります。
Write recovery time
(t_wr, No auto
precharge)(書き込み
回復時間(t_wr、自動
プリチャージなし))
–
14 ns
明示的なプリチャージ・コマンドが発行された場合の書き込み
回復。この SDRAM コントローラは常に明示的なプリチャー
ジ・コマンドを発行します。
設定
説明
ユーザが厳密なタイミング値を入力した場合でも、各パラメータに対し
て達成される実際のタイミングは、Avalon クロックの整数倍になりま
す。Issue one refresh command every パラメータの場合、実際のタイ
ミングは目標値を超えない最大クロック・サイクル数になります。その
他のパラメータはすべて、実際のタイミングは目標値と同じかそれを上
回る値を提供する最小クロック・チック数になります。
ハードウェア・
シミュレー
ションの検討
事項
このセクションでは、SDRAM を搭載したシステムをシミュレーション
する際の検討事項について説明します。シミュレーションに必要な主要
コンポーネントは、以下の 3 つです。
■
■
SDRAM コントローラのシミュレーション・モデル
メモリ・モデルとも呼ばれる SDRAM チップのシミュレーション・モ
デル
■ メモリ・モデルを SDRAM コントローラ・ピンに配線するシミュレー
ション・テストベンチ
これらのコンポーネントの一部またはすべてが、システム生成時に
SOPC Builder によって生成されます。
SDRAM コントローラ・シミュレーション・モデル
SOPC Builder で生成された SDRAM コントローラ・デザイン・ファイ
ルは、合成とシミュレーションの両方に適しています。一部のシミュレー
ション機能は、HDL コードの特定のセクションを合成ツールに対して隠
蔽する「変換オン / オフ」合成ディレクティブを使用して HDL で実装
されます。
Altera Corporation
2004 年 9 月
5–9
Nios II プロセッサ・リファレンス・ハンドブック
ハードウェア・シミュレーションの検討事項
シミュレーション機能は、主に ModelSim シミュレータを使用して Nios
および Nios II プロセッサ・システムを簡単にシミュレーションするた
めに実装されています。SDRAM コントローラ・シミュレーション・モ
デルに関して、ModelSim 固有の設定はありません。ただし、モデルを
他のシミュレータで動作させるには、多少の変更が必要になることがあ
ります。
シミュレーション・ディレクティブを変更してカスタム・シ
ミュレーション・フローを作成する場合は、SOPC Builder が
システム生成時に既存のファイルを上書きすることに注意が必
要です。変更内容が上書きされないように注意してください。
Nios II エンベデッド・プロセッサ・システムにおける SDRAM コント
ローラのシミュレーションのデモについては、
「AN 351: Simulating Nios II
Processor Designs」を参照してください。
SDRAM メモリ・モデル
SDRAM チップのメモリ・モデルのシミュレーションには、以下で説明
する 2 つのオプションがあります。
汎用メモリ・モデルの使用
シ ス テ ム 生 成 時 に Include a functional memory model the system
testbench オプションを有効にすると、SOPC Builder は SDRAM メモリ
の HDL シミュレーション・モデルを生成します。自動生成されたシス
テム・テストベンチでは、SOPC Builder はこのメモリ・モデルを自動的
に SDRAM コントローラ・ピンに配線します。
自動メモリ・モデルとテストベンチにより、SDRAM コントローラを使
用するシステムを作成および検証するプロセスが短縮されます。ただし、
このメモリ・モデルは汎用機能モデルであり、実際の SDRAM チップの
真のタイミングや機能は反映していません。汎用モデルは常に、単一の
モノリシック・メモリ・ブロックとして構成されます。例えば、2 つの
SDRAM チップを結合するシステムでも、汎用メモリ・モデルは単一の
エンティティとして実装されます。
SDRAM メーカのメモリ・モデルの使用
Include a functional memory model the system testbench オプションが
有効にされていない場合は、設計者が SDRAM メーカからメモリ・モデ
ルを入手し、システム・テストベンチの SDRAM コントローラ・ピンに
手動で配線する必要があります。
5–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SDRAM コントローラ
コンフィギュ
レーションの例
以下の例では、SDRAM コントローラの出力を 1 つまたは複数の SDRAM
チップに接続する方法を示します。ctl のラベルが付いたバスは、cas_n、
ras_n、cke および we_n など、残りの信号を総合したものです。
図 5-2 に、32 ビット・データを持つ単一の 128M ビット SDRAM チップ
を示します。アドレス、データ、およびコントロール信号は、コントロー
ラからチップに直接配線されます。その結果、128M ビット(16M バイ
ト)のメモリ空間が実現します。
図 5-2. 32 ビット・データを持つ単一の 128M ビット SDRAM チップ
アルテラFPGA
SDRAM
コントローラ
addr
ctl
cs_n
オンチップ・
ロジックへの
Avalon
インタフェース
Altera Corporation
2004 年 9 月
データ 32
128Mビット
16Mバイト
32データ幅デバイス
5–11
Nios II プロセッサ・リファレンス・ハンドブック
コンフィギュレーションの例
図 5-3 は、それぞれが 16 ビット・データを持つ 2 つの 64M ビット
SDRAM チップを示します。アドレスおよびコントロール信号は、2 つ
のチップに並列に配線されます。チップ・セレクト(cs_n)が 2 つの
チップで共有されることに注意してください。各チップは 32 ビット・
データ・バスの半分を提供します。その結果、128M ビット(16M バイ
ト)の 32 ビット・データ論理メモリが実現します。
図 5-3. それぞれが16ビット・データを持つ2つの64MビットSDRAMチップ
アルテラFPGA
addr
SDRAM
コントローラ
ctl
cs_n
64Mビット
8Mバイト
16データ幅デバイス
16
64Mビット
8Mバイト
16データ幅デバイス
16
オンチップ・
ロジックへの
Avalon
インタフェース
data
5–12
Nios II プロセッサ・リファレンス・ハンドブック
32
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SDRAM コントローラ
図 5-4 は、それぞれが 32 ビット・データを持つ 2 つの 128M ビット
SDRAM チップを示します。コントロール、アドレスおよびデータ信号
は、2 つのチップに並列に配線されます。チップ・セレクト・バス
(cs_n[1:0])は、選択するチップを決定します。その結果、論理的に
256M ビットの 32 ビット幅メモリが実現します。
図 5-4. それぞれが 32 ビット・データを持つ 2 つの 128M ビット SDRAM
チップ
アルテラFPGA
SDRAM
コントローラ
addr
ctl
cs_n [0]
128Mビット
16Mバイト
32データ幅デバイス
32
オンチップ・
ロジックへの
Avalon
インタフェース
128Mビット
16Mバイト
32データ幅デバイス
32
cs_n [1]
データ
ソフトウェア・
プログラミン
グ・モデル
Altera Corporation
2004 年 9 月
32
SDRAM コントローラは、Avalon インタフェースを通してアクセスされ
ると単独のメモリのように動作します。ソフトウェアでコンフィギュ
レーション可能な設定はなく、メモリマップド・レジスタもありません。
プロセッサが SDRAM コントローラにアクセスするのにソフトウェア・
ドライバ・ルーチンは不要です。
5–13
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
5–14
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
6. Avalon インタフェース対応
DMA コントローラ
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51006-1.2
コアの概要
Avalon™ インタフェース付きダイレクト・メモリ・アクセス(DMA)コ
ントローラ(「DMA コントローラ」)は、バルク・データ転送を実行し、
ソース・アドレス範囲からデータを読み出して、異なるアドレス範囲に
データを書き込みます。CPU などの Avalon マスタ・ペリフェラルは、
メモリ転送タスクを DMA コントローラにまかせることができます。
DMA コントローラがメモリ転送を実行する間に、マスタは並行して他
のタスクを自由に実行できます。
DMA コントローラは可能な限り効率的にデータを転送し、ソースまた
はディスティネーションで可能な最大速度でデータの読み出しと書き込
みを実行します。DMA コントローラはストリーミング Avalon 転送を
実行できるため、低速ストリーミング・ペリフェラル(例えば、Universal
Asynchronous Receiver/Transmitter [UART])との間で、ペリフェラル
が許容する最大速度での自動データ転送が可能になります。
DMA コントローラは、SOPC Builder に対応しており、SOPC Builder で
生成されたシステムに容易に統合することができます。Nios® IIプロセッ
サの場合、デバイス・ドライバは HAL システム・ライブラリで提供さ
れます。HAL サポートの詳細については、6–6 ページの「ソフトウェ
ア・プログラミング・モデル」を参照してください。
機能の説明
DMA コントローラは、ソース・アドレス空間からデスティネーション・
アドレス空間へ、ダイレクト・メモリ・アクセスによるデータ転送を実
行するために使用されます。ソースとディスティネーションは、Avalon
スレーブ・ペリフェラル(つまり、定数アドレス)かメモリ内のアドレ
ス範囲のいずれかを指定できます。DMA コントローラは、ストリーミ
ング可能なペリフェラルと連携して使用でき、これによって固定長また
は可変長のデータ転送が可能になります。DMA トランザクション完了
時に、DMA コントローラは割り込み要求(IRQ)を通知することがで
きます。本書では、トランザクションを DMA コントローラ・コアによっ
て開始される 1 つまたは複数の Avalon 転送のシーケンスとして定義し
ています。
図 6-1 に示すように、DMA コントローラは、マスタ・リード・ポート
とマスタ・ライト・ポートの 2 つの Avalon マスタ・ポートと、DMA を
制御するための 1 つの Avalon スレーブ・ポートを備えています。
Altera Corporation
2004 年 12 月
6–1
機能の説明
図 6-1. X. DMA コントローラ・ブロック図
Addr,
data,
control
Avalon
スレーブ・
ポート
レジスタ・ファイル
status
readaddress
コント
ロール・
IRQ ポート
リード・
マスタ・
ポート
writeaddress
length
control
ライト・
マスタ・
ポート
個別の
Avalon
マスタ・
ポート
標準的な DMA トランザクションは、以下のように処理されます。
1. CPU がコントロール・ポートに書き込んで、DMA コントローラを
トランザクションのために準備します。
2. CPU が DMA コントローラをイネーブルします。次に、DMA コン
トローラは CPU からそれ以上の介入を受けずに、データ転送を開始
します。DMA のマスタ・リード・ポートは、リード・アドレスから
データを読み出します。このアドレスはメモリまたはペリフェラル
のアドレスです。マスタ・ライト・ポートはディスティネーション・
アドレスにデータを書き込みます。また、このアドレスにもメモリ
またはペリフェラルのアドレスを指定できます。浅い FIFO によっ
て、リード・ポートとライト・ポートの間でデータがバッファリン
グされます。
3. DMA トランザクションは、指定されたバイト数が転送される(固定
長トランザクションの場合)か、または送信側あるいは受信側が EOP
信号をアサートする(可変長トランザクションの場合)と終了しま
す。DMA コントローラは、トランザクションの終了時に割り込み要
求(IRQ) を生成します(CPU によって設定されている場合)。
4. トランザクション中またはトランザクション後に、CPU は DMA コ
ントローラのステータス・レジスタを調べて、トランザクションが
実行中かまたは終了した(およびその状況)かを判断することがで
きます。
6–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 DMA コントローラ
DMA トランザクションの設定
Avalon マスタ・ペリフェラルは、コントロール・ポートを介してレジ
スタに書き込むことにより、DMA トランザクションを設定し、開始し
ます。マスタ・ペリフェラルは以下のオプションをコンフィギュレーショ
ンします。
■
■
■
■
■
■
リード(ソース)アドレスの位置
ライト(デスティネーション)アドレスの位置
それぞれの転送のサイズ:バイト(8 ビット)、ハーフワード(16 ビッ
ト)、ワード(32 ビット)、ダブルワード(64 ビット)、またはクワッ
ドワード(128 ビット)
トランザクション終了時の割り込みをイネーブルする
ソースまたはデスティネーションが EOP 信号によって DMA トランザ
クションを終了するのをイネーブルする
ソースとデスティネーションがメモリまたはペリフェラルのいずれ
であるかを指定する
次に、マスタ・ペリフェラルは control レジスタのビットを設定して、
DMA トランザクションを開始します。
マスタ・リード・ポートとマスタ・ライト・ポート
DMA コントローラは、マスタ・リード・ポートを介してソース・アド
レスからデータを読み出し、次にマスタ・ライト・ポートを介してデス
ティネーション・アドレスに書き込みます。リード・ポートとライト・
ポートの間に浅い FIFO バッファがあります。デフォルトの深さは 2 で
あり、この深さでは書き込み動作は、マスタ・リード・ポートの状況で
はなく FIFO のデータ可用性に依存します。
リード・マスタ・ポートとライト・マスタ・ポートはどちらも Avalon
ストリーミング転送を実行でき、それによってスレーブ・ペリフェラル
はデータのフローを制御し、DMA トランザクションを終了することが
可能です。
Avalon データ転送のストリーム化と Avalon ペリフェラルのストリーム
化の詳細については、
「Avalon Interface Specification Reference Mannual」
を参照してください。
Altera Corporation
2004 年 12 月
6–3
Nios II プロセッサ・リファレンス・ハンドブック
SOPC Builder でのコアのインスタンス化
アドレスのインクリメント
メモリ・アクセス時に、リード(またはライト)
・アドレスはアクセス後
に、データ幅に応じて 1、2、4、8、または 16 インクリメントされます。
他方、一般的なペリフェラル・デバイス(UART など)では、レジスタ
の位置は固定されています。この場合、リード / ライト・アドレスは、
DMA トランザクションの間、一定のまま維持されます。
アドレスをインクリメントする規則は、以下の優先順位に従います。
■
control レジスタの RCON(または WCON)ビットが設定されている
場合、リード(またはライト)・インクリメント値は 0 です。
■ その他の場合、表 6–1 に示すように、リードおよびライトのインクリ
メント値は、control レジスタで指定された転送サイズに従って設定
されます。
表 6–1. アドレスのインクリメント値
SOPC Builder
でのコアのイン
スタンス化
転送幅
インクリメント
バイト
1
ハーフワード
2
ワード
4
ダブルワード
8
クワッドワード
16
設計者は DMA コントローラの SOPC Builder コンフィギュレーション・
ウィザードを使用して、ターゲット・システムのハードウェア・オプショ
ンを指定します。SOPC Builder で DMA コントローラをインスタンス化
すると、1 つのスレーブ・ポートと 2 つのマスタ・ポートが作成されま
す。設計者は、リードおよびライト・マスタ・ポートでアクセス可能な
スレーブ・ペリフェラルを指定しなければなりません。同様に、DMA
コントロール・ポートへのアクセスと DMA トランザクションの開始が
可能なその他のペリフェラルも指定する必要があります。DMA コント
ローラは、システム・モジュールのトップ・レベルには信号をエクスポー
トしません。
コンフィギュレーション可能なハードウェア機能について、以下で説明
します。
6–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 DMA コントローラ
DMA パラメータ(基本)
以下のセクションでは、基本パラメータについて説明します。
Width of the DMA Length Register
(DMAレングス・レジスタの幅)
このオプションは、DMA トランザクション・レングス・レジスタの最
小幅を設定します。許容範囲は 1 から 32 です。length レジスタは、1
回の DMA トランザクションで可能な最大転送数を決定します。
デフォルトでは、length レジスタには、リード・ポートまたはライト・
ポートがマスタとなるスレーブ・ペリフェラルのすべてに対応できる幅
があります。DMA マスタ・ポート(リードまたはライト)が UART な
どのデータ・ペリフェラルのみに対するマスタの場合は、length レジス
タの無効化が必要になることがあります。この場合、各スレーブのアド
レス範囲は狭くなりますが、1 回の DMA トランザクションではより多
くの転送が要求されます。
Construct FIFO from Registers vs. Construct FIFO from Memory
Blocks(レジスタからの FIFO の構築とメモリ・ブロックからの
FIFO の構築)
このオプションは、マスタ・リード・ポートとマスタ・ライト・ポート
の間での FIFO バッファの実装を制御します。Construct FIFO from
Registers を選択した場合(デフォルト)
、FIFO はストレージ・ビットご
とに 1 つのレジスタを使用して実装されます。DMA コントローラのデー
タ幅が広い場合は、これによってロジック利用率が大きく影響を受けま
す(6–5 ページの「高度なオプション」を参照)。Construct FIFO from
Memory Blocks を選択した場合、FIFO は FPGA 内の利用可能なエンベ
デッド・メモリ・ブロックを使用して実装されます。
高度なオプション
このセクションでは、高度なオプションについて説明します。
Altera Corporation
2004 年 12 月
6–5
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
Allowed Transactions(可能なトランザクション)
設計者は DMA コントローラ・ハードウェアでサポートされる転送デー
タ幅を選択できます。以下のデータ幅オプションをイネーブルまたは
ディセーブルできます。
■
バイト
ハーフワード(2 バイト)
■ ワード(4 バイト)
■ ダブルワード(8 バイト)
■ クワッドワード(16 バイト)
■
不要な転送幅をディセーブルすると、DMA コントローラ・コアで消費
されるオンチップ・ロジック・リソース量が削減されます。例えば、シ
ステムに 16 ビット・メモリと 32 ビット・メモリの両方が搭載されてい
ても、DMA コントローラが 16 ビット・メモリにのみデータを転送する
場合、32 ビット転送をディセーブルするとロジック・リソースを節約で
きます。
ソフトウェア・
プログラミン
グ・モデル
このセクションでは、ハードウェアにアクセスするためのレジスタ・マッ
プやソフトウェア宣言など、DMA コントローラのプログラミング・モ
デルについて説明します。Nios II プロセッサ・ユーザ向けに、アルテラ
は DMA デバイス用の HAL API を使用して DMA コントローラ・コア
へのアクセスを可能にする HAL システム・ライブラリ・ドライバを提
供しています。
HAL システム・ライブラリ・サポート
アルテラが提供するドライバは、Nios II システム用の HAL システム・
ライブラリに統合される HAL DMA デバイス・ドライバを実装します。
HAL ユーザは、レジスタに直接アクセスしないで、使い慣れた HAL API
を介して DMA コントローラにアクセスするとよいでしょう。
ユーザのプログラムで HAL デバイス・ドライバを使用して
DMA コントローラにアクセスしている場合、デバイス・レジ
スタに直接アクセスすると、ドライバの正しい動作が妨害され
ます。
HAL DMA ドライバは、ドライバは自身を受信チャネル(alt_dma_rxchan)
と送信チャネル(alt_dma_txchan)の両方として登録するという、DMA プ
ロセスの両端の機能を提供します。Nios II ソフトウェア開発ハンドブッ
クでは、HAL システム・ライブラリと DMA デバイスの使用方法について
詳細に説明しています。
6–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 DMA コントローラ
ioctl() 操作
ioctl() 操作要求は受信チャネルと送信チャネルの両方に対して定義
されており、DMA コントローラのハードウェア依存部分の制御を可能
にします。レシーバ・ドライバとトランスミッタ・ドライバに対して、
alt_dma_rxchan_ioctl() と alt_dma_txchan_ioctl() の 2 つの
ioctl() 関数が定義されています。表 6–2 に、使用可能な操作を示しま
す。これらは送信チャネルと受信チャネルの両方に有効です。
表 6–2. alt_dma_rxchan_ioctl() と alt_dma_txchan_ioctl() の操作
要求
意味
ALT_DMA_SET_MODE_8
8 ビット単位でデータを送信します。“arg” の値は無視されます。
ALT_DMA_SET_MODE_16
16 ビット単位でデータを送信します。“arg” の値は無視されます。
ALT_DMA_SET_MODE_32
32 ビット単位でデータを送信します。“arg” の値は無視されます。
ALT_DMA_SET_MODE_64
64 ビット単位でデータを送信します。“arg” の値は無視されます。
ALT_DMA_SET_MODE_128
128 ビット単位でデータを送信します。“arg” の値は無視されます。
ALT_DMA_RX_ONLY_ON (1)
DMA レシーバをストリーミング・モードに設定します。この場合、デー
タは 1 つの位置から連続的に読み出されます。“arg" パラメータは、読み
出し元のアドレスを指定します。
ALT_DMA_RX_ONLY_OFF (1)
受信チャネルのストリーミング・モードをオフにします。“arg” の値は無視
されます。
ALT_DMA_TX_ONLY_ON (1)
DMA トランスミッタをストリーミング・モードに設定します。この場合、
データは 1 つの位置に連続的に書き込まれます。“arg” パラメータは書き
込み先のアドレスを指定します。
ALT_DMA_TX_ONLY_OFF (1)
送信チャネルのストリーミング・モードをオフにします。“arg” の値は無視
されます。
表 6–2 の注:
(1) Nios II 開発キットのバージョン 1.1 では、これらのマクロ名は変更されています。
古い名前(ALT_DMA_TX_STREAM_ON、 ALT_DMA_TX_STREAM_OFF、 ALT_DMA_RX_STREAM_ON、
および ALT_DMA_RX_STREAM_OFF)は現在でも有効ですが、新しいデザインでは新しい名前を使用して
ください。
制限
現在、アルテラが提供するドライバは、64 ビットおよび 128 ビットの
DMA トランザクションをサポートしていません。
この関数はスレッド・セーフではありません。複数のスレッドから DMA
コントローラにアクセスする場合は、セマフォまたは相互排除を使用し
て、どの時点でもこの関数内で 1 つのスレッドしか実行しないようにす
る必要があります。
Altera Corporation
2004 年 12 月
6–7
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
ソフトウェア・ファイル
DMA コントローラは動作時に、以下のソフトウェア・ファイルを使用
します。これらのファイルはハードウェアへの低水準インタフェースを
定義しています。アプリケーション開発者がこれらのファイルを変更し
てはなりません。
■
altera_avalon_dma_regs.h − このファイルはコアのレジスタ・マッ
プを定義し、低水準ハードウェアにアクセスするための記号定数を
提供します。このファイル内の記号は、デバイス・ドライバ関数に
よってのみ使用されます。
■ altera_avalon_dma.h、
altera_avalon_dma.c − これらのファイルは、
HAL システム・ライブラリ用の DMA コントローラのデバイス・ド
ライバを実装しています。
レジスタ・マップ
HAL API を使用するプログラマが、レジスタを介して DMA コントロー
ラ・ハードウェアに直接アクセスすることはありません。一般に、レジ
スタ・マップはデバイス・ドライバを記述するプログラマに対してのみ
有用です。
アルテラが提供する HAL デバイス・ドライバは、デバイス・
レジスタに直接アクセスします。デバイス・ドライバを記述し
ている場合に、同じデバイスに対して HAL ドライバがアクティ
ブになると、ユーザ・ドライバが競合し動作できなくなります。
表 6–3 に、DMA コントローラのレジスタ・マップを示します。デバイ
ス・ドライバは、5 つのメモリ・マップド形式の 32 ビット・レジスタを
介して、ハードウェアに対する制御と通信を行います。
表 6–3. DMA コントローラ・レジスタ・マップ ( 1 / 2 )
オ
読み
フ
出し /
セ レジスタ名
書き
ッ
込み
ト
0
status (1)
RW
1
readaddr
ess
RW
31. . .11
10
6–8
Nios II プロセッサ・リファレンス・ハンドブック
9
(2)
8
7
6
5
4
3
LEN WE
OP
2
1
0
RE
OP
BU
SY
DO
NE
リード・マスタ開始アドレス
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 DMA コントローラ
表 6–3. DMA コントローラ・レジスタ・マップ ( 2 / 2 )
オ
読み
フ
出し /
セ レジスタ名
書き
ッ
込み
ト
31. . .11
10
9
8
7
6
5
4
3
2
writeadd
ress
RW
ライト・マスタ開始アドレス
3
length
RW
DMA トランザクション長(バイト単位)
4
-
予約 (3)
5
-
予約 (3)
6
RW
control
7
(4)
(2)
(5)
WC
ON
-
RC
ON
LEE WE
N
EN
RE
EN
I_E
N
GO
2
WO
RD
1
0
HW BYT
E
予約 (3)
注:
(1)
(2)
(3)
(4)
(5)
status レジスタにゼロを書き込むと、LEN、WEOP、REOP、および DONE ビットがクリアされます。
これらのビットは予約されています。読み出した場合の値は不定です。ゼロを書き込みます。
このレジスタは予約されています。読み出した場合の値は不定です。書き込んだ結果は不定です。
QUADWORD
DOUBLEWORD
status レジスタ
status レジスタは、DMA コントローラ内部の状態を示す個別ビット
で構成されています。status レジスタは、いつでも読み出すことがで
きます。status レジスタを読み出しても、その値は変化しません。
status レジスタ・ビットを表 6–4 に示します。
表 6–4. status レジスタ・ビット
ビット番号 ビット名
0
(1/2)
読み出し(R)/
書き込み(W)/
クリア(C)
説明
DONE
R/C
DMA トランザクションが完了しました。DONE ビットは、
EOP条件が検出されるかまたは指定されたトランザクション
長が完了すると、1 に設定されます。DONE ビットをクリア
するには、status レジスタにゼロを書き込みます。
1
BUSY
R
DMA トランザクションの実行中は、BUSY ビットは 1 です。
2
REOP
R
REOP ビットは、読み出し側で EOP イベントによってトラン
ザクションが完了すると 1 になります。
Altera Corporation
2004 年 12 月
6–9
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 6–4. status レジスタ・ビット
ビット番号 ビット名
(2/2)
読み出し(R)/
書き込み(W)/
クリア(C)
説明
3
WEOP
R
WEOP ビットは、書き込み側で EOP イベントによってトラ
ンザクションが完了すると 1 になります。
4
LEN
R
LEN ビットは、length レジスタがデクリメントされてゼロに
なると 1 に設定されます。
readaddress レジスタ
readaddress レジスタは、DMA トランザクションで最初に読み出さ
れる位置を指定します。readaddress レジスタの幅は、システム生成
時に決定されます。リード・ポートがマスタとなるすべてのスレーブ・
ポートの全範囲をアドレス指定できる幅になります。
writeaddress レジスタ
writeaddress レジスタは、DMA トランザクションで最初に書き込ま
れる位置を指定します。writeaddress レジスタの幅は、システム生成
時に決定されます。ライト・ポートがマスタとなるすべてのスレーブ・
ポートの全範囲をアドレス指定できる幅になります。
length レジスタ
length レジスタは、リード・ポートからライト・ポートに転送される
バイト数を指定します。length レジスタは、バイト単位で指定されま
す。例えば、この値はワード転送の場合は 4 の倍数、ハーフワード転送
の場合は 2 の倍数でなければなりません。
length レジスタは、ライト・マスタ・ポートによってデータ値が書き
込まれるたびにデクリメントされます。length が 0 になると、LEN ビッ
トが設定されます。length レジスタは 0 より小さな値にデクリメント
されることはありません。
length レジスタの幅は、システム生成時に決定されます。少なくとも
リードまたはライト・マスタ・ポートをマスタとするどのスレーブ・ポー
トにも対応できる幅が設定されます。この幅は必要に応じて広くするこ
とも可能です。
6–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 DMA コントローラ
control レジスタ
control レジスタは、DMA の内部動作を制御する個別ビットで構成され
ます。control レジスタの値はいつもでも読み出すことができます。
control レジスタのビットは、DMA トランザクションのどの条件(条件
がある場合)でトランザクションおよび割り込み要求が終了するかを決
定します。
control レジスタ・ビットを表 6–5 に示します。
表 6–5. control レジスタ・ビット
(1/2)
ビット番号
ビット名
読み出し(R)/
書き込み(W)/
クリア(C)
0
BYTE
RW
バイト転送を指定します。
1
HW
RW
ハーフワード(16 ビット)転送を指定します。
2
WORD
RW
ワード(32 ビット)転送を指定します。
3
GO
RW
DMA トランザクションをイネーブルします。GO ビッ
トが 0 に設定されている場合、DMA は転送を実行しま
せん。GO ビットが 1 に設定され、length レジスタがゼ
ロ以外に設定されている場合は、転送を実行します。
4
I_EN
RW
割り込み要求(IRQ)をイネーブルします。I_EN ビッ
トが 1 のとき、DMA コントローラは status レジスタの
DONE ビットが 1 に設定されると IRQ を生成します。
I_EN ビットが 0 のとき、IRQ はディセーブルされます。
5
REEN
RW
読み出し側の EOP でトランザクションを終了します。
REEN ビットが 1 に設定されているとき、読み出し側の
ストリーミング・スレーブ・ポートは EOP 信号をア
サートして、DMA トランザクションを終了することが
できます。
6
WEEN
RW
書き込み側の EOP でトランザクションを終了します。
WEEN ビットが 1 に設定されているとき、書き込み側
のストリーミング・スレーブ・ポートは EOP 信号をア
サートして、DMA トランザクションを終了することが
できます。
Altera Corporation
2004 年 12 月
説明
6–11
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 6–5. control レジスタ・ビット ( 2 / 2 )
ビット番号
ビット名
読み出し(R)/
書き込み(W)/
クリア(C)
7
LEEN
RW
説明
length レジスタがゼロに達すると、トランザクショ
ンを終了します。LEEN ビットが 1 のとき、 length
レジスタが 0 に達すると、DMA トランザクションが終
了します。このビットが 0 のときには、 length が 0
に達しても、トランザクションは終了しません。この場
合、DMA トランザクションは、リードまたはライト・
マスタ・ポートのいずれかの EOP 信号によって終了さ
せる必要があります。
8
RCON
RW
定数アドレスから読み出します。RCON が 0 のとき、
リード・アドレスはデータ転送が終了するたびにインク
リメントされます。これは DMA コントローラが特定の
メモリ・アドレス範囲を読み出すためのメカニズムで
す。RCON が 1 のときには、リード・アドレスはイン
クリメントされません。これは DMA コントローラが、
定数メモリ・アドレスにあるペリフェラルから読み出す
ためのメカニズムです。詳細については、6–4 ページの
「アドレスのインクリメント」を参照してください。
9
WCON
RW
定数アドレスに書き込みます。RCON ビットと同様に、
WCON が 0 のときライト・アドレスはデータ転送が終了
するたびにインクリメントされ、WCON が 1 のときには
インクリメントされません。詳細については、6–4 ペー
ジの「アドレスのインクリメント」を参照してください。
10
DOUBLEWORD
RW
ダブルワード転送を指定します。
11
QUADWORD
RW
クワッドワード転送を指定します。
DMA トランザクションのデータ幅は、
BYTE、
HW、
WORD、
DOUBLEWORD、
および QUADWORD ビットで指定されます。
これらのビットは一度に 1 ビッ
トしか設定できません。複数のビットが設定された場合、DMA コントロー
ラの動作は不定です。転送の幅は、読み出しおよび書き込みが行われる 2 つ
のスレーブのうち、幅の狭いスレーブによって決まります。例えば、16 ビッ
トのフラッシュ・メモリから読み出し、32 ビットのオンチップ・メモリに書
き込む DMA トランザクションでは、ハーフワード転送が必要です。この場
合、
HW は 1 に設定し、
BYTE、
WORD、
DOUBLEWORD、
および QUADWORD
は 0 に設定しなければなりません。
6–12
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 DMA コントローラ
特 定 幅 の ト ラ ン ザ ク シ ョ ン を 適 切 に 実 行 す る に は、Allowed
Transaction ハードウェア・オプションを使用して、その幅をハードウェ
アでイネーブルする必要があります。例えば、クワッドワード転送がハー
ドウェアでディセーブルされているときに、DMA トランザクション中
に QUADWORD ビットが設定された場合、DMA コントローラの動作
は不定です。
割り込み動作
DMA コントローラには 1 つの IRQ 出力があり、この出力は status レ
ジスタの DONE ビットが 1、control レジスタの I_EN ビットが 1 になる
とアサートされます。
status レジスタに書き込むと、DONE ビットがクリアされ、IRQ が認
識されます。マスタ・ペリフェラルは、status レジスタを読み出すこ
とができ、また LEN、REOP、および WEOP ビットをチェックして DMA
トランザクションがどのように終了したかを判断できます。
Altera Corporation
2004 年 12 月
6–13
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
6–14
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
7. Avalon インタフェース対応
PIO コア
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51007-1.1
コアの概要
パラレル入力 / 出力(PIO)コアは、Avalon™ スレーブ・ポートと汎用
I/O ポートの間にメモリ・マップド・インタフェースを提供します。I/O
ポートは、オンチップ・ユーザ・ロジックまたは FPGA の外部デバイス
に接続される I/O ピンに接続されます。
PIO コアにより、
「ビット・バンギング」手法で十分に対応できる状況に
おいて、ユーザ・ロジックまたは外部デバイスに容易に I/O アクセスが
可能です。以下の使用例があります。
■
LED の制御
スイッチからのデータ取り込み
■ ディスプレイ・デバイスの制御
■ 特定用途向け標準製品(ASSP)など、オフチップ・デバイスのコン
フィギュレーションと通信
■
PIO コアの割り込み要求(IRQ)出力は、入力信号に基づいて割り込み
をアサートできます。PIO コアは、SOPC Builder に対応しており SOPC
Builder で生成されたシステムに容易に統合できます。
機能の説明
各 PIO コアは最大 32 の I/O ポートを提供できます。マイクロプロセッ
サなどのインテリジェント・ホストは、レジスタ・マップド Avalon イ
ンタフェースに読み出しと書き込みを実行することによって、PIO ポー
トを制御します。ホストの制御のもとで、PIO コアは入力のデータをキャ
プチャし、データを出力にドライブします。PIO ポートが直接 I/O ピン
に接続されている場合、ホストは PIO コアの control レジスタに書き込
みを行って、ピンをトライステートにすることができます。図 7-1 はプ
ロセッサ・ベース・システムの例です。このシステムでは、複数の PIO
コアを使用して LED を点滅させ、オンチップ・リセット要求コントロー
ル・ロジックからエッジをキャプチャし、オフチップ LCD ディスプレ
イを制御します。
Altera Corporation
2004 年 9 月
7–1
機能の説明
図 7-1. 複数の PIO コアを使用するシステムの例
Altera FPGA
4
Avalonスイッチ・ファブリック
PIOコア
(出力のみ)
CPU
プログラムと
データ・メモリ
PIO
エッジ・
コア
(入力 キャプチャ
IRQ
のみ )
PIOコア
(双方向 )
LEDs
リセット
要求
ロジック
11
LCD
ディスプレイ
SOPC Builder で生成したシステムに PIO コアを統合すると、PIO コア
には以下の 2 つのユーザ・アクセス可能な機能が与えられます。
■
data、direction、interruptmask、および edgecapture の 4 つ
のレジスタを備えたメモリ・マップド・レジスタ空間。
■ 1 から 32 の I/O ポート。
I/O ポートは、FPGA 内部のロジックまたはオフチップ・デバイスに接
続されるデバイス・ピンに接続できます。レジスタは、Avalon インタ
フェースを介して I/O ポートへのインタフェースを提供します。レジス
タの説明については、7–7 ページの表 7–2 を参照してください。特定の
ハードウェア・コンフィギュレーションでは必要のないレジスタもあり
ます。しかし、不必要なレジスタは存在しません。定義されていないレ
ジスタを読み出すと不定な値が返されます。また、定義されていないレ
ジスタに書き込んでも影響はありません。
7–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 PIO コア
データ入力および出力
PIO コア I/O ポートは、オンチップ・ロジックまたはオフチップ・ロ
ジックのいずれかに接続できます。コアは、入力のみ、出力のみ、また
は双方向に設定できます。コアを使用してデバイス上の双方向 I/O ピン
を制御する場合、コアはトライ・ステート・コントロール付き双方向モー
ドを提供します。
ハードウェア・ロジックは、データ・レジスタの読み出しおよび書き込
み用に分かれています。データ・レジスタを読み出すと、入力ポート上
の値(存在する場合)が返されます。データを書き込むと、出力ポート
にドライブされます。これらのポートは独立しているため、データ・レ
ジスタを読み出しても前に書き込まれているデータは読み込めません。
エッジ・キャプチャ
PIO コアは、その入力ポート上のエッジをキャプチャするように設定で
きます。Low から High への遷移、High から Low への遷移、またはそ
の両方をキャプチャできます。入力がエッジを検出すると、その状態が
edgecapture レジスタに示されます。検出するエッジの種類はシステ
ム生成時に指定され、レジスタを介してエッジの種類を変更することは
できません。
IRQ の生成
PIO コアは、特定の入力条件で IRQ を生成するように設定できます。
IRQ
条件は以下のいずれかです。
■
Level-sensitive(レベルセンシティブ)− PIO コア・ハードウェアは
High レベルを検出できます。コアの外部に NOT ゲートを挿入すれ
ば、負の感度を実現できます。
■ Edge-sensitive(エッジセンシティブ)− コアのエッジ・キャプチャ
の設定で、IRQ を発生したエッジのタイプが特定されます。
割り込みは、各入力ポートに対して個別にマスクできます。割り込みマ
スクは、割り込みを生成できる入力ポートを決定します。
Altera Corporation
2004 年 9 月
7–3
Nios II プロセッサ・リファレンス・ハンドブック
設定の例
設定の例
図 7-2 は、IRQ のサポートに加えて、入力ポートおよび出力ポート付き
で設定された PIO コアのブロック図を示します。
図 7-2. 入力ポート、出力ポート、および IRQ サポートを備えた PIO コア
オンチップ・
ロジックへの
Avalon
インタフェース
address
in
data
32
data
out
control
interruptmask
IRQ
edgecapture
図 7-3 は、IRQ サポートのない、双方向モードに設定された PIO コアの
ブロック図を示します。
図 7-3. 双方向ポートを備えた PIO コア
オンチップ・
ロジックへの
Avalon
インタフェース
address
data
control
in
data
32
out
direction
Avalon インタフェース
PIO コアの Avalon インタフェースは、1 つの Avalon スレーブ・ポート
で構成されています。スレーブ・ポートは、基本的な Avalon リード転
送とライト転送を実行できます。Avalon スレーブ・ポートは IRQ 出力
を提供するため、コアは割り込みをアサートできます。
7–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 PIO コア
SOPC Builder
での PIO コア
のインスタン
ス化
PIO のハードウェアの各設定は、PIO コアの SOPC Builder コンフィギュ
レーション・ウィザードで行います。以下のセクションでは、選択可能
なオプションについて説明します。
コンフィギュレーション・ウィザードには、Basic Settings と Input
Options の 2 つのタブがあります。
Basic Settings タブ
Basic Settings タブでは、I/O ポートの幅と方向を指定できます。
■
Width 設定には、1 から 32 までの任意の整数を指定できます。値を n
にすると、I/O ポートは n ビット幅になります。
■
Direction 設定には、表 7–1 に示す 4 つのオプションがあります。
表 7–1. Direction 設定
設定
説明
Bidirectional (tristate) ports
このモードでは、各 PIO ビットはデータのドライブとキャプチャに 1 つのデバ
イス・ピンを共有します。各ピンの方向は個別に選択可能です。FPGA I/O ピン
をトライステートにするには、方向を入力に設定します。
Input ports only
このモードでは、PIO ポートは入力のみキャプチャできます。
Output ports only
このモードでは、PIO ポートは出力のみドライブできます。
Both input and output ports
このモードでは、入力ポートおよび出力ポートのバスは、独立した n ビット幅
の単一方向バスです。
Input Options タブ
Input Options タブでは、エッジ・キャプチャと IRQ 生成の設定を指定
することができます。Basic Settings タブで Output ports only が選択さ
れている場合、Input Options タブは使用できません。
エッジ・キャプチャ・レジスタ
Synchronously capture オプションがオンになっている場合、PIO コア
にはエッジ・キャプチャ・レジスタ edgecapture が含まれます。さら
にユーザは検出するエッジのタイプを指定する必要があります。
■
Rising Edge(立ち上がりエッジ)
(立ち上がりエッジ)
Falling Edge(立ち下りエッジ)
(立ち下りエッジ)
■ Either Edge(いずれかのエッジ)
(いずれかのエッジ)
■
Altera Corporation
2004 年 9 月
7–5
Nios II プロセッサ・リファレンス・ハンドブック
デバイスおよびツールのサポート
エッジ・キャプチャ・レジスタにより、コアは入力ポートで指定された
タイプのエッジが発生すると、それを検出して(オプションで)割り込
みを生成できます。
Synchronously capture オプションがオフのときには、edgecapture レ
ジスタは存在しません。
割り込み
Generate IRQ オプションがオンのとき、PIO コアは入力ポートで指定
されたイベントが発生すると、IRQ 出力をアサートすることができます。
さらに、ユーザは IRQ イベントの発生する条件を指定する必要がありま
す。
■
Level(レベル)
(レベル)− 特定の入力が High で、かつ interruptmask レジ
スタでその入力に対して割り込みがイネーブルされている場合、コ
アは IRQ を生成します。
■ Edge(エッジ)
(エッジ)−
(エッジ) エッジ・キャプチャ・レジスタの特定のビットが
High で、かつ interruptmask レジスタでそのビットに対して割り
込みがイネーブルされている場合、コアは IRQ を生成します。
Generate IRQ オプションがオフのとき、interruptmask レジスタは
存在しません。
デバイスお
よびツール
のサポート
PIO コアは、すべての Altera® FPGA ファミリをサポートしています。
ソフトウェア・
プログラミン
グ・モデル
このセクションでは、ハードウェアにアクセスするためのレジスタ・マッ
プやソフトウェア構造など、PIO コアのソフトウェア・プログラミング・
モデルについて説明します。Nios® II プロセッサ・ユーザ向けに、アル
テラは PIO コア・レジスタを定義する HAL システム・ライブラリ・ヘッ
ダ・ファイルを提供しています。PIO コアは、HAL がサポートする汎用
デバイス・モデルのカテゴリに適合しないため、HAL API または ANSI
C 標準ライブラリを介してアクセスすることはできません。
Nios II 開発キットには、PIO コアの使用法を示すデザイン例がいくつか
用意されています。特に、count_binary.c の例では、PIO コアを使用し
て LED をドライブし、PIO エッジ検出割り込みを使用してボタンの押下
を検出しています。
7–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 PIO コア
ソフトウェア・ファイル
PIO コアには、altera_avalon_pio_regs.h という 1 つのソフトウェア・
ファイルが付属しています。このファイルはコアのレジスタ・マップを
定義し、低水準ハードウェアにアクセスするための記号定数を提供しま
す。
レガシー SDK ルーチン
PIO コアは、第 1 世代の Nios プロセッサ用のレガシー SDK ルーチンで
サポートされています。これらのルーチンの詳細については、第 1 世代
の Nios プロセッサに付属する PIO ドキュメントを参照してください。
レガシー SDK に基づいてプログラムを HAL システム・ライブラリ API
にアップグレードする方法の詳細については、
「AN 350: Upgrading Nios
Processor Systems to the Nios II Processor」を参照してください。
レジスタ・マップ
CPU などの Avalon マスタ・ペリフェラルは、表 7–2 に示す 4 つの 32
ビット・レジスタを介して、PIO コアに対する制御と通信を行います。
この表では、PIO コアの I/O ポートは n ビット幅に設定されているもの
と想定しています。
表 7–2. PIO コアのレジスタ・マップ
オフセット
0
レジスタ名
R/W
(n-1)
...
data read access
R
現在 PIO 入力にあるデータ値
write access
W
PIO 出力にドライブする新しい値
2
1
0
1
direction (1)
R/W
各 I/O ポートに対する個別の方向制御。値 0 は方向を入力
に、1 は出力に設定します。
2
interruptmask (1)
R/W
各入力ポートに対する IRQ イネーブル / ディセーブルビッ
トを 1 に設定すると、対応するポートの割り込みがイネー
ブルされます。
3
edgecapture (1), (2)
R/W
各入力ポートのエッジ検出。
表 7–2 の注:
(1) ハードウェア設定によっては、このレジスタが存在しないことがあります。レジスタが存在しない場合、レ
ジスタを読み出すと不定値が返され、レジスタに書き込んでも影響はありません。
(2) edgecapture に何らかの値を書き込むと、すべてのビットが 0 にクリアされます。
Altera Corporation
2004 年 9 月
7–7
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
data レジスタ
data から読み出すと、入力ポートの値が返されます。PIO コア・ハー
ドウェアが出力専用モードで設定されている場合、data を読み出すと
不定値が返されます。
data に書き込むと、出力ポートをドライブするレジスタに値が格納さ
れます。PIO コア・ハードウェアが入力専用モードで設定されている場
合、data に書き込んでも影響はありません。PIO コア・ハードウェア
が双方向モードの場合、direction レジスタの対応するビットが 1(出
力)に設定されているときにのみ、登録された値が出力ポートに現れま
す。
direction レジスタ
direction レジスタは、ポートが双方向と設定したとき、各 PIO ポー
トのデータ方向を制御します。direction のビット n が 1 に設定され
ると、ポート n は、data レジスタの対応するビットの値を出力します。
direction レジスタは、PIO コア・ハードウェアが双方向モードで設
定されているときにのみ存在します。モード(入力、出力、または双方
向)は、システム生成時に指定され、実行時には変更できません。入力
専用または出力専用モードでは、direction レジスタは存在しません。
この場合、direction を読み出しても不定値が返され、direction に
書き込んでも影響はありません。
リセット後に direction のすべてのビットが 0 になるため、すべての双方
向 I/O ポートは入力としてコンフィギュレーションされます。これらの
PIO ポートがデバイス・ピンに接続されている場合、ピンはハイ・イン
ピーダンス状態に保持されます。
interruptmask レジスタ
interruptmask レジスタのビットを 1 に設定すると、対応する PIO 入
力ポートの割り込みがイネーブルされます。割り込み動作は、PIO コア
のハードウェア・コンフィギュレーションによって決まります。7–9 ペー
ジの「割り込み動作」を参照してください。
interruptmask レジスタは、ハードウェアが IRQ を生成するように
設定されたときにのみ存在します。コアが IRQ を生成できない場合、
interruptmask を読み出しても不定値が返され、interruptmask
に書き込んでも影響はありません。
リセット後に、interruptmask のすべてのビットはゼロになるため、
割り込みはすべての PIO ポートに対してディセーブルされます。
7–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 PIO コア
edgecapture レジスタ
入力ポート n でエッジが検出されるたびに、edgecapture レジスタの
ビット n は 1 に設定されます。Avalon マスタ・ペリフェラルは、
edgecaptureレジスタを読み出して、PIO入力ポートのいずれかでエッ
ジが発生したかどうかを判断できます。edgecapture に何らかの値を
書き込むと、レジスタのすべてのビットがクリアされます。
検出するエッジのタイプはシステム生成時にハードウェアで固定されま
す。edgecapture レジスタは、ハードウェアがエッジをキャプチャす
るように設定されたときにのみ存在します。コアがエッジをキャプチャ
するように設定されていない場合、edgecapture を読み出しても不定
値が返され、edgecapture に書き込んでも影響はありません。
割り込み動作
PIO コアは、システム内の任意のマスタ・ペリフェラルに接続可能な 1
つの割り込み要求(IRQ)信号を出力します。マスタは、data レジスタ
または edgecapture レジスタのいずれかを読み出して、割り込みを生
成した入力ポートを特定できます。
ハードウェアがレベルセンシティブ割り込みに対応するように設定され
ているとき、data および interruptmask レジスタの対応するビットが
1 になると、IRQ がアサートされます。ハードウェアがエッジセンシティ
ブ割り込みに対応するように設定されているとき、edgecapture および
interruptmask レジスタの対応するビットが 1 になると、IRQ がアサー
トされます。interruptmask の対応するビットをディセーブルするか、
または edgecapture に書き込んで明示的に確認するまで、IRQ はアサー
トされたままです。
ソフトウェア・ファイル
PIO コアには、以下のソフトウェア・ファイルが付属しています。この
ファイルはハードウェアへの低水準アクセスを提供します。アプリケー
ション開発者がこのファイルを変更してはなりません。
■
Altera Corporation
2004 年 9 月
altera_avalon_pio_regs.h − このファイルは、コアのレジスタ・マッ
プを定義し、低水準ハードウェアにアクセスするための記号定数を
提供します。このファイル内の記号はデバイス・ドライバ関数で使
用されます。
7–9
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
7–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
8. Avalon インタフェース対応
タイマ・コア
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51008-1.1
コアの概要
Avalon™ インタフェース付きタイマ・コアは、Nios® II プロセッサ・シ
ステムなど、Avalon ベースのプロセッサシステム用の 32 ビット・イン
ターバル・タイマです。このタイマは、以下の機能を備えています。
■
■
■
■
■
■
■
タイマの始動、停止、およびリセットの制御
カウント・ダウン・ワンスと連続カウント・ダウンの 2 つのカウント・
モード
カウント・ダウン周期レジスタ
ゼロ到達時にマスク可能な割り込み要求 (IRQ)
タイマ・イベントのゼロ到達時にシステムをリセットするオプショ
ンのウォッチドッグ・タイマ機能
タイマのゼロ到達時にパルスを出力するオプションの周期パルス・
ジェネレータ機能
32 ビットおよび 16 ビット・プロセッサとの互換性
Nios II プロセッサの場合、デバイス・ドライバは HAL システム・ライ
ブラリで提供されます。タイマ・コアは、SOPC Builder への対応が可能
で、SOPC Builder で生成されたどのシステムにも容易に統合できます。
機能の説明
図 8-1 に、タイマ・コアのブロック図を示します。
図 8-1. タイマ・コアのブロック図
レジスタ・ファイル
status
アドレス、データ、
その他
control
periodl
periodh
オンチップ・
ロジックへの
Avalon
スレーブ・
インタフェース
カウンタ
snapl
snaph
IRQ
resetrequest
コントロール・
ロジック
timeout_pulse
(ウォッチドッグ)
Altera Corporation
2004 年 9 月
8–1
機能の説明
タイマ・コアには、ユーザが管理可能な以下の 2 つの機能があります。
■
6つの16ビット・レジスタへのアクセスを提供するAvalonインタフェー
ス
■ 周期パルス・ジェネレータとしての使用が可能なオプションのパル
ス出力
すべてのレジスタは 16 ビット幅なので、タイマは 16 ビット・プロセッ
サと 32 ビット・プロセッサのどちらとも互換性があります。設定によっ
ては、ハードウェアにしか存在しないレジスタもあります。例えば、タ
イマが固定周期で設定された場合、ハードウェアに周期レジスタは存在
しません。
タイマの基本動作を以下で説明します。
■
■
■
■
■
■
Nios II プロセッサなどの Avalon マスタ・ペリフェラルは、タイマ・
コアの control レジスタに書き込んで、以下を実行します。
●
タイマの始動と停止
●
IRQ のイネーブル / ディセーブル
●
カウント・ダウン・ワンス・モードまたは連続カウント・ダウ
ン・モードの指定
プロセッサは status レジスタを読み出して、現在のタイマ・アクティ
ビティに関する情報を取得します。
プロセッサは、周期レジスタ periodl および periodh に値を書き込
んでタイマ周期を指定できます。
内部カウンタはゼロまでカウント・ダウンし、ゼロに到達するとす
ぐに周期レジスタから再ロードされます。
プロセッサは、まず snapl または snaph のいずれかに書き込んでカ
ウンタのコヒーレント・スナップショットを要求し、次に snapl と
snaph の完全な 32 ビット値を読み出して、現在のカウンタ値を読み
出すことができます。
カウンタがゼロに達すると、以下のようになります。
●
IRQ がイネーブルされている場合、IRQ が生成されます。
● (オプションの)パルス・ジェネレータ出力が 1 クロック周期間
アサートされます。
● (オプションの)
ウォッチドッグ出力でシステムがリセットされ
ます。
8–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応タイマ・コア
Avalon スレーブ・インタフェース
タイマ・コアはシンプルな Avalon スレーブ・インタフェースを実装し
て、レジスタ・ファイルへのアクセスを提供します。Avalon スレーブ・
ポートは resetrequest 信号を使用して、ウォッチドッグ・タイマの
動作を実現します。この信号はマスク不能なリセット信号であり、SOPC
Builder システム内のすべての Avalon ペリフェラルのリセット入力をド
ライブします。resetrequest 信号がアサートされると、システムに接
続されるプロセッサは強制的に再起動されます。詳細については、8–5
ページの「ウォッチドッグ・タイマとしてのタイマの設定」を参照して
ください。
デバイスと
ツールの
サポート
タイマ・コアは、すべてのアルテラ FPGA ファミリをサポートしていま
す。
SOPC Builder
でのコアの
インスタンス化
設計者は、タイマの SOPC Builder コンフィギュレーション・ウィザー
ドを使用して、ハードウェア機能を指定することができます。このセク
ションでは、コンフィギュレーション・ウィザードで選択可能なオプショ
ンについて説明します。
タイムアウト周期
Timeout Period 設定では、periodl および periodh レジスタの初期
値を決定します。Writeable period 設定がオンになっている場合、プロ
セッサは periodl および periodh に書き込んで、周期の値を変更でき
ます。Writeable period 設定(以下を参照)がオフのとき、周期は固定
され実行時に更新できません。
Timeout Period 設定は、usec、msec、sec、または clocks(クロック・サ
イクル数)の単位で指定できます。実際の周期は、システム・クロックに
応じて達成されます。周期が usec、msec、または sec 単位で指定された場
合、実際の周期は、指定された Timeout Period より大きいかまたは等しい
クロック・サイクルの最小数になります。
Altera Corporation
2004 年 9 月
8–3
Nios II プロセッサ・リファレンス・ハンドブック
SOPC Builder でのコアのインスタンス化
ハードウェア・オプション
以下のオプションは、タイマ・コアのハードウェア構造に影響します。
便宜上、Preset Configurations リストでは、以下のような定義済みの
ハードウェア設定が提供されます。
■
Simple periodic interrupt − この設定は、周期 IRQ ジェネレータのみを
必要とするシステムに適しています。この周期は固定され、タイマは
停止できませんが、IRQ はディセーブルできます。
■ Full-featured − この設定は、プロセッサ制御によって始動および停
止できる可変周期タイマを必要とする、エンベデッド・プロセッサ・
システムに適しています。
■ Watchdog − この設定は、システムが応答を停止した場合にシステ
ムをリセットするウォッチドッグ・タイマを必要とするシステムに
適しています。8–5 ページの「ウォッチドッグ・タイマとしてのタイ
マの設定」を参照してください。
レジスタ・オプション
表 8–1 に、タイマ・コアのレジスタに作用する設定を示します。
表 8–1. レジスタ・オプション
オプション
説明
Writeable
period
このオプションをオンにすると、マスタ・ペリフェラルは、periodl および periodh に書
き込んで、カウント・ダウン周期を変更できます。オフにすると、カウント・ダウン周期は
指定された Timeout Period で固定され、 periodl および periodh レジスタはハードウェ
アに存在しません。
Readable
snapshot
このオプションをオンにすると、マスタ・ペリフェラルは現在のカウント・ダウンのスナッ
プショットを読み出すことができます。オンにすると、カウンタのステータスは、status
レジスタや IRQ 信号など、その他のインジケータによってのみ検出できます。この場合、
snapl および snaph レジスタはハードウェアに存在しないため、これらのレジスタを読み出
しても値は不定です。
Start/Stop
control bits
このオプションをオンにすると、マスタ・ペリフェラルは、 control レジスタの START お
よび STOP ビットに書き込むことにより、タイマを始動および停止できます。オフにすると、
タイマは連続して動作します。System reset on timeout (watchdog) オプションをオンにす
ると、Start/Stop control bits オプションに関係なく、START ビットも存在します。
8–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応タイマ・コア
出力信号オプション
表 8–2 に、タイマ・コアの出力信号に作用する設定を示します。
表 8–2. 出力信号オプション
オプション
Timeout pulse
(1 clock wide)
説明
このオプションをオンにすると、タイマ・コアは信号 timeout_pulse を出力します。
タイマがゼロに達すると、この信号は 1 クロック・サイクルの間、High のパルスを発生
します。オフにすると、 timeout_pulse 信号は発生しません。
System reset on
このオプションをオンにすると、タイマ・コアの Avalon スレーブ・ポートに、
timeout (watchdog) resetrequest 信号が含まれます。タイマがゼロに達すると、この信号は 1 クロック・
サイクルの間、High のパルスを発生します(システム全体のリセットが発生します)。
このオプションをオンにすると、内部タイマは停止またはリセットされます。control
レジスタの START ビットに明示的に書き込むと、タイマが始動します。このオプション
をオフにすると、 resetrequest 信号は発生しません。
8–5 ページの「ウォッチドッグ・タイマとしてのタイマの設定」を参照してください。
ウォッチドッグ・タイマとしてのタイマの設定
タイマをウォッチドッグとして使用するように設定するには、コンフィ
ギ ュ レ ー シ ョ ン・ウ ィ ザ ー ド で Preset Configurations リ ス ト か ら
Watchdog を選択するか、または以下の設定を選択します。
■
■
■
■
■
■
Timeout Period を希望の「ウォッチドッグ」周期に設定します。
Writeable period オプションを off にします。
Readable snapshot オプションを off にします。
Start/Stop control bits オプションを off にします。
Timeout pulse オプションを off にします。
System reset on timeout (watchdog) オプションを on にします。
ウォッチドッグ・タイマが停止状態からウェイク・アップ(つまり、リ
セット状態を終了)します。プロセッサは後で、control レジスタの
START ビットに 1 を書き込んでタイマを始動させます。タイマは一度始
動すると停止しません。内部カウンタがゼロに達すると、ウォッチドッ
グ・タイマは、resetrequest 出力でパルスを生成して、システムをリ
セットします。システムのリセットを防止するために、プロセッサは
periodl または periodh レジスタのいずれかに書き込んで(書き込ん
だ値は無視されます)、タイマのカウント・ダウン値を周期的にリセット
する必要があります。ソフトウェアが通常の実行を停止するなどの理由
で、プロセッサがタイマへのアクセスに失敗すると、ウォッチドッグ・
タイマはシステムをリセットして、システムを定義済み状態に戻します。
Altera Corporation
2004 年 9 月
8–5
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
ソフトウェア・
プログラミン
グ・モデル
以下のセクションでは、ハードウェアにアクセスするためのレジスタ・
マップやソフトウェア宣言など、タイマ・コアのソフトウェア・プログ
ラミング・モデルについて説明します。Nios II プロセッサ・ユーザ向け
に、アルテラは HAL アプリケーション・プログラミング・インタフェー
ス(API)関数を使用してタイマ・コアへのアクセスを可能にする、HAL
(Hardware Abstraction Layer)システム・ライブラリ・ドライバを提供
しています。
HAL システム・ライブラリ・サポート
アルテラが提供するドライバは、Nios II システム用の HAL システム・
ライブラリに統合されます。可能であれば、HAL ユーザはタイマ・レジ
スタにアクセスせずに、HAL API を介してタイマにアクセスしてくださ
い。
アルテラは HAL タイマ・デバイス・モデルであるシステム・クロック・
タイマとタイムスタンプ・タイマの両方に対応するドライバを提供して
います。
システム・クロック・ドライバ
タイマは、システム・クロックとして設定すると、SOPC Builder で設定
されたデフォルト周期を使用して、周期モードで連続して動作します。
システム・クロック・サービスは、このタイマに対する割り込みサービ
ス・ルーチンの一環として実行されます。ドライバは割り込み駆動型で
あるため、システム・ハードウェア内で割り込み信号を接続する必要が
あります。
Nios II 統合開発環境(IDE)のシステム・ライブラリ・プロパティは、
システム・クロック・タイマとして使用するタイマ・デバイスを指定す
ることができます。
タイムスタンプ・ドライバ
以下の条件を満たす場合、タイマ・コアはタイムスタンプ・デバイスと
して使用できます。
■
タイマが、SOPC Builder で設定される書き込み可能な snapshot レジ
スタを持っている。
■ タイマがシステム・クロックとして選択されていない。
Nios II IDE のシステム・ライブラリ・プロパティは、タイムスタンプ・
タイマとして使用されるタイマ・デバイスを指定できます。
8–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応タイマ・コア
タイマ・ハードウェアが、書き込み可能な period レジスタ付きで設定
されていない場合、alt_timestamp_start() API 関数を呼び出して
も、タイムスタンプ・カウンタはリセットされません。その他のすべて
の HAL API 呼び出しでは、予想された動作が実行されます。
これらのドライバを使用するシステム・クロックおよびタイムスタンプ
機能の使用方法に関する詳細は、「Nios II ソフトウェア開発ハンドブッ
ク」を参照してください。また、Nios II 開発キットには、タイマ・コア
を使用するデザインの例もいくつか用意されています。
制限
タイマ・コア用の HAL ドライバは、タイマ・コアのウォッチドッグ・
リセット機能をサポートしていません。
ソフトウェア・ファイル
タイマ・コアには、以下のソフトウェア・ファイルが付属しています。
これらのファイルは、ハードウェアへの低水準インタフェースを定義
し、HAL ドライバを提供します。アプリケーション開発者がこれらの
ファイルを変更してはなりません。
■
altera_avalon_timer_regs.h −このファイルは、コアのレジスタ・マッ
プを定義し、低水準ハードウェアにアクセスするための記号定数を
提供します。
■ altera_avalon_timer.h、altera_avalon_timer_sc.c、
、
altera_avalon_timer_ts.c、
、altera_avalon_timer_vars.c − こ れ ら の
ファイルは、HAL システム・ライブラリ用のタイマ・デバイス・ド
ライバを実装します。
レジスタ・マップ
Nios II プロセッサ用の HAL システム・ライブラリに用意された標準機
能を使用する場合は、プログラマがタイマのレジスタを介してタイマに
直接アクセスしてはなりません。一般に、レジスタ・マップはデバイス・
ドライバを記述するプログラマにとってのみ有用です。
アルテラが提供する HAL デバイス・ドライバは、デバイス・
レジスタに直接アクセスします。デバイス・ドライバを記述し
ている場合に、同じデバイスに対して HAL ドライバがアクティ
ブになると、ユーザ・ドライバが競合し動作に失敗します。
Altera Corporation
2004 年 9 月
8–7
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 8–3 に、タイマのレジスタ・マップを示します。
表 8–3. レジスタ・マップ
オフ
セット
ビットの説明
名称
R/W
0
status
RW
1
control
RW
2
periodl
RW
タイムアウト周期 -1(ビット 15..0)
3
periodh
RW
タイムアウト周期 - 1(ビット 31..16)
4
snapl
RW
カウンタ・スナップショット(ビット 15..0)
snaph
RW
カウンタ・スナップショット(ビット 31..16)
5
15
...
4
3
2
1
RUN
TO
STOP
START
CONT
ITO
(1)
(1)
0
表 8–3 の注:
(1) 予約。読み出し値は不定です。ゼロを書き込みます。
status レジスタ
status レジスタには、表 8–4 に示すように、定義済みビットが 2 ビッ
トあります。
表 8–4. status レジスタ・ビット
ビット
名称
読み出し(R)/
書き込み(W)/
クリア(C)
0
TO
RC
TO(タイムアウト)ビットは、内部カウンタがゼロに達すると 1 に
設定されます。タイムアウト・イベントで 1 に設定されると、TO
ビットはマスタ・ペリフェラルで明示的にクリアされるまで 1 のま
まです。TO ビットをクリアするには、status レジスタにゼロを書
き込みます。
1
RUN
R
RUN ビットは内部カウンタの動作中は 1 で読み出され、それ以外は
0 で読み出されます。 status レジスタに書き込み操作を行っても
RUN ビットは変更されません。
説明
8–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応タイマ・コア
control レジスタ
control レジスタには、表 8–5 に示すように、定義済みビットが 4 ビッ
トあります。
表 8–5. control レジスタ・ビット
ビット
名称
読み出し(R)/
書き込み(W)/
クリア(C)
0
ITO
RW
ITO ビットが 1 の場合、タイマ・コアは status レジスタの TO
ビットが 1 になると IRQ を生成します。ITO ビットが 0 のとき、タ
イマは IRQ を生成しません。
1
CONT
RW
CONT(連続)ビットは、ゼロに達したときの内部カウンタの動作を
決定します。CONT ビットが 1 の場合、カウンタは STOP ビットで停
止されるまで連続して動作します。CONT が 0 の場合、カウンタはゼ
ロに達した後で停止します。カウンタはゼロに達すると、CONT ビッ
トに関係なく、 periodl および periodh レジスタに格納された
32 ビット値を再ロードします。
2
START(1)
W
START ビットに 1 を書き込むと、内部カウンタが動作(カウント・
ダウン)を開始します。START ビットは、書き込み操作が実行され
るときにカウンタをイネーブルするイベント・ビットです。タイマ
が停止している場合、START ビットに 1 を書き込むと、タイマは
現在そのカウンタに保持されている数値からカウントを再開しま
す。タイマがすでに動作している場合は、START に 1 を書き込ん
でも効果はありません。START ビットに 0 を書き込んでも効果は
ありません。
3
STOP (1)
W
STOP ビットに 1 を書き込むと、内部カウンタが停止します。STOP
ビットは、書き込み操作を実行するときにカウンタを停止するイベ
ント・ビットです。タイマがすでに停止している場合、STOP に 1
を書き込んでも効果はありません。ストップ・ビットに 0 を書き込
んでも効果はありません。STOP ビットに 0 を書き込んでも効果は
ありません。
タイマ・ハードウェアが、Start/Stop control bits オプションをオフに
してコンフィギュレーションされている場合、STOP ビットに書き込
んでも効果はありません。
説明
注:
(1) START ビットと STOP ビットの両方に同時に 1 を書き込んだ場合、結果は不定です。
Altera Corporation
2004 年 9 月
8–9
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
periodl および periodh レジスタ
periodl および periodh レジスタは連結して、タイムアウト周期値を格
納しています。periodl は最下位 16 ビットを保持し、periodh は最上
位 16 ビットを保持します。以下のいずれかが発生すると、内部カウンタに
periodh および periodl に格納された 32 ビット値がロードされます。
■
■
periodh または periodl レジスタのいずれかへの書き込み操作
内部カウンタが 0 に到達
カウンタは 1 クロック・サイクルを値ゼロ(0x00000000)と見なしてい
るので、タイマの実際の周期は periodh および periodl に格納された
値よりも 1 サイクル長くなります。
ハードウェアがStart/Stop control bitsオプションをオフにしてコンフィ
ギュレーションされた場合を除き、periodh または periodl のいずれ
かに書き込むと、内部カウンタが停止します。Start/Stop control bits オ
プションがオフの場合、どちらのレジスタに書き込んでもカウンタは停
止しません。ハードウェアが、Writeable period オプションをオフにし
てコンフィギュレーションされた場合、periodh または periodl のい
ずれかに書き込むと、カウンタはシステム生成時に指定される固定
Timeout Period にリセットされます。
snapl および snaph レジスタ
マスタ・ペリフェラルは、snapl または snaph レジスタに書き込み操
作(書き込みデータは無視されます)を実行して、現在の 32 ビット内部
カウンタのコヒーレント・スナップショットを要求することができます。
書き込みが発生すると、カウンタの値は snapl と snaph にコピーされ
ます。snapl はスナップショットの最下位 16 ビットを保持し、snaph
は最上位 16 ビットを保持します。スナップショットはカウンタの動作に
関係なく発生します。スナップショットを要求しても、内部カウンタの
動作が変化することはありません。
割り込み動作
タイマ・コアは、内部カウンタがゼロに達し、control レジスタの ITO
ビットが 1 に設定されると IRQ を生成します。IRQ は以下の 2 つの方法
のいずれかで認識応答されます。
■
■
status レジスタの TO ビットをクリアする
control レジスタの ITO ビットをクリアして、割り込みをディセー
ブルする
8–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
9. Avalon インタフェース対応
JTAG UART コア
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51009-1.2
コアの概要
Avalon™ インタフェース付き JTAG UART(Universal Asynchronous
Receiver/Transmitter)コアは、ホスト PC とアルテラ FPGA 上の SOPC
Builder システムとの間で、キャラクタ・ストリームをシリアル通信する
手段を実装しています。多くのデザインで、JTAG UART コアにより、
キャラクタ I/O のためにホスト PC への RS-232 シリアル接続を別途用意
する必要はありません。このコアは、レジスタにマップされたシンプル
な Avalon インタフェースを提供します。このインタフェースにより、エ
ンベデッド・ソフトウェア・プログラマは JTAG インタフェースの詳細
を意識する必要はありません。マスタ・ペリフェラル(Nios® II プロセッ
サなど)は、コントロール・レジスタとデータ・レジスタに読み出しお
よび書き込みを行って、コアと通信します。
JTAG UART コアは、アルテラ FPGA に組み込まれた JTAG 回路を使用
し、FPGA 上の JTAG ピンを介してホスト・アクセスを提供します。ホ
スト PC は、USB-Blaster™ ケーブルなどのアルテラ JTAG ダウンロード・
ケーブルを介して、FPGA に接続できます。JTAG UART コアのソフト
ウェア・サポートはアルテラによって提供されます。Nios II プロセッサ
の場合、デバイス・ドライバが HAL システム・ライブラリに用意され
ているため、ソフトウェアは ANSI C 標準ライブラリの stdio.h ルーチ
ンを使用してコアにアクセスできます。ホスト PC に対しては、アルテ
ラは、ターゲットへの接続、JTAG データ・ストリームのデコード、お
よび画面へのキャラクタ表示を管理する JTAG ターミナル・ソフトウェ
アを提供しています。
JTAG UART コアは、SOPC Builder への対応が可能で、SOPC Builder で
生成されたあらゆるシステムに容易に統合できます。
機能の説明
図 9–1 は、JTAG UART コアおよび JTAG UART コアとアルテラ FPGA
内部の JTAG 回路との接続を示すブロック図です。以下のセクションで
は、コアのコンポーネントについて説明します。
Altera Corporation
2004 年 12 月
9–1
機能の説明
図 9-1. JTAG UART コアのブロック図
TMS
TRST
TDI
アルテラFPGA
TDO
TCK
ホストPCへのJTAG接続
JTAG UARTコア
JTAG
コントローラ
レジスタ
オンチップ・
ロジックへの
Avalon
スレーブ・
インタフェース
Data
書き込みFIFO
Control
読み出しFIFO
JTAGハブ・
インタ
フェース
JTAGハブ
IRQ
JTAGインタフェースを使用する
その他ノード(別のJTAG UARTなど)
アルテラFPGAの内蔵機能
Quartus IIによって自動的に生成
Avalon スレーブ・インタフェースとレジスタ
JTAG UART コアは、アルテラ FPGA 上の JTAG 回路への Avalon スレー
ブ・インタフェースを提供します。JTAG UART コアへのユーザが認識
可能なインタフェースは、Avalon スレーブ・ポートを介してアクセス
される 2 つの 32 ビット・レジスタ、data および control で構成され
ています。Nios II プロセッサなどの Avalon マスタは、レジスタにアク
セスしてコアを管理し、さらに JTAG 接続によってデータを転送します。
コアは一度に 8 ビット単位のデータを操作します。つまり、data レジ
スタの 8 ビットが 1 キャラクタのペイロードとして機能します。
JTAG UART コアは、リード・データが利用可能になるか、またはライ
ト FIFO がデータ操作可能になると、割り込みを要求できるアクティブ
High 割り込み出力を供給します。詳細については、9–15 ページの「割
り込み動作」を参照してください。
9–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 JTAG UART コア
読み出しおよびライト FIFO
JTAG UART コアは双方向 FIFO を提供し、JTAG 接続での帯域幅を改善
しています。FIFO の深さは、利用可能なオンチップ・メモリに応じてパ
ラメータ化可能です。FIFO はメモリ・ブロックまたはレジスタで構成で
き、設計者は必要に応じてロジック・リソースとメモリ・ブロックのト
レードオフを図ることができます。
JTAG インタフェース
アルテラ FPGA には、デバイスの JTAG ピンをデバイス内部のロジック
にインタフェースする JTAG コントロール回路が内蔵されています。
JTAG コントローラは、FPGA に実装される「ノード」と呼ばれるユー
ザ定義回路に接続できます。JTAG インタフェースを介した通信を必要
とするノードが複数存在する可能性があるため、JTAG ハブ(つまり、マ
ルチプレクサ)が必要になります。ロジックの合成およびフィッティン
グの中に、Quartus® II ソフトウェアは JTAG ハブ・ロジックを自動的に
生成します。デバイス内部の JTAG 回路への接続に、デザインを手作業
で仕上げる必要はありません。ここでは、説明を明確にするために取り
上げています。
ホスト・ターゲット接続
図 9-2 に、ホスト PC と、SOPC Builder で生成された JTAG UART コア
搭載のシステムとの接続を示します。
Altera Corporation
2004 年 12 月
9–3
Nios II プロセッサ・リファレンス・ハンドブック
機能の説明
図 9-2. JTAG UART コアを使用するシステムの例
アルテラFPGA
JTAG
デバッグ・
モジュール
ホストPC
Nios II
プロセッサ
デバッガ
JTAGターミナル
ダウン
JTAG ロード・
サーバ ケーブル・
ドライバ
PC
インタ
フェース アルテラ・
ダウン
ロード・
ケーブル
デバッグ・データ
キャラクタ・ストリーム
JTAG
JTAG
ハブ
C
JTAG
コントローラ
M
Avalon
スイッチ・ファブリック
S
S
JTAG
UART
オンチップ・
メモリ
M
Avalonマスタ・ポート
S
Avalonスレーブ・ポート
FPGA 上の JTAG コントローラとホスト PC 上のダウンロード・ケーブ
ル・ドライバによって、ホストとターゲット間にシンプルなデータ・リ
ンク・レイヤが実装されます。FPGA 内部のすべての JTAG ノードは、1
つの JTAG 接続によって多重化されます。ホスト PC 上の JTAG サーバ・
ソフトウェアは、JTAG データ・ストリームの制御とデコードを行い、
FPGA 内部のノードとの接続を識別可能な状態に維持します。
図 9-2 に示すシステム例には、1 つの JTAG UART コアと Nios II プロ
セッサが含まれています。どちらのエージェントも、1 本のアルテラ・
ダウンロード・ケーブルを介してホスト PC と通信します。JTAG サー
バ・ソフトウェアによって、各ホスト・アプリケーションは独立してター
ゲットに接続することができます。アルテラは、JTAG UART コアとの
通信に必要な JTAG サーバ・ドライバとホスト・ソフトウェアを提供し
ています。
複数の JTAG UART コアを搭載したシステムを構築することも可
能で、すべてのコアは同じ JTAG インタフェースを介して通信し
ます。一貫性のあるデータ・ストリームを維持するには、1 つの
プロセッサのみが各JTAG UARTコアと通信する必要があります。
9–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 JTAG UART コア
デバイスと
ツールの
サポート
JTAG UART コアは、Stratix®、Stratix II、Cyclone™ および Cyclone II デ
バイス・ファミリをサポートしています。JTAG UART コアは、Nios II
HAL(Hardware Abstraction Layer)システム・ライブラリによってサ
ポートされます。第 1 世代の Nios プロセッサに対しては、ソフトウェ
ア・サポートは提供されません。
ホスト PC 上でキャラクタ・ストリームを確認するには、JTAG UART
コアをアルテラが提供する JTAG ターミナル・ソフトウェアと連携して
使用する必要があります。Nios II プロセッサ・ユーザは、Nios II IDE ま
たは nios2-terminal コマンドライン・ユーティリティを使用して JTAG
UART にアクセスします。
詳細については、
「Nios II ソフトウェア開発ハンドブック」または Nios
II IDE のオンライン・ヘルプを参照してください。
SOPC Builder
でのコアのイン
スタンス化
設計者は、JTAG UART コアの SOPC Builder コンフィギュレーション・
ウィザードを使用して、コアの機能を指定します。以下のセクションで
は、コンフィギュレーション・ウィザードで選択可能なオプションにつ
いて説明します。
Configuration タブ
このタブのオプションは、JTAG UART コアのハードウェア・コンフィ
ギュレーションを制御します。デフォルト設定は、アルテラ提供のデバ
イス・ドライバおよび JTAG ターミナル・ソフトウェアと併用すれば最
適に動作するように、事前にコンフィギュレーションされています。ほ
とんどの場合、Construct using registers instead of memory blocks オ
プションを除いて、デフォルト設定を変更する必要はありません。
ライト FIFO 設定
ライト FIFO は、Avalon インタフェースからホストに流れるデータを
バッファリングします。以下の設定が選択できます。
■
Altera Corporation
2004 年 12 月
Depth−ライトFIFOの深さは、8バイトから32,768バイトの間で設定
できます。許容値は 2 のべき乗のみです。値を大きくすれば、オン
チップ・メモリ・リソースの消費も増大します。一般に、深さ 64 が
性能面で最適であり、これより大きな値が必要になるケースはほと
んどありません。
9–5
Nios II プロセッサ・リファレンス・ハンドブック
SOPC Builder でのコアのインスタンス化
■
IRQ Threshold − 書き込み IRQ スレッショルドは、FIFO が空になっ
たとき、それに応答してコアが IRQ をアサートする方法を管理しま
す。JTAG 回路がライト FIFO からデータを消去するときに、FIFO に
残っているキャラクタ数がこのスレッショルド値に達すると、コア
は対応する IRQ をアサートします。帯域幅の効率を最大にするため
に、プロセッサはより多くのデータを書き込み、ライト FIFO が完全
に空にならないようにして、割り込みを処理する必要があります。一
般に、この値は 8 が最適です。詳細については、9–15 ページの「割
り込み動作」を参照してください。
■
Construct using registers instead of memory blocks− このオプショ
ンをオンにすると、FIFO はメモリ・リソースなしで構成されます。
このオプションはメモリ・リソースが限定される場合に役立ちます。
各バイトは 11 個程度のロジック・エレメント(LE)を消費するた
め、FIFO の深さを 8(バイト)にすると、約 88 個の LE が消費されます。
リード FIFO の設定
リード FIFO は、ホストから Avalon インタフェースに流れるデータを
バッファリングします。FIFO の深さと割り込み生成を制御する設定が
用意されています。
■
Depth−リードFIFOの深さは、8バイト∼32,768バイトに設定できま
す。許容値は 2 のべき乗のみです。値を大きくすれば、オンチップ・
メモリ・リソースの消費も増大します。一般に、深さ 64 が性能面で
最適であり、これより大きな値が必要なことはほとんどありません。
■
IRQ Threshold − IRQ スレッショルドは、
FIFO が満杯になったとき、
それに応答してコアが IRQ をアサートする方法を管理します。JTAG
回路がリード FIFO にデータを満たすときに、FIFO の空き容量がこ
のスレッショルドに達すると、コアは対応する IRQ をアサートしま
す。帯域幅の効率を最大にするために、プロセッサはデータを読み
出し、リード FIFO が完全に満杯にならないようにして、割り込みを
処理する必要があります。一般に、この値は 8 が最適です。詳細に
ついては、9–15 ページの「割り込み動作」を参照してください。
■
Construct using registers instead of memory blocks −このオプショ
ンをオンにすると、FIFO はメモリ・リソースなしで構成されます。
このオプションはメモリ・リソースが限定される場合に役立ちます。
各バイトは 11 個程度の LE を消費するため、FIFO の深さを 8(バイ
ト)にすると、約 88 個の LE が消費されます。
9–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 JTAG UART コア
シミュレーション設定
システム生成時に SOPC Builder が JTAG UART コアのロジックを生成
する場合は、同時にシミュレーション・モデルも構築されます。シミュ
レーション・モデルを利用すれば、JTAG UART コアを使用するシステ
ムのシミュレーションが簡略化されます。シミュレーション設定を変更
しても、ハードウェアのコアの動作には影響ありません。設定は機能シ
ミュレーションにのみ作用します。
入力キャラクタ・ストリームのシミュレート
ユーザはシミュレートされたシステム・リセットで、リード FIFO への
入力がシミュレートされるキャラクタ・ストリームを入力することがで
きます。コンフィギュレーション・ウィザードは任意のキャラクタ文字
列を受け取り、後でこの文字列がテスト・ベンチに送られます。リセッ
ト後、このキャラクタ文字列はリード FIFO 内で事前に初期化され、外
部 JTAG ターミナル・プログラムが JTAG UART コアにキャラクタ・ス
トリームを送信している状況を作り出します。
インタラクティブ・ウィンドウの準備
システム生成時に JTAG UART コア・ジェネレータは、シミュレーショ
ン中にインタラクティブ・ウィンドウを開く ModelSim マクロを作成で
きます。これらのウィンドウにより、ユーザはコンソール経由で ASCII
キャラクタを送受信できるため、ハードウェア内で実行中のシステムと
のターミナル・セッション状況が作られます。以下のオプションが用意
されています。
Altera Corporation
2004 年 12 月
■
Do not generate ModelSim aliases for interactive windows −このオ
プションを選択すると、キャラクタ I/O 用の ModelSim マクロは作
成されません。
■
Create ModelSim alias to open a window showing output as ASCII
text −このオプションを選択すると、ライト FIFO からの出力を表示
するコンソール・ウィンドウを開く ModelSim マクロが作成されま
す。Avalon インタフェースを介してライト FIFO に書き込まれる値
は、ASCII キャラクタとしてコンソールに表示されます。
9–7
Nios II プロセッサ・リファレンス・ハンドブック
ハードウェア・シミュレーションでの検討事項
■
ハードウェア・
シミュレー
ションでの
検討事項
Create ModelSim alias to open an interactive stimulus/response
window − このオプションを選択すると、コアと入力および出力の
相互作用を可能にするコンソール・ウィンドウを開く ModelSim マ
クロが作成されます。Avalon インタフェースを介してライト FIFO
に書き込まれる値は、ASCII キャラクタとしてコンソールに表示さ
れます。コンソールに入力した値は、リード FIFO に送られ、Avalon
インタフェースを介して読み出すことができます。このオプション
をオンにすると、シミュレートされたキャラクタ入力ストリーム・オ
プションは無視されます。
シミュレーション機能は、ModelSim シミュレータの使用時に、Nios II
プロセッサ・システムを簡単にシミュレーションするためのものです。
シミュレーション・モデルは JTAG UART コアのトップレベル HDL ファ
イルに実装されます。合成可能な HDL およびシミュレーション HDL
は、同じファイルに実装されます。一部のシミュレーション機能は、HDL
コードの特定のセクションを合成ツールに対してのみ開示する
「translate on/off」合成オプションを使用して実装されます。
Nios II システムでの JTAG UART コアのシミュレーションの詳細
については、「AN 351: Simulating Nios II Processor Designs」を
参照してください。
その他のシミュレータも使用できますが、その場合はユーザがカスタム・
シミュレーション・プロセスを作成する必要があります。自動生成され
た ModelSim スクリプトを参考にして、その他のシミュレータの類似機
能を作成することができます。
アルテラの推奨シミュレーション手順を使用する場合は、シ
ミュレーション・オプションを編集しないでください。シミュ
レーション・オプションを変更してカスタム・シミュレーショ
ン・フローを作成する場合は、SOPC Builder がシステム生成時
に既存のファイルを上書きすることに留意する必要がありま
す。変更内容が上書きされないよう注意してください。
ソフトウェア・
プログラミン
グ・モデル
以下のセクションでは、ハードウェアにアクセスするためのレジスタ・
マップやソフトウェア宣言など、JTAG UART コアのソフトウェア・プ
ログラミング・モデルについて説明します。アルテラは、Nios II プロ
セッサ・ユーザ向けに printf() や getchar() などの ANSI C 標準ラ
イブラリ関数を使用して、JTAG UART へのアクセスを可能にする HAL
システム・ライブラリ・ドライバを提供しています。
9–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 JTAG UART コア
HAL システム・ライブラリ・サポート
アルテラが提供するドライバは、Nios II システム用の HAL システム・
ライブラリに統合される HAL キャラクタ・モード・デバイス・ドライ
バを実装します。HAL ユーザは、JTAG UART レジスタにアクセスせず
に使い慣れた HAL API および ANSI C 標準ライブラリを介して JTAG
UART にアクセスすることができます。HAL ユーザによる JTAG UART
のハードウェア依存部分の制御を可能にする、ioctl() 要求が定義され
ています。
ユーザ・プログラムで、アルテラ提供の HAL デバイス・ドラ
イバを使用して JTAG UART ハードウェアにアクセスする場
合、デバイス・レジスタに直接アクセスすると、ドライバの正
常な動作が妨害されます。
Nios II プロセッサ・ユーザ向けに、HAL システム・ライブラリ API は、
JTAG UART コアの機能への完全なアクセスを提供します。Nios II プロ
グラムは、JTAG UART コアをキャラクタ・モード・デバイスとして扱
い、getchar() や printf() などの ANSI C 標準ライブラリ関数を使
用して、データを送受信します。
JTAG UART コアへの stdout としてのキャラクタの出力に、printf()
を使用してstdoutにメッセージを出力する最もシンプルな使用法を示し
ます。この例では、SOPC Builder システムに JTAG UART コアが搭載さ
れ、HAL システム・ライブラリは、この JTAG UART デバイスを stdout
に使用するようにコンフィギュレーションされています。
JTAG UART コアへの stdout としてのキャラクタの出力
#include <stdio.h>
int main ()
{
printf("Hello world.\n");
return 0;
}
9–10 ページの「JTAG UART コアへのキャラクタの転送」は、C 標準ラ
イブラリを使用して、JTAG UART コアからキャラクタを読み出す方法
と、JTAG UART コアへメッセージを送信する方法を示します。この例
では、SOPC Builder システムには、jtag_uart という名前の JTAG
UART コアが搭載されていますが、これは必ずしも stdout デバイスとし
てコンフィギュレーションされるとは限りません。この場合、プログラ
ムはこのデバイスを HAL ファイル・システムの他のノードと同じよう
に扱います。
Altera Corporation
2004 年 12 月
9–9
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
JTAG UART コアへのキャラクタの転送
/* キャラクタ「t」と「v」を認識するシンプルなプログラム */
#include <stdio.h>
#include <string.h>
int main ()
{
char* msg = "Detected the character 't'.\n";
FILE* fp;
char prompt = 0;
fp = fopen ("/dev/jtag_uart", "r+"); // 読み出しと書き込み用にファイルを開く。
if (fp)
{
while (prompt != 'v')
{ // 「v」を受信するまでループする。
prompt = getc(fp); // JTAG UART からキャラクタを取得する。
if (prompt == 't')
{ // キャラクタが「t」なら、メッセージを出力する。
fwrite (msg, strlen (msg), 1, fp);
}
if (ferror(fp))// ファイル・ポインタにエラーが発生していないかどうかチェックする。
clearerr(fp);// エラーがあればクリアする。
}
fprintf(fp, "Closing the JTAG UART file handle.\n");
fclose (fp);
}
return 0;
}
この例では、JTAG 接続の切断など、JTAG UART 接続でエラーが発生
していないかどうかをチェックするために、ferror(fp) を使用してい
ます。この場合、ドライバは JTAG 接続が切断されたことを検出し、エ
ラー(EIO)をレポートし、以降のトランザクション用のデータを破棄
します。このエラーが発生すると、C ライブラリはユーザが clearerr()
関数を使用して明示的にクリアするまで、この値をラッチします。
HAL システム・ライブラリの詳細については、
「Nios II ソフトウェア開
発ハンドブック」で解説しています。Nios II 開発キットには、JTAG UART
コアを使用するソフトウェア・デザイン例が多数用意されています。
9–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 JTAG UART コア
ドライバ・オプション:高速および小型サイズの実装
多様なタイプのシステムの要件に対応するために、JTAG UART ドライ
バには高速バージョンと小型バージョンの 2 種類が用意されています。
デフォルトでは、高速型動作が使用されます。高速ドライバと小型ドラ
イバのどちらも、C 標準ライブラリ関数と HAL API を完全にサポート
しています。
高速ドライバは割り込み駆動で実行されるため、デバイスがデータの送
信または受信の準備が整っていないときにも、プロセッサは他のタスク
を実行できます。JTAG UART のデータ・レートはプロセッサと比較し
て低速なため、一時的に他のタスクを実行する可能性があるシステムに
対しては、高速ドライバによって大きな性能上の利点が得られます。さ
らに、アルテラ Avalon JTAG UART の高速バージョンは、ホストへの
接続をモニタします。ホストが接続されていない場合、またはホストが
I/O ストリームを処理するアプリケーションを実行していない場合、ド
ライバはキャラクタを破棄します。
小型ドライバは、各キャラクタを送受信する前に JTAG UART ハード
ウェアを待機するポーリング形式の実装です。小型ドライバの性能は、
大容量のデータを送信すると低下します。小型バージョンでは、ホスト
が常に接続されていること、およびホストがキャラクタを破棄しないこ
とを想定しています。したがって、プログラムがデータを送信または受
信している間に、JTAG UART ハードウェアがホストから切断された場
合、小型ドライバはシステムのハングアップを引き起こします。スモー
ル・フットプリント・ドライバを有効にするには、以下の 2 つの方法が
あります。
Altera Corporation
2004 年 12 月
■
HAL システム・ライブラリ・プロジェクトのスモール・フットプリ
ント設定をオンにします。このオプションは、システム内のすべて
のデバイスのデバイス・ドライバにも作用します。
■
プリプロセッサ・オプション
-DALTERA_AVALON_JATAG_UART_SMALL を指定します。このオプ
ションを使用すると、他のデバイスのドライバに影響を与えずに、小
型の JTAG UART ドライバをポーリング形式で実装できます。
9–11
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
ioctl() 操作
JTAG UART ドライバの高速バージョンは、ioctl() 関数をサポートして
いるため、HAL ベースのプログラムはデバイス固有の操作を要求できま
す。具体的には、ioctl() 操作は、タイムアウト周期を制御したり、ホ
ストが接続されているかどうかを検出するために使用できます。高速ドラ
イバでは、ioctl() 操作は表 9–1 に示すとおり定義されています。
表 9–1. 高速ドライバ専用の JTAG UART ioctl() 操作
要求
意味
TIOCSTIMEOUT
ドライバがホストが接続されていないと判断するま
でのタイムアウト(秒単位)を設定します。タイムア
ウトを 0 にすると、ターゲットはホストが常時接続さ
れているとみなします。渡される ioctl の arg パラ
メータは、整数へのポインタである必要があります。
TIOCGCONNECTED
整数 arg パラメータは、ホストが接続されターミナル
として動作している(1)か、または接続されていな
い(0)かを示す値に設定します。渡される ioctl
の arg パラメータには、整数へのポインタである必要
があります。
ioctl() 関数の詳細については、
「Nios II ソフトウェア開発ハンドブッ
ク」を参照してください。
ソフトウェア・ファイル
JTAG UART コアには、以下のソフトウェア・ファイルが付属していま
す。これらのファイルは、ハードウェアへの低水準インタフェースを定
義し、HAL ドライバを提供します。アプリケーション開発者がこれらの
ファイルを変更してはなりません。
■
altera_avalon_jtag_uart_regs.h −このファイルは、コアのレジスタ・
マップを定義し、低水準ハードウェアにアクセスするための記号定
数を提供します。このファイル内の記号は、デバイス・ドライバ関
数によってのみ使用されます。
■ altera_avalon_jtag_uart.h、altera_avalon_jtag_uart.c −これらのファ
イルは、HALシステム・ライブラリ・デバイス・ドライバを実装します。
9–12
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 JTAG UART コア
ホスト PC を介した JTAG UART コアへのアクセス
PC から JTAG UART コアにアクセスするには、ホスト・ソフトウェア
が必要です。Nios II IDE は、JTAG UART コアをサポートし、コンソー
ル・ウィンドウにキャラクタ I/O を表示します。また、アルテラは JTAG
UART コアとのターミナル・セッションをオープンする、nios2-terminal
と呼ばれるコマンドライン・ユーティリティもサポートしています。
詳細については、「Nios II ソフトウェア開発ハンドブック」と Nios II
IDE のオンライン・ヘルプを参照してください。
レジスタ・マップ
HAL API を使用するプログラマが、JTAG UART コアに対応するレジス
タを介して直接アクセスすることはありません。一般に、レジスタ・マッ
プはコアのデバイス・ドライバを記述するプログラマにとってのみ有用
です。
アルテラが提供する HAL デバイス・ドライバは、デバイス・
レジスタに直接アクセスします。デバイス・ドライバを記述す
る場合に、HAL ドライバが同じデバイスに対してアクティブで
あれば、記述したドライバは衝突して、動作できません。
表 9–2 に、JTAG UART コアのレジスタ・マップを示します。デバイス・
ドライバは、2 つの 32 ビット・メモリ・マップド・レジスタを介してコ
アの制御と通信を行います。
表 9–2. JTAG UART コアのレジスタ・マップ
ビットの説明
オフ
レジスタ名 R/W
セット
31
0
data
RW
RAVAIL
RVALID
1
control
RW
WSPACE
(1)
...
16
15
14 ... 11
10
9
8
7 ...
2
1
0
DATA
(1)
AC
WI RI
(1)
WE RE
表 9–2 の注:
(1) 予約読み出し値は不定です。ゼロを書き込みます。
Altera Corporation
2004 年 12 月
9–13
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
data レジスタ
エンベデッド・ソフトウェアは、data レジスタを介してリード FIFO お
よびライト FIFO にアクセスします。表 9–3 で、各ビットの機能を説明
します。
表 9–3. data レジスタのビット
ビット番号
ビット /
フィールド名
読み出し(R)/
書き込み(W)/
クリア(C)
0 .. 7
DATA
R/W
JTAG コアとの間で転送する値。書き込みの場合、DATA
フィールドはライト FIFO に書き込まれるキャラクタで
す。読み出しの場合、DATA フィールドはリード FIFO か
ら読み出されるキャラクタです。
15
RVALID
R
DATA フィールドが有効かどうかを示します。RVALID=1
の場合、DATA フィールドは有効、その他の場合は不定
です。
16 .. 32
RAVAIL
R
リード FIFO に残っているキャラクタの数(この読み出
し後)。
説明
data レジスタからの読み出しでは、FIFO(利用可能な場合)から最初
のキャラクタが DATA フィールドに返されます。また、読み出しでは
FIFO に残ったキャラクタ数に関する情報が RAVAIL フィールドに返さ
れます。data レジスタに書き込むと、DATA フィールドの値がライト
FIFO に格納されます。ライト FIFO が満杯の場合、キャラクタは失われ
ます。
control レジスタ
エンベデッド・ソフトウェアは、control レジスタを介して、JTAG
UART コアの割り込み生成と読み出しステータス情報を制御します。表
9–4 に、各ビットの機能を説明します。
表 9–4. control レジスタのビット ( 1 / 2 )
ビット番号
読み出し(R)/
ビット /
書き込み(W)/
フィールド名
クリア(C)
説明
0
RE
R/W
リード割り込み用の割り込みイネーブル・ビット。
1
WE
R/W
ライト割り込み用の割り込みイネーブル・ビット。
9–14
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 JTAG UART コア
表 9–4. control レジスタのビット ( 2 / 2 )
読み出し(R)/
ビット /
書き込み(W)/
ビット番号
フィールド名
クリア(C)
説明
8
RI
R
リード割り込みがペンディング中であることを示します。
9
WI
R
ライト割り込みがペンディング中であることを示します。
10
AC
R/C
ビットのクリア以降に、JTAG アクティビティが発生したこ
とを示します。AC に 1 を書き込むと、0 にクリアされます。
16 .. 32
WSPACE
R
ライト FIFO 内で利用できるスペースの数。
control レジスタから読み出すと、リード FIFO およびライト FIFO の
ステータスが返されます。レジスタへの書き込みは、割り込みイネーブ
ル / ディセーブル、または AC ビットのクリアに使用できます。
RE ビットと WE ビットはそれぞれ、リード FIFO とライト FIFO に対す
る割り込みをイネーブルします。WI ビットと RI ビットは、割り込みイ
ネーブル・ビット(WE と RE)の値によって有効になる割り込みソース
のステータスを示します。エンベデッド・ソフトウェアは、RI と WI を
調べて、どの条件で IRQ が生成されたかを判断できます。詳細について
は、9–15 ページの「割り込み動作」を参照してください。
AC ビットは、ホスト PC 上のアプリケーションが、JTAG インタフェー
スを介して JTAG UART コアをポーリングしたことを示します。
AC ビッ
トは一度設定されると、Avalon インタフェースを介して明示的にクリ
アされるまで設定状態のままです。AC に 1 を書き込むと、クリアされ
ます。エンベデッド・ソフトウェアは、AC ビットを調べてホスト PC へ
の接続が存在するかどうかを判断できます。接続が存在しない場合、ソ
フトウェアは JTAG データ・ストリームを無視するように選択できます。
ホスト PC に転送するデータがない場合は、1 秒に 1 回の低い頻度で、
JTAG UART コアをポーリングするように選択できます。JTAG ダウン
ロード・ケーブルを使用するその他のホスト・ソフトウェアによって遅
延が発生すると、ポーリング間で最大 10 秒間の遅延が発生することがあ
ります。
割り込み動作
JTAG UART コアは、個々の割り込み条件のいずれかがペンディングさ
れイネーブルされると、割り込みを生成します。
Altera Corporation
2004 年 12 月
9–15
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
デバイス・ドライバのプログラマは、ホスト PC に対する帯域幅
性能を重視する場合には、割り込み動作を考慮する必要がありま
す。Nios II 開発キットに付属するデザイン例と JTAG ターミナ
ル・プログラムは、事前に最適な割り込み動作でコンフィギュ
レーションされています。
JTAG UART コアには、ライト割り込みとリード割り込みの 2 種類の割
り込みがあります。control レジスタの WE ビットと RE ビットは、割
り込みをイネーブル / ディセーブルします。
ライト FIFO がほぼ空になると、コアはライト割り込みをアサートでき
ます。
「ほぼ空」のスレッショルド値、write_threshold は、システム生成
時に指定され、エンベデッド・ソフトウェアでは変更できません。ライ
ト FIFO に存在するキャラクタの数が write_threshold 以下であれば、ラ
イ ト 割 り 込 み 状 態 が 設 定 さ れ ま す。こ の 状 態 は、ラ イ ト FIFO に
write_threshold を超えるキャラクタ数を入れるとクリアされます。エン
ベデッド・ソフトウェアは、ライト FIFO を充填した後でのみライト割
り込みをイネーブルしなければなりません。送信するキャラクタが残っ
ていない場合、エンベデッド・ソフトウェアはライト割り込みをディセー
ブルする必要があります。
リード FIFO がほぼ満杯になると、コアはリード割り込みをアサートで
きます。
「ほぼ満杯」のスレッショルド値、read_threshold は、システム
生成時に指定され、エンベデッド・ソフトウェアでは変更できません。
リード FIFO に残っているスペースが、read_threshold 以下になると、リー
ド割り込み条件が設定されます。また、リード割り込み条件は、リード
FIFO に最低 1 つのキャラクタが存在し、それ以上のキャラクタが充填さ
れないと予想される場合にも設定されます。リード割り込みは、リード
FIFO からキャラクタを読み出すとクリアされます。
最適な性能を得るには、割り込みスレッショルドがエンベデッド・ソフ
トウェアの割り込み応答時間に一致しなければなりません。例えば、
JTAG クロックが 10 MHz の場合、ホスト PC によって 1µ 秒ごとに新し
いキャラクタが供給(消費)されます。スレッショルドが 8 の場合、割
り込み応答時間は 8µ より小さくする必要があります。割り込み応答時間
が長すぎると性能が低下します。短すぎる場合は、必要以上の頻度で割
り込みが発生します。
Nios II プロセッサ・システムの場合、リードおよびライト・ス
レッショルドは 8 が適切なデフォルト値です。
9–16
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
10. Avalon インタフェース対応
UART コア
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51010-1.1
コアの概要
Avalon™ インタフェース付き Universal Asynchronous Receiver/
Transmitter コア(「UART コア」)は、アルテラ FPGA 上のエンベデッ
ド・システムと外部デバイスとの間で、キャラクタ・ストリームをシリ
アル通信する手段を実装しています。このコアは、RS-232 プロトコル・
タイミングを実装し、可変ボー・レート、パリティ、ストップ・ビット、
データ・ビット、およびオプションの RTS/CTS フロー制御信号を提供
します。機能セットはコンフィギュレーション可能であり、設計者は特
定のシステムに必要な機能のみ実装できます。
コアはレジスタにマップされたシンプルな Avalon スレーブ・インタ
フェースを備えており、このインタフェースによって、Avalon マスタ・
ペリフェラル(Nios® II プロセッサなど)は、コントロール・レジスタ
およびデータ・レジスタを読み書きするだけで、コアと通信できます。
UART コアは SOPC Builder に対応しており、SOPC Builder で生成され
たどのシステムにも容易に統合できます。
Altera Corporation
2004 年 9 月
10–1
機能の説明
機能の説明
図 10-1 に、UART コアのブロック図を示します。
図 10-1.代表的なシステムにおける UART コアのブロック図
アルテラFPGA
UARTコア
ボー・レート除数
クロック
divisor
CTS
status
txdata
dataavailable
control
RXD
シフト・
レジスタ
TXD
RS-232
コネクタ
データ
オンチップ・
ロジックに
接続された IRQ
Avalon信号
endofpacket
シフト・
レジスタ
レベル・
シフタ
rxdata
アドレス
RTS
readyfordata
endofpacket
このコアには、ユーザが管理可能な以下の 2 つの部分があります。
■
■
Avalon スレーブ・ポートを介してアクセスされるレジスタ・ファイル
RS-232 信号、RXD、TXD、CTS、および RTS
Avalon スレーブ・インタフェースとレジスタ
UART コアは、内部レジスタ・ファイルへの Avalon スレーブ・インタ
フェースを提供します。UART コアへのユーザ・インタフェースは、
control、status、rxdata、txdata、divisor、および endofpacket
の 6 つの 16 ビット・レジスタで構成されています。Nios II プロセッサな
どのマスタ・ペリフェラルは、レジスタにアクセスしてコアを管理し、さ
らにシリアル接続によってデータを転送します。
UART コアは、新しいデータを受信するかまたはコアが他のキャラクタ
を送信可能な状態になると割り込みを要求できるアクティブ High の割
り込み要求(IRQ)出力を供給します。詳細については、10–23 ページ
の「割り込み動作」を参照してください。
10–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
Avalon スレーブ・ポートはストリーミング転送が可能です。UART コ
アは、ストリーミング DMA(Direct Memory Access)ペリフェラルと
連携して使用して、例えば UART コアとメモリの間で連続データ転送を
自動化することができます。
詳細については、第 6 章の「Avalon インタフェース対応 DMA コント
ローラ」を参照してください。Avalon インタフェースの詳細について
は、
「Avalon Interface Specification Reference Manual」を参照してくだ
さい。
RS-232 インタフェース
UART コアは、RS-232 非同期送信および受信ロジックを実装していま
す。UART コアは、TXD ポートと RXD ポートを介して、シリアル・デー
タを送受信します。大部分のアルテラ FPGA ファミリの I/O バッファ
は、RS-232 の電圧レベルに適合していないため、RS-232 コネクタから
の信号で直接ドライブすると損傷することがあります。RS-232 電圧信号
規格に適合させるには、FPGA I/O ピンと外部 RS-232 コネクタとの間
に、外部レベル・シフト・バッファ(MAX3237 など)が必要です。
UART コアはロジック 0 をマークに、ロジック 1 をスペースに使用しま
す。FPGA 内部のインバータを使用し、任意の RS-232 信号の極性を必要
に応じて反転させることができます。
トランスミッタ・ロジック
UART トランスミッタは、7 ビット、8 ビット、または 9 ビットの txdata
ホールディング・レジスタと、対応する 7 ビット、8 ビット、または 9
ビットの送信シフト・レジスタで構成されています。Avalon マスタ・ペ
リフェラルは、Avalon スレーブ・ポートを介して txdata ホールディ
ング・レジスタに書き込みます。送信シフト・レジスタは、シリアル送
信シフト動作が実行されていないときに、txdata レジスタから自動的
にロードされます。送信シフト・レジスタは、TXD 出力を直接供給しま
す。データは、最下位ビット(LSB)から先に TXD にシフト・アウトさ
れます。
これらの 2 つのレジスタはダブル・バッファリングを提供します。マス
タ・ペリフェラルは、以前に書き込まれたキャラクタがシフト・アウト
される間に、txdata レジスタに新しい値を書き込むことができます。
マスタ・ペリフェラルは、status レジスタのトランスミッタ・レディ
(trdy)ビット、トランスミッタ・シフト・レジスタ・エンプティ(tmt)
ビット、およびトランスミッタ・オーバラン・エラー(toe)ビットを読
み出すことによって、トランスミッタのステータスをモニタできます。
Altera Corporation
2004 年 9 月
10–3
Nios II プロセッサ・リファレンス・ハンドブック
機能の説明
トランスミッタ・ロジックは、RS-232 規格の要件に従って、シリアル
TXD データ・ストリームに正しい数のスタート・ビット、ストップ・ビッ
ト、およびパリティ・ビットを自動的に挿入します。
レシーバ・ロジック
UART レシーバは、7 ビット、8 ビット、または 9 ビットのレシーバ・シ
フト・レジスタと、対応する 7 ビット、8 ビット、または 9 ビットの
rxdata ホールディング・レジスタで構成されています。Avalon マス
タ・ペリフェラルは、Avalon スレーブ・ポートを介して rxdata ホー
ルディング・レジスタを読み出します。rxdata ホールディング・レジ
スタは、新しいキャラクタを完全に受信するたびに、レシーバ・シフト・
レジスタから自動的にロードされます。
これらの 2 つのレジスタは、ダブル・バッファリングを提供します。
rxdata レジスタは、後続のキャラクタがレシーバ・シフト・レジスタ
にシフト・インされている間、以前に受信したキャラクタを保持できま
す。
マスタ・ペリフェラルは、status レジスタのリード・レディ(rrdy)
ビット、レシーバ・オーバラン・エラー(roe)ビット、ブレーク検出
(brk)ビット、パリティ・エラー(pe)ビット、およびフレーミング・
エラー(fe)ビットを読み出すことによって、レシーバのステータスを
モニタできます。レシーバ・ロジックは、RS-232 規格で要求されるシリ
アル RXD ストリーム内の正しい数のスタート・ビット、ストップ・ビッ
ト、およびパリティ・ビットを自動的に検出します。レシーバ・ロジッ
クは、受信したデータで 4 つの例外条件(フレーム・エラー、パリティ・
エラー、受信オーバラン・エラー、およびブレーク)をチェックし、対
応するステータス・レジスタ・ビット(fe、pe、roe、brk)を設定します。
ボー・レートの生成
UART コアの内部ボー・クロックは、Avalon クロック入力から供給さ
れます。内部ボー・クロックはクロック分周器によって生成されます。
除数値は、以下のいずれかで決まります。
■
■
システム生成時に指定された定数
divisor レジスタに格納された 16 ビット値
divisor レジスタは、オプションのハードウェア機能です。システム生
成時にオフにすると除数値は固定され、ボー・レートは変更できません。
10–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
デバイスおよ
びツールの
サポート
UART コアは、Stratix® や Cyclone™ デバイス・ファミリなど、すべての
アルテラ FPGA をターゲットにすることができます。
SOPC Builder
でのコアの
インスタンス化
UART をハードウェアでインスタンス化すると、各 UART ごとに少なく
とも RXD 入力と TXD 出力の 2 つの I/O ポートが作成されます。オプショ
ンにより、ハードウェアにはフロー制御信号の CTS 入力と RTS 出力を
含めることができます。
ハードウェア機能セットは、UART コアの SOPC Builder コンフィギュ
レーション・ウィザードで設定されます。以下のセクションでは、利用
可能なオプションについて説明します。
コンフィギュレーション設定
このセクションでは、コンフィギュレーション設定について説明します。
ボー・レート・オプション
UART コアは RS-232 接続用の標準的なボー・レートを実装できます。
ボー・レートは以下の 2 つの方法のいずれかでコンフィギュレーション
できます。
■
Fixed rate −ボー・レートはシステム生成時に固定され、Avalon スレー
ブ・ポートを介して変更することはできません。
■ Variable rate −ボー・レートは、divisor レジスタに保持されるク
ロック除数に基づいて変更可能です。マスタ・ペリフェラルは、
divisor レジスタに新しい値を書き込んでボー・レートを変更しま
す。
ボー・レートは、Avalon インタフェースが供給するクロック周
波数に基づいて計算されます。UART コア・ハードウェアを再生
成しないで、ハードウェアでシステム・クロック周波数を変更す
ると、不正な信号が発生します。
Baud Rate (bps) 設定
Buad Rate 設定は、リセット後のデフォルト・ボー・レートを決定しま
す。Buad Rate オプションは、標準的なプリセット値(9600、57600、
115200 bps など)を提供しますが、手動で任意のボー・レートを入力す
ることもできます。
Altera Corporation
2004 年 9 月
10–5
Nios II プロセッサ・リファレンス・ハンドブック
SOPC Builder でのコアのインスタンス化
ボー・レート値は、希望のボー・レートを実装するのに適切なクロック
除数値を計算するために使用されます。ボー・レートと除数値には、以
下の関係があります。
除数 = int((クロック周波数)/(ボー・レート)+ 0.5)
ボー・レート = (クロック周波数)/(除数 + 1)
Baud Rate Can Be Changed By Software 設定
この設定をオンにすると、ハードウェアにはアドレス・オフセット 4 の
位置に 16 ビットの divisor レジスタが搭載されます。divisor レジ
スタは書き込み可能なため、このレジスタに新しい値を書き込むとボー・
レートを変更できます。
この設定をオフにすると、UART ハードウェアに divisor レジスタは
搭載されません。UART ハードウェアは、一定の(変更不能な)ボー除
数を実装し、この値はシステム生成後には変更できません。この場合、
アドレス・オフセット 4 に書き込んでも効果はなく、またアドレス・オ
フセット 4 から読み出すと結果は不定になります。
データ・ビット、ストップ・ビット、パリティ
UART コアのパリティ、データ・ビット、およびストップ・ビットはコ
ンフィギュレーション可能です。これらの設定はシステム生成時に固定
されるため、レジスタ・ファイルで変更することはできません。以下の
設定が選択できます。
Data Bits 設定
表 10–1 を参照してください。
表 10–1. データ・ビット設定
設定
許容値
説明
Data Bits
7, 8, 9
この設定は、txdata、rxdata、および endofpacket レジスタの幅を
決定します。
Stop Bits
1, 2
この設定はコアが各キャラクタとともにストップ・ビットを 1 ビット送信す
るか、または 2 ビット送信するかを決定します。Stop Bits の設定に関係な
く、コアは常に最初のストップ・ビット位置で受信トランザクションを終了
し、以降のすべてのストップ・ビットを無視します。
Parity
None, Even, Odd この設定は、UART がパリティ・チェック付きキャラクタを送信するかどう
か、また UART が受信したキャラクタにパリティ・チェックが付加されてい
ることを予期するかどうかを決定します。詳細については、次項を参照して
ください。
10–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
Parity 設定
Parity が None に設定されている場合、送信ロジックはパリティ・ビッ
トのないデータを送信し、受信ロジックは受信するデータにパリティ・
ビットが含まれていないものと想定します。パリティを None にすると、
status レジスタの pe(パリティ・エラー)ビットは実装されず、読み出
すと値は常に 0 になります。
Parity が Odd または Even に設定されていると、送信ロジックは必要な
パリティ・ビットを計算し、送信 TXD ビットストリームにこのパリティ・
ビットを挿入し、受信ロジックは受信 RXD ビットストリームでこのパリ
ティ・ビットをチェックします。レシーバが不正なパリティを持つデー
タを検出した場合、status レジスタの pe が 1 に設定されます。パリティ
が Even のとき、パリティ・ビットはキャラクタに 1 のビットが偶数個
ある場合には 1、そうでない場合は 0 になります。同様に、パリティが
Odd のとき、パリティ・ビットはキャラクタに 1 のビットが奇数個ある
場合には 1 になります。
フロー制御
以下のフロー制御オプションが選択できます。
Include CTS/RTS pins and control register bits
この設定をオンにすると、UART ハードウェアには以下が搭載されま
す。
■
■
■
■
■
■
CTS_N(CTS の負論理)入力ポート
RTS_N(RTS の負論理)出力ポート
status レジスタの CTS ビット
status レジスタの DCTS ビット
control レジスタの RTS ビット
control レジスタの IDCTS ビット
これらのハードウェア機能に基づいて、Avalon マスタ・ペリフェラル
は CTS を検出し、RTS フロー制御信号を送信できます。CTS 入力ポート
および RTS 出力ポートは、status レジスタおよび control レジスタ
のビットに直結されるため、コアのその他の部分に直接影響を与えるこ
とはありません。
Include CTS/RTS pins and control register bits 設定をオフにすると、上
記のハードウェアはコアに搭載されません。コントロール / ステータス・
ビットの CTS、DCTS、IDCTS、および RTS は実装されず、読み出すと
値は常に 0 になります。
Altera Corporation
2004 年 9 月
10–7
Nios II プロセッサ・リファレンス・ハンドブック
SOPC Builder でのコアのインスタンス化
ストリーミング・データ(DMA)コントロール
UART コアの Avalon インタフェースは、オプションによってストリー
ミング Avalon 転送を実装します。これによって、Avalon マスタ・ペリ
フェラルは、UART コアが別のキャラクタを受け入れる準備が整ったと
きにのみデータを書き込み、コアに利用可能なデータが存在するときに
のみデータを読み出すことが可能になります。また、UART コアにはオ
プションで EOP レジスタを搭載することもできます。
Include end-of-packet register
この設定をオンにすると、UART コアに以下が搭載されます。
■
アドレス・オフセット 5 における 7 ビット、8 ビット、または 9 ビット
の endofpacket レジスタ。データ幅は Data Bits 設定によって決定
されます。
■ status レジスタの eop ビット
■ control レジスタの ieop ビット
■ システム内の他のマスタ・ペリフェラルとの間でストリーミング・デー
タの転送をサポートする、Avalon インタフェースの endofpacket 信
号。
EOP(End-of-packet)検出によって、UART コアはストリーミング可能
な Avalon マスタとのストリーミング・データ・トランザクションを終
了できます。EOP 検出を DMA コントローラと組み合わせて使用すると、
例えば、受信 RXD ストリームで指定されたキャラクタが検出されるま
で、受信したキャラクタを自動的にメモリに書き込む UART を実現する
ことができます。終端(EOP)キャラクタの値は、endofpacket レジ
スタで決定されます。
EOP レジスタがディセーブルされると、UART コアには上記のリソース
は搭載されません。endofpacket レジスタに書き込んでも効果はなく、
読み出した値は不定です。
シミュレーション設定
UART コアのロジックが生成されると、同時にシミュレーション・モデル
も構築されます。シミュレーション・モデルを利用すれば、UART コアを
使用するシステムのシミュレーションが簡略化および高速化されます。シ
ミュレーション設定を変更しても、ハードウェアの UART コアの動作に影
響はありません。設定は機能シミュレーションにのみ作用します。
以下の設定を使用して Nios II システムをシミュレートする方法の例は、
「AN 351: Simulating Nios II Embedded Processor Designs」を参照して
ください。
10–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
RXD 入力キャラクタ・ストリームのシミュレーション
ユーザはシミュレートされたシステム・リセットで、RXD ポートへの入
力がシミュレートされるキャラクタ・ストリームを入力できます。UART
コアのコンフィギュレーション・ウィザードは任意のキャラクタ文字列
を受け取り、後でこの文字列が UART シミュレーション・モデルに組み
込まれます。リセット後、コアが新しいデータを受け入れることができ
るようになると、この文字列は RXD ポートにキャラクタ単位で入力され
ます。
インタラクティブ・ウィンドウの準備
システム生成時に、UART コア・ジェネレータはシミュレーション中に
UART モデルとの連携を容易にする ModelSim マクロを作成できます。
以下のオプションが用意されています。
Create ModelSim Alias to open streaming output window
TXD ポートからのすべての出力を表示するウィンドウを開くための
ModelSim マクロが作成されます。
Create ModelSim Alias to open interactive stimulus window
RXD ポートに対するスティミュラスを受け入れるウィンドウを開くため
の ModelSim マクロが作成されます。このウィンドウはウィンドウ内で
入力されたキャラクタを RXD ポートに送信します。
トランスミッタ・ボー・レートのシミュレーション
多くの場合、RS-232 の送信レートは、システム内の他のプロセスよりも
低速であり、実際のボー・レートで機能モデルをシミュレートする利点
はほとんどありません。例えば、115,200 bps では 1 キャラクタ転送する
のに、標準で数千クロック・サイクルを要します。UART シミュレー
ション・モデルは、一定クロック除数 2 で動作することができます。こ
れにより、シミュレートされる UART は、システム・クロック速度の
1/2、すなわち約 20 クロック・サイクルごとに 1 キャラクタを転送しま
す。シミュレートされるトランスミッタのボー・レートには、以下のオ
プションのいずれかを選択できます。
■
accelerated (use divisor = 2) − TXD は、シミュレーションで 2 クロッ
ク・サイクルごとに 1 ビットを送出します。
■ actual (use true baud divisor) − TXD は、
divisor レジスタで決定さ
れる実際のボー・レートで送信します。
Altera Corporation
2004 年 9 月
10–9
Nios II プロセッサ・リファレンス・ハンドブック
ハードウェア・シミュレーションでの検討事項
ハードウェア・
シミュレー
ションでの
検討事項
シミュレーション機能は、ModelSim シミュレータを使用するときに、
Nios、Nios II または Excalibur™ プロセッサ・システムのシミュレーショ
ンを容易にするために作成されました。各プロセッサのドキュメントに
は、これらの機能の推奨される使用法が記載されています。その他の用
途にも使用できる可能性はありますが、その場合はユーザがカスタム・
シミュレーション・プロセスを作成するために一層の作業が必要です。
シミュレーション・モデルは UART コアのトップ・レベル HDL ファイ
ルで実装され、合成可能な HDL およびシミュレーション HDL は同じ
ファイルで実装されます。シミュレーション機能は、HDL コードの特定
のセクションを合成ツールに対してのみ開示する translate on および
translate off 合成オプションを使用して実装されます。
アルテラの推奨シミュレーション手順を使用する場合は、シミュレー
ションオプションを編集しないでください。シミュレーションオプショ
ンを変更してカスタム・シミュレーション・フローを作成する場合は、
SOPC Builder がシステム生成時に既存のファイルを上書きすることに
留意する必要があります。変更内容が上書きされないよう注意してくだ
さい。
Nios II プロセッサ・システムでの UART コアのシミュレーションの詳
細については、「AN 351: Simulating Nios II Processor Designs」を参照
してください。Nios エンベデッド・プロセッサ・システムでの UART
コアのシミュレーションの詳細については、
「AN 189: Simulating Nios II
Embedded Processor Designs」を参照してください。
ソフトウェア・
プログラミン
グ・モデル
以下のセクションでは、ハードウェアにアクセスするためのレジスタ・
マップやソフトウェア宣言など、UART コアのソフトウェア・プログラ
ミング・モデルについて説明します。アルテラは、Nios II プロセッサ・
ユーザ向けに printf() や getchar() などの ANSI C 標準ライブラリ
関数を使用して、UART コアへのアクセスを可能にする HAL
(Hardware
Abstraction Layer)システム・ライブラリ・ドライバを提供しています。
HAL システム・ライブラリ・サポート
アルテラが提供するドライバは、Nios II システム用の HAL システム・
ライブラリに統合される HAL キャラクタ・モード・デバイス・ドライ
バを実装します。HAL ユーザは、UART レジスタにせずに、使い慣れ
た HAL API および ANSI C 標準ライブラリを介して UART にアクセス
することができます。HAL ユーザによる UART のハードウェア依存部
分の制御を可能にする、ioctl() 要求が定義されています。
10–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
ユーザ・プログラムで HAL デバイス・ドライバを使用して
UART ハードウェアにアクセスする場合、デバイス・レジスタ
に直接アクセスすると、ドライバの正常な動作が妨害されます。
Nios II プロセッサ・ユーザ向けに、HAL システム・ライブラリ API は、
UART コアの機能への完全なアクセスを提供します。Nios II プログラム
は UART コアをキャラクタ・モード・デバイスとして扱い、ANSI C 標
準ライブラリ関数を使用してデータを送受信します。
CTS/RTS コントロール信号が SOPC Builder でイネーブルされていると
きには、ドライバはそれらの信号をサポートします。10–12 ページの「ド
ライバ・オプション:高速および小型サイズの実装」
を参照してください。
以下のコードは、printf() を使用して stdout にメッセージを出力する
最もシンプルな使用法を示します。この例では、SOPC Builder システム
に UART コアが搭載され、HAL システム・ライブラリは、このデバイ
スを stdout に使用するようにコンフィギュレーションされています。
例 : UART コアへの stdout としてのキャラクタの出力
#include <stdio.h>
int main ()
{
printf("Hello world.\n");
return 0;
}
以下のコードは、C 標準ライブラリを使用して、UART デバイスから
キャラクタを読み出す方法と、UART デバイスへメッセージを送信する
方法を示します。この例では、SOPC Builder システムには、uart1 と
いう名前の UART コアが搭載されていますが、これは必ずしも stdout
デバイスとしてコンフィギュレーションされるとは限りません。この場
合、プログラムはこのデバイスを HAL ファイル・システムの他のノー
ドと同じように扱います。
Altera Corporation
2004 年 9 月
10–11
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
例 : キャラクタの送信と受信
/* キャラクタ「t」と「v」を認識するシンプルなプログラム */
#include <stdio.h>
#include <string.h>
int main ()
{
char* msg = "Detected the character 't'.\n";
FILE* fp;
char prompt = 0;
fp = fopen ("/dev/uart1", "r+"); // 読み出しと書き込み用にファイルを開く。
if (fp)
{
while (prompt != 'v')
{ // 「v」を受信するまでループする。
prompt = getc(fp); // UART からキャラクタを取得する。
if (prompt == 't')
{ // キャラクタが「t」なら、メッセージを出力する。
fwrite (msg, strlen (msg), 1, fp);
}
}
fprintf(fp, "Closing the UART file.\n");
fclose (fp);
}
return 0;
}
HAL システム・ライブラリの詳細については、
「Nios II ソフトウェア開
発ハンドブック」で解説しています。
ドライバ・オプション:高速および小型サイズの実装
多様なタイプのシステムの要件に対応するために、UART ドライバには
高速バージョンと小型バージョンの 2 種類が用意されています。デフォ
ルトでは、高速型動作が使用されます。高速ドライバと小型ドライバの
どちらも、C 標準ライブラリ関数と HAL API を完全にサポートしてい
ます。
高速ドライバは割り込み駆動で実行されるため、デバイスがデータの送
信または受信の準備が整っていないときにも、プロセッサは他のタスク
を実行できます。UART のデータ・レートはプロセッサと比較して低速
なため、一時的に他のタスクを実行する可能性があるシステムに対して
は、高速ドライバによって大きな性能上の利点が得られます。
10–12
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
小型ドライバは、各キャラクタを送受信する前に UART ハードウェア
を待機するポーリング形式を実装したものです。スモール・フットプリ
ント・ドライバを有効にするには、以下の 2 つの方法があります。
■
HAL システム・ライブラリ・プロジェクトのスモール・フットプ
リント設定をオンにします。このオプションは、システム内のすべ
てのデバイス用のデバイス・ドライバにも作用します。
■
プリプロセッサ・オプション -DALTERA_AVALON_UART_SMALL を指
定します。このオプションを使用すると、他のデバイスのドライバ
に影響を与えずに、小型の UART ドライバをポーリング形式で実装
できます。
HAL プロパティおよびプリプロセッサ・オプションの設定方法に関する
詳細については、Nios II IDE のヘルプ・システムを参照してください。
CTS/RTS フロー制御信号がハードウェアでイネーブルされた場合、高
速ドライバは自動的にそれらの信号を使用します。小型ドライバはこれ
らの信号を常に無視します。
ioctl() 操作
UART ドライバは ioctl() 関数をサポートしているため、HAL ベース
のプログラムはデバイス固有の操作を要求できます。表 10–2 に、UART
ドライバがサポートする操作要求を定義します。
表 10–2. UART ioctl() 操作
要求
Altera Corporation
2004 年 9 月
意味
TIOCEXCL
排他的アクセス用にデバイスをロックします。このファイ
ル記述子が閉じられるか、または TIOCNXCL ioctl 要求
を使用してロックが解放されるまでは、このデバイスに対
してさらに open() を呼び出しても失敗します。この要求
を成功させるには、このデバイスに対する既存のファイル
記述子が存在しないことが必要です。 ioctl の「arg」パ
ラメータは無視されます。
TIOCNXCL
前の排他的アクセスのロックを解放します。詳細について
は、上記のコメントを参照してください。 ioctl の「arg」
パラメータは無視されます。
10–13
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 10–3 に示すとおり、高速ドライバに対してのみオプションで追加の操作
要求が実行できます。ユーザのプログラムでこれらの操作を有効にするに
は、プリプロセッサ・オプション -DALTERA_AVALON_UART_USE_IOCTL
を設定する必要があります。
表 10–3. 高速ドライバのみを対象としたオプションの UART ioctl()
操作
要求
意味
TIOCMGET
入力の termios 構造体(1)の内容に情報を入力することに
よって、デバイスの現在の設定を返します。この構造体へ
のポインタは、 ioctl の「opt」パラメータの値として供
給されます。
TIOCMSET
入力の termios 構造体(1)に格納された値に従って、デバ
イスの設定を指定します。この構造体へのポインタは、
ioctl の「arg」パラメータの値として供給されます。
表 10–3 の注:
(1) termios 構造体は、Newlib C 標準ライブラリによって定義されています。
この定義はファイル <Nios II キットのパス >
/components/altera_hal/HAL/inc/sys/termios.h にあります。
ioctl() 関数の詳細については、
「Nios II ソフトウェア開発ハンドブッ
ク」を参照してください。
制限
UART コアの HAL ドライバは endoofpacket レジスタをサポートしてい
ません。詳細については、10–15 ページの「レジスタ・マップ」を参照
してください。
ソフトウェア・ファイル
UART コアには、以下のソフトウェア・ファイルが付属しています。こ
れらのファイルは、ハードウェアへの低水準インタフェースを定義し、
HAL ドライバを提供します。アプリケーション開発者がこれらのファイ
ルを変更してはなりません。
10–14
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
■
altera_avalon_uart_regs.h −このファイルは、コアのレジスタ・マッ
プを定義し、低水準ハードウェアにアクセスするための記号定数を
提供します。このファイル内の記号は、デバイス・ドライバ関数に
よってのみ使用されます。
■ altera_avalon_uart.h、altera_avalon_uart.c −これらのファイルは、
HAL システム・ライブラリ用の UART コア・デバイス・ドライバを
実装します。
レガシー SDK ルーチン
UART コアは、第 1 世代の Nios プロセッサ用のレガシー SDK ルーチンで
もサポートされています。これらのルーチンの詳細については、第 1 世代
の Nios プロセッサに付属する UART のドキュメントを参照してください。
レガシーSDK に基づいてプログラムを HAL システム・ライブラリ API に
アップグレードする方法の詳細については、
「AN 350: Upgrading Nios
Processor Systems to the Nios II Processor」を参照してください。
レジスタ・マップ
HAL API または第 1 世代の Nios プロセッサ用のレガシー SDK を利用
するプログラマが、レジスタを使用して UART コアに直接アクセスする
ことはありません。一般に、レジスタ・マップはコアのデバイス・ドラ
イバを記述するプログラマにとってのみ有用です。
アルテラが提供する HAL デバイス・ドライバは、デバイス・
レジスタに直接アクセスします。デバイス・ドライバを記述す
る場合に、HAL ドライバが同じデバイスに対してアクティブで
あれば、記述したドライバは衝突して、動作できません。
Altera Corporation
2004 年 9 月
10–15
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 10–4 に、UART コアのレジスタ・マップを示します。デバイス・ド
ライバは、メモリ・マップド・レジスタを介してコアの制御と通信を行
います。
表 10–4. UART コアのレジスタ・マップ
オフ
レジスタ名
セット
R/
W 15 . . .13 12
説明 / レジスタ・ビット
11
10
9
8
7
6
5
0
rxdata
RO
(1)
(2) (2)
受信データ
1
txdata
WO (1)
(2) (2)
送信データ
2
status (3)
RW (1)
eop
e
trdy
3
control
RW (1)
ieop rts idcts trbk ie
4
divisor (4)
RW ボー・レートの除数
5
endofpacket RW (1)
cts dcts (1)
rrdy
tmt
4
3
2
toe
roe
brk
irrdy itrdy itmt itoe iroe ibrk
(2) (2)
1
0
fe
pe
ife ipe
EOP 値
(4)
表 10–4 の注:
(1) これらのビットは予約済みです。読み出すと不定値が返されます。ゼロを書き込みます。
(2) これらのビットが存在するかどうかは、Data Width ハードウェア・オプションによって決まります。存在しな
い場合、これらのビットを読み出すと値はゼロになり、書き込んでも効果はありません。
(3) status レジスタにゼロを書き込むと、dcts、e、toe、roe、brk、fe、および pe ビットがクリアされます。
(4) このレジスタが存在するかどうかは、ハードウェア・コンフィギュレーション・オプションによって決ま
ります。存在しない場合、読み出すと不定値が返され、書き込んでも効果はありません。
一部のレジスタとビットはオプションです。これらのレジスタとビット
は、システム生成時にイネーブルされた場合にのみハードウェアに存在
します。オプションのレジスタとビットを以下に示します。
rxdata レジスタ
rxdata レジスタは、RXD 入力を介して受信したデータを保持します。
新しいキャラクタが RXD 入力を介して完全に受信されると、そのキャラ
クタは rxdata レジスタに転送され、status レジスタの rrdy ビットが
1 に設定されます。rxdata レジスタが読み出されると、status レジス
タの rrdy ビットは 0 に設定されます。rrdy ビットが設定されている(つ
まり、前のキャラクタが取り出されていない)間に、あるキャラクタが
rxdata レジスタに転送されると、レシーバ・オーバラン・エラーが発
生し、status レジスタの roe ビットは 1 に設定されます。新しいキャ
ラクタは、前のキャラクタが読み出されたかどうかに関係なく、常に
rxdata レジスタに転送されます。rxdata レジスタにデータを書き込
んでも効果はありません。
10–16
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
txdata レジスタ
Avalon マスタ・ペリフェラルは、送信するキャラクタを txdata レジ
スタに書き込みます。トランスミッタが新しいキャラクタを送信可能な
状態になる(status レジスタの TRDY ビットで示される)まで、キャ
ラクタを txdata に書き込んではなりません。txdata レジスタにキャ
ラクタが書き込まれると、TRDY ビットは 0 に設定されます。このキャ
ラクタが txdata レジスタからトランスミッタ・シフト・レジスタに転
送されると、TRDY ビットは 1 に設定されます。TRDY が 0 のときにキャ
ラクタが txdata レジスタに書き込まれると、結果は不定になります。
txdata レジスタを読み出すと、不定値が返されます。
例えば、トランスミッタ・ロジックがアイドル状態で、Avalon マスタ・
ペリフェラルが最初のキャラクタを txdata レジスタに書き込むと仮定
します。TRDY ビットは 0 に設定され、そのキャラクタがトランスミッ
タ・シフト・レジスタに転送されると、1 に設定されます。次に、マス
タは 2 番目のキャラクタを txdata レジスタに書き込むことができ、
TRDY ビットは再び 0 に設定されます。ただし、このときシフト・レジ
スタは最初のキャラクタを TXD 出力にシフト・アウトしているため、ま
だビジー状態です。最初のキャラクタが完全にシフト・アウトされ、2
番目のキャラクタが自動的にトランスミッタ・シフト・レジスタに転送
されるまで、TRDY ビットは 1 に設定されません。
status レジスタ
status レジスタは、UART コア内部の特定の状態を示す個別ビットで
構成されています。各ステータス・ビットは、control レジスタの対応
する割り込みイネーブル・ビットに関連付けられています。status レ
ジスタはいつでも読み出すことができます。読み出しを行っても、どの
ビットの値も変化しません。status レジスタにゼロを書き込むと、
DCTS、E、TOE、ROE、BRK、FE、および PE ビットがクリアされます。
status レジスタ・ビットを表 10–5 に示します。
Altera Corporation
2004 年 9 月
10–17
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 10–5. status レジスタ・ビット ( 1 / 3 )
読み出し(R)/
書き込み(W)/
ビット ビット名
クリア(C)
0 (1)
PE
RC
説明
パリティ・エラー。パリティ・エラーは、受信したパリティ・ビッ
トに予期しない(不正な)ロジック・レベルが含まれるときに発生
します。コアが不正なパリティ・ビットを持つキャラクタを受信す
ると、PE ビットは 1 に設定されます。PE ビットは、status レジス
タへの書き込みによって明示的にクリアされるまで、1 に設定され
たままです。PE ビットが設定されているときに、rxdata レジスタ
から読み出すと不定値になります。
Parity ハードウェア・オプションがオンにされていない場合、パリ
ティ・チェックは実行されず、PE ビットを読み出すと値は常に 0
になります。10–6 ページの「データ・ビット、ストップ・ビット、
パリティ」を参照してください。
1
FE
RC
フレーミング・エラー。フレーミング・エラーは、レシーバが正し
いストップ・ビットの検出に失敗すると発生します。コアが不正な
ストップ・ビットを持つキャラクタを受信すると、FE ビットは 1
に設定されます。FE ビットは、 status レジスタへの書き込みに
よって明示的にクリアされるまで、1 に設定されたままです。FE
ビットが設定されているときに、rxdata レジスタから読み出すと
不定値になります。
2
BRK
RC
ブレーク検出。レシーバ・ロジックは、RXD ピンが、全キャラクタ
時間(データ・ビットにスタート・ビット、ストップ・ビット、パ
リティ・ビットを加えたもの)より長く継続的に Low(ロジック 0)
に保持されるとブレークを検出します。ブレークが検出されると、
BRK ビットは 1 に設定されます。BRK ビットは、 status レジス
タへの書き込みによって明示的にクリアされるまで、1 に設定され
たままです。
3
ROE
RC
受信オーバラン・エラー。前のキャラクタが読み出される前(つま
り、RRDY ビットが 1 の間)に、新しく受信したキャラクタが
rxdata ホールディング・レジスタに転送されると、受信オーバラ
ン・エラーが発生します。この場合、ROE ビットが 1 に設定され、
rxdata の前の内容は、新しいキャラクタで上書きされます。ROE
ビットは、status レジスタへの書き込みによって明示的にクリア
されるまで、1 に設定されたままです。
4
TOE
RC
送信オーバラン・エラー。前のキャラクタがシフト・レジスタに転
送される前(つまり、TRDY ビットが 0 の間)に、新しいキャラク
タが txdata ホールディング・レジスタに書き込まれると、送信
オーバラン・エラーが発生します。この場合、TOE ビットは 1 に設
定されます。TOE ビットは、status レジスタへの書き込みによっ
て明示的にクリアされるまで、1 に設定されたままです。
10–18
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
表 10–5. status レジスタ・ビット ( 2 / 3 )
読み出し(R)/
書き込み(W)/
ビット ビット名
クリア(C)
説明
5
TMT
R
送信エンプティ。TMT ビットはトランスミッタ・シフト・レジスタ
の現在の状態を示します。シフト・レジスタが、キャラクタを TXD
ピンからシフト・アウトしている間、TMT は 0 に設定されます。シ
フト・レジスタがアイドル状態(つまり、キャラクタの送信中でな
い)のとき、TMT ビットは 1 です。Avalon マスタ・ペリフェラル
は、TMT ビットをチェックして、送信が完了した(そして、シリア
ル・リンクの他端で受信された)かどうかを判断することができま
す。
6
TRDY
R
送信レディ。TRDY ビットは、txdata ホールディング・レジスタ
の現在の状態を示します。txdata レジスタが空で、新しいキャラ
クタを処理できる場合、trdy は 1 です。txdata レジスタが満杯の
場合、TRDY は 0 です。Avalon マスタ・ペリフェラルは、TRDY が
1 になるのを待って、新しいデータを txdata に書き込む必要があ
ります。
7
RRDY
R
受信キャラクタ・レディ。RRDY ビットは、rxdata ホールディン
グ・レジスタの現在の状態を示します。rxdata レジスタが空のと
きは、まだ読み出し可能な状態ではなく、rrdy は 0 です。新しく受
信した値が rxdata レジスタに転送されると、RRDY は 1 に設定
されます。 rxdata レジスタを読み出すと、RRDY ビットは 0 に
クリアされます。Avalon マスタ・ペリフェラルは、RRDY が 1 にな
るのを待って、 rxdata を読み出す必要があります。
8
E
RC
例外。E ビットは例外条件が発生したことを示します。E ビットは、
TOE、ROE、BRK、FE、および PE ビットの論理 OR をしたもので
す。e ビットと、それに対応する control レジスタの割り込みイ
ネーブル・ビット(IE)は、すべてのエラー条件に対する IRQ をイ
ネーブル / ディセーブルする便利な方法を提供します。
E ビットは、status レジスタに書き込み操作を実行すると、0 に設
定されます。
10 (1)
DCTS
RC
CTS(Clear To Send)信号の変化。CTS_N 入力ポートでロジック・
レベルの遷移が検出されると(Avalon クロックと同期してサンプリ
ングされる)、DCTS ビットは 1 に設定されます。このビットは
CTS_N の立ち下がり遷移と立ち上がり遷移で設定されます。DCTS
ビットは、status レジスタへの書き込みによって明示的にクリア
されるまで、1 に設定されたままです。
Flow Control ハードウェア・オプションがオンにされていない場
合、DCTS ビットを読み出すと値は常に 0 になります。10–7 ペー
ジの「フロー制御」を参照してください。
Altera Corporation
2004 年 9 月
10–19
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 10–5. status レジスタ・ビット ( 3 / 3 )
読み出し(R)/
書き込み(W)/
ビット ビット名
クリア(C)
11 (1)
CTS
R
説明
CTS(Clear To Send)信号。CTS ビットは、CTS_N 入力の瞬時的
な状態(Avalon クロックと同期してサンプリングされる)を反映し
ます。CTS_N 入力は負論理なので、ロジック・レベル 0 が CTS_N
入力に適用されると、CTS ビットは 1 になります。
CTS_N 入力は送信プロセスや受信プロセスには作用しません。
CTS_N 入力の明示的な効果は、CTS ビットおよび DCTS ビットの
状態、そして control レジスタの idcts ビットがイネーブルされてい
るときに生成できる IRQ のみです。
Flow Control ハードウェア・オプションがオンにされていない場
合、CTS ビットを読み出すと値は常に 0 になります。10–7 ページ
の「フロー制御」を参照してください。
12 (1)
EOP
R
EOP の検出。EOP ビットは、以下のいずれかのイベントで 1 に設
定されます。
●
●
EOP キャラクタは txdata に書き込まれたとき。
EOP キャラクタは rxdata から読み出されたとき。
EOP キャラクタは、endofpacket レジスタの内容によって決定さ
れます。EOP ビットは、 status レジスタへの書き込みによって明
示的にクリアされるまで、1 に設定されたままです。
Include End-of-Packet Register ハードウェア・オプションがオン
にされていない場合、EOP ビットを読み出すと値は常に 0 になりま
す。10–8 ページの「ストリーミング・データ(DMA)コントロー
ル」を参照してください。
表 10–5 の注:
(1) このビットはオプションであり、ハードウェアに存在しない場合もあります。
10–20
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
control レジスタ
control レジスタは個別ビットで構成されており、各ビットが UART
コアの動作を制御します。control レジスタの値はいつでも読み出すこ
とができます。
control レジスタの各ビットは、status レジスタの対応するビットの
IRQをイネーブルします。statusビットとそれに対応する割り込みイネー
ブル・ビットが両方とも 1 のとき、コアは IRQ を生成します。例えば、
pe ビットは status レジスタのビット 0、ipe ビットは control レジス
タのビット 0 です。割り込み要求は、pe と ipe の両方が 1 のときに生成
されます。
control レジスタのビットを表 10–6 に示します。
表 10–6. control レジスタのビット
ビット ビット名
0
読み出し(R)/
書き込み(W)
(1/2)
説明
IPE
RW
パリティ・エラーに対する割り込みのイネーブル。
1
IFE
RW
フレーミング・エラーに対する割り込みのイネーブル。
2
IBRK
RW
ブレーク検出に対する割り込みのイネーブル。
3
IROE
RW
レシーバ・オーバラン・エラーに対する割り込みのイネーブル。
4
ITOE
RW
トランスミッタ・オーバラン・エラーに対する割り込みのイネーブ
ル。
5
ITMT
RW
トランスミッタ・シフト・レジスタ・エンプティに対する割り込み
のイネーブル。
6
ITRDY
RW
送信レディに対する割り込みのイネーブル。
7
IRRDY
RW
読み出しレディに対する割り込みのイネーブル。
8
IE
RW
例外に対する割り込みのイネーブル。
9
TRBK
RW
送信ブレーク。TRBK ビットにより、Avalon マスタ・ペリフェラル
は、 TXD 出力にブレーク・キャラクタを送信することができます。
TRBK ビットが 1 に設定されると、TXD 信号は強制的に 0 になりま
す。TRBK ビットは、トランスミッタ・ロジックが TXD 出力でドラ
イブするロジック・レベルよりも優先されます。TRBK ビットは処理
中の送信を中断します。Avalon マスタ・ペリフェラルは、所定のブ
レーク期間が経過した後、TRBK ビットを再び 0 に設定する必要があ
ります。
10
IDCTS
RW
CTS 信号の変化に対する割り込みのイネーブル。
Altera Corporation
2004 年 9 月
10–21
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 10–6. control レジスタのビット
ビット ビット名
11 (1)
RTS
(2/2)
読み出し(R)/
書き込み(W)
RW
説明
(RTS)信号の送信要求。RTS ビットは RTS_N 出力に直接供給され
ます。Avalon マスタ・ペリフェラルは、いつでも RTS ビットに書き
込むことができます。RTS ビットの値は RTS_N 出力にのみ影響し、
トランスミッタ・ロジックやレシーバ・ロジックには作用しません。
RTS_N 出力は負論理なので、RTS ビットが 1 のとき、RTS_N 出力
には Low ロジック・レベル(0)がドライブされます。
Flow Control ハードウェア・オプションがオンにされていない場合、
RTS ビットを読み出すと値は常に 0 になり、書き込んでも効果はあ
りません。10–7 ページの「フロー制御」を参照してください。
12
IEOP
RW
EOP 状態に対する割り込みのイネーブル。
表 10–6 の注:
(1) このビットはオプションであり、ハードウェアに存在しない場合もあります。
divisor レジスタ(オプション)
divisor レジスタの値は、ボー・レート・クロックの生成に使用され
ます。有効なボー・レートは、以下の公式から求められます。
ボー・レート = (クロック周波数)/(除数 + 1)
divisor レジスタは、オプションのハードウェア機能です。Baud Rate
Can Be Changed By Software ハードウェア・オプションがオンにされて
いない場合、divisor レジスタは存在しません。この場合、divisor に
書き込んでも効果はなく、divisor を読み出すと不定値が返されます。
詳しくは、10–5 ページの「ボー・レート・オプション」を参照してください。
endofpacket レジスタ(オプション)
endofpacket レジスタの値は、可変長 DMA トランザクションの EOP
キャラクタを決定します。リセット後には、デフォルト値はゼロ、つま
り ASCII のヌル・キャラクタ(\0)です。eop ビットの詳細については、
10–18 ページの表 10–5 を参照してください。
endofpacket レジスタは、オプションのハードウェア機能です。
Include end-of-packet register ハードウェア・オプションがオンにされ
ていない場合、endofpacket レジスタは存在しません。この場合、
endofpacket に書き込んでも効果はなく、読み出すと不定値が返され
ます。
10–22
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 UART コア
割り込み動作
UART コアは 1 つの IRQ 信号を Avalon インタフェースに出力し、この
インタフェースは Nios II プロセッサなど、システム内の任意のマスタ・
ペリフェラルに接続できます。マスタ・ペリフェラルは status レジス
タを読み出して、割り込みの原因を特定する必要があります。
すべての割り込み条件は、status レジスタの関連ビット、および
control レジスタの割り込みイネーブル・ビットを持っています。いず
れかの割り込み条件が発生すると、関連付けられた status ビットが 1
に設定され、明示的に認識応答が返されるまでこの設定のままです。対
応する割り込みイネーブル・ビットが 1 の間に、status ビットのいずれ
かが設定されると、IRQ 出力がアサートされます。マスタ・ペリフェラ
ルは、status レジスタをクリアして IRQ に認識応答することができます。
リセット時に、すべての割り込みイネーブル・ビットは 0 に設定される
ので、マスタ・ペリフェラルが割り込みイネーブル・ビットの 1 つまた
は複数を 1 に設定するまで、コアは IRQ をアサートできません。
可能なすべての割り込み条件とそれらに関連付けられた status および
control(割り込みイネーブル)ビットを、10–18 ページの表 10–5 および
10–21 ページの表 10–6 に示します。各割り込み条件の詳細は、status
ビットの説明に記載します。
Altera Corporation
2004 年 9 月
10–23
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
10–24
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
11. Avalon インタフェース対応
SPI コア
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51011-1.1
コアの概要
SPI は、マイクロプロセッサを各種オフチップ・センサ、変換デバイス、
メモリ・デバイス、およびコントロール・デバイスに接続するするため
に、エンベデッド・システムで広く使用される業界標準のシリアル・プ
ロトコルです。Avalon™ インタフェース付き SPI コアは、SPI プロトコ
ルを実装し、バック・エンドで Avalon インタフェースを供給します。
SPI コアはマスタまたはスレーブ・プロトコルのいずれかを実装できま
す。マスタとして設定すると、SPI コアは最大 16 の独立した SPI スレー
ブを制御できます。受信および送信レジスタの幅は、1 ∼ 16 ビットで設
定されます。これより長い転送長(24 ビット転送など)は、ソフトウェ
ア・ルーチンでサポート可能です。SPI コアは、転送が完了するたびに
割り込みをフラグできる割り込み出力を提供します。
SPI コアは SOPC Builder に対応しており、SOPC Builder で生成された
どのシステムにも容易に統合できます。
機能の説明
SPI コアは、以下の 2 本のデータ・ライン、1 本のコントロール・ライ
ン、および 1 つの同期クロックを使用して通信します。
■
Master Out Slave In(mosi)− マスタからスレーブ入力へのデータ
出力
■ Master In Slave Out(miso)− スレーブからマスタ入力へのデータ
出力
■ Serial Clock(sclk)− マスタによってスレーブにドライブされるク
ロック、データ・ビットの同期化に使用
■ Slave Select
(ss_n)− マスタによって個別スレーブにドライブされる
セレクト信号(アクティブ Low)
、ターゲット・スレーブの選択に使用
SPI コアには、以下のユーザが管理可能な機能があります。
■
5 つのレジスタで構成されるメモリ・マップド・レジスタ空間:rxdata、
txdata、status、control、および slaveselect のレジスタ
■ 4 つの SPI インタフェース・ポート:sclk、
ss_n、mosi、および miso
Altera Corporation
2004 年 9 月
11–1
機能の説明
これらのレジスタは、SPI コアへのインタフェースを提供し、Avalon ス
レーブ・ポートを介して確認できます。sclk、ss_n、mosi、および
miso ポートは、その他の SPI デバイスへのハードウェア・インタフェー
スを提供します。sclk、ss_n、mosi、および miso の動作は、SPI コ
アがマスタまたはスレーブのいずれかで設定されているかによって決ま
ります。
図 11-1 に、マスタ・モードの SPI コアのブロック図を示します。
図 11-1.SPI コアのブロック図
オンチップ・
ロジックへの
Avalon
スレーブ・
インタフェース
クロック
ボー・レート除数*
sclk
コントロール
データ
rxdata
シフト・レジスタ
miso
txdata
シフト・レジスタ
mosi
status
IRQ
control
slaveselect*
ss_n0
ss_n1
ss_n15
*SPIスレーブには存在しない
SPI コア・ロジックは、Avalon インタフェースが供給するクロック入力
に同期します。コアは、マスタとして設定されている場合は、Avalon ク
ロックを分周して SCLK 出力を生成します。コアの受信ロジックは、ス
レーブとして設定されている場合は SCLK 入力に同期します。コアの
Avalon インタフェースはストリーミング Avalon 転送が可能です。SPI
コアはストリーミング DMA コントローラと組み合わせて使用すれば、
例えば SPI コアとメモリの間での連続データ転送を自動化することがで
きます。詳細については、第 6 章の「Avalon インタフェース対応 DMA
コントローラ」を参照してください。
11–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SPI コア
設定の例
以下に示す 2 つの設定が可能です。図 11-2 では、SPI コアはオフチップ
SPI マスタへのスレーブ・インタフェースを提供します。
図 11-2.スレーブとして設定した SPI コア
アルテラFPGA
SPI
マスタ・
デバイス
sclk
ss
mosi
miso
sclk
ss_n
mosi
miso
オンチップ・
ロジックへの
Avalon
インタフェース
SPIコンポーネント
(スレーブとして設定)
図 11-3 では、SPI コアは複数のオフチップ・スレーブ・デバイスをドラ
イブするマスタ・インタフェースを提供します。図 11-3 の各スレーブ・
デバイスは、miso 出力のセレクト信号がアサートされていない場合は、
出力をトライステートにする必要があります。
図 11-3.マスタとして設定された SPI コア
アルテラFPGA
SPI
スレーブ・
デバイス0
オンチップ・
ロジックへの
Avalon
インタフェース
sclk
mosi
miso
ss_n0
ss_n1
ss_n2
SPIコンポーネント
(マスタとして設定)
sclk
mosi
miso
ss_n0
ss_n1
ss_n2
SPI
スレーブ・
デバイス1
SPI
スレーブ・
デバイス2
ss_n 信号はアクティブ Low です。ただし、どの信号も FPGA 内部で反
転可能なので、スレーブ・セレクト信号をアクティブ High またはアク
ティブ Low にすることができます。
Altera Corporation
2004 年 9 月
11–3
Nios II プロセッサ・リファレンス・ハンドブック
機能の説明
トランスミッタ・ロジック
SPI コアのトランスミッタ・ロジックは、送信ホールディング・レジス
タ(txdata)と送信シフト・レジスタで構成されており、各レジスタ
の幅は n ビットです。レジスタ幅 n はシステム生成時に指定され、1 ∼
16 までの任意の整数を指定できます。マスタ・ペリフェラルが txdata
レジスタに値を書き込むと、この値はシフト・レジスタにコピーされ、
次の操作の開始時に送信されます。
シフト・レジスタと txdata レジスタにより、データ送信時にダブル・
バッファリングを提供します。前のデータがシフト・レジスタからシフ
ト・アウトされる間に、txdata レジスタに新しいデータを書き込むこ
とができます。トランスミッタ・ロジックはシリアル・シフト操作が実
行中でない場合に、txdata レジスタを自動的にシフト・レジスタに転
送します。
マスタ・モードでは、送信シフト・レジスタは mosi 出力に直接供給し
ます。スレーブ・モードでは、送信シフト・レジスタは miso 出力に直
接供給します。データは、SPI コアの設定に応じて、最下位ビット(LSB)
または最上位ビット(MSB)が最初にシフト・アウトされます。
レシーバ・ロジック
SPI コアの受信ロジックは、受信ホールディング・レジスタ(rxdata)
と受信シフト・レジスタで構成されており、各レジスタの幅は n ビット
です。レジスタ幅 n はシステム生成時に指定され、1 ∼ 16 までの任意の
整数を指定できます。マスタ・ペリフェラルは、シフト・レジスタがデー
タの n ビット値をすべてキャプチャした後、rxdata レジスタから受信
したデータを読み出します。
シフト・レジスタと rxdata レジスタは、データ受信時にダブル・バッ
ファリングを提供します。rxdata レジスタは、後続の新しいデータが
シフト・レジスタにシフト・インされる間、以前に受信したデータ値を
保持することができます。レシーバ・ロジックはシリアル・シフト操作
が完了すると、シフト・レジスタの内容を自動的に rxdata レジスタに
転送します。
マスタ・モードでは、シフト・レジスタは miso 入力から直接供給され
ます。スレーブ・モードでは、シフト・レジスタは mosi 入力から直接
供給されます。レシーバ・ロジックは、SPI コアのコンフィギュレーショ
ンに応じて、入力データが最下位ビット(LSB)から先にまたは最上位
ビット(MSB)から先に到達することを予測します。
11–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SPI コア
マスタ・モードおよびスレーブ・モード
システム生成時に、設計者は SPI コアをマスタ・モードまたはスレーブ・
モードのいずれかで設定します。このモードは実行時には切り替えるこ
とはできません。
マスタ・モードでの動作
マスタ・モードでは、SPI ポートは表 11–1 に示すとおり動作します。
表 11–1. マスタ・モード・ポートの設定
名称
方向
説明
mosi
出力
スレーブへのデータ出力
miso
入力
スレーブからのデータ入力
sclk
出力
すべてのスレーブに対する同期クロック
ss_nM
出力
スレーブ M に対するスレーブ・セレクト信号。ここで、M は 0 ∼ 15 です。
SPI マスタのみがマスタとスレーブ間の操作を開始できます。マスタ・
モードでは、インテリジェント・ホスト(マイクロプロセッサなど)は、
control および slaveselect レジスタを使用して、SPI コアを設定し、
次に txdata バッファにデータを書き込んでトランザクションを開始し
ます。マスタ・ペリフェラルは、status レジスタを読み出すことによっ
て、トランザクションのステータスをモニタできます。マスタ・ペリフェ
ラルは、新しいデータを受信(つまり、転送が完了)するかまたは送信
バッファが新しいデータを処理できる状態になると、割り込みをイネー
ブルしてホストに通知できます。
SPI プロトコルは全二重なので、すべてのトランザクションはデータを
同時に送受信します。マスタは mosi 出力の新しいデータ・ビットを送
信し、スレーブは sclk のアクティブ・エッジごとに、miso 入力の新
しいデータ・ビットをドライブします。SPI コアは、クロック分周器を
使用して Avalon システム・クロックを分周し、sclk 信号を生成します。
SPI コアが複数のスレーブにインタフェースするように設定されている
場合、コアは最大 16 のスレーブそれぞれに 1 つの ss_n 信号を持ちま
す。転送中に、マスタは slaveselect レジスタに指定された各スレー
ブに対してss_nをアサートします。転送中にデータを送信できるスレー
ブは 1 つに限定されます。そうでない場合、miso 入力で衝突が発生す
ることに注意してください。スレーブ・デバイスの数は、システム生成
時に指定されます。
Altera Corporation
2004 年 9 月
11–5
Nios II プロセッサ・リファレンス・ハンドブック
機能の説明
スレーブ・モード動作
スレーブ・モードでは、SPI ポートは表 11-2 に示すように動作します。
表 11–2. スレーブ・モード・ポートの設定
名称
方向
説明
mosi
入力
マスタからのデータ入力
miso
出力
マスタへのデータ出力
sclk
入力
同期クロック
ss_n
入力
セレクト信号
スレーブ・モードでは、SPI コアは単にマスタがトランザクションを開
始するのを待ちます。トランザクションが開始する前に、スレーブ・ロ
ジックは ss_n 入力を連続してポーリングします。マスタが ss_n をア
サートする(Low にドライブする)と、スレーブ・ロジックはすぐに送
信シフト・レジスタの内容を miso 出力に送信し始めます。また、スレー
ブ・ロジックは mosi 入力のデータをキャプチャし、同時に受信シフト・
レジスタにデータを充填します。これにより、読み出しおよび書き込み
トランザクションは同時に実行されます。
インテリジェント・ホスト(マイクロプロセッサなど)は、データを
txdata レジスタに書き込んで、マスタが次に動作を開始したときにそ
のデータが送信されるようにします。マスタ・ペリフェラルは受信した
データを rxdata レジスタから読み出します。マスタ・ペリフェラルは、
新しいデータを受信するかまたは送信バッファが新しいデータを処理で
きる状態になると、割り込みをイネーブルしてホストに通知できます。
マルチ・スレーブ環境
ss_n がアサートされていない場合、標準的な SPI コアは miso 出力ピ
ンをハイ・インピーダンスに設定します。アルテラ提供の SPI スレーブ・
コアは、miso 出力が選択されていないときには High または Low が未
定義です。アルテラのスレーブ・モードの SPI コアが一般の複数のスレー
ブを持つ一般のオフチップ SPI マスタ・デバイスに接続される場合は、
miso 出力での信号の競合を回避するよう、特別な配慮が必要です。こ
の場合、ss_n 入力を使用して、miso 信号のトライステート・バッファ
を制御する必要があります。図 11-4 に、2 つのスレーブが存在する環境
でのスレーブ・モードの SPI コアの例を示します。
11–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SPI コア
図 11-4.マルチ・スレーブ環境のおける SPI コア
アルテラFPGA
SPI
マスタ・
デバイス
sclk
mosi
miso
ss_n0
ss_01
sclk
mosi
miso
ss_n0
SPIコンポーネント
(スレーブとして設定)
sclk
mosi
miso
SS_n
SPI
スレーブ・
デバイス
Avalon インタフェース
SPI コアの Avalon インタフェースは、1 つの Avalon スレーブ・ポート
で構成されています。基本的なスレーブ・リードおよびライト転送に加
えて、SPI コアは Avalon ストリーミング・リードおよびライト転送をサ
ポートしています。
SOPC Builder
における SPI コ
アのインスタン
ス化
ハードウェア機能セットは、SPI コアの SOPC Builder コンフィギュレー
ション・ウィザードによって設定されます。以下のセクションでは、選
択可能なオプションについて説明します。
マスタ / スレーブ設定
設計者はマスタ・モードまたはスレーブ・モードのいずれかを選択して、
SPI コアの役割を決定することができます。マスタ・モードを選択した場
合、オプションの Generate Select Signal、SPI Clock Rate、および Specify
Delay を選択できます。
Generate Select Signals
この設定は、SPI マスタが接続可能なスレーブ数を指定します。許容範
囲は 1 ∼ 16 です。SPI マスタ・コアは、各スレーブに対して固有の ss_n
信号を供給します。
Altera Corporation
2004 年 9 月
11–7
Nios II プロセッサ・リファレンス・ハンドブック
SOPC Builder における SPI コアのインスタンス化
SPI Clock (sclk) Rate
この設定は、マスタとスレーブ間でデータを同期化する sclk 信号のレー
トを決定します。ターゲット・クロック・レートは、Hz、kHz または MHz
の単位で指定できます。SPI マスタ・コアは、Avalon システム・クロック
とクロック分周器を使用して、sclk を生成します。
sclk の実際の周波数は、希望のターゲット・クロック・レートには厳
密に一致しないことがあります。達成可能なクロック値は、以下のとお
りです。
<Avalon システム・クロック周波数 >/ [2, 4, 6, 8, ...]
達成される実際の周波数が、指定された目標値より高くなることはあり
ません。例えば、システム・クロック周波数が 50 MHz、目標値が 25 MHz
の場合、クロック分周値は 2 となり、実際の sclk 周波数は厳密に 25 MHz
になります。ところが、目標周波数が 24 MHz の場合、クロック分周値
は 4、実際の sclk 周波数は 12.5 MHz になります。
Specify Delay
このオプションをオンにすると、SPI マスタは ss_n 信号をアサートし
てからデータの最初のビットをシフトするまでの時間遅延を追加しま
す。特定の SPI スレーブ・デバイスはこの遅延を必要とします。遅延オ
プションをオンにした場合は、ns、us、または ms の単位で遅延時間を
指定する必要があります。図 11-5 に例を示します。
図 11-5.ss_n のアサートから sclk のトグルまでの時間遅延
遅延生成ロジックは、sclk 周期の 1/2 の精度を使用します。達成され
る実際の遅延は、以下の式に示すとおり、sclk 周期の 1/2 の倍数に最
も近くなるように端数を切り上げた希望の目標遅延値です。
p = ½ * <sclk 周期 >
実際の遅延 = 上限(< 希望の遅延 >/ p)* p
11–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 SPI コア
データ・レジスタ設定
データ・レジスタ設定は、SPI コア内のデータ・レジスタのサイズと動
作に作用します。以下の 2 つのデータ・レジスタ設定があります。
■
Width −この設定は、rxdata、txdata、受信シフト・レジスタ、お
よび送信シフト・レジスタの幅を指定します。許容値は 1 ∼ 16 です。
■ Shift direction −この設定は、データがシフト・レジスタにシフト・イ
ンおよびシフト・アウトする方向
(MSBまたはLSBから先)
を決定します。
タイミング設定
タイミング設定は、ss_n、sclk、mosi、および miso 信号間のタイミ
ング関係に作用します。この説明では、mosi および miso 信号を一般的
に「データ」と呼んでいます。以下の 2 つのタイミング設定があります。
■
Clock polarity −この設定には 0 または 1 を指定できます。
クロック極性が
0 に設定されているとき、sclk のアイドル状態は Low です。クロッ
ク極性が 1 に設定されている場合、
sclk のアイドル状態は High です。
■ Clock phase −この設定には 0 または 1 を指定できます。クロック・
フェーズが 0 の場合、データは sclk の立ち上がりエッジでラッチさ
れ、立ち下がりエッジで変更されます。クロック・フェーズが 1 の
場合、データは sclk の立ち下がりエッジでラッチされ、立ち上がり
エッジで変更されます。
図 11-6 から 11-9 に、クロック極性とクロック・フェーズのすべて組み
合わせにおける信号の動作を示します。
図 11-6.クロック極性 = 0、クロック・フェーズ = 0
図 11-7.クロック極性 = 0、クロック・フェーズ = 1
Altera Corporation
2004 年 9 月
11–9
Nios II プロセッサ・リファレンス・ハンドブック
デバイスおよびツールのサポート
図 11-8.クロック極性 = 1、クロック・フェーズ = 0
図 11-9.クロック極性 = 1、クロック・フェーズ = 1
デバイスおよ
びツールの
サポート
SPI コアはすべてのアルテラ FPGA をターゲットにできます。
ソフトウェア・
プログラミン
グ・モデル
以下のセクションでは、ハードウェアへのアクセスに使用されるレジス
タ・マップやソフトウェア構成など、SPI コアのソフトウェア・プログ
ラミング・モデルについて説明します。Nios II プロセッサ・ユーザ向け
に、アルテラは SPI コア・レジスタを定義する HAL システム・ライブ
ラリ・ヘッダ・フィルを提供します。SPI コアは、HAL がサポートする
汎用デバイス・モデルのカテゴリに適合しないため、HAL API または
ANSI C 標準ライブラリを利用してアクセスすることはできません。ア
ルテラは、SPI コアに特有の SPI ハードウェアにアクセスするルーチン
を提供しています。
ハードウェア・アクセス・ルーチン
アルテラは、マスタとして設定された SPI コアへの汎用アクセスを可能
にするアクセス・ルーチン alt_avalon_spi_command() を提供して
います。
11–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
alt_avalon_spi_command()
alt_avalon_spi_command()
プロトタイプ
int alt_avalon_spi_command(alt_u32 base, alt_u32 slave,
alt_u32 write_length,
const alt_u8* wdata,
alt_u32 read_length,
alt_u8* read_data,
alt_u32 flags)
スレッド・セーフ
×
ISR からの利用
×
インクルード
<altera_avalon_spi.h>
説明
alt_avalon_spi_command() は、SPI バス上でコントロール・シーケン
スを実行するために使用します。
このルーチンはデータ幅が 8 ビット以下の SPI
マスタ用に設計されています。現在のところ、データ幅が 8 ビットを超える SPI
ハードウェアはサポートしていません。この関数は一度呼び出すだけで、MOSI
ポートに任意の長さのデータ・バッファを書き込み、次に MISO ポートから任
意の容量のデータを読み戻します。この関数は以下の動作を実行します。
(1)指定されたスレーブに対して、スレーブ・セレクト出力をアサートし
ます。最初のスレーブ・セレクト出力は 0、その次は 1 というように番号が
付けられます。
(2)write_length バイトのデータを wdata から SPI インタフェースを
介して送信し、MISO で受信したデータを破棄します。
(3)read_length バイトのデータを読み出し、それを read_data が指
すバッファに格納します。リード・トランザクションの間、MOSI はゼロに設
定されます。
(4)フラグ・フィールドに値 ALT_AVALON_SPI_COMMAND_MERGE が格
納されていない場合は、スレーブ・セレクト出力のアサートを解除します。
分散したバッファから送信する場合は、最後を除くすべてのアクセスでマー
ジ・フラグを指定して、関数を複数回呼び出すことができます。
この機能はスレッド・セーフではありません。複数のスレッドから SPI バスに
アクセスする場合は、セマフォまたは相互排除を使用して、どの時点でもこの
機能内で 1 つのスレッドしか実行しないようにする必要があります。
戻り値 :
read_data バッファに格納されたバイト数。
ソフトウェア・ファイル
SPI コアには、以下のソフトウェア・ファイルが付属しています。これ
らのファイルはハードウェアへの低水準インタフェースを提供します。
■
altera_avalon_spi.h −このファイルはコアのレジスタ・マップを定
義し、低水準ハードウェアにアクセスするための記号定数を提供し
ます。
■ altera_avalon_spi.c −このファイルはハードウェアにアクセスする
ための低水準ルーチンを実装します。
Altera Corporation
2004 年 9 月
11–11
Nios II プロセッサ・リファレンス・ハンドブック
alt_avalon_spi_command()
レガシー SDK ルーチン
SPI コアは、第 1 世代の Nios プロセッサ用のレガシー SDK ルーチンで
もサポートされています。これらのルーチンの詳細については、第 1 世
代の Nios プロセッサに付属する SPI のドキュメントを参照してくださ
い。レガシー SDK に基づいてプログラムを HAL システム・ライブラリ
API にアップグレードする方法の詳細については、
「AN 350: Upgrading
Nios Processor Systems to the Nios II Processor」を参照してください。
レジスタ・マップ
Avalon マスタ・ペリフェラルは、表 11–3 に示す 6 つの 16 ビット・レ
ジスタを介して、SPI に対する制御と通信を行います。この表では、
rxdata と txdata のデータ幅を n ビットと仮定しています。
表 11–3. SPI マスタ・デバイスのレジスタ・マップ
内部
アドレス
15...11
レジスタ名
10
9
8
7
6
5
0
rxdata (1)
RXDATA (n-1..0)
1
txdata (1)
TXDATA (n-1..0)
2
status (2)
3
control
4
予約
5
slaveselect (3)
E
sso
(3)
RRDY
TRDY
IE IRRDY ITRDY
4
TMT TOE
3
2
1
0
ROE
ITOE IROE
スレーブ・セレクト・マスク
表 11–3 の注:
(1) n が 16 より小さい場合、ビット 15 から n は定義されていません。
(2) status レジスタへの書き込み操作を行うと、 roe、 toe および e ビットがクリアされます。
(3) マスタ・モードでのみ存在します。
未定義のビットを読み出すと、不定値が返されます。未定義のビットに
書き込んでも影響はありません。
rxdata レジスタ
マスタ・ペリフェラルは、rxdata レジスタから受信したデータを読み
出します。受信シフト・レジスタが n ビットのデータをすべて受信する
と、status レジスタの rrdy ビットが 1 に設定され、データは rxdata
レジスタに転送されます。rxdata レジスタを読み出すと、rrdy ビット
は 0 にクリアされます。rxdata レジスタに値を書き込んでも影響はあ
りません。
11–12
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
alt_avalon_spi_command()
新しいキャラクタは、前のキャラクタが取り出されたかどうかに関係な
く、常に rxdata レジスタに転送されます。データが rxdata レジスタ
に転送されたときに、rrdy が 1 の場合(つまり、前のデータが取り出
されていない)、受信オーバラン・エラーが発生し、status レジスタの
roe ビットが 1 に設定されます。この場合、rxdata の内容は不定です。
txdata レジスタ
マスタ・ペリフェラルは送信するデータを txdata レジスタに書き込み
ます。status レジスタの trdy ビットが 1 のときは、txdata レジス
タが新しいデータを処理可能な状態であることを意味します。txdata
レジスタに書き込むたびに、trdy ビットは 0 に設定されます。データ
が txdata レジスタから送信シフト・レジスタに転送された後、trdy
ビットは 1 に設定され、それによって txdata ホールディング・レジス
タは新しいデータを受信する準備が整います。
トランスミッタが新しいデータを処理可能な状態になるまで、マスタ・
ペリフェラルは txdata レジスタに書き込んではなりません。trdy が
0 のときに、マスタ・ペリフェラルが txdata レジスタに新しいデータ
を書き込むと、送信オーバラン・エラーが発生し、status レジスタの
toe ビットが 1 に設定されます。この場合、新しいデータは無視され、
txdata の内容は変更されません。
例として、CPU が txdata ホールディング・レジスタにデータ値を書き
込むときに、SPI コアがアイドル状態(つまり、txdata レジスタおよ
び送信シフト・レジスタが空)であると仮定します。trdy ビットは一
時的に 0 に設定されますが、txdata 内のデータが送信シフト・レジス
タに転送されると、trdy は 1 に戻ります。CPU は 2 番目のデータ値を
txdata レジスタに書き込み、trdy ビットは再び 0 に設定されます。こ
の書き込み時には、シフト・レジスタは元のデータ値を転送中でビジー
状態なので、シフト操作が完了するまで、trdy ビットは 0 のままです。
操作が完了すると、2 番目のデータ値が送信シフト・レジスタに転送さ
れ、trdy ビットが再び 1 に設定されます。
status レジスタ
status レジスタは、SPI コア内部のステータス状態を示すビットで構
成されます。11–14 ページの control レジスタで説明するとおり、各ビッ
トは control レジスタの対応する割り込みイネーブル・ビットに関連
付けられています。マスタ・ペリフェラルは、どのビットの値も変更す
Altera Corporation
2004 年 9 月
11–13
Nios II プロセッサ・リファレンス・ハンドブック
alt_avalon_spi_command()
ることなく、いつでも status を読み出すことができます。status に
書き込むと、roe、toe および e ビットがクリアされます。表 11–4 に、
status レジスタの各ビットを説明します。
表 11–4. status レジスタ・ビット
#
名称
3
ROE
説明
受信オーバラン・エラー
rxdata レジスタが満杯(つまり、RRDY ビットが 1)の間に、新しいデータを受信し
た場合、ROE ビットは 1 に設定されます。この場合、新しいデータが古いデータに上
書きされます。 status レジスタに書き込むと、ROE ビットは 0 にクリアされます。
4
TOE
送信オーバラン・エラー
txdata レジスタが満杯(つまり、TRDY ビットが 0)の間に、このレジスタに新しい
データが書き込まれると、TOE ビットは 1 に設定されます。この場合、新しいデータは
無視されます。 status レジスタに書き込むと、TOE ビットは 0 にクリアされます。
5
TMT
6
TRDY
送信シフト・レジスタ・エンプティ
TMT ビットは、トランザクションの処理中には 0 に設定され、シフト・レジスタが空
のときには 1 に設定されます。
送信レディ
txdata レジスタが空のとき、TRDY ビットは 1 に設定されます。
7
RRDY
8
E
レシーバ・レディ
rxdata レジスタが満杯のとき、RRDY ビットは 1 に設定されます。
エラー
このビットは、
プログラマがエラー
E ビットは TOE ビットと ROE ビットの論理 OR です。
状態を検出するのに便利です。status レジスタに書き込むと、E ビットは 0 にクリアさ
れます。
control レジスタ
control レジスタは、SPI コアの動作を制御するデータ・ビットで構成さ
れています。マスタ・ペリフェラルは、どのビットの値も変更すること
なく、いつでも control を読み出すことができます。
control レジスタの大部分のビット(IROE、ITOE、ITRDY、IRRDY、IE)
は、status レジスタで表されるステータス状態に対する割り込みを制御
します。例えば、status のビット 1 は ROE(レシーバ・オーバラン・エ
ラー)
、control のビット 1 は ROE 状態に対する割り込みをイネーブルする
IROE です。SPI コアは、status および control の対応するビットが両
方とも 1 のときに、割り込み要求をアサートします。
11–14
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
alt_avalon_spi_command()
control レジスタのビットを表 11–5 に示します。
表 11–5. control レジスタのビット
#
名称
3
IROE
受信オーバラン・エラーに対する割り込みがイネーブルされます。
IROE を 1 に設定すると、
4
ITOE
送信オーバラン・エラーに対する割り込みがイネーブルされます。
ITOE を 1 に設定すると、
6
ITRDY
ITRDY を 1 に設定すると、トランスミッタ・レディ状態に対する割り込みがイネーブルさ
れます。
7
IRRDY
IRRDY を 1 に設定すると、レシーバ・レディ状態に対する割り込みがイネーブルされます。
8
IE
10
SSO
説明
IE を 1 に設定すると、任意のエラー状態に対する割り込みがイネーブルされます。
SSO を 1 に設定すると、シリアル・シフト操作が進行中かどうかに関係なく、SPI コアは
その ss_n 出力をドライブするように強制されます。
どの ss_n
slaveselect レジスタは、
出力がアサートされるかを制御します。sso は、任意のサイズ(つまり、16 ビットを超え
る)のデータを送信または受信するのに使用できます。
リセット後に、control レジスタのすべてのビットは 0 に設定されます。
リセット後には、すべての割り込みがディセーブルされ、どの ss_n 信
号もアサートされません。
slaveselect レジスタ
slaveselect レジスタは、SPI マスタでドライブされる ss_n 信号に対
するビット・マスクです。シリアル・シフト操作の間、SPI マスタは
slaveselectレジスタで指定されるスレーブ・デバイスのみ選択します。
slaveselect レジスタは、SPI コアがマスタ・モードで設定されたと
きに のみ 存在し ます。シ ステ ム生成 時に 設計 者が指 定し たと おり、
slaveselect の 1 ビットが各 ss_n 出力に対応します。例えば、スレー
ブ・デバイス 3 との通信を有効にするには、slaveselect のビット 3
を 1 に設定します。
マスタ・ペリフェラルは slaveselect の複数ビットを同時に設定でき
るため、SPI マスタはトランザクションの実行時に、複数のスレーブ・
デバイスを同時に設定します。例えば、スレーブ・デバイス 1、5、およ
び 6 との通信を有効にするには、slaveselect のビット 1、5、および
6 を設定します。ただし、これらの miso 出力上の複数のスレーブ間で、
信号が衝突しないようにするための配慮が必要です。
リセット時に、ビット 0 は 1 に設定され、その他のビットはすべて 0 に
クリアされます。したがって、デバイス・リセット後は、スレーブ・デ
バイス 0 が自動的に選択されます。
Altera Corporation
2004 年 9 月
11–15
Nios II プロセッサ・リファレンス・ハンドブック
alt_avalon_spi_command()
11–16
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
12. Avalon インタフェース対応
EPCS デバイス・コントローラ・コア
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51012-1.1
コアの概要
Avalon™ インタフェース付き EPCS デバイス・コントローラ・コア
(「EPCS コントローラ」)によって、Nios® II システムはアルテラの EPCS
シリアル・コンフィギュレーション・デバイスにアクセスできます。ア
ルテラは Nios II HAL(Hardware Abstraction Layer)システム・ライブ
ラリに統合されるドライバを提供しており、使い慣れたフラッシュ・デ
バイス用 HAL アプリケーション・プログラム・インタフェース(API)
を使用して、EPCS デバイスの読み出しおよび書き込みを実行できます。
EPCS コントローラを使用すると、Nios II システムは以下のことを実行
できます。
■
EPCS デバイスにプログラム・コードを格納します。EPCS コントロー
ラはブート・ローダ機能を提供しており、Nios II システムはそれに
よってメイン・プログラム・コードを EPCS デバイスに格納できます。
■ シリアル番号、NIC 番号、その他の永続的なデータなど、不揮発性
プログラム・データを格納します。
■ FPGA コンフィギュレーション・データを管理します。例えば、ネッ
トワーク対応のエンベデッド・システムは、ネットワークを経由し
て新しい FPGA コンフィギュレーション・データを受信し、EPCS コ
ントローラを使用して、その新しいデータを EPCS シリアル・コン
フィギュレーション・デバイスにプログラムすることができます。
EPCS コントローラは、SOPC Builder に対応しており、SOPC Builder で
生成されたどのシステムにも容易に統合できます。Nios II IDE の Flash
Programmer ユーティリティを使用すれば、データの内容を管理し、そ
れらを EPCS デバイスにプログラムすることができます。
EPCS シリアル・コンフィギュレーション・デバイス・ファミリについ
ては、
「Serial Configuration Devices(EPCS1 & EPCS4)Data Sheet」を
参照してください。Nios II HAL API を使用したフラッシュ・メモリの
読み出しおよび書き込み方法の詳細については、「Nios II ソフトウェア
開発ハンドブック」を参照してください。EPCS メモリの内容を管理お
よびプログラムする方法の詳細については、「Nios II Flash Programmer
User Guide」を参照してください。
Altera Corporation
2004 年 9 月
12–1
機能の説明
Nios II プロセッサ・ユーザの場合、EPCS コントローラ・コアはア
クティブ・シリアル・メモリ・インタフェース(ASMI)デバイス
に取って代わるものです。新しいデザインでは、ASMI コアではな
く EPCS コントローラを使用してください。
機能の説明
図 12-1 は、代表的なシステム・コンフィギュレーションにおける EPCS
コントローラのブロック図を示します。図 12-1 に示すとおり、EPCS デ
バイスのメモリは以下の 2 つの独立した領域と考えることができます。
■
FPGA コンフィギュレーション・メモリ− FPGA コンフィギュレーショ
ン・データはこの領域に格納されます。
■ 汎用メモリ− FPGA コンフィギュレーション・データを格納しても
EPCS デバイスに空きがある場合、残りのスペースは汎用データとシ
ステム起動コード用に使用できます。
図 12-1.EPCS コントローラを統合した Nios II システム
アルテラFPGA
EPCSシリアル・
コンフィギュレーション・
デバイス
EPCS
コントローラ・コア
ブート・
ローダROM
汎用メモリ
Avalonスイッチ・ファブリック
コンフィギュ
レーション・
メモリ
Nios II CPU
その他の
オンチップ・
ペリフェラル
フラッシュ・デバイス用の HAL 標準デバイス・モデルにより、HAL API
を使用した EPCS デバイスへのアクセスはフラッシュ・メモリへのアク
セスと同様です。EPCS デバイスは特殊用途のハードウェア・インタ
フェースを備えているため、Nios II プログラムは提供される HAL フラッ
シュ・ドライバを使用して、EPCS メモリの読み出しおよび書き込みを
行う必要があります。
12–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 EPCS デバイス・コントローラ・コア
EPCS コントローラ・コアは、ブート・ローダ・プログラムを格納するた
めの 1 K バイトのオンチップ・メモリを搭載しています。Nios II プロセッ
サは、EPCS コントローラからブートするようにコンフィギュレーション
することができます。この場合、リセット後に CPU は最初にブート・
ローダ ROM からコードを実行し、
それによって EPCS 汎用メモリ領域か
ら RAM にデータがコピーされます。次に、プログラム制御が RAM に移
ります。Nios II IDE は、EPCS デバイスに格納するプログラムをコンパ
イルする機能と、EPCS デバイスにプログラムするためのプログラム・
ファイルを作成する機能を提供します。詳細については「Nios II Flash
Programmer User Guide」を参照してください。
アルテラ EPCS コンフィギュレーション・デバイスは、汎用 I/O ピンで
はなく、FPGA 上の専用ピンを介して FPGA に接続されます。したがっ
て、EPCS コントローラ・コアは、トップ・レベルの SOPC Builder シス
テム・モジュール上では I/O ポートを作成しません。EPCS デバイスを
使用するコンフィギュレーションのために、EPCS デバイスと FPGA を
ボード上で結線する(つまり、アクティブ・シリアル・コンフィギュレー
ション・モード)場合、EPCS コントローラと EPCS デバイス間では、そ
れ以上の接続は必要ありません。SOPC Builder システムを Quartus® II
ソフトウェアでコンパイルする場合、EPCS コントローラ・コア信号は
自動的に EPCS デバイスのデバイス・ピンに配線されます。
Quartus II Programmer を使用して EPCS デバイスをプログラム
する場合、以前の内容はすべて消去されます。FPGA コンフィ
ギュレーション・データと Nios II プログラム・データを組み合
わせて EPCS デバイスをプログラムするには、Nios II IDE Flash
Programmer ユーティリティを使用します。
Avalon スレーブ・インタフェースとレジスタ
EPCS コントローラ・コアは、コアを制御するブート・ローダ・コードお
よびレジスタへのアクセスを可能にする 1 つの Avalon スレーブ・インタ
フェースを備えています。12–4 ページの表 12–1 に示すように、最初の 256
ワードはブート・ローダ・コード専用、次の 7 ワードはコントロール・レ
ジスタおよびデータ・レジスタ用です。Nios II CPU は、フラットなメモリ
空間として EPCS コントローラのベース・アドレスから始まる 256 の命令
ワードを読み出すことができるため、EPCS コントローラのアドレス空間
にリセットすることが可能です。
Altera Corporation
2004 年 9 月
12–3
Nios II プロセッサ・リファレンス・ハンドブック
デバイスおよびツールのサポート
表 12–1. EPCS コントローラ・レジスタ・マップ
ビットの説明
レジスタ名
R/W
Boot ROM Memory
R
0x100
Read Data
R
(1)
0x101
Write Data
W
(1)
0x102
Status
R/W
(1)
0x103
Control
R/W
(1)
オフセット
0x000
31...0
ブート・ローダ・コード
...
0x0FF
-
(1)
0x104
Reserved
0x105
Slave Enable
R/W
(1)
0x106
End of Packet
R/W
(1)
表 12–1 の注:
(1) アルテラは、コントロール・レジスタとデータ・レジスタの使用方法は公表していません。EPCS デバイス
にアクセスするには、アルテラが提供する HAL ドライバを使用する必要があります。
デバイスおよ
びツールの
サポート
EPCS コントローラは、Cyclone™ デバイス・ファミリなど、EPCS コン
フィギュレーション・デバイスをサポートするすべてのアルテラ FPGA
ファミリに対応しています。EPCS コントローラは、Nios II プロセッサ
に接続する必要があります。コアは、HAL ベースの Nios II システム用
ドライバと、Nios II プロセッサ互換のプリコンパイル済みブート・ロー
ダ・コードを提供します。第 1 世代の Nios プロセッサを含むその他の
プロセッサに対するソフトウェア・サポートは提供されません。
SOPC Builder
でのコアのイン
スタンス化
ハードウェア設計者は、EPCS コントローラの SOPC Builder コンフィギュ
レーション・ウィザードを使用してコアの機能を指定します。コンフィ
ギュレーション・ウィザードでは、1 つのオプションのみ選択できます。
■
Reference Designator −この設定はドロップダウン・メニュー形式に
なっており、メニューから現在の SOPC Builder ターゲット・ボー
ド・コンポーネントの参照先を選択することができます。メニュー
は現在の EPCS コントローラをボード上の EPCS デバイスの参照先に
関連付けます。ターゲット・ボードに一致する参照先が見つからな
い(つまり、ボード・コンポーネントが EPCS デバイスを宣言して
いない)場合、EPCS コントローラをシステムに追加することはでき
ません。参照先は Nios II IDE Flash Programmer によって使用され
ます。詳細については「Nios II Flash Programmer User Guide」を参
照してください。
12–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応 EPCS デバイス・コントローラ・コア
各 FPGA デザインにおいて、1 つの EPCS コントローラのみインスタン
ス化できます。
ソフトウェア・
プログラミン
グ・モデル
このセクションでは、EPCS コントローラのソフトウェア・プログラミ
ング・モデルについて説明します。アルテラは、HAL API 関数を使用し
て EPCS メモリの消去と書き込みを可能にする HAL システム・ライブ
ラリ・ドライバを提供しています。アルテラはコア・レジスタの使用方
法は公開していません。したがって、EPCS デバイスにアクセスするに
は、アルテラが提供する HAL ドライバを使用する必要があります。
HAL システム・ライブラリ・サポート
アルテラが提供するドライバは、Nios II システム用の HAL システム・
ライブラリに統合される HAL フラッシュ・デバイス・ドライバを実装
します。プログラムは通常の HAL API 関数を呼び出して、EPCS メモリ
をプログラムします。これらの関数を使用するのに、基本ドライバの詳
細を知っている必要はありません。
フラッシュをプログラムするための HAL API は、C コードの例を含め
て、「Nios II ソフトウェア開発ハンドブック」で詳細に説明されていま
す。EPCS デバイスの内容を管理およびプログラムする方法の詳細につ
いては、「Nios II Flash Programmer User Guide」を参照してください。
ソフトウェア・ファイル
EPCS コントローラは、以下のソフトウェア・ファイルを提供していま
す。これらのファイルは、Nios II システム・ライブラリに統合される
ハードウェアおよびドライバへのローレベル・アクセスを提供します。
アプリケーション開発者がこれらのファイルを変更してはなりません。
■
altera_avalon_epcs_flash_controller.h、
altera_avalon_epcs_flash_controller.c − HAL システム・ライブラリへ
の統合に必要なドライバを定義するヘッダ・ファイルとソース・ファイル。
■ epcs_commands.h、epcs_commands.c − EPCS デバイス・ハードウェ
アを直接制御して、デバイスの読み出しと書き込みを実行するヘッ
ダ・ファイルとソース・ファイル。これらのファイルもアルテラ SPI
コア・ドライバに依存します。
Altera Corporation
2004 年 9 月
12–5
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
12–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
13. Avalon インタフェース対応コモン・
フラッシュ・インタフェース・コントローラ
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51013-1.2
コアの概要
Avalon™ インタフェース付きコモン・フラッシュ・インタフェース・コ
ントローラ・コア(「CFI コントローラ」)により、SOPC Builder システ
ムを CIF (Common Flash Interface) 仕様に準拠する外部フラッシュ・メ
モリに容易に接続することができます。CFI コントローラは、SOPC
Builder に対応しており、SOPC Builder で生成されたどのシステムにも
容易に統合できます。
Nios® II プロセッサに対して、アルテラは CFI コントローラ用の HAL
(Hardware Abstraction Layer)ドライバ・ルーチンを提供しています。
ドライバは CFI 準拠のフラッシュ・メモリ用ユニバーサル・アクセス・
ルーチンを提供します。したがって、CFI 準拠のフラッシュ・デバイス
をプログラムするために、余分なコードを記述する必要はありません。
HAL ドライバ・ルーチンはフラッシュ・メモリ用の HAL 標準デバイ
ス・モデルを利用しているため、ユーザは使い慣れた HAL アプリケー
ション・プログラミング・インタフェース(API)やファイル I/O 用の
ANSI C 標準ライブラリ関数を使用して、フラッシュ・メモリにアクセ
スできます。HAL API を使用したフラッシュの読み出しおよび書き込み
方法の詳細については、「Nios II ソフトウェア開発ハンドブック」を参
照してください。
Nios II 開発ツールは、Nios II プロセッサと CFI コントローラをベースにし
Flash Programmer ユー
た Flash Programmer ユーティリティを提供します。
ティリティを使用すると、アルテラ FPGA に接続された CFI 準拠のフラッ
シュ・メモリをプログラムできます。詳細については「Nios II Flash
Programmer User Guide」を参照してください。
コ モ ン・フ ラ ッ シ ュ・イ ン タ フ ェ ー ス 仕 様 の 詳 細 に つ い て は、
www.intel.com/design/flash/swb/cfi.htm を参照してください。CFI
コントローラでサポートされるフラッシュ・デバイスの一例として、
www.amd.com にある AMD Am29LV065D-120R のデータ・シート
を参照してください。
コモン・フラッシュ・インタフェース・コントローラ・コアは、SOPC
Builder または Nios 開発キットに同梱して配布された従来のアルテラ・
フラッシュ・コアに代わるものです。これらの従来型コアに付属するす
べてのフラッシュ・チップは、CFI 仕様に準拠しているため、CFI コン
トローラでもサポートされます。
Altera Corporation
2004 年 12 月
13–1
機能の説明
機能の説明
図 13-1 は、代表的なシステム・コンフィギュレーションにおける CFI コ
ントローラのブロック図を示します。図 13-1 に示すとおり、フラッシュ・
デバイス用の Avalon インタフェースは、Avalon トライステート・ブ
リッジを介して接続されます。Avalon トライステート・ブリッジはオ
フチップ・メモリ・バスを作成し、このバスによってフラッシュ・チッ
プはアドレス・ピンとデータ・ピンを他のメモリチップと共有できます。
メモリ・バスに接続されている各チップに対して、独立したチップセレ
クト、リード、およびライト・ピンを提供します。CFI コントローラ・
ハードウェアは最小限のリソースであり、ターゲットのフラッシュ・チッ
プに適したウェイトステート、セットアップ、およびホールド・タイム
によりコンフィギュレーションされた Avalon トライステート・スレー
ブ・ポートにすぎません。このスレーブ・ポートは、Avalon トライス
テート・スレーブのリード転送とライト転送を実行できます。
図 13-1.CFI コントローラを統合した SOPC Builder システム
chipselect,
read_n, write_n
アルテラFPGA
S
Avalonスイッチ・ファブリック
Avalon
マスタ
M
(CPUなど)
other
S
Avalonトライ・ステート・ブリッジ
flash
S
フラッシュ・
メモリ・
チップ
S
その他の
メモリ
M
chipselect,
read_n, write_n
S
オンチップ・
スレーブ・
ペリフェラル
M Avalonマスタ・ポート
S Avalonスレーブ・ポート
Avalon マスタ・ポートは、CFI コントローラの Avalon ポートから直接
リード転送を実行できます。フラッシュ・メモリの書き込み / 消去の詳
細については、13–4 ページの「ソフトウェア・プログラミング・モデル」
を参照してください。
デバイスおよ
びツールの
サポート
CFI コントローラは、Stratix®、Stratix II、Cyclone™、および Cyclone II
デバイス・ファミリをサポートしています。CFI コントローラは Nios II
HAL システム・ライブラリ用のドライバを提供します。第 1 世代の Nios
プロセッサに対しては、ソフトウェア・サポートは提供されません。
13–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応コモン・フラッシュ・インタフェース・コントローラ
SOPC Builder
でのコアのイン
スタンス化
ハードウェア設計者は、CFI コントローラの SOPC Builder コンフィギュ
レーション・ウィザードを使用してコアの機能を指定します。以下のセ
クションでは、コンフィギュレーション・ウィザードで選択可能なオプ
ションについて説明します。
Attributes タブ
このタブのオプションは、CFI コントローラの基本的なハードウェア・
コンフィギュレーションを制御します。
Presets 設定
Presets 設定は、CFI コントローラとともに使用するために特性が評価さ
れたフラッシュ・チップのドロップダウン・メニューです。Presets メ
ニューからチップの 1 つを選択すると、ウィザードは指定されたフラッ
シュ・チップで動作するように、2 つのタブのすべての設定(Board Info
設定を除く)を更新します。
ターゲット・ボード上のフラッシュ・チップが Presets リストに表示さ
れない場合、その他の設定を手動でコンフィギュレーションする必要が
あります。
Size 設定
サイズ設定はフラッシュ・デバイスのサイズを指定します。以下の 2 つ
の設定があります。
■
■
Address Width −フラッシュ・チップのアドレス・バスの幅。
Data Width −フラッシュ・チップのデータ・バスの幅。
サイズ設定を行うと、SOPC Builder はこのデバイスに適切な容量のアド
レス空間を割り当てます。SOPC Builder は、データ幅の異なる Avalon
マスタ・ポートにフラッシュ・チップを適切に接続するダイナミック・
バス・サイジング・ロジックを自動的に生成します。ダイナミック・バ
ス・サ イ ジ ン グ の 詳 細 に つ い て は、
「Avalon Interface Specification
Reference Manual」を参照してください。
Board Info
Board Info 設定は、Nios II 開発キットに付属の Flash Programmer ユー
ティリティで使用されます。この設定は、CFI コントローラを、SOPC
Builder システム用ターゲット・システム・ボード・コンポーネントの
既知のチップにマップします。
Altera Corporation
2004 年 12 月
13–3
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
Reference Designator (chip label) 設定は、現在のフラッシュ・コンポー
ネントをターゲット・ボード上の参照先にマップするドロップダウン・
メニューです。このドロップダウン・メニューは、ターゲット・ボード
上に複数のフラッシュ・チップが存在する場合にのみ有効になります。
ボード上のすべてのフラッシュ・チップが、CFI コントローラの他のイ
ンスタンスで表される場合、SOPC Builder はエラーを表示します。
詳細については、
「Nios II Flash Programmer User Guide」を参照してく
ださい。
Timing タブ
このタブ上のオプションは、フラッシュ・デバイスでのリード転送およ
びライト転送のためのタイミング要件を指定します。
Timing ページでは、
以下の設定が可能です。
■
Setup − chipselect をアサートした後、read または write 信号を
アサートするまでに必要な時間。
■ Wait −各転送で、read または write 信号をアサートするのに必要な
時間。
■ Hold− write信号をデアサートした後、
chipselect信号をデアサー
トするまでに必要な時間。
■ Units−Setup、
Wait、およびHoldの値に使用するタイミングの単位。
ns、us、ms、クロック・サイクルなどが使用できます。
Avalon インタフェースの信号タイミングに関する詳細は、
「Avalon
Interface Specification Reference Manual」を参照してください。
ソフトウェア・
プログラミン
グ・モデル
このセクションでは、CFI コントローラのソフトウェア・プログラミン
グ・モデルについて説明します。一般に、システム内の Avalon マスタ
はフラッシュ・チップをメモリ・デバイスとして直接読み出すことが可
能です。Nios II プロセッサ・ユーザ用に、アルテラは HAL API 関数を
使用したフラッシュ・メモリの消去と書き込みを可能にする HAL シス
テム・ライブラリ・ドライバを提供しています。
HAL システム・ライブラリ・サポート
アルテラが提供するドライバは、Nios II システム用の HAL システム・
ライブラリに統合される HAL フラッシュ・デバイス・ドライバを実装
します。プログラムでは、通常どおり HAL API 関数を呼び出して CFI
準拠のフラッシュ・メモリをプログラムします。基本ドライバの詳細に
関する知識は不要です。
13–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応コモン・フラッシュ・インタフェース・コントローラ
フラッシュをプログラムするための HAL API は、C コードの例を含め
て、「Nios II ソフトウェア開発ハンドブック」で詳細に説明されていま
す。Nios II 開発キットは、フラッシュ・メモリの消去、書き込み、およ
び読み出しのデモンストレーションを行う、Flash Tests と呼ばれるリ
ファレンス・デザインも提供します。
制限
現在、アルテラが提供する CFI コントローラ用ドライバは、AMD およ
び Intel 製フラッシュ・チップのみサポートしています。
ソフトウェア・ファイル
CFI コントローラは、以下のソフトウェア・ファイルを提供しています。
これらのファイルは、ハードウェアへのローレベル・アクセスを定義し、
HAL フラッシュ・デバイス・ドライバ用ルーチンを提供します。アプリ
ケーション開発者がこれらのファイルを変更してはなりません。
■
altera_avalon_cfi_flash.h、
、altera_avalon_cfi_flash.c −ドライバを HAL
システム・ライブラリに統合するのに必要な関数および変数のヘッダ
とソース・コード。
■ altera_avalon_cfi_flash_funcs.h、altera_avalon_cfi_flash_table.c
−CFIテーブルへのアクセスに関連する関数のヘッダとソース・コード。
■ altera_avalon_cfi_flash_amd_funcs.h、altera_avalon_cfi_flash_amd.c
− CFI 準拠の AMD 製フラッシュ・チップをプログラムするためのヘッ
ダとソース・コード。
■ altera_avalon_cfi_flash_intel_funcs.h、altera_avalon_cfi_flash_intel.c
− CFI 準拠の Intel 製フラッシュ・チップをプログラムするためのヘッ
ダとソース・コード。
Altera Corporation
2004 年 12 月
13–5
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
13–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
14. Avalon インタフェース対応
システム ID コア
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51014-1.1
コアの概要
システム ID コアは、SOPC Builder システムに固有の識別子を提供する
シンプルなリード・オンリ・デバイスです。Nios® II プロセッサ・シス
テムは、システム ID コアを使用して、実行可能なプログラムが、ター
ゲット FPGA でコンフィギュレーションされた実際のハードウェア・イ
メージをターゲットとしてコンパイルされたことを確認します。実行可
能プログラムで予期した ID が FPGA のシステム ID コアと一致しない場
合は、ソフトウェアが正しく実行されない可能性があります。
機能の説明
システム ID コアはリード・オンリ Avalon™ スレーブ・インタフェース
を提供します。表 14–1 に示すとおり、2 つのレジスタがあります。
表 14–1. システム ID コア・レジスタ・マップ
オフ
セット
レジスタ名
R/W
ビットの説明
31...0
0
id
R
SOPC Builder システム ID (1)
1
timestamp
R
SOPC Builder 生成時刻 (1)
表 14–1 の注:
(1) 戻り値は一定です。
各レジスタの値はシステム生成時に決定され、常に定数値が返されます。
値の意味は以下のとおりです。
Altera Corporation
2004 年 9 月
■
id − SOPC Builder システムの内容に基づく固有の 32 ビット値。id は
チェックサム値に類似しています。つまり、SOPC Builder システム
のコンポーネントやコンフィギュレーション・オプションが異なれ
ば、生成される id の値も異なります。
■
timestamp −システム生成時刻に基づく固有の 32 ビット値。この値
は 1970 年 1 月 1 日以降の秒数に相当します。
14–1
デバイスおよびツールのサポート
システム ID コアを使用する基本的な方法は、以下の 2 つです。
■
新しいソフトウェアをシステムにダウンロードする前のシステム ID
の確認。この方法は Nios II 統合開発環境(IDE)などのソフトウェ
ア開発ツールで使用されます。ターゲット・ハードウェア・システ
ムにプログラムをダウンロードしても、異なるハードウェアに対し
てプログラムがコンパイルされる場合はあまり意味がありません。
したがって、Nios II IDE はプログラムをダウンロードして実行また
はデバッグする前に、ハードウェアのシステム ID コアがソフトウェ
アの予期したシステム ID と一致することを確認します。
■
リセット後のシステム ID のチェック。プログラムが予期した SOPC
Builder システム以外のハードウェアで動作している場合は、プログ
ラムが完全に機能しないことがあります。プログラムがクラッシュ
しない場合でも、デバッグが困難である微妙な誤動作を生じる可能
性があります。このようなケースを防止するために、プログラムは
予期したシステム ID をシステム ID コアと比較し、それらが一致し
ない場合はエラーを報告できます。
デバイスおよ
びツールのサ
ポート
システム ID コアは SOPC Builder でサポートされるすべてのデバイス・
ファミリに対応します。システム ID コアは、Nios II HAL(Hardware
Abstraction Layer)システム・ライブラリ用のデバイス・ドライバを提
供します。第 1 世代の Nios プロセッサを含む、その他のプロセッサに
対するソフトウェア・サポートは提供されません。
SOPC Builder
でのコアのイン
スタンス化
システム ID コアには、ユーザが設定可能な機能はありません。id およ
び timestamp レジスタの値は、SOPC Builder システムのコンフィギュ
レーションと現在の時刻に基づいて、システム生成時に決定されます。
SOPC Builder システムにはシステム ID コアを 1 つのみ追加でき、その
名前は常に sysid になります。
システム生成後に、System ID コンフィギュレーション・ウィザードを
開くと、id および timestamp レジスタに格納された値を調べることが
できます。また、SOPC Builder のコンポーネント上でマウスを移動させ
ても、値を示すツールヒントが表示されます。
ソフトウェア・
プログラミン
グ・モデル
このセクションでは、システム ID コアのソフトウェア・プログラミン
グ・モデルについて説明します。Nios II プロセッサ・ユーザ向けに、ア
ルテラはシステム ID コア・レジスタを定義する HAL システム・ライブ
ラリ・ヘッダ・ファイルを提供しています。アルテラは、ソフトウェア
が予期したシステム ID がシステム ID コアと一致するかどうかを示す値
を返す、1 つのアクセス・ルーチン alt_avalon_sysid_test() を提
供しています。
14–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
alt_avalon_sysid_test()
alt_avalon_sysid_test()
プロトタイプ :
alt_32 alt_avalon_sysid_test(void)
スレッド・セーフ :
×
ISR からの利用 :
○
インクルード :
<altera_avalon_sysid.h>
説明 :
ハードウェア・レジスタに格納された値が、ソフトウェアが予期した値と一致
する場合は、0 を返します。ハードウェア・タイムスタンプがソフトウェア・タ
イムスタンプよりも大きい場合は、1 を返します。ソフトウェア・タイムスタン
プがハードウェア・タイムスタンプよりも大きい場合は、-1 を返します。
Altera Corporation
2004 年 9 月
14–3
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・ファイル
ソフトウェア・ファイル
システム ID コアには、以下のソフトウェア・ファイルが付属していま
す。これらのファイルはハードウェアへの低水準アクセスを提供します。
アプリケーション開発者がこれらのファイルを変更してはなりません。
■
alt_avalon_sysid_regs.h − ハードウェア・レジスタへのインタフェー
スを定義します。
■ alt_avalon_sysid.c、
、alt_avalon_sysid.h − ハードウェア・アクセス
関数を定義するヘッダとソース・ファイル。
14–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
15. Avalon インタフェース対応キャラクタ
LCD(Optrex 16207)コントローラ
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51019-1.0
コアの概要
(Optrex 16207)コントロー
Avalon™ インタフェース付きキャラクタ LCD
ラ(「LCD コントローラ」)は、Nios® II プロセッサが Optrex 16207(ま
たは同等な)16x2 キャラクタ LCD パネルにキャラクタを表示するため
に必要な、ハードウェア・インタフェースとソフトウェア・ドライバを
提供します。Nios II プロセッサの場合、デバイス・ドライバは HAL シ
ステム・ライブラリで提供されます。Nios II プログラムは、printf()
などの ANSI C 標準ライブラリ・ルーチンを使用して、キャラクタ・モー
ド・デバイスとして LCD コントローラにアクセスします。LCD コント
ローラは、SOPC Builder に対応しており、SOPC Builder で生成された
どのシステムにも容易に統合できます。
Nios II 開発キットには、Optrex LCD モジュールが含まれており、LCD コ
ントローラを介して Optrex 16207 上にテキストを表示する既製デザイン例
がいくつか用意されています。Optrex 16207 LCD モジュールの詳細につい
ては、http://www.optrex.com にアクセスして、Optrex 提供の「Dot Matrix
Character LCD Module User's Manual」を参照してください。
機能の説明
LCD コントローラ・ハードウェアは、ユーザが管理可能な以下の 2 つの
コンポーネントで構成されています。
1.
Optrex 16207 LCD パネルのピンに接続される 11 の信号 – これらの
信号は、Optrex 16207 データ・シートで定義されています。
●
●
●
●
E −イネーブル(出力)
RS −レジスタ・セレクト(出力)
R/W −読み出しまたは書き込み(出力)
DB0 ∼ DB7 −データ・バス(双方向)
2. 4 つのレジスタにアクセスする Avalon スレーブ・インタフェース –HAL
デバイス・ドライバの利用により、ユーザがレジスタに直接アクセス
する必要はありません。したがって、レジスタの使用法の詳細につい
ては記載していません。詳細については、15–2 ページの「ソフトウェ
ア・プログラミング・モデル」を参照してください。
Altera Corporation
2004 年 9 月
15–1
デバイスおよびツールのサポート
図 15-1 に、LCD コントローラ・コアのブロック図を示します。
図 15-1. LCD コントローラのブロック図
アルテラFPGA
E
アドレス
オンチップ・
ロジックへの
Avalon
スレーブ・
インタフェース
RS
データ
コントロール
LCD
コントローラ
R/W
Optrex 16207
LCDモジュール
DB0 .. DB7
デバイスおよ
びツールのサ
ポート
LCD コントローラのハードウェアは、すべてのアルテラ FPGA ファミ
リをサポートしています。LCD コントローラ・ドライバは Nios II プロ
セッサをサポートしています。ドライバは第 1 世代の Nios プロセッサ
はサポートしていません。
SOPC Builder
でのコアのイン
スタンス化
SOPC Builder で は、LCD コ ントローラ・コン ポーネントの 名前は
Character LCD(16x2、Optrex 16207)です。LCD コントローラには、
ユーザ がコン フィギュ レーシ ョン可能 な設定 はありま せん。SOPC
Builder では、LCD コントローラをシステムに追加するかどうかのみを
選択します。システムに追加された各 LCD の場合、トップ・レベルの
システム・モジュールには、LCD モジュールに接続される 11 の信号が
含まれています。
ソフトウェア・
プログラミン
グ・モデル
このセクションでは、LCD コントローラのソフトウェア・プログラミン
グ・モデルについて説明します。
15–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応キャラクタ LCD(Optrex 16207)コントローラ
HAL システム・ライブラリ・サポート
アルテラは、ANSI C 標準ライブラリ関数を使用して LCD コントローラ
へのアクセスを可能にする、Nios II プロセッサ用の HAL システム・ラ
イブラリ・ドライバを提供しています。アルテラが提供するドライバは、
Nios II システム用の HAL システム・ライブラリに統合されます。LCD
ドライバは、「Nios II ソフトウェア開発ハンドブック」で説明している
とおり標準キャラクタ・モード・デバイスです。したがって、キャラク
タをディスプレイに書き込むには、printf() を使用するのが最も簡単
です。
LCD ドライバを利用するには、HAL システム・ライブラリにシステム・
クロック・ドライバが含まれていることが必要です。
LCD へのキャラクタの表示
ドライバは、16 x 2 画面のミニチュア・スケールで VT100 端末に類似し
た動作を実装しています。LCD コントローラに書き込まれたキャラクタ
は、ドライバで維持される 80 カラム× 2 ロウのバッファに格納されま
す。キャラクタが書き込まれと、カーソル位置が更新されます。可視キャ
ラクタはカーソル位置を右に移動します。バッファの右に書き込まれた
可視キャラクタは破棄されます。ライン・フィード・キャラクタ(\n)
は、カーソルを 1 行下の左端のカラムに移動します。
表示可能なキャラクタがバッファのボトムの下の行に書き込まれると、
バッファは上にスクロールされます。カーソルが下に移動してもロウは
すぐにはスクロールしないので、バッファ内の有用な情報を最大限に表
示できます。
バッファ内の可視キャラクタがディスプレイに適合する場合は、すべて
のキャラクタが表示されます。バッファの幅がディスプレイよりも広い
場合、ディスプレイは水平方向にスクロールして、すべてのキャラクタ
を表示します。行がスクロールするスピードは行によって異なり、バッ
ファの各行にあるキャラクタ数によって決まります。
LCD ドライバは、ANSI および VT100 エスケープ・シーケンスの小さな
サブセットを認識します。これらのスケープ・シーケンスは、表 15–1 に
示すとおり、カーソル位置の制御、およびディスプレイのクリアに使用
することができます。
Altera Corporation
2004 年 9 月
15–3
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 15–1. LCD コントローラでサポートされるエスケープ・シーケンス
シーケンス
意味
BS
(\b)
カーソルを左に 1 キャラクタ分移動します。
CR
(\r)
カーソルを現在行の開始位置に移動します。
LF
(\n)
カーソルを行の開始位置に移動し、さらに 1 行下に移動します。
ESC(
(\x1B)
ESC
[
ESC
[
ESC
[
VT100 コントロール・シーケンスを開始します。
<y>
;
<x>
K
H
指定された y、x 位置にカーソルを移動します。この位置は、1、1 で
ある左上隅を基準にしてカウントされます。
現在のカーソル位置から行末までクリアします。
2
J
画面全体をクリアします。
LCD コントローラは出力専用デバイスです。したがって、このデバイス
から読み出そうとしても直ぐに復帰し、受信されたキャラクタがないこ
とを示します。
システム・ライブラリに対して Reduced device drivers オプションがイ
ネーブルされている場合、LCD コントローラ・ドライバはシステム・ラ
イブラリに含まれません。他のデバイスに小型ドライバを使用しながら、
LCD コントローラを使用したい場合は、プリプロセッサ・オプションに
-DALT_USE_LCD_16207 を追加します。
ソフトウェア・ファイル
LCD コントローラには、以下のソフトウェア・ファイルが付属していま
す。これらのファイルは、ハードウェアへの低水準インタフェースを定
義し、HAL ドライバを提供します。アプリケーション開発者がこれらの
ファイルを変更してはなりません。
■
altera_avalon_lcd_16207_regs.h −このファイルはコアのレジスタ・
マップを定義し、低水準ハードウェアにアクセスするための記号定
数を提供します。
■ altera_avalon_lcd_16207、
、altera_avalon_lcd_16207.c −これらのファ
イルは、HAL システム・ライブラリ用の LCD コントローラ・デバ
イス・ドライバを実装します。
15–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
Avalon インタフェース対応キャラクタ LCD(Optrex 16207)コントローラ
レジスタ・マップ
HAL デバイス・ドライバを利用すれば、レジスタに直接アクセスする必
要はなくなります。したがって、アルテラはレジスタ・マップの詳細は
公開していません。詳細な情報が必要な場合、レジスタ・マップは
altera_avalon_lcd_16207_regs.h ファイル、レジスタの使用法は Optrex
提供の「Dot Matrix Character LCD Module User's Manual」に記載され
ています。
割り込み動作
LCD コントローラは割り込みを生成しません。ただし、LCD ドライバ
のテキスト・スクロール機能は、HAL システム・クロック・ドライバに
依存します。このドライバは割り込みをタイミングを図る目的に使用し
ます。
Altera Corporation
2004 年 9 月
15–5
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
15–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
セクション III. 付録
このセクションでは、Nios® II プロセッサに関する追加情報を提供します。
このセクションは、以下の章で構成されています。
改訂履歴
■
第 17 章 Nios II コア実装の詳細
■
第 18 章 Nios II プロセッサのリビジョン履歴
■
第 19 章 アプリケーション・バイナリ・インタフェース
■
第 20 章 命令セット・リファレンス
以下の表では、第 17 章∼第 20 章の改訂履歴を示しています。これらの
バージョン番号は資料の改訂を追跡しているのもので、Nios II 開発キッ
トや Nios II プロセッサのバージョン番号には関係ありません。
章
17
日付 / バージョン
変更内容
2004 年 12 月、v1.2
Nios II/f および Nios II/s コアの乗算およ
び除算性能セクションを更新。
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
2004 年 12 月、v1.1
Nios II version 1.1 のコアを更新。
2004 年 9 月、v1.0
初版
19
2004 年 5 月、v1.0
初版
20
2004 年 12 月、v1.2
●
18
●
Altera Corporation
break 命令を更新。
srli 命令を修正。
2004 年 9 月、v1.1
Nios II 1.01 リリースのために更新。
2004 年 5 月、v1.0
初版
セクション III–1
付録
セクション III–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
16. Avalon インタフェース対応
Mutex コア
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51020- 1.0
コアの概要
マルチプロセッサ環境では、Avalon™ インタフェース付き Mutex コア
(Mutex コア)を使用して、共有リソースへのアクセスを調整すること
ができます。Mutex コアは、共有リソースの相互排他的な所有権を保証
するプロトコルを提供します。
Mutex コアは、ハードウェアをベースにした微小なテスト&セット操作
を提供し、これによってマルチプロセッサ環境のソフトウェアが Mutex
を所有するプロセッサを特定することができます。Mutex コアを共有メ
モリと併用すれば、メールボックスやソフトウェア Mutex などの付加的
なプロセッサ間調整機能を実装できます。
Mutex コアは、Nios® II プロセッサ・システムなど、Avalon ベースのプ
ロセッサ・システムで使用するように設計されています。アルテラは、
ハードウェア Mutex の使用が可能になる Nios II プロセッサ用デバイス・
ドライバを提供しています。
Mutex コアは、SOPC Builder に対応しており、SOPC Builder で生成さ
れたどのシステムにも容易に統合できます。
機能の説明
Mutex コアには、2 つのメモリ・マップド 32 ビット・レジスタへのアク
セスを提供するシンプルな Avalon スレーブ・インタフェースを備えて
います。表 16–1 に、レジスタを示します。
表 16–1. Mutex コアのレジスタ・マップ
Altera Corporation
2004 年 12 月
ビットの説明
オフ
セット
レジスタ名
R/W
0
mutex
RW
OWNER
1
reset
RW
–
31 … 16
15 … 1
0
VALUE
–
RESET
16–1
デバイスおよびツールのサポート
Mutex コアの基本的な動作を以下に示します。この説明では、1 つの
Mutex コアにアクセスするプロセッサが複数存在し、各プロセッサが
固有の識別子(ID)をもっているものと想定しています。
■
■
■
■
■
VALUE フィールドが 0x0000 のとき、Mutex は利用可能です(つま
り、ロック解除されている)
。それ以外の場合、Mutex は利用できま
せん(つまり、ロックされている)。
mutex レジスタは常に読み出し可能です。プロセッサ(または任意
の Avalon マスタ・ペリフェラル)は、mutex レジスタを読み出し
て、現在の状態を確認できます。
mutex レジスタは特定の条件でのみ書き込み可能です。以下の条件
の一方または両方が成立する場合にのみ、書き込み動作で mutex レ
ジスタが変更されます。
mutex レジスタの VALUE フィールドがゼロである。
●
mutex レジスタの OWNER フィールドが書き込むデータの
●
OWNER フィールドと一致する。
プロセッサは、自身の ID を OWNER フィールドに書き込み、VALUE に
ゼロ以外を書き込んで、Mutex の獲得を試みます。次にプロセッサは、
OWNER フィールドを確認して、獲得に成功したかどうかをチェック
します。
システム・リセット後に、reset レジスタの RESET ビットは High に
なります。このビットは 1 を書き込むとクリアされます。
デバイスおよ
びツールの
サポート
Mutex コアは、SOPC Builder でサポートされるすべてのアルテラ・デバイ
ス・ファミリをサポートし、Nios II HAL(Hardware Abstraction Layer)シ
ステム・ライブラリ用のデバイス・ドライバを提供します。
SOPC Builder
でのコアの
インスタンス化
ハードウェア設計者は、Mutex コアの SOPC Builder コンフィギュレー
ション・ウィザードを使用して、コアのハードウェア機能を指定します。
コンフィギュレーション・ウィザードは、以下の設定を提供します。
■
Initial Value − リセット後の VALUE フィールドの初期内容。Initial
Value 設定がゼロ以外の場合は、さらに Initial Owner も指定する必
要があります。
■ Initial Owner − リセット後の OWNER フィールドの初期内容。
Initial Owner が指定された場合、この所有者は Mutex を解放してか
ら、別の所有者が獲得できるようにする必要があります。
16–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 Mutex コア
ソフトウェア・
プログラミン
グ・モデル
以下のセクションでは、ハードウェアへのアクセスに使用されるソフト
ウェア構造など、Mutex コアのソフトウェア・プログラミング・モデル
について説明します。アルテラは、Nios II プロセッサ・ユーザ向けに、
Mutex コア・ハードウェアにアクセスするためのルーチンを提供してい
ます。これらの関数は Mutex コア専用のもので、低水準ハードウェアを
直接操作します。HAL API または ANSI C 標準ライブラリを介して、
Mutex コアにアクセスすることはできません。Nios II プロセッサ・シス
テムでは、プロセッサは cpuid コントロール・レジスタの値を mutex
レジスタの OWNER フィールドに書き込んで、Mutex をロックします。
ソフトウェア・ファイル
アルテラは Mutex コアとともに、以下のソフトウェア・ファイルを提供
しています。
■
altera_avalon_mutex_regs.h −このファイルは、コアのレジスタ・
マップを定義し、低水準ハードウェアにアクセスするための記号定
数を提供します。
■ altera_avalon_mutex.h −このファイルは、データ構造体と Mutex コ
ア・ハードウェアにアクセスするための関数を定義しています。
■ altera_avalon_mutex.c −このファイルには、Mutex コアにアクセス
するための関数の実装が含まれています。
ハードウェア Mutex
このセクションでは、Mutex コア・ハードウェアを操作する低水準ソフ
トウェア構造体について説明します。
ファイル altera_avalon_mutex.h は、Mutex デバイスのインスタンスを
表す構造体 alt_mutex_dev を宣言します。また、表 16–2 に示す、Mutex
ハードウェア構造体にアクセスするための関数も宣言します。
表 16–2. ハードウェア Mutex 関数 ( 1 / 2 )
関数名
説明
altera_avalon_mutex_open()
Mutexのハンドルを要求して、その他のすべての関数がMutex
コアにアクセスできるようにします。
altera_avalon_mutex_trylock()
Mutex のロックを試みます。Mutex のロックに失敗すると直
ぐに戻ります。
altera_avalon_mutex_lock()
Mutex をロックします。Mutex を獲得するまで戻りません。
altera_avalon_mutex_unlock()
Mutex のロックを解除します。
Altera Corporation
2004 年 12 月
16–3
Nios II プロセッサ・リファレンス・ハンドブック
ソフトウェア・プログラミング・モデル
表 16–2. ハードウェア Mutex 関数 ( 2 / 2 )
関数名
説明
altera_avalon_mutex_is_mine()
この CPU が Mutex を所有しているかどうかを判断します。
altera_avalon_mutex_first_lock()
リセット以降に Mutex が解放されているかどうかをテストし
ます。
これらのルーチンは、ハードウェア Mutex コアを使用して、ソフトウェ
ア Mutex 構造体へのアクセスを調整します。各関数の詳細な説明につい
ては、16–5 ページの「Mutex API」のセクションを参照してください。
以下のコードは、Mutex デバイス・ハンドルのオープン方法と、Mutex
のロック方法を示します。
例:Mutex
のオープンとロック
例:
#include <altera_avalon_mutex.h>
/* Mutex デバイス・ハンドルを取得 */
alt_mutex_dev* mutex = altera_avalon_mutex_open( “/dev/mutex” );
/* Mutex を獲得して、値を 1 に設定 */
altera_avalon_mutex_lock( mutex, 1 );
/*
* ここで共有リソースにアクセスする。
*/
/* ロックを解放 */
altera_avalon_mutex_unlock( mutex );
16–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Avalon インタフェース対応 Mutex コア
Mutex API
Altera Corporation
2004 年 12 月
このセクションでは、Mutex コアに対するアプリケーション・プログラ
ミング・インタフェース(API)について説明します。
16–5
Nios II プロセッサ・リファレンス・ハンドブック
altera_avalon_mutex_is_mine()
altera_avalon_mutex_is_mine()
プロトタイプ :
int altera_avalon_mutex_is_mine(alt_mutex_dev* dev)
スレッド・セーフ :
○
ISR からの利用 :
×
インクルード :
<altera_avalon_mutex.h>
パラメータ :
dev— テストする Mutex デバイス。
戻り値 :
この CPU が Mutex を所有する場合は、ゼロ以外の値を返します。
説明 :
altera_avalon_mutex_is_mine() は、この CPU が Mutex を所有しているかどう
かを判断します。
16–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
altera_avalon_mutex_first_lock()
altera_avalon_mutex_first_lock()
プロトタイプ :
int altera_avalon_mutex_first_lock(alt_mutex_dev* dev)
スレッド・セーフ :
○
ISR からの利用 :
×
インクルード :
<altera_avalon_mutex.h>
パラメータ :
dev— テストする Mutex デバイス。
戻り値 :
リセット以降にこの Mutex が解放されている場合は 1、解放されていない場合は 0 を
返します。
説明 :
altera_avalon_mutex_first_lock() は、リセット以降にこの Mutex が解放さ
れているかどうかを判断します。
Altera Corporation
2004 年 12 月
16–7
Nios II プロセッサ・リファレンス・ハンドブック
altera_avalon_mutex_lock()
altera_avalon_mutex_lock()
プロトタイプ :
void altera_avalon_mutex_lock(alt_mutex_dev* dev,
alt_u32 value)
スレッド・セーフ :
○
ISR からの利用 :
×
インクルード :
<altera_avalon_mutex.h>
パラメータ :
dev— 獲得する Mutex デバイス。
value—Mutex に書き込む新しい値。
戻り値 :
–
説明 :
altera_avalon_mutex_lock() は、ハードウェアMutexを獲得すると同時に、Mutex
に value パラメータをロードするブロッキング・ルーチンです。
16–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
altera_avalon_mutex_open()
altera_avalon_mutex_open()
プロトタイプ :
alt_mutex_dev* alt_hardware_mutex_open(const char* name)
スレッド・セーフ :
○
ISR からの利用 :
×
インクルード :
<altera_avalon_mutex.h>
パラメータ :
name— オープンする Mutex デバイスの名前。
戻り値 :
供給された名前に関連付けられた Mutex デバイス構造体へのポインタ。
対応する Mutex
デバイス構造体が検出されなかった場合は NULL。
説明 :
altera_avalon_mutex_open() はハードウェアMutex構造体へのポインタを取得
します。
Altera Corporation
2004 年 12 月
16–9
Nios II プロセッサ・リファレンス・ハンドブック
altera_avalon_mutex_trylock()
altera_avalon_mutex_trylock()
プロトタイプ :
int altera_avalon_mutex_trylock(alt_mutex_dev* dev,
alt_u32 value)
スレッド・セーフ :
○
ISR からの利用 :
×
インクルード :
<altera_avalon_mutex.h>
パラメータ :
dev— ロックする Mutex デバイス。
value—Mutex に書き込む新しい値。
戻り値 :
Mutex が正常にロックされた場合はゼロ、Mutex がロックされなかった場合はゼロ以外
の値。
説明 :
altera_avalon_mutex_trylock() は、ハードウェア Mutex のロックを 1 回だけ試
行して直ちに戻ります。
16–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
altera_avalon_mutex_unlock()
altera_avalon_mutex_unlock()
プロトタイプ :
void altera_avalon_mutex_unlock(alt_mutex_dev* dev)
スレッド・セーフ :
○
ISR からの利用 :
×
インクルード :
<altera_avalon_mutex.h>
パラメータ :
dev— ロックを解除する Mutex デバイス。
戻り値 :
–
説明 :
altera_avalon_mutex_unlock() は、ハードウェア Mutex デバイスを解放します。
解放時に、Mutex に格納されている値はゼロに設定されます。呼び出し元が Mutex を保
持しない場合、この関数の動作は不定です。
Altera Corporation
2004 年 12 月
16–11
Nios II プロセッサ・リファレンス・ハンドブック
altera_avalon_mutex_unlock()
16–12
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
17. Nios II コア実装の詳細
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51015-1.2
はじめに
本書では、現時点で入手可能なすべての Nios® II プロセッサ・コア実装
について説明します。ここでは、各プロセッサ・コアの実装固有の機能
についてのみ説明します。20 章の「命令セット・リファレンス」に記載
するとおり、すべてのコアが Nios II 命令セット・アーキテクチャをサ
ポートしています。
特定のコアの詳細については、そのコアの該当するセクションを参照し
てください。
■
17–3 ページの「Nios II/f コア」
17–11 ページの「Nios II/s コア」
■ 17–17 ページの「Nios II/e コア」
■
Altera Corporation
2004 年 12 月
17–1
はじめに
表 17–1 は、Nios II プロセッサ・コアの目的と機能を比較したもので
す。この表は、システム設計者がターゲット・アプリケーションに最も
適したコアを選択するのに役立ちます。
表 17–1. Nios II プロセッサ・コア
(1/2)
機能
目的
性能
Nios II/f
小型コア・サイズ
高速実行速度
0.15
0.74
1.16
Max. DMIPS (2)
31
127
218
200 MHz
165 MHz
185 MHz
< 700 LE;
< 350 ALM
< 1400 LE;
< 700 ALM
< 1800 LE;
< 900 ALM
1段
5段
6段
パイプライン
2 G バイト
2 G バイト
2 G バイト
キャッシュ
–
512 バイト∼
64 K バイト
512 バイト∼
64 K バイト
メモリ・アクセスの
パイプライン化
–
あり
あり
分岐予測
–
スタティック
ダイナミック
キャッシュ
–
–
512 バイト∼
64 K バイト
メモリ・アクセスの
パイプライン化
–
–
–
キャッシュ・
バイパス方法
–
–
I/O 命令における
ビット 31 キャッシュ・
バイパス
ハードウェア乗算
–
3 サイクル (3)
1 サイクル (3)
外部アドレス空間
論理演算
ユニット
Nios II/s
最小コア・サイズ
領域
データ・
バス
Nios II/e
DMIPS/MHz (1)
Max. fM A X (2)
命令バス
コア
–
オプション
オプション
1 ビットあたり
1 サイクル
3 サイクル・シフト
(3)
1 サイクル・バレル
シフタ (3)
オプション
オプション
オプション
ハードウェア・
ブレークポイント
–
オプション
オプション
オフチップ・
トレース・バッファ
–
オプション
オプション
ハードウェア除算
シフタ
JTAG
JTAG インタフェース、
デバッグ・ 実行制御、ソフトウェア・
モジュール ブレークポイント
17–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
表 17–1. Nios II プロセッサ・コア
(2/2)
機能
例外処理
コア
例外タイプ
Nios II/e
Nios II/s
Nios II/f
ソフトウェア・
トラップ、
未実装命令、
ハードウェア
割り込み
ソフトウェア・
トラップ、
未実装命令、
ハードウェア
割り込み
ソフトウェア・
トラップ、
未実装命令、
ハードウェア
割り込み
あり
あり
あり
なし、スーパバイ
ザ・モードに固定
なし、スーパバイ
ザ・モードに固定
なし、スーパバイザ・
モードに固定
あり
あり
あり
統合割り込み
コントローラ
ユーザ・モードのサポート
カスタム命令のサポート
表 17–1 の注:
(1) Nios II/s および Nios II/f コアの DMIPS 性能は、ハードウェア乗算オプションによって異なります。
最高スピード・グレードの Stratix® II FPGA をターゲットとします。
(2) 最速のハードウェア乗算オプションを使用し、
(3) 乗算およびシフトの性能は、使用するハードウェア乗算オプションによって異なります。ハードウェア乗
算オプションを使用しない場合、乗算演算はソフトウェアでエミュレートされ、シフト演算には 1 ビット
あたり1サイクルが必要になります。詳細については、
各コアの論理演算ユニットの説明を参照してください。
デバイス・
サポート
すべての Nios II コアは、以下のアルテラ FPGA ファミリをサポートし
ています。
■
Stratix
Stratix II
■ CycloneTM
■ Cyclone II
■
Nios II/f コア
Nios II/f「高速」コアは、高い実行性能を達成するように設計されてい
ます。コア・サイズよりも性能を追求しているため、Nios II/f コアは
Nios II/s コアより約 25% 大きくなります。Nios II/f コアは、以下のデ
ザイン目標を念頭に置いて設計されています。
■
■
1 サイクルあたりの命令実行効率の最大化
プロセッサ・コアの fMAX 性能の最大化
これらを反映した Nios II/f コアは、多彩な機能をもつオペレーティン
グ・システムを実行するシステムのように、大量のコードやデータを処
理するアプリケーションや性能重視のアプリケーションに最適です。
Altera Corporation
2004 年 12 月
17–3
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/f コア
概要
Nios II/f コアの特長は以下のとおりです。
■
■
■
■
■
■
■
■
独立した命令キャッシュとデータ・キャッシュを搭載
最大 2 G バイトの外部アドレス空間にアクセス可能
最大 DMIPS/MHz を達成する 6 段パイプラインを採用
ダイナミック分岐予測を実行
ハードウェア乗算、除算、およびシフト・オプションによる演算性
能の向上
カスタム命令の追加をサポート
JTAG デバッグ・モードをサポート
ハードウェア・ブレークポイントやリアルタイム・トレースなど、オ
プションの JTAG デバッグ・モジュール拡張機能をサポート
以下のセクションでは、Nios II/f コア実装の注目すべき特長を詳細に説
明します。本書では、Nios II ハードウェア設計者やソフトウェア設計者
にとって重要でない、ローレベルのデザイン問題や実装の詳細について
は解説していません。
レジスタ・ファイル
システム生成時に、cpuid コントロール・レジスタ(clt5)には、シ
ステムの各プロセッサで確実に一意になる値が割り当てられます。
論理演算ユニット
Nios II/f コアには、乗算、除算、およびシフト演算の性能を向上させる
ために、いくつかの論理演算ユニット(ALU)オプションがあります。
乗算および除算性能
Nios II/f コアには、以下のハードウェア乗算オプションがあります。
■
No hardware multiply −乗算ハードウェアを搭載しません。この場
合、乗算演算はソフトウェアでエミュレートされます。
■ Use embedded multipliers −ターゲット・デバイス上で利用可能な専
用エンベデッド乗算器を搭載します。このオプションは、Stratix II
FPGA の DSP ブロックなど、エンベデッド乗算器を搭載したアルテ
ラ FPGA でのみ利用できます。
■ Use LE-based multipliers −ロジック・エレメント(LE)リソースで
構築されたハードウェア乗算器を搭載します。
17–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
また、Nios II/f コアには、LE ベースの除算回路を ALU に搭載するハー
ドウェア除算オプションも用意されています。
ALU オプションを含めると、1 つまたは複数の演算命令の性能が向上し
ます。エンベデッド乗算器の性能は、ターゲット FPGA ファミリによっ
て異なることに注意してください。
表 17–2 に、ハードウェア乗算および除算オプションの詳細を示します。
表 17–2. Nios II/f コアのハードウェア乗算および除算の詳細
ALU オプション
ハードウェアの詳細
1 命令あたりの 結果レイテンシ・ サポートされる
サイクル数
命令
サイクル数
ハードウェア乗算または 乗算および除算命令で
除算なし
例外を生成
–
–
なし
LE ベースの乗算器
11
+2
mul、 muli
Stratix および Stratix II
ALU に 32 x 32 ビット
ファミリのエンベデッド 乗算器を搭載
乗算器
1
+2
mul、muli、
mulxss、
mulxsu、
mulxuu
Cyclone II ファミリの
エンベデッド乗算器
ALU に 32 x 16 ビット
乗算器を搭載
5
+2
mul、 muli
ハードウェア除算
ALU にマルチサイクル
除算回路を搭載
4 – 66
+2
div、 divu
ALU に 32 x 4 ビット
乗算器を搭載
ALU が命令をディスパッチしてそれぞれの結果を生成できる最大レー
トは、1 命令あたりのサイクル数によって決まります。結果がいつ得ら
れるかはレイテンシ値によって決まります。連続する命令で結果とオペ
ランドの間にデータ依存性がない場合、レイテンシはスループットに影
響を与えません。ただし、命令がそれ以前の命令の結果に依存する場合、
プロセッサは結果が得られるまで、該当する結果のレイテンシ・サイク
ル数にわたってストールします。
以下のコード例では、乗算演算(1 命令サイクルおよび 2 結果レイテン
シ・サイクル)の直後に、乗算結果を使用する加算演算が続いています。
Nios II/f コア上で、addi 命令は、大部分の ALU 命令と同様に、1 サイ
クルで実行されます。ただし、このコード例では、addi 命令の実行は、
乗算演算が完了するまで 2 サイクルの遅延が生じます。
mul r1, r2, r3
addi r1, r1, 100
Altera Corporation
2004 年 12 月
; r1 = r2 * r3
; r1 = r1 + 100(乗算結果に依存)
17–5
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/f コア
これに対して、以下のコードではプロセッサはストールしません。
mul r1, r2, r3
or r5, r5, r6
or r7, r7, r8
addi r1, r1, 100
;
;
;
;
r1 = r2 * r3
前の結果に依存しない
前の結果に依存しない
r1 = r1 + 100(乗算結果に依存)
シフトおよび回転の性能
シフト演算の性能はハードウェア乗算オプションによって異なります。
ハードウェア乗算器が存在する場合、ALU は 1 クロック・サイクルでシ
フトおよび回転演算を完了します。ハードウェア乗算器がない場合、
ALU には 1 サイクルあたり 1 ビットのシフトおよび回転が可能な専用シ
フト回路が搭載されています。
メモリ・アクセス
Nios II/f コアには、命令キャッシュとデータ・キャッシュが搭載されて
います。それぞれのキャッシュ・サイズは、512 バイトから 64 K バイト
の間でユーザが定義可能です。Nios II/f コアは、データ・マスタ・ポー
ト上の I/O にアクセスするビット 31 キャッシュ・バイパス手法をサポー
トしています。アドレスは 31 ビット幅なので、ビット 31 キャッシュ・
バイパス手法に対応します。
命令キャッシュ
命令キャッシュ・メモリの特長は、以下のとおりです。
■
■
■
ダイレクト・マップド・キャッシュ方式
クリティカル・ワード・ファースト
32 バイト(8 ワード)/ キャッシュ・ライン
命令バイト・アドレスは、以下のフィールドに分割されます。
.
タグ
ライン
.
.
5
2
1
0
オフセット
4
3
0
0
ラインおよびタグ・フィールドのサイズは、キャッシュ・メモリのサイ
ズによって異なりますが、オフセット・フィールドは常に 3 ビット(つ
まり、8 ワード・ライン)です。最大命令バイト・アドレス・サイズは
31 ビットです。
命令キャッシュは永久にイネーブルされ、バイパスできません。
17–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
データ・キャッシュ
データ・キャッシュ・メモリの特長は、以下のとおりです。
■
ダイレクト・マップド・キャッシュ方式
1 ワード / ライン
■ ライトバック
■ ライト・アロケート(つまり、ミスが発生すると、そのアドレスの
ラインを割り当てるストア形式の命令)
■
データ・バイト・アドレスは、以下のフィールドに分割されます。
.
タグ
ライン
.
.
2
1
0
オフセット
ラインおよびタグ・フィールドのサイズは、キャッシュ・メモリのサイズ
によって異なりますが、オフセット・フィールドは常に 2 ビット(つまり、
ワード内のオフセット・バイト)です。最大データ・バイト・アドレス・
サイズは 31 ビットです。
キャッシュ・バイパス
データ・キャッシュをバイパスする一般的な方法は、キャッシュをバイ
パスする I/O ロードおよびストア命令を使用することです。さらに、
Nios II/f コアは、データ・マスタ・ポート上のビット 31 キャッシュ・
バイパス手法も実装しています。この手法では、アドレスのビット 31
を、プロセッサがキャッシュとの間でデータを転送するかまたはキャッ
シュをバイパスするかを示すタグとして使用します。特定のアドレスを
キャッシュしその他をバイパスできるため、この手法はソフトウェアに
便利です。ソフトウェアは、アドレス指定されたデータのキャッシング
に関する追加情報を指定しないで、関数の間でアドレスをパラメータと
して渡すことができます。
ソフトウェアは、同一キャッシュ・ラインへのキャッシュ・アクセスと
非キャッシュ・アクセスを混在させてはなりません。キャッシュ・デー
タ・アクセスと非キャッシュ・データ・アクセスを混在させる必要があ
る場合は、キャッシュ・アクセス完了後の非キャッシュ・アクセス実行
前に、データ・キャッシュの対応するラインをフラッシュします。
Altera Corporation
2004 年 12 月
17–7
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/f コア
実行パイプライン
このセクションでは、性能重視のアプリケーションに効果的なパイプラ
イン動作の概要を示します。設計者はこの内容を考慮して、プロセッサ
の不必要なストールを最小限にすることができます。ほとんどのアプリ
ケーション・プログラマは個々の命令の性能を解析する必要はなく、以
下の表に関する知識も必要ありません。
Nios II/f コアは 6 段パイプラインを採用しています。表 17–3 にパイプ
ライン・ステージを示します。
表 17–3. Nios II/f コアの実装パイプライン・ステージ
ステージの文字
ステージ名
F
フェッチ(Fetch)
D
デコード(Decode)
E
実行(Execute)
M
メモリ(Memory)
A
アライン(Align)
W
ライト・バック(Writeback)
1 サイクルあたり最大で 1 つの命令が、実行または破棄(あるいはその
両方)されます。命令は順序どおり実行および破棄されます。ダイナミッ
ク分岐予測は、2 ビット分岐履歴テーブルを使用して実装されます。パ
イプラインは以下の状態でストールします。
■
マルチサイクル命令
Avalon™ 命令マスタ・ポートのリード・アクセス
■ Avalon データ・マスタ・ポートのリード / ライト・アクセス
■ レイテンシの長い命令(ロード、乗算、シフトなど)でのデータ依存
■
パイプラインのストール
パイプラインは、パイプライン・ステージがストールした場合は、新し
い値が当該ステージまたはそれより前のステージに入らないように設定
されています。パイプライン・ステージが空の場合でも、パイプライン・
ステージの「早送り」は許されません。
A ステージおよび D ステージでのみストールを発生できます。
以下のいずれかの状態になると、A ステージ・ストールが発生します。
17–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
■
A ステージのメモリ命令が、Avalon データ・マスタ要求の完了を待っ
ている。通常、この状態はデータ・キャッシュ内でロード・ミスま
たはストア・ミスが発生するか、またはフラッシュされた命令がダー
ティ・ラインをライトバックする必要があるときに発生します。
■ A ステージのシフト / 回転命令が操作を実行中である。この状態はマ
ルチサイクル・シフト回路(つまり、ハードウェア乗算器を利用で
きない)でのみ発生します。
■ A ステージの除算命令が操作を実行中である。この状態はオプショ
ンの除算回路が利用可能な場合にのみ発生します。
■ A ステージのマルチサイクル・カスタム命令がストール信号をアサー
トしている。この状態はデザインにマルチサイクル・カスタム命令
が含まれている場合にのみ発生します。
D ステージのストールは、以下のいずれかの状態が発生し、かつ M ステー
ジのパイプライン・フラッシュがアクティブな場合にのみ発生します。
■
命令が結果の遅い命令で生じた結果の使用を試みるのが早すぎる。結
果の遅い命令は、ロード、シフト、回転、rdctl、乗算(ハードウェア
乗算がサポートされている場合)
、除算(ハードウェア除算がサポート
されている場合)
、およびマルチサイクル・カスタム命令(存在する場
合)です。
命令の性能
すべての命令は、実行に 1 サイクルまたは複数サイクルを要します。命令
によっては、実行に関連してその他のペナルティを持っています。結果の
遅い命令には、命令と命令の間に配置された 2 サイクル・バブルと、それ
らの結果を使用する命令が含まれています。パイプラインをフラッシュす
る命令によって、以降の命令が最大 3 つまでキャンセルされます。これに
より、3 サイクルのペナルティと 4 サイクルの実行時間が発生します。
Avalon 転送を必要とする命令は、要求される Avalon 転送(1 回の書き込
みと 1 回の読み出しを限度とする)が完了するまでストールされます。
Altera Corporation
2004 年 12 月
17–9
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/f コア
すべての命令の実行性能を表 17–4 に示します。
表 17–4. Nios II/f コアの命令実行性能
命令
サイクル数
ペナルティ
通常の ALU 命令(add、cmplt など)
1
組み合わせカスタム命令
1
マルチサイクル・カスタム命令
1
分岐(正しく予測され、分岐が発生した場合)
2
分岐(正しく予測され、分岐が発生しなかった場合)
1
分岐(予測に失敗した場合)
4
パイプライン
のフラッシュ
trap、break、 eret、bret、 flushp、wrctl、および未実装命令
4
パイプライン
のフラッシュ
call
2
jmp、ret、 callr
3
結果の遅延
rdctl
1
結果の遅延
load(Avalon 転送を使用しない場合)
1
結果の遅延
>1
結果の遅延
load(Avalon 転送を使用した場合)
store、flushd(Avalon 転送を使用しない場合)
store、flushd(Avalon 転送を使用した場合)
1
>1
initd
1
flushi、initi
1
乗算
(1)
結果の遅延
除算
(1)
結果の遅延
シフト / 回転(ハードウェア乗算が存在する場合)
シフト / 回転(ハードウェア乗算が存在しない場合)
その他すべての命令
1
結果の遅延
1 - 32
結果の遅延
1
表 17–4 の注:
(1) ハードウェア乗算または除算オプションによって異なります。詳細については、17–5 ページの表 17–2 を
参照してください。
17–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
例外処理
Nios II/f コアは、以下の例外タイプをサポートしています。
■
ハードウェア割り込み
ソフトウェア・トラップ
■ 未実装命令
■
JTAG デバッグ・モジュール
Nios II/f コアは JTAG デバッグ・モジュールをサポートしており、ソフ
トウェア・デバッグ・ツールへの JTAG インタフェースを提供します。
Nios II/f コアは、プロセッサからリアルタイム・トレース・データを
ルーティングして、外部デバッグ・プローブに格納できるオプションの
拡張インタフェースをサポートしています。
サポートされていない機能
3 章の「プログラミング・モデル」に記載したように、Nios II/f コアは
ユーザ・モードをサポートしていません。これはアプリケーション・コー
ドには影響しません。ただし、ユーザ・モードを利用して制限されたリ
ソースを保護するシステム・コードには、影響を与えることがあります。
Nios II/f コアは、未定義オペコードをもつ命令の実行は扱いません。プ
ロセッサが未定義オペコードをもつ命令ワードを発行した場合、動作は
不定です。
Nios II/s コア
Nios II/s「標準」コアは、コア・サイズが小さくなるように設計されてい
ます。オンチップ・ロジックおよびメモリ・リソースは、実行性能を犠牲
にして節約されています。Nios II/s コアは、Nios II/f コアより約 20% 少な
いロジックを使用しますが、
同時に実行性能も約 40% 低下します。
Nios II/s
コアは、以下のデザイン目標を念頭に置いて設計されています。
■
■
サイズの追求による性能低下を回避。
リソース使用量対性能への影響の比率が最大となるハードウェア機
能を削除。
これらを反映した Nios II/s コアは、コスト重視かつ性能も必要なアプ
リケーションに最適です。例えば、性能が最優先でないオペレーティン
グ・システムを実行するシステムのように、大量のコードやデータを処
理するアプリケーションがあります。
Altera Corporation
2004 年 12 月
17–11
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/s コア
概要
Nios II/s コアの特長は、以下のとおりです。
■
■
■
■
■
■
■
命令キャッシュを搭載するが、データ・キャッシュは搭載していない
最大 2 G バイトの外部アドレス空間にアクセス可能
5 段のパイプラインを採用
スタティック分岐予測の実行
ハードウェア乗算、除算、およびシフト・オプションによる演算性
能の向上
JTAG デバッグ・モードをサポート
ハードウェア・ブレークポイントやリアルタイム・トレースなど、オ
プションの JTAG デバッグ・モジュール拡張機能をサポート
以下のセクションでは、Nios II/s コア実装の注目すべき特長を詳細に説
明します。本書では、Nios II ハードウェア設計者やソフトウェア設計者
にとって重要でない、ロ−レベルのデザイン問題や実装の詳細について
は解説していません。
レジスタ・ファイル
システム生成時に、cpuid コントロール・レジスタ(clt5)には、シ
ステムの各プロセッサで確実に一意になる値が割り当てられます。
論理演算ユニット
Nios II/s コアには、乗算、除算、およびシフト演算の性能を向上させる
ために、いくつかの ALU オプションがあります。
乗算および除算性能
Nios II/s コアには、以下のハードウェア乗算オプションがあります。
■
No hardware multiply −乗算ハードウェアを搭載しません。この場
合、乗算演算はソフトウェアでエミュレートされます。
■ Use embedded multipliers −ターゲット・デバイス上で利用可能な専
用エンベデッド乗算器を搭載します。このオプションは、Stratix II
FPGA の DSP ブロックなど、エンベデッド乗算器を搭載したアルテ
ラ FPGA でのみ利用できます。
■ Use LE-based multipliers −ロジック・エレメント(LE)リソースで
構築されたハードウェア乗算器を搭載します。
また、Nios II/s コアには、LE ベースの除算回路を ALU に搭載するハー
ドウェア除算オプションも用意されています。
17–12
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
ALU オプションを含めると、1 つまたは複数の演算命令の性能が向上し
ます。エンベデッド乗算器の性能は、ターゲット FPGA ファミリによっ
て異なることに注意してください。
表 17–5 に、ハードウェア乗算および除算オプションの詳細を示します。
表 17–5. Nios II/s コアのハードウェア乗算および除算の詳細
ALU オプション
ハードウェアの詳細
1 命令あたりの
サイクル数
サポートされる命令
ハードウェア乗算または
除算なし
乗算および除算命令は例外
を生成
–
なし
LE ベースの乗算器
ALU に 32 x 4 ビット乗算器
を搭載
11
mul、 muli
Stratix および Stratix II
ALU に 32 x 32 ビット乗算器
ファミリのエンベデッド乗算器 を搭載
3
mul、 muli、 mulxss、
mulxsu、mulxuu
Cyclone II ファミリの
エンベデッド乗算器
ALU に 32 x 16 ビット乗算器
を搭載
5
mul、 muli
ハードウェア除算
ALU にマルチサイクル除算
回路を搭載
4 – 66
div、 divu
シフトおよび回転の性能
シフト演算の性能はハードウェア乗算オプションによって異なります。
ハードウェア乗算器が存在する場合、ALU は 3 クロック・サイクルでシ
フトおよび回転演算を完了します。ハードウェア乗算器がない場合、
ALU には 1 サイクルあたり 1 ビットのシフトおよび回転が可能な専用シ
フト回路が搭載されています。
メモリ・アクセス
Nios II/s コアには、命令キャッシュは搭載されていますが、データ・
キャッシュは搭載されていません。命令キャッシュ・サイズは、512 バ
イトから 64 K バイトの間でユーザが定義可能です。Nios II/s コアは、
最大 2 G バイトの外部メモリをアドレス指定できます。Nios II/s コア
は、ビット 31 データ・キャッシュ・バイパスをサポートしていません。
アドレスの最上位ビットは無視されます。
Altera Corporation
2004 年 12 月
17–13
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/s コア
命令キャッシュ
Nios II/s コアの命令キャッシュは、
Nios II/f コアの命令キャッシュとほ
ぼ同じです。命令キャッシュ・メモリの特長は、以下のとおりです。
■
ダイレクト・マップド・キャッシュ方式
クリティカル・ワード・ファースト
■ 32 バイト(8 ワード)/ キャッシュ・ライン
■
命令バイト・アドレスは、以下のフィールドに分割されます。
.
タグ
.
.
ライン
5
4
3
2
1
0
オフセット
0
0
ラインおよびタグ・フィールドのサイズは、キャッシュ・メモリのサイ
ズによって異なりますが、オフセット・フィールドは常に 3 ビット(つ
まり、8 ワード・ライン)です。最大命令バイト・アドレス・サイズは
31 ビットです。
命令キャッシュは永久にイネーブルされ、バイパスできません。
実行パイプライン
このセクションでは、性能重視のアプリケーションに効果的なパイプラ
イン動作の概要を示します。設計者はこの内容を考慮して、プロセッサ
の不必要なストールを最小限にすることができます。ほとんどのアプリ
ケーション・プログラマは個々の命令の性能を解析する必要はなく、以
下の表に関する知識も必要ありません。
Nios II/s コアは 5 段パイプラインを採用しています。表 17–6 にパイプ
ライン・ステージを示します。
表 17–6. Nios II/s コアの実装パイプライン・ステージ
ステージの文字
F
ステージ名
フェッチ(Fetch)
D
デコード(Decode)
E
実行(Execute)
M
メモリ(Memory)
W
ライトバック(Writeback)
17–14
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
1 サイクルあたり最大で 1 つの命令が、ディスパッチまたはリタイア(あ
るいはその両方)されます。命令は順序どおりディスパッチおよびリタ
イアされます。スタティック分岐予測は分岐オフセット方向を使用して
実装されています。つまり、負のオフセットは分岐発生と予測され、正
のオフセットは分岐発生なしと予測されます。パイプラインは以下の状
態でストールします。
■
マルチサイクル命令(ハードウェア乗算を使用しないシフト /回転など)
Avalon 命令マスタ・ポートのリード・アクセス
■ Avalon データ・マスタ・ポートのリード / ライト・アクセス
■ レイテンシの長い命令(ロード、乗算、シフトなど)でのデータ依存
■
パイプラインのストール
パイプラインは、パイプライン・ステージがストールした場合は、新し
い値が当該ステージまたはそれより前のステージに入らないように設定
されています。パイプライン・ステージが空の場合でも、パイプライン・
ステージの「早送り」は許されません。
M ステージのみがストールを発生できます。
以下のいずれかの状態になると、M ステージのストールが発生します。
■
M ステージのロード / ストア命令が、Avalon データ・マスタ転送の完
了を待っている。
■ マルチサイクル・シフト回路の使用時(つまり、ハードウェア乗算器
が利用できないとき)に、M ステージのシフト / 回転命令がまだ演算
を実行中である。
■ ハードウェア乗算器の使用時に、M ステージのシフト / 回転 / 乗算命
令がまだ演算を実行中である(3 サイクルを要する)。
■ M ステージのマルチサイクル・カスタム命令がストール信号をアサー
トしている。この状態はデザインにマルチサイクル・カスタム命令
が含まれている場合にのみ発生します。
命令の性能
すべての命令は、実行に 1 サイクルまたは複数サイクルを要します。命
令によっては、実行に関連してその他のペナルティをもつのものがあり
ます。パイプラインをフラッシュする命令によって、以降の命令が最大
3 つまでキャンセルされます。これにより、3 サイクルのペナルティと 4
サイクルの実行時間が発生します。Avalon 転送を必要とする命令は、転
送が完了するまでストールされます。
Altera Corporation
2004 年 12 月
17–15
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/s コア
すべての命令の実行性能を表 17–7 に示します。
表 17–7. Nios II/s コアの命令実行性能
命令
サイクル数
ペナルティ
通常の ALU 命令(add、 cmplt など)
1
組み合わせカスタム命令
1
マルチサイクル・カスタム命令
1
分岐(正しく予測され、分岐が発生した場合)
2
分岐(正しく予測され、分岐が発生しなかった場合)
1
分岐(予測失敗)
4
パイプラインの
フラッシュ
trap、break、eret、bret、flushp、wrctl、および未実装命令
4
パイプラインの
フラッシュ
jmp、ret、 call、callr
4
パイプラインの
フラッシュ
rdctl
1
>1
load、 store
1
flushi、initi
乗算
(1)
除算
(1)
シフト / 回転(ハードウェア乗算が存在する場合)
シフト / 回転(ハードウェア乗算が存在しない場合)
3
1 ∼ 32
1
その他すべての命令
表 17–7 の注:
(1) ハードウェア乗算または除算オプションによって異なります。詳細については、17–13 ページの表 17–5 を
参照してください。
例外処理
Nios II/s コアは、以下の例外タイプをサポートしています。
■
■
ハードウェア割り込み
ソフトウェア・トラップ
■ 未実装命令
17–16
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
JTAG デバッグ・モジュール
Nios II/s コアは JTAG デバッグ・モジュールをサポートし、ソフトウェ
ア・デバッグ・ツールへの JTAG インタフェースを提供します。Nios II/s
コアは、プロセッサからリアルタイム・トレース・データをルーティン
グして、外部デバッグ・プローブに格納できるオプションの拡張インタ
フェースをサポートしています。
サポートされていない機能
3 章の「プログラミング・モデル」に記載したように、Nios II/s コアは
ユーザ・モードをサポートしていません。これはアプリケーション・コー
ドには影響しません。ただし、ユーザ・モードを利用して制限されたリ
ソースを保護するシステム・コードには、影響を与えることがあります。
Nios II/s コアは、未実装オペコードをもつ命令の実行は扱いません。プ
ロセッサが未定義オペコードをもつ命令ワードを発行した場合、動作は
不定です。
Nios II/e コア
Nios II/e「エコノミー」コアは、コア・サイズが可能な限り小さくなるよ
うに設計されています。Nios II/e コアは、Nios II 命令セット・アーキテク
チャとの互換性を維持しながら可能な限りリソースの利用率を低減する
という、特別なデザイン目標を実現するよう設計されています。ハード
ウェア・リソースは実行性能を犠牲にして節約されます。Nios II/e コアは、
Nios II/s コアの約半分のサイズですが、実行性能は大幅に低下します。
これらを反映した Nios II/e コアは、シンプルな制御ロジックが必要なアプ
リケーションだけでなく、コスト重視のアプリケーションにも最適です。
概要
Nios II/e コアの特長は、以下のとおりです。
■
■
■
■
■
■
最大で 6 クロック・サイクルあたり 1 つの命令を実行
最大 2 G バイトの外部アドレス空間にアクセス可能
JTAG デバッグ・モードをサポート
潜在的な未実装命令に対するハードウェア・サポートは提供しない
命令キャッシュおよびデータ・キャッシュは搭載しない
分岐予測を実行しない
以下のセクションでは、Nios II/e コア実装の注目すべき特長を詳細に説
明します。本書では、Nios II ハードウェア設計者やソフトウェア設計者
にとって重要でない、ローレベルのデザイン問題や実装の詳細について
は解説していません。
Altera Corporation
2004 年 12 月
17–17
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/e コア
レジスタ・ファイル
システム生成時に、cpuid コントロール・レジスタ(clt5)には、シ
ステムの各プロセッサで確実に一意になる値が割り当てられます。
論理演算ユニット
Nios II/e コアは、潜在的などの未実装命令に対してもハードウェア・サ
ポートを提供しません。未実装命令はすべてソフトウェアでエミュレー
トされます。
Nios II/e コアは、シフトおよび回転演算を実行するための専用シフト回
路を採用しています。専用シフト回路は、1 サイクルあたり 1 ビットの
シフトおよび回転演算を実行します。
メモリ・アクセス
Nios II/e コアは命令キャッシュやデータ・キャッシュは提供していませ
ん。すべてのメモリおよびペリフェラル・アクセスで、Avalon 転送が
生成されます。Nios II/e コアは、最大 2 G バイトの外部メモリをアドレ
ス指定できます。このコアはビット 31 データ・キャッシュ・バイパスを
サポートしていません。ただし、ビット 31 キャッシュ・バイパス手法を
サポートする Nios II コア実装との一貫性を維持するために、アドレス
の最上位ビットは無視されます。
命令実行ステージ
このセクションでは、アセンブリ実行時間を概算する手段としてのパイ
プライン動作の概要を示します。ほとんどのアプリケーション・プログ
ラマは個々の命令の性能を解析する必要はなく、以下の表に関する知識
も必要ありません。
命令の性能
Nios II/e コアは一度に 1 つの命令のみディスパッチします。また、プロ
セッサは命令が完了するのを待ってから、次の命令をフェッチおよび
ディスパッチします。各命令は、次の命令がディスパッチされる前に完
了するため、分岐予測は不要です。これによって、プロセッサ・ストー
ルに対する配慮が大幅に簡略化されます。最高性能は、6 クロック・サ
イクルあたり 1 命令です。6 サイクルを達成するには、Avalon 命令マス
タ・ポートは 1 クロック・サイクルで命令をフェッチしなければなりま
せん。Avalon 命令マスタ・ポートでストールが発生すると、命令の実
行時間が直接延長されます。
すべての命令の実行性能を表 17–8 に示します。
17–18
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II コア実装の詳細
表 17–8. Nios II/e コアの命令実行性能
命令
サイクル数
通常の ALU 命令(add、 cmplt など) 6
branch、jmp、 ret、call、 callr
6
trap、break、eret、bret、flushp、 6
wrctl、rdctl、および未実装命令
load word
6 + Avalon リード転送の所要時間
load halfword
9 + Avalon リード転送の所要時間
load byte
10 + Avalon リード転送の所要時間
store
6 + Avalon ライト転送の所要時間
Shift, rotate
7 ∼ 38
その他すべての命令
6
組み合わせカスタム命令
6
マルチサイクル・カスタム命令
≥6
例外処理
Nios II/e コアは、以下の例外タイプをサポートしています。
■
ハードウェア割り込み
ソフトウェア・トラップ
■ 未実装命令
■
JTAG デバッグ・モジュール
Nios II/e コアは JTAG デバッグ・モジュールをサポートしており、ソフ
トウェア・デバッグ・ツールへの JTAG インタフェースを提供します。
Nios II/e コア上の JTAG デバッグ・モジュールは、ハードウェア・ブ
レークポイントやトレースをサポートしていません。
サポートされていない機能
3 章の「プログラミング・モデル」に記載したように、Nios II/e コアは
ユーザ・モードをサポートしていません。これはアプリケーション・コー
ドには影響しません。ただし、ユーザ・モードを利用して制限されたリ
ソースを保護するシステム・コードには影響を与えることがあります。
Nios II/e コアは、未定義オペコードをもつ命令の実行は扱いません。プ
ロセッサが未定義オペコードをもつ命令ワードを発行した場合、動作は
不定です。
Altera Corporation
2004 年 12 月
17–19
Nios II プロセッサ・リファレンス・ハンドブック
Nios II/e コア
17–20
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
18. Nios II プロセッサの
リビジョン履歴
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51018-1.1
はじめに
Nios® II 開発キットはリリースごとに、Nios II プロセッサまたはキット
の開発ツール、あるいはその両方が改良されています。本書では、Nios II
プロセッサのリビジョン履歴を記録し、Nios II IDE などの開発ツールの
リビジョンには触れていません。
Nios II プロセッサの改良により、以下が影響を受けることがあります。
■
Nios IIアーキテクチャの機能 − アーキテクチャ・リビジョンの一例
は、浮動小数点演算をサポートする命令の追加です。
■
特定の Nios II コアの実装 − コア・リビジョンの一例は、
Nios II/f コア
に対するデータ・キャッシュ・メモリの最大許容サイズの増大です。
■
JTAG デバッグ・モジュールの機能 − JTAG デバッグ・モジュール・
リビジョンの一例は、JTAG デバッグ・モジュールへの追加トリガ入
力の追加です。これにより、新しいタイプのトリガ・イベントでプ
ロセッサの実行を停止できます。
アルテラは、既存の Nios II コア用に記述されたコードが同じコアの将
来のリビジョンでも動作するように、Nios II リビジョンを実装します。
Nios II バー
ジョン
Altera Corporation
2004 年 12 月
Nios II プロセッサのバージョン番号は、Nios II 開発キットのバージョ
ンによって決定されます。例えば、Nios II 開発キットのバージョン 1.01
では、Nios II コアのバージョンもすべて 1.01 です。
18–1
アーキテクチャ・リビジョン
表18–1に、Nios II開発キットの全リリースのバージョン番号を示します。
表 18–1. Nios II 開発キット・バージョン履歴
バージョン
リリース日付
1.1
2004 年 12 月
注
●
●
●
1.01
2004 年 9 月
●
●
1.0
アーキテク
チャ・リビ
ジョン
2004 年 5 月
アーキテクチャの小さな機能拡張:
cpuid コントロール・レジスタを追加し、
break 命令を更新。
Nios II/s および Nios II/f コアの論理演算
ユニット(ALU)で、乗算およびシフト・
ハードウェアに対するユーザ制御の強化
小さなバグの修正
ハードウェアでの Stratix® II デバイス・
サポートを確認。
小さなバグの修正
Nios プロセッサの初回リリース
アーキテクチャ・リビジョンによって、Nios II アーキテクチャの基本機
能が強化され、すべての Nios II コアが影響を受けます。アーキテクチャ
の変更に伴い、新たなアーキテクチャの機能強化に対応するために、す
べての Nios II コアに対するリビジョンが必要になります。例えば、ア
ルテラが命令セットに新しい命令を追加した場合は、新しい命令が認識
されるようにすべての Nios II コアを更新しなければなりません。表 18–2
に、Nios II アーキテクチャ・リビジョンを示します。
表 18–2. Nios II アーキテクチャ・リビジョン
バージョン
1.1
コア・リビ
ジョン
注
●
cpuid コントロール・レジスタを追加。
●
デバッグ・ツールで即値引数を使用できるように、break
命令の仕様を更新。
1.01
変更なし。
1.0
Nios プロセッサ・アーキテクチャの初回リリース。
コア・リビジョンによって、既存の Nios II コアに変更が行われます。コ
ア・リビジョンでは通常、確認されたバグの修正やアーキテクチャ・リ
ビジョンのサポートを追加します。Nios II 開発キットのリリースごと
に、すべての Nios II コアにリビジョンが行われるとは限りません。
18–2
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II プロセッサのリビジョン履歴
Nios II/f コア
表 18–3 に、Nios II/f コアのリビジョン内容を示します。
表 18–3. Nios II/f コア・リビジョン
バージョン
1.1
注
●
ユーザ・コンフィギュレーションが可能で、乗算およびシフ
ト操作に影響を与えるオプションを追加。設計者は、以下の
3 つのオプションの 1 つを選択できるようになりました。
従来からのオプション:
(1)ターゲット・デバイス・ファミリで利用可能なエンベ
デッド乗算器リソースを使用。
新規オプション:
(2)ロジック・エレメントを使用して、乗算およびシフト・
ハードウェアを実装。
(3)ハードウェア乗算を省略。シフト操作は 1 ビットのシ
フトに 1 サイクルを要し、乗算演算はソフトウェアでエ
ミュレートされます。
●
cpuid コントロール・レジスタを追加。
●
バグ修正
wrctl ienable によってディセーブルされた割り込みは、
wrctl 命令の後の 1 クロック・サイクル間はイネーブルされ
たままでした。このような wrctl に続く命令が、割り込み
を受けることはなくなりました(SPR 164828)
。
1.01
ハードウェアでの Stratix II デバイス・サポートを確認。
バグ修正
● パイプライン内で、メモリへの格納の直後に同じメモリ位
置からのロードが続き、そのメモリ位置が d キャッシュに
保持されるときは、ロードが不正なデータを返すことがあ
ります。この状況は、最適化をオフ(-o0)にして C コード
をコンパイルすると発生する可能性があります(SPR
158904)
。
● SOPC Builder のトップ・レベルのシステム・モジュールに
は、非常に小さなアドレス空間をもつシステム用に、余分
で不要な出力ポートが含まれていました(SPR 155871)。
1.0
Altera Corporation
2004 年 12 月
Nios II/f コアの初回リリース。
18–3
Nios II プロセッサ・リファレンス・ハンドブック
コア・リビジョン
Nios II/s コア
表 18–4 に、Nios II/s コアのリビジョンを示します。
表 18–4. Nios II/s コア・リビジョン
バージョン
1.1
注
ユーザ・コンフィギュレーションが可能で、乗算およびシフ
ト操作に影響を与えるオプションを追加。設計者は、以下の
3 つのオプションの 1 つを選択できるようになりました。
●
従来からのオプション:
(1)ターゲット・デバイス・ファミリで利用可能なエンベ
デッド乗算器リソースを使用。
新規オプション:
(2)ロジック・エレメントを使用して、乗算およびシフ
ト・ハードウェアを実装。
(3)ハードウェア乗算を省略。シフト操作は 1 ビットのシ
フトに 1 サイクルを要し、乗算演算はソフトウェアでエ
ミュレートされます。
1.01
●
除算ハードウェアを ALU に含めるためのユーザ・コンフィ
ギュレーション可能なオプションを追加。従来、このオプ
ションは Nios II/f コアでしか利用できませんでした。
●
cpuid コントロール・レジスタを追加。
ハードウェアでの Stratix II デバイス・サポートを確認。
バグ修正
SOPC Builder のトップ・レベルのシステム・モジュールには、
非常に小さなアドレス空間をもつシステム用に、余分で不要な
出力ポートが含まれていました(SPR 155871)。
1.0
Nios II/s コアの初回リリース。
18–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
Nios II プロセッサのリビジョン履歴
Nios II/e コア
表 18–5 に、Nios II/e コアに対する・リビジョンを示します。
表 18–5. Nios II/e コア・リビジョン
バージョン
注
1.1
cpuid コントロール・レジスタを追加。
1.01
ハードウェアでの Stratix II デバイス・サポートを確認。
バグ修正
SOPC Builder のトップ・レベルのシステム・モジュールには、
非常に小さなアドレス空間をもつシステム用に、余分で不要な
出力ポートが含まれていました(SPR 155871)。
1.0
JTAG デバッ
グ・モジュール
のリビジョン
Nios II/e コアの初回リリース。
JTAG デバッグ・モジュールのリビジョンでは、Nios II プロセッサのデ
バッグ機能の強化、または JTAG デバッグ・モジュール・ロジック内で
分離されたバグの修正が行われます。表 18–6 に、JTAG デバッグ・モ
ジュールのリビジョンを示します。
表 18–6. JTAG デバッグ・モジュールのリビジョン
バージョン
1.1
(1/2)
注
バグ修正
Nios II/s コアおよび Nios II/f コアを使用するときに、jmp、trap、または分岐命令にシーケン
シャルに続く命令に、ハードウェア・ブレークポイントを置いた場合は、誤ってトリガしてい
た可能性がありました(SPR 158805)
。
Altera Corporation
2004 年 12 月
18–5
Nios II プロセッサ・リファレンス・ハンドブック
JTAG デバッグ・モジュールのリビジョン
表 18–6. JTAG デバッグ・モジュールのリビジョン
バージョン
1.01
(2/2)
注
機能拡張:
●
命令アドレスに基づいてトリガする機能を追加。用途には、トレース・コントロールの
トリガ(トレース・オン / オフ)、シーケンシャル・トリガ(下記参照)、およびトリ
ガ・イン / アウト信号生成が含まれます。
●
トレース・バッファが満杯のときに、Nios II プロセッサを停止することなく収集を停止
できるように、トレース収集を強化。
●
アーム付きトリガ− 2 レベルのトリガ、つまり「アーム付きトリガ」をサポートし、
「Event A then event B(イベント A の次にイベント B)」形式のトリガ定義に対応する
ようにトリガ・ロジックを強化。
バグ修正
●
●
●
1.0
Nios II/s コアでは、割り込み処理中に誤ったアドレスがトレース・データに記録される
ことがありました(SPR 158033)
。
特定の状況で、キャプチャされたトレース・データが望ましいトリガ位置も早くまたは
遅れて開始するように表示されていました(SPR 154467)。
デバッグ中にハードウェア・ブレークポイントと割り込みが同時に発生すると、プロ
セッサがハングアップすることがありました(SPR 154097)
。
JTAG デバッグ・モジュールの初回リリース。
18–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
19. アプリケーション・バイナリ・
インタフェース
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51016-1.0
このセクションでは、Nios® II プロセッサ用のアプリケーション・バイ
ナリ・インタフェース(ABI)について説明します。
ABIは以下を表します。
■
■
■
データ型
メモリ内でのデータ・アライメント方法
スタックの動作と構造
関数呼び出し規則
表 19–1 に、Nios II プロセッサのための C/C++ におけるデータ型のサイ
ズと表現を示します。
表 19–1. データ型の表現
型
メモリ・アラ
イメント
表現
1
2 の補数(ASCII)
unsigned char
1
バイナリ(ASCII)
short, signed short
2
2 の補数
unsigned short
2
バイナリ
int, signed int
4
2 の補数
unsigned int
4
バイナリ
long, signed long
4
2 の補数
unsigned long
4
バイナリ
float
4
IEEE
double
8
IEEE
pointer
4
バイナリ
long long
8
2 の補数
unsigned long long
8
バイナリ
メモリ内容は以下のようにアライメントされます。
■
■
Altera Corporation
2004 年 9 月
サイズ(バイト)
char, signed char
関数は最小の 32 ビット境界にアライメントしなければなりません。
データ・エレメントの最小アライメントは、エレメントの自然サイ
ズです。32 ビットを超えるデータ・エレメントは、32 ビット境界に
のみアライメントする必要があります。
19–1
レジスタの使用法
■
構造体、共用体、および文字列は、最小の 32 ビットにアライメント
しなければなりません。
■ 構造体内部のビット・フィールドは常に 32 ビットでアライメントさ
れます。
レジスタの
使用法
ABI は、3 章の「プログラミング・モデル」で定義される Nios II レジス
タ・ファイルに、使用規則を追加します。ABI は、表 19–2 に示すレジス
タを使用します。
表 19–2. Nios II ABI レジスタの使用法 ( 1 / 2 )
レジスタ
名称
r0
zero
r1
at
コンパイラ 呼び出し先
による使用 での保存 (1)
√
一般的な使用法
0x00000000
アセンブラ用テンポラリ
r2
√
戻り値(最下位 32 ビット)
r3
√
戻り値(最上位 32 ビット)
r4
√
レジスタ引数(最初の 32 ビット)
r5
√
レジスタ引数(2 番目の 32 ビット)
r6
√
レジスタ引数(3 番目の 32 ビット)
r7
√
レジスタ引数(4 番目の 32 ビット)
r8
√
呼び出し元で保存される汎用レジスタ
r9
√
r10
√
r11
√
r12
√
r13
√
r14
√
r15
√
r16
√
√
r17
√
√
r18
√
√
r19
√
√
r20
√
√
r21
√
√
r22
√
√
r23
√
√
19–2
Nios II プロセッサ・リファレンス・ハンドブック
呼び出し先で保存される汎用レジスタ
Altera Corporation
2004 年 9 月
アプリケーション・バイナリ・インタフェース
表 19–2. Nios II ABI レジスタの使用法 ( 2 / 2 )
レジスタ
名称
コンパイラ 呼び出し先
による使用 での保存 (1)
一般的な使用法
r24
et
r25
bt
r26
gp
√
グローバル・ポインタ
r27
sp
√
スタック・ポインタ
r28
fp
√
フレーム・ポインタ (2)
r29
ea
例外戻りアドレス
r30
ba
ブレーク戻りアドレス
r31
ra
例外用テンポラリ
ブレーク用テンポラリ
√
戻りアドレス
表 19–2 の注:
(1) 関数は最初に保存する場合に、これらのレジスタのうち 1 つを使用できます。関数は終了前にレジスタの
元の値を復元する必要があります。
(2) フレーム・ポインタを使用しない場合、レジスタをテンポラリ・レジスタとして使用できます。
19–4 ページの「フレーム・ポインタの削除」を参照してください。
データのエン
ディアン
9 ビット以上の値のエンディアンは、リトル・エンディアンです。値の
上位 8 ビットは、高位バイト・アドレスに格納されます。
スタック
スタックは下方(つまり、低位アドレス方向に)に成長します。スタッ
ク・ポインタは最後に使用されたスロットを指します。フレームは上方
に成長しますが、これはフレーム・ポインタがフレームのボトムを指す
ことを意味します。
図 19-1 に、カレント・フレームの構造例を示します。この場合、関数
a() は関数 b() を呼び出し、スタックは呼び出された関数のプロログが
完了した後の呼び出し前に表示されます。
Altera Corporation
2004 年 9 月
19–3
Nios II プロセッサ・リファレンス・ハンドブック
データのエンディアン
図 19-1. スタック・ポインタ、フレーム・ポインタ、およびカレント・フレーム
関数b()を呼び出す
直前の関数a()の内部
プロログ実行直後の
関数b()の内部
出力
スタック
引数
入力
スタック
引数
高位アドレス
fpおよびsp
a()(つまり、呼び出し側関数)
によって割り当ておよび解放
保存された
レジスタ
一時スタック
用の空間
b()(つまり、現在の関数)
によって割り当ておよび解放
出力スタック
引数用の空間
fpおよびsp
低位アドレス
カレント・フレームの各セクションは、32 ビット境界にアライメントさ
れます。ABI では、スタック・ポインタは常に 32 ビットでアライメント
する必要があります。
フレーム・ポインタの削除
通常のケースでは、フレーム・ポインタはスタック・ポインタと同じな
ので、フレーム・ポインタ内の情報が冗長となります。したがって、最
適なコードを得るには、フレーム・ポインタを削除することが望ましい
といえます。ただし、GDB にはスタックを正しく配置する上で問題があ
るため、フレーム・ポインタを削除した場合はフレーム・ポインタなし
のデバッギングが困難になります。フレーム・ポインタを削除すると、
レジスタ fp はテンポラリ・レジスタとして利用できるようになります。
保存されたレジスタの呼び出し
実装に関する注:関数で保存する必要があるレジスタは、コンパイラが
保存しなければなりません。そのようなレジスタが存在する場合、上位
アドレスから、ra、fp、r2、r3、r4、r5、r6、r7、r8、r9、r10、r11、
r12、r13、r14、r15、r16、r17、r18、r19、r20、r21、r22、r23、
r24、r25、gp、および sp の順にスタックに保存されます。保存されな
いレジスタにはスタック空間は割り当てられません。
19–4
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
アプリケーション・バイナリ・インタフェース
その他のスタックの例
スタック・レイアウトには特殊なケースが多数あり、ここでそのいくつ
かを説明します。
alloca() を使用する関数用スタック・フレーム
図19-2は、
alloca()を呼び出した後のフレームの状態を示します。
alloca()
で割り当てられた空間は出力引数と置き換わり、出力引数はフレームのボ
トムに割り当てられた新しい空間を取得します。
実装に関する注:Nios II C/C++ コンパイラは、媒介フレーム・ポイン
タが指定された場合でも、alloca() を呼び出す関数に対するフレーム・
ポインタを維持します。
図 19-2. alloca() 呼び出し後のスタック・フレーム
呼び出し前
alloca()の呼び出し後
高位アドレス
出力スタック
引数用の空間
sp
alloca()
によって
割り当てられた
メモリ
出力スタック
引数用の空間
sp
低位アドレス
可変引数をもつ関数用スタック・フレーム
可変引数を受け取る関数も他の関数と同様に、レジスタ r4 ∼ r7 に到着
する引数の最初の 16 バイトを維持します。
実装に関する注:可変引数を受け取る関数は、可変引数で使用するため
にスタック上に 16 バイト余分にストレージを割り当てます。これらの関
数は、図 19-3 に示すように、レジスタ r4 ∼ r7 から引数の最初の 16 バ
イトをスタックにコピーします。
Altera Corporation
2004 年 9 月
19–5
Nios II プロセッサ・リファレンス・ハンドブック
データのエンディアン
図 19-3. 可変引数を使用するスタック・フレーム
関数b()を呼び出す
直前の関数a()の内部
プロログ実行直後の
関数b()
出力
スタック
引数
入力
スタック
引数
高位アドレス
a()(つまり、呼び出し側関数)
によって割り当ておよび解放
fpおよびsp
r7のコピー
r6のコピー
r5のコピー
r4のコピー
保存された
レジスタ
b()(つまり、現在の関数)
によって割り当ておよび解放
一時
スタック用の
空間
出力スタック
引数用の空間
低位アドレス
fpおよびsp
値渡し構造体をもつ関数用スタック・フレーム
struct 型の値引数を受け取る関数も他の関数と同様に、レジスタ r4 ∼ r7
に到着する引数の最初の 16 バイトを維持します。
実装に関する注:構造体の一部がレジスタを介して渡される場合、関数
はレジスタの内容を再びスタックにコピーしなければならないことがあ
ります。これは、図 19-3 に示す可変引数の場合と類似しています。
関数のプロログ
Nios II C/C++ コンパイラは、スタック・テンポラリと出力引数を格納
するために、関数のスタック・フレームを割り当てる関数プロログを生
成します。さらに、各プロログは ABI が呼び出し先保存とマークした変
数について、呼び出し関数のすべての状態を保存しなければなりません。
19–2 ページの表 19–2 に呼び出し先保存レジスタを示します。関数プロ
ログは、関数がレジスタを使用する場合に限り、呼び出し先保存レジス
タを保存する必要があります。
19–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
アプリケーション・バイナリ・インタフェース
デバッガは、関数プロログによる命令分解方法に関する情報を使用して、
バック・トレース実行時に状態を再構築することができます。デバッガ
は DWARF2 デバッグ情報に格納された情報を使用して、プロログが実
行した内容を検出できるのが理想的です。
Nios II関数プロログ内で検出された命令は、以下のタスクを実行します。
■
SP の調節(フレームを割り当てるため)
フレームへのレジスタの格納
■ FP への SP の割り当て
■
図 19-4 は、関数プロログの一例を示します。
図 19-4. 関数プロログ
/* スタック・ポインタの調整 */
addisp, sp, -120/* 120 バイト・フレームを作成 */
/* フレームにレジスタを格納 */
stw ra, 116(sp)/* 戻りアドレスを格納 */
stw fp, 112(sp)/* フレーム・ポインタを格納 */
stw r16, 108(sp)/* 呼び出し先保存レジスタを格納 */
stw r17, 104(sp)/* 呼び出し先保存レジスタを格納 */
/* 新しいフレーム・ポインタを設定 */
mov fp, sp
プロログの変化
プロログで以下の変化が発生することがあります。
■
■
■
■
■
Altera Corporation
2004 年 9 月
関数のフレーム・サイズが 32,767 バイトより大きい場合、新しい SP お
よび呼び出し先保存レジスタの格納場所のオフセットを計算するに
は、他のテンポラリ・レジスタが使用されます。これは Nios II プロ
セッサで許される即値の最大サイズのためです。
フレーム・ポインタが使用されていない場合、SP を FP に移動するこ
とはありません。
可変引数が使用されている場合、引数レジスタをスタックに格納す
るための追加命令が存在します。
関数がリーフ関数の場合、戻りアドレスは保存されません。
特に命令のスケジューリングなど、最適化が指定されている場合、命
令の順序が変わり、プロログの後に配置されている命令と混在する
可能性があります。
19–7
Nios II プロセッサ・リファレンス・ハンドブック
引数と戻り値
引数と戻り値
ここでは、関数に引数を渡す方法、および関数から値を返す方法を詳細
に説明します。
引数
最初の 16 バイト・データはレジスタ r4 ∼ r7 で関数に渡されます。引
数は、引数の型を含む構造体が構築されたのと同様に渡され、構造体の
最初の 16 バイトは、r4 ∼ r7 に置かれます。
簡単な例
int function (int a, int b);
引数を表す同等な構造体は、以下のとおりです。
struct { int a; int b; };
構造体の最初の 16 バイトは、r4 ∼ r7 に割り当てられます。したがっ
て、r4 には a の値、r5 には b の値が割り当てられます。
可変引数
可変引数を受け取る関数の最初の 16 バイトは、可変引数を受け取らない
関数の場合と同様に渡されます。可変引数をサポートするために、必要
に応じてスタックをクリーンアップするのは呼び出された関数の役割で
す。19–5 ページの「可変引数をもつ関数用スタック・フレーム」を参照
してください。
戻り値
8 バイトまでの型の戻り値は、r2 と r3 に返されます。戻り値が 8 バイ
トを超える場合、呼び出し側は結果にメモリを割り当て、さらに結果メ
モリのアドレスを隠れゼロ引数として渡す必要があります。
隠れゼロ引数は、例を使えばわかりやすく説明できます。
例 : 関数 a() は、構造体を返す関数 b() を呼び出します。
/* b() は構造体型の result を計算して、それを返します。*/
STRUCT b(int i, int j)
{
...
return result;
}
void a(...)
{
19–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
アプリケーション・バイナリ・インタフェース
...
value = b(i, j);
}
この例では、result 型が 8 バイト以下である限り、b() は r2 と r3 に
result を返します。
return 型が 8 バイトよりも大きい場合、Nios II C/C++ コンパイラは、
a() がポインタを b() に渡したのと同様に、このプログラムを処理しま
す。以下の例は、Nios II C/C++ コンパイラが上記のコードをどのよう
に処理するかを示します。
void b(STRUCT *p_result, int i, int j)
{
...
*p_result = result;
}
void a(...)
{
STRUCT value;
...
b(*value, i, j);
}
Altera Corporation
2004 年 9 月
19–9
Nios II プロセッサ・リファレンス・ハンドブック
引数と戻り値
19–10
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 9 月
20. 命令セット・リファレンス
この資料は更新された最新の英語版が存在します。こちらの日本語版は参考用としてご利用ください。
設計の際には、最新の英語版で内容をご確認ください。
NII51017-1.2
はじめに
このセクションでは、Nios® II 命令ワードの形式について説明し、
Nios II 命令セットの詳細なリファレンスを記載します。
ワード形式
Nios II 命令ワードの形式は、I タイプ、R タイプ、J タイプの 3 つのカテ
ゴリに分類されます。
I タイプ
I タイプ命令ワード形式の大きな特徴は、命令ワード内に即値が埋め込
まれていることです。I タイプ命令ワードには、以下が含まれています。
■
6 ビット・オペコード・フィールド "OP"
2 つの 5 ビット・レジスタ・フィールド "A" および "B"
■ 16 ビット即値データ・フィールド "IMM16"
■
ほとんどの場合、フィールド A および IMM16 はソース・オペランドを
指定し、フィールド B はディスティネーション・レジスタを指定します。
IMM16 は、論理演算と符号なし比較を除いては符号付きとみなされま
す。
I タイプ命令には、addi や andi などの算術および論理演算、分岐操作、
ロードおよびストア操作、キャッシュ管理操作があります。
I タイプ命令形式は以下のとおりです。
31
30
29
28
27
A
Altera Corporation
2004 年 12 月
26
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5 4 3 2 1 0
OP
20–1
ワード形式
R タイプ
R タイプ命令ワード形式の明確な特徴は、すべての引数と結果がレジス
タとして指定されることです。R タイプ命令には、以下が含まれます。
■
6 ビット・オペコード・フィールド "OP"
3 つの 5 ビット・レジスタ・フィールド "A"、"B"、および "C"
■ 11 ビット・オペコード拡張フィールド "OPX"
■
ほとんどの場合、フィールド A および B はソース・オペランドを指定
し、フィールド C はデスティネーション・レジスタを指定します。R タ
イプ命令には、OPX の下位ビットに小さな即値を埋め込むものもありま
す。
R タイプ命令には、add や nor などの算術および論理演算、cmpeq や
cmplt などの比較演算、custom 命令、レジスタ・オペランドのみを必
要とするその他の演算があります。
R タイプ命令形式は、以下のとおりです。
31
30
29
A
28
27
26
25
24
B
23
22
21
20
19
18
C
20–2
Nios II プロセッサ・リファレンス・ハンドブック
17
16
15
14
13
12
11
OPX
10
9
8
7
6
5
4
3
2
1
0
OP
Altera Corporation
2004 年 12 月
命令セット・リファレンス
J タイプ
J タイプ命令には、以下が含まれます。
■
■
6 ビット・オペコード・フィールド
26 ビット即値データ・フィールド
J タイプ命令は call のみです。
J タイプ命令形式は、以下のとおりです。
31
30
29
28
27
26
25
24
23
22
21
20
19
18
IMMED26
Altera Corporation
2004 年 12 月
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OP
20–3
Nios II プロセッサ・リファレンス・ハンドブック
命令オペコード
命令オペコー
ド
Nios II 命令ワードの OP フィールドは、表 20–1 および表 20–2 に示すオ
ペコードの主要クラスを指定します。OP のほとんどの値は、I タイプ命
令に対するエンコーディングです。エンコーディング OP = 0x00 のみが、
J タイプ命令 call です。もう 1 つのエンコーディング OP = 0x3a は、す
べての R タイプ命令に対して使用され、OPX フィールドで命令が区別さ
れます。OP および OPX の未使用エンコーディングはすべて予約済みで
す。
表 20–1. OP エンコーディング
OP
0x00
命令
call
OP
命令
OP
命令
0x10
cmplti
0x20
cmpeqi
OP
0x30
命令
cmpltui
0x01
0x11
0x21
0x31
0x02
0x12
0x22
0x32
custom
0x03
ldbu
0x13
0x23
ldbuio
0x33
initd
0x04
addi
0x14
ori
0x24
muli
0x34
orhi
0x05
stb
0x15
stw
0x25
stbio
0x35
stwio
0x06
br
0x16
blt
0x26
beq
0x36
bltu
0x07
ldb
0x17
ldw
0x27
ldbio
0x37
ldwio
0x08
cmpgei
0x18
cmpnei
0x28
cmpgeui
0x38
0x09
0x19
0x29
0x39
0x0A
0x1A
0x2A
0x3A
R タイプ
0x0B
ldhu
0x1B
0x0C
andi
0x1C
0x0D
sth
0x1D
0x0E
bge
0x1E
0x0F
ldh
0x1F
xori
bne
20–4
Nios II プロセッサ・リファレンス・ハンドブック
0x2B
ldhuio
0x3B
flushd
0x2C
andhi
0x3C
xorhi
0x2D
sthio
0x3D
0x2E
bgeu
0x3E
0x2F
ldhio
0x3F
Altera Corporation
2004 年 12 月
命令セット・リファレンス
表 20–2. R タイプ命令の OPX エンコーディング
OPX
命令
0x00
OPX
0x10
命令
OPX
cmplt
0x20
命令
cmpeq
OPX
命令
0x30
cmpltu
add
0x01
eret
0x11
0x21
0x31
0x02
roli
0x12
slli
0x22
0x32
0x03
rol
0x13
sll
0x23
0x04
flushp
0x14
0x24
divu
0x34
0x05
ret
0x15
0x25
div
0x35
0x06
nor
0x16
or
0x26
rdctl
0x36
0x07
mulxuu
0x17
mulxsu
0x27
mul
0x37
0x08
cmpge
0x18
cmpne
0x28
cmpgeu
0x38
0x09
bret
0x19
0x29
initi
0x39
sub
0x3A
srai
sra
0x0A
0x1A
srli
0x33
0x2A
0x0B
ror
0x1B
srl
0x2B
0x3B
0x0C
flushi
0x1C
nextpc
0x2C
0x3C
0x0D
jmp
0x1D
callr
0x2D
trap
0x3D
0x0E
and
0x1E
xor
0x2E
wrctl
0x3E
0x1F
mulxss
0x2F
0x0F
Altera Corporation
2004 年 12 月
break
sync
0x3F
20–5
Nios II プロセッサ・リファレンス・ハンドブック
アセンブラ擬似命令
アセンブラ
擬似命令
表 20–3 に、Nios II アセンブリ言語で利用可能な擬似命令を示します。
擬似命令は、通常のアセンブリ命令と同様に、アセンブリ・ソース・コー
ドで使用します。各擬似命令は、等価な命令を使用してマシン・レベル
で実装されます。movia 擬似命令は唯一の例外で、2 つの命令で実装さ
れます。ほとんどの擬似命令は、マシン・コードのディスアセンブリ表
示には現れません。
表 20–3. アセンブラ擬似命令
擬似命令
等価な命令
bgt rA, rB, label
blt rB, rA, label
bgtu rA, rB, label
bltu rB, rA, label
ble rA, rB, label
bge rB, rA, label
bleu rA, rB, label
bgeu rB, rA, label
cmpgt rC, rA, rB
cmplt rC, rB, rA
cmpgti rB, rA, IMMED
cmpgei rB, rA, (IMMED+1)
cmpgtu rC, rA, rB
cmpltu rC, rB, rA
cmpgtui rB, rA, IMMED
cmpgeui rB, rA, (IMMED+1)
cmple rC, rA, rB
cmpge rC, rB, rA
cmplei rB, rA, IMMED
cmplti rB, rA, (IMMED+1)
cmpleu rC, rA, rB
cmpgeu rC, rB, rA
cmpleui rB, rA, IMMED
cmpltui rB, rA, (IMMED+1)
mov rC, rA
add rC, rA, r0
movhi rB, IMMED
orhi rB, r0, IMMED
movi rB, IMMED
addi, rB, r0, IMMED
movia rB, label
orhi rB, r0, %hiadj(label)
addi, rB, r0, %lo(label)
movui rB, IMMED
ori rB, r0, IMMED
nop
add r0, r0, r0
subi, rB, rA, IMMED
addi rB, rA, IMMED
20–6
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
命令セット・リファレンス
アセンブラ・
マクロ
Nios II アセンブラには、ラベルおよび 32 ビット即値からハーフワード
を抽出するマクロが用意されています。表 20–4 に、利用可能なマクロを
示します。これらのマクロは、使用する場所に応じて、16 ビット符号付
き値または 16 ビット符号なし値を返します。16 ビット符号付き即値を
必要とする命令で使用した場合、これらのマクロは、-32768 ∼ 32767 の
範囲の値を返します。16 ビット符号なし即値を必要とする命令で使用し
た場合、これらのマクロは 0 ∼ 65535 の範囲の値を返します。
表 20–4. アセンブラ・マクロ
マクロ
説明
操作
%lo(immed32)
immed32 のビット [15..0] を抽出します。
immed32 & 0xffff
%hi(immed32)
immed32 のビット [31..16] を抽出します。
(immed32 >> 16) & 0xffff
%hiadj(immed32) ビット [31..16] を抽出し、immed32 のビット 15 (immed32 >> 16) + 0xffff +
を追加します。
((immed32 >> 15) & 0x1)
%gprel(immed32) immed32 のアドレスをグローバル・ポインタ (1) immed32-_gp
からのオフセットに置き換えます。
表 20–4 の注:
(1) グローバル・ポインタの詳細については、第 19 章「アプリケーション・バイナリ・インタフェース」を
参照してください。
Altera Corporation
2004 年 12 月
20–7
Nios II プロセッサ・リファレンス・ハンドブック
命令セット・リファレンス
命令セット・
リファレンス
以下のページに、すべての Nios II 命令のニーモニックをアルファベッ
ト順に示します。表 20–5 に、命令の操作を記述するのに使用される表記
規則を示します。
表 20–5. 表記規則
表記
意味
X← Y
X は Y を使用して記述されます。
PC ← X
プログラム・カウンタ(PC)は、アドレス X を使用して記述
され、X にある命令が次に実行される命令になります。
PC
対象となるアセンブリ命令のアドレス。
rA, rB, rC
32 ビット汎用レジスタの 1 つ。
IMMn
命令ワードに埋め込まれた n ビットの即値。
IMMED
即値。
Xn
X の n 番目のビット。ここで n = 0 は LSB です。
Xn..m
X の n から m までの連続ビット。
0xNNMM
16 進法。
X:Y
ビット単位の連結。例えば、(0x12 : 0x34) = 0x1234。
σ(X)
フル・レジスタ・サイズの符号付き整数に符合拡張された後
の X の値。
X >> n
n ビット位置に右シフトされた後の値 X。
X << n
n ビット位置に左シフトされた後の値 X。
X&Y
ビット単位の論理積。
X|Y
ビット単位の論理和。
X^Y
ビット単位の論理 XOR。
~X
ビット単位の論理 NOT(1 の補数)
。
Mem8[X]
バイト・アドレス X のデータ・メモリに配置されたバイト。
Mem16[X]
バイト・アドレス X のデータ・メモリに配置されたハーフワー
ド。
Mem32[X]
バイト・アドレス X のデータ・メモリに配置されたワード。
label
アセンブリ・ファイルで指定されるアドレス・ラベル。
(signed) rX
符号付き数として扱われる rX の値。
(unsigned) rX
符号なし数として扱われる rX の値。
20–8
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
add
add
操作
rC ← rA + rB
アセンブラ構文
add rC, rA, rB
例
add r6, r7, r8
説明
rA と rB の合計を計算します。結果を rc に格納します。符号付きおよび符号なし加
算のどちらにも使用されます。
使用法
キャリー検出(符号なしオペランド)
add 演算に続いて、符号なし合計が符号なしオペランドの 1 つより小さいかどうか
をチェックして、MSB のキャリー・アウトを検出することができます。キャリー・
ビットをレジスタに書き込むか、またはキャリー状態に基づいて条件分岐を実行で
きます。両方のケースを以下に示します。
add rC, rA, rB ; 元の add 演算
cmpltu rD, rC, rA ; rD はキャリー・ビット付きで書き込む
add rC, rA, rB ; 元の add 演算
bltu rC, rA, label ; キャリーが発生した場合は分岐
オーバフロー検出(符号付きオペランド)
オーバフローは、2 つの正の値を加算した合計が負のとき、または 2 つの負の値を
加算した結果が正のときに検出されます。オーバフロー条件は、以下に示すとおり
条件分岐を制御できます。
add rC, rA, rB ; 元の add 演算
xor rD, rC, rA ; 合計と rA の符号を比較
xor rE, rC, rB ; 合計と rB の符号を比較
and rD, rD, rE ; 比較結果を結合
blt rD, r0,label ; オーバフローが発生した場合は分岐
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x31
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–9
Nios II プロセッサ・リファレンス・ハンドブック
addi
addi
即値の加算
操作
rB ← rA + σ (IMM16)
アセンブラ構文
addi rB, rA, IMM16
例
addi r6, r7, -100
説明
16 ビット即値を符号拡張し、rA の値に加算します。合計を rB に格納します。
使用法
キャリー検出(符号なしオペランド)
addi 演算に続いて、符号なし合計が符号なしオペランドの 1 つより小さいかどう
かをチェックして、MSB のキャリー・アウトを検出することができます。キャリー・
ビットをレジスタに書き込むか、またはキャリー状態に基づいて条件分岐を実行で
きます。両方のケースを以下に示します。
addi rB, rA, IMM16 ; 元の add 演算
cmpltu rD, rB, rA ; rD はキャリー・ビット付きで書き込む
addi rB, rA, IMM16 ; 元の add 演算
bltu rB, rA, label ; キャリーが発生した場合は分岐
オーバフロー検出(符号付きオペランド)
オーバフローは、2 つの正の値を加算した合計が負である場合、または 2 つの負の
値を加算した結果が正である場合に検出されます。オーバフロー条件は、以下に示
すとおり条件分岐を制御できます。
addi rB, rA, IMM16 ; 元の add 演算
xor rC, rB, rA ; 合計と rA の符号を比較
xorhi rD, rB, IMM16 ; 合計と IMM16 の符号を比較
and rC, rC, rD ; 比較結果を結合
blt rC, r0,label ; オーバフローが発生した場合は分岐
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–10
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x04
Altera Corporation
2004 年 12 月
and
and
ビット単位の論理積
操作
rC ← rA & rB
アセンブラ構文
and rC, rA, rB
例
and r6, r7, r8
説明
rA と rB のビット単位の論理積を計算し、その結果を rC に格納します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x0e
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–11
Nios II プロセッサ・リファレンス・ハンドブック
andhi
andhi
上位ハーフワードへの即値のビット単位の論理積
操作
rB ← rA & (IMM16 : 0x0000)
アセンブラ構文
andhi rB, rA, IMM16
例
andhi r6, r7, 100
説明
rA と (IMM16 : 0x0000) のビット単位の論理積を計算し、その結果を rB に格納します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号なし即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–12
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x2c
Altera Corporation
2004 年 12 月
andi
andi
即値のビット単位の論理積
操作
rB ← rA & (0x0000 : IMM16)
アセンブラ構文
andi rB, rA, IMM16
例
andi r6, r7, 100
説明
rA と (0x0000 : IMM16) のビット単位の論理積を計算し、
その結果を rB に格納します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号なし即値
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x0c
20–13
Nios II プロセッサ・リファレンス・ハンドブック
beq
beq
等号が成立した場合の分岐
操作
if (rA == rB)
then PC ← PC + 4 + σ (IMM16)
else PC ← PC + 4
アセンブラ構文
beq rA, rB, label
例
beq r6, r7, label
説明
rA == rB が成立した場合、beq はプログラムの制御をラベル位置の命令に移します。
命令エンコーディングにおいて、IMM16 で与えられるオフセットは、beq の直後に
続く命令に相対的な符号付きバイト数として扱われます。命令アドレスはワード単
位でアライメントする必要があるため、IMM16 の最下位 2 ビットは常にゼロです。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–14
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x26
Altera Corporation
2004 年 12 月
bge
bge
符号付き大なりイコールが成立した場合の分岐
操作
if ((signed) rA >= (signed) rB)
then PC ← PC + 4 + σ (IMM16)
else PC ← PC + 4
アセンブラ構文
bge rA, rB, label
例
bge r6, r7, top_of_loop
説明
(signed) rA >= (signed) rB が成立した場合、bge はプログラムの制御をラベル位置の
命令に移します。命令エンコーディングにおいて、IMM16 で与えられるオフセット
は、 bge の直後に続く命令に相対的な符号付きバイト数として扱われます。命令ア
ドレスはワード単位でアライメントする必要があるため、IMM16 の最下位 2 ビット
は常にゼロです。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x0e
20–15
Nios II プロセッサ・リファレンス・ハンドブック
bgeu
bgeu
符号なし大なりイコールが成立した場合の分岐
操作
if ((unsigned) rA >= (unsigned) rB)
then PC ← PC + 4 + σ (IMM16)
else PC ← PC + 4
アセンブラ構文
bgeu rA, rB, label
例
bgeu r6, r7, top_of_loop
説明
(unsigned) rA >= (unsigned) rB が成立した場合、bgeu はプログラムの制御をラベル
位置の命令に移します。命令エンコーディングにおいて、IMM16 で与えられるオフ
セットは、 bgeu の直後に続く命令に相対的な符号付きバイト数として扱われます。
命令アドレスはワード単位でアライメントする必要があるため、IMM16 の最下位 2
ビットは常にゼロです。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–16
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x2e
Altera Corporation
2004 年 12 月
bgt
bgt
符号付き大なりが成立した場合の分岐
操作
if ((signed) rA > (signed) rB)
then PC ← label
else PC ← PC + 4
アセンブラ構文
bgt rA, rB, label
例
bgt r6, r7, top_of_loop
説明
(signed) rA > (signed) rB が成立した場合、bgt はプログラムの制御をラベル位置の
命令に移します。
擬似命令
bgt は、レジスタ・オペランドを入れ替えて blt 命令で実装されます。
Altera Corporation
2004 年 12 月
20–17
Nios II プロセッサ・リファレンス・ハンドブック
bgtu
bgtu
符号なし大なりが成立した場合の分岐
操作
if ((unsigned) rA > (unsigned) rB)
then PC ← label
else PC ← PC + 4
アセンブラ構文
bgtu rA, rB, label
例
bgtu r6, r7, top_of_loop
説明
(unsigned) rA > (unsigned) rB が成立した場合、 bgtu はプログラムの制御をラベル
位置の命令に移します。
擬似命令
bgtu は、レジスタ・オペランドを入れ替えて bltu 命令で実装されます。
20–18
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
ble
ble
符号付き小なりイコールが成立した場合の分岐
操作
if ((signed) rA <= (signed) rB)
then PC ← label
else PC ← PC + 4
アセンブラ構文
ble rA, rB, label
例
ble r6, r7, top_of_loop
説明
(signed) rA <= (signed) rB が成立した場合、ble はプログラムの制御をラベル位置の
命令に移します。
擬似命令
ble は、レジスタ・オペランドを入れ替えて bge 命令で実装されます。
Altera Corporation
2004 年 12 月
20–19
Nios II プロセッサ・リファレンス・ハンドブック
bleu
bleu
符号なし小なりイコールが成立した場合の分岐
操作
if ((unsigned) rA <= (unsigned) rB)
then PC ← label
else PC ← PC + 4
アセンブラ構文
bleu rA, rB, label
例
bleu r6, r7, top_of_loop
説明
(unsigned) rA <= (unsigned) rB が成立した場合、bleu はプログラム・カウンタをラ
ベル位置の命令に転送します。
擬似命令
bleu は、レジスタ・オペランドを入れ替えて bgeu 命令で実装されます。
20–20
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
blt
blt
符号付き小なりが成立した場合の分岐
操作
if ((signed) rA < (signed) rB)
then PC ← PC + 4 + σ (IMM16)
else PC ← PC + 4
アセンブラ構文
blt rA, rB, label
例
blt r6, r7, top_of_loop
説明
(signed) rA < (signed) rB が成立した場合、blt はプログラムの制御をラベル位置の
命令に移します。命令エンコーディングにおいて、IMM16 で与えられるオフセット
は、 blt の直後に続く命令に相対的な符号付きバイト数として扱われます。命令ア
ドレスはワード単位でアライメントする必要があるため、IMM16 の最下位 2 ビット
は常にゼロです。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x16
20–21
Nios II プロセッサ・リファレンス・ハンドブック
bltu
bltu
符号なし小なりが成立した場合の分岐
操作
if ((unsigned) rA < (unsigned) rB)
then PC ← PC + 4 + σ (IMM16)
else PC ← PC + 4
アセンブラ構文
bltu rA, rB, label
例
bltu r6, r7, top_of_loop
説明
(unsigned) rA < (unsigned) rB が成立した場合、 bltu はプログラムの制御をラベル
位置の命令に移します。命令エンコーディングにおいて、IMM16 で与えられるオフ
セットは、 bltu の直後に続く命令に相対的な符号付きバイト数として扱われます。
命令アドレスはワード単位でアライメントする必要があるため、IMM16 の最下位 2
ビットは常にゼロです。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
MM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–22
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x36
Altera Corporation
2004 年 12 月
bne
bne
等号が成立しなかった場合の分岐
操作
if (rA != rB)
then PC ← PC + 4 + σ (IMM16)
else PC ← PC + 4
アセンブラ構文
bne rA, rB, label
例
bne r6, r7, top_of_loop
説明
rA != rB が成立した場合、 bne はプログラムの制御をラベル位置の命令に移します。
命令エンコーディングにおいて、IMM16 で与えられるオフセットは、 bne の直後に
続く命令に相対的な符号付きバイト数として扱われます。命令アドレスはワード単
位でアライメントする必要があるため、IMM16 の最下位 2 ビットは常にゼロです。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x1e
20–23
Nios II プロセッサ・リファレンス・ハンドブック
br
br
無条件分岐
操作
PC ← PC + 4 + σ (IMM16)
アセンブラ構文
br label
例
br top_of_loop
説明
プログラムの制御をラベル位置の命令に移します。命令エンコーディングにおいて、
IMM16 によって与えられたオフセットは、br の直後に続く命令に関連したバイトの
符号付きの値として扱われます。命令アドレスはワード単位でアライメントする必要
があるため、IMM16 の最下位 2 ビットは常にゼロです。
命令タイプ
I
命令フィールド
IMM16 = 16 ビット符号付き即値
31
30
29
0
28
27
26
25
24
23
22
21
20
19
18
17
0
20–24
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x06
Altera Corporation
2004 年 12 月
break
break
デバッグ用ブレークポイント
bstatus ← status
操作
PIE ← 0
ba ← PC + 4
PC ← ブレーク・ハンドラ・アドレス
アセンブラ構文
break
break imm5
例
break
説明
プログラムの実行をブレークし、デバッガのブレーク処理ルーチンに制御を移しま
す。次の命令のアドレスをレジスタ ba に保存し、 status レジスタの内容を
bstatus に保存します。割り込みをディセーブルし、実行をブレーク・ハンドラに
移します。
5 ビット即値フィールド imm5 は、プロセッサでは無視されますが、デバッガで使
用することができます。
引数のない break は、 break 0 と同じです。
break は、デバッガによって排他的に使用されます。ユーザ・プログラム、オペレー
ティング・システム、または例外ハンドラに、 break を設定するのはデバッガのみ
使用法
です。ブレーク・ハンドラのアドレスは、システム生成時に指定されます。
一部のデバッガは、ソース・コード内の命令で break および break 0 をサポート
しています。これらのデバッガは、break 命令を通常のブレークポイントとして扱
います。
命令タイプ
R
命令フィールド
IMM5 = ブレークポイントのタイプ
31
30
29
28
27
26
0
Altera Corporation
2004 年 12 月
25
24
0
23
22
21
20
19
0x1e
18
17
16
15
14
13
0x34
12
11
10
9
8
7
IMM5
6
5
4
3
2
1
0
0x3a
20–25
Nios II プロセッサ・リファレンス・ハンドブック
bret
bret
ブレークポイントの復帰
操作
status ← bstatus
PC ← ba
アセンブラ構文
bret
例
bret
説明
bstatus の値を status レジスタにコピーし、次に ba のアドレスに実行を移しま
す。ユーザ・モードでは、この命令はアクセス違反例外を生成します。
使用法
bret は、デバッガによって排他的に使用される命令であり、ユーザ・プログラム、
オペレーティング・システム、例外ハンドラに含めてはなりません。
命令タイプ
R
命令フィールド
なし
31
30
29
0x1e
28
27
26
25
24
0
23
22
21
20
19
18
17
0
20–26
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x09
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
call
call
サブルーチンの呼び出し
ra ← PC + 4
操作
PC ← (PC31..28 : IMM26 × 4)
アセンブラ構文
call label
例
call write_char
説明
次の命令のアドレスをレジスタ ra に保存し、アドレス(PC31..28 : IMM26 × 4)の命
令に実行を移します。
使用法
call は、PC31..28 で決定される 256 MB の範囲内の任意の位置に実行を移すことが
できます。リンカはアドレスがこの範囲内にない場合には対処しなければなりませ
ん。
命令タイプ
J
命令フィールド
IMM26 = 26 ビット符号なし即値
31
30
29
28
27
26
25
24
23
22
21
20
19
18
IMM26
Altera Corporation
2004 年 12 月
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
20–27
Nios II プロセッサ・リファレンス・ハンドブック
callr
callr
レジスタ内のサブルーチンの呼び出し
操作
ra ← PC + 4
PC ← rA
アセンブラ構文
callr rA
例
callr r6
説明
次の命令のアドレスを戻りアドレス・レジスタに保存し、レジスタ rA に格納された
アドレスに実行を移します。
使用法
callr は、C 言語の関数ポインタの逆参照に使用されます。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
0
23
22
21
20
19
18
17
0x1f
20–28
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x1d
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
cmpeq
cmpeq
等号の比較
操作
if (rA == rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmpeq rC, rA, rB
例
cmpeq r6, r7, r8
説明
rA == rB が成立する場合は rC に 1 を格納し、成立しない場合は rC に 0 を格納します。
使用法
cmpeq は、C プログラミング言語の == 演算を実行します。また、cmpeq を使用し
て、C の論理否定演算子「!」を実装することもできます。
cmpeq rC, rA, r0 ; rC = !rA の実装
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x20
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–29
Nios II プロセッサ・リファレンス・ハンドブック
cmpeqi
cmpeqi
等号即値の比較
操作
if (rA σ (IMM16))
then rB ← 1
else rB ← 0
アセンブラ構文
cmpeqi rB, rA, IMM16
例
cmpeqi r6, r7, 100
説明
16 ビット即値の IMM16 を 32 ビットに符号拡張し、それを rA の値と比較します。rA
== σ (IMM16) が成立する場合、 cmpeqi は rB に 1 を格納し、成立しない場合は rB
に 0 を格納します。
使用法
cmpeqi は、C プログラミング言語の == 演算を実行します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–30
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x20
Altera Corporation
2004 年 12 月
cmpge
cmpge
符号付き大なりイコールの比較
操作
if ((signed) rA >= (signed) rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmpge rC, rA, rB
例
cmpge r6, r7, r8
説明
(signed) rA >= (signed) rB が成立する場合は rC に 1 を格納し、成立しない場合は rC
に 0 を格納します。
使用法
cmpge は、C プログラミング言語の符号付き >= 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x08
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–31
Nios II プロセッサ・リファレンス・ハンドブック
cmpgei
cmpgei
符号付き即値の大なりイコールの比較
操作
if ((signed) rA >= (signed) σ (IMM16))
then rB ← 1
else rB ← 0
アセンブラ構文
cmpgei rB, rA, IMM16
例
cmpgei r6, r7, 100
説明
16 ビット即値の IMM16 を 32 ビットに符号拡張し、それを rA の値と比較します。
(signed) rA >= (signed) σ(IMM16) が成立する場合、cmpgei は rB に 1 を格納し、成
立しない場合は rB に 0 を格納します。
使用法
cmpgei は、C プログラミング言語の符号付き >= 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–32
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x08
Altera Corporation
2004 年 12 月
cmpgeu
cmpgeu
符号なし大なりイコールの比較
操作
if ((unsigned) rA >= (unsigned) rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmpgeu rC, rA, rB
例
cmpgeu r6, r7, r8
説明
(unsigned) rA >= (unsigned) rB が成立する場合は rC に 1 を格納し、成立しない場合
は rC に 0 を格納します。
使用法
cmpgeu は、C プログラミング言語の符号なし >= 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x28
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–33
Nios II プロセッサ・リファレンス・ハンドブック
cmpgeui
cmpgeui
符号なし即値の大なりイコールの比較
操作
if ((unsigned) rA >= (unsigned) (0x0000 : IMM16))
then rB ← 1
else rB ← 0
アセンブラ構文
cmpgeui rB, rA, IMM16
例
cmpgeui r6, r7, 100
説明
16 ビット即値の IMM16 を 32 ビットにゼロ拡張し、それを rA の値と比較します。rA
>= (0x0000 : IMM16) が成立する場合、cmpgeui は rB に 1 を格納し、成立しない場
合は rB に 0 を格納します。
使用法
cmpgeui は、C プログラミング言語の符号なし >= 演算を実行します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号なし即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–34
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x28
Altera Corporation
2004 年 12 月
cmpgt
cmpgt
符号付き大なりの比較
操作
if ((signed) rA > (signed) rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmpgt rC, rA, rB
例
cmpgt r6, r7, r8
説明
rA > rB が成立する場合は rC に 1 を格納し、
成立しない場合は rC に 0 を格納します。
使用法
cmpgt は、C プログラミング言語の符号付き > 演算を実行します。
擬似命令
cmpgt は、rA オペランドと rB オペランドを入れ替えて cmplt 命令で実装されます。
Altera Corporation
2004 年 12 月
20–35
Nios II プロセッサ・リファレンス・ハンドブック
cmpgti
cmpgti
符号付き即値の大なりの比較
操作
if ((signed) rA > (signed) IMMED)
then rB ← 1
else rB ← 0
アセンブラ構文
cmpgti rB, rA, IMMED
例
cmpgti r6, r7, 100
説明
即値の IMMED を 32 ビットに符号拡張し、
それを rA の値と比較します。rA > σ(IMMED)
が成立する場合、cmpgti は rB に 1 を格納し、
成立しない場合は rB に 0 を格納します。
使用法
cmpgti は、C プログラミング言語の符号付き > 演算を実行します。IMMED の最大許
容値は 32766 です。最小許容値は -32769 です。
擬似命令
cmpgti は、 cmpgei 命令を即値の IMMED + 1 で使用して実装されます。
20–36
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
cmpgtu
cmpgtu
符号なし大なりの比較
操作
if ((unsigned) rA > (unsigned) rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmpgtu rC, rA, rB
例
cmpgtu r6, r7, r8
説明
rA > rB が成立する場合は rC に 1 を格納し、
成立しない場合は rC に 0 を格納します。
使用法
cmpgtu は、C プログラミング言語の符号なし > 演算を実行します。
擬似命令
cmpgtu は、rA オペランドと rB オペランドを入れ替えて cmpltu 命令で実装され
ます。
Altera Corporation
2004 年 12 月
20–37
Nios II プロセッサ・リファレンス・ハンドブック
cmpgtui
cmpgtui
符号なし即値の大なりの比較
操作
if ((unsigned) rA > (unsigned) IMMED)
then rB ← 1
else rB ← 0
アセンブラ構文
cmpgtui rB, rA, IMMED
例
cmpgtui r6, r7, 100
説明
即値の IMMED を 32 ビットにゼロ拡張し、それを rA の値と比較します。rA > IMMED
が成立する場合、
cmpgtui はrBに1を格納し、成立しない場合はrBに0を格納します。
使用法
cmpgtui は、C プログラミング言語の符号なし > 演算を実行します。IMMED の最
大許容値は 65534 です。最小許容値は 0 です。
擬似命令
cmpgtui は、cmpgeui 命令を即値の IMMED + 1 で使用して実装されます。
20–38
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
cmple
cmple
符号付き小なりイコールの比較
操作
if ((signed) rA <= (signed) rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmple rC, rA, rB
例
cmple r6, r7, r8
説明
rA <= rB が成立する場合は rC に 1 を格納し、成立しない場合は rC に 0 を格納します。
使用法
cmple は、C プログラミング言語の符号付き <= 演算を実行します。
擬似命令
cmple は、cmpge 命令で rA オペランドと rB オペランドを入れ替えて実装されます。
Altera Corporation
2004 年 12 月
20–39
Nios II プロセッサ・リファレンス・ハンドブック
cmplei
cmplei
符号付き即値の小なりイコールの比較
操作
if ((signed) rA <= (signed) IMMED)
then rB ← 1
else rB ← 0
アセンブラ構文
cmplei rB, rA, IMMED
例
cmplei r6, r7, 100
説明
即値の IMMED を 32 ビットに符号拡張し、これを rA の値と比較します。rA <=
σ(IMMED) が成立する場合、cmplei は rB に 1 を格納し、成立しない場合は rB に 0 を
格納します。
使用法
cmplei は、C プログラミング言語の符号付き <= 演算を実行します。IMMED の最
大許容値は 32766 です。最小許容値は -32769 です。
擬似命令
cmplei は、cmplti 命令を即値の IMMED + 1 で使用して実装されます。
20–40
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
cmpleu
cmpleu
符号なし小なりイコールの比較
操作
if ((unsigned) rA <= (unsigned) rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmpleu rC, rA, rB
例
cmpleu r6, r7, r8
説明
rA <= rB が成立する場合は rC に 1 を格納し、成立しない場合は rC に 0 を格納します。
使用法
cmpleu は、C プログラミング言語の符号なし <= 演算を実行します。
擬似命令
cmpleu は、cmpgeu 命令で rA オペランドと rB オペランドを入れ替えて実装され
ます。
Altera Corporation
2004 年 12 月
20–41
Nios II プロセッサ・リファレンス・ハンドブック
cmpleui
cmpleui
符号なし即値の小なりイコールの比較
操作
if ((unsigned) rA <= (unsigned) IMMED)
then rB ← 1
else rB ← 0
アセンブラ構文
cmpleui rB, rA, IMMED
例
cmpleui r6, r7, 100
説明
即値の IMMED を 32 ビットにゼロ拡張し、
それを rA の値と比較します。rA <= IMMED
が成立する場合、cmpleuiはrBに1を格納し、成立しない場合はrBに0を格納します。
使用法
cmpleui は、C プログラミング言語の符号なし <= 演算を実行します。IMMED の
最大許容値は 65534 です。最小許容値は 0 です。
擬似命令
cmpleui は、 cmpltui 命令を即値の IMMED + 1 で使用して実装されます。
20–42
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
cmplt
cmplt
符号付き小なりの比較
操作
if ((signed) rA < (signed) rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmplt rC, rA, rB
例
cmplt r6, r7, r8
説明
rA < rB が成立する場合は rC に 1 を格納し、
成立しない場合は rC に 0 を格納します。
使用法
cmplt は、C プログラミング言語の符号付き < 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x10
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–43
Nios II プロセッサ・リファレンス・ハンドブック
cmplti
cmplti
符号付き即値の小なりの比較
操作
if ((signed) rA < (signed) σ (IMM16))
then rB ← 1
else rB ← 0
アセンブラ構文
cmplti rB, rA, IMM16
例
cmplti r6, r7, 100
説明
16 ビットの即値 IMM16 を 32 ビットに符号拡張し、それを rA の値と比較します。rA
< σ (IMM16) が成立する場合、cmplti は rB に 1 を格納し、成立しない場合は rB に
0 を格納します。
使用法
cmplti は、C プログラミング言語の符号付き < 演算を実行します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–44
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x10
Altera Corporation
2004 年 12 月
cmpltu
cmpltu
符号なし小なりの比較
操作
if ((unsigned) rA < (unsigned) rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmpltu rC, rA, rB
例
cmpltu r6, r7, r8
説明
rA < rB が成立する場合は rC に 1 を格納し、成立しない場合は rC に 0 を格納します。
使用法
cmpltu は、C プログラミング言語の符号なし < 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x30
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–45
Nios II プロセッサ・リファレンス・ハンドブック
cmpltui
cmpltui
符号なし即値の小なりの比較
操作
if ((unsigned) rA < (unsigned) (0x0000 : IMM16))
then rB ← 1
else rB ← 0
アセンブラ構文
cmpltui rB, rA, IMM16
例
cmpltui r6, r7, 100
説明
16 ビットの即値 IMM16 を 32 ビットにゼロ拡張し、それを rA の値と比較します。rA
< (0x0000 : IMM16) が成立する場合、 cmpltui は rB に 1 を格納し、成立しない場
合は rB に 0 を格納します。
使用法
cmpltui は、C プログラミング言語の符号なし < 演算を実行します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号なし即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–46
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x30
Altera Corporation
2004 年 12 月
cmpne
cmpne
等号否定の比較
操作
if (rA != rB)
then rC ← 1
else rC ← 0
アセンブラ構文
cmpne rC, rA, rB
例
cmpne r6, r7, r8
説明
rA != rB が成立する場合は rC に 1 を格納し、成立しない場合は rC に 0 を格納します。
使用法
cmpne は、C プログラミング言語の != 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x18
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–47
Nios II プロセッサ・リファレンス・ハンドブック
cmpnei
cmpnei
即値の等号否定の比較
操作
if (rA != σ (IMM16))
then rB ← 1
else rB ← 0
アセンブラ構文
cmpnei rB, rA, IMM16
例
cmpnei r6, r7, 100
説明
16 ビットの即値 IMM16 を 32 ビットに符号拡張し、それを rA の値と比較します。rA
!= σ (IMM16) が成立する場合、 cmpnei は rB に 1 を格納し、成立しない場合は rB
に 0 を格納します。
使用法
cmpnei は、C プログラミング言語の != 演算を実行します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–48
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x18
Altera Corporation
2004 年 12 月
custom
custom
カスタム命令
操作
if c == 1
then rC ← fN(rA, rB, A, B, C)
else Ø ← fN(rA, rB, A, B, C)
アセンブラ構文
custom N, xC, xA, xB
ここで、xA は汎用レジスタ rA またはカスタム・レジスタ cA のいずれかを意味します。
例
custom 0, c6, r7, r8
説明
custom オペコードは、Nios II アーキテクチャで可能な最大 256 のカスタム命令へ
のアクセスを提供します。カスタム命令によって実装される関数は、ユーザ定義関
数であり、システム生成時に指定されます。8 ビット即値の N フィールドは、使用
するカスタム命令を指定します。カスタム命令は、最大で xA および xB の 2 つのパ
ラメータを使用でき、オプションによって結果をレジスタ xC に書き込むことができ
ます。
使用法
カスタム命令ロジック内部のカスタム・レジスタにアクセスするには、ビットreadra、
readrb、またはレジスタ・フィールドに対応するビット writerc をクリアします。ア
センブラ構文で、表記 cN はカスタム・レジスタ・ファイル内のレジスタ N を表し、
そ れ によ っ てア セ ンブ ラ はオ ペ コー ド の c ビ ッ トを ク リ アし ま す。例 え ば、
custom 0, c3, r5, r0 は、カスタム命令 0 を実行し、汎用レジスタ r5 および
r0 を操作して、結果をカスタム・レジスタ 3 に格納します。
命令タイプ
R
命令フィールド
A = オペランド A のレジスタ・インデックス
B = オペランド B のレジスタ・インデックス
C = オペランド C のレジスタ・インデックス
N = 命令を選択する 8 ビット番号
readra = 1(命令が rA を使用する場合)、0(それ以外)
readrb = 1(命令が rB を使用する場合)、0(それ以外)
writerc = 1(命令が rc に結果を提供する場合)、0(それ以外)
31
30
29
28
27
26
A
25
24
B
23
22
21
20
19
18
17
16
C
15
14
13
12
11
10
9
N
8
7
6
5
4
3
2
1
0
0x32
readra
readrb
writerc
Altera Corporation
2004 年 12 月
20–49
Nios II プロセッサ・リファレンス・ハンドブック
div
div
除算
操作
rC ← rA ÷ rB
アセンブラ構文
div rC, rA, rB
例
div r6, r7, r8
説明
この命令は、rA と rB を符号付き整数として扱い、rA を rB で除算し、その商の整
数部分を rC に格納します。ゼロで除算しようとすると、rC の値は不定になります。
ゼロ除算例外はありません。-2147483648 を -1 で除算すると、rC の値は不定にな
ります(+2147483648 は 32 ビットで表現できない)。オーバフロー例外はありま
せん。
div 命令を実装していない Nios II プロセッサでは、未実装命令例外が発生します。
使用法
除算の剰余
除算の結果が定義された場合は、以下の命令シーケンスを使用して rD で剰余を計
算できます。
div rC, rA, rB ; 元の div 演算
mul rD, rC, rB sub rD, rA, rD ; rD = 剰余
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
B
23
22
21
20
19
18
17
C
20–50
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x25
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
divu
divu
符号なし除算
操作
rC ← rA ÷ rB
アセンブラ構文
divu rC, rA, rB
例
divu r6, r7, r8
説明
この命令は、rA と rB を符号なし整数として扱い、rA を rB で除算し、その商の整
数部分を rC に格納します。ゼロで除算しようとすると、rC の値は不定になります。
ゼロ除算例外はありません。
divu 命令を実装していない Nios II プロセッサでは、未実装命令例外が発生します。
使用法
除算の剰余
除算の結果が決定されると、以下の命令シーケンスを使用して、rD 内で剰余が計算
できます。
divu rC, rA, rB ; 元の divu 演算
mul rD, rC, rB sub rD, rA, rD ; rD = 剰余
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x24
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–51
Nios II プロセッサ・リファレンス・ハンドブック
eret
eret
例外の復帰
操作
status ← estatus
PC ← ea
アセンブラ構文
eret
例
eret
説明
estatus の値を status レジスタにコピーし、 ea のアドレスに実行を移します。
ユーザ・モードでは、この命令はアクセス違反例外を生成します。
使用法
eret は、トラップ、外部割り込み、およびその他の例外処理ルーチンからの復帰に
使用します。ハードウェア割り込み例外から戻る前に、例外ハンドラは ea レジスタ
を調整する必要があることに注意してください。
命令タイプ
R
命令フィールド
なし
31
30
29
0x1d
28
27
26
25
24
0
23
22
21
20
19
18
17
0
20–52
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x01
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
flushd
flushd
データ・キャッシュ・ラインのフラッシュ
操作
アドレス rA + σ (IMM16) に関連付けられたデータ・キャッシュ・ラインをフラッシュ
します。
アセンブラ構文
flushd IMM16(rA)
例
flushd -100(r6)
説明
flushd は、rA と符号付き 16 ビット即値の合計で指定される実効アドレスを計算し
ます。flushd は、タグを無視して、計算された実効アドレスに関連付けられたデー
タ・キャッシュ・ラインを識別します。キャッシュ・ラインを識別すると、flushd
はキャッシュ・ラインのダーティ・データをメモリに書き戻してラインを無効化しま
す。キャッシュ・ライン内のデータがプロセッサによって変更されても、メモリに書
き込まれていない場合、キャッシュ・データはダーティです。
Nios II プロセッサ・コアにデータ・キャッシュが搭載されていない場合、 flushd
命令は操作を実行しません。
データ・キャッシュの詳細については、
「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
0
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x3b
20–53
Nios II プロセッサ・リファレンス・ハンドブック
flushi
flushi
命令キャッシュ・ラインのフラッシュ
操作
アドレス rA に関連付けられた命令キャッシュ・ラインをフラッシュします。
アセンブラ構文
flushi rA
例
flushi r6
説明
flushi は、タグを無視し、rA のバイト・アドレスに関連付けられた命令キャッ
シュ・ラインを識別し、そのラインを無効化します。
Nios II プロセッサ・コアに命令キャッシュが搭載されていない場合、 flushi 命令
は操作を実行しません。
データ・キャッシュの詳細については、
「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
0
23
22
21
20
19
18
17
0
20–54
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x0c
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
flushp
flushp
パイプラインのフラッシュ
操作
プリフェッチされた任意の命令のプロセッサ・パイプラインをフラッシュします。
アセンブラ構文
flushp
例
flushp
説明
flushp 命令の後にプリフェッチされた命令が、パイプラインから確実に除去され
るようにします。
使用法
flushp は、新しく更新された命令メモリに制御を移す前に使用します。
命令タイプ
R
命令フィールド
なし
31
30
29
28
27
26
0
Altera Corporation
2004 年 12 月
25
24
0
23
22
21
20
19
0
18
17
16
15
14
13
0x04
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–55
Nios II プロセッサ・リファレンス・ハンドブック
initd
initd
データ・キャッシュ・ラインの初期化
操作
アドレス rA + σ (IMM16) に関連付けられたデータ・キャッシュ・ラインを初期化し
ます。
アセンブラ構文
initd IMM16(rA)
例
initd 0(r6)
説明
initd は、rA と符号付き 16 ビット即値の合計で指定される実効アドレスを計算し
ます。 initd は、タグを無視し、実効アドレスに関連付けられたデータ・キャッ
シュ・ラインを識別し、そのラインを無効化します。
Nios II プロセッサ・コアにデータ・キャッシュが搭載されていない場合、initd 命
令は操作を実行しません。
ユーザ・モードでは、この命令はアクセス違反例外を生成します。
使用法
この命令は、プロセッサのデータ・キャッシュを初期化するために使用されます。プ
ロセッサ・リセット後にデータ・メモリにアクセスする前に、 initd を使用して、
データ・キャッシュの各ラインを無効化します。
データ・キャッシュの詳細については、
「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
0
20–56
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x33
Altera Corporation
2004 年 12 月
initi
initi
命令キャッシュ・ラインの初期化
操作
アドレス rA に関連付けられた命令キャッシュ・ラインを初期化します。
アセンブラ構文
initi rA
例
initi r6
説明
initi は、タグを無視し、ra のバイト・アドレスに関連付けられた命令キャッシュ・
ラインを識別し、そのラインを無効化します。
Nios II プロセッサ・コアに命令キャッシュが搭載されていない場合、initi 命令は
操作を実行しません。
ユーザ・モードでは、この命令はアクセス違反例外を生成します。
使用法
この命令は、プロセッサの命令キャッシュを初期化するために使用されます。プロ
セッサ・リセットの直後に、 initi を使用して、命令キャッシュの各ラインを無効
化します。
データ・キャッシュの詳細については、
「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
0
23
22
21
20
19
0
18
17
16
15
14
13
0x29
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–57
Nios II プロセッサ・リファレンス・ハンドブック
jmp
jmp
計算によるジャンプ
操作
PC ← rA
アセンブラ構文
jmp rA
例
jmp r12
説明
レジスタ rA に格納されたアドレスに実行を移します。
使用法
レジスタ r31 に格納されたアドレスにジャンプすることは違法です。 call または
callr で呼び出されたサブルーチンから戻るには、jmp の代わりに ret を使用しま
す。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
0
23
22
21
20
19
18
17
0
20–58
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x0d
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
ldb / ldbio
ldb / ldbio
メモリまたは I/O ペリフェラルからのバイトのロード
操作
rB ← σ (Mem8[rA + σ (IMM16)])
アセンブラ構文
ldb rB, byte_offset(rA)
ldbio rB, byte_offset(rA)
例
ldb r6, 100(r5)
説明
rA と命令の符号付き 16 ビット即値との合計で指定される実効バイト・アドレスを計
算します。レジスタ rB に希望のメモリ・バイトをロードし、8 ビット値を 32 ビット
に符号拡張します。
使用法
データ・キャッシュを搭載した Nios II プロセッサ・コアでは、この命令はメモリの
代わりにキャッシュから目的のデータを取り出すことができます。 ldbio 命令はペ
リフェラル I/O に使用します。データ・キャッシュを搭載したプロセッサでは、ldbio
はキャッシュをバイパスし、Avalon™ データ転送を生成することが保証されます。
データ・キャッシュを搭載していないプロセッサでは、ldbio は ldb と同様に動作
します。
データ・キャッシュの詳細については、
「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
25
A
24
23
22
21
20
19
18
17
16
15
B
14
13
12
11
10
9
8
7
6
5
4
IMM16
3
2
1
0
1
0
0x07
ldb の命令形式
31
30
29
28
27
26
A
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
0x27
ldbio の命令形式
Altera Corporation
2004 年 12 月
20–59
Nios II プロセッサ・リファレンス・ハンドブック
ldbu / ldbuio
ldbu / ldbuio
メモリまたは I/O ペリフェラルからの符号なしバイトのロード
操作
rB ← 0x000000 : Mem8[rA + σ (IMM16)]
アセンブラ構文
ldbu rB, byte_offset(rA)
ldbuio rB, byte_offset(rA)
例
ldbu r6, 100(r5)
説明
rA と命令の符号付き 16 ビット即値との合計で指定される実効バイト・アドレスを計
算します。レジスタ rB に希望のメモリ・バイトをロードし、8 ビット値を 32 ビット
にゼロ拡張します。
使用法
データ・キャッシュを搭載したプロセッサでは、この命令はメモリの代わりにキャッ
シュから目的のデータを取り出すことができます。 ldbuio 命令は、ペリフェラル
I/O に使用します。データ・キャッシュを搭載したプロセッサでは、ldbuio はキャッ
シュをバイパスし、Avalon データ転送を生成することが保証されます。データ・
キャッシュを搭載していないプロセッサでは、 ldbuio は ldbu と同様に動作しま
す。
データ・キャッシュの詳細については、
「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
25
A
24
23
22
21
20
19
18
17
16
15
B
14
13
12
11
10
9
8
7
6
5
4
IMM16
3
2
1
0
1
0
0x03
ldbu の命令形式
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
0x23
ldbuio の命令形式
20–60
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
ldh / ldhio
ldh / ldhio
メモリまたは I/O ペリフェラルからのハーフワードのロード
操作
rB ← σ (Mem16[rA + σ (IMM16)])
アセンブラ構文
ldh rB, byte_offset(rA)
ldhio rB, byte_offset(rA)
例
ldh r6, 100(r5)
説明
rA と命令の符号付き 16 ビット即値との合計で指定される実効バイト・アドレスを計
算します。レジスタ rB に実効バイト・アドレスに配置されたメモリのハーフワード
をロードし、16 ビット値を 32 ビットに符号拡張します。実効バイト・アドレスは、
ハーフワード単位でアライメントされていなければなりません。バイト・アドレスが
2 の倍数でない場合、動作は不定です。
使用法
データ・キャッシュを搭載したプロセッサでは、この命令はメモリの代わりにキャッ
シュから目的のデータを取り出すことができます。ldhio 命令は、ペリフェラル I/O
に使用します。データ・キャッシュを搭載したプロセッサでは、ldhio はキャッシュ
をバイパスし、Avalon データ転送を生成することが保証されます。データ・キャッ
シュを搭載していないプロセッサでは、 ldhio は ldh と同様に動作します。
データ・キャッシュの詳細については、「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
25
A
24
23
22
21
20
19
18
17
16
15
B
14
13
12
11
10
9
8
7
6
5
4
IMM16
3
2
1
0
1
0
0x0f
lbh の命令形式
31
30
29
28
27
26
A
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
0x2f
ldhio の命令形式
Altera Corporation
2004 年 12 月
20–61
Nios II プロセッサ・リファレンス・ハンドブック
ldhu / ldhuio
ldhu / ldhuio
メモリまたは I/O ペリフェラルからの符号なしハーフワードのロード
操作
rB ← 0x0000 : Mem16[rA + σ (IMM16)]
アセンブラ構文
ldhu rB, byte_offset(rA)
ldhuio rB, byte_offset(rA)
例
ldhu r6, 100(r5)
説明
rA と命令の符号付き 16 ビット即値との合計で指定される実効バイト・アドレスを計
算します。レジスタ rB に実効バイト・アドレスに配置されたメモリのハーフワード
をロードし、16 ビット値を 32 ビットにゼロ拡張します。実効バイト・アドレスは、
ハーフワード単位でアライメントされていなければなりません。バイト・アドレス
が 2 の倍数でない場合、動作は不定です。
使用法
データ・キャッシュを搭載したプロセッサでは、この命令はメモリの代わりにキャッ
シュから目的のデータを取り出すことができます。 ldhuio 命令は、ペリフェラル
I/O に使用します。データ・キャッシュを搭載したプロセッサでは、ldhuio はキャッ
シュをバイパスし、Avalon データ転送を生成することが保証されます。データ・
キャッシュを搭載していないプロセッサでは、 ldhuio は ldhu と同様に動作しま
す。
データ・キャッシュの詳細については、
「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
25
A
24
23
22
21
20
19
18
17
16
15
B
14
13
12
11
10
9
8
7
6
5
4
IMM16
3
2
1
0
1
0
0x0b
ldhu の命令形式
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
0x2b
ldhuio の命令形式
20–62
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
ldw / ldwio
ldw / ldwio
メモリまたは I/O ペリフェラルからの 32 ビット・ワードのロード
操作
rB ← Mem32[rA + σ (IMM14)]
アセンブラ構文
ldw rB, byte_offset(rA)
ldwio rB, byte_offset(rA)
例
ldw r6, 100(r5)
説明
rA と命令の符号付き 16 ビット即値との合計で指定される実効バイト・アドレスを計
算します。レジスタ rB に実効バイト・アドレスに配置されたメモリのワードをロー
ドします。実効バイト・アドレスは、ワード単位でアライメントされていなければな
りません。バイト・アドレスが 4 の倍数でない場合、動作は不定です。
使用法
データ・キャッシュを搭載したプロセッサでは、この命令はメモリの代わりにキャッ
シュから目的のデータを取り出すことができます。ldwio 命令は、ペリフェラル I/O
に使用します。データ・キャッシュを搭載したプロセッサでは、 ldwio はキャッ
シュとメモリをバイパスします。 ldwio 命令は、ペリフェラル I/O に使用します。
データ・キャッシュを搭載したプロセッサでは、ldwio はキャッシュをバイパスし、
Avalon データ転送を生成することが保証されます。データ・キャッシュを搭載して
いないプロセッサでは、 ldwio は ldw と同様に動作します。
データ・キャッシュの詳細については、
「Nios II ソフトウェア開発ハンドブック」の
第 7 章「キャッシュ・メモリ」を参照してください。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
25
A
24
23
22
21
20
19
18
17
16
15
B
14
13
12
11
10
9
8
7
6
5
4
IMM16
3
2
1
0
1
0
0x17
ldw の命令形式
31
30
29
28
27
26
A
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
0x37
ldwio の命令形式
Altera Corporation
2004 年 12 月
20–63
Nios II プロセッサ・リファレンス・ハンドブック
mov
mov
レジスタ間の移動
操作
rC ← rA
アセンブラ構文
mov rC, rA
例
mov r6, r7
説明
rA の内容を rC に移動します。
擬似命令
mov は add rC, rA, r0 として実装されます。
20–64
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
movhi
movhi
上位ハーフワードへの即値の移動
操作
rB ← (IMMED : 0x0000)
アセンブラ構文
movhi rB, IMMED
例
movhi r6, 0x8000
説明
即値のIMMEDをrBの上位ハーフワードに書き込み、rBの下位ハーフワードを0x0000
にクリアします。
使用法
IMMED の最大許容値は 65535 です。最小許容値は 0 です。32 ビット定数をレジス
タにロードするには、最初に movhi 擬似命令を使用して上位 16 ビットをロードし
ます。%hi() マクロを使用して、定数またはラベルの上位 16 ビットを抽出できます。
次に、 ori 命令を使用して、下位 16 ビットをロードします。%lo() マクロを使用し
て、以下に示すように、定数またはラベルの下位 16 ビットを抽出できます。
movhi rB, r0, %hi(value)
ori rB, r0, %lo(value)
32 ビット定数をレジスタにロードする別の方法は、以下に示すように、%hiadj() マ
クロと addi 命令を使用することです。
movhi rB, r0, %hiadj(value)
addi rB, r0, %lo(value)
擬似命令
Altera Corporation
2004 年 12 月
movhi は、 orhi rB, r0, IMMED として実装されます。
20–65
Nios II プロセッサ・リファレンス・ハンドブック
movi
movi
ワードへの符号付き即値の移動
操作
rB ← σ (IMMED)
アセンブラ構文
movi rB, IMMED
例
movi r6, -30
説明
即値の IMMED を 32 ビットに符号拡張し、それを rB に書き込みます。
使用法
IMMED の最大許容値は 32767 です。最小許容値は -32768 です。32 ビット定数をレジ
スタにロードする方法については、movhi 命令を参照してください。
擬似命令
movi は、 addi rB, r0, IMMED として実装されます。
20–66
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
movia
movia
ワードへの即値アドレスの移動
操作
rB ← label
アセンブラ構文
movia rB, label
例
movia r6, function_address
説明
ラベルのアドレスを rB に書き込みます。
擬似命令
movia は、以下のように実装されます。
orhi rB, r0, %hiadj(label)
addi rB, r0, %lo(label)
Altera Corporation
2004 年 12 月
20–67
Nios II プロセッサ・リファレンス・ハンドブック
movui
movui
ワードへの符号なし即値の転送
操作
rB ← (0x0000 : IMMED)
アセンブラ構文
movui rB, IMMED
例
movui r6, 100
説明
即値の IMMED を 32 ビットにゼロ拡張し、それを rB に書き込みます。
使用法
IMMED の最大許容値は 65535 です。最小許容値は 0 です。32 ビット定数をレジス
タにロードする方法については、 movhi 命令を参照してください。
擬似命令
movui は、 ori rB, r0, IMMED として実装されます。
20–68
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
mul
mul
乗算
操作
rC ← (rA × rB) 31..0
アセンブラ構文
mul rC, rA, rB
例
mul r6, r7, r8
説明
rA と rB を乗算し、積の下位 32 ビットを rC に格納します。オペランドを符号付き整
数または符号なし整数のどちらで扱っても、結果は同じです。
mul 命令を実装していない Nios II プロセッサでは、未実装命令例外が発生します。
使用法
キャリー検出(符号なしオペランド)
乗算演算の前後で、以下の命令シーケンスを使用して、rC の MSB のキャリーを検出
できます。
mul rC, rA, rB ; mul 演算(オプション)
mulxuu rD, rA, rB ; rD はキャリーが発生した場合はゼロ以外になりま
す。
cmpne rD, rD, r0 ; rD はキャリーが発生した場合は 1、発生しない場
合は 0 です。
符号なし値の乗算によってキャリーが発生する場合(符号なしオーバフロー)、
mulxuu 命令はゼロ以外の値を rD に書き込みます。0/1 の結果が必要な場合、mulxuu
命令の後に cmpne 命令を続けます。
オーバフロー検出(符号付きオペランド)
乗算演算の後に、以下の命令シーケンスを使用してオーバフローを検出することがで
きます。
mul rC, rA, rB ; 元の mul 演算
cmplt rD, rC, r0 mulxss rE, rA, rB add rD, rD, rE ; オーバフローが発生した場合、rD はゼロ以外です。
cmpne rD, rD, r0 ; rD はオーバフローが発生した場合は 1、発生しな
い場合は 0 です。
rC の積が 32 ビットで表現できない(符号付きオーバフロー)場合、cmplt-mulxssadd 命令シーケンスは、ゼロ以外の値を rD に書き込みます。0/1 の結果が必要な場
合、この命令シーケンスの後に cmpne 命令を続けます。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x27
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–69
Nios II プロセッサ・リファレンス・ハンドブック
muli
muli
即値の乗算
操作
rB ← (rA × σ(IMM16)) 31..0
アセンブラ構文
muli rB, rA, IMM16
例
muli r6, r7, -100
説明
16 ビットの即値 IMM16 を 32 ビットに符号拡張し、それを rA の値で乗算します。積
の下位 32 ビットを rB に格納します。乗算結果は、rA を符号付き値または符号なし
値のどちらで扱っても同じです。
muli 命令を実装していない Nios II プロセッサでは、未実装命令例外が発生します。
キャリー検出とオーバフロー検出
キャリーおよびオーバフロー検出の説明については、 mul 命令を参照してください。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–70
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x24
Altera Corporation
2004 年 12 月
mulxss
mulxss
拡張符号付き / 符号付き乗算
操作
rC ← ((signed) rA) × ((signed) rB)) 63..32
アセンブラ構文
mulxss rC, rA, rB
例
mulxss r6, r7, r8
説明
mulxss は、rA と rB を符号付き整数として扱い、rA と rB を乗算し、積の上位 32
ビットを rC に格納します。
mulxss 命令を実装していない Nios II プロセッサでは、未実装命令例外が発生しま
す。
mulxss と mul は、2 つの 32 ビット符号付き整数の完全 64 ビット積を計算するの
に使用します。さらに、mulxss は、2 つの 64 ビット符号付き整数の 128 ビット積
計算の一環として使用できます。2 つの 64 ビット整数が、それぞれ 32 ビット・レ
ジスタ・ペア (S1 : U1) および (S2 : U2) に格納されているとすると、これらの 128
ビット積は、(U1 × U2) + ((S1 × U2) << 32) + ((U1 × S2) << 32) + ((S1 × S2) << 64)
64 ビット積 S1 × S2 の計算に使用されます。
です。mulxss 命令および mul 命令は、
使用法
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x1f
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–71
Nios II プロセッサ・リファレンス・ハンドブック
mulxsu
mulxsu
拡張符号付き / 符号なし乗算
操作
rC ← ((signed) rA) × ((unsigned) rB)) 63..32
アセンブラ構文
mulxsu rC, rA, rB
例
mulxsu r6, r7, r8
説明
mulxsu は、rA を符号付き整数、rB を符号なし整数として扱い、rA と rB を乗算し、
積の上位 32 ビットを rC に格納します。
mulxsu 命令を実装していない Nios II プロセッサでは、未実装命令例外が発生しま
す。
使用法
mulxsu は、2 つの 64 ビット符号付き整数の 128 ビット積計算の一環として使用で
きます。2 つの 64 ビット整数が、それぞれ 32 ビット・レジスタ・ペア (S1 : U1) お
よび (S2 : U2) に格納されているとすると、これらの 128 ビット積は、(U1 × U2) +
((S1 × U2) << 32) + ((U1 × S2) << 32) + ((S1 × S2) << 64) です。mulxsu 命令および
mul 命令は、64 ビット積 S1 × U2 および U1 × S2 の計算に使用されます。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
B
23
22
21
20
19
18
17
C
20–72
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x17
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
mulxuu
mulxuu
拡張符号なし / 符号なし乗算
操作
rC ← ((unsigned) rA) × ((unsigned) rB)) 63..32
アセンブラ構文
mulxuu rC, rA, rB
例
mulxuu r6, r7, r8
説明
mulxuu は、rA と rB を符号なし整数として扱い、rA と rB を乗算し、積の上位
32 ビットを rC に格納します。
mulxuu 命令を実装していない Nios II プロセッサでは、未実装命令例外が発生
します。
mulxuu と mul は、2 つの 32 ビット符号なし整数の 64 ビット積を計算するの
に使用します。さらに、mulxuu は、2 つの 64 ビット符号付き整数の 128 ビッ
ト積計算の一環として使用できます。2 つの 64 ビット符号付き整数が、それぞ
れ 32 ビット・レジスタ・ペア (S1 : U1) および (S2 : U2) に格納されているとす
ると、これらの 128 ビット積は、(U1 × U2) + ((S1 × U2) << 32) + ((U1 × S2) <<
32) + ((S1 × S2) << 64) です。 mulxuu 命令および mul 命令は、64 ビット積
U1 × U2 の計算に使用されます。
使用法
mulxuu は、2 つの 64 ビット符号なし整数の 128 ビット積計算の一環として
使用できます。2 つの 64 ビット符号なし整数が、それぞれ 32 ビット・レジス
タ・ペア (T1 : U1) および (T2 : U2) に格納されているとすると、これらの 128
ビット積は、(U1 × U2) + ((U1 × T2) << 32) + ((T1 × U2) << 32) + ((T1 × T2) <<
64) です。 mulxuu 命令と mul 命令は、4 つの 64 ビット積、U1 × U2、U1 ×
T2、T1 × U2、および T1 × T2 の計算に使用されます。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x07
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–73
Nios II プロセッサ・リファレンス・ハンドブック
nextpc
nextpc
以下の命令のアドレス取得
操作
rC ← PC + 4
アセンブラ構文
nextpc rC
例
nextpc r6
説明
次の命令のアドレスをレジスタ rC に格納します。
使用法
再配置可能なコードの一部分で nextpc を使用して、そのデータ・セグメントのア
ドレスを計算できます。 nextpc は、PC に直接アクセスする唯一の方法です。
命令タイプ
R
命令フィールド
C = オペランド rC のレジスタ・インデックス
31
30
29
0
28
27
26
25
24
0
23
22
21
20
19
18
17
C
20–74
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x1c
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
nop
nop
無動作
操作
なし
アセンブラ構文
nop
例
nop
説明
nop は操作を実行しません。
擬似命令
nop は add r0, r0, r0 として実装されます。
Altera Corporation
2004 年 12 月
20–75
Nios II プロセッサ・リファレンス・ハンドブック
nor
nor
ビット単位の否定論理和
操作
rC ← ~(rA | rB)
アセンブラ構文
nor rC, rA, rB
例
nor r6, r7, r8
説明
rA および rB のビット単位の否定論理和 (NOR) を計算し、その結果を rC に格納し
ます。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
B
23
22
21
20
19
18
17
C
20–76
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x06
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
or
or
ビット単位の論理和
操作
rC ← rA | rB
アセンブラ構文
or rC, rA, rB
例
or r6, r7, r8
説明
rA と rB のビット単位の論理和 (OR) を計算し、その結果を rC に格納します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x16
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–77
Nios II プロセッサ・リファレンス・ハンドブック
orhi
orhi
上位ハーフワードへの即値ビット単位の論理和
操作
rB ← rA | (IMM16 : 0x0000)
アセンブラ構文
orhi rB, rA, IMM16
例
orhi r6, r7, 100
説明
rA と (IMM16 : 0x0000) のビット単位の論理和を計算し、その結果を rB に格納します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–78
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x34
Altera Corporation
2004 年 12 月
ori
ori
ビット単位の即値の論理和
操作
rB ← rA | (0x0000 : IMM16)
アセンブラ構文
ori rB, rA, IMM16
例
ori r6, r7, 100
説明
rA と (0x0000 : IMM16) のビット単位の論理和 (OR) を計算し、その結果を rB に格納
します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号なし即値
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x14
20–79
Nios II プロセッサ・リファレンス・ハンドブック
rdctl
rdctl
コントロール・レジスタからの読み出し
操作
rC ← ctlN
アセンブラ構文
rdctl rC, ctlN
例
rdctl r3, ctl31
説明
コントロール・レジスタ ctlN に格納された値を読み出し、それをレジスタ rC に書き
込みます。ユーザ・モードでは、この命令はアクセス違反例外を生成します。
命令タイプ
R
命令フィールド
C = オペランド rC のレジスタ・インデックス
N = オペランド ctlN のコントロール・レジスタ・インデックス
31
30
29
0
28
27
26
25
24
0
23
22
21
20
19
18
17
C
20–80
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x26
12
11
10
9
8
N
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
ret
ret
サブルーチンからの復帰
操作
PC ← ra
アセンブラ構文
ret
例
ret
説明
ra のアドレスに実行を移します。
使用法
call または callr で呼び出されたサブルーチンはすべて、ret を使用して復帰す
る必要があります。
命令タイプ
R
命令フィールド
なし
31
30
29
28
27
26
0x1f
Altera Corporation
2004 年 12 月
25
24
0
23
22
21
20
19
0
18
17
16
15
14
13
0x05
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–81
Nios II プロセッサ・リファレンス・ハンドブック
rol
rol
左回転
操作
rC ← rA を rB4..0 ビット位置だけ左に回転
アセンブラ構文
rol rC, rA, rB
例
rol r6, r7, r8
説明
rA を rB4..0 で指定されたビット数だけ左に回転し、その結果を rC に格納します。レ
ジスタからシフト・アウトされたビットは、回転して最下位ビット位置に入ります。
rB のビット 31-5 は無視されます。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
B
23
22
21
20
19
18
17
C
20–82
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x03
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
roli
roli
即値の左回転
操作
rC ← rA を IMM5 のビット位置だけ左に回転
アセンブラ構文
roli rC, rA, IMM5
例
roli r6, r7, 3
説明
rA を IMM5 で指定されたビット数だけ左に回転し、その結果を rC に格納します。レ
ジスタからシフト・アウトされたビットは、回転して最下位ビット位置に入ります。
使用法
roli は左回転操作だけでなく、右回転操作を実装するのにも使用できます。左に (32IMM5) ビット回転させることは、右に IMM5 ビット回転させることと同じです。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
IMM5 = 5 ビット符号なし即値
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
0
23
22
21
20
19
C
18
17
16
15
14
13
0x02
12
11
10
9
8
7
IMM5
6
5
4
3
2
1
0
0x3a
20–83
Nios II プロセッサ・リファレンス・ハンドブック
ror
ror
右に回転
操作
rC ← rA を rB4..0 ビット位置だけ右に回転
アセンブラ構文
ror rC, rA, rB
例
ror r6, r7, r8
説明
rA を rB4..0 で指定されたビット数だけ右に回転し、その結果を rC に格納します。レ
ジスタからシフト・アウトされたビットは、回転して最上位ビット位置に入ります。
rB のビット 31-5 は無視されます。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
B
23
22
21
20
19
18
17
C
20–84
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x0b
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
sll
sll
左への論理シフト
操作
rC ← rA << (rB4..0)
アセンブラ構文
sll rC, rA, rB
例
sll r6, r7, r8
説明
rA を rB4..0 で指定されたビット数だけ左にシフト(ゼロを挿入)し、その結果を rC
に格納します。 sll は、C プログラミング言語の << 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x13
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–85
Nios II プロセッサ・リファレンス・ハンドブック
slli
slli
即値の左への論理シフト
操作
rC ← rA << IMM5
アセンブラ構文
slli rC, rA, IMM5
例
slli r6, r7, 3
説明
rA を IMM5 で指定されたビット数だけ左にシフト(ゼロを挿入)し、その結果を rC
に格納します。
使用法
slli は、C プログラミング言語の << 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
IMM5 = 5 ビット符号なし即値
31
30
29
A
28
27
26
25
24
0
23
22
21
20
19
18
17
C
20–86
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x12
12
11
10
9
8
7
IMM5
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
sra
sra
右への算術シフト
操作
rC ← (signed) rA >> ((unsigned) rB4..0)
アセンブラ構文
sra rC, rA, rB
例
sra r6, r7, r8
説明
rA を rB4..0 で指定されたビット数だけ右にシフト(符号ビットを複製)し、その結果
を rC に格納します。ビット 31-5 は無視されます。
使用法
sra は、C プログラミング言語の符号付き >> 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x3b
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–87
Nios II プロセッサ・リファレンス・ハンドブック
srai
srai
即値の右への算術シフト
操作
rC ← (signed) rA >> ((unsigned) IMM5)
アセンブラ構文
srai rC, rA, IMM5
例
srai r6, r7, 3
説明
rA を IMM5 で指定されたビット数だけ右にシフト(符号ビットを複製)し、その結
果を rC に格納します。
使用法
srai は、C プログラミング言語の符号付き >> 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
IMM5 = 5 ビット符号なし即値
31
30
29
A
28
27
26
25
24
0
23
22
21
20
19
18
17
C
20–88
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x3a
12
11
10
9
8
7
IMM5
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
srl
srl
右への論理シフト
操作
rC ← (unsigned) rA >> ((unsigned) rB4..0)
アセンブラ構文
srl rC, rA, rB
例
srl r6, r7, r8
説明
rA を rB4..0 で指定されたビット数だけ右にシフト(ゼロを挿入)し、その結果を rC
に格納します。ビット 31-5 は無視されます。
使用法
srl は、C プログラミング言語の符号なし >> 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x1b
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–89
Nios II プロセッサ・リファレンス・ハンドブック
srli
srli
即値の右への論理シフト
操作
rC ← (unsigned) rA >> ((unsigned) IMM5)
アセンブラ構文
srli rC, rA, IMM5
例
srli r6, r7, 3
説明
rA を IMM5 で指定されたビット数だけ右にシフト(ゼロを挿入)し、その結果を rC
に格納します。
使用法
srli は、C プログラミング言語の符号なし >> 演算を実行します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
IMM5 = 5 ビット符号なし即値
31
30
29
A
28
27
26
25
24
0
23
22
21
20
19
18
17
C
20–90
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x1a
12
11
10
9
8
7
IMM5
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
stb / stbio
stb / stbio
メモリまたは I/O ペリフェラルへのバイトの格納
操作
Mem8[rA + σ (IMM16)] ← rB7..0
アセンブラ構文
stb rB, byte_offset(rA)
stbio rB, byte_offset(rA)
例
stb r6, 100(r5)
説明
rA と命令の符号付き 16 ビット即値との合計で指定される実効バイト・アドレスを計
算します。
実効アドレスで指定されたメモリ・バイトにrBの下位バイトを格納します。
使用法
データ・キャッシュを搭載したプロセッサでは、この命令によって非キャッシュ・
データ・メモリに対する Avalon バス・サイクルが、直ちに生成されることはありま
せん。 stbio 命令は、ペリフェラル I/O に使用します。データ・キャッシュを搭載
したプロセッサでは、stbio はキャッシュをバイパスし、Avalon データ転送を生成
することが保証されます。データ・キャッシュを搭載していないプロセッサでは、
stbio は stb と同様に動作します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
25
A
24
23
22
21
20
19
18
17
16
15
B
14
13
12
11
10
9
8
7
6
5
4
IMM16
3
2
1
0
1
0
0x05
stb の命令形式
31
30
29
28
27
26
A
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
0x25
stbio の命令形式
Altera Corporation
2004 年 12 月
20–91
Nios II プロセッサ・リファレンス・ハンドブック
sth / sthio
sth / sthio
メモリまたは I/O ペリフェラルへのハーフワードの格納
操作
Mem16[rA + σ (IMM16)] ← rB15..0
アセンブラ構文
sth rB, byte_offset(rA)
sthio rB, byte_offset(rA)
例
sth r6, 100(r5)
説明
rA と命令の符号付き 16 ビット即値との合計で指定される実効バイト・アドレスを計
算します。rB の下位ハーフワードを実効バイト・アドレスで指定されるメモリ位置
に格納します。実効バイト・アドレスは、ハーフワード単位でアライメントされてい
なければなりません。バイト・アドレスが 2 の倍数でない場合、動作は不定です。
使用法
データ・キャッシュを搭載したプロセッサでは、この命令によって、直ちに Avalon
データ転送を生成することはありません。sthio 命令はペリフェラル I/O に使用しま
す。データ・キャッシュを搭載したプロセッサでは、 sthio はキャッシュをバイパ
スし、Avalon データ転送を生成することが保証されます。データ・キャッシュを搭
載していないプロセッサでは、 sthio は sth と同様に動作します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
25
A
24
23
22
21
20
19
18
17
16
15
B
14
13
12
11
10
9
8
7
6
5
4
IMM16
3
2
1
0
1
0
0x0d
sth の命令形式
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
0x2d
sthio の命令形式
20–92
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
stw / stwio
stw / stwio
メモリまたは I/O ペリフェラルへのワードの格納
操作
Mem32[rA + σ (IMM16)] ← rB
アセンブラ構文
stw rB, byte_offset(rA)
stwio rB, byte_offset(rA)
例
stw r6, 100(r5)
説明
rA と命令の符号付き 16 ビット即値との合計で指定される実効バイト・アドレスを計
算します。rB を実効バイト・アドレスで指定されるメモリ位置に格納します。実効
バイト・アドレスは、ワード単位でアライメントされていなければなりません。バイ
ト・アドレスが 4 の倍数でない場合、動作は不定です。
使用法
データ・キャッシュを搭載したプロセッサでは、この命令によって、直ちに Avalon
データ転送を生成することはありません。 stwio 命令はペリフェラル I/O に使用し
ます。データ・キャッシュを搭載したプロセッサでは、 stwio はキャッシュをバイ
パスし、Avalon バス・サイクルを生成することが保証されます。データ・キャッシュ
を搭載していないプロセッサでは、 stwio は stw と同様に動作します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号付き即値
31
30
29
28
27
26
25
A
24
23
22
21
20
19
18
17
16
15
B
14
13
12
11
10
9
8
7
6
5
4
IMM16
3
2
1
0
1
0
0x15
stw の命令形式
31
30
29
28
27
26
A
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
0x35
stwio の命令形式
Altera Corporation
2004 年 12 月
20–93
Nios II プロセッサ・リファレンス・ハンドブック
sub
sub
減算
操作
rC ← rA – rB
アセンブラ構文
sub rC, rA, rB
例
sub r6, r7, r8
説明
rA から rB を減算し、その結果を rC に格納します。
使用法
キャリー検出(符号なしオペランド)
キャリー・ビットは符号なしオーバフローを示します。sub 演算の前後で、最初の
オペランドが 2 番目のオペランドよりも小さいかどうかをチェックして、MSB の
キャリーを検出することができます。キャリー・ビットをレジスタに書き込むか、
またはキャリー状態に基づいて条件分岐を実行できます。両方のケースを以下に示
します。
sub rC, rA, rB ; 元の sub 演算(オプション)
cmpltu rD, rA, rB ; rD はキャリー・ビット付きで書き込む
sub rC, rA, rB ; 元の sub 演算(オプション)
bltu rA, rB, label ; キャリーが発生した場合は分岐
オーバフロー検出(符号付きオペランド)
rC に書き込まれた差の符号とオペランドの符号を比較して、符号付き減算のオーバ
フローを検出します。rA と rB の符号が異なり、かつ rC の符号が rA の符号と異な
る場合は、オーバフローが発生しています。オーバフロー条件は、以下に示すとお
り条件分岐を制御できます。
sub rC, rA, rB ; 元の sub 演算
xor rD, rA, rB ; rA と rB の符号を比較
xor rE, rA, rC ; rA と rC の符号を比較
and rD, rD, rE ; 比較結果を結合
blt rD, r0, label ; オーバフローが発生した場合は分岐
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
A
28
27
26
25
24
B
23
22
21
20
19
18
17
C
20–94
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x39
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
subi
subi
即値の減算
操作
rB ← rA – σ (IMMED)
アセンブラ構文
subi rB, rA, IMMED
例
subi r8, r8, 4
説明
即値の IMMED を 32 ビットに符号拡張し、その値を rA の値から減算して、結果を
rB に格納します。
使用法
IMMED の最大許容値は 32768 です。最小許容値は -32767 です。
擬似命令
subi は addi rB, rA, -IMMED として実装されます。
Altera Corporation
2004 年 12 月
20–95
Nios II プロセッサ・リファレンス・ハンドブック
sync
sync
メモリの同期
操作
なし
アセンブラ構文
sync
例
sync
説明
後続の命令の実行を許可する前に、ペンディング中のメモリ・アクセスをすべて強
制的に完了します。順番どおりのメモリ・アクセスのみをサポートするプロセッサ・
コアでは、この命令はどんな操作も実行しません。
命令タイプ
R
命令フィールド
なし
31
30
29
0
28
27
26
25
24
0
23
22
21
20
19
18
17
0
20–96
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x36
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
trap
trap
estatus ← status
操作
PIE ← 0
ea ← PC + 4
PC ← 例外ハンドラ・アドレス
アセンブラ構文
trap
例
trap
説明
次の命令のアドレスをレジスタ ea に保存し、status レジスタの内容を estatus
に保存します。また、割り込みをディセーブルし、プロセッサを強制的にスーパバ
イザ・モードに変更し、実行を例外ハンドラに移します。例外ハンドラのアドレス
は、システム生成時に指定されます。
使用法
例外ハンドラから復帰するには、 eret 命令を実行します。
命令タイプ
R
命令フィールド
なし
31
30
29
28
27
26
0
Altera Corporation
2004 年 12 月
25
24
0
23
22
21
20
19
0x1d
18
17
16
15
14
13
0x2d
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–97
Nios II プロセッサ・リファレンス・ハンドブック
wrctl
wrctl
コントロール・レジスタへの書き込み
操作
ctlN ← rA
アセンブラ構文
wrctl ctlN, rA
例
wrctl ctl6, r3
説明
レジスタ rA に格納された値をコントロール・レジスタ ctlN に書き込みます。wrctl
をユーザ・モードで発行すると、アクセス違反例外が発生します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
N = オペランド ctlN のコントロール・レジスタ・インデックス
31
30
29
A
28
27
26
25
24
0
23
22
21
20
19
18
17
0
20–98
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
0x2e
12
11
10
9
8
N
7
6
5
4
3
2
1
0
0x3a
Altera Corporation
2004 年 12 月
xor
xor
ビット単位の排他的論理和
操作
rC ← rA ^ rB
アセンブラ構文
xor rC, rA, rB
例
xor r6, r7, r8
説明
rA と rB のビット単位での排他的論理和 (XOR) を計算し、その結果を rC に格納します。
命令タイプ
R
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
C = オペランド rC のレジスタ・インデックス
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
C
18
17
16
15
14
13
0x1e
12
11
10
9
8
0
7
6
5
4
3
2
1
0
0x3a
20–99
Nios II プロセッサ・リファレンス・ハンドブック
xorhi
xorhi
上位ハーフワードへのビット単位の即値の排他的論理和
操作
rB ← rA ^ (IMM16 : 0x0000)
アセンブラ構文
xorhi rB, rA, IMM16
例
xorhi r6, r7, 100
説明
rA と (IMM16 : 0x0000) のビット単位の排他的論理和 (XOR) を計算し、その結果を
rB に格納します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号なし即値
31
30
29
A
28
27
26
25
24
23
22
21
20
19
18
17
B
20–100
Nios II プロセッサ・リファレンス・ハンドブック
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x3c
Altera Corporation
2004 年 12 月
xori
xori
即値のビット単位の排他的論理和
操作
rB ← rA ^ (0x0000 : IMM16)
アセンブラ構文
xori rB, rA, IMM16
例
xori r6, r7, 100
説明
rA と (0x0000 : IMM16) に対するビット単位の排他的論理和を計算し、その結果を rB
に格納します。
命令タイプ
I
命令フィールド
A = オペランド rA のレジスタ・インデックス
B = オペランド rB のレジスタ・インデックス
IMM16 = 16 ビット符号なし即値
31
30
29
28
27
26
A
Altera Corporation
2004 年 12 月
25
24
B
23
22
21
20
19
18
17
16
15
14
13
IMM16
12
11
10
9
8
7
6
5
4
3
2
1
0
0x1c
20–101
Nios II プロセッサ・リファレンス・ハンドブック
xori
20–102
Nios II プロセッサ・リファレンス・ハンドブック
Altera Corporation
2004 年 12 月
索引
A
ABI 19–1
エンディアン・データ 19–3
データ型 19–1
引数 19–8
メモリ・アライメント 19–1
戻り値 19–8
レジスタの使用法 19–2
add 3–19, 20–9
addi 3–19, 20–10
alt_avalon_spi_command、Avalon インタ
フェース付き SPI コア 11–10, 11–11
alt_avalon_sysid_test、Avalon インタフェース
付きシステム ID コア 14–3
altera_avalon_mutex_first_lock() 16–7
altera_avalon_mutex_is_mine() 16–6
altera_avalon_mutex_lock() 16–8
altera_avalon_mutex_open() 16–9
altera_avalon_mutex_trylock() 16–10
altera_avalon_mutex_unlock() 16–11
ALU 2–3, 4–7, 17–2
Nios II/e 17–18
Nios II/f 17–4
Nios II/s 17–12
カスタム命令 2–4
サポートされる演算 2–3
未実装命令 2–4
and 3–19, 20–11
andhi 3–19, 20–12
andi 3–19, 20–13
ANSI C ライブラリ・サポート
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–4
API
Avalon インタフェース付き Mutex
コア 16–5
altera_avalon_mutex_first_lock() 16–7
altera_avalon_mutex_is_mine() 16–6
altera_avalon_mutex_lock() 16–8
altera_avalon_mutex_open() 16–9
Altera Corporation
altera_avalon_mutex_trylock() 16–10
altera_avalon_mutex_unlock() 16–11
Avalon インタフェース
Avalon インタフェース付き PIO コア 7–4
Avalon インタフェース付き SDRAM
コントローラ 5–2
Avalon インタフェース付き SPI コア 11–7
Avalon インタフェース付き DMA
コントローラ 6–1
SOPC Builder でのインスタンス化 6–4
アドレスのインクリメント 6–4
概要 6–1
機能の説明 6–1
ソフトウェア・ファイル 6–8
ソフトウェア・プログラミング・
モデル 6–6
ブロック図 6–2
マスタ・リード・ポートとマスタ・ライト・
ポート 6–3
Avalon インタフェース付き EPCS デバイス・
コントローラ・コア 12–1
SOPC Builder でのインスタンス化 12–4
概要 12–1
機能の説明 12–2
ソフトウェア・ファイル 12–5
ソフトウェア・プログラミング・
モデル 12–5
デバイスとツールのサポート 12–4
Avalon インタフェース付き JTAG UART
コア 9–1, 9–5
SOPC Builder でのインスタンス化 9–5
概要 9–1
機能の説明 9–1
ソフトウェア・ファイル 9–12
ソフトウェア・プログラミング・
モデル 9–8
デバイスとツールのサポート 9–5
ハードウェア・シミュレーション 9–8
ブロック図 9–2
ホスト PC を介したアクセス 9–13
例 9–4
索引 –1
Nios II プロセッサ・リファレンス・ハンドブック
Avalon インタフェース付き Mutex コア 16–1
MutexAPI 16–5
SOPC Builder でのインスタンス化 16–2
概要 16–1
機能の説明 16–1
ソフトウェア・プログラミング・
モデル 16–3
デバイスとツールのサポート 16–2
ハードウェア Mutex 関数 16–3
Avalon インタフェース付き PIO コア 7–1
SOPC Builder でのインスタンス化 7–5
概要 7–1
機能の説明 7–1
ソフトウェア・ファイル 7–7
ソフトウェア・プログラミング・
モデル 7–6
デバイスのサポートとツール 7–6
例 7–2
Avalon インタフェース付き SDRAM
コントローラ 5–1
Avalon インタフェース 5–2
SOPC Builder でのインスタンス化 5–6
概要 5–1
機能の説明 5–1
性能 5–4
ソフトウェア・プログラミング・
モデル 5–13
デバイスおよびツールのサポート 5–6
ハードウェア・シミュレーション 5–9
ブロック図 5–2
例 5–11
Avalon インタフェース付き SPI コア 11–1
SOPC Builder でのインスタンス化 11–7
概要 11–1
機能の説明 11–1
コンフィギュレーションの例 11–3
ソフトウェア・ファイル 11–11
ソフトウェア・プログラミング・
モデル 11–10
デバイスおよびツールのサポート 11–10
ブロック図 11–2
Avalon インタフェース付き UART コア 10–1
SOPC Builder でのインスタンス化 10–5
概要 10–1
機能の説明 10–2
ソフトウェア・ファイル 10–14
索引 –2
ソフトウェア・プログラミング・
モデル 10–10
デバイスとツールのサポート 10–5
ハードウェア・シミュレーション 10–10
ブロック図 10–2
Avalon インタフェース付きキャラクタ LCD
コントローラ 15–1, 15–2
SOPC Builder でのインスタンス化 15–2
概要 15–1
機能の説明 15–1
デバイスおよびツールのサポート 15–2
ブロック図 15–2
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–1
SOPC Builder でのインスタンス化 13–3
概要 13–1
機能の説明 13–2
ソフトウェア・プログラミング・
モデル 13–4
デバイスとツールのサポート 13–2
Avalon インタフェース付きシステム ID
コア 14–1
SOPC Builder でのインスタンス化 14–2
概要 14–1
機能の説明 14–1
ソフトウェア・ファイル 14–4
ソフトウェア・プログラミング・
モデル 14–2
デバイスおよびツールのサポート 14–2
Avalon インタフェース付きタイマ・コア 8–1
SOPC Builder でのインスタンス化 8–3
ウォッチドッグ・タイマ 8–5
概要 8–1
機能の説明 8–1
ソフトウェア・ファイル 8–7
ソフトウェア・プログラミング・
モデル 8–6
デバイスとツールのサポート 8–3
ブロック図 8–1
Avalon スレーブ・インタフェース
Avalon インタフェース付き JTAG UART
コア 9–2
Avalon インタフェース付き UART
コア 10–2
Avalon インタフェース付きタイマ・
コア 8–3
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
Avalon レジスタ
Avalon インタフェース付き JTAG UART
コア 9–2
Avalon インタフェース付き UART
コア 10–2
B
Basic Settings、Avalon インタフェース付き
PIO コア 7–5
beq 3–22, 20–14
bge 3–22, 20–15
bgeu 3–22, 20–16
bgt 3–22, 20–17
bgtu 3–22, 20–18
ble 3–22, 20–19
bleu 3–22, 20–20
blt 3–22, 20–21
bltu 3–22, 20–22
bne 3–22, 20–23
br 3–22, 20–24
break 3–23, 20–25
bret 3–23, 20–26
bstatus(ctl2) 3–4
C
call 3–22, 20–27
callr 3–22, 20–28
cmpeq 3–20, 20–29
cmpeqi 3–21, 20–30
cmpge 3–20, 20–31
cmpgei 3–21, 20–32
cmpgeu 3–20, 20–33
cmpgeui 3–21, 20–34
cmpgt 3–20, 20–35
cmpgti 3–21, 20–36
cmpgtu 3–20, 20–37
cmpgtui 3–21, 20–38
cmple 3–20, 20–39
cmplei 3–21, 20–40
cmpleu 3–20, 20–41
cmpleui 3–21, 20–42
cmplt 3–20, 20–43
cmplti 3–21, 20–44
cmpltu 3–21, 20–45
Altera Corporation
cmpltui 3–21, 20–46
cmpne 3–20, 20–47
cmpnei 3–21, 20–48
Configuration タブ、Avalon インタフェース
付き JTAG UART コア 9–5
control
Avalon インタフェース付き JTAG UART
コア 9–14
Avalon インタフェース付き SPI コア 11–14
Avalon インタフェース付き UART
コア 10–21
control レジスタ・ビット、Avalon インタ
フェース付き DMA コントローラ 6–11
cpuid(ctl5) 3–5
custom 20–49
Custom Instructions タブ 4–7
D
direction、Avalon インタフェース付き PIO
コア 7–8
div 3–19, 20–50
divisor、Avalon インタフェース付き UART
コア 10–22
divu 3–19, 20–51
DMA トランザクション、Avalon インタフェー
ス付き DMA コントローラ 6–3
DMA パラメータ、Avalon インタフェース付き
DMA コントローラ 6–5
DMA レングス・レジスタ、Avalon インタ
フェース付き DMA コントローラ 6–5
E
edgecapture、Avalon インタフェース付き PIO
コア 7–9
endofpacket、Avalon インタフェース付き
UART コア 10–22
eret 3–23, 20–52
estatus(ctl1) 3–4
F
flushd 3–23, 20–53
flushi 3–23, 20–54
flushp 3–23, 20–55
索引 –3
Nios II プロセッサ・リファレンス・ハンドブック
H
HAL ライブラリ・サポート
Avalon インタフェース付き DMA
コントローラ 6–6
Avalon インタフェース付き EPCS
デバイス・コントローラ・コア 12–5
Avalon インタフェース付き JTAG UART
コア 9–9
Avalon インタフェース付き UART
コア 10–10
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–4
Avalon インタフェース付きタイマ・
コア 8–6
Harvard アーキテクチャ 2–6
I
I/O 2–5
ienable(ctl3) 3–4
initd 3–23, 20–56
initi 3–23, 20–57
Input Options、Avalon インタフェース付き
PIO コア 7–5
interruptmask、Avalon インタフェース付き
PIO コア 7–8
ioctl
Avalon インタフェース付き DMA
コントローラ 6–7
Avalon インタフェース付き JTAG UART
コア 9–12
Avalon インタフェース付き UART
コア 10–13
ipending(ctl4) 3–4
IRQ の生成、Avalon インタフェース付き PIO
コア 7–3
I タイプ 20–1
J
jmp 3–22, 20–58
JTAG Debug Module タブ 4–4
JTAG インタフェース、インタフェース付き
JTAG UART コア 9–3
JTAG ターゲット接続 4–4
JTAG デバッグ・モジュール 2–10, 17–2
索引 –4
Nios II/e 17–19
Nios II/f 17–11
Nios II/s 17–17
ハードウェア・トリガ
アーム付きトリガ 2–13
値の範囲 2–13
JTAG デバッグ・モジュール・コンフィギュ
レーション・オプション 4–6
J タイプ 20–3
L
ldb 3–18
ldb / ldbio 20–59
ldbio 3–18
ldbu 3–18
ldbu / ldbuio 20–60
ldbuio 3–18
ldh 3–18
ldh / ldhio 20–61
ldhio 3–18
ldhu 3–18
ldhu / ldhuio 20–62
ldhuio 3–18
ldw 3–18
ldw / ldwio 20–63
ldwio 3–18
length、Avalon インタフェース付き DMA
コントローラ 6–10
M
Memory Profile タブ、Avalon インタフェース
付き SDRAM コントローラ 5–7
Memory Profile タブでの設定、
Avalon インタフェース付き
SDRAM コントローラ 5–7
ModelSim 設定 9–7
mov 3–20, 20–64
movhi 3–20, 20–65
movi 3–20, 20–66
movia 3–20, 20–67
movui 3–20, 20–68
mul 3–19, 20–69
muli 3–19, 20–70
mulxss 3–19, 20–71
mulxsu 3–19, 20–72
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
mulxuu 3–19, 20–73
N
nextpc 20–74
Nios II
ALU 2–3
I/O 構成 2–5
SOPC Builder での実装 4–1
アドレス・マップ 1–4
カスタマイズ 1–3
カスタム・ペリフェラル 1–5
カスタム命令 1–5
概念 1–4
基礎知識 1–1
基本的概要 1–xiii
コア実装の詳細 17–1
コア・ブロック図 2–1
コンフィギュレーション可能な
プロセッサ 1–4
システム生成 1–6
使用開始 1–2
性能 1–1, 17–2
定義 1–1
はじめに 1–1
標準ペリフェラル 1–5
プロセッサ・アーキテクチャ 2–1
プロセッサの実装 2–2
ペリフェラル 1–4
命令セット 20–1
メモリ構成 2–5
リファレンス・デザイン例 1–2
領域 17–2
例外コントローラと割り込み
コントローラ 2–4
レジスタ・ファイル 2–3
Nios II Core タブ 4–2
Nios II/e 4–2, 17–2, 17–17
ALU 17–2, 17–18
JTAG デバッグ・モジュール 17–19
概要 17–17
サポートされていない機能 17–19
命令実行 17–18
命令の性能 17–18
メモリ・アクセス 17–18
例外処理 17–19
Altera Corporation
Nios II/f 4–2, 17–2, 17–3
ALU 17–2, 17–4
JTAG デバッグ・モジュール 17–11
概要 17–4
サポートされていない機能 17–11
実行パイプライン 17–8
乗算の設定 4–3
除算の設定 4–3
命令の性能 17–9
メモリ・アクセス 17–6
例外処理 17–11
Nios II/s 4–2, 17–2, 17–11
ALU 17–2, 17–12
JTAG デバッグ・モジュール 17–17
概要 17–12
サポートされていない機能 17–17
実行パイプライン 17–14
乗算の設定 4–3
除算の設定 4–3
命令の性能 17–15
メモリ・アクセス 17–13
例外処理 17–16
nios2-terminal 9–13
nop 3–24, 20–75
nor 3–19, 20–76
O
OPX エンコーディング 20–5
OP エンコーディング 20–4
or 3–19, 20–77
orhi 3–19, 20–78
ori 3–19, 20–79
P
periodh、Avalon インタフェース付きタイマ・
コア 8–10
periodl、Avalon インタフェース付きタイマ・
コア 8–10
R
rdctl 3–23, 20–80
ret 3–22, 20–81
rol 20–82
roli 20–83
索引 –5
Nios II プロセッサ・リファレンス・ハンドブック
ror 20–84
RS-232 インタフェース、インタフェース付き
UART コア 10–3
rxdata
Avalon インタフェース付き SPI コア 11–12
Avalon インタフェース付き UART
コア 10–16
R タイプ 20–2
S
SDRAM コントローラ・シミュレーション・
モデル、Avalon インタフェース付き
SDRAM コントローラ 5–9
SDRAM メモリ・モデル、
Avalon インタフェース付き
SDRAM コントローラ 5–10
slaveselect、Avalon インタフェース付き SPI
コア 11–15
sll 20–85
slli 20–86
snaph、Avalon インタフェース付きタイマ・
コア 8–10
snaplAvalon インタフェース付きタイマ・
コア 8–10
SOPC Builder 9–5
Avalon インタフェース付き DMA
コントローラ 6–4
Avalon インタフェース付き EPCS
デバイス・コントローラ・コア 12–4
Avalon インタフェース付き Mutex
コア 16–2
Avalon インタフェース付き PIO コア 7–5
Avalon インタフェース付き SDRAM
コントローラ 5–6
Avalon インタフェース付き SPI コア 11–7
Avalon インタフェース付き UART
コア 10–5
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–3
Avalon インタフェース付きシステム ID
コア 14–2
Avalon インタフェース付きタイマ・
コア 8–3
索引 –6
SOPC Builder でのインスタンス化
Avalon インタフェース付き DMA
コントローラ 6–4
Avalon インタフェース付き EPCS
デバイス・コントローラ・コア 12–4
Avalon インタフェース付き JTAG UART
コア 9–5
Avalon インタフェース付き PIO コア 7–5
Avalon インタフェース付き SDRAM
コントローラ 5–6
Avalon インタフェース付き SPI コア 11–7
Avalon インタフェース付き UART
コア 10–5
Avalon インタフェース付きキャラクタ LCD
コントローラ 15–2
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–3
Avalon インタフェース付きシステム ID
コア 14–2
Avalon インタフェース付きタイマ・
コア 8–3
SOPC Builder での実装 4–1
Custom Instructions タブ 4–7
JTAG Debug Module タブ 4–4
Nios II Core タブ 4–2
はじめに 4–1
sra 20–87
srai 20–88
srl 20–89
srli 20–90
status
Avalon インタフェース付き DMA
コントローラ 6–9
Avalon インタフェース付き SPI コア 11–13
Avalon インタフェース付き UART
コア 10–17
Avalon インタフェース付きタイマ・
コア 8–8
status(ctl0) 3–3
stb 3–18
stb / stbio 20–91
stbio 3–18
sth 3–18
sth / sthio 20–92
sthio 3–18
stw 3–18
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
stw / stwio 20–93
stwio 3–18
sub 3–19, 20–94
subi 3–19, 20–95
sync 3–23, 20–96
い
T
う
Timing タブ、Avalon インタフェース付き
SDRAM コントローラ 5–8
Timing タブでの設定、Avalon インタフェース
付き SDRAM コントローラ 5–8
trap 3–23, 20–97
txdata
Avalon インタフェース付き SPI コア 11–13
Avalon インタフェース付き UART
コア 10–17
移動命令 3–20
イナクティブ・ウィンドウ、Avalon インタ
フェース付き JTAG UART コア 9–7
ウォッチドッグ・タイマ
ウォッチポイント 2–10
8–5
え
エッジ・キャプチャ、Avalon インタフェース
付き PIO コア 7–3
エンディアン・データ 19–3
お
W
wrctl 3–23, 20–98
writeaddress、Avalon インタフェース付き
DMA コントローラ 6–10
X
xor 3–19, 20–99
xorhi 3–19, 20–100
xori 3–19, 20–101
あ
アーキテクチャ 2–1
Harvard 2–6
アセンブラ擬似命令 20–6
アセンブラ・マクロ 20–6, 20–7
アドレス指定モード
メモリとペリフェラル 3–15
アドレスのインクリメント、
Avalon インタフェース付き
SDRAM コントローラ 6–4
アドレス・マップ 1–4, 2–10
アプリケーション・コード 3–5
アプリケーション・バイナリ・インタフェース
(ABI を参照) 19–1
Altera Corporation
オープン・ロウ管理、Avalon インタフェース
付き SDRAM コントローラ 5–4
オフチップ SDRAM インタフェース、
Avalon インタフェース付き
SDRAM コントローラ 5–3
オフチップ・トレース 4–4
オペコード 20–4
オンチップ・トレース 4–4
か
開発環境 1–2
開発キット 1–2
カスタム・ペリフェラル 1–5
カスタム命令 1–5, 3–23
可能なトランザクション、Avalon インタ
フェース付き DMA コントローラ 6–6
関数のプロログ 19–6
概念 1–4
外部アドレス空間 17–2
概要
Avalon インタフェース付き DMA
コントローラ 6–1
Avalon インタフェース付き EPCS
デバイス・コントローラ・コア 12–1
Avalon インタフェース付き JTAG UART
コア 9–1
Avalon インタフェース付き PIO コア 7–1
索引 –7
Nios II プロセッサ・リファレンス・ハンドブック
Avalon インタフェース付き SDRAM
コントローラ 5–1
Avalon インタフェース付き SPI コア 11–1
Avalon インタフェース付き UART
コア 10–1
Avalon インタフェース付きキャラクタ LCD
コントローラ 15–1
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–1
Avalon インタフェース付きシステム ID
コア 14–1
Avalon インタフェース付きタイマ・
コア 8–1
Nios II/e 17–17
Nios II/f 17–4
Nios II/s 17–12
き
機能の説明
Avalon インタフェース付き DMA
コントローラ 6–1
Avalon インタフェース付き EPCS
デバイス・コントローラ・コア 12–2
Avalon インタフェース付き JTAG UART
コア 9–1
Avalon インタフェース付き PIO コア 7–1
Avalon インタフェース付き SDRAM
コントローラ 5–1
Avalon インタフェース付き SPI コア 11–1
Avalon インタフェース付き UART
コア 10–2
Avalon インタフェース付きキャラクタ LCD
コントローラ 15–1
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–2
Avalon インタフェース付きシステム ID
コア 14–1
Avalon インタフェース付きタイマ・
コア 8–1
キャッシュ設定 4–3
キャッシュ・メモリ 2–8, 3–16
索引 –8
こ
コアの設定 4–2
コア・ブロック図 2–1
高速および小型
Avalon インタフェース付き JTAG UART
コア 9–11
Avalon インタフェース付き UART
コア 10–12
高速コア 17–3
高度なオプション、Avalon インタフェース
付き DMA コントローラ 6–5
このハンドブックについて 1–xiii
コントロール
Avalon インタフェース付き DMA
コントローラ 6–11
Avalon インタフェース付きタイマ・
コア 8–9
コントロール・レジスタ 2–3, 3–2, 3–3
コントロール・レジスタ・ビット 3–3
コンフィギュレーション可能なソフト
コア 1–4
コンフィギュレーション設定、Avalon
インタフェース付き UART コア 10–5
コンポーネント、JTAG デバッグ・
モジュール 2–10
さ
サポートされていない機能
Nios II/e 17–19
Nios II/f 17–11
Nios II/s 17–17
算術命令 3–19
し
システム・クロック・ドライバ、Avalon
インタフェース付きタイマ・コア 8–6
システム・コード 3–5
システム生成 1–6
シフト命令と回転命令 3–21
シミュレーション設定
Avalon インタフェース付き JTAG UART
コア 9–7
Avalon インタフェース付き UART
コア 10–8
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
シミュレーション・モデル、SDRAM
コントローラ 5–9
出力信号オプション、Avalon インタフェース
付きタイマ・コア 8–5
詳細情報 1–xiii
使用開始 1–2
信号のタイミング、Avalon インタフェース
付き SDRAM コントローラ 5–3
実行トレース 2–13, 4–6
実行パイプライン
Nios II/f 17–8
Nios II/s 17–14
自動システム生成 1–6
条件付き分岐命令 3–22
乗算および除算の設定 4–3
乗算の設定 4–3
除算の設定 4–3
す
スタック 19–3
スタック、例 19–5
ステータス・レジスタ・ビット 3–3
ストップ・ビット、Avalon インタフェース
付き UART コア 10–6
ストリーミング・データ・コントロール、
Avalon インタフェース付き UART
コア 10–8
スレーブ設定、Avalon インタフェース付き SPI
コア 11–7
スレーブ・モード、Avalon インタフェース
付き SPI コア 11–5
せ
性能 1–1
Avalon インタフェース付き SDRAM
コントローラ 5–4
Nios II 17–2
そ
その他の Avalon トライステート・デバイスと
のピンの共有、Avalon インタフェース
付き SDRAM コントローラ 5–4
Altera Corporation
その他の例外 3–11
ソフトウェア・トラップ 3–11
ソフトウェアのダウンロード 4–4
ソフトウェア・ファイル
Avalon インタフェース付き DMA
コントローラ 6–8
Avalon インタフェース付き EPCS
デバイス・コントローラ・コア 12–5
Avalon インタフェース付き JTAG UART
コア 9–12
Avalon インタフェース付き Mutex
コア 16–3
Avalon インタフェース付き PIO コア 7–7,
7–9
Avalon インタフェース付き SPI コア 11–11
Avalon インタフェース付き UART
コア 10–14
Avalon インタフェース付きシステム ID
コア 14–4
Avalon インタフェース付きタイマ・
コア 8–7
ソフトウェア・ブレークポイント 4–4
ソフトウェア・プログラミング・モデル
Avalon インタフェース付き DMA
コントローラ 6–6
Avalon インタフェース付き EPCS
デバイス・コントローラ・コア 12–5
Avalon インタフェース付き JTAG UART
コア 9–8
Avalon インタフェース付き Mutex
コア 16–3
Avalon インタフェース付き PIO コア 7–6
Avalon インタフェース付き SDRAM
コントローラ 5–13
Avalon インタフェース付き SPI コア 11–10
Avalon インタフェース付き UART
コア 10–10
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–4
Avalon インタフェース付きシステム ID
コア 14–2
Avalon インタフェース付きタイマ・
コア 8–6
ソフトコア 1–4
索引 –9
Nios II プロセッサ・リファレンス・ハンドブック
た
ターゲット FPGA
Avalon インタフェース付き SDRAM
コントローラ 5–4, 5–5
タイマ、ウォッチドッグ 8–5
タイミング設定、Avalon インタフェース付き
SPI コア 11–9
タイムアウト、Avalon インタフェース付き
タイマ・コア 8–3
タイムスタンプ・ドライバ、Avalon
インタフェース付きタイマ・コア 8–6
て
データ
Avalon インタフェース付き JTAG UART
コア 9–14
Avalon インタフェース付き PIO コア 7–8
データ型 19–1
データ型の表現 19–1
データ転送命令 3–17
データ・トリガ 4–4
データ入力および出力、Avalon
インタフェース付き PIO 7–3
データ・バス 17–2
データ・ビット、Avalon インタフェース付き
UART コア 10–6
データ・ピンとアドレス・ピンの共有
Avalon インタフェース付き SDRAM
コントローラ 5–4
データとアドレス・ピンの共有、
Avalon インタフェース付き
SDRAM コントローラ 5–5
データ・マスタ・ポート 2–7
データ・レジスタ設定
Avalon インタフェース付き SPI コア 11–9
デザイン、カスタマイズ 1–3
デザインのカスタマイズ 1–3
デバイスおよびツールのサポート 15–2
Avalon インタフェース付き EPCS
デバイス・コントローラ・コア 12–4
Avalon インタフェース付き SDRAM
コントローラ 5–6
Avalon インタフェース付き SPI コア 11–10
Avalon インタフェース付き UART
コア 10–5
索引 –10
Avalon インタフェース付きシステム ID
コア 14–2
デバイスとツールのサポート
Avalon インタフェース付き JTAG UART
コア 9–5
Avalon インタフェース付き Mutex
コア 16–2
Avalon インタフェース付きコモン・
フラッシュ・インタフェース・
コントローラ 13–2
Avalon インタフェース付きタイマ・
コア 8–3
デバイスのサポートとツール
Avalon インタフェース付き PIO コア 7–6
デバッグ・コンフィギュレーション機能 4–4
デバッグ・モード 3–7
ブレークからの復帰 3–14
ブレーク処理 3–14
レジスタの使用 3–14
電気的特性、Avalon インタフェース付き
SDRAM コントローラ 5–3
と
トランザクション、可能な 6–6
トランスミッタ、Avalon インタフェース付き
SPI コア 11–4
トランスミッタ・ロジック、Avalon
インタフェース付き UART コア 10–3
トレース
実行およびデータ・トレース 2–14
フレーム 2–15
同期化、Avalon インタフェース付き SDRAM
コントローラ 5–3
動作モード 3–5
ドライバ・オプション
Avalon インタフェース付き JTAG UART
コア 9–11
Avalon インタフェース付き UART
コア 10–12
に
入力キャラクタ・ストリームのシミュレート、
Avalon インタフェース付き JTAG UART
コア 9–7
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
ね
ネスト式例外
3–13
は
ハードウェア Mutex 16–3
関数 16–3
ハードウェア・アクセス・ルーチン
Avalon インタフェース付き SPI コア 11–10
ハードウェア・オプション、Avalon
インタフェース付きタイマ・コア 8–4
ハードウェア・シミュレーション
Avalon インタフェース付き JTAG UART
コア 9–8
Avalon インタフェース付き SDRAM
コントローラ 5–9
Avalon インタフェース付き UART
コア 10–10
ハードウェア・デザイン
Avalon インタフェース付き SDRAM
コントローラ 5–4
ハードウェア・デザイン、
Avalon インタフェース付き
SDRAM コントローラ 5–5
ハードウェアの微調整 1–5
ハードウェア、微調整 1–5
ハードウェア・ブレークポイント 4–4
ハードウェア割り込み 3–9
はじめに 1–1
ハンドブック
詳細情報 1–xiii
対象読者 1–xiii
について 1–xiii
汎用メモリ・モデル、Avalon インタフェース
付き SDRAM コントローラ 5–10
汎用レジスタ 2–3, 3–1, 3–2
パイプライン 17–2
パリティ、Avalon インタフェース付き UART
コア 10–6
ひ
比較命令 3–20
引数 19–8
表記規則、命令セット 20–8
標準ペリフェラル 1–5
Altera Corporation
微調整 2–2
ビット 31 キャッシュ・バイパス
3–16
ふ
フレーム・ポインタの削除 19–4
フロー制御、Avalon インタフェース付き
UART コア 10–7
ブレーク・アドレス 2–11
ブレーク処理 3–14
ブレークポイント 2–10
ブロック図
Avalon インタフェース付き DMA
コントローラ 6–2
Avalon インタフェース付き JTAG UART
コア 9–2
Avalon インタフェース付き SDRAM
コントローラ 5–2
Avalon インタフェース付き SPI コア 11–2
Avalon インタフェース付き UART
コア 10–2
Avalon インタフェース付きキャラクタ LCD
コントローラ 15–2
タイミング 8–1
プログラミング・モデル 3–1
プログラミング・モデル、ソフトウェア
Avalon インタフェース付き SDRAM
コントローラ 5–13
プログラム制御命令 3–22
プロセッサ
アーキテクチャ 2–1
概念 1–4
コア 17–2
実装 2–2
リセット状態 3–16
へ
ペリフェラル
1–4
ほ
ホスト・ターゲット接続、Avalon インタ
フェース付き JTAG UART コア 9–3
ボー・レート、Avalon インタフェース付き
UART コア 10–4
索引 –11
Nios II プロセッサ・リファレンス・ハンドブック
ボー・レート・オプション
Avalon インタフェース付き UART
コア 10–5
ま
マクロ
アセンブラ 20–6
マクロ、アセンブラ 20–7
マスタ設定、Avalon インタフェース付き SPI
コア 11–7
マスタ・モード、Avalon インタフェース付き
SPI コア 11–5
マスタ・リード・ポートとマスタ・ライト・
ポート、Avalon インタフェース付き
DMA コントローラ 6–3
み
未実装命令
3–24
む
無動作命令
3–24
め
命令オペコード 20–4
命令およびデータ用の共有メモリ
命令実行、Nios II/e 17–18
命令セット 20–1
add 20–9
addi 20–10
and 20–11
andhi 20–12
andi 20–13
beq 20–14
bge 20–15
bgeu 20–16
bgt 20–17
bgtu 20–18
ble 20–19
bleu 20–20
blt 20–21
bltu 20–22
bne 20–23
br 20–24
索引 –12
2–8
break 20–25
bret 20–26
call 20–27
callr 20–28
cmpeq 20–29
cmpeqi 20–30
cmpge 20–31
cmpgei 20–32
cmpgeu 20–33
cmpgeui 20–34
cmpgt 20–35
cmpgti 20–36
cmpgtu 20–37
cmpgtui 20–38
cmple 20–39
cmplei 20–40
cmpleu 20–41
cmpleui 20–42
cmplt 20–43
cmplti 20–44
cmpltu 20–45
cmpltui 20–46
cmpne 20–47
cmpnei 20–48
custom 20–49
div 20–50
divu 20–51
eret 20–52
flushd 20–53
flushi 20–54
flushp 20–55
initd 20–56
initi 20–57
I タイプ 20–1
jmp 20–58
J タイプ 20–3
ldb / ldbio 20–59
ldbu / ldbuio 20–60
ldh / ldhio 20–61
ldhu / ldhuio 20–62
ldw / ldwio 20–63
mov 20–64
movhi 20–65
movi 20–66
movia 20–67
movui 20–68
mul 20–69
Altera Corporation
Nios II プロセッサ・リファレンス・ハンドブック
muli 20–70
mulxss 20–71
mulxsu 20–72
mulxuu 20–73
nextpc 20–74
nop 20–75
nor 20–76
or 20–77
orhi 20–78
ori 20–79
rdctl 20–80
ret 20–81
rol 20–82
roli 20–83
ror 20–84
R タイプ 20–2
sll 20–85
slli 20–86
sra 20–87
srai 20–88
srl 20–89
srli 20–90
stb / stbio 20–91
sth / sthio 20–92
stw / stwio 20–93
sub 20–94
subi 20–95
sync 20–96
trap 20–97
wrctl 20–98
xor 20–99
xorhi 20–100
xori 20–101
移動 3–20
カスタム命令 3–23
算術 3–19
シフトと回転 3–21
条件付き分岐 3–22
その他 3–23
データ転送 3–17
動作カテゴリ 3–17
はじめに 20–1
比較 3–20
表記規則 20–8
プログラム制御 3–22
未実装命令 3–24
Altera Corporation
無動作 3–24
命令ワード形式 20–1
リファレンス 20–1
論理 3–19
命令セット・シミュレータ 2–1
命令の性能
Nios II/e 17–18
Nios II/f 17–9
Nios II/s 17–15
命令バス 17–2
命令バスとデータバス 2–6
命令マスタ・ポート 2–7
命令ワード形式 20–1
メーカのメモリ・モデル、
Avalon インタフェース付き
SDRAM コントローラ 5–10
メモリ 2–5
キャッシュ 2–8
キャッシュ・オプション 2–9
キャッシュ・バイパス 2–9
効果的なキャッシュの使用法 2–9
メモリ・アクセス
Nios II/e 17–18
Nios II/f 17–6
Nios II/s 17–13
メモリ・アクセスとペリフェラル・
アクセス 2–6, 3–15
アドレス指定モード 3–15
キャッシュ・メモリ 3–16
メモリ・アライメント 19–1
メモリ・ブロックからの FIFO 6–5
メモリ・モデル
Avalon インタフェース付き SDRAM
コントローラ共通 5–10
Avalon インタフェース付き SDRAM
コントローラのメーカ 5–10
も
モード
デバッグ 3–7
変更 3–7
ユーザ 3–6
モードの変更 3–7
モデル、プログラミング
戻り値 19–8
3–1
索引 –13
Nios II プロセッサ・リファレンス・ハンドブック
ゆ
ユーザ・モード
3–6
ら
ライト FIFO、Avalon インタフェース付き
JTAG UART コア 9–3, 9–5
り
リード FIFO、Avalon インタフェース付き
JTAG UART コア 9–3, 9–6
リセット、プロセッサ 3–16
リソース使用量、Nios II 17–2
リファレンス・デザインの例 1–2
れ
例
Avalon インタフェース付き JTAG UART
コア 9–4
Avalon インタフェース付き PIO コア 7–2,
7–4
Avalon インタフェース付き SDRAM
コントローラ 5–11
Avalon インタフェース付き SPI コア 11–3
例外からの復帰 3–13
例外コントローラと割り込み
コントローラ 2–4
例外処理 3–8, 17–3
Nios II/e 17–19
Nios II/f 17–11
Nios II/s 17–16
その他 3–11
ソフトウェア・トラップ 3–11
ネスト式例外 3–13
ハードウェア割り込み 3–9
戻りアドレス 3–13
例外からの復帰 3–13
例外の原因 3–11
例外タイプ 3–9
例外ハンドラ 3–8
例外戻りアドレス 3–13
レガシー SDK ルーチン
Avalon インタフェース付き PIO コア 7–7
索引 –14
Avalon インタフェース付き SPI コア 11–12
Avalon インタフェース付き UART
コア 10–15
レシーバ、Avalon インタフェース付き SPI
コア 11–4
レシーバ・ロジック、Avalon インタフェース
付き UART コア 10–4
レジスタ
コントロール 2–3, 3–2, 3–3
コントロール・ビット 3–3
ステータス・ビット 3–3
汎用 2–3, 3–1, 3–2
レジスタ・オプション、Avalon
インタフェース付きタイマ・コア 8–4
レジスタからの FIFO、Avalon インタフェース
付き DMA コントローラ 6–5
レジスタの使用法 19–2
レジスタ・ファイル 2–3, 3–2
レジスタ・マップ
Avalon インタフェース付き DMA
コントローラ 6–8
Avalon インタフェース付き JTAG UART
コア 9–13
Avalon インタフェース付き Mutex
コア 16–1
Avalon インタフェース付き PIO コア 7–7
Avalon インタフェース付き SPI コア 11–12
Avalon インタフェース付きタイマ・
コア 8–7
レジスタ、呼び出し保存された 19–4
ろ
論理演算ユニット(ALU を参照) 2–3
論理命令 3–19
割り込み動作
Avalon インタフェース付き DMA
コントローラ 6–13
Avalon インタフェース付き JTAG UART
コア 9–15
Avalon インタフェース付き PIO コア 7–9
Avalon インタフェース付き UART
コア 10–23
Avalon インタフェース付きタイマ・
コア 8–10
Altera Corporation