(57)【要約】【課題】マルチビット縮退故障エラーの修復ができ、メモリ・デバイスの寿命に影響を与えることなくエラー訂正ハードウェアのオーバーヘッドが低減される適応マルチビット・エラー訂正法を提供する。【解決手段】エラー訂正ロジック・ハードウェアはメモリ・ブロックから切り離される。異なるメモリ・ブロック中で異なった数のエラーが発生する確率に基づいて、エラー訂正ロジック・エントリが異なった数のエラー訂正の能力をサポートするように、エラー訂正ロジック・ブロックがパーティションされる。欠陥メモリ・ブロックは、適切なエラー訂正ロジック・エントリにマップされる。マッピングは、実施形態に応じて、一対一または多体一とすることができる。エラー訂正ロジック・エントリの適応パーティショニングは、ロジック・ブロック中のエラーの予測された統計的分布に整合するように設定することが可能で、全体的なエラー訂正ロジック・オーバーヘッドを削減し、十分なエラー訂正を提供し、もしくはメモリ・デバイスの寿命を延長し、またはこれらの組み合わせを達成することができる。【選択図】図１
2014518423.tif 000002
【特許請求の範囲】
【請求項１】
メモリ・デバイス中のエラーを訂正する方法であって、
複数のメモリ・ブロック、およびエラー訂正ロジック（ＥＣＬ）エントリのセットを包含するエラー訂正ロジック（ＥＣＬ）エントリ・ブロックを少なくとも含む、メモリ・デバイスを提供するステップであって、前記ＥＣＬエントリのセットはＥＣＬエントリの複数のサブセットを含み、ＥＣＬエントリの各サブセットは、前記複数のメモリ・ブロックの一つ以上において、メモリ・ブロック当たり異なる数のビットに対しエラー訂正を提供するように設定され、前記複数のメモリ・ブロックの各々が、前記ＥＣＬブロック内のＥＣＬエントリへのポインタを格納するように設定される、前記提供するステップと、
前記複数のメモリ・ブロックの中のエラー含有メモリ・ブロック中の書き込みエラーを検出するステップと、
前記ＥＣＬエントリ・ブロック中の利用可能なＥＣＬエントリを特定するステップと、
前記利用可能なＥＣＬエントリのアドレスを前記メモリ・ブロックのポインタに格納し、前記エラー含有メモリ・ブロック中の全ての書き込みエラーを訂正するための情報を前記利用可能なＥＣＬエントリ中に格納するステップと、
を含む方法。
【請求項２】
前記利用可能なＥＣＬエントリが、前記エラー含有メモリ・ブロック中の書き込みエラーの合計数と同じ数のビット、またはそれより大きな数のビットに対しエラー訂正を提供するように設定された、ＥＣＬエントリの少なくとも一つのサブセットの中で特定される、請求項１に記載の方法。
【請求項３】
ＥＣＬエントリの合計ビット・サイズが、前記ＥＣＬエントリのセット内のＥＣＬエントリの各サブセットに対して異なる、請求項１に記載の方法。
【請求項４】
前記合計ビット・サイズは、ＥＣＬエントリが訂正するように設定されたビットの合計数の狭義単調増加関数である、請求項３に記載の方法。
【請求項５】
前記ＥＣＬエントリの複数のサブセットは、ＥＣＬエントリの第一サブセットおよび少なくとも一つのＥＣＬエントリを包含する最後のサブセットを含み、前記第一サブセット中の各ＥＣＬエントリは、メモリ・ブロック中の２つのビットに対しエラー訂正を提供するように設定され、前記最後のサブセット中の各ＥＣＬエントリは、メモリ・ブロック中のＮ個のビットに対しエラー訂正を提供するように設定されており、Ｎは２より大きい整数である、請求項１に記載の方法。
【請求項６】
Ｎは３より大きく、前記ＥＣＬエントリの複数のサブセットは、前記第一サブセットと、前記最後のサブセットと、１より大きく（Ｎ−１）より小さい少なくとも一つの数ｉのセットに対する、ＥＣＬエントリの少なくとも一つの第ｉサブセットとを含み、前記第ｉサブセット中の各ＥＣＬエントリは、２より大きくＮより小さい合計数のビットに対しエラー訂正を提供するように設定されている、請求項５に記載の方法。
【請求項７】
ＥＣＬエントリの各サブセット中のＥＣＬエントリの合計数は、各サブセット中の一つのＥＣＬエントリが訂正するように設定されたビットの合計数の単調減少関数である、請求項１に記載の方法。
【請求項８】
前記ＥＣＬエントリ・ブロックは、前記ＥＣＬエントリの複数のサブセットの一つを各々が含む複数のサブブロックにパーティションされ、一つのＥＣＬエントリ中の合計ビットの数は、各サブブロック内では同じであり、どの異なるサブブロック中のＥＣＬエントリの合計ビットの数とも異なっている、請求項１に記載の方法。
【請求項９】
前記ＥＣＬエントリ・ブロックは、複数の、少なくとも一つの占有ビットを含み、前記複数の、少なくとも一つの占有ビットの各々は、メモリ・ブロック中の書き込みエラーを訂正するための情報を格納するための対応するＥＣＬエントリの利用可能性を示すように設定される、請求項１に記載の方法。
【請求項１０】
前記複数のメモリ・ブロックの各々は、データを格納するための第一ビット群、および前記ＥＣＬブロック内のＥＣＬエントリへのポインタを格納するための第二ビット群を含み、前記複数の、少なくとも一つの占有ビットの各々は、前記ＥＣＬエントリそれぞれが、前記対応するメモリ・ブロック内の第一ビット群中の情報を訂正するためのデータを現在格納しているかどうかを示す単一のビットである、請求項９に記載の方法。
【請求項１１】
前記複数の、少なくとも一つの占有ビットの各々は、前記複数のメモリ・ブロックのいくつが、前記ＥＣＬエントリそれぞれに格納された情報を用いることによって訂正が可能な書き込みエラーを含むかを示す複数のビットである、請求項９に記載の方法。
【請求項１２】
前記複数のメモリ・ブロックの各々が、データを格納するための第一ビット群および前記ＥＣＬブロック内のＥＣＬエントリへのポインタを格納するための第二ビット群を含み、前記情報は、前記第一ビット群中の少なくとも一つの個別エラー・ビットをポイントする少なくとも一つのビット・ポインタを含む、請求項９に記載の方法。
【請求項１３】
前記情報が、縮退故障エラー修復（ＳＡＦＥＲ）法で用いられるパーティション・カウンタおよびパーティション・フィールドを含む、請求項９に記載の方法。
【請求項１４】
前記ＥＣＬエントリ・ブロック内の、ＥＣＬエントリの各サブセットの位置に関する情報を含むエラー訂正エントリ（ＥＣＬ）マッパをさらに含む、請求項１に記載の方法。
【請求項１５】
前記ＥＣＬマッパが、ＥＣＬエントリの複数のサブセット中の第一アドレスのセットおよび前記ＥＣＬエントリの複数のサブセット中の最後のアドレスのセットから選択されたアドレスのセットを含む、請求項１４に記載の方法。
【請求項１６】
前記利用可能なＥＣＬエントリが、ＥＣＬエントリの少なくとも一つのサブセットの中で、最少ビットのエラー訂正を提供するように設定された、ＥＣＬエントリのサブセット内から選択される、請求項１に記載の方法。
【請求項１７】
複数のメモリ・ブロックであって、前記複数のメモリ・ブロックの各々は、データを格納するための第一ビット群およびＥＣＬブロック内のＥＣＬエントリへのポインタを格納するための第二ビット群を含む、前記複数のメモリと、
エラー訂正ロジック（ＥＣＬ）エントリのセットを含む、エラー訂正ロジック（ＥＣＬ）エントリ・ブロックであって、前記ＥＣＬエントリのセットはＥＣＬエントリの複数のサブセットを含み、ＥＣＬエントリの各サブセットが、前記複数のメモリ・ブロックの一つ以上において、メモリ・ブロック当たり異なる数のビットに対しエラー訂正を提供するように設定される、エラー訂正ロジック（ＥＣＬ）エントリ・ブロックと、
を含むメモリ・デバイス。
【請求項１８】
ＥＣＬエントリの合計ビット・サイズが、前記ＥＣＬエントリのセット内のＥＣＬエントリの各サブセットに対して異なる、請求項１７に記載のメモリ・デバイス。
【請求項１９】
前記合計ビット・サイズは、ＥＣＬエントリが訂正するように設定されたビットの合計数の狭義単調増加関数である、請求項１８に記載のメモリ・デバイス。
【請求項２０】
前記ＥＣＬエントリの複数のサブセットは、ＥＣＬエントリの第一サブセットおよび少なくとも一つのＥＣＬエントリを包含する最後のサブセットを含み、前記第一サブセット中の各ＥＣＬエントリは、メモリ・ブロック中の２つのビットに対しエラー訂正を提供するように設定され、前記最後のサブセット中の各ＥＣＬエントリは、メモリ・ブロック中のＮ個のビットに対しエラー訂正を提供するように設定されており、Ｎは２より大きい、請求項１７に記載のメモリ・デバイス。
【請求項２１】
Ｎは３より大きく、前記ＥＣＬエントリの複数のサブセットは、前記第一サブセットと、前記最後のサブセットと、１より大きく（Ｎ−１）より小さい少なくとも一つの数ｉのセットに対する、ＥＣＬエントリの少なくとも一つの第ｉサブセットとを含み、前記第ｉサブセット中の各ＥＣＬエントリは、２より大きくＮより小さい合計数のビットに対しエラー訂正を提供するように設定されている、請求項２０に記載のメモリ・デバイス。
【請求項２２】
ＥＣＬエントリの各サブセット中のＥＣＬエントリの合計数は、各サブセット中の一つのＥＣＬエントリが訂正するように設定されたビットの合計数の単調減少関数である、請求項１７に記載のメモリ・デバイス。
【請求項２３】
前記ＥＣＬエントリ・ブロックは、前記ＥＣＬエントリの複数のサブセットの一つを各々が含む複数のサブブロックにパーティションされ、一つのＥＣＬエントリ中の合計ビットの数は、各サブブロック内では同じであり、どの異なるサブブロック中のＥＣＬエントリの合計ビットの数とも異なっている、請求項１７に記載のメモリ・デバイス。
【請求項２４】
前記複数のメモリ・ブロックの中のエラー含有メモリ・ブロック中の書き込みエラーを検出し、
利用可能なＥＣＬエントリを、前記エラー含有メモリ・ブロック中の書き込みエラーの合計数と同じ数のビット、またはそれより大きな数のビットに対しエラー訂正を提供するように設定された、ＥＣＬエントリの少なくとも一つのサブセットの中で特定する、
ように設定されたＥＣＬコントローラをさらに含む、請求項１７に記載のメモリ・デバイス。
【請求項２５】
前記ＥＣＬコントローラは、前記利用可能なＥＣＬエントリのアドレスを前記メモリ・ブロックのポインタに格納し、前記エラー含有メモリ・ブロック中の全ての書き込みエラーを訂正するための情報を、前記利用可能なＥＣＬエントリ中に格納するようにさらに設定される、請求項２４に記載のメモリ・デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般にメモリ中のエラー訂正に関し、具体的には、適応マルチビット・エラー訂正の能力を有するメモリ・デバイスおよび同メモリ・デバイスの作動の方法に関する。
【背景技術】
【０００２】
従来のダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）デバイスのスケーリング限界を克服するために、新しい種類の先端メモリ・デバイスが研究されてきた。これらのメモリ・デバイスは、可変抵抗素子の抵抗レベルによって状態が定まる抵抗メモリ・デバイスである。かかる抵抗メモリ・デバイスの例には、相変化メモリ（ＰＣＭ：ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ）、メモリスタ・デバイス、磁気ランダム・アクセス・メモリ（ＭＲＡＭ：ｍａｇｎｅｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）デバイス、およびスピン・トルク・トランスファ・ランダム・アクセス・メモリ（ＳＴＴ−ＲＡＭ：ｓｐｉｎ  ｔｏｒｑｕｅ  ｔｒａｎｓｆｅｒ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）デバイスが含まれる。抵抗メモリ・デバイスは、従来のＤＲＡＭデバイスよりも増大した拡張性および高い密度を提供することができる。
【０００３】
しかしながら、ほとんどの抵抗メモリ・デバイスは、書き込み耐久性が限られる傾向がある。耐久性（エンデュランス）とは、メモリ・セルが故障なく耐えられる、書き込みの最大回数である。例えば、ＰＣＭデバイスは、通常、約１０８回までの書き込みオペレーションしか提供しない。典型的なＰＣＭデバイスのオペレーションの過程において、書き込みは、セルの状態の変化によるカルコゲニド合金の膨張と収縮との繰り返しをもたらし、材料が加熱素子から物理的に分離される確率が高くなり、セルが恒久的にある値に停留することになる。このため、抵抗メモリ・デバイスにおいては、セルで遂行される一切の書き込みオペレーションと関係なくメモリ・セルの状態が単一の状態に停留されてしまうハード・エラーである、縮退故障（ｓｔｕｃｋ−ａｔ  ｆａｕｌｔ）エラーが、一般に過渡故障よりも高頻度である。
【０００４】
抵抗メモリ・デバイスにおける耐久性の差異は、隣接するセルの間で空間的な相関関係がない傾向がある。耐久性の差異は、技術上のスケーリングとともに、すなわち、メモリ・デバイスの寸法の低減とともに増大する。エラー訂正のメカニズムが無ければ、最も劣弱なセルがメモリ・デバイスの寿命を決定づける。最初のセル故障を超えてメモリ・デバイスの寿命を延長するためには、エラー訂正のメカニズムが必要である。摩耗に関連する故障は、時間とともに次第に増加するので、使われている単一ビットのエラー修復スキームでは不十分である。したがって、メモリ・デバイスの寿命をさらに延ばすには、マルチビットのエラー修復が必要となる。
【０００５】
ハミング符号化は、当該技術分野で知られるマルチビット・エラー訂正方法の一つである。元来の（７２，６４）ハミング符号化は、過渡故障を修復するために考案された。単一誤り訂正・二重誤り検出（ＳＥＣＤＥＤ：Ｓｉｎｇｌｅ  Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｄｏｕｂｌｅ  Ｅｒｒｏｒ  Ｄｅｔｅｃｔｉｏｎ）に対し、ハミング符号化は、一つだけのエラーを訂正可能にするために、エラー訂正コード（ＥＣＣ：ｅｒｒｏｒ  ｃｏｒｒｅｃｔｉｏｎ  ｃｏｄｅ）ビットのためのオーバーヘッドとして、各メモリ・ブロックのサイズの１２．５％を必要とする。
【０００６】
非特許文献１によって、エラー訂正ポインタ（ＥＣＰ：Ｅｒｒｏｒ−Ｃｏｒｒｅｃｔｉｎｇ  Ｐｏｉｎｔｅｒ）が発表された。このＥＣＰ法は、各データ・ブロックに対し複数の故障ポインタを用いる。各故障ポインタは所与のデータ・ブロック中の破損ビットのアドレス、および正しい値を格納する追加のビットを有する。６１ビットのオーバーヘッド（１１．９％）を使って６つの故障を修復するＥＣＰスキームが、当該技術分野で知られている。
【０００７】
非特許文献２によって、縮退故障エラー修復（ＳＡＦＥＲ：Ｓｔｕｃｋ−Ａｔ  Ｆａｕｌｔ  Ｅｒｒｏｒ  Ｒｅｃｏｖｅｒｙ）が発表された。ＳＡＦＥＲは、縮退故障の可読性および永続性を用いて、動的パーティションおよびデータ反転により増大する縮退故障に対処する。ＳＡＦＥＲは、５１２ビットのメモリ・ブロックに対し、メモリ・ブロックのサイズの１０．７％にあたる５５ビットのオーバーヘッドを使って、最少６つの故障から最多３２の故障までの修復を提供できる。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Ｓｃｈｅｃｈｔｅｒら著、「Ｕｓｅ  ＥＣＰ，  ｎｏｔ  ＥＣＣ，  ｆｏｒ  ｈａｒｄ  ｆａｉｌｕｒｅｓ  ｉｎ  ｒｅｓｉｓｔｉｖｅ  ｍｅｍｏｒｉｅｓ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ３７ｔｈ  ａｎｎｕａｌ  ｉｎｔｅｒｎａｔｉｏｎａｌ  ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  ａｒｃｈｉｔｅｃｔｕｒｅ，２０１０。
【非特許文献２】Ｎａｋ  Ｈｅｅ  Ｓｅｏｎｇら著、「ＳＡＦＥＲ：  Ｓｔｕｃｋ−Ａｔ−Ｆａｕｌｔ  Ｅｒｒｏｒ  Ｒｅｃｏｖｅｒｙ  ｆｏｒ  Ｍｅｍｏｒｉｅｓ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ，２０１０。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
抵抗メモリ・デバイスにおける耐久性の差異は、隣接するセルの間で空間的な相関関係がない傾向がある。耐久性の差異は、技術上のスケーリングとともに、すなわち、メモリ・デバイスの寸法の低減とともに増大する。エラー訂正のメカニズムが無ければ、最も劣弱なセルがメモリ・デバイスの寿命を決定づける。最初のセル故障を超えてメモリ・デバイスの寿命を延長するためには、エラー訂正のメカニズムが必要である。摩耗に関連する故障は、時間とともに次第に増加するので、使われている単一ビットのエラー修復スキームでは不十分である。したがって、メモリ・デバイスの寿命をさらに延ばすには、マルチビットのエラー修復が必要となる。
【課題を解決するための手段】
【００１０】
適応マルチビット・エラー訂正法によってマルチビット縮退故障エラー修復を可能にでき、メモリ・デバイスの寿命に影響を与えずにエラー訂正ハードウェアのオーバーヘッドが低減される。エラー訂正ロジック・ハードウェアは、メモリ・ブロックから切り離される。異なるメモリ・ブロック中で異なった数のエラーが発生する確率に基づいて、エラー訂正ロジック・エントリが異なった数のエラー訂正の能力をサポートするように、エラー訂正ロジック・ブロックがパーティションされる。各エラー訂正ロジック・エントリは、メモリ・ブロック中のエラーを訂正するように設定される。エラー・カウントを有する、メモリ・ブロックを修復する能力のあるエラー訂正ロジック・エントリの数は、メモリ・ブロック群中のエラー分布の統計的予測によって決められる。これによって、少数のエラーを有するメモリ・ブロック群の訂正にはより多数のエラー訂正ロジック・エントリが割り当てられ、多数のエラーを有するメモリ・ブロック群の訂正にはより少数のエラー訂正ロジック・エントリが割り当てられる。欠陥メモリ・ブロックは、適切なエラー訂正ロジック・エントリにマップされる。このマッピングは、実施形態に応じて、一対一または多体一とすることができる。エラー訂正ロジック・エントリの適応パーティショニングは、ロジック・ブロック中のエラーの予測された統計的分布に整合するように設定することが可能で、全体的なエラー訂正ロジック・オーバーヘッドを低減し、十分なエラー訂正を提供し、もしくはメモリ・デバイスの寿命を延長し、またはこれらの組み合わせを達成することができる。
【００１１】
本開示のある態様によれば、メモリ・デバイス中のエラーを訂正する方法は、複数のメモリ・ブロックおよびエラー訂正ロジック（ＥＣＬ）エントリのセットを包含するエラー訂正ロジック（ＥＣＬ：ｅｒｒｏｒ  ｃｏｒｒｅｃｔｉｏｎ  ｌｏｇｉｃ）エントリ・ブロックを少なくとも含む、メモリ・デバイスを提供するステップであって、ＥＣＬエントリのセットはＥＣＬエントリの複数のサブセットを含み、ＥＣＬエントリの各サブセットは、複数のメモリ・ブロックの一つ以上において、メモリ・ブロック当たり異なる数のビットに対しエラー訂正を提供するように設定され、複数のメモリ・ブロックの各々が、データを格納するための第一ビット群およびＥＣＬブロック内のＥＣＬエントリへのポインタを格納するための第二ビット群を含む、該提供するステップと、複数のメモリ・ブロックの中のエラー含有メモリ・ブロック中の書き込みエラーを検出するステップと、前記ＥＣＬエントリ・ブロック中の利用可能なＥＣＬエントリを特定するステップと、利用可能なＥＣＬエントリのアドレスをメモリ・ブロックのポインタに格納し、エラー含有メモリ・ブロック中の全ての書き込みエラーを訂正するための情報を、利用可能なＥＣＬエントリ中に格納するステップと、を含む。
【００１２】
本開示の別の態様によれば、メモリ・デバイスは、複数のメモリ・ブロックであって、これら複数のメモリ・ブロックの各々は、データを格納するための第一ビット群およびＥＣＬブロック内のＥＣＬエントリへのポインタを格納するための第二ビット群を含む、該複数のメモリと、エラー訂正ロジック（ＥＣＬ）エントリのセットを含む、エラー訂正ロジック（ＥＣＬ）エントリ・ブロックであって、ＥＣＬエントリのセットはＥＣＬエントリの複数のサブセットを含み、ＥＣＬエントリの各サブセットは、複数のメモリ・ブロックの一つ以上において、メモリ当たり異なる数のビットに対しエラー訂正を提供するように設定される、エラー訂正ロジック（ＥＣＬ）エントリ・ブロックと、を含む。
【図面の簡単な説明】
【００１３】
【図１】メモリ・ブロック、エラー訂正ロジック（ＥＣＬ）エントリ・ブロック、エラー訂正ロジック（ＥＣＬ）マッパを含む例示的なメモリ・デバイスの概略図である。
【図２】本開示の第一実施形態による、メモリ・ブロックおよびＥＣＬエントリ・ブロックの図である。
【図３】本開示の第二実施形態による、メモリ・ブロックおよびＥＣＬエントリ・ブロックの図である。
【図４】本開示の実施形態によるＥＣＬマッパの図である。
【図５】図２に示されたＥＣＬメモリ・ブロックに対する例示的なＥＣＬマッパの図である。
【図６】本開示のある実施形態による、第一の適応マルチビット・エラー訂正方法を表す第一フロー・チャートである。
【図７】本開示の別の実施形態による、第二の適応マルチビット・エラー訂正方法を表す第二フロー・チャートである。
【発明を実施するための形態】
【００１４】
前述のように、本開示は、適応マルチビット・エラー訂正の能力を有するメモリ・デバイスおよび同メモリ・デバイスの作動の方法に関し、添付の図面を用いて以下に詳細に説明する。本明細書に記述され図面に示される、同様なおよび対応するエレメントは同じ参照番号によって参照される。これらの図面は必ずしも一定の縮尺では描かれていない。
【００１５】
前述のように、上記で述べた既存のマルチビット・エラー修復スキームは、マルチビット・エラーを訂正するためにかなりのオーバーヘッドを要する。本開示につながる研究の過程で、複数のメモリ・ブロックを含むメモリ・デバイス中のブロックの中のエラー・ビット・カウントの分布をシミュレートするためにモンテカルロ・シミュレーションが実施された。このシミュレーションのため、１０８書き込みサイクルの平均値、１０７書き込みサイクルの標準偏差を有するセル寿命の正規分布が想定された。２５６ビットのメモリを有する各メモリ・ブロックの寿命の測定を可能にするために、シミュレーションの過程では完全な摩耗レベリングが仮定された。結果は、５０，０００回の反復にわたる平均により得られた。ほとんど全てのブロックが、その寿命の終了点で、エラーがないかあるいは一つだけのエラーであった。１７エラーを超えるブロックは取るに足らない数であった。本シミュレーションの結果は、６つ以上のエラー訂正のために専用の５％のエントリを有するエラー訂正ロジックであれば、同じ寿命を維持するのに十分であろうことを示唆した。
【００１６】
本開示のある実施形態は、複数のメモリ・ブロックを含むメモリ・デバイスにおいて、エラー訂正ロジック（ＥＣＬ）ブロックを個別のメモリ・ブロックから切り離すこと、および書き込みエラーを包含する各メモリ・ブロックと、スタンドアロンのエラー訂正ロジック（ＥＣＬ）エントリ・ブロック中の個別のエラー訂正ロジック（ＥＣＬ）エントリとの間での動的マッピングを可能にすることによって、さまざまなメモリ・ブロックにわたる書き込みエラー発生の不均一な頻度を利用し、より優れたエラー訂正もしくはエラー訂正のためのより少ないオーバーヘッドまたはその両方を提供する。本明細書および本出願のその他部分で述べる書き込みエラーとは、恒久的縮退故障エラーと同意である。書き込みオペレーションがメモリ位置に所望の値を書き込み損なったときだけ、かかる縮退故障エラーと判定される。
【００１７】
図１を参照すると、本開示のある実施形態による例示的なメモリ・デバイス１００は、複数のメモリ・ブロック１１０と、エラー訂正ロジック（ＥＣＬ）エントリ・ブロック１２０と、エラー訂正ロジック（ＥＣＬ）マッパ１３０と、エラー訂正ロジック（ＥＣＬ）コントローラ１４０（ＥＣＬコントローラは、従来のメモリ・コントローラの一部または拡張部である）とを含む。複数のメモリ・ブロック１１０には、各々が一定の数のデータ・ビットを有する、複数のディスクリート・メモリ・ブロックを含めることができる。例えば、各ディスクリート・メモリ・ブロックには、２ｐ個数のデータ・ビットを含めることが可能で、このｐは正の整数である。ｐは、典型的には６〜２０の間の整数であり、さらに典型的には８〜１４の間の整数であるが、これより小さいまたは大きい数を用いることも可能である。複数のメモリ・ブロック１１０は、中央処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ、図示せず）、または、複数のメモリ・ブロック１１０中に格納されたデータを処理、送信、または別途に使用するように設定された任意の他のデバイス・コンポーネントが用いることのできるデータを格納する。
【００１８】
ＥＣＬエントリ・ブロック１２０は、複数のメモリ・ブロック１１０から分離された領域に設けられた別個のハードウェアである。ＥＣＬエントリ・ブロック１２０は、複数のメモリ・ブロック１１０のサブコンポーネントではなく、複数のメモリ・ブロック１１０から独立して設けられたエラー修復ハードウェアである。ＥＣＬエントリ・ブロック１２０は、エラー修復ハードウェアとして、エラー訂正ロジック（ＥＣＬ）エントリのセットを含む。このＥＣＬエントリのセットは、ＥＣＬエントリの複数のサブセットを含む。ＥＣＬエントリの複数のサブセットはそれぞれ、メモリ・ブロック当たりで異なった数の書き込みエラーを有するメモリ・ブロック群に対してエラー訂正を提供するように設定される。
【００１９】
ＥＣＬエントリ・ブロック１２０は、しかして、ＥＣＬエントリのサブセットに各々が対応する、複数のサブブロックにパーティションされる。一つのＥＣＬエントリによって提供可能なエラー訂正の合計数はサブセットごとに異なる。しかして、各サブセットは、その中のＥＣＬエントリによって訂正が可能な、メモリ・ブロック当たりのエラーの固有の合計数を有する。ＥＣＬエントリ・ブロック１２０のパーティショニングは、いろいろな数のメモリ・ブロック当たりマルチビット・エラーが発生する確率に基づいている。
【００２０】
ＥＣＬマッパ１３０は、ＥＣＬエントリ・ブロック１２０のパーティショニングに関する情報を格納する。具体的には、ＥＣＬマッパ１３０は、新規のＥＣＬエントリをコード化する必要があるときはいつでもＥＣＬエントリ・ブロックの効率的探索が可能なように、ＥＣＬエントリ・ブロック１２０中のＥＣＬエントリの各サブセットのアドレス範囲に関する情報を格納する。
【００２１】
ＥＣＬコントローラ１４０は、ＥＣＬエントリ・ブロック１２０中に格納された情報および複数のメモリ・ブロック１１０中に存在するポインタ・ビットのコード化を制御する。複数のメモリ・ブロック１１０中のポインタ・ビットは、データ・ビット以外の追加のビットであり、ＥＣＬエントリ・ブロック１２０内のどのＥＣＬエントリが、複数のメモリ・ブロック１１０内の対応する個別メモリ・ブロックに対するエラー訂正のために必要な情報を含むかについての情報を提供する。
【００２２】
図２を参照すると、本開示の第一実施形態による、複数のメモリ・ブロック１１０およびＥＣＬエントリ・ブロック１２０のコンポーネントが示されている。複数のメモリ・ブロック１１０は、複数の個別メモリ・ブロックを含む。各個別メモリ・ブロックは、データを格納するように設定された第一ビット群を含むデータ・ビット・ブロック１１２と、ＥＣＬブロック１２０内のＥＣＬエントリへのポインタを格納するように設定された第二ビット群を含むポインタ・ビット・ブロック１１４とを含む。各個別のメモリ・ブロックは、データ・ビット・ブロック１１２を表す矩形およびポインタ・ビット・ブロック１１４を表す、横方向に隣接する矩形によって概略的に表されている。
【００２３】
各ポインタ・ビット・ブロック１１４中の第二ビットの合計数は、ＥＣＬエントリ・ブロック１２０中の全てのアドレスのアドレッシングを可能にし、２つの追加状態を示すように選択することができる。第一の追加状態は、エラーなし状態、すなわち、対応するデータ・ビット・ブロック１１２がいかなるエラーも含まない状態である。第二の追加状態は、１エラー状態、すなわち、対応するデータ・ビット・ブロック１１２が単一のエラーを含む状態である。かかる単一のエラーは、対応するデータ・ビット・ブロック１１２の中で一つのビットが、０または１に停留したままになる縮退故障エラーに起因し得る。この場合、対応するデータ・ビット・ブロック１１２中に格納されるよう当初に意図されていたデータの補数が計算されて、その対応するデータ・ビット・ブロック１１２に格納され、ポインタ・ビット・ブロック１１４には、第二の追加状態を示す値がセットされる。
【００２４】
例えば、ＥＣＬエントリ・ブロック１２０中のＥＣＬエントリの合計数がＥである場合、このとき、ｌｏｇ２（Ｅ＋２）を計算し、次の最も近い整数に切り上げることができる。Ｅへの２の加算は、前述の２つの追加状態を網羅するために必要である。例えば、Ｅが１３の場合、ｌｏｇ２（Ｅ＋２）の繰り上げ整数は４である。しかして、各ポインタ・ビット・ブロック１１４には４ビットを含めることができる。複数のメモリ・ブロック１１０中で一切のエラーが検出される前に、あらゆるポインタ・ビット・ブロック１１４中の第二ビット群は、エラーなし、すなわち、第一の追加状態を表す値にセットされる。この値は、Ｅが１３の上記例では、例えば００００とすることができる。いずれかの個別メモリ・ブロックのデータ・ビット・ブロック１１２中に、最初のエラーが検出された場合、対応するポインタ・ビット・ブロック１１４中の第二ビット群は、単一のエラー、すなわち第二の追加状態を表す値にセットされる。この値は、Ｅが１３の上記例では、例えば０００１となり得よう。
【００２５】
例えば、エラー含有のデータ・ビット・ブロック１１２に格納するよう当初意図されたデータが００１０００１１１１００であり、その第三ビットが、第三ビット中の縮退故障エラーに起因して正しく書き込みできなかった（故障により第三ビットは０に留まったまま）場合、すなわち、エラー含有データ・ビット・ブロック１１２中に格納されたデータが、データの書き込みを少なくとも一回試みた後で００００００１１１１００である場合、このデータの補数が計算され、この場合は１１０１１１００００１１となる。データの補数はエラーなしで書き込むことができる。というのは、第三ビット中の縮退故障エラーは、このエラー含有データ・ビット・ブロック１１２中に、１１０１１１００００１１を書き込むことを妨げないからである。ここで、用語「エラー含有」は正確なデータを格納しない一切の形態をいう。対応するポインタ・ビット・ブロック１１４の第二状態は、その後、エラー含有データ・ビット・ブロック１１２中のデータとともに読み出され、すなわち、０００１が００００００１１１１００とともに読み出され、エラー含有データ・ビット・ブロック１１２中の生データを読み出した後、正しいデータを回復するための補数オペレーションが遂行される。
【００２６】
しかして、任意の個別データ・ビット・ブロック１１２の合計書き込みエラー・カウントが０または１のいずれかの場合、ＥＣＬエントリ・ブロック１２０を用いることなく、正しいデータを回復することが可能である。図２に示された例において、複数のメモリ・ブロック１１０内の最上部から、第１行、第２行、第３行、第５行、第６行、第７行、第８行、第１０行、第１１行、第１２行、第１３行、第１４行、および第１６行に対応する個別メモリ・ブロックのデータ・ビット・ブロック１１２からは正しいデータを読み出すことができる。
【００２７】
前述のように、ＥＣＬエントリ・ブロック１２０は、エラー訂正ロジック（ＥＣＬ）エントリのセット１２２を含む。ＥＣＬエントリのセット１２２は、ＥＣＬエントリの複数のサブセットを含む。ＥＣＬエントリの複数のサブセットは、ＥＣＬエントリの第一サブセット１２２＿２および少なくとも一つのＥＣＬエントリを含む最後のサブセット１２２＿Ｎを含む。第一サブセット１２２＿２中の各ＥＣＬエントリは、メモリ・ブロック中の２つのビットに対しエラー訂正を提供するように設定され、最後のサブセット１２２＿Ｎ中の各ＥＣＬエントリは、メモリ・ブロック中のＮ個のビットに対しエラー訂正を提供するように設定されており、Ｎは２より大きい整数である。Ｎは、任意のデータ・ビット・ブロック１１２において、エラー訂正可能なビットの最大数である。
【００２８】
一つの実施形態において、Ｎは３より大きい整数とすることができ、ＥＣＬエントリの複数のサブセットは、第一サブセット１２２＿２と、最後のサブセット１２２＿Ｎと、１より大きいが（Ｎ−１）より小さい少なくとも一つの数ｉのセットに対する、ＥＣＬエントリの少なくとも一つの第ｉサブセット１２２＿ｉとを含む。この場合、ＥＣＬエントリのサブセットの合計数は、２とＮとの間の任意の数、すなわち最小３〜最大Ｎ−１の任意の数とすることができる。第ｉサブセット中の各ＥＣＬエントリは、２より大きくＮより小さい合計数のビットに対しエラー訂正を提供するように設定される。
【００２９】
例えば、図２に示されるように、ＥＣＬエントリの複数のサブセットには、ＥＣＬエントリの第一サブセット１２２＿２と、数ｉが２〜Ｎ−２の間の一個以上の数を表す、ＥＣＬエントリの少なくとも一つの第ｉサブセット１２２＿ｉと、ｉがＮ−１となるＥＣＬエントリの第ｉサブセットの特別な場合である、ＥＣＬエントリの最後から２番目のサブセット１２２＿Ｎ−１と、少なくとも一つのＥＣＬエントリを含む最後のサブセット１２２＿Ｎとを含めることができる。ＥＣＬエントリの各サブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）は一つ以上のエラー訂正ロジック（ＥＣＬ）エントリを含む。各エラー訂正エントリは、ＥＣＬエントリのサブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）の一つの中の矩形によって表される。しかして、ＥＣＬエントリの各サブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）は、複数のメモリ・ブロック１１０中の１以上の個々のメモリ・ブロック（群）において、メモリ・ブロック当たり異なる数のビットに対してエラー訂正を提供するように設定される。
【００３０】
ほとんどのエラー訂正スキームにおいて、格納されたデータ中のエラーを訂正するために必要なビットの合計数は、エラー・ビットの合計数とともに増加し、ＥＣＬエントリの合計ビット・サイズは、ＥＣＬエントリのセット１２２内のＥＣＬエントリの各サブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）に対して異ならせることができる。具体的には、より大きな合計エラー・ビット数を有するデータ・ビット・ブロック１１２に格納されたデータを訂正するように設定されたＥＣＬエントリの合計ビット・サイズは、より小さな合計エラー・ビット数を有する別のデータ・ビット・ブロック１１２に格納されたデータを訂正するように設定された別のＥＣＬエントリの合計ビット・サイズより大きい。一つの実施形態において、ＥＣＬエントリ中の合計ビット・サイズは、ＥＣＬエントリが訂正するように設定されたビットの合計数の狭義単調増加関数であり得る。例えば、合計３ビットを訂正するように設定されたＥＣＬエントリ中の合計ビット・サイズは、合計２ビットを訂正するように設定されたＥＣＬエントリ中の合計ビット・サイズよりも大きく、２より大きく（Ｎ−１）までの任意の整数ｉに対し、合計ｉ＋１ビットのエラーを訂正するように設定されたＥＣＬエントリ中の合計ビット・サイズは、合計ｉビットを訂正するように設定されたＥＣＬエントリ中の合計ビット・サイズよりも大きく、上記のＮは、ＥＣＬエントリのセット１２２中の任意のＥＣＬエントリが訂正可能なビットの合計数の最大数である。
【００３１】
ＥＣＬエントリの各サブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）中のＥＣＬエントリの合計数は、各サブセット中のＥＣＬエントリが訂正するように設定されたビットの合計数の単調減少関数であり得る。例えば、図２において、ＥＣＬエントリの第一サブセット１２２＿２中の各ＥＣＬエントリが合計２ビットを訂正するように設定され、ＥＣＬエントリの少なくとも一つの第ｉサブセット１２２＿ｉ中の各ＥＣＬエントリが合計ｉビットを訂正するように設定され、ＥＣＬエントリの最後から２番目のサブセット１２２＿Ｎ−１中の各ＥＣＬエントリが合計Ｎ−１ビットを訂正するように設定され、少なくとも一つのＥＣＬエントリを含む最後のサブセット１２２＿Ｎ中の各ＥＣＬエントリが合計Ｎビットを訂正するように設定される。ＥＣＬエントリの少なくとも一つの第ｉサブセット１２２＿ｉの中のどのサブセット中のＥＣＬエントリの合計数も、ＥＣＬエントリの第一サブセット１２２＿２中のＥＣＬエントリの合計数を超えない。同様に、Ｎより小さい各整数ｉに対し、ＥＣＬエントリの第（ｉ＋１）サブセット１２２＿（ｉ＋１）中のＥＣＬエントリの合計数は、ＥＣＬエントリの第ｉサブセット１２２＿ｉ中のＥＣＬエントリの合計数を超えない。
【００３２】
ＥＣＬエントリの各第ｉサブセット１２２＿ｉに対しＥＣＬエントリの合計数Ｍｉを割り当てることができる。ＥＣＬエントリのサブセットの合計数を、本明細書では整数Ｌで表す。しかして、ＥＣＬエントリの各第ｉサブセット１２２＿ｉは、Ｌを超えない各正の整数ｉに対し、Ｍｉ個のＥＣＬエントリ数を有する。全てのＭｉの和は、ＥＣＬエントリ・ブロック１２０中のＥＣＬエントリの合計数に等しい。すなわち、
【００３３】
【数１】
2014518423.tif 000003
【００３４】
さらに、Ｌより小さい正の整数ｉそれぞれに対し、Ｍｉ＋１≦Ｍｉである。
【００３５】
メモリ・デバイス１００の設計の過程で、ＥＣＬエントリ・ブロック１２０は、ＥＣＬエントリのサブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）の一つを各々が含む、複数のサブブロックにパーティションすることができる。ＥＣＬエントリ中の合計ビット数は、各サブブロック内で同じにすることができ、どの異なるサブブロック内のＥＣＬエントリ中の合計ビット数とも違わせることが可能である。ビットの合計数には、ＥＣＬエントリの第ｉサブセット１２２＿ｉに属する各ＥＣＬエントリに対し数Ｂｉを割り当てることができる。ＥＣＬエントリの各サブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）中のＥＣＬエントリのビットの数Ｂｉは、各サブセット中のＥＣＬエントリが訂正するように設定されたビットの合計数の狭義単調増加関数であり得る。例えば、図２において、ＥＣＬエントリの第一サブセット１２２＿２中の各ＥＣＬエントリには、２Ｂ０個のビットを含めることができ、ＥＣＬエントリの少なくとも一つの第ｉサブセット１２２＿ｉ中の各ＥＣＬエントリには、ｉＢ０個のビットを含めることができ、ＥＣＬエントリの最後から２番目のサブセット１２２＿Ｎ−１中の各ＥＣＬエントリには、（Ｎ−１）Ｂ０個のビットを含めることができ、少なくとも一つのＥＣＬエントリを含む最後のサブセット１２２＿Ｎ中の各ＥＣＬエントリには、ＮＢ０個のビットを含めることができ、Ｂ０は、データ・ビット・ブロック１１２中の単一の書き込みエラーを訂正するためにデータをコード化するのに必要なビットの数とすることができる。また、ＥＣＬエントリ中のビットの合計数が、データ・ビット・ブロック１１２中の書き込みエラー・ビットの合計数に線形に比例しない実施形態を用いることも可能である。
【００３６】
ＥＣＬエントリ・ブロック１２０には、複数の、少なくとも一つの占有ビット１２４をさらに含めることができる。複数の、少なくとも一つの占有ビット１２４の各々は、対応するＥＣＬエントリが、対応するメモリ・ブロック中の第一ビット群中の情報を訂正するためのデータを現在格納しているかどうかを示す単一のビットとすることが可能である。各占有ビット１２４は、しかして０または１の値を有し得る。例えば、各占有ビット１２４は、対応するＥＣＬエントリの利用が可能なことを示す０の値を有することができ、または対応するＥＣＬエントリの利用ができないこと、すなわち、データ・ビット・ブロック１１２に対するエラー訂正情報が既に対応するＥＣＬエントリに格納済みであることを示す１の値を有することができる。このエラー訂正情報は、対応するメモリ・ブロック中の第一ビット群中の、すなわち、対応するメモリ・ブロックのデータ・ビット・ブロック１１２中のエラーをどのように訂正するかを示す。
【００３７】
複数のメモリ・ブロック１１０およびＥＣＬエントリ・ブロック１２０を作動して以下のオペレーションを遂行することができる。最初に、複数のメモリ・ブロック１１０の中のエラー含有メモリ・ブロック中の書き込みエラーが検出される。書き込みエラーの検出は、例えば、ターゲット・データを個別のメモリ・ブロックに書き込み、その新しく書き込まれたデータを読み出し、そのターゲット・データを個別のメモリ・ブロックから読み出されたデータと比較することによって達成することが可能である。
【００３８】
ある場合には、対応するポインタ・ビット・ブロック１１４の何らかの値によって示されて、個別のメモリ・ブロックが前から存在する書き込みエラー（群）を有することが判明し、そして、対応するＥＣＬエントリ中の提示から、２より多い書き込みエラーが存在するかどうかが分かっていることがある。この場合、ターゲット・データは、適切に変更された形でその個別メモリ・ブロックに書き込まれ、書き込みエラーの合計数が変わっていないとの前提の下で、完全なエラー訂正を可能にするために、対応するＥＣＬエントリ中のビットが変更される。その個別メモリ・ブロックからのデータの読み出しの後、対応するＥＣＬエントリにより提供される何らかの適切なエラー訂正が行われる。
【００３９】
当該個別メモリ・ブロック中に何らかの書き込みエラーが存在するかどうかの如何によって、前もって知られた書き込みエラーがない場合にあってはエラー訂正なしで、もしくは、前もって知られた書き込みエラーだけが存在するとの前提でエラー訂正を行って、個別メモリ・ブロックから読み出したデータとターゲット・データとが一致すれば、新しい書き込みエラーはない。この場合、対応するポインタ・ビット・ブロック１１４中の値または対応する占有ビット１２４の内容を変える必要はない。
【００４０】
当該個別メモリ・ブロック中に何らかの書き込みエラーが存在するかどうかの如何によって、前もって知られた書き込みエラーがない場合にあってはエラー訂正なしで、もしくは、前もって知られた書き込みエラーだけが存在するとの前提でエラー訂正を行って、個別メモリ・ブロックから読み出したデータとターゲット・データとが一致しなければ、新しい書き込みエラーが少なくとも一つある。その個別メモリ・ブロックが前には書き込みエラーがなかったか、または単一の書き込みエラーを有していたが現在は２つ以上の書き込みエラーを包含する場合、対応するポインタ・ブロック１１４の内容は、ＥＣＬエントリのアドレスを示す値に変更することができる。このＥＣＬエントリは、前もって利用可能であった、すなわち０の対応する占有ビット１２４を有していたものである。新しいＥＣＬエントリは、新しく発見された書き込みエラーを包含する個別メモリ・ブロックのデータ・ビット・ブロック１１２に格納されたデータをエラー訂正するための情報をコード化するので、対応する占有ビット１２４は１にセットされる。データ・ビット・ブロック１１２中の書き込みエラーを訂正するための情報はこのＥＣＬエントリに格納される。
【００４１】
エラー訂正情報が格納されるＥＣＬエントリの選択は、そのＥＣＬエントリが十分な強度のデータ訂正能力を有すること、すなわち、そのＥＣＬエントリがエラー訂正情報を適切にコード化するために十分なビットを有することを確実にするため、系統的な仕方で行われる。しかして、利用可能なＥＣＬエントリは、エラー含有メモリ・ブロック中の書き込みエラーの合計数と同じ数のビットまたはそれより大きな数のビットに対しエラー訂正を提供するように設定された、ＥＣＬエントリの少なくとも一つのサブセットの中で特定される。
【００４２】
例えば、エラー含有メモリ・ブロック中の書き込みエラーの合計数が２の場合、利用可能なＥＣＬエントリは、２ビット以上のエラー訂正を提供するように設定された、ＥＣＬエントリのサブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）の中で特定される。好ましくは、利用可能なＥＣＬエントリは、ＥＣＬエントリの少なくとも一つのサブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）の中で最少ビットのエラー訂正を提供するように設定された、ＥＣＬエントリのサブセット内から選択され、そのサブセットは、データ・ビット・ブロック１１２当たり２ビットに対してエラー訂正能力を有するＥＣＬエントリの第一サブセット１２２＿２である。ＥＣＬエントリの第一サブセット１２２＿２中に利用可能なＥＣＬエントリがない場合、利用可能なＥＣＬエントリは、例えば、３など次に少ない数のエラー訂正ビット有する、ＥＣＬエントリの第二サブセットにおいて探索される。一般に、エラー含有メモリ・ブロック中の書き込みエラーの合計数がｋの場合、利用可能なＥＣＬエントリは、ｋビット以上に対するエラー訂正を提供するように設定された、ＥＣＬエントリのサブセットの中で特定される。好ましくは、利用可能なＥＣＬエントリは、ｋビット以上に対するエラー訂正を提供するように設定された、ＥＣＬエントリの少なくとも一つのサブセットの中で、最少ビットのエラー訂正を提供するように設定された、ＥＣＬエントリのサブセット内から選択される。
【００４３】
一つの実施形態において、利用可能なＥＣＬエントリの識別、およびその後の、対応するポインタ・ビット・ブロック１１４と対応する占有ビット１２４との内容の変更は、ＥＣＬコントローラ１４０（図１参照）を使って達成することができる。しかして、ＥＣＬコントローラ１４０は、複数のメモリ・ブロック１１０の中のエラー含有メモリ・ブロック中の書き込みエラーを検出し、利用可能なＥＣＬエントリを、エラー含有メモリ・ブロック中の書き込みエラーの合計数と同じ数のビット、またはそれより大きな数のビットに対しエラー訂正を提供するように設定された、ＥＣＬエントリの少なくとも一つのサブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）の中で特定することができる。この場合、ＥＣＬコントローラ１４０は、エラー含有メモリ・ブロックの、対応するポインタ・ビット・ブロック１１４の内容であるポインタ中に利用可能なＥＣＬエントリのアドレスを格納し、エラー含有メモリ・ブロック中の全ての書き込みエラーを訂正するための情報を、利用可能なＥＣＬエントリ中に格納するように設定することが可能である。
【００４４】
別の実施形態において、ＥＣＬコントローラ１４０は、メモリ・デバイス１００内に設けずに、デュアル・インライン・メモリ・モジュール（ＤＩＭＭ：Ｄｕａｌ  Ｉｎ−ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）の一体部分として設けることも、または中央処理装置（ＣＰＵ）の一体部分として設けることさえも可能である。さらに別の実施形態において、ＥＣＬコントローラの機能を、ハード・ディスクまたはキャッシュ・メモリなど、別のメモリ・デバイスに存在するプログラムによって達成することができ、このプログラムは、プログラムの実行の経過中に中央処理装置の処理リソースを利用する。
【００４５】
新しく識別されたエラー含有メモリ・ブロック中のエラー・ビットの数に対するエラー訂正を提供する能力のあるＥＣＬエントリのサブセット中に、利用可能なエントリがないので、利用可能なＥＣＬエントリの識別すなわち特定ができない場合、エラー訂正が不可能であることを示す信号を、中央処理装置などの適切なコントローラに送信することができる。例えば、データ・ビット・ブロック１１２の中への書き込みオペレーションの間に、少なくとも一つの追加の書き込みエラーが発見されて、データ・ビット・ブロック１１２中の書き込みエラーの合計数がｋである場合であって、ｋ以上のエラーを訂正するための、ＥＣＬエントリ・ブロック１２０内のＥＣＬエントリのサブセットが、利用可能ないかなるＥＣＬエントリも有さない場合、エラー訂正が不可能であることを示す信号を生成し、適切なデバイスに送信することが可能である。
【００４６】
説明のための一例として、図２中の複数のメモリ・ブロック１１０の最上部から４番目のデータ・ビット・ブロック１１２が２つの書き込みエラーを含み、図２中の複数のメモリ・ブロック１１０の最上部から９番目のデータ・ビット・ブロック１１２が３つの書き込みエラーを含み、図２中の複数のメモリ・ブロック１１０の最上部から１５番目のデータ・ビット・ブロック１１２が２つの書き込みエラーを含むことがあり得る。対応するポインタ・ビット・ブロック１１４は、それぞれ、００１０、１００１、および００１１にセットすることができる。この例において、これらのポインタ・ビット・ブロック１１４中のビットは、２と、対応するデータ・ビット・ブロック１１２に対するエラー訂正の情報が存在する対応ＥＣＬエントリのアドレスを表す数値との数値合計を表す。言い換えれば、ポインタ・ビット・ブロック１１４の一つによって表された数字から２を減ずると、ＥＣＬエントリ・ブロック１２０中の対応するＥＣＬエントリのアドレスに等しい。ＥＣＬエントリの第一サブセット１２２＿２の中の最上部のＥＣＬエントリは、第四データ・ビット・ブロック１１２中の２つのエラー・ビットをエラー訂正するための情報を含み、ＥＣＬエントリの第一サブセット１２２＿２の中の最上部から２番目のエントリは、第十五データ・ビット・ブロック１１２中の２つのエラー・ビットをエラー訂正するための情報を含み、ＥＣＬエントリの少なくとも一つの第ｉサブセット１２２＿ｉ中の第一エントリは、第九データ・ビット・ブロック１１２中の３つのエラー・ビットをエラー訂正するための情報を含む。１を上回る書き込みエラーの存在を示すポインタ・ビット・ブロック１１４と、１にセットされた対応する占有ビット１２４により占有されたものとしてフラグされているＥＣＬエントリとの間には、一対一のマッピングが設けられる。
【００４７】
一般に、複数のエラー・ビットを含む各エラー含有メモリ・ブロックは、そのメモリ・ブロックに存在する全てのエラーを訂正する能力のある適切なエラー訂正ハードウェア、すなわち、ＥＣＬエントリ・ブロック１２０中の適切なＥＣＬエントリにマップされる。しかして、エラー訂正ロジックのためのハードウェア、すなわちＥＣＬエントリ・ブロック１２０は、動的な適応マッピングによって複数のメモリ・ブロック１１０から切り離され、このマッピングは、メモリ・デバイス１００（図１参照）の使用の間に、複数のメモリ・ブロック１１０中に追加の書き込みエラーが検出されるのに応じて変化する。本明細書での使用において「動的な適応マッピング」とは、いかなる特定のＥＣＬエントリに対しても一対一のマッピングを持たない複数のメモリ・ブロックにおいて、何らかの追加エラーが検出されると、必要に応じてＥＣＬエントリを割り当てることをいう。
【００４８】
欠陥メモリ・ブロックの最大数は数値Ｅにセットされ、これはＥＣＬエントリ・ブロック１２０中のＥＣＬエントリの合計数である。Ｅは、複数のメモリ・ブロック１１０中のブロックの合計数より少なくすることができる。ＥＣＬエントリ・ブロック１２０中のＥＣＬエントリの合計数が、複数のメモリ・ブロック１１０中のブロックの合計数より少なくできるので、従来技術のエラー訂正方法に比べて、ハードウェアの量で測ったエラー訂正ロジックのオーバーヘッドを低減することができる。
【００４９】
図３を参照すると、本開示の第二実施形態による、複数のメモリ・ブロック１１０のコンポーネントとＥＣＬエントリ・ブロック１２０とが示されている。この第二実施形態において、一つのＥＣＬエントリ中の同一のビットが、２つ以上のエラー含有データ・ビット・ブロック１１２中の書き込みエラーの訂正に使用可能であるという条件で、１を上回る書き込みエラーの存在を示すポインタ・ビット・ブロック１１４と、エラー含有データ・ビット・ブロック１１２中のエラーを訂正するための情報を包含するＥＣＬエントリとの間で、多対一のマッピングが可能である。
【００５０】
しかして、複数のエラー含有データ・ビット・ブロック１１２中の２つ以上の書き込みエラーを訂正するために同じエラー訂正コードを用いることが可能である場合、複数のエラー含有データ・ビット・ブロック１１２に対するポインタ・ビット・ブロック１１４は、これら複数のエラー含有データ・ビット・ブロック１１２に共通のエラー訂正コードを含む同一のＥＣＬエントリをポイントする。言い換えれば、相異なるメモリ・ブロックが、同じセットのビット位置に欠陥ビット有する場合、メモリ・ブロックのエラー訂正ロジックへの多対一のマッピングが可能になる。
【００５１】
本第二実施形態は、複数のメモリ・ブロックが同一のＥＣＬエントリ中に格納された同一のエラー訂正ロジックを共用できるようにすることによって、エラー訂正ロジック・オーバーヘッドの低減を可能にする。同じセットの欠陥ビット位置に書き込みエラーを有する複数のメモリ・ブロックに対し同一のＥＣＬエントリの共用を実装するために、エラー訂正ロジックを割り当てるのに先立って、追加のチェックを行い、少なくとも一つの新しい書き込みエラーを含む新しく検出されたエラー含有メモリ・ブロックのものと同じビット位置のエラーを訂正しているＥＣＬエントリが、既に割り当てられていないかどうかを判定することができる。
【００５２】
ＥＣＬエントリ・ブロック１２０には、複数の、少なくとも一つの占有ビット１２４を含めることができる。一つの実施形態において、各ＥＣＬエントリに対応する少なくとも一つの占有ビット１２４は複数のビットとすることが可能である。複数のビットはそれぞれ、いくつのメモリ・ブロックが、各ＥＣＬエントリ中に格納された情報を用いることによって訂正が可能な書き込みエラーを含んでいるのか、を示すことができる。例えば、エラー含有データ・ビット・ブロック１１２のｍ個が、一つのＥＣＬエントリにマップされる場合、対応する複数の占有ビット１２４に数値ｍをコード化することが可能である。
【００５３】
説明のための一例として、図３の複数のメモリ・ブロック１１０の最上部から９番目のデータ・ビット・ブロック１１２が、あるセットの欠陥ビット位置に２つの書き込みエラーを含み、図３の複数のメモリ・ブロック１１０の最上部から１５番目のデータ・ビット・ブロック１１２が、同じセットの欠陥ビット位置に２つの書き込みエラーを含むことがあり得る。対応する各ポインタ・ビット・ブロック１１４は、同じアドレスを指示するようにセットされる。具体的には、第九データ・ビット・ブロック１１２のポインタ・ビット・ブロック１１４と、第十五データ・ビット・ブロック１１２のポインタ・ビット・ブロック１１４とは、００１１の値を有するようにセットされ、これは、ＥＣＬエントリ・ブロック１２０中の０００１（２を減算後）のアドレスをポイントする。このＥＣＬエントリ・ブロック中の第二ＥＣＬエントリに対する複数の占有ビット１２４は、複数の占有ビット１２４中のビットの合計数に応じ、例えば、１０、０１０、００１０、０００１０、００００１０などにセットすることにより、数値２を示すようにセットされる。
【００５４】
一般に、複数の占有ビット１２４はそれぞれ、対応するＥＣＬエントリの利用可能性を（例えば０の値を有することによって）示し、また、いくつのエラー含有データ・ビット・ブロック１１２が対応するＥＣＬエントリにマップされているのかを示すこともできる。
【００５５】
図４を参照すると、ＥＣＬマッパ１３０が示されている。ＥＣＬマッパ１３０は、ＥＣＬエントリ・ブロック１２０内のＥＣＬエントリの各サブセットの場所に関する情報を含む。ＥＣＬマッパ１３０は、ＥＣＬエントリの各サブセット（１２２＿２、１２２＿ｉ、１２２＿Ｎ−１、１２２＿Ｎ）のアドレス範囲の識別を可能にする代表アドレスのセットを含む。一例において、ＥＣＬマッパ１３０には、ＥＣＬエントリの全サブセット中の第一アドレス群、またはＥＣＬエントリの第一サブセット（その第一アドレスは０である）以外の全てのＥＣＬエントリのサブセットの第一アドレス群のセットを含めることができる。別の例において、ＥＣＬマッパ１３０には、ＥＣＬエントリの全サブセット中の最後のアドレス群、またはＥＣＬエントリの最後のサブセット（その最後のアドレスはＥＣＬエントリ・ブロック１２０の最後のＥＣＬエントリのアドレスである）以外の全てのＥＣＬエントリのサブセットの最後のアドレス群のセットを含めることができる。
【００５６】
ＥＣＬマッパ１３０は、２つの行または２つの列を包含するテーブル・フォーマットで設けることが可能である。第一行または第一列には、ＥＣＬエントリの各サブセットが訂正するように設定された、エラー含有データ・ビット・ブロック１１２当たりの最大ビット数を含めることができる。第二行または第二列には、ＥＣＬエントリの対応するサブセットの第一アドレスまたは最後のアドレスを含めることができる。ＥＣＬエントリのサブセットの第一アドレスがＥＣＬマッパ１３０中にリストされている場合、図４のケースのように、この場合、ＥＣＬエントリの第一サブセットの第一アドレスが０なので、２つの書き込みエラーを訂正するように設定された、ＥＣＬエントリの第一サブセットに対するエントリを省略することができる。
【００５７】
図２中のＥＣＬエントリ・ブロック１２０に適用される説明の一例として、ＥＣＬマッパ１３０が、ＥＣＬエントリの全サブセット中の第一アドレスのセットを含み、ＥＣＬエントリのセットが、２つの書き込みエラーを修復するように設定された６つのＥＣＬエントリの第一サブセット１２２＿２と、Ｋの書き込みエラーを修復するように設定された４つのＥＣＬエントリの第ｉサブセット１２２＿ｉと、Ｎ−１の書き込みエラーを修復するように設定された２つのＥＣＬエントリを含む最後から２番目のサブセット１２２＿Ｎ−１と、Ｎの書き込みエラーを修復するように設定された１つのＥＣＬエントリの最後のサブセット１２２＿Ｎと、を含む場合、ＥＣＬマッパ１３０は、図５に示されたテーブルを含み得る。前述のように、ソフトウェアがアドレス００００をＥＣＬエントリの第一サブセット１２２＿２の第一アドレスとして認識するようにプログラムできるので、図５のテーブル中の第一列は省略が可能である。
【００５８】
ＥＣＬエントリ・ブロック１２０中のＥＣＬエントリは、当該技術分野で既知の任意のエラー訂正スキームを用いてエラー訂正データをコード化できる。ＥＣＬエントリ・ブロック１２０中で使用可能なエラー訂正スキームには、以下に限らないが、Ｓｃｈｅｃｈｔｅｒらによって開示されたエラー訂正ポインタ（ＥＣＰ：ｅｒｒｏｒ  ｃｏｒｒｅｃｔｉｏｎ  ｐｏｉｎｔｅｒ）法、またはＮａｋ  Ｈｅｅ  Ｓｅｏｎｇらによって開示された縮退故障エラー修復（ＳＡＦＥＲ：Ｓｔｕｃｋ−Ａｔ−Ｆａｕｌｔ  Ｅｒｒｏｒ  Ｒｅｃｏｖｅｒｙ）法が含まれる。
【００５９】
図６を参照すると、第一フロー・チャート６００は、エラー訂正データをコード化するためＥＣＰ法を用いる第一の適応マルチビット・エラー訂正法を表している。第一フロー・チャートの最初のステージにおいて、複数のメモリ・ブロック１１０内のある個別メモリ・ブロック中に書き込みエラーが検出される。図１、２、および３も参照。
【００６０】
ステップ６０１を参照すると、書き込み要求が行われ、これは、ターゲット・データを複数のメモリ・ブロック１１０内の指定されたメモリ・ブロック中に書き込む命令である。この指定されたメモリ・ブロックは、データを格納するように設定された第一ビット群と、ポインタを格納するように設定された第二ビット群とを含み、ポインタは、エラー訂正ロジック・エントリ・インデックス（ＥＣＬインデックス）である。第一ビット群はデータ・ビット・ブロック１１２を構成し、第二ビット群はポインタ・ビット・ブロック１１４を構成する。
【００６１】
ステップ６１０を参照すると、指定されたメモリ・ブロックに対するＥＣＬエントリ・インデックスが読み出される。ＥＣＬエントリ・インデックスは、指定されたメモリ・ブロックに対応する、ポインタ・ビット・ブロック１１４内に格納されたポインタのデータである。
【００６２】
ＥＣＬエントリ・インデックスが、指定されたメモリ・ブロック中に書き込みエラーがないことを示す（図２および３中の００００などの）第一状態にある場合、ステップ６２０は、いかなる追加のオペレーションも導入しない。ＥＣＬエントリ・インデックスが、指定されたメモリ・ブロック中に単一の書き込みエラーがあることを示す（図２および３中の０００１などの）第二状態にある場合、ステップ６２０は、その単一ビット書き込みエラーを補正するオペレーションを有効にする。例えば、単一ビット書き込みエラーを補正するオペレーションは、ターゲット・データを指定されたメモリ・ブロックに格納しようとする前にターゲット・データの全ビットを反転させる補数オペレーションとすることができる。
【００６３】
ＥＣＬエントリ・インデックスが第一状態または第二状態にない場合は、これまでにその指定されたメモリ・ブロック中で２つ以上の書き込みエラーが検出されており、ＥＣＬエントリ・ブロック１２０内のあるＥＣＬエントリが、その指定されたメモリ・ブロックに関連付けられている。ステップ６２０で、指定されたメモリ・ブロックにマップされた、すなわち関連付けられたＥＣＬエントリのアドレスを、対応するポインタ・ビット・ブロック１１４の内容すなわちＥＣＬエントリ・インデックスから、図２および３で示したように２の値を差し引くなど、所定のアルゴリズムによって導出することができる。指定されたメモリ・ブロックにマップされたＥＣＬエントリの内容は、その指定されたメモリ・ブロックのデータ・ビット・ブロック１１２内の破損ビットのビット位置を識別する故障ポインタ、および故障ポインタの各々に対応する修復ビットを含む。
【００６４】
例えば、各ポインタ・ビット・ブロックは、エラーの数またはマップされたＥＣＬエントリ・インデックスを示すため、ｉｎｔ［ｌｏｇ２（Ｅ）］個のビットを有することができる。Ｅは、ＥＣＬエントリ・ブロック１２０中のＥＣＬエントリの合計数であり、ｉｎｔはオペラントを次の最も近い整数に切り上げる関数である。ＥＣＬエントリ・インデックスが０の場合、対応するデータ・ビット・ブロック１１２は０のエラーを有する。ＥＣＬエントリ・インデックスが１の場合、対応するデータ・ビット・ブロック１１２は１つのエラーを有する。ＥＣＬエントリ・インデックスが２以上Ｅ−１以下の値を有する場合、マップされたＥＣＬエントリ、すなわち指定されたメモリ・ブロックに関連付けられたＥＣＬエントリが存在し、そのアドレスは、ＥＣＬエントリ・インデックスの値から２を減じたものである。
【００６５】
ステップ６３０を参照すると、ターゲット・データは、当初の形もしくは変更された形で、指定されたメモリ・ブロックのデータ・ビット・ブロック１１２中に書き込まれる。具体的には、ＥＣＬエントリ・インデックスが、指定されたメモリ・ブロック中に書き込みエラーがないことを示す第一状態にある場合にあっては、ターゲット・データは、当初の形で指定されたメモリ・ブロックのデータ・ビット・ブロック１１２中に書き込まれる。ＥＣＬエントリ・インデックスが、指定されたメモリ・ブロック中に単一の書き込みエラーがあることを示す第二状態にある場合にあっては、ターゲット・データは、ターゲット・データから導き出された変更された形で指定されたメモリ・ブロックのデータ・ビット・ブロック１１２に書き込まれ、この変更の形は、例えば、当初のターゲット・データの補数とすることができる。ＥＣＬエントリ・インデックスが第一状態または第二状態になく、ＥＣＬエントリ・ブロック１２０内のＥＣＬエントリが指定されたメモリ・ブロックに関連付けられている場合、ターゲット・データは別のフォーマットに変換され、このフォーマットは、ＥＣＬエントリ・ブロック１２０内のマップされたＥＣＬエントリの内容を使ったエラー訂正の後、当初のターゲット・データを再生する。マップされたＥＣＬエントリの内容、具体的にはマップされたＥＣＬエントリの修復ビット中のデータは、このデータ書き込みステップの過程で変更される。
【００６６】
ステップ６４０を参照すると、指定されたメモリ・ブロックのデータ・ビット・ブロック１１２の中に書き込まれたデータが（必要に応じて、任意のマップされたＥＣＬエントリの内容を用いる本明細書に記載のエラー訂正を用いて）読み出され、当初のターゲット・データに対して検証される。
【００６７】
ステップ６４５を参照すると、ＥＣＬコントローラ１４０または中央処理装置（ＣＰＵ）で実行される任意の関連プログラムが、ターゲット・データを指定されたメモリ・ブロック中に格納する過程で書き込みエラーが生じているかどうかを判定する。データ・ビット・ブロック１１２と、対応するポインタ・ビット・ブロック１１４と、存在する場合、いずれかのマップされたＥＣＬエントリとから読み出されたデータが、当初のターゲット・データと一致する場合、書き込みエラーはない。この場合、プロセスの流れはステップ６９０に続き、ＥＣＬコントローラまたはプログラムによって、書き込みの成功完了の信号を生成することができる。
【００６８】
データ・ビット・ブロック１１２と、対応するポインタ・ビット・ブロック１１４と、存在する場合、いずれかのマップされたＥＣＬエントリとから読み出されたデータが、当初のターゲット・データと一致しない場合、少なくとも一つの書き込みエラーがある。指定されたメモリ・ブロックのデータ・ビット・ブロック１１２中にある書き込みエラーが合計で一つだけなので、例えば、ＥＣＬエントリ・ブロック１２０を用いることなくこの書き込みエラーの訂正が可能な場合、対応するポインタ・ビット・ブロック中のＥＣＬエントリ・インデックスが変更され、ターゲット・データを指定されたメモリ・ブロックに正しく書き込むための別の試みが行われる。この試みが成功した場合、プロセスの流れはステップ６９０に続き、ＥＣＬコントローラまたはプログラムによって、書き込みの成功完了の信号を生成することができる。
【００６９】
例えば、データ・ビット・ブロック１１２中に合計で複数の書き込みエラーがあるので、ＥＣＬエントリ・ブロック１２０を用いることなくこの書き込みエラーの訂正ができない場合、プロセスの流れはステップ６５５に続く。データ・ビット・ブロック１１２中の書き込みエラーの合計数を、本明細書では（ｋ＋１）で表すものとする。データ・ビット・ブロック１１２中の前もって知られたエラーの数は、（ｋ＋１）より小さい数字で、０以上ｋ以下の数である。ステップ６４５の終了までには、少なくとも一つの書き込みエラーの検出が完了する。
【００７０】
第一フロー・チャート６００の第二ステージにおいて、指定されたメモリ・ブロック中の書き込みエラーを訂正するために利用可能なＥＣＬエントリが、ＥＣＬエントリ・ブロック１２０内で特定される。この利用可能なＥＣＬエントリは、エラー含有メモリ・ブロック中、すなわち指定されたメモリ・ブロック中の書き込みエラーの合計数（ｋ＋１）と同じ数のビット、またはそれより大きな数のビットに対しエラー訂正を提供するように設定された、ＥＣＬエントリの少なくとも一つのサブセットの中で特定される。
【００７１】
少なくとも（ｋ＋１）の書き込みエラーを訂正するためのＥＣＬエントリが利用可能かどうかは、以下のやり方で判定することができる。前述のように、各ＥＣＬエントリは、対応する少なくとも一つの占有ビット１２４を有し得る。第一実施形態において、この少なくとも一つの占有ビット１２４は、それが、複数のエラー含有メモリ・ブロックのＥＣＬエントリ群への一対一のマッピングにおいて、いずれかのメモリ・ブロックに使用されているかどうかを示す単一のビットである。第二実施形態では、この少なくとも一つの占有ビット１２４は、所与のＥＣＬエントリにマップされているメモリ・ブロックの数を示すカウンタとして機能する複数の占有ビットである。このカウンタは、新たなメモリ・ブロックが、あるＥＣＬエントリにマップされるたびにインクリメントされ、メモリ・ブロックのそのＥＣＬエントリへのマップが終わるたびにデクリメントされる。カウンタの値がゼロになると、それは、そのＥＣＬエントリが解放されていることを示す。
【００７２】
ＥＣＬエントリの各サブセット中のＥＣＬエントリの合計数は事前設定され、レジスタに事前ロードされる。このオペレーションを遂行するため、前述のＥＣＬマッパ１３０を用いることができる。ＥＣＬエントリのサブセットの合計数をＬとすれば、図５に示すように、ＥＣＬマッパ１３０に対し、Ｌ行またはＬ列のハードウェア・テーブルを用いることができる。あるいは、図４に示されるように、対応するＥＣＬエントリの第一アドレスがテーブルにリストされている場合、上記に換えて、ＥＣＬマッパ１３０に対してＬ−１行またはＬ−１列のハードウェア・テーブルを用いることが可能である。メモリ・ブロック当たり、すなわちデータ・ビット・ブロック１１２当たりに規定された最大数のエラーを訂正する能力のある、ＥＣＬエントリの対応するサブセットすなわち対応するＥＣＬエントリの群の開始インデックスを示すため、各エントリはｉｎｔ［ｌｏｇ２（Ｅ）］個のビットを有することができる。
【００７３】
前述のように、第一ＥＣＬエントリは、０のアドレスを有する。すなわち、２つの書き込みエラーを訂正する能力のある、ＥＣＬエントリの第一サブセットの開始部に位置する。第一実施形態において、（ｋ＋１）が２に等しい場合、すなわち指定されたメモリ・ブロックが２つだけのエラーを有する場合、利用可能なＥＣＬエントリに対する探索は、ＥＣＬエントリ・ブロック１２０の第一ＥＣＬエントリから開始される。例えば、対応する占有ビット１２４中に「１」が存在することによって、最後に探索されたＥＣＬエントリが占有されていることが示されている場合、そのＥＣＬエントリのアドレスは１つインクリメントされる。２つの書き込みエラーを訂正する能力のある、ＥＣＬエントリの第一サブセットの中に利用可能なＥＣＬエントリが見つからない場合、ＥＣＬエントリの残りのサブセットの中で最小の数の書き込みエラーを訂正する能力のある、ＥＣＬエントリの次のサブセットが探索され、利用可能なＥＣＬエントリが見つかるまでこれが繰り返される。
【００７４】
第二実施形態において、（ｋ＋１）が２に等しい場合、メモリ・ブロック当たり２つのエラーの訂正ビットを有する、ＥＣＬエントリの第一サブセットに対し、その中のいずれかのＥＣＬエントリが、指定されたメモリ・ブロック中に存在する２つの書き込みエラーをエラー訂正するために必要な情報を既にコード化しているかどうかが探索される。この探索の過程で、その２つの書き込みエラーをエラー訂正するために必要な情報をコード化しているＥＣＬエントリが見出された場合、指定されたメモリ・ブロックのポインタ・ビット・ブロック１１４は、例えば、そのＥＣＬエントリのアドレスに２の値をプラスした和の数を格納することによって、そのＥＣＬエントリを参照するビットを使ってコード化される。そのＥＣＬエントリの複数の占有ビット１２４は、もう一つのメモリ・ブロックがそのＥＣＬエントリにマップされたことを示すため、１つインクリメントされる。このような整合するＥＣＬエントリが見つからない場合、利用可能なＥＣＬエントリの探索は、第一実施形態におけるのと同じ仕方で、ＥＣＬエントリ・ブロック１２０の第一ＥＣＬエントリから開始される。例えば、対応する複数の占有ビット１２４中に０以外の何らかの数が存在することによって、最後に探索されたＥＣＬエントリが占有されていることが示されている場合、そのＥＣＬエントリのアドレスが１つインクリメントされる。２つの書き込みエラーを訂正する能力のある、ＥＣＬエントリの第一サブセットの中に利用可能なＥＣＬエントリが見つからない場合、ＥＣＬエントリの残りのサブセットの中で最小の数の書き込みエラーを訂正する能力のある、ＥＣＬエントリの次のサブセットが探索され、利用可能なＥＣＬエントリが見つかるまでこれが繰り返される。
【００７５】
第一および第二実施形態において、（ｋ＋１）が２より大きい場合、すなわち、指定されたメモリ・ブロックが２つより多いエラーを有する場合、ＥＣＬマッパ１３０を利用することができる。図４を参照すると、ＥＣＬマッパ１３０の中で、ＥＣＬエントリのサブセットが提供するエラー訂正ビットの最小の数が探索され、これは（ｋ＋１）に等しいか、または（ｋ＋１）より大きい。ＥＣＬエントリのさまざまなサブセットが、メモリ・ブロック当たり（ｋ＋１）のエラー訂正を提供するサブセットを含む場合、図４ではｔとして示されている、そのサブセットに対する第一ＥＣＬエントリのアドレスが、ＥＣＬマッパ１３０から読み出される。ＥＣＬエントリのさまざまなサブセットは、メモリ・ブロック当たり（ｋ＋１）のエラー訂正を提供するサブセットを含んでいないが、ＥＣＬエントリのサブセットが提供するエラー訂正ビットの最小の数が（ｋ＋ｊ）であり、このｊが１より大きい場合、（ｋ＋ｊ）ビットに対しエラー訂正を提供するように設定された、ＥＣＬエントリのサブセットに対する第一ＥＣＬエントリのアドレスがＥＣＬマッパ１３０から読み出される。
【００７６】
図６のステップ６５５に戻って参照すると、第一実施形態において、（ｋ＋１）が２より大きい場合、利用可能なＥＣＬエントリに対する探索は、メモリ・ブロック当たり（ｋ＋１）の書き込みエラーまたは（ｋ＋ｊ）の書き込みエラーを訂正するように設定されたサブセットの第一ＥＣＬエントリから開始される。例えば、対応する占有ビット１２４中に「１」が存在することによって、最後に探索されたＥＣＬエントリが占有されていることが示されている場合、そのＥＣＬエントリのアドレスは１つインクリメントされる。（ｋ＋１）の書き込みエラーまたは（ｋ＋ｊ）の書き込みエラーを訂正するように設定されたサブセット中に利用可能なＥＣＬエントリが見つからない場合、ＥＣＬエントリの残りのサブセットの中で最小の数の書き込みエラーを訂正する能力のある、ＥＣＬエントリの次のサブセットが探索され、利用可能なＥＣＬエントリが見つかるまでこれが繰り返される。
【００７７】
第二実施形態において、（ｋ＋１）が２より大きい場合、メモリ・ブロック当たり（ｋ＋１）の書き込みエラーまたは（ｋ＋ｊ）の書き込みエラーを訂正するように設定されたサブセットに対し、その中のいずれかのＥＣＬエントリが、指定されたメモリ・ブロック中に存在する（ｋ＋１）の書き込みエラーをエラー訂正するために必要な情報を既にコード化しているかどうかが探索される。この探索の過程で、（ｋ＋１）の書き込みエラーをエラー訂正するために必要な情報をコード化しているＥＣＬエントリが見出された場合、指定されたメモリ・ブロックのポインタ・ビット・ブロック１１４は、例えば、そのＥＣＬエントリのアドレスに２の値をプラスした和の数を格納することによって、そのＥＣＬエントリを参照するビットを使ってコード化される。そのＥＣＬエントリの複数の占有ビット１２４は、もう一つのメモリ・ブロックがそのＥＣＬエントリにマップされたことを示すため、１つインクリメントされる。このような整合するＥＣＬエントリが見つからない場合、利用可能なＥＣＬエントリの探索は、第一実施形態におけるのと同じ仕方で、（ｋ＋１）の書き込みエラーまたは（ｋ＋ｊ）の書き込みエラーを訂正するように設定されたサブセットから開始される。例えば、対応する複数の占有ビット１２４中に０以外の何らかの数が存在することによって、最後に探索されたＥＣＬエントリが占有されていることが示されている場合、そのＥＣＬエントリのアドレスが１つインクリメントされる。（ｋ＋１）の書き込みエラーまたは（ｋ＋ｊ）の書き込みエラーを訂正するように設定されたサブセットの中に利用可能なＥＣＬエントリが見付からない場合、ＥＣＬエントリの残りのサブセットの中で最小の数の書き込みエラーを訂正する能力のある、ＥＣＬエントリの次のサブセットが探索され、利用可能なＥＣＬエントリが見つかるまでこれが繰り返される。
【００７８】
第一実施形態において、利用可能なＥＣＬエントリは、空で（いかなるエラー訂正情報も格納していない）、十分なエラー訂正ビット、すなわち、少なくとも（ｋ＋１）のエラー訂正ビットを有するＥＣＬエントリである。第二実施形態において、利用可能なＥＣＬエントリは、新しく見つかったエラー含有メモリ・ブロックを訂正するのに必要な、同じエラー訂正データ・ビットを既にコード化しているＥＣＬエントリか、もしくは空で十分なエラー訂正ビットを有するＥＣＬエントリのいずれかである。ＥＣＬエントリ・ブロック１２０中に格納されるエラー訂正ビットの数を低減するために、新しく見つかったエラー含有メモリ・ブロックに対しエラー訂正を提供するため一つ以上のＥＣＬエントリを用いることが可能な場合、最小の数のエラー訂正ビットを有する利用可能なＥＣＬエントリが選択される。
【００７９】
ＥＣＬエントリ・ブロック１２０中の全エントリを探索した後に利用可能なＥＣＬエントリ見付けることができない場合、プロセスの流れはステップ６９９に進む。この場合、エラー訂正が不可能であることを示す信号が生成され、中央処理装置（ＣＰＵ）などの適切なデバイスに送信される。
【００８０】
利用可能なＥＣＬエントリが見つかった場合、プロセスの流れはステップ６６０に進む。選択されたメモリ・ブロックが、占有されているＥＣＬエントリ、すなわち、前の書き込みエラーの検出に基づいて既にマップされた占有済みＥＣＬエントリに現在関連付けられている場合、その現在関連付けられているＥＣＬエントリは、部分的または全面的に解放される。第一実施形態において、現在関連付けられているＥＣＬエントリは、対応する単一占有ビットを「１」から「０」に変更することによって全面的に解放される。第二実施形態において、現在関連付けられているＥＣＬエントリは、対応する複数の占有ビットを１の値から０の値に変更することによって全面的に、もしくは、対応する複数の占有ビットを、１より大きい整数から１つデクリメントすることによって部分的に解放される。
【００８１】
適切な利用可能なＥＣＬエントリが特定されたならば、その利用可能なＥＣＬエントリは、ＥＣＬコントローラ１４０またはメモリ・デバイス１００中のメモリ・ストレージを制御するプログラムによって割り当てられる。新規ＥＣＬエントリは、指定されたメモリ・ブロックに割り当てられる。新規ＥＣＬエントリは、エラー修復スキームに従って更新される。これまでメモリ・ブロックによって保持されていたＥＣＬエントリのポインタが更新される。言い換えれば、新規ＥＣＬエントリのアドレスが、指定されたエラー含有メモリ・ブロックのポインタ、すなわちＥＣＬエントリ・インデックスに格納され、指定されたエラー含有メモリ・ブロック中の全ての書き込みエラーを訂正するための情報が新規のＥＣＬエントリに格納される。
【００８２】
ステップ６７０を参照すると、少なくとも（ｋ＋１）の書き込みエラーを訂正するように設定された、ＥＣＬエントリのサブセット中の新規ＥＣＬエントリが、少なくとも一つの新しい書き込みエラーを包含することが判明した指定のメモリ・ブロック中の書き込みエラーを訂正するために割り当てられる。前述のように、少なくとも（ｋ＋１）の書き込みエラーを訂正するように設定された、ＥＣＬエントリのサブセットは、指定されたメモリ・ブロック中の（ｋ＋１）の書き込みエラーを訂正する能力のある新規のまたは既存の「利用可能なＥＣＬエントリ」の有無の如何によって、（ｋ＋１）の書き込みエラーを訂正するように設定されたＥＣＬエントリのサブセット、あるいは（ｋ＋ｊ）の書き込みエラーを訂正するように設定されたＥＣＬエントリのサブセットとすることができる。
【００８３】
具体的には、新規ＥＣＬエントリの内容は、指定されたメモリ・ブロックのデータ・ビット・ブロック１１２中に格納された生データをエラー訂正するのに必要な情報をコード化するため適切に変更される。例えば、新規ＥＣＬエントリの内容には、故障ポインタおよびデータ・ビット・ブロック１１２に対する修復ビットを含めることができる。この情報は、第一ビット群、すなわちデータ・ビット・ブロック１１２中の少なくとも一つの個別エラー・ビットをポイントする少なくとも一つのビット・ポインタを含む。通常、この情報は、データ・ビット・ブロック１１２中の複数の個別エラー・ビットをポイントする複数のビット・ポインタを含む。
【００８４】
ステップ６８０を参照すると、指定されたメモリ・ブロックのポインタ・ビット・ブロック１１４に対するＥＣＬエントリ・インデックスが、例えば、２と新規ＥＣＬエントリのアドレスとの和に等しい値を格納することによって、新規ＥＣＬエントリを参照するために変更される。
【００８５】
次いでプロセスの流れはステップ６３０に進むことができ、ポインタ・ビット・ブロック１１４および新規ＥＣＬエントリに具現された新しいエラー訂正スキームを用いて、ターゲット・データを、選択されたメモリ・ブロック中に正しく書き込めることを確認する。
【００８６】
図７を参照すると、第二フロー・チャート７００が、エラー訂正データをコード化するために縮退故障エラー修復（ＳＡＦＥＲ）法を用いる、第二適応マルチビット・エラー訂正法を表している。第二フロー・チャート７００の最初のステージにおいて、図６中の第一フロー・チャート６００におけるのと同じ仕方で、複数のメモリ・ブロック１１０内のある個別メモリ・ブロック中に書き込みエラーが検出される。
【００８７】
ステップ７０１を参照すると、第一フロー・チャートのステップ６０１と同じ仕方で書き込み要求が行われる。
【００８８】
ステップ７１０を参照すると、図６中の第一フロー・チャートのステップ６１０と同じ仕方で、指定されたメモリ・ブロックに対するＥＣＬエントリ・インデックスが読み出される。
【００８９】
ＥＣＬエントリ・インデックスが、指定されたメモリ・ブロック中に書き込みエラーがないことを示す（図２および３中の００００などの）第一状態にある場合、ステップ７２０はいかなる追加のオペレーションも導入しない。ＥＣＬエントリ・インデックスが、指定されたメモリ・ブロック中に単一の書き込みエラーがあることを示す（図２および３中の０００１などの）第二状態にある場合、ステップ７２０は、その単一ビット書き込みエラーを補正するオペレーションを有効にする。例えば、単一ビットの書き込みエラーを補正をするオペレーションは、ターゲット・データを指定されたメモリ・ブロックに格納しようとする前にターゲット・データの全ビットを反転させる補数オペレーションとすることができる。
【００９０】
ＥＣＬエントリ・インデックスが第一状態または第二状態にない場合は、これまでに指定されたメモリ・ブロック中に２つ以上の書き込みエラーが検出されており、ＥＣＬエントリ・ブロック１２０内の、あるＥＣＬエントリがその指定されたメモリ・ブロックに関連付けられている。ステップ７２０で、指定されたメモリ・ブロックにマップされた、すなわち関連付けされたＥＣＬエントリのアドレスを、対応するポインタ・ビット・ブロック１１４の内容すなわちＥＣＬエントリ・インデックスから、図２および３で示したような２の値の減算など所定のアルゴリズムによって導出することができる。指定されたメモリ・ブロックにマップされたＥＣＬエントリの内容は、第二フロー・チャート７００中で用いられる異なったエラー訂正アルゴリズムに起因して、第一フロー・チャート６００の内容とは異なっている。具体的には指定されたメモリ・ブロックにマップされたＥＣＬエントリは、故障用キャッシュおよび補数ビットを含む。ステップ７２０で、故障用キャッシュおよび補数ビットに関する情報が解析されて、故障位置およびパーティション情報が判定される。
【００９１】
第一フロー・チャート６００の方法におけるのと同様に、各ポインタ・ビット・ブロックは、エラーの数またはマップされたＥＣＬエントリ・インデックスを示す、ｉｎｔ［ｌｏｇ２（Ｅ）］個のビットを有することができる。ＥＣＬエントリ・インデックスが０の場合、対応するデータ・ビット・ブロック１１２は０のエラーを有する。ＥＣＬエントリ・インデックスが１の場合、対応するデータ・ビット・ブロック１１２は１つのエラーを有する。ＥＣＬエントリ・インデックスが２以上Ｅ−１以下の値を有する場合、マップされたＥＣＬエントリ、すなわち指定されたメモリ・ブロックに関連付けられたＥＣＬエントリが存在し、そのアドレスは、ＥＣＬエントリ・インデックスの値から２を減じたものである。
【００９２】
ステップ７３０を参照すると、ターゲット・データは、当初の形もしくは変更された形で、指定されたメモリ・ブロックのデータ・ビット・ブロック１１２中に書き込まれる。具体的には、ＥＣＬエントリ・インデックスが、指定されたメモリ・ブロック中に書き込みエラーがないことを示す第一状態にある場合にあっては、ターゲット・データは、当初の形で指定されたメモリ・ブロックのデータ・ビット・ブロック１１２中に書き込まれる。ＥＣＬエントリ・インデックスが、指定されたメモリ・ブロック中に単一の書き込みエラーがあることを示す第二状態にある場合にあっては、ターゲット・データは、ターゲット・データから導き出された変更された形で指定されたメモリ・ブロックのデータ・ビット・ブロック１１２に書き込まれ、この変更の形は、例えば、当初のターゲット・データの補数とすることができる。ＥＣＬエントリ・インデックスが第一状態または第二状態になく、ＥＣＬエントリ・ブロック１２０内のあるＥＣＬエントリが指定されたメモリ・ブロックに関連付けられている場合、ターゲット・データは別のフォーマットに変換され、このフォーマットは、ＥＣＬエントリ・ブロック１２０内のマップされたＥＣＬエントリの内容を使ったエラー訂正の後、当初のターゲット・データを再生する。マップされたＥＣＬエントリの内容、具体的にはマップされたＥＣＬエントリの修復ビット中のデータは、このデータ書き込みステップの過程で適切に変更される。
【００９３】
ステップ７４０を参照すると、指定されたメモリ・ブロックのデータ・ビット・ブロック１１２の中に書き込まれたデータが（必要に応じて、任意のマップされたＥＣＬエントリの内容を用いる適切なエラー訂正を用いて）読み出され、当初のターゲット・データに対して検証される。
【００９４】
ステップ７４５を参照すると、ＥＣＬコントローラ１４０または中央処理装置（ＣＰＵ）で実行される任意の関連プログラムが、指定されたメモリ・ブロック中にターゲット・データを格納する過程で書き込みエラーが生じているかどうかを判定する。データ・ビット・ブロック１１２と、対応するポインタ・ビット・ブロック１１４と、存在する場合、いずれかのマップされたＥＣＬエントリとから読み出されたデータが、当初のターゲット・データと一致する場合、書き込みエラーはない。プロセスの流れはステップ７９０に続き、ＥＣＬコントローラまたはプログラムによって、書き込みの成功完了の信号を生成することができる。
【００９５】
データ・ビット・ブロック１１２と、対応するポインタ・ビット・ブロック１１４と、存在する場合、いずれかのマップされたＥＣＬエントリとから読み出されたデータが、当初のターゲット・データと一致しない場合、少なくとも一つの書き込みエラーがある。指定されたメモリ・ブロックのデータ・ビット・ブロック１１２中にある書き込みエラーが合計で一つだけなので、例えば、ＥＣＬエントリ・ブロック１２０を用いることなくこの書き込みエラーの訂正が可能な場合、対応するポインタ・ビット・ブロック中のＥＣＬエントリ・インデックスが適切に変更され、指定されたメモリ・ブロックにターゲット・データを正しく書き込むための別の試みが行われる。この試みが成功した場合、プロセスの流れはステップ７９０に続き、ＥＣＬコントローラまたはプログラムによって、書き込みの成功完了の信号を生成することができる。
【００９６】
例えば、データ・ビット・ブロック１１２中に合計で複数の書き込みエラーがあるので、ＥＣＬエントリ・ブロック１２０を用いることなく、この書き込みエラーの訂正ができない場合、プロセスの流れはステップ７５５に続く。データ・ビット・ブロック１１２中の書き込みエラーの合計数を、本明細書では（ｋ＋１）で表すものとする。データ・ビット・ブロック１１２中の前もって知られたエラーの数は、（ｋ＋１）より小さい数字で、０以上ｋ以下の数である。ステップ７４５の終了までには、少なくとも一つの書き込みエラーの検出が完了する。
【００９７】
第二フロー・チャート７００の第二ステージにおいて、指定されたメモリ・ブロック中の書き込みエラーを訂正するために利用可能なＥＣＬエントリが、ＥＣＬエントリ・ブロック１２０内で特定される。この利用可能なＥＣＬエントリは、エラー含有メモリ・ブロック中、すなわち指定されたメモリ・ブロック中の書き込みエラーの合計数（ｋ＋１）と同じ数のビット、またはそれより大きな数のビットに対しエラー訂正を提供するように設定された、ＥＣＬエントリの少なくとも一つのサブセットの中で特定される。
【００９８】
少なくとも（ｋ＋１）の書き込みエラーを訂正するためのＥＣＬエントリが利用可能かどうかは、ステップ７５５で判定することができ、第一フロー・チャート６００のステップ６５５と同じオペレーションが行われる。
【００９９】
ＥＣＬエントリ・ブロック１２０中の全エントリを探索した後に利用可能なＥＣＬエントリを見つけることができない場合、プロセスの流れはステップ７９９に進む。この場合、エラー訂正が不可能であることを示す信号が生成され、中央処理装置（ＣＰＵ）などの適切なデバイスに送信される。
【０１００】
利用可能なＥＣＬエントリが見つかった場合、プロセスの流れはステップ７６０に進み、第一フロー・チャート６００のステップ６６０と同じオペレーションが行われる。
【０１０１】
ステップ７７０を参照すると、少なくとも（ｋ＋１）の書き込みエラーを訂正するように設定された、ＥＣＬエントリのサブセット中の新規ＥＣＬエントリが、少なくとも一つの新しい書き込みエラーを包含することが判明した指定されたメモリ・ブロック中の書き込みエラーを訂正するために割り当てられる。前述のように、少なくとも（ｋ＋１）の書き込みエラーを訂正するように設定された、ＥＣＬエントリのサブセットは、指定されたメモリ・ブロック中の（ｋ＋１）の書き込みエラーを訂正する能力のある新規のまたは既存の「利用可能なＥＣＬエントリ」の有無の如何によって、（ｋ＋１）の書き込みエラーを訂正するように設定された、ＥＣＬエントリのサブセット、あるいは（ｋ＋ｊ）の書き込みエラーを訂正するように設定された、ＥＣＬエントリのサブセットとすることができる。
【０１０２】
具体的には、新規ＥＣＬエントリの内容は、指定されたメモリ・ブロックのデータ・ビット・ブロック１１２中に格納された生データをエラー訂正するのに必要な情報をコード化するため、適切に変更される。例えば、新規ＥＣＬエントリの内容には、再パーティション情報およびデータ・ビット・ブロック１１２に対する適切な補数ビットを含めることができ、これらはＳＡＦＥＲ法を用いるエラー訂正を提供するために必要である。この再パーティション情報は、ＳＡＦＥＲ法で用いられるパーティション・カウンタおよびパーティション・フィールドを含む。
【０１０３】
ステップ７８０を参照すると、指定されたメモリ・ブロックのポインタ・ビット・ブロック１１４に対するＥＣＬエントリ・インデックスが、例えば、２と新規ＥＣＬエントリのアドレスとの和に等しい値を格納することによって、新規ＥＣＬエントリを参照するために変更される。
【０１０４】
次いでプロセスの流れはステップ７３０に進み、ポインタ・ビット・ブロック１１４および新規ＥＣＬエントリに具現された新しいエラー訂正スキームを用いて、ターゲット・データを、選択されたメモリ・ブロック中に正しく書き込めることを確認する。
【０１０５】
具体的な実施形態に関連して本開示を説明してきたが、前述の説明を考慮すれば、当業者には数多くの代替案、修改案、および変形案が自明なことは明らかであろう。したがって、本開示は、本開示および添付の請求項の範囲および趣旨内に含まれる、かかる全ての代替案、修改案、および変形案を網羅することが意図されている。
【図１】
2014518423.tif 000004
【図２】
2014518423.tif 000005
【図３】
2014518423.tif 000006
【図４】
2014518423.tif 000007
【図５】
2014518423.tif 000008
【図６】
2014518423.tif 000009
【図７】
2014518423.tif 000010
【国際調査報告】
2014518423.tif 000011