(57)【要約】  メモリアレイに連結されたコントローラにて、方法は、メモリアレイから読み込まれた第１のグループのデータビットが、誤り訂正符号（ＥＣＣ）エンジンにより訂正不能な誤りを含むという通知を受け取るステップを含む。特定のビット値を有する第１のグループのデータビットのカウントが、特定のビット値を有するデータビットの先行カウントと比較されるとよい。カウントが先行カウントを上回るという判断に応答して、第１のグループのデータビットのうち、特定のビット値を有し、第２のグループのデータビットの訂正されたデータビットと同じメモリセルに対応するビットが識別される。ＥＣＣエンジンに提供されるとよい、データビットの調整されたグループを生成するために、第１のグループの識別されたビットの値が変更されるとよい。
2013518345.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
メモリアレイに連結されたコントローラにて、
前記メモリアレイから読み込まれた第１のグループのデータビットが、誤り訂正符号（ＥＣＣ）エンジンにより訂正不能な誤りを含むという通知を受け取るステップと、
特定のビット値を有する前記第１のグループのデータビットのカウントと、特定のビット値を有するデータビットの先行カウントとを比較するステップと、
前記カウントが前記先行カウントを上回るという判断に応答して、前記第１のグループのデータビットのうち、特定のビット値を有し、第２のグループのデータビットの訂正されたデータビットと同じメモリセルに対応するビットを識別するステップと、
データビットの調整されたグループを生成するために、前記第１のグループの識別されたビットの値を変更するステップと、
データビットの調整されたグループを、前記ＥＣＣエンジンに提供するステップと、
を含む方法。
【請求項２】
請求項１記載の方法において、
前記メモリアレイは、複数のマルチレベルセルを含む方法。
【請求項３】
請求項１記載の方法において、
識別されたビットを、ルックアップテーブルに基づき選択するステップをさらに含む方法。
【請求項４】
請求項３記載の方法において、
前記ルックアップテーブルは、ハミング距離に少なくとも部分的に基づく方法。
【請求項５】
請求項３記載の方法において、
前記ルックアップテーブルは、前記カウントに少なくとも部分的に基づく方法。
【請求項６】
請求項３記載の方法において、
前記ルックアップテーブルは、状態値に少なくとも部分的に基づく方法。
【請求項７】
請求項１記載の方法において、
前記第１のグループ内の反転するいくつかのビットを判断するステップをさらに含む方法。
【請求項８】
請求項１記載の方法において、
前記第１のグループが訂正可能であると前記ＥＣＣエンジンが判断するまで、前記第１のグループ内のビットを反復して反転するステップをさらに含む方法。
【請求項９】
方法であって、
メモリアレイに連結されたコントローラにて、
前記メモリアレイのワード線の少なくとも一部に対応するビットのグループの中で、特定のビット値を有するものとして識別されるビットの第１のカウントを格納するステップと、
誤り訂正符号（ＥＣＣ）エンジンにより訂正不能なデータをもたらす、前記ワード線の読み込みに応答して、
前記第１のカウントを取得するステップと、
前記第１のカウントと、特定のビット値を有し、前記ワード線から読み込まれたデータに基づき判断されるビットの第２のカウントとを比較するステップと、
前記比較から、訂正するいくつかのビットを判断するステップと、
を含む方法。
【請求項１０】
請求項９記載の方法において、
前記ワード線に関連するいくつかのカウントを、前記ワード線内のいくつかの誤りが増加するにつれて増加させるステップをさらに含む方法。
【請求項１１】
請求項１０記載の方法において、
１が０に変化した誤りおよび０が１に変化した誤りのうちの１つのみが前記ビットのグループ内に現れるように、いくつかのカウントを判断するステップをさらに含む方法。
【請求項１２】
請求項９記載の方法において、
前記第１のカウントを、前記メモリアレイ内のログファイルに格納するステップをさらに含む方法。
【請求項１３】
請求項９記載の方法において、
誤りのしきい値数を上回るいくつかの誤りを前記ワード線が有するという通知を受け取るステップと、前記通知を受け取るのに応答して、前記第１のカウントを格納するステップとをさらに含む方法。
【請求項１４】
請求項９記載の方法において、
前記ビットの第１のカウントは、前記コントローラまたは前記メモリアレイにて格納される方法。
【請求項１５】
請求項９記載の方法において、
前記メモリアレイは、複数のマルチレベルセルを含む方法。
【請求項１６】
請求項９記載の方法において、
前記メモリアレイのセルの状態を訂正するステップをさらに含む方法。
【請求項１７】
請求項１６記載の方法において、
ルックアップテーブルに基づき前記メモリアレイのセルの状態を訂正するステップをさらに含む方法。
【請求項１８】
請求項１７記載の方法において、
前記ルックアップテーブルは、ハミング距離および前記第２のカウントのうちの少なくとも１つに、少なくとも部分的に基づく方法。
【請求項１９】
メモリデバイスであって、
メモリアレイと、
前記メモリアレイのメモリセルのマルチビット値の特定のビットの誤りの可能性を示し、前記メモリセルの他のビットのいくつかの誤りに少なくとも部分的に基づくデータを格納する少なくとも１つの誤り確率テーブルと、
前記メモリアレイに連結されたコントローラであって、前記コントローラは前記メモリセルの他のビットの誤りを検出するように構成された誤り訂正符号（ＥＣＣ）エンジンを備え、前記コントローラは訂正する特定の値のいくつかのビットを判断するように構成され、前記ビットは前記メモリアレイにおける読み込み動作を介して取得され、いくつかのビットは特定の値を有する取得されたビットのカウントとビット値の格納されているカウントとを比較することに基づき判断され、前記コントローラは訂正する少なくとも１つのビットを識別するために、前記少なくとも１つの誤り確率テーブルにアクセスするようにさらに構成される、コントローラと、
を備えるメモリデバイス。
【請求項２０】
請求項１９記載のメモリデバイスにおいて、
前記少なくとも１つの誤り確率テーブルは、読み込まれた値から部分的に訂正された値へのハミング距離によりインデックス付けされるメモリデバイス。
【請求項２１】
請求項１９記載のメモリデバイスにおいて、
前記少なくとも１つの誤り確率テーブルは、部分的に訂正された値によりインデックス付けされるメモリデバイス。
【請求項２２】
請求項１９記載のメモリデバイスにおいて、
前記少なくとも１つの誤り確率テーブルは、前記コントローラにて格納されるメモリデバイス。
【請求項２３】
請求項１９記載のメモリデバイスにおいて、
前記少なくとも１つの誤り確率テーブルは、前記メモリアレイにて格納されるメモリデバイス。
【請求項２４】
請求項１９記載のメモリデバイスにおいて、
前記格納されているカウントは、前記コントローラにあるメモリに格納されるメモリデバイス。
【請求項２５】
請求項１９記載のメモリデバイスにおいて、
前記格納されているカウントは、前記メモリアレイにて格納されるメモリデバイス。
【請求項２６】
請求項１９記載のメモリデバイスにおいて、
前記メモリアレイは、フラッシュマルチレベルセルアレイを含むメモリデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的に、データ処理およびストレージシステムに関し、特に、格納または送信されたデータ内の誤りを検出および訂正することに関する。
【背景技術】
【０００２】
コンピュータデータストレージシステムは、典型的には、データの完全性を改善する誤り訂正符号（ＥＣＣ）プロセスを含む。例えば、ＥＣＣは、読み込み動作中、アクセスされるデータビット（例えば、プロセッサによって取得される情報を表すメモリセル）が誤った状態を有するかどうかを判断するために使用され得る。ＥＣＣ処理は、いくつかの誤りビットを検出し、訂正することによって、メモリデバイスの動作の信頼性を高めることもできる。訂正されるビットのしきい値数は、適用される特定のＥＣＣ技法の訂正容量による。ＥＣＣによって進歩がもたらされてはいるが、適用されるＥＣＣ技法の訂正容量を超える誤りを訂正できることが望ましい。
【発明の概要】
【０００３】
格納または送信されたデータ内の誤りを識別して訂正することができるシステムおよび方法が開示される。特定の実施形態は、メモリの、ワード線またはデータの１つ以上のページから読み込まれた、データ内にあるいくつかの誤りを追跡するとよい。読み込まれたデータ内のいくつかの誤りが、誤り訂正符号（ＥＣＣ）エンジンの能力を上回ると、ＥＣＣエンジンにより訂正可能なデータを与えるために調整する１つ以上のビットを判断するように、訂正モジュールが使用されるとよい。例えば、読み込まれるワード線は、ワード線の第１の論理ページ内の第１のビットおよび第２の論理ページ内の第２のビットなどの複数のビットを格納する、マルチレベルセル（ＭＬＣ）を含むとよい。第１のページは、ＥＣＣエンジンにより訂正不能な誤りを有するとよく、第２のページは、ＥＣＣエンジンにより訂正される誤りを有するとよい。訂正モジュールは、第２のページ内の識別される誤りに少なくとも部分的に基づき、第１のページ内の１つ以上のビットを選択するとよい。例えば、特定のＭＬＣが第１のページ内にビット誤りを有する可能性は、ＭＬＣが他のページ内で有するいくつかのビット誤りまたはビット誤りのタイプと相関関係にあることもある。第１のページは、第１のページ内の選択されたビットの値を変更することによって調整されるとよく（例えば、論理「１」から論理「０」または論理「０」から論理「１」に変更される）、調整された第１のページは、調整された第１のページが訂正可能かどうかを判断するために、ＥＣＣエンジンに再送されるとよい。第１のページ内のビットを選択して反転するプロセスは、調整された第１のページがＥＣＣエンジンにより訂正可能になるまで繰り返されることが可能である。
【０００４】
メモリデバイスは、そのＥＣＣエンジンの訂正容量に、特定のワード線のいくつかの誤りが近づいていると判断すると、ワード線内の誤りのタイプおよび位置の識別を支援するために追加の情報を格納するとよい。例えば、いくつかの誤りがしきい値に達すると、ワード線内のビットのグループ内の、識別されたいくつかの１のカウントが格納されるとよい。ワード線またはページ（単数または複数）内のセルは、カウントに従ってグループ分けされてもよい。例えば、ページ内のいくつかの誤りが増加するにつれて、グループの数が増加してもよい。ページの各グループのいくつかの１のカウントが、以前の読み込みから保存された、そのグループのいくつかの１のカウントと比較されるとよい。この比較は、各グループ内で反転されるビットの値とビットの数とを判断するために使用されるとよい（例えば、読み込みのカウントが、格納されているカウントを２上回ると、グループ内の２つの１が０に反転されることになる）。グループ内のどのビットが誤りの可能性が最も高いかに基づいて反転するビット（単数または複数）を判断するために、確率テーブルが使用されるとよい。
【０００５】
他のページ内の訂正されたビット誤りなど、他の１つ以上のビット誤りを有すると識別されたＭＬＣに対応するビットを反転する決定を下すために、確率テーブルが、グループ毎のいくつかの１とともに使用されるとよい。選択されたビットが反転された後、選択されたビットを反転する決定をベリファイするように、ＥＣＣ手順が実行されるとよい。このプロセスは、反復型であるとよく、ＥＣＣエンジンが元のデータを回復できるとき、または所定数の反復が完了したとき、または他の終了基準に従い、終了するとよい。
【図面の簡単な説明】
【０００６】
【図１】メモリアレイから取得されたデータにおける誤りを識別して訂正するように構成されたコントローラを含むシステムの特定の例示の実施形態のブロック図である。
【図２】誤りビットを反転するために、誤り訂正符号計算および確率ルックアップテーブルを使用して訂正される状態を有するメモリセルを示す一般図である。
【図３】読み込みのカウントおよび誤り確率テーブルを含むメモリアレイを含むシステムの特定の実施形態のブロック図である。
【図４】メモリセル内の誤りを分析して訂正する方法の特定の実施形態の流れ図である。
【図５】メモリセル内の誤りを分析して訂正する方法の別の特定の実施形態の流れ図である。
【図６】ルックアップテーブルに基づきメモリセル内の誤りを訂正する方法の特定の実施形態の流れ図である。
【発明を実施するための形態】
【０００７】
図１は、メモリアレイ１０２（例えば、フラッシュマルチレベルセルアレイ）から読み込まれたデータ内の、ＥＣＣエンジン１１８の訂正容量を上回る誤りを訂正するように構成されたコントローラ１０４を含むシステム１００の特定の例示の実施形態のブロック図である。コントローラ１０４は、ＥＣＣエンジン１１８により訂正不能なデータ内の調整するべき１つ以上のビットを判断するように構成された訂正モジュール１３０を含む。
【０００８】
メモリアレイ１０２は、１つ以上のワード線（単数または複数）１０８を含むとよい。ワード線（単数または複数）１０８は、メモリアレイ１０２の行を表すこともでき、１つ以上のマルチレベルセル（ＭＬＣ）１４４と、メモリアレイ１０２の行内のＭＬＣ１４４のコントロールゲートに連結されている導電線とを含む。メモリアレイ１０２は、読み込み動作１４６などを介して、通信経路１５６上でコントローラ１０４とデータの送受信を行うこともできる。
【０００９】
コントローラ１０４は、ホストデバイスなどの外部デバイス１０６に応答するとよく、メモリアレイ１０２に対する書き込みおよび読み込みアクセスを可能にするとよい。コントローラ１０４は、ＥＣＣエンジン１１８により訂正不能なデータを調整し、調整されたデータを訂正のためにＥＣＣエンジン１１８に再び提供するように構成された訂正モジュール１３０を含む。コントローラ１０４はさらに、バッファ１６２、訂正済みバッファ１２４、ログファイル１３４および誤り確率テーブル１３８を含む。
【００１０】
ＥＣＣエンジン１１８は、リードソロモン（ＲＳ）、ボーズチョドーリオッケンジェム（ＢＣＨ）、低密度パリティチェック（ＬＤＰＣ）、その他１つ以上のＥＣＣプロセスまたはその任意の組み合わせなどの誤り訂正方式に基づき、誤りを復号化して訂正するように構成されるとよい。ＥＣＣエンジン１１８は、ＥＣＣエンジン１１８の誤り訂正容量以内のいくつかの誤りを有する受け取られたデータを復号化するように構成されるとよい。例えば、誤り訂正容量は、符号化されたデータの５１２バイト毎に１２ビットの誤りであってもよい。ＥＣＣエンジン１１８は、訂正されたデータ（すなわち、誤りがなく訂正の必要がないデータまたはＥＣＣエンジン１１８によって訂正されたデータ）を、経路１２０を介して訂正済みバッファ１２４に伝達するように構成されるとよい。ＥＣＣエンジン１１８は、ＥＣＣエンジン１１８により訂正不能なデータを、経路１１６を介してバッファ１６２に伝達するように構成されるとよい。
【００１１】
バッファ１６２は、ＥＣＣエンジン１１８により訂正不能なデータを格納するように構成されるとよく、訂正済みバッファ１２４は、ＥＣＣエンジン１１８により訂正されたデータを格納するように構成されるとよい。例えば、ワード線１０８が読み込まれると、ワード線１０８から読み込まれた第１のグループ１１０のビットは、ＥＣＣエンジン１１８により訂正不能でバッファ１６２にて格納されてもよく、ワード線１０８から読み込まれた第２のグループ１２６のビットは、ＥＣＣエンジン１１８によって訂正され、訂正済みバッファ１２４にて格納されてもよい。
【００１２】
第１のグループ１１０は、訂正されていない１つ以上のページ１１２を含むとよく、第２のグループ１２６は、訂正された１つ以上のページ１２８を含むとよい。例示として、各ＭＬＣ１４４は、３ビット値に対応する状態を有し、各ＭＬＣ１４４の下位ビットが第１の論理ページに割り当てられ、中位ビットが第２の論理ページに割り当てられ、上位ビットが第３の論理ページに割り当てられてもよい。各ページは、個々に符号化され、独立してＥＣＣエンジン１１８にて処理されてもよい。ワード線１０８の１つ以上のページは、ＥＣＣエンジン１１８により訂正不能で、訂正されていないページ１１２としてバッファ１６２に格納されることもある一方で、ワード線１０８の他の１つ以上のページは、ＥＣＣエンジン１１８によって訂正され、訂正済みバッファ１６２に訂正されたページ１２８として格納されることもある。
【００１３】
訂正モジュール１３０は、経路１４０を介して、バッファ１６２にある第１のグループ１１０のビットにアクセスするように構成され、第１のグループ１１０の１つ以上のビットを反転して、ビットの調整されたグループ１７０を生成するように構成されている。ビットの調整されたグループ１７０は、処理のためにＥＣＣエンジン１１８に提供される。ビットの調整されたグループ１７０がＥＣＣエンジン１１８によって訂正可能であれば、訂正および復号化されたデータが、ワード線１０８に対する読み込みアクセスの要求への応答として、外部デバイス１０６に提供されるとよい。ビットの調整されたグループ１７０がＥＣＣエンジン１１８によって訂正可能でなければ、第１のグループ１１０の他の１つ以上のビットが、反復プロセスにおいて訂正モジュール１３０によって反転されて、ＥＣＣエンジン１１８により訂正可能な第１のグループ１１０のデータビットが与えられるとよい。
【００１４】
訂正モジュール１３０は、第１のグループ１１０のビット値のカウント１１４と、ログファイル１３４から経路１５８を介して取得される、格納されている先行カウント(prior count)１３６とを比較することによって、第１のグループ１１０内の、訂正するべき特定の値のビットの数１４８を判断するように構成されるとよい。カウント１１４は、訂正モジュール１３０によって生成されても、コントローラ１０４内の他のハードウェアによって生成されてもよい。格納されている先行カウント１３６は、先行する書き込み動作中にワード線１０８に書き込まれるデータから生成されても、ワード線１０８から前に読み込まれてＥＣＣエンジン１１８によって訂正されたデータから生成されてもよい。
【００１５】
例えば、カウント１１４は、訂正されていない第１のグループ１１０内のいくつかの１を示してもよく、格納されている先行カウント１３６は、すべての誤りが訂正された後に第１のグループ１１０内に存在するべきいくつかの１を示してもよい。カウント１１４が、格納されている先行カウント１３６を１上回る場合、第１のグループ１１０内の「０」値のビットが誤って「１」値に変化し、訂正モジュール１３０は、「０」値に反転する第１のグループ１１０内の「１」値のビットを選択するとよい。格納されている先行カウント１３６がカウント１１４を上回る場合、「１」値のビットが誤って「０」値に変化し、訂正モジュール１３０は、「１」値に反転する第１のグループ１１０内の「０」値のビットを選択するとよい。訂正モジュール１３０は、カウント１１４と、格納されている先行カウント１３６との差に等しくなるように、反転するビットの数１４８を選択するように構成されるとよい。カウント１１４および格納されている先行カウント１３６は、「１」値のカウントとして記載されているが、その代わりとして、カウント１１４および格納されている先行カウント１３６は、「０」値のカウントであってもよく、訂正モジュール１３０が、０のカウントの比較に基づいて、反転するいくつかのビットおよびビットの値を判断するように構成されてもよい。
【００１６】
訂正モジュール１３０は、選択されたビットが誤っている可能性に従って、反転される第１のグループ１１０内の特定のビットを選択するとよい。例えば、訂正モジュール１３０は、誤り確率テーブル１３８のうちの少なくとも１つにアクセスして、訂正する第１のグループ１１０の少なくとも１つのビットを識別するように構成されてもよい。誤り確率テーブル１３８は、マルチビットセルの他のビットにおける誤り１５２が検出および／または訂正されたかどうかに基づき、マルチビットセル（例えば、ＭＬＣ）のビットが誤っている可能性が高いかどうかに対応する、誤りデータ１５０を含む。
【００１７】
例えば、ＭＬＣは、訂正されていないページ（単数または複数）１１２内の第１のビットの値および訂正されたページ（単数または複数）１２８内の第２のビットによって表される状態（例えば、しきい電圧）を有するとよい。ＭＬＣの状態は、ハードウェア障害（壊れたワード線または他の接続など）が原因で誤って読み込まれることも、他のイベント（隣接したワード線に対する書き込み動作によって生じるプログラム妨害など）によって間違いを含むこともある。訂正されたページ（単数または複数）１２８内でビット誤りをもたらすイベントは、訂正されていないページ（単数または複数）１１２内でもビット誤りをもたらし得る。図２〜３に示されているように、特定のビットが誤っている可能性は、ＭＬＣの他のビットにおけるいくつかの誤り１５２、特定のビットの値、ＭＬＣの１つ以上の状態値１６０、１つ以上の他の要素またはその任意の組み合わせと相関関係にあることもある。
【００１８】
訂正モジュール１３０は、第２のグループ１２６のどのビットが訂正されたかを示す訂正データを、ＥＣＣエンジン１１８から受け取るように構成されるとよい。訂正モジュール１３０は、第２のグループ１２６の訂正されたビットと共通のＭＬＣを共有する、第１のグループ１１０の各ビットを発見するように構成されるとよい。訂正モジュール１３０は、第１のグループ１１０内の発見された各ビットに関して、誤り確率テーブル１３８におけるルックアップ動作を開始して、ビットが誤っている可能性を示すデータを取得するとよい。
【００１９】
例えば、訂正モジュール１３０は、経路１４２を介して訂正済みバッファ１２４にアクセスして、第１のグループ１１０の特定のビットとＭＬＣを共有している第２のグループ１２６内の１つ以上のビットのビット値を取得するとよい。訂正モジュール１３０は、取得したビット値（単数または複数）を処理し、ＭＬＣのいくつかの訂正されたビット、ＭＬＣの１つ以上のビット値またはその他の情報を使用して、誤り確率テーブル１３８にてルックアップ動作を実行し、誤り確率テーブル１３８にてエントリを発見するとよい。誤り確率テーブル１３８にて発見されたエントリの誤り可能性値が訂正モジュール１３０に返されて、第１のグループ１１０の特定のビットに関連付けられるとよい。
【００２０】
訂正モジュール１３０は、最も高い誤り可能性値を有すると示されたビットを選択することによって、第１のグループ１１０内で訂正する、判断された数１４８のビットを選択してもよい。例えば、訂正するビットの数１４８がＮであると判断されると、Ｎ個の最も高い誤り可能性値に対応するＮビットが選択されるとよい。訂正モジュール１３０は、第１のグループ１１０のビットを読み込み、選択されたビットを反転して、調整されたグループ１７０を生成し、ＥＣＣエンジン１１８における、調整されたグループ１７０の復号化を開始するとよい。
【００２１】
動作中、ワード線１０８の読み込み動作が実行され得る。ＥＣＣエンジン１１８は、ワード線１０８の各論理ページを無事に復号化するとよく、各ページの訂正されたいくつかの誤りを示す訂正データを生成するとよい。訂正モジュール１３０は、訂正されたいくつかの誤りと、誤りのしきい値数とを比較して、ワード線１０８またはワード線１０８の１つ以上のページが、後の読み込み動作において、ＥＣＣエンジン１１８の訂正能力を上回る危険があるかどうかを判断するとよい。
【００２２】
訂正されたいくつかの誤りがしきい値を満たすのに応答して、訂正モジュール１３０は、ワード線１０８またはワード線１０８のページを１つ以上のグループに論理的に分けて、各グループの１のカウントをログファイル１３４に格納するとよい。したがって、ログファイルに格納されるカウントは、訂正され誤りのないデータの表現（すなわち、ＥＣＣエンジン１１８による訂正の成功の後）に対応する。グループの数は、１が０に変化した誤りおよび０が１に変化した誤りの両方が同じグループで生じる可能性が低くなるように判断されるとよい。例えば、ＥＣＣエンジン１１８の訂正容量が、５１２バイトページ毎に１２ビットであれば、各ページは、１２以上のグループに論理的に分けられてもよい。後の読み込み動作中、ページ内の１２を超える誤りにより、ページがＥＣＣエンジン１１８により訂正不能である場合、各グループは、統計的に、１つのみの誤りを有する可能性が高いとよい。ログファイル１３４は、コントローラ１０４内に格納されるものとして示されているが、代わりにメモリアレイ１０２にて格納されてもよい。
【００２３】
ワード線１０８またはワード線１０８の１つ以上のページに関して、各グループ内で特定の値を有するビットの数に対応するカウントを格納した後、ワード線１０８におけるその後の読み込み動作が、ＥＣＣエンジン１１８の訂正容量よりも多い数の誤りを有するデータのページを返し得る。ＥＣＣエンジン１１８は、未収束誤り信号(non-convergence error signal)などの信号を生成するとよく、それに応答して、読み込まれたデータの訂正不能な１つ以上のページがバッファ１６２にて格納されるとよい。ワード線１０８の訂正されたページは、訂正済みバッファ１２４にて格納されるとよい。訂正されたデータに対応する誤り位置データも、ＥＣＣエンジン１１８によって生成されるとよく、訂正済みバッファ１２４にて格納されるとよい。
【００２４】
訂正モジュール１３０は、格納されている先行カウント１３６など、訂正不能なページに対応するデータのグループ内にある１の、格納されているカウントを取得するとよい。訂正モジュール１３０は、各グループの最近のカウント（カウント１１４など）と、グループの格納されている先行カウントとを比較することによって、バッファ１６２にて格納されているデータの個々のグループに関して、反転するいくつかのビットおよびビット値を判断するとよい。訂正される１つ以上のビット誤りを有すると示される各グループに関して、誤り訂正モジュール１３０は、誤り確率テーブル１３８にアクセスして、確率ルックアップテーブル結果に基づき誤っている可能性が最も高いと示されるビットを選択することによって、反転する１つ以上のビットを選択するとよい。
【００２５】
訂正モジュール１３０は、調整されたグループ１７０と、調整されたグループ１７０を含めた復号化動作を開始するためのＥＣＣエンジン１１８に対する信号とを生成するとよい。例えば、訂正モジュール１３０は、各グループの選択されたビットが反転されていてバッファ１６２内のデータに対応する、データの調整されたページを生成してもよい（すなわち、調整されたページは、１つ以上の調整されたグループをページ形式で含む）。データの調整されたページは、ＥＣＣエンジン１１８に送られるとよい。別の例として、訂正モジュール１３０は、選択されたビットをバッファ１６２にて反転して、復号化のためにバッファ１６２を読み込むようにＥＣＣエンジン１１８に指示してもよい（例えば、調整されたグループ１７０はバッファ１６２内に生成される）。
【００２６】
十分な数の誤りビットが反転されると、調整されたデータ内の誤りの残数は、ＥＣＣエンジン１１８の誤り訂正容量内であるとよく、復号化が完了されるとよい。ＥＣＣエンジン１１８は、調整されたデータ内の、訂正された誤りの位置を示すデータを生成するとよい。訂正モジュール１３０は、誤り（モジュール１３０によって反転されたビットおよびＥＣＣエンジン１１８によって訂正されたビット）の総数、誤りの位置、誤り値またはその組み合わせに基づき、ページのグループへの論理分割を更新するとよい。訂正モジュール１３０は、新たなグループに関して１の値の新たなカウントを生成して、ワード線１０８の次の読み込みで使用されるように、グループ分け情報およびカウント情報をログファイル１３４に格納するとよい。
【００２７】
結果として、ワード線１０８から読み込まれるデータがＥＣＣエンジン１１８によって訂正可能でなくなった後でも、ワード線１０８の使用が続けられるとよい。したがって、誤り訂正モジュール１３０を使用せず、ＥＣＣエンジン１１８の訂正容量によって限定されるシステムと比較して、メモリアレイ１０２が、より長い有効寿命を有するとよい。あるいは、またはさらに、コントローラ１０４は、性能がより低いＥＣＣエンジン１１８とともに訂正モジュール１３０を使用して、より性能の高いＥＣＣエンジンの有効誤り訂正容量を保つように設計されてもよく、より性能の高いＥＣＣエンジンと比較して削減された電力消費、デバイスサイズおよび製造費で運用することもできる。
【００２８】
図２は、誤り識別および訂正のために分析されるメモリセルの複数の変形を示す。メモリセルは、図１のメモリアレイ１０２のＭＬＣ１４４などのＭＬＣを含むとよい。図２は、メモリアレイから読み込まれ得る、メモリセルの種々の変形２００、２５０、および２９０を示す。説明を簡単にするために、メモリセルは、最上位ビット、中位ビット、および最下位ビットを含む列形式に配列された３つのビットを含むように示されている。最上位ビットは、第１のページの一部であってもよく、中位ビットは、第２のページの一部であってもよく、最下位ビットは、第３のページの一部であってもよい。第２および第３のページは、ＥＣＣエンジンを使用して訂正されてもよく、第１のページは、ＥＣＣエンジンによって訂正不能であってもよい。
【００２９】
セルの変形２００は、最上位、中位および最下位ビット値の異なる組み合わせを有する、異なる状態２０２、２０４、２０６、２０８、２１０、２１２、２１４および２１６を含む。各状態２０２〜２１６は、メモリセルの異なるしきい電圧範囲に対応するとよい。メモリセルは、初めは、状態２０８に対応する「１０１」として読み込まれてもよい。状態２０８は、「前」値として格納されるとよい。
【００３０】
メモリセルの最上位ビットを含む第１のページは、訂正不能な誤りを含むとよい。セルの変形２５０および２９０は、第２および第３のページがＥＣＣエンジンによって訂正された後に生じ得る２つのシナリオを示す。例えば、セル変形２５０は、状態２０２〜２１６を含む。セル変形２５０の訂正された状態は、「１００」を含むとよく、これは状態２１０に対応する。したがって、第３のページの訂正の結果、第３のビットが「１」から「０」に変化し、第２のビットは変更されない。状態２１０は、「後」値として格納されるとよい。２０８から２１０への状態の変化は、１の状態ポジションの移動を表すことができる。矢印２１８は、「前」状態から「後」状態への移動を示す。移動は、１のハミング距離に対応する。
【００３１】
対照的に、セル変形２９０の訂正された状態は、「１１０」を含むとよく、これは状態２１６に対応する。したがって、変形２９０では、第３のページの訂正の結果、第３のビットが「１」から「０」に変化し、第２のページの訂正の結果、第２のビットが「０」から「１」に変化する。状態２１６は、「後」値として格納されるとよい。２０８から２１６への状態の変化は、２の状態ポジションの移動を表すとよい。矢印２２０は、「前」状態から「後」状態への移動を示す。移動は、２のハミング距離に対応する。
【００３２】
ハミング距離の値は、第１のビットが誤っている確率を判断するために、誤り確率テーブルをアドレス指定するための入力として使用され得る。例えば、セル変形２５０に対応する１のハミング距離が、図１の誤り確率テーブル１３８などの誤り確率テーブル内の値をルックアップするために使用され得る。図１のカウント１１４など、セルを含むグループの１のカウントも、ルックアップ要素として使用されてもよい。図１のコントローラ１０４などのコントローラは、ＥＣＣ計算（例えば、１のハミング距離）およびカウントの誤り確率テーブル入力を使用して、セルの訂正された状態は「０００」であるべきであると判断してもよい。矢印２２２は、正しい状態２１２への、セル状態の生じ得る反転を示す。
【００３３】
別の例では、セル変形２９０に対応する２のハミング距離が、図１の誤り確率テーブル１３８などの誤り確率テーブル内の値をルックアップするために使用され得る。誤り確率テーブルは、図１のカウント１１４など、セルを含むグループの１のカウントも、ルックアップ要素として使用してもよい。図１のコントローラ１０４などのコントローラは、ＥＣＣ計算（例えば、２のハミング距離）およびカウントを含む誤り確率テーブル入力を生成して、セルの訂正された状態が「０１０」であるべきであると判断してもよい。矢印２２４は、正しい状態２１４への、最上位ビットの生じ得る反転を示す。
【００３４】
したがって、セル変形２５０および２９０は、ＥＣＣ計算および確率ルックアップテーブルを使用して誤りビットを反転し、訂正されている状態を有する、メモリセルの例を示す。図１の誤り確率テーブル１３８などの誤り確率テーブルに提供されるデータは、読み込まれた値から部分的に訂正された値へのハミング距離によってインデックス付けされてもよい。比較的小さな処理要件を備えるＥＣＣ方式が使用されてもよく、誤りを迅速に識別可能である。最終的に判断された訂正された状態が、データの完全性を改善するために使用されるとよい。
【００３５】
図３は、データの誤りを識別して訂正するように構成されたシステム３００の別の特定の実施形態を示す。システム３００は、図１のシステム１００に類似しているが、格納されているカウント３１０および誤り確率テーブル３１２がメモリアレイ３０２内に含まれている。図３は、メモリアレイ３０２内に格納されている、第１の格納されているカウント（例えば、格納されているカウント３１０）を示す一方で、図１は、コントローラ１０４内に格納されている、第１の格納されているカウント（例えば、格納されている先行カウント１３６）を示す。図３に示されているように、メモリアレイ３０２は、コントローラ３０４に連結され、ワード線３０８を含む。コントローラ３０４は、図１のコントローラ１０４に類似した機能性を含むとよい。コントローラ３０４は、外部デバイス３０６に連結されている。外部デバイス３０６は、図１の外部デバイス１０６と同じであってもよい。
【００３６】
メモリアレイ３０２は、誤り確率テーブル３１２を含む。誤り確率テーブル３１２は、図１の誤り確率テーブル１３８と同じであってもよい。図３に示されている誤り確率テーブルは、ルックアップテーブル３５０、３５２、３５４および３５６を含む。
コントローラ３０４は、訂正モジュール３１４、バッファ３１６およびＥＣＣエンジン３１８を含むとよい。訂正モジュール３１４は、図１の訂正モジュール１３０と同じであってもよい。バッファ３１６は、図１のバッファ１６２および訂正済みバッファ１２４に対応するとよい。ＥＣＣエンジン３１８は、図１のＥＣＣエンジン１１８と同じであってもよい。
【００３７】
ルックアップテーブル３５０は、ＭＬＣの、検出された他のいくつかの誤りに基づき、ＭＬＣの特定のビットが誤っている確率を判断するために使用され得る。例えば、ＭＬＣが、異なるページにそれぞれ対応する３ビット値を格納し、２つのページが訂正可能であり、第３のページは訂正可能でない場合、第３のページ内の特定のビットにおける誤りの確率は、ＭＬＣの他の２つのビットにおいて検出されたいくつかの誤りと相関関係にあるかもしれない。
【００３８】
ルックアップテーブル３５０は、経路３４６によって示されているように、第１の格納されているカウント３１０と、第２の読み込みのカウントとの差が１と等しく、特定のビット値が１と等しい場合に使用されるとよい。ルックアップテーブル３５２は、３４６にて示されているように、第１の格納されているカウント３１０と、読み込みのカウントとの差が１と等しく、特定のビット値が０と等しい場合に使用されるとよい。ルックアップテーブル３５２は、ＭＬＣ内のいくつかの訂正された誤りを示す列を含む。この列は、ビット誤りの確率を示す列と相互に関連付けられている。
【００３９】
例えば、ＭＬＣにおいて０の誤りが検出された場合、特定のビットが誤っている確率は、「Ａ」と示されている値に対応するとよい。１つの誤りがＭＬＣにおいて検出された場合、特定のビットが誤っている確率は、「Ｂ」と示されている値に対応するとよい。もう１つの例では、２つの誤りがＭＬＣにおいて検出された場合、特定のビットが誤っている確率は、「Ｃ」と示されている値に対応するとよい。例えば、値「Ａ」は、値「Ｂ」よりも小さいとよく、値「Ｂ」は、値「Ｃ」よりも小さいとよい。
【００４０】
ルックアップテーブル３５４は、３４８にて示されているように、第１の格納されているカウント３１０と、読み込みのカウントとの差が１より大きく、特定のビット値が１と等しい場合に使用されるとよい。ルックアップテーブル３５６は、３４８に示されているように、第１の格納されているカウント３１０と、読み込みのカウントとの差が１より大きく、特定のビット値が０と等しい場合に使用されるとよい。ルックアップテーブル３５６は、部分的に訂正された値を示す列を含む。この列は、ビット誤りの確率を示す列と相互に関連付けられている。
【００４１】
例示として、３ビットＭＬＣにおいて、特定のビットが誤っている確率は、他の２つのビットの訂正された値に対応し得る。例えば、３ビットＭＬＣの第１のビットの訂正された値および第２のビットがどちらも「０」である場合、特定のビットが誤っている確率は、「Ｄ」と示されている値に対応するとよい。第１のビットの訂正された値が「０」であり、第２のビットの訂正された値が「１」である場合、特定のビットが誤っている確率は、「Ｅ」と示されている値に対応するとよい。別の例では、第１のビットの訂正された値が「１」であり、第２のビットの訂正された値が「０」である場合、特定のビットが誤っている確率は、「Ｆ」と示されている値に対応するとよい。３ビットＭＬＣの第１のビットの訂正された値および第２のビットがどちらも「１」である場合、特定のビットが誤っている確率は、「Ｇ」と示されている値に対応するとよい。テーブル３５４および３５６は、単一のＭＬＣの正しいビット値および読み込まれたビット値に応じてビット誤りの可能性を示すため、テーブル３５４および３５６は、ＭＬＣの状態に基づき（例えば、ＭＬＣのしきい電圧に基づき）誤りの可能性を反映するとよい。
【００４２】
動作中、メモリアレイ３０２から読み込まれたデータビットがＥＣＣエンジン３１８により訂正不可能な誤りを含むという通知を、コントローラ３０４が受け取ることもある。コントローラ３０４は、誤り確率テーブル３１２のルックアップ値に基づき、かつ格納されているカウント３１０に基づき、訂正モジュール３１４がデータビットの値を変更できるようにするとよい。コントローラ３０４は、ＥＣＣエンジン３１８がデータビットを訂正できるまで、反復してビットを反転するとよい。
【００４３】
図３は、ルックアップテーブル３５０および３５２をいくつかの誤りに基づき示し、ルックアップテーブル３５４および３５６を、部分的に訂正された値に基づき示すが、他の実施形態では、誤りの確率を判断または推定するための根拠として、他の基準が使用されてもよい。例えば、誤り確率テーブル３１２すべてが、部分的に訂正された値によってインデックス付けされてもよく、または誤り確率テーブル３１２すべてが、検出されたいくつかの誤りによってインデックス付けされてもよい。別の例として、誤り確率テーブル３１２は、第１の格納されているカウント３１０と読み込みのカウントとの差から独立していてもよい。さらに、誤り確率テーブル３１２は、３ビット値に対応するように示されているが（例えば、ＭＬＣの８つの状態）、別の実施形態の、メモリセルの状態によって表されるいくつかのビットは、３ビット未満でも３ビット超でもよい。
【００４４】
示されている値「Ａ」、「Ｂ」などの１つ以上は、経験的データに基づき、理論的計算に基づき、計算の単純さおよびテーブルのストレージサイズなどの他の１つ以上の要素に基づき、またはその任意の組み合わせに基づき判断されてもよい。よって、示されている値「Ａ」、「Ｂ」などは、ビット誤りの確率に対応するように記載されているが、他の実施形態では、示されている値「Ａ」、「Ｂ」などの１つ以上は、実際の確率には対応しなくてもよく、代わりに、誤りの相対的可能性を示しても、生じ得る誤りに関してＭＬＣを検査する優先順位の体系を示してもよい。
【００４５】
図４は、メモリセル内の誤りを分析して訂正する方法の特定の実施形態の流れ図である。方法は、概して４００と示され、４０２にてワード線を読み込むことを含む。例えば、図１のコントローラ１０４が、メモリアレイ１０２からワード線（単数または複数）１０８を読み込んでもよい。
方法４００は、４０４にて、訂正不能な誤りを含むページを読み込むことを含むとよい。例えば、図１のコントローラ１０４が、読み込み動作１４６中にメモリアレイ１０２からページ１１２を読み込むとよい。
４０６にて、読み込まれたセルの現在の状態が保存されるとよい。この現在の状態は、「前」状態とラベル付けされるとよい。例えば、図１の第１のグループ１１０およびカウント１１４が、バッファ１６２内に格納されるとよい。
４０８にて、ワード線のコピーが作成されるとよく、訂正可能なページ上の誤りが訂正されるとよい。訂正されたデータのコピーは、「後」とラベル付けされるとよい。例えば、図１のＥＣＣエンジン１１８は、ワード線（単数または複数）１０８の他のページ上の誤りを訂正して、訂正されたデータをページ（単数または複数）１２８として格納するとよい。
方法４００は、４１０にて、訂正されて別の状態に移行されたセルを識別することを含むとよい。例えば、図１の訂正モジュール１３０は、訂正されて別の状態に移行された、ページ（単数または複数）１２８内のＭＬＣ１４４を識別するとよい。訂正されたセルに関する情報は、ＥＣＣエンジン１１８によって訂正モジュール１３０に提供されるとよい。
【００４６】
４１２にて、反転する特定のセルが分析されるとよい。例えば、図１の訂正モジュール１３０は、ＥＣＣエンジン１１８が訂正できないビットのグループの、訂正するべきいくつかのビットを判断することによって、ＭＬＣ１４４を分析するとよい。訂正モジュール１３０は、確率テーブルにおいてルックアップ動作を行って、誤っている可能性が最も高いＭＬＣビットを判断するとよい。訂正モジュール１３０は、判断されたビットを反転して、データをＥＣＣエンジン１１８に送るとよい。ビットのグループがまだ訂正不能であれば、訂正モジュール１３０は、次に反転されるビットを、次のビットに関連する、判断された確率に基づき選択するとよい。
【００４７】
図５は、メモリセル内の誤りを訂正する方法の実施形態の流れ図である。方法は、概して５００と示され、図１のコントローラ１０４など、メモリアレイに連結されたコントローラによって実行されてもよい。方法５００は、５０２にて、メモリアレイから読み込まれた第１のグループのデータビットが、ＥＣＣエンジンにより訂正不能な誤りを含むという通知を受け取ることを含む。例えば、図１のコントローラ１０４は、読み込み動作１４６から、第１のグループ１１０が、ＥＣＣエンジン１１８により訂正不能な誤りを含むと判断してもよい。例示として、図１の訂正モジュール１３０は、ＥＣＣエンジン１１８が第１のグループ１１０の１つ以上のページ（単数または複数）１１２を訂正できなかったことを示す信号を、ＥＣＣエンジン１１８から受け取ってもよい。訂正モジュール１３０はさらに、ＥＣＣエンジン１１８によって無事に訂正された、第２のグループ１２６の１つ以上のページ（単数または複数）１２８で生じている誤りを示す信号を、ＥＣＣエンジン１１８から受け取ってもよい。
【００４８】
５０４にて、特定のビット値を有する第１のグループのデータビットのカウントが、特定のビット値を有するデータビットの先行カウントと比較されるとよい。例えば、図１の訂正モジュール１３０は、通信経路１４０を介してカウント１１４を受け取ってもよい。訂正モジュール１３０は、ログファイル１３４にアクセスし、第１のグループ１１０に対応する格納されている先行カウント１３６を発見し（例えば、第１のグループ１１０のメモリアドレスと、格納されている先行カウント１３６に対応するメモリアドレスとを比較することによって）、格納されている先行カウント１３６をログファイル１３４から取得することなどによって、格納されている先行カウント１３６を受け取ってもよい。訂正モジュール１３０は、減算演算、ビット単位比較演算、またはカウント１１４と格納されている先行カウント１３６との差を判断する別の演算を実行することなどによって、カウント１１４と、格納されている先行カウント１３６とを比較するとよい。特定のビット値は、「０」であってもよく、カウント１１４は、第１のグループ１１０のいくつかの「０」値に対応してもよい。あるいは、特定のビット値は、「１」であってもよく、カウント１１４は、第１のグループ１１０のいくつかの「１」値に対応してもよい。
【００４９】
第１のグループにおいて反転するべきいくつかのビットが、５０６にて判断されるとよい。例えば、図１の訂正モジュール１３０は、格納されている先行カウント１３６からカウント１１４を減算して、訂正するビットの数１４８として減算の結果を代入する結果として、訂正するビットの数１４８を判断してもよい。負値は、１つ以上のビットが、特定の値を有するように反転されるべきであることを示してもよく、正値は、特定の値を有する１つ以上のビットが反転されるべきであることを示してもよい。あるいは、他の１つ以上のプロセスが使用されて、カウント１１４と格納されている先行カウント１３６との差の指標および大きさが判断されてもよい。
【００５０】
カウントが先行カウントを上回るという判断に応答して、第１のグループのデータビットのうち、特定のビット値を有し第２のグループのデータビットの訂正されたデータビットと同じメモリセルに対応するビットが、５０８にて識別されるとよい。例えば、図１のコントローラ１０４は、カウント１１４が格納されている先行カウント１３６を上回るのに応答して、第１のグループ１１０の或るビットが、第２のグループ１２６の訂正されたビットと同じメモリセルに対応すると識別してもよい。
【００５１】
例示として、ＥＣＣエンジン１１８は、ＥＣＣエンジン１１８によって訂正された第２のグループ１２６のビットを示すデータを生成するとよい。訂正モジュール１３０は、ＥＣＣエンジン１１８からこのデータを受け取るとよく、第２のグループ１２６の訂正されたビットに対応する、第１のグループ１１０の１つ以上のビットを発見するとよい。例えば、ＭＬＣ（単数または複数）１４４は、別々のページ上の同じビット位置に各ビット値が関連する、３ビット値に対応する状態を有してもよい（例えば、図２に関して記載したように）。ページ（単数または複数）１２８のうちの１つ以上にある訂正された誤りのビット位置が識別されて、訂正された誤りのビット位置にあるページ（単数または複数）１１２内のビットが、訂正された誤りと同じＭＬＣに対応するものとして識別されてもよい。他の実施形態では、訂正モジュール１３０は、同じＭＬＣ１４４に関連する第１および第２のグループ１１０、１２６の対応するビット間の、他の１つ以上のマッピングに従って、第１のグループ１１０のビットを識別してもよい。
【００５２】
第２のグループ１２６内の訂正された誤りのＭＬＣに対応する、第１のグループ１１０の複数のビットが発見されるとよい。図１の訂正モジュール１３０は、誤り確率テーブル１３８にて複数のルックアップ動作を実行するとよい。各ルックアップ動作は、第１のグループ１１０の対応するビットが誤っている可能性値または確率を返すとよい。訂正モジュール１３０は、第２のグループ１２６内の訂正された誤りと同じＭＬＣに対応する第１のグループ１１０の発見されたビットそれぞれのルックアップ動作を実行して、ルックアップ動作によって返された最大値１つ以上を識別するとよい。返された最大値に関連する、第１のグループ１１０のビット（例えば、確率テーブル１３８によって誤っている可能性が最も高いと示されたビット）が識別されるとよい。
【００５３】
例えば、訂正モジュール１３０は、第２のグループ１２６内の訂正された誤りに対応する第１のグループ１１０内のビット位置を含み、ビット位置のそれぞれに関してルックアップテーブルの結果を含む、エントリのテーブルまたはバッファを生成するとよい。各ルックアップテーブルは、図３で示されたものなど、インデックス付けデータを判断することを含んでもよい。例えば、訂正モジュール１３０は、同じＭＬＣに対応する、第１のグループ１１０内のビット位置と、第２のグループ１２６のビットとを比較するとよい。訂正モジュール１３０は、ＥＣＣエンジン１１８によって生成されたデータに基づき、第２のグループ１２６内の対応するビット（同じＭＬＣの）のいくつが訂正されたかを判断するとよく、ルックアップ動作中に、図３のテーブル３５０または３５２などの確率テーブルに、結果を供給するとよい。もう１つの例として、訂正モジュール１３０は、訂正済みバッファ１２４にアクセスして、第２のグループ１２６の対応するビット（同じＭＬＣの）の訂正されたビット値を読み込むとよく、ルックアップ動作中に、図３のテーブル３５４または３５６などの確率テーブルに、訂正されたビット値を提供してもよい。
【００５４】
この例の続きとして、ビット位置に対応するエントリと、ルックアップテーブルの関連する結果とによりテーブルまたはバッファをポピュレートした後、最大のルックアップテーブル結果が発見されるとよい。例えば、ルックアップテーブル結果値に基づき結果がソートされてもよく、ソート後の第１のエントリが識別されてもよい。別の例として、テーブルまたはバッファがトラバースされてもよく、最大のルックアップテーブル結果値が発見されてもよい。この例では、最大のテーブル結果値に基づき単一ビットが識別されるが、他の実施形態では、複数のビット（すなわち、Ｎビット）が、発見されるＮ個の最大のルックアップテーブル結果値に基づき識別されてもよい。例えば、Ｎの値は、反転されるビットの数と等しくてもよい。
【００５５】
５１０にて、第１のグループの識別されたビットの値が変更されて、データビットの調整されたグループが生成されるとよい。例えば、訂正モジュール１３０が、識別されたビットを変更して、調整されたグループを生成してもよい。例示として、訂正モジュール１３０は、バッファ１６２にアクセスして、第１のグループ１１０からビット値のコピーを生成するとよい。訂正モジュール１３０は、ビット値のコピー内で、第１のグループ１１０の識別されたビットに対応するビット位置を発見するとよい。識別されたビットが「０」値を有する場合、訂正モジュール１３０は、「０」値を「１」値に置き換えて、データビットの調整されたグループ１７０を生成するとよい。識別されたビットが「１」値を有する場合、訂正モジュール１３０は、「１」値を「０」値に置き換えて、データビットの調整されたグループ１７０を生成するとよい。複数のビットが識別された場合、訂正モジュール１３０は、識別された各ビットに対して置き換え動作を実行して、データビットの調整されたグループを生成するとよい。
【００５６】
識別されたビットは、５１２にて、ルックアップテーブルに基づき選択されるとよい（例えば、ハミング距離、カウントまたは状態値の１つ以上に少なくとも部分的に基づいて）。例示として、図３のテーブル３５０および３５２に関して記載したように、誤りの可能性を判断するためにＭＬＣ内のいくつかの誤りが使用される場合、ルックアップテーブルは、ハミング距離に少なくとも部分的に基づくとよい。別の例として、図３の経路３４６および経路３４８に関して記載したように、ルックアップテーブルは、アクセスする確率テーブルを選択するためのパラメータとしてカウントを使用することによって、カウントに少なくとも部分的に基づいてもよい。さらに別の例として、図３のテーブル３５４および３５６に関して記載したように、ルックアップテーブルは、特定のビット値に関連して、ＭＬＣセルの部分的に訂正されたビット値に基づくなど、状態値に少なくとも部分的に基づいてもよい。識別されたビットは、発見されたビットのうちの、最大のルックアップテーブル結果を有するものとして選択されてもよい。
【００５７】
データビットの調整されたグループは、５１４にて、ＥＣＣエンジンに提供されるとよい。例えば、図１の訂正モジュール１３０は、経路１２２を介して、調整されたグループ１７０をＥＣＣエンジン１１８の入力に伝達してもよい。訂正モジュール１３０は、データビットの調整されたグループ１７０を入力データとして使用する復号化動作を開始するために、１つ以上の制御信号を、生成するか、またはその他の形でＥＣＣエンジン１１８に提供させるとよい。ＥＣＣエンジン１１８は、復号化動作を開始するとよく、訂正された出力または失敗インジケータを生成するとよい。ＥＣＣエンジン１１８が、訂正された出力を生成すれば、ＥＣＣエンジン１１８の訂正能力に適合するのに十分な数の第１のグループ１１０の誤りが、調整されたグループ１７０内で訂正されたことになる。
【００５８】
失敗インジケータを受け取ると、５１６にて、第１のグループが訂正可能であるとＥＣＣエンジンが判断するまで、第１のグループ内のビットが反復して反転されるとよい。例えば、データビットの調整されたグループに対するＥＣＣ動作の結果、失敗インジケータが図１の訂正モジュール１３０に提供されることもある。それに応答して、訂正モジュール１３０は、反転する追加または代わりのビットの１つ以上を選択して、ＥＣＣエンジン１１８を使用して評価される、データビットの別の調整されたグループを生成するとよい。
【００５９】
例えば、訂正モジュール１３０が、反転する単一のビットを反復毎に識別する場合（すなわち、単一の「１」値を「０」値に置き換えるか、または単一の「０」値を「１」値に置き換える）、訂正モジュール１３０は、直前に反転されたビットをその元の値に戻して、第１のグループ１１０の、誤りビットである可能性が次に高いものを反転して、ＥＣＣエンジン１１８にてテストされる、データビットの次の調整されたグループを生成するとよい。誤りビットである可能性が次に高いものは、前述したものなどのルックアップテーブル結果に従って識別されるとよい。結果として生じる、データビットの次の調整されたグループが、反復プロセスの次の反復としてＥＣＣエンジン１１８に提供されるとよく、任意の特定の反復において、ＥＣＣエンジンがデータビットの調整されたグループを訂正できれば、反復プロセスを終了してもよい。反復プロセスの他の終了基準には、発見されたすべてのビットがテストされ、結果として生じる調整されたグループはいずれも復号化できなかった、第１のグループ１１０のすべてのビット（すなわち、第２のグループ１２６の訂正された誤りと同じセルに対応しないビットを含む）がテストされ、結果として生じる調整されたグループはいずれも復号化できなかった、所定数の反復が完了した、その他１つ以上の終了基準、またはその任意の組み合わせが含まれ得る。
【００６０】
図６は、ルックアップテーブルに基づきメモリセル内の誤りを訂正する方法の実施形態の流れ図である。方法は、概して６００と示され、図１のコントローラ１０４など、メモリアレイに連結されたコントローラにて実行されてもよい。方法６００は、６０２にて、ビットのグループのうち、特定のビット値を有すると識別されたビットの第１のカウントを格納することを含み、ビットのグループは、メモリアレイのワード線の少なくとも一部に対応する。例えば、図１のカウント１１４は、ワード線１０８に対応してもよく、ワード線１０８のデータ読み込みがＥＣＣエンジン１１８により訂正不能な場合に後で取得するために、格納されている先行カウント１３６としてログファイル１３４内に格納されるとよい。特定のビット値は、「０」であってもよく、バッファ１６２内に格納されるカウント１１４は、第１のグループ１１０のいくつかの「０」値に対応してもよい。あるいは、特定のビット値は、「１」であってもよく、バッファ１６２内に格納されるカウント１１４は、第１のグループ１１０のいくつかの「１」値に対応してもよい。図１では、バッファ１６２がカウント１１４を含むように示されているが、代わりにカウントは、訂正モジュール１３０または同等の論理デバイスと通信している任意の適切なメモリ内に格納されてもよい。
【００６１】
ビットの第１のカウントは、コントローラにて格納されても、メモリアレイにて格納されてもよい。図１では、格納されている先行カウント１３６は、ログファイル１３４内にあるように示されているが、他の実施形態では、格納されているカウントは、ログファイル内に格納されていなくてもよい。図１は、コントローラ１０４にて格納された、格納されている先行カウント１３６を示すが、他の実施形態では、格納されているカウントは、コントローラにて格納されず、代わりにメモリアレイ１０２にて格納されてもよい。例えば、第１のカウントは、メモリアレイ内のログファイルに格納されてもよい。
【００６２】
６０４にて、ワード線が、誤りのしきい値数を上回るいくつかの誤りを有するという通知が受け取られてもよく、通知を受け取るのに応答して、カウントが格納されてもよい。例えば、図１のコントローラ１０４は、ワード線１０８が過剰な数の誤りを有するという通知をＥＣＣエンジン１１８から受け取るのに応答して、先行カウント１３６を格納してもよい。ＥＣＣエンジン１１８は、いくつかの誤りを示してもよく、訂正モジュール１３０は、ワード線１０８が、ＥＣＣエンジン１１８の訂正容量を近いうちに上回る可能性が高いと判断してもよい。訂正容量に近くなるとき、コントローラ１０４は、ワード線１０８内のデータビットの１つ以上のグループに関する、先行カウント１３６の格納を開始するとよい。メモリアレイ１０２またはコントローラ１０４内で、フラグまたは他の指示子がセットされ、ワード線１０８が、多数の誤りを有することまたは格納されているカウントに関連することを示してもよい。例として、図１の訂正モジュール１３０は、ワード線１０８の、しきい値を上回るいくつかの誤りがＥＣＣエンジン１１８によって検出されたことを示す信号を、ＥＣＣエンジン１１８から受け取ってもよい。ワード線１０８に対応する訂正されたデータは、データビットの１つ以上のグループに論理的に分割されてもよく、各グループに対してカウントが生成される。ワード線１０８に関連するカウントは、後の読み込み動作中にワード線１０８からデータが読み込まれるときに取得されるように、ログファイル１３４にて格納されるとよい。
【００６３】
６０６にて、ワード線に関連するいくつかのカウントは、ワード線内のいくつかの誤りが増加するにつれて増加させられるとよい。例えば、図１のワード線１０８内の多数の誤りは、いくつかのカウント１１４を増加させるとよい。例示として、訂正モジュール１３０は、ＥＣＣエンジン１１８によって検出された誤りの数を受け取ってもよく、ワード線１０８のカウント１１４と格納されている先行カウント１３６との差に基づいて数を判断してもよい。訂正モジュール１３０は、誤りの数を使用して、バッファ１６２内に格納されるべきいくつかのカウントを判断してもよい。ワード線１０８内の誤りの数が増加するにつれて、いくつかのカウントは増加するとよい。いくつかのカウントを増加させることは、単一のグループ内の複数のセルの状態によって表されるビット値が誤りにより反転する確率を下げるとよい。
【００６４】
６０８にて、１が０に変化した誤りおよび０が１に変化した誤りのうちの１つのみがビットのグループ内に含まれるように、いくつかのカウントが判断されるとよい。例えば、図１のいくつかのカウント１１４は、１が０に変化した誤りおよび０が１に変化した誤りのうちの１つのみがグループ１１０内に含まれるように、ＥＣＣエンジン１１８によって検出された誤りの数に基づき判断されるとよい。例示として、ワード線１０８の読み込み動作１４６の結果、１つ以上のグループ（例えば、グループ１１０）が、グループの格納されているカウント（例えば、格納されているカウント１３６）とは２以上異なるカウントを有することもある。対応する格納されているカウントを２以上上回るカウントを有するグループの数、および格納されているカウントより２以上少ないカウントを有するグループの数が判断されて、グループの現在の数に追加され、ワード線１０８を論理的に分割するための多数のグループが判断されてもよい。各グループが「１」または「０」の関連するカウントを有し、実質的に等しいサイズのグループのデータビットにワード線１０８を分割することによって、ワード線１０８に対応するグループの新たなセットが判断されてもよい。別の例として、グループの格納されているカウントと２以上異なるカウントを有する各グループが、２つ以上のより小さいグループに分割されてもよく、その結果、ワード線１０８の不均一なグループサイズがもたらされるが、ワード線１０８のうち、他の部分よりも多くの誤りを有する部分において、より細かい粒度が提供される。
【００６５】
６１０にて、ＥＣＣエンジンにより訂正不能なデータをもたらすワード線の読み込みに応答して、第１のカウントが取得されるとよい。例えば、ＥＣＣエンジン１１８には訂正不能な数の誤りを有するデータをもたらすワード線１０８の読み込み動作１４６に応答して、図１の格納されている先行カウント１３６が取得されてもよい。例えば、１つ以上のページ（単数または複数）１１２をＥＣＣエンジン１１８が訂正できなかったことを示す信号を、図１の訂正モジュール１３０が、ＥＣＣエンジン１１８から受け取ってもよい。それに応答して、訂正モジュール１３０は、格納されている先行カウント１３６を取得するとよい。例示として、訂正モジュール１３０は、ログファイル１３４にアクセスし、第１のグループ１１０に対応する格納されている先行カウント１３６を発見してもよい。例えば、訂正モジュール１３０は、第１のグループ１１０のメモリアドレスと、格納されている先行カウント１３６に対応するメモリアドレスとを比較して、格納されている先行カウント１３６をログファイル１３４から取得してもよい。６１２にて、第１のカウントが、特定のビット値を有するビットの第２のカウントと比較されるとよく、ビットの第２のカウントは、ワード線から読み込まれたデータに基づき判断される。例えば、図１の格納されている先行カウント１３６が、カウント１１４と比較されてもよい。例示として、訂正モジュール１３０は、減算演算、ビット単位比較演算、またはカウント１１４と格納されている先行カウント１３６との差を判断する別の演算を実行することなどによって、カウント１１４と、格納されている先行カウント１３６とを比較してもよい。
【００６６】
６１４にて、訂正するいくつかのビットが、比較から判断されるとよい。例示として、「１」値が「０」値になるように訂正されても、「０」値が「１」値に置き換えられてもよい。一例では、図１の訂正するビットの数１４８は、特定の値を有する取得されたビットのカウント１１４と、格納されている先行カウント１３６とを比較することによって判断されてもよい。例示として、図１の訂正モジュール１３０は、格納されている先行カウント１３６からカウント１１４を減算して、訂正するビットの数１４８として減算の結果を代入する結果として、訂正するビットの数１４８を判断してもよい。負値は、１つ以上のビットが、特定の値を有するように反転されるべきであることを示してもよく、正値は、特定の値を有する１つ以上のビットが反転されるべきであることを示してもよい。あるいは、他の１つ以上のプロセスが使用されて、カウント１１４と格納されている先行カウント１３６との差の指標および大きさが判断されてもよい。
【００６７】
メモリアレイのセルの状態が、６１６にて訂正されるとよい。状態は、ルックアップテーブルに基づき訂正されてもよい。例えば、メモリアレイは、複数のマルチレベルセルを含んでもよく、メモリアレイ１０２のＭＬＣ１４４の状態を変更するためのルックアップテーブルを行うために、図１の誤り確率テーブル１３８が使用されてもよい。例示として、訂正モジュール１３０は、バッファ１６２にアクセスし、ルックアップテーブルを使用して、訂正する第１のグループ１１０のビットを識別してもよい。図３のテーブル３５０および３５２に関して記載したように、誤りの可能性を判断するためにＭＬＣ内のいくつかの誤りが使用される場合、ルックアップテーブルは、ハミング距離に少なくとも部分的に基づくとよい。別の例として、図３の３４６および３４８に関して記載したように、ルックアップテーブルは、アクセスする確率テーブルを選択するためのパラメータとしてカウントを使用することによって、カウントに少なくとも部分的に基づいてもよい。さらに別の例として、図３のテーブル３５４および３５６に関して記載したように、ルックアップテーブルは、特定のビット値に関連して、ＭＬＣセルの部分的に訂正されたビット値に基づくなど、状態値に少なくとも部分的に基づいてもよい。
【００６８】
本願明細書に示された様々なコンポーネントは、ブロックコンポーネントとして示され、一般用語で記載されているが、そうしたコンポーネントは、１つ以上のマイクロプロセッサ、状態マシン、または図１のコントローラ１０４もしくは図３のコントローラ３０４がそうしたコンポーネントによる特定の機能を実行できるように構成された他の回路、またはその任意の組み合わせを含んでよい。例えば、図１の訂正モジュール１３０、または図３のＥＣＣエンジン３１８および訂正モジュール３１４、またはその任意の組み合わせは、ハードウェアコントローラ、状態マシン、論理回路、または図１のコントローラ１０４もしくは図３のコントローラ３０４が誤りを検出および訂正できるようにする他の構造などの物理的コンポーネントを表し得る。
【００６９】
例えば、訂正モジュール１３０は、訂正するいくつかのビットを判断することによってＭＬＣ１４４を分析するようにプログラムされたマイクロプロセッサまたはマイクロコントローラを使用して実装されてもよい。例示として、コントローラ１０４などのマイクロプロセッサまたはマイクロコントローラが、反転する可能性が最も高いＭＬＣビットを判断するために、ルックアップ動作を行うようにプログラムされてもよい。コントローラ１０４は、判断されたビットを反転して、ＥＣＣ動作を試行してもよい。ビットを含むデータがまだ訂正不能な場合、コントローラ１０４は、反転される次のビットを、次のビットに関連する判断された確率に基づき選択するとよい。訂正モジュール１３０は、コントローラ１０４によって実行される実行可能な命令を含むとよい。訂正モジュール１３０に含まれるとよく、コントローラ１０４によって実行される実行可能な命令は、読み出し専用メモリ（ＲＯＭ）（図示せず）などの個別のメモリ位置にて格納されてもよい。
【００７０】
本願明細書における開示では、様々な特定の値が使用されているが、そうした値は、限定ではなく説明の目的で提供されている。例えば、３ビットを格納するＭＬＣが記載されているが、２ビットまたは４ビット以上を格納するＭＬＣが使用されてもよい。別の例として、ＥＣＣ訂正能力は、５１２バイトページ毎に１２ビットとして記載されているが、他のＥＣＣ訂正能力が使用されてもよい。例えば、ＥＣＣ訂正能力は、５１２バイトワード毎に１２ビットより大きくても、５１２バイトワード毎に１２ビットより少なくてもよく、５１２バイト以外のワードサイズに基づいてもよい（例えば、２５６バイト、１，０２４バイトまたはその他の任意のワードサイズ）。さらに、ＥＣＣ訂正能力は、説明に役立つ例として、ＥＣＣ方式（例えば、リードソロモン対ＢＣＨ）および強度（例えば、１２パリティビット／ワード対１６パリティビット／ワード）によって異なってもよい。
【００７１】
図３のルックアップテーブル３１２などを介してビット値が誤っている確率または可能性を判断するものとして、様々な実施形態について記載してきたが、他の実施形態では、ビット値が正しい可能性または確率が使用されてもよい。例えば、特定のビットが正しい値を有する可能性またはその他のインジケータを示す１つ以上の確率テーブルが使用されてもよい。訂正されていないビットのグループ内の反転するべきビットの判断は、対応するビットが正しいことの最低の信頼度を示す、ルックアップテーブルから返される最小値を発見することを含んでもよい。
【００７２】
ＥＣＣエンジンにて独立して復号化が可能な複数のページを含むワード線、ビットのグループに論理的に分けられるページ、および識別されたページ内の各グループに関して格納される１（または０）のカウントに関して、様々な実施形態が記載されている。しかし、他の実施形態では、ワード線は、単一のページを含んでもよく、ＥＣＣにて独立して復号化可能なデータの最小単位であってもよい（例えば、単一のコードワード）。あるいは、またはさらに、論理グループへのワード線の分割が誤り密度に基づき、特定のページが比較的誤りがなく、結果としてページ全体が単一グループ内にある場合などは、ビットのグループ（格納されているカウントに対応する）が１つ以上のページを含んでもよい。格納されて後の読み込み動作中に使用される各グループの１（または０）のカウントを生成するように、ページまたはワード線内のビットのグループ分けについて記載されているが、一部の実施形態では、ページまたはワード線の全部ではなく一部が、論理的にグループに分けられてもよい。例えば、ワード線またはページ（またはストレージの他の単位）の中央領域または終端領域内のビットは、グループおよび格納されているカウントに割り当てられてもよく、ワード線またはページの残りの領域（単数または複数）内のビットは、グループに割り当てられなくてもよい。
【００７３】
図１のメモリアレイ１０２に連結されているコントローラ１０４など、図１および３に示されているシステムは、外部デバイス１０６などの１つ以上の外部デバイスに選択的に連結されるように構成された携帯デバイスとして実装されてもよい。一方、他の実施形態では、図１のコントローラ１０４およびメモリアレイ１０２は、携帯通信デバイスの筐体内など、１つ以上のホストデバイス内に取り付けられていても、組み込まれていてもよい。例えば、図１のコントローラ１０４およびメモリアレイ１０２は、無線電話、携帯情報端末（ＰＤＡ）、ゲーム用デバイスまたはコンソール、携帯ナビゲーションデバイス、または内部不揮発性メモリを使用する他のデバイスなどのパッケージ化装置内にあってもよい。メモリアレイ１０２は、フラッシュメモリ（例えば、ＮＡＮＤ、ＮＯＲ、マルチレベルセル（ＭＬＣ）、分割ビット線ＮＯＲ（ＤＩＮＯＲ：Divided bit-line NOR）、ＡＮＤ、高容量結合比（ＨｉＣＲ：high capacitive coupling ratio）、非対称無接点トランジスタ（ＡＣＴ：asymmetrical contactless transistor ）、またはその他のフラッシュメモリ）、消去可能でプログラム可能な読み出し専用メモリ（ＥＰＲＯＭ）、電気的に消去可能でプログラム可能な読み出し専用メモリ（ＥＥＰＲＯＭ）、読み出し専用メモリ（ＲＯＭ）、ワンタイムプログラマブルメモリ（ＯＴＰ）、またはその他任意のタイプのメモリなどの不揮発性メモリを含むとよい。
【００７４】
本願明細書に記載した実施形態の説明は、様々な実施形態の全般的な理解を提供することを目的としている。本願明細書における開示から、他の実施形態が利用され、得られることが可能であり、本願明細書における開示の範囲から逸脱することなく、構造上および論理上の置き換えおよび変更が行われ得る。本願明細書における開示は、様々な実施形態の、後のあらゆる適応および変形を対象とするものとする。
【００７５】
前に開示した主題は、制限ではなく例示と見なされるものとし、添付の特許請求の範囲は、この開示の範囲内に入るそうした変更、改良および他の実施形態すべてを対象とするものとする。したがって、許可される最大の範囲まで、本発明の範囲は、添付の特許請求の範囲およびその等価物の許容される最も広い解釈によって決定され、前述した詳細な説明によって制限も限定もされないものとする。
【図１】
2013518345.tif 000003
【図２】
2013518345.tif 000004
【図３】
2013518345.tif 000005
【図４】
2013518345.tif 000006
【図５】
2013518345.tif 000007
【図６】
2013518345.tif 000008
【手続補正書】
【提出日】平成24年11月20日(2012.11.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
方法であって、
メモリアレイに連結されたコントローラにて、
前記メモリアレイから読み込まれた第１のグループのデータビットが、誤り訂正符号（ＥＣＣ）エンジンにより訂正不能な誤りを含むという通知を受け取るステップと、
特定のビット値を有する前記第１のグループのデータビットのカウントと、特定のビット値を有するデータビットの先行カウントとを比較するステップと、
前記カウントが前記先行カウントを上回るという判断に応答して、前記第１のグループのデータビットのうち、特定のビット値を有し、第２のグループのデータビットの訂正されたデータビットと同じメモリセルに対応するビットを識別するステップと、
データビットの調整されたグループを生成するために、前記第１のグループの識別されたビットの値を変更するステップと、
データビットの調整されたグループを、前記ＥＣＣエンジンに提供するステップと、
を含む方法。
【請求項２】
請求項１記載の方法において、
前記メモリアレイは、複数のマルチレベルセルを含む方法。
【請求項３】
請求項１記載の方法において、
識別されたビットを、ルックアップテーブルに基づき選択するステップをさらに含む方法。
【請求項４】
請求項３記載の方法において、
前記ルックアップテーブルは、ハミング距離に少なくとも部分的に基づく方法。
【請求項５】
請求項３記載の方法において、
前記ルックアップテーブルは、前記カウントに少なくとも部分的に基づく方法。
【請求項６】
請求項３記載の方法において、
前記ルックアップテーブルは、状態値に少なくとも部分的に基づく方法。
【請求項７】
請求項１記載の方法において、
前記第１のグループ内の反転するいくつかのビットを判断するステップをさらに含む方法。
【請求項８】
請求項１記載の方法において、
前記第１のグループが訂正可能であると前記ＥＣＣエンジンが判断するまで、前記第１のグループ内のビットを反復して反転するステップをさらに含む方法。
【請求項９】
メモリデバイスであって、
メモリアレイと、
前記メモリアレイのメモリセルのマルチビット値の特定のビットの誤りの可能性を示し、前記メモリセルの他のビットのいくつかの誤りに少なくとも部分的に基づくデータを格納する少なくとも１つの誤り確率テーブルと、
前記メモリアレイに連結されたコントローラであって、前記コントローラは前記メモリセルの他のビットの誤りを検出するように構成された誤り訂正符号（ＥＣＣ）エンジンを備え、前記コントローラは訂正する特定の値のいくつかのビットを判断するように構成され、前記ビットは前記メモリアレイにおける読み込み動作を介して取得され、いくつかのビットは特定の値を有する取得されたビットのカウントとビット値の格納されているカウントとを比較することに基づき判断され、前記コントローラは訂正する少なくとも１つのビットを識別するために、前記少なくとも１つの誤り確率テーブルにアクセスするようにさらに構成される、コントローラと、
を備えるメモリデバイス。
【請求項１０】
請求項９記載のメモリデバイスにおいて、
前記少なくとも１つの誤り確率テーブルは、読み込まれた値から部分的に訂正された値へのハミング距離によりインデックス付けされるメモリデバイス。
【請求項１１】
請求項９記載のメモリデバイスにおいて、
前記少なくとも１つの誤り確率テーブルは、部分的に訂正された値によりインデックス付けされるメモリデバイス。
【請求項１２】
請求項９記載のメモリデバイスにおいて、
前記少なくとも１つの誤り確率テーブルは、前記コントローラにて格納されるメモリデバイス。
【請求項１３】
請求項９記載のメモリデバイスにおいて、
前記少なくとも１つの誤り確率テーブルは、前記メモリアレイにて格納されるメモリデバイス。
【請求項１４】
請求項９記載のメモリデバイスにおいて、
前記格納されているカウントは、前記コントローラにあるメモリに格納されるメモリデバイス。
【請求項１５】
請求項９記載のメモリデバイスにおいて、
前記格納されているカウントは、前記メモリアレイにて格納されるメモリデバイス。
【請求項１６】
請求項９記載のメモリデバイスにおいて、
前記メモリアレイは、フラッシュマルチレベルセルアレイを含むメモリデバイス。
【国際調査報告】
2013518345.tif 000009
2013518345.tif 000010
2013518345.tif 000011