"半導体装置であって、行列状に配列され、各々が閾値電圧のレベル変化によってデータを記憶する複数のメモリセルを含むメモリアレイを備え、各前記メモリセルは、第1および第2の導通電極とゲート電極とを有し、各前記メモリセルの閾値電圧は、前記第1および第2の導通電極間にプログラム電流を流すとともに前記ゲート電極にプログラム電圧を印加するプログラム動作が複数回実行されることによって、所定のプログラムベリファイ電圧に到達し、前記半導体装置は、さらに、プログラム対象のメモリセルに対して複数回実行される前記プログラム動作ごとに、閾値電圧が前記プログラムベリファイ電圧に到達したか否かを判定するベリファイ回路と、前記プログラム電流の大きさを調整する電流調整回路とを備え、前記電流調整回路は、プログラム対象の複数のメモリセルのうち、前記ベリファイ回路によって閾値電圧が前記プログラムベリファイ電圧に達していないと判定されたメモリセルには第1の電流値のプログラム電流を流し、閾値電圧が前記プログラムベリファイ電圧に達したと判定されたメモリセルには前記第1の電流値よりも小さい第2の電流値のプログラム電流を流す、半導体装置。前記半導体装置は、さらに、メモリセル行にそれぞれ対応して設けられ、各々が、対応のメモリセル行に含まれた各メモリセルの前記第1の導通電極と接続される複数の第1配線と、メモリセル列にそれぞれ対応して設けられ、各々が、対応のメモリセル列に含まれた各メモリセルの前記第2の導通電極と接続される複数の第2配線と、各前記メモリセルのプログラム動作時に、前記複数の第1配線に所定のドライブ電圧を印加するドライブ回路とを備え、前記電流調整回路は、前記複数の第2配線に接続され、プログラム対象のメモリセルに前記第1または第2の電流値のプログラム電流が流れるように、前記複数の第2配線の各々に流れる電流値を調整する、請求項1に記載の半導体装置。前記電流調整回路は、1または複数のメモリセル列ごとに設けられ、各々が、対応するメモリセル列のプログラム対象のメモリセルについての前記ベリファイ回路による判定結果を保持する複数のラッチ回路と、1または複数のメモリセル列ごとに、前記複数のラッチ回路にそれぞれ対応して設けられた複数の電流源回路とを含み、各前記電流源回路は、対応のメモリセル列の第2配線と接続され、対応のメモリセル列に含まれたメモリセルのプログラム動作時に、対応のラッチ回路の保持データによらずに定電流が流れる第1のトランジスタと、前記第1のトランジスタと並列に接続され、対応のメモリセル列に含まれたメモリセルのプログラム動作時に、対応するラッチ回路の保持データが変化するまでの間、定電流が流れる第2のトランジスタとを含む、請求項2に記載の半導体装置。前記メモリアレイを構成する複数のメモリセルは、複数列ごとに複数のグループに分割され、前記半導体装置は、さらに、前記グループごとにメモリセル行にそれぞれ対応して設けられ、各々が、対応のメモリセル行に含まれた各メモリセルの前記第1の導通電極と接続される複数の第1配線と、前記グループごとにメモリセル列にそれぞれ対応して設けられ、各々が、対応のメモリセル列に含まれた各メモリセルの前記第2の導通電極と接続される複数の第2配線と、前記複数のグループにそれぞれ対応して設けられ、各々が、対応のグループに含まれたメモリセルのプログラム動作時に、対応のグループの前記複数の第1配線に所定のドライブ電圧を印加する複数のドライブ回路とを備え、前記電流調整回路は、各前記グループの前記複数の第2配線に接続され、プログラム対象のメモリセルに前記第1または第2の電流値のプログラム電流が流れるように、各前記グループの前記複数の第2配線の各々に流れる電流値を調整し、前記半導体装置は、さらに、前記ベリファイ回路の判定結果に基づいて、前記グループごとに、閾値電圧が前記プログラムベリファイ電圧に達していないメモリセルの数であるプログラム未完了セル数をカウントするカウンタと、各前記ドライブ回路から対応のグループへのドライブ電圧の供給を制御する制御回路とを備え、前記制御回路は、1または複数のドライブ回路ごとに順次ドライブ電圧を供給させることによって、同時に動作するドライブ回路の数を制限し、前記プログラム未完了セル数が減少するにつれて、同時に動作するドライブ回路の数を増加させる、請求項1に記載の半導体装置。各前記メモリセルは、窒化シリコン膜を有し、プログラム動作時に前記窒化シリコン膜に電荷が捕獲されることによって閾値電圧のレベルが変化する、請求項1~4のいずれか1項に記載の半導体装置。上記の特開2004-022112号公報特許文献1に記載の技術は、浮遊ゲート型の不揮発性メモリのプログラミング工程を高速化するにはある程度有効であると考えられる。しかしながら、窒化シリコン膜などを用いた電荷捕獲型の不揮発性メモリにこの技術は適用できない。なぜなら、窒化シリコン膜にトラップした電荷は、時間の経過とともにデトラップする性質があるが、特に電荷注入後の短時間の間でのデトラップの割合が大きいからである。したがって、プログラムベリファイ時に、閾値電圧がプログラムベリファイ電圧に達したと判定したメモリセルについて、その後のプログラムパルスの印加をやめてしまうと、閾値電圧がプログラムベリファイ電圧以下まで低下してしまう。このようなプログラムパルスの印加直後のデトラップによる閾値電圧の低下という問題は、電荷捕獲型の場合ほど顕著でないにしても、浮遊ゲート型の場合にも起こり得る問題である。したがって、この発明の目的は、電荷捕獲型の場合であっても高速にプログラムすることが可能な不揮発性メモリを備えた半導体装置を提供することである。この発明の実施の一形態による半導体装置は、メモリアレイと、ベリファイ回路と、電流調整回路とを備える。メモリアレイは、行列状に配列され、各々が閾値電圧のレベル変化によってデータを記憶する複数のメモリセルを含む。各メモリセルは、第1および第2の導通電極とゲート電極とを有する。各メモリセルの閾値電圧は、第1および第2の導通電極間にプログラム電流を流すとともにゲート電極にプログラム電圧を印加するプログラム動作が複数回実行されることによって、所定のプログラムベリファイ電圧に到達する。ベリファイ回路は、プログラム対象のメモリセルに対して複数回実行されるプログラム動作ごとに、閾値電圧がプログラムベリファイ電圧に到達したか否かを判定する。電流調整回路は、プログラム電流の大きさを調整する。電流調整回路は、プログラム対象の複数のメモリセルのうち、ベリファイ回路によって閾値電圧がプログラムベリファイ電圧に達していないと判定されたメモリセルには第1の電流値のプログラム電流を流し、閾値電圧がプログラムベリファイ電圧に達したと判定されたメモリセルには第1の電流値よりも小さい第2の電流値のプログラム電流を流す。上記の実施の形態によれば、閾値電圧がプログラムベリファイ電圧に達したと判定されたメモリセルには第1の電流値よりも小さい第2の電流値のプログラム電流を流すことによって、閾値電圧の低下を抑制し、これによって、所定のプログラムベリファイ電圧以上の閾値電圧となるまで従来よりも高速にプログラムすることができる。以下、この発明の実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。<実施の形態1>[半導体装置の構成]図1は、この発明の実施の形態1による半導体装置の構成を示すブロック図である。図1には、半導体装置の一例としてマイクロコンピュータチップ1が示されている。マイクロコンピュータチップ1は、CPUCentralProcessingUnit2と、RAMRandomAccessMemory3と、不揮発性メモリ装置4と、周辺回路5と、インターフェース回路7と、これらを相互に接続するデータバス8と、電源回路6とを含む。電源回路6は、マイクロコンピュータチップ1の外部から受けた外部電源電圧VCCに基づいて内部電源電圧VDDを生成する。内部電源電圧VDDは、マイクロコンピュータチップ1の各部に供給される図1では、不揮発性メモリ装置4への供給のみが代表的に示されている。不揮発性メモリ装置4は、EEPROMElectricallyErasableandProgrammableReadonlyMemoryやフラッシュメモリなどの半導体記憶装置である。これらの半導体記憶装置の各メモリセルは、ゲート電極とチャネル層との間に電荷蓄積部を有する。電荷蓄積部に蓄積された電荷によってメモリセルの閾値電圧が変化し、これによって1、0の情報を記憶することができる。電荷蓄積部として、一般に、多結晶シリコン膜で形成された浮遊ゲートフローティングゲートや、窒化ケイ素膜などが用いられる。窒化ケイ素膜は、膜中に分散して存在する捕獲準位トラップレベルによって電荷を蓄積する。この実施の形態では、窒化ケイ素膜を電荷蓄積部として用いた例について説明する。次に、メモリセルの具体的構成をさらに詳しく説明する。[メモリセルの構成]図2は、メモリセルMCの構成を示す図である。図2Aには、メモリセルMCの断面図が模式的に示され、図2Bには、メモリセルMCの回路図記号が示される。図2A,Bで対応する部分には同一の参照符号を付す。図2A,Bを参照して、メモリセルMCは、コントロールゲート21、窒化シリコン膜22、メモリゲート23、ソース24、およびドレイン25を含む。コントロールゲート21は、P型シリコン基板20の表面上に絶縁層図示せずを介して形成される。窒化シリコン膜22は、コントロールゲート21の側壁に酸化シリコン膜図示せず、窒化シリコン膜22、および酸化シリコン膜図示せずからなるONOOxideNitrideOxide膜として形成される。ONO膜上には、サイドウォール構造のメモリゲート23が形成される。ソース24およびドレイン25は、ゲート21,23の両側にN型不純物を注入することによってそれぞれ形成される。メモリセルMCが複数配列されたメモリアレイには、各々が、メモリセル行に対応して行方向Xに延在する、メモリゲート線MGL、コントロールゲート線CGL、およびソース線SLが設けられる。メモリセル列に対応して列方向Yに延在するビット線BLが設けられる。各メモリセルMCにおいて、メモリゲート23は、対応のメモリゲート線MGLに接続される。コントロールゲート21は、対応のコントロールゲート線CGLに接続される。ソース24は、対応のソース線SLに接続される。ドレイン25は、対応のビット線BLに接続される。[メモリセルの記憶動作]各メモリセルMCには固有のアドレスが割り当てられ、各メモリセルMCは閾値電圧のレベル変化によって1ビットのデータを記憶する。図3は、メモリセルMCの記憶動作を示す図である。図3Aにはプログラムパルス印加動作時の状態が示され、図3Bには消去パルス印加動作時の状態が示され、図3Cには読出動作時の状態が示され、図3Dにはプログラムベリファイ動作時の状態が示される。図3Aを参照して、プログラムパルス印加動作時は、メモリゲート23に6.4~11Vの間の選択された電圧プログラム電圧と称するが印加され、コントロールゲート21には1.0Vが印加され、ソース24には3.2~7.0Vの間の選択された電圧が印加され、ドレイン25には0.8Vが印加される。これにより、ソースサイド注入SSI:SourceSideInjection方式により、ホットエレクトロンが窒化シリコン膜22に注入されてメモリセルMCの閾値電圧が高くなる。このとき、ソースドレイン間に流れる電流をプログラム電流と称する。プログラムパルス印加動作は、メモリセルMCの閾値電圧が所定のプログラムベリファイ電圧PVよりも高くなるまで繰り返し行なわれる。プログラムされたメモリセルMCには、データ0と1のうちのたとえば1が記憶される0と決めてもよいが、この明細書では1とする。なお、メモリゲート23の電圧は、メモリセルMCの閾値電圧が高くなり難い場合に正側に高いレベルに設定される。ソース24の電圧は、絶縁破壊が生じないように、メモリゲート23の電圧に応じて設定される。図3Bを参照して、消去パルス印加動作時は、メモリゲート23に-3.3~-8Vの間の選択された電圧が印加され、コントロールゲート21には0Vが印加され、ソース24には3.2~7.0Vが印加され、ドレイン25はOPEN状態にされる。これにより、バンド間トンネルBTBT:BandToBandTunneling方式により、ホットホールが窒化シリコン膜22に注入されてメモリセルMCの閾値電圧が低くなる。消去パルス印加動作は、メモリセルMCの閾値電圧が所定の消去ベリファイ電圧EVよりも低くなるまで繰り返し行なわれる。消去されたメモリセルMCには、データ0と1のうちのたとえば0が記憶される。なお、メモリゲート23の電圧は、メモリセルMCの閾値電圧が低くなり難い場合に負側に高いレベルに設定される。ソース24の電圧は、絶縁破壊が生じないように、メモリゲート23の電圧に応じて設定される。図3Cを参照して、読出動作時は、メモリゲート23およびソース24に0Vが印加され、コントロールゲート21およびドレイン25に1.5Vが印加され、ドレイン25とソース24の間に流れる電流Idが閾値電流よりも大きいか否かが判定される。電流Idが閾値電流よりも大きい場合は、メモリセルMCの閾値電圧が低いのでメモリセルMCの記憶データは0であると判定される。逆に、電流Idが閾値電流よりも小さい場合は、メモリセルMCの閾値電圧が高いのでメモリセルMCの記憶データは1であると判定される。図3Dを参照して、プログラムベリファイ動作時は、メモリゲート23にプログラムベリファイ電圧PVが印加され、ソース24に0Vが印加され、コントロールゲート21およびドレイン25に1.5Vが印加され、ドレイン25とソース24の間に流れる電流Idが閾値電流よりも大きいか否かが判定される。電流Idが閾値電流よりも大きい場合は、メモリセルMCの閾値電圧がプログラムベリファイ電圧PVよりも低いので、プログラムは完了していないと判定される。逆に、電流Idが閾値電流よりも小さい場合は、メモリセルMCの閾値電圧がプログラムベリファイ電圧PVよりも高いので、プログラム完了したと判定される。消去ベリファイ動作時には、図3Dにおいて、メモリゲート23には、プログラムベリファイ電圧PVに代えて消去ベリファイ電圧EVが印加される。その他箇所に印加される電圧は図3Dの場合と同じである。ドレイン25とソース24の間に流れる電流Idが閾値電流よりも大きい場合は、メモリセルMCの閾値電圧が消去ベリファイ電圧EVよりも低いので、消去は完了したと判定される。逆に、電流Idが閾値電流よりも小さい場合は、メモリセルMCの閾値電圧が消去ベリファイ電圧EVよりも高いので、消去は完了していないと判定される。[不揮発性メモリ装置の構成]図4は、図1の不揮発性メモリ装置4の全体構成を示すブロック図である。図4を参照して、不揮発性メモリ装置4は、メモリアレイ30、入出力回路31、ワード線デコーダ部35、コントロールゲート線ドライバ部36、メモリゲート線ドライバ部37、ソース線ドライバ部38、カラム系選択回路39、制御回路32、電源回路33、および電源切替回路34を含む。メモリアレイ30には、図2で説明したメモリセルMCが行列状に多数配列される。この実施の形態では、ビット線は、複数の主ビット線BLと副ビット線SBLとを含む。各主ビット線BL図5の主ビット線BL0~BL2047に対応し、図6の主ビット線BL0~BL255に対応するには、スイッチ用のトランジスタQC図6のトランジスタQC0A,QC0B,...,QC255A,QC255Bに対応するを介して複数の副ビット線SBL図6の副ビット線BL0A,BL0B,...,BL255A,BL255Bに対応するが接続される。メモリセルMCのドレイン25は、対応の副ビット線SBLに接続される。入出力回路31は、不揮発性メモリ装置4の外部たとえば、図1のCPU2から、コマンド、アドレス、および書込データなどを受けるとともに、読出データを外部に出力する。ワード線デコーダ部35は、入出力回路31を介して受けた行アドレス信号をデコードすることによって、メモリアレイの選択行を指定する信号を出力する。コントロールゲート線ドライバ部36は、ワード線デコーダ部35によって指定された選択行に対応するコントロールゲート線CGLに、電源切替回路34を介して受けた所定の動作電圧を供給する。メモリゲート線ドライバ部37は、ワード線デコーダ部35によって指定された選択行に対応するメモリゲート線MGLに、電源切替回路34を介して受けた所定の動作電圧を供給する。ソース線ドライバ部38は、ソース線SLに、接地電圧または電源切替回路34を介して受けた所定の動作電圧を供給する。なお、ソース線ドライバ部38は、スイッチ用のトランジスタQA図5のQA0~QA31に対応するを介在してソース線SL図6のSL0_0~SL0_15に対応する接続される。カラム系選択回路39には、入出力回路31を介して受けた列アドレス信号をデコードするカラムデコーダ回路が設けられる。カラム系選択回路39は、カラムデコーダ回路によるデコード結果に基づいて、選択されたビット線BL選択列に対応するビット線BLに、接地電圧や、電源切替回路34を介して受けた所定の動作電圧を供給する。カラム系選択回路39には、さらに、選択されたビット線BLを介して読出対象のメモリセルMCに流れる電流を検知する読出用センスアンプSA:SenseAmplifier回路や、選択されたビット線BLを介してプログラム対象のメモリセルMCに流れる電流を検知するベリファイ用センスアンプ回路などが含まれる。制御回路32は、図1のCPU2などのホストからの指令に従って、プログラムパルス印加動作、消去パルス印加動作、読出動作、プログラムベリファイ動作、および消去ベリファイ動作などの各動作モードを実行する。制御回路32は、さらに、各動作モードに必要な動作電圧が各ドライバ部に供給されるように、電源回路33および電源切替回路34を制御する。電源回路33は、図1の電源回路6で生成された内部電源電圧VDDを昇圧または降圧することによって、各動作モードに応じた種々の大きさの動作電圧を生成するチャージポンプ回路を含む。電源切替回路34は、電源回路33で生成された種々の大きさ動作電圧を受けて、各動作モードに応じて、供給する動作電圧の大きさや供給先を切替えるスイッチ群であるディストリビュータとも称する。[メモリアレイの構成]図5は、図4のメモリアレイ30の構成を模式的に示した平面図である。図5には、メモリアレイ30周辺の各ドライバ部も併せて示される。図5のメモリアレイ30では、一例として、図2のメモリセルMCが64行4096列に配列された例が示される。メモリアレイ30は、各々が16行512列のメモリセルMCからなる32個のメモリブロックMB0~MB31に分割される。したがって、メモリアレイ30内で、メモリブロックMB0~MB31は4行8列に配列される図5では図解を容易にするために、8つのメモリブロックが代表的に示されている。コントロールゲート線ドライバ部36は、メモリアレイ30のX方向の中央に配置され、図の左側のコントロールゲート線CGL0A~CGL63AをそれぞれドライブするドライバCGD0A~CGD63Aと、図の右側のコントロールゲート線CGL0B~CGL63BをそれぞれドライブするドライバCGD0B~CGD63Bとを含む。コントロールゲート線CGL0A~CGL15AはメモリブロックMB0~MB3で共通に用いられ、コントロールゲート線CGL16A~CGL31AはメモリブロックMB8~MB11で共通に用いられ、コントロールゲート線CGL32A~CGL47AはメモリブロックMB16~MB19で共通に用いられ、コントロールゲート線CGL48A~CGL63AはメモリブロックMB24~MB27で共通に用いられる。同様に、コントロールゲート線CGL0B~CGL15BはメモリブロックMB4~MB7で共通に用いられ、コントロールゲート線CGL16B~CGL31BはメモリブロックMB12~MB15で共通に用いられ、コントロールゲート線CGL32B~CGL47BはメモリブロックMB20~MB23で共通に用いられ、コントロールゲート線CGL48B~CGL63BはメモリブロックMB28~MB31で共通に用いられる。メモリゲート線ドライバ部37は、ドライバMGD0~MGD15を含む。ドライバMGDiただし、0≦i≦15は、メモリゲート線MGLi,MGLi16,MGLi32,MGLi48をドライブする。メモリゲート線MGL0~MGL15はメモリブロックMB0~MB7で共通に用いられ、メモリゲート線MGL16~MGL31はメモリブロックMB8~MB15で共通に用いられ、メモリゲート線MGL32~MGL47はメモリブロックMB16~MB23で共通に用いられ、メモリゲート線MGL48~MGL63はメモリブロックMB24~MB31で共通に用いられる。ソース線ドライバ部3838A,38Bは、メモリブロックMB0~MB31のソース線をそれぞれドライブするドライバSLD0~SLD31を含む。ドライバSLD0~SLD31にそれぞれ対応してスイッチ用のNMOSNegativechannelMetalOxideSemiconductorトランジスタQA0~QA31が設けられる。各NMOSトランジスタQAは、対応のドライバSLDとそのドライバに対応するメモリブロックMBとの間の伝送経路に挿入される。NMOSトランジスタQA0~QA31は、バッファSSDから出力される信号に応じてオンまたはオフに切替わる。カラム系選択回路39からは、主ビット線BL0~BL2047が引き出される。主ビット線BLは、メモリアレイ30の2列ごとに1本ずつ設けられる。図6は、図5のメモリブロックMB0の構成を示す回路図である。他のメモリブロックMB1~MB31も同様の構成であるので、以下では、メモリブロックMB0の構成を代表とし、特にこのメモリブロックMB0に設けられたソース線および副ビット線について説明する。図6を参照して、メモリブロックMB0のメモリセル行にそれぞれ対応してソース線SL0_0~SL0_15が設けられる。ソース線SL0_0~SL0_15の各一端は、Y方向に延在する配線SL0_busに接続される。配線SL0_busの一端はNMOSトランジスタQA0を介してソース線ドライバSLD0に接続されるとともに、スイッチ用のNMOSトランジスタQB0を介して接地ノードVSSに接続される。各メモリセルMCのソースに所定の正の動作電圧を印加する場合は、NMOSトランジスタQA0がオン状態になり、NMOSトランジスタQB0はオフ状態になる。各メモリセルMCのソースに接地電圧を印加する場合は、NMOSトランジスタQA0がオフ状態になり、NMOSトランジスタQB0はオン状態になる。メモリブロックMB0のメモリセル列にそれぞれ対応して、副ビット線BL0A,BL0B,BL1A,BL1B,...,BL255A,BL255Bが設けられる。副ビット線BL0A,BL0Bの一端は、スイッチ用のNMOSトランジスタQC0A,QC0Bをそれぞれ介して主ビット線BL0に接続される。副ビット線BL0A,BL0Bの他端は、PMOSPositivechannelMetalOxideSemiconductorトランジスタQD0A,QD0Bを介して電源ノードVDDに接続される。PMOSトランジスタQD0A,QD0Bは、ゲートに所定のバイアス電圧が与えられることによって定電流源として用いられる。他の副ビット線BLA,BLBについても同じであり、一端はスイッチ用のトランジスタを介して対応の主ビット線BLに接続され、他端は定電流源用のPMOSトランジスタを介して電源ノードVDDに接続される。[カラム系選択回路の構成]図7は、図5、図6のカラム系選択回路39のうちデータのプログラムに関係する部分を示した図である。図7では、図5のメモリブロックMB0~MB31のうちの1つを代表したメモリブロックMBにおいて、選択列の副ビット線BLA,BLBと選択行のソース線SLとに接続されたメモリセルMC0,MC1が示されている。既に説明したように、SSIソースサイドインジェクション方式によるデータ書込であるので、チャージポンプ33で作成された高電圧が、ディストリビュータ41およびソース線ドライバSLDを介して、ソース線SLに接続されたメモリセルMC0,MC1に供給される。副ビット線BLABLBの一端は、PMOSトランジスタQDA,QDBを介して電源ノードVDDと接続される。既に説明したようにPMOSトランジスタQDA,QDBは、そのゲートに所定の電圧が与えられることによって電流I1を流す定電流源として用いられる。副ビット線BLABLBの他端は、スイッチ用のNMOSトランジスタQCA,QCBをそれぞれ介して主ビット線BLと接続される。NMOSトランジスタQCA,QCBは選択的にオン状態になるように制御される。図7の場合には、NMOSトランジスタQCAがオン状態であり、NMOSトランジスタQCBがオフ状態であるとする。これによって、副ビット線BLAに接続されたメモリセルMC0にはプログラム電流I2が流れるが、副ビット線BLBに接続されたメモリセルMC1にはプログラム電流が流れない。すなわち、メモリセルMC0がプログラム対象として選択されたことになる。主ビット線BLは、さらに、カラム系選択回路39に接続される。カラム系選択回路39は、データのプログラムに関係する構成要素として、セレクタ51と、ベリファイ用センスアンプ50と、電流調整回路52とを含む。セレクタ51およびベリファイ用センスアンプ50は、複数の主ビット線BLごとにたとえば16本の主ビット線BLごとに設けられる。この場合、セレクタ51によって選択された主ビット線BLに、ベリファイ用センスアンプ50が接続される。ベリファイ動作時には、ソース線が接地電圧にされ、プログラム対象のメモリセルのドレインが副ビット線BLAおよび主ビット線BLを順に経由してベリファイ用センスアンプ50に接続される。ベリファイ用センスアンプ50は、接続されたメモリセルが電流を流すか流さないかでベリファイのPass/Failを判定する。通常、ゲート酸化膜へのストレスによって信頼性が悪化しないようにするために、プログラムパルス印加の初発目から最大電圧を印加するのではなく、パルス印加ごとにベリファイ動作を挟みながらプログラムパルスの電圧レベルを徐々に上げる。ベリファイの結果がFailのときは、再度プログラムパルスが印加される。すなわち、プログラムパルス書込パルスを印加した後にベリファイを実行するというステップを繰返すことによって一通りのプログラムが完了する。電流調整回路52は、プログラムパルス印加動作時に主ビット線BLを流れる電流量を調整する。電流調整回路52は、書込用ラッチ回路53、ベリファイ用ラッチ回路54、ANDゲート55、および電流切替回路60を含む。これらの構成要素は、各主ビット線BLに個別に対応して設けられる。書込用ラッチ回路53は、プログラム時に書込データを保持するための回路である。具体的には、データを書込む書込データ1場合にはハイレベルHレベルのデータが保持され、データを書込まない書込データ0場合にはローレベルLレベルのデータが保持される。ベリファイ用ラッチ回路54は、対応のビット線BLに接続されたプログラム対象のメモリセルMCについて、ベリファイ用センスアンプ50の判定結果を保持するための回路である。具体的には、プログラム開始前の初期状態にはHレベルのデータが保持され、ベリファイがPassした後にはLレベルのデータが保持される。電流切替回路60は、スイッチ用のNMOSトランジスタ63と、書込阻止電流生成部80と、第1の書込電流生成部81と、第2の書込電流生成部82とを含む。NMOSトランジスタ63のドレインは、ノードND1を介してビット線BLと接続される。NMOSトランジスタ63は、ソース線SLに接続されたNMOSトランジスタQAとともに、プログラムパルスの印加を開始および終了するためのスイッチとして用いられる。プログラム時には、NMOSトランジスタQA,63がオン状態になることによって、選択セルMC0にプログラム電流I2が流れる。書込阻止電流生成部80は、ノードND1と電源ノードVDDとの間に接続される。書込阻止電流生成部80は、選択セルMC0にデータを書込まない書込データ0場合に、副ビット線BLA,BLBの一端にそれぞれ接続されたPMOSトランジスタQDA,QDBの一方が生成する定電流I1と大きさが等しく反対方向の電流I6を生成して、主ビット線BLに供給する。この結果、ビット線BLに流れる電流I3と選択セルMC0のチャネルに流れる電流I2とが0になるので、書込電流が阻止される。より詳細には、書込阻止電流生成部80は、電源ノードVDDとノードND1との間に直列に接続されたPMOSトランジスタ61,62を含む。PMOSトランジスタ61は、ゲートに所定の電圧が印加されることによって、定電流I6を流す定電流源として用いられる。PMOSトランジスタ62は、ゲートに入力された書込用ラッチ回路53の出力に応じてオンまたはオフが切替わるスイッチとして用いられる。書込用ラッチ回路53の出力がHレベル書込データ1のとき、PMOSトランジスタ62がオフ状態になる。書込用ラッチ回路53の出力がLレベル書込データ0のとき、PMOSトランジスタ62がオン状態になることによって、書込電流が阻止される。第1の書込電流生成部81は、スイッチ用のNMOSトランジスタ63のソースノードND2と接地ノードVSSとの間に接続される。第1の書込電流生成部81は、選択セルMC0にデータを書込む書込データ1場合に、PMOSトランジスタQDA,QDBの一方が生成する定電流I1と同方向の電流I4を生成する。より詳細には、第1の書込電流生成部81は、ノードND2と接地ノードとの間に直列に接続されたNMOSトランジスタ64,65を含む。NMOSトランジスタ64は、ゲートに入力された書込用ラッチ回路53の出力に応じてオンまたはオフが切替わるスイッチとして用いられる。書込用ラッチ回路53の出力がHレベル書込データ1のとき、NMOSトランジスタ64がオン状態になることによって書込電流が流れる。書込用ラッチ回路53の出力がLレベル書込データ0のとき、NMOSトランジスタ64はオフ状態になる。NMOSトランジスタ65は、ゲートに所定の電圧が印加されることによって、定電流I4を流す定電流源として用いられる。第2の書込電流生成部82は、スイッチ用のNMOSトランジスタ63のソースノードND2と接地ノードVSSとの間に、第1の書込電流生成部81と並列に接続される。第2の書込電流生成部82は、選択セルMC0にデータを書込む書込データ1場合であり、かつ、ベリファイ結果がPassになる前に、PMOSトランジスタQDA,QDBの一方が生成する定電流I1と同方向の電流I5を生成する。ベリファイ結果がPassになった後には、第2の書込電流生成部82が生成する電流は0になる。より詳細には、第2の書込電流生成部82は、ノードND2と接地ノードとの間に直列に接続されたNMOSトランジスタ66,67を含む。NMOSトランジスタ66は、スイッチ用のトランジスタとして用いられる。NMOSトランジスタ66のゲートには、書込用ラッチ回路53の出力とベリファイ用ラッチ回路54の出力との論理積ANDゲート55の出力信号が入力される。したがって、NMOSトランジスタ66は、メモリセルMC0に書込データ1を書込む場合には、書込み前の初期状態ではオン状態になり、ベリファイの結果がPassになった後はオフ状態になる。メモリセルMC0に書込データ0を書込む場合には、NMOSトランジスタ66はオフ状態になる。NMOSトランジスタ67は、ゲートに所定の電圧が印加されることによって、定電流I5を流す定電流源として用いられる。以上をまとめると、書込用ラッチ回路53およびベリファイ用ラッチ回路に保持されたデータに応じて、スイッチ用のトランジスタ62,64,66の各々がオン状態になるかオフ状態になるか、すなわち、電流切替回路60の動作が決まる。具体的には以下のとおりである。まず、書込用ラッチ回路53に書込データ0が保持されている場合には、PMOSトランジスタ62がオン状態になり、NMOSトランジスタ64,66がオフ状態になるので、電流切替回路60は、主ビット線BLをVDD側にチャージして書込電流が流れるのを阻止する。書込用ラッチ回路53に書込データ1が保持され、かつ、ベリファイ用ラッチにデータ1が保持されている場合ベリファイがPassする前には、PMOSトランジスタ62がオフ状態になり、NMOSトランジスタ64,66がオン状態になる。したがって、電流切替回路60は、主ビット線BLを接地VSS側にチャージするすなわち、主ビット線BLから電流を引き抜く。この結果、主ビット線BLには、I4I5の電流が流れ、選択セルMC0にはI4I5-I1の電流I2が流れる強書込。書込用ラッチ回路53に書込データ1が保持され、かつ、ベリファイ用ラッチにデータ0が保持されている場合ベリファイがPassした後には、PMOSトランジスタ62およびNMOSトランジスタ66がオフ状態になり、NMOSトランジスタ64がオン状態になる。したがって、電流切替回路60は、主ビット線BLを接地VSS側にチャージ、すなわち、主ビット線BLから電流を引き抜く。ただし、この場合に主ビット線BLに流れる電流はI4となり、選択セルMC0に流れる電流I2はI4-I1となり、ベリファイがPassする前より小さい弱書込。上記の電流I4,I5,I6の具体的な設定値の例は図9で説明する。[従来のプログラム方法の問題点]以下では、上記の構成によるカラム系選択回路39を用いない、従来のプログラム方法による問題点について説明する。図8は、消去状態とプログラム状態のときの閾値電圧分布を示す図である。図8Aを参照して、閾値電圧の違いによってデータを記憶する場合、データ0を記憶するときには閾値電圧が消去ベリファイ電圧EV以下になるようにする。この結果、データ0を記憶したメモリセルの閾値電圧は消去分布ERS分布に含まれる。データ1を記憶するときには閾値電圧がプログラムベリファイ電圧PV以上になるようにする。この結果、データ1を記憶したメモリセルの閾値電圧はプログラム分布PRG分布に含まれる。消去ベリファイ電圧EVとプログラムベリファイ電圧PVとの電圧差VDは、データ保証期間などを考慮して決定される。図8Bを参照して、まず、プログラム対象の全メモリセルがプログラムベリファイをPassするまで、全メモリセルにプログラムパルスを印加する場合の問題点について説明する。この場合、最初にプログラムベリファイをPassしたメモリセル図8Bの参照符号48に対しては、ゲート酸化膜に過剰ストレスが印加されることになる。別の問題としてプログラム速度の低下が挙げられる。ホットエレクトロン注入による書込方式では、プログラム時にはプログラム電流を流す必要があるが。電流経路の寄生抵抗によって電圧ドロップIRドロップが生じる。電圧ドロップが生じると設定していた電圧値より低い電圧値しかメモリセルに印加できなくなるため、プログラムが遅いメモリセル図8Bの参照符号49は、なかなかプログラムが完了せずに、チップ全体としてプログラム速度が低下する原因となる。一方、プログラムベリファイをPassしたメモリセルをマスクし、以降のプログラムパルスを印加しない手法もあるが、この手法は窒化膜系のトラップメモリには使用できない。なぜなら、PRGパルス印加後、短時間でのデトラップがあるため、一度プログラムベリファイPassしたメモリセルをマスクすると、そのメモリセルの閾値電圧はプログラムベリファイ電圧PV以下まで閾値電圧がシフトするからである。[実施の形態1の場合のプログラム時の動作]実施の形態1による不揮発性メモリ装置の場合には、上述した問題点を解決できる。以下、実施の形態1の場合のプログラム時の動作について具体的に説明する。図9は、プログラムパルス印加動作時にメモリセルMCに流れる電流をまとめた表を示した図である。図9では、図7の定電流源用のトランジスタQDA,QDBに流れる電流I1を3μAに設定し、定電流源用のトランジスタ65に流れる電流I4を3.5μAに設定し、定電流源用のトランジスタ67に流れる電流I5を1.5μAに設定し、定電流源用のトランジスタ61に流れる電流I6を3μAに設定した場合が示される。この場合、書込用ラッチ回路53およびベリファイ用ラッチ回路54の状態に応じてメモリセルには下記のような電流が流れる。1書込対象セルの初期化後で、前パルス印加後のベリファイ結果がFailのとき書込用ラッチ回路53の出力...Hベリファイ用ラッチ回路54の出力...Hよって、書込用電流源トランジスタ65...活性書込用電流源トランジスタ67...活性書込電流I4I5の強書込でパルスが印加されるので、書込対象のメモリセルに流れるプログラム電流書込電流I2は、I3-I1=I4I5-I1=2μAになる。2前パルス印加後のベリファイ結果がPassのとき書込用ラッチ回路53の出力...Hベリファイ用ラッチ回路54の出力...Lよって、書込用電流源トランジスタ65...活性書込用電流源トランジスタ67...非活性書込電流I4のみの弱書込でパルスが印加されるので、書込対象のメモリセルに流れるプログラム電流I2は、I3-I1=I4-I1=0.5μAになる。3非書込対象セル書込用ラッチ回路53の出力...Lベリファイ用ラッチ回路54の出力...Hよって、書込用電流源トランジスタ65...非活性書込用電流源トランジスタ67...非活性すなわち、非書込対象のメモリセルに流れるプログラム電流I2は0になり非書込状態になる。このように、書込用電流源を、通常書込用と弱書込用との2種類に切替可能にすることにより、ベリファイ結果に応じて書込対象のメモリセルごとに書込電流を変化させることができる。すなわち、プログラムベリファイ時に書込対象の全メモリセルがPassせず、再度プログラムパルスを印加する場合には、ベリファイがPassした一部のメモリセルに対しては、書込電流を絞ることにより弱書込状態にすることができる。この結果、プログラムベリファイ電圧PV以上の閾値電圧を有するメモリセルに対しては過剰プログラムによるゲート酸化膜のストレスを緩和できる。さらには、弱書込状態にすることによって、閾値電圧のプログラム分布の上限値を上げずに下限値の低下を抑制することができるので、分布の幅をより狭くすることができる。プログラムベリファイをパスしたメモリセルに流す書込電流を絞ることによって、チップ全体の書込速度を向上させるという効果もある。すなわち、書込電流を絞ることによって余分な電流消費がないため、図7のチャージポンプ33からソース線SLに至る経路での電圧ドロップ量が抑えられる。具体的には、図7の配線43,44,45による損失や、ディストリビュータ41やトランジスタQAなどのスイッチによる損失、ドライバSLDによる損失が抑制される。この結果、まだプログラムベリファイ電圧PVに達していないメモリセルに印加するパルス電圧の電圧ドロップを抑制することができるので、電圧ドロップ量が大きい場合に比べて書込時間を低減できる。図10は、プログラム時にメモリゲートに印加される電圧波形を概略的に示すタイミング図である。図10のタイミング図は、プログラムパルスを印加するタイミングすなわち、ソース線SLにプログラム電流が流れるタイミングも併せて示している。図10を参照して、時刻t1から時刻t2の間で、図4の電源回路33で生成された所定の電圧V1が、選択行の各メモリセルMCのメモリゲート23に印加される。この状態で、図4のソース線ドライバ部38から選択行のソース線SLにパルス電圧が印加されるすなわち、選択行のソース線SLにプログラム電流が流れる。パルス電圧の印加は、図7のNMOSトランジスタQAおよび63をオンすることによって行なわれるので、図5に示したメモリブロック単位で行なわれることになる。たとえば、図5において、メモリアレイ30の第1行目が選択されている場合には、最初にNMOSトランジスタQA0をオンすることによって、メモリブロックMB0に設けられた第1行目のソース線SL0図6のソース線SL0_0に相当するにパルス電圧が印加される。このとき、図6において、メモリセルMC0,0~MC0,511の512個のメモリセルのうち、トランジスタQC0A,QC0B~QC255A,QC255Bで選択された256個のメモリセルにパルス電圧が同時に印加される。次に、NMOSトランジスタQA1をオンすることによって、メモリブロックMB1に設けられた第1行目のソース線SL1にパルス電圧が印加される。これによって、第1行目のソース線SL1に接続された256個のメモリセルにパルス電圧が印加される。以下同様に、NMOSトランジスタQA2~QA7を順次オンすることによって、メモリブロックMB2~MB7にそれぞれ設けられた第1行目のソース線SL2~SL7にパルス電圧が印加されるなお、図5には図示していないが、メモリブロックMB0~MB31に設けられたソース線をそれぞれSL0~SL31としている。次の時刻t3から時刻t4の間で、選択行の各メモリセルMCのメモリゲート23に印加される電圧がプログラムベリファイ電圧PVに設定される。そして、この期間に、時刻t1~t2でパルス電圧を印加したメモリセルについてベリファイを実行する。この結果、ベリファイをPassしたメモリセルについては、図7で示した対応のベリファイ用ラッチ回路54に保持されるデータが1から0に変更される。次の時刻t5から時刻t6の間で、選択行の各メモリセルMCのメモリゲート23にプログラム時の電圧V2が印加される。メモリゲート23に印加される電圧V2は初回時刻t1から時刻t2までのパルス印加のときの電圧V1よりも高い。このようにメモリゲートに印加される電圧は段階的に上げていくのが望ましい。この状態で、図4のソース線ドライバ部38から選択行の各ソース線SL0~SL7に順番にパルス電圧が印加されるすなわち、選択行のソース線SLにプログラム電流が流れる。このとき、時刻t3から時刻t4の間で行なったベリファイ結果がPassのものについては書込電流が通常よりも低い弱書込になる。以下、同様に時刻t7から時刻t8の間で、選択行の各メモリセルに印加されるメモリゲート電圧がプログラムベリファイ電圧PVに設定され、選択行のメモリセルに対してベリファイが実行される。ベリファイ結果を受けてベリファイ用ラッチ回路54に保持されるデータが更新される。次の時刻t9から時刻t10の間で、選択行の各メモリセルMCのメモリゲート23にプログラム時の電圧V3が印加される。この状態で、図4のソース線ドライバ部38から選択行の各ソース線SL0~SL7に順番にパルス電圧が印加される。図11は、実施の形態1の場合のプログラム手順を示すフローチャートである。以下、図7、図11を参照して、これまで説明したプログラム手順について総括する。以下のプログラム手順は、図3の制御回路32による制御によって実行される。まず、ステップS10で、全ての書込用ラッチ回路53および全てのベリファイ用ラッチ回路54が初期化される。次のステップS20で、アドレスを指定するためのレジスタに、書込対象のメモリセルのうち先頭アドレスが設定される。この場合、行アドレスは選択行に固定され、列アドレスは書込対象のメモリセルのうち先頭列に設定される。次のステップS30で、設定された列アドレスに対応する書込用ラッチ回路53に書込データ1または0が入力される。次のステップS40で、全書込データの入力が完了したか否かの確認が行なわれ、未完了の場合にはステップS40でNO、アドレス指定用のレジスタに設定するアドレス番号が増加されるステップS50。この場合、行アドレスは選択行に固定され、列アドレスは2列分ずつ増加される。その後、ステップS30に処理が戻る。なお、実施の形態1の場合には、図7のNMOSトランジスタQCA,QCBによって、副ビット線BLA,BLBのいずれかが選択されるので、列番号の増加は2列ずつになる。全書込データの入力が完了するとステップS40でYES、ステップS60に進み、書込データが1に設定されたメモリセルにプログラムパルスが印加される。パルス電圧の印加は、図7のNMOSトランジスタQAおよび63をオンすることによって行なわれるので、図5に示したメモリブロック単位で行なわれることになる。具体的には、選択行に対応する各メモリブロックのソース線に順次パルス電圧が印加される。パルス電圧を印加するごとに、図3の制御回路32に設けられたSLカウンタによってパルス電圧を印加したブロック数がカウントされる。次のステップS70で、アドレスを指定するためのレジスタに、書込対象のメモリセルのうち先頭アドレスが設定される。この場合、行アドレスは選択行に固定され、列アドレスは先頭列に設定される。次のステップS80で、アドレス指定用のレジスタに設定されたアドレスに対応するメモリセルに対してプログラムベリファイが実施される。次のステップS90で、ステップS80で実行したベリファイの判定結果がパスPassであれば、パスしたメモリセルMCに対応するベリファイ用ラッチ回路54に保持されるデータの論理レベルが反転される。次のステップS100で、書込対象メモリセルのうち最終アドレスのメモリセルまでベリファイが完了したか否かの確認が行なわれ、未完了の場合にはステップS100でNO、アドレス指定用のレジスタに設定するアドレス番号が増加されるステップS110。この場合、行アドレスは選択行に固定され、列アドレスは次の書込データ1のメモリセルの列番号まで増加する。その後、ステップS80に処理が戻る。なお、既にベリファイをパスしたメモリセルについては、ベリファイ動作をスキップしてもよい。最終アドレスのメモリセルまでベリファイが完了するとステップS100でYES、次のステップS120に処理が進む。ステップS120では、データ1を書込んだ全書込メモリセルでベリファイがパスしたか否かが判定される。全書込メモリセルでベリファイがパスするとステップS120でYES処理が終了する。全書込メモリセルでベリファイがパスしていない場合には、ステップS60に処理が戻る。<実施の形態2>図12は、この発明の実施の形態2による不揮発性メモリ装置のうちデータのプログラムに関係する部分を示した図である。図12のカラム系選択回路70は、セレクタ71とカウンタ72をさらに含む点で図7のカラム系選択回路39と異なる。セレクタ71は、メモリブロック内の各ANDゲート55の出力信号を順に選択して出力する。カウンタ72は、セレクタ71を介して受けた複数のANDゲート55の出力のうち、論理レベルがHレベルのものすなわち、ベリファイ結果がFailであり、プログラムが未完了のメモリセル数をカウントする。カウンタ72の出力結果は、図4の制御回路32に出力される。図13は、図12の不揮発性メモリ装置によるプログラムの手順について説明するための図である。一般的にNOR型のフラッシュメモリでは、ホットエレクトロンを用いた書込が行なわれるので、所定の大きさ書込電流を流すためにソースまたはドレインに高電圧を印加する必要がある。このとき、チャージポンプ回路の電流容量には限界があるので、同時書込可能なメモリセル数には上限が存在する。そこで、同時書込可能なメモリセル数に応じて、メモリアレイが複数のグループ図5のメモリブロックMBに分割され、グループごとに順番に書込が行なわれる。実施の形態2による不揮発性メモリ装置の場合には、グループごとにプログラムが未完了のメモリセル数をカウントしているので、プログラムが未完了のメモリセル数Failビット数が減少するにつれて、複数のグループに同時にプログラムパルスを印加することにより、同時に書込むグループ数を増加させることができる。この結果、チップ全体でのプログラム時間を短縮することができる。以下、図5、図13を参照して、具体的に説明する。図13では、図5に示したメモリアレイ30において、行アドレス信号に応じた選択行として第1行目メモリゲート線MGL0に対応が選択され、この選択行の全ビットのメモリセルにデータ1高閾値電圧分布を書込む場合が想定されている。図13Aに示すプログラムパルスの1発目は、最小分割単位すなわち、メモリブロックMB0のソース線SL0、メモリブロックMB1のソース線SL1、...、メモリブロックMB7のソース線SL7ごとにプログラムパルスを印加することになる。各最小分割単位には256ビットbitのプログラム対象のメモリセルが含まれる。プログラムパルスの印加回数が増加するにつれて、ベリファイをPassするメモリセル数が増加する。すなわち、図13に数値で示したプログラム未完了のメモリセル数Failビット数とも称するは減少する。図13Bの場合には、Failビット数が各ブロックで200ビットになっている。ベリファイをPassしたメモリセルに対しては弱書込を行なうことにすると、1発ごとのプログラムパルスで流れる全書込電流は、Failビット数が減少するにつれて減少する。図13Cでは、ソース線SL0,SL1,SL5,SL6に対応するFailビット数がそれぞれ120ビットになっている。この場合、連続する2ブロックのFailビット数の和が256ビット以下であれば、2ブロックをマルチ選択して同時にプログラムパルスを印加することができる。図13Cの場合には、ソース線SL0,SL1に対応するメモリセルに同時にプログラムパルスを印加し、ソース線SL5,SL6に対応するメモリセルに同時にプログラムパルスを印加している。プログラムパルスの印加回数が増加するにつれて、さらにFailビット数が減少するので、同時にプログラムパルスを印加するブロック数すなわち、同時に動作させるソース線ドライバ数を増加させることができる。図13Dの場合には、ソース線SL0,SL1,SL2用のソース線ドライバを同時に動作させることでメモリブロックMB0,MB1,MB2に同時にプログラムパルスが印加されている。同様に、ソース線SL3,SL4用のソース線ドライバを同時に動作させ、ソース線SL5,SL6,SL7用のソース線ドライバを同時に動作させることができる。すなわち、3回のプログラムパルスの印加で選択行の全メモリセルにプログラムパルスを印加することができる。最終的に図13Eの場合には、選択行の全メモリセルにプログラムパルスが同時に印加される。上記の説明では、選択行の全メモリセルにデータ1を書込む場合について説明したが、通常、選択行のメモリセルに書込むデータ1、0はランダムである。したがって、1発目のプログラムパルスの印加の場合においても、プログラム未完了のメモリセル数Failビット数に応じて、複数のブロックに同時にプログラムパルスを印加することができる。上記の説明では、連続するブロックに同時にプログラムパルスを印加する例について説明したが、必ずしも連続するブロックに同時にプログラムパルスを印加する必要はない。たとえば、図13Cの場合には、ソース線SL0,SL5に対応するメモリセルに同時にプログラムパルスを印加してもよい。図14は、メモリブロックの同時選択を行なわない通常状態においてソース線およびビット線に印加される電圧波形を示すタイミングチャートである。図15は、メモリブロックの同時選択状態においてソース線およびビット線に印加される電圧波形を示すタイミングチャートである。図15では、ソース線SL0,SL1に対応するメモリブロックが同時選択されている。図5、図14を参照して、プログラムパルスを印加しない定常状態時刻t1より前では、各ソース線ドライバSLDから出力される電圧はLレベルであり、各主ビット線BLの電圧はHレベルになっている。時刻t1で、ソース線ドライバSLD0からソース線SL0にHレベルの電圧が供給される。同時に、主ビット線BL0~BL255に対応するスイッチ用のトランジスタ63図12参照がオン状態になることにより、主ビット線BL0~BL255の電圧がLレベルになるただし、主ビット線BL0~BL255に接続される全選択メモリセルにデータ1を書込むとする。次の時刻t2で、ソース線ドライバSLD0からソース線SL0に供給される電圧はLレベルに戻り、ソース線ドライバSLD1からソース線SL1に供給される電圧がHレベルに変化する。同時に、主ビット線BL0~BL255の電圧はHレベルに戻り、主ビット線BL256~BL511の電圧がLレベルに変化する。次の時刻t3で、ソース線ドライバSLD1からソース線SL1に供給される電圧はLレベルに戻り、ソース線ドライバSLD2からソース線SL2に供給される電圧がHレベルに変化する。同時に、主ビット線BL256~BL511の電圧はHレベルに戻り、主ビット線BL512~BL755の電圧がLレベルに変化する。以下、同様に進行する。次に、図5、図15を参照して、ソース線SL0,SL1に対応するメモリセルに同時にプログラムパルスを印加する場合を説明する。この場合、時刻t1で、ソース線ドライバSLD0からソース線SL0にHレベルの電圧が供給されるとともに、ソース線ドライバSLD1からソース線SL1にHレベルの電圧が供給される。同時に、主ビット線BL0~BL255の電圧がLレベルになるとともに、主ビット線BL256~BL511の電圧がLレベルになる。次に時刻t3で、ソース線ドライバSLD0,SLD1からソース線SL0,SL1にそれぞれ供給される電圧はLレベルに戻り、ソース線ドライバSLD2からソース線SL2に供給される電圧がHレベルに変化する。同時に、主ビット線BL0~BL511の電圧はHレベルに戻り、主ビット線BL512~BL755の電圧がLレベルに変化する。以下、図14の場合と同様に進行する。図16は、実施の形態2の場合のプログラム手順を示すフローチャートである。図16のフローチャートは、ステップS55,S95をさらに含む点で、図11のフローチャートと異なる。図11と同一のステップについては、同一の参照符号を付して説明を簡略化する。なお、以下に示したプログラム手順は、図3の制御回路32による制御によって実行される。まず、ステップS10で、全ての書込用ラッチ回路53および全てのベリファイ用ラッチ回路54が初期化される。次のステップS20で、アドレス指定用のレジスタに、書込対象のメモリセルのうち先頭アドレスが設定される。この場合、行アドレスは選択行に固定され、列アドレスは書込対象のメモリセルのうち先頭列に設定される。次のステップS30で、設定された列アドレスに対応する書込用ラッチ回路53に書込データ1または0が入力される。次のステップS40で、全書込データの入力が完了したか否かの確認が行なわれ、未完了の場合にはステップS40でNO、アドレス指定用のレジスタに設定するアドレス番号が増加されるステップS50。その後、ステップS30に処理が戻る。全書込データの入力が完了するとステップS40でYES、次のステップS55で、同時にデータ書込みを行なうブロックの組合せが決定される。既に説明したように、パルス電圧の印加は、図5に示したメモリブロック単位で行なわれ、具体的には、選択行に対応する各メモリブロックのソース線にパルス電圧が印加される。この際、チャージポンプ回路の電流容量を超えなければ、いくつかのブロックをまとめて同時にパルス電圧を印加することが可能である。そこで、ステップS55では、図13のカウンタ72によって各ブロックごとにカウントされるプログラム未完了のメモリセル数Failビット数に基づいて、チャージポンプ回路の電流容量を超えない範囲内で、同時にデータ書込みを行なうブロックの組合せが決定される。次のステップS60で、ステップS55で決定したブロックの組合せごとに順番にプログラムパルスが印加される。パルス電圧を印加するごとに、図3の制御回路32に設けられたSLカウンタによってパルス電圧を印加したブロック数がカウントされる。次のステップS70で、アドレス指定用のレジスタに、書込対象のメモリセルのうち先頭アドレスが設定される。この場合、行アドレスは選択行に固定され、列アドレスは先頭列に設定される。次のステップS80で、アドレス指定用のレジスタに設定されたアドレスに対応するメモリセルに対してプログラムベリファイが実施される。次のステップS90で、ステップS80で実行したベリファイの判定結果がパスPassであれば、パスしたメモリセルMCに対応するベリファイ用ラッチ回路54に保持されるデータの論理レベルが反転される。次のステップS95で、ステップS80で実行したベリファイの判定結果がフェイルFailであれば、メモリブロックごとに設けられた図12のカウンタ72によって、Failビット数としてカウントする。次のステップS100で、書込対象メモリセルのうち最終アドレスのメモリセルまでベリファイが完了したか否かの確認が行なわれ、未完了の場合にはステップS100でNO、アドレス指定用のレジスタに設定するアドレス番号が増加されるステップS110。この場合、行アドレスは選択行に固定され、列アドレスは次の書込データ1のメモリセルの列番号まで増加する。その後、ステップS80に処理が戻る。なお、既にベリファイをパスしたメモリセルについては、ベリファイ動作をスキップしてもよい。最終アドレスのメモリセルまでベリファイが完了するとステップS100でYES、次のステップS120で、データ1を書込んだ全書込メモリセルでベリファイがパスしたか否かが判定される。全書込メモリセルでベリファイがパスするとステップS120でYES処理が終了する。全書込メモリセルでベリファイがパスしていない場合には、ステップS55に処理が戻る。ステップS55では、ステップS95でカウントされたブロックごとのFailビット数に基づいて、チャージポンプ回路の電流容量を超えない範囲内で、同時にデータ書込みを行なうブロックの組合せが新たに決定される。今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。"