(57)【特許請求の範囲】
【請求項１】
夫々がビット線に接続されている電荷蓄積部を有する複数のメモリセルを含む不揮発性半導体メモリであって、
書き込むべき書込データの値に対応した量の電荷を前記電荷蓄積部に注入することによりデータの書き込みを行うデータ書込手段と、
前記データ書込手段による前記データの書き込みに先立ち、前記電荷蓄積部各々から前記ビット線を介して読出電流を送出させ、前記読出電流の最小値より大なる値を有する最大読出電流閾値よりも高い前記読出電流を送出した電荷蓄積部のみに前記読出電流が前記最大読出電流閾値を下回るまで電荷を注入する初期化書込手段と、を有することを特徴とする不揮発性半導体メモリ。
【請求項２】
前記初期化書込手段により全ての前記電荷蓄積部は前記書込データとして第１のデータ値が書き込まれた状態に初期化され、
前記データ書込手段は、前記第１のデータ値とは異なる第２のデータ値を有する書込データの書き込み対象となる電荷蓄積部に対して、前記ビット線を介して読出電流を送出させると共に当該読出電流が前記最大読出電流閾値よりも小なる第１読出電流閾値を下回るまで電荷を注入することを特徴とする請求項１記載の不揮発性半導体メモリ。
【請求項３】
前記データ書込手段は、前記第２のデータ値を有する書込データの書き込み終了後、前記第１及び第２のデータ値とは異なる第３のデータ値を有する書込データの書き込み対象となる電荷蓄積部に対して、前記ビット線を介して読出電流を送出させると共に当該読出電流が前記第１読出電流閾値よりも大であり且つ前記最大読出電流閾値よりも小なる第２読出電流閾値を下回るまで電荷を注入することを特徴とする請求項２記載の不揮発性半導体メモリ。
【請求項４】
夫々がビット線に接続されている電荷蓄積部を有する複数のメモリセルと、前記メモリセルに対するデータの書き込み制御を行う制御部と、を備えた不揮発性半導体メモリの前記制御部によって実行されるデータ書き込み方法であって、
前記電荷蓄積部各々から前記ビット線を介して読出電流を送出させ、前記読出電流の最小値より大なる値を有する最大読出電流閾値よりも高い前記読出電流を送出した電荷蓄積部のみに前記読出電流が前記最大読出電流閾値を下回るまで電荷を注入する初期化書込ステップと、
書き込むべきデータの値に対応した量の電荷を前記電荷蓄積部に注入することによりデータの書き込みを行うデータ書込ステップと、を順次実行することを特徴とするデータ書き込み方法。
【請求項５】
前記初期化書込ステップにより全ての前記電荷蓄積部は前記書込データとして第１のデータ値が書き込まれた状態に初期化され、
前記データ書込ステップは、前記第１のデータ値とは異なる第２のデータ値を有する書込データの書き込み対象となる電荷蓄積部に対して、前記ビット線を介して読出電流を送出させると共に当該読出電流が前記最大読出電流閾値よりも小なる第１読出電流閾値を下回るまで電荷を注入することを特徴とする請求項４記載のデータ書き込み方法。
【請求項６】
前記データ書込ステップは、前記第２のデータ値を有する書込データの書き込み終了後、前記第１及び第２のデータ値とは異なる第３のデータ値を有する書込データの書き込み対象となる電荷蓄積部に対して、前記ビット線を介して読出電流を送出させると共に当該読出電流が前記第１読出電流閾値よりも大であり且つ前記最大読出電流閾値よりも小なる第２読出電流閾値を下回るまで電荷を注入することを特徴とする請求項５記載のデータ書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体不揮発性メモリ及びこの半導体不揮発性メモリにおけるデータ書き込み方法に関する。
【背景技術】
【０００２】
半導体不揮発性メモリの多値化技術として、複数の閾値電圧により実現するマルチレベル方式と複数の記憶領域を持つマルチビット方式がある。マルチビット方式の半導体不揮発性メモリとして、メモリセルのゲート電極の両側面の外側に、シリコン窒化膜からなる電荷蓄積部が物理的に連続せずに構築されたものが知られている（例えば、特許文献１参照）。かかる半導体不揮発性メモリでは、上記電荷蓄積部に電荷（電子）が蓄積されていない状態が初期状態であり、この電荷が蓄積されていない状態が例えばデータ「１」に対応しており、電荷が蓄積された状態がデータ「０」に対応している。
【０００３】
この半導体不揮発性メモリに対するデータの書き込み・読み出し・消去は夫々以下の如く実施される。
【０００４】
まず、ドレイン側の電荷蓄積部に対するデータ「０」の書き込みは、ドレイン領域に正電圧、ゲート電極に正電圧、ソース領域に接地電圧を夫々印加することにより行う。これにより、ホットエレクトロンがドレイン側の電荷蓄積部に注入され、データ「０」が書き込まれることとなる。一方、ドレイン側のデータ読み出しは、ソース領域に正電圧、ゲート電極に正電圧、ドレイン領域に接地電圧を夫々印加することにより行う。この際、ドレイン側の電荷蓄積部に電荷が蓄積されていない場合には、所定閾値よりも大なる電流が読み出されるので、データ「１」が読み出されたと判別する。一方、ドレイン側の電荷蓄積部に電荷が蓄積されている場合には、読み出される電流値は所定閾値を下回るので、データ「０」が読み出されたと判別する。このように、読み出し電流値が所定閾値以上であるか否かにより、２値のデータ「０」又は「１」の判別が為される。
【０００５】
このように、上記した半導体不揮発性メモリにおいては、読み出された電流値の大きさによって、２値のデータ「０」又は「１」を判別するようにしている。
【０００６】
ところで、データ「０」及び「１」の各々に対応した読み出し電流値は、半導体不揮発性メモリに形成されている全メモリセルにおいて均一となることが望ましいが、製造上のバラツキ等により、実際にはメモリセル毎にバラツキが生じる。
【０００７】
そこで、このようなバラツキに伴いデータ「１」に対応した読み出し電流値が分布する範囲と、データ「０」に対応した読み出し電流値が分布する範囲と、の間に存在する領域（以下、電流ウィンドウと称する）内において、データ「０」及び「１」を判別する為の閾値を設定する。この際、精度良く２値のデータ「０」及び「１」の判別を行う為には、電流ウィンドウの幅が広い程良い。
【０００８】
また、上記した如き半導体不揮発性メモリのメモリセルに設けられた２つの電荷蓄積部各々に対して、４値のデータ「０」、「１」、「２」、「３」の書き込み及び読み出しを実施するようにした技術が提案されている（例えば、非特許文献１及び特許文献２参照）。ここで、読出し電流値が低いデータ「０」を２つの電荷蓄積部の内の一方（以降、ライト側の電荷蓄積部と称する）又は他方（以降、ミラー側の電荷蓄積部と称する）に書き込む場合には、最も高い第１書込電圧をゲート電極に印加する。また、データ「１」をライト側の電荷蓄積部に書き込む場合には、上記した第１書込電圧よりも低い第２書込電圧をゲート電極に印加する。また、データ「２」をライト側の電荷蓄積部に書き込む場合には、上記した第２書込電圧よりも低い第３書込電圧をゲート電極に印加する。尚、データ「３」に関しては、データ書き込みを行わない。
【０００９】
上記した如き４値のデータを書き込むにあたり、この半導体不揮発性メモリでは、先ず、第１〜第３書込電圧の内から電荷蓄積部に書き込むべきデータ（以下、書込データと称する）の値に対応した書込電圧を選択してゲート電極に印加する。そして、この書込電圧を段階的に徐々に増加させつつデータの読み出しを行い、その読出電流値が所定閾値よりも低下したか否かを検証する（ベリファイ処理）。この際、読出電流値が所定閾値より低下したらメモリセルに対する書き込みが終了したと判断する。尚、上記した第１〜第３書込電圧は、書込みが必要となる全ての電荷蓄積部に対して、上記ベリファイ処理での書込電圧の増加回数（書込回数）が略同一となるような電圧値に夫々設定されている。これにより、各データ毎の書込み回数の差が小さくなり、同一メモリセルにおけるライト側の電荷蓄積部で行われたデータ書込みに伴うミラー側の電荷蓄積部での読出し電流値の低下が抑制されるので、４値のデータ各々に対応した読み出し電流値を夫々判別し得る電流ウィンドウを確保することが可能となる。
【００１０】
しかしながら、製造プロセスのバラツキ等により、メモリセルの初期状態（データ「３」が記憶されている状態）での読出電流の分布が所望の範囲より広がってしまうと、それに伴い読出電流の最大値も大きくなる。よって、この際、読出電流が最大となる状態、つまり初期状態（データ「３」が記憶されている状態）にある電荷蓄積部に、読出電流値が最も低い状態となるデータ「０」を書き込む場合には、ベリファイ処理での書込回数が増加する。
【００１１】
従って、例えばミラー側にデータ「２」が書き込まれた状態にある電荷蓄積部のライト側にデータ「０」を書き込むにあたり、ライト側の電荷蓄積部に対する書込回数が増加すると、ミラー側の電荷蓄積部から読み出さされる読出電流が低下してしまい、電流ウィンドウの幅が狭くなる。これにより、データの読み出し精度が低下するという問題が生じた。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】Ｂｏａｚ Ｅｉｔａｎほか１１名著、“４−ｂｉｔ ｐｅｒ Ｃｅｌｌ ＮＲＯＭ Ｒｅｌｉａｂｉｌｉｔｙ”、ＩＥＥＥ Ｉｎｔｅｒｎａｔｉｏｎａｌ Ｅｌｅｃｔｒｏｎ Ｄｅｖｉｃｅｓ Ｍｅｅｔｉｎｇ ２００５：ｉｅｄｍ Ｔｅｃｈｎｉｃａｌ Ｄｉｇｅｓｔ：Ｗａｓｈｉｎｇｔｏｎ，ＤＣ：Ｄｅｃｅｍｂｅｒ ５−７，２００５、米国、ＩＥＥＥ、２００５年、Ｓｅｓｓｉｏｎ ２２．１
【特許文献】
【００１３】
【特許文献１】特開２００５−６４２９５
【特許文献２】特開２００８−８５１９６
【発明の概要】
【発明が解決しようとする課題】
【００１４】
本発明は、データ書き込み時における書込回数を減らし且つ読み出し精度を高めることが可能な半導体不揮発性メモリ及びデータ書き込み方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明による半導体不揮発性メモリは、夫々がビット線に接続されている電荷蓄積部を有する複数のメモリセルを含む不揮発性半導体メモリであって、書き込むべき書込データの値に対応した量の電荷を前記電荷蓄積部に注入することによりデータの書き込みを行うデータ書込手段と、前記データ書込手段による前記データの書き込みに先立ち、前記電荷蓄積部各々から前記ビット線を介して読出電流を送出させ、前記読出電流の最小値より大なる値を有する最大読出電流閾値よりも高い前記読出電流を送出した電荷蓄積部のみに前記読出電流が前記最大読出電流閾値を下回るまで電荷を注入する初期化書込手段と、を有する。
【００１６】
また、本発明によるデータ書き込み方法は、夫々がビット線に接続されている電荷蓄積部を有する複数のメモリセルと、前記メモリセルに対するデータの書き込み制御を行う制御部と、を備えた不揮発性半導体メモリの前記制御部によって実行されるデータ書き込み方法であって、前記電荷蓄積部各々から前記ビット線を介して読出電流を送出させ、前記読出電流の最小値より大なる値を有する最大読出電流閾値よりも高い前記読出電流を送出した電荷蓄積部のみに前記読出電流が前記最大読出電流閾値を下回るまで電荷を注入する初期化書込ステップと、書き込むべきデータの値に対応した量の電荷を前記電荷蓄積部に注入することによりデータの書き込みを行うデータ書込ステップと、を順次実行する。
【発明の効果】
【００１７】
本発明においては、データの書き込みを行う前に、電荷蓄積部各々から読出電流を送出させ、読出電流が最大読出電流閾値よりも大となる電荷蓄積部に、この読出電流が最大読出電流閾値を下回るまで電荷を注入する初期化書込を行うようにしている。
【００１８】
よって、このような初期化書込を実行しない場合に比して、データ書き込み時に電荷蓄積部に注入する電荷の総量を少なくすることが可能となる。従って、電荷を注入する回数、つまりデータ書き込み回数が少なくなる分だけデータ書き込みに費やされる時間が短縮される。また、書き込み回数が全体的に少なくなるので、単一のメモリセルに２つの電荷蓄積部が設けられているメモリにアクセスする場合に、電荷蓄積部の内の一方の電荷蓄積部への書き込みに伴う、他方の電荷蓄積部の読出電流の低下が抑制されるようになる。よって、データの読み出し精度の低下を抑制することが可能となる。更に、上記した初期化書込によれば、初期状態での全電荷蓄積部における蓄積電荷量のバラツキが小さくなる。よって、かかる初期化書込後、単一のメモリセルに設けられている２つの電荷蓄積部に異なるデータが同時に書き込まれる場合、電荷蓄積部の内の一方の側だけに書き込みが継続する時間が短くなるので、読出電流値の低下を抑制することが可能となる。
【図面の簡単な説明】
【００１９】
【図１】半導体不揮発性メモリの内部構成を示すブロック図である。
【図２】メモリセル１０の構造を示す断面図である。
【図３】データ書き込みプログラムによる制御手順を示すフローチャートである。
【図４】初期化書込ルーチンを示すフローチャートである。
【図５】初期状態及びデータ「０」〜「３」毎の読出電流の分布を表す図である。
【図６】データ「０」書き込みルーチンを示す図である。
【図７】データ「１」書き込みルーチンを示す図である。
【図８】データ「２」書き込みルーチンを示す図である。
【図９】初期化書込による作用効果を説明する為の図である。
【図１０】走査電圧ＶＳの電圧値を下げた場合における、読出電流閾値Ｉｒｅｆ４と、初期状態時の読出電流の分布ＡＰとの相対的な位置関係を示す図である。
【発明を実施するための形態】
【００２０】
本発明に係る半導体不揮発性メモリにおいては、書き込むべきデータの値に対応した量の電荷を電荷蓄積部に注入する（Ｓ２１〜Ｓ２７、Ｓ３１〜Ｓ３７、又はＳ４１〜Ｓ４７）データ書き込み（Ｓ２〜Ｓ４）に先立ち、以下の如き初期化書込を行う（Ｓ１）。すなわち、メモリセル（１０）に設けられている電荷蓄積部（３０、３２）の各々から読出電流（ＲＤ）を送出させ（Ｓ１２）、読出電流が最大読出電流閾値（Ｉｒｅｆ４）よりも大となる電荷蓄積部に、この読出電流が最大読出電流閾値を下回るまで電荷を注入する（Ｓ１３〜Ｓ１５）。
【実施例】
【００２１】
図１は、４値のデータを記憶可能な半導体不揮発性メモリの全体構成を示すブロック図である。
【００２２】
図１に示すように、かかる半導体不揮発性メモリは、メモリセルアレイ１００、ロウデコーダ１０４、カラムデコーダ１０６及びコントローラ１０８を有する。
【００２３】
メモリセルアレイ１００には、列方向に配列された複数のビット線ＢＬ１〜ＢＬＭ（Ｍは２以上の整数）及びこれと交叉して行方向に配列された複数のワード線ＷＬ１〜ＷＬＮ（Ｎは２以上の整数）が設けられている。ビット線ＢＬ及びワード線ＷＬによる各交叉部にはメモリセル１０が設けられている。メモリセル１０は、例えばｎチャネル型のＭＯＳＦＥＴ（Metal-Oxide-Semiconductor Field-Effect Transistor)から構成されている。
【００２４】
図２は、かかるメモリセル１０の主要部を示す断面図である。
【００２５】
図２に示す如く、ｐ型のシリコン基板１２の上面には、ＳｉＯ２からなるゲート酸化膜１６を介してポリシリコンからなるゲート電極１７（以下、ゲート端子とも言う）が形成されている。このゲート電極１７が図１に示すようにワード線ＷＬに接続されている。シリコン基板１２表面のゲート電極１７を挟む位置にｎ型不純物を高濃度に含有するソース領域１３およびドレイン領域１４が形成されている。これらソース領域１３（以下、ソース端子とも言う）及びドレイン領域１４（以下、ドレイン端子とも言う）が夫々、図１に示す如く互いに異なるビット線ＢＬに接続されている。ゲート電極１７直下のシリコン基板１２の表面領域はＭＯＳＦＥＴの動作時において電流路が形成されるチャンネル領域１５である。チャンネル領域１５とソース領域１３およびドレイン領域１４との間にはソース領域１３およびドレイン領域１４に隣接して比較的不純物濃度の低いｎ型のエクステンション領域１８および１９が形成されている。このエクステンション領域１８および１９は、後述する電荷蓄積部に効率的に電荷を注入するために設けられるものである。ソース側のエクステンション領域１８の上部には電荷蓄積部３０が設けられ、ドレイン側のエクステンション領域１９の上部には電荷蓄積部３２が設けられている。電荷蓄積部３０及び３２の各々は、シリコン酸化膜３０１、シリコン窒化膜３０３、シリコン酸化膜３０５からなるＯＮＯ積層絶縁膜により構成される。電荷蓄積部３０及び電荷蓄積部３２は、それぞれエクステンション領域１８および１９からゲート電極１７の側壁に亘って延在している。これにより、電荷の蓄積および保持を確実に行うことができる。また、電荷蓄積部３０及び電荷蓄積部３２は、物理的に連続せず、互いに離間して形成されているので、各電荷蓄積部に対して別個独立に電荷を蓄積保持できる。この際、電荷蓄積部に蓄積された電荷量に応じて、電荷蓄積部３０及び３２の各々に、４値のデータ「０」〜「３」の記憶が為される。すなわち、蓄積された電荷量が第１閾値より大となる場合にはデータ「０」、第１閾値よりも小であり且つ第２閾値よりも大となる場合にはデータ「１」、第２閾値よりも小であり且つ第３閾値よりも大となる場合にはデータ「２」、第３閾値よりも小であり且つ初期最小電荷量（後述する）より大なる場合にはデータ「３」の記憶状態となる。尚、メモリセル１０の電荷蓄積部３０及び３２各々の初期状態では電荷の蓄積量は第３閾値よりも小である。
【００２６】
かかる構成により、メモリセル１０の各々は、ワード線ＷＬを介してそのゲート端子に印加された電圧、及び一対のビット線ＢＬを介してドレイン端子及びソース端各々に印加された電圧に応じて、４値のデータ「０」〜「３」の書き込み及び読み出しを行う。
【００２７】
ロウデコーダ１０４は、コントローラ１０８より供給された制御信号に基づいて、メモリセルアレイ１００に形成されているワード線ＷＬ１〜ＷＬＮに書込電圧又は走査電圧を印加する。
【００２８】
カラムデコーダ１０６は、コントローラ１０８より供給された制御信号に基づいて、メモリセルアレイ１００に形成されているビット線ＢＬ１〜ＢＬＭに、接地電位、読出設定電圧又は書込設定電圧を印加する。又、カラムデコーダ１０６は、ビット線ＢＬに接地電位を印加した際に、このビット線ＢＬに接続されているメモリセル１０の電荷蓄積部（３０又は３２）に蓄積された電荷に伴う電流をビット線ＢＬ上に送出させ、このビット線ＢＬ上に送出された電流値を表す読出電流値をコントローラ１０８に供給する。
【００２９】
コントローラ１０８は、メモリセルアレイ１００に書き込むべき４値のデータ（以下、書込データと称する）が外部より入力されると、以下の如きデータ書き込みプログラム（後述する）を実行する。
【００３０】
図３は、かかるデータ書き込みプログラムによる制御手順を示すフローチャートである。
【００３１】
図３において、先ず、コントローラ１０８は、メモリセルアレイ１００に形成されている全てのメモリセル１０の電荷蓄積部３０及び３２に対して、蓄積されている電荷量を初期化すべき初期化書込ルーチンを行う（ステップＳ１）。
【００３２】
図４は、かかる初期化書込ルーチンを示すフローチャートである。
【００３３】
図４において、先ず、コントローラ１０８は、先頭アドレスを示す「１」を、アクセスアドレスＡとして内蔵レジスタ（図示せぬ）に記憶させる（ステップＳ１１）。
【００３４】
次に、コントローラ１０８は、アクセスアドレスＡにて示されるアドレスに属するメモリセル１０各々の電荷蓄積部３０及び３２からデータを読み出すべき制御信号をロウデコーダ１０４及びカラムデコーダ１０６に供給する（ステップＳ１２）。ステップＳ１２の実行により、ロウデコーダ１０４は、アクセスアドレスＡに対応したワード線ＷＬに走査電圧ＶＳを印加する。また、ステップＳ１２の実行により、カラムデコーダ１０６は、ビット線ＢＬ１〜ＢＬＭの内の奇数番目に配置されているビット線ＢＬ各々に接地電位（０ボルト）を印加しつつ、偶数番目に配置されているビット線ＢＬ各々に読出設定電圧ＶＲを印加する。その後、カラムデコーダ１０６は、偶数番目に配置されているビット線ＢＬ各々に接地電位（０ボルト）を印加しつつ、奇数番目に配置されているビット線ＢＬ各々に読出設定電圧ＶＲを印加する。上記したカラムデコーダ１０６による一連の動作により、アクセスアドレスＡに対応したワード線ＷＬに接続されているメモリセル１０各々の電荷蓄積部３０及び３２からビット線ＢＬ１〜ＢＬＭを介して夫々の蓄積電荷量に対応した読出電流ＲＤ１〜ＲＤＭが送出される。尚、電荷蓄積部（３０又は３２）に蓄積された電荷の量が大なるほど、読出電流ＲＤ値は小さくなる。
【００３５】
次に、コントローラ１０８は、ビット線ＢＬ１〜ＢＬＭを介して送出された読出電流ＲＤ１〜ＲＤＭの全てが、図５に示す如き読出電流閾値Ｉｒｅｆ４よりも低いか否かを判定する（ステップＳ１３）。尚、読出電流閾値Ｉｒｅｆ４は、電荷蓄積部（３０、３２）に所定の初期最小電荷量ＱＭＩＮの電荷が蓄積されている場合に、この電荷蓄積部から送出し得る読出電流ＲＤの値である。すなわち、図５に示す如く読出電流閾値Ｉｒｅｆ４は初期最小電荷量ＱＭＩＮに対応しており、上記ステップＳ１３において読出電流ＲＤが読出電流閾値Ｉｒｅｆ４よりも高いと判定された場合には、電荷蓄積部（３０、３２）の蓄積電荷の量が初期最小電荷量ＱＭＩＮよりも小である。また、読出電流閾値Ｉｒｅｆ４は、後述する第１〜第３の読出電流閾値としての読出電流閾値Ｉｒｅｆ１〜Ｉｒｅｆ３のいずれよりも大なる値を有する最大読出電流閾値である。
【００３６】
かかるステップＳ１３において、読出電流ＲＤ１〜ＲＤＭの全てが読出電流閾値Ｉｒｅｆ４より低い状態にはないと判定された場合、つまり読出電流閾値Ｉｒｅｆ４よりも高い読出電流ＲＤが１つでも存在する場合、コントローラ１０８は、以下のステップＳ１４を実行する。つまり、コントローラ１０８は、読出電流閾値Ｉｒｅｆ４よりも高い読出電流ＲＤを送出したメモリセル１０に対して、初期化用書込電圧ＶＧＩＮを用いた書き込みを実施させるべき制御信号をロウデコーダ１０４及びカラムデコーダ１０６に供給する（ステップＳ１４）。ステップＳ１４の実行により、ロウデコーダ１０４は、アクセスアドレスＡに対応したワード線ＷＬに初期化用書込電圧ＶＧＩＮを印加する。また、ステップＳ１４の実行により、カラムデコーダ１０６は、ビット線ＢＬ１〜ＢＬＭの内で、上記した読出電流閾値Ｉｒｅｆ４よりも高い読出電流ＲＤが送出されたビット線ＢＬに書込設定電圧ＶＷを印加しつつ、その他のビット線ＢＬには接地電位（０ボルト）を印加する。すなわち、かかるステップＳ１４の実行により、読出電流閾値Ｉｒｅｆ４よりも高い読出電流ＲＤを送出したメモリセル１０、つまり蓄積電荷の量が初期最小電荷量ＱＭＩＮよりも小なる状態にある電荷蓄積部（３０、３２）には、初期化用書込電圧ＶＧＩＮの印加に応じた電荷が注入される。
【００３７】
ステップＳ１４の実行後、コントローラ１０８は、初期化用書込電圧ＶＧＩＮに電圧ｖを加算したものを新たな初期化用書込電圧ＶＧＩＮとして設定する（ステップＳ１５）。かかるステップＳ１５の実行後、コントローラ１０８は、上記ステップＳ１２の実行に戻って前述した如き動作を繰り返し実行する。
【００３８】
すなわち、読出電流ＲＤ１〜ＲＤＭの全てが読出電流閾値Ｉｒｅｆ４よりも低い状態になるまで、つまり全ての電荷蓄積部に初期最小電荷量ＱＭＩＮよりも大なる量の電荷が蓄積されるまで、初期化用書込電圧ＶＧＩＮを段階的に増加させつつ電荷蓄積部（３０、３２）に電荷を注入するという、ベリファイ処理（Ｓ１２〜Ｓ１５）を実行するのである。
【００３９】
この間、上記ステップＳ１３において、読出電流ＲＤ１〜ＲＤＭの全てが読出電流閾値Ｉｒｅｆ４よりも低いと判定された場合、コントローラ１０８は、アクセスアドレスＡの内容を「１」だけインクリメントしたものを新たなアクセスアドレスＡとして内蔵レジスタに上書き記憶する（ステップＳ１６）。かかるステップＳ１６の実行後、コントローラ１０８は、アクセスアドレスＡがメモリセルアレイ１００の最終アドレスよりも大であるか否かを判定する（ステップＳ１７）。ステップＳ１７においてアクセスアドレスＡが最終アドレス以下であると判定された場合には、コントローラ１０８は、上記ステップＳ１２の実行に戻り前述した如き動作を繰り返し実行する。一方、ステップＳ１７においてアクセスアドレスＡが最終アドレスより大であると判定された場合には、コントローラ１０８は、この初期化書込ルーチンを終了し、図３に示す如きデータ書き込みプログラムの実行に戻る。
【００４０】
かかる初期化書込ルーチンの実行により、メモリセルアレイ１００に形成されている全てのメモリセル１０の電荷蓄積部（３０、３２）は、読出電流閾値Ｉｒｅｆ４よりも低い読出電流を送出し得る程度の電荷量が蓄積された状態、つまり初期最小電荷量ＱＭＩＮよりも大なる量の電荷が蓄積された状態に初期化される。例えば、初期化書込ルーチンの実行前の段階でメモリセル１０各々による読出電流の分布が図５に示す如き読出電流閾値Ｉｒｅｆ４を含んで左右に広がる形態を有する分布ＡＰである場合、この初期化書込ルーチンの実行により、その分布は、図５に示す如き読出電流閾値Ｉｒｅｆ４を最大とする読出電流の分布Ｂ３に遷移する。この際、これら分布ＡＰ及びＢ３は、全ての電荷蓄積部における蓄積電荷量の分布に対応している。よって、図５に示すように、分布ＡＰでの最小読出電流ＩＭに対応した最大電荷量、及び分布Ｂ３での最大の電荷量は共に初期最大電荷量ＱＭＡＸであるものの、分布Ｂ３での最小の電荷量は、図５に示すように初期最小電荷量ＱＭＩＮに底上げされる。
【００４１】
要するに、上記初期化書込ルーチンの実行により、メモリセル１０に設けられている電荷蓄積部（３０、３２）の各々から読出電流ＲＤを送出させ、その読出電流が読出電流閾値Ｉｒｅｆ４よりも大となる電荷蓄積部に、読出電流ＲＤが読出電流閾値Ｉｒｅｆ４を下回るまで電荷を注入するのである。これにより、電荷蓄積部（３０、３２）各々の内で蓄積電荷量が初期最小電荷量ＱＭＩＮに満たないものに対して、その蓄積電荷量が少なくとも初期最小電荷量に到るまで電荷が注入されるので、全ての電荷蓄積部における蓄積電荷量の最小量が上記初期最小電荷量ＱＭＩＮに底上げされる。この際、図５に示す如き分布Ｂ３に含まれる読出電流ＲＤを送出し得る電荷量の蓄積状態が、第１のデータ値としてのデータ「３」の記憶状態となる。
【００４２】
かかる初期化書込ルーチン（Ｓ１）の実行後、コントローラ１０８は、外部入力された４値の書込データの内で最も読出電流値が大となるデータ「０」の書き込み対象となる電荷蓄積部だけにデータ「０」を書き込ませるデータ「０」書込ルーチンを行う（ステップＳ２）。
【００４３】
図６は、データ「０」書込ルーチンを示すフローチャートである。
【００４４】
図６において、先ず、コントローラ１０８は、先頭アドレスを示す「１」を、アクセスアドレスＡとして内蔵レジスタに記憶させる（ステップＳ２１）。
【００４５】
次に、コントローラ１０８は、アクセスアドレスＡにて示されるアドレスに属し、且つデータ「０」の書込対象となるメモリセル１０各々の電荷蓄積部（３０、３２）からデータを読み出すべき制御信号をロウデコーダ１０４及びカラムデコーダ１０６に供給する（ステップＳ２２）。ステップＳ２２の実行により、ロウデコーダ１０４は、アクセスアドレスＡに対応したワード線ＷＬに走査電圧ＶＳを印加する。また、ステップＳ２２の実行により、カラムデコーダ１０６は、ビット線ＢＬ１〜ＢＬＭの内でデータ「０」の書込対象となるメモリセル１０が接続されている一対のビット線ＢＬの内の一方に接地電位（０ボルト）、他方に読出設定電圧ＶＲを印加する。これにより、アクセスアドレスＡに属しており且つデータ「０」の書込対象となるメモリセル１０の電荷蓄積部（３０、３２）から、ビット線ＢＬを介して読出電流ＲＤが送出される。
【００４６】
次に、コントローラ１０８は、ビット線ＢＬを介して送出された読出電流ＲＤの全てが、図５に示す如き読出電流閾値Ｉｒｅｆ１よりも低いか否かを判定する（ステップＳ２３）。尚、読出電流閾値Ｉｒｅｆ１とは、蓄積された電荷量がデータ「０」に対応した量を満たすか否かを判定する為の上記第１閾値に対応した第１の読出電流閾値であり、上記した最大読出電流閾値としての読出電流閾値Ｉｒｅｆ４よりも小なる値を有する。
【００４７】
かかるステップＳ２３において、読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ１より低い状態にはないと判定された場合、つまり読出電流閾値Ｉｒｅｆ１よりも高い読出電流ＲＤが１つでも存在する場合、コントローラ１０８は、以下のステップＳ２４を実行する。つまり、コントローラ１０８は、読出電流閾値Ｉｒｅｆ１よりも高い読出電流ＲＤを送出したメモリセル１０に対して、その電荷蓄積部をデータ「０」の記憶状態に設定する為の書込電圧ＶＧ０を用いた書き込みを実施させるべき制御信号をロウデコーダ１０４及びカラムデコーダ１０６に供給する（ステップＳ２４）。ステップＳ２４の実行により、ロウデコーダ１０４は、アクセスアドレスＡに対応したワード線ＷＬに書込電圧ＶＧ０を印加する。また、ステップＳ２４の実行により、カラムデコーダ１０６は、ビット線ＢＬ１〜ＢＬＭの内で、上記した読出電流閾値Ｉｒｅｆ１よりも高い読出電流ＲＤが送出されたビット線ＢＬに書込設定電圧ＶＷを印加しつつ、その他のビット線ＢＬには接地電位（０ボルト）を印加する。かかるステップＳ２４により、読出電流閾値Ｉｒｅｆ１よりも高い読出電流ＲＤを送出したメモリセル１０の電荷蓄積部（３０、３２）には、書込電圧ＶＧ０の印加に応じた電荷が注入される。
【００４８】
ステップＳ２４の実行後、コントローラ１０８は、書込電圧ＶＧ０に電圧ｖを加算したものを新たな書込電圧ＶＧ０として設定する（ステップＳ２５）。かかるステップＳ２５の実行後、コントローラ１０８は、上記ステップＳ２２の実行に戻って前述した如き動作を繰り返し実行する。
【００４９】
すなわち、データ「０」の書込対象となるメモリセル１０の電荷蓄積部（３０、３２）から読み出された読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ１よりも低い状態、つまりデータ「０」が記憶された状態になるまで、書込電圧ＶＧ０を段階的に増加させつつ電荷を電荷蓄積部（３０、３２）に注入するという、ベリファイ処理（Ｓ２２〜Ｓ２５）を実行するのである。
【００５０】
この間、上記ステップＳ２３において、読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ１よりも低いと判定された場合、コントローラ１０８は、アクセスアドレスＡの内容を「１」だけインクリメントしたものを新たなアクセスアドレスＡとして内蔵レジスタに上書き記憶する（ステップＳ２６）。かかるステップＳ２６の実行後、コントローラ１０８は、アクセスアドレスＡが、メモリセルアレイ１００の全アドレスの内で書込データの最終データが書き込まれるべき最終アドレスよりも大であるか否かを判定する（ステップＳ２７）。ステップＳ２７においてアクセスアドレスＡが最終アドレス以下であると判定された場合、コントローラ１０８は、上記ステップＳ２２の実行に戻り前述した如き動作を繰り返し実行する。一方、ステップＳ２７においてアクセスアドレスＡが最終アドレスより大であると判定された場合には、コントローラ１０８は、このデータ「０」書込ルーチンを終了し、図３に示す如きデータ書き込みプログラムの実行に戻る。
【００５１】
上記したデータ「０」書込ルーチンによれば、メモリセルアレイ１００の全ての電荷蓄積部（３０、３２）の内でデータ「０」の書込対象となる電荷蓄積部は、図５に示す読出電流閾値Ｉｒｅｆ１よりも低い読出電流の分布Ｂ０に含まれる読出電流ＲＤを送出し得る程度の電荷量の蓄積状態、つまり第２のデータ値であるデータ「０」の記憶状態となる。この際、分布Ｂ０は、全ての電荷蓄積部における蓄積電荷量の分布に対応している。
【００５２】
よって、データ「０」書込ルーチンによれば、図５に示すように、分布Ｂ３の如き電荷量形成状態（初期状態）にある電荷蓄積部に対して、データ「０」に対応した量の電荷が注入され、この電荷蓄積部の蓄積電荷量が初期状態での蓄積電荷の最大量（ＱＭＡＸ）よりも大なる量（分布Ｂ０）に遷移するのである。
【００５３】
かかるデータ「０」書込ルーチン（Ｓ２）の実行後、コントローラ１０８は、外部入力された４値の書込データの内で、第２番目に読出電流値が大となるデータ「１」の書き込み対象となる電荷蓄積部だけにこのデータ「１」を書き込ませる、データ「１」書込ルーチンを行う（ステップＳ３）。
【００５４】
図７は、データ「１」書込ルーチンを示すフローチャートである。
【００５５】
図７において、先ず、コントローラ１０８は、先頭アドレスを示す「１」を、アクセスアドレスＡとして内蔵レジスタに記憶させる（ステップＳ３１）。
【００５６】
次に、コントローラ１０８は、アクセスアドレスＡにて示されるアドレスに属し、且つデータ「１」の書込対象となるメモリセル１０各々の電荷蓄積部（３０、３２）からデータを読み出すべき制御信号をロウデコーダ１０４及びカラムデコーダ１０６に供給する（ステップＳ３２）。ステップＳ３２の実行により、ロウデコーダ１０４は、アクセスアドレスＡに対応したワード線ＷＬに走査電圧ＶＳを印加する。また、ステップＳ３２の実行により、カラムデコーダ１０６は、ビット線ＢＬ１〜ＢＬＭの内でデータ「１」の書込対象となるメモリセル１０が接続されている一対のビット線ＢＬの内の一方に接地電位（０ボルト）、他方に読出設定電圧ＶＲを印加する。これにより、アクセスアドレスＡに属しており且つデータ「１」の書込対象となるメモリセル１０の電荷蓄積部（３０、３２）から、ビット線ＢＬを介して読出電流ＲＤが送出される。
【００５７】
次に、コントローラ１０８は、ビット線ＢＬを介して送出された読出電流ＲＤの全てが、図５に示す如き読出電流閾値Ｉｒｅｆ２よりも低いか否かを判定する（ステップＳ３３）。尚、読出電流閾値Ｉｒｅｆ２とは、蓄積された電荷量がデータ「１」に対応した量を満たすか否かを判定する為の上記第２閾値に対応した第２の読出電流閾値であり、上記した第１の読出電流閾値（Ｉｒｅｆ１）よりも大であり且つ上記最大読出電流閾値（Ｉｒｅｆ４）よりも小なる値を有する。
【００５８】
かかるステップＳ３３において、読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ２より低い状態にはないと判定された場合、つまり読出電流閾値Ｉｒｅｆ２よりも高い読出電流ＲＤが１つでも存在する場合、コントローラ１０８は、以下のステップＳ３４を実行する。つまり、コントローラ１０８は、読出電流閾値Ｉｒｅｆ２よりも高い読出電流ＲＤを送出したメモリセル１０に対して、その電荷蓄積部をデータ「１」の記憶状態に設定する為の書込電圧ＶＧ１（ＶＧ０＞ＶＧ１）を用いた書き込みを実施させるべき制御信号をロウデコーダ１０４及びカラムデコーダ１０６に供給する（ステップＳ３４）。ステップＳ３４の実行により、ロウデコーダ１０４は、アクセスアドレスＡに対応したワード線ＷＬに書込電圧ＶＧ１を印加する。また、ステップＳ３４の実行により、カラムデコーダ１０６は、ビット線ＢＬ１〜ＢＬＭの内で、上記した読出電流閾値Ｉｒｅｆ２よりも高い読出電流ＲＤが送出されたビット線ＢＬに書込設定電圧ＶＷを印加しつつ、その他のビット線ＢＬには接地電位（０ボルト）を印加する。かかるステップＳ３４により、読出電流閾値Ｉｒｅｆ２よりも高い読出電流ＲＤを送出したメモリセル１０の電荷蓄積部（３０、３２）には、書込電圧ＶＧ１の印加に応じた電荷が注入される。
【００５９】
ステップＳ３４の実行後、コントローラ１０８は、書込電圧ＶＧ１に電圧ｖを加算したものを新たな書込電圧ＶＧ１として設定する（ステップＳ３５）。かかるステップＳ３５の実行後、コントローラ１０８は、上記ステップＳ３２の実行に戻って前述した如き動作を繰り返し実行する。
【００６０】
すなわち、データ「１」の書込対象となるメモリセル１０の電荷蓄積部（３０、３２）から読み出された読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ２よりも低い状態、つまりデータ「１」が記憶された状態になるまで、書込電圧ＶＧ１を段階的に増加させつつ電荷を電荷蓄積部（３０、３２）に注入するという、ベリファイ処理（Ｓ３２〜Ｓ３５）を実行するのである。
【００６１】
この間、上記ステップＳ３３において、読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ２よりも低いと判定された場合、コントローラ１０８は、アクセスアドレスＡの内容を「１」だけインクリメントしたものを新たなアクセスアドレスＡとして内蔵レジスタに上書き記憶する（ステップＳ３６）。かかるステップＳ３６の実行後、コントローラ１０８は、アクセスアドレスＡが、メモリセルアレイ１００の全アドレスの内で書込データの最終データが書き込まれるべき最終アドレスよりも大であるか否かを判定する（ステップＳ３７）。ステップＳ３７においてアクセスアドレスＡが最終アドレス以下であると判定された場合、コントローラ１０８は、上記ステップＳ３２の実行に戻り前述した如き動作を繰り返し実行する。一方、ステップＳ３７においてアクセスアドレスＡが最終アドレスより大であると判定された場合には、コントローラ１０８は、このデータ「１」書込ルーチンを終了し、図３に示す如きデータ書き込みプログラムの実行に戻る。
【００６２】
上記したデータ「１」書込ルーチンによれば、メモリセルアレイ１００の全電荷蓄積部（３０、３２）の内でデータ「１」の書込対象となる電荷蓄積部は、図５に示す読出電流閾値Ｉｒｅｆ２よりも低い読出電流の分布Ｂ１に含まれる読出電流ＲＤを送出し得る程度の電荷量の蓄積状態、つまり第３のデータ値であるデータ「１」の記憶状態に設定される。この際、分布Ｂ１は、全ての電荷蓄積部における蓄積電荷量の分布に対応している。
【００６３】
よって、データ「１」書込ルーチンによれば、図５に示すように、分布Ｂ３の如き電荷量形成状態（初期状態）にある電荷蓄積部に対して、データ「１」に対応した量の電荷が注入され、この電荷蓄積部の蓄積電荷量が初期状態での蓄積電荷の最大量（ＱＭＡＸ）よりも大なる量（分布Ｂ１）に遷移するのである。
【００６４】
かかるデータ「１」書込ルーチン（Ｓ３）の実行後、コントローラ１０８は、外部入力された４値の書込データの内で、第３番目に読出電流値が大となるデータ「２」の書き込み対象となる電荷蓄積部だけにこのデータ「２」を書き込ませる、データ「２」書込ルーチンを行う（ステップＳ４）。
【００６５】
図８は、データ「２」書込ルーチンを示すフローチャートである。
【００６６】
図８において、先ず、コントローラ１０８は、先頭アドレスを示す「１」を、アクセスアドレスＡとして内蔵レジスタに記憶させる（ステップＳ４１）。
【００６７】
次に、コントローラ１０８は、アクセスアドレスＡにて示されるアドレスに属し、且つデータ「２」の書込対象となるメモリセル１０各々の電荷蓄積部（３０、３２）からデータを読み出すべき制御信号をロウデコーダ１０４及びカラムデコーダ１０６に供給する（ステップＳ４２）。ステップＳ４２の実行により、ロウデコーダ１０４は、アクセスアドレスＡに対応したワード線ＷＬに走査電圧ＶＳを印加する。また、ステップＳ４２の実行により、カラムデコーダ１０６は、ビット線ＢＬ１〜ＢＬＭの内でデータ「２」の書込対象となるメモリセル１０が接続されている一対のビット線ＢＬの内の一方に接地電位（０ボルト）、他方に読出設定電圧ＶＲを印加する。これにより、アクセスアドレスＡに属しており且つデータ「２」の書込対象となるメモリセル１０の電荷蓄積部（３０、３２）から、ビット線ＢＬを介して読出電流ＲＤが送出される。
【００６８】
次に、コントローラ１０８は、ビット線ＢＬを介して送出された読出電流ＲＤの全てが、図５に示す如き読出電流閾値Ｉｒｅｆ３よりも低いか否かを判定する（ステップＳ４３）。尚、読出電流閾値Ｉｒｅｆ３とは、蓄積された電荷量がデータ「２」に対応した量を満たすか否かを判定する為の上記第３閾値に対応した第３の読出電流閾値であり、上記した第２の読出電流閾値（Ｉｒｅｆ２）よりも大であり且つ上記最大読出電流閾値（Ｉｒｅｆ４）よりも小なる値を有する。また、読出電流閾値Ｉｒｅｆ３に対応した蓄積電荷量は、初期電荷量範囲（分布Ｂ３に相当）の最大量よりも大である。
【００６９】
かかるステップＳ４３において、読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ３より低い状態にはないと判定された場合、つまり読出電流閾値Ｉｒｅｆ３よりも高い読出電流ＲＤが１つでも存在する場合、コントローラ１０８は、以下のステップＳ４４を実行する。つまり、コントローラ１０８は、読出電流閾値Ｉｒｅｆ３よりも高い読出電流ＲＤを送出したメモリセル１０に対して、その電荷蓄積部をデータ「２」の記憶状態に設定する為の書込電圧ＶＧ２（ＶＧ１＞ＶＧ２）を用いた書き込みを実施させるべき制御信号をロウデコーダ１０４及びカラムデコーダ１０６に供給する（ステップＳ４４）。ステップＳ４４の実行により、ロウデコーダ１０４は、アクセスアドレスＡに対応したワード線ＷＬに書込電圧ＶＧ２を印加する。また、ステップＳ４４の実行により、カラムデコーダ１０６は、ビット線ＢＬ１〜ＢＬＭの内で、上記した読出電流閾値Ｉｒｅｆ３よりも高い読出電流ＲＤが送出されたビット線ＢＬに書込設定電圧ＶＷを印加しつつ、その他のビット線ＢＬには接地電位（０ボルト）を印加する。かかるステップＳ４４により、読出電流閾値Ｉｒｅｆ３よりも高い読出電流ＲＤを送出したメモリセル１０の電荷蓄積部（３０、３２）には、書込電圧ＶＧ２の印加に応じた電荷が注入される。
【００７０】
ステップＳ４４の実行後、コントローラ１０８は、書込電圧ＶＧ２に電圧ｖを加算したものを新たな書込電圧ＶＧ２として設定する（ステップＳ４５）。かかるステップＳ４５の実行後、コントローラ１０８は、上記ステップＳ４２の実行に戻って前述した如き動作を繰り返し実行する。
【００７１】
すなわち、データ「２」の書込対象となるメモリセル１０の電荷蓄積部（３０、３２）から読み出された読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ３よりも低い状態、つまりデータ「２」が記憶された状態になるまで、書込電圧ＶＧ２を段階的に増加させつつ電荷を電荷蓄積部（３０、３２）に注入するという、ベリファイ処理（Ｓ４２〜Ｓ４５）を実行するのである。
【００７２】
この間、上記ステップＳ４３において、読出電流ＲＤの全てが読出電流閾値Ｉｒｅｆ３よりも低いと判定された場合、コントローラ１０８は、アクセスアドレスＡの内容を「１」だけインクリメントしたものを新たなアクセスアドレスＡとして内蔵レジスタに上書き記憶する（ステップＳ４６）。かかるステップＳ４６の実行後、コントローラ１０８は、アクセスアドレスＡが、メモリセルアレイ１００の全アドレスの内で書込データの最終データが書き込まれるべき最終アドレスよりも大であるか否かを判定する（ステップＳ４７）。ステップＳ４７においてアクセスアドレスＡが最終アドレス以下であると判定された場合、コントローラ１０８は、上記ステップＳ４２の実行に戻り前述した如き動作を繰り返し実行する。一方、ステップＳ４７においてアクセスアドレスＡが最終アドレスより大であると判定された場合には、コントローラ１０８は、このデータ「２」書込ルーチンを終了し、図３に示す如きデータ書き込みプログラムを終了させる。
【００７３】
上記したデータ「２」書込ルーチンによれば、メモリセルアレイ１００の全電荷蓄積部（３０、３２）の内でデータ「２」の書込対象となる電荷蓄積部は、図５に示す読出電流閾値Ｉｒｅｆ３よりも低い読出電流の分布Ｂ２に含まれる読出電流ＲＤを送出し得る程度の電荷量の蓄積状態、つまり第４のデータ値であるデータ「２」の記憶状態に設定される。この際、分布Ｂ２は、全ての電荷蓄積部における蓄積電荷量の分布に対応している。
【００７４】
よって、データ「２」書込ルーチンによれば、図５に示すように、分布Ｂ３の如き電荷量形成状態（初期状態）にある電荷蓄積部に対して、データ「２」に対応した量の電荷が注入され、この電荷蓄積部の蓄積電荷量が初期状態での蓄積電荷の最大量（ＱＭＡＸ）よりも大なる量（分布Ｂ２）に遷移するのである。
【００７５】
かかるデータ「２」書込ルーチン（Ｓ３）の実行後、コントローラ１０８は、図３に示すデータ書き込みプログラムの実行を終了する。
【００７６】
以上の如く、図１に示す半導体不揮発性メモリにおいては、データ「０」〜「３」からなる４値の書込データを書き込むにあたり、先ず、全てのメモリセル１０の電荷蓄積部（３０、３２）に対して、以下の如き初期化書込（Ｓ１）を行うようにしている。すなわち、電荷蓄積部（３０、３２）の各々から読出電流（ＲＤ）を送出させ（Ｓ１２）、読出電流が最大読出電流閾値（Ｉｒｅｆ４）よりも大となる電荷蓄積部に、この読出電流が最大読出電流閾値を下回るまで電荷を注入する（Ｓ１３〜Ｓ１５）。つまり、電荷蓄積部（３０、３２）の各々から読み出される読出電流が全て最大読出電流閾値（Ｉｒｅｆ４）を下回る状態になるまで、かかる状態に到っていない電荷蓄積部に対して電荷の注入が為されるのである。これにより、全ての電荷蓄積部における蓄積電荷量の最小量が上記初期最小電荷量ＱＭＩＮに底上げされる。よって、初期化書込（Ｓ１）実行前の段階において、電荷蓄積部における蓄積電荷量の分布が、例えば図５に示す如き初期最小電荷量ＱＭＩＮを含んだ比較的広い分布ＡＰ（破線にて示す）である場合、かかる初期化書込を実行することにより、この分布は、初期最小電荷量ＱＭＩＮを最小とする分布Ｂ３に遷移する。つまり、図５に示すように、初期状態での蓄積電荷量の最小量が上記初期最小電荷量ＱＭＩＮに底上げされるのである。要するに、初期化書込前に比べて、電荷蓄積部（３０、３２）各々に蓄積されている電荷の平均量が多くなると共に、電荷蓄積部（３０、３２）各々による初期状態での蓄積電荷量のバラツキ、及び電荷蓄積部（３０、３２）各々から読み出された読出電流値のバラツキが小さくなるのである。
【００７７】
よって、かかる初期化書込の終了後、データ「０」〜「２」の書き込み（Ｓ２〜Ｓ４）を実施する場合、上記した初期化書込を実行しない場合に比して、ベリファイ処理（Ｓ２２〜Ｓ２５、Ｓ３２〜Ｓ３５、又はＳ４２〜Ｓ４５）での書き込み回数を短縮させることが可能となる。
【００７８】
例えば、図９に示す如く、初期化書込を実行しない場合において、その初期状態が図９に示す如き読出電流Ｋ１を送出し得る状態にあるメモリセル１０に、データ「０」を書き込む場合、その電荷蓄積部に注入すべき電荷量は図９に示す如き電荷量Ｑ１となる。一方、初期化書込を実行した場合、このメモリセル１０の初期状態は、図９に示す如き読出電流Ｋ２を送出し得る状態になる。よって、かかるメモリセル１０にデータ「０」を書き込む場合に注入すべき電荷量Ｑ２は、上記電荷量Ｑ１よりも小となる。従って、初期化書込を実行することによりベリファイ処理での書き込み回数を減らすことが可能となる。また、ベリファイ処理での書き込み回数が全体的に少なくなるので、電荷蓄積部（３０、３２）の内の一方の電荷蓄積部への書き込みに伴う、他方の電荷蓄積部の読出電流の低下が抑制されるようになる。
【００７９】
よって、書込み回数の削減による書込み時間の短縮と共に、データの読み出し精度の低下を抑制することが可能となるのである。
【００８０】
また、初期状態での読出電流の分布の幅が広い、つまり電荷蓄積部の各々に蓄積されている電荷量のバラツキが大きいと、電荷蓄積部（３０、３２）の内の一方の電荷蓄積部への書き込み終了後も、他方の電荷蓄積部への書き込みが継続する場合がある。この際、他方の電荷蓄積部への書き込みが継続するほど、書き込みが終了した一方の電荷蓄積部が送出し得る読出電流値が低下するという不具合が生じる。
【００８１】
しかしながら、上記した初期化書込の実行によれば、全メモリセル１０における初期状態での読出電流の分布の幅を、この初期化書込を実行しない場合に比して狭くすることができるので、上述した如き不具合を解消することが可能となる。
【００８２】
尚、図４に示す初期化書込処理では、初期状態時において読出電流閾値Ｉｒｅｆ４よりも高い読出電流を送出し得る状態、つまり図５の斜線に示される領域に含まれる電荷蓄積部に電荷を注入（書込）することによりその読出電流を読出電流閾値Ｉｒｅｆ４未満に制限しているが、この電荷注入の対象となる電荷蓄積部の数を変更することも可能である。
【００８３】
例えば、図４に示すステップＳ１２による読出処理において、ワード線ＷＬに印加する走査電圧ＶＳの電圧値、つまり、メモリセル１０各々のゲート電極に印加する電圧値を変更する。この際、走査電圧ＶＳの電圧値を下げると、図１０に示すように、読出電流閾値Ｉｒｅｆ４に対して相対的に、初期状態時における読出電流の分布ＡＰが低電流側にシフトする。よって、かかる分布ＡＰの内で読出電流閾値Ｉｒｅｆ４よりも高い読出電流を送出し得る状態にある電荷蓄積部、つまり図１０の斜線に示される領域に含まれる電荷蓄積部が電荷注入の対象となる。従って、この際、電荷注入の対象となる電荷蓄積部の数が減ることになる。
【００８４】
また、上記実施例では、単一のメモリセル１０に４値データを２系統分（４ビット）書き込むことが可能な半導体不揮発性メモリを例にとって動作を説明したが、単一のメモリセルに２値又は３値のデータ、或いは５値以上のデータを２系統分書き込むことが可能な半導体不揮発性メモりにも同様に適用可能である。
【００８５】
また、図３に示すデータ書き込みプログラムでは、初期化書込（Ｓ１）を実行してから、本来のデータ書込（Ｓ２〜Ｓ４）を順次実行するようにしているが、各データ書込毎に、その直前に初期化書込（Ｓ１）を実行するようにしても良い。
【００８６】
また、上記実施例でのベリファイ処理（Ｓ１２〜Ｓ１５、Ｓ２２〜Ｓ２５、Ｓ３２〜Ｓ３５、又はＳ４２〜Ｓ４５）では、読出制御によってビット線ＢＬに送出された電流に基づき電荷量の判定を行っているが、この読出時におけるビット線ＢＬ上の電圧に基づいて電荷量の判定を行うようにしても良い。この際、上記した読出電流閾値Ｉｒｅｆ１〜Ｉｒｅｆ４に代えて、夫々に対応した読出電圧閾値を用いる。尚、これら読出電流閾値又は読出電圧閾値を生成する構成としては、夫々の値に対応した独立電流電圧源、或いは少なくとも１つの可変電流電圧源を用いる。
【００８７】
要するに、図４に示すステップＳ１３において、電荷蓄積部に蓄積されている電荷に対応した電流をビット線に送出させた際にこのビット線ＢＬに流れる電流又はビット線ＢＬ上の電圧に基づいて、初期最小電荷量（ＱＭＩＮ）よりも小なる量の電荷が蓄積されている電荷蓄積部を判定するようにすれば良いのである。
【符号の説明】
【００８８】
１０          メモリセル
３０、３２    電荷蓄積部
１０４        ロウデコーダ
１０６        カラムデコーダ
１０８        コントローラ  
【図１】
0005851172.tif 000002
【図２】
0005851172.tif 000003
【図３】
0005851172.tif 000004
【図４】
0005851172.tif 000005
【図５】
0005851172.tif 000006
【図６】
0005851172.tif 000007
【図７】
0005851172.tif 000008
【図８】
0005851172.tif 000009
【図９】
0005851172.tif 000010
【図１０】
0005851172.tif 000011