(57)【要約】マイクロプロセッサは、各々が命令を実行するよう構成される複数の実行ユニット（６０Ａ，６０Ｂ，６０Ｃ）と、命令を送付して複数の実行ユニットにより実行するよう構成される命令ディスパッチ回路（５２）とを具備する。電力管理制御ユニット（５０）は、１つ以上の電力削減モードを指定する情報を格納するプログラマブル・ユニット（５１）を備える。第１の性能抑制技術の実行例においては、電力管理制御ユニットは、命令ディスパッチャが限られた数の実行ユニットに命令の送付を制限するよう構成することができる。第２の性能抑制技術の実行例においては、電力管理制御ユニットを、各サイクル毎に、１サイクルおきに、２サイクルおきに、あるいは３サイクルおきになどと命令ディスパッチャからの命令の送付を制限するよう構成することもできる。第３の性能抑制技術の実行例においては、電力管理制御ユニットを、浮動小数点スケジューラ（５６）から１つ以上の浮動小数点実行パイプライン（５８Ａ，５８Ｂ，５８Ｃ）への命令送付を制御するよう構成することができる。
2004537084.tif 000002
【特許請求の範囲】
【請求項１】
各々が命令を実行するよう構成される、複数の実行ユニット（６０Ａ，６０Ｂ，６０Ｃ）；
前記命令を送付して、前記複数の実行ユニットにより実行させるよう構成される命令ディスパッチ回路（５２）；および
前記命令ディスパッチ回路に結合され、電力削減モードを指定する特定値を格納するプログラマブル・ユニット（５１）を持つ電力管理制御ユニット（５０）；
を含んで構成され、前記命令ディスパッチ回路が、前記プログラマブル・ユニットに格納される前記特定値に応じて、前記複数の実行ユニットのうち限られた数のユニットに対し命令を伝えるよう構成されるマイクロプロセッサ。
【請求項２】
前記複数の実行ユニットの各々が、対応する実行パイプライン内に含まれることを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
前記命令ディスパッチャから送付される浮動小数点命令を受信するために結合される浮動小数点スケジューラをさらに含むことを特徴とする請求項１記載のマイクロプロセッサ。
【請求項４】
前記浮動小数点スケジューラ（５６）から、前記浮動小数点命令を受信するために結合される少なくとも１つの浮動小数点実行パイプライン（５８Ａ，５８Ｂ，５８Ｃ）をさらに含むことを特徴とする請求項３記載のマイクロプロセッサ。
【請求項５】
前記電力管理制御ユニットが、浮動小数点電力削減モードにプログラムされるように構成され、前記浮動小数点スケジューラが、前記浮動小数点電力削減モードに応答して、前記少なくとも１つの浮動小数点実行パイプラインへの特定の浮動小数点命令の送付を遅らせるように構成されることを特徴とする請求項４記載のマイクロプロセッサ。
【請求項６】
命令を実行するよう構成される、少なくとも１つの実行ユニット（６０Ａ，６０Ｂ，６０Ｃ）；
前記命令を送付して、前記少なくとも１つの実行ユニットにより実行させるよう構成される命令ディスパッチ回路（５２）；
前記命令ディスパッチ回路に結合され、電力削減モードに対応する情報を格納するプログラマブル・ユニット（５１）を持つ電力管理制御ユニット（５０）；
を含んで構成され、前記命令ディスパッチ回路が、前記プログラマブル・ユニットに格納される前記情報に応じて、一定の送付サイクルで、前記少なくとも１つの実行ユニットに対する選択された命令の送付を遅らせるよう構成されるマイクロプロセッサ。
【請求項７】
前記プログラマブル・ユニットが、各送付サイクルにおいて修正される値を持つカウンタを備え、前記カウンタの値が前記選択された命令の遅延を制御することを特徴とする請求項６記載のマイクロプロセッサ。
【請求項８】
複数の連続する処理サイクルの各々の間に、指定される機能を実行するよう構成されるプロセッサ・サブユニット；および
前記プロセッサ・サブユニットに結合され、電力削減モードにプログラムされると選択された処理サイクルの間、前記プロセッサ・サブユニットを遅延させるよう構成される電力管理制御ユニット；
を含んで構成されるマイクロプロセッサ。
【請求項９】
前記プロセッサ・サブユニットがキャッシュ・メモリを含むことを特徴とする請求項８記載のマイクロプロセッサ。
【請求項１０】
前記キャッシュ・メモリが少なくとも１つの実行パイプラインに命令を与えるよう結合される命令キャッシュである請求項９記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、さらに詳しくはマイクロプロセッサ内の電力消費管理に関する。
【背景技術】
【０００２】
コンピュータ・システムの電力消費を低減するために種々の技術が考案されてきた。このような技術としては、回路構成の統合と、改良された回路構成および電力管理ユニット（ＰＭＵ：power management unit）の合体の強化がある。コンピュータ・システムに用いられる電力低減技術の１つには、活動していない回路部分を駆動するクロック信号を停止させる機能が一般に含まれる。このような技術を採用するシステムは、活動していない回路部分を検出または予測して、それに従ってその活動していない回路部分に関わるクロック信号を停止する電力管理ユニットを通常備える。活動していない回路部分を駆動する「未使用」クロック信号をオフにすることにより、システム全体の電力消費が削減される。同様の技術としては、時間が重要な要因とならない動作モード中に回路部分を駆動するクロック信号の周波数を小さくする機能もある。また、活動していない回路部分から電力を解除する機能を持つ技術もある。
【０００３】
コンピュータ・システムのマイクロプロセッサが消費する電力を制御および削減することは同様に重要である。電力消費は、マイクロプロセッサのチップ内に組み込まれる論理回路の量が増え続けることと、動作周波数の増大との結果による影響を一部受けてきた。
【０００４】
マイクロプロセッサを採用する多くのコンピュータ・システムやアプリケーションにおいて、高性能を獲得することも重要である。高性能を獲得するために、たとえばスーパースカラーおよび／またはアウトオブオーダー実行法や、その他の比較的複雑な構造を含む、複雑なマイクロアーキテクチャ機能を採用するマイクロプロセッサが多くある。このようなマイクロプロセッサを実現するには、比較的大量の回路構成が必要とされることが多く、よって電力消費の問題につながる。そのため、比較的高い性能を提供しつつ、容認できうる電力消費特性を得るためには、マイクロプロセッサの設計において妥協がなされることが多い。
【発明の開示】
【０００５】
上述される問題点は、本明細書に説明される電力管理のための性能抑制機構を採用するマイクロプロセッサにより、大部分が解決される。一実施形態においては、マイクロプロセッサは各々が命令を実行するよう構成される複数の実行ユニットと、命令を送付して複数の実行ユニットにより実行するよう構成される命令ディスパッチ回路とを具備する。電力管理制御ユニットは、１つ以上の電力削減モードを指定する情報を格納するプログラマブル・ユニットを備える。
【０００６】
第１の性能抑制技術の実行例において、電力管理制御ユニットは、命令ディスパッチャが限られた数の実行ユニットに命令の送付を制限するよう構成することができる。通常の最大ディスパッチ速度で命令を送付するのではなく、命令ディスパッチャは、電力管理制御ユニットに格納される情報によって、たとえば、１サイクルに２つの命令のみ、あるいは１サイクルに１つの命令のみという速度で命令を送付することが可能である。そのため、このモードでの動作中は、新たに送付される命令を実行するために活動する実行ユニットの数が少なくなる。これにより、全体の電力消費が低減する。
【０００７】
第２の性能抑制技術の実行例においては、電力管理制御ユニットは、各サイクル毎に、１サイクルおきに、２サイクルおきにまたは３サイクルおき（以下、同様）になどと命令ディスパッチャからの命令の送付を制限するよう構成することができる。ある特定の実行例では、カウンタ（あるいはカウンタ群）を命令送付の遅延を制御するよう設定することもできる。
【０００８】
第３の性能抑制技術の実行例においては、電力管理制御ユニットは、浮動小数点スケジューラから１つ以上の浮動小数点実行パイプラインへの命令の送付を制御するよう構成することができる。有効な命令は、１サイクル毎に、１サイクルおきに、２サイクルおきにあるいは３サイクルおきになど送られ、所望の電力節約を行う。
【０００９】
さらに別の実行例においては、電力管理制御ユニットは、代替的にあるいは追加的に、他のプロセッサ・サブユニットの性能を抑制して、最大電力あるいは平均電力のいずれかを基準として電力を低減することもできる。たとえば、一実施形態では、電力管理制御ユニットは、マイクロプロセッサの命令キャッシュおよび／またはデータ・キャッシュが１サイクルおきに、あるいは２サイクルおきになどにしかリクエストを処理しないように構成することもできる。
【発明を実施するための形態】
【００１０】
図１を参照して、マイクロプロセッサ１０の１実施形態のブロック図が示される。マイクロプロセッサ１０は、プレフェッチ／プレデコード・ユニット１２，ブランチ（分岐）予測ユニット１４，命令キャッシュ１６，命令整合ユニット１８，複数のデコード・ユニット２０Ａ〜２０Ｃ，複数のリザベーション・ステーション２２Ａ〜２２Ｃおよび複数の機能ユニット２４Ａ〜２４Ｃを備える。マイクロプロセッサ１０は、さらに、ロード／格納ユニット２６，データ・キャッシュ２８，レジスタ・ファイル３０，リオーダー・バッファ３２，ＭＲＯＭユニット３４，浮動小数点ユニット（ＦＰＵ：floating-point unit）３６および電力管理制御ユニット５０を備える。特定の参照番号とそれに続く文字により本明細書内で言及される要素を、参照番号のみにより集合的に言及する場合がある。たとえば、デコード・ユニット２０Ａ〜２０Ｃを集合的にデコード・ユニット２０と称することがある。
【００１１】
プレフェッチ／プレデコード・ユニット１２は、メイン・メモリ・サブシステム（図示せず）から命令を受信するように結合され、さらに命令キャッシュ１６およびブランチ予測ユニット１４に結合される。同様に、ブランチ予測ユニット１４は、命令キャッシュ１６，デコード・ユニット２０および機能ユニット２４に結合される。命令キャッシュ１６は、さらに、ＭＲＯＭユニット３４と命令整合ユニット１８とに結合される。アーリーデコード・ユニット（ＥＤＵ:early decode unit）４４を含む命令整合ユニット１８は、さらにデコード・ユニット２０に結合される。各デコード・ユニット２０Ａ〜２０Ｃは、ロード／格納ユニット２６と、個々のリザベーション・ステーション２２Ａ〜２２Ｃとに結合される。リザベーション・ステーション２２Ａ〜２２Ｃは、機能ユニット２４Ａ〜２４Ｃにそれぞれ結合される。また、デコード・ユニット２０とリザベーション・ステーション２２とは、レジスタ・ファイル３０およびリオーダー・バッファ３２に結合される。機能ユニット２４は、ロード／格納ユニット２６，レジスタ・ファイル３０およびリオーダー・バッファ３２にも結合される。データ・キャッシュ２８は、ロード／格納ユニット２６とメイン・メモリ・サブシステムとに結合される。これもアーリーデコード・ユニット（ＥＤＵ）４２を含むＭＲＯＭユニット３４は、デコード・ユニット２０とＦＰＵ３６とに結合される。ＦＰＵ３６は、ロード／格納ユニット２６とリオーダー・バッファ３２とに結合される。例示的にプログラマブル・レジスタ・カウンタユニット５１を含む電力管理制御ユニット５０は、最終的に命令整合ユニット１８とＦＰＵ３６とに結合される。
【００１２】
以下に、さらに詳細に説明するが、電力管理制御ユニット５０は、マイクロプロセッサ１０に関するディスパッチ（または発行）速度を制限することによりマイクロプロセッサ１０の性能に制約を加えて、周波数を低くしなくともその部品の動的電力消費を低減するために設けられる。電力制御ユニット５０とマイクロプロセッサ１０内の性能抑制に関して詳細を論ずる前に、マイクロプロセッサ１０の構成部分の動作に関する側面を論ずる。電力管理制御ユニット５０の一実施形態の一般的な動作に関する詳細は、図３に関してさらに後で説明する。
【００１３】
命令キャッシュ１６は、命令を格納するために設けられる高速キャッシュ・メモリである。命令が命令キャッシュ１６からフェッチされて、デコード・ユニット２０に送られる。ある一実施形態では、命令キャッシュ１６は、６４バイト（１バイトは８バイナリ・ビット）のラインを有する双方向に設定される結合構造内に最大６４キロバイトの命令を格納するよう構成される。命令キャッシュ１６は、完全結合型構造にも、セット結合型構造にもあるいはダイレクトマッピング型構造にも実現できることに注目されたい。
【００１４】
命令は、プレフェッチ／プレデコード・ユニット１２によって、メイン・メモリからフェッチされ、命令キャッシュ１６内に格納される。命令は、プレフェッチ法により、それが要求される前に予めフェッチすることもできる。プレフェッチ／プレデコード・ユニット１２では、様々なプレフェッチ法を採用することができる。プレフェッチ／プレデコード・ユニット１２が、メイン・メモリから命令キャッシュ１６に命令を転送すると、プレフェッチ／プレデコード・ユニット１２は命令の各バイトに関して３つのプレデコード・ビットを生成する。すなわち、開始ビット，終了ビットおよび機能ビットである。プレデコード・ビットは、各命令の境界を示すタグを形成する。このプレデコード・タグは、特定の命令をデコード・ユニット２０により直接解読するか、あるいはＭＲＯＭユニット３４により制御されるマイクロコード手順を起動することにより、その命令を実行するのかなどの追加の情報も伝える。これについては、下記にさらに詳細に説明する。またさらに、プレフェッチ／プレデコード・ユニット１２を、ブランチ命令を検出して、そのブランチ命令に対応するブランチ予測情報をブランチ予測ユニット１４に格納するよう構成することもできる。
【００１５】
可変バイト長の命令セットを採用するマイクロプロセッサ１０の一実施形態に関して、プレデコード・タグをエンコードする一の方法を次に説明する。可変バイト長命令セットとは、異なる命令が異なるバイト数を占有する命令セットである。マイクロプロセッサ１０の一実施形態が採用する可変バイト長命令セットの例に、（公序良俗違反につき、不掲載）命令セットがある。
【００１６】
エンコード例において、特定のバイトが命令の第１バイトとすると、そのバイトの開始ビットがセットされる。そのバイトが命令の最終ビットとすると、そのバイトの終了ビットがセットされる。デコード・ユニット２０により直接的に解読される命令を「ファスト・パス」命令と呼ぶ。残りの（公序良俗違反につき、不掲載）命令は、一実施形態ではＭＲＯＭ命令と称する。ファスト・パス命令に関して、その命令に含まれる各プレフィックス・バイトに関して機能ビットがセットされ、他のバイトについてはクリアされる。あるいは、ＭＲＯＭ命令に関して、機能ビットが各プレフィックス・バイトについてクリアされ、他のバイトに関してはセットされる。命令の種類は、終了バイトに対応する機能ビットを検証することにより決定される。機能ビットがクリアであれば、命令はファスト・パス命令である。逆に、機能ビットがセットされていれば、その命令はＭＲＯＭ命令である。これにより、命令のオペコードは命令内の第１クリア機能ビットに関わるバイトとしてデコード・ユニット２０により直接的に解読される命令内に置かれる。たとえば、２つのプレフィックス・バイト，Ｍｏｄ Ｒ／Ｍバイトおよび直接バイトを含むファスト・パス命令は次のように開始ビット，終了ビットおよび機能ビットを有することになる：
開始ビット １００００
終了ビット ００００１
機能ビット １１０００
【００１７】
特定の一実施形態では、命令にスケール・インデックス・ベース（ＳＩＢ：scale-index-base）バイトが含まれる初期識別が、ＭＲＯＭユニット３４にとっては有利である。このような実施例については、オペコード・バイトの後に少なくとも２つのバイトが命令に含まれる場合、Ｍｏｄ Ｒ／Ｍバイトの機能ビットは、ＳＩＢバイトの存在を示す。Ｍｏｄ Ｒ／Ｍバイトの機能ビットがセットされていれば、ＳＩＢバイトが存在する。あるいは、Ｍｏｄ Ｒ／Ｍバイトの機能ビットがクリアであれば、ＳＩＢバイトは存在しない。
【００１８】
ＭＲＯＭ命令とは、複雑すぎてデコード・ユニット２０が解読できないと判断される命令である。ＭＲＯＭ命令は、ＭＲＯＭユニット３４を起動することにより実行される。さらに詳しくは、ＭＲＯＭ命令があると、ＭＲＯＭユニット３４はその命令を定義されたファスト・パス命令の部分集合（サブセット）に分解して発行し、所望の演算を行う。ＭＲＯＭユニット３４は、このファスト・パス命令の部分集合をデコード・ユニット２０に送付する。
【００１９】
マイクロプロセッサ１０は、ブランチ予測を行って、条件付きブランチ命令に続く命令を推論的にフェッチする。ブランチ予測ユニット１４は、ブランチ予測オペレーションを行うために設けられる。一実施形態では、命令キャッシュ１６の各キャッシュ・ラインの１６バイト部分毎に最大２つのブランチ・ターゲット・アドレスが格納される。プレフェッチ／プレデコード・ユニット１２は、特定のラインが予め解読（プレデコード）されると、最初のブランチ・ターゲットを決定する。キャッシュ・ラインに対応するブランチ・ターゲットの次なる更新は、キャッシュ・ライン内の命令の実行により行われる。命令キャッシュ１６は、フェッチされている命令アドレスの指標を提供して、ブランチ予測ユニット１４が、ブランチ予測を行うためにどのブランチ・ターゲット・アドレスを選択すべきかを判断できるようにする。デコード・ユニット２０と機能ユニット２４は、ブランチ予測ユニット１４に更新情報を提供する。ブランチ予測ユニット１４は、キャッシュ・ラインの１６バイト部分毎に２つのターゲットを格納するので、ライン内のブランチ命令のうちブランチ予測ユニット１４に格納されないものがある。デコード・ユニット２０は、ブランチ予測ユニット１４が予測しなかったブランチ命令を検出する。機能ユニット２４は、ブランチ命令を実行し、予測したブランチ方向が誤っているか否かを判断する。そのブランチ方向が「とられると」、後続の命令はブランチ命令のターゲット・アドレスから取り出される。逆に、そのブランチ方向が「とられない」と、後続の命令はブランチ命令に続くメモリ位置から取り出される。誤予測されたブランチ命令が検出されると、その誤予測されたブランチに続く命令は、マイクロプロセッサ１０の様々なユニットから廃棄される。ブランチ予測ユニット１４は、多様性を持つ適切なブランチ予測アルゴリズムを採用する。
【００２０】
命令キャッシュ１６から取り出される命令は、命令整合ユニット１８とＭＲＯＭユニット３４とに伝えられる。命令が命令キャッシュ１６からフェッチされると、対応するプレデコード・データがスキャンされて、フェッチされている命令に関する情報を命令整合ユニット１８とＭＲＯＭユニット３４とに送る。命令整合ユニット１８は、このスキャン・データを利用して、命令をマルチプレクサ４６Ａ〜Ｃの各々に整合する。一実施形態では、命令整合ユニット１８は、８個の命令バイトからなる３つの集合の命令をデコード・ユニット２０に整合する。同様に、ＭＲＯＭユニット３４は、最大３つの整合済み命令をマルチプレクサ４６Ａ〜Ｃに出力するよう構成される。命令整合ユニット１８もＭＲＯＭユニット３４も、それぞれアーリーデコード・ユニット（ＥＤＣ：early decode unit）４２，４４を有することに注目されたい。これらのユニットは、解読プロセスの第１段階、たとえば各命令のオペランド記述子を識別する段階を実行する。
【００２１】
各マルチプレクサ４６Ａ〜Ｃは、命令整合ユニット１８とＭＲＯＭユニット３４から部分的に解読された命令（および対応するデコード，プレデコード情報）を受信するよう構成される。各マルチプレクサ４６Ａ〜Ｃは、各クロック・サイクルの間に命令整合ユニット１８またはＭＲＯＭユニット３４のいずれか一方から、最大１つの命令を選択するよう構成される。選択された命令は、デコード・ユニット２０Ａ〜Ｃ（整数命令）と、ＦＰＵ３６（（公序良俗違反につき、不掲載）浮動小数点、ＭＭＸおよび３ＤＸ命令）に送られる。マイクロプロセッサ１０の一実施形態では、１クロック・サイクルにつき最大３つの浮動小数点命令が浮動小数点ユニット３６に伝えられる。上記の如く、命令はＭＲＯＭユニット３４（マイクロコード命令）または命令整合ユニット１８（ファスト・パス命令）から来る。
【００２２】
デコード・ユニット２０は、マルチプレクサ４６Ａ〜Ｃから受け取った命令の解読を終了するように構成される。レジスタ・オペランド情報が検出され、レジスタ・ファイル３０とリオーダー・バッファ３２とに送られる。さらに、命令が１つ以上のメモリオペレーションの実行を必要とする場合、デコード・ユニット２０はメモリオペレーションをロード／格納ユニット２６に送る。各命令は、機能ユニット２４に対する１組の制御値に解読され、これらの制御値が、命令と共に含まれるオペランド・アドレス情報や、変位または直接データとともに、リザベーション・ステーション２２に送られる。
【００２３】
マイクロプロセッサ１０は、アウトオブオーダー実行に対応し、それによってリオーダー・バッファ３２を用いて、レジスタの読み書き動作のオリジナル・プログラム・シーケンスを追跡し、レジスタのリネーム（改名）を実行して、推論的命令の実行およびブランチの誤予測の回復を可能にし、精密な例外処理を容易にする。レジスタの更新を含む命令が解読されると、リオーダー・バッファ３２内の一時格納場所が確保されて、それにより推論的レジスタ状態が格納される。ブランチ予測が正しくない場合、それらがレジスタ・ファイル３０に書き込まれる前に、誤予測された経路による推論的に実行された命令の結果をバッファ内で無効にする。同様に、特定の命令が例外を起こすと、その命令に続く命令は廃棄される。この要領で、例外処理は「的確」なものとなる（すなわち、例外を起こした特定の命令に続く命令は例外の前には廃棄されない）。別の言い方をすると、例外を起こす命令に続く命令は例外の前に実行されうるが、その結果はマイクロプロセッサのアーキテクチャ状態の影響を与えていないことになる。特定の命令が、プログラム順序においてそれに先立つ命令の前に実行されると、その命令は推論的に実行されることに留意されたい。先立つ命令はブランチ命令であることも、例外発生命令であることもあるが、この場合、推論的結果はリオーダー・バッファ３２により廃棄される。
【００２４】
デコード・ユニット２０の出力に与えられる命令制御値および直接データまたは変位データは、直接、個々のリザベーション・ステーション２２に送られる。一実施形態では、各リザベーション・ステーション２２は、対応の機能ユニットへの発行を待つ最大６つの保留中の命令に対して、命令情報（すなわち命令制御値ならびにオペランド値，オペランド・タグおよび／または直接データ）を保持することができる。図３の実施形態に関して、各リザベーション・ステーション２２は、専用の機能ユニット２４に連係されることに注目されたい。従って、リザベーション・ステーション２２および機能ユニット２４により、３つの専用「発行位置」が形成される。言い換えると、発行位置０はリザベーション・ステーション２２Ａと機能ユニット２４Ａとにより形成される。リザベーション・ステーション２２Ａに整合送付された命令は、機能ユニット２４Ａにより実行される。同様に発行位置１がリザベーション・ステーション２２Ｂと機能ユニット２４Ｂとによって形成され、発行位置２がリザベーション・ステーション２２Ｃと機能ユニット２４Ｃとによって形成される。
【００２５】
特定の命令を解読して、必要なオペランドがレジスタ位置であるとすると、レジスタ・アドレス情報がリオーダー・バッファ３２とレジスタ・ファイル３０とに同時に配信される。（公序良俗違反につき、不掲載）レジスタ・ファイルは、８個の３２ビット・リアル・レジスタ（すなわち通常、ＥＡＸ，ＥＢＸ，ＥＣＸ，ＥＤＸ，ＥＢＰ，ＥＳＩ，ＥＤＩ，ＥＳＰと称される）を含む。（公序良俗違反につき、不掲載）マイクロプロセッサ・アーキテクチャを採用するマイクロプロセッサ１０の実施形態においては、レジスタ・ファイル３０は、３２ビット・リアル・レジスタ各々の格納位置を含む。レジスタ・ファイル３０内には、ＭＲＯＭユニット３４が用いる別の格納位置も含まれる。リオーダー・バッファ３２は、これらのレジスタの内容を変更する結果のための一時的な格納位置を備え、それによってアウトオブオーダー実行を可能にする。リオーダー・バッファ３２の一時格納場所は、解読時にリアル・レジスタの１つの内容を変更すると判断された命令毎に確保される。従って、特定のプログラムの実行中の様々な時点で、リオーダー・バッファ３２は特定のレジスタの推論的に実行される内容を含む１つ以上の位置を有する。特定の命令の解読に続き、リオーダー・バッファ３２に、その命令内のオペランドとして用いられるレジスタに割り当てられる前回の位置または位置群があると判定されると、リオーダー・バッファ３２は対応するリザベーション・ステーションに対して、１）最近割り当てられた位置の値あるいは２）値が最終的に前回の命令を実行する機能ユニットによりまだ生成されていない場合は、最近に割り当てられた位置のタグのいずれかを送る。リオーダー・バッファ３２が特定のレジスタのために確保される位置を有する場合、オペランド値（またはリオーダー・バッファ・タグ）がレジスタ・ファイル３０からではなく、リオーダー・バッファ３２から与えられる。リオーダー・バッファ３２内に必要とされるレジスタのための位置が確保されていない場合、値はレジスタ・ファイル３０から直接とられる。オペランドが、メモリ位置に対応する場合は、オペランド値がロード／格納ユニット２６を通じてリザベーション・ステーションに与えられる。
【００２６】
特定の一実施形態において、リオーダー・バッファ３２は、１つのユニットとして同時に解読される命令を格納および処理するよう構成される。この構造を本明細書では、「ライン志向（line-oriented）」と呼ぶ。いくつかの命令を共に処理することにより、リオーダー・バッファ３２内に用いられるハードウェアが簡素になる。たとえば、本実施形態に含まれるライン志向のリオーダー・バッファは、１つ以上の命令がデコード・ユニット２０により送付されるといつでも、３つの命令（各デコード・ユニット２０から１つずつ）に関わる命令情報に充分な格納場所を割り付ける。それとは対照的に、従来のリオーダー・バッファでは、実際に送付される命令の数に応じて、可変する量の格納場所が割り付けられる。可変量の格納場所を割り付けるには、比較的多数の論理ゲートが必要とされる。同時に解読される命令の各々が実行されると、命令の結果は同時にレジスタ・ファイル３０に格納される。そして、格納場所は同時に解読された別集合の命令に割り付けるため解放される。また、制御論理は同時解読されるいくつかの命令に亘って償却されるので、１つの命令に用いられる制御論理回路構成の量が減る。特定の命令を識別するリオーダー・バッファ・タグを２つのフィールド、すなわちライン・タグとオフセット・タグとに分割することができる。ライン・タグは特定の命令を含む同時に解読される命令の集合を識別し、オフセット・タグは、集合内のどの命令が特定の命令に対応するのかを識別する。命令の結果をレジスタ・ファイル３０に格納し、対応する格納場所を空けることを、命令の「リタイア」と称することに注目されたい。さらに、マイクロプロセッサ１０の種々の実施形態において、任意のリオーダー・バッファ構造を採用することができることにも注目されたい。
【００２７】
前述の如く、リザベーション・ステーション２２は、対応する機能ユニット２４が命令を実行するまで、その命令を格納する。(i)命令のオペランドが与えられ、(ii)同じリザベーション・ステーション２２Ａ〜２２Ｃ内にあり、プログラム順序においてその命令よりも先にある命令に関してそのオペランドがまだ与えられていない、という両方の条件が満たされると、命令が選択され実行される。命令が１つの機能ユニット２４により実行され、その命令の結果が、その結果を待っている任意のリザベーション・ステーション２２に直接的に送られ、同時にその結果が伝えられて、リオーダー・バッファ３２を更新することに注目されたい（この方法を一般に「結果転送」と呼ぶ）。命令が選択されて実行され、それに関わる結果が転送されるクロック・サイクルの間、機能ユニット２４Ａ〜２４Ｃに伝えられる。この場合、リザベーション・ステーション２２は、転送された結果を機能ユニット２４に配信する。
【００２８】
一実施形態では、機能ユニット２４の各々は、加算および減算の整数演算並びにシフト、ローテート，論理演算およびブランチオペレーションを実行するよう構成される。これらのオペレーションは、デコード・ユニット２０により特定の命令に関して解読された制御値に応答して実行される。また、機能ユニット２４は、ロード／格納ユニット２６により実行されるロードおよび格納メモリオペレーションに関してアドレスを生成するよう構成される。特定の一実施形態においては、各機能ユニット２４は、実行ユニットと独立したアドレス生成ユニットとを有する。これらの機能ユニットは、アドレス生成を行い、整数演算またはブランチオペレーションの実行と並行して、ロード／格納ユニット２６に搬送する。
【００２９】
機能ユニット２４の各々は、条件付きブランチ命令の実行に関する情報もブランチ予測ユニット１４に与える。ブランチ予測が誤っている場合は、ブランチ予測ユニット１４は、命令処理パイプラインに入った誤予測ブランチに続く命令を無効にして、命令キャッシュ１６またはメイン・メモリから必要な命令を取り出す。このような場合は、誤予測ブランチ命令の後のオリジナルのプログラム・シーケンスの命令の結果が廃棄される。これには、推論的に実行され、ロード／格納ユニット２６およびリオーダー・バッファ３２に一時的に格納されたものも含まれる。
【００３０】
機能ユニット２４が作成した結果は、レジスタ値が更新されていれば、リオーダー・バッファ３２に送られ、メモリ位置の内容が変更されていればロード／格納ユニット２６に送られる。その結果をレジスタに格納しようとする場合は、リオーダー・バッファ３２が、命令が解読された時にレジスタの値に関して確保された位置に、その結果を格納する。複数の結果バス３８は、機能ユニット２４とロード／格納ユニット２６からの結果の転送用に含まれる。結果バス３８は、生成された結果ならびに実行中の命令を識別するリオーダー・バッファ・タグを伝える。
【００３１】
ロード／格納ユニット２６は、機能ユニット２４とデータ・キャッシュ２８との間のインターフェースとなる。一実施形態では、ロード／格納ユニット２６には、保留中のロードまたは格納に関するデータおよびアドレス情報のための１２の格納位置を有するプレキャッシュ・ロード／格納バッファと、３２個のエントリを有するポストキャッシュ・ロード／格納バッファとが装備される。デコード・ユニット２０は、ロード／格納ユニット２６へのアクセスを調整する。バッファが満杯になると、ロード／格納ユニット２６に保留中のロードまたは格納リクエスト情報のための余地ができるまで、デコード・ユニットは待機しなければならない。ロード／格納ユニット２６は、データの一貫性を維持するために、保留中の格納メモリオペレーションに対し、ロード・メモリオペレーションの依存性のチェックも行う。メモリオペレーションとは、マイクロプロセッサ１０とメイン・メモリ・サブシステムとの間のデータ転送である。メモリオペレーションは、メモリに格納されるオペランドを利用する命令の結果であったり、あるいは、データ転送を行うが他のオペレーションは行わないロード／格納命令の結果の場合もある。さらに、ロード／格納ユニット２６は、セグメント・レジスタや、（公序良俗違反につき、不掲載）マイクロプロセッサ・アーキテクチャが定義するアドレス変換メカニズムに関わるその他のレジスタなど、特殊なレジスタのための特殊レジスタ記憶装置を備える。
【００３２】
データ・キャッシュ２８は、ロード／格納ユニット２６とメイン・メモリ・サブシステムとの間に転送されているデータを一時的に格納するために設けられる高速キャッシュ・メモリである。一実施形態では、データ・キャッシュ２８には、双方向の集合結合構造内に最大６４キロバイトのデータを格納する機能がある。データ・キャッシュ２８は、集合結合構造を含む種々の特定メモリ構造内に実現されることを理解頂きたい。
【００３３】
図２を参照して、ＦＰＵ３６の一実施形態の詳細が示される。他の実施形態も可能であり、考察される。ＦＰＵ３６は、クロック・サイクル毎に最大３つの新しい命令を受け入れることのできる、高性能のアウトオブオーダー実行ユニットである。この３つの命令は、（公序良俗違反につき、不掲載）浮動小数点命令，ＭＭＸ命令または３ＤＸ命令の任意の組み合わせとすることができる。ＭＭＸおよび３ＤＸ命令は、標準の（公序良俗違反につき、不掲載）命令セットを拡張したものである。３ＤＸ命令セット拡張の一例にAdvanced Micro Devices社の３ＤＮｏｗ！（商標）拡張がある。ＭＭＸ命令は、マルチメディアおよび二次元グラフィック用途向けのものであり、３ＤＸ命令はレンダリングおよびテクスチャ・マッピングなどの三次元グラフィック操作を実行するために最適化されている。多くの３ＤＸ命令は、複数の独立した対のオペランドに関して同じ演算を行うベクトル化された命令である。
【００３４】
図に示すように、ＦＰＵ３６のこの実施形態は、次のような構成部分からなる。すなわち、リネーム−１ユニット３１０，リネーム−２ユニット３１２，スケジューラ３１４，リタイア・キュー３１６，レジスタ・ファイル３１８，ロード／加算実行パイプライン３２０，ロード／乗算実行パイプライン３２２，ロード／格納実行パイプライン３２６，スキッド・バッファ３３４，変換分類ユニット３３６およびロード・マッパ３３８である。リネーム−１ユニット３１０は、リネーム−２ユニット３１２に結合され、推論的なトップオブスタック（ＴＯＳ：top of stack）タグとタグ・ワード３５２を受信するよう構成される。リネーム−２ユニット３１２は、フューチャ・ファイル・タグ・アレイ３２８，アーキテクチャ・タグ・アレイ３３０，リタイア・キュー３１６，スキッド・バッファ３３４，スケジューラ３１４およびロード・マッパ３３８に結合される。変換分類ユニット３３６も、ロード・マッパ３３８に結合され、これを介して命令ステータス・レジスタ・ファイル３４２およびスケジューラ３１４と共に、実行およびパイプライン制御ユニット３４０に結合される。レジスタ・ファイル３１８は、変換分類ユニット３３６，ロード・マッパ３３８およびスケジューラ３１４からの入力を受け取り、ソース・オペランド・バス３４８にデータを出力する。ソース・オペランド・バス３４８は、さらに実行パイプライン３２０，３２２，３２６に結合される。最後に、実行パイプライン３２０，３２２，３２６と浮動小数点ステータス／制御／タグ・ワード３４４がすべて結果バス３４６に結合される。浮動小数点ステータス／制御／タグ・ワード３４４と推論的トップオブスタックおよびタグ・ワード３５２は、図面では説明のために別々に図示されるが、これらのタグはフューチャ・ファイル・タグ３２８およびアーキテクチャ・タグ・アレイ３３０と共に、１つの格納場所、たとえばレジスタ・ファイル３１８，実行およびパイプライン制御ユニット３４０またはリタイア・キュー３１６内に格納してもよい。
【００３５】
リネーム−１ユニット３１０は、１クロック・サイクルにつき最大３つの命令を受け取る。前述の如く、これらは浮動小数点命令，ＭＭＸ命令および３ＤＸ命令の任意の組み合わせである。リネーム−１ユニット３１０は、スタック関連レジスタを絶対レジスタ数に変換する。メモリ・オペランドを伴う命令、たとえばＦＬＤ命令（浮動小数点ロード）に関しては、スタック関連参照（たとえば宛先ＳＴ（７））が絶対レジスタ数にマッピングされる。さらに、実施形態によっては、ＦＡＤＤ（ｍｅｍ）などのロード実行命令も、トップオブスタック関連アドレスから絶対アドレスへの変換を必要とする。このため、ある実施例では、ｘ８７型命令（すなわち浮動小数点命令）はスタックから絶対レジスタへの変換プロセスに入り、ＭＭＸおよび３ＤＮｏｗ！命令は入らない。（公序良俗違反につき、不掲載）命令セットおよびアーキテクチャは、８個の浮動小数点レジスタを定義し、これらはスタック類似の方式で（すなわち、トップオブスタック・ポインタに関して）アクセスされる。リネーム−１ユニット３１０は、各命令を３つの実行パイプラインの１つ，ロード／格納実行パイプライン３２６，ロード／加算実行パイプライン３２０またはロード／乗算実行パイプライン３２２に割り当てることも行い、必要に応じて、各命令を内部フォーマットに変換する。
【００３６】
リネーム−２ユニット３１２は、実際のレジスタのリネームを行う。リネーム−１ユニット３１０から命令を受け取ると、リネーム−２ユニット３１２はリタイア・キュー３１６内に格納される使用可能なレジスタの「フリー・リスト」から３つのレジスタ・タグを読み込む。レジスタが読み込まれると、リネーム−２ユニット３１２は、それを各命令の宛先レジスタに割り当てる。ソース・レジスタをリネームするには、リネーム−２ユニット３１２は各ソース・レジスタのための絶対レジスタ数を用いてタグ・フューチャ・ファイル３２８に指標を付ける。タグ・フューチャ・ファイル３２８は、どのレジスタがＦＰＵ３６内の１６個のアーキテクチャ・レジスタの各々の現在の推論的将来状態を格納しているかを識別するタグを格納する。同様に、アーキテクチャ・タグ・ファイル３３０は、レジスタ・ファイル３１８内のどのレジスタがＦＰＵ３６の現在のアーキテクチャ（推論的でない）状態を格納しているかを識別するタグを格納する。ＦＰＵ３６の状態（アーキテクチャまたは推論的）を定義する１６個のレジスタのうち、８個がアーキテクチャ・レジスタ（すなわち浮動小数点スタックまたはＭＭＸレジスタ）であり、８個がマイクロアーキテクチャ・レジスタ（すなわちプログラマが通常はアクセスできない内部状態情報を格納するレジスタ）であることに留意されたい。古い宛先レジスタ・タグがタグ・フューチャ・ファイル３２８から読み出されて、フリー・リストの末尾に書き込まれる。最後に、タグ・フューチャ・ファイル３２８は、新しい宛先レジスタのタグを格納することにより更新される。
【００３７】
メモリ・ソース・オペランドは、宛先レジスタと同じレジスタ・タグを割り当てることにより処理される。これは、ロード・データがロード／格納ユニット２６から受け取られると変換され、宛先レジスタに直接書き込まれるためである。ＦＬＤ命令の場合は、さらなる処理は必要でない（特定の例外的なケースを除いては）が、ＦＬＤ命令は、例外処理とリオーダー・バッファ３２への通知を完了するために、実行パイプラインに依然として割り当てられている。
【００３８】
この３つの命令が、リネーム−１ユニット３１０とリネーム−２ユニット３１２とを通過すると、命令は３オペランド・フォーマット（すなわち第１ソース・オペランド，第２ソース・オペランドおよび宛先オペランド）で表される。第１ソース・オペランドは常にレジスタ・オペランドであり、オペコード内のビットが用いられて、第２オペランドがレジスタ・オペランドであるかメモリ・オペランドであるかが示される。
【００３９】
命令は、リネーム−２ユニット３１２からスケジューラ３１４に伝えられ、そこで３つの命令に記憶装置の「ライン」が割り付けられる。スケジューラ３１４が満杯の場合は、命令はスケジューラ３１４内に余地ができるまでスキッド・バッファ３３４に格納される。スケジューラ３１４は、３つの命令を受け取ると、結果バス３４６とソース・オペランド・バス３４８とを検索する。また、スケジューラ３１４は、ロード・データ・バスも検索する。記憶装置のラインの割り付けと検索と平行して、リタイア・キュー３１６が各命令に１つのエントリを割り付ける。これらのエントリは、宛先レジスタ・タグ，絶対宛先レジスタ数および古い宛先レジスタ・タグを格納する。別の情報、たとえばリタイア時にアーキテクチャ状態を更新するために必要な情報も含まれることがある。
【００４０】
命令がスケジューラ３１４にはいると、次のサイクルで、命令はスケジュール設定のために利用することができるようになる。スケジューラ３１４は、格納されたすべての命令を検証し、次の基準を満たすもっとも古い命令を発する：（１）命令が割り当てられた実行パイプラインが使用可能である；（２）その実行パイプラインの結果バスが、命令が完了するクロック・サイクル内で使用可能になる（これは、その命令の待ち時間、レイテンシ、により決まる）；（３）命令のソース・レジスタまたはメモリ・オペランドが使用可能である。この実施例では、スケジューラ３１４は１クロック・サイクルにつき最大３つの命令のスケジュール設定をすることができる。３つの実行パイプライン３２０，３２２，３２６の各々は、クロック・サイクル毎に新しい命令を受け入れることができる。４つ以上など、別の数の命令を同時にスケジュール設定することのできる他の実施形態も可能であり、考察されることに注目されたい。
【００４１】
１つのラインの３つのエントリがすべてスケジュール設定されると、そのラインはスケジューラ３１４から解放される。命令がスケジューラ３１４からそれぞれの命令実行パイプラインに運ばれると、それらのソース・オペランドが読み込まれる。場合により、ソース・データがレジスタから来ることも、あるいはソース・データが「バイパス」から来ることもある。バイパスとは、結果をフォワーディング（転送）あるいはスーパーフォワーディングすることである。結果のフォワーディングには、最新の実行済み命令の結果を、その結果により他の命令に直接運ぶ動作が含まれる。結果のフォワーディングにより、その結果がレジスタに格納されるのを待ったり、レジスタから読み出さずに、その結果を次の命令に利用することができる。結果のスーパーフォワーディングについては、下記にさらに詳細に説明する。
【００４２】
各命令パイプライン３２０，３２２，３２６を４段のパイプラインとして構成することができる。各パイプラインの第１段階で、結果バスが読み込まれ、入力データがソース・オペランド・バス（データがレジスタ・ファイル３１８内にある場合）か、あるいは結果バス（バイパスが実行される場合）のいずれか一方から取り出される。ソース・データが受信されると、各実行パイプラインは適切な計算の実行を開始する。
【００４３】
図示される実施例では、実行パイプライン３２０がロードおよび加算演算を実行するように構成され、実行パイプライン３２２がロードおよび乗数演算を実行するよう構成され、実行パイプライン３２６がロードおよび格納演算を実行するように構成される。実行パイプライン３２０，３２２の両方を、特定のＭＭＸ命令を実行するよう構成することもできる。乗算器５０を含む実行パイプライン３２２は、制御ユニット３５４，除算／平方根ＲＯＭ３６０および剰余が要求される場合は、剰余制御ユニット３５６の制御下で、乗算たとえば逆分演算，除算演算および平方根演算などを含む反復計算を実行するように構成することもできる。定数ＲＯＭ３５８は、たとえばＦＬＤＰＩなどのロード定数命令や、超越数計算，ＦＰＵ３６自己チェックおよび特定の特殊例外結果のための複数の定数を格納するために構成される読み込み専用メモリである。除算／平方根ＲＯＭ３６０は、除算および平方根計算の初期値を決定するために用いられる定数と、ある種の３ＤＮｏｗ！命令により返される定数を格納する読み込み専用メモリである。制御ユニット３５４は、除算および平方根関数のための数列情報を提供する。実施形態によっては、制御ユニット３５４は、実行およびパイプライン制御ユニット３４０の一部である場合もあるので留意されたい。
【００４４】
場合により、浮動小数点命令オペランド、または命令を実行することにより発生する浮動小数点結果が小さすぎて、オペランドまたは結果の標準データ・フォーマット内に適合しないことがある。これらの数を「異常値（デノーマル）」と呼ぶ。正規化された浮動小数点値は、非ゼロの指数と、仮数の最上位ビット内の１すなわち、バイナリ基数点の左のビット（たとえば）１．００１０１０．．．）を有するが、異常値は、ゼロの指数と仮数の最上位ビット内のゼロ（たとえば）０．０００１０１．．．）で表される。異常値ロード・データは、変換分類ユニット３３６により検出され、タグを付される。実行パイプライン３２０，３２２，３２６内の実行中に発生する異常値の結果は、その発生時にタグが付される。実行およびパイプライン制御ユニット３４０は、異常値タグの存在を検知し、ＭＲＯＭ３４から適切なマイクロコード・ルーチンを呼び出して異常値データを処理する。
【００４５】
最終実行段階の最後で、データは結果バス３４６に入れられる。これで、結果のデータは、次のクロック・サイクル中に命令実行パイプラインの１つの第１段階に入る命令のために利用することができる。データが結果バスに入ると、レジスタ・ファイル３１８内にも書き込まれる。格納データはレジスタ・ファイル３１８には格納されずに、ロード／格納ユニット２６に送られる。しかし、場合によっては、格納データがロード／格納ユニット２６とレジスタ・ファイル３１８の両方に送られることもある（たとえば、浮動小数点ロード制御ワード命令−−ＦＬＤＣＷ(floating point load control word)−−や、異常値が格納されている場合に格納するために）。リオーダー・バッファ・タグと任意の例外情報とがリオーダー・バッファ３２に送り返される。この時点で命令は完了する。しかし、これらは依然として推論的である。命令がリオーダー・バッファ３２の底に着くと（ブランチの誤予測や例外中断がないと仮定して）、リオーダー・バッファ３２はＦＰＵ３６に対して、命令を引き上げる（リタイアさせる）べきであると通知する。リタイア・キュー３１６がアーキテクチャ・レジスタ・ファイル３２８のタグを更新する際に、この浮動小数点ユニット３６の推論状態がアーキテクチャ状態に反映され、リタイア・キュー３１６内の宛先レジスタ・タグがアーキテクチャ・レジスタ・ファイル３１８に書き込まれる。
【００４６】
【００４６】
変換分類ユニット３３６は、すべてのロード・データを受信し、データ・タイプによりそれを分類し、必要に応じて内部フォーマットに変換する。一実施形態では、変換分類ユニット３３６はそれぞれのデータ項目に３ビットの分類タグを添付する。３ビットのタグは、それを付けたデータを次の８つの可能性のあるデータ・タイプのうちの１つとして分類する：すなわち（１）ゼロ，（２）無限，（３）クワイエット型非数（quiet NaN），（４）信号型非数（signaling NaN），（５）異常値，（６）ＭＭＸ，（７）正常値または（８）対応なし（非サポート）である。NaNとは「数ではない（Not-a-Number）」の標準的な略語である。表現法は異なる実施形態により変わるが、ゼロ・データ・タイプは、通常ゼロの指数とゼロの仮数で表される。同様に無限データ・タイプは通常すべてのアサート化１よりなる指数で表される。クワイエット型非数（「ＱＮａＮ」）は、浮動小数点命令が無効の演算、たとえば負の数に関する平方根演算などを起こすと常に発生する。信号型非数（「ＳＮａＮ」）は、クワイエットＮａＮとは異なり、使用されると例外を発生する。信号型ＮａＮは、ＦＰＵ３６では発生せず、通常はプログラマが特定のエラー条件を知らせるために用いる。以下の表は、（公序良俗違反につき、不掲載）互換浮動小数点ユニットの各データ・タイプの特性を示す（（ｘ）は１またはゼロを表す）：
2004537084.tif 000003
これらのデータ・タイプはＩＥＥＥ−７５４仕様に準拠することに注目されたい。
【００４７】
ＭＭＸデータ・タイプは、６４ビット幅で、８個のパック８ビット・バイトと、４個のパック１６ビット・ワードまたは２個のパック３２ビット・ダブル・ワードにより構成される。ＭＭＸデータ・タイプは、それに先行するＭＭＸオペコードにより検出することができる。通常のデータ・タイプは、単精度，倍精度または拡張精度のいずれかである（内部データ・フォーマットへの変換前）であるか、前述のデータ・タイプのいずれの特性も持たない標準の浮動小数点値である。対応なしのデータ・タイプは、前述のデータ・タイプのいずれの範疇にも属さない、あるいはＩＥＥＥ標準７５４に定義される通常のデータ・タイプにはない拡張精度ビット・パターンである。たとえば、０サイン・ビット，バイアス指数１１．．．１１および０．１１．．．．１１のフォーマット（i.ff...ff）内の仮数をもつ拡張精度ビット・シーケンスが対応なしの値である（iは整数ビットであり、fは分数ビットである）。しかし、他の実施例では、より大きなあるいはより小さな分類タグと、これより多い、あるいはより少ないデータ・タイプが実行されることもあることに留意されたい。
【００４８】
上記に示されるデータ・タイプとフォーマット例は、変換分類ユニット３３６により受信識別された状態のデータを説明する。変換分類ユニット３３６がデータを分類すると、分類タグが用いられてデータ特性の一部あるいは全部を識別する。たとえば、ある値がゼロと分類されると、その値の指数および仮数部分の各ビットを広範囲に比較せずに、その分類タグのみで識別することができる。分類タグは、ＦＰＵ３６全体を通じてデータに付随し、そのデータと共にレジスタ・ファイル１８内に格納される。
【００４９】
上記の如く、ロード命令からデータがＦＰＵ３６により受信されると、そのデータは変換分類ユニット３３６に配信される。対応するリオーダー・バッファ・タグがそのデータに付随し、ロード・マッパ３３８に配信される。マイクロプロセッサ１０の説明で前述したように、リオーダー・バッファ・タグはアウトオブオーダー命令がリタイアすべき（すなわちアーキテクチャ状態に委ねられるべき）シーケンスを識別する。ロード命令に関しては、リオーダー・バッファ・タグはロード／格納ユニット２６からＦＰＵ３６へのデータに続く。ロード・マッパ３３８は、リオーダー・バッファ・タグを受け取り、それを物理的なレジスタ・タグに変換する。物理的レジスタ・タグは、そのデータに対応するレジスタ・ファイル３１８内のどのデータ・レジスタがロードされるかを示す。
【００５０】
実行およびパイプライン制御ユニット３４０は、実行パイプライン３２０，３２２，３２６の各段階の状態を追跡する。実行およびパイプライン制御ユニット３４０は、各実行パイプラインの将来的な使用可能性を判断することができるタイミング情報を含む。たとえば、ＦＭＵＬ（浮動小数点乗算）命令が乗算実行パイプライン３２２内で実行を開始すると、制御ユニット３４０はその格納されたタイミング情報を用いて、スケジューラ３１４に対し、４クロック・サイクル後に結果バス上にその結果を出力可能であると通知する。このタイミング情報により、スケジューラ３１４は、命令パイプライン３２０，３２２，３２６内での命令の実行を効率的にスケジュール設定することができる。制御ユニット３４０は、各パイプ段階のステータスも追跡して、実行パイプライン３２０，３２２，３２６からの例外を受信し、優先順位を付ける。
【００５１】
ＦＰＵステータス・ワード，制御ワードおよびタグ・ワード（集合的にワード３４４）は、リタイア・キュー３１６内に格納され、レジスタ・ファイル３１８内のどのステータス制御レジスタがＦＰＵの現在のアーキテクチャ状態を含むかを表す。たとえば、一実施形態では、レジスタ・ファイル３１８は、８８個のレジスタすなわちＦＰＵ３６の現在のアーキテクチャ状態（下記参照）を格納するための１６のレジスタと、ＦＰＵ３６の推論的状態を格納するための７２のレジスタとによって構成される。この７２の推論的レジスタのうち、１６が「現在の」推論的状態を格納する。ＦＰＵ３６の特定の状態（状態がアーキテクチャであろうと推論的であろうと）を格納する１６のレジスタの各集合のうち、８個のレジスタがＦＰＵスタック・レジスタであり、８個が、それだけがＦＰＵ３６内のマイクロコード命令にアクセスすることができる状態情報を格納するマイクロアーキテクチャ・レジスタである。すなわち、これらのレジスタにはプログラマはアクセスすることができず、内部状態情報だけを格納する。一実施形態では、レジスタ・ファイル３１４の各レジスタは９０ビット長で、そのうち８７ビットが内部フォーマット・データの記憶装置（たとえば１つの符号ビット，１８の指数ビット，６８ビットの仮数）となり、３つがクラス・ビットである。
【００５２】
命令ステータス・レジスタ・ファイル３４２は、実行およびパイプライン制御ユニット３４０のための情報を格納する。ＦＰＵ３６でアウトオブオーダーを実行する命令の結果として、命令パイプライン内に起こる例外は、それを発する命令がリタイアすべき次の命令となるまで、格納する必要がある。リタイア・キュー３１６が、命令をリタイアさせて、アーキテクチャ浮動小数点ステータス・ワード（ＦＰＳＷ：floating-point status word），浮動小数点制御ワード（ＦＰＣＷ：floating-point control word）およびタグ・ワード（集合的に３４４）をそれに応じて更新すると、リタイア・キュー３１６は、命令ステータス・レジスタ・ファイル３４２を読み込む。この情報は、現在の推論的トップオブスタック３５２によりリネーム−１ユニットに運ばれ、結果バス３４６上に伝えられる。
【００５３】
図３は、マイクロプロセッサ１００の機能面を示す簡単なブロック図である。図１および図２の特定のマイクロプロセッサ１０は、一般的に図３に示される機能に準拠することに留意されたい。図１および図２のものに対応する回路部分は、簡単明瞭にするために同じ番号を付される。
【００５４】
図３に示すマイクロプロセッサ１００の機能には、複数の整数実行パイプライン５４Ａ〜５４Ｃおよび浮動小数点スケジューラ５６に結合される命令ディスパッチャ５２が含まれる。電力管理制御ユニット５０は、命令ディスパッチャ５２と浮動小数点スケジューラ５６とに結合される。複数の浮動小数点実行パイプライン５８Ａ〜５８Ｃが、さらに浮動小数点スケジューラ５６に結合されて図示される。電力管理制御ユニット５０は、実行パイプライン５４Ａ〜５４Ｃおよび５８Ａ〜５８Ｃにも結合される。この点線で示された結合は、以下に説明する種々の性能抑制動作の制御を容易にする。
【００５５】
整数実行パイプライン５４の各々は、前述の図１の機能ユニット２４が実行するような整数命令を実行するための対応の実行ユニット６０Ａ〜６０Ｃを備える。各整数実行パイプライン５４は、図１に示されるデコード・ユニット２０とリザベーション・ステーション２２などの機能のような追加機能をさらに備える。ただし、これらの機能は、整数実行パイプライン５４の特定の実施形態では含まれないことがある。
【００５６】
命令ディスパッチャ５２は、命令ソース（図示せず）から整数実行パイプライン５４に命令を送付するよう構成される。一実施形態では、命令ディスパッチャ５２は、図１の命令整合ユニット１８の機能を含む。他の実施形態では、命令ディスパッチャ５２は、命令キューなどの命令を送付または発行するための代替の機構を装備することもあることに注目されたい。本明細書で用いる「送付（ディスパッチ）」は「発行（イシュー）」と同義に用いられる。
【００５７】
浮動小数点実行パイプライン５８の各々は、同様に実行ユニット６２Ａ〜６２Ｃを備え、このうちの少なくとも１つが浮動小数点命令を実行するよう構成される。浮動小数点実行パイプライン５８Ａ〜５８Ｃは、一般的に、たとえば図２のパイプライン３２０，３２２，３２６を表すが、他の実施形態では、浮動小数点実行パイプライン５８の各々で実行される代替のあるいは追加の機能（たとえば命令）を実行することができることに注目されたい。たとえば、一実施形態では、浮動小数点実行パイプライン５８の各々は、マイクロプロセッサ１００が対応するあらゆる種類の浮動小数点命令を実行するよう構成することができる。また、浮動小数点命令に加えて、浮動小数点実行パイプライン５８の各々は、ＭＭＸ命令などの他の命令タイプも所望であれば実行することができることにも注目されたい。
【００５８】
浮動小数点実行スケジューラ５６は、命令ディスパッチャ５２から送付された命令を受け取り、浮動小数点実行パイプライン５８内で実行するよう結合される。特定の一実施形態は、浮動小数点スケジューラ５６は、図２のスケジューラ３１４の機能を備えるが、他の実施形態では他の特殊な形態のスケジューラが採用されることもある。さらに別の実施形態では、命令ディスパッチャ５２は、浮動小数点実行パイプライン５８に直接的に命令を与えるよう構成することもできる。このような場合、浮動小数点スケジューラ５６は省略される。
【００５９】
電力管理制御ユニット５０は、マイクロプロセッサ１００の性能を抑制するためのいくつかの異なる技術のうち、任意の１つ以上の技術を実行するよう構成することができる。第１の性能抑制技術の実行においては、命令ディスパッチャ５２に命令ユニット６０へのファストパス命令の送付を制限させるよう、電力管理制御ユニット５０を構成することができる。さらに詳しくは、命令ディスパッチャ５２が、１サイクルにつき３つの命令という通常の最大ディスパッチ速度（本実施例）で命令を送付するのではなく、プログラマブル・レジスタ／カウンタ・ユニット５１内に格納される値に応じて、１サイクルにつき２つの命令のみ、または１サイクルに１つの命令という速度で命令を送付するように、ソフトウェアを通じて、電力管理制御ユニット５０のプログラマブル・レジスタ／カウンタ・ユニット５１をプログラムすることもできる。これにより、このモードでの動作中は、１つだけまたは２つの実行ユニット５４（格納値に応じて）が活動状態になる。たとえば、一実施形態では、電力管理制御ユニット５０のプログラマブル・レジスタ／カウンタ・ユニット５１に特定の値が格納されると、命令ディスパッチャ５２は命令実行パイプライン５４Ａのみに命令を送付して、実行ユニット６０Ａにより実行する。同様に、第２の特定値がプログラマブル・レジスタ／カウンタ・ユニット５１に格納されると、電力管理制御ユニット５０は命令ディスパッチャ５２に、整数実行パイプライン５４Ａおよび５４Ｂのみに命令を送らせて、実行ユニット６０Ａ，６０Ｂに実行させる。一実施形態では、無効信号（または無効ビット）が実行パイプラインに送られ、命令ディスパッチャ５２はそのパイプラインに命令を発しない。無効信号（または命令バスに伴う無効ビット）が命令ディスパッチャ５２から特定の実行パイプライン５４に運ばれると、実行パイプラインは、そのサイクルの間は、命令ディスパッチャ５２からの入力に応答しないよう構成されることもある。これで、たとえばパイプラインの入力に接続する入力ラッチまたはフリップフロップは、そのサイクルの間は新しい値を受信しない。これにより、過渡的な電力損失と全体の電力消費を軽減する。
【００６０】
第２の性能抑制技術の実行例においては、命令ディスパッチャ５２から整数命令パイプライン５４および／または浮動小数点スケジューラ５６への命令の送付を、各サイクル毎に、あるいは１サイクルおきに、あるいは２サイクルおきに、あるいは３サイクルおき（以下、任意のサイクルについて同様）に制限するように、電力管理制御ユニット５０を構成することができる。特定の一実施形態では、プログラマブル・レジスタ／カウンタ・ユニット５１に接続するカウンタ（またはカウンタ群）に、初期カウント値を設定して、そのカウント値は、マイクロプロセッサがある値、たとえば「０」になるまでマイクロプロセッサの各サイクル毎に小さくなるようにし、その後初期値にリセットして同様のカウント・サイクルを再開するように設定することもできる。命令ディスパッチャ５２を、カウンタが特定の値（複数の値）に達するときだけ整数実行パイプライン５４および／または浮動小数点スケジューラ５６に命令を送付するよう構成することができる。このようにして、たとえばプログラマブル・レジスタ／カウンタ・ユニット５１の指定されたカウンタ内に「２」の初期カウント値が格納されると、その値を「２」から「１」に、また「０」に減らして次にマイクロプロセッサ１００の連続クロック・サイクル上で「２」の値に戻すよう、電力管理制御ユニット５０を構成することもできる。電力管理制御ユニット５０は、「０」の値が対応するカウンタ内に含まれるサイクルの時だけ命令ディスパッチャ５２が命令を送付するようにして、２クロック・サイクルおきに整数実行パイプライン５４および／または浮動小数点スケジューラ５６に有効な命令が送られるようにする。この機能について、その他の特定の実行例も考察され、可能である。
【００６１】
第３の性能抑制技術の実行例においては、電力管理制御ユニット５０を同様に構成して、浮動小数点実行パイプライン５８への命令の送付を制御することができる。この要領で、マイクロプロセッサ１００の浮動小数点部分の性能が抑制あるいは制限されて、それにより整数実行パイプライン５４により実行されるプロセッサの整数機能の性能に影響を与えずに電力を節約することができる。特定の一実施形態においては、別のカウンタ（３ビット・カウンタなど）を、各浮動小数点実行ユニット６２（または各浮動小数点実行パイプライン５８）に対応してプログラマブル・レジスタ／カウンタ・ユニット５１内に設ける。各カウンタは、独立した値に設定することができる。各カウンタの値を電力管理制御ユニット５０が用いて、スケジューラ５６から各浮動小数点実行ユニット６２の各々に対する命令の発行を個別に制御する。このようにして、有効な命令を各サイクル毎に、あるいは１サイクルおきに、あるいは２サイクルおきに、あるいは３サイクルおき（以下、任意のサイクルにおいて同様）に、各浮動小数点実行ユニット６２に与えて、所望の電力節約を実現することができる。
【００６２】
さらに別の実施例において、電力管理制御ユニット５０は代替の方法で、あるいは追加的な方法で、他のプロセッサ・サブユニットの性能を抑制して、最大電力あるいは平均電力を基準にして電力の削減を図ることができる。たとえば、一実施形態では、命令キャッシュ１６および／またはデータ・キャッシュ２８（図１）に、１サイクルおきに、あるいは２サイクルおきになどだけリクエストを処理させるように、電力管理制御ユニット５０を構成することができる。マイクロプロセッサの他のサブユニットは、同様に電力管理制御ユニット５０により制御される。
【００６３】
最後に図４を参照して、電力管理制御ユニット５０を含む一実施形態のマイクロプロセッサ１０を利用するように構成されるコンピュータ・システム５００の一実施形態のブロック図を示す。マイクロプロセッサ１０は、バス・ブリッジ５０２を通じて様々なシステム構成部品に結合される。他の実施例も可能であり、考察される。図示されるシステムにおいては、メイン・メモリ５０４がメモリ・バス５０６を通じてバス・ブリッジ５０２に結合され、グラフィック・コントローラ５０８がＡＧＰバス５１０を通じてバス・ブリッジ５０２に結合される。最後に複数のＰＣＩ装置５１２Ａ〜５１２ＢがＰＣＩバス５１４を通じてバス・ブリッジ５０２に結合される。二次バス・ブリッジ５１６がさらにＥＩＳＡ／ＩＳＡバス５２０を通じて１つ以上のＥＩＳＡまたはＩＳＡ装置５１８への電気的インタフェースとなる。マイクロプロセッサ１０は、ＣＰＵバス５２４を通じてバス・ブリッジ５０２に結合される。
【００６４】
バス・ブリッジ５０２は、マイクロプロセッサ１０と、メイン・メモリ５０４と、グラフィック・コントローラ５０８と、ＰＣＩバス５１４に装着される装置との間のインタフェースとなる。バス・ブリッジ５０２に接続される装置の１つからオペレーションが受信されると、バス・ブリッジ５０２はそのオペレーションのターゲット（たとえば特定の装置またはＰＣＩバス５１４の場合は、ターゲットはＰＣＩバス５１４上にある）を識別する。バス・ブリッジ５０２は、オペレーションをターゲットの装置に配信する。バス・ブリッジ５０２は、一般にソース装置またはバスが用いるプロトコルから、ターゲット装置またはバスが用いるプロトコルにオペレーションを変換する。
【００６５】
ＰＣＩバス５１４のためのＩＳＡ／ＥＩＳＡバスへのインタフェースとなるのに加えて、二次バス・ブリッジ５１６は、所望の場合にさらに別の機能を装備する。たとえば、一実施形態では、二次バス・ブリッジ５１６は、ＰＣＩバス５１４の所有権を仲裁するマスタＰＣＩアービタ（図示せず）を備える。二次バス・ブリッジ５１６に外付けであるか、一体化される入力／出力コントローラ（図示せず）をコンピュータ・システム５００内に備えて、キーボードおよびマウス５２２や、種々のシリアルおよびパラレル・ポートの動作支援を所望により提供することもできる。他の実施形態では、外付けキャッシュ・ユニット（図示せず）をマイクロプロセッサ１０とバス・ブリッジ５０２との間のＣＰＵバス５２４にさらに結合することもある。あるいは、外付けキャッシュをバス・ブリッジ５０２に結合し、外付けキャッシュ用のキャッシュ制御論理をバス・ブリッジ５０２に組み込むこともできる。
【００６６】
メイン・メモリ５０４は、アプリケーション・プログラムが格納され、そこからマイクロプロセッサ１０が初めに実行するメモリである。適当なメイン・メモリ５０４は、ＤＲＡＭ（ダイナミック・ランダム・アクセス・メモリ）からなり、好ましくは、複数のＳＤＲＡＭ（同期ＤＲＡＭ）のバンクからなる。
【００６７】
ＰＣＩ装置５１２Ａ〜５１２Ｂは、たとえば、ネットワーク・インタフェース・カード，ビデオ・アクセラレータ，オーディオ・カード，ハード・ディスク・ドライブまたはフロッピー・ディスク・ドライブまたはドライブ・コントローラ，ＳＣＳＩ（スモール・コンピュータ・システム・インタフェース）アダプタおよび電話カードなど、種々の周辺装置を表す。同様に、ＩＳＡ装置５１８は、モデム，サウンド・カードなどの種々の周辺装置およびＧＰＩＢまたはフィールド・バス・インタフェース・カードなどの種々のデータ取得カードを表す。
【００６８】
グラフィック・コントローラ５０８は、ディスプレイ５２６上でのテキストおよび画像のレンダリングを制御するために設けられる。グラフィック・コントローラ５０８は、当技術では一般的に知られる通常のグラフィック・アクセラレータを具現して、メイン・メモリ５０４の内外に効果的に移動することのできる三次元データ構造を作成する。従って、グラフィック・コントローラ５０８は、バス・ブリッジ５０２内のターゲット・インタフェースへのアクセスを要求および受信して、メイン・メモリ５０４へのアクセスを得るという意味において、ＡＧＰバス５１０のマスタとなる。専用グラフィック・バスは、メイン・メモリ５０４からの迅速なデータ取得を行う。一定のオペレーションについて、ＡＧＰバス５１０上でＰＣＩプロトコルのトランザクションを生成するようグラフィック・コントローラ５０８をさらに構成することもできる。このようにして、バス・ブリッジ５０２のＡＧＰインタフェースは、ＰＣＩプロトコル・ターゲットと発起側のトランザクションだけでなく、ＡＧＰプロトコルのトランザクションを支援する機能も備える。ディスプレイ５２６は、画像またはテキストを表示することのできる任意の電子ディスプレイである。適当なディスプレイ５２６には、陰極線管（ＣＲＴ：cathode ray tube），液晶ディスプレイ（ＬＣＤ：liquid crystal display）などがある。
【００６９】
上記の説明では、ＡＧＰ，ＰＣＩおよびＩＳＡまたはＥＩＳＡバスが例として用いられるが、所望により任意のバス・アーキテクチャと置き換えることができることに留意されたい。さらに、コンピュータ・システム５００は、追加のマイクロプロセッサ（たとえばコンピュータ・システム５００のオプション構成部品として図示されるマイクロプロセッサ１０ａなど）を含む多重処理コンピュータ・システムとすることもできることに留意されたい。マイクロプロセッサ１０ａは、マイクロプロセッサ１０と同様である。さらに詳しくは、マイクロプロセッサ１０ａはマイクロプロセッサ１０と全く同じコピーでもよい。マイクロプロセッサ１０ａは、マイクロプロセッサ１０とＣＰＵバス５２４を共有することも、あるいは独立バスを介してバス・ブリッジ５０２に接続することもできる。
【００７０】
上記の実施例はかなり詳細に説明されたが、他の実施例も可能である。上記開示を完全に理解すれば当業者には数多くの変形や修正が明白であろう。添付の請求項は、これらすべての変形および修正を包括するものである。
【産業上の利用可能性】
【００７１】
本発明は、一般にマイクロプロセッサに適用できる。
【図面の簡単な説明】
【００７２】
本発明のその他の目的および利点は、詳細な説明と添付の図面とを参照することにより明らかになろう。本発明には種々の変更および代替の形式が可能であるが、その特定の実施形態が図面に例示され、本明細書内に詳細に説明される。しかし、それに関わる図面および詳細な説明は、開示する特定の形式に本発明を制約するものではなく、逆に本発明は、添付の請求項が定義する本発明の精神および範囲に入るすべての変更点、均等のものおよび代替形式を網羅するものである。
【図１】マイクロプロセッサの一実施形態のブロック図である。
【図２】図１のマイクロプロセッサ内の浮動小数点ユニットの一実施形態のブロック図である。
【図３】性能を抑制する電力管理制御ユニットを備えるマイクロプロセッサの機能の一実施形態のブロック図である。
【図４】図１のマイクロプロセッサを利用するよう構成されるコンピュータ・システムの一実施形態のブロック図である。
【図１】
2004537084.tif 000004
【図２】
2004537084.tif 000005
【図３】
2004537084.tif 000006
【図４】
2004537084.tif 000007
【国際公開パンフレット】
2004537084.tif 000008
2004537084.tif 000009
2004537084.tif 000010
2004537084.tif 000011
2004537084.tif 000012
2004537084.tif 000013
2004537084.tif 000014
2004537084.tif 000015
2004537084.tif 000016
2004537084.tif 000017
2004537084.tif 000018
2004537084.tif 000019
2004537084.tif 000020
2004537084.tif 000021
2004537084.tif 000022
2004537084.tif 000023
2004537084.tif 000024
2004537084.tif 000025
2004537084.tif 000026
2004537084.tif 000027
2004537084.tif 000028
2004537084.tif 000029
2004537084.tif 000030
【国際公開パンフレット（コレクトバージョン）】
2004537084.tif 000031
【国際調査報告】
2004537084.tif 000032
2004537084.tif 000033
2004537084.tif 000034