複数のセルトランジスタが配置されたメモリセルアレイと、前記セルトランジスタに書込みを行う際にプログラム動作毎に書込み電圧を段階的に高くしながらプログラム動作後のベリファイ動作を行うように制御するとともに、前記セルトランジスタに接続されているビット線に電源電圧より低い所定の中間電圧を印加した状態で半選択書込みを行い、ベリファイレベルおよび前記ベリファイレベルよりも低いベリファイロウレベルを設定するように制御する書込み制御手段とを備え、前記書込み制御手段は、書込み対象セルトランジスタの閾値が初めて前記ベリファイロウレベル以上となったプログラム動作である第1のプログラム動作の次のプログラム動作を第2のプログラム動作として半選択書込みを行い、その後のベリファイ動作を第1のベリファイ動作として前記ベリファイレベルを基準として行い、さらに、書込み対象セルトランジスタを非選択状態に設定して第3のプログラム動作を行い、その後のベリファイ動作を第2のベリファイ動作として前記ベリファイレベルを基準として行うように制御することを特徴とする不揮発性半導体記憶装置。前記書き込み制御手段は、前記第2のベリファイ動作の結果がパスしなかった場合は前記第1のベリファイ動作の前に行ったプログラム動作から前記書込み電圧を高くしたプログラム動作を再度行い、その後のベリファイ動作をスキップして書き込み動作を終了するように制御することを特徴とする請求項1に記載の不揮発性半導体記憶装置。セルトランジスタに書込みを行う際にプログラム動作毎に書込み電圧を段階的に高くしながらプログラム動作後のベリファイ動作を行うように制御するとともに、前記セルトランジスタに接続されているビット線に電源電圧より低い所定の中間電圧を印加した状態で半選択書込みを行い、ベリファイレベルおよび前記ベリファイレベルよりも低いベリファイロウレベルを設定するように制御する書込み制御手段を備え、前記書込み制御手段は、書込み対象セルトランジスタの閾値が初めてベリファイロウレベル以上となったプログラム動作の次に前記セルトランジスタに対して行うプログラム動作後のベリファイ動作を前記ベリファイレベルを基準として行い、前記ベリファイ動作の結果がパスしなかった場合に前記セルトランジスタに対して半選択書き込みによってプログラム動作を行うように制御することを特徴とする不揮発性半導体記憶装置。前記ベリファイロウレベルは、前記ベリファイレベルよりも前記書込み電圧を段階的に高くする量の1/2低い値であることを特徴とする請求項3に記載の不揮発性半導体記憶装置。前記書き込み制御手段は、前記ベリファイ動作の結果がパスしなかった場合は前記ベリファイロウレベル以上となったプログラム動作から前記書込み電圧を高くしたプログラム動作を再度行い、その後のベリファイ動作をスキップして書き込み動作を終了するように制御することを特徴とする請求項3に記載の不揮発性半導体記憶装置。本発明は前記した従来の問題点を解決すべくなされたもので、セルトランジスタに書込みを行う際に適正な閾値に書込みを行うことが可能な不揮発性半導体記憶装置を提供することを目的とする。本発明の不揮発性半導体記憶装置の態様は、複数のセルトランジスタが配置されたメモリセルアレイと、前記セルトランジスタに書込みを行う際にプログラム動作毎に書込み電圧を段階的に高くしながらプログラム動作後のベリファイ動作を行うように制御するとともに、前記セルトランジスタに接続されているビット線に電源電圧より低い所定の中間電圧を印加した状態で半選択書込みを行い、ベリファイレベルおよび前記ベリファイレベルよりも低いベリファイロウレベルを設定するように制御する書込み制御手段とを備え、前記書込み制御手段は、書込み対象セルトランジスタの閾値が初めて前記ベリファイロウレベル以上となったプログラム動作である第1のプログラム動作の次のプログラム動作を第2のプログラム動作として半選択書込みを行い、その後のベリファイ動作を第1のベリファイ動作として前記ベリファイレベルを基準として行い、さらに、書込み対象セルトランジスタを非選択状態に設定して第3のプログラム動作を行い、その後のベリファイ動作を第2のベリファイ動作として前記ベリファイレベルを基準として行うように制御することを特徴とする。以下、図面を参照して本発明を実施の形態により説明する。この説明に際して、全図にわたり共通する部分には共通する参照符号を付す。第1の実施形態図1は、本発明の実施形態に係るNANDフラッシュメモリの要部を抽出して概略構成を示すブロック図である。図2は、図1のメモリのコア部の一部を取り出して概略的に示すブロック回路図である。このNANDフラッシュメモリは、メモリセルアレイ1、ロウデコーダ2、センスアンプデータラッチ3、内部電圧生成回路4、制御回路5、アドレスレジスタ6、カラムデコーダ7、インターフェース回路8等を含んで構成されている。メモリセルアレイ1は、図2に示すように、複数のメモリセルブロックBLK0~BLKmに分割されている。各メモリセルブロックBLK0~BLKm中には、NANDセルがマトリクス配置されている。各NANDセルは、複数個のセルトランジスタが隣接するもの同士でソース、ドレインを共有するように直列接続されて形成されている。NANDセル列の一端側のドレインはそれぞれ選択トランジスタを介してビット線BL0~BLnに接続される。NANDセル列の他端側のソースは選択トランジスタを介してセルソース線に接続されている。メモリセルアレイ1の行方向に沿って延設された選択ゲート線SGD、SGSはそれぞれ、同一行の選択トランジスタのゲートに接続される。メモリセルアレイ1の行方向に沿って延設されたワード線WL0~WLn1はそれぞれ、同一行のセルトランジスタの制御ゲートに接続される。ここで、1本のワード線に接続されたセルトランジスタにより1ページが構成され、複数ページ分でメモリセルブロックBLK0~BLKmの1ブロックを構成する。なお、メモリセルアレイ1への書き込みおよび読み出しは1ページ単位で行われ、消去はブロック単位で行われる。本例では、図3中に示すように、ビット線BLの1本毎にカラム選択信号BSにより選択制御されるカラム選択トランジスタを介して1つのセンスアンプデータラッチ3が接続されている。ここで、奇数列カラムのカラム選択トランジスタのゲートにはカラム選択信号線BLSO、偶数列カラムのカラム選択トランジスタのゲートにはカラム選択信号線BLSEが接続されている。センスアンプデータラッチ3は、書き込み時には、インターフェース回路8に入力された書き込みを行うセルデータプログラムデータの1ページ分をラッチする。また、読み出し時には、メモリセルアレイ1中の選択されたメモリセルブロックBLK0~BLKmから各ビット線に読み出されたセルデータの1ページ分をラッチする。インターフェース回路8は、各種のコマンド、ロウアドレス信号、書き込みを行うセルデータなどが入力され、アドレス信号ロウアドレス信号およびカラムアドレス信号Addはアドレスレジスタ6に供給されてラッチされ、コマンドComは制御回路5に供給されてラッチされる。また、インターフェース回路8は、メモリセルアレイ1から読み出されてセンスアンプデータラッチ3にラッチされたデータDataがデータ線10を介して供給され、これを出力する。制御回路5は、コマンドレジスタ、コマンドデコーダ、ステータスレジスタ等を含み、外部から各種の制御信号チップイネーブル信号/CE、コマンドラッチイネーブル信号CLE、アドレスラッチイネーブル信号ALE、ライトイネーブル信号/WE、リードイネーブル信号/RE等が入力する。ここで、コマンドレジスタはコマンドデータをラッチし、コマンドデコーダは供給されたコマンドをデコードしてフラッシュメモリの動作モードを決定し、かつ、その動作モードに応じてフラッシュメモリの全体の動作を制御する制御信号を生成する。これらの制御信号に基づいて、メモリ中の各回路の読み出し動作、書き込み動作、消去動作、ベリファイ動作、内部電圧生成回路4などが制御される。内部電圧生成回路4は、制御信号に基づいて内部電圧を生成する。例えば書込み時には、書込み電圧、転送電圧等の高電圧を発生し、ロウデコーダ2およびメモリセルアレイ1に供給する。アドレスレジスタ6にラッチされたロウアドレス信号ブロックアドレス信号、ページアドレス信号は、動作モード信号とともにロウデコーダ2に供給されてデコードされる。ロウデコーダ2は、メモリセルアレイ1中のメモリセルブロックBLK0~BLKmおよびページを選択し、選択されたブロック内のワード線WL0~WLn1および選択ゲート線SGD、SGSの電位を制御する。また、アドレスレジスタ6にラッチされたカラムアドレス信号は、カラムデコーダ7に供給されてデコードされる。カラムデコーダ7は、カラムアドレス信号に基づいてメモリセルアレイ1のカラムを選択する。図3は、図2中のセンスアンプデータラッチ3の1個分を取り出して概略的に示すブロック図である。このセンスアンプデータラッチにおいて、センスアンプ31はビット線BLに接続されるとともにセンスアンプ側データラッチであるデータラッチ32が接続されている。このデータラッチ32は、ビット線BLを充放電するデータ、あるいは、センスアンプでセンスしたデータを保持する。また、センスアンプ31には、データ演算回路33を介して複数のデータラッチ34が接続されている。上記データラッチ34の数は、セルアレイのメモリセル1個にnビットの情報をプログラムする場合、外部バスより供給されるプログラムデータを格納するために少なくともn個必要である。本例では、2ビット/セルのプログラムを行う場合に必要である2個と、さらに、データ演算回路の判定結果Flagを保持するために必要である2個を示している。なお、1ビット/セルのプログラムを行う場合には、データラッチの数は3個でよい。データ演算回路33は、以下に述べるような書込み制御機能を有する。ここで、図3のセンスアンプデータラッチ3の動作を説明する。外部バスより供給されるプログラムデータはデータラッチに入力される。データ演算回路33は、このプログラムデータに基づいてセンスアンプデータラッチ3に接続されているビット線BLの電位Vblを、0V、後述するVinhibit、VQPWのいずれに設定するかを判定し、その判定結果をデータラッチ32に転送し、さらに、このデータラッチ32のデータを転送するように制御する。図2に示したように、同一行のセルトランジスタの制御ゲートはワード線WL0~WLn1のいずれかに共通接続されており、書込み時には同一行のセルトランジスタは同時に書込みが行われる。この際、書込み速度の速いセルトランジスタは狙いの閾値への書込みを終了するまでのプログラムループ回数が少ないが、書込み速度の遅いメモリセルは狙いの閾値への書込みを終了するまでのプログラムループ回数を多く必要とする。図4は、NANDセルの書込みにおけるノイズの影響を説明するためにセルトランジスタの閾値分布状態を示す図である。NANDフラッシュメモリでは回路やNANDセルのプロセス起因によるノイズにより、図4中に破線で示すように、狙いの閾値より低い値で書込みが終了してしまうことがある。そこで、本発明では、以下に述べる実施形態で説明するように、制御回路5は、書込みに際してベリファイ動作を複数回繰り返すように回路全体を制御する。これにより、最初のベリファイ動作中にノイズの影響で低い閾値のまま書込みが終わってしまっても、ノイズの影響を受け難くし、図4中に実線で示すように狙いの閾値分布幅にすることが可能になる。以下、プログラム動作及びベリファイ動作について種々の実施形態を説明する。第1の実施形態図5は、第1の実施形態に係るNANDフラッシュメモリにおけるプログラム動作及びベリファイ動作を示すタイムチャートである。ワード線WL0~WLn1のいずれかにより選択したセルトランジスタの制御ゲートに印加する書き込み電圧をステップアップさせながら書込みを行う際、本実施形態では、書き込み対象セルトランジスタの閾値が初めてベリファイレベルに達したプログラム動作第1のプログラム動作後のベリファイ動作を同じベリファイレベルで2回以上行う。この時、2回目以降のベリファイ動作は第1のプログラム動作の次のプログラム動作第2のプログラム動作以降に行い、ベリファイ動作の結果がパスするまでプログラム動作及びベリファイ動作を繰り返す。即ち、図5中のビット線電位Vblに示すように、ProgramLoopのn回目Loopn回目のプログラム動作後に第1のベリファイ動作を行ってパスした場合、Loopn1回目のプログラム動作はビット線BLに選択禁止電圧Inhibit電圧、~30Vを印加して書き込み対象セルトランジスタのチャネルをブースト状態書込みが起こらない状態、非選択状態にして行う。この後に第2のベリファイ動作を行い、このベリファイ動作の結果もベリファイ動作の結果と同様にパスした場合、その後は書込みを行わない。これに対して、Loopn1回目のベリファイ動作で失敗した場合は、図5中のビット線電位Vblに示すように、Loopn2回目に再びプログラム動作を行う。同様に、Loopn1回目、Loopn2回目と連続してベリファイ動作が失敗した場合は、図5中のビット線電位Vblに示すように、プログラム動作及びベリファイ動作をベリファイ動作の結果がパスするまで繰り返す。なお、本実施形態では第1のプログラム動作後のベリファイ動作を2回行っているが、必要に応じて、第1のプログラム動作後のベリファイ動作を3回以上に増やしても良い。上記したように第1の実施形態では、NANDセルに書込みを行う際にプログラム動作毎に書込み電圧を段階的に高くしながらプログラム動作後のベリファイ動作を行うように制御する制御回路5を備えたNANDフラッシュメモリにおいて、制御回路5は、第1のプログラム動作後の2回目以降のベリファイ動作の結果がパスするまでプログラム動作とその後のベリファイ動作を繰り返すように制御する。つまり、第1のプログラム動作後のベリファイ動作を同じベリファイレベルで2回以上行い、ベリファイ動作の2回目以降は第2のプログラム動作の後に行うように制御する。そして、第2のプログラム動作後の第2のベリファイ動作の結果がパスした場合は書込みを終了し、第2のプログラム動作後の第2のベリファイ動作の結果がパスしなかった場合は、ベリファイ動作の結果がパスするまで前記第1のプログラム動作と同様のプログラム動作およびその後のベリファイ動作を繰り返すように制御する。このような制御により、第1のプログラム動作時に回路やプロセスのバラツキに起因してノイズにより狙いの閾値より低い値で書込みが終了した場合でも、第2のベリファイ動作に続く第1のプログラム動作と同様のプログラム動作及びベリファイ動作で適正な閾値に書込みを行うことが可能になる。結果として、図4中に実線で示したようにセルトランジスタの閾値分布幅を改善でき、書込み不良の発生を抑止することができる。第2の実施形態図6は、第2の実施形態に係るNANDフラッシュメモリにおけるプログラム動作及びベリファイ動作を示すタイムチャートである。図6中のビット線電位Vblに示すように、第1の実施形態と同様に、Loopn回目のプログラム動作第1のプログラム動作後に第1のベリファイ動作を行ってパスした場合、Loopn1回のプログラム動作第2のプログラム動作は非選択状態でプログラム動作を行った後に第2のベリファイ動作を行う。この第2のベリファイ動作の結果も第1のベリファイ動作の結果と同様にパスした場合、その後は書込みを行わない。Loopn回目で第1のベリファイ動作の結果がパスしたがLoopn1回目の第2のベリファイ動作で失敗した場合には、図6中のビット線電位Vblに示すように、Loopn2回目で書込みに入る。この時、書き込み電圧はLoopn回目に対して2回ステップアップしているので、次のベリファイ動作の結果はパスする可能性が高い。したがって、本実施形態では、Loopn1回目の第2のベリファイ動作が失敗したセルトランジスタに対しては、Loopn2回目で書込みを行った後はベリファイ動作も行わず、書込みを終了する。上記したように第2の実施形態では、第1の実施形態と同様の効果が得られるほか、第2のベリファイ動作でパスしなかった場合には次のプログラム動作後のベリファイ動作をスキップし、書込みを終了するので、第1の実施形態と比べてベリファイ動作の回数を減らし、書込み速度を上げることができる。第3の実施形態図7は、第3の実施形態に係るNANDフラッシュメモリにおけるプログラム動作及びベリファイ動作を示すタイムチャートである。この実施形態は、書込み時にビット線BLに半選択電圧を印加して半選択書込みを行うことにより、セルトランジスタの閾値分布幅を狭く制御する方法QuickPassWrite、以下、QPWと称するを組み合せ使用した例である。ここで、半選択書込みとは、ビット線BLに0Vと電源電圧付近の電圧例えば3Vの間の中間電圧例えば1Vを印加して書込みを行う方式である。通常の書込みは、書込みを行うビット線BLには0V、書込みを行わないビット線BLには電源電圧程度の例えば3Vを印加するが、QPWでは、書込み時のビット線BLに1V程度の中間電圧を印加して擬似的に書き込み電圧のステップ変化量電圧が小さくなったような効果が得られる。図7中のビット線電位Vblに示すように、Loopn回目のプログラム動作第1のプログラム動作後に、通常のベリファイレベルより低いベリファイロウレベルverifyLowLevelを基準としたベリファイ動作VLを行う。ここで、ベリファイロウレベルは、通常のベリファイレベルよりも、例えば通常書込み時における書き込み電圧のステップ変化量電圧dVpgmの約2分の1程度低い。このベリファイ動作の結果がパスした場合は、Loopn1回目のプログラム動作第2のプログラム動作は、ビット線BLに1V程度を印加し、半選択状態にしてQPWを行う。その後、通常のベリファイレベルを基準として第1のベリファイ動作を行い、第1のベリファイ動作の結果がパスした場合はLoopn2回目のプログラム動作第3のプログラム動作を非選択状態で行った後に通常のベリファイレベルを基準として第2のベリファイ動作を行う。この第2のベリファイ動作の結果も第1のベリファイ動作の結果と同様にパスした場合、その後は書込みを行わない。図7中のビット線電位Vblでは、ベリファイロウレベルでのベリファイ動作VLをパスした後、1回の書込みで第1のベリファイ動作の結果もパスしている例を示したが、第1のベリファイ動作が失敗すれば第2のプログラム動作及び第1のベリファイ動作を第1のベリファイ動作の結果がパスするまで行う。また、Loopn2回目の第2のベリファイ動作が失敗した場合、図7中のビット線電位Vblに示すように、Loopn3回目に半選択書込みを行い、再び第2のベリファイ動作を行う。この第2のベリファイ動作が再び失敗した場合は、プログラム動作半選択書き込み及び第2のベリファイ動作を第2のベリファイ動作がパスするまで繰り返す。図7中のビット線電位blには、1回の追加書込みで第2のベリファイ動作の結果がパスしている例を示したが、実際には第2のベリファイ動作の結果がパスするまでプログラム動作半選択書き込み及び第2のベリファイ動作を何回も繰り返す。上記したように第3の実施形態では、半選択書込みを利用した書込みを行う際に、プログラム動作後のベリファイ動作を、ベリファイロウレベルで1回と、通常のベリファイレベルで2回以上行う。そして、2回目以降のベリファイ動作が失敗したセルは、ノイズの影響により狙いの閾値まで書込まれなかったと考えられ、次の書込みで電界が強くなり書込み速度が速くなって過剰プログラミング状態になってしまうおそれがあるので、次の書込みは半選択書込みを行って書込みを遅くすることにより過剰プログラミングを抑制することができる。第3の実施形態によれば、第1の実施形態と同様の効果が得られるほか、セルトランジスタの閾値分布幅を狭くするための半選択書き込みとノイズ対策の書き込みを組合せることにより、セルトランジスタの閾値分布幅をさらに狭く実現することができる。第4の実施形態図8は、第4の実施形態に係るNANDフラッシュメモリにおけるプログラム動作及びベリファイ動作を示すタイムチャートである。図8中のビット線電位Vblに示すように、第3の実施形態と同様に、Loopn回目のプログラム動作第1のプログラム動作後に前記ベリファイロウレベルを基準としたベリファイ動作を行い、このベリファイ動作の結果がパスした場合、Loopn1回のプログラム動作第2のプログラム動作はビット線BLに1V程度を印加し、半選択にして行う。その後、通常のベリファイレベルを基準とした第1のベリファイ動作を行い、第1のベリファイ動作の結果がパスした場合でも、Loopn2回目のプログラム動作第3のプログラム動作を非選択状態で行った後に同じく通常のベリファイレベルを基準とした第2のベリファイ動作を行う。第2のベリファイの結果も第1のベリファイ動作の結果と同様にパスすれば、その後は書込みを行わない。Loopn回目でベリファイ動作の結果がパスし、Loopn1回目で第1のベリファイ動作の結果がパスし、Loopn2回目の第2のベリファイ動作で失敗した場合には、図8中のビット線電位Vblに示すように、Loopn3回目で半選択書込みに入る。この時、書込み電圧VpgmはLoopn回目に対して2回ステップアップしているので、ベリファイをパスする可能性が高い。したがって、本実施形態では、Loopn2回目の第2のベリファイ動作で失敗したセルトランジスタに対しては、Loopn3回目で半選択書込みを行った後はベリファイ動作も行わず、書込みを終了する。上記したように第4の実施形態では、第3の実施形態と同様の効果が得られるほか、2回目以降のベリファイ動作の結果がパスしなかった場合に次のプログラム動作後のベリファイ動作はスキップし、書込みを終了するので、第3の実施形態と比べて、ベリファイ動作の回数を減らし、書込み速度を上げることができる。図11は、書込み電圧のステップアップとセルトランジスタの閾値の関係の一例を示す特性図である。図12は、書込み電圧のステップアップに対するセルトランジスタの閾値上昇のばらつきにより理想的な閾値分布実線に対して実際の閾値分布破線が変化する広がる様子の一例を示す特性図である。理想的には、図11中に実線で示すように、書込み電圧の段階的な増加に比例してセルトランジスタの閾値が上がっていく。しかし、実際には、図11中に破線で示すように、回路やNANDセルのプロセスバラツキに起因するノイズによって、ステップ毎に速く書込まれたり遅く書込まれたりする。図12に示した特性から分かるように、ある書き込み電圧での書込み時に閾値上昇がステップアップ変化量より小さかった場合は、次に書き込み電圧をステップアップして書込みした場合はセルトランジスタのトンネル酸化膜にかかる電界が強くなるので、閾値上昇がdVpgmより大きく変動する可能性が高い。このような課題を解決する第5の実施形態及び第6の実施形態を以下に説明する。第5の実施形態図9は、第5の実施形態に係るNANDフラッシュメモリにおけるプログラム動作及びベリファイ動作を示すタイムチャートである。図9中のビット線電位Vblに示すように、Loopn回目のプログラム動作後にベリファイ動作を行う。ここで、ベリファイ動作の基準値ベリファイロウレベルは狙いの閾値に対して、例えばステップアップ変化量の2分の1低いレベルに設定する。このベリファイ動作の結果がパスした場合には、Loopn1回目のプログラム動作第1のプログラム動作を行った後に通常のベリファイレベルを基準としたベリファイ動作を行う。このベリファイ動作の結果がベリファイ動作の結果と同様にパスすれば、その後は書込みを行わない。しかし、Loopn回目のベリファイ動作の結果はパスしたがLoopn1回目のベリファイ動作で失敗した場合は、図9中のビット線電位Vblに示すように、ステップアップ変化量より閾値変動が小さく、次のLoopn2回目の書込みで閾値がステップアップ変化量より大きく変動する可能性が高いので、プログラム動作時にビット線BLに半選択電圧例えば1Vを印加して書込みを遅くする。ここでは、Loopn2回目でベリファイがパスしているが、実際には半選択電圧によるプログラム動作及びベリファイ動作をベリファイがパスするまで繰り返す。上記したように第5の実施形態では、通常のベリファイレベルより例えばdVpgmの2分の1低いベリファイロウレベルを設定し、ベリファイロウレベルを基準としたベリファイ動作をパスした次のプログラム動作及びベリファイ動作Vでパスしなかった場合は、次に半選択書込み動作及びベリファイ動作を繰り返す。これにより、セルトランジスタの閾値分布の高電圧側がノイズによって広がってしまう影響を抑制し、図12中に実線で示すような閾値分布を得ることができる。第6の実施形態図10は、第6の実施形態に係るNANDフラッシュメモリにおけるプログラム動作及びベリファイ動作を示すタイムチャートである。図10中のビット線電位Vblに示すように、第5の実施形態と同様に、Loopn回目のプログラム動作後にベリファイ動作を行う。このベリファイ動作の結果がパスした場合には、Loopn1回目のプログラム動作を行った後にベリファイ動作を行う。このベリファイ動作の結果もベリファイ動作と同様にパスすれば、その後は書込みを行わない。これに対して、Loopn回目のベリファイ動作の結果はパスしたがLoopn1回目のベリファイ動作で失敗した場合は、図10中のビット線電位Vblに示すようにLoopn2回目のプログラム動作で書込みが終了する可能性が高いので、Loopn2回目で半選択書込みを行った後にベリファイ動作もスキップして書込みを終了する。上記したように第6の実施形態では、第5の実施形態と同様の効果が得られるほか、ベリファイ動作Vをパスしなかった場合は次に半選択書込みを1回行い、ベリファイ動作をスキップし、書込みを終了するので、第5の実施形態と比べて、書込み速度を上げることができる。次に、上記各実施形態における図3中のセンスアンプデータラッチ3の動作を説明する。第1の実施形態、第2の実施形態の動作まず、データラッチに入力されたデータにしたがってプログラム動作及びベリファイ動作を行う。ベリファイ動作の結果がパスした場合には、フラグとしてデータラッチにデータ0を書込む。次に、データラッチの全てにデータが存在する0データ場合には、プログラム動作をスキップし、ベリファイ動作を行う。ベリファイ動作の結果がパスした場合にはデータラッチを全て1消去にして書き込みを終了し、ベリファイ動作を失敗の場合にはデータラッチにデータ0を書込む。データラッチの全てにデータが無い1データ場合には、それ以上の追加書き込みは行わない。次に、データラッチの全てにデータが存在する場合、第1の実施形態においては、プログラム動作及びベリファイ動作をベリファイ動作の結果がパスするまで行う。一方、第2の実施形態においては、プログラム動作のみを一度行ってデータラッチの全てを1にして終了する。第3の実施形態、第4の実施形態の動作まず、データラッチのデータにしたがってプログラム動作及びベリファイ動作を行う。ベリファイ動作の結果がパスした場合には、フラグとしてデータラッチにデータ0を書込む。次に、データラッチにデータが存在する場合には、ビット線BLに半選択電圧を印加してプログラム動作半選択書込みした後にベリファイ動作を行う。ベリファイ動作の結果がパスした場合には、データラッチを1に消去し、データラッチにデータ0を書込む。次に、データラッチの全てにデータが存在する場合には、プログラム動作をスキップし、ベリファイ動作を行う。ベリファイ動作の結果がパスした場合にはデータラッチを全て1にして書き込みを終了し、ベリファイ動作を失敗した場合にはデータラッチにデータ0を書込む。データラッチの全てにデータが無い場合には、それ以上の追加書き込みは行わない。次に、データラッチの全てにデータが存在する場合、第3の実施形態においては、プログラム動作及びベリファイ動作をベリファイ動作の結果がパスするまで行う。一方、第4の実施形態においては、プログラム動作のみを一度行ってデータラッチの全てを1にして終了する。第5の実施形態、第6の実施形態の動作まず、データラッチのデータにしたがってプログラム動作及びベリファイ動作を行う。ベリファイをパスした場合には、フラグとしてデータラッチにデータ0を書込む。次に、データラッチにデータが存在する場合には、プログラム動作及びベリファイ動作を行う。ベリファイVをパスした場合には、データラッチを全て1にして書き込みを終了し、ベリファイVが失敗の場合にはデータラッチにデータ0を書込む。データラッチの全てにデータが無い場合には、それ以上の追加書き込みは行わない。次に、データラッチの全てにデータが存在する場合、第5の実施形態においては、プログラム動作及びベリファイ動作Vをベリファイ動作Vの結果がパスするまで行う。一方、第6の実施形態については、プログラム動作のみを一度行ってデータラッチの全てを1にして終了する。なお、前述した第1、第2、第3、及び第4の実施形態における動作は、図2において複数本のビット線BLで1つのセンスアンプデータラッチ3を共有する構成に変更した場合でも可能である。なお、上記各実施形態では、本発明をNANDフラッシュメモリに実施した場合について説明したが、本発明はNOR型フラッシュメモリ等の他の不揮発性半導体メモリにも適用できる場合もあり、本発明の主旨を逸脱しない範囲で適宜変更して実施することができる。本発明の幾つかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。