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