"1段階FOGGY及び次の段階FINEを含む多段階プログラミング動作を用いて1セットの不揮発性記憶素子155をプログラミングするための方法であって、目標ワードラインWLnの不揮発性記憶素子のために、前記1段階FOGGYを実行するステップを含み、この1段階FOGGYは、a前記目標ワードラインの低速プログラミング不揮発性記憶素子から前記目標ワードラインの高速プログラミング不揮発性記憶素子を識別する識別ステップと、bこの識別に応じて、i前記目標ワードラインの低速プログラミング不揮発性記憶素子から前記目標ワードラインの高速プログラミング不揮発性記憶素子を識別するプログラミングスピードデータを第1セットのラッチDL1,DL2,DL3に保存する保存ステップと、ii前記第1セットのラッチ内の前記プログラミングスピードデータに応じて、プログラミングスピードに基づく減速措置を課して前記目標ワードラインの前記高速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続する継続プログラミングステップと、iiiプログラミングスピードに基づく減速措置を課すことなく、前記目標ワードラインの前記低速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続する継続プログラミングステップとを含み、続いて、前記1セットの不揮発性記憶素子において別のワードラインWLn1の不揮発性記憶素子のためにプログラミング動作を行うステップと、前記次の段階FINEの間、前記第1セットのラッチ内の前記プログラミングスピードデータに応じて、プログラミングスピードに基づく減速措置を課して前記目標ワードラインの前記高速プログラミング不揮発性記憶素子のプログラミングを継続し、前記第1セットのラッチ内の前記プログラミングスピードデータに応じて、プログラミングスピードに基づく減速措置を課すことなく、前記目標ワードラインの前記低速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、を含む、方法。前記別のワードラインWLn1の前記揮発性記憶素子のためのプログラミング動作を実行する前記ステップは、多段階プログラミング動作の1段階FOGGYを実行するステップを含み、このステップは、c低速プログラミング不揮発性記憶素子から高速プログラミング不揮発性記憶素子を識別する識別ステップと、d前記別のワードラインのための前記低速プログラミング不揮発性記憶素子からの前記高速プログラミング不揮発性記憶素子の前記識別に応じて、i前記別のワードラインの前記低速プログラミング不揮発性記憶素子から前記別のワードラインの前記高速プログラミング不揮発性記憶素子を識別するプログラミングスピードデータを第2セットのラッチに保存するステップと、ii前記第2セットのラッチに応じて、プログラミングスピードに基づく減速措置を課して前記別のワードラインの前記高速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続する継続プログラミングステップと、iii前記第2セットのラッチに応じて、プログラミングスピードに基づく減速措置を課すことなく、前記別のワードラインの前記低速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続する継続プログラミングステップと、を含む、請求項1に記載の方法。前記目標ワードラインの前記不揮発性記憶素子に関わる前記1段階FOGGYは、第1セットの検証レベルを用い、前記別のワードラインの前記不揮発性記憶素子に関わる前記1段階FOGGYは、前記第1セットの検証レベルを用い、前記目標ワードラインの前記不揮発性記憶素子に関わる前記次の段階FINEは、第2セットの検証レベルを用い、この第2セットの検証レベルの各検証レベルは、前記第1セットの検証レベルの対応する検証レベルよりも高い、請求項2に記載の方法。関連する各プログラミングスピードに基づく減速措置は、引き上げられたビットライン電圧を含む、請求項1から3のいずれか一項に記載の方法。前記次の段階FINEを実行するステップは、プログラミングスピードに基づく減速措置を前記目標ワードラインの各低速プログラミング不揮発性記憶素子に課す一方、更なるプログラミングスピードに基づく減速措置を前記目標ワードラインの各高速プログラミング不揮発性記憶素子に課すことを含む、請求項1から4のいずれか一項に記載の方法。前記次の段階FINEの完了に応じて、前記第1セットのラッチをリセットするステップを更に含む、請求項1から5のいずれか一項に記載の方法。前記別のワードラインの前記不揮発性記憶素子のために、多段階プログラミング動作の次の段階FINEを実行するステップを更に含み、このステップは、プログラミングスピードに基づく減速措置を課して前記別のワードラインの前記高速プログラミング不揮発性記憶素子のプログラミングを継続する継続プログラミングステップと、前記第2セットのラッチに応じて、プログラミングスピードに基づく減速措置を課すことなく、前記別のワードラインの前記低速プログラミング不揮発性記憶素子のプログラミングを継続する継続プログラミングステップと、を含む、請求項1から6のいずれか一項に記載の方法。前記1セットの不揮発性記憶素子のうちの付加的なワードラインWLn2の不揮発性記憶素子のために、多段階プログラミング動作の1段階FOGGYを行うステップを更に含み、このステップは、c前記付加的なワードラインの低速プログラミング不揮発性記憶素子から前記付加的なワードラインの高速プログラミング不揮発性記憶素子を識別する識別ステップと、d前記付加的なワードラインの前記低速プログラミング不揮発性記憶素子からの前記付加的なワードラインの前記高速プログラミング不揮発性記憶素子の前記識別に応じて、i前記付加的なワードラインの前記低速プログラミング不揮発性記憶素子から前記付加的なワードラインの前記高速プログラミング不揮発性記憶素子を識別するプログラミングスピードデータを前記第1セットのラッチに保存する保存ステップと、ii前記第1セットのラッチ内の前記プログラミングスピードデータに応じて、プログラミングスピードに基づく減速措置を課して前記付加的なワードラインの前記高速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続する継続プログラミングステップと、iii前記第1セットのラッチ内の前記プログラミングスピードデータに応じて、プログラミングスピードに基づく減速措置を課すことなく、前記付加的な目標ワードラインの前記低速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続する継続プログラミングステップと、を含む、請求項7に記載の方法。前記多段階プログラミング動作においてプログラムパルス505,510,515,520,525,530,535,540,545,550が前記目標ワードラインに印加され、前記目標ワードラインの低速プログラミング不揮発性記憶素子から前記目標ワードラインの高速プログラミング不揮発性記憶素子を識別する前記識別ステップの間、前記プログラムパルスのステップサイズが一時的に小さくされる604、請求項1から8のいずれか一項に記載の方法。前記多段階プログラミング動作においてプログラムパルスが前記目標ワードラインに印加され、前記方法は更に、前記識別ステップaの後に前記1段階において残りの各プログラムパルスの前に前記第1セットのラッチを読み出すステップを含み、前記継続プログラミングステップii及びiiiは前記読み出しに応じる、請求項1から9のいずれか一項に記載の方法。請求項1から10のいずれか一項に記載の方法を実行する不揮発性記憶装置。1段階FOGGY及び次の段階FINEを含む多段階プログラミング動作を用いて1セットの不揮発性記憶素子155をプログラミングするための方法であって、前記1セットの不揮発性記憶素子のうち目標ワードラインWLnの不揮発性記憶素子のために、前記1段階FOGGYを実行するステップを含み、このステップは、a低速プログラミング不揮発性記憶素子から高速プログラミング不揮発性記憶素子を識別する識別ステップと、bこの識別に応じ、i低速プログラミングスピードに基づく減速装置を課すために関連するビットライン電圧Vblを第1のゼロ以外のビットラインレベル例えば1.2Vに設定して前記高速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続する継続プログラミングステップと、ii関連するビットライン電圧を前記第1のゼロ以外のビットラインレベルより低い第2のゼロ以外のビットラインレベル0.5Vに設定して前記低速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続する継続ステップと、iii前記不揮発性記憶素子に関連付けられたドレイン側選択ゲートSGDの共通のコントロールゲート電圧Vsgdを第1コントロールゲートレベル例えば2.4Vにて設定するステップと、を含み、前記1段階において関連する検証レベルに到達する高速プログラミング不揮発性記憶素子の前記少なくともいくつかの不揮発性記憶素子のため及び低速プログラミング不揮発性記憶素子の前記少なくともいくつかの不揮発性記憶素子のために、関連するビットライン電圧を前記第1ビットラインレベルより大きいロックアウトレベルに引き上げるステップと、続いて、前記次の段階FINEを実行するステップを含み、このステップは、関連するビットライン電圧を前記第1ビットラインレベルより低いゼロ以外のレベルに設定し、前記選択ゲートの前記共通のコントロールゲート電圧を前記第1コントロールゲートレベルよりも低い第2コントロールゲートレベル例えば1.7Vに設定して、前記高速及び低速の不揮発性記憶素子のプログラミングを継続する継続ステップと、前記次の段階において関連する検証レベルに到達する、前記高速プログラミング不揮発性記憶素子のうち前記少なくともいくつかの不揮発性記憶素子ため及び前記低速プログラミング不揮発性記憶素子の前記少なくともいくつかの不揮発性記憶素子のために、関連するビットライン電圧を前記ロックアウトレベルに引き上げるステップと、を含む方法。前記1段階において前記高速プログラミング不揮発性記憶素子に関連付けられた選択ゲートのために、前記第1コントロールゲートレベルが前記第1のゼロ以外のビットライン電圧レベルを通すのに十分高い、請求項12に記載の方法。前記多段階プログラミング動作において、プログラムパルス505,510,515,520,525,530,535,540,545,550が前記目標ワードラインに印加され、前記方法は、前記識別ステップaに応じて、ラッチDL1,DL2,DL3内に前記目標ワードラインのプログラミングスピードデータを保存するステップと、前記識別ステップaの後に前記1段階における残りの各プログラムパルスの前に前記ラッチを読み出すステップと、を更に含み、前記継続プログラミングステップi及びiiは前記読み出しに応じる、請求項12又は13に記載の方法。請求項12から14のいずれか一項に記載の方法を実行する不揮発性記憶装置。メモリにデータを正確にプログラムする能力は最重要である。しかしながら、これはメモリサイズが小型化されるにつれてより困難になる。高速プログラミング記憶素子及び低速プログラミング記憶素子を識別することにより1セットの不揮発性記憶素子をプログラミングするための方法及び不揮発性記憶システム。メモリデバイスの大きさの拡大縮小のため、一のワードライン上の記憶素子ごとのばらつきが大きくなり、1セットの記憶素子の自然閾値電圧Vth分布が増加する。自然Vth分布が幅広くなると、各データ状態のために必要とされる検証動作の数も増加し、全プログラミング時間が増加することでプログラミング性能が落ちる。この問題を解消するために、多段階プログラミング動作では、高速プログラミング記憶素子を検出し、一又は複数のプログラミング段階フェーズにおいて減速措置例えばビットライン電圧をこれらの記憶素子に選択的に適用することによって、自然Vth分布を縮小し得る。様々な例示的な実施態様が2段階及び3段階プログラミング動作において提供される但し本技術は広く適用可能である。更に、高速プログラミング記憶素子及び低速プログラミング記憶素子例えば2クラスの記憶素子を識別する代わりに、それらのプログラミングスピードに基づいて3クラス以上の記憶素子を識別するとこも可能であり、かつ、高速のクラスのために各クラスに適合された減速措置を適用することも可能である。更に、減速措置は、いくつかのプログラミング技術において適用される付加的なビットラインの増加この場合、ビットライン電圧が追加されるにも対応することができる。より大きなビットライン電圧を受けるために、一の選択されたプログラミング段階においてプログラミング中にドレイン側選択ゲート電圧を増加させることができる。次に、より高速のプログラミングおよび電力消費の節減を可能にするために使用されうるメモリシステムの一例を説明する。一般に、任意の種類の不揮発性メモリを使用することができる。NANDストリングを備えるメモリは一例にすぎない。図1は、1つの行/列デコーダと読み出し/書き込み回路とを利用する不揮発性記憶システムのブロック図である。図は、一実施例について、1ページの記憶素子を並列に読み出し又はプログラムするための読み出し/書き込み回路を有するメモリデバイス196を示す。メモリデバイス196は、1つ以上のメモリダイ198を含んでいてもよい。メモリダイ198は、記憶素子155の2次元メモリアレイと、制御回路110、及び、読み出し/書き込み回路165を含む。メモリアレイ155については図4と関連付けてさらに説明する。一実施形態では、記憶素子のアレイは、3次元であってもよい。メモリアレイ155は、行デコーダ130を介したワードラインと、列デコーダ160を介したビットラインによってアドレス指定可能である。読み出し/書き込み回路165は、複数のセンスブロック100を含んでおり、1ページの記憶素子を並列に読み出し又はプログラムすることを許容する。典型的には、コントローラ150は、1つ以上のメモリダイ198のような同じメモリデバイス197例えば、取り外し可能なストレージカード内に含まれる。命令及びデータは、ライン120を介して、ホストとコントローラ150の間で転送され、また、ライン118を介して、コントローラと1つ以上のメモリダイ198の間で転送される。制御回路110は、読み出し/書き込み回路165と協調して、メモリアレイ155に対してメモリ動作を実行する。制御回路110は、ステートマシン112、オンチップアドレスデコーダ114、及び電力制御モジュール116を含む。ステートマシン112は、メモリ動作のチップレベルの制御を提供する。オンチップアドレスデコーダ114は、ホスト又はメモリコントローラによって用いられるアドレスと、デコーダ130,160によって用いられるハードウェアアドレスとの間にアドレスインタフェースを提供する。電力制御モジュール116は、メモリ動作中のワードライン及びビットラインに供給される電力及び電圧を制御する。いくつかの実施態様では、図1の構成要素の一部が結合されうる。様々な設計で、メモリアレイ155以外の構成要素のうちの1つまたは複数単独あるいは組合せが、管理または制御回路として考えられうる。例えば、1つまたは複数の制御回路は、制御回路110、ステートマシン112、デコーダ114/160、電力制御116、センスブロック100図3のプロセッサ192を含む、読み出し/書き込み回路165、コントローラ150などのいずれか1つまたは組合せを含み得る。センスブロック100は図3と関連付けてさらに説明する。別の実施形態において、不揮発性メモリシステムは、2つの行/列デコーダおよび読み出し/書き込み回路が使用される。様々な周辺回路によるメモリアレイ155へのアクセスは、アレイの反対側で対称的に実施され、したがって、アクセス線の密度および各辺の回路は半減される。そのため、行デコーダは2つの行デコーダに分割され、列デコーダは2つの列デコーダに分割される。同様に、読み出し/書き込み回路は、最下部からビットラインに接続する読み出し/書き込み回路と、アレイ155の最上部からビットラインに接続する読み出し/書き込み回路とに分割される。このようにして、読み出し/書き込みモジュールの密度は本質的に半分減少する。図2は、図1のメモリアレイ155におけるNANDフラッシュメモリセルのブロックを示す。メモリアレイは多数のブロックを含むことができる。各ブロック例200、210は、多数のNANDストリングと、ブロックで共有されるBL0、BL1、...といったそれぞれのビットラインとを含む。各NANDストリングは、一端でドレイン選択ゲートSGDに接続されており、ドレイン選択ゲートのコントロールゲートは、共通のSGDラインを介して接続されている。NANDストリングは、他端でソース選択ゲートに接続されており、ひいては、共通ソースライン220に接続されている。ソース選択ゲートとドレイン選択ゲートとの間には、WL0~WL63など、64本のワードラインが延在している。いくつかの場合において、ダミーワードラインをメモリアレイにおいて使用することもできる。これらのワードラインはユーザデータを含まない。例えば、ダミーワードラインはSGSとWL0との間にあってもよく、かつ、SGDとWL63との間にあってもよい。こうしたダミーワードラインは、この特定の例においてWL0及びWL63が受け得る縁効果例えば、プログラムディスターブメカニズム又は耐久性の劣化からエッジデータワードラインを保護することができる。NANDフラッシュメモリに加え、他のタイプの不揮発性メモリを使用することもできる。例えば、フラッシュEEPROMシステムで有用な別のタイプのメモリセルは、導電性のフローティングゲートの代わりに非導電性の誘電素材を利用して不揮発的に電荷を蓄積する。導電性のコントロールゲートと、メモリセルチャネルの上方にある半導体基板の表面との間に、酸化ケイ素、窒化ケイ素および酸化ケイ素ONOで形成された3重の層誘電体が挟まれている。このセルは、セルチャネルから窒化物に電子を注入することによってプログラムされ、注入された電子は、限られた領域内で捕捉され、蓄積される。この蓄積された電荷はその後、検出可能な方法でセルのチャネルの一部分の閾値電圧を変える。このセルは、窒化物にホットホールを注入することによって消去される。ドープ処理したポリシリコンゲートが別々のセレクトトランジスタを形成するためにメモリセルチャネルの一部分を超えて延伸するスプリットゲート構成で同様のセルを設けることができる。別のアプローチでは、NROMセルが使用される。例えば、各NROMセルに2ビットが記憶され、このセルではONO誘電体層がソース拡散領域とドレイン拡散領域との間のチャネル全体に延伸する。一方のデータビットの電荷は、ドレインに隣接する誘電体層に限局され、もう一方のデータビットの電荷はソースに隣接する誘電体層に限局される。誘電体内で空間的に分離された電荷蓄積領域のバイナリ状態を別々に読み込むことにより、マルチステートのデータ記憶が得られる。他のタイプの不揮発性メモリも公知である。図3は、センスブロックの一実施形態を示すブロック図である。個々のセンスブロック100は、センスモジュール180またはセンスアンプと呼ばれる1つ以上のコア部分と、管理回路190と呼ばれる共通部分とに区分けされる。一実施形態では、ビットラインごとに別々のセンスモジュール180が備えられており、1組の複数の、例えば4つまたは8つの、センスモジュール180につき1つの共通管理回路190が備えられている。グループ内のセンスモジュールの各々は、データバス172を介して、関連付けられた管理回路と通信する。そのため、1組の記憶素子のセンスモジュールと通信する1つ以上の管理回路が存在する。センスモジュール180は、接続されたビットライン内の伝導電流が予め決められた閾値レベルより高いか低いかを判断することによって検知を実行するセンス回路170を備えている。センスモジュール180は、さらに、接続されたビットラインに電圧状態を設定するために用いられるビットラインラッチ182を含む。例えば、ビットラインラッチ182内で予め決められた状態がラッチされることによって、接続されたビットラインを、プログラム禁止を指定する状態例えば、1.5~3Vに引き上げる。例えば、flag=0がプログラミングを禁止できるのに対し、flag=1はプログラミングを禁止しない。管理回路190は、プロセッサ192と、4セット4組のデータラッチ194~197の例と、1セットのデータラッチ194とデータバス120との間を連結するI/Oインタフェース196とを備えている。センスモジュールごとに1セットのデータラッチを設けることができ、LDL、UDL、DL1及びDL2によって特定されるデータラッチを各セットごとに設けることができる。いくつかの場合において、付加的なデータラッチを使用することができる。図16A1及び16A2も参照されたい。LDLは下位ページのデータのビットを記憶し、UDLは上位ページのデータのビットを記憶する。これは、1記憶素子につき4レベル又は2ビットのメモリデバイスである。1ビットラインにつき一の付加的なデータラッチを、1記憶素子につき一の付加的なデータビットのために設けることができる。DL1及びDL2は、関連する記憶素子が高速プログラミングであるか低速プログラミングであるかを示すビットを記憶するために使用される。いくつかの場合において、余分なデータラッチの数は多段階プログラミング動作における段階数と同じであり、一方、他のケースでは、余分なデータラッチの数は多段階プログラミング動作における段階数よりも少ない。データラッチの使用については、特に図16A1~16Eを参照して以下に詳細が記載される。プロセッサ192は、検知された記憶素子に記憶されているデータを判断し、判断されたデータをデータラッチの組内に記憶するなどの目的で計算を実行する。データラッチの各セット194~197は、読み出し動作時にプロセッサ192によって判断されたデータビット群を記憶する目的、および、プログラム動作時にデータバス120から取り込んだデータビット群を記憶する目的で使用され、取り込まれるデータビット群は、メモリ内にプログラムされる予定の書き込みデータを表す。I/Oインタフェース196は、データラッチ194~197とデータバス120との間のインタフェースを提供する。読み出し中には、システムの動作はステートマシン112の制御下にあり、ステートマシン112は、アドレス指定された記憶素子への種々のコントロールゲート電圧の供給を制御する。メモリに用意された様々なメモリ状態に対応する様々な既定コントロールゲート電圧のステップを進む毎に、センスモジュール180は、これらの電圧の1つに遷移し、バス172を介して、センスモジュール180からプロセッサ192に対応する出力が提供される。その時点で、プロセッサ192は、センスモジュールの遷移イベントと、ステートマシンから入力ライン193を介して加えられたコントロールゲート電圧についての情報によって、結果としてのメモリ状態を特定する。それから、プロセッサは、メモリ状態に対するバイナリ符号化を計算し、得られたデータビット群をデータラッチ194~197に格納する。管理回路190の別の実施形態では、ビットラインラッチ182は、センスモジュール180の出力をラッチするラッチ、及び、上記のようなビットラインラッチの二つの役割を持つ。いくつかの実装形態では、複数のプロセッサ192を含むことができる。一実施形態では、各プロセッサ192は、出力ライン図示省略を含み、各出力ラインは、ワイヤードOR配線論理和接続される。いくつかの実施形態では、出力ラインは、ワイヤードORラインに接続される前段階で反転される。この構成は、ワイヤードORを受け取るステートマシンが、プログラムされる全てのビットがいつ所望のレベルに到達したかを判断できるので、プログラム処理の完了時点を判定するプログラム検証処理における素早い判定を可能にする。例えば、各ビットがその所望のレベルに到達すると、そのビット用の論理0がワイヤードORラインに送られる又はデータ1が反転される。全てのビットがデータ0を出力すると又はデータ1が反転されると、ステートマシンは、プログラミング処理の完了を知る。各プロセッサが8個のセンスモジュールと通信する実施形態では、ステートマシンは、ワイヤードORラインを8回読み出す必要があり、あるいは、協働するビットラインの結果を蓄積するための論理をプロセッサ192に追加し、ステートマシンがワイヤードORラインを一度だけ読み出せば良いようにする。同様に、論理レベルを正しく選択することによって、第1ビットの状態が変化し、それに従ってアルゴリズムが変化する際に、グローバルステートマシーンは、検出し得る。1記憶素子につき2ビットである実施態様において、プログラム又は検証動作中に、プログラムされるべきデータ書き込みデータがLDL及びUDLラッチにおいてデータバス120から1セットのデータラッチ194~197内に記憶される。1記憶素子につき3ビットである実施態様において、2つの上位データラッチUDL1及びUDL2が使用され得る。状態マシーンステートマシンの制御の下、プログラミング動作は、アドレス指定された記憶素子のコントロールゲートに印加される一連のプログラミング電圧パルスを含む。各プログラミングパルスに続いて、復唱検証によって、記憶素子が所望の状態にプログラムされたかどうかを判定する。いくつかの場合では、プロセッサ192は、所望のメモリ状態に対する復唱メモリ状態を監視する。その2つが一致したとき、プロセッサ192は、プログラム禁止を指定する状態にビットラインを引き上げるように、ビットラインラッチ182を設定する。これにより、たとえプログラミングパルスがそのコントロールゲートに影響しても、ビットラインに接続した記憶素子がさらにプログラミングされないようにすることができる。他の実施形態では、プロセッサが最初にビットラインラッチ182をロードし、センス回路が検証処理中にそれに禁止値を設定する。データラッチの各セット194~197は、各センスモジュールのデータラッチのスタックとして実装されてもよい。一実施形態では、センスモジュール180毎に3個のデータラッチが存在する。いくつかの実装形態では、データラッチは、シフトレジスタとして実装され、内部に記憶されたパラレルデータをデータバス120用にシリアルデータに変換したり、その逆を行ったりする。m個の記憶素子の読み出し/書き込みブロックに対応する全てのデータラッチを相互にリンクしてブロックシフトレジスタを構成し、シリアル転送によって、データのブロックを入力または出力できるようにする。特に、読み出し/書き込みモジュールの一群のデータラッチのそれぞれが、データバスへ或いはデータバスからデータを順に転送するように読み出し/書き込みモジュールのバンクを構成し、一群のデータラッチがあたかも読み出し/書き込みブロック全体のシフトレジスタの一部であるかのようにしてもよい。データラッチは、関連付けられた記憶素子がプログラミング動作中に特定の管理点に達した時期を特定する。例えば、ラッチは記憶素子のVthが特定の検証レベルより低いことを識別することができる。データラッチは、記憶素子がページデータからの1つ以上のビットを現在記憶しているかどうかを示す。例えば、LDLラッチは、下位ページのデータを記憶する目的で使用することができる。LDLラッチは、関連付けられた記憶素子に下位ページビットが記憶されるときに、例えば0から1へと反転される。UDLラッチは、例えば、上位ページのデータを記憶する目的で使用することができる。UDLラッチは、関連付けられた記憶素子に上位ページビットが記憶されるときに反転される。反転は、関連付けられた記憶素子がプログラミングを完了するとき、例えば、記憶素子のVthがVva、VvbまたはVvcなどの目標検証レベルを超えるときに行われる。UDL1及びUDL2が使用される場合、上位の下位ビットが、関連する記憶素子において記憶されるとUDL1が反転され、そして、上位の上位ビットが、関連する記憶素子において記憶されるとUDL2が反転される。上位の下位ビットは中間ページビットと呼ばれることもある。図4は、NANDストリング及び検出用コンポーネントの構成を示す。一実施形態において、検出コンポーネント400が図1のセンスブロック100に設けられており、制御装置408が図1の制御回路110に設けられている。簡略化した一例において、NANDストリング412は、4つの記憶素子を含み、これらの記憶素子はそれぞれワードラインWL0,WL1,WL2,WL3と導通する。実際には、付加的な記憶素子及びワードラインを使用することができる。更に、付加的なNANDストリングが典型的には、1ブロックの不揮発性記憶素子又は他のセットの不揮発性記憶素子において互いに隣接して配置される。記憶素子は基板のpウェル領域に結合されている。検出コンポーネント400に加えて、電圧Vblを有するビットライン410が描かれている。特に、BLSビットライン検出トランジスタ406はビットライン410に結合されている。BLSトランジスタ406は高電圧トランジスタであり、かつ検出動作中に制御装置408に応じて開放される。BLCビットライン制御トランジスタ404は、ビットラインが電流検出モジュール402と通信できるように、制御装置408に応じて開放される低電圧トランジスタである。検出動作中例えば読み出し又は検証動作、予備充電pre-charge動作が行われ、これは、電流検出モジュール402内のコンデンサが充電されるものである。BLCトランジスタ404は予備充電を可能にするために開放され得る。更に、検出動作中、検証電圧が、当該動作に関係する一又は複数の記憶素子を有する一のワードラインに印加される。NANDストリング430のドレイン側において、BLSトランジスタ406がオンされ、例えば、導通状態にされ、あるいは開放される。更に、電圧VblcがBLCトランジスタ404に印加され、これを導通状態にする。電流検出モジュール402内の予備充電されたコンデンサはビットラインを通してソースに放電し、このソースが電流シンクとして機能するようにする。選択記憶素子が導電状態にあるときに電流が選択不揮発性記憶素子を通して流れてソースに溜まるように、NANDストリングのドレイン側の予備充電されたコンデンサはソースの電位を越える電位に予備充電され得る。予備充電されたコンデンサは、記憶素子が非導電状態にある場合、感知されるほど放電しない。放電期間の後、結果として生じたデータは、各記憶素子のプログラミングを監視及び制御するために管理/制御回路に伝送され得る。特に、Vcgrの印加によって選択記憶素子が導電状態にある場合、比較的高い電流が流れる。選択記憶素子が非導電状態にある場合、電流は全くあるいはほとんど流れない。電流検出モジュール402はセル/記憶素子電流icellを検出することができる。一の可能な手法において、電流検出モジュールは、ΔV=it/Cという関係によってある固定電流に拘束される電圧降下を判定し、ここで、ΔVは電圧降下であり、iは固定電流であり、tは、予め決められた放電時間であり、Cは電流検出モジュール内の予備充電されたコンデンサの静電容量である。より大きな電圧降下は、より高い電流を意味する。所定の放電期間の終了時に、i及びCが固定されるため、所定の電流のためのΔVが判定される。一の手法において、PMOSトランジスタは、境界値に関連するΔVのレベルを判定するために用いられる。別の可能な手法において、セル電流弁別器は、伝導電流が所定の限界電流より高いか低いかを判定することによって、電流レベルの弁別器又はコンパレータとして機能する。対照的に、電圧検出は、ある固定電流に拘束される電圧降下を検出することを含まない。代わりに、電圧検出は、電荷共有が電圧検出モジュール内のコンデンサとビットラインの静電容量との間で生じるか否かを判定することを含む。この検出の間、電流は固定されておらず、また一定でもない。選択記憶素子が導通状態であるときに電荷共有はほとんどあるいは全く生じず、この場合、電圧検出モジュール内のコンデンサの電圧は著しく降下しない。電荷共有は、選択記憶素子が非導通状態であるときに生じ、この場合、電圧検出モジュール内のコンデンサの電圧は著しく降下する。よって、電流検出モジュール402は、電流のレベルによって選択記憶素子が導通状態にあるか非導電状態にあるかを判定することができる。一般に、選択記憶素子が導電状態にある場合、高い電流が流れ、選択記憶素子が非導電状態にある場合、低い電流が流れる。選択記憶素子の閾値電圧は、非導電状態にあるときは比較レベル例えば検証レベル又は読み出しレベルより高く、導通状態にあるときは比較レベルより低い。図5は、プログラミング動作において選択ワードラインに印加されたプログラムパルスを示す。一般に、プログラミング動作は、一又は複数のプログラミング段階においてパルス列を選択ワードラインに印加することを含み、ここで、パルス列はプログラムパルスを含み、これには一又は複数の検証パルスが続く。各段階は、プログラムパルスの個別のシーケンス又は階段を使用し、初期レベルから始まり、その段階のプログラミングを完了するために必要であれば最高レベルにステップアップする。一の段階のプログラミングは、記憶素子がその段階のための特定の検証レベルに到達すると完了する。プログラムパルスは、任意の数の異なる波形を有することもできることに留意されたい。矩形波形が描かれているが、他の形状も可能である。マルチレベル形状又は傾斜のついた形状といった他の形状も可能である。パルス列500は、一連のプログラムパルス505,510,515,520,525,530,535,540,545,550,...を含み、プログラミングのために選択されたワードラインに印加される。プログラム検証の繰り返しには、プログラミングパルスを選択ワードラインに印加することと、その後、一又は複数の検証パルスを選択ワードラインに印加することによって一又は複数の検証動作を行うことが含まれる。一の可能な手法において、プログラムパルスは所定のプログラミング段階において固定ステップサイズによって徐々に増加する。他の変更態様も可能である。例えば、プログラムパルスは、このプログラミング段階に特有のステップサイズによって徐々に増加することができる。初期及び/又は最終プログラムパルスレベルも、特定のプログラミング段階に特有ものとすることができる。図6は、多段階プログラミング動作の複数の異なる段階において印加され得るプログラム電圧を示す。例えば、Vpgm-init1にて始まり、Vpgm-final1にて終わる波形602は、第1プログラミング段階において連続する各プログラムパルスのプログラムパルス強度を表す。Vpgm-init2にて始まり、Vpgm-final2にて終わる波形600は、より小さなステップサイズを用い、第2プログラミング段階において連続する各プログラムパルスのより低いプログラムパルス強度を表す。最終プログラムパルスレベルは典型的には初期段階第1段階よりも第2段階のほうが高い。更に、第2段階では、Vpgmステップサイズがより小さいため、プログラミングを終了するためには第1段階よりも多くのプログラムパルスが必要となる。更なるオプションは、一のプログラムパルスのVpgmを所定の量だけ急に増加することであり、この量は、メモリデバイスのROMヒューズパラメータによって制御することができる。このより大きなステップを伴う一のプログラムパルスは、高速プログラミングの記憶素子を減速するためにビットライン電圧が引き上げられるときに印加される。このステップにおいて、我々はビットラインバイアスを印加することによって高速プログラミングの記憶素子を減速するため、オーバープログラミングのリスクが減少する。後続するパルスに対し、Vpgmは固定ステップサイズにて通常通りステップアップされ得る。3段階プログラミング動作において、一の手法では、波形602は第1及び第2段階において使用することができ、波形600は最終あるいは第3段階において使用することができる。特にLM状態のみが第1段階においてプログラムされる場合では、第1段階において第2段階と比較して更に大きなVpgmステップサイズを使用することも可能である。更なるオプションにおいて、Vpgm-init1に始まり、Vpgm-final1aで終わる波形604は、プログラミングスピードデータを得る段階において使用することができる。このプログラミングスピードデータは、ある記憶素子が高速の1セットの記憶素子に属するか低速の1セットの記憶素子に属するかを示すことができる。波形604は、比較的大きなステップサイズが使用される領域606及び610と、比較的小さなステップサイズが使用される領域608とを含む。すなわち、Vpgmステップサイズが領域608において一時的に減少される。よって、プログラムパルスが多段階プログラミング動作において目標ワードラインに印加される場合、目標ワードラインの高速プログラミング中の不揮発性記憶素子を目標ワードラインの低速プログラミング中の不揮発性記憶素子から識別するときにプログラムパルスのステップサイズが一時的に減少される。この手法は、プログラミングスピードデータを得る際により小さなステップサイズを使用し、これにより、検出精度を高めることを確実にする。具体的には、領域608の始まりは、プログラミングスピードデータをより正確に得られる時間に設定され得る。領域608の終わりは、プログラミングスピードデータが得られた後の時間に設定され得る。領域608の始まり及び/又は終わりは例えば固定パルス数に設定され得る。あるいは、領域608の始まり及び/又は終わりは適応的に設定される。一の可能な手法において、図10B詳細は後述するを参照すると、領域608の始まりは、少なくとも特定数の記憶素子が検証レベルVvaL例えば記憶素子の数パーセントに到達したときに設定され得る。非適応的な手法において、領域608の終わりは、特定数のプログラムパルスの後に生じるように設定することができる。あるいは、適応的な手法において、領域608の終わりは、特定数よりも少ない記憶素子例えば記憶素子の数パーセントがまだVvaLに到達していないときに、すなわち、特定数より多くの記憶素子例えばほぼ全ての記憶素子がVvaLに到達したときに生じるように設定することができる。同様の手法が、図12A,13B1,14E及び15B1のプログラミングにおけるVvaL、図11B及び14BのプログラミングにおけるVvLM、図13C1のプログラミングにおけるVvbL、並びに図15C1のプログラミングにおけるVvdLに関して取られ得る。いくつかの場合において、VvLMへのプログラミングの際にLM段階においてより大きな基準Vpgmステップサイズが使用され、この場合、この技術は比較的より有用である。図7Aは、1セットの記憶素子のための、ワードラインを前後する順に行われる2パスプログラミング動作を示す。描かれた構成要素は、はるかに大きい1セットの記憶素子、ワードラインおよびビットラインのうちの1サブセットであり得る。一の可能なプログラム動作では、WLn上の記憶素子四角で表されるが、丸付き数字1で表されるように第1プログラミング段階でプログラムされる。次に2、WLn1上の記憶素子が、第1プログラミング段階でプログラムされる。本実施例では、プログラミング対象のワードラインが選択された場合、各プログラムパルスの後に検証動作が行われる。選択ワードラインに対する検証動作の際にVreadレベル電圧が非選択ワードラインに印加され、検証動作といった検出動作が選択ワードラインに対して行われるように非選択記憶素子をオンにする導通する。次に3、WLn上の記憶素子が第2プログラミング段階でプログラムされる。次に4、WLn2上の記憶素子が、このワードラインのための第1プログラミング段階でプログラムされる。次に5、WLn1上の記憶素子が、第2プログラミング段階でそれぞれの最終状態にプログラムされる。複数のプログラミング段階においてワードラインをこのワードラインを前後する順でプログラミングすることによって、容量結合によって生じる干渉効果それらのVth分布を引き上げ、かつ拡張する性質があるは減少する。対照的に、単一パスのプログラミングでは、各ワードラインは次のワードラインに移動する前に完全にプログラムされる。図7Bは、1セットの記憶素子のための、ワードラインを前後する順に行われる3段階プログラミング動作を示す。下位ページの初期プログラミングパスは、上位ページの第1及び第2プログラミングパスの前に行われる。第1プログラミングパスは、データの下位ページをプログラムし、第2プログラミングパスは、第1プログラミングパスにおけるデータの上位ページをプログラムし、第3プログラミングパスは、第2プログラミングパスにおけるデータの上位ページのプログラミングを完成させる。1において第1プログラミングパスがWLnのために行われ、2において第1プログラミングパスがWLn1のために行われ、3において第2プログラミングパスがWLnのために行われ、4において第1プログラミングパスがWLn2のために行われ、5において第2プログラミングパスがWLn1のために行われ、6において第3プログラミングパスがWLnのために行われ、7において第1プログラミングパスがWLn3のために行われ、8において第2プログラミングパスがWLn2のために行われ、9において第3プログラミングパスがWLn1のために行われ、その他も同様である。図8Aは、多段階プログラミング動作の概要を示す。ステップ800は、WLnのために、第1初期Vpgm、第1ステップサイズ、及び第1セットの検証レベルを用いて、プログラミング動作の1段階を行うことを含む。下記に記載した例において、この段階はいわゆる曖昧なfoggy段階と呼ばれ、これは、2段階プログラミング動作の第1段階、又は3段階プログラミング動作の第2段階である。第1セットの検証レベルは、4レベルメモリデバイスにおいてVvaL,VvbL,VvcLを含むことができ、又は8レベルメモリデバイスにおいてVvaL,VvbL,VvcL,VvdL,VveL,VvfL及びVvgLを含むことができる。ステップ802は、WLn1のために、第1初期Vpgm、第1ステップサイズ、及び第1セットの検証レベルを用いて、プログラミング動作の1段階を行うことを含む。ステップ804は、WLnのために、第2初期Vpgm,第2ステップサイズ、及び第2セットの検証レベルを用いて、プログラミング動作の次の段階を行うことを含む。第2セットの検証レベルは、4レベルメモリデバイスにおいてVva,Vvb,Vvcを含むことができ、又は8レベルメモリデバイスにおいてVva,Vvb,Vvc,Vvd,Vve,Vvf及びVvgを含むことができる。第1セットの検証レベルは、これらの各検証レベルが第2セットのそれぞれの検証レベルより低くなるように、第2セットの検証レベルからオフセットされる。ステップ806は、WLn2のために、第1初期Vpgm,第1ステップサイズ、及び第1セットの検証レベルを用いて、プログラミング動作の1段階を行うことを含む。ステップ808は、WLn1のために、第2の初期Vpgm,第2ステップサイズ、及び第2セットの検証レベルを用いて、プログラミング動作の次の段階を行うことを含む。この処理は、全てのデータがプログラムされるまで続く。図8Bは、図8Aの多段階プログラミング動作のステップ800,802又は806の詳細を示す。ステップ810は、減速措置を選択記憶素子に適用することなく、第1セットの検証レベルを用いてプログラミングすることを含む。第1セットの記憶素子うちのある検証レベルを越えるVthを有する記憶素子は、関連するビットライン電圧を引き上げることによって更なるプログラミングからロックアウトされる。ここで、この電圧は、例えば、プログラミング中にSGDを切断し、ブースティングに導く関連するチャネルを絶縁するのに十分高いレベルに引き上げられ、この記憶素子を更なるプログラミングから禁じる。ステップ812において、特定の時間に、例えば特定のトリガ条件が検出された場合、高速プログラミング記憶素子及び低速プログラミング記憶素子が識別される。この識別は、例えば全てのプログラムされたデータ状態消去状態以外のデータ状態に対して行うことができる。ラッチは、高速プログラミング記憶素子及び低速プログラミング記憶素子を特定し識別する情報プログラミングスピードデータで更新される。例えば、1個の記憶素子に関連するラッチにおける1ビット値0又は1は、低速状態を表示することができ、他のビット値1又は0は高速状態を表示することができる。本明細書において遅い若しくは低速並びに速い若しくは高速という表記は自然Vth分布における記憶素子のVthの位置を指すことに留意されたい。プログラミング中、自然Vth分布がより高く移動すると、全ての記憶素子のVthがほぼ同じペースでシフトする定常状態に到達する典型的には、一のプログラムパルスが、プログラミング中に使用されるVpgmステップサイズに近づいた後に、Vthがシフトアップする。しかし、自然Vth分布はガウス分布形状に近いため、これらの記憶素子うち半分はこの分布の高いほうの半分又はこの分布の先頭の半分に属する。これらの記憶素子は、速い若しくは高速と呼ばれる一方、他方の遅れた半分の記憶素子は遅い若しくは低速と呼ばれる。記憶素子の遅さ又は速さの測定は、単に、自然Vth分布の最下端及び最上端から記憶素子のVthがどの程度近い又は遠いかを示す。ステップ814には、第1セットの検証レベルを用いてプログラムを続けることが含まれ、プログラミングスピードに基づく減速措置を低速プログラミング記憶素子に適用することなく、プログラミングスピードに基づく減速措置を高速プログラミング記憶素子に適用する。一の手法において、現在のプログラミング段階の後続する残りの各プログラムパルスの前に、プログラミングスピードデータはラッチから読み出され、各記憶素子のために減速措置を適用するか否かを判定するために使用される。例えば、メモリチップ上の制御回路例えばセンスブロック100,図1及び3は、データラッチを読み出すことができる。ラッチ内の0が高速プログラミング記憶素子を指し、ラッチ内の1が低速プログラミング記憶素子を指すと仮定する。0が読み出された場合、このラッチに応答して、減速措置が適用される。1が読み出された場合、このラッチに応答して、減速措置は適用されない。次のプログラムパルスが生じるまでに、メモリチップ上の制御回路はどのビットラインバイアスが以前のプログラミングパルスにおいて各記憶素子に使用されたかの履歴を喪失する。よって、この制御回路は、どの記憶素子が減速措置を受ける必要があるかを判定するために再びラッチを読み出す必要がある。この処理は、プログラミング段階に関わらず減速措置が適用される各プログラムパルスのために繰り返される。閾値電圧が第1セットの検証レベルのうちある検証レベルを越える記憶素子がロックアウトされる。このプログラミングは、プログラミング段階が完了するまで続く。プログラミングスピードに基づく減速措置とは、検出されたプログラミングスピードに基づかずに適用され得る他の種類の減速措置から区別するための表現である。例えば、いくつかの場合においては、記憶素子の閾値電圧に基づいて、この閾値電圧が目標検証レベルに近づくと、引き上げられたビットライン電圧が印加される。プログラミングスピードに基づく減速措置は、この場合においてビットライン電圧の付加的な増加であり得る。図8Cは、図8Aの多段階プログラミング動作のステップ804又は808の詳細を示す。ステップ820において、ステップ812においてプログラミングスピードデータが記憶された1セットのラッチが、高速プログラミング記憶素子及び低速プログラミング記憶素子を特定するために読み出される。ステップ822は、第2セットの検証レベルを用いてプログラミングすることを含み、ここで、第2セットの各レベルは、第1セットにおいて対応するレベルよりも高い。プログラミングスピードに基づく減速措置は高速プログラミング記憶素子に適用され、一方、プログラミングスピードに基づく減速措置は低速記憶素子には適用されない。閾値電圧が第2セットの検証レベルのうちの一の検証レベルを越える記憶素子はロックアウトされる。これはプログラミング段階が完了するまでなされる。これは全プログラミング動作の完了も表し得、この場合、ステップ824にて、別のワードラインの記憶素子がこれらのラッチを使用することができるようにこれらのラッチをリセットする。図8Dは、3段階プログラミング動作に関するステップ800及び804の詳細を示しており、ここでは、3段階プログラミング動作の第2段階において、特定のn番目のワードラインの高速プログラミング記憶素子及び低速プログラミング記憶素子が、上位状態の記憶素子の前に下位状態の記憶素子のために識別されるものである。ステップ830は、第1プログラミング段階LM中間よりもやや下段階とも呼ばれるにおいて、プログラミングスピードに基づく減速措置を適用することなくVvLMを用い、第1プログラミング段階が完了するまで上位状態の記憶素子をプログラムする。第1プログラミング段階は、全ての上位状態の記憶素子のVthがVvLMに到達すると完了する。プログラミングスピードの検出はまだ行われていない。一の検証レベルにプログラムされるべき全ての記憶素子という表現は、無視されない全ての記憶素子を含むことを意味することに留意されたい。例えば、1ページのデータは64Kの記憶素子に記憶される8KBとなり得る。ごく一部の記憶素子には欠陥があり、これは、物理的欠陥を有するか、プログラムを非常に遅くして余分なプログラムパルスが必要となる他の問題を有する。例えば、評価は平均で64Kの記憶素子のうち32が欠陥であると判定し得る。よって、プログラミング中、どのビットが良くてどのビットが悪いかを特に知らずに、我々は、32ビットを無視し、それらをプログラムしないことを選ぶことができる。プログラミング性能の観点から、数個の記憶素子を無視し、それらを修正するためにECCを使うことはより効率的である。無視されるべき記憶素子の数は、ROMヒューズにおけるパラメータによって決定され得る。下位状態の記憶素子はこの段階においてプログラムされず、消去状態を維持する。4個の状態の実施態様において、下位状態はA状態であり、上位状態はB及びC状態であり得る。8個の状態の実施態様において、下位状態は、A,B及びC状態であり得、上位状態は、D,E,F及びG状態であり得る。16個の状態又は他の実施態様も可能である。下位状態の記憶素子は、プログラミング動作の完了によって下位目標データ状態にプログラムされるべきであり、よってこの下位目標データ状態のデータを表す。同様に、上位状態の記憶素子は、プログラミング動作の完了によって上位目標データ状態にプログラムされるべきであり、よってこの上位目標データ状態のデータを表す。一旦、第1プログラミング段階がWLnに対して完了すると、別のワードラインがステップ832にてプログラムされ得る。これは、例えばWLn1のための第1LMプログラミング段階である図7Bを参照。ステップ834において、第2プログラミング段階曖昧な段階と呼ばれるが始まる。ここで、全ての目標データ状態を有する記憶素子は、プログラミングスピードに基づく減速措置が適用されることなく、第1の低いセットの検証レベルを用いてプログラムされる。プログラミングスピードの検出はまだ行われていない。ステップ836において、特定の時間にて下位状態の記憶素子の中で高速プログラミング記憶素子及び低速プログラミング記憶素子が識別され、それに応じてよってラッチが更新される。上位状態の記憶素子の中では高速プログラミング記憶素子及び低速プログラミング記憶素子はまだ識別されていない。高速プログラミング記憶素子及び低速プログラミング記憶素子を識別するための例示的な実施態様は以下に更に記載する。ステップ838において、第2曖昧なプログラミング段階は、第1の低いセットの検証レベルを用いて、全てのデータ状態のプログラミングを伴って続く。更に、プログラミングスピードに基づく減速措置が高速プログラミングの下位状態の記憶素子に適用され、プログラミングスピードに基づく減速措置は低速プログラミングの下位状態の記憶素子又は上位状態の記憶素子このスピードはまだ判定されていないには適用されない。ステップ840において、特定の時間にて上位状態の記憶素子の中で高速プログラミング記憶素子及び低速プログラミング記憶素子が識別され、それに応じてよってラッチが更新される。ステップ836及び840において、共通する1セットのラッチが更新され得る。ステップ842において、第2の曖昧なプログラミング段階は、第1セットの下位検証レベルを用いて、全てのデータ状態のプログラミングを伴って続く。プログラミングスピードに基づく減速措置が高速プログラミングの下位状態の記憶素子に適用され、プログラミングスピードに基づく減速措置は、低速プログラミングの下位状態の記憶素子又は上位状態の記憶素子に適用されない。これは、第2プログラミング段階が完了するまで続く。第2プログラミング段階は、第1セットの下位検証レベルにおいて全ての記憶素子のVthビット無視数の記憶素子を引いたものが、関連する検証レベルに到達すると完了する。ステップ844は、一又は複数の他のワードラインをプログラミングすることを含む。例えば、これは、WLn2のための第1LM段階を含み図7Bの4を参照、WLn1のための第2段階が後に続く図7Bの5を参照ことができる。ステップ846において、WLnのプログラミングが第3段階のために始まると、ラッチが高速プログラミング記憶素子を特定するために読み出される。ステップ848は、第3の細かいプログラミング段階を含み、これは、第2セットの上位検証レベルを用いて全てのデータ状態をプログラムする。更に、プログラミングスピードに基づく減速措置が高速プログラミングの下位状態及び上位状態の記憶素子に適用され、プログラミングスピードに基づく減速措置は低速プログラミングの下位状態の記憶素子及び上位状態の記憶素子には適用されない。これは、第3プログラミング段階及び全プログラミング動作が完了するまで続く。第3プログラミング段階は、第2の高い1セットの検証レベルにおいて全ての記憶素子のVthビット無視数の記憶素子を引いたものが、関連する検証レベルに到達すると完了する。図8Eは、3段階プログラミング動作に関するステップ800及び804の詳細を示しており、ここでは、3段階プログラミング動作の第1段階において、上位状態の記憶素子の高速プログラミング記憶素子及び低速プログラミング記憶素子が識別され、かつ、3段階プログラミング動作の第2段階において、下位状態の記憶素子の高速プログラミング記憶素子及び低速プログラミング記憶素子が識別されるものである。これは図8Dの変更態様である。ステップ860において、第1LMプログラミング段階において、プログラミングスピードに基づく減速措置が適用されることなくVvLMを用いて上位状態の記憶素子がプログラムされる。ステップ862において、特定の時間にて上位状態の記憶素子の中で高速プログラミング記憶素子及び低速プログラミング記憶素子が識別され、それに応じてラッチが更新される。ステップ864は、高速プログラミングの上位状態の記憶素子に適用されたプログラミングスピードに基づく減速措置を伴い、かつ低速プログラミングの上位状態の記憶素子にプログラミングスピードに基づく減速措置が適用されることなくVvLMを用いて上位状態の記憶素子をプログラミングすることによって第1LMプログラミング段階を続ける。これは、このプログラミング段階が完了するまで続く。ステップ866は別のワードラインをプログラミングすることを含む。例えば、これはWLn1のための第1LM段階であり得る図7Bの2を参照。ステップ868において、第2曖昧なプログラミング段階は、高速プログラミングの下位状態の記憶素子に適用されたプログラミングスピードに基づく減速措置を伴い、プログラミングスピードに基づく減速措置が低速プログラミングの上位状態の記憶素子又は下位状態の記憶素子このスピードはまだ判定されていないに適用されることなく、第1セットの下位検証レベルを用いて全てのデータ状態のプログラミングによって始まる。ステップ836,842,844,846及び848は図8Dに関して記載したように行われる。図9Aは、高速プログラミング記憶素子904及び低速プログラミング記憶素子902を含む1セットの記憶素子の自然閾値電圧分布900を示す。自然Vth分布は、1セットの記憶素子が定常状態条件Vthのほぼ一定の変化が各プログラムパルスにおいて見られる状態にあるときに見られるVth分布として定義され得る。例えば、自然Vth分布を表す分布を達成しかつ測定するために、数回のプログラムパルスが、検証又はロックアウト動作を伴わず、1セットの記憶素子に印加され得る。上述のように、自然Vth分布が拡張すると、各データ状態に必要な検証動作の数も増加し、全プログラミング時間が増加することによってプログラミング性能を劣化させる。この問題を解消するために、一又は複数のプログラミング段階において高速プログラミング記憶素子を検出してプログラミングスピードに基づく減速措置例えば引き上げられたビットライン電圧を適用することによって、多段階プログラミング動作において自然Vth分布を縮小することができる。記憶素子に課されるプログラミングスピードに基づく減速措置とは、記憶素子の以前に検出されたプログラミングスピードに基づく減速措置であり、例えば、この記憶素子が1本のワードラインの1セットの記憶素子のうちの比較的高速のプログラミング記憶素子であると判定することである。我々は、高速の記憶素子を遅くすることによって、高速プログラミング記憶素子と低速プログラミング記憶素子の間のプログラミングスピードの差を少なくすることによって自然Vth分布を人工的に狭めることができる方式を提案する。高速の記憶素子は、所定のワードラインのためのプログラミング段階の間に特定され、この情報はデータラッチに保存される。この情報を使用してプログラミング中にビットラインバイアスを高速の記憶素子に印加することによってこの高速の記憶素子は遅くなる。これは自然Vt分布を効果的に狭め、よって、全ての記憶素子のプログラミングを終了するのに必要な検証動作の数を減らす。この手法は、プログラムされたVth分布に著しい影響を与えることなくプログラミング性能を向上することができ、よって、エラーの数が増えるのを防ぐことができる。高速プログラミング記憶素子のみを遅くすることによって、それらのプログラミングスピードが低速の記憶素子のプログラミングスピードに近くなり、自然Vt分布を効果的に狭める。図9Bは、1セットの記憶素子の圧縮された自然閾値電圧分布906を示す。この分布はΔVthの量だけ狭められる。ここで、説明上、自然Vth分布は圧縮の後でもそのガウス分布形状を保持して示されているが、実際にはこの分布は圧縮の後のこの分布における記憶素子のVthの再分布によってそのガウス形状を失う。図9Cは、記憶素子をプログラムするために必要な最も高いVpgmと、この記憶素子のビットライン電圧との関係を示す。X軸はビットライン電圧Vblの増加示し、y軸は記憶素子の完全なプログラミングに必要な最も高いVpgm電圧を示す。よって、所定のVpgmにて、記憶素子に関連付けられたビットラインにVblが印加された場合、この記憶素子のプログラミングスピードは低下され得る。一般に、記憶素子のプログラミングスピードが遅くなる程度は、ビットライン電圧に一定して比例する斜線で描かれている。この定数は典型的には1よりも大きく、なぜならVblにおける1Vの増加例えばΔVbl=1Vは、オフセットするためにVpgmだけ1Vよりも大きく増加することを必要とするからである。図9Bにおいて、ΔVthはΔVblによって乗じられた値に等しい。従って、増加するVblは、プログラミングスピードを制御し、かつVth分布の幅を狭くするための強力なツールである。しかしながら、Vblは、主にVsgdドレイン側選択ゲートマージン領域margin-windowによって制限されるため、高くなりすぎることはない。特定の例示的な実施態様は、2段階及び3段階プログラミング動作の場合に以下に記載される。この技術は付加的な段階にも拡張することができる。図9Dは、プログラミングシナリオの実施例を示す。実施例1において、記憶素子はそれぞれ2ビットを記憶し、2つのプログラミング段階が使用され、かつ第1段階において全てのプログラムされた状態の全ての記憶素子のプログラミングスピードデータが得られる。実施例2において、記憶素子はそれぞれ2ビットを記憶し、3つのプログラミング段階が使用され、かつ第1段階において上位状態の記憶素子のプログラミングスピードデータが得られる。実施例3において、記憶素子はそれぞれ2ビットを記憶し、3つのプログラミング段階が使用され、かつプログラミングスピードデータが第1段階において上位状態の記憶素子のために得られ、及び第2段階において下位状態の記憶素子のために得られる。実施例4において、記憶素子はそれぞれ2ビットを記憶し、3つのプログラミング段階が使用され、かつ第2段階においてプログラミングスピードデータが下位状態の記憶素子のために得られ、次に上位状態の記憶素子のために得られる。実施例5において、記憶素子はそれぞれ3ビットを記憶し、3つのプログラミング段階が使用され、かつプログラミングスピードデータが、第1段階において上位状態の記憶素子のために得られ、及び第2段階において下位状態の記憶素子のために得られる。実施例6において、記憶素子はそれぞれ3ビットを記憶し、3つのプログラミング段階が使用され、かつ第2段階においてプログラミングスピードデータが下位状態の記憶素子のために得られ、次に上位状態の記憶素子のために得られる。これらの実施例をそれぞれ以下に記載する。実施例1第1の実施態様は、図10A,10B,10C,10E,10F及び10Gのシーケンスを含む。第2の実施態様は、図10A,10B,10D,10E,10F及び10Gのシーケンスを含む。この実施例において、図10Aから図10Eまでの流れは例えば図7Aのステップ1に対応し、図10Fから図10Gまでの流れはステップ図7Aの3に対応する。ラッチの使用は、図16Bの対応するステップにおいて説明される。両方の実施態様において、全ての記憶素子のプログラミングスピードデータは第1段階において得られ、この情報はデータラッチに保存され、かつプログラミングスピードに基づく減速措置が、第1段階の残りの部分及び第2段階全体において高速プログラミング記憶素子に適用される。図10Aは、2段階プログラミング動作の第1段階の開始を示しており、ここでは、全ての記憶素子が消去状態にあるものである。分布1000は消去E状態を表す。VvaL,VvbL及びVvcLは、第1セットの下位検証レベルであり、及びVva,Vvb及びVvcは、第2セットの上位検証レベルである。いくつかの場合において、一又は複数の最も上位のデータ状態は下位検証レベルを使用しなくてもよく、なぜならより広い分布が許容されるからである。図10Bは、図10Aの後に続く状態を示しており、ここでは、2段階プログラミング動作の第1段階において、最小数の記憶素子がVth>VvaLを有するものである。ここで、連続するプログラム検証の繰り返しにおいて多くのプログラムパルスが印加されている。検証動作に関し、各プログラムパルスの後に全ての目標状態が検証される必要はないことに留意されたい。代わりに、検証される特定の状態をプログラミング段階全体の進行に合わせて構成することができ、例えば、プログラミング段階の初期において、下位状態が検証されるが上位状態は検証されず、次に、ほとんど又は全ての状態が検証され、次に、全ての下位状態の記憶素子がロックアウトされると上位状態が検証されるが下位状態は検証されない。分布1002の幅は、自然Vth分布と同等かこれよりも小さくてよい。プログラムパルスが印加されると、記憶素子の閾値電圧は徐々に増加する。例えば、最小数の記憶素子がVvaLに到達するとすなわち、それらのVthがVvaLを越えると、カウンターをトリガする条件が満たされる。分布1002の領域1004は、Vth>VvaLである記憶素子を表す。VvaLに到達する記憶素子の数は、センス増幅器検証動作の結果を示すデータを記憶するにおいてラッチのビットスキャンから判定され得る。検証動作において、記憶素子及びそのビットラインが非導電状態であると検出されてVth>VvaLを示すと、1ビットがセンス増幅器において反転する。VvaLでの検証動作は、目標状態に関わらず全ての記憶素子のために行うことができることに留意されたい。付加的なプログラムパルスが特定数のm>0パルスが印加されるまで計数される。この数は、不揮発性記憶素子の典型的に予想される自然Vth分布幅に基づき設定することができ、目標ワードラインの不揮発性記憶素子の特定の部分のほとんどは、計数が完了するとVvaLを越える閾値電圧を有する。この特定の部分は、これらの記憶素子の半分とすることができ、これらの記憶素子の半分は高速プログラミングとして区分され、記憶素子の残りの半分は低速プログラミングとして区分される。この特定の部分はm個であり、プログラミング性能に関して便益を最大限にする適切な値を得るために複数のロットに亘って複数のメモリデバイスに対して最適化することができる。計数が完了すると、検証動作がVvaLにて行われ、検証動作において非導電状態である高速プログラミング記憶素子をVth>VvaLを有するものとして特定し、検証動作において導通状態である低速プログラミング記憶素子をVth<VvaLを有するものとして特定する。1セットのデータラッチにおいて例えばDL1において1ビットを設定することができ図3,16A1~16Eを参照、これは、特定のワードラインの各記憶素子が高速の状態か低速の状態かを特定する。VvaLは、プログラムスピードを識別するための適切なチェックポイントとして選択され得る確定した検証レベルであり、なぜなら、それは目標データ状態としてA状態を有する記憶素子を検証する機能もあるからである。A状態の記憶素子は、それらのVthがVvaLを越えると現在のプログラミング段階において更なるプログラミングからロックアウトされることができ、一方、B及びC状態の記憶素子はそれぞれVvbL、VvcLに到達するまでプログラムされ続ける。VvaLの代わりに、パルスの計数をトリガするための条件、及び/又は高速プログラミング記憶素子及び低速プログラミング記憶素子を識別するための条件として、目標データ状態に関連する又は関連しない別の検証レベルを使用することも可能である。図10Cは、図10Bの後に続く、付加的な数のm個のプログラムパルスが印加された後の第1の変更態様を示しており、ここで、2段階プログラミング動作の第1段階において、高速プログラミング記憶素子及び低速プログラミング記憶素子がVvaLの検証レベルを用いて識別されるものである。ここで、Vth分布1003は、低速プログラミング記憶素子及び高速プログラミング記憶素子のためにそれぞれ領域1008、1010を含む。分布1006は、目標状態としてA状態を有し、かつVvaLに到達した一部の記憶素子を表す。分布1006における記憶素子は、自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標A状態に到達したからであることに留意されたい。高速プログラミング記憶素子及び低速プログラミング記憶素子の識別は、ある条件例えば、印加された付加的な数のプログラムパルスを計数したことが満たされると行われる。図10Dは、図10Bの後に続く、付加的な数のk個のプログラムパルスが印加された後の第2の変更態様を示しており、ここで、2段階プログラミング動作の第1段階において、高速プログラミング記憶素子及び低速プログラミング記憶素子がVvの読み出しレベルを用いて識別されるものである。Vvは、目標データと関連付けられていない。一の手法において、Vvは、1セットの不揮発性記憶素子のための読み出し動作のためにも使用される例えばE状態及びA状態を識別するため。例えば、Vvは自然Vth分布の幅の約二分の一だけVvaLよりも低い。あるいは、この識別は、付加的なプログラムパルスを計数することなく、最小数の記憶素子がVvaLに到達したときに行うことができる。ここで、Vth分布1005は、低速プログラミング記憶素子及び高速プログラミング記憶素子のためのそれぞれ領域1014、1016を含む。分布1012は、目標状態としてA状態を有し、かつVvaLに到達した一部の記憶素子を表す。分布1012における記憶素子は、自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標A状態に到達したからであることに留意されたい。適切な検証レベルを用いて、プログラミングスピードに基づいて2以上のクラスの記憶素子を識別することも可能である。一般に、k<m,k>0及びm>0であり、プログラミングスピード判定は、図10Cに記載したようにm個の計数が使用され、図10Dに記載したようにk個の計数が使用される場合、より早くなされ得る。高速プログラミング記憶素子及び低速プログラミング記憶素子をより早く識別することの利点は、この情報が高速プログラミング記憶素子を減速するためにより早く使用され、これにより、後続するプログラムパルスのための自然Vth分布を狭める圧縮することができることである。この手法の欠点は、Vvでの付加的な検出動作が必要とされることである。更に、プログラミング段階においてプログラミングスピードデータを得るのが早すぎる場合には、その信頼性が低くなり得、これは、記憶素子のVth分布が、自然Vth分布に近い幅まで拡張する前や、記憶素子が、それらのVthがそれらの定常状態この定常状態ではVpgmステップサイズに近い率でシフトアップするに到達する前などである。図10Cの手法の利点は、VvaLが、目標状態に関連する検証レベルとして既に使用されているため、付加的な検出動作を必要としないことである。図10Eは、2段階プログラミング動作の第1段階における、図10C又は10Dのいずれかの状態からのプログラミングを示す。図10Cの分布1003から続くプログラミンが描かれており、A状態の記憶素子の残りがVvaL分布1006にプログラムされB状態の記憶素子がVvbL分布1030に向かってプログラムされC状態の記憶素子がVvcL分布1040に向かってプログラムされるか、下位検証レベルが使用されない場合はVvcに向かってプログラムされる。2段階プログラミング動作の第1段階において、図6において波形602によって描かれているように、より大きなVpgmステップサイズを使用することができることに留意されたい。図10Fの分布は、第1段階の終わりに達している。図10Fは、図10Eの後に続く、2段階プログラミング動作の第2段階の開始の状態を示す。第2段階は、図6における波形600によって描かれるように、より小さなVpgmステップを使用することができ、記憶素子のVthがより遅く上昇することで、目標検証レベルの大きなオーバーシュートを回避する。引き上げられたビットラインを利用することも可能であり、このビットラインは、プログラミングスピードに基づかず、記憶素子のVthが目標データ状態の下位検証レベルと上位検証レベルとの間にあるとき及び/又は特定のプログラミング段階にあるときに適用される。これは付加的な減速措置であり、プログラミングスピードに基づく減速措置ではなく、プログラミングスピードに基づく減速措置例えば付加的なVblの上昇としてとともに利用することができる。第1段階と第2段階との間に一又は複数の他のワードラインがプログラムされるときの容量結合及びその他の干渉効果によって、A,B及びC状態のそれぞれの分布1020、1031、1041がそれぞれ分布1006、1030、1040に比して広がって示されていることに留意されたい。図10Gは、2段階プログラミング動作の第2段階における、図10Fの状態からのプログラミングを示す。分布1022,1032及び1042を遷移させるために、第2セットの検証レベル、すなわちVva,Vvb及びVvcが使用される。有利なことには、Vth分布1022,1032及び1042は、分布1020,1031及び1041に比べて狭められている。一般に、Vth分布が狭められると、分布の上端が僅かに動く一方、下端には大きな動きがある。実施例2別の実施態様は、図11A,11B,11C,11D,11E,11F及び11Gのシーケンスを含む。第1段階において、上位状態の記憶素子のプログラミングスピードデータが得られ、その情報はデータラッチに保存され、かつ第1段階の残り及び第2及び第3段階全体においてプログラミングスピードに基づく減速措置が高速プログラミングの上位状態の記憶素子に適用される。プログラミング動作において下位状態の記憶素子のプログラミングスピードデータは得られない。この実施例において、図11Aから図11Dまでの流れは例えば図7Bのステップ1に対応し、図11から図Eまでの流れはステップ図7Bの3に対応する。ラッチの使用は、図16C1又は16C2の対応するステップにおいて説明される。図11Aは、3段階プログラミング動作の第1段階の開始を示しており、ここでは、4レベルメモリデバイスにおいて、全ての記憶素子が消去状態にあるものである。第1段階は上述のLM段階であり得、ここで下位状態の記憶素子は消去状態1100を維持し、一方、上位状態の記憶素子は検証レベルVvLMを用いて中間LM状態にプログラムされる。図11Bは、図11Aの後に続く状態を示しており、ここでは、3段階プログラミング動作の第1段階において、最小数の上位状態の記憶素子がVth>VvLMを有するものである。分布1102において、領域1104は、Vth>VvLMである上位状態の記憶素子を表す。一旦、最小数の上位状態の記憶素子がVvLMに到達すると、計数が始まり、各付加的なプログラムパルス毎に増加される。第1段階は比較的より大きなVpgmステップサイズを使用することができる。図11Cは、図11Bの後に続く、付加的な数のm個のプログラムパルスが印加された後の状態を示しており、ここでは、3段階プログラミング動作の第1段階において、高速プログラミング及び低速プログラミングの上位状態の記憶素子がVvhの読み出しレベルを用いて識別されるものである。付加的なプログラムパルスm>1の計数が完了すると、Vth分布1103は、低速プログラミング及び高速プログラミングの上位状態の記憶素子のためにそれぞれ領域1108、1110を含む。分布1106は、VvLMに到達したことを検証された上位状態の一部の記憶素子を表す。分布1106における記憶素子は、自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標LM状態に到達したからであることに留意されたい。Vvhは高い読み出しレベルであり、なぜなら上位状態の記憶素子を検証するために使用されるからである。第1段階の残りの間、各プログラムパルスが印加される際、プログラミングスピードに基づく減速措置は低速プログラミングの上位状態の記憶素子には適用されず、プログラミングスピードに基づく減速措置は高速プログラミングの上位状態の記憶素子に適用される。図11Dは、図11Cの後に続く、3段階プログラミング動作の第2段階の開始における状態を示す。プログラミングは、図11Cから続き、分布1103が分布1120に遷移し、ここでは、第1段階の終わりにて全ての上位状態の記憶素子が中間LM状態に達している。第1段階と第2段階との間で、別のワードラインがプログラムされる。目標ワードラインに対して第2段階を開始する直前に、目標ワードライン上の高速プログラミング及び低速プログラミングの上位状態の記憶素子を特定するためにラッチが読み出される。ラッチ内の情報を用いて、低速プログラミングの上位状態の記憶素子は、例えばプログラミングスピードに基づく減速措置を適用しないことで通常の方法で処理され得る。これに対して、プログラミングスピードに基づく減速措置例えば上昇したビットライン電圧は各プログラムパルスが印加されるときに高速プログラミングの上位状態の記憶素子に適用され得る。この例において下位状態の記憶素子のためにプログラミングスピードデータは得られておらず、又、得られることもないことに留意されたい。高速プログラミングのB状態及びC状態の記憶素子のみへのプログラミングスピードに基づく減速措置の適用は、B及びC状態の記憶素子のための効果的な自然Vth分布を縮小し、よって、B及びC状態のために必要な検証動作の数を減少させ、従ってプログラム性能を向上させる利点をなお提供することができる。図11Eは、図11Dの状態の後に続く、3段階プログラミング動作の第2段階における下位状態の記憶素子及び上位状態の記憶素子のプログラミングを示す。この段階において下位状態の記憶素子は、プログラミングスピードに基づく減速措置を適用することなく、消去状態を維持するか、VvaLを用いてA状態分布1130にプログラムされる。上位状態の記憶素子は、第2段階の終わりに図11Fの分布に到達するまで、プログラミングスピードに基づく減速措置を適用して、VvbL及びVvcLを用いて中間LM状態からそれぞれB状態分布1140又はC状態分布1150にプログラムされる。第2段階は比較的より大きなVpgmステップサイズを用いることができる。いくつかの実施形態において下位状態の記憶素子のVthの遷移は典型的には上位状態の記憶素子のVthの遷移の前に行われることに留意されたい。これは、Vpgmが、低い初期レベルからステップアップされていき、初めは下位状態の記憶素子のVthを動かすのに必要な高さしかないからである。Vpgmが更に高くなったときのみ、上位状態の記憶素子のVthは増加し始める。同様の観測結果が他の図においても該当する。図11Fは、図11Eの状態の後に続く、3段階プログラミング動作の第3段階の開始を示す。第3段階は、比較的小さなVpgmステップサイズを使用することができる。このVth分布は、一又は複数の他のワードラインがプログラムされるときに容量結合及び干渉効果のために広がり得ることに留意されたい。図11Gは、3段階プログラミング動作の第3段階における、図11Fの条件からのプログラミングを示す。A状態の記憶素子は、プログラミングスピードに基づく減速措置を適用することなく、Vvaを用いて分布1132にプログラムされ、B状態の記憶素子は、Vvbを用いて分布1142にプログラムされ、C状態の記憶素子は、Vvcを用いて分布1152にプログラムされる。ちょうど第2段階の開始時のように、目標ワードラインに対して第3段階を開始する前に、目標ワードライン上の高速プログラミング及び低速プログラミングの上位状態の記憶素子を特定するためにラッチが読み出される。ラッチ内の情報を用いて、プログラミングスピードに基づく減速措置が高速プログラミングのB状態及びC状態の記憶素子に適用されるが、低速プログラミングのB状態及びC状態の記憶素子には適用されない。実施例2A実施例2に対する変更態様を次に記載する。これは2段階プログラミング動作を有する。図11Hは、図11F及び11Gの変更態様として、図11Dの状態の後に続く、2段階プログラミング動作の第2段階における下位状態の記憶素子及び上位状態の記憶素子のプログラミングを示す。この実施例において、図11Aから図11Dまでの流れは例えば図7Aのステップ1に対応し、図11Hにおける流れは図7Aのステップ3に対応する。プログラミング動作はLMパス及び第2パスUPプログラミングパスと呼び得るを含む。このプログラミング動作は、下位ページをプログラムし、次に上位ページをプログラムする。このプログラミング動作は、3段階プログラミング動作より速い。この手法において、我々は2つのラッチDL1及びDL2だけが余分に必要である。ラッチの使用法は図16C3に記載する。実施例3別の実施態様は、11A~11D,12A~12C,11F及び11Gのシーケンスを含む。第1段階において、上位状態の記憶素子のプログラミングスピードデータが得られてラッチに保存され、プログラミングスピードに基づく減速措置が第1段階の残りの部分並びに第2及び第3段階全体において高速プログラミングの上位状態の記憶素子に適用される。第2段階において、下位状態の記憶素子のプログラミングスピードデータが得られ、プログラミングスピードに基づく減速措置が第2段階の残りの部分及び第3段階において高速プログラミングの下位状態の記憶素子に適用される。この実施例において、図11Aから図11Dまでの流れは、例えば図7Bのステップ1に対応し、図12A~12Cから図11Fまでの流れは図7Bのステップ3に対応し、図11Gにおける流れは図7Bのステップ6に対応する。ラッチの使用は図16D1又は16D2の対応するステップにおいて説明される。図12Aは、図11Dの条件の後に続く、3段階プログラミング動作の第1の変更態様の第2段階の開始におけるプログラミングを示しており、ここで、最小数の下位状態記憶素子がVth>VvaLを有するものである。E状態分布1100及びLM分布1120は繰り返される。各連続するプログラムパルスが印加されると、分布1100はA状態の記憶素子下位状態の記憶素子のために分布1202に遷移し、分布1120は上位状態の記憶素子のためにB状態分布1230及びC状態分布1240に遷移する。第1段階の間に上位状態の記憶素子のために得られたプログラムスピードデータに基づいて、プログラミングスピードに基づく減速措置が高速プログラミングのB及びC状態の記憶素子に適用され得る。分布1202において、領域1204は、Vth>VvaLである下位状態の記憶素子を表す。一旦、最小数の下位状態の記憶素子がVvaLに到達すると、計数が始まり、付加的なプログラムパルス毎に増加される。第2段階は、比較的大きなVpgmステップサイズを使用することができる。図12A~12Cにおいて、下位状態の記憶素子のVthの遷移は、典型的には、上位状態の記憶素子のVthの遷移よりも前に生じる。図12Bは、付加的な数のk個のプログラムパルスが印加された後の、図12Aの後に続く状態を示しており、ここでは、3段階プログラミング動作の第2段階において、高速プログラミング及び低速プログラミングの下位状態の記憶素子がVvlの読み出しレベルを用いて識別されるものである。k個の付加的なプログラムパルスの計数が完了すると、Vth分布1203は低速プログラミング記憶素子及び高速プログラミング記憶素子のためのそれぞれ領域1207及び1208を含む。分布1209は、VvaLに到達したことを検証されたA状態の一部の記憶素子を表す。分布1209にある記憶素子は自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標A状態に到達したからであることに留意されたい。Vvlは低い読み出しレベルであり、なぜならそれは下位状態の記憶素子を読み出すために使用されるからである。プログラミングスピードに基づく減速措置は、高速プログラミングのB及びC状態の記憶素子に適用され続ける。図12Cは、図12Bの条件の後に続く、3段階プログラミング動作の第1の変更態様の第2段階における下位状態の記憶素子及び上位状態の記憶素子のプログラミングを示す。この時、下位状態及び上位状態の記憶素子の両方のプログラミングスピードデータが分かっており、よってプログラミングスピードに基づく減速措置が高速プログラミングのA状態の記憶素子、更には高速プログラミングのB及びC状態の記憶素子に適用され得る。プログラミングが続くと、付加的なA状態の記憶素子が分布1210に到達する。第2段階の終了時に図11Fの分布に達することができ、第3段階は図11Gに関して記載したように行われ得る。実施例4別の実施態様は、図11A,13A,13B1/13C1,13B2/13C2,13D及び11Gのシーケンスを含む。第1段階において、プログラミングスピードデータは得られない。第2段階において、下位状態及び上位状態の記憶素子の両方のプログラミングスピードデータが得られ、かつプログラミングスピードに基づく減速措置が第2段階の残りの部分及び第3段階全体において高速プログラミングの下位状態及び上位状態の記憶素子に適用される。この実施例において、図11Aから図13Aまでの流れは、例えば図7Bのステップ1に対応し、図13B1/13C1から13Dまでの流れは図7Bのステップ3に対応し、図11Gにおける流れは図7Bのステップ6に対応する。ラッチの使用は、図16Eの対応するステップにおいて説明される。図13Aは、3段階プログラミング動作の第2の変更態様の第2段階の開始を示しており、ここでは、下位検証レベルVvLMxがVvLMに代わって使用されるものである。図11AのE状態分布1100が繰り返される。この状態には第1段階の終わりに到達する。低いLM分布1310も描かれている。このLM分布が、より高い次の分布上位状態のうち最も低い状態このケースではB状態に近すぎる場合及び/又はこれに重複する場合、上位状態の記憶素子の相対的なプログラミングスピードを確実に検出することは不可能である。結果として、中間検証レベルVvLMxは、上位目標データ状態のうち最も低い目標データ状態このケースではB状態のための検証レベルより低く下げられ、これにより記憶素子のVthがVvbLに到達し始めるまでにこの記憶素子が定常状態に到達することを確実にする。これは相対的なプログラムスピード判定をより正確なものにする。これを達成するために、VvLMxとVvbLの間のギャップは典型的には、1セットの不揮発性記憶素子の予想される一の自然閾値電圧の幅よりも大きい。すなわち、VvbL-VvLMx>自然Vth幅である。VvLMxは、先の図のVvLMよりも低い検証レベルを表す。第1段階においてVvLMxが使用され、図13Aの分布中間分布1310を含むが達成される。第2段階のプログラミング中、図13B1から図13B2までの遷移がまず生じ、次に図13C1から13C2への遷移が続き、同じプログラミング段階において、上位状態の記憶素子がVvbLに到達するよりも早く下位状態の記憶素子がVvaLに到達する。同様に、図13C1の状態に到達する前に図13B1の状態に到達する。図13B1及び13C1は明確化のために別々に示される。同様に、図13B2及び13C2も明確化のために別々に示される。下位状態の記憶素子のプログラミングスピードデータが読み出しレベルVvlを用いて得られ、上位状態のプログラミングスピードデータが記憶素子の読み出しレベルVvhを用いて得られる。図13B1及び13B2は、下位状態の記憶素子に関する遷移を示し、図13C1及び13C2は、上位状態の記憶素子に関する遷移を示す。図13B1は、図13Aの後に続く状態を示しており、ここでは、3段階プログラミング動作の第2の変更態様の第2段階において、最小数の下位状態記憶素子がVth>VvALを有するものである。分布1302において、領域1304は、Vth>VvaLである下位状態の記憶素子を表す。一旦、最小数の下位状態の記憶素子がVvaLに到達すると、計数が開始され、付加的なプログラムパルス毎に増加される。第2段階は、比較的大きなVpgmステップサイズを使用することができる。図13B2は、図13B1の後に続く、付加的な数のk1個のプログラムパルスが印加された後の状態を示しており、ここでは、高速プログラミング及び低速プログラミングの下位状態の記憶素子がVvlの読み出しレベルを用いて識別される。k1個の付加的なプログラムパルスの計数が完了すると、Vth分布1306は、低速プログラミング及び高速プログラミングの下位状態の記憶素子のためにそれぞれ領域1308、1310を含む。分布1316は、VvaLに到達したことを検証されたA状態の一部の記憶素子を表す。分布1316における記憶素子は、自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標A状態に到達したからであることに留意されたい。Vvlはより低い読み出しレベルである。プログラミングスピードに基づく減速措置は、高速プログラミング及び低速プログラミングの下位状態の記憶素子がVvlの読み出しレベルを用いて識別されるまで適用されていない。この時点で、下位状態の記憶素子例えばA状態の記憶素子のプログラミングスピードデータがデータラッチに保存される。このデータラッチ内のプログラミングスピードデータを使用して、プログラミングスピードに基づく減速措置がこの段階の残りの間に下位状態の記憶素子に適用され得る。高速プログラミングの下位状態の記憶素子にはプログラミングスピードに基づく減速措置が課されるが、低速プログラミングの下位状態の記憶素子には課されずに、プログラミングは続き得る。一般に、一旦、プログラムスピード判定が1セットの記憶素子に対してなされ、データラッチに保存されると、後続するプログラミング中にこのプログラミングスピードデータを使用し始めてこの1セットの記憶素子のうちの高速プログラミング記憶素子に減速措置を課すことが最も有益である。後に、一旦、プログラムスピード判定が残りの1セットの記憶素子になされると、データラッチは更新され、減速措置が残りのプログラミングに対して全ての記憶素子に課される。図13C1は、図13Aの後に続く及び一般に図13B2に続く状態を示しており、ここでは、3段階プログラミング動作の第2の変更態様の第2段階において、最小数の上位状態の記憶素子がVth>VvbLを有するものである。分布1312は、中間LM状態1310から上位状態の記憶素子をプログラミングすることによって到達する。分布1312において、領域1314は、Vth>VvbLである上位状態の記憶素子を表す。VvbLは、上位状態のうち最も低い状態の検証レベルである。一旦、最小数の上位状態の記憶素子がVvbLに到達すると、計数が開始され、付加的なプログラムパルス毎に増加される。図13C2は、図13C1の後に続く、付加的な数のk2個のプログラムパルスが印加された後の状態を示しており、ここでは、3段階プログラミング動作の第2の変更態様の第2段階において、高速プログラミング及び低速プログラミングの上位状態の記憶素子がVvhの読み出しレベルを用いて識別されるものである。k2個の付加的なプログラムパルスの計数が完了するとVth分布1322は、低速プログラミング及び高速プログラミングの上位状態の記憶素子のために、それぞれ領域1326、1328を含む。分布1324は、VvbLに到達したことを検証されたB状態の一部の記憶素子を表す。分布1324における記憶素子は、自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標B状態に到達したからであることに留意されたい。Vvhはより高い読み出しレベルである。k1及びk2は、異なるカウンターが下位状態及び上位状態の記憶素子のプログラミングスピードを判定するために使用され得ることを表すことに留意されたい。簡略化のために、k1はk2と同じ値に設定することができる。計数されるプログラムパルスの数に関わらず、計数の開始時は異なり得ることに留意されたい。すなわち、計数の開始をトリガする図13B1及び13C1の条件は、異なる時期に生じうる。図13Dは、図13C1及び13C2の状態の後に続き、3段階プログラミング動作の第2の変更態様の第2段階における下位状態の記憶素子及び上位状態の記憶素子のプログラミングを示す。図13B2の下位状態分布1306及び図13C2の上位状態分布1322が繰り返される。この時、下位状態及び上位状態の記憶素子の両方のプログラミングスピードデータが分かっている。プログラミングスピードに基づく減速措置が高速プログラミングの下位状態の記憶素子に課されるが、低速プログラミングの下位状態の記憶素子には課されずに、プログラミングは分布1306の下位状態の記憶素子がA状態分布1320に遷移するように続く。同様に、プログラミングスピードに基づく減速措置が高速プログラミングの上位状態の記憶素子に課されるが、低速プログラミングの上位状態の記憶素子には課されずに、プログラミングは分布1322の上位状態の記憶素子がB状態分布1330及びC状態分布1340に遷移するように続く。次に、プログラミング動作の第3段階が図11Gの状態を達成するために行われる。この段階において、プログラミングスピードに基づく減速措置は、高速プログラミングの下位状態及び上位状態の記憶素子には課されるが、低速プログラミングの下位状態及び上位状態の記憶素子には課されない。実施例5別の実施態様は、図14A,14B,14C,14D,14E,14F,14G,14H,14Iのシーケンスを含む。第1段階において、上位状態の記憶素子のプログラミングスピードデータが得られ、第1段階の残りの部分及び第2及び第3段階全体においてプログラミングスピードに基づく減速措置が高速プログラミングの上位状態の記憶素子に適用される。第2段階において、下位状態の記憶素子のためにプログラミングスピードデータが得られ、プログラミングスピードに基づく減速措置が第2段階の残りの部分及び第3段階全体において高速プログラミングの下位状態の記憶素子に適用される。この実施例において、図14Aから図14Dまでの流れは例えば図7Bのステップ1に対応し、図14Eから図14Hまでの流れは図7Bのステップ3に対応し、図14Iにおける流れは図7Bのステップ6に対応する。ラッチの使用は、図16D1又は16D2の対応するステップにおいて説明される。図14Aは、3段階プログラミング動作の第1段階の開始を示しており、ここでは、8レベルメモリデバイスにおける全ての記憶素子が消去状態にあるものである。下位状態は、消去されたEr状態分布、並びに下位検証レベルVvaL,VvbL及びVvcL並びに上位検証レベルVva,Vvb及びVvcを伴うそれぞれA,B及びC状態である。上位状態は、下位検証レベルVvdL,VveL,VvfL及びVvgL並びに上位検証レベルVvd,Vve,Vvf及びVvgをそれぞれ備えるD,E,F及びG状態である。図14Bは、図14Aの後に続く状態を示しており、ここでは、3段階プログラミング動作の第1段階において、最小数の上位状態の記憶素子がVth>VvLMを有するものである。分布1402において、領域1404は、Vth>VvaLの上位状態の記憶素子を表す。一旦、最小数の下位状態の記憶素子がVvLMに到達すると、計数が開始され、付加的なプログラムパルス毎に増加される。図14Cは、図14Bの後に続く、付加的な数のk個のプログラムパルスが印加された後の状態を示しており、ここにおいて、3段階プログラミング動作の第1段階において、高速プログラミング及び低速プログラミングの上位状態の記憶素子がVvhの読み出しレベルを用いて識別される。k個の付加的なプログラムパルスの計数が完了すると、Vth分布1403は、低速プログラミング及び高速プログラミングの上位状態の記憶素子のために、それぞれ領域1406及び1408を含む。分布1404は、VvLMに到達したとことを検証された上位状態の一部の記憶素子を表す。図14Dは、図14Cの後に続く、3段階プログラミング動作の第1段階が完了したときの状態を示している。プログラミングは、分布14031103と同じが分布14451120と同じに遷移するように図11Cから続き、第1段階の終わりに全ての上位状態の記憶素子が中間LM状態に到達している。この時、高速プログラミング及び低速プログラミングの上位状態の記憶素子が分かり、ラッチに保存される。分布1403からLM分布1445へのプログラミングを上位状態の記憶素子のために行うことができ、この間、高速プログラミングの上位状態の記憶素子にプログラミングスピードに基づく減速措置が課されるが、低速プログラミングの上位状態の記憶素子には課されない。これで第1段階を完結する。図14Eは、図14Dの後に続く状態を示しており、ここでは、3段階プログラミング動作の第2段階においてプログラミングが行われ、かつ最小数の下位状態記憶素子がVth>VvaLを有するものである。第2段階の開始時に、高速プログラミング及び低速プログラミングの上位状態の記憶素子を特定するためにラッチが読み出され得る。下位状態の記憶素子が消去状態分布1400から分布1412にプログラムされる一方、上位状態の記憶素子は、それぞれの目標状態に従って中間分布1445からD状態分布1450、E状態分布1460、F状態分布1470、G状態分布1480にプログラムされる。図14E~14Gのいくつかの実施形態において、下位状態の記憶素子のVthの遷移は典型的には、上位状態の記憶素子のVthの遷移よりも前に生じることに留意されたい。よって、A状態の記憶素子がプログラムされ、そのVthレベルが増加するとき、Vpgmは始めは記憶素子をA状態Vthの近くに動かすのに必要な高さしかない。上位状態の記憶素子のVthレベルはこの期間中は動かない。Vpgmがより高くなったときのみ、より高いD,E,F及びG状態の近くの記憶素子のVthが増加し始める。よって、図14Eに示されるVthの遷移は、一のプログラミング段階において生じ、簡略化のために一の図において示されるが、同時に生じる必要はない。上位状態の記憶素子のためにラッチ内に保存されたプログラムスピードデータに基づき、プログラミングスピードに基づく減速措置が高速プログラミングの上位状態の記憶素子に課され得るが、低速プログラミングの上位状態の記憶素子には課されない。分布1412において、領域1414は、Vth>VvaLである下位状態の記憶素子を表す。一旦、最小数の下位状態の記憶素子がVvaLに到達すると、計数が開始され、付加的なプログラムパルス毎に増加される。第2段階は、比較的大きなVpgmステップサイズを使用し得る。図14Fは、図14Eの後に続く、付加的な数のk個のプログラムパルスが印加された後の状態を示しており、ここでは、3段階プログラミング動作の第2段階において、高速プログラミング及び低速プログラミングの下位状態の記憶素子がVvlの読み出しレベルを用いて識別される。k個の付加的なプログラムパルスの計数が完了すると、Vth分布1416は、低速プログラミング及び高速プログラミングの下位状態プログラミング記憶素子のために、それぞれ領域1417及び1418を含む。分布1420は、VvaLに到達したとことを検証された上位状態の一部の記憶素子を表す。分布1420における記憶素子は、自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標A状態に到達したからであることに留意されたい。図14Gは、図14Fの後に続く、3段階プログラミング動作の第2段階が完了したときの条件を示す。この時、下位状態及び上位状態の記憶素子のプログラミングスピードデータが利用可能である。下位状態の記憶素子は、分布1416からA状態分布1420,B状態分布1430又はC状態分布1440にプログラムされ、この間、プログラミングスピードに基づく減速措置が高速プログラミングの下位状態の記憶素子に課されるが、低速プログラミングの下位状態の記憶素子には課されない。同様に、第2段階において、プログラミングスピードに基づく減速措置は、高速プログラミングの上位状態の記憶素子に課されるが、低速プログラミングの上位状態の記憶素子には課されない。こうして第2段階は完了する。図14Hは、図14Gの後に続く3段階プログラミング動作の第3段階の開始における状態を示す。より小さなプログラムパルスステップサイズを使用することができる。Vth分布は、一又は複数の他のワードラインがプログラムされるときに、容量結合及び干渉効果によって広がり得ることに留意されたい。図14Iは、図14Hの後に続く、3段階プログラミング動作の第3段階の終了における状態を示す。A状態,B状態,C状態,D状態,E状態,F状態及びG状態の記憶素子が、それぞれ分布1422,1432,1442,1452,1462,1472,1482にプログラムされる。プログラミングスピードに基づく減速措置が高速プログラミング記憶素子に適用され得るが、低速プログラミング記憶素子には適用されない。実施例6別の実施態様は、図14A,15A,15B1/15C1,15B2/15C2,15D,14H,14Iのシーケンスを含む。第1段階において、プログラミングスピードデータは得られない。第2段階において、下位状態及び上位状態の記憶素子の両方のためにプログラミングスピードデータが得られ、第2段階の残りの部分及び第3段階全体においてプログラミングスピードに基づく減速措置が高速プログラミングの下位状態及び上位状態の記憶素子に適用される。図15Aは、変更態様の3段階プログラミング動作の第1段階におけるプログラミングを示しており、ここでは、8レベルメモリデバイスにおける全ての記憶素子が消去状態にあるものである。開始点は、図14Aの消去されたEr状態分布1400の分布である。上位状態の記憶素子がVvLMを用いて中間分布1545にプログラムされる。図15B1から15B2への遷移は典型的には図15C1から15C2への遷移の前に生じる。同様に図15B1の状態も典型的には図15C1の状態の前に生じる。図15B1及び15C1は明確化のために別々に示されている。同様に、図15B2及び15C2も明確化のために別々に示されている。下位状態の記憶素子の読み出しレベルVvlを用いて得られ、かつ、上位状態の記憶素子のプログラミングスピードデータが読み出しレベルVvhを用いて得られる。図15B1及び15B2は下位状態の記憶素子に関する遷移を示し、図15C1及び15C2は上位状態の記憶素子に関する遷移を示す。図15B1は、図15Aの状態の後に続く、変更態様の3段階プログラミング動作の第2段階におけるプログラミングを示しており、ここでは、最小数の下位状態記憶素子がVth>VvaLを有するものである。分布1502において、領域1504はVth>VvaLの下位状態記憶素子を表す。一旦、最小数の下位状態の記憶素子がVvaLに到達すると、計数が開始され、付加的なプログラムパルス毎に増加される。第2段階は比較的大きなVpgmステップサイズを使用することができる。図15B2は、図15B1条件の後に続く、付加的な数のk1個のプログラムパルスが印加された後の変更態様の3段階プログラミング動作の第2段階における状態を示しており、ここでは、Vv1の読み出しレベルを用いて、高速プログラミング及び低速プログラミングの下位状態の記憶素子が識別されるものである。k1個の付加的なプログラムパルスの計数が完了すると、Vth分布1506は、低速プログラミング及び高速プログラミングの下位状態の記憶素子のためにそれぞれ領域1507、1508を含む。分布1520は、VvaLに到達したことを検証されたA状態の一部の記憶素子を表す。分布1520における記憶素子は、自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標A状態に到達したからであることに留意されたい。Vvlは下位読み出しレベルである。プログラミングスピードに基づく減速措置は、高速プログラミング及び低速プログラミングの下位状態の記憶素子がVvlの読み出しレベルを用いて識別されるまで印加されていない。この時点で、下位状態の記憶素子例えばA状態の記憶素子のプログラミングスピードデータがデータラッチに保存される。データラッチ内のプログラミングスピードデータを使用し、プログラミングスピードに基づく減速措置がこの段階の残りの間、下位状態の記憶素子に適用され得る。高速プログラミングの下位状態の記憶素子にはプログラミングスピードに基づく減速措置が課されるが、低速プログラミングの下位状態の記憶素子には課されずに、プログラミングは続き得る。図15C1は、図15Aの条件の後に続く、変更態様の3段階プログラミング動作の第2段階におけるプログラミングを示しており、ここでは、最小数の上位状態の記憶素子がVth>VvdLを有するものである。分布1543は、中間LM状態1542から上位状態の記憶素子をプログラミングすることによって到達する。分布1543において、領域1544は、Vth>VvdLである上位状態の記憶素子を表す。VvdLは、上位状態のうち最も低い状態の検証レベルである。他の検証レベルを用いることもできる。一旦、最小数の上位状態の記憶素子がVvdLに到達すると、計数が開始され、付加的なプログラムパルス毎に増加される。図15C2は、図15C1の後に続く、付加的な数のk2個のプログラムパルスが印加された後の変更態様の3段階プログラミング動作の第2段階における状態を示しており、ここでは、高速プログラミング及び低速プログラミングの上位状態の記憶素子がVvhの読み出しレベルを用いて識別されるものである。k2個の付加的なプログラムパルスの計数が完了するとVth分布1548は、低速プログラミング及び高速プログラミングの上位状態の記憶素子のために、それぞれ領域1545、1546を含む。分布1547は、VvbLに到達したことを検証されたD状態の一部の記憶素子を表す。分布1547における記憶素子は、自動的に高速の記憶素子であり、なぜならそれらは残りの記憶素子よりも早く目標D状態に到達したからであることに留意されたい。Vvhは上位読み出しレベルである。k1及びk2は、異なるカウンターが下位状態及び上位状態の記憶素子のプログラミングスピードを判定するために使用され得ることを表すことに留意されたい。簡略化のために、k1はk2と同じ値に設定することができる。プログラムパルスの数に関わらず、計数の開始時は異なり得ることに留意されたい。すなわち、計数の開始をトリガする図15B1及び15C1の条件は、異なる時期に生じうる。図15Dは、図15C1及び図15C2の状態の後に続くプログラミングを示しており、ここでは、変更態様の3段階プログラミング動作の第2段階が完了している。図15B2の下位状態分布1506及び図15C2の上位状態分布1548が繰り返される。この時、下位状態及び上位状態の記憶素子の両方のプログラミングスピードが分かっている。プログラミングスピードに基づく減速措置が高速プログラミングの下位状態の記憶素子に課されるが、低速プログラミングの下位状態の記憶素子には課されずに、プログラミングは分布1506の下位状態の記憶素子がA状態分布1520、B状態分布1530、又はC状態分布1540に遷移するように続く。同様に、プログラミングスピードに基づく減速措置が高速プログラミングの上位状態の記憶素子に課されるが、低速プログラミングの上位状態の記憶素子には課されずに、プログラミングは分布1548の上位状態の記憶素子がD状態分布1550,E状態分布1560,F状態分布1570,及びG状態分布1580に遷移するように続く。図15Dのいくつかの実施形態において、下位状態の記憶素子のVthの遷移は、典型的には、上位状態の記憶素子のVthの遷移よりも前に生じることに留意されたい。図15Eは、図15Dの状態の後に続くプログラミングを示しており、ここでは、変更態様の3段階プログラミング動作の第3段階が完了している。この段階において、プログラミングスピードに基づく減速措置は、高速プログラミングの下位状態及び上位状態の記憶素子には課されるが、低速プログラミングの下位状態及び上位状態の記憶素子には課されない。遷移は、検証レベルVva,Vvb,Vvc,Vvd,Vve,Vvf及びVvgを用いて、それぞれA状態分布1522、B状態分布1532、C状態分布1542,D状態分布1552,E状態分布1562,F状態分布1572及びG状態分布1582になされる。一又は複数の他のワードラインがプログラムされるとき、下位検証レベルでのVth分布は容量結合及びその他の干渉効果によって広がり得ることに留意されたい。図16A1は、2ビット記憶素子のための、多段階プログラミング動作に使用されるそれぞれのビットラインのためのデータラッチを示す。例示的なビットラインBLi-2,BLi-1,BLi,BLi1及びBLi2が描かれている。1個の記憶素子につき4レベルの2ビットの実施形態において、第1セットのラッチLDL1600、第2セットのラッチUDL1610、第3セットのラッチDL11620、第4セットのラッチDL21630,及び第5セットのデータラッチDL31640が提供される。場合においては、全てのラッチが必要というわけではない。一のビットラインに関連するラッチは、このビットラインの複数の異なる記憶素子によって共有される。多段階プログラミング動作は、ワードラインを前後する順に行われ、ラッチ内の情報を維持するために手当が必要である。プログラミング中、LDL及びUDLが、プログラムされるべきユーザデータを記憶するために使用される一方、DL1,DL2及びDL3ラッチがプログラミングスピードデータを記憶するために使用され得る。図16A2は、3ビット記憶素子のための、多段階プログラミング動作に使用されるそれぞれのビットラインのためのデータラッチを示す。この場合において、1セットのラッチUDL11612が上位の下位ページビットすなわち中間ページビットを記憶し、1セットのラッチUDL21614が上位の上位ページビットを記憶する。図16B~16Eにおいて、ラッチの使用について記載されており、図10A~15Eに関して記載された実施例1~5を含む先の実施例と一致している。符号wは、プログラミング段階においてプログラミングスピードデータがラッチに書き込まれて例えば記憶されていることを示し、rはプログラミング段階においてプログラミングスピードデータが各プログラムパルスの前にラッチから読み出され、プログラミング段階において減速措置を課すために使用されることを示し、mは、プログラミングスピードデータがラッチに維持され、プログラミング段階例えば、別のワードラインがプログラム中のときにおいて書き込みがされず、又読み出しもされないことを示し、rstは、プログラミング段階の終わりでリセットされることを示し、xは、プログラミングスピードデータがラッチ内に記憶されないこれは、このラッチが空であり、他のデータ記憶又は他の目的のために使用可能であることを意味することを示す。例えば、ステップ3における図16D2の符号WLn上位/下位r,rst/w,r,rstは、対応するプログラミング段階がラッチからプログラミングスピードデータを読み出すことを含むことを示し、このラッチは、最初、上位目標データ状態を有するWLnの記憶素子に関連するものである。後に、プログラミング段階において、下位目標データ状態に属する記憶素子のためにプログラムスピード情報が得られ、書き込み動作は、この情報でラッチをアップデートするためにデータラッチにおいて行われる。後続するプログラムパルスのために、上位目標データ状態及び下位目標データ状態の両方に属する記憶素子のプログラムスピード情報を得るためにデータラッチが読み出される。最後に、プログラミング段階の終わりにラッチはリセットされる。図16B~16Eにおいても、各ステップは、図に示された特定のWLワードラインのプログラミング段階に対応する。図16Bは、実施例1のためのデータラッチに記憶されたデータを示す。ステップは、図7Aに示されたステップ数を指す。ステップ1において、WLnのための下位ページ及び上位ページのデータを、使用されるプログラミングの種類に依って、LDL及びUDL等のラッチ内に記憶することができ、及び/又はキャッシュに入れることができる。データの上位及び下位ページの記憶に関する具体的詳細は、任意の適切な技術を使用することができるため記載しない。WLnの全ての状態のプログラミングスピードデータがDL1に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ2において、WLn1の全ての状態のプログラミングスピードデータがDL2に書き込まれ、後続する各プログラムパルスにおいて読み出される。この間、DL1内のデータは単に維持される。ステップ3は、ラッチデータを変更することはなく、DL1は各プログラムパルスの前に読み出され、プログラミング段階の終わりにてリセットされる。ステップ4において、DL1は、WLn2の全ての状態のプログラミングスピードデータが書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ5において、DL2は、WLn1の全ての状態のプログラミングスピードデータを得るために、各プログラムパルスの前に読み出される。ステップ5の終わりにて、WLn1はプログラミングを終了し、よって、WLn2に属する記憶素子のプログラムスピード情報はもはや必要ではない。よって、DL2は、WLn2のプログラミングの終わりにてリセットされる。プログラミングスピードデータは、このデータが判定されるか読み出されるとすぐに記憶素子に適用される。図16C1は、実施例2のためのデータラッチに記憶されたデータを示す。このステップは図7Bに示されたステップ数を指す。ステップ1において、WLnの上位状態のプログラミングスピードデータがDL1に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ2において、WLn1の上位状態のプログラミングスピードデータがDL2に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ3はラッチデータを変更せず、WLnの上位状態のプログラミングスピードデータを得るためにDL1が各プログラムパルスの前に読み出される。ステップ4において、WLn2の上位状態のプログラミングスピードデータがDL3に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ5において、WLn1の上位状態のプログラミングスピードデータを得るために、DL2が各プログラムパルスの前に読み出される。ステップ6において、WLnの上位状態のプログラミングスピードデータを得るために、DL1が各プログラムパルスの前に読み出される。ステップ6の終わりにて、WLnはプログラミングを終え、よってDL1がリセットされる。ステップ7において、WLn3の上位状態のプログラミングスピードデータがDL1において書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ8において、WLn2の上位状態のプログラミングスピードデータを得るために、DL3が各プログラムパルスの前に読み出される。ステップ9において、WLn1の上位状態のプログラミングスピードデータを得るために、DL2が各プログラムパルスの前に読み出される。ステップ9の終わりにて、WLn1はプログラミングを終え、よってDL2がリセットされる。図16C2は、図16C1の変更態様を示しており、ここでは、第3段階においてプログラミングスピードデータが適用されないものである。この場合において、DL3は必要ではない。図16C1との違いは、ステップ4において、WLn2の上位状態のプログラミングスピードデータがDL1DL3の代わりにに書き込まれ、ステップ7において、WLn3の上位状態のプログラミングスピードデータがDL2DL1の代わりにに書き込まれることである。更に、ステップ8の終わりにて、DL1をリセットすることができ、なぜなら、WLn2のプログラミングスピードデータはもはや必要ではないからである。同様に、DL1及びDL2は、それぞれステップ3、ステップ5の終わりにてより早くリセットされ得る。図16C3は、実施例2Aのためのデータラッチに記憶されたデータを示す。ステップは図7Aに示されたステップ数を指す。ステップ1において、WLnの上位状態の記憶素子のプログラミングスピードデータがDL1に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ2において、WLn1の上位状態の記憶素子のプログラミングスピードデータがDL2に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ3はラッチデータを変更せず、WLnの上位状態のプログラミングスピードデータを得るためにDL1が各プログラムパルスの前に読み出される。ステップ3の終わりにて、WLnはプログラミングを終え、よってDL1がリセットされる。ステップ4において、WLn2の上位状態の記憶素子のプログラミングスピードデータがDL1に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ5において、WLn1の上位状態のプログラミングスピードデータを得るために、DL2が各プログラムパルスの前に読み出される。ステップ5の終わりにて、WLn1がプログラミングを終え、よってDL2がリセットされる。図16D1は、実施例3又は5のためのデータラッチに記憶されたデータを示す。ステップは図7Bに示されたステップ数を指す。ステップ1において、WLnの上位状態のプログラミングスピードデータがDL1に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ2において、WLn1の上位状態のプログラミングスピードデータがDL2に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ3において、WLnの下位状態のプログラミングスピードデータがDL1に書き込まれ、DL1が各プログラムパルスの前に読み出され、プログラミング段階において最初にWLnの上位状態のプログラミングスピードデータを得て、後に、WLnの上位状態及び下位状態の両方ためのプログラミングスピードデータを得る。ステップ4において、WLn2の上位状態のプログラミングスピードデータがDL3に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ5において、WLn1の下位状態のプログラミングスピードデータがDL2に書き込まれ、DL2が各プログラムパルスの前に読み出され、プログラミング段階において最初にWLn1の上位状態のプログラミングスピードデータを得て、後に、WLn1の上位状態及び下位状態のプログラミングスピードデータを得る。ステップ6において、DL1が各プログラムパルスの前に読み出され、WLnの上位状態及び下位状態のプログラミングスピードデータを得る。ステップ6の終わりにて、WLnはプログラミングを終え、よってDL1がリセットされる。ステップ7において、WLn3の下位状態のプログラミングスピードデータがDL1に書き込まれ、後続する各プログラムパルスにおいて読み出される。ステップ8において、WLn2の下位状態のプログラミングスピードデータがDL3に書き込まれ、DL3が各プログラムパルスの前に読み出され、プログラミング段階において最初にWLn2の高い状態のためにプログラミングスピードデータを得て、後に、WLn2の上位状態及び下位状態のプログラミングスピードデータを得る。ステップ9において、DL2が各プログラムパルスの前に読み出され、WLn1の上位状態及び下位状態のプログラミングスピードデータを得る。ステップ9の終わりにて、WLn1はプログラミングを終え、よってDL2がリセットされる。図16D2は、図16D1の変更態様を示しており、ここでは、第3段階においてプログラミングスピードデータが適用されないものである。この場合において、DL3は必要ではない。図16D1との違いは、ステップ4において、WLn2の上位状態のプログラミングスピードデータがDL1DL3の代わりにに書き込まれ、ステップ7において、WLn3の上位状態のログラミングスピードデータがDL2DL1の代わりにに書き込まれることである。更に、ステップ5の終わりにて、DL2をリセットすることができ、なぜなら、WLn1のプログラミングスピードデータはもはや必要ではないからであり、かつ、ステップ8の終わりにて、DL1をリセットすることができ、なぜなら、WLn2のプログラミングスピードデータはもはや必要ではないからである。同様に、DL1は、ステップ3の終わりにてより早くリセットされ、なぜなら、WLnのプログラムスピードデータはもはや必要ではないからである。図16Eは、実施例4又は6のためのデータラッチに記憶されたデータを示す。ステップは図7Bに示されたステップ数を指す。ステップ1及び2は、どのプログラミングスピードデータの書き込みも読み込みも含まない。ステップ3において、まず下位状態のプログラミングスピードデータがDL1に書き込まれ、その後WLnの上位状態のプログラミングスピードデータがDL1に書き込まれ、DL1は後続する各プログラムパルスにおいて読み出される。ステップ4において、DL1内のプログラミングスピードデータは維持される。ステップ5において、まず下位状態のプログラミングスピードデータがDL2に書き込まれ、後にWLn1の上位状態のプログラミングスピードデータがDL2に書き込まれ、DL2は後続する各プログラムパルスにおいて読み出される。ステップ6において、DL1が各プログラムパルスの前に読み出され、WLnの下位状態及び上位状態のプログラミングスピードデータを得る。ステップ6の終わりにて、DL1をリセットすることができ、なぜならWLnの全てのプログラミングが完了したため、WLnのプログラミングスピードデータはもはや必要ではないからである。一般に、一のワードラインのためのプログラミングスピードデータを記憶するラッチは、このワードラインがプログラミングを完了するかプログラミングスピードデータをもはや必要としなくなった場合にリセットされ得る。ステップ7において、DL2内のプログラミングスピードデータが維持される。ステップ8において、まず下位状態のプログラミングスピードデータがDL1に書き込まれ、その後WLn2の上位状態のプログラミングスピードデータがDL1に書き込まれ、DL1は後続する各プログラムパルスにおいて読み出される。ステップ9において、DL2が各プログラムパルスの前に読み出され、WLn1の下位状態及び上位状態のプログラミングスピードデータを得る。ステップ9の終わりにて、WLn1はプログラミングを終え、よってDL2がリセットされる。実施例4及び図16Eにおいて、以下のステップがラッチに対して行われることに留意されたい。ステップ1:プログラミングの開始ステップ3は、複数の異なる部分3a~3dを含む。部分3a:下位状態の記憶素子のプログラミングスピードデータを得る。この情報は、ラッチこの例においてDL1に保存される。これは一書き込み動作である。部分3b:後続するプログラミングにおいて各プログラムパルスの前にラッチからプログラミングスピードデータを読み出す。そして、読み出された情報に基づき、後続するプログラミングのために下位状態の高速の記憶素子に減速措置を適用する。これは一読み出し動作である。部分3c:後に、同じプログラミング段階において、上位状態の記憶素子のプログラミングスピードデータを得る。この情報が同じ1セットのラッチDL1に加えられ、よってラッチはアップグレードされる。今、我々は全ての記憶素子のための統合されたプログラミングスピードデータを有する。これは別の書き込み動作である。部分3d:後続するプログラミングにおいて、各プログラムパルスの前にラッチからプログラミングスピードデータを読み出す。そして、読み出された情報に基づき、後続するプログラミングのために下位状態及び上位状態の記憶素子のうち高速の記憶素子に減速措置を適用する。これは一読み出し動作である。ステップ6は部分6a及び6bを含む。部分6a:プログラミング段階において、各プログラムパルスの前にラッチからプログラミングスピードデータを読み出す。そして、読み出された情報に基づき、後続するプログラミングのために下位状態及び上位状態の記憶素子のうち高速の記憶素子に減速措置を適用する。これは一読み出し動作である。部分6b:WLnのための多段階プログラミング動作の終わりにてラッチをリセットする。次に、最終プログラミング段階においてプログラミングスピードデータを破棄するためのオプションを記載する。図16C2及び16D2に関して説明したように、ラッチの数を減らすために例えば1ビットラインにつき1ラッチ、最終プログラミング段階例えば、3段階プログラミング動作の第3段階においてプログラミングスピードデータを破棄することが可能である。この場合において、最終段階の前にプログラミングスピードデータが一又は複数の先のプログラミング段階において適用される。多くの場合において、これはなお著しい利益を産む。更に、Vsgdのレベルは、最終段階よりも先のプログラム段階例えば第2段階のほうがより高くなり得る。これは、Vsgdがより高くなるとより高いビットラインバイアスを使用することができ、SGDトランジスタへの不必要なストレスを回避し、かつ電力消費を減らすように、現在の状態に合わせて最適化することができる点で有用である。例えば、先の段階は付加的なビットラインバイアスを使用することができ、この付加的なビットラインバイアスは、プログラミングスピードに基づくものではなく、例えば、記憶素子のVthが目標データ状態の下位検証レベルと上位検証レベルの間に場合に適用されるか、プログラミング段階全体を通して適用されるか、又は他の時期に適用されるものである。これは、プログラミングスピードに基づく減速措置に加えて実施することができる付加的な減速措置である。例えば図10Aを参照すると、A状態の目標状態を備える記憶素子のために、この記憶素子のVthがVvaLとVvaの間にある場合に付加的なビットラインバイアスが印加され得る。この付加的なビットラインバイアスは、高速プログラミング記憶素子に印加されるプログラミングスピードに基づくバイアスに加えられる。低速プログラミング記憶素子に対しては、付加的なビットラインバイアスのみが使用される。例えば、プログラミングスピードに基づくバイアスは0.7Vとし、付加的なビットラインバイアスは0.5Vとすることができる。よって、0.5Vのビットラインバイアスを低速プログラミング記憶素子に印加することができ、1.2Vのビットラインバイアスを高速プログラミング記憶素子に印加することができる。これらのビットラインバイアスは、まだロックアウトされていないビットラインに印加される。ロックアウトビットラインバイアスは2~3Vでよい。その後、最終段階において、プログラミングスピードに基づくバイアスは使用されないが、付加的なビットラインバイアスが使用される。例えば、0.5Vのビットラインバイアスを、プログラムされる記憶素子に印加することができる。異なる段階においてVsgdのレベルを調整することによって、メモリデバイスの性能を最適化することができる。Vblは、Vsgdドレイン側選択ゲートマージン領域によって制限されるため、高くなりすぎることはない。もしVblが高すぎる場合、ドレイン側選択ゲートをオンするのに必要な、又は導通するのに必要なVsgdレベルは過剰に高くなる。具体的には、選択NANDストリングが高Vblを通すのに十分に高いVsgdレベルは、非選択の禁じられたNANDストリングがドレイン側選択ゲートを非導電状態に維持するのには高すぎる可能性がある。しかしながら、共通のVsgdが選択及び非選択の全てのビットラインのために使用される。ドレイン側選択ゲートを非導電状態に維持することは、非選択ビットライン及びNANDストリングのために望ましく、なぜならこれは、非選択NANDストリングの基板におけるチャネルがブーストレベル選択NANDストリングのプログラミングの間、非選択NANDストリングの非選択記憶素子のプログラミングを禁じるものであるを維持できるようにするからである。もしドレイン側選択ゲートが導電状態になると、禁止されたチャネル内のブースト電位は漏れ出し、これは禁じられた記憶素子へのプログラムディスターブをもたらし得る。Vblを通すのに十分高いVsgdレベルは、aVsgd≧VblVthsgdマージンであり、ここで、VthsgdはSGDトランジスタの閾値電圧であり、マージンは幾分かの付加的な小さな安全マージンである。一方、チャネルを遮断し、Vblを通さないように十分低いVsgdレベルは、bVsgd≦VblVthsgd-マージンである。条件aは、選択ビットラインのために満たされるべきであり、条件bは非選択ビットラインのために満たされるべきである。これら2つの条件の組み合わせは、Vsgd値が最適なプログラミングを有するように設定されるべきVsgdマージン領域をもたらす。例えば、Vthsgd=1V及びマージン=0.2Vであると仮定する。先のプログラミング段階において、我々は0.7Vのプログラミングスピードに基づくバイアスを印加し、かつ0.5Vの付加的なビットラインバイアスを印加する。Vbl=1.2Vを有する選択ビットラインのために、条件aは、Vsgd≧1.2V1V0.2V、又はVsgd≧2.4Vである。条件bは、Vsgd≦Vbl1V-0.2V、又はVsgd≦Vbl0.8Vである。例えば選択ビットラインのためにVsgd=2.4Vである場合、条件aが満たされ、かつ非選択ビットラインのためにVbl≧1.6である場合に条件bが満たされる。これらの条件は妥当なものであり、なぜならVsgdは高すぎることはないからである。最終プログラミング段階において、我々は0.5Vの付加的なビットラインバイアスを印加するが、0.7Vのプログラミングスピードに基づくバイアスは印加しない。Vbl=0.5Vを有する選択ビットラインのために、条件aは、Vsgd≧0.5V1V0.2V、又はVsgd≧1.7Vである。条件bは、Vsgd≦Vbl1V-0.2V、又はVsgd≦Vbl0.8Vである。例えば選択ビットラインのためにVsgd=1.7Vである場合、条件aが満たされ、かつ非選択ビットラインのためにVbl≧1.0である場合に条件bが満たされる。やはり、これらの条件は妥当なものであり、なぜならVsgdは高すぎることはなく、かつ必要以上に高くはないからであり、よってSGDトランジスタへの不必要なストレスが避けられる。同様に、電力消費量も抑えられる。説明したビットラインバイアス値は例にすぎない。従って、この技術は、多段階プログラミング動作の1段階例えば曖昧なfoggy段階を実行することを含むことができ、これは以下を含む。a低速プログラミング不揮発性記憶素子から高速プログラミングの不揮発性記憶素子を識別する識別ステップと、bこの識別に応答し、i高速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続し、低速プログラミングスピードに基づく減速措置を課すために関連するビットライン電圧を第1のゼロ以外のビットラインレベル例えば0.7Vのプログラミングスピードに基づくバイアス及び0.5Vの付加的なビットラインバイアスの合計に設定するステップと、ii低速プログラミング不揮発性記憶素子のうちの少なくともいくつかの不揮発性記憶素子のプログラミングを継続し、関連するビットライン電圧を第1のゼロ以外のビットラインレベルより低い第2のゼロ以外のビットラインレベル例えば0.5Vの付加的なビットラインバイアスに設定するステップと、iii第1コントロールゲートレベル例えば2.4Vにて不揮発性記憶素子に関連するドレイン側選択ゲートの共通のコントロールゲート電圧を設定するステップである。更に、この技術は、1段階において関連する検証レベルに到達する高速プログラミング不揮発性記憶素子の少なくともいくつかのため及び低速プログラミング不揮発性記憶素子の少なくともいくつかのために、関連するビットライン電圧を第1ビットラインレベルより大きいロックアウトレベル例えば2.5-3Vに引き上げる。次の段階例えば細かい段階finephaseを実行することを更に含み、この次の段階は、関連するビットライン電圧を第1ビットラインレベルより低いゼロ以外のレベル例えば0.5Vの付加的なビットラインバイアスに設定し、選択ゲートの共通のコントロールゲート電圧を第1コントロールゲートより低い第2コントロールゲートレベル例えば1.7Vに設定して、高速不揮発性記憶素子及び低速不揮発性記憶素子のプログラミングを継続する継続ステップを含む。この技術は、少なくともいくつかの高速プログラミング不揮発性記憶素子のため及び次の段階において関連する検証レベルに到達する少なくともいくつかの低速プログラミング不揮発性記憶素子のために関連するビットライン電圧をロックアウトレベルに引き上げるステップを更に含む。実施形態において、1段階FOGGY及び次の段階FINEを含む多段階プログラミング動作を用いて1セットの不揮発性記憶素子155をプログラミングするための方法が提供される。1セットの不揮発性記憶素子のうち目標ワードラインWLnの不揮発性記憶素子のために、前記1段階FOGGYを実行するステップを含み、このステップは、a低速プログラミング不揮発性記憶素子から目標ワードラインの高速プログラミング不揮発性記憶素子を識別する識別ステップを含む。この方法は更に、bこの識別に応じ、i目標ワードラインの低速プログラミング不揮発性記憶素子から目標ワードラインの高速プログラミング不揮発性記憶素子を識別するプログラミングスピードデータを第1セットのラッチ内に保存するステップと、ii後続する各プログラムパルスの前に第1セットのラッチを読み出すステップと、iii読み出された情報に基づいて、プログラミングスピードに基づく減速措置を課して目標ワードラインの少なくともいくつかの高速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、ivプログラミングスピードに基づく減速措置を課すことなく、目標ワードラインの少なくともいくつかの前記低速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、を含む。前記方法は更に、1セットの不揮発性記憶素子において、別のワードラインWLn1の不揮発性記憶素子のためにプログラミング動作を実行するステップを含む。この方法は更に、前記次の段階FINEの間、前記第1セットのラッチ内の前記プログラミングスピードデータに応じて、プログラミングスピードに基づく減速措置を課して前記目標ワードラインの前記高速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、第1セットのラッチ内の前記プログラミングスピードデータに応じて、プログラミングスピードに基づく減速措置を課すことなく、前記目標ワードラインの前記低速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、を含む。対応する不揮発性記憶装置は、1セットの不揮発性記憶素子と、この1セットの不揮発性記憶素子に関連付けられており、目標ワードラインを含むワードラインと、一又は複数の制御回路とを含む。一又は複数の制御回路は上記の方法のステップを実行する。あるいは、この装置は上記方法のステップを実行する手段を含むことができる。別の実施形態において、1段階LM、次の段階FOGGY、及び次の次の段階FINEを含む多段階プログラミング動作を用いて1セットの不揮発性記憶素子をプログラミングするための方法が提供される。この方法は、1セットの不揮発性記憶素子のうちの目標ワードラインの不揮発性記憶素子のために、1段階LMを実行するステップを含み、このステップは、少なくとも一つの下位目標データ状態A;A,B,Cの不揮発性記憶素子が消去状態を維持したまま、プログラミング上位目標データ状態B,C;D,E,F,Gを有する不揮発性記憶素子を消去状態から、上位目標データ状態の検証レベルより低い中間検証レベルVvLMを有する中間分布にプログラミングするステップを含む。この方法は更に、第1セットの検証レベルVvaL,VvbL,VvcL;VvaL,VvbL,VvcL,VvdL,VveL,VvfL,VvgLを使用して次の段階FOGGYを実行するステップを含み、このステップは、a少なくとも一つの下位目標データ状態を有する不揮発性記憶素子のうち、低速プログラミング不揮発性記憶素子から高速プログラミング不揮発性記憶素子を識別する識別ステップと、bこの識別に応じて、i少なくとも一つ下位目標データ状態を有する低速プログラミング不揮発性記憶素子から、少なくとも一つ下位目標データ状態を有する高速プログラミング不揮発性記憶素子を識別するプログラミングスピードデータを第1セットのラッチ内で保存するステップと、ii後続する各プログラムパルスの前に第1セットのラッチを読み出すステップと、iiiこの読み出された情報に基づいて、プログラミングスピードに基づく減速措置を課して少なくとも一つの下位目標データ状態を有する高速プログラミング不揮発性記憶素子のうち少なくともいくつかの不揮発性記憶素子のプログラミングを継続するステップと、ivプログラミングスピードに基づく減速措置を課すことなく、少なくとも一つの下位目標データ状態を有する低速プログラミング不揮発性記憶素子のうち少なくともいくつかの不揮発性記憶素子のプログラミングを継続するステップと、c上位目標データ状態を有する不揮発性記憶素子のプログラミングを継続するステップと、を含む。前記方法は更に、第2セットの検証レベルVva,Vvb,Vvc;Vva,Vvb,Vvc,Vvd,Vve,Vvf,Vvgのうち関連する検証レベルを使用して次の次の段階FINEを実行するステップを含み、ここで、第2セットの検証レベルの各検証レベルは、第1セットの検証レベルの対応する検証レベルよりも高く、前記ステップは、d各プログラムパルスの前に第1セットのラッチを読み出すステップと、この読み出された情報に基づき、第1セットのラッチ内のプログラミングスピードデータに応じて、プログラミングスピードに基づく減速措置を課して少なくとも一つの下位目標データ状態を有する高速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、プログラミングスピードに基づく減速措置を課すことなく、少なくとも一つの下位目標データ状態を有する低速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、e上位目標データ状態を有する不揮発性記憶素子のプログラミングを継続するステップと、を含む。対応する不揮発性記憶装置は、1セットの不揮発性記憶素子と、目標ワードラインを含む、1セットの不揮発性記憶素子に関連づけられたワードラインと、一又は複数の制御回路とを含む。一又は複数の制御回路は、上記の方法のステップを実行する。あるいは、前記装置は、上記の方法のステップを実行する手段を含むことができる。別の実施形態において、1段階FOGGY及び次の段階FINEを含む多段階プログラミング動作を使用して1セットの不揮発性記憶素子をプログラミングする方法が提供される。この方法は、1セットの不揮発性記憶素子のうち目標ワードラインの不揮発性記憶素子のために、前記1段階FOGGYを実行するステップを含み、このステップは、a低速プログラミング不揮発性記憶素子から高速プログラミング不揮発性記憶素子を識別する識別ステップと、及びbこの識別に応じて、i目標ワードラインの低速プログラミング不揮発性記憶素子から目標ワードラインの高速プログラミング不揮発性記憶素子を識別するプログラミングスピードデータを第1セットのラッチ内に保存するステップと、ii各プログラムパルスの前に第1セットのラッチを読み出し、iiiこの読み出された情報に基づき、プログラミングスピードに基づく減速措置を課すために、関連するビットライン電圧を第1のゼロ以外のビットラインレベル例えば1.2Vに設定して少なくともいくつかの高速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、iv第1のゼロ以外のビットラインレベルよりも低い第2のゼロ以外のビットラインレベル0.5Vに関連するビットライン電圧を設定して少なくともいくつかの低速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、iii第1コントロールゲートレベル例えば2.4Vにて不揮発性記憶素子に関連付けられたドレイン側選択ゲートの共通のコントロールゲート電圧を設定するステップと、を含む。前記方法は、前記1段階において関連する検証レベルに到達した少なくともいくつかの高速プログラミング不揮発性記憶素子及び少なくともいくつかの低速プログラミング不揮発性記憶素子のために、第1ビットラインレベルより高いロックアウトレベルに関連するビットライン電圧を引き上げるステップを含む。この方法は更に、次の段階FINEを実行するステップを含み、このステップは、各プログラムパルスの前に第1セットのラッチを読み出しつつ、高速の不揮発性記憶素子及び低速の不揮発性記憶素子のプログラミングを継続するステップと、この読み出された情報に基づき、第1ビットラインレベルよりも低いゼロ以外のレベルに関連するビットライン電圧を設定するステップと、前記第1コントロールゲートレベルよりも低い第2コントロールゲートレベル例えば1.7にて選択ゲートの共通のコントロールゲート電圧を設定するステップと、を含む。前記方法は更に、次の段階において関連する検証レベルに到達した少なくともいくつかの高速プログラミング不揮発性記憶素子及び少なくともいくつかの前記低速プログラミング不揮発性記憶素子のために、関連するビットライン電圧をロックアウトレベルに引き上げるステップを含む。対応する不揮発性記憶装置は、1セットの不揮発性記憶素子と、この1セットの不揮発性記憶素子に関連付けられ、かつ目標ワードラインを含むワードラインと、一又は複数の制御回路と、を含む。一又は複数の制御回路は、上記の方法のステップを実行する。あるいは、この装置は、前記上記の方法のステップを実行するための手段を含むことができる。別の実施形態において、1セットの不揮発性記憶素子のうち目標ワードラインの不揮発性記憶素子をプログラミングする方法が提供される。この方法は、aプログラミングパルスを目標ワードラインに印加するステップと、b特定数の不揮発性記憶素子が規定の検証レベルVvaL,Vvaに到達したときを判定するステップと、cこの特定数の不揮発性記憶素子が第1検証レベルに到達した後、プログラミングパルスの数m,kを計数するステップと、dこの計数の完了に応じて、規定の検証レベルVvaL,Vva又は別のより低いレベルVvlにて検出動作を実行することによって低速プログラミング不揮発性記憶素子から高速プログラミング不揮発性記憶素子を識別するステップと、eこの識別に応じて、目標ワードラインの低速プログラミング不揮発性記憶素子から目標ワードラインの高速プログラミング不揮発性記憶素子を識別するプログラミングスピードデータを第1セットのラッチ内に保存するステップと、f各プログラムパルスの前に1セットのラッチを読み出すステップと、この読み出された情報に基づいて、関連するプログラミングスピードに基づく減速措置を課して少なくともいくつかの高速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、プログラミングスピードに基づく減速措置を課すことなく、目標ワードラインの少なくともいくつかの低速プログラミング不揮発性記憶素子のプログラミングを継続するステップと、を含む。対応する不揮発性記憶装置は、1セットの不揮発性記憶素子と、1セットの不揮発性記憶素子に関連付けられており、目標ワードラインを含むワードラインと、一又は複数の制御回路と、を含む。一又は複数の制御回路は、上記の方法のステップを実行する。あるいは、この装置は、前記上記の方法のステップを実行するための手段を含むことができる。本明細書において提供された方法を実施するための対応する方法、システム、並びにコンピュータ若しくはプロセッサ可読の記憶デバイスが提供される。上記本発明の詳細な説明は、説明のための例示にすぎない。上記本発明の詳細な説明は、詳細に開示した範囲に限定するものではない。本明細書が開示する技術は、上記の教示に基づき様々に変形、変更し得る。上記説明した実施形態は、本発明の原理とその具体的な適用例をよく説明するために選ばれたものであり、当業者は、具体的な事例に則して本発明を様々に変更し得る。本発明の技術的範囲は、添付された特許請求の範囲によって定まるものである。"