(57)【要約】【課題】  少量のハードウエアで効果的な分岐命令先読みとサブルーチン復帰に備えた命令バッファの更新を実現し、高性能な情報処理技術を低価格で提供する。【解決手段】  ＣＰＵ１、メモリ４、先読み手段等を備えた情報処理装置であって、先読み手段内の先読みアドレス生成部１１０１は、ＣＰＵ１が現在アクセス中の命令列を格納する現命令バッファから、少なくとも１つの分岐アドレス演算命令と、分岐アドレスへの分岐命令からなる分岐命令列を解読し、分岐先アドレスの先読みを行う。さらに、サブルーチン復帰命令の復帰先の命令列を格納するサブルーチン復帰命令バッファを備え、現命令バッファに格納された命令列をサブルーチン復帰命令バッファに退避する。【選択図】  図１１ 
2005215946.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、メモリと、予め定められた数の命令およびデータからなる命令列を、前記命令列内の命令またはデータを前記ＣＰＵが実行する前に先読みする先読み手段とを備えた情報処理装置であって、
割り込み要求が発生すると、割り込みベクタテーブルを先読みし、前記先読みした割り込みベクタテーブルのリードデータの中から、さらに割り込みルーチン先頭アドレスを抽出し、前記割り込みルーチン先頭アドレスの先読みを行う先読みアドレス生成手段を備えることを特徴とする情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、
前記先読みアドレス生成手段は、割り込み要求アサートにより、前記割り込みベクタテーブルのアドレスを出力するステートに遷移し、前記メモリから読み出された割り込みベクタテーブルを格納するリードデータの有効を示す信号のアサートより、前記リードデータから割り込みルーチンの先頭アドレスを出力するステートに遷移することを特徴とする情報処理装置。
【請求項３】
ＣＰＵと、メモリと、予め定められた数の命令およびデータからなる命令列を、前記命令列内の命令またはデータを前記ＣＰＵが実行する前に先読みする先読み手段とを備えた情報処理装置であって、
前記命令列が先読みバッファに格納された時点で、前記命令列内に含まれる所定の割り込み復帰命令またはサブルーチン復帰命令を検出し、復帰先の先読みを行う先読みアドレス生成手段を備えることを特徴とする情報処理装置。
【請求項４】
請求項３記載の情報処理装置において、
前記先読みアドレス生成手段は、割り込みルーチンまたはサブルーチンへの分岐前に前記ＣＰＵから出力される復帰先のアドレスを保持し、前記先読みバッファの命令列内に含まれる前記所定の割り込み復帰命令またはサブルーチン復帰命令を検出した時点で、前記保持している復帰先のアドレスを出力することを特徴とする情報処理装置。
【請求項５】
ＣＰＵと、メモリと、予め定められた数の命令およびデータからなる命令列を、前記命令列内の命令またはデータを前記ＣＰＵが実行する前に先読みする先読み手段とを備えた情報処理装置であって、
前記ＣＰＵが現在アクセス中の命令列を格納する現命令バッファから、少なくとも１つの分岐アドレス演算命令と、分岐アドレスへの分岐命令からなる分岐命令列を解読し、分岐先アドレスの先読みを行う先読みアドレス生成手段を備えることを特徴とする情報処理装置。
【請求項６】
請求項５記載の情報処理装置において、
前記先読みアドレス生成手段は、前記分岐命令列が特定の命令順を満たし、かつ前記分岐命令列に含まれる全ての命令の操作対象レジスタ番号が一致していることを条件として、分岐先の先読み要求出力および分岐先アドレス演算を行うことを特徴とする情報処理装置。
【請求項７】
ＣＰＵと、メモリと、予め定められた数の命令およびデータからなる命令列を、前記命令列内の命令またはデータを前記ＣＰＵが実行する前に先読みする先読み手段とを備えた情報処理装置であって、
前記ＣＰＵが現在アクセス中の命令列を格納する現命令バッファと、前記ＣＰＵが前回アクセス中であった命令列を格納する前命令バッファから、少なくとも１つの分岐アドレス演算命令と、分岐アドレスへの分岐命令からなる分岐命令列を解読し、分岐先アドレスの先読みを行う先読みアドレス生成手段を備えることを特徴とする情報処理装置。
【請求項８】
請求項７記載の情報処理装置において、
前記先読みアドレス生成手段は、前記前命令バッファに格納される命令列と、前記現命令バッファに格納される命令列が連続している場合、前記前命令バッファと前記現命令バッファにまたがる分岐命令列を解読することを特徴とする情報処理装置。
【請求項９】
ＣＰＵと、メモリと、予め定められた数の命令およびデータからなる命令列を、前記命令列内の命令またはデータを前記ＣＰＵが実行する前に先読みする先読み手段とを備えた情報処理装置であって、
サブルーチン復帰命令の復帰先の命令列を格納する少なくとも１つのサブルーチン復帰命令バッファを備え、前記ＣＰＵが現在アクセス中の命令列を格納する現命令バッファに格納された命令列を前記サブルーチン復帰命令バッファに退避することを特徴とする情報処理装置。
【請求項１０】
請求項９記載の情報処理装置において、
前記サブルーチン復帰命令バッファが２つ以上の場合、更新する前記サブルーチン復帰命令バッファを選択するサブルーチン復帰命令バッファ更新ポインタを備え、前記複数のサブルーチン復帰命令バッファは、格納するエントリの有効を示す有効ビット（１：有効、０：無効）、および格納するエントリのヒット有無を示すヒットビット（１：ヒット有、０：ヒット無し）、とをそれぞれ備え、前記サブルーチン復帰命令バッファ更新ポインタは、前記各有効ビットおよび前記各ヒットビットから生成されることを特徴とする情報処理装置。
【請求項１１】
請求項１０記載の情報処理装置において、
前記サブルーチン復帰命令バッファ更新ポインタの生成方法は、前記ヒットビットが１であるサブルーチン復帰命令バッファを選択し、前記ヒットビットが１であるサブルーチン復帰命令バッファが存在しない場合、格納されているエントリが無効であるサブルーチン復帰命令バッファを選択することを特徴とする情報処理装置。
【請求項１２】
請求項５記載の情報処理装置において、
前記先読みアドレス生成手段からの先読み要求と前記ＣＰＵからのリード要求が同時に発生した場合、前記ＣＰＵからのリード要求を優先することを特徴とする情報処理装置。
【請求項１３】
請求項９記載の情報処理装置において、
前記現命令バッファに格納された命令列の前記サブルーチン復帰命令バッファへの退避は、前記現命令バッファに格納される最初から最後より２番目までの命令列の中からサブルーチンへの分岐命令を検出した場合に行われることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵとメモリと先読み手段とを備えた情報処理装置における、割り込みルーチン、および割り込みからの復帰先命令の先読み技術に関する。また、サブルーチンへの分岐先の先読み、サブルーチン復帰戻先の退避に適用して有効な技術に関する。
【背景技術】
【０００２】
近年、ＣＰＵの動作周波数が格段に向上している一方、大容量化に対応するため、メモリの動作周波数の向上はＣＰＵのそれと比較して穏やかである。このようにＣＰＵとメモリとの動作周波数が乖離しているため、システム全体の性能が向上しないという問題が顕著になってきている。
【０００３】
この問題を解決するため、高速に読み出しが可能な先読みバッファあるいはキャッシュに予め必要となる命令を格納し、これらから命令を読み出すことで、メモリ読み出しの遅延を隠蔽し、性能の向上を図ることが一般的に行われている。
【０００４】
ここで、実行されているプログラムに分岐命令がある場合は、分岐先の命令を適切に予測して先読みバッファ等に読み出す先読みを行なう必要がある。
【０００５】
この予測手法として、分岐命令の実行履歴に基づいて分岐先アドレスを予測し、予測した分岐先命令をメモリから先読みバッファに予め読み出しておくものがある。しかし、分岐命令により処理が実際に分岐した場合、命令が実行される際に上記予測が行なわる構成であると、分岐後の命令列の先読みが間に合わないという問題があった。
【０００６】
そこで、特許文献１に開示されているように、命令の先読みの段階で分岐の可能性を予測し、その後の命令列を先読みする手法が考えられている。
【特許文献１】特開平６−２７４３４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
前記特許文献１に開示されている技術では、分岐命令の分岐先命令の先読みのみが実行され、割り込みルーチンへの分岐、メインルーチンへの復帰に対する先読みを行っていない。
【０００８】
そのため、割り込みの多いアプリケーションでは、性能が向上しないという問題が依然として残る。また、高いリアルタイム性が必要なアプリケーションでは十分な割り込み応答時間が確保できないといった問題も生じる。
【０００９】
本発明の第一の目的は、割り込みの多いアプリケーションにおいても、効果的な先読みを行い、高性能で高いリアルタイム性を持つ情報処理技術を提供することにある。
【００１０】
また、前記特許文献１に開示されている技術では、分岐先命令の先読み精度が分岐履歴テーブルの容量に依存しており、性能向上のためには分岐履歴テーブル用に高速、大容量ＲＡＭが必要となり、システム価格が上昇するといった問題が生じる。
【００１１】
本発明の第二の目的は、少量のハードウエアで効果的な分岐命令先読み、およびサブルーチン復帰に備えた命令バッファの更新を実現し、高性能な情報処理技術を低価格で提供することにある。
【００１２】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００１４】
上記第一の目的を達成するため、本発明は、ＣＰＵと、メモリと、予め定められた数の命令およびデータからなる命令列を、命令列内の命令またはデータをＣＰＵが実行する前に先読みする先読み手段とを備えた情報処理装置に適用され、以下のような特徴を有するものである。
【００１５】
（１１）割り込み要求が発生すると、割り込みベクタテーブルを先読みし、先読みした割り込みベクタテーブルのリードデータの中から、さらに割り込みルーチン先頭アドレスを抽出し、割り込みルーチン先頭アドレスの先読みを行う先読みアドレス生成手段を備える。
【００１６】
（１２）命令列が先読みバッファに格納された時点で、命令列内に含まれる所定の割り込み復帰命令またはサブルーチン復帰命令を検出し、復帰先の先読みを行う先読みアドレス生成手段を備える。
【００１７】
また、上記第二の目的を達成するため、本発明は、ＣＰＵと、メモリと、予め定められた数の命令およびデータからなる命令列を、命令列内の命令またはデータをＣＰＵが実行する前に先読みする先読み手段とを備えた情報処理装置に適用され、以下のような特徴を有するものである。
【００１８】
（２１）ＣＰＵが現在アクセス中の命令列を格納する現命令バッファから、少なくとも１つの分岐アドレス演算命令と、分岐アドレスへの分岐命令からなる分岐命令列を解読し、分岐先アドレスの先読みを行う先読みアドレス生成手段を備える。
【００１９】
（２２）ＣＰＵが現在アクセス中の命令列を格納する現命令バッファと、ＣＰＵが前回アクセス中であった命令列を格納する前命令バッファから、少なくとも１つの分岐アドレス演算命令と、分岐アドレスへの分岐命令からなる分岐命令列を解読し、分岐先アドレスの先読みを行う先読みアドレス生成手段を備える。
【００２０】
（２３）サブルーチン復帰命令の復帰先の命令列を格納する少なくとも１つのサブルーチン復帰命令バッファを備え、ＣＰＵが現在アクセス中の命令列を格納する現命令バッファに格納された命令列をサブルーチン復帰命令バッファに退避する。
【発明の効果】
【００２１】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【００２２】
（１）割り込みベクタ、および割り込みルーチンを先読みすることにより、割り込みルーチンへの分岐を高速化することが可能となる。
【００２３】
（２）割り込み復帰命令を、ＣＰＵが命令を実行する前に検出し復帰先を先読みすることにより、割り込みルーチンからの復帰を高速化することが可能となる。
【００２４】
（３）サブルーチン復帰命令を、ＣＰＵが命令を実行する前に検出し復帰先を先読みすることにより、サブルーチンからの復帰を高速化することが可能となる。
【００２５】
（４）現命令バッファから分岐命令列を解読し、分岐先アドレスを先読みする場合に、特定の条件を満たす分岐命令列のみを解読することにより、少量のハードウエアで効果的な分岐命令先読みを実現することが可能となる。
【００２６】
（５）サブルーチン復帰命令の復帰先アドレスの命令列を格納するサブルーチン復帰命令バッファは、現命令バッファからの命令列で更新されることから、キャッシュやバッファ更新のためのメモリアクセス競合による性能低下を抑えることが可能となる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２８】
（実施の形態１）
本発明の実施の形態１を、図１〜図１０に基づいて説明する。
【００２９】
図１は、本発明の実施の形態１の情報処理装置の全体を示す構成図である。
【００３０】
本実施の形態の情報処理装置は、ＣＰＵ（１）、先読みアドレス生成部（２）、制御部（３）、メモリ（４）、キャッシュ（５）、セレクタ０（６）、データバッファ（７）、命令バッファ（８）、ＩＮＴＣ（９）、セレクタ１（１０）から構成される。この構成において、先読みアドレス生成部（２）は先読みアドレス生成手段として備えられ、またこの先読みアドレス生成部（２）を含む、制御部（３）、セレクタ０（６）、データバッファ（７）、命令バッファ（８）、およびセレクタ１（１０）は先読み手段として備えられている。
【００３１】
メモリ（４）はプログラムを格納し、信号ライン２２でメモリアドレス信号ｍｅｍａｄｒ［３１：４］を、信号ライン２３でメモリリード信号ｍｅｍｒｅａｄを、それぞれ受け取り、信号ライン２１でメモリリードデータ信号ｍｅｍｒｄ［１２７：０］を出力する。
【００３２】
ここで、ｍｅｍａｄｒ［３１：４］の表記は、ｍｅｍａｄｒ［３１］、ｍｅｍａｄｒ［３０］、・・・、ｍｅｍａｄｒ［４］からなる２８ビットの信号を表記上まとめて記述したものである。本実施の形態の記載において、他の信号に関しても同様である。
【００３３】
なお、本実施の形態では、メモリのアクセスレイテンシを２、読み出し幅を１２８ビットとする。
【００３４】
ＣＰＵ（１）は、必要な命令コードをメモリ（４）などから読み出し、プログラムを実行する。図示しないが、メモリ等に格納されたデータに対して必要な数値演算、論理演算を行なうためのＡＬＵ（算術演算ユニット）、プログラムカウンタ、アキュムレータ、汎用レジスタ等を備える演算部と、入力された命令をデコードすることによって前記演算部の動作制御信号を生成する動作制御部とを備える。
【００３５】
ＣＰＵ（１）は、信号ライン１４でＣＰＵ（１）がアクセスする対象である命令コードおよびデータのアドレスを示すＣＰＵアドレス信号ｃｐｕａｄｒ［３１：０］を出力する。
【００３６】
ＣＰＵ（１）は、さらに、信号ライン１１でベクタテーブルの先頭アドレス信号ｖｂｒ［３１：０］を、信号ライン１２で退避プログラムカウンタ信号ｓｐｃ［３１：０］を、信号ライン１３でｓｐｃ［３１：０］の有効タイミングを示す信号ｓｐｃｕｐｄｔを、それぞれ先読みアドレス生成部（２）の演算用に出力する。
【００３７】
ＣＰＵ（１）には、さらに、ｃｐｕａｄｒ［３１：０］が示すアドレスにある命令又はデータの読み出し値であるＣＰＵリードデータ信号ｃｐｕｒｄ［３１：０］が信号ライン１５でセレクタ１（１０）から入力される。
【００３８】
ＣＰＵ（１）には、さらに、ｃｐｕｒｄ［３１：０］が確定していない場合にＣＰＵアクセスを停止するためのＣＰＵウエイト信号ｃｐｕｗａｉｔが信号ライン３５で制御部（３）から入力される。
【００３９】
ＣＰＵ（１）は、さらに、信号ライン３２で割り込み要求信号ｉｎｔｒｅｑを、信号ライン３３で割り込み要因信号ｉｎｔｖｅｃ［３：０］を、それぞれＩＮＴＣ（９）から入力し、信号ライン３６で割り込み受け付け信号ｉｎｔａｃｋをＩＮＴＣ（９）に出力する。
【００４０】
なお、本実施の形態では、ＣＰＵ（１）の命令幅を１６ビット、データ幅、およびアドレス空間を３２ビットとする。
【００４１】
先読みアドレス生成部（２）は、命令バッファ（８）に命令列が格納されると、格納された命令列の中から割り込み復帰命令を、その命令が実行される前に検出し、それらの命令に従って次にアクセスするアドレスを演算し、そのアドレスの命令が含まれる命令列をメモリ（４）から読み出す要求を生成する。
【００４２】
先読みアドレス生成部（２）は、さらに、信号ライン３２で割り込み要求信号ｉｎｔｒｅｑを、信号ライン３３で割り込み要因信号ｉｎｔｖｅｃ［３：０］を、それぞれＩＮＴＣ（９）から入力し、信号ライン３６で割り込み受け付け信号ｉｎｔａｃｋをＣＰＵ（１）から入力し、割り込みベクタテーブル、および割り込みルーチンをＣＰＵ（１）が読み込む前に、これらのターゲットアドレスを演算し、そのターゲットアドレスが含まれる命令列をメモリ（４）から読み出す要求を生成する。
【００４３】
以上の先読みのために、先読みアドレス生成部（２）は、信号ライン３０で先読み命令のアドレスを示す先読みアドレス信号ｐｆａｄｒ［３１：０］を、信号ライン２９で先読み要求が発生したことを示す信号である先読み要求信号ｐｆｒｅｑを、それぞれ制御部（３）に出力する。
【００４４】
先読みアドレス生成部（２）は、さらに、ＣＰＵ（１）からそれぞれ、ｖｂｒ［３１：０］、ｓｐｃ［３１：０］、ｓｐｃｕｐｄｔを、命令バッファ（８）から信号ライン１８で命令バッファ出力信号ｉｂｕｆ［１２７：０］を、データバッファ（７）から信号ライン１９でデータバッファ出力信号ｄｂｕｆ［１２７：０］を、制御部（３）からそれぞれ、信号ライン３１で信号ｐｆａｃｋ、信号ライン２７でｄｂｕｆ［１２７：０］の入力タイミングを示す先読みアップデート信号ｄｂｕｐｄｔを受け、ｐｆａｄｒ［３１：０］およびｐｆｒｅｑの演算に用いる。
【００４５】
キャッシュ（５）は、一度実行された命令、または一度参照されたデータ、先読みアドレス生成部（２）から先読み要求があった命令またはデータを格納しており、格納した命令またはデータは高速に読み出すことができる。
【００４６】
キャッシュ（５）からの命令の読み出しは、制御部（３）から信号ライン２４でキャッシュ読み出しアドレス信号ｃａｃｈｅａｄｒ［３１：４］を、信号ライン２５でキャッシュリード信号ｃａｃｈｅｒｅａｄを、それぞれ入力することで行う。ｃａｃｈｅａｄｒ［３１：４］が示すアドレスの命令が格納されている場合、信号ライン２６でキャッシュヒット信号ｃｈａｃｈｅｈｉｔをアサートし、同時に格納している命令をキャッシュリードデータｃａｃｈｅｒｄ［１２７：０］（信号ライン２０）として出力する。
【００４７】
実際は、キャッシュに格納している命令またはデータの更新を行う制御信号を、制御部（３）から入力するが、図１では詳細を省略し、メモリ（４）からの命令またはデータの読み出しと同時に適宜更新されるものとする。
【００４８】
命令バッファ（８）は、現在実行中の命令を含む命令列を保持し、それらは命令バッファ出力信号ｉｂｕｆ［１２７：０］（信号ライン１８）で出力する。
【００４９】
命令バッファ（８）は、信号ライン２８で命令バッファが保持している値の更新タイミングを示す命令バッファアップデート信号ｉｂｕｐｄｔの入力を受け、ｃａｃｈｅｒｄ［１２７：０］の信号を取り込む。
【００５０】
データバッファ（７）は、先読みアドレス生成部（２）から先読み要求があったベクタテーブルを保持し、それらはデータバッファ出力信号ｄｂｕｆ［１２７：０］（信号ライン１９）で出力する。データバッファ（７）は、信号ライン２７でデータバッファが保持している値の更新タイミングを示すデータバッファアップデート信号ｄｂｕｐｄｔの入力を受け、ｍｅｍｒｄ［１２７：０］の信号を取り込む。
【００５１】
セレクタ０（６）は、制御部（３）から信号ライン１７で選択信号ｓｅｌ０［１：０］を入力し、ｄｂｕｆ［１２７：０］、ｃａｃｈｅｒｄ［１２７：０］、ｍｅｍｒｄ［１２７：０］から一つの信号を選択し、選択結果をｓｅｌｒｄ［１２７：０］（信号ライン３４）に出力する。ｓｅｌ０［１：０］の値と選択される信号は２：ｄｂｕｆ［１２７：０］、１：ｃａｃｈｅｒｄ［１２７：０］、０：ｍｅｍｒｄ［１２７：０］である。
【００５２】
セレクタ１（１０）は、制御部（３）から信号ライン１６で選択信号ｓｅｌ１［１：０］を入力し、ｓｅｌｒｄ［１２７：０］から３２ビットを選択し、選択結果をｃｐｕｒｄ［３１：０］に出力する。ｓｅｌ１［３：０］の値と選択される信号は０：ｓｅｌｒｄ［１２７：９６］、１：ｓｅｌｒｄ［９５：６４］、２：ｓｅｌｒｄ［６３：３２］、３：ｓｅｌｒｄ［３１：０］となる。
【００５３】
以上説明の、セレクタ０（６）、セレクタ１（１０）への選択信号、ｓｅｌ０［１：０］、ｓｅｌ０［１：０］は、制御部（３）がＣＰＵ（１）からのアクセスに対応した命令またはデータを最も早く供給できる出力信号を適宜選択する。
【００５４】
ＩＮＴＣ（９）は、割り込み要求信号ｉｎｔｒｅｑ、および割り込み要因信号ｉｎｔｖｅｃ［３：０］を出力し、割り込み要因に対応した割り込みルーチンへの分岐をＣＰＵ（１）に要求する。
【００５５】
ＩＮＴＣ（９）は、ＣＰＵ（１）から、割り込みが受け付けられたことを示す割り込み受け付け信号ｉｎｔａｃｋが入力されるまで、ｉｎｔｒｅｑ、ｉｎｔｖｅｃ［３：０］を出力する。
【００５６】
制御部（３）は、ＣＰＵ（１）、先読みアドレス生成部（２）、メモリ（４）、キャッシュ（５）、セレクタ０（６）、データバッファ（７）、命令バッファ（８）、セレクタ１（１０）と制御信号を入出力することにより、ＣＰＵ（１）とメモリ（４）との間の命令およびデータ転送に関わる制御を行なう。
【００５７】
具体的には、後述するように、各種の制御信号の入力を受けて、必要な制御信号を所定のタイミングでアサートすることにより、各部の処理を制御する。
【００５８】
次に、各構成の詳細を説明する。詳細の説明に先立ち、本実施の形態において想定しているＣＰＵ（１）の動作、ＣＰＵ（１）が実行するプログラムが、本実施の形態においてメモリに格納される場合の配置について説明する。
【００５９】
図２は、ＣＰＵ（１）の動作を示すタイミングチャートである。
【００６０】
図２の上段は、ＣＰＵ（１）が実行する命令列の一例と、その命令列を処理する際のＣＰＵ（１）のパイプライン動作とを示したものである。
【００６１】
ＣＰＵ（１）は、命令をメモリ（４）から読み込む命令フェッチ（ＩＦ）ステージ、命令をデコードする命令デコード（ＩＤ）ステージ、命令を実行する実行（ＥＸ）ステージ、メモリ（４）からデータを読み出すメモリアクセス（ＭＡ）ステージ、メモリ（４）への書き込みを行うライトバック（ＷＢ）ステージの５段パイプラインで１つの命令を処理する。
【００６２】
なお、メモリ（４）へのアクセスは、各命令のＩＦステージ、ＭＡステージ、ＷＢステージで発生する。また、ＩＦステージ、ＩＤステージ、ＥＸステージは必ず実行されるが、ＭＡステージ、ＷＢステージは命令によって実行されない場合がある。また３２ビット幅のバスで１６ビットの命令を２命令同時に読み込むため、命令の２回に１回はＩＦステージが実行されない。図２においては、実行されない命令ステージは小文字で示している。
【００６３】
図２の下段は、図２の上段で示すパイプライン動作に対応して発生するＣＰＵ（１）の各入出力信号波形を示したものである。
【００６４】
図２において、サイクル０は、アドレス１２８の命令６４のＩＦステージである。サイクル０では、ＣＰＵ（１）からｃｐｕａｄｒにアドレス１２８が出力され、アドレス１２８にある命令へのアクセスが発生する。
【００６５】
続くサイクル１は、サイクル１のアクセスに対するデータが、メモリの出力遅延等の要因で確定しない状況を示している。この時、制御部（３）は、ｃｐｕｗａｉｔをアサートし、ＣＰＵ（１）に命令処理の中断を指示する。
【００６６】
続くサイクル２にてデータが確定し、ｃｐｕｗａｉｔのネゲートを受けて、ＣＰＵ（１）は、処理を再開する。サイクル２では、サイクル０のアクセスに対するアドレス１２８の命令がｃｐｕｒｄからＣＰＵ（１）に入力される。
【００６７】
なお、図２においては、アドレス１２８のアドレス出力および、同アクセスに対して読み出された命令およびデータを「ａ１２８」の通り表記する。
【００６８】
サイクル３で、ＩＮＴＣ（９）は、割り込み要求信号ｉｎｔｒｅｑ、および割り込み要因信号ｉｎｔｖｅｃ［３：０］に割り込み要因２を出力し、割り込み要因２に対応した割り込みルーチンへの分岐をＣＰＵ（１）に要求する。
【００６９】
サイクル４で、ＣＰＵ（１）は割り込み要因２の割り込みの受け付けを、ｉｎｔａｃｋアサートにてＩＮＴＣ（９）に伝達し、次のサイクル５から割り込み要因２の割り込みルーチンへの分岐処理を開始する。
【００７０】
サイクル５で、ＣＰＵ（１）は割り込みルーチンから復帰する時の復帰先アドレスを内蔵ＲＡＭ等の記憶素子に退避するために、復帰先のアドレス１３０をｓｐｃ［３１：０］に出力し、ｓｐｃ［３１：０］の有効タイミングを示す信号ｓｐｃｕｐｄｔをアサートする。なお、図１の全体構成図においては、内蔵ＲＡＭ等の記憶素子、およびｓｐｃ［３１：０］、ｓｐｃｕｐｄｔとの接続は省略している。
【００７１】
サイクル６で、ＣＰＵ（１）は割り込みベクタテーブルをメモリから読み込む。
【００７２】
ここで、割り込みベクタテーブルとは、割り込み要因に対応した割り込みルーチンの先頭アドレス（割り込みベクタ）を格納したテーブルで、ｖｂｒ［３１：０］が示すアドレスを先頭に、割り込み要因０から順に配置されている。本実施の形態の例ではｖｂｒ［３１：０］＝０に設定されており、割り込みベクタのアドレスは、割り込み要因０から順に０、４、８、・・・となる。
【００７３】
受け付けた割り込み要因２の割り込みベクタをメモリから読み込むために、アドレス８へのアクセスを行う。
【００７４】
サイクル７で、割り込み要因２の割り込みベクタが読み出される。本実施の形態の例では割り込み要因２の割り込みベクタ＝５１２とする。
【００７５】
サイクル８から割り込み要因２の割り込みルーチンの先頭アドレス５１２へのアクセスを開始する。
【００７６】
サイクルｎは、割り込みルーチンからの復帰命令ＲＴＥのＩＦステージである。ＲＴＥのＩＤ、ＥＸステージを経て、サイクルｎ＋３、ｎ＋４にて内蔵ＲＡＭ等の記憶素子に退避した復帰先のアドレス１３２を読み込む。なお、図１において、退避した復帰先アドレスをＣＰＵ（１）が読み込むための信号は省略している。
【００７７】
サイクルｎ＋５で復帰先アドレスの命令がアクセスされ、以降メインルーチンの命令処理が続く。
【００７８】
図３は、プログラムをメモリ（４）に格納する場合の、アドレスとビット、エントリの関係を示す説明図である。
【００７９】
図３に示すように、プログラムを構成する命令およびデータは、アドレスの小さい順にビットの大きい側から順番に配置され、８の命令（またはデータ）単位で１エントリを構成する。以後、１エントリを構成する命令またはデータの列を命令列と呼ぶ。
【００８０】
なお、本実施の形態においては、メモリ（４）へのアクセスは、エントリ単位で行われる。例えば、アドレス０、２、４、６、８、１０、１２、１４に対するアクセスは、エントリ０へのアクセスとして同時に行なわれる。また図３に示すエントリ０、エントリ８、エントリ３２、エントリ５０は、それぞれ、割り込みベクタ、メインルーチン、割り込み要因２に対応する割り込みルーチンの先頭命令、ＲＴＥ命令、とを格納する。
【００８１】
このようなメモリ（１）に１６ビット幅の命令あるいはデータを格納する場合、アドレスの各ビットは、
ビット１５〜４：エントリ
ビット３〜１：同一エントリ内の命令あるいはデータの位置
ビット０：命令あるいはデータの上位８ビット、下位８ビット
の以上を区別する役割を持つ。
【００８２】
次に、メモリ（４）の動作を説明する。図４は、メモリ（４）の動作を示すタイミングチャートである。
【００８３】
サイクル０にて、制御部（３）が、ｍｅｍａｄｒにエントリ０を出力し、ｍｅｍｒｅａｄをアサートすることで、メモリ（４）に対してエントリ０へのリード要求を出す。なお、図４においては、エントリ０のアドレス出力および、同アクセスに対して読み出された命令およびデータを「ｅ０」の通り表記する。
【００８４】
本実施の形態では、メモリのアクセスレイテンシは２サイクルと設定されているため、このアクセスに対するデータは、サイクル２にて確定し、ここで、メモリ（４）は、ｍｅｍｒｄに命令またはデータを出力する。
【００８５】
このようなアクセスレイテンシ２を持つメモリ（４）と、連続する命令のみをキャッシュに先読みする構成にてプログラムを実行した場合のタイミングチャートを図５に示す。
【００８６】
なお、実行する命令、割り込み要求のタイミング、割り込み要因、は、前述した図２にて説明の動作と同一のものとする。
【００８７】
図５に示す様に、ＣＰＵのアクセスが不連続となる、割り込みベクタへのアクセス（サイクル６）、割り込みルーチン先頭命令へのアクセス（サイクル１０）、割り込み復帰先の先頭命令へのアクセス（サイクルｎ＋５）、においてキャッシュミスが発生し、アクセス先の命令またはデータが確定するまでの間ＣＰＵの処理が中断し、性能が低下する。
【００８８】
次に、先読みアドレス生成部（２）の詳細を説明する。図６は、先読みアドレス生成部（２）の詳細を示す構成図である。
【００８９】
先読みアドレス生成部（２）は、入力された命令がＲＴＥ命令であるかをデコードする８つの命令種プリデコーダ、すなわち、命令プリデコーダ０（２１０）、命令プリデコーダ１（２１１）、・・・、命令プリデコーダ７（２１７）と、ＯＲゲート（２０３）、先読み要求ステートマシン（２０１）、アドレス演算部（２０２）とを備える。
【００９０】
ｉｂｕｆ［１２７：０］は、１６ビット毎に区切られ、それぞれ、命令プリデコーダ０（２１０）、命令プリデコーダ１（２１１）、・・・、命令プリデコーダ７（２１７）とに入力される。
【００９１】
例えば、命令プリデコーダ０（２１０）には、ｉｂｕｆ［１２７：０］が出力するエントリの命令列における先頭アドレスの命令が入力される。命令プリデコーダ０（２１０）は、入力された命令がＲＴＥ命令であった場合、信号ライン２２０にデコードした命令がＲＴＥ命令であることを示す信号ｒｔｎ０をアサートする。
【００９２】
命令プリデコーダ１（２１１）も同様に、ｉｂｕｆ［１２７：０］が出力するエントリの命令列における２番目の命令をデコードして、結果を信号ライン２２１で信号ｒｔｎ１として出力する。
【００９３】
さらに３番目、４番目、・・・、６番目の命令またはデータも同様にその種類がデコードされる。そして、命令プリデコーダ７（２１７）も同様に、ｉｂｕｆ［１２７：０］が出力するエントリの命令列における８番目の命令をデコードして、結果を信号ライン２２７で信号ｒｔｎ７として出力する。
【００９４】
ｒｔｎ０、ｒｔｎ０、・・・、ｒｔｎ７はＯＲゲート（２０３）により論理和が演算され、結果を信号ライン２０４で信号ｒｔｎとして出力する。以上に述べた構成により、ｉｂｕｆ［１２７：０］が出力するエントリの命令列の中に一つでもＲＴＥ命令が存在すればｒｔｎがアサートされる。
【００９５】
ｒｔｎ（２０４）、ｄｂｕｐｄｔ（２７）、ｐｆａｃｋ（３１）、ｉｎｔｒｅｑ（３２）は先読み要求ステートマシン（２０１）の、ステート遷移の条件として入力される。また先読み要求ステートマシン（２０１）は現在のステートをデコードして、結果をｐｆｒｅｑ（２９）、ｐｆｔｙｐｅ（２０５）として出力する。
【００９６】
ステートとステート間遷移条件、ステートに対応した出力については、後述する図７、図８にて詳細を説明する。
【００９７】
アドレス演算部（２０２）は、ｐｆｔｙｐｅ（２０５）、ｄｂｕｆ［１２７：０］（１９）、ｉｎｔｖｅｃ［８：０］（３３）、ｖｂｒ［３１：０］（１１）、ｓｐｃ［３１：０］（１２）、ｓｐｃｕｐｄｔ（１３）、ｉｎｔａｃｋ（３６）を入力し先読みをするアドレスを演算し、信号ライン３０で先読み命令のターゲットアドレスを示す先読みアドレス信号ｐｆａｄｒ［３１：０］を出力する。アドレス演算部（２０２）の詳細は、後述する図９にて説明する。
【００９８】
図７は、先読み要求ステートマシン（２０１）のステート遷移を示す説明図である。
【００９９】
先読み要求ステートマシン（２０１）の状態は、何も要求を出さないＩＤＬＥステート、割り込みベクタの先読みを行うＶＥＣＦ０ステート、ＶＥＣＦ１ステート、割り込みルーチン先頭アドレスの先読みを行うＪＭＰ０ステート、ＪＭＰ１ステート、割り込みからの復帰先アドレスの先読みを行うＲＴＮステート、の６ステートから構成される。初期状態はＩＤＬＥステートである。
【０１００】
ＩＤＬＥステートは、ｉｎｔｒｅｑ＝０で同状態に、ｉｎｔｒｅｑ＝１でＶＥＣＦ０ステートに、ｒｔｎ＝１でＲＴＮステートに、それぞれ遷移する。
【０１０１】
ＶＥＣＦ０ステートは、ｐｆａｃｋ＝０で同状態に、ｐｆａｃｋ＝１でＶＥＣＦ１ステートに、それぞれ遷移する。
【０１０２】
ＶＥＣＦ１ステートは、ｄｂｕｐｄｔ＝０で同状態に、ｄｂｕｐｄｔ＝１でＪＭＰ０ステートに、それぞれ遷移する。
【０１０３】
ＪＭＰ０ステートは、無条件でＪＭＰ１ステートに遷移する。
【０１０４】
ＪＭＰ１ステートは、ｐｆａｃｋ＝０で同状態に、ｐｆａｃｋ＝１でＩＤＬＥステートに、それぞれ遷移する。
【０１０５】
ＲＴＮステートは、ｐｆａｃｋ＝０で同状態に、ｐｆａｃｋ＝１でＩＤＬＥステートに、それぞれ遷移する。
【０１０６】
図８は、前述した図７に示した各ステートに対応した出力ｐｆｒｅｑ（２９）、ｐｆｔｙｐｅ（２０５）を示す説明図である。図示するように、ＶＥＣＦ０ステート、ＪＭＰ１ステート、ＲＴＮステートで制御部（３）に先読み要求ｐｆｒｅｑをアサートし、先読みの種類ｐｆｔｙｐｅをアドレス演算部（２０２）に出力する。ここでｐｆｔｙｐｅの意味は、
０：先読みなし
１：割り込みベクタの先読みを要求
２：割り込みルーチン先頭命令先読みを要求
３：割り込み復帰先命令先読みを要求
と定義されている。
【０１０７】
図９は、アドレス演算部（２０２）の詳細を示す構成図である。アドレス演算部（２０２）は、ＩＮＴＶＥＣ保持レジスタ（４１２）、２ビット左シフタ（４０１）、加算器（４０２）、セレクタ０（４０３）、退避ＰＣ保持レジスタ（４０４）、セレクタ１（４０５）から構成される。
【０１０８】
ＩＮＴＶＥＣ保持レジスタ（４１２）は、ｉｎｔａｃｋ（３６）のアサートで、ｉｎｔｖｅｃ［３：０］（３３）の値を取り込み、保持している値を信号ライン４１３で信号ｉｎｔｖｅｃ１［３：０］（４１３）として出力する。
【０１０９】
２ビット左シフタ（４０１）は、ｉｎｔｖｅｃ１［３：０］（４１３）を２ビット左シフトし、最下位ビット２ビット０を追加する演算、すなわち入力を４倍する演算を行い、結果を信号ライン４０５でベクタオフセット信号ｖｅｃｏｆｓｔ［５：０］として出力する。
【０１１０】
加算器（４０２）は、ｖｂｒ［３１：０］（１１）とｖｅｃｏｆｓｔ［５：０］（４０５）を加算し、結果を信号ライン４１１でベクタアドレス信号ｖｅｃａｄｒ［３１：０］として出力する。
【０１１１】
セレクタ０（４０３）は、ｉｎｔｖｅｃ１［３：０］（４１３）の下位２ビットｉｎｔｖｅｃ１［１：０］を選択信号として入力し、ｄｂｕｆ［１２７：０］（１９）から３２ビットを選択し、信号ライン４０６で割り込みルーチン先頭アドレス信号ｊｍｐａｄｒ［３１：０］として出力する。ｉｎｔｖｅｃ１［３：０］と選択されるビットとの関係は０：ｄｂｕｆ［１２７：９６］、１：ｄｂｕｆ［９５：６４］、２：ｄｂｕｆ［６３：３２］、３：ｄｂｕｆ［３１：０］である。
【０１１２】
退避ＰＣ保持レジスタ（４０４）は、ｓｐｃｕｐｄｔ（１３）のアサートで、ｓｐｃ［３１：０］（１２）の値を取り込み、保持している値を信号ライン４０７で復帰先アドレス信号ｒｔｎａｄｒ［３１：０］として出力する。
【０１１３】
セレクタ１（４０５）は、ｐｆｔｙｐｅ［１：０］（２０５）を選択信号として入力し、３２ビット０固定値、ｖｅｃａｄｒ［３１：０］（４１１）、ｊｍｐａｄｒ［３１：０］（４０６）、ｒｔｎａｄｒ［３１：０］（４０７）から一つを選択し、結果を先読みアドレス信号ｐｆａｄｒ［３１：０］（３０）に出力する。ｐｆｔｙｐｅ［１：０］と選択される信号との対応は０：固定値、１：ｖｅｃａｄｒ［３１：０］、２：ｊｍｐａｄｒ［３１：０］、３：ｒｔｎａｄｒ［３１：０］である。なお、本実施の形態の例では、ｐｆｔｙｐｅ［１：０］＝０の場合、３２ビット０固定値を選択するとしたが、先読み要求を出していないので、値は３２ビット０固定値に限らず任意の値でも良い。
【０１１４】
次に、本実施の形態の情報処理装置の動作を説明する。
【０１１５】
図１０は、以上説明した本実施の形態における情報処理装置の動作を示すタイミングチャートである。なお、実行する命令、割り込み要求のタイミング、割り込み要因は、前述した図５にて説明の動作と同一のものとする。
【０１１６】
サイクル３で、ＩＮＴＣ（９）は、割り込み要求信号ｉｎｔｒｅｑ、および割り込み要因信号ｉｎｔｖｅｃ［８：０］に割り込み要因２を出力し、割り込み要因２に対応した割り込みルーチンへの分岐をＣＰＵ（１）に要求する。同サイクルで、先読み要求ステートマシン（２０１）のステートが、ＶＥＣＦ０ステートへと遷移し、ｐｆｒｅｑをアサートする。さらに、割り込み要因２の割り込みベクタのアドレスを、アドレス演算部（２０２）にて演算しアドレス８をｐｆａｄｒ［３１：０］に出力する。
【０１１７】
次に、サイクル４で制御部（３）は、アドレス８の先読み要求を受け、ｍｅｍａｄｒにエントリ０を出力、ｍｅｍｒｅａｄをアサートし、メモリ（４）に対してエントリ０へのリード要求を出す。同サイクルで、制御部（３）からのｐｆａｃｋアサートを受け、先読み要求ステートマシン（２０１）のステートが、ＶＥＣＦ１へ遷移する。
【０１１８】
サイクル５で、ＣＰＵ（１）は割り込みルーチンから復帰する場合の復帰先のアドレスを内蔵ＲＡＭ等の記憶素子に退避するために、復帰先のアドレス１３０をｓｐｃ［３１：０］に出力し、ｓｐｃ［３１：０］の有効タイミングを示す信号ｓｐｃｕｐｄｔをアサートする。同サイクルで、アドレス演算部（２０２）は、退避ＰＣ保持レジスタ（４０４）に復帰先のアドレスを保持し、復帰先のアドレスの先読みに使用する。
【０１１９】
次に、サイクル６で、ＣＰＵ（１）は受け付けた割り込み要因２の割り込みベクタをメモリから読み込むために、アドレス８へのアクセスを行う。
【０１２０】
さらに同サイクルで、サイクル４にて先読みを行ったエントリ８のリードデータがメモリ（４）からｍｅｍｒｄ［１２７：０］に出力され、制御部（３）はｍｅｍｒｄ［１２７：０］をデータバッファ（７）に取り込むためｄｂｕｐｄｔをアサートする。
【０１２１】
さらに同サイクルで、ｄｂｕｐｄｔのアサートを受け先読み要求ステートマシン（２０１）のステートが、ＪＭＰ０へ遷移する。
【０１２２】
次に、サイクル７で、割り込み要因２の割り込みベクタが読み出される。サイクル３〜６にて予め割り込み要因２の割り込みベクタの先読みを行っていたので、メモリアクセスのレイテンシによるアクセスの中断が発生しない。
【０１２３】
さらに同サイクルで、先読み要求ステートマシン（２０１）のステートが、ＪＭＰ１へ遷移し、ｐｆｒｅｑをアサートする。さらに、アドレス演算部（２０２）は、割り込みベクタが格納されたｄｂｕｆ［１２７：０］から割り込み要因２の割り込みルーチンの先頭アドレスを選択し、アドレス５１２をｐｆａｄｒ［３１：０］に出力する。
【０１２４】
次に、サイクル８で、割り込み要因２の割り込みルーチンの先頭アドレス５１２へのアクセスを開始する。さらに同サイクルで、制御部（３）は、アドレス５１２の先読み要求を受け、ｍｅｍａｄｒにエントリ３２を出力、ｍｅｍｒｅａｄをアサートし、メモリ（４）に対してエントリ３２へのリード要求を出す。
【０１２５】
さらに同サイクルで、制御部（３）からのｐｆａｃｋアサートを受け、先読み要求ステートマシン（２０１）のステートが、ＩＤＬＥへ遷移する。
【０１２６】
次に、サイクル１０で、割り込み要因２の割り込みルーチン先頭命令が読み出される。サイクル７〜１０にて予め割り込み要因２の割り込みルーチン先頭命令の先読みを行っていたので、メモリアクセスのレイテンシによるアクセスの中断が１サイクルに収まる。
【０１２７】
なお、本実施の形態の例では、サイクル７より割り込み要因２の割り込みルーチン先頭命令の先読みを行っているが、先読みアドレス生成部（２）を、割り込みベクタが格納されたｍｅｍｒｄ［１２７：０］から割り込みルーチン先頭命令のアドレスを選択する構成とすることで、サイクル６で先読みを開始することも可能である。その場合、メモリアクセスのレイテンシによるアクセスの中断はなくなる。
【０１２８】
次に、サイクルｎ−２でエントリ５０が最初にヒットし、制御部は、命令バッファ（８）にエントリ５０を格納するため、ｉｂｕｐｄｔをアサートする。
【０１２９】
次に、サイクルｎ−１で、先読みアドレス生成部（２）にてｉｂｕｆ［１２７：０］からＲＴＥ命令がデコードされ、先読み要求ステートマシン（２０１）のステートが、ＲＴＮへ遷移し、ｐｆｒｅｑをアサートする。さらに、アドレス演算部（２０２）にて、サイクル５で退避ＰＣ保持レジスタ（４０４）に保持していた割り込み復帰先のアドレスを選択し、アドレス１３２をｐｆａｄｒ［３１：０］に出力する。
【０１３０】
次に、サイクルｎで制御部（３）は、アドレス１３２の先読み要求を受け、ｍｅｍａｄｒにエントリ８を出力、ｍｅｍｒｅａｄをアサートし、メモリ（４）に対してエントリ８へのリード要求を出す。同サイクルで、制御部（３）からのｐｆａｃｋアサートを受け、先読み要求ステートマシン（２０１）のステートが、ＩＤＬＥへ遷移する。
【０１３１】
次に、サイクルｎ＋４で復帰先アドレスの命令がアクセスされ、続くサイクルｎ＋５で、復帰先アドレスの命令が読み出される。サイクルｎ−１〜ｎ＋２にて予め復帰先アドレスの命令の先読みを行っていたので、メモリアクセスのレイテンシによるアクセスの中断が発生しない。
【０１３２】
ここで、本実施の形態の例では先読みアドレス生成部（２）にて、割り込みルーチンからの復帰命令ＲＴＥ命令をデコードし、復帰先のアドレスの先読みを行ったが、サブルーチンからの復帰命令等の、退避した復帰先のアドレスに分岐する命令をすべてデコードし、復帰先の先読みを行う形態でも良い。
【０１３３】
以上より、本実施の形態によれば、割り込みの多いアプリケーションにおいても、効果的な先読みを行い、高性能で高いリアルタイム性を持つ情報処理技術を提供することができる。
【０１３４】
（実施の形態２）
本発明の実施の形態２を、図１１〜図２１に基づいて説明する。
【０１３５】
図１１は、本発明の実施の形態２の情報処理装置の全体を示す構成図である。
【０１３６】
本実施の形態の情報処理装置は、ＣＰＵ（１）、メモリ（４）、キャッシュ（５）、セレクタ０（６）、セレクタ１（１０）、先読みアドレス生成部（１１０１）、サブルーチン復帰命令バッファ（１１０２）、命令バッファ（１１０３）、制御部（１１１１）から構成される。
【０１３７】
ＣＰＵ（１）、メモリ（４）、キャッシュ（５）、セレクタ０（６）、セレクタ１（１０）の機能は、前記実施の形態１と同様であり、図１にて説明しているので、ここでの説明は省略する。
【０１３８】
先読みアドレス生成部（１１０１）は、命令バッファ（１１０３）に命令列が格納されると、格納された命令列の中から分岐命令列を検出し、それらの命令に従って次にアクセスするアドレスを演算し、そのアドレスの命令が含まれる命令列をメモリ（４）から読み出す要求を生成する。分岐命令列の例は図１５にて後述する。
【０１３９】
以上の先読みのために、先読みアドレス生成部（１１０１）は、信号ライン３０で先読み命令のアドレスを示す先読みアドレス信号ｐｆａｄｒ［３１：０］を、信号ライン２９で先読み要求が発生したことを示す信号である先読み要求信号ｐｆｒｅｑを、それぞれ制御部（１１１１）に出力する。
【０１４０】
先読みアドレス生成部（１１０１）は、さらに、命令バッファ（１１０３）から、信号ライン１１０４で命令バッファ出力信号ｉｂｕｆ［１７５：０］を、信号ライン１１０８で命令バッファ上位ビット有効信号ｉｂｖｈを、制御部（１１１１）から、信号ライン３１で信号ｐｆａｃｋを、それぞれ受け、ｐｆａｄｒ［３１：０］およびｐｆｒｅｑの演算に用いる。
【０１４１】
また先読みアドレス生成部（１１０１）は、命令バッファ（１１０３）に命令列が格納されると、格納された命令列の中からサブルーチン分岐命令を検出し、それに伴い信号ライン１１０５でサブルーチン復帰命令更新信号ｒｔｓｕｐｄｔをアサートする。
【０１４２】
命令バッファ（１１０３）は、現在ＣＰＵがアクセス中の命令を含む命令列、および前回ＣＰＵがアクセスしていた命令列を保持し、それらは命令バッファ出力信号ｉｂｕｆ［１７５：０］（信号ライン１１０４）で出力する。ｉｂｕｆ［１７５：０］の上位ビットｉｂｕｆ［１７５：１２８］の有効を、命令バッファ上位ビット有効信号ｉｂｖｈ（信号ライン１１０８）で出力する。また、命令バッファ（１１０３）が保持している命令列のアドレスをｉｔａｇ［３１：４］（信号ライン１１０９）で出力する。
【０１４３】
命令バッファ（１１０３）は、信号ライン２８で命令バッファが保持している命令列の更新タイミングを示す命令バッファアップデート信号ｉｂｕｆｕｐｄの入力を受け、ｃａｃｈｅａｄｒ［３１：４］、およびｃａｃｈｅｒｄ［１２７：０］を取り込む。
【０１４４】
サブルーチン復帰命令バッファ（１１０２）には、サブルーチン分岐命令を含む命令列を複数組退避する。ｃａｃｈｅａｄｒ［３１：４］、ｃａｃｈｅｒｅａｄを入力し、同信号が示すキャッシュ（５）に対するリードに対して、退避された複数組の命令列のヒット判定を行い、ヒットしている場合、サブルーチン復帰命令バッファヒット信号ｒｔｓｈｉｔ（信号ライン１１０６）をアサートし、ヒットしている命令列をサブルーチン復帰命令バッファリードデータｒｔｓｂｕｆｒｄ［１２７：０］（信号ライン１１０７）に出力する。
【０１４５】
サブルーチン復帰命令バッファ（１１０２）は、信号ライン１１０５でサブルーチン復帰命令バッファが保持している命令列の更新タイミングを示すサブルーチン復帰命令バッファアップデート信号ｒｔｓｕｐｄｔの入力を受け、ｉｔａｇ［３１：４］、およびｉｂｕｆ［１２７：０］を取り込む。
【０１４６】
制御部（１１１１）は、メモリ（４）、ＣＰＵ（１）、先読みアドレス生成部（１１０１）、キャッシュ（５）、セレクタ０（６）、セレクタ１（１０）、命令バッファ（１１０３）、サブルーチン復帰命令バッファ（１１０２）と制御信号を入出力することにより、ＣＰＵ（１）とメモリ（４）との間の命令およびデータ転送に関わる制御を行う。
【０１４７】
具体的には、後述するように、各種の制御信号の入力を受けて、必要な制御信号を所定のタイミングでアサートすることにより、各部の処理を制御する。
【０１４８】
次に、各構成の詳細を説明する。
【０１４９】
図１２は、命令バッファ（１１０３）の詳細を示す構成図である。
【０１５０】
命令バッファ（１１０３）は、フリップフロップ（１２２０）、現命令タグ（１２０３）、現命令バッファ（１２０１）、前命令タグ（１２０４）、前命令バッファ（１２０２）、加算器（１２０５）、比較器（１２０８）、ドライバ（１２２１）、ドライバ（１２０６）、ドライバ（１２０７）を備える。
【０１５１】
フリップフロップ（１２２０）は、ｃａｃｈｅａｄｒ［３１：４］（２４）を入力し、１サイクル後に入力値をｃａｃｈｅａｄｒ１［３１：４］（信号ライン１２１４）に出力する。
【０１５２】
現命令タグ（１２０３）は、現命令バッファ（１２０１）が格納する命令列のアドレスを保持する。ｉｂｕｐｄｔ（２８）のアサートで、ｃａｃｈｅａｄｒ１［３１：４］（１２１４）の値を取り込み、保持している値をｉｔａｇ０［３１：４］（信号ライン１２１０）に出力する。
【０１５３】
現命令バッファ（１２０１）は、ｉｂｕｐｄｔ（２８）のアサートで、ｃａｃｈｅｒｄ［１２７：０］（２０）の値を取り込み、保持している値をｉｂｕｆ０［１２７：０］（信号ライン１２１１）に出力する。
【０１５４】
前命令タグ（１２０４）は、前命令バッファ（１２０２）が格納する命令列のアドレスを保持する。ｉｂｕｐｄｔ（２８）のアサートで、ｉｔａｇ０［３１：４］（１２１０）の値を取り込み、保持している値をｉｔａｇ１［３１：４］（信号ライン１２１２）に出力する。
【０１５５】
前命令バッファ（１２０２）は、ｉｂｕｐｄｔ（２８）のアサートで、ｉｂｕｆ０［１２７：０］（１２１１）のうちｉｂｕｆ０［４７：０］を取り込み、保持している値をｉｂｕｆ１［４７：０］（信号ライン１２１３）に出力する。
【０１５６】
加算器（１２０５）は、ｉｔａｇ１［３１：４］（１２１２）に１を足した演算結果をｉｔａｇ２［３１：４］（信号ライン１２１４）に出力する。
【０１５７】
比較器（１２０８）は、ｉｔａｇ０［３１：４］（１２１０）とｉｔａｇ２［３１：４］（１２１４）とを比較し、一致する場合、信号ライン１１０８で命令バッファ上位ビット有効信号ｉｂｖｈをアサートする。ｉｂｖｈ（１１０８）アサートはすなわち、現命令バッファ（１２０１）が格納する命令列と前命令バッファ（１２０２）が格納する命令列が連続することを意味する。
【０１５８】
ドライバ（１２２１）は、ｉｔａｇ０［３１：４］（１２１０）を入力し、入力した値をｉｔａｇ［３１：４］（信号ライン１１０９）に出力する。
【０１５９】
ドライバ（１２０６）、およびドライバ（１２０７）は、ｉｂｕｆ０［１２７：０］（１２１１）、ｉｂｕｆ１［４７：０］（１２１３）をそれぞれ入力し、入力した値を、ｉｂｕｆ［１７５：０］（１１０４）のうちｉｂｕｆ［１２７：０］に、ｉｂｕｆ［１７５：０］（１１０４）のうちｉｂｕｆ［１７５：１２８］に、それぞれ出力する。ｉｂｖｈ（１１０８）アサート時、ｉｂｕｆ［１７５：０］（１１０４）は連続する１１命令を出力する。
【０１６０】
図１３は、サブルーチン復帰命令バッファ（１１０２）の詳細を示す構成図である。
【０１６１】
サブルーチン復帰命令バッファ（１１０２）は、ＡＮＤゲート（１３０５）、ＲＴＳタグ０（１３００）、有効ビット０（１３０１）、ヒットビット０（１３０２）、ＲＴＳバッファ０（１３０３）、比較器０（１３０４）、ＡＮＤゲート（１３２５）、ＲＴＳタグ１（１３２０）、有効ビット１（１３２１）、ヒットビット１（１３２２）、ＲＴＳバッファ１（１３２３）、比較器１（１３２４）、ＯＲゲート（１３４０）、ＡＮＤゲート（１３４３）、セレクタ（１３４１）、フリップフロップ（１３４４）、ＲＴＳ更新ポインタ生成回路（１３４２）を備える。
【０１６２】
なお、本実施の形態では、サブルーチン復帰命令バッファ（１１０２）は、ＲＴＳバッファ０（１３０３）、およびＲＴＳバッファ１（１３２３）に最大２つのエントリを保持する。
【０１６３】
ＡＮＤゲート（１３０５）は、サブルーチン復帰命令バッファアップデート信号ｒｔｓｕｐｄｔ（１１０５）とｒｔｓｐｎｔ［０］との論理積を、ＲＴＳバッファ０更新信号ｒｓｔｕｐｄｔ０（信号ライン１３１４）に出力する。なお、ｒｔｓｐｎｔ［０］は、更新するＲＴＳバッファを示すＲＴＳ更新ポインタ信号ｒｔｓｐｎｔ［１：０］（信号ライン１３５２）のビット０である。
【０１６４】
ＲＴＳタグ０（１３００）は、ＲＴＳバッファ０（１３０３）が格納する命令列のアドレスを保持する。ｒｓｔｕｐｄｔ０（１３１４）のアサートで、ｉｔａｇ［３１：４］（１１０９）の値を取り込み、保持している値をｒｔｓｔａｇ０［３１：４］（信号ライン１３１０）に出力する。
【０１６５】
有効ビット０（１３０１）は、ＲＴＳバッファ０（１３０３）が格納する命令列の有効、無効の状態（１：有効、０：無効）を格納し、格納した値をｖ０（信号ライン１３１１）に出力する。有効ビット０（１３０１）の初期値は０で、ｒｓｔｕｐｄｔ０（１３１４）のアサートで１にセットされる。
【０１６６】
ＲＴＳバッファ０（１３０３）は、ｒｓｔｕｐｄｔ０（１３１４）のアサートで、ｉｂｕｆ［１２７：０］（１１０４）の値を取り込み、保持している値をｒｔｓｂｕｆ０［１２７：０］（信号ライン１３１５）に出力する。
【０１６７】
比較器０（１３０４）は、ｃａｃｈｅａｄｒ［３１：４］（２４）とｒｔｓｔａｇ０［３１：４］（１３１０）とｖ０（１３１１）とを入力し、ｃａｃｈｅａｄｒ［３１：４］（２４）とｒｔｓｔａｇ０［３１：４］（１３１０）が一致し、かつｖ０（１３１１）が１の場合、信号ライン１３１３でＲＴＳバッファ０ヒット信号ｒｔｓｈｉｔ０をアサートする。ｒｔｓｈｉｔ０アサートは、すなわち、ｃａｃｈｅａｄｒ［３１：４］（２４）で示すアドレスの命令列をＲＴＳバッファ０（１３０１）が格納し、ＲＴＳバッファ０（１３０３）がその命令列を出力できること（ＲＴＳバッファ０ヒット）を意味する。
【０１６８】
ヒットビット０（１３０２）は、ＲＴＳバッファ０（１３０３）が格納する命令列のヒット有無（１：ヒット有、０：ヒット無し）を格納し、格納した値をｈｉｔ０（信号ライン１３１２）に出力する。ヒットビット０（１３０２）の初期値は０で、ｒｓｔｈｉｔ０（１３１３）のアサートでセット、ｒｓｔｕｐｄｔ０（１３１４）のアサートでリセットされる。
【０１６９】
ＡＮＤゲート（１３２５）は、サブルーチン復帰命令バッファアップデート信号ｒｔｓｕｐｄｔ（１１０５）とｒｔｓｐｎｔ［１］との論理積を、ＲＴＳバッファ１更新信号ｒｓｔｕｐｄｔ１（信号ライン１３３４）に出力する。
【０１７０】
ＲＴＳタグ１（１３２０）は、ＲＴＳバッファ１（１３２３）が格納する命令列のアドレスを保持する。ｒｓｔｕｐｄｔ１（１３３４）のアサートで、ｉｔａｇ［３１：４］（１１０９）の値を取り込み、保持している値をｒｔｓｔａｇ１［３１：４］（信号ライン１３３０）に出力する。
【０１７１】
有効ビット１（１３２１）は、ＲＴＳバッファ１（１３２３）が格納する命令列の有効、無効の状態（１：有効、０：無効）を格納し、格納した値をｖ１（信号ライン１３３１）に出力する。有効ビット１（１３２１）の初期値は０で、ｒｓｔｕｐｄｔ１（１３３４）のアサートで１にセットされる。
【０１７２】
ＲＴＳバッファ１（１３２３）は、ｒｓｔｕｐｄｔ１（１３３４）のアサートで、ｉｂｕｆ［１２７：０］（１１０４）の値を取り込み、保持している値をｒｔｓｂｕｆ１［１２７：０］（信号ライン１３３５）に出力する。
【０１７３】
比較器１（１３２４）は、ｃａｃｈｅａｄｒ［３１：４］（２４）とｒｔｓｔａｇ１［３１：４］（１３３０）とｖ１（１３３１）とを入力し、ｃａｃｈｅａｄｒ［３１：４］（２４）とｒｔｓｔａｇ１［３１：４］（１３３０）が一致し、かつｖ１（１３３１）が１の場合、信号ライン１３３３でＲＴＳバッファ１ヒット信号ｒｔｓｈｉｔ１をアサートする。ｒｔｓｈｉｔ１アサートはすなわち、ｃａｃｈｅａｄｒ［３１：４］（２４）で示すアドレスの命令列をＲＴＳバッファ１（１３２３）が格納し、ＲＴＳバッファ１（１３２３）がその命令列を出力できること（ＲＴＳバッファ１ヒット）を意味する。
【０１７４】
ヒットビット１（１３２２）は、ＲＴＳバッファ１（１３２３）が格納する命令列のヒット有無（１：ヒット有、０：ヒット無し）を格納し、格納した値をｈｉｔ１（信号ライン１３３２）に出力する。ヒットビット１（１３３２）の初期値は０で、ｒｓｔｈｉｔ１（１３３３）のアサートでセット、ｒｓｔｕｐｄｔ１（１３３４）のアサートでリセットされる。
【０１７５】
ＯＲゲート（１３４０）は、ｒｔｓｈｉｔ０（１３１３）とｒｔｓｈｉｔ１（１３３３）の論理和をｒｔｓｈｉｔｏｒ（信号ライン１３５０）に出力する。
【０１７６】
ＡＮＤゲート（１３４３）は、ｒｔｓｈｉｔｏｒ（１３５１）とｃａｃｈｅｒｅａｄ（２５）の論理積をサブルーチン復帰命令バッファヒット信号ｒｔｓｈｉｔ（信号ライン１１０６）に出力する。
【０１７７】
ｒｔｓｈｉｔ（１１０６）アサートは、ｃａｃｈｅａｄｒ［３１：４］（２４）のエントリに対する、ｃａｃｈｅｒｅａｄ（２５）アサートが示すキャッシュのリード要求に対して、ＲＴＳバッファ０（１３０３）、またはＲＴＳバッファ１（１３２３）からリードデータを取り出せることを意味する。
【０１７８】
セレクタ（１３４１）は、ｒｔｓｈｉｔ０（１３１３）、ｒｔｓｈｉｔ１（１３３３）を選択信号として入力し、ｒｔｓｂｕｆ０［１２７：０］（１３１５）、ｒｔｓｂｕｆ１［１２７：０］（１３３５）から１つを選択してｒｔｓｂｕｆｓｌｃｔｄ（信号ライン１３５１）に出力する。ｒｔｓｈｉｔ０（１３１３）、ｒｔｓｈｉｔ１（１３３３）の値と選択される信号の関係は、
｛ｒｔｓｈｉｔ０、ｒｔｓｈｉｔ１｝＝１０：ｒｔｓｂｕｆ０［１２７：０］
｛ｒｔｓｈｉｔ０、ｒｔｓｈｉｔ１｝＝０１：ｒｔｓｂｕｆ１［１２７：０］
である。すなわち、セレクタ（１３４１）は、ＲＴＳバッファ０、ＲＴＳバッファ１のうち、ヒットしているＲＴＳバッファの出力を選択する。
【０１７９】
フリップフロップ（１３４４）は、ｒｔｓｂｕｆｓｌｃｔｄ（１３５１）を入力し、１サイクル後に入力値をサブルーチン復帰命令バッファリードデータｒｔｓｂｕｆｒｄ［１２７：０］（信号ライン１１０７）に出力する。
【０１８０】
ＲＴＳ更新ポインタ生成回路（１３４２）は、ｈｉｔ１（１３３２）、ｈｉｔ０（１３１２）、ｖ１（１３３１）、ｖ０（１３１１）、を入力し、更新するＲＴＳバッファを示すＲＴＳ更新ポインタ信号ｒｔｓｐｎｔ［１：０］（信号ライン１３５２）に出力する。なお、ＲＴＳ更新ポインタ信号ｒｔｓｐｎｔ［１：０］（１３５２）の値と対応する意味は、
０１：ＲＴＳバッファ０を更新
１０：ＲＴＳバッファ１を更新
である。
【０１８１】
ＲＴＳ更新ポインタ生成回路（１３４２）の入力ｈｉｔ１（１３３２）、ｈｉｔ０（１３１２）、ｖ１（１３３１）、ｖ０（１３１１）と出力ｒｔｓｐｎｔ［１：０］（１３５２）との関係は、
｛ｈｉｔ１、ｈｉｔ０、ｖ１、ｖ０｝＝１？？？→ｒｔｓｐｎｔ［１：０］＝１０
｛ｈｉｔ１、ｈｉｔ０、ｖ１、ｖ０｝＝０１？？→ｒｔｓｐｎｔ［１：０］＝０１
｛ｈｉｔ１、ｈｉｔ０、ｖ１、ｖ０｝＝０００？→ｒｔｓｐｎｔ［１：０］＝１０
｛ｈｉｔ１、ｈｉｔ０、ｖ１、ｖ０｝＝００００→ｒｔｓｐｎｔ［１：０］＝０１
上記以外                                  →ｒｔｓｐｎｔ［１：０］＝００
となる。なお、“？”は“ｄｏｎ‘ｔ  ｃａｒｅ”を意味する。すなわち、まずヒットしているバッファを探し、ヒットしているバッファがない場合、次に無効なバッファを探すというアルゴリズムで更新するバッファを選択する。
【０１８２】
図１４における先読みアドレス生成部（１１０１）の詳細な説明に先立ち、先読みアドレス生成部（１１０１）が解読する分岐命令列について、図１５を用いて説明する。
【０１８３】
図１５は、本実施の形態において想定しているＮｏ．１〜Ｎｏ．３の３命令からなる分岐命令列である。なお、Ｎｏ．１の命令は３２ビット命令であるため、１６ビット命令換算だと４命令に相当する。
【０１８４】
Ｎｏ．１に示す“ＭＯＶＩＳ２０  #ｉｍｍ２０、Ｒｎ”は、２０ビットの即値（命令コードの２３〜１６、１１〜０ビット）を８ビット左シフトしてレジスタＲｎに格納する命令である。なお、Ｒｎのｎはレジスタ番号で、命令コードの２６〜２３ビットで示す。また、本実施の形態において想定するＣＰＵが備えるレジスタは１６本とし、レジスタ番号ｎの範囲は０〜１５である。
【０１８５】
Ｎｏ．２に示す“ＡＤＤ  #ｉｍｍ８、Ｒｎ”は、８ビットの即値（命令コードの７〜０ビット）をレジスタＲｎが格納する値と足し合わせ、その結果をＲｎに格納する命令である。
【０１８６】
Ｎｏ．３に示す“ＪＳＲ  ＠Ｒｎ”は、サブルーチンへの分岐命令で、分岐先アドレスはレジスタＲｎに格納された値である。
【０１８７】
Ｎｏ．１〜Ｎｏ．３の命令順かつ、各命令のレジスタ番号が一致する場合、２８ビット範囲の任意のアドレスへのサブルーチン分岐が実行される。このような条件を満たす分岐命令列を「有効な分岐命令列」と定義する。
【０１８８】
図１４は、先読みアドレス生成部（１１０１）の詳細を示す構成図である。
【０１８９】
先読みアドレス生成部（１１０１）は、命令プリデコーダ０（１４００）、命令プリデコーダ１（１４０１）、・・・、命令プリデコーダ７（１４０７）と、ＯＲゲート（１４３１）、プライオリティーエンコーダ（１４１０）、セレクタ（１４１１）、命令順判定回路（１４１２）、レジスタ番号一致判定回路（１４１３）、先読み要求生成回路（１４１５）、即値抽出回路（１４１４）、加算器（１４１６）、ＯＲゲート（１４３３）、立ち上がりエッジ検出回路（１４１８）とを備える。
【０１９０】
ｉｂｕｆ［１２７：０］は、１６ビット毎に区切られ、それぞれ、命令プリデコーダ０（１４００）、命令プリデコーダ１（１４０１）、・・・、命令プリデコーダ７（１４０７）とに入力される。
【０１９１】
命令プリデコーダ０（１４００）には、ｉｂｕｆ［１２７：０］が出力するエントリの命令列における先頭アドレスの命令が入力される。命令プリデコーダ０（１４００）は、入力された命令がＪＳＲ命令であった場合、ｊｓｒ［７：０］（信号ライン１４２０）のうちのｊｓｒ［０］をアサートする。
【０１９２】
命令プリデコーダ１（１４０１）も同様に、ｉｂｕｆ［１２７：０］が出力するエントリの命令列における２番目の命令をデコードして、結果をｊｓｒ［１］に出力する。
【０１９３】
さらに３番目、４番目、・・・、６番目の命令またはデータも同様にその種類がデコードされる。
【０１９４】
そして、命令プリデコーダ７（１４０７）も同様に、ｉｂｕｆ［１２７：０］が出力するエントリの命令列における８番目の命令をデコードして、結果をｊｓｒ［７］に出力する。
【０１９５】
ＯＲゲート（１４３１）は、ｊｓｒ［７：０］の各ビットの論理和を演算し、結果をｊｓｒｏｒ７０（信号ライン１４３０）に出力する。以上に述べた構成により、ｉｂｕｆ［１２７：０］が出力するエントリの命令列の中に一つでもＪＳＲ命令が存在すれば、ｊｓｒｏｒ７０がアサートされる。
【０１９６】
ＯＲゲート（１４３３）は、ｊｓｒ［７：１］の各ビットの論理和を演算し、結果をｊｓｒｏｒ７１（信号ライン１４３２）に出力する。
【０１９７】
立ち上がりエッジ検出回路（１４１８）は、ｊｓｒｏｒ７１（１４３２）の立ち上がりエッジを検出し、立ち上がりエッジ検出と同じタイミングで１サイクル間サブルーチン復帰バッファ更新信号ｒｔｓｕｐｄｔ（１１０５）をアサートする。
【０１９８】
以上に述べた構成により、ｉｂｕｆ［１２７：０］が出力するエントリの命令列の先頭から、７番目の命令中に一つでもＪＳＲ命令が存在すれば、サブルーチンからの復帰に備え、復帰先の命令を含む命令列をサブルーチン復帰命令バッファに退避すべく、サブルーチン復帰バッファ更新信号ｒｔｓｕｐｄｔ（１１０５）をアサートする。なお、ｉｂｕｆ［１２７：０］が出力するエントリの命令列の最後の命令がＪＳＲ命令だった場合、その命令列に復帰先の命令は含まれないため、復帰に備えた退避は意味がない。以上の理由から、ｉｂｕｆ［１２７：０］が出力するエントリの命令列の先頭から、７番目の命令中にＪＳＲ命令が存在すれば、ｒｔｓｕｐｄｔ（１１０５）をアサートする。
【０１９９】
プライオリティーエンコーダ（１４１０）は、ｊｓｒ［７：０］（１４２０）をエンコードした結果をｉｎｓｔ＿ｓｅｌ［２：０］（信号ライン１４２１）に出力する。プライオリティーエンコーダ（１４１０）の入力と出力との関係は、
１０００００００→０００
？１００００００→００１
？？１０００００→０１０
？？？１００００→０１１
？？？？１０００→１００
？？？？？１００→１０１
？？？？？？１０→１１０
？？？？？？？１→１１１
上記以外        →０００
である。なお、“？”は“ｄｏｎ‘ｔ  ｃａｒｅ”を意味する。
【０２００】
セレクタ（１４１１）は、ｉｎｓｔ＿ｓｅｌ［２：０］（１４２１）を選択信号として入力し、ｉｂｕｆ［１７５：０］から６４ビットを選択した結果をｉｂｕｆ＿ｓｌｃｔｄ［６３：０］（信号ライン１４２２）に出力する。ｉｎｓｔ＿ｓｅｌ［２：０］（１４２１）の値と選択されるｉｂｕｆ［１７５：０］のビットの関係は、
ｉｎｓｔ＿ｓｅｌ［２：０］＝０００：ｉｂｕｆ［６３：０］
ｉｎｓｔ＿ｓｅｌ［２：０］＝００１：ｉｂｕｆ［７９：１６］
ｉｎｓｔ＿ｓｅｌ［２：０］＝０１０：ｉｂｕｆ［９５：３２］
ｉｎｓｔ＿ｓｅｌ［２：０］＝０１１：ｉｂｕｆ［１１１：４８］
ｉｎｓｔ＿ｓｅｌ［２：０］＝１００：ｉｂｕｆ［１２７：６４］
ｉｎｓｔ＿ｓｅｌ［２：０］＝１０１：ｉｂｕｆ［１４３：８０］
ｉｎｓｔ＿ｓｅｌ［２：０］＝１１０：ｉｂｕｆ［１５９：９６］
ｉｎｓｔ＿ｓｅｌ［２：０］＝１１１：ｉｂｕｆ［１７５：１１２］
である。
【０２０１】
以上述べた、命令プリデコーダ０（１４００）、命令プリデコーダ１（１４０１）、・・・、命令プリデコーダ７（１４０７）、プライオリティーエンコーダ（１４１０）、セレクタ（１４１１）の構成により、ｉｂｕｆ［１７５：０］に格納される命令列から、ＪＳＲ命令を最後とする連続４命令を選択し、ｉｂｕｆ＿ｓｌｃｔｄ［６３：０］（１４２２）に出力する。また、ｉｂｕｆ［１７５：０］にＪＳＲ命令が複数存在する場合は、先頭に近い方のＪＳＲ命令を含む４連続命令が選択される。
【０２０２】
命令順判定回路（１４１２）は、ｉｂｕｆ＿ｓｌｃｔｄ［６３：０］（１４２２）に出力された命令列が、前述した図１５で説明した分岐命令列の命令順を満たしているかを検出し、命令順を満たしている場合、ｏｒｄｅｒ＿ｈｉｔ（信号ライン１４２３）をアサートする。
【０２０３】
レジスタ番号一致判定回路（１４１３）は、ｉｂｕｆ＿ｓｌｃｔｄ［６３：０］（１４２２）に出力された命令列から、図１５で説明した分岐命令列の命令順を想定して、３命令のレジスタ番号をそれぞれ抽出し、レジスタ番号がすべて一致した場合ｉｎｄｅｘ＿ｈｉｔ（信号ライン１４２４）をアサートする。
【０２０４】
即値抽出回路（１４１４）は、ｉｂｕｆ＿ｓｌｃｔｄ［６３：０］（１４２２）に出力された命令列から、図１５で説明した分岐命令列の命令順を想定して、“ＭＯＶＩＳ２０  #ｉｍｍ２０、Ｒｎ”の即値を抽出後、８ビット左シフト、上位ビット０拡張を施し、結果をｉｍｍ０［３１：０］（信号ライン１４２５）に出力する。また同様に“ＡＤＤ  #ｉｍｍ８、Ｒｎ”の即値を抽出後、上位ビット０拡張を施し、結果をｉｍｍ１［３１：０］（信号ライン１４２６）に出力する。
【０２０５】
加算器（１４１６）は、ｉｍｍ０［３１：０］（１４２５）とｉｍｍ１［３１：０］（１４２６）とを加算し、演算結果を先読み命令のアドレスを示す先読みアドレス信号ｐｆａｄｒ［３１：０］（信号ライン３０）に出力する。
【０２０６】
先読み要求生成回路（１４１５）は、先読み要求を受け付けたことを示すｐｆａｃｋ（３１）、命令バッファ上位ビット有効信号ｉｂｖｈ（１１０８）、ｊｓｒｏｒ７０（１４３０）、ｉｎｓｔ＿ｓｅｌ［２：０］（１４２１）、ｏｒｄｅｒ＿ｈｉｔ（１４２３）、ｉｎｄｅｘ＿ｈｉｔ（１４２４）を入力し、先読み要求信号ｐｆｒｅｑ（２９）のアサート、ネゲートを行う。ｐｆｒｅｑ（２９）のアサート、ネゲートの条件を以下に示す。
【０２０７】
アサート条件は、
｛ｉｂｖｈ、ｉｎｓｔ＿ｓｅｌ［２：０］、ｊｓｒｏｒ７０、ｏｒｄｅｒ＿ｈｉｔ、ｉｎｄｅｘ＿ｈｉｔ｝＝１_１１１_１_１_１‥（１）
｛ｉｂｖｈ、ｉｎｓｔ＿ｓｅｌ［２：０］、ｊｓｒｏｒ７０、ｏｒｄｅｒ＿ｈｉｔ、ｉｎｄｅｘ＿ｈｉｔ｝＝１_１１０_１_１_１‥（２）
｛ｉｂｖｈ、ｉｎｓｔ＿ｓｅｌ［２：０］、ｊｓｒｏｒ７０、ｏｒｄｅｒ＿ｈｉｔ、ｉｎｄｅｘ＿ｈｉｔ｝＝１_１０１_１_１_１‥（３）
｛ｉｂｖｈ、ｉｎｓｔ＿ｓｅｌ［２：０］、ｊｓｒｏｒ７０、ｏｒｄｅｒ＿ｈｉｔ、ｉｎｄｅｘ＿ｈｉｔ｝＝？_１００_１_１_１‥（４）
｛ｉｂｖｈ、ｉｎｓｔ＿ｓｅｌ［２：０］、ｊｓｒｏｒ７０、ｏｒｄｅｒ＿ｈｉｔ、ｉｎｄｅｘ＿ｈｉｔ｝＝？_０１１_１_１_１‥（５）
｛ｉｂｖｈ、ｉｎｓｔ＿ｓｅｌ［２：０］、ｊｓｒｏｒ７０、ｏｒｄｅｒ＿ｈｉｔ、ｉｎｄｅｘ＿ｈｉｔ｝＝？_０１０_１_１_１‥（６）
｛ｉｂｖｈ、ｉｎｓｔ＿ｓｅｌ［２：０］、ｊｓｒｏｒ７０、ｏｒｄｅｒ＿ｈｉｔ、ｉｎｄｅｘ＿ｈｉｔ｝＝？_００１_１_１_１‥（７）
｛ｉｂｖｈ、ｉｎｓｔ＿ｓｅｌ［２：０］、ｊｓｒｏｒ７０、ｏｒｄｅｒ＿ｈｉｔ、ｉｎｄｅｘ＿ｈｉｔ｝＝？_０００_１_１_１‥（８）
である。
【０２０８】
ネゲート条件は、
ｐｆａｃｋ＝１
である。
【０２０９】
なお、“？”は“ｄｏｎ‘ｔ  ｃａｒｅ”を意味する。アサート条件（１）〜（３）は、分岐命令列の一部がｉｂｕｆ［１７５：１２７］に含まれる場合、命令バッファ上位ビット有効信号ｉｂｖｈ（１１０８）が１、すなわち、ｉｂｕｆ［１７５：０］が連続した１１命令を含むことをアサート条件とすることで、誤った先読み要求を抑止するためのものである。
【０２１０】
以上述べた構成により、先読みアドレス生成部（１１０１）は、ｉｂｕｆ［１７５：０］に出力される命令列から有効な分岐命令列を検出し、分岐先アドレスの先読み要求を制御部（１１１１）に出力する。
【０２１１】
次に、本実施の形態の情報処理装置の動作を説明する。
【０２１２】
図１６は、以上説明した本発明の実施形態における情報処理装置の動作を示すタイミングチャートである。図１７は、メモリ上のプログラム配置の例を示したものである。エントリ８に有効な分岐命令列が存在し、またエントリ１００にはサブルーチン復帰命令（ＲＴＳ命令）が存在する。図１６で示すタイミングチャートは、図１７で示すプログラムを実行する情報処理装置の動作である。
【０２１３】
サイクル１で、エントリ８が最初にヒットし、それを受け続くサイクル２にて、制御部（１１１１）は、命令バッファ（１１０３）にエントリ８を格納するため、ｉｂｕｆｕｐｄｔをアサートする。
【０２１４】
次に、サイクル３で、先読みアドレス生成部（１１０１）は、ｉｂｕｆ［１２７：０］からエントリ８に存在する有効な分岐命令列を検出、ｐｆｒｅｑをアサートし、先読みアドレス１００８をｆｐａｄｒ［３１：０］に出力する。また同サイクルで、サブルーチンからの復帰に備えて、現在ヒットしている分岐命令を含むエントリをサブルーチン復帰命令バッファに退避するべく、ｒｔｓｕｐｄｔ信号をアサートする。ここで現在ヒットしている分岐命令を含むエントリをサブルーチン復帰命令バッファに退避することで、サブルーチン実行によりキャッシュが更新され、復帰先のエントリがキャッシュにない場合でも、サブルーチン復帰命令バッファから命令列を読み出すことができる。
【０２１５】
次に、サイクル４で制御部（１１１１）は、アドレス１００８の先読み要求を受け、ｍｅｍａｄｒにエントリ６３を出力、ｍｅｍｒｅａｄをアサートし、メモリ（４）に対してエントリ６３へのリード要求を出す。同サイクルで、制御部（３）からのｐｆａｃｋアサートを受け、ｐｆｒｅｑをネゲートする。また同サイクルで、ｒｔｓｕｐｄｔを受け、サブルーチン復帰命令バッファにおける、ＲＴＳタグ１にエントリ０が、ＲＴＳバッファ１にエントリ０の命令列が格納される。
【０２１６】
次に、サイクル６にて、サイクル４にて先読みを行ったエントリ６３のリードデータがメモリ（４）からｍｅｍｒｄ［１２７：０］に出力され、信号は記載していないが、制御部（１１１１）はｍｅｍｒｄ［１２７：０］をキャッシュに格納する制御信号を出力し、次サイクルでエントリ６３がキャッシュに格納される。
【０２１７】
次に、サイクル７で、エントリ８に存在するサブルーチンへの分岐命令の分岐先アドレス１００８へのアクセスが発生するが、サイクル４にてアドレス１００８を先読みしていたため、キャッシュミスによるペナルティーが発生しない。
【０２１８】
引き続きサブルーチンのプログラムが実行され、サイクルｎの時点では、サブルーチンがキャッシュに登録され、エントリ８は既にキャッシュには存在していないものとする。
【０２１９】
次に、サイクルｎ＋２で、エントリ１００に存在するＲＴＳ命令が実行され、アドレス１３８へのアクセスが発生するが、サイクル４にて復帰先エントリをＲＴＳバッファ１に退避していたため、ＲＴＳバッファ１がヒットし、キャッシュミスによるペナルティーは発生しない。
【０２２０】
図１８は、有効な分岐命令列が２つのエントリをまたがり存在するケースの、先読みアドレス生成部（１１０１）の動作を示すタイミングチャートである。図１９は、有効な分岐命令列がエントリ８とエントリ９にまたがり存在するプログラム配置例を示したものである。図１８で示すタイミングチャートは、図１９で示すプログラムを実行する場合の、先読みアドレス生成部（１１０１）の動作である。
【０２２１】
サイクル１で、エントリ８が最初にヒットし、それを受け、続くサイクル２にて、制御部（１１１１）は、命令バッファ（１１０３）にエントリ８を格納するため、ｉｂｕｆｕｐｄｔをアサートする。
【０２２２】
次に、ｉｂｕｆｕｐｄｔアサートを受け、サイクル３にて、現命令タグにエントリ８が、現命令バッファにエントリ８の命令列が格納される。
【０２２３】
プログラムが進み、サイクル７で、エントリ９が最初にヒットし、それを受け続くサイクル８にて、制御部（１１１１）は、命令バッファ（１１０３）にエントリ９を格納するため、ｉｂｕｆｕｐｄｔをアサートする。
【０２２４】
次に、ｉｂｕｆｕｐｄｔアサートを受け、サイクル１０にて、現命令タグにエントリ９が、現命令バッファにエントリ９の命令列が格納される。また同サイクルにて、前命令タグにエントリ８が、前命令バッファにエントリ８の命令列が格納される。このように、連続するエントリが、バッファ０とバッファ１にそれぞれ格納された結果、ｉｂｕｆ［１７５：０］に連続する１１命令が出力され、ｉｂｖｈがアサートされる。そして、先読みアドレス生成部（１１０１）は、ｉｂｕｆ［１７５：０］からエントリ８とエントリ９にまたがって存在する有効な分岐命令列を検出、ｐｆｒｅｑをアサートし、先読みアドレス１００８をｆｐａｄｒ［３１：０］に出力する。
【０２２５】
以上説明の通り、先読みアドレス生成部（１１０１）は２つのエントリにまたがる有効な分岐命令列を解読し、先読み要求を実行することができる。
【０２２６】
図２０は、プログラムの流れの例を示したもので、後に図２１の説明に用いる。図２０に示すプログラムは、メインルーチン→サブルーチン１→サブルーチン２→サブルーチン１→サブルーチン３→サブルーチン１→メインルーチンの順で実行される。
【０２２７】
図２０に示す直線の端点は、メインルーチン先頭、サブルーチンへの分岐命令、サブルーチンからの復帰命令、サブルーチンからの復帰先命令、メインルーチン終了を示し、端点近傍の一部には図２１の説明で使用する対応アドレス（エントリ）を記載している。
【０２２８】
図２１は、図２０で説明のプログラムの流れにおける、ＲＴＳ命令バッファ更新の動作を示すタイミングチャートである。
【０２２９】
まず、サイクル１からメインルーチンが開始される。メインルーチンが進み、サイクルｍ−２にてサブルーチン１への分岐命令を検出し、ＲＴＳバッファ更新信号ｒｔｓｕｐｄｔがアサートされる。ここでＲＴＳ更新ポインタは“１０”であるため、サイクルｍ−１にてＲＴＳバッファ１にエントリ６の命令列が格納される。また同サイクルにて、有効ビット１に１がセットされ、ＲＴＳポインタの値が“０１”となる。
【０２３０】
次に、サイクルｍからサブルーチン１が開始される。サブルーチン１が進み、サイクルｎ−２にてサブルーチン２への分岐命令を検出し、ＲＴＳバッファ更新信号ｒｔｓｕｐｄｔがアサートされる。ここでＲＴＳ更新ポインタは“０１”であるため、サイクルｎ−１にてＲＴＳバッファ０にエントリ１０５の命令列が格納される。また同サイクルで、有効ビット０に１がセットされ、ＲＴＳポインタの値が“１０”となる。
【０２３１】
次に、サイクルｎからサブルーチン２が開始される。サブルーチン２が進み、サイクルｏ−１にてＲＴＳ命令が実行される。
【０２３２】
次に、サイクルｏからサブルーチン１に復帰し、同サイクルで、ＲＴＳバッファ０がヒットする。続くサイクルｏ＋１にて、ヒットビット０に１がセットされ、ＲＴＳポインタの値が“０１”となる。
【０２３３】
サブルーチン１が進み、サイクルｐ−２にてサブルーチン３への分岐命令を検出し、ＲＴＳバッファ更新信号ｒｔｓｕｐｄｔがアサートされる。ここでＲＴＳ更新ポインタは“０１”であるため、サイクルｐ−１にてＲＴＳバッファ０にエントリ１０７の命令列が格納される。また同サイクルで、有効ビット０に１が、またヒットビット０に０がセットされＲＴＳポインタの値が“１０”となる。
【０２３４】
次に、サイクルｐからサブルーチン３が開始される。サブルーチン３が進み、サイクルｑ−１にてＲＴＳ命令が実行される。
【０２３５】
次に、サイクルｑからサブルーチン１に復帰する。同サイクルで、ＲＴＳバッファ０がヒットする。続くサイクルｑ＋１にて、ヒットビット０に１がセットされ、ＲＴＳポインタの値が“０１”となる。
【０２３６】
次に、サイクルｒからメインルーチンに復帰する。同サイクルで、ＲＴＳバッファ１がヒットする。続くサイクルｒ＋１にて、ヒットビット１に１がセットされ、ＲＴＳポインタの値が“１０”となる。
【０２３７】
以上説明のＲＴＳ更新アルゴリズムでは、更新したＲＴＳバッファは必ずヒットし、またヒットしたＲＴＳバッファは再利用されない、というＲＴＳバッファの特性に合わせた効率の良いＲＴＳの更新を行う。
【０２３８】
以上より、本実施の形態によれば、少量のハードウエアで効果的な分岐命令先読み、およびサブルーチン復帰に備えた命令バッファの更新を実現し、高性能な情報処理技術を低価格で提供することができる。
【０２３９】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【０２４０】
本発明の情報処理装置は、ＣＰＵとメモリと先読み手段とを備え、割り込みルーチン、および割り込みからの復帰先命令の先読み技術に適用して有効であり、また、サブルーチンへの分岐先の先読み、サブルーチン復帰戻先の退避に適用して有効な技術に関するものであり、特に高性能情報処理装置に良好に適用可能である。
【図面の簡単な説明】
【０２４１】
【図１】本発明の実施の形態１の情報処理装置の全体を示す構成図である。
【図２】本発明の実施の形態１の情報処理装置において、ＣＰＵの動作を示すタイミングチャートである。
【図３】本発明の実施の形態１の情報処理装置において、プログラムをメモリに格納する場合の、アドレスとビット、エントリの関係を示す説明図である。
【図４】本発明の実施の形態１の情報処理装置において、メモリの動作を示すタイミングチャートである。
【図５】本発明の実施の形態１の情報処理装置において、アクセスレイテンシ２を持つメモリと、連続する命令のみをキャッシュに先読みする構成にてプログラムを実行した場合を示すタイミングチャートである。
【図６】本発明の実施の形態１の情報処理装置において、先読みアドレス生成部の詳細を示す構成図である。
【図７】本発明の実施の形態１の情報処理装置において、先読み要求ステートマシンのステート遷移を示す説明図である。
【図８】本発明の実施の形態１の情報処理装置において、図７に示した各ステートに対応した出力ｐｆｒｅｑ、ｐｆｔｙｐｅを示す説明図である。
【図９】本発明の実施の形態１の情報処理装置において、アドレス演算部の詳細を示す構成図である。
【図１０】本発明の実施の形態１の情報処理装置の動作を示すタイミングチャートである。
【図１１】本発明の実施の形態２の情報処理装置の全体を示す構成図である。
【図１２】本発明の実施の形態２の情報処理装置において、命令バッファの詳細を示す構成図である。
【図１３】本発明の実施の形態２の情報処理装置において、サブルーチン復帰命令バッファの詳細を示す構成図である。
【図１４】本発明の実施の形態２の情報処理装置において、先読みアドレス生成部の詳細を示す構成図である。
【図１５】本発明の実施の形態２の情報処理装置において、想定しているＮｏ．１〜Ｎｏ．３の３命令からなる分岐命令列を示す説明図である。
【図１６】本発明の実施の形態２の情報処理装置の動作を示すタイミングチャートである。
【図１７】本発明の実施の形態２の情報処理装置において、メモリ上のプログラム配置例を示す説明図である。
【図１８】本発明の実施の形態２の情報処理装置において、有効な分岐命令列が２つのエントリをまたがり存在するケースの、先読みアドレス生成部の動作を示すタイミングチャートである。
【図１９】本発明の実施の形態２の情報処理装置において、有効な分岐命令列がエントリ８とエントリ９にまたがり存在するプログラム配置例を示す説明図である。
【図２０】本発明の実施の形態２の情報処理装置において、プログラムの流れの例を示す説明図である。
【図２１】本発明の実施の形態２の情報処理装置において、図２０で説明のプログラムの流れにおける、ＲＴＳ命令バッファ更新の動作を示すタイミングチャートである。
【符号の説明】
【０２４２】
１…ＣＰＵ、２…先読みアドレス生成部、３…制御部、４…メモリ、５…キャッシュ、６…セレクタ０、７…データバッファ、８…命令バッファ、９…ＩＮＴＣ、１０…セレクタ１、２０１…先読み要求ステートマシン、２０２…アドレス演算部、２０３…ＯＲゲート、２１０〜２１７…命令プリデコーダ０〜命令プリデコーダ７、４０１…２ビット左シフタ、４０２…加算器、４０３…セレクタ０、４０４…退避ＰＣ保持レジスタ、４０５…セレクタ１、４０１…ＩＮＴＶＥＣ保持レジスタ、１１０１…先読みアドレス生成部、１１０２…サブルーチン復帰命令バッファ、１１０３…命令バッファ、１１１１…制御部、１２０１…現命令バッファ、１２０２…前命令バッファ、１２０３…現命令タグ、１２０４…前命令タグ、１２０５…加算器、１２０６，１２０７，１２２１…ドライバ、１２０８…比較器、１２２０…フリップフロップ、１３００…ＲＴＳタグ０、１３０１…有効ビット０、１３０２…ヒットビット０、１３０３…ＲＴＳバッファ０、１３０４…比較器０、１３０５…ＡＮＤゲート、１３２０…ＲＴＳタグ１、１３２１…有効ビット１、１３２２…ヒットビット１、１３２３…ＲＴＳバッファ１、１３２４…比較器１、１３２５…ＡＮＤゲート、１３４０…ＯＲゲート、１３４１…セレクタ、１３４２…ＲＴＳ更新ポインタ生成回路、１３４３…ＡＮＤゲート、１３４４…フリップフロップ、１４００…命令プリデコーダ０、１４０１〜１４０７…命令プリデコーダ１〜命令プリデコーダ７、１４１０…プライオリティーエンコーダ、１４１１…セレクタ、１４１２…命令順判定回路、１４１３…レジスタ番号一致判定回路、１４１４…即値抽出回路、１４１５…先読み要求生成回路、１４１６…加算器、１４１８…立ち上がりエッジ検出回路、１４３１…ＯＲゲート、１４３３…ＯＲゲート。
【図１】
2005215946.tif 000003
【図２】
2005215946.tif 000004
【図３】
2005215946.tif 000005
【図４】
2005215946.tif 000006
【図５】
2005215946.tif 000007
【図６】
2005215946.tif 000008
【図７】
2005215946.tif 000009
【図８】
2005215946.tif 000010
【図９】
2005215946.tif 000011
【図１０】
2005215946.tif 000012
【図１１】
2005215946.tif 000013
【図１２】
2005215946.tif 000014
【図１３】
2005215946.tif 000015
【図１４】
2005215946.tif 000016
【図１５】
2005215946.tif 000017
【図１６】
2005215946.tif 000018
【図１７】
2005215946.tif 000019
【図１８】
2005215946.tif 000020
【図１９】
2005215946.tif 000021
【図２０】
2005215946.tif 000022
【図２１】
2005215946.tif 000023