(57)【要約】      （修正有）【課題】プロセッサおよびプロセッサにおいて命令演算をスケジューリングするための方法を提供する。【解決手段】プロセッサは、ストアアドレス命令演算に対するロード命令演算についてのオーダリング依存性を採用する。命令キューは、命令および依存性ベクトルを記憶し、依存性ベクトル内に示された各依存性が満たされるまで、命令のスケジューリングを禁止する。【選択図】図２
2006228241.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
命令演算に対応する依存性ベクトルを生成するよう構成された依存性ベクトル生成ユニットと、
前記依存性ベクトルおよび前記命令演算を受けるよう結合された命令キューとを含み、前記命令キューは、前記命令演算および前記依存性ベクトルを記憶するよう構成され、かつ前記依存性ベクトル内に示された各依存性が満たされるまで前記命令演算のスケジューリングを禁止するようさらに構成され、前記依存性ベクトルは、前記命令キュー内の各他の命令演算への依存性を示すことが可能であり、前記依存性が少なくとも１つのオーダリング依存性を含む、プロセッサ。
【請求項２】
前記オーダリング依存性が、前記命令演算がロード命令演算であれば、先行のストアアドレス命令演算の各々に対して検出される、請求項１に記載のプロセッサ。
【請求項３】
前記先行のストアアドレス命令演算の各々に対して検出される前記オーダリング依存性が、前記先行のストアアドレス命令演算の各々が実行されると満たされる、請求項２に記載のプロセッサ。
【請求項４】
前記オーダリング依存性がストア−ロード転送依存性を含む、請求項１に記載のプロセッサ。
【請求項５】
前記ストア−ロード転送依存性が、前記ストア−ロード転送依存性により特定されたストアデータ命令演算が実行されると満たされる、請求項４に記載のプロセッサ。
【請求項６】
前記依存性がさらに、少なくとも１つのオペランド依存性を含む、請求項１に記載のプロセッサ。
【請求項７】
前記オペランド依存性は、前記オペランドが前記命令演算に対して利用可能になると満たされる、請求項６に記載のプロセッサ。
【請求項８】
前記オペランドは、結果として前記オペランドを生成する命令演算が実行されると利用可能になる、請求項７に記載のプロセッサ。
【請求項９】
プロセッサにおいて命令演算をスケジューリングするための方法であって、
各命令演算に対応する依存性ベクトルを生成するステップを含み、前記依存性ベクトルは命令キュー内の各他の命令演算への依存性を示すことが可能であり、前記依存性は１つ以上のオーダリング依存性を含み、前記方法はさらに、
前記命令キュー内に前記依存性ベクトルおよび対応の命令演算を記憶するステップと、
前記依存性ベクトルにより示された前記依存性の各々を満たすステップと、
前記満たすステップに応答して前記対応する命令演算をスケジューリングするステップとを含む、方法。
【請求項１０】
前記満たすステップが、前記オーダリング依存性が検出される先行の命令演算の実行を完了させるステップを含む、請求項９に記載の方法。
【請求項１１】
前記１つ以上のオーダリング依存性が、前記命令演算がロード命令演算であれば、先行のストアアドレス命令演算の各々に対して検出されるオーダリング依存性を含む、請求項９に記載の方法。
【請求項１２】
前記先行のストアアドレス命令演算の各々に対して検出される前記オーダリング依存性が、前記先行のストアアドレス命令演算の各々が実行されると満たされる、請求項１１に記載の方法。
【請求項１３】
前記１つ以上のオーダリング依存性がストア−ロード転送依存性を含む、請求項１２に記載の方法。
【請求項１４】
前記ストア−ロード転送依存性が、前記ストア−ロード転送依存性により特定されたストアデータ命令演算が実行されると満たされる、請求項１３に記載の方法。
【請求項１５】
前記依存性がさらに、少なくとも１つのオペランド依存性を含む、
請求項９に記載の方法。
【請求項１６】
前記オペランド依存性は、前記オペランドが前記命令演算に対して利用可能になると満たされる、請求項１５に記載の方法。
【請求項１７】
前記オペランドは、結果として前記オペランドを生成する命令演算が実行されると利用可能になる、請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
［技術分野］
この発明は、プロセッサの分野に関し、より特定的には、プロセッサにおける命令スケジューリングメカニズムに関する。
【背景技術】
【０００２】
［背景となる技術］
スーパースカラプロセッサは、クロックサイクルごとに多数の命令を発行し実行することおよび設計と矛盾しない可能な最も高いクロック周波数を用いることにより、高性能を達成しようと試みる。クロックサイクルごとに実行される命令の数を増加させるための１つの方法は、アウトオブオーダ実行である。アウトオブオーダ実行においては、プログラムシーケンスの中で特定された順序（または「プログラム順序」）とは異なる順序で命令が実行されてもよい。プログラムシーケンス内で互いに近いある命令は、それらの同時実行を禁じる依存性を有し得るが、プログラムシーケンス内のその後の命令は以前の命令に対する依存性を有しない可能性がある。したがって、アウトオブオーダ実行は、（平均して）同時に実行される命令の数を増加させることによりスーパースカラプロセッサの性能を増し得る。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
残念ながら、アウトオブオーダ実行のためのスケジューリング命令は、プロセッサにハードウェアのさらなる複雑さを与えてしまう。「スケジューリング」という用語は、命令を実行するための順序を選択することを一般的に指す。典型的には、プロセッサは、できる限り迅速に命令をスケジューリングして、（たとえばアウトオブオーダで命令を実行してさまざまな命令タイプの依存性およびハードウェアの利用可能性を扱うことにより）平均命令実行速度を最大化しようと試みる。これらの複雑さが、プロセッサが動作し得るクロック周波数を限定してしまうことがある。特に、命令間の依存性はスケジューリングハードウェアによって尊重されなければならない。一般的に、本明細書中では、「依存性」という用語は、第１の命令と、プログラム順で第１の命令に続く第２の命令であって、そのような第２の命令の実行に先立って第１の命令の実行を必要とするような第２の命令との間の関係を指す。さまざまな依存性が規定され得る。たとえば、第２の命令のソースオペランドが第１の命令のデスティネーションオペランドならば、オペランド依存性が発生する。
【０００４】
一般的に、命令は１つまたはそれ以上のソースオペランドおよび１つまたはそれ以上のデスティネーションオペランドを有してもよい。ソースオペランドは、命令定義に従って処理されて、（デスティネーションオペランドである）１つまたはそれ以上の結果をもたらすべき入力値である。ソースオペランドおよびデスティネーションオペランドは、プロセッサに対して外部のメモリ場所に記憶されたメモリオペランドであってもよく、またはプロセッサ内に含まれるレジスタ記憶場所に記憶されたレジスタオペランドであってもよい。プロセッサによって用いられる命令セットアーキテクチャは、アーキテクチャ上で設計された多数のレジスタを規定する。これらのレジスタは命令セットアーキテクチャによって存在が規定され、命令は、アーキテクチャ上で設計されたレジスタをソースおよびデスティネーションオペランドとして用いるようにコード化され得る。命令は、命令のオペランドフィールドの中のレジスタ番号（またはレジスタアドレス）を介して、特定のレジスタをソースまたはデスティネーションオペランドとして特定する。レジスタ番号は、ア
ーキテクチャ上で設計されたレジスタの間で、選択されたレジスタを一意に識別する。ソースオペランドはソースレジスタ番号によって識別され、デスティネーションオペランドはデスティネーションレジスタ番号によって識別される。
【０００５】
オペランド依存性に加えて、１つまたはそれ以上のタイプのオーダリング依存性がプロセッサによって要求されることがある。オーダリング依存性は、たとえば用いられるハードウェアを単純化するために、または正しいプログラム実行を行なわせるために用いられることがある。強制的にある命令が他の命令に対して順序付けて実行されるようにすることにより、命令のアウトオブオーダ実行の結果を扱うためのハードウェアが省略され得る。たとえば、ロードメモリ演算が、ストアメモリ演算に対してアウトオブオーダで行なわれることが許されるのであれば、ハードウェアは、（アウトオブオーダで行なわれていたかもしれない）その後のロードメモリ演算によってアクセスされた同じメモリ場所を更新する、先立つストアメモリ演算を検出する必要があり得る。一般的に、オーダリング依存性はマイクロアーキテクチャごとに変わり得る。
【０００６】
スケジューリングは、より多数の命令が「飛行中」（すなわちプロセッサ内で処理中）になるに従って、高い周波数で機能するのがますます困難になる。命令間の依存性は、これから完了しなければならないより多数の命令のためにさらに頻繁になり得る。さらに、依存性が満たされたとき（すなわち、第２の命令のスケジューリングを依存性が妨げる必要がない点に第１の命令の進行が進んだとき）に検出が困難になるのと同様、より多数の命令の間の依存性を検出することはさらに困難になり得る。したがって高周波数動作に対して修正可能なスケジューリングメカニズムが所望される。
【０００７】
さらに、マイクロアーキテクチャによって課され得る多種のオーダリング依存性を扱えるスケジューリングメカニズムが所望される。オーダリング依存性は、オペランド依存性に加えて、特定の命令が比較的多数の先行命令に依存するという結果を招く。したがって、多種の依存性を許容できる柔軟なスケジューリングメカニズムが所望される。
【０００８】
上述の問題は、ロード命令演算のための、ストアアドレス命令演算に対するオーダリング依存性を用いるプロセッサにより大部分が解決される。プロセッサは、ストア演算をストアアドレス命令演算およびストアデータ命令演算に分割する。ストアアドレス命令演算は記憶装置のアドレスを生成し、ストアデータ命令演算は対応するデータをロード／ストアユニットに経路指定する。プロセッサは処理中のストアアドレスの各々を示すストアアドレス依存性ベクトルを維持し、かつ各々のロード命令演算について、ストアアドレス命令演算に対するオーダリング依存性を記録する。したがって、各々の先行するストアアドレス命令演算がスケジューリングされてしまうまで、ロード命令演算はスケジューリングされない。効果として、ロード命令演算の実行の際のロードアドレスの依存性チェックに、ストアアドレスが利用可能である。メモリ依存性が存在すれば、ロード命令演算の実行の際にそれが検出され得る。
【課題を解決するための手段】
【０００９】
概して言えば、この発明は、ストアアドレスレジスタおよびそれに結合された依存性ベクトル生成ユニットを含むプロセッサを意図する。ストアアドレスレジスタは、プロセッサ内で処理中のストアアドレス命令演算を識別するストアアドレス依存性ベクトルを記憶するように構成される。依存性ベクトル生成ユニットは、命令演算に対する依存性ベクトルを生成するように構成される。ロード命令演算に対しては、依存性ベクトル生成ユニットは依存性ベクトルの中にストアアドレス依存性ベクトルを含むように構成される。
【００１０】
この発明はプロセッサ内でロード命令演算を行なうための方法をさらに意図する。プロセッサ内で処理中の各々のストアアドレス命令演算を示すストアアドレス依存性ベクトル
が維持される。ロード命令演算に対する依存性ベクトルは、ストアアドレス依存性ベクトルを含んで生成される。依存性ベクトルに示された各々の命令演算が完了するまで、ロード命令演算はスケジューリングを禁じられる。
【００１１】
命令キューおよびその中の、柔軟な依存性記録構造を可能にする依存性ベクトルを用いるプロセッサも開示される。依存性ベクトルは、命令演算をスケジューリングするためのユニバーサルメカニズムを有利に提供し得る、各々の命令キューエントリごとの依存性表示を含む。任意の数の依存性が、互いの命令演算に対する依存性まで、所与の命令演算に対して記録され得る。依存性ベクトルは任意の数の依存性を記録するように構成されるため、所与の命令演算はいかなる他の命令演算に対しても順序付けされ得る。したがって、同時実行または実行中の特定の命令演算の順序に対して、いかなるアーキテクチャ上のまたはマイクロアーキテクチャ上の制限が与えられてもよい。プロセッサの実現の進展の間に、（たとえば実現を単純化する）さらなる実行順序制限を加えることが望ましくなれば、オーダリング依存性を示すことにより依存性ベクトル内にさらなる制限を受入れてもよい。命令キューは、依存性ベクトルを評価しかつ、記録された依存性が満たされた各々の命令演算ごとにスケジューリングを要求する。柔軟性が高められることにより、命令キューの、さまざまなプロセッサの実現に向けた好適性が向上され得る。
【００１２】
したがって、この発明は、依存性ベクトル生成ユニットおよび命令キューを含むプロセッサも意図する。依存性ベクトル生成ユニットは、命令演算に対応する依存性ベクトルを生成するように構成される。依存性ベクトルおよび命令演算を受取るように結合されて、命令キューは、依存性ベクトル内に示された各々の依存性が満たされるまで、命令演算のスケジューリングを禁じるように構成される。依存性ベクトルは、命令キュー内の任意の数の他の命令演算に対する依存性を示すことができる。
【００１３】
この発明は、プロセッサにおいて命令演算をスケジューリングするための方法をさらに意図する。各々の命令演算に対応する依存性ベクトルが生成される。依存性ベクトルは、命令キューの中の他の命令演算に対する任意の数の依存性を示す。依存性ベクトルおよび対応する命令演算は命令キューに記憶される。依存性ベクトルにより示された任意の数の依存性の各々が満たされ、その後（依存性が満たされるのに応答して）対応する命令演算がスケジューリングされる。
【００１４】
この発明の他の目的および利点は、以下の詳細な説明を読むことおよび添付の図面を参照することにより明らかになる。
【００１５】
この発明は、さまざまな修正および代替的な形が可能であり、その特定の実施例が例示の目的のために図面で示されかつ本明細書中に詳細に説明される。しかしながら、その図面および詳細な説明は、この発明を開示された特定の形に制限することを意図するものではなく、一方、その意図は添付の請求項に記載されたこの発明の精神および範囲内のすべての修正、均等物および代替物を扱うことであることを認められたい。
【発明を実施するための最良の形態】
【００１６】
図１を参照すると、プロセッサ１０の１つの実施例のブロック図が示される。他の実施例が可能でありかつ意図される。図１の実施例では、プロセッサ１０は、ライン予測子１２、命令キャッシュ（Ｉ−キャッシュ）１４、整列ユニット１６、分岐履歴テーブル１８、間接アドレスキャッシュ２０、戻りスタック２２、デコードユニット２４、予測子ミスデコードユニット２６、マイクロコードユニット２８、マップユニット３０、マップサイロ３２、アーキテクチャリネームブロック３４、１対の命令キュー３６Ａ−３６Ｂ、１対のレジスタファイル３８Ａ−３８Ｂ、１対の実行コア４０Ａ−４０Ｂ、ロード／ストアユニット４２、データキャッシュ（Ｄ−キャッシュ）４４、外部インターフェイスユニット
４６、ＰＣサイロおよびリダイレクトユニット４８ならびに命令ＴＬＢ（ＩＴＢ）５０を含む。ライン予測子１２は、ＩＴＢ５０、予測子ミスデコードユニット２６、分岐履歴テーブル１８、間接アドレスキャッシュ２０、戻りスタック２２、ＰＣサイロおよびリダイレクトブロック４８、整列ユニット１６ならびにＩ−キャッシュ１４に接続される。Ｉ−キャッシュ１４は整列ユニット１６に接続される。整列ユニット１６は予測子ミスデコードユニット２６およびデコードユニット２４にさらに接続される。デコードユニット２４はマイクロコードユニット２８およびマップユニット３０にさらに接続される。マップユニット３０は、マップサイロ３２、アーキテクチャリネームブロック３４、命令キュー３６Ａ−３６Ｂ、ロード／ストアユニット４２、実行コア４０Ａ−４０ＢならびにＰＣサイロおよびリダイレクトブロック４８に接続される。命令キュー３６Ａ−３６Ｂは、互いならびにそれぞれの実行コア４０Ａ−４０Ｂおよびレジスタファイル３８Ａ−３８Ｂに接続される。レジスタファイル３８Ａ−３８Ｂは、互いおよびそれぞれの実行コア４０Ａ−４０Ｂに接続される。実行コア４０Ａ−４０Ｂは、ロード／ストアユニット４２、データキャッシュ４４ならびにＰＣサイロおよびリダイレクトユニット４８にさらに接続される。ロード／ストアユニット４２は、ＰＣサイロおよびリダイレクトユニット４８、Ｄ−キャッシュ４４ならびに外部インターフェイスユニット４６に接続される。Ｄ−キャッシュ４４はレジスタファイル３８に接続され、外部インターフェイスユニット４６は外部インターフェイス５２に接続される。文字が後に付く参照番号で本明細書中に示された要素は、参照番号のみによってまとめて参照される。たとえば、命令キュー３６Ａ−３６Ｂは命令キュー３６とまとめて参照される。
【００１７】
図１の実施例では、プロセッサ１０は可変バイト長の複合命令セットコンピューティング（ＣＩＳＣ）命令セットアーキテクチャを用いる。たとえば、プロセッサ１０は（ＩＡ−３２とも称される）ｘ８６命令セットアーキテクチャを用いてもよい。他の実施例は、固定長命令セットアーキテクチャおよび縮小命令セットコンピューティング（ＲＩＳＣ）命令セットアーキテクチャを含む他の命令セットアーキテクチャを用いてもよい。図１に示されるある特徴はそのようなアーキテクチャでは省略されてもよい。
【００１８】
ライン予測子１２はＩ−キャッシュ１４のためのフェッチアドレスを生成するように構成され、命令演算のラインに関する情報を整列ユニット１６に与えるようにさらに構成される。一般的に、ライン予測子１２は、プロセッサ１０によって以前に投機的にフェッチされた命令演算のラインおよびラインのフェッチの際に選択されるべき各々のラインに対応する１つまたはそれ以上の次のフェッチアドレスを記憶する。１つの実施例では、ライン予測子１２は、各々が命令演算の１つのラインを規定する、１Ｋのエントリを記憶するように構成される。ライン予測子１２は、所望により、たとえば各々２５６のエントリの４つのバンクにバンク化され、デュアルポート化なしに同時の読出および更新を可能にする。
【００１９】
ライン予測子１２は、次のフェッチアドレスをＩ−キャッシュ１４に与えて、対応する命令バイトをフェッチする。Ｉ−キャッシュ１４は命令バイトを記憶するための高速キャッシュメモリである。１つの実施例に従うと、Ｉ−キャッシュ１４はたとえば、２５６Ｋバイトの、６４バイトのキャッシュラインを用いるフォーウェイセットアソシアティブ編成を含んでもよい。しかしながら、いずれのＩ−キャッシュ構造も好適であり得る。さらに、次のフェッチアドレスは入力としてライン予測子１２に戻されて、命令演算の対応するラインに関する情報をフェッチする。次のフェッチアドレスは、ＰＣサイロおよびリダイレクトユニット４８に報告された例外条件に応答して、ＩＴＢ５０によって与えられたアドレスによってオーバライドされ得る。
【００２０】
ライン予測子によって与えられた次のフェッチアドレスは（ラインが非分岐命令で終了すれば）ライン内の最後の命令に続くアドレスであろう。これに代えて、次のフェッチア
ドレスはラインを終了させる分岐命令のターゲットアドレスであってもよい。さらに別の代替例では、ラインは戻り命令によって終了されてもよく、その場合次のフェッチアドレスは戻りスタック２２から導かれる。
【００２１】
フェッチアドレスに応答して、ライン予測子１２はフェッチアドレスで始まる命令演算のラインに関する情報を整列ユニット１６に与える。整列ユニット１６はフェッチアドレスに対応する命令バイトをＩ−キャッシュ１４から受取り、命令バイトを選択して、与えられた命令演算情報に従って１組の発行位置とする。より特定的には、ライン予測子１２は、ライン命令演算内の各々の命令ごとのシフト量および命令のマッピングを、ラインを含む命令演算の組に与える。命令は複数の命令演算に対応してもよく、したがってその命令に対応するシフト量が多数の発行位置への命令バイトの選択に用いられてもよい。発行位置は、ライン内の各々の可能な命令演算ごとに与えられる。１つの実施例では、命令演算のラインは６つまでの命令に対応する８つまでの命令演算を含み得る。一般的には、本明細書中は、命令演算のラインとはデコードユニット２４に同時に発せられる命令演算群を指す。命令演算のラインは、１つの単位としてマイクロプロセッサ１０のパイプラインを通って命令キュー３６に進む。命令キュー３６に記憶されると、個別の命令演算はどのような順序で実行されてもよい。
【００２２】
デコードユニット２４内の発行位置（および命令キュー３６までのその後のパイプライン段）が、それらのパイプライン段内のハードウェアに対するその、ライン内の命令演算のプログラム順序を規定する。整列ユニット１６によって発行位置に整列された命令演算は、それが命令キュー３６Ａ−３６Ｂ内に記憶されるまで、その発行位置に留まる。したがって、第１の発行位置は、第１の発行位置内の命令演算がプログラム順序の第２の発行位置内に同時にある命令演算に先行すれば、第２の発行位置に先行するものとされてもよい。同様に、第１の発行位置は、第１の発行位置内の命令演算がプログラム順序の第２の発行位置内に同時にある命令演算に続けば、第２の発行位置に続くものとされてもよい。発行位置内の命令演算はまた、ライン内の他の命令演算に先行するものまたは続くものとされてもよい。
【００２３】
本明細書中では、命令演算（またはＲＯＰ）とは実行コア４０Ａ−４０Ｂ内の実行ユニットが単一のエンティティとして実行するように構成される演算である。単純な命令は単一の命令演算に対応し得るが、より複雑な命令は多数の命令演算に対応し得る。より複雑な命令のうちあるものはマイクロコードユニット２８内でマイクロコードルーチンとして実現され得る。さらに、非ＣＩＳＣ命令セットを用いる実施例は各々の命令ごとに単一の命令演算を用い得る（すなわち命令および命令演算はこのような実施例においては同義であろう）。１つの特定の実施例では、ラインは６つまでの命令に対応する８つまでの命令演算を含み得る。さらに、特定の実施例は、分岐命令が検出されれば、６つの命令および／または８つの命令演算よりも少ないところでラインを終了させ得る。所望により、ラインに対する、命令演算に関するさらなる制限が用いられてもよい。
【００２４】
ライン予測子１２によって生成される次のフェッチアドレスは、分岐履歴テーブル１８、間接アドレスキャッシュ２０および戻りスタック２２に経路指定される。分岐履歴テーブル１８は、次のフェッチアドレスによって識別されるラインの終わりとなる条件付分岐命令のために分岐履歴を与える。ライン予測子１２は、分岐履歴テーブル１８によって与えられた予測を用いて、ラインの終わりの条件付分岐命令がテークンいう予測がされるべきか、ノットテークンという予測がされるべきかを判断し得る。１つの実施例では、ライン予測子１２はテークンまたはノットテークンを選択するのに用いられる分岐予測を記憶してもよく、分岐履歴テーブル１８は、ライン予測子の予測を取消して異なる次のフェッチアドレスを選択させ得る、より正確な予測を与えるのに用いられる。間接アドレスキャッシュ２０は頻繁に変化する間接分岐ターゲットアドレスを予測するのに用いられる。ラ
イン予測子１２は、以前に生成された間接ターゲットアドレスを次のフェッチアドレスとして記憶してもよい。間接アドレスキャッシュ２０は、対応するラインが間接分岐命令によって終われば、ライン予測子１２によって与えられた次のフェッチアドレスをオーバライドしてもよい。さらに、命令演算のライン内の最後の命令に続くアドレスは、ラインがサブルーチン呼出命令によって終われば、戻りスタック２２の上にプッシュされてもよい。戻りスタック２２は、戻り命令によって終了されたラインのための潜在的な次のフェッチアドレスとして、その最上部に記憶されたアドレスをライン予測子１２に与える。
【００２５】
次のフェッチアドレスおよび命令演算情報を上述のブロックに与えることに加え、ライン予測子１２は、次のフェッチアドレスおよび命令演算情報をＰＣサイロおよびリダイレクトユニット４８に与えるように構成される。ＰＣサイロおよびリダイレクトユニット４８はフェッチアドレスおよびライン情報を記憶し、命令の順序通りのリタイアだけでなく例外をフェッチする命令をリダイレクトする役割を担う。ＰＣサイロおよびリダイレクトユニット４８はプロセッサ１０内で処理中であり得る命令演算の複数のラインに対応するフェッチアドレスおよび命令演算情報を記憶するための環形バッファを含み得る。命令のラインのリタイアの際、ＰＣサイロおよびリダイレクトユニット４８は、それぞれ条件付分岐および間接分岐の実行に従って分岐履歴テーブル１８および間接アドレスキャッシュ２０を更新するであろう。例外の処理の際に、ＰＣサイロおよびリダイレクトユニット４８は、例外を引起した命令に続くエントリを戻りスタック２２から消去してもよい。さらに、ＰＣサイロおよびリダイレクトユニット４８は例外を引起した命令の表示を、マップユニット３０、命令キュー３６およびロード／ストアユニット４２に与えて、それによりこれらのユニットは例外を引起した命令に続く命令を取消しかつこれに従って投機的状態を回復できる。
【００２６】
１つの実施例では、ＰＣサイロおよびリダイレクトユニット４８は各々の命令演算にシーケンス番号（Ｒ♯）を割当て、プロセッサ１０内で処理中の命令演算の順序を識別する。ＰＣサイロおよびリダイレクトユニット４８は、ラインの各々の可能な命令演算にＲ♯を割当て得る。ラインが命令演算の最大数よりも少ない数しか含まなければ、割当てられたＲ♯のいくつかはそのラインに対しては使用されない。しかしながら、ＰＣサイロおよびリダイレクトユニット４８は命令演算の次のラインに次の組のＲ♯を割当てるように構成され、したがって割当てられたが未使用のＲ♯は、命令演算の対応するラインがリタイアするまで使用されないままである。この態様で、所与のラインに割当てられたＲ♯の一部分がプロセッサ１０内のラインを識別するのに用いられ得る。１つの実施例では、最大で８つのＲＯＰが１つのラインに割当てられてもよい。したがって、各々のライン内の第１のＲＯＰは８の倍数であるＲ♯を割当てられ得る。したがって未使用のＲ♯は自動的にスキップされる。
【００２７】
前述の議論では、次のアドレスを予測しかつ命令演算のラインに対する命令演算情報を与えるライン予測子１２が説明された。この演算は各々のフェッチアドレスがライン予測子１２内にヒットする限り発生する。ライン予測子１２内にミスを検出すると、整列ユニット１６は対応する命令バイトをＩ−キャッシュ１４から予測子ミスデコードユニット２６に与える。予測子ミスデコードユニット２６はミスしたフェッチアドレスによって特定されたオフセットで始まる命令をデコードし、命令演算情報のラインおよび次のフェッチアドレスを生成する。予測ミスデコードユニット２６は、プロセッサ１０が設計対象としたどのような命令演算（たとえば命令演算の最大数、命令の最大数、分岐命令の終了など）のラインに対しどのような制限でも課す。ラインのデコードを完了すると、予測子ミスデコードユニット２６は、記憶のためにライン予測子１２に情報を与える。注意すべきは、予測子ミスデコードユニット２６が、命令がデコードされると同時に命令を発行するように構成され得ることである。これに替えて、予測子ミスデコードユニット２６は命令情報のラインをデコードして、それを記憶のためにライン予測子１２に与えてもよい。その
後、ミスを生じたフェッチアドレスがライン予測子１２で再試行され、ヒットが検出され得る。さらに、ライン予測子１２のヒットが検出され、Ｉ−キャッシュ１４でミスが起こり得る。対応する命令バイトは外部インターフェイスユニット４６を介してフェッチされかつＩ−キャッシュ１４に記憶され得る。
【００２８】
１つの実施例では、ライン予測子１２およびＩ−キャッシュ１４は物理アドレス指定を用いる。しかしながら、例外を検出すると、ＰＣサイロおよびリダイレクトユニット４８は論理（または仮想）アドレスを与えられる。したがって、リダイレクトアドレスはライン予測子１２への表示のためにＩＴＢ５０によって変換される。さらに、ＰＣサイロおよびリダイレクトユニット４８は相対分岐ターゲットアドレスなどのＰＣ相対計算に用いるために仮想ルックアヘッドＰＣを維持する。各々のラインに対応する仮想ルックアヘッドＰＣはＩＴＢ５０によって変換され、対応する物理アドレスがライン予測子１２によってもたらされる物理フェッチアドレスと一致するかを検証する。不一致が発生すれば、ライン予測子１２は正しい物理アドレスで更新され、正しい命令がフェッチされる。ＰＣサイロおよびリダイレクトユニット４８は、保護バウンダリなどを超えるフェッチに関する例外をさらに扱う。ＰＣサイロおよびリダイレクトユニット４８は、最も最近リタイアされたもののアドレスを示すリタイアＰＣ値も維持する。
【００２９】
デコードユニット２４は、上述のように複数の発行位置の中の整列ユニット１６から命令演算を受取るように構成される。デコードユニット２４は、（命令バイトに対応するどの命令演算が特定の発行位置で生成されるべきかの表示とともに）各々の発行位置と整列された命令バイトを並列にデコードする。デコードユニット２４は各々の命令演算ごとにソースおよびデスティネーションオペランドを識別して、実行コア４０Ａ−４０Ｂによって用いられる命令演算コード化を生成する。デコードユニット２４は、マイクロコードで実現される命令のためにマイクロコードユニット２８からマイクロコードルーチンをフェッチするようにも構成される。
【００３０】
１つの特定の実施例に従うと、以下の命令演算がプロセッサ１０によってサポートされる。すなわち、整数、（マルチメディアを含む）浮動小数点加算、（マルチメディアを含む）浮動小数点乗算、分岐、ロード、ストアアドレス生成およびストアデータである。各々の命令演算は２つまでのソースレジスタオペランドおよび１つのデスティネーションレジスタオペランドを用い得る。１つの特定の実施例に従うと、単一のデスティネーションレジスタオペランドは整数結果とコンディションコード（またはフラグ）更新の両者を記憶する整数ＲＯＰに割当てられ得る。対応する論理レジスタは両者とも整数演算のリタイアの際、対応するＰＲ♯を受取る。ある命令は同じタイプの２つの命令演算を生成して、２つのデスティネーションレジスタを更新し得る（たとえば、ＥＳＰおよび特定のデスティネーションレジスタを更新するＰＯＰなど）。
【００３１】
デコードされた命令演算ならびにソースおよびデスティネーションレジスタ番号がマップユニット３０に与えられる。マップユニット３０は、各々の命令演算の各々のデスティネーションレジスタオペランドおよびソースレジスタオペランドに物理レジスタ番号（ＰＲ♯）を割当てることにより、レジスタのリネームを行なうように構成される。物理レジスタ番号はレジスタファイル３８Ａ−３８Ｂ内のレジスタを識別する。さらに、マップユニット３０は各々の命令演算にキュー番号（ＩＱ♯）を割当てて、命令演算を記憶するように割当てられた命令キュー３６Ａ−３６Ｂ内の場所を識別する。マップユニット３０は、命令演算のソースオペランドに割当てられた各々の物理レジスタ番号を更新する命令のキュー番号を与えることにより、各々の命令演算ごとの依存性の表示をさらに与える。マップユニット３０は、物理レジスタ番号および（対応する論理レジスタ番号だけでなく）各々の命令演算に割当てられた番号への命令で、マップサイロ３２を更新する。さらに、マップサイロ３２は、命令のラインに先行する論理レジスタに対応するルックアヘッド状
態およびＰＣサイロに対して命令のラインを識別するＲ♯を記憶するように構成され得る。上述のＰＣサイロと同様に、マップサイロ３２はエントリの環形バッファを含み得る。各々のエントリは命令演算の１つのラインに対応する情報を記憶するように構成され得る。
【００３２】
マップユニット３０およびマップサイロ３２は、ＰＣサイロ４８からリタイア表示を受取るようにさらに構成される。命令演算のラインをリタイアする際、マップサイロ３２は、ラインに割当てられかつ論理レジスタ番号に対応するデスティネーション物理レジスタ番号を、記憶のためにアーキテクチャ的リネームブロック３４に伝える。アーキテクチャ的リネームブロック３４が各々の論理レジスタに対応する物理レジスタ番号を記憶し、各々の論理レジスタに対して確定されたレジスタ状態を表わす。対応する論理レジスタの、新たな物理レジスタ番号での更新の際、アーキテクチャ的リネームブロック３４から外された物理レジスタ番号は、その後の命令への割当てのため、物理レジスタ番号のフリーリストに戻される。１つの実施例では、物理レジスタ番号をフリーリストに戻すのに先だって、物理レジスタ番号はアーキテクチャ的リネームブロック３４内の残余の物理レジスタ番号と比較される。物理レジスタ番号が、外された後にもアーキテクチャ的リネームブロック３４内で依然として示されていれば、物理レジスタ番号はフリーリストに加えられない。そのような実施例は、同じ物理レジスタ番号が命令の２つ以上の結果を記憶するのに使われる場合に用いられ得る。たとえば、ｘ８６命令セットアーキテクチャを用いる実施例は、浮動小数点オペランドを記憶するのに十分大きな物理レジスタを提供し得る。この態様では、いかなるタイプのオペランドを記憶するのにいかなる物理レジスタが用いられてもよい。しかしながら、整数オペランドおよびコンディションコードオペランドは所与の物理レジスタ内の空間を十分に利用していない。そのような実施例では、プロセッサ１０は、命令の整数結果とコンディションコード結果の両者を記憶する単一の物理レジスタを割当ててもよい。その後の物理レジスタに対応するコンディションコード結果を上書きする命令のリタイアは同じ整数レジスタを更新せず、したがって物理レジスタは、新たなコンディションコード結果を確定してもフリーとはされない。同様に、その後の物理レジスタに対応する整数レジスタを更新する命令のリタイアはコンディションコードレジスタを更新せず、したがって物理レジスタは新たな整数結果を確定してもフリーとはされない。
【００３３】
さらに、マップユニット３０およびマップサイロ３２はＰＣサイロ４８から例外表示を受取るよう構成される。例外を起こした命令演算を含むラインに続く命令演算のラインはマップサイロ３２中で無効とマークされる。続く命令演算のラインに対応する物理レジスタ番号は対応するリタイア用のラインを選択する際に解放される（アーキテクチャのリネームブロック３４は無効化されたデスティネーションレジスタによって更新されない）。加えて、マップユニット３０によって維持されるルックアヘッドレジスタ状態は例外を起こした命令に対応するルックアヘッドレジスタ状態に復元される。
【００３４】
命令演算のライン、ソース物理レジスタ番号、ソースキュー番号、およびデスティネーション物理レジスタ番号は、マップユニット３０によって割当てられるキュー数に従って命令キュー３６Ａ−３６Ｂに記憶される。実施例の１つに従うと、命令キュー３６Ａ−３６Ｂは対称であり、あらゆる命令を記憶できる。さらに、いずれかの命令キューに記憶される他の命令演算に関して特定の命令演算に対する依存性が起こり得る。たとえばマップユニット３０は命令演算のラインを命令キュー３６Ａ−３６Ｂの一方に記憶し、続く命令演算のラインを命令キュー３６Ａ−３６Ｂの他方に記憶してもよい。少なくとも命令演算がスケジューリングされるまで、命令演算は命令キュー３６Ａ−３６Ｂに残る。実施例の１つにおいて、命令演算はリタイアされるまで命令キュー３６Ａ−３６Ｂに残る。
【００３５】
命令キュー３６Ａ−３６Ｂは、実行のための特定の命令演算をスケジューリングする際
に、その特定の命令演算がどのクロックサイクルでレジスタファイル３８Ａ−３８Ｂを更新するかを定める。実行コア４０Ａ−４０Ｂ内の異なる実行ユニットは異なる数のパイプライン段（すなわち異なる待ち時間）を用いてもよい。さらに、特定の命令はパイプライン中で他のものより長い待ち時間を経験してもよい。したがって（いくつかのクロックサイクル中の）特定の命令演算に対する待ち時間を測定するカウントダウンが生成される。命令キュー３６Ａ−３６Ｂは（レジスタファイルを読取る依存性命令演算に先立ち、またはそれと同時に更新が起こるまで）特定された数のクロックサイクルを待って、その特定の命令演算に依存する命令演算がスケジューリングされ得ることを示す。たとえば特定的な実施例の１つにおいては、依存性命令演算はそれらが依存する命令演算が完了しレジスタファイル３８Ａ−３８Ｂを更新するのに２クロックサイクル先立ってスケジューリングされてもよい。別の実施例においては、依存性命令演算をそれらが依存する命令演算が完了しレジスタファイル３８Ａ−３８Ｂを更新するのに先行または後続する種々の数のクロックサイクルにおいてスケジューリングしてもよい。各命令キュー３６Ａ−３６Ｂはその命令キュー内での命令演算のためのカウントダウンを維持し、カウントダウンの終了の際に内部で依存性命令演算がスケジューリングされるようにする。加えて、命令キューはカウントダウンが終了した際に他の命令キューに表示を与える。続いて別の命令キューが依存性命令演算をスケジューリングしてもよい。この、他の命令キューに対する命令演算完了の遅延した伝達によって、レジスタファイル３８Ａ−３８Ｂは実行コア４０Ａ−４０Ｂの１つによって与えられる結果を他のレジスタファイルに伝搬できる。各レジスタファイル３８Ａ−３８Ｂはプロセッサ１０によって用いられる１組の物理レジスタを実現し、実行コア４０Ａ−４０Ｂの１つによって更新される。次いでその更新が他のレジスタファイルに伝搬される。なお、命令キュー３６Ａ−３６Ｂはその依存性が満たされたときに（すなわちキュー内での順序に関してアウトオブオーダーで）命令をスケジューリングしてもよい。
【００３６】
命令キュー３６Ａからスケジューリングされた命令演算はレジスタファイル３８Ａからのソース物理レジスタ番号に従ってソースオペランドを読取り、実行のために実行コア４０Ａに運ばれる。実行コア４０Ａは命令演算を実行し、レジスタファイル３８Ａ内のデスティネーションに割当てられた物理レジスタを更新する。いくつかの命令演算はデスティネーションレジスタを有さず、この場合に実行コア４０Ａはデスティネーション物理レジスタを更新しない。加えて、実行コア４０Ａは命令演算のＲ♯および命令演算に関する例外情報（あれば）をＰＣサイロおよびリダイレクトユニット４８に伝達する。命令キュー３６Ｂ、レジスタファイル３８Ｂおよび実行コア４０Ｂは類似の態様で動作してもよい。
【００３７】
実施例の１つにおいて、実行コア４０Ａおよび実行コア４０Ｂは対称である。各実行コア４０はたとえば浮動小数点加算ユニット、浮動小数点乗算ユニット、２つの整数ユニット、分岐ユニット、ロードアドレス生成ユニット、ストアアドレス生成ユニット、およびストアデータユニットなどを含んでもよい。それ以外の構成の実行ユニットも可能である。
【００３８】
デスティネーションレジスタを有さない命令演算には、ストアアドレス生成、ストアデータ演算、および分岐演算などがある。ストアアドレス／ストアデータ演算はロード／ストアユニット４２に結果を与える。ロード／ストアユニット４２はメモリデータ演算を行なうためのインターフェイスをＤ−キャッシュ４４に与える。実行コア４０Ａ−４０Ｂは命令のアドレスオペランドに基づいてロードＲＯＰおよびストアアドレスＲＯＰを実行し、それぞれロードおよびストアアドレスを生成する。より特定的には、ロードアドレスおよびストアアドレスは実行コア４０Ａ−４０Ｂによる生成の際にＤ−キャッシュ４４に（実行コア４０Ａ−４０ＢとＤ−キャッシュ４４との接続を介して直接的に）提供されてもよい。Ｄ−キャッシュ４４でロードアドレスがヒットすると、データはＤ−キャッシュ４４からレジスタファイル３８に与えられる。他方で、ヒットしたストアアドレスはストア
キューエントリを割当てられる。続いて、ストアデータが（ストアデータをレジスタファイル３８Ａ−３８Ｂからロード／ストアユニット４２に経路付けるために用いられる）ストアデータ命令演算によって与えられる。ストア命令がリタイアされる際に、データはＤ−キャッシュ４４に記憶される。加えてロード／ストアユニット４２は、（外部インターフェイス４６を介した）Ｄ−キャッシュ４４をミスしたロード／ストアアドレスを、続いてキャッシュに格納するために記憶し、ミスしたロード／ストア演算を再び試みるためのロード／ストアバッファを含んでもよい。ロード／ストアユニット４２はさらにロード／ストアメモリ依存性を取扱うために構成される。
【００３９】
図２に、命令キュー３６Ａの実施例の１つを例示するブロック図を示す。命令キュー３６Ｂも同様に構成されてもよい。その他の実施例も可能であり、予期される。図２の実施例において、命令キュー３６Ａは依存性ベクトルキュー６０Ａ、キュー制御ユニット６２Ａ、オペコード／定数記憶装置６４Ａ、およびピック論理６６Ａを含む。依存性ベクトルキュー６０Ａはマップユニット３０からの依存性ベクトルバス６８、キュー制御ユニット６２Ａ、ピック論理６６Ａ、および命令キュー３６Ｂに接続される。キュー制御ユニット６２Ａはマップユニット３０からのテールポインタ制御バス７０と、マップユニット３０からのＩＱ♯バス７２Ａと、オペコード／定数記憶装置６４Ａとに接続される。オペコード／定数記憶装置６４Ａはピック論理６６Ａと、マップユニット３０からのソース／デスティネーションＰＲ♯バス７２Ｂと、マップユニット３０からのオペコード／Ｒ♯／即値フィールドバス７４と、ＰＣサイロ４８とに接続される。オペコード／定数記憶装置６４Ａはさらにバス７６に接続され、このバスを介して、選択されたオペコード、即値データ、ＰＲ♯、Ｒ♯およびＩＱ♯をレジスタファイル３８Ａおよび実行コア４０Ａに運び得る。ピック論理６６ＡはストアアドレスＩＱ♯バス７８Ａに接続される。
【００４０】
一般的に、ＲＯＰにはマップユニット３０によってそのＲＯＰに割当てられたＩＱ♯に対応して、依存性ベクトルキュー６０Ａおよびオペコード／定数記憶装置６４Ａ内のエントリが割当てられる。言換えると、ＩＱ♯が依存性ベクトルキュー６０Ａおよびオペコード／定数記憶装置６４Ａ内のエントリを識別し、その中にＲＯＰに対応する情報が記憶される。割当てられたＩＱ♯はＩＱ♯バス７２Ａを通じて命令キュー３６Ａに与えられる。キュー制御ユニット６２Ａが割当てられたＩＱ♯を受取り、対応する書込イネーブル信号をアサートすることによって、依存性ベクトルキュー６０Ａおよびオペコード／定数記憶装置６４Ａは割当てられたエントリに受取った情報を記憶できる。
【００４１】
依存性ベクトルキュー６０Ａは命令キュー３６Ａ内に表わされた各ＲＯＰに対応する依存性ベクトルを記憶する。一般的に、「依存性ベクトル」は対応するＲＯＰに対して示される各依存性を記録する。その依存性はオペランド依存性でも、オーダリング依存性でもよい。依存性ベクトルの実施例の１つを以下に例示するが、他の実施例は異なる依存性ベクトルを用いてもよい。ＲＯＰは、対応する依存性ベクトルに記録された各依存性が満たされるまでスケジューリングされる資格がない。各依存性が満たされると、エントリに対応するスケジューリング要求ラインのスケジューリング要求信号が依存性ベクトルキュー６０Ａによってピック論理６６Ａにアサートされ、ピック論理は命令キュー３６Ａ内のＲＯＰを実行のためにスケジューリングする。命令キュー３６Ａによって受取られたＲＯＰのラインに対応する依存性ベクトルは依存性ベクトルバス６８を通じて依存性ベクトルキュー６０Ａに運ばれる。
【００４２】
オペコード／定数記憶装置６４ＡはＲＯＰをスケジューリングするために用いられる依存性情報以外の命令情報を記憶する。たとえば、ＲＯＰによって特定されるオペコードおよびあらゆる即値データがオペコード／定数記憶装置６４Ａに記憶される。加えて、ＰＣサイロ４８によってＲＯＰに割当てられたＲ♯もオペコード／定数記憶装置６４Ａに記憶される。ＲＯＰのラインに対応するオペコード、即値データおよびＲ♯は、マップユニッ
ト３０からオペコード／Ｒ♯／即値フィールドバス７４を介して受取られる。さらに、マップユニット３０によってＲＯＰに割当てられたソースおよびデスティネーションＰＲ♯がオペコード／定数記憶装置６４Ａに記憶される。ＲＯＰのラインに対応するソースおよびデスティネーションＰＲ♯は、マップユニット３０からソース／デスティネーションＰＲ♯バス７２Ｂを介して受取られる。オペコード／定数記憶装置６４Ａはたとえばランダムアクセスメモリ（ＲＡＭ）を含んでもよい。代替的に、その他のさまざまな記憶装置（たとえば１組のレジスタまたはその他のクロックされる記憶デバイスなど）を用いてもよい。
【００４３】
ピック論理６６Ａは実行のためにスケジューリングされたＲＯＰのＩＱ♯をオペコード／定数記憶装置６４Ａに送る。オペコード／定数記憶装置６４Ａは選択されたＩＱ♯によって特定化されたエントリを読取り、対応するＲＯＰのオペコード、即値データ、ＰＲ♯、Ｒ♯、およびＩＱ♯をバス７６を通じて実行コア４０Ａおよびレジスタファイル３８Ａに与える。レジスタファイル３８ＡはソースＰＲ♯を受取ってソースオペランドを読取る。実行コア４０Ａは残りの情報を受取ってＲＯＰを実行する。ピック論理６６Ａは、実行コア４０Ａ内の各実行ユニットに対するクロックサイクル当り１つまでの命令演算をスケジューリングするよう構成される。
【００４４】
実施例の１つにおいて、マップユニット３０は所与のＲＯＰが実行される実行コア４０Ａ内の実行ユニットを割当てる。ある種のＲＯＰは実行ユニットの１つによってのみ実行されるかもしれず、よってその実行ユニットに割当てられる。他のＲＯＰは複数の実行ユニットによって実行されるかもしれず、それらは複数の実行ユニットの間になるべく平等に分割されてもよい。たとえば実施例の１つにおいて、実行コア４０Ａには２つの整数実行ユニットが含まれる。マップユニット３０はＲＯＰのライン内の整数ＲＯＰを２つの整数実行ユニットに順番に割当ててもよい。ピック論理６６ＡはＲＯＰの依存性が満たされると各ＲＯＰを割当てられた実行ユニットにスケジューリングする。特定的な実施例の１つにおいて、ピック論理６６Ａは依存性ベクトルキュー６０Ａおよびオペコード／定数記憶装置６４Ａによって受取られたＲＯＰのラインとともに、ＲＯＰのラインに対して割当てられた実行ユニットを受取る。代替的には、割当てられた実行ユニットは依存性ベクトルキュー６０Ａまたはオペコード／定数記憶装置６４Ａに記憶されて、スケジューリングに用いるためにピック論理６６Ａに運ばれてもよい。
【００４５】
ピック論理６６Ａは前述のカウントダウン回路を付加的に含むことによって、命令キュー３６Ａ−３６Ｂ内の依存性ＲＯＰに関してスケジューリングされたＲＯＰが満たされたと考えられるクロックサイクルを定めてもよい。この実施例において、依存性はその依存性が見出されたＲＯＰの完了のいくらか前に満たされる。特に、命令キュー３６Ａ−３６ＢからのＲＯＰのスケジューリングとＲＯＰ読取レジスタファイル３６Ａ−３６Ｂとの間には１つまたはそれ以上のパイプライン段が存在してもよい（たとえば１つの特定の実施例においては２段）。他の実施例はより多い段、または無段（すなわちレジスタファイル３６Ａ−３６Ｂの更新の際にカウントダウンが終了する）を含むより少ない段を有してもよい。カウントダウンの終了の際に、完了するＲＯＰに割当てられた命令キュー３６Ａ内のエントリに対応するピック論理６６Ａによって、書込有効ラインの書込有効信号がアサートされる。書込有効信号は対応するキューエントリが別のＲＯＰに配置されるまでアサートされたままである。書込有効信号は対応する依存性が満たされたことを認識するために依存性ベクトルキュー６０Ａによって用いられる。言い換えると、完了されたＲＯＰに対して記録された依存性を有する各ＲＯＰは、その依存性が満たされたと認識し得る。その他の記録された依存性の各々が満たされると、依存性キュー６０ＡはそのＲＯＰに対応するスケジューリング要求ラインのスケジューリング要求信号をアサートすることによってピック論理６６Ａにスケジューリングを要求してもよい。
【００４６】
各クロックサイクルにおいて、依存性ベクトルキュー６０Ａ内の各エントリは記憶された依存性ベクトルを評価することによってその依存性が満たされたかどうかを定める。記録された依存性が満たされると、対応するスケジューリング要求ラインの対応するスケジューリング要求信号がアサートされる。ここで、依存性ベクトルを「評価する」とは、どのＲＯＰが完了したかを示す書込有効信号とともに依存性ベクトル中に記録された依存性を調べて、どの依存性ベクトル記録が充足された依存性のみを記録しているかを判断することを示す。満たされた依存性のみを記録している依存性ベクトルに対応するＲＯＰは実行のために好適であり、ピック論理６６Ａにスケジューリング要求信号をアサートする。
【００４７】
この実施例において、ＲＯＰは最大２つのソースオペランドを有してもよく、したがって対応する依存性ベクトル内に示された最大２つのソースオペランド依存性を有してもよい。さらに、いくつかのオーダリング依存性はこの実施例においてロードＲＯＰに対して定められる。第１に、ロードＲＯＰは前のストアアドレスＲＯＰの各々に順序依存する。この依存性はロード／ストアユニット４２によって用いられる依存性検査論理を簡略化するために課せられる。ロードＲＯＰの実行の際に前のストアのアドレスが入手不可能であるとき、（ストアのアドレスをロードのアドレスと比較することによって定められる）前のストアの１つに対する依存性を検出するための論理はより遅い時間における依存性をともかくも認識でき、かつ依存性を正確に取扱えることが必要である。他方で、各先行ストアアドレスＲＯＰに対するオーダリング依存性を強制することによって、ロードＲＯＰの実行の際にストアアドレスが入手可能となり、依存性検査を完了し得る。付加的には、後述のストア／ロード転送機構を介して特定のストアに対する依存性が予測されるとき、ロードＲＯＰはより早いストアデータＲＯＰに対するオーダリング依存性を経験してもよい。所望により他のタイプのオーダリング依存性を用いてもよい。たとえば、ある種の命令は同期命令である（すなわち、同期命令に先行する各命令は同期命令が実行される前に完了し、同期命令に後続する各命令は同期命令が実行される前には実行されない）。同期命令は各先行ＲＯＰに対する同期命令に係するオーダリング依存性を定め、および各後続ＲＯＰに対する同期命令に係するオーダリング依存性を定めることより達成されるであろう。
【００４８】
ロードＲＯＰに対するストアアドレスＲＯＰオーダリング依存性を記録するために、マップユニット３０はストアアドレス依存性ベクトル（後述）を維持する。ストアアドレス依存性ベクトルは後続のロードＲＯＰに対する依存性ベクトルに含むために処理中のストアアドレスＲＯＰの各々を記録する。したがって、ストアアドレスＲＯＰが無事完了したことを定める際に、ピック論理６６ＡはストアアドレスＲＯＰのＩＱ♯をストアアドレスＩＱ♯バス７８Ａを通じてマップユニット３０に送る。
【００４９】
図２において例示されるとおり、この実施例の依存性ベクトルキュー６０Ａは命令キュー３６Ｂ（およびより特定的には後述の図４に例示される類似の依存性ベクトルキュー）に接続される。依存性ベクトルキュー６０Ａはピック論理６６Ａによって与えられる書込有効ラインを命令キュー３６Ｂ内の対応する依存性ベクトルキューに経路付け、命令キュー３６Ｂに記憶されるＲＯＰに対応する書込有効ラインを受取る。論理的には、命令キュー３６Ａ−３６Ｂは命令キュー３６Ａ内のエントリと命令キュー３６Ｂ内のエントリとの合計に等しい数のエントリを有する単一の命令キューとして表わされてもよい。ＩＱ♯の半分は命令キュー３６Ａ内のエントリを識別し、ＩＱ♯の他方の半分は命令キュー３６Ｂ内のエントリを識別する。たとえば、ＩＱ♯の最上位ビットは、エントリを命令キュー３６Ａまたは命令キュー３６Ｂ内にあるものとして識別してもよい。
【００５０】
依存性は、命令キュー３６Ａ−３６Ｂの一方におけるＲＯＰと、他方の命令キュー内のＲＯＰとの間に存在してもよい。したがって、依存性ベクトルはどちらの命令キューからのＲＯＰに対応する依存性を記録してもよい。いずれの命令キューに対応する書込有効ラ
インも、記憶される依存性ベクトルの評価に用いるために各依存性ベクトルキューに経路付けられる。
【００５１】
キュー制御ユニット６２Ａはテールポインタ制御バス７０を通じてマップユニット３０と通信する。一般的にキュー制御ユニット６２Ａは、命令キュー３６Ａ内の最初の有効命令（プログラムオーダで）と命令キュー３６Ａ内の最後の有効命令（プログラムオーダで）とをそれぞれ示すヘッドおよびテールポインタを維持するよう構成される。キュー制御ユニット６２Ａは現在のテールポインタをテールポインタ制御バス７０を通じてマップユニット３０に運ぶ。マップユニット３０が命令キュー３６Ａ内のキューエントリを割当てると、マップユニット３０はテールポインタ制御バス７０を介して、割当てられたキューエントリの数を戻すことによってキュー制御ユニット３６Ａがテールポインタを更新できるようにする。ＲＯＰのラインに対するテールポインタとヘッドポインタとの間の空間が不十分であるとき、キュー制御ユニット３６Ａはキュー空きなし信号をさらに送ってもよい。なおこの実施例において、命令キュー３６Ａに記憶される前にＲＯＰにはＩＱ♯、パイプライン段の数が割当てられてもよい。したがって、割当てられたＩＱ♯はＲＯＰとともに命令キュー３６Ａにパイプライン化されてもよい。マップユニット３０内にＩＱ♯を割当ててテールポインタを更新する際に、マップユニット３０および命令キュー３６Ａはパイプライン中にＲＯＰに対するキューエントリを実際上予約する。
【００５２】
ＰＣサイロ４８は、例外を経験するＲＯＰのＲ♯を、後続の命令を取消すためにプロセッサ１０内のさまざまなパイプライン段に対して与えるよう構成される。したがって、オペコード／定数記憶装置６４ＡはＰＣサイロ４８から例外Ｒ♯を受取ってもよい。オペコード／定数記憶装置６４Ａは、例外Ｒ♯をそこに記憶されたＲ♯と比較する。オペコード／定数記憶装置６４Ａは、どのエントリがＲ♯をストアしているかをキュー制御ユニット６２Ａに対して示し、対応するＲＯＰが例外を経験するＲＯＰに後続することを示してもよい。そしてそれら示されたエントリは無効化され、テールポインタはキューから示されるエントリを削除するためにリセットされてもよい。
【００５３】
図３に、依存性ベクトル８０の実施例の１つのブロック図を示す。その他の実施例も可能であり、予期される。図３に示されるとおり、依存性ベクトル８０は各ＩＱ♯（命令キュー３６Ａ−３６Ｂ内のエントリの総数がＮのとき、０からＮ−１）に対応する表示を含む。特定的な実施例の１つにおいて、Ｎは１２８であろうが、あらゆる好適な数を用いてもよい。各ＩＱ♯に対応する表示は、対応するＩＱ♯が割当てられたＲＯＰに対して、依存性ベクトル８０に対応するＲＯＰについての依存性が存在するかどうかを記録する。したがって依存性ベクトル８０は対応するＲＯＰに対して任意の数の依存性（その他の処理中のＲＯＰの各々に対する依存性まで）を記録できる。特定の実施例の１つにおいては、各表示はセットされているときには対応するＩＱ♯が割当てられたＲＯＰに対する依存性を表示し、クリアされているときには対応するＩＱ♯が割当てられたＲＯＰに対する依存性がないことを表示するビットを含む。
【００５４】
依存性ベクトル８０はＲＯＰをスケジューリングするためのユニバーサルな機構を提供するという効果がある。依存性ベクトル８０は依存性の任意の数を記録するよう構成されるため、所与のＲＯＰをその他のあらゆるＲＯＰに関して順序付けできる。したがって、同時実行または実行における特定のＲＯＰの順序に対するあらゆるアーキテクチャ上またはマイクロアーキテクチャ上の制限を課すことができる。プロセッサ実装の開発中に、（たとえば実装を簡略化するために）付加的な実行順序制限を加えることが望ましいとき、その付加的な制限は依存性ベクトル８０内でのオーダリング依存性を示すことによって可能となる。柔軟性が増すことにより、さまざまなプロセッサ実装に対する命令キュー３６Ａ−３６Ｂの好適性を改善できる。
【００５５】
図４に、依存性ベクトルキュー６０Ａおよび命令キュー３６Ｂからの依存性ベクトルキュー６０Ｂの実施例の１つを例示するブロック図を示す。その他の実施例も可能であり、予期される。図４の実施例において、依存性ベクトルキュー６０Ａは第１の記憶装置９０Ａおよび第２の記憶装置９０ＢならびにＰＨ２ラッチ９２ＡおよびＰＨ１ラッチ９４Ａを含む。同様に、依存性ベクトルキュー６０Ｂは第１の記憶装置９０Ｃおよび第２の記憶装置９０ＤならびにＰＨ２ラッチ９２ＢおよびＰＨ１ラッチ９４Ｂを含む。第１の記憶装置９０ＡはＰＨ２ラッチ９２Ａに接続され、さらに第２の記憶装置９０Ｂに接続される。一方、第２の記憶装置９０ＢはＰＨ１ラッチ９４Ａに接続され、それはピック論理６６Ａ（図２に示す）に接続される。同様に、第２の記憶装置９０ＤはＰＨ１ラッチ９４Ｂに接続され、さらに第１の記憶装置９０Ｃに接続される。一方、第１の記憶装置９０ＣはＰＨ２ラッチ９２Ｂに接続される。
【００５６】
より特定的には、ＰＨ１ラッチ９４Ａは１組のスケジューリング要求ライン９６Ａと１組の書込有効ライン９８Ａとに接続される。スケジューリング要求ライン９６Ａは第２の記憶装置９０ＢからＰＨ１ラッチ９４Ａを通って伝搬され、一方で書込有効ライン９８ＡはＰＨ１ラッチ９４Ａを通じて第２の記憶装置９０Ｂおよび第２の記憶装置９０Ｄに伝搬される。１組の中間スケジューリング要求ライン１００ＡはＰＨ２ラッチ９２Ａを通じて第１の記憶装置９０Ａから第２の記憶装置９０Ｂに伝搬される。１組のスケジューリング要求ライン９６Ｂおよび１組の書込有効ライン９８ＢはＰＨ２ラッチ９２Ｂを通じてそれぞれピック論理６６Ｂおよび第１の記憶装置９０Ｃに同様に伝搬される。書込有効ライン９８Ｂは第１の記憶装置９０Ａに同様に伝搬される。中間スケジューリング要求ライン１００Ｂ上の１組の中間スケジューリング要求信号は第２の記憶装置９０Ｄによって生成され、ＰＨ１ラッチ９４Ｂを通じて第１の記憶装置９０Ｃに伝搬される。各ＰＨ２ラッチ９２Ａ−９２ＢはＰＨ２クロック入力を受取り、一方各ＰＨ１ラッチ９４Ａ−９４ＢはＰＨ１クロック入力を受取る。依存性ベクトルキュー６０Ａおよび６０Ｂはローテータ１０２に接続され、これはさらにマップユニット３０からの依存性ベクトルバス６８（たとえば、発行位置０に対する依存性ベクトルを与える依存性ベクトルバス６８Ａ、発行位置１に対する依存性ベクトルを与える依存性ベクトルバス６８Ｂなど）に接続される。ローテータ１０２はキュー制御ユニット６２からの入力を受取るマルチプレクサ（ｍｕｘ）１０４からローテート制御を受取るように接続される。さらに、依存性ベクトルキュー６０Ａはキュー制御ユニット６２Ａから１組の書込イネーブル１０６を受取り、依存性ベクトルキュー６０Ｂは同様にキュー制御ユニット６２Ｂから１組の書込イネーブル１０８を受取る。
【００５７】
図４に示すような依存性ベクトルキュー６０Ａおよび６０Ｂは、命令キュー３６Ａ−３６Ｂが動作し得るクロック周波数を高め得るいくつかの特徴を用いる。サポートされ得る命令キューエントリの数（たとえば１つの実施例においては１２８）が比較的多いため、依存性ベクトルの評価はいくつかの部分に分割されて連続的なクロックフェーズの間に行なわれる。依存性ベクトルの第１の部分は第１のフェーズにおいて評価され、たとえば依存性ベクトルキュー６０Ａの中間スケジューリング要求ライン１００Ａに対して中間スケジューリング要求信号を生成する。継続するクロックフェーズにおいて、依存性ベクトルの第２の部分が（中間スケジューリング要求信号に沿って）評価され、ピック論理６６Ａに対するスケジューリング要求信号を生成する。たとえば実施例の１つにおいて、中間スケジューリング要求ラインおよびスケジューリング要求ラインはワイヤでＯＲされたラインであり、これは（依存性を示さない）高い状態にプリチャージされ、依存性ベクトルの対応する部分内の１つ以上の依存性が満たされないままであればディスチャージされる。したがって、評価を部分ごとに行なうことによってワイヤＯＲライン上のロードは減少し、よってワイヤＯＲラインのディスチャージは依存性に応答してより迅速に進行し得る。全体のクロック周波数が増加し得るという効果がある。動作の周波数を改善し得る別の特徴は、単一の論理命令キューを複数の命令キュー３６Ａ−３６Ｂに分割することである。
ピック論理は実際には単一の論理命令キュー中の命令の一部分のみを考慮するため、各キューに対するピック論理はより複雑でなくなり、したがってより迅速に動作して命令をスケジューリングし得る。さらに命令キューは異なるクロックフェーズの間に命令をスケジューリングできるため、反対側の命令キューにおいてＲＯＰへの依存性が満足されたことを（完全なクロックサイクルに対して）１／２クロックサイクル中で命令キューに伝搬できる。伝搬のこの１／２クロックサイクルは、データを反対側のレジスタファイルからスケジューリング命令キューに対応するレジスタファイルに移動させるためにも用い得る。
【００５８】
ここで、クロック信号の「フェーズ」とはクロック信号の期間の一部分を表わす。各フェーズはそのフェーズに対応するクロック信号の上昇および下降によって区切られる。一般的に、クロックを受ける記憶デバイス（ラッチ、レジスタ、フリップフロップなど）はフェーズの１つの終結時に値をキャプチャする。加えてこのフェーズは典型的には重ならない。図４の実施例において、クロック期間は２つのフェーズ（ＰＨ１およびＰＨ２）に分割され、その各々はクロック信号によって表わされる。ＰＨ１ラッチ９４Ａ−９４ＢはＰＨ１フェーズの終わりにおける値をキャプチャし、一方ＰＨ２ラッチ９２Ａ−９２ＢはＰＨ２フェーズの終わりにおける値をキャプチャする。
【００５９】
一般的に、第１の記憶装置９０Ａは命令キュー３６Ａ内のＲＯＰに対応する各依存性ベクトルに対して、ＩＱ♯Ｎ−１からＮ／２に対応する依存性ベクトルの部分を記憶する。同様に、第１の記憶装置９０Ｃは命令キュー３６Ｂ内のＲＯＰに対応する各依存性ベクトルに対して、ＩＱ♯Ｎ−１からＮ／２に対応する依存性ベクトルの部分を記憶する。第２の記憶装置９０Ｂは命令キュー３６Ａ内のＲＯＰに対応する各依存性ベクトルに対して、ＩＱ♯Ｎ／２−１から０に対応する依存性ベクトルの部分を記憶する。したがって、第１の記憶装置９０Ａおよび第１の記憶装置９０Ｃは命令キュー３６Ｂのエントリに対応する各依存性ベクトルの部分を記憶し、一方第２の記憶装置９０Ｂおよび第２の記憶装置９０Ｃは命令キュー３６Ａのエントリに対応する各依存性ベクトルの部分を記憶する。
【００６０】
図４に示す依存性ベクトルキュー６０Ａの動作について説明する。ＰＨ２フェーズにおいて、第１の記憶装置９０Ａはそこに記憶された各依存性ベクトルの部分（「第１の部分」）を評価し、中間スケジューリング要求ライン１００Ａの中間スケジューリング要求信号を生成する。依存性ベクトルキュー６０Ａ内の各エントリに対して中間スケジューリング要求ラインが含まれる。中間スケジューリング要求信号は、対応する依存性ベクトルの第１の部分に記録された各依存性が満たされるときにはアサートされ、第１の部分に記録された少なくとも１つの依存性が満たされないときにはデアサートされる。実施例の１つにおいては前述のとおり、中間スケジューリング要求ライン１００ＡはワイヤによりＯＲされている。中間スケジューリング要求ラインは（第１の記憶装置９０Ａに対するＰＨ１フェーズにおいて）アサート状態にプリチャージされ、１つ以上の依存性が満たされないままであるときには（第１の記憶装置９０Ａに対するＰＨ２フェーズにおいて）デアサート状態にディスチャージされる。ＰＨ２ラッチ９２Ａは中間スケジューリング要求ライン１００Ａの１組の中間スケジューリング要求信号をキャプチャし、ＰＨ１フェーズにおいてそれらを第２の記憶装置９０Ｂに伝搬する。
【００６１】
第１の記憶装置９０Ａと同様の第２の記憶装置９０Ｂは、依存性ベクトルの第２の部分を評価し、スケジューリング要求ライン９６Ａ上に１組のスケジューリング要求信号を生成する。各依存性ベクトルの第２の部分における依存性を評価してスケジューリング要求信号の組を生成するのに加えて、対応する中間スケジューリング要求信号が評価に含まれる。対応する中間スケジューリング要求信号がアサートされ、かつ依存性ベクトルの第２の部分に記録される依存性の各々が満たされた場合、スケジューリング要求信号がアサートされる。対応する中間スケジューリング要求信号がデアサートされるか、または依存性ベクトルの第２の部分に記憶された１つ以上の依存性が満たされなければ、スケジューリ
ング要求信号はデアサートされる。ＰＨ１ラッチ９４Ａは、スケジューリング要求信号をキャプチャし、スケジューリング要求信号をピック論理６６Ａに伝搬する。
【００６２】
ピック論理６６Ａは、書込有効信号をＰＨ１ラッチ９４Ａに与える。書込有効信号は、命令キュー３６Ａ内の各キューエントリごとに与えられ、対応するＲＯＰへの依存性が満たされたことを示す。言い換えれば、アサートされた書込有効信号は、対応するＲＯＰへの依存性が満たされたことの表示である。したがって、ピック論理６６Ａからの書込有効信号は、第２の記憶装置９０Ｂおよび第２の記憶装置９０Ｄに伝搬する。同様に、ピック論理６６Ｂからの書込有効信号は、第１の記憶装置９０Ａおよび第１の記憶装置９０Ｃに経路付けされる。
【００６３】
依存性ベクトルキュー６０Ｂは、依存性ベクトルキュー６０Ａと同様の態様で依存性ベクトルを評価する。しかしながら、第２の記憶装置９０Ｄは、依存性ベクトルの第２の部分を評価して、ＰＨ１フェーズ中に中間スケジューリング要求信号を発生し、その後に依存性ベクトルの第１の部分の第１の記憶装置９０Ｃ内での評価と中間スケジューリング要求信号が続き、ＰＨ２フェーズ中にスケジューリング要求信号を発生する。
【００６４】
依存性ベクトルキュー３６Ａ〜３６Ｂを形成するトランジスタの数を低減するために、各エントリに１つの書込ラインを設けることが望ましいであろう（すなわちデータをエントリに転送するのにラインは１つ）。一般的には、マップユニット３０によって与えられる第１のＲＯＰ（発行位置０、依存性ベクトルバス６８Ａ上に対応する依存性ベクトルを備える）は、割当て時に、キューのテールポインタに基づいていずれかのキューエントリに割当て可能である。その後のＲＯＰは、（最大数８より少なくてもよい）最終ＲＯＰが与えられるまで、次の連続するキューエントリに割当てられる。したがって、ローテータ１０２が設けられる。ローテータの各出力は、１組のキューエントリに接続され、そこで組内の各エントリは、発行位置の数に等しいエントリの数分だけ組内の近傍のエントリから間隔をあけられている。たとえば、８個の発行位置を採用するこの実施例では、第１の出力は、エントリ０、８、１６などに接続可能である。第２の出力は、エントリ１、９、１７などに接続可能である。依存性ベクトルが、割当てられたキューエントリへの書込入力ライン上に与えられるために、ローテータ１０２は、発行位置０に割当てられたＩＱ♯の下位ビットに従って依存性ベクトルバス６８に与えられた依存性ベクトルをローテートする。８個の発行位置を採用するこの実施例では、下位３ビットがローテーションの量を与える。たとえば、ＩＱ♯０、８または１６が発行位置０に割当てられた場合、０位置のローテーションが行なわれ、発行位置０に対応する依存性ベクトルがローテータの第１の出力に与えられる。他方で、ＩＱ♯１、９または１７が与えられた場合、１発行位置のローテーションが行なわれ、発行位置０に対応する依存性ベクトルがローテータの第２の出力に与えられる。第２の出力はエントリ１、９、１７などに接続されるので、発行位置０に対応する依存性ベクトルは、割当てられたキューエントリに接続される書込ライン上に与えられる。残りの依存性ベクトルは、対応して、割当てられたキューエントリに接続される書込ライン上に与えられる。
【００６５】
ローテータ１０２は、命令キュー３６Ａ〜３６Ｂのどちらが現在のクロックサイクル中にＲＯＰを受取るかに依存して、キュー制御ユニット６２の１つからローテーションの量を受取るよう接続される。Ｍｕｘ１０４は、交互に、命令キュー３６Ａ内のキュー制御ユニット８２Ａと、命令キュー３６Ｂ内のキュー制御ユニット８２Ｂとから入力されるローテーションの量（発行位置０においてＲＯＰに割当てられたＩＱ♯に対応する）を選択する。加えて、キュー制御ユニット８２Ａまたは８２Ｂは（どの命令キューがＲＯＰを受取っているかに依存して）、割当てられたＩＱ♯に対応する書込イネーブル信号をアサートし、割当てられたキューエントリが与えられた依存性ベクトルを記憶するようにする。
【００６６】
次に図５を参照して、依存性ベクトルキュー６０Ａ内の依存性ベクトルキューエントリ（エントリナンバーＭ）のある実施例の一部を例示する回路図が示される。他の実施例が可能であり企図される。図示の部分は、エントリＭに記憶される依存性ベクトル内の１つの依存性表示（たとえば、ＩＱ♯Ｎへの依存性の表示）に対応する。
【００６７】
ＩＱ♯Ｎについての依存性表示は、ローテータ１０２から書込ライン１１０上に与えられる。書込イネーブルライン１１２上の書込イネーブル信号がキュー制御ユニット６２Ａによってアサートされた場合、依存性表示は、交差結合されたインバータ１１４Ａ〜１１４Ｂによって表わされる記憶セルに記憶される。書込ライン１１０で受取られた依存性表示は実際の依存性表示の逆であるので、ノード１１６上の論理ハイが、ＩＱ♯ＮのＲＯＰについて依存性が存在することを示す。
【００６８】
スケジューリング要求ライン９６ＡＡ（図４に例示されるスケジューリング要求ライン９６Ａの１つ）が同様に図５に示される。プリチャージトランジスタ（図示せず）が、ワイヤＯＲライン９６ＡＡをアサートされた状態にプリチャージする。ディスチャージトランジスタ１１８は、スケジューリング要求ライン９６ＡＡと接地との間に接続される。ディスチャージトランジスタ１１８に接続されるゲート１２０の出力が論理１である場合、ディスチャージトランジスタ１１８は、スケジューリング要求ライン９６ＡＡをディスチャージし、ＩＱ♯Ｍに記憶されるＲＯＰはスケジューリングされない。他方で、ゲート１２０の出力が論理０である場合、ディスチャージトランジスタ１１８は、スケジューリング要求ライン９６ＡＡをディスチャージしない。依存性ベクトル内の他の依存性表示に対応する他の同様のディスチャージトランジスタがスケジューリング要求ライン９６ＡＡをディスチャージしなければ、ＩＱ♯Ａに記憶されるＲＯＰはスケジューリング可能である。
【００６９】
ゲート１２０は、図５に示すようにＮＯＲゲートである。したがって、依存性がインバータ１１４Ａ〜１１４Ｂによって表わされる記憶セル内に示されなければ、記憶セルからゲート１２０への入力は論理１であり、ゲート１２０の出力は論理０であり、ディスチャージトランジスタ１１８が、デアサートされた状態にスケジューリング要求ライン９６ＡＡをディスチャージすることを防ぐ。このように、所与のＩＱ♯への依存性の欠如が、ＩＱ♯ＮにおけるＲＯＰが完了しているかどうかにかかわらず、ＩＱ♯ＭにおけるＲＯＰのスケジューリングを妨げることはない。他方で、依存性が記憶セル内に示されるならば、記憶セルからの入力は論理ゼロであり、ゲート１２０の出力は、書込有効ライン９８ＡＡ（図４に示す書込有効ライン９８Ａの１つ）がローにアサートされるまで、論理１になる。図５の実施例では、依存性は、書込有効ラインの論理ローによって満たされたものと示される。書込有効ラインが一旦アサートされると、ゲート１２０の出力は論理０に切換わり、ディスチャージトランジスタ１１８は活性化されない。
【００７０】
次に図６を参照して、第２の記憶装置９０Ｄから、第１の記憶装置９０Ｃ内の対応するスケジューリング要求ライン９６ＢＡ（図４に示すスケジューリング要求ライン９６Ｂの１つ）への、中間スケジューリング要求ライン１００ＢＡ（図４に示す中間スケジューリング要求ライン１００Ｂの１つ）上の中間スケジューリング要求信号の伝搬のある実施例を例示する回路図が示される。他の実施例が可能であり企図される。
【００７１】
図６の実施例では、中間スケジューリング要求ライン１００ＢＡ上の中間スケジューリング要求信号は、交差結合されたインバータ１２２Ａ〜１２２Ｂによって表わされる記憶セル内にキャプチャされる。中間スケジューリング要求信号の反転された信号は、ＰＨ１フェーズに従って、パストランジスタ１２６を介してトランジスタ１２４に送られる。ＰＨ１フェーズの終わりには、中間スケジューリング要求信号の反転が、トランジスタ１２４のゲートに存在し、トランジスタ１２６によって記憶セルから分離される。ＰＨ２フェ
ーズの最初に、トランジスタ１２８は活性化される。トランジスタ１２４のゲートが論理１である（すなわち、中間要求信号がＰＨ１フェーズの終わりにキャプチャされる際デアサートされた）場合、スケジューリング要求ライン９６ＢＡは、トランジスタ１２４および１２８を介してデアサートされた状態にディスチャージされる。他方で、トランジスタ１２４のゲートが論理０である（すなわち、中間要求ラインがＰＨ１フェーズの終わりにキャプチャされる際アサートされた）場合、スケジューリング要求ライン９６ＢＡは、トランジスタ１２４および１２８を介してディスチャージされない。スケジューリング要求ライン９６ＢＡは、依存性ベクトルの第１の部分の評価に従ってデアサートされてもよく、またはエントリＰのＲＯＰがスケジューリング可能であることを示すようアサートされたままであってもよい。
【００７２】
なお、インバータ１２２Ａ〜１２２Ｂとトランジスタ１２４、１２６および１２８とは、ＰＨ１ラッチ９４Ｂの一部を含み得る。さらになお、上述の記載は、アサートおよびデアサートされた信号について言及している。信号は、論理１状態のときにはアサートされ、論理０状態のときにはデアサートされるとに定義可能であるし、都合によって逆もまた可能である。たとえば、図５および図６では、スケジューリング要求ラインは、論理１状態でアサートされ、一方で書込有効ラインは、論理０状態でアサートされる。他の実施例は、所望に応じて、いかなる信号の意味をも逆にすることが可能である。
【００７３】
次に図７を参照して、マップユニット３０およびストア／ロード転送検出ユニット１４８のある実施例のブロック図が示される。他の実施例が可能であり企図される。図７の実施例では、マップユニット３０は、レジスタスキャンユニット１３０と、ＩＱ♯／ＰＲ♯制御ユニット１３２と、仮想／物理的レジスタマップユニット１３６と、依存性ベクトル生成ユニット１３４と、ストアアドレスレジスタ１３８とを含む。レジスタスキャンユニット１３０は、バス１４０によりデコードユニット２４からソースおよびデスティネーションレジスタ番号（および各々の有効表示）を受取るよう接続される。レジスタスキャンユニット１３０は、デスティネーションレジスタ番号およびソース仮想レジスタ番号を仮想／物理的レジスタマップユニット１３６に送るよう構成される。ＩＱ♯／ＰＲ♯制御ユニット１３２は、デスティネーションレジスタ番号および、デスティネーションレジスタ番号に対応する有効表示を受取るようバス１４２に接続される。命令キュー３６Ａ〜３６Ｂは、テールポインタをテールポインタバス７０Ａで与え（テールポインタ制御バス７０の一部が図２に示される）、各キュー内のどのエントリが現在キューのテールであるかを示す。ＩＱ♯／ＰＲ♯制御ユニット１３２はさらに、ＲＯＰ割当バス７０Ｂに接続される（テールポインタ制御バス７０の一部が図２に示される）。加えて、ＩＱ♯／ＰＲ♯制御ユニット１３２は、デスティネーションＰＲ♯／ＩＱ♯バス１４４に接続される。仮想／物理的レジスタマップユニット１３６は、マップサイロ３２に接続され、ライン内の各ＲＯＰについてのソースＰＲ♯、ソースＩＱ♯、デスティネーションＰＲ♯およびＩＱ♯を、ソース／デスティネーションＰＲ♯およびＩＱ♯バス７２により命令キュー３６Ａ〜３６Ｂに与える。フリーリスト制御ユニット（図示せず）は、ネクストフリーＰＲ♯バス１４６を介してＩＱ♯／ＰＲ♯制御ユニット１３２に接続される。依存性ベクトル生成ユニット１３４は、仮想／物理的レジスタマップユニット１３６に接続され、ソース／デスティネーションＩＱ♯を受取り、さらにストアドレスレジスタ１３８およびストア／ロード転送検出ユニット１４８に接続される。依存性ベクトル生成ユニット１３４は、ＲＯＰのライン内のＲＯＰタイプの表示をＲＯＰタイプバス１５０により受取るよう接続され、かつストアドレスＩＱ♯バス７８（命令キュー３６ＡからのストアアドレスＩＱ♯バス７８Ａを含む）に接続される。なおさらに、依存性ベクトル生成ユニット１３４は、依存性ベクトルバス６８に接続される。ストア／ロード転送検出ユニット１４８は、ＰＣサイロ４８からロードヒットストアデータバス１５２に、ＩＱ♯／ＰＲ♯制御ユニット１３２からストアデータＩＱ♯バス１５４に、デコードユニット２４からＲＯＰタイプおよびＰＣバス１５６に接続される。
【００７４】
一般的には、依存性ベクトル生成ユニット１３４は、命令キュー３６Ａ〜３６Ｂ（すなわち、ライン内の各発行位置）にディスパッチされる各ＲＯＰごとの依存性ベクトルを生成するよう構成され、かつ依存性ベクトルバス６８により命令キュー３６Ａ〜３６Ｂにその依存性ベクトルを運ぶよう構成される。依存性ベクトル生成ユニット１３４は、デコードユニット２４から、ライン内の各ＲＯＰごとのＲＯＰタイプの表示を受取る。いかなるＲＯＰタイプであっても、依存性ベクトル生成ユニット１３４は、各ソースオペランドについて依存性ベクトル内のオペランド依存性を記録するよう構成される。依存性ベクトル生成ユニット１３４は、仮想／物理的レジスタマップユニット１３６から各ソースオペランドに対応するＩＱ＃を受取り、ソースＩＱ＃をデコードして、依存性ベクトル内の対応す依存性表示をセットする。
【００７５】
上述のとおり、依存性ベクトルは、任意の数の依存性が特定のＲＯＰについて示されることを可能にするフレキシブルな依存性メカニズムである。たとえば、この実施例では、ロードＲＯＰは、先のストアアドレスＲＯＰにオーダリング依存するよう定義される。したがって、依存性ベクトル生成ユニット１３４は、ストアアドレスレジスタ１３８にストアアドレス依存性ベクトルを維持する。ストアアドレス依存性ベクトルは、各処理中のストアアドレスＲＯＰの表示を記録する（すなわち、この実施例ではＩＱ♯による）。依存性ベクトル生成ユニット１３４は、（デコードユニット２４から受取られるＲＯＰタイプによって特定される）ライン内の各ストアアドレスＲＯＰに割当てられるＩＱ＃の表示でストアアドレス依存性ベクトルを更新する。デスティネーションＩＱ＃は、仮想／物理的レジスタマップユニット１３６から受取られる。各ストアアドレスＲＯＰは、対応するＩＱ＃がストアアドレスＩＱ♯バス７８により命令キュー３６Ａ〜３６Ｂによって与えられるまで処理中である（依存性ベクトル生成ユニット１３４は、ストアアドレス依存性ベクトルを更新して、対応するＩＱ♯を削除する）。
【００７６】
ＲＯＰタイプバス１５０に示される各ロードＲＯＰについて、依存性ベクトル生成ユニット１３４は、そのロードＲＯＰについて生成された依存性ベクトルにストアアドレス依存性ベクトルを含む。より特定的には、ある実施例では、依存性ベクトルは各ＩＱ♯ごとに１ビットを含む。ビットがセットされた場合、依存性は対応するＩＱ♯に割当てられたＲＯＰに記録される。そのような実施例では、ストアアドレス依存性ベクトルは、ソースオペランドに対応する依存性ベクトルとのＯＲをとることが可能である。ストアアドレスレジスタ１３８に記憶されたストアアドレス依存性ベクトルに加えて、依存性ベクトル生成ユニット１３４は、ＲＯＰのライン内のある特定のロードＲＯＰに対するストアアドレスＲＯＰであって、かつライン内でその特定のロードＲＯＰより前のストアアドレスＲＯＰを検出可能である。依存性は、その特定のロードＲＯＰについても、ストアアドレスＲＯＰが検出されると依存性ベクトル内に記録される。
【００７７】
ストア／ロード転送検出ユニット１４８が特定のロードＲＯＰがロードヒットストアデータ状況を経るべきであると予測した場合、特定のロードＲＯＰは、ストアデータＲＯＰに依存するものとしてさらに記録され得る。上述したように、ロードＲＯＰは、先行のストアアドレスＲＯＰにオーダリング依存する。このオーダリングを実施することにより、同じメモリ場所にアクセスする先行のストアＲＯＰとロードＲＯＰとの間の依存性が決定可能である。先行のストアデータＲＯＰにロードＲＯＰのオーダリングが（一般的には）ないので、ロード／ストアユニット４２による依存性の検出は、即座に、ストアデータの転送につながらないことがある（すなわち、ストアデータＲＯＰがまだ実行していなければ、データはまだ利用可能でない）。ストアデータがまだ転送不可能であれば、ロードＲＯＰは取消され、その後のクロックサイクルでリスケジューリングされる。残念ながら、取消されたロードＲＯＰに依存するＲＯＰも取消されてしまう。簡素化のために、命令キュー３６Ａ〜３６Ｂは、取消されたロードＲＯＰの後にスケジューリングされたすべての
ＲＯＰを取消することがある。ストアデータＲＯＰについてロードＲＯＰを不当に遅延させることなしにＲＯＰの取消を回避するために、ストア／ロード転送検出ユニット１４８を用いて、ロードヒットストアデータ（利用不可能のストアデータを備える）状況を予測し、必要であれば、予測に応答して依存性を記録する。ロードヒットストアデータ状況が予測された場合、ストアデータＲＯＰのＩＱ♯は、ストア／ロード転送検出ユニット１４８によって依存性ベクトル生成ユニット１３４に与えられる。依存性ベクトル生成ユニット１３４は、対応するロードＲＯＰの依存性ベクトルにストアデータＲＯＰへのオーダリング依存性を記録する。
【００７８】
ストア／ロード転送検出ユニット１４８は、この実施例では１対のテーブルを維持し得る。第１のテーブルはロードＰＣアドレスによってインデックス付けされ、ロードヒットストアデータ状況が先に検出されたストアデータＰＣアドレスを記憶する。第２のテーブルは、ストアデータＰＣアドレスによってインデックス付けされ、ストアデータＲＯＰに割当てられたＩＱ♯を記録する。したがって、ストア／ロード転送検出ユニット１４８は、（デコードユニット２４からのバス１５６に示される）マップユニット３０によってマッピングされた各ロードＲＯＰのＰＣで第１のテーブルを指定する。指定されたエントリがロードヒットストアデータ状況が予測されることを示す場合、指定されたエントリに記憶されたストアＰＣアドレスを用いて第２のテーブルを指定する。指定されたエントリの第２のテーブル中のＩＱ♯は、ストア／ロード転送検出ユニット１４８によって依存性ベクトル生成ユニット１３４に運ばれ、対応するロードＲＯＰの依存性ベクトルに含められる。
【００７９】
ロードＲＯＰの実行中にロードヒットストアデータ状況を検出すると、ロード／ストアユニット４２は、依存性が検出されるロードＲＯＰのＲ♯およびストアデータＲＯＰのＲ♯をＰＣサイロ４８に報告する。ＰＣサイロ４８は、ロードヒットストアデータバス１５２によりロードＲＯＰおよびストアデータＲＯＰの対応する物理的ＰＣアドレスを与える。ストア／ロード転送検出ユニット１４８は、ロードヒットストアデータ状況が検出されたストアデータＲＯＰのストアデータＰＣアドレスで、ロードＰＣアドレスによって指定されたエントリの第１のテーブルを更新する（かつ、ロードヒットストアデータ状況が検出されたという表示をセットする）。ある実施例では、第１のテーブルは２Ｋバイトであり、各エントリが６ビットのストアＰＣアドレスおよび対応するロードヒットストアデータ表示を記憶するツーウェイセットアソシアティブのテーブルである。
【００８０】
ストア／ロード転送検出ユニット１４８は、バス１５４でＩＱ♯／ＰＲ♯制御ユニット１３２からディスパッチされるストアデータＲＯＰのＰＣアドレスおよびＩＱ＃を受取り、対応するストアデータＰＣアドレスによって指定される第２のテーブルのエントリにＩＱ♯を記録する。
【００８１】
図７の実施例では、マップユニット３０は、２段のパイプライン設計を用いてレジスタリネーミングを行なう。他の実施例は、所望により、単一のパイプライン段または付加的な段でレジスタリネーミングを行なうことが可能である。第１の段では、レジスタスキャンユニット１３０は、仮想レジスタ数を各ソースレジスタに割当てる。並列して、ＩＱ♯／ＰＲ♯制御ユニット１３２は、（命令キュー３６Ａ〜３６Ｂによって与えられるテールポインタに基づく）ＩＱ♯を各ＲＯＰに、ＲＰ♯を、デスティネーションレジスタを有するＲＯＰに割当てる。第２の段では、仮想／物理的レジスタマップユニット１３６は、（現在のルックアヘッド状態および割当てられたＰＲ♯に基づいて）物理的レジスタ数に仮想レジスタ数をマッピングし、対応するＲＯＰの発行位置にＩＱ♯／ＰＲ♯制御ユニット１３２によって割当てられた物理的レジスタ数を経路付けする。
【００８２】
レジスタスキャンユニット１３０によって割当てられた仮想レジスタ番号は、物理的レ
ジスタ番号のソースを特定する。たとえば、この実施例では、ソースレジスタに対応する物理的レジスタ番号は、（マップユニット３０によって先に処理されたＲＯＰのラインに対応する更新を反映し、かつ仮想／物理的レジスタマップユニット１３６によって維持される）ルックアヘッドレジスタ状態から、または（先行のＲＯＰのデスティネーションオペランドがソースオペランドと同じ、すなわちライン内依存性が存在する場合）ＲＯＰのライン内の先行の発行位置から引出すことが可能である。言い換えれば、ソースレジスタ数に対応する物理的レジスタ番号は、ライン内依存性が検出されなければ、ルックアヘッドレジスタ状態内の物理的レジスタ番号である。レジスタスキャンユニット１３０は、有効に、ライン内依存性チェックを行なう。他の実施例は、所望のごとく、ソースオペランドの他のソースを見込んでもよい。
【００８３】
ＩＱ♯／ＰＲ♯制御ユニット１３２は、命令キュー３６Ａ〜３６Ｂの１つのテールポインタで始まる命令キュー数を割当てる。言い換えれば、ライン内の第１のＲＯＰは、選択された命令キューのテールポインタをＩＱ♯として受取り、他のＲＯＰは、テールポインタから増大する順序でＩＱ♯を受取る。制御ユニット１３２は、ライン内のＲＯＰの各々を同じ命令キュー３６Ａ〜３６Ｂに割当て、ＲＯＰの次のラインを他の命令キュー３６Ａ〜３６Ｂに割当てる。制御ユニット１３２は、ＲＯＰ割当バス７０Ｂを介して命令キュー３６Ａ〜３６Ｂに割当てられたＲＯＰの数の表示を運ぶ（テールポインタ制御バス７０の一部が図２に示される）。したがって、受取る命令キューは、そのキューへのＲＯＰの割当てを反映するようにそのテールポインタを更新可能である。
【００８４】
制御ユニット１３２は、ネクストフリーＰＲ♯バス１４６によりフリーリスト制御ユニットから１組のフリーＰＲ♯を受取る。フリーＰＲ♯の組は、命令演算のライン内のデスティネーションレジスタに割当てられる。ある実施例では、プロセッサ１０は、ライン内の論理的レジスタ更新の数を４個に限っている（すなわち、予測子ミスデコードユニット２６が第５の論理的レジスタ更新に出会った場合、ラインはその前の命令で終了される）。ゆえに、フリーリスト制御ユニットは、フリーリストから４個のＰＲ♯を選択し、ネクストフリーＰＲ♯バス１４６により制御ユニット１３２に選択されたレジスタを運ぶ。他の実施例は、ライン内の更新の数に対する異なった制限を採用可能であり、制限なしも含み得る（すなわち、各ＲＯＰは更新可能である。）。
【００８５】
フリーリスト制御ユニットは、物理的レジスタの解放を管理し、その後の命令の割当てのためにレジスタを選択する。フリーリスト制御ユニットは、アーキテクチャ的リネームブロック３４からポップされた先行の物理的レジスタ数を受取り、これはまたアーキテクチャ的リネームの更新された組に対して先行の物理的レジスタ数をｃａｍ比較する。対応するｃａｍ比較の一致が検出されない各先行のＰＲ♯は、フリーリストに加えられる。
【００８６】
仮想／物理的レジスタマップユニット１３６は、ＰＲ♯のソースがルックアヘッドレジスタ状態であることを示す仮想レジスタ番号を有する各ソースレジスタごとにルックアヘッドレジスタ状態によって示される対応する論理的レジスタのＰＲ♯およびＩＱ♯を供給する。仮想レジスタ番号が先行の発行位置を示すソースレジスタには、制御ユニット１３２によって割当てられた対応するＰＲ♯およびＩＱ♯が供給される。さらに、仮想／物理的レジスタマップユニット１３６は、ＲＯＰのラインによって特定される論理的デスティネーションレジスタおよび制御ユニット１３２によって割当てられるデスティネーションＰＲ♯／ＩＱ♯に従ってルックアヘッドレジスタ状態を更新する。
【００８７】
仮想／物理的レジスタマップユニット１３６はさらに、例外条件に応答してマップサイロ３２によって与えられる復旧ルックアヘッドレジスタ状態を受取るよう構成される。仮想／物理的レジスタマップユニット１３６は、マップサイロ３２によって与えられる復旧ルックアヘッド状態でレジスタスキャンユニット１３０およびＩＱ♯／ＰＲ♯制御ユニッ
ト１３２からの入力に従って生成される次のルックアヘッドレジスタ状態を無効にし得る。
【００８８】
なお、この実施例では、ＩＱ♯は、対応するＲＯＰがどの命令キューエントリに依存しているかを示すために各ソースオペランドについて経路付けされる。命令キュー３６Ａ〜３６Ｂは、実行のために依存ＲＯＰをスケジューリングするより前に対応する命令キューエントリにおけるＲＯＰの完了を待つ。
【００８９】
次に図８を参照して、依存性ベクトル生成ユニット１３４のある実施例の動作を例示するフローチャートが示される。他の実施例が可能であり企図される。わかりやすくするために図８では特定の順序でステップが示されるが、いかなる順序も好適であり得る。さらに、さまざまなステップが、依存性ベクトル生成ユニット１３４内の組合せ論理で並列に実行可能である。
【００９０】
依存性ベクトル生成ユニット１３４は、１つ以上のストアアドレスＩＱ♯が命令キュー３６Ａ〜３６Ｂから受取られたかどうかを決定する（決定ブロック１６０）。ストアアドレスＩＱ♯が受取られた場合、依存性ベクトル生成ユニット１３４は、ストアアドレス依存性ベクトル内の対応する依存性表示を削除する（ステップ１６２）。たとえば、依存性ベクトルが、各ＩＱ♯ごとに、セットされると依存性を示す１ビットを含む実施例では、受取られたＩＱ♯に対応するビットがリセットされる（またはクリアされる）。
【００９１】
依存性ベクトル生成ユニット１３４は、ライン内ストアアドレス依存性ベクトルを組立てる（ステップ１６４）。ライン内ストアアドレス依存性ベクトルは、依存性ベクトル生成ユニット１３４によって処理されるＲＯＰのライン内の各ストアアドレスＲＯＰについての依存性表示を記録する。依存性ベクトル生成ユニット１３４は、ＲＯＰのライン内の各ＲＯＰについての依存性ベクトル（すなわち、有効ＲＯＰを有する各発行位置に対応する依存性ベクトル）を組立てる（ステップ１６６）。依存性ベクトル生成ユニット１３４のある実施例に従う特定の発行位置についての依存性ベクトルの組立ては、以下図９に例示される。最後に、依存性ベクトル生成ユニット１３４は、ストアアドレスレジスタ１３８に記憶されるストアアドレス依存性ベクトルをライン内ストアアドレス依存性ベクトルとマージし、結果でストアアドレスレジスタ１３８を更新する（ステップ１６８）。
【００９２】
次に図９を参照して、依存性ベクトル生成ユニット１３４のある実施例に従うＲＯＰについての依存性ベクトルの組立て（すなわち、図８に示すステップ１６６）を例示するフローチャートが示される。図９に示すステップは、ライン内の各ＲＯＰについて実行可能である。他の実施例が可能であり企図される。わかりやすくするために図８では特定の順序でステップが示されるが、いかなる順序も好適であり得る。さらに、さまざまなステップが、依存性ベクトル生成ユニット１３４内の組合せ論理で並列に実行可能である。
【００９３】
依存性ベクトル生成ユニット１３４は、依存性ベクトルが組立てられるＲＯＰがロードＲＯＰであるかどうかを決定する（決定ブロック１７０）。上述したように、ライン内の各ＲＯＰのタイプは、デコードユニット２４によって依存性ベクトル生成ユニット１３４によって与えられ、それから依存性ベクトル生成ユニット１３４はどのＲＯＰがロードＲＯＰであるかを決定可能である。ＲＯＰがロードＲＯＰである場合、依存性ベクトル生成ユニット１３４は、ロードＲＯＰに先行する発行位置にライン内ストアアドレス依存性ベクトルをマスクし、依存性ベクトルにマスクされた表示を記録する（ステップ１７２）。言い換えれば、ライン内のロードＲＯＰに先行するストアアドレスＲＯＰに対応する依存性表示は、依存性ベクトルに含まれ、ロードＲＯＰの後のストアアドレスＲＯＰに対応するその依存性表示は含まれない。ロードＲＯＰの後のストアアドレスＲＯＰに対応する依存性表示は、マスクオフされる、なぜならその後のストアアドレスＲＯＰの依存性をその
ロードＲＯＰについて指定するべきでないからである。
【００９４】
加えて、ストアアドレスレジスタ１３８に記憶されるストアアドレス依存性ベクトルは、ＲＯＰがロードＲＯＰである場合、依存性ベクトルに記録される（ステップ１７４）。さらになお、ロードヒットストアデータ状況がストア／ロード転送検出ユニット１４８によって予測される場合、依存性は予測されたストアデータＲＯＰに記録される（ステップ１７６）。
【００９５】
各ＲＯＰごとに、仮想／物理的レジスタマップユニット１３６によって与えられるソースＩＱ♯への依存性が記録される（ステップ１７８）。なお、ある実施例では、各依存性ベクトルは、各ＩＱ♯ごとに、セットされた場合そのＩＱ♯に割当てられたＲＯＰへの依存性を示し、クリアされた場合、そのＩＱ♯への依存性の欠如を示すビットを含む。したがって、さまざまなソースからの記録依存性は、さまざまなソースからの依存性ベクトルのＯＲをとることを含み得る。代替的に、依存性の各ソースは、依存性ベクトル内のどのビットがセットされるべきかを示し得る。
【００９６】
ここで図１０を参照して、命令キュー３６Ａ〜３６Ｂのある実施例の動作を例示するタイミング図が示される。クロックサイクルのフェーズは、垂直の点線によって区分される。各フェーズおよび各クロックサイクルは、区分された領域の上部のラベルにより示される。図１０のタイミング図は、各命令キュー内の依存ＲＯＰのスケジューリングおよび書込有効ラインのアサーションにより（依存ＲＯＰがスケジューリング可能であるように）完了したものとして示されるＲＯＰのタイミングを例示する。
【００９７】
クロック０のＰＨ２フェーズの間に、命令キュー３６Ａ内のピック論理は、ＲＯＰのための書込有効信号をアサートする（参照番号１８０）。クロック１のＰＨ１フェーズの間に、第１の依存ＲＯＰのスケジューリング要求信号が第２の記憶装置９０Ｂにおいて評価されアサートされる（他の依存性がまだアクティブでないと仮定する−参照番号１８２）。加えて、第２の依存ＲＯＰのための中間スケジューリング要求信号が第２の記憶装置９０Ｄにおいて評価されアサートされる（やはり、他の依存性がまだアクティブでないと仮定する）。ＰＨ１ラッチ９４Ｂは、アサートされた中間スケジューリング要求信号をラッチする（参照番号１８４）。
【００９８】
クロック１のＰＨ２フェーズの間に、命令キュー３６Ａ内のピック論理は、実行のために、命令キュー３６Ａから第１の依存ＲＯＰをスケジューリングする（参照番号１８６）。加えて、第２の依存ＲＯＰが命令キュー３６Ｂの第１の記憶装置９０Ｃにおいて評価され、対応する要求信号がアサートされる（他の依存性がアクティブでないと仮定する−参照番号１８８）。
【００９９】
クロック２のＰＨ１フェーズの間に、レジスタファイル３８Ａは、第１の依存ＲＯＰのソースオペランドのためにレジスタファイル読出を開始する。レジスタファイル読出は、クロック２のＰＨ２フェーズの間に完了する（参照番号１９０）。クロック２のＰＨ１フェーズの間にまた、命令キュー３６Ｂ内のピック論理は、実行のために、第２の依存ＲＯＰをスケジューリングする（参照番号１９２）。レジスタファイル３８Ｂは、クロック２のＰＨ２フェーズ中に第２の依存ＲＯＰのソースオペランドのためにレジスタファイル読出を開始し、レジスタファイル読出はクロック３のＰＨ１フェーズ中に完了する（参照番号１９４）。実行コア４０Ａは、クロック３のＰＨ１フェーズ中に第１の依存ＲＯＰの実行を開始し、クロック３のＰＨ２フェーズ中に実行を完了する（参照番号１９６）。同様に、実行コア４０Ｂは、クロック３のＰＨ２フェーズ中に依存ＲＯＰの実行を開始し、クロック４のＰＨ１フェーズ中に実行を完了する（参照番号１９８）。
【０１００】
（図４および図１０に例示されるように）依存性ベクトルを部分的に評価することによって、依存性ベクトル全体が同時に評価された場合よりも高い周波数の動作が達成可能である。部分の１つが評価されている間に、他の部分をプリチャージすることが可能である。プロセッサ１０の性能は、より高い周波数の結果として増大可能である。命令キュー３６Ｂから１／２クロックサイクルずらして命令キュー３６Ａを演算することにより、（かつ同様に、レジスタファイル３８Ｂから１／２クロックサイクルずらしてレジスタファイル３８Ａを演算し、実行コア４０Ｂから１／２クロックサイクルずらして実行コア４０Ａを演算することによって）、反対側の命令キューに記憶された依存ＲＯＰにＲＯＰの完了を伝搬するために１／２クロックサイクルを採用するだけで、より高い周波数が実現可能である。加えて、１／２クロックサイクル時間を用いて、ＲＯＰの結果をレジスタファイルに伝搬し、これを依存ＲＯＰが読出して結果にアクセスすることが可能である。１クロックサイクル全体を用いてキュー間の伝搬をする実施例により、命令スループット全体を増大させることが可能である。
【０１０１】
なお、この実施例では、命令キューは物理的に命令キュー３６Ａ〜３６Ｂに分割されるが、他の実施例では、命令キューを、独立して動作し得るさらに多数の命令キューに分割可能である。たとえば、（４個のレジスタファイルおよび４個の実行コアとともに）４個の命令キューを採用する実施例が採用可能であろう。命令キューの数は、いかなる好適な数であってもよい。さらに、依存性ベクトルの評価は、所望のごとく、連続したフェーズにおいて評価される３つ以上の部分に分割可能である。
【０１０２】
ここで図１１を参照して、バスブリッジ２０２を介してさまざまなシステム構成要素に結合されるプロセッサ１０を含むコンピュータシステム２００のある実施例のブロック図が示される。他の実施例が可能であり企図される。図示のシステムでは、主メモリ２０４は、メモリバス２０６を介してバスブリッジ２０２に結合され、グラフィックスコントローラ２０８はＡＧＰバス２１０を介してバスブリッジ２０２に結合される。最後に、複数個のＰＣＩデバイス２１２Ａ〜２１２ＢがＰＣＩバス２１４を介してバスブリッジ２０２に結合される。２次バスブリッジ２１６をさらに設けて、ＥＩＳＡ／ＩＳＡバス２２０を介して１つ以上のＥＩＳＡまたはＩＳＡデバイス２１８への電気的インターフェイスを可能にしてもよい。プロセッサ１０は、外部インターフェイス５２を介してバスブリッジ２０２に結合される。
【０１０３】
バスブリッジ２０２は、プロセッサ１０と、主メモリ２０４と、グラフィックスコントローラ２０８と、ＰＣＩバス２１４につながれたデバイスとのインターフェイスを与える。バスブリッジ２０２に接続されたデバイスの１つから演算が受取られると、バスブリッジ２０２は、演算のターゲット（たとえば、特定のデバイスまたは、ＰＣＩバス２１４の場合には、ターゲットはＰＣＩバス２１４上にある）を特定する。バスブリッジ２０２は、ターゲットとされたデバイスに演算を経路付けする。バスブリッジ２０２は、一般的には、ソースデバイスまたはバスによって使用されるプロトコルからターゲットデバイスまたはバスによって使用されるプロトコルに演算を変換する。
【０１０４】
ＰＣＩバス２１４についてＩＳＡ／ＥＩＳＡバスへのインターフェイスを与えるのに加えて、２次バスブリッジ２１６はさらに、所望により、さらなる機能を組込んでもよい。外部から、または２次バスブリッジ２１６と一体化されるかのいずれかの入力／出力コントローラ（図示せず）をもコンピュータシステム２００内に含めて、所望により、キーボードおよびマウス２２２のため、ならびにさまざまなシリアルポートおよびパラレルポートのための動作サポートを提供することが可能である。外部キャッシュユニット（図示せず）が、他の実施例では、プロセッサ１０とバスブリッジ２０２との間の外部インターフェイス５２に結合されてもよい。代替的に、外部キャッシュは、バスブリッジ２０２に結合されてもよく、外部のキャッシュのためのキャッシュ制御論理は、バスブリッジ２０２
に一体化されてもよい。
【０１０５】
主メモリ２０４は、アプリケーションプログラムがそこに記憶され、プロセッサ１０が主にそこから実行するメモリである。好適な主メモリ２０４は、ＤＲＡＭ（ダイナミック・ランダム・アクセス・メモリ）、および好ましくはＳＤＲＡＭ（シンクロナスＤＲＡＭ）の複数個のバンクを含む。
【０１０６】
ＰＣＩデバイス２１２Ａ−２１２Ｂは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピィディスクドライブまたはドライブコントローラ、ＳＣＳＩ（スモール・コンピュータ・システム・インターフェイス）アダプタおよび電話機能カードなどのさまざまな周辺装置を例示するものである。同様に、ＩＳＡデバイス２１８は、モデム、サウンドカード、およびＧＰＩＢまたはフィールドバスインターフェイスカードなどのさまざまなデータ収集カードなどのさまざまなタイプの周辺装置を例示するものである。
【０１０７】
グラフィックスコントローラ２０８は、ディスプレイ２２６上のテキストおよび画像のレンダリングを制御するために設けられる。グラフィックスコントローラ２０８は、先行技術に一般的に公知の典型的なグラフィックスアクセラレータを実現して、主メモリ２０４からおよびそこに効果的にシフト可能である３次元データ構造をレンダリングし得る。したがって、グラフィックスコントローラ２０８は、バスブリッジ２０２内のターゲットインターフェイスへのアクセスを要求しかつ受取り、これにより主メモリ２０４へのアクセスを獲得可能であるという点で、ＡＧＰバス２１０のマスタであり得る。専用グラフィックスバスが、主メモリ２０４からのデータの高速の取出しを可能にする。ある種の動作では、グラフィックスコントローラ２０８は、ＡＧＰバス２１０上にＰＣＩプロトコルトランザクションを生成するようさらに構成可能である。バスブリッジ２０２のＡＧＰインターフェイスは、したがって、ＡＧＰプロトコルトランザクションならびにＰＣＩプロトコルターゲットおよびイニシエータトランザクションの両方をサポートする機能を含み得る。ディスプレイ２２６は、画像またはテキストを表示することのできるいかなる電子的ディスプレイでもある。好適なディスプレイ２２６は、陰極線管（「ＣＲＴ」）、液晶ディスプレイ（「ＬＣＤ」）などを含む。
【０１０８】
なお、ＡＧＰ、ＰＣＩ、およびＩＳＡまたはＥＩＳＡバスが上の説明では例として用いられたが、所望によりいかなるバスアーキテクチャで置き換えられてもよい。さらになお、コンピュータシステム２００は、さらなるプロセッサ（たとえば、コンピュータシステム２００のオプションの構成要素として示されるプロセッサ１０ａ）を含むマルチプロセッシングコンピュータシステムであってもよい。プロセッサ１０ａは、プロセッサ１０と同様であってもよい。より特定的には、プロセッサ１０ａは、プロセッサ１０の同一のコピーであってもよい。プロセッサ１０ａは、（図１１に示すとおり）プロセッサ１０と外部インターフェイス５２を共有してもよく、または独立のバスを介してバスブリッジ２０２に接続されてもよい。
【産業上の利用可能性】
【０１０９】
［産業上の適用性］
この発明は、プロセッサおよびコンピュータシステムに適用可能であり得る。
【図面の簡単な説明】
【０１１０】
【図１】プロセッサの１つの実施例のブロック図である。
【図２】図１に示された命令キューの１つの実施例のブロック図である。
【図３】依存性ベクトルの１つの実施例のブロック図である。
【図４】１対の依存性ベクトルキューの１つの実施例のブロック図である。
【図５】依存性ベクトルキューの１つの実施例の部分回路図である。
【図６】依存性ベクトルキューの１つの実施例の別の部分回路図である。
【図７】図１に示されたマップユニットの１つの実施例およびストア／ロード転送検出ユニットの１つの実施例のブロック図である。
【図８】図７に示された依存性ベクトル生成ユニットの１つの実施例の演算を示すフローチャートの図である。
【図９】図８に示されたステップの１つの実施例を示すフローチャートの図である。
【図１０】図１に示された１対の命令キューの１つの実施例の演算を示すタイミングの図である。
【図１１】図１に示されたプロセッサを含むコンピュータシステムの１つの実施例のブロック図である。
【符号の説明】
【０１１１】
１０  プロセッサ、１２  ライン予測子、１４  命令キャッシュ（Ｉ−キャッシュ）、１６  整列ユニット、１８  分岐履歴テーブル、２０  間接アドレスキャッシュ、２２  戻りスタック、２４  デコードユニット、２６  予測子ミスデコードユニット、２８  マイクロコードユニット、３０  マップユニット、３２  マップサイロ、３４  アーキテクチャリネームブロック、３６Ａ−３６Ｂ  １対の命令キュー、３８Ａ−３８Ｂ  １対のレジスタファイル、４０Ａ−４０Ｂ  １対の実行コア、４２  ロード／ストアユニット、４４  データキャッシュ（Ｄ−キャッシュ）、４６  外部インターフェイスユニット、４８
ＰＣサイロ、５０  リダイレクトユニットならびに命令ＴＬＢ（ＩＴＢ）。
【図１】
2006228241.tif 000003
【図２】
2006228241.tif 000004
【図３】
2006228241.tif 000005
【図４】
2006228241.tif 000006
【図５】
2006228241.tif 000007
【図６】
2006228241.tif 000008
【図７】
2006228241.tif 000009
【図８】
2006228241.tif 000010
【図９】
2006228241.tif 000011
【図１０】
2006228241.tif 000012
【図１１】
2006228241.tif 000013