(57)【特許請求の範囲】
【請求項１】
命令のアドレスを示すプログラムカウンタと、
分岐命令のアドレスと前記分岐命令により分岐する分岐先アドレスを記憶する第１の記憶部と、
前記プログラムカウンタが出力する命令のアドレスと同一の分岐命令のアドレスが前記第１の記憶部内にあるかどうかを検出する第１の検出回路と、
前記第１の検出回路により前記分岐命令のアドレスが検出された場合、検出された前記分岐命令の次に実行される命令のアドレスと、前記分岐命令により分岐する分岐先アドレスを記憶する第２の記憶部と、
前記プログラムカウンタから出力されるアドレスが前記分岐命令の次に実行される命令のアドレスであるとき、前記第２の記憶部より、前記分岐命令の次に実行される命令のアドレスに対応する分岐先アドレスを検出する第２の検出回路と
を具備することを特徴とする分岐予測回路。
【請求項２】
前記第２の記憶部、前記第２の検出回路、前記プログラムカウンタ、前記第１の記憶部、及び前記第１の検出回路は直列接続され、前記第２の記憶部、及び第２の検出回路は前記第１の記憶部、及び第１の検出回路より手前のステージに配置されることを特徴とする請求項１記載の分岐予測回路。
【請求項３】
前記第１の記憶部の記憶容量は、前記第２の記憶部の記憶容量より大きく設定されていることを特徴とする請求項１記載の分岐予測回路。
【請求項４】
前記第１の記憶部は、前記プログラムカウンタから出力された前記分岐命令のアドレスの一部をタグとして記憶する第１の記憶回路と、
前記分岐命令のアドレスの他の部分に応じて前記分岐命令の分岐先アドレスをデータとして記憶する第２の記憶回路と
を有することを特徴とする請求項３記載の分岐予測回路。
【請求項５】
前記第１の検出回路は、前記第１の記憶回路から出力される複数のタグと前記プログラムカウンタから供給されるアドレスの対応する一部とを比較する複数の比較回路と、
複数の前記比較回路の出力信号に応じて前記第２の記憶回路から出力される分岐先アドレスを選択する第１のセレクタと
を具備することを特徴とする請求項４記載の分岐予測回路。
【請求項６】
前記第２の検出回路は、前記分岐命令の次に実行される命令のアドレスを記憶する第３の記憶回路と、
前記第３の記憶回路に対応し、前記分岐先アドレスを記憶する第４の記憶回路と、
前記プログラムカウンタから供給される現在のアドレスと前記第３の記憶回路に記憶された前記分岐命令の次に実行される命令のアドレスとを比較する比較回路と、
前記比較回路による比較の結果、両アドレスが一致したとき、前記第４の記憶回路に記憶された分岐先アドレスを選択する第２のセレクタと
を具備することを特徴とする請求項４記載の分岐予測回路。
【請求項７】
前記第１、第２の記憶回路は、スタティックＲＡＭにより構成されることを特徴とする請求項５記載の分岐予測回路。
【請求項８】
前記第３、第４の記憶回路は、フリップフロップ回路により構成されることを特徴とする請求項６記載の分岐予測回路。
【請求項９】
前記第２の記憶部は、前記第１の記憶部に分岐命令及び分岐先アドレスを記憶した後、前記分岐先アドレスを記憶することを特徴とする請求項２記載の分岐予測回路。
【請求項１０】
前記第２の記憶部は、前記第１の記憶部と同時に前記分岐先アドレスを記憶することを特徴とする請求項２記載の分岐予測回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばパイプライン処理を実行するマイクロプロセッサの分岐予測回路に関する。
【０００２】
【従来の技術】
パイプライン処理を行うマイクロプロセッサにおいて、フローが変化する分岐命令はパイプライン処理を乱す。このため、無効なサイクルが発生し、性能が落ちる原因となっている。特に、動作周波数がＧＨｚを超えるマイクロプロセッサは、多段のパイプラインを有している。このため、マイクロプロセッサにおいて、命令をフェッチしてからその命令が分岐命令であると認識され、分岐先アドレスを算出するまでに１０サイクル以上かかる。
【０００３】
図５は、初期の多段パイプラインを有するマイクロプロセッサにおける分岐命令発生時の動作を示している。このプロセッサは、命令をフェッチした後、その命令が分岐命令であると認識されるまでに、例えば１１サイクルを必要とする。このため、ディレイ・スロット以降にパイプラインに入ってきた複数の後続命令が無効とされる。したがって、処理効率が著しく低下する。ここで、ディレイ・スロットとは、分岐命令の直後に実行される分岐命令と無関係な命令である。このディレイ・スロットはコンパイラにより設定される。
【０００４】
このように、初期の多段パイプラインを有するプロセッサは分岐命令以降に無効となる命令が多かった。近年のマイクロプロセッサは、無効となる命令を減少させるため、分岐予測回路を有している。この分岐予測回路は、以前実行した分岐命令の履歴を記憶しておき、分岐命令をフェッチした時、履歴を元に以前分岐したアドレスにプログラムカウンタを切り換えるように構成されている。
【０００５】
この分岐予測は、過去の履歴を多く持っているほど正確な予測を行うことができる。このため、命令キャッシュと同様の大きな容量を有するメモリにより履歴を記憶する分岐テーブルが構成される。この分岐テーブルには、分岐命令が存在するアドレス（以下、分岐命令のアドレスと称す）と、その分岐命令が過去に分岐した先のアドレス（以下、分岐先アドレスと称す）が対応して記憶される。しかし、大容量のメモリにより分岐テーブルを構成した場合、分岐テーブルをアクセスするために数サイクルの時間を要する。このため、プログラムカウンタのアドレスが、以前実行した分岐命令のアドレスになったとしても、その分岐命令の分岐先アドレスに切り換えるために数サイクルを必要とする。
【０００６】
図６は、分岐予測をした場合の動作を示している。この例では、分岐命令のアドレスで分岐テーブルをアクセスし、分岐テーブルをアクセスしている間にディレイ・サイクルを実行している。このように分岐予測をした場合、分岐予測をしない場合より少ないサイクルで分岐先アドレスに切り換えることができる。しかし、分岐予測をしても、ディレイ・スロット以降に数サイクルの無効サイクルが発生する。
【０００７】
初期のプロセッサは、動作周波数が低かったため、ディレイ・スロットを実行している間に分岐先アドレスを求めることができ、ディレイ・スロット後に分岐先アドレスへ制御を切り換えることができた。このため、無効なサイクルをなくすことが可能であった。
【０００８】
【発明が解決しようとする課題】
しかし、近時、マイクロプロセッサの動作周波数が高周波化され、且つメモリから命令を読み出すバス幅が大きくされている。このため、１サイクルで複数の命令を同時に読み込めるようになった。例えば１命令が３２ｂｉｔであるのに対して、メモリのバス幅が６４ｂｉｔの場合、並列に２命令が読み込まれる。このため、上記分岐予測を実行しても無効なサイクルが発生するようになってきた。
【０００９】
一方、図７に示すように、例えばディレイ・スロットが命令キャッシュ・ミスを起こした場合、キャッシュをリフィル（ｒｅｆｉｌｌ）する必要がある。上記のように、分岐命令をフェッチした後、分岐命令のアドレスにより分岐テーブルをアクセスし、分岐先アドレスを読み出している。この分岐先アドレスを読み出しているとき、ディレイ・スロットが命令キャッシュ・ミスを起こした場合、キャッシュをリフィルする間、分岐テーブルから読み出した分岐先アドレスを保持しておく必要がある。この後、キャッシュがリフィルされ、ディレイ・スロットを再実行した後、プログラムカウンタのアドレスを保持しておいた分岐先アドレスに切り換えるという操作が必要となる。この制御は複雑であり、回路規模が大きくなるという問題を有している。
【００１０】
このように、高い動作周波数で広いメモリバス幅を有するマイクロプロセッサは、分岐命令による無効サイクルを削減することが困難であった。
【００１１】
本発明は、上記課題を解決するためになされたものであり、その目的とするところは、高い動作周波数で広いメモリバス幅を有するマイクロプロセッサにおいても、分岐命令による無効サイクルを極力抑えることが可能な分岐予測回路を提供しようとするものである。
【００１２】
【課題を解決するための手段】
本発明の分岐予測回路は、上記課題を解決するため、命令のアドレスを示すプログラムカウンタと、分岐命令のアドレスと前記分岐命令により分岐する分岐先アドレスを記憶する第１の記憶部と、前記プログラムカウンタが出力する命令のアドレスと同一の分岐命令のアドレスが前記第１の記憶部内にあるかどうかを検出する第１の検出回路と、前記第１の検出回路により前記分岐命令のアドレスが検出された場合、検出された前記分岐命令の次に実行される命令のアドレスと、前記分岐命令により分岐する分岐先アドレスを記憶する第２の記憶部と、前記プログラムカウンタから出力されるアドレスが前記分岐命令の次に実行される命令のアドレスであるとき、前記第２の記憶部より、前記分岐命令の次に実行される命令のアドレスに対応する分岐先アドレスを検出する第２の検出回路とを具備している。
【００１３】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して説明する。
【００１４】
図１は、本発明の実施形態を示すものであり、分岐予測回路の構成を示している。この分岐予測回路は、第１の記憶部としての第１のテーブル１１と、第２の記憶部としての第２のテーブル１２とを有している。第１のテーブル１１は、例えばスタティックＲＡＭ（ＳＲＡＭ）により構成され、例えば１０２４のエントリを有する大容量のメモリである。第２の記憶部は、後述するように、例えばフリップフロップ回路により構成され、例えば４エントリ程度の小容量で高速なメモリである。図１において、第１、第２のテーブル１１、１２に対する情報の書き込みに関する具体的な構成は省略している。
【００１５】
上記分岐予測回路は、例えば５段階のステージＢ〜Ｔを有するパイプラインにより構成されている。第１のステージＢは、例えば分岐予測を開始するステージであり、第２のステージＰは、プログラムカウンタ、第３のステージＩはインストラクションキャッシュ、第４のステージＦはフェッチ、第５のステージＴは、データトランスファーである。実際の演算などは図示せぬ後続のステージにて実行される。
【００１６】
第１のステージＢには、前記第２のテーブル１２、加算器１４、セレクタ１５が配置され、第２のステージＰにはプログラムカウンタ１３が配置されている。前記第２のテーブル１２の入力端にはプログラムカウンタ１３の出力端が接続される。さらに、第２のテーブル１２の入力端には後述する予測された分岐先アドレスＢＡ２及びパイプライン・レジスタ２５により保持されたプログラムカウンタ１３の値ＰＣＴが供給される。前記第２のテーブル１２、及び加算器１４の出力端は、セレクタ１５の入力端に接続されている。加算器１４は、同時に発行される命令の数に応じてプログラムカウンタ１３のアドレスを更新する。例えば同時に２個の命令が発行される場合、加算器１４はプログラムカウンタ１３のアドレスを“＋２”する。前記セレクタ１５の入力端には、さらに、分岐命令による分岐先アドレスＢＡ１及び予測された分岐先アドレスＢＡ２が供給される。このセレクタ１５から出力されるアドレスは、前記プログラムカウンタ１３に供給される。プグラムカウンタ１３には、同一のアドレスがセットされる。
【００１７】
プログラムカウンタ１３の出力端は、第３のステージＩに設けられたパイプライン・レジスタ（ＰＲ）１６、１７、１８の入力端に接続される。以下、本実施形態において、分岐予測を行う第１のテーブル１１のマッピング方式は、例えば４ウェイセットアソシアティブ方式である場合について説明する。しかし、第１のテーブル１１のマピング方式は、セットアソシアティブ方式に限定されるものではなく、フルアソシアティブ方式等、別の方式を適用することも可能である。
【００１８】
前記ＰＲ１７、１６の出力端は、前記第１のテーブル１１を構成する例えばＳＲＡＭにより構成された第１、第２の記憶回路１１ａ、１１ｂの入力端に接続されている。第１のテーブル１１、後述する第１の検出回路としての比較器２２ａ〜２２ｄ、セレクタ２３は、４ウェイセットアソシアティブ・メモリを構成している。４ウェイセットアソシアティブ・メモリにおいて、第１の記憶回路１１ａは、プログラムカウンタ１３から供給される分岐命令のアドレスの一部をタグとして記憶する。第２の記憶回路１１ｂはプログラムカウンタ１３から供給される分岐命令のアドレスの他の部分に応じて、前記分岐命令に対応した分岐先アドレスをデータとして記憶する。第１、第２の記憶回路１１ａ、１１ｂの出力端は第４ステージのＰＲ２０、１９にそれぞれ接続されている。また、前記ＰＲ１８の出力端は第４ステージのＰＲ２１に接続されている。
【００１９】
前記ＰＲ１９の出力端にはセレクタ２３の入力端が接続されている。このセレクタ２３には、前記第２の記憶回路１１ｂから読み出された複数の分岐先アドレスが供給される。
【００２０】
４ウェイセットアソシアティブ方式を用いた本実施形態において、前記ＰＲ２０の出力端には、４つの比較器２２ａ〜２２ｄの一方入力端が接続されている。これら比較器２２ａ〜２２ｄの他方入力端には前記ＰＲ２１の出力端が接続されている。これら比較器２２ａ〜２２ｄの出力端は、セレクタ２３に接続されている。各比較器２２ａ〜２２ｄは、第１の記憶回路１１ａから読み出された複数の分岐命令のタグとプログラムカウンタ１３から供給されるアドレスの対応する一部（タグ）とを比較する。この結果、両タグが一致した場合、一致した１つの比較器の出力端から一致信号が出力される。セレクタ２３はこの一致信号に応じて、第１のテーブル１１の第２の記憶回路１１ｂに記憶されているプログラムカウンタ１３に対応した分岐命令の分岐先アドレスを選択する。この選択された分岐先アドレスＢＡ２は、第５ステージＴに設けられたパイプライン・レジスタ２４を介して前記セレクタ１５、及び第２のテーブル１２に供給される。さらに、第５のステージＴには、パイプラン・レジスタ２５が設けられている。このパイプライン・レジスタ２５はパイプライン・レジスタ２１に接続されており、パイプライン・レジスタ２１から出力されたプログラムカウンタ１３の値を保持する。このパイプライン・レジスタ２５から出力されたプログラムカウンタ１３の値ＰＣＴは前記第２のテーブル１２に供給される。
【００２１】
図２は、前記第２のテーブル１２の一例を示している。第２のテーブル１２は、前述したように、例えば４個のエントリを有している。各エントリは、例えばフリップフロップ回路（ＦＦ）１２ａ〜１２ｄと、フリップフロップ回路１２ｅ〜１２ｈとにより構成されている。フリップフロップ回路（ＦＦ）１２ａ〜１２ｄは、ディレイ・スロット（分岐命令の直後に実行される分岐命令と無関係な命令）のアドレス（ＤＳＡ）を記憶する。フリップフロップ回路１２ｅ〜１２ｈは、分岐命令に対応した分岐先アドレス（ＢＡ）を記憶する。前記ディレイ・スロットのアドレスは、例えば加算器１２ｍにより、パイプライン・レジスタ２５から供給されるアドレスＰＣＴに所定値を加算して生成される。ディレイ・スロットのアドレスの生成方法については後述する。
【００２２】
フリップフロップ回路１２ｅ〜１２ｈの各出力端はセレクタ１２ｎの入力端に接続されている。また、フリップフロップ回路１２ａ〜１２ｄの各出力端は、比較器１２ｉ〜１２ｌの一方入力端に接続されている。前記プログラムカウンタ１３から出力されたアドレスＰＣは比較器１２ｉ〜１２ｌの他方入力端に供給される。各比較器１２ｉ〜１２ｌは、プログラムカウンタ１３から供給されるアドレスＰＣと各フリップフロップ回路１２ａ〜１２ｄから供給されるアドレスとを比較し、これらが一致した場合、一致信号を出力する。この一致信号はセレクタ１２ｎに供給される。セレクタ１２ｎは、前記比較器１２ｉ〜１２ｌのいずれか１つより出力される一致信号に応じて、対応する分岐命令の分岐先アドレスを選択する。前記比較器１２ｉ〜１２ｌ及びセレクタ１２ｎは、第２の検出回路を構成する。
【００２３】
次に、図３を参照して、上記分岐予測回路の動作について説明する。
【００２４】
図３に示す例は、分岐の履歴を簡単に説明できるよう、分岐先がその分岐命令より前のアドレスに戻る場合を示している。すなわち、このプログラムを例えば次のように定義する。
【００２５】
Ａ：  ｎｏｐ
Ｂ：  ｂｎｅ    ＄１，＄０，Ａ      …（分岐命令）
Ｃ：  ｓｕｂ１  ＄１，＄１，１      …（ディレイ・スロット）
先ず、プログラムカウンタ１３のアドレスが、初めて図３にＡで示す分岐命令のアドレスとなった場合、まだ、第１、第２の記憶部１１、１２に何も登録されていない。このため、アドレスＢの分岐命令は予測できない。したがって、この分岐命令はパイプラインの最後まで進んでから分岐先アドレスＡに切り替わる。
【００２６】
また、この一回目の分岐命令が発生すると、図１に示す第１のテーブル１１に分岐命令のアドレスＢと、その分岐命令の分岐先アドレスＡが登録される。すなわち、第１の記憶回路１１ａに分岐命令のアドレスＢの一部がタグとして記憶され、第２の記憶回路１１ｂに分岐命令の分岐先アドレスＡが記憶される。
【００２７】
続いて、２回目にプログラムカウンタ１３のアドレスが、分岐命令のアドレスＢとなった場合、第１のテーブル１１にその情報が既に記録されている。このため、プログラムカウンタ１３から供給されるアドレスＢと第１のテーブル１１に記憶されているアドレスＢとがヒットし、このアドレスＢに対応して記憶された分岐先アドレスＡが読み出される。
【００２８】
すなわち、プログラムカウンタ１３から出力されるアドレスＢは、クロック信号に応じてＰＲ１６、１７、１８に供給される。本実施形態は、４ウェイセットアソシアティブ方式の場合を示している。このため、このアドレスＢの一部に応じて、第１のテーブル１１の第１の記憶回路１１ａは、４個のタグを読み出し、第２の記憶回路１１ｂは、４個のアドレスを読み出す。比較器２２ａ〜２２ｄは、第１の記憶回路１１ａから供給されたタグとＰＲ１８、２１を介してプログラムカウンタ１３から供給されたアドレスＢの一部（タグ）とをそれぞれ比較する。この結果、もしアドレスＢが上記第１の記憶回路１１ｂに登録された分岐先アドレスに対応している場合、比較器２２ａ〜２２ｄのいずれか１つから一致信号が出力される。セレクタ２３はこの一致信号に応じて、この分岐命令のアドレスＢに対応して読み出された分岐先アドレスＡを選択する。このセレクタ２３から出力された分岐先アドレスＡは前記セレクタ１５に供給される。この分岐先アドレスＡはプログラムカウンタ１３に供給される。以後、分岐先の命令が実行される。
【００２９】
上記２回目の分岐命令の場合、第１のテーブル１１を検索して分岐先アドレスＡが求められる。この分岐先アドレスＡが求まるのは、プログラムカウンタ１３の値が分岐命令のアドレスＢとなってから３サイクル後である。
【００３０】
一方、このサイクルにおいて、第１のテーブル１１がヒットした場合、第２のテーブル１２に、この分岐命令に関するデータが記憶される。この場合、分岐先アドレスＡは分岐命令の次のディレイ・スロットのアドレスＣに対応して記憶される。
【００３１】
図２に示すように、本実施形態において、第２のテーブル１２は、４つのエントリを有している。４つのうちどのエントリを用いるかは、例えばＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）やＬＲＦ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｆｕｌｌｅｄ）などのアルゴリズムを用いて決定される。本実施形態の場合、図示した一番左のエントリが選択されているとする。このため、フリップフロップ回路１２ａに分岐命令の次のディレイ・スロットのアドレスＣが記憶される。また、フリップフロップ回路１２ｅに分岐先アドレスＡが記憶される。ディレイ・スロットのアドレスＣは、例えば加算器１２ｍにより、パイプライン・レジスタ２５から供給されるプログラムカウンタ１３の値ＰＣＴに“１”を加算して生成される。
【００３２】
次に、３回目の分岐命令において、プログラムカウンタ１３が分岐命令の次のディレイ・スロットのアドレスＣを出力すると、第２のテーブル１２を用いて分岐予測が実行される。すなわち、第２のテーブル１２を構成する比較器１２ｉ〜１２ｌは、フリップフロップ回路１２ａ〜１２ｄから供給されるディレイ・スロットのアドレスとアドレスＣとを比較する。この場合、比較器１２ｉから一致信号が出力される。この一致信号はセレクタ１２ｎに供給される。このため、セレクタ１２ｎは、一致信号に応じてフリップフロップ回路１２ｅから供給される分岐先アドレスＡを選択する。このセレクタ１２ｎから出力される分岐先アドレスＡは図１に示すセレクタ１５を介してプログラムカウンタ１３に供給される。
【００３３】
このように、第２のテーブル１２から分岐先アドレスＡを読み出す動作は、クロック信号の１サイクルで実行される。このため、この分岐命令は無効サイクルが全く無い状態で実行できる。この後、再度、この分岐命令を実行する際にも上記と同様の動作が実行されるため、この分岐命令は無効サイクルが全く無い状態で実行される。
【００３４】
上記第２のテーブル１２は、前述した２回目の分岐命令の動作のように、大容量の第１のテーブル１１をアクセスする際に発生する無効サイクルを回避する機能を有している。
【００３５】
ところで、第１のテーブル１１は、分岐命令のアドレスがヒットした場合、分岐先アドレスを発生する。しかし、例えばキャッシュ・ミスが発生した場合、命令供給の条件によっては分岐命令とディレイ・サイクルの間に無効サイクルが入る場合があり得る。本来、このような場合、第１のテーブル１１を用いた分岐処理は、ディレイ・スロットを待って行う必要がある。しかし、第２のテーブル１２は、前述したように、ディレイ・スロットのアドレスにより分岐先アドレスを発生する。このため、第１のテーブル１１で分岐が発生し、その情報が第２のテーブル１２に反映された後、後続のディレイ・スロットのアドレスにより分岐予測が行われる。したがって、キャッシュ・ミスが発生した場合においても、キャッシュがリフィルされた後、確実且つ高速に分岐先アドレスを発生できる。
【００３６】
さらに、図４に示すように、上記分岐予測回路は、ディレイ・サイクルを実行中にキャッシュ・ミスが発生した場合においても確実な動作が可能である。すなわち、分岐命令が発行されると、分岐命令の次のディレイ・スロットが実行されている間に分岐先アドレスが予測される。第１のテーブル１１に分岐命令及び分岐先アドレスが記憶されていると仮定すると、この予測には、前述したように、３サイクルを必要とする。また、予測された分岐先アドレスは第２のテーブル１２にディレイ・スロットのアドレスに対応して記憶される。ディレイ・スロットを実行中にキャッシュ・ミスが発生すると、キャッシュのリフィルが実行される。キャッシュのリフィルが終了し、ディレイ・サイクルが再発行されると、第２のテーブル１２を用いて分岐先アドレスが予測される。このため、再発行されたディレイ・スロットのアドレスから分岐先アドレスを即座に読み出すことができる。したがって、従来のように、ディレイ・スロットを実行中にキャッシュ・ミスが発生した場合においても、パイプラインを保持するようなストール（ｓｔａｌｌ）制御をする必要が無い。このため、制御をより簡単にすることが可能である。
【００３７】
上記実施形態は、第１のテーブル１１を更新した後、次の分岐が発生した時点で第２のテーブル１２の登録／更新を行うような例で説明した。しかし、最初の分岐で第１、第２のテーブル１１、１２を同時に登録／更新するような構成とすることも可能である。この場合、第２のテーブル１２の容量を増加する必要が生じることがある。しかし、第１、第２のテーブル１１、１２の容量を適宜設定することにより最適な構成とすることができる。
【００３８】
上記実施形態によれば、第１のテーブル１１は、分岐命令が存在するアドレスに対応して分岐先アドレスを記憶し、第２のテーブル１２は分岐命令の次のディレイ・スロットのアドレスに対応して、この分岐命令の分岐先アドレスを記憶している。このため、この分岐命令のアドレスとなった場合、ディレイ・スロットのアドレスに応じて、第２のテーブル１２から分岐先アドレスを高速に出力することができる。したがって、高い動作周波数で広いメモリバス幅を有するマイクロプロセッサにおいても、無効となる命令の数を減少できる。
【００３９】
また、第２のテーブル１２は、第１のテーブル１１に記憶されている分岐命令がヒットした場合、この分岐命令に対応する分岐先アドレスをディレイ・スロットのアドレスに対応して記憶している。このため、プログラム内において、頻繁に実行される分岐命令は第２のテーブル１２に記憶されるため、この分岐命令の実行を高速化でき、全体の処理の高速化が可能となる。
【００４０】
しかも、第２のテーブル１２は、第１のテーブル１１に比べて小容量で高速動作が可能なフリップフロップ回路のようなメモリにより構成されている。したがって、頻繁に実行される分岐命令を一層高速に処理できる。
【００４１】
さらに、前記第２のテーブル１２は、ディレイ・スロットのアドレスに対応して分岐命令に対応する分岐先アドレスを記憶している。このため、ディレイ・スロット等において、キャッシュ・ミスが発生した場合において、キャッシュがリフィルされた後、ディレイ・スロットが再発行されると、即分岐先アドレスに移行することができる。したがって、簡単な回路構成により、確実に分岐先アドレスを発生できる。
【００４２】
本発明は、上記実施形態に限定されるものではなく、本発明の要旨を変えない範囲において種々変形実施可能なことは勿論である。
【００４３】
【発明の効果】
以上、詳述したように本発明によれば、高い動作周波数で広いメモリバス幅を有するマイクロプロセッサにおいても、分岐命令による無効サイクルを極力抑えることが可能な分岐予測回路を提供できる。
【図面の簡単な説明】
【図１】本発明の実施形態を示すものであり、分岐予測回路を示す構成図。
【図２】図１に示す第２のテーブルの一例を示す構成図。
【図３】図１、図２の動作を示す図。
【図４】図１、図２の別の動作を示す図。
【図５】従来のマイクロプロセッサにおける分岐命令発生時の動作を示す図。
【図６】従来の分岐予測動作を示す図。
【図７】キャッシュ・ミスが発生した時の分岐予測動作を示す図。
【符号の説明】
１１…第１のテーブル（第１の記憶部）、
１１ａ、１１ｂ…第１、第２の記憶回路、
１２…第２のテーブル（第２の記憶部）、
１２ａ〜１２ｈ…フリップフロップ回路、
１２ｉ〜１２ｌ…比較器、
１２ｍ…加算器、
１２ｎ、２３…セレクタ、
１３、１３…プログラムカウンタ、
２２ａ〜２２ｄ…比較器。
【図１】
0003577049.tif 000002
【図２】
0003577049.tif 000003
【図３】
0003577049.tif 000004
【図４】
0003577049.tif 000005
【図５】
0003577049.tif 000006
【図６】
0003577049.tif 000007
【図７】
0003577049.tif 000008