(57)【特許請求の範囲】
【請求項１】
スーパースカラマイクロプロセッサであって、
命令の流れに含まれる命令をデコードし、デコードされた命令をＲＯＰに変換するためのデコーダと、
デコーダに結合され、マイクロプロセッサの理論的な状態を記憶するための再オーダバッファと、
再オーダバッファに結合され、マイクロプロセッサの実状態を記憶するためのレジスタファイルとを含み、
再オーダバッファは、理論的な整数結果を記憶するための整数結果部分と整数結果に関連する理論的なフラグ情報を記憶するためのフラグ結果部分とを含む複数の記憶ロケーションを有する再オーダバッファアレイを含み、フラグ結果部分と整数結果部分とは連結されて整数結果よりも幅の広い浮動小数点結果の記憶を収容する浮動小数点記憶ロケーションを形成し、スーパースカラマイクロプロセッサはさらに、
再オーダバッファに結合され、再オーダバッファから引退したフラグ情報を記憶するための実フラグレジスタを含む、スーパースカラマイクロプロセッサ。
【請求項２】
デコーダと再オーダバッファとに結合された浮動小数点ユニットと、
デコーダと再オーダバッファとに結合された分岐ユニットと、
デコーダと再オーダバッファとに結合された整数ユニットとをさらに含む、請求項１に記載のマイクロプロセッサ。
【請求項３】
デコーダはさらに、フラグ修正ＲＯＰを整数ユニットにディスパッチするため、分岐ＲＯＰを分岐ユニットにディスパッチするため、および浮動小数点ＲＯＰを浮動小数点ユニットにディスパッチするためのディスパッチウィンドウを含み、整数ユニットは整数ＲＯＰがその中で実行するとき整数結果を発生し、浮動小数点ユニットはその中で浮動小数点ＲＯＰが実行するとき浮動小数点結果を発生する、請求項２に記載のマイクロプロセッサ。
【請求項４】
再オーダバッファは、再オーダバッファのフラグ結果部分の１つを、デコーダによりディスパッチされた特定のフラグ修正ＲＯＰのフラグ結果へ割当て、したがって割当てられたフラグ結果部分を発生するための再命名手段を含む、請求項３に記載のマイクロプロセッサ。
【請求項５】
再命名手段はさらに、割当てられたフラグ結果部分に対応するフラグ修正ＲＯＰの実行が懸案中である一方で、フラグタグに、割当てられたフラグ結果部分を関連づけるための手段を含む、請求項４に記載のマイクロプロセッサ。
【請求項６】
再オーダバッファと分岐ユニットとの間に結合され、再オーダバッファからのフラグタグを分岐ユニットに伝えるためのフラグタグバスをさらに含む、請求項５に記載のマイクロプロセッサ。
【請求項７】
再オーダバッファ、実フラグレジスタ、および分岐ユニットの間に結合され、再オーダバッファおよび実フラグレジスタからのフラグ結果を分岐ユニットに伝えるためのフラグオペランドバスをさらに含む、請求項６に記載のマイクロプロセッサ。
【請求項８】
フラグ結果部分は、複数のフラグを記憶するための複数のフラグビット位置を示し、前記複数のフラグは、フラグ修正ＲＯＰが実行するときどのフラグがともに更新されるかに従いフラグサブグループにグループ分けされる、請求項７に記載のマイクロプロセッサ。
【請求項９】
フラグタグに特定のフラグサブグループを関連づける手段をさらに含む、請求項８に記載のマイクロプロセッサ。
【請求項１０】
フラグサブグループの数と同じ数の複数のフラグタグバスをさらに含み、フラグタグバスは再オーダバッファのフラグ結果部分と分岐ユニットとの間に結合され、各フラグタグバスはそれぞれのフラグサブグループを分岐ユニットに伝える、請求項９に記載のマイクロプロセッサ。
【請求項１１】
複数の従属性チェッカをさらに含み、それぞれの従属性チェッカは各フラグサブグループに対して与えられ、サブグループのフラグに関連する命令に関して何らかの従属性が存在するかどうかを決定する、請求項１０に記載のマイクロプロセッサ。
【請求項１２】
フラグ結果部分は、複数のフラグを記憶するための複数のフラグビット位置を示し、前記複数のフラグは、フラグ修正ＲＯＰが実行するときどのフラグがともに更新されるかに従いフラグサブグループにグループ分けされる、請求項２に記載のマイクロプロセッサ。
【請求項１３】
フラグタグに特定のフラグサブグループを関連づけるための手段をさらに含む、請求項１２に記載のマイクロプロセッサ。
【請求項１４】
フラグサブグループの数と等しい数の複数のフラグタグバスをさらに含み、フラグタグバスは再オーダバッファのフラグ結果部分と分岐ユニットとの間に結合され、各フラグタグバスはそれぞれのフラグサブグループを分岐ユニットに伝える、請求項１３に記載のマイクロプロセッサ。
【請求項１５】
複数の従属性チェッカをさらに含み、それぞれの従属性チェッカはフラグサブグループの各々に対して与えられ、サブグループのフラグに関連する命令に関して何らかの従属性が存在するかどうかを決定する、請求項１４に記載のマイクロプロセッサ。
【請求項１６】
分岐ユニット、整数ユニット、浮動小数点ユニット、および再オーダバッファをともに結合する結果バスをさらに含む、請求項２に記載のマイクロプロセッサ。
【請求項１７】
結果バスは浮動小数点結果の幅に等しい合計のデータ幅を示し、そのため浮動小数点結果は結果バスの合計幅で転送されることができ、結果バスは、浮動小数点結果のデータ幅よりも小さなデータ幅を示す整数結果を転送するための整数結果部分を含み、さらにフラグ修正ＲＯＰの整数結果に関連するフラグ結果を転送するための残余のフラグ結果部分を含む、請求項１６に記載のマイクロプロセッサ。
【請求項１８】
マイクロプロセッサに命令およびデータを与えるための外部メモリと結合される、請求項１に記載のマイクロプロセッサ。
【請求項１９】
マイクロプロセッサに命令およびデータを与えるための外部メモリと結合される、請求項２に記載のマイクロプロセッサ。
【請求項２０】
スーパースカラマイクロプロセッサであって、
命令の流れに含まれる命令をデコードするためのデコーダと、
デコーダに結合され、マイクロプロセッサの理論的な状態を記憶するための再オーダバッファと、
再オーダバッファに結合され、マイクロプロセッサの実状態を記憶するためのレジスタファイルとを含み、
再オーダバッファは、理論的整数結果を記憶するための整数結果部分と整数結果に関連する理論的フラグ情報を記憶するためのフラグ結果部分とを含む複数の記憶ロケーションを有する再オーダバッファアレイを含み、フラグ結果部分と整数結果部分とは連結されて整数結果よりも幅の広い浮動小数点結果の記憶を収容する浮動小数点記憶ロケーションを形成し、スーパースカラマイクロプロセッサはさらに、
再オーダバッファに結合され、再オーダバッファから引退したフラグ情報を記憶するための実フラグレジスタを含む、スーパースカラマイクロプロセッサ。
【請求項２１】
デコーダと再オーダバッファとに結合された浮動小数点ユニットと、
デコーダと再オーダバッファとに結合された分岐ユニットと、
デコーダと再オーダバッファとに結合された整数ユニットとをさらに含む、請求項２０に記載のマイクロプロセッサ。
【請求項２２】
デコーダはさらに、フラグ修正命令を整数ユニットにディスパッチするため、分岐命令を分岐ユニットにディスパッチするため、および浮動小数点命令を浮動小数点ユニットにディスパッチするためのディスパッチウィンドウを含み、整数ユニットはその中で整数命令が実行するとき整数結果を発生し、浮動小数点ユニットはその中で浮動小数点命令が実行するとき浮動小数点結果を発生する、請求項２１に記載のマイクロプロセッサ。
【請求項２３】
再オーダバッファは、再オーダバッファのフラグ結果部分の１つを、デコーダによりディスパッチされた特定のフラグ修正命令のフラグ結果に割当て、したがって割当てられたフラグ結果部分を発生するための再命名手段を含む、請求項２２に記載のマイクロプロセッサ。
【請求項２４】
再命名手段はさらに、割当てられたフラグ結果部分に対応するフラグ修正命令の実行が懸案中である一方で、フラグタグに、割当てられたフラグ結果部分を関連づけるための手段を含む、請求項２３に記載のマイクロプロセッサ。
【請求項２５】
再オーダバッファと分岐ユニットとの間に結合され、再オーダバッファからのフラグタグを分岐ユニットに伝えるためのフラグタグバスをさらに含む、請求項２４に記載のマイクロプロセッサ。
【請求項２６】
再オーダバッファ、実フラグレジスタ、および分岐ユニットの間に結合され、再オーダバッファおよび実フラグレジスタからの結果を分岐ユニットに伝えるためのフラグオペランドバスをさらに含む、請求項２５に記載のマイクロプロセッサ。
【請求項２７】
マイクロプロセッサに命令およびデータを与えるための外部メモリと結合された、請求項２０に記載のマイクロプロセッサ。
【請求項２８】
マイクロプロセッサに命令およびデータを与えるための外部メモリと結合された、請求項２１に記載のマイクロプロセッサ。
【請求項２９】
マイクロプロセッサのサイクルにつき複数のＲＩＳＣのような演算（ＲＯＰ）をデコードするためのデコーダと、デコーダに結合された再オーダバッファとを含むスーパースカラマイクロプロセッサにおいて、再オーダバッファはさらに、レジスタファイルと、分岐ユニットを含む複数の機能ユニットとに結合され、再オーダバッファは前記マイクロプロセッサの理論的状態を記憶し、レジスタファイルは前記マイクロプロセッサの実状態を記憶し、ＲＯＰを処理する方法は、
命令の流れにおいてマイクロプロセッサに与えられた命令をデコードし、デコードされた命令をＲＯＰに変換するステップと、
フラグ修正ＲＯＰを目的機能ユニットと指定された機能ユニットの１つにディスパッチするステップと、
フラグ修正ＲＯＰのデータ結果に対し再オーダバッファ内に第１のメモリロケーションを割当てるステップと、
フラグ修正ＲＯＰが実行されるとき更新されるフラグ情報を記憶するために、第２のメモリロケーションを再オーダバッファに割当てるステップとを含む、ＲＯＰを処理する方法。
【請求項３０】
フラグ修正ＲＯＰが実行を懸案中であるときフラグタグに第２のメモリロケーションを関連づけるステップをさらに含み、フラグタグはフラグ修正ＲＯＰのフラグ結果に対応する、請求項２９に記載の方法。
【請求項３１】
分岐ＲＯＰを分岐ユニットにディスパッチするステップをさらに含み、分岐ＲＯＰは、分岐ＲＯＰのフラグオペランドとしてフラグ修正ＲＯＰのフラグ結果を有する、請求項３０に記載の方法。
【請求項３２】
目的機能ユニットによりフラグ修正ＲＯＰを実行するステップと、
フラグ修正ＲＯＰのフラグ結果を、第２のメモリロケーションへの記憶のために、目的機能ユニットから再オーダバッファに送るステップとをさらに含む、請求項３１に記載の方法。
【請求項３３】
フラグ結果を再オーダバッファから分岐ユニットへ、その間のフラグオペランドバスを介して送るステップをさらに含む、請求項３２に記載の方法。
【請求項３４】
目的機能ユニットによりフラグ修正ＲＯＰを実行するステップと、
フラグ修正ＲＯＰのフラグ結果を、分岐ユニットにディスパッチされた分岐ＲＯＰのフラグオペランドとして分岐ユニットが使用するために、目的機能ユニットから結果バスを通して分岐ユニットに送るステップとをさらに含む、請求項３３に記載の方法。
【請求項３５】
結果バスは浮動小数点結果を収容するのに十分な幅を示し、整数結果の幅は浮動小数点結果の幅よりも小さく、この方法はさらに、
整数結果を整数機能ユニットから結果バスの第１の部分に転送するステップと、
フラグ結果を整数機能ユニットから残余の結果バスの第２の部分に転送するステップとを含む、請求項３４に記載の方法。
【請求項３６】
機能ユニットの１つにより整数ＲＯＰを実行し、第１のデータ幅を示す整数結果を発生するステップと、
別の機能ユニットにより浮動小数点ＲＯＰを実行し、第１のデータ幅よりも大きな第２のデータ幅を示す浮動小数点結果を発生するステップとをさらに含む、請求項２９に記載の方法。
【請求項３７】
整数結果を第１のメモリロケーションに記憶するステップをさらに含む、請求項３６に記載の方法。
【請求項３８】
フラグ結果を第２のメモリロケーションに記憶するステップをさらに含む、請求項３７に記載の方法。
【請求項３９】
再オーダバッファにおける第１のメモリロケーションと第２のメモリロケーションとはともに浮動小数点結果メモリロケーションを形成し、この方法は浮動小数点結果を浮動小数点メモリロケーションに記憶するステップを含む、請求項３６に記載の方法。
【請求項４０】
再オーダバッファにおける第２のメモリロケーションに関連するフラグタグを、フラグタグバスを介して分岐機能ユニットに伝えるステップをさらに含む、請求項３０に記載の方法。
【請求項４１】
再オーダバッファの第２のメモリロケーションに記憶されたフラグ情報は複数のフラグを含み、この方法はさらに、フラグ修正ＲＯＰが実行するときどのフラグがともに更新されるかに従いフラグをサブグループにグループ分けするステップを含む、請求項３０に記載の方法。
【請求項４２】
それぞれのフラグタグを各フラグサブグループに与えるステップをさらに含む、請求項３０に記載の方法。
【請求項４３】
各フラグサブグループに対し、再オーダバッファと分岐ユニットとの間にそれぞれのフラグタグバスを与えるステップをさらに含む、請求項３０に記載の方法。
【請求項４４】
分岐ＲＯＰを分岐ユニットにディスパッチし、ディスパッチされた分岐ＲＯＰを与えるステップをさらに含む、請求項２９に記載の方法。
【請求項４５】
ディスパッチされた分岐ＲＯＰに対し要求されたフラグ情報を再オーダバッファおよび実フラグレジスタに転送するステップをさらに含む、請求項４４に記載の方法。
【請求項４６】
前記フラグ情報が非理論的になったとき、再オーダバッファからフラグ情報を引退させるステップと、
引退の際にこの引退したフラグ情報を実フラグレジスタに記憶するステップとをさらに含む、請求項４５に記載の方法。
【請求項４７】
再オーダバッファから利用可能な、要求されたフラグまたはそれに対するフラグタグがないとき、実フラグを、実フラグレジスタから分岐機能ユニットへ、フラグオペランドとして転送するステップをさらに含む、請求項４６に記載の方法。
【請求項４８】
要求されたフラグの値が別の機能ユニットによりまだ決定中であるとき、フラグタグを再オーダバッファから分岐ユニットに転送するステップをさらに含む、請求項４６に記載の方法。
【請求項４９】
要求されたフラグが再オーダバッファ内に記憶されており、要求されたフラグの値がまだ理論的であるとき、フラグを再オーダバッファから分岐ユニットに転送するステップをさらに含む、請求項４６に記載の方法。
【請求項５０】
再オーダバッファと機能ユニットとに結合され、機能ユニットにより更新されるフラグの実状態を記憶するための、実フラグレジスタを与えるステップをさらに含む、請求項２９に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の背景】
この発明は包括的に、マイクロプロセッサに関し、より特定的には高性能スーパースカラマイクロプロセッサに関する。
【０００２】
マイクロプロセッサの型式
その他多くの現代の技術分野と同様、マイクロプロセッサ設計は、技術者および科学者が常に高速化、効率および性能の向上を得ようと努力するテクノロジーである。概して、マイクロプロセッサは、スカラおよびベクトルプロセッサという２つの種類に分けることができる。基本のスカラプロセッサは、マシンサイクルにつき最大１つの命令を処理する。いわゆる「スーパースカラ」プロセッサは、マシンサイクルにつき２つ以上の命令を処理できる。スカラプロセッサとは対照的に、ベクトルプロセッサは、短時間に比較的大きな、値のアレイを処理できる。
【０００３】
ベクトルプロセッサは、データの並列性に重きをおいて処理効率を達成し、一方スーパースカラプロセッサは、命令の並列性に重きをおいて演算の効率を高める。命令の並列性は、命令のシーケンスに固有の特性として考えることができ、そのような命令が並列に処理されることを可能とする。対照的に、データの並列性はデータの流れに固有の特性とみなすことができ、データの要素を並列に処理することを可能にする。命令の並列性は、命令の特定のシーケンスが示す従属性の数に関連する。従属性は、特定の命令が別の命令の結果に依存する程度として規定される。スカラプロセッサにおいて、ある命令が別の命令に対して従属性を示すとき、一般的に従属性は命令がその実行のために機能ユニットに送られる前に解決されねばならない。そのため、従来のスカラプロセッサは、そのような従属性の懸案の解決を待つ一方で、望ましくない時間の遅延を受けることになる。
【０００４】
パイプライン化
プロセッサおよびマイクロプロセッサによる命令の実行を高速化するために、いくつかのアプローチが何年にもわたって採用されてきた。現在なおもマイクロプロセッサにおいて広く用いられている１つのアプローチは、パイプライン化である。パイプライン化において、アセンブリラインアプローチが行なわれ、そこでは、１）命令の取出し、２）命令のデコードおよびオペランドの収集、３）命令の実行および結果のライトバックという、３つのマイクロプロセッサの動作が重ね合わされて処理を高速化する。言い換えれば、それぞれのマシンサイクルにおいて命令１が取出され、命令１がデコードされる。命令１がデコードされそのオペランドが集められている一方で、命令２が取出される。命令１が実行され結果が書込まれている一方で、命令２がデコードされておりそのオペランドが集められ、命令３が取出されている。実際には、アセンブリラインアプローチは、上記よりも多くのアセンブリラインステーションに分割されてもよい。パイプライン化技術のより詳細な説明は、刊行物『ＩＢＭジャーナル』１１巻、１９６７年１月、８−２４頁の、Ｄ．Ｗ．アンダーソン（Anderson）らによる「ＩＢＭシステム／３６０  モデル９１：マシンフィロソフィ（Machine Philosophy）」において示されている。
【０００５】
以下の定義は、この明細書中における明確性を高めるために設けられる。「ディスパッチ」は、命令を命令デコーダから機能ユニットへ送る動作である。「発令」は、命令を機能ユニットにおいて実行に移させる動作である。「完了」は、命令の実行が終わり、結果が利用可能であるときに達成される。命令は、命令の結果がレジスタファイルに書込まれたとき、「引退した」と述べられる。これはまた、「ライトバック」としても述べられる。
【０００６】
スーパースカラマイクロプロセッサ
最近の書物、「スーパースカラマイクロプロセッサ設計（Superscalar Microprocessor Design ）」、ウィリアム・ジョンソン（William Johnson ）、１９９１、プレンティスホール（Prentice-Hall ）、Inc.では、実用的なスーパースカラマイクロプロセッサの設計に対するいくつかの一般的な考察を述べている。図１および図２は全体として、ジョンソンの本に述べられたスーパースカラマイクロプロセッサの実現を示す、マイクロプロセッサ１０のブロック図である。マイクロプロセッサ１０は、整数演算を扱うための整数ユニット１５、および浮動小数点演算を扱うための浮動小数点ユニット２０を含む。整数ユニット１５および浮動小数点ユニット２０は各々専用の、命令デコーダ、レジスタファイル、再オーダバッファ、およびロード／記憶ユニットを含む。より特定的には、図１に示されるとおり、整数ユニット１５は、命令デコーダ２５、レジスタファイル３０、再オーダバッファ３５、およびロード／記憶ユニット（６０および６５）を含み、浮動小数点ユニット２０は、それ自身の命令デコーダ４０、レジスタファイル４５、再オーダバッファ５０、およびロード／記憶ユニット（７５および８０）を含む。再オーダバッファはマイクロプロセッサの理論的状態を有し、レジスタファイルはマイクロプロセッサの構造的または実状態を有する。
【０００７】
マイクロプロセッサ１０は、２つの部分、すなわち命令を記憶するための命令メモリ５５Ａおよびデータを記憶するためのデータメモリ５５Ｂを有するものとして考えることができる、メインメモリ５５に結合される。命令メモリ５５Ａは、整数ユニット１５および浮動小数点ユニット２０の両方に結合される。同様に、データメモリ５５Ｂは、整数ユニット１５および浮動小数点ユニット２０の両方に結合される。より詳細には、命令メモリ５５Ａは、命令キャッシュ５８を介してデコーダ２５およびデコーダ４０に結合される。データメモリ５５Ｂは、データキャッシュ７０を介して、整数ユニット１５のロード機能ユニット６０および記憶機能ユニット６５に結合される。データメモリ５５Ｂはまた、データキャッシュ７０を介して、浮動小数点ユニット２０の浮動小数点ロード（浮動ロード）機能ユニット７５および浮動小数点記憶（浮動記憶）機能ユニット８０に結合される。ロードユニット６０は、データメモリ５５Ｂから選択されたデータを整数ユニット１５にローディングするという従来のマイクロプロセッサ機能を実行し、記憶ユニット７０は、整数ユニット１５からのデータをデータメモリ５５Ｂに記憶するという従来のマイクロプロセッサ機能を実行する。
【０００８】
コンピュータプログラムは、マイクロプロセッサ１０により実行される命令のシーケンスを含む。コンピュータプログラムは典型的に、コンピュータシステム内に位置する、ハードディスク、フロッピィディスクまたはその他の不揮発性記憶媒体に記憶される。プログラムが実行されているとき、プログラムは記憶媒体からメインメモリ５５にローディングされる。一旦プログラムの命令および関連するデータがメインメモリ５５に入れば、個々の命令は実行準備ができており、最終的にはマイクロプロセッサ１０により実行される。
【０００９】
命令は、メインメモリ５５に記憶された後、命令キャッシュ５８を通して、命令デコーダ２５へと送られる。命令デコーダ２５は、各々の命令を調べてとるべき適切な動作を決定する。たとえば、デコーダ２５は、特定の命令が、ＰＵＳＨ、ＰＯＰ、ＬＯＡＤ、ＡＮＤ、ＯＲ、ＥＸ  ＯＲ、ＡＤＤ、ＳＵＢ、ＮＯＰ、ＪＵＭＰ、条件付きＪＵＭＰ（ＢＲＡＮＣＨ）、またはその他のタイプの命令であるかどうかを決定する。デコーダ２５が、存在すると決定した命令の特定のタイプ次第で、命令は適切な機能ユニットにディスパッチされる。ジョンソンの本において提示されたスーパースカラアーキテクチャにおいて、デコーダ２５は、マシンサイクルにつき４つの命令をデコードできる多命令デコーダである。したがって、デコーダ２５は４つの命令幅の帯域幅を示すということができる。
【００１０】
図１および図２に示されるように、ＯＰ  ＣＯＤＥバス８５は、デコーダ２５と、各機能ユニット、すなわち分岐ユニット９０、算術論理ユニット９５および１００、シフタユニット１０５、ロードユニット６０ならびに記憶ユニット６５との間に結合されている。この態様にて、各命令に対するＯＰ  ＣＯＤＥは、適切な機能ユニットに与えられる。
【００１１】
上記の説明からしばらく逸れるが、命令は典型的に、以下のフォーマット、すなわちＯＰ  ＣＯＤＥ、ＯＰＥＲＡＮＤ  Ａ、ＯＰＥＲＡＮＤ  Ｂ、ＤＥＳＴＩＮＡＴＩＯＮ  ＲＥＧＩＳＴＥＲである、多重フィールドを含むことが注目される。たとえば、サンプル命令ＡＤＤ  Ａ、Ｂ、Ｃは、レジスタＡの内容をレジスタＢの内容に加算（ＡＤＤ）し、結果を宛先レジスタＣに与えることを意味するだろう。特定の命令に対するＯＰ  ＣＯＤＥが適切な機能ユニットに与えられねばならないだけでなく、その命令に対し指定されたＯＰＥＲＡＮＤが引出されて機能ユニットに送られねばならない。もし特定のオペランドの値がまだ計算されていなければ、その値が第１に計算されて、機能ユニットがその命令を実行する前に機能ユニットに与えられねばならない。たとえば、もし現在の命令が先行する命令次第であれば、先行する命令の結果は、現在の命令が実行される前に決定されねばならない。この状況は、１つの命令の実行は別の命令の実行次第であるという、従属性と称される。
【００１２】
機能ユニットが実行する特定の命令に対して必要なオペランドは、レジスタファイル３０または再オーダバッファ３５のいずれかにより、オペランドバス１１０に与えられる。オペランドバス１１０は、機能ユニットの各々に結合される。したがって、オペランドバス１１０は、オペランドを適切な機能ユニットに運ぶ。実際には、オペランドバス１１０は、ＯＰＥＲＡＮＤ  ＡおよびＯＰＥＲＡＮＤ  Ｂに対し、別々のバスを含む。
【００１３】
一旦機能ユニットにＯＰ  ＣＯＤＥおよびＯＰＥＲＡＮＤ  ＡおよびＯＰＥＲＡＮＤ  Ｂが与えられれば、機能ユニットは命令を実行し、その結果を、すべての機能ユニットの出力および再オーダバッファ３５（および以下に述べられる各機能ユニットの入力でのそれぞれのリザベーションステーション）に結合される結果バス１１５に与える。
【００１４】
リザベーションステーション
各機能ユニットの入力には、命令に対するすべてのオペランドを機能ユニットがまだ利用可能でないという意味においてまだ完了していない命令からのＯＰコードおよびオペランドを記憶するための、「リザベーションステーション」が設けられている。リザベーションステーションはまた、結果バスがまだフリーでない場合には、ＯＰ  ＣＯＤＥおよびオペランド記憶を提供する。より特定的には、リザベーションステーションは、命令のＯＰ  ＣＯＤＥを、後にリザベーションステーションに届くであろう欠けているオペランドのために場所を保留するオペランドタグとともに記憶する。この技術のお蔭で、マイクロプロセッサが、懸案中の命令がそのオペランドとともにリザベーションステーションに集められている一方で、その他の命令の実行を続けることを可能にすることにより、性能が高められる。図１および図２に示されるように、分岐ユニット９０にはリザベーションステーション９０Ｒが、ＡＬＵ９５および１００にはそれぞれリザベーションステーション９５Ｒおよび１００Ｒが、シフタユニット１０５にはリザベーションステーション１０５Ｒが、ロードユニット６０にはリザベーションステーション６０Ｒが、記憶ユニット６５にはリザベーションステーション６５Ｒが設けられている。このアプローチにおいて、以前のマイクロプロセッサにおいては機能ユニットの入力で典型的に用いられていた入力ラッチの場所に、リザベーションステーションが設けられている。リザベーションステーションに関する標準的な参照としては、Ｒ．Ｍ．トマスロ（Tomasulo）による、「マルチプル算術ユニットの開発のための効率的なアルゴリズム（An Efficient Algorithm For Exploiting Multiple Arithmetic Units ）」、ＩＢＭジャーナル、１１巻、１９６７年１月、２５−３３頁がある。
【００１５】
上記のとおり、パイプラインを用いて、スカラマイクロプロセッサにおける有効スループットをマシンサイクル当り１つの命令という制限まで増大させることができる。図１および図２に示されるスーパースカラマイクロプロセッサにおいては、複数のパイプラインが用いられてマシンサイクル当り複数の命令の処理を可能とする。
【００１６】
再オーダバッファおよびレジスタ再命名
「レジスタ再命名」と称される別の技術をまた採用して、スーパースカラマイクロプロセッサのスループットを高めることができる。この技術は、１つの命令の流れにおける２つの命令が両方とも、たとえば仮説レジスタ１という同じレジスタを用いることを要求する場合には有効である。レジスタ１Ａと呼ばれる第２のレジスタが、第２の命令による使用のために、レジスタ１の場所に割当てられる。この態様で、第２の命令を実行でき、その結果は第１の命令がレジスタ１を用いて行なわれるのを待たずに得ることができる。図１および図２に示されるスーパースカラマイクロプロセッサ１０は、レジスタ再命名アプローチを用いて命令処理能力を向上させる。マイクロプロセッサ１０においてレジスタ再命名が実現される態様は、以下さらに詳細に述べられる。
【００１７】
上記より、レジスタ再命名によりレジスタに対する記憶の対立が排除されることがわかる。レジスタ再命名を実現するために、整数ユニット１５および浮動小数点ユニット２０は、それぞれの再オーダバッファ３５および５０に関連づけられる。簡潔化のため、整数ユニット１５における再オーダバッファ３５を介したレジスタ再命名のみが論じられるが、同じ論点が、浮動小数点ユニット２０における同様の回路についても当てはまる。
【００１８】
再オーダバッファ３５は、命令の結果に動的に割当てられる数多くの記憶ロケーションを含む。より特定的には、命令がデコーダ２５によりデコードされるとき、命令の結果の値は再オーダバッファ３５内のロケーションに割当てられ、その宛先レジスタ番号は、このロケーションに関連づけられる。これは、命令の宛先レジスタ番号を再オーダバッファのロケーションに効果的に再命名する。タグ、または一時的ハードウェア識別子は、マイクロプロセッサのハードウェアにより発生され結果を識別する。このタグは結果の値に対し、割当てられた再オーダバッファのロケーションを示す。命令の流れにおける後の命令が再命名された宛先レジスタを指すとき、レジスタ内に記憶されたと考えられる値を得るために、命令はその代わりとして、もし値がまだ計算されていなければ再オーダバッファに記憶された値、またはこの値に対するタグを得る。
【００１９】
再オーダバッファ３５は、内容アドレス可能メモリである、先入先出（ＦＩＦＯ）循環バッファとして実現される。これは、再オーダバッファ３５におけるエントリは、エントリを直接識別するよりもむしろ、エントリが含んでいる何かを特定することにより識別されるということを意味する。より特定的には、エントリは、そこに書込まれたレジスタ番号を用いることにより識別される。レジスタ番号が再オーダバッファ３５に与えられるとき、再オーダバッファはレジスタに書込まれた最新の値（またはその値がまだ計算されていなければその値に対するタグ）を提供する。このタグは、再オーダバッファ３５における特定の命令の相対的で理論的な位置を含む。この編成は、レジスタ番号が提示されるときレジスタに値を与えるレジスタファイル３０に似ている。しかしながら、再オーダバッファ３５とレジスタファイル３０とは、その中の値へのアクセスに際し非常に異なったメカニズムを用いる。
【００２０】
再オーダバッファ３５に採用されるメカニズムにおいて、再オーダバッファは要求されたレジスタ番号を、再オーダバッファのすべてのエントリにおけるレジスタ番号と比較する。次に、再オーダバッファは整合するレジスタ番号を有するエントリにおける値（またはタグ）をリターンする。これは、アソシアティブルックアップ技術である。対照的に、要求されたレジスタ番号がレジスタファイル３０に与えられるとき、レジスタファイルは単に、レジスタ番号をデコードし、選択されたエントリにおいて値を提供する。
【００２１】
命令デコーダ２５が命令をデコードするとき、デコードされた命令のソースオペランドのレジスタ番号が用いられて、再オーダバッファ３５とレジスタファイル３０の両方に同時にアクセスする。もし再オーダバッファ３５が、要求されたソースレジスタ番号と整合するレジスタ番号を備えるエントリを有さなければ、レジスタファイル３０における値が、ソースオペランドとして選択される。しかしながら、もし再オーダバッファ３５が整合するエントリを含めば、このエントリにおける値が、ソースオペランドとして選択されるが、それはこの値がレジスタに割当てられる最新の値であるに違いないからである。もし値がまだ計算されていないために利用不能であれば、その値に対するタグがその代わりとして選択され、オペランドとして用いられる。いずれにしても、値またはタグは、適切な機能ユニットのリザベーションステーションにコピーされる。この手続は、デコードされた各命令により要求される各々のオペランドに対し実行される。
【００２２】
典型的な命令シーケンスにおいて、所与のレジスタは何度も書込まれるだろう。そのため、命令が同じ宛先レジスタを特定する場合には、異なる命令により同じレジスタが再オーダバッファ３５の異なるエントリに書込まれる可能性がある。このシナリオにおいて正確なレジスタの値を得るために、再オーダバッファ３５は、割当の順序により複数の整合するエントリに優先順位をつけ、特定のレジスタの値が要求されるときに最新のエントリをリターンする。この技術により、再オーダバッファへの新しいエントリが、それよりも古いエントリにとって代わる。
【００２３】
機能ユニットが結果を発生するとき、結果は再オーダバッファ３５およびこの結果に対するタグを含むいずれかのリザベーションステーションのエントリに書込まれる。この態様で結果の値がリザベーションステーションに書込まれるとき、リザベーションステーションは、実行のために機能ユニットに発令されることを待っている１つ以上の命令を解放する必要なオペランドを与えてもよい。結果の値が再オーダバッファ３５に書込まれた後、後続の命令は再オーダバッファからの結果の値の取出しを続ける。この取出しは、エントリが新しい値によりとって代わられない限り、および値をレジスタファイル３０に書込むことにより値が引退するまで続行する。引退は、元の命令シーケンスの順で発生し、したがって割込および例外に対して順序の整った状態を保存する。
【００２４】
浮動小数点ユニット２０に関し、浮動ロード機能ユニット７５および浮動記憶機能ユニット８０に加えて、浮動小数点ユニット２０がその他の機能ユニットをまた含むことが注目される。たとえば、浮動小数点ユニット２０は、浮動加算ユニット１２０、浮動変換ユニット１２５、浮動乗算ユニット１３０、および浮動除算ユニット１４０を含む。ＯＰ  ＣＯＤＥバス１４５は、デコーダ４０と、浮動小数点ユニット２０における各機能ユニットとの間に結合され、デコードされた命令を機能ユニットに与える。各機能ユニットは、それぞれのリザベーションステーション、すなわち、浮動加算リザベーションステーション１２０Ｒ、浮動変換リザベーションステーション１２５Ｒ、浮動乗算リザベーションステーション１３０Ｒ、および浮動除算リザベーションステーション１４０Ｒを含む。オペランドバス１５０は、レジスタファイル４５および再オーダバッファ５０を機能ユニットのリザベーションステーションに結合し、こうしてオペランドが与えられる。結果バス１５５は浮動小数点ユニット２０のすべての機能ユニットの出力を再オーダバッファ５０に結合する。再オーダバッファ５０はしたがって、レジスタファイル４５に結合される。再オーダバッファ５０およびレジスタファイル４５はこうして、整数ユニット１５を参照して先に述べたのと同じ態様で結果が与えられる。
【００２５】
ジョンソンの本における特定的な実現では、整数再オーダバッファ３５は、１６のエントリを有し、浮動小数点再オーダバッファ５０は８つのエントリを有する。整数再オーダバッファ３５および浮動小数点再オーダバッファ５０は各々、マシンサイクル当り２つの計算された結果を受入れることができ、かつサイクル当り２つの結果をそれぞれのレジスタファイルに引退させることができる。
【００２６】
マイクロプロセッサがデコードされた命令を順を追って発令する（「順序発令」）ように制限されているとき、デコードされた命令が資源競合を発生するとき（すなわち２つの命令両方がＲ１レジスタの使用を望んでいるとき）はいつでも、またはデコードされた命令が従属性を有するときには、マイクロプロセッサは命令をデコードすることを停止しなければならない。対照的に、「順序の乱れた発令」を採用する図１および図２のマイクロプロセッサ１０は、デコーダ２５を実行ユニット（機能ユニット）から切り離すことにより、このタイプの命令の発令を達成する。このことは、再オーダバッファ３５および機能ユニットでの前述のリザベーションステーションを用いて、分布された命令ウィンドウを効果的に確立することにより行なわれる。この態様で、たとえ命令を即時に実行することができなくても、デコーダは命令のデコードを続けることができる。命令ウィンドウは命令のプールとして働き、マイクロプロセッサが先に進んで命令の実行を続けるときにそこから命令を引出す。ルックアヘッド能力が、このようにして命令ウィンドウによりマイクロプロセッサにもたらされる。従属性が取除かれるとき、およびオペランドが利用可能になるに従って、ウィンドウにおけるより多くの命令が機能ユニットにより実行され、デコーダはウィンドウをさらに多くのデコードされた命令で満たし続ける。
【００２７】
スカラ  −  スーパースカラ比較
スーパースカラマイクロプロセッサの動作を理解するために、パイプラインの各々の段、すなわち取出し、デコード、実行、ライトバック、および結果表明における、スカラおよびスーパースカラマイクロプロセッサを比較することが役に立つ。以下の表１は、かかる比較を提供する。
【００２８】
【表１】
0003662296.tif 000002
分岐予測および理論的実行
マイクロプロセッサに分岐予測ユニットを含めることにより、性能を向上できる。プログラムの命令の流れにおける分岐がマイクロプロセッサの命令取出能力を妨げることは周知である。これは、分岐が発生すると、取出器が取出すべき次の命令は、分岐の結果次第であるからである。分岐予測ユニットがなければ、マイクロプロセッサの命令取出器は、停止するか、または誤った命令を取出すかもしれない。このことは、並列に実行する命令ウィンドウにおけるその他の命令をマイクロプロセッサが発見する可能性を減ずる。分岐予測ユニットがハードウェア分岐予測を採用して、命令取出しの間に発生する分岐の結果を予測することができる。このようなハードウェア分岐予測ユニットは、分岐がとられるべきか否かを予測する。たとえば、分岐目的バッファが採用されて、先行する分岐の結果の続いている履歴を保存する。この履歴に基づき、取出された分岐命令がどの分岐をとるべきかについての判断が、取出された特定の分岐の間に行なわれる。
【００２９】
ソフトウェア分岐予測がまた採用されて、分岐の結果を予測することが注目される。この分岐予測アプローチにおいて、プログラムの各分岐に対していくつかのテストが実行され、どの分岐の結果がより適当であるかを統計的に決定する。ソフトウェア分岐予測技術は典型的に、好ましい分岐の結果についての統計的な分岐予測情報をプログラムそのものに埋込むことを含む。「理論的実行」という用語はしばしば、マイクロプロセッサ設計の実行において用いられ、（分岐といった）コードのシーケンスは、マイクロプロセッサがそのコードのシーケンスを実行するのに適するということが確実となる前に実行される。
【００３０】
ハードウェア分岐予測への１つのアプローチは、いわゆる引退ＰＣ（プログラムカウンタ）アドレスをマイクロプロセッサに記憶することである。引退ＰＣは、最早理論的ではないとして再オーダバッファからレジスタファイルに引退した命令と、理論的に実行された命令の結果であるとしてなお再オーダバッファ内に存在する命令との間の、回転する分界ラインである。命令が命令デコーダによりデコードされ、分岐が発生したとき、分岐予測ユニットは、その分岐に対する目的命令を予測する。マイクロプロセッサは次に、理論に基づき、予測された目的命令およびそれに続く命令の実行に取りかかる。予測された目的命令およびそれに続く命令は、「理論的に実行された命令」と指定される。分岐命令が実際に実行されるまで、分岐予測が実際に正しかったかどうか、および理論的に実行された命令が適切な経路にあったかどうかということは、わからないであろう。このように理論的に実行された命令の結果は、理論的な実行を助成するものとしての再オーダバッファ内に一時的に記憶される。言い換えれば、再オーダバッファは、予測され実行された命令は、分岐予測ユニットにより適切に選択されたという理論の下に、これらの命令の結果をオペランドとして記憶する。
【００３１】
分岐予測ユニットが分岐命令の目的を正しく予測したことが判明すれば、再オーダバッファに記憶された理論的に実行された命令は、レジスタファイルに引退する。このような引退が発生するときには、引退ＰＣは次に、引退した最後の命令のすぐ後の命令のアドレスを反映する。言い換えれば、命令が最早理論的でないとして引退したとき、引退ＰＣは理論的に実行されることになる次の命令に進む。しかしながら、もし分岐予測ユニットが不正確であったなら、分岐予測誤りが発生したことになる。この場合、再オーダバッファにおける理論的に実行された命令結果は廃棄され、マイクロプロセッサは今度は正しい分岐をとることにより実行を続ける。
【００３２】
上記より、分岐命令に出会うことによりマイクロプロセッサの性能に大きな影響を与える可能性があり、この分岐予測技術は、この問題を大きく改善するということが認識される。しかしながら、単に特定の分岐の結果を予測するよりも多くの性能上の問題が分岐命令に発生する。より特定的には、分岐命令は、様々な条件コードまたはフラグがセットされて分岐がとられるべきかどうかを決定するという状態次第である。したがって、先に述べた従来のスーパースカラマイクロプロセッサにおいて、もしシーケンスにおいて同じフラグが複数の命令により用いられれば、フラグの状態を修正する前に特定のフラグを用いて先行する命令が行なわれるまで、そのような命令は、待たなければならないかもしれない。これはフラグの従属性という状態であり、機能ユニットへの命令の発行をスローダウンするため、性能にマイナスの影響を与える。
【００３３】
【発明の概要】
したがって、この発明のマイクロプロセッサの１つの利点は、分岐命令の処理に関するマイクロプロセッサの性能の向上である。
【００３４】
この発明の１つの実施例に従えば、命令の流れの中に含まれる命令をデコードするため、およびデコードされた命令をＲＯＰに変換するためのデコーダを含む、スーパースカラマイクロプロセッサが提供される。マイクロプロセッサは、マイクロプロセッサの理論的な状態を記憶するための、デコーダに結合された再オーダバッファを含む。マイクロプロセッサはまた、マイクロプロセッサの実状態を記憶するための、再オーダバッファに結合されたレジスタファイルを含む。マイクロプロセッサの再オーダバッファは、理論的な整数結果を記憶するための整数結果部分と、整数結果に関連する理論的なフラグ情報を記憶するためのフラグ結果部分とを含む、複数の記憶ロケーションを有する再オーダバッファアレイを含む。フラグ結果部分および整数結果部分は連結して、整数結果よりも幅広い浮動小数点結果の記憶に対処する、浮動小数点記憶ロケーションを形成する。実フラグレジスタは、再オーダバッファから引退したフラグ情報を記憶するための再オーダバッファに結合される。マイクロプロセッサの１つの実施例は、デコーダと再オーダバッファとに結合された浮動小数点ユニット、デコーダと再オーダバッファとに結合された分岐ユニット、およびデコーダと再オーダバッファとに結合された整数ユニットを含む。
【００３５】
新規性を有すると考えられるこの発明の特徴は、前掲の特許請求の範囲において特定的に述べられる。しかしながら、この発明そのものは、その構造についても動作方法についても、以下の説明および添付の図面を参照することにより、最もよく理解されるであろう。
【００３６】
【発明についての説明】
Ｉ．スーパースカラマイクロプロセッサ−構造概観
この発明を実行するために意図された最高のモードの詳細な説明が以下に述べられる。説明は、この発明の例示を意図するものであり、制限とみなされるべきではない。
【００３７】
図３および図４を参照すれば、この発明は、Ｘ８６命令セットを実行するスーパースカラＸ８６マイクロプロセッサ２００のコンテキストにおいて最高に理解できる。マイクロプロセッサ２００の構造的な概観が簡単に提示される。マイクロプロセッサ２００は、命令およびデータを受取るために内部アドレスおよびデータ（ＩＡＤ）バス２９５を介して外部メモリ３０２に結合された命令キャッシュ（ＩＣＡＣＨＥ）２１０を含む。命令キャッシュ２１０はまた、命令キャッシュ２１０から命令デコーダ２０５への命令の供給を行なうバイトキュー（Ｂｙｔｅ  Ｑ）２１５に結合される。命令デコーダ２０５は、ＲＩＳＣコア２０２に結合される。「ＲＩＳＣコア」という用語は、マイクロプロセッサ２００の中心カーネルを指し、レジスタファイル２５５、再オーダバッファ２８５、ならびに算術論理アンドシフトユニット２４０（ＡＬＵ０アンドＳＨＦ）、算術論理ユニット２４５（ＡＬＵ１）、特別レジスタブロック２５０（ＳＲＢ）、ロード／記憶機能ユニット２６０（ＬＳＳＥＣ）、分岐セクション２３５（ＢＲＮＳＥＣ）、および浮動小数点ユニット２６５（ＦＰＵ）といった様々な機能ユニットを含む、ＲＩＳＣ（縮小命令セット）アーキテクチャである。
【００３８】
ＲＩＳＣコア２０２はさらに、ｎは０から３に変化する整数である、４つのＡオペランドバス（ＸＲＤｎＡＢ（４０：０））および４つのＢオペランドバス（ＸＲＤｎＢＢ（４０：０））を含むオペランドバス２７５を有する。ＲＩＳＣコア２０２はまた、デコーダ２０５と上記の図３および図４に示される機能ユニットとの間に結合された、４つの１２ビット幅のタイプアンドディスパッチ（ＴＡＤ）バス２７２を含む。４つのＴＡＤバス２７２の各々は、デコーダ２０５内のそれぞれの命令ディスパッチ位置Ｄ０、Ｄ１、Ｄ２およびＤ３に対応し、それぞれの命令のタイプを機能ユニットへ運ぶ。より特定的には、各ＴＡＤバスは、機能ユニットに与えられるタイプ情報専用の３ビット、特定のディスパッチが有効であることを示す１ビット、および８ビットのオペレーションコードを含む。
【００３９】
マイクロプロセッサ２０２はまた、機能ユニットおよび再オーダバッファ２８５に結合された、結果タグおよび結果バス２８０ＸＲＥＳｎＢ（４０：０）（ｎは０から４まで変化する）を含む。オペランドバス２７５のＡおよびＢオペランドバスはまた、レジスタファイル２５５および再オーダバッファ２８５に結合される。分岐、すなわち特定のキャッシュラインにおいて分岐がとられるかとられないかを予測する、分岐予測ブロック２２５が設けられる。分岐機能ユニットまたはセクション（ＢＲＮＳＥＣ）２３５が設けられて、レジスタファイル２５５および再オーダバッファ２８５と協力してデコーダ２０５によりディスパッチされる分岐命令を実際に実行する。分岐機能ユニット２３５は、分岐予測誤りライン（ＢＲＮ＿ＭＳＰ）（ＸＴＡＲＧＥＴ（３１：０）バスに関連する）を介して分岐予測ブロック２２５に結合される分岐予測誤り出力を含み、分岐機能ユニット２３５での実際の分岐実行の際にいつ分岐予測誤りが発生したかについて分岐予測ブロックに知らせる。ＢＲＮ＿ＭＳＰ信号は制御信号であり、これにより分岐機能ユニット２３５は分岐予測誤りが発生したことを示す。ＸＴＡＲＧＥＴバスは、取出しが今開始されるべきアドレスを示す再方向付けＰＣを転送する。言い換えれば、ＸＴＡＲＧＥＴバスは、分岐命令が実行されたとき発生する目的アドレスを転送する。
【００４０】
命令キャッシュ２１０に加えて、マイクロプロセッサ２００はまた、データキャッシュ２７０（ＤＣＡＣＨＥ）および物理タグ回路３１０を含む。データキャッシュ２７０は、ＲＩＳＣコアのロード／記憶機能ユニット２６０に結合される。データキャッシュ２７０はまた、ＩＡＤバス２９５を介し外部メモリ３０２に結合され、そこからデータにアクセスする。物理タグ回路３１０はＩＡＤバスを介して、命令キャッシュ２１０とデータキャッシュ２７０両方と相互作用する。命令キャッシュ２１０およびデータキャッシュ２７０は両方とも、線形的にアドレス指定可能なキャッシュである。命令キャッシュ２１０およびデータキャッシュ２７０は物理的に分離されている。しかしながら、両方のキャッシュは同じアーキテクチャを用いて組織される、すなわち両方のキャッシュは対応するタグアレイとともに記憶アレイを含む。
【００４１】
マイクロプロセッサ２００はまた、変換ルックアサイドバッファ（ＴＬＢ）３１７を有するメモリ管理ユニット（ＭＭＵ）３１５、およびバスインタフェースユニット３００（ＢＩＵ）を含む。メモリ管理ユニット３１５は、ＩＡＤバス２９５および物理タグ回路３１０に結合される。バスインタフェースユニット３００は、物理タグ回路３１０およびＩＡＤバス２９５に結合され、またアドバンスドマイクロディバイシズ（Advanced Micro Devices）ＡＭ４８６バスといった外部マイクロプロセッサバスに結合される。
【００４２】
マイクロプロセッサ２００は、命令のシーケンスを含むコンピュータプログラムを実行する。コンピュータプログラムは典型的に、コンピュータシステム内に位置するハードディスク、フロッピィディスクまたはその他の不揮発性記憶媒体に記憶されている。プログラムが実行されるとき、プログラムは、バスインタフェースユニット３００を介してマイクロプロセッサ２００によりアクセスされるメインメモリ３０２（外部メモリ）に、記憶媒体からロードされる。一旦プログラムの命令および関連するデータがメインメモリ３０２に入れば、個々の命令は実行準備ができており、最終的にはマイクロプロセッサ２００により実行される。
【００４３】
メインメモリ３０２に記憶された後、命令はバスインタフェースユニット３００を介し、命令が一時的に保存される命令キャッシュ２１０に送られる。命令デコーダ２０５は、整列し命令をバッファするバイトキュー２１５を介し、命令キャッシュ２１０から命令を受取る。命令デコーダ２０５は命令を調べ、とるべき適切な動作を決定する。たとえば、デコーダ２０５は、特定の命令がＰＵＳＨ、ＰＯＰ、ＬＯＡＤ、ＡＮＤ、ＯＲ、ＥＸ  ＯＲ、ＡＤＤ、ＳＵＢ、ＮＯＰ、ＪＵＭＰ、条件付きＪＵＭＰ（ＢＲＡＮＣＨ）、またはその他の命令であるかどうかを決定してもよい。どの特定の命令が存在するとデコーダ２０５が決定するかにより、命令はＲＩＳＣコア２０２の適切な機能ユニットにディスパッチされる。
【００４４】
ＲＩＳＣコア２０２にディスパッチされた命令は典型的に、以下のフォーマットの多重フィールドを含み、そのフォーマットとは、ＯＰ  ＣＯＤＥ、ＯＰＥＲＡＮＤ  Ａ、ＯＰＥＲＡＮＤ  Ｂ、ＤＥＳＴＩＮＡＴＩＯＮ  ＲＥＧＩＳＴＥＲである。ＯＰ  ＣＯＤＥは、タイプアンドディスパッチ（ＴＡＤ）バス２７２を介し、ＲＩＳＣコア２０２の機能ユニットに命令デコーダ２１０から与えられる。特定の命令のＯＰ  ＣＯＤＥ（またはタイプ）が適切な機能ユニットに与えられねばならないだけでなく、命令に対して指定されたＯＰＥＲＡＮＤが引出されて機能ユニットに送られねばならない。もし特定のオペランドの値が外部メモリ３０２に記憶されていれば、この値は引出されてデータキャッシュ２７０に記憶される。この値は次に、ロード記憶セクション２６０によりロードされ、再オーダバッファ２８５に与えられてもよい。その代わりとして、もし特定のオペランドの値がまだ計算されていなければ、その値が第１に計算され、命令が実行されることができる前に機能ユニットに与えられる。たとえば、もし現在の命令が先行する命令次第であれば、先行する命令の結果が、現在の命令が実行され得る前に決定されねばならない。この状況は従属性と呼ばれる。
【００４５】
機能ユニットが実行することになる特定の命令に対して必要なオペランドは、レジスタファイル２５５または再オーダバッファ２８５のいずれかによりオペランドバス２７５に与えられる。オペランドバスは、オペランドを適切な機能ユニットに運ぶ。一旦機能ユニットがＯＰ  ＣＯＤＥ、ＯＰＥＲＡＮＤ  Ａ、およびＯＰＥＲＡＮＤ  Ｂを受取れば、機能ユニットは命令を実行し、すべての機能ユニットの入力および出力、ならびに再オーダバッファ２８５に結合された結果バス２８０に結果を与える。
【００４６】
再オーダバッファ２８５は、先入先出（ＦＩＦＯ）デバイスとして管理される。命令を命令デコーダ２０５がデコードするとき、対応するエントリは再オーダバッファ２８５に割当てられる。命令に対して計算された結果の値はしたがって、命令の実行が完了したとき割当てられたエントリに書込まれる。結果の値は次に、レジスタファイル２５５に書込まれ、もし命令に関連する例外がなければ、およびもし命令に影響を及ぼす理論的な分岐が懸案中でなければ、命令は引退する。もし、命令に関連するエントリが再オーダバッファ２８５の先頭に到達したとき命令が完了していなければ、再オーダバッファ２８５の進行は、命令が完了するまで停止される。しかしながら、さらなるエントリの割当は続けることができる。
【００４７】
各機能ユニットは、命令に対するオペランドがまだ機能ユニットにとって利用可能ではないためまだ完了していない命令からのＯＰ  ＣＯＤＥを記憶するための、リザベーションステーション（ＲＳ）２３５Ｒ、２４０Ｒ、２４５Ｒ、２６０Ｒおよび２６５Ｒをそれぞれ含む。各リザベーションステーションは、命令のＯＰ  ＣＯＤＥおよびオペランドを、後にリザベーションステーションに到着する欠けているオペランドのために場所を保留するタグとともに記憶する。この技術は、懸案の命令がそのオペランドとともにリザベーションステーションに集められている一方で、マイクロプロセッサ２００がその他の命令の実行を続けることを可能にすることにより、性能を高める。
【００４８】
マイクロプロセッサ２００は、デコーダ２０５をＲＩＳＣコア２０２の機能ユニットから切り離すことにより、順序の乱れた発令を行なう。より特定的には、再オーダバッファ２８５および機能ユニットのリザベーションステーションは効果的に、分布された命令ウィンドウを確立する。したがって、デコーダ２０５は、たとえ命令が即時実行できなくとも命令のデコードを続けることができる。命令ウィンドウは命令のプールとしての働きをし、機能ユニットは続けて命令の実行を行なうときにそこから命令を引出す。命令ウィンドウはこのようにして、マイクロプロセッサ２００にルックアヘッド能力をもたらす。従属性が解消し、オペランドが利用可能になれば、ウィンドウ内のさらに多くの命令が機能ユニットにより実行され、デコーダはウィンドウをさらに多くのデコードされた命令で満たし続ける。
【００４９】
マイクロプロセッサ２００は、分岐予測ユニット２２５および分岐機能ユニット２３５（ＢＲＮＳＥＣ）を用いて、性能を高める。分岐発生のとき、次の命令は分岐の結果次第であるため、プログラムの命令の流れにおける分岐は、マイクロプロセッサが命令を取出す能力を妨げる。したがって、命令キャッシュ２１０のサクセサのアレイに記憶された情報を用いて予測される、予測された分岐は、分岐セクション２３５により実行される。分岐セクション２３５は次に分岐の結果を調べて、予測された分岐が正しかったかどうかを決定する。もし分岐予測誤りがあれば、再オーダバッファ２８５の内容は、誤り予測された分岐命令が廃棄されるのに続いて割当てられる。
【００５０】
ＩＩ．スーパースカラマイクロプロセッサ−動作概観
マイクロプロセッサ２００は、サイズが可変である命令を処理することができる。たとえば、マイクロプロセッサ２００は、長さが可変の命令を用いる周知のＩｎｔｅｌTM命令セットのいわゆるＸ８６命令を処理することができる。
【００５１】
マイクロプロセッサ２００のアーキテクチャは、ＩｎｔｅｌTMＸ８６命令セットに見受けられるようないわゆるＣＩＳＣ（複合命令セットコンピュータ）命令を取入れ、これらの命令を、ＲＩＳＣコア２０２により処理されるＲＩＳＣのような命令（ＲＯＰ）に変換することができる。この変換プロセスは、図３および図４に示されたマイクロプロセッサ２００のデコーダ２０５において発生する。デコーダ２０５は、ＣＩＳＣ命令をデコードし、ＣＩＳＣ命令をＲＯＰに変換し、次にＲＯＰを実行のために機能ユニットにディスパッチする。デコーダ２０５の構造および動作に関するより詳細な説明は、「スーパースカラ命令デコーダ（Superscalar Instruction Decoder ）」と題される、１９９３年１０月２９日に出願された、出願第０８／１４６，３８３号の同時係属中の特許出願において行なわれ、その開示はこの明細書中に引用により援用され、本特許出願の譲渡人に譲渡される。
【００５２】
マイクロプロセッサ２００がそのＲＩＳＣコアにクロックサイクル当り数多くのＲＯＰを与える能力は、このスーパースカラマイクロプロセッサによりもたらされる高性能の１つの源である。命令キャッシュ（ＩＣＡＣＨＥ）２１０は、このＲＯＰ供給をバイトのキューまたはバイトキュー（バイトＱ）２１５としてもたらす、マイクロプロセッサ２００の構成部品である。この発明のこの特定の実施例において、命令キャッシュ２１０は、１６Ｋバイトの、有効フォーウェイ・セット・アソシアティブの、線形的にアドレス指定された命令キャッシュである。
【００５３】
図３および図４に示されるように、命令キャッシュ２１０のバイトＱ２１５は、命令デコーダ２０５に与えられる。命令デコーダ２０５は、与えられた各命令を１つ以上のＲＯＰにマップする。デコーダ２０５のＲＯＰディスパッチウィンドウ２２０は、４つのディスパッチ位置を含み、ＩＣＡＣＨＥ２１０からの命令をそこにマップすることができる。４つのディスパッチ位置は、Ｄ０、Ｄ１、Ｄ２、Ｄ３として指定される。第１の例では、バイトＱ２１５によりデコーダ２０５に与えられる命令は、２つのＲＯＰディスパッチ位置にマップすることができる命令であると仮定される。この場合、この第１の命令がデコーダ２０５に与えられるとき、デコーダ２０５は、その命令を、ディスパッチ位置Ｄ０に与えられる第１のＲＯＰと、ディスパッチ位置Ｄ１に与えられる第２のＲＯＰとにマップする。次に、後続の第２の命令は３つのＲＯＰ位置にマップできると仮定される。この第２の命令がバイトＱ２１５によりデコーダ２０５に与えられるとき、その命令は、ディスパッチ位置Ｄ２に与えられる第３のＲＯＰと、ディスパッチＤ３に与えられる第４のＲＯＰとにマップされる。ディスパッチ位置Ｄ０からＤ３に現われるＲＯＰは次に、機能ユニットにディスパッチされる。第２の命令がマップされる残余の第３のＲＯＰは、かかるＲＯＰがディスパッチされることができる前に、次のディスパッチウィンドウが処理されるのを待たねばならないことが注目される。
【００５４】
命令キャッシュ２１０がどの特定のバイトをドライブ・アウトしてバイトＱ２１５にすべきかに関する情報は、分岐予測ブロック２２５内に含まれており、これは命令キャッシュ２１０への入力である。分岐予測ブロック２２５は、次に予測される分岐目的ロケーションをブロックベースでブロックに示す、次のブロックアレイ（ＩＣＮＸＴＢＬＫ）を含む。分岐機能ユニット２３５は、命令の流れが出会う分岐命令を実際に実行する、機能ユニットである。マイクロプロセッサ２００において利用できる１つの分岐予測メカニズムは、Ｗ．Ｍ．ジョンソンの、１９９２年４月８日に発行された、「キャッシュに命令の各ブロックとともに記憶された取出し情報を用いて、正しく予測された分岐命令に続く実行に対する遅延を減ずるためのシステム（System For Reducing Delay For Execution Subsequent To Correctly Predicted Branch Instruction Using Fetch Information Stored With Each Block of Instructions In Cache）」と題される、米国特許第５，１３６，６９７号に述べられ、その開示はこの明細書中に引用により援用される。命令キャッシュ２１０にはまた、外部メモリ３０２から要求された命令キャッシュミスを取出す、先取りブロック２３０が設けられている。
【００５５】
マイクロプロセッサ２００は、４つの整数機能ユニット、すなわち、分岐機能ユニット２３５、ＡＬＵ０／シフタ機能ユニット２４０、ＡＬＵ１機能ユニット２４５、および特別レジスタ機能ユニット２５０を含み、そこにデコーダ２０５の４つのＲＯＰ位置を発令できる。分岐機能ユニット２３５は分岐命令を実行し、１サイクルの待ち時間を示す。分岐機能ユニット２３５は、クロックサイクル当り１つの新しいＲＯＰを受入れることができる。分岐ユニット２３５は、２エントリリザベーションステーション２３５Ｒを含む。この明細書の目的のために、２つのエントリを含むリザベーションステーションは、２つのリザベーションステーションと同じであると考えられる。
【００５６】
ＡＬＵ０／シフタ機能ユニット２４０は、１サイクルの待ち時間を示す。クロックサイクルにつき１つの新しいＲＯＰがユニット２４０に受入れられることができる。ＡＬＵ０／シフタ機能ユニット２４０は、理論的ＲＯＰを２つまで保持する２エントリリザベーションステーション２４０Ｒを含む。すべてのＸ８６算術および論理計算は、この機能ユニットまたはその代わりとしてその他の算術論理ユニットＡＬＵ１  ２４５を通る。さらに、シフト、ローテートまたは「第１番目発見」命令が、ＡＬＵ０／シフタ機能ユニット２４０に与えられる。
【００５７】
ＡＬＵ１機能ユニット２４５も同様に１サイクルの待ち時間を示す。クロックサイクルにつき１つの新しいＲＯＰがＡＬＵ１機能ユニット２４５により受入れられることができることが注目される。ＡＬＵ１機能ユニットは、理論的ＲＯＰを２つまで保持する２エントリリザベーションステーション２４５Ｒを含む。すべてのＸ８６算術および論理計算は、この機能ユニットまたはその他の算術論理ユニット、ＡＬＵ０（２４０）を通る。ＡＬＵ０およびＡＬＵ１は、クロックサイクルにつき２つまでの整数結果演算の計算を可能にする。
【００５８】
特別レジスタ機能ユニット２５０は、汎用レジスタファイル２５５の外にある、内部制御、状態、およびマップされた状態を扱うための、特別ブロックである。この発明の１つの実施例において、特別レジスタ機能ユニット２５０にはリザベーションステーションがない、というのもＲＯＰが特別レジスタ機能ユニット２５０に発令されるとき、懸案となっている理論的状態はないからである。
【００５９】
ロード／記憶機能ユニット２６０および浮動小数点機能ユニット２６５は、デコーダ２０５のＲＯＰディスパッチウィンドウ２２０に結合される。ロード／記憶機能ユニット２６０は、４エントリリザベーションステーション２６０Ｒを含む。浮動小数点機能ユニット２６５は、２つのリザベーションステーション２６５Ｒを含む。データキャッシュ２７０は、ロード／記憶機能ユニット２６０に結合されてデータ記憶およびそれに対する検索を与える。浮動小数点機能ユニット２６５は、４１ビットの混合整数／浮動小数点オペランドバス２７５および結果バス２８０に連結される。より詳細には、オペランドバス２７５は、４１ビット幅を示す８つの読出オペランドバスを含む。結果バス２８０は、５つの結果バス、すなわち４１ビット幅を示す４つの汎用バスと、３２ビット幅を示す１つの専用バスとを含む。専用結果バスは、ロード記憶機能ユニット２６０、分岐ユニット２３５および特別レジスタブロック２５０の間に結合される。ロード記憶機能ユニットは、専用結果バスを通して記憶をリターンし、分岐ユニット２３５は、専用結果バスを通して分岐をリターンする。特別レジスタブロック２５０は、その結果を専用結果バスを通してリターンする。
【００６０】
浮動小数点ユニット２６５が混合整数／浮動小数点オペランドおよび結果バスに連結していることにより、１つのレジスタファイル２５５および１つの再オーダバッファ２８５が理論的整数および浮動小数点ＲＯＰの両方に対して用いられることができる。２つのＲＯＰは、浮動小数点リザベーションステーション２６５Ｒから浮動小数点機能ユニット２６５内の８２ビットの浮動小数点コアに入力される、８２ビットの拡張精度演算を形成する。
【００６１】
浮動小数点機能ユニットト２６５の８２ビット浮動小数点コアは、浮動小数点加算器、浮動小数点乗算器および浮動小数点除算／平方根機能ユニットを含む。浮動小数点ユニット２６５内の浮動小数点加算器機能ユニットは、２サイクルの待ち時間を示す。浮動小数点加算器は、次に送られる８０ビットの拡張結果を計算する。浮動小数点乗算器は、拡張精度乗算演算に対し、６サイクルの待ち時間を示す。３２×３２乗算器は、単精度乗算演算のために、浮動小数点機能ユニット２６５内に採用される。この３２×３２乗算器は、拡張精度を必要とする６４ビット仮数演算に対し、多サイクルである。浮動小数点除算／平方根機能ユニットは、基数４の対話型除算を採用し、６４ビット仮数の２ビット／クロックを計算する。
【００６２】
Ａ／Ｂオペランドバスのバス幅が４１ビットであるこの発明の実施例において、整数ユニットに続いているこれらＡ／Ｂオペランドバスに関し、オペランドには３２ビットが与えられることが注目される。この発明のその他の実施例は、Ａ／Ｂオペランドバスのバス幅が４１ビットでなく、３２ビットまたはその他のサイズであることを意図することがまた注目されるべきである。そのような３２ビットオペランドバス幅の配置においては、オペランドバスから分離される制御ラインは、制御情報の転送のために採用される。
【００６３】
ロード記憶機能ユニット２６０は、４エントリリザベーションステーション２６０Ｒを含む。ロード記憶機能ユニット２６０は、クロックサイクルにつき２つのロードまたは記憶演算が発令されることを許可する。ロード記憶セクションはまた、線形のアドレスを計算し、要求されたメモリのセグメントへのアクセス権を検査する。データキャッシュ２７０におけるヒット／ミスの検査に関するロードまたは記憶演算の待ち時間は、１サイクルである。２つまでのロード演算が、同時にデータキャッシュ２７０にアクセスし、その演算を記憶バス２８０に送ることができる。ロード記憶セクション２６０は、整数および浮動小数点ロードならびに記憶演算の両方を扱う。
【００６４】
図３および図４に示されるように、マイクロプロセッサ２００は、再オーダバッファ２８５に結合されたレジスタファイル２５５を含む。レジスタファイル２５５も再オーダバッファ２８５も、オペランド／フラグ選択ブロック２９０を介してオペランドバス２７５に結合される。レジスタファイル２５５、再オーダバッファ２８５およびオペランド／フラグ選択ブロック２９０は協調して、オペランドを機能ユニットに与える。結果は機能ユニットから得られるため、これらの結果は再オーダバッファ２８５に転送され、エントリとしてその中に記憶される。
【００６５】
より詳細には、レジスタファイル２５５および再オーダバッファ２８５は、プログラム実行の間記憶をオペランドに与える。レジスタファイル２５５は、整数および浮動小数点命令の両方に対しマップされたＸ８６レジスタを含む。レジスタファイルはまた、一時的整数および浮動小数点レジスタを含み、中間計算の保持を提供する。この発明のこの特定的な実施例において、レジスタファイル２５５内のすべてのレジスタは、８つの読出および４つの書込ラッチとして実現される。このようにして与えられた４つの書込ポートにより、クロックサイクルにつき４つまでのレジスタファイル宛先が書込まれることが可能になる。もし浮動小数点結果がレジスタファイルに書込まれているならば、これは、ポートにつき１つの整数の値またはポートにつき０．５の浮動小数点の値のいずれかであり得る。８つの読出ポートにより、各々２つのソース読出演算を伴う４つのＲＯＰがクロックサイクルにつきディスパッチされることが可能になる。
【００６６】
再オーダバッファ２８５は、１６までの理論的ＲＯＰのキューを保持する、１６エントリ環状ＦＩＦＯとして編成される。再オーダバッファ２８５はしたがって、１６エントリを割当てることができ、その各々は１つの整数結果または０．５の浮動小数点結果を含むことができる。再オーダバッファ２８５は、クロックサイクルにつき４つのＲＯＰを割当てることができ、クロックサイクルにつき５つまでのＲＯＰを有効にすることができ、クロックサイクルにつき４つのＲＯＰをレジスタファイル２５５に引退させることができる。マイクロプロセッサ２００の現在の理論的状態は、必要なときに続いて機能ユニットに送るために、再オーダバッファ２８５に保持される。再オーダバッファ２８５はまた、エントリが記憶されるＲＯＢアレイ４０５内の位置により、各ＲＯＰの相対的な順序を維持する。再オーダバッファ２８５はまた、割込またはトラップルーチンのために、処理に対し予測誤りおよび例外を示す。
【００６７】
再オーダバッファ２８５は、それぞれ８つのオペランドで８つのオペランドバス２７５を駆動できる。再オーダバッファ２８５は、５つの結果バス２８０で、クロックサイクルにつき５つまでの結果を受取ることができる。オペランドバスは、８つの４１ビット共用整数／浮動小数点バスであることが注目される。８つのオペランドバスは、デコーダ２０５のＲＯＰディスパッチウィンドウ２２０内の４つのＲＯＰディスパッチ位置に対応する。４つのＲＯＰディスパッチ位置の各々は、ソースＡ読出オペランドおよびソースＢ読出オペランドを有することができる。このようにして形成された４つのＡおよびＢ読出オペランドバスの対の各々は、ＲＯＰディスパッチウィンドウ２２０内の固定されたＲＯＰおよびソース読出ロケーションに与えられる。
【００６８】
レジスタファイル２５５および再オーダバッファ２８５は、オペランド情報で読出オペランドバス２７５を駆動する、マイクロプロセッサ２００内のデバイスである。もしデコードされたＲＯＰに対し理論的宛先が存在しなければ、すなわち、もしＲＯＰにより要求されるオペランドが再オーダバッファ内に存在しなければ、レジスタファイルがオペランドを提供する。しかしながら、もし理論的宛先が存在すれば、すなわちもしデコードされたＲＯＰにより要求されるオペランドが再オーダバッファ内に存在すれば、そのオペランドに対する再オーダバッファ内の最新のエントリが、レジスタファイル内の対応するレジスタの代わりに機能ユニットに送られる。この再オーダバッファ結果の値は、もし機能ユニット内で今なお完了されつつある理論的な宛先に対して再オーダバッファまたは再オーダバッファタグ内に存在すれば、理論的結果である可能性がある。
【００６９】
５つの結果バス２８０は、この特定の実施例において３２ビット幅である特別結果バスを除いて、４１ビットバスである。読出オペランドおよび結果バスは、それぞれ、すべての整数機能ユニットへの入力および出力であることがまた注目される。これらの同じ読出オペランドおよび結果バスはまた、それぞれ、浮動小数点機能ユニット２６５の浮動小数点リザベーションステーション２６５Ｒへの、入力および出力である。浮動小数点リザベーションステーション２６５Ｒは、４１ビットオペランドおよび結果バスを、８２ビット拡張精度バスに変換し、必要時にはそれを構成する専用機能ユニットへと送る。
【００７０】
マイクロプロセッサ２００の整数および浮動小数点機能ユニットには、これらユニットのリザベーションステーションを介してＲＯＰのローカルバッファが与えられている。これら機能ユニットのほとんどにおいて、このローカルバッファは、ＦＩＦＯとして編成される２エントリのリザベーションステーションの形式をとる。このようなリザベーションステーションの目的は、デコーダ２０５のディスパッチ論理が理論的ＲＯＰを、このような理論的ＲＯＰのソースオペランドが現在利用であるかどうかにかかわらず、機能ユニットに送ることを許可することである。したがって、この発明のこの実施例において、多数の理論的ＲＯＰ（１６まで）を、長い計算またはロードが完了するのを待たずに発令できる。この態様で、さらに多くの命令レベルの並列性が示され、マイクロプロセッサ２００は、そのピーク性能により近づいて動作することができる。
【００７１】
リザベーションステーションの各エントリは、２つのソースオペランドまたはタグ、プラス各エントリに関連する宛先およびオペレーションコードに関しての情報を保持できる。機能ユニットはまた、再オーダバッファが懸案であると示したソースオペランドの結果（それらのオペランドに対し再オーダバッファがオペランドそのものを与えるよりもその代わりにオペランドタグを与えることにより示したもの）を、そのような結果を待っているその他の機能ユニットに直接送ることができる。この発明のこの特定の実施例において、機能ユニットにおけるリザベーションステーションは典型的に、クロックサイクルにつき１つの新しいエントリを受け取る。機能ユニットはクロックサイクルにつき１つの新しいエントリを機能ユニットに送ることができる。
【００７２】
これに対する例外は、ロード／記憶セクション２６０であり、クロックサイクルにつき、そのリザベーションステーションからの２つのエントリの受け取りおよび完了ができる。ロード／記憶セクション２６０はまた、４つのエントリのさらに大きなリザベーションステーションＦＩＦＯを有する。例外が発生すると、１つのクロックサイクル内にすべてのリザベーションステーションのエントリの割当が解除される可能性がある。もし分岐予測誤りが発生すれば、中間結果は、機能ユニット内で完了することができ、再オーダバッファから割当を解除されることができる。
【００７３】
マイクロプロセッサ２００は、先取りユニット２３０を介して命令キャッシュ２１０に、およびバスインタフェースユニット３００に結合された内部アドレス／データバス２９５を含む。バスインタフェース３００は、メインメモリまたは外部メモリ３０２に結合され、そのためマイクロプロセッサ２００は外部メモリアクセスを与えられている。ＩＡＤバス２９５はまた、図３および図４に示されるとおり、ロード／記憶機能ユニット２６０に結合される。
【００７４】
この発明の１つの特定的な実施例において、ロード／記憶ユニット２６０に結合されたデータキャッシュ２７０は、８Ｋバイトの、線形的にアドレス指定された、フォーウェイ・セット・アソシアティブの、デュアルアクセスキャッシュである。アドレスおよびデータラインは、図示のとおり、データキャッシュ２７０をロード／記憶機能ユニット２６０に結合する。より特定的には、データキャッシュ２７０は、キャッシュ２７０とロード／記憶ユニット２６０との間に２セットのアドレスおよびデータ経路を含み、ロード／記憶機能ユニット２６０からの２つの同時アクセスを可能にする。これらの２つのアクセスは、１６バイトデータキャッシュラインサイズに整列する、８と３２ビットとの間のロードまたは記憶アクセスであり得る。データキャッシュ２７０は、１６バイトラインまたはブロックに組織される。この特定的な実施例においてデータキャッシュ２７０は線形的にアドレス指定、またはセグメントベースのアドレスからアクセスされるが、ページテーブルをベースにした物理アドレスではない。データキャッシュ２７０は４つのバンクを含み、データキャッシュにおける１つのラインがその４つのバンクの各々において４バイトを有するように組織される。したがって、２つのアクセスのビット［３：２］の線形的なアドレスが同一でない限り、２つのアクセスは同時にキャッシュ２７０内のデータアレイにアクセスできる。
【００７５】
データキャッシュ２７０は、この特定的な実施例においてフォーウェイ・セット・アソシアティブである。これは、クロックの位相ＰＨ１において２つの線形的なアドレスをとり、その４つのバンクにアクセスする。結果発生するロード動作は、それに続くクロック位相ＰＨ２で完了し、結果バスの１つを駆動できる。機能ユニットによる結果バスに対する要求は、結果のライトバックを望むその他の機能ユニットからの要求と、仲裁されて決定される。
命令キャッシュ２１０およびデータキャッシュ２７０は、これらキャッシュに記憶された命令およびデータエントリのアドレスに対応する、それぞれの命令キャッシュ線形タグアレイおよびデータキャッシュ線形タグアレイを含む。図３および図４に示されるように、マイクロプロセッサ２００はまた、命令キャッシュ２１０およびデータキャッシュ２７０における命令およびデータの物理アドレスをそれぞれトラッキングするために、ＩＡＤバス２９５に結合された物理タグＩ／Ｄブロック３１０を含む。より特定的には、物理タグＩ／Ｄブロック３１０は、これらキャッシュの物理アドレスを保持する物理命令／データタグアレイを含む。ブロック３１０の物理命令タグアレイは、命令キャッシュ２１０の対応する線形命令タグアレイに対しその編成を反映する。同様に、ブロック３１０内の物理データタグアレイの編成は、命令キャッシュ２１０内の対応する線形データタグアレイの編成を反映する。
【００７６】
物理Ｉ／Ｄタグは、命令キャッシュまたはデータキャッシュタグであるか次第で、有効、共用、および修正ビットを有する。もしデータキャッシュ物理タグが、スヌープ（snoop)サイクルの間に修正されたビットのセットを有すれば、要求されるデータ素子は、線形データキャッシュ内の等価のロケーションにあることを示す。マイクロプロセッサ２００はしたがって、外部メモリへのコピーバックサイクルを開始し、要求するデバイスが次に見ることができるメモリへ要求された修正ブロックをライトバックするだろう。
【００７７】
メモリ管理ユニット（ＭＭＵ）３１５内の変換ルックアサイドバッファＴＬＢ３１７は、図示のとおり、ＩＡＤバス２９５と物理タグＩ／Ｄブロック３１０との間に結合される。ＴＬＢ３１７は、１２８の線形から物理ページへの変換アドレスおよび１２８までの４Ｋバイトページに対するページライトを記憶する。この変換ルックアサイドバッファアレイは、ランダムな置換えを伴う、フォーウェイ・セット・アソシアティブ構造として組織される。ＴＬＢ３１５は、Ｘ８６アーキテクチャに対して規定された、線形から物理アドレスへの変換メカニズムを扱う。このメカニズムは、最新の線形から物理アドレスへの変換のキャッシュを用いて、有効変換に対し外部ページテーブルを探索することを防止する。
【００７８】
バスインタフェースユニット３００は、ＩＡＤバス２９５からメモリといった外部装置へのインタフェースとなる。ＩＡＤバス２９５は、マイクロプロセッサ２００の異なる構成部品の接続のために用いられる、グローバル６４ビット共用アドレス／データ／制御バスである。ＩＡＤバス２９５は、キャッシュブロックレフィルのために採用され、修正されたブロックを書出し、またデータおよび制御情報を、特別レジスタユニット２５０、ロード／記憶機能ユニット２６０、データキャッシュ２７０、命令キャッシュ２１０、物理Ｉ／Ｄタグブロック３１０および変換ルックアサイドバッファ３１５、ならびにバスインタフェースユニット３００といった機能ユニットに送る。
【００７９】
ＩＩＩ．スーパースカラマイクロプロセッサ−詳細な動作
ＣＩＳＣプログラムが実行されるとき、ＣＩＳＣプログラムの命令およびデータは、これら命令およびデータを記憶した記憶媒体からメインメモリ３０２にロードされる。プログラムが一旦、バスインタフェースユニット３００に結合されたメインメモリ３０２にロードされれば、発送および機能ユニットによる処理のために、プログラムの順序でデコーダ２０５に取出される。より特定的には、デコーダ２０５により一度に４つまでの命令がデコードされる。命令は、メインメモリ３０２から、ＩＡＤバス２９５を通り、先取りユニット２３０を通して命令キャッシュ２１０へ、次にデコーダ２０５に流れる。命令キャッシュ２１０は、デコーダ２０５によりデコードされて実行のために発送される命令の置場の働きをする。命令キャッシュ２１０は、分岐予測ユニット２２５と関連して動作し、デコーダ２０５に、理論的に実行される命令の次の予測されたブロックである、１６バイトまでのキューを与える。
【００８０】
より特定的には、命令キャッシュ２１０は、バスインタフェースユニット３００を介してメインメモリから取出された命令のブロックを含む、ＩＣＳＴＯＲＥと指定された記憶アレイを含む。ＩＣＡＣＨＥ２１０は、１６バイトのラインまたはブロックに編成される、１６Ｋバイトの有効で線形的にアドレス指定された命令キャッシュである。各キャッシュラインまたはブロックは、１６  ×  ８６バイトを含む。各ラインまたはブロックはまた、各バイトに対し５ビットのプレデコード状態を含む。ＩＣＡＣＨＥ２１０は、次の予測されたＸ８６命令バイトを命令デコーダ２０５に取出す責任がある。
【００８１】
ＩＣＡＣＨＥ２１０は、ＦＥＴＣＨＰＣ（ＦＰＣ）２１３と指定された理論的なプログラムカウンタを保持する。この理論的なプログラムカウンタＦＥＴＣＨＰＣまたはＦＰＣは、キャッシュ情報を保持する以下の３つの別々のランダムアクセスメモリ（ＲＡＭ）アレイにアクセスするために用いられる。より詳細には、キャッシュ情報を含む上記の３つのＲＡＭアレイとは、１）ＩＣＴＡＧＶであり、これは記憶アレイＩＣＳＴＯＲＥにおける対応するブロックに対する線形タグおよびバイト有効ビットを保持するアレイである。キャッシュ内の各エントリは、１６バイト有効ビットおよび２０ビット線形タグを含む。この特定的な実施例において、２５６のタグが採用される。上記ＲＡＭアレイとは次に、２）アレイＣＩＮＸＴＢＬＫであり、記憶アレイＩＣＳＴＯＲＥにおける対応するブロックに対し分岐予測情報を保持する。ＣＩＮＸＴＢＬＫアレイは、２５６エントリの４セットに編成される。この次のブロックアレイにおける各エントリは、シーケンシャルなビット、最後に予測されたバイト、およびサクセサインデックスからなる。上記ＲＡＭアレイはまた、３）ＩＣＳＴＯＲＥアレイであり、このアレイは、Ｘ８６命令バイトプラス５ビットのプレデコード状態を含む。プレデコード状態はすべてのバイトと関連し、特定のバイトがマップされるであろうＲＯＰの数を示す。このプレデコード情報は、先取りブロック２３０のプレデコードセクションにより提供され、一旦デコーダ２０５に与えられれば命令のデコードの速度を高める。より特定的には、プレデコード状態は５ビットを含み、そのうち２つのサイズビットは命令がマップするＲＯＰの数を示し、１つの開始ビットは命令の第１のバイトを示し、１つの終了ビットは命令の終了を示し、１つのオペレーションコードビットは命令のオペレーションコードバイトを示す。バイトキューまたはＩＣＢＹＴＥＱ２１５は、先取りユニット２３０によりＩＣＡＣＨＥ２１０に与えられる命令先取りの流れの現在の理論的な状態を提供する。ＩＣＡＣＨＥ２１０として採用され得る命令キャッシュに関するさらなる情報は、１９９３年１０月２９日に出願された、「可変バイト長命令に特に適した理論的命令キューおよび方法（Speculative Instruction Queue And Method Therefor Particularly Suitable For Variable Byte-Length Instructions ）」と題される、出願番号第０８／１４５，９０２号の同時係属中の特許において与えられ、その開示はこの明細書中に引用により援用され、本出願の譲渡人に譲渡される。
【００８２】
デコーダ２０５（ＩＤＥＣＯＤＥ）は、マイクロプロセッサ２００において命令デコードおよびディスパッチ動作を実行する。より特定的には、デコーダ２０５は、デコード１およびデコード２と称される、マイクロプロセッサパイプラインの２つの段を実行する。デコード１の開始時に、先取りされ実行が予測されたバイトは、指定された満たし位置のバイトキューに駆動される。これらのバイトは次に、バイトキュー２１５の独立するバイトと併合される。デコード２パイプライン段において、再オーダバッファエントリは、次のクロック位相において発送し得る対応するＲＯＰに対して割当てられる。
【００８３】
デコーダ２０５は、バイトキュー２１５からの行Ｘ８６命令バイトおよびプレデコード情報をとり、それらをＲＯＰディスパッチユニット２２０内の４つのＲＯＰ位置に割当てる。デコーダ２０５は、各ＲＯＰが転送されるべき特定の機能ユニットを決定する。デコーダ２０５として採用されてもよい１つのデコーダのより詳細な説明は、１９９３年１０月２９日に出願された、ディビッド  Ｂ．ウィット（David B. Witt ）およびマイケル  Ｄ．ゴッダード（Michael D. Goddard）による、「スーパースカラ命令デコーダ（Superscalar Instruction Decoder ）」と題された、米国特許出願第０８／１４６，３８３号に示され、その開示はこの明細書中に引用により援用される。ＩＣＡＣＨＥおよびデコーダ回路により、マイクロプロセッサ２００がクロックサイクルにつき４つのＲＯＰをＲＩＳＣのようなデータ経路にデコードおよび駆動することができる。４つのＲＯＰは、結果を再オーダバッファ２８５に送り返す機能ユニットへ、およびこれらの結果を要求するその他の機能ユニットへとディスパッチされる。
【００８４】
図５を参照すれば、レジスタファイル２５５、再オーダバッファ２８５およびマイクロプロセッサ２００の整数部分についてのより詳細な説明が与えられる。レジスタファイル２５５と再オーダバッファ２８５とはともに動作して、プログラムの流れにおける命令へ理論的な実行をもたらす。マイクロプロセッサ２００の整数コアは、整数コア３２０として指定され、分岐機能ユニット８３５、ＡＬＵ０、ＡＬＵ１、および特別レジスタ８６０を含む。
【００８５】
この特定的な実施例において、レジスタファイル２５５は、８つの３２ビットレジスタ（整数レジスタ）、１６の４１ビットレジスタ（浮動小数点レジスタ）、１６の４１ビット浮動小数点１時レジスタ、および整数または浮動小数点の演算の両方に対して用いられ得る１６の４１ビット１時レジスタとして編成される。これらのレジスタは、デコーダ２０５から４つまでのＲＯＰに対し並列にアクセスされる。デコーダ２０５により与えられる読出ポインタ（ＲＥＡＤ  ＡおよびＲＥＡＤ  Ｂ）は、どの特定的なレジスタまたは複数のレジスタが、特定のＲＯＰにおけるオペランドの値として要求されているか、およびアクセスのサイズを決定する。
【００８６】
レジスタファイル２５５はマイクロプロセッサ２００のアーキテクチャ的な状態を含むのに対し、再オーダバッファ２８５はマイクロプロセッサ２００の理論的な状態を含む。レジスタファイル２５５のタイミングは、デコード２のパイプライン段の位相ＰＨ２において８つまでの並列読出ポインタでアクセスされるようにとられる。これらの８つまでの読出ポインタの受取に応答し、レジスタファイル２５５は次にこのようにして選択されたオペランドの値を、続くクロックのＰＨ１位相における対応するオペランドバスへと駆動する。
【００８７】
再オーダバッファ２８５をレジスタファイル２５５に結合するディスエーブルバス２８７が、図５に示される。ディスエーブルバスは、８×３または２４ライン幅であり、要求された読出の値は再オーダバッファ内に理論的エントリとして発見されたことをレジスタファイル２５５に示す８つのオーバライド信号を含む。この場合、レジスタファイル２５５はオーバライドを受け、要求された読出オペランドの値をオペランドバスに与えることができない。むしろ、理論的エントリが再オーダバッファ２８５内に存在するため、再オーダバッファ２８５はしたがって、要求された実際のオペランドの値またはその値に対するオペランドタグのいずれかを与える。
【００８８】
再オーダバッファ２８５は、この特定的な実施例において１６のエントリを含み、理論的ＲＯＰ結果の値のキューとして動作する。図６により詳細に示されるように、再オーダバッファ２８５は、キューの先頭および末尾に対応する２つのポインタ、すなわち先頭ポインタおよび末尾ポインタを含む。これらのポインタの増分により、キューの割当のディスパッチされたＲＯＰへのシフトが発生する。
【００８９】
再オーダバッファ２８５に与えられる入力は、デコーダ２０５がそこに割当てようと試みるＲＯＰの数（ブロックにつき４つのＲＯＰまで）、これら４つのＲＯＰに対するソースオペランドポインタの値（ＲＥＡＤ  Ａ、ＲＥＡＤ  Ｂ）、およびそれぞれの宛先ポインタの値を含む。再オーダバッファ２８５は次に、その現在の理論的キューからこれらのエントリを割当てようと試みる。ディスパッチされたＲＯＰに対しエントリスペースが利用可能であるとすれば、エントリは末尾ポインタに割当てられる。
【００９０】
より特定的には、エントリがデコーダ２０５により要求されるとき、キューの末尾からの次のエントリが割当てられる。特定のエントリの数がしたがって、デコーダ２０５からのその特定のＲＯＰに対する宛先タグになる。宛先タグは、対応するＲＯＰ位置で、実行される特定の命令とともに機能ユニットに駆動される。「４つのＲＯＰ宛先タグ」と指定された専用宛先タグは、再オーダバッファ２８５から整数コア３２０の機能ユニットへおよびマイクロプロセッサ２００の残余の機能ユニットへの出力として、図５に示される。機能ユニットはこうして、実行される各ＲＯＰに対する宛先情報が与えられ、そのため機能ユニットは、ＲＯＰの結果が結果バスを介してどこに転送されるかを効果的に知る。
【００９１】
上記より、理論的に実行される結果の値またはオペランドが、そのような結果オペランドが最早理論的でなくなるまで再オーダバッファ２８５に一時的に記憶されることがわかる。潜在的なオペランドの値のプールがしたがって、デコーダ２０５に与えられデコードされる次のＲＯＰが使用するために、再オーダバッファ２８５により与えられる。
【００９２】
再オーダバッファ２８５にエントリが存在するとき、元のレジスタ番号（すなわちＥＡＸ）が、特定のＲＯＰ結果に対し割当てられた、再オーダバッファエントリに保持される。図６は、末尾と先頭ポインタとの間での理論的状態であるエントリを、それらのエントリ内に垂直の点線で示す。各再オーダバッファエントリは、その元の宛先レジスタ番号に戻って参照される。ＲＯＰディスパッチユニット２２０の４つのＲＯＰ位置からの８つの読出ポインタのいずれかが、エントリに関連する元のレジスタ番号に整合するとき、そのエントリの結果データは、もし有効であれば送られ、またはもしそのエントリに関連する動作がなお機能ユニットにおいて懸案中であればタグが送られる。
【００９３】
再オーダバッファ２８５は、デコーダ２０５によりディスパッチされる新しいＲＯＰの正確な理論的状態を、これらＲＯＰをプログラムの順序で割当てることにより、維持する。４つのＲＯＰは次に、その現在の位置から再オーダバッファのキューの先頭位置へと、その読出オペランドのいずれかの整合を求めて、スキャンする。もし特定の再オーダバッファエントリにおいて整合が発生すれば、レジスタファイル２５５内の対応する読出ポートは、ディスエーブルとされ、実際の結果オペランドまたはオペランドタグのいずれかが、適切な機能ユニットによる受取りのためにオペランドバスに提示される。この配置により、動作に影響させずに、再オーダバッファ内に現われる同じレジスタの複数の更新が可能となる。結果の発送がこうして達成される。
【００９４】
図６に示されるとおり、再オーダバッファ２８５は、再オーダバッファのキューまたはアレイ４０５に記憶された結果オペランドの引退を制御する引退論理３２５を含む。キュー４０５に記憶された結果オペランドが最早理論的でないとき、そのような結果オペランドは引退論理制御の下でレジスタファイル２５５に転送される。これを生じさせるために、ＲＯＰの引退をインタフェースする引退論理、レジスタファイルへのライトバッグ、および最後の４つのＲＯＰエントリの状態がスキャンされる。引退論理３２５は、割当てられたＲＯＰエントリのうちのいくつが今有効結果を有するかを決定する。さらに、引退論理は、生じた分岐、記憶およびロードミスに対するスキャンを行なう。もし最後の４つのＲＯＰ内に完了した（有効化された）ＲＯＰが存在すれば、そのようなＲＯＰはレジスタファイルに引退する。しかしながら、もしＲＯＰエントリのスキャンの間、特定のＲＯＰで例外が発生したことを示す状態が発見されれば、それに続くすべてのＲＯＰは無効化され、ＲＯＰエントリ内に記憶された例外状態情報を用いてトラップベクトル取出し要求が形成される。
【００９５】
分岐機能ユニット２３５により決定されたものとして分岐予測誤りが発生するとき、予測誤りされた分岐に関する再オーダバッファエントリは、キャンセルビットで示されてそのようなエントリが今無効であることを表わす。さらに、もしこれらキャンセルビットの１つが、再オーダバッファ２８５内のＲＯＰのスキャンの間に現われれば、これらＲＯＰエントリは、予測誤りされた経路にあると示されなかった第１のＲＯＰが発生するまで、ＥＩＰレジスタのいかなるライトバックまたは更新なしに無効化される。
【００９６】
引退論理３２５内に含まれるＥＩＰレジスタ（図６参照）は、非理論的であるそれら実行された命令から、理論の下に実行されてきた命令を分離する、実行中のプログラムにおける回転する分界点を示すプログラムカウンタまたは引退ＰＣを保持することが注目される。ＥＩＰまたは引退ＰＣは、再オーダバッファ２８５からレジスタファイル２５５への結果オペランドの引退の際に絶えまなく更新され、このようにして引退した命令は最早理論的でないことを反映する。再オーダバッファ２８５は理論的状態を容易にトラックし、クロックサイクルにつき複数のＸ８６命令またはＲＯＰを引退させることができることに注意されたい。マイクロプロセッサ２００は、例外条件または分岐予測誤りが生じた際に、すばやく無効にし訂正された命令の流れの取出しを開始できる。
【００９７】
予測誤りされた分岐の場合、予測誤りされた分岐から結果として発生するＲＯＰ結果は、再オーダバッファ２８５内にキャンセルビットで表示される。引退論理３２５が、再オーダバッファ２８５内のキャンセルビットのセットを伴うＲＯＰ結果に出会うとき、引退論理はそのようなＲＯＰ結果を更新して、それらをレジスタファイル２５５に引退させず、むしろそのような結果は割当を外されて新しいＲＯＰに対し利用可能とされる。
【００９８】
マイクロプロセッサ２００の機能ユニットの包括的な編成は、例示のために示された図７および図８における一般化された機能ユニットブロック図を参照して説明される。オペレーションコード、Ａオペランド、Ｂオペランド、および宛先タグを含むＲＯＰは、図７および図８の一般化された機能ユニットにディスパッチされていることが再考されねばならない。図７の最も左の部分において、４つのＡオペランドバスが、そこにディスパッチされた命令から特定のＡオペランドを選択する（１：４）Ａオペランドマルチプレクサ３３２に与えられているのがわかる。同様の態様で、４つのＢオペランドバスが、図１２の機能ユニットが実行する主題命令に対する特定のＢオペランドを選択する、（１：４）Ｂオペランドマルチプレクサ３３５に結合されている。４つの宛先／オペレーションコードバスが、この機能ユニットにより実行されている特定の命令に対するオペレーションコードおよび宛先タグを選択するマルチプレクサ３４０に結合される。
【００９９】
この機能ユニットは、マルチプレクサ３４０への「第１のＦＵＮＣタイプ発見」入力で、タイプバスをモニタする。より特定的には、機能ユニットは、機能ユニットのタイプに整合する第１のＲＯＰを探し、次に１：４マルチプレクサ３３２、３３５、および３４０を可能化し、対応するオペランドおよびタグ情報を、図７および図８の機能ユニットのリザベーションステーション１に駆動する。たとえば、実行ユニット３４５が算術論理ユニット１（ＡＬＵ１）であり、マルチプレクサ３４０のＴＹＰＥ入力で機能ユニットに提示されている命令のタイプがＡＤＤ命令であると仮定すれば、宛先タグ、オペレーションコード、ディスパッチされた命令のＡオペランドおよびＢオペランドは、選択マルチプレクサ３３２、３３５、および３４０を介して、リザベーションステーションに駆動される。
【０１００】
第２のリザベーションステーション、すなわちリザベーションステーション０が、リザベーションステーション１と実行ユニット３４５との間に示される。図７および図８の機能ユニットはしたがって、２つのリザベーションステーション、またはその代わりとして、２つのエントリを保持できる１つのリザベーションステーションということができる。この２エントリリザベーションステーションは、最も古いエントリを保留０として示してＦＩＦＯとして実現される。リザベーションステーション０および１は、レジスタファイル２５５または再オーダバッファ２８５のいずれかから、オペランドバスで何が機能ユニットに送られたか次第で、オペランドまたはオペランドタグのいずれかを保持できる。
【０１０１】
結果を４つの汎用結果バスに与えるその他の機能ユニットからの結果の結果発送を達成するため、機能ユニットは、Ａ発送論理３５０とＢ発送論理３５５とを含む。５つの結果バスのうち、結果発送は４つの汎用結果バスに与えられることに注意されたい。Ａ発送論理３５０は、ソースＡオペランドに整合するタグを求めて４つの汎用結果バスをスキャンし、整合が発生すれば、Ａ発送論理３５０は、対応する結果バスをリザベーションステーション１のデータ部分３６０へと辿る。ここで、実際のＡオペランドの代わりとしてマルチプレクサ３３２を介しＡオペランドタグが与えられるとき、Ａオペランドタグは、Ａタグ３６５と指定されたロケーションで記憶されることが注意されねばならない。整合のために４つの汎用結果バスでスキャンされた結果タグと比較されるのは、Ａタグ位置３６５内に記憶されたこのＡオペランドタグである。同様の態様で、Ｂ発送論理３５５は、Ｂオペランドタグ位置３７０内に記憶されたＢオペランドタグに整合するいずれかの結果タグを求めて４つの汎用結果バスをスキャンする。整合が発見されれば、対応する結果オペランドは結果バスから引き出され、Ｂデータロケーション３７５に記憶される。機能ユニットにより実行されているＲＯＰの宛先タグおよびオペレーションコードは、タグおよびオペレーションコードロケーション３８０に記憶される。
【０１０２】
ＲＯＰ命令の実行のために必要なすべての情報が機能ユニットに集められたとき、ＲＯＰ命令は次に、実行のため実行ユニット３４５に発令される。より特定的には、ＡオペランドおよびＢオペランドが、リザベーションステーションにより実行ユニット３４５に与えられる。その命令に対するオペレーションコードおよび宛先タグは、タグおよびオペレーションコードロケーション３８０により実行ユニット３４５に与えられる。実行ユニットは、命令を実行し結果を発生する。この実行ユニットは次に、アービトレータ（図示せず）に結果要求信号を送ることにより、結果バスへのアクセスを仲裁する。実行ユニット３４５に結果バスへのアクセスが与えられるとき、結果授与信号が、アービトレータから実行ユニット３４５により受取られる。実行ユニット３４５は次に、指定された結果バスに結果を与える。
【０１０３】
結果は、この結果と同じタグを有する懸案中のオペランドを伴うその他の機能ユニットに発送される。結果はまた、実行されたＲＯＰの宛先タグに関連するエントリで記憶するために再オーダバッファ２８５に与えられる。
【０１０４】
実行において、機能ユニットは、命令が実行されている間に結果バスに対する仲裁を行なう。より特定的には、機能ユニットに有効エントリが現われれば、すなわち実行に必要なすべてのオペランド、オペレーションコードおよび宛先タグ情報が集められるとき、命令が実行ユニット３４５に発令され、実行ユニット３４５は実際に命令を実行している一方で、機能ユニットは結果バスに対する仲裁を行なう。各リザベーションステーションはローカルオペレーションコードに対しおよび宛先タグに対し記憶を含むことに注意されたい。このタグは、完了パイプライン段の間ＲＯＰが最終的にライトバックするであろうロケーションを示す。
【０１０５】
図７および図８に関し、一般化された機能ユニットブロック図が説明されてきたが、実行ユニット３４５は、その特定的な機能に対して適切な修正が施された、分岐機能ユニット２３５、ＡＬＵ０／シフタ２４０、ＡＬＵ１  ２４５、ロード／記憶２６０、浮動小数点ユニット２６５および特別レジスタ２５０のいずれであってもよい。
【０１０６】
特定の機能ユニットへの結果バスの授与が成功した際、結果の値は結果バスへと駆動され、リザベーションステーション内の対応するエントリはクリアされる。結果バスは、４１ビットの結果、宛先タグ、ならびに通常、有効および例外といった状態表示情報を含む。マイクロプロセッサ２００のパイプライン化された動作において、上記の機能ユニットのアクティビティのタイミングは、実行段において発生する。クロック位相Ｐｈ１の間、オペランド、宛先タグおよびオペレーションコードは、ＲＯＰがディスパッチされリザベーションステーションに与えられるときに駆動される。Ｐｈ２クロック位相の間、もしすべてのオペランドが準備されていれば、オペレーションコードにより示された動作が実行され、実行の間機能ユニットは結果バスに対する仲裁を行ない、値を再オーダバッファへ駆動する。
【０１０７】
図９は、分岐ＲＯＰを扱う分岐機能ユニット２３５のより詳細な表現である。分岐ユニット２３５は、リザベーションステーション２３５Ｒ、およびとられたことが予測された分岐をトラッキングするための分岐ＦＩＦＯ３８０を含む。分岐機能ユニット２３５はまた、すべてＰＣ関係の分岐を扱うための、加算器３８５、増分器３９０、および分岐予測比較器３９５を含む。
【０１０８】
分岐機能ユニット２３５は、図９に示される分岐予測されたＦＩＦＯ３８０を用いて、理論的分岐を制御する。より特定的には、分岐予測ブロック２２５と関連づけて命令キャッシュ２１０により予測されたすべてのシーケンシャルでない取出しは、分岐予測ＦＩＦＯ３８０に駆動され、その分岐のＰＣ（プログラムカウンタ）とともにラッチされる。分岐ＦＩＦＯ３８０は、懸案中の分岐に対して予測された目的アドレスを含む。この情報は、目的バス（ＸＴＡＲＧＥＴ）および分岐機能ユニットへのデコードＰＣバスへと駆動される。後に対応する分岐がデコードされ発令されたとき、実際の結果および目的アドレスは、分岐機能ユニット２３５によりローカルに計算される。もし整合が発生すれば、結果は、目的ＰＣおよび整合を示す状態とともに正確に再オーダバッファ２８５に送り返される。もし分岐予測誤りが発生すれば、正しい目的は、取出しを開始する命令キャッシュ２１０、および予測を誤った分岐に含まれる次に続くＲＯＰをキャンセルする再オーダバッファ２８５の両方に駆動される。この態様で、正しい目的ＰＣで実行が再開され、実行プロセスの崩壊はこのようにして防止される。誤り予測が発生するときはいつでも、分岐機能ユニット２３５は、新しい目的アドレスおよびインデックスの両方を、予測情報がこのアレイを更新することになっていたブロックへ送る。これは、マイクロプロセッサは、命令の新規の正しい流れの取出しを開始する一方、同時に予測アレイ情報の更新を行なうことを意味する。マイクロプロセッサはまた、新しいブロックを伴う予測情報にアクセスし、予測されたどのバイトが実行されるかを知る。ＩＣＮＸＴＢＬＫアレイ（図３および図４においてＩＣＡＣＨＥ２１０内に示される）は、デュアルポートであるため、予測情報はその第２のポートを通して更新できる。予測誤りが発生するブロックからの予測情報は、シーケンシャル／非シーケンシャル、分岐位置、およびキャッシュアレイ内で実行が予測された第１のバイトの位置といった情報である。
【０１０９】
加算器３８５および増分器３９０は、現在のＰＣプラス現在の分岐命令のオフセット、およびもしシーケンシャルであればＰＣプラス次のＰＣに対する命令長さを、ローカルに計算する。これらの値は、比較器３９５により、そのような分岐を予測するためのローカル分岐発生キュー（ＦＩＦＯ３８０）内の発生が予測された分岐に対して比較される。
【０１１０】
マイクロプロセッサ２００の主要内部バスは、パイプライン段においてのマイクロプロセッサ２００の動作を示すタイミング図について論じるための前置きとしてここで要約される。バスラインの先頭に示されるＸは、１つの位相において動的にプリチャージされ、その他の位相において条件付きでアサートされた偽バスを示すことに注意されたい。マイクロプロセッサ２００内部バスは以下を含む。
【０１１１】
ＦＰＣ（３１：０）−Ｐｈ１、静的。この取出しＰＣバスは、命令キャッシュ２１０からバイトキュー２１５への理論的な命令先取りに対して用いられる。このＦＰＣバスは、ＩＣＡＣＨＥ２１０内のＦＰＣブロック２１３に結合される。
【０１１２】
ＸＴＡＲＧＥＴ（３１：０）−Ｐｈ１、動的。このバスは、予測誤りされた分岐および例外の再度方向付けのために、命令キャッシュ２１０および分岐予測ユニット（２２５／２３５）へ目的ＰＣを伝える。
【０１１３】
ＸＩＣＢＹＴＥｎＢ（１２：０）−Ｐｈ１、動的。このバスは、現在要求される先取りされたＸ８６命令プラス対応するプレデコード情報の命令キャッシュ記憶アレイＩＣＳＴＯＲＥの出力である。この特定の実施例において、次の実行が予測されたバイトが、バイトキューにおける第１のオープンバイト位置を満たすように整列した、合計１６バイトをクロックサイクルにつきアサートできる。
【０１１４】
ＢＹＴＥＱｎ（７：０）−Ｐｈ１、静的。これは、命令キャッシュから先取りされた、実行が予測されたＸ８６命令バイトのキューを表わす。この特定の実施例において、合計１６バイトがデコーダ２０５のデコード経路に提示される。各バイトは、命令開始および終了位置のロケーション、プレフィックスバイト、およびオペレーションコードロケーションに関する、命令キャッシュからのプレデコード情報を含む。各Ｘ８６命令のＲＯＰサイズはまた、プレデコード情報の中に含まれる。各バイトに加算されるプレデコード情報は、バイトにつきバイトキューにおいて合計６ビットの記憶を表わし、すなわちそれは１つの有効ビットプラス５つのプレデコードビットである。
【０１１５】
ＩＡＤ（６３、０）−Ｐｈ１、動的。ＩＡＤバス２９５は、主要マイクロプロセッサ２００ブロックに対する、一般的な相互接続バスである。これは、そのようなブロック間ならびに外部メモリへおよび外部メモリからの、アドレス、データ、および制御転送のために用いられ、すべて図３および図４のブロック図に示されている。
【０１１６】
ＸＲＤｎＡＢ（４０：０）−Ｐｈ１、動的。この名称は、機能ユニットに与えられた各ＲＯＰに対するソースオペランドＡバスを表わし、オペランドバス２７５内に含まれる。より特定的には、ＲＯＰ０からＲＯＰ３に対し、合計４つの４１ビットバスを含む。オペランドバスに含まれる対応するタグバスは、再オーダバッファ２８５から発送されたタグが、再オーダバッファ２８５からの実際のオペランドデータの代わりにいつ現われたかを示す。
【０１１７】
ＸＲＤｎＢＢ（４０：０）−Ｐｈ１、動的。この名称は、機能ユニットに送られた各ＲＯＰに対するソースオペランドＢバスを示す。このバス構造は、ＲＯＰ０からＲＯＰ３に対し４つの４１ビットバスを含み、８つの読出オペランドバス２７５に含まれる。対応するタグバスは、発送されたオペランドタグが再オーダバッファ２８５からの実際のオペランドデータの代わりにいつこのバスに現われたかを示すことが再び注目される。
【０１１８】
ＸＲＥＳｎＢ（４０：０）−Ｐｈ１、動的。この名称は、８、１６、３２ビット整数、または１／２の８０ビット拡張結果に対する結果バス２８０を示す。対応する結果タグおよび状態バス２８２は、この結果バスでエントリを有効にすることが注意される。
【０１１９】
マイクロプロセッサ２００は、取出し、デコード１、デコード２、実行、結果／ＲＯＢおよび引退／レジスタファイルの段を含む、６つの段のパイプラインを含む。明確にするため、デコード段は、図１０においてデコード１とデコード２とに分割される。図１０は、シーケンシャルな実行が行なわれているときのマイクロプロセッサのパイプラインを示す。連続するパイプライン段は、図１０の垂直の列により表わされる。マイクロプロセッサ２００において選択される信号は、パイプラインの様々な段において現われるものとして、水平の行に示されている。
【０１２０】
図１０のシーケンシャルな実行パイプライン図は、以下の選択された信号を示す。
【０１２１】
「Ｐｈ１」は、システムクロック信号のリーディングエッジを示す。システムクロック信号は、Ｐｈ１およびＰｈ２の構成要素の両方を含む。
【０１２２】
「ＦＰＣ（３１：０）」は、バイトキュー２１５からの取出しＰＣバスを表示する。
【０１２３】
「ＩＣＢＹＴＥｎＢ（１５：０）」は、バイトキュー２１５に結合される命令キャッシュ２１０のＩＣＳＴＯＲＥアレイからのＩＣＢＹＴＥバスである。
【０１２４】
「ＢＹＴＥＱｎ（１５：０）」は、バイトキューバスである。
「ＲＯＰｍｕｘ」は、バイトＱからのＸ８６命令バイトをＲＯＰに変換する、デコーダ２０５内のブロックである。このブロックは、図１０および図１１においてＲＯＰｍｕｘとして示されたときに動作する。ＲＯＰｍｕｘブロック（図示せず）は、１６バイトのＸ８６命令バイトＱを特定のディスパッチ位置における４つのＲＯＰにマップする責任がある。
【０１２５】
「SourceＡ／Ｂpointers」は、デコーダ２０５により再オーダバッファ２８５およびレジスタファイル２５５に与えられる、ＡおよびＢオペランドに対する読出／書込ポインタ（ＲＥＡＤ  Ａ、ＲＥＡＤ  Ｂ）である。ソースポインタは、デコードブロックからレジスタファイルおよび再オーダバッファ両方への入力である値である。
【０１２６】
「ＲＥＧＦ／ＲＯＢaccess」は、機能ユニットへの転送のためのオペランドの値を獲得するための、レジスタファイルおよび再オーダバッファへのアクセスを示す。
【０１２７】
「Ｉｓｓｕｅ  ＲＯＰｓ／ｄｅｓｔ  ｔａｇｓ」は、デコーダ２０５による機能ユニットへのＲＯＰおよび宛先タグの発令を示す。
【０１２８】
「Ａ／Ｂ  ｒｅａｄ  ｏｐｅｒ  ｂｕｓｅｓ」は、機能ユニットがＡおよびＢオペランドバスを読出し、したがってＡおよびＢオペランドまたはタグを得ることを示す。
【０１２９】
「Ｆｕｎｃｔ  ｕｎｉｔ  ｅｘｅｃ」は、機能ユニットによる実行を示す。図１０および図１１において、ａ＆ｂ→ｃおよびｃ＆ｄ→ｅおよびｃ＆ｇ→と示されたものは、任意の動作を表わし、「ソース１オペランド、ソース２オペランド→宛先」という形式である。より特定的には、指定されたソースレジスタは、レジスタ、すなわち一時的またはマップされたＸ８６レジスタである。ａ＆ｂ→ｃの例において、「ｃ」の値は、宛先を表わし、結果バスおよび再オーダバッファ両方からの、実行が予測された流れにおける次の参照へのローカルな発送を示す。
【０１３０】
「Ｒｅｓｕｌｔ  Ｂｕｓ  ａｒｂ」は、結果を、再オーダバッファへ、およびそのような結果に対応するオペランドタグを保持するためその結果が必要かもしれぬいかなるその他の機能ユニットへ転送する目的のために、機能ユニットが結果バスへのアクセスを仲裁する時間を示す。
【０１３１】
「Ｒｅｓｕｌｔ  Ｂｕｓ  ｆｏｒｗａｒｄ」は、結果が、機能ユニットから、懸案のオペランドとしてその結果が必要なその他の機能ユニットへ発送される時間を示す。
【０１３２】
「ＲＯＢ  ｗｒｉｔｅ  ｒｅｓｕｌｔ」は、機能ユニットからの結果が再オーダバッファに書込まれる時間を示す。
【０１３３】
「ＲＯＢ  ｄａｔａ  ｆｏｒｗａｒｄ」は、再オーダバッファが、オペランドデータをまだ結果を現在は有さないオペランドの代わりに機能ユニットへ発送する時間を示す。
【０１３４】
「ＲＥＧＦ  ｗｒｉｔｅ／ｒｅｔｉｒｅ」は、結果が再オーダバッファのＦＩＦＯキューからレジスタファイルへ引退する時間を示す。
【０１３５】
「ＥＩＰ（３１：０）」は、引退ＰＣの値を示す。この引退ＰＣの値またはＥＩＰは、再オーダバッファ２８５の引退論理３２５内に含まれる。
【０１３６】
図１０のタイミング図は、Ｘ８６バイトのシーケンシャルな流れを実行するマイクロプロセッサ２００を示す。この例において、予測された実行の経路は、命令キャッシュから直接利用可能なだけでなく、実際に採用されるものである。
【０１３７】
命令の処理の第１段は、命令取出しである。図示のとおり、このクロックサイクルは、命令キャッシュアクティビティを行なって費やされる。命令キャッシュ２１０は、クロックサイクルのＰｈ１の間に新しい取出しＰＣ（ＦＰＣ）を形成し、次にそのクロックサイクルの第２の位相において命令キャッシュのキャッシュアレイにアクセスする。取出しＰＣプログラムカウンタ（タイミング図においてＦＰＣ（３１：０）として示される）は、記憶アレイと並列する線形の命令キャッシュのタグアレイにアクセスする。取出しのクロック位相Ｐｈ２の後半で、線形のタグが取出しＰＣ線形アドレスと整合するかどうかについての決定が行なわれる。もし整合が発生すれば、実行が予測されたバイトは、バイトキュー２１５に発送される。
【０１３８】
命令キャッシュにおけるタグおよび記憶アレイへのアクセスに加え、取出しＰＣはまた、ブロック予測アレイ、ＩＣＮＸＴＢＬＫにアクセスする。このブロック予測アレイが、Ｘ８６バイトのどれが実行を予測されたか、および実行が予測される次のブロックがシーケンシャルまたは非シーケンシャルのいずれかであるかを識別する。Ｐｈ２においてまたアクセスされるこの情報は、現在取出されたブロックのどのバイトが、有効バイトとしてバイトキュー２１５に駆動されるかどうかを決定する。
【０１３９】
バイトキュー２１５は、以前に取出され機能ユニットへはまだディスパッチされていない、記憶されたＸ８６バイトを現在有するかもしれない。この場合、バイトを満たす位置が命令キャッシュ２１０に示され、第１に予測されたバイトをシフトし、先のＸ８６バイトの後ろに満たす。
【０１４０】
分岐予測情報は取出しのクロック位相Ｐｈ２において発生するため、先取りユニット２３０により先取りされる次のブロックは、いずれにせよキャッシュアレイに再びアクセスするクロックサイクルは１つであるため、シーケンシャルまたは非シーケンシャルとなる可能性があることに注意されたい。したがって、分岐予測アレイにより、ブロックを外れた分岐が可能となり、次のシーケンシャルなブロックにアクセスするのと同じ相対的な性能を有し、したがって性能を向上させることになる。
デコード１／デコード２パイプライン段が以下述べられる。デコード１の開始時に、先取りされ、実行が予測されたバイトが、指定された満たし位置でバイトキュー２１５に駆動される。これは、デコード１のＰｈ１においてアサートしているＩＣＢＹＴＥｎＢ（１２：０）として、図１０のタイミング図に示される。これらのバイトは、バイトキューにおける何らかの懸案中のバイトに併合される。バイトキューは、５ビットのプレデコード状態プラス行Ｘ８６バイトを含み、命令の境界がどこに位置するかを示す。バイトキューの先頭は、実行が予測された次のＸ８６命令の開始にある。デコード１のクロック位相Ｐｈ１の最中に、命令キャッシュからのバイトの次の流れが、バイトキュー２１５における既存のバイトと併合され、併合された流れはスキャンのためデコーダ２０５に提示される。デコーダ２０５は、各命令がとるＲＯＰの数およびオペレーションコードの位置を決定し、これらオペレーションコードの、Ｄ０でのＲＯＰをディスパッチする次のＲＯＰとした、対応するＲＯＰ発令ディスパッチ位置Ｄ０、Ｄ１、Ｄ２、およびＤ３へのアライメントを可能にする。デコーダ２０５は、バイトキュー２１５における各々のＸ８６命令のプログラムカウンタＰＣのコピーを、命令の境界の間のバイトの数をカウントすることにより、または命令キャッシュ内の分岐を検出し目的ＰＣの値をそのロケーションから取出された第１のＸ８６バイトに与えることにより、維持する。
【０１４１】
オペレーションコードおよびＲＯＰ位置決め情報、ならびにバイトキュー２１５に記憶されたイメディエイトフィールドを利用し、デコーダ２０５は静的に、デコード１のクロック位相Ｐｈ２およびデコード２のクロック位相Ｐｈ１の間に、以下の情報を決定する。１）機能ユニットの宛先、２）ソースＡ／Ｂおよび宛先オペランドポインタの値、３）ソースのサイズおよび宛先演算、および４）もしあればイメディエイトアドレスおよびデータの値。デコード２のクロック位相Ｐｈ１の終了までに、すべてのレジスタ読出および書込ポインタは解決され、動作は決定される。これは、図１０のタイミング図において、ソースＡ／Ｂポインタの値のアサーションにより示されている。
【０１４２】
図１０のタイミング図において示された、デコード２パイプライン段において、再オーダバッファエントリは、次のクロック位相で発令するかもしれぬ対応するＲＯＰに対し割当てられる。このようにして、４つまでのさらなるＲＯＰが、デコード２のＰｈ１クロック位相の間に、１６エントリ再オーダバッファ２８５内にエントリが割当てられる。デコード２のＰｈ２クロック位相の間、すべての割当てられたＲＯＰに対するソース読出ポインタは、レジスタファイルから読出され、一方同時に再オーダバッファ内に含まれる理論的ＲＯＰのキューにアクセスする。レジスタファイルおよび再オーダバッファアレイ両方のこの同時のアクセスにより、実際のレジスタファイルの値を用いるか、または再オーダバッファからオペランドもしくはオペランドタグのいずれを発送するかについての選択が遅れることをマイクロプロセッサ２００に許可する。Ｐｈ１において最初に４つのＲＯＰエントリを再オーダバッファに割当て、次にＰｈ２において再オーダバッファのスキャンを行なうことにより、マイクロプロセッサ２００は、現在のＲＯＰが、なおも理論的状態にある先行するＲＯＰと同様ディスパッチされている一方で、読出の従属性を同時に探すことができる。これは、図１０のタイミング図において、ＲＥＧＦ／ＲＯＢアクセスおよびタグの検査により示される。
【０１４３】
実行パイプライン段において、ＲＯＰは、専用オペレーションコードバスおよび読出オペランドバスにより、機能ユニットに発令される。専用オペレーションコードバスは、ＲＯＰのオペレーションコードを機能ユニットに連絡し、一方読出オペランドバスは、オペランドまたはオペランドタグをそのような機能ユニットに転送する。オペランドバスがオペランドを機能ユニットに連絡する時間は、Ａ／Ｂ読出オペランドバスという名称で、図１０のタイミング図に示される。
【０１４４】
実行パイプライン段のＰｈ１クロック位相の後半部分で、機能ユニットはどのＲＯＰがそのような機能ユニットにディスパッチされたか、およびそのような機能ユニットにおいていずれかの懸案中のＲＯＰがローカルリザベーションステーションからの発令の準備ができているかどうかを決定する。ＦＩＦＯが機能ユニットのリザベーションステーションにおいて保持され、リザベーションステーションに含まれた最も古い命令が第１に実行を行なうことを確実にすることが注目される。
【０１４５】
機能ユニット内でＲＯＰが実行準備完了状態であるとき、ＲＯＰはそのような実行を実行パイプライン段のＰｈ１の遅い段階で開始し、その段のＰｈ２を通して静的に続行する。Ｐｈ２の終了時に、機能ユニットは、仲裁の結果を検査し、結果授与信号（図示せず）と示された結果バスを与えられたかどうかを決定する。言い換えれば、結果バス仲裁信号はこの時間の間にアサートされる。もし機能ユニットが結果バスへのアクセスを与えられていれば、割当てられた結果バスを続くＰｈ１で駆動する。
【０１４６】
図１０のタイミング図において示される結果パイプライン段は、１つの機能ユニットから結果を必要としている別の機能ユニットへの結果の発送を表わす。結果パイプライン段のクロック位相Ｐｈ１において、理論的ＲＯＰのロケーションは、宛先結果および何らかの状態とともに再オーダバッファ内に書込まれる。再オーダバッファ内へのこのエントリは次に、有効である、および割当てられたという表示を与えられる。一旦割当てられたエントリがこのようにして有効化されると、再オーダバッファは、要求された読出アクセスを受取った際に、オペランドタグに対抗するものとしてオペランドデータを直接発送できる。結果パイプライン段のクロック位相Ｐｈ２において、新しく割当てられたオペランドデータは、それがソースオペランドの１つであることを要求する次のＲＯＰにより、検出されることができる。これは、図１０のタイミング図において、「ＲＯＢｄａｔａ  ｆｏｒｗａｒｄ」を介したソースＡ／Ｂオペランドバスへの結果Ｃの直接の発送として示されている。
【０１４７】
引退パイプライン段は、図１０のタイミング図における最後のパイプラインの段である。この段では、実プログラムカウンタ（引退ＰＣ）がＥＩＰレジスタの形式で、バス指定ＥＩＰ（３１：０）により示されるように、維持され、更新される。図１０に示されるとおり、ＥＩＰ（３１：０）タイミング図は、新しいＰＣ（または引退ＰＣ）が、再オーダバッファからレジスタファイルへの命令の引退に際して発生することを表わす。再オーダバッファからレジスタファイルへの結果の引退の実際の動作は、図１０においてＲＥＧＦｗｒｉｔｅ／ｒｅｔｉｒｅと示された信号により、表わされている。図１０よりわかるように、引退パイプライン段のクロック位相Ｐｈ１において、演算の結果はレジスタファイルに書込まれ、ＥＩＰレジスタは更新されてこの命令が現在実行されることを反映する。再オーダバッファにおける対応するエントリは、値が再オーダバッファからレジスタファイルへ書込まれるのと同じクロック位相Ｐｈ１で割当てを外される。再オーダバッファ内のこのエントリが今割当てを外されたため、レジスタＣへの次の参照は、再オーダバッファからの理論的な読出の代わりに、レジスタファイルからの読出という結果になるだろう。この態様で、マイクロプロセッサのアーキテクチャ的状態が真に反映される。
【０１４８】
図１１は、分岐予測誤りの間のプロセッサ２００のタイミング図を示す。図１１のタイミング図では、図１０のタイミング図と同じ信号のタイプが示されるが、以下の例外を伴う。
【０１４９】
ＢＲＮ＿ＭＩＳＰ信号は、いつ分岐予測誤りが発生したかを示す。
ＸＴＡＲＧＥＴ（３１：０）信号は、予測誤りの後マイクロプロセッサが現在取出を必要としている、再方向付けアドレスを示す。
【０１５０】
図１１のタイミング図は、分岐予測誤りおよび回復の間のマイクロプロセッサ２００のパイプライン段を示す。このタイミング図は、第１のサイクルは分岐の実行サイクルであり、それに続くサイクルは、予測を訂正し、新しい命令の流れを取出すことの中に含まれると仮定される。この特定の実施例において、誤り予測された分岐命令の実行の完了から、訂正された経路の実行の開始までに、３サイクルの遅延が生じることが注目される。
【０１５１】
図１１に示されたパイプラインの取出し段は、図１０に示された通常の取出し段と類似するが、例外としては、ＸＴＡＲＧＥＴ（３１：０）バスは、命令キャッシュ２１０に実際の目的に関する情報を与えるために、分岐機能ユニット２３５から命令キャッシュ２１０に駆動されることである。分岐機能ユニットは、分岐予測誤りが実際に発生したことを決定するマイクロプロセッサ２００のブロックであることが注目される。分岐機能ユニットはまた、正しい目的を計算する。この目的は、結果バス２８０での予測誤りされた状態の表示とともに再オーダバッファに結果がリターンされるのと同時に送られる。結果バスはまた、もし実際の分岐が発生すれば分岐命令の引退の際にＥＩＰレジスタを更新するための、正しいＰＣの値を含む。ＸＴＡＲＧＥＴバスはしたがって、取出しＰＣバスに駆動され、命令キャッシュアレイがアクセスされる。もしヒットが発生すれば、前述のようにバイトがバイトキューに駆動される。
【０１５２】
予測誤りが発生するとき、バイトキュー２１５におけるすべてのバイトは、信号ＢＲＮ＿ＭＩＳＰのアサーションとともに、取出しの第１の位相において自動的にクリアされる。訂正された経路が取出されデコードされるまで、デコーダ２０５からディスパッチされるさらなるＲＯＰはない。
【０１５３】
取出しパイプライン段のクロック位相Ｐｈ１において、予測誤りの結果状態が再オーダバッファにリターンされるとき、予測誤り状態の表示は、予測誤りの後すべての理論的ＲＯＰに送られ、そのためこれらはレジスタファイルまたはメモリに書込まれることができないだろう。これらの命令が次に引退するとき、再オーダバッファにおけるそのエントリは割当てを外され、さらなるＲＯＰの発令が可能となる。
【０１５４】
分岐予測誤りの間のデコード１パイプライン段に関し、訂正された経路をデコードするための残りの経路は、命令キャッシュ２１０のＩＣＮＸＴＢＬＫアレイにおける予測情報の更新は例外として、シーケンシャルな取出しの場合と同一である。分岐の正しい方向は今、分岐が予測誤りされたキャッシュブロックへの予測アレイＩＣＮＸＴＢＬＫへと書込まれる。
【０１５５】
予測誤りの間のパイプライン段デコード２、実行、結果、引退は、図１０に示されたものと実質的に同様であろう。
【０１５６】
スーパースカラマイクロプロセッサの動作に関するより詳細な情報は、ディビッド  Ｂ．ウィットおよびウィリアム  Ｍ．ジョンソンによる、１９９３年１０月２９日に出願された、「高性能スーパースカラマイクロプロセッサ（High Performance Superscalar Microprocessor ）」と題される、出願番号第０８／１４６，３８２号の同時係属中の特許出願に示され、その開示は、この明細書中に引用により援用される。上記の特許出願は、本特許出願の譲渡人に譲渡される。
【０１５７】
ＩＶ．フラグオペランド再命名および発送
マイクロプロセッサ２００は、図３および図４においてＥＦＬＡＧＳと示されたフラグレジスタ４００を含む。ＥＦＬＡＧＳレジスタ４００は、図１２において詳細に示される。ＥＦＬＡＧＳレジスタ４００は、３２ビット幅で、そのうち１、３、５、１５および１９−３１がリザーブされる。ＥＦＬＡＧＳレジスタ内の規定されたビットおよびビットフィールドは、ある演算を制御し、マイクロプロセッサ２００の状態を示す。ＥＦＬＡＧＳレジスタの下位１６ビット（ビット１５−０）は、８０８６および８０２８６コードの実行の際には最も有用である、１６ビットレジスタネームＦＬＡＧＳを含む。ＥＦＬＡＧＳレジスタ４００は、キャリフラグＣＦ（ビット０）、パリティフラグＰＦ（ビット２）、補助キャリフラグＡＦ（ビット４）、ゼロフラグＺＦ（ビット６）、符号フラグＳＦ（ビット７）、トラップフラグＴＦ（ビット８）、割込イネーブルフラグＩＦ（ビット９）、方向フラグＤＦ（ビット１０）、オーバフローフラグＯＦ（ビット１１）、および再開フラグＲＦ（ビット１６）を含む。これらフラグのうち、６つの主状態フラグは、ＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦおよびＣＦである。６つの主状態フラグは、ほとんどの整数演算の結果として更新され、分岐命令に対する条件を発生するのに用いられる。
【０１５８】
条件付き分岐命令はしばしば、Ｊｃｃ、または条件付きジャンプコード「ｃｃ」の形式であり、ｃｃはフラグまたは条件コードを表わす。たとえば、分岐命令ＪＮＺ  ３Ａ２６は、もしゼロフラグ（ＺＦ）が０の場合の予め定められたアドレス３Ａ２６へのジャンプを意味する。その他の条件付き分岐命令に関連する分岐決定は、たとえばＯＦ、ＳＦ、ＡＦ、ＰＦおよびＣＦといったその他のフラグの現在の値次第である。条件付き分岐命令の実行のためには、これらのフラグの値が利用可能でなければならない。これらフラグの値は、条件付き分岐命令に対するオペランドとして働く。これらのフラグはほとんどの整数演算により更新されて修正されることを考慮に入れれば、マイクロプロセッサの性能は、特定の分岐命令が、先行する命令の影響を受けたフラグが更新されて現在の分岐の実行が可能になるのを待たねばならぬときは、大きくマイナス影響を受ける可能性があることが認識されるだろう。
【０１５９】
この問題を解決するために、この発明の１つの実施例では、６つの状態ビットまたはＥＦＬＡＧＳレジスタ４００のフラグＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦおよびＣＦを、分岐機能ユニット２３５のために個々の再命名可能な資源として扱う。再オーダバッファ２８５は、割当てられて機能ユニットからの結果の記憶可能な１６のエントリ、またはディスパッチされまだ実行されていない命令に関連するまだ計算されていない結果に対応するタグを含む、再オーダバッファアレイ（ＲＯＢアレイ）４０５を含む。この発明に従えば、ＲＯＢアレイ４０５は、理論的に実行される命令に関連するフラグを記憶するためのフラグ記憶部分４１０（図６参照）を含む。言い換えれば、命令の結果にＲＯＢアレイ４０５の１６のエントリの１つが割当てられるとき、関連する割当てがまた、そのような命令により修正されるフラグに対してフラグ記憶部分４１０内に行なわれる。
【０１６０】
図１３は、ＲＯＢアレイ４０５およびそのフラグ記憶部分４１０をより詳細に示す。図１３に示されるとおり、浮動小数点ＲＯＰがディスパッチされるとき、４１ビットの浮動小数点エントリがＲＯＢアレイ４０５に割当てられる。たとえば、エントリ５といったエントリが、浮動小数点ＲＯＰに割当てられる。この浮動小数点ＲＯＰは、図１３に示されるとおり、エントリ５の全４１ビット幅を占める。このような浮動小数点命令に関連付けられるフラグはない。この態様で、ディスパッチされた浮動小数点ＲＯＰの４１ビットの浮動小数点結果は、ＲＯＢアレイ４０５におけるエントリが割当てられる。（この特定の例において、エントリ５は、再オーダバッファの最も古いエントリを含む、再オーダバッファの先頭である。再オーダバッファの最も新しいエントリは、その末尾にある。）
しかしながら、ディスパッチされたＲＯＰが整数命令のとき、その整数ＲＯＰの３２ビット整数結果は、ＲＯＰアレイ４０５における３２ビットエントリが割当てられる。この３２ビットの整数結果エントリ、たとえば図１３におけるエントリ１１は、図示のとおりＲＯＢアレイ４０５の下位ビット０−３１を占める。ディスパッチされた整数ＲＯＰにより影響を受ける可能性のあるフラグ、すなわちＲＯＰのフラグ結果を形成するフラグＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦおよびＣＦは、図示のとおり、エントリ１１に関連する上位ビット３２−３７が割当てられる。この態様で、エントリが広幅の浮動小数点エントリでないために未使用である整数ＲＯＰの上位ビットは、有利に用いられ、特定の整数結果に関連するフラグ更新を記憶する。
【０１６１】
整数ＲＯＰ結果が第１にＲＯＢ２８５内のエントリが割当てられるとき、再オーダバッファはタグの値に、この特定のＲＯＰによる影響を受ける特定のフラグの値を与える。デコーダ２０５が、フラグオペランドとしてそれらのフラグの値を要求する（要求されたフラグ）分岐命令といった次に続くＲＯＰをディスパッチするとき、ＲＯＢフラグ記憶部分４１０は、フラグタグバス４１７を介し、分岐機能ユニット２３５へ対応するフラグタグを送る。この場合、フラグタグは、実際のフラグの値（要求されたフラグ）が４つの汎用結果バスのうち１つの、ビット３２：３７に届くまで、分岐機能ユニット２３５のリザベーションステーション内に保持される。実際のフラグの値は、たとえばこれらのフラグの更新を引き起こすＲＯＰを実行するＡＬＵ０またはＡＬＵ１といった特定の整数機能ユニットにより、結果バスに与えられる。
【０１６２】
その代わりとして、もしＲＯＰ命令がディスパッチされたときに要求されたフラグの値が既に決定されＲＯＢフラグ記憶部分４１０内に記憶されていれば、要求されたフラグの値そのものは、ＲＯＢフラグ記憶部分４１０からフラグオペランドバス４１５を通して分岐機能ユニット２３５に転送される。一旦特定の命令に関連するフラグの値が最早理論的でなくなれば、すなわち命令がＲＯＢ２８５からレジスタファイル２５５に引退するとき、そのような引退した命令に対応するフラグは、同様にＲＯＢフラグ記憶部分４１０からＥＦＬＡＧＳレジスタ４００に引退する。
【０１６３】
もし１つ以上のフラグオペランドを要求する分岐命令が、デコーダ２０５により分岐機能ユニット２３５にディスパッチされ、再オーダバッファのＲＯＢフラグ記憶部分４１０内に要求されたオペランドフラグに対応するフラグエントリまたはフラグタグがなければ、要求されたフラグオペランドはＥＦＬＡＧＳレジスタ４００から引出され、上記と同じフラグオペランドバス４１５により分岐機能ユニット２３５に送られる。
【０１６４】
ＡオペランドおよびＢオペランド／フラグ選択ブロック２９０は、このフラグ転送動作における援助を行なう。より特定的には、選択ブロック２９０はＲＯＢ２８５を検査し、要求されたフラグオペランドまたはそれに対応するフラグタグのいずれかがＲＯＢ２８５内に存在するかどうかを決定し、もし存在すれば、ブロック２９０によりこれらのフラグオペランドは、フラグオペランドバス４１５を介して分岐機能ユニット２３５に送られる。しかしながら、もし特定の分岐命令のフラグオペランドに対応するフラグオペランドまたはフラグタグがＲＯＢ２８５に含まれないことが発見されれば、対応するフラグオペランドがＥＦＬＡＧＳレジスタ４００から選択ブロック２９０により、分岐機能ユニット２３５への転送のためにフラグオペランドバス４１５に与えられる。
【０１６５】
フラグオペランドバス４１５は６ビット幅であり、したがって各主状態フラグビットＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦおよびＣＦ専用のそれぞれのビットを含む。この態様で、要求されたフラグは、もし理論的であればＲＯＢ２８５から、もし実際であればＥＦＬＡＧＳレジスタ４００から、６ビットのフラグオペランドバス４１５を通して分岐ユニット２３５に転送されることができる。フラグオペランド記憶部分４１０はまた、理論的に実行された命令に関連するフラグを含み、ＥＦＬＡＧＳレジスタ４００は、関連する命令の引退の後のフラグの実状態を含む。
【０１６６】
この発明の１つの実施例において、ＥＦＬＡＧＳレジスタ４００の主状態ビットが、どの１つまたは複数のフラグが更新による影響を受けるかに従い、３つのセクションまたはサブグループに分割される。より特定的には、フラグ修正命令により潜在的に修正されるフラグの全グループ（ＯＦ、ＳＦ、ＺＦ、ＡＦ、ＰＦおよびＣＦビット）は、以下のようにサブグループに分けられる。
サブグループ１−ＯＦビット
サブグループ２−ＳＦ、ＺＦ、ＡＦおよびＰＦビット
サブグループ３−ＣＦビット
Ｘ８６命令セットにおいて、状態フラグは上記の３つの独立するグループにおいて更新される。Ｘ８６命令は、これら３つのフラググループの各々への更新に従って分類できる。言い換えれば、ＳＦ、ＡＦおよびＰＦフラグビットを更新せずにまたはそれらに影響を与えずにＺＦフラグを更新するＸ８６命令はないということである。この発明のこの実施例に従えば、マイクロプロセッサ２００は、ＥＦＬＡＧＳレジスタの再命名可能な部分を、フラグ記憶部分４１０内の３つのサブレジスタ、すなわちＯＦビットを含む第１のサブレジスタ、ＳＦ、ＺＦ、ＡＦおよびＰＦビットを含む第２のサブレジスタ、ならびにＣＦビットを含む第３のサブレジスタ、からなるものとしてみなす。
【０１６７】
デコーダ２０５が命令を様々な機能ユニットにディスパッチするとき、これら３つのサブレジスタは、ディスパッチされているＲＯＰにより修正された特定のフラグに従って更新される。フラグサブグループへの更新は、４つのディスパッチ位置Ｄ０、Ｄ１、Ｄ２およびＤ３の各々に対する３ビットのフラグ更新コードで、ＲＯＢ２８５内にスケジュールされており、その３ビットコードの１つのビットは各フラグサブグループに与えられる。ＲＯＰにつき１つの３ビットフラグ更新コードが、デコーダ２０５により与えられ、６ビットＥＦＬＡＧＳレジスタ４００のどの特定のフラグが更新されることになるかをＲＯＢ２８５に示す。したがって、ディスパッチ位置Ｄ０、Ｄ１、Ｄ２およびＤ３に与えられた４つのＲＯＰのすべてに対し、デコーダ２０５とＲＯＢ２８５との間のＡＬＬＯＣバス内に含まれるフラグ更新コードバスを通して、４つのそれぞれのフラグ更新コードが転送される。
【０１６８】
より詳細には、ＡＬＬＯＣバスは以下のように指定されることが注目される。
ディスパッチ位置０−ＲＯＢＡＬＬＯＣ（３：０）
ビット３はレジスタライトバックを示し、ビット（２：０）はフラグ更新ビットである。
【０１６９】
ディスパッチ位置１−ＲＯＢＡＬＬＯＣ（７：４）
ビット７はレジスタライトバックを示し、ビット（６：４）はフラグ更新ビットである。
【０１７０】
ディスパッチ位置２−ＲＯＢＡＬＬＯＣ（１１：８）
ビット１１はレジスタライトバックを示し、ビット（１０：８）はフラグ更新ビットである。
【０１７１】
ディスパッチ位置３−ＲＯＢＡＬＬＯＣ（１５：１２）
ビット１５はレジスタライトバックを示し、ビット（１４：１２）はフラグ更新ビットである。
【０１７２】
デコーダ２０５と再オーダバッファ２８５との間のＳＴＡＴＵＳバスは以下のように指定される。
【０１７３】
ＲＯＢＳＴＡＴ（３：０）は、バッファ２８５が、デコーダ２０５の４つのディスパッチ位置の各々においてＲＯＰの結果のための余地を有するかどうかを示す。
【０１７４】
５ビット幅のＲＥＡＤ  ＦＬＡＧバス４１９は、デコーダ２０５から、再オーダバッファ２８５およびＥＦＬＡＧＳレジスタ４００に結合される。ＲＥＡＤ
ＦＬＡＧバス４１９は、２ビットのＲＥＡＤ  ＦＬＡＧ  ＰＯＳＩＴＩＯＮバスを含み、それを通してデコーダ２０５は、４位置ディスパッチウィンドウ内の分岐ＲＯＰの位置を示す２ビットのコードを転送する。この特定の実施例において、ディスパッチウィンドウにつき１つの分岐ＲＯＰが許可される。ＲＥＡＤ  ＦＬＡＧバス４１９はまた、ＲＤＦＬＡＧＰＴＲ（２：０）と指定された３ビットのＲＥＡＤ  ＦＬＡＧ  ＰＯＩＮＴＥＲバス、すなわち主題分岐ＲＯＰに対し３つのフラグサブグループのうちのどれが入力オペランドとして要求されるかを示す３つのイネーブルビット（ホットビットとしても知られる）、を含む。より特定的には、ＲＥＡＤ  ＦＬＡＧ  ＰＯＩＮＴＥＲバスのビット０は、ディスパッチウィンドウ内の分岐ＲＯＰがいつ入力オペランドとしてフラグサブグループ１を要求するかを示す。ＲＥＡＤ  ＦＬＡＧ  ＰＯＩＮＴＥＲバスのビット１は、ディスパッチウィンドウにおける分岐ＲＯＰがいつフラグサブグループ２を入力オペランドとして要求するかを示す。最後に、ＲＥＡＤ  ＦＬＡＧ  ＰＯＩＮＴＥＲバスのビット２は、ディスパッチウィンドウ内の分岐ＲＯＰがいつ入力オペランドとしてフラグサブグループ３を要求するかを示す。
【０１７５】
ディスパッチされたＲＯＰが機能ユニットにおいて実行するとき、生じたフラグ更新（すなわち結果フラグ）は、結果バス２８０のビット３７：３２でＲＯＢ２８５にリターンされるが、これはこれらのビットはそうでなければ整数演算において用いられないためである。これらの結果フラグは、再オーダバッファ２８５のＲＯＢアレイ４０５のフラグオペランド記憶部分４１０内に、フラグオペランドとして記憶される。整数結果がまた、関連する結果フラグとともにＲＯＢアレイ４０５内に記憶される。ＲＯＰが引退するとき、データ／フラグ結果は駆動されてＲＯＢ２８５から出される。より特定的には、そのような引退の際、ＲＯＰに対応するＲＯＢエントリは、ＲＯＢ２８５からレジスタファイル２５５およびＥＦＬＡＧＳレジスタ４００へ、その間の４１ビットのライトバックバスを介して引退する。このとき、ＲＯＰに対応するフラグは、ＲＯＢ２８５のフラグオペランド記憶部分４１０からＥＦＬＡＧＳレジスタ４００へ引退する。
【０１７６】
結果バス２８０のビット３７：３２はこうして、フラグオペランドを機能ユニットから分岐ユニット２３５に転送するために用いられる。さらに、結果バス２８０のビット３７：３２はまた、フラグオペランドを機能ユニットから再オーダバッファ２８５のフラグ記憶部分４１０へ送り戻すために用いられる。
【０１７７】
フラグオペランドバス４１５および３つのフラグタグバス４１７に関する詳細な説明がここで行なわれる。フラグオペランドバス４１５は、３つのバス部分４１５Ａ、４１５Ｂおよび４１５Ｃに分割される６ビットバスであり、バス部分４１５Ａは、フラグオペランドサブグループ１の転送のためのビット０を含み、バス部分４１５Ｂは、フラグオペランドサブグループ２の転送のためのビット４：１を含み、バス部分４１５Ｃは、フラグオペランドサブグループ３の転送のためのビット５を含む。バス部分４１５Ａ、４１５Ｂおよび４１５Ｃは、図３および図４においてフラグオペランドバス４１５として集合的に示される。３つのバス部分４１５Ａ、４１５Ｂおよび４１５Ｃの各々は、それに対応するそれぞれの４ビットフラグタグバス４１７を有する。したがって、３つのフラグタグバスの合計帯域幅は、１２ビットである。
【０１７８】
例示のため、ＣＦビットをフラグオペランドとして要求する分岐命令が、分岐ユニット２３５にディスパッチされると仮定する。もしＣＦビットが現在ＲＯＢ２８５のフラグ記憶部分４１０内に記憶されていれば（従属性が解決された場合のように）、ＣＦビットは、フラグオペランドバス４１５、すなわちサブグループ３を転送するバス部分４１５Ｃを通して転送される。しかしながら、もし未解決の従属性がなお存在していれば、４ビットフラグタグが、フラグタグバス４１７を通して転送され、分岐ユニット２３５に、この特定のフラグオペランドに割当てられたＲＯＢ２８５のフラグ記憶部分４１０内の特定のエントリ番号または宛先を示す。このフラグ再命名方式により、再命名可能なフラグエンティティの数（この特定の実施例では３つ）を主状態フラグオペランドの合計数（この実施例では６つ）よりも少なくすることができる。この特定の実施例において、再命名可能なエンティティは、フラグサブグループ３の単一のフラグである。
【０１７９】
代替例を示すために、ＳＦ、ＺＦ、ＡＦおよびＰＦビットをフラグオペランドとして要求する分岐命令が、分岐ユニット２３５にディスパッチされると仮定する。もしＳＦ、ＺＦ、ＡＦおよびＰＦビットがＲＯＢ２８５のフラグ記憶部分４１０内に記憶されていれば（従属性が解決された場合のように）、これらフラグオペランドビットは、フラグオペランドバス４１５、すなわちサブグループ２を転送するバス部分４１５Ｂを通して転送される。しかしながら、もし従属性がなお存在すれば、単一の４ビットフラグタグがフラグタグバス４１７を通して転送され、分岐ユニット２３５に、この特定のフラグオペランドに割当てられたＲＯＢ２８５のフラグ記憶部分４１０内の特定のエントリ番号を示す。この例において、単一のタグがサブグループ２のすべての４つのフラグに対処することが注目される。この例では、再命名可能なエンティティはサブグループ２のすべてである。
【０１８０】
図１４は、マイクロプロセッサ２００におけるフラグ再命名および発送メカニズムの全体の動作を示すフローチャートである。このフローチャートは、マイクロプロセッサ２００が、プログラム命令の流れにおける先行する命令を実行した後に分岐命令に遭遇したときの動作を示す。図１４のフローチャートのブロック５００では、命令ラインが命令キャッシュ２００から取出され、バイトＱ２１５に与えられる。各ラインに関連する分岐予測情報は、ラインでラインベースで検査され、いずれの予測された分岐も確認する。ブロック５０５では、分岐命令がバイトＱ２１５に関連するディスパッチウィンドウ２２０に到達すると仮定される。デコーダ２０５は、バイトＱ２１５から分岐命令を受取り、分岐命令をデコードする。分岐命令のデコードの際、デコーダ２０５は再オーダバッファ２８５に特定のデコードされた分岐命令のフラグ入力要求について知らせる。たとえば、もしデコードされた分岐命令が、ＪＯ  ４Ｂ３２（またはオーバフローによるアドレス４Ｂ３２の命令へのジャンプ）であれば、ブロック５１０において、デコーダ２０５は、再オーダバッファ２８５に、この命令がグループ１の状態フラグであるオーバフローフラグ、ＯＦへのアクセスを有さねばならないと知らせる。
【０１８１】
より特定的には、読出フラグバス４１９（ＲＥＡＤ  ＦＬＡＧ）は、図３および図４に示されるように、デコーダ２０５と再オーダバッファ２８５との間に結合される。このＲＥＡＤ  ＦＬＡＧバスは、再オーダバッファ２８５に、現在の分岐、すなわち現在割当てられている分岐の入力要求について知らせる。このＲＥＡＤ  ＦＬＡＧバスはまた、再オーダバッファ２８５に、ディスパッチウィンドウ内の現在の分岐の位置を知らせる。ＲＥＡＤ  ＦＬＡＧバスはまた、ＥＦＬＡＧＳレジスタ４００に結合され、要求されたフラグを、もしそのようなフラグがそこに引退していれば、および要求されたフラグまたは対応するフラグタグが再オーダバッファ２８５内になければ、駆動する。特定の分岐命令が分岐機能ユニットにおいて実行されるために必要な１つまたは複数のフラグは、要求された１つまたは複数のフラグと呼ばれる。
【０１８２】
再オーダバッファ２８５は次に、ブロック５１５において、要求された１つまたは複数のフラグに関連するフラグサブグループへの最新の更新のために、ＲＯＢフラグオペランド記憶部分４１０のエントリのスキャンを行なう。再オーダバッファ２８５により次にテストが行なわれ、特定の要求された１つまたは複数のフラグに関して従属性が存在するかどうかを決定する。判断ブロック５２０において、要求された１つまたは複数のフラグがメンバーであるグループに関する従属性検査が行なわれる。図６に示されるように、ＲＯＢ２８５は、３つの従属性チェッカ４２０Ａ、４２０Ｂ、および４２０Ｃ、すなわち３つのフラグサブグループ各々に対し１つの従属性チェッカを含む。各従属性チェッカは、検査を行ない、そのチェッカに与えられたフラグサブグループのいずれかのフラグに従属性が関連するかどうかを決定する。従属性チェッカ４２０Ａ、４２０Ｂ、および４２０Ｃとして採用できる１つの従属性チェッカは、１９９４年４月２６日に出願された、発明者スコット・ホワイト（Scott White ）による、「回路キャリルックアヘッドを用いたレンジ発見回路（A Range Finding Circuit Using Circular Carry Lookahead）」と題された、出願番号第０８／２３３，５６８号の米国特許出願において開示され、本出願の譲渡人と同一人物に譲渡され、この明細書に引用により援用される。
【０１８３】
この発明のフラググループ化配置により、そうでなければ必要となる従属性チェッカの数の減少が可能になる。たとえば、フラググループ化を用いなければ、フラグの数と等しい数の従属性チェッカが必要となる可能性がある。言い換えれば、もし再命名され発送されるフラグが６つあれば、６つの従属性チェッカが必要となる可能性がある。
【０１８４】
もし要求されたフラグサブグループに対し、未解決の従属性があれば、図１４のフローチャートのブロック５２５では、フラグタグが実際のフラグサブグループの代わりに分岐機能ユニット２３５に送られる。言い換えれば、要求されたフラググループにおけるフラグの値が、機能ユニットにおいて実行されることを待っている命令にそのようなフラグが関連するためまだ決定されていないならば、要求されたフラグの値はまだ決定されておらず、再オーダバッファに戻って報告される。この場合、実際のフラグの値を送る代わりに、再オーダバッファはデコーダにより要求された特定のフラグサブグループに対するフラグタグを送る。
【０１８５】
分岐機能ユニット２３５は次に、要求されたタグが結果タグバス２８２に現われるのを待つ。続いて、特定の機能ユニットが、要求されたタグに関連する命令を実行する。その特定の機能ユニットは次に、要求されたタグを結果タグバス２８２の１つに出力し、そのタグに関連する要求されたフラグ情報は結果バス２８０で今利用可能であることを信号で知らせる。分岐機能ユニット２３５は要求されたフラグオペランドサブグループに対するタグを受取るとき、そのサブグループに対する要求されたフラグ情報は、そのようなフラグを結果バス２８０を介して分岐機能ユニット２３５に更新した機能ユニットから発送される。分岐機能ユニット２３５はしたがって、ブロック５３５において、懸案中の分岐命令を実行する。
【０１８６】
しかしながら、判断ブロック５２０に戻って、もし要求されたフラググループに関する何らかの従属性が解決されたと判断されれば、ブロック５３３において、再オーダバッファ２８５は要求されたフラグサブグループを、ブロック５３５のとおり、理論的実行のために分岐機能ユニット２３５に転送する。もし分岐機能ユニット２３５がフラグサブグループ２による特定の分岐命令の実行を要求すれば、サブグループ２のすべての４つのフラグ（ＳＦ、ＺＦ、ＡＦおよびＰＦ）は、分岐ユニット２３５に送られることが注目される。しかしながら、もし残余のサブグループ１および３が、分岐ユニット２３５により、特定の命令の実行を必要とされなければ、送られる必要はない。言い換えれば、１つの特定的な実施例において、要求された１つまたは複数のフラグサブグループは、分岐ユニット２３５に送られる。サブグループのすべてが、実行される各命令に対して分岐ユニット２３５に送られる必要はない。
【０１８７】
再び判断ブロック５２０に戻って、もし特定の分岐命令に対してデコーダ２０５により要求されたフラグサブグループに関して従属性が存在しないと決定されれば、ブロック５４５におけるように、ＥＦＬＡＧＳレジスタ４００の内容は、６ビットフラグオペランドバス４１５を通して分岐機能ユニット２３５に転送される。再び、要求されたフラグサブグループからのフラグオペランドのみが、ＥＦＬＡＧＳレジスタ４００から分岐ユニット２３５に送られる必要がある。ブロック５３５のように、命令は次に、分岐機能ユニット２３５において実行される。
【０１８８】
判断ブロック５５０において、分岐予測の正確性についての決定が行なわれる。もし分岐予測が正しいと発見されれば、ブロック５５５において、分岐の結果がＲＯＢ２８５にリターンされる。言い換えれば、新しいＥＩＰの値、および（もし分岐が行われれば）行なう／行なわない状態の情報が、ＲＯＢ２８５に戻って報告される。この例では分岐は正しく予測されたため、分岐は最早理論的ではなく、したがって分岐はＲＯＢ２８５からレジスタファイル２５５に引退する。このような引退と同時に、ＥＩＰ（引退論理３２５内のＥＩＰレジスタに記憶された拡張命令ポインタ）または引退ＰＣは更新され、分岐命令が引退したことを反映する。非分岐命令が引退するとき、ＥＩＰの値は、引退した命令の後に次の命令に更新される。しかしながら、分岐命令が引退するとき、ＥＩＰレジスタは目的分岐アドレスに更新される。より特定的には、分岐命令が引退するとき、ＥＩＰは、もし分岐命令が採用された分岐であったならば、目的分岐アドレスに更新される。しかしながら、採用されなかった分岐の場合には、ＥＩＰは、分岐命令に続く次の命令に増分される。
【０１８９】
もし一旦分岐命令が実行されれば、判断ブロック５５０において、分岐予測誤りが発生したと決定され、次にブロック５６５において、予測誤りされた分岐に続くＲＯＢ２８５内のエントリが廃棄されるが、これは不正確な理論によるプロセス中にあったからである。この場合、命令キャッシュ２１０内の予測情報は更新され、取出し器、ＦＰＣ２１３は、再方向付けされ、正しい目的アドレスでの取出しを再開する。実行の際、予測誤りされた分岐命令は引退のためにＲＯＢ２８５にリターンされる。上記のフローチャートは、マイクロプロセッサパイプラインを通したワントリップを示す。パイプラインの実行は、同時に実行される複数の異なる段を伴う連続するプロセスであることが理解されるべきである。
【０１９０】
フラグ発送がまた、分岐機能ユニット２３５において実行されるＳＥＴｃｃ命令により用いられることが注目される。これらの命令は、分岐命令と同じ態様で、ＥＦＬＡＧＳビットを入力オペランドとして用いる。しかしながら、分岐の代わりとして、ＳＥＴｃｃ命令は０または１バイトの結果を発生する。分岐と異なり、この結果は汎用結果バス２８０でリターンされ、そこからその他の機能ユニットに発送されることができる。結果はまた、結果バス２８０を介してＲＯＢ２８５に与えられる。この態様で、ＳＥＴｃｃ命令は、望ましくない逐次化効果を回避できる。
【０１９１】
この発明の１つの実施例において、フラグ記憶部分４１０は、再オーダバッファ２８５内に位置するとして示されてきたが、フラグ記憶部分４１０はまた、再オーダバッファ２８５の外部に位置し得ることが理解されるべきである。
マイクロプロセッサ装置についての説明が先に示されているが、かかる装置を動作するための方法もまた開示されたことが明らかである。簡潔に言えば、この方法は、マイクロプロセッサのサイクルにつき複数の命令をデコードするためのデコーダと、デコーダに結合された再オーダバッファとを有するスーパースカラマイクロプロセッサを含み、再オーダバッファはさらに、レジスタファイルと、分岐ユニットを含む複数の機能ユニットとに結合される。特定的には、スーパースカラマイクロプロセッサにおいて命令を処理する方法は、命令の流れにおいてマイクロプロセッサに与えられた命令をデコードし、デコードされた命令をＲＯＰに変換するステップを含む。この方法はまた、フラグ修正ＲＯＰを、目的機能ユニットと指定された機能ユニットの１つにディスパッチするステップを含む。この方法はさらに、フラグ修正ＲＯＰのデータ結果に対し、再オーダバッファ内に第１のメモリロケーションを割当てるステップを含む。この方法はまた、フラグ修正ＲＯＰが実行されるとき更新されるフラグ情報を記憶するための、第２のメモリロケーションを再オーダバッファ内に割当てるステップを含む。この方法の１つの実施例は、フラグ修正ＲＯＰが実行を懸案中のとき、フラグタグに第２のメモリロケーションを関連づけるさらなるステップを含み、そのようなフラグタグはフラグ修正ＲＯＰのフラグ結果に対応する。
【０１９２】
フラグ再命名および発送メカニズムを含むスーパースカラマイクロプロセッサについての説明が行なわれてきた。この発明の１つの特定的な実施例において、フラグは、有利にもグループ化されて必要とされる従属性チェッカの数を減少させる。このマイクロプロセッサは、実行についてフラグ次第である命令の実行に関する性能の向上を示す。有利にも、フラグ再命名および発送を達成するために４つの読出フラグバスと６つの従属性チェッカとを用いずに、これらの構造の採用数を減らすことができる。
【０１９３】
この発明のある好ましい特徴のみが例示のために示されてきたが、多くの修正および変更が発生するであろう。したがって、前掲の特許請求の範囲は、この発明の真の精神の範疇であるかかる修正および変形のすべてを含むことを意図することが理解されるべきである。
【図面の簡単な説明】
【図１】従来のスーパースカラマイクロプロセッサの一部のブロック図である。
【図２】従来のスーパースカラマイクロプロセッサの他部のブロック図であり、図１と図２とで全体を構成する。
【図３】この発明に従うスーパースカラマイクロプロセッサの一部のブロック図である。
【図４】この発明に従うスーパースカラマイクロプロセッサの他部のブロック図であり、図３と図４とで全体を構成する。
【図５】図３および図４のマイクロプロセッサのＲＩＳＣコア、再オーダバッファおよびレジスタファイルのブロック図である。
【図６】図３、図４および図５の再オーダバッファのブロック図である。
【図７】この発明のマイクロプロセッサにより採用される機能ユニットの一部のブロック図である。
【図８】この発明のマイクロプロセッサにより採用される機能ユニットの他部のブロック図であり、図７と図８とで全体を構成する。
【図９】この発明のマイクロプロセッサにより採用される分岐ユニットのブロック図である。
【図１０】この発明のマイクロプロセッサの、シーケンシャルな実行の間の動作を示すタイミング図である。
【図１１】この発明のマイクロプロセッサの、分岐予測誤りの状況が発生したときの動作を示すタイミング図である。
【図１２】この発明のマイクロプロセッサのフラグレジスタを表わす図である。
【図１３】この発明のスーパースカラマイクロプロセッサにより採用される、再オーダバッファアレイをより詳細に表わす図である。
【図１４】この発明のマイクロプロセッサの、分岐命令が発生する状況における動作全体を示すフローチャートの図である。
【符号の説明】
２０５  デコーダ
２１０  命令キャッシュ
２５５  レジスタファイル
２８５  再オーダバッファ
【図１】
0003662296.tif 000003
【図２】
0003662296.tif 000004
【図３】
0003662296.tif 000005
【図４】
0003662296.tif 000006
【図５】
0003662296.tif 000007
【図６】
0003662296.tif 000008
【図７】
0003662296.tif 000009
【図８】
0003662296.tif 000010
【図９】
0003662296.tif 000011
【図１０】
0003662296.tif 000012
【図１１】
0003662296.tif 000013
【図１２】
0003662296.tif 000014
【図１３】
0003662296.tif 000015
【図１４】
0003662296.tif 000016