【手続補正書】
【提出日】平成19年3月16日(2007.3.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
デジタルプロセッサにおける分岐予測のための方法であって：
タグアレイとデータアレイとを有し、タグアレイにおける各エントリー（entry）はデータアレイにおける対応するエントリーを印付け（ｉｎｄｅｘ）するものである、分岐ターゲットバッファ（ＢＴＢ：Ｂｒａｎｃｈ  Ｔａｒｇｅｔ  Ｂｕｆｆｅｒ）を用意し；
タグアレイにおけるエントリーに現在の分岐命令の分岐タ−ゲットを表す情報を格納し；
データアレイにおける対応するエントリーに次の分岐命令の分岐ターゲットを表す情報を格納し；
タグアレイにおけるエントリーが一致したことに応答して次の分岐命令の分岐ターゲットを表す情報を提供することを含む分岐予測のための方法。
【請求項２】
請求項１の方法であって、現在の分岐命令の分岐ターゲットを表す情報を格納することが、分岐が成立した場合は現在の分岐命令の成立分岐ターゲットアドレスを格納し、分岐が成立しない場合は現在の分岐命令に続く次の逐次命令のアドレスを格納することを含む方法。
【請求項３】
請求項１の方法であって、次の分岐命令の分岐ターゲットを表す情報を格納することが、次の分岐命令の成立分岐ターゲットアドレスと、次の分岐命令に続く次の逐次命令のアドレスを表すオフセット値とを格納することを含むものである方法。
【請求項４】
請求項３の方法であって、現在のフェッチアドレスからオフセット値を減算するブロックサイズ計算を行い、オフセット値と現在のフェッチアドレスとの差があらかじめ定めた値よりも小さいときは命令フェッチを分岐ターゲットバッファにリダイレクトすることを含む方法。
【請求項５】
請求項１の方法であって、次の分岐命令の分岐ターゲットアドレスを表す情報を格納することが、次の分岐命令に対応する予測情報を格納し、次の分岐命令の実行に続いて予測情報を更新することをさらに含み、予測情報に応答して次の分岐命令の成立分岐ターゲットアドレスまたは次の逐次アドレスを選択することをさらに含む方法。
【請求項６】
請求項１の方法であって、次の分岐命令の分岐ターゲットを表す情報を提供することが、次の分岐命令の分岐ターゲットを表す情報に応答して、いつ次の分岐命令が実行されるかを決定することを含むものである方法。
【請求項７】
請求項１の方法であって、現在の分岐命令の分岐判定（ｂｒａｎｃｈ  ｒｅｓｏｒｕｔｉｏｎ）の際に使用するために、次の分岐命令の分岐ターゲットを表す情報をバッファに格納することをさらに含む方法。
【請求項８】
請求項１の方法であって、次の分岐命令の分岐ターゲットを表す情報を格納することが、次の分岐命令の成立分岐ターゲットアドレスおよび次の分岐命令の非成立分岐ターゲットアドレスを格納することを含む方法。
【請求項９】
デジタルプロセッサにおいて実行されるプログラムにおける分岐を予測するための装置であって；
タグアレイにおける各エントリーがデータアレイにおける対応するエントリーを印付けするものであるタグアレイとデータアレイとを有する分岐ターゲットバッファ（ＢＴＢ）と；
タグアレイ中のひとつの選択したエントリーに現在の分岐命令の分岐タ−ゲットを表す情報を格納する手段と；
データアレイ中の対応するエントリーに次の分岐命令の分岐ターゲットを表す情報を格納する手段と；
タグアレイ中のエントリーが一致したことに応答して次の分岐命令の分岐ターゲットを表す情報を分岐ターゲットバッファ（ＢＴＢ）から提供する手段とを含む分岐予測のための装置。
【請求項１０】
請求項９の装置であって、現在の分岐命令の分岐タ−ゲットを表す情報を格納する手段が、分岐が成立した場合は現在の分岐命令の成立分岐ターゲットアドレスを格納する手段、および分岐が成立しない場合は現在の分岐命令に続く次の逐次命令のアドレスを格納する手段を含むものである装置。
【請求項１１】
請求項９の装置であって、次の分岐命令の分岐ターゲットを表す情報を格納する手段が、次の分岐命令の成立分岐ターゲットアドレスと、次の分岐命令に続く次の逐次命令のアドレスを表すオフセット値とを格納する手段を含むものである装置。
【請求項１２】
請求項９の装置であって、次の分岐命令の分岐ターゲットを表す情報を格納する手段が、次の分岐命令の成立分岐ターゲットアドレスと、次の分岐命令の非成立分岐ターゲットアドレスとを格納する手段を含むものである装置。
【請求項１３】
請求項１２の装置であって、オフセット値を現在のフェッチアドレスから減算し、オフセット値と現在のフェッチアドレスとの差があらかじめ定めた値よりも小さいときに命令フェッチを分岐ターゲットバッファにリダイレクトするためのブロックサイズ計算ユニットをさらに含むものである装置。
【請求項１４】
請求項１３の装置であって、ブロックサイズ計算ユニットは、現在のフェッチアドレスからオフセット値を減算する減算器と、オフセット値と現在のフェッチアドレスとの差があらかじめ定めた値よりも小さいときに命令フェッチを分岐ターゲットバッファにリダイレクトするための比較器とを含むものである装置。
【請求項１５】
請求項９の装置であって、次の分岐命令の分岐ターゲットを表す情報を格納する手段が、次の分岐命令に対応する予測情報を格納し、次の分岐命令の実行に続いて予測情報を更新する手段を含み、予測情報に応答して次の分岐命令の成立分岐ターゲットアドレスまたは次の逐次アドレスを選択する手段をさらに含むものである装置。
【請求項１６】
請求項９の装置であって、現在の分岐命令の分岐判定において用いる、次の分岐命令の分岐ターゲットを表す情報を格納するバッファをさらに含むものである装置。
【請求項１７】
デジタルプロセッサにおいて実行されるプログラムにおける分岐を予測するための装置であって、
タグアレイにおける各エントリーがデータアレイにおける対応するエントリーを印付けするものであり、タグアレイ中のひとつの選択したエントリーに現在の分岐命令の分岐タ−ゲットを表す情報を格納し、データアレイ中の対応するエントリーには、次の分岐命令の成立分岐ターゲットアドレス、次の分岐命令の非成立分岐ターゲットアドレスおよび次の分岐命令に対応する予測情報を格納するようなタグアレイとデータアレイとを有する分岐ターゲットバッファと、
予測情報に応答して成立分岐ターゲットアドレスまたは非成立分岐ターゲットアドレスを選択するアドレス選択器と、
非分岐ターゲットアドレスと現在のフェッチアドレスとの差があらかじめ定めた値よりも小さいときに、命令フェッチを分岐ターゲットバッファにリダイレクトするためのブロックサイズ計算ユニットを含むものである装置。  
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【発明の名称】分岐ターゲットに基づいて分岐予測をするための方法および装置
【技術分野】
【０００１】
本発明はデジタルプロセッサに関し、より具体的には、分岐ターゲットに基づいて分岐予測をすることによって、デジタルプロセッサの処理能力を向上させるための方法および装置に関する。
【０００２】
発明の背景
デジタルシグナルコンピュータ、つまりデジタルシグナルプロセッサ（ＤＳＰ）は、特別の用途向けのコンピュータであり、たとえば高速フーリエ変換、デジタルフィルタ、画像処理、ワイヤレスシステムにおける信号処理、および音声認識などのデジタル信号処理を行うための処理能力を最適化するように設計される。デジタルシグナルプロセッサの適用は、通常、リアルタイムオペレーション、インタラプトレート（interrupt rate）および数値演算の集中（intensive numeric computation）によって特徴づけられる。さらに、デジタルシグナルプロセッサの適用は、メモリにアクセスする動作が集中し、大量のデータの入出力が必要となることが多い。デジタルシグナルプロセッサ構造は、典型的には、これらの演算を効率的に実行するために最適化される。デジタルシグナルプロセッサの適用に加えて、ＤＳＰは、マイクロコントローラの動作の実行を要することが多い。マイクロコントローラの動作はデータの受け渡しを伴うが、数値演算の集中を通常必要としない。
【０００３】
デジタルシグナルプロセッサは、パイプライン化されたアーキテクチャを利用して高い処理能力を実現している。この技術分野で知られているように、パイプライン化されたアーキテクチャは、複数のパイプラインステージを含んでおり、これらは、命令のフェッチ、命令の複合化、アドレスの生成、計算処理などの指定された動作をそれぞれ実行する。プログラム命令は、連続的なクロックサイクルでパイプラインステージに進み、いくつかの命令は、種々の完了ステージ（stage of completion）に同時に入ることができる。
【０００４】
処理能力は、多数のパイプラインステージを与えることで向上し得る。プロセッサにおけるパイプラインステージの数は、パイプラインの深さ（pipeline depth）と呼ばれることがある。パイプライン化されたアーキテクチャにより処理能力が向上するにもかかわらず、特定のプログラム条件においては処理能力が低下することもある。このようなプログラム条件の一例は、分岐命令である。分岐命令は、大多数のコンピュータプログラムに広く用いられており、これらにはたとえばデジタルシグナルプロセッサおよびマイクロコントローラへの適用が含まれる。分岐命令がパイプライン化されたプロセッサに進み、分岐予測をしない場合には、次の命令が分岐命令に続いてパイプラインに入る。分岐が成立した場合、そのときパイプライン内にある全ての命令を中止し、分岐ターゲットからの命令を再実行することによって、パイプラインを空の状態にしなければならない。分岐処理能力へのペナルティ（branch performance penalty）は、パイプラインの深さに比例する。深くパイプライン化されたアーキテクチャおよびプログラムであって、頻繁に分岐命令を有するものにとって、処理能力のペナルティは深刻である。
【０００５】
分岐予測技術は当該技術分野で知られている。典型的な従来技術の手法において、分岐キャッシュは、分岐命令および対応する予測情報のアドレスを含んでいる。分岐命令がフェッチされると、分岐が成立するかどうかを推測するためにこの予測情報が使われる。
従来技術の分岐予測技術においては、これらに限定されないが、過度の複雑さおよび電力消費が生じ、また、処理能力に限られた影響しか与えないといった欠点および不都合が生じていた。そこで、デジタルプロセッサにおいて分岐予測をするための改善された方法および装置が必要とされている。
【０００６】
発明の概要
本発明の第一の側面によれば、デジタルプロセッサにおいて分岐予測をするための方法が提供される。本発明の方法は、タグアレイおよびデータアレイを有する分岐ターゲットバッファであって、前記タグアレイのエントリー（ｅｎｔｒｙ）は、前記データアレイの対応するエントリーに指標を与える、前記分岐ターゲットバッファを与えること、現在の分岐命令の分岐ターゲットを表す情報を、前記タグアレイの選択されたエントリーに記憶すること、次の分岐命令の分岐ターゲットを表す情報を、前記データアレイの対応するエントリーに記憶すること、および前記タグアレイのエントリーに対する適合に応答して、前記次の分岐命令の分岐ターゲットを表す情報を与えること、を含む。
【０００７】
現在の分岐命令の分岐ターゲットを表す情報を記憶するステップは、分岐成立の場合に、現在の分岐命令の成立分岐ターゲットアドレスを記憶することを含んでもよい。現在の分岐命令の分岐ターゲットを表す情報を記憶するステップは、分岐不成立の場合に、現在の分岐命令に続く次の順番の命令のアドレスを記憶することを含んでもよい。
【０００８】
次の分岐命令の分岐ターゲットを表す情報を記憶するステップは、次の分岐命令の成立分岐ターゲットアドレスおよび非成立分岐ターゲットアドレスを記憶することを含んでもよい。非成立分岐ターゲットアドレスは、次の分岐命令に続く次の順番の命令のアドレスを表すオフセット値を含んでもよい。
本発明の方法は、オフセット値と現在のフェッチアドレスとの差が所定の値よりも小さい場合に、オフセット値を現在のフェッチアドレスから減算すること、および命令のフェッチを分岐ターゲットバッファにリダイレクトすることによって、ブロックサイズ計算を実行することをさらに含んでもよい。所定の値は、フェッチバッファの長さを表すものでもよい。
【０００９】
次の分岐命令の分岐ターゲットを表す情報を記憶するステップは、次の分岐命令に対応する予測情報を記憶することをさらに含んでもよい。該予測情報は、次の分岐命令の実行に続いて更新されてもよい。予測情報に応答して、次の分岐命令の成立分岐ターゲットアドレスか、または次の順番のアドレスが選択されてもよい。
【００１０】
本発明の別の側面によれば、デジタルプロセッサで実行されるプログラムにおける分岐を予測するための装置が提供される。本発明の装置は、タグアレイおよびデータアレイを有する分岐ターゲットバッファであって、前記タグアレイのエントリーは、前記データアレイの対応するエントリーに指標を与える、前記分岐ターゲットバッファと、現在の分岐命令の分岐ターゲットを表す情報を、前記タグアレイの選択されたエントリーに記憶する手段と、次の分岐命令の分岐ターゲットを表す情報を、前記データアレイの対応するエントリーに記憶する手段と、前記タグアレイのエントリーに対する適合に応答して、前記次の分岐命令の分岐ターゲットを表す情報を、前記分岐ターゲットバッファから与える手段を含む。
【００１１】
さらに本発明の一側面によれば、デジタルプロセッサで実行されるプログラムにおいて分岐を予測するための装置が提供される。本発明の装置は、タグアレイおよびデータアレイを有する分岐ターゲットバッファであって、前記タグアレイのエントリーは、前記データアレイの対応するエントリーに指標を与え、前記タグアレイの選択されたエントリーは、現在の分岐命令の分岐ターゲットを表す情報を記憶し、前記データアレイの対応するエントリーは、次の分岐命令の成立分岐ターゲットアドレス、次の分岐命令の非成立分岐ターゲットアドレス、および該次の分岐命令に対応する予測情報を記憶する、前記分岐ターゲットバッファと、前記予測情報に応答して、前記成立分岐ターゲットか、または非成立分岐ターゲットアドレスを選択する、アドレスセレクタと、前記非成立分岐ターゲットアドレスと現在のフェッチアドレスとの差が所定の値より小さい場合に、命令のフェッチを前記分岐ターゲットバッファにリダイレクトする、ブロックサイズ計算ユニットを含む。
【００１２】
詳細な説明
デジタルシグナルプロセッサ（ＤＳＰ）の一態様のブロック図を図１に示す。デジタルシグナルプロセッサは、演算コア１０およびメモリ１２を含む。演算コアは、ＤＳＰの中央処理機である。コア１０およびメモリ１２は、後で説明するようにパイプライン化されたアーキテクチャを有することがある。この態様において、コア１０は、命令フェッチユニット２０、命令復号ユニット２２、ロード／ストアユニット２４、実行ユニット３０および分岐レゾリューションユニット（branch resolution unit）を含み得るシステムユニット３２を含む。
【００１３】
命令フェッチユニット２０および命令復号ユニット２２については後述する。ロード／ストアユニット２４は、メモリ１２へのアクセスを制御する。メモリリードデータ（memory read data）は、メモリ１２から実行ユニット３０内のレジスタファイルに送られてもよい。メモリライトデータ（memory write data）は、実行ユニット３０内のレジスタファイルからメモリ１２に送られてもよい。命令フェッチユニット２０は、フェッチユニット２０において命令キャッシュミスがある場合に、メモリ１２にアクセスすることができる。後述するように、システムユニット３２は、分岐レゾリューション情報を命令フェッチユニット２０に提供する。実行ユニット３０は、命令実行の必要に応じて、加算器、乗算器、アキュムレータ、シフタなどを含んでもよい。
【００１４】
命令フェッチユニット２０および命令復号ユニット２２の簡略ブロック図を図２に示す。命令フェッチユニット２０は、ＰＣ（プログラムカウンタ）リダイレクションユニット４０、命令キャッシュ４２、命令キュー４４、命令配列ユニット（instruction alignment unit）４６および分岐予測器５０を含み得る。ＰＣリダイレクションユニット４０は、フェッチされる命令のアドレスを決定する。プログラム命令は、命令キャッシュ４２からフェッチされて命令キュー４４に移動され、配列ユニット４６によって整列させられる。整列された命令は、命令復号器２２によって複合化され、複合化された命令は、ロード／ストアユニット２４（図１）まで送られる。命令キャッシュミスがある事象では、要求された命令は、メモリ１２（図１）内でアクセスされる。通常のプログラムフローの間、プログラムカウンタが増加して、次の命令アドレスを生成する。分岐予測器５０は、後で詳細に述べるように、分岐命令を予測し、命令フェッチをリダイレクトして、処理能力に与える悪影響を制限するように動作する。分岐命令が実行された後は、分岐レゾリューション情報がシステムユニット３２（図１）から提供される。
【００１５】
演算コア１０は、好ましくはパイプライン化されたアーキテクチャを有する。このパイプライン化されたアーキテクチャは、公知のアーキテクチャであって、コアが同期動作する一連の関連ステージ（connected stage）を含み、命令実行が、連続したクロックサイクルで連続したパイプラインステージにおいて実行される一連の動作に分割されるものである。したがって、たとえば第一のステージが命令フェッチを実行し、第二のステージが命令復号を実行し、第三のステージがデータアドレス生成を実行し、第四のステージがデータメモリアクセスを実行し、第五のステージが特定の演算を実行するようにすることができる。パイプライン化されたアーキテクチャの利点は、動作速度が増すことである。これは、複数の命令が同時に処理され、異なる命令は異なる完了ステージにあるからである。図１に示されたユニットの各々は、１または２以上のパイプラインステージを含んでもよいことを理解されたい。例示にすぎないが、演算コア１０は３０ステージまで含んでもよい。
【００１６】
分岐予測器５０を図３により詳細に示す。リダイレクトされたＰＣアドレスは、第一の予測器６０および第二の予測器６２に供給される。予測器６０、６２は、対応する分岐命令が実行されるときに、各々の分岐が成立するか、または成立しないかを示す予測情報をそれぞれ含むことができる。予測器６０、６２の予測情報は、異なる基準に基づいていてもよい。予測器６０、６２の出力は、予測器セレクタ６４に供給される。また、予測器６２は、ターゲットアドレスをターゲット選択ユニット７０に供給する。ターゲット選択ユニット７０は、さらに次の順番のアドレスを受け取り、リターンアドレスをリターンスタック７２から受け取る。フェッチアドレスは、ＰＣリダイレクションユニット４０および予測されたアドレスＦＩＦＯ７４の入力に供給される。ＦＩＦＯ７４の出力は、ＰＣリダイレクションユニット４０に供給される。ＦＩＦＯ７４は、分岐リゾリューションユニット３２（図１）からのリダイレクション信号によって制御される。
【００１７】
図４Ａは、分岐命令を含むプログラム断片の一例を示す概略図である。各々のプログラム断片は、一連の命令および対応する命令アドレスを含む。プログラム断片１００は、アドレスＡ〜Ａ＋３２において命令１〜５をそれぞれ含んでいる。アドレスＡでの命令１は、前の分岐命令のターゲットである。プログラム断片１００は、アドレスＡ＋２４で分岐命令４を含む。プログラム断片１０２は、アドレスＢ〜Ｂ＋１６において命令２４〜２６をそれぞれ含んでいる。プログラム断片１０２は、アドレスＢ＋１６で分岐命令２６を含む。プログラム断片１０４は、アドレスＣ〜Ｃ＋１６において命令２７〜２９をそれぞれ含んでいる。プログラム断片１０４は、アドレスＣ＋８で分岐命令２８を含む。プログラム断片１００の分岐命令４は、プログラム断片１０２のアドレスＢにおける命令２４をターゲットにする。プログラム１０２の分岐命令２６は、アドレスＥにおける命令４０をターゲットにする。プログラム断片１０４の分岐命令２８は、アドレスＤにおける命令（図示せず）をターゲットにする。
【００１８】
図４Ａの各分岐命令は条件分岐である。この分岐命令によって定めた条件を満たす場合、分岐が成立して、「成立分岐ターゲット（taken branch target）」と呼ばれるターゲット命令がフェッチされる。上記条件を満たさない場合には、「非成立分岐ターゲット（not taken branch target）」と呼ばれる、この分岐命令に続く次の順番の命令がフェッチされる。「成立分岐ターゲットアドレス」は、上記成立分岐ターゲットに対応し「非成立分岐ターゲットアドレス」は、上記非成立分岐ターゲットに対応する。
【００１９】
本発明の一側面によれば、図２に示される分岐予測器５０は、分岐ターゲットバッファを含む。分岐ターゲットバッファ（ＢＴＢ）は、キャッシュメモリと類似の構造を有し、タグアレイおよびデータアレイを含む。ＢＴＢの各エントリーは、タグエントリーおよび対応するデータエントリーを含む。タグエントリーおよびデータエントリーは、それぞれ１または２以上のフィールドを含む。各タグエントリーは、命令アドレスの上位オーダーのビットに対応するタグアドレスを含む。このタグアドレスは、対応するデータエントリーの指標として役立つ。入力命令アドレスがタグアドレスに適合するとき、ＢＴＢヒットが生じ、対応するデータエントリーがアクセスされる。
【００２０】
本発明の一態様によれば、ＢＴＢの各エントリーは、下記のフィールドを含んでもよい。タグエントリーは、後述する予測情報に基づいて、現在の分岐命令のターゲット命令のアドレスを含むタグアドレスフィールドを含んでいてもよい。成立分岐の場合、タグアドレスが現在の分岐命令の成立分岐ターゲットアドレスである。非成立分岐の場合、タグアドレスは、現在の分岐命令に続く命令のアドレスである。またタグエントリーは、有効フィールドおよびＬＲＵ（最長未使用時間）フィールドを含む。一例では、タグアドレスフィールドは、２３ビット（アドレスのビット３１：９）を含み、有効なフィールドは、１ビットおよびＬＲＵフィールドは、６ビットを含む。これらのフィールドおよびフィールドサイズは例示のためだけに与えられるものであって、本発明の範囲を限定するものではない。他のタグエントリーフィールドおよびフィールドサイズも本発明の範囲内で利用され得る。
【００２１】
対応するデータエントリーは、次の分岐命令の分岐ターゲットを表す情報を含んでもよい。上記した次の分岐命令は、現在の分岐命令に続くものであって、任意の数からなる続きの命令によって現在の分岐命令から隔離されてもよい。データエントリーは、ターゲットアドレスフィールド、オフセットフィールドおよび予測フィールドを含んでもよい。ターゲットアドレスフィールドは、次の分岐命令の成立分岐ターゲットアドレスを含んでもよい。オフセットフィールドは、上記次の命令に続く次の順番の低オーダーアドレスビットを含んでもよい。一態様において、予測フィールドは、２つのバイモーダル予測ビット（bimodal prediction bit）を含んでもよく、これは、強い成立（strongly taken）、弱い成立（weakly taken）、強い非成立（strongly not taken）または弱い非成立（weakly not taken）の値を有し得る。種々の異なる予測が利用され得ることを理解されたい。
【００２２】
各データエントリーの追加のフィールドは、オーバーフローフィールド、分岐タイプフィールド、およびユーザ／スーパーバイザフィールドを含んでもよい。オーバーフローフィールドは、オフセット値の次の命令キャッシュページへのオーバーフローを示すオフセットオーバーフロービットを含んでもよい。分岐タイプフィールドは、分岐タイプビットを含んでもよく、これは、コール、リターン、無条件分岐または条件付き分岐を表してもよい。一例では、ターゲットアドレスフィールドは３１ビットを含み、オフセットフィールドは６ビットを含み、オーバーフローフィールドは１ビットを含み、予測フィールドは２ビットを含み、ユーザ／スーパーバイザフィールドは１ビットを含み、分岐タイプフィールドは２ビットを含む。これらのフィールドおよびフィールドサイズは、例示のために与えられるにすぎず、本発明を限定するものではないことを理解されたい。他のデータエントリーフィールドおよびフィールドサイズも本発明の範囲内で利用され得る。
【００２３】
ＢＴＢのサイズは、命令キャッシュのサイズに基づいてもよい。好ましくは、ＢＴＢは命令キャッシュの全ての分岐のための予測を提供すべきである。一態様において、ＢＴＢは、３２Ｋバイトの命令キャッシュサイズのために１Ｋのエントリーを有する。他のＢＴＢサイズおよびＢＴＢサイズを決定する技術は、本発明の範囲内で利用され得る。
【００２４】
ここで、図４Ｂを参照して分岐ターゲットバッファ１１０の一部を示す。ＢＴＢ１１０は、タグアレイ１１２およびデータアレイ１１４を含む。ＢＴＢ１１０のエントリー１２０は、ターゲットアドレスＡをタグアレイ１１２のタグアドレスフィールドに、ターゲットアドレスＢをデータアレイ１１４のターゲットアドレスフィールドに、命令５のアドレスをデータアレイ１１４のオフセットフィールドに、「条件付き」をデータアレイ１１４の分岐タイプフィールドに、「成立」をデータアレイ１１４の予測フィールドに含む。同様に、ＢＴＢ１００のエントリー１２２は、ターゲットアドレスＢをタグアレイ１１２のタグアドレスフィールドに、ターゲットアドレスＥをデータアレイ１１４のターゲットアドレスフィールドに含む。さらに、エントリー１２２は、命令２７のアドレスをオフセットフィールドに、「条件付き」を分岐タイプフィールドに、「非成立」をデータアレイ１１４の予測フィールドに含む。命令４が成立分岐である場合、命令アドレスＢは、エントリー１２０の次のターゲットアドレスであり、かつエントリー１２２の現在のターゲットアドレスであることがわかる。ＢＴＢ１１０のエントリー１２４は、分岐命令２６が非成立分岐である場合、タグアレイ１１２のタグアドレスフィールドに、分岐命令に続く次の順番のアドレスＣを含む。またエントリー１２４は、データアレイ１１４のターゲットアドレスフィールドに分岐命令２８のターゲットアドレスＤを含み、データアレイ１１４のオフセットフィールドに命令２９のアドレスを含む。それぞれの場合において、データアレイ１１４のターゲットアドレスフィールドは、次の分岐命令の成立分岐ターゲットアドレスを含み、データアレイ１１４のオフセットフィールドは、次の分岐命令の非成立分岐ターゲットアドレスを含む。
【００２５】
分岐予測器５０の一態様のブロック図を図５に示す。パイプラインアーキテクチャを示している。特に、パイプライン化されたプロセッサのステージ２、３、４を示す。ステージ１（図示せず）は、仮想アドレスから物理アドレスに変換するためにトランスレーション・ルックアサイド・バッファ（ＴＬＢ）を含んでもよい。ステージ２は、加算器１５０、アドレスセレクタ１５２、およびステージ２ラッチ１５４を含んでもよい。加算器１５０は、連続した命令フェッチの際に、連続した命令アドレスをアドレスセレクタ１５２に供給する。アドレスセレクタ１５２は、ＦＩＦＯ７４から命令アドレスを受け取り、分岐ターゲットバッファ１１０から予測されたフェッチアドレスを受け取り、分岐レゾリューションユニット３２（図１）からリダイレクションアドレスを受け取る。リダイレクトされたＰＣアドレスは、アドレスセレクタ１５２から出力され、ステージ２ラッチ１５４に保持される。
【００２６】
ステージ２ラッチ１５４の出力は、ステージ３に出力される。ステージ３は、予測器選択アレイ１６０、分岐履歴テーブル（branch history table）（予測器２）、分岐ターゲットバッファ１１０、加算器１７０、およびリターンスタック１７４を含む。上述したように、分岐ターゲットバッファ１１０は、タグアレイ１１２およびデータアレイ１１４（予測器１）を含む。ステージ３は、さらにアドレスセレクタ１７６を含み、これは、オフセットオーバーフロービットに応答して、ラッチ１５４の出力か、または加算器１７０の出力を選択する。予測器選択アレイ１６０および分岐履歴テーブル１６２の出力は、ステージ３ラッチ１８０に保持される。ＢＴＢデータアレイ１１４の出力は、ステージ３ラッチ１８２に保持され、ＢＴＢタグアレイ１１２の出力はステージ３ラッチ１８４に保持される。アドレスセレクタ１７６の出力は、ステージ３ラッチ１８６に保持され、リターンスタック１７４の出力は、ステージ３ラッチ１８８に保持される。ラッチ１５４からの現在のＰＣアドレスは、ステージ３ラッチ１９０に保持される。
ステージ３ラッチ１８０、１８２、１８４、１８６、１８８の出力は、ステージ４に供給される。ステージ４は、予測器セレクタ２００、制御ロジック２１０、データエントリーセレクタ２２０、アドレスセレクタ２３０、およびブロックサイズ計算ユニット２４０を含む。
【００２７】
図５の例では、分岐ターゲットバッファ１１０は、４つのルートを含むキャッシュ構造を有している。タグアレイ１１２への入力アドレスは、タグアレイエントリーの１つと適合してもよいし、適合しなくてもよい。この入力アドレスがタグアレイエントリーと適合しないとき、ＢＴＢミスが生じ、連続したフェッチがレジュームする。入力アドレスがタグアレイエントリーとルートの１つで適合するとき、ＢＴＢヒットが生じ、タグアレイ１１２が適合信号をラッチ１８４を介してデータエントリーセレクタ２２０の選択入力に供給する。データエントリーセレクタ２２０は、ラッチ１８２を介してデータアレイ１１４のルートの出力を受け取り、タグアレイ１１２からの適合信号によって制御され、ＢＴＢ１１０のデータアレイ１１４からデータエントリーを提供する。
【００２８】
セレクタ２２０によるデータエントリー出力（data entry output）は、アドレスセレクタ２３０の入力に供給されるターゲットアドレス、予測器セレクタ２００の第一の出力オフセットおよび予測ビット、並びに制御ロジック２１０に供給される分岐タイプを含む。アドレスセレクタ２３０は、データ入力セレクタ２２０からターゲットアドレスを、ステージ３ラッチ１９０から現在のＰＣアドレスを、ステージ３ラッチ１８６から次の順番のアドレス（ＮＳＡ）を、ステージ３ラッチ１８８からリターンアドレスを受け取る。
分岐履歴テーブル１６２からの予測ビットは、ラッチ１８０を介して予測器セレクタ２００の第二の入力に供給され、予測器選択アレイ１６０からの予測選択信号は、ラッチ１８０を介して予測器セレクタ２００の選択入力に供給される。セレクタ２００は、データアレイ１１４（予測器１）から、または分岐履歴テーブル１６２（予測器２）から予測ビットを選択し、分岐成立／非成立信号を制御ロジック２１０に出力する。
【００２９】
制御ロジック２１０は、分岐成立／非成立信号および分岐タイプ信号を受信し、選択信号をアドレスセレクタ２３０に提供する。条件付き分岐の場合、制御ロジック２１０は、ターゲットアドレスまたは次の順番のアドレスを分岐成立／非成立信号に応じて選択する。リターン命令の場合、リターンアドレスが選択される。連続した命令フェッチの場合、現在のＰＣアドレスが選択される。
【００３０】
アドレスセレクタ２３０の出力は、ステージ４ラッチ２５０およびブロックサイズ計算ユニット２４０に供給される。また、ブロックサイズ計算ユニット２４０は、現在のＰＣアドレスをステージ３ラッチ１９０から受け取る。ブロックサイズ計算ユニット２４０の出力は、ステージ４ラッチ２５２に供給される。ステージ４ラッチ２５２の出力は、制御入力をステージ２のアドレスセレクタ１５２に提供する。
ステージ４ラッチ２５０の出力は、ステージ５の一部であるＦＩＦＯ７４に供給される。ＦＩＦＯ７４は、パイプライン内で未処理の各分岐命令のためにデータアレイ１１４のデータ入力を保持する。分岐レゾリューションの際、ＦＩＦＯ７４の情報がＢＴＢ１１０を更新するために用いられる。分岐レゾリューションに続いてＢＴＢ１１０が更新されるとき、現在のターゲット情報が分岐レゾリューションユニット（図１）によって提供され、次のターゲット情報がＦＩＦＯ７４によって提供される。
【００３１】
ブロックサイズ計算ユニット２４０は、最新のＢＴＢアクセスからのオフセット値に基づいて、いつＢＴＢ１１０がアクセスされるべきかを決定する。オフセット値は、次の分岐命令の後の次の順番のアドレスの低オーダービットを含む。ブロックサイズ計算ユニット２４０は、現在のフェッチアドレスとオフセット値と比較して、いつＢＴＢ１１０がアクセスされるべきかを決定する。命令キャッシュ４２への各アクセスは、４つの１６ビットワードつまり８バイトのワードをフェッチする。現在のフェッチアドレスとオフセット値との差が８バイトより小さい場合、現在のフェッチアドレスは、次の分岐命令のアドレスである。したがって、現在のフェッチアドレスとオフセット値との差が８より小さい場合、分岐ターゲットバッファ１１０へのリダイレクションが、ブロックサイズ計算ユニット２４０によって開始される。
【００３２】
次のフェッチアドレスを生成するためのアルゴリズムの一態様を示す概略ブロック図を図６に示す。図５、図６において、同様の要素には同じ参照符号を付す。現在のフェッチアドレス３００は、３２ビット命令アドレスの場合にビット（３１：１）を含み得る。現在のフェッチアドレス３００の高オーダービット（３１：７）は、加算器１７０の第一の入力およびアドレスセレクタ１７６の第一の入力に供給される。加算器１７０は、現在のフェッチアドレス３００の上記高オーダービットに１を加算する。加算器１７０の出力は、アドレスセレクタ１７６の第二の入力に供給される。オフセットオーバーフロービットは、アドレスセレクタ１７６を制御する。したがって、加算器１７０およびアドレスセレクタ１７６は、オフセット値が現在のフェッチアドレスを次の命令キャッシュページにオーバーフローさせるかどうかを決定する。アドレスセレクタ１７６の出力は、次の分岐命令に続く次の順番のアドレス３２０の上位オーダービット（３１：７）を構成する。次の順番のアドレス３２０の低オーダービット（６：１）は、ＢＴＢ１１０からのオフセット値３２４から得られる。ビット（３１：１）を含む次のターゲットアドレス３３０もまたＢＴＢ１１０から得られる。アドレスセレクタ２３０は、次の分岐命令に続く次の順番のアドレス３２０および次のターゲットアドレス３３０を第一の入力および第二の入力でそれぞれ受け取る。アドレスセレクタ２３０は、制御ロジック２１０（図５）による−分岐ターゲットバッファ１１０における予測、または分岐履歴テーブル１６２（図５）によってもよい−成立／非成立予測によって制御される。「成立」予測の場合、アドレスセレクタ２３０は、次のターゲットアドレス３３０を次のＢＴＢアドレス３５０として供給する。「非成立」予測の場合、アドレスセレクタ２３０は、次の順番のアドレス３２０を次のＢＴＢアドレス３５０として供給する。
【００３３】
図６に示すように、ブロックサイズ計算ユニット２４０は、減算器３１０および比較器３６０を含む。現在のフェッチアドレス３００の低オーダービット（７：１）は、減算器３１０の第一の入力に供給される。減算器３１０は、オフセット値３２４を現在のフェッチアドレス３００の低オーダービット（７：１）から減算する。比較ユニット３６０は、減算器３１０の出力が８より小さいかどうかを決定する。減算器３１０の出力が８より小さい場合には、命令フェッチがＢＴＢ１１０にリダイレクトされる。そうでない場合には、現在のフェッチアドレス３００は、８バイト増大して次のフェッチアドレスを決定する。減算器３１０の出力と比較される８の値は、フェッチバッファのバイト数に基づくこと、および異なる所定の値もまた本発明の範囲内で使用され得ることを理解されたい。
【００３４】
プログラムループを含むプログラム断片を図７Ａに示す。プログラム断片４００は、ＰＣ１からＰＣ６にわたって命令を含む。アドレスＰＣ５での分岐命令は、アドレスＰＣ１の「ｌｏｏｐ」と称する命令に分岐する。アドレスＰＣ６の命令は、分岐命令に続く次の順番のアドレスである。
本発明の一態様によるパイプライン化されたプロセッサにおけるプログラム断片４００の実行を図７Ｂおよび図７Ｃに示す。図７Ｂおよび図７Ｃに、パイプラインステージ１、２、３、４、５、ｎ−ｋにおける動作を左から右に、時間進行を上から下にして示す。図７Ａに示すように、アドレスＰＣ１でのループ命令は、前の分岐命令のターゲットである。図７Ｂを参照して、クロックサイクル４１０の間、命令フェッチがステージ２のＢＴＢアドレスＰＣ１にリダイレクトされる。クロックサイクル４１２の間、ＢＴＢ１１０は、ステージ３のアドレスＰＣ１にインデックス化される。これがループ命令の第一の実行になるので、クロックサイクル４１４の間にステージ４のＢＴＢでミスが生じ、フェッチアドレスが次の順番のアドレスとなる。クロックサイクル４１６の間、アドレスＰＣ１は、ステージ５のＦＩＦＯ７４に書き込まれ、ＢＴＢはディセーブルとなる。数サイクルの後、クロックサイクル４２０の間に分岐レゾリューションユニット３２（ステージｎ−ｋ）が分岐予測失敗を決定し、予測失敗ペナルティを被ることになる。
【００３５】
クロックサイクル４２２の間に、ＢＴＢは分岐レゾリューションユニットからのターゲットアドレスで更新され、ＢＴＢ１１０の予測ビットは更新され、ＦＩＦＯ７４はフラッシュされ、命令フェッチはステージ２のＢＴＢアドレスＰＣ１にリダイレクトされる。クロック４２４の間に、ＢＴＢは、ステージ３のアドレスＰＣ１にインデックス化される。クロックサイクル４２６の間に、ＢＴＢでヒットが生じ、次のフェッチアドレスはステージ４のＢＴＢからのターゲットアドレスとなる。クロックサイクル４２８の間に、アドレスＰＣ１は、ステージ５のＦＩＦＯ７４に書き込まれる。クロックサイクル４３０の後の数サイクルにおいて、分岐レゾリューションユニット３２（ステージｎ−ｋ）は、分岐が正しく予測されたことを決定する。
【００３６】
クロックサイクル４３２の間に、ＢＴＢ１１０の予測ビットは更新され、ＦＩＦＯポインタは１つの入力によってシフトされ、命令フェッチはステージ２のＢＴＢアドレスＰＣ１にリダイレクトされる。クロックサイクル４３４の間に、ＢＴＢは、ステージ３のアドレスＰＣ１にインデックス化される。クロックサイクル４３６の間に、ＢＴＢでヒットが生じ、次のフェッチアドレスは、ステージ４のＢＴＢからのターゲットアドレス（ＰＣ１）となる。クロックサイクル４３８の間に、アドレスＰＣ１はステージ５のＦＩＦＯ７４に書き込まれる。クロックサイクル４４０の後の数サイクルにおいて、分岐レゾリューションユニット３２（ステージｎ−ｋ）は、分岐が正しく予測されたことを決定する。このように、このループは何度も繰り返し続けられる。
【００３７】
プログラム断片４００におけるループの最後の繰り返しを図７Ｃに示す。クロックサイクル４５０の間に、ＢＴＢ１１０での予測ビットが更新され、ＦＩＦＯポインタが１つの入力によってシフトされ、命令フェッチはステージ２のＢＴＢアドレスＰＣ１にリダイレクトされる。クロックサイクル４５２の間に、ＢＴＢは、ステージ３のアドレスＰＣ１にインデックス化される。クロックサイクル４５４の間に、ＢＴＢでヒットが生じ、次のフェッチアドレスは、ステージ４のＢＴＢからのターゲットアドレス（ＰＣ１）となる。クロックサイクル４５６の間に、アドレスＰＣ１はステージ５のＦＩＦＯ７４に書き込まれる。クロックサイクル４６０の後の数サイクルにおいて、分岐レゾリューションユニット３２（ステージｎ−ｋ）は、ループを出た分岐予測の失敗を決定し、こうして予測失敗ペナルティが生じる。
【００３８】
クロックサイクル４６２の間に、ＢＴＢ１１０の予測ビットは更新され、ＦＩＦＯ７４はフラッシュされ、命令フェッチはステージ２のＢＴＢアドレスＰＣ１にリダイレクトされる。クロックサイクル４６４の間に、ＢＴＢはステージ３のアドレスＰＣ６にインデックス化される。クロックサイクル４６６の間に、ＢＴＢでヒットが生じ、次のフェッチアドレスは、ステージ４の次の順番のアドレス（ＰＣ６）となる。クロックサイクル４６８の間に、アドレスＰＣ６はステージ５のＦＩＦＯ７４に書き込まれる。クロックサイクル４７０の間に、分岐レゾリューションがステージｎ−ｋで生じる。
【００３９】
本発明の一態様にしたがって、分岐ターゲットバッファを利用した命令フェッチの簡略化したフロー図を図８に示す。ステップ５００において、命令フェッチを分岐ターゲットバッファにリダイレクトすることによって、前の分岐命令のターゲットがフェッチされる。ターゲットアドレスは、ＢＴＢのタグアレイに供給される。ＢＴＢヒットがステップ５０２で生じない場合、フェッチアドレスＦＡは、ステップ５０４で８バイト増大し、プロセスは、分岐コミット（branch commit）（分岐レゾリューション）まで待機する。分岐レゾリューションがあると、新しいエントリーがステップ５０４のＢＴＢで作られる。ＢＴＢヒットがステップ５０２で生じる場合、対応するデータエントリーがステップ５１０でＢＴＢから読み出され、データエントリがＦＩＦＯ７４（図５）に書き込まれる。ステップ５１２において、データエントリーの予測ビットが使用され、分岐が成立するか、または非成立かを決定する。
【００４０】
分岐が成立する場合、ステップ５１４でフェッチアドレスとオフセット値との差が８バイトより小さいかどうかの決定がなされる。この差が８バイトより小さくない場合には、フェッチアドレスＦＡはステップ５１６で８バイト増大し、命令のフェッチが増大したフェッチアドレスで進行する。そして、このプロセスはステップ５１４に戻る。フェッチアドレスとオフセット値との差が８バイトより小さい場合、命令のフェッチは、ステップ５２０で成立分岐ターゲットにリダイレクトされる。そしてこのプロセスはステップ５０２に戻る。
【００４１】
ステップ５１２で分岐が非成立であるとの決定がなされた場合、ステップ５３０でフェッチアドレスとオフセット値との差が８バイトより小さいかどうかの決定がなされる。この差が８バイトより小さくない場合には、フェッチアドレスＦＡはステップ５３２で８バイト増大し、命令のフェッチが増大したフェッチアドレスで進行する。そして、このプロセスはステップ５３０に戻る。ステップ５３０で、フェッチアドレスとオフセット値との差が８バイトより小さいと決定された場合、命令のフェッチは、ステップ５４０で次の順番のアドレス（ＮＳＡ）にリダイレクトされる。そしてこのプロセスはステップ５００に戻る。
【００４２】
図５および図６に示し、かつ上述したように、ステップ５１４およびステップ５３０は、ブロックサイズ計算ユニット２４０によって行われるブロックサイズ計算に対応する。図８より明らかなように、ブロックサイズ計算ユニットによって決定され、分岐命令が実行されるプログラム上に生じるときにのみ、命令のフェッチは分岐ターゲットバッファにリダイレクトされる。これにより、各サイクル毎にアクセスされていた従来技術の分岐キャッシュに比して消費電力の節約が達成される。
【００４３】
本発明の少なくとも１つの態様について、そのいくつかの側面を説明した。したがって、これに対する種々の改変、変種および改良は、当業者により容易になされるであろう。かかる改変、変種および改良は、本明細書により開示されることを意図したものの一部であって、本発明の思想および範囲に包含されることを理解されたい。したがって、上記記載および図を用いた説明は、単に例示をその目的とするものである。
【図面の簡単な説明】
【００４４】
【図１】パイプライン化されたアーキテクチャを有するデジタルプロセッサのブロック図である。
【図２】図１に示されたフェッチユニットおよび復号ユニットの簡略ブロック図である。
【図３】図２の分岐予測器の簡略ブロック図である。
【図４Ａ】分岐命令を含むプログラム断片の例を示す概略図である。
【図４Ｂ】本発明の一態様による、図４Ａのプログラム断片用の分岐ターゲットバッファの内容を示す表である。
【図５】分岐予測器の一態様のブロック図である。
【図６】図５に示されるブロックサイズ計算ユニットの一態様のブロック図である。
【図７Ａ】分岐命令を有するプログラム断片の一例を示す図である。
【図７Ｂ】本発明の一態様による、パイプライン化されたプロセッサにおける図７Ａのプログラム断片の実行を示す図である。
【図７Ｃ】本発明の一態様による、パイプライン化されたプロセッサにおける図７Ａのプログラム断片の実行を示す図である。
【図８】本発明の一態様の分岐ターゲットバッファの動作を示すフロー図である。