(57)【要約】  不揮発性メモリシステムのためのエラー検出およびデータ復旧動作。１組の記憶素子に対するプログラミング動作が正常に完了した後でも、一部の記憶素子のデータは破損することがある。例えば、消去状態記憶素子は、他の記憶素子のプログラミングによって妨害されることがある。かかる状況でデータを復旧できるように、プログラミングが完了したら、消去状態記憶素子を他のデータ状態と区別できるように、関連付けられたデータラッチを構成することができる。さらに、プログラミングが完了した後に、１回の読み出し動作を実行することができる。別のデータ状態に変わった消去状態記憶素子を特定するために、読み出し動作の結果とデータラッチ内の値とを使用して論理演算が実行される。エラーの数が閾値を超えると、完全復旧動作が開始され、残りの状態に対する読み出し動作が実行される。  【選択図】図１２ａ
2013518359.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性記憶システム内の１組の記憶素子をプログラムするための方法であって、
書き込みデータに基づいて、消去状態に保たれる組（３００）の第１の部分集合内の記憶素子と関連付けられたデータラッチ（１９４〜１９７）内、およびそれぞれの目標データ状態（Ａ、Ｂ、Ｃ）にプログラムされる組の第２の部分集合内の記憶素子と関連付けられたデータラッチ内のデータを構成するステップと、
前記第２の部分集合内の前記記憶素子をプログラムしている間、前記第１の部分集合内の前記記憶素子を禁止し、前記プログラミング中、前記第２の部分集合内の前記記憶素子の進捗に基づいて前記第２の部分集合内の前記記憶素子の前記関連付けられたデータラッチを更新するステップと、
それぞれの目標データ状態に達していない記憶素子数が前記第２の部分集合内の記憶素子の最大数（ＴＨＲＥＳＨＯＬＤ）に満たず、その結果、前記第２の部分集合内の前記記憶素子の前記プログラミングが正常に完了したとみなされると判断するステップと、
前記第２の部分集合内の前記記憶素子の前記プログラミングの前記正常な完了を受けて、前記消去状態と前記目標データ状態の隣接する状態とを区別する前記第１の部分集合内の前記記憶素子に対して読み出し動作を実行することにより、エラーを有する前記第１の部分集合内の記憶素子の数を判断するステップと、
を備える方法。
【請求項２】
エラーを有する前記第１の部分集合内の前記記憶素子の数が十分に多い場合に、前記書き込みデータを復旧させるために復旧動作を実行するステップを備え、
前記復旧動作が、各目標データ状態を区別する前記第２の部分集合内の前記記憶素子に対して追加読み出し動作を実行する、請求項１に記載の方法。
【請求項３】
前記第２の部分集合内の前記記憶素子が、前記隣接する状態である第１の目標データ状態（Ａ）と、前記第１の目標データ状態に隣接する第２の目標データ状態（Ｂ）と、前記第２の目標データ状態に隣接する第３の目標データ状態（Ｃ）とを含む、少なくとも３つの目標データ状態にプログラムされ、
前記追加読み出し動作が、前記第２の目標データ状態と前記第３の目標データ状態とを区別し、その後前記第１の目標データ状態と前記第２の目標データ状態とを区別する、
請求項２に記載の方法。
【請求項４】
プログラミングを正常に完了した前記第２の部分集合内の各記憶素子が、自身の関連付けられたデータラッチのうちの１つに第１の値を有しており、
前記第１の部分集合内の各記憶素子が、自身の関連付けられたデータラッチのうちの１つにおける前記第１の値とは異なる値によって特定され、
前記エラーを有する前記第１の部分集合内の前記記憶素子の数を判断する前記ステップが、前記第１の部分集合内の各記憶素子の前記関連付けられたデータラッチと前記読み出し動作の結果のうちの一方を使用して論理演算を実行することを含む、
請求項１〜３のいずれか一項に記載の方法。
【請求項５】
各記憶素子と関連付けられた前記データラッチが、第１のデータラッチ（ＱＤＬ）と、第２のデータラッチ（ＵＤＬ）と、第３のデータラッチ（ＬＤＬ）とを含み、
前記プログラミングが、前記第２の部分集合内の前記記憶素子のうちの少なくとも一部をオフセット検証レベルおよび目標検証レベルと照合して、前記目標データ状態のうちの少なくとも１つが存在するかどうかを検証することを含み、
前記オフセット検証レベルおよび前記目標検証レベルと照合して、前記目標データ状態のうちの前記少なくとも１つが存在するかどうかが検証される前記第２の部分集合内の前記記憶素子の各々について、前記第１のデータラッチ（ＱＤＬ）が、前記記憶素子が前記オフセット検証レベルに達したかどうかを示し、前記第２のデータラッチ（ＵＤＬ）が上位ページデータを提供し、前記第３のデータラッチ（ＬＤＬ）が下位ページデータを提供し、
前記第１の部分集合内の前記記憶素子の各々について、前記第１のデータラッチが、プログラミングを正常に完了した前記第２の部分集合内の前記記憶素子の前記第１のデータラッチ内の値とは異なる値を有し、
前記エラーを有する前記第１の部分集合内の前記記憶素子の数を判断する前記ステップが、前記第１の部分集合内の前記記憶素子の前記第１のデータラッチと前記読み出し動作の結果とを使用して論理演算を実行することを含む、
請求項１〜４のいずれか一項に記載の方法。
【請求項６】
自身のそれぞれの目標データ状態に達していない記憶素子数が前記第２の部分集合内の前記記憶素子の前記最大数に満たないと判断する前記ステップが、前記第２の部分集合内の前記記憶素子の各々に対し、前記データラッチを使用して論理演算を実行することを含む、請求項１〜５のいずれか一項に記載の方法。
【請求項７】
前記エラーを有する前記第１の部分集合内の前記記憶素子の数を判断する前記ステップが、前記目標データ状態うちの少なくとも１つの中に存在するものとして読み出される前記第１の部分集合内の前記記憶素子の数を判断するステップを含む、請求項１〜６のいずれか一項に記載の方法。
【請求項８】
前記エラーを有する前記第１の部分集合内の前記記憶素子の数を判断する前記ステップが、前記読み出し動作が前記第１の部分集合内の各記憶素子にコントロールゲート電圧を印加するときに非導電性である前記第１の部分集合内の前記記憶素子の数を判断するステップを含み、
前記コントロールゲート電圧が、前記消去状態と前記目標データ状態の前記隣接する状態とを区別するレベルで印加される、請求項１〜７のいずれか一項に記載の方法。
【請求項９】
前記第２の部分集合内の前記記憶素子が、少なくとも２ページのデータでプログラムされる、請求項１〜８のいずれか一項に記載の方法。
【請求項１０】
消去状態に保たれる組の第１の部分集合内の記憶素子と、それぞれの目標データ状態にプログラムされる前記組の第２の部分集合の記憶素子とを含む、１組の不揮発性記憶素子（３００）と、
各記憶素子と関連付けられたデータラッチ（１９４〜１９７）と、
（ａ）書き込みデータに基づいて、前記第１の部分集合内の前記記憶素子と関連付けられた前記データラッチ内、および前記第２の部分集合内の前記記憶素子と関連付けられた前記データラッチ内でデータを構成し、（ｂ）前記第１の部分集合内の前記記憶素子を禁止し、前記第２の部分集合内の前記記憶素子をプログラムし、プログラムされたときに前記第２の部分集合内の前記記憶素子の進捗に基づいて、前記第２の部分集合内の前記記憶素子の前記関連付けられたデータラッチを更新し、（ｃ）自身のそれぞれの目標データ状態に達していない記憶素子が前記第２の部分集合内の前記記憶素子の最大数に満たず、その結果、前記第２の部分集合内の前記記憶素子の前記プログラミングが正常に完了したとみなされると判断し、（ｄ）前記第２の部分集合内の前記記憶素子の前記プログラミングの前記正常な完了を受けて、前記最初の消去状態と、前記目標データ状態の隣接する状態とを区別する前記第１の部分集合内の前記記憶素子に対して読み出し動作を実行することにより、エラーを有する前記第１の部分集合内の記憶素子の数を判断する、少なくとも１つの制御回路（１９２）と、
を備える不揮発性記憶システム。
【請求項１１】
エラーを有する前記第１の部分集合内の前記記憶素子の前記数が十分に高い場合に、前記少なくとも１つの制御回路が前記書き込みデータを復旧させるために復旧動作を実行し、前記復旧動作が、各目標データ状態を区別する前記第２の部分集合内の前記記憶素子に対して追加読み出し動作を実行する、請求項１０に記載の不揮発性記憶システム。
【請求項１２】
プログラミングを正常に完了した前記第２の部分集合内の各記憶素子が、自身の関連付けられたデータラッチのうちの１つに第１の値を有しており、
前記第１の部分集合内の前記記憶素子の各々が、自身の関連付けられたデータラッチのうちの１つにおける前記第１の値とは異なる値によって特定され、
前記少なくとも１つの制御回路が、前記第１の部分集合内の前記記憶素子を特定するために、前記第１の部分集合内の各記憶素子の前記関連付けられたデータラッチと前記読み出し動作の結果のうちの前記一方を使用して論理演算を実行する、請求項１０または１１に記載の不揮発性記憶システム。
【請求項１３】
各記憶素子と関連付けられた前記データラッチが、第１のデータラッチ（ＱＤＬ）と、第２のデータラッチ（ＵＤＬ）と、第３のデータラッチ（ＬＤＬ）とを含み、
前記第２の部分集合内の前記記憶素子をプログラムするために、前記少なくとも１つの制御回路が、前記第２の部分集合内の前記記憶素子のうちの少なくとも一部をオフセット検証レベルおよび目標検証レベルと照合して、前記目標データ状態のうちの少なくとも１つが存在するかどうかを検証し、
前記オフセット検証レベルおよび前記目標検証レベルと照合して、前記目標データ状態のうちの前記少なくとも１つが存在するかどうかが検証される前記第２の部分集合内の前記記憶素子の各々について、前記第１のデータラッチが、前記記憶素子が前記オフセット検証レベルに達したかどうかを示し、前記第２のデータラッチが上位ページデータを提供し、前記第３のデータラッチが下位ページデータを提供し、
前記第１の部分集合内の前記記憶素子の各々について、前記第１のデータラッチが、プログラミングを正常に完了した前記第２の部分集合内の前記記憶素子の前記第１のデータラッチ内の値とは異なる値を有し、かつ、
前記少なくとも１つの制御回路が、前記第１の部分集合内の前記記憶素子を特定するために、第１のデータラッチを使用して論理演算を実行する、
請求項１０〜１２のいずれか一項に記載の不揮発性記憶システム。
【請求項１４】
前記少なくとも１つの制御回路が、目標データ状態に達していない記憶素子数が前記第２の部分集合内の前記記憶素子の前記最大数に満たないことを検証するために、前記第２の部分集合内の前記記憶素子の各々に対し、前記データラッチを使用して論理演算を実行する、請求項１０〜１３のいずれか一項に記載の不揮発性記憶システム。
【請求項１５】
前記少なくとも１つの制御回路が、前記エラーを有する前記第１の部分集合内の前記記憶素子の前記数を判断するために、前記目標データ状態のうちの少なくとも１つの中に存在するものとして読み出される前記第１の部分集合内の前記記憶素子の数を判断する、請求項１０〜１４のいずれか一項に記載の不揮発性記憶システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、不揮発性メモリに関する。
【背景技術】
【０００２】
半導体メモリは、様々な電子デバイスで次第に広く使用されるようになってきている。たとえば、不揮発性半導体メモリは、携帯電話、ディジタルカメラ、携帯情報端末、モバイル・コンピューティング・デバイス、非モバイル・コンピューティング・デバイスなどのデバイスで使用される。電気的に消去可能なＰＲＯＭ（ＥＥＰＲＯＭ）およびフラッシュメモリは、不揮発性半導体メモリの中で最もよく使用されるものである。フラッシュメモリ、およびある種のＥＥＰＲＯＭに関しては、通常のフル装備のＥＥＰＲＯＭとは異なり、全メモリアレイまたは一部分のメモリの内容を１ステップで消去することができる。
【０００３】
従来のＥＥＰＲＯＭおよびフラッシュメモリは両方、半導体基板内のチャネル領域上に配置され、そのチャネル領域から絶縁されたフローティングゲートを利用する。フローティングゲートは、ソース領域とドレイン領域の間に位置する。フローティングゲートの上に、そのフローティングゲートから絶縁されているコントロールゲートが設けられている。このように形成されているトランジスタの閾値電圧（Ｖｔｈ）は、フローティングゲート上に保持されている電荷量によって制御される。すなわち、そのソースとドレインの間の導通を可能にすべくトランジスタをオンにする前にコントロールゲートに印加すべき電圧の最小量は、そのフローティングゲート上の電荷量レベルにより制御される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
最も重要なのは、データを正確にプログラムし、メモリから読み戻せることである。しかし、様々な失敗パターンがあり、データの破損を招くことがある。
【図面の簡単な説明】
【０００５】
【図１】単一の行／列デコーダおよび読み出し／書き込み回路を用いた不揮発性メモリシステムのブロック図である。
【０００６】
【図２】図１のセンスブロック１００の一実施形態を示すブロック図である。
【０００７】
【図３】図１のメモリアレイ１５５におけるＮＡＮＤフラッシュメモリセルのブロックを示す。
【０００８】
【図４】閾値電圧分布および１パスプログラミングの一例を示す。
【０００９】
【図５】閾値電圧分布および２パスプログラミングの一例を示す。
【００１０】
【図６ａ】閾値電圧分布および中間状態を用いる２パスプログラミングの一例を示す。
【図６ｂ】閾値電圧分布および中間状態を用いる２パスプログラミングの一例を示す。
【図６ｃ】閾値電圧分布および中間状態を用いる２パスプログラミングの一例を示す。
【００１１】
【図７】１組の記憶素子をワードラインを前後する順にプログラムするマルチパスプログラム動作を示す。
【００１２】
【図８ａ】図２のセンスブロックで使用するプログラミング動作の様々な箇所におけるデータラッチの値の例を示す。
【図８ｂ】図２のセンスブロックで使用するプログラミング動作の様々な箇所におけるデータラッチの値の例を示す。
【図８ｃ】図２のセンスブロックで使用するプログラミング動作の様々な箇所におけるデータラッチの値の例を示す。
【図８ｄ】図２のセンスブロックで使用するプログラミング動作の様々な箇所におけるデータラッチの値の例を示す。
【図８ｅ】図２のセンスブロックで使用するプログラミング動作の様々な箇所におけるデータラッチの値の例を示す。
【図８ｆ】図２のセンスブロックで使用するプログラミング動作の様々な箇所におけるデータラッチの値の例を示す。
【００１３】
【図９】使用していない２つのデータラッチの組み合わせに加え、様々なデータ状態に対する、記憶素子の高速、低速、または禁止モードに応じた図８ａ〜図８ｆのデータラッチの値を示す。
【００１４】
【図１０】図９のデータラッチの値の変形例であり、消去状態が、禁止されたＡ、ＢおよびＣ状態とは異なる組み合わせを有する例を示す。
【００１５】
【図１１ａ】図１０のデータラッチの値とＡ状態読み出し動作の結果とに基づく論理演算の使用を示しており、失敗検出プロセスにおける消去状態エラーとプログラム中の高状態エラーを計数する。
【００１６】
【図１１ｂ】図１０のデータラッチの値とＡ状態読み出し動作の結果とに基づく論理演算の使用を示しており、失敗検出プロセスにおける消去状態エラーを計数する。
【００１７】
【図１１ｃ】図１０のデータラッチの値と、データ復旧プロセスにおけるＣおよびＢ状態読み出し動作の結果とに基づいた論理演算の使用を示す。
【００１８】
【図１２ａ】プログラミング中およびプログラミング後の失敗検出および復旧動作の例を示す。
【００１９】
【図１２ｂ】図１２ａのステップ１２１８のプログラミング後のエラー検出および復旧動作に関するさらなる詳細を示す。
【００２０】
【図１２ｃ】図１２ｂのステップ１２４４のデータ復旧動作に関するさらなる詳細を示す。
【００２１】
【図１３】プログラミング動作における選択されたワードラインの波形例と以降のデータ復旧プロセスとを示す。
【発明を実施するための形態】
【００２２】
エラー検出およびデータ復旧を提供する方法および不揮発性記憶システムが提供される。
【００２３】
プログラミング動作中に、いくつかの要因でデータが破損することがある。例えば、製造工程の違いにより、ワードラインまたはブロックに物理的欠陥が存在することがある。場合によっては、ワードラインが基板に短絡し、そのためにブーストが影響を受け、プログラム外乱が発生する。他の潜在的課題は、ワードライン間での短絡、様々なワードライン幅、ブロックの過剰循環、温度関連の影響などを含む。さらに、データの破損が検出されず、手遅れになってデータを復旧できなくなることもある。例えば、書き込みデータに基づき、一部の記憶素子が消去状態のままであるべきなのに対し、他の記憶素子は目標データ状態にプログラムされる。このような場合には、他の記憶素子のプログラミング時に、消去状態の記憶素子が妨害されることがある。同じページデータまたは別のページデータをプログラムするなどの目的で、同じまたは異なるワードライン上で他の記憶素子に対するプログラミングが続行する場合に、消去状態より上の、目標データ状態にプログラムされる記憶素子が妨害されることもある。
【００２４】
データの破損を検出する１つの手法は、全てのデータがプログラムされた後にそれらのデータを読み戻し、元の書き込みデータと比較することである。しかしこの手法は、相当の時間損失を課すことに加え、予備データラッチなど追加記憶リソースを必要とする。１つの対応策として、既存のデータラッチを活用して、消去状態などのエラーが発生しやすい特定のデータ状態に対して破損データを検出する手法が考えられる。この手法では、１組の記憶素子のプログラミングが完了したときに、消去状態を他の状態と区別できるように、データラッチが構成される。プログラミング動作が正常に完了した後に１回の読み出し動作を実行し、データラッチにアクセスし、論理演算を実行することにより、破損した記憶素子を特定することができる。破損した記憶素子の数がＥＣＣ回収可能エラーの数などの閾値を上回る場合には、復旧動作を実行することができる。読み出し結果とデータラッチとに基づき、復旧動作によって追加読み出し動作および論理演算が実行され、書き込みデータを完全に復旧させる。
【００２５】
次に、より高速のプログラミングおよび電力消費の節減を可能にするために使用されうるメモリシステムの一例を説明する。図１は、１つの行／列デコーダと読み出し／書き込み回路とを利用する不揮発性記憶システムのブロック図である。図は、一実施例について、１ページの記憶素子を並列に読み出し又はプログラムするための読み出し／書き込み回路を有するメモリデバイス１９７を示す。メモリデバイス１９７は、１つ以上のメモリダイ１９８を含んでいてもよい。メモリダイ１９８は、記憶素子１５５の２次元メモリアレイと、制御回路１１０、及び、読み出し／書き込み回路１６５を含む。メモリアレイ１５５については図４と関連付けてさらに説明する。
【００２６】
一実施形態では、記憶素子のアレイは、３次元であってもよい。メモリアレイ１５５は、行デコーダ１３０を介したワードラインと、列デコーダ１６０を介したビットラインによってアドレス指定可能である。読み出し／書き込み回路１６５は、複数のセンスブロック１００を含んでおり、１ページの記憶素子を並列に読み出し又はプログラムすることを許容する。典型的には、コントローラ１５０は、１つ以上のメモリダイ１９８のような同じメモリデバイス１９７（例えば、取り外し可能なストレージカード）内に含まれる。命令及びデータは、ライン１２０を介して、ホストとコントローラ１５０の間で転送され、また、ライン１１８を介して、コントローラと１つ以上のメモリダイ１９８の間で転送される。
【００２７】
制御回路１１０は、読み出し／書き込み回路１６５と協調して、メモリアレイ１５５に対してメモリ動作を実行する。制御回路１１０は、ステートマシン１１２、オンチップアドレスデコーダ１１４、及び電力制御モジュール１１６を含む。ステートマシン１１２は、メモリ動作のチップレベルの制御を提供する。オンチップアドレスデコーダ１１４は、ホスト又はメモリコントローラによって用いられるアドレスと、デコーダ１３０，１６０によって用いられるハードウェアアドレスとの間にアドレスインタフェースを提供する。電力制御モジュール１１６は、メモリ動作中のワードライン及びビットラインに供給される電力及び電圧を制御する。
【００２８】
いくつかの実施態様では、図１の構成要素の一部が結合されうる。様々な設計で、メモリアレイ１５５以外の構成要素のうちの１つまたは複数（単独あるいは組合せ）が、管理または制御回路として考えられうる。たとえば、１つまたは複数の制御回路は、制御回路１１０、ステートマシン１１２、デコーダ１１４／１６０、電力制御１１６、センスブロック１００（図２のプロセッサ１９２を含む）、読み出し／書き込み回路１６５、コントローラ１５０などのいずれか１つまたは組合せを含みうる。センスブロック１００は図２と関連付けてさらに説明する。
【００２９】
別の実施形態において、不揮発性メモリシステムは、２つの行／列デコーダおよび読み出し／書き込み回路が使用される。様々な周辺回路によるメモリアレイ１５５へのアクセスは、アレイの反対側で対称的に実施され、したがって、アクセス線の密度および各辺の回路は半減される。そのため、行デコーダは２つの行デコーダに分割され、列デコーダは２つの列デコーダに分割される。同様に、読み出し／書き込み回路は、最下部からビットラインに接続する読み出し／書き込み回路と、アレイ１５５の最上部からビットラインに接続する読み出し／書き込み回路とに分割される。このようにして、読み出し／書き込みモジュールの密度は本質的に半分減少する。
【００３０】
図２は、センスブロックの一実施形態を示すブロック図である。個々のセンスブロック１００は、センスモジュール１８０またはセンスアンプと呼ばれる１つ以上のコア部分と、管理回路１９０と呼ばれる共通部分とに区分けされる。一実施形態では、ビットラインごとに別々のセンスモジュール１８０が備えられており、１組の複数の、例えば４つまたは８つの、センスモジュール１８０につき１つの共通管理回路１９０が備えられている。グループ内のセンスモジュールの各々は、データバス１７２を介して、関連付けられた管理回路と通信する。そのため、１組の記憶素子のセンスモジュールと通信する１つ以上の管理回路が存在する。
【００３１】
センスモジュール１８０は、接続されたビットライン内の伝導電流が予め決められた閾値レベルより高いか低いかを判断することによって検知を実行するセンス回路１７０を備えている。センスモジュール１８０は、さらに、接続されたビットラインに電圧状態を設定するために用いられるビットラインラッチ１８２を含む。例えば、ビットラインラッチ１８２内で予め決められた状態がラッチされることによって、接続されたビットラインを、プログラム禁止を指定する状態（例えば、１．５〜３Ｖ）に引き上げる（プル）する。例えば、ｆｌａｇ＝０がプログラミングを禁止できるのに対し、ｆｌａｇ＝１はプログラミングを禁止しない。
【００３２】
管理回路１９０は、プロセッサ１９２と、データラッチ１９４〜１９７の４組の例と、データラッチの組１９４とデータバス１２０との間を連結するＩ／Ｏインタフェース１９６とを備えている。センスモジュールごとに１組のデータラッチを設けることができ、ＱＤＬ、ＵＤＬおよびＬＤＬによって特定される３つのデータラッチを組ごとに設けることができる。データラッチの使用については、特に図８ａ〜図８ｆ、図９、図１０および図１１ａ〜図１１ｃを参照しながら、以下でさらに詳述する。プロセッサ１９２は、検知された記憶素子に記憶されているデータを判断し、判断されたデータをデータラッチの組内に記憶するなどの目的で計算を実行する。データラッチ１９４〜１９７の各組は、読み出し動作時にプロセッサ１９２によって判断されたデータビット群を記憶する目的、および、プログラム動作時にデータバス１２０から取り込んだデータビット群を記憶する目的で使用され、取り込まれるデータビット群は、メモリ内にプログラムされる予定の書き込みデータを表す。Ｉ／Ｏインタフェース１９６は、データラッチ１９４〜１９７とデータバス１２０との間のインタフェースを提供する。
【００３３】
読み出し中には、システムの動作は、ステートマシン１１２の制御下にあり、ステートマシン１１２は、アドレス指定された記憶素子への種々のコントロールゲート電圧の供給を制御する。メモリに用意された様々なメモリ状態に対応する様々な既定コントロールゲート電圧のステップを進む毎に、センスモジュール１８０は、これらの電圧の１つに遷移し、バス１７２を介して、センスモジュール１８０からプロセッサ１９２に対応する出力が提供される。その時点で、プロセッサ１９２は、センスモジュールの遷移イベントと、ステートマシンから入力ライン１９３を介して加えられたコントロールゲート電圧についての情報によって、結果としてのメモリ状態を特定する。それから、プロセッサは、メモリ状態に対するバイナリ符号化を計算し、得られたデータビット群をデータラッチ１９４〜１９７に格納する。管理回路１９０の別の実施形態では、ビットラインラッチ１８２は、センスモジュール１８０の出力をラッチするラッチ、及び、上記のようなビットラインラッチの二つの役割を持つ。
【００３４】
いくつかの実装形態では、複数のプロセッサ１９２を含むことができる。一実施形態では、各プロセッサ１９２は、出力ライン（図示省略）を含み、各出力ラインは、ワイヤードＯＲ（配線論理和）接続される。いくつかの実施形態では、出力ラインは、ワイヤードＯＲラインに接続される前段階で反転される。この構成は、ワイヤードＯＲを受け取るステートマシンが、プログラムされる全てのビットがいつ所望のレベルに到達したかを判断できるので、プログラム処理の完了時点を判定するプログラム検証処理における素早い判定を可能にする。例えば、各ビットがその所望のレベルに到達すると、そのビット用の論理「０」がワイヤードＯＲラインに送られる（又はデータ「１」が反転される）。全てのビットがデータ「０」を出力すると（又はデータ「１」が反転されると）、ステートマシンは、プログラミング処理の完了を知る。各プロセッサが８個のセンスモジュールと通信する実施形態では、ステートマシンは、ワイヤードＯＲラインを８回読み出す必要があり、あるいは、協働するビットラインの結果を蓄積するための論理をプロセッサ１９２に追加し、ステートマシンがワイヤードＯＲラインを一度だけ読み出せば良いようにする。同様に、論理レベルを正しく選択することによって、第１ビットの状態が変化し、それに従ってアルゴリズムが変化する際に、グローバルステートマシーンは、検出し得る。
【００３５】
プログラム動作又は検証動作の間、プログラムされるべきデータ（書き込みデータ）は、データバス１２０から複数のデータラッチ１９４〜１９７内に記憶される。ステートマシン制御下のプログラム処理は、アドレス指定される記憶素子のコントロールゲートに加えられる、一連のプログラミング電圧パルスを伴う。各プログラミングパルスに続いて、復唱（検証）によって、記憶素子が所望の状態にプログラムされたかどうかを判定する。いくつかの場合では、プロセッサ１９２は、所望のメモリ状態に対する復唱メモリ状態を監視する。その２つが一致したとき、プロセッサ１９２は、プログラム禁止を指定する状態にビットラインを引き上げるように、ビットラインラッチ１８２を設定する。これにより、たとえプログラミングパルスがそのコントロールゲートに影響しても、ビットラインに接続した記憶素子がさらにプログラミングされないようにすることができる。他の実施形態では、プロセッサが最初にビットラインラッチ１８２をロードし、センス回路が検証処理中にそれに禁止値を設定する。
【００３６】
データラッチ１９４〜１９７の各組は、各センスモジュールのデータラッチのスタックとして実装されてもよい。一実施形態では、センスモジュール１８０毎に３個データラッチが存在する。いくつかの実装形態では、データラッチは、シフトレジスタとして実装され、内部に記憶されたパラレルデータをデータバス１２０用にシリアルデータに変換したり、その逆を行ったりする。ｍ個の記憶素子の読み出し／書き込みブロックに対応する全てのデータラッチを相互にリンクしてブロックシフトレジスタを構成し、シリアル転送によって、データのブロックを入力または出力できるようにする。特に、読み出し／書き込みモジュールの一群のデータラッチのそれぞれが、データバスへ或いはデータバスからデータを順に転送するように読み出し／書き込みモジュールのバンクを構成し、一群のデータラッチがあたかも読み出し／書き込みブロック全体のシフトレジスタの一部であるかのようにしてもよい。
【００３７】
データラッチは、関連付けられた記憶素子がプログラミング動作中に特定の管理点に達した時期を特定する。例えば、ラッチは、記憶素子のＶｔｈが、高速プログラミングモードで下位検証レベル（例えば、図５におけるＶｖａＬもしくはＶｖｂＬ）未満であるか、低速プログラミングモードで下位検証レベル（例えば、ＶｖａＬもしくはＶｖｂＬ）超であるが上位検証レベルもしくは目標検証レベル（例えば、Ｖｖａ、ＶｖｂもしくはＶｖｃ）未満であるか、または禁止モードで上位検証レベルもしくは目標検証レベル超であることを識別してもよい。データラッチは、記憶素子がページデータからの１つ以上のビットを現在記憶しているかどうかを示す。例えば、ＬＤＬラッチは、下位ページのデータを記憶する目的で使用することができる。ＬＤＬラッチは、関連付けられた記憶素子に下位ページビットが記憶されるときに、（例えば０から１へと）反転される。ＵＤＬラッチは、例えば、上位ページのデータを記憶する目的で使用することができる。ＵＤＬラッチは、関連付けられた記憶素子に上位ページビットが記憶されるときに反転される。反転は、関連付けられた記憶素子がプログラミングを完了するとき、例えば、記憶素子のＶｔｈがＶｖａ、ＶｖｂまたはＶｖｃなどの目標検証レベルを超えるときに行われる。ＱＤＬラッチは、関連付けられた記憶素子が低速プログラミングモードにあるときに反転され得る。
【００３８】
一部の検出方式では、記憶素子のいずれかが一旦ロックアウトされると、その記憶素子を対象とする全てのデータラッチ（ＱＤＬ、ＬＤＬ、ＵＤＬ）が「１」に設定される。ただし、これだと、様々なデータ状態でロックアウトされた記憶素子を区別することができない。例えば、Ｅ状態記憶素子を、Ａ、ＢまたはＣ状態記憶素子と区別することができない。以下でさらに詳述するとおり、データラッチは、この課題を克服し、それによって効率的なエラー検出および復旧動作を実施するための最適な方法で使用することができる。
【００３９】
図３は、図１のメモリアレイ１５５におけるＮＡＮＤフラッシュメモリセルのブロックを示す。メモリアレイは多数のブロックを含むことができる。各ブロック例３００、３１０は、多数のＮＡＮＤストリングと、ブロックで共有されるＢＬ０、ＢＬ１、．．．といったそれぞれのビットラインとを含む。各ＮＡＮＤストリングは、一端でドレイン選択ゲート（ＳＧＤ）に接続されており、ドレイン選択ゲートのコントロールゲートは、共通のＳＧＤラインを介して接続されている。ＮＡＮＤストリングは、他端でソース選択ゲートに接続されており、ひいては、共通ソースライン３２０に接続されている。ソース選択ゲートとドレイン選択ゲートとの間には、ＷＬ０〜ＷＬ６３など、６４本のワードラインが延在している。
【００４０】
ＮＡＮＤフラッシュメモリに加え、他のタイプの不揮発性メモリを使用することもできる。たとえば、フラッシュＥＥＰＲＯＭシステムで有用な別のタイプのメモリセルは、導電性のフローティングゲートの代わりに非導電性の誘電素材を利用して不揮発的に電荷を蓄積する。導電性のコントロールゲートと、メモリ・セル・チャネルの上方にある半導体基板の表面との間に、酸化ケイ素、窒化ケイ素および酸化ケイ素（「ＯＮＯ」）で形成された３重の層誘電体が挟まれている。このセルは、セルチャネルから窒化物に電子を注入することによってプログラムされ、注入された電子は、限られた領域内で捕捉され、蓄積される。この蓄積された電荷はその後、検出可能な方法でセルのチャネルの一部分の閾値電圧を変える。このセルは、窒化物にホットホールを注入することによって消去される。ドープ処理したポリシリコンゲートが別々のセレクトトランジスタを形成するためにメモリ・セル・チャネルの一部分を超えて延伸するスプリットゲート構成で同様のセルを設けることができる。
【００４１】
別のアプローチでは、ＮＲＯＭセルが使用される。たとえば、各ＮＲＯＭセルに２ビットが蓄積され、そこでＯＮＯ誘電体層がソース拡散領域とドレイン拡散領域との間のチャネル全体に延伸する。一方のデータビットの電荷は、ドレインに隣接する誘電体層に限局され、もう一方のデータビットの電荷はソースに隣接する誘電体層に限局される。誘電体内で空間的に分離された電荷蓄積領域のバイナリ状態を別々に読み込むことにより、マルチステートのデータ記憶が得られる。他のタイプの不揮発性メモリも公知である。
【００４２】
図４は、閾値電圧区分と、ワンパスプログラミングの一例を示す。記憶素子アレイの例示の閾値電圧区分は、各記憶素子が２ビットのデータを記憶するケースに対して提供されている。第１の閾値電圧区分４００は、消去された（Ｅ状態）記憶素子に対して提供される。３つの閾値電圧区分４０２、４０４及び４０６は、プログラミングされた状態Ａ，Ｂ及びＣで、それぞれ示されている。一実施形態では、Ｅ状態区分の閾値電圧は負であり、Ａ状態、Ｂ状態及びＣ状態区分の閾値電圧は正である。
【００４３】
特定の状態にある記憶素子の個数は、閾値電圧が、対応する検証レベルを超えると判断される記憶素子の計数を維持することによって判断される。
【００４４】
それぞれの閾値電圧範囲は、データビットのセットの所定値に対応する。記憶素子にプログラミングされたデータと記憶素子の閾値電圧レベルの特定の関係は、記憶素子のために採用されるデータ符号化方式に依存する。一実施形態では、フローティングゲートの閾値電圧が誤ってその近傍の物理状態にシフトした場合に１ビットだけが影響を受けるように、データ値がグレーコード割り当てを使用して閾値電圧範囲に割り当てられる。一例は、閾値電圧範囲Ｅ（状態Ｅ）に「１１」を、閾値電圧範囲Ａ（状態Ａ）に「１０」を、閾値電圧範囲Ｂ（状態Ｂ）に「００」を、及び閾値電圧範囲Ｃ（状態Ｃ）に「０１」を割り当てる。しかしながら、他の実施形態では、グレーコードは使用されない。４つの状態が示されているが、４つの状態より多い又は少ない構造を含む他のマルチステート構造に使用することもできる。
【００４５】
読み出し参照電圧Ｖｒａ、Ｖｒｂ、及び、Ｖｒｃは、記憶素子からデータを読み出すために提供される。既定の記憶素子の閾値電圧がＶｒａ、Ｖｒｂ及びＶｒｃを上回っているのか、あるいは下回っているのかをテストすることによって、システムは、記憶素子が存在する状態、即ち、プログラム状態を判断することができる。
【００４６】
さらに、３つの検証参照電圧Ｖｖａ、Ｖｖｂ、及び、Ｖｖｃが提供される。記憶素子を状態Ａにプログラミングするとき、システムは、それらの記憶素子がＶｖａ以上の閾値電圧を有するかどうかをテストする。記憶素子を状態Ｂにプログラミングするとき、システムは、記憶素子がＶｖｂ以上の閾値電圧を有するかどうかをテストする。記憶素子を状態Ｃにプログラミングするとき、システムは、記憶素子がＶｖｃ以上の閾値電圧を有するかどうかを判断する。
【００４７】
フルシーケンスプログラミングとして知られている一実施形態においては、記憶素子は、Ｅ状態からプログラミングされた状態Ａ、Ｂ又はＣの何れかに直接的にプログラミングされる。例えば、まず、プログラミングされる記憶素子の集合中の全ての記憶素子が消去状態Ｅとなるように、集合が消去される場合がある。次に、図１３で示されるような一連のプログラムパルスが、記憶素子を状態Ａ、Ｂ又はＣに直接的にプログラミングするために使用される。いくつかの記憶素子は状態Ｅから状態Ａにプログラムされ、他の記憶素子は状態Ｅから状態Ｂに、及び／又は、状態Ｅから状態Ｃにプログラミングされる。
【００４８】
さらに、１つ以上のデータ状態に対してオフセット検証レベルおよび目標検証レベルが使用される。例えば、ＶｖａＬおよびＶｖａは、それぞれ、Ａ状態のオフセット検証レベルおよび目標検証レベルであり、ＶｖｂＬおよびＶｖｂは、それぞれ、Ｂ状態のオフセット検証レベルおよび目標検証レベルである。オフセット検証レベルは、最終検証レベルまたは目標検証レベルからオフセットされる。オフセット検証レベルは、プログラミング方式に依存する目標検証レベルよりも高い可能性がある。検証レベルは、電圧または電流を表すことができる。
【００４９】
プログラミング中、（目標状態としてＡ状態にプログラムされることになっている）Ａ状態記憶素子のＶｔｈがＶｖａＬ以下の場合には、記憶素子が高速プログラミングモードでプログラムされる。これは、ビットラインを接地することによって達成されてもよい。Ｖｖａ≧Ｖｔｈ＞ＶｖａＬの場合には、関連付けられたビットライン電圧を接地レベルと完全禁止レベルとの間のレベルに引き上げるなどの方法により、記憶素子が低速プログラミングモードでプログラムされる。これによって精度が向上するため、閾値電圧の大幅増を回避することによってＶｔ分布が狭まる。Ｖｔｈ＞Ｖｖａの場合には、記憶素子がこれ以上プログラミングされないようにロックアウトされる。同様に、（Ｂ状態にプログラムされることになっている）Ｂ状態記憶素子が、高速および低速プログラミングモードを有することができる。なお、１つの手法では、Ｃ状態など最高状態の場合には、他の状態よりもメリットが少ないことから、低速プログラミングモードは使用されない。
【００５０】
消去状態と７つのプログラム状態Ａ〜Ｇとを有する８状態プログラミングの一例では、例えば、中間状態Ａ〜Ｆに対して高速および低速プログラミングモードを使用できる可能性がある。
【００５１】
図５は、２つの異なるページ（下位ページと上位ページ）に対してデータを記憶するマルチステート記憶素子にプログラムする２パス技術の一例を示している。４つの状態は、図４から閾値電圧区分４００，４０２，４０４及び４０６を繰り返すことによって示されている。これらの状態（これらの状態が示すビット）は、状態Ｅ（１１）、状態Ａ（０１）、状態Ｂ（００）及び状態Ｃ（１０）である。状態Ｅの場合、両方のページが「１」を記憶する。状態Ａの場合、下位ページが「１」を記憶し、上位ページが「０」を記憶する。状態Ｂの場合、両方のページが「０」を記憶する。状態Ｃの場合、下位ページが「０」を記憶し、上位ページが「１」を記憶する。なお、各状態に対して特定のビットパターンが割り当てられているが、異なるビットパターンが割り当てられてもよい。
【００５２】
第１プログラミングパスでは、記憶素子のＶｔｈは下位論理ページにプログラムされるビットに従って設定される。そのビットが論理「１」であれば、以前に消去された結果として適切な状態にあるのでＶｔｈは変更されない。しかし、プログラムされるビットが論理「１」であれば、矢印５００で示したように、Ｖｔｈは状態Ａになるように増大される。これによって、第１プログラミングパスを終了する。
【００５３】
第２プログラミングパスでは、記憶素子のＶｔｈが、上位論理ページ内にプログラミング中のビットに従って設定される。下位ページ、上位ページが１、１である場合には、記憶素子が状態Ｅにあることから、プログラミングは行われない。下位ページ、上位ページが０、１である場合には、記憶素子が状態Ａにあることから、プログラミングは行われない。下位ページ、上位ページが０、０である場合には、矢印５１０によって表される状態Ａから状態Ｂへの移行が行われる。下位ページ、上位ページが１、０である場合には、矢印５２０によって表される状態Ｅから状態Ｃへの移行が行われる。
【００５４】
この例では、オフセット検証レベルＶｖａＬおよびＶｖｂＬも、Ａ状態およびＢ状態に対してそれぞれ使用することができる。
【００５５】
一実施形態では、上位及び下位ページデータの両方が利用可能である場合に、十分なデータを書き込まれた場合、システムは全シーケンス書き込みを実行するように設定される。十分なデータが利用可能でない場合、プログラミング動作は受け取ったデータを用いて下位ページプログラミングを実行できる。次のデータを受け取ったときは、システムは上位ページをプログラミングする。さらに別の実施形態では、システムは下位ページをプログラムするモードで書き込みを開始し、ワードラインの記憶素子の全体（又は大部分）を充填するために次の十分なデータを受け取った場合、全シーケンスプログラミングモードに変換する。
【００５６】
図６ａ〜ｃは、閾値電圧分布の組と中間状態を使用する２パスプログラミングの一例を示す。このプログラミング技術は前のページの隣接記憶素子に書き込んだ後で、特定のページに対してその特定の記憶素子を書き込むことによって、その特定の記憶素子に対するフローティングゲート間結合の影響を低減する。実装形態の一例では、不揮発性記憶素子は、４つのデータ状態を用いて記憶素子毎に２ビットのデータを記憶する。例えば、Ｅ状態が消去状態であり、状態Ａ、Ｂ及びＣがプログラムされた状態である。前述したように、状態Ｅはデータ１１を記憶し、状態Ａはデータ０１を記憶し、状態Ｂはデータ００を記憶し、状態Ｃはデータ１０を記憶している。データの物理的データ状態への他の符号化を用いることもできる。各記憶素子は２ページ分のデータを記憶する。参照のために、これらのページのデータは上位ページ及び下位ページと呼ばれるが、他のラベルを与えることもできる。
【００５７】
プログラミング動作は、２つのステップの処理である。第１ステップでは、下位ページをプログラムする。下位ページがデータ１のままである場合、記憶素子状態は状態Ｅに留まる(区分６００)。データが０にプログラムされる場合、記憶素子の閾値電圧は上昇し、記憶素子は状態Ｂ’にプログラムされる（区分６１０）。従って、図６ａは、状態Ｅから状態Ｂ’への記憶素子のプログラミングを示している。状態Ｂ’は中間状態Ｂであり、従って、検証点はＶｖｂ’として示され、Ｖｖｂより低い。
【００５８】
一実施形態では、状態Ｅから状態Ｂ’に記憶素子をプログラムした後、ＮＡＮＤストリング内の隣接記憶素子（ＷＬｎ＋１）をその下位ページに対してプログラムする。これは、図６ｂの閾値電圧区分６１２に示したように状態Ｂ’の閾値電圧区分を拡大する影響を有する。閾値電圧区分のこの見かけの拡大は、上位ページをプログラムする際に修正される。Ｅ状態も、区分６０２によって示されるように拡大される。
【００５９】
図６ｃは、上位ページをプログラムする工程を示している。記憶素子が消去状態Ｅであって上位ページが１である場合、記憶素子は状態Ｅに留まる（区分６０２）。記憶素子が状態Ｅであり、その上位ページデータが０である場合、記憶素子の閾値電圧は上昇し、記憶素子は状態Ａになる（区分６０４）。記憶素子が中間の閾値電圧区分６１２であって、上位ページデータが０である場合、記憶素子は最終状態Ｂにプログラムされる（区分６０６）。記憶素子が中間の閾値電圧区分６１２であって、上位ページデータがデータ１になる場合、記憶素子の閾値電圧は上昇し、記憶素子は状態Ｃになる（区分６０８）。この例では、同様に、Ａ及びＢデータ状態のために、オフセット検証レベルが利用され得る。隣接記憶素子の上位ページプログラミングだけが所定の記憶素子の見かけの閾値電圧に影響を与えるので、図６ａ〜ｃで示した工程は、フローティングゲート間結合影響を低減する。別の状態符号化の一例は、上位ページデータが０であるとき区分６１２から状態Ｃに移動することであり、上位ページデータが１であるとき状態Ｂに移動することである。
【００６０】
図６ａ〜ｃは４つのデータ状態と２つのページデータに対する一例を提供するが、開示された概念は４つの状態より多い、又は少ない状態、及び２つのページとは異なるページを備えた他の実装形態に適用することもできる。例えば、記憶素子毎に８つの状態または１６個の状態を有するメモリデバイスが、現在計画され、製造されている。
【００６１】
図７は、１組の記憶素子を、ワードラインを前後する順にプログラムするマルチパスプログラム動作を示す。描かれた構成要素は、はるかに大きい１組の記憶素子、ワードラインおよびビットラインの部分集合であってもよい。１つの可能なプログラム動作では、ＷＬｎ−１（たとえば、記憶素子７０２、７０４および７０６）上の記憶素子が、第１のプログラミングパスでプログラムされる。このステップは、丸付き数字「１」で表される。次に（「２」）、ＷＬｎ上の記憶素子（たとえば、記憶素子７１２、７１４および７１６）が、第１のプログラミングパスでプログラムされる。本実施例では、プログラミング対象のワードラインが選択された場合、各プログラムパルスの後に検証動作が行われる。ＷＬｎに対する検証動作のときに１つまたは複数の検証電圧がＷＬｎに印加され、ＷＬｎ−１およびＷＬｎ＋１を含む残りのワードラインにパス電圧が印加される。このパス電圧は、選択されたワードラインの検知動作が実行できるように、選択されていない記憶素子をオンにする（導通する）目的で使用される。次に（「３」）、ＷＬｎ−１上の記憶素子が第２のプログラミングパスでプログラムされる。次に（「４」）、ＷＬｎ＋１上の記憶素子が第１のプログラミングパスでプログラムされる。次に（「５」）、ＷＬｎ上の記憶素子が、第２のプログラミングパスでそれぞれの最終状態にプログラムされる。
【００６２】
ＷＬｎ＋１でのプログラミングにより、ＷＬｎ上の記憶素子は、状態ごとにそれらの閾値電圧分布を引き上げ、拡張する傾向のある連結による影響を受ける。この影響は、シングルパスプログラミングとマルチパスプログラミングとの両方で起こりうる。シングルパスプログラミングでは、各ワードラインが完全にプログラムされた後で、ＷＬｎ−１、次にＷＬｎ、次にＷＬｎ＋１という具合に次のワードラインに移る。
【００６３】
図８ａ〜図８ｆは、図２のセンスブロックで使用するプログラミング動作の様々な箇所におけるデータラッチの値の例を示す。この例では、各ビットラインが３つのデータラッチ、すなわちＱＤＬ、ＵＤＬおよびＬＤＬ、と関連付けられている。データラッチは、それぞれ、第１、第２および第３のデータラッチとみなすことができる。各ビットラインおよび選択された記憶素子は、第１、第２および第３のデータラッチを有してもよい。あるビットラインの第１のデータラッチは、別のビットラインの第１のデータラッチに対応し、例えば、両方がＱＤＬであり得る。あるビットラインの第２のデータラッチは、別のビットラインの第２のデータラッチに対応し、例えば、両方がＵＤＬであり得る。あるビットラインの第３のデータラッチは、別のビットラインの第３のデータラッチに対応し、例えば、両方がＬＤＬであり得る。ＵＤＬおよびＬＤＬが、上位ページおよび下位ページのビット情報をそれぞれ記憶するのに対し、ＱＤＬは、記憶素子が下位検証レベルをパスしたかどうかに関する情報を記憶する。
【００６４】
図８ａは、関連付けられた記憶素子の目標データ状態に応じたプログラミングの開始時におけるデータラッチの各組のビット値を示す。Ｅ状態記憶素子の場合、全てのラッチが１に設定される。Ａ状態記憶素子の場合、ＱＤＬ、ＵＤＬおよびＬＤＬラッチは、それぞれ０、０および１に設定される。Ｂ状態記憶素子の場合には、全てのラッチが０に設定される。Ｃ状態記憶素子の場合、ＱＤＬ、ＵＤＬおよびＬＤＬラッチは、それぞれ０、１および０に設定される。
【００６５】
図８ｂは、関連付けられた記憶素子の目標データ状態に応じた各データラッチのビット値であって、Ａ状態記憶素子のＶｔｈが下位検証レベルＶｖａＬをパスした後の値を表す。破線のボックスによって示すとおり、ＱＤＬビットは１に反転される。データラッチの変更は、各プログラム検証反復処理の終了時であって、検証動作が実行された後に行われる。
【００６６】
図８ｃは、接続された記憶素子の目標データ状態に応じた各ラッチのビット値であって、Ａ状態記憶素子のＶｔｈが目標検証レベルＶｖａをパスした後のものを示す。ＵＤＬビットは、破線のボックスに示されるように、０に反転される。
【００６７】
図８ｄは、接続された記憶素子の目標データ状態に応じた各ラッチのビット値であって、Ｂ状態記憶素子のＶｔｈが下位検証レベルＶｖｂＬをパスした後のものを示す。ＱＤＬビットは、破線のボックスに示されるように、１に反転される。
【００６８】
図８ｅは、接続された記憶素子の目標データ状態に応じた各ラッチのビット値であって、Ｂ状態記憶素子のＶｔｈが目標検証レベルＶｖｂをパスした後のものを示す。ＵＤＬビットおよびＬＤＬビットは、破線のボックスに示されるように、１に反転される。
【００６９】
図８ｆは、接続された記憶素子の目標データ状態に応じた各ラッチのビット値であって、Ｃ状態記憶素子のＶｔｈが目標検証レベルＶｖｃをパスした後のものを示す。ＱＤＬビットおよびＬＤＬビットは、破線のボックスに示されるように、１に反転される。
【００７０】
図９は、使用していない２つのデータラッチの組み合わせに加え、様々なデータ状態に対する、記憶素子の高速、低速、または禁止モードに応じた図８ａ〜図８ｆのデータラッチの値を示す。既述のとおり、記憶素子は、目標データ状態のオフセット検証レベルに達するまで、高速プログラミングモードでプログラムすることができ、その後は、目標データ状態の目標検証レベルに達するまで、低速プログラミングモードでプログラムされ、その後はそれ以上のプログラミングが禁止される。ここで設けられたデータラッチは、様々なプログラミングモードと様々なデータ状態とを対象とする様々な３ビットの組み合わせを含む。
【００７１】
「Ｅ」は、Ｅ状態のままであり、その結果失敗が起こらないＥ状態記憶素子を表す。「Ｅｆａｉｌ」は、Ｅ状態を上回るように妨害され、その結果失敗が起こるＥ状態記憶素子を表す。これらの状況は共に、書き込みデータに応じてＥ状態記憶素子になる予定だったことから、同じデータラッチの値によって表される。「Ａｆａｓｔ」、「Ａｓｌｏｗ」およびＡｉｎｈｉｂｉｔ（「Ａｉｎｈ」）は、それぞれ、Ａ状態記憶素子の高速、低速、および禁止モードを表す。同様に、「Ｂｆａｓｔ」、「Ｂｓｌｏｗ」およびＢｉｎｈｉｂｉｔ（「Ｂｉｎｈ」）は、それぞれ、Ｂ状態記憶素子の高速、低速および禁止モードを表す。「Ｃｆａｓｔ」およびＣｉｎｈｉｂｉｔ（「Ｃｉｎｈ」）は、それぞれ、Ｃ状態記憶素子の高速モードおよび禁止モードを表す。Ａ、ＢおよびＣ状態記憶素子は、プログラミング動作終了時にＱＤＬ＝ＵＤＬ＝ＬＤＬ＝１を有するため、それらのデータラッチによって互いを区別することができない。同様に、この実装形態では、Ｅ状態記憶素子が、プログラミング動作の終了時にＡ、ＢおよびＣ状態記憶素子と区別することができない。
【００７２】
３つのデータラッチが存在することから、３要素（ＱＤＬ、ＵＤＬ、ＬＤＬ）の可能な固有の組み合わせが２３＝８通り存在することを理解することにより、この課題への対応策を見出すことができる。ただし、この例では、記憶素子が、Ｅ状態、Ｅ状態超だがＶｖａＬ未満、ＶｖａＬとＶｖａとの間、Ｖｖａ超だがＶｖｂＬ未満、ＶｖｂＬとＶｖｂとの間、およびＶｖｂ超だがＶｖｃ未満、という６つのカテゴリによってのみ特徴付けることができる。そのため、これらの組み合わせのうち、＃１（０，１，１）および＃２（１，１，０）の２つは使用されない。
【００７３】
これらの組み合わせは、エラー検出およびデータ復旧目的で使用することができる。組み合わせ＃１は、この組み合わせのＵＤＬおよびＬＤＬデータが通常のＥ状態記憶素子、すなわち、ＵＤＬ＝１およびＬＤＬ＝１、の場合と同じである利点を有する、つまり、Ｅ状態記憶素子の上位ページおよび下位ページビット情報が変わらないままということである。この構成では、ＱＤＬ＝０が使用され、ＱＤＬ＝１は、禁止されたＡ、ＢおよびＣ状態記憶素子を表す目的で使用される。これにより、プログラミング動作の終了時にＥ状態記憶素子をＡ、ＢおよびＣ状態記憶素子と区別することができる。
【００７４】
図１０は、図９のデータラッチの値の変形例を表しており、消去状態は、禁止されたＡ、ＢおよびＣ状態とは異なる組み合わせを有する。ここで、「Ｅ」および「Ｅｆａｉｌ」記憶素子に関して、ＱＤＬ＝０、ＵＤＬ＝１およびＬＤＬ＝１である。図９に示すものと同じ組み合わせを、他のデータ状態でも維持することができ、同じ組み合わせが図１０で繰り返される。プログラミング動作の終了時に、全てのＥ状態記憶素子がデータラッチ（０，１，１）を有するのに対し、禁止されたＡ、ＢおよびＣ状態記憶素子は、（１，１，１）というデータラッチを有する。そのため、プログラミング終了時に、ＱＤＬをスキャンすれば、Ｅ状態記憶素子と他の記憶素子とを区別することができる。
【００７５】
Ｅ状態記憶素子は、ワードラインなど、より大きな組の記憶素子内の記憶素子の第１の部分集合内にあるとみなすことができ、Ａ、ＢおよびＣ状態記憶素子は、その組の第２の部分集合内にあるとみなすことができる。異なる状態の各種記憶素子は、ランダムに分布および混在させることができる。第２の部分集合内の記憶素子は、Ｅ状態に隣接する第１の目標データ状態（Ａ状態）、第１の目標データ状態に隣接する第２の目標データ状態（Ｂ状態）、および第２の目標データ状態に隣接する第３の目標データ状態（Ｃ状態）を含む、少なくとも３つの目標データ状態にプログラムされる。プログラミングを正常に完了した第２の部分集合内の各記憶素子は、関連付けられたデータラッチ（例えばＱＤＬ）のうちの１つに第１の値（例えば１）を有し、第１の部分集合内の各記憶素子は、関連付けられたデータラッチ（例えばＱＤＬ）のうちの１つにおける第１の値とは異なる値（例えば０）によって特定される。
【００７６】
この改訂されたデータラッチ構成は、記憶素子が高い状態Ｘ、典型的にはＡ状態、に移行するために起きるＥ−＞Ｘ失敗と呼ばれるＥ状態の失敗の数を判断する目的で使用することができる。プログラミング動作の終了時に、Ｖｒａ（またはＥ状態区分とＡ状態区分との間の他の電圧）を使用して読み出し動作を実行し、Ｖｔｈ＞Ｖｒａである記憶素子を特定することができる。検知中は、これらの記憶素子は非導電性である。読み出し動作の結果とＱＤＬ値とに基づいて、Ｅ−＞Ｘ失敗の数を計数することができる。記憶素子のページにおける失敗の数が、ビット無視閾値（例えば、メモリデバイスでＲＯＭヒューズパラメータによって設定される）と呼ばれる閾値よりも高い場合には、そのページでプログラム状態＝ｆａｉｌを設定することができる。そのページ上のデータは、Ｖｒｃ（またはＢ状態区分とＣ状態区分との間の他の電圧）でのＣ状態読み出しと、次に行われるＶｒｂ（またはＡ状態区分とＢ状態区分との間の他の電圧）でのＢ状態読み出しとを含む完全読み出し動作を実行することを含む復旧動作によって、復旧させることができる。復旧動作は、次に述べるとおり、エラー検出プロセスからすでに利用可能であるＡ状態読み出し結果も使用し、データラッチの値にアクセスし、適切な論理演算を実行する。
【００７７】
なお、図１０のこのデータラッチ割り当ては、高速または低速プログラミングモードがアクティブであるかどうかを示すプログラムデータ転送に影響する。比較のために、図９の手法は、（ＳＡ＜＝ＱＤＬを使用して）ＱＤＬを参照することによってのみ、高速または低速プログラミングモードがアクティブであるかどうかを判断し、それに応じてビット・ライン・バイアスを設定する（低速プログラミングモードの場合にはＶｂｌが引き上げられ、高速プログラミングモードの場合には接地される）。ここで、「ＳＡ＜＝ＱＤＬ」は、データがＱＤＬからＳＡにロードされることを示す。図１０の手法により、バイアス「０」がプログラム禁止情報を上書きする場合がある。これを回避するために、新しいプログラムデータ転送を、ＳＡ＜＝ＱＤＬ｜（ＵＤＬ＆ＬＤＬ）に変更することができる。式中、「｜」は論理ＯＲ演算を表す。
【００７８】
図１０の手法により、プログラミング動作の終了時に、プログラム中のＡ、ＢおよびＣ状態記憶素子を計数して、総数が閾値よりも少ないかどうかを確認することができる。これは、一時変数ＹＢＯＸに値ＵＤＬ＆ＬＤＬ（「＆」は論理ＡＮＤを表す）をロードする論理演算ＹＢＯＸ＜＝ＵＤＬ＆ＬＤＬを実行し、ＹＢＯＸにおける０の数を計数することによって達成できる。論理演算は、センスモジュール用の管理回路、ステートマシンまたは他の箇所によって実行することができ、ＹＢＯＸはこれらの箇所で維持することができる。
【００７９】
図９の手法と図１０の手法との１つの類似点は、（ＵＤＬ，ＬＤＬ）＝（１，１）の場合に記憶素子が禁止されるということである。
【００８０】
図１１ａは、図１０のデータラッチの値とＡ状態読み出し動作の結果とに基づく論理演算の使用を示しており、失敗検出プロセスにおける消去状態エラーとプログラム中の高状態エラーを計数する。図１１ａは、図１０の表のＱＤＬ行を繰り返している。図１０の行が、参照用に図１１ｂでも繰り返されている。ＱＤＬが、プログラミング動作の終了時に、残りのプログラム中の記憶素子を特定する。ＳＡ＜＝ｒｅａｄ＠Ａは、読み出し動作がＶｒａで実行され、読み出し動作の結果がセンスモジュールなどのセンスアンプ（ＳＡ）にロードされることを示す。この読み出し動作は、消去状態にある記憶素子と、目標データ状態の隣接する状態（例えばＡ状態）にある記憶素子とを区別する。読み出し動作は、妨害が原因でＥ状態記憶素子がＶｒａを越えたかどうかを判断する。この読み出し下では、「Ｅ」（失敗していないＥ状態）記憶素子が導電性であるのに対し、「Ｅｆａｉｌ」（失敗したＥ状態）記憶素子およびプログラムされた全状態（例えば、Ａ、Ｂ、Ｃ状態）の記憶素子は非導電性である。
【００８１】
この例では、検知中に記憶素子が導電性である場合にはＳＡ＝０、記憶素子が非導電性である場合にはＳＡ＝１である。図示するとおり、「Ｅ」記憶素子についてはＳＡ＝０であり、「Ｅｆａｉｌ」記憶素子についてはＳＡ＝１である。同時に、全てのプログラム状態記憶素子でＳＡ＝１である。論理演算ＳＡ＆〜ＱＤＬにおいて、「＆」は論理ＡＮＤを意味し、「〜」は否定または裏を意味する。ＳＡ＆〜ＱＤＬが、「Ｅｆａｉｌ」、「Ａｆａｓｔ」、「Ｂｆａｓｔ」および「Ｃｆａｓｔ」状況にある記憶素子を特定する。プログラミングの終了時に、それぞれの記憶素子の目標状態にプログラムできない記憶素子のうちのいくつかは無視される。「Ａｆａｓｔ」、「Ｂｆａｓｔ」および「Ｃｆａｓｔ」状況にある記憶素子は、これらの無視された記憶素子から成る。
【００８２】
全てのデータ状態におけるエラーの数は、論理演算ＹＢＯＸ＜＝〜ＳＡ｜ＱＤＬ実行後のＹＢＯＸにおける「１」を計数することによって求めることができる。この計数は、「Ｅｆａｉｌ」記憶素子と、まだプログラミングを終えておらず（例えば、「Ａｆａｓｔ」、「Ａｓｌｏｗ」、「Ｂｆａｓｔ」、「Ｂｓｌｏｗ」および「Ｃｆａｓｔ」状況下にある）、プログラミング終了前に無視されたＡ、ＢおよびＣ状態記憶素子とを含む。これらの無視された記憶素子がエラーを招く可能性もある。誤り訂正コード（ＥＣＣ）がこれらのエラーに対応できるので、全ての状態のエラーを合計する方が大きな意味があり得る。
【００８３】
図１１ｂは、図１０のデータラッチの値とＡ状態読み出し動作の結果とに基づく論理演算の使用を表しており、失敗検出プロセスにおける消去状態エラー（「Ｅｆａｉｌ」）を計数する。この演算では、「Ｅｆａｉｌ」記憶素子だけが計数され、他の終了していないＡ、ＢまたはＣ状態記憶素子の計数は回避することができる。図１１ｂでは、図１１ａのＳＡ行に加え、図１０の表のＱＤＬ、ＵＤＬおよびＬＤＬ行も繰り返している。どちらの計数方法（全ての状態の合計またはＥ状態のみを計数）でも、３つのデータラッチＱＤＬ、ＵＤＬおよびＬＤＬ内のデータは、データ復旧用のデータを保存する。失敗カウントが閾値を超えると、データを復旧させて、メモリデバイス内の別の箇所へと移すために、完全ワードライン読み出し動作を実行することができる。
【００８４】
「Ｅｆａｉｌ」記憶素子だけを計数するには、論理演算ＹＢＯＸ＜＝ＳＡ＆〜ＱＤＬ＆ＵＤＬ＆ＬＤＬを使用すればよい。これは、一時変数ＹＢＯＸに値を割り当てる。破線のボックスは、「Ｅｆａｉｌ」についてはＹＢＯＸ＝１であり、Ｅおよび他の全ての記憶素子状況についてはＹＢＯＸ＝０であることを示す。そのため、ＹＢＯＸは、「Ｅｆａｉｌ」記憶素子と他の全ての記憶素子とを区別する。「Ｅｆａｉｌ」記憶素子の数は、１組の記憶素子全体にわたり、ＹＢＯＸ＝１である記憶素子の数をプログラミング動作で計数することによって、計数することができる。
【００８５】
図１１ｃは、図１０のデータラッチの値と、データ復旧プロセスにおけるＣおよびＢ状態読み出し動作の結果とに基づいた論理演算の使用を示す。データ復旧のステップは以下のとおりである。
【００８６】
１．ＱＤＬ復旧−ＱＤＬデータは、３つのデータラッチ内の残りデータからＱＤＬ＊＜＝〜（〜ＱＤＬ＆ＵＤＬ＆ＬＤＬ）によって取得することができる。
【００８７】
２．Ｃ状態（Ｖｒｃ）で読み出す。Ｃ状態記憶素子のうちの一部が自らの目標状態に達しておらず、プログラミング中に無視された可能性があることから、Ｃ状態データの一部が誤って読み出される（Ｘでマーク）ものと仮定する。Ｃ状態を復旧させるために、論理演算ＵＤＬ＊＜＝ＳＡ｜（ＵＤＬ＆〜ＬＤＬ）によってＵＤＬを更新することができる。
【００８８】
３．ＵＤＬ＊＊＜＝ＵＤＬ｜〜ＱＤＬを使用して上位ページデータを完全に復旧させるために、ＵＤＬラッチがもう１度更新される。
【００８９】
４．Ｂ状態（Ｖｒｂ）で読み出す。ここでも、上記Ｃ状態の場合と同じ理由で、Ｂ状態データの一部が誤って読み出される（Ｘでマーク）ものと仮定する。残りデータを持っているため、ＬＤＬデータは、論理演算ＬＤＬ＜＝ＬＤＬ＆〜ＳＡによって最初のプログラムデータへと変換することができる。
【００９０】
ここでは、上位ページデータの復旧がＬＤＬおよびＱＤＬにある残りデータに依存するため、Ｃ読み出しが最初である。
【００９１】
破線のボックスは、ＵＤＬおよびＬＤＬの最終復旧値を示す。これらの値が、書き込みデータに従ってデータラッチでもともと設定されていた値と同じであることが、図１０または図１１ｂから検証できる。そのため、このデータ復旧動作を実行することにより、各記憶素子の下位ページおよび上位ページのデータ情報を正しく復旧できる可能性がある。
【００９２】
なお、論理演算は、センスブロックの管理回路で、またはステートマシンで実行することができ、どちらもメモリチップ上に存在する。これにより、外部のオフチップコントローラ（例えば、図１における１５０）にデータを転送し、そこで演算を実行する必要がなくなる。そのため、エラー検出およびデータ復旧動作を、チップ上で、オフチップコントローラまたはホストに対して実質的に透過的な方法で、実行することができる。
【００９３】
図１２ａは、プログラミング中およびプログラミング後の失敗検出および復旧動作の例を表す。ステップ１２００で、書き込みデータの上位ページに対してプログラミング動作が開始される。なお、下位ページを先にプログラミングしてもよい。ステップ１２０２で、それぞれの記憶素子のセンスモジュールと関連付けられたデータラッチを構成する。センスモジュールは、例えば、それぞれのビットラインおよびＮＡＮＤストリング、または他の一続きの直列接続記憶素子と関連付けることができる。データラッチは、消去状態に保たれる記憶素子の第１の部分集合と、Ａ、ＢおよびＣ状態など、それぞれの目標データ状態にプログラムされる記憶素子の第２の部分集合とを特定するように構成されている。プログラム・ループ・カウントが、ステップ１２０４で更新される。最初に、カウントが０に設定される。ステップ１２０６で、プログラム電圧Ｖｐｇｍが、選択されたワードラインに印加される。このワードラインは、記憶素子の第１および第２の部分集合を含む。また、データラッチに基づき、センスモジュールによって禁止モードまたはプログラムモードが設定される。
【００９４】
ステップ１２０８で、オフセット検証レベルおよび目標検証レベルを使用して、検証動作が実行される。この検証動作は、それぞれの記憶素子が導電状態にある場合に、センスモジュールを使用してそれぞれのビットラインに事前に充電することができ、センスノードがビットラインに放電できるようにするセンス動作である。非導電状態にある場合には、記憶素子は、認め得るほど放電しない。放電期間の経過後、生成されたデータは、各記憶素子のプログラミングを監視および制御するために、管理回路に転送することができる。特にステップ１２１０では、図１０に関連して記載されたように、検証動作の結果に基づきデータラッチを管理回路が更新する。ステップ１２１２で、プログラミング中の記憶素子の数が判断される。例えば、図１０に関連して記載しているように、論理演算ＹＢＯＸ＜＝ＵＤＬ＆ＬＤＬを実行することにより、プログラミング中のＡ、ＢおよびＣ状態記憶素子を計数することができる。判断ステップ１２１４で、プログラミング中の記憶素子の数が閾値よりも少ないかどうかが判断される。判断ステップ１２１４が真であれば、プログラミング動作は成功であり（ステップ１２１６）、図１２ｂおよび図１２ｃに関連してさらに記載しているように、プログラミング後のエラー検出および復旧動作が実行される（ステップ１２１８）。それぞれの目標データ状態に達しなかった記憶素子数が第２の部分集合内の記憶素子の最大数に満たなければ、判断ステップ１２１４は真である。
【００９５】
判断ステップ１２１４が偽である場合には、判断ステップ１２２２で、ループカウントが最大値を超えたかどうかが判断される。判断ステップ１２２２が真であれば、プログラミング動作は不成功である（ステップ１２２４）。判断ステップ１２２２が偽であれば、Ｖｐｇｍがステップアップされ（ステップ１２２０）、別のプログラム検証反復処理が実行されるように、ループカウントが更新される（ステップ１２０４）。
【００９６】
図１２ｂは、図１２ａのステップ１２１８のプログラミング後のエラー検出および復旧動作に関するさらなる詳細を示す。ステップ１２３０で、バイナリ読み出し動作がＶｒａで実行される。図１１ａの動作ＳＡ＜＝ｒｅａｄ＠Ａを参照されたい。ステップ１２３２で、Ｖｔｈ＞Ｖｒａである記憶素子が、（例えばＳＡ＝１から）特定される。ステップ１２３４で、Ｖｔｈ＞Ｖｒａである記憶素子のデータラッチが評価され、書き込みデータに従ってＥ状態に保たれることになっていた記憶素子（「Ｅｆａｉｌ」）が特定される。ステップ１２３４で、図１１ｂに関連して記載された動作ＹＢＯＸ＜＝ＳＡ＆〜ＱＤＬ＆ＵＤＬ＆ＬＤＬを実行することができる。ステップ１２３６で、例えば、ＹＢＯＸ＝１である記憶素子からＥ状態記憶素子の失敗の数を計数する。
【００９７】
判断ステップ１２３８で、カウントが閾値以下であれば、ステップ１２４０でｓｔａｔｕｓ＝ｐａｓｓが設定される。これは、例えば、ＥＣＣ訂正可能な少数のエラーが検出され、別の箇所にデータを書き直すことが保証されないことを示す。判断ステップ１２３８が偽であれば、ｓｔａｔｕｓ＝ｆａｉｌが設定される。エラーが検出されたブロックは、以後使用されないように、悪性ブロックとして記録されてもよい。さらに、図１２ｃに関連して記載するとおり、ステップ１２４４で復旧動作が実行される。
【００９８】
図１２ｃは、図１２ｂのステップ１２４４のデータ復旧動作に関するさらなる詳細を示す。ステップ１２５０で、Ｖｒｃ（図１１ｃのＳＡ＜＝ｒｅａｄ＠Ｃ）での読み出し動作が実行され、ステップ１２５２で、Ｖｒｂ（図１１ｃのＳＡ＜＝ｒｅａｄ＠Ｂ）での読み出し動作が実行され、図１１ｃに関連しても記載するとおり、ステップ１２５４で、読み出し結果とデータラッチ内の値とに基づいて、論理演算が実行される。ステップ１２５６で、復旧されたデータが別のブロック内の別のワードラインに書き込まれる。
【００９９】
図１３は、プログラミング動作における選択されたワードラインの波形例と以降のデータ復旧プロセスとを示す。プログラミング動作は、選択されたワードラインにプログラムパルス（例えば、１３０２、１３０４、１３０６、…、１３０８）が印加され、その後ＶｖａＬ、Ｖｖａ、ＶｖｂＬ、ＶｖｂおよびＶｖｃで検証電圧（例えば１３１０）が印加される一連のプログラム検証反復処理を含み得る。このプログラミング動作は、開始時期ｔｓから最終終了時期ｔｆまでの期間１３１２にわたって行われる。エラー検出プロセスにおけるｔａで、Ｖｒａでの読み出し動作が行われる。エラー検出プロセスの結果に基づき、ｔｃにおけるＶｒｃでのＣ状態読み出しと、ｔｂにおけるＶｒｂでのＢ状態読み出しとを使用するデータ復旧動作が開始されてもよい。
【０１００】
エラー検出および復旧プロセスの各種代替案を、以下のとおり提供することができる。
【０１０１】
１．記載の方式では、Ｅ状態記憶素子のデータラッチに対して（０，１，１）構成を使用して、（１，１，１）構成を使用する禁止されたＡ／Ｂ／Ｃ状態記憶素子と区別する。１つの代替案は、禁止されたＡ／Ｂ／Ｃ状態記憶素子に対して（０，１，１）を使用し、Ｅ状態記憶素子に対して（１，１，１）を使用するという逆の手法である。
【０１０２】
２．記載の方式では、プログラミング動作の終了時にその他任意の記憶素子と区別するために、Ｅ状態記憶素子に対して一意の（０，１，１）データラッチ構成が使用される。しかし一般的には、（０，１，１）構成が、禁止されたＡ／Ｂ／Ｃ状態記憶素子のいずれにも割り当て可能であることから、その状態の記憶素子は、プログラミング動作の終了時に区別可能である。例えば、プログラミングの終了時に、プログラムされたＡ状態記憶素子が他の記憶素子と区別できるように、禁止されたＡ状態記憶素子に（０，１，１）を割り当てることができる。どのオプションが選択されるかによって、その状態に対応する記憶素子について正しいデータが確実に復旧される。これは、その状態のデータのうちの１つだけが破損している状況で有用であり得る。例えば、いくつかの特定の状況で、記憶素子がなかなかＣ状態へとプログラミングされず、そのページのプログラム状態が失敗する一方で、他の全ての状態に関するデータは正常に見えるとする。かかる状況では、Ａ読み出し、Ｂ読み出し、およびＣ読み出しを用いてＱＤＬデータおよび他の状態からＣ状態記憶素子を確認することにより、データ一式を復旧させることができる。また、このデータ復旧方式と関連付けられる状態を選択するＲＯＭヒューズオプションを提供できる可能性もある。
【０１０３】
３．記載のとおり、使用されていない２つのデータラッチの組み合わせ（０，１，１）および（１，１，０）が存在する。両方の組み合わせを一緒に使用して、２つの異なる種類の記憶素子を表せる可能性がある。例えば、（０，１，１）構成を使用してＥ状態記憶素子を表すことができる一方で、禁止されたＣ状態記憶素子に対して（１，１，０）構成を使用することができる。この場合、少なくともこれらの２つのデータ状態について、完全なデータ復旧を保証することができる。
【０１０４】
なお、２つの（ＱＤＬ，ＵＤＬ，ＬＤＬ）の組み合わせ、具体的には＃１（０，１，１）および＃２（１，１，０）が使用されないのが典型的であると、図９との関連ですでに述べた。記載された詳細な例では、組み合わせ＃１自体が使用された。ただし、＃１および＃２の両方の組み合わせを、例えば、２種類の失敗から復旧する目的で、使用することも可能である。例えば、組み合わせ＃１はＥ状態の失敗に割り当てることができ、組み合わせ＃２はＡ状態の失敗（例えばＡｉｎｈ）に割り当てることができる。この場合、Ｅ−＞Ｘの失敗だけでなく、Ａ−＞Ｘの失敗も復旧させることができる。別の代替案として、他のラッチ割り当てに応じて、組み合わせ＃１ではなく組み合わせ＃２を使用できる可能性もある。
【０１０５】
一実施形態では、不揮発性記憶システム内の１組の記憶素子をプログラムするための方法が、書き込みデータに基づいて、消去状態に保たれる組の第１の部分集合内の記憶素子と関連付けられたデータラッチ内、および、それぞれの目標データ状態にプログラムされる組の第２の部分集合内の記憶素子と関連付けられたデータラッチ内のデータを構成することを含む。この方法は、第２の部分集合内の記憶素子をプログラムしている間、第１の部分集合内の記憶素子を禁止するステップと、プログラミング中、第２の部分集合内の記憶素子の進捗に基づいて第２の部分集合内の記憶素子の関連付けられたデータラッチを更新するステップと、をさらに含む。この方法は、自身のそれぞれの目標データ状態に達していない記憶素子数が、第２の部分集合内の記憶素子の最大数に満たず（この状況は、指定された数のビットエラーまたは記憶素子エラーに満たないことと相関関係がある）、その結果、第２の部分集合内の記憶素子のプログラミングが正常に完了したとみなされると判断するステップをさらに含む。この方法は、第２の部分集合内の記憶素子のプログラミングが正常に完了したことを受けて、消去状態と目標データ状態の隣接する状態とを区別する第１の部分集合内の記憶素子に対して読み出し動作を実行することにより、エラーを有する第１の部分集合内の記憶素子の数を判断するステップをさらに含む。
【０１０６】
別の実施形態では、不揮発性記憶システムが、消去状態に保たれる組の第１の部分集合内の記憶素子と、それぞれの目標データ状態にプログラムされる組の第２の部分集合の記憶素子とを含む、１組の不揮発性記憶素子を備える。また、各記憶素子および少なくとも１つの制御回路と関連付けられたデータラッチも提供される。少なくとも１つの制御回路が、（ａ）書き込みデータに基づいて、第１の部分集合内の記憶素子と関連付けられたデータラッチ内、および第２の部分集合内の記憶素子と関連付けられたデータラッチ内でデータを構成し、（ｂ）第１の部分集合内の記憶素子を禁止し、第２の部分集合内の記憶素子をプログラムし、プログラムされたときに第２の部分集合内の記憶素子の進捗に基づいて、第２の部分集合内の記憶素子の関連付けられたデータラッチを更新し、（ｃ）自身のそれぞれの目標データ状態に達していない記憶素子数が第２の部分集合内の記憶素子の最大数に満たず、その結果、第２の部分集合内の記憶素子のプログラミングが正常に完了したとみなされると判断し、（ｄ）第２の部分集合内の記憶素子のプログラミングが正常に完了したことを受けて、最初の消去状態と目標データ状態の隣接する状態とを区別する第１の部分集合内の記憶素子に対して読み出し動作を実行することにより、エラーを有する第１の部分集合内の記憶素子の数を判断する。
【０１０７】
別の実施形態では、不揮発性記憶システムが、書き込みデータに基づいて、消去状態に保たれる組の第１の部分集合内の記憶素子と関連付けられたデータラッチ内、およびそれぞれの目標データ状態にプログラムされる組の第２の部分集合内の記憶素子と関連付けられたデータラッチ内のデータを構成するための手段を備える。また、第２の部分集合内の記憶素子をプログラムしている間、第１の部分集合内の記憶素子を禁止し、プログラミング中、第２の部分集合内の記憶素子の進捗に基づいて第２の部分集合内の記憶素子の関連付けられたデータラッチを更新するための手段も提供される。また、自身のそれぞれの目標データ状態に達していない記憶素子数が第２の部分集合内の記憶素子の最大数に満たず、その結果、第２の部分集合内の記憶素子のプログラミングが正常に完了したとみなされると判断するための手段も提供される。また、第２の部分集合内の記憶素子のプログラミングが正常に完了したことを受けて、消去状態と目標データ状態の隣接する状態とを区別する第１の部分集合内の記憶素子に対して読み出し動作を実行することにより、エラーを有する第１の部分集合内の記憶素子の数を判断するための手段も提供される。
【０１０８】
別の実施形態では、不揮発性記憶システム内の組をプログラムするための方法が、記憶素子のうちの少なくとも一部がプログラムされる予定の様々な目標データ状態を特定する書き込みデータに基づいて、記憶素子と関連付けられたデータラッチ内でデータを構成することを含む。この方法は、記憶素子のうちの少なくとも一部を様々な目標データ状態にプログラムするためのプログラミング動作を実行するステップと、プログラミング動作中に、記憶素子のうちの少なくとも一部の進捗に基づいて、記憶素子のうちの少なくとも一部の関連付けられたデータラッチを更新するステップと、をさらに含む。この方法は、プログラミング動作が正常に完了したことを受けて、様々な目標データ状態のうちの１つの目標データ状態（例えばＥ状態）にある記憶素子と、様々な目標データ状態の他の目標データ状態（例えばＡ、ＢおよびＣ状態）にある記憶素子とを区別する読み出し動作を実行するステップをさらに含む。この方法は、他の目標データ状態にある記憶素子の中から、１つの目標データ状態にプログラムされる予定の記憶素子の数を判断することにより、エラーのある記憶素子の数を判断するステップをさらに含む。この方法は、エラーのある記憶素子の数が十分に高い場合に、書き込みデータを復旧させるために復旧動作を実行するステップをさらに含む。
【０１０９】
本明細書で提供される方法を実施するための対応する方法、システムおよびコンピュータまたはプロセッサ可読記憶デバイスを説明してきた。
【０１１０】
前述の詳細な説明は、例示および説明を目的として提示されている。これは、網羅的なものでなく、開示された通りの形態に限定されるものでもない。上記の教示に照らした多くの修正形態および変形形態が考えられる。記載した実施形態は、技術およびその実際的応用の原理を最もよく説明し、当業者が様々な実施形態で、検討される特定の使用に適するように様々に修正して技術を最もよく利用しうるように選定された。技術の範囲は、本明細書に添付される特許請求の範囲によって規定されるものとする。
【図１】
2013518359.tif 000003
【図２】
2013518359.tif 000004
【図３】
2013518359.tif 000005
【図４】
2013518359.tif 000006
【図５】
2013518359.tif 000007
【図６ａ】
2013518359.tif 000008
【図６ｂ】
2013518359.tif 000009
【図６ｃ】
2013518359.tif 000010
【図７】
2013518359.tif 000011
【図８ａ】
2013518359.tif 000012
【図８ｂ】
2013518359.tif 000013
【図８ｃ】
2013518359.tif 000014
【図８ｄ】
2013518359.tif 000015
【図８ｅ】
2013518359.tif 000016
【図８ｆ】
2013518359.tif 000017
【図９−１０】
2013518359.tif 000018
【図１１ａ】
2013518359.tif 000019
【図１１ｂ】
2013518359.tif 000020
【図１１ｃ】
2013518359.tif 000021
【図１２ａ】
2013518359.tif 000022
【図１２ｂ】
2013518359.tif 000023
【図１２ｃ】
2013518359.tif 000024
【図１３】
2013518359.tif 000025
【国際調査報告】
2013518359.tif 000026
2013518359.tif 000027