(57)【要約】犠牲にされた命令とデータバイトとをストアするように構成されたマイクロプロセッサ（１０）が開示される。一実施形態においては、このマイクロプロセッサは、プリデコードユニット（１２）、命令キャッシュ（１６）、データキャッシュ（２８）およびレベル２キャッシュ（５０）を有する。プリデコードユニットは命令バイトを受け取って、対応するプリデコード情報を生成して、これが命令バイトと共に命令キャッシュにストアされる。データキャッシュはデータバイトを受け取ってこれをストアする。レベル２キャッシュは、パリティ情報およびプリデコード情報と共に犠牲にされた命令バイトを命令キャッシュから、犠牲にされたデータバイトをエラー訂正コードビットと共にデータキャッシュから受け取って、ストアするように構成される。キャッシュラインにストアされているデータの種類を示すために、指示ビットがキャッシュライン毎にストアされ得る。
2004531837.tif 000002
【特許請求の範囲】
【請求項１】
マイクロプロセッサであって、
命令バイトを受け取って、対応するプリデコード情報を生成するように構成されたプリデコードユニット（１２）と、
前記プリデコードユニットに結合され、前記命令バイトと該命令バイトに対応する前記プリデコード情報とをストアするように構成された命令キャッシュ（１６）と、
データバイトを受け取るように構成されたロード／ストアユニット（２６）と、
前記ロード／ストアユニットから前記データバイトを受け取ってストアするように構成されたデータキャッシュ（２８）と、
前記命令キャッシュから犠牲にされた命令バイトと、前記データキャッシュから犠牲にされたデータバイトとを受け取ってストアするように構成されたレベル２キャッシュ（５０）とを備え、前記レベル２キャッシュは、前記ストアされている犠牲にされた命令バイトに対するパリティ情報およびプリデコード情報を受け取ってストアするように構成され、かつ前記レベル２キャッシュは、前記ストアされている犠牲にされたデータバイトに対するエラー訂正コードビットを受け取ってストアするように構成されるマイクロプロセッサ。
【請求項２】
前記レベル２キャッシュに転送される前記命令バイトに対する前記パリティビットを生成し、かつ
前記レベル２キャッシュから転送される前記命令バイトに対する前記パリティビットを検査するように構成されたパリティ生成および検査ロジック（４０２）をさらに備える、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記レベル２キャッシュに転送される前記データバイトに対する前記エラー訂正コードビットを生成し、かつ
前記レベル２キャッシュから転送される前記データバイトに対する前記エラー訂正コードビットを検査するように構成されたエラー検査および訂正ロジック（４０４）をさらに備える、請求項１に記載のマイクロプロセッサ。
【請求項４】
前記エラー検査および訂正ロジック（４０４）は、前記レベル２キャッシュから転送される前記データバイトにおける少なくとも１ビットのエラーを訂正するために、前記エラー訂正コードビットを使用するように構成される、請求項３に記載のマイクロプロセッサ。
【請求項５】
前記レベル２キャッシュはキャッシュラインに分割され、前記キャッシュラインは第１記憶領域と第２記憶領域とを有し、各キャッシュラインは、（ａ）命令バイトが前記キャッシュラインの第１記憶領域に記憶されており、かつプリデコードビットおよびパリティビットが前記キャッシュラインの第２領域にストアされているか、あるいは（ｂ）データバイトが前記キャッシュラインの第１記憶領域にストアされており、かつエラー訂正コードビットが前記キャッシュラインの第２記憶領域にストアされているか、を示す１つ以上の指示ビットをストアするように構成される、請求項１に記載のマイクロプロセッサ。
【請求項６】
命令バイトを受け取るステップと、
前記命令バイトに対するプリデコード情報を生成するステップと、
前記命令バイトと前記プリデコード情報とを第１メモリ（１６）にストアするステップと、
前記第１メモリにおいて前記命令バイトが上書きされようとしていることに応答して、前記命令バイトの少なくとも一部分および前記プリデコード情報をパリティ情報と共に第２メモリ（５０）に出力するステップと、
データバイトを受け取るステップと、
前記データバイトを第３メモリ（２８）にストアするステップと、
前記第３メモリにおいて前記データバイトが上書きされようとしていることに応答して、前記データバイトの少なくとも一部分を対応するエラー訂正コード情報と共に前記第２メモリに出力するステップとを備える方法。
【請求項７】
前記第２メモリはキャッシュラインに分割されており、前記方法は前記第２メモリにある各キャッシュラインに指示ビットをストアするステップをさらに備え、前記指示ビットは前記プリデコードビットと前記エラー訂正コードビットとのいずれが前記第２メモリにストアされているかを示す、請求項６に記載の方法。
【請求項８】
前記第２メモリにある各論理ブロックに対する指示ビットをストアするステップをさらに備え、前記指示ビットはプリデコードビットと、エラー検査および訂正ビットとのいずれが前記第２メモリにストアされているかを示す、請求項７に記載の方法。
【請求項９】
少なくとも１つの前記ストアされているパリティビットと、対応する前記命令バイトの前記ストアされている部分および前記プリデコード情報とを、前記プロセッサに送り返すステップをさらに備え、前記プロセッサは、前記パリティビットが正しい場合に、新しいプリデコード情報を生成する代わりに前記送られたプリデコード情報を使用するように構成される、請求項７に記載の方法。
【請求項１０】
メインシステムメモリ（４２０）と、
前記メインシステムメモリに結合されたメモリコントローラ（４１０）と、
前記メモリコントローラに結合された請求項１乃至請求項５のいずれか１項に記載のマイクロプロセッサ（１０）とを備えたコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、より詳細にはマイクロプロセッサ内での可変長命令のデコードに関する。
【背景技術】
【０００２】
ｘ８６命令セット向けに記述されたソフトウェアアプリケーションの数はかなり多い。この結果、新しい、より高度な命令セットが登場しているにも関わらず、マイクロプロセッサの設計者は、ｘ８６命令セットを実行できるマイクロプロセッサの設計を続けている。
【０００３】
ｘ８６命令セットは比較的複雑であり、可変長命令が複数存在するという特徴がある。図１に、一般化したｘ８６命令セットのフォーマットを示す。本図に示すように、ｘ８６命令は、１〜５個のオプションのプリフィックスバイト１０２と、この後に置かれるオペレーションコード（オペコード）フィールド１０４、オプションのアドレス指定モード（Ｍｏｄ  Ｒ／Ｍ）バイト１０６、オプションのスケール−インデックス−ベース（ＳＩＢ）バイト１０８、オプションの変位（displacement）フィールド１１０およびオプションの即値データフィールド１１２とからなる。
【０００４】
オペコードフィールド１０４は、特定の命令の基本的な操作を定義している。１つ以上のプリフィックスバイト１０２により、特定のオペコードの標準の操作を変更することができる。例えば、プリフィックスバイト１０２のうちの１つを使用して、命令のアドレスまたはオペランドのサイズを変更したり、メモリのアドレス指定に使用される標準のセグメントを無効化したり、文字列操作を何回も繰り返すようにプロセッサに指示することができる。オペコードフィールド１０４は、プリフィックスバイト１０２（存在する場合）の後に置かれ、長さは１〜２バイトであり得る。アドレス指定モード（Ｍｏｄ  Ｒ／Ｍ）バイト１０６は、使用されるレジスタのほか、メモリアドレス指定モードを指定する。スケール−インデックス−ベース（ＳＩＢ）バイト１０８は、スケールファクタおよびインデックスファクタ（scale and index factor）を用いる、３２ビットベースの相対アドレス指定でのみ使用される。ＳＩＢバイト１０８のベースフィールドは、アドレス計算に用いるベース値を格納しているレジスタを指定し、ＳＩＢバイト１０８のインデックスフィールドは、インデックス値を格納しているレジスタを指定している。ＳＩＢバイト１０８のスケールフィールドは、インデックス値と掛け合わせる２のべき乗数を指定しており、この乗算によって求めた値と変位とが、ベース値に加算される。次の命令フィールドは変位フィールド１１０で、これはオプションであり、長さは１〜４バイトであり得る。変位フィールド１１０は、アドレス計算に使用される定数を格納している。オプションの即値フィールド１１２は、長さが１〜４バイトであり得、命令のオペランドとして使用される定数を格納している。最も短いｘ８６命令はわずか１バイト長で、１つのオペコードバイトのみを有する。８０２８６の命令セットの最大命令長は１０バイトであるのに対し、８０３８６および８０４８６は、最長で１５バイトの命令を許容している。
【０００５】
ｘ８６命令セットの複雑さにより、高性能のｘ８６互換マイクロプロセッサの実装において数多くの難題が生じている。特に、可変長のｘ８６命令によって、命令のデコードが困難となる。命令のデコード処理では、通常、先ず命令の境界を決定して、次に命令に含まれる各フィールド（オペコードフィールド、オペランドフィールドなど）を特定することが行われる。デコードは、命令が実行される前に、その命令が命令キャッシュからフェッチされるときに行われることが多い。
【０００６】
命令間の境界を決定する方法の１つに、各命令バイトが、メインメモリから読み出されて命令キャッシュにストアされる際に、命令バイトに対して１つ以上のプリデコードビットを生成して、ストアしておく方法がある。このプリデコードビットは、対応する命令バイトに関する情報を提供する。例えば、プリデコードのスタートビットがアサートされている場合は、対応する命令バイトが、命令の先頭バイトであることを示す。特定の命令バイトに対するスタートビットが計算されると、このスタートビットは命令バイトと共に命令キャッシュにストアされる。「フェッチ」が実行される場合、命令の実行に備えて、多数の命令バイトが命令キャッシュから読み出されてデコードされる。このフェッチと共に、対応する全てのスタートビットがスキャンされ、個々の命令に対する有効マスクが生成される。有効マスクとは、一連のビットであり、その各ビットが特定の命令バイトに対応している。命令の先頭バイトに対応する有効マスクビット、命令の最終バイトに対応する有効マスクビット、および命令の先頭バイトと最終バイトとの間に存在する全バイトに対応する有効マスクビットがアサートされる。上記以外の有効マスクビットはアサートされない。ひとたび有効マスクが計算されると、このマスクを使用して、他の命令のバイトをマスクして除去（mask off）することができる。
【０００７】
図２を参照すると、有効マスクの一例が示される。本図には、フェッチ１２０の一部と、これに対応するスタートビット１２２とが示されている。命令Ｂ１２８に対する有効マスク１２６を生成しようとしていると仮定すると、スタートビット１２２Ａ、ならびにスタートビット１２２Ａとスタートビット１２２Ｂとの間の全ビットがアサートされ、マスク１２６が生成される。有効マスク１２６は、ひとたび生成されると、命令Ｂ１２８には属さないフェッチ１２０内のビットを全てマスクして除去するために使用される。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
上記したように、プリデコード情報は、デコード回数を減らすうえで特に有用であり得る。命令キャッシュにプリデコード情報を命令バイトと共にストアすれば、対応する命令がループ処理などによって何回も実行される場合であっても、プリデコード情報の計算は一度で済む。しかし、命令が命令キャッシュ内で置換されるか、命令キャッシュから破棄されると、対応するプリデコード情報は一切失われる。次にこの命令が命令キャッシュに読み出されるときに、プリデコード情報を再度生成する必要がある。プリデコード情報の計算が完了するまで待機することによって発生する遅延時間は、分岐予測ミスまたはキャッシュミスの結果、命令が命令キャッシュに読み出される場合に、特に性能を低下させる。必要となる前に投機的にプリフェッチされる命令とは対照的に、分岐予測ミスまたはキャッシュミスによって生ずるフェッチは、要求された命令を受け取るまで待機している間、マイクロプロセッサのデコーダおよび機能ユニットをストールさせかねない。このような場合、プリデコード情報の生成に要する時間が、マイクロプロセッサの性能の大きな低下を招く可能性がある。
【０００９】
上記の理由やその他の理由によって、プリデコード時間を短縮する方法ならびに装置が所望されている。特に、命令キャッシュから前に破棄されている命令に対するプリデコード情報の生成に要する時間を短縮する方法ならびに装置が求められている。
【００１０】
上記の問題に対する可能な解決策が、ルパカ  マハリンガイア（Rupaka Mahalingaiah）による米国特許第６，０９２，１８２号「プリデコード情報を記憶するためのＥＣＣ／パリティビットの使用（Using ECC/Parity Bits to Store Predecode Information）」に提唱されている。これは、具体的には、レベル２キャッシュのＥＣＣ／パリティビットにプリデコード情報をストアするものである。場合によっては、犠牲にされた命令バイトのプリデコードによって生ずる遅延を回避でき、有利である。
【００１１】
しかし、上記の解決策では、レベル２キャッシュにストアされているデータが、シングルビットエラーおよびマルチビットエラーから保護されない。現行のマイクロプロセッサの動作周波数と集積度とが共に向上していることを考慮に入れると、キャッシュ特有のエラーとして、キャッシュ内の記憶エラーが潜在的に懸念される。このため、破棄されるプリデコード情報の量を低減すると共に、頻繁に発生するタイプのエラー（シングルビットエラー等）の一部を少なくとも検出可能なシステムならびに方法が所望される。
【課題を解決するための手段】
【００１２】
上記の問題は、ここに記載するように、犠牲にされた（victimized）命令のプリデコード情報をストアするためのシステムならびに方法によって少なくとも一部解決される。一実施形態においては、犠牲にされた命令のプリデコード情報をストアするように構成されたマイクロプロセッサは、プリデコードユニットとロード／ストアユニットとを備え得る。プリデコードユニットは、命令バイトを受け取って、対応するプリデコード情報を生成するように構成され得る。プリデコードユニットは、この命令バイトと対応するプリデコード情報とを命令キャッシュにストアするようにも構成され得る。ロード／ストアユニットは、データバイトを受け取って、このデータバイトをデータキャッシュにストアするように構成され得る。命令キャッシュとデータキャッシュとは、共にプロセッサの「レベル１」キャッシュを形成し得る。プロセッサは、犠牲にされた命令バイトを命令キャッシュから、犠牲にされたデータバイトをデータキャッシュから受け取ってストアするように構成されたレベル２キャッシュをも備え得る。レベル２キャッシュは、ストアされている犠牲にされた命令バイトに対するパリティ情報およびプリデコード情報、ならびにストアされている犠牲にされたデータバイトに対するエラー訂正コード（ＥＣＣ）ビットを受け取ってストアするようにも構成され得る。
【００１３】
一実施形態においては、マイクロプロセッサは、レベル２キャッシュにストアされている命令バイトに対するパリティビットを生成するように構成されたパリティ生成および検査ロジックも備え得る。パリティ生成および検査ロジックは、レベル２キャッシュから読み出された命令バイトに対するパリティビットを検査するようにも構成され得る。一部の実施形態においては、命令キャッシュはパリティ情報をストアするようにも構成され得、これにより、命令キャッシュにある命令バイトとレベル２キャッシュとにある命令バイトとの両方のパリティ検査が可能となる。
【００１４】
同様に、マイクロプロセッサは、レベル２キャッシュにストアされているデータバイトに対するエラー検査および訂正コードビットを生成するように構成されたエラー検査および訂正ロジックも備え得る。エラー検査および訂正ロジックは、レベル２キャッシュから読み出されたデータバイトに対するＥＣＣビットを検査するように構成され得る。一部の実施形態においては、エラー検査および訂正ロジックは、レベル２キャッシュではなくデータキャッシュから読み出されたデータバイトの少なくとも１ビットのエラーを訂正するように構成することができる。
【００１５】
一部の実施形態においては、レベル２キャッシュは、複数のキャッシュライン（例えば、論理行および／または論理列）に分割され得、各キャッシュラインは、犠牲にされたデータバイトまたは犠牲にされた命令バイトをストアするように構成される。レベル２キャッシュに、（ａ）犠牲にされた命令バイト、プリデコード情報およびパリティ情報か、（ｂ）ＥＣＣ情報およびデータバイトか、のいずれがストアされているかを示すために、レベル２キャッシュの各キャッシュラインにおいて指示ビット（「データ型」ビットとも呼ばれる）が使用され得る。一部の実施形態においては、レベル２キャッシュは、犠牲にされた命令バイトおよび犠牲にされたデータバイトのほか、これらに対応するＥＣＣビット、パリティビット、プリデコードビットおよび指示ビットだけをストアするという点で排他的であり得る。別の実施形態においては、レベル２キャッシュは、未だ犠牲にされていない命令バイトおよびデータバイトのコピーもストアするという点で包括的であり得る。
【００１６】
犠牲にされたプリデコード情報をストアするためのシステムも考察される。一実施形態においては、このシステムは、命令バイトおよびデータバイトを受け取るように構成されたプロセッサを備え得る。このプロセッサは、この命令バイトによって形成された命令に従って、このデータバイトを操作するように構成され得る。システムは、犠牲にされた命令バイトおよび犠牲にされたデータバイトをプロセッサから受け取ってストアするように構成されたキャッシュも備え得る。キャッシュは、犠牲にされた命令バイトに対するパリティ情報およびプリデコード情報を受け取ってストアするように構成され得る。キャッシュは、ストアされている犠牲にされたデータバイトに対するＥＣＣビットを受け取ってストアするようにも構成され得る。キャッシュは、プロセッサが犠牲にされたデータバイトを要求すると、これに応答して犠牲にされたデータバイトおよび対応するＥＣＣビットをプロセッサに提供するように構成され得る。同様に、キャッシュは、プロセッサが犠牲にされた命令バイトを要求すると、これに応答してストアされている犠牲にされた命令バイトと対応するパリティ情報およびプリデコード情報とをプロセッサに提供するように構成され得る。プロセッサは、命令バイトに対するプリデコード情報を新たに生成する代わりに、命令キャッシュにあるプリデコード情報を使用することができ、有利である。命令バイト（例えば、自己変更コード）に書き込みが行われる場合には、ストアされているプリデコード情報が（例えば、プリデコード情報に対する無効化定数をストアするなどによって）無効化され得、新しいパリティ情報が計算され得る。
【００１７】
一部の実施形態においては、キャッシュは、プロセッサと同じダイに形成されたレベル２キャッシュとして実装され得る。別の実施形態においては、キャッシュは、プロセッサとは別のダイに形成されていてもよい。一部の実施形態においては、キャッシュは、犠牲にされた命令バイト（と対応するプリデコード情報およびパリティ情報と）をストアするように構成された第１部分と、犠牲にされたデータバイトおよび対応するＥＣＣ情報をストアするように構成された第２部分とに分割され得る。
【００１８】
犠牲にされたプリデコード情報をストアするための方法も考察される。一実施形態においては、この方法は、命令バイトを受け取るステップと、この命令バイトに対応するプリデコード情報を生成するステップとを備え得る。次に、命令バイトとプリデコード情報とが、第１メモリにストアされ得る。第１メモリでこの命令バイトが上書きされたことに応答して、命令バイトおよびプリデコード情報の少なくとも一部分が第２メモリに出力され得る。第２メモリにストアされている命令バイトおよびプリデコード情報に対応する少なくとも１つのパリティビットが生成されて、第２メモリにストアされ得る。上記方法は、データバイトを受け取って、このデータバイトを第３メモリにストアするステップも備え得る。第３メモリでこのデータバイトが上書きされたことに応答して、データバイトの少なくとも一部分が第２メモリにストアされ得る。データバイトは、生成され、このデータバイトと共に第２メモリにストアされるＥＣＣ情報を有し得る。また、第２メモリにある各キャッシュラインに対応する指示ビットが生成され、ここにストアされ得る。この指示ビットは、命令バイトならびにプリデコードビットおよびパリティ情報か、またはデータバイトおよびＥＣＣ情報のいずれがストアされているかを示す。
【００１９】
本発明の他の目的ならびに利点は、添付の図面を参照しつつ下記に記載する本発明の詳細な説明を参照すれば明白となる。
【発明を実施するための最良の形態】
【００２０】
本発明は、様々に変形されたり代替形態を取り得るが、その特定の実施形態が、例として図中に図示され、かつ本明細書に詳細に記載される。しかし、図面および詳細な説明は、開示の実施形態に本発明を限定することを意図するものではなく、本発明が添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれる全ての変形例、均等物および代替例を含むことが意図にあることが理解されるべきである。本明細書中に使用されている見出しは、分類のみを意図しており、本詳細説明ならびに特許請求の範囲を限定するものではない。本願全体にわたり、「し得る（may）」との語は、必須（すなわち必要であることを示す）ものではなく、許容（すなわち可能性があることを示す）を示す。同様に、「含む」、「有する」、「備える」（include、including、includes）」との語は、限定ではなく含有を意図するものである。
【００２１】
図３を参照すると、マイクロプロセッサ１０の一実施形態のブロック図が示される。マイクロプロセッサ１０は、プリフェッチ／プリデコードユニット１２、分岐予測ユニット１４、命令キャッシュ１６、命令整列ユニット１８、複数個のデコードユニット２０Ａ〜２０Ｃ、複数のリザベーションステーション２２Ａ〜２２Ｃ、複数個の機能ユニット２４Ａ〜２４Ｃ、ロード／ストアユニット２６、データキャッシュ２８、レジスタファイル３０、リオーダーバッファ３２、およびＭＲＯＭユニット３４を備える。本明細書において、後に文字が付いた参照符号によって参照される複数の要素は、参照符号のみによって集合的に参照されることがある。例えば、リザベーションステーション２２Ａ〜２２Ｃは、リザベーションステーション２２として集合的に参照されることがある。
【００２２】
プリフェッチ／プリデコードユニット１２は、メインメモリサブシステム（図示せず）から命令を受け取るために同システムに結合され、さらに命令キャッシュ１６および分岐予測ユニット１４にも結合されている。同様に、分岐予測ユニット１４は命令キャッシュ１６に結合されている。また、分岐予測ユニット１４は、命令整列ユニット１８および機能ユニット２４Ａ〜Ｃにも結合されている。命令キャッシュ１６は、さらにＭＲＯＭユニット３４および命令整列ユニット１８に結合されている。命令整列ユニット１８は、逆に、ロード／ストアユニット２６のほか、デコードユニット２０Ａ〜Ｃの各々に結合されている。デコードユニット２０Ａ〜Ｃの各々はリザベーションステーション２２Ａ〜Ｃに結合され、リザベーションステーション２２Ａ〜Ｃは対応する機能ユニット２４Ａ〜Ｃにそれぞれ結合されている。さらに、命令整列ユニット１８とリザベーションステーション２２とは、レジスタファイル３０およびリオーダーバッファ３２に結合されている。機能ユニット２４は、ロード／ストアユニット２６、レジスタファイル３０およびリオーダーバッファ３２とも結合されている。データキャッシュ２８は、ロード／ストアユニット２６とメインメモリサブシステムとに結合されている。最後に、ＭＲＯＭユニット３４は、命令整列ユニット１８に結合されている。
【００２３】
プリフェッチ／プリデコードユニット１２によって、命令がメインメモリからプリフェッチされる。プリフェッチ／プリデコードユニット１２が可変長命令を固定長命令にプリデコードし、この固定長命令が命令キャッシュ１６にストアされる。プリフェッチ方式によって、命令が、実際に要求される前にプリフェッチされてプリデコードされ得る。種々のプリフェッチ方式が、プリフェッチ／プリデコードユニット１２によって採用され得る。プリデコードユニット１２および命令キャッシュ１６に関する詳細な説明に移る前に、本図に示した例示的なマイクロプロセッサ１０の実施形態の一般的な態様を記載する。
【００２４】
マイクロプロセッサ１０は、条件付き分岐命令に後続する命令を投機的にフェッチするために分岐予測を使用し得る。分岐予測処理を実行するために分岐予測ユニット１４が設けられる。一実施形態においては、命令キャッシュ１６内の各キャッシュラインの１６バイト部分毎に、最大２つの分岐ターゲットアドレスがストアされる。プリフェッチ／プリデコードユニット１２は、特定のラインがプリデコードされたときに、最初の分岐ターゲットを決定する。その後、キャッシュライン内の命令の実行によって、このキャッシュラインに対応する分岐ターゲットが更新され得る。命令キャッシュ１６は、分岐予測ユニット１４にフェッチされようとしている命令のアドレスを示す情報を提供する。これによって、分岐予測ユニット１４は、分岐予測を立てる際に、選択する分岐ターゲットアドレスを決定できるようになる。命令整列ユニット１８および機能ユニット２４は、分岐予測ユニット１４に更新情報を提供する。分岐予測ユニット１４はキャッシュラインの１６バイト部分につき２つの分岐ターゲットをストアしているため、このライン内にある一部の分岐命令の予測が、分岐予測ユニット１４にストアされていない可能性がある。命令整列ユニット１８は、分岐予測ユニット１４によって予測されなかった分岐命令を検出するように構成され得る。機能ユニット２４は、分岐命令を実行して、予想した分岐方向が予測ミスであるかどうかを判定する。この分岐方向を「辿る」可能性があり、この場合、後続の命令が、分岐命令のターゲットアドレスからフェッチされる。逆に、この分岐方向を「辿らない」可能性もあり、この場合、後続の命令が、分岐命令の後のメモリ場所からフェッチされる。予測誤りの分岐命令が検出されると、この誤って予測された分岐に後続する命令が、マイクロプロセッサ１０の種々のユニットから破棄される。分岐予測ユニット１４によって、種々の適切な分岐予測アルゴリズムが使用され得る。
【００２５】
命令キャッシュ１６は高速キャッシュメモリであり、プリフェッチ／プリデコードユニット１２から受け取った命令をストアするために設けられる。ストアされた命令は、次に、命令キャッシュ１６からフェッチされて、命令整列ユニット１８に転送される。一実施形態においては、命令キャッシュ１６は、セットアソシエーティブ構造として構成され得る。命令キャッシュ１６は、アクセス時間を短縮するために、ウェイ予測方式を付加的に使用してもよい。例えば、命令キャッシュ１６は、命令の各行を特定するタグにアクセスし、このタグを比較してアドレスをフェッチしウェイを選択する代わりに、アクセスされるウェイを予測することができる。このように、アレイにアクセスする前に、ウェイが投機的に選択される。ウェイ予測を使用することによって、命令キャッシュ１６のアクセス時間が、ダイレクトマップドキャッシュと同程度となり得る。命令バイトが読み出された後に、検証のためにタグが比較される。ウェイ予測が誤りの場合は、正しい命令バイトがフェッチされ、誤った命令バイト（処理パイプラインをさらに下っている）が破棄される。命令キャッシュ１６は、フルアソシエーティブ構成、セットアソシエーティブ構成、ダイレクトマップド構成のいずれでも実装可能であるという点が注目される。
【００２６】
ＭＲＯＭユニット３４は、「ファストパス命令」のシーケンスをストアするように構成されたリードオンリーメモリである。ファストパス命令とは、デコーダ２０Ａ〜Ｃによってデコードされ、機能ユニット２４Ａ〜Ｃによって実行され得る命令である。これに対して、「ＭＲＯＭ命令」とは、複雑過ぎるためにデコーダ２０Ａ〜Ｃおよび機能ユニット２４Ａ〜Ｃによって直接デコードまたは実行ができない命令である。命令キャッシュ１６がＭＲＯＭ命令を出力すると、ＭＲＯＭユニット３４は、これに応答して、ファストパス命令のシーケンスを出力する。より詳細には、ＭＲＯＭユニット３４は、ＭＲＯＭ命令をパース（parse）し、定義済みのファストパス命令のサブセットに変換して、所望の操作が実行されるようにする。ＭＲＯＭユニット３４は、ファストパス命令のサブセットをデコードユニット２０Ａ〜Ｃにディスパッチする。
【００２７】
命令バイトは、命令キャッシュ１６からフェッチされると、命令整列ユニット１８に伝達される。命令整列ユニット１８は、デコードユニット２０Ａ〜Ｃのうちの１つに命令を転送する。また、レジスタオペランド情報が検出されて、レジスタファイル３０およびリオーダーバッファ３２に転送される。さらに、命令が１つ以上のメモリ操作の実行を要求する場合、命令整列ユニット１８は、このメモリ操作をロード／ストアユニット２６にディスパッチする。デコードされた各命令は、オペランドアドレス情報、ならびに変位データまたは即値データ（命令に含まれていることがある）と共に、リザベーションステーション２２にディスパッチされる。
【００２８】
マイクロプロセッサ１０はアウトオブオーダー実行に対応している。これにより、リオーダーバッファ３２を使用して、レジスタリード操作およびレジスタライト操作のためにプログラムの元のシーケンスを記録したり、レジスタリネーミングを実施したり、命令の投機的実行や分岐予測ミスからの復旧を可能にしたり、厳密な例外を促進する。レジスタの更新を伴う命令がデコードされると、リオーダーバッファ３２内に一時的な記憶場所が確保される。この一時的な記憶場所は、命令の投機的実行によって生じた、レジスタの投機的な状態をストアする。分岐予測が正しくない場合、誤って予測された経路に沿って投機的に実行された命令による結果が、レジスタファイル３０に書き込まれる前に、これをリオーダーバッファ３２内で無効化することができる。同様に、特定の命令が例外を発生させる場合、例外を発生させる命令に後続する命令を破棄することができる。このように、例外は「厳密」である（すなわち、例外を発生させる命令に後続する命令が、例外が発生する前に完了することはない）。特定の命令が、プログラムの順序においてこの命令に先行する命令より先に投機的に実行されるという点が注目される。先行する命令は、分岐命令のこともあれば、例外を発生させる命令のこともあり、この場合、投機的な実行の結果がリオーダーバッファ３２によって破棄され得る。
【００２９】
命令整列ユニット１８の出力において提供されるデコード済みの命令と、即値データまたは変位データとは、対応するリザベーションステーション２２に直接転送される。一実施形態においては、各リザベーションステーション２２は、対応する機能ユニットへの発行を待機している保留中の命令の命令情報（すなわち、デコード済みの命令のほか、オペランド値、オペランドタグおよび／または即値データ）を、最大３つの命令分だけ保持することができる。図中の実施形態については、各リザベーションステーション２２は、専用の機能ユニット２４に対応しているという点が注目される。したがって、リザベーションステーション２２および機能ユニット２４によって、３つの専用の「発行位置（issue position）」が形成される。つまり、発行位置０がリザベーション２２Ａおよび機能ユニット２４Ａによって形成される。整列されてリザベーションステーション２２Ａにディスパッチされた命令は、機能ユニット２４Ａによって実行される。同様に、発行位置１がリザベーションステーション２２Ｂおよび機能ユニット２４Ｂによって形成され、発行位置２がリザベーションステーション２２Ｃおよび機能ユニット２４Ｃによって形成される。
【００３０】
特定の命令がデコードされたときに、要求されたオペランドがレジスタ位置である場合は、レジスタのアドレス情報が、リオーダーバッファ３２とレジスタファイル３０とに同時に転送される。ｘ８６レジスタファイルは、３２ビットの実レジスタを８つ（すなわち、通常はＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩおよびＥＳＰ）有するということを当業者は理解するであろう。ｘ８６マイクロプロセッサアーキテクチャを採用しているマイクロプロセッサ１０の実施形態においては、レジスタファイル３０は、３２ビットの実レジスタの各々に対応する記憶場所を有する。レジスタファイル３０に、ＭＲＯＭユニット３４が使用する付加的な記憶場所が設けられてもよい。リオーダーバッファ３２は、これらのレジスタの内容を変更し、これによってアウトオブオーダー実行を可能にする結果のために、一時的な記憶場所を有する。リオーダーバッファ３２内の一時的な記憶場所が、デコード時に、実レジスタのうちの１つの内容を変更するように判定される各命令のために確保される。このため、特定のプログラムの実行中のさまざまな点において、リオーダーバッファ３２は、所定のレジスタの投機的に実行された内容を格納している場所を１つ以上有し得る。
【００３１】
所定の命令のデコード後に、リオーダーバッファ３２が、この命令においてオペランドとして使用されているレジスタに割り当てられた、先行する場所を１つ以上有することが判定された場合、リオーダーバッファ３２は、１）最後に割り当てられた場所にある値か、２）やがて先行する命令を実行する機能ユニットによって値が未だ生成されていない場合には、最後に割り当てられた場所に対するタグかのいずれかを対応するリザベーションステーションに転送する。リオーダーバッファ３２が、所定のレジスタ用に確保されている場所を有する場合、オペランド値（またはリオーダーバッファタグ）は、レジスタファイル３０ではなくリオーダーバッファ３２から提供される。要求されるレジスタのために確保された場所がリオーダーバッファ３２に存在しない場合、レジスタファイル３０から値が直接取得される。このオペランドがメモリ場所に対応している場合、ロード／ストアユニット２６を介して、このオペランドの値がリザベーションステーションに提供される。
【００３２】
特定の実施形態においては、リオーダーバッファ３２は、並列的にデコードされた複数の命令を１つの単位としてストアおよび操作するように構成される。ここでは、この構成を「ライン指向型（line-oriented）」と呼ぶ。複数の命令をまとめて操作することによって、リオーダーバッファ３２内に採用されているハードウェアを簡略化することができる。例えば、本実施形態に使用されているライン指向型のリオーダーバッファは、命令整列ユニット１８によって１つ以上の命令がディスパッチされたときは、３つの命令の命令情報を記憶するために十分な大きさの記憶領域を必ず割り当てる。これに対して、従来のリオーダーバッファでは、実際にディスパッチされる命令の数に応じて、割り当てられる記憶領域の大きさが変わる。可変の記憶領域を割り当てるために、比較的多くの論理ゲートが必要となることがある。並列的にデコードされた複数の命令のうちの各々が実行されると、これらの命令の結果が、レジスタファイル３０に同時にストアされる。この記憶領域は解放されて、並列的にデコードされる複数の命令の別の組に割り当てられる。さらに、制御論理が、同時にデコードされたいくつかの命令に分散されるため、命令１つにつき使用される制御論理回路の数が減る。特定の命令を識別する並替えバッファタグを、ラインタグとオフセットタグとの２つのフィールドに分けてもよい。ラインタグは、この特定の命令を含む、並列的にデコードされた複数の命令のセットを識別し、オフセットタグは、このセットの中のどの命令が特定の命令に対応しているかを識別する。命令の結果をレジスタファイル３０にストアして、対応する記憶領域を解放する操作は、この命令の「リタイヤ」と呼ばれているという点が注目される。さらに、任意のリオーダーバッファ構成を、マイクロプロセッサ１０の種々の実施形態において使用することができるという点も注目される。
【００３３】
上記したように、リザベーションステーション２２は、対応する機能ユニット２４によって命令が実行されるまで、その命令をストアする。（ｉ）命令のオペランドが提供され、かつ（ｉｉ）同じリザベーションステーション２２Ａ〜２２Ｃ内にあり、プログラムの順序においてこの命令に先行する命令にオペランドが提供されていない場合、命令が実行のために選択される。命令が機能ユニット２４のうちの１つによって実行された場合、この命令の結果が、この結果を待機しているリザベーションステーション２２のいずれかに直接転送されると同時に、この結果がリオーダーバッファ３２を更新するために送られる（この方法は一般に「結果転送」と呼ばれる）という点が注目される。関連する結果が転送されるクロックサイクルの間に、命令が実行のために選択されて、機能ユニット２４Ａ〜２４Ｃに送られ得る。この場合、リザベーションステーション２２は、転送された結果を機能ユニット２４に送信する。
【００３４】
一実施形態においては、各機能ユニット２４Ａ〜Ｃは、加算および減算の整数演算操作のほか、シフト操作、ローテート、論理演算および分岐処理を実行するように構成される。浮動小数点演算を処理するために、浮動小数点演算ユニット（図示せず）が使用され得るという点が注目される。浮動小数点演算ユニットは、ＭＲＯＭユニット３４から命令を受け取り、次にリオーダーバッファ３２と通信を行って命令を遂行するコプロセッサとしても動作し得る。さらに、機能ユニット２４は、ロード／ストアユニット２６によって実行されるロードメモリ操作およびストアメモリ操作のために、アドレス生成を行うように構成され得る。
【００３５】
また、各機能ユニット２４は、条件付き分岐命令の実行に関する情報を、分岐予測ユニット１４に提供する。分岐予測が正しくない場合、分岐予測ユニット１４は、命令処理パイプラインに既に入っている、誤って予測された分岐に後続する命令を破棄して、必要な命令を命令キャッシュ１６またはメインメモリからフェッチさせる。このような場合、投機的に実行され、ロード／ストアユニット２６とリオーダーバッファ３２とに一時的にストアされた命令を含め、元のプログラムシーケンスにおいて、間違って予測された分岐命令に後続する命令の結果が破棄されるという点が注目される。
【００３６】
レジスタ値が更新されようとしている場合、機能ユニット２４によって生成された結果は、リオーダーバッファ３２に送られ、メモリ場所の内容が変更される場合はロード／ストアユニット２６に送られる。結果がレジスタにストアされる必要がある場合、リオーダーバッファ３２は、命令がデコードされたときにレジスタの値のために確保された場所に、結果をストアする。機能ユニット２４およびロード／ストアユニット２６から結果を転送するために、複数の結果バス３８が設けられる。結果バス３８は、生成された結果のほかに、実行されようとしている命令を識別するリオーダーバッファタグを伝達する。
【００３７】
ロード／ストアユニット２６は、機能ユニット２４とデータキャッシュ２８との間のインターフェイスを提供する。一実施形態においては、ロード／ストアユニット２６は、待機中のロード要求またはストア要求用に、データおよびアドレス情報を記憶するための８つの記憶場所を有するロード／ストアバッファを備えて構成される。このバッファが満杯の場合は、命令整列ユニット１８は、待機中のロード要求またはストア要求に関する情報を格納するための空きが、ロード／ストアユニット２６に生じるまで待機する。また、ロード／ストアユニット２６は、データの一貫性が確実に維持されるように、待機中のストアメモリ操作に対するロードメモリ操作の依存関係を検査する。メモリ操作とは、マイクロプロセッサ１０とメインメモリサブシステムとの間で行われるデータ転送である。メモリ操作は、メモリにストアされているオペランドを利用する命令の結果生じることもあれば、データ転送のみを生じさせるが他の操作を生じさせないロード／ストア命令の結果生じることもある。さらに、ロード／ストアユニット２６は、セグメントレジスタやｘ８６マイクロプロセッサアーキテクチャによって規定されるアドレス変換メカニズムに関わるその他のレジスタなどの特殊レジスタのための、特別なレジスタ記憶領域を備えていてもよい。
【００３８】
一実施形態においては、ロード／ストアユニット２６は、ロードメモリ操作を投機的に実行するように構成される。ストアメモリ操作はプログラムの順序どおりに実行されることもあれば、予測されたウェイに投機的にストアされることもある。予測されたウェイが正しくない場合、ストアメモリ操作が行われる前のデータが、その後、予測されたウェイにリストアされて、ストアメモリ操作が正しいウェイに対して実行される。別の実施形態においては、ストア操作も同様に投機的に実行され得る。投機的に実行されたストアは、更新前に、キャッシュラインのコピーと共にストアバッファに格納される。後から、投機的に実行されたストアが分岐予測ミスまたは例外のために破棄される場合、キャッシュラインが、バッファにストアされている値にリストアされ得る。ロード／ストアユニット２６は、投機的実行をしない場合も含め、投機的実行を何回でも実行するように構成され得るという点が注目される。
【００３９】
データキャッシュ２８は、ロード／ストアユニット２６とメインメモリサブシステムとの間で転送されるデータを一時的にストアするために設けられる高速キャッシュメモリである。一実施形態においては、データキャッシュ２８は、８ウェイセットアソシエーティブ構造において、最大１６キロバイトのデータをストアできるだけの容量を有する。データキャッシュ２８は、命令キャッシュ１６と同様に、ウェイ予測メカニズムを使用することができる。データキャッシュ２８は、セットアソシエーティブ構成やダイレクトマップド構成など、各種のメモリ構成に実装できるということが理解される。
【００４０】
ｘ８６マイクロプロセッサアーキテクチャを使用するマイクロプロセッサ１０の一実施形態においては、命令キャッシュ１６およびデータキャッシュ２８は、リニアアドレス指定される。リニアアドレスは、命令によって指定されるオフセットと、ｘ８６のアドレス変換メカニズムのセグメント部分によって指定されるベースアドレスとから生成される。リニアアドレスは、メインメモリにアクセスするために、随意的に物理アドレスに変換されることがある。リニアアドレスから物理アドレスへの変換は、ｘ８６のアドレス変換メカニズムのページング部分によって指定される。リニアアドレス指定されたキャッシュは、リニアアドレスタグをストアするという点が注目される。リニアアドレスから物理アドレスへのマッピングを行うため、および変換エイリアス（alias）を検出するために、物理タグのセット（図示せず）が使用され得る。さらに、物理タグブロックが、リニアアドレスから物理アドレスへの変換を実行してもよい。
【００４１】
（プリフェッチ／プリデコードユニットおよび命令キャッシュの構成）
上記したように、インテル（Ｉｎｔｅｌ）の８２４９１／８２４９２キャッシュＳＲＡＭなど、マイクロプロセッサの外部キャッシュとして使用するために設計されている数多くのメモリデバイスは、パリティ情報をストアするように構成され得る。一実施形態においては、８つのデータビット毎に１つのパリティビットがストアされ得る。偶数パリティが望ましいと仮定した場合、０１１０１０１１２というデータバイトは、アサートされたビットの総数が偶数となるように、アサートされたパリティビットを１つ有することになる。このパリティビットは、マイクロプロセッサによって生成されて、データバイトと共に外部キャッシュにストアされ得る。マイクロプロセッサがキャッシュからこのデータをリードバックした場合、マイクロプロセッサは、アサートされているデータとパリティビットとをカウントし得る。得られた値と選択されたパリティとが一致しない場合、パリティエラーが発生し、マイクロプロセッサは、オペレーティングシステムにメモリエラーの発生を知らせるなど、適切な処置を取り得る。その他のメモリデバイス構成が、エラー検査および訂正（ＥＣＣ）用に、付加的なビットを割り当ててもよい。
【００４２】
サーバーなどの高機能システムは通常パリティおよびＥＣＣをサポートしているが、データエラーが発生する確率は比較的低く、このため低価格から中級機のシステムの設計者の多くは、これらの機能を採用しない。この種のシステムにおいては、レベル２キャッシュにあるパリティビットおよびＥＣＣビットを、プリデコード情報のストアに使用してもよい。これによって、システムレベルで高額なハードウェアの交換を必要とすることなく、性能を有利に向上し得る。
【００４３】
図４を参照すると、プリデコードユニット１２および命令キャッシュ１６の一実施形態の詳細を示す図が示される。この実施形態においては、プリデコードユニット１２が、バスインターフェイスロジック５２を介してキャッシュ５０に結合されている。キャッシュ５０は、マイクロプロセッサ１０と同じダイ（ｓｉｌｉｃｏｎ）か、またはその近く（ドーターカードもしくはマザーボートなど）でマイクロプロセッサ１０に結合される別のダイ（ｓｉｌｉｃｏｎ）にある、低レイテンシの広帯域幅メモリを備える。キャッシュ５０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、シンクロナスダイナミックアクセスメモリ（ＳＤＲＡＭ）、またはその他のタイプの低レイテンシメモリを備えていてもよい。キャッシュ５０は、マイクロプロセッサ１０と同じダイに存在することもあれば、別のダイに存在することもある。一部の実施形態においては、キャッシュ５０は、マイクロプロセッサ１０の機能ユニットに２番目に近い、すなわちレベル１の命令キャッシュ１６およびデータキャッシュ２８の後にくるキャッシュであるため、「レベル２」キャッシュと呼ばれることもある。また、キャッシュ５０は、マイクロプロセッサの外部に存在するため、「外部キャッシュ」とも呼ばれることもある。
【００４４】
バスインターフェイスロジック５２は、マルチプレクサ、バッファ、トランシーバ、ドライバか、あるいはマイクロプロセッサ１０とキャッシュ５０との間のデータ、アドレスおよび制御信号の伝達を可能にするか伝達を向上させ得る、他のどのようなタイプのバスインターフェイスロジックを有してもよい。一部の実施形態においては、マイクロプロセッサ１０とレベル２キャッシュ５０との間にバスインターフェイスロジック５２を設ける必要のないこともある。例えば、マイクロプロセッサ１０およびレベル２キャッシュ５０が互いに物理的に十分近く、かつこれらの出力トランジスタの駆動能力が十分高い場合は、バスインターフェイスロジック５２を設けることなく、マイクロプロセッサ１０とキャッシュ５０とを相互に結合することができる。
【００４５】
プリデコードロジック１２は、プリフェッチされるべき命令のアドレスを分岐予測ユニット１４から受け取って、バス６８、バスインターフェイスロジック５２およびメモリバス５６を介してキャッシュ５０にこのアドレスを伝達するように構成される。レベル２キャッシュ５０が要求されたアドレスに対応する命令バイトをストアしている場合、所定の数の命令バイト（例えば、３２バイトのキャッシュライン１つなど）が、バス５６、バスインターフェイスロジック５２およびバス６８を介してプリデコードユニット１２に伝達される。要求された命令バイトがレベル２キャッシュ５０にストアされていない場合、キャッシュ５０は、メインメモリサブシステムから要求された命令バイトを取得するように構成される。要求された命令バイトは、メインメモリサブシステムから送信されると、命令キャッシュ１６に伝達される。また、要求された命令バイトは、キャッシュ５０にストアされ得る。
【００４６】
プリデコードユニット１２は、要求された命令バイトを受け取ると、各命令バイトに対するプリデコード情報を生成する。本図に示した実施形態においては、プリデコードユニット１２は、各命令バイトにつき１つのスタートビットを生成する。要求されたアドレスの出力に応答して、プリデコードユニット１２が３２バイト（例えば、１つのキャッシュライン）を受信すると仮定すると、プリデコードユニット１２は、各命令バイトにつき１つのスタートビットを生成し、合計３２個のスタートビットを生成するように構成され得る。スタートビットが生成されると、このスタートビットは、命令キャッシュ１６に伝達されて、対応する命令バイトと共にここにストアされる。命令キャッシュ１６は、複数のキャッシュライン記憶場所６４および複数のプリデコード情報記憶場所６２にローカルに構成され得、このとき、各キャッシュライン記憶場所に１つのプリデコード情報記憶場所が対応している。また、命令バイトとプリデコードビットとが、命令整列ユニット１８に直接送信されてもよい。
【００４７】
命令キャッシュ１６内の全てのキャッシュライン記憶場所６２がひとたび満杯になると、さまざまなアルゴリズムを用いて、キャッシュミスの発生時に、どのキャッシュラインを置換すべきかどうかを決定してもよい。例えば、近いうちに必要となる情報が破棄される可能性を減らすために、キャッシュアクセスの順序を記録する最長時間未使用（ＬＲＵ）置換法を使用してもよい。上書きすべきキャッシュラインが選択されると、対応するプリデコード記憶場所６２にストアされている、このキャッシュラインに関連するプリデコード情報が、命令キャッシュ１６からプリデコードユニット１２およびバスインターフェイスロジック５２を介してキャッシュ５０に出力される。プリデコードユニット１２は、上書きされようとしている命令キャッシュ情報に対応するアドレスも伝達する。
【００４８】
キャッシュ５０がプリフェッチユニット１２および命令キャッシュ１６からプリデコードビットと、対応するアドレスとを受け取ると、キャッシュ５０は、このプリデコードビットを、対応するアドレスに関連付けられているパリティビット記憶場所６０内にストアするように構成される。一部の実施形態においては、命令キャッシュ１６内で上書きされるべき実際の命令バイトも、キャッシュ５０に出力されて、プリデコードビットと共に記憶され得る。マイクロプロセッサ１０の一部の実施形態においては、この構成は自己変更コードをサポートするために有利であろう。例えば、ストア命令によって、命令キャッシュ１６内にストアされた命令バイトが上書きされるかどうかを決定するために、ストアアドレスが命令キャッシュ１６によって「覗かれる」。上書きされる場合、ストア命令が命令キャッシュ１６およびデータキャッシュ２８に対して実行され、これによって所望の命令バイトが変更され得る。このような構成においては、プリデコードユニット１２は、変更された命令用にプリデコード情報を再計算して、計算したプリデコードビットを命令キャッシュ１６にストアするように構成され得る。キャッシュ５０がライトバックキャッシュとして構成された場合、命令キャッシュ１６内で、変更された命令バイトをストアしているキャッシュライン記憶場所が上書きされたときに、変更された命令バイトが後からキャッシュ５０に書き込まれ得る。
【００４９】
プリデコード情報（および構成によっては命令バイト）がキャッシュ５０に書き込まれた後に、命令キャッシュ１６内のキャッシュライン記憶場所およびプリデコード情報記憶場所は、新しい命令バイトと新しいプリデコード情報とによって安全に上書きされ得る。プリデコードユニット１２が、キャッシュ５０に出力済みの命令バイトに対するプリフェッチ要求またはフェッチ要求を受け取ると、プリデコードユニット１２は、要求されたアドレスをキャッシュ５０に出力する。キャッシュ５０が、対応する命令バイトおよびプリデコード情報を未だストアしている（すなわち、これらが置換されていない）場合、キャッシュ５０は、これらをプリデコードユニット１２に伝達するように構成され得る。プリデコードユニット１２は、命令バイトおよび対応するプリデコード情報を、命令整列ユニット１８と命令キャッシュ１６とに転送し得る。この実施形態では、要求された命令バイトに対する新しいプリデコード情報を生成する処理を省略することができ有利である。上記したように、マイクロプロセッサ１０の一部の実施形態においては、分岐予測ミスおよび／またはキャッシュミスが発生したときに、機能ユニット２４Ａ〜Ｃがストールするおそれがある場合、これが特に有利であろう。
【００５０】
これに対して、キャッシュ５０が、所望の命令バイトを、別のアドレスに存在する他の命令バイトによって既に置換している場合、キャッシュ５０は、要求されたバイトをメインメモリから取得して、プリデコードユニット１２に伝達するように構成され得る。キャッシュ５０は、この命令バイトをプリデコードユニット１２に送信するときに、転送しようとしている命令バイトに対する有効なプリデコード情報を命令キャッシュ５０が有していないことを示すために、特定の制御信号をアサートするように構成され得る。
【００５１】
別の実施形態においては、制御ユニット８０が、キャッシュ５０をモニタして、プリデコードビットの特定の無効化シーケンスを、メインメモリから受け取った新しい命令バイトによって置換されようとしている命令記憶場所５８に対応するパリティ／ＥＣＣ記憶場所６０にストアしてもよい。このシーケンスは、新しい命令バイトのために、プリデコード情報を効率的に「初期化する」。この構成においては、キャッシュ５０は、命令バイトがプリデコードユニット１２によって要求されたときに、対応するプリデコードビットの無効化シーケンスを出力するように構成してもよい。この構成では、キャッシュ５０は、パリティ／ＥＣＣをサポートし、出力するプリデコードビットが有効であるか無効であるかを認識するためにどのような場合でも変更する必要のない標準のキャッシュであってもよく、有利である。別法として、プリデコードユニット１２が、キャッシュ５０から受け取ったプリデコードビットを検査するように構成してもよい。プリフェッチユニット１２は、プリデコードビットが所定の無効化シーケンスと一致する場合に、新しいプリデコード情報を計算するように構成され得る。プリフェッチユニット１２は、プリデコードビットが所定の無効化シーケンスと一致しない場合に、レベル２キャッシュ５０からのプリデコードビットを、命令キャッシュ１６（および必要であれば整列ユニット１６／デコードユニット２０Ａ〜Ｃ）に転送するように構成され得る。
【００５２】
バス５６，６８の幅は、１６ビット、３２ビット、６４ビットまたは１２８ビットなど、利便性の高い幅であればどのような幅であってもよい点に留意すべきである。データバス、アドレスバスおよび制御バスを多重化して、使用するバス線の本数を減らしてもよい。一部の実施形態においては、プリデコード１２およびレベル２キャッシュ５０は、送受信されるアドレス用にパリティビットを生成するように構成され得る。しかし、これらのパリティビットは、各アドレスが伝達された後にストアされている必要がなく、破棄されてもよい。
【００５３】
さらに別の実施形態においては、スタートビットに加えてプリデコード情報が、プリデコードユニット１２によって生成され、命令キャッシュ１６にストアされ得る。例えば、対応する命令バイトが命令の最終バイトであるかどうかを示すエンドビットと、関連する命令バイトがオペコードバイトであるかどうかを示すオペコードバイトが、プリデコードユニット１２によって生成され、命令キャッシュ１６内にストアされてもよい。これらのプリデコードビットの一部または全部は、キャッシュ１６内で命令バイトが置換されたときに、キャッシュ５０内で利用可能なパリティビットおよび／またはＥＣＣビット６０の数によっては、キャッシュ５０に伝達されてもよい。
【００５４】
一部の実施形態においては、デコードユニット２０Ａ〜Ｃは、プリデコードユニット１２によって提供されたか、命令キャッシュ１６から読み出されたプリデコード情報が誤っていることを検出するように構成され得る。プリデコード情報の誤りは、様々な理由で発生することがあり、この理由はプリデコード情報を生成する方法によって変わり得る。プリデコード情報が正しくない場合、デコードユニット２０Ａ〜Ｃはストールするが、プリデコードユニット１２がプリデコード情報を生成するように構成され得る。続いて、誤ったプリデコード情報の上に、新しいプリデコード情報が命令キャッシュ１６に書き込まれ得る。別の実施形態においては、デコードユニット２０Ａ〜Ｃは、単に誤ったプリデコード情報を破棄して、デコードユニットが自らデコードを実行するように構成され得る。
【００５５】
図５を参照すると、命令キャッシュ１６およびキャッシュ５０の一実施形態がさらに詳細に示される。上記したように、命令キャッシュ１６に、命令記憶場所６２とプリデコード情報記憶場所６４とが設けられ得る。各プリデコード情報記憶場所は、１つの命令記憶場所に対応している。例えば、記憶場所８０にストアされているプリデコード情報は、命令記憶場所８２にストアされている命令バイトに対応している。本図の実施形態においては、記憶場所８０は、場所８２にストアされている各命令バイトに対応するスタートビットをストアしている。
【００５６】
本図に示すように、キャッシュ５０は、命令キャッシュ１６と同じ命令バイトをストアし得る。例えば、コードセグメント７２にある命令が初めて要求されたときに、これらは、メインメモリから、レベル２キャッシュ５０と命令キャッシュ１６とに読み出され得る。しかし、レベル２キャッシュ５０は、コードセグメント７２に対応するプリデコードデータを有していないことになるという点に留意すべきである。このため、所定の無効化定数（本例においては００００００００．．．）が場所９０にストアされる。プリデコードユニット１２は、命令バイトを受け取ると、無効化定数を検出して、コードセグメント７２に対するプリデコード情報の計算を続行する。次に、このプリデコード情報が、命令キャッシュ１６内の記憶場所８０にストアされる。
【００５７】
同じ処理は、コードセグメント７８内の命令が最初に要求される場合にも発生する。しかし、命令キャッシュ１６においてコードセグメント７８に対応する命令バイトが置換されると、プリデコード情報がレベル２キャッシュ５０にライトバックされて、場所９４にストアされる。コードセグメント７８が、命令キャッシュ１６において置換された後であり、かつレベル２キャッシュ５０において置換される前にコードセグメント７８が再度要求された場合、コードセグメント７８に対応する命令バイトとプリデコード情報とが場所９４，９６から読み出されて、命令キャッシュ１６にストアされ得る。この状態が本図に示されている。
【００５８】
一部の実施形態では、任意の所定のビットシーケンスを無効化定数として使用できるが、プリデコードユニット１２によって生成される可能性のないプリデコードビットシーケンスを選択することが有利であろう。例えば、命令の最大長が１６バイトで、キャッシュライン長が３２バイトであると仮定した場合、プリデコードユニット１２が、少なくとも１つの開始バイトもなしに、３２個の連続する命令バイトを有するキャッシュラインを受け取る可能性は低い。このため、３２個のゼロを有する無効化定数を選択すれば、無効化の誤りを低減でき、有利となり得る。プリデコードユニット１２によって計算されたプリデコードビットが、所定の無効化定数と等しい場合、無効化の誤りが発生し得る。無効化の誤りが発生した場合、たとえ元のプリデコードビットが正しかったとしても、キャッシュ５０から読み出された元のプリデコードビットが破棄されて、新しいプリデコードビットが計算され得る。
【００５９】
一実施形態においては、上記の諸機能が、マイクロプロセッサ１０内のみに実装され得る。例えば、制御ユニット８０の機能を、省略してもマイクロプロセッサ１０に搭載してもよい。同様に、一部の実施形態においては、バスインターフェイスロジック５２を省略してもマイクロプロセッサ１０に搭載してもよい。上記の諸機能をマイクロプロセッサ１０内に完全に実装すれば、開示のようにプリデコード情報をストアするコンピュータシステムを実装する費用が有利に低減し得る。別の実施形態においては、所望の機能を、マイクロプロセッサ１０と、１つ以上のインターフェイスまたはサポートチップとに分散させてもよい。
【００６０】
図６を参照すると、レベル２キャッシュ５０にプリデコード情報をストアするための方法の一実施形態を示すフローチャートが示される。最初に、命令バイトが命令キャッシュ１６から要求される（ステップ１４０）。要求されたバイトが命令キャッシュ１６にストアされている場合、これらが、対応するプリデコード情報と共に、整列ユニット１６およびデコードユニット２０Ａ〜Ｃに伝達される（ステップ１４２，１５２）。これに対し、要求されたバイトが命令キャッシュ１６にストアされていない場合、要求されたアドレスがレベル２キャッシュ５０に転送される（ステップ１４２，１４４）。要求された命令バイトがレベル２キャッシュ５０にストアされていない場合、この命令バイトがメインメモリサブシステムから読み出される（ステップ１４６，１４８）。要求された命令バイトがメインメモリサブシステムから受信されると、この命令バイトが無効化定数と共にレベル２キャッシュ５０にストアされる（ステップ１４８，１５０）。上記したように、無効化定数は、レベル２キャッシュ５０内のプリデコード記憶場所を効率的に初期化して、これによってプリデコードユニット１２に、新しいプリデコード情報を生成する必要があることを知らせる。プリデコードユニット１２が命令バイトおよびプリデコードビットを受け取ると、プリデコードビットが無効化定数と等しいかどうかが検査される（ステップ１５４，１５６）。プリデコードビットが無効化定数と等しい場合、プリデコードユニット１２は、新しいプリデコード情報を生成するように構成されている（ステップ１５６，１６４）。続いて、命令バイトと新しいプリデコード情報とが、命令キャッシュ１６にストアされる（ステップ１５８）。命令バイトおよび新しいプリデコード情報をストアするには、命令キャッシュ１６に既にストアされているキャッシュラインを置換する必要がある場合、上書きされようとしているストア済みのキャッシュラインに対応するプリデコード情報が、レベル２キャッシュ５０に戻されてストアされる（ステップ１６０，１６６）。
【００６１】
本図の各ステップは、説明のみを目的として、逐次的に示されているという点に留意すべきである。別の実施形態も可能であり、考慮される。上記のステップのうちの多くは組み合わせて実行しても、並列的に実行してもよい。例えば、ステップ１５０，１５４は並列に実行することができる。さらに、上記したように、無効化定数を使用するステップを省略することができる。
【００６２】
（パリティ情報および／またはＥＣＣ情報と犠牲にされた命令バイトおよび犠牲にされたデータバイトとのストア）
上記の実施形態の不具合の１つに、パリティビットおよび／またはＥＣＣ（エラー検査および訂正）ビットがプリデコード情報のストアに使用されるために、レベル２キャッシュにストアされている命令バイトおよびデータバイトが、シングルビットエラーおよびマルチビットエラーから保護されないという点がある。しかし、一部の実施形態においては、上記の方法ならびにシステムを変更して、レベル２キャッシュにストアされているデータおよび命令バイトを、シングルビットエラーおよび／またはマルチビットエラーから少なくともある程度保護することができる。
【００６３】
図７Ａを参照すると、レベル２キャッシュにプリデコード情報をストアする一方で、ストアされた命令バイトおよびデータバイトを、シングルビットエラーおよびマルチビットエラーから保護するためのこの種のシステムの実施形態のうちの１つを示す。キャッシュは、キャッシュラインと呼ばれることが多い、論理行および／または論理列に構成される。本図に示すように、命令キャッシュ１６内の各キャッシュラインは、ストアされている命令バイト１８４Ａに対応するパリティビット１８０Ａおよびプリデコード情報１８２Ａをストアし得る。上記の実施形態に関して記載したように、プリデコードビット１８２Ａは、命令バイト１８４Ａに関する情報（例えば、開始バイト、終了バイト、オペコードバイトに関する情報）を提供する。上記したように、プリデコードビット１８２Ａは、命令バイト１８４Ａのデコードに要する時間を短縮するために使用され得る。例えば、命令バイト１８４Ａ内にある開始バイトおよび終了バイトを示しているプリデコードビット１８２Ａは、命令バイト１８４Ａ内の命令を迅速に整列するために使用され得る。プリデコードビット１８２Ａおよび命令バイト１８４Ａの合計に基づいて、偶数パリティまたは奇数パリティのいずれかを生成するために、パリティビット１８０Ａが計算されてもよい。別の実施形態においては、パリティビット１８０Ａは、命令バイト１８４Ａのみに基づいて計算されてもよい（この場合、命令バイト１８４Ａのみの奇数ビットエラーしか検出できない）。この実施形態においては、命令バイト１８４Ａはより強力に保護される一方で、プリデコードビット１８２Ａは保護されない可能性がある。プリデコードビット１８２Ａが単に予想的な値に過ぎない実施形態においてはこれが許容され得る。例えば、プリデコードビット１８２Ａは、後から無効であると判定される可能性がある。
【００６４】
また、データキャッシュ２８も、数多くのキャッシュラインを設けて構成され得る。各キャッシュラインが、自身のデータバイトのセット１８８Ａと、対応するＥＣＣビット１８６Ａとを有してもよい。上記のように、ＥＣＣビット１８６Ａは、データバイト１８８Ａ内のシングルビットエラーと一部のマルチビットエラーとを検出できるように選択されてもよい。一部の実施形態においては、ＥＣＣビット１８６Ａは、シングルビットエラーの検出および訂正が可能となるようなアルゴリズムに従って選択されてもよい。
【００６５】
本明細書で使用されるように、ＥＣＣ情報とはエラー訂正コード情報を指す。デジタル電子システムにおいては、情報はバイナリ形式（すなわち１または０）で表される。バイナリ情報がある点から別の点に渡されたり、メモリにストアされる場合には、エラーが発生する可能性が常に付いて回る。例えば、１が０と解釈されたり、０が１と解釈されることがある。このエラーは、媒体の欠陥、電気的雑音、部品の故障、接続不良のほか、老朽化、放射または他の要因による劣化によって発生し得る。ビットが誤って解釈された場合、「ビットエラー」が発生したといわれる。エラー訂正とは、このようなビットエラーエラーを検出して訂正する処理のことである。エラー訂正はハードウェアでもソフトウェアでも実行することができるが、ソフトウェアによる解決策は処理があまりにも遅いことが多いため、高データレートを得るためには、エラー訂正は好ましくは専用のハードウェアで実行される。メモリ密度と動作周波数とが向上するにつれて、シングルビットエラーまたはマルチビットエラーの発生確率も上がり得る。このため、エラー訂正コードのサポートは、一層重要になると考えられる。例えば、一部の携帯式システムにおいては、エラー訂正コードは、メモリのリフレッシュレートを大幅に低減させることによって、システムのバッテリの長寿命化に利用されている。本明細書に開示のシステムならびに方法は、さまざまなＥＣＣアルゴリズムによって実装でき、有利である。アルゴリズムの選択は、メモリ構造と、ＥＣＣ情報のストアに利用可能なビットの数とから決まり得る。一部の実施形態においては、ＥＣＣビット１８６Ａおよびデータバイト１８８Ａを、ＥＣＣアルゴリズムの一部に組み入ることができるという点にさらに留意すべきである。
【００６６】
本明細書で使用されるように、パリティ検査は、メモリシステムにおけるシングルビットエラーの検出方法としては不十分である。パリティをサポートしているメモリは、通常、メモリに記憶される１バイトにつき、１つの余分なビットを付与するが、他の構成も可能である。この余分なビットは、エラーを検出できるようにする情報のストアに使用される。このシステムメモリにストアされるデータの各バイトは、実データを表す８つのビットを有し、各ビットは１または０の値を取る。このため、バイト中の０または１の個数を数えることができる。例えば、１０１１００１１というバイトには０が３個、１が５個含まれる。００１００１００というバイトには、０が６個、１が２個含まれる。このように、１の個数が偶数であるバイトもあれば、１の個数が奇数であるバイトもある。パリティ検査が有効になっている場合、バイトがメモリに書き込まれる度に、パリティ生成器／検査器と呼ばれる論理回路がこのバイトを検査して、データバイト中の１の個数が偶数か奇数かを判定する。１の個数が偶数の場合は９番目のビット（すなわちパリティビット）が１に設定され、奇数の場合には０に設定される。この結果、元の８つのデータビットに含まれる１の個数を問わず、９個の全ビットを検査したときの１の個数は常に奇数となる。この実装は「奇数パリティ」と呼ばれる。また、パリティ生成器／検査器が、１の合計個数が必ず偶数になるように設定する偶数パリティも可能である。
【００６７】
データがメモリからリードバックされる場合には、パリティ回路は今度は検査器として動作する。パリティ回路は、９個の全ビットを読み出し、１の個数が奇数か偶数かを判定する。１の個数が偶数の場合、奇数のビット中にエラーが発生したと考えられる。このように、シングルビットエラーを検出するためにパリティメモリが使用される。上記のＥＣＣの例とは異なり、パリティ生成器／検査器回路は、１つのビットが正しくないことを検出できるが、正しくないビットを特定することはできない。パリティ生成とパリティ検査とは、メモリの読出操作または書込操作中に並列的に実行することができるため有利である。このため、パリティ生成とパリティ検査とが、メモリシステムの動作速度の低下を招くことはない。
【００６８】
一部の実施形態においては、エラー検査および訂正コードも並列的に実行してもよい。別の実施形態においては、エラー検査および訂正コードは逐次処理として実行され得る。この場合、検出された任意のエラーを、エラー検査および訂正回路に訂正させる時間のため、システムの動作がわずかに遅くなる。しかし、この遅延は、メモリアーキテクチャの実装によって決まり、比較的小さい（例えば、２〜３％）と考えられる。
【００６９】
図７Ａに戻ると、一実施形態においては、命令およびデータキャッシュ２８は、セットアソシエーティブ方式で構成することができる。したがって、各セットは、列に対応する多数の「ウェイ」を有する。ＥＣＣビット１８６Ａは、特定のキャッシュライン内のデータ（すなわち、１つの列と１つの行との交点または単一のウェイ）に対応し得る。命令キャッシュ１６も同様に構成され得る。このため、命令キャッシュ１６内の各キャッシュラインは、それぞれパリティビット１８０Ａとプリデコードビット１８２Ａとの組を有し得る。一部の実施形態においては、レベル２キャッシュ５０は、プロセッサ１０のダイに実装され得る。これによって、レベル２キャッシュ５０がプロセッサ１０と同一周波数で動作できるようになり、有利である。
【００７０】
一実施形態においては、レベル２キャッシュ５０は、競合ミスの結果、メモリサブシステムにライトバックされるべき犠牲にされた、すなわちコピーバックのキャッシュブロックのみを格納する「排他的」キャッシュとして構成され得る。犠牲にされた、すなわちコピーバックという用語は、以前にレベル１キャッシュ（すなわち命令キャッシュ１６およびデータキャッシュ２８）に格納されていたが、より新しいデータを格納する余地を作るために上書きされた（犠牲にされたまたは追い出された）キャッシュブロックを指す。一実施形態においては、レベル２キャッシュ５０は２５６キロバイトで、命令キャッシュ１６およびデータキャッシュ２８は各々６４キロバイトであり、このためプロセッサ１０が占有できる記憶領域が３８４キロバイトとなり得る。上記のキャッシュ容量は一例であり、プロセッサ１０の正確な実装に応じて、キャッシュ容量の変更が可能であり得るという点に留意すべきである。同様に、レベル２キャッシュ５０を、プロセッサ１０に対してオフチップに実装してもよい。別の実施形態においては、レベル２キャッシュ５０は、命令キャッシュ１６およびデータキャッシュ２８にある全データのコピーを格納している「包括的」キャッシュとして実装されてもよい。さらに、別の実施形態では、命令キャッシュ１６とデータキャッシュ２８との記憶容量を変えてもよい。一部の実施形態においては、レベル２キャッシュ５０をセットアソシエーティブキャッシュとして実装してもよい。
【００７１】
本図に示すように、命令キャッシュ１６内の特定のキャッシュラインが、新しい命令バイトをストアするために必要となる場合、前にプリデコードされていた命令バイト（１８２Ａ，１８４Ａ）が「犠牲にされる」。レベル２キャッシュ５０は、（ａ）プリデコード情報およびパリティ情報を伴う命令バイト、または（ｂ）ＥＣＣ情報を伴うデータバイトのいずれもストアできるため、レベル２キャッシュ５０にストアされている情報の種類を示す指示ビット（例えばコード指示ビット１９０）がストアされ得る。この指示ビット１９０は、デマルチプレクサ３１６によって使用され、出力３２０が、パリティ検査ユニット３１４からの出力であるか、エラー検査および訂正ユニット３１２からの出力であるかが選択され得る。デマルチプレクサ３１６は、パリティ検査ユニット３１４またはエラー検査および訂正ユニット３１２から、エラーの発生を示す情報を受け取ると、エラー割込信号３１８をアサートすなわち出力するようにも構成され得る。例えば、デマルチプレクサ３１６は、パリティ検査ユニット３１４がパリティエラーが発生したと判断した場合に、割込信号３１８をアサートするように構成され得る。同様に、デマルチプレクサ３１６は、エラー検査および訂正ユニット３１２から対応するエラー信号を受け取ると、これに応答してエラー信号３１８をアサートするように構成され得る。本図に示すように、エラー検査および訂正ユニット３１２は、ＥＣＣビット１８６Ｂとデータバイト１８８Ｂとを受け取るように構成され得る。
【００７２】
パリティ検査ユニット３１４は、パリティビット１８０Ｂ、プリデコードビット１８２Ｂおよび命令バイト１８４Ｂを受け取るように構成され得る。上記したように、パリティビット１８０Ｂは、プリデコードビット１８２Ｂおよび命令バイト１８４Ｂに含まれる、アサートされたビットの数を判定することによって生成され得る。本図に示すように、指示ビット１９０，１９２は、レベル２キャッシュ５０の対応するキャッシュラインに、命令コードとデータバイトとのいずれがストアされているかを示し得る。デマルチプレクサ３１６は、パリティ検査ユニット３１４からの出力とＥＣＣユニット３１２からの出力とを選択するための、指示ビットまたはデータ型ビット１７０（例えば、ビット１９０，１９２）を受け取るように構成され得る。
【００７３】
本図に示すように、命令キャッシュ１６内の各キャッシュライン毎に１つのパリティビット１８０Ａがストアされ得る。例えば、パリティビット１８０Ａは、キャッシュライン３００に対するパリティを示すために使用され得る。同様に、ＥＣＣビット１８６Ａは、データキャッシュ２８にあるキャッシュライン３０２内のデータバイト１８８Ａのエラー検出および訂正のために使用され得る。本図ではレベル２キャッシュ５０がダイレクトマップドキャッシュとして示されているが、レベル２キャッシュ５０は、複数の列またはウェイを有するセットアソシエーティブキャッシュまたはフルアソシエーティブキャッシュとして実装されてもよい。本図に示すように、新しいデータが命令キャッシュ１６およびデータキャッシュ２８に書き込まれ、データが上書きされる（すなわち犠牲となる）ことに応答して、レベル１のキャッシュライン３００，３０２がレベル２キャッシュ５０に書き込まれ得る。
【００７４】
本図には記載されていないが、パリティユニット３１４を使用して、命令キャッシュ１６からの読み出し（プロセッサの整列ユニット、デコードユニットおよび実行ユニットに転送する命令の読み出しや、レベル２キャッシュ５０に送られる犠牲にされた命令の読み出しを含む）に対してパリティ検査を実行してもよい。別の実施形態においては、パリティユニット３１４の別例が実装され、この機能が提供される。同様に、エラー検査および訂正ユニット３１２（またはその別例）を使用して、データキャッシュ２８からの読み出しに対してデータのエラー検査および訂正を実施してもよい。
【００７５】
一実施形態においては、レベル２キャッシュ５０は、２つの部分として実装され、各部分が別の種類の情報をストアしてもよい。例えば、レベル２キャッシュ５０の第１部分は、命令バイトと、対応するプリデコードビットおよびパリティビットのみをストアするように構成され得る。レベル２キャッシュ５０の第２部分は、データバイトおよびＥＣＣビットのみをストアするように構成され得る。レベル２キャッシュのこの実施形態によって、データ型ビット１７０（例えば、コードビット１９０およびデータビット１９２）をストアする必要性を低減させる可能性があり、有利である。しかし、この種の構成は、命令バイトとデータバイトとの比率が異なる別のプログラムが複数実行されたときに、レベル２キャッシュ５０の効率の低下を招く可能性がある。データ型ビット１７０は、情報が、レベル１キャッシュのいずれの部分（すなわち、命令キャッシュ１６またはデータキャッシュ２８）から送られたかを識別することによって生成され得るという点に留意すべきである。例えば、命令キャッシュ１５からの情報には、この情報が命令コード情報であることを示すデータ型ビットが自動的に提供され得る。同様に、レベル２キャッシュ５０にストアされようとしているデータキャッシュ２８からの情報には、この情報がデータであることを示すデータ型指示ビット（例えば、データビット１９２）が自動的に提供され得る。
【００７６】
図７Ｂを参照すると、犠牲にされた命令バイトおよびプリデコード情報をストアするためのシステムの別の実施形態が示される。この実施形態においては、パリティ情報が命令キャッシュ１６にストアされず、ＥＣＣ情報がデータキャッシュ２８にストアされない。これは、命令キャッシュ１６およびデータキャッシュ２８の実装に要するダイのスペースを有利に低減させ得る。これに代わり、命令バイト１８４Ａが命令キャッシュ１６から読み出されて、レベル２キャッシュ５０に書き込まれるときに、パリティユニット４０２が、命令バイト１８４Ａに対するパリティビットを生成し得る。同様に、データバイト１８８Ａがデータキャッシュ２８から読み出されて、レベル２キャッシュ５０にストアされるときに、レベル２キャッシュが、データバイト１８８Ａに対するＥＣＣビットを生成するように構成され得る。このシステムの他の部分の動作は、図７Ａの実施例と同じである。
【００７７】
図８Ａを参照すると、プリデコード情報をストアするための方法の一実施形態が示される。本実施形態においては、所望の命令バイトのセットをロードするためにフェッチが開始される（ステップ２４０）。このフェッチを受けて、命令キャッシュがサーチされ、命令キャッシュが所望の命令バイトをストアしているかどうかが判定される（ステップ２４２）。命令キャッシュが所望の命令バイトをストアしている場合、命令バイトと対応するプリデコード情報とが命令キャッシュから読み出される（ステップ２５２）。これは「命令キャッシュヒット」と呼ばれ、通常は命令キャッシュはメモリシステムの残りの部分よりも低レイテンシであるため好ましいことが多い。しかし、所望の命令バイトが命令キャッシュにストアされていない場合は、レベル２キャッシュからこの命令バイトが要求され得る（ステップ２４４）。上記したように、一部の実施形態においては、レベル２キャッシュは、プロセッサおよびレベル１キャッシュと同じチップ（すなわちダイ）に実装されてもよい。所望の情報がレベル２キャッシュにストアされていない場合（ステップ２４６）、この命令バイトと対応するパリティ情報とがメインメモリから読み出され得る（ステップ２４８）。当業者が理解しているように、メインメモリサブシステムとして、レベル２キャッシュより下位のキャッシュがさらに存在してもよい。一部の実施形態においては、メインメモリサブシステムは、パリティ情報またはＥＣＣをサポートするように構成され得る。例えば、メインメモリサブシステムは、メインメモリに書き込まれるデータおよびメインメモリから読み出されるデータに対するパリティビットまたはＥＣＣビットをストアするように構成され得る。しかし、別の実施形態においては、メインメモリサブシステムが、パリティ情報および／またはＥＣＣ情報をストアまたはサポートしなくてもよい。
【００７８】
一部の実施形態においては、レベル２キャッシュは、レベル１キャッシュにある全情報のコピーをストアするように構成され得る。このような実施形態においては、メインメモリから読み出された命令バイトは、パリティビットおよび指示ビット（例えば、データ型ビット）のほか、この命令バイトのプリデコードビット（未だ生成されていない）に対する無効化定数と共にレベル２キャッシュにストアされ得る。プリデコードビットが既に生成されている場合や、ひとたびプリデコードビットが生成されると、プリデコードビットが、無効化定数を上書きして、レベル２キャッシュにストアされ得る（ステップ２５０）。しかし、上記したように、レベル２キャッシュは「排他的」であり、このため別の実施形態では、レベル１キャッシュからの犠牲にされた情報のみがストアされてもよい。このような実施形態においては、メインメモリサブシステムから読み出された命令バイトは、処理のこの段階ではレベル２キャッシュにストアされなくてもよい。１つ以上のプリデコードユニットは、命令バイトがメインメモリサブシステムから受信されると、この命令バイトに対するプリデコードビットを生成するように構成され得る（ステップ２５２）。
【００７９】
メインメモリから読み出された情報に対するパリティ検査をサポートする実施形態においては、プリデコードユニット（またはパリティユニット）は、メインメモリから正しいデータが受信されたことを保障するため、パリティを検査するように構成され得る（ステップ２５４）。一部の実施形態においては、パリティの検出は、プリデコードユニットが、対応するプリデコードビットを生成する処理と並列的に実行されても、この前に実行されてもよいという点に留意すべきである。エラーが存在する場合、プリデコードユニットは、プロセッサに対してエラー信号または割込みをアサートするように構成され得る（ステップ２５６）。パリティ検査がエラーを通知しなかった場合は、メインメモリサブシステムから読み出されたプリデコードビットが無効化定数と等しいかどうかが検査され得る（ステップ２５８）。
【００８０】
プリデコードビットが無効化定数と等しい場合、プリデコードユニットは新しいプリデコード情報を生成するように構成され得る（ステップ２６０）。プリデコードビットが無効化定数と等しくない場合、プリデコードユニットは、命令バイトと以前に生成済みのプリデコードビットとを命令キャッシュにストアするように構成され得る（ステップ２６２）。一部の実施形態においては、命令キャッシュは、命令バイトに対するパリティビットもストアするように構成され得るという点に留意すべきである。別の実施形態においては、命令バイトが命令キャッシュから読み出されて、レベル２キャッシュにストアされる（すなわち犠牲にされる）と、この命令バイトに対するパリティビットが生成されてもよい。このため、一部の実施形態においては、パリティ検査がレベル２キャッシュに対してのみ実施され得る。別の実施形態においては、命令キャッシュ（すなわちレベル１キャッシュ）と、レベル２キャッシュとの両方に対してパリティ検査が実行されてもよい。さらに、一部の実装においては、メインメモリサブシステムに対してパリティ検査が実行されてもよい。
【００８１】
プリデコードビットが無効化定数と等しい場合、プリデコードユニットは、命令バイト、プリデコードビットおよびパリティ情報を命令キャッシュにストアするように構成され得る（ステップ２６２）。このデータがすぐに必要とされる場合、命令バイトが、デコードユニットにも提供されて処理され得る。しばらく経った後に、命令バイトとプリデコード情報とをストアしている、命令キャッシュにある対応するキャッシュラインが、上書きすなわち犠牲にされ得る（ステップ２６４）。この場合、命令キャッシュからのプリデコード情報と命令バイトとは、対応するパリティビットおよびデータ型ビットと共にレベル２キャッシュにストアされ得る（ステップ２６６）。
【００８２】
図８Ｂを参照すると、犠牲にされたデータバイトを処理するための方法の一実施形態が示される。まず、ロード／ストアユニットによって、データバイトが要求またはフェッチされ得る（ステップ３７０）。このフェッチ処理の一環として、所望のデータバイトがストアされているかを判定するために、レベル１キャッシュすなわちデータキャッシュが検査され得る（ステップ３７２）。データバイトがデータキャッシュにストアされている場合、このデータバイトが、対応するＥＣＣ情報と共にデータキャッシュから読み出され得る（ステップ３７４）。しかし、所望のデータバイトがデータキャッシュにストアされていない場合、このデータがレベル２キャッシュから要求され得る（ステップ３７６）。データがレベル２キャッシュにストアされていない場合（ステップ３７８）、所望のデータバイトがメインメモリから読み出され得る（ステップ３８０）。
【００８３】
上記したように、図８Ａに関して記載したパリティ情報と同様に、ＥＣＣ情報は、（ａ）レベル２キャッシュのみ、（ｂ）レベル１キャッシュとレベル２キャッシュとの両方、あるいは（ｃ）レベル１キャッシュ、レベル２キャッシュおよびメインメモリサブシステム、のいずれかに対してサポートされ得る。また、他の組み合わせ（例えば、メインメモリサブシステムおよびレベル２キャッシュのみ）も可能である。メインメモリ由来のＥＣＣ情報をサポートする実施形態については、メインメモリサブシステムからデータバイトが受信されたときに、対応するＥＣＣ情報が検査され得る（ステップ２８２）。ＥＣＣ情報が正しくない場合、エラー検査および訂正ユニットは、このエラーを訂正しようと試行し得る。エラーが訂正不可能な場合は、エラーが通知され得る（ステップ３８４）。ＥＣＣ情報が正しい（またはエラーが訂正された）場合、ＥＣＣ情報が、データバイトと共にレベル２キャッシュにストアされ得る（ステップ３８６）。図８Ａに関して上記したように、本例では包括的なレベル２キャッシュを想定している。一部の実施形態においては、レベル２キャッシュは排他的であり得、メインメモリから直接読み出されたデータは、レベル１キャッシュで犠牲にされるまでレベル２キャッシュにストアされないこともある。
【００８４】
しばらく経った後に、データバイトおよびＥＣＣ情報をストアしているレベル１キャッシュラインが犠牲にされ得る、すなわち上書きされ得る（ステップ３９２）。この場合、データキャッシュからのデータバイトは、対応するＥＣＣビットおよびデータ型ビットと共にレベル２キャッシュにストアされ得る（ステップ３６６）。このデータ型ビットは、ストアされている情報がデータおよびＥＣＣ情報であって、パリティ情報およびプリデコード情報を有する命令バイトではないことを示すために使用され得る。
【００８５】
図９を参照すると、犠牲にされた命令バイトに対するプリデコード情報をストアする一方で、犠牲にされたデータバイトに対するパリティ保護および／またはＥＣＣ保護を提供するように構成されたコンピュータシステムの一実施形態が示される。本実施形態においては、プロセッサ１０は、レベル１命令キャッシュ１６とレベル１データキャッシュ２８とを有する。また、プロセッサ１０は、プリデコード／プリフェッチユニット１２とロード／ストアユニット２６とを有する。本図に示すように、プリフェッチ／プリデコードユニットはパリティ生成および検査ユニット４０２を、ロード／ストアユニット２６はエラー検査および訂正ユニット４０４をそれぞれ備える。
【００８６】
本実施形態においては、レベル２キャッシュ５０は、メインのレベル２キャッシュ５０にストアされたバイトに対応するパリティ情報および／またはＥＣＣ情報をストアするように構成された数多くの記憶場所４０６を備えて構成される。この実施形態においては、コンピュータシステムは、メモリコントローラ４１０も有する。メモリコントローラ４１０は、メインメモリ４２０から送られたバイトに対して、パリティを生成すると共にパリティ検査を実行するように構成されたパリティユニット４１４を有してもよい。パリティがサポートされている実施形態については、メインメモリサブシステム４２０は、パリティ情報をストアするための付加的なメモリ記憶場所４３０を備えていてもよい。
【００８７】
別の実施形態においては、メモリコントローラ４１０は、メインメモリサブシステム４２０にストアされている情報に対して、エラー訂正コードを生成および検査するように構成されたエラー検査および訂正ユニット４１６を有し得る。メモリ４２０、メモリコントローラ４１０およびプロセッサ１０の間で情報を転送するためのバスに対して、さらに別のエラー検査および訂正情報が生成されることがあるという点に留意すべきである。この情報が、ここに記載したＥＣＣ情報および／またはパリティ情報に追加され得る。上記したように、一部の実施形態においては、メモリサブシステム４２０とメモリコントローラ４１０とは、パリティ情報および／またはＥＣＣ情報をサポートしないように構成されてもよい。本図にも記載されているように、一部の実施形態においては、レベル２キャッシュ５０は、各キャッシュラインに対してデータ型ビット４０８をストアするように構成され得る。
【００８８】
レベル１命令キャッシュ１６において、パリティビットの使用により検出されたシングルビットエラーは、このキャッシュラインを破棄して、メモリ４２０から対応する命令バイトを読み出すことによって訂正することができる（メモリ自体は、ＥＣＣ情報によって保護され得る）。逆に、メモリ４２０に存在するデータの元のコピー（すなわち古いコピーが）がエラー訂正に使用されないように、レベル１データキャッシュ２８にストアされているデータが変更され得る。このように、データキャッシュ２８にＥＣＣ情報を有することは、一部の実施形態においては、メモリ４２０からデータバイトをコピーするエラー訂正方法に代わる、代替の機構を提供するために特に有用であり得る。
【００８９】
（コンピュータシステムの例）
図１０を参照すると、マイクロプロセッサ１０を利用したコンピュータシステム５００の一実施形態のブロック図が示される。図中のシステムにおいて、メインメモリ５０４は、メモリバス５０６を介してバスブリッジ５０２（メモリコントローラとしても動作し得る）に結合され、グラフィックコントローラ５０８は、ＡＧＰバス５１０を介してバスブリッジ５０２に結合されている。最後に、複数のＰＣＩデバイス５１２Ａ〜５１２Ｂが、ＰＣＩバス５１４を介してバスブリッジ５０２に結合されている。さらに、ＥＩＳＡ／ＩＳＡバス５２０を介して１つ以上のＥＩＳＡデバイスまたはＩＳＡデバイス５１８を電気的に接続できるように、セカンダリバスブリッジ５１６を設けてもよい。マイクロプロセッサ１０はＣＰＵバス５２４を介してバスブリッジ５０２に結合されている。
【００９０】
バスブリッジ５０２は、マイクロプロセッサ１０、メインメモリ５０４、グラフィックコントローラ５０８およびＰＣＩバス２１４に接続されたデバイスの間のインターフェイスを提供している。バスブリッジ５０２に接続されたデバイスのうちの１つから操作（operation）が受信されると、バスブリッジ５０２は、この操作のターゲット（例えば、特定のデバイスか、ターゲットがＰＣＩバス５１４に接続している場合はＰＣＩバス５１４）を識別する。バスブリッジ５０２は、この操作をターゲットデバイスに転送する。バスブリッジ５０２は一般に、この操作を、ソースのデバイスまたはバスが使用しているプロトコルから、ターゲットのデバイスまたはバスが使用しているプロトコルに変換する。
【００９１】
セカンダリバスブリッジ５１６は、ＰＣＩバス５１４に対するインターフェイスをＩＳＡ／ＥＩＳＡバスに提供すると共に、必要に応じて追加の機能も有している。例えば、一実施形態においては、セカンダリバスブリッジ５１６は、ＰＣＩバス５１４の所有権を調停（arbitrating）するためのマスタＰＣＩアービタ（図示せず）を有する。また、必要に応じて、セカンダリバスブリッジ５１６の外側に設けたか、ブリッジ５１６に搭載した入出力コントローラ（図示せず）をコンピュータシステム５００に設けて、キーボードおよびマウス５２２、ならびに様々なシリアルポートおよびパラレルポートをサポートしてもよい。さらに、別の実施形態においては、マイクロプロセッサ１０とバスブリッジ５０２との間にあるＣＰＵバス５２４に、外部キャッシュユニット（図示せず）を結合してもよい。別法として、外部キャッシュをバスブリッジ５０２に結合してもよく、この外部キャッシュのためのキャッシュ制御ロジックをバスブリッジ５０２に搭載してもよい。
【００９２】
メインメモリ５０４は、アプリケーションプログラムのストア先であると共に、マイクロプロセッサ１０の主な実行元のメモリである。適切なメインメモリ５０４は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）を有し、好ましくはＳＤＲＡＭ（シンクロナスＤＲＡＭ）の複数のバンクを有する。
【００９３】
ＰＣＩデバイス５１２Ａ〜５１２Ｂの例には、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードディスクドライブ、フロッピーディスクドライブもしくはドライブコントローラ、ＳＣＳＩ（小型コンピュータシステムインターフェイス）アダプタおよびテレフォニカードなどの様々な周辺デバイスがある。同様に、ＩＳＡデバイス５１８の例には、モデム、サウンドカード等の様々なタイプの周辺デバイスのほか、種々のデータ取得カード（ＧＰＩＢインターフェイスカードまたはフィールドバスインターフェイスカード等）などがある。
【００９４】
グラフィックコントローラ５０８は、ディスプレイ５２６の文字および画像の表示を制御するために設けられる。グラフィックコントローラ５０８は、メインメモリ５０４との間で効率的に移動可能な３次元データ構造を表示するために、当業界において一般に公知となっているグラフィックアクセラレータを具体化し得る。このため、グラフィックコントローラ５０８は、バスブリッジ５０２内でターゲットインターフェイスに対するアクセスを要求および受け取って、これによってメインメモリ５０４へのアクセスを取得できるという点で、ＡＧＰバス５１０のマスタであり得る。専用のグラフィックバスによって、メインメモリ５０４から高速にデータを取得することが可能となる。グラフィックコントローラ５０８は、特定の操作のために、ＡＧＰバス５１０でＰＣＩプロトコルトランザクションを生成するようにさらに構成され得る。このため、バスブリッジ５０２のＡＧＰインターフェイスは、ＡＧＰプロトコルのトランザクションと、ＰＣＩプロトコルのターゲットトランザクションおよびイニシエータトランザクションとの両方をサポートする機能を有し得る。ディスプレイ５２６は、画像または文字を表現可能な任意の電子ディスプレイである。適切なディスプレイ５２６には、陰極線管（「ＣＲＴ」）ディスプレイや液晶ディスプレイ（「ＬＣＤ」）などがある。
【００９５】
上記の説明においてＡＧＰバス、ＰＣＩバス、およびＩＳＡバスまたはＥＩＳＡバスを例として採り上げたが、必要に応じて任意のバスアーキテクチャを代用してもよいという点が注目される。さらに、コンピュータシステム５００は、追加のマイクロプロセッサを備えたマルチプロセッシングコンピュータシステムであってもよいという点が注目される。
【００９６】
さらに、本議論は、種々の信号のアサートに言及し得るという点が注目される。本明細書で使用されるように、ある信号が特定の条件を示す値を伝達する場合、その信号は「アサートされている」という。これに対して、ある信号が特定の条件がないことを示す値を伝達する場合、その信号は「ディアサートされている」か「アサートされていない」という。信号が論理０値を伝達する場合、または逆に論理１値を伝達する場合、この信号はアサートされていると定義することができる。さらに、上記の説明において種々の値が破棄されていると記載した。値は、さまざまな方法によって破棄され得るが、一般には、この値を受け取る論理回路によって無視されるように値を変更することが行われる。例えば、値が１つのビットを有する場合、この値の論理状態を反転して値を破棄してもよい。値がｎビット値である場合、ｎビットコードのうちの１つのビットが、値が無効であることを示す値であり得る。このビットを、コードを無効にする値に設定すると、値が破棄される。さらに、ｎビット値が、設定されるとそのｎビット値が有効であることを示す有効ビットを有していてもよい。この有効ビットをリセットすることによって、値を破棄することができる。また、値を破棄する別の方法が使用されてもよい。
【００９７】
プリデコード情報および犠牲にされた命令バイトおよび／またはデータバイトをストアするためのシステムならびに方法を開示した。ここに記載し図に示した実施形態をかなり詳細に記載したが、他の実施形態も可能であり、考慮される。図面および詳細な説明は、開示の実施形態に本発明を限定することを意図するものではなく、本発明が添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれる全ての変形例、均等物および代替例を含むことが意図にあることが理解されるべきである。
【産業上の利用可能性】
【００９８】
本発明は、産業上、マイクロプロセッサに利用可能である。
【図面の簡単な説明】
【００９９】
【図１】ｘ８６命令の一般化したフォーマットを示すブロック図である。
【図２】有効マスクの一実施形態を示すブロック図である。
【図３】マイクロプロセッサの一実施形態を示すブロック図である。
【図４】図３の命令キャッシュとレベル２キャッシュとの間のインターフェイスの一実施形態の詳細を示す図である。
【図５】図４の命令キャッシュの一実施形態と、図４のレベル２キャッシュの一実施形態との間の関係を詳細に示す図である。
【図６】レベル２キャッシュにプリデコード情報をストアするための方法の一実施形態を示すフローチャートである。
【図７Ａ】犠牲にされたプリデコード情報をストアするためのシステムの別の実施形態を示す図である。
【図７Ｂ】犠牲にされたプリデコード情報をストアするためのシステムの別の実施形態を示す図である。
【図８Ａ】犠牲にされたプリデコード情報をストアするための方法の別の実施形態を示すフローチャートである。
【図８Ｂ】犠牲にされたプリデコード情報をストアするための方法の別の実施形態を示すフローチャートである。
【図９】犠牲にされたプリデコード情報をストアするためのシステムの別の実施形態を示す図である。
【図１０】図３のマイクロプロセッサを利用したコンピュータシステムの一実施形態を示す図である。
【図１】
2004531837.tif 000003
【図２】
2004531837.tif 000004
【図３】
2004531837.tif 000005
【図４】
2004531837.tif 000006
【図５】
2004531837.tif 000007
【図６】
2004531837.tif 000008
【図７Ａ】
2004531837.tif 000009
【図７Ｂ】
2004531837.tif 000010
【図８Ａ】
2004531837.tif 000011
【図８Ｂ】
2004531837.tif 000012
【図９】
2004531837.tif 000013
【図１０】
2004531837.tif 000014
【国際公開パンフレット】
2004531837.tif 000015
2004531837.tif 000016
2004531837.tif 000017
2004531837.tif 000018
2004531837.tif 000019
2004531837.tif 000020
2004531837.tif 000021
2004531837.tif 000022
2004531837.tif 000023
2004531837.tif 000024
2004531837.tif 000025
2004531837.tif 000026
2004531837.tif 000027
2004531837.tif 000028
2004531837.tif 000029
2004531837.tif 000030
2004531837.tif 000031
2004531837.tif 000032
2004531837.tif 000033
2004531837.tif 000034
2004531837.tif 000035
2004531837.tif 000036
2004531837.tif 000037
2004531837.tif 000038
2004531837.tif 000039
2004531837.tif 000040
2004531837.tif 000041
2004531837.tif 000042
2004531837.tif 000043
2004531837.tif 000044
2004531837.tif 000045
2004531837.tif 000046
2004531837.tif 000047
2004531837.tif 000048
2004531837.tif 000049
2004531837.tif 000050
【手続補正書】
【提出日】平成15年6月10日(2003.6.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マイクロプロセッサであって、
命令バイトを受け取って、対応するプリデコード情報を生成するように構成されたプリデコードユニット（１２）と、
前記プリデコードユニットに結合され、前記命令バイトと該命令バイトに対応する前記プリデコード情報とをストアするように構成された命令キャッシュ（１６）と、
データバイトを受け取るように構成されたロード／ストアユニット（２６）と、
前記ロード／ストアユニットから前記データバイトを受け取ってストアするように構成されたデータキャッシュ（２８）と、
複数のキャッシュラインを有するレベル２キャッシュ（５０）とを備え、各キャッシュラインは、犠牲にされた命令バイトまたは犠牲にされたデータバイトをストアするように構成された第１記憶領域（１７６）と、エラー訂正コードビット、あるいはパリティ情報およびプリデコード情報をストアするように構成された第２記憶領域（１７４）とを有し、
前記レベル２キャッシュは、犠牲にされた命令バイトを前記命令キャッシュから受け取って前記複数のキャッシュラインのうちの第１キャッシュラインにストアし、犠牲にされたデータバイトを前記データキャッシュから受け取って前記複数のキャッシュラインのうちの第２キャッシュラインにストアするように構成され、前記レベル２キャッシュは、前記ストアされている犠牲にされた命令バイトに対するパリティ情報およびプリデコード情報を受け取って前記第１キャッシュラインに含まれる前記第２記憶領域にストアするように構成され、かつ前記レベル２キャッシュは、前記ストアされている前記犠牲にされたデータバイトに対するエラー訂正コードビットを受け取って前記第２キャッシュラインに含まれる前記第２記憶領域にストアするように構成されるマイクロプロセッサ。
【請求項２】
前記レベル２キャッシュに転送される前記命令バイトに対する前記パリティビットを生成し、かつ
前記レベル２キャッシュから転送される前記命令バイトに対する前記パリティビットを検査するように構成されたパリティ生成および検査ロジック（４０２）をさらに備える、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記レベル２キャッシュに転送される前記データバイトに対する前記エラー訂正コードビットを生成し、かつ
前記レベル２キャッシュから転送される前記データバイトに対する前記エラー訂正コードビットを検査するように構成されたエラー検査および訂正ロジック（４０４）をさらに備える、請求項１に記載のマイクロプロセッサ。
【請求項４】
前記エラー検査および訂正ロジック（４０４）は、前記レベル２キャッシュから転送される前記データバイトにおける少なくとも１ビットのエラーを訂正するために、前記エラー訂正コードビットを使用するように構成される、請求項３に記載のマイクロプロセッサ。
【請求項５】
各キャッシュラインは、（ａ）命令バイトが前記キャッシュラインの第１記憶領域に記憶されており、かつプリデコードビットおよびパリティビットが前記キャッシュラインの第２記憶領域に記憶されているか、あるいは（ｂ）データバイトが前記キャッシュラインの第１記憶領域にストアされており、かつエラー訂正コードビットが前記キャッシュラインの第２記憶領域にストアされているか、を示す１つ以上の指示ビットをストアするように構成される、請求項１に記載のマイクロプロセッサ。
【請求項６】
命令バイトを受け取るステップと、
前記命令バイトに対するプリデコード情報を生成するステップと、
前記命令バイトと前記プリデコード情報とを第１メモリ（１６）にストアするステップと、
前記第１メモリにおいて前記命令バイトが上書きされようとしていることに応答して、前記命令バイトの少なくとも一部分および前記プリデコード情報をパリティ情報と共に第２メモリ（５０）に出力するステップであって、
前記第２メモリが前記第２メモリに含まれる複数のキャッシュラインの第１キャッシュラインに含まれる第１記憶領域に前記命令バイトをストアし、
前記第２メモリが第１キャッシュラインに含まれる第２記憶領域に前記プリデコード情報をストアするステップと、
データバイトを受け取るステップと、
前記データバイトを第３メモリ（２８）にストアするステップと、
前記第３メモリにおいて前記データバイトが上書きされようとしていることに応答して、前記データバイトの少なくとも一部分を対応するエラー訂正コード情報と共に前記第２メモリに出力するステップであって、
前記第２メモリは前記第２メモリに含まれる複数のキャッシュラインの第２キャッシュラインに含まれる第１記憶領域に前記データバイトをストアし、
前記第２メモリは前記第２キャッシュラインに含まれる第２記憶領域に前記エラー訂正コード情報をストアするステップとを備える方法。
【請求項７】
前記方法は前記第２メモリにある各キャッシュラインに指示ビットをストアするステップをさらに備え、前記指示ビットは前記プリデコードビットと前記エラー訂正コードビットとのいずれが前記第２メモリにストアされているかを示す、請求項６に記載の方法。
【請求項８】
前記第２メモリにある各論理ブロックに対する指示ビットをストアするステップをさらに備え、前記指示ビットはプリデコードビットと、エラー検査および訂正ビットとのいずれが前記第２メモリにストアされているかを示す、請求項７に記載の方法。
【請求項９】
少なくとも１つの前記ストアされているパリティビットと、対応する前記命令バイトの前記ストアされている部分および前記プリデコード情報とを、前記プロセッサに送り返すステップをさらに備え、前記プロセッサは、前記パリティビットが正しい場合に、新しいプリデコード情報を生成する代わりに前記送られたプリデコード情報を使用するように構成される、請求項７に記載の方法。
【請求項１０】
メインシステムメモリ（４２０）と、
前記メインシステムメモリに結合されたメモリコントローラ（４１０）と、
前記メモリコントローラに結合された請求項１乃至請求項５のいずれか１項に記載のマイクロプロセッサ（１０）とを有するコンピュータシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
上記の問題は、ここに記載するように、犠牲にされた（victimized）命令のプリデコード情報をストアするためのシステムならびに方法によって少なくとも一部解決される。一実施形態においては、犠牲にされた命令のプリデコード情報をストアするように構成されたマイクロプロセッサは、プリデコードユニットとロード／ストアユニットとを備える。プリデコードユニットは、命令バイトを受け取って、対応するプリデコード情報を生成するように構成され得る。プリデコードユニットは、この命令バイトと対応するプリデコード情報とを命令キャッシュにストアするようにも構成され得る。ロード／ストアユニットは、データバイトを受け取って、このデータバイトをデータキャッシュにストアするように構成され得る。命令キャッシュとデータキャッシュとは、共にプロセッサの「レベル１」キャッシュを形成し得る。プロセッサは、複数のキャッシュラインを有するレベル２キャッシュをも備え得、各キャッシュラインは、犠牲にされた命令バイトまたは犠牲にされたデータバイトをストアするように構成された第１記憶領域と、エラー訂正コードビット、あるいはパリティ情報およびプリデコード情報をストアするように構成された第２記憶領域とを有する。レベル２キャッシュは、犠牲にされた命令バイトを命令キャッシュから受け取って複数のキャッシュラインのうちの第１キャッシュラインにストアし、犠牲にされたデータバイトをデータキャッシュから受け取って複数のキャッシュラインのうちの第２キャッシュラインにストアするように構成される。レベル２キャッシュは、ストアされている犠牲にされた命令バイトに対するパリティ情報およびプリデコード情報を受け取って第１キャッシュラインに含まれる第２記憶領域にストアし、ストアされている犠牲にされたデータバイトに対するエラー訂正コード（ＥＣＣ）ビットを受け取って第２キャッシュラインに含まれる第２記憶領域にストアするようにも構成され得る。特許請求の範囲および段落００１２を変更した。




【国際調査報告】
2004531837.tif 000051
2004531837.tif 000052