Niosエンベデッド・プロセッサ プログラマ・リファレンス ......例: data1, tdi,...

117
この翻訳版ドキュメントのメンテナンスは終了しております。 この文書には、古いコンテンツや商標が含まれている場合があります。 最新情報につきましては、次のリンクから英語版の最新資料をご確認ください。 https://www.intel.com/content/www/us/en/programmable/documentation/lit-index.html Please take note that this document is no longer being maintained. It may contain legacy content and trademarks which may be outdated. Please refer to English version for latest update at https://www.intel.com/content/www/us/en/programmable/documentation/lit-index.html

Transcript of Niosエンベデッド・プロセッサ プログラマ・リファレンス ......例: data1, tdi,...

  • この翻訳版ドキュメントのメンテナンスは終了しております。

    この文書には、古いコンテンツや商標が含まれている場合があります。

    最新情報につきましては、次のリンクから英語版の最新資料をご確認ください。

    https://www.intel.com/content/www/us/en/programmable/documentation/lit-index.html

    Please take note that this document is no longer being maintained. It may contain legacy content and trademarks which may be outdated.

    Please refer to English version for latest update at https://www.intel.com/content/www/us/en/programmable/documentation/lit-index.html

  • A-MNL-NIOSPROG-01/JP

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

    Altera Corporation

    プログラマ・リファレンス・マニュアルプログラマ・リファレンス・マニュアルプログラマ・リファレンス・マニュアルプログラマ・リファレンス・マニュアルVersion 1.12001年年年年 3月月月月

  • ii Altera Corporation

    Nios Embedded Processor Programmer’s Reference Manual

    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 undernumerous U.S. and foreign patents and pending applications, maskwork rights, and copyrights. Altera warrants performance of itssemiconductor products to current specifications in accordance with Altera’s standard warranty, but reserves the right to makechanges to any products and services at any time without notice. Altera assumes no responsibility or liabilityarising out of the application or use of any information, product, or service described herein except as expresslyagreed to in writing by Altera Corporation. Altera customers are advised to obtain the latest version of devicespecifications before relying on any published information and before placing orders for products or services.

    Copyright 2001 Altera Corporation. All rights reserved.

  • ®

    このマニュアルについてこのマニュアルについてこのマニュアルについてこのマニュアルについて

    本書では、NiosTM エンベデッド・プロセッサに関するさまざまな情報を提供します。

    Nios プロセッサまたは Nios エンベデッド・プロセッサという用語は、一般的または抽象的な文脈でアルテラのソフト・コア・マイクロプロセッサを表しています。

    Nios CPU という用語は、Nios プロセッサ・アーキテクチャを構成する特定のロジック・ブロック (一部または全体 ) を表しています。

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

    表表表表 1. 改訂履歴改訂履歴改訂履歴改訂履歴

    改訂改訂改訂改訂 日付日付日付日付 内容内容内容内容

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

    Altera Corporation iii

  • このマニュアルについてこのマニュアルについてこのマニュアルについてこのマニュアルについて

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

    アルテラ製品の最新情報については、アルテラの 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 (日本アルテラ) [email protected]

    FTP Site (US) ftp.altera.com

    製品案内 World-Wide web http://www.altera.co.jp

    iv Altera Corporaion

    mailto:[email protected]:[email protected]://www.altera.comhttp://www.altera.com

  • このマニュアルについてこのマニュアルについてこのマニュアルについてこのマニュアルについて

    表記規則表記規則表記規則表記規則 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 キーを押すところにリターン矢印を表示しました。f 記載されている項目の詳細情報の参照個所を足跡のマークで表示しました。

    Altera Corporation v

  • このマニュアルについてこのマニュアルについてこのマニュアルについてこのマニュアルについて

    Notes:

    vi Altera Corporaion

  • 目次目次目次目次

    表の一覧表の一覧表の一覧表の一覧................................................................................................................xi1. 概要概要概要概要 ....................................................................................................................1

    はじめに .............................................................................................................................. 1対象読者 ....................................................................................................................... 1

    Nios CPU の概要 ................................................................................................................. 1命令セット ........................................................................................................................... 2レジスタの概要.................................................................................................................... 2汎用レジスタ ................................................................................................................ 2K レジスタ .................................................................................................................... 5プログラム・カウンタ.................................................................................................. 5コントロール・レジスタ .............................................................................................. 5

    メモリ・アクセスの概要 ..................................................................................................... 8メモリ (またはペリフェラル ) からの読み込み .................................................... 9メモリ (またはペリフェラル ) への書き込み ..................................................... 10

    アドレス処理モード .......................................................................................................... 125/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

    簡単な例外ハンドラ ............................................................................................ 23

    Altera Corporation vii

  • 目次目次目次目次

    複雑な例外ハンドラ ............................................................................................ 24パイプラインの実装........................................................................................................... 25パイプラインの処理 ................................................................................................... 25分岐遅延スロット ....................................................................................................... 26CWP 操作の命令 ........................................................................................................ 26

    2. 命令セット命令セット命令セット命令セット ..................................................................................................... 35ABS.................................................................................................................................... 36ADD ................................................................................................................................... 37ADDI .................................................................................................................................. 38AND ................................................................................................................................... 39ANDN................................................................................................................................. 40ASR.................................................................................................................................... 41ASRI................................................................................................................................... 42BGEN................................................................................................................................. 43BR...................................................................................................................................... 44BSR.................................................................................................................................... 45CALL.................................................................................................................................. 46CMP................................................................................................................................... 47CMPI.................................................................................................................................. 48EXT16D ............................................................................................................................. 49EXT16S.............................................................................................................................. 50EXT8D ............................................................................................................................... 51EXT8S................................................................................................................................ 52FILL16................................................................................................................................ 53FILL8.................................................................................................................................. 54JMP.................................................................................................................................... 55LD ...................................................................................................................................... 56LDP.................................................................................................................................... 57LDS.................................................................................................................................... 58LSL..................................................................................................................................... 59LSLI.................................................................................................................................... 60LSR.................................................................................................................................... 61LSRI................................................................................................................................... 62MOV................................................................................................................................... 63MOVHI ............................................................................................................................... 64MOVI.................................................................................................................................. 65MSTEP............................................................................................................................... 66MULL ................................................................................................................................. 67NEG ................................................................................................................................... 68NOT ................................................................................................................................... 69OR...................................................................................................................................... 70PFX.................................................................................................................................... 71RDCTL............................................................................................................................... 72RESTORE.......................................................................................................................... 73RLC.................................................................................................................................... 74RRC ................................................................................................................................... 75

    viii Altera Corporation

  • 目次目次目次目次

    SAVE ................................................................................................................................. 76SEXT16.............................................................................................................................. 77SEXT8................................................................................................................................ 78SKP0.................................................................................................................................. 79SKP1.................................................................................................................................. 80SKPRNZ ............................................................................................................................ 81SKPRZ............................................................................................................................... 82SKPS ................................................................................................................................. 83ST ...................................................................................................................................... 84ST16D................................................................................................................................ 85ST16S................................................................................................................................ 86ST8D.................................................................................................................................. 87ST8S.................................................................................................................................. 88STP.................................................................................................................................... 89STS.................................................................................................................................... 90STS16S.............................................................................................................................. 91STS8S................................................................................................................................ 92SUB.................................................................................................................................... 93SUBI................................................................................................................................... 94SWAP ................................................................................................................................ 95TRAP ................................................................................................................................. 96TRET.................................................................................................................................. 97WRCTL .............................................................................................................................. 98XOR ................................................................................................................................... 99

    3. 索引索引索引索引 ............................................................................................................... 101

    Altera Corporation ix

  • Notes:

    x Altera Corporation

  • 表のリスト表のリスト表のリスト表のリスト

    表 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

    Altera Corporation xi

  • Notes:

    xii Altera Corporation

  • 概要概要概要概要

    概概概概要要要 要

    1

    はじめにはじめにはじめにはじめに NiosTM エンベデッド・プロセッサは、プログラマブル・ロジックと 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

    内部レジスタ幅 (ビット ) 32 16

    Altera Corporation 1

  • 概要概要概要概要

    Cygnus 社の GNUPro コンパイラおよびデバッガは、業界標準のオープン・ソース C/C++ コンパイラ・リンカーおよびデバッガ・ツールキットですが、この製品は Nios CPU と一緒に提供されています。 GNUPro ツールキットは、C/C++ コンパイラ、マクロアセンブラ、リンカー、デバッガ、バイナリ・ユーティリティ、およびライブラリで構成されています。

    命令セット命令セット命令セット命令セット Nios プロセッサの命令セットは、C および C++ からコンパイルしたプログラムをサポートするように制定されています。 この命令セットには、算術計算やロジック処理など、標準的な命令セットの他に、ビット処理、バイト抽出、データ移動、制御フロー変更などの命令セット、条件設定が可能な小さな命令セットが含まれています。この小さな命令セットを使用すると、短い条件分岐を省くことができます。

    レジスタのレジスタのレジスタのレジスタの概要概要概要概要

    このセクションでは、Nios CPU 汎用レジスタとコントロール・レジスタの構成について説明します。 Nios CPU アーキテクチャは、大容量の汎用レジスタ・ファイル、複数のマシン・コントロール・レジスタ、プログラム・カウンタ、命令のプリフィックスに使用する K レジスタで構成されています。

    汎用レジスタ汎用レジスタ汎用レジスタ汎用レジスタ

    汎用レジスタは、32 ビット Nios CPU では 32 ビット幅、16 ビット NiosCPU では 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 CPU

    2 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    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

    Altera Corporation 3

  • 概要概要概要概要

    .

    表表表表 6. プログラマのモデルプログラマのモデルプログラマのモデルプログラマのモデル31 16 15 0

    IN

    %i7 %r31 SAVE 命令のリターン・アドレス%i6 %r30 %fp -- フレーム・ポインタ%i5 %r29%i4 %r28%i3 %r27%i2 %r26%i1 %r25%i0 %r24

    LOCAL

    %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)

    OUT

    %o7 %r15 現在のリターン・アドレス %o6 %r14 %sp スタック・ポインタ%o5 %r13%o4 %r12%o3 %r11%o2 %r10%o1 %r9%o0 %r8

    GLOBAL

    %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 保存されたステータス%ctl0 STATUS IE IPRI CWP N V Z C

    4 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    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

    Altera Corporation 5

  • 概要概要概要概要

    インタラプト・イネーブルインタラプト・イネーブルインタラプト・イネーブルインタラプト・イネーブル (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)」を参照してください。

    6 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    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

    Altera Corporation 7

  • 概要概要概要概要

    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

    8 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    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 バイトを抽出し、最初のレジスタ・オペランドの内容全体をそのバイトで置き換えます。

    Altera Corporation 9

  • 概要概要概要概要

    コード例 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 が格納されます。

    10 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    1

    ソフトウェアでは多くの場合、特定のバイトやハーフ・ワードをメモリの任意の場所に書き込む必要があります。 ソース・レジスタ内の場所と、メモリの中で書き込む場所は対応していません。 FILL8 と FILL16 (32ビット Nios CPU のみ ) 命令は、レジスタの最下位バイト (FILL8 の場合 )とハーフ・ワード (FILL16 の場合 ) を、レジスタ %r0 の各バイト(ハーフ・ワード)に複製します。

    Altera Corporation 11

  • 概要概要概要概要

    コード例 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 30x00001200 0x46 0x49 0x53 0x54

    12 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    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*

    Altera Corporation 13

  • 概要概要概要概要

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

    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 アドレス・レジスタの下位ビット

    14 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    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 ネイティブ・ワード

    Altera Corporation 15

  • 概要概要概要概要

    これらの命令は、アドレス・レジスタとして、スタック・ポインタのレジスタ %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 ハーフ・ワード

    16 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    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 命令は、不可分の処理単位として条件設定されます。

    Altera Corporation 17

  • 概要概要概要概要

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

    ■ 例外ベクタ・テーブル■ 外部ハードウェア・インタラプト、内部例外、レジスタ・ウィンドウ・アンダフロー、レジスタ・ウィンドウ・オーバフロー、および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の例外ベクタ・テーブルは、実行時の初期化を必要としません。

    18 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    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 の次の命令を実行する前に、例外処理サブルーチンに制御が移されます。

    Altera Corporation 19

  • 概要概要概要概要

    SAVE 命令がレジスタ・ウィンドウのアンダフロー例外を発生すると、例外処理サブルーチンに制御を渡す前に CWP が 1 回だけ減算されます。アンダフロー例外ハンドラからは、CWP = LO_LIMIT - 1 が見えます。レジスタ・ウィンドウのアンダフロー例外の、例外番号は 1 です。したがって、インタラプトがディセーブル (IE=0) になっている場合、あるいはIPRI 値が 1 以下になっている場合、CPU はレジスタ・ウィンドウのアンダフロー例外を処理しないことになります。

    アンダフロー例外ハンドラのサブルーチンが実行する処理は、システムの要求によって変わります。 大量のコードまたは複雑なコードを実行するシステムの場合、アンダフロー (およびオーバフロー ) ハンドラは、仮想レジスタ・ファイルを生成してレジスタ・ファイルの物理的な限界を超えることができます。 アンダフローが発生すると、アンダフロー・ハンドラはレジスタ・ファイル全体の内容をメモリに保存して、HI_LIMITで CWP を再開することができます。こうして、空き容量を作り、コードはレジスタ・ウィンドウを継続的に開くことができます。 一方、多くのエンベデッド・システムでは、スタックの利用やサブルーチン・コールの深さを厳密に制御したいと考えることでしょう。 このようなシステムでは、エラー・メッセージを表示し、プログラムを終了するように、アンダフロー・ハンドラを設定することができます。

    レジスタ・ウィンドウ・アンダフロー例外ハンドラの特性と処理は、プログラマが決定します。 Nios ソフトウェア開発キット (SDK) には、レジスタ・ウィンドウのアンダフロー・ハンドラが含まれており、これはデフォルトで自動的にインストールされます。このハンドラは、スタックを一時的な記憶域にして、レジスタ・ファイルを仮想化することができます。

    レジスタ・ウィンドウのアンダフロー例外が発生するのは、SAVE 命令のときだけです。 直接的な書き込み (WRCTL 命令 )で CWP を LO_LIMIT未満の値に設定した場合、レジスタ・ウィンドウのアンダフロー例外が発生しません。 既に CWP が LO_LIMIT よりも小さい値になっている場合、SAVE 命令を実行しても、レジスタ・ウィンドウのアンダフロー例外は発生しません。

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

    有効な最上位のレジスタ・ウィンドウを使用しているとき (CWP =HI_LIMIT) に RESTORE 命令を実行すると、必ずレジスタ・ウィンドウのオーバフロー例外が発生します。 RESTORE の次の命令を実行する前に、例外処理サブルーチンに制御が移されます。

    レジスタ・ウィンドウのオーバフロー例外が起きると、例外ハンドラはCWP が HI_LIMIT になったと認識できます。 RESTORE 命令で CWP が大きな値になり、通常の例外処理で値がすぐに小さくなったと理解すれば良いでしょう。 レジスタ・ウィンドウのオーバフロー例外の、例外番号は 2 となっています。

    20 Altera Corporation

  • 概要概要概要概要

    概概概 概要要要 要

    1

    オーバフロー例外ハンドラのサブルーチンが実行する処理は、システムの要求によって変わります。 大量のコードまたは複雑なコードを実行するシステムの場合、オーバフロー・ハンドラおよびアンダフロー・ハンドラは、仮想レジスタ・ファイルを生成してレジスタ・ファイルの物理的な限界を超えることができます。 オーバフローが発生すると、オーバフロー・ハンドラは、スタックから物理レジスタ・ファイルの全内容を再ロードし、LO_LIMIT で CWP を再開することができます。 一方、多くのエンベデッド・システムでは、スタックの利用やサブルーチン・コールの深さを厳密に制御したいと考えることでしょう。 このようなシステムでは、エラー・メッセージを表示し、プログラムを終了するように、オーバフロー・ハンドラを設定することができます。

    レジスタ・ウィンドウ・オーバフロー例外ハンドラの特性と処理は、プログラマが決定します。 Nios SDK は、レジスタ・ウィンドウのオーバフロー・ハンドラをデフォルトで自動的にインストールします。このハンドラは、スタックを使用して、レジスタ・ファイルを仮想化します。

    レジスタ・ウィンドウのオーバフロー例外が発生するのは、RESTORE命令のときだけです。 直接的な書き込み (WRCTL 命令 ) で CWP をHI_LIMIT よりも大きな値にした場合、レジスタ・ウィンドウのオーバフロー例外が発生しません。 既に CWP が HI_LIMIT よりも大きい値になっている場合、RESTORE 命令を実行しても、レジスタ・ウィンドウのオーバフロー例外は発生しません。

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

    ソフトウェアは、TRAP 命令を発行して、例外ハンドラに制御を渡すよう直接要求できます。 命令の IMM6 フィールドは、例外番号を示します。IE ビットまたは、IPRI ビットの設定にかかわらず、TRAP 命令は常に処理されます。 TRAP 命令には、遅延スロット処理がありません。 指定の例外ハンドラに制御が移るまで、TRAP 直後の命令は実行されません。TRAP 後の命令のアドレスが %o7 に保存されるため、例外処理が終了すると、TRET 命令は TRAP 後の命令に制御を返します。

    例外処理の手順例外処理の手順例外処理の手順例外処理の手順

    上記のようなソースで例外が発生すると、以下の手順で処理が開始されます。

    1. STATUS レジスタの内容が ISTATUS レジスタにコピーされます。

    2. CWP の値が減らされ、例外ハンドラ・ルーチンで使用するために、新しいウィンドウが開かれます (レジスタ・ウィンドウのアンダフロー例外の場合は、状況が異なります。この例外では、SAVE 命令によって既に CWP が減らされています )。

    Altera Corporation 21

  • 概要概要概要概要

    3. IE が 0 に設定され、インタラプトがディセーブルになります。

    4. IPRI に 6 ビットの例外番号が設定されます。

    5. プログラムでインタラプトが発生し、未処理になっている次の命令のアドレスが %o7 に転送されます。

    6. 例外ハンドラの開始アドレスが例外ベクタ・テーブルからフェッチされ、PC に書き込まれます。

    7. 例外ハンドラが終了すると、TRET 命令が発行され、制御が元のプログラムに戻されます。

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

    すべての例外は、新しく開いたレジスタ・ウィンドウで処理が開始されます。 この処理によって、インタラプトが発生したプログラムのレジスタ内容を維持する必要がなくなるため、例外ハンドラの複雑さや待ち時間が軽減されます。 例外ハンドラは、新しく開かれたウィンドウでレジスタ %o0..%L7 を自由に利用できます。 エントリによっては、例外ハンドラで SAVE 命令を実行しない方がいい場合があります。 例外ハンドラで SAVE および RESTORE を実行する方法については、これ以降で説明します。

    例外処理に移ると必ず新しいレジスタ・ウィンドウが開かれるため、例外で使えるレジスタ・ウィンドウが常になければなりません。 LO_LIMITを 1 に設定すると、例外のために 1 つのウィンドウを常に利用できるようになります (LO_LIMIT のリセット値は 1 です )。 プログラムで SAVE命令を実行し、最後のレジスタ・ウィンドウまで使おうとすると (CWP= 0)、レジスタ・アンダフローのトラップが発生します。 レジスタ・アンダフロー・ハンドラ自体は、最後のウィンドウで実行されます (CWP = 0の状態で )。

    ソフトウェアを適切に設計すれば、CWP が 0 の時に例外が発生するようなことはありません。CWP が 0 になるのは、例外が処理されているときだけです。インタラプトを再びイネーブルにする前に例外ハンドラの処理をきちんと検討しなければなりません。 詳細については、23ページの「簡単な例外ハンドラと複雑な例外ハンドラ」 を参照してください。

    22 Altera Corporation

  • 概要概要概要概要

    概概概 概