(57)【要約】【課題】大規模な回路を使用せず、簡単な論理でプログラムカウンタ相対分岐命令実行時の空きスロットをなくすことができる情報処理装置を提供することを課題とする。【解決手段】メモリに記憶されている命令を読み出してバッファリングするためのバッファを持つメモリインタフェース（１１２）と、前記メモリインタフェースから供給されるプログラムカウンタ相対分岐命令をデコードして前記プログラムカウンタ相対分岐命令内のプログラムカウンタ相対分岐先アドレスを抽出する命令デコーダ（１０５）と、前記命令デコーダが前記プログラムカウンタ相対分岐命令をデコードするサイクルと同じサイクルで、前記プログラムカウンタ相対分岐先アドレスを基に前記メモリインタフェース内のバッファに前記プログラムカウンタ相対分岐先アドレスの命令が存在するか否かを判定する判定部（１０６）とを有することを特徴とする情報処理装置が提供される。【選択図】図１
2008071061.tif 000002
【特許請求の範囲】
【請求項１】
プログラムカウンタ相対分岐命令を含む複数の命令を記憶するメモリと、
前記メモリに記憶されている命令を読み出してバッファリングするためのバッファを持つメモリインタフェースと、
前記メモリインタフェースから供給されるプログラムカウンタ相対分岐命令をデコードして前記プログラムカウンタ相対分岐命令内のプログラムカウンタ相対分岐先アドレスを抽出する命令デコーダと、
前記命令デコーダが前記プログラムカウンタ相対分岐命令をデコードするサイクルと同じサイクルで、前記プログラムカウンタ相対分岐先アドレスを基に前記メモリインタフェース内のバッファに前記プログラムカウンタ相対分岐先アドレスの命令が存在するか否かを判定する判定部とを有し、
前記メモリインタフェースは、前記判定部により前記メモリインタフェース内のバッファに前記プログラムカウンタ相対分岐先アドレスの命令が存在すると判定されたときには、前記バッファから前記プログラムカウンタ相対分岐先アドレスの命令を読み出して前記命令デコーダに出力することを特徴とする情報処理装置。
【請求項２】
さらに、前記命令デコーダによりデコードされた命令を実行するための演算器と、
前記演算器の実行結果を書き込むためのレジスタとを有することを特徴とする請求項１記載の情報処理装置。
【請求項３】
さらに、前記メモリインタフェース及び前記命令デコーダの間に設けられる命令バッファを有し、
前記メモリインタフェースは、前記命令バッファをバイパスして、前記バッファから前記プログラムカウンタ相対分岐先アドレスの命令を読み出して前記命令デコーダに出力することを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
さらに、前記メモリインタフェースに命令要求を行う命令フェッチ制御部を有し、
前記メモリインタフェースは、前記命令デコーダがデコードするプログラムカウンタ相対分岐命令が遅延分岐命令である場合には、前記判定部の動作にかかわらず、前記命令フェッチ制御部による命令要求に応じて前記プログラムカウンタ相対分岐先アドレスの命令を前記命令デコーダに出力することを特徴とする請求項１又は２記載の情報処理装置。
【請求項５】
さらに、前記メモリインタフェースに命令要求を行う命令フェッチ制御部を有し、
前記命令フェッチ制御部は、前記判定部により前記メモリインタフェース内のバッファに前記プログラムカウンタ相対分岐先アドレスの命令が存在すると判定されたときには、前記プログラムカウンタ相対分岐先アドレスの命令の後続の命令を要求することを特徴とする請求項１又は２記載の情報処理装置。
【請求項６】
さらに、前記メモリインタフェースに命令プリフェッチ要求を行う命令フェッチ制御部を有し、
前記メモリインタフェースは、前記命令プリフェッチ要求に応じて前記メモリから命令を読み出して前記バッファ内の命令を前記読み出した命令に置き換え、
前記判定部は、前記バッファ内の命令の置き換え情報に応じて前記判定を行うことを特徴とする請求項１又は２記載の情報処理装置。
【請求項７】
前記メモリインタフェースは、同一サイクルで、前記メモリ内の複数の連続するアドレスの命令を読み出して前記バッファに書き込むことを特徴とする請求項１又は２記載の情報処理装置。
【請求項８】
前記メモリインタフェースは、前記メモリ内の同一サイズで分割されたブロックを単位として前記メモリから複数の命令を読み出して前記バッファに書き込むことを特徴とする請求項１又は２記載の情報処理装置。
【請求項９】
前記判定部は、前記プログラムカウンタ相対分岐先アドレス、プログラムカウンタ値及び前記ブロックのサイズを基に前記メモリインタフェース内のバッファに前記プログラムカウンタ相対分岐先アドレスの命令が存在するか否かを判定することを特徴とする請求項８記載の情報処理装置。
【請求項１０】
さらに、前記判定部により前記メモリインタフェース内のバッファに前記プログラムカウンタ相対分岐先アドレスの命令が存在しないと判定されたときには、前記メモリインタフェースに前記プログラムカウンタ相対分岐先アドレスの命令を要求する命令フェッチ制御部を有することを特徴とする請求項１又は２記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分岐命令の処理を行う情報処理装置に関し、特にパイプライン動作において相対分岐命令の実行時の空きスロットをなくすことができる情報処理装置に関する。
【背景技術】
【０００２】
パイプライン動作を行うプロセッサでは、１サイクルに１命令以上の命令を供給できる構成をとり、パイプラインの空きスロット発生を抑えている。ただし、パイプライン処理により命令フェッチ、命令デコード、実行を行うプロセッサでは、分岐命令を実行する前に次の命令をデコードしなければならないので、実際に分岐した場合にはパイプラインに空きスロットが発生しペナルティとなる。
【０００３】
さらに近年、フラッシュメモリ等の高速化に伴い、プロセッサに直結していたＲＯＭやキャッシュメモリに代えてフラッシュメモリを直結することが増えてきた。しかし、メモリ（フラッシュメモリ等）の高速化よりもプロセッサの高速化の方が早いためＲＯＭやキャッシュメモリのようにプロセッサと同じ速度で動作できないため、メモリインタフェース内にバッファを設けることでシーケンシャルな動作に関しては１サイクルに１命令以上の命令を供給可能としている。
【０００４】
また、下記の特許文献１には、命令長の２倍以上の幅で命令を取り込み、プリフェッチした命令を蓄えておくプリフェッチバッファと、前記プリフェッチバッファに蓄えられた命令をデコードするためのデコーダと、前記デコードされた命令を実行するための演算器と、分岐命令をデコードした時点で分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行う命令要求制御回路と、分岐命令により分岐した場合に分岐先命令を前記プリフェッチバッファに取り込み、分岐しなかった場合は無視するプリフェッチ制御回路とを有する情報処理装置が記載されている。
【０００５】
【特許文献１】特許第３６８３２４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
プロセッサと同じ速度で動作できないメモリを命令供給用のメモリとして接続した場合、分岐命令が発生すると命令フェッチにメモリの遅延がそのまま反映されその分パイプラインに空きスロットが発生する。
【０００７】
本発明は、大規模な回路を使用せず、簡単な論理でプログラムカウンタ相対分岐命令実行時の空きスロットをなくすことができる情報処理装置を提供することである。
【課題を解決するための手段】
【０００８】
本発明の一観点によれば、プログラムカウンタ相対分岐命令を含む複数の命令を記憶するメモリと、前記メモリに記憶されている命令を読み出してバッファリングするためのバッファを持つメモリインタフェースと、前記メモリインタフェースから供給されるプログラムカウンタ相対分岐命令をデコードして前記プログラムカウンタ相対分岐命令内のプログラムカウンタ相対分岐先アドレスを抽出する命令デコーダと、前記命令デコーダが前記プログラムカウンタ相対分岐命令をデコードするサイクルと同じサイクルで、前記プログラムカウンタ相対分岐先アドレスを基に前記メモリインタフェース内のバッファに前記プログラムカウンタ相対分岐先アドレスの命令が存在するか否かを判定する判定部とを有し、前記メモリインタフェースは、前記判定部により前記メモリインタフェース内のバッファに前記プログラムカウンタ相対分岐先アドレスの命令が存在すると判定されたときには、前記バッファから前記プログラムカウンタ相対分岐先アドレスの命令を読み出して前記命令デコーダに出力することを特徴とする情報処理装置が提供される。
【発明の効果】
【０００９】
大規模な回路を使用せず、簡単な論理でプログラムカウンタ相対分岐命令の実行時の空きスロットをなくすことができ、効率的なパイプライン処理を行うことができる。
【発明を実施するための最良の形態】
【００１０】
（第１の実施形態）
図２は、本発明の第１の実施形態の処理対象であるコンピュータプログラム（命令群）ａ〜ｆの例を示す図である。各命令ａ〜ｆは、例えばそれぞれ命令長が１６ビットである。アドレスの１つの番地には、１バイト（８ビット）が記憶可能である。例えば、２００番地〜２１０番地のアドレスには命令ａ〜ｆが記憶される。このプログラムを実行すると、まず命令ａを実行する。命令ａでは、例えばレジスタｒ０とｒ２の値を比較する。次に、命令ｂを実行する。命令ｂは、上記の比較の結果、レジスタｒ０とｒ２が同じであれば、分岐先アドレスＰＣ−２に分岐させ、同じでなければ分岐せずにシーケンシャルに命令を実行させるための命令である。このような命令ｂが分岐命令である。分岐命令は、条件分岐命令及び／又は無条件分岐命令を含む。条件分岐命令は、命令ｂのように比較結果等の条件に応じて分岐させる命令である。無条件分岐命令は、ＣＡＬＬ命令又はＪＵＭＰ命令のように無条件に分岐させる命令である。
【００１１】
この分岐命令ｂは、ＰＣ（プログラムカウンタ）相対分岐命令であり、ＰＣ相対分岐先アドレスを有する。ＰＣは、プログラムカウンタであり、次に実行されるべき命令が格納されているアドレスを示しているレジスタである。例えば、分岐命令ｂをデコードしているときには、ＰＣの値は２０２番地になる。ＰＣ相対分岐先アドレスは、ＰＣを基準とした相対分岐先アドレスである。例えば、分岐命令ｂのＰＣ相対分岐先アドレスが「−２」である場合、ＰＣである２０２番地を基準に相対値が「−２」であるので、分岐先アドレスは２００番地になる。すなわち、分岐命令ｂでは、レジスタｒ０とｒ２が同じであれば、２００番地に分岐し、命令ａを実行することになり、レジスタｒ０とｒ２が異なれば、２０４番地の命令ｃを実行することになる。
【００１２】
図１は、本発明の第１の実施形態による情報処理装置の構成例を示す図である。この情報処理装置は、命令（アドレス）要求ステージ（以下、ＩＡステージという）１３１、命令取り込み（フェッチ）ステージ（以下、ＩＦステージ）１３２、命令デコードステージ（以下、ＩＤステージという）１３３、実行ステージ（以下、ＥＸステージという）１３４、レジスタ書き込みステージ（以下、ＷＢステージという）１３５の５ステージのパイプライン処理を行う。
【００１３】
プロセッサ１０１は、メモリインタフェース１１２を介してメモリ１１１と接続される。メモリ１１１は、例えばＳＤＲＡＭ又はフラッシュメモリであり、６４ビット幅のバスを介してメモリインタフェース１１２に接続される。例えば、メモリ１１１は、図２のＰＣ相対分岐命令を含む複数の命令を記憶する。メモリインタフェース１１２は、メモリ１１１に記憶されている命令を読み出してバッファリングするためのバッファ１１３を有する。バッファ１１３は、６４ビットの記憶容量を有し、４個の命令をバッファリング可能である。１個の命令長は、例えば１６ビットである。メモリインタフェース１１２は、メモリ１１１から１サイクルで４個の命令を読み出す。例えば、メモリインタフェース１１２は、プロセッサ１０１から命令ａの要求を受けた場合には、連続するアドレス２００番地〜２０６番地の４個の命令ａ〜ｄを読み出す。また、メモリインタフェース１１２は、プロセッサ１０１から命令ｅの要求を受けた場合には、連続するアドレスの４個の命令ｅ〜ｈを読み出す。すなわち、メモリインタフェース１１２は、メモリ１１１から連続するアドレスの命令を４個単位で読み出す。
【００１４】
プロセッサ１０１が要求する命令がバッファ１１３上にある場合をバッファヒットという。バッファヒットした場合には、プロセッサ１０１はバッファ１１３から命令を受け取ることができる。それに対し、プロセッサ１０１が要求する命令がバッファ１１３上にない場合をバッファミスという。バッファミスの場合は、メモリインタフェース１１２がメモリ１１１に命令の読み出し要求を行う。プロセッサ１０１は、メモリインタフェース１１２を介してメモリ１１１から命令を読み出すことができる。
【００１５】
プロセッサ１０１は、セレクタ１０２、命令キュー（命令バッファ）１０３、命令フェッチ制御部１０４、命令デコーダ１０５、ヒット／ミス判定部１０６、演算器１０７及びレジスタ１０８を有する。命令キュー１０３は、例えば１６ビット長の命令を最大４個記憶可能であり、メモリインタフェース１１２及び命令デコーダ１０５の間に接続される。セレクタ１０２は、メモリインタフェース１１２が出力する命令Ｓ１２１又は命令キュー１０３が出力する命令Ｓ１２３を選択し、選択した命令Ｓ１２４を命令デコーダ１０５及びヒット／ミス判定部１０６に出力する。命令フェッチ制御部１０４は、メモリインタフェース１１２に対して命令要求を行うためのメモリアクセス制御信号Ｓ１２２を出力し、命令キュー１０３の入出力を制御する。命令デコーダ１０５は、セレクタ１０２の出力命令Ｓ１２４を１命令単位でデコードする。演算器１０７は、命令デコーダ１０５がデコードした命令を１命令単位で実行（演算）する。レジスタ１０８には、演算器１０７の実行結果が書き込まれる。
【００１６】
命令フェッチ動作は、プロセッサ１０１の状態に従い、命令フェッチ制御部１０４がメモリインタフェース１１２に命令要求を行い（ＩＡステージ１３１）、次のサイクルで命令キュー１０３に取り込む（ＩＦステージ１３２）ことで行う。次に、命令キュー１０３の最初の命令を命令デコーダ１０５でデコードし（ＩＤステージ１３３）、次のサイクルで命令により指示された動作を演算器１０７で行い（ＥＸステージ１３４）、レジスタ１０８への書き戻し（ＷＢステージ１３５）を行うことで一つの命令を完了する。プロセッサ１０１は、これらの動作をパイプラインで行う。
【００１７】
命令デコーダ１０５は、命令デコーダ１０５がデコードした命令がＰＣ相対分岐命令であるとき、ＰＣ相対分岐命令内のＰＣ相対分岐先アドレスを抽出し、そのＰＣ相対分岐先アドレス及びＰＣ値をヒット／ミス判定部１０６に出力する。例えば、図２の場合、分岐命令は命令ｂ、ＰＣ相対分岐先アドレスは「−２」、ＰＣ値は「２０２」である。すなわち、分岐先絶対アドレスは、２００番地になる。ヒット／ミス判定部１０６には、バッファ１１３が記憶可能な命令数（例えば４）が設定されている。ヒット／ミス判定部１０６は、セレクタ１０２の出力命令Ｓ１２４がＰＣ相対分岐命令であるときには、ＰＣ相対分岐先アドレス、ＰＣ値及びバッファ１１３が記憶可能な命令数を基に、分岐先アドレスの命令がバッファ１１３内に存在するか否か（バッファヒット又はバッファミス）を判定する。例えば、バッファ１１３には２００〜２０６番地の命令ａ〜ｄが記憶されているので、分岐先アドレスである２００番地の命令ａがバッファ１１３内に存在すると判断することができる。ヒット／ミス判定部１０６は、バッファ１１３内に分岐先アドレスの命令が存在するときには、その命令のバッファ１１３内の位置も認識することができるので、バッファ１１３内のその位置の命令を出力するためのバッファ指示信号Ｓ１２５をメモリインタフェース１１２に出力する。メモリインタフェース１１２は、バッファ指示信号Ｓ１２５を入力すると、バッファ１１３内の指示された位置の命令を命令Ｓ１２１として出力する。セレクタ１０２は、その命令Ｓ１２１を選択し、命令Ｓ１２４として命令デコーダ１０５に出力する。これにより、命令デコーダ１０５は、その命令Ｓ１２４をデコードすることができる。すなわち、命令デコーダ１０５は、分岐命令ｂをデコードした後、空きスロットなく、次のサイクルで分岐先命令ａをデコードすることができる。なお、条件分岐命令の場合、バイパス処理により条件を満たすか否かをＥＸステージ１３４の実行完了を待たずに知ることができる。
【００１８】
ヒット／ミス判定部１０６は、分岐先アドレスの命令がバッファ１１３内に存在しないと判断したときには、その分岐先アドレスの命令を要求するように、命令フェッチ制御部１０４に制御信号を出力する。命令フェッチ制御部１０４は、その制御信号に応じて、メモリインタフェース１１２にメモリアクセス制御信号Ｓ１２２を出力する。メモリインタフェース１１２は、要求された命令をメモリ１１１から読み出し、バッファ１１３にバッファリングすると共に、命令Ｓ１２１として出力する。そして、上記と同様に、セレクタ１０２は、命令Ｓ１２１を選択して命令デコーダ１０５に出力する。
【００１９】
なお、命令キュー１０３は、プロセッサ１０１の処理速度とメモリ１１１の処理速度の違いを緩衝するためのバッファとしての機能を有し、削除してもよい。命令キュー１０３を削除した場合は、メモリインタフェース１１２は、直接命令デコーダ１０５に命令を出力することになる。
【００２０】
図３は、参考のため、図１のヒット／ミス判定部１０６がない場合の情報処理装置の動作を示すタイミングチャートである。図２のプログラムの処理を行う場合を例に説明する。第１〜第４のバッファは、バッファ１１３内の４個の命令に対応するバッファを示す。
【００２１】
サイクルＣＹ１では、バッファ１１３内には、４個の命令ａ〜ｄが記憶されており、命令ａをＩＡステージ１３１で命令要求する。次に、サイクルＣＹ２では、命令ａをＩＦステージ１３２でフェッチし、ＰＣ相対分岐命令ｂをＩＡステージ１３１で命令要求する。
【００２２】
分岐命令ｂは、条件分岐命令であり、分岐命令ｂのＥＸステージ１３４が開始するまで、条件判断ができず、分岐するか否かが決定しない。そのため、後述するように、２個の空きスロットｃ及びｄが生じる。
【００２３】
次に、サイクルＣＹ３では、命令ａをＩＤステージ１３３でデコードし、ＰＣ相対分岐命令ｂをＩＦステージ１３２でフェッチする。次に、サイクルＣＹ４では、命令ａをＥＸステージ１３４で実行し、ＰＣ相対分岐命令ｂをＩＤステージ１３３でデコードする。サイクルＣＹ５では、命令ａをＷＢステージ１３５でレジスタ書き込みし、ＰＣ相対分岐命令ｂをＥＸステージ１３４で実行する。そのＥＸステージ１３４の実行完了を待たずに、条件判断が行われ、分岐先命令が命令ａに決定したときには、サイクルＣＹ５で分岐先命令ａをＩＡステージ１３１で命令要求する。この際、予測として、サイクルＣＹ３で命令ｃをＩＡステージ１３１で命令要求し、サイクルＣＹ４で命令ｄをＩＡステージ１３１で命令要求することも可能であるが、分岐先命令が命令ａに決定したときには、これらの処理が無駄になり、２個の空きスロットｃ及びｄが生じる。
【００２４】
次に、サイクルＣＹ６では、ＰＣ相対分岐命令ｂをＷＢステージ１３５でレジスタ書き込みし、分岐先命令ａをＩＦステージ１３２でフェッチする。次に、サイクルＣＹ７では、分岐先命令ａをＩＤステージ１３３でデコードする。次に、サイクルＣＹ８では、分岐先命令ａをＥＸステージ１３４で実行する。次に、サイクルＣＹ９では、分岐先命令ａをＷＢステージ１３５でレジスタ書き込みする。
【００２５】
以上のように、分岐する場合には、ハッチで示した２個の空きスロットｃ及びｄが生じ、効率的なパイプライン処理を行うことができない。分岐命令ｂのＥＸステージ１３４まで分岐するかどうかの条件判定が出来ないため、後続に分岐先命令をフェッチするのかそのままシーケンシャルの命令をフェッチするのかを、判定までウェイトしてペナルティを発生させることになる。また、分岐予測を行った場合でも予測が外れた場合は、ペナルティが発生する。
【００２６】
図４は、図１の本実施形態による情報処理装置の動作例を示すタイミングチャートである。図２のプログラムの処理を行う場合を例に説明する。第１〜第４のバッファは、バッファ１１３内の４個の命令に対応するバッファを示す。
【００２７】
サイクルＣＹ１では、バッファ１１３内には、４個の命令ａ〜ｄが記憶されており、命令ａをＩＡステージ１３１で命令要求する。次に、サイクルＣＹ２では、命令ａをＩＦステージ１３２でフェッチし、ＰＣ相対分岐命令ｂをＩＡステージ１３１で命令要求する。
【００２８】
次に、サイクルＣＹ３では、命令ａをＩＤステージ１３３でデコードし、ＰＣ相対分岐命令ｂをＩＦステージ１３２でフェッチする。この際、ハッチで示す分岐先命令ａをＩＡステージ１３１で命令要求する必要がない。なお、予測として命令ｃをＩＡステージ１３１で命令要求するのが好ましい。
【００２９】
次に、サイクルＣＹ４では、命令ａをＥＸステージ１３４で実行し、ＰＣ相対分岐命令ｂをＩＤステージ１３３でデコードし、分岐先命令ａをＩＦステージ１３２でフェッチし、その次の命令ｂをＩＡステージ１３１で命令要求する。命令デコーダ１０５は、ＰＣ相対分岐命令ｂを入力すると、ＰＣ相対分岐先アドレス及びＰＣ値をヒット／ミス判定部１０６に出力する。ヒット／ミス判定部１０６は、ＰＣ相対分岐命令ｂを入力すると、バッファ１１３内の分岐先命令ａが存在するか否かを判定し、存在する場合にはメモリインタフェース１１２にバッファ指示信号Ｓ１２５を出力する。すると、メモリインタフェース１１２は、バッファ１１３内の分岐先命令ａをセレクタ１０２を介して命令デコーダ１０５に出力する。すなわち、メモリインタフェース１１２は、命令キュー１０３をバイパスして、バッファ１１３からＰＣ相対分岐先アドレスの命令を読み出して命令デコーダ１０５に出力する。
【００３０】
次に、サイクルＣＹ５では、命令ａをＷＢステージ１３５でレジスタ書き込みし、ＰＣ相対分岐命令ｂをＥＸステージ１３４で実行する。そのＥＸステージ１３４の実行完了を待たずに、条件判断が行われ、分岐先命令が命令ａに決定したときには、分岐先命令ａをＩＤステージ１３３でデコードし、その次の命令ｂをＩＦステージ１３２でフェッチする。
【００３１】
次に、サイクルＣＹ６では、ＰＣ相対分岐命令ｂをＷＢステージ１３５でレジスタ書き込みし、分岐先命令ａをＥＸステージ１３４で実行し、その次の命令ｂをＩＤステージ１３３でデコードする。次に、サイクルＣＹ７では、分岐先命令ａをＷＢステージ１３５でレジスタ書き込みし、その次の命令ｂをＥＸステージ１３４で実行する。次に、サイクルＣＹ８では、命令ｂをＷＢステージ１３５でレジスタ書き込みする。
【００３２】
以上のように、本実施形態によれば、分岐する場合、空きスロットが生じず、効率的なパイプライン処理を行うことができる。
【００３３】
なお、サイクルＣＹ３で命令ｃをＩＡステージ１３１で命令要求することにより、分岐しない場合には、続くサイクルＣＹ４で命令ｃをＩＦステージ１３２でフェッチし、続いてＩＤステージ１３３、ＥＸステージ１３４及びＷＢステージ１３５で処理することができる。分岐しない場合にも、空きスロットなしで、効率的なパイプライン処理を行うことができる。
【００３４】
本実施形態では、ＩＤステージ１３３内に、ＰＣ値、ＰＣ相対分岐先アドレス及びバッファ１１３のサイズを基にバッファヒット又はバッファミスを判定するヒット／ミス判定部１０６を設ける。命令デコーダ１０５がＰＣ相対分岐命令ｂをデコードした場合、ヒット／ミス判定部１０６は、バッファ１１３の選択指示を行う信号Ｓ１２５をメモリインタフェース１１２に出力し、同時に命令フェッチ制御部１０４にもその信号Ｓ１２５を通知し、バッファヒットであれば分岐先の後続アドレスの命令ｂを要求し、バッファミスであればそのまま分岐先アドレスの命令ａを要求する。
【００３５】
命令フェッチ制御部１０４は、ヒット／ミス判定部１０６によりメモリインタフェース１１２内のバッファ１１３にＰＣ相対分岐先アドレスの命令ａが存在しないと判定されたときには、メモリインタフェース１１２にＰＣ相対分岐先アドレスの命令ａを要求する。
【００３６】
更に、プロセッサ１０１が命令キュー１０３を持つ場合は、命令フェッチ制御部１０４は、セレクタ１０２の制御信号を出力する。セレクタ１０２は、その制御信号に応じて、命令キュー１０３の出力命令Ｓ１２３又はメモリインタフェース１１２の出力命令Ｓ１２１を選択する。
【００３７】
また、メモリインタフェース１１２は、バッファヒット信号Ｓ１２５がアサートされた場合は前の要求を破棄し、信号Ｓ１２５により指示されたバッファ１１３内の命令を同一サイクルでプロセッサ１０１へ返す。バッファヒット信号Ｓ１２５がアサートされていない場合は、通常のメモリアクセスを行う。
【００３８】
ヒット／ミス判定部１０６は、ＰＣ相対分岐命令ｂをデコード時にバッファヒット信号Ｓ１２５をアサートし、メモリインタフェース１１２が出力予定の命令ｃを分岐先命令ａに置換する。更に、ヒット／ミス判定部１０６が命令フェッチ制御部１０４に信号Ｓ１２５を通知することにより、同一サイクルでの命令要求アドレスを分岐先命令ａの後続命令ｂに変更する。従って、メモリインタフェース１１２内のバッファ１１３にヒットする場合、パイプラインにストールを発生することなくアクセス可能となる。
【００３９】
すなわち、命令フェッチ制御部１０４は、ヒット／ミス判定部１０６によりメモリインタフェース１１２内のバッファ１１３にＰＣ相対分岐先アドレスの命令が存在すると判定されたときには、ＰＣ相対分岐先アドレスの命令ａの後続の命令ｂを要求する。
【００４０】
また、ヒット／ミス判定部１０６は、分岐時のＰＣ相対分岐先アドレスの比較のみで済むため、回路規模への影響は少ない。
【００４１】
メモリインタフェース１１２は、同一サイクルで、メモリ１１１内の複数の連続するアドレスの命令（例えば４個の命令）を読み出してバッファ１１３に書き込む。また、メモリインタフェース１１２は、メモリ１１１内の同一サイズで分割されたブロック（４命令のブロック）を単位としてメモリ１１１から複数の命令を読み出してバッファ１１３に書き込む。
【００４２】
ヒット／ミス判定部１０６は、命令デコーダ１０５がＰＣ相対分岐命令ｂをデコードするサイクルと同じサイクルで、ＰＣ相対分岐先アドレス、ＰＣ値及び前記ブロックのサイズを基にメモリインタフェース１１２内のバッファ１１３にＰＣ相対分岐先アドレスの命令が存在するか否かを判定する。
【００４３】
メモリインタフェース１１２は、ヒット／ミス判定部１０６によりメモリインタフェース１１２内のバッファ１１３にＰＣ相対分岐先アドレスの命令が存在すると判定されたときには、バッファ１１３からＰＣ相対分岐先アドレスの命令を読み出して命令デコーダ１０５に出力する。
【００４４】
（第２の実施形態）
本発明の第２の実施形態は、図２の分岐命令ｂが遅延分岐命令である場合を説明する。まず、遅延分岐命令について説明する。条件分岐命令は、条件に合致すれば分岐先に分岐し、条件に合致しなければ分岐しない。遅延分岐命令ｂは、分岐しない場合には命令ｂの後に命令ｃ、ｄ、ｅ及びｆをシーケンシャルに実行し、分岐する場合には命令ｂの後に命令ｃ、ａ、ｂを順次実行する。すなわち、遅延分岐命令ｂの後の命令ｃは、分岐の有無にかかわらずに必ず実行し、その後に分岐することになる。遅延分岐命令ｂの後の命令ｃを、遅延スロット命令と呼ぶ。
【００４５】
本実施形態の情報処理装置の構成は、図１と同じである。以下、本実施形態が第１の実施形態と異なる点を説明する。
【００４６】
図５は、本発明の第２の実施形態による情報処理装置の動作例を示すタイミングチャートである。図２の遅延分岐命令ｂを含むプログラムの処理を行う場合を例に説明する。第１〜第４のバッファは、バッファ１１３内の４個の命令に対応するバッファを示す。
【００４７】
サイクルＣＹ１では、バッファ１１３内には、４個の命令ａ〜ｄが記憶されており、命令ａをＩＡステージ１３１で命令要求する。次に、サイクルＣＹ２では、命令ａをＩＦステージ１３２でフェッチし、遅延分岐命令ｂをＩＡステージ１３１で命令要求する。次に、サイクルＣＹ３では、命令ａをＩＤステージ１３３でデコードし、遅延分岐命令ｂをＩＦステージ１３２でフェッチし、遅延スロット命令ｃをＩＡステージ１３１で命令要求する。
【００４８】
次に、サイクルＣＹ４では、命令ａをＥＸステージ１３４で実行し、遅延分岐命令ｂをＩＤステージ１３３でデコードし、遅延スロット命令ｃをＩＦステージ１３２でフェッチし、分岐先命令ａをＩＡステージ１３１で命令要求する。ヒット／ミス判定部１０６は遅延分岐命令ｂを入力すると、バッファヒット信号Ｓ１２５をアサートにせず、命令フェッチ制御部１０４に分岐先命令ａの命令要求指示信号を出力する。すると、命令フェッチ制御部１０４は、メモリアクセス制御信号Ｓ１２２をメモリインタフェース１１２に出力する。すると、メモリインタフェース１１２は、バッファ１１３内の分岐先命令ａをプロセッサ１０１に出力する。
【００４９】
次に、サイクルＣＹ５では、命令ａをＷＢステージ１３５でレジスタ書き込みし、遅延分岐命令ｂをＥＸステージ１３４で実行し、遅延スロット命令ｃをＩＤステージ１３３でデコードし、分岐先命令ａをＩＦステージ１３２でフェッチする。次に、サイクルＣＹ６では、遅延分岐命令ｂをＷＢステージ１３５でレジスタ書き込みし、遅延スロット命令ｃをＥＸステージ１３４で実行し、分岐先命令ａをＩＤステージ１３３でデコードする。次に、サイクルＣＹ７では、遅延スロット命令ｃをＷＢステージ１３５でレジスタ書き込みし、分岐先命令ａをＥＸステージ１３４で実行する。次に、サイクルＣＹ８では、分岐先命令ａをＷＢステージ１３５でレジスタ書き込みする。
【００５０】
以上のように、ヒット／ミス判定部１０６は、遅延分岐命令ｂを入力したときには、バッファヒット信号Ｓ１２５をアサートにせず、命令フェッチ制御部１０４に分岐先命令ａの命令要求指示信号を出力する。メモリインタフェース１１２は、命令デコーダ１０５がデコードするＰＣ相対分岐命令が遅延分岐命令である場合には、ヒット／ミス判定部１０６の動作にかかわらず、命令フェッチ制御部１０４による命令要求に応じてＰＣ相対分岐先アドレスの命令を命令デコーダ１０５に出力する。本実施形態によれば、分岐する場合、空きスロットが生じず、効率的なパイプライン処理を行うことができる。
【００５１】
（第３の実施形態）
図６は、本発明の第３の実施形態による情報処理装置の動作例を示すタイミングチャートである。本実施形態は、図２の分岐命令ｂの分岐先アドレスが命令ｅのアドレスであり、プロセッサ１０１がプリフェッチ動作を行う場合を例に説明する。第１〜第４のバッファは、バッファ１１３内の４個の命令に対応するバッファを示す。本実施形態の情報処理装置の構成は、図１と同じである。以下、本実施形態が第１の実施形態と異なる点を説明する。
【００５２】
サイクルＣＹ１では、バッファ１１３内には、４個の命令ａ〜ｄが記憶されており、命令フェッチ制御部１０４がメモリインタフェース１１２に分岐先命令ｅをＩＡステージ１３１で命令プリフェッチ要求する。しかし、バッファ１１３内の分岐先命令ｅは存在しないので、メモリインタフェース１１２はプロセッサ１０１に分岐先命令ｅを直ぐには出力しない。
【００５３】
次に、サイクルＣＹ２及びＣＹ３では、命令フェッチ制御部１０４がメモリインタフェース１１２に命令ｆをＩＡステージ１３１で命令プリフェッチ要求する。また、サイクルＣＹ２では、ＩＦステージ１３２上の命令キュー１０３に命令ａが既にフェッチされて存在する。
【００５４】
次に、サイクルＣＹ３では、命令ａをＩＤステージ１３３でデコードする。ＰＣ相対分岐命令ｂは、ＩＦステージ１３２上の命令キュー１０３に既にフェッチされて存在する。また、サイクルＣＹ３では、メモリインタフェース１１２はメモリ１１１から命令ｅ〜ｈを読み出し、命令ｅをプロセッサ１０１のＩＦステージ１３２に出力する。
【００５５】
次に、サイクルＣＹ４では、命令ａをＥＸステージ１３４で実行し、ＰＣ相対分岐命令ｂをＩＤステージ１３３でデコードし、分岐先命令ｅをＩＦステージ１３２でフェッチし、その次の命令ｆをＩＡステージ１３１で命令要求する。すなわち、命令フェッチ制御部１０４は、命令ｆの命令プリフェッチ要求を中止し、分岐先命令ｅの後続命令ｆの命令要求を行う。
【００５６】
メモリインタフェース１１２は、バッファ１１３に４個の命令ｅ〜ｈを書き込む。命令フェッチ制御部１０４は、バッファ１１３内の命令が変更されたことを示す信号をヒット／ミス判定部１０６に出力する。これにより、ヒット／ミス判定部１０６は、現在のバッファ１１３内に存在する命令を認識することができる。
【００５７】
命令デコーダ１０５は、ＰＣ相対分岐命令ｂを入力すると、ＰＣ相対分岐先アドレス及びＰＣ値をヒット／ミス判定部１０６に出力する。ヒット／ミス判定部１０６は、ＰＣ相対分岐命令ｂを入力すると、バッファ１１３内の分岐先命令ｅが存在するか否かを判定し、存在する場合にはメモリインタフェース１１２にバッファヒット信号Ｓ１２５を出力する。すると、メモリインタフェース１１２は、バッファ１１３内の分岐先命令ｅをセレクタ１０２を介して命令デコーダ１０５に出力する。
【００５８】
次に、サイクルＣＹ５では、命令ａをＷＢステージ１３５でレジスタ書き込みし、ＰＣ相対分岐命令ｂをＥＸステージ１３４で実行し、分岐先命令ｅをＩＤステージ１３３でデコードし、その次の命令ｆをＩＦステージ１３２でフェッチする。次に、サイクルＣＹ６では、ＰＣ相対分岐命令ｂをＷＢステージ１３５でレジスタ書き込みし、分岐先命令ｅをＥＸステージ１３４で実行し、その次の命令ｆをＩＤステージ１３３でデコードする。次に、サイクルＣＹ７では、分岐先命令ｅをＷＢステージ１３５でレジスタ書き込みし、その次の命令ｆをＥＸステージ１３４で実行する。次に、サイクルＣＹ８では、命令ｆをＷＢステージ１３５でレジスタ書き込みする。
【００５９】
以上のように、プロセッサ１０１のプリフェッチ動作によりバッファ１１３内の命令が書き換えられてしまうことがある。その場合、命令フェッチ制御部１０４がバッファ１１３内に現在存在する命令をヒット／ミス制御部１０６に知らせる。これにより、ヒット／ミス制御部１０６は、バッファ１１３内の分岐先命令ｅが存在するか否かを正確に判定することができる。
【００６０】
サイクルＣＹ４において、メモリインタフェース１１２は、命令フェッチ制御部１０４からの命令プリフェッチ要求に応じてメモリ１１１から命令を読み出してバッファ１１３内の命令を前記読み出した命令に置き換える。ヒット／ミス判定部１０６は、バッファ１１３内の命令の置き換え情報に応じて前記判定を行う。
【００６１】
以上のように、第１〜第３の実施形態によれば、プロセッサ１０１内の命令デコーダ１０５がＰＣ相対分岐命令ｂをデコードすると同時に、ヒット／ミス判定部１０６はメモリインタフェース１１２内のバッファ１１３にヒットするかミスするかを判定する。ヒット／ミス判定部１０６がバッファヒット信号Ｓ１２５をメモリインタフェース１１２に出力することにより、メモリインタフェース１１２はバッファ１１３内の分岐先命令を出力し、分岐先命令をフェッチすることができ、ＰＣ相対分岐命令のペナルティをなくすことができる。また、プロセッサ１０１に低速のメモリ１１１を接続した場合のペナルティが削減可能となる。特にショートループの多いプログラムの場合に効果が顕著となる。
【００６２】
ＰＣ相対分岐命令ｂは命令コード内に分岐先アドレスとしてＰＣ相対分岐先アドレスを含むため、ヒット／ミス判定部１０６は、アドレス全ビットの比較を行う必要がないため、小規模な比較回路で済む。更に、ヒット／ミス判定部１０６の回路遅延も少ないため、そのヒット／ミス判定結果信号Ｓ１２５をメモリインタフェース１１２へ出力し、そのまま命令フェッチすることも可能となる。
【００６３】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【図面の簡単な説明】
【００６４】
【図１】本発明の第１の実施形態による情報処理装置の構成例を示す図である。
【図２】第１の実施形態の処理対象であるコンピュータプログラム（命令群）の例を示す図である。
【図３】ヒット／ミス判定部がない場合の情報処理装置の動作を示すタイミングチャートである。
【図４】第１の実施形態による情報処理装置の動作例を示すタイミングチャートである。
【図５】本発明の第２の実施形態による情報処理装置の動作例を示すタイミングチャートである。
【図６】本発明の第３の実施形態による情報処理装置の動作例を示すタイミングチャートである。
【符号の説明】
【００６５】
１０１  プロセッサ
１０２  セレクタ
１０３  命令キュー
１０４  命令フェッチ制御部
１０５  命令デコーダ
１０６  ヒット／ミス判定部
１０７  演算器
１０８  レジスタ
１１１  メモリ
１１２  メモリインタフェース
１１３  バッファ
１３１  ＩＡステージ
１３２  ＩＦステージ
１３３  ＩＤステージ
１３４  ＥＸステージ
１３５  ＷＢステージ
【図１】
2008071061.tif 000003
【図２】
2008071061.tif 000004
【図３】
2008071061.tif 000005
【図４】
2008071061.tif 000006
【図５】
2008071061.tif 000007
【図６】
2008071061.tif 000008