(57)【特許請求の範囲】
【請求項１】
キャッシュメモリと、
前記キャッシュメモリから読み出されたキャッシュラインが、前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされていなかった場合に、当該キャッシュラインのエラー訂正を実行するエラー訂正ロジックと
を備え、
前記エラー訂正ロジックは、
前記キャッシュラインに含まれるエラーの数を決定するべくシンドロームを生成し、前記キャッシュラインに含まれるエラーの数が１の場合に前記キャッシュラインのエラー訂正を実行する第１のエラー訂正ロジックと、
前記キャッシュラインに含まれるエラーの数が２以上の場合に前記キャッシュラインについてマルチビットエラー訂正を実行する第２のエラー訂正ロジックと
を有し、
前記キャッシュラインが前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされていた場合には、前記エラー訂正ロジックによるエラー訂正を実行しない装置。
【請求項２】
前記キャッシュラインを前記エラー訂正ロジックに転送する前に、前記キャッシュラインに含まれている既知のエラーを修正する修復ロジックをさらに備える請求項１に記載の装置。
【請求項３】
前記キャッシュメモリは、揮発性メモリである請求項１または２に記載の装置。
【請求項４】
前記第１のエラー訂正ロジックは、前記マルチビットエラー訂正よりも短い時間で訂正を実行するデコーダを含む請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記第１のエラー訂正ロジックは、エラーが０個または１個であるキャッシュラインについてのエラー訂正ロジックおよびシンドローム生成ロジックを含む請求項１から４のいずれか一項に記載の装置。
【請求項６】
前記キャッシュメモリのアドレスバスに結合されており、現在のリフレッシュ期間内にアクセスされたキャッシュラインのアドレスを格納する、最近アクセスされたラインを示すテーブル（ＲＡＬＴ）を更に備え、
前記エラー訂正ロジックは、前記ＲＡＬＴに基づいて、アドレス指定された前記キャッシュラインが、揮発性メモリである前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされたか否かを判断する、
請求項１から５のいずれか一項に記載の装置。
【請求項７】
前記第１のエラー訂正ロジックは、受信した前記キャッシュラインに含まれる１つのエラーについてエラー訂正を実行する請求項１または２に記載の装置。
【請求項８】
キャッシュメモリにデータを格納する段階と、
第１のエラー訂正ロジックおよび第２のエラー訂正ロジックを有するエラー訂正ロジックにおいて、前記キャッシュメモリから読み出されたキャッシュラインが、前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされていなかった場合に、当該キャッシュラインのエラー訂正を実行する段階と、
を備え、
前記エラー訂正ロジックにより前記エラー訂正を実行する段階は、
前記第１のエラー訂正ロジックにおいて、前記キャッシュラインに含まれるエラーの数を決定するべくシンドロームを生成する段階と、
前記第１のエラー訂正ロジックにおいて、前記キャッシュラインに含まれるエラーの数が２以上である場合に限り、前記キャッシュラインを前記第２のエラー訂正ロジックに転送する段階と、
前記第２のエラー訂正ロジックにおいて、前記キャッシュラインに含まれるエラーの数が２以上の場合に前記キャッシュラインについてマルチビットエラー訂正を実行する段階と、
を有し、
前記キャッシュラインが前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされていた場合には、前記エラー訂正ロジックによるエラー訂正を実行しない
方法。
【請求項９】
前記キャッシュラインを前記エラー訂正ロジックに転送する前に、修復ロジックにおいて、前記キャッシュラインに含まれる既知のエラーを修復する段階をさらに備える請求項８に記載の方法。
【請求項１０】
前記エラー訂正ロジックによりエラー訂正を実行する段階は、前記第１のエラー訂正ロジックにおいて、前記マルチビットエラー訂正よりも短い時間で訂正を実行する段階をさらに有する請求項８または９に記載の方法。
【請求項１１】
前記キャッシュメモリのアドレスバスに結合されている最近アクセスされたラインを示すテーブル（ＲＡＬＴ）において、現在のリフレッシュ期間内にアクセスされたキャッシュラインのアドレスを格納する段階をさらに備え、
前記エラー訂正ロジックにより前記エラー訂正を実行する段階において、前記ＲＡＬＴに基づいて、アドレス指定された前記キャッシュラインが前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされたか否かを判断する請求項８から１０のいずれか一項に記載の方法。
【請求項１２】
前記第１のエラー訂正ロジックにおいて、受信した前記キャッシュラインに含まれる１つのエラーについてエラー訂正を実行する段階をさらに備える請求項８または９に記載の方法。
【請求項１３】
コンピュータに、
キャッシュメモリにデータを格納する段階と、
第１のエラー訂正ロジックおよび第２のエラー訂正ロジックを有するエラー訂正ロジックにおいて、前記キャッシュメモリから読み出されたキャッシュラインが、前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされていなかった場合に、当該キャッシュラインのエラー訂正を実行する段階と、
を実行させ、
前記エラー訂正ロジックにより前記エラー訂正を実行する段階は、
前記第１のエラー訂正ロジックにおいて、前記キャッシュラインに含まれるエラーの数を決定するべくシンドロームを生成する段階と、
前記第１のエラー訂正ロジックにおいて、前記キャッシュラインに含まれるエラーの数が２以上である場合に限り、前記キャッシュラインを前記第２のエラー訂正ロジックに転送する段階と、
前記第２のエラー訂正ロジックにおいて、前記キャッシュラインに含まれるエラーの数が２以上の場合に前記キャッシュラインについてマルチビットエラー訂正を実行する段階と、
を有し、
前記キャッシュラインが前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされていた場合には、前記エラー訂正ロジックによるエラー訂正を実行させない
ためのプログラム。
【請求項１４】
前記コンピュータにさらに、前記キャッシュラインを前記エラー訂正ロジックに転送する前に、修復ロジックにおいて、前記キャッシュラインに含まれる既知のエラーを修復する段階を実行させる請求項１３に記載のプログラム。
【請求項１５】
前記コンピュータにさらに、前記第１のエラー訂正ロジックにおいて、前記マルチビットエラー訂正よりも短い時間で訂正を実行する段階を実行させる請求項１３または１４に記載のプログラム。
【請求項１６】
前記コンピュータにさらに、前記キャッシュメモリのアドレスバスに結合されている最近アクセスされたラインを示すテーブル（ＲＡＬＴ）において、現在のリフレッシュ期間内にアクセスされたキャッシュラインのアドレスを格納する段階を実行させ、
前記エラー訂正ロジックにより前記エラー訂正を実行する段階において、前記ＲＡＬＴに基づいて、アドレス指定された前記キャッシュラインが前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされたか否かを判断させる請求項１３から１５のいずれか一項に記載のプログラム。
【請求項１７】
前記コンピュータにさらに、前記第１のエラー訂正ロジックにおいて、受信した前記キャッシュラインに含まれる１つのエラーについてエラー訂正を実行する段階を実行させる請求項１３または１４に記載のプログラム。
【請求項１８】
外部メモリと、
前記外部メモリから読み出されたデータを格納するキャッシュメモリ、及び、前記キャッシュメモリから読み出されたキャッシュラインが、前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされていなかった場合に、当該キャッシュラインのエラー訂正を実行するエラー訂正ロジックを有するプロセッサと
を備え、
前記エラー訂正ロジックは、
前記キャッシュラインに含まれるエラーの数を決定するべくシンドロームを生成し、前記キャッシュラインに含まれるエラーの数が１の場合に前記キャッシュラインのエラー訂正を実行する第１のエラー訂正ロジックと、
前記キャッシュラインに含まれるエラーの数が２以上の場合に限り、前記第１のエラー訂正ロジックから前記キャッシュラインを受信して、受信した前記キャッシュラインについてマルチビットエラー訂正を実行する第２のエラー訂正ロジックと
を有し、
前記キャッシュラインが前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされていた場合には、前記エラー訂正ロジックによるエラー訂正を実行しないシステム。
【請求項１９】
前記キャッシュラインを前記エラー訂正ロジックに転送する前に、前記キャッシュラインに含まれている既知のエラーを修正する修復ロジックをさらに備える請求項１８に記載のシステム。
【請求項２０】
前記第１のエラー訂正ロジックは、前記マルチビットエラー訂正よりも短い時間で訂正を実行するデコーダを含み、前記デコーダは、エラーが０個または１個のキャッシュラインのためのエラー訂正ロジックおよびシンドローム生成ロジックを含む請求項１８または１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してメモリに関し、具体的にはシステムが低電力状態である間のキャッシュメモリの消費電力の削減に関する。
【背景技術】
【０００２】
技術革新によって、大型のオンダイ混載ダイナミックランダムアクセスメモリ（ｅＤＲＡＭ）キャッシュと中央演算処理装置（ＣＰＵ）とを集積化することが可能となった。混載ＤＲＡＭは、従来のスタティックランダムアクセスメモリ（ＳＲＡＭ）よりもはるかに高密度であるが、データを保持するためには定期的にリフレッシュしなければならない。混載ＤＲＡＭは、ＳＲＡＭと同様に、デバイスのバラツキの影響を受けやすい。デバイスのバラツキは、混載ＤＲＡＭセルのリフレッシュ周期を決定する際の要因の１つである。ｅＤＲＡＭをリフレッシュするために消費される電力は、システム全体の電力の大部分を占めており、ＣＰＵがアイドル状態である低電力状態の間は特に大きい割合を占める。
【図面の簡単な説明】
【０００３】
請求の対象となる主題の実施形態の特徴は、図面を参照しつつ以下に記載する詳細な説明を読み進めることで明らかになるであろう。図面では、同様の参照番号は同様の構成要素を示す。図面は以下の通りである。
【図１】本発明の原理に係る、キャッシュメモリおよびエラー訂正符号（ＥＣＣ）ロジックを備えるプロセッサの実施形態を示す図である。
【図２】最近アクセスされたラインを示すテーブル（ＲＡＬＴ）の実施形態、ならびに、図１に示したキャッシュメモリおよびＥＣＣロジックを備えるシステムを示し、キャッシュメモリ内のキャッシュラインへの高速アクセスを説明するブロック図である。
【図３】後に行なわれる、リフレッシュ期間中のキャッシュラインの読出を説明するための、図２に示すシステムのブロック図である。
【図４Ａ】図１に示す高速ＥＣＣロジックが有するＥＣＣエンコーダの実施形態を説明するためのブロック図である。
【図４Ｂ】図１に示す高速ＥＣＣロジックが有するＥＣＣデコーダ（デコードロジック）の実施形態を説明するためのブロック図である。
【図５】本発明の原理に係る、図１に示したシステムを利用する方法の実施形態を説明するためのフローチャートである。
【図６】図１に示したプロセッサの実施形態を備えるシステムを示すブロック図である。
【０００４】
以下に記載する詳細な説明では請求の対象となる主題の実施形態の例を参照するが、実施形態例については多くの代替例、変形例、および変更例が存在することは当業者には明らかである。したがって、請求の対象となる主題は、広く解釈されたく、特許請求の範囲に記載する請求項の内容によってのみ定義されるものとする。
【発明を実施するための形態】
【０００５】
エラー訂正符号（ＥＣＣ）は通常、不揮発性メモリおよびストレージデバイスにおいてソフトエラーおよびハードエラーの両方が許容されるように用いられるものである。デバイスに含まれるオンチップキャッシュおよびメモリデバイス（チップ、集積回路）は通常、単純且つ高速なＥＣＣ、例えば、１ビット誤り訂正２ビットエラー検出（ＳＥＣＤＥＤ）ハミング符号を利用する。フラッシュメモリ等の低速デバイスでは、エラー訂正性能が高いマルチビットＥＣＣ、例えば、リードソロモン符号を利用する。エラー訂正機能が高いＥＣＣメカニズムではデコードレイテンシが大きくなるが、例えば、ディスクドライブ等の大容量格納装置では問題にならない。これは、エンコード／デコードレイテンシが、本質的に存在するデバイスアクセス時間に比べると重要でないためである。しかし、技術スケーリングの結果、オンチップメモリアレイ（キャッシュ）は、マルチビットエラーの影響を受けやすくなっている。このため、エラー訂正機能の高いＥＣＣ符号をオンチップキャッシュにも利用することが望ましい。レイテンシによるオーバーヘッドに加えて、追加されるＥＣＣビットの格納オーバーヘッドが、マルチビットＥＣＣをオンチップキャッシュメモリに利用する上で障害となっている。
【０００６】
マイクロプロセッサでは、電力効率およびエネルギー効率の改善を求めて、低電力モード（状態）をサポートするために多くのアイドル状態を実現している。アイドル状態の間に消費される電力を低減することは、通常の中央演算処理装置（ＣＰＵ）はアイドル状態である時間が長いので、特に重要である。混載ＤＲＡＭ技術によって、ＳＲＡＭセルに比べると小型のメモリセルを利用することが可能となり、メモリが大幅に高密度化されている。このため、高性能プロセッサの最終レベルオンチップキャッシュとしてＳＲＡＭの代わりにＤＲＡＭを利用し得る。
【０００７】
しかし、混載ＤＲＡＭ（ｅＤＲＡＭ）セルの問題として、リーク電流のために時間の経過によってセルの電荷が失われてしまう点が挙げられている。ｅＤＲＡＭセルの保持時間は、当該セルが状態（電荷）を保持可能な時間の長さと定義されている。セルの保持時間はリーク電流に応じて決まり、リーク電流は素子のリークに応じて決まる。格納されているデータの状態を保存するためには、ｅＤＲＡＭセルは定期的にリフレッシュする必要がある。キャッシュから状態が失われないように、リフレッシュ周期はセルの保持時間よりも短く設定する必要がある。ｅＤＲＡＭは、従来のロジックプロセスで集積化されたＤＲＡＭであるので、利用している高速ロジックトランジスタは、リーク電流が従来のＤＲＡＭで利用されているトランジスタよりも大きい。このため、ｅＤＲＡＭのリフレッシュ時間は、従来のＤＲＡＭに比べると、約１０００分の１と短くなっている。リフレッシュ周期が短くなるので、アイドル状態中に消費される電力が増加し、可用性が低くなる。
【０００８】
ＳＲＡＭキャッシュでは、本質的に存在するバラツキのために、低電圧では機能しない（電荷（状態）を失ってしまう）弱いセルが幾つか存在するので高電圧で動作せざるを得ず、アイドル状態中の消費電力を削減しようとする努力が無駄になっている。同様に、混載ＤＲＡＭキャッシュでは、デバイスのバラツキが、各ＤＲＡＭセルのリフレッシュ間隔に等しい保持時間に影響を及ぼしており、数個の特に弱いセル（ビット）に基づいてキャッシュ全体のリフレッシュ期間が決まってしまう。しきい値電圧のバラツキに起因して、複数の異なるＤＲＡＭセルの間での保持時間のバラツキが大きくなってしまう。このバラツキは主に、ドーパントの変動がランダムであることに起因しており、ｅＤＲＡＭセル間での保持時間の分布がランダムになってしまう。しかし、リフレッシュレートが高くなると、キャッシュ電力が大幅に増加してしまう。
【０００９】
キャッシュ電力を低減する方法では、パワーゲート（Ｐｏｗｅｒ  Ｇａｔｅ）を利用する。パワーゲートは、電源に設けられるスイッチであり、あるブロックのトランジスタに対する電力を完全に停止することができる。ｅＤＲＡＭおよびＳＲＡＭ等のメモリ技術では電力供給が無いと状態を保持できないので、パワーゲーティングを実行すると、メモリ状態が失われるという犠牲を払わなければならない。
【００１０】
キャッシュが高密度化するにつれて、パワーゲーティングの性能および消費電力も高くなる。混載ＤＲＡＭキャッシュのサイズが大きくなるにつれて、アイドル状態終了レイテンシ（メインメモリからキャッシュラインを取得してキャッシュの状態を復元するのにかかる時間）とアイドル状態中の消費電力との間にトレードオフが存在する。
【００１１】
ＤＲＡＭリフレッシュ周期は、エラー訂正符号（ＥＣＣ）を利用して状態が失われたセルを動的に特定および修復することによって、大きくなり得る。リフレッシュレートは、最も弱いｅＤＲＡＭセルとは無関係に設定され、状態の損失についてはＥＣＣを用いて補償する。マルチビットエラーを訂正する機能が高いエラー訂正符号を利用する場合、リフレッシュレートが大きくなり、消費電力が低減されると考えられる。しかし、マルチビットＥＣＣ符号は、格納および複雑性のためのオーバーヘッドが高く、有用性に限界がある。
【００１２】
本発明の一実施形態では、柔軟性を持つメモリ構造を提供する。当該メモリ構造では、格納および複雑さのためのオーバーヘッドを低く抑えつつマルチビットＥＣＣ符号を利用して、アイドル状態時の電力を非常に低く抑えて動作可能であり、セル（ビット）の状態が失われることに起因して発生するレイテンシである、アイドル電力状態を開始および終了するための遷移レイテンシを大幅に増加させることもない。
【００１３】
図１は、本発明の原理に係る、キャッシュメモリおよびエラー訂正コード（ＥＣＣ）ロジック１２２を備えるプロセッサ１００の実施形態を示す図である。ＥＣＣロジック１２２は、低レイテンシ且つ低コストのマルチビットエラー訂正ロジックであり、図１に示すキャッシュメモリ１１０等の揮発性メモリでの高い失敗率を補償する。図示している実施形態では、メモリキャッシュ１１０は混載ＤＲＡＭ（ｅＤＲＡＭ）である。他の実施形態によると、メモリキャッシュ１１０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）または任意のその他の種類の揮発性メモリであってよい。
【００１４】
訂正するエラーの数を増やすためには冗長性を高くする必要があり、検査ビットオーバーヘッドが高くなる。例えば、ｋビット入力データに含まれるｔビットエラーを訂正するためには、ＢＣＨ符号は通常、（ｒ＝ｔ＊ｃｅｉｌ（ｌｏｇ２ｋ）＋１）個の検査ビットが必要になる。ｒとｋとの間には対数関係があるので、検査ビットの数は入力データのサイズに比べると、増加率が非常に小さい。このため、ＥＣＣ検査ビットオーバーヘッドは、ｋを大きくすることで低減される。
【００１５】
例えば、６４バイト（５１２ビット）キャッシュライン用の１ビットエラー訂正２ビットエラー検出（ＳＥＣＤＥＤ）符号は、１１ビットが必要であり、オーバーヘッドは約２％となる。ＥＣＣ符号のビット数は、データワードのビット数と相対的に見ると、データワードに含まれるビット数が多くなるほどに、小さくなる。例えば、６４バイトキャッシュライン用のＳＥＣＤＥＤ符号は、オーバーヘッドが１１ビット（２％）であり、１０２４バイト（１ＫＢ）キャッシュライン用のＳＥＣＤＥＤ符号は、オーバーヘッドが１５ビット（０．１８％）である。
【００１６】
しかし、大きいキャッシュラインを利用する場合、当該キャッシュライン内のサブブロックへ書き込む際に、ＥＣＣビットを生成し直すために毎回キャッシュライン全部を読み出す必要が出てくる。ＢＣＨは、線形符号であるので、線形系の加算性を引き継いでおり、確実に、修正済みのサブブロック（データ群）の情報のみを利用してＥＣＣ検査ビットを更新する。データワードｄ（キャッシュラインを表す）は、複数の群（サブブロック）［ｄｉ−１、ｄｉ−２、・・・、ｄ０］に分割される。ＥＣＣエンコードで利用されるＧマトリクスは、Ｇ＝［Ｉｋ，Ｐ］と２つの部分に分割できる。ここで、Ｐは、ＥＣＣ検査ワードＣの生成部である。つまり、Ｃ＝ｄｘＰである。ｊ番目のデータ群ｄｊに新しい値ｄｊ＿ｎｅｗが書き込まれると、新しいＥＣＣは以下のように表される。
【数１】
0005604513.tif 000002
【００１７】
数１は、新しい検査ビットの生成に必要なのが、検査ビットの前の値のみであり、サブブロックの前の値および新しい値が修正されていることを示している。
【００１８】
図１に戻って、ＥＣＣロジック１２２は、低レイテンシ且つ低コストのマルチビットエラー訂正ロジックであり、ｅＤＲＡＭキャッシュ１１０における高失敗率を補償することができる。ＥＣＣロジック１２２は、５ビットエラー訂正（５ＥＣ）６ビットエラー検出（６ＥＤ）機能が高いＢＣＨ符号を実装している（以下では、５ＥＣ６ＥＤ符号と呼ぶ）。マルチビットＥＣＣを採用した従来の方法では、２つのオーバーヘッドによって有用性が制限されてしまうという問題を抱えていた。第一に、マルチビットＥＣＣ符号用の低レイテンシデコーダを構築するためのコストが非常に高い。第二に、ＥＣＣビットの格納オーバーヘッドが高い（６４バイトキャッシュライン用の５ＥＣ６ＥＤ  ＥＣＣ符号で約１０％）。
【００１９】
ＥＣＣロジック１２２は、領域、レイテンシ、および電力のオーバーヘッドを非常に小さく抑えつつマルチビットエラー訂正符号を実装している。ＥＣＣロジック１２２は、通常動作モード時の性能に悪影響を及ぼすことなく、低電力動作モード（アイドル状態）時の混載ＤＲＡＭの消費電力を最小限に抑える。ＥＣＣロジック１２２は、ほとんどまたは全く訂正が必要ないキャッシュライン用に最適化されている高速ＥＣＣロジック１０４を有する。ＥＣＣロジック１２２は、複雑なマルチビット訂正を必要とするキャッシュライン用に高レイテンシＥＣＣロジック１０６を有する。ある実施形態によると、ＥＣＣロジック１２２は、高レイテンシのマルチビット訂正を実行することによる性能への影響を最小限に抑えるべく、マルチビットエラーがあるラインをディセーブルする。別の実施形態によると、ＥＣＣロジック１２２は、ＥＣＣビットの格納に係るコストを低減するべく、自然に見られるデータの空間的局所性を利用する。
【００２０】
一実施形態によると、混載ＤＲＡＭ１１０は、プロセッサ１００が備える１２８メガバイト（ＭＢ）の最終レベル（レベル３（Ｌ３））キャッシュである。エラー訂正機能を持たない基本構成では、混載ＤＲＡＭキャッシュ１１０のリフレッシュ間隔は３０マイクロ秒（μ秒）である。この場合、中央演算処理装置（ＣＰＵ）１０２がアイドル状態であっても、消費電力が大きくなってしまう。リフレッシュ中に消費される電力（リフレッシュ電力）は、低電力動作モード中、例えば、アイドル状態中の混載ＤＲＡＭキャッシュ１１０に対してフラッシュおよびパワーゲーティングを実行することによって、削減されるとしてよい。しかし、このような構成にすると、ＣＰＵ１０２がアイドルモード（状態）から起き出す時の性能が大幅に劣化してしまう。これは、ＣＰＵ１０２がデータを外部メモリ（メインメモリ（不図示））から混載ＤＲＡＭキャッシュ１１０へとロードし直す必要があり、コールドスタートキャッシュミスが大量に発生するためである。これに代えて、リフレッシュ時の消費電力は、リフレッシュの頻度を低減することによって、つまり、混載ＤＲＡＭキャッシュ１１０内のキャッシュラインに格納されているデータのリフレッシュ周期（リフレッシュ間隔）を大きくすることによって、削減するとしてよい。しかし、リフレッシュ頻度を低減すると、各キャッシュラインについての失敗（各ビット（セル）の状態の損失）の数が多くなってしまう。
【００２１】
ＥＣＣロジック１２２は、１ＫＢキャッシュライン（５ＥＣ６ＥＤ）毎に符号を実行するので、各キャッシュラインが５ＥＣ６ＥＤ符号を格納するためには７１ビットを追加する必要がある（オーバーヘッドは０．８７％）。キャッシュラインのうちエラーとなるものが１Ｅ−０３（つまり、１０００分の１）以下になるようにリフレッシュ周期を選択する実施形態では、エラー軽減を行わない基本構成は、３０マイクロ秒（μｓ）という基本リフレッシュ時間で動作する。エラー訂正符号ロジック１２２によって、リフレッシュ周期を４４０マイクロ秒まで大きくすることができる。これは、基本構成のと比較すると、リフレッシュ周期が略１５倍になっている。
【００２２】
５ＥＣ６ＥＤ符号をサポートするロジックは、非常に複雑で、訂正されるエラービットの数およびデータビットの数の両方に比例してデコードレイテンシが長くなるという欠点がある。キャッシュメモリに対するアクセス全てについて完全なエンコード／デコードが必要となると、キャッシュアクセスレイテンシが大幅に増加し得る。本発明の一実施形態によると、キャッシュのうちエラーが発生しやすい部分をディセーブルすることができ、動作時にデコードレイテンシが大きくならないようにする。
【００２３】
エラー訂正符号ロジック１２２は、高速エラー訂正符号（ＥＣＣ）ロジック（第１のエラー訂正ロジック）１０４および高レイテンシエラー訂正符号（ＥＣＣ）ロジック（第２のエラー訂正ロジック）１０６を有する。
【００２４】
高速ＥＣＣロジック（ユニット）１０４は、ｅＤＲＡＭ１１０のキャッシュラインのうちエラーが１個または０個のキャッシュライン用に構成されている、シンドローム生成ロジックおよびエラー訂正ロジックを含む。高速ＥＣＣロジック１０４はさらに、シンドロームに基づいてキャッシュラインを２つのグループに分類する。つまり、複雑なマルチビットエラー訂正を必要とするキャッシュライン、および、エラーが２個未満、つまり、０個または１個であるキャッシュラインに分類する。マルチビットエラー訂正を必要とするキャッシュラインは、マルチビットエラー訂正を実行する高レイテンシＥＣＣ処理ロジック（ユニット）１０６に転送される。高速ＥＣＣロジック１０４で訂正されるキャッシュラインは、Ｌ１／Ｌ２キャッシュ１２４を介してＣＰＵ１０２に転送される。
【００２５】
一実施形態によると、高レイテンシＥＣＣ処理ロジック１０６はソフトウェアを用いてエラー訂正を実行する。別の実施形態によると、高レイテンシマルチビットＥＣＣ処理ロジック１０６は、ステートマシンを用いてマルチビットエラー訂正を実行する。高速ＥＣＣロジック１０４および高レイテンシＥＣＣ処理ロジック１０６を組み合わせることで、ｅＤＲＡＭ１１０が持つキャッシュラインのうち訂正する必要があるエラー訂正が１つ以下であるキャッシュラインを即座に訂正して、Ｌ１／Ｌ２キャッシュ１２４を介してＣＰＵ１０２にレイテンシを低く抑えつつ転送することができる。ｅＤＲＡＭ１１０が持つキャッシュラインのうちエラーが２つ以上あるキャッシュラインについては、ＣＰＵ１０２に対する転送のレイテンシが大きくなる。
【００２６】
ＥＣＣロジック１２２が有する高速ＥＣＣロジック１０４は、１サイクルＥＣＣを実行して、混載ＤＲＡＭ１１０が持つキャッシュラインの１ビットエラーを訂正する。ＥＣＣロジック１２２が有する高レイテンシ訂正ロジック１０６は、非パイプライン方式で、高レイテンシのＥＣＣ処理を実行して、キャッシュラインのマルチビットエラーを訂正する。
【００２７】
キャッシュラインを混載ＤＲＡＭ１１０から読み出す場合、データバッファ１１４を通過して、タグ／ＥＣＣアレイ１０８から読み出されたキャッシュラインに対応付けられているＥＣＣおよびタグと共に、高速エラー訂正ロジック１０４に渡される。タグおよびＥＣＣは、データバッファ１１６を通過して高速ＥＣＣロジック１０４に渡される。高速ＥＣＣロジック１０４が持つデコーダ（不図示）は、受信したキャッシュラインに対してシンドロームを生成する。生成されたシンドロームは、キャッシュラインが持つエラーの数が、０個、１個またはそれ以上のいずれであるかに関する情報を含む。キャッシュラインが持つエラーが１ビットの場合またはエラーが無い場合、高速ＥＣＣロジック１０４が持つデコーダは、短時間で１ビットエラーの訂正を完了する。一実施形態によると、短時間とは１サイクル（５００ピコ秒（ｐｓ））であってよい。他の実施形態によると、短時間とは、１サイクルを超えるとしてもよい。この時間は、高レイテンシＥＣＣ処理ロジック１０６がマルチビットエラー訂正を完了するのに必要な時間より短い。
【００２８】
マルチビットエラーの処理には、高いレイテンシが対応付けられているが、性能が大幅に低下する要因となり得る。このような高いレイテンシが発生しないように、一実施形態では、問題のあるラインをディセーブルする構成またはビット修正（ｂｉｔ−ｆｉｘ）等のメカニズムを修復ロジック１２０に組み込むとしてよい。
【００２９】
エラーの頻度は、ディセーブル方式において参照される。マルチビットエラーレートが低い場合、マルチビットエラーを含むキャッシュラインをディセーブルするといった方法は、性能劣化を抑制する。しかし、キャッシュラインをディセーブルする方式を採用すると、マルチビットエラーレートが高い場合には、キャッシュ容量の損失が許容出来ないほど高くなってしまう。マルチビットエラーレートが高い場合には、ビット修正等のより複雑なメカニズムを用いてキャッシュラインのディセーブルによる容量損失を最小限に抑えるとしてよい。
【００３０】
ある実施形態によると、データバッファ１１４、１１６と、高速ＥＣＣロジック１２２との間に修復ロジック１２０が結合されている。このように修復ロジック１２０が追加されると、マルチビットデコードによる性能劣化が発生するのは１回のみ、つまり、ｅＤＲＡＭ１１０内の弱いセルに起因するエラーが最初に特定された場合のみである。修復ロジック１２０によれば、キャッシュラインをＥＣＣロジック１２２に転送する前に、エラーの数を少なくすることができる。このように、ＥＣＣをキャッシュラインに適用する前にキャッシュラインに含まれる既知のエラーを修正する修復メカニズムを最初に利用することによって、レイテンシを全体的に低減する。
【００３１】
一実施形態によると、修復ロジック１２０はビット修正ロジックを含む。ビット修正ロジックは、「故障している」ビット対を特定し、この「故障している」ビット対を修復するためのパッチをキャッシュライン内に維持する。ある実施形態によると、ビット修正ロジックは、キャッシュセット内の複数のウェイのうち４分の１を用いてエラービットの修正ビットおよび位置を格納する（つまり、エラービットの正しい状態（値）は当該キャッシュセットの他のウェイにある）。低電圧モードにおいて、キャッシュメモリ１１０が８ウェイキャッシュとして実現される実施形態では、「故障している」ビット対を訂正するための欠陥訂正情報を格納するために８本のウェイのうち２つを確保しておく。
【００３２】
ビット修正ロジックによって、欠陥のある対、つまり、キャッシュラインの２ビット群のうち、（論理状態を維持できなかったために）少なくとも１ビットが欠陥を持つ２ビット群をディセーブルする。ビット修正ロジックは、欠陥のある２ビット対を訂正するために利用され得る２ビット「パッチ」（正しいビット状態）を維持する。修復パターンは、キャッシュメモリ（ｅＤＲＡＭ）１１０内の選択されたキャッシュラインに格納されている。低電圧動作時には、修復パターン（修復ポインタおよびパッチ）はキャッシュメモリ１１０に格納されている。キャッシュラインに対する読出動作または書込動作では、最初に当該キャッシュラインの修復パターンをフェッチする。読み出しの場合には、修復パターンによって、当該読出動作は「故障している」ビット（欠陥ビット）からデータを読み出さずに済む。修復パターンのパッチを利用することによって、キャッシュラインは、ＣＰＵ１０２、別のキャッシュに転送される前、または、メモリに書き戻される前に再構成される。書き込みの場合には、修復パターンによって、当該書込動作は故障しているビットに書き込まずに済む。新しいパッチを修復パターンに書き込んで、キャッシュに書き込まれた新しいデータを反映する。ビット修正ロジックを利用する修復メカニズム（修復ロジック１２０）の実施形態を説明した。他の実施形態では、ビット修正以外の修復メカニズムを用いて、ＥＣＣを適用する前に既知のエラーを修正することができる。
【００３３】
ある実施形態によると、キャッシュメモリ１１０は、６４Ｂキャッシュラインを持つ３２Ｋの８ウェイキャッシュである。キャッシュメモリ１１０に格納されているデータにアクセスする度に、適切な修復パターンを取得するための別のアクセスが必要となる。ポートの数を増やすことなく修復パターンにアクセスするために、ビット修正方式では、キャッシュメモリ１１０を２つのバンクに編成する。２つの修正ラインを維持して、各バンクに１つずつとし、各修正ラインを用いて他方のバンクのキャッシュラインを修復する。３つのキャッシュラインのための修復パターンが、１つのキャッシュラインに対応する。このため、３つのキャッシュライン毎に１つの修正ライン（修復パターンを格納しているキャッシュライン）を維持している。修正ラインは、格納している修復パターンを利用する３つのキャッシュラインとは反対のバンクに割り当てられる。この結果、キャッシュポートの数を増やすことなく、キャッシュライン、および、対応する修復パターンを並行にフェッチすることができる。
【００３４】
キャッシュヒットの場合、データラインをキャッシュメモリ１１０の一方のバンクから読み出して、修正ラインはキャッシュメモリ１１０の他方のバンクから読み出す。データラインは、「ｎ」ビットシフトステージを通過する。尚、「ｎ」は、欠陥を持つビット対の数を表す。各ステージでは、欠陥ビット対を削除して、修正後のビット対と交換する。修正ラインもエラービットを含む場合があるので、ＳＥＣＤＥＤ  ＥＣＣを適用して、利用する前に、修正ラインに含まれる修復パターンを訂正する。修復パターンは、修正した後に、データラインを訂正するために利用される。１つの欠陥ビット対の修復は、３つの段階から成る。第一に、ＳＥＣＤＥＤ  ＥＣＣで、修復パターン内の欠陥ビットを、あれば、修復する。第二に、欠陥ポインタが欠陥ビット対を特定する。第三に、欠陥ビット対を削除した後、パッチを用いて、失われた正しいビットをキャッシュラインに復活させる。
【００３５】
図２は、最近アクセスされたラインを示すテーブル（ＲＡＬＴ）１１２の実施形態と、図１に示した混載ＤＲＡＭキャッシュ１１０およびＥＣＣロジック１２２とを備えるシステム２００を示すブロック図で、ｅＤＲＡＭキャッシュ１１０内のキャッシュラインに対して高速アクセスを実行する様子を示す図である。
【００３６】
６４バイトを超えるキャッシュラインサイズを用いて、マルチビットＥＣＣ符号を格納するために必要なメモリストレージを低減する。ある実施形態によると、ｅＤＲＡＭキャッシュ１１０は、１２８ＭＢの混載ＤＲＡＭであるレベル３（Ｌ３）キャッシュであり、キャッシュライン２０２のサイズは１０２４バイト（１キロバイト（ＫＢ））である。レベル２（Ｌ２）キャッシュ／レベル１（Ｌ１）キャッシュ１２４は、６４バイト（Ｂ）のキャッシュラインを有する（Ｌ３キャッシュラインのサブブロックと呼ぶ）。Ｌ３のｅＤＲＡＭキャッシュ１１０への書き込みは大半が、低位レベル（Ｌ１またはＬ２）のキャッシュメモリ１２４で生成された、または、非キャッシュメモリ（メインメモリ／外部メモリ（不図示））からフェッチされた相対的に小型の６４バイトのサブブロックの形態で行われる。
【００３７】
１ＫＢのキャッシュライン２０２内の６４Ｂのサブブロック２０４を修正するためには、ＣＰＵ１０２によってＥＣＣ符号を算出するべく読出−修正−書込処理を実行する。第一に、上書きが行われている６４Ｂのサブブロック２０４は、１ＫＢのキャッシュライン２０２全体についてのＥＣＣ符号２０８と共に、ｅＤＲＡＭキャッシュ１１０から読み出される。前のデータ、前のＥＣＣ符号、および、新しいデータを用いて、１ＫＢのキャッシュライン２０２全体についての新しいＥＣＣ２０８を算出する。新しい６４Ｂのサブブロック２０４および新しいＥＣＣ符号２０８は、Ｌ３のｅＤＲＡＭキャッシュ１１０に書き戻される。しかし、以下で説明するように、１ＫＢのキャッシュライン２０２の全体が、新しいＥＣＣ２０８を算出するために読み出されているわけではない。
【００３８】
Ｌ３キャッシュ１１０からの読み出しは大半が、低位レベル（Ｌ１およびＬ２）のキャッシュ１２４に割り当てるためのキャッシュラインを提供するために実行される。キャッシュライン２０２の任意のサブブロック２０４を処理するためには、ＥＣＣ２０８を、保護対象のデータワード（１ＫＢのキャッシュライン）２０２全体で処理する必要がある。１ＫＢのキャッシュライン２０２に含まれる６４Ｂの各サブブロック２０４を検査する必要があるので、６４Ｂのサブブロック２０４への参照は毎回、その周囲の６４Ｂのサブブロック２０４への参照を伴う。このため、Ｌ３の混載ＤＲＡＭキャッシュ１１０の読み出しでは、キャッシュライン２０２が含むサブブロック２０４全てが共有しているＥＣＣ２０８（キャッシュライン毎にある）に加えて、１ＫＢのキャッシュライン２０２に含まれる１６個の６４ビットサブブロック２０４の全てにアクセスする。例えば、一の１ＫＢキャッシュライン２０２が有する１６個のサブブロック２０４のうち８個のみを読み出す場合、１６個のサブブロック２０４全てを８回読み出すので、合計で１２８回のサブブロック読出を行なうことになる。このような大量の余分なサブブロック読出のために、動的消費電力が大幅に増加し、ｅＤＲＡＭキャッシュ１１０が実現する有用なキャッシュ帯域幅が減少している。
【００３９】
上述したように、ｅＤＲＡＭキャッシュ１１０は周期的にリフレッシュして各メモリセルの現在の状態を維持する必要があるので、ｅＤＲＡＭエラーの大半は保持エラーが原因である。ある実施形態によると、保持時間は３０マイクロ秒（μｓ）であり、特定のキャッシュラインを読み出す度に、当該キャッシュラインのリフレッシュが自動的に示唆される。このため、保持エラーは、あるキャッシュラインが読み出された後の３０μｓの間は当該キャッシュラインでは発生しないはずである。このように考察されるため、余分な読出の数を最小限に抑えることができる。ＲＡＬＴ１１２を用いて、過去３０μｓの間に参照（読出）が行なわれたキャッシュラインを追跡する。
【００４０】
ｅＤＲＡＭキャッシュ１１０内の一のキャッシュライン２０２への最初の読出が行なわれると、キャッシュライン２０２のサブブロック２０４は全て読み出されてエラーの有無を検査する。読み出されたキャッシュライン２０２のアドレスは、ＲＡＬＴ１１２内のＲＡＬＴエントリ２０６に格納される。格納されたアドレスは、対応するキャッシュライン２０２が最近読み出されて検査されたので、続く３０μｓの間は保持エラーが発生しないはずである旨を示している。読み出されたキャッシュラインのアドレスがＲＡＬＴ１１２に格納されている間は、当該キャッシュライン２０２から続いてサブブロックを読み出す場合に、ＥＣＣ処理を実行せずに済むので、当該キャッシュライン２０２に対応付けられているＥＣＣ２０８およびキャッシュライン２０２内のほかのサブブロック２０４を読み出さずに済む。ＲＡＬＴ１１２は、３０μｓの期間を複数の同じ長さの「キャッシュライン読出」期間に分割することによって、ＲＡＬＴエントリ２０６はいずれも３０μｓを超えて格納されないようにする。各期間においてＲＡＬＴ１１２で割り当てられるエントリ２０６は、サブリフレッシュ期間を特定する期間識別子２１４でマーキングされる。次のサブリフレッシュ期間へと遷移すると、複数の「キャッシュライン読出」期間のうち前回の同じ期間で割り当てられていたＲＡＬＴエントリは全て、無効になる（ＲＡＬＴのエントリ２０６に対応付けられている「有効」フィールドの状態によって示される）。
【００４１】
ＲＡＬＴ１１２の各エントリ２０６は、当該エントリが対応付けられているキャッシュラインを特定するラインアドレスフィールド２０９と、有効フィールド２１２と、どの期間に当該キャッシュラインが割り当てられたのかを示す期間識別子フィールド２１４と、キャッシュラインのサブブロック毎に１パリティビットを含むパリティフィールド２１１とを含む。ある実施形態によると、期間識別子フィールド２１４は４つの期間（Ｐ０、Ｐ１、Ｐ２、Ｐ３）のうち何れの期間でキャッシュラインが割り当てられたかを示すために２ビットを持ち、パリティフィールド２１１は、キャッシュラインの６４Ｂのサブブロックにつき１つとなるよう１６ビットを持つ。ＲＡＬＴ１１２は、ダイレクトマップ方式であるが、期間識別子フィールド２１４に対する連想メモリ（ＣＡＭ）無効化をサポートして、次の期間へと遷移する際にＲＡＬＴ１１２の複数のエントリ２０６のバルク無効化を可能とする。
【００４２】
あるサブブロック２０４の初回の読出において、１ＫＢのキャッシュライン２０２の各サブブロックと共にＥＣＣ２０８全体も読み出して、一の６４Ｂのサブブロック２０４についてのＥＣＣ処理を可能とする。当該キャッシュライン２０２と対応付けられているＲＡＬＴ１１２のエントリ２０６は、参照されたキャッシュライン２０２のラインアドレス、期間識別子、および、キャッシュライン２０２のサブブロック２０４毎に１個設けられているパリティビットによって更新される。キャッシュライン２０２に対する最初のヒットの後、リフレッシュ期間内に同じキャッシュライン２０２に対してアクセスがその後行なわれても、ＥＣＣ処理は必要ない。
【００４３】
キャッシュラインに対する最初の読出が行なわれると、当該ラインのサブブロック全てを読み出してエラーの有無について検査する。その後、当該ラインのアドレスをＲＡＬＴに格納して、当該ラインが最近検査されて、続く３０μｓの間は保持エラーが発生しない旨を示す。ＲＡＬＴに当該ラインのアドレスが格納されている限り、当該ラインから読み出されたサブブロックはいずれも、ＥＣＣ処理を省略することができるので、ＥＣＣ符号および当該ラインの他のサブブロックの読出を行なわずに済む。
【００４４】
ＲＡＬＴ１１２は、正しく機能させるべく、ＲＡＬＴエントリはいずれも３０μｓを超えて格納されないようにする。この条件を確実に満たすべく、カウンタ２１６を用いて３０μｓの期間の経過を測定する。３０μｓの期間は、４つの同じ長さのサブ期間（Ｐ０、Ｐ１、Ｐ２、Ｐ３）に分割される。各期間においてＲＡＬＴ１１２で割り当てられたエントリは、２ビットの識別子でマーキングされて、カウンタの現在値を確認することによって決定され得る割り当てサブ期間を特定する。例えば、２ＧＨｚプロセッサ１００において３０μｓが経過したか否かは、各サイクルで６００００までカウントをインクリメントさせるカウンタ２１６を用いて測定することができる。例えば、カウンタ値が０−１５０００までの場合はサブ期間Ｐ０に対応し、１５００１−３００００までの場合はサブ期間Ｐ１に対応し、３０００１−４５０００までの場合はサブ期間Ｐ２に対応し、４５００１−６００００までの場合はサブ期間Ｐ３に対応する。カウンタ２１６が６００００に到達すると、０にリセットされて、Ｐ３からＰ０へと遷移する。サブ期間が遷移する度に、当該サブ期間の前回の同じサブ期間で割り当てられたＲＡＬＴエントリのうち一部または全てが無効化され得る。例えば、サブ期間Ｐ０からサブ期間Ｐ１へと遷移すると、前回のサブ期間Ｐ１で割り当てられたＲＡＬＴエントリは全て無効化される。
【００４５】
図３は、図２のシステムを示すブロック図であって、リフレッシュ期間内に続いてキャッシュラインの読み出しを行う様子を説明するための図である。大半の場合には、要求された６４Ｂのサブブロック２０４のみが読み出される。６４Ｂのサブブロック２０４のパリティを算出して、ＲＡＬＴ１１２に格納されているキャッシュライン２０２の当該６４Ｂのサブブロック２０４のパリティ２１１と比較する。一致すれば、この６４Ｂのサブブロック２０４は有効で、この６４Ｂのサブブロック２０４は要求元のキャッシュ１２４またはプロセッサ１０２へと転送されると推定される。パリティが一致しない場合は、ＲＡＬＴミスとして扱われ、１ＫＢのキャッシュライン２０２の全部を読み出す。ＲＡＬＴ１１２は、キャッシュ読出の度に１ＫＢのキャッシュライン２０２の全てを読み出さないで済むように、最近アクセスしたキャッシュライン２０２を追跡するために用いられるので、動的電力が最小限に抑えられる。
【００４６】
図４Ａは、図１に示した高速ＥＣＣロジック１０４に含まれているＥＣＣエンコーダ４００の実施形態を示すブロック図である。ＢＣＨ符号は、非常に密度が高く広範囲に広がっているエラーを訂正可能な多くの同種のマルチビットエラー訂正符号をまとめた呼び方である。一般的に、各ＢＣＨ符号は、生成多項式を持つ有限ガロア域ＧＦ（２ｍ）について定義されている線形ブロック符号である。尚、２ｍは、最大コードワードビット数を表す。
【００４７】
ＥＣＣエンコーダ（エンコードロジック）４００は、ｋビットの入力データワードｄを取得して、所定のエンコーダマトリクスＧを用いて、対応するコードワードｕ（ｕ＝ｄ×Ｇ）を生成する。ＢＣＨはシステマティックコードなので、元のｋビットデータはコードワードｕ（ｘ）で保持され、その後にｒ個の検査ビットが続く。
【００４８】
図４Ｂは、図１に示した高速ＥＣＣロジックに含まれているＥＣＣデコーダ（デコードロジック）４０２の実施形態を示すブロック図である。デコードロジック４０２は、受信したコードワードｕ（ｘ）に含まれているエラーがあれば検出および訂正して、元のデータ値を修復する。デコードロジック４０２は、シンドローム生成ロジック４０４、エラー分類ロジック４０６、および、エラー訂正ロジック４０８を有する。
【００４９】
シンドローム生成ロジック４０４は最初に、ｖ（エラーｅを含むコードワード、ｖ＝ｕ＋ｅ）に所定のＨマトリクスのトランスポーズを乗算して、シンドロームＳを算出する（Ｓ＝ｖ×ＨＴ）。ＧマトリクスおよびＨマトリクスは、Ｇ×ＨＴ＝０となるように構築される。Ｈマトリクスの一般的な構成を以下に示す。
【数２】
0005604513.tif 000003
【００５０】
有限ガロア域ＧＦ（２ｍ）において、それぞれの元αｉは、次数がｍ未満のαの多項式として表すことができるか、または、単に当該多項式のｍ個のバイナリ係数を持つベクトルとして表すことができる。このため、Ｈマトリクスは、行数が（ｔ＊ｍ＋１）であるバイナリマトリクスに拡張できる。尚、ｔは符号が訂正可能な最大エラー数である。Ｓ＝ｖ×ＨＴであるので、Ｓもまたｔ＊ｍ＋１個のビットを持ち、これは複数のコンポーネント［パリティ，Ｓ１，Ｓ３，・・・，Ｓ２ｔ−１］に分割可能である。
【００５１】
エラー分類ロジックは、シンドロームＳを用いてコードワードがエラーを含むか否かを検出する。以下の式が成り立つ。
【数３】
0005604513.tif 000004
【００５２】
このため、エラーがゼロであるＳ＝０の場合は、以下の式が成り立つ。
【数４】
0005604513.tif 000005
【００５３】
コードワードにエラーが無い場合には、数３に示すようにシンドローム値はゼロになる。これは、全てのシンドロームビットに対して論理ＯＲ演算を実行することによって検出することができる。このためには、ｃｅｉｌ（ｌｏｇ２ｔｍ）個の２入力ゲート遅延が必要である。
【００５４】
エラー訂正ロジックは、上記の式が満たされない場合には、シンドローム値を用いて壊れたビットの位置を正確に指摘する。
【００５５】
ｅにおけるエラーの位置を［ｊ１，ｊ２，・・・，ｊｔ］と表すと、各シンドロームコンポーネントＳｉは以下のように表すことができる。
【数５】
0005604513.tif 000006
【００５６】
訂正ロジックは、以下の３つのステップを実行する。
ステップ１：エラー位置多項式σ（ｘ）の係数を決定する。尚、σ（ｘ）は、σ（ｘ）の根がエラー要素αｊ１，αｊ２，・・・，αｊｔの逆数で表されるものと定義される。
【数６】
0005604513.tif 000007
ステップ１のエラー訂正は、ｔ段階の反復アルゴリズムに基づいて行われ、それぞれの反復では、２ｍ個の演算が必要となるガロア域反転が行われる。
ステップ２：エラー位置であるσ（ｘ）の根を求める。多項式σ（ｘ）が決まると、ガロア域の元αｊをそれぞれ、当該多項式に代入する。当該多項式がゼロとなる元が、根である。ステップ２の実行は、１回路の場合にはｎサイクルで行われ、ｎ個の並列回路の場合には１サイクルで行うことができる。いずれの場合でも、基礎回路はＯ（ｔ＊ｍ２）である。
ステップ３：データビットの正しい値を算出する。単に、エラー位置でのビットを反転させることで行う。
【００５７】
１ビットエラーの場合には、シンドロームは、このエラービットに対応するＨマトリクスの列と全く同じである。このため、１ビットエラーは、Ｈマトリクスの各列をシンドロームと比較することによって検出することができる。このような訂正処理は、一般的なｔビットの訂正（ｔ＞１とする）よりもはるかに高速に行われる。これは、エラー訂正ロジックのステップ１、および、ステップ２の大半の実行が必要ないためである。シンドローム要素は全てが、Ｈマトリクスの全列と一致する必要はない。Ｓ１をＨ１の各列と比較して（数１で定義している）、以下の式を満足していることを確認するだけでよい。
【数７】
0005604513.tif 000008
【００５８】
レイテンシを最小限に抑えるために、Ｓ１とＨ１との比較、および、数７での比較の全ては、並列に処理され得る。
【００５９】
図５は、本発明の原理に係る、図１に示したシステム１００を利用する方法の実施形態を説明するためのフローチャートである。
【００６０】
ブロック５００において、キャッシュラインアドレス（ａｄｄｒ）が最近アクセスされたラインを示すテーブル１１２のＲＡＬＴエントリ２０６と対応付けられている場合、当該キャッシュラインは最近アクセスされており、エラー検査が必要ないので、当該キャッシュラインアドレスはＬ１／Ｌ２キャッシュ１２４を介してＣＰＵ１０２に転送される。対応付けられていない場合、ブロック５０２に進む。
【００６１】
ブロック５０２において、キャッシュラインアドレス（ａｄｄｒ）は、図２を参照しつつ上述したように、ＲＡＬＴテーブル１１２のＲＡＬＴエントリ２０６のラインアドレスフィールド２０９に格納される。キャッシュメモリ１１０内の当該キャッシュラインに格納されているデータおよび当該アドレスに対応するＴａｇ／ＥＣＣアレイ１１８に格納されているＴａｇ／ＥＣＣを読み出して、データバッファ１１４、１１６を介して転送する。ブロック５０４に進む。
【００６２】
ブロック５０４では、修復ロジック１２０を含む実施形態において、ブロック５１２に進んで、キャッシュラインの修復を行う。修復ロジックを含まない実施形態では、ブロック５０６に進む。
【００６３】
ブロック５０６において、高速ＥＣＣロジック１０４において高速ＥＣＣを実行して、キャッシュラインがエラーを含むか否かを判断する。ブロック５０８に進む。
【００６４】
ブロック５０８では、訂正対象であるキャッシュラインが含むエラーが２個以上であれば、ブロック５１４に進む。エラーが１個以下であれば、当該エラーは高速ＥＣＣロジック１０４で訂正してブロック５１０に進む。
【００６５】
ブロック５１０では、訂正後のキャッシュラインデータを、Ｌ１／Ｌ２キャッシュ１２４を介してＣＰＵ１０２に転送する。
【００６６】
ブロック５１２において、キャッシュメモリ１１０から読み出され、データバッファ１１４、１１６を介して転送されたキャッシュラインデータを、上述したように、修復する。ブロック５０６に進む。
【００６７】
ブロック５１４において、高度ＥＣＣロジックでキャッシュラインが含むマルチビットエラーを訂正して、ブロック５１０に進む。
【００６８】
図６は、図１に示したプロセッサ１００の実施形態を備えるシステム６００を示すブロック図である。システム６００は、混載キャッシュメモリを有するプロセッサ１００と、メモリコントローラハブ（ＭＣＨ）６０２と、入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６０４とを備える。ＭＣＨ６０２は、プロセッサ６０１と外部メモリ（メインメモリ）６１０との間の通信を制御するメモリコントローラ６０６を有する。プロセッサ１００およびＭＣＨ６０２は、システムバス６１６を介して通信を行う。
【００６９】
ＣＰＵ１０２は、複数のプロセッサのうち任意の１つであってよく、例えば、シングルコアのＩｎｔｅｌ（登録商標）社のＰｅｎｔｉｕｍ（登録商標）  ＩＶ（登録商標）プロセッサ、シングルコアのＩｎｔｅｌ（登録商標）社のＣｅｌｅｒｏｎ（登録商標）プロセッサ、Ｉｎｔｅｌ（登録商標）社のＸＳｃａｌｅ（登録商標）プロセッサ、または、Ｉｎｔｅｌ（登録商標）社のＰｅｎｔｉｕｍ（登録商標）Ｄ、Ｉｎｔｅｌ（登録商標）社のＸｅｏｎ（登録商標）プロセッサあるいはＩｎｔｅｌ（登録商標）社のＣｏｒｅ（登録商標）デュオ（Ｄｕｏ）プロセッサ等のマルチコアプロセッサ、さらに、その他の任意の種類のプロセッサのうちの１つであってよい。
【００７０】
メモリ６１０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、シンクロナイズドダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、ダブルデータレート２（ＤＤＲ２）ＲＡＭまたはランバスダイナミックランダムアクセスメモリ（ＲＤＲＡＭ）または任意のその他の種類のメモリであってよい。
【００７１】
ＩＣＨ６０４は、ダイレクトメディアインターフェース（ＤＭＩ）等の高速チップ・ツー・チップ・インターコネクト６１４を用いてＭＣＨ６０２に結合されているとしてよい。ＤＭＩは、２つの一方向レーンでの２ギガビット／秒という同時転送レートをサポートしている。
【００７２】
ＩＣＨ６０４は、ＩＣＨ６０４に結合されている少なくとも１つのストレージデバイス６１２との間での通信を制御するストレージ入出力（Ｉ／Ｏ）コントローラを有するとしてよい。ストレージデバイスは、例えば、ディスクドライブ、デジタルビデオディスク（ＤＶＤ）ドライブ、コンパクトディスク（ＣＤ）ドライブ、リダンダント・アレイ・オブ・インディペンデント・ディスクス（ＲＡＩＤ）、テープドライブまたはその他のストレージデバイスであってよい。ＩＣＨ６０４は、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース（ＳＡＳ）またはシリアル・アドバンスド・テクノロジー・アタッチメント（ＳＡＴＡ）等のシリアルストレージプロトコルを用いたストレージプロトコルインターコネクト６１８を介してストレージデバイス６１２と通信を行うとしてよい。
【００７３】
本発明の実施形態に係る方法がコンピュータ利用可能媒体を含むコンピュータプログラム製品として具現化され得ることは当業者には明らかである。例えば、このようなコンピュータ利用可能媒体は、コンピュータ読出可能プログラムコードが格納されている、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）ディスクあるいは従来のＲＯＭデバイス等のリードオンリーメモリデバイス、または、コンピュータディスケットから構成されるとしてよい。
【００７４】
本発明の実施形態を実施形態に基づいて具体的に図示および説明してきたが、当業者におかれては、特許請求の範囲に記載する請求項が定める本発明の実施形態の範囲から逸脱することなく、形状および詳細な内容についてはさまざまな点で変更し得ると理解されたい。
【図１】
0005604513.tif 000009
【図２】
0005604513.tif 000010
【図３】
0005604513.tif 000011
【図４Ａ】
0005604513.tif 000012
【図４Ｂ】
0005604513.tif 000013
【図５】
0005604513.tif 000014
【図６】
0005604513.tif 000015