(57)【特許請求の範囲】
【請求項１】
実行装置、該実行装置による実行のために命令をデコードする命令デコード装置を有し前記命令を順番に処理するように複数段からなる命令実行パイプラインと、命令アドレスに従い命令コードを記憶するための第１レベル・キャッシュ・メモリと、アドレスに従い情報を記憶するための第２レベル・キャッシュ・メモリと、前記命令実行パイプラインに使用するように前記命令コードを検索するための前記命令アドレスにより第１レベル・キャッシュ・メモリをアドレスするフェッチ装置と、を有するマイクロプロセッサにおいて、
複数個のエントリを含む分岐目標バッファを有し、前記各エントリは、複数の分岐命令のうちの一つと関連し、この関連した分岐命令の命令アドレスに対応するタグフィールドを有し、かつ目標フェッチ・アドレスを記憶する目標フィールドを有し、前記分岐目標バッファは実行すると予測される分岐命令に対して目標フェッチ・アドレスを与え、さらに、前記各エントリは前記関連した分岐命令のための前記目標フェッチ・アドレスと組み合わせて先取りされる情報の先取りアドレスを示す少なくとも１つの先取りフィールドを有し、
前記命令実行パイプラインに結合され、前記関連した分岐命令の実行後に前記命令実行パイプラインにより実行され、前記命令コードが記憶されている前記第１レベル・キャッシュ・メモリ中の命令アドレスに対応しないフェッチ・アドレスを有する命令を識別し、識別した前記命令に対応する先取りフィールドを発生する平滑回路を有するマイクロプロセッサ。
【請求項２】
特許請求の範囲第１項記載のマイクロプロセッサにおいて、フェッチ装置はさらに、
前記関連した分岐命令の命令アドレスに対応する前記分岐目標バッファのエントリから前記先取りアドレスを受け取り、該先取りアドレスを前記第２レベル・キャッシュ・メモリへ伝送するように前記分岐目標バッファに結合された先取り論理部と、
前記関連した分岐命令の実行に応答して前記分岐目標バッファのエントリを更新するように前記命令実行パイプラインに結合された更新回路を有するマイクロプロセッサ。
【請求項３】
特許請求の範囲第２項記載のマイクロプロセッサにおいて、
前記命令コードが記憶されている前記第１レベル・キャッシュ・メモリ中の前記命令アドレスに対応しない前記フェッチ・アドレスに応答して前記第２レベル・キャッシュ・メモリへ前記フェッチ・アドレスを付加するメモリ制御回路をさらに有するマイクロプロセッサ。
【請求項４】
特許請求の範囲第１項記載のマイクロプロセッサにおいて、前記第１レベル・キャッシュ・メモリはデータ・ロード・アドレスに応じたデータオペランドを記憶し、
前記平滑回路は、前記関連した分岐命令の実行後の前記命令実行パイプラインにより実行され、前記データオペランドが記憶されている前記第１レベル・キャッシュ・メモリの前記データ・ロード・アドレスに対応しないアドレスからのデータを要求する演算に関連する命令を識別するためであり、識別した命令に対応する先取りフィールドを発生する、マイクロプロセッサ。
【請求項５】
特許請求の範囲第１項記載のマイクロプロセッサにおいて、前記分岐目標バッファの各エントリは、前記関連した分岐命令に対する前記目標フェッチ・アドレスと組み合わせて先取りされるべき情報の先取りアドレスを指示する複数個の先取りフィールドを有するマイクロプロセッサ。
【請求項６】
特許請求の範囲第１項記載のマイクロプロセッサにおいて、前記平滑回路は、
前記命令実行パイプラインにより実行された分岐命令に関する制御情報を記憶する第１分岐キューと、
前記分岐命令の実行後に前記命令実行パイプラインにより実行される命令を識別し、かつ命令コードが記憶される前記第１レベル・キャッシュ・メモリ中の命令アドレスに対応しないフェッチ・アドレス、またはデータオペランドが記憶される前記第１レベル・キャッシュ・メモリ中のデータ・ロード・アドレスに対応しないアドレスからデータを要求する演算に関連していないフェッチ・アドレスを有し、識別した命令を第１分岐キューの分岐命令の１つと関連付けるタグ検査論理と、
を有するマイクロプロセッサ。
【請求項７】
特許請求の範囲第６項記載のマイクロプロセッサにおいて、前記タグ検査論理は、前記第１分岐キューの第１の分岐命令に続く前記第１分岐キューの第２の分岐命令の目標アドレスを識別し、該第２の分岐命令の識別した目標アドレスを前記第１の分岐命令と関連付けるためであるマイクロプロセッサ。
【請求項８】
特許請求の範囲第７項記載のマイクロプロセッサにおいて、
前記第１分岐キューの前記分岐命令に関する制御情報を記憶する第２分岐キューをさらに有し、
前記タグ検査論理は、第１の識別命令を前記分岐命令に関連付けた後に前記第１分岐キューの分岐命令を前記第２分岐キューに配置し、分岐命令の実行後に前記命令実行パイプラインにより実行され、命令コードが記憶されている前記第１レベル・キャッシュ・メモリの命令アドレスに対応しないフェッチ・アドレスを有し、又はデータオペランドが記憶された前記第１レベル・キャッシュ・メモリのデータ・ロード・アドレスに対応しないアドレスからデータを要求する演算に関連付ける前記第２の命令を識別し、この第２の命令を前記第２分岐キューの前記分岐命令の内の１つに関連付ける、マイクロプロセッサ。
【請求項９】
特許請求の範囲第１項記載のマイクロプロセッサにおいて、前記分岐目標バッファの各エントリの少なくとも１個の先取りフィールドの各々は、
先取りアドレスを記憶する先取りアドレスフィールドを有するマイクロプロセッサ。
【請求項１０】
特許請求の範囲第９項記載のマイクロプロセッサにおいて、前記分岐目標バッファの各エントリの少なくとも１個の先取りフィールドの各々は、
最近先取りした、先取りアドレスが前記第１又は第２レベル・メモリに記憶されているかどうかの指示を記憶する先取りカウンタを有するマイクロプロセッサ。
【請求項１１】
特許請求の範囲第１項記載のマイクロプロセッサにおいて、前記分岐目標バッファの各エントリの少なくとも１個の先取りフィールドの各々は、
前記目標フェッチ・アドレスに続くアドレスの情報のブロックの先取りを要求する指示子を有するマイクロプロセッサ。
【請求項１２】
特許請求の範囲第１項記載のマイクロプロセッサにおいて、さらに、
一方の側を前記命令実行パイプラインとメモリに結合し、他方の側を外部バスに結合したバス・インターフェース装置と、
外部バスに結合した、マイクロプロセッサ用の外部の主メモリと、
を有するマイクロプロセッサ。
【請求項１３】
命令のプログラムを実行するためマイクロプロセッサを操作する方法において、
命令アドレスを分岐目標バッファに加えるステップであって、前記分岐目標バッファは複数個のエントリを有し、各々が分岐命令識別子を記憶するタグフィールドを有し、目標フェッチ・アドレスを記憶する目標フィールドを有し、第１先取りアドレスを記憶する第１先取りフィールドを有し、
第１分岐命令に続く命令列の実行を監視し、キャッシュ・ミスと関連する第１命令を検出し、
前記第１の検出した命令を前記第１分岐命令と関連付け、
前記第１分岐命令に対応する前記分岐目標バッファのエントリの第１先取りフィールドを前記第１の検出命令に対応するアドレス及び制御情報により更新し、
前記複数個のエントリの内の１つのタグフィールドに整合するように付加する前記分岐命令アドレスの部分に応答して、整合エントリの前記分岐目標フェッチ・アドレスを第１レベル・キャッシュ・メモリに付加し、前記第１先取りアドレスを前記第１レベル・キャッシュ・メモリよりレベルの高い第２レベル・キャッシュ・メモリへ付加する方法。
【請求項１４】
特許請求の範囲第１３項記載の方法において、さらに
前記監視のステップの前に、前記第１分岐命令の実行を識別し、
前記識別の後に、前記第１分岐命令に対応する情報を第１分岐キューに配置し、
前記関連付けの後に、前記第１分岐命令に対応する情報を前記第１分岐キューから取り除く方法。
【請求項１５】
特許請求の範囲第１４項記載の方法において、さらに
前記は位置の後かつ監視の前に、命令列の実行を監視して、前記第１分岐命令の前記目標フェッチ・アドレスに対応する命令を検出する方法。
【請求項１６】
特許請求の範囲第１４項記載の方法において、前記監視ステップは、前記第１分岐命令に続く命令列の実行を監視し、前記第１分岐命令よりプログラム順序で後の第２分岐命令の前記目標フェッチ・アドレスに対応する命令を検出し、
キャッシュ・ミスと関係している第２分岐命令の前記目標フェッチ・アドレスに対応する検出命令に応答して、関連付け及び更新のステップを実行し、
前記キャッシュ・ミスと関係しない前記第２分岐命令の前記目標フェッチ・アドレスに対応する検出命令に応答して、前記第１分岐キューから前記第１分岐命令に対応する情報を取り除くステップを実行する方法。
【請求項１７】
特許請求の範囲第１４項記載の方法において、さらに
前記第１分岐キューから前記第１分岐命令に対応する情報を取り除いた後に、前記第２分岐キューへ前記第１分岐命令に対応する情報を配置し、
前記命令列の実行を監視して、キャッシュ・ミスと関連する第２命令を検出し、
前記第２の検出命令を前記第１分岐命令と関連付け、
関連付けの後に、前記第２分岐キューから前記第１分岐命令に対応する情報を取り除き、
前記第１分岐命令に対応する前記分岐目標バッファ中のエントリの第２先取りフィールドを、第２検出命令に対応するアドレス及び制御情報により更新する
方法。
【請求項１８】
特許請求の範囲第１３項記載の方法において、前記第１検出命令に対応するアドレス及び制御情報は前記第１検出命令に対して発生するキャッシュ・レベル・ミスの指示子を有する方法。
【請求項１９】
特許請求の範囲第１３項記載の方法において、前記分岐目標バッファの各エントリは先取り制御フィールドを有し、前記第１先取りフィールドが正当な前記第１先取りアドレスを有するかどうかを指示する前記第１先取りフィールドと関連する第１先取り制御部分を有する方法。
【請求項２０】
特許請求の範囲第１９項記載の方法において、前記先取り制御フィールドはさらに、付勢された時に、前記目標フェッチ・アドレスに対するメモリの追加のブロックを先取りすべきであることを指示するキャッシュ線先取り指示子を有し、さらに、付勢された前記キャッシュ線先取り指示子に応答して、前記目標フェッチ・アドレスを基にキャッシュ線先取りアドレスを第２レベル・キャッシュ・メモリへ付加する方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロプロセッサの分野であり、特にキャッシュ・メモリ利用に関係する。
【０００２】
【従来の技術】
マイクロプロセッサや他のプログラム可能な論理素子の分野では、近年顕著な性能改善を生じる多くの改良が行なわれている。このような改良の一つはパイプライン・アーキテクチャの実装であり、これは実行の各段階で複数のマイクロプロセッサ命令が同時に処理され、従って以後の命令（プログラム順序で）の処理が前の命令の完了の前に開始されている。各個々の命令の処理はフェッチから実行まで複数のマシン・サイクルを必要とするにも係わらず、パイプライン化のため、マイクロプロセッサにより実行される命令の実効速度は単一パイプライン・マイクロプロセッサではマシン・サイクル当たり1 命令に近づく。いわゆるスーパースカラー・アーキテクチャは並列に動作する複数のパイプラインを有効に有し、さらに高い理論的性能レベルを提供する。
【０００３】
分岐が依存する条件はフェッチの後数サイクルたった実行時まで未知であるため、条件分岐命令はパイプライン・アーキテクチャのマイクロプロセッサに複雑性を与える。このような状況下では、マイクロプロセッサは条件が解明されるまで分岐後の命令のフェッチを停止し、パイプラインに「泡」の空きの段（すなわち可能性のある命令処理スロット）を導入するか、又は代わりに、推測が正しくないと決定された場合にその現在の命令のパイプラインを「フラッシュ」しなければならない危険を冒して、パイプラインを充填するために命令を推測的にフェッチ（実際には条件を推測して）しなければならない。
【０００４】
推測実行の成功率が合理的である限り、パイプラインを充填する命令の推測実行の利点は、特に長い又は複数パイプラインのアーキテクチャでは、パイプライン・フラッシュの性能劣化より標準的にはまさっている。それ故多くの現代のマイクロプロセッサは分岐命令の振る舞いをある確度で予測するある種の分岐予測技術に従う。分岐予測に対する公知の方式は、予測が時間又は履歴で変化しない「静的」予測と、分岐予測が前に実行された分岐の結果に従って行われる「動的」予測とを含む。
【０００５】
従来の動的分岐予測方式の進歩した型式は、他の命令の分岐結果ではなく、それ自身の分岐履歴を基に分岐命令の結果を予測する。この方式は一般的に分岐目標バッファにより現代のマイクロプロセッサに組み込まれている。従来の分岐目標バッファ、すなわちＢＴＢは、最近出会った分岐命令の識別子（「タグ」）、これに基づいて予測を行なう分岐履歴関連コード、及び分岐が実行されるものとして予測された場合にフェッチされる次の命令の目標アドレス（「実行されない」予測に対しては次の連続アドレスがフェッチされるべきアドレスである）を各々記憶するエントリのキャッシュ型表である。分岐命令を含む命令のブロックをフェッチした時、そのアドレスをＢＴＢ中のタグと照合してこの命令を含むブロックが前に出会ったかどうかを決定する；そうならば、その命令に対するＢＴＢ中で指示される予測コードに応じて、次のフェッチは目標アドレスにより指示される命令のブロックに対応する。新たに出会った分岐命令は、ＢＴＢに履歴がないため静的に予測される。命令の実行と完了時に、ＢＴＢが作成され（最初の場合）又は変更され（以後の場合）、その命令の次の場合の結果を予測する際に分岐命令の実際の結果を反映する。
【０００６】
現代のマイクロプロセッサの性能を大いに改良する他の公知の技術は、１段階以上のレベルのキャッシュ・メモリの実装である。当該技術において基本的なように、現代のマイクロプロセッサを基にしたシステムはオンチップ及び外部キャッシュ・サブシステムの両方の高速ランダム・アクセス・メモリをキャッシュ・メモリとして利用している。キャッシュ・メモリは遅い主メモリからマイクロプロセッサによりフェッチされたメモリ位置の近傍にあるメモリ位置の内容を記憶するために通常使用される。例えば、４バイト・データ語を主メモリから検索する度に、３２バイト・メモリ・アクセスを実行して所要の４バイト・データ語を得て、これを３２バイト・キャッシュ線路として近傍のデータと共にキャッシュに記憶する。以後、キャッシュ線路中のデータ語へのアクセスは従って主メモリ・アクセスを必要とする場合より迅速に実行される。標準的な場合にそうであるように、連続的なメモリ・アクセスが近傍のメモリ位置へ行われている範囲では、キャッシュ中の近傍メモリ位置内容の存在はオフチップ・メモリへの同様のアクセスを実行する際にこうしなければ必要とされるであろう多数のウェイト状態を著しく減少可能である。
【０００７】
標準的なマイクロプロセッサ又はマイクロプロセッサを基にしたシステムはそのキャッシュを複数レベルに従って構成している。例えば、従来のマイクロプロセッサはオンチップ「レベル０」データ・キャッシュ、専用のレベル１オンチップ命令及びデータ・キャッシュ、及び外部キャッシュ・サブシステムの統合レベル２キャッシュを含む。この配置では、メモリ・アドレスは連続的に各レベルへ付加し、低レベル・キャッシュでのキャッシュ・ミス（すなわち、キャッシュが所要アドレスを含んでいない）の場合にはメモリ・アドレスが次の高次のレベルのキャッシュに付加される。全レベルでキャッシュ・ミスすると、主メモリがアクセスされ、標準的にはデータ又は命令コードの全キャッシュ・ラインを検索することにより以後のサイクルでそこへのキャッシュ・アクセスを可能とする。勿論、キャッシュ・ミスに伴う不利益（ウェイト状態）は高次のレベルのキャッシュ・ミスに対してより厳しくなる。例えば、レベル０でミスしレベル１でのヒットには１ウェイト状態が付随し、レベル１でミスしレベル２でのヒットには２ウェイト状態が付随するが、レベル２統合キャッシュでのキャッシュ・ミスの場合には主外部メモリのアクセスに２５ウェイト状態を必要とする。従ってキャッシュ・ヒット率がマイクロプロセッサとそのシステムの全体性能に格別の重要性を有するようになる。
【０００８】
上述したように、データ及び命令の両方のメモリの規則的な連続アクセスが相対的に高いキャッシュ・ヒット率を有するように、キャッシュにコピーされるメモリは前にアクセスされたメモリ位置へのその近さのために標準的に選択される。しかしながらこれも上述したように、多くの従来プログラムは分岐命令を含み、プログラムの流れは必ずしも連続的ではない。従って、実行されるであろうと予測された分岐命令の場合のように、フェッチされる次の命令が最近の順序にない時にはキャッシュ・ミスが共通して発生するのみならず、主メモリ・アクセスを必要とする時にはそのようなミスから生じる不利益は相当なものとなる。
【０００９】
【発明が解決しようとする課題】
それ故本発明の目的はキャッシュ・ヒット率が改良されたマイクロプロセッサ及びシステムを提供することである。
【００１０】
本発明の別な目的は、分岐予測機構を使用してキャッシュ・メモリへのメモリ位置の先取りを開始するマイクロプロセッサとシステムである。
【００１１】
本発明の別の目的は、以前の命令の実行結果に基づいてキャッシュ先取りが開始されるマイクロプロセッサとシステムを提供することである。
【００１２】
本発明の別の目的は、キャッシュ先取りが動的に制御されるマイクロプロセッサとシステムを提供することである。
【００１３】
本発明の他の目的と利点は以下の明細書とその図面を参照して当業者には明らかとなる。
【００１４】
【課題を解決するための手段】
本発明は、各分岐目標バッファ・エントリに少なくとも1 個のキャッシュ先取りフィールドを含ませることにより、実行の動的分岐予測に分岐目標バッファを利用したマイクロプロセッサに実装される。先取りフィールドは目標命令のフェッチと組み合わされて先取りされるメモリ位置を指示し、これは分岐の実行に続く命令のキャッシュ・ミスを追跡することにより分岐命令の実行完了時にキャッシュ先取りアドレスにより満たされる。
【００１５】
【発明の実施の形態】
ここで図１を参照すると、本発明の望ましい実施例を実装した例示のスパースカラ・パイプライン・マイクロプロセッサ10を含む例示のデータ処理装置３００が記述されている。本発明は各種のアーキテクチャのマイクロプロセッサに利用出来ると考えられるため、装置３００とマイクロプロセッサ１０のアーキテクチャは本明細書では単なる1 例として記載されていることを理解すべきである。それ故、当業者は本明細書を参照して、本発明を前記他のマイクロプロセッサ・アーキテクチャに容易に実装可能であると考えられる。さらに、本発明は単一チップのマイクロプロセッサ及びマイクロコンピュータ又は複数チップ実装で実現でき、前記集積回路の製造はシリコン基板、絶縁体上のシリコン、ガリウム砒素、及び他の製造技術、さらにＭＯＳ、ＣＭＯＳ，バイポーラ、ＢｉＣＭＯＳ又は他の素子実装により実現されると考えられる。
【００１６】
図１に示すマイクロプロセッサ１０は外部バスＢＵＳにより他のシステム装置に接続される。本例では外部バスＢＵＳは単一のバスとして示されているが、ＰＣＩローカル・バス・アーキテクチャを利用した従来のコンピュータで公知のように異なる速度とプロトコルを有する複数のバスを表わす外部バスＢＵＳももち論考えられる。装置３００は、通信ポート３０３（モデム・ポート及びモデム、ネットワーク・インターフェース、等を含む）、画像表示装置３０４（画像メモリ、画像プロセッサ、画像モニタを含む）、動的ランダム・アクセス・メモリ（ＤＲＡＭ）により標準的に実装される主メモリ装置３０５、入力装置３０６（キーボード、ポインティング装置、及びそのインターフェース回路を含む）、ディスク装置３０８（ハードディスク・ドライブ、フロッピー・ディスク・ドライブ、ＣＤ−ＲＯＭドライブを含む）のような従来のサブシステムを含む。装置３００の標準的な実装は標準的には外部キャッシュ・メモリ３０７を含み、これはキャッシュ・タグ比較器と制御回路と組み合せて実装された高速メモリであり、従って期待されるメモリ・アクセスは遅い外部主メモリ３０５へのアクセス無しに迅速に実行できる。それ故、図１のシステム３００は現在当該技術で一般的な従来のデスクトップ・コンピュータ又はワークステーションに対応するものと考えられる。もち論、当業者には認められるように、マイクロプロセッサ１０の他のシステム実装も本発明から利益を受けられる。
【００１７】
マイクロプロセッサ１０は外部バスＢＵＳへ接続されたバス・インターフェース装置（ＢＩＵ）１２を含み、この装置はマイクロプロセッサ１０と装置３００中の他の要素との間の通信を制御し実行する。ＢＩＵ１２は、この機能を実行するための適当な制御及びクロック回路を含み、これらは動作速度を増加するための書き込みバッファを含み、又内部マイクロプロセッサ動作の結果をバスＢＵＳタイミング制約と同期させるようなタイミング回路を含む。マイクロプロセッサ１０も装置クロックＳＹＳＣＬＫを基にクロック位相を発生するクロック発生及び制御回路２０を含み、本例では、クロック発生及び制御回路２０は装置クロックＳＹＳＣＬＫからバス・クロックＢＣＬＫとコア・クロックＰＣＬＫを発生する。
【００１８】
図１から明らかなように、マイクロプロセッサ１０は３レベルの内部キャッシュ・メモリを有し、これらの内の高位のものはレベル２キャッシュ１１として内部バスによりＢＩＵ１２に接続されている。本例では、レベル２キャッシュ１１は統合キャッシュであり、マイクロプロセッサ１０により与えられるバス・トラフィックの多くがレベル２キャッシュ１１を介して行われるようＢＩＵ１２を介してバスＢＵＳからの全てのキャッシュ可能なデータ及びキャッシュ可能な命令を受取るよう構成されている。ある種のバス読取書込みを「キャッシュ不可能」として取り扱うことにより、マイクロプロセッサ１０もキャッシュ１１まわりのバス・トラフィックを実行する。図２に示すように、レベル２キャッシュ１１は２個のレベル１キャッシュ１６に接続される、すなわちレベル１データキャッシュ１６d はデータ専用であり、一方レベル１命令キャッシュ１６i は命令専用である。マイクロキャッシュ１８は本例では完全二重ポートのレベル０データ・キャッシュである。主変換ルックアサイド・バッファ（ＴＬＢ）１９はＢＩＵ１２を介したレベル２キャッシュ１１へ及び主メモリへのメモリ・アクセスを制御し、このような制御はアドレス変換用のメモリ中のページ表へのアクセスの順序付けを含む。ＴＬＢ１９は又ページ表のキャッシュとしての役割も果たす。命令マイクロ変換ルックアサイド・バッファ（μＴＬＢ）２２とデータ・マイクロ変換ルックアサイド・バッファ（μＴＬＢ）３８は、各々従来の方法でレベル1 命令キャッシュ１６i とレベル１データ・キャッシュ１６d へのアクセス用に論理データ・アドレスを物理アドレスに変換するために設けられる。
【００１９】
図１に示すように、マイクロプロセッサ１０はスパースカラ型式で、従って複数の実行装置を含む。これらの実行装置は、条件分岐、整数及び論理演算処理用の2 個のＡＬＵ４２0 、４２1 、浮動小数点装置（ＦＰＵ）３１、2 個のロード・ストア装置４０0 、４０1 、及びマイクロシーケンサ４８を含む。2 個のロード・ストア装置４０は真に並列のアクセスをするためマイクロキャッシュ１８への2 個のポートを利用し、又レジスタ・ファイル３９中のレジスタへのロード及びストア演算も実行する。当該技術で従来の方法のように、レジスタ・ファイル３９はプログラマ使用に利用可能な汎用レジスタと、コード・セグメント・レジスタＣＳを含む制御レジスタも含む。
【００２０】
これらの複数実行装置は、各々がライトバックを有する7 段の複数パイプラインにより制御される。パイプラインの段は以下の通りである：
Ｆ      フェッチ：この段は命令アドレスを発生し、命令キャッシュ又はメモリから命令を読み取る
ＰＤ０  プレデコード段階０：この段は3 個までのフェッチされたｘ８６型命令の長さと開始位置を決定する
ＰＤ１  プレデコード段階1 ：この段はｘ８６命令バイトを取り出し、デコード用に固定長に再コード化する
ＤＣ    デコード：この段はｘ８６命令を原子演算（ＡＯｐｓ）に翻訳するＳＣ    スケジュール：この段は4 個までのＡＯｐｓを適当な実行装置（ＦＰＵ３１を含む）に割り当てる
ＯＰ    オペランド：この段はＡＯｐｓにより指示されるレジスタオペランドを検索する
ＥＸ    実行：この段はＡＯｐｓと検索オペランドにしたがって実行装置を実行させる
ＷＢ    ライトバック：この段は実行結果をレジスタ又はメモリに記憶させる
【００２１】
図１を参照すると、上記したパイプライン段はマイクロプロセッサ１０内の各種の機能ブロックにより実行される。フェッチ装置２６は、以後詳細に説明される分岐目標バッファ（ＢＴＢ）５６による分岐予測技術に従うものを含めて、レベル1 命令キャッシュ１６i へ付加するための命令マイクロ変換ルックアサイド・バッファ（μＴＬＢ）２２による命令ポインタからアドレスを発生する。命令キャッシュ１６i は命令データの流れをフェッチ装置２６へ発生し、この装置は又命令コードを所要の順序でプレデコード０段２８とプレデコード１段３２へ与える。これら２つの段は別々のパイプライン段として協動し、共に３個までのｘ８６命令を配置しこれをデコーダ34へ付加する。プレデコード０段２８は３個までの可変長ｘ８６命令の寸法と位置を決定し、その間プレデコード１段３２は複数バイト命令のデコードを容易にするため固定長形式に再コード化する。本例のデコード装置３４は、４個の命令デコーダを含み、この各々がプレデコード１段３２から固定長ｘ８６命令を受取り、実質的にＲＩＳＣ命令と等価である１個から３個の原子演算（ＡＯｐｓ）を発生可能である。スケジューラ３６はデコード装置３４の出力のデコード・キューから４個までＡＯｐｓを読取り、これらのＡＯｐｓを適当な実行装置に割り当てる。オペランド装置４４はスケジューラ３６とマイクロコードＲＯＭ４６からマルチプレクサ４５を介して入力を受け取り、命令の実行に使用するためのレジスタオペランドをフェッチする。加えて、本例によると、オペランド装置４４は記憶する用意が出来ているレジスタに結果を送信するためオペランド転送を実行し、ロード及びストア型式のＡＯｐｓに対してアドレス発生を実行する。
【００２２】
マイクロシーケンサ４８とマイクロコードＲＯＭ４６は、一般的には１サイクル中で実行する最後のＡＯｐｓであるマイクロコード・エントリＡＯｐｓの実行時にＡＬＵ４２とロード／ストア装置４０を制御する。本例では、マイクロシーケンサ４８はマイクロコードＲＯＭ４６に記憶されたマイクロ命令中を進行し、複雑な又はまれに使用されるｘ８６命令、セグメント又は制御レジスタを変更するｘ８６命令、例外と割り込みの処理、複数サイクル命令（ＲＥＰ命令、全てのレジスタをＰＵＳＨ、ＰＯＰする命令）のようなマイクロコード化されたマイクロ命令に応答して制御する。
【００２３】
マイクロプロセッサ１０は又、製造の完了時及びリセットと他の事象時にマイクロプロセッサ１０の動作の正当性を確認するためＪＴＡＧ走査検査の動作、及びある種の組み込み自己検査（ＢＩＳＴ）機能を制御するために回路24を含む。
【００２４】
本発明の望ましい実施例によると、マイクロプロセッサ１０は、外部メモリ３０５、３０７、又はレベル２キャッシュ１１から、レベル１命令キャッシュ１６i とレベル１データ・キャッシュ１６d のような下位レベルへ命令又はデータの先取りを制御するための先取り制御論理２３も含む。以後詳細に説明するように、先取り制御論理２３は、パイプライン中の以後の分岐命令の目標及び期待されるキャッシュ・ミスに対応する先取り情報により、レベル１命令キャッシュ１６i からの分岐命令の目標のフェッチと同時にレベル2 キャッシュ１１へのアクセスを開始する。図１に図示するように、先取り制御論理２３は線路ＰＦ０／１上のフェッチ装置からの可能な先取りアドレスと制御情報を受取り、バスＰＦＡ上のＴＬＢ１９へ先取り要求とアドレスを発生する。
【００２５】
以下の説明からより詳細に明らかになるように、本発明の望ましい実施例による分岐目標フェッチと組み合せて実行される先取りは、フェッチを開始する分岐命令の従前の発生に従うプログラム命令の実行を監視することにより決定される。従って、マイクロプロセッサ１０は、線路ＧＲＢＲ（分岐に対して）と線路ＴＣＫ（分岐を含む全ての命令にに対して）上で実行を完了している命令に対して各種の実行装置から情報を受取る平滑キュー及びタグ検査回路２７をさらに含む。命令の実行の結果と他の因子を基に、平滑キュー及びタグ検査回路２７はバスＵＰＤ上にフェッチ装置２６へ更新情報を発生する。以下に更に詳細に説明するように、バスＵＰＤ上で通信される情報は、従前の分岐命令と関連している、先取りが有効な命令（例えば重大なキャッシュ・ミスを含む命令）のアドレスを含む。フェッチ装置２６と先取り制御論理２３はこの情報を利用して分岐目標と同時に先取りを開始し、従って同一の順序の命令による以後のパスでのキャッシュ・ミスの可能性は避けられる。
【００２６】
ここで図２を参照すると、本発明の望ましい実施例による先取り制御論理２３と組み合せたフェッチ装置２６の構成と動作が記載されている。上述したように、フェッチ装置２６はデコード用にフェッチされる次の命令のアドレスを決定する機能を実行する。このようなため、フェッチ装置２６は命令がマイクロプロセッサ１０のパイプラインにロードされる順序を決定し、本発明の本実施例では従って特に分岐予測によるアドレスの推測実行を制御する。
【００２７】
フェッチ装置２６の動作は、マルチプレクサ５２により選択されるいくつかの方法の内の一つに従って発生される論理フェッチ・アドレスＦＡに基づいている。フェッチ・アドレスＦＡは、次の連続アドレスをデコード用にフェッチすべき場合には、フェッチ装置２６のフェッチ・ポインタ５０の内容から単に発生される。図２に示すように、フェッチ・ポインタ５０は、出力をマルチプレクサ５２の１つの入力とそして増分器５１に接続したフェッチ装置２６中のレジスタである。増分器５１はフェッチ・アドレスの値を増分的に進行させ、フェッチ・ポインタ５０の可能な記憶と次のフェッチでの使用のために、マルチプレクサ５８の入力へ増加したフェッチ・アドレスを付加する。マルチプレクサ５８は次のアクセス用にフェッチ・ポインタ５０の更新した内容のソースが選択される。フェッチ・アドレスＦＡを発生する第２の方法は、マルチプレクサ５２への実行装置（例えばマイクロシーケンサ４８）の内の一つによるものであり、例えば、フェッチ装置２６により予測されない分岐の場合である。この値も、適切にフェッチ・ポインタ５０に記憶するためマルチプレクサ５８の入力に付加される。
【００２８】
フェッチ・アドレスＦＡはフェッチ装置２６の各機能に与えられてデコード用の次の命令のフェッチを制御する。例えば、フェッチ装置２６は命令μＴＬＢ２２と通信し、これは以前に変換した位置を指している場合に論理フェッチ・アドレスと整合する物理アドレスＰＡを返す。又は論理フェッチ・アドレスＦＡはフェッチ装置２６の外部のＴＬＢ１９により物理アドレスに変換される。いずれにせよ、命令アドレスＩＡはフェッチ装置２６によりレベル１命令キャッシュ１６i に与えられてそこから命令コードを検索する。勿論、レベル１命令キャッシュ１６i でキャッシュ・ミスが発生した場合、物理アドレスは統合レベル２キャッシュ１４へ与えられ、このレベルでキャッシュ・ミスの場合には主メモリへ行く。命令アドレスＩＡに応答して、レベル1 命令キャッシュ１６i は、プレデコード０段２８へ結果として与えるためにフェッチ装置２６の命令バッファ６０へ命令コード列ＣＯＤＥを与える。各命令アドレスＩＡが１６命令のブロックをアドレスする場合のため、命令バッファ６０は１６命令の容量を有する。
【００２９】
フェッチ装置２６は、ブレークとして識別される命令に対してそれ以上のフェッチを停止する命令ブレーク検査回路６２のようなその外の従来の機能も含む。フェッチ装置２６は又、論理フェッチ・アドレスＦＡが現在のコード・セグメントの境界の限界の外側のアドレスを指しているかどうかを決定するため、コード・セグメント限界検査回路６４も含む。
【００３０】
上述したように、フェッチ装置２６はプログラム順序ではない方法で次のフェッチ・アドレスを発生する回路を含む。図２に示すように、フェッチ装置２６は戻りアドレス・キュー55を含み、これはいくつかの位置を有する後入れ先出し（ＬＩＦＯ）メモリで、ここでサブルーチン・コールの戻りアドレスとサブルーチン戻りがサブルーチンの推測実行で使用するため記憶される。
【００３１】
本発明の本実施例では、フェッチ装置２６は又分岐目標バッファ（ＢＴＢ）５６を含み、これは分岐命令の現在の例を推測する分岐の以前の履歴を指示するデータと共に、フェッチ・アドレスＦＡとして使用する分岐命令の目標アドレスを記憶し、従ってパイプラインが可能な限り充填状態で保持されるようにするキャッシュ型配置のエントリである。ＢＴＢ５６は、各現在のフェッチ・アドレスＦＡが最近にフェッチされた分岐命令を指しているかどうかを決定することによりこれを実行し、またこのために分岐履歴が推測実行で使用するためにＢＴＢ５６に記憶される。当該技術において公知のように、推測に失敗した分岐（又は条件分岐の結果を待機しているパイプライン・ストール）は消失実行機会で計測して重大な不利益を生じるため、図１のスパースカラ・マイクロプロセッサ１０のような深くパイプラインされたマイクロプロセッサでは推測実行は重要な性能強化である。
【００３２】
発明の本望ましい実施例では、ＢＴＢ５６は２レベル型式のもので、引用により本明細書に含まれる１９９６年１２月１０日提出の「マイクロプロセッサの分岐予測用の複数全体パターン履歴表」という名称の当社索引番号（ＴＩ−２３７９１Ｐ）から派生した共願出願に記述されているような、分岐履歴情報により呼び出される分岐コードを記憶するための複数パターン履歴表５３と組み合せて動作する。特定のアドレスに対して分岐予測を発生する際に使用されるパターン履歴表５３の内の適当なものの選択は、分岐命令が含まれるプログラムの型式に応じて選択論理８０により行われる。図2 に図示するような、選択論理80は、コード・セグメント・レジスタＣＳからの線路Ｕ／Ｓ上で通信されるように、現在の分岐命令を含むプログラムの型式に関する情報に応答してパターン履歴表５３中から選択する。加えて、図示するように、線路ＦＡ上のフェッチ・アドレスに対応する分岐命令のメモリ位置を基にして適切なパターン履歴表５３を選択する際に、線路ＦＡ上の実際のフェッチ・アドレスを使用してもよい。平滑キュー及びタグ検査回路２７と実行装置からのバスＵＰＤは更新論理７０に印可され、この更新論理は実行時に評価された分岐命令の成功又は失敗に応答してＢＴＢ５６のエントリ中の分岐履歴とパターン履歴表53中に記憶された予測コードを更新する。このようにして、分岐予測成功率は分岐結果の使用を介して、また適切なパターン履歴表５３の選択で同種のプログラム（例えば、応用プログラム、共用ライブラリ、オペレーティング・システム機能）により示される分岐挙動の同一性を利用することにより改善される。
【００３３】
パターン履歴表５３中の対応する予測コードを基にした分岐予測に応答して、ＢＴＢ５６はバスＢＲ  ＴＲＧ上のマルチプレクサ５７へ目標命令アドレスを与え、戻りアドレス・キュー５５はバスＲＡ上でマルチプレクサ５７へ戻り命令アドレスを与える。マルチプレクサ５７の出力はマルチプレクサ５２の第3 入力へ、そしてマルチプレクサ５８へ与えられ、従ってフェッチ・カウンタ５０は更新される。従ってマルチプレクサ５２への３本の入力は次のフェッチ・アドレスＦＡの３種類の入力源を与え、このアドレスは物理アドレスと対向する論理アドレスである。
【００３４】
本発明の望ましい実施例によると、分岐予測をしてバスＢＲ  ＴＲＧ上に分岐目標アドレスを発行する際には、ＢＴＢ５６は又先取り制御論理２３へバスＰＦ０、ＰＦ１上に先取りアドレスと関連する制御情報を与える。先取りアドレスと制御情報は各分岐命令毎にＢＴＢエントリ内に収められ、従って分岐命令の目標に対してフェッチ・アドレスと共に発行される。先取り制御論理２３は、バスＰＦＡ０、ＰＦＡ１上のアドレスとしてバスＰＦ０、ＰＦ１上でＢＴＢ５６から受取った情報に応答して適当な先取りを開始する。先取り制御論理２３は先取り走査を実行するためのアドレスと制御信号を発生する回路から構成され、これはバスＰＦ０、ＰＦ１上に与えられた先取りアドレスの性質とバスＰＦＡ０、ＰＦＡ１の所要受信人に応じて必要とされる変換回路を含む。例えば、ＢＴＢ５６に記憶された先取りアドレスが論理アドレスの場合、先取り制御論理２３は論理先取りアドレスを物理アドレスに変換する例えば８エントリのオーダーのマイクロＴＬＢを含み、この場合バスＰＦＡ０、ＰＦＡ１はレベル２キャッシュ１１に直接付加してもよい。又は、先取り制御論理２３はバスＰＦ０、ＰＦ１上で受信した先取り論理アドレスをバスＰＦＡ０、ＰＦＡ１を介してＴＬＢ１９へ単に付加して先取りを開始してもよい。さらに別な方法では、ＢＴＢ５６は先取り用の物理アドレスを記憶し、この場合先取り制御論理２３は単に適当な物理アドレスをバスＰＦＡ０、ＰＦＡ１上でレベル２キャッシュ１１へ転送する。いずれの場合でも、当業者はこの説明に与えた所要のアーキテクチャに対して適当とされる適切な先取り制御論理２３を容易に実装可能であるものと考える。本発明の望ましい実施例によるマイクロプロセッサ１０の図２の２本のバスＰＦＡ０、ＰＦＡ１により明らかなように、２つの同時先取りが分岐目標フェッチ操作と並列に開始される。
【００３５】
発明の本実施例によると、レベル２キャッシュ１１は当該技術において公知のように２重ポート化されたタグ・アレイを含むことが望ましく、従って、例えば必要に応じて先取り制御論理２３により発行された２つの同時先取りに応答して、複数タグ比較が同時に実行される。レベル２キャッシュ１１中のデータ表はチップ面積を節約するために単一ポート化されることが望ましいと考えられるが、ここでの同時ヒットの可能性が小さいこととこのレベルでの同時ヒットは両方ともクリティカル・パスではないことを考えると、単に要求をキューに入れることによっても処理出来る。又は、性能の観点から同時先取りのキュー入れが受入可能な場合には、レベル２キャッシュ１１は単一ポート化タグ・アレイを含んでも良い。必要に応じて２つの先取りを同時に変換するために使用しなければならない場合、特に先取り制御論理２３がマイクロＴＬＢを含まない場合には、ＴＬＢ１９も２重ポート化しても良い。
【００３６】
ここで図３を参照して、選択論理８０と複数パターン履歴表５３と組み合せたＢＴＢ５６の構成を以下に説明する。この例のＢＴＢ５６は複数エントリ６３を有する４ウェイ・セットアソシエイティブ・キャッシュ・メモリで、簡単のため図３では１ウェイのみを図示してある。ＢＴＢ５６は、線路ＦＡ上のフェッチ・アドレスを受け取り、フェッチ・アドレスが指している適当なエントリ６３を選択するよう結合されているセレクタ６１を含む。セレクタ６１は、デコーダ、タグ比較器又は簡単なマルチプレクサによるような、フェッチ・アドレスからＢＴＢ５６中のエントリ６３の選択を実行する従来の技術に従って構成されている。
【００３７】
図４はＢＴＢ５６中の例示のエントリ６３i の配置を図示しているが、全てのエントリ６３0 から６３n は同様に配置されていることを理解すべきである。エントリ６３i は、特定の分岐命令の論理フェッチ・アドレスＦＡによりこれを識別するために使用するタグフィールドＴＡＧを有し、これに対してセレクタ６１は入力の論理フェッチ・アドレスの一部を合わせる。タグフィールドＴＡＧはその対応する分岐命令の論理フェッチ・アドレスＦＡの選択ビットを直接記憶するか、又は代わりに当該技術において既知のようにこれらの選択論理アドレス・ビットの論理的組み合せに対応させてもよい。標準的には、タグフィールドＴＡＧは線路アドレスとフェッチ線路中の命令のバイト・オフセットを指示するオフセットを含む。エントリ６３i は又当該技術において一般的な正当ビットや１個以上のＬＲＵビット（複数ウェイＢＴＢ用）のようなその外の制御ビットも含む。
【００３８】
ＢＴＢエントリ６３i は又分岐命令目標アドレスの論理アドレスを含む目標フィールドＴＡＲＧＥＴを有する。図３に戻ると、「実行(taken) 」と予測された分岐命令に対応するそのエントリ６３に対してＴＡＧＥＴの部分の内容がバスＴＲＧＩ上を入出力論理６９に送られる。図２に戻ると、このアドレスは次いで上述したようにバスＢＲ  ＴＲＧ上をマルチプレクサ５７へ与えられる。しかしながら、分岐が「非実行(not taken) 」と予測されると、単に次の連続論理アドレス（すなわちフェッチ・ポインタ５０の内容）が次の論理フェッチ・アドレスＦＡとしてマルチプレクサ５２により選択される。
【００３９】
エントリ６３i は又履歴／副型選択ビットＴ及び対応するｍビット分岐履歴フィールドＢＨを含む。履歴／副型ビットＴがセットされておらず、従ってエントリ６３i により識別された分岐命令が条件分岐ではないことを示している場合、分岐履歴フィールドＢＨは命令の無条件分岐の型式（すなわち、ＪＵＭＰ、ＣＡＬＬ、又はＲＥＴＵＲＮ）を指示するコードを記憶する。履歴／副型選択ビットＴがセットされていると、エントリ６３i に対応する命令が条件分岐の場合、分岐履歴フィールドＢＨは対応する命令の最近の分岐の結果（すなわち分岐履歴）を記憶している。分岐履歴フィールドＢＨに記憶された分岐履歴は、命令の実行の完了時に決定された関連分岐命令の実際の分岐履歴と、まだ実行が完了していない分岐命令の例に対しては予測結果から構成される推測分岐履歴の両方を含む。加えて、引用により本明細書に含まれる１９９６年６月２８日提出の共願の米国特願第６０／０２０、８４４号に記載されているように、エントリ６３i は、誤予測からの復帰に使用するため分岐履歴フィールドＢＨに推測分岐履歴ビットの数を指示するカウンタＢＨ  ＣＴＲを含む。
【００４０】
発明の本実施例によると、目標フィールドＴＡＲＧＥＴそれ自体により指示される命令のフェッチと同時に実行されるべき先取りの性質と位置を制御する、各種の追加のビットがエントリ６３i （そして、もち論ＢＴＢ５６の全てのエントリ６３）に設けられる。これらの先取りフィールドを図４と関連して以下にエントリ６３i に対して説明する。
【００４１】
本発明によるエントリ６３i は命令とデータを先取りするための必要なフィールドを含む。以下に詳細に説明するように、これらの先取りの目標アドレスは、パイプラインの以後の命令、特に以後の分岐の目標及び最初に実行した時にキャッシュ・ミスしたものに関連して決定される。発明の本実施例によると、任意のメモリ・アドレスからの２つの先取りが同時に実行され、前記２つの先取りフィールドＰＦ０，ＰＦ１が、エントリ６３i の先取り制御部分ＰＦ  ＣＴＬ内に設けられているエントリ６３i 制御情報内に含まれている。図４に図示するように、先取り制御部分ＰＦ  ＣＴＬは制御部分ＰＦ０Ｃ、ＰＦ１Ｃを含み、その各々が実行される関連先取り（もし存在すれば）のアクセス、型式、発生を制御する。例えば、制御部分ＰＦ０Ｃ、ＰＦ１Ｃの各々はアクセス部分ＡＣＣ及び先取り型式部分ＴＹＰを含み、その各々は２ビットを有し、これは以下のようにコード化される：
【表１】
0003907809.tif 000002
上記のコード化で、「ストア準備」という用語は、書込み操作を受け入れるよう特定のメモリ・ブロックに準備させる操作を指す。発明の望ましい実施例によるデータの先取りは、データのブロックを検索するか、又は（及び）書込みを受け入れるブロックを準備するようにしてこのように実行される。アクセス部分ＡＣＣと型式部分ＴＹＰの他のコード組み合せはこの例では定義されていない。
【００４２】
本発明の望ましい実施例によると、制御部分ＰＦ０Ｃ、ＰＦ１Ｃの各々は図４に示すようにビットＶＴ、ＶＮＴから構成される付勢部分も含む。セットされた時には、ビットＶＴ、ＶＮＴは、エントリ６３i への対応する分岐命令が各々実行又は非実行として予測された時にその関連する先取りが付勢されていることを指示する。例えば、ビットＶＴ、ＶＮＴのどちらもセットされていない場合、関連する先取りはそのどちらの予測に対しても付勢されておらず、ビットＶＴ、ＶＮＴの両方がセットされている場合、関連する先取りはどちらの予測にも付勢されており、さらに、もち論ビットＶＴ、ＶＮＴの一方が他方の排他でセットされている場合、関連する先取りは対応する予測に対して先取りされ他方に対しては消勢される。従って、予測したプログラム流れに応じて先取りが選択的に付勢されるようビットＶＴ、ＶＮＴの包含は更なる制御機能を提供する。
【００４３】
以上のコード化により指示したように、２つの先取り（ＰＦ０、ＰＦ１）の各々は命令又はデータ、又は両方である。さらに、２つの先取り制御部分ＰＦ０Ｃ、ＰＦ１Ｃが設けられているため、２つの先取りは他方とは独立したフェッチで動作する。エントリ６３i の先取り制御部分ＰＦ  ＣＴＬはさらに最小最近使用ビットＬＲＵを含み、これは２ウェイ・キャッシュのＬＲＵビットと同様に、現在設定されている２つの先取りの内のどちらが古いかを指示する。異なる先取りを付勢する場合には、最小最近使用ビットＬＲＵは新たな先取り情報により重ね書きされるべき先取りＰＦ０、ＰＦ１の一方を指す。
【００４４】
エントリ６３i はさらに先取りされるべきメモリ・アドレスを記憶する先取りアドレス部分ＰＦ０  ＡＤＤＲ、ＰＦ１  ＡＤＤＲを含む。加えて、発明の本実施例によると、エントリ６３i は又先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲを含み、これらは各々先取りＰＦ０、ＰＦ１と関係している。先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲは２ビット・カウンタのような小さなカウンタで、先取りの結果に関する情報を保持する。勿論、先取りのキャッシュ履歴でさらなる粒子性が望ましい場合には、先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１ＣＴＲを大きくしても良い。発明の本実施例では、先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲはレベル２キャッシュ・ミスであるその関連先取りと従って主メモリ３０５へのアクセスを必要とすることに応答して各々増分される。逆に、先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲは、探求データ又は命令が既にキャッシュにあるため、関連する先取りが不要な度に減少される。先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲが零に到達すると、先取り制御部分ＰＦＣＴＬ中のその制御ビットＰＦ０Ｃ、ＰＦ１Ｃを不正状態（００）にセットして、新たな先取りをそこへ設定させる。
【００４５】
上記の説明に記載したように、エントリ６３i は任意のメモリ・アドレスから命令又はデータを先取りするよう適当なエントリを含む。勿論、多くの標準的なプログラムの演算は連続位置の記憶メモリからの命令の実行を含む。それ故、発明の望ましい実施例によると、エントリ６３i の先取り制御部分ＰＦ  ＣＴＬは又目標フィールドＴＡＲＧＥＴ（実行分岐に対して）に記憶した分岐目標アドレス又は次の連続アドレス（非実行分岐に対して）を暗黙先取りアドレスとして使用するキャッシュ線路の先取りを付勢する暗黙先取り付勢ビットＴ０、Ｔ１、Ｎ０、Ｎ１を含む。発明の本実施例では、先取り付勢ビットＴ０、Ｔ１は実行されると予測された分岐に関係し、先取り付勢ビットＮ０、Ｎ１は実行されないと予測された分岐と関係する。
【００４６】
当該技術において公知のように、キャッシュ・メモリは「キャッシュ線路」と呼ばれるデータの単位によりロードされ、このキャッシュ線路は付近のデータの局所的記憶を提供するよう標準的なメモリ・アクセスより大きい。例えば、図１の統合レベル２キャッシュ１１中のキャッシュ線路の寸法は３２バイトで、これは８データ語に対応する。しかしながら、命令を緊密に追随する連続命令が必要な時にキャッシュ中になくなるように、特定の命令がキャッシュ線路の終了部近くに配置されると、この場合連続命令の内の一つのフェッチはキャッシュ・ミスを生じ易い。発明の本望ましい実施例では、エントリ６３i の先取り制御部分ＰＦ  ＣＴＬ中の先取り付勢ビットＴ０、Ｔ１、Ｎ０、Ｎ１は目標アドレスに続く１つ又は２つのキャッシュ線路の先取り（各々ビットＴ０、Ｔ１の場合）、又はプログラム順序の次の連続命令に続く１つ又は２つのキャッシュ線路（各々ビットＮ０、Ｎ１の場合）の先取りを可能とする。勿論、アーキテクチャーに応じて、本例のような分岐予測と関係して又は関係せずにより多くの又はより少ない先取り付勢ビットをエントリ６３i に設けても良い。
【００４７】
特に実行されると予測された分岐に対しては、ビットＴ０はセットされると、分岐目標の後の次のキャッシュ線路の先取りを実行し、ビットＴ１はセットされると、分岐目標の次の第2 のキャッシュ線路の先取りを実行する。同様に、実行されないと予測された分岐に対しては、ビットＮ０はセットされると、次の連続命令を含むものの後の次のキャッシュ線路の先取りを実行し、ビットＮ１はセットされると、次の連続命令を含むものの後の第2 のキャッシュ線路の先取りを実行する。これらの暗黙キャッシュ・アドレスからは1 つのキャッシュ線路先取りのみが許可されていると考えられる。例えば、ビットＴ０、Ｔ１の両方がセットされた場合、分岐目標の後の第1 のキャッシュ線路のみが先取りされる。それ故、発明の本実施例によると、条件分岐命令の両方の予測状態に対して、分岐目標アドレス又は次の連続アドレスを超えて関連する第1 又は第2 のキャッシュ線路を先取りしても良い。これらの先取りと関係するアドレスは分岐目標から暗黙に示されているため、エントリ６３i の寸法は相対的に小さく保持される。
【００４８】
又、発明の本実施例によると、先取りカウンタＴ０  ＣＴＲ、Ｔ１  ＣＴＲ、Ｎ０  ＣＴＲ、Ｎ１  ＣＴＲが先取り付勢ビットＴ０、Ｔ１、Ｎ０、Ｎ１の各々と関係している。先取りカウンタＴ０  ＣＴＲ、Ｔ１  ＣＴＲ、Ｎ０  ＣＴＲ、Ｎ１  ＣＴＲは、最後の2 回を実行した時に関連した先取りがキャッシュ・ミス又はキャッシュ・ヒットのどちらを生じたかに対応するカウント値を記憶するため、上述した先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲと同様に動作する。先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲの場合のように、先取りカウンタＴ０  ＣＴＲ、Ｔ１  ＣＴＲ、Ｎ０  ＣＴＲ、Ｎ１  ＣＴＲは必要に応じて2 ビット以上で構成されている。これも先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１ＣＴＲの場合のように、先取りカウンタＴ０  ＣＴＲ、Ｔ１  ＣＴＲ、Ｎ０ＣＴＲ、Ｎ１  ＣＴＲは、関連する先取りがキャッシュ・ミスである時に増分され、また関連する先取りがキャッシュ・ミスである時に減少される。先取りカウンタＴ０  ＣＴＲ、Ｔ１  ＣＴＲ、Ｎ０  ＣＴＲ、Ｎ１  ＣＴＲは、が零に到達すると、これに関連する先取りは無視されるのが望ましい（探索内容は既に下位レベル・キャッシュに多分存在していて先取りを不要のものとしているため）。
【００４９】
他の別な先取り制御フィールドが本発明内で利用される。例えば、アドレスされた先取りフィールドＰＦ０  ＡＤＤＲ、ＰＦ１  ＡＤＤＲの片方又は両方は分岐予測と関連付けされる必要はないが、代わりにエントリ６３i の対応するタグフィールドＴＡＧと合うフェッチ・アドレスの各例で先取りされる。さらに別例では、アーキテクチャにより処理される先取りの量とキャッシュ・ヒット成功率に応じてこれより多い又は少ない先取りフィールドがエントリ６３i と関連して設けられる。このような別の実装方法は本明細書を参照して当業者には明らかであると考えられる。
【００５０】
図３に戻ると、発明の望ましい実施例によるＢＴＢ５６の動作を以下に簡単に説明する。線路ＦＡ上の分岐命令に対応するフェッチ・アドレスを受取ると、セレクタ６１はそのエントリ６３が、従来の方法で分岐命令のフェッチ・アドレスと合うＴＡＧ部分を有しているかどうかを決定する。勿論、このタグ比較は、ＢＴＢ５６がそのように構成されていれば、セット・アソシエーティブ方式で行われる。分岐命令に対して整合するタグフィールドＴＡＧが存在しない場合（すなわち、これがその分岐命令の最初の事例である場合）、ＢＴＢ５６は予測を行なわず、入出力論理６９からの線路ＡＴＲ上にこれを示し、この場合次のフェッチ・アドレスの選択は静的に行われる。ＢＴＢ５６のこのような動作は従来の技術によっている。
【００５１】
フェッチ・アドレスがＢＴＢ５６中のエントリ６３のタグ部分ＴＡＧと整合する条件分岐命令に対しては、整合するエントリ６３の分岐履歴フィールドＢＨのｋビットがＰＨＴ５３に与えられる。分岐命令が関係しているプログラムの種類に応じてＰＨＴ５３の適当なものを選択する選択論理８０の動作により、線路ＴＲＧＩ上の整合したエントリ６３からの目標フィールドＴＡＲＧＥＴからの分岐目標アドレスと共に、分岐予測コードが線路ＴＮＴ上をＢＴＢ入出力論理６９へ与えられる。ＢＴＢ入出力論理６９は、実行されると予測された分岐に対して線路ＴＲＧＩ上の値に対応するマルチプレクサ５７（図２）へバスＢＲ  ＴＲＧ上の分岐目標アドレスを与える。制御信号（図示せず）が実行されないと予測された分岐に対して発生され、従ってマルチプレクサ５２はフェッチ・ポインタ５０の出力を次のフェッチ・アドレスとして選択する。予測が常に「実行」である、ＢＴＢ５６中に整合エントリ６３を有する無条件分岐命令に対しては、そのエントリの目標フィールドＴＡＲＧＥＴの目標アドレスがバスＴＲＧＩ上に与えられ、バスＢＲ  ＴＲＧ上の分岐目標アドレスとしてＢＴＢ入出力論理により発行される。いずれにせよ、分岐が実行又は非実行としてどちらに予測されても、次に期待される命令のフェッチは次のサイクルの新たなフェッチ・アドレスの提供と共に開始する。
【００５２】
全ての分岐（実行又は非実行のどちらに予測されたものであれ）に対して、分岐命令の制御フラッグと属性が命令バッファ及び制御６０へのバスＡＴＲへ与えられ、パイプラインに沿った分岐命令と共に送られる。これらの制御フラッグと属性は、命令が分岐であることを指示するためにセットされるタグを含む。加えて、分岐の目標であるものを識別するため、各命令に関連してキャッシュ・ミスが発生したかどうかを識別するため、そして又望ましくはキャッシュ・ミスが命令又はデータ・アクセスに関連しているかどうかを指示するため非分岐命令に対してもフラッグはセットされる。以下で詳細に説明するように、実行と書き戻しパイプライン段からの命令の平滑時にこれらの命令タグの評価を基にして先取りは設定され制御される。
【００５３】
発明の望ましい実施例によると、ＢＴＢ５６に対応するエントリ６３を有する各分岐命令は、次の命令のフェッチ（予測に応じて次の連続アドレス又は分岐目標のどちらか）と組み合せて１つ以上の先取りを開始する。先取りアドレスと制御情報は各分岐命令に対してＢＴＢエントリ内に収められ、従って分岐命令の目標のフェッチ・アドレスと共に発行される。図４に関して上述したように、この先取りは現在の目標アドレスの次の１つ以上のキャッシュ線路の先取りを含む（先取り制御部分ＰＦ  ＣＴＬの先取りビットＴ０、Ｔ１、Ｎ０、Ｎ１の制御下で）か、またはエントリ６３i の部分ＰＦ０、ＰＦ１に記憶されたアドレスを基にした命令又はデータの先取りを含む。暗黙アドレス（すなわち先取り制御部分ＰＦ  ＣＴＬの先取りビットＴ０、Ｔ１、Ｎ０、Ｎ１により指示されるもの）を使用した先取りは、分岐目標アドレスに続くキャッシュ線路は先取りフィールドＰＦ０  ＡＤＤＲ、ＰＦ１  ＡＤＤＲに記憶したアドレスからの命令又はデータよりも前に必要とされることが多いため、アドレスフィールドＰＦ０  ＡＤＤＲ、ＰＦ１  ＡＤＤＲと関連する先取りより優先権を有すると考えられる。
【００５４】
いずれにせよ、ＢＴＢ入出力論理６９はバスＰＦ０、ＰＦ１上にメモリ・アドレス（分岐目標から暗黙設定されるか又は整合エントリ６３i に記憶されているかのどちらか）を与える。先取り制御論理２３は、メモリ・アクセスを開始するためＴＬＢ１９に付加されたバスＰＦＡ０、ＰＦＡ１上の論理アドレスのように、バスＰＦ０、ＰＦ１上のＢＴＢ５６から受取った情報に応答して適当な先取りを開始する。発明の望ましい実施例によるマイクロプロセッサ１０の図２の２つのバスＰＦＡ０、ＰＦＡ１により明らかなように、レベル２キャッシュ１１が２重ポート化したタグ比較器を含む場合には２つの同時先取りが分岐目標フェッチ操作と並列に開始される。
【００５５】
ここで図５を参照すると、発明の望ましい実施例による卒業キュー及びタグ検査回路２７の構成と操作を以下に説明する。平滑キュー及びタグ検査回路２７の全体的な機能と目的は、命令がその実行と書込み段を完了した時（すなわち、パイプラインから「卒業した」）に命令に質問し、この質問に応じてＢＴＢ５６中のエントリを確立し変更して有効な先取りを実行することである。
【００５６】
図５はエントリ８３i を図示し、これは命令がパイプラインを進行する時の命令と関連する複数ビットの制御情報に対応する。図面の都合上、これらの複数ビットはパイプラインの制御情報に対応しているため、バスＰＣＴＲＬと呼ばれる。パイプライン化されたマイクロプロセッサの技術で公知のように、各命令はパイプラインに沿って流れていく時に命令（デコードされたもの）、その型式、例外情報、等を識別する制御情報又は信号をタグ付けされる。図５のエントリ８３i は以下で説明する本発明の望ましい実施例と関連して有用な追加の制御タグと共に、このような従来の情報を含む。
【００５７】
図５に図示するように、エントリ８３i は命令識別子ｘ８６ＩＤ、を含み、これは本例では現在の命令と関連するｘ８６命令（ＡＯｐではない）を識別する従来のコードである。他の従来の制御タグと情報もエントリ８３i に設けられる。加えて、エントリ８３i はその関連命令に対して行われた論理（又は代わりに物理）メモリ・アドレスを指示するフェッチ・タグＬＡを含む。本発明の望ましい実施例によると、エントリ８３i は又分岐識別子タグＢＲ  ＩＤも含み、これは関連命令が分岐命令であるかどうかを指示し、そうである場合には、その分岐に固有の識別コードを与える。同様に、各エントリ８３i は分岐目標識別子タグＢＲＴＲＧ  ＩＤを含み、これは関連命令が分岐の目標であるかどうかを指示し、そうである場合には、これが目標である分岐の識別コードを与える。このようにして、エントリ８３i への質問は完了した時点での特定の分岐命令の目標を識別可能である。エントリ８３i は順番のマイクロプロセッサでは分岐目標識別子タグＢＲＴＲＧ  ＩＤを含む必要はないが、順番ではないマイクロプロセッサでは分岐目標識別子タグＢＲＴＲＧ  ＩＤは必要である。
【００５８】
発明の本実施例によるエントリ８３i は、そのフェッチの際にキャッシュ・ミスが関連しているかどうかと、その型式とを指示するタグも含む。図１と関連して上述したように、マイクロプロセッサ１０と装置３００はレベル０マイクロキャッシュ１８からレベル２オンチップ・キャッシュ１１まで、さらに多分外部キャッシュ・メモリ３０７の各種のキャッシュ・メモリを含む。エントリ８３i はキャッシュ・ミス・タグＬ１  ＭＩＳＳ、Ｌ２  ＭＩＳＳを含み、これは関連命令のフェッチがＬ１とＬ２でのキャッシュ・ミス各々含んでいるかどうかを指示する。外部キャッシュ・メモリ３０７に対してキャッシュ・ミスが発生した場合を指示するため別のキャッシュ・ミス・タグを代わりに設けても良い。マイクロプロセッサ１０と装置３００のキャッシュ・ハイアラーキに一致して、より高いレベルのキャッシュ・ミス・タグのセットは又全てのより低いレベルのキャッシュ・アクセスもミスしたことを指示している。アクセスが高レベルでミスであるかどうかの決定は全ての低レベル・キャッシュ・アクセスも又ミスの場合にのみ行われるため、例えば、キャッシュ・ミス・タグＬ２  ＭＩＳＳは、低レベル・キャッシュ・ミス・タグＬ１  ＭＩＳＳもセットされた場合にのみセットされる。エントリ８３i は又キャッシュ・ミスが命令キャッシュ１６i 又はデータ・キャッシュ１６d のどちらに対してであるかを指示する型式ビットＩ／Ｄも含む。
【００５９】
制御パイプライン・バスＰＣＴＲＬに沿って通信される各エントリ８３の情報は、関連命令の実行と書き戻しに続いて平滑キュー及びタグ検査回路２７により受取られる。図５に図示するように、平滑キュー及びタグ検査回路２７は２個の分岐キュー９２ａ、９２ｂと組み合せた平滑キュー先取り更新制御論理９０を含む。分岐キュー９２ａ、９２ｂはパイプラインから「平滑した」分岐命令に対する制御情報を記憶する従来のＦＩＦＯキューである。以下で明らかとなるように、発明の望ましい実施例によるとマイクロプロセッサ１０での次の連続分岐命令の目標の平滑時に分岐命令は分岐キュー９２ａから削除されるため、分岐キュー９２ａは２つのエントリのみを含む。しかしながら、順番ではないマイクロプロセッサでは、分岐キュー９２ａ、９２ｂの各々は２つ以上のエントリを有することが望ましい。
【００６０】
平滑キュー先取り更新制御論理９０は、後述する方法で命令を平滑させ、分岐キュー９２ａ、９２ｂに沿った分岐命令の進行を制御し、各種の制御ビットを更新するためエントリ８３の各種のフィールドに質問する連続又は組合せ論理である。図５から明らかなように、平滑キュー及びタグ検査回路２７は、命令実行に続いてこれによりＢＴＢ５６、ＰＨＴ５３等が更新される従来の分岐予測結果及び他の情報と組み合せた、更新バスＵＰＤへ渡される制御信号を発生する。平滑キュー先取り更新論理９０は、この説明を参照した当業者により特定のアーキテクチャーに対して容易に構成可能であると考えられる。
【００６１】
図６を参照して、本発明の望ましい実施例による平滑キュー及びタグ検査回路２７の動作を以下に詳細に説明する。図６に図示した平滑キュー及びタグ検査回路の動作は、単一の分岐命令（本明細書では分岐命令Ｉｘとして参照される）に対して与えられる。それ故、平滑し先取り情報を待機している複数分岐命令に対しても適当に同じプロセスが並列に動作していることを理解すべきである。
【００６２】
先取り情報の発生はプロセス９４から開始し、ここで平滑キュー先取り更新制御論理９０は最近平滑した命令（図１及び図５に示すようにバスＧＲ  ＢＲに沿って通信）の分岐識別子タグＢＲ  ＩＤに質問し、判断９５で最近平滑した命令が分岐命令であるかどうかを決定する。最近質問された分岐識別子タグＢＲ  ＩＤがその命令が分岐ではないことを指示している場合（判断９５がＮＯ）、制御はプロセス９６へ渡されて次の命令を待機し、この時プロセス９４は繰り返されて再び分岐識別子ＢＲ  ＩＤに質問する。
【００６３】
判断９５で最近平滑した命令が分岐であると決定されると（この例では、判断９５がＹＥＳとなるように、質問される分岐命令Ｉｘの時）、平滑した分岐命令Ｉｘ（すなわちこれと関連する制御情報）が分岐キュー９２ａに押し出され、パイプラインの以後の命令から可能な先取りアドレス及び命令の到着を待機する。分岐命令Ｉｘが分岐キュー９２ａにいったん配置されると、次にプロセス１００が実行されて分岐目標識別子タグＢＲＴＲＧ  ＩＤに質問する。判断１０１は、質問命令が分岐キュー９２ａに配置された現在の分岐命令の分岐目標であるかどうかを決定する。そうでない場合（判断１０１がＮＯ）、連続して以後平滑する命令に対してプロセス１００が繰り返される。
【００６４】
分岐命令Ｉｘの分岐目標に対応する命令が平滑したかどうかを決定する判断１０１で、分岐命令Ｉｘの次のフェッチ時に可能な先取りの解析が作動される。図６に図示したプロセスによると、先取りキュー９２ａ中の分岐命令Ｉｘに対する先取り質問／更新プロセス１０５が実行される。プロセス１０５ａはプロセス１０２より開始し、ここで各平滑命令のエントリ８３に対するバスＴＡＧ  ＣＫ上の各種のタグの状態が平滑キュー及びタグ検査回路２７の平滑キュー先取り更新制御論理９０により解析され質問される。
【００６５】
発明の本実施例によると、先取りは、プログラム中の次の分岐の目標に対応し、キャッシュ・ミスと関係する、以後の命令に対する分岐命令に関連している。発明の本実施例によると、次の分岐の目標に達するまで、又はキャッシュ・ミスが検出されるまで各平滑分岐命令（例えば分岐命令Ｉｘ）は分岐キュー９２ａに保持される。同様に、分岐キュー９２ａを去った各命令は、次の分岐の目標に達するまで（まだ到達していない場合）、又はキャッシュ・ミスを検出するまで、又は命令が分岐キュー９２ｂの全長に沿って進行して新たな分岐命令によって押し出されるまで、分岐キュー９２ｂに保持される。適当なタグの読み取り後、判断１０３は、最近平滑した命令が分岐命令、特に分岐命令Ｉｘに続く次の分岐の目標であるかどうかを決定する。そうでない場合（判断１０３がＮＯ）、次いで判断１０４が実行されて、最近の平滑命令が何らかの長さのキャッシュ・ミスと関連しているかどうかを決定する。判断１０４がＮＯの場合、制御はプロセス１０２に戻って、ここでバスＴＣＫは次の平滑命令を質問される。
【００６６】
上述したように、判断１０３の肯定結果は、最近の平滑命令がパイプライン中の分岐命令Ｉｘに続く分岐命令の分岐目標であることを意味している（すなわち、その分岐目標識別子タグＢＲＴＲＧ  ＩＤがセットされ、その次の分岐命令を指している）。この場合、キャッシュ・ミス・タグＬ１  ＭＩＳＳ、Ｌ２  ＭＩＳＳ、及び型式ビットＩ／Ｄが判断１０７で解析されてこの分岐目標のフェッチが任意のレベルのキャッシュ・ミスを生じたかどうかを決定する。そうである場合（判断１０７がＹＥＳ）、平滑キュー及びタグ検査回路２７は、この分岐目標と関連する命令の先取りは分岐命令Ｉｘの次の発生時に有用であると結論し、このような場合、プロセス１１２で、分岐命令Ｉｘの制御情報と組み合せたそのミス・タグＬ１  ＭＩＳＳ、Ｌ２  ＭＩＳＳ及び型式ビットＩ／Ｄと共にこの目標命令に対するエントリ８３の論理アドレスフィールドＬＡを保存する。キャッシュ・ミスが分岐命令Ｉｘの目標（実行又は非実行）から次の１又は２キャッシュ線路中のアドレスからの命令キャッシュ・ミスの場合、プロセス１１２はキャッシュ・ミスを適切な先取り付勢ビットＴ０、Ｔ１、Ｎ０、Ｎ１と関連付けて分岐目標アドレスを使用してキャッシュ線路の先取りを付勢する。次いで分岐命令Ｉｘはプロセス１１４で分岐キュー９２ａから分岐キュー９２ｂへ進み、これに更に先取りが関連しているかどうか決定する。反対に、次の分岐命令の目標がキャッシュ・ミスを起こさない場合（判断１０７がＮＯ）、目標の先取りは有用でなく、したがってプロセス１１４は直接実行され、分岐命令Ｉｘを分岐キュー９２ａから取り除き、これを分岐キュー９２ｂへ押し込む。
【００６７】
最近に平滑した命令が次の分岐の分岐目標ではなく（判断１０３がＮＯ）、キャッシュ・ミスを起こした場合（判断１０４はＹＥＳ）、判断１０９が次に実行されて分岐キュー９２ａ中の分岐命令Ｉｘに対するエントリが一番古いものであるかどうか決定する。その場合、プロセス１１２が分岐命令Ｉｘと関連して実行されて、先取りに関連する適当な制御情報（すなわち、ミス・タグの状態、先取りがデータ又は命令であるかの指示、実行及び非実行指示子の設定、等）と共に最近平滑した命令のエントリ８３のフェッチ・タグＬＡにより指定されたアドレスへ先取りを関連させる。次いでプロセス１１４を実行して分岐キュー９２ａから分岐命令Ｉｘを分岐キュー９２ｂへ移動し、必要とされる他の適当な先取りを待機する。
【００６８】
非分岐目標キャッシュ・ミスが平滑した時に、分岐命令Ｉｘがキュー９２ａ中で最も古参の分岐命令でない場合（判断１０９がＮＯ）、先取りの関連付けは最古参のキュー９２ａ中の分岐命令に対して行われる。次いで平滑キュー先取り更新制御論理９０がこれに従って分岐キュー９２ａ中の各々のエントリを進行させる。この場合、判断１１１は必ずしもＮＯではなく、従って分岐命令Ｉｘは分岐キュー９２ａに留まって次の平滑命令を待機する。
【００６９】
次の分岐目標命令を受取ることにより、又はキャッシュ・ミスと関連されることにより分岐命令Ｉｘが分岐キュー９２ａから移動されたかに係わらず、プロセス１１４に続いて、先取りキュー９２ｂ中の分岐命令Ｉｘの先取り質問／更新プロセス１０５ｂが実行される。先取り質問／更新プロセス１０５ｂは、第２の先取りが分岐命令Ｉｘと関連されていることを除いては、先取り質問／更新プロセス１０５ａと同一である。勿論、分岐キュー９２ｂ中の命令に対する先取り関連をトリガする同一の条件が分岐キュー９２ａ中の命令との前記関連付けも生じさせる。このような場合、発明の望ましい実施例によると、同一のキャッシュ・ミスに対して複数の先取り関連付けが行われる。次の分岐の分岐目標が平滑するまで（これがまだ発生していない場合）、キャッシュ・ミスに出会うまで、又は満員の時に他の命令のこれへの追加により分岐キューから押し出されるまで、分岐命令Ｉｘは分岐キュー９２ｂに留まる。
【００７０】
図１から図５を参照すると、分岐命令Ｉｘが分岐キュー９２ｂを出る時には、先取りアドレスと関連制御情報とともにその制御情報は、分岐命令Ｉｘの実行と完了に関するその分岐予測の結果と他の情報と共にバスＵＰＤ上で更新論理７０へ送り戻される。
【００７１】
更新論理７０はバスＵＰＤ上で平滑キュー及びタグ検査回路２７から分岐命令Ｉｘに対する識別及び制御情報と共に先取り情報を受取り、ＢＴＢ５６の対応するエントリ６３を更新し、先取りフィールドを適切に更新する。ここで図７を参照すると、ＢＴＢ５６を更新してこの先取り情報を含ませるための更新論理７０により実行される更新プロセスの例が以下に説明される。
【００７２】
プロセス１２０では、更新論理７０は分岐命令Ｉｘに対する平滑キュー及びタグ検査回路２７からのバスＵＰＤ上の制御及びアドレス情報を受取る。上述したように、発明の望ましい実施例によると、この情報は２つの一般的なアドレス先取りに対するアドレス及び制御情報を含む（各々分岐キュー９２ａ、９２ｂで発生された先取りに対応する先取りＰＦＡ、ＰＦＢとして図７に参照されている）；加えて、この情報は先取り付勢ビットＴ０、Ｔ１、Ｎ０、Ｎ１の制御下で暗黙アドレス先取りに対するアドレス及び制御情報を含む。勿論、バスＵＰＤ上の情報は分岐命令Ｉｘに関する識別情報も含むため、更新論理７０はプロセス１２０でこの命令に対するＢＴＢ５６中の適切なエントリ６３を選択可能である。この時点で従来の方法で更新論理７０により更新するため分岐予測の結果もバスＵＰＤ上に与えられる。
【００７３】
判断１２１は分岐命令Ｉｘと関連しているＢＴＢ５６中のエントリ６３に質問して、その先取りビットのどちらか（ＰＦ０、ＰＦ１）が空であるかどうかを決定する。図４に戻ると、判断１２１は対応するエントリ６３の先取り制御部分ＰＦ  ＣＴＬ中の先取り制御ビットＰＦ０Ｃ、ＰＦ１Ｃの先取りアクセス部分ＡＣＣに質問することにより実行されて、どちらか又は両方が不正（００）コードを含んでいるかどうかを決定する。暗黙アドレス先取りの場合、カウンタＴ０  ＣＴＲ、Ｔ１  ＣＴＲ、Ｎ０  ＣＴＲ、Ｎ１  ＣＴＲが質問されてどれかが０にセットされているかどうか決定する。これらの条件のどれもが真でない場合（判断１２１がＮＯ）、以下で説明するように制御は判断１２５へ渡される。判断１２１がＹＥＳの場合、空の先取りフィールドＰＦ０、ＰＦ１は新たに受取った先取りＰＦＡ、ＰＦＢの一方のアドレス及び制御情報を受取る。
【００７４】
プロセス１２２では、それ故、エントリ６３の先取りフィールドＰＦ０、ＰＦ１の空のものがロードされる。特に、平滑キュー及びタグ検査回路２７により識別された先取りＰＦＡ、ＰＦＢの一方の論理アドレス（又は場合によっては物理アドレス）はアドレスフィールドＰＦ０  ＡＤＤＲ、ＰＦ１  ＡＤＤＲの適当な方に記憶され、対応する制御ビットＰＦ０Ｃ、ＰＦ１Ｃがセットされて先取りが命令であるか又はデータ（又は両方）であるかを指示する。暗黙アドレス先取りの場合、対応する先取り付勢ビットＴ０、Ｔ１、Ｎ０、Ｎ１が付勢される。判断１２１により決定されるようにＢＴＢ先取りフィールドの一方のみが空で、２つの可能な新たな先取りＰＦＡ、ＰＦＢが利用可能な場合、プロセス１２２は所定の優先度方式にしたがって実行される。例えば、キャッシュ・ミス・タグＬ１ＭＩＳＳ、Ｌ２  ＭＩＳＳの状態を使用して互いに対する先取りＰＦＡ、ＰＦＢの優先度を決定しても良い。この場合、高レベルのキャッシュ・ミスを有する新たな先取りＰＦＡ、ＰＦＢの一方（例えば、レベル２キャッシュ１１でのキャッシュ・ミスはレベル１キャッシュ１６i でのキャッシュ・ミスより高レベルのキャッシュ・ミスである）を分岐命令Ｉｘに対するＢＴＢ５６のエントリ６３の空の先取りフィールドＰＦ０、ＰＦ１へロードする。又は、先取りＰＦＡ（すなわち、平滑キュー及びタグ検査回路２７によって定義される最初の、又は最近接の先取り）が常に優先度を有するものとしても良い、何故ならこれは対応する分岐命令Ｉｘにプログラム順序で最も近いからである。プロセス１２２に続いて、判断１２３を実行して、新たな先取りＰＦＡ、ＰＦＢがエントリ６３にロードされるよう残っているかどうかを決定する（これに対する空のエントリＰＦ０、ＰＦ１がない）。そうでない場合、更新は終了する。そうである場合（判断１２３がＹＥＳ）、判断１２５が次に実行される。
【００７５】
本発明のこの望ましい実施例によると、判断１２５は、例えば外部キャッシュ・ミスのような高い優先度によって残りの新たな先取りＰＦＡ、ＰＦＢが分岐命令Ｉｘに対するエントリ６３にロードされたかどうかを決定する。従って判断１２５は、キャッシュ・ミス・タグＬ１  ＭＩＳＳ、Ｌ２  ＭＩＳＳを先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲの値と比較し、先取りフィールドＰＦ０、ＰＦ１の現在の内容と置き換えられるように先取りのどれかが十分高い優先度のものであるかどうかを決定する。例えば、レベル２キャッシュ・ミスはカウンタ値１０、０１、００の既存の先取りより高い優先度を有するように割り当てられ、一方レベル１キャッシュ・ミスは０１又は００のカウンタ値を有する既存の先取りより高い優先度を有するよう割り当てられる。その場合（判断１２５がＹＥＳ）、かつ２つの先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲの値が等しい場合、更新論理７０はプロセス１２６でエントリ６３の先取り制御部分ＰＦ  ＣＴＲのＬＲＵビットを検査し、先取りＰＦ０、ＰＦ１のどちらが最近にロードされたかを決定し、プロセス１２８で新たな高優先度先取りＰＦＡ、ＰＦＢの適当なアドレスを最も使用されない先取りフィールドＰＦ０、ＰＦ１にロードする。関連カウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲの値は、その前のアクセスがキャッシュ・ミスであることを考慮して１０のような中間値に初期化される。勿論、先取りカウンタＰＦ０  ＣＴＲ、ＰＦ１  ＣＴＲの値が等しくない場合、最低の優先度を有する先取りフィールドＰＦ０、ＰＦ１が新たな情報を受取る。次いでプロセス１３０でこの先取りフィールドに対してＬＲＵビットがセットされ、判断１２５が実行されて他の新たな先取りＰＦＡ、ＰＦＢを他のフィールドに適当な場合にロードするかどうかを決定する。
【００７６】
残りの新たな先取りＰＦＡ、ＰＦＢがＢＴＢ５６のエントリ６３を置き換えるのに十分な優先度ではない時（判断１２５がＮＯ）、先取りを開始するための目的の更新論理７０によるＢＴＢ５６の更新は完了する。
【００７７】
ここで図８を参照すると、動作時に、上述したようにエントリ６３が更新されると、先取り制御論理２３と組み合わされてＢＴＢ５６により先取りが実行される。この操作はプロセス１３２から開始し、ここでＢＴＢ５６のセレクタ及びタグ比較器６１（図３）は各新たな命令のフェッチ・アドレスをＢＴＢ５６中のタグフィールドＴＡＧの内容と比較する。判断１３３で合ううものがない限りプロセス１３２が繰り返される。線路ＦＡ（図２及び図３）上で整合するフェッチ・アドレスを受取ると（判断１３３がＹＥＳ）、これは多分同じ分岐命令をフェッチすることを指示しているが、プロセス１３４を実行して分岐命令用の適当な分岐目標アドレスを発生する。無条件分岐の場合、整合したエントリ６３の目標フィールドＴＡＲＧＥＴが分岐目標アドレスとしての役割を果たす。条件分岐は上述したようなＰＨＴ５３と組み合せたＢＴＢ５６により予測されたその結果を有し、実行されると予測された分岐に対する分岐目標アドレスとして整合エントリ６３の目標フィールドＴＡＲＧＥＴ又は実行されないと予測された分岐に対する次の連続フェッチ・アドレスのどちらかを選択する。次いでどちらの場合であれ分岐目標アドレスが線路ＦＡ上の次のフェッチ・アドレスとして使用され、上述し、かつ従来の方法のように、プロセス１３６でμＴＬＢ２２に、次いでレベル１命令キャッシュ１６i に印可される。
【００７８】
本発明の望ましい実施例によると、整合エントリ６３で指示される先取りは図８に図示するように、プロセス１３６での次の命令のフェッチと並列に先取り制御論理２３により実行される。その中でも、先取りアドレスフィールドＰＦ０ＡＤＤＲ、ＰＦ１  ＡＤＤＲに対応する先取りと、先取り制御部分ＰＦ  ＣＴＬの先取りビットＴ０、Ｔ１、Ｎ０、Ｎ１により指示される暗黙キャッシュ線アドレスを使用した先取りは、内部帯域が許す場合には並列に実行され、又は代わりに優先方式に従って連続的に実行される。例えば、分岐目標に対して暗黙キャッシュ線アドレスを使用した先取り（すなわち、先取りビットＴ０、Ｔ１、Ｎ０、Ｎ１による先取り）は最高の優先度を有している、何故ならそれは分岐の目標後直に実行される命令に関係しており、従ってすぐに低レベル・キャッシュ（例えばレベル１命令キャッシュ１６i ）にアクセスされ配置されることが望ましい。発明の望ましい実施例によると、先取り制御論理２３が各種の先取りの順序と優先度を決定する。
【００７９】
平滑キュー及びタグ検査回路２７により決定され、又整合エントリ６３の先取りフィールドＰＦ０、ＰＦ１に記憶された先取りに対しては、プロセス１３８０、１３８1 が図８で並列に実行されるよう図示され、ここで先取り制御論理２３がアドレスフィールドＰＦ０  ＡＤＤＲ、ＰＦ１  ＡＤＤＲの内容を直接又は間接にレベル２キャッシュ１１へ付加する（すなわち、物理アドレスとして直接的に、又はＴＬＢ１９を介して間接的に）。上述したように、プロセス１３８0 、１３８1 は必要に応じて先取り制御論理２３の制御下で連続的に実行される。説明の都合上、先取りＰＦ０を実行するマイクロプロセッサ１０の動作を以下に説明するが、フィールドＰＦ１  ＡＤＤＲで指定されたアドレスの先取りも同様に実行されることを理解すべきである。
【００８０】
プロセス１３８0 で、アドレスフィールドＰＦ０  ＡＤＤＲの内容は、内容が物理アドレスに対応する場合には直接的に、又はその内容が論理アドレスに対応する場合はＴＬＢ１９を介して、上述した方法で先取り制御論理２３によりレベル２キャッシュ１１に付加される。判断１３９で、レベル２キャッシュ１１の従来のタグ比較回路は、ＰＦ０  ＡＤＤＲのアドレスに従って先取りすべきデータ又は命令がその中に存在するかどうか（すなわちキャッシュ・ヒット又はキャッシュ・ミス）を決定する。キャッシュ・ミスの場合（判断１３９がＮＯ）、先取り制御論理２３はプロセス１４２でカウンタＰＦ０  ＣＴＲの内容を増分させ、場合に応じて外部キャッシュ３０７又は主メモリ３０５へのメモリ・アクセスが通常の方法で開始される。レベル２キャッシュ・ミスのこの場合、エントリ６３の先取りフィールドＰＦ０中のアドレスに従って先取り制御論理２３により要求された先取りはマイクロプロセッサ１０の全体性能を著しく改善する、何故ならキャッシュ・ミスによる厳しい不利益（２５又はそれ以上のサイクルに及ぶ）はあまり重大でない時、現在のプログラムがアドレスフィールドＰＦ０  ＡＤＤＲ中のアドレスが指しているデータ又は命令を必要とする時より十分前に生じるためである。
【００８１】
しかしながら、判断１３９がＹＥＳの場合、先取りすべきデータ又は命令はレベル２キャッシュ１１又はより低いところ（すなわちレベル１キャッシュ１６の内の一方）にあり、先取り制御論理２３はプロセス１４０でカウンタＰＦ０  ＣＴＲの状態を減少させる。この時点で必要に応じて所要情報がより低いレベルのキャッシュ（例えばレベル１キャッシュ１６の一方）へ移動される。判断１４１で、先取り制御論理２３はＰＦ０  ＣＴＲの状態を質問し、その内容が零の場合、プロセス１４３を実行して対応する先取りエントリＰＦ０を不正化する（制御部分ＰＦ０Ｃのアクセス・ビットＡＣＣを００にセットすることにより）。このプロセスは、エントリ６３の先取りフィールドＰＦ０により指示される先取りは性能を顕著に改善するにはあまり有効ではないことを示している、何故なら先取りにより探求されたデータ又は命令は既に低レベル・キャッシュ・メモリにあるからである。カウンタＰＦ０  ＣＴＲの状態が零でない場合、先取りフィールドＰＦ０は正当のままであるが、情報は既に低レベル・キャッシュ・メモリに存在しているため、これ以上のメモリ・アクセスは不要である又は有用ではない。
【００８２】
本発明の望ましい実施例によると、それ故、マイクロプロセッサと対応するシステムの性能に著しい改善が得られる。特に、情報が実際に必要とされる時よりも十分前に低レベル・キャッシュ・メモリへ移動される可能な先取りアドレスを識別する本発明の利点により、キャッシュ・システムの性能（オンチップ及びオフチップの両方）は非常に改良される。これは、パイプラインを流れる命令の早期経路の結果を使用することにより、又分岐予測機構と組み合せて発明の望ましい実施例による知能的な方法で得られる。それ故、通常のシステム機能には最小の影響のみでかつ相対的に小さなコストでこれらの顕著な改良が得られると考えられる。
【００８３】
その望ましい実施例に従って本発明を記述してきたが、これらの実施例に対する変更や修正、本発明の利点と有効点を得る変更や修正は本明細書と図面を参照する当業者には明らかになるものと考えられる。このような変更と修正は本明細書の特許請求の範囲に請求する本発明の範囲内にあるものと考えられる。
【図面の簡単な説明】
【図１】本発明の望ましい実施例により構成されたマイクロプロセッサとシステムのブロック形式の電気配線図。
【図２】本発明の望ましい実施例による図１のマイクロプロセッサ中のフェッチ装置のブロック形式の電気配線図。
【図３】本発明の望ましい実施例による図１のマイクロプロセッサ中の分岐目標バッファ、パターン履歴表、及び関連回路のブロック及び概略形式での電気配線図。
【図４】本発明の望ましい実施例による図３の分岐目標バッファ中のエントリの内容の図。
【図５】本発明の望ましい実施例による図１のマイクロプロセッサ中の平滑キュー及びタグ検査回路の構成のブロック形式での電気配線図。
【図６】本発明の望ましい実施例による図５の平滑キュー及びタグ検査回路の動作を図示する流れ図。
【図７】本発明の望ましい実施例による図３の分岐目標バッファ中の更新論理の動作を図示する流れ図。
【図８】本発明の望ましい実施例による図１のマイクロプロセッサ中の先取り制御論理の動作を図示する流れ図。
【符号の説明】
１０  マイクロプロセッサ
１１  レベル２キャッシュ
１６  レベル１キャッシュ
２３  先取り制御論理
２６  フェッチ装置
２７  平滑キュー及びタグ検査回路
５６  分岐目標バッファ
５０  フェッチ・ポインタ
５３  パターン履歴表
５２、５７、５８  マルチプレクサ
６０  命令バッファ及び制御
６１  セレクタ
６３  ＢＴＢエントリ
７０  更新論理
８０  選択論理
【図１】
0003907809.tif 000003
【図２】
0003907809.tif 000004
【図３】
0003907809.tif 000005
【図４】
0003907809.tif 000006
【図５】
0003907809.tif 000007
【図６】
0003907809.tif 000008
【図７】
0003907809.tif 000009
【図８】
0003907809.tif 000010