(57)【特許請求の範囲】
【請求項１】
レベル２キャッシュから命令バイトを受取り対応するプリデコード情報を生成するよう構成されるプリデコードユニットと、
前記プリデコードユニットに結合される命令キャッシュとを含み、前記命令キャッシュは、前記プリデコードユニットから前記命令バイトおよび前記プリデコード情報を受取り記憶するよう構成され、前記命令キャッシュは、前記命令バイトおよび前記プリデコード情報が置換されるのに応じて前記プリデコード情報の少なくとも一部を出力してレベル２キャッシュに記憶させるよう構成され、前記レベル２キャッシュは、パリティ情報を記憶するよう指定される記憶場所にプリデコード情報を記憶するよう構成される、マイクロプロセッサ。
【請求項２】
前記プリデコードユニットは、レベル２キャッシュから前記命令バイトに対応するプリデコード情報を受取るようさらに構成される、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記プリデコード情報は、開始ビット、終了ビットおよびｏｐコードビットのうち１つ以上を含む、請求項１に記載のマイクロプロセッサ。
【請求項４】
前記プリデコード情報は命令長情報を含む、請求項１に記載のマイクロプロセッサ。
【請求項５】
前記プリデコードユニットは、前記プリデコードユニットが予め定められた無効定数に等しいレベル２キャッシュからのプリデコード情報を受取るとき前記命令バイトについてのプリデコード情報を生成するよう構成される、請求項１に記載のマイクロプロセッサ。
【請求項６】
前記レベル２キャッシュに結合され、かつ主メモリから受取った命令バイトを検出すると、レベル２キャッシュに前記無効定数を記憶するよう構成される制御ユニットをさらに含む、請求項５に記載のマイクロプロセッサ。
【請求項７】
レベル２キャッシュから命令バイトを受取り対応するプリデコード情報を生成するよう構成されるプリデコードユニットと、
前記プリデコードユニットに結合される命令キャッシュとを含み、前記命令キャッシュは、前記プリデコードユニットから前記命令バイトおよび前記プリデコード情報を受取り記憶するよう構成され、前記命令キャッシュは、前記命令バイトおよび前記プリデコード情報が置換されるのに応じて前記プリデコード情報の少なくとも一部を出力してレベル２キャッシュに記憶させるよう構成され、前記レベル２キャッシュは、エラーチェックおよび訂正（ＥＣＣ）情報を記憶するよう指定される記憶場所にプリデコード情報を記憶するよう構成される、マイクロプロセッサ。
【請求項８】
前記プリデコードユニットは、レベル２キャッシュから前記命令バイトに対応するプリデコード情報を受取るようさらに構成される、請求項７に記載のマイクロプロセッサ。
【請求項９】
前記プリデコード情報は、開始ビット、終了ビットおよびｏｐコードビットのうち１つ以上を含む、請求項７に記載のマイクロプロセッサ。
【請求項１０】
前記プリデコード情報は命令長情報を含む、請求項７に記載のマイクロプロセッサ。
【請求項１１】
前記プリデコードユニットは、前記プリデコードユニットが予め定められた無効定数に等しいレベル２キャッシュからのプリデコード情報を受取るとき前記命令バイトについてのプリデコード情報を生成するよう構成される、請求項７に記載のマイクロプロセッサ。
【請求項１２】
前記レベル２キャッシュに結合され、かつ主メモリから受取った命令バイトを検出すると、レベル２キャッシュに前記無効定数を記憶するよう構成される制御ユニットをさらに含む、請求項１１に記載のマイクロプロセッサ。
【請求項１３】
主システムメモリから命令バイトを読出すステップと、
命令バイトに対応するプリデコード情報を生成するステップと、
命令バイトおよびプリデコード情報を命令キャッシュに記憶するステップと、
プリデコード情報に対応する命令バイトが命令キャッシュ中で上書きされるときプリデコード情報の少なくとも一部をレベル２キャッシュに出力して記憶させるステップとを含み、
前記出力ステップは、プリデコード情報をレベル２キャッシュに出力して、パリティ情報を記憶するよう構成される記憶場所に記憶させるステップを含む、方法。
【請求項１４】
前記生成ステップは、命令バイトのための以下のプリデコードビット、すなわち、開始ビット、終了ビットおよびｏｐコードビットのうち１つ以上を生成するステップを含む、請求項１３に記載の方法。
【請求項１５】
無効定数をレベル２キャッシュに記憶することによってレベル２キャッシュに記憶されるプリデコード情報を初期化するステップをさらに含む、請求項１３に記載の方法。
【請求項１６】
対応する命令バイトが変更された場合にプリデコード情報を再計算するステップをさらに含む、請求項１３に記載の方法。
【請求項１７】
主システムメモリから命令バイトを読出すステップと、
命令バイトに対応するプリデコード情報を生成するステップと、
命令バイトおよびプリデコード情報を命令キャッシュに記憶するステップと、
プリデコード情報に対応する命令バイトが命令キャッシュ中で上書きされるときプリデコード情報の少なくとも一部をレベル２キャッシュに出力して記憶させるステップとを含み、
前記出力ステップは、プリデコード情報をレベル２キャッシュに出力して、エラーチェックおよび訂正（ＥＣＣ）情報を記憶するよう構成される記憶場所に記憶させるステップを含む、方法。
【請求項１８】
前記生成ステップは、命令バイトのための以下のプリデコードビット、すなわち、開始ビット、終了ビットおよびｏｐコードビットのうち１つ以上を生成するステップを含む、請求項１７に記載の方法。
【請求項１９】
無効定数をレベル２キャッシュに記憶することによってレベル２キャッシュに記憶されるプリデコード情報を初期化するステップをさらに含む、請求項１７に記載の方法。
【請求項２０】
対応する命令バイトが変更された場合にプリデコード情報を再計算するステップをさらに含む、請求項１７に記載の方法。
【請求項２１】
複数のキャッシュメモリを有するコンピュータシステムを動作させるための方法であって、
第１のキャッシュメモリに命令プリデコード情報を記憶するステップと、
前記第１のキャッシュメモリ中の古いキャッシュエントリを新たなキャッシュエントリで上書きするステップと、
前記古いキャッシュエントリに対応する命令プリデコード情報を第１のキャッシュから第２のキャッシュメモリのエラーチェックおよび訂正部に退避させるステップとを含む、方法。
【請求項２２】
前記第２のキャッシュメモリのエラーチェックおよび訂正部は、第２のキャッシュメモリのパリティ部である、請求項２１に記載の方法。
【請求項２３】
前記命令プリデコード情報は、開始ビット、終了ビットおよびｏｐコードビットのうち１つ以上を含む、請求項２１に記載の方法。
【請求項２４】
コンピュータシステムであって、
レベル２キャッシュと、
前記レベル２キャッシュに結合されるマイクロプロセッサとを含み、前記マイクロプロセッサは、
前記レベル２キャッシュから命令バイトを受取り対応するプリデコード情報を生成するよう構成されるプリデコードユニットと、
前記プリデコードユニットから前記命令バイトおよび前記プリデコード情報を受取り記憶するよう構成される命令キャッシュとを含み、前記命令キャッシュは、前記命令バイトが置換されるときに前記対応するプリデコード情報の少なくとも一部を出力して前記レベル２キャッシュに記憶させるよう構成され、前記レベル２キャッシュは、複数の命令記憶場所と、対応する複数のエラーチェックおよび訂正（ＥＣＣ）記憶場所とを含み、前記レベル２キャッシュは、前記ＥＣＣ記憶場所に前記プリデコード情報を記憶するよう構成される、コンピュータシステム。
【請求項２５】
前記ＥＣＣ記憶場所はパリティ記憶場所である、請求項２４に記載のコンピュータシステム。
【発明の詳細な説明】
【０００１】
【発明の背景】
１．技術分野
この発明は、マイクロプロセッサに関し、より特定的には、マイクロプロセッサ内の可変長命令をデコードすることに関する。
【０００２】
２．背景技術
ｘ８６命令セットのために書かれたソフトウェアアプリケーションの数は、かなり多い。その結果、より新しくより進歩した命令セットの導入にもかかわらず、マイクロプロセッサの設計者は、ｘ８６命令セットを実行することのできるマイクロプロセッサを設計し続けてきた。
【０００３】
ｘ８６命令セットは、比較的複雑であり、複数個の可変長命令を特徴とする。ｘ８６命令セットを示す一般的なフォーマットを図１に示す。図に例示されるように、ｘ８６命令は、１から５のオプションのプレフィックスバイト１０２と、その後に続く操作コード（ｏｐコード）フィールド１０４と、オプションのアドレッシングモード（Ｍｏｄ  Ｒ／Ｍ）バイト１０６と、オプションのスケール−インデックス−ベース（ＳＩＢ）バイト１０８と、オプションの変位フィールド１１０と、オプションの即値データフィールド１１２とからなる。
【０００４】
操作コードフィールド１０４は、特定の命令のための基本操作を定義する。特定の操作コードのデフォルト操作は、１つ以上のプレフィックスバイト１０２によって変更可能である。たとえば、プレフィックスバイト１０２の１つを用いて、命令についてのアドレスまたはオペランドサイズを変更し、メモリアドレッシングに用いられるデフォルトセグメントを無効にし、または複数回ストリング操作を繰返すようプロセッサに命令することが可能である。操作コードフィールド１０４は、もし存在するならばプレフィックスバイト１０２の後に続き、１または２バイトの長さであってもよい。アドレッシングモード（Ｍｏｄ  Ｒ／Ｍ）バイト１０６は、使用されるレジスタおよびメモリアドレッシングモードを特定する。スケール−インデックス−ベース（ＳＩＢ）バイト１０８は、スケールファクタおよびインデックスファクタを用いる３２ビットベース相対アドレッシングにおいてのみ用いられる。ＳＩＢバイト１０８内のベースフィールドは、どのレジスタがアドレス計算のためのベース値を含むかを特定し、ＳＩＢバイト１０８内のインデックスフィールドは、どのレジスタがインデックス値を含むかを特定する。ＳＩＢバイト１０８内のスケールフィールドは、任意の変位とともにベース値に加算されるより前に、インデックス値に乗算される２のべきを特定する。次の命令フィールドは、変位フィールド１１０であり、これはオプションであり、１から４バイトの長さであってもよい。変位フィールド１１０は、アドレス計算に用いられる定数を含む。オプションの即値フィールド１１２は、これもまた１から４バイトの長さであってもよいが、命令オペランドとして用いられる定数を含む。最短のｘ８６命令は、１バイトのみの長さであり、単一の操作コードバイトを含む。８０２８６は、命令の最大長を１０バイトに設定し、８０３８６および８０４８６はどちらも、最大１５バイトの命令長を可能にする。
【０００５】
ｘ８６命令セットの複雑性は、高性能のｘ８６互換のマイクロプロセッサを実現する際に多くの困難を提起する。特に、ｘ８６命令の可変長は、命令のデコードを困難にする。命令のデコードは典型的には、命令の境界を決定し、次に命令内の各フィールド、たとえば操作コードフィールドおよびオペランドフィールドを特定することを伴なう。デコードは典型的には、命令が実行されるより前に命令キャッシュからフェッチされるときに起こる。
【０００６】
命令の境界を決定するためのある方法は、主メモリから読出され命令キャッシュに記憶される際に各命令バイトについて１つ以上のプリデコードビットを生成しかつ記憶することを伴なう。プリデコードビットは、それが関連付けられる命令バイトについての情報を与える。たとえば、アサートされたプリデコード開始ビットは、関連付けられた命令バイトが命令の第１のバイトであることを示す。特定の命令バイトについての開始ビットが一旦計算されると、それは命令バイトとともに命令キャッシュ内に記憶される。「フェッチ」が実行されるとき、多数の命令バイトが命令キャッシュから読出され、実行のための準備としてデコードされる。関連付けられた開始ビットはいずれも、フェッチとともに個々の命令のための有効マスクを生成するためにスキャンされる。有効マスクは、各ビットが特定の命令バイトに対応している一連のビットである。命令の第１のバイト、命令の最終バイト、および命令の第１のバイトと最終バイトとの間にあるすべてのバイトに関連付けられる有効マスクビットがアサートされる。すべての他の有効マスクビットは、アサートされない。有効マスクが計算されると、それを用いて他の命令からのバイトをマスク消去（mask-off）可能である。
【０００７】
図２を次に参照すると、例示の有効マスクが示される。図は、フェッチ１２０の一部と、その関連付けられた開始ビット１２２とを示す。命令Ｂ１２８のための有効マスク１２６が生成されるべきであると想定すると、開始ビット１２２Ａと、開始ビット１２２Ｂとの間のすべてのビットがアサートされてマスク１２６を生成する。一旦生成されると次に、有効マスク１２６を用いて、命令Ｂ１２８の一部ではないフェッチ１２０内のすべてのバイトをマスク消去可能である。
【０００８】
上の記載が示すように、プリデコード情報は、デコード回数を低減するために特に有用であるだろう。命令キャッシュ内に命令バイトとともにプリデコード情報を記憶することによって、対応する命令が複数回（たとえばループで）実行されたとしても、プリデコード情報は１回計算されるだけで済む。しかし、残念ながら、命令が置換されるかまたは命令キャッシュから廃棄されるとき、関連付けられたプリデコード情報はいずれも失われる。次に命令が命令キャッシュに読出されるときに、プリデコード情報はまたもや生成されなければならない。プリデコード情報が計算されるのを待つことによって生じる時間遅延は、分岐予測誤りまたはキャッシュミスの結果として命令が命令キャッシュに読出されるとき特に性能を損なう可能性がある。必要とされるより前に投機的にプリフェッチされる命令とは対照的に、分岐予測誤りまたはキャッシュミスによって生じるフェッチは、要求された命令を受取るのを待つ間にマイクロプロセッサのデコーダおよび機能ユニットをストールさせてしまう可能性がある。この場合には、プリデコード情報を発生するために必要とされる時間は、マイクロプロセッサの性能にかなりの影響を与え兼ねない。
【０００９】
これらおよび他の理由のために、プリデコード回数を低減するための方法および装置が所望される。特に、命令キャッシュから先に廃棄されてしまった命令についてのプリデコード情報を生成するために必要とされる時間を減ずるための方法および装置が所望される。
【００１０】
【発明の開示】
以上に概略した課題は、レベル２キャッシュにプリデコード情報を記憶することのできるマイクロプロセッサによって大部分解決される。ある実施例では、マイクロプロセッサは、プリデコード情報または対応する命令バイトのいずれかが命令キャッシュ内で置換されるときレベル２キャッシュ内にプリデコード情報を記憶するよう構成可能である。
【００１１】
ある実施例では、マイクロプロセッサは、プリデコードユニットおよび命令キャッシュを含む。プリデコードユニットは、レベル２キャッシュから命令バイトを受取り対応するプリデコード情報を生成するよう構成される。命令キャッシュは、プリデコードユニットに結合され、２つの複数個の記憶場所：命令バイトを記憶するためのものと、命令バイトに対応するプリデコード情報を記憶するための第２のものとを含む。命令キャッシュは、命令バイトを受取り記憶しかつプリデコードユニットからの情報をプリデコードするよう構成可能である。命令キャッシュはまた、命令バイトおよび対応するプリデコード情報が命令キャッシュ内で置換されるとき対応するプリデコード情報の少なくとも一部を出力するよう構成可能である。プリデコード情報は出力されレベル２キャッシュ内に記憶され得る。命令キャッシュ内で置換された後およびレベル２キャッシュ内で置換されるより前に同じ命令バイトが必要とされる場合、命令バイトおよび命令に付随するプリデコード情報は、レベル２キャッシュから取出し可能である。有利なことには、命令バイトをプリデコードすることの遅延は、いくつかの場合においては回避可能である。
【００１２】
別の実施例では、プリデコード情報は、パリティおよびまたはエラーチェックおよび訂正情報を記憶するよう構成されるレベル２キャッシュ内の記憶場所に記憶され得る。パリティおよびまたはエラーチェックおよび訂正記憶場所を用いることによって、レベル２キャッシュ構成への変更を低減したり排除したりすることが可能である。
【００１３】
さらに別の実施例では、無効定数が、有効プリデコード情報をまだ有していない命令バイトのためにレベル２キャッシュ内に記憶され得る。プリデコードユニットは、レベル２キャッシュから命令バイトを読出すときに無効定数を検出し、これに応答して新しいプリデコード情報を計算するよう構成され得る。
【００１４】
可変長命令をプリデコードするための方法もまた企図される。ある実施例では、この方法は、主システムメモリから命令バイトを読出し、命令バイトに対応するプリデコード情報を生成するステップを含む。命令バイトおよびプリデコード情報は、命令キャッシュ内に記憶される。プリデコード情報に対応する命令バイトが命令キャッシュ内で上書きされるとき、プリデコード情報の少なくとも一部がレベル２キャッシュに出力され記憶される。プリデコード情報はやはり、パリティおよびまたはエラーチェックおよび訂正データを記憶するよう構成されるレベル２キャッシュ内の記憶場所内に記憶され得る。
【００１５】
プリデコードデータを記憶するよう構成されるコンピュータシステムもまた企図される。ある実施例では、コンピュータシステムは、レベル２キャッシュおよびマイクロプロセッサを含んでもよい。マイクロプロセッサは、レベル２キャッシュに結合されてもよく、上述したようにプリデコードユニットおよび命令キャッシュで構成されてもよい。プリデコードユニットは、レベル２キャッシュから命令バイトを受取り対応するプリデコード情報を生成するよう構成されてもよい。命令キャッシュは、プリデコードユニットに結合されてもよく、前記命令バイトが置換されたときその記憶されたプリデコード情報の少なくとも一部を出力してレベル２キャッシュ中に記憶するように構成されてもよい。レベル２キャッシュは、パリティおよびまたはエラーチェックおよび制御データを記憶するよう構成される記憶場所内に命令キャッシュからのプリデコード情報を記憶するよう構成されてもよい。
【００１６】
この発明の他の目的および利点は、以下の詳細な記載を読みかつ添付の図面を参照すると明らかとなるであろう。
【００１７】
この発明は、さまざまな変形および代替の態様を受入れるが、その具体的な実施例は、図面に例として示され、ここに詳細に記載される。しかしながら、図面およびその詳細な記載は、開示される特定の態様にこの発明を限定するものではなく、反対に、その意図は、前掲の特許請求の範囲によって定義されるようなこの発明の範囲内にあるすべての変形、等価および代替を含むものであることが理解されるべきである。
【００１８】
【発明を実施するモード】
ここで図３を参照すると、マイクロプロセッサ１０のある実施例のブロック図が示される。マイクロプロセッサ１０は、プリフェッチ／プリデコードユニット１２と、分岐予測ユニット１４と、命令キャッシュ１６と、命令整列ユニット１８と、複数個のデコードユニット２０Ａ〜２０Ｃと、複数個のリザベーションステーション２２Ａ〜２２Ｃと、複数個の機能ユニット２４Ａ〜２４Ｃと、ロード／ストアユニット２６と、データキャッシュ２８と、レジスタファイル３０と、リオーダバッファ３２と、ＭＲＯＭユニット３４とを含む。特定の参照番号が文字の後に付されているここに参照される要素は、参照番号のみによって集合的に参照されることがある。たとえば、リザベーションステーション２２Ａ〜２２Ｃは、リザベーションステーション２２として集合的に参照されることがある。
【００１９】
プリフェッチ／プリデコードユニット１２は、主メモリサブシステム（図示せず）からの命令を受取るよう結合され、さらに命令キャッシュ１６および分岐予測ユニット１４に結合される。同様に、分岐予測ユニット１４は、命令キャッシュ１６に結合される。分岐予測ユニット１４はまた、命令整列ユニット１８および機能ユニット２４Ａ〜Ｃに結合される。命令キャッシュ１６はさらに、ＭＲＯＭユニット３４および命令整列ユニット１８に結合される。命令整列ユニット１８は、ロード／ストアユニット２６におよびそれぞれのデコードユニット２０Ａ〜Ｃに結合される。それぞれのデコードユニット２０Ａ〜Ｃは、リザベーションステーション２２Ａ〜Ｃに結合され、これはさらにそれぞれの機能ユニット２４Ａ〜Ｃに結合される。加えて、命令整列ユニット１８およびリザベーションステーション２２は、レジスタファイル３０およびリオーダバッファ３２に結合される。機能ユニット２４は、ロード／ストアユニット２６、レジスタファイル３０およびリオーダバッファ３０にも結合される。データキャッシュ２８は、ロード／ストアユニット２６におよび主メモリサブシステムに結合される。最後に、ＭＲＯＭユニット３４は、命令整列ユニット１８に結合される。
【００２０】
命令は、プリフェッチ／プリデコードユニット１２によって主メモリからプリフェッチされる。プリフェッチ／プリデコードユニット１２は、可変長命令を固定長命令にプリデコードし、これは次に命令キャッシュ１６内に記憶される。命令は、それらが実際にプリフェッチ方式を用いることによって要求されるより前にプリフェッチおよびプリデコード可能である。さまざまなプリフェッチ方式が、プリフェッチ／プリデコードユニット１２によって採用可能である。プリデコードユニット１２および命令キャッシュ１６のさらに詳細な記載に進む前に、図に示される例示のマイクロプロセッサ１０の実施例に関する一般的な局面を記載する。
【００２１】
マイクロプロセッサ１０は、条件付き分岐命令の後の命令を投機的にフェッチするために分岐予測を採用し得る。分岐予測ユニット１４は、分岐予測操作を実行するために含まれる。ある実施例では、最大２つの分岐ターゲットアドレスが、命令キャッシュ１６中に各キャッシュラインの各１６バイト部分ごとに記憶される。プリフェッチ／プリデコードユニット１２は、特定のラインがプリデコードされると最初の分岐ターゲットを決定する。キャッシュラインに対応する分岐ターゲットに対するその後の更新は、キャッシュライン内の命令の実行によって起こり得る。命令キャッシュ１６は、分岐予測ユニット１４にフェッチされるべき命令アドレスの表示を与える。これは、分岐予測ユニット１４が分岐予測を形成するときにどの分岐ターゲットアドレスを選択すべきかを決定することを可能にする。命令整列ユニット１８および機能ユニット２４は、分岐予測ユニット１４に更新情報を与える。分岐予測ユニット１４は、キャッシュラインの１６バイト部分当り２個のターゲットを記憶するので、ライン内のいくつかの分岐命令についての予測は、分岐予測ユニット１４中に記憶されないかもしれない。命令整列ユニット１８は、分岐予測ユニット１４によって予測されなかった分岐命令を検出するよう構成され得る。機能ユニット２４は、分岐命令を実行し、予測された分岐方向が予測誤りでなかったかどうかを決定する。分岐方向は、その後の命令が分岐命令のターゲットアドレスからフェッチされる場合には「テイクン」であり得る。反対に、分岐方向は、その後の命令が分岐命令に連続するメモリ場所からフェッチされる場合には「ノットテイクン」であり得る。予測誤りされた分岐命令が検出されると、予測誤りされた分岐の後に続く命令は、マイクロプロセッサ１０のさまざまなユニットから廃棄される。さまざまな好適な分岐予測アルゴリズムが、分岐予測ユニット１４によって採用可能である。
【００２２】
命令キャッシュ１６は、プリフェッチ／プリデコードユニット１２から受取られた命令を記憶するために設けられる高速キャッシュメモリである。記憶された命令は次に、命令キャッシュ１６からフェッチされ、命令整列ユニット１８に転送される。ある実施例では、命令キャッシュ１６は、セットアソシアティブ構造として構成可能である。命令キャッシュ１６は加えて、アクセス時間を早めるためにウェイ予測方式を採用してよい。たとえば、命令の各ラインを識別するタグにアクセスしタグをフェッチアドレスと比較してウェイを選択する代わりに、命令キャッシュ１６は、アクセスされるウェイを予測し得る。この態様では、ウェイは、アレイにアクセスするより前に投機的に選択される。ウェイ予測を用いて、命令キャッシュ１６のアクセス時間は、ダイレクトマッピングされたキャッシュと同様になり得る。命令バイトが読出された後、ベリフィケーションのためにタグ比較が実行される。ウェイ予測が正しくなければ、正しい命令バイトがフェッチされ、正しくない命令バイト（処理パイプラインのさらに下方にある）は、廃棄される。なお、命令キャッシュ１６は、フルアソシアティブ構成、セットアソシアティブ構成またはダイレクトマップド構成で実現可能である。
【００２３】
ＭＲＯＭユニット３４は、「高速パス命令」のシーケンスを記憶するよう構成されるリードオンリメモリである。高速パス命令は、デコーダ２０Ａ〜Ｃおよび機能ユニット２４Ａ〜Ｃによってデコードおよび実行され得る命令である。対照的に、「ＭＲＯＭ命令」は、デコーダ２０Ａ〜Ｃおよび機能ユニット２４Ａ〜Ｃが直接デコードまたは実行するには複雑すぎる命令である。命令キャッシュ１６がＭＲＯＭ命令を出力すると、ＭＲＯＭユニット３４は、高速パス命令のシーケンスを出力することによって応答する。より具体的には、ＭＲＯＭユニット３４は、ＭＲＯＭ命令を構文解析しかつ定義された高速パス命令のサブセットに変換して所望の操作を実行する。ＭＲＯＭユニット３４は、高速パス命令のサブセットをデコードユニット２０Ａ〜Ｃにディスパッチする。
【００２４】
一旦命令バイトが命令キャッシュ１６からフェッチされると、それらは命令整列ユニット１８に送られる。命令整列ユニット１８は、デコードユニット２０Ａ〜Ｃの１つに命令を送る。レジスタオペランド情報もまた検出されレジスタファイル３０およびリオーダバッファ３２に送られる。加えて、もし命令が１つ以上のメモリ操作が実行されることを要求するならば、命令整列ユニット１８は、メモリ操作をロード／ストアユニット２６にディスパッチする。デコードされた命令の各々は、命令に含まれ得る変位または即値データおよびオペランドアドレス情報とともにリザベーションステーション２２にディスパッチされる。
【００２５】
マイクロプロセッサ１０は、飛越し実行をサポートし、したがってリオーダバッファ３２を採用してレジスタ読出および書込操作のための元々のプログラムシーケンスを追跡し、投機的命令実行および分岐予測誤り復旧を可能にするためにレジスタリネーミングを実現し、正確な例外を促進する。レジスタの更新を伴なう命令がデコードされると、リオーダバッファ３２内の一時記憶場所が確保される。一時記憶場所は、命令の投機的実行から生じる投機的レジスタ状態を記憶する。分岐予測が正しくなければ、予測誤りされた経路とともに投機的に実行された命令からの結果は、それらがレジスタファイル３０に書込まれる前にリオーダバッファ３２中で無効化され得る。同様に、特定の命令が例外を引起こした場合、例外を引起こした命令の後に続く命令が廃棄され得る。この態様では、例外は、「正確である」（すなわち、例外を引起す命令の後に続く命令は、例外より前に完了されない）。なお、特定の命令は、それがプログラム順序で特定の命令に先行する命令より前に実行されるならば、投機的に実行される。先行する命令は、分岐命令または例外を引起す命令であり得、この場合には、投機的結果は、リオーダバッファ３２によって廃棄され得る。
【００２６】
命令整列ユニット１８の出力に与えられるデコードされた命令および即値データまたは変位データは、それぞれのリザベーションステーション２２に直接送られる。ある実施例では、各リザベーションステーション２２は、対応する機能ユニットへの発行を待っている最大３個のペンディングの命令についての命令情報（すなわち、デコードされた命令ならびにオペランド値、オペランドタグおよび／または即値データ）を保持することができる。なお、図に示す実施例では、各リザベーションステーション２２は、専用の機能ユニット２４に関連付けられる。したがって、３つの専用の「発行位置」が、リザベーションステーション２２および機能ユニット２４によって形成される。言い換えれば、発行位置０は、リザベーションステーション２２Ａおよび機能ユニット２４Ａによって形成される。整列させられリザベーションステーション２２Ａにディスパッチされた命令は、機能ユニット２４Ａによって実行される。同様に、発行位置１は、リザベーションステーション２２Ｂおよび機能ユニット２４Ｂによって形成され、発行位置２は、リザベーションステーション２２Ｃおよび機能ユニット２４Ｃによって形成される。
【００２７】
特定の命令がデコードされると、要求されるオペランドがレジスタ場所であれば、レジスタアドレス情報は、リオーダバッファ３２およびレジスタファイル３０に同時に送られる。当業者は、ｘ８６レジスタファイルが８個の３２ビット実レジスタ（すなわち、ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩおよびＥＳＰと典型的に呼ばれる）を含むことを認めるであろう。ｘ８６マイクロプロセッサアーキテクチャを採用するマイクロプロセッサ１０の実施例では、レジスタファイル３０は、３２ビット実レジスタの各々について記憶場所を含む。さらなる記憶場所が、レジスタファイル３０内に含まれＭＲＯＭユニット３４によって使用されてもよい。リオーダバッファ３２は、これらのレジスタの内容を変更することによって飛越し実行を可能にする結果のための一時記憶場所を含む。リオーダバッファ３２の一時記憶場所は、デコードされると実レジスタの１つの内容を変更するよう決定される各命令ごとに確保される。したがって、特定のプログラムの実行中のさまざまな点で、リオーダバッファ３２は、所与のレジスタの投機的に実行された内容を含む１つ以上の場所を有し得る。
【００２８】
所与の命令のデコードの後に、リオーダバッファ３２が、先行の場所または所与の命令中のオペランドとして用いられるレジスタに割当てられる場所を有していると決定されたならば、リオーダバッファ３２は、対応するリザベーションステーションに、１）最も最近に割当てられた場所の値、または２）先の命令をやがて実行するであろう機能ユニットによって値がまだ発生されていない場合、最も最近に割当てられた場所についてのタグのいずれかを転送する。リオーダバッファ３２が所与のレジスタについて確保された場所を有していれば、オペランド値（またはリオーダバッファタグ）は、レジスタファイル３０からではなくリオーダバッファ３２から与えられる。要求されるレジスタについて確保された場所がリオーダバッファ３２中になければ、値はレジスタファイル３０から直接取られる。オペランドがメモリ場所に対応していれば、オペランド値は、ロード／ストアユニット２６を介してリザベーションステーションに与えられる。
【００２９】
ある特定の実施例では、リオーダバッファ３２は、ユニットとして同時にデコードされた命令を記憶しかつ操作するよう構成される。この構成は、ここでは「ライン指向」と呼ばれる。いくつかの命令をともに操作することによって、リオーダバッファ３２内に採用されるハードウェアが簡素化され得る。たとえば、この実施例に含まれるライン指向のリオーダバッファは、１つ以上の命令が命令整列ユニット１８によってディスパッチされるたびに、３個の命令に付属する命令情報のために十分な記憶装置を割当てる。対照的に、実際にディスパッチされる命令の数に依存して、可変量の記憶装置が従来のリオーダバッファに割当てられる。比較的より数の多い論理ゲートが、可変量の記憶装置を割当てるために必要とされるであろう。同時にデコードされた命令の各々が実行されると、命令結果は、レジスタファイル３０中に同時に記憶される。次に記憶装置は、同時にデコードされた命令の別の組に自由に割当てられる。加えて、制御論理はいくつかの同時にデコードされた命令にわたって償却されるので、命令当り採用される制御論理回路の量は低減される。特定の命令を識別するリオーダバッファタグは、２つのフィールド：ラインタグおよびオフセットタグに分割され得る。ラインタグは、特定の命令を含む同時にデコードされた命令の組を識別し、オフセットタグは、組内のどの命令が特定の命令に対応するかを識別する。なお、命令結果をレジスタファイル３０に記憶し対応する記憶装置を自由にすることを、命令を「リタイアする」と言う。さらになお、いかなるリオーダバッファ構成が、マイクロプロセッサ１０のさまざまな実施例において採用されてもよい。
【００３０】
先に記したように、リザベーションステーション２２は、命令が対応する機能ユニット２４によって実行されるまで命令を記憶する。命令は、もし（ｉ）その命令のオペランドが与えられてしまっており、（ii）同じリザベーションステーション２２Ａ〜２２Ｃ内にあり、かつプログラム順序でその命令より前にある命令についてのオペランドがまだ与えられていないならば、選択され実行される。なお、命令が機能ユニット２４の１つによって実行されると、その命令の結果は、その結果を待っているいずれかのリザベーションステーション２２に直接送られ、同時に結果はリオーダバッファ３２を更新するために送られる（この技術は、普通「結果転送」と呼ばれている）。命令は、関連付けられる結果が転送されるクロックサイクル中に、実行のために選択され機能ユニット２４Ａ〜２４Ｃに送られ得る。リザベーションステーション２２は、この場合、転送された結果を機能ユニット２４に送る。
【００３１】
ある実施例では、各機能ユニット２４Ａ〜Ｃは、加算および減算の整数算術演算、ならびにシフト、循環、論理演算および分岐操作を実行するよう構成される。なお、浮動小数点ユニット（図示せず）もまた、浮動小数点演算を可能にするために採用されてもよい。浮動小数点ユニットは、コプロセッサとして動作してよく、ＭＲＯＭユニット３４から命令を受取りその後にリオーダバッファ３２と交信して命令を完了する。加えて、機能ユニット２４は、ロード／ストアユニット２６によって実行されるロードメモリ操作およびストアメモリ操作のためのアドレス生成を行なうよう構成され得る。
【００３２】
機能ユニット２４の各々はまた、条件付き分岐命令の実行に関する情報を分岐予測ユニット１４に与える。分岐予測が正しくなかった場合、分岐予測ユニット１４は、命令処理パイプラインに入った予測誤りされた分岐の後の命令をフラッシュ(flush)し、命令キャッシュ１６または主メモリから要求される命令のフェッチを起こさせる。なお、そのような状況においては、投機的に実行され、一時的にロード／ストアユニット２６およびリオーダバッファ３２中に記憶されたものを含む、予測誤りされた分岐命令の後に起こる元々のプログラムシーケンス中の命令の結果は廃棄される。
【００３３】
機能ユニット２４によって発生された結果は、レジスタ値が更新されている場合にはリオーダバッファ３２に送られ、メモリ場所の内容が変更される場合にはロード／ストアユニット２６に送られる。結果がレジスタに記憶されるべきであれば、リオーダバッファ３２は、命令がデコードされたときレジスタの値のために確保された場所に結果を記憶する。複数個の結果バス３８が、機能ユニット２４およびロード／ストアユニット２６からの結果の転送のために含まれる。結果バス３８は、生成された結果、および実行されている命令を識別するリオーダバッファタグを送る。
【００３４】
ロード／ストアユニット２６は、機能ユニット２４とデータキャッシュ２８との間にインターフェイスを与える。ある実施例では、ロード／ストアユニット２６は、ロードまたはストアをペンディングするためにデータおよびアドレス情報のための８個の記憶場所を有するロード／ストアバッファで構成される。バッファが一杯になると、命令整列ユニット１８は、ロード／ストアユニット２６がペンディングのロードまたはストア要求情報のための空きを有するまで待つ。ロード／ストアユニット２６はまた、ペンディングのストアメモリ操作に対してロードメモリ操作の依存性チェックを行ない、確実にデータコヒーレンシを維持する。メモリ操作は、マイクロプロセッサ１０と主メモリサブシステムとの間のデータの転送である。メモリ操作は、メモリに記憶されるオペランドを利用する命令の結果であってもよく、またはデータ転送をもたらすが他の操作をもたらさないロード／ストア命令の結果であってもよい。加えて、ロード／ストアユニット２６は、ｘ８６マイクロプロセッサアーキテクチャによって定義されるアドレス変換メカニズムに関連するセグメントレジスタおよび他のレジスタなどの特殊レジスタについての特殊レジスタ記憶装置を含み得る。
【００３５】
ある実施例では、ロード／ストアユニット２６は、ロードメモリ操作を投機的に実行するよう構成される。ストアメモリ操作は、プログラム順序で実行可能であるが、予測されたウェイに投機的に記憶されてもよい。予測されたウェイが正しくなければ、ストアメモリ操作の前のデータは、予測されたウェイにその後にリストアされ、ストアメモリ操作は、正しいウェイに実行される。別の実施例では、ストアはまた投機的に実行されてもよい。投機的に実行されたストアは、更新より前にキャッシュラインのコピーとともにストアバッファに置かれる。投機的に実行されたストアが分岐予測誤りまたは例外のために後に廃棄されるならば、キャッシュラインは、バッファ中に記憶された値にリストアされ得る。なお、ロード／ストアユニット２６は、投機的実行なしを含む、いかなる量の投機的実行を行なうよう、構成されてもよい。
【００３６】
データキャッシュ２８は、ロード／ストアユニット２６と主メモリサブシステムとの間で転送されるデータを一時的に記憶するために設けられる高速キャッシュメモリである。ある実施例では、データキャッシュ２８は、８ウェイのセットアソシアティブ構造で最大１６キロバイトのデータを記憶する容量を有する。命令キャッシュ１６と同様に、データキャッシュ２８は、ウェイ予測メカニズムを採用し得る。データキャッシュ２８は、セットアソシアティブ構成およびダイレクトマップド構成を含む、さまざまな特殊メモリ構成で実現され得る。
【００３７】
ｘ８６マイクロプロセッサアーキテクチャを採用するマイクロプロセッサ１０のある特定の実施例においては、命令キャッシュ１６およびデータキャッシュ２８は、線形にアドレスされる。線形アドレスは、命令によって特定されるオフセットと、ｘ８６アドレス変換メカニズムのセグメント部分によって特定されるベースアドレスとから形成される。線形アドレスは、オプションで、主メモリにアクセスするために物理的アドレスに変換されてもよい。線形から物理的への変換は、ｘ８６アドレス変換メカニズムのページング部分によって特定される。なお、線形アドレスされたキャッシュは、線形アドレスタグを記憶する。１組の物理的タグ（図示せず）を採用して、線形アドレスを物理的アドレスにマッピングし変換アライアスを検出してもよい。加えて、物理的タグブロックは、線形から物理的へのアドレス変換を実行し得る。
【００３８】
プリフェッチ／プリデコードユニットおよび命令キャッシュ構成
先に記したように、たとえばインテル（Intel）の８２４９１／８２４９２キャッシュＳＲＡＭなどの、マイクロプロセッサのための外部キャッシュとして使用されるよう設計された多くのメモリデバイスは、パリティ情報を記憶するよう構成可能である。ある実施例では、１パリティビットは、８データビットごとに記憶され得る。偶数パリティが所望されると想定すると、０１１０１０１１2のデータバイトは、アサートされたビットの総数が偶数になるように、アサートされたパリティビットを有するであろう。パリティビットは、マイクロプロセッサによって生成され、次にデータバイトとともに外部キャッシュ中に記憶され得る。マイクロプロセッサがキャッシュからデータをリードバックすると、それはアサートされたデータおよびパリティビットを数えるであろう。もし結果として得られた値が選択されたパリティに一致していなければ、パリティエラーが発生してしまっており、マイクロプロセッサは、たとえばオペレーティングシステムにメモリエラーの発生の信号を与えるなどの、適切な行動を取り得る。他のメモリデバイス構成が、エラーチェックおよび訂正（ＥＣＣ）のために付加的ビットを割当ててもよい。
【００３９】
サーバなどのハイエンドシステムは、典型的にパリティおよびＥＣＣをサポートするが、多くのローおよび中間システム設計者は、データエラー発生の確率が比較的低いためにこれらの特徴を起動することを選択しない。これらのシステムでは、レベル２キャッシュ中のパリティビットおよびＥＣＣビットは、プリデコード情報を記憶するために用いられるかもしれない。これは、有利には、システムレベルでの広範なハードウェア変更を必要とすることなしに性能を向上させることが可能である。
【００４０】
次に図４を参照すると、プリデコードユニット１２および命令キャッシュ１６のある実施例の詳細を示す図が示される。この実施例では、プリデコードユニット１２は、バスインターフェイス論理５２を介してキャッシュ５０に結合される。キャッシュ５０は、マイクロプロセッサ１０と同じシリコン上か、またはたとえばマイクロプロセッサ１０の近くのマザーボードもしくはドーターカードの上などの近くに結合される別個のシリコン上のいずれかに存在するローレイテンシの広帯域幅メモリを含む。キャッシュ５０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、シンクロナスダイナミックアクセスメモリ（ＳＤＲＡＭ）またはローレイテンシメモリの他のタイプを含み得る。キャッシュ５０は、マイクロプロセッサ１０と同じシリコン上、または別個のシリコン上に存在してもよい。あるいくつかの実施例においては、キャッシュ５０は、マイクロプロセッサ１０の機能ユニットに２番目に近いキャッシュ、すなわちレベル１命令キャッシュ１６およびデータキャッシュ２８の後にあるので、「レベル２」キャッシュと呼ばれることがある。キャッシュ５０はまた、マイクロプロセッサの外部にあるので、「外部キャッシュ」と呼ばれることもある。
【００４１】
バスインターフェイス論理５２は、マルチプレクサ、バッファ、トランシーバ、ドライバまたは、マイクロプロセッサ１０とキャッシュ５０との間にデータ信号、アドレス信号および制御信号の伝送を可能にするかまたは向上させ得るいかなる他の種類のバスインターフェイス論理であってもよい。いくつかの実施例では、バスインターフェイス論理５２は、マイクロプロセッサ１０とレベル２キャッシュ５０との間に必要とされないことがある。たとえば、マイクロプロセッサ１０およびレベル２キャッシュ５０が互いに物理的に十分に近く、かつその出力トランジスタの駆動能力が十分に高ければ、マイクロプロセッサ１０およびキャッシュ５０は、インターフェイス論理５２なしに互いに結合可能である。
【００４２】
プリデコード論理１２は、分岐予測ユニット１４からプリフェッチされるべき命令アドレスを受取り、これをバス６８、バスインターフェイス論理５２およびメモリバス５６を介してキャッシュ５０に送るよう構成される。レベル２キャッシュ５０が要求されたアドレスに対応する命令バイトを記憶している場合、命令バイトの予め定められた数（たとえば、３２バイトの１キャッシュライン）が、バス５６、バスインターフェイス論理５２およびバス６８を介してプリデコードユニット１２に送られる。要求された命令バイトがレベル２キャッシュ５０内に記憶されていない場合、キャッシュ５０は、要求された命令バイトを主メモリサブシステムから取出すよう構成される。一旦要求された命令バイトが主メモリサブシステムから送られると、それらは命令キャッシュ１６に送られる。それらはキャッシュ５０にも記憶され得る。
【００４３】
プリデコードユニット１２が要求された命令バイトを受取ると、それは各命令バイトについてのプリデコード情報を生成する。図に示される実施例では、プリデコードユニット１２は、各命令バイトごとに１開始ビットを生成する。プリデコードユニット１２が要求されたアドレスを出力することに応答して３２バイト（たとえば、１キャッシュライン）を受取ると想定すると、プリデコードユニット１２は、合計３２開始ビットについて各命令バイトごとに１開始ビットを生成するよう構成され得る。生成されると、開始ビットは命令キャッシュ１６に送られ、ここでそれらはその関連付けられる命令バイトとともに記憶される。命令キャッシュ１６は、１プリデコード情報記憶場所が各キャッシュライン記憶場所に対応するように、複数個のキャッシュライン記憶場所６４および複数個のプリデコード情報記憶場所６２に局所的に編成され得る。命令バイトおよびプリデコードビットはまた、命令整列ユニット１８に直接送られ得る。
【００４４】
命令キャッシュ１６内のキャッシュライン記憶場所６４がすべて一杯になると、多数の異なったアルゴリズムを使用してどのキャッシュラインがキャッシュミスの際に置換されるべきかを決定可能である。たとえば、近い将来に必要とされるであろう情報を捨てる可能性を低減するために、キャッシュアクセスのオーダを記録するリースト・リーセントリ・ユーズド（ＬＲＵ）置換方式を使用してもよい。上書されるべきキャッシュラインが選択されると、対応するプリデコード記憶場所６２中に記憶される関連付けられたプリデコード情報は、プリデコードユニット１２およびバスインターフェイス論理５２経由で命令キャッシュ１６からキャッシュ５０に出力される。プリデコードユニット１２はまた、上書される命令キャッシュ情報に対応するアドレスを送る。
【００４５】
キャッシュ５０がプリフェッチユニット１２および命令キャッシュ１６からプリデコードビットおよび対応するアドレスを受取ると、キャッシュ５０は、対応するアドレスと関連付けられたパリティビット記憶場所６０にプリデコードビットを記憶するよう構成される。いくつかの実施例では、命令キャッシュ１６で上書されるべき実際の命令バイトもまたキャッシュ５０に出力されプリデコードビットとともに記憶され得る。この構成は、実行変更コードをサポートするマイクロプロセッサ１０のいくつかの実施例において有利である可能性がある。たとえば、ストアアドレスが命令キャッシュ１６によって「詮索」(snoop)され、ストア命令が命令キャッシュ１６内に記憶される命令バイトを上書するかどうかを決定し得る。もしそうであれば、ストア命令が命令キャッシュ１６およびデータキャッシュ２８に実行され、これによって所望の命令バイトを変更することが可能である。そのような構成では、プリデコードユニット１２は、変更された命令についてのプリデコード情報を再計算し、次に、再計算されたプリデコードビットを命令キャッシュ１６に記憶するよう構成され得る。キャッシュ５０がライトバックキャッシュとして構成されるならば、変更された命令バイトは、変更された命令バイトを記憶するキャッシュライン記憶場所が命令キャッシュ１６中で上書されるとき後にキャッシュ５０に書込まれるだろう。
【００４６】
プリデコード情報（および、もしそのように構成されているならば命令バイト）がキャッシュ５０に書込まれた後、命令キャッシュ１６内のキャッシュライン記憶場所およびプリデコード情報記憶場所は、新しい命令バイトおよび新しいプリデコード情報で無事に上書され得る。プリデコードユニット１２がキャッシュ５０に出力された命令バイトのためのプリフェッチまたはプリフェッチ要求を受取ると、プリデコードユニット１２は、要求されたアドレスをキャッシュ５０に出力する。キャッシュ５０がまだ、対応する命令バイトおよびプリデコード情報を記憶している（すなわち、それらが置換されていない）ならば、キャッシュ５０は、プリデコードユニット１２にそれらを送るよう構成され得る。プリデコードユニット１２は、命令バイトおよび対応するプリデコード情報を命令整列ユニット１８および命令キャッシュ１６に転送し得る。有利には、この実施例では、要求された命令バイトについての新しいプリデコード情報を生成するプロセスは、回避可能である。先に記したように、これは、分岐予測誤りおよびまたはキャッシュミスが生じ機能ユニット２４Ａ〜Ｃがストールする危険があるとき、マイクロプロセッサ１０のいくつかの実施例において特に有利であるだろう。
【００４７】
他方で、キャッシュ５０が所望の命令バイトを別のアドレスに位置する他の命令バイトと置換していれば、キャッシュ５０は、主メモリから要求されたバイトを取出しそれらをプリデコードユニット１２に送るよう構成され得る。キャッシュ５０は、プリデコードユニット１２に命令バイトを伝送するとき特定の制御信号をアサートして命令キャッシュ５０が伝送される命令バイトについての有効プリデコード情報を有していないことを示すよう構成され得る。
【００４８】
別の実施例では、制御ユニット８０は、キャッシュ５０をモニタし、主メモリからの新しい命令バイトで置換されている命令記憶場所５８に対応するパリティ／ＥＣＣ記憶場所６０にプリデコードビットの特定の無効シーケンスを記憶する。これは、新しい命令バイトについてのプリデコード情報を有効に「初期化」する。この構成では、キャッシュ５０は、対応する命令バイトがプリデコードユニット１２によって要求されるときプリデコードビットの無効シーケンスを出力するよう構成可能である。有利には、この構成では、キャッシュ５０は、パリティ／ＥＣＣをサポートする標準のキャッシュであり得、それが出力しているプリデコードビットが有効であるか無効であるかを認識するように変更される必要はない。代わりに、プリデコードユニット１２が、それがキャッシュ５０から受取るプリデコードビットを調べるよう構成され得る。プリデコードビットが予め定められた無効シーケンスと一致すれば、プリフェッチユニット１２は、新しいプリデコード情報を計算するよう構成され得る。プリデコードビットが予め定められた無効シーケンスと一致しなければ、プリフェッチユニット１２は、プリデコードビットをレベル２キャッシュ５０から命令キャッシュ１６（および、もし必要であれば整列ユニット１６／デコードユニット２０Ａ〜Ｃ）に転送するよう構成され得る。
【００４９】
なお、バス５６および６８は、いかなる都合のよいサイズ、たとえば１６、３２、６４または１２８ビットであってもよい。使用されるバスラインの数は、データバス、アドレスバスおよび制御バスを多重化することによって低減可能である。いくつかの実施例では、プリデコードユニット１２およびレベル２キャッシュ５０は、送られ受取られるアドレスについてのパリティビットを生成するよう構成され得る。しかしながら、これらのパリティビットは、記憶される必要がなく、各アドレスが送られた後に廃棄可能である。
【００５０】
さらに別の実施例では、開始ビットに加えてプリデコード情報がプリデコードユニット１２によって生成され、命令キャッシュ１６に記憶され得る。たとえば、その関連付けられた命令バイトが命令の最終バイトであるかどうかを識別する終了ビットと、その関連付けられた命令バイトが操作コードバイトであるかどうかを示す操作コードバイトとがまた、プリデコードユニット１２によって生成され、命令キャッシュ１６に記憶されてもよい。これらのプリデコードビットのいくつかまたはすべては、キャッシュ５０内で利用可能なパリティおよびまたはＥＣＣビット６０の数に依存して、命令バイトがキャッシュ１６中で置換されるときキャッシュ５０に送られるだろう。
【００５１】
いくつかの実施例では、デコードユニット２０Ａ〜Ｃは、プリデコードユニット１２によって与えられるかまたは命令キャッシュ１６から読出されたプリデコード情報が正しくないときを検出するよう構成され得る。プリデコード情報の不正確さは、プリデコード情報を発生するために用いられる方法に依存して異なった理由のために起こり得る。不正確なプリデコード情報の場合には、デコードユニット２０Ａ〜Ｃは、ストールするよう構成されるかもしれないが、その一方でプリデコードユニット１２はプリデコード情報を再生成する。新しいプリデコード情報は次に、不正確なプリデコード情報の上から命令キャッシュ１６に書込まれるであろう。別の実施例では、デコードユニット２０Ａ〜Ｃは、不正確なプリデコード情報を単に廃棄し自らデコードを完了するよう構成され得る。
【００５２】
次に図５を参照すると、命令キャッシュ１６およびキャッシュ５０のある実施例のさらなる詳細が示される。先に記載したとおり、命令キャッシュ１６は、命令記憶場所６２およびプリデコード情報記憶場所６４で構成され得る。各プリデコード情報記憶場所は、１命令記憶場所に対応する。たとえば、記憶場所８０に記憶されたプリデコード情報は、命令記憶場所８２に記憶された命令バイトに対応する。図に示す実施例では、記憶場所８０は、場所８２に記憶された各命令バイトに対応する開始ビットを記憶する。
【００５３】
図に示すとおり、キャッシュ５０は、命令キャッシュ１６と同じ命令バイトを記憶可能である。たとえば、コードセグメント７２からの命令が初めて要求されたとき、それらは主メモリからレベル２キャッシュ５０および命令キャッシュ１６に読出され得る。しかしなお、レベル２キャッシュ５０は、コードセグメント７２についてプリデコードデータを有していないであろう。したがって、予め定められた無効定数（この場合には、００００００００．．．）が場所９０に記憶される。プリデコードユニット１２が命令バイトを受取ると、それは無効定数を検出し、コードセグメント７２についてのプリデコード情報を計算し始める。このプリデコード情報は次に、命令キャッシュ１６内の記憶場所８０に記憶される。
【００５４】
同じプロセスが、コードセグメント７８の命令が初めて要求されるとき起こるであろう。しかしながら、コードセグメント７８についての命令バイトが一旦命令キャッシュ１６中で置換されると、プリデコード情報はレベル２キャッシュ５０にライトバックされ場所９４に記憶される。コードセグメント７８が、それが命令キャッシュ１６中で置換された後におよびそれがレベル２キャッシュ５０中で置換されるより前に再び要求される場合、コードセグメント７８についての命令バイトおよびプリデコード情報の両方が、場所９４〜９６から読出され命令キャッシュ１６中に記憶されるであろう。この状態が図に示される。
【００５５】
ビットの任意の予め定められたシーケンスが無効定数として用いられ得るが、いくつかの実施例においては、プリデコードユニット１２によって生成される可能性の低いプリデコードビットシーケンスを選択することが有利であろう。たとえば、１６バイトの最大命令長および３２バイトのキャッシュライン長さを想定すると、プリデコードユニット１２が少なくとも１つの開始バイトなしに３２の連続する命令バイトを有するキャッシュラインを受取る可能性は低い。したがって、３２個のゼロを含む無効定数を選択することが、それが誤った無効の数を低減し得るために、有利であろう。誤った無効は、プリデコードユニット１２によって計算されたプリデコードビットが予め定められた無効定数に等しいときに起こり得る。もしこれが起これば、元々のプリデコードビットが正しかったとしても、キャッシュ５０から読出された元々のプリデコードビットは廃棄され新しいプリデコードビットが計算されるであろう。
【００５６】
ある実施例では、上述した特徴は、単独にマイクロプロセッサ１０内で実現可能である。たとえば制御ユニット８０の機能は省かれてもよいしまたはマイクロプロセッサ１０内に含まれてもよい。同様に、バスインターフェイス論理５２は、いくつかの実施例では、省かれてもよいしまたはマイクロプロセッサ１０内に含まれてもよい。記載された機能全体をマイクロプロセッサ１０内に実現することは、有利には、開示されたようなプリデコード情報を記憶するコンピュータシステムを実現するコストを削減可能である。他の実施例では、所望の機能は、マイクロプロセッサ１０と１つ以上のインターフェイスまたはサポートチップとの間に分散されてもよい。
【００５７】
次に図６を参照すると、レベル２キャッシュ５０内にプリデコード情報を記憶するための方法のある実施例を示すフローチャートが示される。まず、命令バイトが命令キャッシュ１６から要求される（ステップ１４０）。要求されたバイトが命令キャッシュ１６内に記憶されているならば、それらは整列ユニット１６およびデコードユニット２０Ａ〜Ｃに、その対応するプリデコード情報とともに送られる（ステップ１４２およびステップ１５２）。他方で、要求された命令バイトが命令キャッシュ１６内に記憶されていなければ、要求されたアドレスはレベル２キャッシュ５０に転送される（ステップ１４２およびステップ１４４）。要求された命令バイトがレベル２キャッシュ５０内に記憶されていなければ、それらは主メモリサブシステムから読出される（ステップ１４６およびステップ１４８）。要求された命令バイトが主メモリサブシステムから受取られると、それらは無効定数とともにレベル２キャッシュ５０内に記憶される（ステップ１４８およびステップ１５０）。先に記したように、無効定数は、レベル２キャッシュ５０内のプリデコード記憶場所を有効に初期化し、これによってプリデコードユニット１２に新しいプリデコード情報が生成されるべきであるという信号を与える。プリデコードユニット１２が命令バイトおよびプリデコードビットを受取ると、プリデコードビットは調べられ、それらが無効定数に等しいかどうかを決定する（ステップ１５４およびステップ１５６）。プリデコードビットが無効定数に等しければ、プリデコードユニット１２は、新しいプリデコード情報を生成するよう構成される（ステップ１５６およびステップ１６４）。命令バイトおよび新しいプリデコード情報は次に、命令キャッシュ１６に記憶される（ステップ１５８）。命令バイトおよび新しいプリデコード情報を記憶することが命令キャッシュ１６内で先に記憶されたキャッシュラインを置換することを伴なうならば、上書きされる先に記憶されたキャッシュラインに対応するプリデコード情報は、レベル２キャッシュ５０にストアバックされる（ステップ１６０およびステップ１６６）。
【００５８】
なお、図のステップは、説明の目的のためにのみ直列の態様で表わされる。他の実施例が可能であり企図される。上記の多数のステップは、組合されてもよくまたは並列に行なわれてもよい。たとえば、ステップ１５０および１５４は、並列に行なわれてもよい。さらに、先に記したように、無効定数の使用を伴なうステップは、オプションである。
【００５９】
例示のコンピュータシステム
図７を参照すると、マイクロプロセッサ１０を利用するコンピュータシステム２００のある実施例のブロック図が示される。描写されるシステムでは、主メモリ２０４が、メモリバス２０６を介してバスブリッジ２０２に結合され、グラフィックスコントローラ２０８が、ＡＧＰバス２１０を介してバスブリッジ２０２に結合される。最後に、複数個のＰＣＩデバイス２１２Ａ〜２１２Ｂが、ＰＣＩバス２１４を介してバスブリッジ２０２に結合される。２次バスブリッジ２１６をさらに設けて、ＥＩＳＡ／ＩＳＡバス２２０を介して１つ以上のＥＩＳＡまたはＩＳＡデバイス２１８への電気的インターフェイスを可能としてもよい。マイクロプロセッサ１０は、ＣＰＵバス２２４を介してバスブリッジ２０２に結合される。
【００６０】
バスブリッジ２０２は、マイクロプロセッサ１０と、主メモリ２０４と、グラフィックスコントローラ２０８と、ＰＣＩバス２１４につながれるデバイスとの間のインタフェースを与える。操作がバスブリッジ２０２に接続されるデバイスの１つから受取られると、バスブリッジ２０２は、操作のターゲット（たとえば、特定のデバイスまたは、ＰＣＩバス２１４の場合には、ターゲットはＰＣＩバス２１４上にある）を特定する。バスブリッジ２０２は、ターゲットされたデバイスに操作を送る。バスブリッジ２０２は一般的には、ソースデバイスまたはバスによって使用されるプロトコルからターゲットデバイスまたはバスによって使用されるプロトコルに操作を変換する。
【００６１】
ＰＣＩバス２１４のためにＩＳＡ／ＥＩＳＡバスへのインタフェースを与えることに加えて、２次バスブリッジ２１６はさらに、所望のごとくさらなる機能を組込んでもよい。たとえば、ある実施例では、２次バスブリッジ２１６は、ＰＣＩバス２１４の所有権を調停するためのマスタＰＣＩアービタ（図示せず）を含む。２次バスブリッジ２１６の外部またはこれと統合される入力／出力コントローラ（図示せず）をもコンピュータシステム２００内に含めて、所望のごとく、キーボードおよびマウス２２２ならびにさまざまな直列ポートおよび並列ポートのための動作上のサポートを与えてもよい。他の実施例では、外部キャッシュユニット（図示せず）が、マイクロプロセッサ１０とバスブリッジ２０２との間のＣＰＵバス２２４にさらに結合されてもよい。代替的に、外部キャッシュは、バスブリッジ２０２に結合されてもよく、外部キャッシュのためのキャッシュ制御論理は、バスブリッジ２０２に統合されてもよい。
【００６２】
主メモリ２０４は、アプリケーションプログラムが記憶され、これからマイクロプロセッサ１０が主に実行するメモリである。好適な主メモリ１４は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）および、好ましくはＳＤＲＡＭ（シンクロナスＤＲＡＭ）の複数個のバンクを含む。
【００６３】
ＰＣＩデバイス２１２Ａ〜２１２Ｂは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードもしくはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（スモールコンピュータシステムインターフェイス）アダプタおよび電話機能カードなどの、さまざまな周辺デバイスを例示するものである。同様に、ＩＳＡデバイス２１８は、モデム、サウンドカードおよび、ＧＰＩＢまたはフィールドバスインターフェイスカードなどのさまざまなデータ収集カードなどの、さまざまなタイプの周辺デバイスを例示するものである。
【００６４】
グラフィックスコントローラ２０８は、ディスプレイ２２６上のテキストおよび画像のレンダリングを制御するために設けられる。グラフィックスコントローラ２０８は、先行技術に一般的に公知の典型的なグラフィックスアクセラレータを採用して、主メモリ２０４におよびそこから効果的にシフト可能である３次元のデータ構造をレンダリングすることが可能である。したがって、グラフィックスコントローラ２０８は、バスブリッジ２０２内のターゲットインターフェイスへのアクセスを要求しかつ受取ることによって主メモリ２０４へのアクセスを獲得することが可能であるという点で、ＡＧＰバス２１０のマスタであり得る。専用のグラフィックスバスが、主メモリ２０４からのデータの高速の取出しを可能とする。ある操作では、グラフィックスコントローラ２０８は、ＡＧＰバス２１０のＰＣＩプロトコルトランザクションを生成するようさらに構成されてもよい。したがって、バスブリッジ２０２のＡＧＰインターフェイスは、ＡＧＰプロトコルトランザクションと、ＰＣＩプロトコルターゲットおよびイニシエータトランザクションとの両方をサポートする機能を含み得る。ディスプレイ２２６は、画像またはテキストが与えられることが可能である任意の電子ディスプレイである。好適なディスプレイ２２６は、陰極線管（「ＣＲＴ」）、液晶ディスプレイ（「ＬＣＤ」）などを含む。
【００６５】
なお、ＡＧＰバス、ＰＣＩバスおよびＩＳＡバスまたはＥＩＳＡバスが、上記の記載では例として用いられたが、いかなるバスアーキテクチャが所望のごとく置換えられてもよい。さらになお、コンピュータシステム２００は、さらなるマイクロプロセッサを含むマルチプロセッシングコンピュータシステムであってもよい。
【００６６】
さらになお、この記載は、さまざまな信号のアサートを参照するであろう。信号は、それが特定の条件を示す値を送る場合に「アサートされる」とここでは言う。反対に、信号はそれが特定の条件の不在を示す値を送る場合には、「デアサートされる」または「アサートされない」。信号は、それが論理０値を送るとき、または反対に、それが論理１値を送るときにアサートされるよう定義され得る。加えて、さまざまな値が、上記の記載では廃棄されるものとして記載された。値は、多くの態様で廃棄可能であるが、一般的には、それが値を受取る論理回路によって無視されるように値を変更することを伴なう。たとえば、値が１ビットを含む場合、値の論理状態は、値を廃棄するよう反転されるであろう。値がｎビットの値である場合、ｎビットの符号化の１つが、値が無効であることを示すであろう。値を無効の符号化にセットすると、値は廃棄される。加えて、ｎビット値は、セットされると、ｎビット値が有効であることを示す有効ビットを含み得る。有効ビットのリセットは、値の廃棄を含み得る。値を廃棄する他の方法も同様に使用可能である。
【００６７】
産業上の用途
この発明は、マイクロプロセッサ、コンピュータシステム、パーソナルデジタルアシスタント（ＰＤＡ）、コンピュータネットワーク、単一および複数のプロセッサシステム、オンチップのシステム、埋込まれたプロセッサおよびマイクロコントローラシステム、ならびにデジタル信号プロセッサを含む多数の異なった産業分野に適用可能であるが、これに限定されるものではない。
【図面の簡単な説明】
【図１】  一般的なｘ８６命令フォーマットのブロック図である。
【図２】  有効マスクのある実施例を示すブロック図である。
【図３】  マイクロプロセッサのある実施例のブロック図である。
【図４】  図３の命令キャッシュとレベル２キャッシュとの間のインターフェイスのある実施例の詳細を示す図である。
【図５】  図４に表わされる命令キャッシュのある実施例と図４からのレベル２キャッシュのある実施例との関係の詳細を示す図である。
【図６】  プリデコード情報をレベル２キャッシュ中に記憶するための方法のある実施例を表わすフローチャートである。
【図７】  図３のマイクロプロセッサを利用するコンピュータシステムのある実施例を示す図である。
【図１】
0003836322.tif 000002
【図２】
0003836322.tif 000003
【図３】
0003836322.tif 000004
【図４】
0003836322.tif 000005
【図５】
0003836322.tif 000006
【図６】
0003836322.tif 000007
【図７】
0003836322.tif 000008