(57)【要約】分岐先アドレスキャッシュ（ＢＴＡＣ）は、複数のエントリを格納する。ＢＴＡＣの各エントリは、選択されたと評価されている少なくとも１つの分岐命令を含む２またはそれ以上の命令のブロックに関連付けられている。ＢＴＡＣのエントリは、関連付けられたブロック内のどの命令が、選択された分岐命令であるかのインディケータを含む。ＢＴＡＣのエントリはまた、選択された分岐の分岐先アドレス（ＢＴＡ）を含む。ブロックのサイズは、必ずしも必要ではないが、命令キャッシュラインあたりの命令の数に対応する。
2009536770.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサにおける分岐命令を予測する方法であって、
分岐先アドレスキャッシュ（ＢＴＡＣ）内にエントリを格納することであって、前記ＢＴＡＣのエントリは、選択されたと評価されている少なくとも１つの分岐命令を含む２またはそれ以上の命令のブロックに関連付けられていることと、
命令のグループを取得すると、対応する前記ブロック内の命令が、選択された分岐命令かどうかを判定するために前記ＢＴＡＣにアクセスすることと
を備える方法。
【請求項２】
ＢＴＡＣの各エントリは、前記ブロックにおける全ての命令のアドレスの共通ビットを備えるタグを含む請求項１に記載の方法。
【請求項３】
前記ＢＴＡＣにアクセスすることは、前記取得された命令のアドレスの対応するビットを、ＢＴＡＣの全エントリのタグと比較することを備える請求項２に記載の方法。
【請求項４】
前記関連付けられたブロック内のどの命令が、選択された分岐命令であるかのインディケータを、ＢＴＡＣの各エントリ内に格納することを更に備える請求項１に記載の方法。
【請求項５】
前記関連付けられたブロック内の選択された分岐命令の分岐先アドレス（ＢＴＡ）を、ＢＴＡＣの各エントリ内に格納することを更に備える請求項１に記載の方法。
【請求項６】
前記ＢＴＡＣにアクセスした後、前記ＢＴＡから取得することを更に備える請求項５に記載の方法。
【請求項７】
各命令ブロックが、命令キャッシュラインに対応する請求項１に記載の方法。
【請求項８】
選択されたと評価されている少なくとも１つの分岐命令を含む２またはそれ以上の命令のブロックに関連付けられている複数のエントリを格納する分岐先アドレスキャッシュ（ＢＴＡＣ）と、
１または複数の命令を取得すると、切り捨てられた命令アドレスを用いて前記ＢＴＡＣをインデクス付けるように作動する命令実行パイプラインと
を備えるプロセッサ。
【請求項９】
ＢＴＡＣの各エントリは、前記ブロックにおける全ての命令のアドレスの共通ビットを備えるタグを含む請求項８に記載のプロセッサ。
【請求項１０】
前記関連付けられたブロック内のどの命令が、選択された分岐命令であるかのインディケータを、ＢＴＡＣの各エントリが含む請求項８に記載のプロセッサ。
【請求項１１】
前記関連付けられたブロック内の選択された分岐命令の分岐先アドレス（ＢＴＡ）を、ＢＴＡＣの各エントリが含む請求項８に記載のプロセッサ。
【請求項１２】
各命令ブロックが、命令キャッシュラインに対応する請求項８に記載のプロセッサ。
【請求項１３】
プロセッサにおける分岐命令を予測するプロセッサであって、
分岐先アドレスキャッシュ（ＢＴＡＣ）内にエントリを格納する手段であって、前記ＢＴＡＣのエントリは、選択されたと評価されている少なくとも１つの分岐命令を含む２またはそれ以上の命令のブロックに関連付けられている手段と、
命令のグループを取得すると、対応するブロックにおける命令が、選択された分岐命令かどうかを判定するために前記ＢＴＡＣにアクセスする手段と
を備えるプロセッサ。
【請求項１４】
ＢＴＡＣの各エントリは、前記ブロックにおける全ての命令の前記アドレスの共通ビットを備えるタグを含む請求項１３に記載のプロセッサ。
【請求項１５】
前記ＢＴＡＣにアクセスする手段は、前記取得された命令のアドレスの対応するビットを、ＢＴＡＣの全エントリのタグと比較する手段を備える請求項１４に記載のプロセッサ。
【請求項１６】
前記関連付けられたブロック内のどの命令が、選択された分岐命令であるかのインディケータを、ＢＴＡＣの各エントリ中に格納する手段を更に備える請求項１３に記載のプロセッサ。
【請求項１７】
前記関連付けられたブロック内の選択された分岐命令の分岐先アドレス（ＢＴＡ）を、ＢＴＡＣの各エントリ内に格納する手段を更に備える請求項１３に記載の前記プロセッサ。
【請求項１８】
前記ＢＴＡＣにアクセスした後に、前記ＢＴＡから命令を取得する手段を更に備える請求項１７に記載のプロセッサ。
【請求項１９】
各命令ブロックが、命令キャッシュラインに対応する請求項１３に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
当開示は一般にプロセッサの分野に関連し、詳細にはブロックに基づく分岐先アドレスキャッシュに関する。
【背景技術】
【０００２】
マイクロプロセッサは多種多様なアプリケーションにおいて計算タスクを行う。高度なソフトウェアによって、増加された機能および／または高速な演算を実現することによって製品改善をもたらすために、プロセッサの性能を改善することは設計目標である。例えば可搬性の電子デバイスのような一般的な組込式アプリケーションにおいては、電力を節約することと、チップのサイズを低減することもまた、プロセッサの設計と実装における重要な目標である。
【０００３】
一般的な現代のプロセッサは、パイプライン化されたアーキテクチャを使用している。ここでは、それぞれ複数の実行ステップを有するシーケンシャルな命令が、実行時にオーバーラップする。シーケンシャルな命令ストリームにおける命令の間で、並列処理が活用する能力は、改善されたプロセッサの性能に寄与する。理想的な条件の下は、そして、各パイプステージを１つのサイクルで完了するプロセッサでは、該パイプラインを満たす短い初期処理の後、命令はサイクルごとに実行を完了することができる。
【０００４】
そのような理想的な条件は、仮に現実化されるにしても、命令間のデータ依存（データハザード）、分岐のような制御依存（制御ハザード）、プロセッサリソース分配コンフリクト（構造ハザード）、割込み、キャッシュミス等を含む多様な要因によって実際にはめったに現実化されない。プロセッサ設計の主要な目標は、これらのハザードを避け、パイプラインを「フルな」状態に保つことである。
【０００５】
現実世界のプログラムは、分岐命令を含む場合があり、それは、無条件分岐命令または条件分岐命令を含み得る。分岐命令の実際の分岐挙動は、該命令がパイプラインの深くで評価されるまで、知られない場合がある。このことは、パイプラインをストールさせる制御ハザードを生成する。なぜなら、プロセッサは分岐命令後に、どの命令を取得するか分からず、分岐命令が評価するまで分からないであろうからである。一般的な現代のプロセッサは、様々な形式の分岐予測を使用し、それにより、条件分岐命令の分岐挙動と分岐先アドレスとは、パイプラインにおいて早期に予測される。プロセッサは、分岐予測に基づき、命令の取得と実行とを推測的に実行し、もって、パイプラインをフルに保つ。予測が正しい場合、性能は最大となり電力消費は最小となる。分岐命令が実際に評価され、該分岐が誤予測された場合には、推測的に取得された命令はパイプラインからフラッシュされ、新たな命令が正しい分岐先アドレスから取得されなければならない。誤予測された分岐は、プロセッサの性能と電力消費に悪影響を与える。
【０００６】
分岐予測に対する２つの構成要素、すなわち、条件評価と分岐先アドレスとが存在する。条件評価（当然、条件付分岐命令にのみ関係する）は二者択一である。該分岐が選択されて異なるコードシーケンスへのジャンプを実行させるか、あるいは選択されずに、この条件付分岐命令の後に、次のシーケンシャルな命令をプロセッサが実行するかのどちらかである。分岐先アドレス（ＢＴＡ）は、選択されたと評価する条件付分岐命令あるいは無条件分岐命令かの何れかの制御分岐へのアドレスである。いくつかの分岐命令は、オペレーションコード命令におけるＢＴＡを含むか、あるいはＢＴＡが容易に計算されることができるオフセットを含む。その他の分岐命令に関しては、ＢＴＡはパイプラインの深くまで計算されないので、予測されなければならない。
【０００７】
ＢＴＡ予測の１つの既知の技術が分岐先アドレスキャッシュ（ＢＴＡＣ）である。従来技術において周知の通りＢＴＡＣは、完全連想式キャッシュであり、各データの位置（すなわちキャッシュ「ライン」）に１つだけのＢＴＡを含んだ状態で、分岐命令アドレス（ＢＩＡ）によってインデックスされている。パイプラインにおいて選択されたと分岐命令が評価しその実際のＢＴＡが計算された場合、該ＢＩＡとＢＴＡはＢＴＡＣ（例えばライトバックパイプラインステージ中）に書き込まれる。新しい命令を取得するとき、該ＢＴＡＣは命令キャッシュ（すなわちＩ−キャッシュ）と同時にアクセスされる。該命令アドレスが該ＢＴＡＣにおいてヒットした場合、プロセッサは、該命令が分岐命令だと知り（このことは復号されているＩ−キャッシュから取り出される命令に先んじる）、予測されたＢＴＡが提供されるが、それは分岐命令の前の実行の実際のＢＴＡである。該分岐が選択されるべきだと分岐予測回路が予測した場合、命令の取得は、予測されたＢＴＡで始まる。該分岐が選択されるべきでないと予測された場合、命令の取得はシーケンシャルに継続する。
【０００８】
ＢＴＡＣという用語はまた、飽和カウンタをＢＩＡに関連付けるキャッシュを示す技術においても使われ、もって、条件付評価予測（すなわち、選択されるかされないか）だけを提供することに留意されたい。それは本明細書で使用するこの用語の意味ではない。
【０００９】
高性能プロセッサは、Ｉ−キャッシュから一度に１より多い命令を取得することができる。例えば、４つの命令を備えうるキャッシュラインの全体が、命令取得バッファに取得される。命令取得バッファは、それらをシーケンシャルにパイプラインへ供給する。本出願の譲受人に譲渡され、参照によって本明細書に組み込まれている特許出願１１／０８９，０７２号は、２またはそれ以上のＢＴＡを各キャッシュラインの中に格納し、ＢＴＡＣヒット上の予測されたＢＴＡとして該ＢＴＡのうちどれが選択されているか判定するために分岐予測オフセットテーブル（ＢＰＯＴ）をインデックス付けるＢＴＡＣを開示する。ＢＰＯＴは、複数のＢＴＡに同時にアクセスするために一般的なものであろう複数の読取ポートを有するＢＴＡＣの高価なハードウェア構造を避ける。
【００１０】
命令の一般的なグループまたはブロックは、全体的にも一般的にも、分岐命令から構成されていないので、ブロック内の各命令に関して、ＢＴＡＣ内に個別のＢＴＡストレージを提供することは、ＢＴＡＣ内のメモリセルを浪費する。しかしながら、ブロック内の命令が、無条件分岐命令であるか、選択されたものであると評価されそのＢＴＡを取得する条件付分岐命令であるかを判定するために、ブロック取得命令時にＢＴＡＣにアクセスすることは、分岐予測およびプロセッサ性能にとっても有益である。
【発明の概要】
【００１１】
１または複数の実施形態に従って、分岐先アドレスキャッシュ（ＢＴＡＣ）は複数のエントリを格納し、各エントリは、選択されたと評価されている少なくとも１つの分岐命令（すなわち、パイプラインにおいて選択されたと以前に評価された条件付分岐命令あるいは無条件分岐命令のどちらか）を含む２またはそれ以上の命令のブロックに関連付けられる。ＢＴＡＣエントリは、選択された分岐の分岐先アドレス（ＢＴＡ）と、関連付けられたブロック内のどちらの命令が該分岐かのインディケータを含む。命令ブロックのサイズは、命令キャッシュライン毎の命令の数に対応しうるが、必ずしもそうであるとは限らない。各ＢＴＡＣエントリは、ブロックの中の命令の共通ビット（すなわち、最下位ビットが切り捨てられた命令アドレス）によりインデックス付けられる。
【００１２】
１つの実施形態は、プロセッサにおける条件付分岐命令を予測する方法に関する。選択されたと評価されている少なくとも１つの分岐命令を含む２またはそれ以上の命令のブロックに関連付けられるエントリが、ＢＴＡＣに格納される。命令を取得すると、ＢＴＡＣは、対応するブロック内の命令が、選択された分岐命令かどうか判定するためにアクセスされる。
【００１３】
他の実施形態はプロセッサに関する。プロセッサは、複数のエントリを格納するＢＴＡＣを含み、ＢＴＡＣの各エントリは、選択されたと評価されている少なくとも１つの分岐命令を含む２またはそれ以上の命令のブロックに関連付けられる。プロセッサはまた、１または複数の命令を取得すると、切り捨てられた命令アドレスを有するＢＴＡＣをインデックス付けるように作動する命令実行パイプラインを含む。
【詳細な説明】
【００１４】
図１は、プロセッサ１０の機能ブロック図を示す。プロセッサ１０は、制御論理１１に従って命令実行パイプラインにおける命令を実行する。いくつかの実施形態において、パイプライン１２は、複数の並行パイプラインを有するスーパースカラ設計でありうる。パイプライン１２は、パイプステージにおいて組織化された様々なレジスタすなわちラッチ１６と、１または複数の計算論理装置（ＡＬＵ）１８を含む。汎用レジスタ（ＧＰＲ）ファイル２０は、メモリ階層の先頭を含むレジスタを提供する。
【００１５】
パイプライン１２は、命令側トランスレーション・ルックアサイド・バッファ（ＩＴＬＢ）２４によって管理される許可とメモリアドレス変換を用いて、命令キャッシュ（Ｉ−キャッシュ）２２から命令を取得する。同時に、パイプライン１２は、切り捨てられた命令アドレスを、ブロックに基づく分岐先アドレスキャッシュ（ＢＴＡＣ）２５に提供する。切り捨てられた該アドレスがＢＴＡＣ２５においてヒットした場合、予測されたＢＴＡから即座に命令取得を開始すめるために、ＢＴＡＣ２５は、分岐先アドレスをＩ−キャッシュ２２に提供することができる。ブロックに基づくＢＴＡＣ２５の演算と構造は以下でより詳細に述べられる。
【００１６】
データは、メインのトランスレーション・ルックアサイド・バッファ（ＴＬＢ）２８によって管理される許可とメモリアドレス変換を用いてデータキャッシュ（Ｄ−キャッシュ）２６からアクセスされる。様々な実施形態において、ＩＴＬＢはＴＬＢの一部のコピーを備えることができる。あるいはＩＴＬＢとＴＬＢとは統合され得る。同様に、プロセッサ１０の様々な実施形態において、Ｉ−キャッシュ２２とＤ−キャッシュ２６は統合される、すなわち一体化されうる。Ｉ−キャッシュ２２とＤ−キャッシュ２６の両方あるいはいずれかを失うと、メモリインターフェース３０の制御下で、メイン（外部）メモリ３２へのアクセスをもたらす。
【００１７】
プロセッサ１０は、様々な周辺デバイス３６，３８へのアクセスを制御する入出力（Ｉ／Ｏ）インターフェース３４を含みうる。当業者は、プロセッサ１０の多数の変種が可能であることを理解するだろう。例えば、プロセッサ１０は、Ｉ−キャッシュ２２およびＤ−キャッシュ２６のいずれかあるいは両方のための２次レベル（Ｌ２）キャッシュを含みうる。加えて、プロセッサ１０において示された機能ブロックのうちの１または複数は、特定の実施形態から省略されうる。
【００１８】
分岐命令はいくつかのコードにおいて一般的である。いくつかの推定によると、５つの命令のうち１つが分岐である可能性がある。従って、早期の分岐検出、（条件付分岐命令に対する）分岐評価予測、および予測されたＢＴＡからの命令取得は、プロセッサ性能に対して決定的となりうる。一般的な現代のプロセッサは、各キャッシュライン内に多数の命令を格納するＩ−キャッシュ２２を含む。１つ（または複数）のライン全体が一度にＩ−キャッシュから取得されうる。この開示のために、Ｉ−キャッシュ２２は、キャッシュラインごとに４つの命令を格納すると仮定する。ただしこの例は単に例であり限定的なものではない。同時に４つの命令アドレス全てに対して探索するために従来技術ＢＴＡＣにアクセスすることは、４つのアドレス比較入力ポート、４つのＢＴＡ出力ポート、および４つ全てのアドレスがＢＴＡＣにおいてヒットした場合にはブロックに関連付けられた最大４つのＢＴＡの中から１つのＢＴＡを選択するための制御論理とマルチプレクサを必要とする。４つの分岐命令のブロックは稀であるが、本明細書で述べられているＢＴＡＣはその可能性の余地を確保する。
【００１９】
１または複数の実施形態に従って、ブロックに基づくＢＴＡＣ２５は、各ＢＴＡＣ２５キャッシュラインにおける（例えば４つの）命令のブロックに関連付けられた、選択された分岐情報を格納する。この情報は、ブロック内の少なくとも１つの命令が選択されたと評価されている（ブロックに基づくＢＴＡＣ２５におけるヒットにより示された）分岐命令であるという事実と、ブロックの中のどの命令が選択された分岐であるかのインディケータ、およびそのＢＴＡを含む。
【００２０】
図２は、ブロックに基づくＢＴＡＣ２５、Ｉ−キャッシュ２２、パイプライン１２、および（例えば制御論理１１の一部を備える）分岐予測論理回路１５の機能ブロック図を示す。この例において、命令Ａ〜Ｌは、Ｉ−キャッシュ２２における３つのラインに存在する。命令は、ブロック図の左に示されている。この例のブロックに基づくＢＴＡＣ２５において、ＢＴＡＣ２５のブロックのサイズは、そのような対応は一般的ではないが、Ｉ−キャッシュ２２のラインの長さ、すなわち４つの命令に一致する。図２のブロックに基づくＢＴＡＣ２５における各エントリは、３つの構成要素を含む。すなわち、各ブロック内に４つの命令の共通命令アドレスビット（すなわち、最下位２ビットが切り捨てられた命令アドレス）を備えるタグフィールド、ブロック内の命令のどの命令が選択された分岐かを示す分岐インディケータ、および、選択された分岐命令に対応する分岐先アドレス（ＢＴＡ）である。
【００２１】
ＢＴＡＣ２５内の第１のエントリは、命令Ａ、Ｂ、Ｃ、Ｄを備えるＩ−キャッシュ２２の第１のラインに対応する。これらのうち、命令Ｃは選択されたと評価されている分岐命令である。命令Ｃは、１０という分岐インディケータアドレスによって選択された分岐と特定される（他の実施形態においては、分岐インディケータは例えば００１０のような復号フォーマットでありうる）。ブロックに基づくＢＴＡＣ２５はさらに、命令Ｃの分岐先アドレス（ＢＴＡＣ）を格納する。
【００２２】
Ｉ−キャッシュ２２の第２のライン内の命令、すなわちＥ、Ｆ、Ｇ、Ｈは、いずれも分岐命令ではない。従って、このキャッシュラインに対応するエントリは、ブロックに基づくＢＴＡＣ２５においては存在しない。
【００２３】
ブロックに基づくＢＴＡＣ２５内の第２のエントリは、命令Ｉ、Ｊ、Ｋ、Ｌを備えるＩ−キャッシュ２２の第３のラインに対応する。このブロック内では、命令ＩとＬとの両方が分岐命令である。この例では、命令Ｌが選択されたと最後に評価され、ブロックに基づくＢＴＡＣ２５はＢＴＡＬを格納し、１１という分岐インディケータ値によってブロック内の第４の命令を、選択された分岐として特定する。
【００２４】
動作中、パイプライン１２における復号／取得論理１３は、Ｉ−キャッシュ２２からの命令の次のグループを取得するための命令アドレスを生成する。同時に取得される全ての命令の共有アドレスビットを備える切り捨てられた命令アドレスは、ブロックに基づくＢＴＡＣ２５のタグタグフィールドと比較される。切り捨てられたアドレスが、ブロックに基づくＢＴＡＣ２５におけるタグに一致する場合、ブロックの中のどの命令が選択された分岐命令であるかを示すために、対応する分岐インディケータが復号／取得論理１３に提供される。該インディケータはまた、分岐予測論理１５にも提供される。同時に、ＢＴＡからの迅速なる推測的取得を開始するために、かつ、予測されたとおり該分岐が選択された場合に、パイプラインをフルに維持するために、ＢＴＡＣエントリのＢＴＡがＩ−キャッシュ２２に提供される。
【００２５】
分岐命令は、パイプライン１２における実行ステージの論理１４において評価される。この分岐評価は、実際の分岐挙動に関する予測論理を更新するために、分岐予測論理１５に提供される。実行論理１４は、選択されたと評価した場合、さらに、分岐命令のＢＴＡを計算し提供する。分岐予測論理１５は、その予測テーブル（例えば、分岐履歴レジスタ、分岐予測テーブル、飽和カウンタ等）を更新し、さらに、ブロックに基づくＢＴＡＣ２５を更新する。特に、分岐予測論理１５は、選択されたと評価する新たな各分岐命令のために、４つの命令のブロックに対応する新たなエントリを、ブロックに基づくＢＴＡＣ２５内に生成し、既存のエントリのためのブロックに基づくＢＴＡＣ２５のＢＴＡフィールドと分岐インディケータの両方またはいずれかを更新する。
【００２６】
ブロックに基づくＢＴＡＣ２５内の各エントリはこうして、選択されたと評価されている少なくとも１つの分岐命令を含む命令のブロックに関連付けられる。各エントリは、ブロック内に、命令の共通ビットを備えるタグを含む。ブロックに基づくＢＴＡＣ２５タグと比較するために切り捨てられた命令アドレスを用いて、Ｉ−キャッシュ２２から１または複数の命令を取得するのと同時にブロックに基づくＢＴＡＣ２５にアクセスすることにより、プロセッサ１０は、ブロック内の任意の命令が選択された分岐命令であるのかどうか、またそれはブロック内のどの命令なのかを確認することができる。さらに、プロセッサ１０は、選択された分岐のＢＴＡから推測的に命令を取得することと、パイプラインをフルに維持することと、選択された分岐が再び評価する性能を最適化することとを直ちに開始することができる。ＢＴＡＣエントリに関連付けられた命令のブロック構造は、それぞれが、単一の選択された分岐命令に専用である従来方式のＢＴＡＣエントリを用いた同じ機能を達成するために必要とされる出力マルチプレクサと、３つの出力ポートと、３つの入力ポートとを不要にする。
【００２７】
本明細書で使用するように、一般に、分岐命令は、条件付分岐命令か無条件分岐命令かのいずれかを称することができる。本明細書で使用するように、「選択された分岐」、「選択された分岐命令」、あるいは「選択されたと評価されている分岐命令」は、シーケンシャルな命令実行フローを、非シーケンシャルなアドレスに変換するものとして評価される条件付分岐命令であるか、無条件分岐命令かの何れかを称する（すなわち、選択されていないもの対するものとして解釈される）。
【００２８】
本発明は、その特定の機能、局面、実施形態に関して本明細書で説明されたが、多数の変形、修正、およびその他の実施形態が本発明の広範な範囲において可能であり、もって、全ての変形、修正、および実施形態が、本開示の範囲内にあると見なされるべきであることが明白になるであろう。従って、本実施形態は、全ての局面において例示的であり、限定的ではないと解釈されるべきであって、請求項の意味および均等範囲内で起こる全ての変更は、その中に包含されるものと意図される。
【図面の簡単な説明】
【００２９】
【図１】図１は、プロセッサの１つの実施形態の機能ブロック図である。
【図２】図２は、分岐先アドレスキャッシュの１つの実施形態の機能ブロック図である。
【図１】
2009536770.tif 000003
【図２】
2009536770.tif 000004
【国際調査報告】
2009536770.tif 000005
2009536770.tif 000006