"不揮発性記憶システムにおけるプログラミングの方法であって、1セットの不揮発性記憶素子300うちの選択された不揮発性記憶素子に関するプログラミング動作において、複数セット910、920、930、940、950及び960のプログラムサブパルス912、914、916、918、922、924、926、928;932、934、936;942、944、946;952、954;962、964を前記選択された不揮発性記憶素子に印加するステップであって、前記1セットの不揮発性記憶素子が、1セットのワードラインWL0~WL63と通信し、前記複数セットのプログラムサブパルスが、前記1セットのワードラインのうちの選択されたワードラインを介して前記選択された不揮発性記憶素子に印加され、各セットのプログラムサブパルスが、共通の開始レベルVinitialからそれぞれのピークレベルVpeakに移行し、その後、前記共通の開始レベルに戻らずに前記共通の開始レベルと前記それぞれのピークレベルとの間にあるそれぞれの中間レベルVintに移行する初回サブパルス912、922、952、962と、それぞれの中間レベルVintからそれぞれのピークレベルVpeakに移行し、その後前記共通の開始レベルVinitialに移行する最終サブパルス918、928、946、954、964とを備えることを特徴とするステップと、前記複数セットのプログラムサブパルスのうちの少なくとも一つに続き、前記選択された不揮発性記憶素子のうちの少なくとも一つに対する前記プログラミング動作中に検証動作を実行するステップと、を含む方法。前記各セットのプログラムサブパルスの中の前記初回サブパルスと前記最終サブパルスとの間で、前記選択された不揮発性記憶素子に対する検証動作が実行されない請求項1に記載の方法。前記複数セットのプログラムサブパルスのうちの少なくとも一つが、前記初回サブパルスと前記最終サブパルスとの間に追加サブパルス914、916;924、926;934;944を備えており、前記追加サブパルスが、それぞれの中間レベルからそれぞれのピークレベルに移行し、その後前記追加サブパルスの前記それぞれの中間レベルに戻る請求項1又は2に記載の方法。前記複数セットのプログラムサブパルスのうちの少なくとも一つが、N>1である整数N個のサブパルス914、916;924、926を備えており、前記複数セットのプログラムサブパルスのうちのその後の他の少なくとも一つが、整数M個のサブパルス934;944を備えており、1<M<Nである請求項1~3のいずれか一項に記載の方法。目標データ状態Vva、Vvb、Vvcへのプログラミングの完了度に基づき、前記複数セットのプログラムサブパルスのうちの前記少なくとも一つから、前記複数セットのプログラムサブパルスのうちの他の少なくとも一つに移行するステップをさらに含む請求項1~4のいずれか一項に記載の方法。前記複数セットのプログラムサブパルスのうちの指定された数が前記プログラミング動作において印加されたときに、前記複数セットのプログラムサブパルスのうちの前記少なくとも一つから、前記複数セットのプログラムサブパルスのうちの他の少なくとも一つに移行するステップさらに含む請求項1~5のいずれか一項に記載の方法。各セットのプログラムサブパルスにおけるサブパルスの数が、前記プログラミング動作中に時間の経過に伴って定量的に減少する請求項1~6のいずれか一項に記載の方法。各セットのプログラムサブパルスの中のサブパルスの振幅Vpeak1、Vpeak2、Vpeak3が、前記プログラミング動作中に時間の経過に伴って定量的に増大する請求項1~7のいずれか一項に記載の方法。前記プログラミング動作に関して、前記選択された不揮発性記憶素子に複数セットのプログラムサブパルスを前記印加するステップから、少なくとも一つの孤立パルスを印加するステップに移行するステップと、前記少なくとも一つの孤立パルスに続いて、前記選択された不揮発性記憶素子のうちの前記少なくとも一つに対する検証動作を実行するステップ、をさらに含む請求項1~8のいずれか一項に記載の方法。前記移行するステップが、目標データ状態に対するプログラミングの完了度に基づいて行われる請求項9に記載の方法。前記移行するステップが、印加された前記複数セットのプログラムサブパルスの数に基づいて行われる請求項9に記載の方法。不揮発性記憶システムであって、1セットの不揮発性記憶素子300と、前記1セットの不揮発性記憶素子のうちの選択された不揮発性記憶素子と通信する選択されたワードラインを含んでおり、前記1セットの不揮発性記憶素子と通信する1セットのワードラインWL0~WL63と、前記選択された不揮発性記憶素子に関わるプログラミング動作に関して、前記1セットのワードラインと通信する少なくとも一つの制御回路410と、を備えており、前記少なくとも一つの制御回路が、前記選択されたワードラインを介して、複数セット910、920、930、940、950及び960のプログラムサブパルス912、914、916、918;922、924、926、928;932、934、936;942、944、946;952、954;962、964を前記選択された不揮発性記憶素子に印加するステップであって、各セットのプログラムサブパルスが、共通の開始レベルVinitialからそれぞれのピークレベルVpeakに移行し、その後、前記共通の開始レベルに戻らずに前記共通の開始レベルと前記それぞれのピークレベルとの間にあるそれぞれの中間レベルVintに移行する初回サブパルス912、922、952、962と、それぞれの中間レベルVintからそれぞれのピークレベルVpeakに移行し、その後前記共通の開始レベルVinitialに移行する最終サブパルス918、928、946、954、964とを備えることを特徴とするステップと、前記複数セットのプログラムサブパルスのうちの少なくとも一つに続き、前記選択された不揮発性記憶素子のうちの少なくとも一つに対する前記プログラミング動作中に検証動作を実行するステップ、を実行する不揮発性記憶システム。前記各セットのプログラムサブパルスの中の前記初回サブパルスと前記最終サブパルスとの間で、前記選択された不揮発性記憶素子に対する検証動作が実行されない請求項12に記載の不揮発性記憶システム。各セットのプログラムサブパルスにおけるサブパルスの数が、前記プログラミング動作中に時間の経過に伴って定量的に減少する請求項12又は13に記載の不揮発性記憶システム。各セットのプログラムサブパルスの中のサブパルスの振幅Vpeak1、Vpeak2、Vpeak3が、前記プログラミング動作中に時間の経過に伴って定量的に増大する請求項12~14のいずれか一項に記載の不揮発性記憶システム。しかしながら、メモリデバイスの小型化が進むと、正確なプログラミングが困難になる。複数セットのサブパルスを使用するプログラミング波形を提供することによってプログラムノイズを低減する方法及び不揮発性記憶システムが提供される。メモリシステムでは、プログラミング動作時に、ワードラインなどを介して、選択された1セットの不揮発性記憶素子にプログラミング波形が印加される。プログラミング波形は、鋸歯形を有する複数セットのサブパルスを含む。例えば、各々のセットは、複数の隣接サブパルスを含み得る。そこでは、あるセットにおけるサブパルス間で検証動作が実行されない。初回サブパルスは、0Vなどの初回レベルからピークレベルへとステップアップし、その後、初回レベルよりも高い中間レベルへとステップダウンする。そのセットの一つ以上の後続サブパルスが、中間レベルからピークレベルへとステップアップし、その後中間レベルへと再びステップダウンすることができる。そのセットの最終サブパルスは、中間レベルからピークレベルへとステップアップし、その後初回レベルへと再びステップダウンすることができる。そのセットのサブパルスが印加された後に検証動作が実行される。繰り返されるサブパルスを使用することで、初回レベルよりも高い中間レベルからステップアップ及びステップダウンすることによって実現される時間の節約により、性能への影響を最小限に抑えながらプログラムノイズを低減することができる。さらに、連続するセットにおいて、1セットあたりのサブパルスの数が減少し得る。そして、プログラミング動作の終わりにかけて孤立パルスが印加される。このようなことが受け入れられるのは、プログラミング動作の終わりにかけて、プログラミングを完了する上位の状態記憶素子の方がプログラムノイズに対して寛大であることが理由である。本発明を実装するのに適したメモリシステムの一例は、NANDフラッシュメモリ構造を使用するものであり、この構造は、2つの選択ゲート間に複数のトランジスタを直列に配置する。直列に配置されたトランジスタ及び選択ゲートは、NANDストリングと呼ばれる。図1aは、一つのNANDストリングを示す上面図である。図1bは、図1aのNANDストリングの等価回路図である。図1a、図1bに図示されたNANDストリングは、直列に接続されており、第1の選択ゲート120と第2の選択ゲート122の間に挟まれている4つのトランジスタ100、102、104、及び106を含む。選択ゲート120は、NANDストリングをビットライン126に接続する。選択ゲート122は、NANDストリングをソースライン128に接続する。選択ゲート120は、制御ゲート120CGに適切な電圧が印加されることによって制御される。選択ゲート122は、制御ゲート122CGに適切な電圧が印加されることによって制御される。トランジスタ100、102、104及び106のそれぞれは制御ゲート及びフローティングゲートを有する。トランジスタ100は、制御ゲート100CG及びフローティングゲート100FGを有する。トランジスタ102は制御ゲート102CG及びフローティングゲート102FGを有する。トランジスタ104は、制御ゲート104CG及びフローティングゲート104FGを有する。トランジスタ106は、制御ゲート106CG及びフローティングゲート106FGを有する。制御ゲート100CGは、ワードラインWL3に接続されており、制御ゲート102CGはワードラインWL2に接続されており、制御ゲート104CGはワードラインWL1に接続されており、制御ゲート106CGはワードラインWL0に接続されている。一実施形態では、トランジスタ100、102、104及び106は、それぞれ、メモリセルである。他の実施形態では、メモリセルは、複数のトランジスタを有していることも、あるいは、図示されているのとは異なることもある。選択ゲート120は、選択ラインSGDに接続されている。選択ゲート122は、選択ラインSGSに接続されている。図1cは、図1aのNANDストリングの断面図である。NANDストリングのトランジスタはp-ウェル領域140に形成されている。p-ウェル領域は、代わりにp-タイプ基板144のn-ウェル領域142内にあってもよい。各トランジスタは、制御ゲート100CG、102CG、104CG、及び106CGとフローティングゲート100FG、102FG、104FG、及び106FGから構成される積層ゲート構造を有している。フローティングゲートは、p-ウェルの表面に、酸化膜又は他の誘電体膜の上に形成される。制御ゲートはフローティングゲートの上にあり、ポリシリコン間の誘電体層が制御ゲート及びフローティングゲートを分離している。メモリセル100、102、104及び106の制御ゲートは、ワードラインを形成している。Nドープ層130、132、134、136、及び138が、隣接するセルの間で共有され、これによってセルが互いに直列に接続されており、NANDストリングを形成している。これらのNドープ層は、各セルのソース及びドレインを構成している。例えば、Nドープ層130はトランジスタ122のドレイン及びトランジスタ106のソースとしての機能を果たし、Nドープ層132はトランジスタ106のドレイン及びトランジスタ104のソースとしての機能を果たし、Nドープ層134はトランジスタ104のドレイン及びトランジスタ102のソースとしての機能を果たし、Nドープ層136はトランジスタ102のドレイン及びトランジスタ100のソースとしての機能を果たし、Nドープ層138はトランジスタ100のドレイン及びトランジスタ120のソースとしての機能を果たす。Nドープ層126は、NANDストリングに対するビットラインに接続される。一方、Nドープ層128は、複数のNANDストリングに対する一つの共通ソースラインに接続される。なお、図1a~図1cは、NANDストリングにおける4つのメモリセルを示しているが、4つのトランジスタを使用することは、一例として提供されているに過ぎない。本明細書に記載されている技術で使用されるNANDストリングのメモリセルは、4つより多い場合も少ない場合もあり得る。例えば、NANDストリングによっては、最大64個以上のメモリセルを含む。各メモリセルは、アナログ形式又はデジタル形式で表されるデータを記憶できる。1ビットのデジタルデータを記憶するとき、メモリセルの可能な閾値電圧の範囲は、論理データ1及び0が割り当てられる2つの範囲に分割される。NANDタイプのフラッシュメモリの一例では、電圧閾値は、メモリセルが消去された後に負となり、論理1として定義される。プログラム動作後に閾値電圧は正となり、論理0として定義される。閾値電圧が負であり、制御ゲートに0ボルトを印加することにより読み出しが試行されると、メモリセルがオンして論理1が記憶されていることが示される。閾値電圧が正であり、制御ゲートに0ボルトを印加することにより読み出し動作が試行されると、メモリセルはオンせず、論理ゼロが記憶されることが示される。メモリセルは、複数の状態を記憶し、それによって複数ビットのデジタルデータを記憶することもできる。データの複数の状態を記憶するケースでは、閾値電圧のウィンドウは状態の数に分割される。例えば、4つの状態が使用される場合、データ値11、10、01、及び00に割り当てられる4つの閾値範囲がある。NANDタイプメモリの一例では、消去動作後の閾値電圧は負であり、11として定義される。正の閾値電圧は10、01、及び00の状態のために使用される。いくつかの実装例では、フローティングゲートの閾値電圧が誤って隣の物理状態にシフトしても、1ビットだけが影響を受けるように、データ値例えば、論理状態は、グレーコード割り当てを使用して閾値範囲に割り当てられる。メモリセルにプログラムされたデータと、セルの閾値電圧範囲の間の特殊な関係は、メモリセルのために採用されるデータ符号化方式に依存する。NANDフラッシュメモリに加え、他のタイプの不揮発性メモリを本発明で使用することもできる。フラッシュEEPROMシステムで役立つ別のタイプのメモリセルは、不揮発的に電荷を蓄えるために、導電性のフローティングゲートの代わりに非導電性の誘電材料を用いる。酸化ケイ素、窒化ケイ素、及び酸化ケイ素ONOから形成される三層誘電体が、導電性の制御ゲートと、メモリセルチャネル上の半導体基板との表面の間に挟まれる。セルは、セルチャネルから窒化物に電子を注入することによってプログラムされ、電子は限られた領域内に閉じ込められ、蓄えられる。次に、この蓄えられた電荷が、検出可能な態様で、セルのチャネルの一部の閾値電圧を変化させる。セルは、窒化物の中にホットホールを注入することによって消去される。ドープされたポリシリコンゲートがメモリセルチャネルの一部の上に延在していることで別個の選択トランジスタが形成されている分割ゲート構造の類似するセルが提供される。別のアプローチでは、ONO誘電体層がソース拡散とドレイン拡散との間のチャネルを横切って延在する各NROMセルに2ビットが記憶される。1データビットの電荷は、ドレインに隣接する誘電体層に局所化され、他のデータビットの電荷はソースに隣接する誘電体層に局所化される。マルチ状態データ記憶は、誘電体内の空間的に分離された電荷蓄積領域のバイナリ状態を別々に読み出すことによって実現される。図2は、NANDフラッシュメモリセルの1ブロックを示し、ブロックは、図1a~図1cに示すようなNANDストリングで構成される。ブロックは、いくつかのNANDストリングと、それぞれのビットライン、例えばBL0、BL1、...と、を含む。各NANDストリングは、一端でドレイン選択ゲートSGDに接続されており、ドレイン選択ゲートの制御ゲートは共通のSGDラインを介して接続されている。NANDストリングは、他端でソース選択ゲートに接続されており、これによって共通ソースラインに接続されている。任意のダミーワードラインを含むいくつかのワードラインが、ソース選択ゲートとドレイン選択ゲートとの間に延在している。一ブロック例では、ビットラインBL0、BL1、...BL8511に対応する8,512の列が存在する。図3は、図2のブロックなど複数のブロックを備えるメモリアレイ300を示す。一例として、M=1,024個のブロックに区分け割されるNANDフラッシュEEPROMが記載されている。各ブロックに記憶されたデータは同時に消去することができる。一実施形態において、ブロックは、同時に消去される記憶素子の最小単位である。記憶素子は、ソースライン及びビットラインをフローティングさせている間に、p-ウェルを消去電圧例えば14~22Vに引き上げ、選択されたブロックのワードラインを接地することによって消去することができる。消去は、メモリアレイ全体、別々のブロック、又はメモリデバイスの一部分である記憶素子の別の単位で実行できる。消去中に、電子が記憶素子のフローティングゲートからp-ウェル領域に移され、記憶素子のVthが負となる。選択された記憶素子のトンネル酸化物層に強力な電界が印加され、ファウラ-ノルドハイムトンネルメカニズムによってフローティングゲートの電子が基板側に放出されるにつれて、選択された記憶素子のデータが消去される。電子がフローティングゲートからp-ウェル領域に移されるにつれて、選択された記憶素子の閾値電圧が引き下げられる。図4は、単一行/列デコーダ及び読み出し/書き込み回路を使用する不揮発性メモリシステムのブロック図である。同図は、一実施形態に従って記憶素子のページを同時に読み出し、プログラムするための読み出し/書き込み回路を有するメモリ素子496を示す。メモリ素子496は、一つ以上のメモリダイ498を有する。メモリダイ498は、図3に示すような記憶素子の二次元アレイ300と、制御回路410と、読み出し/書き込み回路465とを含む。いくつかの実施形態では、記憶素子のアレイは三次元である場合がある。メモリアレイ300は行デコーダ430を介してワードラインによって、及び列デコーダ460を介してビットラインによってアドレスできる。読み出し/書き込み回路465は複数の検出ブロック400を有しており、1ページの記憶素子を並列に読み出し又はプログラムすることができる。一般に、制御部450は、一つ以上のメモリダイ498のように同じメモリ素子496例えば、取り外し可能なストレージカード内に含まれる。コマンド及びデータは、ライン420を介してホストと制御部450の間及びライン418を介して制御部と一つ以上のメモリダイ498との間で送られる。制御回路410は、読み出し/書き込み回路465と協調して、メモリアレイ300上でメモリ動作を実行する。制御回路410は、状態マシン412、オンチップアドレスデコーダ414、及び電力制御モジュール416を含む。状態マシン412は、メモリ動作のチップレベル制御を提供する。オンチップアドレスデコーダ414は、ホスト又はメモリコントローラによって使用されるとともに、デコーダ430と460によって使用されるハードウェアアドレスの間にアドレスインタフェースを提供する。電力制御モジュール416は、メモリ動作中、ワードライン及びビットラインに供給される電力及び電圧を制御する。いくつかの実装例では、図4の構成要素のいくつかを組み合わせることができる。多様な設計では、記憶素子アレイ300以外の単独又は組み合わせた一つ又は複数の構成要素を、管理回路つまり制御回路と見なすことができる。例えば、一又は複数の管理回路又は制御回路は、制御回路410、状態マシン412、デコーダ414/460、電力制御416、検出ブロック400、読み出し/書き込み回路465、制御部450等のうちの任意の一又は組み合わせを含んでもよい。本明細書に述べられるように、一つ以上の管理回路又は制御回路が消去動作を提供することができる。別の実施形態では、不揮発性メモリシステムは、二重の行/列デコーダ及び読み出し/書き込み回路を使用する。メモリアレイ300に対する種々の周辺回路によるアクセスは、アレイの対向する側で対称的に実施され、これによって各側のアクセスライン及び回路の密度が半減される。したがって、行デコーダは2つの行デコーダに分割されており、列デコーダは2つの列デコーダに分割されている。同様に、読み出し/書き込み回路は底部からビットラインに接続する読み出し/書き込み回路と、アレイ300の上部からビットラインに接続する読み出し/書き込み回路に分割される。このようにして、読み出し/書き込みモジュールの密度は、基本的に2分の1、削減される。図5は、1セットの閾値電圧分布及びワンパスプログラムの例を示す。記憶素子アレイのための例示の閾値電圧分布は、各記憶素子が2ビットのデータを記憶する場合に提供される。第1の閾値電圧分布500は、消去された状態E記憶素子を表す。3つの閾値電圧分布502、504、及び506は、それぞれプログラムされた状態A、B及びCを表す。一実施形態では、E分布内の閾値電圧は負であり、A、B及びC分布内の閾値電圧は正である。特定の状態にある記憶素子の数は、その閾値電圧が対応する検証レベルを上回るとされた記憶素子をカウントすることによって、特定することができる。それぞれの独立した閾値電圧範囲は、1セットのデータビットの所定値に対応する。記憶素子にプログラムされたデータと記憶素子の閾値電圧レベルの特定の関係は、記憶素子のために採用されるデータ符号化方式に依存する。一実施形態では、フローティングゲートの閾値電圧が誤ってその隣の物理状態にシフトすると、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以上の閾値電圧を有するかどうかをテストする。一般に、目標データ状態に達していない記憶素子が少ない場合でも、所与の目標データ状態例えば、A、B又はCにパスするために検証動作を検討することができる。これらはビット無視記憶素子と呼ばれ、区分502、504及び506の領域501、503及び505によってそれぞれ表される。制御により、あるデータ状態に対するビット無視記憶素子の数が指定レベルよりも少ないかどうかを判定し、検証パスを宣言することができる。あるいは、制御により、あるデータ状態に対するビット無視記憶素子の数が別の指定レベルよりも多いかどうかを判定し、検証パスを宣言することができる。また、特定のデータ状態と関連付けられていない検証レベルを使用して、具体的な制御アクションをトリガーすることもできる。例えば、指定された数の記憶素子のVthが検証レベルを超えたかどうかに基づいて、異なるプログラムモードを設定することができる。一実施形態では、フルシーケンスプログラムとして知られるが、記憶素子は、消去状態Eからプログラム状態A、B又はCの何れかに直接的にプログラムされる。例えば、まず、プログラムされる記憶素子の集合中の全ての記憶素子が消去状態Eとなるように、当該集合が消去される場合がある。図9aに示される一連のプログラムパルスは、記憶素子を直接的に状態A、B、又はCにプログラムするために使用される。いくつかの記憶素子は状態Eから状態Aにプログラムされ、他の記憶素子は状態Eから状態Bに、及び/又は、状態Eから状態Cにプログラムされる。WLn上で状態Eから状態Cにプログラムするときには、WLn下のフローティングゲート上の電荷の量の変化が、状態Eから状態Aに、又は、状態Eから状態Bにプログラムするときの電荷の変化と比較して最大となるので、WLn―1下の隣接フローティングゲートに対する寄生結合の量は最大値に達する。状態Eから状態Bにプログラムするときは、隣接フローティングゲートへの結合の量はより少ない。状態Eから状態Aにプログラムするときは、結合の量はさらに削減される。さらに、全ビットラインプログラミング又は奇数-偶数プログラミングを使用することができる。全ビットラインプログラミングの場合、例えば全てのビットラインなど、選択されたワードラインの全ての記憶素子が、プログラムパルスの同じパルス列を使用して同時にプログラムされる。奇数-偶数プログラミングの場合には、奇数のビットラインと関連付けられた選択されたワードラインの記憶素子が、偶数のビットラインと関連付けられた選択されたワードラインの記憶素子とは別にプログラムされる。図6は、2つの異なるページ下側ページと上側ページに対してデータを記憶するマルチ状態記憶素子をプログラムするツーパス技術の一例を示している。図5の閾値電圧分布500、502、504及び506の繰り返しで4つの状態が示されている。これらの状態及びその示すビットは、状態E11、状態A10、状態B00及び状態C01である。状態Eの場合、両方のページが1を記憶する。状態Aの場合、下側ページが0を記憶し、上側ページが1を記憶する。状態Bの場合、両方のページが0を記憶する。状態Cの場合、下側ページが1を記憶し、上側ページが0を記憶する。なお、各状態に対して特定のビットパターンが割り当てられているが、異なるビットパターンを割り当てることも可能であることに注意する。第1プログラムパスでは、記憶素子の閾値電圧レベルが、下側の論理ページにプログラムされるビットに応じて設定される。そのビットが論理1であれば、以前に消去された結果として適切な状態にあるので閾値電圧は変更されない。しかし、プログラムされるビットが論理0であれば、矢印600で示したように、記憶素子の閾値レベルは状態Aになるように増大される。これによって、第1プログラムパスを終了する。第2プログラムパスでは、記憶素子の閾値電圧レベルが、上側論理ページ内にプログラムされるビットに応じて設定される。上側論理ページビットが論理1を記憶する場合、記憶素子は下側ページビットのプログラムに依存する状態E又はAの一方であり、どちらも上側ページビットは1を保持するのでプログラムは生じない。上側ページビットが論理0となる場合、閾値電圧はシフトされる。第1パスによって記憶素子が消去状態Eに留まっていれば第2段階で記憶素子をプログラムし、矢印620で示したように閾値電圧が状態C内になるように増大させる。第1プログラムパスの結果として記憶素子が状態A内にプログラムされれば、記憶素子はさらに第2パスでプログラムされ、矢印610で示したように閾値電圧が状態B内になるように増大させる。第2パスの結果は、下側ページ用のデータを変更することなく、上側ページの論理0を記憶するように指定した状態に記憶素子をプログラムすることである。図5及び図6の両方において、隣接するワードライン上のフローティングゲートへの結合量は最終状態に依存する。一実施形態では、全ページを充填するのに十分なデータを書き込まれた場合、システムは全シーケンス書き込みを実行するように設定される。十分ではないデータが全ページに書き込まれた場合、プログラム処理は受け取ったデータを用いて下側ページプログラムを実行できる。次のデータを受け取ったときは、システムは上側ページをプログラムする。さらに別の実施形態では、システムは下側ページをプログラムするモードで書き込みを開始し、ワードラインの記憶素子の全体又は大部分を充填するために次の十分なデータを受け取った場合、全シーケンスプログラムモードに変換する。図6には、ビット無視記憶素子が示されていない。図7a~図7cは、前のページの隣接記憶素子に書き込んだ後で、特定のページに対してその特定の記憶素子を書き込むことによって、その特定の記憶素子に対するフローティングゲート間結合効果を低減する不揮発性メモリをプログラムする別の方法を開示している。実装形態の一例では、不揮発性記憶素子は、4つのデータ状態を用いて記憶素子毎に2ビットのデータを記憶する。例えば、状態Eが消去状態であり、状態A、B及びCがプログラム状態であると仮定する。状態Eはデータ11を記憶している。状態Aはデータ01を記憶している。状態Bはデータ10を記憶している。状態Cはデータ00を記憶している。両方のビットは隣接する状態A及びBの間で変化するので、これは非グレイ符号化の一例である。データの物理的データ状態への他の符号化を用いることもできる。各記憶素子は2ページ分のデータを記憶する。参照のために、これらのページのデータは上側ページ及び下側ページと呼ばれるが、他のラベルを与えることもできる。状態Aを参照すると、上側ページはビット0を記憶し、下側ページはビット1を記憶している。状態Bを参照すると、上側ページはビット1を記憶し、下側ページはビット0を記憶している。状態Cを参照すると、両方のページがビットデータ0を記憶している。プログラム処理は、2つのステップの処理である。第1ステップでは、下側ページをプログラムする。下側ページがデータ1のままである場合、記憶素子状態は状態E分布700に留まる。データが0にプログラムされる場合、記憶素子の電圧の閾値は、記憶素子が状態B’分布710にプログラムされるように引き上げられる。したがって、図7aは、状態Eから状態B’への記憶素子のプログラムを示している。状態B’は暫定的状態Bであり、したがって、検証点はVvb’として示され、Vvbより低い。一実施形態では、状態Eから状態B’に記憶素子をプログラムした後、NANDストリング内の隣接記憶素子WLn1をその下側ページに対してプログラムする。これは、図7bの閾値電圧分布712に示したように状態B’の閾値電圧分布を拡大する効果を有する。閾値電圧分布のこの見かけの拡大は、上側ページをプログラムする際に修正される。また、状態Eは、分布702によって示されるように、広げられてもよい。図7cは、上側ページをプログラムする工程を示している。記憶素子が消去状態Eであって上側ページが1に留まる場合、記憶素子は状態E分布702に留まる。記憶素子が状態Eであり、その上側ページデータが0にプログラムされる場合、記憶素子の閾値電圧は上昇し、記憶素子は状態A分布704になる。記憶素子が中間の閾値電圧分布712であって上側ページデータが1に留まる場合、記憶素子は最終状態B分布706にプログラムされる。記憶素子が中間の閾値電圧分布712であって上側ページデータがデータ0になる場合、記憶素子の閾値電圧は上昇し、記憶素子は状態C分布708になる。図7a~図7cに示す工程は、隣接する記憶素子への上側ページのプログラムのみが、所与の記憶素子の明確な閾値電圧に影響を与えるようになるので、フローティングゲートのフローティングゲートカップリングへの影響を低減することができる。選択的な符号化の一例は、分布712を、上側ページデータが1であれば状態Cへ遷移させ、上側ページデータが0であれば状態Bへ遷移させる。図10aから図10cは、4つのデータ状態、及び、2ページのデータに関しての例を提供するが、教示される概念は、4つの状態より多い又は少なく、2ページより多い又は少ない他の実装例に印加できる。例えば、記憶素子毎に8つ又は16の状態のあるメモリ素子が、現在、計画されている、又は生産中である。図7a~図7cには、ビット無視記憶素子が示されていない。図8は、プログラムノイズによって拡張された閾値電圧区分に加えて、図5の閾値電圧区分のセットの一例を示す。同じ番号の構成要素は、図5と同じである。また、プログラムノイズによってもたらされる状態A、B及びCに対する拡張区分802、804及び806がそれぞれ示されている。一般に、NANDフラッシュメモリが小型化するにつれて、プログラムノイズが徐々に制御し難くなる。プログラムノイズの一つの主因は、フローティングゲート制御ゲート間の静電容量の減少であり、これによって電子あたりのVthシフトが決定される。静電容量が小さくなると、各々のプログラムパルスの印加時にフローティングゲートに注入される電子の平均数が減少するVthの増加が同じ場合。その結果、プログラミング中のプログラムノイズなどのΔVth変動が大きくなる。拡張したVth区分802、804及び806によって示されるように、大きなプログラムノイズにより、Vth区分の幅が広がる。これにより、マルチレベル記憶素子のデータ状態間のVthマージンが厳しく制限される。以下に詳述するマルチパルスプログラミング技法によって、プログラムノイズを大きく低減することができる特に、小型メモリデバイスの場合。図9aは、図8に示すプログラムノイズの低減を達成するために、選択されたワードラインに対してプログラム動作時に印加される複数セットのサブパルスを含むプログラミング波形例を示す。マルチパルスプログラミング技法において、各プログラム電圧Vpgmレベルで、一つのプログラムパルスを使用するのではなく、複数セットの複数のプログラムパルス又はサブパルスが繰り返し印加される。一般に、1セットあたりの使用サブパルスを増やすと、プログラムノイズが大きく低減され、その結果、Vth区分が狭まり得る。ただしこのメリットは、1セットあたりに使用されるサブパルスの数が一定数を超えると限界に達する。いくつかの実装例では、1セットあたりに使用されるサブパルスが約5を超えると、このメリットが限界に達する。例えば、1セットの記憶素子におけるメモリアレイ又はブロックといった共通ワードラインと関連付けられた記憶素子など選択された不揮発性記憶素子に、プログラミング波形900が印加され得る。プログラミング波形900は、連続するセット910、920、930、940、950及び960を含み、各々のセットは、1セットの2つ以上の隣接サブパルスである。例えば、セット910及び920は4つのサブパルスを各々含み、セット930及び940は3つのサブパルスを各々含み、セット950及び960は各々2つのサブパルスを含む。具体的には、セット910はサブパルス912、914、916及び918を含み、セット920はサブパルス922、924、926及び928を含む。セット930は、サブパルス932、934及び936を含み、セット940はサブパルス942、944及び946を含む。セット950はサブパルス952及び954を含み、セット960はサブパルス962及び964を含む。各々のセットは、初回サブパルス及び最終サブパルス、そして任意で初回サブパルスと最終サブパルスとの間にある一つ以上の中間のサブパルスを含む。そのため、複数セットのプログラムサブパルスのうちの少なくとも一つが整数N>1個のサブパルスを備え、以降、複数セットのプログラムサブパルスのうちの他の少なくとも一つが、整数M個のサブパルスを備える。ここで、1<M<Nである。例えば、N=4であればM=2又は3であり、N=3であればM=2である。各セットのプログラムサブパルスにおけるサブパルスの数は、プログラミング動作時に時間の経過に伴って定量的に減少する。一般に、1セットのプログラムサブパルスは、セット910、920、930、940、950及び960のうちのいずれかであり得る。そして別のセットのプログラムサブパルスは、セット910、920、930、940、950及び960のうちのその他いずれかであり得る。いくつかの実施形態では、1セットのプログラムサブパルスだけが使用される。これらのセットの各々に対し、その後、4状態メモリデバイスにおけるA、B及びC状態など、一つ以上の目標データ状態に対する検証動作が行われる。例えばセット910に対し、検証電圧919が続く。少なくとも1セットのサブパルスに続き、一つ以上の孤立パルス970、980及び990が印加され得る。孤立パルスとは、初回レベルから始まり、いかなる中間レベルでも止まることなくピークレベルにステップアップし、その後初回レベルにステップダウンする単一のプログラムパルスのことである。孤立プログラム電圧に続いて、検証電圧を印加することもできる。場合によっては、初期の複数セットのサブパルスについては低位のデータ状態例えば状態Aに対してのみ、中間の複数セットのサブパルスについては中位のデータ状態例えば状態A及びBに対してのみ、及び高い複数セットのサブパルス及び孤立パルスについては中位及び高位のデータ状態例えば状態B及びCに対してのみ、検証動作が実行される。なお、場合によっては、孤立パルスが印加される前に、プログラミング動作が完了し得る。一実施態様例では、第1のセットで4つ又は5つのサブパルスが使用される。セット内には検証電圧が存在しない。そのため、あるセットの最初のサブパルスと最終サブパルスとの間では検証動作が実行されない。プログラム時間を節約するために、サブパルスは、0Vなどの初回レベルに下がる必要がない。代わりに、サブパルスの後、プログラム電圧を放電すること、あるいは中間レベルまでステップダウンすることができ、そこから直ちに再び上昇させたり、ステップアップしたりすることができる。この方式を用いた結果、各セットのサブパルスは鋸形になり、各サブパルスが鋸の歯のように見える。プログラミング電圧900は、プログラミング動作が進むに従い、時間の経過に伴って1セットにおけるサブパルスの数を定量的に減らすことにより、プログラムディスターブを最小限に抑えながら、十分なチャネルブーストを許容するよう最適に調整することができる。定量的減少とは、減少がもたらされない複数のセットの後に減少がもたらされるように単調に減少することであり得る。具体的には、プログラムパルスの持続時間が比較的長いと、チャネルブーストが弱まり、その結果、不十分なブーストによるプログラムディスターブが比較的発生しやすい。ただし、プログラム電圧振幅が比較的低いときには、プログラムディスターブが脅威にならない。そのため、1セットあたり複数のサブパルスを使用することがブーストをある程度弱める場合であっても、プログラム電圧が高い振幅に達する前のプログラム動作の初期段階における低い振幅パルスには許容される。一つのオプションは、指定されたセット数のプログラムサブパルスがプログラミング動作時に印加されたときに、サブパルスが少ないセットに移行することである。例えば、4番目のセットで1セットあたり4つのサブパルスから1セットあたり3つのサブパルスに移行し、8番目のセットで1セットあたり3つのサブパルスから1セットあたり2つのサブパルスに移行するように判定され得る。さらに、指定されたセット数のプログラムサブパルスがプログラミング動作時に印加されたときに、孤立パルスへの移行が起こり得る。各々の移行は、例えば、サブパルスが一つ少ないセットへの移行であり得る。具体的には、プログラミング動作中にサブパルスが少ないセットに移行するための一実施態様例では、一定のプログラムセットパルス数が使用される。4状態の実施形態状態E、A、B及びCであれば、ステップサイズ又はΔVpgm=0.3Vと仮定する。これが、連続する複数セットのサブパルス間でのステップアップ量である。各々のセットは、例えば前のセットからステップアップすることができる。そのため、各セットのプログラムサブパルスにおけるサブパルスの振幅は、プログラミング動作時に時間の経過に伴って定量的に増大する。また、上側ページのプログラム時に全4状態のプログラミングを終了するのに、約20~24セットのサブパルスが必要であることも合わせて仮定する。この場合、多数のサブパルスから少数のサブパルスへの移行は、以下のようにして行うことができる。複数セットの4つのサブパルスからプログラミングを開始する。8番目のセットで、複数セットの3つのサブパルスに切り替える。14番目のセットで、複数セットの2つのサブパルスに切り替える。20番目のセットで、孤立パルスに切り替える。8番目及び14番目のセットでの移行は、指定されたセット数のプログラムサブパルスがプログラミング動作時に印加されたときに行われる、少なくとも1セットのプログラムサブパルスから他の少なくとも1セットのプログラムサブパルスへの移行であるとみなすことができる。20番目のセットでの移行は、少なくとも1セットのプログラムサブパルスから少なくとも一つの孤立パルスへの移行であるとみなすことができる。別のオプションは、サブパルスが少ないセット、あるいは孤立パルスに適合的に移行することである。例えば、適合的な移行は、目標データ状態へのプログラミングの完了度に基づき得る。プログラム動作が進むにつれて、多数の記憶素子又はビットが検証をパスし、通常は、関連付けられたビットライン電圧を引き上げることにより、それ以上プログラミングされないようにロックアウト又は禁止される。検証をパスする記憶素子の数に基づいて、少数のサブパルスへの移行、あるいは孤立パルスへの移行をトリガーすることができる。あるいは、検証をパスしていない記憶素子の数が、ビット無視レベル又は他の指定レベルよりも小さい場合に移行をトリガーすることができる。具体的には、プログラミング動作中にサブパルスが少ないセットに移行するための一実施態様例では、適合的な移行を一定のプログラムセットパルス数の移行と組み合わせて使用する。繰り返しになるが、4状態の実施形態状態E、A、B及びCであれば、ステップサイズ又はΔVpgm=0.3Vと仮定する。この場合、多数のサブパルスから少数のサブパルスへの移行は、以下のようにして行うことができる。複数セットの4つのサブパルスからプログラミングを開始する。8番目のセットで、複数セットの3つのサブパルスに切り替える。全てのA状態記憶素子例えば、A状態のビット無視記憶素子を除く全て、あるいはA状態記憶素子のその他一部の指定部分Vvaで検証をパスした後、複数セットの2つのサブパルスに切り替える。全てのB状態記憶素子例えば、B状態ビット無視記憶素子を除く全て、あるいはB状態記憶素子のその他一部の指定部分がVvbで検証をパスした後、孤立パルスに切り替える。全てのA状態記憶素子がそれぞれの検証レベルをパスした場合の移行は、目標データ状態A状態へのプログラミングの完了度に基づく、少なくとも1セットのプログラムサブパルスから他の少なくとも1セットのプログラムサブパルスへの移行とみなすことができる。全てのB状態記憶素子がそれぞれの検証レベルをパスしたときに行われる移行は、目標データ状態B状態へのプログラミングの完了度に基づく、少なくとも1セットのプログラムサブパルスから少なくとも一つの孤立プログラムパルスへの移行とみなすことができる。記憶素子を追跡することによってサブパルスが少ないセット、あるいは孤立パルスへの移行をトリガーすることは、メモリデバイスにおいて時間の経過に伴って発生し得る様々な動作上の変化を説明する適合的なアプローチである。例えば、メモリデバイスが蓄積するプログラム-消去サイクルが増えていくにつれて、記憶素子が、例えば少数のプログラムパルスで速くプログラムされ、その結果、移行が早く行われ得る。さらに、様々なメモリデバイス、あるいはメモリアレイ内の様々な記憶素子ブロック、場合によっては様々なワードラインまでもが、様々な速度でプログラムすることができる。適合的な移行は、かかる変化を自動的に調節する。一般に、選択されたワードラインと通信する記憶素子の目標データ状態は、均一に分布する。例えば4つのデータ状態の場合、記憶素子の約4分の1はE状態のままであり、約4分の1はA状態にプログラムされ、約4分の1はB状態にプログラムされ、約4分の1はC状態にプログラムされる。そのため、状態Bがトリガー状態であり、Vvbが対応する目標検証レベルであれば、B状態に達すると期待される記憶素子の数がわかる。トリガー状態の記憶素子の任意の所望部分に基づいて移行を行うことができる。さらに、プログラム動作時に移行をトリガーするのを早めるには、トリガー状態の記憶素子の小さい部分を使用すればよい。同様に、プログラム動作時に移行をトリガーするのを遅らせるには、トリガー状態の記憶素子の大きな部分を使用すればよい。また、データ状態と関連付けられていないトリガー検証レベルを、サブパルスが少ないセット、あるいは孤立パルスに移行するためのトリガーとして使用することも可能である。これにより、移行の開始時期を判断する際の柔軟性を高めることができる。さらに、1セットあたりN個のサブパルスからN-1またそれ以下のサブパルスに移行する際に、元の定常状態が崩れる。移行中、Vthの変化ΔVthは、あるセットから次のセットまでのステップ増分ΔVpgmよりも少し小さいであろう。この小さなΔVthは、移行中の過剰プログラミングを防ぐ傾向がある。一般に、各々のセットにおけるサブパルスの振幅は、プログラミング動作が進むに従い、時間の経過に伴ってそのセットで定量的に増大し得る。一定又は可変ステップサイズを使用することができる。移行という観点から、1セットあたりのサブパルスは段階的に減らしてもよい。さらに、プログラム動作の終了段階で孤立パルスに移行してもよい。最終段階では、最高位の状態にある少数のビットだけが、依然としてロックアウトされていない。孤立パルスプログラミングを用いることにより、プログラムノイズが高い場合であっても、この時点では、最高位の状態を少し広げることしかできない可能性が高い。また、高いVpgmに達したら、強いブーストのためにはプログラム期間が短い方が好ましいため、プログラムの最後に孤立パルスを使用することが、プログラムディスターブのリスクを低減するのに役立ち得る。全体として、マルチパルスプログラミングを用いることにより、プログラム時間を過度に増やすことなくプログラムノイズを低減することができる。さらに、記憶素子が、不十分なブーストディスターブに対して脆弱にならない。図9bは、図9aに示すサブパルスのセット910のさらなる詳細を示す。セット910は、共通の開始又は初回レベル例えば0Vからそれぞれのピークレベル例えばVpgm=Vpeakに、その後、初回レベルに戻らずに、初回レベルとそれぞれのピークレベルとの間にあるそれぞれの中間レベル例えばVintに移行する初回サブパルス912を含む。このセットはまた、それぞれの中間レベルからからそれぞれのピークレベルに、その後共通の開始レベルに移行する最終サブパルス918も含む。一つのアプローチでは、初回サブパルス及び最終サブパルスのそれぞれの中間レベルが同じである。このセットは、初回サブパルス912と最終サブパルス918との間に少なくとも一つの追加サブパルスをさらに含む。追加サブパルスは、それぞれの中間レベルVintからそれぞれのピークレベルVpeakに移行し、その後追加サブパルスのそれぞれの中間レベルVintに戻る。図9cは、図9aに示す複数セットのサブパルスの代替としての代替セットのサブパルスを示す。図9aに示すプログラミング波形例900の一態様は、1セットにおける各サブパルスのピーク振幅及び中間振幅が同じであるということである。さらに、各サブパルスの期間が同じである。別のオプションでは、1セットにおけるサブパルスの期間が異なり得る。例えば図9cでは、サブパルス991が最長期間を有し得るのに対し、サブパルス922は次に長い期間を有し、サブパルス993は最短期間を有する。図9dは、図9aの複数セットのサブパルスの代替としての別の代替セットのサブパルスを示す。ここでは、1セットにおける各サブパルスのピーク振幅及び中間振幅が様々である。例えば、サブパルス995が最も低い振幅Vpeak1を有し得るのに対し、サブパルス996はそれよりも高い振幅Vpeak2を有し、サブパルス997は最も高い振幅Vpeak3を有する。さらに、サブパルス995は、VinitialからVpeak1にステップアップし、その後、それぞれの中間レベルであるVint1にステップダウンする。サブパルス996は、それぞれの中間レベルであるVint1からVpeak2にステップアップし、その後、別のそれぞれの中間レベルであるVint2にステップダウンする。サブパルス997は、それぞれの中間レベルであるVint2からVpeak3にステップアップし、その後Vinitialにステップダウンする。Vint1=Vint2である場合など、他のバリエーションもあり得る。図10は、図9aなどに記載された複数セットのサブパルスを使用して不揮発性メモリをプログラムするための方法の一実施形態を記載したフローチャートである。ステップ1000で、コントローラによってデータロードコマンドが発行され、入力が制御回路410図4によって受信される。ステップ1002で、ページアドレスを指定するアドレスデータが、コントローラ又はホストからデコーダ414に入力される。ステップ1004で、アドレス指定されたページ用のプログラムデータのページが、プログラミングのためにデータバッファに入力される。そのデータは、適切な1セットのラッチでラッチされる。ステップ1006で、コントローラによってプログラムコマンドが状態マシン412に発行される。ステップ1004でラッチされたデータは、プログラムコマンドによってトリガーされ、例えば適切な選択されたワードラインに印加される図9aのプログラミング波形900に示す複数セットのステップ変動プログラムパルスを使用して、状態マシン412によって制御された選択された記憶素子にプログラムされる。ステップ1008で、プログラム電圧Vpgmが初期値例えば12V又は他の値に初期化され、状態マシン412によって維持されるプログラムカウンタPCがゼロに初期化される。PCは、印加された複数セットのサブパルスと孤立パルスとの総数である。ステップ1010で、1セットあたりのサブパルスの初期数が設定される。図9aの実施例では、これが1セットあたり4つのサブパルスである。ステップ1016で、選択されたワードラインに1セットのプログラムサブパルスを印加して、選択されたワードラインと関連付けられた記憶素子のプログラミングを開始する。対応する記憶素子がプログラムされる必要があることを示す特定のデータラッチに論理0が記憶されている場合には、対応するビットラインが接地される。その一方で、対応する記憶素子が自身の現在のデータ状態に留まる必要があることを示す特定のラッチに論理1が記憶されている場合には、対応するビットラインがプログラミングを禁止するために1.5~3Vに接続される。ステップ1020で、選択された記憶素子の状態が検証動作で検証される。選択された記憶素子の目標閾値電圧が適切な検証レベルに達したことが検出されると、対応するデータラッチに記憶されたデータが論理1に変更される。閾値電圧が適切な検証レベルに達していないことが検出された場合には、対応するデータラッチに記憶されたデータが変更されない。このように、自身の対応するデータラッチに記憶された論理1を有するビットラインは、プログラムされる必要がない。データラッチの全てが論理1を記憶しているとき、状態マシンは、全ての選択された記憶素子がプログラムされたことを把握する。ステップ1022で、目標データ状態に達した記憶素子が追跡される。上記のとおり、これは、サブパルスが少ないセットへの移行及び/又は孤立パルスへの移行をトリガーする目的で使用される一つ以上のトリガーデータ状態に対して行われ得る。例えば、ステップ1022で、トリガー検証レベルに達していることが検証された追加記憶素子、あるいはトリガー検証レベルに達していることが検証されなかった追加記憶素子の数に基づいてカウントが更新され得る。このようにして、目標データ状態に対するプログラミングの完了度が判定される。ステップ1023で、ステップ1022に基づき、1セットあたりのサブパルスの数の変化、あるいは図9aに関して述べたような孤立パルスへの切り替えをトリガーする適合的基準が満たされたかどうかが判定される。4状態の実装例において、これは、例えば、検証レベルをパスしたA状態又はB状態記憶素子の数を含み得る。ステップ1024で、データラッチの全てが論理1を記憶しているかどうかが確認される。データラッチの全てが論理1を記憶していれば、検証動作にパスしたということであり、全ての選択された記憶素子がプログラムされ、かつ検査されたことから、プログラミング処理は完了し、成功している。パスという状態がステップ1026で報告される。いくつかの実施形態では、図5におけるビット無視領域に関して述べたとおり、一部の選択された記憶素子がプログラミング中であると検証されなかった場合であっても、プログラミング処理は完了し、成功したとみなされる。このような場合には、不十分にプログラムされた記憶素子が原因で、以降の読み込み動作中にエラーが発生し得る。ただし、これらのエラーはECCによって訂正することができる。ステップ1024で、データラッチの一部が論理1を記憶していないと判定された場合には、プログラミング処理が続行する。いくつかの実施形態では、データラッチの一部が論理1を記憶していない場合であっても、プログラム処理が停止する。判定ステップ1028で、プログラムカウンタPCがプログラム制限値PCmaxと照合される。プログラム制限値の一例は20だが、他の数を使用することもできる。プログラムカウンタPCがPCmaxよりも大きければ、プログラム動作は失敗しており、失敗という状態がステップ1030で報告される。プログラムカウンタPCがPCmax未満であれば、ステップ1032が実行され、プログラムカウンタPCが1増分されて、VpgmがステップサイズΔVpgmだけ増分される。この処理はステップ1011でも続行し、PCが1セットあたりのサブパルスの数の変化、あるいは孤立パルスへの切り替えをトリガーするかどうかが判定される。なお、1セットあたりの数が少ないサブパルスに切り替える時期及び/又は孤立パルスに切り替える時期を判定するにあたっては、固定的基準と適合的基準の両方が使用されるか、固定的基準だけが使用されるか、あるいは適合的基準だけが使用されるように、ステップ1011及び1022/1023が組み合わせて使用され得る。判定ステップ1012で、1セットのサブパルスを印加すべきか、あるいは孤立プログラムパルスを印加すべきかが判定される。このステップは、例えばステップ1011及び/又は1022/1023に応答することができる。判定ステップ1012で、別の1セットのサブパルスが印加されるべきと判定された場合には、ステップ1014でそのセットにおけるサブパルスの数が設定される。例えば、あるセットにおけるサブパルスの数は、前回のループから一定に保つか、あるいは変更することができる。ステップ1016で、次のセットのサブパルスが印加される。判定ステップ1012で、孤立パルスが印加されるべきと判定された場合には、ステップ1018で、選択されたワードラインに孤立パルスが印加される。どちらの場合でも、ステップ1020で検証動作が再度実行される。したがって、一実施形態では、不揮発性記憶システムにおけるプログラミングの方法が提供される。本方法は、1セットの不揮発性記憶素子のうちの選択された不揮発性記憶素子に関するプログラミング動作において、複数セットのプログラムサブパルスを選択された不揮発性記憶素子に印加することを含む。そのセットの不揮発性記憶素子は、1セットのワードラインと通信し、複数セットのプログラムサブパルスは、そのセットのワードラインのうちの選択されたワードラインを介して、選択された不揮発性記憶素子に印加される。各セットのプログラムサブパルスは、共通の開始レベル0Vからそれぞれのピークレベルに移行し、その後、開始レベルに戻らずに開始レベルとそれぞれのピークレベルとの間にあるそれぞれの中間レベルに移行する初回サブパルスと、それぞれの中間レベルからそれぞれのピークレベルに移行し、その後共通の開始レベルに移行する最終サブパルスと、を備える。本方法は、複数セットのプログラムサブパルスの少なくとも一つに続き、選択された不揮発性記憶素子のうちの少なくとも一つに対するプログラミング動作中に検証動作を実行することをさらに含む。別の実施形態では、不揮発性記憶システムが、1セットの不揮発性記憶素子と、そのセットの不揮発性記憶素子のうちの選択された不揮発性記憶素子と通信する選択されたワードライン等、そのセットの不揮発性記憶素子と通信する1セットのワードラインとを含む。少なくとも一つの制御回路が、そのセットのワードラインと通信する。少なくとも一つの制御回路は、選択された不揮発性記憶素子に関わるプログラミング動作に関して、選択されたワードラインを介して、複数セットのプログラムサブパルスを選択された不揮発性記憶素子に印加するステップを実施する。各セットのプログラムサブパルスは、共通の開始レベル0Vからそれぞれのピークレベルに移行し、その後、開始レベルに戻らずに、開始レベルとそれぞれのピークレベルとの間にあるそれぞれの中間レベルに移行する初回サブパルスと、それぞれの中間レベルからそれぞれのピークレベルに移行し、その後共通の開始レベルに移行する最終サブパルスを備える。少なくとも一つの制御回路はまた、それら複数セットのプログラムサブパルスのうちの少なくとも一つに続き、選択された不揮発性記憶素子のうちの少なくとも一つに対するプログラミング動作中に検証動作も実行する。別の実施形態では、不揮発性記憶システムにおけるプログラミングの方法が、1セットのプログラムサブパルスを1セットの不揮発性記憶素子のうちの選択された不揮発性記憶素子に印加するステップを含む。その1セットのプログラムサブパルスは、共通の開始レベル0Vからそれぞれのピークレベルに移行し、その後、開始レベルに戻らずに、開始レベルとそれぞれのピークレベルとの間にあるそれぞれの中間レベルに移行する初回サブパルスと、それぞれの中間レベルからそれぞれのピークレベルに移行し、その後共通の開始レベルに移行する最終サブパルスとを含むそれぞれの振幅を有する複数のサブパルスを備える。その後、本方法は、選択された不揮発性記憶素子に別のセットのプログラムサブパルスを印加することを含む。別のセットのプログラムサブパルスは、それぞれの振幅を有する複数のサブパルスを備えるが、前の1セットのプログラムサブパルスよりもサブパルスが少ない。別のセットのプログラムサブパルスの複数のサブパルスは、共通の開始レベル0Vからそれぞれのピークレベルに移行し、その後、開始レベルに戻らずに、開始レベルとそれぞれのピークレベルとの間にあるそれぞれの中間レベルに移行する初回サブパルスと、それぞれの中間レベルからそれぞれのピークレベルに移行し、その後共通の開始レベルに移行する最終サブパルスと、を含む。本方法は、1セットのプログラムサブパルスと別のセットのプログラムサブパルスとの間に、選択された不揮発性記憶素子のうちの少なくとも一つに対するプログラミング動作中に検証動作を実行することをさらに含む。本明細書で提供される方法を実施するための対応する方法、システム及びコンピュータ又はプロセッサ可読記憶デバイスを説明した。前述の詳細な説明は、例示及び説明を目的として提示されている。これは、網羅的なものでなく、開示されたとおりの形態に限定されるものでもない。上記の教示に照らした多くの修正例及び変形例が考えられる。記載した実施形態は、技術及びその実際的応用の原理を最もよく説明し、当業者が様々な実施形態で、検討される特定の使用に適するように様々に修正して技術を最もよく利用しうるように選定された。技術の範囲は、本明細書に添付される特許請求の範囲によって規定されるものとする。"