【実施例】
【0022】
図1は、半導体不揮発性メモリの全体構成を示すブロック図である。
【0023】
図1に示すように、かかる半導体不揮発性メモリは、メモリセルアレイ100、ロウデコーダ104、カラムデコーダ106及びコントローラ108を有する。
【0024】
メモリセルアレイ100には、列方向に配列された複数のビット線BL
1〜BL
M(Mは2以上の整数)及びこれと交差して行方向に配列された複数のワード線WL
1〜WL
N(Nは2以上の整数)が設けられている。ビット線BL及びワード線WLによる各交叉部にはメモリセル10が設けられている。メモリセル10は、例えばnチャネル型のMOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor)から構成されている。
【0025】
図2は、かかるメモリセル10の主要部を示す断面図である。
【0026】
図2に示す如く、p型のシリコン基板12の上面には、SiO
2からなるゲート酸化膜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、シリコン酸化膜
305からなるONO積層絶縁膜により構成される。電荷蓄積部30及び電荷蓄積部32は、それぞれエクステンション領域18および19からゲート電極17の側壁に亘って延在している。これにより、電荷の蓄積および保持を確実に行うことができる。また、電荷蓄積部30及び電荷蓄積32は、物理的に連続せず、互いに離間して形成されているので、各電荷蓄積部に対して別個独立に電荷を蓄積保持できる。
【0027】
かかる構成により、各メモリセル10は、ワード線WLを介してそのゲート端子に印加された電圧、及び一対のビット線BLを介してドレイン端子及びソース端各々に印加された電圧に応じて、このビット線BLを介してデータの書込及び読出が為されることになる。
【0028】
コントローラ108は、メモリセルアレイ100に書き込むべきデータが外部より入力されると、データ書き込みプログラム(後述する)を実行し、その書き込み先を示すアドレス情報及びワード線WLに印加すべき電圧を指定する情報を含む制御信号を、ロウデコーダ104に供給する。更に、コントローラ108は、このアドレス情報及び書き込むべきデータに対応したビット線BLに印加すべき電圧を指定する電圧指定信号VT(後述する)を含む制御信号を、カラムデコーダ106に供給する。この際、コントローラ108は、後述するように、第1ベリファイ(verification)処理における検証をパス(合格)、つまり書込データの値に対応した十分な量の電荷蓄積が為されたと判定した場合には論理レベル1、電荷蓄積量が不十分であると判定した場合には論理レベル0の第1ベリファイ結果信号Verifyをカラムデコーダ106に供給する。また、コントローラ108は、後述するように、第2ベリファイ処理における検証をパスした場合には論理レベル1、それ以外の場合には論理レベル0の第2ベリファイ結果信号VerifyNをカラムデコーダ106に供給する。尚、第1ベリファイ処理では、後述するように、書込データの値に対応した閾電流値I
thをリファレンス電流値I
refとして用いて電荷蓄積量の検証を行い、第2ベリファイ処理では、この閾電流値I
thにオフセットαを加えたものをリファレンス電流値I
refとして用いて電荷蓄積量の検証を行うものである。
【0029】
ロウデコーダ104は、コントローラ108より供給された制御信号に基づいて、メモリセルアレイ100に形成されているワード線WL
1〜WL
Nの内の1のワード線WLを選択し、このワード線WLにゲート電圧を供給する。これにより、ゲート電圧が供給された1のワード線WLに接続されているメモリセル10の各々がデータの書込又は読出対象となる。
【0030】
カラムデコーダ106は、コントローラ108より供給された制御信号に基づいて少なくとも1対のビット線BLを選択し、選択したビット線BLに接続されたメモリセル10のドレインソース端子間に書込電圧を供給する。又、カラムデコーダ106は、ビット線BLを接地電位に設定することにより、メモリセル10の電荷蓄積部32に蓄積された電荷に伴う電流をビット線BL上に送出させ、このビット線BL上に送出された電流値を表す読出電流値をコントローラ108に供給する。
【0031】
図3は、カラムデコーダ106に含まれるデータ書き込み回路の一例を示すブロック図である。尚、
図3においては、メモリセルアレイ100に形成されているビット線BL
1〜BL
Mの各々毎に設けられているMブロック分のデータ書き込み回路の内の1ブロック分の構成を示すものである。
【0032】
図3に示すように、かかるデータ書き込み回路は、プログラムデータレジスタ21、状態判定回路22、書込電圧発生回路23、及びレベルシフタ24
1〜24
6からなる。
【0033】
プログラムデータレジスタ21は、外部供給されたデータの内から、そのビット線BLに接続されているメモリセル10に書き込むべきビット桁に対応した2ビットのデータ(以下、書込データと称する)を抽出し、この書込データによって表される値を3ビットで表すプログラムデータDT0〜DT2を生成する。
【0034】
例えば書込データが"00"を表す場合には、プログラムデータレジスタ21は、
DT0:1
DT1:0
DT2:0
なるプログラムデータDT0〜DT2を生成する。
【0035】
又、書込データが"01"を表す場合には、プログラムデータレジスタ21は、
DT0:0
DT1:1
DT2:0
なるプログラムデータDT0〜DT2を生成する。
【0036】
又、書込データが"10"を表す場合には、プログラムデータレジスタ21は、
DT0:0
DT1:0
DT2:1
なるプログラムデータDT0〜DT2を生成する。
【0037】
又、書込データが"11"を表す場合には、プログラムデータレジスタ21は、
DT0:0
DT1:0
DT2:0
なるプログラムデータDT0〜DT2を生成する。
【0038】
プログラムデータレジスタ21は、上記したプログラムデータDT0〜DT2を保持すると共に、これを状態判定回路22に供給する。
【0039】
状態判定回路22は、
図4に示す真理値表に従って、上記プログラムデータDT0〜DT2の値、及び第1ベリファイ結果信号Verify及び
第2ベリファイ結果信号VerifyNに基づいて、電荷蓄積部30及び32の書込状態を判定し、その判定結果を示す判定結果信号S0〜S2及びNS0〜NS2を、
図3に示す如くレベルシフタ24
1〜24
6に夫々供給する。
【0040】
書込電圧発生回路23は、書込データとして"00"を書き込む際に用いるドレイン電圧として、ドレイン電圧PDV0と、このドレイン電圧PDV0よりも低いドレイン電圧NPDV0とを生成する。また、書込電圧発生回路23は、書込データとして"01"を書き込む際に用いるドレイン電圧として、ドレイン電圧PDV1と、このドレイン電圧PDV1よりも低いドレイン電圧NPDV1とを生成する。更に、書込電圧発生回路23は、書込データとして"
10"を書き込む際に用いるドレイン電圧として、ドレイン電圧PDV2と、このドレイン電圧PDV2よりも低いドレイン電圧NPDV2とを生成する。書込電圧発生回路23は、これらドレイン電圧PDV0〜PDV2、NPDV0〜N
PDV2を、
図3に示す如くレベルシフタ24
1〜24
6に夫々供給する。
【0041】
レベルシフタ24
1〜24
6の各々は、夫々に供給される判定結果信号S0〜S2、NS0〜NS2が論理レベル1である場合には、そのレベルシフタ24に供給されたドレイン電圧(PDV0〜2、NPDV0〜2)を書込電圧としてビット線BLに印加する。尚、レベルシフタ24
1〜24
6の各々は、夫々に供給される判定結果信号S0〜S2、NS0〜NS2が論理レベル0である場合には、ビット線BLをハイインピーダンス状態に設定する。よって、例えば、
図4に示されるように、判定結果信号S0〜S2及びNS0〜NS2の内でS0のみが論理レベル1、その他の全ての判定結果信号が論理レベル0である場合には、レベルシフタ24
1〜24
6の内の24
3のみが、この24
3に供給されているドレイン電圧PDV0をビット線BLに印加する。更に、レベルシフタ24
1〜24
6の各々は、コントローラ108から供給された電圧指定信号VTに応じて、これらドレイン電圧PDV0〜PDV2、NPDV0〜N
PDV2各々の電圧値を変更する。
【0042】
以下に、
図3に示す構成を有するデータ書き込み回路の動作について説明する。
【0043】
図5は、かかるデータ書き込み回路を動作させるべく、コントローラ108によって実行されるデータ書き込みプログラムの一例を示す図である。
【0044】
このデータ書き込みプログラムは、書込データに基づくプログラムデータDT0〜DT2がプログラムデータレジスタ21に保持される度に、書き込み対象となったワード線WLに接続されているメモリセル10の各々対して個別に実行される。
【0045】
図5において、先ず、コントローラ108は、リフアレンス電流値I
refとして、上記した書込データの値("00"、"01"、"10"、又は"11")に対応した閾電流値I
thを設定する(ステップST1)。例えば、書込データの値である"00"、"01"、"10"の各々に対応した、夫々異なる値を有する第1〜第3の閾電流値I
thが割り当てられており、これら第1〜第3の閾電流値I
thの内から、実際に供給された書込データの値に対応した閾電流値I
thが選択され、この選択された閾電流値I
thが設定されるのである。この際、上記閾電流値I
thとは、書込データの値に対応した十分な量の電荷(第1電荷量)がメモリセル10の電荷蓄積部30(又は32)に蓄積されている際に、このメモリセル10から読み出された電流値として取り得る最低の電流値である。つまり、閾電流値I
thとは、電荷蓄積部30(又は32)に蓄積されている電荷の量が、書込データの値に対応した第1電荷量に達したが否かを判別する為の閾値なのである。
【0046】
次に、コントローラ108は、ロウデコーダ104によって書込対象となる1つのワード線WLに高電圧を印加させると共に、カラムデコーダ106によってビット線BLを接地電位に設定させることにより、電荷蓄積部32に蓄積された電荷に伴う電流(以下、読出電流と称する)をビット線BL上に読み出す(ステップST2)。この際、カラムデコーダ106は、ビット線BL上に読み出された読出電流を検出し、その電流値を示す読出電流値RDをコントローラ108に供給する。
【0047】
次に、コントローラ108は、この読出電流値RDがリフアレンス電流値I
refよりも低いか否かを判定する、第1ベリファイを実行する(ステップST3)。すなわち、第1ベリファイでは、量電荷蓄積部32に蓄積された電荷量が書込データに対応した量を超えたた否かを、その読出電流値に基づいて判定するのである。この際、電荷蓄積部32に蓄積された電荷量が書込データに対応した量を超えたと判定された場合に、この第1ベリファイをパスしたことになる。
【0048】
上記ステップST3において、読出電流値RDがリフアレンス電流値I
refよりも大であると判定された場合、つまり電荷蓄積部32に蓄積された電荷量が不十分であると判定された場合、コントローラ108は、リフアレンス電流値I
refとして、上記閾電流値I
thに所定のオフセットαを加算して得られた閾電流値(I
th+α)を設定する(ステップST4)。尚、閾電流値(I
th+α)とは、上記した如き書込データの値に対応した第1電荷量よりも低い第2電荷量の分だけ電荷蓄積部に電荷が蓄積されたか否かを、読出電流に基づいて判別する為の閾値である。
【0049】
次に、コントローラ108は、閾電流値(I
th+α)を有するリフアレンス電流値I
refよりも上記読出電流値RDが低いか否かを判定する、第2ベリファイを実行する(ステップST5)。すなわち、第2ベリファイでは、電荷蓄積部32に蓄積された電荷量が、書込データに対応した第1電荷量よりもオフセットαの分だけ小なる第2電荷量を超えたか否かを、その読出電流値に基づいて判定するのである。この際、電荷蓄積部32に蓄積された電荷量が、書込データに対応した第1電荷量よりもオフセットαの分だけ小なる第2電荷量を超えたと判定された場合に、この第2ベリファイをパスしたことになるのである。
【0050】
上記ステップST5において、読出電流値RDがリフアレンス電流値I
refよりも大であると判定された場合、つまり第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:1
DT1:0
DT2:0
である場合には、論理レベル1の判定結果信号S0に応じてレベルシフタ24
3が、書込電圧としてのドレイン電圧PDV0をビット線BLに印加する。
【0051】
また、プログラムデータDT0〜DT2が例えば書込データ"01"に対応した論理レベル、つまり、
DT0:0
DT1:1
DT2:0
である場合には、論理レベル1の判定結果信号S1に応じてレベルシフタ24
2が、書込電圧としてのドレイン電圧PDV1をビット線BLに印加する。
【0052】
また、プログラムデータDT0〜DT2が例えば書込データ"10"に対応した論理レベル、つまり、
DT0:0
DT1:0
DT2:1
である場合には、論理レベル1の判定結果信号S2に応じてレベルシフタ24
1が、書込電圧としてのドレイン電圧PDV2をビット線BLに印加する。
【0053】
上記の如き書込電圧(PDV0、PDV1、又はPDV2)の印加により、選択されたワード線WL及びビット線BLの交叉部に形成されているメモリセル10の電荷蓄積部32には、その書込電圧値に対応した電荷が注入される。
【0054】
かかるステップST6の実行後、コントローラ108は、以下のステップST7の実行に移る。すなわち、コントローラ108は、レベルシフタ24
1〜24
6に対して、現在出力しているドレイン電圧PDV0〜PDV2各々の電圧値を所定のステップ電圧VSP1だけ高めると共に、ドレイン電圧NPDV0〜N
PDV2各々の電圧値を所定のステップ電圧VSP2だけ高めるべき電圧指定信号VTを供給する(ステップST7)。
【0055】
ステップST7の実行後、コントローラ108は、上記ステップST1の実行に戻り、前述した如き動作を繰り返し実行する。
【0056】
すなわち、ステップST5において、リフアレンス電流値I
refよりも読出電流値RDが低い、つまり電荷蓄積部32に蓄積された電荷量が、書込データに対応した第1電荷量よりもオフセットαの分だけ小なる第2電荷量を超えたと判定されるまで、上記ステップST1〜ST7なる処理を繰り返し実行するのである。要するに、第2ベリファイをパスするまで、ビット線BLに印加するドレイン電圧PDVを段階的に増加させつつ、メモリセル10から読み出された読出電流値に基づいて、電荷蓄積部32に蓄積された電荷量が第2電荷量に達したか否かの判定を行うのである。
【0057】
この間、ステップST5において、リフアレンス電流値I
ref(I
th+α)よりも読出電流値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:1
DT1:0
DT2:0
である場合には、論理レベル1の判定結果信号NS0に応じてレベルシフタ24
6が、書込電圧としてのドレイン電圧NPDV0をビット線BLに印加する。
【0058】
また、プログラムデータDT0〜DT2が例えば書込データ"01"に対応した論理レベル、つまり、
DT0:0
DT1:1
DT2:0
である場合には、論理レベル1の判定結果信号NS1に応じてレベルシフタ24
5が、書込電圧としてのドレイン電圧NPDV1をビット線BLに印加する。
【0059】
また、プログラムデータDT0〜DT2が例えば書込データ"10"に対応した論理レベル、つまり、
DT0:0
DT1:0
DT2:1
である場合には、論理レベル1の判定結果信号NS2に応じてレベルシフタ24
4が、書込電圧としてのドレイン電圧NPDV2をビット線BLに印加する。
【0060】
上記の如き書込電圧(NPDV0、NPDV1、又はNPDV2)の印加により、選択されたワード線WL及びビット線BLの交叉部に形成されているメモリセル10の電荷蓄積部32には、その書込電圧値に対応した電荷が注入される。
【0061】
ステップST8の実行後、コントローラ108は、上記ステップST7の実行に移り、ステップST1〜ST5、ST8、ST7なる処理を繰り返し実行する。
【0062】
すなわち、第2ベリファイをパスした場合には、ビット線BLに印加するドレイン電圧を、PDVよりも低いNPDVに切り替え(ST8)、その電圧値を段階的に増加させつつ(ST7)、メモリセル10から読み出された読出電流値RDに基づき、電荷蓄積部32に蓄積された電荷量が、書込データの値に対応した第1電荷量に達したか否かの判定(ST3)、つまり第1ベリファイを行うのである。
【0063】
この間、ステップST3において、読出電流値RDがリフアレンス電流値I
ref(閾電流値I
th)よりも低いと判定された場合、つまり書込データに対応した十分な量の電荷が電荷蓄積部32に蓄積されたと判定された場合、コントローラ108は、第1ベリファイをパスしたことを表す論理レベル1の第1ベリファイ結果信号Verifyを状態判定回路22に供給する(ステップST9)。ステップST9の実行により、第1ベリファイ結果信号Verify及び第2ベリファイ結果信号VerifyNは共に論理レベル1となるので、状態判定回路22は、
図4に示す真理値表に基づき、全てが論理レベル0となる判定結果信号S0〜S2、NS0〜NS2を得る。これにより、ビット線BLに対するドレイン電圧の印加が為されなくなるので、ビット線BLはハイインピーダンス状態に設定される。
【0064】
ステップST9の実行後、コントローラ108は、選択されたワード線WLに接続されているメモリセル10各々の内で書込対象となった全てのメモリセル10に対して、第1ベリファイ結果信号Verify及び第2ベリファイ結果信号VerifyNが共に論理レベル1となったか否かを判定する(ステップST10)。すなわち、書込対象となった全てのメモリセル10の電荷蓄積部32に、書込データに対応した十分な量の電荷が蓄積されたか否かを判定するのである。この際、ステップST10において、書込対象となった全てのメモリセル10に対する第1ベリファイ結果信号Verify及び第2ベリファイ結果信号VerifyNが論理レベル1となったと判定されるまで、書込対象となった全てのメモリセル10に対して、ステップST1〜ST10の動作を繰り返し実行する。
【0065】
以下に、
図5に示されるデータ書き込みプログラムの実行によって為されるデータ書き込み動作ついて、
図6に示す如き読出電流値の推移を表す図を参照しつつ説明する。
【0066】
先ず、初期状態時には、書込対象となったメモリセル10各々の電荷蓄積部32(又は30)には電荷の蓄積が為されていないので、各メモリセル10から読み出された読出電流として取り得る読出電流値の分布VPは、
図6(a)に示す如く、閾電流値I
thよりも大幅に大なる電流値を中心としたものとなる。よって、この初期段階では、第1ベリファイ(ST3)及び第2ベリファイ(ST5)を共にパスすることはない。
【0067】
ここで、
図5に示すステップST1〜ST7なる一連の処理を繰り返し実行することにより、ビット線BLに印加するドレイン電圧PDVをステップ電圧VSP1ずつ段階的に高めて行くと、メモリセル10の電荷蓄積部に蓄積される電荷の量が増加して行く。それに伴い各メモリセル10から読み出された読出電流値の分布VPも
図6(b)に示すように、閾電流値I
thに近づいて行く。
【0068】
この際、第2ベリファイ(ST5)において、
図6(c)に示す如く、読出電流値が、閾電流値(I
th+α)よりも低くなったと判定された場合には、ビット線BLに印加するドレイン電圧をPDVから、このPDVよりも低い電圧であるドレイン電圧NPDVに切り替える(ST8)。つまり、読出電流値が閾電流値I
thより高いものの閾電流値(I
th+α)よりも低くなった場合には、ドレイン電圧を一旦、PDVからNPDVに低下させ、このNPDVの状態から段階的に電圧を高めて行くことにより、その読出電流値を精密に閾電流値I
thに到らせるべき電荷注入動作(ST8、ST7、ST1〜ST5)に切り替えるのである。この一連の処理により、書込対象となったメモリセル10各々の内の一部において、
図6(d)に示す如く、その読出電流値が閾電流値I
thよりも低くなる、つまり書込データの値に対応した十分な量(第1電荷量)の電荷蓄積が完了する。この際、第1ベリファイ(ST3)において読出電流値が閾電流値I
thよりも低くなったと判定されるので、このメモリセル10が接続されているビット線BLはハイインピーダンス状態に設定される(ST9)。
【0069】
その後、上記ステップST8、ST7、ST1〜ST5なる一連の処理を繰り返すことにより、書込対象となった全てのメモリセル10から読み出された読出電流値が、
図6(e)に示すように閾電流値(I
th+α)よりも低くなり、やがて、
図6(f)に示すように閾電流値I
thよりも低くなる。すなわち、書込対象となった全てのメモリセル10に対して、書込データの値に対応した十分な量(第1電荷量)の電荷蓄積が完了するのである。
【0070】
以上の如く、
図5に示すプログラムによるデータ書き込みでは、先ず、書込電圧として第1のドレイン電圧PDVを印加することにより一度に多量の電荷を注入する動作を行う(第1電荷注入ステップ)。これにより、電荷蓄積部に対して書込データの値に対応した第1電荷量よりも低い第2電荷量まで迅速に電荷の蓄積を行う。ここで、電荷蓄積部に蓄積された電荷量が上記第2電荷量を超えたら、上記PDVよりも低い第2のドレイン電圧NPDVを印加することにより一度に微量の電荷を注入する動作(第2電荷注入ステップ)に切り替える。これにより、電荷蓄積量を精度良く第1電荷量に到らせるようにしている。この第2電荷注入ステップの実行によれば、各メモリセルに蓄積される電荷量のバラツキが抑制され、それ故、各メモリセルによる読出電流値の分布幅が狭くなるので、電流ウィンドウの幅を広げることが可能となる。
【0071】
このように、上記の如きデータ書き込みによれば、ドレイン・ステッピング処理だけで、迅速に且つ精度良く電荷蓄積量を所定量に到らせることが可能となる。よって、電荷蓄積量を所定量に到らせるまでの書き込み回数が比較的多くなるゲート・ステッピング処理を併用する従来のデータ書き込み方法に比べて、その書き込み回数を減らすことができるので、書込処理時間の短縮を図ることが可能となる。
【0072】
また、
図1に示される半導体不揮発性メモリにおいては、
図5に示す如きデータ書き込み処理を、ビット線BL
1〜BL
M各々に対して個別に実行するようにしている。よって、1つのワード線WL上に接続されている複数のメモリセル10の各々に対して、夫々異なる値を表す書込データを同時に書き込むことが可能となる。例えば、ビット線BL
1に接続されているメモリセル10に対して書込データ"00"の書き込みを実行している間に、ビット線BL
3に接続されているメモリセル10に対する書込データ"01"の書き込み処理を実行しつつ、ビット線BL
5に接続されているメモリセル10に対する書込データ"10"の書き込み処理を実行することができるのである。
【0073】
尚、上記実施例においては、各メモリセル10に形成されている2つの電荷蓄積部30及び32の内のドレイン側の電荷蓄積部32にデータを書き込む際の動作を説明したが、ソース側に形成されている電荷蓄積部30に対しても同様にデータの書き込みが為される。この際、第1電荷注入ステップでは、書込電圧としてソース電圧PDVをメモリセル10のソース端子に印加し、第2電荷注入ステップでは、書込電圧として、上記ソース電圧PDVよりも低いソース電圧NPDVをメモリセル10のソース端子に印加するのである。
【0074】
要するに、書込電圧としての第1電圧(PDV)をメモリセルのドレイン又はソース領域に印加することによって多量の電荷を注入する第1電荷注入ステップと、第1電圧よりも低い第2電圧(NPDV)をメモリセルのドレイン又はソース領域に印加することによって微量の電荷を注入する第2電荷注入ステップと、を実行すれば良いのである。
【0075】
また、
図5に示すデータ書き込み処理では、ドレイン電圧PDVの印加による第1電荷注入ステップと、上記PDVよりも低いドレイン電圧NPDVの印加による第2電荷注入ステップとの2段階でデータの書き込みを行うようにしているが、これを3段階以上で実行するようにしても良い。
【0076】
要するに、書込データに対応した書込電圧をメモリセルのドレイン領域又はソース領域に印加することによりメモリセルの電荷蓄積部に電荷を注入するにあたり、この電荷蓄積部に蓄積された電荷量の増加に応じて、ドレイン領域又はソース領域に印加する書込電圧を低減するのである。この際、第1電荷注入ステップをn段階の工程に分ける場合には、閾電流値I
thに加算するオフセットαをn系統分用意し、n個の閾値(I
th+α)各々毎に第2ベリファイ(ST4、ST5)を実行する。更に、書込電圧発生回路23で発生させるべきドレイン電圧NPDVとして、夫々異なる電圧値からなるn系統分のNPDVを用意する。