(57)【特許請求の範囲】
【請求項１】
各々が複数のパイプステージを有する複数の実行パイプラインのあるパイプライン化したプロセッサであって、
前記パイプステージの各々は、状態情報をパイプステージと関連づけ、前記複数の実行パイプラインの一つの実行パイプラインに発せられた命令は、前記実行パイプラインの少なくとも一つのパイプステージで処理され、それによって前記少なくとも一つのパイプステージに対して関連した状態情報を変更し、前記プロセッサは、
それぞれ対応するパイプステージを有する少なくとも第１と第２の実行パイプライン、
前記第２の実行パイプラインへ発せられる命令の第２のシーケンスにおける命令と実質的に同時に前記第１の実行パイプラインへ発せられる命令の第１のシーケンスにおける命令の少なくとも幾つかを伴って、前記命令の第１と第２のシーケンスをそれぞれ前記第１と第２の実行パイプラインへ発する命令発生回路、および
前記第１と第２の実行パイプラインのそれぞれ対応するパイプステージと関連した状態情報を含む、少なくとも第１と第２の実行パイプラインへ発せられる命令の実行をモニタするパイプ制御回路、
を有し、
この状態情報に応答して、前記パイプ制御回路は、前記第１の実行パイプラインの命令が現在のパイプステージから次のパイプステージへ、前記第２の実行パイプラインの対応するパイプステージにおける命令の移動とは無関係に、移動するように、前記第１と第２の実行パイプラインの、それぞれ対応するパイプステージ間で前記命令の第１と第２のシーケンスの流れを制御することを特徴とするプロセッサ。
【請求項２】
前記命令の第１と第２のシーケンスは、それぞれ前記第１と第２の実行パイプラインへ実質的に同時に発せられる第１と第２の命令をそれぞれ有し、前記第１の命令はシニアであり、前記第２の命令は前記第１の命令に関するデータ依存性を有し、かつ前記第２の命令に対する現在のパイプステージである前記第２の実行パイプラインの対応するパイプステージに対する関連した状態情報は、前記第１の命令に関するデータ依存性が決まったかの指示を含み、その後、前記パイプ制御回路は、現在のパイプステージから前記データ依存性が前記現在のパイプステージにおける前記第２の命令を処理するために解決されなければならないか否かに依存する次のパイプステージへの前記第２の命令の移動を制御することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
それぞれ前記第１と第２の実行パイプラインの少なくとも第１と第２の対応するパイプステージに対して、前記命令の第１と第２のシーケンスは、単一クロックにおいて処理を完了する命令と１より多いクロックにおいて処理を完了する命令の双方を含み、かつ前記第１と第２のパイプステージに対して関連する状態情報は、前記第１または第２の対応するパイプステージの何れかにおいて、現在の命令が処理を完了するために１より多いクロックを必要とするか否かの指示を含み、且つ
前記パイプ制御回路は、現在の命令が処理を完了するために、１より多いクロックサイクルを必要とするとき、前記状態情報に基づいて次のパイプステージへの流れから現在の命令を遅延することを特徴とする請求項１に記載のパイプライン化されたプロセッサ。
【請求項４】
各々が複数のパイプステージを有する複数の実行パイプラインのあるパイプライン化したプロセッサであって、
前記パイプステージの各々は、状態情報をパイプステージと関連づけ、前記複数の実行パイプラインの一つの実行パイプラインに発せられた命令は、前記実行パイプラインの少なくとも一つのパイプステージで処理され、それによって前記少なくとも一つのパイプステージに対して関連した状態情報を変更し、前記プロセッサは、
第１と第２の命令をそれぞれ前記第１と第２の実行パイプラインへ独立して発するための命令発生手段、前記第１の命令はシニアであり、かつ前記第２の命令は前記第１の命令に関するデータ依存性を有しており、少なくとも一つのパイプステージと関連した状態情報はデータの依存性を示し、且つ前記データの依存性はリード・アフタ・ライト・データ・ハザードであり、および
発せられた命令間にデータ依存性を有し、この実行パイプラインのパイプステージ間で命令の流れを制御するように、少なくとも前記第１と第２の実行パイプラインへ発せられた命令の実行をモニタするためのパイプ制御手段を有し、
前記パイプ制御手段は、前記データ依存性が現在のステージにおける前記第２の命令処理を完了するのために解決されない限り、前記第２の実行パイプラインの現在のパイプステージから前記第２の実行パイプラインの次のステージへの流れから前記第２の命令が遅延されないように、前記状態情報に基づいてそれぞれの実行パイプラインのステージ間で前記第１と第２の命令の流れを制御することを特徴とするプロセッサ。
【請求項５】
命令は一組の論理レジスタを参照し、かつ前記プロセッサは、論理レジスタの数より大きな数の物理レジスタを有するレジスタファイルを有し、更に、プロセッサは、
前記レジスタファイルにおける物理レジスタへの命令によって参照される論理レジスタをマッピングすることによってリネーミングするレジスタを選択的に実現化するためのレジスタ変換手段、
前記第１と第２の実行パイプラインへそれぞれ第３と第４の命令を独立して発する前記命令発生手段、前記第３の命令はシニアであり、前記第４の命令は前記第３の命令に関するライト・アフタ・リード依存性またはライト・アフタ・ライト依存性を有し、および
前記第４の命令に対するこの依存性を除くために残っているレジスタを使用するための前記レジスタ変換手段、
を有することを特徴とする請求項４に記載のプロセッサ。
【請求項６】
前記リード・アフタ・ライト・データ・ハザードは、前記第１の命令の行き先レジスタと同じであるソースレジスタを参照する第２の命令から生じ、かつ前記パイプ制御手段は、前記第１と第２の命令間のデータ依存性を除くために、前記第２の命令によって参照されるソースレジスタを変更することによって、前記第１の命令から前記第２の命令へデータを選択的に送るための送り手段を有することを特徴とする請求項４に記載のプロセッサ。
【請求項７】
複数の実行パイプライの各々が複数の対応するパイプラインステージを有し、各々のステージは、状態情報をパイプステージと関連づけるパイプライン化したプロセッサであって、
前記複数の実行パイプラインの一つの実行パイプラインに発せられた命令は、前記実行パイプラインの少なくとも一つのパイプステージで処理され、それによって前記少なくとも一つのパイプステージに対して関連した状態情報を変更し、前記プロセッサは、
同時に異なるパイプラインへの少なくとも１つの命令の発生を有し、それぞれのパイプラインへ命令のシーケンスにおける命令を発するように動作可能な命令発生手段、および
前記パイプラインの複数の対応するパイプラインステージに対する状態情報に応答して、それぞれのパイプラインにおける前記複数の対応するステージ間の命令の流れを制御するように、かつ前記パイプラインの１つにおける１つのパイプラインステージの命令が他のパイプラインの対応するパイプラインステージ間の命令の移動に無関係に、そのパイプラインにおける他のパイプラインステージへ移動するように動作可能なパイプライン制御手段、
を有するプロセッサ。
【請求項８】
選択された命令に対して、前記命令発生手段は、各々のパイプラインにおける実行ステージによって処理するための少なくとも２つのパイプラインへ単一の命令を発するように動作し、前記パイプライン化したプロセッサは、更にマイクロ制御手段を有し、且つ、
各々の選択された命令に対して、これらの実行ステージが前記選択された命令を処理するように独立して制御されるように、前記少なくとも２つのパイプラインの前記実行ステージへの、マイクロ命令の流れを制御するために、前記マイクロ制御手段は、選択的に動作可能であることを特徴とする請求項７に記載のプロセッサ。
【請求項９】
論理レジスタの組を参照する少なくとも複数の命令を処理する実行パイプラインを有するパイプライン化したプロセッサであって、
少なくとも命令デコードステージ及び実行ステージを含む実行パイプラインと、
パイプライン制御回路と、
マイクロ制御回路と、
を有し、
前記論理レジスタを参照する少なくとも複数の命令は、マイクロ制御された命令であり、
前記マイクロ制御回路は、前記マイクロ制御された命令の各々に対して、前記実行パイプラインの実行ステージにおける前記マイクロ制御された命令の実行を制御する１以上のマイクロ命令を与え、更に
前記論理レジスタと関連する情報を記憶するための複数の物理レジスタを有するレジスタファイルと、
前記レジスタファイルにおける物理レジスタを前記論理レジスタに割当てるレジスタ変換回路と、
を有し、
前記レジスタ変換回路は、前記命令デコードステージまたは前記パイプライン制御回路によって発生されたハードウエア制御信号か、または所定形式のマイクロ制御された命令の各々に対して、前記所定形式のマイクロ制御された命令と関連する１以上のマイクロ命令によって発生されたマイクロコード制御信号の何れかによって制御可能であり、且つ
前記マイクロ制御回路は、前記所定形式のマイクロ制御された命令の実行中に、前記マイクロ制御信号を前記レジスタ変換回路へ与えることを特徴とするプロセッサ。
【請求項１０】
前記パイプライン化したプロセッサは、少なくとも２つの実行パイプラインを有し、且つ前記所定形式のマイクロ制御された命令は、排他的なマイクロ制御された命令を有し、前記排他的なマイクロ制御された命令の各々は、他の命令と対にされることなく、前記少なくとも２つの実行パイプラインへ単独で発せられることを特徴とする請求項９に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、一般に、マイクロプロセッサに係り、より詳細には、パイプライン式スーパースカラーのマイクロプロセッサアーキテクチャに係る。
【０００２】
【従来の技術】
マイクロプロセッサの設計においては、命令スループット、即ち１秒当たりに実行される命令の数が第１に重要なものである。１秒当たりに実行される命令の数は、種々の手段によって増加することができる。命令スループットを増加するための最も簡単な技術は、マイクロプロセッサが動作する周波数を増加することである。しかしながら、作動周波数の増加は、製造技術によって制限されると共に、過剰な発熱を招く。
【０００３】
従って、近代のマイクロプロセッサ設計は、クロックサイクル周期当たりに実行される命令の平均数を増加する設計技術を用いることにより命令スループットを増加することに集中している。命令スループットを増加するこのような１つの技術が「パイプライン」である。パイプライン技術は、マイクロプロセッサを通して流れる各命令を多数の部分にセグメント化し、その各々をパイプラインの個別の段により取り扱うことができる。パイプライン動作は、実行中に多数の命令をオーバーラップすることによってマイクロプロセッサの速度を増加する。例えば、各命令を６つの段階で実行することができそして各段階がその機能を実行するのに１つのクロックサイクルを必要とする場合には、６つの個別の命令を同時に実行し（各々がパイプラインの個別の段階で実行される）、各クロックサイクルに１つの命令を完了することができる。この考え方によれば、パイプライン式アーキテクチャは、６個のクロックサイクルごとに１つの命令を完了する非パイプライン式アーキテクチャよりも６倍も大きな命令スループットをもつことになる。
【０００４】
マイクロプロセッサの速度を高めるための第２の技術は、マイクロプロセッサを「スーパースカラー」として構成することである。スーパースカラーアーキテクチャにおいては、クロックサイクル当たりに２つ以上の命令が発行される。流れの中の他の命令に依存する命令がなければ、命令スループットの増加は、スカラー性の程度に比例する。従って、アーキテクチャがレベル２までスーパースカラーである（各クロックサイクルに２つの命令が発行されることを意味する）場合には、マシンの命令スループットが２倍となる。
【０００５】
マイクロプロセッサは、高い命令スループットを得るためには、スーパーパイプライン式（多数の段をもつ命令パイプラインを「スーパーパイプライン」と称する）であると共にスーパースカラーとすることができる。しかしながら、このようなシステムの動作は、実際には、各々の命令を所与の数のパイプ段で手際よく実行でき且つ命令の実行が相互依存しないような理想的な状態からかけ離れている。実際の動作においては、命令は変化するリソース要求を有し、従って、パイプラインを通る命令の流れに割り込みを生じる。更に、命令は典型的に相互依存的であり、例えば、レジスタの値を読み取る命令は、その同じレジスタに値を書き込む手前の命令に依存し、第１の命令がレジスタへの書き込みを完了するまで第２の命令を実行できない。
【０００６】
【発明が解決しようとする課題】
従って、スーパーパイプライン及びスーパースカラー技術は、マイクロプロセッサのスループットを高めることはできるが、命令のスループットは、スーパーパイプライン式スーパースカラーアーキテクチャの実施によって大きく左右される。１つの特定の問題は、パイプラインにおける命令の流れを制御することにより、マイクロプロセッサの周波数を増加せずに命令スループットが高められることである。マイクロプロセッサの動作中に依存性又は他のファクタによって種々の段が不作動にされるので、スーパーパイプライン式スーパースカラーマシンの効率が低下される。
【０００７】
それ故、命令の流れを効率的に制御できるマイクロプロセッサアーキテクチャの必要性が生じている。
【０００８】
【課題を解決するための手段】
本発明は、複数の命令パイプラインを備え、各パイプラインは、パイプラインへ発生された命令を処理する複数の段を有しているようなスーパースカラー、パイプライン式のプロセッサに関する。
【０００９】
本発明の１つの特徴において、プロセッサは、発生される命令間のデータ依存性に係わりなく多数のパイプラインへ命令を同時に発生する。パイプ制御手段はパイプラインにおける命令間の依存性を検出し、そして１つのパイプラインの現在段における第１命令を適切に処理するために別のパイプラインの第２命令におけるデータ依存性を解決しなければならないことがない限り、上記現在段における第１命令が上記データ依存性によって遅延されないように、上記パイプラインの段を通る命令の流れを制御する。
【００１０】
本発明の別の特徴においては、パイプ制御手段は、所与の段に対し、シニア命令がもはや例外を生じることがなくなる後までジュニア命令がシニア命令の前にプロセッサ状態を変更できないように、パイプラインにおける命令の流れを制御する。
【００１１】
本発明の別の特徴においては、パイプスイッチ手段は、パイプラインにおける命令をあるシーケンスで順序付けして命令間の依存性を減少するように、パイプライン間で命令を選択的に切り換えられるようにする。
【００１２】
本発明の別の特徴においては、パイプラインの少なくとも２つが実行段を備えており、マイクロコントローラ手段は、各実行段に独立したマイクロ命令の流れを与え、選択的命令に対して、実行段が独立して制御されて単一の命令を処理するように、各マイクロ命令の流れを選択的に制御する。
【００１３】
本発明の別の特徴においては、パイプ制御手段は、各段の状態情報を監視し、そしてパイプラインにおける命令が他のパイプラインにおける命令流とは独立してある段から別の段へ進み得るように、状態情報に応答して段間の命令の流れを制御する。
【００１４】
本発明の別の特徴においては、パイプ制御手段は、第１命令と第２命令との間の依存性を、その一方の命令に対するオペランドソースを変更することによって排除する。
【００１５】
本発明の別の特徴においては、レジスタ変換手段は、論理レジスタへの書き込みに応答してこれら論理レジスタの各々に最も最近割り当てられている１組の物理レジスタを定めるプロセッサ状態情報を維持する。パイプラインの各段において命令が例外を生じるかどうかを決定する前にパイプラインに命令が発生されたときに、その段において命令に対する状態情報がチェックポイント処理され、命令が例外を生じる場合には、それに対応するチェックポイント処理された状態情報が検索されて、プロセッサ状態を、その命令を発生した点へと復帰させる。更に、パイプラインへ分岐又は浮動小数点命令が発生され、そしてその後の命令がこのような分岐又は浮動小数点命令の後で推論的に発生されるものである場合には、このような分岐又は浮動小数点命令に対する状態情報がチェックポイント処理されて、分岐の予想を誤るか又は浮動小数点命令が失敗に終わった場合に、それに対応するチェックポイント処理された状態情報が検索されて、プロセッサ状態を、その分岐又は浮動小数点命令を発生した点へと復帰させる。
【００１６】
本発明の別の特徴においては、定められた１組の論理レジスタは、命令のためのオペランドのソース及び行き先として多数のアドレス可能なサイズを有している。レジスタ変換手段は、上記定められた１組の論理レジスタの１つへ書き込む命令及びその論理レジスタに関連したサイズに応答して、その１つの論理レジスタへ物理レジスタを割り当てる。
【００１７】
本発明の別の特徴においては、レジスタ変換手段は、各物理レジスタに対して現在指示及び論理ＩＤコードを記憶し、これは、その物理レジスタがこのような論理ＩＤコードによって識別された論理レジスタに対する現在値を含んでいるかどうかを指示するものである。論理レジスタへの各アクセスに対し、それに対応する論理ＩＤコードが、物理レジスタと共に記憶された各論理ＩＤコードと比較され、そして対応する物理ＩＤコードが、その関連する論理レジスタの現在値を含む物理レジスタに対して出力される。更に、レジスタ変換ユニットは、各物理レジスタに対し、それに関連する論理レジスタにデータ依存性が存在するかどうかを指示する状態情報を記憶することができる。
【００１８】
本発明の別の特徴においては、少なくとも１つの実行パイプラインは、マイクロコントローラ手段によって制御される実行ユニットを備えている。選択された命令に対し、レジスタ変換ユニットも、マイクロコントローラ手段によって制御される。
【００１９】
本発明の実施例は、次の技術的硬化の１つ以上を実現するように実施される。命令は、それらの間の依存性に係わりなく発生され、パイプラインに不必要にバブルが入り込まないようにされる。というのは、依存性は、通常の命令の流れによるか、又は依存性を解決すためのパイプラインにおけるメカニズムにより、ストールを生じることなく、それ自体解決できるからである。命令は、それらがもはや欠陥を生じることがなくなった後に順序から外れて完了することができる。これは、完了のために多数のクロックサイクルを必要とするマルチボックス命令の場合に特に効果的であり、さもなくば、命令の流れを著しくストールすることになる。依存性は、パイプライン間で命令を切り換えることによって減少することができる。個別のパイプラインにおける２つの実行ユニットは、２つの個別のマイクロ命令流を用いて単一の命令を処理するよう個々に制御することができ、実行段又はマイクロシーケンサの複雑さを著しく増加することもない。命令は、各実行パイプラインを経て独立して進むことができ、依存性により生じるバブルを命令の処理中に除去することができ、特に、リード・アフタ・ライト（書き込み後の読み取り）依存性は、命令の順序を変更するようにソースコードを再コンパイルすることなく排除される。これら全ての特徴及び効果は、パイプラインの実行性能を最大にするよう働く。
【００２０】
本発明の実施例が次の技術的効果の１つ以上を実現するように実施される他の領域は、次の通りである。物理レジスタの各々への書き込み保留状態を維持することにより、レジスタを割り当てそして状態情報を与える制御が簡単にされる。物理レジスタに関する状態情報をチェックポイント処理することにより、マイクロプロセッサは、例外、誤った予想分岐、浮動小数点エラー又は他の命令エラーを生じた命令の後のプロセッサ状態を単一クロックサイクル内に回復することができ、これにより、このようなエラーからの回復におけるペナルティを相当に軽減することができる。多サイズの論理レジスタに対しては、幾つかのデータ依存性を排除する一方、多サイズレジスタを使用する既存の命令セットとの適合性を維持するために、レジスタ再ネーミングがサポートされる。物理レジスタは、最小限のハードウェアを使用して論理レジスタの要求に応答して迅速に識別することができる。物理レジスタに関連した状態情報を維持することにより、データ依存性を容易に検出することができる。これらの特徴及び効果を得るのに使用されるレジスタ変換ユニットは、選択された命令に対し、このような命令を処理する実行ユニットを制御するマイクロコントローラにより（ハードウェア制御信号を用いる通常の方法によるのではなく）直接制御することができる。
【００２１】
【実施例】
本発明及びその効果を完全に理解するために、添付図面を参照して以下に詳細に説明する。本発明のマイクロプロセッサの模範的実施例の詳細な説明は、次のように構成される。
１．模範的プロセッサシステム
１．１  マイクロプロセッサ
１．２  システム
２．一般化されたパイプラインの流れ
３．パイプライン制御
３．１  一般化されたストール制御
３．２  パイプの切り換え
３．３  マルチボックス命令
３．４  排他的命令
４．順序通りの命令通過／順序を外れた命令の完了
５．パイプの切り換え
６．依存性に関わりにない命令の発生
７．マルチスレッドのＥＸ動作
８．レジスタ変換ユニット
８．１  レジスタ変換の概要
８．２  変換制御レジスタ
８．３  レジスタ割り当て
８．４  ２つの行き先をもつ命令
８．５  推論的分岐実行のためのチェックポイントレジスタ
８．６  例外からの回復
８．７  レジスタ変換ユニットのマイクロコントロール
８．８  レジスタＩＤ変換及びハザード検出
９．送り
１０．  結論
【００２２】
この構成テーブル及びこの詳細な説明で使用する対応する見出しは、参照の便宜上設けられているものに過ぎない。マイクロプロセッサの従来又は既知の観点の説明は、これを不必要に詳細にすることにより本発明の説明を不明瞭にしない程度に省略する。
【００２３】
１．模範的プロセッサシステム
模範的プロセッサシステムが図１、２及び３に示されている。図１及び２は、各々、模範的なスーパースカラー、スーパーパイプライン型マイクロプロセッサと、２つの実行パイプラインのパイプ段階との基本的な機能ブロックを示している。図３は、マイクロプロセッサを使用する模範的プロセッサシステム（マザーボード）設計を示している。
【００２４】
１．１  マイクロプロセッサ
図１を参照すれば、マイクロプロセッサ１０の主たるサブブロックは、次のものを含む。（ａ）ＣＰＵコア２０；（ｂ）プリフェッチバッファ３０；（ｃ）プリフェッチャ３５；（ｄ）ＢＰＵ（分岐処理ユニット）４０；（ｅ）ＡＴＵ（アドレス変換ユニット）５０；及び（ｆ）ＴＡＧ  ＲＡＭ６２を含む単一化した１６Ｋバイトのコード／データキャッシュ６０。２５６バイトの命令ラインキャッシュ６５は、単一化キャッシュへの命令フェッチを減少するための一次命令キャッシュを構成し、単一化キャッシュは、二次命令キャッシュとして働く。オンボード浮動小数点ユニット（ＦＰＵ）７０は、ＣＰＵコア２０によってこれに発せられた浮動小数点命令を実行する。
【００２５】
マイクロプロセッサは、内部３２ビットアドレス及び６４ビットデータバスＡＤＳ及びＤＡＴＡを使用している。単一化キャッシュ６０及び命令ラインキャッシュ６５の３２バイトラインサイズに対応する２５６ビット（３２バイト）プリフェッチバス（ＰＦＢ）は、３２命令バイトの全ラインを単一のクロックにおいて命令ラインキャッシュへ転送できるようにする。外部３２ビットアドレス及び６４ビットデータバスへのインターフェイスは、バスインターフェイスユニット（ＢＩＵ）を経て行われる。
【００２６】
ＣＰＵコア２０は、２つの実行パイプＸ及びＹを有するスーパースカラー設計のものである。これは、命令デコーダ２１と、アドレス計算ユニット２２Ｘ及び２２Ｙと、実行ユニット２３Ｘ及び２３Ｙと、３２個の３２ビットレジスタをもつレジスタファイル２４とを備えている。ＡＣコントロールユニット２５は、レジスタスコアボード及びレジスタ再ネーミングハードウェアをもつレジスタ変換ユニット２５ａを備えている。マイクロシーケンサ及びマイクロＲＯＭを含むマイクロコントロールユニット２６は、実行制御を与える。
【００２７】
ＣＰＵコア２０からの書き込みは、１２個の３２ビット書き込みバッファ２９へ待ち行列され、書き込みバッファの割り当ては、ＡＣコントロールユニット２５によって実行される。これらの書き込みバッファは、単一化キャッシュ６０へ書き込むためのインターフェイスを形成し、非キャッシュ処理書き込みは、書き込みバッファから外部メモリへ直接送られる。書き込みバッファロジックは、オプションの読み取りソース作用及び書き込み集合作用をサポートする。
【００２８】
パイプコントロールユニット２８は、実行パイプを通る命令の流れを制御し、これは、命令が例外を生じないことが決定されるまで命令の順序を保持し、命令流におけるバブルを押しつぶし、そして誤って予想された分岐及び例外を生じる命令の後に実行パイプをフラッシュすることを含む。各段階に対し、パイプコントロールユニットは、どの実行パイプが最も初期の命令を含むかを追跡し、「ストール」出力を与え、そして「遅延」入力を受け取る。
【００２９】
ＢＰＵ４０は、分岐（行われる又は行われない）の方向を予想し、そしてその予想された行われる分岐及び流れ命令の無条件変更（ジャンプ、コール、リターン）に対するターゲットアドレスを与える。更に、このＢＰＵは、分岐及び浮動小数点命令の場合には推論的実行を監視し、即ち予想を誤ることのある分岐後に推論的に発生される命令の実行、及びＦＰＵ７０へ発生される浮動小数点命令であって推論的に発生された命令が実行を完了した後に失敗となることのある浮動小数点命令の実行を監視する。浮動小数点命令が失敗に終わった場合、又は分岐が誤って予想された（これは、分岐に対するＥＸ又はＷＢ段階まで分からない）場合には、実行パイプラインは、その失敗となった又は予想を誤った命令の点まで修理され（即ち、その命令の後に実行パイプラインがフラッシュされ）、そして命令のフェッチが再開されねばならない。
【００３０】
パイプラインの修理は、各パイプ段において浮動小数点又は予想分岐命令がその段に入るときにプロセッサ状態のチェックポイントを形成することにより行われる。これらのチェックポイント検査される命令に対し、その後の推論的に発生される命令によって変更され得る全てのリソース（プログラマが見ることのできるレジスタ、命令ポインタ、条件コードレジスタ）がチェックポイント検査される。チェックポイント検査される浮動小数点命令が失敗に終わるか又はチェックポイント検査される分岐が誤って予想された場合は、そのチェックポイント検査された命令の後に実行パイプラインがフラッシュされ、浮動小数点命令の場合には、これは、典型的に、実行パイプライン全体をフラッシュすることを意味し、一方、誤って予想された分岐の場合には、完了することが許されたＥＸの対命令及びＷＢの２つの命令があることを意味する。
【００３１】
模範的なマイクロプロセッサ１０の場合に、推論の程度についての主たる制約は、次の通りである。（ａ）一度に４つまでの浮動小数点又は分岐命令に対してのみ推論的実行が許される（即ち、推論レベルは最大４である）。（ｂ）書き込み又は浮動小数点の記憶は、それに関連した分岐又は浮動小数点命令が解決する（即ち、予想が正しいか又は浮動小数点命令が失敗に終わらない）までキャッシュ又は外部メモリに対して完了しない。
【００３２】
単一化キャッシュ６０は、４方セット連想（４ｋセットサイズをもつ）のもので、擬似ＬＲＵ置換アルゴリズムを使用し、ライトスルー及びライトバックモードを有している。これは、クロック当たり２つのメモリアクセス（データ読み取り、命令フェッチ又はデータ書き込み）を許すためにデュアルポート式（バンク構成による）にされている。命令ラインキャッシュは、完全連想、ルックアサイド実施（単一化キャッシュに対して）のもので、ＬＲＵ置換アルゴリズムを使用する。
【００３３】
ＦＰＵ７０は、４深さロード及び記憶待ち行列をもつロード／記憶段と、変換段（３２ビットないし８０ビットの拡張フォーマット）と、実行段とを備えている。ロードは、ＣＰＵコア２０により制御され、そしてキャッシュ処理記憶は、書き込みバッファ２９により指示される（即ち、各浮動小数点記憶動作に対して書き込みバッファが割り当てられる）。図２を参照すれば、マイクロプロセッサは、７段のＸ及びＹ実行パイプラインを有し、即ち、命令フェッチ段ＩＦ、２つの命令デコード段ＩＤ１、ＩＤ２、２つのアドレス計算段ＡＣ１、ＡＣ２、実行段ＥＸ、及びライトバック段ＷＢを有している。複合命令デコードＩＤ及びアドレス計算ＡＣパイプ段は、スーパーパイプラインであることに注意されたい。
【００３４】
ＩＦ段は、ＣＰＵコア２０に連続的なコード流を与える。プリフェッチャ３５は、（一次）命令ラインキャッシュ６５或いは（二次）単一化キャッシュ６０のいずれかからプリフェッチバッファ３０へ１６バイトの命令データをフェッチする。ＢＰＵ４０は、プリフェットアドレスでアクセスされ、そして予想される流れの変更に対してプリフェッチャへターゲットアドレスを供給し、プリフェッチャが１つのクロック内に新たなコード流へシフトできるようにする。
【００３５】
デコード段ＩＤ１及びＩＤ２は、可変長さのＸ８６命令セットをデコードする。命令デコーダ２１は、各クロックごとにプリフェッチバッファ３０から１６バイトの命令データを検索する。ＩＤ１において、２つの命令の長さがデコードされて（Ｘ及びＹの実行パイプに対して各々１つづつ）、Ｘ及びＹ命令ポインタを得、それに対応するＸ及びＹバイト使用信号がプリフェッチバッファへ返送される（これは、次いで、次の１６バイト転送のために増加する）。又、ＩＤ２においても、流れの変更のような幾つかの命令形式が決定され、即座及び／又は変位オペランドが分離される。ＩＤ２段は、Ｘ及びＹ命令のデコード、マイクロＲＯＭに対するエントリポイントの発生、及びアドレスモード及びレジスタフィールドのデコードを完了する。
【００３６】
ＩＤ段の間に、命令を実行するための最適なパイプが決定され、命令がそのパイプへ発生される。パイプの切り換えにより、ＩＤ２ＸからＡＣ１ＹへそしてＩＤ２ＹからＡＣ１Ｘへ命令を切り換えることができる。模範的な実施例については、流れ変更命令、浮動小数点命令及び排他的命令のような幾つかの命令がＸパイプラインのみへ発生される。排他的命令は、ＥＸパイプ段において失敗となることのある命令、及びある形式の命令、例えば、保護モードセグメントロード、ストリング命令、特殊なレジスタアクセス（制御、デバッグ、テスト）、乗算／除算、入力／出力、ＰＵＳＨＡ／ＰＯＰＡ（プッシュオール／ポップオール）、及びタスクスイッチを含む。排他的命令は、両パイプのリソースを使用することができる。というのは、これらは、ＩＤ段のみから発生される（即ちこれらは他の命令と対にされない）からである。これらの発生制約を除くと、いかなる命令も対にして、Ｘ又はＹのいずれのパイプへ発生することもできる。
【００３７】
アドレス計算段ＡＣ１及びＡＣ２は、メモリ参照のためのアドレスを計算し、そしてメモリオペランドを供給する。ＡＣ１段は、クロックごとに２つの３２ビットリニア（３オペランド）アドレスを計算する（比較的稀である４つのオペランドアドレスは、２つのクロックを必要とする）。このパイプ段の間に、データ依存性もチェックされそしてレジスタ変換ユニット２５ａ（レジスタスコアボード及びレジスタ再ネーミングハードウェア）を用いて分析され、３２個の物理レジスタ２４は、Ｘ８６アーキテクチャで定められた８個の汎用のプログラマから見える論理レジスタをマップするのに使用される（ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＤＩ、ＥＳＩ、ＥＢＰ、ＥＳＰ）。ＡＣ２段の間に、レジスタファイル２６及び単一化キャッシュ７０は、物理アドレスでアクセスされ（キャッシュヒットの場合には、デュアルポート式の単一化キャッシュのためのキャッシュアクセス時間は、レジスタのアクセス時間と同じであり、レジスタセットを効果的に拡張する）、物理アドレスは、リニアアドレスであるか、或いはアドレス変換がイネーブルされた場合には、ＴＬＢ６０によって発生された変換されたアドレスである。
【００３８】
ＡＣユニットは、８個のアーキテクチャ（論理）レジスタ（Ｘ８６で定められたレジスタセットを表す）を備えており、これらは、アドレス変換のためのレジスタオペランドをアクセスする前にレジスタ変換ユニットＡＣ１のアクセスに必要な遅延を回避するようにＡＣユニットによって使用される。アドレス変換を必要とする命令については、ＡＣ１は、アーキテクチャレジスタをアクセスする前にこれらアーキテクチャレジスタの所要データが有効になる（リード・アフタ・ライトの依存性がない）まで待機する。ＡＣ２段の間に、レジスタファイル２４及び単一化キャッシュ６０を物理アドレスでアクセスすることによりソースオペランドが得られ（キャッシュヒットの場合には、デュアルポート式の単一化キャッシュのためのキャッシュアクセス時間は、レジスタのアクセス時間と同じであり、レジスタセットを効果的に拡張する）、物理アドレスは、リニアアドレスであるか、或いはアドレス変換がイネーブルされた場合には、ＡＴＵ５０によって発生された変換されたアドレスである。
【００３９】
変換されたアドレスは、メモリのページテーブル及びチップ上のワークスペース制御レジスタからの情報を用いてリニアアドレスからＡＴＵ（ＴＬＢ又は変換ルックアサイドバッファを用いた）によって発生される。単一化キャッシュは、仮想インデックスされると共に物理的にタグが付けられていて、アドレス変換がイネーブルされたときには、変換されていないアドレス（ＡＣ１の終わりに得られる）でセットの選択を行うことができ、そして各セットに対し、ＡＴＵからの変換されたアドレス（ＡＣ２において初期に得られる）でタグの比較を行うことができる。セグメント化及び／又はアドレス変換違反のチェックも、ＡＣ２で行われる。
【００４０】
命令は、それらが例外を生じないと決定されるまではプログラム順序に保たれる。ほとんどの命令に対し、この決定は、ＡＣ２の間又はその前に行われ、浮動小数点命令及びある排他的命令は、実行中に例外を生じることがある。命令は、ＡＣ２からＥＸへ順次に通され（又は浮動小数点命令の場合はＦＰＵ７０へ）、ＥＸにおいて依然として例外を生じることのある整数命令は、排他的と示され、それ故、単独で両方の実行パイプへ発生されるので、しかるべき順序での例外の取り扱いが確保される。
【００４１】
実行段ＥＸｘ及びＥＸｙは、命令により定められた動作を実行する。命令は、ＥＸにおいて可変数のクロックを消費し、即ち順序がずれて実行することが許される（順序ずれ完了）。両方のＥＸ段は、加算、論理及びシフト機能ユニットを備え、そして更に、ＥＸｘ段は、乗算／除算ハードウェアを含む。
【００４２】
ライトバック段ＷＢは、レジスタファイル２４、条件コード、及びマシン状態の他の部分を既に実行された命令の結果で更新する。レジスタファイルは、ＷＢのフェーズ１（ＰＨ１）に書き込まれ、そしてＡＣ２のフェーズ２（ＰＨ２）に読み取られる。
【００４３】
書き込みバッファ２７、推論的実行及びマイクロシーケンサについての付加的な開示は、本発明と同日に出願されたガリベイ氏等の「書き込みバッファをもつマイクロプロセッサにおける推論的実行及び例外処理のためのデータの制御(Control of Data for Speculative Execution and Exception Handling in a Microprocessor with Write Buffer)」と題する米国特許出願；本発明と同日に出願されたマクマホン氏の「分岐処理ユニット(Branch Processing Unit)」と題する米国特許出願；本発明と同日に出願されたブラハム氏の「パイプライン式プロセッサにおける推論的実行(Speculative Execution in a Pipelined Processor)」と題する米国特許出願；及び本発明と同日に出願されたハービン氏等の「単一クロック命令デコードアーキテクチャを有するマイクロプロセッサ(Microprocessor Having Single Clock Instruction Decode Architecture)」と題する米国特許出願に見ることができ、これらは全て参考としてここに取り上げる。
【００４４】
１．２  システム
図３を参照すれば、模範的な実施例として、マイクロプロセッサ１０は、単一チップのメモリ及びバスコントローラ８２を含むプロセッサシステムに使用される。メモリ／バスコントローラ８２は、マイクロプロセッサと外部メモリサブシステム−−レベル２キャッシュ８４及びメインメモリ８６−−との間のインターフェイスを形成し、６４ビットプロセッサデータバス（ＰＤ）上でのデータの移動を制御する（データ路はコントローラの外部であり、ピンの本数及びコストを低減する）。
【００４５】
コントローラ８２は、３２ビットアドレスバスＰＡＤＤＲに直接インターフェイスし、コントローラ内のレジスタを読み取ったり書き込んだりするための１ビット巾のデータポート（図示せず）を備えている。両方向性の分離バッファ８８は、マイクロプロセッサ１０と、ＶＬ及びＩＳＡバスとの間のアドレスインターフェイスを形成する。
【００４６】
コントローラ８２は、ＶＬ及びＩＳＡバスインターフェイスの制御を行う。ＶＬ／ＩＳＡインターフェイスチップ９１（ＨＴ３２１のような）は、３２ビットＶＬバス及び１６ビットＩＳＡバスへの標準インターフェイスを形成する。ＩＳＡバスは、ＢＩＯＳ９２、キーボードコントローラ９３、Ｉ／Ｏチップ９４及び標準ＩＳＡスロット９５へインターフェイスする。インターフェイスチップ９１は、二重の高／低ワード〔３１：１６〕／〔１５：０〕分離バッファにより形成された両方向性３２／１６マルチプレクサ９６を経て３２ビットＶＬバスへインターフェイスする。ＶＬバスは、標準ＶＬスロット９７へインターフェイスし、そして両方向性分離バッファ９８を経て６４ビットプロセッサデータバスの下位ダブルワード〔３１：０〕へインターフェイスする。
【００４７】
２．一般化されたパイプラインの流れ
図４は、パイプラインを通る８個の命令の流れを示すもので、２パイプラインアーキテクチャに対するオーバーラップした命令実行を示している。付加的なパイプラインと、各パイプラインに対する付加的な段とを設けることができる。好ましい実施例において、マイクロプロセッサ１０は、システムクロック信号１２４の倍数である内部クロック１２２を使用している。図４において、内部クロックはシステムクロックの周波数の２倍で動作するものとして示されている。
【００４８】
第１内部クロックサイクル１２６の間に、ＩＤ１は、各命令Ｘ０及びＹ０に基づいて動作する。内部クロックサイクル１２８の間に、命令Ｘ０及びＹ０はＩＤ２段にあり（Ｘ０はＩＤ２ｘそしてＹ０はＩＤ２ｙにあり）、ＩＤ１段には命令Ｘ１及びＹ１がある。内部クロックサイクル１３０の間には、ＩＤ１に命令Ｘ２及びＹ２があり、ＩＤ２に命令Ｘ１及びＹ１があり（Ｘ１はＩＤ２ｘにそしてＹ１はＩＤ２ｙにあり）、そしてＡＣ１段に命令Ｘ０及びＹ０がある（Ｘ０はＡＣ１ｘにそしてＹ０はＡＣ１ｙにある）。内部クロックサイクル１３２の間には、ＩＤ１段に命令Ｘ３及びＹ３があり、ＩＤ２段に命令Ｘ２及びＹ２があり、ＡＣ１段に命令Ｘ１及びＹ１があり、そしてＡＣ２段に命令Ｘ０及びＹ０がある。これらの命令は、Ｘ及びＹパイプラインの段を経て順次流れ続ける。
【００４９】
クロック１３４ないし１４０に示されたように、各命令の実行部分は、順次クロックサイクルにおいて実行される。これは、パイプライン式アーキテクチャの主たる利点であり、個々の命令の実行時間を減少せずに、クロック当たりに完了される命令の数が増加される。従って、ハードウェアの速度に対する大きな需要と共に大きな命令スループットが達成される。
【００５０】
図４に示す命令の流れは、最適な場合である。図示されたように、２つ以上のクロックサイクルを必要とする段はない。しかしながら、実際のマシンでは、１つ以上の段が完了のために付加的なクロックサイクルを必要とし、他のパイプ段を通る命令の流れを変更する。更に、一方のパイプラインを通る命令の流れは、他方のパイプラインを通る命令の流れによって左右される。
【００５１】
多数のファクタにより１つ又は全てのパイプラインの種々の段に遅延が生じることがある。例えば、メモリへのアクセスがメモリキャッシュにおいて失敗し、１クロックで命令を処理するに必要な時間にデータをアクセスするのを妨げることがある。これは、データがメインメモリから検索されるまでＥＸ段の片側又は両側が遅れることを必要とする。ある命令は、ここに示す実施例では１つの実行段（Ｘ実行パイプのＥＸＸ）にしかない乗算器のようなハードウェアリソースを必要とする。この場合には、リソースが使用できるまでその段が遅れることになる。データ依存性も遅延を生じることがある。ある命令が加算のような手前の命令の結果を必要とする場合には、その命令が実行ユニットによって処理されるまで待機しなければならない。
【００５２】
「マルチボックス」命令、即ち多数のマイクロ命令を用いて実行され、従って完了するのにＥＸパイプ段に２つ以上のクロックサイクルを必要とする命令、によって他の遅延が生じる。これらの命令は、ＩＤ２段の出力においてパイプラインを通るその後の命令の流れを停止する。
【００５３】
パイプラインを通る命令の流れは、パイプコントロールユニット２８によって制御される。好ましい実施例では、両方（又は全て）のパイプを通る命令の流れを制御するのに単一のパイプコントロールユニット２８が使用される。パイプを通る命令の流れを制御するために、パイプコントロールユニット２８は、パイプライン１０２及び１０４を含む種々のユニットからの「遅延」信号を受け取り、そして種々のユニットへ「ストール」信号を発行する。
【００５４】
Ｘ及びＹの両パイプラインに対して単一のパイプコントロールユニット２８が使用されるので、パイプライン自体は互いに独立して制御される。換言すれば、Ｘパイプラインのストールが必ずしもＹパイプラインのストールを生じることはない。
【００５５】
３．パイプライン制御
図５は、パイプライン段間における段間通信を示している。これらの段は、段Ｎ−１、段Ｎ、及び段Ｎ＋１と任意に示されている。各段は、パイプコントロールユニット（パイプコントローラ）２８からの独特の入力ＳＴＡＬＬと、出力ＤＥＬＡＹとを有する。ＤＥＬＡＹ出力は、その段がそこに含まれた命令を完了するのに少なくとももう１つのクロックを必要とする場合にイネーブルされる。各パイプラインに対し、パイプコントロールユニット２８は、パイプ段が「終了」であるかどうかをＤＥＬＡＹ信号に基づいて決定する。段は、その命令を後続段へ通す準備ができた場合に「終了」である。段へのＳＴＡＬＬ入力は、その段が命令を後続パイプ段へ転送できない場合にパイプコントロールユニット２８によってイネーブルされる。というのは、その後続段が遅延又はストールされるからである。好ましい実施例では、パイプライン段は、それが遅延されない（即ち、ＤＥＬＡＹ信号が偽である）場合にのみストールされる。
【００５６】
「有効」パイプ段は、進行中又は完了した命令を含んでいる段である。無効パイプ段は、命令を含まない。無効パイプ段は、「バブル」を含むと言える。「バブル」は、ＩＤ１及びＩＤ２段が、ＡＣ１及びＡＣ２段１１２及び１１４を完全に空にするに充分なほど命令をデコードできないときに、パイプライン１００の前端において形成される。又、バブルは、パイプ段がその命令を後続段へ転送しそしてその手前の段が遅れるときにも形成される。パイプ段が段の有効性を指示するビットを入力も出力もしない間に、その段のバブルがパイプラインコントロールユニット２８によって追跡される。
【００５７】
ある場合には、パイプ段におけるバブルが手前の段からの命令によってオーバーライトされ、これは「スリップ」と称される。又、パイプ段は、後続パイプ段に例外状態があるために完了すべきでない命令を含む場合には、「フラッシュ」することもできる。信号ＦＬＵＳＨは各パイプ段への入力である。パイプ段は、その命令がエラー状態のために完了できずそして現在段を越えて転送してはならない場合に「例外」を発生する。例外は、全ての命令に対し、ＩＦ段１０６、ＩＤ１及びＩＤ２段、並びにＡＣ１及びＡＣ２段に生じ得る。「排他的」命令と示される幾つかの命令は、実行段１１６に例外を生じることがある。更に、浮動小数点命令についても、例外が生じ得る。
【００５８】
３．１  一般化されたストール制御
一般的な場合において、パイプコントローラは、パイプラインの段が有効であって遅れがないが次の段が遅れるか又はストールされる場合に、その段をストールする。これは、段Ｎについて論理的に表すと、次のようになる。
ＳＴＡＬＬN ＝ｖN ・！ｄN ・（ｄN+1 ＋ＳＴＡＬＬN+1 ）
但し、ｖN は、段Ｎが有効である場合に真であり、
ｄN は、段Ｎに対するＤＥＬＡＹが真である場合に真であり、そして
！は、後続項が否定されることを表す。
【００５９】
６段のパイプラインについては、次のように表すことができる。
0003678444.tif 000002
【００６０】
パイプコントロールユニット２８は、パイプラインの段をストールするときには、他のパイプラインの対応段は必ずしもストールしない。他の段がストールされるかどうかは、以下に述べるように、命令のシーケンス及び他のファクタによって左右される。
【００６１】
３．２  パイプの切り換え
上記の一般的なモデルは、命令が入るパイプに命令が流れるようなアーキテクチャに対して機能するが、図３に示すようにパイプ間で命令を切り換えることができるときには、更に複雑な制御構造が必要とされる。切り換えが生じるかどうかを判断するメカニズムを以下に詳細に説明する。
【００６２】
好ましい実施例では、パイプコントロールユニット２８は、命令がＡＣ２段からＥＸ段へ送られるまで命令を「プログラム順序」に（或いは「順序通り」に）保持する。「順序通り」とは、「ジュニア」命令がパイプライン段において「シニア」命令を越えることができない（マイクロプロセッサによって受け取られた命令のシーケンスにおけるジュニア命令の位置はシニア命令の後である）ことを意味するが、ジュニア命令がシニア命令と同じ段にあってもよい。従って、命令ＩT+1 （ジュニア命令）がＡＣ１X にある間に、命令ＩT （シニア命令）がＡＣ１y に存在することはあるが、ＩT がＡＣ２y に進むまでＩT+1 はＡＣ２x に進むことはできない。しかし、ＩT は、ＩT+1 の進むのを待機せずに進むことができる。
【００６３】
ＩＦ段及びＩＤ１段の逐次性により、命令は、これら２つの段内では順序が狂うことはない。しかしながら、ＩＤ２、ＡＣ１及びＡＣ２段を通る命令の流れは一般的なストールメカニズムに対して変更を必須とする。この状態における命令流の制御を助けるために、パイプコントロールユニット２８は、各パイプ段に対して制御信号ＸＦＩＲＳＴを維持する。特定の段に対しＸＦＩＲＳＴが真であれば、Ｘパイプラインのこの段における命令は、Ｙパイプラインの対応段における命令に対してシニアである。２つのパイプラインをもつここに示す実施例では、ＸＦＩＲＳＴは、特定段の２つの命令についてどちらのパイプラインがシニアであるかを指示し、３つ以上のパイプラインをもつ実施例では、ＸＦＩＲＳＴは、各段の各命令について相対的にシニアであることを指示する。
【００６４】
ＩＤ２ユニットの出力において、パイプコントロールユニットは、命令をＡＣ１x 又はＡＣ１y のいずれかへ進めることができるかどうかを判断しなければならない。シニア命令は、（それが有効であって遅れがないと仮定すれば）いずれかのパイプラインの後続段に遅れがなく又はストールされなければ、進めることができる。ジュニア命令は、（それが有効であって遅れがないと仮定すれば）他方のパイプラインの対応段におけるシニア命令に遅れもストールもない場合にのみ進めることができる。これは、論理的に、次のように表される。
ｓｔ3X＝ｖ3X・（ｄ3X＋ｄ4X＋ＳＴＡＬＬ4X）
ｓｔ3Y＝ｖ3Y・（ｄ3Y＋ｄ4Y＋ＳＴＡＬＬ4Y）
但し、ｓｔ3 は、対応するパイプラインがＩＤ２段又はそれ以降においてストール又は遅延するかどうかを指定するものである。
ＳＴＡＬＬ3X＝ｖ3X・！ｄ3X・（ｄ4X＋ＳＴＡＬＬ4X）＋！ＸＦＩＲＳＴ3 ・ｓｔ3Y
ＳＴＡＬＬ3Y＝ｖ3Y・！ｄ3Y・（ｄ4Y＋ＳＴＡＬＬ4Y）＋！ＸＦＩＲＳＴ3 ・ｓｔ3X
【００６５】
３．３  マルチボックス命令
各パイプラインのＥＸ段は、マイクロＲＯＭからのマイクロ命令によって他のＥＸ段とは独立して制御される。多数の命令が単一のマイクロ命令で実施され、ひいては、単一のクロックサイクル中にＥＸ段に通されるが、ある命令は、それらの実行に多数のマイクロ命令を必要とし、ひいては、それを完了するのに２つ以上のクロックサイクルを必要とする。これらの命令を「マルチボックス」命令と称する。
【００６６】
マイクロＲＯＭは、マルチボックス命令の実行中に同じパイプラインの別の命令によってアクセスできないので、マルチボックス命令に対する最後のマイクロＲＯＭアクセスの後まで、パイプのＩＤ２段からパイプのＡＣ１段まで新たな命令を通すことができない。これは、ＡＣ１中にマイクロＲＯＭがアクセスされることによるものである。マルチボックス命令がその最後のマイクロ命令を読み取るときに、その後の命令がマイクロＲＯＭをアクセスしてＡＣ１に入ることが許され、従って、バブルが生じることはない。
【００６７】
パイプラインのＩＤ２段がＩＤ１段から命令を受け取るときには、命令がマルチボックス命令であるかどうかをデコードする。パイプコントロールユニット２８は、マルチボックス命令がマイクロＲＯＭで終了されるまでＩＤ２段をストールする。ＥＸ段は、ＵＤＯＮＥ信号によりマルチボックス命令の終わりを知らせる。マルチボックス命令をサポートするのに必要な制御は、次の通りである。
ｓｔ3X＝！ｄ3x・ｖ3X・（ｄ4X＋ＳＴＡＬＬ4X＋ＭＵＬＴＩＢＯＸ4X・！ＵＤＯＮＥ4X）
ｓｔ3Y＝！ｄ3Y・ｖ3Y・（ｄ4Y＋ＳＴＡＬＬ4Y＋ＭＵＬＴＩＢＯＸ4Y・！ＵＤＯＮＥ4Y）
ＳＴＡＬＬ3X＝ｓｔ3X＋！ＸＦＩＲＳＴ3 ・ｓｔ3Y
ＳＴＡＬＬ3Y＝ｓｔ3Y＋！ＸＦＩＲＳＴ3 ・ｓｔ3X
【００６８】
マルチボックス命令は、ＡＣ１、ＡＣ２及びＥＸのリソースを使用することができる。マルチボックス命令に関する付加的なパイプ制御は、図２６ないし２７について説明する。図２６において、Ｉ0 は、ＸパイプラインのＥＸ段にあり、そしてマルチボックス命令Ｉ1 は、ＡＣ２（Ｉ1a）とＡＣ１（Ｉ1b）段にある。パイプコントロールユニットの観点から、マルチボックス命令Ｉ1 は単一命令として処理され、そしてマルチボックス命令により占有された段に遅延があると、マルチボックス命令に関連した全ての段をストールさせる。従って、たとえパイプラインにおいてＩ1aがＩ1bの前にあっても、Ｉ1bの遅延はＩ1aをストールさせる。これは、１つの段における遅延がその後続段にストールを生じさせる唯一の状態である。
【００６９】
パイプコントロールユニット２８は、各マイクロ命令に関連したヘッドビットを使用することにより命令間の境界を追跡する。ヘッドビットは、たとえ命令が１ボックス命令であっても、マイクロ命令がその命令の第１マイクロ命令であるかどうかを指示する。ヘッドビットが所与のマイクロ命令に対して真でない場合には、それが第１のマイクロ命令ではない。パイプライン内の各マイクロ命令に対してヘッドビットをチェックすることにより、パイプコントロールユニットは命令間の境界を決定して、それに応じて段をストールすることができる。
【００７０】
３．４  排他的命令
好ましい実施例に使用される別の形式の命令は、「排他的」命令である。ＥＸ段において実行される間に例外を生じるおそれのある命令は、排他的と称する。例外については以下で詳細に述べる。多数のメモリアクセスを要求する命令は、このようなアクセス中に例外を生じることがあるので、排他的と表される。他の命令も、制御レジスタ又はメモリマネージメントレジスタを変更したり又は１つの実行パイプにしか使用できない乗算ハードウェアのようなリソースを使用するので、排他的と表される。排他的命令は、単一ボックス又はマルチボックスのいずれでもよい。排他的命令は、マシンの状態に対する排他的命令の影響によるか又は両ＥＸユニットの使用がこの命令にとって有益であることから、単独で実行されねばならない（即ち、他のパイプの対応段には他の命令が使用されない）。ＥＸ段に例外を生じることのある排他的命令は、例えば、０で除算するエラーを生じることのあるＤＩＶ（除算）や、ＰＵＳＨＡのようにＥＸ段の間にメモリアクセスを実行しなければならない命令である。４８６個の命令セットの中からの排他的命令の他の例は、次の通りである。ＡＲＰＬ、ＢＯＵＮＤ、ＣＡＬＬ、ＣＬＣ、ＣＬＤ、ＣＬＩ、ＣＬＴＳ、ＣＭＣ、ＣＭＰＳ、ＤＩＶ、ＥＮＴＥＲ、ＨＬＴ、ＩＤＩＶ、ＩＭＵＬ、ＩＮ、ＩＮＳ、ＩＮＴ、ＩＮＴＯ、ＩＮＶＤ、ＩＮＶＬＰＧ、ＩＲＥＴ、ＬＡＨＦ、ＬＡＲ、ＬＥＡＶＥ、ＬＧＤＴ、ＬＩＤＴ、ＬＧＳ（ＰＭ）、ＬＳＳ（ＰＭ）、ＬＤＳ（ＰＭ）、ＬＥＳ（ＰＭ）、ＬＦＳ（ＰＭ）、ＬＬＤＴ、ＬＭＳＷ、ＬＯＤＳ、ＬＳＬ、ＬＴＲ、ＭＯＶ（ＳＲ）、ＭＯＶＳ、ＭＵＬ、ＯＵＴ、ＯＵＴＳ、ＰＯＰＡ、ＰＯＰＦ、ＰＯＰ  ＭＥＭ、ＰＵＳＨＡ、ＰＵＳＨＦ、ＰＵＳＨ  ＭＥＭ、ＲＥＴ、ＳＡＨＦ、ＳＣＡＳ、ＳＧＤＴ、ＳＩＤＴ、ＳＬＤＴ、ＳＭＳＷ、ＳＴＣ、ＳＴＤ、ＳＴＩ、ＳＴＯＳ、ＳＴＲ、ＶＥＲＲ、ＶＥＲＷ、ＷＡＩＴ及びＷＢＩＮＶＤ。但し、「ＰＭ」は、保護モード命令を表し、そして「ＳＲ」は、特殊なレジスタ又は制御レジスタを用いた命令を表している。
【００７１】
ＩＤ１段は、どの命令が排他的であるかをデコードする。パイプコントロールユニット２８は、ＡＣ１x 及びＡＣ１y の両方の段が使用できるまでＩＤ２段において排他的命令をストールする。
【００７２】
図２７は、排他的マルチボックス命令の遅延の影響を示している。排他的マルチボックス命令は、Ｘ及びＹの両パイプラインに対し、ＥＸ、ＡＣ２及びＡＣ１段を占有する。排他的マルチボックス命令により占有されたいずれかの段が遅延する場合には、反対のパイプラインの対応段も遅延し、マルチボックス命令に関連した他の段は、マルチボックス命令を一緒に保持するためにパイプコントロールユニットによってストールされる。従って、命令Ｉxbが遅延する場合は、Ｉybも遅延し、そしてＩxa、Ｉya、Ｉxc及びＩycはストールされる。排他的マルチボックス命令では、各パイプラインごとに１つづつ２つのヘッドビットを用いて、命令の開始が指示される。
【００７３】
４．順序通りの命令通過／順序を外れた命令の完了
図１及び２を参照すれば、上記したように、命令は、ＡＣ２段からＥＸ段へと通過するまでパイプコントロールユニット２８によって順序通りに維持される。命令は、その命令に対して実行がいったん開始すると、ＥＸ段へ「通過」されると考えられる。というのは、命令に対するポインタを変更するといった次の段へ進むことに関連した幾つかの予備的な手順が、全ての例外が報告される前に行われるからである。
【００７４】
命令がＡＣ２段からＥＸ段へ通過すると、命令が順序づれして実行されるのを防止するリソース又はデータ依存性がない限り、順序づれして実行を完了することができる（即ち、シニア命令の前にジュニア命令をライトバック段へと継続することができる）。例えば、リード・アフタ・ライト（ＲＡＷ）依存性は、この依存性がクリアされるまで命令がそのＥＸ段を完了するのに防止する。従って、ＡＤＤ  ＡＸ，ＢＸのような命令は、手前のＡＤＤ  ＢＸ，ＣＸの実行が完了するまでそのＥＸ段を完了できない。というのは、オペランドＢＸが手前の命令に基づいているからである。
【００７５】
しかしながら、シニア命令に依存性をもつことなくＥＸ段へ通過するジュニア命令は、完了することができ、それ故、多くの命令は、反対のＥＸ段に多数のクロック周期を必要とするシニア命令を通過することができる。好ましい実施例のこの観点は、命令スループットを大巾に増大する。
【００７６】
好ましい実施例では、命令は、例外を生じることがなくなるまで、順序通りに維持される。例外はプログラムエラーによって生じ、その例外を生じた命令が完了する前に報告される。命令の完了の前に例外を報告することにより、プロセッサは、命令を再スタートできると共にその欠陥命令の影響を無効にすることのできる状態に保たれる。例外は、例えば、０で除算するエラー、無効のＯＰコード及びページ欠陥を含む。デバッグ例外も、データブレークポイント及び単一ステップ動作を除いて、例外として処理される。例外サービスルーチンの実行後に、命令ポインタは、その例外を生じた命令を指し、典型的に、命令は再スタートされる。
【００７７】
例外を生じることのある命令は、再スタート可能でなければならない。従って、例外が生じた場合には、マシンの状態が、命令をスタートする前の状態に回復されねばならない。従って、例外を生じた命令及びその後の命令によってマシンの状態が変更されてはならない。典型的に、命令の再スタートは、レジスタファイルの状態をリセットし、そしてスタックポインタ、命令ポインタ及びフラグを復帰することを伴う。ほとんどの例外はＡＣ２段で生じるので、例外はＡＣ２段の出力においてアサートされる（ＥＸ段で例外を生じる排他的命令を除き）。命令は、ＩＤ１段で再スタートされる。
【００７８】
例外を生じる命令が、対応するＡＣ２段の命令（隣接命令）に対してジュニアである場合には、その隣接命令がＥＸ段へと継続される。しかしながら、例外を生じる命令がシニア命令である場合には、両方の命令を再スタートしなければならない。換言すれば、マシンの状態は、例外を生じる命令によって生じた変化の前に存在した状態であってプログラムシーケンスにおいてその手前にある命令をパイプラインに通し続けられる状態へ回復しなければならない。
【００７９】
好ましい実施例では、非排他的なマルチボックス命令が一方のパイプラインにおいて実行される場合に、そのマルチボックス命令の実行中に他方のパイプラインに多数の命令が流れることがある。マルチボックス命令は、ＡＣ１、ＡＣ２及びＥＸ段を使用するので、そのマルチボックス命令に対するヘッドビットを有するマイクロ命令を処理する段のみが順序を保つ。従って、ＡＣ１及びＡＣ２は、これらの段がヘッドビットをもつマイクロ命令を含まない場合は、ジュニア命令が進むのを防止しない。命令が流れ続けることができるかどうかを制御する２つのファクタは、（１）マルチボックス命令がジュニア命令とのデータ依存性を生じるかどうか、又は（２）マルチボックス命令がジュニア命令とのリソース依存性を生じるかどうかである。
【００８０】
リソース依存性は、シニア命令により使用されているリソースをジュニア命令が必要とするときに生じる。例えば、好ましい実施例では、ＥＸユニットに対する面積を減少するために、ＸパイプのＥＸユニットしか乗算器を有していない。マルチボックス命令がＸ側のＥＸユニットで作用する場合には、乗算器を必要とするその後の命令は、シニア命令が完了するまで実行できない。
【００８１】
図６は、ＡＣ２段からＥＸ段への命令の通過及びＥＸ段の完了に関するパイプコントロールユニット２８の一般的動作を示すフローチャートである。パイプコントローラは、命令がその現在段（又はそれを越えて）例外を生じ得るかどうか判断する（２００）。もしそうでなければ、命令は、シニア命令の前に完了することができる（２０２）（これらシニア命令がもはや例外を生じることがない限りは）。命令がまだ例外を生じることがある場合には、パイプコントローラは、全てのシニア命令がマイクロプロセッサの状態に対してそれらの変更を行ってしまうまで、その命令がマイクロプロセッサの状態を変更できないようにする（２０４）。換言すれば、命令がもはや例外を生じなくなるまで、全ての状態変更はプログラム順序でなされる。
【００８２】
上記した更に特定の場合には、流れ図のブロック２０４は、ＡＣ２段を通る命令のプログラム順序を維持することによって実施される。Ｘ８６命令セットのほとんどの命令については、命令がＡＣ２段により例外を生じるかどうか判断することができる。ＥＸ段において例外を生じることが許される排他的命令は、ＥＸ段においてのみ実行され、例外が生じた場合にはマシンの状態が復帰される。
【００８３】
上記の説明では、命令は、もはや例外を生じることのない点を通して順序が保たれたが、より一般的なパイプ制御方法は、命令がプロセッサの状態を変更することがない限り、命令を順序づれして進められるようにする。
【００８４】
５．パイプの切り換え
図１及び２を参照すれば、パイプコントロールユニット２８は、命令がＩＤ２段の後にパイプライン間で切り換わるかどうかを制御する。従って、命令は、パイプコントロールユニット２８の制御のもとでパイプラインを経てＩＤ２x からＡＣ１x 又はＡＣ１y のいずれかへそしてＩＤ２y からＡＣ１x 又はＡＣ１y のいずれかへ進む。
【００８５】
好ましい実施例では、パイプコントロールユニット２８は、どちらのパイプＸ又はＹが命令を出すかをある基準に基づいて判断する。第１の基準は、一方のパイプラインが除去することのできるバブルを有するかどうかである。もしそうであれば、パイプラインは、ＩＤ２段における命令の最もシニアなものをそのパイプラインへ移動するよう試みる。従って、ＡＣ１x が有効で、ＡＣ１y が無効でそしてＩＤ２X における命令がＩＤ２段における２つの命令のシニアである場合には、パイプコントロールユニット２８は、その命令をＩＤ１x からＡＣ１y へ転送する。
【００８６】
第２の基準は、パイプラインにおける新たなバブルの発生を防止することである。バブルの発生を防止するために、パイプコントロールユニット２８は、従属命令が遅延される場合にその命令の従属対が他の命令に影響を及ぼさないように試みる。これを行うために、好ましい実施例では、パイプコントロールユニット２８は、プログラム順序における隣接命令がパイプラインにおいて互いに他の上に来ないように保つ。
【００８７】
図７はこの問題を示している。時間Ｔ1 において、命令Ｉ1 はＥＸx にあり、命令Ｉ2 はＥＸy にあり、命令Ｉ3 はＡＣ２y にありそして命令Ｉ4 はＡＣ２x にある。Ｉ2 は、Ｉ1 においてリード・アフタ・ライト依存性を有し、換言すれば、命令Ｉ2 がＥＸy 段において適切に処理されるためには、ＥＸx 段における命令Ｉ1 の結果を待機しなければならない。例えば、Ｉ1 は、ＡＤＤ  ＡＸ，ＢＸ命令であり、そしてＩ2 は、ＡＤＤ  ＡＸ，ＣＸ命令である。Ｉ2 は、Ｉ1 が完了するまでそのオペランドの一方が準備できないので完了し得ない。時間Ｔ2 に、Ｉ1 が完了し、ＥＸx にバブルを残す。Ｉ2 はＥＸy において実行される。Ｉ3 は、Ｉ2 が完了するまでＥＸ段へ進むことができない。Ｉ4 は、Ｉ3 のジュニアであるからＥＸ段へ進むことができず、上記のように、命令は、ＥＸ段に入るまではシニア命令を越えて進むことができない。
【００８８】
隣接命令がパイプラインにおいて互いに他の上に来ないようにプログラム順序に維持する結果が図８に示されている。この例では、パイプコントロールユニット２８は、時間Ｔ1 においてＡＣ２の対を、Ｉ3 がＡＣ２x にありそしてＩ4 がＡＣ２y にあるように順序付けする。命令をこのように順序付けする理由は、ＹパイプラインにおいてＩ3 がＩ2 の上にならないよう防止することである。従って、時間Ｔ2 に、Ｉ1 はＥＸ段を完了し、そしてライトバック段へ移動する。ここで、Ｉ3 がＥＸx へ移動することができ、従って、ＥＸx にバブルが発生するのを防止する。同様に、Ｉ5 がＡＣ２x へ移動できる。
【００８９】
ある場合には、パイプコントロールユニット２８は、隣接命令をパイプラインにおいて互いに他の上に置かねばならない。一般に、この状態は、Ｘのみの命令によって生じ、これは、Ｘパイプラインに入れられねばならないか、又はパイプコントロールユニット２８がバブルを除去する必要があるために、所望の順序での攪拌を必須とするものである。図９はこのような状態を示している。時間Ｔ1 に、Ｉ1 及びＩ2 は、各々ＥＸx 及びＥＸy にあり、Ｉ3 及びＩ4 は、各々ＡＣ２x 及びＡＣ２y にあり、Ｉ5 及びＩ6 は、各々ＡＣ１y 及びＡＣ１x にある。というのは、Ｉ6 はＸのみの命令だからである。それ故、パイプコントロールユニット２８は、Ｉ6 をＡＣ１x に入れるよう強制されるが、たとえそのようにしても、ＹパイプラインにおいてＩ5 がＩ4 の上に来るように強制される。Ｉ7 とＩ8 は各々ＩＤ２x とＩＤ２y にある。Ｉ4 は、Ｉ3 においてリード・アフタ・ライト依存性を有し、Ｉ6 は、Ｉ5 においてリード・アフタ・ライト依存性を有する。時間Ｔ2 に、Ｉ1 及びＩ2 は、ＷＢ段へ移動され、Ｉ3 及びＩ4 は、ＥＸ段へ移動されている。Ｉ6 は、ＡＣ２x へ移動され、そしてＩ5 は、ＡＣ２y へ移動されている。それ故、パイプコントロールユニット２８は、Ｉ7 及びＩ8 がパイプラインを切り換えて、Ｉ7 がＸパイプラインにおいてＩ6 の上に来ないよう防止することができる。Ｉ9 及びＩ10は、ＩＤ２へ移動される。
【００９０】
時間Ｔ3 において、Ｉ3 は、ＥＸx で完了して、ＥＸy へ移動し、そしてＩ4 は、その動作を完了するためにＥＸy に留まる。図７について上記したように、Ｉ5 もＩ6 も、いずれのパイプラインも下流へ進むことができず、従って、命令Ｉ5 及びそれ以上は、それらの各段に保たれる。時間Ｔ4 に、Ｉ4 が完了し、そしてＩ5 及びＩ6 は各々ＥＸy 及びＥＸx へ移動する。Ｉ7 及びＩ8 は各々ＡＣ２y 及びＡＣ２x へ移動し、Ｉ9 及びＩ10は各々ＡＣ１y 及びＡＣ１x へ移動して、隣接命令Ｉ9 及びＩ8 の両方がＸパイプラインへ行くのを防止する。Ｉ11及びＩ12は、ＩＤ２段へ移動する。
【００９１】
時間Ｔ5 において、Ｉ5 は完了し、Ｉ7 はＥＸy へ移動する。Ｉ6 は、リード・アフタ・ライト依存性のために、ＥＸx に留まる。Ｉ9 はＡＣ２y へ移動し、Ｉ11はＡＣ１y へ移動し、Ｉ3 はＩＤ２x へ移動する。明らかなように、ＥＸx に留まっているＩ6 により形成される潜在的なバブルは、パイプコントロールユニット２８により命令を適切にシーケンスすることによって回避される。
【００９２】
図７ないし９について命令の特定の順序付けを説明したが、命令をシーケンスする他の方法を用いて、パイプラインを通る命令の効率的な流れを促進することができる。又、切り換え点は、ＩＤ２段である必要はない。上記したように、パイプコントロールユニット２８は、この切り換え点を使用し、バブルを生じることのある命令間の依存性を減少するような命令シーケンスを与える。
【００９３】
パイプの切り換えに関するパイプ制御ユニットの一般的な動作を示すフローチャートが図１０に示されている。パイプコントローラは、Ｘのみの命令のように命令をあるパイプラインを下るように出さねばならないかどうかを決定する（２１０）。もしそうであれば、パイプコントロールユニット２８は、使用できるパイプラインに命令を出す（２１２）。命令をいずれのパイプにも出せる場合は、パイプコントロールユニット２８は、いっぱいになるパイプラインのいずれかにバブルが生じるかどうかを決定する（２１４）。もしそうであれば、パイプコントロールユニット２８は、バブルのある段へ命令を移動する（２１６）。バブルがない（又は両方のパイプラインが使用できる）場合には、パイプコントロールユニット２８は、依存性を回避するための最良のシーケンスの評価に基づいてＸ又はＹパイプラインに命令を出す（２１８及び２２０）。上記したように、１つの実施例においては、パイプコントローラは、隣接する命令を同じパイプラインにおいて互いに他の上に出すことを回避することにより、依存性を回避する。
【００９４】
６．依存性に関わりのない命令の発生
命令は、２つの命令間に存在することのある依存性に係わりなくＩＤ１からＩＤ２へ送られる。別の解決策は、一対（又はそれ以上）の命令が依存性をもつかどうかを決定し、もしそうであれば、他のパイプの対応段にバブルをもつ第１の命令を発生して、バブルがパイプラインを通る発生された命令と対を保つようにすることである。従って、所与の時間周期にわたって処理される命令の数が減少される。
【００９５】
性能を改善するために、ここに開示するマイクロプロセッサは、依存性をもつ命令をパイプラインに同時に発生する。依存性は、命令がそれに依存するデータを使用する必要のある点でチェックされる。即ち、依存性がパイプラインにストールを生じる点は、依存性の性質に基づいており、依存性のデータがアドレスの計算に必要とされる場合には、ＡＣ１にストールが生じるが、そのデータが実行に必要とされる場合には、ストールがＥＸに生じる。ストールのときまで、パイプ又は他のメカニズムにおける命令の移動は、依存性を解決し、従って、命令のより効率的な流れを与える。
【００９６】
７．マルチスレッドのＥＸ動作
図１及び２を参照すれば、マイクロシーケンサ回路２３は、ＥＸ段へのマイクロ命令の独立した流れを形成する。従って、ＥＸx 段の制御は、ＥＸy 段の制御とは独立している。
【００９７】
単一のマイクロ命令ワードを用いて両ＥＸ段を制御するのではなく、２つの独立したマイクロ命令の流れによって両ＥＸ段の実行を制御することにより、命令の実行において相当の融通性が与えられ、性能が高められる。更に、２つのＥＸ段を単一のマイクロ命令で制御するのに必要な付加的なハードウェアが回避される。
【００９８】
特に、ある排他的命令は、ＥＸx 及びＥＸy の両方の段を使用することにより有利になる。両方のＥＸ段を使用すると、排他的命令は、アドレス計算のために両ＡＣ段へアクセスし、この場合、ＡＣは、又、マイクロ命令制御される。
【００９９】
両ＥＸ（及びＡＣ）段は、単一の命令を実行するのに使用されるが、各ＥＸ段は、マイクロシーケンサからマイクロ命令の２つの独立した流れを受け取り続ける。２つのＥＸユニットの動作は、マイクロ命令の適切なコード化によって維持される。
【０１００】
８．レジスタ変換ユニット
８．１  レジスタ変換の概要
図１及び２を参照すると、命令レベルデータハザードを検出して分析するためにレジスタ変換ユニット２５ａが使用される。ＥＸパイプ段における実行の完了前に、各命令は、そのソースオペランドが有効になっていなければならない。レジスタ変換ユニットは、各レジスタを追跡して、アクティブな命令が未解決の書き込み（書き込み保留）を有するかどうかを決定するのに使用される。
【０１０１】
書き込み保留中のソースレジスタを命令が有する場合には、その命令に関連した常駐制御ワード（セクション９及び図１９ないし２２を参照）がＡＣ１段に表示されて、ソースレジスタが書き込み保留を有することを指示する。パイプラインを経て命令が進むにつれて、各段は、従属レジスタへの書き込みを検出するためにライトバックバスを「スヌープ(snoop) 」する。従属レジスタへの書き込みが検出された場合は、ソースレジスタに関連した残留制御ワードの書き込み保留フィールドがクリアされる。
【０１０２】
図１１は、レジスタ変換ユニット２５ａの一般的なブロック図である。物理レジスタファイル（図１の２４）は、Ｘ８６アーキテクチャの８個のローカルレジスタに関連した情報を記憶するための３２個の物理レジスタを備えている。物理レジスタへのアクセスは、レジスタ変換ユニット２５ａにより制御される。物理及びローカルレジスタに関連した状態情報は、変換制御レジスタ２３６に記憶される。変換制御回路２３８は、状態情報に基づいて物理レジスタへのアクセスを管理する。
【０１０３】
真のデータ依存性は、命令の完了を妨げるＲＡＷハザードから生じる。又、ＷＡＲ（ライト・アフタ・リード）ハザードに対応する依存性、「反依存性」と称する、及びＷＡＷ（ライト・アフタ・ライト）ハザードに対応する依存性、「出力依存性」と称する、も存在する。真のデータ依存性ではないこれらの反依存性及び出力依存性は、レジスタ変換ユニット２５ａによって制御されるレジスタ再ネーミングを使用することによって移動し得る。レジスタ再ネーミングにおいては、アーキテクチャが（論理的又は構造的に）定める以上の物理レジスタが設けられる。論理レジスタが書き込まれるたびに新たな物理レジスタを指定することにより（結果の行き先）、レジスタは再ネーミングされ、両ＷＡＲ及びＷＡＷハザードを排除する。
【０１０４】
Ｘ８６アーキテクチャは、プログラマから見える８個の汎用レジスタを定める（ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＤＩ、ＥＳＩ、ＥＢＰ、ＥＳＰ）。ここに示す実施例では、これら８個の汎用レジスタ（論理レジスタ）をマップするのに使用される３２個の物理レジスタがある。マイクロプロセッサは、条件分岐が実行を完了する前に命令を予想し実行するので、レジスタ変換ユニットは、誤って予想した分岐の結果を処理することができねばならない。予想が間違いであった場合には、マイクロプロセッサは、状態を条件分岐点まで復帰しなければならない。以下に述べるように、チェックポイント処理を用いて、推論的経路が得られる前に状態情報をセーブする。間違って予想された条件分岐からの復帰はチェックポイント処理した物理レジスタへ戻ることを伴う。
【０１０５】
各ＡＣ１パイプ段に対し、レジスタ変換及び再ネーミングハードウェアによって次の動作が完了される。
１．ＡＣパイプ段における現在命令の行き先である２つまでの新たなレジスタを割り当てる（再ネーミングする）。この割り当ては、両方の命令が同じレジスタを行き先として指定する場合に依存性が形成されるためにプログラム順序で行われる。
２．ＡＣパイプ段における命令に対し、ＲＡＷ依存性をチェックする。
３．アドレス計算のためにＡＣ中に使用されるレジスタに対し、ライトバックバス上の物理レジスタＩＤをチェックして、レジスタ変換ユニットにおける書き込み保留中ビットをバイパス及びクリアできるようにする。
４．４つまでのレジスタに対し論理−物理変換を行う。
【０１０６】
８．２  変換制御レジスタ
図１２は変換制御レジスタ２３６を示している。論理ＩＤレジスタ２４０は、論理レジスタを物理レジスタに対してマップする。サイズレジスタ２４２は、物理レジスタが指定される論理レジスタのサイズに対応するコードを記憶する。この特徴は、以下で説明する。現在レジスタ２４４は、所与の論理レジスタに対して最も最近指定されたレジスタを指示する。従って、新たな物理レジスタが割り当てられるたびに、その対応する論理レジスタに対してそれまで現在レジスタであった物理レジスタに対する現在ビットがオフにされ、そして新たに割り当てられたレジスタに対する現在ビットがオンにされる。従って、いつでも、現在レジスタ２４４は、８ビットがオンでありそして２４ビットがオフである。各物理レジスタに対し、保留レジスタ２４６は、その物理レジスタへの書き込みが保留中であるかどうかを指示するビットを有している。
【０１０７】
４つのチェックポイントレジスタ２４８、Ｃｈｋｐｎｔ０−Ｃｈｋｐｎｔ３、は、チェックポイントが生じるたびに現在レジスタ２４４のコピーを記憶するのに用いられる。好ましい実施例において、チェックポイントは、条件分岐又は浮動小数点演算がＡＣ１に通されるときに生じる。チェックポイントレジスタ２４８は、回転ベースで書き込まれる。例外復帰レジスタ２５０は、ＡＣ１、ＡＣ２及びＥＸにおける各命令に対する現在ビットを記憶する。というのは、これらが命令に対する割り当てがＡＣ１段で行われる前に存在するからである。例外復帰レジスタの内容は、命令が段から段へ移動するときに命令に従う。
【０１０８】
８．３  レジスタ割り当て
論理レジスタへ結果を書き込む各命令に対し、新たな物理レジスタがレジスタ変換ユニット２５ａによって割り当てられる。レジスタ割り当てプロセスは、最初に、「フリー」の物理レジスタ、即ち使用中でないレジスタを識別する。フリーレジスタの検出については、図１３を参照して説明する。フリーレジスタが位置決めされると、論理レジスタ番号が物理レジスタのデータ構造体に入れられ、現在と表示される。論理レジスタを表していた手前の物理レジスタは、その現在ビットがクリアされる。
【０１０９】
フリーレジスタを識別する回路が図１２及び１３に示されている。レジスタビジーレジスタ２５２は、各物理レジスタに対して１ビット位置を有している。レジスタビジーレジスタの各ビットは、保留、現在、チェックポイント及び例外復帰レジスタにおける対応位置に応答してセットされる。図１３に示すように、レジスタビジーレジスタ２５２のビットｎは、保留、現在、チェックポイント及び例外復帰レジスタの第ｎビットに対する論理オア演算の結果である。レジスタは、レジスタビジーレジスタの対応ビットが「０」にセットされた場合にフリーであり、そしてその対応ビットが「１」にセットされた場合に使用中である。
【０１１０】
割り当ての際に、現在レジスタの対応ビットは、物理レジスタを現在レジスタとして表示するために「１」にセットされる。物理レジスタが指定される論理レジスタを指示するために論理ＩＤレジスタ２４０の対応する３ビットにコードが入れられ、そしてサイズレジスタの対応ビットが、割り当てられる論理レジスタのサイズにセットされる（以下のテーブル１を参照）。物理レジスタに対応する保留ビットもセットされる。割り当てを生じる命令は、指定された物理レジスタへの書き込みであり、そして論理レジスタからのその後の命令による読み取りはこの新たな物理レジスタからの読み取りを生じる。この再ネーミングは、ＡＣ１パイプ段の間に生じ、プログラム順序で処理される。命令をプログラム順序で処理することは、ＡＣ１x 及びＡＣ１y における両命令が同じ論理レジスタをソース及び行き先として指定する場合に生じる。一例として、これは、両命令がＡＤＤ（加算）であって、ＡＸレジスタがソース及び行き先の両方として定められる場合に生じる。レジスタの再ネーミングにより、２つの新たな物理レジスタが論理ＡＸレジスタとして割り当てられ、最後の１つは現在レジスタとして表示される。以下の例は、各命令がいかに再ネーミングされるかを示している。
【０１１１】
第１の例：（ＡＤＤ  ＡＸ，ＢＸ）。命令ＡＤＤがＡＣ１に受け取られたときにＡＸ及びＢＸレジスタに対する物理レジスタＩＤが現在各々「１」及び「２」であると仮定する。ＡＸレジスタは行き先でもあるから、新たな物理レジスタがＡＸに対して割り当てられる。この物理レジスタは、ＩＤが「３」である（物理レジスタ「３」がフリーであると仮定すれば）。この加算命令は、次いで、物理レジスタ「１」と「２」を加え、その結果をレジスタ「３」に書き込む。
ＡＸ（物理レジスタ１）＋ＢＸ（物理レジスタ２）→ＡＸ（物理レジスタ３）
【０１１２】
第２の例：（ＡＤＤ  ＡＸ，ＢＸ）。ＡＸレジスタは行き先であるから、新たな物理レジスタがＡＸに割り当てられる。これは、ＩＤが「４」である。手前の命令でＡＸレジスタは物理「３」と再ネーミングされているので、これがＡＤＤのためのＡＸソースとして使用される。というのは、これは、割り当て時に現在と表示されているからである。それ故、この第２のＡＤＤ命令は、物理レジスタ「３」と「２」を加え、その結果をレジスタ「４」へ書き込む。
ＡＸ（物理レジスタ３）＋ＢＸ（物理レジスタ２）→ＡＸ（物理レジスタ４）
【０１１３】
Ｘ８６アーキテクチャは、幾つかのレジスタをワード（例えば「ＡＸ」）、下位バイト（例えば「ＡＬ」）、上位バイト（例えば「ＡＨ」）又はダブルワード（例えば「ＥＡＸ」）としてアドレスできるようにするので、レジスタが命令によっていかに指定されるかに基づいて各割り当てごとにサイズが指定される。レジスタの割り当て可能と考えられる部分が、ＥＡＸレジスタについて図１４に示されている。各物理レジスタは、コードを記憶するサイズレジスタにサイズレジスタに対応する２ビットフィールドを有している。例示的なコードをテーブル１に示す。
0003678444.tif 000003
【０１１４】
可変サイズのレジスタを用いてレジスタ変換する方法が図１５に示されている。レジスタ変換ユニット（図１の２５ａ）の変換制御回路は、割り当てられるべき論理レジスタのサイズを、その論理レジスタに対する現在レジスタのサイズと比較し、そしてレジスタを割り当てできるか又は命令をストールしなければならないかどうかを決定する。
【０１１５】
割り当て要求が受け取られ（２５８）、割り当てられるべきレジスタのサイズが、それに対応する現在レジスタのサイズと比較される（２６０及び２６２）。２つの命令が同じ論理行き先レジスタを異なるサイズ（即ち、ＡＨ及びＡＬ）として指定する場合であって、プログラム順序における第２の命令の論理的行き先が、第１の命令に割り当てられた論理レジスタの部分を完全に含まない場合は、サイズに基づくＲＡＷ依存性が形成される。従って、この依存性が解決されるまでレジスタを割り当てることができない（２６４）。
【０１１６】
命令の保留中書き込みを伴う論理レジスタのサイズが、それより前の命令によって指定された論理レジスタの部分を包囲する場合には（以下のテーブル２に定められたように、例えば、ＥＡＸレジスタを用いて）、新たなレジスタを割り当てることができる（２６６）。
0003678444.tif 000004
【０１１７】
８．４  ２つの行き先をもつ命令
Ｘ８６命令の大部分は、１つのレジスタ行き先のみを指定する。２つのレジスタ行き先を指定する命令は僅かである（例えば、ＸＣＨＧ  ＡＸ，ＢＸ）。レジスタ変換ユニットのハードウェアを複雑にしないように、各クロックごとに命令に対して１つの行き先しか再ネーミングできない。それ故、２つの行き先を指定する命令は、特殊なケースに使用される。これらの命令は、ＡＣ１パイプ段にある間に、１クロック中、他の命令をレジスタ変換ハードウェアを使用することからストールし、これにより、第２の行き先を再ネーミングできるようにする。
【０１１８】
８．５  推論的分岐実行のためのチェックポイントレジスタ
図１２を参照すれば、マイクロプロセッサは、分岐の方向（条件流れ変更）を予想し、そして分岐が実際に解明される前に、その予想された方向において命令の実行を開始する。分岐が誤った予想であった場合には、マイクロプロセッサはプロセッサの状態を分岐点まで復帰させねばならない。
【０１１９】
レジスタ変換ユニット（図１の２５ａ）は、予想された分岐方向における命令を推論的に実行する前に、レジスタをチェックポイント処理し、即ち現在レジスタ２４４をチェックポイントレジスタ２４８の１つにコピーすることにより、マイクロプロセッサが分岐の境界におけるプロセッサ状態をセーブできるようにする。チェックポイントレジスタ２４８は、回転する順序で書き込まれる。
【０１２０】
好ましい実施例では、浮動小数点演算に対してもレジスタがチェックポイント処理される。
【０１２１】
チェックポイント処理は、マイクロプロセッサがチェックポイントレジスタによって定められた状態へ復帰できるようにするので、各命令ごとに使用することができる。しかしながら、各チェックポイントに対してリソースを設けなければならず、従って、チェックポイント処理の機能と、チェックポイント処理に割り当てるべきハードウェアリソースとの間で妥協をとらねばならない。ここに示す実施例では、４つのチェックポイントレジスタが使用され、いつでも４つまでのチェックポイント処理を行うことができる。
【０１２２】
間違って予想された分岐（又は浮動小数点エラー）からの復帰は、チェックポイント処理された物理レジスタへ戻ることを伴う。分岐がパイプラインのＡＣ段に入るときに、現在レジスタ２４４がチェックポイントレジスタ２４８の１つにコピーされる。予想された方向に命令を実行する間に、新たなレジスタが割り当てられる。新たなレジスタが割り当てられると、現在と表示された物理レジスタが、通常通りに、その現在ビットをクリアする。予想された方向が誤りであった場合は、その分岐に関連したチェックポイントレジスタ２４８が現在レジスタへコピーされ、該現在レジスタは、物理レジスタの状態を、その分岐の直前に存在した状態へ復帰させる。従って、マイクロプロセッサは、誤って予想された分岐又は浮動小数点エラーから単一のクロックサイクルで復帰することができる。
【０１２３】
８．６  例外からの回復
図１２を参照すれば、例外からの回復は、誤って予想された分岐からの回復に類似している。例外が所与の段（ＡＣ１x 、ＡＣ１y 、ＡＣ２x 、ＡＣ２y 、ＥＸx 、ＥＸy ）で生じた場合には、その段に関連した例外レジスタ２５０が現在レジスタにコピーされる。所与の段の例外レジスタは、その段における現在命令に対する割り当て（ＡＣ１段で生じた）の前に存在したときの現在レジスタ２４４のコピーを含んでいるので、関連する例外レジスタ２５０を現在レジスタ２４４にコピーすることは、物理レジスタと論理レジスタとの関連性を、その例外を生じた命令がＡＣ１に入る前に存在した関連性へリセットする。従って、本発明では、たとえ状態を変更する命令が後で例外を生じたとしても、マシンの状態を変更することができる。
【０１２４】
現在レジスタ２４４の回復にどの例外レジスタを使用すべきかを決定するために、レジスタ変換ユニット２５ａはパイプコントロールユニット（図１の２８）からの情報を使用する。例外が生じたときには、パイプコントロールユニットはパイプラインの段をフラッシュする。どの段がフラッシュされたかを指示すると共に、フラッシュ時にどの段が有効であったかを指示するパイプコントロールユニットからの信号を、各段に対するＸＦＩＲＳＴビットと一緒に使用することにより、レジスタ変換ユニットは、フラッシュされた最もシニアな段を決定する。その段に対応する例外レジスタが現在レジスタ２４４へコピーされる。
【０１２５】
８．７  レジスタ変換ユニットのマイクロコントロール
図１を参照すれば、レジスタ変換ユニット２５ａは、通常は、パイプラインハードウェアによって発生された信号により制御される。しかしながら、ある状態においては、マイクロコントローラ２６のマイクロシーケンサにより命令の一部として発生されたマイクロコード信号を介してレジスタ変換ユニット２５ａを制御するのが有用である。例えば、排他的命令は、どの物理レジスタが論理レジスタにマップされるかを決定するためにレジスタ変換ユニットのハードウェアにアクセスすることが必要である。ＰＵＳＨＡ（プッシュ・オール）のような命令は、それらの実行中に８個全部の論理レジスタの論理−物理変換を必要とする。
【０１２６】
排他的命令によりレジスタ変換ユニットへアクセスする必要性を効率的に受け入れるために、制御信号は、図１６に示すように、マイクロコードによって制御されるマルチプレクサを介してレジスタ変換ユニット２５ａへマルチプレクスされる。ハードウェア及びマイクロコードによって（マイクロシーケンサを経て）発生された制御信号は、マルチプレクサ２６０へ入力される。このマルチプレクサ２６０は、これを制御するマイクロコード選択信号の値に基づいて制御信号を通過させる。マイクロコード選択信号は、マイクロコードにより発生される。従って、命令に関連したマイクロコードがレジスタ変換ユニット２５ａを必要とする場合は、マイクロ命令ビットの１つがマルチプレクサ２６０をイネーブルし、パイプラインハードウェアからの信号ではなくて、マイクロコード制御信号を通過させる。マイクロ命令の他のビットは、所望の機能をイネーブルするためのレジスタ変換ユニット２５ａへの制御信号として働く。実行にレジスタ変換ユニットを必要としない命令は、ハードウェアにより発生された制御信号のみを通すようにマルチプレクサをイネーブルする。
【０１２７】
８．８  レジスタＩＤ変換及びハザード検出
論理レジスタの要求に応答して、レジスタ変換ユニット（図１の２５ａ）は、その要求された論理レジスタへとマップされた現在物理レジスタの識別を供給する。又、レジスタ変換ユニットは、各倫理レジスタに対して１つづつ８個のビットを出力し、これは、その関連する論理レジスタに対する現在物理レジスタが書き込み保留中であるかどうかを指示する。これらのビットは、ＲＡＷハザードを検出するのに使用される。
【０１２８】
好ましい実施例において、レジスタ変換ユニットは、各々１つの物理レジスタを表す複数のセルで形成される。図１７は、レジスタＩＤ変換及びハザード検出に関連した１つのセル２７０を概略的に示している。ｔｒａｎｓ ｉｄバスに出された８個の論理レジスタの１つを表す３ビットコードに応答して、その指定の論理レジスタに対する現在物理レジスタを表す５ビットコードがｐｈｙ ｉｄバスに出される。各セル２７０は、ｔｒａｎｓ ｉｄバスからコードを受け取る。ｔｒａｎｓ ｉｄバスの３ビットコードは、そのセルに対応する論理ＩＤレジスタのビットと比較される。好ましい実施例においては、制御レジスタ２４０ないし２５２のビットがセル間で分割され、各セルがそれに関連した物理レジスタに対応する各レジスタ２４０ないし２５２のビットを含むようにする。
【０１２９】
論理ＩＤビットは、比較器２７２により３ビットコードと比較される。３ビットコードが論理ＩＤビットに等しい場合に、一致信号がイネーブルされる。この一致信号と、セルに対する現在ビットがアンドゲート２７４に入力される。従って、セルにより表された物理レジスタが指定の論理レジスタに関連している場合及び物理レジスタが指定の論理レジスタに対する現在レジスタとして表示された場合には、アンドゲート２７４の出力が「１」となる。アンドゲート２７４の出力は、５ビットの３状態バッファ２７６をイネーブルする。アンドゲートの出力が「１」の場合には、バッファは、セルに関連した物理ＩＤをｐｈｙ ｉｄバスへ通す。所与の論理レジスタＩＤに対し、１つの物理レジスタのみが現在レジスタとなり、それ故、１つのセルだけがその３状態バッファをイネーブルする。
【０１３０】
論理ＩＤビットは、３−８デコーダ２７８にも入力される。従って、このデコーダ２７８の８個の出力の１つは、そのセルに対してマップされた論理レジスタに応答してイネーブルされる。デコーダ２７８の各出力は、各アンドゲート２８０（個々にアンドゲート２８０ａ−２８０ｇと示されている）の入力に接続される。各アンドゲート２８０は、そのセルに関連した物理レジスタに対し現在ビット及び保留ビットも受け取る。各アンドゲート２８０の出力は、各論理レジスタに関連した各ハザードバスに接続される。例えば、アンドゲート２８０ａは、ＥＡＸ論理レジスタに関連したハザードＥＡＸバスに接続される。アンドゲート２８０ｇは、ＥＳＰ論理レジスタに関連したハザードＥＳＰバスに接続される。
【０１３１】
所与のセルに対し、そのセルがそのセルにより表された物理レジスタにマップされた論理レジスタを表す場合及び物理レジスタが書き込み保留の現在レジスタと表示された場合に、せいぜい１つのアンドゲート２８０がイネーブルされる。図１８に示すように、ハザードバスは、各セルの出力においてワイヤードオアを実行する。各ハザードバスに対し、関連アンドゲート２８０の１つのみがイネーブルされる。というのは、論理レジスタに関連した１つの現在ビットしかイネーブルされないからである。現在物理レジスタに関連した保留ビットもイネーブルされた場合には、それに対応するアンドゲート２８０がイネーブルされ、ハザードバスは、その論理レジスタに対して書き込み保留中であることを指示する。この情報は、ＲＡＷハザードを検出するのに使用される。
【０１３２】
９．送り
上記したように、ＲＡＷ依存性は、マイクロプロセッサを依存命令においてストールさせる。好ましい実施例においては、「送り（フォワーディング）」を用いて、ある状況でＲＡＷ依存性を排除し、命令のスループットを高める。この送りは、両方が同時にＥＸ段にある２つの命令間のＲＡＷ依存性を排除するように命令を変更する。
【０１３３】
好ましい実施例では２つの形式の送りが使用される。「オペランド送り」は、ある条件のもとで、シニアＭＯＶ（又は同様の）命令のソースを、その命令に対するソースデータとしてジュニア命令に送る。「結果送り」は、ある条件のもとで、シニア命令の結果をその後のＭＯＶ（又は同様の）命令の行き先へ送る。
【０１３４】
次のコードは、オペランド送りを示している。
１）ＭＯＶ  ＡＸ，ＢＸ
２）ＡＤＤ  ＡＸ，ＣＸ
【０１３５】
図１９及び２０を参照すれば、オペランド送りを用いると、ジュニアＡＤＤ命令は、ＢＸ＋ＣＸ→ＡＸへと効果的に変更される。各命令は、残留制御ワードに記憶された残留制御情報に組み合わされ、この残留制御ワードは、他の制御情報（図示せず）の中でも、動作に対するソース（各ソースに対する書き込み保留があるかどうかを指示するフィールドを伴う）及び行き先を含むものである。従って、物理レジスタ「０」が論理レジスタＢＸに割り当てられそして物理レジスタ「１」が論理行き先レジスタＡＸに割り当てられると仮定すれば、ＳＲＣ０（ソース０）フィールドには「０」が記憶され、そしてＭＯＶ命令に関連した残留制御ワードのＤＥＳ０（行き先０）フィールドには「１」が記憶される。同様に、物理レジスタ「２」が論理レジスタＣＸに割り当てられると仮定すれば、送りは、ＡＤＤ命令に関連した残留制御ワードのＳＲＣ０フィールドに「１」を記憶できるようにし（ＭＯＶ命令の行き先レジスタは、ＡＤＤ命令のソースの１つであるから）、ＳＲＣ２フィールドには「２」が記憶され、そしてＤＥＳ０フィールドには「３」が記憶される（レジスタ再ネーミングにより、論理行き先ＡＸレジスタに対してフリーレジスタが見つかるので）。
【０１３６】
明らかなように、ＭＯＶ命令とＡＤＤ命令との間にはＲＡＷ依存性が存在する。というのは、ＭＯＶ命令は、ＡＤＤ命令の実行の前に物理レジスタ「１」に書き込まねばならないからである。しかしながら、オペランド送りを用いると、この依存性を排除することができる。図２０に示すように、オペランド送りは、ＭＯＶコマンドに影響を及ぼさない。しかしながら、ＡＤＤ命令の残留制御ワードは、ＳＲＣ０フィールドがＭＯＶに対する論リソースレジスタＢＸに関連した物理レジスタを指すように変更される。
【０１３７】
同様に、結果送りは、ジュニアＭＯＶ命令の残留制御ワードをシニア命令の結果で変更する。結果送りを説明するために、次のシーケンスを使用する。
１）ＡＤＤ  ＡＸ，ＢＸ
２）ＭＯＶ  ＣＸ，ＡＸ
【０１３８】
図２１及び２２を参照すれば、結果送りは、ＡＤＤ命令の結果として発生されたデータがＣＸレジスタにロードされるようにＭＯＶコマンドを変更する。物理レジスタ「０」は論理ソースレジスタＢＸに割り当てられ、物理レジスタ「１」は論理ソースレジスタＡＸに割り当てられ、物理レジスタ「２」は論理行き先レジスタＡＸに割り当てられ、そして物理レジスタ「３」は論理行き先レジスタＣＸに割り当てられる。従って、２つの命令間にはＲＡＷ依存性が存在する。というのは、ＡＤＤ命令の行き先（物理レジスタ２）は、ＭＯＶ命令のソースだからである。
【０１３９】
結果送りの後に（図２２）、ＡＤＤ命令は不変のままであるが、ＭＯＶ命令に関連した残留制御ワードは、行き先レジスタＣＸ（物理レジスタ３）が、ＡＸが書き込まれるのと同時に、ＡＤＤを実行するＥＸユニットに関連したライトバックバス（図２２にＸ側のライトバックバスとして示された）からそのデータを受け取るように変更される。従って、ＲＡＷ依存性は排除され、ＡＤＤ及びＭＯＶの両命令が同時に実行される。
【０１４０】
送りは、ある条件のもとでしか使用されない。シーケンスにおける命令の１つは、ＭＯＶ命令又は同様の「非作用」命令でなければならない。この非作用命令とは、オペランドデータをある位置から別の位置へ転送するが、そのデータに対して実質的に動作を行わないような命令である。作用命令とは、オペランドデータに応答して新たなデータを発生するか又はオペランドデータを変更するものである。Ｘ８６命令セットにおいては、非作用命令は、ＭＯＶ、ＬＥＡ、ＰＵＳＨ＜ｒｅｇ＞及びＰＯＰ＜ｒｅｇ＞を含む。又、ＯＲ＜ｒｅｇ１＞，＜ｒｅｇ１＞及びＡＮＤ＜ｒｅｇ１＞，＜ｒｅｇ１＞（ソース及び行き先の両レジスタが同じである場合）は、フラグをセットすることにしか使用されないので、「非作用」命令と考えることができる。
【０１４１】
更に、好ましい実施例では、送りは、シーケンスにおける両命令が同じクロックサイクルにそれらの各ＥＸユニットにある場合にのみ使用される。送りは、ＡＣ２段の命令に先行する３つまでの命令を（プログラム順序で）サーチし、送りのケースが生じ得るかどうかを判断する。たとえ送り命令が２命令先行していたとしても、ＡＣ２段の命令がＥＸ段へ移動するに充分な長い時間、送り命令がＥＸ段において遅延する場合には、送りが生じ得る。
【０１４２】
図２３に示すように、命令「１」及び「２」が各々Ｘ及びＹ側のＥＸユニットにあり、そして命令「３」及び「４」がＸ及びＹ側のＡＣ２ユニットにある状況においては、命令「４」が命令「３」及び「１」を見て、オペランド又は結果送り状態が考えられるかどうかを判断する。命令「４」は、まだＡＣ２段にあるから、命令「４」がＹ側のＥＸ段へ発生されるまで命令「１」がＥＸ段において遅延しない限り、命令「１」と共に送ることはできない。同様に、命令「３」で送り状態が考えられる場合には、「３」及び「４」の両方が各ＥＸ段へ発生された場合だけ送りが生じ、これら命令が少なくとも１つのクロックサイクルに対してＥＸ段に同時に存在するようにされる。
【０１４３】
命令「４」は、送り状態に対して命令「２」を見ない。というのは、図示されたアーキテクチャが与えられた場合に、両命令が同時にＥＸユニットに存在することがないからである。命令「４」と「２」との間のＲＡＷ依存性の待ち時間を減少するためにバイパスを用いることができる。ＡＣ２／ＥＸ境界でパイプを切り換えることのできるアーキテクチャのような別のパイプライン構成では、命令「４」と「２」との間で送りを行うことができる。
【０１４４】
図２４は、図２３に関連して述べた初期状態が与えられた場合に命令「３」に関連した送りについて監視される状態を示している。この状態において、送り状態に対して命令「２」のみが監視される。命令「１」は、命令「３」では送ることができない。というのは、これらが同時にＥＸ段に存在することはないからである。命令「３」は命令「４」においてＲＡＷ依存性をもつことはない。というのは、命令「４」は命令「３」のジュニアだからである（が、図２３に示すように、命令「４」は、命令「３」においてＲＡＷ依存性をもつことはある）。
【０１４５】
送り制御回路のブロック図が図２５に示されている。送り制御段の回路には、ＡＣ２段が関連される。送り制御回路３００は、ＡＣ２パイプ段における命令のソースオペランドと、ＥＸ段における命令のソース及び行き先オペランドを監視し、そして残留制御情報を上記したように変更するために、オペランド監視・制御回路３０２を備えている。更に、送り状態の可能性が検出されると、送り制御回路３００の命令移動監視回路３０４が命令の移動を監視して、各ＥＸユニットにおける両命令の存在を検出し、送りを実施する。制御回路３０６は、オペランド監視・制御回路３０２と、命令移動監視回路３０４とを整合する。
【０１４６】
好ましい実施例では、送り回路は、物理レジスタファイル（図１の２４）に見られるレジスタファイルコントロールの一部である。レジスタファイルコントロールも、残留制御ワードを維持する。
【０１４７】
２つの命令パイプラインを用いるプロセッサについて送りを説明したが、いかなる数のパイプラインにも同様に使用することができる。この場合は、送り制御回路は、ＥＸ及びＡＣ２段において各パイプラインのＥＸユニットの命令に関連した残留制御ワードを監視する。
【０１４８】
送り及びレジスタ変換は互いに独立している。所与のマイクロプロセッサにおいて、そのいずれか又は両方の技術を用いて命令スループットを高めることができる。
【０１４９】
１０．結論
特定の段をもつ２つのパイプラインの特定の実施例について本発明を説明したが、特許請求の範囲に規定された本発明は、３つ以上のパイプライン及び異なる段構成に関連して使用できることに注意されたい。
【０１５０】
ここに開示するパイプコントロールユニットは、パイプラインを通る命令の効率的な流れを与え、これにより、命令を処理する速度を高める。従って、高い周波数に依存せずに高い命令スループットを得ることができる。更に、レジスタ変換ユニット及び送り構成は、多数の依存性を排除し、命令をストールする必要性を低減する。
【０１５１】
幾つかの特定の実施例について本発明を詳細に説明したが、当業者であれば、これら実施例の種々の変更や、別の実施例が明らかとなろう。例えば、パイプライン制御のための種々の方法及び回路を互いに独立して使用することに関連して説明したが、これら種々の方法及び回路の１つ又はそれ以上が一般的に有用な結果をもたらす。更に、本発明は、特許請求の範囲に包含されるいかなる変更又は別の実施例も網羅するものとする。
【図面の簡単な説明】
【図１】スーパースカラー、スーパーパイプライン式マイクロプロセッサのブロック図である。
【図２】Ｘ及びＹ実行パイプを含むマイクロプロセッサの７つのパイプライン段を示す図である。
【図３】例示的コンピュータシステムのブロック図である。
【図４】パイプラインユニットを通る命令の流れを示すタイミング図である。
【図５】パイプラインユニットを通る命令の流れを制御するための制御機構を示すブロック図である。
【図６】順序から外れた命令の完了を示す流れ図である。
【図７】パイプ切り換えを用いたパイプラインを通る命令の流れを示す図である。
【図８】パイプ切り換えを用いたパイプラインを通る命令の流れを示す図である。
【図９】パイプ切り換えを用いたパイプラインを通る命令の流れを示す図である。
【図１０】パイプ切り換え方法を説明する流れ図である。
【図１１】レジスタ変換ユニットの機能ブロック図である。
【図１２】レジスタ変換ユニットに使用される制御レジスタを示す図である。
【図１３】レジスタビジーレジスタのビットを発生する回路を示す図である。
【図１４】Ｘ８６アーキテクチャのもとにある可変サイズ拡張レジスタを示す図である。
【図１５】可変サイズの論理レジスタを割り当てるフローチャートである。
【図１６】レジスタ変換ユニットを選択可能に制御する回路を示す図である。
【図１７】変換及びハザード検出を行うレジスタ変換ユニットの部分を示す図である。
【図１８】変換及びハザード検出を行うレジスタ変換ユニットの部分を示す図である。
【図１９】オペランド送りを説明する図である。
【図２０】オペランド送りを説明する図である。
【図２１】結果送りを説明する図である。
【図２２】結果送りを説明する図である。
【図２３】送り状態の検出を示す図である。
【図２４】送り状態の検出を示す図である。
【図２５】送り回路のブロック図である。
【図２６】マルチボックス命令のパイプ制御を示す図である。
【図２７】マルチボックス命令のパイプ制御を示す図である。
【符号の説明】
１０  マイクロプロセッサ
２０  ＣＰＵコア
２１  命令デコーダ
２２  アドレス計算ユニット
２３  実行ユニット
２４  レジスタファイル
２５  ＡＣコントロールユニット
２６  マイクロコントロールユニット
２９  書き込みバッファ
３０  プリフェッチバッファ
３５  プリフェッチャ
４０  分岐処理ユニット（ＢＰＵ）
５０  アドレス変換ユニット（ＡＴＵ）
６０  単一化キャッシュ
６２  タグＲＡＭ
６５  命令ラインキャッシュ
７０  浮動小数点ユニット
【図１】
0003678444.tif 000005
【図２】
0003678444.tif 000006
【図３】
0003678444.tif 000007
【図４】
0003678444.tif 000008
【図５】
0003678444.tif 000009
【図６】
0003678444.tif 000010
【図７】
0003678444.tif 000011
【図８】
0003678444.tif 000012
【図９】
0003678444.tif 000013
【図１０】
0003678444.tif 000014
【図１１】
0003678444.tif 000015
【図１２】
0003678444.tif 000016
【図１３】
0003678444.tif 000017
【図１４】
0003678444.tif 000018
【図１５】
0003678444.tif 000019
【図１６】
0003678444.tif 000020
【図１７】
0003678444.tif 000021
【図１８】
0003678444.tif 000022
【図１９】
0003678444.tif 000023
【図２０】
0003678444.tif 000024
【図２１】
0003678444.tif 000025
【図２２】
0003678444.tif 000026
【図２３】
0003678444.tif 000027
【図２４】
0003678444.tif 000028
【図２５】
0003678444.tif 000029
【図２６】
0003678444.tif 000030
【図２７】
0003678444.tif 000031