(57)【特許請求の範囲】
【請求項１】
ストレージエレメントからなる不揮発性のアレイにデータを格納する方法であって、前記ストレージエレメントのそれぞれは、１ビットを超えるデータを表す互いに分離された複数の所定のストレージレベル範囲に分割されたストレージウィンドウを有しており、前記方法は、
第１の複数のストレージエレメントにデータをプログラミングする動作と、
次いで、第２の複数のストレージエレメントにデータをプログラミングする動作と、
次いで、前記第１の複数のストレージエレメントにプログラムされたデータを読み出す動作と、
次いで、前記読み出されたデータを使用して前記第１の複数のストレージエレメントを再プログラミングすることによって、前記第１の複数のストレージエレメントに初めにプログラムされた前記データのコピーを保持する必要なしに前記再プログラミングを達成する動作と
を備える方法。
【請求項２】
ストレージエレメントからなる不揮発性のアレイにデータを格納する方法であって、前記ストレージエレメントのそれぞれは、１ビットを超えるデータを表す互いに分離された複数の所定のストレージレベル範囲に分割されたストレージウィンドウを有しており、前記方法は、
第１の複数のストレージエレメントを、第１組のデータに対応するストレージレベル範囲内のストレージレベルにプログラミングする動作と、
次いで、第２の複数のストレージエレメントを、第２組のデータに対応するストレージレベル範囲内のストレージレベルにプログラミングする動作と、
次いで、前記第１の複数のストレージエレメントにプログラムされた前記第１組のデータを読み出す動作と、
次いで、前記読み出された第１組のデータに対応するストレージレベル範囲内のストレージレベルを使用して前記第１の複数のストレージエレメントを再プログラミングすることによって、前記第１の複数のストレージエレメントに初めにプログラムされた前記第１組のデータのコピーを保持する必要なしに前記再プログラミングを達成する動作と
を備える方法。
【請求項３】
請求項２記載の方法であって、
前記第２の複数のストレージエレメントにプログラムされた前記第２組のデータの少なくともいくつかのストレージレベルは、前記第１と第２のストレージエレメント間の少なくとも電界結合が原因で、前記第１の複数のストレージエレメントの少なくともいくつかから読み出されるデータに影響し、
前記第１の複数のストレージエレメントを再プログラミングする動作は、前記第１と第２の複数のストレージエレメント間の少なくとも電界結合が原因で前記第２の複数のストレージエレメントのストレージレベルが前記第１の複数のストレージエレメントから読み出されるデータに及ぼす影響を緩和して前記第１組のデータをより正確に前記第１の複数のストレージエレメントから読み出せるように、前記第１の複数のストレージエレメントのストレージレベルを変更する動作を含む、方法。
【請求項４】
請求項２記載の方法であって、
前記第１組のデータの正確な読み出しは、前記第２の複数のストレージエレメントの再プログラミング無しに行われる、方法。
【請求項５】
請求項２記載の方法であって、
前記第１の複数のストレージエレメントをプログラミングする動作は、個々のストレージエレメントのストレージレベルを、当該ストレージエレメントにプログラミングされるデータに対応する複数のストレージレベル範囲の１つに到達するまで漸増するように変化させる動作を含み、
前記第１の複数のストレージエレメントを再プログラミングする動作は、個々のストレージエレメントのストレージレベルを、当該ストレージエレメントに再プログラミングされるデータに対応する複数のストレージレベル範囲のうちの１つに到達するまで漸増するように変化させる動作を含み、
前記第１の複数のストレージエレメントの前記プログラミング中の変化増分は、前記第１の複数のストレージエレメントの前記再プログラミング中の変化増分よりも大きい、方法。
【請求項６】
請求項２に記載の方法であって、
前記第１の複数のストレージエレメント内のストレージレベルが前記第１の複数のストレージエレメントから読み出されるデータに与える影響は、前記第１組のデータに対応するストレージレベルの見かけ上の分布の幅を広げることを含み、
前記第１の複数のストレージエレメントを再プログラミングする動作は、前記第１組のデータに対応するストレージレベルの前記分布を縮小することを含む、方法。
【請求項７】
請求項２ないし６のいずれかに記載の方法であって、
前記方法が実施される前記ストレージエレメントは、導電性のフローティングゲートであり、前記ストレージレベル範囲は、前記フローティングゲートに格納されたチャージレベルに相当し、前記フローティングゲートを一部として含むメモリセルトランジスタを通じた導電に作用するものである、方法。
【請求項８】
請求項２ないし６のいずれかに記載の方法であって、
前記方法が実施されるストレージエレメントの不揮発性のアレイは、フラッシュ電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）セルからなるアレイを含み、セルごとに少なくとも１つのフローティングゲートが設けられた形のストレージエレメントを有する、方法。
【請求項９】
請求項２ないし６のいずれかに記載の方法であって、
前記方法が実施されるストレージエレメントの不揮発性のアレイは、ストレージエレメントを有しＮＡＮＤ構成に接続されたメモリセルを含む、方法。
【請求項１０】
ストレージエレメントからなる不揮発性のアレイにデータを格納する方法であって、前記ストレージエレメントのそれぞれは、１ビットを超えるデータを表す互いに分離された複数の所定のストレージレベル範囲に分割されたストレージウィンドウを有しており、個々のストレージエレメントのプログラミングは、前記ストレージレベル範囲の１つが前記格納されるデータに対応するレベル範囲に到達するまで、前記ストレージレベルを漸増するように変化させることによって行われ、前記方法は、
第１の複数のストレージエレメントにデータをプログラミングする動作であって、個々のストレージエレメントの前記ストレージレベルを、格納されるデータに対応する第１組の基準ストレージレベルの１つに到達するまたはそれを超えるまで漸増するように変化させ、前記ストレージレベルを漸増するように変化させた結果として得られる幅を有する前記所定の範囲内において、分布されたストレージレベルでもって前記複数のストレージエレメントに前記データを格納する動作と、
次いで、第２の複数のストレージエレメントにデータをプログラミングする動作と、
次いで、前記第１の複数のストレージエレメントにプログラムされたデータを読み出す動作と、
次いで、前記個々の分布の一部にストレージレベルが含まれている前記第１の複数ストレージエレメントを、前記読み出されたデータを使用して再プログラミングする動作であって、前記再プログラミングは、これらの個々のストレージエレメントの前記ストレージレベルを、対応する分布に含まれる重複しない別の部分に入るようにプログラムされるまで漸増するように変化させることによって行われ、これによって、前記再プログラミングは、前記第１の複数のストレージエレメントに初めにプログラムされた前記データのコピーを保持する必要なしに達成される、動作と、
を備える方法。
【請求項１１】
集積回路チップ上の再プログラミング可能な不揮発性のメモリシステムであって、
電荷ストレージエレメントを有するメモリセルアレイと、
１ビットを超えるデータを表す互いに分離された複数の所定のストレージレベル範囲に分割されたストレージウィンドウ内の電荷レベルとして、個々の電荷ストレージエレメントにデータをプログラミングする前記集積回路チップ上の制御回路と、
を備え、
いくつかのストレージエレメントに格納された電荷は、ストレージエレメント間の少なくとも電界結合が原因で、他のストレージエレメントから読み出されるデータに影響し、
前記制御回路は、
第１の複数のストレージエレメントを、第１組のデータに対応するストレージレベル範囲内のストレージレベルにプログラミングし、
次いで、第２の複数のストレージエレメントを、第２組のデータに対応するストレージレベル範囲内のストレージレベルにプログラミングし、
次いで、前記第１の複数のストレージエレメントにプログラムされた前記第１組のデータを読み出し、
次いで、前記読み出された第１組のデータに対応するストレージレベル範囲内のストレージレベルを使用して前記第１の複数のストレージエレメントを再プログラミングすることによって、前記第１の複数のストレージエレメントに初めにプログラムされた前記第１組のデータのコピーを保持する必要なしに前記再プログラミングを達成する、
メモリシステム。
【請求項１２】
請求項１１記載のメモリシステムであって、
前記制御回路は、
前記第１の複数のストレージエレメントを再プログラミングする動作において、前記第１と第２の複数のストレージエレメント間の少なくとも電界結合が原因で前記第２の複数のストレージエレメントのストレージレベルが前記第１の複数のストレージエレメントから読み出されるデータに及ぼす影響を緩和して前記第１組のデータをより正確に前記第１の複数のストレージエレメントから読み出せるように、前記第１の複数のストレージエレメントのストレージレベルを変更する、メモリシステム。
【請求項１３】
請求項１１記載のメモリシステムであって、
前記制御回路は、
前記第１組のデータの正確な読み出しを、前記第２の複数のストレージエレメントの再プログラミング無しに行う、メモリシステム。
【請求項１４】
請求項１１記載のメモリシステムであって、
前記制御回路は、
前記第１の複数のストレージエレメントをプログラミングする動作において、個々のストレージエレメントのストレージレベルを、当該ストレージエレメントにプログラミングされるデータに対応する複数のストレージレベル範囲の１つに到達するまで漸増するように変化させ、
前記第１の複数のストレージエレメントを再プログラミングする動作において、個々のストレージエレメントのストレージレベルを、当該ストレージエレメントに再プログラミングされるデータに対応する複数のストレージレベル範囲のうちの１つに到達するまで漸増するように変化させ、
前記第１の複数のストレージエレメントの前記プログラミング中の変化増分は、前記第１の複数のストレージエレメントの前記再プログラミング中の変化増分よりも大きい、メモリシステム。
【請求項１５】
請求項１１に記載のメモリシステムであって、
前記第１の複数のストレージエレメント内のストレージレベルが前記第１の複数のストレージエレメントから読み出されるデータに与える影響は、前記第１組のデータに対応するストレージレベルの見かけ上の分布の幅を広げることを含み、
前記制御回路は、
前記第１の複数のストレージエレメントを再プログラミングする動作において、前記第１組のデータに対応するストレージレベルの前記分布を縮小する、メモリシステム。
【請求項１６】
請求項１１ないし１５のいずれかに記載のメモリシステムであって、
前記ストレージエレメントは、導電性のフローティングゲートであり、前記ストレージレベル範囲は、前記フローティングゲートに格納されたチャージレベルに相当し、前記フローティングゲートを一部として含むメモリセルトランジスタを通じた導電に作用するものである、メモリシステム。
【請求項１７】
請求項１１ないし１５のいずれかに記載のメモリシステムであって、
ストレージエレメントの不揮発性のアレイは、フラッシュ電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）セルからなるアレイを含み、セルごとに少なくとも１つのフローティングゲートが設けられた形のストレージエレメントを有する、メモリシステム。
【請求項１８】
請求項１１ないし１５のいずれかに記載のメモリシステムであって、
ストレージエレメントの不揮発性のアレイは、ストレージエレメントを有しＮＡＮＤ構成に接続されたメモリセルを含む、メモリシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に、不揮発性メモリおよびその動作に関し、特に、あるメモリストレージエレメントに格納されたデータが、他のストレージエレメントからデータが読み出される際に受ける作用を低減するための技術に関する。
【０００２】
【従来の技術】
本発明の原理は、既存のもの、および、開発中の新技術を使用すると考えられるものを含む様々なタイプの不揮発性メモリに適用される。しかしながら、以下では、ストレージエレメントがフローティングゲートであるフラッシュ電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）に関連して、本発明の実施形態の説明を行う。
【０００３】
Jian ChenおよびYupin Fongによる米国特許第5,867,429号は、隣接するフローティングゲート間の電界結合（field effect coupling）に関して記載しており、この文献全体を、引用によって本明細書中に組み込むものとする。この結合の度合いは、集積回路の製造技術の進歩にともなってメモリセルアレイが小型化するにつれ、必然的に強まる。この問題は、異なる時点でプログラムされる２組の隣接したセル同士の間で最も顕著に現れる。先ず、第１組のセルが、第１組のデータに対応するフローティングゲートに一定のチャージレベルを加えるようにプログラムされる。第２組のデータを使用した第２組のセルのプログラム後に第１組のセルのフローティングゲートから読み出されるチャージレベルは、プログラムされた時点のそれとは異なる場合が多い。これは、第１組のフローティングゲートが、それに結合された第２組のフローティングゲート上の電荷による作用を受けるためである。これは、Ｙｕｐｉｎ作用として知られている。前掲の特許第5,867,429号は、２組のフローティングゲートを物理的に分離するか、あるいは、第１組のフローティングゲートからの読み出し時に第２組のフローティングゲート上の電荷による作用を考慮するか、のいずれかの対策を講じることを提案している。
【０００４】
このような作用は、様々なタイプのフラッシュＥＥＰＲＯＭセルアレイにおいて見られる。ＮＯＲアレイの設計の１つでは、隣接するビット（カラム）線間にメモリセルを接続し、ワード（ロウ）線に制御ゲートを接続している。個々のセルは、１つのフローティングゲートトランジスタおよびそれに直列に形成された１つのセレクトトランジスタを含むか、あるいは、１つのセレクトトランジスタによって分離された２つのフローティングゲートトランジスタを含む。このようなアレイおよびストレージシステムにおけるこれらの使用に関する例が、SanDisk Corporationによる以下の米国特許：第5,095,344号、第5,172,338号、第5,602,987号、第5,663,901号、第5,430,859号、第5,657,332号、第5,712,180号、第5,890,192号、第6,151,248号および係属中の米国出願：２０００年２月１７日付けの特許出願第09/505,555号、２０００年９月２２日付けの特許出願第09/667,344号に記載されており、これらの文献全体を、引用によって本明細書中に組み込むものとする。
【０００５】
ＮＡＮＤアレイの設計の１つは、ビット線と基準電位とのあいだに両端のセレクトトランジスタを介して直列に接続された、８個、１６個、あるいは３２個など一定数のメモリセルを有する。ワード線は、別の列を構成する形でセルの制御ゲートに接続されている。このようなアレイおよびこれらの動作に関連した例が、東芝による以下の米国特許：第5,570,315号、第5,774,397号、第6,046,935号および係属出願：特許出願第09/667,610号に記載されており、これらの文献全体を、引用によって本明細書中に組み込むものとする。
【０００６】
現在市販されている製品のフローティングゲートは、バイナリモードで作動して１ビットのデータを格納するものが最も一般的である。バイナリモードでは、フローティングゲートトランジスタの２つのしきい値範囲のみがストレージレベルとして規定される。フローティングゲートトランジスタのしきい値は、そのフローティングゲートに格納されたチャージレベルの範囲に対応する。現在では、メモリアレイのサイズを小型化するだけでなく、各フローティングゲートトランジスタに１ビットを超えるデータを格納することによって、このようなメモリアレイのデータストレージ密度をさらに高めようとする趨勢にある。これは、各フローティングゲートトランジスタのストレージ状態として、２つを超えるしきい値を規定することによって達成される。現在市販されている製品には、４つの状態（各フローティングゲートに２ビットのデータ）が含まれている。ストレージエレメントごとに１６の状態を含ませるなど、より多数のストレージ状態を含ませることも考えられている。各フローティングゲートトランジスタは、自身が実際に作動されるしきい値電圧の全範囲（ウィンドウ）を有し、この範囲は、各範囲に対して規定された数の状態と、状態どうしを互いに明確に区別するための各状態間の境界と、に分割される。
【０００７】
このタイプの不揮発性メモリの通常の動作では、メモリセルからなるブロックを、それらの再プログラミングに先立って消去する。次いで、消去された状態から脱し、格納される着信データによって表される状態に移るように、ブロック内のセルを個々にプログラムする。プログラミングは、一般に、電圧パルスのプログラミングと、個々のセルが意図されたレベルに到達したか否かを決定するために個々の状態を読み出す動作と、を多数のメモリセルに対して交互に並行して行う。プログラミングは、意図するしきい値に到達したことが検証されたセルに対しては停止するが、一方で、他のセルに対してはプログラミングが完了するまで続行される。ストレージエレメントごとに含まれるストレージ状態の数が増えると、個々の状態に対応する電圧の範囲が狭くなるので、プログラミングの精度を高める必要が生じ、一般にプログラミングの実施時間も長くなる。これは、メモリシステムの性能に大きな悪影響を及ぼす。
【０００８】
マルチ状態動作の結果として得られるフローティングゲートのストレージレベル範囲が狭いと、後にプログラムされる隣接する第２群のストレージエレメントに格納される電荷の量に対する、第１群のストレージエレメントの感度が高まる。すると、例えば第１群を読み出す際に、第２群に格納された電荷が原因で、第１群の状態の読み出しに誤りを生じる可能性がある。隣接するメモリエレメントに結合されている場（フィールド）は、読み出される見かけの状態をかなりの量だけシフトさせるので、格納されている一群のデータの少なくとも数ビットに関し、読み出しの誤差を生じる可能性がある。誤差を生じたビットの数が誤り訂正コード（ＥＣＣ）機能の範囲内に抑えられている場合は、誤差は訂正されるが、誤差を生じたビットの数がこれよりも大きい場合は、他の何らかの構造技術および／または動作技術を利用する必要がある。前掲の米国特許第5,867,429号は、多くのアレイに対して適しているが、隣接するフローティングゲート間で生じる動作上の電界結合を補正する技術を、さらに提供することが望まれる。
【０００９】
【発明の概要】
したがって、本発明による主要な１態様では、第１群のメモリストレージエレメントを、隣接する第２群のストレージエレメントがプログラムされた後に再プログラムし、所望の状態に到達させる。セルの状態の周期的な読み出しは、いつプログラミングを停止するかを知るための動作であり、プログラミングの一環を占めているので、再プログラミングの際は、のちにプログラムされる隣接するストレージエレメントとの間に生じる電界結合の補正に必要な任意の電荷を、第１群のストレージエレメントに配分する。代表的なプログラミング動作の交互のパルスおよび読み出しシーケンスは、隣接してプログラムされる第２群のストレージエレメントによる作用のもとで、第１群のストレージエレメントを再プログラムするために使用して良い。再プログラミングの結果、隣接するセル上の電荷による作用が考慮に入れられるので、のちに第１群のセルを読み出す際は、隣接するセル上の電荷によって依然として作用されるものの、その読み出しの精度は向上される。十分な大きさのデータバッファを維持し、第１のパスにおいてプログラムされたデータを、第２のプログラミングパスにおいて後に使用できるように保持する必要をなくすためには、第１のパスによって格納されたデータを、調整された読み出しマージンでメモリから読み出し、そのデータを、第２のパスにおいて再プログラムして良い。
【００１０】
本発明による別の主要な１態様では、同じ状態にプログラムされたストレージエレメントのうち、分布の一方の側に属するストレージエレメントのいくつかを、分布の反対の側に属するように再プログラミングすることによって、プログラミングレベルの分布を圧縮する。すなわち、所定の状態にある全てのストレージエレメントを読み出し、その分布のうち、規定のしきい値を下回るプログラムレベルを有したものに対して追加のプログラミングを実施し、それらを規定のしきい値を上回るレベルまで引き上げる。これは、メモリの状態ごとに必要とされるプログラミングウィンドウを減らす効果を有するので、状態と状態とのあいだに追加の状態を設けたり追加のスペースを提供したりすることが可能になる。このような圧縮は、前段に記載された態様とは別に独立して実施することができるが、再プログラミングの動作の一環として有利に含ませても良い。実際、第２のプログラミングパスを、同群のセルに対する第１のプログラミングの直後に生じさせることによって、隣接するセルのプログラミングの後に生じるこれらの分布の見かけ上の拡散を考慮に入れた程度まで、プログラミングレベルの分布を狭めて良い。プログラミングパルス電圧レベルの段階的な増加は、第１のプログラミングパスでは、１群のセルを初期の幅広い分布レベルに到達させるように素早くプログラミングするため、通常よりも大幅に増加させ、第２のパスでは、これらの分布の広がりを圧縮するため、通常どおり小幅に増加させる。これらの技術は、プログラムされたメモリセルの電圧しきい値の分布を素早く狭めることによって、性能の向上を図るものである。
【００１１】
本発明による別の主要な態様では、隣接するセルを既存のマルチ状態プログラミング技術にしたがってプログラムする順序は、このような隣接するセル間のクロスカップリングによるＹｕｐｉｎ作用を最低限に抑えるように決定される。既存のプログラミング技術では、先ず、第１のプログラミング動作において、一列または一行に配列された第１群の隣接する交互セルを、第１のデータビットレベルになるように部分的にプログラムし、次いで、残りの第２群の交互セルを、第１のデータビットレベルになるように同様に部分的にプログラミングし、さらに、第１群のセルのプログラミングを、各セルの第２のデータビットを使用して完了し、最後に、第２群のプログラミングを、その第２のビットを使用して完了する。しかしながら、このようなセルのストレージエレメント間に生じるＹｕｐｉｎ作用を最低限に抑えるために、本発明による第３の主要な態様では、第１および第２のビットを使用した第１群のセルのプログラミングをそれぞれ別々の動作で実施し、次いで、これらのデータビットを使用した第２群のセルのプログラミングをそれぞれ別々の動作で実施する。この技術は、ＮＡＮＤメモリのプログラミングの最中に使用することが特に適しているが、このような使用に限定されることはない。この技術は、隣接するストレージエレメント間で生じる結合によるＹｕｐｉｎ作用を様々なレベルで阻止するために、単独で使用しても良いし、上述した本発明による第１および／または第２の主要な態様による技術とともに使用しても良い。
【００１２】
添付の図面と関連して代表的な実施形態を取り上げた以下の説明から、本発明による別の態様、特徴、および利点がさらに明らかになる。
【００１３】
【発明の実施の形態】
不揮発性メモリシステムの例
図１〜７を参照しながら、本発明による様々な態様を実現した具体的な不揮発性メモリシステムに関して説明し、具体的な例を提供する。図１は、フラッシュメモリシステムのブロック図である。マトリックス状に配列された複数のメモリセルＭを含んだメモリセルアレイ１は、コラム制御回路２と、ロウ制御回路３と、ｃソース制御回路４と、ｃ−ｐウェル制御回路５とを備える。コラム制御回路２は、メモリセル（Ｍ）に格納されたデータを読み出すため、プログラム動作の最中にメモリセル（Ｍ）の状態を決定するため、そしてビット線（ＢＬ）の電位のレベルを制御してプログラミングを促進または阻止するために、メモリセルアレイ１のビット線（ＢＬ）に接続されている。ロウ制御回路３は、ワード線（ＷＬ）の１つを選択するため、読み出し電圧を印加するため、コラム制御回路２によって制御されるビット線の電位レベルに結合されたプログラム電圧を印加するため、そして上にメモリセル（Ｍ）を形成されたｐ型領域（図３では「ｃ−ｐウェル」１１として表示されている）の電圧に結合された消去電圧を印加するために、ワード線（ＷＬ）に接続されている。ｃソース制御回路４は、メモリセル（Ｍ）に接続されたコモンソース線（図２では「ｃソース」として表示されている）を制御する。ｃ−ｐウェル制御回路５は、ｃ−ｐウェル電圧を制御する。
【００１４】
メモリセル（Ｍ）に格納されたデータは、コラム制御回路２によって読み出され、入出力回線およびデータ入出力バッファ６を通して外部の入出力回線に出力される。メモリセルに格納されるプログラムデータは、外部の入出力回線を通してデータ入出力バッファ６に入力され、コラム制御回路２に転送される。外部の入出力線は、コントローラ２０に接続されている。
【００１５】
フラッシュメモリデバイスを制御するためのコマンドデータが、コントローラ２０に接続された外部の制御線に接続されたコマンドインターフェースに入力される。コマンドデータは、どの動作が要求されたかをフラッシュメモリに通知する。入力コマンドは、コラム制御回路２と、ロウ制御回路３と、ｃソース制御回路４と、ｃ−ｐウェル制御回路５と、データ入出力バッファ６とを制御する状態マシン８に転送される。状態マシン８は、ＲＥＡＤＹ／ＢＵＳＹまたはＰＡＳＳ／ＦＡＩＬなどの、フラッシュメモリの状況データを出力することができる。
【００１６】
コントローラ２０は、パーソナルコンピュータ、デジタルカメラ、携帯情報端末などのホストシステムに接続されるまたは接続可能である。このホストシステムは、メモリアレイ１にデータを格納するまたはメモリアレイ１からデータを読み出すなどのコマンドを開始し、このようなデータを供給するまたは受信するホストである。コントローラは、このようなコマンドを、コマンド回路７によって解釈され実行されることができるコマンド信号に変換する。コントローラは、また、メモリアレイに書き込まれるまたはメモリアレイから読み出されるユーザデータ用のバッファメモリを含むのが通常である。代表的なメモリシステムは、コントローラ２０を含んだ集積回路チップ２１を１つと、メモリアレイおよび関連の制御と入出力および状態マシン回路とをそれぞれ含んだ集積回路チップ２２を１つまたはそれ以上と備える。時代の趨勢は、もちろん、システムのメモリアレイとコントローラ回路とを１つまたはそれ以上の集積回路チップ上に集積させることにある。メモリシステムは、ホストシステムの一部として組み込んでも良いし、あるいは、ホストシステムの組み合わせソケットに着脱可能に挿入されるメモリカードに組み込んでも良い。このようなカードは、メモリシステム全体を含んでも良いし、あるいは、コントローラおよびメモリアレイを、関連の周辺回路とともに個々のカード上に設けても良い。
【００１７】
図２を参照にしながら、メモリセルアレイ１の構造に関して説明する。例として、ＮＡＮＤ型のフラッシュＥＥＰＲＯＭを取り上げる。具体例として、メモリセル（Ｍ）を１，０２４個のブロックに分割する。各ブロックに格納されるデータは、同時的に消去される。このため、ブロックは、同時的に消去可能な数のセルからなる最小の単位である。この例では、各ブロックに、偶数番のコラムと奇数番のコラムとに分割された８，５１２個のコラムが含まれる。また、ビット線も、偶数番のビット線（ＢＬｅ）と奇数番のビット線（ＢＬｏ）とに分割されている。各ゲート電極においてワード線（ＷＬ０〜ＷＬ３）に接続された４つのメモリセルは、直列に接続され、ＮＡＮＤセルユニットを形成している。ＮＡＮＤセルユニットの端子の１つは、ゲート電極を第１のセレクトゲート線（ＳＧＤ）に結合された第１のセレクトトランジスタ（Ｓ）を通して、対応するビット線（ＢＬ）に接続され、もう１つの端子は、ゲート電極を第２のセレクトゲート線（ＳＧＳ）に結合された第２のセレクトトランジスタ（Ｓ）を通して、ｃソースに接続される。簡単のため、図中では４つのフローティングゲートトランジスタを各セルユニットに設けているが、８個、１６個、あるいは３２個など、より多数のトランジスタを使用しても良い。
【００１８】
この例では、ユーザデータの読み出しおよびプログラミング動作の最中に、４，２５６個のセル（Ｍ）が同時に選択される。選択されたセル（Ｍ）は、例えばＷＬ２などの同一のワード線（ＷＬ）と、例えば偶数番のビット線ＢＬｅ０〜ＢＬｅ４２５５などの同じ種類のビット線（ＢＬ）とを有する。したがって、５３２バイトのデータを同時に読み出したりプログラムしたりすることができる。この５３２バイトのデータは、同時に読み出されるまたはプログラムされ、「ページ」を論理的に形成する。したがって、ブロックごとに少なくとも８ページを格納することができる。各メモリセル（Ｍ）が２ビットのデータを格納するすなわちマルチレベルのセルであって、セルごとに２ビットずつ格納される場合は、ブロックごとに１６ページずつ格納される。この実施形態において、各メモリセルのストレージエレメントすなわちこの場合でいう各メモリセルのフローティングゲートは、２ビットのユーザデータを格納する。
【００１９】
図３は、図２に図示したタイプのＮＡＮＤセルユニットを、ビット線（ＢＬ）の方向に切断した断面図である。ｐ型半導体基板９の表面には、ｐ型領域であるｃ−ｐウェル１１が形成され、ｃ−ｐウェルは、ｎ型領域１０によって取り囲まれ、ｐ型基板から電気的に遮蔽される。ｎ型領域１０は、第１の金属Ｍ０から形成されたｃ−ｐウェル線に、第１のコンタクトホール（ＣＢ）およびｎ型拡散層１２を通して接続される。また、ｐ型領域のｃ−ｐウェル１１は、第１のコンタクトホール（ＣＢ）およびｐ型拡散層１３を通してｃ−ｐウェル線に接続される。ｃ−ｐウェル線は、ｃ−ｐウェル制御回路５（図１）に接続される。
【００２０】
各メモリセルは、セルに格納されているデータに相当する量の電荷を格納するフローティングゲート（ＦＧ）と、ゲート電極を形成しているワード線（ＷＬ）と、ｐ型拡散層１２から形成されたドレイン電極およびソース電極とを有する。フローティングゲート（ＦＧ）は、トンネル状の酸化膜（１４）を通してｃ−ｐウェルの表面上に形成される。ワード線（ＷＬ）は、絶縁膜（１５）を通してフローティングゲート（ＦＧ）上に積層される。ソース電極は、第１の金属（Ｍ０）から形成されたコモンソース線（ｃソース）に、第２のセレクトトランジスタ（Ｓ）および第１のコンタクトホール（ＣＢ）を通して接続される。コモンソース線は、ｃソース制御回路（４）に接続される。ドレイン電極は、第１のセレクトトランジスタ（Ｓ）と、第１のコンタクトホール（ＣＢ）と、第１の金属（Ｍ０）からなる中間配線と、第２のコンタクトホール（Ｖ１）とを通して、第２の金属（Ｍ１）から形成されたビット線（ＢＬ）に接続される。ビット線は、コラム制御回路（２）に接続される。
【００２１】
図４および図５は、メモリセル（図３の断面４−４）およびセレクトトランジスタ（図３の断面５−５）をそれぞれワード線（ＷＬ２）の方向に切断した断面図である。各コラムは、基板の中に形成された溝によって、隣接するコラムから分離され、ＳＴＩ（shallow trench isolation）として知られる分離材料を埋め込まれる。フローティングゲート（ＦＧ）は、ＳＩＴと、絶縁膜１５と、ワード線（ＷＬ）とによって互いに分離される。最近では、フローティングゲート（ＦＧ）間の間隔が０．１μｍ未満に狭められ、フローティングゲート同士の容量結合が増す傾向にある。セレクトトランジスタ（Ｓ）のゲート電極（ＳＧ）は、フローティングゲート（ＦＧ）およびワード線（ＷＬ）と同様の形成工程において形成されるので、積層されたゲート構造を呈する。これら２つのセレクトゲート線（ＳＧ）は、線の端において分流される。
【００２２】
図６の表Ｉは、メモリセルアレイ１を作動するために印加される電圧をまとめた表であり、１具体例では、各メモリセルのフローティングゲートは２ビットを格納し、「１１」、「１０」、「０１」、「００」のうちの１つの状態を有する。この表は、読み出しおよびプログラミングのためにワード線「ＷＬ２」およびビット線「ＢＬｅ」が選択される場合を示している。選択されたブロックのデータは、ｃ−ｐウェルを２０Ｖの消去電圧まで高め、選択されたブロックのワード線（ＷＬ）を接地することによって消去される。選択されていないブロックのワード線（ＷＬ）、ビット線（ＢＬ）、セレクト線（ＳＧ）、およびｃソースは、全てフローティング状態にあるので、ｃ−ｐウェルとの容量結合によって、やはりほぼ２０Ｖまで高められる。したがって、強い電界は、選択されたメモリセル（Ｍ）のトンネル酸化膜１４（図４および図５）に対してのみ加えられ、選択されたメモリセルのデータは、トンネル電流がトンネル酸化膜１４を流れるのにともなって消去される。この例では、消去されたセルは、プログラム後にとることが可能な４つの状態の１つすなわち「１１」の状態にある。
【００２３】
プログラム動作の最中に、フローティングゲート（ＦＧ）に電子を格納するためには、選択されたＷＬ２をプログラムパルスＶｐｇｍに接続し、選択されたビット線ＢＬｅを接地する。一方では、プログラミングを行わないメモリセル（Ｍ）上で、プログラムが行われるのを阻止するため、対応するビット線ＢＬｅを、選択されなかったビット線ＢＬｏとともに、例えば３Ｖの電源であるＶｄｄに接続する。選択されなかったワード線ＷＬ０，ＷＬ１，ＷＬ３は１０Ｖに接続し、第１のセレクトゲート（ＳＧＤ）はＶｄｄに接続し、第２のセレクトゲート（ＳＧＳ）は接地する。結果として、プログラムが行われるメモリセル（Ｍ）のチャネル電位が、０Ｖに設定される。プログラムを阻止する際のチャネル電位は、ワード線（ＷＬ）との容量結合によって引き上げられ、結果として６Ｖ程度まで高められる。上述したように、プログラミングの最中には、トンネル酸化膜１４に対してのみ強い電界が加えられ、消去の場合とは逆の方向にトンネル電流がトンネル酸化膜１４を流れ、論理状態が「１１」から他の状態「１０」、「０１」、「００」のうちの１つに変化する。
【００２４】
読み出しおよび検証の動作では、セレクトゲート（ＳＧＤ，ＳＧＳ）および選択されなかったワード線（ＷＬ０，ＷＬ１，ＷＬ３）を、４．５Ｖである読み出しパス電圧まで引き上げ、これらをパスゲートにする。選択されたワード線（ＷＬ２）は、読み出しおよび検証の各動作に関して指定された電圧に接続し、問題のメモリセルのしきい値電圧がこのレベルに達したか否かを決定する。例えば１０の読み出し動作では、選択されたワード線ＷＬ２を接地するので、しきい値電圧が０Ｖを上回るか否かが検出される。この読み出しの場合は、読み出しレベルは０Ｖであると言える。０１の検証動作では、選択されたワード線ＷＬ２を２．４Ｖに接続するので、しきい値電圧が２．４Ｖに達したか否かが検証される。この検証の場合は、検証レベルは２．４Ｖであると言える。
【００２５】
選択されたビットライン（ＢＬｅ）は、例えば０．７Ｖなどの高いレベルにプリチャージされる。しきい値電圧が読み出しレベルまたは検証レベルを上回るとき、メモリセル（Ｍ）は非導電性であるので、問題のビット線（ＢＬｅ）の電位は高いレベルに維持される。一方で、しきい値電圧が読み出しレベルまたは検証レベルを下回るときは、メモリセル（Ｍ）は導電性であるため、問題のビット線（ＢＬｅ）の電位は例えば０．５Ｖ未満などの低いレベルまで減少する。以下では、読み出し動作および検証動作に関してさらに詳述する。
【００２６】
図７は、図１のコラム制御回路２の一部を示した図である。ビット線（ＢＬｅおよびＢＬｏ）の各対は、２つのデータストレージ（ＤＳ１およびＤＳ２）レジスタを含んだデータストレージ部１６に結合され、データストレージレジスタは、それぞれ１ビットのデータを格納することができる。データストレージ部１６は、読み出し動作または検証動作の最中に、選択されたビット線（ＢＬ）の電位レベルを検知して、そのデータを２進法で格納し、そしてそのビット線の電圧を、プログラム動作の際に制御する。データストレージ部１６は、「ＥＶＥＮＢＬ」および「ＯＤＤＢＬ」のいずれか一方の信号を選択することによって、選択されたビット線（ＢＬ）に選択的に接続される。また、データストレージ部１６は、読み出しデータを出力するため、そしてプログラムデータを格納するため、入出力線にも結合される。図１に関して上述したように、入出力線は、データ入出力バッファ６に接続される。
【００２７】
メモリシステムの一般動作
図８は、各フローティングゲートストレージエレメントが、各メモリセル（Ｍ）に２ビットのデータすなわち４つのデータ状態を格納する場合の、メモリセルアレイ１のしきい値電圧の分布を示した図である。曲線２５は、アレイ１のうち消去状態（データ状態「１１」）にあるセルに関するしきい値ＶＴの分布を示したものであり、このしきい値ＶＴは負のしきい値電圧である。「１０」および「００」のユーザデータを格納しているメモリセルのしきい値電圧の分布２６および２７は、それぞれ０Ｖから１Ｖの間および１Ｖから２Ｖの間に示されている。曲線２８は、データ状態「０１」になるようにプログラムされたセルの分布を示しており、２Ｖより大きく、読み出しパス電圧である４．５Ｖより小さい範囲に設定された、最も高いレベルのしきい値電圧である。
【００２８】
この例において、各メモリセル（Ｍ）に格納された２つのビットは、それぞれ異なる論理ページから得られたものである。つまり、各メモリセルに格納された２つのビットは、それぞれ互いに異なる論理ページアドレスを有している。図８に示した右側のビットは、下位ページアドレス（＝０，２，４，…，１６，３８２）が入力された際にアクセスされる。左側のビットは、上位ページアドレス（＝１，３，５，…，１６，３８３）が入力された際にアクセスされる。
【００２９】
分布が狭いと読み出しマージン（分布間の距離）が広がるので、信頼度を高めるためには、分布の幅を狭めると良い。本発明にしたがうと、プログラミング速度を大きく低下させることなしに、分布の幅を狭めることができる。
【００３０】
引用によって本明細書に組み込まれる「マルチレベルのＮＡＮＤ型ＥＥＰＲＯＭのための高速で且つ正確なプログラミング方法（ＶＬＳＩ技術に関する１９９５年度シンポジウムのダイジェスト、Ｐ１２９〜１３０）」によると、分布の幅を０．２Ｖに限定するためには、原則として、通常の反復プログラミングパルスを動作間で０．２Ｖずつ増分させる必要がある。分布の幅を０．０５Ｖまで狭めるためには、０．０５Ｖずつ段階的に増加するパルスが必要である。プログラミング電圧をこのように少量ずつ増加させてセルをプログラムするためには、プログラミングの時間を４倍に延ばす必要がある。しかしながら、以下で説明する本発明の原則的な１態様にしたがえば、しきい値電圧の分布の幅を狭める際に、このように大幅にプログラミング時間を増加させる必要はない。
【００３１】
図９Ａおよび図９Ｂは、既存のプログラミングパルス技術と、その結果として得られる特定の状態にプログラムされたセルのしきい値分布の幅とを、それぞれ示した図である。図９Ａには、プログラミング電圧Ｖｐｇｍの波形が示されている。プログラミング電圧Ｖｐｇｍは、多数のパルスに分割され、１パルスごとに０．２Ｖずつ増加する。Ｖｐｇｍの増加幅は、０．２Ｖであると言える。この具体例では、Ｖｐｇｍの開始レベルは１２Ｖである。メモリセルのしきい値電圧の変化は、最高速のプログラムに関しては図９Ｂの白抜きの四角で、最低速のプログラムに関しては黒塗りの四角で表される。最高速でプログラムされたメモリセルは、１４Ｖのパルスに続く１つ目のパルスで検証レベルに到達する。この結果として得られる分布の最大幅は、ΔＶT＝０．２Ｖである。
【００３２】
パルスとパルスとの間の期間では、プログラム検証動作が実行される。つまり、プログラミングパルスとプログラミングパルスとの間に、並行してプログラムされている各セルのプログラムレベルを読み出し、そのレベルが、プログラムすることによって到達したい検証レベルに等しいか、あるいはその検証レベルを上回るかを決定する。所定のメモリセルのしきい値電圧が検証レベルを上回ると決定されたときは、所定のセルの直列セルユニットを接続されたビット線の電圧を、０ＶからＶｄｄに高めることによって、Ｖｐｇｍを取り除く。並行してプログラムされている他のセルのプログラミングは、それらが自身の検証レベルに到達するまで続行される。セルの最後のプログラミングパルスの最中に、しきい値電圧が検証レベルの下から上へと移動するときは、そのしきい値電圧のシフトは、Ｖｐｇｍの増分である０．２Ｖに等しい。したがって、しきい値電圧は０．２Ｖの幅の範囲内に制御される。
【００３３】
図１０Ａおよび図１０Ｂは、上述したタイプのアレイにおいて、４状態のＮＡＮＤ型メモリセルをプログラミングするための既存の技術を、具体的に示した図である。第１のプログラミングパスでは、下位論理ページからのビットにしたがって、セルのしきい値レベルを設定する。そのビットが「１」である場合は、セルは事前に消去された結果としてその状態にあるので、何も実施されない。しかしながら、そのビットが「０」である場合は、セルのレベルは第１のプログラム状態３４まで増加する。こうして、第１のプログラミングパスが終了する。
【００３４】
第２のプログラミングパスでは、セルに格納されている上位論理ページからのビットにしたがって、セルのしきい値レベルを設定する。上位ページのビットが「１」であるとき、セルの状態は、下位ページのビットのプログラミングに依存して、ともに上位ページビット「１」を有した状態である３３または３４のいずれかになるので、プログラミングは実施されない。しかしながら、上位ページのビットが「０」であるときは、セルは２度目のプログラミングを実施される。第１のパスの結果として、セルが、消去状態３３のままを維持している場合は、図１０Ｂの上の矢印で示されるように、セルは、その状態から最も高い状態３６に移るようにプログラムされる。しかしながら、第１のプログラミングパスの結果として、セルが、状態３４になるようにプログラムされた場合は、図１０Ｂの下の矢印によって示されるように、セルは、第２のパスにおいて、状態３４から状態３５に移るようにさらにプログラムされる。この第２のパスの結果として、セルは、第１のパスによるプログラミングの結果を変更することなく上位ページからの値「０」を格納する状態になるようにプログラムされる。
【００３５】
メモリが４を超える数の状態で動作するときは、メモリセルの規定のしきい値電圧ウィンドウ内には、当然ながら、その状態の数に等しい数の分布が存在する。さらに、各分布には特定のビットパターンが割り当てられているが、異なるビットパターンを割り当てても良く、この場合は、プログラミングを生じる状態と状態との間の状態を、図１０Ａおよび図１０Ｂで示したのと異なるものにすることができる。このような変形形態に関しては、従来の技術において取り上げた東芝による特許にいくつか記載されている。
【００３６】
通常は、並行してプログラムされるセルは、ワード線に沿って交互に並んだセルである。図１１は、１本のワード線４４に沿って並んだ多数のメモリセルのうち、３つのセル４１，４２，４３を示した図である。セル４１，４３を含んだ１組の交互セルは、論理ページ０，２（「偶数ページ」）からビットを格納し、セル４２を含んだもう１組の交互セルは、論理ページ１，３（「奇数ページ」）からのビットを格納する。結果として、一度に４ページ分のデータを対象として順に繰り返される１つのプログラミングサイクルで、１行のメモリセルに含まれる少なくとも４ページ分のデータがプログラミングされることになる。
【００３７】
図１０Ａおよび図１０Ｂに関して上述したように、一行を構成する少なくとも一部分のメモリセルをプログラミングする第１の動作では、先ず、下位ページ０からのビットが、第１組の個々の交互セルに入るようにプログラムされ、次いで、下位ページ１からのビットが、第２組の個々の交互セルに入るようにプログラムされる。これらの動作後は、図１１の実線で示されるように、ページ０，２およびページ１，３の両方にプログラム後の状態分布「１１」（消去状態でもある）および「１０」が存在する。次いで、上位ページ２からのビットが、第１組の交互セルに入るようにプログラムされ、続く最後の動作で、上位ページ３のビットが、第２組の交互セルに入るようにプログラムされる。上述したＹｕｐｉｎ作用のため、状態「１１」および「１０」の見かけ上の分布は、図中の点線で示されるように、プログラミングの直後に存在する実線で示されたしきい値分布よりも幅が広くなる。これは、下位ページ０，１のデータの最初のプログラミングが、隣接するフローティングゲートに状態「００」および「０１」で表される高いチャージレベルが含まれない環境において実施されたためである。見かけ上の初期の分布は、隣接するセルが高しきい値のこれらの状態になるようにプログラムされる際に、幅が広がる。さらに、隣接するフローティングゲートにページ３からのデータが書き込まれ、そのチャージレベルが奇数ページの状態「００」および「０１」まで高められるので、ページ０，２の高位状態「００」および「０１」もやはり、この見かけ上の広がり作用を受ける。
【００３８】
この見かけ上の広がり作用によって、メモリが動作する状態の数が制限され、動作上の他の制約も設けられる。データ読み出し動作の最中に、幅広になった見かけ上の分布を明確に区別できるようにするためには、状態分布間のマージンを充分に大きく維持する必要がある。図１１に示されるように、Ｙｕｐｉｎ作用による影響を受けないのは、点線で示されるようなしきい値分布の広がりを生じなかった、ページ１，３に対してプログラムされた最後２つの状態のみである。これは、隣接するフローティングゲートのチャージレベルが、その後変化しなかったためである。図１０Ｂに示すように、図１１のページ１，３からのビットを格納しているメモリセル状態「００」および「０１」は、最後にプログラムされたものである。しかしながら、ページ０，２およびページ１，３からのビットを格納している他の６つのセル状態に関しては、隣接するセルをその後に続いてプログラミングされるので、フローティングゲート間で電界結合を生じ、見かけ上のしきい値電圧の分布に影響を及ぼす。
【００３９】
新しいプログラミング技術の例
図１２は、図９〜１１に関連して上述したプログラミング技術において、２つの改良点によってもたらされる効果を示した図である。第１の改良点は、ページをプログラムする順序を変更することであり、先ず、プログラムされた最初の２ページのデータビットを、一行を構成する第１組の交互メモリセルに書き込み、次いで、これに続く２ページのデータビットを、第２組の交互メモリセルに書き込む。これは、プログラム後の状態のうち、さらに２つの状態を、Ｙｕｐｉｎ作用による影響から取り除く効果がある。第２の改良点は、初期の状態分布を狭める（圧縮する）ことであり、これによって、Ｙｕｐｉｎ作用を受けた後の見かけ上の分布が、その分布の幅を効果的に狭く維持できるようにする、好ましくは、最初のプログラミング後の実際の分布よりも、幅が広くならないようにする。これらの改良点は、都合に合わせて一方のみ実施しても良いし、両方とも実施しても良い。図１２は、両方とも実施した場合を示した例である。
【００４０】
図１１でプログラムされている第１群および第２群の交互メモリセルに対して指定されたのと同じものを、ページデータとして使用するとき、図１２に示した第１の改良点は、先ずページ０，２からのデータをともに第１群のセルに書き込み、次いでページ１，３からのデータをともに第２群のセルに書き込むことにある。つまり、図１１の例で示したように、４ページ分のデータを第１群および第２群の交互セルに交互に書き込むのではなく、先ず、両ページのデータを使用した第１群のセルのプログラムを終えてから、任意のデータを使用した第２群のセルのプログラムを行う。第２の交互メモリセルのプログラムは、その後に第３および第４のページのデータを使用して行われる。この結果、図に示すように、ページ１，３を格納しているメモリセルの状態「１０」に対してＹｕｐｉｎ作用による影響が排除される。これは、ページ１，３を使用した第２群のセルのプログラム後は、隣接する第１群の交互メモリセル（ページ０，２を格納する）のフローティングゲートのチャージレベルが増加することはないためである。したがって、ページ１，３によってプログラムされた後の３つの状態が、全てＹｕｐｉｎ作用による影響を受けなくなるので、格納されたページ１，３のデータを誤って読み出す可能性が減少する。
【００４１】
しかしながら、第１群のセルがページ０，２のデータによってプログラムされた後に、第２群の交互メモリセルがページ１，３のデータによってプログラムされるので、第１群のストレージ状態は、Ｙｕｐｉｎ作用による影響を受ける。この問題を克服するため、第１群のセルのしきい値電圧の分布を圧縮する。分布５１は、図１０Ａにしたがって、データページ０を最初にプログラムした結果として得られる。しかしながら、この分布は、データページ２をプログラムする前に再プログラムされるので、曲線５２で示すように、その分布の幅は狭められる。４ページ分のプログラミングが全て完了した後は、Ｙｕｐｉｎ作用によって、状態「１０」の見かけ上のしきい値分布が、曲線５３で示される状態まで広がる。見かけ上の分布５３は、初期の分布５１と同じ幅になるように、あるいは初期の分布５１よりも幅が狭くなるように、制御されることが好ましい。
【００４２】
データページ０のプログラムおよび圧縮の後に、データページ２をプログラム後の状態「００」および「０１」のいずれかになるようにプログラムする場合も、同様の動作が実施される。データは、第１群の交互セルに先ず書き込まれ、圧縮された後、後に実施される隣接する第２群の交互セルのプログラムによるＹｕｐｉｎ作用によって、効果的に幅を広げられる。
【００４３】
図１３は、図１２に示された状態分布の２回の圧縮を実現するために実施される工程を示した図である。先ず、第１の検証レベル６１を使用して、データによる状態のプログラムを行う。つまり、各プログラミング電圧パルスを、その状態になるようにプログラムされるセルに適用した後、これらのセルに適切な電圧条件を加え、これらのセルを読み出すことによって、個々のセルのしきい値電圧がレベル６１に達したかあるいはレベル６１を超えたかを決定する。そうである場合は、プログラムは停止する。そうでない場合は、さらにプログラミングパルスを適用し、状態を再度読み出す。こうして、所定の状態になるようにプログラムされ且つ曲線６２で示されるしきい値電圧の分布を有したメモリセルが得られる。上述したように、分布６２の幅は、適用されるプログラミングパルスの大きさによって制御される、すなわち主としてパルス間の電圧変化の大きさによって制御される。
【００４４】
分布の幅を狭めるため、全てのセルを所定の状態になるように並行してプログラムした後に、それらの状態を、レベル６１よりも低いしきい値６３を使用して読み出す。所定の状態になるようにプログラムされたセルのみを読み出すことによって、これらのセルを、他の状態になるようにプログラムされたセルから区別する。あるいは、もし可能であるならば、レジスタからデータを取得することもできる。次いで、これらのセルを所定の状態にするための第２のプログラミング動作（第２のパス）が、第１の検証レベル６１よりも高く且つ分布６２の範囲内にあるしきい値電圧検証レベル６４を使用して実施される。この第２のプログラミング動作による効果は、レベル６４よりも低いしきい値を使用してプログラムされたこれらのセルを、再プログラムし、分布６５で示されるように、検証レベル６４よりも高いレベルにすることにある。この実際のしきい値分布６５は、図１３からわかるように、もとの分布６２よりも幅が狭い。隣接する他のセルを、それらに格納されたチャージレベルを増加させることによってプログラムした後は、分布６６で示すように、Ｙｕｐｉｎ作用によって見かけ上の分布の幅が広がる。見かけ上の分布６６は、第２のプログラミングパスが実行されなかった場合に生じる分布と比べて、検証レベル６１と６４の差にほぼ等しい分だけ幅が狭い。
【００４５】
図１４Ａおよび図１４Ｂは、図９Ａおよび図９Ｂに示されたプログラミング方法の変更形態であり、図１３に関連して説明した第２のプログラミングパスを含んだ形態である。図には、第２のプログラミングパス（２ｎｄＰａｓｓＷｒｉｔｅ）手順の使用が、第１のパスの検証レベル（６１）および第２のパスの検証レベル（６４）のそれぞれとともに示されている。メモリセルのしきい値電圧の変化は、最高速のプログラムに関しては図１４Ｂの白抜きの四角で、最低速のプログラムに関しては黒塗りの四角で表される。第１のプログラミングパス（１ｓｔＰａｓｓＷｒｉｔｅ）は、低い検証レベル６１を使用することを除き、既存のプログラミング手順と同様である。第２のプログラミングパスで使用される検証レベル６４は、現在使用されている検証レベルと同じであって良い。
【００４６】
プログラミングパルスを１回適用した結果として、しきい値電圧が第１のパスの検証レベル６１よりも低いレベルから変化したとき、この例でのしきい値電圧のシフトは、ΔＶｐｇｍ増分である０．２Ｖに等しい。したがって、現行の技術と同様に、しきい値電圧は、幅が０．２Ｖである分布６２の範囲内に制御されるが、検証レベル６１が低いため、その分布は、現行の技術によって得られるよりも低い位置にくる。
【００４７】
１ｓｔＰａｓｓＷｒｉｔｅが完了した後で且つ２ｎｄＰａｓｓＷｒｉｔｅが開始する前は、１ｓｔＰａｓｓＷｒｉｔｅのしきい値レベル６１よりも高くて且つ２ｎｄＰａｓｓＷｒｉｔｅの検証レベル６４よりも低いしきい値電圧を有したメモリセルが、２ｎｄＰａｓｓＷｒｉｔｅの実行対象となる。例えば、最高速プログラムのメモリセルが、１３．８Ｖパルスの適用後に１ｓｔＰａｓｓＷｒｉｔｅの検証レベル６１に到達した場合は、２ｎｄＰａｓｓＷｒｉｔｅの開始Ｖｐｇｍレベルを１３．４Ｖまたはそれ未満に設定し、しきい値電圧のシフトを０．２Ｖ未満に減少させる。１具体例では、２ｎｄＰａｓｓＷｒｉｔｅの開始プログラミング電圧Ｖｐｇｍのレベルを１３．４Ｖに、そして１ｓｔＰａｓｓＷｒｉｔｅのレベルを１２Ｖに設定する。２ｎｄＰａｓｓＷｒｉｔｅのプログラミングパルスを１回適用した結果として、セルのしきい値電圧が検証レベル６４の下から上へと変化するとき、しきい値電圧のシフトは、０．０５Ｖ未満に維持される。したがって、対象としているメモリセルのしきい値電圧の分布は、現行の技術によって得られるものよりも大幅に狭い０．０５Ｖ幅の範囲内に制御される。したがって、１ｓｔＰａｓｓＷｒｉｔｅの検証レベル６１が２ｎｄＰａｓｓＷｒｉｔｅの検証レベル６４を少なくとも０．１５Ｖ下回るとき、しきい値電圧の分布の全体幅は０．０５Ｖである。
【００４８】
この具体例では、２ｎｄＰａｓｓＷｒｉｔｅの最大Ｖｐｇｍが、最悪の場合でも１ｓｔＰａｓｓＷｒｉｔｅのそれを０．２Ｖ上回る。これは、第２のパスにおいて０．１５Ｖ高い検証レベルを使用するためである。また、２ｎｄＰａｓｓＷｒｉｔｅの開始Ｖｐｇｍは、１ｓｔＰａｓｓＷｒｉｔｅのそれを大幅に上回って良いので、２ｎｄＰａｓｓＷｒｉｔｅの時間は、１ｓｔＰａｓｓＷｒｉｔｅのそれよりも常に短い。したがって、２つのプログラミングパスを使用したこの技術を使用し、しきい値電圧の分布の幅を０．２Ｖから０．０５Ｖに狭めることによって得られるコストパフォーマンスは、プログラミングの時間を２倍に延ばす場合に得られるものよりも小さいことがわかる。増分ΔＶｐｇｍとして０．０５Ｖを使用することによって、上述した場合と同様に幅が狭いプログラミング分布を得る既存のプログラミング技術では、プログラミング時間が、幅が０．２Ｖである場合の４倍になる。したがって、同じしきい値電圧の分布を得られるのであっても、２つのプログラミングパスを使用した技術は、既存の技術の２倍を超える速さのプログラミング時間を達成できる。
【００４９】
図１５Ａおよび図１５Ｂは、図１４Ａおよび図１４Ｂにそれぞれ対応して変更態様を示した図であり、第１のプログラミングパスの増分ΔＶｐｇｍを増加させてプログラミング時間を短縮する一方で、第２のプログラミングパスの増分ΔＶｐｇｍはそのままを維持して分布の幅を狭く規定する。この具体例では、１ｓｔＰａｓｓＷｒｉｔｅの増分ΔＶｐｇｍを、０．２Ｖから０．４Ｖに増大させる。そして、１ｓｔＰａｓｓＷｒｉｔｅの検証レベルを０．２Ｖだけ引き下げ、１ｓｔＰａｓｓＷｒｉｔｅの検証レベルと２ｎｄＰａｓｓＷｒｉｔｅの検証レベルとの差を０．２Ｖから少なくとも０．３５Ｖまで広げる。０．２Ｖの拡大は、増分ΔＶｐｇｍの差（０．４Ｖ−０．２Ｖ）に等しい。１ｓｔＰａｓｓＷｒｉｔｅおよび２ｎｄＰａｓｓＷｒｉｔｅのプログラミング電圧Ｖｐｇｍの開始レベルは、図１４Ａに示したＶｐｇｍの増分が０．２Ｖである場合の開始レベルに等しい。１ｓｔＰａｓｓＷｒｉｔｅの持続時間が２分の１程度まで短縮されるので、プログラミング時間は、図１４Ａおよび図１４Ｂに示したＶｐｇｍの増分が０．２Ｖの場合と比べて２５％以上短縮される。
【００５０】
図１４Ａおよび図１５Ａのそれぞれにおいて、１ｓｔＰａｓｓＷｒｉｔｅのプログラミングパルスのうち最初の数パルスは、対象とするメモリセル内でプログラムされるレベルの読み出しおよび検証のための時間をパルス間に（図示せず）含ませることなしに、交互に生成して良い。これは、対象とするセルが最初の数パルス中に所望のしきい値にプログラムされることは、滅多にないためである。２ｎｄＰａｓｓＷｒｉｔｅの最初の数パルスに関しても、同様にして良い。結果として、プログラミング時間はさらに短縮される。
【００５１】
図１２〜１５に関連して上述した具体的な実施形態では、最初のプログラミングの直後であって且つ隣接するセルのプログラミングに進む前、すなわち最初にプログラムされた状態がＹｕｐｉｎ作用によって歪められる前に実施される再プログラミングの動作において、プログラムされた後の分布を圧縮する。図１６〜１８に関連して以下で説明する具体的な実施形態では、分布を圧縮する再プログラミングの動作は、最初のプログラミングが全ての状態に対して実施された後、すなわちＹｕｐｉｎ作用によるしきい値分布の歪みが生じた後の段階で実施される。
【００５２】
図１６に示したプログラミング技術では、先ず、ページ０，２を、一行に沿って配列された第１群の交互ストレージエレメントにプログラムし、次いで、ページ１，３を、同じ行に沿って配列された第２群の交互ストレージエレメントにプログラムする。一方の群のストレージエレメントが、もう一方の群のストレージエレメントがプログラムされる前に、両ページからのデータによって完全にプログラムされるので、最後にプログラムされるページすなわちこの場合はページ１，３の状態分布が、Ｙｕｐｉｎ作用によって見かけ上広がる事態は生じない。しかしながら、第１のプログラムページすなわちページ０，２の状態分布は、選択されたワード線に沿って配列された隣接する第１群および第２群の交互ストレージエレメント間で生じる容量結合によって、見かけ上の広がりを生じる。ページ０，２の見かけ上の分布のシフトを修正する方法の１つは、通常使用されるものと同じデータおよび検証レベルを使用して、第１群のストレージエレメントを再プログラムする方法である。この再プログラミングは、隣接するストレージエレメントのチャージレベルの影響のもとで実施されるので、ページ０，２の状態分布は、シフトされる結果となる。再プログラム後の新しい分布は、最初にプログラムされたデータすなわちこの場合はページ０，２のデータに生じるＹｕｐｉｎ作用を修正する。
【００５３】
しかしながら、一般には、再プログラム後の状態分布を同時に圧縮することも望まれる。圧縮の主な動作は、異なる検証レベルを使用した再プログラミングであるので、このことによって、性能が劣化することはない。これは、図１３に関連して既に説明済みであり、この場合は、圧縮後の状態分布に影響を及ぼすであろう隣接するストレージエレメントのプログラミングに先立って、圧縮の再プログラミングを実施する。しかしながら、図１６に示したプログラミングの手順では、隣接するストレージエレメントがプログラムされた後に、圧縮の再プログラミングを実施する。
【００５４】
図１７は、データページ０，２の状態分布を圧縮する再プログラミングの手順を示した図である。検証レベル７１を使用したページ０，２の最初のプログラム後であって、ページ１，３をプログラムする前の時点では、各状態が曲線７２で示したように分布している。しかしながら、この分布は、ページ１，３のプログラム後は曲線７５で示した幅広の分布を示す。読み出しレベル７３を使用してこの状態のセルを読み出し、検証レベル７４を使用してこれらのセルを再プログラムすると、結果として曲線７６で示した見かけ上の分布を得られるが、実際の分布は点線７７によって示されたものである。適用されるプログラミングパルスおよび再プログラミングパルスは、図１４Ａに示したものと同様である。図に示すように、見かけ上の分布７６が見かけ上の分布７５よりも狭くなっており、所望の圧縮がなされたことがわかる。
【００５５】
図１８および図１９は、図１６および図１７と同じプログラミング手順および再プログラミング工程をそれぞれ示した図であるが、図１５Ａと同様で、パルスごとに０．４Ｖずつ増加するプログラミング電圧パルス（１ｓｔＰａｓｓＷｒｉｔｅ）で最初のプログラミングを実施するという点、そして、再プログラミングパルス（２ｎｄＰａｓｓＷｒｉｔｅ）がパルスごとに０．２Ｖずつ増加するという点だけが異なる。最初のプログラミングパスのΔＶｐｇｍが高いので、プログラミングおよび再プログラミングを完了するのに必要な時間が短縮される。
【００５６】
図２０は、本発明による様々な態様を使用した、別の可能なプログラミング技術を示した図である。この方法は、図１２および図１３に関連して説明した動作に続き、最初のデータページ０，２を二度目に再プログラミングする動作をさらに備える。二度目の再プログラミングは、他のデータページ１，３のプログラム後に生じるので、可能ではあるが必ずしも状態分布の圧縮を含まなくても良い。
【００５７】
発明の概要において取り上げた、本発明による第１および第２の態様の代表的な実施形態は、ＮＡＮＤ型のメモリセルアレイアーキテクチャを有したフラッシュＥＥＰＲＯＭシステムに関連して説明されているが、本発明によるこれらの態様およびその他の態様は、同じメモリ状態を表したストレージレベルの見かけ上の分布に作用する何らかの結合をストレージエレメント間で生じ、その作用を最低限に抑えることが望まれる任意の他のタイプのフラッシュメモリアーキテクチャ（例えば、ＮＯＲ型のメモリセルアーキテクチャを有したフラッシュＥＥＰＲＯＭシステム）またはその他のタイプの不揮発性メモリに、適用することができる。
【００５８】
代表的なプログラミングアルゴリズム
図２１は、下位ページの偶数コラムを図１２，１３，１４に関連して説明した技術にしたがってプログラミングするアルゴリズムの一例を示した図である。このアルゴリズムは、３つの部分に分けることができる。第１は、点線によって取り囲まれた部分（Ｓ１〜Ｓ４）である。この部分は、インターフェースの手順を示している。先ず（Ｓ１）、「データロード」コマンドがフラッシュコントローラによって発行され、データ入出力バッファ（６）に入力される。このときは、図示しないコマンドラッチ信号がコマンドインターフェース（７）に入力されるので、入力データは、状態マシン（８）の中でコマンドとして認識されラッチされる。次に（Ｓ２）、ページアドレスを指定したアドレスデータが、コントローラからデータ入出力バッファ（６）に入力され、ラッチされる。このときは、図示しないアドレスラッチ信号がコマンドインターフェース（７）に入力されるので、入力データは、状態マシン（８）の中でページアドレスとして認識されラッチされる。続いて（Ｓ３）、５３２バイトのプログラムデータが、データ入出力バッファ（６）に入力される。このときは、「データロード」コマンドがラッチされているので、入力データは、データストレージ１（ＤＳ１）の中でラッチされる。最後に（Ｓ４）、「プログラム」コマンドがフラッシュコントローラによって発行され、データ入出力バッファ（６）に入力される。このときは、コマンドラッチ信号がコマンドインターフェース（７）に入力されるので、入力データは、状態マシン（８）の中でコマンドとして認識されラッチされる。データストレージ１（ＤＳ１）の中でラッチされたデータは、「プログラム」コマンドによってトリガされると、状態マシン（８）によって制御される選択されたメモリセル（Ｍ）の中に入るように、自動的にプログラムされる（Ｓ５〜Ｓ２０）。
【００５９】
このアルゴリズムの第２の部分は、工程Ｓ５〜Ｓ１０の１ｓｔＰａｓｓＷｒｉｔｅである。先ず、開始Ｖｐｇｍを１２Ｖに設定し、状態マシン（８）に組み込まれたプログラムカウンタを０に初期化する（Ｓ５）。次に、例えば表Ｉに示したＷＬ２などの選択されたワード線に、第１のプログラムパルスを適用する（Ｓ６）。データストレージ１（ＤＳ１）の中で「０」データがラッチされた場合は、対応するビット線（ＢＬ）を接地する（表Ｉの「プログラムプロモーション」）。反対に、データストレージ１（ＤＳ１）の中で「１」データがラッチされた場合は、対応するビット線（ＢＬ）をＶｄｄに接続する（表Ｉの「プログラム禁止」）。
【００６０】
プログラム後は、選択されたメモリセルの状態を検証する。検証するためには、１ｓｔＰａｓｓの１０検証を実行する（Ｓ７）。この動作では、しきい値電圧が、表Ｉに示した１ｓｔＰａｓｓの検証レベル：０．２Ｖに到達したか否かが決定される。しきい値電圧が検証レベルに到達したと検出された場合は、ＤＳ１の中でラッチされた「０」データを「１」データに変更する。しきい値電圧が検証レベルに到達していないと検出された場合は、ＤＳ１の中でラッチされた「０」データを維持する。既存の「１」データも、やはり維持される。このように、「０」データが次々に「１」データに変更され、「１」データはメモリセルの状態に拘らず維持されるので、最終的には、データストレージＤＳ１の中でラッチされた全てのデータが「１」データになる。つまり、１ｓｔＰａｓｓの検証レベルをもとにして検証した結果、全てのメモリセルが上手くプログラムされたことを意味する。
【００６１】
検証動作の後は、データストレージＤＳ１の中でラッチされたデータが全て「１」データになったか否かをチェックする（Ｓ８）。全てのデータが「１」データになった場合は、１ｓｔＰａｓｓＷｒｉｔｅを終了して２ｎｄＰａｓｓＷｒｉｔｅを開始する。「１」データになっていない場合は、アルゴリズムを工程Ｓ９に進める。
【００６２】
工程Ｓ９では、プログラムカウンタのカウント値がチェックされる。カウント値が２０より小さい場合は、Ｖｐｇｍのレベルを０．２Ｖだけ増大させ、カウント値を１だけ増分させた後（Ｓ１０）、アルゴリズムをプログラムの動作Ｓ６に戻す。カウント値が２０以上である場合は、状態マシンの状態データを「ＦＡＩＬ」に設定し、アルゴリズムを終了する（Ｓ１１）。
【００６３】
アルゴリズムの第３の部分は、２ｎｄＰａｓｓＷｒｉｔｅである（Ｓ１２〜Ｓ２０）。先ず、２ｎｄＰａｓｓの１０の読み出しを実行する（Ｓ１２）。この動作では、０Ｖより大きいしきい値電圧を有したメモリセルが抽出され、対応するデータストレージ１（ＤＳ１）に「０」データが設定される。残りのデータストレージ１（ＤＳ１）のそれぞれには、「１」データが設定される。
【００６４】
次に、２ｎｄＰａｓｓの１０の検証を実行する（Ｓ１３）。この動作では、０Ｖより大きく０．４Ｖより小さいしきい値電圧を有したメモリセルが、２ｎｄＰａｓｓの検証レベル：０．４Ｖおよび既にデータストレージ１（ＤＳ１）に格納されているデータを使用して抽出される。ここでは、しきい値電圧が、表Ｉに示した２ｎｄＰａｓｓの検証レベル：０．４Ｖに到達したか否かが決定される。しきい値電圧が検証レベルに到達したと検出された場合は、ＤＳ１の中でラッチされた「０」データを「１」データに変更する。しきい値電圧が検証レベルに到達していないと検出された場合は、データストレージ（ＤＳ１）の中でラッチされた「０」データを維持する。既存の「１」データも、やはり維持される。
【００６５】
２ｎｄＰａｓｓの１０検証（Ｓ１３）の後は、開始Ｖｐｇｍを１３．４Ｖにリセットし、プログラムカウンタを０に再び初期化する（Ｓ１４）。次に、表Ｉに示したような選択されたワード線に、第１のプログラムパルス：１３．４Ｖを適用する（Ｓ１５）。データストレージ１（ＤＳ１）の中で「０」データがラッチされた場合は、対応するビット線（ＢＬ）を接地する（表Ｉの「プログラムプロモーション」）。反対に、データストレージ１（ＤＳ１）の中に「１」データがラッチされた場合は、対応するビット線（ＢＬ）をＶｄｄに接続する（表Ｉの「プログラム禁止」）。
【００６６】
プログラム（Ｓ１５）後は、選択されたメモリセルの状態を検証する。検証するためには、２ｎｄＰａｓｓの１０検証を実行する（Ｓ１６）。この動作では、しきい値電圧が、表Ｉに示した２ｎｄＰａｓｓの検証レベル：０．４Ｖに到達したか否かが決定される。しきい値電圧が検証レベルに到達したと検出された場合は、ＤＳ１の中でラッチされた「０」データを「１」データに変更する。しきい値電圧が検証レベルに到達していないと検出された場合は、ＤＳ１の中でラッチされた「０」データを維持する。既存の「１」データも、やはり維持される。このように、「０」データが次々に「１」データに変更され、「１」データはメモリセルの状態に拘らず維持されるので、最終的には、データストレージＤＳ１の中でラッチされた全てのデータが「１」データになる。つまり、全てのメモリセルが上手くプログラムされたことを意味する。
【００６７】
検証動作（Ｓ１６）の後は、データストレージＤＳ１の中でラッチされたデータが全て「１」データになったか否かをチェックする（Ｓ１７）。全て「１」データになった場合は、２ｎｄＰａｓｓＷｒｉｔｅを終了し、状態データを「ＰＡＳＳ」に設定して、プログラムアルゴリズム全体が終了する。「１」データになっていない場合は、アルゴリズムを動作Ｓ１８に進める。
【００６８】
工程Ｓ１８では、プログラムカウンタのカウント値をチェックする。カウント値が１３より小さい場合は、Ｖｐｇｍのレベルを０．２Ｖだけ増大させ、カウント値を１だけ増分させた後（Ｓ１９）、アルゴリズムをプログラムの動作Ｓ１５に戻す。カウント値が１３以上である場合は、状態データを「ＦＡＩＬ」に設定し、アルゴリズムを終了する（Ｓ１１）。
【００６９】
図２２は、上位ページの偶数コラムを図１２，１３，１４で説明した技術にしたがってプログラミングするプログラムアルゴリズムの一例を示した図である。このアルゴリズムは、３つの部分に分けることができる。第１は、点線によって取り囲まれた部分（Ｓ１〜Ｓ４）である。この部分は、図２１で示した工程Ｓ１〜Ｓ４と同じである。
【００７０】
このアルゴリズムの第２の部分は、工程Ｓ５〜Ｓ１３の１ｓｔＰａｓｓＷｒｉｔｅである。先ず、１ｓｔＰａｓｓの１０読み出しを実行する（Ｓ５）。この動作では、０Ｖより大きいしきい値電圧を有したメモリセルを抽出し、対応するデータストレージ２（ＤＳ２）のそれぞれに「０」データを設定する。残りのデータストレージ２（ＤＳ２）のそれぞれには、「１」データを設定する。開始Ｖｐｇｍは１４Ｖに設定し、プログラムカウンタは０に初期化する（Ｓ６）。次に、例えば表Ｉに示したＷＬ２などの選択されたワード線に、第１のプログラムパルスを適用する（Ｓ７）。データストレージ１（ＤＳ１）の中で「０」データがラッチされた場合は、対応するビット線（ＢＬ）を接地する（表Ｉの「プログラムプロモーション」）。反対に、データストレージ１（ＤＳ１）の中で「１」データがラッチされた場合は、対応するビット線（ＢＬ）をＶｄｄに接続する（表Ｉの「プログラム禁止」）。
【００７１】
プログラムの後は、選択されたメモリセルの状態を検証する。検証するためには、先ず０１検証を実行する（Ｓ８）。この動作では、しきい値電圧が表Ｉに示した１ｓｔＰａｓｓの検証レベル：２．４Ｖに到達したか否かを決定する。しきい値電圧が検証レベルに到達したと検出された場合は、ＤＳ１の中でラッチされた「０」データを「１」データに変更する。しきい値電圧が検証レベルに到達していないと検出された場合は、ＤＳ１の中でラッチされた「０」データを維持する。既存の「１」データも、やはり維持される。次に、１ｓｔＰａｓｓの００検証を実行する（Ｓ９）。この動作では、しきい値電圧が表Ｉに示した１ｓｔＰａｓｓの検証レベル：１．２Ｖに到達したか否かを決定する。しきい値電圧が検証レベルに到達したと検出され、且つ対応するデータストレージ２（ＤＳ２）に格納されたデータが「０」データである場合は、ＤＳ１の中でラッチされた「０」データを「１」データに変更する。関連のデータストレージ２（ＤＳ２）が「１」データを有する場合は、データストレージ１（ＤＳ１）に格納された「０」データは、検出された結果に拘らずそのままを維持する。しきい値電圧が検証レベルに到達していないと検出された場合は、ＤＳ１の中でラッチされた「０」データを維持する。既存の「１」データも、やはり維持される。
【００７２】
こうして、「０」データが次々に「１」データに変更され、「１」データはメモリセルの状態に拘らず維持されるので、最終的に、データストレージＤＳ１の中にラッチされた全てのデータが「１」データになる。つまり、「０１」状態の検証レベルおよび「００」状態の１ｓｔＰａｓｓの検証レベルをもとにして検証した結果、全てのメモリセルが上手くプログラムされたことを意味する。
【００７３】
検証動作の後は、データストレージＤＳ１の中にラッチされたデータが全て「１」データになったか否かがチェックされる（Ｓ１０）。全てのデータが「１」データになった場合は、１ｓｔＰａｓｓＷｒｉｔｅが終了して２ｎｄＰａｓｓＷｒｉｔｅが開始する。「１」データになっていない場合は、アルゴリズムは工程Ｓ１１に進む。
【００７４】
工程Ｓ１１では、プログラムカウンタのカウント値がチェックされる。カウント値が２０より小さい場合は、Ｖｐｇｍのレベルを０．２Ｖだけ高め、カウント値を１だけ増分させた後（Ｓ１２）、アルゴリズムはプログラムの工程Ｓ７に戻る。カウント値が２０以上である場合は、状態マシンの状態データを「ＦＡＩＬ」に設定し、アルゴリズムを終了する（Ｓ１３）。
【００７５】
アルゴリズムの第３の部分は、２ｎｄＰａｓｓＷｒｉｔｅである（Ｓ１４〜Ｓ２２）。先ず、２ｎｄＰａｓｓの００読み出しが実行される（Ｓ１４）。この動作では、１Ｖより大きいしきい値電圧を有したメモリセルが抽出され、対応するデータストレージ１（ＤＳ１）のそれぞれに「０」データが設定される。残りのデータストレージ１（ＤＳ１）のそれぞれには、「１」データが設定される。
【００７６】
次に、２ｎｄＰａｓｓの００検証が実行される（Ｓ１５）。この動作では、１Ｖより大きく１．４Ｖより小さいしきい値電圧を有したメモリセルが、２ｎｄＰａｓｓの検証レベル：１．４Ｖおよび既にデータストレージ１（ＤＳ１）に格納されているデータを使用して抽出される。ここでは、しきい値電圧が表Ｉに示した２ｎｄＰａｓｓの検証レベル：１．４Ｖに到達したか否かが決定される。しきい値電圧が検証レベルに到達したと検出された場合は、ＤＳ１の中にラッチされた「０」データが「１」データに変更される。しきい値電圧が検証レベルに到達していないと検出された場合は、データストレージ（ＤＳ１）の中にラッチされた「０」データは維持される。既存の「１」データも、やはり維持される。
【００７７】
２ｎｄＰａｓｓの００検証（Ｓ１５）の後は、開始Ｖｐｇｍを１４．４Ｖにリセットし、プログラムカウンタを０に再び初期化する（Ｓ１６）。次に、表Ｉに示したような選択されたワード線に、第１のプログラムパルス：１４．４Ｖを適用する（Ｓ１７）。データストレージ１（ＤＳ１）の中に「０」データがラッチされた場合は、対応するビット線（ＢＬ）が接地される（表Ｉの「プログラムプロモーション」）。反対に、データストレージ１（ＤＳ１）の中に「１」データがラッチされた場合は、対応するビット線（ＢＬ）はＶｄｄに接続される（表Ｉの「プログラム禁止」）。
【００７８】
プログラム（Ｓ１７）の後は、選択されたメモリセルの状態が検証される。検証するために、２ｎｄＰａｓｓの００検証を実行する（Ｓ１８）。この動作では、しきい値電圧が表Ｉに示した２ｎｄＰａｓｓの検証レベル：１．４Ｖに到達したか否かが決定される。しきい値電圧が検証レベルに到達したと検出された場合は、ＤＳ１の中にラッチされた「０」データが「１」データに変更される。しきい値電圧が検証レベルに到達していないと検出された場合は、ＤＳ１の中にラッチされた「０」データは維持される。既存の「１」データも、やはり維持される。このように、「０」データが次々に「１」データに変更され、「１」データはメモリセルの状態に拘らず維持されるので、最終的には、データストレージＤＳ１の中でラッチされた全てのデータが「１」データになる。つまり、全てのメモリセルが上手くプログラムされたことを意味する。
【００７９】
検証動作（Ｓ１８）後は、データストレージＤＳ１の中でラッチされたデータが全て「１」データになったか否かをチェックする（Ｓ１９）。全て「１」データになった場合は、２ｎｄＰａｓｓＷｒｉｔｅを終了し、状態データを「ＰＡＳＳ」に設定して、プログラムアルゴリズム全体を終了する。「１」データになっていない場合は、アルゴリズムを動作Ｓ２０に進める。
【００８０】
工程Ｓ２０では、プログラムカウンタのカウント値をチェックする。カウント値が１３より小さい場合は、Ｖｐｇｍのレベルを０．２Ｖだけ増大させ、カウント値を１だけ増分させた後（Ｓ２１）、アルゴリズムをプログラムの動作Ｓ１７に戻す。カウント値が１３以上である場合は、状態データを「ＦＡＩＬ」に設定し、アルゴリズムを終了する（Ｓ１３）。
【００８１】
「０１」状態にするための２ｎｄＰａｓｓＷｒｉｔｅは、再び最大Ｖｐｇｍを必要とし、結果として不必要なプログラム障害を生じるので、図２２のアルゴリズムでは、「０１」状態にプログラムすべきメモリセル上で２ｎｄＰａｓｓＷｒｉｔｅを実行しない。しかしながら、もし２ｎｄＰａｓｓＷｒｉｔｅが必要ならば、本発明にしたがって容易に実行することができる。
【００８２】
図２３は、データの下位ページによって偶数コラムをプログラミングする目的で図１２，１９，１５に示した方法を実施するプログラムアルゴリズムの一例を示した図である。このアルゴリズムは、図２１に示したアルゴリズムと類似している。ただ、１ｓｔＰａｓｓＷｒｉｔｅのＶｐｇｍの増分の大きさ（Ｓ１０）および１ｓｔＰａｓｓＷｒｉｔｅのプログラムカウンタに関連の最大カウント値（Ｓ９）のみが異なる。Ｖｐｇｍの増分は、１ｓｔＰａｓｓＷｒｉｔｅを加速する目的で０．２Ｖから０．４Ｖまで増大される。
【００８３】
図２４は、データの上位ページによって偶数コラムをプログラミングする目的で図１２，１９，１５に示した方法を実施するプログラムアルゴリズムの一例を示した図である。このアルゴリズムは、図２２に示したアルゴリズムと類似している。ただ、１ｓｔＰａｓｓＷｒｉｔｅのＶｐｇｍの増分の大きさ（Ｓ１２）および１ｓｔＰａｓｓＷｒｉｔｅのプログラムカウンタに関連した最大カウント値（Ｓ１１）のみが異なる。Ｖｐｇｍの増分は、１ｓｔＰａｓｓＷｒｉｔｅを加速する目的で０．２Ｖから０．４Ｖまで増大される。
【００８４】
図２５および図２６は、図２１および図２２のプログラムアルゴリズムとそれぞれ組み合わされて図１２，１３，１４に示した方法を実施するプログラムアルゴリズムの例を示した図である。図２５のアルゴリズムは、奇数コラムのプログラミングを示した図であり、このとき、図２１のアルゴリズムが偶数コラムのプログラミングに利用した２ｎｄＰａｓｓＷｒｉｔｅは実施されない。２ｎｄＰａｓｓＷｒｉｔｅを通して０．４Ｖより上に分布を設定するように、１ｓｔＰａｓｓの１０検証の検証レベルを０．２Ｖから０．４Ｖまで増大させることによって、０．４Ｖより上に分布を設定する。図２６のアルゴリズムは、奇数コラムのプログラミングを示した図であり、このとき、図２２のアルゴリズムが偶数コラムのプログラミングに利用した２ｎｄＰａｓｓＷｒｉｔｅは実施されない。２ｎｄＰａｓｓＷｒｉｔｅを通して１．４Ｖより上に分布を設定するように、１ｓｔＰａｓｓの００検証の検証レベルを１．２Ｖから１．４Ｖまで増大させることによって、１．４Ｖより上に分布を設定する。図２１，２２，２５，２６に示したアルゴリズムの組み合わせによって、Ｙｕｐｉｎ作用が補正される。結果として、プログラムのスループットが向上する。
【００８５】
図２７および図２８は、図２３および図２４のプログラムアルゴリズムとそれぞれ組み合わされて図１２，１９，１５に示した方法を実施するアルゴリズムの例を示した図である。図２７のアルゴリズムは、奇数コラムのプログラミングを示した図であり、このとき、図２３のアルゴリズムが偶数コラムのプログラミングに利用した２ｎｄＰａｓｓＷｒｉｔｅは実施されない。２ｎｄＰａｓｓＷｒｉｔｅを通して０．４Ｖより上に分布を設定するように、１ｓｔＰａｓｓの１０検証の検証レベルを０．２Ｖから０．４Ｖまで増大させることによって、０．４Ｖより上に分布を設定する。図２８のアルゴリズムは、奇数コラムのプログラミングを示した図であり、このとき、図２４のアルゴリズムが偶数コラムのプログラミングに利用した２ｎｄＰａｓｓＷｒｉｔｅは実施されない。２ｎｄＰａｓｓＷｒｉｔｅを通して１．４Ｖより上に分布を設定するように、１ｓｔＰａｓｓの００検証の検証レベルを１．２Ｖから１．４Ｖまで増大させることによって、１．４Ｖより上に分布を設定する。
【００８６】
図２３，２４，２７，２８に示したアルゴリズムの組み合わせによって、Ｙｕｐｉｎ作用が補正される。結果として、プログラムのスループットが大幅に向上する。
【００８７】
図２９は、図１２，１４，１４に関連して説明した方法を実現するプログラムシーケンスの例を示した図である。各ブロックにおけるデータのプログラミングは、ワード線ＷＬ０の偶数ビット線の下位ページのページアドレスから始まって、ワード線ＷＬ３の奇数ビット線の上位ページに順に至るように実行される。このシーケンスは、Ｙｕｐｉｎ作用を考慮に入れて生成される。
【００８８】
図３０は、図１６および図１７の方法にしたがって圧縮された下位ページのデータを読み出す読み出しアルゴリズムの例を示した図である。点線で取り囲まれた部分（Ｓ１およびＳ２）は、インターフェースの手順を示している。先ず（Ｓ１）、「データ読み出し」コマンドがフラッシュコントローラによって発行され、データ入出力バッファ（６）に入力される。このときは、図示しないコマンドラッチ信号がコマンドインターフェース（７）に入力されるので、入力データは、状態マシン（８）の中でコマンドとして認識されラッチされる。次に（Ｓ２）、ページアドレスを指定したアドレスデータが、コントローラからデータ入出力バッファ（６）に入力され、ラッチされる。このときは、図示しないアドレスラッチ信号がコマンドインターフェース（７）に入力されるので、入力データは、状態マシン（８）の中でページアドレスとして認識されラッチされる。選択されたメモリセル（Ｍ）に格納されたデータは、アドレスデータによってトリガされると、状態マシン（８）による制御を受け、自動的に読み出される（Ｓ４およびＳ５）。
【００８９】
０１読み出しでは、２Ｖより大きいしきい値電圧を有したメモリセルを抽出し、対応するデータストレージ２（ＤＳ２）のそれぞれに「１」データを設定する。残りのデータストレージ２（ＤＳ２）のそれぞれには、「０」データを設定する。次に、１０読み出しを実行する。この動作では、０Ｖより小さいしきい値電圧または２Ｖより大きいしきい値電圧を有したメモリセルが抽出される。しきい値電圧が０Ｖより小さいことが検出された場合、またはデータストレージ２（ＤＳ２）が「１」データを格納していることが検出された場合は、「１」データは、データストレージ１（ＤＳ１）の中に設定されるか、または「０」に設定される。
【００９０】
データストレージ１（ＤＳ１）に格納されたデータは、読み出し信号（図示せず）がコマンドインターフェース（７）に入力されるのと同時に、データ入出力バッファ（６）を介して外部に出力される。
【００９１】
図３１は、図１６および図１７の方法にしたがって圧縮された上位ページのデータを読み出す読み出しアルゴリズムの例を示した図である。点線によって取り囲まれた部分（Ｓ１およびＳ２）は、図３０に示された部分と同じである。００読み出しでは、１Ｖより大きいしきい値電圧を有したメモリセルを抽出し、対応するデータストレージ１（ＤＳ１）のそれぞれに「０」データを設定する。残りのデータストレージ１（ＤＳ１）のそれぞれには、「１」データを設定する。データストレージ１（ＤＳ１）に格納されたデータは、読み出し信号と同時に、データ入出力バッファ（６）を介して外部に出力される。
【００９２】
以上では、具体的な実施形態に関連して本発明の様々な態様を説明したが、本発明は、添付した特許請求の範囲の全範囲内において保護される。
【図面の簡単な説明】
【図１】本発明の様々な実装形態のもとになる不揮発性メモリシステムのブロック図である。
【図２】図１のメモリアレイがＮＡＮＤ型である場合の従来の回路および構成を示した図である。
【図３】半導体基板上に形成されたＮＡＮＤ型メモリアレイをコラムに沿って切り取った場合の断面図である。
【図４】図３のメモリアレイを断面４−４で切り取った場合の断面図である。
【図５】図３のメモリアレイを断面５−５で切り取った場合の断面図である。
【図６】図２〜５のＮＡＮＤ型メモリセルアレイの動作電圧の例を示した表１を示す図である。
【図７】図２〜５のＮＡＮＤ型メモリセルの別の特徴を示した図である。
【図８】図２〜５のＮＡＮＤ型メモリセルが４つの状態で動作する場合に、そのしきい値電圧の従来の分布を例として示した図である。
【図９】図９Ａの電圧パルスを使用したプログラムに対して、図２〜５のメモリセルアレイのしきい値電圧の従来の応答状態を示した図である。
【図１０Ａ】しきい値電圧レベルの分布図であり、図２〜５のメモリセルアレイをプログラムする従来の技術を示した図である。
【図１０Ｂ】しきい値電圧レベルの分布図であり、図２〜５のメモリセルアレイをプログラムする従来の技術を示した図である。
【図１１】従来の技術を使用して図２〜５のメモリセルアレイをプログラムした場合に、しきい値の分布に及ぼされるＹｕｐｉｎ作用を示した図である。
【図１２】本発明による第１の技術を使用して図２〜５のメモリセルアレイをプログラムした場合に、しきい値の分布に及ぼされるＹｕｐｉｎ作用を示した図である。
【図１３】図２〜５のメモリセルアレイを、図１２に結果を示した第１の技術にしたがってプログラムする動作を示した図である。
【図１４】図１３のプログラミング方法にしたがって図１４Ａのプログラミングパルスを適用した場合の、図２〜５のメモリセルアレイのしきい値電圧レベルの応答状態を示した図である。
【図１５】図１３のプログラミング方法にしたがった別のパルスセットである図１５Ａのプログラミングパルスを適用した場合の、図２〜５のメモリセルアレイのしきい値電圧レベルの応答状態を示した図である。
【図１６】本発明による第２の技術を使用して図２〜５のメモリセルアレイをプログラムした場合に、しきい値の分布に及ぼされるＹｕｐｉｎ作用を示した図である。
【図１７】図２〜５のメモリセルアレイを図１６に結果を示した第２の技術にしたがってプログラムする動作を示した図である。
【図１８】本発明による第２の技術の変形形態を使用して図２〜５のメモリセルアレイをプログラムした場合に、しきい値の分布に及ぼされるＹｕｐｉｎ作用を示した図である。
【図１９】図２〜５のメモリセルアレイを図１８に結果を示した第２の技術の変形形態にしたがってプログラムする動作を示した図である。
【図２０】本発明による第３の技術を使用して図２〜５のメモリセルアレイをプログラムした場合に、しきい値の分布に及ぼされるＹｕｐｉｎ作用を示した図である。
【図２１】図２〜５のメモリセルアレイをプログラムする方法の第１の代表的な実施形態の第１の部分を示したフローチャートである。
【図２２】図２〜５のメモリセルアレイをプログラムする方法の第１の代表的な実施形態の第２の部分を示したフローチャートである。
【図２３】図２〜５のメモリセルアレイをプログラムする方法の第２の代表的な実施形態の第１の部分を示したフローチャートである。
【図２４】図２〜５のメモリセルアレイをプログラムする方法の第２の代表的な実施形態の第２の部分を示したフローチャートである。
【図２５】図２１と組み合わされて図２〜５のメモリセルアレイをプログラムする方法の第３の代表的な実施形態の第１の部分を構成するフローチャートである。
【図２６】図２２と組み合わされて図２〜５のメモリセルアレイをプログラムする方法の第３の代表的な実施形態の第２の部分を構成するフローチャートである。
【図２７】図２３と組み合わされて図２〜５のメモリセルアレイをプログラムする方法の第４の代表的な実施形態の第１の部分を構成するフローチャートである。
【図２８】図２４と組み合わされて図２〜５のメモリセルアレイをプログラムする方法の第４の代表的な実施形態の第２の部分を構成するフローチャートである。
【図２９】第３および第４の実施形態を利用したプログラミングシーケンスを示した図である。
【図３０】図２〜５のメモリからデータを読み出す方法の第１の部分を示した図である。
【図３１】図２〜５のメモリからデータを読み出す方法の第２の部分を示した図である。
【符号の説明】
１…メモリセルアレイ
２…コラム制御回路
３…ロウ制御回路
４…ｃソース制御回路
５…ｃ−ｐウェル制御回路
６…データ入出力バッファ
７…コマンド回路
８…状態マシン
９…ｐ型半導体基盤
１０…ｎ型領域
１１…ｃ−ｐウェル
１２…ｎ型拡散層
１３…ｐ型拡散層
１４…トンネル酸化膜
１５…絶縁膜
１６…データストレージ部分
２０…コントローラ
２１，２２…集積回路チップ
【図１】
0004221196.tif 000002
【図２】
0004221196.tif 000003
【図３】
0004221196.tif 000004
【図４】
0004221196.tif 000005
【図５】
0004221196.tif 000006
【図６】
0004221196.tif 000007
【図７】
0004221196.tif 000008
【図８】
0004221196.tif 000009
【図９】
0004221196.tif 000010
【図１０Ａ】
0004221196.tif 000011
【図１０Ｂ】
0004221196.tif 000012
【図１１】
0004221196.tif 000013
【図１２】
0004221196.tif 000014
【図１３】
0004221196.tif 000015
【図１４】
0004221196.tif 000016
【図１５】
0004221196.tif 000017
【図１６】
0004221196.tif 000018
【図１７】
0004221196.tif 000019
【図１８】
0004221196.tif 000020
【図１９】
0004221196.tif 000021
【図２０】
0004221196.tif 000022
【図２１】
0004221196.tif 000023
【図２２】
0004221196.tif 000024
【図２３】
0004221196.tif 000025
【図２４】
0004221196.tif 000026
【図２５】
0004221196.tif 000027
【図２６】
0004221196.tif 000028
【図２７】
0004221196.tif 000029
【図２８】
0004221196.tif 000030
【図２９】
0004221196.tif 000031
【図３０】
0004221196.tif 000032
【図３１】
0004221196.tif 000033