各々が電荷蓄積部を有するMOSFET構造からなる複数のメモリセルを有する不揮発性半導体メモリであって、書込データに対応した書込電圧を前記メモリセルのいずれかのドレイン領域又はソース領域に印加することにより前記電荷蓄積部に電荷を注入する書込電圧印加部と、前記電荷蓄積部に蓄積された電荷量の増加に応じて前記書込電圧を低減する制御部と、を有することを特徴とする不揮発性半導体メモリ。前記制御部は、前記書込電圧として第1電圧及び当該第1電圧よりも低い第2電圧を夫々生成する書込電圧発生部と、前記メモリセルから読み出された読出電流値に基づき、前記電荷蓄積部に蓄積された電荷量が前記書込データの値に対応した第1電荷量よりも低い第2電荷量を超えたか否かを判定する第1判定部と、前記第1判定部が前記電荷蓄積部に蓄積された電荷量が前記第2電荷量を超えたと判定するまでは前記書込電圧として前記第1電圧を設定する一方、前記第1判定部が前記第2電荷量を超えたと判定した場合には前記書込電圧を前記第1電圧から前記第2電圧に切り替える電圧切換部と、を有することを特徴とする請求項1記載の不揮発性半導体メモリ。前記第2電圧を有する前記書込電圧が前記メモリセルのドレイン領域又はソース領域に印加された際に前記メモリセルから読み出された読出電流値に基づき、前記電荷蓄積部に蓄積された電荷量が前記第1電荷量に到達したか否かを判定する第2判定部を更に備え、前記電圧切換部は、前記第2判定部が前記電荷蓄積部に蓄積された電荷量が前記第1電荷量に到達したと判定した場合に前記メモリセルのドレイン領域又はソース領域をハイインピーダンス状態に設定することを特徴とする請求項2記載の不揮発性半導体メモリ。各々が電荷蓄積部を有するMOSFET構造からなる複数のメモリセルを有する不揮発性半導体メモリにデータを書き込むデータ書き込み方法であって、書込データの値に対応した第1書込電圧を前記メモリセルのドレイン又はソース領域に印加することにより、前記電荷蓄積部に対して前記書込データの値に対応した第1電荷量よりも低い第2電荷量を超えるまで電荷を注入する第1ステップと、前記第1書込電圧よりも低い第2書込電圧を前記メモリセルのドレイン又はソース領域に印加することにより前記電荷蓄積部に電荷を注入してその電荷蓄積量を前記第1電荷量に到らせる第2ステップと、を順次実行することを特徴とするデータ書き込み方法。夫々が異なる値を示す前記書込データの書き込み対象となる複数のメモリセル各々に対して同時に前記第1ステップ及び前記第2ステップを実行することを特徴とする請求項4記載のデータ書き込み方法。本発明は、各メモリセルに電荷蓄積部が設けられた半導体不揮発性メモリにおいて、迅速に且つ精度良く書込データに対応した所定量の電荷をメモリセルの電荷蓄積部に蓄積させることが可能な半導体不揮発性メモリ及びデータ書き込み方法を提供することを目的とする。本発明による半導体不揮発性メモリは、各々が電荷蓄積部を有するMOSFET構造からなる複数のメモリセルを有する不揮発性半導体メモリであって、書込データに対応した書込電圧を前記メモリセルのいずれかのドレイン領域又はソース領域に印加することにより前記電荷蓄積部に電荷を注入する書込電圧印加部と、前記電荷蓄積部に蓄積された電荷量の増加に応じて前記書込電圧を低減する制御部と、を有する。また、本発明によるデータ書き込み方法は、各々が電荷蓄積部を有するMOSFET構造からなる複数のメモリセルを有する不揮発性半導体メモリにデータを書き込むデータ書き込み方法であって、書込データの値に対応した第1書込電圧を前記メモリセルのドレイン又はソース領域に印加することにより、前記電荷蓄積部に対して前記書込データの値に対応した第1電荷量よりも低い第2電荷量を超えるまで電荷を注入する第1ステップと、前記第1書込電圧よりも低い第2書込電圧を前記メモリセルのドレイン又はソース領域に印加することにより前記電荷蓄積部に電荷を注入してその電荷蓄積量を前記第1電荷量に到らせる第2ステップと、を順次実行する。本発明においては、書込データに対応した書込電圧をメモリセルのドレイン領域又はソース領域に印加することによりメモリセルに形成されている電荷蓄積部に電荷を注入するにあたり、電荷蓄積部に蓄積された電荷量の増加に応じて書込電圧を低減することにより、電荷蓄積部に蓄積された電荷量を書込データの値に対応した電荷量に到らせる。よって、本発明によれば、電荷蓄積量を所定量に到らせるまでの書き込み回数が比較的多くなるゲートステッピング処理、つまり書込データに対応した書込電圧をメモリセルのゲート領域に印加することによって電荷を注入する処理、を併用する従来のデータ書き込み方法に比べて、その書き込み回数を減らすことができる。更に、本発明においては、複数のメモリセルの各々に対して夫々異なる値の書込データを同時に書き込むことができるので、書込データの値毎に時分割でその書込データに対応した量の電荷を注入する場合に比して、書き込みに費やされる時間を短縮させることが可能となる。本発明による半導体不揮発性メモリにおいては、書込データに対応した書込電圧をメモリセルのドレイン領域又はソース領域に印加することによりメモリセルに形成されている電荷蓄積部に電荷を注入するにあたり、電荷蓄積部に蓄積された電荷量の増加に応じて書込電圧を低減する。すなわち、書込データの値に対応した書込電圧として第1電圧をメモリセルのドレイン又はソース領域に印加することにより、電荷蓄積部に対して書込データの値に対応した第1電荷量よりも低い第2電荷量を超えるまで電荷を注入し、第2電荷量を超えたら、第1電圧よりも低い第2電圧を有する書込電圧をメモリセルのドレイン又はソース領域に印加することにより電荷蓄積部に電荷を注入してその電荷蓄積量を第1電荷量に到らせる。図1は、半導体不揮発性メモリの全体構成を示すブロック図である。図1に示すように、かかる半導体不揮発性メモリは、メモリセルアレイ100、ロウデコーダ104、カラムデコーダ106及びコントローラ108を有する。メモリセルアレイ100には、列方向に配列された複数のビット線BL1~BLMMは2以上の整数及びこれと交差して行方向に配列された複数のワード線WL1~WLNNは2以上の整数が設けられている。ビット線BL及びワード線WLによる各交叉部にはメモリセル10が設けられている。メモリセル10は、例えばnチャネル型のMOSFETMetalOxideSemiconductorFieldEffectTransistorから構成されている。図2は、かかるメモリセル10の主要部を示す断面図である。図2に示す如く、p型のシリコン基板12の上面には、SiO2からなるゲート酸化膜16を介してポリシリコンからなるゲート電極17以下、ゲート端子とも言うが形成されている。このゲート電極17が図1に示すようにワード線WLに接続されている。シリコン基板12表面のゲート電極17を挟む位置にn型不純物を高濃度に含有するソース領域13およびドレイン領域14が形成されている。これらソース領域13以下、ソース端子とも言う及びドレイン領域14以下、ドレイン端子とも言うが夫々、図1に示す如く互いに異なるビット線BLに接続されている。ゲート電極17直下のシリコン基板12の表面領域はMOSFETの動作時において電流路が形成されるチャンネル領域15である。チャンネル領域15とソース領域13およびドレイン領域14との間にはソース領域13およびドレイン領域14に隣接して比較的不純物濃度の低いn型のエクステンション領域18および19が形成されている。このエクステンション領域18および19は、後述する電荷蓄積部に効率的に電荷を注入するために設けられるものである。ソース側のエクステンション領域18の上部には電荷蓄積部30が設けられ、ドレイン側のエクステンション領域19の上部には電荷蓄積部32が設けられている。電荷蓄積部30及び32の各々は、シリコン酸化膜301、シリコン窒化膜303、シリコン酸化膜303からなるONO積層絶縁膜により構成される。電荷蓄積部30及び電荷蓄積部32は、それぞれエクステンション領域18および19からゲート電極17の側壁に亘って延在している。これにより、電荷の蓄積および保持を確実に行うことができる。また、電荷蓄積部30及び電荷蓄積32は、物理的に連続せず、互いに離間して形成されているので、各電荷蓄積部に対して別個独立に電荷を蓄積保持できる。かかる構成により、各メモリセル10は、ワード線WLを介してそのゲート端子に印加された電圧、及び一対のビット線BLを介してドレイン端子及びソース端各々に印加された電圧に応じて、このビット線BLを介してデータの書込及び読出が為されることになる。コントローラ108は、メモリセルアレイ100に書き込むべきデータが外部より入力されると、データ書き込みプログラム後述するを実行し、その書き込み先を示すアドレス情報及びワード線WLに印加すべき電圧を指定する情報を含む制御信号を、ロウデコーダ104に供給する。更に、コントローラ108は、このアドレス情報及び書き込むべきデータに対応したビット線BLに印加すべき電圧を指定する電圧指定信号VT後述するを含む制御信号を、カラムデコーダ106に供給する。この際、コントローラ108は、後述するように、第1ベリファイverification処理における検証をパス合格、つまり書込データの値に対応した十分な量の電荷蓄積が為されたと判定した場合には論理レベル1、電荷蓄積量が不十分であると判定した場合には論理レベル0の第1ベリファイ結果信号Verifyをカラムデコーダ106に供給する。また、コントローラ108は、後述するように、第2ベリファイ処理における検証をパスした場合には論理レベル1、それ以外の場合には論理レベル0の第2ベリファイ結果信号VerifyNをカラムデコーダ106に供給する。尚、第1ベリファイ処理では、後述するように、書込データの値に対応した閾電流値Ithをリファレンス電流値Irefとして用いて電荷蓄積量の検証を行い、第2ベリファイ処理では、この閾電流値Ithにオフセットαを加えたものをリファレンス電流値Irefとして用いて電荷蓄積量の検証を行うものである。ロウデコーダ104は、コントローラ108より供給された制御信号に基づいて、メモリセルアレイ100に形成されているワード線WL1~WLNの内の1のワード線WLを選択し、このワード線WLにゲート電圧を供給する。これにより、ゲート電圧が供給された1のワード線WLに接続されているメモリセル10の各々がデータの書込又は読出対象となる。カラムデコーダ106は、コントローラ108より供給された制御信号に基づいて少なくとも1対のビット線BLを選択し、選択したビット線BLに接続されたメモリセル10のドレインソース端子間に書込電圧を供給する。又、カラムデコーダ106は、ビット線BLを接地電位に設定することにより、メモリセル10の電荷蓄積部32に蓄積された電荷に伴う電流をビット線BL上に送出させ、このビット線BL上に送出された電流値を表す読出電流値をコントローラ108に供給する。図3は、カラムデコーダ106に含まれるデータ書き込み回路の一例を示すブロック図である。尚、図3においては、メモリセルアレイ100に形成されているビット線BL1~BLMの各々毎に設けられているMブロック分のデータ書き込み回路の内の1ブロック分の構成を示すものである。図3に示すように、かかるデータ書き込み回路は、プログラムデータレジスタ21、状態判定回路22、書込電圧発生回路23、及びレベルシフタ241~246からなる。プログラムデータレジスタ21は、外部供給されたデータの内から、そのビット線BLに接続されているメモリセル10に書き込むべきビット桁に対応した2ビットのデータ以下、書込データと称するを抽出し、この書込データによって表される値を3ビットで表すプログラムデータDT0~DT2を生成する。例えば書込データが00を表す場合には、プログラムデータレジスタ21は、DT0:1DT1:0DT2:0なるプログラムデータDT0~DT2を生成する。又、書込データが01を表す場合には、プログラムデータレジスタ21は、DT0:0DT1:1DT2:0なるプログラムデータDT0~DT2を生成する。又、書込データが10を表す場合には、プログラムデータレジスタ21は、DT0:0DT1:0DT2:1なるプログラムデータDT0~DT2を生成する。又、書込データが11を表す場合には、プログラムデータレジスタ21は、DT0:0DT1:0DT2:0なるプログラムデータDT0~DT2を生成する。プログラムデータレジスタ21は、上記したプログラムデータDT0~DT2を保持すると共に、これを状態判定回路22に供給する。状態判定回路22は、図4に示す真理値表に従って、上記プログラムデータDT0~DT2の値、及び第1ベリファイ結果信号Verify及びVerifyNに基づいて、電荷蓄積部30及び32の書込状態を判定し、その判定結果を示す判定結果信号S0~S2及びNS0~NS2を、図3に示す如くレベルシフタ241~246に夫々供給する。書込電圧発生回路23は、書込データとして00を書き込む際に用いるドレイン電圧として、ドレイン電圧PDV0と、このドレイン電圧PDV0よりも低いドレイン電圧NPDV0とを生成する。また、書込電圧発生回路23は、書込データとして01を書き込む際に用いるドレイン電圧として、ドレイン電圧PDV1と、このドレイン電圧PDV1よりも低いドレイン電圧NPDV1とを生成する。更に、書込電圧発生回路23は、書込データとして01を書き込む際に用いるドレイン電圧として、ドレイン電圧PDV2と、このドレイン電圧PDV2よりも低いドレイン電圧NPDV2とを生成する。書込電圧発生回路23は、これらドレイン電圧PDV0~PDV2、NPDV0~NDV2を、図3に示す如くレベルシフタ241~246に夫々供給する。レベルシフタ241~246の各々は、夫々に供給される判定結果信号S0~S2、NS0~NS2が論理レベル1である場合には、そのレベルシフタ24に供給されたドレイン電圧PDV0~2、NPDV0~2を書込電圧としてビット線BLに印加する。尚、レベルシフタ241~246の各々は、夫々に供給される判定結果信号S0~S2、NS0~NS2が論理レベル0である場合には、ビット線BLをハイインピーダンス状態に設定する。よって、例えば、図4に示されるように、判定結果信号S0~S2及びNS0~NS2の内でS0のみが論理レベル1、その他の全ての判定結果信号が論理レベル0である場合には、レベルシフタ241~246の内の243のみが、この243に供給されているドレイン電圧PDV0をビット線BLに印加する。更に、レベルシフタ241~246の各々は、コントローラ108から供給された電圧指定信号VTに応じて、これらドレイン電圧PDV0~PDV2、NPDV0~NDV2各々の電圧値を変更する。以下に、図3に示す構成を有するデータ書き込み回路の動作について説明する。図5は、かかるデータ書き込み回路を動作させるべく、コントローラ108によって実行されるデータ書き込みプログラムの一例を示す図である。このデータ書き込みプログラムは、書込データに基づくプログラムデータDT0~DT2がプログラムデータレジスタ21に保持される度に、書き込み対象となったワード線WLに接続されているメモリセル10の各々対して個別に実行される。図5において、先ず、コントローラ108は、リフアレンス電流値Irefとして、上記した書込データの値00、01、10、又は11に対応した閾電流値Ithを設定するステップST1。例えば、書込データの値である00、01、10の各々に対応した、夫々異なる値を有する第1~第3の閾電流値Ithが割り当てられており、これら第1~第3の閾電流値Ithの内から、実際に供給された書込データの値に対応した閾電流値Ithが選択され、この選択された閾電流値Ithが設定されるのである。この際、上記閾電流値Ithとは、書込データの値に対応した十分な量の電荷第1電荷量がメモリセル10の電荷蓄積部30又は32に蓄積されている際に、このメモリセル10から読み出された電流値として取り得る最低の電流値である。つまり、閾電流値Ithとは、電荷蓄積部30又は32に蓄積されている電荷の量が、書込データの値に対応した第1電荷量に達したが否かを判別する為の閾値なのである。次に、コントローラ108は、ロウデコーダ104によって書込対象となる1つのワード線WLに高電圧を印加させると共に、カラムデコーダ106によってビット線BLを接地電位に設定させることにより、電荷蓄積部32に蓄積された電荷に伴う電流以下、読出電流と称するをビット線BL上に読み出すステップST2。この際、カラムデコーダ106は、ビット線BL上に読み出された読出電流を検出し、その電流値を示す読出電流値RDをコントローラ108に供給する。次に、コントローラ108は、この読出電流値RDがリフアレンス電流値Irefよりも低いか否かを判定する、第1ベリファイを実行するステップST3。すなわち、第1ベリファイでは、量電荷蓄積部32に蓄積された電荷量が書込データに対応した量を超えたた否かを、その読出電流値に基づいて判定するのである。この際、電荷蓄積部32に蓄積された電荷量が書込データに対応した量を超えたと判定された場合に、この第1ベリファイをパスしたことになる。上記ステップST3において、読出電流値RDがリフアレンス電流値Irefよりも大であると判定された場合、つまり電荷蓄積部32に蓄積された電荷量が不十分であると判定された場合、コントローラ108は、リフアレンス電流値Irefとして、上記閾電流値Ithに所定のオフセットαを加算して得られた閾電流値Ithαを設定するステップST4。尚、閾電流値Ithαとは、上記した如き書込データの値に対応した第1電荷量よりも低い第2電荷量の分だけ電荷蓄積部に電荷が蓄積されたか否かを、読出電流に基づいて判別する為の閾値である。次に、コントローラ108は、閾電流値Ithαを有するリフアレンス電流値Irefよりも上記読出電流値RDが低いか否かを判定する、第2ベリファイを実行するステップST5。すなわち、第2ベリファイでは、電荷蓄積部32に蓄積された電荷量が、書込データに対応した第1電荷量よりもオフセットαの分だけ小なる第2電荷量を超えたか否かを、その読出電流値に基づいて判定するのである。この際、電荷蓄積部32に蓄積された電荷量が、書込データに対応した第1電荷量よりもオフセットαの分だけ小なる第2電荷量を超えたと判定された場合に、この第2ベリファイをパスしたことになるのである。上記ステップST5において、読出電流値RDがリフアレンス電流値Irefよりも大であると判定された場合、つまり第2ベリファイにおいて電荷蓄積量が不十分であると判定された場合、コントローラ108は、上記した第1及び第2ベリファイ共にパスしなかったことを表す夫々論理レベル0の第1ベリファイ結果信号Verify及び第2ベリファイ結果信号VerifyNを状態判定回路22に供給するステップST6。ステップST6の実行により、状態判定回路22は、図4に示す真理値表に基づき、論理レベル0の第1ベリファイ結果信号Verify、論理レベル0の第2ベリファイ処理信号VerifN、及びプログラムデータDT0~DT2に応じた判定結果信号S0~S2、NS0~NS2を得る。この際、プログラムデータDT0~DT2が例えば書込データ00に対応した論理レベル、つまり、DT0:1DT1:0DT2:0である場合には、論理レベル1の判定結果信号S0に応じてレベルシフタ243が、書込電圧としてのドレイン電圧PDV0をビット線BLに印加する。また、プログラムデータDT0~DT2が例えば書込データ01に対応した論理レベル、つまり、DT0:0DT1:1DT2:0である場合には、論理レベル1の判定結果信号S1に応じてレベルシフタ242が、書込電圧としてのドレイン電圧PDV1をビット線BLに印加する。また、プログラムデータDT0~DT2が例えば書込データ10に対応した論理レベル、つまり、DT0:0DT1:0DT2:1である場合には、論理レベル1の判定結果信号S2に応じてレベルシフタ241が、書込電圧としてのドレイン電圧PDV2をビット線BLに印加する。上記の如き書込電圧PDV0、PDV1、又はPDV2の印加により、選択されたワード線WL及びビット線BLの交叉部に形成されているメモリセル10の電荷蓄積部32には、その書込電圧値に対応した電荷が注入される。かかるステップST6の実行後、コントローラ108は、以下のステップST7の実行に移る。すなわち、コントローラ108は、レベルシフタ241~246に対して、現在出力しているドレイン電圧PDV0~PDV2各々の電圧値を所定のステップ電圧VSP1だけ高めると共に、ドレイン電圧NPDV0~NDV2各々の電圧値を所定のステップ電圧VSP2だけ高めるべき電圧指定信号VTを供給するステップST7。ステップST7の実行後、コントローラ108は、上記ステップST1の実行に戻り、前述した如き動作を繰り返し実行する。すなわち、ステップST5において、リフアレンス電流値Irefよりも読出電流値RDが低い、つまり電荷蓄積部32に蓄積された電荷量が、書込データに対応した第1電荷量よりもオフセットαの分だけ小なる第2電荷量を超えたと判定されるまで、上記ステップST1~ST7なる処理を繰り返し実行するのである。要するに、第2ベリファイをパスするまで、ビット線BLに印加するドレイン電圧PDVを段階的に増加させつつ、メモリセル10から読み出された読出電流値に基づいて、電荷蓄積部32に蓄積された電荷量が第2電荷量に達したか否かの判定を行うのである。この間、ステップST5において、リフアレンス電流値IrefIthαよりも読出電流値RDが低いと判定された場合、つまり第2ベリファイをパスした場合、コントローラ108は、第2ベリファイがパスしたことを表す論理レベル1の第2ベリファイ結果信号VerifyN、及び第1ベリファイがパスしなかったことを表す論理レベル0の第1ベリファイ結果信号Verifyを状態判定回路22に供給するステップST8。ステップST8の実行により、状態判定回路22は、図4に示す真理値表に基づき、論理レベル0の第1ベリファイ結果信号Verify、論理レベル1の第2ベリファイ処理信号VerifN、及びプログラムデータDT0~DT2に応じた判定結果信号S0~S2、NS0~NS2を得る。この際、プログラムデータDT0~DT2が例えば書込データ00に対応した論理レベル、つまり、DT0:1DT1:0DT2:0である場合には、論理レベル1の判定結果信号NS0に応じてレベルシフタ246が、書込電圧としてのドレイン電圧NPDV0をビット線BLに印加する。また、プログラムデータDT0~DT2が例えば書込データ01に対応した論理レベル、つまり、DT0:0DT1:1DT2:0である場合には、論理レベル1の判定結果信号NS1に応じてレベルシフタ245が、書込電圧としてのドレイン電圧NPDV1をビット線BLに印加する。また、プログラムデータDT0~DT2が例えば書込データ10に対応した論理レベル、つまり、DT0:0DT1:0DT2:1である場合には、論理レベル1の判定結果信号NS2に応じてレベルシフタ244が、書込電圧としてのドレイン電圧NPDV2をビット線BLに印加する。上記の如き書込電圧NPDV0、NPDV1、又はNPDV2の印加により、選択されたワード線WL及びビット線BLの交叉部に形成されているメモリセル10の電荷蓄積部32には、その書込電圧値に対応した電荷が注入される。ステップST8の実行後、コントローラ108は、上記ステップST7の実行に移り、ステップST1~ST5、ST8、ST7なる処理を繰り返し実行する。すなわち、第2ベリファイをパスした場合には、ビット線BLに印加するドレイン電圧を、PDVよりも低いNPDVに切り替えST8、その電圧値を段階的に増加させつつST7、メモリセル10から読み出された読出電流値RDに基づき、電荷蓄積部32に蓄積された電荷量が、書込データの値に対応した第1電荷量に達したか否かの判定ST3、つまり第1ベリファイを行うのである。この間、ステップST3において、読出電流値RDがリフアレンス電流値Iref閾電流値Ithよりも低いと判定された場合、つまり書込データに対応した十分な量の電荷が電荷蓄積部32に蓄積されたと判定された場合、コントローラ108は、第1ベリファイをパスしたことを表す論理レベル1の第1ベリファイ結果信号Verifyを状態判定回路22に供給するステップST9。ステップST9の実行により、第1ベリファイ結果信号Verify及び第2ベリファイ結果信号VerifyNは共に論理レベル1となるので、状態判定回路22は、図4に示す真理値表に基づき、全てが論理レベル0となる判定結果信号S0~S2、NS0~NS2を得る。これにより、ビット線BLに対するドレイン電圧の印加が為されなくなるので、ビット線BLはハイインピーダンス状態に設定される。ステップST9の実行後、コントローラ108は、選択されたワード線WLに接続されているメモリセル10各々の内で書込対象となった全てのメモリセル10に対して、第1ベリファイ結果信号Verify及び第2ベリファイ結果信号VerifyNが共に論理レベル1となったか否かを判定するステップST10。すなわち、書込対象となった全てのメモリセル10の電荷蓄積部32に、書込データに対応した十分な量の電荷が蓄積されたか否かを判定するのである。この際、ステップST10において、書込対象となった全てのメモリセル10に対する第1ベリファイ結果信号Verify及び第2ベリファイ結果信号VerifyNが論理レベル1となったと判定されるまで、書込対象となった全てのメモリセル10に対して、ステップST1~ST10の動作を繰り返し実行する。以下に、図5に示されるデータ書き込みプログラムの実行によって為されるデータ書き込み動作ついて、図6に示す如き読出電流値の推移を表す図を参照しつつ説明する。先ず、初期状態時には、書込対象となったメモリセル10各々の電荷蓄積部32又は30には電荷の蓄積が為されていないので、各メモリセル10から読み出された読出電流として取り得る読出電流値の分布VPは、図6aに示す如く、閾電流値Ithよりも大幅に大なる電流値を中心としたものとなる。よって、この初期段階では、第1ベリファイST3及び第2ベリファイST5を共にパスすることはない。ここで、図5に示すステップST1~ST7なる一連の処理を繰り返し実行することにより、ビット線BLに印加するドレイン電圧PDVをステップ電圧VSP1ずつ段階的に高めて行くと、メモリセル10の電荷蓄積部に蓄積される電荷の量が増加して行く。それに伴い各メモリセル10から読み出された読出電流値の分布VPも図6bに示すように、閾電流値Ithに近づいて行く。この際、第2ベリファイST5において、図6cに示す如く、読出電流値が、閾電流値Ithαよりも低くなったと判定された場合には、ビット線BLに印加するドレイン電圧をPDVから、このPDVよりも低い電圧であるドレイン電圧NPDVに切り替えるST8。つまり、読出電流値が閾電流値Ithより高いものの閾電流値Ithαよりも低くなった場合には、ドレイン電圧を一旦、PDVからNPDVに低下させ、このNPDVの状態から段階的に電圧を高めて行くことにより、その読出電流値を精密に閾電流値Ithに到らせるべき電荷注入動作ST8、ST7、ST1~ST5に切り替えるのである。この一連の処理により、書込対象となったメモリセル10各々の内の一部において、図6dに示す如く、その読出電流値が閾電流値Ithよりも低くなる、つまり書込データの値に対応した十分な量第1電荷量の電荷蓄積が完了する。この際、第1ベリファイST3において読出電流値が閾電流値Ithよりも低くなったと判定されるので、このメモリセル10が接続されているビット線BLはハイインピーダンス状態に設定されるST9。その後、上記ステップST8、ST7、ST1~ST5なる一連の処理を繰り返すことにより、書込対象となった全てのメモリセル10から読み出された読出電流値が、図6eに示すように閾電流値Ithαよりも低くなり、やがて、図6fに示すように閾電流値Ithよりも低くなる。すなわち、書込対象となった全てのメモリセル10に対して、書込データの値に対応した十分な量第1電荷量の電荷蓄積が完了するのである。以上の如く、図5に示すプログラムによるデータ書き込みでは、先ず、書込電圧として第1のドレイン電圧PDVを印加することにより一度に多量の電荷を注入する動作を行う第1電荷注入ステップ。これにより、電荷蓄積部に対して書込データの値に対応した第1電荷量よりも低い第2電荷量まで迅速に電荷の蓄積を行う。ここで、電荷蓄積部に蓄積された電荷量が上記第2電荷量を超えたら、上記PDVよりも低い第2のドレイン電圧NPDVを印加することにより一度に微量の電荷を注入する動作第2電荷注入ステップに切り替える。これにより、電荷蓄積量を精度良く第1電荷量に到らせるようにしている。この第2電荷注入ステップの実行によれば、各メモリセルに蓄積される電荷量のバラツキが抑制され、それ故、各メモリセルによる読出電流値の分布幅が狭くなるので、電流ウィンドウの幅を広げることが可能となる。このように、上記の如きデータ書き込みによれば、ドレインステッピング処理だけで、迅速に且つ精度良く電荷蓄積量を所定量に到らせることが可能となる。よって、電荷蓄積量を所定量に到らせるまでの書き込み回数が比較的多くなるゲートステッピング処理を併用する従来のデータ書き込み方法に比べて、その書き込み回数を減らすことができるので、書込処理時間の短縮を図ることが可能となる。また、図1に示される半導体不揮発性メモリにおいては、図5に示す如きデータ書き込み処理を、ビット線BL1~BLM各々に対して個別に実行するようにしている。よって、1つのワード線WL上に接続されている複数のメモリセル10の各々に対して、夫々異なる値を表す書込データを同時に書き込むことが可能となる。例えば、ビット線BL1に接続されているメモリセル10に対して書込データ00の書き込みを実行している間に、ビット線BL3に接続されているメモリセル10に対する書込データ01の書き込み処理を実行しつつ、ビット線BL5に接続されているメモリセル10に対する書込データ10の書き込み処理を実行することができるのである。尚、上記実施例においては、各メモリセル10に形成されている2つの電荷蓄積部30及び32の内のドレイン側の電荷蓄積部32にデータを書き込む際の動作を説明したが、ソース側に形成されている電荷蓄積部30に対しても同様にデータの書き込みが為される。この際、第1電荷注入ステップでは、書込電圧としてソース電圧PDVをメモリセル10のソース端子に印加し、第2電荷注入ステップでは、書込電圧として、上記ソース電圧PDVよりも低いソース電圧NPDVをメモリセル10のソース端子に印加するのである。要するに、書込電圧としての第1電圧PDVをメモリセルのドレイン又はソース領域に印加することによって多量の電荷を注入する第1電荷注入ステップと、第1電圧よりも低い第2電圧NPDVをメモリセルのドレイン又はソース領域に印加することによって微量の電荷を注入する第2電荷注入ステップと、を実行すれば良いのである。また、図5に示すデータ書き込み処理では、ドレイン電圧PDVの印加による第1電荷注入ステップと、上記PDVよりも低いドレイン電圧NPDVの印加による第2電荷注入ステップとの2段階でデータの書き込みを行うようにしているが、これを3段階以上で実行するようにしても良い。要するに、書込データに対応した書込電圧をメモリセルのドレイン領域又はソース領域に印加することによりメモリセルの電荷蓄積部に電荷を注入するにあたり、この電荷蓄積部に蓄積された電荷量の増加に応じて、ドレイン領域又はソース領域に印加する書込電圧を低減するのである。この際、第1電荷注入ステップをn段階の工程に分ける場合には、閾電流値Ithに加算するオフセットαをn系統分用意し、n個の閾値Ithα各々毎に第2ベリファイST4、ST5を実行する。更に、書込電圧発生回路23で発生させるべきドレイン電圧NPDVとして、夫々異なる電圧値からなるn系統分のNPDVを用意する。