"ワード線、及びビット線に接続され、n値nは3以上の自然数のうちの1値を記憶する複数のメモリセルが配置されて構成されたメモリセルアレイと、入力データに応じて前記ワード線、ビット線の電位を制御し、前記メモリセルにデータを書き込む制御回路と、前記ビット線に接続され、少なくとも1ビット以上のデータを記憶するデータ記憶回路を具備し、前記制御回路は、書き込み動作により、メモリセルの閾値電圧が第k値の閾値電圧に達したかのベリファイ時、前記第k値の閾値電圧より低い閾値電圧でベリファイ動作を行ない、前記メモリセルの閾値電圧が前記第k値の閾値電圧より低い閾値電圧を越えている場合、前記データ記憶回路内のデータを第k値より低い第i値の閾値電圧i<kへの書き込みと同じデータに設定することを特徴とする半導体記憶装置。前記制御回路は、前記第k値の閾値電圧に達したかのベリファイ動作前に、前記第i値の閾値電圧に達したかのベリファイ動作を行なうことを特徴とする請求項1記載の半導体記憶装置。前記制御回路は、前記第i値の閾値電圧への書き込み時、書き込み速度を遅くすることを特徴とする請求項1記載の半導体記憶装置。前記制御回路は、前記第i値の閾値電圧への書き込み時、前記メモリセルのビット線に中間電位を供給することを特徴とする請求項3記載の半導体記憶装置。前記k値のデータを書き込む際、第1の書き込み動作において上位k/2個のデータを書き込み、第2の書き込み動作において下位k/2個のデータを書き込むことを特徴とする請求項1記載の半導体記憶装置。少なくとも1つ以上のデータを記憶するメモリと、前記メモリセルに接続され、外部より入力された第1論理レベル又は第2論理レベルのデータを記憶する少なくとも1つ以上のデータ記憶回路と、前記データ記憶回路の動作を制御する制御回路とを有し、前記制御回路は、前記データ記憶回路に記憶されたデータの論理レベルが、第1論理レベルの場合、第2論理レベルに反転させ、第2論理レベルの場合、第1論理レベルに反転させ、前記反転動作の後、論理レベルが第1論理レベルの場合、前記メモリセルに閾値電圧を上げる書き込み動作を行ない、第2論理レベルの場合、前記メモリセルに閾値電圧は変化させず維持させることを特徴とする半導体記憶装置。前記制御回路は、前記メモリセルからデータを読み出し動作により読み出し、前記メモリセルに閾値電圧は変化させず維持させたメモリセルは、第1論理レベル読み出され、前記閾値電圧を上げる書き込み動作を行ったメモリセルは、第2論理レベルが、前記データ記憶回路に読み出されることを特徴とする前記請求項6の半導体記憶装置。kkは2以上の自然数ビットを記憶するメモリセルと、外部から入力されるデータ、及びメモリセルから読み出されたデータを記憶する第1の記憶回路と、前記第1の記憶回路に記憶されたデータを記憶する第2の記憶回路と、前記メモリセルから読み出されたデータを記憶する第3の記憶回路と、前記第3の記憶回路に記憶されたデータを記憶する第4の記憶回路とを具備し、書き込み動作時、前記メモリセルが記憶しているデータに応じて、前記第1乃至第4の記憶回路のデータを保持又は変更し、第3ページの書き込み動作において、8値のデータを同じに書き込む制御回路とを具備すること特徴とする半導体記憶装置。本発明は、上記課題を解決するためになされたものであり、その目的とするところは、ベリファイ動作を高速化し、データの書き込み速度を向上可能な半導体記憶装置を提供しようとするものである。本発明の半導体記憶装置の第1の態様は、ワード線、及びビット線に接続され、n値nは3以上の自然数のうちの1値を記憶する複数のメモリセルが配置されて構成されたメモリセルアレイと、入力データに応じて前記ワード線、ビット線の電位を制御し、前記メモリセルにデータを書き込む制御回路と、前記ビット線に接続され、少なくとも1ビット以上のデータを記憶するデータ記憶回路を具備し、前記制御回路は、書き込み動作により、メモリセルの閾値電圧が第k値の閾値電圧に達したかのベリファイ時、前記第k値の閾値電圧より低い閾値電圧でベリファイ動作を行ない、前記メモリセルの閾値電圧が前記第k値の閾値電圧より低い閾値電圧を越えている場合、前記データ記憶回路内のデータを第k値より低い第i値の閾値電圧i<kへの書き込みと同じデータに設定することを特徴とする。本発明の半導体記憶装置の第2の態様は、少なくとも1つ以上のデータを記憶するメモリと、前記メモリセルに接続され、外部より入力された第1論理レベル又は第2論理レベルのデータを記憶する少なくとも1つ以上のデータ記憶回路と、前記データ記憶回路の動作を制御する制御回路とを有し、前記制御回路は、前記データ記憶回路に記憶されたデータの論理レベルが、第1論理レベルの場合、第2論理レベルに反転させ、第2論理レベルの場合、第1論理レベルに反転させ、前記反転動作の後、論理レベルが第1論理レベルの場合、前記メモリセルに閾値電圧を上げる書き込み動作を行ない、第2論理レベルの場合、前記メモリセルに閾値電圧は変化させず維持させることを特徴とする。本発明の半導体記憶装置の第3の態様は、kkは2以上の自然数ビットを記憶するメモリセルと、外部から入力されるデータ、及びメモリセルから読み出されたデータを記憶する第1の記憶回路と、前記第1の記憶回路に記憶されたデータを記憶する第2の記憶回路と、前記メモリセルから読み出されたデータを記憶する第3の記憶回路と、前記第3の記憶回路に記憶されたデータを記憶する第4の記憶回路とを具備し、書き込み動作時、前記メモリセルが記憶しているデータに応じて、前記第1乃至第4の記憶回路のデータを保持又は変更し、第3ページの書き込み動作において、8値のデータを同じに書き込む制御回路とを具備すること特徴とする。以下、本発明の実施の形態について図面を参照して説明する。第1の実施形態図2は、不揮発性半導体記憶装置の概略構成を示すものであり、例えば4値2ビットを記憶するNANDフラッシュメモリの構成を示している。メモリセルアレイ1は複数のビット線と複数のワード線と共通ソース線を含み、例えばEEPROMセルからなる電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ1には、ビット線を制御するためのビット制御回路2とワード線制御回路6が接続されている。ビット線制御回路2は、後述するように複数のデータ記憶回路及びフラグ用データ記憶回路を含んでいる。このビット線制御回路2は、ビット線を介してメモリセルアレイ1中のメモリセルのデータを読み出したり、ビット線を介してメモリセルアレイ1中のメモリセルの状態を検出したり、ビット線を介してメモリセルアレイ1中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行なう。ビット線制御回路2には、カラムデコーダ3、データ入出力バッファ4が接続されている。ビット線制御回路2内のデータ記憶回路はカラムデコーダ3によって選択される。データ記憶回路に読み出されたメモリセルのデータは、前記データ入出力バッファ4を介してデータ入出力端子5から外部へ出力される。また、外部からデータ入出力端子5に入力された書き込みデータは、データ入出力バッファ4を介して、カラムデコーダ3によって選択されたデータ記憶回路に入力される。ワード線制御回路6は、メモリセルアレイ1に接続されている。このワード線制御回路6は、メモリセルアレイ1中のワード線を選択し、選択されたワード線に読み出し、書き込みあるいは消去に必要な電圧を印加する。メモリセルアレイ1、ビット線制御回路2、カラムデコーダ3、データ入出力バッファ4、及びワード線制御回路6は、制御信号及び制御電圧発生回路7に接続され、この制御信号及び制御電圧発生回路7によって制御される。制御信号及び制御電圧発生回路7は、制御信号入力端子8に接続され、外部から制御信号入力端子8を介して入力される制御信号によって制御される。前記ビット線制御回路2、カラムデコーダ3、ワード線制御回路6、制御信号及び制御電圧発生回路7は書き込み回路、及び読み出し回路を構成している。図3は、図2に示すメモリセルアレイ1及びビット線制御回路2の構成を示している。メモリセルアレイ1には複数のNANDセルが配置されている。1つのNANDセルは、直列接続された例えば16個のEEPROMからなるメモリセルMCと、選択ゲートS1、S2とにより構成されている。第1の選択ゲートS1はビット線BL0に接続され、第2の選択ゲートS2はソース線SRCに接続されている。各ロウに配置されたメモリセルの制御ゲートはワード線WL1、WL2、WL3~WL16に共通接続されている。また、第1の選択ゲートS1はセレクト線SG1に共通接続され、第2の選択ゲートS2はセレクト線SG2に共通接続されている。ビット線制御回路2は複数のデータ記憶回路10及び第1、第2のフラグ用データ記憶回路10a、10bを有している。各データ記憶回路10及び第1、第2のフラグ用データ記憶回路10a、10bには、一対のビット線BL0、BL1、BL2、BL3...BLi、BLi1、BLf1、BLf2、BLf3、BLf4が接続されている。メモリセルアレイ1は、破線で示すように、複数のブロックを含んでいる。各ブロックは、複数のNANDセルにより構成され、このブロック単位でデータが消去される。また、消去動作は、データ記憶回路10、第1、第2のフラグ用データ記憶回路10a、10bに接続されている2本のビット線について同時に行なわれる。また、ビット線の1つ置きに配置され、1つのワード線に接続された複数のメモリセル破線で囲まれた範囲のメモリセルは、1セクタを構成する。このセクタ毎にデータが書き込まれ、読み出される。1セクタには例えば2ページ分のデータが記憶される。また、各ワード線には、フラグを記憶するための複数の第1のフラグセルFC1、及び複数の第2のフラグセルFC2が接続されている。すなわち、この実施形態の場合、1セクタは1つの第1のフラグセルFC1と、1つの第2のフラグセルFC2を含んでいる。尚、第1、第2のフラグセルFC1、FC2は、1セクタにそれぞれ1つと限定されるものではなく、破線で示すように、1セクタに複数のフラグセルを接続してもよい。この場合、後述するように、複数のフラグセルに記憶されたデータの多数決により、フラグセルに記憶されたデータを決定すればよい。リード動作、プログラムベリファイ動作及びプログラム動作時において、データ記憶回路10に接続されている2本のビット線BLi、BLi1のうち外部より指定されたアドレス信号YA1、YA2...YAi、YAFlagに応じて1本のビット線が選択される。さらに、外部アドレスに応じて、1本のワード線が選択され、1セクタ2ページ分が選択される。この2ページの切り替えはアドレスによって行われる。図4abはメモリセル及び選択トランジスタの断面図を示している。図4aはメモリセルを示している。基板41にはメモリセルのソース、ドレインとしてのn型拡散層42が形成されている。基板41の上にはゲート絶縁膜43を介して浮遊ゲートFG44が形成され、この浮遊ゲート44の上には絶縁膜45を介して制御ゲートCG46が形成されている。図4bは選択ゲートを示している。基板41にはソース、ドレインとしてのn型拡散層47が形成されている。基板41の上にはゲート絶縁膜48を介して制御ゲート49が形成されている。図5は、メモリセルアレイの1つのNANDセルの断面を示している。この例において、1つのNANDセルは、図4aに示す構成の16個のメモリセルMCが直列接続されて構成されている。NANDセルのドレイン側、ソース側には、図4bに示す構成の第1の選択ゲートS1及び第2の選択ゲートS2が設けられている。図6は、図3に示すデータ記憶回路10の一例を示す回路図である。第1、第2のフラグ用データ記憶回路10a、10bもデータ記憶回路10と同様の構成とされている。このデータ記憶回路10は、プライマリデータキャッシュPDC、セコンダリデータキャッシュSDC、ダイナミックデータキャッシュDDC、テンポラリデータキャッシュTDCを有している。SDC、PDC、DDCは、書き込み時に入力データを保持し、読み出し時に読み出しデータを保持し、ベリファイ時に一時的にデータを保持し、多値データを記憶する際に内部データの操作に使用される。TDCは、データの読み出し時にビット線のデータを増幅し、一時的に保持するとともに、多値データを記憶する際に内部データの操作に使用される。SDCは、ラッチ回路を構成するクロックドインバータ回路61a、61b、及びトランジスタ61c、61dにより構成されている。トランジスタ61cはクロックドインバータ回路61aの入力端と、クロックドインバータ回路61bの入力端の間に接続されている。このトランジスタ61cのゲートには信号EQ2が供給されている。トランジスタ61dはクロックドインバータ回路61bの入力端と接地間に接続されている。このトランジスタ61dのゲートには信号PRSが供給されている。SDCのノードN2aは、カラム選択トランジスタ61eを介して入出力データ線IOに接続され、ノードN2bは、カラム選択トランジスタ61fを介して入出力データ線IOnに接続される。これらトランジスタ61e、61fのゲートにはカラム選択信号CSLiが供給されている。SDCのノードN2aは、トランジスタ61g、61hを介してPDCのノードN1aに接続されている。トランジスタ61gのゲートには信号BLC2が供給され、トランジスタ61hのゲートには信号BLC1が供給されている。PDCは、クロックドインバータ回路61i、61j及びトランジスタ61kにより構成されている。トランジスタ61kは、クロックドインバータ回路61iの入力端とクロックドインバータ回路61jの入力端の相互間に接続されている。このトランジスタ61kのゲートには信号EQ1が供給されている。PDCのノードN1bはトランジスタ61lのゲートに接続されている。このトランジスタ61lの電流通路の一端はトランジスタ61mを介して接地されている。このトランジスタ61mのゲートには信号CHK1が供給されている。また、トランジスタ61lの電流通路の他端はトランスファーゲートを構成するトランジスタ61n、61oの電流通路の一端に接続されている。このトランジスタ61nのゲートには信号CHK2nが供給されている。また、トランジスタ61oのゲートは前記トランジスタ61gと61hの接続ノードに接続されている。トランジスタ61n、61oの電流通路の他端には、信号COMiが供給されている。この信号COMiは全データ記憶回路10に共通の信号であり、全データ記憶回路10のベリファイが完了したかどうかを示す信号である。すなわち、後述するように、ベリファイが完了すると、PDCのノードN1bがローレベルとなる。この状態において、信号CHK1、CHK2をハイレベルとすると、ベリファイが完了している場合、信号COMiがハイレベルとなる。さらに、前記TDCは、例えばMOSキャパシタ61pにより構成されている。このキャパシタ61pは、前記トランジスタ61g、61hの接続ノードN3と接地間に接続されている。また、接続ノードN3には、トランジスタ61qを介してDDCが接続されている。トランジスタ61qのゲートには、信号REGが供給されている。DDCは、トランジスタ61r、61sにより構成されている。トランジスタ61rの電流通路の一端には信号VREGが供給され、他端は前記トランジスタ61qの電流通路に接続されている。このトランジスタ61rのゲートはトランジスタ61sを介して前記PDCのノードN1aに接続されている。このトランジスタ61sのゲートには信号DTGが供給されている。さらに、前記接続ノードN3にはトランジスタ61t、61uの電流通路の一端が接続されている。トランジスタ61uの電流通路の他端には信号VPREが供給され、ゲートにはBLPREが供給されている。前記トランジスタ61tのゲートには信号BLCLAMPが供給されている。このトランジスタ61tの電流通路の他端はトランジスタ61vを介してビット線BLoの一端に接続され、トランジスタ61wを介してビット線BLeの一端に接続されている。ビット線BLoの他端はトランジスタ61xの電流通路の一端に接続されている。このトランジスタ61xのゲートには信号BlASoが供給されている。ビット線BLeの他端はトランジスタ61yの電流通路の一端に接続されている。このトランジスタ61yのゲートには信号BlASeが供給されている。これらトランジスタ61x、61yの電流通路の他端には、信号BLCRLが供給されている。トランジスタ61x、61yは、信号BlASo、BlASeに応じてトランジスタ61v、61wと相補的にオンとされ、非選択のビット線に信号BLCRLの電位を供給する。さらに、データ入力端子5aは、複数のインバータ回路62a、62b、62cを介して前記入出力データ線IOに接続され、さらに、インバータ回路62dを介して前記入出力データ線IOnに接続される。上記各信号及び電圧は、図2に示す制御信号及び制御電圧発生回路7により生成され、この制御信号及び制御電圧発生回路7の制御に基づき、以下の動作が制御される。本メモリは、多値メモリであり、1セルに例えば2ビットのデータを記憶することができる。この2ビットの切り替えはアドレス第1ページ、第2ページによって行なわれる。動作説明上記構成において、動作について説明する。図1は、メモリセルのデータとメモリセルの閾値電圧の関係を示している。消去動作を行なうとメモリセルのデータは0となる。図1aに示すように、第1ページの書き込みを行なうと、メモリセルのデータはデータ0とデータ2になる。図1bに示すように、第2ページの書き込み前に隣接セルに実際のデータの閾値電圧以下のデータが書き込まれる。すると、このセルに書き込まれたデータにより、データ2の閾値電圧の分布が大きくなる。この後、第2ページのデータが書き込まれると、メモリセルのデータは、図1cに示すように、本来の閾値電圧を有するデータ0~3となる。第1の実施形態では、メモリセルのデータは閾値電圧の低いほうから高い方へと、定義されている。第1の実施形態は、図1cに示す第2ページの書き込みにおいて、閾値電圧b’のベリファイと、閾値電圧c’のベリファイを、一度ビット線をプリチャージした後、ワード線電位を複数回変えることにより、一括して行なうことを特徴としている。図7は、NANDセルに対する書き込み順序を示している。ブロック内において、ソース線に近いメモリセルからページごとに書き込み動作が行なわれる。図7は、説明の便宜上、ワード線を4本としている。第1番目の書き込みは、メモリセル1の第1ページに1ビットのデータが書きこまれる。第2番目の書き込みは、メモリセル1とワード方向に隣接したメモリセル2の第1ページに1ビットのデータが書きこまれる。第3番目の書き込みは、メモリセル1とビット方向に隣接したメモリセル3の第1ページに1ビットのデータが書きこまれる。第4番目の書き込みは、メモリセル1と対角に隣接したメモリセル4の第1ページに1ビットのデータが書きこまれる。第5番目の書き込みは、メモリセル1の第2ページに1ビットのデータが書きこまれる。第6番目の書き込みは、メモリセル1とワード方向に隣接したメモリセル2の第2ページに1ビットのデータが書きこまれる。第7番目の書き込みは、メモリセル3とビット方向に隣接したメモリセル5の第1ページに1ビットのデータが書きこまれる。第8番目の書き込みは、メモリセル3と対角に隣接したメモリセル6の第1ページに1ビットのデータが書きこまれる。第9番目の書き込みは、メモリセル3の第2ページに1ビットのデータが書きこまれる。第10番目の書き込みは、メモリセル3とワード方向に隣接したメモリセル4の第2ページに1ビットのデータが書きこまれる。第11番目の書き込みは、メモリセル5とビット方向に隣接したメモリセル7の第1ページに1ビットのデータが書きこまれる。第12番目の書き込みは、メモリセル5と対角に隣接したメモリセル8の第1ページに1ビットのデータが書きこまれる。第13番目の書き込みは、メモリセル5の第2ページに1ビットのデータが書きこまれる。第14番目の書き込みは、メモリセル5とワード方向に隣接したメモリセル6の第2ページに1ビットのデータが書きこまれる。第15番目の書き込みは、メモリセル7の第2ページに1ビットのデータが書きこまれる。第16番目の書き込みは、メモリセル7とワード方向に隣接したメモリセル8の第2ページに1ビットのデータが書きこまれる。プログラム及びプログラムベリファイ第1ページプログラム図8は、第1ページのプログラムのブロックダイアグラムを示している。プログラム動作は、先ずアドレスを指定し、図3に示す2ページ1セクタが選択する。本メモリは、この2ページのうち、第1ページ、第2ページの順でしか、プログラム動作できない。したがって、先ず、アドレスにより第1ページを選択する。このアドレス入力中に図6の61dのトランジスタをオンすることで、全てのSDCのN2aのノードをVssにする。S11次に、データ入出力線IO、IOnを介して書き込みデータを、外部より入力し全てのデータ記憶回路10内のSDC図6に示すに記憶するS12。このとき、データを書き込む場合、外部よりデータ入力端子5aにデータ0が入力される。このデータはインバータ回路62a、62b、62c、62d、トランジスタ61e、61fを介してSDCに供給される。このため、SDCのN2aのノードは、Vddになる。また、書き込み非選択の場合、データ入力端子5aにデータ1が入力される。このため、SDCのN2aのノードは、Vssになる。この後、書き込みコマンドが入力されると、全てのデータ記憶回路10内のSDCのデータがPDCに転送されるS13。すなわち、信号BLC1,BLC2が所定の電圧、例えばVddVthVdd:電源電圧例えば3V又は1.8V、しかし、この電圧に限定されるものではない、Vth:NチャネルMOSトランジスタの閾値電圧とされ、トランジスタ61h、61gがオンとされる。すると、ノードN2aのデータがトランジスタ61g、61hを介してPDCに転送される。このため、外部よりデータ1書き込みを行なわないが入力された場合、PDCのノードN1aは、ローレベルになり、データ0書き込みを行なうが入力された場合、PDCのノードN1aは、ハイレベルとなる。以後、PDCのデータはノードN1aの電位、SDCのデータはノードN2aの電位とする。データ反転動作S14この後、VPRE=Vdd、信号BLPREをVddVthとし、とし一旦N3をVddにプリチャージした後に、DTG=VddVth、としてPDCのデータをDDCに写す。次に、REG=Vdd、VREG=Vssとし、DDCがハイレベルの場合、ノードN3はローレベル、DDCがローレベルの場合、ノードN3はハイレベルとなる。この後、一旦信号SEN1、LAT1をオフとし、信号EQ1をVddとし、ノードN1aとノードN1bを同電位とする。この後、信号BLC1=VddVthとし、TDCのデータノードN3の電位をPDCに移す。この結果、元々PDCにデータ1がラッチされていた場合、PDCのデータは0になる。また、PDCにデータ0がラッチされていた場合、PDCのデータは1になる。書き込みコマンドが入力されるとプログラムをするための電圧Vpgm及びVpassの昇圧回路が動作する。これら電圧Vpgm及びVpassの電位は直ぐには立ち上がらない。上記データ反転動作は、この電位上昇に要する待ち時間の間に行なう。このため、書き込みスピードは遅くならない。このように、入力データを反転するのは、メモリセル内に書かれている1ページのデータをページバッファに読み出し、外部に出力せずに他の1ページに書き込むページコピーを行なう場合、有効である。すなわち、ページコピーを行なう場合、先ず、読み出しを行なう。この結果、書き込みを行った場合データ入力端子5aにデータ0を入力した場合、SDCはデータ1をラッチし、書き込みを行なわなかった場合データ入力端子5aにデータ1を入力した場合、SDCはデータ0をラッチする。前述したように、SDCは入力データに対して反転されたデータをラッチしている。このため、ページコピーのために読み出されたデータと書き込み時にSDCにラッチされたデータとが一致する。このようにSDCにおいて、次に書くデータを一致させておくと、読み出したデータの一部のみデータを外部より入力し書き換えることが容易にできる。したがって、ページコピーをしない場合においても、常に、外部より入力されたデータをページバッファ内でデータ反転するようにする。上記データ反転動作は、通常のプログラムコマンドを入れることにより行なう。この後、PDCのデータをDDCにコピーする。尚、第1ページのプログラムにおいて、フラグセルにはデータが書き込まれない。このため、第1、第2のフラグ用データ記憶回路10a,10b内のPDCはデータ1をラッチしている。さらに、プログラマブルカウンタPCの値が0に初期設定される。このカウンタは、図2に示す例えば制御信号及び制御電圧発生回路7に設けられている。しかし、制御信号及び制御電圧発生回路7に限定されるものではない。プログラム動作S15先ず、図6示す信号BLC1、BLCLAMP、BLSo又はBLSeの電位をVddVthとする。すると、トランジスタ61h、61t、61v又は61wがオンとなり、PDCに保持されたデータがビット線に供給される。PDCにデータ1書き込みを行なわないが記憶されている時、ビット線がVddになり、データ0書き込みを行なう時、ビット線がVss接地電位になる。また、選択されたワード線に接続され、非選択ページのビット線が非選択であるセルは書き込みが行なわれてはならない。このため、これらのセルに接続されているビット線にもデータ1と同じようにVddを供給する。ここで、選択されているブロックのセレクト線SG1にVdd、選択ワード線に電位VPGM20V、非選択ワード線に電位Vpass10Vを印加する。すると、ビット線がVssになっている場合、セルのチャネルがVss、ワード線がVPGMとなるので書き込みが行なわれる。一方、ビット線がVddになっている場合、セルのチャネルがVssではなく、VPGMを上げることにより、カップリングでVPGM/2となる。このため、このセルはプログラムされない。多値メモリでは、閾値の分布を狭めるため、図1に示すように、本来のベリファイ電位v’と、これより低いベリファイ電位v’を設定し、このベリファイ電位v’を超えたセルに対応するビット線に中間電位例えば1Vを供給することにより、書き込みスピードを遅くしている。したがって、ここで、信号VREGをVdd、信号REGを中間電位例えば1VVthにすると、ビット線がVssの場合で、DDCがハイレベルの場合、ビット線は中間電位になる。また、DDCがローレベルの場合、ビット線はVssのままとなり、ビット線がVddの場合、Vddのままになる。第1ページの書き込みにおいて、入力データが0の場合、図1に示すように、メモリセルのデータを2にする。入力データが1の場合、メモリセルのデータは0のままである。また、プログラム動作に伴い、カウンタPCがカウントアップされるPC=PC1。第1ページベリファイS16第1ページでは、図1aに示すように、本来のベリファイ電位v’まで書き込む。したがって、ベリファイ動作の第1ステップでは、ワード線に本来のベリファイ電位v’より低い電位v’を供給してベリファイし、第2ステップにおいて、ワード線の電位をv’に上げてベリファイする。以後は本来の値より低い電位を表す。先ず、選択されているブロック内の非選択ワード線及びセレクト線SG1に読み出し時の電位Vreadを供給し、図6に示すデータ記憶回路10の信号BLPREに例えばVddVth、信号BLCLAMPに所定の電圧、例えば1VVthを供給し、信号VPREをVddとし、ビット線を1Vにプリチャージする。次に、セルのソース側のセレクト線SG2をハイレベルにする。閾値電圧が電位v’より高いセルはオフする。このため、ビット線はハイレベルのままである。また、閾値電圧が電位v’より低いセルはオンする。このため、ビット線はVssとなる。次に、信号BLPREに所定の電圧、例えばVddVthを供給し、VPRE=Vddとすることにより、TDCのノードN3をVddにプリチャージした後、信号BLCLAMPを所定の電圧、例えば0.9VVthとしてトランジスタ61tをオンさせる。TDCのノードN3は、ビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。ここで、書き込みを行なう場合、図6のDDCにローレベルが記憶され、書き込みを行なわない場合、DDCにハイレベルが記憶されている。このため、信号VREGをVddとし、信号REGをハイレベルにすると、書き込みを行なわない場合のみTDCのノードN3が強制的にハイレベルとなる。この動作の後、PDCのデータをDDCに移し、TDCの電位をPDCに転送する。PDCにハイレベル信号がラッチされる場合は、セルに書き込みを行なわない場合と、セルにデータ2を書き込んでおり、セルの閾値電圧がベリファイ電位v’に達した場合だけである。また、PDCにローレベル信号がラッチされる場合は、セルの閾値電圧がv’に達しない場合である。次に、ワード線の電位をv’からv’に上げると、閾値電圧がv’より低いセルはオンし、ビット線はVssとなる。次に、信号BLPREに所定の電圧、例えばVddVthを供給し、VPRE=Vddとすることにより、TDCのノードN3をVddにプリチャージした後、信号BLCLAMPを所定の電圧、例えば0.9VVthとしてトランジスタ61tをさせる。TDCのノードN3は、ビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。ここで、書き込みを行なう場合、図6のDDCにローレベルが記憶され、書き込みを行なわない場合、DDCにハイレベルが記憶されている。このため、信号VREGをVddとし、信号REGをハイレベルにすると、書き込みを行なわない場合のみTDCのノードN3が強制的にハイレベルとなる。この動作の後、PDCのデータをDDCに移し、TDCの電位をPDCに転送する。PDCにハイレベル信号がラッチされる場合は、セルに書き込みを行なわない場合と、セルにデータ2を書き込んでおり、セルの閾値電圧がベリファイ電位v’に達した場合だけである。また、PDCにローレベル信号がラッチされる場合は、セルの閾値電圧がv’に達しない場合である。この結果、DDCがハイレベルとなるのは、セルの閾値電圧がv’を超えている場合と、書き込み非選択の場合であり、DDCがローレベルとなるのは、書き込みを行っている場合で、セルの閾値電圧がv’以下の場合である。PDCがハイレベルとなるのは、セルの閾値電圧がv’を超えている場合と、書き込み非選択の場合であり、PDCがローレベルとなるのは、書き込みを行っている場合で、セルの閾値電圧がv’以下の場合である。PDCがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路10のデータがハイレベルになるまでこのプログラム動作とベリファイ動作を繰り返すS15-S18。このとき、PDCがローレベルでDDCがハイレベルのセル、すなわち、閾値電圧がv’以上でv’の場合、ビット線に中間電位を供給し、書き込みスピードを抑える。隣接セルプログラム図7に示すように、メモリセル1の第1ページに1ビットのデータの書き込んだ後、メモリセル1とワード方向に隣接したメモリセル2の第1ページの書き込み、メモリセル1とビット方向に隣接したメモリセル3の第1ページの書き込み、メモリセル1と対角に隣接したメモリセル4の第1ページの書き込みが順次行なわれる。これらの書き込み動作が行なわれると、書き込みデータによっては、隣接セルの浮遊ゲート間容量FG-FG間容量によって、メモリセル1の閾値電圧が上がる。このため、メモリセル1のデータ0とデータ2の閾値電圧分布は図1bのように電位が高いほうに広がる。この後、第5の書き込みにおいて、メモリセル1の第2ページに1ビットのデータを書き込む。第2ページプログラム第1の実施形態において、第2ページのプログラム及びベリファイ動作が高速化されている。すなわち、メモリセルのデータ2及び3のベリファイ動作を同時に行なうことにより、高速動作を可能としている。以下に、その動作を説明する。図9は、第2ページのプログラム書き込み動作のブロックダイアグラムを示している。第2ページプログラム動作も、先ずアドレスに応じて、図3に示す2ページが選択される。これと同時にページバッファをリセットするS21。次に、書き込みデータを外部より入力し、全てのデータ記憶回路内のSDCに記憶するS22。外部よりデータ1書き込みを行なわないが入力されると、データ記憶回路10のSDCのノードN2aは、ローレベルになり、外部よりデータ0書き込みを行なうが入力されるとハイレベルとなる。第1のフラグセルデータロードS23書き込みコマンドが入力されると、第2ページのプログラムであるので、第1のフラグセルFC1にデータを書き込むため、第1のフラグセル用データ記憶回路10a内のSDCはハイレベルとなる。前述したように、フラグセルは、信頼性を高めるために、複数セル用意することも可能である。第2ページにおいて、第1のフラグセルFC1に対応するSDCはハイレベルとなる。これにより第1のフラグセルFC1は、データ0から1へと書き変えられる。第2のフラグセルFC2に対応するSDCをローレベルにする。これにより第2のフラグセルはデータ0の書き込みとなるが、後の操作によりデータ2への書き込みとなる。第2ページのプログラムでは、図1cに示すように、メモリセルのデータが0の場合で、外部から入力されるデータが1の場合、メモリセルのデータを0のままとし、外部から入力されるデータが0の場合、メモリセルのデータを1にする。また、メモリセルのデータが2の場合で、外部から入力されるデータが1の場合、メモリセルのデータを2のままとする。しかし、第1ページの書き込みにおいて、メモリセルの閾値電圧は、本来のデータ2の閾値電圧より低いv’までしか上昇していない。このため、データ2本来の閾値電圧b’まで、これらのセルに対し書き込みを行なう。また、メモリセルのデータが2の場合で、外部から入力されるデータが0の場合、メモリセルのデータを3にする。内部データリードS24先ず、セルへの書き込みの前に、第1ページのメモリセルのデータが0か2であるかを判断するため、内部リード動作を行なう。内部データリードは、リード動作と同様である。通常メモリセルのデータが0か2かの判断時において、選択ワード線には、リード時の電位bを与える。しかし、第1ページのプログラム動作では、通常のベリファイ電位v’より低いv’までしか書き込んでいないため、bの電位より低い場合もある。したがって、内部データロードでは、ワード線にaの電位を供給して読み出し動作をする。すなわち、選択されているブロック内の非選択ワード線及びセレクト線SG1に電位Vreadを印加する。これとともに、データ記憶回路10の信号VPREをVddとし、信号BLPRE、BLCLAMPを所定の電圧、例えば1VVthとして、ビット線をVddにプリチャージした後、セルのソース側のセレクト線SG2をハイレベルとする。閾値電圧が電位aより高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位aより低いセルはオンするため、ビット線は放電され、接地電位Vssとなる。次に、データ記憶回路10の信号VPREをVdd、信号BLPREをVddVthとし、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを0.9VVthとする。TDCのノードN3はビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。この後、TDCの電位をPDCに転送する。この結果、メモリセルのデータが2である場合、PDCにハイレベル信号がラッチされ、メモリセルのデータが0である場合、PDCにローレベル信号がラッチされる。図10aは、データロード、内部リード後のSDC、PDCとメモリセルのデータの関係を示している。データキャッシュの設定S25この後、図11、図12に示すデータキャッシュ設定手順に従い各データキャッシュに記憶されたデータが操作される。すなわち、図11aに示すように、外部よりデータを入力し、内部リードにより読み出したデータを各データキャッシュにラッチさせた状態において、図11bに示すように、SDCのデータがPDCに転送され、PDCのデータがDDCに転送される。次に、図11cに示すように、DDCのデータが反転されてSDCに転送される。この後、PDCのデータがDDCに転送される。次に、図12aに示すように、DDCのデータが反転されてPDCに転送される。この後、PDCのデータがDDCに転送される。次に、図12bに示すように、第2のフラグセル用データ記憶回路10bに第2のフラグセルFC2用のデータがロードされ、SDCにラッチされる。次いで、図12cに示すように、SDCとDDCのデータが合成され、この合成されたデータが反転されて、PDCに転送される。このPDCのデータはDDCに転送される。このような操作をすることにより、各データキャッシュに記憶されるデータは図10b、図12cに示すようになる。すなわち、メモリセルのデータを0にする場合第1ページにおいてデータ1、第2ページにおいてデータ1、PDC、DDC、SDCは全てハイレベルに設定される。メモリセルのデータを1にする場合第1ページにおいてデータ1、第2ページにおいてデータ0、PDCはローレベル、DDCはローレベル、SDCはハイレベルに設定される。メモリセルのデータを2する場合第1ページにおいてデータ0、第2ページにおいてデータ1、PDCはローレベル、DDCはハイレベル、SDCはローレベルに設定される。メモリセルのデータを3する場合第1ページにおいてデータ0、第2ページにおいてデータ0、PDC、DDC、SDCは全てローレベルに設定される。第2のフラグセルデータロードS25前述したように、データキャッシュの設定途中において、第2のフラグセル用データ記憶回路10b内のSDCがローレベルに設定される。これにより第2のフラグセルFC2のデータは0から2となる。第2ページの書き込みは、図1cに示すように、メモリセルのデータ0から1への書き込みと、メモリセルのデータ2から3への書きこみであるが、第2のフラグセルに関しては、メモリセルのデータを0からメモリセルのデータを2にプログラムする。このため、図1dに示すように、第2のフラグセルのデータ2の閾値電圧の分布は広がる可能性がある。しかし、第2のフラグセルFC2のリード動作は、必ずb’より低いbのレベルをワード線に供給して行なうため問題はない。さらに、例えば各データキャッシュの設定の途中において、カウンタPCが0に初期設定されるS25。この後、第1のフラグセルFC1にデータが書かれたか否かが判別されるS26。第1のフラグセルFC1のデータは、内部リードS24において読み出されている。第1のフラグセルFC1にデータが書き込まれていない場合、プログラムへ移行されるS27。しかし、第1のフラグセルFC1にデータが書き込まれている場合、図1cの分布になっているため、内部リードをbのレベルで再度行なうS26-S23。プログラムS27第1のフラグセルFC1にデータが書き込まれていない場合、メモリセルにデータが書き込まれる。例えばカウンタPCをカウントアップした後、先ず、信号BLC1をVsgとすると、PDCがデータ0の場合、ビット線がVssとなり、データ1の場合、ビット線はVddになる。次に、信号BLC1=Vssとした後、信号VREG=Vdd、信号REG=中間電位Vth1VVthとする。すると、DDCがデータ1の場合、ビット線がVddとなり、DDCがデータ0の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ1,3を書き込んでいるときのみ、ビット線はVssとなる。メモリセルにデータ2を書き込んでいる場合、ビット線は中間電位1Vとなり、メモリセルのデータが0の場合書き込みしない場合、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位1Vの場合、少しだけ書き込まれる。したがって、データ2を書き込んでいるメモリセルは、あまり書き込まれない可能性がある。しかし、これは、データ2とデータ3のベリファイを一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。この後、メモリセルにデータ1が書き込まれておりS28、さらに、カウンタPCの値が予め定められたベリファイ電圧a’によるベリファイ回数の最大値より小さい場合S29、ベリファイ電圧a’とa’を順次設定して書き込みベリファイが行なわれるS30。尚、以下に説明するベリファイ動作は、ベリファイ電圧をa’、a’、b’、b’、c’の順に設定して実行される。このとき、不要なベリファイ動作をスキップしてプログラム及びベリファイするため、カウンタPCの値が予め定められた値と比較されるS29,S31,S32、S34、S37。例えばベリファイa’、a’のベリファイ回数が最大ループ回数に達した場合、ベリファイa’、a’をスキップする。また、例えばベリファイb’のベリファイ開始回数に達していない場合、ベリファイb’をスキップして、プログラムが実行される。このスキップの制御に必要な各値は例えば次に示すように設定されている。ベリファイa’の最大ループ回数=10ベリファイb’によるベリファイ開始回数=4ベリファイc’によるベリファイ開始回数=8最大プログラムロープ回数=20ベリファイa’、a’S30このベリファイにおいて、信号VPREをハイレベル、信号BLCLAMPを所定電位に設定すると、ビット線がプリチャージされる。図13aは、ベリファイ電圧a’によるベリファイ後、各データキャッシュに設定されたデータを示している。次に、ワード線の電位をベリファイ電位a’に設定し、ビット線を放電する。信号VPRE=Vdd、信号BLPRE=VsgとしてTDCをVddに充電した後、信号BLCLAMPに所定の電圧を与える。ビット線がVssの場合、TDCはVssローレベルになり、ビット線にプリチャージ電位が残っている場合、TDCはVddハイレベルとなる。ここで、信号BLC2をVth0.5Vとすると、SDCが0の場合メモリセルにデータ2、3を書き込んでいる場合、TDCはVssとなる。したがって、TDCがVddとなるのは、メモリセルにデータ1が書き込まれていてベリファイ電位a’に達した時である。メモリセルにデータ1を書き込んでいない場合、ビット線はプリチャージされていないため、TDCはローレベルとなっている。また、メモリセルにデータ1を書き込んでいてベリファイ電位a’に達しない場合もTDCはVssとなる。ここで、信号VREGをハイレベルとし、信号REG=ハイレベルとすると、DDCのデータが1の場合、強制的にTDCがハイレベルになる。したがって、TDCがVddになるのは、メモリセルにデータ1を書き込んでいてベリファイ電位a’に達した時と、DDCのデータが1の場合、つまりメモリセルへデータ2を書き込んでいた場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーする。この後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。図13bにおいて、PDCがデータ1となるのは、メモリセルにデータ1を書き込んでいて、ベリファイ電位a’を超えている場合と、メモリセルにデータ2を書き込んでいる場合である。次に、ワード線の電位を少し上げてベリファイ電位a’とし、ビット線を放電する。信号VPRE=Vdd、信号BLPRE=VsgとしてTDCを再びVddに充電した後、信号BLCLAMPに所定の電圧を与える。ビット線がVssの場合、TDCはVssとなり、ビット線にプリチャージ電位が残っている場合、TDCはVddになる。ここで、信号BLC2をVth0.5Vとすると、SDCが0の場合メモリセルのデータ2、3に書き込んでいる場合、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルにデータ1が書き込まれていてベリファイ電位a’に達した時である。メモリセルにデータ1を書き込んでいない場合と、メモリセルにデータ1を書き込んでいてベリファイ電位a’に達しない場合もTDCはVssとなる。ここで、信号VREGをハイレベルとし、信号REG=ハイレベルとすると、DDCのデータが1の場合、すなわち、メモリセルにデータを書き込んでいない場合、TDCは強制的にハイレベルとされる。したがって、TDCがVddになるのは、書き込み非選択の場合と、メモリセルにデータ1を書き込んでいてベリファイ電位a’に達した場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーした後に、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ図14。メモリセルにデータ1を書き込んでいるセルにおいて、閾値電圧がベリファイ電位a’より高くなると、DDCのデータが1ハイレベルとなる。また、メモリセルにデータ1を書き込んでいるセルにおいて、ベリファイ電位a’を用いた書き込みが全て終了すると、PDCのデータは1ハイレベルになる。この後、カウンタPCの値が予め定められたベリファイ電圧b’によるベリファイ開始回数より大きくS31、予め定められたベリファイ電圧c’によるベリファイ開始回数より小さい場合S32、ベリファイ電位bを設定して書き込みベリファイが行なわれるS33。ベリファイb’S33ベリファイ電位bを用いたベリファイ図15。メモリセルに対するデータ2の書き込みが、データ3の書き込みより先に終わるため、先ず、ベリファイ電位bのみのベリファイを行なう。信号VPRE=Vdd、信号BLCLAMPを所定の電位に設定する。すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位b’を供給しビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位とする。すると、TDCがハイレベルになるのは、セルの閾値電圧が、ベリファイ電位b’以上にある場合である。ここで、信号BLC1=Vth0.5Vとすると、PDCが0の場合メモリセルにデータ3を書き込んでいる場合と、メモリセルにデータ1を書き込んでいる場合で、ベリファイ電位a’以下の場合、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルにデータ2が書き込まれていてベリファイ電位b’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ2を書き込んでいてベリファイ電位b’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。この後、カウンタPCの値がベリファイ電圧c’によるベリファイ開始回数より大きい場合S34、ベリファイ電位b、cを用いた同時ベリファイが行なわれるS34、S35。ベリファイ電位bc同時ベリファイ図16。プログラム及びベリファイファイを何回か繰り返していると、メモリセルのデータ3に書き込みを行っているセルも書き込みが終了するため、前記ベリファイ電位bを用いたベリファイの替わり、ベリファイ電位bc同時ベリファイを行なう。先ず、信号BLPRE=ハイレベル、信号BLCLAMPを所定電位に設定し、ビット線をプリチャージする。次に、ワード線にベリファイ電位b’を供給しビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。この後、TDCをVddに充電した後、BLCLAMPに所定の電位を供給する。すると、TDCがハイレベルになるのは、閾値電圧がベリファイ電位b’以上の場合である。ここで、信号BLC1=Vth0.5Vとすると、PDCが0の場合メモリセルのデータ3に書き込んでいる場合と、メモリセルにデータ1を書き込んでいる場合で、ベリファイ電位a’以下の場合、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルがデータ2に書き込まれていて、ベリファイ電位b’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ2を書き込んでいてベリファイ電位b’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。次に、ワード線にベリファイ電位c’を供給しビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。この後、TDCをVddに充電した後、BLCLAMPに所定の電位を供給する。TDCがVddになるのは、メモリセルのデータが3に書き込まれていてベリファイ電位c’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ2を書き込んでいてベリファイ電位c’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。このようにして、全てのPDCのデータが1になるまで、プログラムとベリファイ動作を繰り返すS36,S37。しかし、書き込み動作において、DDCのデータが1の場合、つまり、メモリセルにデータ2を書き込んでいる場合と、メモリセルにデータ1を書き込んでいてベリファイ電位a’を超えている場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。このプログラム電圧Vpgmの増分ΔVpgmは、第1ページの書き込み動作と、第2の書き込み動作で相違されており、例えば第1ページの書き込み動作における増分ΔVpgmは、第2の書き込み動作における増分ΔVpgmより大きく設定されている。図9のアルゴリズムでは、プログラムとベリファイa,a’を数回繰り返した後に、プログラムとベリファイa’,a’とプログラムベリファイb’を数回繰り返し、プログラムとベリファイa’,a’とプログラムベリファイb’,c’を数回繰り返す。この途中でメモリセルへのデータ1の書き込みは、早く終了する。このため、データ1を書き込むべきセルが無くなった場合、プログラムベリファイa’,a’をスキップし、プログラムとプログラムベリファイb’、又はプログラムとプログラムベリファイb’,c’を繰り返すようになる。プログラムとベリファイa’,a’をスキップする場合、SDCは使用しなくなる。このため、次のプログラムデータを入力することができる。しかし、稀に、メモリセルにデータ1がなかなか書けないセルもある。したがって、プログラムベリファイa,a’の回数を制限しているS29。上記第1の実施形態において、初めに第1ページロアーページのデータをメモリセルに書き込み、この後、第2ページアッパーページのデータをメモリセルに書き込むとき、第1ページのデータを読み出し、3つのレベルの閾値電圧を書き込んでいた。しかし、第1ページのデータと第2ページのデータを同時にメモリセルに書き込むことも可能である。図17は、第1の実施形態の変形例を示すものであり、図9と同一部分には同一符号を付している。図17に示すように、先ず、データ記憶回路をリセットし、カウンタPCを初期設定するS51。この後、第1ページのデータをSDCにロードしS52、次いで、第1ページのデータをSDCからPDCに転送するS53。次に、第2ページのデータをSDCにロードするS54。この後、各データキャッシュを図10bに示すように設定しS55、このデータキャッシュのデータに従ってプログラムを実行するS56。このような方法によれば、第1ページのデータと第2ページのデータを同時にメモリセルに書き込んでいるため、第1ページのみの書き込み動作、及び内部データリードにより第1ページのデータを読み出す必要がない。したがって、高速な書き込みが可能である。第1ページリード図18aは、第1ページリードのダイアグラムを示している。先ず、アドレスを指定し、図3に示す2ページを選択する。図1bcに示すように、第2ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位をbとして読み出し動作を行ない第2のフラグセルのデータが0か1であるかを判別するS71、S72。この判別において、フラグセルが複数セルある場合は、これらの多数決により、0か1を判断する。第2のフラグセルから読み出されたデータが0メモリセルのデータが2の場合、第2ページの書き込みは行われている。このため、セルの閾値電圧の分布は、図1cとなっている。このようなセルのデータを判断するには、ワード線の電位をbでリード動作をすればよい。しかし、ステップS71において、ワード線電位bで読み出し動作をした結果は、既にデータ記憶回路に読み出されている。このため、データ記憶回路に記憶されているデータを外部に出力すれば良いS73。一方、フラグセルから読み出されたデータが1メモリセルのデータが0の場合、第2ページの書き込みが行われていない、セルの閾値電圧分布は、図1a又はbに示すようになっている。これらのメモリのデータを判断するには、ワード線の電位をaでリード動作をしなくてはならない。したがって、ワード線の電位をaとして読み出し動作を行ないS74、この後、データ記憶回路に読み出されたデータが外部に出力されるS73。リード動作:第1ページリード上記のように、第1ページのリード動作は、選択ワード線にリード電位a又はbを供給して読み出し動作が実行される。先ず、選択されているブロック内の非選択ワード線及びセレクト線SG1に読み出し電圧Vreadを供給し、図6に示すデータ記憶回路の信号BLPREを1VVth、BLCLAMPをVddVthとして、ビット線をプリチャージする。この後、セルのソース側のセレクト線SG2をハイレベルにする。閾値電圧が電位a又はbより高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位a又はbより低いセルはオンするため、ビット線がVssとなる。次に、データ記憶回路10の信号BLPREをVddVthとしてトランジスタ61uをオンとすることにより、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを中間電位例えば0.9VVthとしてトランジスタ61tをさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号BLC1をVsgVddVthとしてTDCの電位をPDCに取りこむ。この後、PDCのデータをSDCに移動させるが、第2のフラグセルFC2のデータが1の場合書きこまれていない場合、リードレベルを変更してもう一度セルから読み出す。第2ページリード図18bは、第2ページリードのダイアグラムを示している。第2ページリードでは、先ず、アドレスを指定し、図3に示す2ページを選択する。図1bcに示すように、第2ページの書き込み前と後で、閾値電圧の分布が変わっている。しかし、第2ページの書き込み後は、図1cに示すような分布になっている。このため、ワード線の電位をa、b、cと三回替えて読み出し動作をしなくてはならない。しかし、書き込み時、cでのベリファイは、bでのベリファイの後に続けてワード線の電位を変更させるのみで行っていた。したがって、リード動作もベリファイ動作と同じ動作であるほうが望ましいため、b、cのリード動作は、同時に行なう。すなわち、先ず、ワード線電位をbcとして同時に読み出しを行ないS81。この後、ワード線電位をaとして読み出し動作を行なうS82。メモリセルの閾値電圧がワード線電位aより低いか、ワード線電位bより高くワード線電位cより低い場合、データを1とする。また、メモリセルの閾値電圧がワード線電位aより高くワード線電位bより低いか、ワード線電位cより高い場合、データを0とする。第2ページ書込み前において、第2ページのデータは1が出力されるべきである。しかし、図1aに示す閾値電圧分布になっている。このため、第2ページの書き込み後と同じ読み出し動作をすると出力データが0となることもある。したがって、第1のフラグセルFC1のデータが0か1であるかを判別するS83。この結果、第1のフラグセルFC1のデータが1で、第2ページの書き込みが行なわれていない場合、出力データを1に固定するS84。出力データを1に固定するには、データ記憶回路の信号PRSTをハイレベルとし、SDCを1に設定する。あるいは、図2に示すデータ入出力バッファよりデータ1しか出力させないようにする。また、第1のフラグセルFC1のデータが0の場合、読み出したデータを出力するS85。第2ページリードは、具体的には、次のような動作を実行する。リード動作:第2ページリード第1回目第2ページのリード動作の1回目は、プログラムベリファイ時のbc同時ベリファイと同じように、ビット線をプリチャージした後、ワード線にリード電位bを供給する。この状態で、メモリセルからデータを読み出し、途中でワード線の電位をリード電位cに変更して読み出し動作をするS81。先ず、選択されているブロック内の非選択ワード線及びセレクト線SG1に読み出し電圧Vreadを供給し、図6に示すデータ記憶回路の信号BLPREを1VVth、BLCLAMPをVddVthとして、ビット線をプリチャージする。この後、メモリセルのソース側のセレクト線SG2をハイレベルにする。閾値電圧が電位bより高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位bより低いセルはオンするため、ビット線がVssとなる。次に、データ記憶回路の信号BLPREをVddVthとしてトランジスタ61uをオンとすることにより、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを0.9VVthとしてトランジスタ61tをさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号BLC1をVsgVddVthとしてTDCの電位をPDCに取りこむ。次に、ワード線電位をcに変更する。閾値電圧が電位cより高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位bより低いセルはオンするため、ビット線がVssとなる。このビット線放電時間中に、信号DTG=VddVthとして、PDCのデータをDDCにコピーする。次に、データ記憶回路10の信号BLPREをVddVthとしてトランジスタ61uをオンとすることにより、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを0.9VVthとしてトランジスタ61tをさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号BLC1をVsgVddVthとしてTDCの電位をPDCに取りこむ。リード動作:第2ページリード第2回目第2ページのリード動作の2回目は選択ワード線にリード電位aを供給し、読み出し動作をするS82。先ず、選択されているブロック内の非選択ワード線及びセレクト線SG1に読み出し電圧Vreadを供給する。この状態において、データ記憶回路10の信号BLPRE、BLCLAMPを1VVthとし、ビット線をプリチャージする。この後、メモリセルのソース側のセレクト線SG2をハイレベルにする。閾値電圧がワード線電位aより高いセルはオフするためビット線はハイレベルのままである。また、閾値電圧がワード線電位aより低いセルはオンするためビット線がVssとなる。次に、データ記憶回路10の信号BLPREをVddVthとすることにより、TDCのノードN3をVddにプリチャージした後、信号BLCLAMPをVddVthとしてトランジスタ61tをオンさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。このビット線放電中に、信号VPRE=Vss、信号BLPREをVddVthとし、としTDCを一旦Vssにした後、信号REG=VddVth、信号VREG=Vddとし、DDC=ハイレベルの場合、TDCをハイレベルとする。つまりDDCのデータをTDCにコピーする。次に、信号DTG=VddVthとしてPDCのデータをDDCにコピーした後、信号VREG=Vss、信号REG=Vddとし、DDCがハイレベルの場合強制的にTDCをローレベルにする。この後、信号BLC1=VddVthとして、TDCの電位をPDCに取りこむ。ここでPDCがハイレベルとなるのは、第1回目のリードでbレベルを超え、cレベル以下の場合であり、ローレベルとなるのは、第1回目のリードでbレベル以下、又はcレベル以上の場合である。次に、データ記憶回路10の信号BLPREをVddVthとしてトランジスタ61uをオンとすることにより、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを0.9VVthとしてトランジスタ61tをさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号DTG=VddVth、信号REG=Vdd、信号VREG=Vssとして、PDCがハイレベル場合強制的に、TDCをVssにする。次に、信号BLC1をVsgVddVthとしてTDCの電位をPDCに取りこむ。この結果、PDCがハイレベルとなるのはメモリセルの閾値電圧が、ワード線電位aより高く、ワード線電位bより低い場合と、ワード線電位cより高い場合である。この後、PDCのデータをSDCに移動させる。第1のフラグセルFC1のデータが1の場合書き込まれていない場合、第2ページは、書き込まれていない。このため、出力データを1に固定しデータを出力するS84。尚、上記説明では、1回のビット線のプリチャージでワード線の電位をbcと変化させてメモリセルのデータを読み出し、再度、ビット線をプリチャージし、ワード線の電位をaとして読み出していたが、1回のビット線のプリチャージでワード線の電位をabcと変化させてメモリセルのデータを読み出すことも可能である。イレーズ消去動作は、先ず、アドレスを指定し、図3の破線で示すブロックを選択する。次に、セルが形成されたウエルの電位を高電圧約20Vにし、選択ブロックのワード線をVss、非選択ブロックのワード線をフローティングにする。すると、選択ブロックのセルとウエル間に高電圧が加わり、セルに記憶されたデータが消去される。一方、非選択ブロックにおいて、ワード線はフローティング状態であるため、ウエルを高電圧にすると、ワード線も高電圧になる。このため、非選択ブロックのメモリセルに記憶されたデータは消去されない。消去動作を行なうと、メモリセルのデータは0となり、第1ページ、第2ページの何れでリードを行なってもデータ1が出力される。上記第1の実施形態によれば、第2ページのプログラムベリファイにおいて、ベリファイ電圧b’c’によるデータ2、3のベリファイを同時に行なっている。このため、2つのベリファイを行なう際に、1回ビット線をプリチャージし、ワード線電位をb’及びc’に設定するだけでよい。したがって、長時間を要するビット線のプリチャージの回数を削減することができるため、ベリファイ速度を向上できる。また、第2ページの読み出し動作において、1回ビット線をプリチャージし、ワード線電位をb及びcに設定することにより、データ2、3を読み出している。したがって、プリチャージ回数を削減することができるため、読み出し速度を向上できる。さらに、データのプログラムベリファイ動作と読み出し動作は、ビット線をプリチャージした後、ワード線の電位を変化させている。このため、プログラムベリファイ動作と読み出し動作を同じ条件で行なうことができるため、読み出し精度を向上することが可能である。また、第2ページ書き込みにおいて、ベリファイa’の実行回数を規定する最大ループ回数を設定し、カウンタPCの値が最大ループ回数に達した場合、ベリファイa’の動作を終了させている。このため、第2ページの書き込み時間を短縮することができる。さらに、上記第1の実施形態によれば、本来の閾値電圧より低い電位により、第1ページのデータをメモリセルに書き込み、第2ページのデータを書き込む前に隣接するメモリセルに第1ページのデータを書き込み、隣接するメモリセルの書き込み後、第2ページのデータをメモリセルに書き込み、記憶データに対応した本来の閾値電圧に設定している。このため、隣接するメモリセルのFG-FG間容量の影響を考慮して、第1ページのデータをメモリセルに書き込んでいるため、多値のデータに対応する閾値電圧を正確に設定することができる。また、第2ページのデータを書き込む際、フラグセルにデータを書き込み、各ページのデータを読み出す際、フラグセルに記憶されたデータに応じて外部に出力されるデータを制御している。したがって、各ページのデータを確実に出力することができる。さらに、従来、例えばメモリセルから読み出したデータの一部を外部から入力したデータに変えて書き込む、所謂ページコピーを行う場合、図6に破線で示すように、インバータ回路62cとインバータ回路62dの間にトランジスタ62eが挿入され、インバータ回路62cとトランジスタ62eにトランジスタ62fが並列接続されていた。このような構成において、従来は、ページコピー時に、プログラムのコマンドが入力されると、メモリセルから読み出されたデータは、書き込み時にデータ入力端子5aから供給されたデータと論理レベルが反転してSDCにラッチされる。このため、データ入力端子5aから供給されるデータと、SDCにラッチされたデータとの論理レベルを一致させる必要がある。したがって、ページコピー時に、相補的な信号φ、/φにより、トランジスタ62eをオンし、トランジスタ62fをオフとして、書き込みデータを反転してSDCに供給していた。しかし、上記第1の実施形態によれば、ページコピーを行なう場合、メモリセルから読み出されたデータは反転された後、SDCにラッチされ、データ入力端子5aからSDCの供給されるデータと論理レベルが一致されている。このため、データ入力端子5aとSDCの間に従来のようなトランジスタ62e,62fを設ける必要がない。したがって、回路構成を簡単できる利点を有している。尚、第1の実施形態において、第2ページアッパーページのデータをメモリセルに書き込むとき、プログラムとベリファイa,a’と、プログラムベリファイb’,c’を分けて行っていた。しかし、プログラムベリファイb’,c’のように、一回のビット線充電後、ワード線電位をa,a’,b’,c’と次々に上昇することにより、これらを1度にベリファイすることも可能である。また、第2ページのリード時、リードb,cとリードaを分けて行っていたが、リードb,cの時のように、一回のビット線充電後、ワード線電位をa,b,cと次々に上昇することにより、これらのデータを1度に読み出すことも可能である。第2の実施形態図19は、第2の実施形態を示すものであり、8値3ビットのデータを記憶するNANDフラッシュメモリのメモリセルアレイ1及びビット線制御回路2を示している。図19に示す構成は、図3に示す4値2ビットの構成とほぼ同様であるため、異なる部分についてのみ説明する。図19において、外部アドレスにより、1本のワード線が選択されると、破線で示す、1つのセクタが選択される。1セクタは3ページにより構成される。この3ページはアドレスによって切り替えられる。すなわち、1つのメモリセルに3ビットのデータを記憶することができるため、3ビットの切り替えはアドレス第1ページ、第2ページ、第3ページによって行なう。また、1セクタは5つのフラグセルFC1、FC2、FC3、FC4、FC5を有している図19は、フラグセルFC1とFC5のみを示している。このため、1本のワード線が選択されると、5つのフラグセルFC1、FC2、FC3、FC4、FC5が同時に選択される。各フラグセルFC1~FC5はビット線を介してフラグ用データ記憶回路10a、10b、10c、10d、10eに接続されている図19は、フラグ用データ記憶回路10a、10eのみを示している。フラグセルFC1、FC2は、第2ページの書き込みが行なわれていることを示すデータを記憶し、フラグセルFC3、FC4、FC5は、第3ページの書き込みが行なわれていることを示すデータを記憶する。しかし、1つのメモリセルに3ビットのデータを記憶することができるため、5つのフラグセルを用いず、3つのフラグセルにより、第2ページと第3ページの書き込みが行なわれていることを示すデータを記憶することも可能である。また、信頼性を向上させるため、フラグセルFC1~FC5を、それぞれ複数個具備し、これら複数セルに同一データを記憶し、読み出し時に、複数のフラグセルから読み出したデータを多数決により決めることもできる。第2の実施形態の動作について説明する。消去動作は、4値の場合と同じである。図20abc、図21abは、メモリセルのデータとメモリセルの閾値電圧の関係を示している。消去動作を行なうとメモリセルのデータは0となる。図20aに示すように、第1ページの書き込みにより、メモリセルのデータはデータ0とデータ4になる。この後、第1ページに隣接するセルにデータが書き込まれるとデータ4の閾値電圧の分布が広がる図20b。第2ページの書き込み後、メモリセルのデータはデータ0、2、4、6となる図20c。この後、隣接セルにデータが書き込まれると、データ0、2、4、6の閾値分布が広がる図21a。第3ページの書き込み後、メモリセルのデータはデータ0~7となる図21b。本実施形態において、メモリセルのデータは閾値電圧の低いほうから高い方へと、定義されている。図22abは、本実施形態における2つの書き込み順序の例を示している。ブロック内において、ソース線に近いメモリセルからページごとに書き込み動作が行なわれる。図22abは、説明の便宜上、ワード線を4本としている。図22aに示す書き込み順序は、図7に示す書き込み順序と類似している。これに対して、図22bに示す書き込み順序は、図22aと若干相違している。すなわち、第1ページの書き込み後、第2ページは隣接のセルを初めに書くのではなく、同じセルに第2ページまで書き込む。この後、第3ページの書き込みを行なう前に、隣接セルの第2ページまで、書き込みを行なった後、第3ページの書き込みを行なっている。このように、第3ページの隣接セルの影響を考慮した書き込みをすることも可能である。第3ページのワード線のリード電位は、本来a,b,c,d,e,f,gとし、ベリファイ電位をa’,b’,c’,d’,e’,f’,g’とする。第2ページのリード電位は、本来のリード電位より低い値b=a,d,fとし、第2ページでのベリファイ電位はこれらより少し高い値、b’,d’,f’とする。第1ページのリード電位は、本来のリード電位より低い電位d=aとし、第1ページでのベリファイ電位はこれらより少し高い電位d’とする。プログラム及びプログラムベリファイプログラム動作は、先ず、アドレスを指定し、図19に示す3ページを選択する。本メモリは、3ページのうち、第1ページ、第2ページ、第3ページの順でしか、プログラムできない。第1ページ及び第2ページのプログラムは、4値の場合と同様である。図20abcに示す4値のメモリセルのデータとメモリセルの閾値電圧は、図1abcに対応している。また、プログラム及びプログラムベリファイのブロックダイアグラムは、図8、図9と同様であるため省略する。但し、メモリセルのデータの定義及びワード線の電位は、4値の場合、0、1、2、3及びa、b、cであるのに対し、8値の場合、0、2、4、6及びb、d、fとなっている。第1ページプログラム第1ページのプログラムのブロックダイアグラムは、図8と同様である。しかし、前述したように、ワード線電位の定義が変更されている。隣接セルプログラム図22aに示すように、メモリセル1の第1ページに1ビットのデータの書き込み後、メモリセル1とワード方向に隣接したメモリセル2の第1ページが書き込まれる。次いで、メモリセル1とビット方向に隣接したメモリセル3の第1ページの書き込み、メモリセル1と対角に隣接したメモリセル4の第1ページの書き込みが行なわれる。これらの書き込み動作が行なわれると、書き込みデータによっては、FG-FG間容量によって、メモリセル1の閾値電圧が上がる。このため、メモリセル1のデータ0とデータ4の閾値電圧分布は図20bのように閾値電圧の高いほうに広がる。この後、再びメモリセル1の第2ページに1ビットのデータが書き込まれる。第2ページプログラム第2ページのプログラムのブロックダイアグラムは、図9と同様であるが、前述したように、ワード線電位の定義が変更されている。また、データロード、内部リード後のデータキャッシュ内のデータ及びデータキャッシュ設定後のデータキャッシュ内のデータは、同様である。第2ページの書き込みにおいて、フラグセルFC1は、ベリファイ電位b’まで書き込まれ、フラグセルFC2は、ベリファイ電位d’まで書き込まれる。隣接セルプログラム図22aに示すように、メモリセル1の第1ページ及び第2ページにデータの書き込み後、メモリセル2の第2ページ、メモリセル5、6の第1ページ及びメモリセル3、4の第2ページにデータが書き込まれる。これらの書き込み動作が行なわれると、書き込みデータによっては、FG-FG間容量によって、メモリセル1の閾値電圧が上がる。このため、メモリセル1のデータ2、データ4、データ6の閾値電圧分布は図21aのように広がる。この後、再びメモリセル1の第3ページに1ビットのデータが書き込まれる。第3ページプログラム図23は、第3ページのプログラムのブロックダイアグラムを示している。第3ページのプログラム動作も、先ずアドレスを指定し、図19に示す3ページを選択する。次に、データ記憶回路10をリセットしS91、書き込みデータを外部より入力して全てのデータ記憶回路10のSDCに記憶するS92。外部よりデータ1書き込みを行なわないが入力されると、図6に示すデータ記憶回路10のSDCは、ローレベルになり、データ0書き込みを行なうが入力されるとハイレベルとなる。この後、書き込みコマンドが入力されると、第3ページのプログラムであるので、フラグセルFC3~FC5にデータの書き込みを行なうため、フラグセル用のデータ記憶回路10a、10bに所定のデータが入力される。第3ページのプログラムは、図21bに示すように、メモリセルのデータが0の場合で、外部から入力されるデータが1の場合、メモリセルのデータを0のままとし、外部から入力されるデータが0の場合、メモリセルのデータを1にする。メモリセルのデータが2の場合で、外部から入力されるデータが0の場合、メモリセルのデータを2のままである。しかし、第2ページの書き込み時において、メモリセルのデータが2に達したかどうかをベリファイする際、通常より低いベリファイ電位b’を用いた。このため、データ2を記憶するメモリセルは、本来のベリファイ電位であるb’の電位まで書き込む。メモリセルのデータが2の場合で、外部から入力されるデータが1の場合、メモリセルのデータを3にする。メモリセルのデータが4の場合で、外部から入力されるデータが1の場合、メモリセルのデータは4のままである。しかし、第2ページの書き込み時において、メモリセルのデータが4に達したかどうかをベリファイする際、通常より低いベリファイ電位d’を用いた。このため、データ4を記憶するメモリセルは、本来のベリファイ電位であるd’の電位まで書き込む。メモリセルのデータが4の場合で、外部から入力されるデータが0の場合、メモリセルのデータを5にする。メモリセルのデータが6の場合で、外部から入力されるデータが0の場合、メモリセルのデータを6のままである。しかし、第2ページの書き込み時において、メモリセルのデータが6に達したかどうかをベリファイする際、通常より低いベリファイ電位f’を用いた。このため、データ6を記憶するメモリセルは、本来のベリファイ電位であるf’の電位まで書き込む。メモリセルのデータが6の場合で、外部から入力されるデータが1の場合、メモリセルのデータを7にする。第2ページの書き込みにおいて、フラグセルFC1は、ベリファイ電位b’まで書き込まれ、フラグセルFC2は、ベリファイ電位d’まで書き込まれる。第3ページの書き込みで、フラグセルFC3は、ベリファイ電位a’まで書き込まれ、フラグセルFC4は、ベリファイ電位b’まで書き込まれ、フラグセルFC5は、ベリファイ電位d’書き込まれる。第3ページ第1回目プログラム第3ページのプログラムは、メモリセルにデータ1~7を書き込む。これらのデータを同時にプログラムすることも可能であるが、本実施形態では、先ず、メモリセルにデータ4~7の4つのデータを書き込む。この後、メモリセルにデータ1~3を書き込む。以下、具体的に説明する。内部データリード1及びデータキャッシュ設定1S93、S94メモリセルへデータを書き込む前に、第2ページのメモリセルのデータが4又は6か、0又は2であるかの判断と、メモリセルのデータが6か、データが0、2、4のいずれであるかを判断する。このため、ワード線の電位をd、fに順次設定し、内部リード動作を行なうS93。図25aは内部リード後のデータキャッシュの状態を示している。この後、データキャッシュを操作することにより、図25bに示すように、データキャッシュを設定する。さらに、例えばカウンタPCをゼロに初期設定し、第5のフラグセルのデータをロードするS94。図25bにおいて、メモリセルのデータを0~3にする場合、PDCはハイレベル。メモリセルのデータを4とする場合、PDCはローレベル、DDCはローレベル、SDCはハイレベルに設定する。メモリセルのデータを5とする場合、PDCはローレベル、DDCはハイレベル、SDCはハイレベルに設定する。メモリセルのデータを6とする場合、PDCはローレベル、DDCはハイレベル、SDCはローレベルに設定する。メモリセルのデータを7とする場合、PDC、DDC、SDCをいずれもローレベルに設定する。プログラム:第1回目S95次いで、カウンタPCをカウントアップした後、メモリセルにデータが書き込まれる。第2の実施形態においても、第1の実施形態と同様、カウンタの値と予め定められたベリファイ開始回数を用いて、不要なベリファイがスキップされる。先ず、信号BLC1をVsgとすると、PDCがデータ0の場合、ビット線がVssとなり、データ1の場合、ビット線はVddになる。次に、信号BLC1=Vssとした後、信号VREG=Vdd、信号REG=中間電位Vth1VVthとする。すると、DDCがデータ1の場合、ビット線が中間電位となり、DDCがデータ0の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ4,7を書き込んでいるときのみビット線はVss、メモリセルにデータ5,6を書き込んでいる場合、ビット線は中間電位1V、メモリセルのデータが0~3の場合書き込みしない場合、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位1Vの場合、少しだけ書き込まれる。したがって、メモリセルにデータ5,6を書き込んでいるセルは、あまり書き込まれない可能性がある。しかし、メモリセルのデータ6とデータ7のベリファイを一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。このため、ビット線に中間電位を供給する。aこの後、ベリファイ電圧d’を設定して書き込みベリファイが行なわれるS96,S97。このベリファイにおいて、信号BLC2をハイレベルとし、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、SDCがハイレベル、つまり、データ5、4を書き込んでいるメモリセルのみである。次に、ワード線にベリファイ電位d’を供給し、ビット線を放電する。ビット線の放電中に信号VREG=Vss、信号REG=VDDとする。DDCがハイレベルの場合、ビット線を放電する。したがって、ビット線がプリチャージされるのはデータ4を書き込むメモリセルのみである。次に、ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ4が書き込まれていてベリファイ電位d’に達した時だけである。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ4を書き込んでいてベリファイ電位d’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。bこの後、ベリファイ電圧e’を設定して書き込みベリファイが行なわれるS98,S99,S100。このベリファイにおいて、信号VPRE=ハイレベル、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位e’を供給し、ビット線を放電する。次に、このビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位e’以上の場合である。ここで、信号BLC2をVth0.5Vとすると、SDCが0の場合メモリセルのデータ6に書き込んでいる場合とメモリセルのデータ7に書き込んでいる場合、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルのデータが5に書き込まれていてベリファイ電位e’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ5を書き込んでいてベリファイ電位e’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。cベリファイ電位f’を用いたベリファイは、第1の実施形態のベリファイ電位bを用いたベリファイと同様である。但し、ベリファイ時のワード線電位はf’であるS101,S102,S103。dベリファイ電位f’g’同時ベリファイは、第1の実施形態のベリファイ電位bc同時ベリファイと同様である。但し、ベリファイ時のワード線電位はf’g’である。このようにして、全てのPDCのデータが1になるまで、プログラムとベリファイ動作を繰り返すS106、S107。しかし、書き込み動作において、DDCのデータが1の場合、つまり、メモリセルにデータ5を書き込んでいる場合と、メモリセルにデータ6を書き込んでいる場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。第1回目プログラムにより、メモリセルにデータ4~7の4つが書き込まれる。上記説明では、1回のプログラムの後、4つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらない。このため、初めは、ベリファイ電位d’を用いたベリファイのみ行なう。次に、ベリファイ電位d’とベリファイ電位e’を用いたベリファイを行なう。次に、ベリファイ電位d’とベリファイ電位e’ベリファイ電位f’のみを用いたベリファイを行なう。最後に、ベリファイ電位d’とベリファイ電位e’を用いたベリファイと、ベリファイ電位f’とベリファイ電位g’を同時にベリファイするf’、g’同時ベリファイを行なうことも可能である。また、プログラムの終了近くのループでは、データ4への書き込みは終了している。このため、ベリファイ電位d’を用いたベリファイ動作を省略し、ベリファイ電位d’とベリファイ電位e’用いたベリファイ動作を省略することも可能である。第3ページ第1回目プログラムにおいて、フラグセルFC5は、ベリファイ電位d’に書き込まれる。第2回目プログラムS108~S121第2回目プログラムにより、メモリセルにデータ1~3の3つが書き込まれるが、データ1を書き込むメモリセルには、全く書き込みが行なわれていない。このため、第1の実施形態と同様に、本来のベリファイ電位より低いベリファイ電位a’を設け、このベリファイ電位を超えたセルに対して、ビット線に中間電位を供給する。これにより、書き込みスピードを遅くし、閾値分布を狭くする。また、メモリセルのデータ2とデータ3のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、メモリセルにデータ2を書き込んでいる場合にも、ビット線に中間電位を供給することにより、書き込みスピードを遅くする。内部データリード2及びデータキャッシュ設定2S109、S110第3のフラグセルのデータをロードした後S108、セルへの書き込みの前に、ワード線の電位をb=a、dに順次設定し、内部リード動作を行なうS109。この後、データキャッシュを操作することにより、図26に示すように、データキャッシュを設定するS110。すなわち、メモリセルにデータ0を書き込む場合、PDCはハイレベル、DDCはハイレベル、SDCはハイレベルに設定する。メモリセルにデータ1を書き込む場合、PDCはローレベル、DDCはローレベル、SDCはハイレベルに設定する。メモリセルにデータ2を書き込む場合、PDCはローレベル、DDCはハイレベル、SDCはローレベルに設定する。メモリセルにデータ3を書き込む場合、PDCはローレベル、DDCはローレベル、SDCはローレベルに設定する。メモリセルにデータ4~7を書き込む場合、PDCは全てハイレベルに設定する。ここで、例えばカウンタPCをゼロに初期設定し、さらに、第4のフラグセルのデータをロードする。プログラム:第2回目S111次いで、例えばカウンタPCをカウントアップした後、メモリセルにデータが書き込まれる。先ず、信号BLC1をVsgとすると、PDCがデータ0の場合、ビット線がVssとなり、データ1の場合、ビット線はVddになる。次に、信号BLC1=Vssとした後、信号VREG=Vdd、信号REG=中間電位Vth1VVthとする。すると、DDCがデータ1の場合、ビット線が中間電位1Vとなり、DDCがデータ0の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ3を書き込んでいる時と、メモリセルにデータ1を書き込んでいて本来のベリファイ電位より低いベリファイ電位a’以下の場合、ビット線は、Vssである。メモリセルにデータ2を書き込んでいる時と、メモリセルにデータ1を書き込んでいて本来のベリファイ電位より低いベリファイ電位a’を越えている場合、ビット線は中間電位1V、メモリセルのデータが0、4~3の場合書き込みしない場合、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位1Vの場合、少しだけ書き込まれる。しかし、メモリセルにデータ2とデータ3を書き込む場合のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。eベリファイ電位a’、a’を用いたベリファイは、第1の実施形態のベリファイ電位a’、a’を用いたベリファイと同様であるS112、S113、S114。fベリファイ電位b’のみを用いたベリファイは、第1の実施形態のベリファイ電位b’のみを用いたベリファイと同様であるS115、S116、S117。gベリファイ電位b’c’同時ベリファイは、第1の実施形態のベリファイ電位b、c同時ベリファイと同様であるS118、S119。PDCがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路のPDCのデータがハイレベルになるまでこのプログラム動作とベリファイ動作が繰り返されるS120、S121。上記説明では、1回のプログラムの後、3つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらないため、初めは、ベリファイ電位a’、a’を用いたベリファイのみ行ない、次に、ベリファイ電位a’、a’とベリファイ電位b’を用いたベリファイを行ない、最後に、ベリファイ電位a’、a’を用いたベリファイとベリファイ電位b’c’の同時ベリファイを行なうことも可能である。また、プログラムの終了近くのループにおいて、データ1への書き込みは終了しているため、これらのベリファイ動作は省略することもできる。データ1のベリファイが不用になると、SDCでデータを保持する必要がなくなる。このため、次の書き込みのためのデータを外部より読み込み、SDCに記憶しておくことも可能である。このような構成とした場合、さらなる高速動作が可能である。第3ページ第2回目プログラムにおいて、フラグセルFC3は、ベリファイ電位a’まで書き込まれ、フラグセルFC4は、ベリファイ電位b’まで書き込まれる。第1ページリード図27aは、第1ページのリード動作を示すダイアグラムである。先ず、アドレスを指定し、図19に示す3ページを選択する。図20abc、図21abに示すように、第2ページの書き込み前と後、及び第3ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位をdとして読み出し動作を行なうS131。この後、第3ページが書き込まれているかどうかをフラグセルFC5のデータから判別するS132。フラグセルが複数ある場合は、これらの多数決により判断する。フラグセルFC5から読み出されたデータが0場合、第3ページのデータが書き込まれている。閾値分布は図21bとなっているため、ワード線の電位をdで読み出した結果が、既にデータ記憶回路10に読み出されている。このため、これらのデータを外部に出力すればよいS133。一方、フラグセルFC5から読み出されたデータが1場合、第3ページのデータが書き込まれていない。したがって、ワード線の電位をdとして読み出し動作を行なうS134。第2ページが書き込まれているかどうかフラグセルFC2から読み出されたデータに基づき判別するS135。フラグセルが複数ある場合は、これらの多数決により判断する。フラグセルFC2から読み出されたデータが0場合、第2ページのデータが書き込まれている。閾値分布は図20cとなっているため、ワード線の電位をdで読み出した結果が、既にデータ記憶回路10に読み出されている。このため、これらのデータを外部に出力すればよいS133。一方、フラグセルFC2から読み出されたデータが1の場合、第2ページのデータが書き込まれていない。したがって、ワード線の電位をaとして読み出し動作を行ない読み出した結果を外部に出力すればよいS136。第2ページリード図27bは、第2ページのリード動作を示すダイアグラムである。先ず、アドレスを指定し、図19に示す3ページを選択する。図20a~c、図21abに示すように、第2ページの書き込み前と後、及び第3ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位をbとして読み出し動作を行なうS141。この後、第3ページが書き込まれているかどうかフラグセルFC4から読み出したデータにより判別するS142。フラグセルが複数ある場合は、これらの多数決により判断する。フラグセルFC4から読み出されたデータが0場合、第3ページのデータが書き込まれている。閾値分布は図21bとなっている。このため、ワード線電位b、d、fでメモリセルからデータを読み出す必要がある。しかし、ワード線電位bの読み出し結果は、既にデータ記憶回路に読み出されている。このため、ワード線電位d、fによりデータを読み出し、出力すればよいS143、S144。ワード線電位d、fによる読み出しは、第1の実施形態のb、c同時リードと同様である。一方、フラグセルFC4から読み出されたデータが1の場合、第3ページのデータが書き込まれていない。したがって、ワード線の電位をaとして読み出し動作を行なうS145。フラグセルFC1から読み出されたデータにより、第2ページが書き込まれているかどうかを判別するS146。フラグセルが複数ある場合、これらの多数決により判断する。フラグセルFC1から読み出されたデータが0の場合、第2ページのデータが書き込まれている。閾値分布は図20cとなっているため、ワード線電位b、d、fで読み出す必要がある。しかし、ワード線電位bの読み出し結果は、既にデータ記憶回路10に読み出されている。このため、ワード線電位d、fでデータを読み出し出力するS144。ワード線電位d、fでのリードは、第1の実施形態のb、c同時リードと同様である。一方、フラグセルFC1から読み出されたデータが1の場合、第2ページのデータが書き込まれていない。したがって、データを1に固定して外部に出力すればよいS148。第3ページリード図28は、第2ページのリード動作を示すダイアグラムである。先ず、アドレスを指定し、図19に示す3ページを選択する。図20abc、図21abに示すように、第2ページの書き込み前と後、及び第3ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、ワード線電位e、gとして読み出しS151、次いでワード線電位a、cとして読み出し動作を行なうS152。この後、フラグセルFC3から読み出されたデータに基づき、第3ページが書き込まれているかどうかを判別するS153。フラグセルが複数ある場合は、これらの多数決により判断する。ワード線電位e、g、ワード線電位a、cのリード動作はは、第1の実施形態と同様である。フラグセルFC3から読み出されたデータが0場合、第3ページのデータが書き込まれている。閾値分布は図21bとなっている。このため、ワード線電位e、g、ワード線電位a、cによりデータ記憶回路に読み出されているデータを出力すればよいS154。一方、フラグセルFC3から読み出されたデータが1の場合、第3ページのデータが書き込まれていない。このため、データを1に固定して外部に出力すればよいS155。イレーズ消去動作は、第1の実施形態と同様であるため、説明は省略する。上記第2の実施形態によれば、8値3ビットのデータを確実且つ高速に書き込み、読み出すことができる。しかも、第3ページの書き込みにおいて、1回ビット線をプリチャージした状態において、ワード線の電位を変えることにより、複数の閾値電圧を一括してベリファイしている。このため、第3ページのプログラムベリファイを高速化することが可能である。第2の実施形態に示す、8値3ビットのNAND型フラッシュメモリは、第3ページの書き込み時、第1回目の書き込みで、データ4~7を書き込み、第2回目の書き込みでデータ1~3を書き込んだ。しかし、これに限定されるものではなく、先ず、データ2、4、6を書き込み、この後、データ1、3、5、7を書き込むことも可能である。このような書き込みにおいても、第1の実施形態と同様の効果を得ることができる。第3の実施形態第2の実施形態において、フラグセルFC1~FC5は次のように書き込まれていた。すなわち、第2ページの書き込みにおいて、フラグセルFC1は、ベリファイ電位b’まで書き込まれ、フラグセルFC2は、ベリファイ電位d’まで書き込まれ、第3ページの書き込みにおいて、フラグセルFC3は、ベリファイ電位a’まで書き込まれ、フラグセルFC4は、ベリファイ電位b’まで書き込まれ、フラグセルFC5は、ベリファイ電位d’まで書き込まれていた。このため、第2の実施形態は、5つのフラグセルを用いていた。しかし、フラグセルFC4をフラグセルFC1により代替し、フラグセルFC5をフラグセルFC2により代替することが可能である。このため、図19に示す回路は、3つのフラグ用データ記憶回路と、3つのフラグセルFC1、FC2、FC3により構成することが可能である。上記構成において、第1、第2ページの書き込み動作は、第2の実施形態と同様であり、第3のページの書き込み動作が若干異なっている。図29、図30は、第3ページの書き込み動作を示している。図29に示す第3ページ第1回目の書き込みにおいて、図23と異なるのは、内部リードS93後のフラグセルデータのロードである。第2の実施形態は、第5のフラグセルFC5にデータをロードしていたS94。これに対して、第3の実施形態は、内部リードS93後、フラグセルFC2にデータをロードするS151。また、図29に示す第3ページ第2回目の書き込みにおいて、図24と異なるのは、内部リードS109後のフラグセルデータのロードである。第2の実施形態は、第4のフラグセルFC4にデータをロードしていたS110。これに対して、第3の実施形態は、内部リードS93後、フラグセルFC1にデータをロードするS161。前述したように、第2ページの書き込みにおいて、フラグセルFC1は、ベリファイ電位b’まで書き込まれ、フラグセルFC2は、ベリファイ電位d’まで書き込まれる。次いで、図29、図30に示す書き込み動作により、第3ページの書き込みにおいて、フラグセルFC3は、ベリファイ電位a’まで書き込まれる。第2ページの書き込みにおいて、ベリファイ電位b’まで書き込まれたフラグセルFC1は、第3ページの書き込みによりベリファイ電位b’まで書き込まれる。第2ページの書き込みにおいて、ベリファイ電位d’まで書き込まれたフラグセルFC2は、第3ページの書き込みによりベリファイ電位d’まで書き込まれる。図31aは、第1ページの読み出しアルゴリズムを示し、図31bは第2ページの読み出しアルゴリズムを示している。図31aにおいて、図27aと異なるのは、電位dによる読み出しS131の後の判別である。第2の実施形態において、この判別は、フラグセルFC5から読み出したデータに基づいて行なったS132。これに対して、第3の実施形態において、この判別は、フラグセルFC2から読み出したデータに基づいて行なわれるS201。その他の動作は、図27aと同様である。また、図31bにおいて、図27bと異なるのは、電位bによる読み出しS141の後の判別である。第2の実施形態において、この判別は、フラグセルFC4から読み出したデータに基づいて行なったS142。これに対して、第3の実施形態において、この判別は、フラグセルFC2から読み出したデータに基づいて行なわれるS211。その他の動作は、図27bと同様である。第3ページの読み出しアルゴリズムは、図28に示す第2の実施形態と同様である。上記第3の実施形態によれば、3つのフラグ用データ記憶回路と、3つのフラグセルにより、第2の実施形態と同様にプログラムベリファイを高速化することができる。しかも、フラグ用データ記憶回路とフラグセルの数を削減することができるため、チップの占有面積を削減できる利点を有している。尚、上記第1の実施形態の第2ページの書き込み、及び第2、3の実施形態の第3ページの書き込みにおいて、メモリセルにデータ1を書き込んだ場合、SDCが空く。このため、SDCに、次に書き込むべきデータを供給することが可能である。このように、次に書き込むべきデータを予めSDCに記憶させることにより、一層書き込み速度を高速化することができる。さらに、SDCが空いた場合、プログラム動作を一時停止し、別のページのメモリセルからデータを読み出し、この読み出し結果をSDCに記憶し、SDCから外部に出力している間に、停止していたプログラム動作を再開するように構成することも可能である。尚、フラグセルの数及び配置は、上記各実施形態に限定されるものではない。図32は、フラグセルを複数配置した場合の例を示すものである。この例は、信頼性を向上させるため、メモリセルアレイの一端部に複数の第1、第2のフラグセルとダミーセルを配置している。すなわち、偶数ページBLE用に4個の第1のフラグセルと、3個の第2のフラグセルを配置し、奇数ページBLO用に4個の第1のフラグセルと、3個の第2のフラグセルを配置している。偶数、及び奇数ページ用の第2のフラグセルの両側には偶数用ダミーセル、奇数用ダミーセルが配置されている。このような構成において、データの読み出し時に、遇数ページの4個の第1のフラグセルの多数決と、3個の第2のフラグセルの多数決を求めることにより、遇数ページにおける第2ページの書き込みの有無を判断する。また、奇数ページ用の4個の第1のフラグセルの多数決と、3個の第2のフラグセルの多数決を求めることにより、奇数ページにおける第2ページの書き込みの有無を判断する。このような構成とすれば、隣接するセルのFG-FG間容量により、後に書いた隣接セルの閾値電圧により、先に書いたセルの閾値電圧が変化した場合においても、確実に第2ページが書き込まれたかどうかを判断することができる。第4の実施形態多値データを記憶する不揮発性半導体記憶装置の場合、記憶するデータのビット数が多い場合、1つの閾値分布を狭くしなくてはならない。このため、プログラム及びベリファイ動作において、プログラム電圧を少しずつ上昇させて書き込み動作を行ない、本来のベリファイ電位より低いベリファイ電位を超えた場合、ビット線に中間電位を入力することにより、プログラム動作中の書き込みスピードを遅くし、この状態で本来のベリファイ電位まで書き込むことが提案されている。しかし、本来より低いベリファイ電位を超えていることと、本来のベリファイ電位を超えていることの区別が必要である。このため、ページバッファの数が増大するという課題がある。第4の実施形態は、第1の実施形態とほぼ同様の動作であるが、第2ページのプログラムベリファイにおけるベリファイ電位b’c’によるデータ2、3の同時ベリファイのみが異なっている。第1の実施形態において、閾値電圧b’c’に書き込むセルは、本来の閾値電圧より低いベリファイ電位まで書き込み、このベリファイ電位を超えたセルに対しては、ビット線に中間電位を供給して書き込みスピードを遅くし、閾値電圧の分布幅を狭めることはしなかった。閾値電圧b’に書き込むセルは、図33aに示すように、第1ページの書き込み時にv’のレベルまで書き込みが行われている。したがって、書き込みスピードが遅くなるため、このような操作は、不必要であるかもしれない。しかし、閾値電圧c’に書き込むセルも、第1ページの書き込み時にv’のレベルまで書き込まれているが、v’とc’のレベルに差がある。このため、閾値電圧c’のベリファイにおいて、本来の閾値電圧より低いベリファイ電位まで書き込み、このレベルを超えたセルに対しては、ビット線に中間電位を供給して書き込みスピードを遅くし閾値分布幅を狭めたほうがよい。このため、閾値電圧c’のベリファイでは、先ず、本来より低いベリファイ電位c’と、本来のベリファイ電位c’とで行なう。図34は、第4の実施形態に係る第1ページの書き込み動作を示している。図34のS301~S308に示す第1の書き込み動作、及び図36に示すデータキャッシュにデータは、第1の実施形態と同様であるため、説明は省略する。図35は、第2ページの書き込み動作を示している。第2ページの書き込みにおいて、S311~S322までの動作は、第1の実施形態と殆ど同じである。しかし、ベリファイ電位bc’c’による同時ベリファイが第1の実施形態と異なっている。ベリファイ電位bc’c’同時ベリファイ図37、図38。図35において、プログラム及びベリファイファイを何回か繰り返すと、メモリセルにデータ3を書き込みでいるセルも書き込みが終了する。このため、ベリファイ電位b’を用いたベリファイS322に替わり、ベリファイ電位b’c’c’を用いた同時ベリファイを行なうS324。先ず、信号BLPRE=ハイレベルVddVth、VPRE=ハイレベルVddVth、信号BLCLAMPを所定電位に設定し、ビット線をプリチャージする。次に、ワード線にベリファイ電位b’を供給しビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。この後、TDCをVddに充電した後、信号BLCLAMPを所定の電位とする。すると、TDCが1ハイレベルになるのは、閾値電圧がベリファイ電位b’以上の場合である。ここで、信号BLC1が中間電位、例えばVth0.5Vであるとすると、PDCが0ローレベルの場合メモリセルのデータ3に書き込んでいる場合と、メモリセルにデータ1を書き込んでいる場合で、ベリファイ電位a’以下の場合、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルがデータ2に書き込まれていて、ベリファイ電位b’に達した時である。次に、信号VREGをハイレベル例えばVdd、信号REGをVsg例えばVddVthとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ2を書き込んでいてベリファイ電位b’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。次に、ワード線にベリファイ電位c’を供給しビット線を放電する。この後、TDCをVddに充電した後、信号BLCLAMPを所定の電位とする。TDCがVddになるのは、メモリセルのデータを3に書き込みを行なっていてベリファイ電位c’に達した時である。次に、信号VREGをハイレベル、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ3を書き込んでいてベリファイ電位c’に達した時と、メモリセルにデータ2を書き込んでいる場合と、メモリセルにデータ1を書き込んでいる場合で、ベリファイ電位a’が以上の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVddVthとしてTDCの電位をPDCに取りこむ。次に、ワード線にベリファイ電位c’を供給しビット線を放電する。この後、TDCをVddに充電した後、信号BLCLAMPを所定の電位とする。TDCがVddになるのは、メモリセルのデータが3に書き込まれていてベリファイ電位c’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ3を書き込んでいてベリファイ電位c’に達した時と、書き込み非選択の場合である。さらに、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。これらの動作により、メモリセルにデータ3を書き込んでいて、ベリファイ電位c’を超え、本来のベリファイ電位での書き込みが完了とならなかった場合、DDCはハイレベル、PDCはローレベル、SDCはローレベルとなり、メモリセルにデータ2を書き込んでいる場合と同様になる。このため、次のプログラムにおいて、DDCはハイレベルとなっているため、ビット線が中間電位例えば1Vとなり書き込みが行われる。また、この後、ベリファイ電位b’c’c’同時ベリファイにおいて、閾値電圧b’のベリファイ時に、閾値電圧は当然c’以上にあるため、このベリファイはパスし、PDCがハイレベルとなる。したがって、メモリセルにデータ3を書き込んでいて、ベリファイ電位c’を超えた場合、1回だけビット線を中間電位にして書き込みが行なわれる。このようにして、全てのPDCのデータが1になるまで、プログラムとベリファイ動作が繰り返される。しかし、書き込み動作において、DDCのデータが1の場合、つまり、メモリセルにデータ2を書き込んでいる場合と、メモリセルにデータ3を書き込んでいてベリファイ電位c’を超えたときこれはメモリセルにデータ2を書き込んでいる場合と同じになる、とデータ1を書き込んでいてベリファイ電位a’を超えている場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。このプログラム電圧Vpgmの増分ΔVpgmは、第1ページの書き込み動作と、第2の書き込み動作で相違されており、例えば第1ページの書き込み動作における増分ΔVpgmは、第2の書き込み動作における増分ΔVpgmより大きく設定されている。図35に示すフローチャートでは、プログラムとベリファイa,a’S316,S319を数回繰り返した後に、プログラムとベリファイa’,a’とプログラムベリファイb’を数回繰り返し、プログラムとベリファイa’,a’とプログラムベリファイb’,c’を数回繰り返す。この途中でメモリセルへのデータ1の書き込みは、早く終了する。このため、データ1を書き込むべきセルが無くなった場合、プログラムベリファイa’,a’をスキップしS318~S320、プログラムとプログラムベリファイb’S316、S322、又はプログラムとプログラムベリファイb’,c’,c’S316-S326を繰り返すようになる。プログラムとベリファイa’,a’S316、S319をスキップする場合、SDCは使用しなくなる。このため、次のプログラムデータを入力することができる。しかし、稀に、メモリセルにデータ1がなかなか書けないセルもある。したがって、プログラムベリファイa,a’の回数を制限している。リード動作リード動作は、第1の実施形態と同様である。イレーズ消去動作は、前述したように、先ず、アドレスを指定し、図3の破線で示すブロックを選択する。次に、セルが形成されたウエルの電位を高電圧約20Vにし、選択ブロックのワード線をVss、非選択ブロックのワード線をフローティングにする。すると、選択ブロックのセルとウエル間に高電圧が加わり、セルに記憶されたデータが消去される。一方、非選択ブロックにおいて、ワード線はフローティング状態であるため、ウエルを高電圧にすると、ワード線も高電圧になる。このため、非選択ブロックのメモリセルに記憶されたデータは消去されない。消去動作を行なうと、メモリセルのデータは0となり、第1ページ、第2ページの何れでリードを行なってもデータ1が出力される。消去後書き込み図33eは、消去後の閾値電圧の例を示している。上記のように、消去動作はブロック内の複数のメモリセルのデータを一括して消去するため、図33eに示すように、図33aに示す閾値電圧より低い電圧まで消去されている場合がある。このように、本来の閾値電圧より低い電圧まで消去されているメモリセルがある場合、アッパーページ例えば2ページのプログラムにおいて、メモリセルのデータ0を1に書き込む際、閾値電圧が変化する範囲が大きくなる。このため、浮遊ゲートと浮遊ゲートのカップリングにより、隣接するセルの閾値電圧が変化してしまう。したがって、図33fに示すように、隣接するセルの閾値電圧の変化を防止するため、消去後、僅かな書き込みを行ない。本来の閾値電圧より低い負の電圧まで消去されているセルの閾値電圧を本来の閾値電圧までもどす。消去後書き込みにおいて、先ず、全データ記憶回路のPDCがローレベルにセットされる。この後、データ記憶回路に接続された2本のビット線BLEとBLOに接続されたセルに対して同時に書き込み動作を行なう。書き込みベリファイは、2本のビット線のうち1本ずつ行なう。しかし、フロック内の全セルについてベリファイを行なうと時間がかかるため、全部のワード線を同一電位とし、1つのNANDセルを一括してベリファイする。一方のビット線に関して、消去後の書き込みが完了した場合、PDCがハイレベルとなるようにし、次のプログラムが行なわないようにする。同様にして他方のビット線に関してベリファイ動作を行ない、全データ記憶回路のデータがハイレベルになるまで書き込み及びベリファイ動作を繰り返す。上記第4の実施形態によれば、第2ページの書き込みベリファイ動作の途中において、一度のビット線の充電に対して、ワード線の電位を閾値電圧b’,c’,c’の順に変更し、閾値電圧b’,c’,c’を一括してベリファイしている。このため、高速なベリファイが可能であるため、高速な書き込みが可能となる。また、メモリセルにデータ3を書き込んでいる際において、本来のベリファイ電位より僅かに低いベリファイ電位を超えた場合、ビット線に中間電位を供給して書き込みを行なっている。このため、メモリセルに書き込まれる閾値電圧の分布を狭くすることができる。したがって、書き込み時の電圧のステップアップ幅を大きくすることが可能であるため、全体的な書き込み時間を短縮でき、高速な書き込みが可能となる。つまり、書き込み動作により、メモリセルが、データ3の閾値電圧に達したかどうかをベリファイする場合、本来のベリファイ電位c’より低いベリファイ電位c’でベリファイし、この低いベリファイ電位c’を超えていて、本来のベリファイ電位c’で書き込みが完了とならなかった場合、データ記憶回路内のDDC,PDC,SDCはデータ2を書き込む時のデータとなるため、次の書き込みではビット線に中間電位を供給し、書き込みスピードを遅くしている。この後、データ2のベリファイ時、このメモリセルはベリファイをパスするため、このセルの書き込みは終了する。このため、メモリセルに書き込まれる閾値電圧の分布を狭くすることができる。しかも、本来のベリファ電位より低いベリファイ電位を超えているメモリセルと、本来のベリファイ電位を超えているメモリセルとを区別のためのデータ記憶回路を必要としないため、回路構成の増加を防止できる。第5の実施形態上記第4の実施形態において、第2ページの書き込みは、次のように行っていた。すなわち、データ3を書き込むセルにおいて、本来のベリファイ電位c’より低いベリファイ電位c’を超えるセルに対し、中間電位を供給して、1回のみ書き込みを行ない、この後、書き込み完了としていた。しかし、データ1を書き込むセルについては、本来のベリファイ電位a’より低いベリファイ電位a’を超えるセルに対して、中間電位を供給し、本来のベリファイ電位a’まで書き込みを繰り返し行っていた。したがって、書き込むデータに応じて動作が若干異なっている。これに対して、第5の実施形態は、データ1を書き込むセルに対して、データ3を書き込むセルと同じように書き込みを行なう。すなわち、本来のベリファイ電位a’より低いベリファイ電位a’を超えるセルに対して、中間電位を供給して1回のみ書き込みを行ない、書き込みを完了する。また、第1ページのデータの書き込みに関しても、本来のベリファイ電位v’より低いベリファイ電位v’を超えるセルに対して、中間電位を供給して1回のみ書き込みを行ない。この後、書き込み完了する。以下、図39乃至図43を参照して具体的に説明する。第1ページ書き込み先ず、第1ページの書き込みについて説明する。第1ページのプログラム、プログラムベリファイ動作は、図8に示す第1の実施形態の変形例と同様である。しかし、図39aに示すように、プログラムベリファイにおいて、本来のベリファイ電位v’より低いベリファイ電位v’を超えるセルに対して、DDCに1を設定し、次のプログラムの時にPDCが0、DDCが1の場合、ビット線に中間電位例えば1Vを供給して書き込みを行なう。TDCはキャパシタにより構成されているため、この書き込みリカバリー中において、図39bデータリフレッシュ1後に示すように、DDCのデータをTDCに移し、PDCのデータをDDCに移し、TDCのデータをPDC移す。さらに、再び、図39cデータリフレッシュ2後に示すように、DDCのデータをTDCに移し、PDCのデータをDDCに移し、TDCのデータをPDCに移し、DDCのデータをリフレッシュする。しかし、図39cに示す操作において、DDCのデータをTDCのデータに移すとき、図39bに示すTDCの値ベリファイ電位a’を超える→1をリセットせずに、DDCのデータ1:書き込み非選択、0:書き込みを移すと、TDCの値がベリファイ電位a’を超える場合も1になるため、PDCには書き込み非選択となる。したがって、ベリファイ電位a’を超える場合、ビット線に1回のみ中間電位が供給されてプログラムされる。第2ページ書き込み第2ページの書き込みは、本来のベリファイ電位a’より低いベリファイ電位a’を超えるセルに対して、ビット線に中間電位を供給し、1回のみ書き込みを行ない、書き込みを完了する。プログラムベリファイ動作は、図35と同様である。プログラムベリファイにおいて、本来のベリファイ電位a’より低いベリファイ電位a’を超えるセルに対しては、図40に示すように、DDCを1にし、次のプログラム時にPDCが0でDDCが1の場合、ビット線に中間電位を供給して書き込みを行なう。したがって、この中間電位をビット線に供給して1回書き込みを行なった後、PDCを1にして書き込み完了とする。以下、動作について具体的に説明する。プログラム中に、信号BLCLAMPをローレベルとし、PDC及びDDCをビット線から切り離す。ビット線は容量が大きいため、切り離されても、書き込みは継続して行なわれる。この後、信号BLPREをハイレベル、信号VPREをハイレベルとしてTDCをハイレベルとする。さらに、信号REGをハイレベル、信号VREGをローレベルとして、DDCが1の場合、TDCをローレベルとし、DDCが0の場合、TDCをハイレベルのままとする。この状態において、TDCのデータをPDCに移すと同時に、DTGをハイレベルとし、図41aに示すように、DDCにもPDCと同じデータを保持させる。次に、信号BLC2をハイレベルとしてSDCのデータをTDCに移し、信号REGをハイレベル、信号VREGをVssとする。この状態において、DDCが1の場合、強制的に、TDCをローレベルにした後、TDCのデータをPDCに移す図41b。この後、信号BLPREをハイレベルとし、信号VPREをハイレベルとしてTDCをハイレベルとする。さらに、信号REGをハイレベル、信号VREGをローレベルとして、DDCが1の場合、TDCをローレベルとする。DDCが0の場合、TDCをハイレベルのままとし、信号DTGを1としてPDCのデータをDDCに移した後、TDCのデータをPDCに移す図42a。次に、信号BLPREをハイレベルとし、信号VPREをハイレベルとしてTDCをハイレベHとした後、信号BLCLAMPを所定の電圧とする。すると、ビット線がローレベル0又は中間電位の場合、TDCはローレベル、ビット線がハイレベルの場合、TDCはハイレベルとなる。この後、信号VREGをVddとし、信号REGをハイレベルとして、DDCがハイレベルの場合、TDCを強制的にハイレベルにする。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。DDCのデータは元々保持されたデータとなる。しかし、PDCはDDCがハイレベルであり、SDCがハイレベルであった場合、つまり、本来のベリファイ電位a’より低いベリファイ電位a’を超える場合、ハイレベル、つまり書込み非選択となる。したがって、ベリファイ電位a’を超える場合、1回のみビット線が中間電位になりプログラムが行なわれる図42b。上記第5の実施形態によれば、第2ページの書き込みにおいて、データ1を書き込むメモリセルと、データ3を書き込むメモリセルに対して、同一の書き込み方式によりデータを書き込むことができる。つまり、本来のベリファイ電位a’より低いバリファイ電位a’を超えるセルに対して中間電位を供給して1回のみ書き込みを行ない。この後、書き込み完了としている。このため、高速な書き込み動作を実現できる。しかも、第1ページのデータの書き込みにつても、本来のベリファイ電位v’より低いベリファイ電位v’を超えるセルに対して、中間電位を供給して1回のみ書き込みを行ない、書き込み完了としている。このため、一層高速な書き込み動作を実現できる。第6の実施形態次に、図43乃至図52を参照して、本発明の第6の実施形態について説明する。第6の実施形態において、メモリセルアレイの構成及びデータ記憶回路の配置は、第2及び第3の実施形態と同じである。すなわち、第6の実施形態は、1つのメモリセルに8値3ビットのデータを記憶する。図43abc、図44abに示す第6の実施形態の書き込みデータとメモリセルの閾値電圧の関係は、図20abc、図21abと同様である。また、第1ページ、第2ページのプログラム動作は、第4の実施形態とほぼ同様の動作である。すなわち、第1ページ、第2ページのプログラム動作において、メモリセルのデータが本来の閾値電圧に達したかどうかをベリファイする際、通常より低いベリファイ電位を用いてベリファイされている。第6の実施形態は、第3ページのプログラムが第4の実施形態と相違する。第3ページプログラム図45、図46は、第3ページプログラムのブロックダイアグラムを示している。第3ページのプログラム動作も、先ずアドレスを指定し、図19に示す3ページを選択する。次に、データ記憶回路10をリセットしS351、書き込みデータを外部より入力して全てのデータ記憶回路10のSDCに記憶するS352。外部よりデータ1書き込みを行なわないが入力されると、図6に示すデータ記憶回路10のSDCは、ローレベルになり、データ0書き込みを行なうが入力されるとハイレベルとなる。第3ページのプログラムは、図44bに示すように、メモリセルのデータが0の場合で、外部から入力されるデータが1の場合、メモリセルのデータを0のままとし、外部から入力されるデータが0の場合、メモリセルのデータを1にする。メモリセルのデータが2の場合で、外部から入力されるデータが1の場合、メモリセルのデータは2のままである。しかし、第2ページの書き込み時において、メモリセルのデータが2に達したかどうかをベリファイする際、通常より低いベリファイ電位b’を用いた。このため、データ2を記憶するメモリセルは、本来のベリファイ電位であるb’の電位まで書き込む。メモリセルのデータが2の場合で、外部から入力されるデータが0の場合、メモリセルのデータを3にする。メモリセルのデータが4の場合で、外部から入力されるデータが1の場合、メモリセルのデータは4のままである。しかし、第2ページの書き込み時において、メモリセルのデータが4に達したかどうかをベリファイする際、通常より低いベリファイ電位d’を用いた。このため、データ4を記憶するメモリセルは、本来のベリファイ電位であるd’の電位まで書き込む。メモリセルのデータが4の場合で、外部から入力されるデータが0の場合、メモリセルのデータを5にする。メモリセルのデータが6の場合で、外部から入力されるデータが1の場合、メモリセルのデータを6のままである。しかし、第2ページの書き込み時において、メモリセルのデータが6に達したかどうかをベリファイする際、通常より低いベリファイ電位f’を用いた。このため、データ6を記憶するメモリセルは、本来のベリファイ電位であるf’の電位まで書き込む。メモリセルのデータが6の場合で、外部から入力されるデータが0の場合、メモリセルのデータを7にする。第6の実施形態では、このようにして書き込みを行なうが、書き込み及び読み出されるデータとメモリセルのデータを、第2及び第3の実施形態と同じようにすることも可能である。また、データ3、5、7への書き込みセルに関しては、本来のベリファイ電位より低い閾値でベリファイ動作を行ない。このレベルを超えていた場合で、本来のベリファイ電位で書き込み完了とならなかった場合、次の書き込み時は、ビット線に中間電位を供給して書き込みスピードを遅くし、1回のみ書き込みを行ない書き込み完了とする。本来のベリファイ電位を超えているセルは、その時点で書き込みが終了となる。また、メモリセルにデータ1を書き込むセルに関しては、本来のベリファイ電位より低いベリファイ電圧でベリファイ動作を行なう。そして、この本来より低いベリファイ電位を超えていた場合、次の書き込み以降、ビット線に中間電位を供給して書き込みスピードを遅くし、本来のベリファイ電位を超えるまで書き込む。第3ページ第1回目プログラム第3ページのプログラムは、メモリセルにデータ1~7を書き込む。これらのデータを同時にプログラムすることも可能であるが、第6の実施形態では、先ず、メモリセルにデータ4~7の4つのデータを書き込む。この後、メモリセルにデータ1~3を書き込む。以下、具体的に説明する。先ず、データ記憶回路がリセットされ、外部よりデータ記憶回路のSDCにデータがロードされる図45、S351、S352。内部データリード1及びデータキャッシュ設定1S353、S354メモリセルへデータを書き込む前に、第2ページのメモリセルのデータが4、6か、0、2であるかの判断と、メモリセルのデータが6か、データが0、2、4のいずれであるかを判断する。このため、ワード線の電位をd、fに順次設定し、メモリセルに書き込まれているデータが読み出され、データキャッシュに設定される。図47aは、内部リード後のデータキャッシュの状態を示している。この後、データキャッシュを操作することにより、図47bに示すように、データキャッシュを設定する。さらに、例えばカウンタPCをゼロに初期設定し、第5のフラグセルのデータをロードする。図47bにおいて、メモリセルのデータを0~3にする場合、PDCはハイレベル1。メモリセルのデータを4とする場合、PDCはローレベル0、DDCはハイレベル、SDCはハイレベルに設定する。メモリセルのデータを5とする場合、PDCはローレベル、DDCはローレベル、SDCはハイレベルに設定する。メモリセルのデータを6とする場合、PDCはローレベル、DDCはハイレベル、SDCはローレベルに設定する。メモリセルのデータを7とする場合、PDC、DDC、SDCをいずれもローレベルに設定する。プログラム:第1回目S355次いで、カウンタPCをカウントアップした後、メモリセルにデータが書き込まれる。第6の実施形態においても、第2の実施形態と同様、カウンタの値と予め定められたベリファイ開始回数を用いて、不要なベリファイがスキップされる。先ず、信号BLC1をVsgとすると、PDCがデータ0の場合、ビット線がVssとなり、データ1の場合、ビット線はVddになる。次に、信号BLC1をVssに設定した後、信号VREGをVdd、信号REGを中間電位例えば1VVthに設定する。DDCがデータ1の場合、ビット線が中間電位となり、DDCがデータ0の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ5,7を書き込んでいるときのみビット線はVss、メモリセルにデータ4,6を書き込んでいる場合、ビット線は中間電位例えば1V、メモリセルのデータが0~3の場合書き込みしない場合、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位例えば1Vの場合、少しだけ書き込まれる。したがって、メモリセルにデータ4,6を書き込んでいるセルは、あまり書き込まれない可能性がある。しかし、メモリセルのデータ4とデータ5のベリファイとメモリセルのデータ6とデータ7のベリファイはそれぞれ一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。このため、ビット線に中間電位を供給する。d’のみのベリファイS356-S358、図48aこの後、ベリファイ電圧d’を設定して書き込みベリファイが行なわれる。先ず、信号BLC2をハイレベルとしVddVth、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、SDCがハイレベル、つまり、データ5、4を書き込んでいるメモリセルのみである。次に、ワード線にベリファイ電位d’を供給し、ビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ4及び5を書き込んでいて、ベリファイ電位d’以上になったときである。この後、信号BLC1を中間電位Vth0.5Vにすると、PDCがローレベルの場合、メモリセルにデータ5を書き込んでいる場合、TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ4を書き込んでいて、ベリファイ電位d’以上になったときである。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ4を書き込んでいてベリファイ電位d’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。d’e’e’同時ベリファイS359-S361、図48bプログラムを数回繰り繰り返すと、メモリセルに対するデータ5への書き込みも完了してくる。したがって、ベリファイe’のベリファイも行なう。このベリファイは、d’e’e’レベルのベリファイを同時に行なう。先ず、信号BLC2をハイレベルとし、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、SDCがハイレベル、つまり、データ5、4を書き込んでいるメモリセルのみである。次に、ワード線にベリファイ電位d’を供給し、ビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ4及び5を書き込んでいて、ベリファイ電位d’以上になったときである。この後、信号BLC1を中間電位Vth0.5Vにすると、PDCがローレベルの場合、メモリセルにデータ5を書き込んでいるとき、TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ4を書き込んでいて、ベリファイ電位d’以上になったときである。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ4を書き込んでいてベリファイ電位d’に達した時と、書き込み非選択の場合である。さらに、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。この後、ワード線にベリファイ電位e’を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位e’以上の場合である。つまり、メモリセルのデータが5に書き込まれていてベリファイ電位e’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ5を書き込んでいてベリファイ電位e’に達した時と、メモリセルにデータ0246を書き込んでいる場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。この後、ワード線にベリファイ電位e’を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位e’以上の場合である。つまり、メモリセルのデータが5に書き込まれていてベリファイ電位e’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ5を書き込んでいてベリファイ電位e’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。メモリセルにデータ5を書き込んでいてベリファイ電位e’に達し、ベリファイ電位e’のベリファイで書き込み完了にならなかった場合のデータ記憶回路データは、SDC=1、DDC=1、PDC=0となり、メモリセルにデータ4を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ5を書き込んでいてベリファイ電位e’に達した場合、メモリセルにデータ4が書き込み状態となる。メモリセルにデータ4を書き込む場合、ビット線に中間電位を供給されている。このため、次の書き込みではメモリセルに少しだけ書き込みが行われる。また、このセルは、次のd’e’e’同時ベリファイにおいて、d’のベリファイで、セルの閾値電圧がe’以上に存在するため、必ずベリファイをパスすることとなり、2回目以降の書き込みは行なわれなくなる。ベリファイ電位f’のみを用いたベリファイS362-S364、図49aベリファイ電位f’のみを用いたベリファイは、先ず、信号VPREをハイレベルとし、信号BLPREをVddVthとし、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位f’を供給し、ビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ6及び7を書き込んでいて、ベリファイ電位f’以上になったときである。この後、信号BLC1を中間電位Vth0.5Vにすると、PDCがローレベルの場合、メモリセルにデータ7を書き込んでいる場合、TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ6を書き込んでいて、ベリファイ電位f’以上になったときである。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ6を書き込んでいてベリファイ電位f’に達した時と、書き込み非選択の場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。f’g’g’同時ベリファイS365,S366、図49bプログラムを数回繰り繰り返すと、メモリセルのデータ7への書き込みが完了してくる。したがって、ベリファイg’のベリファイも行なう。このベリファイは、f’g’g’のベリファイを同時に行なう。先ず、信号VPREをハイレベルとし、信号BLPREをVddVthとし、信号BLCLAMPを所定の電位に設定する。すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位f’を供給し、ビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ6及び7を書き込んでいて、ベリファイ電位f’以上になったときである。この後、信号BLC1を中間電位Vth0.5Vにすると、PDCがローレベルの場合、メモリセルにデータ7を書き込んでいる場合TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ6を書き込んでいて、ベリファイ電位f’以上になったときである。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ6を書き込んでいてベリファイ電位f’に達した時と、書き込み非選択の場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。この後、ワード線にベリファイ電位g’を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位g’以上の場合である。つまり、メモリセルのデータが7に書き込まれていてベリファイ電位g’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ7を書き込んでいてベリファイ電位g’に達した時と、メモリセルにデータ0246を書き込んでいる場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。この後、ワード線にベリファイ電位g’を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位g’以上の場合である。つまり、メモリセルのデータが7に書き込まれていてベリファイ電位g’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ7を書き込んでいてベリファイ電位g’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。メモリセルにデータ7を書き込んでいてベリファイ電位g’に達し、ベリファイ電位g’のベリファイで書き込み完了にならなかった場合、データ記憶回路のデータは、SDC=0、DDC=1、PDC=0となり、メモリセルにデータ6を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ7を書き込んでいてベリファイ電位g’に達した場合、メモリセルにデータ6を書き込む状態となる。メモリセルに対するデータ6への書き込みは、ビット線に中間電位を供給している。このため、次の書き込みでは少しだけ書き込みが行われる。また、このセルは、次のf’f’g’同時ベリファイにおいて、f’のベリファイの際、セルの閾値電圧がg’以上に存在する。このため、ベリファイは必ずパスとなり、2回目以降の書き込みは行なわれなくなる。このようにして、全てのPDCのデータが1になるまで、プログラムとベリファイ動作を繰り返すS367、S368。しかし、書き込み動作において、DDCのデータが1の場合、つまり、メモリセルにデータ4を書き込んでいる場合と、メモリセルにデータ6を書き込んでいる場合と、メモリセルにデータ5を書き込んでいて、ベリファイ電位e’を超えた場合と、メモリセルにデータ7を書き込んでいて、ベリファイ電位g’を超えた場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。このようにして、第1回目プログラムにより、メモリセルにデータ4~7の4つが書き込まれる。上記説明では、1回のプログラムの後、4つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらない。このため、初めは、ベリファイ電位d’を用いたベリファイのみ行なう。次に、ベリファイ電位d’e’e’を用いた同時ベリファイを行なう。次に、ベリファイ電位d’e’e’を用いた同時ベリファイと、f’のみを用いたベリファイを行なう。次に、ベリファイ電位d’e’e’を用いた同時ベリファイと、f’g’g’を用いた同時ベリファイを行なうことも可能である。また、プログラムの終了近くのループでは、メモリセルのデータ4、5への書き込みは終了している。このため、ベリファイ電位d’e’e’を用いた同時ベリファイ動作を省略し、最後に、f’g’g’を用いた同時ベリファイのみを行なうことも可能である。第2回目プログラム第2回目プログラムにより、メモリセルにデータ1~3の3つが書き込まれるが、データ1を書き込むメモリセルには、全く書き込みが行なわれていない。このため、第1の実施形態と同様に、本来のベリファイ電位より低いベリファイ電位a’を設け、このベリファイ電位を超えたセルに対して、ビット線に中間電位を供給する。これにより、書き込みスピードを遅くし、閾値分布を狭くする。また、メモリセルのデータ2とデータ3のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、メモリセルにデータ2を書き込んでいる場合にも、ビット線に中間電位を供給することにより、書き込みスピードを遅くする。内部データリード2及びデータキャッシュ設定2S369,S370、図50aセルへの書き込みの前に、ワード線の電位をb=a、dの順に設定し、内部リード動作を行なう。この後、データキャッシュを操作することにより、図50aに示すように、データキャッシュを設定する。すなわち、メモリセルにデータ0を書き込む場合、PDCは1、DDCは1、SDCは1に設定する。メモリセルにデータ1を書き込む場合、PDCは0、DDCは0/1、SDCは1に設定する。メモリセルにデータ2を書き込む場合、PDCは0、DDCは1、SDCは0に設定する。メモリセルにデータ3を書き込む場合、PDCは0、DDCは0、SDCは0に設定する。メモリセルにデータ4~7を書き込む場合、PDCは全て1に設定する。プログラム:第2回目S371ここで、例えばカウンタPCをゼロに初期設定する。次いで、例えばカウンタPCをカウントアップした後、メモリセルにデータが書き込まれる。先ず、信号BLC1を中間電位VddVthとすると、PDCがデータ0の場合、ビット線がVssとなり、データ1の場合、ビット線はVddになる。次に、信号BLC1=Vssとした後、信号VREG=Vdd、信号REG=中間電位例えば1VVthとする。すると、DDCがデータ1の場合、ビット線が中間電位例えば1Vとなり、DDCがデータ0の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ3を書き込んでいる時と、メモリセルにデータ1を書き込んでいて本来のベリファイ電位より低いベリファイ電位a’以下の場合、ビット線は、Vssである。メモリセルにデータ2を書き込んでいる時と、メモリセルにデータ1を書き込んでいて本来のベリファイ電位より低いベリファイ電位a’を越えている場合、ビット線は中間電位1V、メモリセルのデータが0、4~7の場合書き込みしない場合、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位1Vの場合、少しだけ書き込まれる。しかし、メモリセルにデータ2とデータ3を書き込む場合のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。ベリファイa’、a’S372-S374、図50bベリファイ電位a’、a’を用いたベリファイは、先ず、信号VPREをハイレベルとし、信号BLPREをVddVthとし、信号BLCLAMPを所定の電位に設定する。すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位a’を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位a’以上の場合である。次に、信号BLC2を中間電位Vth0.5VにするとSDCがLの場合、TDCがLとなる。つまり、TDCがハイレベルになるのは、メモリセルのデータが1に書き込まれていてベリファイ電位a’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ1を書き込んでいてベリファイ電位a’に達した時と、メモリセルにデータ0246を書き込んでいる場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。この後、ワード線にベリファイ電位a’を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位a’以上の場合である。次に、信号BLC2を中間電位Vth0.5VにするとSDCがローレベル0の場合、TDCがハイレベル1となる。つまり、TDCがハイレベルになるのは、メモリセルのデータが1に書き込まれていてベリファイ電位a’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ1を書き込んでいてベリファイ電位a’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。図51a。ベリファイ電位b’S375-377、図51bベリファイ電位b’のみを用いたベリファイは、先ず、信号VPREをハイレベルとし、信号BLPREをVddVthとし、信号BLCLAMPを所定の電位に設定する。すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位b’を供給し、ビット線を放電する。前記ビット線放電中に、DDCのデータをTDCに移し、PDCのデータをDDCに移し、TDCのデータをPDCに移す。さらに、ビット線の放電中に、信号VREGをVssとし、信号REGをVddとし、信号BLCLAMPに所定の電圧を設定すると、DDCがハイレベル1の場合、つまり書込み非選択の場合、ビット線が強制的にローレベルになる。この後、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルのデータが、ベリファイ電位b’以上になったときである。この後、信号BLC1を中間電位Vth0.5VにするとPDCがローレベルの場合、つまりメモリセルにデータ3を書き込んでいる場合TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ2を書き込んでいて、ベリファイ電位b’以上になったときである。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ2を書き込んでいてベリファイ電位b’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。b’c’c’同時ベリファイS378,S379、図52プログラムを数回繰り繰り返すと、メモリセルデータ2への書き込みも完了してくる。したがって、ベリファイc’のベリファイも行なう。このベリファイは、b’c’c’レベルのベリファイを同時に行なう。先ず、信号VPREをハイレベルとし、信号BLPREをVddVthとし、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位b’を供給し、ビット線を放電する。前記ビット線放電中に、DDCのデータをTDCに移し、PDCのデータをDDCに移し、TDCのデータをPDCに移す。さらに、ビット線の放電中に、信号VREGをVssとし、信号REGをVddとし、信号BLCLAMPに所定の電圧を設定すると、DDCが1の場合、つまり書込み非選択の場合、ビット線が強制的にローレベルになる。この後、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ2を書き込んでいて、ベリファイ電位b’以上になったときである。この後、信号BLC1を中間電位Vth0.5VにするとPDCがローレベルの場合、つまりメモリセルにデータ3書き込んでいる場合TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ2を書き込んでいて、ベリファイ電位b’以上になったときである。この後、ワード線にベリファイ電位c’を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位c’以上の場合である。つまり、メモリセルのデータが3に書き込まれていてベリファイ電位c’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ3を書き込んでいてベリファイ電位c’に達した時と、メモリセルにデータ0246を書き込んでいる場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。この後、ワード線にベリファイ電位c’を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位c’以上の場合である。つまり、メモリセルのデータが3に書き込まれていてベリファイ電位c’に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ3を書き込んでいてベリファイ電位c’に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。メモリセルにデータ3を書き込んでいてベリファイ電位c’に達し、ベリファイ電位g’のベリファイで書き込み完了にならなかった場合のデータ記憶回路データは、SDC=0、DDC=1、PDC=0となり、メモリセルにデータ2を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ3を書き込んでいてベリファイ電位c’に達した場合、メモリセルにデータ2を書き込んでいる状態となる。メモリセルにデータ2を書き込んでいる場合、ビット線に中間電位を供給していた。このため、次の書き込みでは少しだけ書き込みが行われる。また、このメモリセルは、次のb’c’c’同時ベリファイにおいて、b’のベリファイで、セルの閾値電圧がc’以上に存在するため必ず、ベリファイはパスとなり、2回目以降の書き込みは行なわれなくなる。このようにして、全てのPDCのデータが1になるまで、プログラムとベリファイ動作を繰り返すS380,S381。しかし、書き込み動作において、DDCのデータが1の場合、つまり、メモリセルにデータ1を書き込んでいる場合と、メモリセルにデータ3を書き込んでいて、ベリファイ電位a’を超えた場合と、メモリセルにデータ2を書き込んでいる場合と、メモリセルにデータ3を書き込んでいて、ベリファイ電位c’を超えた場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。第2回目プログラムにより、メモリセルにデータ1~3の3つが書き込まれる。PDCがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路のPDCのデータがハイレベルになるまでこのプログラム動作とベリファイ動作が繰り返される。上記説明では、1回のプログラムの後、2つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらないため、初めは、ベリファイ電位a’、a’を用いたベリファイのみ行ない、次に、ベリファイ電位a’、a’を用いたベリファイとベリファイ電位b’を行ない、最後に、ベリファイ電位a’、a’を用いたベリファイとベリファイ電位b’c’同時ベリファイを行なうことも可能である。また、プログラムの終了近くのループにおいて、メモリセルに対するデータ1への書き込みは終了しているため、これらのベリファイ動作は省略することもできる。メモリセルに対するデータ1のベリファイが不用になると、SDCでデータを保持する必要がなくなる。このため、次の書き込みのためのデータを外部より読み込み、SDCに記憶しておくことも可能である。このような構成とした場合、さらなる高速動作が可能である。リードリード動作は、第2、第3の実施形態とほぼ同じであるため、説明は省略する。イレーズ消去動作は、第1、第4の実施形態と同様であるため、説明は省略する。上記第6の実施形態によれば、第3ページプログラムにおいて、メモリセルにデータ357を書き込む際、本来のベリファイ電位より低い閾値電圧でベリファイ動作を行なう。そして、この本来より低いベリファイ電位を超えた場合で、本来のベリファイ電位で書き込み完了とならなかった場合、次の書き込み時は、ビット線に中間電位を供給して書き込みスピードを遅くし、1回のみ書き込みを行ない書き込み完了とする。本来のベリファイ電位を超えているセルは、その時点で書き込みが終了となる。また、メモリセルにデータ1を書き込む場合、本来のベリファイ電位より低いベリファイ電圧でベリファイ動作を行ない、この本来より低いベリファイ電位を超えていた場合、次の書き込み以降、ビット線に中間電位を供給して書き込みスピードを遅くし、本来のベリファイ電位を超えるまで書き込んでいる。このため、8値3ビットのデータを確実且つ高速に書き込み、読み出すことができる。しかも、第6の実施形態によれば、1357の奇数データを書き込むメモリセルの閾値電圧の分布を狭めることが可能である。第7の実施形態上記第6の実施形態は、第3ページの書き込み時、第1回目の書き込みで、メモリセルにデータ4~7を書き込み、第2回目の書き込みでメモリセルにデータ1~3を書き込んだ。これに対して、第7の実施形態は、第3ページの書き込みにおいて、メモリセルにデータ1~7を同時に書き込むことを可能とする。このため、データ記憶回路10の構成を若干変更している。図53は、第7の実施形態に適用されるデータ記憶回路を示している。図53において、図6と同一部分には同一符号を付している。図53に示すように、データ記憶回路10には、SDCのデータを一時的に記憶し、SDC、PDC、DDC、TDCと共に、ベリファイ用のデータを記憶するSDDCセコンダリダイナミックデータキャッシュが追加されている。このSDDCの構成は、DDCとほぼ同様であり、トランジスタ63a、63bにより構成されている。トランジスタ63aの電流通路の一端はノードN2bに接続されている。このトランジスタ63aのゲートには信号DTG2が供給され、電流通路の他端はトランジスタ63bのゲートに接続されている。このトランジスタ63bの電流通路の一端部には信号VREG2が供給され、電流通路の他端はトランジスタ63cの電流通路の一端部に接続されている。このトランジスタ63cの電流通路の他端はノードN3に接続され、ゲートには信号REG2が供給されている。上記構成において、図54、図55、図56abを参照して、上記データ記憶回路10を用いた第3ページの書き込み動作について説明する。先ず、データ記憶回路10がリセットされた後、外部より書き込みデータがデータ記憶回路10のSDCにロードされるS401,S402。この後、閾値電圧adfを用いて内部リードが行われ、メモリセルからデータが読み出されるS403。図56aは、第3ページのデータロード及び内部リード後のデータキャッシュの設定を示している。ここで、SDC、DDC、PDCのデータは、図47aと同様である。また、SDDCのデータは、メモリセルにデータ01が書き込まれている場合、0が設定され、メモリセルにデータ2~7が書き込まれている場合、1が設定される。次いで、各データキャッシュが操作され、図56bに示すように、各データキャッシュのデータが設定されるS404。ここで、SDDCのデータは、データ5410のベリファイに使用され、SDCのデータは3210のベリファイに使用され、DDCのデータは、7531のベリファイに使用される。第7の実施形態も第5の実施形態と同様に、書き込み時は、PDCが0である場合、ビット線の電位をVssに設定し、PDCが1である場合、ビット線の電位をVddに設定する。この後、DDCが1の場合、ビット線の電位を中間電位例えばVth0.5Vとして書き込み動作が行なわれるS405。ベリファイ動作は、閾値電圧の小さい側から順次実行する。すなわち、先ず、ベリファイ電位a’a’を用いてデータ1のベリファイが行われるS406-S408。この後、ベリファイ電位b’を用いて、データ2のベリファイが行われるS409-S412。次に、ベリファイ電位b’c’c’を用いて、データ23のベリファイが行われるS413-S415。さらに、ベリファイ電位d’を用いて、データ4のベリファイが行われるS416-S419。この後、ベリファイ電位d’e’e’を用いて、データ45のベリファイが行われるS420-S422。次に、ベリファイ電位f’を用いて、データ6のベリファイが行われるS423-S426。次いで、ベリファイ電位f’g’g’を用いて、データ67のベリファイが行われるS427-S429。この動作が、各データのベリファイが完了するまで繰り返されるS430、S431。上記ベリファイ動作において、メモリセルのデータ3、5、7のベリファイにおいて、本来より低い閾値電圧に達した場合で、本来の閾値電圧より低い場合、データキャッシュ内のデータをそれぞれメモリセルのデータ2、4、6と同じに設定する。この状態において、次のプログラム時にビット線に中間電位を供給して書き込み動作を行い。次のベリファイで書き込み完了とする。また、メモリセルに対するデータ1の書き込みは、本来より低い閾値電圧に達した場合、以降のプログラムにおいて、ビット線に中間電位を供給して書き込み、本来の閾値電圧まで書き込み動作を行なう。上記第7の実施形態によれば、データ記憶回路10にメモリセルのデータ5410のベリファイに使用するデータを保持するSDDCを設けている。このため、第3ページのデータを一度に書き込み、ベリファイすることが可能である。このため、書き込み速度を一層高速化することが可能である。尚、上記第7の実施形態において、SDDCは、SDCとTDCの間に配置した。しかし、これに限らず、例えばPDCとTDCの間で、DDCと並列に配置することも可能である。その他、本発明の要旨を変えない範囲において種々変形実施可能なことは勿論である。"