"1セットの不揮発性記憶素子をプログラミングする方法であって、1セットのプログラムパルス1005,1010,...を前記1セットの不揮発性記憶素子155に印加するステップであって、ここにおいて、前記1セットの不揮発性記憶素子のうちの各不揮発性記憶素子は、ビットラインBL0,BL1,...に接続されており、前記1セットの不揮発性記憶素子は、複数の異なるサブセットの不揮発性記憶素子を含み、各サブセットは、複数の目標データ状態A,B,Cのうちの1つの目標データ状態の1つの検証レベルVva,Vvb,Vvcにそれぞれプログラムされ、各サブセットは、それぞれ、1つの目標データ状態の1つの検証レベルにそれぞれプログラムされる1サブセットの不揮発性記憶素子を含むことを特徴とするステップと、前記1セットのプログラムパルス中において、前記1サブセットの不揮発性記憶素子に対する第1のトリガ条件が満たされたときを判定するステップと、前記第1のトリガ条件が満たされたときに、前記1セットのプログラムパルスのうちの複数の連続するプログラムパルスの各プログラムパルスと足並みを揃えて、前記1サブセットの不揮発性記憶素子のうちのプログラミングからまだロックアウトされていない不揮発性記憶素子のそれぞれのビットラインの電圧Vblをステップアップするステップ、を含む方法。前記1セットの不揮発性記憶素子が、共通するワードラインWLnと導通しており、前記1セットのプログラムパルスが、前記共通するワードラインを介して前記1セットの不揮発性記憶素子に印加される、請求項1に記載の方法。前記第1のトリガ条件が、予め決められたプログラムパルス数に到達したときに基づいて満たされる請求項1又は2に記載の方法。前記第1のトリガ条件が、前記1サブセットのうちの少なくとも最小数の前記不揮発性記憶素子の閾値電圧が前記1つの検証レベルに到達したことが検証されたときに基づいて満たされる請求項1又は2に記載の方法。前記第1のトリガ条件は、前記1サブセットのうちの少なくとも最小数の前記不揮発性記憶素子の前記閾値電圧が前記1つの検証レベルに到達したことが検証され、その後、固定数のプログラムパルスを前記1セットの不揮発性記憶素子に印加したときに満たされる請求項4に記載の方法。前記第1のトリガ条件が満たされる前に、前記第1のトリガ条件に先立つ前記1セットのプログラムパルスの各プログラムパルス中における前記電圧を固定するステップを更に含む請求項1から5のいずれか一項に記載の方法。前記1サブセットの不揮発性記憶素子のうち、閾値電圧が前記1つの目標データ状態の第1の検証レベルと第2の検証レベルとの間にあり、プログラミングからまだロックアウトされていない不揮発性記憶素子に対して、付加的な固定量だけ前記電圧を上昇させるステップを更に含む請求項1から6のいずれか一項に記載の方法。前記1つの目標データ状態に関連付けられたステップサイズを用いて前記電圧がステップアップされ、ここで、複数の異なるステップサイズが、前記複数の目標データ状態のうちの少なくとも2つの異なる目標データ状態に関連付けられている請求項1から7のいずれか一項に記載の方法。前記電圧が、前記複数の連続するプログラムパルス中において、第1の割合R1でステップアップされ、次により高い第2の割合R2でステップアップされる請求項1から8のいずれか一項に記載の方法。前記電圧は、前記複数の連続するプログラムパルス中において、前記第2の割合の後にこれよりも低い第3の割合でステップアップされる請求項8に記載の方法。前記1セットのプログラムパルス中において、前記1サブセットの不揮発性記憶素子に対して第2のトリガ条件が満たされたときを判定するステップと、前記第2のトリガ条件が満たされたときに、前記1セットのプログラムパルスのうちの1つ又は複数の付加的なプログラムパルスの各プログラムパルス中において、前記電圧をロックアウトレベルVbl-lockoutより低く固定するステップ、を更に含む請求項1から10のいずれか一項に記載の方法。前記複数の異なるサブセットの不揮発性記憶素子は、前記1つの目標データ状態より高い別の目標データ状態の別の検証レベルにそれぞれプログラムされる別のサブセットの不揮発性記憶素子を含み、前記1セットのプログラムパルス中において、前記別のサブセットの不揮発性記憶素子に対する別のトリガ条件が満たされたときを判定するステップと、前記別のトリガ条件が満たされたときに、前記1セットのプログラムパルスのうち別の複数の連続するプログラムパルスの各プログラムパルスと足並みを揃えて、前記別のサブセットの不揮発性記憶素子のうちプログラミングからまだロックアウトされていない不揮発性記憶素子のビットラインの電圧をステップアップするステップであって、ここにおいて、前記第1のトリガ条件が満たされた後に前記別のトリガ条件が満たされることを特徴とするステップを更に含む請求項1から11のいずれか一項に記載の方法。前記第1のトリガ条件が満たされ、その後、固定数のプログラムパルスを前記1セットの不揮発性記憶素子に印加したときに基づいて、前記別のトリガ条件が満たされる請求項12に記載の方法。不揮発性記憶システムであって、1セットの不揮発性記憶素子155であって、複数の異なるサブセットの不揮発性記憶素子を含み、各サブセットは、複数の目標データ状態A,B,Cのうちの1つの目標データ状態の1つの検証レベルVva,Vvb,Vvcにそれぞれプログラムされ、1つの目標データ状態の1つの検証レベルにプログラムされる1サブセットの不揮発性記憶素子を含む1セットの不揮発性記憶素子と、各不揮発性記憶素子に接続されている各ビットラインBL0,BL1,...と、少なくとも1つの制御回路、を含み、前記少なくとも1つの制御回路が、a1セットのプログラムパルス1005,1010,...を前記1セットの不揮発性記憶素子に印加し、b前記1セットのプログラムパルス中において、前記1サブセットの不揮発性記憶素子に対する第1のトリガ条件が満たされたときを判定し、c前記第1のトリガ条件が満たされたときに、前記1セットのプログラムパルスのうちの複数の連続するプログラムパルスの各プログラムパルスと足並みを揃えて、前記1サブセットの不揮発性記憶素子のうちプログラミングからまだロックアウトされていない不揮発性記憶素子のそれぞれのビットラインの電圧Vblをステップアップする、不揮発性記憶システム。前記第1のトリガ条件が、前記1サブセットのうちの少なくとも最小数の前記不揮発性記憶素子の閾値電圧が前記1つの検証レベルに到達したことを検証されたときに基づいて満たされる請求項14に記載の不揮発性記憶システム。特に、メモリデバイスを小型化し、かつプログラミング時間を短縮する場合、この閾値電圧範囲を正確にプログラミングする技術が必要となる。閾値電圧範囲を正確にプログラムし、かつプログラミング時間を短縮する方法及び不揮発性記憶システムが提供される。プログラミング動作中に、プログラミング時間を短縮することと、複数の異なるデータ状態のために狭い閾値電圧範囲を成すこととの間には、二律背反の関係がある。プログラミングスピードは、より大きなプログラムパルスステップサイズを用いることによって高めることができる。しかしながら、この結果、検証レベルを超えて大きくオーバーシュートしてしまい、広い閾値電圧Vth範囲を生じてしまう。一方、より小さなプログラムパルスステップサイズが用いられる場合、プログラミング時間が増大する代わりに狭いVth範囲を成すことができる。別の手法は、二重検証方式において、記憶素子を各状態のために2つの別個の検証レベルにて検証することである。記憶素子のVthが下位検証レベルを越えると、そのプログラミングスピードはビットラインバイアスをかけることによって遅くなる。ビットラインバイアスがないと、記憶素子のVthは、プログラムパルスのステップサイズにほぼ等しい量だけ各プログラムパルスによって増加する。ビットラインバイアスがあると、記憶素子のVthはプログラムパルスのステップサイズより少ない量だけ各プログラムパルスによって増加する。よって、記憶素子は、そのVthが目標データ状態の下位検証レベルを越えると、減少したスピードでプログラムされ、Vthが目標データ状態の上位検証レベルを越えると、更なるプログラミングからロックアウトされる。二重検証方式において、各状態に対する下位検証レベルと上位検証レベルの間の距離が、シリコン基板上で最適化され、Vth分布が最も狭いところに設定される。下位検証レベルと上位検証レベルの間のギャップが大きすぎる場合、記憶素子のVthの増加は、安定した状態の値例えば、プログラムパルスステップサイズと同じに戻り、よって、二重検証方式の利益が実現されない。一方、下位検証レベルと上位検証レベルの間のギャップが小さすぎる場合、多くの記憶素子のVthが、1つのプログラムパルスにおいてこのギャップを飛び越え得るので、それらのプログラミングスピードは低下しない。一般に、最適ギャップはプログラムパルスステップサイズの関数である。より大きなプログラムパルスステップサイズは最適ギャップを増加させる傾向があるが、これは、Vthが各プログラムパルスによってより大きく跳ね上がるからである。よって、Vthがギャップを飛び越えないようにし、1つのプログラムパルスのみによって上位検証レベルを越えないことを確実にするためにより大きなギャップが必要とされる。更に、二重検証方式では、メモリデバイスが小型化されるにつれてプログラムのノイズがひどくなる。特定のプログラムパルスにおいて、大半の記憶素子のVthがプログラムパルスステップサイズにほぼ等しい量だけ跳ね上がったとしても、Vthの跳ね上がりがはるかに高い記憶素子はなお多く存在する。結果として、最適ギャップは異なる記憶素子間で異なり、最適化は困難である。これらの問題を解消するために、Vth分布幅を狭くするように大半の記憶素子のプログラミングを遅くすることを確実にするプログラミング技術が提供される。この手法において、特定の目標データ状態を有する記憶素子のためのビットライン電圧Vblが、一連のプログラムパルスある範囲の複数の連続するプログラムパルスによってステップアップされる。異なる範囲のプログラムパルスも、各目標データ状態のために使用することができるこれらの範囲は重複し得る。ビットライン電圧ステップアップは、大半の記憶素子がそれらの目標データ状態へのプログラミングの完了に近づいた一定時間内に行われ得る。この一定時間の間に、これらの記憶素子のVthの増加する速度は効果的に低下され、より狭いVth分布が実現される。更に、特定の目標データ状態にプログラム中の全ての記憶素子に対するビットライン電圧がステップアップされ、その目標状態に属する全ての記憶素子まだロックアウトされていないものに対するプログラミングが遅くなる。プログラミング技術のバリエーションには、固定されたビットラインステップの使用と、可変ビットラインステップの使用と、データ状態依存ビットラインステップの使用と、一又は複数のデータ状態に対してビットラインをステップアップしないオプションの使用と、ビットラインステップに付加的なビットラインバイアスを加えるオプションの使用とが含まれる。次に、より高速のプログラミングおよび電力消費の節減を可能にするために使用されうるメモリシステムの一例を説明する。図1は、1つの行/列デコーダと読み出し/書き込み回路とを利用する不揮発性記憶システムのブロック図である。図は、一実施例について、1ページの記憶素子を並列に読み出し又はプログラムするための読み出し/書き込み回路を有するメモリデバイス197を示す。メモリデバイス197は、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図2のプロセッサ192を含む、読み出し/書き込み回路165、コントローラ150などのいずれか1つまたは組合せを含みうる。センスブロック100は図2と関連付けてさらに説明する。別の実施形態において、不揮発性メモリシステムは、2つの行/列デコーダおよび読み出し/書き込み回路が使用される。様々な周辺回路によるメモリアレイ155へのアクセスは、アレイの反対側で対称的に実施され、したがって、アクセス線の密度および各辺の回路は半減される。そのため、行デコーダは2つの行デコーダに分割され、列デコーダは2つの列デコーダに分割される。同様に、読み出し/書き込み回路は、最下部からビットラインに接続する読み出し/書き込み回路と、アレイ155の最上部からビットラインに接続する読み出し/書き込み回路とに分割される。このようにして、読み出し/書き込みモジュールの密度は本質的に半分減少する。図2は、センスブロックの一実施形態を示すブロック図である。個々のセンスブロック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セットのデータラッチを設けることができ、QDL、UDL及びLDLによって特定される3つのデータラッチをセットごとに設けることができる。データラッチの使用については、特に図8a~図8f、図9、図10および図11a~図11cを参照しながら、以下でさらに詳述する。プロセッサ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ビットの状態が変化し、それに従ってアルゴリズムが変化する際に、グローバルステートマシーンは検出し得る。プログラム動作又は検証動作の間、プログラムされるべきデータ書き込みデータは、データバス120から複数のデータラッチ194~197内に記憶される。ステートマシン制御下のプログラム処理は、アドレス指定される記憶素子のコントロールゲートに加えられる、一連のプログラミング電圧パルスを伴う。各プログラミングパルスに続いて、リードバック検証によって、記憶素子が所望の状態にプログラムされたかどうかを判定する。いくつかの場合では、プロセッサ192は、所望のメモリ状態に対するリードバックメモリ状態を監視する。その2つが一致したとき、プロセッサ192は、プログラム禁止を指定する状態にビットラインを引き上げるように、ビットラインラッチ182を設定する。これにより、たとえプログラミングパルスがそのコントロールゲートに表れても、ビットラインに接続した記憶素子がさらにプログラミングされないようにすることができる。他の実施形態では、プロセッサが最初にビットラインラッチ182をロードし、センス回路が検証処理中にそれに禁止値を設定する。データラッチの各セット194~197は、各センスモジュールのデータラッチのスタックとして実装されてもよい。一実施形態では、センスモジュール180毎に3個のデータラッチが存在する。いくつかの実装形態では、データラッチは、シフトレジスタとして実装され、内部に記憶されたパラレルデータをデータバス120用にシリアルデータに変換したり、その逆を行ったりする。m個の記憶素子の読み出し/書き込みブロックに対応する全てのデータラッチを相互にリンクしてブロックシフトレジスタを構成し、シリアル転送によって、データのブロックを入力または出力できるようにする。特に、読み出し/書き込みモジュールの一群のデータラッチのそれぞれが、データバスへ或いはデータバスからデータを順に転送するように読み出し/書き込みモジュールのバンクを構成し、一群のデータラッチがあたかも読み出し/書き込みブロック全体のシフトレジスタの一部であるかのようにしてもよい。データラッチは、関連付けられた記憶素子がプログラミング動作中に特定の管理点に達した時期を特定する。例えば、ラッチは、記憶素子のVthが、a下位検証レベル例えば、図5におけるVvaLもしくはVvbL未満であることを高速プログラミングモードで、b下位検証レベル例えば、VvaLもしくはVvbLより高いが上位検証レベルもしくは目標検証レベル例えば、Vva、VvbもしくはVvc未満であることを低速プログラミングモードで、または、c上位検証レベルもしくは目標検証レベルより高いことを禁止モードで識別してもよい。データラッチは、記憶素子がページデータからの1つ以上のビットを現在記憶しているかどうかを示す。例えば、LDLラッチは、下位ページのデータを記憶する目的で使用することができる。LDLラッチは、関連付けられた記憶素子に下位ページビットが記憶されるときに、例えば0から1へと反転される。UDLラッチは、例えば、上位ページのデータを記憶する目的で使用することができる。UDLラッチは、関連付けられた記憶素子に上位ページビットが記憶されるときに反転される。反転は、関連付けられた記憶素子がプログラミングを完了するとき、例えば、記憶素子のVthがVva、VvbまたはVvcなどの目標検証レベルを超えるときに行われる。QDLラッチは、関連付けられた記憶素子が低速プログラミングモードにあるときに反転され得る。図3は、図1のメモリアレイ155におけるNANDフラッシュメモリセルのブロックを示す。メモリアレイは多数のブロックを含むことができる。各ブロック例300、310は、多数のNANDストリングと、ブロックで共有されるBL0、BL1、...といったそれぞれのビットラインとを含む。各NANDストリングは、一端でドレイン選択ゲートSGDに接続されており、ドレイン選択ゲートのコントロールゲートは、共通のSGDラインを介して接続されている。NANDストリングは、他端でソース選択ゲートに接続されており、ひいては、共通ソースライン320に接続されている。ソース選択ゲートとドレイン選択ゲートとの間には、WL0~WL63など、64本のワードラインが延在している。NANDフラッシュメモリに加え、他のタイプの不揮発性メモリを使用することもできる。例えば、フラッシュEEPROMシステムで有用な別のタイプのメモリセルは、導電性のフローティングゲートの代わりに非導電性の誘電素材を利用して不揮発的に電荷を蓄積する。導電性のコントロールゲートと、メモリセルチャネルの上方にある半導体基板の表面との間に、酸化ケイ素、窒化ケイ素および酸化ケイ素ONOで形成された3重の層誘電体が挟まれている。このセルは、セルチャネルから窒化物に電子を注入することによってプログラムされ、注入された電子は、限られた領域内で捕捉され、蓄積される。この蓄積された電荷はその後、検出可能な方法でセルのチャネルの一部分の閾値電圧を変える。このセルは、窒化物にホットホールを注入することによって消去される。ドープ処理したポリシリコンゲートが別々のセレクトトランジスタを形成するためにメモリセルチャネルの一部分を超えて延伸するスプリットゲート構成で同様のセルを設けることができる。別のアプローチでは、NROMセルが使用される。例えば、各NROMセルに2ビットが記憶され、このセルではONO誘電体層がソース拡散領域とドレイン拡散領域との間のチャネル全体に延伸する。一方のデータビットの電荷は、ドレインに隣接する誘電体層に限局され、もう一方のデータビットの電荷はソースに隣接する誘電体層に限局される。誘電体内で空間的に分離された電荷蓄積領域のバイナリ状態を別々に読み込むことにより、マルチステートのデータ記憶が得られる。他のタイプの不揮発性メモリも公知である。図4Aは、閾値電圧分布及び1パスプログラミング1パス書き込みプログラミング技術と呼ばれるの一例を示す。プログラミングパスとは、一般に複数のプログラム検証動作のシーケンスを含むことを意味し、このプログラム検証動作は、初期Vpgmレベルから始まり、最終Vpgmレベルに向かって、1セットの記憶素子に対して一又は複数の検証レベルに到達するまで行われる。記憶素子アレイのためのVth分布の例を、各記憶素子が2ビットのデータを記憶する場合のために提供する。第1のVth分布400は、消去されたE状態記憶素子のために提供される。3つのVth分布402,404及び406は、それぞれプログラムされた状態A、B、Cを表す。一実施形態において、E状態分布にある閾値電圧は負であり、A、B及びC状態分布にある閾値電圧は正である。特定の状態にある記憶素子の数は、Vthが対応する検証レベルを越えると判定された記憶素子の計数を維持することによって判定され得る。それぞれのVth範囲は、データビットのセットの所定値に対応する。記憶素子にプログラミングされたデータと記憶素子の閾値電圧レベルとの特定の関係は、記憶素子のために採用されるデータ符号化方式に依存する。一実施形態では、フローティングゲートの閾値電圧が誤ってその近傍の物理状態にシフトした場合に1ビットだけが影響を受けるように、データ値がグレーコード割り当てを使用して閾値電圧範囲に割り当てられる。一例は、閾値電圧範囲E状態Eに11を、閾値電圧範囲A状態Aに10を、閾値電圧範囲B状態Bに00を、及び閾値電圧範囲C状態Cに01を割り当てる。しかしながら、他の実施形態では、グレーコードは使用されない。4つの状態が示されているが、4つの状態より多い又は少ない構造を含む他のマルチステート構造を使用することもできる。3つの読み出し基準電圧Vra、Vrb、及び、Vrcは、記憶素子からデータを読み出すために提供される。既定の記憶素子の閾値電圧がVra、Vrb及びVrcを上回っているのか、あるいは下回っているのかをテストすることによって、システムは、記憶素子が存在する状態、即ち、プログラム状態を判断することができる。さらに、3つの検証基準電圧Vva、Vvb、及び、Vvcが提供される。記憶素子を状態Aにプログラミングするとき、このシステムは、それらの記憶素子がVva以上の閾値電圧を有するかどうかをテストする。記憶素子を状態Bにプログラミングするとき、このシステムは、記憶素子がVvb以上の閾値電圧を有するかどうかをテストする。記憶素子を状態Cにプログラミングするとき、このシステムは、記憶素子がVvc以上の閾値電圧を有するかどうかを判断する。フルシーケンスプログラミングとして知られる一実施形態においては、記憶素子は、E状態からプログラミングされた状態A、B又はCの何れかに直接的にプログラミングされる。例えば、まず、プログラミングされる一連の記憶素子の集合中の全ての記憶素子が消去状態Eとなるように、この集合が消去され得る。次に、図10で示されるような一連のプログラムパルスが、記憶素子を状態A、B又はCに直接的にプログラミングするために使用される。いくつかの記憶素子は状態Eから状態Aにプログラムされ、他の記憶素子は状態Eから状態Bに、及び/又は、状態Eから状態Cにプログラミングされる。図4B及び4Cは、閾値電圧分布及び2パスプログラミング2パス書き込みプログラミング技術と呼ばれるの一例を示す。この手法において、下位検証レベル及び上位検証レベルが一又は複数のデータ状態に対して用いられる。例えば、VvaL及びVvaはそれぞれA状態のための下位検証レベルと上位検証レベルであり、VvbL及びVvbはそれぞれB状態のための下位検証レベルと上位検証レベルであり、VvcL及びVvcはそれぞれC状態のための下位検証レベルと上位検証レベルである。下位検証レベルは上位検証レベルからオフセット偏位される。検証レベルは電圧又は電流を表し得る。プログラミング中、目標状態としてA状態にプログラムされることになっているA状態の記憶素子のVthがVvaL以下の場合には、記憶素子が高速プログラミングモードでプログラムされる。これは、ビットラインを接地することによって達成されてもよい。Vva≧Vth>VvaLの場合には、関連付けられたビットライン電圧を接地レベルと完全禁止レベルとの間のレベルに引き上げるなどの方法により、記憶素子が低速プログラミングモードでプログラムされる。これによって精度が向上するため、閾値電圧の大幅増を回避することによってVt分布が狭まる。Vth>Vvaの場合には、記憶素子がこれ以上プログラミングされないようにロックアウトされる。同様に、B状態にプログラムされることになっているB状態の記憶素子が、高速および低速プログラミングモードを有することができる。なお、1つの手法では、C状態など最も高い状態の場合には、他の状態よりもメリットが少ないことから、低速プログラミングモードは使用されない。消去状態と7つのプログラム状態A~Gとを有する8状態プログラミングの一例では、例えば、中間状態A~Fに対して高速および低速プログラミングモードを使用できる。第1プログラミングパス図4Bにおいて、A,B及びC状態の記憶素子が、E状態400からA,B及びC状態の下位検証レベルのVvaL,VvbL又はVvcLそれぞれ下位分布401,403及び405にそれぞれプログラムされる。第2プログラミングパス図4Cにおいて、A,B及びC状態の記憶素子は、それぞれ下位分布401,403,405から、それぞれ検証レベルVva,Vvb,Vvcを用いてそれぞれ最終分布402,404,406にプログラムされる。図5Aは、閾値電圧分布及び1パス書き込みプログラミングの一例を示しており、ここでは最大2つのプログラミングスピードがクイックパス書き込みQPWプログラミングオプションにおいて用いられ得るものである。一般に、各目標状態のために検証レベルはこれを超過した場合に記憶素子のために低速プログラミングスピードをトリガするものとして定義される。この検証レベルは、プログラミングパスの終了を知らせる検証レベルとは異なり得る。この例において、単一のプログラミングパスがA状態の記憶素子をE状態分布500からA状態分布502にプログラムするために用いられ、これにより検証レベルVvA-speedを越える。このVvA-speedは、例えば関連するビットライン電圧を引き上げることによって、Vva≧Vth>Vva-speedであるA状態の各記憶素子のために低速プログラミングスピードをトリガするためのチェックポイントとして機能する。Vth≦Vva-speedであるA状態の記憶素子は、それらのビットライン電圧を接地させ続けることによって、より速い速度でプログラムされる。VthがVvaに到達した全てのA状態の記憶素子分布502を形成するは更なるプログラミングからロックアウトされる。同様に、単一のプログラミングパスが、B状態の記憶素子をE状態分布500からB状態分布504にプログラムするために用いられ、これにより検証レベルVvb-speedを越える。このVvb-speedは、Vvb≧Vth>Vvb-speedである各B状態の記憶素子のための低速プログラミングスピードをトリガするためのチェックポイントとして機能する。Vth≦Vvb-speedであるB状態の記憶素子は、より速い速度でプログラムされる。VthがVvbに到達した全てのB状態の記憶素子分布504を形成するは更なるプログラミングからロックアウトされる。更に、単一のプログラミングパスが、C状態の記憶素子をE状態分布500からC状態分布506にプログラムするために用いられ、これにより検証レベルVvc-speedを越える。このVvc-speedは、Vvc≧Vth>Vvc-speedである各C状態の記憶素子のための低速プログラミングスピードをトリガするためのチェックポイントとして機能する。Vth≦Vvc-speedであるC状態の記憶素子は、より速い速度でプログラムされる。VthがVvcに到達した全てのC状態の記憶素子分布506を形成するは更なるプログラミングからロックアウトされる。図4A~4Cの技術に比して、このプログラミングオプションにおいて最大2つのプログラミングスピードという場合、我々は2パス書き込み技術において2つのプログラミングパスを使用する。これは、隣接する記憶素子からの干渉効果の影響を減らすために行われる。第1パスにおいて、我々は全ての記憶素子を最終目標Vthの近傍にプログラムする。次に、第2パスにおいて、我々はこれらの記憶素子を最終目標Vthに到達するようにプログラムする。よって、第1パスと第2パスとの間の全Vthシフトはより小さく、よって、隣接する記憶素子への対応する干渉効果も小さい。このプログラミングは、例えば後に詳しく述べる図7A及び7Bに示された順序で行うことができる。第2パスにおいて、記憶素子は既に目的とするものの近傍にプログラムされているため、我々がそれらをプログラムする際、それらのVthがそれらの安定した状態の値よりも高いため当然それらは最初に低速でプログラムされる。このパス書き込み効果は最終Vth分布を狭くするのに役立つ。2つまでのプログラミングスピードを使用することができるプログラミングオプションは、クイックパス書き込みQPW技術とも呼ばれる。QPWは、2パス技術の第1パス若しくは第2パス、又はこれらの両方において独立して使用することができる。我々がQPWを使用する各パスにおいて下位検証レベルVva-speed,Vvb-speed,Vvc-speedが使用され、これは、プログラミングパスが終了しロックアウトが生じる検証レベルよりも低い。この下位検証レベルは、プログラミングを遅くするためのチェックポイントとして機能するが、記憶素子のロックアウトをトリガしない。QPWにおいて、我々は、記憶素子の関連するチャネル領域にビットラインバイアスを印加することによって記憶素子のプログラミングスピードを人工的に遅くする。更に、QPW検証レベルVva-speed,Vvb-speed,Vvc-speedは独立して最適化することができることに留意されたい。Vva-speedとVvaとの間には、我々がVth分布を狭くするためにQPWの利益を最大限に得る最適ギャップがある。QPW検証レベルは以前のプログラミングパスの検証レベルに依存しない。この最適ギャップは、各目標状態のために同じものであっても異なるものであってもよい。QPWにおいて、2つの速度ではなく1つの速度によってプログラムすることができる記憶素子がいくつかあり得ることにも留意されたい例えば、一のプログラミングパルスによってVthがVva-speedを越えて跳ね上がりVvaに到達するA状態の記憶素子など。係る記憶素子は低速のプログラミングを受けることなくその目標レベルに到達する。よって、QPWにおいて全ての記憶素子が2つの速度でプログラムされるわけではない。しかしながら、典型的にはほとんどの記憶素子が2つの速度でプログラムされる。図5Bは、2パスプログラミング中のA状態のための閾値電圧分布の一例を示しており、ここでは第1プログラミングパスにおいて2つまでのプログラミングスピードがQPWプログラミングオプションにおいて用いられ得るものである。明確化のためにA状態だけが示されているが、他の目標データ状態も同様に扱うことができる。この場合、A状態の記憶素子は第1プログラミングパスにおいてVva-speedを通過し、それらのプログラミングは、第1プログラミングパスの第1部分において速く、第1プログラミングパスの第2部分において遅い。よって、第1プログラミングパスにおいて、A状態の記憶素子は、E状態分布500から下位A状態分布501VvaLで定義されるに遷移し、これによりVva-speedA状態の各記憶素子のために低速プログラミングスピードをトリガするためにチェックポイントとして機能するを通過する。よって、A状態の記憶素子の速度は、それらが下位A状態分布501に遷移すると低下し、各A状態の記憶素子がVth>VvaLになった場合に第1プログラミングパスの終了を知らせる。第2プログラミングパスにおいて、A状態の記憶素子は、分布501から分布502Vvaで画定されるにプログラムされ、各A状態の記憶素子がVth>Vvaになった場合に第2プログラミングパスの終了を知らせる。第2プログラミングパスは次に説明するように任意にQPWを使用することもできる。図5Cは、2パスプログラミング中のA状態のための閾値電圧分布の一例を示しており、ここでは第2プログラミングパスにおいて2つまでのプログラミングスピードがQPWプログラミングオプションにおいて用いられ得るものである。ここでも、明確化のためにA状態だけが示されているが、他の目標データ状態も同様に扱うことができる。この場合、A状態の記憶素子は、第2プログラミングパスにおいて検証レベルVva-speed1を通過し、これは図5BのVva-speedとは異なり得る。まず、A状態の記憶素子は、E状態分布500から下位A状態分布501VvaLで定義されるに遷移し、各A状態の記憶素子がVth>VvaLになった場合に第1プログラミングパスの終了を知らせる。第1プログラミングパスは、図5Bに記載されるように任意にQPWを使用することもできる。第2プログラミングパスにおいて、A状態の記憶素子は、始めはVth≦Vva-speed1のときには高速で、次にVth>Vva-speed1のときには低速で分布501から分布502に遷移する。第2プログラミングパスの終了は、各A状態の記憶素子がVth>Vvaになった場合に知らされる。図6A,6B及び6Cは、3パスプログラミング動作3パス書き込みプログラミング技術と呼ばれるのそれぞれ第1、第2、第3プログラミングパスを示しており、ここでは、中間又は中間よりもやや下のLM検証電圧が用いられるものである。このプログラミング技術は、一の記憶素子に隣接する記憶素子をあるページにおいて書き込んだ後で、この一の記憶素子を一のページにおいて書き込むことによって、この一の記憶素子に対するフローティングゲート間結合の影響を低減する。一実施例では、不揮発性記憶素子は4つのデータ状態を用いて記憶素子毎に2ビットのデータを記憶する。例えば、E状態が消去状態であり、状態A、B及びCがプログラムされた状態である。前述したように、状態Eはデータ11を記憶し、状態Aはデータ01を記憶し、状態Bはデータ00を記憶し、状態Cはデータ10を記憶している。他の物理的データ状態へのデータの符号化を用いることもできる。各記憶素子は2ページ分のデータを記憶する。参照のために、これらのページのデータは上位ページ及び下位ページと呼ばれるが、他のラベルを与えることもできる。第1プログラミングパスにおいて、選択ワードラインWLnのために下位ページがプログラムされる。例えば、これは図7B後述するのステップ1に対応し得る。下位ページがデータ1のままである場合、記憶素子の状態は状態E分布600のままである。データが0にプログラムされるべきである場合、WLn上の記憶素子の閾値電圧は、この記憶素子が中間LMすなわち中間よりもやや下の状態分布606にプログラムされるように引き上げられる。従って、図6Aは、E状態からLM状態への記憶素子のプログラミングを示す。一実施形態において、記憶素子がE状態からLM状態にプログラムされた後、このNANDストリング内の隣接するワードラインWLn1の隣接する記憶素子は、その下位ページに対してプログラムされる。これは、WLn上の記憶素子のための状態LMのVth分布606を拡張する広げる効果を有する。このVth分布の明らかな拡張は、上位ページをプログラミングするときに矯正される。E状態分布600も拡張される。WLnのために第1プログラミングパスが行われた後、図7Bのステップ2で示されるように、同様の第1プログラミングパスがWLnのために行われ得る。図6Bは、下位検証レベルVvaL,VvaB及びVvaCを用いた上位ページのプログラミングを示す。例えば、これは図7Bのステップ3に対応する。更に、一実施形態において、上位ページプログラミングの前に、どの記憶素子がE状態に属し、どの記憶素子がLM状態に属するかを判定するために読み出し動作が行われる。この読み出し動作は、E状態Vth分布とLM状態Vth分布の間の読み出しレベル又は他の適切な電圧レベルで行うことができる。このステップが行われる一実施例では、WLn上の下位ページをプログラミングした後に、ラッチ内の下位ページデータが除去され、このラッチをWLn1のための下位ページデータのために用いることができるようにする。この場合、WLn上の上位ページをプログラミングする前に、我々は下位ページデータを判定するために読み出しを行う。他の実施例において、この読み出しステップは必要ではなく、これは、一のワードラインの複数の異なるプログラミングパス全体を通してこのワードラインのための全てのページのデータを保存することができるバイナリーキャッシュが使用される場合などである。記憶素子がE状態にあり、かつ上位ページが1である場合、この記憶素子はE状態分布600のままである。記憶素子がE状態であり、かつその上位ページデータが0である場合、この記憶素子のVthは、VvaL分布602よりも高く引き上げられる。記憶素子がLM状態606だった場合で、上位ページデータが0である場合、記憶素子のVthはVvbL分布608よりも高くプログラムされる。記憶素子がLM状態606にあり、かつ上位ページデータが1である場合、記憶素子のVthはVvcL分布612よりも高く引き上げられる。この処理は、フローティングゲート間結合の影響を減らし、なぜなら隣接する記憶素子の上位ページプログラミングのみが所定の記憶素子の見掛けのVthに対し影響を及ぼすからである。代替の状態符号化の一例は、上位ページデータが0であるときに分布606から状態Cに動かすことであり、及び上位ページデータが1であるときにB状態に動かすことである。WLnのための第2プログラミングパスが行われた後、図7Bのステップ4に示されるように、第1プログラミングパスがWLn2のために行われ、そして図7Bのステップ5によって示されるように、第2プログラミングパスがWLn1のために行われ得る。図6Cは、A状態のための分布602から分布604への遷移、B状態のための分布608から分布610への遷移、C状態のための分布612から分布614への遷移を提供するために上位検証レベルVva,Vvb及びVvcを用いた上位ページのプログラミングを示す。例えば、これは図7Bのステップ6に対応し得る。この3パスプログラミングの例は4つのデータ状態及び2ページのデータを提供するが、ここでのコンセプトは、4つの状態よりも多い又は少ない状態、及び2ページよりも多い又は少ない状態を伴う他の実施形態にも適用することができる。例えば、1個の記憶素子につき8又は16の状態を伴うメモリデバイスが現在計画中または製造中である。一般に、プログラミングスピードは、図6A~6Cのプログラミングパスのいずれについても調整することができる。例えば、図6Bの第2プログラミングパスにおいて、我々は図5Bに記載されるようにVva-speed<VvaLを設定することができる。同様に、我々はVvb-speed<VvbL及びVvc-speed<VvcLを設定することができる。この場合、第2プログラミングパスにおいて、A状態の記憶素子はVth≦Vva-speedのときには高速で、Vva-speed<Vth≦VvaLのときには低速でプログラムされる。同様に、B状態記憶素子は、Vth≦Vvb-speedのときには高速で、Vvb-speed<Vth≦VvbLのときには低速でプログラムされる。同様に、C状態記憶素子は、Vth≦Vvc-speedのときには高速で、Vvc-speed<Vth≦VvcLのときには低速でプログラムされる。図6Cの第3プログラミングパスの一例において、我々は図5Cに記載されるようにVvaL<Vva-speed<Vvaを設定することができる。同様に、我々はVvbL<Vvb-speed<Vvb及びVvcL<Vvc-speed<Vvcを設定することができる。この場合、第3プログラミングパスにおいて、A状態の記憶素子は、VvaL<Vth≦Vva-speedのときには高速で、Vva-speed<Vth≦Vvaのときには低速でプログラムされる。同様に、B状態記憶素子は、VvbL<Vth≦Vvb-speedのときには高速で、Vvb-speed<Vth≦Vvbのときには低速でプログラムされる。同様に、C状態記憶素子は、VvcL<Vth≦Vvc-speedのときには高速で、Vva-speed<Vth≦Vvcのときには低速でプログラムされる。第2及び第3プログラミングパスのための上記例は、単独でも組み合わせても使用することができる。図6Dは、2パスプログラミング動作2パス書き込みプログラミング技術と呼ばれるの第2プログラミングパスを示し、ここで、第1プログラミングパスは図6Aに示されており、2つまでのプログラミングスピードをQPWプログラミングオプションにおいて使用することができるものである。この更なる変更態様において、図5A~Cで説明した検証レベルVva-speed,Vvb-speed及びVvc-speedが、プログラミングスピードの低下をトリガするために使用される。具体的には、A状態の記憶素子は、Vth≦Vva-speedのときには高速で、Vva>Vth>Vva-speedのときには低速でプログラムされる。Vth>Vvaはプログラミングロックアウト状態をトリガする。B状態記憶素子は、Vth≦Vvb-speedのときは高速で、Vvb>Vth>Vvb-speedのときは低速でプログラムされる。Vth>Vvbはプログラミングロックアウト状態をトリガする。C状態記憶素子は、Vth≦Vvc-speedのときは高速で、Vvc>Vth>Vvc-speedのときは低速でプログラムされる。Vth>Vvcプログラミングロックアウト状態をトリガする。図7Aは、1セットの記憶素子のための、ワードラインを前後する順に行われる2パスプログラミング動作を示す。描かれた構成要素は、はるかに大きい1セットの記憶素子、ワードラインおよびビットラインのうちの1サブセットであり得る。一の可能なプログラム動作では、WLn上の記憶素子四角で表されるが、第1プログラミングパスでプログラムされる。このステップは、丸付き数字1で表される。次に2において、WLn1上の記憶素子が、第1プログラミングパスでプログラムされる。本実施例では、プログラミング対象のワードラインが選択された場合、各プログラムパルスの後に検証動作が行われる。選択ワードラインに対する検証動作の際に検証電圧が非選択ワードラインに印加され、検証動作といった検出動作が選択ワードラインに対して行われるように非選択記憶素子をオンにする導通する。次に3において、WLn上の記憶素子が第2プログラミングパスでプログラムされる。次に4において、WLn2上の記憶素子が、このワードラインのための第1プログラミングパスでプログラムされる。次に5において、WLn1上の記憶素子が、第2プログラミングパスでそれぞれの最終状態にプログラムされる。複数のプログラミングパスにおいてワードラインをこのワードラインを前後する順でプログラミングすることによって、容量結合によって生じる干渉効果それらのVth分布を引き上げ、かつ拡張する広げる性質があるが減少する。対照的に、単一パスのプログラミングでは、各ワードラインは次のワードラインに移動する前に完全にプログラムされる。第1及び第2プログラミングパスは本明細書において記載されたプログラミング方式のいずれを使用することもできる。図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のために行われ、その他も同様である。一の可能な手法において、第1プログラミングパスは、図6Aに記載された検証レベルVvLMを用い、第2プログラミングパスは、図6Bに記載された1セットの下位検証レベルVvaL,VvbL及びVvcLを用い、第3プログラミングパスは、図6Cに記載された1セットの上位検証レベルVva,Vvb及びVvcを用いる。第2プログラミングパスのための1セットの下位検証レベルと、第3プログラミングパスのための1セットの上位検証レベルと差異は、最も狭い1セットのVth分布を成すためにシリコン基板上で最適化され得る。第1、第2及び第3プログラミングパスは、本明細書において記載されるプログラミング方式のいずれを使用することもできる。図8は、記憶素子をプログラムするために必要な最も高いVpgmと、この記憶素子のビットライン電圧との関係を示す。X軸はビットライン電圧Vblの増加示し、y軸は記憶素子の完全なプログラミングに必要な最も高いVpgm電圧を示す。Vblが増加するにつれて、記憶素子の完全なプログラミングに必要な最も高いVpgmも増加する。一般に、記憶素子のプログラミングスピードが低下する程度は、定数kこれは描かれた線の傾きであるによって乗じられるVblに比例する。この定数は、典型的には1よりも大きく、なぜなら、Vblにおける1Vの増加例えばΔVbl=1Vのビットラインステップサイズは、オフセットのためにVpgmだけ1Vより大きい増加例えばΔVpgm=1Vのプログラムパルスステップサイズを必要とするからである。従って、増加するVblは、プログラミングスピードを制御し、かつVth分布の幅を狭くするための強力なツールである。しかしながら、それは主にVsgdドレイン側選択ゲートマージンウィンドウmargin-windowによって制限されるため、Vblは高くなりすぎることはない。Vblが高くなると、記憶素子をプログラミングするためにドレイン側選択ゲートをオンするために必要なVsgd電圧も高くなる。しかし、Vsgd値が高くなると、禁じられた記憶素子のチャネルからのブースト電位リークboostpotentialleakageのリスクがあり、これはプログラムディスターブを引き起こし得る。記憶素子のプログラミングスピードは、トンネル酸化物に印加された電場に依存し、これはフローティングゲートの電圧と、このフローティングゲートの下の基板内のチャネルの電圧との差に比例する。通常、コントロールゲート電圧Vpgmは、階段状にステップアップし、Vblは0Vで固定される。Vth分布を狭くするためにプログラミングを遅くするために、我々はより小さなVpgmステップサイズを使用することができる。しかしながら、これは、プログラムパルス及び検証動作の数の増加をもたらし、よって、プログラミング時間全体を増加する。Vpgmステップサイズを変更する代わりに、我々は、実効VpgmステップサイズΔVpgm-effectiveを小さくするために、複数のVpgmパルスのステップと足並みを揃えてVblを階段状に増加させることができる。次のように書くことができる。ΔVpgm-effective=ΔVpgm-k×ΔVblここで、k>1及びΔVpgm-effective<ΔVpgm。典型的には、kの値は約1.4でよい。ΔVblが大きくなると結果としてΔVpgm-effectiveが小さくなる。この技術の利点は、Vblを記憶素子の複数の異なるサブセットここで、各サブセットは異なる目標データ状態を有するに対して異なる時期にステップアップすることができることである。よって、我々は、異なる目標データ状態に帰属する1セットの記憶素子のために異なるプログラミングスピードを与えることができる。一方、Vpgmステップサイズを小さくした場合、プログラミング中の全ての記憶素子のプログラミングスピードに影響する。同等の小さなVpgmステップサイズを用いることと比較して、特定の目標データ状態のためにVblを一時にステップアップすることによって我々は同じ検証動作の数を維持することができ、かつプログラミングを終了するために必要なプログラムパルスの総数を減少させることができ、よってプログラミング時間全体を減少させることによって性能を向上することができる。Vblにおける足並みを揃えた増加は、例えば、記憶素子の所定の1サブセット共通する目標データ状態を有し、かつプログラミングからまだロックアウトされていないもののためにVblを各プログラムパルスと共にステップアップすることができることを指す。プログラミングからロックアウトされた記憶素子のVblはVblロックアウトに設定される。図9Aは、ビットライン電圧がステップアップされるプログラミング技術を示す。全ての目標データ状態のためのプログラミングパスがステップ900で始まる。ステップ902~912は、全ての目標データ状態に対して個別かつ一部同時に行われる。ステップ902は、プログラミング中にビットラインステップアップを伴わずに一又は複数のプログラム検証動作を行うことを含む。ステップ904にて、第1のトリガ条件が満たされる。これは、例えば後述する、Vpgmレベル、予め決められたプログラムパルス数、又はビットスキャンに基づくことができる。第1のトリガ条件は、共通する目標データ状態を有する1サブセットの記憶素子に対してビットラインステップアップループを開始するための条件を表す。ステップ906は、プログラミング中にビットラインステップアップを伴う一又は複数のプログラム検証動作を行うことを含む。ステップ908にて、第2のトリガ条件が満たされる。これは、例えば後述する、Vpgmレベル、予め決められたプログラムパルス数、又はビットスキャンに基づくことができる。第2のトリガ条件は、共通する目標データ状態を有する1サブセットの記憶素子に対してビットラインステップアップループを停止するための条件を表す。ステップ910は、プログラミング中にビットラインステップアップを伴わずに一又は複数のプログラム検証動作を行うことを含む。この場合、このビットラインは最大許容レベルロックアウトレベルよりも低いにて固定することができる。このプログラム検証動作は、ステップ912にて、関連する目標データ状態の記憶素子に対して終了する。実際には、検証レベルに到達した記憶素子は更なるプログラミングからロックアウトされ、よって、特定の目標データ状態を有する記憶素子のいくつかがプログラミングからロックアウトされる一方、この特定の目標データ状態を有するその他の記憶素子はプログラムされ続けることができる。場合においては例えば関連する目標データ状態の記憶素子の全てがステップ906においてロックアウトするときなど、ステップ910は行われない。図9Aのプログラミング技術の詳細は後述する。図9Bは、図9Aのプログラミング技術の一例として、プログラムパルス数に応じて検証動作を受けるデータ状態を示す。プログラミング中、全ての記憶素子は共にプログラムされるが、A状態検証レベルがB状態検証レベルより低く、B状態検証レベルがC状態検証レベルより低いため、低い目標状態に属する記憶素子は、高い目標状態に属する記憶素子よりも速くそれらの目標レベルに到達する。よって、プログラミング時間を節約するために、高い目標状態に対する検証動作は第1のプログラムパルス自体から始まる必要はない。典型的には、B状態検証動作は、初期のいくつかのプログラムパルスを飛ばすことができ、かつ、C状態検証動作は更なるプログラムパルスを飛ばすことができる。シーケンス950は、Vblが本明細書において記載されたようにステップアップされず、プログラミング中は0Vで固定され、例えばΔVpgm=ΔVpgm-effective=0.3Vであるときに行われる。まず、A状態の記憶素子が検証され、次に、A及びB状態の記憶素子が検証され、次に、B及びC状態の記憶素子が検証され、最後にC状態の記憶素子が検証される。このシーケンスは、提供された3つのシーケンス950,960及び970のうち最もプログラミング時間を費やす。この特定の例において、A,B及びC状態の記憶素子が検証されるプログラミングパルスのセットがないことに留意されたい。これは、異なるVpgmステップサイズ伴う場合、又は他のデバイスパラメーターにおいていくつかの変更を伴う場合はこの限りではない。すなわち、シーケンス960及び970に記載されるように、A,B及びC状態の記憶素子を検証する一又は複数のプログラミングパルスがあってもよい。シーケンス960は、Vblがプログラミング中に全ての目標データ状態に対して本明細書において記載されたようにステップアップされるときに行われ、ここで、ΔVpgm=0.4Vであり、かつΔVblが例としてΔVpgm-effective=0.3Vのように選択される。まず、A状態の記憶素子が検証され、次にA及びB状態記憶素子が検証され、次にA,B及びC状態の記憶素子が検証され、次にB及びC状態の記憶素子が検証される、最後にC状態記憶素子が検証される。このシーケンスは、シーケンス950に比べてプログラミング時間を短縮する。記憶素子は、シーケンス960においてプログラムシーケンス950よりも速くプログラムされるが、これは、シーケンス950ではその全体を通してVpgm=ΔVpgm-effective=0.3Vであることと比較して、シーケンス960ではビットラインステップアップの前及び後の両方でΔVpgm=ΔVpgm-effective=0.4Vであるからである。しかしながら、両方のシーケンスにおいて同じVth分布幅を達成することができるが、これは、シーケンス950及び960の両方において、共通する目標データ状態を有する記憶素子のプログラミング中はΔVpgm-effective=0.3Vであるからである。シーケンス970は、Vblが、プログラミング中に最も高い目標データ状態例えば、C状態を除く全ての目標データ状態に対して本明細書において記載されたようにステップアップされるときに行われ、ここで、ΔVpgm=0.4Vであり、ΔVblはΔVpgm-effective=0.3Vなどから選択される。まず、A状態の記憶素子が検証され、次にA及びB状態の記憶素子が検証され、次にA,B及びC状態の記憶素子が検証され、次にB及びC状態の記憶素子が検証され、最後にC状態の記憶素子が検証される。このシーケンスは、シーケンス960と比較して更にプログラミング時間を短縮するが、これは、それらのプログラミング全体を通してC状態の記憶素子のためのΔVpgm=ΔVpgm-effective=0.4Vであり、よって、C状態の記憶素子のプログラミング時間が短縮されるからである。一般に、プログラミング時間はより多くの検証動作が一の所定のプログラムパルスに対して行われる場合に短縮されるが、これは、プログラムパルスの数及び関連するセットアップ時間が減少されるからである。上述のように、通常、最も高い目標データ状態はより広いVth分布を許容することができ、よって、最も高い目標データ状態に対してVblをステップアップしないことでプログラミング時間を更に短縮することができる。具体的には、Vth分布の上端は、Vblがステップアップされない場合により高くなる。しかしながら、これは、最も低い状態の上端と最も高い状態の下端との間のギャップとして定義されるVthウインドウの観点からはそれほど重要というはわけではない。最も高い目標データ状態に対してVblをステップアップしない別の利点は、最も高い状態の記憶素子をプログラムするのに必要な最も高いVpgmが、Vblがステップアップされるときよりも低いことである。Vpgmが高いと、E状態の記憶素子に対してプログラムディスターブが増加し得る。よって、最も高い状態のビットラインステップアップを禁止することがプログラムディスターブの観点から望ましい。この例は4つの状態のメモリデバイスを含むものだが、このコンセプトは、8個又は16個の状態といった付加的な状態に拡張することもできることに留意されたい。図10は、図9Bのシーケンス960のためのプログラムパルス数に応じたプログラム検証動作を示す。一般に、一のプログラム動作には選択ワードラインにパルス列を印加することが含まれ、ここで、このパルス列は、一又は複数の検証パルスが後に続くプログラムパルスである。一又は複数の検証パルスが後に続くプログラムパルスの各組み合わせによって、動作又はプログラム検証の繰り返しが構成される。プログラムパルスは任意の数の異なる波形を有することができることに留意されたい。矩形波形が描かれているが、マルチレベル形状又は傾斜のついた形状といった他の形状も可能である。パルス列は、典型的には、固定されたステップサイズを用いて、その大きさが段階的に増加するプログラムパルスを有するが、様々なステップサイズを用いることも可能である。新たなパルス列がマルチパスプログラミング動作の各プログラミングパスに印加され、初期Vpgmレベルにて始まり、最大許容Vpgmレベルよりも低い最終Vpgmレベルにて終わる。初期Vpgmレベルは、異なるプログラミングパスにおいて同一でも異なっていてもよい。最終Vpgmレベルも、異なるプログラミングパスにおいて同でも異なっていてもよい。このステップサイズは異なるプログラミングパスにおいて同一でも異なっていてもよい。場合においては、Vth分布幅を減少させるために最終プログラミングパスにおいてより小さなステップサイズが用いられる。パルス列1000は、プログラミングのために選択されたワードライン及びこれに関連する1セットの不揮発性記憶素子に印加される一連のプログラムパルス1005,1010,1015,1020,1025,1030,1035,1040,1045,1050,1055,1060,1065,1070及び1075を含む。検証中の目標データ状態に基づき、各プログラムパルスの後に1つ、2つ又は3つの検証レベルが提供される。プログラムパルスと検証パルスとの間で0VがWLnに印加され得る。例えば、A状態検証パルス例えば、波形1006が、第1、第2及び第3プログラムパルス1005、1010、1015のそれぞれの後に印加され得る。A及びB状態検証パルス例えば、波形1021が、第4、第5及び第6プログラムパルス1020、1025、1030のそれぞれの後に印加され得る。A,B及びC状態検証パルス例えば、波形1036が、第7及び第8プログラムパルス1035、1040のそれぞれの後に印加され得る。B及びC状態検証パルス例えば、波形1046が、第9、第10及び第11プログラムパルス1045,1050、1055のそれぞれの後に印加され得る。最後に、C状態検証パルス例えば、波形1061が、第12,第13,第14及び第15プログラムパルス1060,1065,1070、1075のそれぞれの後に印加され得る。図11Aは、複数の異なるデータ状態のためのプログラムパルス数に応じたビットライン電圧のステップアップを示し、ここでは、全てのデータ状態に対して共通するステップサイズが用いられるものである。波形1100,1102及び1104は、A,B及びC状態のそれぞれのためのビットライン電圧を表す。この例において、Vblは、固定されたステップサイズΔVblを用いてV1,V2,V3,V4,V5及びVbl-max最大許容レベルにステップアップされる。Vbl-lockoutは、Vbl-maxより高いロックアウトビットライン電圧を表している。いくつかの場合において、特定の目標状態の全ての記憶素子は、Vbl-maxに到達する前にロックアウトされることができ、よって、Vbl-maxは到達してもよいし到達しなくてもよいセーフガードである。各目標データ状態のために、ビットラインステップアップの開始及び/又は終了は異なるトリガ条件に基づいて設定することができる。一の適応的ではない手法において、固定されたVpgmパルス数が各目標データ状態のためのビットラインステップアップ制御ループの開始及び終了のために設定される。例えば、このメモリデバイスにおけるROMヒューズパラメータは、A状態のための開始及び終了プログラムパルス数としてBL-ramp-start-A及びBL-ramp-end-Aといったパラメーターによって設定され得る他のデータ状態に対しても同様である。この例では、BL-ramp-start-A=2,BL-ramp-end-A=7,BL-ramp-start-B=5,BL-ramp-end-B=10,BL-ramp-start-C=8、及びBL-ramp-end-=13である。各データ状態は、それ自体のビットラインステップアップ制御ループを有する。この例において、プログラムパルスの数は、各ビットラインステップアップ制御ループにおいて同じであり、なぜなら、所望のVth分布幅は各データ状態にとって同じであるからである。より広いVth分布幅が許容される場合、ビットラインステップアップ制御ループは、より少ない数のプログラムパルスによりより小さくすることができる。ビットラインステップアップの開始及び終了のために用いられるVpgmパルス数は、以下のように選択されることに留意されたい。すなわち、このVpgmパルス数は、一のデータ状態の比較的少数の記憶素子がそのデータ状態のビットラインステップアップ制御ループの前又は後に検証レベルに到達してロックアウトし、一方、大部分の記憶素子がビットラインステップアップ制御ループ中に検証レベルに到達してロックアウトするように選択される。ビットラインステップアップ制御ループの前又は後に少数の記憶素子が検証レベルに到達し、かつロックアウトできるようにすることは、Vth分布を著しく拡張するものではない。しかしながら、これはΔVpgm-effectiveを低下する時間を短縮し、全プログラミング時間が不必要に延長されることはない。図11BはA状態の記憶素子のためのビットラインステップアップループを開始するためのトリガ条件を示す。プログラミングパスの一例において、A状態の記憶素子は、VvaLを用いてプログラムされ、E状態分布1110から始まる。分布1112は、一又は複数のプログラムパルスの後のA状態の記憶素子を表す。分布1112の一部分1114は、Vth>VvaLであるA状態の記憶素子を表す。図11Cは、A状態の記憶素子のためのビットラインステップアップループを停止するためのトリガ条件を示す。分布1120は、一又は複数の付加的なプログラムパルスの後のA状態の記憶素子を表す。分布1120の一部分1116は、Vth<VvaLであるA状態の記憶素子を表す。同時にプログラムされ得る他の目標状態の記憶素子のVth分布は描かれていない。上記の非適応的な手法の代替として、適応的な手法が、ビットラインステップアップループの開始及び/又は終了を設定するために使用され得る。これは、開始及び/又は終了時間が同じメモリデバイス内の複数の異なるセットの記憶素子例えば異なるワードライン上のものに対して異なることを可能にし、かつ、複数の異なるメモリデバイス内の複数の異なるセットの記憶素子に対して異なることを可能にする。更に、開始及び/又は終了時間は、例えば、プログラム消去サイクルが累積されるにつれて、性能動作の経時変化に基づき、又は温度変化といった異なる環境条件に基づき、同じ1セットの記憶素子において異なることができる。例えば、固定数のプログラムパルスを使用する代わりに、我々は、特定の検証レベルよりも上又は下の記憶素子の最小数に基づき、ビットラインステップアップループを開始及び/又は終了することができる。例えば、領域1114で表された記憶素子は、ビットスキャン手続によって検出することができ、このビットスキャン手続では、関連する記憶素子がVth>VvaLであるかを判定するために各ビットラインのセンス増幅器が読み出される。特定の最小数のビット例えば、A状態の記憶素子がVvaLよりも高いと検出されたとき、A状態のためのビットラインステップアップループが開始する。同様に、ビットラインステップアップループは、VthがVvaLより低いA状態ビットの数が特定の数よりも少ないとき又は、Vth>VvaLであるA状態ビットの数が特定の数よりも多いときに停止することができる。ビットラインステップアップ開始又は停止の判定決定がなされるビットスキャン中の特定の数のビットは、別のROMヒューズパラメータによって制御され得る。同様の判定が、それらの各検証レベルにてビットスキャンを行うことによって他の状態のためになされ得る。ビットラインステップアップを停止するための別のトリガ条件がまだ満たされていないときに、Vblが過剰に高いレベルにステップアップしないように、最大許容Vbl例えば、図11AのVbl-maxを持たせることも可能である。別の手法において、各データ状態のためのビットラインステップアップループは、各ビットスキャンパスの後で、かつ特定の数の付加的なプログラムパルスの完了とともに開始することができる。同様に、各データ状態のためのビットラインステップアップは、ビットスキャンパスの後で、かつ特定の数の付加的なプログラムパルスの完了とともに終了することができる。別の手法において、一のデータ状態のためのビットラインステップアップループは、別のより低いデータ状態のためのビットスキャンパスの後で、かつ特定の数の付加的なプログラムパルスの完了とともに、開始することができる。例えば、B状態記憶素子のためのビットラインステップアップループは、A状態の記憶素子のためのVvaLでのビットスキャンパスの後で、かつ特定の数の付加的なプログラムパルス例えば、図11Aと一致する3つのプログラムパルスの完了とともに、開始することができる。ビットラインステップアップを停止するために類似する方法を用いることもできる。係る方法を用いて、ビットラインステップアップの開始及び停止は、単に最も低い状態にのみビットスキャン動作を行うことによって全てのデータ状態のために適応可能とすることができる。任意の特定の目標データ状態のためにビットラインステップアップループをいつ開始及び/又は終了するかを判定決定するために、上記方法の任意の組み合わせを使用することもできる。呈示した例では、1個の記憶素子メモリデバイスにつき4つの状態の2ビットの実施例を記載している。しかしながら、このコンセプトは、例えば、8個又は16個の状態のデバイスにも用いることができる。しかしながら、同時に付加的なビットライン電圧を生じさせることが必要となり得る。図12Aは、図11Aと一致する、A状態の記憶素子のためのプログラムパルス数に応じたプログラミング速度を示す。上述したように、プログラムパルス毎の記憶素子のVthの変化ΔVth/パルスの観点から、プログラミングスピード又は速度はVblに応じる。ビットラインバイアスが印加されないのであればVbl=0V、ΔVth/パルス=R2であり、ここでR2は高率高速である。Vpgmステップアップと足並みを揃えて一定のビットラインステップアップが印加される場合、ΔVth/パルス=R1<R2であり、ここで、R1は低率低速である。図11Aにおいて、A状態の記憶素子に属するビットラインは第2プログラムパルスにてステップアップを開始する。よって、A状態の記憶素子のためのR2からR1への遷移は第2プログラムパルスにて生じる。同様に、A状態の記憶素子のためのビットラインステップアップが第8プログラムパルス最後のステップアップは第7のプログラムパルスにて生じるにて停止される。よって、A状態の記憶素子のためのR1からR2に戻る遷移が第8プログラムパルスにて生じる。実際には、ΔVth/パルスは、簡略化のために描かれた階段状の変化を呈するのではなく、一又は複数のプログラムパルスによって徐々に遷移し得る。第9プログラムパルスにて、A状態の記憶素子はロックアウトされ、よって、プログラミングスピードはゼロに落ちる。図12Bは、図11Aと一致する、B状態の記憶素子のためのプログラムパルス数に応じたプログラミング速度を示す。図11Aの例において,B状態の記憶素子のためのR2からR1への遷移が第5プログラムパルスで生じ、その後、R2からR1への遷移が第11プログラムパルスにて生じる。第12プログラムパルスにて、B状態の記憶素子はロックアウトされ、よって、プログラミングスピードはゼロに落ちる。図12Cは、図11Aと一致する、C状態の記憶素子のためのプログラムパルス数に応じたプログラミング速度を示す。図11Aの例において、C状態記憶素子のためのR2からR1への遷移が第8プログラムパルスで生じ、その後、R2からR1への遷移が第14プログラムパルスにて生じる。第15プログラムパルスの後、プログラミングは終了し、よってC状態の記憶素子のためのプログラム速度はゼロに落ちる。図13は、複数の異なるデータ状態のためのプログラムパルス数に応じたビットライン電圧のステップアップを示し、ここでは、全てのデータ状態に対して小さなステップサイズ、次に大きなステップサイズ、次に小さなステップサイズが用いられるものである。図11Aの例では、Vblが、固定ステップサイズを用いてすなわち定率にてステップアップした。この手法においては、複数の異なるビットラインステップアップ率が用いられる。第1の小さなビットラインステップアップ率を用い、次に第2の大きなビットラインステップアップ率を用い、次に第3の小さなビットラインステップアップ率を用いることが有益となり得る。第3のビットラインステップアップ率は、第2のビットラインステップアップ率より低く、かつ、第1のビットラインステップアップ率と等しくてよい。この手法は、ガウス分布に従い、ほとんどの記憶素子が目標検証レベル及びロックアウト状態に到達したときに最もプログラミングを遅くする。所定のワードライン上の記憶素子のための自然にプログラムされたVth分布は、概して本質的にガウス分布であり、ほとんどの記憶素子のVthは、この分布の中心近くで生じ、一方、より少ないセルのVthはガウス分布の下端及び上端にて生じる。よって、所定の目標データ状態のために、ほとんどの記憶素子はガウス分布のピークにて同じプログラムパルス数の近くでロックアウトされ、よって我々は、最も高いビットラインステップアップ率を伴うこの時間で最もプログラミングを遅くすることによって、最も高い費用対効果比率を達成することができる。この利点は、Vth分布を狭くすることであり、その代償はプログラミング時間の増加である。ガウス分布の下端及び上端における記憶素子は、ほとんどの記憶素子がロックアウトされるプログラムパルスから遠い特定のプログラムパルス数にてロックアウトされる。この場合、最も高い費用対効果比率は、これらの特定のプログラムパルスの間の低いがゼロではないビットラインステップアップ率によって達成され得る。ガウス分布の更に下端及び更に上端における記憶素子は、ほとんどの記憶素子がロックされるプログラムパルスから更に遠い他のプログラムパルス数にてロックアウトされる。この場合、最も高い費用対効果比率は、これらの他のプログラムパルスの間にビットラインステップアップがないことによって達成され得る。例えば、波形1300,1302及び1304は、それぞれA,B及びC状態の記憶素子のためのVblを表す。各波形は、ビットラインレベルV1’,V2’,V3’,V4’,V5’及びVbl-maxを含む。VblがV1’及びV2’に設定されるときのステップアップ率又はステップサイズは比較的小さい。同様に、VblがV5’及びVbl-maxに設定されるときのステップアップ率又はステップサイズも、比較的及び任意には等しく小さい。VblがV3’及びV4’に設定されるときのステップアップ率又はステップサイズは、比較的大きい。図14は、複数の異なるデータ状態のためのプログラムパルス数に応じたビットライン電圧のステップアップを示し、ここでは、下位のデータ状態に対して大きなステップサイズが用いられ、最も高いデータ状態に対して小さなステップサイズが用いられるものである。この例は、より小さなVblステップサイズが最も高い状態この例においてC状態に対して使用されることを除いて、図11Aのものと類似する。この場合においては、それぞれの目標データ状態に関連付けられたステップサイズを用いてVblがステップアップされ、ここでは、複数の異なるステップサイズが1セットの可能な目標データ状態のうちの少なくとも2つの異なる目標データ状態に関連付けられている。例えば、一のVblステップアップ率をA及びB状態の記憶素子のために用いることができ、かつ、別のより低いVblステップアップ率をC状態の記憶素子のために用いることができる。より小さなVblステップアップ率の使用によって、より広いVth分布の代償としてより速いプログラミングがもたらされる。波形1400,1402及び1404は、それぞれA,B及びC状態の記憶素子のためのVblを表す。よって、C状態のための波形1404におけるV1,V2,V3,V4及びV5のVblレベルは、図11Aのものと同じとなり得る。V1,V2,V3及びV4のVblレベルが、それぞれA及びB状態のための波形1400及び1402において用いられる。上述したように、ビットラインステップアップがないことで、最も高い状態に対してより広いVth分布をもたらし、これは一般的に、プログラミング時間を短縮するために許容される交換条件トレードオフである。一方、より大きなVblステップアップ率によってより狭いVth分布がもたらされるが、プログラミング時間がより長くなる。本実施例は、最も高い状態に対してビットラインステップアップを使用しないことと、より低い状態例えば、A,B及びC状態に対してより大きなビットラインステップアップを使用することとの間の妥協案を提供する。これにより、ビットラインステップアップが用いられない場合と比較して、最も高い状態のために幾分より狭いVth分布が提供されることによってバランスをとる。プログラミング時間は、最も高い状態に対してVblステップアップが用いられなかった場合よりも長いが、最も高い状態に対してより大きなVblステップアップが使用された場合よりも短い。図15は、複数の異なるデータ状態のためのプログラムパルス数に応じたビットライン電圧のステップアップを示し、ここでは、全てのデータ状態のために共通するステップサイズが用いられ、付加的なビットライン電圧が閾値電圧レベルに基づき加えられるものである。いくつかのプログラミング技術において、付加的なビットライン電圧Δが典型的には最も高い状態を除く全ての状態のための低速プログラミングのために用いられる。この付加的なビットライン電圧は、プログラミングからまだロックアウトされていない記憶素子Vthが個々の目標データ状態の第1検証レベルと第2検証レベルの間にあるもののために用いられ得る。例えば、第1検証レベル及び第2検証レベルは、A状態のためにそれぞれVvaL及びVvaであり得、B状態のためにそれぞれVvbL及びVvbであり得、C状態のためにそれぞれVvcL及びVvcであり得る例えば、図4を参照。一の可能な実施例において、ビットラインステップアップは一のプログラムパルスにて開始し、付加的なビットライン電圧が異なるプログラムパルスにて加えられる。同様に、ビットラインステップアップは一のプログラムパルスにて停止することができる一方、付加的なビットライン電圧は異なるプログラムパルスにて停止する。共通する目標データ状態を有する1サブセットの記憶素子にビットラインステップアップが同時に印加され得る一方、このサブセットのプログラミング進度に関わらず付加的なビットライン電圧がビットラインを介して個々の記憶素子に印加される。付加的なビットライン電圧を印加することは、現在のステップアップレベルを越える付加的な固定量だけVblを引き上げることによって達成される。この手法は、所定時間にて必要とされるビットライン電圧の数を増加し得る。例えば、A状態の記憶素子のために、波形1500及び1502が、それぞれに加えられる付加的なビットライン電圧がないものとあるものとのビットラインステップアップレベルを表している。付加的なビットライン電圧はビットラインステップアップの前又は後で印加することもできることに留意されたい。B状態の記憶素子のために、波形1504及び1506は、それぞれに加えられる付加的なビットライン電圧がないものとあるものとのビットラインステップアップレベルを表している。C状態の記憶素子のために、波形1508及び1510は、それぞれに加えられる付加的なビットライン電圧がないものとあるものとのビットラインステップアップレベルを表している。Vbl-max-newは、許容され得る新たなより高いVblを表す。あるいは、Vbl-maxは、ビットラインステップアップがVbl-maxを越えるのを避けるために早く終了されるように実現される。すなわち、最大許容Vblは、ビットラインステップアップレベル及び付加的なビットライン電圧の合計に基づき実現され得る。一実施形態において、1セットの不揮発性記憶素子をプログラミングするための方法は、1セットのプログラムパルスを前記1セットの不揮発性記憶素子に印加するステップを有する。ここにおいて、前記1セットの不揮発性記憶素子のうちの各不揮発性記憶素子は、ビットラインに接続されており、前記1セットの不揮発性記憶素子は、複数の異なるサブセットの不揮発性記憶素子を含む。各サブセットは、複数の目標データ状態のうちの1つの目標データ状態の1つの検証レベルVva,Vvb,Vvcにそれぞれプログラムされ、各サブセットは、それぞれ、1つの目標データ状態の1つの検証レベルにそれぞれプログラムされる1サブセットの不揮発性記憶素子を含む。この方法は更に、前記1セットのプログラムパルス中において、前記1サブセットの不揮発性記憶素子に対する第1のトリガ条件が満たされたときを判定するステップを含む。この方法は更に、第1のトリガ条件が満たされたときに、前記1セットのプログラムパルスのうちの複数の連続するプログラムパルスの各プログラムパルスと足並みを揃えて、前記1サブセットの不揮発性記憶素子のうちのプログラミングからまだロックアウトされていない不揮発性記憶素子のそれぞれのビットラインの電圧をステップアップするステップを含む。別の実施形態において、対応する不揮発性記憶システムは、1セットの不揮発性記憶素子を含み、この1セットの不揮発性記憶素子は、複数の異なるサブセットの不揮発性記憶素子を含み、各サブセットは、複数の目標データ状態のうちの1つの目標データ状態の1つの検証レベルにそれぞれプログラムされ、1つの目標データ状態の1つの検証レベルにプログラムされる1サブセットの不揮発性記憶素子を含む。それぞれのビットラインは各不揮発性記憶素子に接続されている。少なくとも一つの制御回路が、a1セットのプログラムパルスを前記1セットの不揮発性記憶素子に印加し、b前記1セットのプログラムパルス中において、前記1サブセットの不揮発性記憶素子に対する第1のトリガ条件が満たされたときを判定し、c前記第1のトリガ条件が満たされたときに、前記1セットのプログラムパルスのうちの複数の連続するプログラムパルスの各プログラムパルスと足並みを揃えて、前記1サブセットの不揮発性記憶素子のうちプログラミングからまだロックアウトされていない不揮発性記憶素子のそれぞれのビットラインの電圧をステップアップする。別の実施形態において、不揮発性記憶システムは、1セットのプログラムパルスを1セットの不揮発性記憶素子に印加する手段を含み、ここにおいて、前記1セットの不揮発性記憶素子のうちの各不揮発性記憶素子が1つのビットラインにそれぞれ接続されており、前記1セットの不揮発性記憶素子は複数の異なる複数のサブセットの不揮発性記憶素子を含む。各サブセットは、複数の目標データ状態のうちの1つの目標データ状態の1つの検証レベルVva,Vvb,Vvcにそれぞれプログラムされ、1つの目標データ状態の1つの検証レベルにそれぞれプログラムされる1サブセットの不揮発性記憶素子を含む。この不揮発性記憶システムは、1セットのプログラムパルス中において、第1のトリガ条件が1サブセットの不揮発性記憶素子に対して満たされたときを判定する手段を更に含む。この不揮発性記憶システムは、第1のトリガ条件が満たされたときに、前記1セットのプログラムパルスのうち複数の連続するプログラムパルスの各プログラムパルスと足並みを揃えて、前記1サブセットの不揮発性記憶素子のプログラミングからまだロックアウトされていない不揮発性記憶素子のそれぞれのビットラインの電圧をステップアップする手段を更に含む。別の実施形態において、1セットの不揮発性記憶素子をプログラミングするための方法は、1セットのプログラムパルスを前記1セットの不揮発性記憶素子に印加するステップを含む。ここにおいて、前記1セットの不揮発性記憶素子のうちの各不揮発性記憶素子は、1つのビットラインにそれぞれ接続されている。前記1セットの不揮発性記憶素子は、複数の異なるサブセットの不揮発性記憶素子を含む。各サブセットは、複数の目標データ状態のうち1つの目標データ状態の1つの検証レベルにそれぞれプログラムされる。各サブセットは、1つの目標データ状態の1つの検証レベルにプログラムされる1サブセットの不揮発性記憶素子を含む。この方法は更に、前記1セットのプログラムパルスのうち複数の連続するプログラムパルスの各プログラムパルスと足並みを揃えて、前記1サブセットの不揮発性記憶素子のうちプログラミングからまだロックアウトされていない不揮発性記憶素子のそれぞれのビットラインの電圧をステップアップするステップと、前記1セットのプログラムパルス中において前記1サブセットの不揮発性記憶素子に対して第1のトリガ条件が満たされたときを判定するステップと、前記トリガ条件が満たされたときに、前記1セットのプログラムパルスの1つ又は複数の付加的なプログラムパルスの各プログラムパルスにおいて前記電圧を固定するステップを含む。別の実施形態において、対応する不揮発性記憶システムは、1セットの不揮発性記憶素子を含む。この1セットの不揮発性記憶素子は、前記1セットの不揮発性記憶素子複数の異なるサブセットの不揮発性記憶素子を含む。各サブセットは、複数の目標データ状態のうち1つの目標データ状態の1つの検証レベルにそれぞれプログラムされる。各サブセットは、1つの目標データ状態の1つの検証レベルにプログラムされる1サブセットの不揮発性記憶素子を含む。それぞれのビットラインは各不揮発性記憶素子に接続されている。少なくとも一つの制御回路が、a1セットのプログラムパルスを前記1セットの不揮発性記憶素子に印加し、b前記1セットのプログラムパルスのうちの複数の連続するプログラムパルスの各プログラムパルスと足並みを揃えて、前記1サブセットの不揮発性記憶素子のうちのプログラミングからまだロックアウトされていない不揮発性記憶素子のそれぞれのビットラインの電圧をステップアップし、c前記1セットのプログラムパルス中に、前記1サブセットの不揮発性記憶素子に対してトリガ条件が満たされたときを判定し、d前記トリガ条件が満たされたときに、前記1セットのプログラムパルスの1つ又は複数の付加的なプログラムパルスの各プログラムパルスにおいて前記電圧を固定する。対応する方法、本明細書において提供された方法を実施するためのシステム、並びにコンピュータ若しくはプロセッサ可読の記憶デバイスが提供される。上記本発明の詳細な説明は、説明のための例示にすぎない。上記本発明の詳細な説明は、詳細に開示した範囲に限定するものではない。本明細書が開示する技術は、上記の教示に基づき様々に変形、変更し得る。上記説明した実施形態は、本発明の原理とその具体的な適用例をよく説明するために選ばれたものであり、当業者は、具体的な事例に則して本発明を様々に変更し得る。本発明の技術的範囲は、添付された特許請求の範囲によって定まるものである。"