(57)【特許請求の範囲】
【請求項１】
不揮発性記憶素子をプログラムする方法であって、
複数個の不揮発性記憶素子に対してマルチステージプログラミング処理の一段階を実施する工程であって、
前記マルチステージプログラミング処理は、前記複数個の不揮発性記憶素子を、１個以上の最終目標状態にプログラムし、
前記一段階は、第１の組のプログラムパルスを用いて、前記不揮発性記憶素子を１個以上の第１の暫定的な目標状態にプログラムすることを含み、
前記一段階を実施する工程は、
特定の結果を実現することに関連するプログラムパルスを識別する工程と、前記不揮発性記憶素子の第１の代替結果を含む１個以上の代替結果に対して１個以上の検出処理を実施する工程と、
所定数を超える前記不揮発性記憶素子が前記第１の代替結果を実現したと前記検出処理によって判定される場合に、前記識別されたプログラムパルスと前記１個以上の代替結果のうちの第１の代替結果とに基づく示度（indication）を記憶する工程と、十分な数の不揮発性記憶素子が前記１個以上の代替結果を実現したと前記検出処理によって判定されない場合に、前記識別されたプログラムパルスに基づく示度を記憶する工程と、を含む、複数の不揮発性記憶素子に対してマルチステージプログラミング処理の一段階を実施する工程と、
前記記憶された示度に基づいて設定された大きさの初期パルスを有する第２の組のプログラムパルスを印加することを含む、前記マルチステージプログラミング処理の新たな段階を実施する工程と、
を備える、不揮発性記憶素子をプログラムする方法。
【請求項２】
前記一段階は、特定の結果を実現することに応答して、前記第１の組のプログラムパルスのパルス間の増分を低減することをさらに含む、請求項１に記載の方法。
【請求項３】
前記特定の結果を実現することに関連する前記プログラムパルスを識別する工程は、
所定数の不揮発性記憶素子が前記特定の結果を実現したかどうかを判定するために検出処理を実施する工程と、
前記所定数の不揮発性記憶素子に前記特定の結果を実現させた前記特定プログラムパルスを識別する工程とを含み、
前記特定プログラムパルスは、前記特定の結果を実現することに関連する前記プログラムパルスであり、
前記第１の代替結果は、前記１組のプログラムパルスのパルス間の増分の何分の一かだけ前記特定の結果とは異なる、請求項２に記載の方法。
【請求項４】
前記特定の結果は、第１の閾値電圧値であり、
前記第１の代替結果は、前記第１の組のプログラムパルスのパルス間の前記増分の何分の一かだけ、前記第１の閾値電圧値よりも大きい第２の閾値電圧値であり、
前記方法は、
前記記憶された示度が前記識別されたプログラムパルスに基づく場合に、前記第２の組のプログラムパルスの初期パルスの大きさを第１のレベルに設定する工程と、
前記記憶された示度が前記第１の代替結果と前記識別されたプログラムパルスとに基づく場合に、前記第２の組のプログラムパルスの初期パルスの大きさを第２のレベルに設定する工程と、をさらに含み、
前記第２のレベルは、前記第１のレベルよりも低い、請求項１，２または３に記載の方法。
【請求項５】
前記複数の不揮発性記憶素子は共通ワードラインに接続される、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記一段階を実施する工程の後であって、前記新たな段階を実施する工程の前に、前記マルチステージプログラミング処理の一部でない別のプログラミング処理において、他の不揮発性記憶素子に対してプログラミングを実施する工程をさらに備え、
前記他の不揮発性記憶素子は、前記複数の不揮発性記憶素子と異なる、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記特定の結果は、１個以上の第１の暫定的な目標状態に十分な数の不揮発性記憶素子が達していることである、請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記特定の結果は前記第１の暫定的な目標状態までの中間状態に十分な数の不揮発性記憶素子が達していることである、請求項１から請求項６のいずれか一項に記載の方法。
【請求項９】
前記不揮発性記憶素子の１個以上の代替結果に対して、１個以上の検出処理を実施する工程は、前記第１の代替結果を試験する工程と、第２の代替結果を試験する工程とを含み、
前記方法は、
十分な不揮発性素子が前記第２の代替結果を実現したと前記検出処理が判定した場合に、前記第２の代替結果と前記識別されたプログラムパルスとに基づいて前記示度を記憶する工程をさらに含み、
前記特定の結果は、第１の閾値電圧値であり、
前記第１の代替結果は、前記第１の組のプログラムパルスのパルス間の増分の何分の一かだけ、前記第１の閾値電圧値よりも大きい第２の閾値電圧値であり、
前記第２の代替結果は、前記第１の組のプログラムパルスのパルス間の増分の何分の一かの整数倍だけ前記特定の結果とは異なる第３の閾値電圧値であり、
前記方法は、
前記記憶された示度が前記識別されたプログラムパルスに基づく場合に、前記第２の組のプログラムパルスの初期パルスの大きさを第１のレベルに設定する工程と、
前記記憶された示度が前記第１の代替結果と前記識別されたプログラムパルスとに基づく場合に、前記第２の組のプログラムパルスの初期パルスの大きさを第２のレベルに設定する工程と、
前記記憶された示度が前記第２の代替結果と前記識別されたプログラムパルスとに基づく場合に、前記第２の組のプログラムパルスの初期パルスの大きさを第３のレベルに設定する工程と、をさらに含み、
前記第２のレベルは前記第１のレベルよりも低く、かつ、前記第３のレベルは前記第２のレベルよりも低い、
請求項１に記載の方法。
【請求項１０】
不揮発性記憶装置であって、
複数個の不揮発性記憶素子と、
前記複数個の不揮発性記憶素子と通信する１個以上の管理回路であって、前記１個以上の管理回路は、複数個の不揮発性記憶素子に対して複数のプログラミング処理を実施し、前記プログラミング処理の各々はプログラムパルスを用いて前記不揮発性記憶素子の少なくとも部分集合をそれぞれの組の目標状態にプログラムするように動作し、前記プログラミング処理の少なくとも部分集合に対して前記１個以上の管理回路は、それぞれのプログラミング処理に関する特定の結果を実現することに関連するプログラムパルスを識別し、前記不揮発性記憶素子に関する第１の代替結果を含む１個以上の代替結果において、１個以上の検出処理を実施し、前記１個以上の管理回路は、所定数を超える不揮発性記憶素子が前記第１の代替結果を実現したことが、前記１個以上の検出処理によって判定された場合に、前記不揮発性記憶素子の後続のプログラミング処理に対するプログラミングを調整するために、前記１個以上の代替結果のうち第１の代替結果と前記プログラムパルスの識別情報とを使用し、前記１個以上の管理回路は、所要数未満の不揮発性記憶素子が前記代替結果のいずれかを実現したことが、前記１個以上の検出処理によって判定された場合に、前記不揮発性記憶素子の後続のプログラミング処理に対するプログラミングを調整するために、前記プログラムパルスの識別情報を使用する、前記複数の不揮発性記憶素子と通信する１つまたは複数の管理回路と、
を備える不揮発性記憶装置。
【請求項１１】
第１のワードラインをさらに備え、
前記複数個の不揮発性記憶素子は、前記第１のワードラインに接続され、
前記１個以上の管理回路は、前記プログラムパルスを前記第１のワードラインに印加し、
前記複数個の不揮発性記憶素子は、マルチステートフラッシュメモリデバイスである、請求項１０に記載の不揮発性記憶装置。
【請求項１２】
前記特定の結果は、前記それぞれのプログラミング処理に関して十分な数の不揮発性記憶素子が中間状態に達していることを含み、
プログラミング処理の前記部分集合の各々において、前記１個以上の管理回路は、前記特定の結果を実現することに応答してプログラムパルス間の増分を低減する、請求項１０及び１１に記載の不揮発性記憶装置。
【請求項１３】
前記１個以上の管理回路は、所定数の不揮発性記憶素子が前記特定の結果を実現したかどうかを判定するために検出処理を実施し、かつ、前記直前のプログラムパルスを識別することによって、前記特定の結果を実現することに関連する前記プログラムパルスを識別し、
前記第１の代替結果はプログラムパルス間のプログラム増分の何分の一かだけ前記特定の結果とは異なる、請求項１０，１１または１２に記載の不揮発性記憶装置。
【請求項１４】
前記特定の結果は、第１の閾値電圧値であり、
前記第１の代替結果は、プログラムパルス間の前記プログラム増分の何分の一かだけ、前記第１の閾値電圧値よりも大きい第２の閾値電圧値であり、
前記１個以上の管理回路は、所定数を超える不揮発性記憶素子が前記第２の閾値電圧値よりも高い閾値電圧を有すると、前記検出処理によって判定されなかった場合に、前記後続のプログラミング処理の初期パルスの大きさを第１のレベルに設定することによって、前記不揮発性記憶素子の後続のプログラミング処理に対するプログラミングを調整するために、前記プログラムパルスの識別情報を使用し、
前記１個以上の管理回路は、前記所定数を超える不揮発性記憶素子が前記第２の閾値電圧値よりも高い閾値電圧を有すると、前記検出処理によって判定された場合に、前記後続のプログラミング処理の前記初期パルスの大きさを第２のレベルに設定することによって、前記不揮発性記憶素子の前記後続のプログラミング処理に対するプログラミングを調整するために、前記第１の代替結果と前記プログラムパルスの識別情報とを使用し、
前記第２のレベルは前記第１のレベルとは異なる、請求項１０から１３のいずれか一項に記載の不揮発性記憶装置。
【請求項１５】
前記１個以上の管理回路は、所定数を超える不揮発性記憶素子が前記第２の代替結果を実現したと、前記１個以上の検出処理によって判定された場合に、前記不揮発性記憶素子の前記後続のプログラミング処理に対するプログラミングを調整するために、前記１個以上の代替結果の第２の代替結果と前記プログラムパルスの前記識別情報とを使用する、請求項１０から１４のいずれか一項に記載の不揮発性記憶装置。
【請求項１６】
前記１個以上の管理回路は、
前記第１の代替結果と前記プログラムパルスの前記識別情報とに基づいて前記後続のプログラミング処理に対する初期プログラムパルスの大きさを設定することによって前記不揮発性記憶素子の前記後続のプログラミング処理に対するプログラミングを調整するために前記第１の代替結果と前記プログラムパルスの識別情報とを使用し、
前記１個以上の管理回路は、前記プログラムパルスの前記識別情報に基づいて前記後続のプログラミング処理に対する前記初期プログラムパルスの大きさを設定することによって前記不揮発性記憶素子の前記後続のプログラミング処理に対するプログラミングを調整するために前記プログラムパルスの識別情報を使用し、
前記１個以上の管理回路は、前記特定の結果を実現することに関連する前記プログラムパルスの電圧レベルに基づいて前記後続のプログラミング処理に対する前記初期プログラムパルスの大きさを設定することによって、前記プログラムパルスの前記識別情報に基づいて前記後続プログラミング処理に対する前記初期プログラムパルスの大きさを設定し、
前記１個以上の管理回路は、前記特定の結果と前記第１の代替結果に基づく補正率とを実現することに関連する前記プログラムパルスの電圧レベルに基づいて前記後続のプログラミング処理に対する前記初期プログラムパルスの大きさを設定することによって、前記代替結果と前記プログラムパルスの前記識別情報とに基づいて前記後続プログラミング処理に対する前記初期プログラムパルスの大きさを設定する、請求項１０に記載の不揮発性記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本出願は、Ｇｅｒｒｉｔ  Ｊａｎ  Ｈｅｍｉｎｋによって２００８年１０月２４日に出願され、参照によって本明細書に組み入れられる米国仮出願第６１／１０８，１２４号明細書「Ｐｒｏｇｒａｍｍｉｎｇ  Ｎｏｎ−ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｗｉｔｈ  Ｖａｒｉａｂｌｅ  Ｉｎｉｔｉａｌ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｐｕｌｓｅ」の便益を主張するものである。
【０００２】
本発明は不揮発性記憶装置に関する。
【背景技術】
【０００３】
半導体メモリは、様々な電子デバイスで使われることが一般的になってきている。例えば、不揮発性半導体メモリは、携帯電話、デジタルカメラ、パーソナルデジタルアシスタント、モバイルコンピュータ、非モバイルコンピュータ、及び他の装置に使用されている。電気的消去・再プログラム可能型読取専用メモリ（ＥＥＰＲＯＭ）とフラッシュメモリは、最も普及している不揮発性半導体メモリである。
【０００４】
ＥＥＰＲＯＭとフラッシュメモリは、半導体基板内のチャネル領域上に配置され、そのチャネル領域から絶縁されているフローティングゲートを採用している。フローティングゲートは、ソース領域とドレイン領域の間に配置されている。フローティングゲートの上に、そのフローティングゲートから絶縁されている制御ゲートが設けられている。トランジスタの閾値電圧は、フローティングゲート上に保持されている電荷量によって制御される。 即ち、そのソースとドレインの間の導通を可能にすべくトランジスタをオンするために制御ゲートに印加すべき電圧の最小量は、そのフローティングゲート上の電荷量レベルにより制御される。
【０００５】
ＥＥＰＲＯＭやフラッシュメモリデバイスにプログラムを行う場合、典型的には、ビットラインが接地されるとともに、制御ゲートにプログラム電圧が加えられる。チャネルからの電子がフローティングゲートへ注入される。フローティングゲートに電子が蓄積されると、フローティングゲートが負値に帯電し、メモリセルの閾値電圧が上昇し、メモリセルがプログラムされた状態となる。プログラムに関するさらなる情報は、「Source Side Self Boosting Technique for Non-Volatile Memory」と題した米国特許第６，８５９，３９７号、および、「Detecting Over Programmed Memory」と題した米国特許第６，９１７，５４２号に開示されている。これらの両方の特許文献の内容は、その全体を参照することにより本明細書に組み込まれる。
【０００６】
２種類の範囲の電荷量を保持するフローティングゲートを有するＥＥＰＲＯＭとフラッシュメモリが存在する。それにより、メモリセルは、データ「１」及び「０」に対応する消去状態とプログラム状態の２種類の状態の間で、プログラム／消去が行われる。このようなデバイスは、バイナリデバイスと呼ばれる。
【０００７】
マルチステートフラッシュメモリセルは、複数個の異なった許容閾値電圧範囲を特定することによって、実現される。各異なった許容閾値電圧範囲は、１群のデータビットのための予め決められた値に対応する。メモリセルにプログラムされるデータとセルの閾値電圧レベルの間の具体的な関係は、セルに採用されるデータ符号化方式によって決まる。例えば、両方ともその全体を参照することにより本明細書に組み込まれる米国特許第６，２２２，７６２号及び米国特許出願公開公報第２００４／０２５５０９０号は、マルチステートフラッシュメモリセルのための様々なデータ符号化方式を説明している。
【０００８】
いくつかの実施形態では、制御ゲートに印加されるプログラム電圧は、パルス毎に所定のステップサイズ（例えば、０．２Ｖ、０．３Ｖ、０．４Ｖなど）だけ電圧が増加される一連のパルスを含む。プログラム電圧の大きさの選定は譲歩される。電圧が高過ぎるとメモリセルによってはオーバープログラムされることになるが、大きさが低過ぎるとプログラミング時間が長くなる。典型的に、不揮発性メモリのユーザはメモリが素早くプログラムされることを望んでいる。
【０００９】
先行技術のデバイスでは、多用されていない新しいデバイス（フレッシュデバイスとも呼ばれる）と頻繁に使用されるデバイスとに同じプログラム信号が使用される。しかしながら、不揮発性メモリデバイスは多くのプログラミングサイクルを経るにつれて、電荷がフローティングゲートとチャネル領域の間の絶縁体に捕捉される。この電荷の捕捉によって閾値電圧が高いレベルに変化し、これによってメモリセルをより素早くプログラムすることが可能になる。プログラム電圧の大きさを高く設定し過ぎると、フレッシュデバイスのオーバープログラミングが生じないにしても、そのデバイスはより頻繁に使用されるようになるにつれてオーバープログラミングを受ける可能性がある。それゆえ、新しいデバイスは、古くなるにつれてオーバープログラミングを回避するためにそれらのプログラム電圧が十分に低く設定されることになる。プログラム電圧の大きさのこのような低減によって、新しいデバイスがデータをプログラムする速度が低下することになる。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本明細書で説明する技術は、オーバープログラミングのリスクを軽減すると同時にプログラミングの速度を高めようとするものである。
【課題を解決するための手段】
【００１１】
一実施形態は、複数個の不揮発性記憶素子に対するマルチステージプログラミング処理の一段階を実施することを含む。マルチステージプログラミング処理は、複数個の不揮発性記憶素子を１個以上の最終目標状態にプログラムする。一段階は、第１の組のプログラムパルスを用いて、不揮発性記憶素子を１個以上の第１の暫定的な目標状態にプログラムする工程を含む。一段階を実施する工程は、特定の結果を実現することに関連するプログラムパルスを識別する工程と、不揮発性記憶素子に関する第１の代替結果を含む１個以上の代替結果に対して１個以上の検出処理を実施する工程と、所定数を超える不揮発性記憶素子が第１の代替結果を実現したと検出処理によって判定される場合に、識別されたプログラムパルスと１以上の代替結果のうちの第１の代替結果と、に基づく示度（indication）を記憶する工程と、十分な数の不揮発性記憶素子が１個以上の代替結果を実現したと検出処理によって判定されない場合に、識別されたプログラムパルスに基づく示度を記憶する工程と、を含む。当該方法は、記憶された示度に基づいて設定された大きさの初期パルスを有する第２の組のプログラムパルスを印加することを含む、マルチステージプログラミング処理の新たな段階を実施することをさらに含む。
【００１２】
一実施形態は、複数個の不揮発性記憶素子に対して、複数のプログラミング処理を実施する工程を含む。プログラミング処理のそれぞれは、プログラムパルスを用いて、不揮発性記憶素子の少なくとも部分集合を、それぞれの組の目標状態にプログラムする動作をする。プログラミング処理の少なくとも部分集合では、当該方法は、それぞれのプログラミング処理に対して特定の結果を実現することに関連するプログラムパルスを識別する工程と、不揮発性記憶素子に関する１個以上の代替結果の１個以上の検出処理を実施する工程と、所定数を超える不揮発性記憶素子が第１の代替結果を実現したと１個以上の検出処理によって判定された場合に、１個以上の代替結果のうちの第１の代替結果と不揮発性記憶素子に関する後続のプログラミング処理のプログラミングを調整するためのプログラムパルスの識別とを使用する工程と、所要数未満の不揮発性記憶素子が代替結果のいずれかを実現したと１個以上の検出処理によって判定された場合に、不揮発性記憶素子に関する後続のプログラミング処理のプログラミングを調整するためのプログラムパルスの識別を使用することとを含む。
【００１３】
一実施形態は、複数個の不揮発性記憶素子に対するマルチステージプログラミング処理の第１の段階を実施する工程を含む。マルチステージプログラミング処理は、複数個の不揮発性記憶素子を１個以上の最終目標状態にプログラムする。第１の段階は、不揮発性記憶素子の少なくとも部分集合を、１個以上の第１の暫定的な目標状態にプログラムする。第１段階を実施する工程は、プログラミングパルス間が第１の増分である第１の組のプログラミングパルスを、不揮発性記憶素子に印加する工程と、不揮発性記憶素子のうちの少なくとも所定数の部分集合が、第１の組のプログラミングパルスのｎ番目のプログラミングパルスに応答して、第１の段階の中間状態（第１の段階の中間状態は１個以上の第１の段階の目標状態と異なる）に達していることを判定する工程と、不揮発性記憶素子のうちの少なくとも所定数の部分集合が中間状態に達しているとの判定に応答して、不揮発性記憶素子の部分集合に対する代替的状態において検出処理を実施する工程と、所定数を超える不揮発性記憶素子が代替的状態にあることが検出処理によって判明した場合に、代替的状態に基づく示度を記憶する工程と、所定数を超える不揮発性記憶素子が代替的状態にあることが検出処理から判明しなかった場合に中間状態に基づく示度を記憶する工程と、不揮発性記憶素子の少なくとも所定数の部分集合が第１段階に関する中間状態に達しているとの判定に応答して、プログラムパルス間が第２の増分（プログラミングパルス間の第２の増分はプログラミングパルス間の第１の増分よりも小さい）であるように第１の組のプログラミングパルスを変更する工程と、十分な数の不揮発性記憶素子が、それぞれ１個以上の第１段階の目標状態に達したときに、第１の段階を終了する工程とを含む。当該方法は、第２の組のプログラミングパルスを複数の不揮発性記憶素子に印加する工程を含むマルチステージプログラミング処理の新たな段階を実施する工程をさらに含む。第２の組のプログラミングパルスは、記憶された示度に基づいて設定された大きさの初期パルスを有する。
【００１４】
一実施形態は、複数個の不揮発性記憶素子と、複数個の不揮発性記憶素子と通信する１個以上の管理回路と、を含む。１個以上の管理回路は、複数個の不揮発性記憶素子に対して複数のプログラミング処理を実施する。プログラミング処理の各々は、プログラムパルスを用いて、不揮発性記憶素子の少なくとも部分集合をそれぞれの組の目標状態にプログラムするように動作する。プログラミング処理の少なくとも部分集合では、１個以上の管理回路は、それぞれのプログラミング処理に関する特定の結果を実現することに関連するプログラムパルスを識別し、不揮発性記憶素子に対して１個以上の代替結果について、１個以上の検出処理を実施する。１個以上の管理回路は、所定数を超える不揮発性記憶素子が第１の代替結果を実現したことが、１個以上の検出処理によって判定された場合に、不揮発性記憶素子に関する後続のプログラミング処理のプログラミングを調整するために、１個以上の代替結果のうちの第１の代替結果とプログラムパルスの識別情報とを使用する。１個以上の管理回路は、所要数未満の不揮発性記憶素子が代替結果のいずれかを実現したことが、１個以上の検出処理によって判定された場合に、不揮発性記憶素子に関する後続のプログラミング処理のプログラミングを調整するために、プログラムパルスの識別情報を使用する。
【００１５】
一実施形態は、複数個の不揮発性記憶素子と、複数個の不揮発性記憶素子と通信する１個以上の管理回路と、を含む。１個以上の管理回路は、複数個の不揮発性記憶素子に対してマルチステージプログラミング処理の一段階を実施する。マルチステージプログラミング処理は、複数個の不揮発性記憶素子を１個以上の最終目標状態にプログラムする。一段階は、第１の組のプログラミングパルスを用いて、不揮発性記憶素子を１個以上の第１の暫定的な目標状態にプログラムし、特定の結果を実現することに関連するプログラムパルスを識別する１個以上の管理回路を含む。１個以上の管理回路は、一段階中に不揮発性記憶素子に関する１個以上の代替結果について、１個以上の検出処理を実施する。１個以上の管理回路は、所定数を超える不揮発性記憶素子が第１の代替結果を実現したことが検出処理によって判定された場合に、第１の代替結果と識別されたプログラムパルスとに基づく示度を記憶する。１個以上の管理回路は、十分な数の不揮発性記憶素子が１個以上の代替結果を実現したことが検出処理によって判定されない場合に、識別されたプログラムパルスに基づく示度を記憶する。１個以上の管理回路は、記憶された示度に基づいて設定された大きさの初期パルスを有する第２の組のプログラミングパルスを印加することを含むマルチステージプログラミング処理の新たな段階を実施する。
【図面の簡単な説明】
【００１６】
【図１】ＮＡＮＤストリングの平面図である。
【図２】ＮＡＮＤストリングの等価回路図である。
【図３】不揮発性メモリシステムのブロック図である。
【図４】メモリアレイの一実施形態を示すブロック図である。
【図５】センスブロックの一実施形態を示すブロック図である。
【図６】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図７】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図８Ａ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図８Ｂ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図８Ｃ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図９Ａ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図９Ｂ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図９Ｃ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１０Ａ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１０Ｂ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１０Ｃ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１０Ｄ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１１Ａ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１１Ｂ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１２Ａ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１２Ｂ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１２Ｃ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１２Ｄ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１３Ａ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１３Ｂ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１３Ｃ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１３Ｄ】閾値電圧区分の組の一例とプログラミング処理の一例の図である。
【図１４】不揮発性記憶装置を動作させる処理の一実施形態を表すフローチャートである。
【図１５】不揮発性記憶装置をプログラムする処理の一実施形態を表すフローチャートである。
【図１６】不揮発性記憶装置をプログラムする処理の一実施形態を表すフローチャートである。
【図１７】プログラミングパルスの組の一例の図である。
【図１８】プログラミングパルスの組の一例の図である。
【図１９】プログラミング処理を実施する実施形態を表すフローチャートである。
【図１９Ａ】プログラミング処理を実施する実施形態を表すフローチャートである。
【図２０】プログラミング処理を実施する実施形態を表すフローチャートである。
【図２１】プログラミング処理を実施する実施形態を表すフローチャートである。
【図２２】プログラミング処理を実施する実施形態を表すフローチャートである。
【図２３】プログラミング処理を実施する実施形態を表すフローチャートである。
【図２４】プログラミング処理を実施する実施形態を表すフローチャートである。
【図２５】プログラミング処理を実施する実施形態を表すフローチャートである。
【図２６】プログラミング処理を実施する実施形態を表すフローチャートである。
【図２７Ａ】粗／密プログラミング方式を説明するグラフである。
【図２７Ｂ】粗／密プログラミング方式を説明するグラフである。
【図２７Ｃ】粗／密プログラミング方式を説明するグラフである。
【図２８Ａ】粗／密プログラミング方式を説明するグラフである。
【図２８Ｂ】粗／密プログラミング方式を説明するグラフである。
【図２８Ｃ】粗／密プログラミング方式を説明するグラフである。
【図２９】不揮発性記憶装置をプログラムする処理の一実施形態を表すフローチャートである。
【図３０】閾値電圧区分を示すグラフである。
【図３１】閾値電圧区分を示すグラフである
【図３２】閾値電圧区分を示すグラフである
【図３３】不揮発性記憶素子のグループに関する情報を検出する処理の一実施形態を表すフローチャートである。
【図３４】不揮発性記憶素子のグループに関する情報を検出する処理の一実施形態を表すフローチャートである。
【発明を実施するための形態】
【００１７】
フラッシュメモリシステムの一例は、ＮＡＮＤ構造を用いており、２つの選択ゲートの間に複数のトランジスタの直列接続を含んでいる。直列に接続されたトランジスタと選択ゲートは、ＮＡＮＤストリングと呼ばれる。図１は、１つのＮＡＮＤストリングを示す平面図である。図２は、その等価回路である。図１と図２に示すＮＡＮＤストリングは、第１（又はドレイン側）選択ゲート１２０と第２（又はソース側）選択ゲート１２２の間に挟まれている直列の４つのトランジスタ１００、１０２、１０４及び１０６を有する。選択ゲート１２０は、ビットコンタクト１２６を介してＮＡＮＤストリングをビットラインに接続している。選択ゲート１２２は、ＮＡＮＤストリングをソースライン１２８に接続している。選択ゲート１２０は、選択ラインＳＧＤに適切な電圧を加えることによって制御される。選択ゲート１２２は、選択ラインＳＧＳに適切な電圧を加えることによって制御される。トランジスタ１００、１０２、１０４、及び１０６の夫々は、制御ゲートとフローティングゲートを有している。例えば、トランジスタ１００は、制御ゲート１００ＣＧとフローティングゲート１００ＦＧを備えている。トランジスタ１０２は、制御ゲート１０２ＣＧとフローティングゲート１０２ＦＧを備えている。トランジスタ１０４は、制御ゲート１０４ＣＧとフローティングゲート１０４ＦＧを備えている。トランジスタ１０６は、制御ゲート１０６ＣＧとフローティングゲート１０６ＦＧを備えている。制御ゲート１００ＣＧはワードラインＷＬ３に接続されており、制御ゲート１０２ＣＧはワードラインＷＬ２に接続されており、制御ゲート１０４ＣＧはワードラインＷＬ１に接続されており、制御ゲート１０６ＣＧはワードラインＷＬ０に接続されている。
【００１８】
図１と図２は、ＮＡＮＤストリング内の４個のメモリセルを示しているが、４個のメモリセルの使用は単に一例として提示されている点に留意されたい。ＮＡＮＤストリングは、４個よりも少ない、或いは、４個よりも多いメモリセルを有していてよい。例えば、ＮＡＮＤストリングによっては８個、１６個、３２個、６４個、１２８個などの数のメモリセルを有していてよい。本明細書の説明は、いかなる特定個数のメモリセルを有するＮＡＮＤストリングにも限定されない。一実施形態では、６６個のメモリセルを備えるＮＡＮＤストリングが使用される。６４個のメモリセルは、データを記憶するために利用され、２個のメモリセルは、データを記憶しないことからダミーメモリセルと呼ばれる。
【００１９】
ＮＡＮＤ構造を用いたフラッシュメモリシステムの一般的なアーキテクチャは、いくつかのＮＡＮＤストリングを含んでいる。各ＮＡＮＤストリングは、選択ラインＳＧＳによって制御されるソース選択ゲートによって共通ソースラインに接続されているとともに、選択ラインＳＧＤによって制御されるドレイン選択ゲートによって関連するビットラインに接続されている。各ビットラインとそのビットラインにビットラインコンタクトを介して接続されている夫々のＮＡＮＤストリングは、メモリセルアレイの列を構成する。ビットラインは、複数のＮＡＮＤストリングによって共有されている。典型的には、ビットラインは、ワードラインと直交する方向でＮＡＮＤストリング上を通っており、１以上のセンスアンプと接続されている。
【００２０】
ＮＡＮＤタイプのフラッシュメモリおよびそれらの動作に関連する例は、以下の米国特許／特許出願、即ち、米国特許第５，５７０，３１５号、米国特許第５，７７４，３９７号、米国特許第６，０４６，９３５号、米国特許第６，４５６，５２８号、及び、米国公開公報第ＵＳ２００３／０００２３４８号に記載されており、それらの引用文献は、その全体が参照により本明細書に組み込まれる。
【００２１】
ＮＡＮＤフラッシュメモリに加えて、不揮発性記憶装置の他のタイプもまた用いることができる。例えば、不揮発性装置は、電荷を蓄える誘電体層を用いたメモリセルによって製造されてもよい。前述した導電性のフローティングゲート素子の代わりに、誘電体層が用いられる。誘電体記憶素子を用いたメモリ装置が、「NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell」、IEEE Electron Device Letters、２１巻、１１号、２０００年１１月、５４３から５４５ページに、Eitanらによって開示されている。ＯＮＯ誘電層は、ソース拡散領域とドレイン拡散領域の間のチャンネルを横切って伸びている。あるデータビットの電荷がドレインに近接した誘電層内に局在し、他のデータビットの電荷がドレインに近接した誘電層内に局在する。例えば、米国特許第５，７６８，１９２号および６，０１１，７２５号では、２つの酸化シリコン層に挟まれたトラップ用の誘電層を有する不揮発性メモリセルが開示されている。マルチステートのデータ記憶は、誘電層内の空間的に離れた電荷蓄積領域の２値の状態を、別々に読み出すことで行われる。
他のタイプのメモリ素子も使用できる。ＭＯＮＯＳ又はＴＡＮＯＳ型の構成あるいはナノ結晶に基づく不揮発性記憶装置も利用できる。他のタイプのメモリ素子も使用できる。
【００２２】
図３は、メモリセル（例えば、ＮＡＮＤマルチステートフラッシュメモリなど）のページ（または他のユニット）に並列に読み出しおよびプログラムを行うリード／ライト回路を有する記憶デバイス２１０を示している。記憶デバイス２１０は、１個以上のメモリダイまたはチップ２１２を備えていてもよい。メモリダイ２１２は、メモリセルの（２次元又は３次元の）アレイ２００、制御回路２２０、及び、リード／ライト回路２３０Ａと２３０Ｂを有する。一実施形態では、様々な周辺回路によるメモリアレイ２００へのアクセスは、アレイの両側で対称的に実装されており、これにより、各側のアクセスライン及び回路の密度が半分に低減される。リード／ライト回路２３０Ａ及び２３０Ｂは、複数のセンスブロック３００を有しており、それらのセンスブロック３００によって１ページのメモリセルを並列に読み出し又はプログラムすることができる。メモリアレイ２００は、行デコーダ２４０Ａと２４０Ｂを介したワードラインと、列デコーダ２４２Ａと２４２Ｂを介したビットラインによってアドレス指定される。ワードラインおよびビットラインは、コントロールラインの一例である。典型的な実施形態では、コントローラ２４４は、１つ以上のメモリダイ２１２のような同じメモリデバイス２１０（例えば、取り外し可能なストレージカード又はパッケージ）内に含まれる。命令、及びデータは、ライン２３２を介してホストとコントローラ２４４の間で転送され、また、ライン２３４を介してコントローラと１つ以上のメモリダイ２１２の間で転送される。
【００２３】
制御回路２２０は、リード／ライト回路２３０Ａと２３０Ｂと協調して、メモリアレイ２００に対してメモリ動作を実行する。制御回路２２０は、ステートマシン２２２、オンチップアドレスデコーダ２２４、及び電力制御モジュール２２６を有している。ステートマシン２２２は、メモリ動作のチップレベルの制御を提供する。オンチップアドレスデコーダ２２４は、ホスト又はメモリコントローラによって用いられるアドレスと、デコーダ２４０Ａ、２４０Ｂ、２４２Ａ及び２４２Ｂによって用いられるハードウェアアドレスの間のアドレスインタフェースを提供する。電力制御モジュール２２６は、メモリ動作中のワードライン及びビットラインに供給される電力及び電圧を制御する。一実施形態では、電力制御モジュール２２６は、供給電力より大きな電圧を作り出すことができる一つ以上のチャージポンプを有する。制御回路２２０は、列デコーダ２４２Ａ及び２４２Ｂと同様に、アドレスラインを、行デコーダ２４０Ａ及び２４０Ｂに供給する。列デコーダ２４２Ａ及び２４２Ｂは、データＩ／Ｏで記される信号ラインを介して、コントローラ２４４に、データを供給する。
【００２４】
一実施形態では、制御回路２２０、電力制御回路２２６、デコーダ回路２２４、ステートマシン回路２２２、デコーダ回路２４２Ａ、デコーダ回路２４２Ｂ、デコーダ回路２４０Ａ、デコーダ回路２４０Ｂ、リード／ライト回路２３０Ａ、リード／ライト回路２３０Ｂ、及び／又はコントローラ２４４の一つ又は幾つかの組合せは、１個の管理回路、或いは複数の管理回路群と称されることがある。１個以上の管理回路は、本明細書で記述する処理を実行する。
【００２５】
図４は、メモリセルアレイ２００の例示的な構造を示す。一実施形態においては、メモリセルのアレイは、数多くのブロックに分割される（例えば、ブロック０−１０２３又はその他の量など）。フラッシュＥＥＰＲＯＭシステムに一般的であるように、ブロックは消去の単位である。すなわち、各ブロックは、共に消去される最小数のメモリセルを含む。その他の消去の単位を用いた装置も使用可能である。
【００２６】
１個のブロックは、ビットライン（例えばビットラインＢＬ０−ＢＬ６９，６２３）およびワードライン（ＷＬ０、ＷＬ１、ＷＬ２、ＷＬ３）を介してアクセスされるＮＡＮＤストリングのセットを備えている。図４は、直列接続されることでＮＡＮＤストリングを形成している、４つのメモリセルを示している。各々のＮＡＮＤストリングに４つのセルが含まれているが、４個よりも少ない、或いは、４個よりも多いメモリセルを有していてよい（例えば、ＮＡＮＤストリングによっては、１６個、３２個、６４個、１２８個やその他の数のメモリセルを有していてもよい）。各ＮＡＮＤストリングの一端は、（選択ラインＳＧＤに接続されている）ドレイン選択ゲートを介して対応するビットラインに接続されており、他端は、（選択ラインＳＧＳに接続されている）ソース選択ゲートを介してソースラインに接続されている。
【００２７】
各ブロックは、通常、複数のページに分割される。一実施形態においては、ページはプログラムの単位である。その他のプログラムの単位も使用可能である。通常、１個以上のページのデータが、１列のメモリセルに記憶される。例えば、データの１個以上のページが、共通ワードラインに接続されたメモリセルに記憶されてもよい。１個のページは、１個以上のセクタを記憶できる。１個のセクタは、ユーザデータとオーバヘッドデータ（システムデータとも呼ばれる）を含む。オーバヘッドデータは、通常、セクタのユーザデータから算出される誤り訂正符号（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ：ＥＣＣ）とヘッダ情報を含む。コントローラ（または他の構成要素）の一部が、データがアレイにプログラムされているときにＥＣＣを計算し、データがアレイから読み出されているときにＥＣＣのチェックも行う。代わりに、ＥＣＣ及び／又は他のオーバヘッドデータはそれらが関係するユーザデータとは異なるページに記憶され、または異なるブロックに記憶されることがある。ユーザデータのセクタは通常、磁気ディスクドライブ内のセクタサイズに相当する５１２バイトである。例えば８ページから３２、６４、１２８、或いはそれ以上のページまでの多数のページが１ブロックを形成する。異なるサイズのブロックと配置も採用することができる。さらに、１個のブロックは、６９，６２４個以上又は以下のビットラインを有することができる。
【００２８】
図５は、センスモジュール４８０と呼ばれるコア部と共通部４９０に分割された個々のセンスブロック３００のブロック図である。一実施形態では、各ビットラインに対して個別のセンスモジュール４８０を用意し、一組の複数センスモジュール４８０に対して一個の共通部４９０を用意してもよい。一例として、１個のセンスブロックは、１個の共通部４９０と８個のセンスモジュール４８０を有している。グループ内の各センスモジュールは、データバス４７２を介して協働する共通部と通信する。一例としては、その全体を参照することにより本明細書に組み込まれる米国特許出願公開公報２００６／０１４０００７号を参照されたい。
【００２９】
センスモジュール４８０は、接続されたビットライン内の伝導電流が予め決められたレベルより高いか低いかを判定するセンス回路４７０を備えている。幾つかの実施形態では、センスモジュール４８０は、センスアンプと一般に呼ばれる回路を有する。センスモジュール４８０は、さらに、接続されたビットラインに電圧状態を設定するために用いられるビットラインラッチ４８２を有している。例えば、ビットラインラッチ４８２内で予め決められた状態がラッチされることによって、メモリセルをプログラミングから保護するために、接続されたビットラインを、プログラム禁止を指定する状態（例えば、Ｖｄｄ）に引き上げる（プル）する。
【００３０】
共通部４９０は、プロセッサ４９２、データラッチ群４９４、及び、データラッチ群４９４とデータバス４２０の間を接続するＩ／Ｏインタフェース４９６を備えている。プロセッサ４９２は計算を実行する。例えば、その機能の１つは、センスされたメモリセル内に記憶されているデータを特定し、特定されたデータをデータラッチ群内に記憶することである。データラッチ群４９４は、読み出し動作において、プロセッサ４９２によって特定されたデータビット群を記憶するために用いられる。データラッチ群４９４は、プログラム動作中において、データバス４２０から取り込んだデータビット群を記憶するためにも用いられる。取り込まれるデータビット群は、メモリ内にプログラムする予定のライトデータを表す。 Ｉ／Ｏインタフェース４９６は、データラッチ群４９４とデータバス４２０の間のインタフェースを提供する。
【００３１】
読み出し又はセンス中には、システムの動作は、ステートマシン２２２の制御下にあり、ステートマシン２２２は（電力制御モジュール２２６を用いて）、アドレス指定されたセルへの種々の制御ゲート電圧の供給を制御する。メモリに用意された様々なメモリ状態に対応する様々な既定制御ゲート電圧を受けるなかで、センスモジュール４８０は、これらの電圧の１つに遷移し、バス４７２を介してセンスモジュール４８０からプロセッサ４９２に出力が提供される。その時点で、プロセッサ４９２は、センスモジュールの遷移イベントと、ステートマシンから入力ライン４９３を介して加えられた制御ゲート電圧についての情報によって、結果としてのメモリ状態を特定する。それから、プロセッサは、メモリ状態に対するバイナリ符号化を計算し、得られたデータビット群をデータラッチ群４９４に格納する。コア部の別の実施形態では、ビットラインラッチ４８２は、センスモジュール４８０の出力をラッチするラッチ、及び、上記のようなビットラインラッチの二つの役割を持つ。
【００３２】
当然のことながら、いくつかの実装形態では複数のプロセッサ４９２を有することができる。一実施形態では、各プロセッサ４９２は、出力ライン（図５には示されていない）を有し、各出力ラインは共にワイヤードＯＲ（配線論理和）接続される。いくつかの実施形態では、出力ラインは、ワイヤードＯＲラインに接続される前段階で反転される。この構成は、ワイヤードＯＲの結果を受け取るステートマシンが、プログラムされる全てのビットがいつ所望のレベルに到達したかを判断できるので、プログラム処理の完了時点を判定するプログラム検証処理における素早い判定を可能にする。例えば、各ビットがその所望のレベルに到達すると、そのビット用の論理「０」がワイヤードＯＲラインに送られる（又はデータ「１」が反転される）。全てのビットがデータ「０」を出力すると（又はデータ「１」が反転されると）、ステートマシンはプログラム処理の完了を知る。各プロセッサが８個のセンスモジュールと通信する実施形態では、（いくつかの実施形態において）ステートマシンはワイヤードＯＲラインを８回読み出す必要があってもよいし、あるいは、協働するビットラインの結果を蓄積するための論理をプロセッサ４９２に追加し、ステートマシンがワイヤードＯＲラインを一度だけ読み出せば良いようにしてもよい。
【００３３】
データラッチスタック４９４は、センスモジュールに対応するデータラッチのスタックを有する。一実施形態では、センスモジュール４８０毎に３個（或いは４個或いはその他の数の）データラッチが存在する。一実施形態では、ラッチは夫々１ビットである。
【００３４】
プログラム又は検証処理の間、プログラムされるべきデータは、データバス４２０から１組のデータラッチ４９４内に記憶される。検証処理の間、プロセッサ４９２は、所望のメモリ状態に対する検証メモリ状態を監視する。その２つが一致したとき、プロセッサ４９２は、プログラム禁止を指定する状態にビットラインを引き上げる（プルする）ようにビットラインラッチ４８２を設定する。これにより、たとえプログラムパルスがその制御ゲートに影響しても、ビットラインに接続したメモリセルがさらにプログラムされないようにすることができる。他の実施形態では、プロセッサが最初にビットラインラッチ４８２をロードし、センス回路が検証処理中にそれに禁止値を設定する。
【００３５】
いくつかの実装形態では、（必須ではないが）データラッチは、シフトレジスタとして実装され、内部に記憶されたパラレルデータを、データバス４２０用にシリアルデータに変換したり、その逆を行ったりする。好適な一実施形態では、メモリセルのリード／ライトブロックに対応する全てのデータラッチを相互にリンクしてブロックシフトレジスタを構成し、シリアル転送によってデータのブロックを入力または出力できるようにする。特に、リード／ライトモジュールの一群のデータラッチのそれぞれが、データバスへ或いはデータバスからデータを順に転送するようにリード／ライトモジュールのバンクを構成し、一群のデータラッチがあたかもリード／ライトブロック全体のシフトレジスタの一部であるかのようにしてもよい。
【００３６】
読み出し動作やセンスアンプについてのさらなる情報は次の文献に記載されている。（１）米国特許出願公開２００４／００５７２８７号、「Non-Volatile Memory And Method With Reduced Source Line Bias Errors」、２００４年３月２５日公開、（２）米国特許出願公開２００４／０１０９３５７号、「Non-Volatile Memory And Method with Improved Sensing」、２００４年６月１０日公開、（３）米国特許出願公開２００５０１６９０８２号、（４）米国特許出願公開２００６／０２２１６９２号、「Compensating for Coupling During Read Operations of Non-Volatile Memory」、発明者Ｊｉａｎ  Ｃｈｅｎ、２００５年４月５日出願、及び、（５）米国特許出願公開２００６／０１５８９４７号、「Reference Sense Amplifier For Non-Volatile Memory」、発明者Ｓｉｕ  Ｌｕｎｇ  Ｃｈａｎ及びＲａｕｌ−Ａｄｒｉａｎ  Ｃｅｒｎｅａ、２００５年１２月２８日出願これら５個の特許文献の全ては、その全体を参照することにより本明細書に組み込まれる。
【００３７】
成功したプログラミング処理（検証を含む）の最後に、メモリセルの閾値電圧は、適宜プログラムされたメモリセルに関する閾値電圧の１個以上の区分内、あるいは消去されたメモリセルに関する閾値電圧の区分内にあるべきである。図６は、各メモリセルが２ビットのデータを記憶するときのメモリセルアレイの閾値電圧区分の例（データ状態に対応する）示す。しかしながら、他の実施形態では、メモリセル当たり概ね２ビットのデータ（例えば、メモリセル当たり３または４以上のビットのデータ）を使用してもよい。
【００３８】
図６は、消去されたメモリセルに関する第１の閾値電圧区分Ｅを示す。プログラムされたメモリセルに関する３つの閾値電圧区分Ａ、Ｂ、およびＣも示される。一実施形態では、Ｅ区分における閾値電圧は負であり、Ａ、Ｂ，およびＣ区分における閾値電圧は正である。図６の明確な各閾値電圧区分は、１組のデータビットの所定値に対応する。メモリセルにプログラムされたデータとセルの閾値電圧レベルとの具体的な関係は、セルに採用されるデータ符号化方式に依存する。例えば、米国特許第６，２２２，７６２号明細書および米国特許出願公開第２００４／０２５５０９０号明細書は、いずれもその全体が参照によって本明細書に組み込まれ、マルチステートフラッシュメモリセルに対する様々なデータ符号化方式を説明している。一実施形態では、フローティングゲートの閾値電圧が誤ってその近傍の物理状態にシフトした場合に、１ビットしか影響を受けないように、データ値がグレーコード割当を用いて閾値電圧区分に割り当てられる。一例では、「１１」を閾値電圧区分Ｅ（状態Ｅ）に割り当て、「１０」を閾値電圧区分Ａ（Ａ状態）に割り当て、「００」を閾値電圧区分Ｂ（Ｂ状態）に割り当て、「０１」を閾値電圧区分Ｃ（Ｃ状態）に割り当てる。しかしながら、他の実施形態では、グレーコードは使用されない。図６は４つの状態を示しているが、本発明は概ね４つの状態を含むマルチステート構造など、他のマルチステート構造とともにも使用されうる。
【００３９】
また、図６は、メモリセルからデータを読み出す３つの読出し基準電圧Ｖｒａ、Ｖｒｂ、およびＶｒｃを示す。所与のメモリセルの閾値電圧がＶｒａ、Ｖｒｂ、およびＶｒｃより上であるか下であるかを試験することによって、システムはメモリセルがどの状態にあるかを判定しうる。また、図６は、３つの検証基準電圧Ｖｖａ、Ｖｖｂ、およびＶｖｃを示す。メモリセルを状態Ａにプログラムするとき、システムは、これらのメモリセルがＶｖａよりも大きい閾値電圧を有するかＶｖａに等しい閾値電圧を有するかを試験することになる。メモリセルを状態Ｂにプログラムするとき、システムはこれらのメモリセルがＶｖｂよりも大きい閾値電圧を有するかＶｖｂに等しい閾値電圧を有するかを試験することになる。メモリセルを状態Ｃにプログラムするとき、システムはこれらのメモリセルがＶｖｃよりも大きい閾値電圧を有するかＶｖｃに等しい閾値電圧を有するかを試験することになる。
【００４０】
フルシーケンスプログラミングとして知られている一実施形態では、メモリセルは消去された状態Ｅからプログラムされた状態Ａ、Ｂ、またはＣのいずれかに直接にプログラムされうる。例えば、メモリセル群内のすべてのメモリセルが消去された状態Ｅになるように、プログラム対象のメモリセル群が最初に消去されてもよい。次いで、メモリセルを状態Ａ、Ｂ、またはＣに直接プログラムするためにプログラミング処理が使用される。いくつかのメモリセルが状態Ｅから状態Ａにプログラムされる間に、他のメモリセルが状態Ｅから状態Ｂにおよび／または状態Ｅから状態Ｃにプログラムされている。
【００４１】
図７は、２つの異なるページ、すなわち、下位ページおよび上位ページに対してデータを記憶するマルチステートメモリセルをプログラムする二段階法の一例を示す。状態Ｅ（１１）、状態Ａ（１０）、状態Ｂ（００）、および状態Ｃ（０１）の４つの状態が示される。状態Ｅの場合、両ページが「１」を記憶する。状態Ａの場合、下位ページが「０」を記憶し上位ページが「１」を記憶する。状態Ｂの場合、両ページが「０」を記憶する。状態Ｃの場合、下位ページが「１」を記憶し上位ページが「０」を記憶する。なお、特定のビットパターンが状態の各々に割り当てられているが、異なるビットパターンが割り当てられてもよい。第１のプログラミング段階では、メモリセルの閾値電圧レベルが、下位の論理ページにプログラムされるビットに従って設定される。そのビットが論理「１」であれば、それぞれのメモリセルは以前に消去されている結果として適切な状態にあるので閾値電圧は変更されない。しかしながら、プログラムされるビットが論理「０」であれば、矢印５０４で示されるようにセルの閾値レベルは上げられて状態Ａとなる。これで第１のプログラミング段階を終了する。
【００４２】
第２のプログラミング段階では、メモリセルの閾値電圧レベルが、上位論理ページにプログラムされているビットに従って設定される。上位論理ページビットが論理「１」を記憶する必要がある場合は、メモリセルは下位ページビットのプログラミングに応答して状態ＥまたはＡの１つにあるのでプログラミングが行われず、状態ＥおよびＡの両方が「１」の上位ページビットを保持する。上位ページビットが論理「０」でなければならない場合は、閾値電圧がシフトされる。第１の段階でメモリセルが消去された状態Ｅに保たれると、第２の段階で、閾値電圧が矢印５０２で示されるように上昇して状態Ｃ内にあるようにメモリセルがプログラムされる。メモリセルが第１のプログラミング段階の結果として状態Ａにプログラムされていると、閾値電圧が矢印５０６で示されるように上昇して状態Ｂ内にあるようにメモリセルが第２の段階でさらにプログラムされる。第２の段階の結果は、下位ページのデータを変更せずに上位ページに対して論理「０」を記憶するように指定された状態にメモリセルをプログラムすることである。
【００４３】
一実施形態では、ページ全体を満たすのに十分なデータが書き込まれる場合に、フルシーケンス書込みを実施するためのシステムがセットアップされうる。ページ全体に十分なデータが書き込まれなければ、プログラミング処理は、受け取られたデータで下位ページプログラミングをプログラムしうる。後続のデータが受け取られると、システムは上位ページをプログラムする。さらに別の実施形態では、システムは、下位ページをプログラムするモードで書込みを開始して、ワードラインのメモリセル全体（またはそのほとんど）を満たすのに十分なデータが続いて受け取られると、フル・シーケンスプログラミングモードに移行しうる。このような実施形態のさらなる詳細は、米国特許出願第２００６／０１２６３９０号に開示されており、その全体が参照によって本明細書に組み込まれる。
【００４４】
図８Ａ〜図８Ｃは、不揮発性メモリをプログラムする別のマルチステージプログラミング処理を表す。図８Ａ〜図８Ｃの処理は、特定のメモリセルに関して、前のページの隣接するメモリセルへの書込みに続いて、特定ページに関するその特定メモリセルへの書込みによってフローティングゲート間の結合を低減する。図８Ａ〜図８Ｃによって教示される処理の一実施例では、不揮発性メモリセルは、４つのデータ状態を用いて、メモリセル当たり２ビットのデータを記憶する。例えば、状態Ｅが消去された状態であり、状態Ａ、Ｂ、およびＣがプログラムされた状態であると仮定する。状態Ｅはデータ１１を記憶する。状態Ａはデータ０１を記憶する。状態Ｂはデータ１０を記憶する。状態Ｃはデータ００を記憶する。これは、両ビットが隣接する状態ＡとＢの間で変化するので非グレーコード化の例である。物理データ状態に対するデータの他のコード化も使用されうる。各メモリセルは２つのデータページを記憶する。参照のために、これらのデータページは上位ページおよび下位ページと呼ばれるが、これらは他の標識が与えられうる。図８Ａ〜図８Ｃの処理に関して状態Ａを参照すると、上位ページはビット０を記憶し、下位ページはビット１を記憶する。状態Ｂを参照すると、上位ページはビット１を記憶し、下位ページはビット０を記憶する。状態Ｃを参照すると、両ページはビットデータ０を記憶する。図８Ａ〜図８Ｃのプログラミング処理は２段階プログラミング処理であるが、図８Ａ〜図８Ｃの処理は３段階処理、４段階処理などを実施するために使用されうる。最初の段階では、下位ページがプログラムされる。下位ページがデータ１を保つ必要がある場合は、メモリセル状態は状態Ｅに保たれる。データが０にプログラムされる必要がある場合は、メモリセルの電圧の閾値はメモリセルが状態Ｂ’にプログラムされるように上昇される。したがって、図８Ａは、状態Ｅから状態Ｂ’へのメモリセルのプログラミングを示す。図８Ａに示される状態Ｂ’は暫定的な状態Ｂであり、したがって、検証ポイントはＶｖｂよりも低いＶｖｂ’として示される。
【００４５】
一実施形態では、メモリセルが状態Ｅから状態Ｂ’にプログラムされた後、ＮＡＮＤストリングにおける上記メモリセルの隣接するメモリセル（ワードラインＷＬｎ＋１上の）がその下位ページに関してプログラムされることになる。隣接するメモリセルをプログラムした後、フローティングゲート間の結合現象によって、以前にプログラムされたメモリセルの見かけの閾値電圧が上昇する可能性がある。これは、状態Ｂ’に関する閾値電圧区分を図８Ｂの閾値電圧区分５２０として示される閾値電圧区分に拡大する効果を有する。閾値電圧区分のこの見かけの拡大は、上位ページをプログラムするときに修正される。
【００４６】
図８Ｃは、上位ページのプログラミング処理の図である。メモリセルが消去された状態Ｅにあり、かつ上位ページが１に保たれる必要がある場合、メモリセルは状態Ｅに保たれる。メモリセルが状態Ｅにあり、かつその上位ページのデータが０にプログラムされる必要がある場合、メモリセルが状態Ａにあるようにメモリセルの閾値電圧が上昇される。メモリセルが中間閾値電圧区分５２０にあり、かつ上位ページのデータが１に保たれる必要がある場合、メモリセルは最終状態Ｂにプログラムされる。メモリセルが中間閾値電圧区分５２０にあり、かつ上位ページのデータがデータ０になる必要がある場合、メモリセルが状態Ｃにあるようにメモリセルの閾値電圧が上昇される。隣接するメモリセルの上位ページのプログラミングのみが所与のメモリセルの見かけの閾値電圧に影響を与えるので、図８Ａ〜図８Ｃによって示される処理はフローティングゲート間の結合現象を低減する。代替的状態のコード化の例は、上位ページのデータが１であるときに区分５２０から状態Ｃに移動し、上位ページのデータが０であるときに状態Ｂに移動するものである。
【００４７】
図８Ａ〜図８Ｃは４つのデータ状態と２つのデータページに関する例を示すが、図８Ａ〜図８Ｃによって教示される概念は概ね４つの状態および２ページと異なるページを有する他の実施例に適用されうる。図８Ａ〜図８Ｃのプログラミング処理に関するさらなる詳細は、米国特許第７，１９６，９２８号明細書に見られ、参照によって本明細書に組み入れられる。
【００４８】
図９Ａ〜図９Ｃは、マルチステージプログラミング処理の別の例を示す。図９Ａは、４つの閾値電圧区分、Ｅ、Ａ、Ｂ、およびＣを示す。閾値電圧区分Ｅは、消去されたメモリセルを表す。閾値電圧区分Ａ、Ｂ、およびＣは、プログラムされたメモリセルを表す。最初に、すべてのメモリセルは、閾値電圧区分Ｅに消去される。第１のプログラミング段階では、閾値電圧区分Ｃにプログラムされるはずであるメモリセルが、閾値電圧区分Ｃにプログラムされる。第１のプログラミング段階が、図９Ｂで示される。第２のプログラミング段階では、閾値電圧区分ＡおよびＢにプログラムされる予定であるメモリセルが、図９Ｃで表わされるように、適切な区分にプログラムされる。
【００４９】
図９Ａ〜図９Ｃの処理のいくつかの実施形態では、第１の段階が第１の組のメモリセルに対して実施された後、第２の段階が第１の組のメモリセルに対して実施される前に、第１の段階が第２の組のメモリセルに対して実施される。一実施例では、第１の組のメモリセルが第１のワードラインに接続され、第２の組のメモリセルが第２のワードラインに接続される。
【００５０】
図１０Ａ〜図１０Ｄは、共通ワードラインに接続されたメモリセルをプログラムし、図９Ａ〜図９Ｃの処理と同様に使用されうる別のマルチステートプログラミング処理を表す。図１０Ａ〜図１０Ｄの処理の第１の段階は、図１０Ａで閾値電圧区分５３０によって示されるように、閾値電圧区分ＢおよびＣを目標としてメモリセルを中間閾値電圧区分Ｂ’に最初にプログラムすることを含む。この第１の段階は、この後、隣接するワードラインに対して実施され、これによって隣接するフローティングゲートからの結合に基づいて中間閾値電圧区分が拡大される（図１０Ｂ参照）。第２のプログラミング段階は、閾値電圧区分Ｂ’からＣを目標としてメモリセルをプログラムすることを含む（図１０Ｃ参照）。プログラム処理の第３の段階は、区分Ｅから区分Ａに、さらにＢ’からＢにメモリセルをプログラムすることを含む（図１０Ｄ参照）。
【００５１】
図１１Ａおよび図１１Ｂは、別の２段階のプログラミング処理を表す。第１の段階では、メモリセルは、消去された状態Ｅから暫定的な状態Ａ＊、Ｂ＊、およびＣ＊にフルシーケンスで一斉にプログラムされる（図１１Ａ参照）。第２の段階では、暫定的な状態Ａ＊にあるメモリセルが状態Ａにプログラムされ、同時に、暫定的な状態Ｂ＊にあるメモリセルが状態Ｂにプログラムされ、暫定的な状態Ｃ＊にあるメモリセルが状態Ｃにプログラムされる（図１１Ｂ参照）。状態Ａ、Ｂ、およびＣの検証ポイントＶｖａ、Ｖｖｂ、およびＶｖｃは、暫定的な状態Ａ＊、Ｂ＊、およびＣ＊の検証ポイントよりも高い。それゆえ、第１の段階中に、第１の組のメモリセルは、最終目標閾値電圧よりも低い閾値電圧にプログラムされる。第２の段階中に、第１の組のメモリセルは、それらの閾値電圧が最終目標閾値電圧まで上昇される。一実施形態では、第１の組のメモリセルの第１段階の後、第１の組のメモリセルの第２の段階の前に、第１の段階が第１の組のメモリセルと同じワードラインあるいは第１の組のメモリセルとは異なるワードラインに接続される可能性のある第２の組のメモリセルに対して実施される。一例では、第１の段階は粗段階であり、第２の段階は密段階であり、それゆえ、暫定的な状態Ａ＊、Ｂ＊、およびＣ＊は最終目標状態Ａ、Ｂ、およびＣよりも広い場合もありうる。
【００５２】
図１２Ａ〜図１２Ｄは、不揮発性メモリをプログラムする３段階処理を開示する。図１２Ａ〜図１２Ｄの処理は、メモリセル当たり３ビットのデータを記憶する不揮発性メモリセルに対して実施される。プログラミングの前に、メモリセルのすべてが状態Ｓ０に消去される（図１２Ａ）。図１２Ｂは、最終的にＳ４〜Ｓ７にプログラムされる予定であるメモリセルを、状態Ｓ４’にプログラムすることを含む第１の段階を示す。図１２Ｃは、状態Ｓ４’から状態Ｓ４〜Ｓ７にプログラムすることを含む第２の段階を示す。一実施形態では、第１の段階と第２の段階の間に、部分的あるいは完全にプログラムされた隣接するワードラインに対して、メモリセルからの結合があるので、Ｓ４’は図２Ｃの場合はより広い。図１２Ｄは、状態Ｓ０から状態Ｓ１、Ｓ２、およびＳ３にプログラムすることを含む第３の段階を示す。第１の組のメモリセルの段階のいずれかの間に、図１２Ａ〜図１２Ｄの処理に従って第１の組のメモリセルをプログラムするとき、他のメモリセル（第１の組のメモリセルと同じワードライン、あるいは１つまたは複数の異なるワードラインに接続された）は完全または部分的にプログラムされうる。
【００５３】
図１３Ａ〜図１３Ｄは、メモリセル当たり４ビットのデータを記憶するメモリセルをプログラムする３段階のプログラミング処理を示す。それゆえ、最終組のメモリセルは１６の閾値電圧区分に分割されうる。３段階プログラミング処理の第１の段階中に（図１３Ａ〜図１３Ｂ）、メモリセルは、４つの中間閾値電圧区分Ｅ２、Ａ２、Ｂ２、およびＣ２のうちの１つにプログラムされる。これらの４つの中間閾値区分から、メモリセルが第２の段階中に１６の区分０〜Ｆにプログラムされる（図１３Ｂ〜図１３Ｃ）。第３の段階では（図１３Ｃ〜図１３Ｄ）、１６の区分０〜Ｆの各々が狭められる。第１の組のメモリセルの段階のいずれかの間に図１３Ａ〜図１３Ｄの処理に従って、第１の組のメモリセルをプログラムするとき、他のメモリセル（第１の組のメモリセルと同じワードライン、あるいは１つまたは複数の異なるワードラインに接続された）は、完全または部分的にプログラムされうる。
【００５４】
図１４は、図３のシステム（または他のシステム）などの不揮発性メモリを動作させる処理の一実施形態を表すフローチャートである。ステップ６００において、データをプログラムするための要求が受け取られる。要求は、ホスト、別のデバイス、またはコントローラから可能である。要求は、コントローラ、制御回路、ステートマシンなどのデバイスにおいて受け取られうる。要求に応じて、コントローラ、制御回路、ステートマシンなどのデバイスは、ステップ６０２において、データの記憶に使用されるフラッシュメモリセルのブロックを決定する。データは、ステップ６０４において、前述のプログラミング処理（または他のプログラミング処理）のいずれかを用いて決定されたブロックにプログラムされる。プログラムされたデータは、ステップ６０６において、１回以上読み出される。各ステップ間で予測不可能な時間が経過する場合があるので、ステップ６０４と６０６の間には破線があり、ステップ６０６は、ステップ６０４に対応して実施されない。ステップ６０６は、データ読出し要求などの他の事象に対応して実施される。
【００５５】
図１５は、ブロック内のメモリセルをプログラムするプログラミング処理を表すフローチャートである。図１５は、図１４のステップ６０４の一実施形態である。ステップ６３２では、プログラミングに先立って、メモリセルが（ブロック単位または他の単位で）消去される。一実施形態では、ソースとビットラインをフローティング状態である間に、選択されたブロックのワードラインを接地し、十分な時間ｐウェルを消去電圧（例えば２０ボルト）にまで上昇させることによってメモリセルが消去される。それゆえ、選択されたメモリセルのトンネル酸化物層に強力な電場が加わり、典型的にファウラ−ノルドハイムトンネル効果によって、フローティングゲートの電子が基板側に放出されて、選択されたメモリセルが消去される。電子がフローティングゲートからｐ−ウェル領域に移動するにつれて、選択されたメモリセルの閾値電圧が低下する。消去は、メモリアレイ全体、個々のブロック、またはセルの別の単位で実施されうる。他の消去技術も採用されうる。ステップ６３４では、消去されたメモリセルの閾値電圧区分を狭めるために、ソフトプログラミングが実施される。いくつかのメモリセルは、消去処理の結果として、必要以上に深い消去状態にあるかもしれない。ソフトプログラミングでは、より深く消去されたメモリセルの閾値電圧を、消去された状態に対してなお有効な範囲にあるより高い閾値電圧に移動するためにプログラミングパルスを印加することができる。ステップ６３６では、ブロックのメモリセルが本明細書の説明のようにプログラムされる。図１５の処理は、前述の様々な回路を用いて、ステートマシン、コントローラ、またはステートマシンとコントローラの組合せの指示で実施されうる。例えば、コントローラは、データをプログラムするために、ステートマシンに対して、命令およびデータを発行してもよい。それに応答して、ステートマシンは、プログラミング動作を実行するために前述の回路を動作させてもよい。
【００５６】
図１６は、共通ワードラインに接続されたメモリセルをプログラムする処理の一実施形態を表すフローチャートである。図１６は、図１５のステップ６３６中に実施される。一実施形態では、図１６の処理は、共通ワードラインに接続されたすべてのメモリセルをプログラムするために使用される。他の実施形態では、図１６の処理は、共通ワードラインに接続されたメモリセルの部分集合をプログラムするために使用される。したがって、複数のワードラインを含むメモリブロックの場合、図１５のステップ６３６は、ブロック内のメモリセルをプログラムするために各ワードラインに対して、図１６の処理を１回以上実施することを含む。
【００５７】
一例では、メモリセルは、ＷＬ０に接続されたメモリセルをプログラムする工程と、これに続くＷＬ１に接続されたメモリセルをプログラムする工程と、これに続くＷＬ２に接続されたメモリセルをプログラムする工程などを備える順序に従ってプログラムされる。他の順序も採用されうる。
【００５８】
他の実施形態では、第１のワードラインに接続された第１の組のメモリセルは、マルチステージプログラミング処理の段階の部分集合に従い、これに続いて第２のワードラインに接続された第２の組のメモリセルは、マルチステージプログラミング処理の段階の部分集合に従い、これに続いて第１のワードラインに接続された第１の組のメモリセルは、マルチステージプログラミング処理の１個以上の新たな段階に従うなどが可能である。このような実施形態では、図１６の処理は、図１５のステップ６３６中にマルチステージプログラミング処理の各段階に対して、１組のメモリセルにつき一度実施される。
【００５９】
図１６のステップ６６０では、システムは、過去のプログラミングまたはデフォルト値に基づく初期プログラミングパルスの大きさ（以下では「Ｖｐｇｍ＿ｖｓｔａｒｔ」と呼ばれる）を示す記憶された識別情報を読み出す。前述のように、プログラミング処理は、各パルスの大きさが増加する１組のプログラミングパルスを印加することを含む。例えば、図１７は、Ｖｐｇｍ＿ｖｓｔａｒｔによって指定された初期プログラミングパルスの大きさと、ΔＶｐｇｍによって指定されたパルス間の増分を表すステップサイズとを有する１組のプログラミングパルスを含むプログラム電圧の例を示す。第１のパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔは、ステップ６６０において読み出される。一実施形態では、大きさは１個以上の過去のプログラミング処理から決定される。プログラミングが実施されるのが初めてである場合には、Ｖｐｇｍ＿ｖｓｔａｒｔのデフォルト値がレジスタから読み出されうる。また、初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔは、フラッシュメモリアレイ、ＲＯＭ、または別の場所に記憶されうる。
【００６０】
図１６の処理では、２つの異なるステップサイズ、ΔＶｐｇｍ１およびΔＶｐｇｍ２を使用する。一実施形態では、ΔＶｐｇｍ１は、ΔＶｐｇｍ２よりも大きい。このように、図１６のプログラミング処理は、プログラミングが高速で実施されるように、より大きいステップサイズΔＶｐｇｍ１から始める。所定数のメモリセルが、図１６の処理のそれぞれの実施に対応して中間結果または中間状態に達すると、図１６の処理の特定の実施に合わせて、目標状態にメモリセルをより正確にプログラムし続けるために、図１６の処理の残りの期間では、処理は、より小さいステップサイズに切り替わる。例えば、図１８は、初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔを有するとともに、初期には、ΔＶｐｇｍ１のステップサイズを有する１組のプログラミングパルスを含むプログラム電圧を示す。６番目のパルスの後、ステップサイズは、ΔＶｐｇｍ２に変化する。一実施形態では、後述のように、ステップサイズが変化するパルスは、事前に決定されない。所定数のメモリセルが中間状態に達して、ステップサイズが変化するプログラミングパルスの値は、以後のプログラミングのために、初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔを改善するために採用される。すなわち、メモリセルの現在の挙動（例えば、所定数のメモリセルが中間状態に達したときの）は、オーバープログラミングを生じることなく、プログラミング処理の速度を高めるために初期プログラミングパルスの大きさを設定すべく採用される。一実施形態では、ΔＶｐｇｍ１はΔＶｐｇｍ２に等しい。
【００６１】
図１６に戻ると、ステップ６６２では、データがその特定のページまたはワードラインに合わせてロードされる。ステップ６６４では、第１のプログラムパルスの大きさは、ステップ６６０で読み出されたＶｐｇｍ＿ｖｓｔａｒｔの値に設定される。さらに、プログラムステップサイズΔＶｐｇｍはΔＶｐｇｍ１に設定され、プログラムカウンタＰＣはゼロとして初期化される。ステップ６６６では、第１のプログラムパルスが印加される。上で言及したように、一実施形態では、図１６の処理によってプログラムされているメモリセルは、共通ワードラインに接続されており、それゆえ、それらそれぞれの制御ゲートで同じプログラミングパルスを受け取る。プログラムパルスの後、メモリセルは、ステップ６６８において、電圧Ｖｖｓｔａｒｔに対して検証される。電圧値Ｖｖｓｔａｒｔは、１つの（または別の数の）プログラミングパルスの後にＶｖｓｔａｒｔに合格するどのセルも高速メモリセルであると考えられるように、デバイス特性によって選定される。Ｖｖｓｔａｒｔの閾値電圧レベルは、上で述べた中間状態の一例である。プログラムされているＮ個未満のメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合（ステップ６７０）、ステップ６７１において、プログラムカウンタが２０未満（または別の適当な値）であるかどうかが判定される。プログラムカウンタが２０未満でない場合、非常に多くの繰返しがあったことになり、プログラミング処理は失敗している。プログラムカウンタが２０未満（または別の適当な値）であれば、ステップ６７２において、プログラム電圧はΔＶｐｇｍ１だけ増分され、プログラムカウンタＰＣは１だけ増分される。なお、いくつかの実施形態では、より大きいステップサイズを反映するために、１以外の値でプログラムカウンタを増分することが好ましい場合もある。例えば、大きいステップサイズが小さいステップサイズの２倍である場合は、ループカウンタは２という値だけ増分されうる。ステップ６７２の後、処理はステップ６６６へ戻り次のプログラムパルスが印加される。ステップ６６６〜６７２は、少なくともＮ個のメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有するまで繰り返される。一実施形態では、Ｎの値は１５個のメモリセルでありうる。他の実施形態では、Ｎは１５未満であることも（例えば、１または別の数）１５を超えることもありうる。いくつかの実施例では、Ｎの適切な値を判定するために、デバイスの特性化などのシミュレーションを使用することができる。しかしながら、Ｎの値は、プログラムされているいずれのメモリセルよりも少ない数であるべきである。
【００６２】
ステップ６７０において、Ｎ個以上のメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有すると判定されるとき、処理はステップ６７８のように進み、ステップ６７８では、印加されたばかりのプログラミングパルスの大きさは、レジスタ、フラッシュメモリ場所、または他の場所に記憶され、以後のプログラミングにおいて、初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔとして使用されるか、あるいはこの大きさを決定するために使用される。一実施形態では、印加されたばかりのプログラミングパルスの大きさは、以後のプログラミングにおいて、初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔとして使用される。別の実施形態では、以後のプログラミングにおいて、初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔを決定するために、印加されたばかりのプログラミングパルスの大きさに、オフセット（正のオフセットまたは負のオフセット）が加えられる。ある実施形態では、印加されたばかりのプログラミングパルスの大きさはステップ６７８において記憶され、オフセットは後で印加される。他の実施形態では、オフセットは印加されたばかりのプログラミングパルスの大きさに対して使用され、結果はステップ６７８において記憶される。他の実施形態では、以後のプログラミングにおいて、初期プログラミングパルスＶｐｇｍ＿ｖｓｔａｒｔに使用される値は、印加されたばかりのプログラミングパルスの大きさまたは印加されたばかりのプログラムパルスのシーケンス番号の数学関数に基づいている。前述の実施形態のすべてにおいて、以後のプログラミングにおいて、初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔを決定するために、印加されたばかりのプログラミングパルスのある識別情報が使用される。図１７を参照すると、６番目のプログラミングパルスの後にＮ個のメモリセルがＶｖｓｔａｒｔを超える閾値電圧を有すると判定されると、６番目のプログラミングパルスの大きさ（Ｖ＿ａｔ＿ｖｓｔａｒｔ）またはパルスについての他の関連示度が、ステップ６７８においてオフセットの有無に関わらず記憶される。
【００６３】
ステップ６８０では、プログラムカウンタＰＣは０にリセットされ、処理はステップ６９２を続け、この時点で、メモリセルのすべてが、種々のプログラム状態に関する様々な目標検証レベルに対して検証される。メモリセルのすべてがそれらの指定された目標レベルに達していることが検証されると（ステップ６８２）、処理は完了しており、状態が合格しているものと設定される（ステップ６８４）。いくつかの実施形態では、すべてのメモリセルがそれらの指定された目標に達しなくてもプログラミング処理は無事に完了しうる。例えば、いくつかの実施形態では、ほとんどすべてのメモリセルがそれらの指定された目標に達すれば（例えば、せいぜい所定数のセルしかそれらの目標に達していない場合）、処理は成功している。目標に達していないメモリセルは、エラー補正を用いて読出し処理中に補正することができるが、あまりにも多くのメモリセルがそれらの目標に達しない場合は、データがメモリアレイ内の他の場所でプログラムされうる。
【００６４】
すべてのメモリセルが検証されない場合（多くの場合、最初のステップ６９２が実施されるとき）、それぞれの目標閾値電圧に達しているメモリセルは、さらなるプログラミングから除外される。一実施形態では、当技術分野で周知のように、メモリセルは、十分に大きいビットライン電圧（例えば、Ｖｄｄ）を印加することによって、さらなるプログラミングから除外される。
【００６５】
一実施形態では、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔに達しており、かつ、処理がステップ６７０からステップ６７８まで続くので、ステップ６７０が合格すると、少なくとももう１つの新たなプログラムパルスが印加されるまではメモリセルのいずれもそれら目標レベルに達することがないように、Ｖｖｓｔａｒｔは十分に低く設定される。こうして、プログラムステップサイズΔＶｐｇｍは、すべてのメモリセルがプログラミングから除外される前にΔＶｐｇｍ１からΔＶｐｇｍ２に変更される。
【００６６】
すべてのメモリセルが検証されていない場合、ステップ６８６では、プログラムカウンタが２０（または別の適当な値）未満であるかどうかが判定される。プログラムカウンタが２０（または別の適当な値）以上であれば、非常に多くのステップが実施されており、処理は失敗である（ステップ６９４）。プログラムカウンタがなお２０（または別の適当な値）未満であれば、ステップ６８８において、プログラム電圧がΔＶｐｇｍ２だけ変更されてプログラムカウンタが１だけ増分される。ステップ６９０では、別のプログラムパルスが印加され、処理がステップ６９２に進んで、メモリセルが検証される。いくつかの実施形態では、ステップ６８８において、ステップサイズの相違を勘案してプログラムカウンタが１とは異なる値で増分されてもよい。なお、ΔＶｐｇｍ２はΔＶｐｇｍ１よりも小さいステップサイズである。それゆえ、プログラム電圧Ｖｐｇｍは、ステップ６９０〜６８８の反復中のプログラム電圧Ｖｐｇｍの緩やかな上昇に比べて、ステップ６６６〜６７２の反復中ははるかに速く上昇する。
【００６７】
一実施形態では、プログラムカウンタは、ステップ６８０においてリセットされない。このような実施形態では、プログラムカウンタが２０を超える数未満であるかどうかを判定するために、ステップ６８０における試験は変更されてもよい。
【００６８】
一例では、図１６の処理に、図６のフルシーケンスプログラミング方式が採用される。この実施形態では、ＶｖａはＶｖｓｔａｒｔとして使用されうるが、Ｖｖａ未満の値もＶｖｓｔａｒｔとして使用されうる。
【００６９】
第１の組のメモリセルに作用するマルチステージプログラム処理段階の間に、第２の組のメモリセルがあるプログラミングを受けることができるように、第１の組のメモリセルに作用するマルチステージプログラム処理がある。しかしながら、一実施形態では、メモリセル群に対して、いったん図１６の処理が開始すると、他のメモリセルは、図１６の処理が完了するまでプログラミングを受けない。
【００７０】
ステップ６９２の検証処理中およびステップ６０６の読出し処理中に、選択ワードラインは電圧に接続されており、その電圧のレベルは、関係しているメモリセルの閾値電圧がこのようなレベルに達しているかどうかを判定するために、各読出し処理（例えば、図６の読出し比較レベルＶｒａ、Ｖｒｂ、およびＶｒｃを参照されたい）または検証処理（例えば、図６の検証レベルＶｖａ、Ｖｖｂ、およびＶｖｃを参照されたい）に対して指定される。ワードライン電圧を印加した後、メモリセルが、ワードラインに印加された電圧に応答してオンになったかどうかを判定するために、メモリセルの伝導電流が測定される。一定値を超える伝導電流が測定されると、メモリセルがオンになっており、ワードラインに印加された電圧がメモリセルの閾値電圧よりも大きいものと考えられる。一定値を超える伝導電流が測定されなければ、メモリセルがオンになっておらず、ワードラインに印加された電圧がメモリセルの閾値電圧以下であると考えられる。
【００７１】
読出しまたは検証処理中に、メモリセルの伝導電流を測定する方法は数多くある。一例として、メモリセルの伝導電流は、センスアンプの専用キャパシタへの伝導電流の放電速度または充電速度によって測定される。別の例としては、選択されたメモリセルの伝導電流によって、メモリセルを含むＮＡＮＤストリングは、対応するビットラインを放電させる（または放電させない）ことができる。ビットラインが放電されたか否かを調べるために、一定期間後に、ビットラインの電圧が測定される。なお、本明細書に記載の技術には、検証／読出しに関して、当技術分野で周知の種々の方法が利用されうる。検証／読出しに関するさらなる情報は下記の特許文献に開示されており、その全体が参照によって本明細書に組み込まれる。（１）米国特許出願公開第２００４／００５７２８７号明細書、（２）米国特許出願公開第２００４／０１０９３５７号明細書、（３）米国特許出願公開第２００５／０１６９０８２号明細書、および（４）米国特許出願公開第２００６／０２２１６９２号明細書である。前述の消去、読出し、および検証処理は、当技術分野で周知の技術によって実施される。それゆえ、説明される詳細の多くは当業者によって変更されうる。当技術分野で周知の他の消去、読出し、および検証技術も利用されうる。
【００７２】
図１９〜図２６は、図１６の処理を用いてメモリセルをプログラムする、図１５のステップ６３６を実施するための様々な実施形態を表すフローチャートである。
【００７３】
図１９は、前述のマルチステージプログラミング処理のいずれかを含む、マルチステージプログラミング処理（または多重プログラミング処理）を実施する実施形態を表す。図１９の実施形態では、Ｖｐｇｍ＿ｖｓｔａｒｔが、マルチステージプログラミング処理の第１の段階中に更新され、同じマルチステージプログラミング処理の以後の段階では、第１の段階からＶｐｇｍ＿ｖｓｔａｒｔが使用される。ステップ７０２では、図１６の処理に従って実施されることを含む、マルチステージプログラミング処理の第１の段階が実施される。前述のように、図１６の処理を実施することは、図１６のステップ６７８におけるＶｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む。ステップ７０４では、ステップ７０２において更新され記憶された値である（またはこの値に基づいている）初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔに使用される値を用いて、図１６の処理を実施することを含む、マルチステージプログラミング処理の第２の段階が実施される。ステップ７０４を実施するとき、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２（または、いくつかの実施形態ではステップ６８０）に進むよう、図１６の処理はステップ６７８をスキップするように修正される。このように、Ｖｐｇｍ＿ｖｓｔａｒｔはステップ７０４の実施中に更新されない。
【００７４】
ステップ７０６では、ステップ７０２において更新され記憶された値である（またはこの値に基づいている）初期プログラミングの大きさＶｐｇｍ＿ｖｓｔａｒｔに使用される値とともに図１６の処理を実施することを含む、マルチステージプログラミング処理の第３の段階が実施される。ステップ７０６を実施するとき、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２（または、いくつかの実施形態ではステップ６８０）に進むよう、図１６の処理は、ステップ６７８をスキップするように修正される。このように、Ｖｐｇｍ＿ｓｔａｒｔは、ステップ７０６の実施中に更新されない。
【００７５】
ステップ７０８では、ステップ７０２において更新され記憶された値である（またはこの値に基づいている）初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔに使用される値とともに図１６の処理を実施することを含む、マルチステージプログラミング処理の第４の段階が実施される。ステップ７０６を実施するとき、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２（または、いくつかの実施形態ではステップ６８０）に進むよう、図１６の処理はステップ６７８をスキップするように修正される。このように、Ｖｐｇｍ＿ｖｓｔａｒｔは、ステップ７０８の実施中に更新されない。図１９のフローチャートは、マルチステージプログラミング処理の４つの段階を示す。しかしながら、図１９の処理は、ステップ７０８のような余分なステップを追加することによって４つより多くの段階に拡大されうる。あるいは、図１９の処理には、ステップ７０２、７０４、および７０６のみを実施する３つの段階のみのマルチステージプログラミング処理が使用されうる。図１９の処理には、ステップ７０２および７０４のみを実施する２つの段階のみのマルチステージプログラミング処理が使用されうる。なお、いくつかの実施形態では、ΔＶｐｇｍ２の値は、マルチステージプログラミング処理の各段階に対して変更されうる。他の実施形態では、各段階に同じΔＶｐｇｍ２が使用される。同様に、ある実施形態では、ΔＶｐｇｍ１の値がマルチステージプログラミング処理の各段階に対して変更されうる。他の実施形態では、各段階に同じΔＶｐｇｍ２が使用される。
【００７６】
別の組の実施形態では、ステップ７０２は、図１６の処理を実施することと、Ｖｐｇｍ＿ｖｓｔａｒｔに対する新たな値を記憶することとを含む。しかしながら、ステップ７０４、７０６、および７０８は、図１６の処理よりもむしろ図１９Ａの処理を実施する。図１９Ａは、ステップ６６６、６６８、６７０、６７１、６７２、６７８、および６８０が実施されないことを除けば図１６と同様である。ステップ６６０および６６２は、図１６の場合と同じである。ステップ６６４ａでは、ΔＶｐｇｍはΔＶｐｇｍ２に設定され、この後、処理はステップ６９０に進み、プログラムパルスが印加される。ステップ６８２、６８４、６８６、６８８、６９０、６９２、および６９４は、図１６の場合と同じである。この実施形態の場合、最適なＶｐｇｍ＿ｖｓｔａｒｔの値が既に分かっているので、この値の探索に時間は費やされない。なお、いくつかの実施形態では、ΔＶｐｇｍ２の値は、マルチステージプログラミング処理の各段階に対して変更されうる。他の実施形態では、各段階で同じΔＶｐｇｍ２が使用される。
【００７７】
一例では、図１９の処理には、図７のプログラミング方式が採用される。この実施形態では、ＶｒａまたはＶｖａ未満の別の値が、Ｖｖｓｔａｒｔとして使用されうる。図１９の処理に図８のプログラミング方式が採用されるとき、Ｖｖｂ’未満の値がＶｖｓｔａｒｔとして使用されうる。図１９の処理に図９Ａ〜図９Ｃのプログラム方式が採用されるとき、Ｖｖａ、Ｖｖａ未満の値、またはＶｖｃ未満の値が、データをＣ状態にプログラムするときにＶｖｓｔａｒｔとして使用されうる。図１９の処理に図１０Ａ〜図１０Ｄのプログラミング方式が採用されるとき、Ｖｖｂ’未満の値が、データをＢ’にプログラムするときにＶｖｓｔａｒｔとして使用されうる。図１９の処理に図１１Ａ〜図１１Ｂのプログラミング方式が採用されるとき、Ｖｖａ＊の値またはＶｖａ*未満の値が、データをＡ＊、Ｂ＊、またはＣ＊にプログラムするときにＶｖｓｔａｒｔとして使用されうる。図１９の処理に図１２Ａ〜図１２Ｅのプログラミング方式が採用されるとき、Ｖｖｓ４’未満の値が、データをＳ４’にプログラムするときにＶｖｓｔａｒｔとして使用されうる。図１９の処理に図１３Ａ〜図１３Ｄのプログラミング方式が採用されるとき、ＶｖＡ２の値またはＶｖａ２未満の値が、データをＡ２、Ｂ２、およびＣ２にプログラムするときにＶｖｓｔａｒｔとして使用されうる。さらに、Ｖｖｓｔａｒｔには他の値も使用されうる。Ｖｖｓｔａｒｔの上記の値は、後述の他の実施形態にも使用されうる。
【００７８】
図２０は、前述のマルチステージプログラミング処理のいずれかを含む、マルチステージプログラミング処理（または多重プログラミング処理）を実施する別の実施形態を表す。図２０の実施形態では、Ｖｐｇｍ＿ｖｓｔａｒｔは、マルチステージプログラミング処理の各段階で更新される。ステップ７２４では、図１６の処理の実施を含む、マルチステージプログラミング処理の第１の段階が実施される。前述のように、図１６の処理の実施は、図１６のステップ６７８において、Ｖｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む。ステップ７２６では、ステップ７２４において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値によって図１６の処理を実施することを含む、マルチステージプログラミング処理の第２の段階が実施される。ステップ７２６は、図１６のステップ６７８において、Ｖｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む。ステップ７２８では、ステップ７２６において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値によって、図１６の処理を実施することを含む、マルチステージプログラミング処理の第３の段階が実施される。ステップ７２８は、図１６のステップ６７８において、Ｖｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む。ステップ７３０では、ステップ７２８において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値によって、図１６の処理を実施することを含む、マルチステージプログラミング処理の第４の段階が実施される。ステップ７３０は、図１６のステップ６７８において、Ｖｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む。
【００７９】
図２０のフローチャートは、マルチステージプログラミング処理における４つの段階を示す。しかしながら、図２０の処理は、ステップ７３０に類似する新たなステップを追加することによって４つ以上の段階に拡大されうる。あるいは、図２０の処理には、ステップ７２４、７２６、および７２８だけを実施する３つの段階のみを有するマルチステージプログラミング処理が使用されうる。図２０の処理には、ステップ７２４および７２６だけを実施する２の段階のみを有するマルチステージプログラミング処理が使用されうる。
【００８０】
図２１は、多重プログラミング処理を実施する別の実施形態を表す。図２１の実施形態では、Ｖｐｇｍ＿ｖｓｔａｒｔが第１のページをプログラムする間に更新され、以後のページのプログラミングでは、第１のページをプログラムする間に決定されたＶｐｇｍ＿ｖｓｔａｒｔが使用される。ステップ７６０では、データの最初のページは、図１６のステップ６７８においてＶｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む、図１６の処理を用いてプログラムされる。ステップ７６２では、第２のページがステップ７６０において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値とともに、図１６の処理を用いてプログラムされる。ステップ７６２を実施するとき、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２に進むよう、図１６の処理は、ステップ６７８をスキップするように修正される。このように、Ｖｐｇｍ＿ｓｔａｒｔは、ステップ７６２の実施中に更新されない。ステップ７６４では、第３のページが、ステップ７６０において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値とともに、図１６の処理を用いてプログラムされる。ステップ７６４を実施するとき、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２に進むよう、図１６の処理はステップ６７８をスキップするように修正される。このように、Ｖｐｇｍ＿ｓｔａｒｔは、ステップ７６２の実施中に更新されない。より多くのデータページをプログラムする必要がある場合は、処理は、ステップ７６４と同様の新たなステップを続けるが、異なるデータページに対して行われる。２つのデータページのみをプログラムしている場合は、ステップ７６０および７６２のみをプログラムする必要がある。別の実施形態では、ステップ７６２、７６４、および新たなページに対することが、ステップ７６０からのＶｐｇｍ＿ｖｓｔａｒｔを用いて、図１９Ａの処理（図１６の前述の修正版ではない）に基づいてプログラムする。
【００８１】
図２２は、多重プログラミング処理を実施する別の実施形態を表す。図１９の実施形態では、各データページのプログラミング中にＶｐｇｍ＿ｖｓｔａｒｔが更新される。ステップ７８２では、第１のデータページが、図１６のステップ６７８におけるＶｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む、図１６の処理を用いてプログラムされる。ステップ７８４では、ステップ７８２において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値によって、図１６の処理を実施することを含む、第２のデータページがプログラムされる。ステップ７８４は、図１６のステップ６７８におけるＶｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む。ステップ７８６では、ステップ７８４において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値によって、図１６の処理を実施することを含む、第３のデータページがプログラムされる。ステップ７８６は、図１６のステップ６７８におけるＶｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む。より多くのデータページをプログラムする必要がある場合は、処理は、ステップ７８６と同様の新たなステップを続けるが、異なるデータページに対して行われる。２つのデータページのみをプログラムしている場合は、ステップ７８２および７８４のみをプログラムする必要がある。
【００８２】
図２３は、多重プログラミング処理を実施する別の実施形態を表す。図２３の実施形態では、第１のワードラインに接続されたメモリセルをプログラムしている間に、Ｖｐｇｍ＿ｖｓｔａｒｔが更新され、他のワードラインのメモリセルのプログラミングでは、第１のワードラインに接続されたメモリセルをプログラムしている間に決定されたＶｐｇｍ＿ｖｓｔａｒｔが使用される。ステップ８００では、第１のワードラインに接続されたメモリセルは、図１６のステップ６７８におけるＶｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む、図１６の処理を用いてプログラムされる。ステップ８０２では、第２のワードラインに接続されたメモリセルは、ステップ８００において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値とともに、図１９Ａの処理または図１６の処理を用いてプログラムされる。図１６の処理を用いてステップ８０２を実施するとき、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２に進むよう、図１６の処理はステップ６７８をスキップするように修正される。このように、Ｖｐｇｍ＿ｓｔａｒｔは、ステップ８０２の実施中に更新されない。ステップ８０４では、第３のワードラインに接続されたメモリセルは、ステップ８００において更新され記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値とともに、図１９Ａの処理または図１６の処理を用いてプログラムされる。図１６の処理を用いてステップ８０４を実施するとき、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２に進むよう、図１６の処理はステップ６７８をスキップするように修正される。このように、Ｖｐｇｍ＿ｓｔａｒｔは、ステップ８０４の実施中に更新されない。より多くのワードラインをプログラムする必要がある場合は、処理は８０４と同様の新たなステップを続けるが異なるワードラインに対して行われる。２つのワードラインのみをプログラムしている場合は、ステップ８００および８０２のみを実施する必要がある。
【００８３】
いくつかの実施形態では、初期プログラミングパルスの大きさを、偶数および奇数のワードラインに対して別々に決定することも可能である。この方式は、製造工程のばらつきに起因して、偶数および奇数のワードラインが異なるプログラミング特性を有する場合に有益である。
【００８４】
図２４は、多重プログラミング処理を実施する実施形態を表す。図２４の実施形態では、Ｖｐｇｍ＿ｖｓｔａｒｔは周期的に更新される。各更新の間には、Ｖｐｇｍ＿ｖｓｔａｒｔに対して、事前に決定された値が使用される。ステップ８２０では、メモリセルが、図１６のステップ６７８におけるＶｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む、図１６の処理を用いてプログラムされる。次にデータをプログラムする必要があるときには、システムは、決定されたＶｐｇｍ＿ｖｓｔａｒｔの最新の値が記憶されてからの経過時間がステップ８２２における所定期間よりも大きいかどうかを判定する。大きくなければ、ステップ８２４の次のプログラム処理では、Ｖｐｇｍ＿ｖｓｔａｒｔを更新せずに、図１６の処理が使用される。すなわち、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２に進むよう、図１６の処理はステップ６７８をスキップするように修正される。あるいは、ステップ８２４は、図１９Ａの処理を実施することによって実施されうる。ステップ８２２において、決定されたＶｐｇｍ＿ｖｓｔａｒｔの最新の値が記憶されてからの経過時間が、所定期間よりも大きいと判定されると、ステップ８２６において、次のプログラミング処理は、図１６のステップ６７８におけるＶｐｇｍ＿ｖｓｔａｒｔの値を更新することを含む、図１６の方法を用いて実施される。
【００８５】
図２５は、多重プログラミング処理を実施する実施形態を表す。この実施形態では、Ｖｐｇｍ＿ｖｓｔａｒｔの値は、予備的なプログラミング中に、図１６の処理を実施する間に更新される。予備的なプログラミングは、ユーザデータがプログラムされないプログラミング処理である。むしろ、ダミーデータおよび／またはダミーメモリセルが、図１６の処理を用いてプログラムされ、その処理中にＶｐｇｍ＿ｖｓｔａｒｔが更新される。続いて、ユーザデータをプログラムするとき、図１６の処理は、予備的なプログラミングに基づく値である（またはこの値に基づいている）Ｖｐｍｇ＿ｖｓｔａｒｔおよびユーザデータをプログラムする間に更新されないＶｐｍｇ＿ｖｓｔａｒｔとともに使用される。例えば、ステップ８４０では、予備的なプログラミング（図１６の処理を使用する）が実施されてＶｐｍｇ＿ｖｓｔａｒｔが更新される。ステップ８４２では、ユーザデータが図１６の処理と予備的なプログラミングに基づくＶｐｍｇ＿ｖｓｔａｒｔとを用いてプログラムされる。Ｖｐｍｇ＿ｖｓｔａｒｔは、ステップ８４２中に更新されない。すなわち、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２に進むよう、図１６の処理はステップ６７８をスキップするように修正される。ステップ８４４では、ユーザデータが図１６の処理と予備的なプログラミングに基づくＶｐｍｇ＿ｖｓｔａｒｔとを用いてプログラムされる。Ｖｐｍｇ＿ｖｓｔａｒｔは、ステップ８４４中に更新されない。すなわち、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２に進むよう、図１６の処理はステップ６７８をスキップするように修正される。また、ユーザデータをプログラムする新たなステップは、Ｖｐｍｇ＿ｖｓｔａｒｔを更新せずに実施されうる。ある実施形態では、図２５の処理は、ステップ８４２の後、停止しうる。代替実施形態では、ステップ８４２および８４４は、図１６の処理に対する前述の修正でなく図１９Ａの処理（Ｖｐｍｇ＿ｖｓｔａｒｔを更新しないステップを含む）を実施することによって実施されうる。
【００８６】
なお、本明細書の記載される多重プログラミング処理を実施する方法は、１つまたは複数のマルチステージプログラミング処理の複数の段階を実施するために採用されうる。
【００８７】
図２６は、前述のマルチステージプログラミング処理のいずれかを含む、マルチステージプログラミング処理を実施する別の実施形態を表す。図２６の実施形態では、Ｖｐｍｇ＿ｖｓｔａｒｔは、マルチステージプログラミング処理の第２の段階中に更新される。ステップ８４６では、マルチステージプログラミング処理の第１の段階は、Ｖｐｍｇ＿ｖｓｔａｒｔを更新せずに、図１６の処理を用いて実施される。すなわち、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有する場合に、処理がステップ６７０からステップ６９２に進むよう、図１６の処理は、ステップ６７８をスキップするように修正される。あるいは、図１９Ａの処理が採用されうる。ステップ８４８では、マルチステージプログラミング処理の第２の段階がＶｐｍｇ＿ｖｓｔａｒｔの更新することとともに、図１６の処理を用いて実施される。ステップ８５０では、マルチステージプログラミング処理の第３の段階が、ステップ８４８中に実施されたステップ６７８で記憶された値である（またはこの値に基づいている）Ｖｐｇｍ＿ｖｓｔａｒｔに使用される値とともに、図１６の処理を用いて実施される。いくつかの実施形態では、ステップ８９０は、Ｖｐｍｇ＿ｖｓｔａｒｔを更新することを含みうるが、他の実施形態では、Ｖｐｍｇ＿ｖｓｔａｒｔは、ステップ８９０において更新されない。ステップ８９０のような新たなステップが、図２６の処理に追加されうる。
【００８８】
一般に、粗／密プログラミングは、２段階のプログラミングアプローチを含む。第１の段階は、粗段階であり、重点が素早いプログラミングにあり、精度に対する必要性が低い。第２の段階は、密段階であり、重点が正確なプログラミングにある。一実施形態では、粗段階は、１つまたは複数の粗検証レベルにプログラムすることを含み、密段階は、１つまたは複数の密検証レベルにプログラムすることを含み、密検証レベルは、プログラミングの目標レベルに対応する。
【００８９】
図１１Ａおよび図１１Ｂ（前述の）は、２つのパスを使用する粗／密プログラミングの一例を提供する。第１のパス中に（図１１Ａ）粗段階が実施される。第２のパス中に（図１１Ｂ）第２段階が実施される。図２７および図２８は、１つのパスのみを使用する粗／密プログラミングの実施形態を示すグラフを含み、１つのパス中に粗段階と密段階の両方が実施される。
【００９０】
図２７Ａ、図２７Ｂ、および図２７Ｃは、メモリセルが密モードに入らないように、粗検証レベルと目標検証レベルとの両方を、同じパルスで通過させる閾値電圧を有する高速メモリセルの挙動を示す。図２８Ａ、図２８Ｂ、および図２８Ｃは、粗モードと密モードの両方に関与する低速メモリセルを示す。図２７Ａおよび図２８Ａは、プログラムされているメモリセルの制御ゲートに印加されるプログラミングパルスＶｐｇｍを示す。なお、図２７Ａおよび図２８Ａは、グラフを読み取り易くするために、互いに隣接するプログラミングパルスを示す。しかしながら、実際には、検証処理を可能にするためにパルス間に時空間がある。図２７Ｂおよび図２８Ｂは、プログラムされているメモリセルのビットライン電圧Ｖｂ１を示す。図２７Ｃおよび図２８Ｃは、プログラムされているメモリセルの閾値電圧を示す。
【００９１】
図２７Ａ、２７Ｂ、および２７Ｃに関して、高速メモリセルが示される。時間ｔ０で始まる第１のパルスに応答して、メモリセルの閾値電圧は、Ｖｖｅｒ３以上に上昇される。一実施形態では、検証レベルＶｖｅｒ３は、図１６のＶｖｓｔａｒｔに対応する。ｔ１とｔ２の間では、メモリセルの閾値電圧は、Ｖｖｅｒ２（粗検証レベル）とＶｖｅｒ１（密検証レベル）の両方以上に上昇する。ｔ２において、ビットライン電圧は、さらなるプログラミングを阻止（例えば、除外）するために、Ｖｉｎｈｉｂｉｔまで上昇される。なお、一実施形態では、Ｖｖｅｒ３は、最低のプログラムされた状態でＶｖｅｒ２よりも０．２Ｖ〜０．３Ｖ低くてよい。
【００９２】
図２８Ａ〜図２８Ｃの低速メモリセルに関して、メモリセルの閾値電圧は、ｔ２〜ｔ３の期間までＶｖｅｒ３を超えて上昇しない。それゆえ、プログラミングパルスは、ｔ３の前にΔＶｐｇｍ１だけ増分する。ページ内のＮ個を超えるメモリセルの閾値電圧が、ｔ３においてＶｖｅｒ３よりも大きければ、パルスの増分値は、ｔ３においてΔＶｐｇｍ２に変更され、後続のパルスは、大きさがΔＶｐｇｍ２だけ増加する。メモリセルの閾値電圧は、ｔ３とｔ４の間でＶｖｅｒ２以上に上昇し、したがって、メモリセルは、密プログラミング段階に入り、ビットラインがｔ４においてＶｓ（例えば、約０．２〜０．５Ｖ、または別の適当なレベル）まで上昇する。ｔ４とｔ５の間では、閾値電圧の増加が、ビットライン電圧の増加とＶｐｇｍ増分値の減少とによって鈍化する。しかしながら、閾値電圧はｔ４とｔ５の間でＶｖｅｒ１よりも確実に大きくなり、したがって、閾値電圧はその目標レベルに達してビットライン電圧はｔ５においてさらなるプログラミングを阻止するためにＶｉｎｈｉｂｉｔまで上昇する。粗／密プログラミング技術は、前述の様々なプログラミング処理と併用されうる。
図２９は、プログラミングの別の実施形態を提供する。図２９は、処理の後半でＶｐｇｍ＿ｖｓｔａｒｔの以後の値をより正確に決定するステップ９２２および９２４を含む、図１６の処理の代替実施形態を示す。図２９のステップ９００〜９１２は、図１６のステップ６６０〜６７２と同じである。図２９のステップ９２６、９２８、９３０、９３８、９３２、および９３４は、図１６のステップ６８２、６８４、６８６、６９４、６８８、および６９０と同じである。図２９のステップ９１０において、Ｎ個以上のメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有すると判定される場合は、図２９の処理は、ステップ９１０からステップ９１４に進み、プログラムカウンタＰＣをゼロにリセットする。ステップ９１４の後、処理はステップ９２０に進む。図２９のステップ９２０は、図１６のステップ６９２と同じである。ステップ９２０においてメモリセルを検証した後、ステップ９２２は、少なくともＭ個のメモリセルがそれらの目標閾値電圧レベルに達しており、かつ、新たなプログラミングから除外されているかどうかを判定することを含む。一例では、Ｍが１５のメモリセルに等しいこともありうる。他の実施形態では、１５以上又は以下が採用されうる。少なくともＭ個のメモリセルが、それらの目標閾値電圧レベルに達しておらず、かつ、新たなプログラミングから除外されている場合は、処理はステップ９２６に進む。しかしながら、Ｍ個のメモリセルが除外されている場合は、印加されたパルスの最新の大きさが記録され、処理はステップ９２６に進む。なお、システムは、Ｍ個のメモリセルがそれらの目標閾値電圧レベルに達しており、かつ、新たなプログラミングから除外されていると判定される最初の時点で大きさ（または他のデータ）を記録するだけである。
【００９３】
ステップ９２４の一実施形態は、以後のプログラミングに備えて、初期プログラミングパルスＶｐｇｍ＿ｖｓｔａｒｔの大きさとして使用するか、または、この大きさを決定するために、レジスタ、フラッシュメモリ場所、または他の場所で印加されたばかりのプログラミングパルスの大きさを記憶することを含む。一実施形態では、印加されたばかりのプログラミングパルスの大きさは、以後のプログラミングのための初期プログラミングパルスＶｐｇｍ＿ｖｓｔａｒｔの大きさとして使用される。別の実施形態では、以後のプログラミングのための初期プログラミングパルスＶｐｇｍ＿ｖｓｔａｒｔの大きさを決定するために、印加されたばかりのプログラミングパルスの大きさに、オフセット（正のオフセットまたは負のオフセット）が加えられる。いくつかの実施形態では、印加されたばかりのプログラミングパルスの大きさは、ステップ９２４において記憶され、オフセットは後で印加される。他の実施形態では、オフセットは、印加されたばかりのプログラミングパルスの大きさに用いられ、その結果が、ステップ９２４において記憶される。いくつかの実施形態では、印加されたばかりのプログラミングパルスの大きさまたは、印加されたばかりのパルスの識別情報は、数式などの手段を用いる以後のプログラミングに備えて、初期プログラミングパルスの大きさＶｐｇｍ＿ｖｓｔａｒｔを決定するために使用される。
【００９４】
ステップ９２４からのパルスの大きさを使用する１つの優位性は、ΔＶｐｇｍ２がΔＶｐｇｍ１よりも小さい場合に、分解能がステップ９２４で記憶されたパルスの大きさに対して高くなることである。図２９の処理は、図６〜図１３に示された実施形態を含む、前述の実施形態で使用されうる。
【００９５】
上記の説明は、事前のプログラミング処理に基づいて、初期プログラミングパルスの大きさを動的に適合させるシステムの例を提供する。いくつかの実施形態では、プログラミング処理は、第１の段階が以後の段階に備えて初期プログラミングパルスの大きさを設定することを含む複数の段階を含む。最適な初期の大きさを有する後の段階をプログラムすることによって、プログラミング時間が短縮されうる（プログラミングループが少なくなる）。前述のような初期プログラミング電圧を動的に設定しないいくつかの先行システムでは、初期プログラミング電圧は、デバイス内のサイクリングおよびプログラミング速度のばらつきに対して余裕を持たせるために、典型的に最適よりもはるかに低く設定される。
【００９６】
前述の実施形態のいくつかにおいて、第１のプログラミング段階では、プログラミング時間を節約するために、第１の段階中にプログラミングパルス間により大きいステップサイズ（ΔＶｐｇｍ）が採用された。しかしながら、以後の段階に備えて、最適な初期プログラミング電圧Ｖｐｇｍ＿ｖｓｔａｒｔを検出するためには、後の段階が典型的に比較的小さいサイズでプログラムされるので、比較的小さいステップサイズが望ましい。Ｖｐｇｍ＿ｖｓｔａｒｔを決定するために比較的小さいステップサイズを使用すると、より大きい分解能が得られる。しかしながら、比較的小さいステップサイズを使用すると、プログラミングの実施に要する時間がやはり増加する。
【００９７】
比較的小さいステップサイズを使用する場合に、総時間ペナルティなしでＶｐｇｍ＿ｖｓｔａｒｔの分解能を高めることができる実施形態を以下で説明する。一実施形態では、所要最少数のメモリセルが、後続のプログラミングに備えてＶｐｇｍ＿ｖｓｔａｒｔを決定するために使用される第１の検証レベルＶＶｖｓｔａｒｔ（または別の条件）に合格しているとき、第１の検証レベルとは異なるレベルの１つまたは複数の新たな（または代替的な）検証処理（１つまたは複数の代替条件を試験するための）が、初期プログラミング電圧Ｖｐｇｍ＿ｖｓｔａｒｔを決定しうる分解能を高めるために実行される。一例では、１つの新たな検証ステップが現行ステップサイズの１／２（または別の比）に等しい量だけＶｖｓｔａｒｔと異なる第２の検証レベル（例えば、Ｖｖｓｔａｒｔ−２）で実施される。このような場合、新たな初期プログラミング電圧は、ΔＶｐｇｍ／２の分解能で決定されうる。他の実施形態では、初期プログラミング電圧を決定しうる分解能をさらに高めるために、複数の新たな検証処理が行われうる。当該技術の１つの優位性は、分解能を高めるために、プログラミングの第１段階中のステップサイズを縮小する必要がないことである。プログラミング時間の増加だけは、１つまたは複数の新たな検証処理に起因しており、この検証処理はプログラミング時間をさほど劇的に増加させるものではない。
【００９８】
図３０は、システムが、図１６のステップ６７８で記憶すべきプログラミングパルスの大きさを検出する時点までのプログラミング処理の第１段階の最初の５つのプログラミングパルスに応答する閾値電圧区分移動のグラフ表示を示す。図３０の例では、十分な数（例えば、１５個）のメモリセルがＶｖｓｔａｒｔに達するまでに、５つのプログラミングパルスが印加されている。図から分かるように、網掛け領域で表わされる多くのメモリセルはＶｖｓｔａｒｔよりも大きい閾値電圧を有する。印加された最後のプログラミングパルス（５番目のプログラミングパルス）は、Ｖｐｇｍ＿ｖｓｔａｒｔとして記憶された大きさを有しているか、あるいはステップ６７８においてＶｐｇｍ＿ｖｓｔａｒｔを計算するために使用される。
【００９９】
図３１は、Ｖｖｓｔａｒｔよりも大きい閾値電圧を有するＮ個を超えるメモリセルが検出されるポイントまで、プログラミング処理の最初の３つのプログラミングパルス（パルス１、パルス２、パルス３）に応答する閾値電圧区分移動のグラフ表示を示す。この場合、Ｖｖｓｔａｒｔ−２よりも大きい閾値電圧を有するＮ個を超えるメモリセルが発生することもある。この場合、１つまたは複数の追加的／代替的検証処理が実施される。例えば、１つの追加的／代替的検証処理は、Ｖｓｔａｒｔ−２で実施されうる（代替結果）。その追加的／代替的検証処理が実施されるとき、Ｎ個を超えるメモリセルがＶｖｓｔａｒｔ−２よりも大きい閾値電圧を有するものと判定される。この例では、Ｖｖｓｔａｒｔは、Ｖｖｓｔａｒｔ−２よりもΔＶｐｇｍ／２だけ大きい（他の値も可能である）。その場合、後の段階に備えて初期プログラミング電圧Ｖｐｇｍ＿ｖｓｔａｒｔを決定するために使用されるプログラミングパルスの大きさは、パルス３の大きさからΔＶｐｇｍ／２だけ減少される（他の値も可能である）。すなわち、次の初期プログラミングパルスの大きさとして記憶される値は、第３のプログラミングパルスの大きさからΔｖｅｒｉｆｙを差し引いた値に等しいか、あるいは、この値によって定義され、Δｖｅｒｉｆｙは、２つの検証レベルＶｖｓｔａｒｔとＶｖｓｔａｒｔ−２との差として定義される。
【０１００】
図３２は、図３１の例よりもプログラムするのが遅い１組のメモリセルの別の例を提供する。この例では、第３のプログラミングパルス（パルス３）の後、Ｖｖｓｔａｒｔに合格したメモリセルの数は十分であるが、Ｖｖｓｔａｒｔ−２に合格したメモリセルの数は不十分である。したがって、後の段階に備えて初期プログラミング電圧Ｖｐｇｍ＿ｖｓｔａｒｔを決定するために使用されるプログラミングパルスの大きさが、第２のプログラミングパルスの大きさになる。
【０１０１】
他の実施形態では、複数の追加的／代替的検証処理が、初期プログラミングパルスを決定しうる分解能をさらに高めるために使用されうる。例えば、当該システムは、Ｎ個（または別の数）よりも多くのメモリセルがＶｖｓｔａｒｔ−２およびＶｖｓｔａｒｔ−３よりも大きい閾値電圧を有するかどうかを判定するためにメモリセルを試験することができ、２つの検証レベルＶｖｓｔａｒｔとＶｖｓｔａｒｔ−２との差はΔＶｐｇｍ／３であり、２つの検証レベルＶｖｓｔａｒｔ−２とＶｖｓｔａｒｔ−３との差もΔＶｐｇｍ／３である。したがって、２つの検証レベルＶｖｓｔａｒｔとＶｖｓｔａｒｔ−３との差は（２）＊ΔＶｐｇｍ／３である。Ｘ個の追加的／代替的検証処理が使用される場合は、当該システムはＶｖｓｔａｒｔ、Ｖｖｓｔａｒｔ−２、Ｖｖｓｔａｒｔ−３、．．．ＶｖｓｔａｒｔＸで検証を行い、Ｖｖｓｔａｒｔ−ＸはＶｖｓｔａｒｔと（Ｘ）＊ΔＶｐｇｍ／（１＋Ｘ）だけ異なる。
【０１０２】
当該技術の優位性は、プログラミングの第１の段階中にプログラミングパルスのステップサイズを縮小する必要がないことである。当該技術を実施しない場合と同じステップサイズを使用することが可能であり、それゆえ、第１の段階に対するプログラミングループの数が増加しない。
【０１０３】
いくつかの実施形態では、Ｖｖｓｔａｒｔは、第１の段階中にプログラムされる最低閾値電圧区分（例えば、区分Ａ）の検証レベルである。いくつかの実施形態では、Ｖｖｓｔａｒｔ−２は、Ｖｖｓｔａｒｔが最低閾値電圧区分の検証レベルよりも低い第１の段階中にプログラムされる最低閾値電圧区分（例えば、区分Ａ）の検証レベルである。他の実施形態では、ＶｖｓｔａｒｔおよびＶｖｓｔａｒｔ−２は、いずれも第１の区分の検証レベルよりも低くなりうる。いくつかの実施形態では、Ｖｖｓｔａｒｔは、第１の段階中にプログラムされる最低閾値電圧区分の粗／密プログラミングで使用される最低検証レベルであるが、Ｖｖｓｔａｒｔ−２は、第１の段階中にプログラムされる最低閾値電圧区分の検証レベルに等しくなりうる。初期プログラミングの大きさが以後のプログラミング段階に備えて検出された後、Ｖｖｓｔａｒｔ−２に等しいかそれよりも大きい区分をプログラムするために、同じステップサイズでプログラミングを続けることが可能である。場合によっては、より正確なプログラミングを可能にするために、初期プログラミングパルスの検出後にステップサイズを縮小することが望ましいかもしれない。本明細書に記載される当該技術は、米国特許第７，０９２，２９０号明細書の処理と組み合わされうる。
【０１０４】
分解能を高めるために、追加的／代替的検証レベルを用いる前述の当該技術は、図１６の処理とともに使用されうる。図３３は、図１６に加えられる処理を表すフローチャートである。図３３のフローチャートに示されるステップは、図１６のステップ６７８に置き換わる。例えば、Ｎ個以上のメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有していると、図１６のステップ６７０において判定された後、処理は、図３３のステップ９７０に進む。ステップ９７０では、システムは、Ｐ個以上のメモリセルがＶｖｓｔａｒｔ−２よりも大きい閾値電圧を有しているかどうかを判定する（ＰがＮと同じであるかＮとは異なる可能性がある場合）。Ｐ個以上のメモリセルがＶｖｓｔａｒｔ−２よりも大きい閾値電圧を有する場合、ステップ９７２において、次のＶｐｇｍ＿ｖｓｔａｒｔを決定するために使用される大きさは、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ）である。ステップ９７２は、ステップ６７８に関して前述したように、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ）を記憶することを含む。あるいは、ステップ９７２は、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ）＋（オフセット）を記憶することを含む。別の代替方法では、システムは、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ）の別の関数、印加された最後のパルスの識別情報とΔｖｅｒｉｆｙの関数、あるいはこれらのある組合せまたは一部を記憶することができる。Δｖｅｒｉｆｙ以外の値も使用されうる。ステップ９７２の後、処理は図１６のステップ６９２に進む。
【０１０５】
ステップ９７０において、Ｖｖｓｔａｒｔ−２よりも大きい閾値電圧を有するＰ個以外のメモリセルがあると判定されると、ステップ９７４において、次のＶｐｇｍ＿ｖｓｔａｒｔを決定するために使用される大きさは、印加された最後のパルスの大きさである。ステップ９７４は、ステップ６７８に関して前述したように、印加された最後のパルスの大きさを記憶することを含む。あるいは、ステップ９７２は、（印加された最後のパルスの大きさ）＋（オフセット）を記憶することを含む。別の代替方法では、システムは、印加された最後のパルスの大きさの別の関数、印加された最後のパルスの識別情報、印加された最後のパルスの識別情報の関数、あるいはこれらのある組合せまたは一部を記憶することができる。ステップ９７４の後、処理は図１６のステップ６９２に進む。
【０１０６】
同様に、図２９のステップ９２４は、図３３の処理で置き換えられうる。すなわち、Ｍ個のメモリセルが除外されると、処理はステップ９７０に進む。ステップ９７２または９７４の後、処理は図２９のステップ９２６に進む。
【０１０７】
図３４は、システムが２つの代替結果を試験するために、２つの追加の検証処理を実施するときに、図１６に加えられる処理を表すフローチャートである。なお、図３４の処理は、２つよりも多くの代替結果の試験に適合されうる。図３４のフローチャートに示されるステップは、図１６のステップ６７８に置き換わる。例えば、Ｎ個以上のメモリセルがＶｖｓｔａｒｔよりも大きい閾値電圧を有していると図１６のステップ６７０によって判定された後、処理は図３４のステップ９８０に進む。ステップ９８０では、Ｐ個以上のメモリセルがＶｖｓｔａｒｔ−２よりも大きい閾値電圧を有しているかどうかをシステムが判定する（ＰがＮと同じであるかＮとは異なる可能性がある場合）。Ｖｖｓｔａｒｔ−２よりも大きい閾値電圧を有するＰ個以外のメモリセルがあると判定されると、ステップ９８２において、次のＶｐｇｍ＿ｖｓｔａｒｔを決定するために使用されるパルスの大きさは、印加された最後のパルスの大きさである。ステップ９８２は、ステップ６７８に関して前述したように、印加された最後のパルスの大きさを記憶することを含む。あるいは、ステップ９８２は、（印加された最後のパルスの大きさ）＋（オフセット）を記憶することを含む。別の代替方法では、システムは、印加された最後のパルスの大きさの別の関数、最後のパルスの識別情報、または最後のパルスの識別情報の関数を記憶しうる。ステップ９８２の後、処理は図１６のステップ６９２に進む。
【０１０８】
Ｐ個以上のメモリセルが、Ｖｖｓｔａｒｔ−２よりも大きい閾値電圧を有する場合、ステップ９８４において、Ｔ個以上のメモリセルがＶｖｓｔａｒｔ−３よりも大きい閾値電圧を有しているかどうかが判定される。Ｔの値は、Ｎと同じであるかＮとは異なる可能性がある。Ｖｖｓｔａｒｔ−３よりも大きい閾値電圧を有するＴ個以外のメモリセルがあると判定されると、ステップ９８８において、次のＶｐｍｇ＿ｖｓｔａｒｔを決定するために使用される大きさは、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ１）である。ステップ９８６は、ステップ６７８に関して前述したように、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ１）を記憶することを含む。あるいは、ステップ９８８は、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ１）＋（オフセット）を記憶することを含む。別の代替方法では、システムは、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ１）の別の関数、最後のパルスの識別情報と（Δｖｅｒｉｆｙ１）との関数、あるいはこれらのある組合せまたは一部を記憶しうる。Δｖｅｒｉｆｙ１以外の値も使用されうる。ステップ９８８の後、処理は図１６のステップ６９２に進む。この実施形態では、Δｖｅｒｉｆｙ１は、ＶｖｓｔａｒｔとＶｖｓｔａｒｔ−２の差として定義される。
【０１０９】
Ｖｖｓｔａｒｔ−３よりも大きい閾値電圧を有するＴ個以上のメモリセルがあるものと判定されると、ステップ９８６において、次のＶｐｇｍ＿ｖｓｔａｒｔを決定するために使用される大きさは、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ２）である。ステップ９８６は、ステップ６７８に関して前述したように、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ２）を記憶することを含む。あるいは、ステップ９８６は、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ２）＋（オフセット）を記憶することを含む。別の代替方法では、システムは、（印加された最後のパルスの大きさ）−（Δｖｅｒｉｆｙ２）の別の関数、最後のパルスの識別情報と（Δｖｅｒｉｆｙ２）、最後のパルスの識別情報と（Δｖｅｒｉｆｙ２）との関数、あるいはこれらのある組合せまたは一部を記憶しうる。ステップ９８６の後、処理は図１６のステップ６９２に進む。この実施形態では、Δｖｅｒｉｆｙ２は、ＶｖｓｔａｒｔとＶｖｓｔａｒｔ−３の差として定義される。
【０１１０】
同様に、図２９のステップ９２４は、図３４の処理で置き換わりうる。すなわち、Ｍ個のメモリセルが除外されると、処理はステップ９８０に進む。ステップ９８２、９８６、または９８８の後、処理は図２９のステップ９２６に進む。
【０１１１】
図３３または図３４の処理は、前述のプログラミング方式のいずれかを実施するために、図２９または図１６の処理とともに使用されうる。図３３または図３４の処理が図２９の処理とともに使用されて、図８Ａ〜図８Ｃのプログラミング方式を使用しうる一例では、第１のプログラミング段階が閾値電圧Ｖｖｂ’にプログラムすることと、Ｖｐｇｍ＿ｖｓｔａｒｔの新たな値を決定することと、を含みうる。第２の段階では、第１の段階からのＶｐｇｍ＿ｖｓｔａｒｔ（オフセットを含む）を用いて、図８Ｃに示されるように、Ａ、Ｂ、およびＣ状態にプログラムするために図２９の処理が使用されうる。
【０１１２】
本発明に係わる前述の詳細な記述は、例証および説明を目的として提示されている。これは、本発明を網羅するものはなく開示された正確な形態に限定するものでもない。上記教示に照らして多くの修正形態および変更形態が考えられる。記述された実施形態は、本発明の原理とその実際的応用とを最も良く説明し、それによって他の当業者が本発明を様々な実施形態と検討される具体的な使用に適するような様々な修正形態とで最も良く利用しうるように選定された。本発明の範囲は、本明細書に添付される特許請求の範囲によって規定されるものである。
【図１】
0005460721.tif 000002
【図２】
0005460721.tif 000003
【図３】
0005460721.tif 000004
【図４】
0005460721.tif 000005
【図５】
0005460721.tif 000006
【図６】
0005460721.tif 000007
【図７】
0005460721.tif 000008
【図８Ａ】
0005460721.tif 000009
【図８Ｂ】
0005460721.tif 000010
【図８Ｃ】
0005460721.tif 000011
【図９Ａ】
0005460721.tif 000012
【図９Ｂ】
0005460721.tif 000013
【図９Ｃ】
0005460721.tif 000014
【図１０Ａ】
0005460721.tif 000015
【図１０Ｂ】
0005460721.tif 000016
【図１０Ｃ】
0005460721.tif 000017
【図１０Ｄ】
0005460721.tif 000018
【図１１Ａ−１１Ｂ】
0005460721.tif 000019
【図１２Ａ】
0005460721.tif 000020
【図１２Ｂ】
0005460721.tif 000021
【図１２Ｃ】
0005460721.tif 000022
【図１２Ｄ】
0005460721.tif 000023
【図１３Ａ−１３Ｄ】
0005460721.tif 000024
【図１４】
0005460721.tif 000025
【図１５】
0005460721.tif 000026
【図１６】
0005460721.tif 000027
【図１７】
0005460721.tif 000028
【図１８】
0005460721.tif 000029
【図１９】
0005460721.tif 000030
【図１９Ａ】
0005460721.tif 000031
【図２０】
0005460721.tif 000032
【図２１】
0005460721.tif 000033
【図２２】
0005460721.tif 000034
【図２３】
0005460721.tif 000035
【図２４】
0005460721.tif 000036
【図２５】
0005460721.tif 000037
【図２６】
0005460721.tif 000038
【図２７Ａ】
0005460721.tif 000039
【図２７Ｂ】
0005460721.tif 000040
【図２７Ｃ】
0005460721.tif 000041
【図２８Ａ】
0005460721.tif 000042
【図２８Ｂ】
0005460721.tif 000043
【図２８Ｃ】
0005460721.tif 000044
【図２９】
0005460721.tif 000045
【図３０】
0005460721.tif 000046
【図３１】
0005460721.tif 000047
【図３２】
0005460721.tif 000048
【図３３】
0005460721.tif 000049
【図３４】
0005460721.tif 000050