"k値の閾値kは2以上の自然数を有する記憶素子と、前記メモリセルより読み出されるデータ、又は外部から入力されるデータを記憶する第1及び第2の記憶回路と、前記第1の記憶回路及び第2の記憶回路のデータに応じて、前記記憶素子をn値n<=kの閾値に設定する書き込み動作を行い、前記記憶素子の少なくとも1値の書き込みが終了した場合、前記書き込み動作を一旦中断して、メモリセルからの読み出し動作を行い、この読み出されたデータを前記第1の記憶回路に記憶し、前記書き込み動作を再開する制御部とを具備することを特徴とする半導体記憶装置。前記制御部は、前記再開された書き込み動作中に、前記第1の記憶回路のデータを外部に出力させることを特徴とする請求項1記載の半導体記憶装置。前記制御部は、前記再開された書き込み動作中に、前記第1の記憶回路に次の書込みデータを外部より入力させることを特徴とする請求項1記載の半導体記憶装置。k値の閾値kは2以上の自然数を有する記憶素子と、前記メモリセルより読み出されるデータ、又は外部から入力されるデータを記憶するi個iは2以上の自然数の記憶回路と、前記記憶回路のデータに応じて、前記記憶素子をn値n<=kの閾値に設定する書き込み動作を行い、前記記憶素子の少なくとも1値の書き込みが終了した場合、前記書込み動作を一旦中断して、メモリセルからの読み出し動作を行い、この読み出されたデータを前記記憶回路の少なくとも1つに記憶し、前記書込み動作を再開する制御部とを具備することを特徴とする半導体記憶装置。前記制御部は、前記再開された書き込み動作中に、読み出されたデータが記憶された記憶回路のデータを外部に出力させることを特徴とする請求項4記載の半導体記憶装置。前記制御部は、前記再開された書込み動作中に、読み出されたデータが記憶された記憶回路に次の書き込みデータを外部より入力させることを特徴とする請求項4記載の半導体記憶装置。本発明は、キャッシュリードの速度を向上することが可能な半導体記憶装置を提供しようとするものである。本発明の半導体記憶装置の第1の態様は、k値の閾値kは2以上の自然数を有する記憶素子と、前記メモリセルより読み出されるデータ、又は外部から入力されるデータを記憶する第1及び第2の記憶回路と、前記第1の記憶回路及び第2の記憶回路のデータに応じて、前記記憶素子をn値n<=kの閾値に設定する書き込み動作を行い、前記記憶素子の少なくとも1値の書き込みが終了した場合、前記書き込み動作を一旦中断して、メモリセルからの読み出し動作を行い、この読み出されたデータを前記第1の記憶回路に記憶し、前記書き込み動作を再開する制御部とを具備することを特徴とする。本発明の半導体記憶装置の第2の態様は、k値の閾値kは2以上の自然数を有する記憶素子と、前記メモリセルより読み出されるデータ、又は外部から入力されるデータを記憶するi個iは2以上の自然数の記憶回路と、前記記憶回路のデータに応じて、前記記憶素子をn値n<=kの閾値に設定する書き込み動作を行い、前記記憶素子の少なくとも1値の書き込みが終了した場合、前記書込み動作を一旦中断して、メモリセルからの読み出し動作を行い、この読み出されたデータを前記記憶回路の少なくとも1つに記憶し、前記書込み動作を再開する制御部とを具備することを特徴とする。以下、本発明の実施の形態について、図面を参照して説明する。本実施形態において、NAND型フラッシュメモリと、ロウ方向に並んだ複数のセル全て、または半数のセルが、それぞれ複数のビット線を通り、それぞれ複数の書き込み、及び読み出し用のラッチ回路に繋がりロウ方向に並んだ全てのセルまたは半数のセルを一括して書き込むため、全てのラッチのデータが書き込み完了であるかのチェック回路がある。リード時に、フラグ用のラッチのみを検知するようにデータをセットしこのチェック回路を介してフラグセルの状態を区別する。第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セルは、直列接続された例えば32個のEEPROMからなるメモリセルMCと、選択ゲートS1、S2とにより構成されている。第1の選択ゲートS1はビット線BL0e~BLne、BLF1e、BLF2e、BL0o~BLno、BLF1o、BLF2oに接続され、第2の選択ゲートS2はソース線SRCに接続されている。各ロウに配置されたメモリセルの制御ゲートはワード線WL0、WL1、WL2~WL31に共通接続されている。また、第1の選択ゲートS1はセレクト線SGDに共通接続され、第2の選択ゲートS2はセレクト線SGSに共通接続されている。メモリセルアレイ1は、破線で示すように、複数のブロックを含んでいる。各ブロックは、複数のNANDセルにより構成され、このブロック単位でデータが消去される。また、消去動作は、データ記憶回路10、フラグ用データ記憶回路10a、10bに接続されている2本のビット線について同時に行なわれる。ビット線制御回路2は複数のデータ記憶回路10及びフラグ用データ記憶回路10a、10bを有している。各データ記憶回路10及びフラグ用データ記憶回路10a、10bには、一対のビット線BL0e、BL0o、BL1e、BL1o...BLne、BLno、BLF1e、BLF1o、BLF2e、BLF2oが接続されている。また、ビット線の1つ置きに配置され、1つのワード線に接続された複数のメモリセル破線で囲まれた範囲のメモリセルは、1セクタを構成する。このセクタ毎にデータが書き込まれ、読み出される。1セクタには例えば2ページ分のデータが記憶される。また、各ワード線には、フラグを記憶するためのフラグセルFC1、及びFC2が接続されている。この実施形態の場合、1セクタは2つのフラグセルFC1、及びFC2を含んでいる。尚、このフラグセルFC1、及びFC2は、1セクタにそれぞれ2つと限定されるものではなく、1セクタに3つ以上のフラグセルを接続してもよい。この場合、後述するように、複数のフラグセルに記憶されたデータの多数決により、フラグセルに記憶されたデータを決定すればよい。リード動作、プログラムベリファイ動作及びプログラム動作時において、データ記憶回路10に接続されている2本のビット線BL0e,BL0o,BL1e,BL10...BLne,BLno...BLF1e,BLF1o,BLF2e,BLF2oのうち外部より指定されたアドレス信号に応じて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に示す構成のメモリセルMCが32個直列接続されて構成されている。NANDセルのドレイン側、ソース側には、図4bに示す構成の第1の選択ゲートS1及び第2の選択ゲートS2が設けられている。図6は、図3に示すデータ記憶回路10の一例を示す回路図である。フラグ用データ記憶回路10a、10bもデータ記憶回路10と同様の構成とされている。このデータ記憶回路10は、プライマリデータキャッシュPDC、セコンダリデータキャッシュSDC、ダイナミックデータキャッシュDDC、ダイナミックデータキャッシュQDDCQ、テンポラリデータキャッシュTDCを有している。SDC、PDC、DDCは、書き込み時に入力データを保持し、読み出し時に読み出しデータを保持し、ベリファイ時に一時的にデータを保持し、多値データを記憶する際に内部データの操作に使用される。TDCは、データの読み出し時にビット線のデータを増幅し、一時的に保持するとともに、多値データを記憶する際に内部データの操作に使用される。DDCQは、後述するデータの書き込み時において、特定のベリファイレベルより若干低いベリファイレベルに達したかどうかを示すデータを記憶する。SDCは、ラッチ回路を構成するクロックドインバータ回路61a、61b、及びトランジスタ61c、61dにより構成されている。トランジスタ61cはクロックドインバータ回路61aの入力端と、クロックドインバータ回路61bの入力端の間に接続されている。このトランジスタ61cのゲートには信号EQ2が供給されている。トランジスタ61dはクロックドインバータ回路61bの入力端と接地間に接続されている。このトランジスタ61dのゲートには信号PRSTが供給されている。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、CHK2nをハイレベルとすると、ベリファイが完了している場合、信号線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が供給されている。DDCQは、トランジスタ61Qr、61Qsにより構成されている。トランジスタ61Qrの電流通路の一端には信号VREGが供給され、他端は前記トランジスタ61Qqを介して接続ノードN3に接続されている。トランジスタ61Qqのゲートには、信号REGQが供給されている。トランジスタ61Qrのゲートはトランジスタ61Qsを介して前記PDCのノードN1aに接続されている。このトランジスタ61Qsのゲートには信号DTGQが供給されている。さらに、前記接続ノードN3にはトランジスタ61t、61uの電流通路の一端が接続されている。トランジスタ61uの電流通路の他端には信号VPREが供給され、ゲートにはBLPREが供給されている。前記トランジスタ61tのゲートには信号BLCLAMPが供給されている。このトランジスタ61tの電流通路の他端はトランジスタ61vを介してビット線BLoの一端に接続され、トランジスタ61wを介してビット線BLeの一端に接続されている。ビット線BLoの他端はトランジスタ61xの電流通路の一端に接続されている。このトランジスタ61xのゲートには信号BIASoが供給されている。ビット線BLeの他端はトランジスタ61yの電流通路の一端に接続されている。このトランジスタ61yのゲートには信号BIASeが供給されている。これらトランジスタ61x、61yの電流通路の他端には、信号BLCRLが供給されている。トランジスタ61x、61yは、信号BIASo、BIASeに応じてトランジスタ61v、61wと相補的にオンとされ、非選択のビット線に信号BLCRLの電位を供給する。上記各信号及び電圧は、図2に示す制御信号及び制御電圧発生回路7により生成され、この制御信号及び制御電圧発生回路7の制御に基づき、以下の動作が制御される。本メモリは、多値メモリであり、1セルに2ビットのデータを記憶することができる。この2ビットの切り替えはアドレス第1ページ、第2ページによって行なわれる。図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ビットのデータが書きこまれる。動作説明図8a~dは、メモリセルのデータとメモリセルの閾値電圧の関係を示している。消去動作を行なうとメモリセルのデータは0となる。図8aに示すように、第1ページの書き込みを行なうと、メモリセルのデータはデータ0とデータ2になる。図8bに示すように、第2ページの書き込み前に隣接セルに実際のデータの閾値電圧以下のデータが書き込まれる。すると、このセルに書き込まれたデータにより、データ2の閾値電圧の分布が大きくなる。次いで、図8cに示すように、第2ページの書き込みが行なわれ、メモリセルは本来の閾値電圧を有するデータ0~3となる。本実施形態において、メモリセルのデータは閾値電圧の低い方から高い方へと定義されている。フラグセルは、第1ページの書き込みにおいて、書き込まれず、図8cdに示すように、第2ページの書き込み動作において書き込まれる。本実施例では、メモリセルのデータは閾値電圧の低いほうから高い方へと、定義されている。図6乃至図10を参照して、プログラム動作について説明する。尚、本実施形態において、プログラム動作は本質ではなく、プログラム動作は種々変形可能である。プログラム及びプログラムベリファイ第1ページプログラム図9は、第1ページプログラムのフローチャートを示している。プログラム動作は、先ずアドレスを指定し、図3に示す2ページ1セクタが選択する。本メモリは、この2ページのうち、第1ページ、第2ページの順でしか、プログラム動作できない。したがって、先ず、アドレスにより第1ページを選択する。このアドレス入力中に図6に示すトランジスタ61dを信号PRSTによってオンさせることにより、全てのSDCのN2aのノードを接地電位Vssにリセットする。ST11次に、書き込みデータを、外部より入力し全てのデータ記憶回路10内のSDCに記憶するST12。このとき、データを書き込む場合、外部よりデータ0が入力されるが、SDCのノードN2aは、例えば電源電位Vddとなる。書き込み非選択の場合は、外部よりデータ1が入力され、SDCのノードN2aはVssとなる。この後、書き込みコマンドが入力されると、全てのデータ記憶回路10内のSDCのデータがPDCに転送されるST13。すなわち、信号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の電位とする。データ反転動作ST14この後、信号VPRE=Vdd、信号BLPRE=VddVthとし、ノードN3を一旦Vddにプリチャージする。この後、信号DTG=VddVthとして、PDCのデータをDDCに転送する。次に、信号REG=Vdd、信号VREG=Vssとする。DDCがハイレベルを記憶している場合、トランジスタ61rがオンするため、ノードN3はローレベルとなる。また、DDCがローレベルを記憶している場合、トランジスタ61rはオフしているため、ノードN3はハイレベルのままとなる。この後、一旦信号SEN1,LAT1をオフとし、信号EQ1をVddとし、ノードN1aとN1bを同電位とする。この後、信号BLC1=VddVthとし、TDCのデータノードN3の電位をPDCに移す。この結果、元々PDCにデータ1がラッチされていた場合、データ0となり、データ0がラッチされていた場合、データ1となる。書き込みコマンドが入力されると、制御信号及び制御電圧生成回路7において、プログラム電圧Vpgm、及び中間電位Vpassを発生する図示せぬ昇圧回路が動作する。これらの電位は直ぐには立ち上がらないため、この待ち時間の間に、上記データ反転動作を行う。このため、書き込みスピードは遅くならない。このように、入力データを反転して入力する理由は、次の通りである。メモリセル内に書かれている1ページのデータをページバッファに読み出し、外部に出力せず他の1ページに書き込む、所謂ページコピーを行う場合、先ず、読み出しを行う。しかし、書き込みを行ったデータデータ0は、SDCが1となり、書き込みを行わなかったデータデータ1は、SDCが0となる。このように、反転データとして入力したデータにより、書き込みを行う場合、SDCが1、書き込みを行わない場合、SDCが0となるため一致する。このように、SDCにおいて、次に書き込むデータを一致させておくと、読み出したデータの一部のみデータを外部より入力し、書き換えることが容易にできる。したがって、ページコピーをしない場合でも常に、外部より入力されたデータの論理をページバッファ内で反転するようにする。通常のプログラムコマンドを入力することにより、上記データ反転動作が行なわれる。この後、PDCのデータをDDCQにも転送しておく。ところで、第1ページのプログラムにおいて、フラグセルにはデータが書き込まれない。このため、フラグ用データ記憶回路10a、10b内のPDCはデータ1となる。プログラム動作ST15図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/2程度と小さくなり、書き込みが行われない。多値メモリは、閾値電圧の分布を狭めるため、本来のベリファイレベルv’と、これより低いベリファイレベルv’が設定されている。以後は本来の値より低い電位を表す。ベリファイレベルv’を超え、ベリファイレベルv’以下のセルは、ビット線に中間電位VddとVssの中間の例えば1Vが供給され、書き込みスピードを遅くする方法が用いられる。ここで、信号VREGをVdd、信号REGQを中間電位Vth例えば1VVthにすると、ビット線がVssの場合で、DDCQがハイレベルの場合、ビット線が中間電位になり、DDCQがローレベルの場合、ビット線はVssのままとなり、ビット線がVddの場合、Vddのままになる。書き込みデータPDCのデータが0の時、図8aに示すように、メモリセルのデータを2にする。書き込みデータが1の時、メモリセルのデータは0のままである。第1ページベリファイS16第1ページ書き込みは、図8aに示すように、ベリファイレベルv’まで書き込みを行う。したがって、ベリファイ動作の第1ステップでは、図8aに示すように、本来のベリファイ時のワード線の電位v’より低い電位v’を用いてベリファイし、この後、第2ステップにおいて、ワード線の電位をv’とする。先ず、選択されているブロック内の非選択ワード線に読み出し時の電位Vreadを与え、セレクト線SGDをハイレベルにする。図6に示すデータ記憶回路10の信号BLPREに、例えばVddVth、信号BLCLAMPに所定の電圧、例えば1VVthを供給し、信号VPREをVddとし、ビット線を1Vにプリチャージする。次に、セルのソース側のセレクト線SGSをハイレベルにする。閾値電圧が電位v’より高いセルはオフする。このため、ビット線はハイレベルのままである。また、閾値電圧が電位v’より低いセルはオンする。このため、ビット線はVssとなる。次に、信号BLPREに所定の電圧、例えばVddVthを供給し、信号VPREをVddとすることにより、TDCの接続ノードN3をVddにプリチャージする。この後、信号BLCLAMPを所定の電圧、例えば0.9VVthとしてトランジスタ61tをオンさせる。TDCのノードN3は、ビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。ここで、書き込みを行なう場合、図6のDDCQにローレベルが記憶され、書き込みを行なわない場合、DDCQにハイレベルが記憶されている。このため、信号VREGをVddとし、信号REGQをハイレベルにすると、書き込みを行なわない場合のみTDCのノードN3が強制的にハイレベルとなる。この動作の後、PDCのデータをDDCQに移し、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のDDCQにローレベルが記憶され、書き込みを行なわない場合、DDCQにハイレベルが記憶されている。このため、信号VREGをVddとし、信号REGQをハイレベルにすると、書き込みを行なわない場合のみTDCのノードN3が強制的にハイレベルとなる。この動作の後、PDCのデータをDDCQに移し、TDCの電位をPDCに転送する。PDCにハイレベル信号がラッチされる場合は、セルに書き込みを行なわない場合と、セルにデータ2を書き込んでおり、セルの閾値電圧がベリファイ電位v’に達した場合だけである。また、PDCにローレベル信号がラッチされる場合は、セルの閾値電圧がv’に達しない場合である。この結果、DDCQがハイレベルとなるのは、セルの閾値電圧がv’を超えている場合と、書き込み非選択の場合であり、DDCQがローレベルとなるのは、書き込みを行っている場合で、セルの閾値電圧がv’以下の場合である。PDCがハイレベルとなるのは、セルの閾値電圧がv’を超えている場合と、書き込み非選択の場合であり、PDCがローレベルとなるのは、書き込みを行っている場合で、セルの閾値電圧がv’以下の場合である。PDCがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路10のデータがハイレベルになるまで、このプログラム動作とベリファイ動作を繰り返すS18-S15が、PDCがローレベルでDDCQがハイレベルのセル、すなわち閾値電圧がv’以上v’以下の場合の書き込みは、ビット線に中間電位を入れて書き込みスピードを抑える。上記プログラム動作は、ステップS14においてクリアされたプログラム回数カウンタPCの値が、最大プログラム回数より少ない範囲において実行される。一括検知全てのPDCのノードN1aがハイレベルとなったかどうかは、次のようにして調べる。図6の信号線COMは全てのデータ記憶回路10に共通に接続されている。先ず、この信号線COMをVddにプリチャージする。この後、信号CHK2nをハイレベルとした後、信号CHK1をハイレベルとする。全てのPDCのノードN1aがハイレベルである場合、信号線COMは、Vddのままとなる。しかし、1つでもノードN1aがローレベルのPDCがあると、信号線COMはローレベルとなる。隣接セルプログラム図7に示すように、メモリセル1の第1ページに1ビットのデータの書き込んだ後、メモリセル1とワード方向に隣接したメモリセル2の第1ページの書き込み、メモリセル1とビット方向に隣接したメモリセル3の第1ページの書き込み、メモリセル1と対角に隣接したメモリセル4の第1ページの書き込みが順次行なわれる。これらの書き込み動作が行なわれると、書き込みデータによっては、浮遊ゲート間容量によって、メモリセル1の閾値電圧が上昇する。このため、メモリセル1のデータ0とデータ2の閾値電圧分布は、図8bに示すように、電位が高いほうに広がる。この後、図7に示す第5番目の書き込みにおいて、メモリセル1の第2ページに1ビットのデータが書き込まれる。第2ページプログラム図10は、第2ページプログラムの一例を示すフローチャートである。第2ページプログラムも、先ずアドレスに応じて、図3に示す2ページが選択される。これと同時にページバッファとしてのSDCがリセットされる。S21次に、書き込みデータを外部より入力し全てのデータ記憶回路内のSDCに記憶するS22。外部よりデータ1書き込みを行なわないが入力されると、データ記憶回路10のSDCのノードN2aは、ローレベルになり、外部よりデータ0書き込みを行なうが入力されるとハイレベルとなる。内部データリードS23先ず、セルへデータを書き込む前に、メモリセルの第1ページのデータが0であるか、2であるかを判断する必要がある。このため、メモリセルのデータを読み出す内部リード動作を行なう。内部データリードは、リード動作と全く同じである。通常メモリセルのデータが0であるか2であるかの判断において、選択ワード線には、リード時の電位bを与える。しかし、第1ページのプログラム動作において、データ2は、通常より低いv’までしか書き込んでいない。このため、メモリセルの閾値電圧は電位bより低い場合もある。したがって、内部データリードでは、ワード線にaの電位を供給して読み出し動作をする。内部データリード後、第1ページの書き込みにおいて、データが書き込まれなかった場合、PDCのデータはローレベル0、書き込まれた場合、ハイレベル1となる。データキャッシュの設定1回目S24この後、データキャッシュを操作することにより、書き込み後のメモリセルのデータに対応して、SDC,DDC,TDCのデータを次のように設定する。書き込み後のメモリセルのデータが0の場合、SDC=1,DDC=1,DDCQ=1,PDC=1、書き込み後のメモリセルのデータが1の場合、SDC=1,DDC=0,DDCQ=0,PDC=0、書き込み後のメモリセルのデータが2の場合、SDC=0,DDC=1,DDCQ=0,PDC=0、書き込み後のメモリセルのデータが3の場合、SDC=0,DDC=0,DDCQ=0,PDC=0。データキャッシュの操作は、本実施形態の本質ではないため、具体的な説明を省略する。このデータキャッシュの設定1の途中、又は、内部リードの途中において、フラグセルのデータもロードされる。さらに、プログラム回数カウンタPCがクリアされる。第1フラグセルFC1は、メモリセルのデータ1となり、第2フラグセルFC2は、メモリセルのデータ2と書き込まれる。このため、各メモリセル及びフラグセルに接続されるデータキャッシュも、書き込み後のメモリセルのデータに対応するようにセットされる。第1ステップS25次いで、メモリセルにデータが書き込まれる。先ず、信号BLC1をVsgVddVth、例えば2.5VVthとすると、PDCがデータ0の場合、ビット線がVssとなり、データ1の場合、ビット線はVddになる。次に、信号BLC1をVssとした後、信号VREGをVdd、信号REGQを中間電位Vth1VVthとすると、ビット線がVssであった場合、中間電位1Vとなる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位1Vの場合、少しだけ書き込まれる。第2ステップベリファイレベルaでのベリファイS26,S27上記プログラム後、ワード線にベリファイ電圧a’、a’を順次設定して書き込みベリファイが行なわれる。ベリファイ手順は第1ページと同様であるが、データ2,3を書き込んでいるセルもこのベリファイをパスしてしまう。したがって、信号VPREをハイレベル、信号VREGをハイレベルとして、TDCをVddに充電する替わりに、SDCをハイレベルとして、データ1に書き込んでいるメモリセルのみTDCをVddに充電する。この操作により、メモリセルのデータ2,3への書き込みセルは、このベリファイでパスしなくなる。第2ステップベリファイレベルbでのベリファイS28、S29この後、ワード線にベリファイ電圧b’、b’を順次設定して書き込みベリファイが行なわれる。ベリファイ手順は第1ページと同様であるが、データ3へ書き込んでいるメモリセルもこのベリファイでパスしてしまう。したがって、信号VPREをハイレベル、信号VREGをハイレベルとして、TDCをVddに充電する替わりに、信号REGをハイレベルとし、データ2に書き込んでいるメモリセルのみ、TDCをVddに充電する。この操作により、データ3へ書き込んでいるメモリセルは、このベリファイでパスしなくなる。第2ステップベリファイレベルcでのベリファイS30,S31この後、ワード線にベリファイ電圧c’、c’が順次設定され、書き込みベリファイが行なわれる。ベリファイ手順は第1ページと同様である。第2ページ書き込み第2ステップ後のデータキャッシュの内容は次のようになる。書き込み後のメモリセルのデータが0の場合、SDC=1,DDC=1,DDCQ=0/1,PDC=1、書き込み後のメモリセルのデータが1の場合、SDC=1,DDC=0,DDCQ=0/1,PDC=1、書き込み後のメモリセルのデータが2の場合、SDC=0,DDC=1,DDCQ=0/1,PDC=1、書き込み後のメモリセルのデータが3の場合、SDC=0,DDC=0,DDCQ=0/1,PDC=1。このようにして、全てのPDCのデータが1になるまで、プログラムとベリファイ動作が繰り返される。上記ベリファイの途中において、データ1への書きこみは、早く終了する。このため、データ1へ書き込むセルが無くなるとプログラムベリファイa’,a’のベリファイは行なわない。また、データ2へ書き込むセルが無くなるとプログラムベリファイb’,b’のベリファイは行なわない。第1ページの書き込みでは、PDCとDDCQのみを使用し、SDCとDDCは使用していない。第2ページの書き込みでは、データ1への書き込みが早く終了する。このため、データ1への書き込みが終了した後、PDCとDDCQとDDCのみを使用し、SDCは使用しない。データ2への書き込みが終了した後、PDCとDDCQのみ使用し、SDCとDDCは使用していない。したがって、書き込みに使用しないSDC、又はSDCとDDCがある場合、チップ外部をレディ状態として、SDC又はSDCとDDCに次の書き込みデータを入力することも可能である。このように、使用していないSDC又はSDCとDDCをキャッシュとして用いることにより、プログラムすることが可能である。すなわち、図11aに示すように、例えばチップ外部の図示せぬホストからキャッシュを使用するプログラムコマンド15hhは16進を示すが発行された後、SDC又はSDCとDDCが使用可能となった場合、チップ外部はレディ状態としてリード起動コマンド30hを受付可能とする。この後、リード起動コマンドが入力された場合、一旦書き込みプログラムを中断してリード動作を行い、リード動作の結果を、SDC又はSDCとDDCに保持する。次いで、このリード動作の結果を外部に出力している間に、前の書き込みを続けることプログラム再開も可能である。つまり、図6において、SDCが使用可能となった場合、チップ外部をレディ状態としてリード起動コマンド30hを受付可能とする。この後、リード起動コマンドが入力された場合で、SDCとDDCが使用可能となった場合、一旦書き込みプログラムを中断し、PDCのデータをDDCに移す。この後、リード動作を行い、読み出されたデータをPDCに保持する。この後、PDCのデータをSDCに移す。このSDCに保持されたデータを外部に出力している間に、DDCに待避させたデータをPDCに戻し、前の書き込みを続ける。さらに、図11bは、リード動作後、一部のみデータを変更して、プログラムを行うページコピーする場合を示している。この場合、リード動作後、SDCをリセットせずにアドレス入力行なうコマンド85h、及びプログラムコマンド15hを受け、一部のみデータを変更して、プログラムを行う。尚、80hは、ページコピーではない場合のアドレスデータ入力コマンドである。リード従来のキャッシュリードは、先ず、アドレス入力コマンド00hとアドレスを入力した後、リード起動コマンドである30hを入力することにより、ビジー状態となる。この状態において、セルから読み出されたデータはPDCに保持される。この後、PDCのデータはSDCに転送され、レディ状態になると、SDCのデータが出力可能となる。次に、キャッシュリードコマンド31hが入力されると、PDCのデータはSDCに転送される。この後、レディ状態になるとSDCのデータが出力可能となる。キャッシュリードコマンド31hは、次に読み出すアドレスを任意に指定することも、内部で自動的に次のページにインクリメントすることも、前のページにディクリメンとすることもでき、SDCのデータを出力している間に、次の読み出しページのデータをセルからPDCに読み出す。この動作を繰り返すことにより、データを高速に読み出すことができる。しかし、第1ページのキャッシュリードにおいて、コマンド31hに応じて、フラグセルのデータにより読み直しをする場合、コマンド31hが発行された後、ビジー状態において、次の動作が行なわれる。すなわち、先ず、PDCからSDCへデータが転送され、フラグセルのデータがチェックされ、チェック結果に応じてメモリセルからデータが読み出されてPDCに保持され、PDCからSDCへデータが転送される。このため、ビジー状態が長くなるという問題がある。この理由は、図6に示すように、PDCのデータはSDCに転送した後でなければ、データ記憶回路の外に出力することができないからである。また、第2ページのキャッシュリードにおいても、コマンド31hが発行された後、フラグセルのデータのチェック結果に応じて、SDCのデータを1にセットする場合、コマンド31hが発行された後、ビジー状態が長く続くという問題がある。そこで、第1の実施形態は、キャッシュコマンド発行後のビジー状態を短縮可能とする。図12abは、第1の実施形態に係るリード時のフローチャートを示し、図13は、リード時にタイミング図を示している。第1ページリード図12a、図13は、第1ページリードのダイアグラムを示している。先ず、アドレスを指定し、図3に示す2ページを選択する。図8abcに示すように、第2ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、第2フラグセルのデータが0か1であるかを判別するため、先ず、ワード線の電位をbとして読み出し動作を行なう。この読み出し動作中に全てのデータ記憶回路のSDCのノードN2aをデータ0にセットした後、フラグセルのSDCのみIO、IOnを介して、データ1にセットし、SDCのデータをPDCとDDCにコピーしておくS41。セルから読み出されたデータは、PDCに読み出される。フラグセルにデータが書き込まれている場合、フラグセル用のPDCはハイレベル、フラグセルにデータが書き込まれていない場合、フラグセル用のPDCはローレベルとなる。次に、全てのデータ記憶回路のTDCをVssに設定した後、信号VREGをハイレベル,信号REGをハイレベルとすると、フラグセル用のデータ記憶回路のTDCのみがハイレベルとなり、その他のデータ記憶回路のTDCは、ローレベルとなる。次に、図6に示す信号線COMiをVddにプリチャージする。この後、信号CHK2nをローレベルとした後、信号CHK1をハイレベルとする。信号線COMiがハイレベルとなるのは、フラグセル用のPDCがローレベルの時、つまり、フラグセルにデータが書き込まれていないときのみである。一方、信号線COMiがローレベルとなるのは、フラグセル用のPDCがハイレベルの時、つまりフラグセルにデータが書き込まれているときである。フラグセル用のデータ記憶回路以外のTDCは、ローレベルとなっているため、TDCのデータは信号線COMiに反映されない。このようにして、SDCにフラグセルのデータを移さずに、フラグセルにデータが書き込まれているかどうかを判断する。信号線COMiの充電、及び信号線COMiのレベルの判別は、制御信号及び制御電圧発生回路7により行なわれる。第2フラグセルから読み出されたデータが0メモリセルのデータが2の場合、第2ページの書き込みは行われている。このため、セルの閾値電圧の分布は、図8cとなっている。このようなセルのデータを判断するには、ワード線の電位をbとしてリード動作をすればよい。しかし、ワード線電位bで読み出し動作をした結果は、既にPDCに読み出されている。したがって、PDCのデータをSDCに転送することにより、外部へ出力することが可能となるS44,S45。一方、フラグセルから読み出されたデータが1メモリセルのデータが0の場合、第2ページの書き込みが行われていない。すなわち、セルの閾値電圧の分布は、図8a又はbに示すようになっている。これらのメモリのデータを判断するには、ワード線の電位をaでリード動作をしなくてはならない。したがって、制御信号及び制御電圧発生回路7は、ワード線の電位をaとして読み出し動作を行なうS43。この後、PDCに読み出されたデータはSDCに転送されS44、外部に出力されるS45。第2ページリード図12b、図13は、第2ページリードのダイアグラムを示している。先ず、アドレスを指定し、図3に示す2ページを選択する。すなわち、図13に示すように、アドレス入力コマンド00h、アドレスAddを順次入力した後、リード起動コマンド30hが入力される。図8abcに示すように、第2ページの書き込み前と後で、閾値電圧の分布が変わっている。第2ページの書き込み後は、図8cに示すような分布になっている。先ず、ワード線の電位をcとして読み出し動作を行ないS51。この後、ワード線電位をaとして読み出し動作を行なう。セルの閾値電圧がワード線電位aより低いか、ワード線電位cより高い場合、データは1となり、セルの閾値電圧がワード線電位aより高くワード線電位cより低い場合、データは0となる。この読み出し動作中に全てのデータ記憶回路のSDCのノードN2aを0にセットした後、フラグセルのSDCのみ入出力データ線IO、IOnを介して、データ1にセットし、SDCのデータをPDCとDDCにコピーするS52。セルから読み出されたデータは、PDCに保持される。フラグセルに書き込まれている場合、フラグセル用のPDCはハイレベル、フラグセルに書き込まれていない場合、フラグセル用のPDCはローレベルとなる。次に、全てのデータ記憶回路のTDCをVssに設定した後、信号VREGをハイレベル、信号REGをハイレベルとする。すると、フラグセル用のデータ記憶回路のTDCのみがハイレベル、その他のデータ記憶回路のTDCは、ローレベルとなる。次に、図6の信号線COMiをVddにプリチャージする。この後、信号CHK2nをローレベルとした後、信号CHK1をハイレベルとする。信号線COMiがハイレベルとなるのは、フラグセル用のPDCがローレベルの時、つまり、フラグセルにデータが書き込まれていないときのみである。一方、信号線COMiがローレベルとなるのは、フラグセル用のPDCがハイレベルの時、つまり、フラグセルにデータが書き込まれているときである。フラグセル用のデータ記憶回路以外のTDCは、ローレベルとなっているため、TDCのデータは信号線COMiに反映されない。このようにして、SDCにフラグセルのデータを転送することなく、フラグセルにデータが書き込まれているかどうかを判断することができる。第2ページ書き込み前において、第2ページのデータは1が出力されるべきである。しかし、図8a又は図8bに示す閾値電圧分布になっている。このため、第2ページの書き込み後と同じ読み出し動作をすると出力データが0となることもある。したがって、第1フラグセルのデータが0か1であるかを判別するS53。この結果、第1フラグセルのデータが1で、第2ページの書き込みが行なわれていない場合、PDCのN1aを0に固定セットするS54。この後、PDCに読み出されたデータはSDCに転送されS55、外部に出力されるS56。また、第1フラグセルのデータが0である場合、PDCに読み出されたデータがSDCに転送されS55、外部に出力されるS56。キャシュリード図1abcは、キャシュリードのタイミング図を示し、図14abは、キャシュリードのフローチャートを示している。図14abにおいて、図12abと同一部分には同一符号を付している。キャッシュリードは、先ず、上記リード動作から開始される。すなわち、図13に示すように、アドレス入力コマンド00h、アドレスAddを入力した後、リード起動コマンドである30hが入力される。これにより、半導体記憶装置はビジー状態となる。この状態において、上記リード動作と同様にメモリセルからデータが読み出される。メモリセルから読み出されたデータはPDCに保持される。この後、PDCのデータはSDCに転送される。この状態において、レディ状態となりSDCのデータが出力可能となる。次に、図1aに示すように、キャッシュリードコマンド31hが入力されると、PDCのデータはSDCに転送され、レディ状態になりデータ出力可能となる。キャッシュリードコマンドは、アドレスも入力することができるため、次に読み出すアドレスを指定する。すると、SDCのデータを外部に出力している間に、次のページのデータがセルから読み出され、PDCに保持されるとともに、フラグセルのデータが判断される。すなわち、図1b、図14aに示す第1ページ読み出し動作の場合、キャッシュリードコマンド31hが入力されると、PDCのデータはSDCに転送されS44、データ出力可能となるS45。SDCのデータを外部に出力している間に、次のページのデータがセルから読み出され、PDCに保持されるとともに、第2フラグセルのデータが判断されるS41,S42。第2フラグセルのデータが1の場合、ワード線の電位をaとして読み直し動作を行なうS43。この状態において、再度キャッシュリードコマンドが入力されると、PDCのデータがSDCに転送され、上記と同様の動作が繰り返される。図1c、図14bに示す第2ページ読み出し動作の場合も、第1ページ読み出し動作と同様に、キャッシュリードコマンドに応じてPDCのデータがSDCに転送されS55、データ出力可能となるS56。SDCのデータを外部に出力している間に、第2ページのデータの読み出し、第1フラグセルの判別、出力データを1に固定する操作が実行されるS51~S54。このように、SDCから外部にデータを出力している間に、次のページのデータの読み出し、及びフラグチェックを繰り返すことにより、高速なキャッシュリード動作を実行することができる。すなわち、従来において、第1ページのキャッシュリードにおいて、フラグセルのデータによりメモリセルのデータを読み直しする場合、キャッシュリードコマンドを発行後、ビジー状態が長くなる問題があった。しかし、図1bに示すように、第1の実施形態の場合、データの読み直しは、SDCから外部にデータを出力している間に実行されるため、ビジー状態に影響を与えない。さらに、図1cに示すように、第2ページの読み出しにおいて、出力データを1に固定する操作も、SDCから外部にデータを出力している間に実行されるため、ビジー状態に影響を与えない。図1abcに示すキャシュリードにおいて、図13に示すビット線放電中に行なっていた、フラグセルのSDCのみを1に設定し、その他のSDCを0に設定する操作はしていない。この理由は、キャシュリードの前には、必ず1回リード動作が行なわれ、SDCにデータが読み込まれているためである。しかし、図1abcに示すように、データ出力の時間は、リードやフラグセルのデータの判別より長い。また、DDCはDRAMのように揮発性のキャッシュであるため、データ出力中にDDCのデータが消えてしまう可能性がある。このため、DDCを絶えずリフレッシュする必要がある。図15abcは、第1の実施形態に係るキャッシュリードの変形例を示すものである。図15abcにおいて、レディ状態データ出力中に行なうリード動作の前、すなわち、毎回のビジー状態において、フラグセルのSDCのみを1に設定し、その他のSDCを0に設定する。このデータをPDCを介してDDCに設定する。つまり、先ず、フラグセルのSDCのみを1に設定し、その他のSDCを0に設定する操作を行なう1。この後、PDCのデータをDDCに転送すると同時に、SDCのデータをPDCに転送する。さらに、DDCのデータをSDCに転送すると同時に、PDCのデータをDDCに転送する2。この変形例によれば、キャッシュリード時のビジー状態時間は、図1abcに比べて若干延びるが、DDCを常時リフレッシュする必要がない。したがって、ビジー状態を若干長くすることにより、DDCのデータを確実に保持できる。イレーズ消去動作は、先ず、アドレスを指定し、図3に示す破線で示すブロックを選択する。消去動作を行なうと、メモリセルのデータは0となり、第1ページ、第2ページ、の何れでリードを行なってもデータ1が出力される。上記第1の実施形態によれば、第1、第2フラグセルのデータを、信号線COMiを介して検出し、SDCから外部にデータを出力している間に、第1、第2フラグセルのデータを判別している。したがって、従来のように、PDCのデータをSDCに移した後、検出する必要がないため、高速な読み出し動作が可能である。しかも、キャッシュリードにおいて、2回目のリード動作以降は、SDCからデータを出力している間に、メモリセルからデータを読み出してPDCに保持し、第1、第2フラグセルのデータを判別し、さらに、この間に、データの読み直し、又は出力データを固定する操作が行なわれる。したがって、ビジー状態の期間は、PDCからSDCへのデータ転送のみが行なわれるため、キャッシュリード動作を高速化することが可能である。尚、第1の実施形態において、第1フラグセル、第2フラグセルは、それぞれ1つとしたが、これに限定されるものではない。第1フラグセル、第2フラグセルをそれぞれ1つとした場合、第1、第2のフラグセルに記憶されたデータが劣化した場合、第1、第2ページのデータを確実に読み出すことが困難となる。そこで、第1フラグセル、第2フラグセルをそれぞれ複数のセルにより構成し、複数の第1フラグセルのデータ、複数の第2フラグセルのデータの多数決をそれぞれ取る。このような構成とした場合、第1、第2フラグセルのデータの幾つかが劣化した場合においても、第1ページ、第2ページのデータを確実に読み出すことが可能である。また、第1の実施形態は、信号線COMiを一旦プリチャージし、この信号線COMiが放電するかしないかにより、第1、第2のフラグセルの状態を判別していた。しかし、信号線COMiのノードに例えば演算増幅器OPampを接続し、この演算増幅器により、複数のPDCにおいてオンしているトランジスタの数をモニタすることにより、複数個のフラグセルの多数決を取ることも可能である。また、第1の実施形態において、第2ページの書き込みにおいて、第1フラグセルをメモリセルのデータ0から1へ書き込み、第2フラグセルをメモリセルのデータ0から2へ書き込んだ。しかし、これに限らず、図8cに示すように、第2フラグセルの閾値電圧が、メモリセルの閾値電圧cより低い場合、第1フラグセルを省略することも可能である。さらに、第1の実施形態において、第2ページの書き込みにおいて、第1フラグセルをメモリセルのデータ0から1へ、第2フラグセルをメモリセルのデータ0から2へ書き込んだ。しかし、本体セルは、メモリセルのデータ0から1とメモリセルのデータ2から3の書き込みしかなく、第2フラグセルの書き込みが高速化の妨げとなる場合がある。この場合、第2フラグセルは使用せず、第1フラグセルのみ使用することも可能である。第2の実施形態図16は、第2の実施形態を示すものである。ビット線に不良が発生した場合、不良ビット線はスペアビット線に置き換えられる。ビット線の置き換えは、例えばバイト単位に行なわれる。この変形例は、ビット線がスペアビット線に置き換えられた場合においても、書き込み完了を検出可能としている。図16において、ベリファイ検出回路61は、1バイト又は1ワード、例えば8又は16個のデータ記憶回路10に対して1個接続される。すなわち、1バイト又は1ワード分のデータ記憶回路10にそれぞれ信号線COM0~COMiが接続され、これら信号線COM0~COMiにベリファイ検出回路61が接続されている。ベリファイ検出回路61は、PチャネルMOSトランジスタ61a、61b、61c、NチャネルMOSトランジスタ61d、61e、61f、キャパシタ61h、61iにより構成されている。8又は16個のデータ記憶回路10の信号線COMは、トランジスタ61aのゲートに接続されている。このトランジスタ61aのゲートと電源Vddが供給されるノードとの間にトランジスタ61cが接続されている。このトランジスタ61cのゲートには、信号COMHnが供給されている。このトランジスタは、信号COMHnに応じて信号線COMを充電する。さらに、トランジスタ61aのゲートと接地間にキャパシタ61hが接続されている。トランジスタ61aの電流通路の一端は電源Vddが供給されるノードに接続され、トランジスタ61aの電流通路の他端は、トランジスタ61b、61dを介して接地されている。トランジスタ61bのゲートには、信号RDDが供給され、トランジスタ61dのゲートには信号COLDRSTが供給されている。信号RDDは、通常はローレベルとされ、例えばこのフラグ検出回路61に接続された8個又は16個のデータ記憶回路10に接続されたビット線の不良により、8個又は16個のデータ記憶回路10を含みビット線がスペアビット線に置き換えられた場合、及び使用しないスペアをハイレベルとする。このため、この信号RDDがハイレベルの場合、このフラグ検出回路61は、動作が停止される。トランジスタ61b、61dの接続ノードはトランジスタ61eのゲート接続されている。トランジスタ61eのゲートと接地間には、キャパシタ61iが接続されている。トランジスタ61eの電流通路の一端は、全てのデータ記憶回路10に共通の信号線LSENに接続され、電流通路の他端は、トランジスタ61fを介して接地されている。トランジスタ61fのゲートには信号SDENが供給されている。信号COLDRSTはリセット信号であり、信号SDENは、ベリファイ検出回路61を活性化させるイネーブル信号である。上記構成において、先ず、信号COLDRSTがハイレベルとされ、トランジスタ61dがオンとされて接続ノードNCOMが接地電位にリセットされる。信号COLDRSTがローレベルとなると、信号SDENがハイレベルとされ、トランジスタ61fがオンとされる。また、信号線LSENはハイレベルに充電されている。この後、フラグセルのデータが読み出された状態において、8個又は16個のデータ記憶回路10のうち、1つの信号線COMでもローレベルの場合、トランジスタ61aはオンする。ビット線がスペアビット線に置き換えられていない場合、信号RDDがローレベルとされている。このため、トランジスタ61bはオンしており、トランジスタ61aがオンすると、トランジスタ61eがオンする。したがって、信号線LSENの電荷は、トランジスタ61e、61fを介して放電され、ローレベルとなる。一方、全ての信号線COMがハイレベルとなっている場合、トランジスタ61aは、オフ状態のままであり、信号線LSENはハイレベルを保持する。このため、書き込み完了を検出することができる。上記第2の実施形態によれば、信号線COMの1バイト又は1ワード毎にベリファイ検出回路61を設け、これらベリファイ検出回路61の出力端に共通に信号線LSENを接続し、ベリファイ検出回路61により、信号線COMのレベルを検出し、信号線LSENのレベルを制御している。さらに、ベリファイ検出回路61は、信号RDDにより、対応するビット線がスペアビット線に置き換えられた場合、非動作状態に設定される。したがって、ビット線がスペアビット線に置き換えられた場合においても、書き込み完了を確実に検出することができる。尚、前述したように、フラグセルを複数個設けた場合において、図6に示す信号CHK1をバイト又はワード内の0~7、又は0~15毎に別の信号とし、1つずつ選択することにより、複数のフラグセルの1つずつを選択する。この状態において、例えばハイレベルとなっているフラグセルの数を数えることにより、フラグセルのデータを多数決で判断することができる。その他、本発明の要旨を変えない範囲において、種々変形実施可能なことは勿論である。"