JP2007514237A - 分岐先バッファにおいてエントリを割り当てる方法及び装置 - Google Patents

分岐先バッファにおいてエントリを割り当てる方法及び装置 Download PDF

Info

Publication number
JP2007514237A
JP2007514237A JP2006543824A JP2006543824A JP2007514237A JP 2007514237 A JP2007514237 A JP 2007514237A JP 2006543824 A JP2006543824 A JP 2006543824A JP 2006543824 A JP2006543824 A JP 2006543824A JP 2007514237 A JP2007514237 A JP 2007514237A
Authority
JP
Japan
Prior art keywords
instruction
branch
address
slot
btb
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006543824A
Other languages
English (en)
Inventor
モイヤー,ウィリアム・シー
スコット,ジェフリー・ダブリュー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NXP USA Inc
Original Assignee
NXP USA Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NXP USA Inc filed Critical NXP USA Inc
Publication of JP2007514237A publication Critical patent/JP2007514237A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)

Abstract

パイプライン化された処理システムにおける分岐先バッファ(BTB)(144)においてエントリを割り当てる方法(200)及び装置(100)は、命令をシーケンシャルにフェッチすること、それらの命令のうちの1つが分岐命令(215,220)であることを決定すること、その分岐命令を復号して分岐先アドレスを決定すること、パイプライン化された処理システムにおいて機能停止を引き起こすことなしに分岐先アドレスを獲得することができるかどうかを決定すること、及びBTBエントリ(144)を上記の決定に基づいて選択的に割り当てることを含む。一実施形態において、BTB(144)のエントリは、分岐命令がプリフェッチ・バッファ(102)の所定のスロット(S1)にロードされず且つ他の機能停止条件が起きない場合割り当てられる。本方法(200)及び装置(100)は、BTB(144)を用いる利点と分岐先取りを用いる利点とを組み合わせて、データ処理システムにおける機能停止条件を低減する。

Description

[発明の分野]
本発明は、一般的に、データ処理システムに関し、より詳細には分岐先バッファにおいてエントリを割り当てることに関する。
[関連技術]
分岐先バッファ(rach arget uffer)(BTB)は、分岐命令の実行で費やされる多数のサイクルを低減することによりプロセッサ性能を改善するため広範に用いられてきた。分岐先バッファは、最近の分岐のキャッシュとして動作し、そして分岐先アドレス(分岐宛先のアドレス)か又は分岐先(branch target)での1又はそれより多くの命令かのいずれかを分岐命令の実行前に与えることにより分岐を加速し、それは、プロセッサが分岐先アドレスで命令の実行をより迅速に始めることを可能にする。
また、分岐先取りスキームを用いて、シーケンシャル命令ストリームの中を先行して走査し、やがて現れる分岐命令をそれらの実行に先だって捜し、そして分岐の分岐先アドレスを早期に計算することにより、分岐処理を加速、動作して、分岐を取る場合に分岐命令の実行に先だって分岐先命令をフェッチすることを可能にする。
分岐予測論理をBTBスキーム及び分岐先取りスキームの両方と共に用いて、分岐条件の解明の前に条件付き分岐の結果(それを取るか取らないか)の早期の予測を可能にし、こうして予測器の精度が高いとき分岐性能の増大を可能にする。
現在の多くの分岐先バッファ設計は、命令ストリームの中で遭遇されたどの分岐命令に対しても1つのエントリを割り当てる割り当て方策を用いる。このアプローチは、非効率になりがちである。それは、取られない分岐は将来取られなさそうであり、そしてエントリをそれらに対して割り当てることが将来取られる分岐エントリに取って代わり、従って分岐先バッファのヒット率を低下させるからである。
別のアプローチは、分岐が実際に取られていることを知るまで分岐先バッファにおいてエントリを割り当てることを待つことである。それは、取られない分岐は次の実行で取られないことが高い確率で有るるからである。より大きい分岐先バッファに対して、これは、合理的アプローチである。しかしながら、分岐先バッファのサイズを最小化しなければならない低コストのシステムに対しては、新しいエントリを分岐先バッファにおいて割り当てる方法を改善することが望まれている。
従って、より効率的で且つより経済性に優れる改善されたBTB設計に対する必要性が存在する。
本発明は、添付の図面により一例として示されるがそれにより限定されるものではなく、それらの図面において類似の参照番号は、類似の構成要素を示す。
当業者は、図面の中の構成要素が単純且つ明瞭に示されるよう描かれており、そして必ずしも尺度通りに描かれていないことを認めるであろう。例えば、図面の中の構成要素の一部のものの寸法は、本発明の実施形態の理解を増進するのを助けるため他の構成要素に対して誇張されている場合がある。
[発明の詳細な説明]
本明細書で用いられるように、用語「バス」は、複数の信号又は導体を呼ぶために用いられ、当該複数の信号又は導体は、データ、アドレス、制御、又はステータスのような1又はそれより多くの様々な種類の情報を転送するため用いられ得る。本明細書で説明される導体は、単一の導体、複数の導体、一方向性の導体、又は双方向性の導体であることに関連して示され又は説明される。しかしながら、異なる実施形態は、導体の実現を変え得る。例えば、別々の一方向性の導体が双方向性の導体よりむしろ用いられ得て、そしてその逆もあり得る。また、複数の導体は、複数の信号をシリアルに又は時分割多重化して転送する単一の導体と置換し得る。同様に、複数の信号を送る単一の導体は、これらの信号のサブセットを送る様々の異なる導体に分けられ得る。従って、多くの選択が、信号を転送するため存在する。
用語「アサート」、又は「設定(又はセット)」及び「ニゲート」(又は、「ディアサート」又は「クリア」)は、信号、ステータス・ビット、又は類似の装置をその論理的「真」状態又は論理的「偽」状態のそれぞれにすることに言及するとき用いられる。論理的「真」状態が論理レベル「1」である場合、論理的「偽」状態は、論理レベル「0」である。そして、論理的「真」状態が論理レベル「0」である場合、論理的「偽」状態は、論理レベル「1」である。
従って、本明細書に記載された各信号は、正又は負の論理として設計され得て、そこにおいて負論理は、信号の上のバー又は名前の後に続くアスタリスク(*)により示すことができる。負論理信号の場合、信号は、アクティブ・ローであり、そこでは論理的「真」状態は、論理レベル「0」に対応する。正論理信号の場合、信号は、アクティブ・ハイであり、そこでは論理的「真」状態は、論理レベル「1」に対応する。
角括弧を用いて、バスの導体、又は値のビット位置を示す。例えば、「バス60[0−7]」又は「バス60の導体[0−7]」は、バス60の8個の低次側導体を示し、そして「アドレス・ビット[0−7]」又は「ADDRESS[0−7]」は、アドレス値の8個の低次ビットを示す。数字の前にある記号「$」は、その数字が16進又は基底16形式で表されていることを示す。数字の前にある記号「%」は、2値又は基底2形式で表されていることを示す。
本発明の一実施形態は、分岐先取り成果を利用して、当該分岐先取りの結果に基づいてBTBにおけるエントリの割り当てを条件付けすることにより改善されたBTB設計を与えようとしている。本発明の別の実施形態は、プロセッサ機能停止情報(プロセッサ・ストール情報)を利用して、BTBにおいてエントリの割り当てを実行することの推定された利点に基づいてBTBにおいてそのような割り当てを条件付けすることにより改善されたBTB設計を与えようとしている。
図1は、本発明の一実施形態に従ったデータ処理システム100をブロック図形式で示す。データ処理システム100は、メモリ166、バス168及びプロセッサ184を含む。データ処理システム100は、図示された構成要素以外の他の構成要素を含み得て、又は図示された構成要素より多くの又は少ない構成要素を含み得る。例えば、データ処理システム100は、任意の数のメモリ、周辺装置、又はプロセッサを含み得る。
プロセッサ184は、命令レジスタ(IR)116、分岐アドレス計算器(BAC)108、プログラム・カウンタ112、マルチプレクサ(MUX)126、ラッチ160、加算器156、マルチプレクサ(MUX)154、分岐先バッファ(BTB)144、復号及び制御論理(DCL)164、命令バッファ105、比較器170、制御論理172及びプリフェッチ・バッファ102を含む。プリフェッチ・バッファ102は、命令スロットS0,S1,S2,S3,S4及びS5を含む。命令バッファ105は、プリフェッチ・バッファ102及び命令レジスタ116を含む。プロセッサ184は、例えば、マイクロプロセッサ、マイクロコントローラ、ディジタル信号プロセッサ等のようないずれのタイプのプロセッサであり得る。一実施形態においては、プロセッサ184は、プロセッサ・コアと呼ばれ得る。別の実施形態においては、プロセッサ184は、マルチプロセッサ・データ処理システムの中の多くのプロセッサのうちの1つであり得る。更に、プロセッサ184は、パイプライン化されたプロセッサであり得る。
データ処理システム100の一実施形態において、プリフェッチ・バッファ102は、BAC108、DCL164、命令レジスタ116、及びバス168に結合されている。BAC108は、MUX126、プログラム・カウンタ112、プリフェッチ・バッファ102、及び命令レジスタ116に結合されている。MUX126は、プログラム・カウンタ112、BAC108、MUX154、加算器156、ラッチ160、及びバス168に結合されている。BTB144は、CTRL172、比較器170、及びMUX154に結合されている。比較器170は、MUX154、BTB144、アドレス・バス128、及びDCL164に結合されている。DCL164は、MUX126、命令レジスタ116、比較器170、プリフェッチ・バッファ102、メモリ166、及びCTRL172に結合されている。メモリ166は、バス168、及びDCL164に結合されている。
本発明の一実施形態において、メモリ166は、各命令が対応の命令アドレスを有する一連の命令を含む。プロセッサ184のクロック・サイクル中に、DCL164は、命令バッファ105がメモリ166からの所定数の命令を格納するため利用可能な所定数のスロットを有するかどうかを決定する。DCL164は、そのDCL164がプリフェッチ・バッファ102のサイズ、命令バッファ105の中の確保されたスロットの数、及びバス168を介してメモリから現在フェッチされている命令の数を知っていることを用いることにより命令バッファ105の中の利点可能な所定数のスロットが有るかどうかを決定することができる。所定数のスロットは、用いられているパイプライン化されたプロセッサに応じて変わり、そしてフェッチされた命令の数及びフェッチされている各命令のサイズに依存し得る。本明細書で説明される実施形態については、パイプライン化されたプロセッサがダブルワード・フェッチ・サイズを用い、所定数のスロットが2であり、且つフェッチされている命令の所定数が2であり、即ち2ワード・サイズ命令が各ダブルワード命令フェッチ中に要求されることを仮定する。代替実施形態は、本明細書で説明される実施形態以外の、異なる数のプリフェッチ・スロットを用い得て、また異なるパイプラインを用い得て、更にまた異なるフェッチ・サイズ及びメモリ・レイテンシー(待ち時間)を有し得る。
本発明の少なくとも1つの実施形態において、プリフェッチ・バッファ102を用いて、プロセッサ184による順次命令の実行に先立ってその順次命令を保持する。命令レジスタ116を用いて、実行のため復号されている現在の命令を保持する。命令が実行されるにつれ、順次命令は、プリフェッチ・バッファ・スロット0から又はデータ・バス130から導体114を介して命令レジスタ116に与えられる。これらの命令がパイプラインを通って進むにつれ、フェッチされた命令は、有効な命令が前のスロットに存在すると仮定すると、スロット1からスロット0にシフトされ、スロット2からスロット1にシフトされ、以下同様にされる。プリフェッチ・バッファ102の中の空のスロットは、バス168及びデータ・バス130を介してメモリ166からフェッチされた要求された命令で充填される。
本発明の少なくとも1つの実施形態においては、プリフェッチ・バッファ102は、命令レジスタ116からのメモリの減結合を可能にし、そして命令のFIFOとして働く。命令実行ストリームが命令の流れの変更なしで順次的なままであるある限り、命令は、順次的に要求され、プリフェッチ・バッファ102に供給され続ける。命令の流れの変更が起きるとき、順次命令ストリームは、廃棄されねばならず、そしてプリフェッチ・バッファ102は、未使用の順次命令をフラッシュされ、そして命令の流れの変更の目標位置から命令の新しいストリームで充填される。割り込み及び例外処理のような追加の事象がまた命令の流れの変更を起こさせるにも拘わらず、分岐命令をプロセッサ184で通常用いて、新しい命令ストリームへの命令の流れの変更を起こさせる。現在の命令ストリームが廃棄され、そして新しい命令ストリームが確立されたので、命令の流れの変更は、プロセッサ184での命令の正規の実行の破壊を起こす。これは、典型的には、プロセッサ184に、新しい命令ストリームが確立されるのを待ちながら1又はそれより多くのサイクルの命令の実行を停止(stall)させ、こうしてデータ処理システム100の全体的性能及び効率を低下させる。
プリフェッチ・バッファ102の別の利点は、そのバッファのコンテンツ(中味)が、走査されて、プロセッサ184による分岐命令の実行に先立って、命令の流れの変更を生じさせ得る分岐命令の存在を決定し得ることである。実行に先立って命令ストリームを調べることにより、分岐命令はそれが実行される前の十分早期に検出され得ることが可能であり、そのためプロセッサ184に機能停止(stall)させること無しに目標命令ストリームを確立することができ、こうしてデータ処理システム100の実行効率を改善する。これは、「分岐先取り」を実行することとして知られている。機能停止条件を回避するため要求される先取りの深さは、プロセッサのパイプライン深さ及びメモリ・アクセス・レイテンシー(メモリ・アクセス待ち時間)の関数であり、そして本発明の様々な実施形態で変わり得る。
以下で更に説明されるであろう本発明の一実施形態においては、先取りの深さは、分岐命令が実行のため命令レジスタ116に到着する前の2つの命令に等しい。分岐先(分岐目標)(branch target)が、計算され、そしてアクセス要求が、メモリになされて、その分岐が実行のため命令レジスタに到着する前の少なくとも2命令サイクルで目標命令ストリームを獲得する場合、追加の機能停止条件がプロセッサ184に関して引き起こされないであろう。これは、分岐命令がプリフェッチ・バッファ102のスロット(S1)で検出される場合達成されることができる。それは、2つの命令が、即ちスロット0(S0)の中及び命令レジスタ116の中のそれらの命令が分岐命令より前にあるからである。この場合、分岐先が、計算され得て、そして要求が、メモリに対してなされて、目標命令を獲得し、それは、目標命令ストリームにアクセスする際に被る遅延に起因した追加の実行停止サイクルを回避するためプロセッサ184に適時に戻るであろう。
全ての分岐命令がプリフェッチ・バッファ102のスロット1の中で検出可能であるわけではないことがあり得る。それは、分岐命令がスロット1をバイパスし、そして直接に命令レジスタ116に又はプリフェッチ・バッファ102のスロット0にデータ・バス130を介してロードされ得るからである。これらの条件は、命令の流れの変更が生じたとき生じ、そして目標命令ストリームは、分岐命令を新しいストリームのヘッド近くに含む。最初の2つの戻り命令が命令レジスタ116及びプリフェッチ・バッファ102のスロット0にロードされるので、それらは、プリフェッチ・バッファ102のスロット1に常駐してなく、従って、第2の目標命令ストリームが到着するのを待ちながらプロセッサ184の機能停止を回避するため十分早期に命令の流れの第2の変更の目標をフェッチする機会が存在しなかったであろう。その上、プロセッサ184が第3及び第4の命令が目標ストリームから到着するのを待ちながら命令の実行を完了した場合、命令パイプラインは、進行し、そして第3及び第4の戻り命令は、プリフェッチ・バッファ102のスロット1及びスロット2ではなくスロット0及びスロット1に配置されるであろう。分岐命令が新しい目標ストリームの第3の命令として存在する場合、その分岐命令は、スロット1に存在する機会を持たず、従って、分岐先取りのみを用いて、次の目標ストリームをフェッチし且つプロセッサ184の機能停止を回避するため不十分な時間しか使用可能でないであろう。
他の実施形態においては、分岐命令は、他の理由のためプリフェッチ・バッファ102のスロット1をヒットしないことがあり得る。例えば、統一メモリ・バス(unified memory bus)を有するデータ処理システムは、連続的ロード/ストア命令を実行しながら命令バッファ105を排出(drain)することができるであろう。命令バッファ105の中のこのロード/ストア命令を実行した後で命令レジスタ及びスロット0を充填するための後続のフェッチは、後続の分岐命令がプリフェッチ・バッファ102のスロット1で処理されないことをもたらすことができるであろう。
たとえ分岐命令が追加の機能停止条件を含むことを回避するため十分早期にスロット1に到着しなくても、分岐命令がプリフェッチ・バッファ102のスロット0にある間に分岐先アドレスを計算し且つ目標命令ストリームを要求することにより分岐を部分的に加速する機会が依然としてあり得る。この場合、1又はそれより多くのサイクルの機能停止が回避されるであろう。
たとえ分岐命令が命令バッファ105のスロット1にロードされることができても、その特定の分岐命令のため目標ストリームをフェッチし始める機会がないかも知れない。それは、異なる分岐命令がまたスロット0又は命令レジスタ116に存在することが可能であるからである。この場合、一実施形態において、命令レジスタ116の中のより早期の分岐は、たとえそのより早期の命令が分岐条件に適合しない場合実際に取られることができなくてもメモリ・アクセスに関するより高い優先度を与えられるであろう。この場合、第1の分岐のための目標命令ストリームは、廃棄されるが、しかしプリフェッチ・バッファ102のスロット1に存在(resident)する次の分岐のため目標ストリームをフェッチする機会を逸してしまうであろう。
命令の流れの来るべき変更を十分早期に検出することができそして要求が目標ストリームをフェッチするためメモリに対してなされる場合分岐先取り技術を用いることによりプロセッサ184の機能停止条件を低減させることができることが分かることができるが、しかしそれができない場合が頻繁にある。この場合に関しては、分岐先バッファを用いて、分岐命令の目標ストリームにアクセスすることを加速する。本発明の一実施形態において、BTB144は、そのBTB144に前に格納された分岐命令のため、事前計算された目標アドレスを保持する。目標アドレスの計算は時間を必要とするので、一実施形態においては、目標アドレスは、分岐先取り技術を用いる場合より1又はそれより多くのクロック・サイクルだけ早期に要求されることができる。目標アドレスを含むBTBエントリが使用可能である場合、目標命令ストリームは、分岐がプリフェッチ・バッファ102に又は命令レジスタ116に到着する前に確立されることができる。分岐命令のアドレスを用いて、BTB144の中のルックアップを実行して、マッチング・エントリが存在するかどうかを決定することができる。マッチング・エントリが存在する場合、目標アドレスが、BTB144から獲得され、そしてメモリ要求を行って、その命令を分岐先位置(分岐目標位置)(branch target location)で獲得し得る。
BTB144は、分岐命令の目標アドレスを格納するため限定数のエントリを含む。データ処理システム100の最高性能のため、追加のプロセッサ184の機能停止を起こすことなしにプリフェッチ・バッファ102における分岐先取りにより加速されることができるそれらの分岐は、BTB144における1つのエントリを割り当てられないで、従ってBTB144の「実効的」容量を増大する。
複数の分岐命令が命令レジスタ116及びプリフェッチ・バッファ102の中に存在し得るので、復号及び制御論理164は、アクセスされるべき分岐先ストリームの選択を優先順位付けしなければならない。本発明の一実施形態において、命令レジスタの中の分岐命令は、最高位に優先順位付けされ、プリフェッチ・バッファ102のスロット0は、次の最高位に優先順位付けされ、プリフェッチ・バッファ102のスロット1がその次に高い優先順位に付けられ、以下同様に優先順位付けされる。それは、これが命令ストリームの中の命令の論理的順序を表すからである。DCL164は、こうして命令レジスタ116で始まって、プリフェッチ・バッファ102のスロット0、次いでスロット1と逆順に命令を走査する。分岐命令がより高い優先順位の位置に見つけられた場合、より低い優先順位の位置の分岐命令は、一時的に無視される。
DCL164が命令レジスタ116に置かれた命令が分岐命令でないと決定したとき、ロードBTB174(BTB174にロード)は、ディアサートされたままである。BTB更新は、分岐が実際に取られることを決定された後でのみ実行され、そしてこれは、分岐命令が命令レジスタ116に到着するまでに必ずしも決定されるわけではない。
本発明の少なくとも1つの実施形態において、DCL164はまた、条件付き分岐の成果を予測するため用いられる分岐予測論理を含む。条件付き分岐を取った成果又は取らなかった成果に関する予測に応じて、目標命令ストリームは、プリフェッチされ得て、又は、或る実施形態においては、分岐条件が実際に解決(resolve)されるまでプリフェッチされることが遅らされる。本発明の代替実施形態は、分岐予測論理をBTB144において、又はプロセッサ184における他の位置において実現し得て、又は分岐予測論理を利用しない場合も有り得る。分岐予測論理を用いないとき、或る実施形態においては、分岐先位置が、分岐条件が解決されることを待つことなしにプリフェッチされ、それは、分岐先位置をプリフェッチする目的のため分岐が取られるであろうことを予測することと等価である。
本発明の一実施形態において、分岐アドレス計算器108を用いて、プリフェッチ・バッファ102の中の命令のスロット目標アドレスと、命令レジスタ116の中の命令の命令レジスタ目標アドレスとを決定し得る。例えば、クロック・サイクル中に、分岐アドレス計算器108は、プリフェッチ・バッファ102及び命令レジスタ116に格納された命令の変位フィールドと、プログラム・カウンタPC112から現在実行されている命令のアドレスとを受信する。次いで、分岐アドレス計算器108は、スロット0の中の命令のスロット0目標アドレス(S0TA)、スロット1の中の命令のスロット1目標アドレス(S1TA)、及び命令レジスタ116の中の命令の命令レジスタ目標アドレス(IRTA)を計算する。IRTA、S0TA、S1TA等のうちのいるかは、以下で更に説明される用に、DCL164が命令バッファ105に格納された命令が分岐命令であるとき選択される。
図1に示される本発明の少なくとも1つの実施形態の動作が、図2及び図3に示されるフロー図を参照して以下で説明されるであろう。本発明の一実施形態において、フローは、開始の長円形205で始まり、そして判断の菱形210に進んで、分岐命令がIR116にあるかどうかを決定する。この決定の結果が肯定(イエス)である場合、フローは、判断の菱形215に進み、そこで分岐命令がIR116に到着する前にプリフェッチ・バッファ102のスロット1の中に以前にプリフェッチされたかどうかが決定される。この決定の結果が肯定(イエス)である場合、フローは、判断の菱形267に進んで、分岐命令が要求されたかどうかを決定する。この決定の結果が肯定(イエス)である場合、フローは、ステップ295に進み、そこで、新しいBTB144エントリが割り当てられてなく、そして目標位置が到着するのを待つ。次いで、フローは、次のサイクルの長円形260に進んで、次のサイクルを始める。この場合、目標がプリフェッチ・バッファ102のスロット1からプリフェッチされ且つプロセッサ184に適時に到着していずれの追加の機能停止サイクルを回避し得るので、IR116の中の分岐のために新しいBTB144エントリを割り当てる必要性がない。
判断の菱形267に戻って、分岐先が前に要求されなかった場合、フローは、判断の菱形270に進んで、分岐命令のためのBTBヒットがあったかどうかを決定する。その決定が肯定(イエス)である場合、フローは、ステップ275に進み、そこで、BTBルックアップの結果をいずれの分岐予測論理の結果と一緒に用いて、目標位置を予測する。次いで、フローは、次のサイクルの長円形260に進む。判断の菱形270における決定がBTBヒットがなかったことである場合、フローは、判断の菱形280に進んで、プロセッサが機能停止されたかどうかを決定する。プロセッサは、マルチサイクル命令からのデータ依存性を含む任意の数の理由のため機能停止し得る。上記の決定が肯定(イエス)である場合、フローは、ステップ290に進み、そこで、目標位置は、分岐予測論理の結果に基づいてプリフェッチされ、そしてBTBエントリは、割り当てられない。この場合、プロセッサ184の機能停止は、BTBエントリを要求することなしに、分岐先位置を獲得するのに十分な時間を与え得て、従って新しいエントリを割り当てる必要性を回避する。これは、BTBの一層の効率的使用をもたらす。次いで、フローは、次のサイクルの長円形260に進む。
判断の菱形280に戻って、プロセッサ184の機能停止がない場合、フローは、ステップ285に進み、そこで、目標位置は、分岐予測論理の結果に基づいてプリフェッチされ、そして新しいBTBエントリは、分岐が取られるよう解決される場合割り当てられる。この場合、BTBエントリの割り当ては、この特定の分岐に遭遇する次の時に改善された分岐性能を可能にする。次いで、フローは、次のサイクルの長円形260に進む。
判断の菱形215に戻って、分岐命令がプリフェッチ・バッファ102のスロット1の中にプリフェッチされなかった場合、フローは、判断の菱形220に進み、そこで、分岐命令がプリフェッチ・バッファ102のスロット0の中にプリフェッチされたかどうかの決定が行われる。その決定の結果が否定(ノー)である場合、フローは、判断の菱形225に進み、そこで、BTBヒットが生じたかどうかの決定が行われる。BTBヒットが生じなかった場合、フローは、ステップ230に進み、そこで、分岐先は、分岐予測論理の結果に基づいてプリフェッチされ、そして新しいBTBエントリは、分岐が取られるよう解決された場合割り当てられる。この場合、BTBエントリの割り当ては、この特定の分岐に遭遇する次の時に改善された分岐性能を可能にする。次いで、フローは、次のサイクルの長円形260に進む。
判断の菱形225によりBTBヒットが生じた決定された場合、フローは、ステップ275に進み、そして、ステップ275の動作に関して前に説明したように動作が続行される。
判断の菱形220に戻って、分岐命令がプリフェッチ・バッファ102のスロット0の中にプリフェッチされた場合、フローは、判断の菱形222に進み、そこで、分岐先がスロット0から要求されたかどうかの決定が行われる。分岐先位置が要求された場合、フローは、判断の菱形226に進んで、プロセッサの機能停止条件があるかどうかを決定する。プロセッサの機能停止条件がある場合、フローは、ステップ295に進み、そして、ステップ295の動作に関して前に説明したように動作が続行する。プロセッサの機能停止条件がない場合、フローは、ステップ300に進み、そして、新しいBTBエントリは、分岐が取られるよう解決された場合条件付きで割り当てられ、そして、プロセッサは、目標が到着するのを待つ。判断の菱形222により分岐先位置が要求されなかったと決定された場合、フローは、判断の菱形224に進み、そこで、BTBヒットがあったかどうかの決定が行われる。BTBヒットがあった場合、フローは、ステップ275に進み、そして、ステップ275の動作に関して前に説明されたように動作が続行される。
判断の菱形224によりBTBヒットがなかったと決定された場合、フローは、判断の菱形280に進んで、プロセッサ184の機能停止条件が存在するかどうかを決定し、そして、ステップ280の動作に関して前に説明したように動作が続行する。
判断の菱形210に戻って、分岐がIR116の中にない場合、フローは、判断の菱形235に進み、そこで、プリフェッチ・バッファ102のスロット0の中に分岐命令があるかどうかを決定する。その決定の結果が肯定(イエス)である場合、フローは、判断の菱形265に進んで、スロット0の中の分岐命令がスロット1の中にプリフェッチされたかどうかを決定する。分岐命令がスロット1の中にプリフェッチされた場合、フローは、判断の菱形267に進み、そして、判断の菱形267の動作に関して前に説明したように動作が続行する。分岐命令がスロット1の中にプリフェッチされなかった場合、フローは、判断の菱形270に進み、そして、判断の菱形270の動作に関して前に説明したように動作が続行する。判断の菱形235における決定の結果が否定(ノー)である場合、フローは、判断の菱形240に進み、そこで、プリフェッチ・バッファ102のスロット1の中に分岐命令があるかどうかを決定する。その決定の結果が否定(ノー)である場合、フローは、分岐命令が命令バッファ105の位置の所定のサブセットの中に見つけられなかったので次のサイクルの長円形260に進む。判断の菱形240における決定の結果がプリフェッチ・バッファ102のスロット1の中に分岐命令があることである場合、一実施形態においては、フローは、判断の菱形245に進んで、BTBヒットがスロット1の中の分岐命令のため生じたかどうかを決定する。BTBヒットが生じた場合、フローは、ステップ255に進み、そしてBTBルックアップの結果及び分岐予測論理の結果を用いて、分岐先をプリフェッチする。次いで、フローは、次のサイクルの長円形260に進む。本発明の一実施形態においては、判断の菱形245の結果がBTBヒットが生じたことである場合、フローは、ステップ250に進んで、そこで、分岐先位置は、分岐予測論理に基づいてプリフェッチされ、そして新しいBTBエントリは、割り当てられない。代わりに、目標フェッチが、完了するため可能にされ、次いでフローは、次のサイクルの長円形260に進む。
代替実施形態においては、図3におけるフローのステップ245が、除かれ、そしてフローは、ステップ240における「肯定(イエス)」の決定からステップ250に直接進み得る。これは、分岐先アドレスがスロット1で計算され、そして十分な時間が目標命令が到着するため使用可能であるならば目標命令ストリームがBTB144の支援無しにフェッチされるので起こり得る。
図2及び図3に示されるフローは、プロセッサ184のBTB144が最高の便利さを与えるため有利に動作され得る少なくとも1つのあり得る方法を表す。分岐先位置がBTB144を利用すること無しに獲得され、且つデータ処理システム100の動作に追加の遅延を招くことを依然回避し得る条件を決定することにより、より効率的な使用は、限定された容量のBTB144から生じ得る。
図1に示される本発明の少なくとも1つの実施形態の動作は、図4、図5、図6及び図7に示されるタイミング図、及び図2及び図3に示されるフロー図を参照して以下で説明されるであろう。図4及び図5に示されるそれぞれのタイミング図の最初のクロック・サイクルの始めに、ロードBTB174及び比較器一致信号197が、ディアサートされると仮定する。
図1に示される本発明の少なくとも1つの実施形態において、図4を参照すると、第1のクロック・サイクル中に、DCL164は、2つのスロットが命令バッファ105の中で使用可能であるかどうかを決定する。DCL164が2つのスロットが命令バッファ105、この場合、命令レジスタ116及びスロット0の中で使用可能であると決定したとき、要求信号199が、アサートされ、そしてその2つのスロット、即ち命令レジスタ116及びスロット0が、確保される。要求信号199が、DCL164からメモリ166に与えられ、そしてそれを用いて、命令がメモリ166からフェッチされることを要求する。フェッチされている初期命令に対応する命令アドレスは、プログラム・カウンタ112によりIIA123を介してMUX126に与えられる。DCL164は、MUX126を用いて、初期命令アドレス123を選択し、その初期命令アドレス123は、次いで、アドレス128上へ駆動されて、メモリ166の中のアドレス$0及びアドレス$4に配置された命令I0及びI1を要求する。
アドレス・バス128上へ駆動された命令アドレス$0は、ラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128及び加算器156に結合されていて、そのラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉する。次いで、加算器156は、現在の命令アドレスをダブルワード・フェッチ・サイズ$8だけ増分する。前述したように、ダブルワード・フェッチ・サイズは、本発明の異なる実施形態で変わり、そしてフェッチされている各命令のサイズに依存し得る。ラッチ160による捕捉、及び加算器156により生じるアドレス・バス128上のアドレスの増分は、全てのクロック・サイクル中に生じ、そこにおいては、アドレス・バス128上へ駆動されたアドレスがあり、そして要求が、メモリに対してなされる。増分されたアドレス、この場合、$8は、加算器156により順次命令アドレス(SIA)158として出力される。
比較器170は、アドレス・バス128上へ駆動されたアドレスを受け取り、そしてそのアドレスを、もしあれば分岐先バッファ144に格納されている1つ又は複数の分岐命令アドレスと比較する。分岐先バッファ144は、メモリ166から受け取られた分岐命令のアドレスを格納するための分岐命令アドレス(BIA)スロットと、それらの分岐命令に対応する計算された目標アドレスを格納するための分岐先アドレス(BTA)と、フラグ・ビット(FB)スロットのアサートされた(有効な)又はディアサート(無効な)ビットが各分岐先アドレス・スロット及び対応の分岐先アドレス・スロットが有効な又は無効な分岐先アドレスを有するかどうかを表す当該フラグ・ビット(FB)スロットとを含む。分岐先アドレスがBTB144の中のBIAスロットにロードされ、そして対応の分岐先アドレスがBTB144の中の対応のBTAスロットにロードされるとき、関連したフラグ・ビットが、有効なBTBエントリを指示するようアサートされる。リセット時、スタートアップ時、及び分岐先アドレスがBIAスロットにないか又は対応の分岐先アドレスがBTB144の中のBTAスロットにない時、関連したフラグ・ビットは、ディアサートされる。フラグ・ビットは、BIA及びBTAが有効か又は無効かどうかを表すため、例えば、0又は1であり得る。
比較器170がアドレス・バス128上へ駆動されたアドレスがBTB144に格納されている分岐命令アドレスのいずれかと一致すると決定し、そして関連したフラグ・ビットが有効であるとき、BTBヒットが、生じており、そして比較器170は、比較器一致信号197をアサートする。比較器170はまた、信号180及びMUX154を用いて、BTBヒットを発生した分岐命令アドレスに対応する分岐先アドレスを選択する。選択された分岐先アドレスは、分岐先バッファ目標アドレス(BTBTA)178を用いて、MUX126に与えられる。比較器一致信号197がアサートされるので、DCL164は、BTBTA178を選択し、そして分岐先アドレスをアドレス・バス128上へ駆動する。
比較器170がアドレス・バス128上へ駆動されたアドレスがBTB144の中のいずれの分岐命令アドレスとも一致しないこと又はアドレス・バス128上へ駆動されたアドレスがBTB144の中の分岐命令アドレスと一致することを決定するが、しかし一致されたBIAアドレスに対応するフラグ・ビットが無効であるとき、BTBミスが、生じており、そして比較器一致信号197は、比較器170によりディアサートされる。比較器一致信号197がディアサートされたとき、DCL164は、BTBTA178を、アドレス・バス128上へ駆動されるべきアドレスとして選択しない。図4に示される例においては、BTBミスは、第1のクロック・サイクル中に生じており、従って、比較器一致信号197は、ディアサートされ、そしてBTBTA178は、DCL164により選択されない。
第2のクロック・サイクル中に、DCL164は、命令バッファ105の中の2つのスロットが2つの命令を格納するため使用可能であるかどうかを決定する。2つのスロットがプリフェッチ・バッファ102、この場合、スロット1及びスロット2の中で使用可能であるので、DCL164は、要求信号199をアサートし、スロット1及び2を確保し、そしてSIA158を選択する。順次命令アドレス$8は、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、その捕捉された命令アドレスを$8だけ増分し、$10の順次命令アドレスを生成する。比較器170は、BTBヒット又はBTBミスがアドレス・バス128上へ駆動されたアドレス$8ともしあればBTB144の中の有効な分岐命令アドレスとの間で生じたかどうかを決定する。この場合、アドレス・バス128上へ駆動されたアドレスとBTB144の分岐命令アドレス部分に格納されているいずれのアドレスとの間に一致がないので、BTBミスが、生じ、そして比較器一致信号197が、ディアサートされる。アドレス・バス128上へ駆動された順次命令アドレス$8に対応する命令I2及びI3は、フェッチされ、そして第4のクロック・サイクル中にバス168及びデータ・バス130を介してプリフェッチ・バッファ102に与えられる。
第3のクロック・サイクル中に、第1のクロック・サイクル中アドレス・バス128上へ駆動された命令アドレスに対応する命令I0及びI1は、データ・バス130上へ駆動されて、第4のクロック・サイクル中に命令レジスタ116及びプリフェッチ・バッファ102のスロット0に中にロードされる。DCL164は、プリフェッチ・バッファ102の2つのスロット、即ち、スロット3及び4が2つの命令をメモリ166から格納するため使用可能であることを決定し、そして要求信号199をアサートし、スロット3及び4を確保し、そしてSIA158を選択する。その選択された順次命令アドレス$10は、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、その捕捉された命令アドレスを増分して、$18の順次命令アドレスを生成する。比較器170は、BTBヒット又はBTBミスがアドレス・バス128上へ駆動されたアドレス$10ともしあればBTB144に格納されている分岐命令アドレスとの間に生じたかどうかを決定する。この場合、BTB144のフラグ・ビット部分の全てもフラグ・ビットが無効であるので、BTBミスが生じ、比較器一致信号197がディアサートされ、そして比較器170はBIAに対応するBTBTA178を選択しない。
第4のクロック・サイクル中に、DCL164は、プリフェッチ・バッファ102の中の2つのスロットが2つの命令をメモリ166から格納するため使用可能であるかどうかを決定する。この場合、第1の3クロック・サイクル中の3つの前のフェッチ(1フェッチ当たり2つの命令で)は、プリフェッチ・バッファ102の中の6スロットを一杯にし、又は確保してしまうので、2つのスロットは、2つの追加の命令をメモリ166から格納するため使用可能でない。従って、要求信号199はディアサートされ、追加のスロットが確保されなく、そしてDCL164はSIA158を選択する。SIA158が選択されるので、順次命令アドレス$8は、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。しかしながら、要求信号199がディアサートされるので、アドレス・バス128上へ駆動された命令アドレス$18に対応する命令は、2つのスロットがプリフェッチ・バッファ102で使用可能でないので第4のクロック・サイクル中に要求されない。比較器170は、その要求されないアドレスを受け取り、そしてその要求されないアドレスをBTB144のBIAと比較する。しかしながら、DCL164は、要求信号199がディアサートされたとき比較器170により送られたいずれの比較器一致信号197も無視する。
第1のクロック・サイクル中に要求された命令I0は、命令レジスタ116の中にロードされ、そしてまた第1のクロック・サイクル中に要求された命令I1は、サイクル4においてスロット0の中にロードされる。第2のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレス$8に対応する命令I2及びI3は、バス168及びデータ・バス130に置かれて、第1のクロック・サイクルの始めにプリフェッチ・バッファ102のスロット0及びスロット1の中にロードされる。
DCL164は、命令I0の演算コード176を命令レジスタ116から受け取り、そしてその命令が分岐命令であるかどうかを決定する(210)。DCL164は、分岐命令の演算コードがデータ処理システム100において用いられることを知っており、そしてその受け取られた演算コード176をプロセッサ184の演算コードと比較することができる。DCL164が命令レジスタ116の中の命令I0が分岐命令でないと決定したとき、DCL164は、スロット0の中の命令I1の演算コード190を用いて、スロット0の中にロードされた命令が分岐命令であるかどうかを決定する(235)。DCL164がスロット0の中にロードされた命令が分岐命令でないと決定したとき、DCL164は、スロット1に格納されている命令の演算コード192を用いて、分岐命令がスロット1の中にあるかどうかを決定する(240)。この場合、スロット1は、まだ有効な命令を含んでない。DCL164が命令バッファ105の中に(即ち、命令レジスタ116及びプリフェッチ・バッファ102のスロット0及び1の中に)格納されている命令のいずれの所定のサブセットの中に分岐命令がないと決定したとき、現在のサイクルは、分岐処理なしで終わり(260)、そしてプロセッサ184は、第5のクロック・サイクルを続ける。
第5のクロック・サイクル中に、DCL164は、プリフェッチ・バッファ102の中の2つのスロットが2つの命令をメモリ166から格納するため使用可能であるかどうかを決定する。2つのスロット、この場合、スロット4及びスロット5が使用可能であるので、要求信号199は、アサートされ、そしてスロット4及び5は、確保される。第3のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレス$10に対応する命令I4及びI5は、バス168及びデータ・バス130上に置かれて、第6のクロック・サイクル中にプリフェッチ・バッファ102のスロット1及びスロット2の中にロードされる。第4のクロック・サイクル中に命令レジスタ116に存在する命令I0は、スロット0からの命令I1と置換される。第2のクロック・サイクル中に要求された命令I2及びI3は、スロット0及びスロット1のそれぞれの中にロードされる。命令が実行されるにつれ、後続の命令は、(命令レジスタ116に向かって)前の方の次のスロットにシフトされる。メモリからフェッチされた命令は、フェッチを実行するため要求が行われた時点に確保されたスロットの中に必ずしもロードされるわけではない。それは、プリフェッチ・バッファの中の命令が、より前の命令が実行されるにつれIRに向けて前進しているからである。代わりに、それらの命令は、それらを進める命令の進行に従って適正なスロットの中にロードされる。
命令レジスタ116、スロット0及びスロット1の中にロードされた命令I1、I2及びI3の演算コード176、190、192は、DCL164に与えられる。DCL164は、命令レジスタ116に格納された命令I1の演算コード176を受け取り、そしてその命令が分岐命令であるかどうかを決定する(210)。DCL164が命令レジスタ116にロードされた命令I1が分岐命令でないと決定したとき、DCL164は、演算コード190を用いて、スロット0の中の命令I2が分岐命令であるかどうかを決定する(235)。
DCL164がスロット0の中にロードされた命令が分岐命令であると決定したとき、重複する分岐先フェッチングを阻止するため、DCL164は、スロット0の中の分岐命令がスロット1からスロット0に与えられたかどうかを決定する(265)。DCL164がスロット0の中の分岐命令がスロット1から命令レジスタ116に与えられたと決定したとき、DCL164は、分岐先がスロット1から要求されたかどうかを決定する(267)。DCL164がスロット0の中の分岐命令の分岐先がスロット1から要求されたことを決定したとき、BTB144の中の新しいエントリは、スロット0の中の分岐命令のため割り当てられなく、そしてロードBTB174が、アサートされる(295)。この場合、分岐命令は、実行のため命令レジスタ116に到着する前の十分に早いときに復号され、そのため分岐先が、メモリからフェッチされ、そしてプロセッサ184に機能停止させて目標命令が到着するのを待たせること無しに実行のためプロセッサに戻るよう到着することができる。この場合、この分岐のためのBTBエントリを割り当てることにとって利点は無い。それは、分岐命令が命令レジスタにおける実行を完了する前にメモリがスロット1から行われた目標フェッチ要求に応答するのに十分な時間が使用可能であるからである。
スロット0の中の分岐命令が図4の場合のようにスロット1から与えられなかったとき(265)、DCL164は、BTBヒットを示す比較器一致信号197がアサートされたかどうか、即ちBTBヒットがあったかどうかを決定する(270)。DCL164が比較器一致信号197がアサートされたことを決定したとき、スロット0の中の分岐命令の目標アドレス及び分岐命令アドレスは、それらが既に存在するので分岐先バッファ144に置かれなく、そしてBTBTA178が、DCL164により選択されて、アドレス・バス128上に駆動される(275)。この場合、分岐命令の目標は、分岐命令がスロット0の中に直接ロードされたのでスロット1からプリフェッチされることができなかった。全ての分岐命令がスロット1を通るわけではない。それは、メモリから到着する命令は、命令レジスタに最も近い次の使用可能な空の位置に置かれるからである。プロセッサがスロット0を空にし、そして分岐命令がメモリから到着する1対の命令のうちの第1の命令である場合、それは、到着しだいスロット0の中に置かれ、そして到着する上記1対のうちの第2の命令が、スロット1の中に置かれるであろう。プロセッサがIR及びスロット0の両方を空にした場合(即ち、実行されるままの状態にある更なる命令が無い。)、戻った1対の命令は、IR及びスロット0の中に置かれ、そして分岐命令の位置に拘わらず、それは、スロット1の中にロードされないであろう。
DCL164が比較器一致信号197がディアサートされた(BTBミス)ことを決定したとき(それは、図4におけるケースである。)、DCL164は、そのDCL164における機能停止信号に関する条件がアサートされたかどうかを決定する(280)。DCL164における機能停止信号に関する条件は、プロセッサ184が例えば1つの命令の前の命令への実行依存性に関連した理由のため機能停止してしまったかどうかを指示する。DCL164がそのDCL164における機能停止信号に関する条件がアサートされたことを決定したとき(それは図4におけるケースである。)、分岐アドレス計算器108は、スロット0の中の分岐命令の変位、及びプログラム・カウンタ112の出力を用いて、スロット0目標アドレス(S0TA)124を発生し、そのスロット0目標アドレス(S0TA)124を用いて、分岐命令の目標アドレスをプリフェッチする。次いで、DCL164は、MUX126を用いてS0TA124を選択して、分岐先アドレス$30をアドレス・バス128上へ駆動する(285)。次いで、S0TA124に対応する目標命令は、第7のクロック・サイクル中にバス168及びデータ・バスを介して戻される。この場合、BTBの中のエントリは、それが取られるよう解決される場合分岐のため割り当てられ、それにより分岐命令の後続の遭遇の際に、分岐アドレス計算器108がS0TA値を発生するのを待つこと無しに、BTBヒットが生じ得て、そして分岐先フェッチが1サイクル早くに行われ得る。
DCL164が機能停止信号に関する条件がアサートされたことを決定したとき、分岐命令の目標アドレス及び分岐命令アドレスが、後続のクロック・サイクル中に分岐先バッファ144の中にロードされない(290)。それは、BTB144にロードすることが別の機能停止条件の存在に起因してプロセッサ184におけるいずれのサイクル・セービングをもたらさないからである。この機能停止条件は、メモリ166がいずれの追加の機能停止サイクルを導入することなしに、分岐先命令をプロセッサ184に戻す機会を与え、従って、BTBエントリが、割り当てられことが必要でない。この条件は、図4に存在しない。次いで、プロセッサ184は、次のサイクルに進む。
第6のクロック・サイクル中に、第5のクロック・サイクル中にスロット0の中であった分岐命令I2が、命令レジスタ116の中にロードされ、命令I3が、スロット1からスロット0の中にロードされ、命令I4が、データ・バス130からスロット1の中にロードされ、そして命令I5が、データ・バス130からスロット2の中にロードされる。DCL164は、演算コード176を用いて、命令レジスタ116の中の命令I2が分岐命令であるかどうかを決定する(210)。DCL164が命令レジスタ116の中の命令が分岐命令であることを決定したとき、DCL164は、命令レジスタ116の中の分岐命令がスロット1の中にプリフェッチされたかどうかを決定する(215)。DCL164が命令レジスタ116の中の分岐命令がスロット1の中にプリフェッチされなかったが、しかしスロット0の中にプリフェッチされたことを決定したとき(220)、DCL164は、分岐先がスロット0から要求されたかどうかを決定する(222)。分岐先がサイクル5においてスロット0から要求されたので、DCL164は、プロセッサを機能停止するかどうかを決定する(226)。図4のケースにおいては、プロセッサ機能停止条件が、存在しない。ひとたびDCL164が分岐命令が取られた分岐命令であることを決定すると、分岐命令アドレス及び命令レジスタ116の中の分岐命令の分岐先アドレスは、ラインPC110及びIRTA120のそれぞれを介してBTB144の中の使用可能なスロットの中にロードされ、そしてロードされたエントリと関連したBTB144の中のフラグ・ビットが、アサートされる(300)。制御回路172は、ライン173を用いて、BTB144の中のどのスロットが分岐命令アドレス及び分岐先アドレスを格納するため用いられるかを決定する。BTB144は、ここで、命令I2に対応する分岐命令アドレス及び命令T0に対応する分岐先アドレスを含む。
第7のクロック・サイクル中に、分岐先アドレス$30に対応し且つ第5のクロック・サイクル中に要求された命令T0及びT1は、データ・バス130上に戻される。第6のクロック・サイクル中に、命令I2が取られた分岐命令として復号されたので、分岐命令が復号された後で且つ分岐先命令が命令バッファ105の中にロードされる前に命令レジスタ116、スロット0、スロット1等の中にロードされたいずれの命令は、重要でないと考えられ、そして第7のクロック・サイクル中にDCL164により復号されず、それは、プロセッサ184における機能停止条件、及びI3、I4及びI5が、フラッシュ・アウト(flush out)されることをもたらす。
第8のクロック・サイクル中に、メモリ166の中の分岐先アドレスに対応する命令T0及びT1は、命令レジスタ116、及びプリフェッチ・バッファ102のスロット0のそれぞれにロードされる。同様に、第9のクロック・サイクル中に、スロット0からの命令T1は、IR116等の中にロードされ、そしてDCL164は、前のクロック・サイクルに関して前述した動作を実行する。
図1に示される本発明の一実施形態においては、図5を参照すると、追加の命令は、メモリ166にロードされ済みである。BTB144は、BIAスロットにロードされた分岐先アドレス$8、対応のBTAスロットにロードされた分岐先アドレス$30、及び図4の例に示されるようにアサートされた関連のフラグ・ビットを有する。第1のクロック・サイクル中(図5参照)に、DCL164は、2つのスロットが命令バッファ105において使用可能であるかどうかを決定する。DCL164が、2つのスロット、この場合、命令レジスタ116及びスロット0が命令バッファ105において使用可能であると決定したとき、要求信号199が、アサートされ、そして命令レジスタ116及びスロット0が、確保される。設定された現在のクロック・サイクル中にフェッチされている初期命令に対応する命令アドレスは、プログラム・カウンタ112によりIIA123を介してMUX126に与えられる。DCL164は、MUX126を用いて、初期命令アドレスを選択し、次いでその初期命令アドレスは、アドレス・バス128上へ駆動されて、メモリ166の中のアドレス$0及びアドレス$4に配置された命令I0及びI1を要求する。
アドレス・バス128上へ駆動された命令アドレス$0は、ラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、その捕捉された命令アドレスを$8だけ増分する。その増分されたアドレス$8は、加算器156により順次命令アドレス158として出力される。
比較器170は、アドレス・バス128上へ駆動されたアドレスを受け取って、そしてそのアドレスをBTB144に格納されている分岐命令アドレスと比較する。図5に示される例に関して、比較器170は、サイクル1においてアドレス・バス128上へ駆動された命令アドレスがBTB144の中の分岐命令アドレスと一致しないことを決定し、そして比較器一致信号197をディアサートする。比較器一致信号197がディアサートされるので、DCL164は、BTBTA178を、アドレス・バス128上へ駆動されるべき命令アドレスとして選択しない。
第2のクロック・サイクル中に、DCL164は、命令バッファ105の2つのスロットが2つの命令を格納するため使用可能であるかどうかを決定する。2つのスロットが、この場合、スロット1及びスロット2が、プリフェッチ・バッファ102において使用可能であるので、DCL164は、要求信号199をアサートし、スロット1及び2を確保し、そしてSIA158を選択する。順次命令アドレス$8が、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、その捕捉された命令アドレスを$8だけ増分し、$10の順次命令アドレスを生成する。
比較器170は、アドレス・バス128上へ駆動されたアドレスを、BTB144の中のBIAスロットにある分岐命令アドレス$8と比較し、そしてBTBヒットが生じたことを決定する。BTBヒットに応答して、比較器170は、比較器一致信号197をアサートする。次いで、比較器170は、分岐命令アドレス、この場合$30を選択する。な、この分岐命令アドレス$30は、信号180及びMUX154を用いてBTBヒットを発生した分岐命令アドレスに対応する。この選択された分岐命令アドレスは、分岐先分岐バッファ目標アドレス(BTBTA)178を用いてMUX126に与えられる。
第3のクロック・サイクル中に、第4のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレスに対応する命令I0及びI1は、データ・バス130上へ駆動されて、第4のクロック・サイクル中に命令レジスタ116及びプリフェッチ・バッファ102のスロット0の中にロードされる。DCL164は、プリフェッチ・バッファ102の2つのスロット、即ちスロット3及び4が2つの命令をメモリ166から格納するため使用可能であることを決定し、要求信号199をアサートし、そしてスロット3及び4を確保する。比較器一致信号197がアサートされたので、DCL164は、BTBTA178を選択し、そして分岐命令アドレス$30をアドレス・バス128上へ駆動する。
アドレス・バス128上へ駆動される上記の選択された分岐先バッファ目標アドレス$30は、ラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、遅延されたその命令アドレスを$8だけ増分し、$38の順次命令アドレスを生成する。比較器170は、アドレス・バス128上へ駆動されたアドレス$30とBTB144に格納された分岐命令アドレスとを比較し、そしてBTBミスが生じたことを決定する。BTBミスに応答して、比較器170は、比較器一致信号197をディアサートし、そしてBTBTA178を選択しない。
第4のクロック・サイクル中に、DCL164は、プリフェッチ・バッファ102の中の2つのスロットが2つの命令をメモリ166から格納するため使用可能であるかどうかを決定する。この場合、1つのスロットのみがプリフェッチ・バッファ102において使用可能であるので、要求信号199は、ディアサートされ、追加のスロットが確保されなくて、そしてDCL164は、SIA158を選択する。しかしながら、メモリ166におけるアドレス$34の後の追加の命令が、図5の例において示されていないので、アドレス・バス128上へ駆動された命令アドレス及びクロック・サイクル4の後の対応の命令について実行される動作は、更に詳細には説明しない。
第5のクロック・サイクル中に、第3のクロック・サイクル中にアドレス・バス128上へ駆動された分岐命令アドレス$30に対応する命令T0及びT1は、データ・バス130上へ駆動されて、第6のクロック・サイクル中にプリフェッチ・バッファ102のスロット0及びスロット1の中にロードされる。第4のクロック・サイクル中にスロット0にあった命令I1は、命令レジスタ116の中にロードされる。第4のクロック・サイクル中にデータ・バス130上にあった命令I2及びI3は、スロット0及びスロット1のそれぞれの中にロードされる。第6のクロック・サイクル中に、分岐命令I2は、実行のため命令レジスタ116の中にロードされる。第7のクロック・サイクル中に、新しい目標ストリームが確立されてしまい、そしてプロセッサ184の機能停止無しでT0の実行を始める。次いで、DCL164は、前のクロック・サイクルにおける上記で説明した図4及び図5の動作を実行する。
本発明の一実施形態においては、図4に示されるコードのシーケンス及びタイミング図は、図4にリストされたコードのセグメントを含むループの第1回の繰り返しとして見ることができる。図5は、図4に示される同じループの全ての後続の繰り返しとして見ることができ、そこにおいては、分岐命令アドレス$8及び分岐先アドレス$30のためのBTBエントリが、図4に示されるループの第1回繰り返し中にロードされた。図4においてDCL164を介して、先取り分岐スキームを用いることが依然1サイクルを要することを検出することにより、BTBエントリを選択的に割り当てることにより、機能停止サイクルが、ループの全ての後続の繰り返しで回復されることができる。
図1に示される本発明の一実施形態において、図6を参照すると、第1のクロック・サイクル中に、DCL164は、2つのスロットが命令バッファ105において使用可能であるかどうかを決定する。DCL164が2つのスロットが命令バッファ105、この場合命令レジスタ116及びスロット0において使用可能であることを決定したとき、要求信号199が、アサートされ、そして2つのスロット、即ち命令レジスタ116及びスロット0が、確保される。要求信号199が、DCL164からメモリ166に与えられ、そしてその要求信号199を用いて、命令がメモリ166からフェッチされることを要求する。フェッチされている初期命令に対応する命令アドレスが、プログラム・カウンタ112によりIIA123を介してMUX126に与えられる。DCL164は、MUX126を用いて、初期命令アドレス123を選択し、次いで、その初期命令アドレス123は、アドレス・バス128上へ駆動されて、メモリ166の中のアドレス$0及びアドレス$4に位置された命令I0及びI1を要求する。
アドレス・バス128上へ駆動された命令アドレス$0は、ラッチ160、比較器170及びメモリ166に与えられる。アドレス・バス128及び加算器156に結合されているラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉する。次いで、加算器156は、現在の命令アドレスをダブルワード・フェッチ・サイズ$8だけ増分する。前述したように、ダブルワード・フェッチ・サイズは、本発明の異なる実施形態において変わり得て、そしてフェッチされている各命令のサイズに依存する。
比較器170は、アドレス・バス128上へ駆動された命令アドレスを受け取って、そしてその命令アドレスを、あるならば分岐先バッファ144に格納されている1つ又は複数の命令アドレスと比較する。図6に示される例においては、BTBミスが、第1のクロック・サイクル中に生じてしまい、従って、比較器一致信号197が、ディアサートされ、そしてBTBTA178は、DCL164により選択されない。
第2のクロック・サイクル中に、DCL164は、命令バッファ105の2つのスロットが2つの命令を格納するため使用可能であるかどうかを決定する。2つのスロットがプリフェッチ・バッファ102、この場合スロット1及びスロット2において使用可能であるので、DCL164は、要求信号199をアサートし、スロット1及び2を確保し、そしてSIA158を選択する。順次命令アドレス$8が、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、その捕捉された命令アドレスを$8だけ増分し、$10の順次命令アドレスを生成する。比較器170は、BTBヒットか又はBTBミスかがアドレス・バス128上へ駆動された命令アドレスとあるならばBTB144の中の有効な分岐先アドレスとの間で生じたかどうかを決定する。この場合、アドレス・バス128上へ駆動されたアドレスとBTB144の分岐命令アドレス部分に格納されているいずれのアドレスとの間に一致が存在しないので、BTBミスが、生じており、そして比較器一致信号197は、ディアサートされる。アドレス・バス128上へ駆動された順次命令アドレス$8に対応する命令I2及びI3は、フェッチされ、そして第4のクロック・サイクル中にバス168及びデータ・バス130を介してプリフェッチ・バッファ102に与えられる。
第3のクロック・サイクル中に、第1のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレスに対応する命令I0及びI1は、データ・バス130上へ駆動されて、第4のクロック・サイクル中に命令レジスタ116及びプリフェッチ・バッファ102のスロット0の中にロードされる。DCL164は、プリフェッチ・バッファ102の2つのスロット、即ちスロット3及び4が2つの命令をメモリ166から格納するため使用可能であるかどうかを決定し、そして要求信号199をアサートし、スロット3及び4を確保し、そしてSIA158を選択する。その選択された順次命令アドレス$10は、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、その捕捉された命令アドレスを増分し、$18の順次命令アドレスを生成する。比較器170は、BTBヒットか又はBTBミスがアドレス・バス128上へ駆動された命令アドレスとあるならばBTB144に格納されている分岐命令アドレスとの間で生じたかどうかを決定する。図6の例においては、BTBミスが生じており、比較器一致信号197がディアサートされ、そして比較器170は、BIAに対応するBTBTA178を選択しない。
第4のクロック・サイクル中に、DCL164は、プリフェッチ・バッファ102の中の2つのスロットが2つの命令をメモリ166から格納するため使用可能であるかどうかを決定する。この場合、第1の3クロック・サイクル中の3つの前のフェッチ(1フェッチ当たり2命令で)がプリフェッチ・バッファ102の中の6つのスロットを一杯にし、又は確保してしまうので、2つのスロットは、2つの追加の命令をメモリ166から格納するため使用可能でない。従って、要求信号199が、ディアサートされ、追加のスロットが、確保されなく、そしてDCL164は、SIA158を選択する。SIA158が選択されるので、順次命令アドレス$18は、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。しかしながら、要求信号199がディアサートされるので、アドレス・バス128上へ駆動された命令アドレス$18に対応する命令は、2つのスロットがプリフェッチ・バッファ102において使用可能でないので、第4のクロック・サイクル中に要求されない。比較器170は、要求されかったアドレスを受け取って、そしてその要求されなかったアドレスをBTB144のBIAと比較する。しかしながら、DCL164は、要求信号199がディアサートされたとき比較器170により送られたいずれの比較器一致信号197も無視する。
サイクル4において、第1のクロック・サイクル中に要求された命令I0は、命令レジスタ116の中にロードされ、そしてまた第1のクロック・サイクル中に要求された命令I1は、スロット0の中にロードされる。第2のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレス$8に対応する命令I2及びI3は、バス168及びデータ・バス130上に置かれて、第5のクロック・サイクルの始めにプリフェッチ・バッファ102のスロット0及びスロット1の中にロードされる。
DCL164は、命令I0の演算コード176を命令レジスタ116から受け取って、そしてその命令が分岐命令であるかどうかを決定する(210)。DCL164は、データ処理システム100で用いられる分岐命令の演算コードを知っており、そしてその受け取られた演算コード176をプロセッサ184の演算コードと比較することができる。DCL164が命令レジスタ116の中の命令I1が分岐命令でないことを決定したとき、DCL164は、スロット0の中の命令I1の演算コード190を用いて、スロット0の中にロードされた命令が分岐命令であるかどうかを決定する(235)。DCL164がスロット0の中にロードされた命令が分岐命令でないことを決定したとき、DCL164は、スロット1の中に格納された命令の演算コード192を用いて、スロット1の中に分岐命令があるかどうかを決定する(240)。この場合、スロット1は、まだ有効な命令を含まない。DCL164が命令バッファ105に(即ち、命令レジスタ116の中及びプリフェッチ・バッファ102のスロット0及び1の中に)格納されている命令のいずれの所定のサブセットの中に分岐命令がないことを決定したとき、現在のサイクルは、分岐処理無しで終わり(260)、そしてプロセッサ184は、第5のクロック・サイクルに進む。
図6に示される例においては、命令I0は、2クロック・サイクルの実行を要求するマルチサイクル命令であり、そして命令I1は、命令I0の結果へのデータ依存性を有する。このデータ依存性に起因して、プロセッサ184の機能停止が起きて、命令I1の実行の前に命令I0の完了を可能にする。命令I1は、こうして、サイクル5を越えた追加のサイクルの間に命令レジスタ116に保持される。
第5のクロック・サイクルの始めに、第2のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレス$8に対応する命令I2及びI3は、バス168及びデータ・バス130から捕捉され、そしてプリフェッチ・バッファ102のスロット1及びスロット2の中にロードされる。第3のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレス$10に対応する命令I4及びI5は、バス168及びデータ・バス130上に置かれて、第6のクロック・サイクル中にプリフェッチ・バッファ102のスロット2及びスロット3の中にロードされる。第4のクロック・サイクル中に命令レジスタ116に存在する命令I0は、スロット0からの命令I1と置換される。第2のクロック・サイクル中に要求された命令I2及びI3は、スロット0及びスロット1のそれぞれにロードされる。命令I0は、この場合1つの追加サイクルの実行を要求し、そして命令I0とI1との間のデータ依存性に起因して、サイクル5は、図6において脇にアスタリスクを付したI1により示される、命令の復号のための機能停止サイクルとなる。
命令レジスタ116、スロット0及びスロット1の中にロードされた命令I1、I2及びI3の演算コード176、190、192は、DCL164に与えられる。DCL164は、命令レジスタ116に格納されている命令I1の演算コード176を受け取り、そしてその命令が分岐命令であるかどうかを決定する(210)。DCL164が命令レジスタ116に配置された命令I1が分岐命令でないことを決定したとき、DCL164は、演算コード190を用いて、スロット0の中の命令I2が分岐命令かどうかを決定する(235)。
DCL164がスロット0の中にロードされた命令が分岐命令であると決定したとき、重複の分岐先フェッチイングを回避するため、DCL164は、スロット0の中の分岐命令がスロット1からスロット0に与えられたかどうかを決定する(265)。DCL164がスロット0の中の分岐命令がスロット1から命令レジスタ116に与えられなかったことを決定したとき、DCL164は、I2に関してBTB144ヒットがあったかどうかを決定する(270)。
DCL164が比較器一致信号197がディアサートされた(BTBミス)ことを決定したとき(それは、図6におけるケースである。)、DCL164は、DCL164における機能停止信号に関する条件がアサートされたかどうかを決定する(280)。DCL164における機能停止信号に関する条件は、プロセッサ184が例えば1つの命令の前の命令に対する依存性と関連した理由のため機能停止したかどうかを指示する。この場合、マルチサイクル命令I0と命令I1との間のデータ依存性に起因したプロセッサ184の機能停止が存在する。DCL164がDCL164における機能停止信号に関する条件がアサートされたことを決定したとき(それは、図6におけるケースである。)、分岐アドレス計算器108は、スロット0の中の分岐命令の変位及びプログラム・カウンタ112の出力を用いて、スロット0目標アドレス(S0TA)124を発生し、次いで、そのスロット0目標アドレス(S0TA)124を用いて、分岐命令の目標アドレスをプリフェッチする。次いで、DCL164は、MUX126を用いてS0TA124を選択して、分岐先アドレス$30をアドレス・バス128上へ駆動する。次いで、S0TA124に対応する目標命令は、第7のクロック・サイクル中にバス168及びデータ・バスを介して戻される。DCL164が機能停止信号に関する条件がアサートされたことを決定したとき、分岐命令の目標アドレス及び分岐命令アドレスは、後続のクロック・サイクル中に分岐先バッファ144の中にロードされない(290)。それは、BTB144にロードすることが別の機能停止条件の存在に起因してプロセッサ184におけるいずれのサイクル・セービングをもたらさないからである。
この場合、分岐命令は、実行のため命令レジスタ116に到着する前の十分早くに復号され、そのため分岐先は、追加のプロセッサ184の機能停止を引き起こして目標命令が到着するのを待つことなしに、メモリからフェッチされ、そして実行のためプロセッサに戻るよう到着することができる。プロセッサ184に存在する機能停止条件に起因して、分岐先フェッチが、追加の機能停止サイクルを招くことなしに、S0TA124を用いてスロット0からなされ得る。この場合、この分岐のためBTBエントリを割り当てることにとって利点はない。それは、分岐命令が命令レジスタにおける実行を完了する前にスロット0からなされた目標フェッチ要求に応答するのに十分な時間がメモリに対して使用可能であるからである。この機能停止条件は、メモリ166がいずれの追加の機能停止サイクルを導入することなしに分岐先命令をプロセッサ184に戻す機会を与え、従って、BTBエントリが割り当てられることが必要でない。次いで、プロセッサ184は、次のサイクルに進む。
第6のクロック・サイクル中に、第5のクロック・サイクル中にスロット0の中にあった分岐命令I2は、スロット0の中に留まり、命令I3は、スロット1の中に留まり、命令I4は、データ・バス130からスロット2の中にロードされ、そして命令I5は、データ・バス130からスロット3の中にロードされる。
第7のクロック・サイクル中に、第5及び第6のクロック・サイクル中にスロット0の中にあった分岐命令I2は、命令レジスタ116の中にロードされ、命令I3は、スロット1からスロット0の中にロードされ、命令I4は、スロット2からスロット1の中にロードされ、そして命令I5は、スロット4からスロット3の中にロードされる。目標命令T0及びT1は、メモリ166から戻され、そしてクロック8においてデータ・バス130上に置かれて、命令バッファ105の中にロードされる。DCL164は、演算コード176を用いて、命令レジスタ116の中の命令I2が分岐命令であるかどうかを決定する(210)。DCL164が命令レジスタ116の中の命令が分岐命令であることを決定したとき、DCL164は、命令レジスタ116の中の分岐命令がスロット1の中にプリフェッチされたかどうかを決定する(215)。DCL164が命令レジスタ116の中の分岐命令がスロット1の中にプリフェッチされなかったが、しかしスロット0の中にプリフェッチされたことを決定したとき(220)、DCL164は、分岐先がスロット0から要求されたかどうかを決定する(222)。分岐先がサイクル5においてスロット0から要求されたので、DCL164は、プロセッサ184がデータ依存性のような別の条件のため機能停止されたかどうかを決定する(226)。図6のケースにおいては、プロセッサの機能停止条件が、存在した。ひとたびDCL164がこのことを決定すると、BTB144の更新は、実行されず、そしてプロセッサ184は、目標命令が到着するのを待つ(300)。
第7のクロック・サイクル中に、第5のクロック・サイクル中に要求された分岐先アドレス$30に対応する命令T0及びT1は、データ・バス130上に戻される。第7のクロック・サイクル中に命令I2が取られた分岐命令として復号されるので、分岐命令に続き且つ命令バッファ105の中にロードされたいずれの順次命令は、重要でないと考えられ、そして第7のクロック・サイクル中DCL164により復号されなく、その結果I3、I4及びI5が第8のクロック・サイクルにおいてフラッシュ・アウトされることをもたらす。
第8のクロック・サイクル中に、メモリ166の中の分岐先アドレスに対応する命令T0及びT1は、命令レジスタ116及びプリフェッチ・バッファ102のスロット0のそれぞれの中にロードされる。同様に、第9のクロック・サイクル中に、スロット0からの命令T1は、IR116等にロードされ、そしてDCL164は、前のクロック・サイクルに関して前述した動作を実行する。
図1に示される本発明の一実施形態において、図7を参照すると、第1のクロック・サイクル中に、DCL164は、2つのスロットが命令バッファ105において使用可能であるかどうかを決定する。DCL164が2つのスロット、この場合命令レジスタ116及びスロット0において使用可能であることを決定したとき、要求信号199が、アサートされ、そして2つのスロット、即ち命令レジスタ116及びスロット0が、確保される。要求信号199は、DCL164からメモリ166に与えられ、そしてその要求信号199を用いて、命令がメモリ166からフェッチされることを要求する。フェッチされている初期命令に対応する命令アドレスは、プログラム・カウンタ112によりIIA123を介してMUX126に与えられる。DCL164は、MUX126を用いて、初期命令アドレス123を選択し、次いでその初期命令アドレス123は、アドレス・バス128上へ駆動されて、メモリ166の中のアドレス$0及びアドレス$4に位置された命令I0及びI1を要求する。
アドレス・バス128上へ駆動された命令アドレス$0は、ラッチ160、比較器170及びメモリ166に与えられる。アドレス・バス128及び加算器156に結合されているラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉する。次いで、加算器156は、現在の命令アドレスをダブルワード・フェッチ・サイズ$8だけ増分する。前述したように、ダブルワード・フェッチ・サイズは、本発明の異なる実施形態において変わり得て、そしてフェッチされている各命令のサイズに依存する。ラッチ160による捕捉、及び加算器156によるアドレス・バス128上のアドレスの増分は、アドレス・バス128上へ駆動されたアドレスが存在し且つ要求がメモリに対してなされる場合全てのクロック・サイクル中で生じる。増分されたアドレス、この場合$8は、加算器156により順次命令アドレスSIA158として出力される。
比較器170は、アドレス・バス128上へ駆動されたアドレスを受け取り、そしてそのアドレスを、あるならば分岐先バッファ144に格納されている1又は複数の分岐命令アドレスと比較する。
比較器170が、アドレス・バス128上へ駆動されたアドレスがBTB144の中のいずれの分岐命令アドレスに一致しないことを、又はアドレス・バス128上へ駆動されたアドレスがBTB144の中の分岐命令アドレスに一致するがしかし一致したBIAアドレスに対応するフラグ・ビットが無効であることを決定したとき、BTBミスが、生じており、そして比較器一致信号197が、比較器170によりディアサートされる。比較器一致信号197がディアサートされたとき、DCL164は、BTBTA178をアドレス・バス128上へ駆動されるべきアドレスとして選択しない。図7に示される例においては、BTBミスは、第1のクロック・サイクル中に生じており、従って、比較器一致信号197は、ディアサートされ、そしてBTBTA178は、DCL164により選択されない。
第2のクロック・サイクル中に、DCL164は、命令バッファ105の2つのスロットが2つの命令を格納するため使用可能であるかどうかを決定する。2つのスロット、この場合スロット1及びスロット2がプリフェッチ・バッファ102において使用可能であるので、DCL164は、要求信号199をアサートし、スロット1及び2を確保し、そしてSIA158を選択する。順次命令アドレス$8が、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、その捕捉された命令アドレスを$8だけ増分し、$10の順次命令アドレスを生成する。比較器170は、BTBヒットか又はBTBミスがアドレス・バス128上へ駆動されたアドレス$8とあるならばBTB144の中の有効な分岐命令アドレスとの間で生じたかどうかを決定する。この場合、アドレス・バス128上へ駆動されたアドレスとBTB144の分岐命令アドレス部分に格納されたいずれのアドレスとの間に一致が存在しないので、BTBミスが、生じており、そして比較器一致信号197が、ディアサートされる。アドレス・バス128上へ駆動された順次命令アドレス$8に対応する命令I2及びI3が、第4のクロック・サイクル中に、フェッチされ、そしてバス168及びデータ・バス130を介してプリフェッチ・バッファ102に与えられる。
第3のクロック・サイクル中に、第1のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレスに対応する命令I0及びI1は、データ・バス130上へ駆動されて、第4のクロック・サイクル中に命令レジスタ116及びプリフェッチ・バッファ102のスロット0の中にロードされる。DCL164は、2つのスロット、即ち、プリフェッチ・バッファ102のスロット3及び4が2つの命令をメモリ166から格納するため使用可能であることを決定し、そして要求信号199をアサートし、スロット3及び4を確保し、そしてSIA158を選択する。その選択された順次命令アドレス$10は、アドレス・バス128上へ駆動され、そしてラッチ160、比較器170及びメモリ166に与えられる。ラッチ160は、アドレス・バス128上へ駆動された命令アドレスを捕捉し、そして加算器156は、その捕捉された命令アドレスを増分し、$18の順次命令アドレスを生成する。比較器170は、BTBヒットか又はBTBミスかがアドレス・バス128上へ駆動されたアドレス$10と、あるならばBTB144に格納された分岐命令アドレスとの間に発生したかどうかを決定する。図7に示されるケースにおいて、BTBミスが生じ、比較器一致信号197が、ディアサートされ、そして比較器170が、BIAに対応するBTBTA178を選択しない。
第4のクロック・サイクル中に、DCL164は、プリフェッチ・バッファ102の中の2つのスロットが2つの命令をメモリ166から格納するため使用可能であるかどうかを決定する。この場合、第1の3クロック・サイクル中の3つの前のフェッチ(1フェッチ当たり2つの命令で)は、プリフェッチ・バッファ102の中の6スロットを一杯にし、又は確保してしまうので、2つのスロットは、2つの追加の命令をメモリ166から格納するため使用可能でない。従って、要求信号199は、ディアサートされ、そして追加のスロットが確保されない。DCL164は、要求信号199がディアサートされたとき比較器170により送られたいずれの比較器一致信号197も無視する。
サイクル4において、第1のクロック・サイクル中に要求された命令I0は、命令レジスタ116の中にロードされ、そしてまた第1のクロック・サイクル中に要求された命令I1は、スロット0の中にロードされる。第2のクロック・サイクル中にアドレス・バス128上へ駆動された命令アドレス$8に対応する命令I2及びI3は、バス168及びデータ・バス130上に置かれて、第5のクロック・サイクルの始めにプリフェッチ・バッファ102のスロット0及びスロット1の中にロードされる。
第5のクロック・サイクル中に、DCL164は、命令I1の演算コード176を命令レジスタ116から受け取り、そしてその命令が分岐命令であるかどうかを決定する(210)。DCL164が命令レジスタ116の中の命令I1が分岐命令でないことを決定したとき、DCL164は、スロット0の中の命令の演算コード190を用いて、スロット0の中にロードされた命令が分岐命令であるかどうかを決定する(235)。DCL164がスロット0の中にロードされた命令が分岐命令でないことを決定したとき、DCL164は、スロット1に格納された命令の演算コード192を用いて、スロット1の中に分岐命令があるかどうかを決定する(240)。この場合、スロット1は、分岐命令を含まない。DCL164がプリフェッチ・バッファ102のスロット1の中に分岐命令があることを決定したとき、BTB144における新しいエントリは、スロット1の中の分岐命令に関して割り当てられない(250)。この場合、分岐命令は、実行のため命令レジスタ116に到着する前の十分早くに復号され、そのため分岐先は、プロセッサ184の機能停止を引き起こして目標命令が到着するのを待つことなしに、メモリからフェッチされ、そして実行のためプロセッサに戻るよう到着することができる。この場合、この分岐のためBTBエントリを割り当てることにとって利点はない。それは、分岐命令が命令レジスタにおける実行を完了する前にスロット1からなされた目標フェッチ要求にメモリが応答するのに十分な時間が使用可能であるからである。
分岐アドレス計算器108は、スロット1の中の分岐命令の変位及びプログラム・カウンタ112の出力を用いて、スロット1の目標アドレス(S1TA)122を発生し、そのスロット1の目標アドレス(S1TA)122を用いて、分岐命令の目標アドレスをプリフェッチする。DCL164は、MUX126を用いて、SITA122を選択して、クロック・サイクル6において分岐命令アドレス$30をアドレス・バス128上へ駆動する。次いで、SITA122に対応する目標命令は、第8のクロック・サイクル中にバス168及びデータ・バスを介して戻される。
第6のクロック・サイクル中に、第5のクロック・サイクル中にスロット0の中にあった命令I2は、命令レジスタ116の中にロードされ、分岐命令I3は、スロット1からスロット0の中にロードされ、命令I4は、データ・バス130からスロット1の中にロードされ、そして命令I5は、データ・バス130からスロット2の中にロードされる。
第7のクロック・サイクル中に、分岐命令I3は、IR116の中に上昇移動し、そして後続の命令は、プリフェッチ・バッファ102の中に上昇移動する。
DCL164は、演算コード176を用いて、命令レジスタ116の中の命令I3が分岐命令であるかどうかを決定する(210)。DCL164が命令レジスタ116の中の命令が分岐命令であることを決定したとき、DCL164は、命令レジスタ116の中の分岐命令がスロット1の中にプリフェッチされたかどうかを決定する(215)。DCL164が命令レジスタ116の中の分岐命令がスロット1の中にプリフェッチされたことを決定したとき、DCL164は、分岐先がスロット1から要求されたかどうかを決定する(267)。分岐先がサイクル6においてスロット1から要求されたので、DCL164は、BTBエントリがロードされるべきでないと判断し、そして目標命令が到着するのを待つ(295)。
第7のクロック・サイクル中に、命令I3が、取られた分岐命令として復号されるので、分岐命令が復号された後でしかし分岐先命令が命令バッファ105の中にロードされる前に命令レジスタ116、スロット0、スロット1等の中にロードされたいずれの命令は、重要でないと考えられ、そしてフラッシュ・アウトされる。第8のクロック・サイクル中に、分岐先アドレス$30に対応し且つ第6のクロック・サイクル中に要求された分岐先命令T0及びT1は、データ・バス130上へ戻され、そしてデータ・バス130を介して命令レジスタ116及びプリフェッチ・バッファ102のスロット0のそれぞれの中にロードされる。同様に、第9のクロック・サイクル中に、スロット0からの命令T1は、IR116等の中にロードされ、そしてDCL164は、前のクロック・サイクルに関して前述した動作を実行する。
本発明が特定の伝導性タイプ又は電位の極性に関して説明されたが、当業者は、伝導性タイプ及び電位の極性を逆にし得ることを認めるであろう。
明細書においては、この発明は、特定の実施形態に関して説明した。しかしながら、当業者は、添付の特許請求の範囲から逸脱することなしに様々な変更及び変化を行うことができることを認めるであろう。例えば、メモリ166は、1又はそれより多くのコンピュータ・ハード・ディスク、フロッピー・ディスク(登録商標)、3.5インチ・ディスク、コンピュータ記憶テープ、磁気ドラム、スタティック・ランダム・アクセス・メモリ(SRAM)セル、ダイナミック・ランダム・アクセス・メモリ(DRAM)セル、電気的消去可能(EEPROM、EPROM、フラッシュ)セル、不揮発性セル、強誘電体又は強磁性体メモリ、コンパクト・ディスク(CD)、レーザ・ディスク、光ディスク、及びいずれの類似のコンピュータ可読媒体を含み得る。また、ブロック図は、図示されたブロック以外の別のブロックを含み得て、そしてより多い又はより少ないブロックを有し又は異なって配置され得る。また、フロー図は、異なって配置され、より多い又はより少ないステップを含み得て、又は複数のステップ、又は互いに同時に実行されることができる複数のステップに分離されることができるステップを有し得る。従って、本明細書及び図面は、限定的意味よりむしろ例示と考えるべきであり、そして全てのそのような変更は、本発明の範囲内に含まれることを意図している。
便益、他の利点及び問題の解法は、特定の実施形態に関して説明されたのものである。しかしながら、便益、利点、及びより顕著に生じる又は成る解法は、特許請求の範囲のいずれか又はその全ての臨界的、必要な、又は本質的特徴又は構成要素と解釈すべきでない。本明細書で用いられるように、用語「備える」、「備えている」、又はそれらのいずれの他の別の表現は、非排他的包含をカバーし、それにより構成要素のリストを備えるプロセス、方法、物品、又は装置は、それらの構成要素のみを含むのではなく、明示的にリストされない構成要素又はそのようなプロセス、方法、物品又は装置に本来的である構成要素を含み得る。
図1は、本発明の一実施形態に従ったデータ処理システムをブロック図形式で示す。 図2は、本発明の方法の一実施形態をフロー図形式で示す。 図3は、本発明の方法の一実施形態をフロー図形式で示す。 図4は、本発明の一実施形態に従ったデータ処理システムのタイミング図を示す。 図5は、本発明の一実施形態に従ったデータ処理システムのタイミング図を示す。 図6は、本発明の一実施形態に従ったデータ処理システムのタイミング図を示す。 図7は、本発明の一実施形態に従ったデータ処理システムのタイミング図を示す。

Claims (10)

  1. パイプライン化された処理システムにおける分岐先バッファ(BTB)においてエントリを割り当てる方法であって、
    命令を複数の命令からフェッチするステップと、
    前記複数の命令のうちの1つが分岐命令であることを決定するステップと、
    前記分岐命令を復号して、分岐先アドレスを決定するステップと、
    前記パイプライン化された処理システムにおいて更なる機能停止を引き起こすことなしに前記分岐先アドレス位置を獲得することができるかどうかを決定するステップと、
    BTBエントリを前記の決定に基づいて選択的に割り当てるステップと
    を備える方法。
  2. 前記分岐先アドレス位置を獲得することができるかどうかを決定する前記ステップが、複数のスロットを有するプリフェッチ・バッファの所定のスロットを調べて前記分岐命令を識別するステップを備える請求項1記載の方法。
  3. 前記分岐命令に対応する分岐先アドレスを前記BTBの所定のエントリにロードするステップを更に備える請求項2記載の方法。
  4. 前記BTBエントリの中の前記分岐先アドレスを用いて目標命令をプリフェッチするステップを更に備える請求項1記載の方法。
  5. 機能停止条件が前記パイプライン化された処理システムに存在することを決定するステップと、
    BTBエントリが前記停止条件のため割り当てられないであろうことを決定するステップと、
    前記分岐命令がメモリ位置からフェッチされるのを待つステップと
    を更に備える請求項1記載の方法。
  6. 前記決定するステップが更に、前記分岐命令がプリフェッチ・バッファの所定のスロットに割り当てられなかったこと及び他の停止条件が起きないであろうことを決定するステップを更に備える請求項1記載の方法。
  7. 複数のスロットを有し、命令を格納するプリフェッチ・バッファと、
    複数のエントリを有する分岐先バッファ(BTB)と、
    前記プリフェッチ・バッファ及び前記BTBに結合された制御論理ユニットと、を備え、
    前記制御論理ユニットは、前記分岐命令が前記プリフェッチ・バッファの前記複数のスロットのうちの所定のスロットで検出されなかった場合、前記BTBの前記複数のエントリのうちの1つのエントリを割り当てて、分岐命令の分岐先アドレスを受け取るようにする、データ処理システム。
  8. 前記複数のスロットのうちの前記所定のスロットが、命令レジスタの入力に結合された出力を有する第1のスロットであることを特徴とする請求項7記載のデータ処理システム。
  9. 先入れ先出し置換アルゴリズムを用いて、前記BTBをロードする請求項7記載のデータ処理システム。
  10. 前記BTBの前記複数のエントリの各エントリが、前記分岐命令のアドレスに関連したアドレス値を格納する第1ビット・フィールド、及び分岐先アドレスを格納する第2ビット・フィールドを含む請求項7記載のデータ処理システム。
JP2006543824A 2003-12-15 2004-11-12 分岐先バッファにおいてエントリを割り当てる方法及び装置 Pending JP2007514237A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/736,393 US7096348B2 (en) 2003-12-15 2003-12-15 Method and apparatus for allocating entries in a branch target buffer
PCT/US2004/037627 WO2005060458A2 (en) 2003-12-15 2004-11-12 Method and apparatus for allocating entries in a branch target buffer

Publications (1)

Publication Number Publication Date
JP2007514237A true JP2007514237A (ja) 2007-05-31

Family

ID=34653891

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006543824A Pending JP2007514237A (ja) 2003-12-15 2004-11-12 分岐先バッファにおいてエントリを割り当てる方法及び装置

Country Status (5)

Country Link
US (1) US7096348B2 (ja)
JP (1) JP2007514237A (ja)
KR (1) KR101089052B1 (ja)
TW (1) TWI358663B (ja)
WO (1) WO2005060458A2 (ja)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7225318B2 (en) * 2003-10-08 2007-05-29 Intel Corporation Dynamic prefetch in continuous burst read operation
US7437543B2 (en) * 2005-04-19 2008-10-14 International Business Machines Corporation Reducing the fetch time of target instructions of a predicted taken branch instruction
US9304773B2 (en) * 2006-03-21 2016-04-05 Freescale Semiconductor, Inc. Data processor having dynamic control of instruction prefetch buffer depth and method therefor
US7827392B2 (en) * 2006-06-05 2010-11-02 Qualcomm Incorporated Sliding-window, block-based branch target address cache
US7917731B2 (en) * 2006-08-02 2011-03-29 Qualcomm Incorporated Method and apparatus for prefetching non-sequential instruction addresses
US20080040590A1 (en) * 2006-08-11 2008-02-14 Lea Hwang Lee Selective branch target buffer (btb) allocaiton
US20080040591A1 (en) * 2006-08-11 2008-02-14 Moyer William C Method for determining branch target buffer (btb) allocation for branch instructions
US7640422B2 (en) * 2006-08-16 2009-12-29 Qualcomm Incorporated System for reducing number of lookups in a branch target address cache by storing retrieved BTAC addresses into instruction cache
US8276058B2 (en) * 2007-02-08 2012-09-25 The Jellyvision Lab, Inc. Method of automatically populating and generating flowerchart cells
US7895422B2 (en) * 2008-02-29 2011-02-22 Freescale Semiconductor, Inc. Selective postponement of branch target buffer (BTB) allocation
US7937573B2 (en) * 2008-02-29 2011-05-03 Freescale Semiconductor, Inc. Metric for selective branch target buffer (BTB) allocation
US8458170B2 (en) * 2008-06-30 2013-06-04 Yahoo! Inc. Prefetching data for document ranking
US8205068B2 (en) * 2008-07-29 2012-06-19 Freescale Semiconductor, Inc. Branch target buffer allocation
US8533441B2 (en) * 2008-08-12 2013-09-10 Freescale Semiconductor, Inc. Method for managing branch instructions and a device having branch instruction management capabilities
US8127115B2 (en) * 2009-04-03 2012-02-28 International Business Machines Corporation Group formation with multiple taken branches per group
WO2014108754A1 (en) 2013-01-11 2014-07-17 Freescale Semiconductor, Inc. A method of establishing pre-fetch control information from an executable code and an associated nvm controller, a device, a processor system and computer program products
CN105975252B (zh) * 2016-04-29 2018-10-09 龙芯中科技术有限公司 一种处理指令的流水线的实现方法、装置及处理器
GB2551548B (en) * 2016-06-22 2019-05-08 Advanced Risc Mach Ltd Register restoring branch instruction
GB201701841D0 (en) * 2017-02-03 2017-03-22 Univ Edinburgh Branch target buffer for a data processing apparatus
GB201802815D0 (en) * 2018-02-21 2018-04-04 Univ Edinburgh Branch target buffer arrangement for instruction prefetching
CN109634666B (zh) * 2018-12-11 2022-11-15 华夏芯(北京)通用处理器技术有限公司 一种预取机制下融合btb的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62224829A (ja) * 1986-03-25 1987-10-02 Nec Corp 命令キヤツシユ制御方式
JPH08234980A (ja) * 1995-02-27 1996-09-13 Mitsubishi Electric Corp 分岐先バッファを用いた分岐予測システム
JPH08241198A (ja) * 1995-03-06 1996-09-17 Fujitsu Ltd 分岐命令処理方法
JPH08320788A (ja) * 1995-05-24 1996-12-03 Mitsubishi Electric Corp パイプライン方式プロセッサ

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5701448A (en) * 1995-12-15 1997-12-23 Cyrix Corporation Detecting segment limit violations for branch target when the branch unit does not supply the linear address
US5996071A (en) 1995-12-15 1999-11-30 Via-Cyrix, Inc. Detecting self-modifying code in a pipelined processor with branch processing by comparing latched store address to subsequent target address
JPH10133874A (ja) * 1996-11-01 1998-05-22 Mitsubishi Electric Corp スーパスカラプロセッサ用分岐予測機構
US5909566A (en) * 1996-12-31 1999-06-01 Texas Instruments Incorporated Microprocessor circuits, systems, and methods for speculatively executing an instruction using its most recently used data while concurrently prefetching data for the instruction
US5986071A (en) * 1997-06-16 1999-11-16 City Of Hope Method for C-terminal degradation of peptides and proteins
US6157988A (en) * 1997-08-01 2000-12-05 Micron Technology, Inc. Method and apparatus for high performance branching in pipelined microsystems
US6154833A (en) * 1997-08-11 2000-11-28 Intel Corporation System for recovering from a concurrent branch target buffer read with a write allocation by invalidating and then reinstating the instruction pointer
US6157998A (en) * 1998-04-03 2000-12-05 Motorola Inc. Method for performing branch prediction and resolution of two or more branch instructions within two or more branch prediction buffers
US6308322B1 (en) * 1999-04-06 2001-10-23 Hewlett-Packard Company Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62224829A (ja) * 1986-03-25 1987-10-02 Nec Corp 命令キヤツシユ制御方式
JPH08234980A (ja) * 1995-02-27 1996-09-13 Mitsubishi Electric Corp 分岐先バッファを用いた分岐予測システム
JPH08241198A (ja) * 1995-03-06 1996-09-17 Fujitsu Ltd 分岐命令処理方法
JPH08320788A (ja) * 1995-05-24 1996-12-03 Mitsubishi Electric Corp パイプライン方式プロセッサ

Also Published As

Publication number Publication date
US7096348B2 (en) 2006-08-22
TW200535693A (en) 2005-11-01
US20050132173A1 (en) 2005-06-16
TWI358663B (en) 2012-02-21
WO2005060458A3 (en) 2005-11-03
KR101089052B1 (ko) 2011-12-02
KR20070001081A (ko) 2007-01-03
WO2005060458A2 (en) 2005-07-07

Similar Documents

Publication Publication Date Title
US7096348B2 (en) Method and apparatus for allocating entries in a branch target buffer
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
JP3875738B2 (ja) ロード・バッファを備えたロード/ストア・ユニット内にて切り離されたタグ及びデータ・アレイへのアクセス方法及びそのアレイを有する装置
JP5357017B2 (ja) 高速で安価なストア−ロード競合スケジューリング及び転送機構
US6065103A (en) Speculative store buffer
US7937573B2 (en) Metric for selective branch target buffer (BTB) allocation
US5941981A (en) System for using a data history table to select among multiple data prefetch algorithms
US8806141B2 (en) List based prefetch
US6076151A (en) Dynamic memory allocation suitable for stride-based prefetching
US6564313B1 (en) System and method for efficient instruction prefetching based on loop periods
US9632788B2 (en) Buffering instructions of a single branch, backwards short loop within a virtual loop buffer
US6189089B1 (en) Apparatus and method for retiring instructions in excess of the number of accessible write ports
US7447883B2 (en) Allocation of branch target cache resources in dependence upon program instructions within an instruction queue
US6161167A (en) Fully associate cache employing LRU groups for cache replacement and mechanism for selecting an LRU group
WO2000022516A1 (en) Method for processing branch operations
JP2006228241A (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
WO2002067112A2 (en) Cyclic prefetching of data and program code from memory
US7895422B2 (en) Selective postponement of branch target buffer (BTB) allocation
US7725659B2 (en) Alignment of cache fetch return data relative to a thread
WO2018059337A1 (zh) 数据处理装置和方法
EP1685481B1 (en) Methods of optimized memory access in a digital signal processor architecture
US20080250211A1 (en) Cache control method, cache device, and microcomputer
CN108536474B (zh) 延迟缓冲器
US20070239939A1 (en) Apparatus for Performing Stream Prefetch within a Multiprocessor System
KR20000003930A (ko) 명령어 캐시 미스 시 손실을 줄이기 위한 명령어 페치 장치

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071015

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100929

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110301