(57)【要約】  パイプライン化された処理システムにおける分岐先バッファ（ＢＴＢ）（１４４）においてエントリを割り当てる方法（２００）及び装置（１００）は、命令をシーケンシャルにフェッチすること、それらの命令のうちの１つが分岐命令（２１５，２２０）であることを決定すること、その分岐命令を復号して分岐先アドレスを決定すること、パイプライン化された処理システムにおいて機能停止を引き起こすことなしに分岐先アドレスを獲得することができるかどうかを決定すること、及びＢＴＢエントリ（１４４）を上記の決定に基づいて選択的に割り当てることを含む。一実施形態において、ＢＴＢ（１４４）のエントリは、分岐命令がプリフェッチ・バッファ（１０２）の所定のスロット（Ｓ１）にロードされず且つ他の機能停止条件が起きない場合割り当てられる。本方法（２００）及び装置（１００）は、ＢＴＢ（１４４）を用いる利点と分岐先取りを用いる利点とを組み合わせて、データ処理システムにおける機能停止条件を低減する。
2007514237.tif 000002
【特許請求の範囲】
【請求項１】
パイプライン化された処理システムにおける分岐先バッファ（ＢＴＢ）においてエントリを割り当てる方法であって、
命令を複数の命令からフェッチするステップと、
前記複数の命令のうちの１つが分岐命令であることを決定するステップと、
前記分岐命令を復号して、分岐先アドレスを決定するステップと、
前記パイプライン化された処理システムにおいて更なる機能停止を引き起こすことなしに前記分岐先アドレス位置を獲得することができるかどうかを決定するステップと、
ＢＴＢエントリを前記の決定に基づいて選択的に割り当てるステップと
を備える方法。
【請求項２】
前記分岐先アドレス位置を獲得することができるかどうかを決定する前記ステップが、複数のスロットを有するプリフェッチ・バッファの所定のスロットを調べて前記分岐命令を識別するステップを備える請求項１記載の方法。
【請求項３】
前記分岐命令に対応する分岐先アドレスを前記ＢＴＢの所定のエントリにロードするステップを更に備える請求項２記載の方法。
【請求項４】
前記ＢＴＢエントリの中の前記分岐先アドレスを用いて目標命令をプリフェッチするステップを更に備える請求項１記載の方法。
【請求項５】
機能停止条件が前記パイプライン化された処理システムに存在することを決定するステップと、
ＢＴＢエントリが前記停止条件のため割り当てられないであろうことを決定するステップと、
前記分岐命令がメモリ位置からフェッチされるのを待つステップと
を更に備える請求項１記載の方法。
【請求項６】
前記決定するステップが更に、前記分岐命令がプリフェッチ・バッファの所定のスロットに割り当てられなかったこと及び他の停止条件が起きないであろうことを決定するステップを更に備える請求項１記載の方法。
【請求項７】
複数のスロットを有し、命令を格納するプリフェッチ・バッファと、
複数のエントリを有する分岐先バッファ（ＢＴＢ）と、
前記プリフェッチ・バッファ及び前記ＢＴＢに結合された制御論理ユニットと、を備え、
前記制御論理ユニットは、前記分岐命令が前記プリフェッチ・バッファの前記複数のスロットのうちの所定のスロットで検出されなかった場合、前記ＢＴＢの前記複数のエントリのうちの１つのエントリを割り当てて、分岐命令の分岐先アドレスを受け取るようにする、データ処理システム。
【請求項８】
前記複数のスロットのうちの前記所定のスロットが、命令レジスタの入力に結合された出力を有する第１のスロットであることを特徴とする請求項７記載のデータ処理システム。
【請求項９】
先入れ先出し置換アルゴリズムを用いて、前記ＢＴＢをロードする請求項７記載のデータ処理システム。
【請求項１０】
前記ＢＴＢの前記複数のエントリの各エントリが、前記分岐命令のアドレスに関連したアドレス値を格納する第１ビット・フィールド、及び分岐先アドレスを格納する第２ビット・フィールドを含む請求項７記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
［発明の分野］
本発明は、一般的に、データ処理システムに関し、より詳細には分岐先バッファにおいてエントリを割り当てることに関する。
【０００２】
［関連技術］
分岐先バッファ（ｂｒａｃｈ  ｔａｒｇｅｔ  ｂｕｆｆｅｒ）（ＢＴＢ）は、分岐命令の実行で費やされる多数のサイクルを低減することによりプロセッサ性能を改善するため広範に用いられてきた。分岐先バッファは、最近の分岐のキャッシュとして動作し、そして分岐先アドレス（分岐宛先のアドレス）か又は分岐先（ｂｒａｎｃｈ  ｔａｒｇｅｔ）での１又はそれより多くの命令かのいずれかを分岐命令の実行前に与えることにより分岐を加速し、それは、プロセッサが分岐先アドレスで命令の実行をより迅速に始めることを可能にする。
【０００３】
また、分岐先取りスキームを用いて、シーケンシャル命令ストリームの中を先行して走査し、やがて現れる分岐命令をそれらの実行に先だって捜し、そして分岐の分岐先アドレスを早期に計算することにより、分岐処理を加速、動作して、分岐を取る場合に分岐命令の実行に先だって分岐先命令をフェッチすることを可能にする。
【０００４】
分岐予測論理をＢＴＢスキーム及び分岐先取りスキームの両方と共に用いて、分岐条件の解明の前に条件付き分岐の結果（それを取るか取らないか）の早期の予測を可能にし、こうして予測器の精度が高いとき分岐性能の増大を可能にする。
【０００５】
現在の多くの分岐先バッファ設計は、命令ストリームの中で遭遇されたどの分岐命令に対しても１つのエントリを割り当てる割り当て方策を用いる。このアプローチは、非効率になりがちである。それは、取られない分岐は将来取られなさそうであり、そしてエントリをそれらに対して割り当てることが将来取られる分岐エントリに取って代わり、従って分岐先バッファのヒット率を低下させるからである。
【０００６】
別のアプローチは、分岐が実際に取られていることを知るまで分岐先バッファにおいてエントリを割り当てることを待つことである。それは、取られない分岐は次の実行で取られないことが高い確率で有るるからである。より大きい分岐先バッファに対して、これは、合理的アプローチである。しかしながら、分岐先バッファのサイズを最小化しなければならない低コストのシステムに対しては、新しいエントリを分岐先バッファにおいて割り当てる方法を改善することが望まれている。
【０００７】
従って、より効率的で且つより経済性に優れる改善されたＢＴＢ設計に対する必要性が存在する。
本発明は、添付の図面により一例として示されるがそれにより限定されるものではなく、それらの図面において類似の参照番号は、類似の構成要素を示す。
【０００８】
当業者は、図面の中の構成要素が単純且つ明瞭に示されるよう描かれており、そして必ずしも尺度通りに描かれていないことを認めるであろう。例えば、図面の中の構成要素の一部のものの寸法は、本発明の実施形態の理解を増進するのを助けるため他の構成要素に対して誇張されている場合がある。
【０００９】
［発明の詳細な説明］
本明細書で用いられるように、用語「バス」は、複数の信号又は導体を呼ぶために用いられ、当該複数の信号又は導体は、データ、アドレス、制御、又はステータスのような１又はそれより多くの様々な種類の情報を転送するため用いられ得る。本明細書で説明される導体は、単一の導体、複数の導体、一方向性の導体、又は双方向性の導体であることに関連して示され又は説明される。しかしながら、異なる実施形態は、導体の実現を変え得る。例えば、別々の一方向性の導体が双方向性の導体よりむしろ用いられ得て、そしてその逆もあり得る。また、複数の導体は、複数の信号をシリアルに又は時分割多重化して転送する単一の導体と置換し得る。同様に、複数の信号を送る単一の導体は、これらの信号のサブセットを送る様々の異なる導体に分けられ得る。従って、多くの選択が、信号を転送するため存在する。
【００１０】
用語「アサート」、又は「設定（又はセット）」及び「ニゲート」（又は、「ディアサート」又は「クリア」）は、信号、ステータス・ビット、又は類似の装置をその論理的「真」状態又は論理的「偽」状態のそれぞれにすることに言及するとき用いられる。論理的「真」状態が論理レベル「１」である場合、論理的「偽」状態は、論理レベル「０」である。そして、論理的「真」状態が論理レベル「０」である場合、論理的「偽」状態は、論理レベル「１」である。
【００１１】
従って、本明細書に記載された各信号は、正又は負の論理として設計され得て、そこにおいて負論理は、信号の上のバー又は名前の後に続くアスタリスク（＊）により示すことができる。負論理信号の場合、信号は、アクティブ・ローであり、そこでは論理的「真」状態は、論理レベル「０」に対応する。正論理信号の場合、信号は、アクティブ・ハイであり、そこでは論理的「真」状態は、論理レベル「１」に対応する。
【００１２】
角括弧を用いて、バスの導体、又は値のビット位置を示す。例えば、「バス６０［０−７］」又は「バス６０の導体［０−７］」は、バス６０の８個の低次側導体を示し、そして「アドレス・ビット［０−７］」又は「ＡＤＤＲＥＳＳ［０−７］」は、アドレス値の８個の低次ビットを示す。数字の前にある記号「＄」は、その数字が１６進又は基底１６形式で表されていることを示す。数字の前にある記号「％」は、２値又は基底２形式で表されていることを示す。
【００１３】
本発明の一実施形態は、分岐先取り成果を利用して、当該分岐先取りの結果に基づいてＢＴＢにおけるエントリの割り当てを条件付けすることにより改善されたＢＴＢ設計を与えようとしている。本発明の別の実施形態は、プロセッサ機能停止情報（プロセッサ・ストール情報）を利用して、ＢＴＢにおいてエントリの割り当てを実行することの推定された利点に基づいてＢＴＢにおいてそのような割り当てを条件付けすることにより改善されたＢＴＢ設計を与えようとしている。
【００１４】
図１は、本発明の一実施形態に従ったデータ処理システム１００をブロック図形式で示す。データ処理システム１００は、メモリ１６６、バス１６８及びプロセッサ１８４を含む。データ処理システム１００は、図示された構成要素以外の他の構成要素を含み得て、又は図示された構成要素より多くの又は少ない構成要素を含み得る。例えば、データ処理システム１００は、任意の数のメモリ、周辺装置、又はプロセッサを含み得る。
【００１５】
プロセッサ１８４は、命令レジスタ（ＩＲ）１１６、分岐アドレス計算器（ＢＡＣ）１０８、プログラム・カウンタ１１２、マルチプレクサ（ＭＵＸ）１２６、ラッチ１６０、加算器１５６、マルチプレクサ（ＭＵＸ）１５４、分岐先バッファ（ＢＴＢ）１４４、復号及び制御論理（ＤＣＬ）１６４、命令バッファ１０５、比較器１７０、制御論理１７２及びプリフェッチ・バッファ１０２を含む。プリフェッチ・バッファ１０２は、命令スロットＳ０，Ｓ１，Ｓ２，Ｓ３，Ｓ４及びＳ５を含む。命令バッファ１０５は、プリフェッチ・バッファ１０２及び命令レジスタ１１６を含む。プロセッサ１８４は、例えば、マイクロプロセッサ、マイクロコントローラ、ディジタル信号プロセッサ等のようないずれのタイプのプロセッサであり得る。一実施形態においては、プロセッサ１８４は、プロセッサ・コアと呼ばれ得る。別の実施形態においては、プロセッサ１８４は、マルチプロセッサ・データ処理システムの中の多くのプロセッサのうちの１つであり得る。更に、プロセッサ１８４は、パイプライン化されたプロセッサであり得る。
【００１６】
データ処理システム１００の一実施形態において、プリフェッチ・バッファ１０２は、ＢＡＣ１０８、ＤＣＬ１６４、命令レジスタ１１６、及びバス１６８に結合されている。ＢＡＣ１０８は、ＭＵＸ１２６、プログラム・カウンタ１１２、プリフェッチ・バッファ１０２、及び命令レジスタ１１６に結合されている。ＭＵＸ１２６は、プログラム・カウンタ１１２、ＢＡＣ１０８、ＭＵＸ１５４、加算器１５６、ラッチ１６０、及びバス１６８に結合されている。ＢＴＢ１４４は、ＣＴＲＬ１７２、比較器１７０、及びＭＵＸ１５４に結合されている。比較器１７０は、ＭＵＸ１５４、ＢＴＢ１４４、アドレス・バス１２８、及びＤＣＬ１６４に結合されている。ＤＣＬ１６４は、ＭＵＸ１２６、命令レジスタ１１６、比較器１７０、プリフェッチ・バッファ１０２、メモリ１６６、及びＣＴＲＬ１７２に結合されている。メモリ１６６は、バス１６８、及びＤＣＬ１６４に結合されている。
【００１７】
本発明の一実施形態において、メモリ１６６は、各命令が対応の命令アドレスを有する一連の命令を含む。プロセッサ１８４のクロック・サイクル中に、ＤＣＬ１６４は、命令バッファ１０５がメモリ１６６からの所定数の命令を格納するため利用可能な所定数のスロットを有するかどうかを決定する。ＤＣＬ１６４は、そのＤＣＬ１６４がプリフェッチ・バッファ１０２のサイズ、命令バッファ１０５の中の確保されたスロットの数、及びバス１６８を介してメモリから現在フェッチされている命令の数を知っていることを用いることにより命令バッファ１０５の中の利点可能な所定数のスロットが有るかどうかを決定することができる。所定数のスロットは、用いられているパイプライン化されたプロセッサに応じて変わり、そしてフェッチされた命令の数及びフェッチされている各命令のサイズに依存し得る。本明細書で説明される実施形態については、パイプライン化されたプロセッサがダブルワード・フェッチ・サイズを用い、所定数のスロットが２であり、且つフェッチされている命令の所定数が２であり、即ち２ワード・サイズ命令が各ダブルワード命令フェッチ中に要求されることを仮定する。代替実施形態は、本明細書で説明される実施形態以外の、異なる数のプリフェッチ・スロットを用い得て、また異なるパイプラインを用い得て、更にまた異なるフェッチ・サイズ及びメモリ・レイテンシー（待ち時間）を有し得る。
【００１８】
本発明の少なくとも１つの実施形態において、プリフェッチ・バッファ１０２を用いて、プロセッサ１８４による順次命令の実行に先立ってその順次命令を保持する。命令レジスタ１１６を用いて、実行のため復号されている現在の命令を保持する。命令が実行されるにつれ、順次命令は、プリフェッチ・バッファ・スロット０から又はデータ・バス１３０から導体１１４を介して命令レジスタ１１６に与えられる。これらの命令がパイプラインを通って進むにつれ、フェッチされた命令は、有効な命令が前のスロットに存在すると仮定すると、スロット１からスロット０にシフトされ、スロット２からスロット１にシフトされ、以下同様にされる。プリフェッチ・バッファ１０２の中の空のスロットは、バス１６８及びデータ・バス１３０を介してメモリ１６６からフェッチされた要求された命令で充填される。
【００１９】
本発明の少なくとも１つの実施形態においては、プリフェッチ・バッファ１０２は、命令レジスタ１１６からのメモリの減結合を可能にし、そして命令のＦＩＦＯとして働く。命令実行ストリームが命令の流れの変更なしで順次的なままであるある限り、命令は、順次的に要求され、プリフェッチ・バッファ１０２に供給され続ける。命令の流れの変更が起きるとき、順次命令ストリームは、廃棄されねばならず、そしてプリフェッチ・バッファ１０２は、未使用の順次命令をフラッシュされ、そして命令の流れの変更の目標位置から命令の新しいストリームで充填される。割り込み及び例外処理のような追加の事象がまた命令の流れの変更を起こさせるにも拘わらず、分岐命令をプロセッサ１８４で通常用いて、新しい命令ストリームへの命令の流れの変更を起こさせる。現在の命令ストリームが廃棄され、そして新しい命令ストリームが確立されたので、命令の流れの変更は、プロセッサ１８４での命令の正規の実行の破壊を起こす。これは、典型的には、プロセッサ１８４に、新しい命令ストリームが確立されるのを待ちながら１又はそれより多くのサイクルの命令の実行を停止（ｓｔａｌｌ）させ、こうしてデータ処理システム１００の全体的性能及び効率を低下させる。
【００２０】
プリフェッチ・バッファ１０２の別の利点は、そのバッファのコンテンツ（中味）が、走査されて、プロセッサ１８４による分岐命令の実行に先立って、命令の流れの変更を生じさせ得る分岐命令の存在を決定し得ることである。実行に先立って命令ストリームを調べることにより、分岐命令はそれが実行される前の十分早期に検出され得ることが可能であり、そのためプロセッサ１８４に機能停止（ｓｔａｌｌ）させること無しに目標命令ストリームを確立することができ、こうしてデータ処理システム１００の実行効率を改善する。これは、「分岐先取り」を実行することとして知られている。機能停止条件を回避するため要求される先取りの深さは、プロセッサのパイプライン深さ及びメモリ・アクセス・レイテンシー（メモリ・アクセス待ち時間）の関数であり、そして本発明の様々な実施形態で変わり得る。
【００２１】
以下で更に説明されるであろう本発明の一実施形態においては、先取りの深さは、分岐命令が実行のため命令レジスタ１１６に到着する前の２つの命令に等しい。分岐先（分岐目標）（ｂｒａｎｃｈ  ｔａｒｇｅｔ）が、計算され、そしてアクセス要求が、メモリになされて、その分岐が実行のため命令レジスタに到着する前の少なくとも２命令サイクルで目標命令ストリームを獲得する場合、追加の機能停止条件がプロセッサ１８４に関して引き起こされないであろう。これは、分岐命令がプリフェッチ・バッファ１０２のスロット（Ｓ１）で検出される場合達成されることができる。それは、２つの命令が、即ちスロット０（Ｓ０）の中及び命令レジスタ１１６の中のそれらの命令が分岐命令より前にあるからである。この場合、分岐先が、計算され得て、そして要求が、メモリに対してなされて、目標命令を獲得し、それは、目標命令ストリームにアクセスする際に被る遅延に起因した追加の実行停止サイクルを回避するためプロセッサ１８４に適時に戻るであろう。
【００２２】
全ての分岐命令がプリフェッチ・バッファ１０２のスロット１の中で検出可能であるわけではないことがあり得る。それは、分岐命令がスロット１をバイパスし、そして直接に命令レジスタ１１６に又はプリフェッチ・バッファ１０２のスロット０にデータ・バス１３０を介してロードされ得るからである。これらの条件は、命令の流れの変更が生じたとき生じ、そして目標命令ストリームは、分岐命令を新しいストリームのヘッド近くに含む。最初の２つの戻り命令が命令レジスタ１１６及びプリフェッチ・バッファ１０２のスロット０にロードされるので、それらは、プリフェッチ・バッファ１０２のスロット１に常駐してなく、従って、第２の目標命令ストリームが到着するのを待ちながらプロセッサ１８４の機能停止を回避するため十分早期に命令の流れの第２の変更の目標をフェッチする機会が存在しなかったであろう。その上、プロセッサ１８４が第３及び第４の命令が目標ストリームから到着するのを待ちながら命令の実行を完了した場合、命令パイプラインは、進行し、そして第３及び第４の戻り命令は、プリフェッチ・バッファ１０２のスロット１及びスロット２ではなくスロット０及びスロット１に配置されるであろう。分岐命令が新しい目標ストリームの第３の命令として存在する場合、その分岐命令は、スロット１に存在する機会を持たず、従って、分岐先取りのみを用いて、次の目標ストリームをフェッチし且つプロセッサ１８４の機能停止を回避するため不十分な時間しか使用可能でないであろう。
【００２３】
他の実施形態においては、分岐命令は、他の理由のためプリフェッチ・バッファ１０２のスロット１をヒットしないことがあり得る。例えば、統一メモリ・バス（ｕｎｉｆｉｅｄ  ｍｅｍｏｒｙ  ｂｕｓ）を有するデータ処理システムは、連続的ロード／ストア命令を実行しながら命令バッファ１０５を排出（ｄｒａｉｎ）することができるであろう。命令バッファ１０５の中のこのロード／ストア命令を実行した後で命令レジスタ及びスロット０を充填するための後続のフェッチは、後続の分岐命令がプリフェッチ・バッファ１０２のスロット１で処理されないことをもたらすことができるであろう。
【００２４】
たとえ分岐命令が追加の機能停止条件を含むことを回避するため十分早期にスロット１に到着しなくても、分岐命令がプリフェッチ・バッファ１０２のスロット０にある間に分岐先アドレスを計算し且つ目標命令ストリームを要求することにより分岐を部分的に加速する機会が依然としてあり得る。この場合、１又はそれより多くのサイクルの機能停止が回避されるであろう。
【００２５】
たとえ分岐命令が命令バッファ１０５のスロット１にロードされることができても、その特定の分岐命令のため目標ストリームをフェッチし始める機会がないかも知れない。それは、異なる分岐命令がまたスロット０又は命令レジスタ１１６に存在することが可能であるからである。この場合、一実施形態において、命令レジスタ１１６の中のより早期の分岐は、たとえそのより早期の命令が分岐条件に適合しない場合実際に取られることができなくてもメモリ・アクセスに関するより高い優先度を与えられるであろう。この場合、第１の分岐のための目標命令ストリームは、廃棄されるが、しかしプリフェッチ・バッファ１０２のスロット１に存在（ｒｅｓｉｄｅｎｔ）する次の分岐のため目標ストリームをフェッチする機会を逸してしまうであろう。
【００２６】
命令の流れの来るべき変更を十分早期に検出することができそして要求が目標ストリームをフェッチするためメモリに対してなされる場合分岐先取り技術を用いることによりプロセッサ１８４の機能停止条件を低減させることができることが分かることができるが、しかしそれができない場合が頻繁にある。この場合に関しては、分岐先バッファを用いて、分岐命令の目標ストリームにアクセスすることを加速する。本発明の一実施形態において、ＢＴＢ１４４は、そのＢＴＢ１４４に前に格納された分岐命令のため、事前計算された目標アドレスを保持する。目標アドレスの計算は時間を必要とするので、一実施形態においては、目標アドレスは、分岐先取り技術を用いる場合より１又はそれより多くのクロック・サイクルだけ早期に要求されることができる。目標アドレスを含むＢＴＢエントリが使用可能である場合、目標命令ストリームは、分岐がプリフェッチ・バッファ１０２に又は命令レジスタ１１６に到着する前に確立されることができる。分岐命令のアドレスを用いて、ＢＴＢ１４４の中のルックアップを実行して、マッチング・エントリが存在するかどうかを決定することができる。マッチング・エントリが存在する場合、目標アドレスが、ＢＴＢ１４４から獲得され、そしてメモリ要求を行って、その命令を分岐先位置（分岐目標位置）（ｂｒａｎｃｈ  ｔａｒｇｅｔ  ｌｏｃａｔｉｏｎ）で獲得し得る。
【００２７】
ＢＴＢ１４４は、分岐命令の目標アドレスを格納するため限定数のエントリを含む。データ処理システム１００の最高性能のため、追加のプロセッサ１８４の機能停止を起こすことなしにプリフェッチ・バッファ１０２における分岐先取りにより加速されることができるそれらの分岐は、ＢＴＢ１４４における１つのエントリを割り当てられないで、従ってＢＴＢ１４４の「実効的」容量を増大する。
【００２８】
複数の分岐命令が命令レジスタ１１６及びプリフェッチ・バッファ１０２の中に存在し得るので、復号及び制御論理１６４は、アクセスされるべき分岐先ストリームの選択を優先順位付けしなければならない。本発明の一実施形態において、命令レジスタの中の分岐命令は、最高位に優先順位付けされ、プリフェッチ・バッファ１０２のスロット０は、次の最高位に優先順位付けされ、プリフェッチ・バッファ１０２のスロット１がその次に高い優先順位に付けられ、以下同様に優先順位付けされる。それは、これが命令ストリームの中の命令の論理的順序を表すからである。ＤＣＬ１６４は、こうして命令レジスタ１１６で始まって、プリフェッチ・バッファ１０２のスロット０、次いでスロット１と逆順に命令を走査する。分岐命令がより高い優先順位の位置に見つけられた場合、より低い優先順位の位置の分岐命令は、一時的に無視される。
【００２９】
ＤＣＬ１６４が命令レジスタ１１６に置かれた命令が分岐命令でないと決定したとき、ロードＢＴＢ１７４（ＢＴＢ１７４にロード）は、ディアサートされたままである。ＢＴＢ更新は、分岐が実際に取られることを決定された後でのみ実行され、そしてこれは、分岐命令が命令レジスタ１１６に到着するまでに必ずしも決定されるわけではない。
【００３０】
本発明の少なくとも１つの実施形態において、ＤＣＬ１６４はまた、条件付き分岐の成果を予測するため用いられる分岐予測論理を含む。条件付き分岐を取った成果又は取らなかった成果に関する予測に応じて、目標命令ストリームは、プリフェッチされ得て、又は、或る実施形態においては、分岐条件が実際に解決（ｒｅｓｏｌｖｅ）されるまでプリフェッチされることが遅らされる。本発明の代替実施形態は、分岐予測論理をＢＴＢ１４４において、又はプロセッサ１８４における他の位置において実現し得て、又は分岐予測論理を利用しない場合も有り得る。分岐予測論理を用いないとき、或る実施形態においては、分岐先位置が、分岐条件が解決されることを待つことなしにプリフェッチされ、それは、分岐先位置をプリフェッチする目的のため分岐が取られるであろうことを予測することと等価である。
【００３１】
本発明の一実施形態において、分岐アドレス計算器１０８を用いて、プリフェッチ・バッファ１０２の中の命令のスロット目標アドレスと、命令レジスタ１１６の中の命令の命令レジスタ目標アドレスとを決定し得る。例えば、クロック・サイクル中に、分岐アドレス計算器１０８は、プリフェッチ・バッファ１０２及び命令レジスタ１１６に格納された命令の変位フィールドと、プログラム・カウンタＰＣ１１２から現在実行されている命令のアドレスとを受信する。次いで、分岐アドレス計算器１０８は、スロット０の中の命令のスロット０目標アドレス（Ｓ０ＴＡ）、スロット１の中の命令のスロット１目標アドレス（Ｓ１ＴＡ）、及び命令レジスタ１１６の中の命令の命令レジスタ目標アドレス（ＩＲＴＡ）を計算する。ＩＲＴＡ、Ｓ０ＴＡ、Ｓ１ＴＡ等のうちのいるかは、以下で更に説明される用に、ＤＣＬ１６４が命令バッファ１０５に格納された命令が分岐命令であるとき選択される。
【００３２】
図１に示される本発明の少なくとも１つの実施形態の動作が、図２及び図３に示されるフロー図を参照して以下で説明されるであろう。本発明の一実施形態において、フローは、開始の長円形２０５で始まり、そして判断の菱形２１０に進んで、分岐命令がＩＲ１１６にあるかどうかを決定する。この決定の結果が肯定（イエス）である場合、フローは、判断の菱形２１５に進み、そこで分岐命令がＩＲ１１６に到着する前にプリフェッチ・バッファ１０２のスロット１の中に以前にプリフェッチされたかどうかが決定される。この決定の結果が肯定（イエス）である場合、フローは、判断の菱形２６７に進んで、分岐命令が要求されたかどうかを決定する。この決定の結果が肯定（イエス）である場合、フローは、ステップ２９５に進み、そこで、新しいＢＴＢ１４４エントリが割り当てられてなく、そして目標位置が到着するのを待つ。次いで、フローは、次のサイクルの長円形２６０に進んで、次のサイクルを始める。この場合、目標がプリフェッチ・バッファ１０２のスロット１からプリフェッチされ且つプロセッサ１８４に適時に到着していずれの追加の機能停止サイクルを回避し得るので、ＩＲ１１６の中の分岐のために新しいＢＴＢ１４４エントリを割り当てる必要性がない。
【００３３】
判断の菱形２６７に戻って、分岐先が前に要求されなかった場合、フローは、判断の菱形２７０に進んで、分岐命令のためのＢＴＢヒットがあったかどうかを決定する。その決定が肯定（イエス）である場合、フローは、ステップ２７５に進み、そこで、ＢＴＢルックアップの結果をいずれの分岐予測論理の結果と一緒に用いて、目標位置を予測する。次いで、フローは、次のサイクルの長円形２６０に進む。判断の菱形２７０における決定がＢＴＢヒットがなかったことである場合、フローは、判断の菱形２８０に進んで、プロセッサが機能停止されたかどうかを決定する。プロセッサは、マルチサイクル命令からのデータ依存性を含む任意の数の理由のため機能停止し得る。上記の決定が肯定（イエス）である場合、フローは、ステップ２９０に進み、そこで、目標位置は、分岐予測論理の結果に基づいてプリフェッチされ、そしてＢＴＢエントリは、割り当てられない。この場合、プロセッサ１８４の機能停止は、ＢＴＢエントリを要求することなしに、分岐先位置を獲得するのに十分な時間を与え得て、従って新しいエントリを割り当てる必要性を回避する。これは、ＢＴＢの一層の効率的使用をもたらす。次いで、フローは、次のサイクルの長円形２６０に進む。
【００３４】
判断の菱形２８０に戻って、プロセッサ１８４の機能停止がない場合、フローは、ステップ２８５に進み、そこで、目標位置は、分岐予測論理の結果に基づいてプリフェッチされ、そして新しいＢＴＢエントリは、分岐が取られるよう解決される場合割り当てられる。この場合、ＢＴＢエントリの割り当ては、この特定の分岐に遭遇する次の時に改善された分岐性能を可能にする。次いで、フローは、次のサイクルの長円形２６０に進む。
【００３５】
判断の菱形２１５に戻って、分岐命令がプリフェッチ・バッファ１０２のスロット１の中にプリフェッチされなかった場合、フローは、判断の菱形２２０に進み、そこで、分岐命令がプリフェッチ・バッファ１０２のスロット０の中にプリフェッチされたかどうかの決定が行われる。その決定の結果が否定（ノー）である場合、フローは、判断の菱形２２５に進み、そこで、ＢＴＢヒットが生じたかどうかの決定が行われる。ＢＴＢヒットが生じなかった場合、フローは、ステップ２３０に進み、そこで、分岐先は、分岐予測論理の結果に基づいてプリフェッチされ、そして新しいＢＴＢエントリは、分岐が取られるよう解決された場合割り当てられる。この場合、ＢＴＢエントリの割り当ては、この特定の分岐に遭遇する次の時に改善された分岐性能を可能にする。次いで、フローは、次のサイクルの長円形２６０に進む。
【００３６】
判断の菱形２２５によりＢＴＢヒットが生じた決定された場合、フローは、ステップ２７５に進み、そして、ステップ２７５の動作に関して前に説明したように動作が続行される。
【００３７】
判断の菱形２２０に戻って、分岐命令がプリフェッチ・バッファ１０２のスロット０の中にプリフェッチされた場合、フローは、判断の菱形２２２に進み、そこで、分岐先がスロット０から要求されたかどうかの決定が行われる。分岐先位置が要求された場合、フローは、判断の菱形２２６に進んで、プロセッサの機能停止条件があるかどうかを決定する。プロセッサの機能停止条件がある場合、フローは、ステップ２９５に進み、そして、ステップ２９５の動作に関して前に説明したように動作が続行する。プロセッサの機能停止条件がない場合、フローは、ステップ３００に進み、そして、新しいＢＴＢエントリは、分岐が取られるよう解決された場合条件付きで割り当てられ、そして、プロセッサは、目標が到着するのを待つ。判断の菱形２２２により分岐先位置が要求されなかったと決定された場合、フローは、判断の菱形２２４に進み、そこで、ＢＴＢヒットがあったかどうかの決定が行われる。ＢＴＢヒットがあった場合、フローは、ステップ２７５に進み、そして、ステップ２７５の動作に関して前に説明されたように動作が続行される。
【００３８】
判断の菱形２２４によりＢＴＢヒットがなかったと決定された場合、フローは、判断の菱形２８０に進んで、プロセッサ１８４の機能停止条件が存在するかどうかを決定し、そして、ステップ２８０の動作に関して前に説明したように動作が続行する。
【００３９】
判断の菱形２１０に戻って、分岐がＩＲ１１６の中にない場合、フローは、判断の菱形２３５に進み、そこで、プリフェッチ・バッファ１０２のスロット０の中に分岐命令があるかどうかを決定する。その決定の結果が肯定（イエス）である場合、フローは、判断の菱形２６５に進んで、スロット０の中の分岐命令がスロット１の中にプリフェッチされたかどうかを決定する。分岐命令がスロット１の中にプリフェッチされた場合、フローは、判断の菱形２６７に進み、そして、判断の菱形２６７の動作に関して前に説明したように動作が続行する。分岐命令がスロット１の中にプリフェッチされなかった場合、フローは、判断の菱形２７０に進み、そして、判断の菱形２７０の動作に関して前に説明したように動作が続行する。判断の菱形２３５における決定の結果が否定（ノー）である場合、フローは、判断の菱形２４０に進み、そこで、プリフェッチ・バッファ１０２のスロット１の中に分岐命令があるかどうかを決定する。その決定の結果が否定（ノー）である場合、フローは、分岐命令が命令バッファ１０５の位置の所定のサブセットの中に見つけられなかったので次のサイクルの長円形２６０に進む。判断の菱形２４０における決定の結果がプリフェッチ・バッファ１０２のスロット１の中に分岐命令があることである場合、一実施形態においては、フローは、判断の菱形２４５に進んで、ＢＴＢヒットがスロット１の中の分岐命令のため生じたかどうかを決定する。ＢＴＢヒットが生じた場合、フローは、ステップ２５５に進み、そしてＢＴＢルックアップの結果及び分岐予測論理の結果を用いて、分岐先をプリフェッチする。次いで、フローは、次のサイクルの長円形２６０に進む。本発明の一実施形態においては、判断の菱形２４５の結果がＢＴＢヒットが生じたことである場合、フローは、ステップ２５０に進んで、そこで、分岐先位置は、分岐予測論理に基づいてプリフェッチされ、そして新しいＢＴＢエントリは、割り当てられない。代わりに、目標フェッチが、完了するため可能にされ、次いでフローは、次のサイクルの長円形２６０に進む。
【００４０】
代替実施形態においては、図３におけるフローのステップ２４５が、除かれ、そしてフローは、ステップ２４０における「肯定（イエス）」の決定からステップ２５０に直接進み得る。これは、分岐先アドレスがスロット１で計算され、そして十分な時間が目標命令が到着するため使用可能であるならば目標命令ストリームがＢＴＢ１４４の支援無しにフェッチされるので起こり得る。
【００４１】
図２及び図３に示されるフローは、プロセッサ１８４のＢＴＢ１４４が最高の便利さを与えるため有利に動作され得る少なくとも１つのあり得る方法を表す。分岐先位置がＢＴＢ１４４を利用すること無しに獲得され、且つデータ処理システム１００の動作に追加の遅延を招くことを依然回避し得る条件を決定することにより、より効率的な使用は、限定された容量のＢＴＢ１４４から生じ得る。
【００４２】
図１に示される本発明の少なくとも１つの実施形態の動作は、図４、図５、図６及び図７に示されるタイミング図、及び図２及び図３に示されるフロー図を参照して以下で説明されるであろう。図４及び図５に示されるそれぞれのタイミング図の最初のクロック・サイクルの始めに、ロードＢＴＢ１７４及び比較器一致信号１９７が、ディアサートされると仮定する。
【００４３】
図１に示される本発明の少なくとも１つの実施形態において、図４を参照すると、第１のクロック・サイクル中に、ＤＣＬ１６４は、２つのスロットが命令バッファ１０５の中で使用可能であるかどうかを決定する。ＤＣＬ１６４が２つのスロットが命令バッファ１０５、この場合、命令レジスタ１１６及びスロット０の中で使用可能であると決定したとき、要求信号１９９が、アサートされ、そしてその２つのスロット、即ち命令レジスタ１１６及びスロット０が、確保される。要求信号１９９が、ＤＣＬ１６４からメモリ１６６に与えられ、そしてそれを用いて、命令がメモリ１６６からフェッチされることを要求する。フェッチされている初期命令に対応する命令アドレスは、プログラム・カウンタ１１２によりＩＩＡ１２３を介してＭＵＸ１２６に与えられる。ＤＣＬ１６４は、ＭＵＸ１２６を用いて、初期命令アドレス１２３を選択し、その初期命令アドレス１２３は、次いで、アドレス１２８上へ駆動されて、メモリ１６６の中のアドレス＄０及びアドレス＄４に配置された命令Ｉ０及びＩ１を要求する。
【００４４】
アドレス・バス１２８上へ駆動された命令アドレス＄０は、ラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８及び加算器１５６に結合されていて、そのラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉する。次いで、加算器１５６は、現在の命令アドレスをダブルワード・フェッチ・サイズ＄８だけ増分する。前述したように、ダブルワード・フェッチ・サイズは、本発明の異なる実施形態で変わり、そしてフェッチされている各命令のサイズに依存し得る。ラッチ１６０による捕捉、及び加算器１５６により生じるアドレス・バス１２８上のアドレスの増分は、全てのクロック・サイクル中に生じ、そこにおいては、アドレス・バス１２８上へ駆動されたアドレスがあり、そして要求が、メモリに対してなされる。増分されたアドレス、この場合、＄８は、加算器１５６により順次命令アドレス（ＳＩＡ）１５８として出力される。
【００４５】
比較器１７０は、アドレス・バス１２８上へ駆動されたアドレスを受け取り、そしてそのアドレスを、もしあれば分岐先バッファ１４４に格納されている１つ又は複数の分岐命令アドレスと比較する。分岐先バッファ１４４は、メモリ１６６から受け取られた分岐命令のアドレスを格納するための分岐命令アドレス（ＢＩＡ）スロットと、それらの分岐命令に対応する計算された目標アドレスを格納するための分岐先アドレス（ＢＴＡ）と、フラグ・ビット（ＦＢ）スロットのアサートされた（有効な）又はディアサート（無効な）ビットが各分岐先アドレス・スロット及び対応の分岐先アドレス・スロットが有効な又は無効な分岐先アドレスを有するかどうかを表す当該フラグ・ビット（ＦＢ）スロットとを含む。分岐先アドレスがＢＴＢ１４４の中のＢＩＡスロットにロードされ、そして対応の分岐先アドレスがＢＴＢ１４４の中の対応のＢＴＡスロットにロードされるとき、関連したフラグ・ビットが、有効なＢＴＢエントリを指示するようアサートされる。リセット時、スタートアップ時、及び分岐先アドレスがＢＩＡスロットにないか又は対応の分岐先アドレスがＢＴＢ１４４の中のＢＴＡスロットにない時、関連したフラグ・ビットは、ディアサートされる。フラグ・ビットは、ＢＩＡ及びＢＴＡが有効か又は無効かどうかを表すため、例えば、０又は１であり得る。
【００４６】
比較器１７０がアドレス・バス１２８上へ駆動されたアドレスがＢＴＢ１４４に格納されている分岐命令アドレスのいずれかと一致すると決定し、そして関連したフラグ・ビットが有効であるとき、ＢＴＢヒットが、生じており、そして比較器１７０は、比較器一致信号１９７をアサートする。比較器１７０はまた、信号１８０及びＭＵＸ１５４を用いて、ＢＴＢヒットを発生した分岐命令アドレスに対応する分岐先アドレスを選択する。選択された分岐先アドレスは、分岐先バッファ目標アドレス（ＢＴＢＴＡ）１７８を用いて、ＭＵＸ１２６に与えられる。比較器一致信号１９７がアサートされるので、ＤＣＬ１６４は、ＢＴＢＴＡ１７８を選択し、そして分岐先アドレスをアドレス・バス１２８上へ駆動する。
【００４７】
比較器１７０がアドレス・バス１２８上へ駆動されたアドレスがＢＴＢ１４４の中のいずれの分岐命令アドレスとも一致しないこと又はアドレス・バス１２８上へ駆動されたアドレスがＢＴＢ１４４の中の分岐命令アドレスと一致することを決定するが、しかし一致されたＢＩＡアドレスに対応するフラグ・ビットが無効であるとき、ＢＴＢミスが、生じており、そして比較器一致信号１９７は、比較器１７０によりディアサートされる。比較器一致信号１９７がディアサートされたとき、ＤＣＬ１６４は、ＢＴＢＴＡ１７８を、アドレス・バス１２８上へ駆動されるべきアドレスとして選択しない。図４に示される例においては、ＢＴＢミスは、第１のクロック・サイクル中に生じており、従って、比較器一致信号１９７は、ディアサートされ、そしてＢＴＢＴＡ１７８は、ＤＣＬ１６４により選択されない。
【００４８】
第２のクロック・サイクル中に、ＤＣＬ１６４は、命令バッファ１０５の中の２つのスロットが２つの命令を格納するため使用可能であるかどうかを決定する。２つのスロットがプリフェッチ・バッファ１０２、この場合、スロット１及びスロット２の中で使用可能であるので、ＤＣＬ１６４は、要求信号１９９をアサートし、スロット１及び２を確保し、そしてＳＩＡ１５８を選択する。順次命令アドレス＄８は、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、その捕捉された命令アドレスを＄８だけ増分し、＄１０の順次命令アドレスを生成する。比較器１７０は、ＢＴＢヒット又はＢＴＢミスがアドレス・バス１２８上へ駆動されたアドレス＄８ともしあればＢＴＢ１４４の中の有効な分岐命令アドレスとの間で生じたかどうかを決定する。この場合、アドレス・バス１２８上へ駆動されたアドレスとＢＴＢ１４４の分岐命令アドレス部分に格納されているいずれのアドレスとの間に一致がないので、ＢＴＢミスが、生じ、そして比較器一致信号１９７が、ディアサートされる。アドレス・バス１２８上へ駆動された順次命令アドレス＄８に対応する命令Ｉ２及びＩ３は、フェッチされ、そして第４のクロック・サイクル中にバス１６８及びデータ・バス１３０を介してプリフェッチ・バッファ１０２に与えられる。
【００４９】
第３のクロック・サイクル中に、第１のクロック・サイクル中アドレス・バス１２８上へ駆動された命令アドレスに対応する命令Ｉ０及びＩ１は、データ・バス１３０上へ駆動されて、第４のクロック・サイクル中に命令レジスタ１１６及びプリフェッチ・バッファ１０２のスロット０に中にロードされる。ＤＣＬ１６４は、プリフェッチ・バッファ１０２の２つのスロット、即ち、スロット３及び４が２つの命令をメモリ１６６から格納するため使用可能であることを決定し、そして要求信号１９９をアサートし、スロット３及び４を確保し、そしてＳＩＡ１５８を選択する。その選択された順次命令アドレス＄１０は、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、その捕捉された命令アドレスを増分して、＄１８の順次命令アドレスを生成する。比較器１７０は、ＢＴＢヒット又はＢＴＢミスがアドレス・バス１２８上へ駆動されたアドレス＄１０ともしあればＢＴＢ１４４に格納されている分岐命令アドレスとの間に生じたかどうかを決定する。この場合、ＢＴＢ１４４のフラグ・ビット部分の全てもフラグ・ビットが無効であるので、ＢＴＢミスが生じ、比較器一致信号１９７がディアサートされ、そして比較器１７０はＢＩＡに対応するＢＴＢＴＡ１７８を選択しない。
【００５０】
第４のクロック・サイクル中に、ＤＣＬ１６４は、プリフェッチ・バッファ１０２の中の２つのスロットが２つの命令をメモリ１６６から格納するため使用可能であるかどうかを決定する。この場合、第１の３クロック・サイクル中の３つの前のフェッチ（１フェッチ当たり２つの命令で）は、プリフェッチ・バッファ１０２の中の６スロットを一杯にし、又は確保してしまうので、２つのスロットは、２つの追加の命令をメモリ１６６から格納するため使用可能でない。従って、要求信号１９９はディアサートされ、追加のスロットが確保されなく、そしてＤＣＬ１６４はＳＩＡ１５８を選択する。ＳＩＡ１５８が選択されるので、順次命令アドレス＄８は、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。しかしながら、要求信号１９９がディアサートされるので、アドレス・バス１２８上へ駆動された命令アドレス＄１８に対応する命令は、２つのスロットがプリフェッチ・バッファ１０２で使用可能でないので第４のクロック・サイクル中に要求されない。比較器１７０は、その要求されないアドレスを受け取り、そしてその要求されないアドレスをＢＴＢ１４４のＢＩＡと比較する。しかしながら、ＤＣＬ１６４は、要求信号１９９がディアサートされたとき比較器１７０により送られたいずれの比較器一致信号１９７も無視する。
【００５１】
第１のクロック・サイクル中に要求された命令Ｉ０は、命令レジスタ１１６の中にロードされ、そしてまた第１のクロック・サイクル中に要求された命令Ｉ１は、サイクル４においてスロット０の中にロードされる。第２のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレス＄８に対応する命令Ｉ２及びＩ３は、バス１６８及びデータ・バス１３０に置かれて、第１のクロック・サイクルの始めにプリフェッチ・バッファ１０２のスロット０及びスロット１の中にロードされる。
【００５２】
ＤＣＬ１６４は、命令Ｉ０の演算コード１７６を命令レジスタ１１６から受け取り、そしてその命令が分岐命令であるかどうかを決定する（２１０）。ＤＣＬ１６４は、分岐命令の演算コードがデータ処理システム１００において用いられることを知っており、そしてその受け取られた演算コード１７６をプロセッサ１８４の演算コードと比較することができる。ＤＣＬ１６４が命令レジスタ１１６の中の命令Ｉ０が分岐命令でないと決定したとき、ＤＣＬ１６４は、スロット０の中の命令Ｉ１の演算コード１９０を用いて、スロット０の中にロードされた命令が分岐命令であるかどうかを決定する（２３５）。ＤＣＬ１６４がスロット０の中にロードされた命令が分岐命令でないと決定したとき、ＤＣＬ１６４は、スロット１に格納されている命令の演算コード１９２を用いて、分岐命令がスロット１の中にあるかどうかを決定する（２４０）。この場合、スロット１は、まだ有効な命令を含んでない。ＤＣＬ１６４が命令バッファ１０５の中に（即ち、命令レジスタ１１６及びプリフェッチ・バッファ１０２のスロット０及び１の中に）格納されている命令のいずれの所定のサブセットの中に分岐命令がないと決定したとき、現在のサイクルは、分岐処理なしで終わり（２６０）、そしてプロセッサ１８４は、第５のクロック・サイクルを続ける。
【００５３】
第５のクロック・サイクル中に、ＤＣＬ１６４は、プリフェッチ・バッファ１０２の中の２つのスロットが２つの命令をメモリ１６６から格納するため使用可能であるかどうかを決定する。２つのスロット、この場合、スロット４及びスロット５が使用可能であるので、要求信号１９９は、アサートされ、そしてスロット４及び５は、確保される。第３のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレス＄１０に対応する命令Ｉ４及びＩ５は、バス１６８及びデータ・バス１３０上に置かれて、第６のクロック・サイクル中にプリフェッチ・バッファ１０２のスロット１及びスロット２の中にロードされる。第４のクロック・サイクル中に命令レジスタ１１６に存在する命令Ｉ０は、スロット０からの命令Ｉ１と置換される。第２のクロック・サイクル中に要求された命令Ｉ２及びＩ３は、スロット０及びスロット１のそれぞれの中にロードされる。命令が実行されるにつれ、後続の命令は、（命令レジスタ１１６に向かって）前の方の次のスロットにシフトされる。メモリからフェッチされた命令は、フェッチを実行するため要求が行われた時点に確保されたスロットの中に必ずしもロードされるわけではない。それは、プリフェッチ・バッファの中の命令が、より前の命令が実行されるにつれＩＲに向けて前進しているからである。代わりに、それらの命令は、それらを進める命令の進行に従って適正なスロットの中にロードされる。
【００５４】
命令レジスタ１１６、スロット０及びスロット１の中にロードされた命令Ｉ１、Ｉ２及びＩ３の演算コード１７６、１９０、１９２は、ＤＣＬ１６４に与えられる。ＤＣＬ１６４は、命令レジスタ１１６に格納された命令Ｉ１の演算コード１７６を受け取り、そしてその命令が分岐命令であるかどうかを決定する（２１０）。ＤＣＬ１６４が命令レジスタ１１６にロードされた命令Ｉ１が分岐命令でないと決定したとき、ＤＣＬ１６４は、演算コード１９０を用いて、スロット０の中の命令Ｉ２が分岐命令であるかどうかを決定する（２３５）。
【００５５】
ＤＣＬ１６４がスロット０の中にロードされた命令が分岐命令であると決定したとき、重複する分岐先フェッチングを阻止するため、ＤＣＬ１６４は、スロット０の中の分岐命令がスロット１からスロット０に与えられたかどうかを決定する（２６５）。ＤＣＬ１６４がスロット０の中の分岐命令がスロット１から命令レジスタ１１６に与えられたと決定したとき、ＤＣＬ１６４は、分岐先がスロット１から要求されたかどうかを決定する（２６７）。ＤＣＬ１６４がスロット０の中の分岐命令の分岐先がスロット１から要求されたことを決定したとき、ＢＴＢ１４４の中の新しいエントリは、スロット０の中の分岐命令のため割り当てられなく、そしてロードＢＴＢ１７４が、アサートされる（２９５）。この場合、分岐命令は、実行のため命令レジスタ１１６に到着する前の十分に早いときに復号され、そのため分岐先が、メモリからフェッチされ、そしてプロセッサ１８４に機能停止させて目標命令が到着するのを待たせること無しに実行のためプロセッサに戻るよう到着することができる。この場合、この分岐のためのＢＴＢエントリを割り当てることにとって利点は無い。それは、分岐命令が命令レジスタにおける実行を完了する前にメモリがスロット１から行われた目標フェッチ要求に応答するのに十分な時間が使用可能であるからである。
【００５６】
スロット０の中の分岐命令が図４の場合のようにスロット１から与えられなかったとき（２６５）、ＤＣＬ１６４は、ＢＴＢヒットを示す比較器一致信号１９７がアサートされたかどうか、即ちＢＴＢヒットがあったかどうかを決定する（２７０）。ＤＣＬ１６４が比較器一致信号１９７がアサートされたことを決定したとき、スロット０の中の分岐命令の目標アドレス及び分岐命令アドレスは、それらが既に存在するので分岐先バッファ１４４に置かれなく、そしてＢＴＢＴＡ１７８が、ＤＣＬ１６４により選択されて、アドレス・バス１２８上に駆動される（２７５）。この場合、分岐命令の目標は、分岐命令がスロット０の中に直接ロードされたのでスロット１からプリフェッチされることができなかった。全ての分岐命令がスロット１を通るわけではない。それは、メモリから到着する命令は、命令レジスタに最も近い次の使用可能な空の位置に置かれるからである。プロセッサがスロット０を空にし、そして分岐命令がメモリから到着する１対の命令のうちの第１の命令である場合、それは、到着しだいスロット０の中に置かれ、そして到着する上記１対のうちの第２の命令が、スロット１の中に置かれるであろう。プロセッサがＩＲ及びスロット０の両方を空にした場合（即ち、実行されるままの状態にある更なる命令が無い。）、戻った１対の命令は、ＩＲ及びスロット０の中に置かれ、そして分岐命令の位置に拘わらず、それは、スロット１の中にロードされないであろう。
【００５７】
ＤＣＬ１６４が比較器一致信号１９７がディアサートされた（ＢＴＢミス）ことを決定したとき（それは、図４におけるケースである。）、ＤＣＬ１６４は、そのＤＣＬ１６４における機能停止信号に関する条件がアサートされたかどうかを決定する（２８０）。ＤＣＬ１６４における機能停止信号に関する条件は、プロセッサ１８４が例えば１つの命令の前の命令への実行依存性に関連した理由のため機能停止してしまったかどうかを指示する。ＤＣＬ１６４がそのＤＣＬ１６４における機能停止信号に関する条件がアサートされたことを決定したとき（それは図４におけるケースである。）、分岐アドレス計算器１０８は、スロット０の中の分岐命令の変位、及びプログラム・カウンタ１１２の出力を用いて、スロット０目標アドレス（Ｓ０ＴＡ）１２４を発生し、そのスロット０目標アドレス（Ｓ０ＴＡ）１２４を用いて、分岐命令の目標アドレスをプリフェッチする。次いで、ＤＣＬ１６４は、ＭＵＸ１２６を用いてＳ０ＴＡ１２４を選択して、分岐先アドレス＄３０をアドレス・バス１２８上へ駆動する（２８５）。次いで、Ｓ０ＴＡ１２４に対応する目標命令は、第７のクロック・サイクル中にバス１６８及びデータ・バスを介して戻される。この場合、ＢＴＢの中のエントリは、それが取られるよう解決される場合分岐のため割り当てられ、それにより分岐命令の後続の遭遇の際に、分岐アドレス計算器１０８がＳ０ＴＡ値を発生するのを待つこと無しに、ＢＴＢヒットが生じ得て、そして分岐先フェッチが１サイクル早くに行われ得る。
【００５８】
ＤＣＬ１６４が機能停止信号に関する条件がアサートされたことを決定したとき、分岐命令の目標アドレス及び分岐命令アドレスが、後続のクロック・サイクル中に分岐先バッファ１４４の中にロードされない（２９０）。それは、ＢＴＢ１４４にロードすることが別の機能停止条件の存在に起因してプロセッサ１８４におけるいずれのサイクル・セービングをもたらさないからである。この機能停止条件は、メモリ１６６がいずれの追加の機能停止サイクルを導入することなしに、分岐先命令をプロセッサ１８４に戻す機会を与え、従って、ＢＴＢエントリが、割り当てられことが必要でない。この条件は、図４に存在しない。次いで、プロセッサ１８４は、次のサイクルに進む。
【００５９】
第６のクロック・サイクル中に、第５のクロック・サイクル中にスロット０の中であった分岐命令Ｉ２が、命令レジスタ１１６の中にロードされ、命令Ｉ３が、スロット１からスロット０の中にロードされ、命令Ｉ４が、データ・バス１３０からスロット１の中にロードされ、そして命令Ｉ５が、データ・バス１３０からスロット２の中にロードされる。ＤＣＬ１６４は、演算コード１７６を用いて、命令レジスタ１１６の中の命令Ｉ２が分岐命令であるかどうかを決定する（２１０）。ＤＣＬ１６４が命令レジスタ１１６の中の命令が分岐命令であることを決定したとき、ＤＣＬ１６４は、命令レジスタ１１６の中の分岐命令がスロット１の中にプリフェッチされたかどうかを決定する（２１５）。ＤＣＬ１６４が命令レジスタ１１６の中の分岐命令がスロット１の中にプリフェッチされなかったが、しかしスロット０の中にプリフェッチされたことを決定したとき（２２０）、ＤＣＬ１６４は、分岐先がスロット０から要求されたかどうかを決定する（２２２）。分岐先がサイクル５においてスロット０から要求されたので、ＤＣＬ１６４は、プロセッサを機能停止するかどうかを決定する（２２６）。図４のケースにおいては、プロセッサ機能停止条件が、存在しない。ひとたびＤＣＬ１６４が分岐命令が取られた分岐命令であることを決定すると、分岐命令アドレス及び命令レジスタ１１６の中の分岐命令の分岐先アドレスは、ラインＰＣ１１０及びＩＲＴＡ１２０のそれぞれを介してＢＴＢ１４４の中の使用可能なスロットの中にロードされ、そしてロードされたエントリと関連したＢＴＢ１４４の中のフラグ・ビットが、アサートされる（３００）。制御回路１７２は、ライン１７３を用いて、ＢＴＢ１４４の中のどのスロットが分岐命令アドレス及び分岐先アドレスを格納するため用いられるかを決定する。ＢＴＢ１４４は、ここで、命令Ｉ２に対応する分岐命令アドレス及び命令Ｔ０に対応する分岐先アドレスを含む。
【００６０】
第７のクロック・サイクル中に、分岐先アドレス＄３０に対応し且つ第５のクロック・サイクル中に要求された命令Ｔ０及びＴ１は、データ・バス１３０上に戻される。第６のクロック・サイクル中に、命令Ｉ２が取られた分岐命令として復号されたので、分岐命令が復号された後で且つ分岐先命令が命令バッファ１０５の中にロードされる前に命令レジスタ１１６、スロット０、スロット１等の中にロードされたいずれの命令は、重要でないと考えられ、そして第７のクロック・サイクル中にＤＣＬ１６４により復号されず、それは、プロセッサ１８４における機能停止条件、及びＩ３、Ｉ４及びＩ５が、フラッシュ・アウト（ｆｌｕｓｈ  ｏｕｔ）されることをもたらす。
【００６１】
第８のクロック・サイクル中に、メモリ１６６の中の分岐先アドレスに対応する命令Ｔ０及びＴ１は、命令レジスタ１１６、及びプリフェッチ・バッファ１０２のスロット０のそれぞれにロードされる。同様に、第９のクロック・サイクル中に、スロット０からの命令Ｔ１は、ＩＲ１１６等の中にロードされ、そしてＤＣＬ１６４は、前のクロック・サイクルに関して前述した動作を実行する。
【００６２】
図１に示される本発明の一実施形態においては、図５を参照すると、追加の命令は、メモリ１６６にロードされ済みである。ＢＴＢ１４４は、ＢＩＡスロットにロードされた分岐先アドレス＄８、対応のＢＴＡスロットにロードされた分岐先アドレス＄３０、及び図４の例に示されるようにアサートされた関連のフラグ・ビットを有する。第１のクロック・サイクル中（図５参照）に、ＤＣＬ１６４は、２つのスロットが命令バッファ１０５において使用可能であるかどうかを決定する。ＤＣＬ１６４が、２つのスロット、この場合、命令レジスタ１１６及びスロット０が命令バッファ１０５において使用可能であると決定したとき、要求信号１９９が、アサートされ、そして命令レジスタ１１６及びスロット０が、確保される。設定された現在のクロック・サイクル中にフェッチされている初期命令に対応する命令アドレスは、プログラム・カウンタ１１２によりＩＩＡ１２３を介してＭＵＸ１２６に与えられる。ＤＣＬ１６４は、ＭＵＸ１２６を用いて、初期命令アドレスを選択し、次いでその初期命令アドレスは、アドレス・バス１２８上へ駆動されて、メモリ１６６の中のアドレス＄０及びアドレス＄４に配置された命令Ｉ０及びＩ１を要求する。
【００６３】
アドレス・バス１２８上へ駆動された命令アドレス＄０は、ラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、その捕捉された命令アドレスを＄８だけ増分する。その増分されたアドレス＄８は、加算器１５６により順次命令アドレス１５８として出力される。
【００６４】
比較器１７０は、アドレス・バス１２８上へ駆動されたアドレスを受け取って、そしてそのアドレスをＢＴＢ１４４に格納されている分岐命令アドレスと比較する。図５に示される例に関して、比較器１７０は、サイクル１においてアドレス・バス１２８上へ駆動された命令アドレスがＢＴＢ１４４の中の分岐命令アドレスと一致しないことを決定し、そして比較器一致信号１９７をディアサートする。比較器一致信号１９７がディアサートされるので、ＤＣＬ１６４は、ＢＴＢＴＡ１７８を、アドレス・バス１２８上へ駆動されるべき命令アドレスとして選択しない。
【００６５】
第２のクロック・サイクル中に、ＤＣＬ１６４は、命令バッファ１０５の２つのスロットが２つの命令を格納するため使用可能であるかどうかを決定する。２つのスロットが、この場合、スロット１及びスロット２が、プリフェッチ・バッファ１０２において使用可能であるので、ＤＣＬ１６４は、要求信号１９９をアサートし、スロット１及び２を確保し、そしてＳＩＡ１５８を選択する。順次命令アドレス＄８が、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、その捕捉された命令アドレスを＄８だけ増分し、＄１０の順次命令アドレスを生成する。
【００６６】
比較器１７０は、アドレス・バス１２８上へ駆動されたアドレスを、ＢＴＢ１４４の中のＢＩＡスロットにある分岐命令アドレス＄８と比較し、そしてＢＴＢヒットが生じたことを決定する。ＢＴＢヒットに応答して、比較器１７０は、比較器一致信号１９７をアサートする。次いで、比較器１７０は、分岐命令アドレス、この場合＄３０を選択する。な、この分岐命令アドレス＄３０は、信号１８０及びＭＵＸ１５４を用いてＢＴＢヒットを発生した分岐命令アドレスに対応する。この選択された分岐命令アドレスは、分岐先分岐バッファ目標アドレス（ＢＴＢＴＡ）１７８を用いてＭＵＸ１２６に与えられる。
【００６７】
第３のクロック・サイクル中に、第４のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレスに対応する命令Ｉ０及びＩ１は、データ・バス１３０上へ駆動されて、第４のクロック・サイクル中に命令レジスタ１１６及びプリフェッチ・バッファ１０２のスロット０の中にロードされる。ＤＣＬ１６４は、プリフェッチ・バッファ１０２の２つのスロット、即ちスロット３及び４が２つの命令をメモリ１６６から格納するため使用可能であることを決定し、要求信号１９９をアサートし、そしてスロット３及び４を確保する。比較器一致信号１９７がアサートされたので、ＤＣＬ１６４は、ＢＴＢＴＡ１７８を選択し、そして分岐命令アドレス＄３０をアドレス・バス１２８上へ駆動する。
【００６８】
アドレス・バス１２８上へ駆動される上記の選択された分岐先バッファ目標アドレス＄３０は、ラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、遅延されたその命令アドレスを＄８だけ増分し、＄３８の順次命令アドレスを生成する。比較器１７０は、アドレス・バス１２８上へ駆動されたアドレス＄３０とＢＴＢ１４４に格納された分岐命令アドレスとを比較し、そしてＢＴＢミスが生じたことを決定する。ＢＴＢミスに応答して、比較器１７０は、比較器一致信号１９７をディアサートし、そしてＢＴＢＴＡ１７８を選択しない。
【００６９】
第４のクロック・サイクル中に、ＤＣＬ１６４は、プリフェッチ・バッファ１０２の中の２つのスロットが２つの命令をメモリ１６６から格納するため使用可能であるかどうかを決定する。この場合、１つのスロットのみがプリフェッチ・バッファ１０２において使用可能であるので、要求信号１９９は、ディアサートされ、追加のスロットが確保されなくて、そしてＤＣＬ１６４は、ＳＩＡ１５８を選択する。しかしながら、メモリ１６６におけるアドレス＄３４の後の追加の命令が、図５の例において示されていないので、アドレス・バス１２８上へ駆動された命令アドレス及びクロック・サイクル４の後の対応の命令について実行される動作は、更に詳細には説明しない。
【００７０】
第５のクロック・サイクル中に、第３のクロック・サイクル中にアドレス・バス１２８上へ駆動された分岐命令アドレス＄３０に対応する命令Ｔ０及びＴ１は、データ・バス１３０上へ駆動されて、第６のクロック・サイクル中にプリフェッチ・バッファ１０２のスロット０及びスロット１の中にロードされる。第４のクロック・サイクル中にスロット０にあった命令Ｉ１は、命令レジスタ１１６の中にロードされる。第４のクロック・サイクル中にデータ・バス１３０上にあった命令Ｉ２及びＩ３は、スロット０及びスロット１のそれぞれの中にロードされる。第６のクロック・サイクル中に、分岐命令Ｉ２は、実行のため命令レジスタ１１６の中にロードされる。第７のクロック・サイクル中に、新しい目標ストリームが確立されてしまい、そしてプロセッサ１８４の機能停止無しでＴ０の実行を始める。次いで、ＤＣＬ１６４は、前のクロック・サイクルにおける上記で説明した図４及び図５の動作を実行する。
【００７１】
本発明の一実施形態においては、図４に示されるコードのシーケンス及びタイミング図は、図４にリストされたコードのセグメントを含むループの第１回の繰り返しとして見ることができる。図５は、図４に示される同じループの全ての後続の繰り返しとして見ることができ、そこにおいては、分岐命令アドレス＄８及び分岐先アドレス＄３０のためのＢＴＢエントリが、図４に示されるループの第１回繰り返し中にロードされた。図４においてＤＣＬ１６４を介して、先取り分岐スキームを用いることが依然１サイクルを要することを検出することにより、ＢＴＢエントリを選択的に割り当てることにより、機能停止サイクルが、ループの全ての後続の繰り返しで回復されることができる。
【００７２】
図１に示される本発明の一実施形態において、図６を参照すると、第１のクロック・サイクル中に、ＤＣＬ１６４は、２つのスロットが命令バッファ１０５において使用可能であるかどうかを決定する。ＤＣＬ１６４が２つのスロットが命令バッファ１０５、この場合命令レジスタ１１６及びスロット０において使用可能であることを決定したとき、要求信号１９９が、アサートされ、そして２つのスロット、即ち命令レジスタ１１６及びスロット０が、確保される。要求信号１９９が、ＤＣＬ１６４からメモリ１６６に与えられ、そしてその要求信号１９９を用いて、命令がメモリ１６６からフェッチされることを要求する。フェッチされている初期命令に対応する命令アドレスが、プログラム・カウンタ１１２によりＩＩＡ１２３を介してＭＵＸ１２６に与えられる。ＤＣＬ１６４は、ＭＵＸ１２６を用いて、初期命令アドレス１２３を選択し、次いで、その初期命令アドレス１２３は、アドレス・バス１２８上へ駆動されて、メモリ１６６の中のアドレス＄０及びアドレス＄４に位置された命令Ｉ０及びＩ１を要求する。
【００７３】
アドレス・バス１２８上へ駆動された命令アドレス＄０は、ラッチ１６０、比較器１７０及びメモリ１６６に与えられる。アドレス・バス１２８及び加算器１５６に結合されているラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉する。次いで、加算器１５６は、現在の命令アドレスをダブルワード・フェッチ・サイズ＄８だけ増分する。前述したように、ダブルワード・フェッチ・サイズは、本発明の異なる実施形態において変わり得て、そしてフェッチされている各命令のサイズに依存する。
【００７４】
比較器１７０は、アドレス・バス１２８上へ駆動された命令アドレスを受け取って、そしてその命令アドレスを、あるならば分岐先バッファ１４４に格納されている１つ又は複数の命令アドレスと比較する。図６に示される例においては、ＢＴＢミスが、第１のクロック・サイクル中に生じてしまい、従って、比較器一致信号１９７が、ディアサートされ、そしてＢＴＢＴＡ１７８は、ＤＣＬ１６４により選択されない。
【００７５】
第２のクロック・サイクル中に、ＤＣＬ１６４は、命令バッファ１０５の２つのスロットが２つの命令を格納するため使用可能であるかどうかを決定する。２つのスロットがプリフェッチ・バッファ１０２、この場合スロット１及びスロット２において使用可能であるので、ＤＣＬ１６４は、要求信号１９９をアサートし、スロット１及び２を確保し、そしてＳＩＡ１５８を選択する。順次命令アドレス＄８が、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、その捕捉された命令アドレスを＄８だけ増分し、＄１０の順次命令アドレスを生成する。比較器１７０は、ＢＴＢヒットか又はＢＴＢミスかがアドレス・バス１２８上へ駆動された命令アドレスとあるならばＢＴＢ１４４の中の有効な分岐先アドレスとの間で生じたかどうかを決定する。この場合、アドレス・バス１２８上へ駆動されたアドレスとＢＴＢ１４４の分岐命令アドレス部分に格納されているいずれのアドレスとの間に一致が存在しないので、ＢＴＢミスが、生じており、そして比較器一致信号１９７は、ディアサートされる。アドレス・バス１２８上へ駆動された順次命令アドレス＄８に対応する命令Ｉ２及びＩ３は、フェッチされ、そして第４のクロック・サイクル中にバス１６８及びデータ・バス１３０を介してプリフェッチ・バッファ１０２に与えられる。
【００７６】
第３のクロック・サイクル中に、第１のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレスに対応する命令Ｉ０及びＩ１は、データ・バス１３０上へ駆動されて、第４のクロック・サイクル中に命令レジスタ１１６及びプリフェッチ・バッファ１０２のスロット０の中にロードされる。ＤＣＬ１６４は、プリフェッチ・バッファ１０２の２つのスロット、即ちスロット３及び４が２つの命令をメモリ１６６から格納するため使用可能であるかどうかを決定し、そして要求信号１９９をアサートし、スロット３及び４を確保し、そしてＳＩＡ１５８を選択する。その選択された順次命令アドレス＄１０は、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、その捕捉された命令アドレスを増分し、＄１８の順次命令アドレスを生成する。比較器１７０は、ＢＴＢヒットか又はＢＴＢミスがアドレス・バス１２８上へ駆動された命令アドレスとあるならばＢＴＢ１４４に格納されている分岐命令アドレスとの間で生じたかどうかを決定する。図６の例においては、ＢＴＢミスが生じており、比較器一致信号１９７がディアサートされ、そして比較器１７０は、ＢＩＡに対応するＢＴＢＴＡ１７８を選択しない。
【００７７】
第４のクロック・サイクル中に、ＤＣＬ１６４は、プリフェッチ・バッファ１０２の中の２つのスロットが２つの命令をメモリ１６６から格納するため使用可能であるかどうかを決定する。この場合、第１の３クロック・サイクル中の３つの前のフェッチ（１フェッチ当たり２命令で）がプリフェッチ・バッファ１０２の中の６つのスロットを一杯にし、又は確保してしまうので、２つのスロットは、２つの追加の命令をメモリ１６６から格納するため使用可能でない。従って、要求信号１９９が、ディアサートされ、追加のスロットが、確保されなく、そしてＤＣＬ１６４は、ＳＩＡ１５８を選択する。ＳＩＡ１５８が選択されるので、順次命令アドレス＄１８は、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。しかしながら、要求信号１９９がディアサートされるので、アドレス・バス１２８上へ駆動された命令アドレス＄１８に対応する命令は、２つのスロットがプリフェッチ・バッファ１０２において使用可能でないので、第４のクロック・サイクル中に要求されない。比較器１７０は、要求されかったアドレスを受け取って、そしてその要求されなかったアドレスをＢＴＢ１４４のＢＩＡと比較する。しかしながら、ＤＣＬ１６４は、要求信号１９９がディアサートされたとき比較器１７０により送られたいずれの比較器一致信号１９７も無視する。
【００７８】
サイクル４において、第１のクロック・サイクル中に要求された命令Ｉ０は、命令レジスタ１１６の中にロードされ、そしてまた第１のクロック・サイクル中に要求された命令Ｉ１は、スロット０の中にロードされる。第２のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレス＄８に対応する命令Ｉ２及びＩ３は、バス１６８及びデータ・バス１３０上に置かれて、第５のクロック・サイクルの始めにプリフェッチ・バッファ１０２のスロット０及びスロット１の中にロードされる。
【００７９】
ＤＣＬ１６４は、命令Ｉ０の演算コード１７６を命令レジスタ１１６から受け取って、そしてその命令が分岐命令であるかどうかを決定する（２１０）。ＤＣＬ１６４は、データ処理システム１００で用いられる分岐命令の演算コードを知っており、そしてその受け取られた演算コード１７６をプロセッサ１８４の演算コードと比較することができる。ＤＣＬ１６４が命令レジスタ１１６の中の命令Ｉ１が分岐命令でないことを決定したとき、ＤＣＬ１６４は、スロット０の中の命令Ｉ１の演算コード１９０を用いて、スロット０の中にロードされた命令が分岐命令であるかどうかを決定する（２３５）。ＤＣＬ１６４がスロット０の中にロードされた命令が分岐命令でないことを決定したとき、ＤＣＬ１６４は、スロット１の中に格納された命令の演算コード１９２を用いて、スロット１の中に分岐命令があるかどうかを決定する（２４０）。この場合、スロット１は、まだ有効な命令を含まない。ＤＣＬ１６４が命令バッファ１０５に（即ち、命令レジスタ１１６の中及びプリフェッチ・バッファ１０２のスロット０及び１の中に）格納されている命令のいずれの所定のサブセットの中に分岐命令がないことを決定したとき、現在のサイクルは、分岐処理無しで終わり（２６０）、そしてプロセッサ１８４は、第５のクロック・サイクルに進む。
【００８０】
図６に示される例においては、命令Ｉ０は、２クロック・サイクルの実行を要求するマルチサイクル命令であり、そして命令Ｉ１は、命令Ｉ０の結果へのデータ依存性を有する。このデータ依存性に起因して、プロセッサ１８４の機能停止が起きて、命令Ｉ１の実行の前に命令Ｉ０の完了を可能にする。命令Ｉ１は、こうして、サイクル５を越えた追加のサイクルの間に命令レジスタ１１６に保持される。
【００８１】
第５のクロック・サイクルの始めに、第２のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレス＄８に対応する命令Ｉ２及びＩ３は、バス１６８及びデータ・バス１３０から捕捉され、そしてプリフェッチ・バッファ１０２のスロット１及びスロット２の中にロードされる。第３のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレス＄１０に対応する命令Ｉ４及びＩ５は、バス１６８及びデータ・バス１３０上に置かれて、第６のクロック・サイクル中にプリフェッチ・バッファ１０２のスロット２及びスロット３の中にロードされる。第４のクロック・サイクル中に命令レジスタ１１６に存在する命令Ｉ０は、スロット０からの命令Ｉ１と置換される。第２のクロック・サイクル中に要求された命令Ｉ２及びＩ３は、スロット０及びスロット１のそれぞれにロードされる。命令Ｉ０は、この場合１つの追加サイクルの実行を要求し、そして命令Ｉ０とＩ１との間のデータ依存性に起因して、サイクル５は、図６において脇にアスタリスクを付したＩ１により示される、命令の復号のための機能停止サイクルとなる。
【００８２】
命令レジスタ１１６、スロット０及びスロット１の中にロードされた命令Ｉ１、Ｉ２及びＩ３の演算コード１７６、１９０、１９２は、ＤＣＬ１６４に与えられる。ＤＣＬ１６４は、命令レジスタ１１６に格納されている命令Ｉ１の演算コード１７６を受け取り、そしてその命令が分岐命令であるかどうかを決定する（２１０）。ＤＣＬ１６４が命令レジスタ１１６に配置された命令Ｉ１が分岐命令でないことを決定したとき、ＤＣＬ１６４は、演算コード１９０を用いて、スロット０の中の命令Ｉ２が分岐命令かどうかを決定する（２３５）。
【００８３】
ＤＣＬ１６４がスロット０の中にロードされた命令が分岐命令であると決定したとき、重複の分岐先フェッチイングを回避するため、ＤＣＬ１６４は、スロット０の中の分岐命令がスロット１からスロット０に与えられたかどうかを決定する（２６５）。ＤＣＬ１６４がスロット０の中の分岐命令がスロット１から命令レジスタ１１６に与えられなかったことを決定したとき、ＤＣＬ１６４は、Ｉ２に関してＢＴＢ１４４ヒットがあったかどうかを決定する（２７０）。
【００８４】
ＤＣＬ１６４が比較器一致信号１９７がディアサートされた（ＢＴＢミス）ことを決定したとき（それは、図６におけるケースである。）、ＤＣＬ１６４は、ＤＣＬ１６４における機能停止信号に関する条件がアサートされたかどうかを決定する（２８０）。ＤＣＬ１６４における機能停止信号に関する条件は、プロセッサ１８４が例えば１つの命令の前の命令に対する依存性と関連した理由のため機能停止したかどうかを指示する。この場合、マルチサイクル命令Ｉ０と命令Ｉ１との間のデータ依存性に起因したプロセッサ１８４の機能停止が存在する。ＤＣＬ１６４がＤＣＬ１６４における機能停止信号に関する条件がアサートされたことを決定したとき（それは、図６におけるケースである。）、分岐アドレス計算器１０８は、スロット０の中の分岐命令の変位及びプログラム・カウンタ１１２の出力を用いて、スロット０目標アドレス（Ｓ０ＴＡ）１２４を発生し、次いで、そのスロット０目標アドレス（Ｓ０ＴＡ）１２４を用いて、分岐命令の目標アドレスをプリフェッチする。次いで、ＤＣＬ１６４は、ＭＵＸ１２６を用いてＳ０ＴＡ１２４を選択して、分岐先アドレス＄３０をアドレス・バス１２８上へ駆動する。次いで、Ｓ０ＴＡ１２４に対応する目標命令は、第７のクロック・サイクル中にバス１６８及びデータ・バスを介して戻される。ＤＣＬ１６４が機能停止信号に関する条件がアサートされたことを決定したとき、分岐命令の目標アドレス及び分岐命令アドレスは、後続のクロック・サイクル中に分岐先バッファ１４４の中にロードされない（２９０）。それは、ＢＴＢ１４４にロードすることが別の機能停止条件の存在に起因してプロセッサ１８４におけるいずれのサイクル・セービングをもたらさないからである。
【００８５】
この場合、分岐命令は、実行のため命令レジスタ１１６に到着する前の十分早くに復号され、そのため分岐先は、追加のプロセッサ１８４の機能停止を引き起こして目標命令が到着するのを待つことなしに、メモリからフェッチされ、そして実行のためプロセッサに戻るよう到着することができる。プロセッサ１８４に存在する機能停止条件に起因して、分岐先フェッチが、追加の機能停止サイクルを招くことなしに、Ｓ０ＴＡ１２４を用いてスロット０からなされ得る。この場合、この分岐のためＢＴＢエントリを割り当てることにとって利点はない。それは、分岐命令が命令レジスタにおける実行を完了する前にスロット０からなされた目標フェッチ要求に応答するのに十分な時間がメモリに対して使用可能であるからである。この機能停止条件は、メモリ１６６がいずれの追加の機能停止サイクルを導入することなしに分岐先命令をプロセッサ１８４に戻す機会を与え、従って、ＢＴＢエントリが割り当てられることが必要でない。次いで、プロセッサ１８４は、次のサイクルに進む。
【００８６】
第６のクロック・サイクル中に、第５のクロック・サイクル中にスロット０の中にあった分岐命令Ｉ２は、スロット０の中に留まり、命令Ｉ３は、スロット１の中に留まり、命令Ｉ４は、データ・バス１３０からスロット２の中にロードされ、そして命令Ｉ５は、データ・バス１３０からスロット３の中にロードされる。
【００８７】
第７のクロック・サイクル中に、第５及び第６のクロック・サイクル中にスロット０の中にあった分岐命令Ｉ２は、命令レジスタ１１６の中にロードされ、命令Ｉ３は、スロット１からスロット０の中にロードされ、命令Ｉ４は、スロット２からスロット１の中にロードされ、そして命令Ｉ５は、スロット４からスロット３の中にロードされる。目標命令Ｔ０及びＴ１は、メモリ１６６から戻され、そしてクロック８においてデータ・バス１３０上に置かれて、命令バッファ１０５の中にロードされる。ＤＣＬ１６４は、演算コード１７６を用いて、命令レジスタ１１６の中の命令Ｉ２が分岐命令であるかどうかを決定する（２１０）。ＤＣＬ１６４が命令レジスタ１１６の中の命令が分岐命令であることを決定したとき、ＤＣＬ１６４は、命令レジスタ１１６の中の分岐命令がスロット１の中にプリフェッチされたかどうかを決定する（２１５）。ＤＣＬ１６４が命令レジスタ１１６の中の分岐命令がスロット１の中にプリフェッチされなかったが、しかしスロット０の中にプリフェッチされたことを決定したとき（２２０）、ＤＣＬ１６４は、分岐先がスロット０から要求されたかどうかを決定する（２２２）。分岐先がサイクル５においてスロット０から要求されたので、ＤＣＬ１６４は、プロセッサ１８４がデータ依存性のような別の条件のため機能停止されたかどうかを決定する（２２６）。図６のケースにおいては、プロセッサの機能停止条件が、存在した。ひとたびＤＣＬ１６４がこのことを決定すると、ＢＴＢ１４４の更新は、実行されず、そしてプロセッサ１８４は、目標命令が到着するのを待つ（３００）。
【００８８】
第７のクロック・サイクル中に、第５のクロック・サイクル中に要求された分岐先アドレス＄３０に対応する命令Ｔ０及びＴ１は、データ・バス１３０上に戻される。第７のクロック・サイクル中に命令Ｉ２が取られた分岐命令として復号されるので、分岐命令に続き且つ命令バッファ１０５の中にロードされたいずれの順次命令は、重要でないと考えられ、そして第７のクロック・サイクル中ＤＣＬ１６４により復号されなく、その結果Ｉ３、Ｉ４及びＩ５が第８のクロック・サイクルにおいてフラッシュ・アウトされることをもたらす。
【００８９】
第８のクロック・サイクル中に、メモリ１６６の中の分岐先アドレスに対応する命令Ｔ０及びＴ１は、命令レジスタ１１６及びプリフェッチ・バッファ１０２のスロット０のそれぞれの中にロードされる。同様に、第９のクロック・サイクル中に、スロット０からの命令Ｔ１は、ＩＲ１１６等にロードされ、そしてＤＣＬ１６４は、前のクロック・サイクルに関して前述した動作を実行する。
【００９０】
図１に示される本発明の一実施形態において、図７を参照すると、第１のクロック・サイクル中に、ＤＣＬ１６４は、２つのスロットが命令バッファ１０５において使用可能であるかどうかを決定する。ＤＣＬ１６４が２つのスロット、この場合命令レジスタ１１６及びスロット０において使用可能であることを決定したとき、要求信号１９９が、アサートされ、そして２つのスロット、即ち命令レジスタ１１６及びスロット０が、確保される。要求信号１９９は、ＤＣＬ１６４からメモリ１６６に与えられ、そしてその要求信号１９９を用いて、命令がメモリ１６６からフェッチされることを要求する。フェッチされている初期命令に対応する命令アドレスは、プログラム・カウンタ１１２によりＩＩＡ１２３を介してＭＵＸ１２６に与えられる。ＤＣＬ１６４は、ＭＵＸ１２６を用いて、初期命令アドレス１２３を選択し、次いでその初期命令アドレス１２３は、アドレス・バス１２８上へ駆動されて、メモリ１６６の中のアドレス＄０及びアドレス＄４に位置された命令Ｉ０及びＩ１を要求する。
【００９１】
アドレス・バス１２８上へ駆動された命令アドレス＄０は、ラッチ１６０、比較器１７０及びメモリ１６６に与えられる。アドレス・バス１２８及び加算器１５６に結合されているラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉する。次いで、加算器１５６は、現在の命令アドレスをダブルワード・フェッチ・サイズ＄８だけ増分する。前述したように、ダブルワード・フェッチ・サイズは、本発明の異なる実施形態において変わり得て、そしてフェッチされている各命令のサイズに依存する。ラッチ１６０による捕捉、及び加算器１５６によるアドレス・バス１２８上のアドレスの増分は、アドレス・バス１２８上へ駆動されたアドレスが存在し且つ要求がメモリに対してなされる場合全てのクロック・サイクル中で生じる。増分されたアドレス、この場合＄８は、加算器１５６により順次命令アドレスＳＩＡ１５８として出力される。
【００９２】
比較器１７０は、アドレス・バス１２８上へ駆動されたアドレスを受け取り、そしてそのアドレスを、あるならば分岐先バッファ１４４に格納されている１又は複数の分岐命令アドレスと比較する。
【００９３】
比較器１７０が、アドレス・バス１２８上へ駆動されたアドレスがＢＴＢ１４４の中のいずれの分岐命令アドレスに一致しないことを、又はアドレス・バス１２８上へ駆動されたアドレスがＢＴＢ１４４の中の分岐命令アドレスに一致するがしかし一致したＢＩＡアドレスに対応するフラグ・ビットが無効であることを決定したとき、ＢＴＢミスが、生じており、そして比較器一致信号１９７が、比較器１７０によりディアサートされる。比較器一致信号１９７がディアサートされたとき、ＤＣＬ１６４は、ＢＴＢＴＡ１７８をアドレス・バス１２８上へ駆動されるべきアドレスとして選択しない。図７に示される例においては、ＢＴＢミスは、第１のクロック・サイクル中に生じており、従って、比較器一致信号１９７は、ディアサートされ、そしてＢＴＢＴＡ１７８は、ＤＣＬ１６４により選択されない。
【００９４】
第２のクロック・サイクル中に、ＤＣＬ１６４は、命令バッファ１０５の２つのスロットが２つの命令を格納するため使用可能であるかどうかを決定する。２つのスロット、この場合スロット１及びスロット２がプリフェッチ・バッファ１０２において使用可能であるので、ＤＣＬ１６４は、要求信号１９９をアサートし、スロット１及び２を確保し、そしてＳＩＡ１５８を選択する。順次命令アドレス＄８が、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、その捕捉された命令アドレスを＄８だけ増分し、＄１０の順次命令アドレスを生成する。比較器１７０は、ＢＴＢヒットか又はＢＴＢミスがアドレス・バス１２８上へ駆動されたアドレス＄８とあるならばＢＴＢ１４４の中の有効な分岐命令アドレスとの間で生じたかどうかを決定する。この場合、アドレス・バス１２８上へ駆動されたアドレスとＢＴＢ１４４の分岐命令アドレス部分に格納されたいずれのアドレスとの間に一致が存在しないので、ＢＴＢミスが、生じており、そして比較器一致信号１９７が、ディアサートされる。アドレス・バス１２８上へ駆動された順次命令アドレス＄８に対応する命令Ｉ２及びＩ３が、第４のクロック・サイクル中に、フェッチされ、そしてバス１６８及びデータ・バス１３０を介してプリフェッチ・バッファ１０２に与えられる。
【００９５】
第３のクロック・サイクル中に、第１のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレスに対応する命令Ｉ０及びＩ１は、データ・バス１３０上へ駆動されて、第４のクロック・サイクル中に命令レジスタ１１６及びプリフェッチ・バッファ１０２のスロット０の中にロードされる。ＤＣＬ１６４は、２つのスロット、即ち、プリフェッチ・バッファ１０２のスロット３及び４が２つの命令をメモリ１６６から格納するため使用可能であることを決定し、そして要求信号１９９をアサートし、スロット３及び４を確保し、そしてＳＩＡ１５８を選択する。その選択された順次命令アドレス＄１０は、アドレス・バス１２８上へ駆動され、そしてラッチ１６０、比較器１７０及びメモリ１６６に与えられる。ラッチ１６０は、アドレス・バス１２８上へ駆動された命令アドレスを捕捉し、そして加算器１５６は、その捕捉された命令アドレスを増分し、＄１８の順次命令アドレスを生成する。比較器１７０は、ＢＴＢヒットか又はＢＴＢミスかがアドレス・バス１２８上へ駆動されたアドレス＄１０と、あるならばＢＴＢ１４４に格納された分岐命令アドレスとの間に発生したかどうかを決定する。図７に示されるケースにおいて、ＢＴＢミスが生じ、比較器一致信号１９７が、ディアサートされ、そして比較器１７０が、ＢＩＡに対応するＢＴＢＴＡ１７８を選択しない。
【００９６】
第４のクロック・サイクル中に、ＤＣＬ１６４は、プリフェッチ・バッファ１０２の中の２つのスロットが２つの命令をメモリ１６６から格納するため使用可能であるかどうかを決定する。この場合、第１の３クロック・サイクル中の３つの前のフェッチ（１フェッチ当たり２つの命令で）は、プリフェッチ・バッファ１０２の中の６スロットを一杯にし、又は確保してしまうので、２つのスロットは、２つの追加の命令をメモリ１６６から格納するため使用可能でない。従って、要求信号１９９は、ディアサートされ、そして追加のスロットが確保されない。ＤＣＬ１６４は、要求信号１９９がディアサートされたとき比較器１７０により送られたいずれの比較器一致信号１９７も無視する。
【００９７】
サイクル４において、第１のクロック・サイクル中に要求された命令Ｉ０は、命令レジスタ１１６の中にロードされ、そしてまた第１のクロック・サイクル中に要求された命令Ｉ１は、スロット０の中にロードされる。第２のクロック・サイクル中にアドレス・バス１２８上へ駆動された命令アドレス＄８に対応する命令Ｉ２及びＩ３は、バス１６８及びデータ・バス１３０上に置かれて、第５のクロック・サイクルの始めにプリフェッチ・バッファ１０２のスロット０及びスロット１の中にロードされる。
【００９８】
第５のクロック・サイクル中に、ＤＣＬ１６４は、命令Ｉ１の演算コード１７６を命令レジスタ１１６から受け取り、そしてその命令が分岐命令であるかどうかを決定する（２１０）。ＤＣＬ１６４が命令レジスタ１１６の中の命令Ｉ１が分岐命令でないことを決定したとき、ＤＣＬ１６４は、スロット０の中の命令の演算コード１９０を用いて、スロット０の中にロードされた命令が分岐命令であるかどうかを決定する（２３５）。ＤＣＬ１６４がスロット０の中にロードされた命令が分岐命令でないことを決定したとき、ＤＣＬ１６４は、スロット１に格納された命令の演算コード１９２を用いて、スロット１の中に分岐命令があるかどうかを決定する（２４０）。この場合、スロット１は、分岐命令を含まない。ＤＣＬ１６４がプリフェッチ・バッファ１０２のスロット１の中に分岐命令があることを決定したとき、ＢＴＢ１４４における新しいエントリは、スロット１の中の分岐命令に関して割り当てられない（２５０）。この場合、分岐命令は、実行のため命令レジスタ１１６に到着する前の十分早くに復号され、そのため分岐先は、プロセッサ１８４の機能停止を引き起こして目標命令が到着するのを待つことなしに、メモリからフェッチされ、そして実行のためプロセッサに戻るよう到着することができる。この場合、この分岐のためＢＴＢエントリを割り当てることにとって利点はない。それは、分岐命令が命令レジスタにおける実行を完了する前にスロット１からなされた目標フェッチ要求にメモリが応答するのに十分な時間が使用可能であるからである。
【００９９】
分岐アドレス計算器１０８は、スロット１の中の分岐命令の変位及びプログラム・カウンタ１１２の出力を用いて、スロット１の目標アドレス（Ｓ１ＴＡ）１２２を発生し、そのスロット１の目標アドレス（Ｓ１ＴＡ）１２２を用いて、分岐命令の目標アドレスをプリフェッチする。ＤＣＬ１６４は、ＭＵＸ１２６を用いて、ＳＩＴＡ１２２を選択して、クロック・サイクル６において分岐命令アドレス＄３０をアドレス・バス１２８上へ駆動する。次いで、ＳＩＴＡ１２２に対応する目標命令は、第８のクロック・サイクル中にバス１６８及びデータ・バスを介して戻される。
【０１００】
第６のクロック・サイクル中に、第５のクロック・サイクル中にスロット０の中にあった命令Ｉ２は、命令レジスタ１１６の中にロードされ、分岐命令Ｉ３は、スロット１からスロット０の中にロードされ、命令Ｉ４は、データ・バス１３０からスロット１の中にロードされ、そして命令Ｉ５は、データ・バス１３０からスロット２の中にロードされる。
【０１０１】
第７のクロック・サイクル中に、分岐命令Ｉ３は、ＩＲ１１６の中に上昇移動し、そして後続の命令は、プリフェッチ・バッファ１０２の中に上昇移動する。
ＤＣＬ１６４は、演算コード１７６を用いて、命令レジスタ１１６の中の命令Ｉ３が分岐命令であるかどうかを決定する（２１０）。ＤＣＬ１６４が命令レジスタ１１６の中の命令が分岐命令であることを決定したとき、ＤＣＬ１６４は、命令レジスタ１１６の中の分岐命令がスロット１の中にプリフェッチされたかどうかを決定する（２１５）。ＤＣＬ１６４が命令レジスタ１１６の中の分岐命令がスロット１の中にプリフェッチされたことを決定したとき、ＤＣＬ１６４は、分岐先がスロット１から要求されたかどうかを決定する（２６７）。分岐先がサイクル６においてスロット１から要求されたので、ＤＣＬ１６４は、ＢＴＢエントリがロードされるべきでないと判断し、そして目標命令が到着するのを待つ（２９５）。
【０１０２】
第７のクロック・サイクル中に、命令Ｉ３が、取られた分岐命令として復号されるので、分岐命令が復号された後でしかし分岐先命令が命令バッファ１０５の中にロードされる前に命令レジスタ１１６、スロット０、スロット１等の中にロードされたいずれの命令は、重要でないと考えられ、そしてフラッシュ・アウトされる。第８のクロック・サイクル中に、分岐先アドレス＄３０に対応し且つ第６のクロック・サイクル中に要求された分岐先命令Ｔ０及びＴ１は、データ・バス１３０上へ戻され、そしてデータ・バス１３０を介して命令レジスタ１１６及びプリフェッチ・バッファ１０２のスロット０のそれぞれの中にロードされる。同様に、第９のクロック・サイクル中に、スロット０からの命令Ｔ１は、ＩＲ１１６等の中にロードされ、そしてＤＣＬ１６４は、前のクロック・サイクルに関して前述した動作を実行する。
【０１０３】
本発明が特定の伝導性タイプ又は電位の極性に関して説明されたが、当業者は、伝導性タイプ及び電位の極性を逆にし得ることを認めるであろう。
明細書においては、この発明は、特定の実施形態に関して説明した。しかしながら、当業者は、添付の特許請求の範囲から逸脱することなしに様々な変更及び変化を行うことができることを認めるであろう。例えば、メモリ１６６は、１又はそれより多くのコンピュータ・ハード・ディスク、フロッピー・ディスク（登録商標）、３．５インチ・ディスク、コンピュータ記憶テープ、磁気ドラム、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）セル、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）セル、電気的消去可能（ＥＥＰＲＯＭ、ＥＰＲＯＭ、フラッシュ）セル、不揮発性セル、強誘電体又は強磁性体メモリ、コンパクト・ディスク（ＣＤ）、レーザ・ディスク、光ディスク、及びいずれの類似のコンピュータ可読媒体を含み得る。また、ブロック図は、図示されたブロック以外の別のブロックを含み得て、そしてより多い又はより少ないブロックを有し又は異なって配置され得る。また、フロー図は、異なって配置され、より多い又はより少ないステップを含み得て、又は複数のステップ、又は互いに同時に実行されることができる複数のステップに分離されることができるステップを有し得る。従って、本明細書及び図面は、限定的意味よりむしろ例示と考えるべきであり、そして全てのそのような変更は、本発明の範囲内に含まれることを意図している。
【０１０４】
便益、他の利点及び問題の解法は、特定の実施形態に関して説明されたのものである。しかしながら、便益、利点、及びより顕著に生じる又は成る解法は、特許請求の範囲のいずれか又はその全ての臨界的、必要な、又は本質的特徴又は構成要素と解釈すべきでない。本明細書で用いられるように、用語「備える」、「備えている」、又はそれらのいずれの他の別の表現は、非排他的包含をカバーし、それにより構成要素のリストを備えるプロセス、方法、物品、又は装置は、それらの構成要素のみを含むのではなく、明示的にリストされない構成要素又はそのようなプロセス、方法、物品又は装置に本来的である構成要素を含み得る。
【図面の簡単な説明】
【０１０５】
【図１】図１は、本発明の一実施形態に従ったデータ処理システムをブロック図形式で示す。
【図２】図２は、本発明の方法の一実施形態をフロー図形式で示す。
【図３】図３は、本発明の方法の一実施形態をフロー図形式で示す。
【図４】図４は、本発明の一実施形態に従ったデータ処理システムのタイミング図を示す。
【図５】図５は、本発明の一実施形態に従ったデータ処理システムのタイミング図を示す。
【図６】図６は、本発明の一実施形態に従ったデータ処理システムのタイミング図を示す。
【図７】図７は、本発明の一実施形態に従ったデータ処理システムのタイミング図を示す。
【図１】
2007514237.tif 000003
【図２】
2007514237.tif 000004
【図３】
2007514237.tif 000005
【図４】
2007514237.tif 000006
【図５】
2007514237.tif 000007
【図６】
2007514237.tif 000008
【図７】
2007514237.tif 000009
【国際調査報告】
2007514237.tif 000010
2007514237.tif 000011