【実施例】
【0021】
図1は、4値のデータを記憶可能な半導体不揮発性メモリの全体構成を示すブロック図である。
【0022】
図1に示すように、かかる半導体不揮発性メモリは、メモリセルアレイ100、ロウデコーダ104、カラムデコーダ106及びコントローラ108を有する。
【0023】
メモリセルアレイ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)から構成されている。
【0024】
図2は、かかるメモリセル10の主要部を示す断面図である。
【0025】
図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は、物理的に連続せず、互いに離間して形成されているので、各電荷蓄積部に対して別個独立に電荷を蓄積保持できる。この際、電荷蓄積部に蓄積された電荷量に応じて、電荷蓄積部30及び32の各々に、4値のデータ「0」〜「3」の記憶が為される。すなわち、蓄積された電荷量が第1閾値より大となる場合にはデータ「0」、第1閾値よりも小であり且つ第2閾値よりも大となる場合にはデータ「1」、第2閾値よりも小であり且つ第3閾値よりも大となる場合にはデータ「2」、第3閾値よりも小であり且つ初期最小電荷量(後述する)より大なる場合にはデータ「3」の記憶状態となる。尚、メモリセル10の電荷蓄積部30及び32各々の初期状態では電荷の蓄積量は第3閾値よりも小である。
【0026】
かかる構成により、メモリセル10の各々は、ワード線WLを介してそのゲート端子に印加された電圧、及び一対のビット線BLを介してドレイン端子及びソース端各々に印加された電圧に応じて、4値のデータ「0」〜「3」の書き込み及び読み出しを行う。
【0027】
ロウデコーダ104は、コントローラ108より供給された制御信号に基づいて、メモリセルアレイ100に形成されているワード線WL
1〜WL
Nに書込電圧又は走査電圧を印加する。
【0028】
カラムデコーダ106は、コントローラ108より供給された制御信号に基づいて、メモリセルアレイ100に形成されているビット線BL
1〜BL
Mに、接地電位、読出設定電圧又は書込設定電圧を印加する。又、カラムデコーダ106は、ビット線BLに接地電位を印加した際に、このビット線BLに接続されているメモリセル10の電荷蓄積部(30又は32)に蓄積された電荷に伴う電流をビット線BL上に送出させ、このビット線BL上に送出された電流値を表す読出電流値をコントローラ108に供給する。
【0029】
コントローラ108は、メモリセルアレイ100に書き込むべき4値のデータ(以下、書込データと称する)が外部より入力されると、以下の如きデータ書き込みプログラム(後述する)を実行する。
【0030】
図3は、かかるデータ書き込みプログラムによる制御手順を示すフローチャートである。
【0031】
図3において、先ず、コントローラ108は、メモリセルアレイ100に形成されている全てのメモリセル10の電荷蓄積部30及び32に対して、蓄積されている電荷量を初期化すべき初期化書込ルーチンを行う(ステップS1)。
【0032】
図4は、かかる初期化書込ルーチンを示すフローチャートである。
【0033】
図4において、先ず、コントローラ108は、先頭アドレスを示す「1」を、アクセスアドレスAとして内蔵レジスタ(図示せぬ)に記憶させる(ステップS11)。
【0034】
次に、コントローラ108は、アクセスアドレスAにて示されるアドレスに属するメモリセル10各々の電荷蓄積部30及び32からデータを読み出すべき制御信号をロウデコーダ104及びカラムデコーダ106に供給する(ステップS12)。ステップS12の実行により、ロウデコーダ104は、アクセスアドレスAに対応したワード線WLに走査電圧VSを印加する。また、ステップS12の実行により、カラムデコーダ106は、ビット線BL
1〜BL
Mの内の奇数番目に配置されているビット線BL各々に接地電位(0ボルト)を印加しつつ、偶数番目に配置されているビット線BL各々に読出設定電圧VRを印加する。その後、カラムデコーダ106は、偶数番目に配置されているビット線BL各々に接地電位(0ボルト)を印加しつつ、奇数番目に配置されているビット線BL各々に読出設定電圧VRを印加する。上記したカラムデコーダ106による一連の動作により、アクセスアドレスAに対応したワード線WLに接続されているメモリセル10各々の電荷蓄積部30及び32からビット線BL
1〜BL
Mを介して夫々の蓄積電荷量に対応した読出電流RD
1〜RD
Mが送出される。尚、電荷蓄積部(30又は32)に蓄積された電荷の量が大なるほど、読出電流RD値は小さくなる。
【0035】
次に、コントローラ108は、ビット線BL
1〜BL
Mを介して送出された読出電流RD
1〜RD
Mの全てが、
図5に示す如き読出電流閾値Iref4よりも低いか否かを判定する(ステップS13)。尚、読出電流閾値Iref4は、電荷蓄積部(30、32)に所定の初期最小電荷量Q
MINの電荷が蓄積されている場合に、この電荷蓄積部から送出し得る読出電流RDの値である。すなわち、
図5に示す如く読出電流閾値Iref4は初期最小電荷量Q
MINに対応しており、上記ステップS13において読出電流RDが読出電流閾値Iref4よりも高いと判定された場合には、電荷蓄積部(30、32)の蓄積電荷の量が初期最小電荷量Q
MINよりも小である。また、読出電流閾値Iref4は、後述する第1〜第3の読出電流閾値としての読出電流閾値Iref1〜Iref3のいずれよりも大なる値を有する最大読出電流閾値である。
【0036】
かかるステップS13において、読出電流RD
1〜RD
Mの全てが読出電流閾値Iref4より低い状態にはないと判定された場合、つまり読出電流閾値Iref4よりも高い読出電流RDが1つでも存在する場合、コントローラ108は、以下のステップS14を実行する。つまり、コントローラ108は、読出電流閾値Iref4よりも高い読出電流RDを送出したメモリセル10に対して、初期化用書込電圧VG
INを用いた書き込みを実施させるべき制御信号をロウデコーダ104及びカラムデコーダ106に供給する(ステップS14)。ステップS14の実行により、ロウデコーダ104は、アクセスアドレスAに対応したワード線WLに初期化用書込電圧VG
INを印加する。また、ステップS14の実行により、カラムデコーダ106は、ビット線BL
1〜BL
Mの内で、上記した読出電流閾値Iref4よりも高い読出電流RDが送出されたビット線BLに書込設定電圧VWを印加しつつ、その他のビット線BLには接地電位(0ボルト)を印加する。すなわち、かかるステップS14の実行により、読出電流閾値Iref4よりも高い読出電流RDを送出したメモリセル10、つまり蓄積電荷の量が初期最小電荷量Q
MINよりも小なる状態にある電荷蓄積部(30、32)には、初期化用書込電圧VG
INの印加に応じた電荷が注入される。
【0037】
ステップS14の実行後、コントローラ108は、初期化用書込電圧VG
INに電圧vを加算したものを新たな初期化用書込電圧VG
INとして設定する(ステップS15)。かかるステップS15の実行後、コントローラ108は、上記ステップS12の実行に戻って前述した如き動作を繰り返し実行する。
【0038】
すなわち、読出電流RD
1〜RD
Mの全てが読出電流閾値Iref4よりも低い状態になるまで、つまり全ての電荷蓄積部に初期最小電荷量Q
MINよりも大なる量の電荷が蓄積されるまで、初期化用書込電圧VG
INを段階的に増加させつつ電荷蓄積部(30、32)に電荷を注入するという、ベリファイ処理(S12〜S15)を実行するのである。
【0039】
この間、上記ステップS13において、読出電流RD
1〜RD
Mの全てが読出電流閾値Iref4よりも低いと判定された場合、コントローラ108は、アクセスアドレスAの内容を「1」だけインクリメントしたものを新たなアクセスアドレスAとして内蔵レジスタに上書き記憶する(ステップS16)。かかるステップS16の実行後、コントローラ108は、アクセスアドレスAがメモリセルアレイ100の最終アドレスよりも大であるか否かを判定する(ステップS17)。ステップS17においてアクセスアドレスAが最終アドレス以下であると判定された場合には、コントローラ108は、上記ステップS12の実行に戻り前述した如き動作を繰り返し実行する。一方、ステップS17においてアクセスアドレスAが最終アドレスより大であると判定された場合には、コントローラ108は、この初期化書込ルーチンを終了し、
図3に示す如きデータ書き込みプログラムの実行に戻る。
【0040】
かかる初期化書込ルーチンの実行により、メモリセルアレイ100に形成されている全てのメモリセル10の電荷蓄積部(30、32)は、読出電流閾値Iref4よりも低い読出電流を送出し得る程度の電荷量が蓄積された状態、つまり初期最小電荷量Q
MINよりも大なる量の電荷が蓄積された状態に初期化される。例えば、初期化書込ルーチンの実行前の段階でメモリセル10各々による読出電流の分布が
図5に示す如き読出電流閾値Iref4を含んで左右に広がる形態を有する分布APである場合、この初期化書込ルーチンの実行により、その分布は、
図5に示す如き読出電流閾値Iref4を最大とする読出電流の分布B3に遷移する。この際、これら分布AP及びB3は、全ての電荷蓄積部における蓄積電荷量の分布に対応している。よって、
図5に示すように、分布APでの最小読出電流I
Mに対応した最大電荷量、及び分布B3での最大の電荷量は共に初期最大電荷量Q
MAXであるものの、分布B3での最小の電荷量は、
図5に示すように初期最小電荷量Q
MINに底上げされる。
【0041】
要するに、上記初期化書込ルーチンの実行により、メモリセル10に設けられている電荷蓄積部(30、32)の各々から読出電流RDを送出させ、その読出電流が読出電流閾値Iref4よりも大となる電荷蓄積部に、読出電流RDが読出電流閾値Iref4を下回るまで電荷を注入するのである。これにより、電荷蓄積部(30、32)各々の内で蓄積電荷量が初期最小電荷量Q
MINに満たないものに対して、その蓄積電荷量が少なくとも初期最小電荷量に到るまで電荷が注入されるので、全ての電荷蓄積部における蓄積電荷量の最小量が上記初期最小電荷量Q
MINに底上げされる。この際、
図5に示す如き分布B3に含まれる読出電流RDを送出し得る電荷量の蓄積状態が、第1のデータ値としてのデータ「3」の記憶状態となる。
【0042】
かかる初期化書込ルーチン(S1)の実行後、コントローラ108は、外部入力された4値の書込データの内で最も読出電流値が大となるデータ「0」の書き込み対象となる電荷蓄積部だけにデータ「0」を書き込ませるデータ「0」書込ルーチンを行う(ステップS2)。
【0043】
図6は、データ「0」書込ルーチンを示すフローチャートである。
【0044】
図6において、先ず、コントローラ108は、先頭アドレスを示す「1」を、アクセスアドレスAとして内蔵レジスタに記憶させる(ステップS21)。
【0045】
次に、コントローラ108は、アクセスアドレスAにて示されるアドレスに属し、且つデータ「0」の書込対象となるメモリセル10各々の電荷蓄積部(30、32)からデータを読み出すべき制御信号をロウデコーダ104及びカラムデコーダ106に供給する(ステップS22)。ステップS22の実行により、ロウデコーダ104は、アクセスアドレスAに対応したワード線WLに走査電圧VSを印加する。また、ステップS22の実行により、カラムデコーダ106は、ビット線BL
1〜BL
Mの内でデータ「0」の書込対象となるメモリセル10が接続されている一対のビット線BLの内の一方に接地電位(0ボルト)、他方に読出設定電圧VRを印加する。これにより、アクセスアドレスAに属しており且つデータ「0」の書込対象となるメモリセル10の電荷蓄積部(30、32)から、ビット線BLを介して読出電流RDが送出される。
【0046】
次に、コントローラ108は、ビット線BLを介して送出された読出電流RDの全てが、
図5に示す如き読出電流閾値Iref1よりも低いか否かを判定する(ステップS23)。尚、読出電流閾値Iref1とは、蓄積された電荷量がデータ「0」に対応した量を満たすか否かを判定する為の上記第1閾値に対応した第1の読出電流閾値であり、上記した最大読出電流閾値としての読出電流閾値Iref4よりも小なる値を有する。
【0047】
かかるステップS23において、読出電流RDの全てが読出電流閾値Iref1より低い状態にはないと判定された場合、つまり読出電流閾値Iref1よりも高い読出電流RDが1つでも存在する場合、コントローラ108は、以下のステップS24を実行する。つまり、コントローラ108は、読出電流閾値Iref1よりも高い読出電流RDを送出したメモリセル10に対して、その電荷蓄積部をデータ「0」の記憶状態に設定する為の書込電圧VG0を用いた書き込みを実施させるべき制御信号をロウデコーダ104及びカラムデコーダ106に供給する(ステップS24)。ステップS24の実行により、ロウデコーダ104は、アクセスアドレスAに対応したワード線WLに書込電圧VG0を印加する。また、ステップS24の実行により、カラムデコーダ106は、ビット線BL
1〜BL
Mの内で、上記した読出電流閾値Iref1よりも高い読出電流RDが送出されたビット線BLに書込設定電圧VWを印加しつつ、その他のビット線BLには接地電位(0ボルト)を印加する。かかるステップS24により、読出電流閾値Iref1よりも高い読出電流RDを送出したメモリセル10の電荷蓄積部(30、32)には、書込電圧VG0の印加に応じた電荷が注入される。
【0048】
ステップS24の実行後、コントローラ108は、書込電圧VG0に電圧vを加算したものを新たな書込電圧VG0として設定する(ステップS25)。かかるステップS25の実行後、コントローラ108は、上記ステップS22の実行に戻って前述した如き動作を繰り返し実行する。
【0049】
すなわち、データ「0」の書込対象となるメモリセル10の電荷蓄積部(30、32)から読み出された読出電流RDの全てが読出電流閾値Iref1よりも低い状態、つまりデータ「0」が記憶された状態になるまで、書込電圧VG0を段階的に増加させつつ電荷を電荷蓄積部(30、32)に注入するという、ベリファイ処理(S22〜S25)を実行するのである。
【0050】
この間、上記ステップS23において、読出電流RDの全てが読出電流閾値Iref1よりも低いと判定された場合、コントローラ108は、アクセスアドレスAの内容を「1」だけインクリメントしたものを新たなアクセスアドレスAとして内蔵レジスタに上書き記憶する(ステップS26)。かかるステップS26の実行後、コントローラ108は、アクセスアドレスAが、メモリセルアレイ100の全アドレスの内で書込データの最終データが書き込まれるべき最終アドレスよりも大であるか否かを判定する(ステップS27)。ステップS27においてアクセスアドレスAが最終アドレス以下であると判定された場合、コントローラ108は、上記ステップS22の実行に戻り前述した如き動作を繰り返し実行する。一方、ステップS27においてアクセスアドレスAが最終アドレスより大であると判定された場合には、コントローラ108は、このデータ「0」書込ルーチンを終了し、
図3に示す如きデータ書き込みプログラムの実行に戻る。
【0051】
上記したデータ「0」書込ルーチンによれば、メモリセルアレイ100の全ての電荷蓄積部(30、32)の内でデータ「0」の書込対象となる電荷蓄積部は、
図5に示す読出電流閾値Iref1よりも低い読出電流の分布B0に含まれる読出電流RDを送出し得る程度の電荷量の蓄積状態、つまり第2のデータ値であるデータ「0」の記憶状態となる。この際、分布B0は、全ての電荷蓄積部における蓄積電荷量の分布に対応している。
【0052】
よって、データ「0」書込ルーチンによれば、
図5に示すように、分布B3の如き電荷量形成状態(初期状態)にある電荷蓄積部に対して、データ「0」に対応した量の電荷が注入され、この電荷蓄積部の蓄積電荷量が初期状態での蓄積電荷の最大量(Q
MAX)よりも大なる量(分布B0)に遷移するのである。
【0053】
かかるデータ「0」書込ルーチン(S2)の実行後、コントローラ108は、外部入力された4値の書込データの内で、第2番目に読出電流値が大となるデータ「1」の書き込み対象となる電荷蓄積部だけにこのデータ「1」を書き込ませる、データ「1」書込ルーチンを行う(ステップS3)。
【0054】
図7は、データ「1」書込ルーチンを示すフローチャートである。
【0055】
図7において、先ず、コントローラ108は、先頭アドレスを示す「1」を、アクセスアドレスAとして内蔵レジスタに記憶させる(ステップS31)。
【0056】
次に、コントローラ108は、アクセスアドレスAにて示されるアドレスに属し、且つデータ「1」の書込対象となるメモリセル10各々の電荷蓄積部(30、32)からデータを読み出すべき制御信号をロウデコーダ104及びカラムデコーダ106に供給する(ステップS32)。ステップS32の実行により、ロウデコーダ104は、アクセスアドレスAに対応したワード線WLに走査電圧VSを印加する。また、ステップS32の実行により、カラムデコーダ106は、ビット線BL
1〜BL
Mの内でデータ「1」の書込対象となるメモリセル10が接続されている一対のビット線BLの内の一方に接地電位(0ボルト)、他方に読出設定電圧VRを印加する。これにより、アクセスアドレスAに属しており且つデータ「1」の書込対象となるメモリセル10の電荷蓄積部(30、32)から、ビット線BLを介して読出電流RDが送出される。
【0057】
次に、コントローラ108は、ビット線BLを介して送出された読出電流RDの全てが、
図5に示す如き読出電流閾値Iref2よりも低いか否かを判定する(ステップS33)。尚、読出電流閾値Iref2とは、蓄積された電荷量がデータ「1」に対応した量を満たすか否かを判定する為の上記第2閾値に対応した第2の読出電流閾値であり、上記した第1の読出電流閾値(Iref1)よりも大であり且つ上記最大読出電流閾値(Iref4)よりも小なる値を有する。
【0058】
かかるステップS33において、読出電流RDの全てが読出電流閾値Iref2より低い状態にはないと判定された場合、つまり読出電流閾値Iref2よりも高い読出電流RDが1つでも存在する場合、コントローラ108は、以下のステップS34を実行する。つまり、コントローラ108は、読出電流閾値Iref2よりも高い読出電流RDを送出したメモリセル10に対して、その電荷蓄積部をデータ「1」の記憶状態に設定する為の書込電圧VG1(VG0>VG1)を用いた書き込みを実施させるべき制御信号をロウデコーダ104及びカラムデコーダ106に供給する(ステップS34)。ステップS34の実行により、ロウデコーダ104は、アクセスアドレスAに対応したワード線WLに書込電圧VG1を印加する。また、ステップS34の実行により、カラムデコーダ106は、ビット線BL
1〜BL
Mの内で、上記した読出電流閾値Iref2よりも高い読出電流RDが送出されたビット線BLに書込設定電圧VWを印加しつつ、その他のビット線BLには接地電位(0ボルト)を印加する。かかるステップS34により、読出電流閾値Iref2よりも高い読出電流RDを送出したメモリセル10の電荷蓄積部(30、32)には、書込電圧VG1の印加に応じた電荷が注入される。
【0059】
ステップS34の実行後、コントローラ108は、書込電圧VG1に電圧vを加算したものを新たな書込電圧VG1として設定する(ステップS35)。かかるステップS35の実行後、コントローラ108は、上記ステップS32の実行に戻って前述した如き動作を繰り返し実行する。
【0060】
すなわち、データ「1」の書込対象となるメモリセル10の電荷蓄積部(30、32)から読み出された読出電流RDの全てが読出電流閾値Iref2よりも低い状態、つまりデータ「1」が記憶された状態になるまで、書込電圧VG1を段階的に増加させつつ電荷を電荷蓄積部(30、32)に注入するという、ベリファイ処理(S32〜S35)を実行するのである。
【0061】
この間、上記ステップS33において、読出電流RDの全てが読出電流閾値Iref2よりも低いと判定された場合、コントローラ108は、アクセスアドレスAの内容を「1」だけインクリメントしたものを新たなアクセスアドレスAとして内蔵レジスタに上書き記憶する(ステップS36)。かかるステップS36の実行後、コントローラ108は、アクセスアドレスAが、メモリセルアレイ100の全アドレスの内で書込データの最終データが書き込まれるべき最終アドレスよりも大であるか否かを判定する(ステップS37)。ステップS37においてアクセスアドレスAが最終アドレス以下であると判定された場合、コントローラ108は、上記ステップS32の実行に戻り前述した如き動作を繰り返し実行する。一方、ステップS37においてアクセスアドレスAが最終アドレスより大であると判定された場合には、コントローラ108は、このデータ「1」書込ルーチンを終了し、
図3に示す如きデータ書き込みプログラムの実行に戻る。
【0062】
上記したデータ「1」書込ルーチンによれば、メモリセルアレイ100の全電荷蓄積部(30、32)の内でデータ「1」の書込対象となる電荷蓄積部は、
図5に示す読出電流閾値Iref2よりも低い読出電流の分布B1に含まれる読出電流RDを送出し得る程度の電荷量の蓄積状態、つまり第3のデータ値であるデータ「1」の記憶状態に設定される。この際、分布B1は、全ての電荷蓄積部における蓄積電荷量の分布に対応している。
【0063】
よって、データ「1」書込ルーチンによれば、
図5に示すように、分布B3の如き電荷量形成状態(初期状態)にある電荷蓄積部に対して、データ「1」に対応した量の電荷が注入され、この電荷蓄積部の蓄積電荷量が初期状態での蓄積電荷の最大量(Q
MAX)よりも大なる量(分布B1)に遷移するのである。
【0064】
かかるデータ「1」書込ルーチン(S3)の実行後、コントローラ108は、外部入力された4値の書込データの内で、第3番目に読出電流値が大となるデータ「2」の書き込み対象となる電荷蓄積部だけにこのデータ「2」を書き込ませる、データ「2」書込ルーチンを行う(ステップS4)。
【0065】
図8は、データ「2」書込ルーチンを示すフローチャートである。
【0066】
図8において、先ず、コントローラ108は、先頭アドレスを示す「1」を、アクセスアドレスAとして内蔵レジスタに記憶させる(ステップS41)。
【0067】
次に、コントローラ108は、アクセスアドレスAにて示されるアドレスに属し、且つデータ「2」の書込対象となるメモリセル10各々の電荷蓄積部(30、32)からデータを読み出すべき制御信号をロウデコーダ104及びカラムデコーダ106に供給する(ステップS42)。ステップS42の実行により、ロウデコーダ104は、アクセスアドレスAに対応したワード線WLに走査電圧VSを印加する。また、ステップS42の実行により、カラムデコーダ106は、ビット線BL
1〜BL
Mの内でデータ「2」の書込対象となるメモリセル10が接続されている一対のビット線BLの内の一方に接地電位(0ボルト)、他方に読出設定電圧VRを印加する。これにより、アクセスアドレスAに属しており且つデータ「2」の書込対象となるメモリセル10の電荷蓄積部(30、32)から、ビット線BLを介して読出電流RDが送出される。
【0068】
次に、コントローラ108は、ビット線BLを介して送出された読出電流RDの全てが、
図5に示す如き読出電流閾値Iref3よりも低いか否かを判定する(ステップS43)。尚、読出電流閾値Iref3とは、蓄積された電荷量がデータ「2」に対応した量を満たすか否かを判定する為の上記第3閾値に対応した第3の読出電流閾値であり、上記した第2の読出電流閾値(Iref2)よりも大であり且つ上記最大読出電流閾値(Iref4)よりも小なる値を有する。また、読出電流閾値Iref3に対応した蓄積電荷量は、初期電荷量範囲(分布B3に相当)の最大量よりも大である。
【0069】
かかるステップS43において、読出電流RDの全てが読出電流閾値Iref3より低い状態にはないと判定された場合、つまり読出電流閾値Iref3よりも高い読出電流RDが1つでも存在する場合、コントローラ108は、以下のステップS44を実行する。つまり、コントローラ108は、読出電流閾値Iref3よりも高い読出電流RDを送出したメモリセル10に対して、その電荷蓄積部をデータ「2」の記憶状態に設定する為の書込電圧VG2(VG1>VG2)を用いた書き込みを実施させるべき制御信号をロウデコーダ104及びカラムデコーダ106に供給する(ステップS44)。ステップS44の実行により、ロウデコーダ104は、アクセスアドレスAに対応したワード線WLに書込電圧VG2を印加する。また、ステップS44の実行により、カラムデコーダ106は、ビット線BL
1〜BL
Mの内で、上記した読出電流閾値Iref3よりも高い読出電流RDが送出されたビット線BLに書込設定電圧VWを印加しつつ、その他のビット線BLには接地電位(0ボルト)を印加する。かかるステップS44により、読出電流閾値Iref3よりも高い読出電流RDを送出したメモリセル10の電荷蓄積部(30、32)には、書込電圧VG2の印加に応じた電荷が注入される。
【0070】
ステップS44の実行後、コントローラ108は、書込電圧VG2に電圧vを加算したものを新たな書込電圧VG2として設定する(ステップS45)。かかるステップS45の実行後、コントローラ108は、上記ステップS42の実行に戻って前述した如き動作を繰り返し実行する。
【0071】
すなわち、データ「2」の書込対象となるメモリセル10の電荷蓄積部(30、32)から読み出された読出電流RDの全てが読出電流閾値Iref3よりも低い状態、つまりデータ「2」が記憶された状態になるまで、書込電圧VG2を段階的に増加させつつ電荷を電荷蓄積部(30、32)に注入するという、ベリファイ処理(S42〜S45)を実行するのである。
【0072】
この間、上記ステップS43において、読出電流RDの全てが読出電流閾値Iref3よりも低いと判定された場合、コントローラ108は、アクセスアドレスAの内容を「1」だけインクリメントしたものを新たなアクセスアドレスAとして内蔵レジスタに上書き記憶する(ステップS46)。かかるステップS46の実行後、コントローラ108は、アクセスアドレスAが、メモリセルアレイ100の全アドレスの内で書込データの最終データが書き込まれるべき最終アドレスよりも大であるか否かを判定する(ステップS47)。ステップS47においてアクセスアドレスAが最終アドレス以下であると判定された場合、コントローラ108は、上記ステップS42の実行に戻り前述した如き動作を繰り返し実行する。一方、ステップS47においてアクセスアドレスAが最終アドレスより大であると判定された場合には、コントローラ108は、このデータ「2」書込ルーチンを終了し、
図3に示す如きデータ書き込みプログラムを終了させる。
【0073】
上記したデータ「2」書込ルーチンによれば、メモリセルアレイ100の全電荷蓄積部(30、32)の内でデータ「2」の書込対象となる電荷蓄積部は、
図5に示す読出電流閾値Iref3よりも低い読出電流の分布B2に含まれる読出電流RDを送出し得る程度の電荷量の蓄積状態、つまり第4のデータ値であるデータ「2」の記憶状態に設定される。この際、分布B2は、全ての電荷蓄積部における蓄積電荷量の分布に対応している。
【0074】
よって、データ「2」書込ルーチンによれば、
図5に示すように、分布B3の如き電荷量形成状態(初期状態)にある電荷蓄積部に対して、データ「2」に対応した量の電荷が注入され、この電荷蓄積部の蓄積電荷量が初期状態での蓄積電荷の最大量(Q
MAX)よりも大なる量(分布B2)に遷移するのである。
【0075】
かかるデータ「2」書込ルーチン(S3)の実行後、コントローラ108は、
図3に示すデータ書き込みプログラムの実行を終了する。
【0076】
以上の如く、
図1に示す半導体不揮発性メモリにおいては、データ「0」〜「3」からなる4値の書込データを書き込むにあたり、先ず、全てのメモリセル10の電荷蓄積部(30、32)に対して、以下の如き初期化書込(S1)を行うようにしている。すなわち、電荷蓄積部(30、32)の各々から読出電流(RD)を送出させ(S12)、読出電流が最大読出電流閾値(Iref4)よりも大となる電荷蓄積部に、この読出電流が最大読出電流閾値を下回るまで電荷を注入する(S13〜S15)。つまり、電荷蓄積部(30、32)の各々から読み出される読出電流が全て最大読出電流閾値(Iref4)を下回る状態になるまで、かかる状態に到っていない電荷蓄積部に対して電荷の注入が為されるのである。これにより、全ての電荷蓄積部における蓄積電荷量の最小量が上記初期最小電荷量Q
MINに底上げされる。よって、初期化書込(S1)実行前の段階において、電荷蓄積部における蓄積電荷量の分布が、例えば
図5に示す如き初期最小電荷量Q
MINを含んだ比較的広い分布AP(破線にて示す)である場合、かかる初期化書込を実行することにより、この分布は、初期最小電荷量Q
MINを最小とする分布B3に遷移する。つまり、
図5に示すように、初期状態での蓄積電荷量の最小量が上記初期最小電荷量Q
MINに底上げされるのである。要するに、初期化書込前に比べて、電荷蓄積部(30、32)各々に蓄積されている電荷の平均量が多くなると共に、電荷蓄積部(30、32)各々による初期状態での蓄積電荷量のバラツキ、及び電荷蓄積部(30、32)各々から読み出された読出電流値のバラツキが小さくなるのである。
【0077】
よって、かかる初期化書込の終了後、データ「0」〜「2」の書き込み(S2〜S4)を実施する場合、上記した初期化書込を実行しない場合に比して、ベリファイ処理(S22〜S25、S32〜S35、又はS42〜S45)での書き込み回数を短縮させることが可能となる。
【0078】
例えば、
図9に示す如く、初期化書込を実行しない場合において、その初期状態が
図9に示す如き読出電流K1を送出し得る状態にあるメモリセル10に、データ「0」を書き込む場合、その電荷蓄積部に注入すべき電荷量は
図9に示す如き電荷量Q1となる。一方、初期化書込を実行した場合、このメモリセル10の初期状態は、
図9に示す如き読出電流K2を送出し得る状態になる。よって、かかるメモリセル10にデータ「0」を書き込む場合に注入すべき電荷量Q2は、上記電荷量Q1よりも小となる。従って、初期化書込を実行することによりベリファイ処理での書き込み回数を減らすことが可能となる。また、ベリファイ処理での書き込み回数が全体的に少なくなるので、電荷蓄積部(30、32)の内の一方の電荷蓄積部への書き込みに伴う、他方の電荷蓄積部の読出電流の低下が抑制されるようになる。
【0079】
よって、書込み回数の削減による書込み時間の短縮と共に、データの読み出し精度の低下を抑制することが可能となるのである。
【0080】
また、初期状態での読出電流の分布の幅が広い、つまり電荷蓄積部の各々に蓄積されている電荷量のバラツキが大きいと、電荷蓄積部(30、32)の内の一方の電荷蓄積部への書き込み終了後も、他方の電荷蓄積部への書き込みが継続する場合がある。この際、他方の電荷蓄積部への書き込みが継続するほど、書き込みが終了した一方の電荷蓄積部が送出し得る読出電流値が低下するという不具合が生じる。
【0081】
しかしながら、上記した初期化書込の実行によれば、全メモリセル10における初期状態での読出電流の分布の幅を、この初期化書込を実行しない場合に比して狭くすることができるので、上述した如き不具合を解消することが可能となる。
【0082】
尚、
図4に示す初期化書込処理では、初期状態時において読出電流閾値Iref4よりも高い読出電流を送出し得る状態、つまり
図5の斜線に示される領域に含まれる電荷蓄積部に電荷を注入(書込)することによりその読出電流を読出電流閾値Iref4未満に制限しているが、この電荷注入の対象となる電荷蓄積部の数を変更することも可能である。
【0083】
例えば、
図4に示すステップS12による読出処理において、ワード線WLに印加する走査電圧VSの電圧値、つまり、メモリセル10各々のゲート電極に印加する電圧値を変更する。この際、走査電圧VSの電圧値を下げると、
図10に示すように、読出電流閾値Iref4に対して相対的に、初期状態時における読出電流の分布APが低電流側にシフトする。よって、かかる分布APの内で読出電流閾値Iref4よりも高い読出電流を送出し得る状態にある電荷蓄積部、つまり
図10の斜線に示される領域に含まれる電荷蓄積部が電荷注入の対象となる。従って、この際、電荷注入の対象となる電荷蓄積部の数が減ることになる。
【0084】
また、上記実施例では、単一のメモリセル10に4値データを2系統分(4ビット)書き込むことが可能な半導体不揮発性メモリを例にとって動作を説明したが、単一のメモリセルに2値又は3値のデータ、或いは5値以上のデータを2系統分書き込むことが可能な半導体不揮発性メモりにも同様に適用可能である。
【0085】
また、
図3に示すデータ書き込みプログラムでは、初期化書込(S1)を実行してから、本来のデータ書込(S2〜S4)を順次実行するようにしているが、各データ書込毎に、その直前に初期化書込(S1)を実行するようにしても良い。
【0086】
また、上記実施例でのベリファイ処理(S12〜S15、S22〜S25、S32〜S35、又はS42〜S45)では、読出制御によってビット線BLに送出された電流に基づき電荷量の判定を行っているが、この読出時におけるビット線BL上の電圧に基づいて電荷量の判定を行うようにしても良い。この際、上記した読出電流閾値Iref1〜Iref4に代えて、夫々に対応した読出電圧閾値を用いる。尚、これら読出電流閾値又は読出電圧閾値を生成する構成としては、夫々の値に対応した独立電流電圧源、或いは少なくとも1つの可変電流電圧源を用いる。
【0087】
要するに、
図4に示すステップS13において、電荷蓄積部に蓄積されている電荷に対応した電流をビット線に送出させた際にこのビット線BLに流れる電流又はビット線BL上の電圧に基づいて、初期最小電荷量(Q
MIN)よりも小なる量の電荷が蓄積されている電荷蓄積部を判定するようにすれば良いのである。