"キャッシュメモリと、前記キャッシュメモリ内のキャッシュラインに格納されているデータを受信するエラー訂正ロジックとを備え、前記エラー訂正ロジックは、前記キャッシュラインに含まれるエラーの数を決定するべく、前記キャッシュメモリから読み出され、受信した前記キャッシュラインについてシンドロームを生成する第1のエラー訂正ロジックと、前記キャッシュラインに含まれるエラーの数が2以上の場合に限り、前記第1のエラー訂正ロジックから前記キャッシュラインを受信して、受信した前記キャッシュラインについてマルチビットエラー訂正を実行する第2のエラー訂正ロジックとを有する装置。前記キャッシュラインを前記エラー訂正ロジックに転送する前に、前記キャッシュラインに含まれている既知のエラーを修正する修復ロジックをさらに備える請求項1に記載の装置。前記キャッシュメモリは、揮発性メモリである請求項1に記載の装置。前記第1のエラー訂正ロジックは、前記マルチビットエラー訂正よりも短い時間で訂正を実行するデコーダを含む請求項1に記載の装置。前記第1のエラー訂正ロジックは、エラーが0個または1個であるキャッシュラインについてのエラー訂正ロジックおよびシンドローム生成ロジックを含む請求項1に記載の装置。前記キャッシュメモリのアドレスバスに結合されており、且つ、アドレス指定された前記キャッシュラインが、揮発性メモリである前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされたか否かを判断する、最近アクセスされたラインを示すテーブルRALTをさらに備える請求項1に記載の装置。前記RALTは、最近アクセスされたラインを追跡するために用いられる請求項6に記載の装置。前記第1のエラー訂正ロジックは、受信した前記キャッシュラインに含まれる1つのエラーについてエラー訂正を実行する請求項1に記載の装置。キャッシュメモリにデータを格納する段階と、第1のエラー訂正ロジックおよび第2のエラー訂正ロジックを有するエラー訂正ロジックにおいて、前記キャッシュメモリ内のキャッシュラインに格納されているデータを受信する段階と、前記第1のエラー訂正ロジックにおいて、前記キャッシュラインに含まれているエラーの数を決定するべく、前記キャッシュメモリから読み出されて、受信された前記キャッシュラインについてシンドロームを生成する段階と、前記第1のエラー訂正ロジックにおいて、前記キャッシュラインに含まれるエラーの数が2以上である場合に限り、前記キャッシュラインを前記第2のエラー訂正ロジックに転送する段階と、前記第2のエラー訂正ロジックにおいて、受信した前記キャッシュラインについてマルチビットエラー訂正を実行する段階とを備える方法。前記キャッシュラインを前記エラー訂正ロジックに転送する前に、修復ロジックにおいて、前記キャッシュラインに含まれる既知のエラーを修復する段階をさらに備える請求項9に記載の方法。前記第1のエラー訂正ロジックにおいて、前記マルチビットエラー訂正よりも短い時間で訂正を実行する段階をさらに備える請求項9に記載の方法。前記キャッシュメモリのアドレスバスに結合されている最近アクセスされたラインを示すテーブルRALTにおいて、アドレス指定された前記キャッシュラインが前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされたか否かを判断する段階をさらに備える請求項11に記載の方法。前記RALTにおいて、最近アクセスされたキャッシュラインを追跡する段階をさらに備える請求項12に記載の方法。前記第1のエラー訂正ロジックにおいて、受信した前記キャッシュラインに含まれる1つのエラーについてエラー訂正を実行する段階をさらに備える請求項9に記載の方法。情報が関連付けられている機械アクセス可能媒体を備える物品であって、前記情報にアクセスすると、機械は、キャッシュメモリにデータを格納して、第1のエラー訂正ロジックおよび第2のエラー訂正ロジックを有するエラー訂正ロジックにおいて、前記キャッシュメモリ内のキャッシュラインに格納されているデータを受信して、前記第1のエラー訂正ロジックにおいて、前記キャッシュラインに含まれているエラーの数を決定するべく、前記キャッシュメモリから読み出されて、受信された前記キャッシュラインについてシンドロームを生成して、前記第1のエラー訂正ロジックにおいて、前記キャッシュラインに含まれるエラーの数が2以上である場合に限り、前記キャッシュラインを前記第2のエラー訂正ロジックに転送して、前記第2のエラー訂正ロジックにおいて、受信した前記キャッシュラインについてマルチビットエラー訂正を実行する物品。前記機械はさらに、前記キャッシュラインを前記エラー訂正ロジックに転送する前に、修復ロジックにおいて、前記キャッシュラインに含まれる既知のエラーを修復する請求項15に記載の物品。前記機械はさらに、前記第1のエラー訂正ロジックにおいて、前記マルチビットエラー訂正よりも短い時間で訂正を実行する請求項15に記載の物品。前記機械はさらに、前記キャッシュメモリのアドレスバスに結合されている最近アクセスされたラインを示すテーブルRALTにおいて、アドレス指定された前記キャッシュラインが前記キャッシュメモリの現在のリフレッシュ期間内にアクセスされたか否かを判断する請求項15に記載の物品。前記機械はさらに、前記第1のエラー訂正ロジックにおいて、受信した前記キャッシュラインに含まれる1つのエラーについてエラー訂正を実行する請求項15に記載の物品。外部メモリと、前記外部メモリから読み出されたデータを格納するキャッシュメモリ、及び、前記キャッシュメモリ内のキャッシュラインに格納されているデータを受信するエラー訂正ロジックを有するプロセッサとを備え、前記エラー訂正ロジックは、前記キャッシュラインに含まれるエラーの数を決定するべく、前記キャッシュメモリから読み出されて、受信した前記キャッシュラインについてシンドロームを生成する第1のエラー訂正ロジックと、前記キャッシュラインに含まれるエラーの数が2以上の場合に限り、前記第1のエラー訂正ロジックから前記キャッシュラインを受信して、受信した前記キャッシュラインについてマルチビットエラー訂正を実行する第2のエラー訂正ロジックとを含むシステム。前記キャッシュラインを前記エラー訂正ロジックに転送する前に、前記キャッシュラインに含まれている既知のエラーを修正する修復ロジックをさらに備える請求項20に記載のシステム。前記第1のエラー訂正ロジックは、前記マルチビットエラー訂正よりも短い時間で訂正を実行するデコーダと、エラーが0個または1個のキャッシュラインのためのエラー訂正ロジックおよびシンドローム生成ロジックとを含む請求項20に記載のシステム。エラー訂正符号ECCは通常、不揮発性メモリおよびストレージデバイスにおいてソフトエラーおよびハードエラーの両方が許容されるように用いられるものである。デバイスに含まれるオンチップキャッシュおよびメモリデバイスチップ、集積回路は通常、単純且つ高速なECC、例えば、1ビット誤り訂正2ビットエラー検出SECDEDハミング符号を利用する。フラッシュメモリ等の低速デバイスでは、エラー訂正性能が高いマルチビットECC、例えば、リードソロモン符号を利用する。エラー訂正機能が高いECCメカニズムではデコードレイテンシが大きくなるが、例えば、ディスクドライブ等の大容量格納装置では問題にならない。これは、エンコード/デコードレイテンシが、本質的に存在するデバイスアクセス時間に比べると重要でないためである。しかし、技術スケーリングの結果、オンチップメモリアレイキャッシュは、マルチビットエラーの影響を受けやすくなっている。このため、エラー訂正機能の高いECC符号をオンチップキャッシュにも利用することが望ましい。レイテンシによるオーバーヘッドに加えて、追加されるECCビットの格納オーバーヘッドが、マルチビットECCをオンチップキャッシュメモリに利用する上で障害となっている。マイクロプロセッサでは、電力効率およびエネルギー効率の改善を求めて、低電力モード状態をサポートするために多くのアイドル状態を実現している。アイドル状態の間に消費される電力を低減することは、通常の中央演算処理装置CPUはアイドル状態である時間が長いので、特に重要である。混載DRAM技術によって、SRAMセルに比べると小型のメモリセルを利用することが可能となり、メモリが大幅に高密度化されている。このため、高性能プロセッサの最終レベルオンチップキャッシュとしてSRAMの代わりにDRAMを利用し得る。しかし、混載DRAMeDRAMセルの問題として、リーク電流のために時間の経過によってセルの電荷が失われてしまう点が挙げられている。eDRAMセルの保持時間は、当該セルが状態電荷を保持可能な時間の長さと定義されている。セルの保持時間はリーク電流に応じて決まり、リーク電流は素子のリークに応じて決まる。格納されているデータの状態を保存するためには、eDRAMセルは定期的にリフレッシュする必要がある。キャッシュから状態が失われないように、リフレッシュ周期はセルの保持時間よりも短く設定する必要がある。eDRAMは、従来のロジックプロセスで集積化されたDRAMであるので、利用している高速ロジックトランジスタは、リーク電流が従来のDRAMで利用されているトランジスタよりも大きい。このため、eDRAMのリフレッシュ時間は、従来のDRAMに比べると、約1000分の1と短くなっている。リフレッシュ周期が短くなるので、アイドル状態中に消費される電力が増加し、可用性が低くなる。SRAMキャッシュでは、本質的に存在するバラツキのために、低電圧では機能しない電荷状態を失ってしまう弱いセルが幾つか存在するので高電圧で動作せざるを得ず、アイドル状態中の消費電力を削減しようとする努力が無駄になっている。同様に、混載DRAMキャッシュでは、デバイスのバラツキが、各DRAMセルのリフレッシュ間隔に等しい保持時間に影響を及ぼしており、数個の特に弱いセルビットに基づいてキャッシュ全体のリフレッシュ期間が決まってしまう。しきい値電圧のバラツキに起因して、複数の異なるDRAMセルの間での保持時間のバラツキが大きくなってしまう。このバラツキは主に、ドーパントの変動がランダムであることに起因しており、eDRAMセル間での保持時間の分布がランダムになってしまう。しかし、リフレッシュレートが高くなると、キャッシュ電力が大幅に増加してしまう。キャッシュ電力を低減する方法では、パワーゲートPowerGateを利用する。パワーゲートは、電源に設けられるスイッチであり、あるブロックのトランジスタに対する電力を完全に停止することができる。eDRAMおよびSRAM等のメモリ技術では電力供給が無いと状態を保持できないので、パワーゲーティングを実行すると、メモリ状態が失われるという犠牲を払わなければならない。キャッシュが高密度化するにつれて、パワーゲーティングの性能および消費電力も高くなる。混載DRAMキャッシュのサイズが大きくなるにつれて、アイドル状態終了レイテンシメインメモリからキャッシュラインを取得してキャッシュの状態を復元するのにかかる時間とアイドル状態中の消費電力との間にトレードオフが存在する。DRAMリフレッシュ周期は、エラー訂正符号ECCを利用して状態が失われたセルを動的に特定および修復することによって、大きくなり得る。リフレッシュレートは、最も弱いeDRAMセルとは無関係に設定され、状態の損失についてはECCを用いて補償する。マルチビットエラーを訂正する機能が高いエラー訂正符号を利用する場合、リフレッシュレートが大きくなり、消費電力が低減されると考えられる。しかし、マルチビットECC符号は、格納および複雑性のためのオーバーヘッドが高く、有用性に限界がある。本発明の一実施形態では、柔軟性を持つメモリ構造を提供する。当該メモリ構造では、格納および複雑さのためのオーバーヘッドを低く抑えつつマルチビットECC符号を利用して、アイドル状態時の電力を非常に低く抑えて動作可能であり、セルビットの状態が失われることに起因して発生するレイテンシである、アイドル電力状態を開始および終了するための遷移レイテンシを大幅に増加させることもない。図1は、本発明の原理に係る、キャッシュメモリおよびエラー訂正コードECCロジック122を備えるプロセッサ100の実施形態を示す図である。ECCロジック122は、低レイテンシ且つ低コストのマルチビットエラー訂正ロジックであり、図1に示すキャッシュメモリ110等の揮発性メモリでの高い失敗率を補償する。図示している実施形態では、メモリキャッシュ110は混載DRAMeDRAMである。他の実施形態によると、メモリキャッシュ110は、スタティックランダムアクセスメモリSRAMまたは任意のその他の種類の揮発性メモリであってよい。訂正するエラーの数を増やすためには冗長性を高くする必要があり、検査ビットオーバーヘッドが高くなる。例えば、kビット入力データに含まれるtビットエラーを訂正するためには、BCH符号は通常、r=tceillog2k1個の検査ビットが必要になる。rとkとの間には対数関係があるので、検査ビットの数は入力データのサイズに比べると、増加率が非常に小さい。このため、ECC検査ビットオーバーヘッドは、kを大きくすることで低減される。例えば、64バイト512ビットキャッシュライン用の1ビットエラー訂正2ビットエラー検出SECDED符号は、11ビットが必要であり、オーバーヘッドは約2となる。ECC符号のビット数は、データワードのビット数と相対的に見ると、データワードに含まれるビット数が多くなるほどに、小さくなる。例えば、64バイトキャッシュライン用のSECDED符号は、オーバーヘッドが11ビット2であり、1024バイト1KBキャッシュライン用のSECDED符号は、オーバーヘッドが15ビット0.18である。しかし、大きいキャッシュラインを利用する場合、当該キャッシュライン内のサブブロックへ書き込む際に、ECCビットを生成し直すために毎回キャッシュライン全部を読み出す必要が出てくる。BCHは、線形符号であるので、線形系の加算性を引き継いでおり、確実に、修正済みのサブブロックデータ群の情報のみを利用してECC検査ビットを更新する。データワードdキャッシュラインを表すは、複数の群サブブロック[di-1、di-2、、d0]に分割される。ECCエンコードで利用されるGマトリクスは、G=[Ik,P]と2つの部分に分割できる。ここで、Pは、ECC検査ワードCの生成部である。つまり、C=dxPである。j番目のデータ群djに新しい値dj_newが書き込まれると、新しいECCは以下のように表される。数1は、新しい検査ビットの生成に必要なのが、検査ビットの前の値のみであり、サブブロックの前の値および新しい値が修正されていることを示している。図1に戻って、ECCロジック122は、低レイテンシ且つ低コストのマルチビットエラー訂正ロジックであり、eDRAMキャッシュ110における高失敗率を補償することができる。ECCロジック122は、5ビットエラー訂正5EC6ビットエラー検出6ED機能が高いBCH符号を実装している以下では、5EC6ED符号と呼ぶ。マルチビットECCを採用した従来の方法では、2つのオーバーヘッドによって有用性が制限されてしまうという問題を抱えていた。第一に、マルチビットECC符号用の低レイテンシデコーダを構築するためのコストが非常に高い。第二に、ECCビットの格納オーバーヘッドが高い64バイトキャッシュライン用の5EC6EDECC符号で約10。ECCロジック122は、領域、レイテンシ、および電力のオーバーヘッドを非常に小さく抑えつつマルチビットエラー訂正符号を実装している。ECCロジック122は、通常動作モード時の性能に悪影響を及ぼすことなく、低電力動作モードアイドル状態時の混載DRAMの消費電力を最小限に抑える。ECCロジック122は、ほとんどまたは全く訂正が必要ないキャッシュライン用に最適化されている高速ECCロジック104を有する。ECCロジック122は、複雑なマルチビット訂正を必要とするキャッシュライン用に高レイテンシECCロジック106を有する。ある実施形態によると、ECCロジック122は、高レイテンシのマルチビット訂正を実行することによる性能への影響を最小限に抑えるべく、マルチビットエラーがあるラインをディセーブルする。別の実施形態によると、ECCロジック122は、ECCビットの格納に係るコストを低減するべく、自然に見られるデータの空間的局所性を利用する。一実施形態によると、混載DRAM110は、プロセッサ100が備える128メガバイトMBの最終レベルレベル3L3キャッシュである。エラー訂正機能を持たない基本構成では、混載DRAMキャッシュ110のリフレッシュ間隔は30マイクロ秒μ秒である。この場合、中央演算処理装置CPU102がアイドル状態であっても、消費電力が大きくなってしまう。リフレッシュ中に消費される電力リフレッシュ電力は、低電力動作モード中、例えば、アイドル状態中の混載DRAMキャッシュ110に対してフラッシュおよびパワーゲーティングを実行することによって、削減されるとしてよい。しかし、このような構成にすると、CPU102がアイドルモード状態から起き出す時の性能が大幅に劣化してしまう。これは、CPU102がデータを外部メモリメインメモリ不図示から混載DRAMキャッシュ110へとロードし直す必要があり、コールドスタートキャッシュミスが大量に発生するためである。これに代えて、リフレッシュ時の消費電力は、リフレッシュの頻度を低減することによって、つまり、混載DRAMキャッシュ110内のキャッシュラインに格納されているデータのリフレッシュ周期リフレッシュ間隔を大きくすることによって、削減するとしてよい。しかし、リフレッシュ頻度を低減すると、各キャッシュラインについての失敗各ビットセルの状態の損失の数が多くなってしまう。ECCロジック122は、1KBキャッシュライン5EC6ED毎に符号を実行するので、各キャッシュラインが5EC6ED符号を格納するためには71ビットを追加する必要があるオーバーヘッドは0.87。キャッシュラインのうちエラーとなるものが1E-03つまり、1000分の1以下になるようにリフレッシュ周期を選択する実施形態では、エラー軽減を行わない基本構成は、30マイクロ秒μsという基本リフレッシュ時間で動作する。エラー訂正符号ロジック122によって、リフレッシュ周期を440マイクロ秒まで大きくすることができる。これは、基本構成のと比較すると、リフレッシュ周期が略15倍になっている。5EC6ED符号をサポートするロジックは、非常に複雑で、訂正されるエラービットの数およびデータビットの数の両方に比例してデコードレイテンシが長くなるという欠点がある。キャッシュメモリに対するアクセス全てについて完全なエンコード/デコードが必要となると、キャッシュアクセスレイテンシが大幅に増加し得る。本発明の一実施形態によると、キャッシュのうちエラーが発生しやすい部分をディセーブルすることができ、動作時にデコードレイテンシが大きくならないようにする。エラー訂正符号ロジック122は、高速エラー訂正符号ECCロジック第1のエラー訂正ロジック104および高レイテンシエラー訂正符号ECCロジック第2のエラー訂正ロジック106を有する。高速ECCロジックユニット104は、eDRAM110のキャッシュラインのうちエラーが1個または0個のキャッシュライン用に構成されている、シンドローム生成ロジックおよびエラー訂正ロジックを含む。高速ECCロジック104はさらに、シンドロームに基づいてキャッシュラインを2つのグループに分類する。つまり、複雑なマルチビットエラー訂正を必要とするキャッシュライン、および、エラーが2個未満、つまり、0個または1個であるキャッシュラインに分類する。マルチビットエラー訂正を必要とするキャッシュラインは、マルチビットエラー訂正を実行する高レイテンシECC処理ロジックユニット106に転送される。高速ECCロジック104で訂正されるキャッシュラインは、L1/L2キャッシュ124を介してCPU102に転送される。一実施形態によると、高レイテンシECC処理ロジック106はソフトウェアを用いてエラー訂正を実行する。別の実施形態によると、高レイテンシマルチビットECC処理ロジック106は、ステートマシンを用いてマルチビットエラー訂正を実行する。高速ECCロジック104および高レイテンシECC処理ロジック106を組み合わせることで、eDRAM110が持つキャッシュラインのうち訂正する必要があるエラー訂正が1つ以下であるキャッシュラインを即座に訂正して、L1/L2キャッシュ124を介してCPU102にレイテンシを低く抑えつつ転送することができる。eDRAM110が持つキャッシュラインのうちエラーが2つ以上あるキャッシュラインについては、CPU102に対する転送のレイテンシが大きくなる。ECCロジック122が有する高速ECCロジック104は、1サイクルECCを実行して、混載DRAM110が持つキャッシュラインの1ビットエラーを訂正する。ECCロジック122が有する高レイテンシ訂正ロジック106は、非パイプライン方式で、高レイテンシのECC処理を実行して、キャッシュラインのマルチビットエラーを訂正する。キャッシュラインを混載DRAM110から読み出す場合、データバッファ114を通過して、タグ/ECCアレイ108から読み出されたキャッシュラインに対応付けられているECCおよびタグと共に、高速エラー訂正ロジック104に渡される。タグおよびECCは、データバッファ116を通過して高速ECCロジック104に渡される。高速ECCロジック104が持つデコーダ不図示は、受信したキャッシュラインに対してシンドロームを生成する。生成されたシンドロームは、キャッシュラインが持つエラーの数が、0個、1個またはそれ以上のいずれであるかに関する情報を含む。キャッシュラインが持つエラーが1ビットの場合またはエラーが無い場合、高速ECCロジック104が持つデコーダは、短時間で1ビットエラーの訂正を完了する。一実施形態によると、短時間とは1サイクル500ピコ秒psであってよい。他の実施形態によると、短時間とは、1サイクルを超えるとしてもよい。この時間は、高レイテンシECC処理ロジック106がマルチビットエラー訂正を完了するのに必要な時間より短い。マルチビットエラーの処理には、高いレイテンシが対応付けられているが、性能が大幅に低下する要因となり得る。このような高いレイテンシが発生しないように、一実施形態では、問題のあるラインをディセーブルする構成またはビット修正bit-fix等のメカニズムを修復ロジック120に組み込むとしてよい。エラーの頻度は、ディセーブル方式において参照される。マルチビットエラーレートが低い場合、マルチビットエラーを含むキャッシュラインをディセーブルするといった方法は、性能劣化を抑制する。しかし、キャッシュラインをディセーブルする方式を採用すると、マルチビットエラーレートが高い場合には、キャッシュ容量の損失が許容出来ないほど高くなってしまう。マルチビットエラーレートが高い場合には、ビット修正等のより複雑なメカニズムを用いてキャッシュラインのディセーブルによる容量損失を最小限に抑えるとしてよい。ある実施形態によると、データバッファ114、116と、高速ECCロジック122との間に修復ロジック120が結合されている。このように修復ロジック120が追加されると、マルチビットデコードによる性能劣化が発生するのは1回のみ、つまり、eDRAM110内の弱いセルに起因するエラーが最初に特定された場合のみである。修復ロジック120によれば、キャッシュラインをECCロジック122に転送する前に、エラーの数を少なくすることができる。このように、ECCをキャッシュラインに適用する前にキャッシュラインに含まれる既知のエラーを修正する修復メカニズムを最初に利用することによって、レイテンシを全体的に低減する。一実施形態によると、修復ロジック120はビット修正ロジックを含む。ビット修正ロジックは、故障しているビット対を特定し、この故障しているビット対を修復するためのパッチをキャッシュライン内に維持する。ある実施形態によると、ビット修正ロジックは、キャッシュセット内の複数のウェイのうち4分の1を用いてエラービットの修正ビットおよび位置を格納するつまり、エラービットの正しい状態値は当該キャッシュセットの他のウェイにある。低電圧モードにおいて、キャッシュメモリ110が8ウェイキャッシュとして実現される実施形態では、故障しているビット対を訂正するための欠陥訂正情報を格納するために8本のウェイのうち2つを確保しておく。ビット修正ロジックによって、欠陥のある対、つまり、キャッシュラインの2ビット群のうち、論理状態を維持できなかったために少なくとも1ビットが欠陥を持つ2ビット群をディセーブルする。ビット修正ロジックは、欠陥のある2ビット対を訂正するために利用され得る2ビットパッチ正しいビット状態を維持する。修復パターンは、キャッシュメモリeDRAM110内の選択されたキャッシュラインに格納されている。低電圧動作時には、修復パターン修復ポインタおよびパッチはキャッシュメモリ110に格納されている。キャッシュラインに対する読出動作または書込動作では、最初に当該キャッシュラインの修復パターンをフェッチする。読み出しの場合には、修復パターンによって、当該読出動作は故障しているビット欠陥ビットからデータを読み出さずに済む。修復パターンのパッチを利用することによって、キャッシュラインは、CPU102、別のキャッシュに転送される前、または、メモリに書き戻される前に再構成される。書き込みの場合には、修復パターンによって、当該書込動作は故障しているビットに書き込まずに済む。新しいパッチを修復パターンに書き込んで、キャッシュに書き込まれた新しいデータを反映する。ビット修正ロジックを利用する修復メカニズム修復ロジック120の実施形態を説明した。他の実施形態では、ビット修正以外の修復メカニズムを用いて、ECCを適用する前に既知のエラーを修正することができる。ある実施形態によると、キャッシュメモリ110は、64Bキャッシュラインを持つ32Kの8ウェイキャッシュである。キャッシュメモリ110に格納されているデータにアクセスする度に、適切な修復パターンを取得するための別のアクセスが必要となる。ポートの数を増やすことなく修復パターンにアクセスするために、ビット修正方式では、キャッシュメモリ110を2つのバンクに編成する。2つの修正ラインを維持して、各バンクに1つずつとし、各修正ラインを用いて他方のバンクのキャッシュラインを修復する。3つのキャッシュラインのための修復パターンが、1つのキャッシュラインに対応する。このため、3つのキャッシュライン毎に1つの修正ライン修復パターンを格納しているキャッシュラインを維持している。修正ラインは、格納している修復パターンを利用する3つのキャッシュラインとは反対のバンクに割り当てられる。この結果、キャッシュポートの数を増やすことなく、キャッシュライン、および、対応する修復パターンを並行にフェッチすることができる。キャッシュヒットの場合、データラインをキャッシュメモリ110の一方のバンクから読み出して、修正ラインはキャッシュメモリ110の他方のバンクから読み出す。データラインは、nビットシフトステージを通過する。尚、nは、欠陥を持つビット対の数を表す。各ステージでは、欠陥ビット対を削除して、修正後のビット対と交換する。修正ラインもエラービットを含む場合があるので、SECDEDECCを適用して、利用する前に、修正ラインに含まれる修復パターンを訂正する。修復パターンは、修正した後に、データラインを訂正するために利用される。1つの欠陥ビット対の修復は、3つの段階から成る。第一に、SECDEDECCで、修復パターン内の欠陥ビットを、あれば、修復する。第二に、欠陥ポインタが欠陥ビット対を特定する。第三に、欠陥ビット対を削除した後、パッチを用いて、失われた正しいビットをキャッシュラインに復活させる。図2は、最近アクセスされたラインを示すテーブルRALT112の実施形態と、図1に示した混載DRAMキャッシュ110およびECCロジック122とを備えるシステム200を示すブロック図で、eDRAMキャッシュ110内のキャッシュラインに対して高速アクセスを実行する様子を示す図である。64バイトを超えるキャッシュラインサイズを用いて、マルチビットECC符号を格納するために必要なメモリストレージを低減する。ある実施形態によると、eDRAMキャッシュ110は、128MBの混載DRAMであるレベル3L3キャッシュであり、キャッシュライン202のサイズは1024バイト1キロバイトKBである。レベル2L2キャッシュ/レベル1L1キャッシュ124は、64バイトBのキャッシュラインを有するL3キャッシュラインのサブブロックと呼ぶ。L3のeDRAMキャッシュ110への書き込みは大半が、低位レベルL1またはL2のキャッシュメモリ124で生成された、または、非キャッシュメモリメインメモリ/外部メモリ不図示からフェッチされた相対的に小型の64バイトのサブブロックの形態で行われる。1KBのキャッシュライン202内の64Bのサブブロック204を修正するためには、CPU102によってECC符号を算出するべく読出-修正-書込処理を実行する。第一に、上書きが行われている64Bのサブブロック204は、1KBのキャッシュライン202全体についてのECC符号208と共に、eDRAMキャッシュ110から読み出される。前のデータ、前のECC符号、および、新しいデータを用いて、1KBのキャッシュライン202全体についての新しいECC208を算出する。新しい64Bのサブブロック204および新しいECC符号208は、L3のeDRAMキャッシュ110に書き戻される。しかし、以下で説明するように、1KBのキャッシュライン202の全体が、新しいECC208を算出するために読み出されているわけではない。L3キャッシュ110からの読み出しは大半が、低位レベルL1およびL2のキャッシュ124に割り当てるためのキャッシュラインを提供するために実行される。キャッシュライン202の任意のサブブロック204を処理するためには、ECC208を、保護対象のデータワード1KBのキャッシュライン202全体で処理する必要がある。1KBのキャッシュライン202に含まれる64Bの各サブブロック204を検査する必要があるので、64Bのサブブロック204への参照は毎回、その周囲の64Bのサブブロック204への参照を伴う。このため、L3の混載DRAMキャッシュ110の読み出しでは、キャッシュライン202が含むサブブロック204全てが共有しているECC208キャッシュライン毎にあるに加えて、1KBのキャッシュライン202に含まれる16個の64ビットサブブロック204の全てにアクセスする。例えば、一の1KBキャッシュライン202が有する16個のサブブロック204のうち8個のみを読み出す場合、16個のサブブロック204全てを8回読み出すので、合計で128回のサブブロック読出を行なうことになる。このような大量の余分なサブブロック読出のために、動的消費電力が大幅に増加し、eDRAMキャッシュ110が実現する有用なキャッシュ帯域幅が減少している。上述したように、eDRAMキャッシュ110は周期的にリフレッシュして各メモリセルの現在の状態を維持する必要があるので、eDRAMエラーの大半は保持エラーが原因である。ある実施形態によると、保持時間は30マイクロ秒μsであり、特定のキャッシュラインを読み出す度に、当該キャッシュラインのリフレッシュが自動的に示唆される。このため、保持エラーは、あるキャッシュラインが読み出された後の30μsの間は当該キャッシュラインでは発生しないはずである。このように考察されるため、余分な読出の数を最小限に抑えることができる。RALT112を用いて、過去30μsの間に参照読出が行なわれたキャッシュラインを追跡する。eDRAMキャッシュ110内の一のキャッシュライン202への最初の読出が行なわれると、キャッシュライン202のサブブロック204は全て読み出されてエラーの有無を検査する。読み出されたキャッシュライン202のアドレスは、RALT112内のRALTエントリ206に格納される。格納されたアドレスは、対応するキャッシュライン202が最近読み出されて検査されたので、続く30μsの間は保持エラーが発生しないはずである旨を示している。読み出されたキャッシュラインのアドレスがRALT112に格納されている間は、当該キャッシュライン202から続いてサブブロックを読み出す場合に、ECC処理を実行せずに済むので、当該キャッシュライン202に対応付けられているECC208およびキャッシュライン202内のほかのサブブロック204を読み出さずに済む。RALT112は、30μsの期間を複数の同じ長さのキャッシュライン読出期間に分割することによって、RALTエントリ206はいずれも30μsを超えて格納されないようにする。各期間においてRALT112で割り当てられるエントリ206は、サブリフレッシュ期間を特定する期間識別子214でマーキングされる。次のサブリフレッシュ期間へと遷移すると、複数のキャッシュライン読出期間のうち前回の同じ期間で割り当てられていたRALTエントリは全て、無効になるRALTのエントリ206に対応付けられている有効フィールドの状態によって示される。RALT112の各エントリ206は、当該エントリが対応付けられているキャッシュラインを特定するラインアドレスフィールド209と、有効フィールド212と、どの期間に当該キャッシュラインが割り当てられたのかを示す期間識別子フィールド214と、キャッシュラインのサブブロック毎に1パリティビットを含むパリティフィールド211とを含む。ある実施形態によると、期間識別子フィールド214は4つの期間P0、P1、P2、P3のうち何れの期間でキャッシュラインが割り当てられたかを示すために2ビットを持ち、パリティフィールド211は、キャッシュラインの64Bのサブブロックにつき1つとなるよう16ビットを持つ。RALT112は、ダイレクトマップ方式であるが、期間識別子フィールド214に対する連想メモリCAM無効化をサポートして、次の期間へと遷移する際にRALT112の複数のエントリ206のバルク無効化を可能とする。あるサブブロック204の初回の読出において、1KBのキャッシュライン202の各サブブロックと共にECC208全体も読み出して、一の64Bのサブブロック204についてのECC処理を可能とする。当該キャッシュライン202と対応付けられているRALT112のエントリ206は、参照されたキャッシュライン202のラインアドレス、期間識別子、および、キャッシュライン202のサブブロック204毎に1個設けられているパリティビットによって更新される。キャッシュライン202に対する最初のヒットの後、リフレッシュ期間内に同じキャッシュライン202に対してアクセスがその後行なわれても、ECC処理は必要ない。キャッシュラインに対する最初の読出が行なわれると、当該ラインのサブブロック全てを読み出してエラーの有無について検査する。その後、当該ラインのアドレスをRALTに格納して、当該ラインが最近検査されて、続く30μsの間は保持エラーが発生しない旨を示す。RALTに当該ラインのアドレスが格納されている限り、当該ラインから読み出されたサブブロックはいずれも、ECC処理を省略することができるので、ECC符号および当該ラインの他のサブブロックの読出を行なわずに済む。RALT112は、正しく機能させるべく、RALTエントリはいずれも30μsを超えて格納されないようにする。この条件を確実に満たすべく、カウンタ216を用いて30μsの期間の経過を測定する。30μsの期間は、4つの同じ長さのサブ期間P0、P1、P2、P3に分割される。各期間においてRALT112で割り当てられたエントリは、2ビットの識別子でマーキングされて、カウンタの現在値を確認することによって決定され得る割り当てサブ期間を特定する。例えば、2GHzプロセッサ100において30μsが経過したか否かは、各サイクルで60000までカウントをインクリメントさせるカウンタ216を用いて測定することができる。例えば、カウンタ値が0-15000までの場合はサブ期間P0に対応し、15001-30000までの場合はサブ期間P1に対応し、30001-45000までの場合はサブ期間P2に対応し、45001-60000までの場合はサブ期間P3に対応する。カウンタ216が60000に到達すると、0にリセットされて、P3からP0へと遷移する。サブ期間が遷移する度に、当該サブ期間の前回の同じサブ期間で割り当てられたRALTエントリのうち一部または全てが無効化され得る。例えば、サブ期間P0からサブ期間P1へと遷移すると、前回のサブ期間P1で割り当てられたRALTエントリは全て無効化される。図3は、図2のシステムを示すブロック図であって、リフレッシュ期間内に続いてキャッシュラインの読み出しを行う様子を説明するための図である。大半の場合には、要求された64Bのサブブロック204のみが読み出される。64Bのサブブロック204のパリティを算出して、RALT112に格納されているキャッシュライン202の当該64Bのサブブロック204のパリティ211と比較する。一致すれば、この64Bのサブブロック204は有効で、この64Bのサブブロック204は要求元のキャッシュ124またはプロセッサ102へと転送されると推定される。パリティが一致しない場合は、RALTミスとして扱われ、1KBのキャッシュライン202の全部を読み出す。RALT112は、キャッシュ読出の度に1KBのキャッシュライン202の全てを読み出さないで済むように、最近アクセスしたキャッシュライン202を追跡するために用いられるので、動的電力が最小限に抑えられる。図4Aは、図1に示した高速ECCロジック104に含まれているECCエンコーダ400の実施形態を示すブロック図である。BCH符号は、非常に密度が高く広範囲に広がっているエラーを訂正可能な多くの同種のマルチビットエラー訂正符号をまとめた呼び方である。一般的に、各BCH符号は、生成多項式を持つ有限ガロア域GF2mについて定義されている線形ブロック符号である。尚、2mは、最大コードワードビット数を表す。ECCエンコーダエンコードロジック400は、kビットの入力データワードdを取得して、所定のエンコーダマトリクスGを用いて、対応するコードワードuu=d×Gを生成する。BCHはシステマティックコードなので、元のkビットデータはコードワードuxで保持され、その後にr個の検査ビットが続く。図4Bは、図1に示した高速ECCロジックに含まれているECCデコーダデコードロジック402の実施形態を示すブロック図である。デコードロジック402は、受信したコードワードuxに含まれているエラーがあれば検出および訂正して、元のデータ値を修復する。デコードロジック402は、シンドローム生成ロジック404、エラー分類ロジック406、および、エラー訂正ロジック408を有する。シンドローム生成ロジック404は最初に、vエラーeを含むコードワード、v=ueに所定のHマトリクスのトランスポーズを乗算して、シンドロームSを算出するS=v×HT。GマトリクスおよびHマトリクスは、G×HT=0となるように構築される。Hマトリクスの一般的な構成を以下に示す。有限ガロア域GF2mにおいて、それぞれの元αiは、次数がm未満のαの多項式として表すことができるか、または、単に当該多項式のm個のバイナリ係数を持つベクトルとして表すことができる。このため、Hマトリクスは、行数がtm1であるバイナリマトリクスに拡張できる。尚、tは符号が訂正可能な最大エラー数である。S=v×HTであるので、Sもまたtm1個のビットを持ち、これは複数のコンポーネント[パリティ,S1,S3,,S2t-1]に分割可能である。エラー分類ロジックは、シンドロームSを用いてコードワードがエラーを含むか否かを検出する。以下の式が成り立つ。このため、エラーがゼロであるS=0の場合は、以下の式が成り立つ。コードワードにエラーが無い場合には、数3に示すようにシンドローム値はゼロになる。これは、全てのシンドロームビットに対して論理OR演算を実行することによって検出することができる。このためには、ceillog2tm個の2入力ゲート遅延が必要である。エラー訂正ロジックは、上記の式が満たされない場合には、シンドローム値を用いて壊れたビットの位置を正確に指摘する。eにおけるエラーの位置を[j1,j2,,jt]と表すと、各シンドロームコンポーネントSiは以下のように表すことができる。訂正ロジックは、以下の3つのステップを実行する。ステップ1:エラー位置多項式σxの係数を決定する。尚、σxは、σxの根がエラー要素αj1,αj2,,αjtの逆数で表されるものと定義される。ステップ1のエラー訂正は、t段階の反復アルゴリズムに基づいて行われ、それぞれの反復では、2m個の演算が必要となるガロア域反転が行われる。ステップ2:エラー位置であるσxの根を求める。多項式σxが決まると、ガロア域の元αjをそれぞれ、当該多項式に代入する。当該多項式がゼロとなる元が、根である。ステップ2の実行は、1回路の場合にはnサイクルで行われ、n個の並列回路の場合には1サイクルで行うことができる。いずれの場合でも、基礎回路はOtm2である。ステップ3:データビットの正しい値を算出する。単に、エラー位置でのビットを反転させることで行う。1ビットエラーの場合には、シンドロームは、このエラービットに対応するHマトリクスの列と全く同じである。このため、1ビットエラーは、Hマトリクスの各列をシンドロームと比較することによって検出することができる。このような訂正処理は、一般的なtビットの訂正t>1とするよりもはるかに高速に行われる。これは、エラー訂正ロジックのステップ1、および、ステップ2の大半の実行が必要ないためである。シンドローム要素は全てが、Hマトリクスの全列と一致する必要はない。S1をH1の各列と比較して数1で定義している、以下の式を満足していることを確認するだけでよい。レイテンシを最小限に抑えるために、S1とH1との比較、および、数7での比較の全ては、並列に処理され得る。図5は、本発明の原理に係る、図1に示したシステム100を利用する方法の実施形態を説明するためのフローチャートである。ブロック500において、キャッシュラインアドレスaddrが最近アクセスされたラインを示すテーブル112のRALTエントリ206と対応付けられている場合、当該キャッシュラインは最近アクセスされており、エラー検査が必要ないので、当該キャッシュラインアドレスはL1/L2キャッシュ124を介してCPU102に転送される。対応付けられていない場合、ブロック502に進む。ブロック502において、キャッシュラインアドレスaddrは、図2を参照しつつ上述したように、RALTテーブル112のRALTエントリ206のラインアドレスフィールド209に格納される。キャッシュメモリ110内の当該キャッシュラインに格納されているデータおよび当該アドレスに対応するTag/ECCアレイ118に格納されているTag/ECCを読み出して、データバッファ114、116を介して転送する。ブロック504に進む。ブロック504では、修復ロジック120を含む実施形態において、ブロック512に進んで、キャッシュラインの修復を行う。修復ロジックを含まない実施形態では、ブロック506に進む。ブロック506において、高速ECCロジック104において高速ECCを実行して、キャッシュラインがエラーを含むか否かを判断する。ブロック508に進む。ブロック508では、訂正対象であるキャッシュラインが含むエラーが2個以上であれば、ブロック514に進む。エラーが1個以下であれば、当該エラーは高速ECCロジック104で訂正してブロック510に進む。ブロック510では、訂正後のキャッシュラインデータを、L1/L2キャッシュ124を介してCPU102に転送する。ブロック512において、キャッシュメモリ110から読み出され、データバッファ114、116を介して転送されたキャッシュラインデータを、上述したように、修復する。ブロック506に進む。ブロック514において、高度ECCロジックでキャッシュラインが含むマルチビットエラーを訂正して、ブロック510に進む。図6は、図1に示したプロセッサ100の実施形態を備えるシステム600を示すブロック図である。システム600は、混載キャッシュメモリを有するプロセッサ100と、メモリコントローラハブMCH602と、入出力I/OコントローラハブICH604とを備える。MCH602は、プロセッサ601と外部メモリメインメモリ610との間の通信を制御するメモリコントローラ606を有する。プロセッサ100およびMCH602は、システムバス616を介して通信を行う。CPU102は、複数のプロセッサのうち任意の1つであってよく、例えば、シングルコアのIntel登録商標社のPentium登録商標IV登録商標プロセッサ、シングルコアのIntel登録商標社のCeleron登録商標プロセッサ、Intel登録商標社のXScale登録商標プロセッサ、または、Intel登録商標社のPentium登録商標D、Intel登録商標社のXeon登録商標プロセッサあるいはIntel登録商標社のCore登録商標デュオDuoプロセッサ等のマルチコアプロセッサ、さらに、その他の任意の種類のプロセッサのうちの1つであってよい。メモリ610は、ダイナミックランダムアクセスメモリDRAM、スタティックランダムアクセスメモリSRAM、シンクロナイズドダイナミックランダムアクセスメモリSDRAM、ダブルデータレート2DDR2RAMまたはランバスダイナミックランダムアクセスメモリRDRAMまたは任意のその他の種類のメモリであってよい。ICH604は、ダイレクトメディアインターフェースDMI等の高速チップツーチップインターコネクト614を用いてMCH602に結合されているとしてよい。DMIは、2つの一方向レーンでの2ギガビット/秒という同時転送レートをサポートしている。ICH604は、ICH604に結合されている少なくとも1つのストレージデバイス612との間での通信を制御するストレージ入出力I/Oコントローラを有するとしてよい。ストレージデバイスは、例えば、ディスクドライブ、デジタルビデオディスクDVDドライブ、コンパクトディスクCDドライブ、リダンダントアレイオブインディペンデントディスクスRAID、テープドライブまたはその他のストレージデバイスであってよい。ICH604は、シリアルアタッチドスモールコンピュータシステムインターフェースSASまたはシリアルアドバンスドテクノロジーアタッチメントSATA等のシリアルストレージプロトコルを用いたストレージプロトコルインターコネクト618を介してストレージデバイス612と通信を行うとしてよい。本発明の実施形態に係る方法がコンピュータ利用可能媒体を含むコンピュータプログラム製品として具現化され得ることは当業者には明らかである。例えば、このようなコンピュータ利用可能媒体は、コンピュータ読出可能プログラムコードが格納されている、コンパクトディスクリードオンリーメモリCD-ROMディスクあるいは従来のROMデバイス等のリードオンリーメモリデバイス、または、コンピュータディスケットから構成されるとしてよい。本発明の実施形態を実施形態に基づいて具体的に図示および説明してきたが、当業者におかれては、特許請求の範囲に記載する請求項が定める本発明の実施形態の範囲から逸脱することなく、形状および詳細な内容についてはさまざまな点で変更し得ると理解されたい。"