• 検索結果がありません。

Niosエンベデッド・プロセッサ プログラマ・リファレンス・マニュアル ver.1.1 Mar01

N/A
N/A
Protected

Academic year: 2021

シェア "Niosエンベデッド・プロセッサ プログラマ・リファレンス・マニュアル ver.1.1 Mar01"

Copied!
116
0
0

読み込み中.... (全文を見る)

全文

(1)

Nios

エンベデッド・プロセッサ

エンベデッド・プロセッサ

エンベデッド・プロセッサ

エンベデッド・プロセッサ

プログラマ・リファレンス・マニュアル

プログラマ・リファレンス・マニュアル

プログラマ・リファレンス・マニュアル

プログラマ・リファレンス・マニュアル

Version 1.1

2001

年 3 月

(2)

Altera、ACEX、APEX、APEX 20K、FLEX、FLEX 10KE、MAX+PLUS II、MegaCore、MegaWizard、OpenCore、 Quartus、 お

よび各製品名は Altera Corporation の米国および該当各国における商標またはサービス・マークです。 この資料に記載されてい

る他のブランド名および製品名は、該当各社が保有する商標です。 Verilog は Cadence Design Systems, Incorporated の登録商

標です。 Java は Sun Microsystems Inc. の商標です。ModelSim は Model Technologies の商標です。 MATLAB は MathWorks の

登録商標です。 Microsoft は Microsoft Corporation の登録商標、Windows は同社の商標です。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.

(3)

®

このマニュアルについて

このマニュアルについて

このマニュアルについて

このマニュアルについて

本書では、Nios

TM

エンベデッド・プロセッサに関するさまざまな情報を

提供します。

Nios プロセッサまたは Nios エンベデッド・プロセッサという用語は、一

般的または抽象的な文脈でアルテラのソフト・コア・マイクロプロセッ

サを表しています。

Nios CPU という用語は、Nios プロセッサ・アーキテクチャを構成する

特定のロジック・ブロック ( 一部または全体 ) を表しています。

表 1 では、プログラマ・リファレンス・マニュアルの改訂履歴を示します。

表 1. 改訂履歴

改訂履歴

改訂履歴

改訂履歴

改訂

改訂

改訂

改訂

日付

日付

日付

日付

内容

内容

内容

内容

Version 1.1 2001年 3 月 Nios エンベデッド・プロセッサ・プログラマ・ リファレンス・マニュアル - 印刷版

(4)

アルテラへの

アルテラへの

アルテラへの

アルテラへの

コンタクト

コンタクト

コンタクト

コンタクト

方法

方法

方法

方法

アルテラ製品の最新情報については、アルテラの Web サイト

http://www.altera.co.jp を参照してください。

表 2. アルテラへのコンタクト方法

アルテラへのコンタクト方法

アルテラへのコンタクト方法

アルテラへのコンタクト方法

   情報提供元

        連絡先

日本アルテラ株式会社

03-3340-9480

株式会社アルティマ

045-939-6113 06-6307-7670

資料のご請求

株式会社 PALTEK

045-477-2009 06-6369-4070

World-Wide web

英 語 http://www.altera.com

日本語 http://www.altera.co.jp

価格・納期等について

株式会社アルティマ

045-939-6113 06-6307-7670

株式会社 PALTEK

045-477-2009 06-6369-4070

日本アルテラ株式会社

03-3340-9480

株式会社アルティマ

045-939-6113 06-6307-7670

技術的なご質問

052-202-1024 028-637-4488

株式会社 PALTEK

045-477-2009 06-6369-4070

E-mail (日本アルテラ) japan@altera.com

FTP Site (US)

ftp.altera.com

(5)

表記規則

表記規則

表記規則

表記規則

Nios

エンベデッド・プロセッサ・プログラマ・リファレンス・マニュアル

エンベデッド・プロセッサ・プログラマ・リファレンス・マニュアル

エンベデッド・プロセッサ・プログラマ・リファレンス・マニュアル

エンベデッド・プロセッサ・プログラマ・リファレンス・マニュアル

では、表 3 の表記規則が適用されています。

表 3. 表記規則

表記規則

表記規則

表記規則

特徴

特徴

特徴

特徴

意味

意味

意味

意味

文頭が大文字の太字 文頭が大文字の太字文頭が大文字の太字 文頭が大文字の太字 コマンド名、ダイアログ・ボックスのタイトル、チェックボックス・オプション、 およびダイアログ・ボックスのオプションは、文頭を大文字にした太字で表記され ています。 例 : [Save As] ダイアログ・ボックス 太字 太字太字 太字 外部タイミング・パラメータ、ディレクトリ名、プロジェクト名、ディスク・ドラ イブ名、ファイル名、ファイル名拡張子、およびソフトウェア・ユーティリティ名 は太字で表記されています。

例 : fMAX、、、、\maxplus2 ディレクトリ、d: ドライブ、chiptrip.gdf ファイル

太字斜体 太字斜体太字斜体

太字斜体 書籍の題名は文頭を大文字にした太字斜体で表記されています。 例 : 1999 Device Data Book

文頭が大文字の斜体 文書の題名は文頭を大文字にした斜体で表記されています。 例 : AN 75 (高速動作ボードの設計) 斜体 内部タイミング・パラメータと変数は斜体で表記されています。 例 : tPIA、n + 1 変数名は角括弧 (< >) で囲み、斜体で表記されています。 例 : <ファイル名>、<プロジェクト名>.pof ファイル 文頭大文字 キーボードのキーとメニュー名は文頭を大文字にして表記されています。 例 : Delete キー、[Option] メニュー 「小見出しタイトル」 文書内のセクション、Quartus II および MAX+PLUS II のヘルプ・トピックは引用符 で囲んでいます。 例 : “BitBlasterTM ダウンロード・ケーブルを使用した FLEX 10K または FLEX 8000 デバイスのコンフィギュレーション” Courier フォント 信号とポート名は小文字の Courier フォントで表記されています。 例 : data1, tdi, input。

アクティブ・ロウ信号は接尾辞 _n で表記されています。例 : reset_n

表示されたとおりに入力するものは Courier フォントで表記されています。 例 : c:\max2work\tutorial\chiptrip.gdf。

また、Report File などの実際のファイルのセクション、ファイルの部分的な参 照 (AHDL キーボード SUBDESIGN など )、およびロジック・ファンクション名 (TRI など ) は Courier フォントで表記されています。 1、2、3、および a、b、 c、... 作業手順にリストされている順番に作業の手順が重要なものについては、ステッ プに番号をつけました。 ■ 項目の順序が重要でないものについては、項目に青い四角をつけてリストしました。

v

チェックマークは、1 ステップしかない手順を表します。

1

要注意個所に指差しマークを表示しました。

r

Enter キーを押すところにリターン矢印を表示しました。

記載されている項目の詳細情報の参照個所を足跡のマークで表示しました。

(6)
(7)

目次

目次

目次

目次

表の一覧

表の一覧

表の一覧

表の一覧...xi

1.

概要

概要

概要

概要 ...1

はじめに ... 1

対象読者 ... 1

Nios CPU の概要 ... 1

命令セット... 2

レジスタの概要... 2

汎用レジスタ ... 2

K レジスタ... 5

プログラム・カウンタ... 5

コントロール・レジスタ ... 5

メモリ・アクセスの概要 ... 8

メモリ ( またはペリフェラル ) からの読み込み... 9

メモリ ( またはペリフェラル ) への書き込み ... 10

アドレス処理モード ... 12

5/16 ビットの即値 ... 12

全幅のレジスタ -- 間接値 ... 14

部分幅レジスタ -- 間接値 ... 14

全幅レジスタ -- オフセットによる間接値 ... 15

部分幅レジスタ -- オフセットによる間接値 ... 15

プログラムフロー・コントロール... 16

相対分岐命令 ... 16

絶対ジャンプ命令... 17

トラップ命令 ... 17

条件命令 ... 17

例外... 18

例外処理の概要 ... 18

例外ベクタ・テーブル... 18

外部ハードウェア・インタラプト・ソース ... 19

内部例外ソース ... 19

レジスタ・ウィンドウのアンダフロー ... 19

レジスタ・ウィンドウのオーバフロー ... 20

ソフトウェア例外 (TRAP 命令 )... 21

例外処理の手順 ... 21

レジスタ・ウィンドウの使用方法 ... 22

ステータスの維持 : ISTATUS レジスタ ... 23

リターン・アドレス ... 23

簡単な例外ハンドラと複雑な例外ハンドラ ... 23

(8)

複雑な例外ハンドラ ... 24

パイプラインの実装... 25

パイプラインの処理 ... 25

分岐遅延スロット ... 26

CWP 操作の命令 ... 26

2.

命令セット

命令セット ... 35

命令セット

命令セット

ABS... 36

ADD ... 37

ADDI ... 38

AND ... 39

ANDN... 40

ASR... 41

ASRI... 42

BGEN... 43

BR ... 44

BSR... 45

CALL ... 46

CMP ... 47

CMPI ... 48

EXT16D ... 49

EXT16S... 50

EXT8D ... 51

EXT8S... 52

FILL16... 53

FILL8... 54

JMP... 55

LD ... 56

LDP ... 57

LDS ... 58

LSL... 59

LSLI... 60

LSR ... 61

LSRI ... 62

MOV... 63

MOVHI ... 64

MOVI... 65

MSTEP... 66

MULL ... 67

NEG ... 68

NOT ... 69

OR... 70

PFX ... 71

RDCTL ... 72

RESTORE... 73

RLC... 74

RRC ... 75

(9)

SAVE ... 76

SEXT16... 77

SEXT8... 78

SKP0... 79

SKP1... 80

SKPRNZ ... 81

SKPRZ ... 82

SKPS ... 83

ST ... 84

ST16D... 85

ST16S ... 86

ST8D... 87

ST8S ... 88

STP ... 89

STS ... 90

STS16S... 91

STS8S... 92

SUB... 93

SUBI... 94

SWAP ... 95

TRAP ... 96

TRET... 97

WRCTL ... 98

XOR ... 99

3.

索引

索引 ... 101

索引

索引

(10)
(11)

表のリスト

表のリスト

表のリスト

表のリスト

表 4.

改訂履歴 ... iii

表 5.

アルテラへのコンタクト方法... iv

表 6.

規約 ... v

表 7.

Nios CPU アーキテクチャ ...1

表 8.

レジスタ・グループ ...3

表 9.

プログラマのモデル ...4

表 10.

条件コード・フラグ ...7

表 11.

一般的な 32 ビット Nios CPU のアドレス 0x0100 におけるプログラムとデータ・メモリ ...8

表 12.

アドレス 0x0100 における N ビット幅ペリフェラル (32 ビット Nios CPU)...9

表 13.

5/16 ビットの即値を使用した命令...13

表 14.

全幅レジスタを使用した命令 -- 間接的なアドレス処理 ... 14

表 15.

部分幅レジスタを使用した命令 -- 間接的なアドレス処理... 14

表 16.

全幅レジスタを使用した命令 -- オフセット・アドレス処理による間接値 ...15

表 17.

部分幅レジスタを使用した命令 -- オフセット・アドレス処理による間接値... 16

表 18.

BR 分岐遅延スロットの例 ... 26

表 19.

表記の詳細 ... 27

表 20.

32 ビットの主要な命令コードの一覧表... 30

表 21.

GNU コンパイラ / アセンブラ擬似命令 ... 33

(12)
(13)

概要

概要

概要

概要

概概概概要

要要要

1

はじめに

はじめに

はじめに

はじめに

Nios

TM

エンベデッド・プロセッサは、プログラマブル・ロジックと SOPC

(system-on-a-programmable chip) のインテグレーションに最適化された

ソフト・コア CPU です。

これはコンフィギュレーションが可能な汎用

RISC プロセッサであり、ユーザ・ロジックと結合してアルテラのプログ

ラマブル・ロジック・デバイス (PLD) にプログラミングすることができ

ます。

多様なアプリケーションを対象として、Nios CPU のコンフィギュ

レーションを実行できます。

オンチップ ROM エンベデッド・システム・

ブロック (ESB) から小さなプログラムを実行する 16 bit Nios CPU コア

は、効率的なシーケンスやコントローラとして機能し、ハードコードの

ステート・マシンの置き換えに使用することができます。外部 FLASH プ

ログラム・ストレージと大容量外部メイン・メモリを備えた 32 ビット

Nios CPU コアは、強力な 32 ビット・エンベデッド・プロセッサ・シス

テムになります。

対象読者

対象読者

対象読者

対象読者

このリファレンス・マニュアルは、Excalibur 開発キットを使用して Nios

エンベデッド・プロセッサ内蔵のシステム・デザイン・モジュールを開

発するソフトウェアおよびハードウェア・エンジニアを対象としていま

す。

またこのマニュアルは、対象読者が電子工学、マイクロプロセッサ、

アセンブラ言語に精通していることを前提としています。

Nios CPU で使

用される規約については、27 ページの表 16 を参照してください。

Nios CPU

概要

概要

概要

概要

Nios CPU は、パイプライン化したシングル・イシューの RISC プロセッ

サであり、ほとんどの命令を単一のクロック・サイクルで実行します。

Nios の命令セットは、コンパイルしたエンベデッド・アプリケーション

を対象にしています。

16 ビット版および 32 ビット版の Nios CPU のネ

イティブなワード・サイズは、それぞれ 16 ビットと 32 ビットとなって

います。すなわち 16 ビット Nios CPU のネイティブなワード・サイズは

ハーフ・ワード、32 ビット Nios CPU のサイズは 1 ワードとされていま

す。

通常、1 バイトは 8 ビットに換算できますが、Nios の場合、ハーフ・

ワードは 16 ビット、1 ワードは 32 ビットと表現します。

Nios ソフト・

コア・プロセッサの製品ファミリは、32 ビットと 16 ビットのアーキテ

クチャで構成されています。

表 4. Nios CPU アーキテクチャ

アーキテクチャ

アーキテクチャ

アーキテクチャ (1 / 2)

Nios CPU

の詳細

の詳細

の詳細

の詳細

32

ビット

ビット

ビット

ビット Nios

CPU

16

ビット

ビット Nios

ビット

ビット

CPU

データ・バスのサイズ ( ビット ) 32 16 ALU 幅 ( ビット ) 32 16

(14)

Cygnus 社の GNUPro コンパイラおよびデバッガは、業界標準のオープ

ン・ソース C/C++ コンパイラ・リンカーおよびデバッガ・ツールキット

ですが、

この製品は Nios CPU と一緒に提供されています。

GNUPro ツー

ルキットは、C/C++ コンパイラ、マクロアセンブラ、リンカー、デバッ

ガ、バイナリ・ユーティリティ、およびライブラリで構成されています。

命令セット

命令セット

命令セット

命令セット

Nios プロセッサの命令セットは、C および C++ からコンパイルしたプロ

グラムをサポートするように制定されています。

この命令セットには、

術計算やロジック処理など、標準的な命令セットの他に、ビット処理、

バイト抽出、データ移動、制御フロー変更などの命令セット、条件設定

が可能な小さな命令セットが含まれています。この小さな命令セットを

使用すると、短い条件分岐を省くことができます。

レジスタの

レジスタの

レジスタの

レジスタの

概要

概要

概要

概要

このセクションでは、Nios CPU 汎用レジスタとコントロール・レジスタ

の構成について説明します。

Nios CPU アーキテクチャは、大容量の汎用

レジスタ・ファイル、複数のマシン・コントロール・レジスタ、プログ

ラム・カウンタ、命令のプリフィックスに使用する K レジスタで構成さ

れています。

汎用レジスタ

汎用レジスタ

汎用レジスタ

汎用レジスタ

汎用レジスタは、32 ビット Nios CPU では 32 ビット幅、16 ビット Nios

CPU では 16 ビット幅になっています。

レジスタ・ファイルのサイズは

変更できますが、含めるレジスタの数は 128、256、512 のいずれかで

す。

ソフトウェアは、32 レジスタを表示するスライディング・ウィンド

ウでレジスタにアクセスしますが、このウィンドウは 16 レジスタごとに

スライディングできます。

このスライディング・ウィンドウで、レジス

タ・ファイルの内容をすべて参照できます。

このスライディング・ウィ

ンドウから、レジスタ・ファイルのサブセットにアクセスできます。

アドレス・バスのサイズ (ビット ) 32 17 命令サイズ ( ビット ) 16 16 ロジック・セル (一般的なタイプ ) 1700 1100 fmax (EP20K200E -1) 最大 50 MHz 最大 50 MHz

表 4. Nios CPU アーキテクチャ

アーキテクチャ

アーキテクチャ

アーキテクチャ (2 / 2)

Nios CPU

の詳細

の詳細

の詳細

の詳細

32

ビット

ビット

ビット

ビット Nios

CPU

16

ビット

ビット Nios

ビット

ビット

(15)

概概概概要

要要要

1

レジスタ・ウィンドウは、表 5 に示すように 4 つの均等なセクションに

分けられます。

下位の 8 レジスタ (%r0-%r7) はグローバルなレジスタで

あり、%g0-%g7 とも呼ばれます。

これらのグローバル・レジスタは、ウィ

ンドウの移動や配置によって変更されませんが、(%g0-%g7) としてアク

セスすることができます。

レジスタ・ファイルにある上位の 24 レジスタ

(%r8-%r31) は、カレント・ウィンドウからアクセスできます。

上位の 8 レジスタ (%i0-%i7) は、in レジスタと呼ばれ、次の 8 レジスタ

(%L0-%L7) は local レジスタ、残りの 8 レジスタ (%o0-%o7) は out レジ

スタと呼ばれます。

レジスタ・ウィンドウを 16 レジスタほど下に移動す

ると (SAVE 命令の場合と同じく )、out レジスタは新しいウィンドウ・ポ

ジションの in レジスタになります。

また最後のウィンドウ・ポジション

の local および in レジスタは、アクセスできなくなります。

詳細について

は、表 6 を参照してください。

表 5. レジスタ・グループ

レジスタ・グループ

レジスタ・グループ

レジスタ・グループ

In レジスタ %r24-%r31 または %i0-%i7 ローカル・レジスタ %r16-%r23 または %L0-%L7 Out レジスタ %r8-%r15 または %o0-%o7 Global レジスタ %r0-%r7 または %g0-%g7

(16)

.

表 6. プログラマのモデル

プログラマのモデル

プログラマのモデル

プログラマのモデル

31 16 15 0 I N %i7 %r31 SAVE 命令のリターン・アドレス %i6 %r30 %fp -- フレーム・ポインタ %i5 %r29 %i4 %r28 %i3 %r27 %i2 %r26 %i1 %r25 %i0 %r24 L O C A L %L7 %r23 %L6 %r22 %L5 %r21 %L4 %r20 %L3 %r19 STP/LDP のベース・ポインタ 3 ( または汎用 local) %L2 %r18 STP/LDP のベース・ポインタ 2 ( または汎用 local) %L1 %r17 STP/LDP のベース・ポインタ 1 ( または汎用 local) %L0 %r16 STP/LDP のベース・ポインタ 0 ( または汎用 local) O U T %o7 %r15 現在のリターン・アドレス %o6 %r14 %sp スタック・ポインタ %o5 %r13 %o4 %r12 %o3 %r11 %o2 %r10 %o1 %r9 %o0 %r8 G L O B A L %g7 %r7 %g6 %r6 %g5 %r5 %g4 %r4 %g3 %r3 %g2 %r2 %g1 %r1 %g0 %r0 10 9 8 7 6 5 4 3 2 1 0 K レジスタ 32 31 16 15 10 9 8 7 6 5 4 3 2 1 0 PC

%ctl9 CLR_IE このレジスタへのすべての書き込み (WRCTL) 動作で STATUS[15] (IE)=0 に設定されます。すべての読み

込み動作 (RCTL) の結果は未定義です。

%ctl8 SET_IE このレジスタへのすべての書き込み (WRCTL) 動作で STATUS[15] (IE)=1 に設定されます。すべての読み

込み動作 (RCTL) の結果は未定義です。 %ctl7 — —予約 — %ctl6 — —予約 — %ctl5 — —予約 — %ctl4 — —予約 — %ctl3 — —予約 —

%ctl2 WVALID HI_LIMIT LO_LIMIT

%ctl1 ISTATUS 保存されたステータス

(17)

概概概概要

要要要

1

K

レジスタ

レジスタ

レジスタ

レジスタ

K レジスタは 11 ビットのプリフィックスであり、PFX を除くすべての

命令で 0 に設定されます。

PFX 命令の場合、IMM11 命令フィールドから

直接 K が設定されます。

レジスタ K でゼロ以外の値が格納されるのは、

PFX に続く次の命令の時だけです。

PFX 命令は 1 サイクルの間の割込みを無効にするため、PFX に続く 2 つ

の命令は不可分な CPU 演算になります。

また PFX に続く命令のペアは

SKP タイプの条件命令で両方スキップされます。

K レジスタは、ソフトウェアによって直接的にアクセスされることはな

く、間接的に利用されています。

例えば、MOVI 命令は K の 11 ビット

すべてを転送先レジスタのビット 15..5 に移動します。

この K レジスタ

の読み込み処理は、前の命令が PFX の場合にのみゼロ以外の結果を出し

ます。

プログラム・カウンタ

プログラム・カウンタ

プログラム・カウンタ

プログラム・カウンタ

プログラム・カウンタ (PC) レジスタには、現在実行中の命令のバイト・

アドレスが格納されています。

すべての命令はハーフ・ワード・アライ

ンされるため、PC 値の最下位ビットは常に 0 になります。

PC を明示的に設定している場合を除いて、PC は命令のたびに 2 ずつ加

算されていきます (PC ← PC + 2)。

BR、BSR、CALL、JMP などの命令

は、PC を直接変更します。

PC は、32 ビット Nios CPU では 33 ビット

幅、16 ビット Nios CPU では 17 ビット幅です。

コントロール・レジスタ

コントロール・レジスタ

コントロール・レジスタ

コントロール・レジスタ

定義済みのコントロール・レジスタが 5 つありますが、これらは汎用レ

ジスタとは独立してアドレスが付けられます。

これらコントロール・レ

ジスタの、読み込みや書き込みを実行できるのは、RDCTL と WRCTL の

命令だけです (%ctl0 と %g0 は関係がありません )。

STATUS (%ctl0)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IE IPRI CWP N V Z C

(18)

インタラプト・イネーブル

インタラプト・イネーブル

インタラプト・イネーブル

インタラプト・イネーブル (IE)

IE はインタラプト・イネーブル・ビットです。

IE=1 の場合、外部インタ

ラプトと内部例外がイネーブル ( 有効 ) になります。

IE=0 の場合、外部

インタラプトと例外がディセーブル ( 無効 ) になります。

ソフトウェアの

TRAP 命令は、IE=0 の場合でも普通に実行されます。ただし、コント

ロール・レジスタの SET_IE (%ctl9) と CLR_IE (%ctl8) に書き込みを実

行すれば、残りの STATUS レジスタを変えずに、IE を直接的に設定でき

ます。

CPU をリセットすると、IE が 0 に設定されます ( インタラプト・

ディセーブル )。

インタラプト・プライオリティ

インタラプト・プライオリティ

インタラプト・プライオリティ

インタラプト・プライオリティ (IPRI)

IPRI には、実行中のインタラプト・プライオリティが格納されています。

例外を処理すると、IPRI 値が例外番号に設定されます。

詳細については、

18

ページの「例外」を参照してください。

外部ハードウェアのインタラ

プトの場合、IPRI 値は 6 ビット・ハードウェア・インタラプト番号から

直接設定されます。

TRAP 命令の場合、IPRI フィールドは 命令の IMM6

フィールドから直接設定されます。

内部例外では、IPRI フィールドは事

前に定義した 6 ビット例外番号から設定されます。

内部番号が IPRI より大きいか等しい場合、または IE=0 の場合、そのハー

ドウェア・インタラプトは処理されません。TRAP 命令は無条件に処理

されます。

CPU をリセットすると、IPRI は 63 に設定されます ( 最下位

のプライオリティ)。

IPRI は特定の番号を超えたインタラプトをディセー

ブルにします。

例えば、IPRI が 3 の場合は、インタラプトの 0、1、2 が

処理されますが、その他はすべて ( インタラプト 3 ∼ 63) ディセーブル

になります。

カレント・ウィンドウ・ポインタ

カレント・ウィンドウ・ポインタ

カレント・ウィンドウ・ポインタ

カレント・ウィンドウ・ポインタ (CWP)

汎用レジスタ・ファイルにおいて、CWP はスライディング・レジスタ・

ウィンドウの起点を表します。

CWP を増やすと、レジスタ・ウィンドウ

は 16 レジスタ上に移動します。

CWP を減らすと、レジスタ・ウィンド

ウ は 16 レジ スタ 下に 移動 しま す。

CWP は、SAVE 命 令で 減り、

RESTORE 命令で増えます。

WRCTL によって CWP に値を直接書き込むのは、レジスタ・ウィンドウ

の管理機能など、特殊なシステム・ソフトウェアに限定すべきです。

フトウェアは、通常 SAVE および RESTORE 命令で CWP を変更してい

ます。

CPU をリセットすると、CWP は最大有効値の HI_LIMIT に設定さ

れます。

すなわち、レジスタ・ファイルのサイズが 256 の場合、16 のレ

ジスタ・ウィンドウが存在することになります。

リセット後、WVALID レ

ジスタ (%ct12) は 0x01C1、すなわち LO_LIMIT = 1 および HI_LIMIT =

14 に設定されます。詳細については、7 ページの「WVALID (%ctl2)」を

参照してください。

(19)

概概概概要

要要要

1

条件コード・フラグ

条件コード・フラグ

条件コード・フラグ

条件コード・フラグ

条件コード・フラグを変更する命令がいくつかあります。

これらのフラ

グは、表 7 に示すようにステータス・レジスタにある最下位の 4 ビット

になります。

ISTATUS (%ctl1)

ISTATUS は、STATUS レジスタのコピーを保持します。

例外を処理する

と、STATUS レジスタの値が ISTATUS レジスタにコピーされます。

のコピー値があるため、インタラプトされたプログラムに制御が戻る前

に、STATUS レジスタを例外以前の値に復旧することができます。詳細

については 18 ページの「例外」を参照してください。TRET

(return-from-trap ) 命令は、ISTATUS レジスタを自動的に STATUS レジスタにコピー

します。

例外を処理すると、インタラプトがディセーブル (IE=0) になり

ます。

例外ハンドラで ISTATUS レジスタの値を保持しないと、インタラ

プトを再びイネーブルにすることができません。

CPU をリセットする

と、ISTATUS が 0 に設定されます。

WVALID (%ctl2)

WVALID には HI_LIMIT と LOW_LIMIT の 2 つの値が格納されています。

SAVE 命令が CWP を LOW_LIMIT から LOW_LIMIT - 1 に減らすと、レ

ジスタ・ウィンドウ・アンダフロー ( 例外 #1) が生成されます。

RESTORE

命令が CWP を HI_LIMIT から HI_LIMIT + 1 に増やすと、レジスタ・ウィ

ンドウ・オーバフロー ( 例外 #2) が生成されます。

WVALID は設定が可能

であり、読み込み専用または読み込み / 書き込みに設定できます。

CPU

をリセットすると、LO_LIMIT が 1 に設定され、HI_LIMIT が最上位の有

効ウィンドウ・ポインタ ( レジスタ・ファイル・サイズ / 16) - 2) に設定

表 7. 条件コード・フラグ

条件コード・フラグ

条件コード・フラグ

条件コード・フラグ

N 結果の符号、または最上位ビット V 算術演算のオーバフロー -- 無制限の精度で計算した場合の符 号と、32 ビットの処理結果の 31 ビット目が異なっている場 合、これが設定されます。 Z 処理結果は 0 です。 C 加算時の繰り上げ、減算時の繰り下げ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 HI_LIMIT LO_LIMIT

(20)

CLR_IE(%ctl8)

CLR_IE レジスタに対して WRCTL を実行すると、STATUS レジスタの

IE ビットがクリアされます (IE ← 0)。値は無視されます。

CLR_IE で

RDCTL を実行すると、予期せぬ処理結果となります。

SET_IE (%ctl9)

SET_IE レジスタに対して WRCTL を実行すると、STATUS レジスタの

IE ビットがセットされます (IE ← 1)。値は無視されます。

SET_IE で

RDCTL を実行すると、予期せぬ処理結果となります。

メモリ・アク

メモリ・アク

メモリ・アク

メモリ・アク

セスの概要

セスの概要

セスの概要

セスの概要

Nios プロセッサはリトル・エンディアン方式です。

データ・メモリは連

続したネイティブ・ワードで構成する必要があります。

物理メモリ・デ

バイスがネイティブ・ワードのサイズよりも狭い場合、データ・バスは

ダイナミック・バス・サイジングを実行して、Nios CPU の全幅データを

シミュレートします。

ペリフェラルはレジスタをネイティブ・ワードの

幅で表しますが、レジスタがネイティブ・ワードよりも狭くなるような

場合は、最上位のビットに 0 を埋め込みます。表 8 と表 9 は、32 ビット

Nios CPU のネイティブ・ワードの幅を示しています。

表 8. 一般的な

一般的な

一般的な

一般的な 32 ビット

ビット

ビット Nios CPU のアドレス

ビット

のアドレス

のアドレス

のアドレス 0x0100 における

における

における

における

プログラムとデータ・メモリ

プログラムとデータ・メモリ

プログラムとデータ・メモリ

プログラムとデータ・メモリ

アドレス

アドレス

アドレス

アドレス

内容

内容

内容

内容

31 24 23 16 15 8 7 0 0x0100 バイト 3 バイト 2 バイト 1 バイト 0 0x0104 バイト 7 バイト 6 バイト 5 バイト 4 0x0108 バイト 11 バイト 10 バイト 9 バイト 8 0x010c バイト 15 バイト 14 バイト 13 バイト 12

表 9. アドレス

アドレス

アドレス

アドレス 0x0100 における

における

における N ビット幅ペリフェラル

における

ビット幅ペリフェラル

ビット幅ペリフェラル

ビット幅ペリフェラル

(32

ビット

ビット Nios CPU)

ビット

ビット

アドレス

アドレス

アドレス

アドレス

内容

内容

内容

内容

31 N N-1 0 0x0100 (ゼロの埋め込み ) レジスタ 0 0x0104 (ゼロの埋め込み ) レジスタ 1 0x0108 (ゼロの埋め込み ) レジスタ 2 0x010c (ゼロの埋め込み ) レジスタ 3

(21)

概概概概要

要要要

1

メモリ (

またはペリフェラル

) からの読み込み

Nios CPU はアラインされたメモリ・アクセスしか実行できません。

32

ビットの読み込み処理は、4 の倍数のバイト・アドレスから開始するフ

ル・ワードのみを読み込みます。16 ビット読み込み処理は、2 の倍数の

バイト・アドレスから開始するハーフ・ワードのみを読み込みます。メ

モリから読み込みを行う命令は、常にロー・ビット (16 ビット Nios CPU)

またはアドレスの下位 2 ビット (32 ビット Nios CPU) を 0 として処理し

ます。ワードから特定のバイトやハーフ・ワードを抽出する場合は、命

令で実行することになります。

メモリからデータを読み込む最も簡単な命令は、LD 命令です。

この命令

の典型的な例は、

LD%g3, [%o4]

です。

最初のレジスタ・オペランド %g3

は、データがロードされる転送先レジスタです。

2 番目のレジスタ・オペ

ランドは、読み込むアドレスを格納したレジスタを指定します。

このア

ドレスは、最も近いハーフ・ワード (16 ビット Nios CPU) またはワード

(32 ビット Nios CPU) にアラインされます。すなわち最下位のビット (16

ビット Nios CPU) または 2 ビット (32 ビット Nios CPU) は 0 として処

理されます。

しかし、稀にではありますが、ソフトウェアでネイティブ・データ・サ

イズよりも小さなデータを読み込まなければならないことがあります。

Nios CPU は、ネイティブ・ワードから個々のバイト (16 ビットおよび

32 ビット Nios CPU) やハーフ・ワード (32 ビット Nios CPU) を抽出す

る命令を持っています。

EXT8d 命令は 1 バイトの抽出に使用され、

EXT16d 命令は 1 ワードの抽出に使用されます。

EXT8d 命令の典型的な

例は、EXT8d %g3,%o4 です。

EXT8d 命令は、2 番目のレジスタ・オペ

ランドの最下位ビット (16 ビット Nios CPU) または 2 ビット (32 ビット

Nios CPU) を使用して、最初のレジスタ演算子から 1 バイトを抽出し、

最初のレジスタ・オペランドの内容全体をそのバイトで置き換えます。

(22)

コード例 1 のアセンブラ言語は、バイトのアドレスがネイティブ・ワー

ド・アラインされていない場合にメモリから 1 バイトを読み込む方法

を示しています。

コード例

コード例

コード例

コード例 1: メモリからの

メモリからの

メモリからの 1 バイトの読み込み

メモリからの

バイトの読み込み

バイトの読み込み

バイトの読み込み

メモリ (

またはペリフェラル

) への書き込み

Nios CPU は、バイト、ハーフ・ワード、ワード ( ワードの書き込みが可

能なのは 32 ビット Nios CPU のみ ) の幅でアラインされた、メモリへの

書き込みを実行できます。

1 つの命令で、4 の倍数のアドレスに 1 ワード

(32 ビット Nios CPU) を書き込むことが可能です。

ハーフ・ワードの場

合は、1 つの命令 (16 ビット Nios CPU) または 2 つの命令 (32 ビット

Nios CPU) で 2 の倍数のアドレスに書き込まれます。

バイトは 2 つの命

令で、アドレスに書き込むことができます。

32 ビット Nios CPU では、レジスタの最下位バイトは 4 の倍数のアドレ

スにのみ書き込むことができ、レジスタの上位のバイトは 4 の倍数 + 1

のアドレスにのみ書き込めることになります。上位に行くにつれて、こ

のように加算されていきます。 同様に16 ビット Nios CPU では、レジ

スタの下位バイトは偶数アドレスに書き込まれ、レジスタの上位バイト

は奇数アドレスに書き込まれます。

また 32 ビット Nios CPU は、レジスタの下位ハーフ・ワードを 4 の倍数

のアドレスに書き込み、レジスタの上位ハーフ・ワードを 4 の倍数 + 2

のアドレスに書き込みます。

ST 命令は、ネイティブ・ワードにアラインされたメモリ・アドレスに

レジスタのネイティブ・ワードをフルに書き込みます。ST8d または

ST16d (32 ビット Nios CPU 専用 ) 命令は、

上記のアライメントを行った

上で、レジスタ %r0 からバイト (ST8d の場合 ) またはハーフ・ワード

(ST16d の場合 ) の書き込みを実行します。

メモリの内容 ; 0 1 2 3 ; 0x00001200 0x46 0x49 0x53 0x48 ;32 ビット Nios CPU で実行される命令 ; %o4 にアドレス x00001202 があると仮定します。 LD %g3,[%o4] ; %g3 はアドレス 0x1200 の内容を取得するため、 ; %g3 には 0x48534946 が格納されます。 EXT8d %g3,%o4 ; %g3 は %g3 のバイト 2 と置換されるため、 ; %g3 には 0x00000053 が格納されます。

(23)

概概概概要

要要要

1

ソフトウェアでは多くの場合、特定のバイトやハーフ・ワードをメモリ

の任意の場所に書き込む必要があります。

ソース・レジスタ内の場所と、

メモリの中で書き込む場所は対応していません。

FILL8 と FILL16 (32

ビット Nios CPU のみ ) 命令は、レジスタの最下位バイト (FILL8 の場合 )

とハーフ・ワード (FILL16 の場合 ) を、レジスタ %r0 の各バイト(ハー

フ・ワード)に複製します。

(24)

コード例 2 では、バイトのアドレスがネイティブ・ワードでアラインさ

れていない場合にメモリに 1 バイトを書き込む方法を示しています。

コード例

コード例

コード例

コード例 2: メモリへの

メモリへの

メモリへの 1 バイトの書き込み

メモリへの

バイトの書き込み

バイトの書き込み

バイトの書き込み -- アドレスがネイティブ・ワードでアラインされて

アドレスがネイティブ・ワードでアラインされて

アドレスがネイティブ・ワードでアラインされて

アドレスがネイティブ・ワードでアラインされて

いない場合

いない場合

いない場合

いない場合

アドレス処理

アドレス処理

アドレス処理

アドレス処理

モード

モード

モード

モード

このセクションのトピックでは、以下のアドレス処理モードを説明して

います。

5/16

ビットの即値

全幅のレジスタ -- 間接値

部分幅のレジスタ -- 間接値

全幅のレジスタ -- オフセットによる間接値

部分幅のレジスタ -- オフセットによる間接値

5/16

ビットの即値

ビットの即値

ビットの即値

ビットの即値

多くの算術演算およびロジック処理は、オペランドとして 5 ビットの即

値を使用します。

例えば、ADDI 命令では、レジスタと 5 ビットの即値の

2 つのオペランドを使用します。

5 ビットの即値は、0 ∼ 31 の定数を表

します。6 ∼ 16 ビットを必要とする定数の値 (32 ∼ 65535 の数値 ) を指

定する場合、PFX 命令を使用して 11 ビット K レジスタを設定すること

ができます。この値は 5 ビットの即値と連結されます。

PFX 命令は、変

更対象になる命令の直前で実行する必要があります。

16 ビットの即値の定数を PFX 値と 5 ビットの即値に分解できるように、

アセンブラは演算子の %hi() と %lo() を提供しています。

%hi (x) は、定

数 x のビット 5 ∼ 15 から 11 ビットを抽出し、

%lo (x) は定数 x のビッ

ト 0 ∼ 4 から 5 ビットを抽出します。

32 ビット Nios CPU で実行される命令

; %o4 にアドレス 0x00001203 が格納され、

; %g3 に値 0x00000054 が格納されていると仮定します。

FILL8 %r0,%g3

; (

最初のオペランドは必ず %r0 になります )

; %r0 で %g3 の下位バイトを複製します。

;

したがって、

%r0 には 0x54545454 が格納され、

ST8d [%o4],%r0 ; (2 番目のオペランドは必ず %r0 になります )

; %r0 の 3 番目のバイトがアドレス 0x1203 に格納されます。

実行後のメモリの内容

0 1 2 3

0x00001200 0x46 0x49 0x53 0x54

(25)

概概概概要

要要要

1

以下の例では、PFX を使用した場合、および使用しない場合の ADDI 命

令を示します。

コード例

コード例

コード例

コード例 3: PFX がある場合

がある場合

がある場合

がある場合 / ない場合の

ない場合の

ない場合の ADDI 命令

ない場合の

命令

命令

命令

算術演算やロジック処理以外の命令でも、さまざまな幅で即値の定数を

使用しています。この定数は、K レジスタによって変更されません。

命令

実行の詳細については、

「命令セット」の中にある各命令の説明を参照し

てください。表 10 に 5/16 ビットの即値を使用した命令を示します。

* AND、ANDN、OR、XOR では、PFX の 16 ビットの即値しか使用しま

せん。

これらの命令は、PFX 命令が前にない場合は、2 つのレジスタ・オ

ペランドを使用します。

; %g3 に値 0x0041 が格納されていると仮定します。

ADDI %g3,5

; %g3 に 5 を追加します。

;

これで %g3 には 0x0046 が格納されます。

PFX %hi(0x1234)

; 0x1234 の上位 11 ビットで K を ロードします。

ADDI %g3,%lo(0x1234) ; 0x1234 の下位 5 ビットを %g3 に追加します。

;

したがって、

K レジスタには 0x0091 が入り、

; ADDI 命令の即値のオペランドには 0x0011 が

;

入って、

これらが連結されて 0x1234 という値

;

になります。

表 10. 5/16 ビットの即値を使用した命令

ビットの即値を使用した命令

ビットの即値を使用した命令

ビットの即値を使用した命令

ADDI AND* ANDN* ASRI CMPI LSLI LSRI MOVI MOVHI OR* SUBI XOR*

(26)

全幅のレジスタ

全幅のレジスタ

全幅のレジスタ

全幅のレジスタ -- 間接値

間接値

間接値

間接値

LD 命令と ST 命令の場合、全幅のネイティブ・ワードのロードと格納を

レジスタ間で実行できますが、このときに別のレジスタを使用してアド

レスを指定します。

「メモリ・アクセスの概要」で説明している通り、ま

ずアドレスは、ネイティブ・ワードでアラインされたアドレスに向けて

下方にアラインされます。

K レジスタは、アドレス・レジスタのネイティ

ブ・ワード・アラインされた値からの符号付きオフセットとしてネイティ

ブ・ワードで処理されます。

部分幅レジスタ

部分幅レジスタ

部分幅レジスタ

部分幅レジスタ -- 間接値

間接値

間接値

間接値

部分幅のワードを読み込む命令はありません。

部分的にワードを読み込

むには、全幅レジスタの間接的な読み込み命令と、EXT8d、EXT8s、

EXT16d (32 ビット Nios CPU 専用 ) または EXT16s (32 ビット Nios CPU

専用 ) といった抽出命令を組み合わせる必要があります。

いくつかの命令で、部分的なワードの書き込みを実行できます。

これら

の各命令には、静的な命令と動的な 命令があります。

ソース・レジスタ

内の位置とメモリのネイティブ・ワード内の位置は、いずれもアドレス

処理レジスタの下位ビットによって決定されます。

静的な命令の場合、

ソース・レジスタとメモリのネイティブ・ワード内の位置は、命令に対

する 1 ビットまたは 2 ビットの即値オペランドによって決定されます。

全幅レジスタの間接的なアドレス処理と同様に、K レジスタはアドレス・

レジスタのネイティブ・ワード・アラインされた値からの符号付きのオ

フセットとしてネイティブ・ワードで処理されます。

部分幅レジスタのすべての間接的な命令は、%r0 をデータ・ソースにし

て書き込みを行ないます。

これらの命令は、

FILL8 または FILL16 (32 ビッ

ト Nios CPU のみ ) 命令と一緒に使うと便利です。

*32 ビット Nios CPU 専用

表 11. 全幅レジスタを使用した命令

全幅レジスタを使用した命令

全幅レジスタを使用した命令 -- 間接的なアドレス処理

全幅レジスタを使用した命令

間接的なアドレス処理

間接的なアドレス処理

間接的なアドレス処理

命令

命令

命令

命令

アドレス・レジスタ

アドレス・レジスタ

アドレス・レジスタ

アドレス・レジスタ

データ・レジスタ

データ・レジスタ

データ・レジスタ

データ・レジスタ

LD 任意 任意 ST 任意 任意

表 12. 部分幅レジスタを使用した命令

部分幅レジスタを使用した命令

部分幅レジスタを使用した命令

部分幅レジスタを使用した命令 -- 間接的なアドレス処理

間接的なアドレス処理

間接的なアドレス処理

間接的なアドレス処理

命令

命令

命令

命令

アドレス・レジスタ

アドレス・レジスタ

アドレス・レジスタ

アドレス・レジスタ

データ・レジスタ

データ・レジスタ

データ・レジスタ

データ・レジスタ

バイト

バイト

バイト

バイト / ハーフ・ワードの選択

ハーフ・ワードの選択

ハーフ・ワードの選択

ハーフ・ワードの選択

ST8s 任意 %r0 即値 ST16s* 任意 %r0 即値 ST8d 任意 %r0 アドレス・レジスタの下位ビット ST16d* 任意 %r0 アドレス・レジスタの下位ビット

(27)

概概概概要

要要要

1

全幅レジスタ

全幅レジスタ

全幅レジスタ

全幅レジスタ -- オフセットによる間接値

オフセットによる間接値

オフセットによる間接値

オフセットによる間接値

LDP、LDS、STP、STS 命令は、レジスタ間での全幅ネイティブ・ワー

ドのロードまたは格納を行いますが、この際に別のレジスタを使用して

アドレスを指定し、即値を使用してそのアドレスからのオフセットをネ

イティブ・ワードで指定します。

任意のレジスタを使用してメモリ・アドレスを指定できる LD、ST 命令

とは異なり、これらの命令が使えるのは各アドレスの特定レジスタだけ

です。

LDP と STP 命令は、アドレス・レジスタにレジスタ %L0、%L1、

%L2、または %L3 のいずれかを使用します。

LDS と STS 命令の場合、

アドレス・レジスタとしてスタック・ポインタのレジスタ %sp (%o6 と

同等 ) だけが利用できます。

これらの各命令は、アドレス・レジスタで示

されるアラインされたアドレスからのオフセットをネイティブ・ワード

で指定する、符号付きのインデックス値を使用します。

部分幅レジスタ

部分幅レジスタ

部分幅レジスタ

部分幅レジスタ -- オフセットによる間接値

オフセットによる間接値

オフセットによる間接値

オフセットによる間接値

メモリから部分幅のワードを読み込む命令はありません。

部分的にワー

ドを読み込むには、インデックスを付けた全幅レジスタの間接的な読み

込み命令と、EXT8d、EXT8s、EXT16d (32 ビット Nios CPU 専用 ) また

は EXT16s (32 ビット Nios CPU 専用 ) といった抽出命令を組み合わせる

必要があります。

STS8s と STS16s (Nios 32 専用 ) は、間接的な定数を

使用して、スタック・ポインタからのバイト (STS8s の場合 ) またはハー

フ・ワードのオフセット (STS16s の場合 ) を指定し、ソース・レジスタ

%r0 にあるアラインされた部分幅を書き込みます。

表 13. 全幅レジスタを使用した命令

全幅レジスタを使用した命令

全幅レジスタを使用した命令

全幅レジスタを使用した命令 -- オフセット・アドレス処理による間接値

オフセット・アドレス処理による間接値

オフセット・アドレス処理による間接値

オフセット・アドレス処理による間接値

命令

命令

命令

命令

アドレス・レジスタ

アドレス・レジスタ

アドレス・レジスタ

アドレス・レジスタ

データ・レジスタ

データ・レジスタ

データ・レジスタ

データ・レジスタ

PFX

のないオフセット範囲

のないオフセット範囲

のないオフセット範囲

のないオフセット範囲

LDP %L0、%L1、%L2、%L3 任意 -16..15 ネイティブ・ワード LDS %sp 任意 0..255 ネイティブ・ワード STP %L0、%L1、%L2、%L3 任意 -16..15 ネイティブ・ワード STS %sp 任意 0..255 ネイティブ・ワード

(28)

これらの命令は、アドレス・レジスタとして、スタック・ポインタのレ

ジスタ %sp (%o6 と同等 ) のみを使用し、データ・レジスタとして、レ

ジスタ %r0 (%g0 と同等、ただし、アセンブラの命令では %r0 を使用す

る必要があります ) のみを使用します。

これらの命令は、FILL8 または

FILL16 (32 ビット Nios CPU のみ ) 命令と一緒に使うと便利です。

*32 ビット Nios CPU 専用

プログラムフ

プログラムフ

プログラムフ

プログラムフ

ロー・コント

ロー・コント

ロー・コント

ロー・コント

ロール

ロール

ロール

ロール

このセクションでは、以下の項目を説明しています。

2 つの相対分岐命令 (BR と BSR)

2 つの絶対ジャンプ命令

(JMP と CALL)

2 つのトラップ命令 (TRET と TRAP)

5 つの条件命令 (SKP、SKP0、SKP1、SKPRz、および SKPRnz)

相対分岐命令

相対分岐命令

相対分岐命令

相対分岐命令

相対分岐命令には、BR と BSR の 2 つがあります。この分岐ターゲッ

ト・アドレスは、現在のプログラム・カウンタ ( すなわち BR 命令自体

のアドレス ) と IMM11 命令フィールドから計算されます。

分岐オフセッ

トの計算の詳細は、BR と BSR 命令のセクションで説明しています。44

ページの「BR」と 45 ページの「BSR」を参照してください。

リターン・

アドレスが %o7 に保存される点を除けば、BSR は BR と同じです。

ターン・アドレスの計算については、BSR 命令のセクションで説明して

います。

BR と BSR はいずれも無条件で使用されます。

条件分岐は、

SKP

タイプの命令を、BR または BSR の前に設置することで実装します。

BR と BSR 命令には、分岐遅延スロット処理があります。

つまり、BR ま

たは BSR 直後の命令は、BR または BSR の後、分岐ターゲットの命令

の前に実行されます。

詳細については、26 ページの「分岐遅延スロット」

を参照してください。

BR と BSR 命令の分岐範囲は、BR または BSR 命

令のアドレスから、前方に 2048 バイト、後方に 2046 バイトの範囲とな

ります。

表 14. 部分幅レジスタを使用した命令

部分幅レジスタを使用した命令

部分幅レジスタを使用した命令

部分幅レジスタを使用した命令 -- オフセット・アドレス処理による間接値

オフセット・アドレス処理による間接値

オフセット・アドレス処理による間接値

オフセット・アドレス処理による間接値

命令

命令

命令

命令

アドレス・

アドレス・

アドレス・

アドレス・

レジスタ

レジスタ

レジスタ

レジスタ

データ・

データ・

データ・

データ・

レジスタ

レジスタ

レジスタ

レジスタ

バイト

バイト

バイト

バイト / ハーフ・

ハーフ・

ハーフ・

ハーフ・

ワードの選択

ワードの選択

ワードの選択

ワードの選択

インデックス範囲

インデックス範囲

インデックス範囲

インデックス範囲

STS8s %sp %r0 即値 0..1023 バイト STS16s* %sp %r0 即値 0..511 ハーフ・ワード

(29)

概概概概要

要要要

1

絶対ジャンプ命令

絶対ジャンプ命令

絶対ジャンプ命令

絶対ジャンプ命令

絶対 ( 計算済み ) ジャンプ命令には、JMP と CALL の 2 種類があります。

ジャンプ・ターゲット・アドレスは、汎用レジスタの内容から指定され

ます。

レジスタの内容は、左に 1 つだけシフトし、PC 内に転送されま

す。

CALL は、リターン・アドレスが %o7 に保存される点を除き JMP と

同じです。

リターン・アドレスの計算については、CALL 命令のセクショ

ンで説明しています。

JMP と CALL はいずれも無条件で使用されます。

条件ジャンプは、SKP タイプの命令を、JMP または CALL の前に設置す

ることで実装します。

JMP と CALL 命令には、分岐遅延スロット処理があります。

JMP または

CALL 直後の命令は、JMP または CALL の後、ジャンプ・ターゲットの

命令の前に実行されます。

LRET は JMP %o7 に相当するアセンブラの擬

似命令ですが、通常これはサブルーチンからのリターンに使用されます。

トラップ命令

トラップ命令

トラップ命令

トラップ命令

Nios プロセッサは、ソフトウェアの例外処理に TRAP と TRET の命令を

使用します。この 2 つの命令については、96 ページの「TRAP」と 97

ページの「TRET」を参照してください。

JMP や CALL と異なり、TRAP

と TRET は分岐遅延スロットに対応していません。

TRAP 直後の命令は、

例外ハンドラのリターンまで実行されません。

TRET 直後の命令は、

TRET 処理の一部と見なされて全く実行されません。

条件命令

条件命令

条件命令

条件命令

条件命令には、5 つの 種類 (SKPs、SKP0、SKP1、SKPRz、SKPRnz)

があります。

これらの各命令には、相当するアセンブラの擬似命令 (IFs、

IF0、IF1、IFRz、および IFRnz) があります。

これらの命令は CPU の内

部状況をテストし、その処理結果に応じて次の命令を実行するかどうか

判断します。

それぞれ独自のテストを行いますが、SKP タイプの 5 つの

命令 ( および対応する擬似命令 ) は基本的に同じ処理を実行します。

テス

トの結果に関係なく、どの場合でも、それ以降の ( 条件設定された ) 命令

はメモリからフェッチされます。

ただし、テストの結果に応じて、以降

の命令の実行またはキャンセルが決定されます。

SKP と IF タイプの条件命令は、主にジャンプ (JMP、CALL) と分岐 (BR、

BSR) 命令の条件設定に使いますが、他の命令でも同じように利用できま

す。

条件設定した PFX 命令 (PFX の直前に SKPx または IFx 命令を指定

) は、特別な実行例になります。以降の 2 つの命令は両方がキャンセルさ

れるか、両方が実行されます。

つまり、一組の PFX 命令は、不可分の処

理単位として条件設定されます。

(30)

例外

例外

例外

例外

このセクションでは、以下の項目を説明します。

例外ベクタ・テーブル

外部ハードウェア・インタラプト、内部例外、レジスタ・ウィンド

ウ・アンダフロー、レジスタ・ウィンドウ・オーバフロー、および

TRAP 命令の使用方法

ソフトウェア例外 (TRAP) の要求と例外処理の手順

例外処理の概要

例外処理の概要

例外処理の概要

例外処理の概要

Nios プロセッサでは、最大 64 のベクタ付き例外を処理できます。

例外は

STATUS レジスタの IE コントロール・ビットでグローバルに設定した

り、STATUS レジスタの IPRI フィールドでプライオリティごとにイネー

ブルにできます。

例外は外部ハードウェア・インタラプト、内部例外、明

示的なソフトウェア TRAP 命令の 3 つのソースで生成されます。

Nios 例外処理モデルでは、内部で生成されたすべての例外を正確に処理

できます。

すなわち、この例外転送メカニズムの場合、例外処理サブルー

チンに十分な情報を与えて、問題が何もなかったかのように、インタラ

プトが発生したプログラムのステータスを復旧します。

SAVE または

RESTORE 命令によってレジスタ・ウィンドウのアンダフローまたは

オーバフローが発生すると、内部例外が生成されます。

例外処理サブルーチンは、常に新しく開かれたレジスタ・ウィンドウで

処理を実行することで、インタラプトのレイテンシーを非常に低くする

ことができます。

例外ハンドラは、インタラプトが発生した側のレジス

タ内容を手動で保持する必要はありません。

例外ベクタ・テーブル

例外ベクタ・テーブル

例外ベクタ・テーブル

例外ベクタ・テーブル

例外ベクタ・テーブルは、64 の例外ハンドラ・アドレスから構成されま

す。

32 ビット Nios CPU の各エントリは 4 バイト、16 ビット Nios CPU

の各エントリは 2 バイトとなります。

例外ベクタ・テーブルのベース・

アドレスは設定できます。

Nios CPU が例外番号 n を処理すると、n 番目

のエントリを例外ベクタ・テーブルからフェッチし、フェッチした値を

2 倍してからその結果を PC にロードします。

例外ベクタ・テーブルは、ターゲット・システムのハードウェア・メモ

リ・マップによって、物理的に RAM または ROM に常駐します。

ROM

(31)

概概概概要

要要要

1

外部ハードウェア・インタラプト・ソース

外部ハードウェア・インタラプト・ソース

外部ハードウェア・インタラプト・ソース

外部ハードウェア・インタラプト・ソース

外部ソースは、Nios CPU irq_number 入力に 6 ビット・インタラプト番

号をドライブし、同時に Nios CPU irq 入力ピンを真 (1) にアサートする

ことによって、ハードウェア・インタラプトを要求することができます。

Nios CPU は、IE ビットが真 (1) であり、要求されたインタラプト番号が

STATUS レジスタの IPRI フィールド値よりも小さい ( プライオリティが

高い ) 場合、表示された例外を処理します。

制御は irq_number 入力で番

号を指定した例外ハンドラに移されます。

irq_number 入力を生成し、irq 入力ピンをドライブする外部ロジックは、

Nios SOPC ビルダ・ソフトウェアによって自動的に生成され、CPU 外

部のペリフェラル・バス・モジュール PBM に格納されます。

インタラプ

ト機能を持つペリフェラルは、PBM 内で組み合わせた 1 つまたは複数の

インタラプト・リクエスト信号を生成するだけで、Nios の irq_number と

irq 入力を生成することができます。

Nios irq 入力はレベル・センスです。

irq と irq_number 入力は、各クロッ

クの立ち上がりでサンプリングされます。

インタラプトを生成する外部

ソースは、インタラプトがソフトウェアによって認識 ( 例えばインタラ

プトしたペリフェラルのレジスタへの書き込み ) されるまで、irq 出力信

号をアサートしておく必要があります。

アサートされたインタラプトが、

Nios CPU コアが例外の処理を開始する前にデアサートされると、このイ

ンタラプトは無視されます。

内部例外ソース

内部例外ソース

内部例外ソース

内部例外ソース

内部例外には、レジスタ・ウィンドウ・オーバフローとレジスタ・ウィ

ンドウ・アンダフローの 2 つのソースがあります。Nios プロセッサの

アーキテクチャでは、内的に生成されたすべての例外を正確に処理でき

ます。

どのような状況でも、例外ハンドラで例外条件を修正できるので、

例外の原因となった命令が正常に終了したかのように見えます。

レジスタ・ウィンドウのアンダフロー

有 効な 最下 位の レジ スタ・ウ ィン ドウ を使 用し てい ると き (CWP =

LO_LIMIT) に SAVE 命令を発行すると、必ずレジスタ・ウィンドウ・ア

ンダフローの例外が発生します。

SAVE 命令は CWP を LO_LIMIT の下に

移動し、SAVE 実行のたびに %sp が設定されます。

レジスタ・ウィンド

ウのアンダフロー例外が発生すると、SAVE の次の命令を実行する前に、

例外処理サブルーチンに制御が移されます。

参照

関連したドキュメント

[r]

せん断帯の数値解析は、材料の非線形性だけでなく初期形状の非対称性や材料の非均質性

CPU待ち時間 PCとPSWを 専用レジスタ

2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014. 貨物船以外 特殊船

概要/⑥主要穀物の生産量.

平成 14 年 6月 北区役所地球温暖化対策実行計画(第1次) 策定 平成 17 年 6月 第2次北区役所地球温暖化対策実行計画 策定 平成 20 年 3月 北区地球温暖化対策地域推進計画

朝日新聞デジタル  LGBTの就活・就労について考えるカンファレンス「RAINBOW CROSSING TOKYO

・電源投入直後の MPIO は出力状態に設定されているため全ての S/PDIF 信号を入力する前に MPSEL レジスタで MPIO を入力状態に設定する必要がある。MPSEL