(57)【要約】      （修正有）【課題】複数のビットＮを有するデータをエラー訂正コード（ＥＣＣ）マトリクスに適用してＥＣＣ保護された機構におけるエラーを訂正する方法を提供する。【解決手段】ＥＣＣマトリクスに対するエンコーディングがＮビット・エラーの訂正及び（Ｎ−１）ビット・エラーの検出を可能にするように、選択されたビットが各列及び各行に沿ってＥＣＣマトリクスにセットされる。ＥＣＣマトリクスは、各行において奇数ビットのセットを有する。エラーが検出されたとき及びそれが訂正されたときデータは反転され、キャッシュ・アレーに再書き込みされる。現在ストアされているデータが反転されていることを表すために、このエントリの対応する反転ビットがセットされる。その後、データがアレーから再読み取りされ、そしてハード障害（固定ビット）によるエラーがあった場合、反転が障害ビットの値を固定値に変更しているので、それは正しく見える。【選択図】図５
2004318870.tif 000002
【特許請求の範囲】
【請求項１】
データ処理システムのエラー訂正コード（ＥＣＣ）保護された機構におけるエラーをチェックする方法であって、
複数のビットＮを有するデータをＥＣＣマトリクスに適用してエラー検出シンドロームを生じさせるステップと、
前記データ処理システムのロケーションから読み取られたデータにおける少なくとも１つのエラーを検出するために前記エラー検出シンドロームを解くステップと、
を含み、
前記エラー訂正マトリクスが複数の行及び列を有し、
所与の列が前記データ・ビットのそれぞれ１つに対応し、前記ＥＣＣマトリクスに対するエンコーディングがＮビット・エラーの訂正及び（Ｎ−１）ビット・エラーの検出を可能にするように、選択されたビットが各列及び各行に沿って前記ＥＣＣマトリクスにセットされる、方法。
【請求項２】
奇数のビットが各行にセットされるようにＥＣＣマトリクスにおけるビットを選択的にセットするステップを更に含む、請求項１に記載の方法。
【請求項３】
前記ＥＣＣマトリクスに対するエンコーディングが、更に、単一ビット・エラーの検出を可能にし、前記解くステップが前記データにおける１つの、しかも、１つだけのエラーを検出する、請求項１に記載の方法。
【請求項４】
前記解くステップが複数の訂正し得ないエラーを検出する、請求項１に記載の方法。
【請求項５】
訂正されたデータを生じさせる前記エラー検出シンドロームを使用してエラー検出シンドロームを生じさせるステップと、
前記訂正されたデータが前記データ処理システムのロケーションに書き戻されるとき、前記訂正されたデータを反転するステップと、
現時点でストアされているデータが反転されていることを表すように反転ビットをセットするステップと、
を更に含む、請求項１に記載の方法。
【請求項６】
前記反転ビットが前記データの一部であり、前記ＥＣＣマトリクスにおける列の１つが前記反転ビットに対応し、
前記反転ビットに対応する前記ＥＣＣマトリクスの列における各ビットをセットするステップを更に含む、請求項５に記載の方法。
【請求項７】
前記解くステップが前記反転ビットにおける訂正可能なエラーを検出する、請求項６に記載の方法。
【請求項８】
複数のビットＮを有するデータをチェックするように及び前記データに対するエラー検出シンドロームを生じるように適応した電子エラー訂正コード（ＥＣＣ）マトリクスを含み、
前記ＥＣＣマトリクスが複数の行及び列を有し、
所与の列が前記データ・ビットのそれぞれ１つに対応し、前記ＥＣＣマトリクスに対するエンコーディングがＮビット・エラーの訂正及び（Ｎ−１）ビット・エラーの検出を可能にするように、選択されたビットが各列及び各行に沿って前記ＥＣＣマトリクスにセットされる、エラー訂正コード・チェッカ。
【請求項９】
更に、前記データが何らかのエラーを含むかどうかを決定するために前記エラー検出シンドロームを解くシンドローム・デコーダを含む、請求項８に記載のエラー訂正コード・チェッカ。
【請求項１０】
前記シンドローム・デコーダが、更に、前記データにおいて見つかった如何なる単一ビット・エラーも訂正する、請求項９に記載のエラー訂正コード・チェッカ。
【請求項１１】
奇数のビットが各行においてセットされるように前記ＥＣＣマトリクスにおけるビットがセットされる、請求項８に記載のエラー訂正コード・チェッカ。
【請求項１２】
前記ＥＣＣマトリクスに対するエンコーディングが、更に、単一ビット・エラーの検出を可能にする、請求項８に記載のエラー訂正コード・チェッカ。
【請求項１３】
前記ＥＣＣマトリクスの前記列の１つが、前記データの極性を表す反転ビットに対応する、請求項８に記載のエラー訂正コード・チェッカ。
【請求項１４】
前記反転ビットに対応する前記列における各ビットがセットされる、請求項１３に記載のエラー訂正コード・チェッカ。
【請求項１５】
プログラム命令を処理するための手段と、
前記処理するための手段に接続されたメモリ装置と、
を含み、
前記メモリ装置が、複数のビットＮを有するデータをチェックして前記データに対するエラー検出シンドロームを生じるようにエラー訂正コード（ＥＣＣ）マトリクスを適応させるエラー訂正コード・チェッカを含み、
前記ＥＣＣマトリクスが複数の行及び列を有し、所与の列が前記データ・ビットのそれぞれ１つに対応し、前記ＥＣＣマトリクスに対するエンコーディングがＮビット・エラーの訂正及び（Ｎ−１）ビット・エラーの検出を可能にするように、選択されたビットが各列及び各行に沿って前記ＥＣＣマトリクスにセットされる、
コンピュータ・システム。
【請求項１６】
前記メモリ装置が、更に、前記データが何らかのエラーを含むかどうかを決定するために前記エラー検出シンドロームを解くシンドローム・デコーダを含む、請求項１５に記載のコンピュータ・システム。
【請求項１７】
前記シンドローム・デコーダが、更に、前記データにおいて見つかった如何なる単一ビット・エラーも訂正する、請求項１６に記載のコンピュータ・システム。
【請求項１８】
奇数のビットが各行においてセットされるように前記ＥＣＣマトリクスにおけるビットがセットされる、請求項１５に記載のコンピュータ・システム。
【請求項１９】
前記ＥＣＣマトリクスに対するエンコーディングが、更に、単一ビット・エラーの検出を可能にする、請求項１５に記載のコンピュータ・システム。
【請求項２０】
前記ＥＣＣマトリクスの前記列の１つが、前記データの極性を表す反転ビットに対応する、請求項１５に記載のコンピュータ・システム。
【請求項２１】
前記反転ビットに対応する前記列における各ビットがセットされる、請求項２０に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して云えば、データ処理システムに関し、詳しく云えば、キャッシュ・メモリ、バス又は通信リンク、チップ・インターフェース、或いは、エラー訂正コード（ＥＣＣ）を使用し得る、他のロケーションのような、コンピュータ・システムのＥＣＣ保護された機構における誤ったデータ・ビットを訂正するための方法及びシステムに関するものである。
【背景技術】
【０００２】
図１には、一般的なコンピュータ・システム１０の基本的な構造が示される。コンピュータ・システム１０は、１つ又はそれ以上の処理ユニットを有する。そのうちの２つ、即ち、処理ユニット１２ａ及び１２ｂが示され、それらは、入出力（Ｉ／Ｏ）装置１４（例えば、ディスプレイ・モニタ、キーボード、及び永続記憶装置）、プログラム命令を実行するために処理ユニットによって使用されるメモリ装置１６（例えば、ランダム・アクセス・メモリ、即ち、ＲＡＭ）、及びコンピュータが最初にオンにされる時にいつも周辺装置の１つ（通常は、永続記憶装置）を見つけ出し且つそこからオペレーティング・システムをロードすることを目的とするファームウェア（ＲＯＳ）１８を含む。処理ユニット１２ａ及び１２ｂは、汎用の相互接続線又はバス２０を含む種々の手段によって周辺装置とコミュニケーションを行う。コンピュータ・システム１０は、例えば、モデム又はプリンタに接続するためのシリアル・バス・ポート、パラレル・バス・ポート、又は汎用バス・ポートのような図示されてない更なる多くのコンポーネントを持ち得る。図１のブロック図に示されたコンポーネントと関連して使用可能な他のコンポーネントが存在すること、例えば、ディスプレイ・アダプタがビデオ・ディスプレイ・モニタを制御するために使用可能であり、メモリ・コントローラがメモリ１６をアクセスするために使用可能であること等は、当業者には明らかであろう。更に、Ｉ／Ｏ装置１４をバス２０に直接接続する代わりに、バス２０に対するＩ／Ｏブリッジに更に接続される二次（Ｉ／Ｏ）バスにそれらを接続することも可能である。コンピュータは、２つよりも多くの処理ユニットを持つことも可能である。
【０００３】
対称マルチプロセッサ（ＳＭＰ）コンピュータでは、すべての処理ユニットが総体的には同じである。即ち、それらはすべて共通の命令セット又はサブセット及び操作するためのプロトコルを使用し、一般には、同じアーキテクチャを有する。代表的なアーキテクチャが図１に示される。処理ユニットは、コンピュータを操作するためにプログラム命令を実行する複数のレジスタ及び実行ユニットを有するプロセッサ・コア２２を含む。例示の処理ユニットは、インターナショナル・ビジネス・マシーンズ・コーポレーションによって販売されているＰｏｗｅｒＰＣ（商標）プロセッサを含む。更に、その処理ユニットは、高速メモリ装置を使用して実装される命令キャッシュ２４及びデータ・キャッシュ２６のような１つ又は複数のキャッシュを持ち得る。キャッシュは、一般に、プロセッサによって繰り返しアクセスされる値を一時的にストアするために使用され、それによって、メモリ１６からそれらの値をロードする長いステップを回避することにより処理の速度を上げる。これらのキャッシュは、それらが単一の集積チップ２８上にプロセッサ・コアと統合的にパッケージされるとき、「オンボード」と呼ばれる。各キャッシュは、プロセッサ・コアとキャッシュ・メモリとの間のデータ転送を管理するキャッシュ・コントローラ（図示されてない）と関連付けられる。
【０００４】
処理ユニット１２は、キャッシュ３０のような更なるキャッシュを含み得る。キャッシュ３０は、オンボード（レベル１）キャッシュ２４をサポートするのでレベル２（Ｌ２）キャッシュと呼ばれる。換言すれば、キャッシュ３０は、メモリ１６とそれらのオンボード・キャッシュとの間の中間体として作用し、オンボード・キャッシュよりも遥かに大量の情報（命令及びデータ）を、しかし、より長いアクセス・ペナルティでストアする。例えば、キャッシュ３０は、２５６又は５１２キロバイトの記憶容量を有するチップであってもよく、一方、プロセッサは、６４キロバイトの総記憶容量を持つオンボード・キャッシュを有するＩＢＭ  ＰｏｗｅｒＰＣ６０４シリーズ・プロセッサであってもよい。キャッシュ３０はバス２０に接続され、通常、メモリ１６からプロセッサ・コア２２への情報のローディングはすべてキャッシュ３０を通過する。図１は２レベルのキャッシュ階層だけを示しているが、多くレベルの相互接続されたキャッシュが存在するマルチレベル・キャッシュ階層を設けることも可能である。
【０００５】
キャッシュは、種々の命令及びデータ値を個々にストアする多くの「ブロック」を有する。いずれのキャッシュにおけるブロックも、「セット」又は「合同クラス（congruence class）」と呼ばれるブロックのグループに分割される。セットは、所与のメモリ・ブロックが常駐し得るキャッシュ・ブロックの集合体である。いずれの所与のメモリ・ブロックに対しても、プリセット・マッピング機能に従って、そのブロックがマップされ得る一意的なセットがキャッシュに存在する。１つのセットにおけるブロックの数は、キャッシュの関連性（associativity）と呼ばれる。例えば、２ウェイ・セット・アソシエイティブ（2-wayset associative）は、いずれの所与のメモリ・ブロックに対しても、そのメモリ・ブロックがマップされ得る２つのブロックがキャッシュに存在するが、メイン・メモリにおける幾つかの異なるブロックが任意の所与のセットにマップされ得るということを意味する。１ウェイ・セット・アソシエイティブはダイレクト・マップされる。即ち、特定のメモリ・ブロックを含み得る唯一のキャッシュ・ブロックが存在する。メモリ・ブロックが任意のキャッシュ・ブロックを占有し得る場合、即ち、１つの合同クラスが存在する場合、キャッシュは十分に関連している（associative）と言われ、アドレス・タグはメモリ・ブロックのフル・アドレスである。
【０００６】
典型的なキャッシュ・ライン（ブロック）は、アドレス・タグ・フィールド、状態ビット・フィールド、包含性（inclusivity）ビット・フィールド、及び実際の命令又はデータをストアするための値フィールドを含む。状態ビット・フィールド及び包含性ビット・フィールドは、マルチプロセッサ・コンピュータ・システムにおいてキャッシュ・コヒーレンシを維持するために（キャッシュにストアされた値の妥当性を表すために）使用される。アドレス・タグは、対応するメモリ・ブロックのフル・アドレスのサブセットである。着信アドレスとアドレス・タグ・フィールド内のタグの１つとの比較一致は、キャッシュ「ヒット」を表す。キャッシュにおけるすべてのアドレス・タグ（及び、時には、状態ビット・フィールド及び包含性ビット・フィールド）の集合体はディレクトリと呼ばれ、すべての値フィールドの集合体はキャッシュ・エントリ・アレーである。
【０００７】
所与のキャッシュに対する合同クラスにおけるすべてのブロックがフルであり、そのキャッシュが、完全な合同クラスにマップするメモリ・ロケーションに対するリクエストを、それが「読み取り」であろうと「書き込み」であろうと、受けるとき、キャッシュは、現時点でそのクラスにあるブロックの１つを排出（evict）しなければならない。キャッシュは、排出されるべきブロックを、当業者に知られた多くの手段の１つ（最低使用頻度（ＬＲＵ）、無作為、擬似ＬＲＵ等）によって選定する。選定されたブロックにおけるデータが修正される場合、そのデータは、メモリ階層における最低レベルの次のレベルに書き込まれる。そのレベルは、他のキャッシュ（Ｌ１又はオンボード・キャッシュの場合）又はメイン・メモリ（図１の２レベル・アーキテクチャで示されたようなＬ２キャッシュの場合）であってもよい。包含（inclusion）の原理によって、低いレベルの階層のものは、書き込まれた修正済みデータを保持するために使用可能なブロックを既に持っているであろう。しかし、選定されたブロックにおけるデータが修正されない場合、そのブロックは単に放棄されるだけであり、階層における最低レベルの次のレベルに書き込まれない。階層の１つのレベルからブロックを除去するこのプロセスは、「排出（eviction）」として知られている。このプロセスの終了時に、キャッシュは、最早、その排出されたブロックのコピーを保持しない。
【０００８】
図２は、前述のキャッシュの構造及び排出プロセスを示す。キャッシュ４０（Ｌ１又は更に低いレベル）は、キャッシュ・ディレクトリ４２、キャッシュ・エントリ・アレー４４、ＬＲＵアレー４６、及び特定の合同クラスから排出するためのブロックを選択する制御ロジック４８を含む。図示のキャッシュ４０は８ウェイ・セット・アソシエイティブであり、従って、ディレクトリ４２、キャッシュ・エントリ・アレー４４、及びＬＲＵアレー４６の各々は、参照番号５０で表された特定の合同クラスに対する８ブロックの特定セットを有する。換言すれば、キャッシュ・ディレクトリ４２における合同クラスの特定のメンバが、合同クラス５０に示された「Ｘ」によって表されるように、キャッシュ・エントリ・アレー４４における合同クラスの特定のメンバ及びＬＲＵアレー４６における合同クラスの特定のメンバと関連付けられる。
【０００９】
ディレクトリ４２におけるブロックの各々がエラー訂正コード（ＥＣＣ）回路５２を介して制御ロジックに接続される。所与のキャッシュ・ブロックにおけるビットは、ソフト・エラー（漂遊放射線（stray radiation）又は静電的放電のような）又はハード・エラー（欠陥セル）による間違った値を含み得る。ＥＣＣは、適正なデータ・ストリームを再構成するためにも使用可能である。或るＥＣＣは、単一ビット・エラーを検出及び訂正するためにのみ使用可能である。即ち、特定のブロックにおける２つ又はそれ以上のビットが無効である場合、ＥＣＣは、適切なデータ・ストリームが実際にはどのようなものでなければならないかを決定することができないかもしれないが、少なくとも障害を検出することが可能である。他のＥＣＣは更に複雑であり、二重ビット・エラーの検出又は訂正を可能にする。これらの後者のエラーは訂正するには高価であるが、設計のトレードオフは、二重ビット・エラーが生じたときにマシンを停止させることである。ＥＣＣ回路と共に唯一のディレクトリ４２が示されているけれども、これらの回路は、キャッシュ・エントリ・アレー４４のような他のアレーと共に同様に使用可能である。
【００１０】
（訂正された）メモリ・ブロック・アドレスに対応する値を有するＥＣＣ回路５２の出力は、各々がリクエストされたメモリ・ブロックのアドレスを受けるそれぞれのコンパレータ５４に接続される。リクエストされたメモリ・ブロックの有効なコピーが合同クラス５０にある場合、コンパレータ５４の１つ及び１つだけがアクティブな信号を出力するであろう。コンパレータ５４の出力は、マルチプレクサ５６に及びＯＲゲート５８にも接続される。ＯＲゲート５８の出力はマルチプレクサ５６を制御する。キャッシュ・ヒットが生じる（リクエストされたアドレスがキャッシュ・ディレクトリ４２におけるアドレスと一致する）場合、ＯＲゲート５８は、合同クラスのどのメンバがアドレスに一致するかを表す信号を通過させるようにマルチプレクサ５６を作動する。この信号は、キャッシュ・エントリ・アレー４４における各エントリから入力を受ける別のマルチプレクサ６０を制御する。このように、そのディレクトリにおけるキャッシュ・ヒットが生じるとき、対応する値がマルチプレクサ６０を通してバス６２に送られる。
【００１１】
キャッシュ・ミスが生じる場合、及び特定の合同クラス５０におけるすべてのブロックが既にメモリ・ブロックの有効コピーを有する場合、合同クラス５０におけるキャッシュ・ブロックの１つが犠牲のために選択されなければならない。この選択は、ＬＲＵアレー４６における合同クラスに対してＬＲＵビットを使用して遂行される。そのクラスにおける各キャッシュ・ブロックに対して複数のＬＲＵビットが存在する。例えば、８ウェイ・セット・アソシエイティブ・キャッシュに対して、ブロック当たり３つのＬＲＵビットが存在する。そのクラスにおける各ブロックからのＬＲＵビットが、それらブロックのうちのどれが犠牲にされるべきかを表すための８ビット出力を有するデコーダ６４に入力として供給される。この出力はマルチプレクサ５６に結合される。このように、ＯＲゲート５８がアクティブでない場合、マルチプレクサ５６は、デコーダ６４の出力に基づいて使用されるべきキャッシュ・ブロックの表示を伝える。
【００１２】
上述のＥＣＣ回路は、メモリ・セルにおいて生じるソフト・エラーを扱う１つの方法である。ハード・エラーを扱うために使用されるもう１つの方法は、それらアレー（ディレクトリ、ＬＲＵ、キャッシュ）内に冗長性を設けることである。キャッシュ・チップが製造されるとき、それは、アレーの各々において何らかの障害のある行又は列のラインが存在するかどうかを決定するためにテストされ得る（キャッシュ、ディレクトリ、及びＬＲＵ全体に対する行及び列のラインがテストされる）。アレーが障害を持つ場合、それの障害の性質を表すために、ヒューズが恒久的に飛ばされる。各アクセスされたアドレスに対して、それが障害のあるアドレスと一致するかどうかを知るために、アレー内で比較が行われる。それらが一致する場合、適切なロジックが、チップ上に形成された多くのエクストラ行及び列の１つに、即ち、冗長ビット・ライン（列）及びワード・ライン（行）からアドレスを再経路指定する。そのエクストラ・ビット・ライン及びワード・ラインの数は、障害率及び所望のチップ歩留まりに従って変わり得る。低い欠陥（大きな物理的サイズ）のキャッシュに対して、、２５６個のすべての正規ライン毎に２つのエクストラ・ラインが設けられ、一方、高い欠陥（小さい物理的サイズ）のキャッシュでは、８個の正規ライン毎に２つのエクストラ・ラインが設けられる。
【００１３】
チップの製造及びコンピュータ構成における進歩と共に、Ｌ２及びＬ３キャッシュがサイズを増大させており、より大きなオンチップ・ディレクトリ及びオンチップ（又は、オフチップ）データ・キャッシュ・エントリ・アレーを必要としている。これらの大型の高密度アレーは、製造時に或いはその分野で生じる障害の可能性が増大するために、チップ／システム全体の信頼性を低下させている。これらの大型のディレクトリ／データ・キャッシュの信頼性を高めるために、伝統的に、インライン・パリティ又はＥＣＣ検出／訂正のような多くの種々な手段がこれらの問題を処理するために使用されてきたが、上記の方法に伴う幾つかの欠点及び制限が存在する。ソフト・エラー（即ち、断続的に生じる障害）は、ディレクトリにおけるデータを修復し、書き換えるＥＣＣ回路を使用して訂正し得るものであるけれども、この技法は、キャッシュ・ディレクトリ・ビットが高レベル又は低レベルに固定されるハード障害を解決するものではない。インラインＥＣＣ訂正は、固定障害を訂正するために使用可能であるが、この方法は、訂正が各アクセスと共に必要とされるので、アレーに対するアクセス・タイムに不利に作用し、エラー訂正機能の部分を反復的に消耗させる。冗長なキャッシュ・ラインの使用はハード障害を部分的に克服し得るが、これらの冗長な構造は、それらがチップ又はシステム・ボード上の貴重なスペースを占めることになるので、不経済である。冗長性は、数多くの障害を訂正する能力においても制限される。更に、テストの後に生じるハード・エラーは、冗長ラインを使用して訂正し得るものではない。これらのタイプのハード障害が生じるとき、データを修復及び書き換えようとする一般的なＥＣＣ回路は、システムが成功することのないエラー訂正を反復的に試みるという状況に通じるであろう。この状況では、マシンは回復し得ず、十分なエラー訂正及び検出リソースが維持されるべき場合、ダウンさせられそして顧客の時間及び金銭を費やして修復されなければならない。
【００１４】
上記に鑑み、キャッシュのようなメモリ・デバイスにおけるハード・エラーを検出／訂正するための改良された方法を創出することが望ましい。その方法が、ディレクトリ・アクセス・タイムに対して不利に働き、従ってシステム・パフォーマンスを低下させる不経済な冗長的回路又はインライン訂正を必要とすることなく実装され得るならば、それは更に有利なことであろう。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
従って、本発明の目的は、コンピュータ・システム、特に、キャッシュ・メモリのための改良されたメモリ構造を提供することにある。
【００１６】
本発明のもう１つの目的は、エラー訂正コード（ＥＣＣ）を利用する改良されたキャッシュ・メモリを提供することにある。
【００１７】
本発明の更にもう１つの目的は、コンピュータ・システムにおけるエラーを、それがキャッシュ・メモリにおけるものであろうと或いはシステム・バス上のものであろうと、検出及び訂正し、しかも、インライン訂正を遅滞させることに頼らずに、ハード・エラー（固定ビット）状態を解決することだできる改良された方法及びシステムを提供することにある。
【課題を解決するための手段】
【００１８】
上記の目的は、多数のビットＮを有するデータをエラー訂正コード（ＥＣＣ）マトリクスに適用してエラー訂正シンドロームを生じさせることによって、コンピュータ・システムのデータ・ビットおけるエラーを訂正する方法において達成される。この場合、ＥＣＣマトリクスは、所与の列がデータ・ビットのそれぞれ１つに対応した複数の行及び列を有し、ＥＣＣマトリクスに対するエンコーディングがＮビット・エラーの訂正及び（Ｎ−１）ビット・エラーの検出を可能にするように、選択されたビットが各列及び各行に沿ってＥＣＣマトリクスにセットされる。その結果生じたエラー訂正シンドロームが、データ処理システムのロケーションから読み出されたデータにおけるエラーを検出するために解かれる。本発明の図示の実施例では、ＥＣＣマトリクスがそれの各行において奇数のビットをセットされる。これらの性質は、ストアされたデータにおけるハード障害を訂正するために反転ビットを使用することを容易にする。エラーが検出され、それが訂正された後、その訂正されたデータが反転され、しかる後、ストレージ又は伝送媒体に再書き込みされる。従って、現在ストアされているデータが反転されていることを表すように、このエントリに対する対応反転ビットがセットされる。しかる後、その媒体からデータが再読み取りされ、エラーがハード障害（固定ビット）によるものであった場合、反転が障害ビットの値を固定値に変えていたので、それは（反転ビットによって表された極性を適用した後）正しく現れるであろう。反転ビットはデータ自体の一部でもあり得る。この場合、ＥＣＣマトリクスにおける列の１つが反転ビットに対応し、マトリクスのその列における各ビットがセットされる。このマトリクスは、バス又は通信リンクを含むＥＣＣを使用したコンピュータ・システムのいずれのロケーションにも適用可能であり、キャッシュ・メモリのようなメモリ・デバイスにとって特に有用である。システム・バス上にデータと一緒に反転ビットを含むことによって、システム・バスは、そのバス上の既知の固定ビットを補償するようにデータの極性を反転することができる。このＥＣＣマトリクスの特定の構成は、たとえ反転ビットにおいてエラー（本発明を使わなければ検出し得ないエラーとなる）が生じても、検出及び訂正を可能にする。反転ビットにおいてエラーが生じた場合、データにおけるすべてのビットが、誤った反転ビットの効果のために誤ったものになる。本発明において定義されたＥＣＣマトリクスは、データ及びＥＣＣビットのいずれが反転ビット自体におけるエラーを含む場合でも、訂正／検出を可能にするであろう。この技法は、システム・バスが、固定ビットの存在時でも完全なＥＣＣ保護を維持することを可能にする。
【００１９】
本発明に関する上記及び更なる目的、特徴、及び利点が、以下の詳細に記述された説明によって明らかになるであろう。
【発明を実施するための最良の形態】
【００２０】
「背景技術」の項において説明したように、メモリ・アレー（例えば、キャッシュ）又は通信リンク（例えば、システム・バス）のようなコンピュータ装置におけるハード・エラー（固定ビット）を処理するには、通常のエラー訂正コード（ＥＣＣ）回路は不十分である。本発明は、固定障害ディレクトリ・アレー状態から回復するために特別のＥＣＣマトリクスを使用する新しいハードウェア機構を通して固定ビットの問題を解決する。ＥＣＣマトリクスは、キャッシュ・ディレクトリ・アドレス／タグ又はシステム・バス伝送の場合に含まれる新しいビット、即ち、ストアされた情報の相対的極性を表す追加の「反転」ビットに適用するようになっている。以下の説明は、第３レベル（Ｌ３）キャッシュ・ディレクトリ・アレーに本発明を実装しているが、値（プログラム命令又はオペランド・データ）を記憶する他のメモリ・デバイスにとってもそれが同様に有用であることは当業者には明らかであろう。
【００２１】
図３は、４１個のデータ・ビット及び７個のＥＣＣビットを含む４８ビット値に対する、従来技術に従って設計されたＥＣＣマトリクス７０を示す。このマトリクスは、如何なるエラーに対してもアドレス・タグをチェックするための一般的な方法で使用可能である。４８個のストアされたビットすべてが正しい場合、訂正がまったく必要ないことを表すために、図３のＥＣＣマトリクスを適用すると、その結果として、すべてゼロというシンドロームが生じるであろう。その４８ビット値がマトリクスにおける７つの行の各々にＸＯＲ態様で個別に適用され、それぞれ、７ビットのシンドロームを生じる。１ビットしか誤りがない場合、その結果生じたシンドロームは、どのビットが誤りであるかを検出するために使用可能である。このオリジナルＥＣＣマトリクス７０、及び単一ビット訂正／二重ビット検出（ＳＢＣ／ＤＢＣ）エラーをカバーするすべての伝統的なＥＣＣマトリクスでは、訂正可能なビットに対するシグネチャ（signature）を定義する奇数ビットのセットが各列において存在する。それらの行の或るものが奇数ビットのセットを有するけれども、他の行は、各々が２０ビットのセットを有するマトリクス７０における行１及び７のような偶数ビットのセットを有する。
【００２２】
図４は、本発明に従って修正された４８ビット値に対する電子的ＥＣＣマトリクス７２の代表例を示す。この特定の方法では、修正は２つの要素から成る。第１に、マトリクス７２の１つの列は、ストアされたデータの相対的極性（アクティブ・ロー（active-low）又はアクティブ・ハイ（active-high））を表す反転ビットに対応し、この列は、従来技術のマトリクス７０に比べて異なるビットのセットを有する。この例に関しては、反転ビット（ＩＢ）は（データ・ビット０：４０のうちの）ビット番号３０であり、マトリクス７２の対応する列におけるすべてのビットがセットされていることが図４においてわかる。第２に、マトリクス７２の他の列にビットが加えられており、その結果、そのマトリクスにおける各水平行は奇数ビットのセットを有する。従来技術のマトリクス７０に比べると、この特性を生じさせるためにマトリクス７２に対して行われた特定の変更は、（ＩＢ列３０に対するすべてのビットの設定に加えて）データ・ビット１：２に対応する列に対する追加的な設定である。詳しく云えば、２つの追加ビットがデータ・ビット１に対応した列に設定されており、２つの追加ビットがデータ・ビット２に対応した列に設定されている。（従来のマトリクス７０に関して）修正された列が図４ではアスタリスクでもってマークされている。すべての列が奇数ビットのセットを持つという同じ結果を得るために、同様の４８，４１マトリクスにおいて別の設定が使用可能であるということは当業者には明らかであろう。反転ビットをＥＣＣマトリクスと関連して説明する必要はない。
【００２３】
この新規なマトリクス構造及び関連のシンドローム・エンコーディングによって、ＥＣＣマトリクス７２は、次のようなＥＣＣによりカバーされた「Ｎ」ビット・データ・フィールドに対する特性を得る：
−  単一ビット・エラーの検出；
−  マルチビット・エラーの訂正；
−  Ｎビット・エラーの訂正；
−  (Ｎ−１)ビット・エラーの検出。
最後の２つの特性は、データの極性を表す反転ビットがストアされ、ＥＣＣエンコーディングによってカバーされるので、有用である。極性ビットにおける単一ビット・エラーが存在する場合、ＥＣＣチェック・ロジックに与えられるデータは「Ｎ」ビットすべてを正しくない状態にするであろうが、そのマトリクスはこのケースでは検出及び訂正するために形成される。二重ビットのエラーが生じ、エラーのビットの１つが極性ビットである場合、マトリクスはこの極性を検出し、これが訂正し得ない二重ビット・エラーであることを表す。
【００２４】
図示の実施例では、マトリクスが、４１データ・ビットdat(0:40) 及び７ＥＣＣビット ecc(0:6) を含む４８ビットに適用される。４１データ・ビットは、dat(0:29) に対応する３０のビットＬ３アドレス・タグaddr_tag(14:43)、dat(30) に対応する反転ビット、及び dat(31:40) に対応するキャッシュ状態情報（コヒーレンシ及び包含ビット）dir_state(0:9)に対する１０ビットを含む。従って、キャッシュ・ディレクトリにおける各エントリに対して１つの極性ビットが設けられる。この特定の例に対して、「ブロック・コード」タイプのＥＣＣエンコーディングが使用される。
【００２５】
アドレス・タグ及び状態情報と共にＬ３ディレクトリにストアされた（及びＥＣＣビットによってカバーされた）極性ビットは、その情報がアクティブ・ハイ又はアクティブ・ローの極性と共にＬ３ディレクトリにストアされたかどうかを表す。ＥＣＣエラーが検出されたとき、そのストアされた情報は反対（逆の）極性と共にＬ３ディレクトリに書き戻し可能である。このように、固定ビット障害は、その後、逆極性のデータに一致するであろうし、その後の読み取り時にエラーを生じさせないであろう。従って、反転ビットの使用は、冗長なストレージ・セル又はインラインＥＣＣ検出／訂正を必要とすることなく、ハード障害によって引き起こされた如何なる単一ビット・エラーも容易に克服し、更に、必要なときだけオン・ザ・フライで反転訂正手順を実行する。
【００２６】
ディレクトリ読み取りが（マシン・ディスパッチ時に）行われるとき、生の／チェックされてないＬ３ディレクトリ・データが「タグ比較」パイプラインを通してＥＣＣチェック・パイプラインに並列的に送られる。エラーが発見された場合、ＥＣＣエラーのためにディレクトリ・マシン・ディスパッチ・シーケンスが打ち切られ、極性エラー訂正（ＰＥＣ）シーケンスがその訂正されたデータでもってディレクトリを修復し／書き換え得るように、ディレクトリの制御を得る。一方、ＰＥＣシーケンスが単一ビット「ソフト」訂正可能エラー（ＣＥ）を修復してしまうと、前に打ち切られたディスパッチは、それが再試行されたとき、最終的に成功するであろう。
【００２７】
（アレー・セルが０又は１に固定される場合）、Ｌ３ディレクトリにおける単一の固定ビット障害をマスクするために、ＰＥＣシーケンスは、今や、ディレクト・アレーに書き込まれたデータの極性を制御するための追加された機能を有する。ＰＥＣシーケンスは、固定ビットをマスクする（固定値をそのビットに書き込む）ために、ＰＥＣシーケンス中、 dw_invert_bit を表明（assert）することによりアレーに書き込まれたデータを反転することができる。データがディレクトリにおいて反転され、従って、読み取られたときに反転されるべきかどうかをログするために、dw_invert_bitがディレクトリにストアされる。反転ビットがディレクトリにストアされるので、マトリクスは、二重ビット・エラーを検出するように及び上述したように反転ビットを含むすべてのビットにおいて単一ビット・エラーの訂正を行うように機能強化される。上述した修正によって、ＥＣＣマトリクスは、dw_invert_bit（ソフト・エラー或いは固定ビットによる）を含むエントリにおける単一ビットの障害を訂正するであろうし、dw_invert_bitに関連した二重ビットエラーを含むエントリにおける任意の２ビットに関連した二重ビット・エラーの検出を行うであろう。
【００２８】
図５及び図６（図５の下辺と図６の上辺が連続する）は、８ウェイ・セット・アソシエイティブＬ３キャッシュに対するディレクトリに適用された図４のＥＣＣを使用するデータフローを示す。キャッシュ・ディレクトリの書き込み回路８０において、先ず、マシンからの反転ビット dw_invert_bit がマルチプレクサ８２によってデータと結合される。その結合されたデータは、ＥＣＣビットを生じるようにＥＣＣジェネレータ８４によって使用される。ＥＣＣビットの生成は、ＥＣＣマトリクス７２が基づく同じシンドローム・エンコーディングを使用する。データは、反転ビット、今や、dat(30)によって制御されるインバータ８６を通過する。マシンによる（即ち、低レベル・キャッシュ又はメイン・メモリからの）正規の直接書き込みが dw_invert_bitto 0 を書き込む。次に、反転ビット及びＥＣＣビットを含むすべてのデータが、別のマルチプレクサ８８と結合され、Ｌ３ディレクトリ・アレー９２に最終的に書き込むためにラッチ９０に送られる。
【００２９】
反転ビットは、dat(0:29) 及び dat(31:40) がインバータ８６によって書き込まれる極性を制御するけれども、dat(30)及び ecc(0:6) の極性はインバータによって影響されない。Ecc(0:6) の極性は、反転ビットに対応する列（列３０）におけるすべてのビットをセットすることによってＥＣＣマトリクス７２を通して効果的に反転される。dw_invert_bitがゼロに等しいとき、dat(0:29) 及び dat(31:40) はアクティブ・ハイとしてＬ３ディレクトリに書き込まれるであろう。dw_invert_bitが１に等しいとき、dat(0:29) 及び dat(31:40) はアクティブ・ローとしてＬ３ディレクトリに書き込まれるであろう。
【００３０】
データがＬ３ディレクトリ・アレー９２から読み取られるとき、先ず、それが他のラッチ９４に書き込まれ、しかる後、dat(30) によって制御される他のインバータ９６を通過する。ＡＮＤゲート９８を使用して dat(30) と結合されるモード・ビットをセットすることによって反転をディセーブルすることが可能である。今や適切にセットされた極性を有するデータが、シンドロームsynd(0:6) を生じさせるＥＣＣチェッカ１００に送られる。ＥＣＣチェッカ１００は、ＸＯＲ回路として配線し得るＥＣＣマトリクス７２を使用する。データ及びシンドロームがラッチ１０２及びマルチプレクサ１０４に書き込まれる。シンドロームはデコーダ１０６によって分析される。「0000000」のシンドロームは、データが正しい（又は、少なくともエラーが検出されなかった）ことを意味する。「1111111」のシンドロームは、データが反転ビット上にＣＥを有することを意味する。デコーダ１０６は、シンドロームが特定のデータ・ビットｎ(dat(0:29,31:40)) に対する単一ビットのエラーを表すとき、個々にアクティブである一連の出力 fix_dat(n) を有する。シンドロームが「1111111」であるとき、もう１つの出力fix_invert はアクティブである。fix_dat(n) ビットが先ずＯＲゲート１０８において fix_invert ビットと結合され、しかる後、ＸＯＲゲート１１０を使用してデータ・ビットに作用する。fix_invertビットは、ＸＯＲゲート１１２において反転ビット dat(30) にも適用される。しかる後、すべてのデータ・ビット dat(0:40) が出力ラッチ１１４に送られる。
【００３１】
すべての二重ビット・エラーの結果、正当なＣＥシンドロームに一致しない synd(0:6) が生じるであろう。ＣＥの場合に関する synd(0:6) 値のシグネチャが奇数ビットのセット（７ビットのセットすべてを有するdw_invert_bit におけるＣＥを含む）を有するので、二重ビット・エラーの結果、synd(0:6) は偶数ビットのセット（dw_invert_bit 自体が関係する場合を含む）を有するであろう。ＥＣＣマトリクス７２は、２つのＣＥシンドロームが結合されるとき、その結果生じるシンドロームは、二重ビット・エラーを表す偶数のsynd(0:6) ビットを有するという特性を有する。
【００３２】
特定の実施例に関連して本発明を説明したけれども、この説明は限定的な趣旨で解釈されることを意味するものではない。本発明に関する説明を参照すれば、本発明の開示された実施例及び別の実施例に係る種々の修正が当業者には明らかになるであろう。例えば、上記の説明は、ＥＣＣマトリクス及び反転ビットをキャッシュ・エントリに対するアドレス・タグに（即ち、キャッシュ・ディレクトリに）適用しているが、アドレス・タグが指示する値（プログラム命令又はオペランド・データ）を保持するキャッシュ・エントリ・アレーにも適用可能である。上記のマトリクスは、ＥＣＣ保護を有するシステム内の任意の素子（システム・バスを含む）にも適用可能である。反転ビットをシステム・バスに加えること及び上記の反転技法を使用することによって、システム・バスは、固定ビットが存在する場合でも、その固定ビットの論理レベルにいつも一致するようにデータを反転することにより完全なＥＣＣ保護を維持することができる。従って、それは、「特許請求の範囲」において定義された本発明の精神又は範囲を逸脱することなく、そのような修正を行い得ることを意図している。
【００３３】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００３４】
（１）データ処理システムのＥＣＣ保護された機構におけるエラーをチェックする方法であって、
複数のビットＮを有するデータをエラー訂正コード（ＥＣＣ）マトリクスに適用してエラー検出シンドロームを生じさせるステップと、
前記データ処理システムのロケーションから読み取られたデータにおける少なくとも１つのエラーを検出するために前記エラー検出シンドロームを解くステップと、
を含み、
前記エラー訂正マトリクスが複数の行及び列を有し、
所与の列が前記データ・ビットのそれぞれ１つに対応し、前記ＥＣＣマトリクスに対するエンコーディングがＮビット・エラーの訂正及び（Ｎ−１）ビット・エラーの検出を可能にするように、選択されたビットが各列及び各行に沿って前記ＥＣＣマトリクスにセットされる、方法。
（２）奇数のビットが各行にセットされるようにＥＣＣマトリクスにおけるビットを選択的にセットするステップを更に含む、上記（１）に記載の方法。
（３）前記ＥＣＣマトリクスに対するエンコーディングが、更に、単一ビット・エラーの検出を可能にし、前記解くステップが前記データにおける１つの、しかも、１つだけのエラーを検出する、上記（１）に記載の方法。
（４）前記解くステップが複数の訂正し得ないエラーを検出する、上記（１）に記載の方法。
（５）訂正されたデータを生じさせる前記エラー検出シンドロームを使用してエラー検出シンドロームを生じさせるステップと、
前記訂正されたデータが前記データ処理システムのロケーションに書き戻されるとき、前記訂正されたデータを反転するステップと、
現時点でストアされているデータが反転されていることを表すように反転ビットをセットするステップと、
を更に含む、上記（１）に記載の方法。
（６）前記反転ビットが前記データの一部であり、前記ＥＣＣマトリクスにおける列の１つが前記反転ビットに対応し、
前記反転ビットに対応する前記ＥＣＣマトリクスの列における各ビットをセットするステップを更に含む、上記（５）に記載の方法。
（７）前記解くステップが前記反転ビットにおける訂正可能なエラーを検出する、上記（６）に記載の方法。
（８）複数のビットＮを有するデータをチェックするように及び前記データに対するエラー検出シンドロームを生じるように適応した電子エラー訂正コード（ＥＣＣ）マトリクスを含み、
前記ＥＣＣマトリクスが複数の行及び列を有し、
所与の列が前記データ・ビットのそれぞれ１つに対応し、前記ＥＣＣマトリクスに対するエンコーディングがＮビット・エラーの訂正及び（Ｎ−１）ビット・エラーの検出を可能にするように、選択されたビットが各列及び各行に沿って前記ＥＣＣマトリクスにセットされる、エラー訂正コード・チェッカ。
（９）更に、前記データが何らかのエラーを含むかどうかを決定するために前記エラー検出シンドロームを解くシンドローム・デコーダを含む、上記（８）に記載のエラー訂正コード・チェッカ。
（１０）前記シンドローム・デコーダが、更に、前記データにおいて見つかった如何なる単一ビット・エラーも訂正する、上記（９）に記載のエラー訂正コード・チェッカ。
（１１）奇数のビットが各行においてセットされるように前記ＥＣＣマトリクスにおけるビットがセットされる、上記（８）に記載のエラー訂正コード・チェッカ。
（１２）前記ＥＣＣマトリクスに対するエンコーディングが、更に、単一ビット・エラーの検出を可能にする、上記（８）に記載のエラー訂正コード・チェッカ。
（１３）前記ＥＣＣマトリクスの前記列の１つが、前記データの極性を表す反転ビットに対応する、上記（８）に記載のエラー訂正コード・チェッカ。
（１４）前記反転ビットに対応する前記列における各ビットがセットされる、上記（１３）に記載のエラー訂正コード・チェッカ。
（１５）プログラム命令を処理するための手段と、
前記処理するための手段に接続されたメモリ装置と、
を含み、
前記メモリ装置が、複数のビットＮを有するデータをチェックして前記データに対するエラー検出シンドロームを生じるようにエラー訂正コード（ＥＣＣ）マトリクスを適応させるエラー訂正コード・チェッカを含み、
前記ＥＣＣマトリクスが複数の行及び列を有し、所与の列が前記データ・ビットのそれぞれ１つに対応し、前記ＥＣＣマトリクスに対するエンコーディングがＮビット・エラーの訂正及び（Ｎ−１）ビット・エラーの検出を可能にするように、選択されたビットが各列及び各行に沿って前記ＥＣＣマトリクスにセットされる、
コンピュータ・システム。
（１６）前記メモリ装置が、更に、前記データが何らかのエラーを含むかどうかを決定するために前記エラー検出シンドロームを解くシンドローム・デコーダを含む、上記（１５）に記載のコンピュータ・システム。
（１７）前記シンドローム・デコーダが、更に、前記データにおいて見つかった如何なる単一ビット・エラーも訂正する、上記（１６）に記載のコンピュータ・システム。
（１８）奇数のビットが各行においてセットされるように前記ＥＣＣマトリクスにおけるビットがセットされる、上記（１５）に記載のコンピュータ・システム。
（１９）前記ＥＣＣマトリクスに対するエンコーディングが、更に、単一ビット・エラーの検出を可能にする、上記（１５）に記載のコンピュータ・システム。
（２０）前記ＥＣＣマトリクスの前記列の１つが、前記データの極性を表す反転ビットに対応する、上記（１５）に記載のコンピュータ・システム。
（２１）前記反転ビットに対応する前記列における各ビットがセットされる、上記（２０）に記載のコンピュータ・システム。
【図面の簡単な説明】
【００３５】
【図１】メイン・メモリ装置及び複数のメモリ・キャッシュを含むメモリ階層を示す一般的なコンピュータ・システムのブロック図である。
【図２】インライン・エラー訂正コード（ＥＣＣ）回路を有するセット・アソシエイティブ・キャッシュ・メモリの高レベルの概略図である。
【図３】４８ビット値をチェックするための従来技術に従って設計されたＥＣＣマトリクスの概略図である。
【図４】反転ビットを含む４８ビット値に適用される、本発明に従って構成された新規なＥＣＣマトリクスの概略図である。
【図５】キャッシュ・アドレス・ディレクトリにおけるハード・エラーを解決するために反転ビットを利用するように適応したレベル３（Ｌ３）キャッシュのＥＣＣ回路に関する一実施例の高レベル概略図である。
【図６】図５の下辺に連結される一実施例の高レベル概略図である。
【図１】
2004318870.tif 000003
【図２】
2004318870.tif 000004
【図３】
2004318870.tif 000005
【図４】
2004318870.tif 000006
【図５】
2004318870.tif 000007
【図６】
2004318870.tif 000008