(57)【要約】 【課題】  ベリファイ動作を高速化し、データの書き込み速度を向上する。【解決手段】  制御回路７は、第１の書き込み動作によりメモリセルの閾値電圧を第１の閾値電圧から第１の閾値電圧又は第２の閾値電圧（第１の閾値電圧＜第２の閾値電圧）とし、第２の書き込み動作によりメモリセルの閾値電圧が第１の閾値電圧である場合、第１の閾値電圧又は第３の閾値電圧（第１の閾値電圧＜第３の閾値電圧）とし、第２の閾値電圧である場合、第４の閾値電圧（第２の閾値電圧＜＝第４の閾値電圧）又は第５の閾値電圧（第４の閾値電圧＜第５の閾値電圧）とし、第２の書き込み動作においてプログラム及びベリファイ動作を繰り返し行ない、第３の閾値電圧に達したかどうかをベリファイするベリファイ動作の回数に最大値を設定し、ベリファイ動作の回数が前記最大値に達した場合、第３の閾値電圧に達したかどうかをベリファイするベリファイ動作をスキップする。【選択図】図１
2011138607.tif 000002
【特許請求の範囲】
【請求項１】
ワード線、及びビット線に接続され、ｎ値（ｎは３以上の自然数）のうちの１値を記憶する複数のメモリセルがに配置されて構成されたメモリセルアレイと、
入力データに応じて前記ワード線、ビット線の電位を制御し、前記メモリセルにデータを書き込む制御回路とを具備し、
前記制御回路は、
第１の書き込み動作により、前記メモリセルの閾値電圧を第１の閾値電圧から第１の閾値電圧又は第２の閾値電圧（第１の閾値電圧＜第２の閾値電圧）とし、
第２の書き込み動作により、前記メモリセルの閾値電圧が前記第１の閾値電圧である場合、第１の閾値電圧又は第３の閾値電圧（第１の閾値電圧＜第３の閾値電圧）とし、第２の閾値電圧である場合、第４の閾値電圧（第２の閾値電圧＜＝第４の閾値電圧）又は第５の閾値電圧（第４の閾値電圧＜第５の閾値電圧）とし、
前記制御回路は、前記第２の書き込み動作において、プログラム及びベリファイ動作を繰り返し行ない、前記第３の閾値電圧に達したかどうかをベリファイするベリファイ動作の回数に最大値を設定し、前記ベリファイ動作の回数が前記最大値に達した場合、前記第３の閾値電圧に達したかどうかをベリファイするベリファイ動作をスキップすることを特徴とする半導体記憶装置。
【請求項２】
前記メモリセルと同時に選択される第１のフラグセルをさらに具備し、前記制御回路は、前記第２の書き込み動作時に、前記第１のフラグセルの閾値電圧を前記第１の閾値電圧から前記第３の閾値電圧に変化させることを特徴とする請求項１の何れかに記載の半導体記憶装置。
【請求項３】
前記メモリセルと同時に選択される第２のフラグセルをさらに具備し、前記制御回路は、前記第２の書き込み動作時に、前記第２のフラグセルの閾値電圧を前記第１の閾値電圧から前記第４の閾値電圧に変化させることを特徴とする請求項１の何れかに記載の半導体記憶装置。
【請求項４】
前記制御回路は、第１の読み出し動作において、前記第４の閾値電圧で前記メモリセルからデータを読み出し、前記第２のフラグセルにデータが書き込まれている場合、前記読み出したデータを出力し、前記第２のフラグセルにデータが書きこまれていない場合、前記第３の閾値電圧で前記メモリセルから読み出したデータを出力することを特徴とする請求項３記載の半導体記憶装置。
【請求項５】
前記制御回路は、第２の読み出し動作において、前記第３の閾値電圧で前記メモリセルからデータを読み出し、前記第１のフラグセルにデータが書き込まれている場合、前記読み出したデータを出力し、前記第１のフラグセルにデータが書き込まれていない場合、固定値を出力することを特徴とする請求項２記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば２ビット以上のデータを記憶することが可能な半導体記憶装置に関する。
【背景技術】
【０００２】
ＥＥＰＲＯＭを用いたＮＡＮＤ型フラッシュメモリであって、多値データを記憶可能な不揮発性半導体記憶装置が提案されている（例えば、特許文献１参照）。
【０００３】
この種の不揮発性半導体記憶装置において、メモリセルに多値データを記憶する場合、各データに対応した閾値電圧をメモリセルに設定する。この閾値電圧の数は、メモリセルに記憶するデータのビット数が増加するに従って増加する。例えば２ビット、４値のデータを記憶する場合、４つの閾値電圧を必要とし、３ビット、８値のデータを記憶する場合、８つの閾値電圧を必要とする。
【０００４】
メモリセルにデータを書き込む場合、メモリセルの閾値電圧が書き込むべきデータに対応した閾値電圧に達したかどうかをベリファイする。ベリファイ動作を行なう場合、メモリセルが接続されたビット線を所定の電位にプリチャージし、この状態において、ワード線にベリファイ用の電圧を供給する。メモリセルの閾値電圧が書き込みデータに対応した閾値電圧に達していない場合、メモリセルはオンする。このため、ビット線の電位はメモリセルを介して放電され、ローレベルとなる。一方、メモリセルの閾値電圧が書き込みデータに対応した閾値電圧に達している場合、メモリセルはオフ状態を保持する。このため、ビット線はハイレベルを保持する。このビット線の電位を検出することにより、メモリセルの閾値電圧がベリファイされる。ベリファイの結果、メモリセルの閾値電圧が書き込むべきデータに対応した閾値電圧に達していない場合、再度書き込み動作が繰り返される。
【０００５】
前述したように、多値データを記憶する不揮発性半導体記憶装置の場合、記憶するデータのビット数が多い場合、メモリセルに設定する閾値電圧の数が増加する。データの書き込みにおいて、上記ベリファイ動作は、各閾値電圧毎に実行する必要がある。このため、ベリファイ動作に長時間を要し、データの書き込み動作の高速化が困難であった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−１９５２８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、上記課題を解決するためになされたものであり、その目的とするところは、ベリファイ動作を高速化し、データの書き込み速度を向上可能な半導体記憶装置を提供しようとするものである。
【課題を解決するための手段】
【０００８】
本発明の半導体記憶装置の態様は、ワード線、及びビット線に接続され、ｎ値（ｎは３以上の自然数）のうちの１値を記憶する複数のメモリセルがに配置されて構成されたメモリセルアレイと、入力データに応じて前記ワード線、ビット線の電位を制御し、前記メモリセルにデータを書き込む制御回路とを具備し、前記制御回路は、第１の書き込み動作により、前記メモリセルの閾値電圧を第１の閾値電圧から第１の閾値電圧又は第２の閾値電圧（第１の閾値電圧＜第２の閾値電圧）とし、第２の書き込み動作により、前記メモリセルの閾値電圧が前記第１の閾値電圧である場合、第１の閾値電圧又は第３の閾値電圧（第１の閾値電圧＜第３の閾値電圧）とし、第２の閾値電圧である場合、第４の閾値電圧（第２の閾値電圧＜＝第４の閾値電圧）又は第５の閾値電圧（第４の閾値電圧＜第５の閾値電圧）とし、前記制御回路は、前記第２の書き込み動作において、プログラム及びベリファイ動作を繰り返し行ない、前記第３の閾値電圧に達したかどうかをベリファイするベリファイ動作の回数に最大値を設定し、前記ベリファイ動作の回数が前記最大値に達した場合、前記第３の閾値電圧に達したかどうかをベリファイするベリファイ動作をスキップすることを特徴とする。
【図面の簡単な説明】
【０００９】
【図１】図１（ａ）（ｂ）（ｃ）（ｄ）は、メモリセルのデータとメモリセルの閾値電圧の関係を示す図。
【図２】不揮発性半導体記憶装置の概略構成を示す図。
【図３】第１の実施形態に係り、図２に示すメモリセルアレイ及びビット線制御回路の構成を示す回路図。
【図４】図４（ａ）（ｂ）はメモリセル及び選択トランジスタを示す断面図。
【図５】メモリセルアレイの１つのＮＡＮＤセルを示す断面図。
【図６】図３に示すデータ記憶回路の一例を示す回路図。
【図７】ＮＡＮＤセルに対する書き込み順序を示す図。
【図８】第１ページのプログラム動作を示すブロックダイアグラム。
【図９】第２ページのプログラム動作を示すブロックダイアグラム。
【図１０】図１０（ａ）（ｂ）は、各データキャッシュとメモリセルのデータの関係を示す図。
【図１１】図１１（ａ）（ｂ）（ｃ）は、データキャッシュの設定手順を示す図。
【図１２】図１２（ａ）（ｂ）（ｃ）は、データキャッシュの設定手順を示す図。
【図１３】図１３（ａ）（ｂ）は、ベリファイ動作時におけるデータキャッシュを示す図。
【図１４】ベリファイ動作時におけるデータキャッシュを示す図。
【図１５】ベリファイ動作時におけるデータキャッシュを示す図。
【図１６】ベリファイ動作時におけるデータキャッシュを示す図。
【図１７】第１の実施形態の変形例を示すものであり、第２ページのプログラム動作を示すブロックダイアグラム。
【図１８】図１８（ａ）（ｂ）は、読み出し動作を示すブロックダイアグラム。
【図１９】第２の実施形態を示すものであり、図３を変形した回路図。
【図２０】図２０（ａ）（ｂ）（ｃ）は、メモリセルのデータとメモリセルの閾値電圧の関係を示す図。
【図２１】図２１（ａ）（ｂ）は、メモリセルのデータとメモリセルの閾値電圧の関係を示す図。
【図２２】図２２（ａ）（ｂ）は、第２の実施形態における書き込み順序の例を示す図。
【図２３】第２の実施形態に係る第３ページプログラムを示すブロックダイアグラム。
【図２４】図２３に続く第３ページプログラムを示すブロックダイアグラム。
【図２５】図２５（ａ）（ｂ）は、第３ページプログラムにおけるデータキャッシュの状態を示す図。
【図２６】第３ページプログラムにおけるデータキャッシュの状態を示す図。
【図２７】図２７（ａ）（ｂ）は、それぞれ第１ページ、第２ページの読み出し動作を示すブロックダイアグラム。
【図２８】第３ページの読み出し動作を示すブロックダイアグラム。
【図２９】第３の実施形態に係り、第３ページの書き込み動作を示すブロックダイアグラム。
【図３０】図２９に続く第３ページの書き込み動作を示すブロックダイアグラム。
【図３１】図３１（ａ）（ｂ）は、それぞれ第１ページ、第２ページの読み出し動作を示すブロックダイアグラム。
【図３２】フラグセルを複数配置した場合の例を示す図。
【図３３】図１（ａ）乃至（ｆ）は、第４の実施形態に係るメモリセルのデータとメモリセルの閾値電圧の関係を示す図。
【図３４】第４の実施形態に係る第１ページの書き込み動作を示すブロックダイアグラム。
【図３５】第４の実施形態に係る第２ページの書き込み動作を示すブロックダイアグラム。
【図３６】図３６（ａ）（ｂ）は、第４の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図３７】図３７（ａ）（ｂ）は、第４の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図３８】第４の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図３９】図３９（ａ）（ｂ）（ｃ）は、第５の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図４０】図４０は、第５の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図４１】図４１（ａ）（ｂ）は、第５の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図４２】図４２（ａ）（ｂ）は、第５の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図４３】図４３（ａ）（ｂ）（ｃ）は、第６の実施形態に係るメモリセルのデータとメモリセルの閾値電圧の関係を示す図。
【図４４】図４４（ａ）（ｂ）は、第６の実施形態に係るメモリセルのデータとメモリセルの閾値電圧の関係を示す図。
【図４５】第６の実施形態に係る第３ページの書き込み動作を示すブロックダイアグラム。
【図４６】第６の実施形態に係る第３ページの書き込み動作を示すブロックダイアグラム。
【図４７】図４７（ａ）（ｂ）は、第６の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図４８】図４８（ａ）（ｂ）は、第６の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図４９】図４９（ａ）（ｂ）は、第６の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図５０】図５０（ａ）（ｂ）は、第６の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図５１】図５１（ａ）（ｂ）は、第６の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図５２】第６の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【図５３】第７の実施形態に係るデータ記憶回路の構成を示す回路図。
【図５４】第７の実施形態に係る第３ページの書き込み動作を示すブロックダイアグラム。
【図５５】第７の実施形態に係る第３ページの書き込み動作を示すブロックダイアグラム。
【図５６】図５６（ａ）（ｂ）は、第７の実施形態に係る各データキャッシュとメモリセルのデータの関係を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について図面を参照して説明する。
【００１１】
（第１の実施形態）
図２は、不揮発性半導体記憶装置の概略構成を示すものであり、例えば４値（２ビット）を記憶するＮＡＮＤフラッシュメモリの構成を示している。
【００１２】
メモリセルアレイ１は複数のビット線と複数のワード線と共通ソース線を含み、例えばＥＥＰＲＯＭセルからなる電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ１には、ビット線を制御するためのビット制御回路２とワード線制御回路６が接続されている。
【００１３】
ビット線制御回路２は、後述するように複数のデータ記憶回路及びフラグ用データ記憶回路を含んでいる。このビット線制御回路２は、ビット線を介してメモリセルアレイ１中のメモリセルのデータを読み出したり、ビット線を介してメモリセルアレイ１中のメモリセルの状態を検出したり、ビット線を介してメモリセルアレイ１中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行なう。ビット線制御回路２には、カラムデコーダ３、データ入出力バッファ４が接続されている。ビット線制御回路２内のデータ記憶回路はカラムデコーダ３によって選択される。データ記憶回路に読み出されたメモリセルのデータは、前記データ入出力バッファ４を介してデータ入出力端子５から外部へ出力される。
【００１４】
また、外部からデータ入出力端子５に入力された書き込みデータは、データ入出力バッファ４を介して、カラムデコーダ３によって選択されたデータ記憶回路に入力される。
【００１５】
ワード線制御回路６は、メモリセルアレイ１に接続されている。このワード線制御回路６は、メモリセルアレイ１中のワード線を選択し、選択されたワード線に読み出し、書き込みあるいは消去に必要な電圧を印加する。
【００１６】
メモリセルアレイ１、ビット線制御回路２、カラムデコーダ３、データ入出力バッファ４、及びワード線制御回路６は、制御信号及び制御電圧発生回路７に接続され、この制御信号及び制御電圧発生回路７によって制御される。制御信号及び制御電圧発生回路７は、制御信号入力端子８に接続され、外部から制御信号入力端子８を介して入力される制御信号によって制御される。
【００１７】
前記ビット線制御回路２、カラムデコーダ３、ワード線制御回路６、制御信号及び制御電圧発生回路７は書き込み回路、及び読み出し回路を構成している。
【００１８】
図３は、図２に示すメモリセルアレイ１及びビット線制御回路２の構成を示している。メモリセルアレイ１には複数のＮＡＮＤセルが配置されている。１つのＮＡＮＤセルは、直列接続された例えば１６個のＥＥＰＲＯＭからなるメモリセルＭＣと、選択ゲートＳ１、Ｓ２とにより構成されている。第１の選択ゲートＳ１はビット線ＢＬ０に接続され、第２の選択ゲートＳ２はソース線ＳＲＣに接続されている。各ロウに配置されたメモリセルの制御ゲートはワード線ＷＬ１、ＷＬ２、ＷＬ３〜ＷＬ１６に共通接続されている。また、第１の選択ゲートＳ１はセレクト線ＳＧ１に共通接続され、第２の選択ゲートＳ２はセレクト線ＳＧ２に共通接続されている。
【００１９】
ビット線制御回路２は複数のデータ記憶回路１０及び第１、第２のフラグ用データ記憶回路１０ａ、１０ｂを有している。各データ記憶回路１０及び第１、第２のフラグ用データ記憶回路１０ａ、１０ｂには、一対のビット線（ＢＬ０、ＢＬ１）、（ＢＬ２、ＢＬ３）…（ＢＬｉ、ＢＬｉ＋１）、（ＢＬｆ１、ＢＬｆ２、ＢＬｆ３、ＢＬｆ４）が接続されている。
【００２０】
メモリセルアレイ１は、破線で示すように、複数のブロックを含んでいる。各ブロックは、複数のＮＡＮＤセルにより構成され、このブロック単位でデータが消去される。また、消去動作は、データ記憶回路１０、第１、第２のフラグ用データ記憶回路１０ａ、１０ｂに接続されている２本のビット線について同時に行なわれる。
【００２１】
また、ビット線の１つ置きに配置され、１つのワード線に接続された複数のメモリセル（破線で囲まれた範囲のメモリセル）は、１セクタを構成する。このセクタ毎にデータが書き込まれ、読み出される。１セクタには例えば２ページ分のデータが記憶される。また、各ワード線には、フラグを記憶するための複数の第１のフラグセルＦＣ１、及び複数の第２のフラグセルＦＣ２が接続されている。すなわち、この実施形態の場合、１セクタは１つの第１のフラグセルＦＣ１と、１つの第２のフラグセルＦＣ２を含んでいる。
【００２２】
尚、第１、第２のフラグセルＦＣ１、ＦＣ２は、１セクタにそれぞれ１つと限定されるものではなく、破線で示すように、１セクタに複数のフラグセルを接続してもよい。この場合、後述するように、複数のフラグセルに記憶されたデータの多数決により、フラグセルに記憶されたデータを決定すればよい。
【００２３】
リード動作、プログラムベリファイ動作及びプログラム動作時において、データ記憶回路１０に接続されている２本のビット線（ＢＬｉ、ＢＬｉ＋１）のうち外部より指定されたアドレス信号（ＹＡ１、ＹＡ２…ＹＡｉ、ＹＡＦｌａｇ）に応じて１本のビット線が選択される。さらに、外部アドレスに応じて、１本のワード線が選択され、１セクタ（２ページ分）が選択される。この２ページの切り替えはアドレスによって行われる。
【００２４】
図４（ａ）（ｂ）はメモリセル及び選択トランジスタの断面図を示している。図４（ａ）はメモリセルを示している。基板４１にはメモリセルのソース、ドレインとしてのｎ型拡散層４２が形成されている。基板４１の上にはゲート絶縁膜４３を介して浮遊ゲート（ＦＧ）４４が形成され、この浮遊ゲート４４の上には絶縁膜４５を介して制御ゲート（ＣＧ）４６が形成されている。図４（ｂ）は選択ゲートを示している。基板４１にはソース、ドレインとしてのｎ型拡散層４７が形成されている。基板４１の上にはゲート絶縁膜４８を介して制御ゲート４９が形成されている。
【００２５】
図５は、メモリセルアレイの１つのＮＡＮＤセルの断面を示している。この例において、１つのＮＡＮＤセルは、図４（ａ）に示す構成の１６個のメモリセルＭＣが直列接続されて構成されている。ＮＡＮＤセルのドレイン側、ソース側には、図４（ｂ）に示す構成の第１の選択ゲートＳ１及び第２の選択ゲートＳ２が設けられている。
【００２６】
図６は、図３に示すデータ記憶回路１０の一例を示す回路図である。第１、第２のフラグ用データ記憶回路１０ａ、１０ｂもデータ記憶回路１０と同様の構成とされている。
【００２７】
このデータ記憶回路１０は、プライマリデータキャッシュ（ＰＤＣ）、セコンダリデータキャッシュ（ＳＤＣ）、ダイナミックデータキャッシュ（ＤＤＣ）、テンポラリデータキャッシュ（ＴＤＣ）を有している。ＳＤＣ、ＰＤＣ、ＤＤＣは、書き込み時に入力データを保持し、読み出し時に読み出しデータを保持し、ベリファイ時に一時的にデータを保持し、多値データを記憶する際に内部データの操作に使用される。ＴＤＣは、データの読み出し時にビット線のデータを増幅し、一時的に保持するとともに、多値データを記憶する際に内部データの操作に使用される。
【００２８】
ＳＤＣは、ラッチ回路を構成するクロックドインバータ回路６１ａ、６１ｂ、及びトランジスタ６１ｃ、６１ｄにより構成されている。トランジスタ６１ｃはクロックドインバータ回路６１ａの入力端と、クロックドインバータ回路６１ｂの入力端の間に接続されている。このトランジスタ６１ｃのゲートには信号ＥＱ２が供給されている。トランジスタ６１ｄはクロックドインバータ回路６１ｂの入力端と接地間に接続されている。このトランジスタ６１ｄのゲートには信号ＰＲＳが供給されている。ＳＤＣのノードＮ２ａは、カラム選択トランジスタ６１ｅを介して入出力データ線ＩＯに接続され、ノードＮ２ｂは、カラム選択トランジスタ６１ｆを介して入出力データ線ＩＯｎに接続される。これらトランジスタ６１ｅ、６１ｆのゲートにはカラム選択信号ＣＳＬｉが供給されている。ＳＤＣのノードＮ２ａは、トランジスタ６１ｇ、６１ｈを介してＰＤＣのノードＮ１ａに接続されている。トランジスタ６１ｇのゲートには信号ＢＬＣ２が供給され、トランジスタ６１ｈのゲートには信号ＢＬＣ１が供給されている。
【００２９】
ＰＤＣは、クロックドインバータ回路６１ｉ、６１ｊ及びトランジスタ６１ｋにより構成されている。トランジスタ６１ｋは、クロックドインバータ回路６１ｉの入力端とクロックドインバータ回路６１ｊの入力端の相互間に接続されている。このトランジスタ６１ｋのゲートには信号ＥＱ１が供給されている。ＰＤＣのノードＮ１ｂはトランジスタ６１ｌのゲートに接続されている。このトランジスタ６１ｌの電流通路の一端はトランジスタ６１ｍを介して接地されている。このトランジスタ６１ｍのゲートには信号ＣＨＫ１が供給されている。また、トランジスタ６１ｌの電流通路の他端はトランスファーゲートを構成するトランジスタ６１ｎ、６１ｏの電流通路の一端に接続されている。このトランジスタ６１ｎのゲートには信号ＣＨＫ２ｎが供給されている。また、トランジスタ６１ｏのゲートは前記トランジスタ６１ｇと６１ｈの接続ノードに接続されている。トランジスタ６１ｎ、６１ｏの電流通路の他端には、信号ＣＯＭｉが供給されている。この信号ＣＯＭｉは全データ記憶回路１０に共通の信号であり、全データ記憶回路１０のベリファイが完了したかどうかを示す信号である。すなわち、後述するように、ベリファイが完了すると、ＰＤＣのノードＮ１ｂがローレベルとなる。この状態において、信号ＣＨＫ１、ＣＨＫ２をハイレベルとすると、ベリファイが完了している場合、信号ＣＯＭｉがハイレベルとなる。
【００３０】
さらに、前記ＴＤＣは、例えばＭＯＳキャパシタ６１ｐにより構成されている。このキャパシタ６１ｐは、前記トランジスタ６１ｇ、６１ｈの接続ノードＮ３と接地間に接続されている。また、接続ノードＮ３には、トランジスタ６１ｑを介してＤＤＣが接続されている。トランジスタ６１ｑのゲートには、信号ＲＥＧが供給されている。
【００３１】
ＤＤＣは、トランジスタ６１ｒ、６１ｓにより構成されている。トランジスタ６１ｒの電流通路の一端には信号ＶＲＥＧが供給され、他端は前記トランジスタ６１ｑの電流通路に接続されている。このトランジスタ６１ｒのゲートはトランジスタ６１ｓを介して前記ＰＤＣのノードＮ１ａに接続されている。このトランジスタ６１ｓのゲートには信号ＤＴＧが供給されている。
【００３２】
さらに、前記接続ノードＮ３にはトランジスタ６１ｔ、６１ｕの電流通路の一端が接続されている。トランジスタ６１ｕの電流通路の他端には信号ＶＰＲＥが供給され、ゲートにはＢＬＰＲＥが供給されている。前記トランジスタ６１ｔのゲートには信号ＢＬＣＬＡＭＰが供給されている。このトランジスタ６１ｔの電流通路の他端はトランジスタ６１ｖを介してビット線ＢＬｏの一端に接続され、トランジスタ６１ｗを介してビット線ＢＬｅの一端に接続されている。ビット線ＢＬｏの他端はトランジスタ６１ｘの電流通路の一端に接続されている。このトランジスタ６１ｘのゲートには信号ＢｌＡＳｏが供給されている。ビット線ＢＬｅの他端はトランジスタ６１ｙの電流通路の一端に接続されている。このトランジスタ６１ｙのゲートには信号ＢｌＡＳｅが供給されている。これらトランジスタ６１ｘ、６１ｙの電流通路の他端には、信号ＢＬＣＲＬが供給されている。トランジスタ６１ｘ、６１ｙは、信号ＢｌＡＳｏ、ＢｌＡＳｅに応じてトランジスタ６１ｖ、６１ｗと相補的にオンとされ、非選択のビット線に信号ＢＬＣＲＬの電位を供給する。
【００３３】
さらに、データ入力端子５ａは、複数のインバータ回路６２ａ、６２ｂ、６２ｃを介して前記入出力データ線ＩＯに接続され、さらに、インバータ回路６２ｄを介して前記入出力データ線ＩＯｎに接続される。
【００３４】
上記各信号及び電圧は、図２に示す制御信号及び制御電圧発生回路７により生成され、この制御信号及び制御電圧発生回路７の制御に基づき、以下の動作が制御される。
【００３５】
本メモリは、多値メモリであり、１セルに例えば２ビットのデータを記憶することができる。この２ビットの切り替えはアドレス（第１ページ、第２ページ）によって行なわれる。
【００３６】
（動作説明）
上記構成において、動作について説明する。
【００３７】
図１は、メモリセルのデータとメモリセルの閾値電圧の関係を示している。消去動作を行なうとメモリセルのデータは“０”となる。図１（ａ）に示すように、第１ページの書き込みを行なうと、メモリセルのデータはデータ“０”とデータ“２”になる。図１（ｂ）に示すように、第２ページの書き込み前に隣接セルに実際のデータの閾値電圧以下のデータが書き込まれる。すると、このセルに書き込まれたデータにより、データ“２”の閾値電圧の分布が大きくなる。この後、第２ページのデータが書き込まれると、メモリセルのデータは、図１（ｃ）に示すように、本来の閾値電圧を有するデータ“０”〜“３”となる。第１の実施形態では、メモリセルのデータは閾値電圧の低いほうから高い方へと、定義されている。
【００３８】
第１の実施形態は、図１（ｃ）に示す第２ページの書き込みにおいて、閾値電圧“ｂ’”のベリファイと、閾値電圧“ｃ’”のベリファイを、一度ビット線をプリチャージした後、ワード線電位を複数回変えることにより、一括して行なうことを特徴としている。
【００３９】
図７は、ＮＡＮＤセルに対する書き込み順序を示している。ブロック内において、ソース線に近いメモリセルからページごとに書き込み動作が行なわれる。図７は、説明の便宜上、ワード線を４本としている。
【００４０】
第１番目の書き込みは、メモリセル１の第１ページに１ビットのデータが書きこまれる。
【００４１】
第２番目の書き込みは、メモリセル１とワード方向に隣接したメモリセル２の第１ページに１ビットのデータが書きこまれる。
【００４２】
第３番目の書き込みは、メモリセル１とビット方向に隣接したメモリセル３の第１ページに１ビットのデータが書きこまれる。
【００４３】
第４番目の書き込みは、メモリセル１と対角に隣接したメモリセル４の第１ページに１ビットのデータが書きこまれる。
【００４４】
第５番目の書き込みは、メモリセル１の第２ページに１ビットのデータが書きこまれる。
【００４５】
第６番目の書き込みは、メモリセル１とワード方向に隣接したメモリセル２の第２ページに１ビットのデータが書きこまれる。
【００４６】
第７番目の書き込みは、メモリセル３とビット方向に隣接したメモリセル５の第１ページに１ビットのデータが書きこまれる。
【００４７】
第８番目の書き込みは、メモリセル３と対角に隣接したメモリセル６の第１ページに１ビットのデータが書きこまれる。
【００４８】
第９番目の書き込みは、メモリセル３の第２ページに１ビットのデータが書きこまれる。
【００４９】
第１０番目の書き込みは、メモリセル３とワード方向に隣接したメモリセル４の第２ページに１ビットのデータが書きこまれる。
【００５０】
第１１番目の書き込みは、メモリセル５とビット方向に隣接したメモリセル７の第１ページに１ビットのデータが書きこまれる。
【００５１】
第１２番目の書き込みは、メモリセル５と対角に隣接したメモリセル８の第１ページに１ビットのデータが書きこまれる。
【００５２】
第１３番目の書き込みは、メモリセル５の第２ページに１ビットのデータが書きこまれる。
【００５３】
第１４番目の書き込みは、メモリセル５とワード方向に隣接したメモリセル６の第２ページに１ビットのデータが書きこまれる。
【００５４】
第１５番目の書き込みは、メモリセル７の第２ページに１ビットのデータが書きこまれる。
【００５５】
第１６番目の書き込みは、メモリセル７とワード方向に隣接したメモリセル８の第２ページに１ビットのデータが書きこまれる。
【００５６】
（プログラム及びプログラムベリファイ）
（第１ページプログラム）
図８は、第１ページのプログラムのブロックダイアグラムを示している。プログラム動作は、先ずアドレスを指定し、図３に示す２ページ（１セクタ）が選択する。本メモリは、この２ページのうち、第１ページ、第２ページの順でしか、プログラム動作できない。したがって、先ず、アドレスにより第１ページを選択する。
【００５７】
このアドレス入力中に図６の６１ｄのトランジスタをオンすることで、全てのＳＤＣのＮ２ａのノードをＶｓｓにする。（Ｓ１１）
次に、データ入出力線ＩＯ、ＩＯｎを介して書き込みデータを、外部より入力し全てのデータ記憶回路１０内のＳＤＣ（図６に示す）に記憶する（Ｓ１２）。このとき、データを書き込む場合、外部よりデータ入力端子５ａにデータ“０”が入力される。このデータはインバータ回路６２ａ、６２ｂ、６２ｃ、６２ｄ、トランジスタ６１ｅ、６１ｆを介してＳＤＣに供給される。このため、ＳＤＣのＮ２ａのノードは、Ｖｄｄになる。また、書き込み非選択の場合、データ入力端子５ａにデータ“１”が入力される。このため、ＳＤＣのＮ２ａのノードは、Ｖｓｓになる。この後、書き込みコマンドが入力されると、全てのデータ記憶回路１０内のＳＤＣのデータがＰＤＣに転送される（Ｓ１３）。すなわち、信号ＢＬＣ１，ＢＬＣ２が所定の電圧、例えばＶｄｄ＋Ｖｔｈ（Ｖｄｄ：電源電圧（例えば３Ｖ又は１．８Ｖ、しかし、この電圧に限定されるものではない）、Ｖｔｈ：ＮチャネルＭＯＳトランジスタの閾値電圧）とされ、トランジスタ６１ｈ、６１ｇがオンとされる。すると、ノードＮ２ａのデータがトランジスタ６１ｇ、６１ｈを介してＰＤＣに転送される。このため、外部よりデータ“１”（書き込みを行なわない）が入力された場合、ＰＤＣのノードＮ１ａは、ローレベルになり、データ“０”（書き込みを行なう）が入力された場合、ＰＤＣのノードＮ１ａは、ハイレベルとなる。以後、ＰＤＣのデータはノードＮ１ａの電位、ＳＤＣのデータはノードＮ２ａの電位とする。
【００５８】
（データ反転動作）（Ｓ１４）
この後、ＶＰＲＥ＝Ｖｄｄ、信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとし、とし一旦Ｎ３をＶｄｄにプリチャージした後に、ＤＴＧ＝Ｖｄｄ＋Ｖｔｈ、としてＰＤＣのデータをＤＤＣに写す。次に、ＲＥＧ＝Ｖｄｄ、ＶＲＥＧ＝Ｖｓｓとし、ＤＤＣがハイレベルの場合、ノードＮ３はローレベル、ＤＤＣがローレベルの場合、ノードＮ３はハイレベルとなる。この後、一旦信号ＳＥＮ１、ＬＡＴ１をオフとし、信号ＥＱ１をＶｄｄとし、ノードＮ１ａとノードＮ１ｂを同電位とする。この後、信号ＢＬＣ１＝Ｖｄｄ＋Ｖｔｈとし、ＴＤＣのデータ（ノードＮ３の電位）をＰＤＣに移す。この結果、元々ＰＤＣにデータ“１”がラッチされていた場合、ＰＤＣのデータは“０”になる。また、ＰＤＣにデータ“０”がラッチされていた場合、ＰＤＣのデータは“１”になる。
【００５９】
書き込みコマンドが入力されるとプログラムをするための電圧Ｖｐｇｍ及びＶｐａｓｓの昇圧回路が動作する。これら電圧Ｖｐｇｍ及びＶｐａｓｓの電位は直ぐには立ち上がらない。上記データ反転動作は、この電位上昇に要する待ち時間の間に行なう。このため、書き込みスピードは遅くならない。
【００６０】
このように、入力データを反転するのは、メモリセル内に書かれている１ページのデータをページバッファに読み出し、外部に出力せずに他の１ページに書き込むページコピーを行なう場合、有効である。すなわち、ページコピーを行なう場合、先ず、読み出しを行なう。この結果、書き込みを行った場合（データ入力端子５ａにデータ“０”を入力した場合）、ＳＤＣはデータ“１”をラッチし、書き込みを行なわなかった場合（データ入力端子５ａにデータ“１”を入力した場合）、ＳＤＣはデータ“０”をラッチする。前述したように、ＳＤＣは入力データに対して反転されたデータをラッチしている。このため、ページコピーのために読み出されたデータと書き込み時にＳＤＣにラッチされたデータとが一致する。このようにＳＤＣにおいて、次に書くデータを一致させておくと、読み出したデータの一部のみデータを外部より入力し書き換えることが容易にできる。したがって、ページコピーをしない場合においても、常に、外部より入力されたデータをページバッファ内でデータ反転するようにする。
【００６１】
上記データ反転動作は、通常のプログラムコマンドを入れることにより行なう。この後、ＰＤＣのデータをＤＤＣにコピーする。
【００６２】
尚、第１ページのプログラムにおいて、フラグセルにはデータが書き込まれない。このため、第１、第２のフラグ用データ記憶回路１０ａ，１０ｂ内のＰＤＣはデータ“１”をラッチしている。
【００６３】
さらに、プログラマブルカウンタ（ＰＣ）の値が“０”に初期設定される。このカウンタは、図２に示す例えば制御信号及び制御電圧発生回路７に設けられている。しかし、制御信号及び制御電圧発生回路７に限定されるものではない。
【００６４】
（プログラム動作）（Ｓ１５）
先ず、図６示す信号ＢＬＣ１、ＢＬＣＬＡＭＰ、ＢＬＳｏ又はＢＬＳｅの電位をＶｄｄ＋Ｖｔｈとする。すると、トランジスタ６１ｈ、６１ｔ、６１ｖ又は６１ｗがオンとなり、ＰＤＣに保持されたデータがビット線に供給される。ＰＤＣにデータ“１”（書き込みを行なわない）が記憶されている時、ビット線がＶｄｄになり、データ“０”（書き込みを行なう）時、ビット線がＶｓｓ（接地電位）になる。また、選択されたワード線に接続され、非選択ページの（ビット線が非選択である）セルは書き込みが行なわれてはならない。このため、これらのセルに接続されているビット線にもデータ“１”と同じようにＶｄｄを供給する。ここで、選択されているブロックのセレクト線ＳＧ１にＶｄｄ、選択ワード線に電位ＶＰＧＭ（２０Ｖ）、非選択ワード線に電位Ｖｐａｓｓ（１０Ｖ）を印加する。すると、ビット線がＶｓｓになっている場合、セルのチャネルがＶｓｓ、ワード線がＶＰＧＭとなるので書き込みが行なわれる。一方、ビット線がＶｄｄになっている場合、セルのチャネルがＶｓｓではなく、ＶＰＧＭを上げることにより、カップリングでＶＰＧＭ／２となる。このため、このセルはプログラムされない。
【００６５】
多値メモリでは、閾値の分布を狭めるため、図１に示すように、本来のベリファイ電位“ｖ’”と、これより低いベリファイ電位“ｖ＊’”を設定し、このベリファイ電位“ｖ＊’”を超えたセルに対応するビット線に中間電位（例えば１Ｖ）を供給することにより、書き込みスピードを遅くしている。したがって、ここで、信号ＶＲＥＧをＶｄｄ、信号ＲＥＧを中間電位（例えば１Ｖ＋Ｖｔｈ）にすると、ビット線がＶｓｓの場合で、ＤＤＣがハイレベルの場合、ビット線は中間電位になる。また、ＤＤＣがローレベルの場合、ビット線はＶｓｓのままとなり、ビット線がＶｄｄの場合、Ｖｄｄのままになる。
【００６６】
第１ページの書き込みにおいて、入力データが“０”の場合、図１に示すように、メモリセルのデータを“２”にする。入力データが“１”の場合、メモリセルのデータは“０”のままである。
【００６７】
また、プログラム動作に伴い、カウンタ（ＰＣ）がカウントアップされる（ＰＣ＝ＰＣ＋１）。
【００６８】
（第１ページベリファイ）（Ｓ１６）
第１ページでは、図１（ａ）に示すように、本来のベリファイ電位“ｖ’”まで書き込む。したがって、ベリファイ動作の第１ステップでは、ワード線に本来のベリファイ電位“ｖ’”より低い電位“ｖ＊’”を供給してベリファイし、第２ステップにおいて、ワード線の電位を“ｖ’”に上げてベリファイする。以後“＊”は本来の値より低い電位を表す。
【００６９】
先ず、選択されているブロック内の非選択ワード線及びセレクト線ＳＧ１に読み出し時の電位Ｖｒｅａｄを供給し、図６に示すデータ記憶回路１０の信号ＢＬＰＲＥに例えばＶｄｄ＋Ｖｔｈ、信号ＢＬＣＬＡＭＰに所定の電圧、例えば１Ｖ＋Ｖｔｈを供給し、信号ＶＰＲＥをＶｄｄとし、ビット線を１Ｖにプリチャージする。
【００７０】
次に、セルのソース側のセレクト線ＳＧ２をハイレベルにする。閾値電圧が電位“ｖ＊’”より高いセルはオフする。このため、ビット線はハイレベルのままである。また、閾値電圧が電位“ｖ＊’”より低いセルはオンする。このため、ビット線はＶｓｓとなる。
【００７１】
次に、信号ＢＬＰＲＥに所定の電圧、例えばＶｄｄ＋Ｖｔｈを供給し、ＶＰＲＥ＝Ｖｄｄとすることにより、ＴＤＣのノードＮ３をＶｄｄにプリチャージした後、信号ＢＬＣＬＡＭＰを所定の電圧、例えば０．９Ｖ＋Ｖｔｈとしてトランジスタ６１ｔをオンさせる。ＴＤＣのノードＮ３は、ビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。
【００７２】
ここで、書き込みを行なう場合、図６のＤＤＣにローレベルが記憶され、書き込みを行なわない場合、ＤＤＣにハイレベルが記憶されている。このため、信号ＶＲＥＧをＶｄｄとし、信号ＲＥＧをハイレベルにすると、書き込みを行なわない場合のみＴＤＣのノードＮ３が強制的にハイレベルとなる。この動作の後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣの電位をＰＤＣに転送する。ＰＤＣにハイレベル信号がラッチされる場合は、セルに書き込みを行なわない場合と、セルにデータ“２”を書き込んでおり、セルの閾値電圧がベリファイ電位“ｖ＊’”に達した場合だけである。また、ＰＤＣにローレベル信号がラッチされる場合は、セルの閾値電圧が“ｖ＊’”に達しない場合である。
【００７３】
次に、ワード線の電位を“ｖ＊’”から“ｖ’”に上げると、閾値電圧が“ｖ’”より低いセルはオンし、ビット線はＶｓｓとなる。
【００７４】
次に、信号ＢＬＰＲＥに所定の電圧、例えばＶｄｄ＋Ｖｔｈを供給し、ＶＰＲＥ＝Ｖｄｄとすることにより、ＴＤＣのノードＮ３をＶｄｄにプリチャージした後、信号ＢＬＣＬＡＭＰを所定の電圧、例えば０．９Ｖ＋Ｖｔｈとしてトランジスタ６１ｔをさせる。ＴＤＣのノードＮ３は、ビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。
【００７５】
ここで、書き込みを行なう場合、図６のＤＤＣにローレベルが記憶され、書き込みを行なわない場合、ＤＤＣにハイレベルが記憶されている。このため、信号ＶＲＥＧをＶｄｄとし、信号ＲＥＧをハイレベルにすると、書き込みを行なわない場合のみＴＤＣのノードＮ３が強制的にハイレベルとなる。この動作の後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣの電位をＰＤＣに転送する。ＰＤＣにハイレベル信号がラッチされる場合は、セルに書き込みを行なわない場合と、セルにデータ“２”を書き込んでおり、セルの閾値電圧がベリファイ電位“ｖ’”に達した場合だけである。また、ＰＤＣにローレベル信号がラッチされる場合は、セルの閾値電圧が“ｖ’”に達しない場合である。
【００７６】
この結果、ＤＤＣがハイレベルとなるのは、セルの閾値電圧が“ｖ＊’”を超えている場合と、書き込み非選択の場合であり、ＤＤＣがローレベルとなるのは、書き込みを行っている場合で、セルの閾値電圧が“ｖ＊’”以下の場合である。ＰＤＣがハイレベルとなるのは、セルの閾値電圧が“ｖ’”を超えている場合と、書き込み非選択の場合であり、ＰＤＣがローレベルとなるのは、書き込みを行っている場合で、セルの閾値電圧が“ｖ’”以下の場合である。
【００７７】
ＰＤＣがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路１０のデータがハイレベルになるまでこのプログラム動作とベリファイ動作を繰り返す（Ｓ１５−Ｓ１８）。このとき、ＰＤＣがローレベルでＤＤＣがハイレベルのセル、すなわち、閾値電圧が“ｖ＊’”以上で“ｖ’”の場合、ビット線に中間電位を供給し、書き込みスピードを抑える。
【００７８】
（隣接セルプログラム）
図７に示すように、メモリセル１の第１ページに１ビットのデータの書き込んだ後、メモリセル１とワード方向に隣接したメモリセル２の第１ページの書き込み、メモリセル１とビット方向に隣接したメモリセル３の第１ページの書き込み、メモリセル１と対角に隣接したメモリセル４の第１ページの書き込みが順次行なわれる。これらの書き込み動作が行なわれると、書き込みデータによっては、隣接セルの浮遊ゲート間容量（ＦＧ−ＦＧ間容量）によって、メモリセル１の閾値電圧が上がる。このため、メモリセル１のデータ“０”とデータ“２”の閾値電圧分布は図１（ｂ）のように電位が高いほうに広がる。
【００７９】
この後、第５の書き込みにおいて、メモリセル１の第２ページに１ビットのデータを書き込む。
【００８０】
（第２ページプログラム）
第１の実施形態において、第２ページのプログラム及びベリファイ動作が高速化されている。すなわち、メモリセルのデータ“２”及び“３”のベリファイ動作を同時に行なうことにより、高速動作を可能としている。以下に、その動作を説明する。
【００８１】
図９は、第２ページのプログラム（書き込み）動作のブロックダイアグラムを示している。第２ページプログラム動作も、先ずアドレスに応じて、図３に示す２ページが選択される。これと同時にページバッファをリセットする（Ｓ２１）。
【００８２】
次に、書き込みデータを外部より入力し、全てのデータ記憶回路内のＳＤＣに記憶する（Ｓ２２）。外部よりデータ“１”（書き込みを行なわない）が入力されると、データ記憶回路１０のＳＤＣのノードＮ２ａは、ローレベルになり、外部よりデータ“０”（書き込みを行なう）が入力されるとハイレベルとなる。
【００８３】
（第１のフラグセルデータロード）（Ｓ２３）
書き込みコマンドが入力されると、第２ページのプログラムであるので、第１のフラグセルＦＣ１にデータを書き込むため、第１のフラグセル用データ記憶回路１０ａ内のＳＤＣはハイレベルとなる。前述したように、フラグセルは、信頼性を高めるために、複数セル用意することも可能である。第２ページにおいて、第１のフラグセルＦＣ１に対応するＳＤＣはハイレベルとなる。これにより第１のフラグセルＦＣ１は、データ“０”から“１”へと書き変えられる。
【００８４】
第２のフラグセルＦＣ２に対応するＳＤＣをローレベルにする。これにより第２のフラグセルはデータ“０”の書き込みとなるが、後の操作によりデータ“２”への書き込みとなる。
【００８５】
第２ページのプログラムでは、図１（ｃ）に示すように、メモリセルのデータが“０”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータを“０”のままとし、外部から入力されるデータが“０”の場合、メモリセルのデータを“１”にする。
【００８６】
また、メモリセルのデータが“２”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータを“２”のままとする。しかし、第１ページの書き込みにおいて、メモリセルの閾値電圧は、本来のデータ“２”の閾値電圧より低い“ｖ’”までしか上昇していない。このため、データ“２”本来の閾値電圧“ｂ’”まで、これらのセルに対し書き込みを行なう。
【００８７】
また、メモリセルのデータが“２”の場合で、外部から入力されるデータが“０”の場合、メモリセルのデータを“３”にする。
【００８８】
（内部データリード）（Ｓ２４）
先ず、セルへの書き込みの前に、第１ページのメモリセルのデータが“０”か“２”であるかを判断するため、内部リード動作を行なう。内部データリードは、リード動作と同様である。通常メモリセルのデータが“０”か“２”かの判断時において、選択ワード線には、リード時の電位“ｂ”を与える。しかし、第１ページのプログラム動作では、通常のベリファイ電位“ｖ’”より低い“ｖ＊’”までしか書き込んでいないため、“ｂ”の電位より低い場合もある。したがって、内部データロードでは、ワード線に“ａ”の電位を供給して読み出し動作をする。
【００８９】
すなわち、選択されているブロック内の非選択ワード線及びセレクト線ＳＧ１に電位Ｖｒｅａｄを印加する。これとともに、データ記憶回路１０の信号ＶＰＲＥをＶｄｄとし、信号ＢＬＰＲＥ、ＢＬＣＬＡＭＰを所定の電圧、例えば１Ｖ＋Ｖｔｈとして、ビット線をＶｄｄにプリチャージした後、セルのソース側のセレクト線ＳＧ２をハイレベルとする。閾値電圧が電位“ａ”より高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位“ａ”より低いセルはオンするため、ビット線は放電され、接地電位Ｖｓｓとなる。
【００９０】
次に、データ記憶回路１０の信号ＶＰＲＥをＶｄｄ、信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとし、ＴＤＣのノードＮ３をＶｄｄにプリチャージする。この後、信号ＢＬＣＬＡＭＰを０．９Ｖ＋Ｖｔｈとする。ＴＤＣのノードＮ３はビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。この後、ＴＤＣの電位をＰＤＣに転送する。この結果、メモリセルのデータが“２”である場合、ＰＤＣにハイレベル信号がラッチされ、メモリセルのデータが“０”である場合、ＰＤＣにローレベル信号がラッチされる。図１０（ａ）は、データロード、内部リード後のＳＤＣ、ＰＤＣとメモリセルのデータの関係を示している。
【００９１】
（データキャッシュの設定）（Ｓ２５）
この後、図１１、図１２に示すデータキャッシュ設定手順に従い各データキャッシュに記憶されたデータが操作される。すなわち、図１１（ａ）に示すように、外部よりデータを入力し、内部リードにより読み出したデータを各データキャッシュにラッチさせた状態において、図１１（ｂ）に示すように、ＳＤＣのデータがＰＤＣに転送され、ＰＤＣのデータがＤＤＣに転送される。次に、図１１（ｃ）に示すように、ＤＤＣのデータが反転されてＳＤＣに転送される。この後、ＰＤＣのデータがＤＤＣに転送される。次に、図１２（ａ）に示すように、ＤＤＣのデータが反転されてＰＤＣに転送される。この後、ＰＤＣのデータがＤＤＣに転送される。次に、図１２（ｂ）に示すように、第２のフラグセル用データ記憶回路１０ｂに第２のフラグセルＦＣ２用のデータがロードされ、ＳＤＣにラッチされる。次いで、図１２（ｃ）に示すように、ＳＤＣとＤＤＣのデータが合成され、この合成されたデータが反転されて、ＰＤＣに転送される。このＰＤＣのデータはＤＤＣに転送される。
【００９２】
このような操作をすることにより、各データキャッシュに記憶されるデータは図１０（ｂ）、図１２（ｃ）に示すようになる。
【００９３】
すなわち、メモリセルのデータを“０”にする場合（第１ページにおいてデータ“１”、第２ページにおいてデータ“１”）、ＰＤＣ、ＤＤＣ、ＳＤＣは全てハイレベルに設定される。
【００９４】
メモリセルのデータを“１”にする場合（第１ページにおいてデータ“１”、第２ページにおいてデータ“０”）、ＰＤＣはローレベル、ＤＤＣはローレベル、ＳＤＣはハイレベルに設定される。
【００９５】
メモリセルのデータを“２”する場合（第１ページにおいてデータ“０”、第２ページにおいてデータ“１”）、ＰＤＣはローレベル、ＤＤＣはハイレベル、ＳＤＣはローレベルに設定される。
【００９６】
メモリセルのデータを“３”する場合（第１ページにおいてデータ“０”、第２ページにおいてデータ“０”）、ＰＤＣ、ＤＤＣ、ＳＤＣは全てローレベルに設定される。
【００９７】
（第２のフラグセルデータロード）（Ｓ２５）
前述したように、データキャッシュの設定途中において、第２のフラグセル用データ記憶回路１０ｂ内のＳＤＣがローレベルに設定される。これにより第２のフラグセルＦＣ２のデータは“０”から“２”となる。第２ページの書き込みは、図１（ｃ）に示すように、メモリセルのデータ“０”から“１”への書き込みと、メモリセルのデータ“２”から“３”への書きこみであるが、第２のフラグセルに関しては、メモリセルのデータを“０”からメモリセルのデータを“２”にプログラムする。このため、図１（ｄ）に示すように、第２のフラグセルのデータ“２”の閾値電圧の分布は広がる可能性がある。しかし、第２のフラグセルＦＣ２のリード動作は、必ず“ｂ’”より低い“ｂ”のレベルをワード線に供給して行なうため問題はない。
【００９８】
さらに、例えば各データキャッシュの設定の途中において、カウンタ（ＰＣ）が“０”に初期設定される（Ｓ２５）。
【００９９】
この後、第１のフラグセルＦＣ１にデータが書かれたか否かが判別される（Ｓ２６）。第１のフラグセルＦＣ１のデータは、内部リード（Ｓ２４）において読み出されている。第１のフラグセルＦＣ１にデータが書き込まれていない場合、プログラムへ移行される（Ｓ２７）。しかし、第１のフラグセルＦＣ１にデータが書き込まれている場合、図１（ｃ）の分布になっているため、内部リードを“ｂ”のレベルで再度行なう（Ｓ２６−Ｓ２３）。
【０１００】
（プログラム）（Ｓ２７）
第１のフラグセルＦＣ１にデータが書き込まれていない場合、メモリセルにデータが書き込まれる。例えばカウンタ（ＰＣ）をカウントアップした後、先ず、信号ＢＬＣ１をＶｓｇとすると、ＰＤＣがデータ“０”の場合、ビット線がＶｓｓとなり、データ“１”の場合、ビット線はＶｄｄになる。次に、信号ＢＬＣ１＝Ｖｓｓとした後、信号ＶＲＥＧ＝Ｖｄｄ、信号ＲＥＧ＝中間電位＋Ｖｔｈ（１Ｖ＋Ｖｔｈ）とする。すると、ＤＤＣがデータ“１”の場合、ビット線がＶｄｄとなり、ＤＤＣがデータ“０”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“１”，“３”を書き込んでいるときのみ、ビット線はＶｓｓとなる。メモリセルにデータ“２”を書き込んでいる場合、ビット線は中間電位（１Ｖ）となり、メモリセルのデータが“０”の場合（書き込みしない場合）、ビット線はＶｄｄになる。ここで、選択ワード線をＶｐｇｍ、非選択ワード線をＶｐａｓｓとすると、ビット線がＶｄｄの場合、書き込みが行なわれない。また、ビット線がＶｓｓの場合、書き込みが起こり、ビット線が中間電位（１Ｖ）の場合、少しだけ書き込まれる。したがって、データ“２”を書き込んでいるメモリセルは、あまり書き込まれない可能性がある。しかし、これは、データ“２”とデータ“３”のベリファイを一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。
【０１０１】
この後、メモリセルにデータ“１”が書き込まれており（Ｓ２８）、さらに、カウンタ（ＰＣ）の値が予め定められたベリファイ電圧“ａ’”によるベリファイ回数の最大値より小さい場合（Ｓ２９）、ベリファイ電圧“ａ＊’”と“ａ’”を順次設定して書き込みベリファイが行なわれる（Ｓ３０）。
【０１０２】
尚、以下に説明するベリファイ動作は、ベリファイ電圧を“ａ＊’”、“ａ’”、“ｂ’”、“ｂ’”、“ｃ’”の順に設定して実行される。このとき、不要なベリファイ動作をスキップしてプログラム及びベリファイするため、カウンタ（ＰＣ）の値が予め定められた値と比較される（Ｓ２９，Ｓ３１，Ｓ３２、Ｓ３４、Ｓ３７）。例えばベリファイ“ａ＊’、ａ’”のベリファイ回数が最大ループ回数に達した場合、ベリファイ“ａ＊’”、“ａ’”をスキップする。また、例えばベリファイ“ｂ’”のベリファイ開始回数に達していない場合、ベリファイ“ｂ’”をスキップして、プログラムが実行される。このスキップの制御に必要な各値は例えば次に示すように設定されている。
【０１０３】
ベリファイ“ａ’”の最大ループ回数＝１０
ベリファイ“ｂ’”によるベリファイ開始回数＝４
ベリファイ“ｃ’”によるベリファイ開始回数＝８
最大プログラムロープ回数＝２０
（ベリファイ“ａ＊’”、“ａ’”）（Ｓ３０）
このベリファイにおいて、信号ＶＰＲＥをハイレベル、信号ＢＬＣＬＡＭＰを所定電位に設定すると、ビット線がプリチャージされる。
【０１０４】
図１３（ａ）は、ベリファイ電圧“ａ＊’”によるベリファイ後、各データキャッシュに設定されたデータを示している。
【０１０５】
次に、ワード線の電位をベリファイ電位“ａ＊’”に設定し、ビット線を放電する。信号ＶＰＲＥ＝Ｖｄｄ、信号ＢＬＰＲＥ＝ＶｓｇとしてＴＤＣをＶｄｄに充電した後、信号ＢＬＣＬＡＭＰに所定の電圧を与える。ビット線がＶｓｓの場合、ＴＤＣはＶｓｓ（ローレベル）になり、ビット線にプリチャージ電位が残っている場合、ＴＤＣはＶｄｄ（ハイレベル）となる。ここで、信号ＢＬＣ２をＶｔｈ＋０．５Ｖとすると、ＳＤＣが“０”の場合（メモリセルにデータ“２”、“３”を書き込んでいる場合）、ＴＤＣはＶｓｓとなる。したがって、ＴＤＣがＶｄｄとなるのは、メモリセルにデータ“１”が書き込まれていてベリファイ電位“ａ＊’”に達した時である。メモリセルにデータ“１”を書き込んでいない場合、ビット線はプリチャージされていないため、ＴＤＣはローレベルとなっている。また、メモリセルにデータ“１”を書き込んでいてベリファイ電位“ａ＊’”に達しない場合もＴＤＣはＶｓｓとなる。
【０１０６】
ここで、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧ＝ハイレベルとすると、ＤＤＣのデータが“１”の場合、強制的にＴＤＣがハイレベルになる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“１”を書き込んでいてベリファイ電位“ａ＊’”に達した時と、ＤＤＣのデータが“１”の場合、つまりメモリセルへデータ“２”を書き込んでいた場合である。次いで、信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーする。この後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０１０７】
図１３（ｂ）において、ＰＤＣがデータ“１”となるのは、メモリセルにデータ“１”を書き込んでいて、ベリファイ電位“ａ＊’”を超えている場合と、メモリセルにデータ“２”を書き込んでいる場合である。
【０１０８】
次に、ワード線の電位を少し上げてベリファイ電位“ａ’”とし、ビット線を放電する。信号ＶＰＲＥ＝Ｖｄｄ、信号ＢＬＰＲＥ＝ＶｓｇとしてＴＤＣを再びＶｄｄに充電した後、信号ＢＬＣＬＡＭＰに所定の電圧を与える。ビット線がＶｓｓの場合、ＴＤＣはＶｓｓとなり、ビット線にプリチャージ電位が残っている場合、ＴＤＣはＶｄｄになる。ここで、信号ＢＬＣ２をＶｔｈ＋０．５Ｖとすると、ＳＤＣが“０”の場合（メモリセルのデータ“２”、“３”に書き込んでいる場合）、ＴＤＣはＶｓｓになる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“１”が書き込まれていてベリファイ電位“ａ’”に達した時である。メモリセルにデータ“１”を書き込んでいない場合と、メモリセルにデータ“１”を書き込んでいてベリファイ電位“ａ’”に達しない場合もＴＤＣはＶｓｓとなる。
【０１０９】
ここで、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧ＝ハイレベルとすると、ＤＤＣのデータが“１”の場合、すなわち、メモリセルにデータを書き込んでいない場合、ＴＤＣは強制的にハイレベルとされる。したがって、ＴＤＣがＶｄｄになるのは、書き込み非選択の場合と、メモリセルにデータ“１”を書き込んでいてベリファイ電位“ａ’”に達した場合である。
【０１１０】
次いで、信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後に、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ（図１４）。
【０１１１】
メモリセルにデータ“１”を書き込んでいるセルにおいて、閾値電圧がベリファイ電位“ａ＊’”より高くなると、ＤＤＣのデータが“１”（ハイレベル）となる。また、メモリセルにデータ“１”を書き込んでいるセルにおいて、ベリファイ電位“ａ’”を用いた書き込みが全て終了すると、ＰＤＣのデータは“１”（ハイレベル）になる。
【０１１２】
この後、カウンタ（ＰＣ）の値が予め定められたベリファイ電圧“ｂ’”によるベリファイ開始回数より大きく（Ｓ３１）、予め定められたベリファイ電圧“ｃ’”によるベリファイ開始回数より小さい場合（Ｓ３２）、ベリファイ電位“ｂ”を設定して書き込みベリファイが行なわれる（Ｓ３３）。
【０１１３】
（ベリファイ“ｂ’”）（Ｓ３３）
ベリファイ電位“ｂ”を用いたベリファイ（図１５）。メモリセルに対するデータ“２”の書き込みが、データ“３”の書き込みより先に終わるため、先ず、ベリファイ電位“ｂ”のみのベリファイを行なう。信号ＶＰＲＥ＝Ｖｄｄ、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位“ｂ’”を供給しビット線を放電する。ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位とする。すると、ＴＤＣがハイレベルになるのは、セルの閾値電圧が、ベリファイ電位“ｂ’”以上にある場合である。ここで、信号ＢＬＣ１＝Ｖｔｈ＋０．５Ｖとすると、ＰＤＣが“０”の場合（メモリセルにデータ“３”を書き込んでいる場合と、メモリセルにデータ“１”を書き込んでいる場合で、ベリファイ電位“ａ＊’”以下の場合）、ＴＤＣはＶｓｓになる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“２”が書き込まれていてベリファイ電位“ｂ’”に達した時である。次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“２”を書き込んでいてベリファイ電位“ｂ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０１１４】
この後、カウンタ（ＰＣ）の値がベリファイ電圧“ｃ’”によるベリファイ開始回数より大きい場合（Ｓ３４）、ベリファイ電位“ｂ”、“ｃ”を用いた同時ベリファイが行なわれる（Ｓ３４、Ｓ３５）。
【０１１５】
（ベリファイ電位“ｂ”“ｃ”同時ベリファイ）（図１６）。
【０１１６】
プログラム及びベリファイファイを何回か繰り返していると、メモリセルのデータ“３”に書き込みを行っているセルも書き込みが終了するため、前記ベリファイ電位“ｂ”を用いたベリファイの替わり、ベリファイ電位“ｂ”“ｃ”同時ベリファイを行なう。先ず、信号ＢＬＰＲＥ＝ハイレベル、信号ＢＬＣＬＡＭＰを所定電位に設定し、ビット線をプリチャージする。
【０１１７】
次に、ワード線にベリファイ電位“ｂ’”を供給しビット線を放電する。ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。
【０１１８】
この後、ＴＤＣをＶｄｄに充電した後、ＢＬＣＬＡＭＰに所定の電位を供給する。すると、ＴＤＣがハイレベルになるのは、閾値電圧がベリファイ電位“ｂ’”以上の場合である。ここで、信号ＢＬＣ１＝Ｖｔｈ＋０．５Ｖとすると、ＰＤＣが“０”の場合（メモリセルのデータ“３”に書き込んでいる場合と、メモリセルにデータ“１”を書き込んでいる場合で、ベリファイ電位“ａ＊’”以下の場合）、ＴＤＣはＶｓｓになる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルがデータ“２”に書き込まれていて、ベリファイ電位“ｂ’”に達した時である。次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“２”を書き込んでいてベリファイ電位“ｂ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０１１９】
次に、ワード線にベリファイ電位“ｃ’”を供給しビット線を放電する。ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。
【０１２０】
この後、ＴＤＣをＶｄｄに充電した後、ＢＬＣＬＡＭＰに所定の電位を供給する。ＴＤＣがＶｄｄになるのは、メモリセルのデータが“３”に書き込まれていてベリファイ電位“ｃ’”に達した時である。次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“２”を書き込んでいてベリファイ電位“ｃ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０１２１】
このようにして、全てのＰＤＣのデータが“１”になるまで、プログラムとベリファイ動作を繰り返す（Ｓ３６，Ｓ３７）。しかし、書き込み動作において、ＤＤＣのデータが“１”の場合、つまり、メモリセルにデータ“２”を書き込んでいる場合と、メモリセルにデータ“１”を書き込んでいてベリファイ電位“ａ＊’”を超えている場合、ビット線を中間電位にして書き込み動作をする。
【０１２２】
また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Ｖｐｇｍを少しずつ上昇させる。このプログラム電圧Ｖｐｇｍの増分ΔＶｐｇｍは、第１ページの書き込み動作と、第２の書き込み動作で相違されており、例えば第１ページの書き込み動作における増分ΔＶｐｇｍは、第２の書き込み動作における増分ΔＶｐｇｍより大きく設定されている。
【０１２３】
図９のアルゴリズムでは、プログラムとベリファイ“ａ＊，ａ’”を数回繰り返した後に、プログラムとベリファイ“ａ＊’，ａ’”とプログラムベリファイ“ｂ’”を数回繰り返し、プログラムとベリファイ“ａ＊’，ａ’”とプログラムベリファイ“ｂ’，ｃ’”を数回繰り返す。この途中でメモリセルへのデータ“１”の書き込みは、早く終了する。このため、データ“１”を書き込むべきセルが無くなった場合、プログラムベリファイ“ａ＊’，ａ’”をスキップし、プログラムとプログラムベリファイ“ｂ’”、又はプログラムとプログラムベリファイ“ｂ’，ｃ’”を繰り返すようになる。プログラムとベリファイ“ａ＊’，ａ’”をスキップする場合、ＳＤＣは使用しなくなる。このため、次のプログラムデータを入力することができる。しかし、稀に、メモリセルにデータ“１”がなかなか書けないセルもある。したがって、プログラムベリファイ“ａ＊，ａ’”の回数を制限している（Ｓ２９）。
【０１２４】
上記第１の実施形態において、初めに第１ページ（ロアーページ）のデータをメモリセルに書き込み、この後、第２ページ（アッパーページ）のデータをメモリセルに書き込むとき、第１ページのデータを読み出し、３つのレベルの閾値電圧を書き込んでいた。しかし、第１ページのデータと第２ページのデータを同時にメモリセルに書き込むことも可能である。
【０１２５】
図１７は、第１の実施形態の変形例を示すものであり、図９と同一部分には同一符号を付している。図１７に示すように、先ず、データ記憶回路をリセットし、カウンタ（ＰＣ）を初期設定する（Ｓ５１）。この後、第１ページのデータをＳＤＣにロードし（Ｓ５２）、次いで、第１ページのデータをＳＤＣからＰＤＣに転送する（Ｓ５３）。次に、第２ページのデータをＳＤＣにロードする（Ｓ５４）。この後、各データキャッシュを図１０（ｂ）に示すように設定し（Ｓ５５）、このデータキャッシュのデータに従ってプログラムを実行する（Ｓ５６）。
【０１２６】
このような方法によれば、第１ページのデータと第２ページのデータを同時にメモリセルに書き込んでいるため、第１ページのみの書き込み動作、及び内部データリードにより第１ページのデータを読み出す必要がない。したがって、高速な書き込みが可能である。
【０１２７】
（第１ページリード）
図１８（ａ）は、第１ページリードのダイアグラムを示している。先ず、アドレスを指定し、図３に示す２ページを選択する。図１（ｂ）（ｃ）に示すように、第２ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位を“ｂ”として読み出し動作を行ない第２のフラグセルのデータが“０”か“１”であるかを判別する（Ｓ７１、Ｓ７２）。この判別において、フラグセルが複数セルある場合は、これらの多数決により、“０”か“１”を判断する。
【０１２８】
第２のフラグセルから読み出されたデータが“０”（メモリセルのデータが“２”）の場合、第２ページの書き込みは行われている。このため、セルの閾値電圧の分布は、図１（ｃ）となっている。このようなセルのデータを判断するには、ワード線の電位を“ｂ”でリード動作をすればよい。しかし、ステップＳ７１において、ワード線電位“ｂ”で読み出し動作をした結果は、既にデータ記憶回路に読み出されている。このため、データ記憶回路に記憶されているデータを外部に出力すれば良い（Ｓ７３）。
【０１２９】
一方、フラグセルから読み出されたデータが“１”（メモリセルのデータが“０”）の場合、第２ページの書き込みが行われていない、セルの閾値電圧分布は、図１（ａ）又は（ｂ）に示すようになっている。これらのメモリのデータを判断するには、ワード線の電位を“ａ”でリード動作をしなくてはならない。したがって、ワード線の電位を“ａ”として読み出し動作を行ない（Ｓ７４）、この後、データ記憶回路に読み出されたデータが外部に出力される（Ｓ７３）。
【０１３０】
（リード動作：第１ページリード）
上記のように、第１ページのリード動作は、選択ワード線にリード電位“ａ”又は“ｂ”を供給して読み出し動作が実行される。
【０１３１】
先ず、選択されているブロック内の非選択ワード線及びセレクト線ＳＧ１に読み出し電圧Ｖｒｅａｄを供給し、図６に示すデータ記憶回路の信号ＢＬＰＲＥを１Ｖ＋Ｖｔｈ、ＢＬＣＬＡＭＰをＶｄｄ＋Ｖｔｈとして、ビット線をプリチャージする。この後、セルのソース側のセレクト線ＳＧ２をハイレベルにする。閾値電圧が電位“ａ”又は“ｂ”より高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位“ａ”又は“ｂ”より低いセルはオンするため、ビット線がＶｓｓとなる。
【０１３２】
次に、データ記憶回路１０の信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとしてトランジスタ６１ｕをオンとすることにより、ＴＤＣのノードＮ３をＶｄｄにプリチャージする。この後、信号ＢＬＣＬＡＭＰを中間電位（例えば０．９Ｖ＋Ｖｔｈ）としてトランジスタ６１ｔをさせる。ＴＤＣのノードＮ３はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。
【０１３３】
次に、信号ＢＬＣ１をＶｓｇ（Ｖｄｄ＋Ｖｔｈ）としてＴＤＣの電位をＰＤＣに取りこむ。この後、ＰＤＣのデータをＳＤＣに移動させるが、第２のフラグセルＦＣ２のデータが“１”の場合（書きこまれていない場合）、リードレベルを変更してもう一度セルから読み出す。
【０１３４】
（第２ページリード）
図１８（ｂ）は、第２ページリードのダイアグラムを示している。第２ページリードでは、先ず、アドレスを指定し、図３に示す２ページを選択する。図１（ｂ）（ｃ）に示すように、第２ページの書き込み前と後で、閾値電圧の分布が変わっている。しかし、第２ページの書き込み後は、図１（ｃ）に示すような分布になっている。このため、ワード線の電位を“ａ”、“ｂ”、“ｃ”と三回替えて読み出し動作をしなくてはならない。しかし、書き込み時、“ｃ”でのベリファイは、“ｂ”でのベリファイの後に続けてワード線の電位を変更させるのみで行っていた。したがって、リード動作もベリファイ動作と同じ動作であるほうが望ましいため、“ｂ”、“ｃ”のリード動作は、同時に行なう。
【０１３５】
すなわち、先ず、ワード線電位を“ｂ”“ｃ”として同時に読み出しを行ない（Ｓ８１）。この後、ワード線電位を“ａ”として読み出し動作を行なう（Ｓ８２）。メモリセルの閾値電圧がワード線電位“ａ”より低いか、ワード線電位“ｂ”より高くワード線電位“ｃ”より低い場合、データを“１”とする。また、メモリセルの閾値電圧がワード線電位“ａ”より高くワード線電位“ｂ”より低いか、ワード線電位“ｃ”より高い場合、データを“０”とする。第２ページ書込み前において、第２ページのデータは“１”が出力されるべきである。しかし、図１（ａ）に示す閾値電圧分布になっている。このため、第２ページの書き込み後と同じ読み出し動作をすると出力データが“０”となることもある。したがって、第１のフラグセルＦＣ１のデータが“０”か“１”であるかを判別する（Ｓ８３）。この結果、第１のフラグセルＦＣ１のデータが“１”で、第２ページの書き込みが行なわれていない場合、出力データを“１”に固定する（Ｓ８４）。出力データを“１”に固定するには、データ記憶回路の信号ＰＲＳＴをハイレベルとし、ＳＤＣを“１”に設定する。あるいは、図２に示すデータ入出力バッファよりデータ“１”しか出力させないようにする。また、第１のフラグセルＦＣ１のデータが“０”の場合、読み出したデータを出力する（Ｓ８５）。
【０１３６】
第２ページリードは、具体的には、次のような動作を実行する。
【０１３７】
（リード動作：第２ページリード第１回目）
第２ページのリード動作の１回目は、プログラムベリファイ時の“ｂ”“ｃ”同時ベリファイと同じように、ビット線をプリチャージした後、ワード線にリード電位“ｂ”を供給する。この状態で、メモリセルからデータを読み出し、途中でワード線の電位をリード電位“ｃ”に変更して読み出し動作をする（Ｓ８１）。
【０１３８】
先ず、選択されているブロック内の非選択ワード線及びセレクト線ＳＧ１に読み出し電圧Ｖｒｅａｄを供給し、図６に示すデータ記憶回路の信号ＢＬＰＲＥを１Ｖ＋Ｖｔｈ、ＢＬＣＬＡＭＰをＶｄｄ＋Ｖｔｈとして、ビット線をプリチャージする。この後、メモリセルのソース側のセレクト線ＳＧ２をハイレベルにする。閾値電圧が電位“ｂ”より高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位“ｂ”より低いセルはオンするため、ビット線がＶｓｓとなる。
【０１３９】
次に、データ記憶回路の信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとしてトランジスタ６１ｕをオンとすることにより、ＴＤＣのノードＮ３をＶｄｄにプリチャージする。この後、信号ＢＬＣＬＡＭＰを０．９Ｖ＋Ｖｔｈとしてトランジスタ６１ｔをさせる。ＴＤＣのノードＮ３はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号ＢＬＣ１をＶｓｇ（Ｖｄｄ＋Ｖｔｈ）としてＴＤＣの電位をＰＤＣに取りこむ。
【０１４０】
次に、ワード線電位を“ｃ”に変更する。閾値電圧が電位“ｃ”より高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位“ｂ”より低いセルはオンするため、ビット線がＶｓｓとなる。このビット線放電時間中に、信号ＤＴＧ＝Ｖｄｄ＋Ｖｔｈとして、ＰＤＣのデータをＤＤＣにコピーする。
【０１４１】
次に、データ記憶回路１０の信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとしてトランジスタ６１ｕをオンとすることにより、ＴＤＣのノードＮ３をＶｄｄにプリチャージする。この後、信号ＢＬＣＬＡＭＰを０．９Ｖ＋Ｖｔｈとしてトランジスタ６１ｔをさせる。ＴＤＣのノードＮ３はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号ＢＬＣ１をＶｓｇ（Ｖｄｄ＋Ｖｔｈ）としてＴＤＣの電位をＰＤＣに取りこむ。
【０１４２】
（リード動作：第２ページリード第２回目）
第２ページのリード動作の２回目は選択ワード線にリード電位“ａ”を供給し、読み出し動作をする（Ｓ８２）。
【０１４３】
先ず、選択されているブロック内の非選択ワード線及びセレクト線ＳＧ１に読み出し電圧Ｖｒｅａｄを供給する。この状態において、データ記憶回路１０の信号ＢＬＰＲＥ、ＢＬＣＬＡＭＰを１Ｖ＋Ｖｔｈとし、ビット線をプリチャージする。この後、メモリセルのソース側のセレクト線ＳＧ２をハイレベルにする。閾値電圧がワード線電位“ａ”より高いセルはオフするためビット線はハイレベルのままである。また、閾値電圧がワード線電位“ａ”より低いセルはオンするためビット線がＶｓｓとなる。
【０１４４】
次に、データ記憶回路１０の信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとすることにより、ＴＤＣのノードＮ３をＶｄｄにプリチャージした後、信号ＢＬＣＬＡＭＰをＶｄｄ＋Ｖｔｈとしてトランジスタ６１ｔをオンさせる。ＴＤＣのノードＮ３はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。
【０１４５】
このビット線放電中に、信号ＶＰＲＥ＝Ｖｓｓ、信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとし、としＴＤＣを一旦Ｖｓｓにした後、信号ＲＥＧ＝Ｖｄｄ＋Ｖｔｈ、信号ＶＲＥＧ＝Ｖｄｄとし、ＤＤＣ＝ハイレベルの場合、ＴＤＣをハイレベルとする。つまりＤＤＣのデータをＴＤＣにコピーする。次に、信号ＤＴＧ＝Ｖｄｄ＋ＶｔｈとしてＰＤＣのデータをＤＤＣにコピーした後、信号ＶＲＥＧ＝Ｖｓｓ、信号ＲＥＧ＝Ｖｄｄとし、ＤＤＣがハイレベルの場合強制的にＴＤＣをローレベルにする。この後、信号ＢＬＣ１＝Ｖｄｄ＋Ｖｔｈとして、ＴＤＣの電位をＰＤＣに取りこむ。ここでＰＤＣがハイレベルとなるのは、第１回目のリードで“ｂ”レベルを超え、“ｃ”レベル以下の場合であり、ローレベルとなるのは、第１回目のリードで“ｂ”レベル以下、又は“ｃ”レベル以上の場合である。
【０１４６】
次に、データ記憶回路１０の信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとしてトランジスタ６１ｕをオンとすることにより、ＴＤＣのノードＮ３をＶｄｄにプリチャージする。この後、信号ＢＬＣＬＡＭＰを０．９Ｖ＋Ｖｔｈとしてトランジスタ６１ｔをさせる。ＴＤＣのノードＮ３はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号ＤＴＧ＝Ｖｄｄ＋Ｖｔｈ、信号ＲＥＧ＝Ｖｄｄ、信号ＶＲＥＧ＝Ｖｓｓとして、ＰＤＣがハイレベル場合強制的に、ＴＤＣをＶｓｓにする。次に、信号ＢＬＣ１をＶｓｇ（Ｖｄｄ＋Ｖｔｈ）としてＴＤＣの電位をＰＤＣに取りこむ。この結果、ＰＤＣがハイレベルとなるのはメモリセルの閾値電圧が、ワード線電位“ａ”より高く、ワード線電位“ｂ”より低い場合と、ワード線電位“ｃ”より高い場合である。この後、ＰＤＣのデータをＳＤＣに移動させる。
【０１４７】
第１のフラグセルＦＣ１のデータが“１”の場合（書き込まれていない場合）、第２ページは、書き込まれていない。このため、出力データを“１”に固定しデータを出力する（Ｓ８４）。
【０１４８】
尚、上記説明では、１回のビット線のプリチャージでワード線の電位を“ｂ”“ｃ”と変化させてメモリセルのデータを読み出し、再度、ビット線をプリチャージし、ワード線の電位を“ａ”として読み出していたが、１回のビット線のプリチャージでワード線の電位を“ａ”“ｂ”“ｃ”と変化させてメモリセルのデータを読み出すことも可能である。
【０１４９】
（イレーズ）
消去動作は、先ず、アドレスを指定し、図３の破線で示すブロックを選択する。次に、セルが形成されたウエルの電位を高電圧（約２０Ｖ）にし、選択ブロックのワード線をＶｓｓ、非選択ブロックのワード線をフローティングにする。すると、選択ブロックのセルとウエル間に高電圧が加わり、セルに記憶されたデータが消去される。一方、非選択ブロックにおいて、ワード線はフローティング状態であるため、ウエルを高電圧にすると、ワード線も高電圧になる。このため、非選択ブロックのメモリセルに記憶されたデータは消去されない。
【０１５０】
消去動作を行なうと、メモリセルのデータは“０”となり、第１ページ、第２ページの何れでリードを行なってもデータ“１”が出力される。
【０１５１】
上記第１の実施形態によれば、第２ページのプログラムベリファイにおいて、ベリファイ電圧”ｂ’”“ｃ’”によるデータ“２”、“３”のベリファイを同時に行なっている。このため、２つのベリファイを行なう際に、１回ビット線をプリチャージし、ワード線電位を“ｂ’”及び“ｃ’”に設定するだけでよい。したがって、長時間を要するビット線のプリチャージの回数を削減することができるため、ベリファイ速度を向上できる。
【０１５２】
また、第２ページの読み出し動作において、１回ビット線をプリチャージし、ワード線電位を“ｂ”及び“ｃ”に設定することにより、データ“２”、“３”を読み出している。したがって、プリチャージ回数を削減することができるため、読み出し速度を向上できる。
【０１５３】
さらに、データのプログラムベリファイ動作と読み出し動作は、ビット線をプリチャージした後、ワード線の電位を変化させている。このため、プログラムベリファイ動作と読み出し動作を同じ条件で行なうことができるため、読み出し精度を向上することが可能である。
【０１５４】
また、第２ページ書き込みにおいて、ベリファイ“ａ’”の実行回数を規定する最大ループ回数を設定し、カウンタ（ＰＣ）の値が最大ループ回数に達した場合、ベリファイ“ａ’”の動作を終了させている。このため、第２ページの書き込み時間を短縮することができる。
【０１５５】
さらに、上記第１の実施形態によれば、本来の閾値電圧より低い電位により、第１ページのデータをメモリセルに書き込み、第２ページのデータを書き込む前に隣接するメモリセルに第１ページのデータを書き込み、隣接するメモリセルの書き込み後、第２ページのデータをメモリセルに書き込み、記憶データに対応した本来の閾値電圧に設定している。このため、隣接するメモリセルのＦＧ−ＦＧ間容量の影響を考慮して、第１ページのデータをメモリセルに書き込んでいるため、多値のデータに対応する閾値電圧を正確に設定することができる。
【０１５６】
また、第２ページのデータを書き込む際、フラグセルにデータを書き込み、各ページのデータを読み出す際、フラグセルに記憶されたデータに応じて外部に出力されるデータを制御している。したがって、各ページのデータを確実に出力することができる。
【０１５７】
さらに、従来、例えばメモリセルから読み出したデータの一部を外部から入力したデータに変えて書き込む、所謂ページコピーを行う場合、図６に破線で示すように、インバータ回路６２ｃとインバータ回路６２ｄの間にトランジスタ６２ｅが挿入され、インバータ回路６２ｃとトランジスタ６２ｅにトランジスタ６２ｆが並列接続されていた。このような構成において、従来は、ページコピー時に、プログラムのコマンドが入力されると、メモリセルから読み出されたデータは、書き込み時にデータ入力端子５ａから供給されたデータと論理レベルが反転してＳＤＣにラッチされる。このため、データ入力端子５ａから供給されるデータと、ＳＤＣにラッチされたデータとの論理レベルを一致させる必要がある。したがって、ページコピー時に、相補的な信号φ、／φにより、トランジスタ６２ｅをオンし、トランジスタ６２ｆをオフとして、書き込みデータを反転してＳＤＣに供給していた。
【０１５８】
しかし、上記第１の実施形態によれば、ページコピーを行なう場合、メモリセルから読み出されたデータは反転された後、ＳＤＣにラッチされ、データ入力端子５ａからＳＤＣの供給されるデータと論理レベルが一致されている。このため、データ入力端子５ａとＳＤＣの間に従来のようなトランジスタ６２ｅ，６２ｆを設ける必要がない。したがって、回路構成を簡単できる利点を有している。
【０１５９】
尚、第１の実施形態において、第２ページ（アッパーページ）のデータをメモリセルに書き込むとき、プログラムとベリファイ（ａ＊，ａ’）と、プログラムベリファイ（ｂ’，ｃ’）を分けて行っていた。しかし、プログラムベリファイ（ｂ’，ｃ’）のように、一回のビット線充電後、ワード線電位をａ＊，ａ’，ｂ’，ｃ’と次々に上昇することにより、これらを１度にベリファイすることも可能である。
【０１６０】
また、第２ページのリード時、リード（ｂ，ｃ）とリード（ａ）を分けて行っていたが、リード（ｂ，ｃ）の時のように、一回のビット線充電後、ワード線電位をａ，ｂ，ｃと次々に上昇することにより、これらのデータを１度に読み出すことも可能である。
【０１６１】
（第２の実施形態）
図１９は、第２の実施形態を示すものであり、８値（３ビット）のデータを記憶するＮＡＮＤフラッシュメモリのメモリセルアレイ１及びビット線制御回路２を示している。図１９に示す構成は、図３に示す４値（２ビット）の構成とほぼ同様であるため、異なる部分についてのみ説明する。
【０１６２】
図１９において、外部アドレスにより、１本のワード線が選択されると、破線で示す、１つのセクタが選択される。１セクタは３ページにより構成される。この３ページはアドレスによって切り替えられる。すなわち、１つのメモリセルに３ビットのデータを記憶することができるため、３ビットの切り替えはアドレス（第１ページ、第２ページ、第３ページ）によって行なう。また、１セクタは５つのフラグセルＦＣ１、ＦＣ２、ＦＣ３、ＦＣ４、ＦＣ５を有している（図１９は、フラグセルＦＣ１とＦＣ５のみを示している）。このため、１本のワード線が選択されると、５つのフラグセルＦＣ１、ＦＣ２、ＦＣ３、ＦＣ４、ＦＣ５が同時に選択される。各フラグセルＦＣ１〜ＦＣ５はビット線を介してフラグ用データ記憶回路１０ａ、１０ｂ、１０ｃ、１０ｄ、１０ｅに接続されている（図１９は、フラグ用データ記憶回路１０ａ、１０ｅのみを示している）。フラグセルＦＣ１、ＦＣ２は、第２ページの書き込みが行なわれていることを示すデータを記憶し、フラグセルＦＣ３、ＦＣ４、ＦＣ５は、第３ページの書き込みが行なわれていることを示すデータを記憶する。
【０１６３】
しかし、１つのメモリセルに３ビットのデータを記憶することができるため、５つのフラグセルを用いず、３つのフラグセルにより、第２ページと第３ページの書き込みが行なわれていることを示すデータを記憶することも可能である。
【０１６４】
また、信頼性を向上させるため、フラグセルＦＣ１〜ＦＣ５を、それぞれ複数個具備し、これら複数セルに同一データを記憶し、読み出し時に、複数のフラグセルから読み出したデータを多数決により決めることもできる。
【０１６５】
第２の実施形態の動作について説明する。
【０１６６】
消去動作は、４値の場合と同じである。
【０１６７】
図２０（ａ）（ｂ）（ｃ）、図２１（ａ）（ｂ）は、メモリセルのデータとメモリセルの閾値電圧の関係を示している。消去動作を行なうとメモリセルのデータは“０”となる。図２０（ａ）に示すように、第１ページの書き込みにより、メモリセルのデータはデータ“０”とデータ“４”になる。この後、第１ページに隣接するセルにデータが書き込まれるとデータ“４”の閾値電圧の分布が広がる（図２０（ｂ））。
【０１６８】
第２ページの書き込み後、メモリセルのデータはデータ“０”、“２”、“４”、“６”となる（図２０（ｃ））。この後、隣接セルにデータが書き込まれると、データ“０”、“２”、“４”、“６”の閾値分布が広がる（図２１（ａ））。
【０１６９】
第３ページの書き込み後、メモリセルのデータはデータ“０”〜“７”となる（図２１（ｂ））。本実施形態において、メモリセルのデータは閾値電圧の低いほうから高い方へと、定義されている。
【０１７０】
図２２（ａ）（ｂ）は、本実施形態における２つの書き込み順序の例を示している。ブロック内において、ソース線に近いメモリセルからページごとに書き込み動作が行なわれる。図２２（ａ）（ｂ）は、説明の便宜上、ワード線を４本としている。図２２（ａ）に示す書き込み順序は、図７に示す書き込み順序と類似している。これに対して、図２２（ｂ）に示す書き込み順序は、図２２（ａ）と若干相違している。すなわち、第１ページの書き込み後、第２ページは隣接のセルを初めに書くのではなく、同じセルに第２ページまで書き込む。この後、第３ページの書き込みを行なう前に、隣接セルの第２ページまで、書き込みを行なった後、第３ページの書き込みを行なっている。このように、第３ページの隣接セルの影響を考慮した書き込みをすることも可能である。
【０１７１】
第３ページのワード線のリード電位は、本来“ａ”，“ｂ”，“ｃ”，“ｄ”，“ｅ”，“ｆ”，“ｇ”とし、ベリファイ電位を“ａ’”，“ｂ’”，“ｃ’”，“ｄ’”，“ｅ’”，“ｆ’”，“ｇ’”とする。第２ページのリード電位は、本来のリード電位より低い値“ｂ＊”（＝“ａ”），“ｄ＊”，“ｆ＊”とし、第２ページでのベリファイ電位はこれらより少し高い値、“ｂ＊’”，“ｄ＊’”，“ｆ＊’”とする。第１ページのリード電位は、本来のリード電位より低い電位“ｄ＊＊”（＝“ａ”）とし、第１ページでのベリファイ電位はこれらより少し高い電位“ｄ＊＊’”とする。
【０１７２】
（プログラム及びプログラムベリファイ）
プログラム動作は、先ず、アドレスを指定し、図１９に示す３ページを選択する。本メモリは、３ページのうち、第１ページ、第２ページ、第３ページの順でしか、プログラムできない。第１ページ及び第２ページのプログラムは、４値の場合と同様である。
【０１７３】
図２０（ａ）（ｂ）（ｃ）に示す４値のメモリセルのデータとメモリセルの閾値電圧は、図１（ａ）（ｂ）（ｃ）に対応している。また、プログラム及びプログラムベリファイのブロックダイアグラムは、図８、図９と同様であるため省略する。但し、メモリセルのデータの定義及びワード線の電位は、４値の場合、“０”、“１”、“２”、“３”及び“ａ”、“ｂ”、“ｃ”であるのに対し、８値の場合、“０”、“２”、“４”、“６”及び“ｂ”、“ｄ”、“ｆ”となっている。
【０１７４】
（第１ページプログラム）
第１ページのプログラムのブロックダイアグラムは、図８と同様である。しかし、前述したように、ワード線電位の定義が変更されている。
【０１７５】
（隣接セルプログラム）
図２２（ａ）に示すように、メモリセル１の第１ページに１ビットのデータの書き込み後、メモリセル１とワード方向に隣接したメモリセル２の第１ページが書き込まれる。次いで、メモリセル１とビット方向に隣接したメモリセル３の第１ページの書き込み、メモリセル１と対角に隣接したメモリセル４の第１ページの書き込みが行なわれる。これらの書き込み動作が行なわれると、書き込みデータによっては、ＦＧ−ＦＧ間容量によって、メモリセル１の閾値電圧が上がる。このため、メモリセル１のデータ“０”とデータ“４”の閾値電圧分布は図２０（ｂ）のように閾値電圧の高いほうに広がる。
【０１７６】
この後、再びメモリセル１の第２ページに１ビットのデータが書き込まれる。
【０１７７】
（第２ページプログラム）
第２ページのプログラムのブロックダイアグラムは、図９と同様であるが、前述したように、ワード線電位の定義が変更されている。また、データロード、内部リード後のデータキャッシュ内のデータ及びデータキャッシュ設定後のデータキャッシュ内のデータは、同様である。第２ページの書き込みにおいて、フラグセルＦＣ１は、ベリファイ電位“ｂ＊’”まで書き込まれ、フラグセルＦＣ２は、ベリファイ電位“ｄ＊’”まで書き込まれる。
【０１７８】
（隣接セルプログラム）
図２２（ａ）に示すように、メモリセル１の第１ページ及び第２ページにデータの書き込み後、メモリセル２の第２ページ、メモリセル５、６の第１ページ及びメモリセル３、４の第２ページにデータが書き込まれる。これらの書き込み動作が行なわれると、書き込みデータによっては、ＦＧ−ＦＧ間容量によって、メモリセル１の閾値電圧が上がる。このため、メモリセル１のデータ“２”、データ“４”、データ“６”の閾値電圧分布は図２１（ａ）のように広がる。
【０１７９】
この後、再びメモリセル１の第３ページに１ビットのデータが書き込まれる。
【０１８０】
（第３ページプログラム）
図２３は、第３ページのプログラムのブロックダイアグラムを示している。第３ページのプログラム動作も、先ずアドレスを指定し、図１９に示す３ページを選択する。
【０１８１】
次に、データ記憶回路１０をリセットし（Ｓ９１）、書き込みデータを外部より入力して全てのデータ記憶回路１０のＳＤＣに記憶する（Ｓ９２）。外部よりデータ“１”（書き込みを行なわない）が入力されると、図６に示すデータ記憶回路１０のＳＤＣは、ローレベルになり、データ“０”（書き込みを行なう）が入力されるとハイレベルとなる。この後、書き込みコマンドが入力されると、第３ページのプログラムであるので、フラグセルＦＣ３〜ＦＣ５にデータの書き込みを行なうため、フラグセル用のデータ記憶回路１０ａ、１０ｂに所定のデータが入力される。
【０１８２】
第３ページのプログラムは、図２１（ｂ）に示すように、メモリセルのデータが“０”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータを“０”のままとし、外部から入力されるデータが“０”の場合、メモリセルのデータを“１”にする。
【０１８３】
メモリセルのデータが“２”の場合で、外部から入力されるデータが“０”の場合、メモリセルのデータを“２”のままである。しかし、第２ページの書き込み時において、メモリセルのデータが“２”に達したかどうかをベリファイする際、通常より低いベリファイ電位“ｂ＊’”を用いた。このため、データ“２”を記憶するメモリセルは、本来のベリファイ電位である“ｂ’”の電位まで書き込む。メモリセルのデータが“２”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータを“３”にする。
【０１８４】
メモリセルのデータが“４”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータは“４”のままである。しかし、第２ページの書き込み時において、メモリセルのデータが“４”に達したかどうかをベリファイする際、通常より低いベリファイ電位“ｄ＊’”を用いた。このため、データ“４”を記憶するメモリセルは、本来のベリファイ電位である“ｄ’”の電位まで書き込む。メモリセルのデータが“４”の場合で、外部から入力されるデータが“０”の場合、メモリセルのデータを“５”にする。
【０１８５】
メモリセルのデータが“６”の場合で、外部から入力されるデータが“０”の場合、メモリセルのデータを“６”のままである。しかし、第２ページの書き込み時において、メモリセルのデータが“６”に達したかどうかをベリファイする際、通常より低いベリファイ電位“ｆ＊’”を用いた。このため、データ“６”を記憶するメモリセルは、本来のベリファイ電位である“ｆ’”の電位まで書き込む。メモリセルのデータが“６”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータを“７”にする。
【０１８６】
第２ページの書き込みにおいて、フラグセルＦＣ１は、ベリファイ電位“ｂ＊’”まで書き込まれ、フラグセルＦＣ２は、ベリファイ電位“ｄ＊’”まで書き込まれる。第３ページの書き込みで、フラグセルＦＣ３は、ベリファイ電位“ａ’”まで書き込まれ、フラグセルＦＣ４は、ベリファイ電位“ｂ’”まで書き込まれ、フラグセルＦＣ５は、ベリファイ電位“ｄ’”書き込まれる。
【０１８７】
（第３ページ第１回目プログラム）
第３ページのプログラムは、メモリセルにデータ“１”〜“７”を書き込む。これらのデータを同時にプログラムすることも可能であるが、本実施形態では、先ず、メモリセルにデータ“４”〜“７”の４つのデータを書き込む。この後、メモリセルにデータ“１”〜“３”を書き込む。以下、具体的に説明する。
【０１８８】
（内部データリード１及びデータキャッシュ設定１）（Ｓ９３、Ｓ９４）
メモリセルへデータを書き込む前に、第２ページのメモリセルのデータが“４”又は“６”か、“０”又は“２”であるかの判断と、メモリセルのデータが“６”か、データが“０”、“２”、“４”のいずれであるかを判断する。このため、ワード線の電位を“ｄ＊”、“ｆ＊”に順次設定し、内部リード動作を行なう（Ｓ９３）。
【０１８９】
図２５（ａ）は内部リード後のデータキャッシュの状態を示している。この後、データキャッシュを操作することにより、図２５（ｂ）に示すように、データキャッシュを設定する。さらに、例えばカウンタ（ＰＣ）をゼロに初期設定し、第５のフラグセルのデータをロードする（Ｓ９４）。
【０１９０】
図２５（ｂ）において、メモリセルのデータを“０”〜“３”にする場合、ＰＤＣはハイレベル。メモリセルのデータを“４”とする場合、ＰＤＣはローレベル、ＤＤＣはローレベル、ＳＤＣはハイレベルに設定する。メモリセルのデータを“５”とする場合、ＰＤＣはローレベル、ＤＤＣはハイレベル、ＳＤＣはハイレベルに設定する。メモリセルのデータを“６”とする場合、ＰＤＣはローレベル、ＤＤＣはハイレベル、ＳＤＣはローレベルに設定する。メモリセルのデータを“７”とする場合、ＰＤＣ、ＤＤＣ、ＳＤＣをいずれもローレベルに設定する。
【０１９１】
（プログラム：第１回目）（Ｓ９５）
次いで、カウンタ（ＰＣ）をカウントアップした後、メモリセルにデータが書き込まれる。第２の実施形態においても、第１の実施形態と同様、カウンタの値と予め定められたベリファイ開始回数を用いて、不要なベリファイがスキップされる。
【０１９２】
先ず、信号ＢＬＣ１をＶｓｇとすると、ＰＤＣがデータ“０”の場合、ビット線がＶｓｓとなり、データ“１”の場合、ビット線はＶｄｄになる。次に、信号ＢＬＣ１＝Ｖｓｓとした後、信号ＶＲＥＧ＝Ｖｄｄ、信号ＲＥＧ＝中間電位＋Ｖｔｈ（１Ｖ＋Ｖｔｈ）とする。すると、ＤＤＣがデータ“１”の場合、ビット線が中間電位となり、ＤＤＣがデータ“０”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“４”，“７”を書き込んでいるときのみビット線はＶｓｓ、メモリセルにデータ“５”，“６”を書き込んでいる場合、ビット線は中間電位（１Ｖ）、メモリセルのデータが“０”〜“３”の場合（書き込みしない場合）、ビット線はＶｄｄになる。ここで、選択ワード線をＶｐｇｍ、非選択ワード線をＶｐａｓｓとすると、ビット線がＶｄｄの場合、書き込みが行なわれない。また、ビット線がＶｓｓの場合、書き込みが起こり、ビット線が中間電位（１Ｖ）の場合、少しだけ書き込まれる。したがって、メモリセルにデータ“５”，“６”を書き込んでいるセルは、あまり書き込まれない可能性がある。しかし、メモリセルのデータ“６”とデータ“７”のベリファイを一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。このため、ビット線に中間電位を供給する。
【０１９３】
（ａ）この後、ベリファイ電圧“ｄ’”を設定して書き込みベリファイが行なわれる（Ｓ９６，Ｓ９７）。このベリファイにおいて、信号ＢＬＣ２をハイレベルとし、信号ＢＬＣＬＡＭＰを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、ＳＤＣがハイレベル、つまり、データ“５”、“４”を書き込んでいるメモリセルのみである。
【０１９４】
次に、ワード線にベリファイ電位“ｄ’”を供給し、ビット線を放電する。ビット線の放電中に信号ＶＲＥＧ＝Ｖｓｓ、信号ＲＥＧ＝ＶＤＤとする。ＤＤＣがハイレベルの場合、ビット線を放電する。したがって、ビット線がプリチャージされるのはデータ“４”を書き込むメモリセルのみである。
【０１９５】
次に、ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、メモリセルにデータ“４”が書き込まれていてベリファイ電位“ｄ’”に達した時だけである。
【０１９６】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“４”を書き込んでいてベリファイ電位“ｄ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０１９７】
（ｂ）この後、ベリファイ電圧“ｅ’”を設定して書き込みベリファイが行なわれる（Ｓ９８，Ｓ９９，Ｓ１００）。
【０１９８】
このベリファイにおいて、信号ＶＰＲＥ＝ハイレベル、信号ＢＬＣＬＡＭＰを所定の電位に設定すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位“ｅ’”を供給し、ビット線を放電する。次に、このビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ｅ’”以上の場合である。ここで、信号ＢＬＣ２をＶｔｈ＋０．５Ｖとすると、ＳＤＣが“０”の場合（メモリセルのデータ“６”に書き込んでいる場合とメモリセルのデータ“７”に書き込んでいる場合）、ＴＤＣはＶｓｓになる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルのデータが“５”に書き込まれていてベリファイ電位“ｅ’”に達した時である。
【０１９９】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“５”を書き込んでいてベリファイ電位“ｅ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０２００】
（ｃ）ベリファイ電位“ｆ’”を用いたベリファイは、第１の実施形態のベリファイ電位“ｂ”を用いたベリファイと同様である。但し、ベリファイ時のワード線電位は“ｆ’”である（Ｓ１０１，Ｓ１０２，Ｓ１０３）。
【０２０１】
（ｄ）ベリファイ電位“ｆ’”“ｇ’”同時ベリファイは、第１の実施形態のベリファイ電位“ｂ”“ｃ”同時ベリファイと同様である。但し、ベリファイ時のワード線電位は“ｆ’”“ｇ’”である。
【０２０２】
このようにして、全てのＰＤＣのデータが“１”になるまで、プログラムとベリファイ動作を繰り返す（Ｓ１０６、Ｓ１０７）。しかし、書き込み動作において、ＤＤＣのデータが“１”の場合、つまり、メモリセルにデータ“５”を書き込んでいる場合と、メモリセルにデータ“６”を書き込んでいる場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Ｖｐｇｍを少しずつ上昇させる。第１回目プログラムにより、メモリセルにデータ“４”〜“７”の４つが書き込まれる。
【０２０３】
上記説明では、１回のプログラムの後、４つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらない。このため、初めは、ベリファイ電位“ｄ’”を用いたベリファイのみ行なう。次に、ベリファイ電位“ｄ’”とベリファイ電位“ｅ’”を用いたベリファイを行なう。次に、ベリファイ電位“ｄ’”とベリファイ電位“ｅ’”ベリファイ電位“ｆ’”のみを用いたベリファイを行なう。最後に、ベリファイ電位“ｄ’”とベリファイ電位“ｅ’”を用いたベリファイと、ベリファイ電位“ｆ’”とベリファイ電位“ｇ’”を同時にベリファイする“ｆ’、ｇ’”同時ベリファイを行なうことも可能である。
【０２０４】
また、プログラムの終了近くのループでは、データ“４”への書き込みは終了している。このため、ベリファイ電位“ｄ’”を用いたベリファイ動作を省略し、ベリファイ電位“ｄ’”とベリファイ電位“ｅ’”用いたベリファイ動作を省略することも可能である。
【０２０５】
第３ページ第１回目プログラムにおいて、フラグセルＦＣ５は、ベリファイ電位“ｄ’”に書き込まれる。
【０２０６】
（第２回目プログラム）（Ｓ１０８〜Ｓ１２１）
第２回目プログラムにより、メモリセルにデータ“１”〜“３”の３つが書き込まれるが、データ“１”を書き込むメモリセルには、全く書き込みが行なわれていない。このため、第１の実施形態と同様に、本来のベリファイ電位より低いベリファイ電位“ａ＊’”を設け、このベリファイ電位を超えたセルに対して、ビット線に中間電位を供給する。これにより、書き込みスピードを遅くし、閾値分布を狭くする。また、メモリセルのデータ“２”とデータ“３”のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、メモリセルにデータ“２”を書き込んでいる場合にも、ビット線に中間電位を供給することにより、書き込みスピードを遅くする。
【０２０７】
（内部データリード２及びデータキャッシュ設定２）（Ｓ１０９、Ｓ１１０）
第３のフラグセルのデータをロードした後（Ｓ１０８）、セルへの書き込みの前に、ワード線の電位を“ｂ＊（＝ａ）”、“ｄ＊”に順次設定し、内部リード動作を行なう（Ｓ１０９）。
【０２０８】
この後、データキャッシュを操作することにより、図２６に示すように、データキャッシュを設定する（Ｓ１１０）。すなわち、メモリセルにデータ“０”を書き込む場合、ＰＤＣはハイレベル、ＤＤＣはハイレベル、ＳＤＣはハイレベルに設定する。メモリセルにデータ“１”を書き込む場合、ＰＤＣはローレベル、ＤＤＣはローレベル、ＳＤＣはハイレベルに設定する。メモリセルにデータ“２”を書き込む場合、ＰＤＣはローレベル、ＤＤＣはハイレベル、ＳＤＣはローレベルに設定する。メモリセルにデータ“３”を書き込む場合、ＰＤＣはローレベル、ＤＤＣはローレベル、ＳＤＣはローレベルに設定する。メモリセルにデータ“４”〜“７”を書き込む場合、ＰＤＣは全てハイレベルに設定する。
【０２０９】
ここで、例えばカウンタ（ＰＣ）をゼロに初期設定し、さらに、第４のフラグセルのデータをロードする。
【０２１０】
（プログラム：第２回目）（Ｓ１１１）
次いで、例えばカウンタ（ＰＣ）をカウントアップした後、メモリセルにデータが書き込まれる。先ず、信号ＢＬＣ１をＶｓｇとすると、ＰＤＣがデータ“０”の場合、ビット線がＶｓｓとなり、データ“１”の場合、ビット線はＶｄｄになる。次に、信号ＢＬＣ１＝Ｖｓｓとした後、信号ＶＲＥＧ＝Ｖｄｄ、信号ＲＥＧ＝中間電位＋Ｖｔｈ（１Ｖ＋Ｖｔｈ）とする。すると、ＤＤＣがデータ“１”の場合、ビット線が中間電位（１Ｖ）となり、ＤＤＣがデータ“０”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“３”を書き込んでいる時と、メモリセルにデータ“１”を書き込んでいて本来のベリファイ電位より低いベリファイ電位“ａ＊’”以下の場合、ビット線は、Ｖｓｓである。メモリセルにデータ“２”を書き込んでいる時と、メモリセルにデータ“１”を書き込んでいて本来のベリファイ電位より低いベリファイ電位“ａ＊’”を越えている場合、ビット線は中間電位（１Ｖ）、メモリセルのデータが“０”、“４”〜“３”の場合（書き込みしない場合）、ビット線はＶｄｄになる。ここで、選択ワード線をＶｐｇｍ、非選択ワード線をＶｐａｓｓとすると、ビット線がＶｄｄの場合、書き込みが行なわれない。また、ビット線がＶｓｓの場合、書き込みが起こり、ビット線が中間電位（１Ｖ）の場合、少しだけ書き込まれる。しかし、メモリセルにデータ“２”とデータ“３”を書き込む場合のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。
【０２１１】
（ｅ）ベリファイ電位“ａ’、ａ＊’”を用いたベリファイは、第１の実施形態のベリファイ電位“ａ’、ａ＊’”を用いたベリファイと同様である（Ｓ１１２、Ｓ１１３、Ｓ１１４）。
【０２１２】
（ｆ）ベリファイ電位“ｂ’”のみを用いたベリファイは、第１の実施形態のベリファイ電位“ｂ’”のみを用いたベリファイと同様である（Ｓ１１５、Ｓ１１６、Ｓ１１７）。
【０２１３】
（ｇ）ベリファイ電位”ｂ’”“ｃ’”同時ベリファイは、第１の実施形態のベリファイ電位“ｂ”、“ｃ”同時ベリファイと同様である（Ｓ１１８、Ｓ１１９）。
【０２１４】
ＰＤＣがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路のＰＤＣのデータがハイレベルになるまでこのプログラム動作とベリファイ動作が繰り返される（Ｓ１２０、Ｓ１２１）。
【０２１５】
上記説明では、１回のプログラムの後、３つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらないため、初めは、ベリファイ電位“ａ’、ａ＊’”を用いたベリファイのみ行ない、次に、ベリファイ電位“ａ’、ａ＊’” とベリファイ電位“ｂ’”を用いたベリファイを行ない、最後に、ベリファイ電位“ａ’、ａ＊’”を用いたベリファイとベリファイ電位“ｂ’”“ｃ’”の同時ベリファイを行なうことも可能である。
【０２１６】
また、プログラムの終了近くのループにおいて、データ“１”への書き込みは終了しているため、これらのベリファイ動作は省略することもできる。データ“１”のベリファイが不用になると、ＳＤＣでデータを保持する必要がなくなる。このため、次の書き込みのためのデータを外部より読み込み、ＳＤＣに記憶しておくことも可能である。このような構成とした場合、さらなる高速動作が可能である。
【０２１７】
第３ページ第２回目プログラムにおいて、フラグセルＦＣ３は、ベリファイ電位“ａ’”まで書き込まれ、フラグセルＦＣ４は、ベリファイ電位“ｂ’”まで書き込まれる。
【０２１８】
（第１ページリード）
図２７（ａ）は、第１ページのリード動作を示すダイアグラムである。
【０２１９】
先ず、アドレスを指定し、図１９に示す３ページを選択する。図２０（ａ）（ｂ）（ｃ）、図２１（ａ）（ｂ）に示すように、第２ページの書き込み前と後、及び第３ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位を“ｄ”として読み出し動作を行なう（Ｓ１３１）。この後、第３ページが書き込まれているかどうかをフラグセルＦＣ５のデータから判別する（Ｓ１３２）。フラグセルが複数ある場合は、これらの多数決により判断する。
【０２２０】
フラグセルＦＣ５から読み出されたデータが“０”場合、第３ページのデータが書き込まれている。閾値分布は図２１（ｂ）となっているため、ワード線の電位を“ｄ”で読み出した結果が、既にデータ記憶回路１０に読み出されている。このため、これらのデータを外部に出力すればよい（Ｓ１３３）。
【０２２１】
一方、フラグセルＦＣ５から読み出されたデータが“１”場合、第３ページのデータが書き込まれていない。したがって、ワード線の電位を“ｄ＊”として読み出し動作を行なう（Ｓ１３４）。第２ページが書き込まれているかどうかフラグセルＦＣ２から読み出されたデータに基づき判別する（Ｓ１３５）。フラグセルが複数ある場合は、これらの多数決により判断する。
【０２２２】
フラグセルＦＣ２から読み出されたデータが“０”場合、第２ページのデータが書き込まれている。閾値分布は図２０（ｃ）となっているため、ワード線の電位を“ｄ＊”で読み出した結果が、既にデータ記憶回路１０に読み出されている。このため、これらのデータを外部に出力すればよい（Ｓ１３３）。
【０２２３】
一方、フラグセルＦＣ２から読み出されたデータが“１”の場合、第２ページのデータが書き込まれていない。したがって、ワード線の電位を“ａ”として読み出し動作を行ない読み出した結果を外部に出力すればよい（Ｓ１３６）。
【０２２４】
（第２ページリード）
図２７（ｂ）は、第２ページのリード動作を示すダイアグラムである。
【０２２５】
先ず、アドレスを指定し、図１９に示す３ページを選択する。図２０（ａ）〜（ｃ）、図２１（ａ）（ｂ）に示すように、第２ページの書き込み前と後、及び第３ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位を“ｂ”として読み出し動作を行なう（Ｓ１４１）。この後、第３ページが書き込まれているかどうかフラグセルＦＣ４から読み出したデータにより判別する（Ｓ１４２）。フラグセルが複数ある場合は、これらの多数決により判断する。
【０２２６】
フラグセルＦＣ４から読み出されたデータが“０”場合、第３ページのデータが書き込まれている。閾値分布は図２１（ｂ）となっている。このため、ワード線電位“ｂ”、“ｄ”、“ｆ”でメモリセルからデータを読み出す必要がある。しかし、ワード線電位“ｂ”の読み出し結果は、既にデータ記憶回路に読み出されている。このため、ワード線電位“ｄ”、“ｆ”によりデータを読み出し、出力すればよい（Ｓ１４３、Ｓ１４４）。ワード線電位“ｄ”、“ｆ”による読み出しは、第１の実施形態の“ｂ、ｃ”同時リードと同様である。
【０２２７】
一方、フラグセルＦＣ４から読み出されたデータが“１”の場合、第３ページのデータが書き込まれていない。したがって、ワード線の電位を“ａ”として読み出し動作を行なう（Ｓ１４５）。フラグセルＦＣ１から読み出されたデータにより、第２ページが書き込まれているかどうかを判別する（Ｓ１４６）。フラグセルが複数ある場合、これらの多数決により判断する。
【０２２８】
フラグセルＦＣ１から読み出されたデータが“０”の場合、第２ページのデータが書き込まれている。閾値分布は図２０（ｃ）となっているため、ワード線電位“ｂ＊”、“ｄ＊”、“ｆ＊”で読み出す必要がある。しかし、ワード線電位“ｂ＊”の読み出し結果は、既にデータ記憶回路１０に読み出されている。このため、ワード線電位“ｄ＊”、“ｆ＊”でデータを読み出し出力する（Ｓ１４４）。ワード線電位“ｄ＊”、“ｆ＊”でのリードは、第１の実施形態の“ｂ、ｃ”同時リードと同様である。
【０２２９】
一方、フラグセルＦＣ１から読み出されたデータが“１”の場合、第２ページのデータが書き込まれていない。したがって、データを“１”に固定して外部に出力すればよい（Ｓ１４８）。
【０２３０】
（第３ページリード）
図２８は、第２ページのリード動作を示すダイアグラムである。
【０２３１】
先ず、アドレスを指定し、図１９に示す３ページを選択する。図２０（ａ）（ｂ）（ｃ）、図２１（ａ）（ｂ）に示すように、第２ページの書き込み前と後、及び第３ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、ワード線電位“ｅ、ｇ”として読み出し（Ｓ１５１）、次いでワード線電位“ａ、ｃ”として読み出し動作を行なう（Ｓ１５２）。この後、フラグセルＦＣ３から読み出されたデータに基づき、第３ページが書き込まれているかどうかを判別する（Ｓ１５３）。フラグセルが複数ある場合は、これらの多数決により判断する。ワード線電位“ｅ、ｇ”、ワード線電位“ａ、ｃ”のリード動作はは、第１の実施形態と同様である。
【０２３２】
フラグセルＦＣ３から読み出されたデータが“０”場合、第３ページのデータが書き込まれている。閾値分布は図２１（ｂ）となっている。このため、ワード線電位“ｅ、ｇ”、ワード線電位“ａ、ｃ”によりデータ記憶回路に読み出されているデータを出力すればよい（Ｓ１５４）。一方、フラグセルＦＣ３から読み出されたデータが“１”の場合、第３ページのデータが書き込まれていない。このため、データを“１”に固定して外部に出力すればよい（Ｓ１５５）。
【０２３３】
（イレーズ）
消去動作は、第１の実施形態と同様であるため、説明は省略する。
【０２３４】
上記第２の実施形態によれば、８値（３ビット）のデータを確実且つ高速に書き込み、読み出すことができる。しかも、第３ページの書き込みにおいて、１回ビット線をプリチャージした状態において、ワード線の電位を変えることにより、複数の閾値電圧を一括してベリファイしている。このため、第３ページのプログラムベリファイを高速化することが可能である。
【０２３５】
第２の実施形態に示す、８値（３ビット）のＮＡＮＤ型フラッシュメモリは、第３ページの書き込み時、第１回目の書き込みで、データ“４”〜“７”を書き込み、第２回目の書き込みでデータ“１”〜“３”を書き込んだ。しかし、これに限定されるものではなく、先ず、データ“２”、“４”、“６”を書き込み、この後、データ“１”、“３”、“５”、“７”を書き込むことも可能である。
【０２３６】
このような書き込みにおいても、第１の実施形態と同様の効果を得ることができる。
【０２３７】
（第３の実施形態）
第２の実施形態において、フラグセルＦＣ１〜ＦＣ５は次のように書き込まれていた。すなわち、第２ページの書き込みにおいて、フラグセルＦＣ１は、ベリファイ電位“ｂ＊’”まで書き込まれ、フラグセルＦＣ２は、ベリファイ電位“ｄ＊’”まで書き込まれ、第３ページの書き込みにおいて、フラグセルＦＣ３は、ベリファイ電位“ａ’”まで書き込まれ、フラグセルＦＣ４は、ベリファイ電位“ｂ’”まで書き込まれ、フラグセルＦＣ５は、ベリファイ電位“ｄ’”まで書き込まれていた。このため、第２の実施形態は、５つのフラグセルを用いていた。しかし、フラグセルＦＣ４をフラグセルＦＣ１により代替し、フラグセルＦＣ５をフラグセルＦＣ２により代替することが可能である。このため、図１９に示す回路は、３つのフラグ用データ記憶回路と、３つのフラグセルＦＣ１、ＦＣ２、ＦＣ３により構成することが可能である。
【０２３８】
上記構成において、第１、第２ページの書き込み動作は、第２の実施形態と同様であり、第３のページの書き込み動作が若干異なっている。
【０２３９】
図２９、図３０は、第３ページの書き込み動作を示している。図２９に示す第３ページ第１回目の書き込みにおいて、図２３と異なるのは、内部リード（Ｓ９３）後のフラグセルデータのロードである。第２の実施形態は、第５のフラグセルＦＣ５にデータをロードしていた（Ｓ９４）。これに対して、第３の実施形態は、内部リード（Ｓ９３）後、フラグセルＦＣ２にデータをロードする（Ｓ１５１）。
【０２４０】
また、図２９に示す第３ページ第２回目の書き込みにおいて、図２４と異なるのは、内部リード（Ｓ１０９）後のフラグセルデータのロードである。第２の実施形態は、第４のフラグセルＦＣ４にデータをロードしていた（Ｓ１１０）。これに対して、第３の実施形態は、内部リード（Ｓ９３）後、フラグセルＦＣ１にデータをロードする（Ｓ１６１）。
【０２４１】
前述したように、第２ページの書き込みにおいて、フラグセルＦＣ１は、ベリファイ電位“ｂ＊’”まで書き込まれ、フラグセルＦＣ２は、ベリファイ電位“ｄ＊’”まで書き込まれる。次いで、図２９、図３０に示す書き込み動作により、第３ページの書き込みにおいて、フラグセルＦＣ３は、ベリファイ電位“ａ’”まで書き込まれる。第２ページの書き込みにおいて、ベリファイ電位“ｂ＊’”まで書き込まれたフラグセルＦＣ１は、第３ページの書き込みによりベリファイ電位“ｂ’”まで書き込まれる。第２ページの書き込みにおいて、ベリファイ電位“ｄ＊’”まで書き込まれたフラグセルＦＣ２は、第３ページの書き込みによりベリファイ電位“ｄ’”まで書き込まれる。
【０２４２】
図３１（ａ）は、第１ページの読み出しアルゴリズムを示し、図３１（ｂ）は第２ページの読み出しアルゴリズムを示している。
【０２４３】
図３１（ａ）において、図２７（ａ）と異なるのは、電位“ｄ”による読み出し（Ｓ１３１）の後の判別である。第２の実施形態において、この判別は、フラグセルＦＣ５から読み出したデータに基づいて行なった（Ｓ１３２）。これに対して、第３の実施形態において、この判別は、フラグセルＦＣ２から読み出したデータに基づいて行なわれる（Ｓ２０１）。その他の動作は、図２７（ａ）と同様である。
【０２４４】
また、図３１（ｂ）において、図２７（ｂ）と異なるのは、電位“ｂ”による読み出し（Ｓ１４１）の後の判別である。第２の実施形態において、この判別は、フラグセルＦＣ４から読み出したデータに基づいて行なった（Ｓ１４２）。これに対して、第３の実施形態において、この判別は、フラグセルＦＣ２から読み出したデータに基づいて行なわれる（Ｓ２１１）。その他の動作は、図２７（ｂ）と同様である。
【０２４５】
第３ページの読み出しアルゴリズムは、図２８に示す第２の実施形態と同様である。
【０２４６】
上記第３の実施形態によれば、３つのフラグ用データ記憶回路と、３つのフラグセルにより、第２の実施形態と同様にプログラムベリファイを高速化することができる。しかも、フラグ用データ記憶回路とフラグセルの数を削減することができるため、チップの占有面積を削減できる利点を有している。
【０２４７】
尚、上記第１の実施形態の第２ページの書き込み、及び第２、３の実施形態の第３ページの書き込みにおいて、メモリセルにデータ“１”を書き込んだ場合、ＳＤＣが空く。このため、ＳＤＣに、次に書き込むべきデータを供給することが可能である。このように、次に書き込むべきデータを予めＳＤＣに記憶させることにより、一層書き込み速度を高速化することができる。
【０２４８】
さらに、ＳＤＣが空いた場合、プログラム動作を一時停止し、別のページのメモリセルからデータを読み出し、この読み出し結果をＳＤＣに記憶し、ＳＤＣから外部に出力している間に、停止していたプログラム動作を再開するように構成することも可能である。
【０２４９】
尚、フラグセルの数及び配置は、上記各実施形態に限定されるものではない。
【０２５０】
図３２は、フラグセルを複数配置した場合の例を示すものである。この例は、信頼性を向上させるため、メモリセルアレイの一端部に複数の第１、第２のフラグセルとダミーセルを配置している。すなわち、偶数ページ（ＢＬＥ）用に４個の第１のフラグセルと、３個の第２のフラグセルを配置し、奇数ページ（ＢＬＯ）用に４個の第１のフラグセルと、３個の第２のフラグセルを配置している。偶数、及び奇数ページ用の第２のフラグセルの両側には偶数用ダミーセル、奇数用ダミーセルが配置されている。
【０２５１】
このような構成において、データの読み出し時に、遇数ページの４個の第１のフラグセルの多数決と、３個の第２のフラグセルの多数決を求めることにより、遇数ページにおける第２ページの書き込みの有無を判断する。また、奇数ページ用の４個の第１のフラグセルの多数決と、３個の第２のフラグセルの多数決を求めることにより、奇数ページにおける第２ページの書き込みの有無を判断する。このような構成とすれば、隣接するセルのＦＧ−ＦＧ間容量により、後に書いた隣接セルの閾値電圧により、先に書いたセルの閾値電圧が変化した場合においても、確実に第２ページが書き込まれたかどうかを判断することができる。
【０２５２】
（第４の実施形態）
多値データを記憶する不揮発性半導体記憶装置の場合、記憶するデータのビット数が多い場合、１つの閾値分布を狭くしなくてはならない。このため、プログラム及びベリファイ動作において、プログラム電圧を少しずつ上昇させて書き込み動作を行ない、本来のベリファイ電位より低いベリファイ電位を超えた場合、ビット線に中間電位を入力することにより、プログラム動作中の書き込みスピードを遅くし、この状態で本来のベリファイ電位まで書き込むことが提案されている。しかし、本来より低いベリファイ電位を超えていることと、本来のベリファイ電位を超えていることの区別が必要である。このため、ページバッファの数が増大するという課題がある。
【０２５３】
第４の実施形態は、第１の実施形態とほぼ同様の動作であるが、第２ページのプログラムベリファイにおけるベリファイ電位“ｂ’”“ｃ’”によるデータ“２”、“３”の同時ベリファイのみが異なっている。第１の実施形態において、閾値電圧“ｂ’”“ｃ’”に書き込むセルは、本来の閾値電圧より低いベリファイ電位まで書き込み、このベリファイ電位を超えたセルに対しては、ビット線に中間電位を供給して書き込みスピードを遅くし、閾値電圧の分布幅を狭めることはしなかった。閾値電圧“ｂ’”に書き込むセルは、図３３（ａ）に示すように、第１ページの書き込み時に“ｖ’”のレベルまで書き込みが行われている。したがって、書き込みスピードが遅くなるため、このような操作は、不必要であるかもしれない。しかし、閾値電圧“ｃ’”に書き込むセルも、第１ページの書き込み時に“ｖ’”のレベルまで書き込まれているが、“ｖ’”と“ｃ’”のレベルに差がある。このため、閾値電圧“ｃ’”のベリファイにおいて、本来の閾値電圧より低いベリファイ電位まで書き込み、このレベルを超えたセルに対しては、ビット線に中間電位を供給して書き込みスピードを遅くし閾値分布幅を狭めたほうがよい。このため、閾値電圧“ｃ’”のベリファイでは、先ず、本来より低いベリファイ電位“ｃ＊’”と、本来のベリファイ電位“ｃ’”とで行なう。
【０２５４】
図３４は、第４の実施形態に係る第１ページの書き込み動作を示している。図３４のＳ３０１〜Ｓ３０８に示す第１の書き込み動作、及び図３６に示すデータキャッシュにデータは、第１の実施形態と同様であるため、説明は省略する。
【０２５５】
図３５は、第２ページの書き込み動作を示している。第２ページの書き込みにおいて、Ｓ３１１〜Ｓ３２２までの動作は、第１の実施形態と殆ど同じである。しかし、ベリファイ電位“ｂ”“ｃ＊’”“ｃ’”による同時ベリファイが第１の実施形態と異なっている。
【０２５６】
（ベリファイ電位“ｂ”“ｃ＊’”“ｃ’”同時ベリファイ）（図３７、図３８）。
【０２５７】
図３５において、プログラム及びベリファイファイを何回か繰り返すと、メモリセルにデータ“３”を書き込みでいるセルも書き込みが終了する。このため、ベリファイ電位“ｂ’”を用いたベリファイ（Ｓ３２２）に替わり、ベリファイ電位“ｂ’”“ｃ＊’”“ｃ’”を用いた同時ベリファイを行なう（Ｓ３２４）。先ず、信号ＢＬＰＲＥ＝ハイレベル（Ｖｄｄ＋Ｖｔｈ）、ＶＰＲＥ＝ハイレベル（Ｖｄｄ＋Ｖｔｈ）、信号ＢＬＣＬＡＭＰを所定電位に設定し、ビット線をプリチャージする。
【０２５８】
次に、ワード線にベリファイ電位“ｂ’”を供給しビット線を放電する。ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。
【０２５９】
この後、ＴＤＣをＶｄｄに充電した後、信号ＢＬＣＬＡＭＰを所定の電位とする。すると、ＴＤＣが“１”（ハイレベル）になるのは、閾値電圧がベリファイ電位“ｂ’”以上の場合である。ここで、信号ＢＬＣ１が中間電位、例えばＶｔｈ＋０．５Ｖであるとすると、ＰＤＣが“０”（ローレベル）の場合（メモリセルのデータ“３”に書き込んでいる場合と、メモリセルにデータ“１”を書き込んでいる場合で、ベリファイ電位“ａ＊’”以下の場合）、ＴＤＣはＶｓｓになる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルがデータ“２”に書き込まれていて、ベリファイ電位“ｂ’”に達した時である。次に、信号ＶＲＥＧをハイレベル（例えばＶｄｄ）、信号ＲＥＧをＶｓｇ（例えばＶｄｄ＋Ｖｔｈ）とすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“２”を書き込んでいてベリファイ電位“ｂ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０２６０】
次に、ワード線にベリファイ電位“ｃ＊’”を供給しビット線を放電する。
【０２６１】
この後、ＴＤＣをＶｄｄに充電した後、信号ＢＬＣＬＡＭＰを所定の電位とする。ＴＤＣがＶｄｄになるのは、メモリセルのデータを“３”に書き込みを行なっていてベリファイ電位“ｃ＊’”に達した時である。次に、信号ＶＲＥＧをハイレベル、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“３”を書き込んでいてベリファイ電位“ｃ＊’”に達した時と、メモリセルにデータ“２”を書き込んでいる場合と、メモリセルにデータ“１”を書き込んでいる場合で、ベリファイ電位“ａ＊’”が以上の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｄｄ＋ＶｔｈとしてＴＤＣの電位をＰＤＣに取りこむ。
【０２６２】
次に、ワード線にベリファイ電位“ｃ’”を供給しビット線を放電する。
【０２６３】
この後、ＴＤＣをＶｄｄに充電した後、信号ＢＬＣＬＡＭＰを所定の電位とする。ＴＤＣがＶｄｄになるのは、メモリセルのデータが“３”に書き込まれていてベリファイ電位“ｃ’”に達した時である。次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“３”を書き込んでいてベリファイ電位“ｃ’”に達した時と、書き込み非選択の場合である。さらに、信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０２６４】
これらの動作により、メモリセルにデータ“３”を書き込んでいて、ベリファイ電位“ｃ＊’”を超え、本来のベリファイ電位での書き込みが完了とならなかった場合、ＤＤＣはハイレベル、ＰＤＣはローレベル、ＳＤＣはローレベルとなり、メモリセルにデータ“２”を書き込んでいる場合と同様になる。このため、次のプログラムにおいて、ＤＤＣはハイレベルとなっているため、ビット線が中間電位（例えば１Ｖ）となり書き込みが行われる。
【０２６５】
また、この後、ベリファイ電位“ｂ’”“ｃ＊’”“ｃ’”同時ベリファイにおいて、閾値電圧“ｂ’”のベリファイ時に、閾値電圧は当然“ｃ＊’”以上にあるため、このベリファイはパスし、ＰＤＣがハイレベルとなる。したがって、メモリセルにデータ“３”を書き込んでいて、ベリファイ電位“ｃ＊’”を超えた場合、１回だけビット線を中間電位にして書き込みが行なわれる。
【０２６６】
このようにして、全てのＰＤＣのデータが“１”になるまで、プログラムとベリファイ動作が繰り返される。しかし、書き込み動作において、ＤＤＣのデータが“１”の場合、つまり、メモリセルにデータ“２”を書き込んでいる場合と、メモリセルにデータ“３”を書き込んでいてベリファイ電位“ｃ＊’”を超えたとき（これはメモリセルにデータ“２”を書き込んでいる場合と同じになる）、とデータ“１”を書き込んでいてベリファイ電位“ａ＊’”を超えている場合、ビット線を中間電位にして書き込み動作をする。
【０２６７】
また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Ｖｐｇｍを少しずつ上昇させる。このプログラム電圧Ｖｐｇｍの増分ΔＶｐｇｍは、第１ページの書き込み動作と、第２の書き込み動作で相違されており、例えば第１ページの書き込み動作における増分ΔＶｐｇｍは、第２の書き込み動作における増分ΔＶｐｇｍより大きく設定されている。
【０２６８】
図３５に示すフローチャートでは、プログラムとベリファイ“ａ＊，ａ’”（Ｓ３１６，Ｓ３１９）を数回繰り返した後に、プログラムとベリファイ“ａ＊’，ａ’”とプログラムベリファイ“ｂ’”を数回繰り返し、プログラムとベリファイ“ａ＊’，ａ’”とプログラムベリファイ“ｂ’，ｃ’”を数回繰り返す。この途中でメモリセルへのデータ“１”の書き込みは、早く終了する。このため、データ“１”を書き込むべきセルが無くなった場合、プログラムベリファイ“ａ＊’，ａ’”をスキップし（Ｓ３１８〜Ｓ３２０）、プログラムとプログラムベリファイ“ｂ’”（Ｓ３１６、Ｓ３２２）、又はプログラムとプログラムベリファイ“ｂ’，ｃ＊’，ｃ’”（Ｓ３１６−Ｓ３２６）を繰り返すようになる。プログラムとベリファイ“ａ＊’，ａ’”（Ｓ３１６、Ｓ３１９）をスキップする場合、ＳＤＣは使用しなくなる。このため、次のプログラムデータを入力することができる。しかし、稀に、メモリセルにデータ“１”がなかなか書けないセルもある。したがって、プログラムベリファイ“ａ＊，ａ’”の回数を制限している。
【０２６９】
（リード動作）
リード動作は、第１の実施形態と同様である。
【０２７０】
（イレーズ）
消去動作は、前述したように、先ず、アドレスを指定し、図３の破線で示すブロックを選択する。次に、セルが形成されたウエルの電位を高電圧（約２０Ｖ）にし、選択ブロックのワード線をＶｓｓ、非選択ブロックのワード線をフローティングにする。すると、選択ブロックのセルとウエル間に高電圧が加わり、セルに記憶されたデータが消去される。一方、非選択ブロックにおいて、ワード線はフローティング状態であるため、ウエルを高電圧にすると、ワード線も高電圧になる。このため、非選択ブロックのメモリセルに記憶されたデータは消去されない。
【０２７１】
消去動作を行なうと、メモリセルのデータは“０”となり、第１ページ、第２ページの何れでリードを行なってもデータ“１”が出力される。
【０２７２】
（消去後書き込み）
図３３（ｅ）は、消去後の閾値電圧の例を示している。上記のように、消去動作はブロック内の複数のメモリセルのデータを一括して消去するため、図３３（ｅ）に示すように、図３３（ａ）に示す閾値電圧より低い電圧まで消去されている場合がある。このように、本来の閾値電圧より低い電圧まで消去されているメモリセルがある場合、アッパーページ（例えば２ページ）のプログラムにおいて、メモリセルのデータ“０”を“１”に書き込む際、閾値電圧が変化する範囲が大きくなる。このため、浮遊ゲートと浮遊ゲートのカップリングにより、隣接するセルの閾値電圧が変化してしまう。
【０２７３】
したがって、図３３（ｆ）に示すように、隣接するセルの閾値電圧の変化を防止するため、消去後、僅かな書き込みを行ない。本来の閾値電圧より低い負の電圧まで消去されているセルの閾値電圧を本来の閾値電圧までもどす。
【０２７４】
消去後書き込みにおいて、先ず、全データ記憶回路のＰＤＣがローレベルにセットされる。この後、データ記憶回路に接続された２本のビット線ＢＬＥとＢＬＯに接続されたセルに対して同時に書き込み動作を行なう。書き込みベリファイは、２本のビット線のうち１本ずつ行なう。しかし、フロック内の全セルについてベリファイを行なうと時間がかかるため、全部のワード線を同一電位とし、１つのＮＡＮＤセルを一括してベリファイする。一方のビット線に関して、消去後の書き込みが完了した場合、ＰＤＣがハイレベルとなるようにし、次のプログラムが行なわないようにする。同様にして他方のビット線に関してベリファイ動作を行ない、全データ記憶回路のデータがハイレベルになるまで書き込み及びベリファイ動作を繰り返す。
【０２７５】
上記第４の実施形態によれば、第２ページの書き込みベリファイ動作の途中において、一度のビット線の充電に対して、ワード線の電位を閾値電圧“ｂ’，ｃ＊’，ｃ’”の順に変更し、閾値電圧“ｂ’，ｃ＊’，ｃ’”を一括してベリファイしている。このため、高速なベリファイが可能であるため、高速な書き込みが可能となる。
【０２７６】
また、メモリセルにデータ“３”を書き込んでいる際において、本来のベリファイ電位より僅かに低いベリファイ電位を超えた場合、ビット線に中間電位を供給して書き込みを行なっている。このため、メモリセルに書き込まれる閾値電圧の分布を狭くすることができる。したがって、書き込み時の電圧のステップアップ幅を大きくすることが可能であるため、全体的な書き込み時間を短縮でき、高速な書き込みが可能となる。
【０２７７】
つまり、書き込み動作により、メモリセルが、データ“３”の閾値電圧に達したかどうかをベリファイする場合、本来のベリファイ電位“ｃ’”より低いベリファイ電位“ｃ*’”でベリファイし、この低いベリファイ電位“ｃ*’”を超えていて、本来のベリファイ電位“ｃ’”で書き込みが完了とならなかった場合、データ記憶回路内のＤＤＣ，ＰＤＣ，ＳＤＣはデータ“２”を書き込む時のデータとなるため、次の書き込みではビット線に中間電位を供給し、書き込みスピードを遅くしている。この後、データ“２”のベリファイ時、このメモリセルはベリファイをパスするため、このセルの書き込みは終了する。このため、メモリセルに書き込まれる閾値電圧の分布を狭くすることができる。
【０２７８】
しかも、本来のベリファ電位より低いベリファイ電位を超えているメモリセルと、本来のベリファイ電位を超えているメモリセルとを区別のためのデータ記憶回路を必要としないため、回路構成の増加を防止できる。
【０２７９】
（第５の実施形態）
上記第４の実施形態において、第２ページの書き込みは、次のように行っていた。すなわち、データ“３”を書き込むセルにおいて、本来のベリファイ電位“ｃ’”より低いベリファイ電位“ｃ＊’”を超えるセルに対し、中間電位を供給して、１回のみ書き込みを行ない、この後、書き込み完了としていた。しかし、データ“１”を書き込むセルについては、本来のベリファイ電位“ａ’”より低いベリファイ電位“ａ＊’”を超えるセルに対して、中間電位を供給し、本来のベリファイ電位“ａ’”まで書き込みを繰り返し行っていた。したがって、書き込むデータに応じて動作が若干異なっている。
【０２８０】
これに対して、第５の実施形態は、データ“１”を書き込むセルに対して、データ”３”を書き込むセルと同じように書き込みを行なう。すなわち、本来のベリファイ電位“ａ’”より低いベリファイ電位“ａ＊’”を超えるセルに対して、中間電位を供給して１回のみ書き込みを行ない、書き込みを完了する。また、第１ページのデータの書き込みに関しても、本来のベリファイ電位“ｖ’”より低いベリファイ電位“ｖ＊’”を超えるセルに対して、中間電位を供給して１回のみ書き込みを行ない。この後、書き込み完了する。
【０２８１】
以下、図３９乃至図４３を参照して具体的に説明する。
【０２８２】
（第１ページ書き込み）
先ず、第１ページの書き込みについて説明する。第１ページのプログラム、プログラムベリファイ動作は、図８に示す第１の実施形態の変形例と同様である。しかし、図３９（ａ）に示すように、プログラムベリファイにおいて、本来のベリファイ電位“ｖ’”より低いベリファイ電位“ｖ＊’”を超えるセルに対して、ＤＤＣに“１”を設定し、次のプログラムの時にＰＤＣが“０”、ＤＤＣが“１”の場合、ビット線に中間電位（例えば１Ｖ）を供給して書き込みを行なう。
【０２８３】
ＴＤＣはキャパシタにより構成されているため、この書き込みリカバリー中において、図３９（ｂ）（データリフレッシュ１後）に示すように、ＤＤＣのデータをＴＤＣに移し、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣ移す。
【０２８４】
さらに、再び、図３９（ｃ）（データリフレッシュ２後）に示すように、ＤＤＣのデータをＴＤＣに移し、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移し、ＤＤＣのデータをリフレッシュする。しかし、図３９（ｃ）に示す操作において、ＤＤＣのデータをＴＤＣのデータに移すとき、図３９（ｂ）に示すＴＤＣの値（ベリファイ電位“ａ＊’”を超える→１）をリセットせずに、ＤＤＣのデータ（１：書き込み非選択、０：書き込み）を移すと、ＴＤＣの値がベリファイ電位“ａ＊’”を超える場合も“１”になるため、ＰＤＣには書き込み非選択となる。したがって、ベリファイ電位“ａ＊’”を超える場合、ビット線に１回のみ中間電位が供給されてプログラムされる。
【０２８５】
（第２ページ書き込み）
第２ページの書き込みは、本来のベリファイ電位“ａ’”より低いベリファイ電位“ａ＊’”を超えるセルに対して、ビット線に中間電位を供給し、１回のみ書き込みを行ない、書き込みを完了する。
【０２８６】
プログラムベリファイ動作は、図３５と同様である。プログラムベリファイにおいて、本来のベリファイ電位“ａ’”より低いベリファイ電位“ａ＊’”を超えるセルに対しては、図４０に示すように、ＤＤＣを“１”にし、次のプログラム時にＰＤＣが“０”でＤＤＣが“１”の場合、ビット線に中間電位を供給して書き込みを行なう。したがって、この中間電位をビット線に供給して１回書き込みを行なった後、ＰＤＣを“１”にして書き込み完了とする。
【０２８７】
以下、動作について具体的に説明する。
【０２８８】
プログラム中に、信号ＢＬＣＬＡＭＰをローレベルとし、ＰＤＣ及びＤＤＣをビット線から切り離す。ビット線は容量が大きいため、切り離されても、書き込みは継続して行なわれる。
【０２８９】
この後、信号ＢＬＰＲＥをハイレベル、信号ＶＰＲＥをハイレベルとしてＴＤＣをハイレベルとする。さらに、信号ＲＥＧをハイレベル、信号ＶＲＥＧをローレベルとして、ＤＤＣが“１”の場合、ＴＤＣをローレベルとし、ＤＤＣが“０”の場合、ＴＤＣをハイレベルのままとする。この状態において、ＴＤＣのデータをＰＤＣに移すと同時に、ＤＴＧをハイレベルとし、図４１（ａ）に示すように、ＤＤＣにもＰＤＣと同じデータを保持させる。
【０２９０】
次に、信号ＢＬＣ２をハイレベルとしてＳＤＣのデータをＴＤＣに移し、信号ＲＥＧをハイレベル、信号ＶＲＥＧをＶｓｓとする。この状態において、ＤＤＣが“１”の場合、強制的に、ＴＤＣをローレベルにした後、ＴＤＣのデータをＰＤＣに移す（図４１（ｂ））。
【０２９１】
この後、信号ＢＬＰＲＥをハイレベルとし、信号ＶＰＲＥをハイレベルとしてＴＤＣをハイレベルとする。さらに、信号ＲＥＧをハイレベル、信号ＶＲＥＧをローレベルとして、ＤＤＣが“１”の場合、ＴＤＣをローレベルとする。ＤＤＣが“０”の場合、ＴＤＣをハイレベルのままとし、信号ＤＴＧを“１”としてＰＤＣのデータをＤＤＣに移した後、ＴＤＣのデータをＰＤＣに移す（図４２（ａ））。
【０２９２】
次に、信号ＢＬＰＲＥをハイレベルとし、信号ＶＰＲＥをハイレベルとしてＴＤＣをハイレベＨとした後、信号ＢＬＣＬＡＭＰを所定の電圧とする。すると、ビット線がローレベル（“０”）又は中間電位の場合、ＴＤＣはローレベル、ビット線がハイレベルの場合、ＴＤＣはハイレベルとなる。この後、信号ＶＲＥＧをＶｄｄとし、信号ＲＥＧをハイレベルとして、ＤＤＣがハイレベルの場合、ＴＤＣを強制的にハイレベルにする。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。ＤＤＣのデータは元々保持されたデータとなる。しかし、ＰＤＣはＤＤＣがハイレベルであり、ＳＤＣがハイレベルであった場合、つまり、本来のベリファイ電位“ａ’”より低いベリファイ電位“ａ＊’”を超える場合、ハイレベル、つまり書込み非選択となる。したがって、ベリファイ電位“ａ＊’”を超える場合、１回のみビット線が中間電位になりプログラムが行なわれる（図４２（ｂ））。
【０２９３】
上記第５の実施形態によれば、第２ページの書き込みにおいて、データ“１”を書き込むメモリセルと、データ“３”を書き込むメモリセルに対して、同一の書き込み方式によりデータを書き込むことができる。つまり、本来のベリファイ電位“ａ’”より低いバリファイ電位“ａ＊’”を超えるセルに対して中間電位を供給して１回のみ書き込みを行ない。この後、書き込み完了としている。このため、高速な書き込み動作を実現できる。
【０２９４】
しかも、第１ページのデータの書き込みにつても、本来のベリファイ電位“ｖ’”より低いベリファイ電位“ｖ＊’”を超えるセルに対して、中間電位を供給して１回のみ書き込みを行ない、書き込み完了としている。このため、一層高速な書き込み動作を実現できる。
【０２９５】
（第６の実施形態）
次に、図４３乃至図５２を参照して、本発明の第６の実施形態について説明する。
【０２９６】
第６の実施形態において、メモリセルアレイの構成及びデータ記憶回路の配置は、第２及び第３の実施形態と同じである。すなわち、第６の実施形態は、１つのメモリセルに８値（３ビット）のデータを記憶する。
【０２９７】
図４３（ａ）（ｂ）（ｃ）、図４４（ａ）（ｂ）に示す第６の実施形態の書き込みデータとメモリセルの閾値電圧の関係は、図２０（ａ）（ｂ）（ｃ）、図２１（ａ）（ｂ）と同様である。また、第１ページ、第２ページのプログラム動作は、第４の実施形態とほぼ同様の動作である。すなわち、第１ページ、第２ページのプログラム動作において、メモリセルのデータが本来の閾値電圧に達したかどうかをベリファイする際、通常より低いベリファイ電位を用いてベリファイされている。第６の実施形態は、第３ページのプログラムが第４の実施形態と相違する。
【０２９８】
（第３ページプログラム）
図４５、図４６は、第３ページプログラムのブロックダイアグラムを示している。第３ページのプログラム動作も、先ずアドレスを指定し、図１９に示す３ページを選択する。
【０２９９】
次に、データ記憶回路１０をリセットし（Ｓ３５１）、書き込みデータを外部より入力して全てのデータ記憶回路１０のＳＤＣに記憶する（Ｓ３５２）。外部よりデータ“１”（書き込みを行なわない）が入力されると、図６に示すデータ記憶回路１０のＳＤＣは、ローレベルになり、データ“０”（書き込みを行なう）が入力されるとハイレベルとなる。
【０３００】
第３ページのプログラムは、図４４（ｂ）に示すように、メモリセルのデータが“０”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータを“０”のままとし、外部から入力されるデータが“０”の場合、メモリセルのデータを“１”にする。
【０３０１】
メモリセルのデータが“２”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータは“２”のままである。しかし、第２ページの書き込み時において、メモリセルのデータが“２”に達したかどうかをベリファイする際、通常より低いベリファイ電位“ｂ＊’”を用いた。このため、データ“２”を記憶するメモリセルは、本来のベリファイ電位である“ｂ’”の電位まで書き込む。メモリセルのデータが“２”の場合で、外部から入力されるデータが“０”の場合、メモリセルのデータを“３”にする。
【０３０２】
メモリセルのデータが“４”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータは“４”のままである。しかし、第２ページの書き込み時において、メモリセルのデータが“４”に達したかどうかをベリファイする際、通常より低いベリファイ電位“ｄ＊’”を用いた。このため、データ“４”を記憶するメモリセルは、本来のベリファイ電位である“ｄ’”の電位まで書き込む。メモリセルのデータが“４”の場合で、外部から入力されるデータが“０”の場合、メモリセルのデータを“５”にする。
【０３０３】
メモリセルのデータが“６”の場合で、外部から入力されるデータが“１”の場合、メモリセルのデータを“６”のままである。しかし、第２ページの書き込み時において、メモリセルのデータが“６”に達したかどうかをベリファイする際、通常より低いベリファイ電位“ｆ＊’”を用いた。このため、データ“６”を記憶するメモリセルは、本来のベリファイ電位である“ｆ’”の電位まで書き込む。メモリセルのデータが“６”の場合で、外部から入力されるデータが“０”の場合、メモリセルのデータを“７”にする。
【０３０４】
第６の実施形態では、このようにして書き込みを行なうが、書き込み及び読み出されるデータとメモリセルのデータを、第２及び第３の実施形態と同じようにすることも可能である。
【０３０５】
また、データ“３”、“５”、“７”への書き込みセルに関しては、本来のベリファイ電位より低い閾値でベリファイ動作を行ない。このレベルを超えていた場合で、本来のベリファイ電位で書き込み完了とならなかった場合、次の書き込み時は、ビット線に中間電位を供給して書き込みスピードを遅くし、１回のみ書き込みを行ない書き込み完了とする。本来のベリファイ電位を超えているセルは、その時点で書き込みが終了となる。
【０３０６】
また、メモリセルにデータ“１”を書き込むセルに関しては、本来のベリファイ電位より低いベリファイ電圧でベリファイ動作を行なう。そして、この本来より低いベリファイ電位を超えていた場合、次の書き込み以降、ビット線に中間電位を供給して書き込みスピードを遅くし、本来のベリファイ電位を超えるまで書き込む。
【０３０７】
（第３ページ第１回目プログラム）
第３ページのプログラムは、メモリセルにデータ“１”〜“７”を書き込む。これらのデータを同時にプログラムすることも可能であるが、第６の実施形態では、先ず、メモリセルにデータ“４”〜“７”の４つのデータを書き込む。この後、メモリセルにデータ“１”〜“３”を書き込む。以下、具体的に説明する。
【０３０８】
先ず、データ記憶回路がリセットされ、外部よりデータ記憶回路のＳＤＣにデータがロードされる（図４５、Ｓ３５１、Ｓ３５２）。
【０３０９】
（内部データリード１及びデータキャッシュ設定１）（Ｓ３５３、Ｓ３５４）
メモリセルへデータを書き込む前に、第２ページのメモリセルのデータが“４”、“６”か、“０”、“２”であるかの判断と、メモリセルのデータが“６”か、データが“０”、“２”、“４”のいずれであるかを判断する。このため、ワード線の電位を“ｄ＊”、“ｆ＊”に順次設定し、メモリセルに書き込まれているデータが読み出され、データキャッシュに設定される。
【０３１０】
図４７（ａ）は、内部リード後のデータキャッシュの状態を示している。この後、データキャッシュを操作することにより、図４７（ｂ）に示すように、データキャッシュを設定する。さらに、例えばカウンタ（ＰＣ）をゼロに初期設定し、第５のフラグセルのデータをロードする。
【０３１１】
図４７（ｂ）において、メモリセルのデータを“０”〜“３”にする場合、ＰＤＣはハイレベル（“１”）。メモリセルのデータを“４”とする場合、ＰＤＣはローレベル（“０”）、ＤＤＣはハイレベル、ＳＤＣはハイレベルに設定する。メモリセルのデータを“５”とする場合、ＰＤＣはローレベル、ＤＤＣはローレベル、ＳＤＣはハイレベルに設定する。メモリセルのデータを“６”とする場合、ＰＤＣはローレベル、ＤＤＣはハイレベル、ＳＤＣはローレベルに設定する。メモリセルのデータを“７”とする場合、ＰＤＣ、ＤＤＣ、ＳＤＣをいずれもローレベルに設定する。
【０３１２】
（プログラム：第１回目）（Ｓ３５５）
次いで、カウンタ（ＰＣ）をカウントアップした後、メモリセルにデータが書き込まれる。第６の実施形態においても、第２の実施形態と同様、カウンタの値と予め定められたベリファイ開始回数を用いて、不要なベリファイがスキップされる。
【０３１３】
先ず、信号ＢＬＣ１をＶｓｇとすると、ＰＤＣがデータ“０”の場合、ビット線がＶｓｓとなり、データ“１”の場合、ビット線はＶｄｄになる。次に、信号ＢＬＣ１をＶｓｓに設定した後、信号ＶＲＥＧをＶｄｄ、信号ＲＥＧを中間電位（例えば１Ｖ＋Ｖｔｈ）に設定する。ＤＤＣがデータ“１”の場合、ビット線が中間電位となり、ＤＤＣがデータ“０”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“５”，“７”を書き込んでいるときのみビット線はＶｓｓ、メモリセルにデータ“４”，“６”を書き込んでいる場合、ビット線は中間電位（例えば１Ｖ）、メモリセルのデータが“０”〜“３”の場合（書き込みしない場合）、ビット線はＶｄｄになる。ここで、選択ワード線をＶｐｇｍ、非選択ワード線をＶｐａｓｓとすると、ビット線がＶｄｄの場合、書き込みが行なわれない。また、ビット線がＶｓｓの場合、書き込みが起こり、ビット線が中間電位（例えば１Ｖ）の場合、少しだけ書き込まれる。したがって、メモリセルにデータ“４”，“６”を書き込んでいるセルは、あまり書き込まれない可能性がある。しかし、メモリセルのデータ“４”とデータ“５”のベリファイとメモリセルのデータ“６”とデータ“７”のベリファイはそれぞれ一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。このため、ビット線に中間電位を供給する。
【０３１４】
（“ｄ’”のみのベリファイ）（Ｓ３５６−Ｓ３５８、図４８（ａ））
この後、ベリファイ電圧“ｄ’”を設定して書き込みベリファイが行なわれる。先ず、信号ＢＬＣ２をハイレベルとし（Ｖｄｄ＋Ｖｔｈ）、信号ＢＬＣＬＡＭＰを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、ＳＤＣがハイレベル、つまり、データ“５”、“４”を書き込んでいるメモリセルのみである。
【０３１５】
次に、ワード線にベリファイ電位“ｄ’”を供給し、ビット線を放電する。ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、メモリセルにデータ“４”及び“５”を書き込んでいて、ベリファイ電位“ｄ’”以上になったときである。この後、信号ＢＬＣ１を中間電位（Ｖｔｈ＋０．５Ｖ）にすると、ＰＤＣがローレベルの場合、メモリセルにデータ“５”を書き込んでいる場合、ＴＤＣがローレベルになる。したがって、ＴＤＣがハイレベルになるのは、メモリセルにデータ“４”を書き込んでいて、ベリファイ電位“ｄ’”以上になったときである。
【０３１６】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“４”を書き込んでいてベリファイ電位“ｄ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３１７】
（“ｄ’”“ｅ＊’”“ｅ’”同時ベリファイ）（Ｓ３５９−Ｓ３６１、図４８（ｂ））
プログラムを数回繰り繰り返すと、メモリセルに対するデータ“５”への書き込みも完了してくる。したがって、ベリファイ“ｅ’”のベリファイも行なう。このベリファイは、“ｄ’”“ｅ＊’”“ｅ’”レベルのベリファイを同時に行なう。
【０３１８】
先ず、信号ＢＬＣ２をハイレベルとし、信号ＢＬＣＬＡＭＰを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、ＳＤＣがハイレベル、つまり、データ“５”、“４”を書き込んでいるメモリセルのみである。
【０３１９】
次に、ワード線にベリファイ電位“ｄ’”を供給し、ビット線を放電する。ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、メモリセルにデータ“４”及び“５”を書き込んでいて、ベリファイ電位“ｄ’”以上になったときである。この後、信号ＢＬＣ１を中間電位（Ｖｔｈ＋０．５Ｖ）にすると、ＰＤＣがローレベルの場合、メモリセルにデータ“５”を書き込んでいるとき、ＴＤＣがローレベルになる。したがって、ＴＤＣがハイレベルになるのは、メモリセルにデータ“４”を書き込んでいて、ベリファイ電位“ｄ’”以上になったときである。
【０３２０】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“４”を書き込んでいてベリファイ電位“ｄ’”に達した時と、書き込み非選択の場合である。さらに、信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３２１】
この後、ワード線にベリファイ電位“ｅ＊’”を供給し、ビット線を放電する。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定すると、ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ｅ＊’”以上の場合である。つまり、メモリセルのデータが“５”に書き込まれていてベリファイ電位“ｅ＊’”に達した時である。
【０３２２】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“５”を書き込んでいてベリファイ電位“ｅ＊’”に達した時と、メモリセルにデータ“０”“２”“４”“６”を書き込んでいる場合である。次いで、信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３２３】
この後、ワード線にベリファイ電位“ｅ’”を供給し、ビット線を放電する。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ｅ’”以上の場合である。つまり、メモリセルのデータが“５”に書き込まれていてベリファイ電位“ｅ’”に達した時である。
【０３２４】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“５”を書き込んでいてベリファイ電位“ｅ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３２５】
メモリセルにデータ“５”を書き込んでいてベリファイ電位“ｅ＊’”に達し、ベリファイ電位“ｅ’”のベリファイで書き込み完了にならなかった場合のデータ記憶回路データは、ＳＤＣ＝“１”、ＤＤＣ＝“１”、ＰＤＣ＝“０”となり、メモリセルにデータ“４”を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ“５”を書き込んでいてベリファイ電位“ｅ＊’”に達した場合、メモリセルにデータ“４”が書き込み状態となる。メモリセルにデータ“４”を書き込む場合、ビット線に中間電位を供給されている。このため、次の書き込みではメモリセルに少しだけ書き込みが行われる。また、このセルは、次の“ｄ’”“ｅ＊’”“ｅ’”同時ベリファイにおいて、“ｄ’”のベリファイで、セルの閾値電圧が“ｅ＊’”以上に存在するため、必ずベリファイをパスすることとなり、２回目以降の書き込みは行なわれなくなる。
【０３２６】
（ベリファイ電位“ｆ’”のみを用いたベリファイ）（Ｓ３６２−Ｓ３６４、図４９（ａ））
ベリファイ電位“ｆ’”のみを用いたベリファイは、先ず、信号ＶＰＲＥをハイレベルとし、信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとし、信号ＢＬＣＬＡＭＰを所定の電位に設定すると、ビット線がプリチャージされる。
【０３２７】
次に、ワード線にベリファイ電位“ｆ’”を供給し、ビット線を放電する。ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、メモリセルにデータ“６”及び“７”を書き込んでいて、ベリファイ電位“ｆ’”以上になったときである。この後、信号ＢＬＣ１を中間電位（Ｖｔｈ＋０．５Ｖ）にすると、ＰＤＣがローレベルの場合、メモリセルにデータ“７”を書き込んでいる場合、ＴＤＣがローレベルになる。したがって、ＴＤＣがハイレベルになるのは、メモリセルにデータ“６”を書き込んでいて、ベリファイ電位“ｆ’”以上になったときである。
【０３２８】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“６”を書き込んでいてベリファイ電位“ｆ’”に達した時と、書き込み非選択の場合である。次いで、信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３２９】
（“ｆ’”“ｇ＊’”“ｇ’”同時ベリファイ）（Ｓ３６５，Ｓ３６６、図４９（ｂ））
プログラムを数回繰り繰り返すと、メモリセルのデータ“７”への書き込みが完了してくる。したがって、ベリファイ“ｇ’”のベリファイも行なう。このベリファイは、“ｆ’”“ｇ＊’”“ｇ’”のベリファイを同時に行なう。
【０３３０】
先ず、信号ＶＰＲＥをハイレベルとし、信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとし、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ビット線がプリチャージされる。
【０３３１】
次に、ワード線にベリファイ電位“ｆ’”を供給し、ビット線を放電する。ビット線の放電中にＤＤＣのデータをＴＤＣに移す。この後、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、メモリセルにデータ“６”及び“７”を書き込んでいて、ベリファイ電位“ｆ’”以上になったときである。この後、信号ＢＬＣ１を中間電位（Ｖｔｈ＋０．５Ｖ）にすると、ＰＤＣがローレベルの場合、メモリセルにデータ“７”を書き込んでいる場合ＴＤＣがローレベルになる。したがって、ＴＤＣがハイレベルになるのは、メモリセルにデータ“６”を書き込んでいて、ベリファイ電位“ｆ’”以上になったときである。
【０３３２】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“６”を書き込んでいてベリファイ電位“ｆ’”に達した時と、書き込み非選択の場合である。次いで、信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３３３】
この後、ワード線にベリファイ電位“ｇ＊’”を供給し、ビット線を放電する。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ｇ＊’”以上の場合である。つまり、メモリセルのデータが“７”に書き込まれていてベリファイ電位“ｇ＊’”に達した時である。
【０３３４】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“７”を書き込んでいてベリファイ電位“ｇ＊’”に達した時と、メモリセルにデータ“０”“２”“４”“６”を書き込んでいる場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３３５】
この後、ワード線にベリファイ電位“ｇ’”を供給し、ビット線を放電する。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ｇ’”以上の場合である。つまり、メモリセルのデータが“７”に書き込まれていてベリファイ電位“ｇ’”に達した時である。
【０３３６】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“７”を書き込んでいてベリファイ電位“ｇ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３３７】
メモリセルにデータ“７”を書き込んでいてベリファイ電位“ｇ＊’”に達し、ベリファイ電位“ｇ’”のベリファイで書き込み完了にならなかった場合、データ記憶回路のデータは、ＳＤＣ＝“０”、ＤＤＣ＝“１”、ＰＤＣ＝“０”となり、メモリセルにデータ“６”を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ“７”を書き込んでいてベリファイ電位“ｇ＊’”に達した場合、メモリセルにデータ“６”を書き込む状態となる。メモリセルに対するデータ“６”への書き込みは、ビット線に中間電位を供給している。このため、次の書き込みでは少しだけ書き込みが行われる。また、このセルは、次の“ｆ’”“ｆ＊’”“ｇ’”同時ベリファイにおいて、“ｆ’”のベリファイの際、セルの閾値電圧が“ｇ＊’”以上に存在する。このため、ベリファイは必ずパスとなり、２回目以降の書き込みは行なわれなくなる。
【０３３８】
このようにして、全てのＰＤＣのデータが“１”になるまで、プログラムとベリファイ動作を繰り返す（Ｓ３６７、Ｓ３６８）。しかし、書き込み動作において、ＤＤＣのデータが“１”の場合、つまり、メモリセルにデータ“４”を書き込んでいる場合と、メモリセルにデータ“６”を書き込んでいる場合と、メモリセルにデータ“５”を書き込んでいて、ベリファイ電位“ｅ＊’”を超えた場合と、メモリセルにデータ“７”を書き込んでいて、ベリファイ電位“ｇ＊’”を超えた場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Ｖｐｇｍを少しずつ上昇させる。このようにして、第１回目プログラムにより、メモリセルにデータ“４”〜“７”の４つが書き込まれる。
【０３３９】
上記説明では、１回のプログラムの後、４つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらない。このため、初めは、ベリファイ電位“ｄ’”を用いたベリファイのみ行なう。次に、ベリファイ電位“ｄ’”“ｅ＊’”“ｅ’”を用いた同時ベリファイを行なう。次に、ベリファイ電位“ｄ’”“ｅ＊’”“ｅ’”を用いた同時ベリファイと、“ｆ’”のみを用いたベリファイを行なう。次に、ベリファイ電位“ｄ’”“ｅ＊’”“ｅ’”を用いた同時ベリファイと、“ｆ’”“ｇ＊’”“ｇ’”を用いた同時ベリファイを行なうことも可能である。
【０３４０】
また、プログラムの終了近くのループでは、メモリセルのデータ“４”、“５”への書き込みは終了している。このため、ベリファイ電位“ｄ’”“ｅ＊’”“ｅ’”を用いた同時ベリファイ動作を省略し、最後に、“ｆ’”“ｇ＊’”“ｇ’”を用いた同時ベリファイのみを行なうことも可能である。
【０３４１】
（第２回目プログラム）
第２回目プログラムにより、メモリセルにデータ“１”〜“３”の３つが書き込まれるが、データ“１”を書き込むメモリセルには、全く書き込みが行なわれていない。このため、第１の実施形態と同様に、本来のベリファイ電位より低いベリファイ電位“ａ＊’”を設け、このベリファイ電位を超えたセルに対して、ビット線に中間電位を供給する。これにより、書き込みスピードを遅くし、閾値分布を狭くする。また、メモリセルのデータ“２”とデータ“３”のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、メモリセルにデータ“２”を書き込んでいる場合にも、ビット線に中間電位を供給することにより、書き込みスピードを遅くする。
【０３４２】
（内部データリード２及びデータキャッシュ設定２）（Ｓ３６９，Ｓ３７０、図５０（ａ））
セルへの書き込みの前に、ワード線の電位を“ｂ＊（＝ａ）”、“ｄ＊”の順に設定し、内部リード動作を行なう。
【０３４３】
この後、データキャッシュを操作することにより、図５０（ａ）に示すように、データキャッシュを設定する。すなわち、メモリセルにデータ“０”を書き込む場合、ＰＤＣは“１”、ＤＤＣは“１”、ＳＤＣは“１”に設定する。メモリセルにデータ“１”を書き込む場合、ＰＤＣは“０”、ＤＤＣは“０”／“１”、ＳＤＣは“１”に設定する。メモリセルにデータ“２”を書き込む場合、ＰＤＣは“０”、ＤＤＣは“１”、ＳＤＣは“０”に設定する。メモリセルにデータ“３”を書き込む場合、ＰＤＣは“０”、ＤＤＣは“０”、ＳＤＣは“０”に設定する。メモリセルにデータ“４”〜“７”を書き込む場合、ＰＤＣは全て“１”に設定する。
【０３４４】
（プログラム：第２回目）（Ｓ３７１）
ここで、例えばカウンタ（ＰＣ）をゼロに初期設定する。
【０３４５】
次いで、例えばカウンタ（ＰＣ）をカウントアップした後、メモリセルにデータが書き込まれる。先ず、信号ＢＬＣ１を中間電位（Ｖｄｄ＋Ｖｔｈ）とすると、ＰＤＣがデータ“０”の場合、ビット線がＶｓｓとなり、データ“１”の場合、ビット線はＶｄｄになる。次に、信号ＢＬＣ１＝Ｖｓｓとした後、信号ＶＲＥＧ＝Ｖｄｄ、信号ＲＥＧ＝中間電位（例えば１Ｖ＋Ｖｔｈ）とする。すると、ＤＤＣがデータ“１”の場合、ビット線が中間電位（例えば１Ｖ）となり、ＤＤＣがデータ“０”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“３”を書き込んでいる時と、メモリセルにデータ“１”を書き込んでいて本来のベリファイ電位より低いベリファイ電位“ａ＊’”以下の場合、ビット線は、Ｖｓｓである。メモリセルにデータ“２”を書き込んでいる時と、メモリセルにデータ“１”を書き込んでいて本来のベリファイ電位より低いベリファイ電位“ａ＊’”を越えている場合、ビット線は中間電位（１Ｖ）、メモリセルのデータが“０”、“４”〜“７”の場合（書き込みしない場合）、ビット線はＶｄｄになる。ここで、選択ワード線をＶｐｇｍ、非選択ワード線をＶｐａｓｓとすると、ビット線がＶｄｄの場合、書き込みが行なわれない。また、ビット線がＶｓｓの場合、書き込みが起こり、ビット線が中間電位（１Ｖ）の場合、少しだけ書き込まれる。しかし、メモリセルにデータ“２”とデータ“３”を書き込む場合のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。
【０３４６】
（ベリファイ“ａ’、ａ＊’”）（Ｓ３７２−Ｓ３７４、図５０（ｂ））
ベリファイ電位“ａ’、ａ＊’”を用いたベリファイは、先ず、信号ＶＰＲＥをハイレベルとし、信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとし、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位“ａ＊’”を供給し、ビット線を放電する。
【０３４７】
次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ａ＊’”以上の場合である。次に、信号ＢＬＣ２を中間電位（Ｖｔｈ＋０．５Ｖ）にするとＳＤＣがＬの場合、ＴＤＣがＬとなる。つまり、ＴＤＣがハイレベルになるのは、メモリセルのデータが“１”に書き込まれていてベリファイ電位“ａ＊’”に達した時である。次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“１”を書き込んでいてベリファイ電位“ａ＊’”に達した時と、メモリセルにデータ“０”“２”“４”“６”を書き込んでいる場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３４８】
この後、ワード線にベリファイ電位“ａ’”を供給し、ビット線を放電する。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ａ’”以上の場合である。次に、信号ＢＬＣ２を中間電位（Ｖｔｈ＋０．５Ｖ）にするとＳＤＣがローレベル（“０”）の場合、ＴＤＣがハイレベル（“１”）となる。つまり、ＴＤＣがハイレベルになるのは、メモリセルのデータが“１”に書き込まれていてベリファイ電位“ａ’”に達した時である。次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“１”を書き込んでいてベリファイ電位“ａ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。（図５１（ａ））。
【０３４９】
（ベリファイ電位“ｂ’”）（Ｓ３７５−３７７、図５１（ｂ））
ベリファイ電位“ｂ’”のみを用いたベリファイは、先ず、信号ＶＰＲＥをハイレベルとし、信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとし、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ビット線がプリチャージされる。
【０３５０】
次に、ワード線にベリファイ電位“ｂ’”を供給し、ビット線を放電する。前記ビット線放電中に、ＤＤＣのデータをＴＤＣに移し、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。さらに、ビット線の放電中に、信号ＶＲＥＧをＶｓｓとし、信号ＲＥＧをＶｄｄとし、信号ＢＬＣＬＡＭＰに所定の電圧を設定すると、ＤＤＣがハイレベル（“１”）の場合、つまり書込み非選択の場合、ビット線が強制的にローレベルになる。この後、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、メモリセルのデータが、ベリファイ電位“ｂ’”以上になったときである。この後、信号ＢＬＣ１を中間電位（Ｖｔｈ＋０．５Ｖ）にするとＰＤＣがローレベルの場合、つまりメモリセルにデータ“３”を書き込んでいる場合ＴＤＣがローレベルになる。したがって、ＴＤＣがハイレベルになるのは、メモリセルにデータ“２”を書き込んでいて、ベリファイ電位“ｂ’”以上になったときである。
【０３５１】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“２”を書き込んでいてベリファイ電位“ｂ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３５２】
（“ｂ’”“ｃ＊’”“ｃ’”同時ベリファイ）（Ｓ３７８，Ｓ３７９、図５２）
プログラムを数回繰り繰り返すと、メモリセルデータ“２”への書き込みも完了してくる。したがって、ベリファイ“ｃ’”のベリファイも行なう。このベリファイは、“ｂ’”“ｃ＊’”“ｃ’”レベルのベリファイを同時に行なう。
【０３５３】
先ず、信号ＶＰＲＥをハイレベルとし、信号ＢＬＰＲＥをＶｄｄ＋Ｖｔｈとし、信号ＢＬＣＬＡＭＰを所定の電位に設定すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位“ｂ’”を供給し、ビット線を放電する。前記ビット線放電中に、ＤＤＣのデータをＴＤＣに移し、ＰＤＣのデータをＤＤＣに移し、ＴＤＣのデータをＰＤＣに移す。さらに、ビット線の放電中に、信号ＶＲＥＧをＶｓｓとし、信号ＲＥＧをＶｄｄとし、信号ＢＬＣＬＡＭＰに所定の電圧を設定すると、ＤＤＣが“１”の場合、つまり書込み非選択の場合、ビット線が強制的にローレベルになる。この後、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、メモリセルにデータ“２”を書き込んでいて、ベリファイ電位“ｂ’”以上になったときである。この後、信号ＢＬＣ１を中間電位（Ｖｔｈ＋０．５Ｖ）にするとＰＤＣがローレベルの場合、つまりメモリセルにデータ“３”書き込んでいる場合ＴＤＣがローレベルになる。したがって、ＴＤＣがハイレベルになるのは、メモリセルにデータ“２”を書き込んでいて、ベリファイ電位“ｂ’”以上になったときである。
【０３５４】
この後、ワード線にベリファイ電位“ｃ＊’”を供給し、ビット線を放電する。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。すると、ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ｃ＊’”以上の場合である。つまり、メモリセルのデータが“３”に書き込まれていてベリファイ電位“ｃ＊’”に達した時である。
【０３５５】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“３”を書き込んでいてベリファイ電位“ｃ＊’”に達した時と、メモリセルにデータ“０”“２”“４”“６”を書き込んでいる場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３５６】
この後、ワード線にベリファイ電位“ｃ’”を供給し、ビット線を放電する。次いで、ＴＤＣをＶｄｄに充電する。この後、信号ＢＬＣＬＡＭＰを所定の電位に設定する。ＴＤＣがハイレベルになるのは、セルの閾値電圧がベリファイ電位“ｃ’”以上の場合である。つまり、メモリセルのデータが“３”に書き込まれていてベリファイ電位“ｃ’”に達した時である。
【０３５７】
次に、信号ＶＲＥＧをハイレベルとし、信号ＲＥＧをＶｓｇとすると、ＤＤＣのデータがハイレベルの場合、強制的にＴＤＣがハイレベルとなる。したがって、ＴＤＣがＶｄｄになるのは、メモリセルにデータ“３”を書き込んでいてベリファイ電位“ｃ’”に達した時と、書き込み非選択の場合である。信号ＤＴＧをＶｓｇとし、ＰＤＣのデータをＤＤＣにコピーした後、信号ＢＬＣ１をＶｓｇとしてＴＤＣの電位をＰＤＣに取りこむ。
【０３５８】
メモリセルにデータ“３”を書き込んでいてベリファイ電位“ｃ＊’”に達し、ベリファイ電位“ｇ’”のベリファイで書き込み完了にならなかった場合のデータ記憶回路データは、ＳＤＣ＝“０”、ＤＤＣ＝“１”、ＰＤＣ＝“０”となり、メモリセルにデータ“２”を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ“３”を書き込んでいてベリファイ電位“ｃ＊’”に達した場合、メモリセルにデータ“２”を書き込んでいる状態となる。メモリセルにデータ“２”を書き込んでいる場合、ビット線に中間電位を供給していた。このため、次の書き込みでは少しだけ書き込みが行われる。また、このメモリセルは、次の“ｂ’”“ｃ＊’”“ｃ’”同時ベリファイにおいて、“ｂ’”のベリファイで、セルの閾値電圧が“ｃ＊’”以上に存在するため必ず、ベリファイはパスとなり、２回目以降の書き込みは行なわれなくなる。
【０３５９】
このようにして、全てのＰＤＣのデータが“１”になるまで、プログラムとベリファイ動作を繰り返す（Ｓ３８０，Ｓ３８１）。しかし、書き込み動作において、ＤＤＣのデータが“１”の場合、つまり、メモリセルにデータ“１”を書き込んでいる場合と、メモリセルにデータ“３”を書き込んでいて、ベリファイ電位“ａ＊’”を超えた場合と、メモリセルにデータ“２”を書き込んでいる場合と、メモリセルにデータ“３”を書き込んでいて、ベリファイ電位“ｃ＊’”を超えた場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Ｖｐｇｍを少しずつ上昇させる。第２回目プログラムにより、メモリセルにデータ“１”〜“３”の３つが書き込まれる。
【０３６０】
ＰＤＣがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路のＰＤＣのデータがハイレベルになるまでこのプログラム動作とベリファイ動作が繰り返される。
【０３６１】
上記説明では、１回のプログラムの後、２つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらないため、初めは、ベリファイ電位“ａ’、ａ＊’”を用いたベリファイのみ行ない、次に、ベリファイ電位“ａ’、ａ＊’”を用いたベリファイとベリファイ電位“ｂ’”を行ない、最後に、ベリファイ電位“ａ’、ａ＊’”を用いたベリファイとベリファイ電位”ｂ’”“ｃ’”同時ベリファイを行なうことも可能である。
【０３６２】
また、プログラムの終了近くのループにおいて、メモリセルに対するデータ“１”への書き込みは終了しているため、これらのベリファイ動作は省略することもできる。メモリセルに対するデータ“１”のベリファイが不用になると、ＳＤＣでデータを保持する必要がなくなる。このため、次の書き込みのためのデータを外部より読み込み、ＳＤＣに記憶しておくことも可能である。このような構成とした場合、さらなる高速動作が可能である。
【０３６３】
（リード）
リード動作は、第２、第３の実施形態とほぼ同じであるため、説明は省略する。
【０３６４】
（イレーズ）
消去動作は、第１、第４の実施形態と同様であるため、説明は省略する。
【０３６５】
上記第６の実施形態によれば、第３ページプログラムにおいて、メモリセルにデータ“３”“５”“７”を書き込む際、本来のベリファイ電位より低い閾値電圧でベリファイ動作を行なう。そして、この本来より低いベリファイ電位を超えた場合で、本来のベリファイ電位で書き込み完了とならなかった場合、次の書き込み時は、ビット線に中間電位を供給して書き込みスピードを遅くし、１回のみ書き込みを行ない書き込み完了とする。本来のベリファイ電位を超えているセルは、その時点で書き込みが終了となる。また、メモリセルにデータ“１”を書き込む場合、本来のベリファイ電位より低いベリファイ電圧でベリファイ動作を行ない、この本来より低いベリファイ電位を超えていた場合、次の書き込み以降、ビット線に中間電位を供給して書き込みスピードを遅くし、本来のベリファイ電位を超えるまで書き込んでいる。このため、８値（３ビット）のデータを確実且つ高速に書き込み、読み出すことができる。
【０３６６】
しかも、第６の実施形態によれば、“１”“３”“５”“７”の奇数データを書き込むメモリセルの閾値電圧の分布を狭めることが可能である。
【０３６７】
（第７の実施形態）
上記第６の実施形態は、第３ページの書き込み時、第１回目の書き込みで、メモリセルにデータ“４”〜“７”を書き込み、第２回目の書き込みでメモリセルにデータ“１”〜“３”を書き込んだ。
【０３６８】
これに対して、第７の実施形態は、第３ページの書き込みにおいて、メモリセルにデータ“１”〜“７”を同時に書き込むことを可能とする。このため、データ記憶回路１０の構成を若干変更している。
【０３６９】
図５３は、第７の実施形態に適用されるデータ記憶回路を示している。図５３において、図６と同一部分には同一符号を付している。図５３に示すように、データ記憶回路１０には、ＳＤＣのデータを一時的に記憶し、ＳＤＣ、ＰＤＣ、ＤＤＣ、ＴＤＣと共に、ベリファイ用のデータを記憶するＳＤＤＣ（セコンダリダイナミックデータキャッシュ）が追加されている。このＳＤＤＣの構成は、ＤＤＣとほぼ同様であり、トランジスタ６３ａ、６３ｂにより構成されている。トランジスタ６３ａの電流通路の一端はノードＮ２ｂに接続されている。このトランジスタ６３ａのゲートには信号ＤＴＧ２が供給され、電流通路の他端はトランジスタ６３ｂのゲートに接続されている。このトランジスタ６３ｂの電流通路の一端部には信号ＶＲＥＧ２が供給され、電流通路の他端はトランジスタ６３ｃの電流通路の一端部に接続されている。このトランジスタ６３ｃの電流通路の他端はノードＮ３に接続され、ゲートには信号ＲＥＧ２が供給されている。
【０３７０】
上記構成において、図５４、図５５、図５６（ａ）（ｂ）を参照して、上記データ記憶回路１０を用いた第３ページの書き込み動作について説明する。
【０３７１】
先ず、データ記憶回路１０がリセットされた後、外部より書き込みデータがデータ記憶回路１０のＳＤＣにロードされる（Ｓ４０１，Ｓ４０２）。この後、閾値電圧“ａ”“ｄ＊”“ｆ＊”を用いて内部リードが行われ、メモリセルからデータが読み出される（Ｓ４０３）。
【０３７２】
図５６（ａ）は、第３ページのデータロード及び内部リード後のデータキャッシュの設定を示している。ここで、ＳＤＣ、ＤＤＣ、ＰＤＣのデータは、図４７（ａ）と同様である。また、ＳＤＤＣのデータは、メモリセルにデータ“０”“１”が書き込まれている場合、“０”が設定され、メモリセルにデータ“２”〜“７”が書き込まれている場合、“１”が設定される。
【０３７３】
次いで、各データキャッシュが操作され、図５６（ｂ）に示すように、各データキャッシュのデータが設定される（Ｓ４０４）。ここで、ＳＤＤＣのデータは、データ“５”“４”“１”“０”のベリファイに使用され、ＳＤＣのデータは“３”“２”“１”“０”のベリファイに使用され、ＤＤＣのデータは、“７”“５”“３”“１”のベリファイに使用される。第７の実施形態も第５の実施形態と同様に、書き込み時は、ＰＤＣが“０”である場合、ビット線の電位をＶｓｓに設定し、ＰＤＣが“１”である場合、ビット線の電位をＶｄｄに設定する。この後、ＤＤＣが“１”の場合、ビット線の電位を中間電位（例えばＶｔｈ＋０．５Ｖ）として書き込み動作が行なわれる（Ｓ４０５）。
【０３７４】
ベリファイ動作は、閾値電圧の小さい側から順次実行する。すなわち、先ず、ベリファイ電位“ａ＊’”“ａ’”を用いてデータ“１”のベリファイが行われる（Ｓ４０６−Ｓ４０８）。この後、ベリファイ電位“ｂ’”を用いて、データ“２”のベリファイが行われる（Ｓ４０９−Ｓ４１２）。次に、ベリファイ電位“ｂ’”“ｃ＊’”“ｃ’”を用いて、データ“２”“３”のベリファイが行われる（Ｓ４１３−Ｓ４１５）。さらに、ベリファイ電位“ｄ’”を用いて、データ“４”のベリファイが行われる（Ｓ４１６−Ｓ４１９）。この後、ベリファイ電位“ｄ’”“ｅ＊’”“ｅ’”を用いて、データ“４”“５”のベリファイが行われる（Ｓ４２０−Ｓ４２２）。次に、ベリファイ電位“ｆ’”を用いて、データ“６”のベリファイが行われる（Ｓ４２３−Ｓ４２６）。次いで、ベリファイ電位“ｆ’”“ｇ＊’”“ｇ’”を用いて、データ“６”“７”のベリファイが行われる（Ｓ４２７−Ｓ４２９）。この動作が、各データのベリファイが完了するまで繰り返される（Ｓ４３０、Ｓ４３１）。
【０３７５】
上記ベリファイ動作において、メモリセルのデータ“３”、“５”、“７”のベリファイにおいて、本来より低い閾値電圧に達した場合で、本来の閾値電圧より低い場合、データキャッシュ内のデータをそれぞれメモリセルのデータ“２”、“４”、“６”と同じに設定する。この状態において、次のプログラム時にビット線に中間電位を供給して書き込み動作を行い。次のベリファイで書き込み完了とする。また、メモリセルに対するデータ“１”の書き込みは、本来より低い閾値電圧に達した場合、以降のプログラムにおいて、ビット線に中間電位を供給して書き込み、本来の閾値電圧まで書き込み動作を行なう。
【０３７６】
上記第７の実施形態によれば、データ記憶回路１０にメモリセルのデータ“５”“４”“１”“０”のベリファイに使用するデータを保持するＳＤＤＣを設けている。このため、第３ページのデータを一度に書き込み、ベリファイすることが可能である。このため、書き込み速度を一層高速化することが可能である。
【０３７７】
尚、上記第７の実施形態において、ＳＤＤＣは、ＳＤＣとＴＤＣの間に配置した。しかし、これに限らず、例えばＰＤＣとＴＤＣの間で、ＤＤＣと並列に配置することも可能である。
【０３７８】
その他、本発明の要旨を変えない範囲において種々変形実施可能なことは勿論である。
【符号の説明】
【０３７９】
１…メモリセルアレイ、２…ビット線制御回路、３…カラムデコーダ、４…データ入出力バッファ、５…データ入出力端子、６…ワード線制御回路、７…制御信号及び制御電圧発生回路、８…制御信号入力端子、１０…データ記憶回路、１０ａ、１０ｂ〜１０ｅ…フラグ用データ記憶回路、ＰＤＣ…プライマリデータキャッシュ、ＳＤＣ…セコンダリデータキャッシュ、ＤＤＣ…ダイナミックデータキャッシュ、ＴＤＣ…テンポラリデータキャッシュ、ＳＤＤＣ…セコンダリダイナミックデータキャッシュ、ＦＣ１、ＦＣ２〜ＦＣ５…フラグセル。
【図１】
2011138607.tif 000003
【図２】
2011138607.tif 000004
【図３】
2011138607.tif 000005
【図４】
2011138607.tif 000006
【図５】
2011138607.tif 000007
【図６】
2011138607.tif 000008
【図７】
2011138607.tif 000009
【図８】
2011138607.tif 000010
【図９】
2011138607.tif 000011
【図１０】
2011138607.tif 000012
【図１１】
2011138607.tif 000013
【図１２】
2011138607.tif 000014
【図１３】
2011138607.tif 000015
【図１４】
2011138607.tif 000016
【図１５】
2011138607.tif 000017
【図１６】
2011138607.tif 000018
【図１７】
2011138607.tif 000019
【図１８】
2011138607.tif 000020
【図１９】
2011138607.tif 000021
【図２０】
2011138607.tif 000022
【図２１】
2011138607.tif 000023
【図２２】
2011138607.tif 000024
【図２３】
2011138607.tif 000025
【図２４】
2011138607.tif 000026
【図２５】
2011138607.tif 000027
【図２６】
2011138607.tif 000028
【図２７】
2011138607.tif 000029
【図２８】
2011138607.tif 000030
【図２９】
2011138607.tif 000031
【図３０】
2011138607.tif 000032
【図３１】
2011138607.tif 000033
【図３２】
2011138607.tif 000034
【図３３】
2011138607.tif 000035
【図３４】
2011138607.tif 000036
【図３５】
2011138607.tif 000037
【図３６】
2011138607.tif 000038
【図３７】
2011138607.tif 000039
【図３８】
2011138607.tif 000040
【図３９】
2011138607.tif 000041
【図４０】
2011138607.tif 000042
【図４１】
2011138607.tif 000043
【図４２】
2011138607.tif 000044
【図４３】
2011138607.tif 000045
【図４４】
2011138607.tif 000046
【図４５】
2011138607.tif 000047
【図４６】
2011138607.tif 000048
【図４７】
2011138607.tif 000049
【図４８】
2011138607.tif 000050
【図４９】
2011138607.tif 000051
【図５０】
2011138607.tif 000052
【図５１】
2011138607.tif 000053
【図５２】
2011138607.tif 000054
【図５３】
2011138607.tif 000055
【図５４】
2011138607.tif 000056
【図５５】
2011138607.tif 000057
【図５６】
2011138607.tif 000058