メモリからデータを検索するためのシステムであって、メモリと通信するデコーダであって、前記メモリにおけるページ上に記憶されたコードワードを受信することであって、前記コードワードが、データおよび前記データに応じて発生された第1の層のチェックシンボルを含む、当該受信することと、前記コードワードが、前記第1の層のチェックシンボルを用いて訂正することができないエラーを含むと判定することと、前記判定に応じて、第2の層のチェックシンボルを受信することであって、前記第2の層のチェックシンボルが、前記データに応じて、更に前記コードワードを含む前記ページよりも前に書き込まれた前記メモリにおける他のページの内容に応じて発生される、当該受信することと、前記第2の層のチェックシンボルに応じて前記コードワードを訂正することと、前記訂正したコードワードを出力することと、を含む方法を実行するための前記デコーダを含む、前記システム。前記コードワードを訂正することが更に統計的エラーモデルに応じて行われる、請求項1に記載のシステム。前記統計的エラーモデルが前記判定に応じて変更される、請求項2に記載のシステム。前記コードワードを訂正することが更に各セルごとの集合エラー重みベクトルに応じて行われ、前記ベクトルが、前記セルについてのビットラインディスターバンスエラー重みベクトル、前記セルについての浮動ゲート結合エラー重みベクトル、および前記セルについての多数のページプログラムから導出されたエラー重みベクトルの少なくとも1つから計算される、請求項1に記載のシステム。前記セルについて前記エラー重みベクトルを計算することが更に、前記メモリセルの指定された近隣領域内のメモリセルの内容に応じて行われる、請求項4に記載のシステム。前記統計的エラーモデルが、前記コードワードおよび前記第2の層のチェックシンボルを用いて前記コードワードを訂正するためにメッセージ伝達アルゴリズムによって用いられる、請求項2に記載のシステム。前記メモリがマルチレベルセルMLCNANDフラッシュメモリであり、前記コードワードの前記訂正が更に、2次元データパターンに対応したエラー重みを含むルックアップテーブルセットに応じて行われる、請求項1に記載のシステム。前記方法が、前記コードワードが、前記第1の層のチェックシンボルを用いて訂正することができないエラーを含まないと判定し、これに応じて、前記コードワードおよび前記第1の層のチェックシンボルに応じて前記コードワードを訂正することを更に含む、請求項1に記載のシステム。前記第2の層のチェックシンボルの少なくとも1つのサブセットが第2のメモリに記憶されている、請求項1に記載のシステム。メモリからデータを検索するための、コンピュータにより実施される方法であって、メモリにおけるページ上に記憶されたコードワードを受信することであって、前記コードワードが、データおよび前記データに応じて発生された第1の層のチェックシンボルを含む、当該受信することと、コンピュータにおいて、前記コードワードが、前記第1の層のチェックシンボルを用いて訂正することができないエラーを含むと判定することと、前記判定に応じて、第2の層のチェックシンボルを受信することであって、前記第2の層のチェックシンボルが、前記データに応じて、更に前記コードワードを含む前記ページよりも前に書き込まれた前記メモリにおける他のページの内容に応じて発生される、当該受信することと、前記第2の層のチェックシンボルに応じて前記コードワードを訂正することと、前記訂正したコードワードを出力することと、を含む、前記方法。前記メモリがマルチレベルセルMLCNANDフラッシュメモリであり、前記コードワードの前記訂正が更に、2次元データパターンに対応したエラー重みを含むルックアップテーブルセットに応じて行われる、請求項10に記載の方法。前記コードワードが、前記第1の層のチェックシンボルを用いて訂正することができないエラーを含まないと判定し、これに応じて、前記コードワードおよび前記第1の層のチェックシンボルに応じて前記コードワードを訂正することを更に含む、請求項10に記載の方法。メモリからデータを検索するためのコンピュータプログラムであって、コンピュータに、メモリにおけるページ上に記憶されたコードワードを受信することであって、前記コードワードが、データおよび前記データに応じて発生された第1の層のチェックシンボルを含む、当該受信することと、前記コードワードが、前記第1の層のチェックシンボルを用いて訂正することができないエラーを含むと判定することと、前記判定に応じて、第2の層のチェックシンボルを受信することであって、前記第2の層のチェックシンボルが、前記データに応じて、更に前記コードワードを含む前記ページよりも前に書き込まれた前記メモリにおける他のページの内容に応じて発生される、当該受信することと、前記第2の層のチェックシンボルに応じて前記コードワードを訂正することと、前記訂正したコードワードを出力することと、を含む方法を実行させる、前記コンピュータプログラム。メモリおよびエラー訂正キャッシュと通信するエンコーダであって、データおよび前記メモリにおけるページの書き込みアドレスを受信することであって、前記メモリが前記ページおよび以前に書き込んだページを含む、当該受信することと、データに応じて第1の層のチェックシンボルを発生することと、前記データおよび前記以前に書き込んだページの少なくとも1つの内容に応じて第2の層のチェックシンボルを発生することと、前記第1の層のチェックシンボルおよび前記データをコードワードとして前記ページに記憶することと、前記データおよび前記第2の層のチェックシンボルを前記エラー訂正キャッシュに記憶することと、を含む方法を実行するための前記エンコーダを含む、システム。前記メモリおよび前記エラー訂正キャッシュと通信するデコーダであって、前記コードワードおよび前記第2の層のチェックシンボルを受信することと、前記コードワードが、前記第1の層のチェックシンボルを用いて訂正することができないエラーを含むと判定することと、前記第2の層のチェックシンボルに応じて前記コードワードを訂正することと、を含む方法を実行するための前記デコーダを更に含む、請求項14に記載のシステム。前記第2の層のチェックシンボルを発生させることが更に低密度パリティチェックLDPCコードに応じて行われる、請求項14に記載のシステム。前記第2の層のチェックシンボルを発生させることが、プログラム可能な数の以前に書き込んだページの内容に応じて行われる、請求項14に記載のシステム。前記メモリがNANDフラッシュメモリであり、前記第2の層のチェックシンボルを発生させることが、現在書き込んでいるページと同じブロック内のプログラム可能な数の以前に書き込んだページに応じて行われ、これらの以前に書き込んだページからのデータが前記エラー訂正キャッシュに記憶されている、請求項14に記載のシステム。以前に書き込んだページの使用数が、前記メモリブロックをプログラムした回数、前記メモリブロックのシンボルエラーレート、および前記メモリの統計的エラーモデルの少なくとも1つに応じて変更される、請求項14に記載のシステム。NANDフラッシュメモリは、消費者向けおよび企業向けの双方の用途で不揮発性記憶媒体としてますます用いられるようになっている。最新のNANDフラッシュメモリデバイスの1つの特徴は、強いデータ依存性およびデバイス依存性のエラーモードを示すと共に、多くの場合セル間依存性を示すことである。周囲のセルのプログラミングおよび電荷レベルが、隣接セルで生じるエラー状況に対して直接的な影響を及ぼす場合がある。また、NANDメモリでは、プログラミング段階の間に保持エラーのために引き起こされるランダムエラーが生じやすい場合がある。典型的なエラー作用には、背景パターン依存BPD:backgroundpatterndependencyエラー、ビットラインディスターバンスBLD:bitlinedisturbanceエラー、ページおよびプログラムディスターバンスPGM:pageandprogramdisturbanceエラー、および浮動ゲート結合FGC:floatinggatecouplingエラーが含まれる。これらのタイプのエラー作用は、場合によっては、メモリ使用に制約を課すことによって軽減することができる。例えば、1メモリブロックのみを順次書き込み可能と規定することによって、これらのエラーのいくつかを排除または軽減することができる。しかしながら、かかる制約は、書き込み待ち時間の延長、摩耗の増大、および書き込み増幅等の望ましくない副作用をもたらす場合がある。更に、異なるプログラムレベルでは同一でないエラー遷移確率を有することがある。一実施形態は、メモリからデータを検索するためのシステムである。このシステムは、メモリと通信するデコーダを含む。デコーダは、メモリにおけるページ上に記憶されたコードワードを受信することを含む方法を実行するためのものであり、コードワードは、データおよびこのデータに応じて発生された第1の層のチェックシンボルを含む。この方法は更に、コードワードが第1の層のチェックシンボルを用いて訂正することができないエラーを含むと判定することを含み、これに応じて第2の層のチェックシンボルを受信する。第2の層のチェックシンボルは、データの受信に応じて、更にコードワードを含むページよりも前に書き込まれたメモリにおける他のページの内容に応じて発生させる。第2の層のチェックシンボルに応じてコードワードを訂正する。訂正したコードワードを出力する。別の実施形態は、メモリからデータを検索するための、コンピュータにより実施される方法である。この方法は、メモリにおけるページ上に記憶されたコードワードを受信することを含み、コードワードは、データおよびこのデータに応じて発生された第1の層のチェックシンボルを含む。この方法は更に、コードワードが第1の層のチェックシンボルを用いて訂正することができないエラーを含むと判定することを含み、これに応じて第2の層のチェックシンボルを受信する。第2の層のチェックシンボルは、データに応じて、更にコードワードを含むページよりも前に書き込まれたメモリにおける他のページの内容に応じて発生させる。第2の層のチェックシンボルに応じてコードワードを訂正する。訂正したコードワードを出力する。別の実施形態は、メモリからデータを検索するためのコンピュータプログラムである。タンジブルな記憶媒体がこのコンピュータプログラムを含み、この記憶媒体は処理回路によって読み取り可能であり、方法を実行するために処理回路によって実行される命令を記憶する。この方法は、メモリにおけるページ上に記憶されたコードワードを受信することを含み、コードワードは、データおよびこのデータに応じて発生された第1の層のチェックシンボルを含む。この方法は更に、コードワードが第1の層のチェックシンボルを用いて訂正することができないエラーを含むと判定することを含み、この判定に応じて第2の層のチェックシンボルを受信する。第2の層のチェックシンボルは、データに応じて、更にコードワードを含むページよりも前に書き込まれたメモリにおける他のページの内容に応じて発生される。第2の層のチェックシンボルに応じてコードワードを訂正する。訂正したコードワードを出力する。更に別の実施形態は、メモリおよびエラー訂正キャッシュと通信するエンコーダを含むシステムである。エンコーダは、データおよびメモリにおけるページの書き込みアドレスを受信することを含む方法を実行するためのものである。メモリは、そのページおよび以前に書き込んだページを含む。データに応じて第1の層のチェックシンボルを発生し、データおよび以前に書き込んだページの少なくとも1つの内容に応じて第2の層のチェックシンボルを発生する。第1の層のチェックシンボルおよびデータをコードワードとしてページに記憶する。データおよび第2の層のチェックシンボルをエラー訂正キャッシュに記憶する。本実施形態の技法によって、更に別の特徴および利点が実現される。本明細書において他の実施形態および態様が記載され、これらは特許請求する本発明の一部と見なされる。本発明をその利点および特徴と共により良く理解するために、以下の記載および図面を参照する。本明細書の末尾における特許請求の範囲において、本発明と考えられる主題について特に指摘し明確に特許請求する。本発明の前述およびその他の特徴および利点は、添付図面と関連付けた以下の詳細な説明から明らかとなろう。一実施形態は、例えば時間履歴、周囲のビットパターン、およびかかる周囲のビットパターンと背景パターン依存BPDエラー、ビットラインディスターバンスBLDエラー、ページおよびプログラムディスターバンスPGMエラー、浮動ゲート結合FGCエラーとの間の関係に基づいて、異なるメモリセルについて異なるエラー重みを計算するエラー訂正技法を用いることにより、NANDフラッシュメモリの信頼性を向上させることを対象とする。一実施形態が含む多層エラー訂正システムにおいては、後の層の復号プロセスは、所与のセルに記憶されたデータに対してメモリセル近隣領域の時間履歴および二次元2Dデータ/ビットパターンが及ぼす影響についての統計的知識を利用する。従って、読み取りレベルおよび近隣ビットパターンに基づいて、異なるメモリセル位置に異なるエラー重みを割り当てる。これらのエラー重みに取り入れられた概念とは、セル位置では多かれ少なかれ誘発エラーが生じる可能性があるというものであり、多かれ少なかれ、プログラムされた値および近隣セル位置に記憶された値に基づいて、ある一定のタイプの誘発エラーが生じる可能性があるというものであるこの場合エラーのタイプはエラー発生前後のセルの値によって規定される。本明細書に記載する実施形態は、これまでの解決策よりも優れたいくつかの利点を提供する。第1に、実施形態は、一般的なエラー訂正コードを用いるのではなく特定のエラーの作用をモデル化し、これによって実施形態は信頼性を高める。第2に、実施形態はデバイス回路を変更する必要がないので、いかなるNANDフラッシュデバイスであっても実際に容易に用いることができる。更に、実施形態は、回路レベルの改良のみによって可能であるよりもいっそう信頼性を高めるために、回路レベルの改良と組み合わせて用いることができる。更に、時間履歴を用いてエラー重みを更新することによって、本明細書に記載する実施形態は特定のNANDデバイスの特徴に適合する。更に、実施形態は、従来のエラーコードと共に用いて、従来のコードに障害が発生した場合にのみ呼び出すようにすることができる。これによって、読み取り待ち時間を過度に延長させずに実施形態を使用可能であることを保証する。一実施形態では2層エラー訂正コードECCを用いる。一実施形態において、第1の層のECCは、代数ECCを含むアルゴリズムを用いて発生させ、そのパリティビット/シンボルはフラッシュメモリのページスペアエリアに記憶されている。第2の層のECCを発生させ、そのパリティビット/シンボルは部分的にフラッシュメモリのページスペアエリアに記憶され、部分的に別の不揮発性メモリ領域例えばフラッシュメモリ、ハードディスク等の二次メモリ構造に記憶されている。一実施形態では、第2の層のECCパリティシンボルを計算するために、前の数ページにおいてプログラムされアクセスのためにキャッシュされたデータを用いる第2の層のECCエンコーダと共に、ログベースファイル構造のフラッシュメモリデバイスを用いる。本明細書において用いる場合、ビットという言葉は、従来0および1のセットからの2文字の値を取る二進数のことである。本明細書において用いる場合、シンボルという言葉は、ビットよりも大きい数の値を取ることができるものを指す。すなわち、可能性としては3つ以上の有限の文字の値を取るもののことである。このため、1つのシンボルは、文字0、1、2、3から可能な4つの値を取り得る。一実施形態においては、復号の際、フラッシュメモリから読み取ったデータを最初に待ち時間の短い従来の第1の層のECCデコーダに入力する。第1の層のECCデコーダによってこのデータを訂正可能である場合は、訂正済みのデータを出力する。第1の層のECCデコーダによってこのデータを訂正することができない場合、これを第2の層のECCモジュールに入力し、第2の層のECCモジュールが2Dブロックビットパターンを読み取ってこれを用いていっそう洗練されたエラー訂正分析を実行する。一実施形態では、これは、各セル位置がエラーを有する可能性がどの程度であるか、およびそのセル位置について各エラータイプの可能性がどの程度であるかに基づいて、様々なセル位置についてエラー重みベクトルを計算することを伴う。エラー重み値という言葉は、エラーを含まない、所与のタイプのエラーの可能性を示す従来の確率値を示す。重みまたは条件確率値は、重みまたは確率モデルに従って割り当てられ、これはエラー訂正モジュールが検出したエラーに基づいて更新される。図1は、一実施形態に従った、メモリにおいてデータを記憶および検索するためのシステムのブロック図を示す。図1に示したシステム100は、コンピュータプロセッサ102と、メモリセルを有するメモリ106と、メモリ106に記憶するデータをコンピュータプロセッサ102から受信するためのメモリコントローラ104と、を含む。一実施形態では、メモリセルはページ内に配列され、ページはブロック内に配列されている。このため、1ブロックは複数のページを含み、各ページは複数のメモリセルを含む。一実施形態において、メモリコントローラ104は、コンピュータプロセッサ102と通信可能に結合され、コンピュータプロセッサ102から書き込み要求を受信する。書き込み要求は、メモリ106に書き込まれるデータと、データを書き込むメモリ106内の位置を識別するための論理アドレスと、を含む。メモリコントローラ104は、メモリ106内の物理アドレスにデータを記憶する。一実施形態では、メモリコントローラ104は、データを記憶または検索する場合、論理アドレスをメモリ106内の物理アドレスにマッピングする。メモリ106内のデータが修正されるたびに、所与の論理アドレスに対する物理アドレスを変更することができる。システム100は、本明細書に記載する処理を実行するために利用可能なコンフィギュレーションの一例である。システム100は、単一のメモリ106、メモリコントローラ104、およびコンピュータプロセッサ102によって図示しているが、他の実施形態は、2つ以上のメモリ106、メモリコントローラ104、またはコンピュータプロセッサ102を有する他のシステムにおいても動作することは理解されよう。一実施形態では、メモリ106、メモリコントローラ104、およびコンピュータプロセッサ102は、同一のコンピュータ内に位置しない。例えば、メモリ106およびメモリコントローラ104は1つの物理位置例えばメモリモジュール上に位置することができ、コンピュータプロセッサ102は別の物理位置に位置する例えばコンピュータプロセッサ102はネットワークを介してメモリコントローラ104にアクセスする。更に、本明細書に記載した処理の部分は、1つ以上のメモリ106、メモリコントローラ104、およびコンピュータプロセッサ102にまたがる場合がある。図2は、一実施形態に従った、メモリにおいてデータを記憶し検索するためのシステムのブロック図を示す。図2に示すシステムは、メモリセルのブロック各ブロックは複数のページから成るを有するメモリ202メモリ106等と、書き込みデータを受信し、メモリセルに記憶するためのECC書き込みワードを発生するためのエンコーダ206と、メモリから読み取りワードを受信し読み取りデータを発生するためのデコーダ208と、エンコーダ206およびデコーダ208の双方によって用いるための記憶データの特徴を記憶する共有データ210と、を含む。一実施形態では、エンコーダ206および共有データ210は書き込みプロセス212によって用いられ、デコーダ208および共有データ210は読み取りプロセス204によって用いられる。一実施形態において、エンコーダ206、デコーダ208、および共有データ210は、メモリコントローラメモリコントローラ104等またはメモリモジュール上に位置している。代替的な実施形態では、エンコーダ206、デコーダ208、および共有データ210は、メモリデバイス上に位置している。共有データ210は、レジスタまたは、エンコーダ206およびデコーダ208の双方によってアクセス可能である他のいずれかの記憶位置に記憶することができる。一実施形態において、メモリ202は、NANDフラッシュメモリデバイスまたは、限定ではないがPCMデバイス等の他の不揮発性メモリデバイスによって実施される。一実施形態では、メモリ202は、シングルレベルセルNANDフラッシュメモリデバイスによって実施される。別の実施形態では、メモリ202は、マルチレベルセルNANDフラッシュメモリデバイスによって実施される。図2に示したエンコーダ206に対する入力は、書き込まれるページのアドレス本明細書では書き込みアドレスとも称すると、ページに書き込まれるデータ本明細書では書き込みデータとも称すると、を含む。図2に示すように、入力は、エンコーダ206上に位置する受信器204を介して受信される。一実施形態では、入力は、受信器例えばメモリデバイス、メモリモジュール、メモリコントローラ、または他の位置に位置するを介して受信される。受信器は、入力を受信するためのハードウェア、または入力が位置する記憶位置例えばレジスタ、あるいはその両方を含む様々な方法で実施することができる。図2に示すデコーダ208に対する入力は、読み取られるメモリ位置例えばページのアドレスを含む。一実施形態では、入力は、受信器214例えばメモリデバイス、メモリモジュール、メモリコントローラ、または他の位置に位置するを介して受信される。受信器は、入力を受信するためのハードウェア、または入力が位置する記憶位置例えばレジスタ、あるいはその両方を含む様々な方法で実施することができる。図2に示したデコーダ208からの出力は読み取りデータを含む。一実施形態では、出力は、送信器例えばメモリデバイス、メモリモジュール、メモリコントローラ、または他の位置に位置するによって行われる。送信器図示せずは、出力を送信するためのハードウェア、および出力が記憶されている記憶位置またはレジスタを含む様々な方法で実施することができる。エンコーダ206およびデコーダ208は、本明細書に記載した処理を実行するために利用可能なコンピュータの一例である。図3は、一実施形態に従った、図1のメモリ106または図2のメモリ202等のNANDフラッシュメモリのブロック図を示す。図3に示すNANDフラッシュメモリ300は、ワードライン306およびビットライン302に配列された複数のメモリセルを含む。一実施形態では、1ページは、1ワードライン306におけるメモリセル内の複数のビットから成る。マルチレベルセルMLCデバイスを含む実施形態では、各ページは1行分のセルからの所与のビットプレーンから成る。例えば、あるページは1行分のセルの最下位ビットを含むことができ、別のページは1行分のセルの最上位ビットを含むことができる。一実施形態において、物理ブロックアドレスと論理ブロックアドレスとの間のマッピングは、メモリコントローラ104等のコントローラに維持されている。書き込み用の論理アドレスおよびデータが与えられると、コントローラは、データを書き込むための消去済み物理ページを選択し、論理-物理マッピングを記録する。一実施形態では、ログベースのファイルシステムを用いる。この場合、物理ページは、最後の論理ページが書き込まれたブロック内の次の消去済みページであり、ページは、例えばGSLglobalselectline:グローバル選択ラインに対する近接に基づいて順序付けされる。NANDフラッシュメモリは、多数のファクターに基づいてデータ依存性およびデバイス依存性のエラーを示す。これらのエラーには、例えば、BPDエラー、BLD、FGCエラー、PGMエラー、ならびに他の非均一エラーおよびエラー遷移が含まれる。エラーは、NANDフラッシュに記憶されたデータおよびメモリセル相互の位置に基づいて発生する。一実施形態では、例えば図3のセルブロック310等の他の近隣セルをプログラムした場合、図3のターゲットのメモリページ308はFGCによって影響を受ける場合がある。同様に、例えば304のセルのようなビットライン302の1つに沿ったセルに書き込んだ場合、ターゲットのメモリページ308はBLD/BPDによって影響を受ける可能性がある。更に、ページを再プログラムした場合または隣接メモリページに書き込んだ場合、ターゲットのメモリページはPGMエラーによって影響を受ける可能性がある。更に、NANDフラッシュメモリ300の劣化によるシンボルのランダムスイッチング等のエラーが更に別のエラーを引き起こす場合があり、それらのタイプは非均一である傾向があるすなわち、デバイスに応じて、あるタイプのエラーが他のタイプのエラーよりも発生の可能性が高いことがある。これらのタイプのエラーは全て統計的にモデル化して、予測エラー検出および訂正を行うことができる。例えば、MLCNANDブロックにおいて非均一エラーが引き起こす01から10への誤ったビット遷移は、10から01よりも可能性がはるかに高いという知識を用いて、メモリ300のターゲットページにおけるエラーからいっそう正確に復旧することができる。図4は、一実施形態に従った、2層ECCプロセスを用いてデータを記憶するためのフラッシュメモリ400を図示する。一実施形態では、フラッシュメモリ400はNANDフラッシュメモリであり、第1の層のECC符号化モジュール418および第2の層のECC符号化モジュール410は、図2に示したような書き込みプロセス212の間にエンコーダ206によって実施される。図4に示したフラッシュメモリ400は、ターゲットページ408に記憶されたワード等の、データおよびECCチェックビット/チェックシンボルを含む複数の書き込みワード本明細書においてコードワードとも称するを記憶している。図4に示すように、各ワードは、データバイトすなわち書き込みデータを記憶するためのデータセグメント414と、データセグメント414内のデータに関連付けられたチェックビット/チェックシンボルを記憶するための2つ以上のエラー訂正セグメント406と、を含む。一実施形態では、エラー訂正セグメント406は、第1の層のチェックビット/シンボルを記憶するための第1の層のエラー訂正セグメント402と、第2の層のチェックビット/シンボルを記憶するための第2の層のエラー訂正セグメント404と、を含む。フラッシュメモリ400に記憶される予定の書き込みデータ412は、第1の層のECC符号化モジュール418における処理のために例えば第1の層のチェックシンボルを発生させるために受信され、次いで処理のために例えば第2の層のチェックシンボルを発生させるために第2の層のECC符号化モジュール410に渡される。一実施形態では、書き込みデータ412は、図1のコンピュータプロセッサ102等のコンピュータプロセッサから、またはエンコーダ206における別の符号化モジュールから受信される。他の実施形態では、書き込みデータ412は、第1の層のECC符号化モジュール418および第2の層のECC符号化モジュール410の双方によって受信され、これらが、時間的に重複することはあるが別個に処理を行い、データセグメント414に記憶される書き込みデータ412に関連付けられたチェックシンボルを発生させる。一実施形態において、第1の層のECC符号化モジュール418が書き込みデータ412からECCチェックシンボルを発生させる際には、リードソロモン符号または、限定ではないが、繰り返しコード、パリティシンボル、チェックサム、および暗号ハッシュ等の技法を用いる他のECCコードを用いる。一実施形態では、第2の層のECC符号化モジュール410は、低密度パリティチェックLDPCコードを用いて、書き込みデータ412および以前に書き込んだデータページ例えば書き込みワードまたはコードワードを含むから、ECCチェックシンボルを発生させる。一実施形態では、LDPCコードはフラッシュエラーモードの統計的モデルに基づいたものであり、以前に書き込んでエラー訂正キャッシュ416にキャッシュされているデータを用いて第2の層のECCチェックシンボルを発生させる。これについては以下で更に詳細に説明する。いったん第1の層のECC符号化モジュール418および第2の層のECC符号化モジュール410が処理を完了して、ECCチェックシンボルを発生させると、書き込みデータならびに第1および第2の層のECCチェックシンボルをターゲットページ408に記憶する。書き込みデータ412本明細書ではデータとも称するをフラッシュメモリ400のデータセグメント414に記憶し、第1の層のECCチェックシンボルを第1の層のエラー訂正セグメント402に記憶し、第2の層のECCチェックシンボルを第2の層のエラー訂正セグメント404に記憶する。代替的な実施形態では、第2の層のECCチェックシンボルを別個のフラッシュメモリに記憶する。他の実施形態では、第2の層のECCチェックシンボルを、第2の層のエラー訂正セグメント404および別個のフラッシュメモリ間で分割する。また、書き込みデータ412および第2の層のECCエラー訂正シンボル404のコピーをエラー訂正キャッシュ416に記憶する。別の実施形態では、エラー訂正キャッシュは更に、第1の層のエラー訂正セグメント402のチェックシンボルも記憶する。一実施形態において、エラー訂正キャッシュ416は、DRAMdynamicrandomaccessmemoryまたはeDRAMembeddedDRAMまたはSRAMstaticrandomaccessmemoryまたは他の比較的短い読み取り待ち時間を有する揮発性メモリ等の揮発性メモリに書き込まれる。別の実施形態では、エラー訂正キャッシュ416はPCM等の不揮発性メモリに書き込まれる。一実施形態において、エラー訂正キャシュ416は、Cページの履歴データを記憶するように構成されている。ここで、Cは、データ412について第2の層のECCコードを計算するために用いられる履歴データの以前に書き込んだページ数である。一実施形態では、これらのページは、現在のページと同じブロック内にプログラムしたこれまでのCページである。Cはプログラムすることができ、いかなるサイズとすることも可能であるが、Cが増大するにつれて、第2の層のECCコードの有効性およびエラー訂正キャッシュ416に対する記憶装置容量の要求の双方が増大する。一実施形態では、Cは、メモリブロックをプログラムした回数、メモリブロックのシンボルエラーレート、またはメモリの統計的エラーモデルに基づいてプログラムすることができる。更に別の実施形態では、エラー訂正キャッシュ416は、当技術分野において既知であるような、迅速なデータの記憶および検索が可能ないずれかの記憶デバイスである。図5は、一実施形態に従った、第2の層のECCチェックシンボルを発生させるためのブロック図を示す。一実施形態において、第2の層のECC発生は、図4の第2の層のECC符号化モジュール410において実行される。第2の層のECCにおけるチェックシンボルの数またはECCのレートは、上述した様々なタイプのエラー例えばBPD、BLD、FGC、PGM、非均一エラータイプ等の統計的モデルに基づいて発生させる。一実施形態では、第2の層のECC符号化モジュール410は、チェックシンボルi510等のチェックを発生させる。一実施形態では、図1のメモリ106等のメモリに記憶するために、時刻iで書き込みデータを受信する。この書き込みデータと、現在書き込んでいるページと同じブロック内に書き込まれた最後のCページの第2の層のECCチェックシンボルコンポーネントと、を用いることによって、チェックシンボルi510すなわちメモリに記憶するための書き込みデータのためを時刻iにおいて計算する。このコンポーネントは、現在のページについて受信した書き込みデータと同様に、図4のエラー訂正キャッシュ416に記憶されている。一実施形態では、Cは、エラー訂正キャッシュ416をシンボル単位のページサイズで除算したシンボル単位のサイズとして計算される。一実施形態では、チェックシンボルi510は、アプリオリに選択した低密度パリティチェックLDPCマトリクスを用いて計算される。パリティチェックマトリクスにより、書き込みデータシンボルおよび第2の層のECCチェックシンボルの線形結合としてシンドロームシンボル502を計算することができる。更に、パリティチェックマトリクスでは、書き込みデータページシンボルと、現在のページおよびエラー訂正キャッシュ416に記憶された同一ブロックに属する以前のCページにのみ属するチェックシンボルとの線形結合として、シンドロームシンボルi502を計算するようになっている。現在のページについてのチェックシンボル510は、シンドロームシンボル502が全てゼロであることを保証するように計算される。書き込みデータおよび第2の層のECCチェックシンボルはメモリに記憶される。LDPCマトリクスは当業者に既知の技法を用いて生成される。第2の層のフラッシュ認識ECC発生について、図4の第2の層のECC符号化モジュール410で実行されるものとして説明しているが、第2の層のフラッシュ認識ECC発生は、コンピュータプロセッサ102上のソフトウェアとして、またはメモリ106、メモリコントローラ104、エンコーダ206、またはスタンドアロンモジュールのいずれかのハードウェアまたはソフトウェアモジュールとして実行可能であることは理解されよう。図6は、図1のメモリ106等のメモリ600からデータを検索する実施形態を示す。要求側からメモリアクセス要求622を受信する。一実施形態では、メモリアクセス要求622これはメモリ600内のデータページ608に対応するメモリアドレスを含むは、図2のデコーダ208等のデコーダにおいて受信される。メモリ600からデータページ608本明細書ではコードワードとも称するを検索する。図6に示すように、データページ608は、データセグメント620、第1の層のECCチェックシンボル602、および第2の層のECCチェックシンボル604を含む。第1の層のECCモジュール610はデータページ608をチェックして、データがエラーを有するか否か、および、かかるエラーが第1の層のECCデコーダによって訂正可能であるか否かを判定する。データページがエラーを有しない場合、またはエラーが第1の層のECCチェックシンボルによって訂正可能である場合、これは要求側に戻される。一実施形態においては、読み取りデータとして要求側に戻す前に、訂正済みデータ612に対して更に復号を実行する例えばシンボル拡張、伸張等。第1の層のECC復号モジュール610は、データページ608が第1の層のECC復号モジュール610によって訂正可能でないエラーを含むと判定すると、ページ608を含むブロック624からのデータを、他のチェックシンボル記憶装置606に記憶されたいずれかの追加の第2の層のチェックシンボルと共に、更に処理するために第2の層のECC復号モジュール614に渡す。第2の層のECC復号モジュール614は、第2の層のエラーチェックシンボル604および記憶装置606に記憶された第2の層のECCチェックシンボルならびにエラー確率モデル616を用いて、データを訂正する。これについては以下で更に詳細に説明する。エラー確率モデルはメタデータであり、揮発性DRAMまたは不揮発性メモリまたはそれらの組み合わせに記憶されている。いったんデータが訂正されると、エラー確率モデル616は、訂正されたエラーに基づいて更新される。第2の層のエラー訂正が必要となるたびに、更新されたエラー確率モデル616が用いられて同様に更新される。いったんデータが訂正されたら、訂正済みデータ618は要求側に戻される。一実施形態において、第1の層のECCチェックシンボル602および第2の層のECCチェックシンボル604が異なる位置に記憶されている場合は、メモリアクセス要求622に応答してデータセグメント620および第1の層のECCチェックシンボル602のみが検索される。この実施形態では、第2の層のECCチェックシンボル604および記憶装置606が検索されるのは、第2の層のECC復号モジュール641を用いてページを復号する場合だけである。図7は、一実施形態における4マルチレベルセル4MLCNANDフラッシュセルに4レベルの情報を記憶するために用いる閾値電圧を示す。4MLCは、フラッシュメモリの1メモリセルにおいて4つの離散データシンボルを含む。図7は4MLC電圧閾値を示すが、他の実施形態ではMLCの他の電圧閾値および他のビットレベルを使用可能であることは理解されよう。閾値電圧の低い方から順に、4つのレベルをL0、L1、L2、およびL3と記す。図8は、ルックアップテーブルセットの形態で要約されたエラー確率モデル616の一実施形態を示す。統計的エラー確率モデル616は、セル上に記憶された特定のプログラムされたレベルがエラーによって別の特定レベルに変化する可能性がどの程度であるかに関する情報を含む。かかるエラーイベントの可能性は一般に、セルの近隣領域の2次元2DデータパターンこれはFGCタイプのエラーに影響を及ぼす、同一ページおよび他のページ上の他のセルのプログラミング履歴これはBPD、BLD、およびPGMタイプのエラーに影響を及ぼす、ならびにデバイス依存性のレベル遷移挙動等のファクターに依存する。一実施形態では、統計的エラー確率モデル616は条件確率値エラー重みとも記すの集合を含み、それらの各々は、上述のファクターの1つ以上を条件としてある記憶値が別の値に変化する可能性を要約する。別の実施形態では、統計的エラーモデルは1つ以上のアポステリオリ条件確率を含み、それらの各々は、セルから値が読み取られて上述のファクターの1つ以上が与えられた場合に、セルに記憶された元の値が読み取ったレベルとは異なる所与のレベルであった可能性を要約する。図8の実施形態では、各ルックアップテーブルはアポステリオリのエラー重みすなわち条件確率を記憶しており、これは、所与のセルから読み取った値v1がエラーの際に真の記憶値v2から生じたものである可能性を、v1、v2、および上述したファクターの1つの関数として要約する。エラー重みベクトルw、x、およびyの各々は16の成分を有し、ここで成分は、読み取り値がv1であることを条件として、更に各テーブルがファクターの値に基づくことを条件として、真の記憶値がv2であった確率を表す。一実施形態では、重みテーブル1802における第1のエラー重みベクトルを割り当てるには、MLCレベルL3にある各ページ位置の8近隣neighbor数をカウントし、ページ位置におけるデータ値を計算に入れる。このため、例えば、w00は16成分ベクトルであり、成分は、読み取り値がv1であることを条件とし、更に8近隣値のどれもL3でなかったという事実を条件として、真の記憶値がv2であった確率を表す。一実施形態では、重みテーブル2804に示したような第2のエラー重みベクトルは、現在のセルと同じビットライン上のプログラムしたセル値の分布に基づいて、更に現在のデータ値に基づいて計算される。重みテーブル3806における第3のエラーベクトルは、ページプログラム数および現在のデータ値に基づいて計算される。これらのテーブルは、第2の層のECC復号モジュール614による各復号の後に更新され、これによって重みモデルに時間履歴を組み込む。これによって、重みモデルは、他のデバイスとは著しく異なることがある使用中の特定のNANDフラッシュデバイスに適合することができる。一実施形態では、各第2の層のECC復号において観察されるエラー頻度をモデルのエラー重みと線形結合して、新しいモデルエラー重みを形成する。当技術分野において周知の他の技法を用いて、第2の層のECCデコーダの各使用時に観察される経験的な頻度を組み込むことによって、モデルを更新することができる。別の実施形態では、第1の層のECCデコーダの各使用時に観察されるエラーを用いてモデルを更新する。代替的な実施形態では、図8に示した重みテーブルのサブセットを組み合わせ、もっと高い次元の重みモデルを用いて、これらの条件の連結作用をモデル化する。別の実施形態では、ページに対するプログラム/消去サイクル数の作用、ページ上で以前に認められたエラーの数、近隣ページ上で認められたエラーの数およびタイプ、ならびにページがプログラムされた順序が、重みテーブルに更に組み込まれる。更に別の実施形態では、セルごとでなくベクトルごとに重みを計算する。更に別の実施形態では、記憶されたメタデータは、ブロックページがプログラムされた順序を含み、この順序に基づいて重みの計算を行う。このため、例えば、重みテーブル1802におけるエラー重みベクトルは、所与のセル位置の近隣領域においてこの所与のセル位置の後にプログラムされたセル位置の数に依存する。代替的な実施形態では、多数のページに対して同時に復号を実行する。一実施形態では、図6の第2の層のECC復号モジュール614は動的プログラミングを用いる。このため、例えばビタビアルゴリズムを用いて多数のページを同時に復号することができる。図9は、一実施形態におけるデータのエラー訂正のためのプロセスフローを示す。一実施形態では、図9のエラー訂正は、図6の第2の層のECC復号モジュール614において実行される。ブロック902において、第1の層のECC復号モジュール610によって訂正可能でなかったエラーを含むデータを受信する。ブロック904において、データが存在するメモリブロックに対応した2D読み取りブロックデータに基づいて、エラー確率モデルエラー確率モデル616および図8のエラー確率モデル等を検索する。ブロック906において、セルについての確率ベクトルを計算するために、セルの8セル近隣領域に基づいて各セル値ごとに条件エラー確率をモデル化するエラー確率モデルを、セルから読み取った値と組み合わせて用いる。このベクトルのi番目の成分は、セルの真の記憶値がレベルiである確率である。例示的な実施形態では、テーブル802における確率モデルを用いて、各セルごとにかかる確率ベクトルを計算する。この確率ベクトルをエラー重みベクトルとも呼ぶ。ブロック908において、セルについての確率ベクトルを計算するために、各ページがプログラムした回数に基づいて各セル値ごとに条件エラー確率をモデル化するエラー確率モデルを、セルから読み取った値と組み合わせて用いる。このベクトルのi番目の成分は、セルの真の記憶値がレベルiである確率である。例示的な実施形態では、図8のエラー重みテーブル3806における確率モデルを用いて、各セルごとにかかる確率ベクトルを計算する。この確率ベクトルをエラー重みベクトルとも呼ぶ。ブロック910において、セルについての確率ベクトルを計算するために、ビットラインパターンすなわち、所与のセルと同じビットライン上の他のセルから読み取った値に基づいて各セル値ごとに条件エラー確率をモデル化するエラー確率モデルを、セルから読み取った値と組み合わせて用いる。このベクトルのi番目の成分は、セルの真の記憶値がレベルiである確率である。例示的な実施形態では、テーブル804における確率モデルを用いて、各セルごとにかかる確率ベクトルを計算する。この確率ベクトルをエラー重みベクトルとも呼ぶ。ブロック912において、ブロック906、908、および910で計算したエラー重みベクトルを組み合わせて、各セルごとに1つのエラー重みベクトルを形成する。このベクトルのi番目の成分は、ブロック内のそのセルおよび他のセルから読み取った値を条件として、セルの真の記憶値がレベルiである確率である。一実施形態では、条件付き独立性の仮定conditionalindependenceassumptionを用いて、各セルごとに集合エラー重みベクトルすなわち、所与のセルについての真の値が、個々のエラー重みベクトルによって与えられる、所与のセルについての真の値がiである確率を適切に正規化した積である確率を生成する。ブロック914において、ソフトエラー訂正デコーダは、ブロック912で計算した集合重み付け訂正ベクトルを、エラーのあるデータに対して用いる。一実施形態において、デコーダはLDPCデコーダであり、和積または最大積等の当技術分野において周知のアルゴリズムにより、メッセージ伝達アルゴリズムを用いてデータを復号する。ブロック916において、訂正済み読み取りページデータが生成され、要求側に戻される。技術的な作用および利点には、エラー訂正を計算する場合にフレッシュメモリエラーモードの統計的モデルを考慮することによるエラー訂正の信頼性向上が含まれる。別の利点は、いっそう多くのエラーを正確に訂正することでフラッシュメモリの信頼性を高めることによってデバイスの寿命を改善することである。更に別の利点は、本発明を実施するためにハードウェアデバイスの変更が必要ないことである。また別の利点は、BPD、BLD、FGC、PGM等に基づいたエラーの統計的モデルに基づいて訂正を行うことができる機能によって、書き込みの制約例えば非順次プログラミング、部分的なページプログラミングの禁止を軽減可能であることである。本明細書において用いた用語は、特定の実施形態を記載する目的のためだけのものであり、本開示を限定することは意図していない。本明細書において用いたように、単数形1つのは、文脈によって明らかに他の場合が示されない限り、複数形を含むことが意図されている。また、含むまたは含んでいるという言葉あるいはその両方は、本明細書において用いられた場合、述べた特徴、整数、ステップ、動作、要素、または構成要素あるいはそれら全ての存在を規定するが、1つ以上の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループあるいはそれら全ての存在または追加を除外するものではないことは、理解されよう。以下の特許請求の範囲における全てのミーンズまたはステッププラスファンクション要素の対応する構造、材料、行為、および均等物は、具体的に特許請求したような他の特許請求した要素と組み合わせて機能を実行するためのいずれかの構造、材料、または行為を含むことが意図されている。本開示の記載は、例示および記述の目的のために提示したが、網羅的であることや、開示した形態に本発明を限定することは、意図していない。本発明の範囲および思想から逸脱することなく、当業者には多くの変更および変形が明らかであろう。実施形態は、本開示の原理および実際的な用途を最良に説明するため、更に、想定される特定の用途に適した様々な変更と共に様々な実施形態に関して当業者が本発明を理解することを可能とするために、選択し記載したものである。当業者には認められるであろうが、本発明の態様は、システム、方法、またはコンピュータプログラムとして具現化することができる。従って、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態ファームウェア、常駐ソフトウェア、マイクロコード等を含む、または、ソフトウェアおよびハードウェアの態様を組み合わせた実施形態という形態を取ることができ、それらは全て本明細書において、回路、モジュール、またはシステムと一般的に称することができる。更に、本発明の態様は、具現化されたコンピュータ読み取り可能プログラムコードを有する1つ以上のコンピュータ読み取り可能媒体において具現化されるコンピュータプログラムの形態を取ることも可能である。1つ以上のコンピュータ読み取り可能媒体のあらゆる組み合わせを利用することができる。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能信号媒体またはコンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は例えば、限定ではないが、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、デバイス、または前述のもののいずれかの適切な組み合わせとすることができる。コンピュータ読み取り可能記憶媒体の更に具体的な例非網羅的な列挙は、以下を含む。すなわち、1本以上のワイヤを含む電気的接続、携帯型コンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、読み取り専用メモリROM、消去可能プログラマブル読み取り専用メモリEPROMまたはフラッシュメモリ、光ファイバ、携帯型コンパクトディスク読み取り専用メモリCD-ROM、光記憶デバイス、磁気記憶デバイス、または前述のもののいずれかの適切な組み合わせである。この文書の文脈において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを含有または記憶することが可能ないずれかのタンジブルな媒体とすることができる。コンピュータ読み取り可能信号媒体は、例えばベースバンドにおいてまたは搬送波の一部として、具現化されたコンピュータ読み取り可能プログラムコードを有する伝播データ信号を含むことができる。かかる伝播信号は様々な形態のいずれかを取ることができ、それらは限定ではないが、電磁、光、またはそれらのいずれかの適切な組み合わせを含む。コンピュータ読み取り可能信号媒体は、コンピュータ読み取り可能記憶媒体でないが、命令実行システム、装置、またはデバイスによってまたはそれと接続して用いるためにプログラムを伝達、伝播、または転送することが可能ないずれかのコンピュータ読み取り可能媒体とすることができる。コンピュータ読み取り可能媒体上で具現化されるプログラムコードは、限定ではないが、無線、有線、光ファイバケーブル、RF等、または前述のもののいずれかの適切な組み合わせを含むいずれかの適切な媒体を用いて伝送することができる。本発明の態様の動作を実行するためのコンピュータプログラムコードは、JavaR、SmalltalkR、C等のオブジェクト指向プログラミング言語、および、Cプログラミング言語または同様のプログラミング言語等の従来の手順プログラミング言語を含む1つ以上のプログラミング言語のいずれかの組み合わせにおいて記述することができる。プログラムコードは、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェアパッケージとして、部分的にユーザのコンピュータ上でおよび部分的に遠隔コンピュータ上で、または全体的に遠隔コンピュータもしくはサーバ上で、実行することができる。後者の場合、遠隔コンピュータは、ローカルエリアネットワークLANまたはワイドエリアネットワークWANを含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続することができ、または、接続は、例えばインターネットサービスプロバイダを用いてインターネットを介して外部コンピュータに対して行うことができる。本発明の実施形態に従った方法、装置システム、およびコンピュータプログラムのフローチャート図またはブロック図あるいはその両方を参照して、本発明の態様について以下に記載する。フローチャート図またはブロック図あるいはその両方の各ブロックならびにフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせは、コンピュータプログラム命令によって実施可能であることは理解されよう。これらのコンピュータプログラム命令は、汎用コンピュータ、特殊目的コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供されて機械を生成することができ、これによって、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサによって実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施するための手段を生成するようになっている。また、これらのコンピュータプログラム命令はコンピュータ読み取り可能媒体に記憶することができ、これによって、コンピュータ、他のプログラマブルデータ処理装置、または他のデバイスに特定の方法で機能するように指示することができ、これにより、コンピュータ読み取り可能媒体に記憶された命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施する命令を含む製造品を生成するようになっている。また、コンピュータプログラム命令を、コンピュータ、他のプログラマブルデータ処理装置、または他のデバイスにロードして、そのコンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させてコンピュータ実施プロセスを生成することができ、これによって、コンピュータまたは他のプログラマブル装置上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックまたは複数のブロックに規定された機能/行為を実施するためのプロセスを提供するようになっている。本明細書に示したフロー図は一例に過ぎない。本発明の思想から逸脱することなく記載した図またはステップまたは動作に対する多くの変形が可能である。例えば、ステップは異なる順序で実行することができ、またはステップを追加、削除、もしくは変更することも可能である。これらの全ての変形は、特許請求する本発明の一部と見なされる。本発明の好適な実施形態について記載したが、当業者は、現在および今後の双方で、以下の特許請求の範囲内に該当する様々な改良および向上を実施可能であることは理解されよう。これらの特許請求の範囲は、最初に記載した本発明についての適正な保護を維持するように解釈されるものである。