以下、本発明の実施の形態について図面を参照して説明する。
(第1の実施形態)
図2は、不揮発性半導体記憶装置の概略構成を示すものであり、例えば4値(2ビット)を記憶するNANDフラッシュメモリの構成を示している。
メモリセルアレイ1は複数のビット線と複数のワード線と共通ソース線を含み、例えばEEPROMセルからなる電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ1には、ビット線を制御するためのビット制御回路2とワード線制御回路6が接続されている。
ビット線制御回路2は、後述するように複数のデータ記憶回路及びフラグ用データ記憶回路を含んでいる。このビット線制御回路2は、ビット線を介してメモリセルアレイ1中のメモリセルのデータを読み出したり、ビット線を介してメモリセルアレイ1中のメモリセルの状態を検出したり、ビット線を介してメモリセルアレイ1中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行なう。ビット線制御回路2には、カラムデコーダ3、データ入出力バッファ4が接続されている。ビット線制御回路2内のデータ記憶回路はカラムデコーダ3によって選択される。データ記憶回路に読み出されたメモリセルのデータは、前記データ入出力バッファ4を介してデータ入出力端子5から外部へ出力される。
また、外部からデータ入出力端子5に入力された書き込みデータは、データ入出力バッファ4を介して、カラムデコーダ3によって選択されたデータ記憶回路に入力される。
ワード線制御回路6は、メモリセルアレイ1に接続されている。このワード線制御回路6は、メモリセルアレイ1中のワード線を選択し、選択されたワード線に読み出し、書き込みあるいは消去に必要な電圧を印加する。
メモリセルアレイ1、ビット線制御回路2、カラムデコーダ3、データ入出力バッファ4、及びワード線制御回路6は、制御信号及び制御電圧発生回路7に接続され、この制御信号及び制御電圧発生回路7によって制御される。制御信号及び制御電圧発生回路7は、制御信号入力端子8に接続され、外部から制御信号入力端子8を介して入力される制御信号によって制御される。
前記ビット線制御回路2、カラムデコーダ3、ワード線制御回路6、制御信号及び制御電圧発生回路7は書き込み回路、及び読み出し回路を構成している。
図3は、図2に示すメモリセルアレイ1及びビット線制御回路2の構成を示している。メモリセルアレイ1には複数のNANDセルが配置されている。1つのNANDセルは、直列接続された例えば16個のEEPROMからなるメモリセルMCと、選択ゲートS1、S2とにより構成されている。第1の選択ゲートS1はビット線BL0に接続され、第2の選択ゲートS2はソース線SRCに接続されている。各ロウに配置されたメモリセルの制御ゲートはワード線WL1、WL2、WL3〜WL16に共通接続されている。また、第1の選択ゲートS1はセレクト線SG1に共通接続され、第2の選択ゲートS2はセレクト線SG2に共通接続されている。
ビット線制御回路2は複数のデータ記憶回路10及び第1、第2のフラグ用データ記憶回路10a、10bを有している。各データ記憶回路10及び第1、第2のフラグ用データ記憶回路10a、10bには、一対のビット線(BL0、BL1)、(BL2、BL3)…(BLi、BLi+1)、(BLf1、BLf2、BLf3、BLf4)が接続されている。
メモリセルアレイ1は、破線で示すように、複数のブロックを含んでいる。各ブロックは、複数のNANDセルにより構成され、このブロック単位でデータが消去される。また、消去動作は、データ記憶回路10、第1、第2のフラグ用データ記憶回路10a、10bに接続されている2本のビット線について同時に行なわれる。
また、ビット線の1つ置きに配置され、1つのワード線に接続された複数のメモリセル(破線で囲まれた範囲のメモリセル)は、1セクタを構成する。このセクタ毎にデータが書き込まれ、読み出される。1セクタには例えば2ページ分のデータが記憶される。また、各ワード線には、フラグを記憶するための複数の第1のフラグセルFC1、及び複数の第2のフラグセルFC2が接続されている。すなわち、この実施形態の場合、1セクタは1つの第1のフラグセルFC1と、1つの第2のフラグセルFC2を含んでいる。
尚、第1、第2のフラグセルFC1、FC2は、1セクタにそれぞれ1つと限定されるものではなく、破線で示すように、1セクタに複数のフラグセルを接続してもよい。この場合、後述するように、複数のフラグセルに記憶されたデータの多数決により、フラグセルに記憶されたデータを決定すればよい。
リード動作、プログラムベリファイ動作及びプログラム動作時において、データ記憶回路10に接続されている2本のビット線(BLi、BLi+1)のうち外部より指定されたアドレス信号(YA1、YA2…YAi、YAFlag)に応じて1本のビット線が選択される。さらに、外部アドレスに応じて、1本のワード線が選択され、1セクタ(2ページ分)が選択される。この2ページの切り替えはアドレスによって行われる。
図4(a)(b)はメモリセル及び選択トランジスタの断面図を示している。図4(a)はメモリセルを示している。基板41にはメモリセルのソース、ドレインとしてのn型拡散層42が形成されている。基板41の上にはゲート絶縁膜43を介して浮遊ゲート(FG)44が形成され、この浮遊ゲート44の上には絶縁膜45を介して制御ゲート(CG)46が形成されている。図4(b)は選択ゲートを示している。基板41にはソース、ドレインとしてのn型拡散層47が形成されている。基板41の上にはゲート絶縁膜48を介して制御ゲート49が形成されている。
図5は、メモリセルアレイの1つのNANDセルの断面を示している。この例において、1つのNANDセルは、図4(a)に示す構成の16個のメモリセルMCが直列接続されて構成されている。NANDセルのドレイン側、ソース側には、図4(b)に示す構成の第1の選択ゲートS1及び第2の選択ゲートS2が設けられている。
図6は、図3に示すデータ記憶回路10の一例を示す回路図である。第1、第2のフラグ用データ記憶回路10a、10bもデータ記憶回路10と同様の構成とされている。
このデータ記憶回路10は、プライマリデータキャッシュ(PDC)、セコンダリデータキャッシュ(SDC)、ダイナミックデータキャッシュ(DDC)、テンポラリデータキャッシュ(TDC)を有している。SDC、PDC、DDCは、書き込み時に入力データを保持し、読み出し時に読み出しデータを保持し、ベリファイ時に一時的にデータを保持し、多値データを記憶する際に内部データの操作に使用される。TDCは、データの読み出し時にビット線のデータを増幅し、一時的に保持するとともに、多値データを記憶する際に内部データの操作に使用される。
SDCは、ラッチ回路を構成するクロックドインバータ回路61a、61b、及びトランジスタ61c、61dにより構成されている。トランジスタ61cはクロックドインバータ回路61aの入力端と、クロックドインバータ回路61bの入力端の間に接続されている。このトランジスタ61cのゲートには信号EQ2が供給されている。トランジスタ61dはクロックドインバータ回路61bの入力端と接地間に接続されている。このトランジスタ61dのゲートには信号PRSが供給されている。SDCのノードN2aは、カラム選択トランジスタ61eを介して入出力データ線IOに接続され、ノードN2bは、カラム選択トランジスタ61fを介して入出力データ線IOnに接続される。これらトランジスタ61e、61fのゲートにはカラム選択信号CSLiが供給されている。SDCのノードN2aは、トランジスタ61g、61hを介してPDCのノードN1aに接続されている。トランジスタ61gのゲートには信号BLC2が供給され、トランジスタ61hのゲートには信号BLC1が供給されている。
PDCは、クロックドインバータ回路61i、61j及びトランジスタ61kにより構成されている。トランジスタ61kは、クロックドインバータ回路61iの入力端とクロックドインバータ回路61jの入力端の相互間に接続されている。このトランジスタ61kのゲートには信号EQ1が供給されている。PDCのノードN1bはトランジスタ61lのゲートに接続されている。このトランジスタ61lの電流通路の一端はトランジスタ61mを介して接地されている。このトランジスタ61mのゲートには信号CHK1が供給されている。また、トランジスタ61lの電流通路の他端はトランスファーゲートを構成するトランジスタ61n、61oの電流通路の一端に接続されている。このトランジスタ61nのゲートには信号CHK2nが供給されている。また、トランジスタ61oのゲートは前記トランジスタ61gと61hの接続ノードに接続されている。トランジスタ61n、61oの電流通路の他端には、信号COMiが供給されている。この信号COMiは全データ記憶回路10に共通の信号であり、全データ記憶回路10のベリファイが完了したかどうかを示す信号である。すなわち、後述するように、ベリファイが完了すると、PDCのノードN1bがローレベルとなる。この状態において、信号CHK1、CHK2をハイレベルとすると、ベリファイが完了している場合、信号COMiがハイレベルとなる。
さらに、前記TDCは、例えばMOSキャパシタ61pにより構成されている。このキャパシタ61pは、前記トランジスタ61g、61hの接続ノードN3と接地間に接続されている。また、接続ノードN3には、トランジスタ61qを介してDDCが接続されている。トランジスタ61qのゲートには、信号REGが供給されている。
DDCは、トランジスタ61r、61sにより構成されている。トランジスタ61rの電流通路の一端には信号VREGが供給され、他端は前記トランジスタ61qの電流通路に接続されている。このトランジスタ61rのゲートはトランジスタ61sを介して前記PDCのノードN1aに接続されている。このトランジスタ61sのゲートには信号DTGが供給されている。
さらに、前記接続ノードN3にはトランジスタ61t、61uの電流通路の一端が接続されている。トランジスタ61uの電流通路の他端には信号VPREが供給され、ゲートにはBLPREが供給されている。前記トランジスタ61tのゲートには信号BLCLAMPが供給されている。このトランジスタ61tの電流通路の他端はトランジスタ61vを介してビット線BLoの一端に接続され、トランジスタ61wを介してビット線BLeの一端に接続されている。ビット線BLoの他端はトランジスタ61xの電流通路の一端に接続されている。このトランジスタ61xのゲートには信号BlASoが供給されている。ビット線BLeの他端はトランジスタ61yの電流通路の一端に接続されている。このトランジスタ61yのゲートには信号BlASeが供給されている。これらトランジスタ61x、61yの電流通路の他端には、信号BLCRLが供給されている。トランジスタ61x、61yは、信号BlASo、BlASeに応じてトランジスタ61v、61wと相補的にオンとされ、非選択のビット線に信号BLCRLの電位を供給する。
さらに、データ入力端子5aは、複数のインバータ回路62a、62b、62cを介して前記入出力データ線IOに接続され、さらに、インバータ回路62dを介して前記入出力データ線IOnに接続される。
上記各信号及び電圧は、図2に示す制御信号及び制御電圧発生回路7により生成され、この制御信号及び制御電圧発生回路7の制御に基づき、以下の動作が制御される。
本メモリは、多値メモリであり、1セルに例えば2ビットのデータを記憶することができる。この2ビットの切り替えはアドレス(第1ページ、第2ページ)によって行なわれる。
(動作説明)
上記構成において、動作について説明する。
図1は、メモリセルのデータとメモリセルの閾値電圧の関係を示している。消去動作を行なうとメモリセルのデータは“0”となる。図1(a)に示すように、第1ページの書き込みを行なうと、メモリセルのデータはデータ“0”とデータ“2”になる。図1(b)に示すように、第2ページの書き込み前に隣接セルに実際のデータの閾値電圧以下のデータが書き込まれる。すると、このセルに書き込まれたデータにより、データ“2”の閾値電圧の分布が大きくなる。この後、第2ページのデータが書き込まれると、メモリセルのデータは、図1(c)に示すように、本来の閾値電圧を有するデータ“0”〜“3”となる。第1の実施形態では、メモリセルのデータは閾値電圧の低いほうから高い方へと、定義されている。
第1の実施形態は、図1(c)に示す第2ページの書き込みにおいて、閾値電圧“b’”のベリファイと、閾値電圧“c’”のベリファイを、一度ビット線をプリチャージした後、ワード線電位を複数回変えることにより、一括して行なうことを特徴としている。
図7は、NANDセルに対する書き込み順序を示している。ブロック内において、ソース線に近いメモリセルからページごとに書き込み動作が行なわれる。図7は、説明の便宜上、ワード線を4本としている。
第1番目の書き込みは、メモリセル1の第1ページに1ビットのデータが書きこまれる。
第2番目の書き込みは、メモリセル1とワード方向に隣接したメモリセル2の第1ページに1ビットのデータが書きこまれる。
第3番目の書き込みは、メモリセル1とビット方向に隣接したメモリセル3の第1ページに1ビットのデータが書きこまれる。
第4番目の書き込みは、メモリセル1と対角に隣接したメモリセル4の第1ページに1ビットのデータが書きこまれる。
第5番目の書き込みは、メモリセル1の第2ページに1ビットのデータが書きこまれる。
第6番目の書き込みは、メモリセル1とワード方向に隣接したメモリセル2の第2ページに1ビットのデータが書きこまれる。
第7番目の書き込みは、メモリセル3とビット方向に隣接したメモリセル5の第1ページに1ビットのデータが書きこまれる。
第8番目の書き込みは、メモリセル3と対角に隣接したメモリセル6の第1ページに1ビットのデータが書きこまれる。
第9番目の書き込みは、メモリセル3の第2ページに1ビットのデータが書きこまれる。
第10番目の書き込みは、メモリセル3とワード方向に隣接したメモリセル4の第2ページに1ビットのデータが書きこまれる。
第11番目の書き込みは、メモリセル5とビット方向に隣接したメモリセル7の第1ページに1ビットのデータが書きこまれる。
第12番目の書き込みは、メモリセル5と対角に隣接したメモリセル8の第1ページに1ビットのデータが書きこまれる。
第13番目の書き込みは、メモリセル5の第2ページに1ビットのデータが書きこまれる。
第14番目の書き込みは、メモリセル5とワード方向に隣接したメモリセル6の第2ページに1ビットのデータが書きこまれる。
第15番目の書き込みは、メモリセル7の第2ページに1ビットのデータが書きこまれる。
第16番目の書き込みは、メモリセル7とワード方向に隣接したメモリセル8の第2ページに1ビットのデータが書きこまれる。
(プログラム及びプログラムベリファイ)
(第1ページプログラム)
図8は、第1ページのプログラムのブロックダイアグラムを示している。プログラム動作は、先ずアドレスを指定し、図3に示す2ページ(1セクタ)が選択する。本メモリは、この2ページのうち、第1ページ、第2ページの順でしか、プログラム動作できない。したがって、先ず、アドレスにより第1ページを選択する。
このアドレス入力中に図6の61dのトランジスタをオンすることで、全てのSDCのN2aのノードをVssにする。(S11)
次に、データ入出力線IO、IOnを介して書き込みデータを、外部より入力し全てのデータ記憶回路10内のSDC(図6に示す)に記憶する(S12)。このとき、データを書き込む場合、外部よりデータ入力端子5aにデータ“0”が入力される。このデータはインバータ回路62a、62b、62c、62d、トランジスタ61e、61fを介してSDCに供給される。このため、SDCのN2aのノードは、Vddになる。また、書き込み非選択の場合、データ入力端子5aにデータ“1”が入力される。このため、SDCのN2aのノードは、Vssになる。この後、書き込みコマンドが入力されると、全てのデータ記憶回路10内のSDCのデータがPDCに転送される(S13)。すなわち、信号BLC1,BLC2が所定の電圧、例えばVdd+Vth(Vdd:電源電圧(例えば3V又は1.8V、しかし、この電圧に限定されるものではない)、Vth:NチャネルMOSトランジスタの閾値電圧)とされ、トランジスタ61h、61gがオンとされる。すると、ノードN2aのデータがトランジスタ61g、61hを介してPDCに転送される。このため、外部よりデータ“1”(書き込みを行なわない)が入力された場合、PDCのノードN1aは、ローレベルになり、データ“0”(書き込みを行なう)が入力された場合、PDCのノードN1aは、ハイレベルとなる。以後、PDCのデータはノードN1aの電位、SDCのデータはノードN2aの電位とする。
(データ反転動作)(S14)
この後、VPRE=Vdd、信号BLPREをVdd+Vthとし、とし一旦N3をVddにプリチャージした後に、DTG=Vdd+Vth、としてPDCのデータをDDCに写す。次に、REG=Vdd、VREG=Vssとし、DDCがハイレベルの場合、ノードN3はローレベル、DDCがローレベルの場合、ノードN3はハイレベルとなる。この後、一旦信号SEN1、LAT1をオフとし、信号EQ1をVddとし、ノードN1aとノードN1bを同電位とする。この後、信号BLC1=Vdd+Vthとし、TDCのデータ(ノードN3の電位)をPDCに移す。この結果、元々PDCにデータ“1”がラッチされていた場合、PDCのデータは“0”になる。また、PDCにデータ“0”がラッチされていた場合、PDCのデータは“1”になる。
書き込みコマンドが入力されるとプログラムをするための電圧Vpgm及びVpassの昇圧回路が動作する。これら電圧Vpgm及びVpassの電位は直ぐには立ち上がらない。上記データ反転動作は、この電位上昇に要する待ち時間の間に行なう。このため、書き込みスピードは遅くならない。
このように、入力データを反転するのは、メモリセル内に書かれている1ページのデータをページバッファに読み出し、外部に出力せずに他の1ページに書き込むページコピーを行なう場合、有効である。すなわち、ページコピーを行なう場合、先ず、読み出しを行なう。この結果、書き込みを行った場合(データ入力端子5aにデータ“0”を入力した場合)、SDCはデータ“1”をラッチし、書き込みを行なわなかった場合(データ入力端子5aにデータ“1”を入力した場合)、SDCはデータ“0”をラッチする。前述したように、SDCは入力データに対して反転されたデータをラッチしている。このため、ページコピーのために読み出されたデータと書き込み時にSDCにラッチされたデータとが一致する。このようにSDCにおいて、次に書くデータを一致させておくと、読み出したデータの一部のみデータを外部より入力し書き換えることが容易にできる。したがって、ページコピーをしない場合においても、常に、外部より入力されたデータをページバッファ内でデータ反転するようにする。
上記データ反転動作は、通常のプログラムコマンドを入れることにより行なう。この後、PDCのデータをDDCにコピーする。
尚、第1ページのプログラムにおいて、フラグセルにはデータが書き込まれない。このため、第1、第2のフラグ用データ記憶回路10a,10b内のPDCはデータ“1”をラッチしている。
さらに、プログラマブルカウンタ(PC)の値が“0”に初期設定される。このカウンタは、図2に示す例えば制御信号及び制御電圧発生回路7に設けられている。しかし、制御信号及び制御電圧発生回路7に限定されるものではない。
(プログラム動作)(S15)
先ず、図6示す信号BLC1、BLCLAMP、BLSo又はBLSeの電位をVdd+Vthとする。すると、トランジスタ61h、61t、61v又は61wがオンとなり、PDCに保持されたデータがビット線に供給される。PDCにデータ“1”(書き込みを行なわない)が記憶されている時、ビット線がVddになり、データ“0”(書き込みを行なう)時、ビット線がVss(接地電位)になる。また、選択されたワード線に接続され、非選択ページの(ビット線が非選択である)セルは書き込みが行なわれてはならない。このため、これらのセルに接続されているビット線にもデータ“1”と同じようにVddを供給する。ここで、選択されているブロックのセレクト線SG1にVdd、選択ワード線に電位VPGM(20V)、非選択ワード線に電位Vpass(10V)を印加する。すると、ビット線がVssになっている場合、セルのチャネルがVss、ワード線がVPGMとなるので書き込みが行なわれる。一方、ビット線がVddになっている場合、セルのチャネルがVssではなく、VPGMを上げることにより、カップリングでVPGM/2となる。このため、このセルはプログラムされない。
多値メモリでは、閾値の分布を狭めるため、図1に示すように、本来のベリファイ電位“v’”と、これより低いベリファイ電位“v*’”を設定し、このベリファイ電位“v*’”を超えたセルに対応するビット線に中間電位(例えば1V)を供給することにより、書き込みスピードを遅くしている。したがって、ここで、信号VREGをVdd、信号REGを中間電位(例えば1V+Vth)にすると、ビット線がVssの場合で、DDCがハイレベルの場合、ビット線は中間電位になる。また、DDCがローレベルの場合、ビット線はVssのままとなり、ビット線がVddの場合、Vddのままになる。
第1ページの書き込みにおいて、入力データが“0”の場合、図1に示すように、メモリセルのデータを“2”にする。入力データが“1”の場合、メモリセルのデータは“0”のままである。
また、プログラム動作に伴い、カウンタ(PC)がカウントアップされる(PC=PC+1)。
(第1ページベリファイ)(S16)
第1ページでは、図1(a)に示すように、本来のベリファイ電位“v’”まで書き込む。したがって、ベリファイ動作の第1ステップでは、ワード線に本来のベリファイ電位“v’”より低い電位“v*’”を供給してベリファイし、第2ステップにおいて、ワード線の電位を“v’”に上げてベリファイする。以後“*”は本来の値より低い電位を表す。
先ず、選択されているブロック内の非選択ワード線及びセレクト線SG1に読み出し時の電位Vreadを供給し、図6に示すデータ記憶回路10の信号BLPREに例えばVdd+Vth、信号BLCLAMPに所定の電圧、例えば1V+Vthを供給し、信号VPREをVddとし、ビット線を1Vにプリチャージする。
次に、セルのソース側のセレクト線SG2をハイレベルにする。閾値電圧が電位“v*’”より高いセルはオフする。このため、ビット線はハイレベルのままである。また、閾値電圧が電位“v*’”より低いセルはオンする。このため、ビット線はVssとなる。
次に、信号BLPREに所定の電圧、例えばVdd+Vthを供給し、VPRE=Vddとすることにより、TDCのノードN3をVddにプリチャージした後、信号BLCLAMPを所定の電圧、例えば0.9V+Vthとしてトランジスタ61tをオンさせる。TDCのノードN3は、ビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。
ここで、書き込みを行なう場合、図6のDDCにローレベルが記憶され、書き込みを行なわない場合、DDCにハイレベルが記憶されている。このため、信号VREGをVddとし、信号REGをハイレベルにすると、書き込みを行なわない場合のみTDCのノードN3が強制的にハイレベルとなる。この動作の後、PDCのデータをDDCに移し、TDCの電位をPDCに転送する。PDCにハイレベル信号がラッチされる場合は、セルに書き込みを行なわない場合と、セルにデータ“2”を書き込んでおり、セルの閾値電圧がベリファイ電位“v*’”に達した場合だけである。また、PDCにローレベル信号がラッチされる場合は、セルの閾値電圧が“v*’”に達しない場合である。
次に、ワード線の電位を“v*’”から“v’”に上げると、閾値電圧が“v’”より低いセルはオンし、ビット線はVssとなる。
次に、信号BLPREに所定の電圧、例えばVdd+Vthを供給し、VPRE=Vddとすることにより、TDCのノードN3をVddにプリチャージした後、信号BLCLAMPを所定の電圧、例えば0.9V+Vthとしてトランジスタ61tをさせる。TDCのノードN3は、ビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。
ここで、書き込みを行なう場合、図6のDDCにローレベルが記憶され、書き込みを行なわない場合、DDCにハイレベルが記憶されている。このため、信号VREGをVddとし、信号REGをハイレベルにすると、書き込みを行なわない場合のみTDCのノードN3が強制的にハイレベルとなる。この動作の後、PDCのデータをDDCに移し、TDCの電位をPDCに転送する。PDCにハイレベル信号がラッチされる場合は、セルに書き込みを行なわない場合と、セルにデータ“2”を書き込んでおり、セルの閾値電圧がベリファイ電位“v’”に達した場合だけである。また、PDCにローレベル信号がラッチされる場合は、セルの閾値電圧が“v’”に達しない場合である。
この結果、DDCがハイレベルとなるのは、セルの閾値電圧が“v*’”を超えている場合と、書き込み非選択の場合であり、DDCがローレベルとなるのは、書き込みを行っている場合で、セルの閾値電圧が“v*’”以下の場合である。PDCがハイレベルとなるのは、セルの閾値電圧が“v’”を超えている場合と、書き込み非選択の場合であり、PDCがローレベルとなるのは、書き込みを行っている場合で、セルの閾値電圧が“v’”以下の場合である。
PDCがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路10のデータがハイレベルになるまでこのプログラム動作とベリファイ動作を繰り返す(S15−S18)。このとき、PDCがローレベルでDDCがハイレベルのセル、すなわち、閾値電圧が“v*’”以上で“v’”の場合、ビット線に中間電位を供給し、書き込みスピードを抑える。
(隣接セルプログラム)
図7に示すように、メモリセル1の第1ページに1ビットのデータの書き込んだ後、メモリセル1とワード方向に隣接したメモリセル2の第1ページの書き込み、メモリセル1とビット方向に隣接したメモリセル3の第1ページの書き込み、メモリセル1と対角に隣接したメモリセル4の第1ページの書き込みが順次行なわれる。これらの書き込み動作が行なわれると、書き込みデータによっては、隣接セルの浮遊ゲート間容量(FG−FG間容量)によって、メモリセル1の閾値電圧が上がる。このため、メモリセル1のデータ“0”とデータ“2”の閾値電圧分布は図1(b)のように電位が高いほうに広がる。
この後、第5の書き込みにおいて、メモリセル1の第2ページに1ビットのデータを書き込む。
(第2ページプログラム)
第1の実施形態において、第2ページのプログラム及びベリファイ動作が高速化されている。すなわち、メモリセルのデータ“2”及び“3”のベリファイ動作を同時に行なうことにより、高速動作を可能としている。以下に、その動作を説明する。
図9は、第2ページのプログラム(書き込み)動作のブロックダイアグラムを示している。第2ページプログラム動作も、先ずアドレスに応じて、図3に示す2ページが選択される。これと同時にページバッファをリセットする(S21)。
次に、書き込みデータを外部より入力し、全てのデータ記憶回路内のSDCに記憶する(S22)。外部よりデータ“1”(書き込みを行なわない)が入力されると、データ記憶回路10のSDCのノードN2aは、ローレベルになり、外部よりデータ“0”(書き込みを行なう)が入力されるとハイレベルとなる。
(第1のフラグセルデータロード)(S23)
書き込みコマンドが入力されると、第2ページのプログラムであるので、第1のフラグセルFC1にデータを書き込むため、第1のフラグセル用データ記憶回路10a内のSDCはハイレベルとなる。前述したように、フラグセルは、信頼性を高めるために、複数セル用意することも可能である。第2ページにおいて、第1のフラグセルFC1に対応するSDCはハイレベルとなる。これにより第1のフラグセルFC1は、データ“0”から“1”へと書き変えられる。
第2のフラグセルFC2に対応するSDCをローレベルにする。これにより第2のフラグセルはデータ“0”の書き込みとなるが、後の操作によりデータ“2”への書き込みとなる。
第2ページのプログラムでは、図1(c)に示すように、メモリセルのデータが“0”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータを“0”のままとし、外部から入力されるデータが“0”の場合、メモリセルのデータを“1”にする。
また、メモリセルのデータが“2”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータを“2”のままとする。しかし、第1ページの書き込みにおいて、メモリセルの閾値電圧は、本来のデータ“2”の閾値電圧より低い“v’”までしか上昇していない。このため、データ“2”本来の閾値電圧“b’”まで、これらのセルに対し書き込みを行なう。
また、メモリセルのデータが“2”の場合で、外部から入力されるデータが“0”の場合、メモリセルのデータを“3”にする。
(内部データリード)(S24)
先ず、セルへの書き込みの前に、第1ページのメモリセルのデータが“0”か“2”であるかを判断するため、内部リード動作を行なう。内部データリードは、リード動作と同様である。通常メモリセルのデータが“0”か“2”かの判断時において、選択ワード線には、リード時の電位“b”を与える。しかし、第1ページのプログラム動作では、通常のベリファイ電位“v’”より低い“v*’”までしか書き込んでいないため、“b”の電位より低い場合もある。したがって、内部データロードでは、ワード線に“a”の電位を供給して読み出し動作をする。
すなわち、選択されているブロック内の非選択ワード線及びセレクト線SG1に電位Vreadを印加する。これとともに、データ記憶回路10の信号VPREをVddとし、信号BLPRE、BLCLAMPを所定の電圧、例えば1V+Vthとして、ビット線をVddにプリチャージした後、セルのソース側のセレクト線SG2をハイレベルとする。閾値電圧が電位“a”より高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位“a”より低いセルはオンするため、ビット線は放電され、接地電位Vssとなる。
次に、データ記憶回路10の信号VPREをVdd、信号BLPREをVdd+Vthとし、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを0.9V+Vthとする。TDCのノードN3はビット線がローレベルの場合、ローレベルとなり、ビット線がハイレベルの場合、ハイレベルとなる。この後、TDCの電位をPDCに転送する。この結果、メモリセルのデータが“2”である場合、PDCにハイレベル信号がラッチされ、メモリセルのデータが“0”である場合、PDCにローレベル信号がラッチされる。図10(a)は、データロード、内部リード後のSDC、PDCとメモリセルのデータの関係を示している。
(データキャッシュの設定)(S25)
この後、図11、図12に示すデータキャッシュ設定手順に従い各データキャッシュに記憶されたデータが操作される。すなわち、図11(a)に示すように、外部よりデータを入力し、内部リードにより読み出したデータを各データキャッシュにラッチさせた状態において、図11(b)に示すように、SDCのデータがPDCに転送され、PDCのデータがDDCに転送される。次に、図11(c)に示すように、DDCのデータが反転されてSDCに転送される。この後、PDCのデータがDDCに転送される。次に、図12(a)に示すように、DDCのデータが反転されてPDCに転送される。この後、PDCのデータがDDCに転送される。次に、図12(b)に示すように、第2のフラグセル用データ記憶回路10bに第2のフラグセルFC2用のデータがロードされ、SDCにラッチされる。次いで、図12(c)に示すように、SDCとDDCのデータが合成され、この合成されたデータが反転されて、PDCに転送される。このPDCのデータはDDCに転送される。
このような操作をすることにより、各データキャッシュに記憶されるデータは図10(b)、図12(c)に示すようになる。
すなわち、メモリセルのデータを“0”にする場合(第1ページにおいてデータ“1”、第2ページにおいてデータ“1”)、PDC、DDC、SDCは全てハイレベルに設定される。
メモリセルのデータを“1”にする場合(第1ページにおいてデータ“1”、第2ページにおいてデータ“0”)、PDCはローレベル、DDCはローレベル、SDCはハイレベルに設定される。
メモリセルのデータを“2”する場合(第1ページにおいてデータ“0”、第2ページにおいてデータ“1”)、PDCはローレベル、DDCはハイレベル、SDCはローレベルに設定される。
メモリセルのデータを“3”する場合(第1ページにおいてデータ“0”、第2ページにおいてデータ“0”)、PDC、DDC、SDCは全てローレベルに設定される。
(第2のフラグセルデータロード)(S25)
前述したように、データキャッシュの設定途中において、第2のフラグセル用データ記憶回路10b内のSDCがローレベルに設定される。これにより第2のフラグセルFC2のデータは“0”から“2”となる。第2ページの書き込みは、図1(c)に示すように、メモリセルのデータ“0”から“1”への書き込みと、メモリセルのデータ“2”から“3”への書きこみであるが、第2のフラグセルに関しては、メモリセルのデータを“0”からメモリセルのデータを“2”にプログラムする。このため、図1(d)に示すように、第2のフラグセルのデータ“2”の閾値電圧の分布は広がる可能性がある。しかし、第2のフラグセルFC2のリード動作は、必ず“b’”より低い“b”のレベルをワード線に供給して行なうため問題はない。
さらに、例えば各データキャッシュの設定の途中において、カウンタ(PC)が“0”に初期設定される(S25)。
この後、第1のフラグセルFC1にデータが書かれたか否かが判別される(S26)。第1のフラグセルFC1のデータは、内部リード(S24)において読み出されている。第1のフラグセルFC1にデータが書き込まれていない場合、プログラムへ移行される(S27)。しかし、第1のフラグセルFC1にデータが書き込まれている場合、図1(c)の分布になっているため、内部リードを“b”のレベルで再度行なう(S26−S23)。
(プログラム)(S27)
第1のフラグセルFC1にデータが書き込まれていない場合、メモリセルにデータが書き込まれる。例えばカウンタ(PC)をカウントアップした後、先ず、信号BLC1をVsgとすると、PDCがデータ“0”の場合、ビット線がVssとなり、データ“1”の場合、ビット線はVddになる。次に、信号BLC1=Vssとした後、信号VREG=Vdd、信号REG=中間電位+Vth(1V+Vth)とする。すると、DDCがデータ“1”の場合、ビット線がVddとなり、DDCがデータ“0”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“1”,“3”を書き込んでいるときのみ、ビット線はVssとなる。メモリセルにデータ“2”を書き込んでいる場合、ビット線は中間電位(1V)となり、メモリセルのデータが“0”の場合(書き込みしない場合)、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位(1V)の場合、少しだけ書き込まれる。したがって、データ“2”を書き込んでいるメモリセルは、あまり書き込まれない可能性がある。しかし、これは、データ“2”とデータ“3”のベリファイを一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。
この後、メモリセルにデータ“1”が書き込まれており(S28)、さらに、カウンタ(PC)の値が予め定められたベリファイ電圧“a’”によるベリファイ回数の最大値より小さい場合(S29)、ベリファイ電圧“a*’”と“a’”を順次設定して書き込みベリファイが行なわれる(S30)。
尚、以下に説明するベリファイ動作は、ベリファイ電圧を“a*’”、“a’”、“b’”、“b’”、“c’”の順に設定して実行される。このとき、不要なベリファイ動作をスキップしてプログラム及びベリファイするため、カウンタ(PC)の値が予め定められた値と比較される(S29,S31,S32、S34、S37)。例えばベリファイ“a*’、a’”のベリファイ回数が最大ループ回数に達した場合、ベリファイ“a*’”、“a’”をスキップする。また、例えばベリファイ“b’”のベリファイ開始回数に達していない場合、ベリファイ“b’”をスキップして、プログラムが実行される。このスキップの制御に必要な各値は例えば次に示すように設定されている。
ベリファイ“a’”の最大ループ回数=10
ベリファイ“b’”によるベリファイ開始回数=4
ベリファイ“c’”によるベリファイ開始回数=8
最大プログラムロープ回数=20
(ベリファイ“a*’”、“a’”)(S30)
このベリファイにおいて、信号VPREをハイレベル、信号BLCLAMPを所定電位に設定すると、ビット線がプリチャージされる。
図13(a)は、ベリファイ電圧“a*’”によるベリファイ後、各データキャッシュに設定されたデータを示している。
次に、ワード線の電位をベリファイ電位“a*’”に設定し、ビット線を放電する。信号VPRE=Vdd、信号BLPRE=VsgとしてTDCをVddに充電した後、信号BLCLAMPに所定の電圧を与える。ビット線がVssの場合、TDCはVss(ローレベル)になり、ビット線にプリチャージ電位が残っている場合、TDCはVdd(ハイレベル)となる。ここで、信号BLC2をVth+0.5Vとすると、SDCが“0”の場合(メモリセルにデータ“2”、“3”を書き込んでいる場合)、TDCはVssとなる。したがって、TDCがVddとなるのは、メモリセルにデータ“1”が書き込まれていてベリファイ電位“a*’”に達した時である。メモリセルにデータ“1”を書き込んでいない場合、ビット線はプリチャージされていないため、TDCはローレベルとなっている。また、メモリセルにデータ“1”を書き込んでいてベリファイ電位“a*’”に達しない場合もTDCはVssとなる。
ここで、信号VREGをハイレベルとし、信号REG=ハイレベルとすると、DDCのデータが“1”の場合、強制的にTDCがハイレベルになる。したがって、TDCがVddになるのは、メモリセルにデータ“1”を書き込んでいてベリファイ電位“a*’”に達した時と、DDCのデータが“1”の場合、つまりメモリセルへデータ“2”を書き込んでいた場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーする。この後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
図13(b)において、PDCがデータ“1”となるのは、メモリセルにデータ“1”を書き込んでいて、ベリファイ電位“a*’”を超えている場合と、メモリセルにデータ“2”を書き込んでいる場合である。
次に、ワード線の電位を少し上げてベリファイ電位“a’”とし、ビット線を放電する。信号VPRE=Vdd、信号BLPRE=VsgとしてTDCを再びVddに充電した後、信号BLCLAMPに所定の電圧を与える。ビット線がVssの場合、TDCはVssとなり、ビット線にプリチャージ電位が残っている場合、TDCはVddになる。ここで、信号BLC2をVth+0.5Vとすると、SDCが“0”の場合(メモリセルのデータ“2”、“3”に書き込んでいる場合)、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルにデータ“1”が書き込まれていてベリファイ電位“a’”に達した時である。メモリセルにデータ“1”を書き込んでいない場合と、メモリセルにデータ“1”を書き込んでいてベリファイ電位“a’”に達しない場合もTDCはVssとなる。
ここで、信号VREGをハイレベルとし、信号REG=ハイレベルとすると、DDCのデータが“1”の場合、すなわち、メモリセルにデータを書き込んでいない場合、TDCは強制的にハイレベルとされる。したがって、TDCがVddになるのは、書き込み非選択の場合と、メモリセルにデータ“1”を書き込んでいてベリファイ電位“a’”に達した場合である。
次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーした後に、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ(図14)。
メモリセルにデータ“1”を書き込んでいるセルにおいて、閾値電圧がベリファイ電位“a*’”より高くなると、DDCのデータが“1”(ハイレベル)となる。また、メモリセルにデータ“1”を書き込んでいるセルにおいて、ベリファイ電位“a’”を用いた書き込みが全て終了すると、PDCのデータは“1”(ハイレベル)になる。
この後、カウンタ(PC)の値が予め定められたベリファイ電圧“b’”によるベリファイ開始回数より大きく(S31)、予め定められたベリファイ電圧“c’”によるベリファイ開始回数より小さい場合(S32)、ベリファイ電位“b”を設定して書き込みベリファイが行なわれる(S33)。
(ベリファイ“b’”)(S33)
ベリファイ電位“b”を用いたベリファイ(図15)。メモリセルに対するデータ“2”の書き込みが、データ“3”の書き込みより先に終わるため、先ず、ベリファイ電位“b”のみのベリファイを行なう。信号VPRE=Vdd、信号BLCLAMPを所定の電位に設定する。すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位“b’”を供給しビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位とする。すると、TDCがハイレベルになるのは、セルの閾値電圧が、ベリファイ電位“b’”以上にある場合である。ここで、信号BLC1=Vth+0.5Vとすると、PDCが“0”の場合(メモリセルにデータ“3”を書き込んでいる場合と、メモリセルにデータ“1”を書き込んでいる場合で、ベリファイ電位“a*’”以下の場合)、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルにデータ“2”が書き込まれていてベリファイ電位“b’”に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“2”を書き込んでいてベリファイ電位“b’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
この後、カウンタ(PC)の値がベリファイ電圧“c’”によるベリファイ開始回数より大きい場合(S34)、ベリファイ電位“b”、“c”を用いた同時ベリファイが行なわれる(S34、S35)。
(ベリファイ電位“b”“c”同時ベリファイ)(図16)。
プログラム及びベリファイファイを何回か繰り返していると、メモリセルのデータ“3”に書き込みを行っているセルも書き込みが終了するため、前記ベリファイ電位“b”を用いたベリファイの替わり、ベリファイ電位“b”“c”同時ベリファイを行なう。先ず、信号BLPRE=ハイレベル、信号BLCLAMPを所定電位に設定し、ビット線をプリチャージする。
次に、ワード線にベリファイ電位“b’”を供給しビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。
この後、TDCをVddに充電した後、BLCLAMPに所定の電位を供給する。すると、TDCがハイレベルになるのは、閾値電圧がベリファイ電位“b’”以上の場合である。ここで、信号BLC1=Vth+0.5Vとすると、PDCが“0”の場合(メモリセルのデータ“3”に書き込んでいる場合と、メモリセルにデータ“1”を書き込んでいる場合で、ベリファイ電位“a*’”以下の場合)、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルがデータ“2”に書き込まれていて、ベリファイ電位“b’”に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“2”を書き込んでいてベリファイ電位“b’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
次に、ワード線にベリファイ電位“c’”を供給しビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。
この後、TDCをVddに充電した後、BLCLAMPに所定の電位を供給する。TDCがVddになるのは、メモリセルのデータが“3”に書き込まれていてベリファイ電位“c’”に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“2”を書き込んでいてベリファイ電位“c’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
このようにして、全てのPDCのデータが“1”になるまで、プログラムとベリファイ動作を繰り返す(S36,S37)。しかし、書き込み動作において、DDCのデータが“1”の場合、つまり、メモリセルにデータ“2”を書き込んでいる場合と、メモリセルにデータ“1”を書き込んでいてベリファイ電位“a*’”を超えている場合、ビット線を中間電位にして書き込み動作をする。
また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。このプログラム電圧Vpgmの増分ΔVpgmは、第1ページの書き込み動作と、第2の書き込み動作で相違されており、例えば第1ページの書き込み動作における増分ΔVpgmは、第2の書き込み動作における増分ΔVpgmより大きく設定されている。
図9のアルゴリズムでは、プログラムとベリファイ“a*,a’”を数回繰り返した後に、プログラムとベリファイ“a*’,a’”とプログラムベリファイ“b’”を数回繰り返し、プログラムとベリファイ“a*’,a’”とプログラムベリファイ“b’,c’”を数回繰り返す。この途中でメモリセルへのデータ“1”の書き込みは、早く終了する。このため、データ“1”を書き込むべきセルが無くなった場合、プログラムベリファイ“a*’,a’”をスキップし、プログラムとプログラムベリファイ“b’”、又はプログラムとプログラムベリファイ“b’,c’”を繰り返すようになる。プログラムとベリファイ“a*’,a’”をスキップする場合、SDCは使用しなくなる。このため、次のプログラムデータを入力することができる。しかし、稀に、メモリセルにデータ“1”がなかなか書けないセルもある。したがって、プログラムベリファイ“a*,a’”の回数を制限している(S29)。
上記第1の実施形態において、初めに第1ページ(ロアーページ)のデータをメモリセルに書き込み、この後、第2ページ(アッパーページ)のデータをメモリセルに書き込むとき、第1ページのデータを読み出し、3つのレベルの閾値電圧を書き込んでいた。しかし、第1ページのデータと第2ページのデータを同時にメモリセルに書き込むことも可能である。
図17は、第1の実施形態の変形例を示すものであり、図9と同一部分には同一符号を付している。図17に示すように、先ず、データ記憶回路をリセットし、カウンタ(PC)を初期設定する(S51)。この後、第1ページのデータをSDCにロードし(S52)、次いで、第1ページのデータをSDCからPDCに転送する(S53)。次に、第2ページのデータをSDCにロードする(S54)。この後、各データキャッシュを図10(b)に示すように設定し(S55)、このデータキャッシュのデータに従ってプログラムを実行する(S56)。
このような方法によれば、第1ページのデータと第2ページのデータを同時にメモリセルに書き込んでいるため、第1ページのみの書き込み動作、及び内部データリードにより第1ページのデータを読み出す必要がない。したがって、高速な書き込みが可能である。
(第1ページリード)
図18(a)は、第1ページリードのダイアグラムを示している。先ず、アドレスを指定し、図3に示す2ページを選択する。図1(b)(c)に示すように、第2ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位を“b”として読み出し動作を行ない第2のフラグセルのデータが“0”か“1”であるかを判別する(S71、S72)。この判別において、フラグセルが複数セルある場合は、これらの多数決により、“0”か“1”を判断する。
第2のフラグセルから読み出されたデータが“0”(メモリセルのデータが“2”)の場合、第2ページの書き込みは行われている。このため、セルの閾値電圧の分布は、図1(c)となっている。このようなセルのデータを判断するには、ワード線の電位を“b”でリード動作をすればよい。しかし、ステップS71において、ワード線電位“b”で読み出し動作をした結果は、既にデータ記憶回路に読み出されている。このため、データ記憶回路に記憶されているデータを外部に出力すれば良い(S73)。
一方、フラグセルから読み出されたデータが“1”(メモリセルのデータが“0”)の場合、第2ページの書き込みが行われていない、セルの閾値電圧分布は、図1(a)又は(b)に示すようになっている。これらのメモリのデータを判断するには、ワード線の電位を“a”でリード動作をしなくてはならない。したがって、ワード線の電位を“a”として読み出し動作を行ない(S74)、この後、データ記憶回路に読み出されたデータが外部に出力される(S73)。
(リード動作:第1ページリード)
上記のように、第1ページのリード動作は、選択ワード線にリード電位“a”又は“b”を供給して読み出し動作が実行される。
先ず、選択されているブロック内の非選択ワード線及びセレクト線SG1に読み出し電圧Vreadを供給し、図6に示すデータ記憶回路の信号BLPREを1V+Vth、BLCLAMPをVdd+Vthとして、ビット線をプリチャージする。この後、セルのソース側のセレクト線SG2をハイレベルにする。閾値電圧が電位“a”又は“b”より高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位“a”又は“b”より低いセルはオンするため、ビット線がVssとなる。
次に、データ記憶回路10の信号BLPREをVdd+Vthとしてトランジスタ61uをオンとすることにより、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを中間電位(例えば0.9V+Vth)としてトランジスタ61tをさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。
次に、信号BLC1をVsg(Vdd+Vth)としてTDCの電位をPDCに取りこむ。この後、PDCのデータをSDCに移動させるが、第2のフラグセルFC2のデータが“1”の場合(書きこまれていない場合)、リードレベルを変更してもう一度セルから読み出す。
(第2ページリード)
図18(b)は、第2ページリードのダイアグラムを示している。第2ページリードでは、先ず、アドレスを指定し、図3に示す2ページを選択する。図1(b)(c)に示すように、第2ページの書き込み前と後で、閾値電圧の分布が変わっている。しかし、第2ページの書き込み後は、図1(c)に示すような分布になっている。このため、ワード線の電位を“a”、“b”、“c”と三回替えて読み出し動作をしなくてはならない。しかし、書き込み時、“c”でのベリファイは、“b”でのベリファイの後に続けてワード線の電位を変更させるのみで行っていた。したがって、リード動作もベリファイ動作と同じ動作であるほうが望ましいため、“b”、“c”のリード動作は、同時に行なう。
すなわち、先ず、ワード線電位を“b”“c”として同時に読み出しを行ない(S81)。この後、ワード線電位を“a”として読み出し動作を行なう(S82)。メモリセルの閾値電圧がワード線電位“a”より低いか、ワード線電位“b”より高くワード線電位“c”より低い場合、データを“1”とする。また、メモリセルの閾値電圧がワード線電位“a”より高くワード線電位“b”より低いか、ワード線電位“c”より高い場合、データを“0”とする。第2ページ書込み前において、第2ページのデータは“1”が出力されるべきである。しかし、図1(a)に示す閾値電圧分布になっている。このため、第2ページの書き込み後と同じ読み出し動作をすると出力データが“0”となることもある。したがって、第1のフラグセルFC1のデータが“0”か“1”であるかを判別する(S83)。この結果、第1のフラグセルFC1のデータが“1”で、第2ページの書き込みが行なわれていない場合、出力データを“1”に固定する(S84)。出力データを“1”に固定するには、データ記憶回路の信号PRSTをハイレベルとし、SDCを“1”に設定する。あるいは、図2に示すデータ入出力バッファよりデータ“1”しか出力させないようにする。また、第1のフラグセルFC1のデータが“0”の場合、読み出したデータを出力する(S85)。
第2ページリードは、具体的には、次のような動作を実行する。
(リード動作:第2ページリード第1回目)
第2ページのリード動作の1回目は、プログラムベリファイ時の“b”“c”同時ベリファイと同じように、ビット線をプリチャージした後、ワード線にリード電位“b”を供給する。この状態で、メモリセルからデータを読み出し、途中でワード線の電位をリード電位“c”に変更して読み出し動作をする(S81)。
先ず、選択されているブロック内の非選択ワード線及びセレクト線SG1に読み出し電圧Vreadを供給し、図6に示すデータ記憶回路の信号BLPREを1V+Vth、BLCLAMPをVdd+Vthとして、ビット線をプリチャージする。この後、メモリセルのソース側のセレクト線SG2をハイレベルにする。閾値電圧が電位“b”より高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位“b”より低いセルはオンするため、ビット線がVssとなる。
次に、データ記憶回路の信号BLPREをVdd+Vthとしてトランジスタ61uをオンとすることにより、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを0.9V+Vthとしてトランジスタ61tをさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号BLC1をVsg(Vdd+Vth)としてTDCの電位をPDCに取りこむ。
次に、ワード線電位を“c”に変更する。閾値電圧が電位“c”より高いセルはオフするため、ビット線はハイレベルのままである。また、閾値電圧が電位“b”より低いセルはオンするため、ビット線がVssとなる。このビット線放電時間中に、信号DTG=Vdd+Vthとして、PDCのデータをDDCにコピーする。
次に、データ記憶回路10の信号BLPREをVdd+Vthとしてトランジスタ61uをオンとすることにより、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを0.9V+Vthとしてトランジスタ61tをさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号BLC1をVsg(Vdd+Vth)としてTDCの電位をPDCに取りこむ。
(リード動作:第2ページリード第2回目)
第2ページのリード動作の2回目は選択ワード線にリード電位“a”を供給し、読み出し動作をする(S82)。
先ず、選択されているブロック内の非選択ワード線及びセレクト線SG1に読み出し電圧Vreadを供給する。この状態において、データ記憶回路10の信号BLPRE、BLCLAMPを1V+Vthとし、ビット線をプリチャージする。この後、メモリセルのソース側のセレクト線SG2をハイレベルにする。閾値電圧がワード線電位“a”より高いセルはオフするためビット線はハイレベルのままである。また、閾値電圧がワード線電位“a”より低いセルはオンするためビット線がVssとなる。
次に、データ記憶回路10の信号BLPREをVdd+Vthとすることにより、TDCのノードN3をVddにプリチャージした後、信号BLCLAMPをVdd+Vthとしてトランジスタ61tをオンさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。
このビット線放電中に、信号VPRE=Vss、信号BLPREをVdd+Vthとし、としTDCを一旦Vssにした後、信号REG=Vdd+Vth、信号VREG=Vddとし、DDC=ハイレベルの場合、TDCをハイレベルとする。つまりDDCのデータをTDCにコピーする。次に、信号DTG=Vdd+VthとしてPDCのデータをDDCにコピーした後、信号VREG=Vss、信号REG=Vddとし、DDCがハイレベルの場合強制的にTDCをローレベルにする。この後、信号BLC1=Vdd+Vthとして、TDCの電位をPDCに取りこむ。ここでPDCがハイレベルとなるのは、第1回目のリードで“b”レベルを超え、“c”レベル以下の場合であり、ローレベルとなるのは、第1回目のリードで“b”レベル以下、又は“c”レベル以上の場合である。
次に、データ記憶回路10の信号BLPREをVdd+Vthとしてトランジスタ61uをオンとすることにより、TDCのノードN3をVddにプリチャージする。この後、信号BLCLAMPを0.9V+Vthとしてトランジスタ61tをさせる。TDCのノードN3はビット線がローレベルの場合ローレベルとなり、ビット線がハイレベルの場合ハイレベルとなる。次に、信号DTG=Vdd+Vth、信号REG=Vdd、信号VREG=Vssとして、PDCがハイレベル場合強制的に、TDCをVssにする。次に、信号BLC1をVsg(Vdd+Vth)としてTDCの電位をPDCに取りこむ。この結果、PDCがハイレベルとなるのはメモリセルの閾値電圧が、ワード線電位“a”より高く、ワード線電位“b”より低い場合と、ワード線電位“c”より高い場合である。この後、PDCのデータをSDCに移動させる。
第1のフラグセルFC1のデータが“1”の場合(書き込まれていない場合)、第2ページは、書き込まれていない。このため、出力データを“1”に固定しデータを出力する(S84)。
尚、上記説明では、1回のビット線のプリチャージでワード線の電位を“b”“c”と変化させてメモリセルのデータを読み出し、再度、ビット線をプリチャージし、ワード線の電位を“a”として読み出していたが、1回のビット線のプリチャージでワード線の電位を“a”“b”“c”と変化させてメモリセルのデータを読み出すことも可能である。
(イレーズ)
消去動作は、先ず、アドレスを指定し、図3の破線で示すブロックを選択する。次に、セルが形成されたウエルの電位を高電圧(約20V)にし、選択ブロックのワード線をVss、非選択ブロックのワード線をフローティングにする。すると、選択ブロックのセルとウエル間に高電圧が加わり、セルに記憶されたデータが消去される。一方、非選択ブロックにおいて、ワード線はフローティング状態であるため、ウエルを高電圧にすると、ワード線も高電圧になる。このため、非選択ブロックのメモリセルに記憶されたデータは消去されない。
消去動作を行なうと、メモリセルのデータは“0”となり、第1ページ、第2ページの何れでリードを行なってもデータ“1”が出力される。
上記第1の実施形態によれば、第2ページのプログラムベリファイにおいて、ベリファイ電圧”b’”“c’”によるデータ“2”、“3”のベリファイを同時に行なっている。このため、2つのベリファイを行なう際に、1回ビット線をプリチャージし、ワード線電位を“b’”及び“c’”に設定するだけでよい。したがって、長時間を要するビット線のプリチャージの回数を削減することができるため、ベリファイ速度を向上できる。
また、第2ページの読み出し動作において、1回ビット線をプリチャージし、ワード線電位を“b”及び“c”に設定することにより、データ“2”、“3”を読み出している。したがって、プリチャージ回数を削減することができるため、読み出し速度を向上できる。
さらに、データのプログラムベリファイ動作と読み出し動作は、ビット線をプリチャージした後、ワード線の電位を変化させている。このため、プログラムベリファイ動作と読み出し動作を同じ条件で行なうことができるため、読み出し精度を向上することが可能である。
また、第2ページ書き込みにおいて、ベリファイ“a’”の実行回数を規定する最大ループ回数を設定し、カウンタ(PC)の値が最大ループ回数に達した場合、ベリファイ“a’”の動作を終了させている。このため、第2ページの書き込み時間を短縮することができる。
さらに、上記第1の実施形態によれば、本来の閾値電圧より低い電位により、第1ページのデータをメモリセルに書き込み、第2ページのデータを書き込む前に隣接するメモリセルに第1ページのデータを書き込み、隣接するメモリセルの書き込み後、第2ページのデータをメモリセルに書き込み、記憶データに対応した本来の閾値電圧に設定している。このため、隣接するメモリセルのFG−FG間容量の影響を考慮して、第1ページのデータをメモリセルに書き込んでいるため、多値のデータに対応する閾値電圧を正確に設定することができる。
また、第2ページのデータを書き込む際、フラグセルにデータを書き込み、各ページのデータを読み出す際、フラグセルに記憶されたデータに応じて外部に出力されるデータを制御している。したがって、各ページのデータを確実に出力することができる。
さらに、従来、例えばメモリセルから読み出したデータの一部を外部から入力したデータに変えて書き込む、所謂ページコピーを行う場合、図6に破線で示すように、インバータ回路62cとインバータ回路62dの間にトランジスタ62eが挿入され、インバータ回路62cとトランジスタ62eにトランジスタ62fが並列接続されていた。このような構成において、従来は、ページコピー時に、プログラムのコマンドが入力されると、メモリセルから読み出されたデータは、書き込み時にデータ入力端子5aから供給されたデータと論理レベルが反転してSDCにラッチされる。このため、データ入力端子5aから供給されるデータと、SDCにラッチされたデータとの論理レベルを一致させる必要がある。したがって、ページコピー時に、相補的な信号φ、/φにより、トランジスタ62eをオフし、トランジスタ62fをオンとして、書き込みデータを反転してSDCに供給していた。
しかし、上記第1の実施形態によれば、ページコピーを行なう場合、メモリセルから読み出されたデータは反転された後、SDCにラッチされ、データ入力端子5aからSDCの供給されるデータと論理レベルが一致されている。このため、データ入力端子5aとSDCの間に従来のようなトランジスタ62e,62fを設ける必要がない。したがって、回路構成を簡単できる利点を有している。
尚、第1の実施形態において、第2ページ(アッパーページ)のデータをメモリセルに書き込むとき、プログラムとベリファイ(a*,a’)と、プログラムベリファイ(b’,c’)を分けて行っていた。しかし、プログラムベリファイ(b’,c’)のように、一回のビット線充電後、ワード線電位をa*,a’,b’,c’と次々に上昇することにより、これらを1度にベリファイすることも可能である。
また、第2ページのリード時、リード(b,c)とリード(a)を分けて行っていたが、リード(b,c)の時のように、一回のビット線充電後、ワード線電位をa,b,cと次々に上昇することにより、これらのデータを1度に読み出すことも可能である。
(第2の実施形態)
図19は、第2の実施形態を示すものであり、8値(3ビット)のデータを記憶するNANDフラッシュメモリのメモリセルアレイ1及びビット線制御回路2を示している。図19に示す構成は、図3に示す4値(2ビット)の構成とほぼ同様であるため、異なる部分についてのみ説明する。
図19において、外部アドレスにより、1本のワード線が選択されると、破線で示す、1つのセクタが選択される。1セクタは3ページにより構成される。この3ページはアドレスによって切り替えられる。すなわち、1つのメモリセルに3ビットのデータを記憶することができるため、3ビットの切り替えはアドレス(第1ページ、第2ページ、第3ページ)によって行なう。また、1セクタは5つのフラグセルFC1、FC2、FC3、FC4、FC5を有している(図19は、フラグセルFC1とFC5のみを示している)。このため、1本のワード線が選択されると、5つのフラグセルFC1、FC2、FC3、FC4、FC5が同時に選択される。各フラグセルFC1〜FC5はビット線を介してフラグ用データ記憶回路10a、10b、10c、10d、10eに接続されている(図19は、フラグ用データ記憶回路10a、10eのみを示している)。フラグセルFC1、FC2は、第2ページの書き込みが行なわれていることを示すデータを記憶し、フラグセルFC3、FC4、FC5は、第3ページの書き込みが行なわれていることを示すデータを記憶する。
しかし、1つのメモリセルに3ビットのデータを記憶することができるため、5つのフラグセルを用いず、3つのフラグセルにより、第2ページと第3ページの書き込みが行なわれていることを示すデータを記憶することも可能である。
また、信頼性を向上させるため、フラグセルFC1〜FC5を、それぞれ複数個具備し、これら複数セルに同一データを記憶し、読み出し時に、複数のフラグセルから読み出したデータを多数決により決めることもできる。
第2の実施形態の動作について説明する。
消去動作は、4値の場合と同じである。
図20(a)(b)(c)、図21(a)(b)は、メモリセルのデータとメモリセルの閾値電圧の関係を示している。消去動作を行なうとメモリセルのデータは“0”となる。図20(a)に示すように、第1ページの書き込みにより、メモリセルのデータはデータ“0”とデータ“4”になる。この後、第1ページに隣接するセルにデータが書き込まれるとデータ“4”の閾値電圧の分布が広がる(図20(b))。
第2ページの書き込み後、メモリセルのデータはデータ“0”、“2”、“4”、“6”となる(図20(c))。この後、隣接セルにデータが書き込まれると、データ“0”、“2”、“4”、“6”の閾値分布が広がる(図21(a))。
第3ページの書き込み後、メモリセルのデータはデータ“0”〜“7”となる(図21(b))。本実施形態において、メモリセルのデータは閾値電圧の低いほうから高い方へと、定義されている。
図22(a)(b)は、本実施形態における2つの書き込み順序の例を示している。ブロック内において、ソース線に近いメモリセルからページごとに書き込み動作が行なわれる。図22(a)(b)は、説明の便宜上、ワード線を4本としている。図22(a)に示す書き込み順序は、図7に示す書き込み順序と類似している。これに対して、図22(b)に示す書き込み順序は、図22(a)と若干相違している。すなわち、第1ページの書き込み後、第2ページは隣接のセルを初めに書くのではなく、同じセルに第2ページまで書き込む。この後、第3ページの書き込みを行なう前に、隣接セルの第2ページまで、書き込みを行なった後、第3ページの書き込みを行なっている。このように、第3ページの隣接セルの影響を考慮した書き込みをすることも可能である。
第3ページのワード線のリード電位は、本来“a”,“b”,“c”,“d”,“e”,“f”,“g”とし、ベリファイ電位を“a’”,“b’”,“c’”,“d’”,“e’”,“f’”,“g’”とする。第2ページのリード電位は、本来のリード電位より低い値“b*”(=“a”),“d*”,“f*”とし、第2ページでのベリファイ電位はこれらより少し高い値、“b*’”,“d*’”,“f*’”とする。第1ページのリード電位は、本来のリード電位より低い電位“d**”(=“a”)とし、第1ページでのベリファイ電位はこれらより少し高い電位“d**’”とする。
(プログラム及びプログラムベリファイ)
プログラム動作は、先ず、アドレスを指定し、図19に示す3ページを選択する。本メモリは、3ページのうち、第1ページ、第2ページ、第3ページの順でしか、プログラムできない。第1ページ及び第2ページのプログラムは、4値の場合と同様である。
図20(a)(b)(c)に示す4値のメモリセルのデータとメモリセルの閾値電圧は、図1(a)(b)(c)に対応している。また、プログラム及びプログラムベリファイのブロックダイアグラムは、図8、図9と同様であるため省略する。但し、メモリセルのデータの定義及びワード線の電位は、4値の場合、“0”、“1”、“2”、“3”及び“a”、“b”、“c”であるのに対し、8値の場合、“0”、“2”、“4”、“6”及び“b”、“d”、“f”となっている。
(第1ページプログラム)
第1ページのプログラムのブロックダイアグラムは、図8と同様である。しかし、前述したように、ワード線電位の定義が変更されている。
(隣接セルプログラム)
図22(a)に示すように、メモリセル1の第1ページに1ビットのデータの書き込み後、メモリセル1とワード方向に隣接したメモリセル2の第1ページが書き込まれる。次いで、メモリセル1とビット方向に隣接したメモリセル3の第1ページの書き込み、メモリセル1と対角に隣接したメモリセル4の第1ページの書き込みが行なわれる。これらの書き込み動作が行なわれると、書き込みデータによっては、FG−FG間容量によって、メモリセル1の閾値電圧が上がる。このため、メモリセル1のデータ“0”とデータ“4”の閾値電圧分布は図20(b)のように閾値電圧の高いほうに広がる。
この後、再びメモリセル1の第2ページに1ビットのデータが書き込まれる。
(第2ページプログラム)
第2ページのプログラムのブロックダイアグラムは、図9と同様であるが、前述したように、ワード線電位の定義が変更されている。また、データロード、内部リード後のデータキャッシュ内のデータ及びデータキャッシュ設定後のデータキャッシュ内のデータは、同様である。第2ページの書き込みにおいて、フラグセルFC1は、ベリファイ電位“b*’”まで書き込まれ、フラグセルFC2は、ベリファイ電位“d*’”まで書き込まれる。
(隣接セルプログラム)
図22(a)に示すように、メモリセル1の第1ページ及び第2ページにデータの書き込み後、メモリセル2の第2ページ、メモリセル5、6の第1ページ及びメモリセル3、4の第2ページにデータが書き込まれる。これらの書き込み動作が行なわれると、書き込みデータによっては、FG−FG間容量によって、メモリセル1の閾値電圧が上がる。このため、メモリセル1のデータ“2”、データ“4”、データ“6”の閾値電圧分布は図21(a)のように広がる。
この後、再びメモリセル1の第3ページに1ビットのデータが書き込まれる。
(第3ページプログラム)
図23は、第3ページのプログラムのブロックダイアグラムを示している。第3ページのプログラム動作も、先ずアドレスを指定し、図19に示す3ページを選択する。
次に、データ記憶回路10をリセットし(S91)、書き込みデータを外部より入力して全てのデータ記憶回路10のSDCに記憶する(S92)。外部よりデータ“1”(書き込みを行なわない)が入力されると、図6に示すデータ記憶回路10のSDCは、ローレベルになり、データ“0”(書き込みを行なう)が入力されるとハイレベルとなる。この後、書き込みコマンドが入力されると、第3ページのプログラムであるので、フラグセルFC3〜FC5にデータの書き込みを行なうため、フラグセル用のデータ記憶回路10a、10bに所定のデータが入力される。
第3ページのプログラムは、図21(b)に示すように、メモリセルのデータが“0”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータを“0”のままとし、外部から入力されるデータが“0”の場合、メモリセルのデータを“1”にする。
メモリセルのデータが“2”の場合で、外部から入力されるデータが“0”の場合、メモリセルのデータを“2”のままである。しかし、第2ページの書き込み時において、メモリセルのデータが“2”に達したかどうかをベリファイする際、通常より低いベリファイ電位“b*’”を用いた。このため、データ“2”を記憶するメモリセルは、本来のベリファイ電位である“b’”の電位まで書き込む。メモリセルのデータが“2”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータを“3”にする。
メモリセルのデータが“4”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータは“4”のままである。しかし、第2ページの書き込み時において、メモリセルのデータが“4”に達したかどうかをベリファイする際、通常より低いベリファイ電位“d*’”を用いた。このため、データ“4”を記憶するメモリセルは、本来のベリファイ電位である“d’”の電位まで書き込む。メモリセルのデータが“4”の場合で、外部から入力されるデータが“0”の場合、メモリセルのデータを“5”にする。
メモリセルのデータが“6”の場合で、外部から入力されるデータが“0”の場合、メモリセルのデータを“6”のままである。しかし、第2ページの書き込み時において、メモリセルのデータが“6”に達したかどうかをベリファイする際、通常より低いベリファイ電位“f*’”を用いた。このため、データ“6”を記憶するメモリセルは、本来のベリファイ電位である“f’”の電位まで書き込む。メモリセルのデータが“6”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータを“7”にする。
第2ページの書き込みにおいて、フラグセルFC1は、ベリファイ電位“b*’”まで書き込まれ、フラグセルFC2は、ベリファイ電位“d*’”まで書き込まれる。第3ページの書き込みで、フラグセルFC3は、ベリファイ電位“a’”まで書き込まれ、フラグセルFC4は、ベリファイ電位“b’”まで書き込まれ、フラグセルFC5は、ベリファイ電位“d’”書き込まれる。
(第3ページ第1回目プログラム)
第3ページのプログラムは、メモリセルにデータ“1”〜“7”を書き込む。これらのデータを同時にプログラムすることも可能であるが、本実施形態では、先ず、メモリセルにデータ“4”〜“7”の4つのデータを書き込む。この後、メモリセルにデータ“1”〜“3”を書き込む。以下、具体的に説明する。
(内部データリード1及びデータキャッシュ設定1)(S93、S94)
メモリセルへデータを書き込む前に、第2ページのメモリセルのデータが“4”又は“6”か、“0”又は“2”であるかの判断と、メモリセルのデータが“6”か、データが“0”、“2”、“4”のいずれであるかを判断する。このため、ワード線の電位を“d*”、“f*”に順次設定し、内部リード動作を行なう(S93)。
図25(a)は内部リード後のデータキャッシュの状態を示している。この後、データキャッシュを操作することにより、図25(b)に示すように、データキャッシュを設定する。さらに、例えばカウンタ(PC)をゼロに初期設定し、第5のフラグセルのデータをロードする(S94)。
図25(b)において、メモリセルのデータを“0”〜“3”にする場合、PDCはハイレベル。メモリセルのデータを“4”とする場合、PDCはローレベル、DDCはローレベル、SDCはハイレベルに設定する。メモリセルのデータを“5”とする場合、PDCはローレベル、DDCはハイレベル、SDCはハイレベルに設定する。メモリセルのデータを“6”とする場合、PDCはローレベル、DDCはハイレベル、SDCはローレベルに設定する。メモリセルのデータを“7”とする場合、PDC、DDC、SDCをいずれもローレベルに設定する。
(プログラム:第1回目)(S95)
次いで、カウンタ(PC)をカウントアップした後、メモリセルにデータが書き込まれる。第2の実施形態においても、第1の実施形態と同様、カウンタの値と予め定められたベリファイ開始回数を用いて、不要なベリファイがスキップされる。
先ず、信号BLC1をVsgとすると、PDCがデータ“0”の場合、ビット線がVssとなり、データ“1”の場合、ビット線はVddになる。次に、信号BLC1=Vssとした後、信号VREG=Vdd、信号REG=中間電位+Vth(1V+Vth)とする。すると、DDCがデータ“1”の場合、ビット線が中間電位となり、DDCがデータ“0”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“4”,“7”を書き込んでいるときのみビット線はVss、メモリセルにデータ“5”,“6”を書き込んでいる場合、ビット線は中間電位(1V)、メモリセルのデータが“0”〜“3”の場合(書き込みしない場合)、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位(1V)の場合、少しだけ書き込まれる。したがって、メモリセルにデータ“5”,“6”を書き込んでいるセルは、あまり書き込まれない可能性がある。しかし、メモリセルのデータ“6”とデータ“7”のベリファイを一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。このため、ビット線に中間電位を供給する。
(a)この後、ベリファイ電圧“d’”を設定して書き込みベリファイが行なわれる(S96,S97)。このベリファイにおいて、信号BLC2をハイレベルとし、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、SDCがハイレベル、つまり、データ“5”、“4”を書き込んでいるメモリセルのみである。
次に、ワード線にベリファイ電位“d’”を供給し、ビット線を放電する。ビット線の放電中に信号VREG=Vss、信号REG=VDDとする。DDCがハイレベルの場合、ビット線を放電する。したがって、ビット線がプリチャージされるのはデータ“4”を書き込むメモリセルのみである。
次に、ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ“4”が書き込まれていてベリファイ電位“d’”に達した時だけである。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“4”を書き込んでいてベリファイ電位“d’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
(b)この後、ベリファイ電圧“e’”を設定して書き込みベリファイが行なわれる(S98,S99,S100)。
このベリファイにおいて、信号VPRE=ハイレベル、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位“e’”を供給し、ビット線を放電する。次に、このビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“e’”以上の場合である。ここで、信号BLC2をVth+0.5Vとすると、SDCが“0”の場合(メモリセルのデータ“6”に書き込んでいる場合とメモリセルのデータ“7”に書き込んでいる場合)、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルのデータが“5”に書き込まれていてベリファイ電位“e’”に達した時である。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“5”を書き込んでいてベリファイ電位“e’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
(c)ベリファイ電位“f’”を用いたベリファイは、第1の実施形態のベリファイ電位“b”を用いたベリファイと同様である。但し、ベリファイ時のワード線電位は“f’”である(S101,S102,S103)。
(d)ベリファイ電位“f’”“g’”同時ベリファイは、第1の実施形態のベリファイ電位“b”“c”同時ベリファイと同様である。但し、ベリファイ時のワード線電位は“f’”“g’”である。
このようにして、全てのPDCのデータが“1”になるまで、プログラムとベリファイ動作を繰り返す(S106、S107)。しかし、書き込み動作において、DDCのデータが“1”の場合、つまり、メモリセルにデータ“5”を書き込んでいる場合と、メモリセルにデータ“6”を書き込んでいる場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。第1回目プログラムにより、メモリセルにデータ“4”〜“7”の4つが書き込まれる。
上記説明では、1回のプログラムの後、4つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらない。このため、初めは、ベリファイ電位“d’”を用いたベリファイのみ行なう。次に、ベリファイ電位“d’”とベリファイ電位“e’”を用いたベリファイを行なう。次に、ベリファイ電位“d’”とベリファイ電位“e’”ベリファイ電位“f’”のみを用いたベリファイを行なう。最後に、ベリファイ電位“d’”とベリファイ電位“e’”を用いたベリファイと、ベリファイ電位“f’”とベリファイ電位“g’”を同時にベリファイする“f’、g’”同時ベリファイを行なうことも可能である。
また、プログラムの終了近くのループでは、データ“4”への書き込みは終了している。このため、ベリファイ電位“d’”を用いたベリファイ動作を省略し、ベリファイ電位“d’”とベリファイ電位“e’”用いたベリファイ動作を省略することも可能である。
第3ページ第1回目プログラムにおいて、フラグセルFC5は、ベリファイ電位“d’”に書き込まれる。
(第2回目プログラム)(S108〜S121)
第2回目プログラムにより、メモリセルにデータ“1”〜“3”の3つが書き込まれるが、データ“1”を書き込むメモリセルには、全く書き込みが行なわれていない。このため、第1の実施形態と同様に、本来のベリファイ電位より低いベリファイ電位“a*’”を設け、このベリファイ電位を超えたセルに対して、ビット線に中間電位を供給する。これにより、書き込みスピードを遅くし、閾値分布を狭くする。また、メモリセルのデータ“2”とデータ“3”のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、メモリセルにデータ“2”を書き込んでいる場合にも、ビット線に中間電位を供給することにより、書き込みスピードを遅くする。
(内部データリード2及びデータキャッシュ設定2)(S109、S110)
第3のフラグセルのデータをロードした後(S108)、セルへの書き込みの前に、ワード線の電位を“b*(=a)”、“d*”に順次設定し、内部リード動作を行なう(S109)。
この後、データキャッシュを操作することにより、図26に示すように、データキャッシュを設定する(S110)。すなわち、メモリセルにデータ“0”を書き込む場合、PDCはハイレベル、DDCはハイレベル、SDCはハイレベルに設定する。メモリセルにデータ“1”を書き込む場合、PDCはローレベル、DDCはローレベル、SDCはハイレベルに設定する。メモリセルにデータ“2”を書き込む場合、PDCはローレベル、DDCはハイレベル、SDCはローレベルに設定する。メモリセルにデータ“3”を書き込む場合、PDCはローレベル、DDCはローレベル、SDCはローレベルに設定する。メモリセルにデータ“4”〜“7”を書き込む場合、PDCは全てハイレベルに設定する。
ここで、例えばカウンタ(PC)をゼロに初期設定し、さらに、第4のフラグセルのデータをロードする。
(プログラム:第2回目)(S111)
次いで、例えばカウンタ(PC)をカウントアップした後、メモリセルにデータが書き込まれる。先ず、信号BLC1をVsgとすると、PDCがデータ“0”の場合、ビット線がVssとなり、データ“1”の場合、ビット線はVddになる。次に、信号BLC1=Vssとした後、信号VREG=Vdd、信号REG=中間電位+Vth(1V+Vth)とする。すると、DDCがデータ“1”の場合、ビット線が中間電位(1V)となり、DDCがデータ“0”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“3”を書き込んでいる時と、メモリセルにデータ“1”を書き込んでいて本来のベリファイ電位より低いベリファイ電位“a*’”以下の場合、ビット線は、Vssである。メモリセルにデータ“2”を書き込んでいる時と、メモリセルにデータ“1”を書き込んでいて本来のベリファイ電位より低いベリファイ電位“a*’”を越えている場合、ビット線は中間電位(1V)、メモリセルのデータが“0”、“4”〜“3”の場合(書き込みしない場合)、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位(1V)の場合、少しだけ書き込まれる。しかし、メモリセルにデータ“2”とデータ“3”を書き込む場合のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。
(e)ベリファイ電位“a’、a*’”を用いたベリファイは、第1の実施形態のベリファイ電位“a’、a*’”を用いたベリファイと同様である(S112、S113、S114)。
(f)ベリファイ電位“b’”のみを用いたベリファイは、第1の実施形態のベリファイ電位“b’”のみを用いたベリファイと同様である(S115、S116、S117)。
(g)ベリファイ電位”b’”“c’”同時ベリファイは、第1の実施形態のベリファイ電位“b”、“c”同時ベリファイと同様である(S118、S119)。
PDCがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路のPDCのデータがハイレベルになるまでこのプログラム動作とベリファイ動作が繰り返される(S120、S121)。
上記説明では、1回のプログラムの後、3つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらないため、初めは、ベリファイ電位“a’、a*’”を用いたベリファイのみ行ない、次に、ベリファイ電位“a’、a*’” とベリファイ電位“b’”を用いたベリファイを行ない、最後に、ベリファイ電位“a’、a*’”を用いたベリファイとベリファイ電位“b’”“c’”の同時ベリファイを行なうことも可能である。
また、プログラムの終了近くのループにおいて、データ“1”への書き込みは終了しているため、これらのベリファイ動作は省略することもできる。データ“1”のベリファイが不用になると、SDCでデータを保持する必要がなくなる。このため、次の書き込みのためのデータを外部より読み込み、SDCに記憶しておくことも可能である。このような構成とした場合、さらなる高速動作が可能である。
第3ページ第2回目プログラムにおいて、フラグセルFC3は、ベリファイ電位“a’”まで書き込まれ、フラグセルFC4は、ベリファイ電位“b’”まで書き込まれる。
(第1ページリード)
図27(a)は、第1ページのリード動作を示すダイアグラムである。
先ず、アドレスを指定し、図19に示す3ページを選択する。図20(a)(b)(c)、図21(a)(b)に示すように、第2ページの書き込み前と後、及び第3ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位を“d”として読み出し動作を行なう(S131)。この後、第3ページが書き込まれているかどうかをフラグセルFC5のデータから判別する(S132)。フラグセルが複数ある場合は、これらの多数決により判断する。
フラグセルFC5から読み出されたデータが“0”場合、第3ページのデータが書き込まれている。閾値分布は図21(b)となっているため、ワード線の電位を“d”で読み出した結果が、既にデータ記憶回路10に読み出されている。このため、これらのデータを外部に出力すればよい(S133)。
一方、フラグセルFC5から読み出されたデータが“1”場合、第3ページのデータが書き込まれていない。したがって、ワード線の電位を“d*”として読み出し動作を行なう(S134)。第2ページが書き込まれているかどうかフラグセルFC2から読み出されたデータに基づき判別する(S135)。フラグセルが複数ある場合は、これらの多数決により判断する。
フラグセルFC2から読み出されたデータが“0”場合、第2ページのデータが書き込まれている。閾値分布は図20(c)となっているため、ワード線の電位を“d*”で読み出した結果が、既にデータ記憶回路10に読み出されている。このため、これらのデータを外部に出力すればよい(S133)。
一方、フラグセルFC2から読み出されたデータが“1”の場合、第2ページのデータが書き込まれていない。したがって、ワード線の電位を“a”として読み出し動作を行ない読み出した結果を外部に出力すればよい(S136)。
(第2ページリード)
図27(b)は、第2ページのリード動作を示すダイアグラムである。
先ず、アドレスを指定し、図19に示す3ページを選択する。図20(a)〜(c)、図21(a)(b)に示すように、第2ページの書き込み前と後、及び第3ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、先ず、ワード線の電位を“b”として読み出し動作を行なう(S141)。この後、第3ページが書き込まれているかどうかフラグセルFC4から読み出したデータにより判別する(S142)。フラグセルが複数ある場合は、これらの多数決により判断する。
フラグセルFC4から読み出されたデータが“0”場合、第3ページのデータが書き込まれている。閾値分布は図21(b)となっている。このため、ワード線電位“b”、“d”、“f”でメモリセルからデータを読み出す必要がある。しかし、ワード線電位“b”の読み出し結果は、既にデータ記憶回路に読み出されている。このため、ワード線電位“d”、“f”によりデータを読み出し、出力すればよい(S143、S144)。ワード線電位“d”、“f”による読み出しは、第1の実施形態の“b、c”同時リードと同様である。
一方、フラグセルFC4から読み出されたデータが“1”の場合、第3ページのデータが書き込まれていない。したがって、ワード線の電位を“a”として読み出し動作を行なう(S145)。フラグセルFC1から読み出されたデータにより、第2ページが書き込まれているかどうかを判別する(S146)。フラグセルが複数ある場合、これらの多数決により判断する。
フラグセルFC1から読み出されたデータが“0”の場合、第2ページのデータが書き込まれている。閾値分布は図20(c)となっているため、ワード線電位“b*”、“d*”、“f*”で読み出す必要がある。しかし、ワード線電位“b*”の読み出し結果は、既にデータ記憶回路10に読み出されている。このため、ワード線電位“d*”、“f*”でデータを読み出し出力する(S144)。ワード線電位“d*”、“f*”でのリードは、第1の実施形態の“b、c”同時リードと同様である。
一方、フラグセルFC1から読み出されたデータが“1”の場合、第2ページのデータが書き込まれていない。したがって、データを“1”に固定して外部に出力すればよい(S148)。
(第3ページリード)
図28は、第2ページのリード動作を示すダイアグラムである。
先ず、アドレスを指定し、図19に示す3ページを選択する。図20(a)(b)(c)、図21(a)(b)に示すように、第2ページの書き込み前と後、及び第3ページの書き込み前と後で、閾値電圧の分布が変わっている。したがって、ワード線電位“e、g”として読み出し(S151)、次いでワード線電位“a、c”として読み出し動作を行なう(S152)。この後、フラグセルFC3から読み出されたデータに基づき、第3ページが書き込まれているかどうかを判別する(S153)。フラグセルが複数ある場合は、これらの多数決により判断する。ワード線電位“e、g”、ワード線電位“a、c”のリード動作はは、第1の実施形態と同様である。
フラグセルFC3から読み出されたデータが“0”場合、第3ページのデータが書き込まれている。閾値分布は図21(b)となっている。このため、ワード線電位“e、g”、ワード線電位“a、c”によりデータ記憶回路に読み出されているデータを出力すればよい(S154)。一方、フラグセルFC3から読み出されたデータが“1”の場合、第3ページのデータが書き込まれていない。このため、データを“1”に固定して外部に出力すればよい(S155)。
(イレーズ)
消去動作は、第1の実施形態と同様であるため、説明は省略する。
上記第2の実施形態によれば、8値(3ビット)のデータを確実且つ高速に書き込み、読み出すことができる。しかも、第3ページの書き込みにおいて、1回ビット線をプリチャージした状態において、ワード線の電位を変えることにより、複数の閾値電圧を一括してベリファイしている。このため、第3ページのプログラムベリファイを高速化することが可能である。
第2の実施形態に示す、8値(3ビット)のNAND型フラッシュメモリは、第3ページの書き込み時、第1回目の書き込みで、データ“4”〜“7”を書き込み、第2回目の書き込みでデータ“1”〜“3”を書き込んだ。しかし、これに限定されるものではなく、先ず、データ“2”、“4”、“6”を書き込み、この後、データ“1”、“3”、“5”、“7”を書き込むことも可能である。
このような書き込みにおいても、第1の実施形態と同様の効果を得ることができる。
(第3の実施形態)
第2の実施形態において、フラグセルFC1〜FC5は次のように書き込まれていた。すなわち、第2ページの書き込みにおいて、フラグセルFC1は、ベリファイ電位“b*’”まで書き込まれ、フラグセルFC2は、ベリファイ電位“d*’”まで書き込まれ、第3ページの書き込みにおいて、フラグセルFC3は、ベリファイ電位“a’”まで書き込まれ、フラグセルFC4は、ベリファイ電位“b’”まで書き込まれ、フラグセルFC5は、ベリファイ電位“d’”まで書き込まれていた。このため、第2の実施形態は、5つのフラグセルを用いていた。しかし、フラグセルFC4をフラグセルFC1により代替し、フラグセルFC5をフラグセルFC2により代替することが可能である。このため、図19に示す回路は、3つのフラグ用データ記憶回路と、3つのフラグセルFC1、FC2、FC3により構成することが可能である。
上記構成において、第1、第2ページの書き込み動作は、第2の実施形態と同様であり、第3のページの書き込み動作が若干異なっている。
図29、図30は、第3ページの書き込み動作を示している。図29に示す第3ページ第1回目の書き込みにおいて、図23と異なるのは、内部リード(S93)後のフラグセルデータのロードである。第2の実施形態は、第5のフラグセルFC5にデータをロードしていた(S94)。これに対して、第3の実施形態は、内部リード(S93)後、フラグセルFC2にデータをロードする(S151)。
また、図29に示す第3ページ第2回目の書き込みにおいて、図24と異なるのは、内部リード(S109)後のフラグセルデータのロードである。第2の実施形態は、第4のフラグセルFC4にデータをロードしていた(S110)。これに対して、第3の実施形態は、内部リード(S93)後、フラグセルFC1にデータをロードする(S161)。
前述したように、第2ページの書き込みにおいて、フラグセルFC1は、ベリファイ電位“b*’”まで書き込まれ、フラグセルFC2は、ベリファイ電位“d*’”まで書き込まれる。次いで、図29、図30に示す書き込み動作により、第3ページの書き込みにおいて、フラグセルFC3は、ベリファイ電位“a’”まで書き込まれる。第2ページの書き込みにおいて、ベリファイ電位“b*’”まで書き込まれたフラグセルFC1は、第3ページの書き込みによりベリファイ電位“b’”まで書き込まれる。第2ページの書き込みにおいて、ベリファイ電位“d*’”まで書き込まれたフラグセルFC2は、第3ページの書き込みによりベリファイ電位“d’”まで書き込まれる。
図31(a)は、第1ページの読み出しアルゴリズムを示し、図31(b)は第2ページの読み出しアルゴリズムを示している。
図31(a)において、図27(a)と異なるのは、電位“d”による読み出し(S131)の後の判別である。第2の実施形態において、この判別は、フラグセルFC5から読み出したデータに基づいて行なった(S132)。これに対して、第3の実施形態において、この判別は、フラグセルFC2から読み出したデータに基づいて行なわれる(S201)。その他の動作は、図27(a)と同様である。
また、図31(b)において、図27(b)と異なるのは、電位“b”による読み出し(S141)の後の判別である。第2の実施形態において、この判別は、フラグセルFC4から読み出したデータに基づいて行なった(S142)。これに対して、第3の実施形態において、この判別は、フラグセルFC2から読み出したデータに基づいて行なわれる(S211)。その他の動作は、図27(b)と同様である。
第3ページの読み出しアルゴリズムは、図28に示す第2の実施形態と同様である。
上記第3の実施形態によれば、3つのフラグ用データ記憶回路と、3つのフラグセルにより、第2の実施形態と同様にプログラムベリファイを高速化することができる。しかも、フラグ用データ記憶回路とフラグセルの数を削減することができるため、チップの占有面積を削減できる利点を有している。
尚、上記第1の実施形態の第2ページの書き込み、及び第2、3の実施形態の第3ページの書き込みにおいて、メモリセルにデータ“1”を書き込んだ場合、SDCが空く。このため、SDCに、次に書き込むべきデータを供給することが可能である。このように、次に書き込むべきデータを予めSDCに記憶させることにより、一層書き込み速度を高速化することができる。
さらに、SDCが空いた場合、プログラム動作を一時停止し、別のページのメモリセルからデータを読み出し、この読み出し結果をSDCに記憶し、SDCから外部に出力している間に、停止していたプログラム動作を再開するように構成することも可能である。
尚、フラグセルの数及び配置は、上記各実施形態に限定されるものではない。
図32は、フラグセルを複数配置した場合の例を示すものである。この例は、信頼性を向上させるため、メモリセルアレイの一端部に複数の第1、第2のフラグセルとダミーセルを配置している。すなわち、偶数ページ(BLE)用に4個の第1のフラグセルと、3個の第2のフラグセルを配置し、奇数ページ(BLO)用に4個の第1のフラグセルと、3個の第2のフラグセルを配置している。偶数、及び奇数ページ用の第2のフラグセルの両側には偶数用ダミーセル、奇数用ダミーセルが配置されている。
このような構成において、データの読み出し時に、遇数ページの4個の第1のフラグセルの多数決と、3個の第2のフラグセルの多数決を求めることにより、遇数ページにおける第2ページの書き込みの有無を判断する。また、奇数ページ用の4個の第1のフラグセルの多数決と、3個の第2のフラグセルの多数決を求めることにより、奇数ページにおける第2ページの書き込みの有無を判断する。このような構成とすれば、隣接するセルのFG−FG間容量により、後に書いた隣接セルの閾値電圧により、先に書いたセルの閾値電圧が変化した場合においても、確実に第2ページが書き込まれたかどうかを判断することができる。
(第4の実施形態)
多値データを記憶する不揮発性半導体記憶装置の場合、記憶するデータのビット数が多い場合、1つの閾値分布を狭くしなくてはならない。このため、プログラム及びベリファイ動作において、プログラム電圧を少しずつ上昇させて書き込み動作を行ない、本来のベリファイ電位より低いベリファイ電位を超えた場合、ビット線に中間電位を入力することにより、プログラム動作中の書き込みスピードを遅くし、この状態で本来のベリファイ電位まで書き込むことが提案されている。しかし、本来より低いベリファイ電位を超えていることと、本来のベリファイ電位を超えていることの区別が必要である。このため、ページバッファの数が増大するという課題がある。
第4の実施形態は、第1の実施形態とほぼ同様の動作であるが、第2ページのプログラムベリファイにおけるベリファイ電位“b’”“c’”によるデータ“2”、“3”の同時ベリファイのみが異なっている。第1の実施形態において、閾値電圧“b’”“c’”に書き込むセルは、本来の閾値電圧より低いベリファイ電位まで書き込み、このベリファイ電位を超えたセルに対しては、ビット線に中間電位を供給して書き込みスピードを遅くし、閾値電圧の分布幅を狭めることはしなかった。閾値電圧“b’”に書き込むセルは、図33(a)に示すように、第1ページの書き込み時に“v’”のレベルまで書き込みが行われている。したがって、書き込みスピードが遅くなるため、このような操作は、不必要であるかもしれない。しかし、閾値電圧“c’”に書き込むセルも、第1ページの書き込み時に“v’”のレベルまで書き込まれているが、“v’”と“c’”のレベルに差がある。このため、閾値電圧“c’”のベリファイにおいて、本来の閾値電圧より低いベリファイ電位まで書き込み、このレベルを超えたセルに対しては、ビット線に中間電位を供給して書き込みスピードを遅くし閾値分布幅を狭めたほうがよい。このため、閾値電圧“c’”のベリファイでは、先ず、本来より低いベリファイ電位“c*’”と、本来のベリファイ電位“c’”とで行なう。
図34は、第4の実施形態に係る第1ページの書き込み動作を示している。図34のS301〜S308に示す第1の書き込み動作、及び図36に示すデータキャッシュにデータは、第1の実施形態と同様であるため、説明は省略する。
図35は、第2ページの書き込み動作を示している。第2ページの書き込みにおいて、S311〜S322までの動作は、第1の実施形態と殆ど同じである。しかし、ベリファイ電位“b”“c*’”“c’”による同時ベリファイが第1の実施形態と異なっている。
(ベリファイ電位“b”“c*’”“c’”同時ベリファイ)(図37、図38)。
図35において、プログラム及びベリファイファイを何回か繰り返すと、メモリセルにデータ“3”を書き込みでいるセルも書き込みが終了する。このため、ベリファイ電位“b’”を用いたベリファイ(S322)に替わり、ベリファイ電位“b’”“c*’”“c’”を用いた同時ベリファイを行なう(S324)。先ず、信号BLPRE=ハイレベル(Vdd+Vth)、VPRE=ハイレベル(Vdd+Vth)、信号BLCLAMPを所定電位に設定し、ビット線をプリチャージする。
次に、ワード線にベリファイ電位“b’”を供給しビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。
この後、TDCをVddに充電した後、信号BLCLAMPを所定の電位とする。すると、TDCが“1”(ハイレベル)になるのは、閾値電圧がベリファイ電位“b’”以上の場合である。ここで、信号BLC1が中間電位、例えばVth+0.5Vであるとすると、PDCが“0”(ローレベル)の場合(メモリセルのデータ“3”に書き込んでいる場合と、メモリセルにデータ“1”を書き込んでいる場合で、ベリファイ電位“a*’”以下の場合)、TDCはVssになる。したがって、TDCがVddになるのは、メモリセルがデータ“2”に書き込まれていて、ベリファイ電位“b’”に達した時である。次に、信号VREGをハイレベル(例えばVdd)、信号REGをVsg(例えばVdd+Vth)とすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“2”を書き込んでいてベリファイ電位“b’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
次に、ワード線にベリファイ電位“c*’”を供給しビット線を放電する。
この後、TDCをVddに充電した後、信号BLCLAMPを所定の電位とする。TDCがVddになるのは、メモリセルのデータを“3”に書き込みを行なっていてベリファイ電位“c*’”に達した時である。次に、信号VREGをハイレベル、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“3”を書き込んでいてベリファイ電位“c*’”に達した時と、メモリセルにデータ“2”を書き込んでいる場合と、メモリセルにデータ“1”を書き込んでいる場合で、ベリファイ電位“a*’”が以上の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVdd+VthとしてTDCの電位をPDCに取りこむ。
次に、ワード線にベリファイ電位“c’”を供給しビット線を放電する。
この後、TDCをVddに充電した後、信号BLCLAMPを所定の電位とする。TDCがVddになるのは、メモリセルのデータが“3”に書き込まれていてベリファイ電位“c’”に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“3”を書き込んでいてベリファイ電位“c’”に達した時と、書き込み非選択の場合である。さらに、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
これらの動作により、メモリセルにデータ“3”を書き込んでいて、ベリファイ電位“c*’”を超え、本来のベリファイ電位での書き込みが完了とならなかった場合、DDCはハイレベル、PDCはローレベル、SDCはローレベルとなり、メモリセルにデータ“2”を書き込んでいる場合と同様になる。このため、次のプログラムにおいて、DDCはハイレベルとなっているため、ビット線が中間電位(例えば1V)となり書き込みが行われる。
また、この後、ベリファイ電位“b’”“c*’”“c’”同時ベリファイにおいて、閾値電圧“b’”のベリファイ時に、閾値電圧は当然“c*’”以上にあるため、このベリファイはパスし、PDCがハイレベルとなる。したがって、メモリセルにデータ“3”を書き込んでいて、ベリファイ電位“c*’”を超えた場合、1回だけビット線を中間電位にして書き込みが行なわれる。
このようにして、全てのPDCのデータが“1”になるまで、プログラムとベリファイ動作が繰り返される。しかし、書き込み動作において、DDCのデータが“1”の場合、つまり、メモリセルにデータ“2”を書き込んでいる場合と、メモリセルにデータ“3”を書き込んでいてベリファイ電位“c*’”を超えたとき(これはメモリセルにデータ“2”を書き込んでいる場合と同じになる)、とデータ“1”を書き込んでいてベリファイ電位“a*’”を超えている場合、ビット線を中間電位にして書き込み動作をする。
また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。このプログラム電圧Vpgmの増分ΔVpgmは、第1ページの書き込み動作と、第2の書き込み動作で相違されており、例えば第1ページの書き込み動作における増分ΔVpgmは、第2の書き込み動作における増分ΔVpgmより大きく設定されている。
図35に示すフローチャートでは、プログラムとベリファイ“a*,a’”(S316,S319)を数回繰り返した後に、プログラムとベリファイ“a*’,a’”とプログラムベリファイ“b’”を数回繰り返し、プログラムとベリファイ“a*’,a’”とプログラムベリファイ“b’,c’”を数回繰り返す。この途中でメモリセルへのデータ“1”の書き込みは、早く終了する。このため、データ“1”を書き込むべきセルが無くなった場合、プログラムベリファイ“a*’,a’”をスキップし(S318〜S320)、プログラムとプログラムベリファイ“b’”(S316、S322)、又はプログラムとプログラムベリファイ“b’,c*’,c’”(S316−S326)を繰り返すようになる。プログラムとベリファイ“a*’,a’”(S316、S319)をスキップする場合、SDCは使用しなくなる。このため、次のプログラムデータを入力することができる。しかし、稀に、メモリセルにデータ“1”がなかなか書けないセルもある。したがって、プログラムベリファイ“a*,a’”の回数を制限している。
(リード動作)
リード動作は、第1の実施形態と同様である。
(イレーズ)
消去動作は、前述したように、先ず、アドレスを指定し、図3の破線で示すブロックを選択する。次に、セルが形成されたウエルの電位を高電圧(約20V)にし、選択ブロックのワード線をVss、非選択ブロックのワード線をフローティングにする。すると、選択ブロックのセルとウエル間に高電圧が加わり、セルに記憶されたデータが消去される。一方、非選択ブロックにおいて、ワード線はフローティング状態であるため、ウエルを高電圧にすると、ワード線も高電圧になる。このため、非選択ブロックのメモリセルに記憶されたデータは消去されない。
消去動作を行なうと、メモリセルのデータは“0”となり、第1ページ、第2ページの何れでリードを行なってもデータ“1”が出力される。
(消去後書き込み)
図33(e)は、消去後の閾値電圧の例を示している。上記のように、消去動作はブロック内の複数のメモリセルのデータを一括して消去するため、図33(e)に示すように、図33(a)に示す閾値電圧より低い電圧まで消去されている場合がある。このように、本来の閾値電圧より低い電圧まで消去されているメモリセルがある場合、アッパーページ(例えば2ページ)のプログラムにおいて、メモリセルのデータ“0”を“1”に書き込む際、閾値電圧が変化する範囲が大きくなる。このため、浮遊ゲートと浮遊ゲートのカップリングにより、隣接するセルの閾値電圧が変化してしまう。
したがって、図33(f)に示すように、隣接するセルの閾値電圧の変化を防止するため、消去後、僅かな書き込みを行ない。本来の閾値電圧より低い負の電圧まで消去されているセルの閾値電圧を本来の閾値電圧までもどす。
消去後書き込みにおいて、先ず、全データ記憶回路のPDCがローレベルにセットされる。この後、データ記憶回路に接続された2本のビット線BLEとBLOに接続されたセルに対して同時に書き込み動作を行なう。書き込みベリファイは、2本のビット線のうち1本ずつ行なう。しかし、フロック内の全セルについてベリファイを行なうと時間がかかるため、全部のワード線を同一電位とし、1つのNANDセルを一括してベリファイする。一方のビット線に関して、消去後の書き込みが完了した場合、PDCがハイレベルとなるようにし、次のプログラムが行なわないようにする。同様にして他方のビット線に関してベリファイ動作を行ない、全データ記憶回路のデータがハイレベルになるまで書き込み及びベリファイ動作を繰り返す。
上記第4の実施形態によれば、第2ページの書き込みベリファイ動作の途中において、一度のビット線の充電に対して、ワード線の電位を閾値電圧“b’,c*’,c’”の順に変更し、閾値電圧“b’,c*’,c’”を一括してベリファイしている。このため、高速なベリファイが可能であるため、高速な書き込みが可能となる。
また、メモリセルにデータ“3”を書き込んでいる際において、本来のベリファイ電位より僅かに低いベリファイ電位を超えた場合、ビット線に中間電位を供給して書き込みを行なっている。このため、メモリセルに書き込まれる閾値電圧の分布を狭くすることができる。したがって、書き込み時の電圧のステップアップ幅を大きくすることが可能であるため、全体的な書き込み時間を短縮でき、高速な書き込みが可能となる。
つまり、書き込み動作により、メモリセルが、データ“3”の閾値電圧に達したかどうかをベリファイする場合、本来のベリファイ電位“c’”より低いベリファイ電位“c*’”でベリファイし、この低いベリファイ電位“c*’”を超えていて、本来のベリファイ電位“c’”で書き込みが完了とならなかった場合、データ記憶回路内のDDC,PDC,SDCはデータ“2”を書き込む時のデータとなるため、次の書き込みではビット線に中間電位を供給し、書き込みスピードを遅くしている。この後、データ“2”のベリファイ時、このメモリセルはベリファイをパスするため、このセルの書き込みは終了する。このため、メモリセルに書き込まれる閾値電圧の分布を狭くすることができる。
しかも、本来のベリファ電位より低いベリファイ電位を超えているメモリセルと、本来のベリファイ電位を超えているメモリセルとを区別のためのデータ記憶回路を必要としないため、回路構成の増加を防止できる。
(第5の実施形態)
上記第4の実施形態において、第2ページの書き込みは、次のように行っていた。すなわち、データ“3”を書き込むセルにおいて、本来のベリファイ電位“c’”より低いベリファイ電位“c*’”を超えるセルに対し、中間電位を供給して、1回のみ書き込みを行ない、この後、書き込み完了としていた。しかし、データ“1”を書き込むセルについては、本来のベリファイ電位“a’”より低いベリファイ電位“a*’”を超えるセルに対して、中間電位を供給し、本来のベリファイ電位“a’”まで書き込みを繰り返し行っていた。したがって、書き込むデータに応じて動作が若干異なっている。
これに対して、第5の実施形態は、データ“1”を書き込むセルに対して、データ”3”を書き込むセルと同じように書き込みを行なう。すなわち、本来のベリファイ電位“a’”より低いベリファイ電位“a*’”を超えるセルに対して、中間電位を供給して1回のみ書き込みを行ない、書き込みを完了する。また、第1ページのデータの書き込みに関しても、本来のベリファイ電位“v’”より低いベリファイ電位“v*’”を超えるセルに対して、中間電位を供給して1回のみ書き込みを行ない。この後、書き込み完了する。
以下、図39乃至図43を参照して具体的に説明する。
(第1ページ書き込み)
先ず、第1ページの書き込みについて説明する。第1ページのプログラム、プログラムベリファイ動作は、図8に示す第1の実施形態の変形例と同様である。しかし、図39(a)に示すように、プログラムベリファイにおいて、本来のベリファイ電位“v’”より低いベリファイ電位“v*’”を超えるセルに対して、DDCに“1”を設定し、次のプログラムの時にPDCが“0”、DDCが“1”の場合、ビット線に中間電位(例えば1V)を供給して書き込みを行なう。
TDCはキャパシタにより構成されているため、この書き込みリカバリー中において、図39(b)(データリフレッシュ1後)に示すように、DDCのデータをTDCに移し、PDCのデータをDDCに移し、TDCのデータをPDC移す。
さらに、再び、図39(c)(データリフレッシュ2後)に示すように、DDCのデータをTDCに移し、PDCのデータをDDCに移し、TDCのデータをPDCに移し、DDCのデータをリフレッシュする。しかし、図39(c)に示す操作において、DDCのデータをTDCのデータに移すとき、図39(b)に示すTDCの値(ベリファイ電位“a*’”を超える→1)をリセットせずに、DDCのデータ(1:書き込み非選択、0:書き込み)を移すと、TDCの値がベリファイ電位“a*’”を超える場合も“1”になるため、PDCには書き込み非選択となる。したがって、ベリファイ電位“a*’”を超える場合、ビット線に1回のみ中間電位が供給されてプログラムされる。
(第2ページ書き込み)
第2ページの書き込みは、本来のベリファイ電位“a’”より低いベリファイ電位“a*’”を超えるセルに対して、ビット線に中間電位を供給し、1回のみ書き込みを行ない、書き込みを完了する。
プログラムベリファイ動作は、図35と同様である。プログラムベリファイにおいて、本来のベリファイ電位“a’”より低いベリファイ電位“a*’”を超えるセルに対しては、図40に示すように、DDCを“1”にし、次のプログラム時にPDCが“0”でDDCが“1”の場合、ビット線に中間電位を供給して書き込みを行なう。したがって、この中間電位をビット線に供給して1回書き込みを行なった後、PDCを“1”にして書き込み完了とする。
以下、動作について具体的に説明する。
プログラム中に、信号BLCLAMPをローレベルとし、PDC及びDDCをビット線から切り離す。ビット線は容量が大きいため、切り離されても、書き込みは継続して行なわれる。
この後、信号BLPREをハイレベル、信号VPREをハイレベルとしてTDCをハイレベルとする。さらに、信号REGをハイレベル、信号VREGをローレベルとして、DDCが“1”の場合、TDCをローレベルとし、DDCが“0”の場合、TDCをハイレベルのままとする。この状態において、TDCのデータをPDCに移すと同時に、DTGをハイレベルとし、図41(a)に示すように、DDCにもPDCと同じデータを保持させる。
次に、信号BLC2をハイレベルとしてSDCのデータをTDCに移し、信号REGをハイレベル、信号VREGをVssとする。この状態において、DDCが“1”の場合、強制的に、TDCをローレベルにした後、TDCのデータをPDCに移す(図41(b))。
この後、信号BLPREをハイレベルとし、信号VPREをハイレベルとしてTDCをハイレベルとする。さらに、信号REGをハイレベル、信号VREGをローレベルとして、DDCが“1”の場合、TDCをローレベルとする。DDCが“0”の場合、TDCをハイレベルのままとし、信号DTGを“1”としてPDCのデータをDDCに移した後、TDCのデータをPDCに移す(図42(a))。
次に、信号BLPREをハイレベルとし、信号VPREをハイレベルとしてTDCをハイレベHとした後、信号BLCLAMPを所定の電圧とする。すると、ビット線がローレベル(“0”)又は中間電位の場合、TDCはローレベル、ビット線がハイレベルの場合、TDCはハイレベルとなる。この後、信号VREGをVddとし、信号REGをハイレベルとして、DDCがハイレベルの場合、TDCを強制的にハイレベルにする。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。DDCのデータは元々保持されたデータとなる。しかし、PDCはDDCがハイレベルであり、SDCがハイレベルであった場合、つまり、本来のベリファイ電位“a’”より低いベリファイ電位“a*’”を超える場合、ハイレベル、つまり書込み非選択となる。したがって、ベリファイ電位“a*’”を超える場合、1回のみビット線が中間電位になりプログラムが行なわれる(図42(b))。
上記第5の実施形態によれば、第2ページの書き込みにおいて、データ“1”を書き込むメモリセルと、データ“3”を書き込むメモリセルに対して、同一の書き込み方式によりデータを書き込むことができる。つまり、本来のベリファイ電位“a’”より低いバリファイ電位“a*’”を超えるセルに対して中間電位を供給して1回のみ書き込みを行ない。この後、書き込み完了としている。このため、高速な書き込み動作を実現できる。
しかも、第1ページのデータの書き込みにつても、本来のベリファイ電位“v’”より低いベリファイ電位“v*’”を超えるセルに対して、中間電位を供給して1回のみ書き込みを行ない、書き込み完了としている。このため、一層高速な書き込み動作を実現できる。
(第6の実施形態)
次に、図43乃至図52を参照して、本発明の第6の実施形態について説明する。
第6の実施形態において、メモリセルアレイの構成及びデータ記憶回路の配置は、第2及び第3の実施形態と同じである。すなわち、第6の実施形態は、1つのメモリセルに8値(3ビット)のデータを記憶する。
図43(a)(b)(c)、図44(a)(b)に示す第6の実施形態の書き込みデータとメモリセルの閾値電圧の関係は、図20(a)(b)(c)、図21(a)(b)と同様である。また、第1ページ、第2ページのプログラム動作は、第4の実施形態とほぼ同様の動作である。すなわち、第1ページ、第2ページのプログラム動作において、メモリセルのデータが本来の閾値電圧に達したかどうかをベリファイする際、通常より低いベリファイ電位を用いてベリファイされている。第6の実施形態は、第3ページのプログラムが第4の実施形態と相違する。
(第3ページプログラム)
図45、図46は、第3ページプログラムのブロックダイアグラムを示している。第3ページのプログラム動作も、先ずアドレスを指定し、図19に示す3ページを選択する。
次に、データ記憶回路10をリセットし(S351)、書き込みデータを外部より入力して全てのデータ記憶回路10のSDCに記憶する(S352)。外部よりデータ“1”(書き込みを行なわない)が入力されると、図6に示すデータ記憶回路10のSDCは、ローレベルになり、データ“0”(書き込みを行なう)が入力されるとハイレベルとなる。
第3ページのプログラムは、図44(b)に示すように、メモリセルのデータが“0”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータを“0”のままとし、外部から入力されるデータが“0”の場合、メモリセルのデータを“1”にする。
メモリセルのデータが“2”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータは“2”のままである。しかし、第2ページの書き込み時において、メモリセルのデータが“2”に達したかどうかをベリファイする際、通常より低いベリファイ電位“b*’”を用いた。このため、データ“2”を記憶するメモリセルは、本来のベリファイ電位である“b’”の電位まで書き込む。メモリセルのデータが“2”の場合で、外部から入力されるデータが“0”の場合、メモリセルのデータを“3”にする。
メモリセルのデータが“4”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータは“4”のままである。しかし、第2ページの書き込み時において、メモリセルのデータが“4”に達したかどうかをベリファイする際、通常より低いベリファイ電位“d*’”を用いた。このため、データ“4”を記憶するメモリセルは、本来のベリファイ電位である“d’”の電位まで書き込む。メモリセルのデータが“4”の場合で、外部から入力されるデータが“0”の場合、メモリセルのデータを“5”にする。
メモリセルのデータが“6”の場合で、外部から入力されるデータが“1”の場合、メモリセルのデータを“6”のままである。しかし、第2ページの書き込み時において、メモリセルのデータが“6”に達したかどうかをベリファイする際、通常より低いベリファイ電位“f*’”を用いた。このため、データ“6”を記憶するメモリセルは、本来のベリファイ電位である“f’”の電位まで書き込む。メモリセルのデータが“6”の場合で、外部から入力されるデータが“0”の場合、メモリセルのデータを“7”にする。
第6の実施形態では、このようにして書き込みを行なうが、書き込み及び読み出されるデータとメモリセルのデータを、第2及び第3の実施形態と同じようにすることも可能である。
また、データ“3”、“5”、“7”への書き込みセルに関しては、本来のベリファイ電位より低い閾値でベリファイ動作を行ない。このレベルを超えていた場合で、本来のベリファイ電位で書き込み完了とならなかった場合、次の書き込み時は、ビット線に中間電位を供給して書き込みスピードを遅くし、1回のみ書き込みを行ない書き込み完了とする。本来のベリファイ電位を超えているセルは、その時点で書き込みが終了となる。
また、メモリセルにデータ“1”を書き込むセルに関しては、本来のベリファイ電位より低いベリファイ電圧でベリファイ動作を行なう。そして、この本来より低いベリファイ電位を超えていた場合、次の書き込み以降、ビット線に中間電位を供給して書き込みスピードを遅くし、本来のベリファイ電位を超えるまで書き込む。
(第3ページ第1回目プログラム)
第3ページのプログラムは、メモリセルにデータ“1”〜“7”を書き込む。これらのデータを同時にプログラムすることも可能であるが、第6の実施形態では、先ず、メモリセルにデータ“4”〜“7”の4つのデータを書き込む。この後、メモリセルにデータ“1”〜“3”を書き込む。以下、具体的に説明する。
先ず、データ記憶回路がリセットされ、外部よりデータ記憶回路のSDCにデータがロードされる(図45、S351、S352)。
(内部データリード1及びデータキャッシュ設定1)(S353、S354)
メモリセルへデータを書き込む前に、第2ページのメモリセルのデータが“4”、“6”か、“0”、“2”であるかの判断と、メモリセルのデータが“6”か、データが“0”、“2”、“4”のいずれであるかを判断する。このため、ワード線の電位を“d*”、“f*”に順次設定し、メモリセルに書き込まれているデータが読み出され、データキャッシュに設定される。
図47(a)は、内部リード後のデータキャッシュの状態を示している。この後、データキャッシュを操作することにより、図47(b)に示すように、データキャッシュを設定する。さらに、例えばカウンタ(PC)をゼロに初期設定し、第5のフラグセルのデータをロードする。
図47(b)において、メモリセルのデータを“0”〜“3”にする場合、PDCはハイレベル(“1”)。メモリセルのデータを“4”とする場合、PDCはローレベル(“0”)、DDCはハイレベル、SDCはハイレベルに設定する。メモリセルのデータを“5”とする場合、PDCはローレベル、DDCはローレベル、SDCはハイレベルに設定する。メモリセルのデータを“6”とする場合、PDCはローレベル、DDCはハイレベル、SDCはローレベルに設定する。メモリセルのデータを“7”とする場合、PDC、DDC、SDCをいずれもローレベルに設定する。
(プログラム:第1回目)(S355)
次いで、カウンタ(PC)をカウントアップした後、メモリセルにデータが書き込まれる。第6の実施形態においても、第2の実施形態と同様、カウンタの値と予め定められたベリファイ開始回数を用いて、不要なベリファイがスキップされる。
先ず、信号BLC1をVsgとすると、PDCがデータ“0”の場合、ビット線がVssとなり、データ“1”の場合、ビット線はVddになる。次に、信号BLC1をVssに設定した後、信号VREGをVdd、信号REGを中間電位(例えば1V+Vth)に設定する。DDCがデータ“1”の場合、ビット線が中間電位となり、DDCがデータ“0”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“5”,“7”を書き込んでいるときのみビット線はVss、メモリセルにデータ“4”,“6”を書き込んでいる場合、ビット線は中間電位(例えば1V)、メモリセルのデータが“0”〜“3”の場合(書き込みしない場合)、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位(例えば1V)の場合、少しだけ書き込まれる。したがって、メモリセルにデータ“4”,“6”を書き込んでいるセルは、あまり書き込まれない可能性がある。しかし、メモリセルのデータ“4”とデータ“5”のベリファイとメモリセルのデータ“6”とデータ“7”のベリファイはそれぞれ一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。このため、ビット線に中間電位を供給する。
(“d’”のみのベリファイ)(S356−S358、図48(a))
この後、ベリファイ電圧“d’”を設定して書き込みベリファイが行なわれる。先ず、信号BLC2をハイレベルとし(Vdd+Vth)、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、SDCがハイレベル、つまり、データ“5”、“4”を書き込んでいるメモリセルのみである。
次に、ワード線にベリファイ電位“d’”を供給し、ビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ“4”及び“5”を書き込んでいて、ベリファイ電位“d’”以上になったときである。この後、信号BLC1を中間電位(Vth+0.5V)にすると、PDCがローレベルの場合、メモリセルにデータ“5”を書き込んでいる場合、TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ“4”を書き込んでいて、ベリファイ電位“d’”以上になったときである。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“4”を書き込んでいてベリファイ電位“d’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
(“d’”“e*’”“e’”同時ベリファイ)(S359−S361、図48(b))
プログラムを数回繰り繰り返すと、メモリセルに対するデータ“5”への書き込みも完了してくる。したがって、ベリファイ“e’”のベリファイも行なう。このベリファイは、“d’”“e*’”“e’”レベルのベリファイを同時に行なう。
先ず、信号BLC2をハイレベルとし、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。このとき、プリチャージされるのは、SDCがハイレベル、つまり、データ“5”、“4”を書き込んでいるメモリセルのみである。
次に、ワード線にベリファイ電位“d’”を供給し、ビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ“4”及び“5”を書き込んでいて、ベリファイ電位“d’”以上になったときである。この後、信号BLC1を中間電位(Vth+0.5V)にすると、PDCがローレベルの場合、メモリセルにデータ“5”を書き込んでいるとき、TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ“4”を書き込んでいて、ベリファイ電位“d’”以上になったときである。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“4”を書き込んでいてベリファイ電位“d’”に達した時と、書き込み非選択の場合である。さらに、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
この後、ワード線にベリファイ電位“e*’”を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“e*’”以上の場合である。つまり、メモリセルのデータが“5”に書き込まれていてベリファイ電位“e*’”に達した時である。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“5”を書き込んでいてベリファイ電位“e*’”に達した時と、メモリセルにデータ“0”“2”“4”“6”を書き込んでいる場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
この後、ワード線にベリファイ電位“e’”を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“e’”以上の場合である。つまり、メモリセルのデータが“5”に書き込まれていてベリファイ電位“e’”に達した時である。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“5”を書き込んでいてベリファイ電位“e’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
メモリセルにデータ“5”を書き込んでいてベリファイ電位“e*’”に達し、ベリファイ電位“e’”のベリファイで書き込み完了にならなかった場合のデータ記憶回路データは、SDC=“1”、DDC=“1”、PDC=“0”となり、メモリセルにデータ“4”を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ“5”を書き込んでいてベリファイ電位“e*’”に達した場合、メモリセルにデータ“4”が書き込み状態となる。メモリセルにデータ“4”を書き込む場合、ビット線に中間電位を供給されている。このため、次の書き込みではメモリセルに少しだけ書き込みが行われる。また、このセルは、次の“d’”“e*’”“e’”同時ベリファイにおいて、“d’”のベリファイで、セルの閾値電圧が“e*’”以上に存在するため、必ずベリファイをパスすることとなり、2回目以降の書き込みは行なわれなくなる。
(ベリファイ電位“f’”のみを用いたベリファイ)(S362−S364、図49(a))
ベリファイ電位“f’”のみを用いたベリファイは、先ず、信号VPREをハイレベルとし、信号BLPREをVdd+Vthとし、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。
次に、ワード線にベリファイ電位“f’”を供給し、ビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ“6”及び“7”を書き込んでいて、ベリファイ電位“f’”以上になったときである。この後、信号BLC1を中間電位(Vth+0.5V)にすると、PDCがローレベルの場合、メモリセルにデータ“7”を書き込んでいる場合、TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ“6”を書き込んでいて、ベリファイ電位“f’”以上になったときである。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“6”を書き込んでいてベリファイ電位“f’”に達した時と、書き込み非選択の場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
(“f’”“g*’”“g’”同時ベリファイ)(S365,S366、図49(b))
プログラムを数回繰り繰り返すと、メモリセルのデータ“7”への書き込みが完了してくる。したがって、ベリファイ“g’”のベリファイも行なう。このベリファイは、“f’”“g*’”“g’”のベリファイを同時に行なう。
先ず、信号VPREをハイレベルとし、信号BLPREをVdd+Vthとし、信号BLCLAMPを所定の電位に設定する。すると、ビット線がプリチャージされる。
次に、ワード線にベリファイ電位“f’”を供給し、ビット線を放電する。ビット線の放電中にDDCのデータをTDCに移す。この後、PDCのデータをDDCに移し、TDCのデータをPDCに移す。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ“6”及び“7”を書き込んでいて、ベリファイ電位“f’”以上になったときである。この後、信号BLC1を中間電位(Vth+0.5V)にすると、PDCがローレベルの場合、メモリセルにデータ“7”を書き込んでいる場合TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ“6”を書き込んでいて、ベリファイ電位“f’”以上になったときである。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“6”を書き込んでいてベリファイ電位“f’”に達した時と、書き込み非選択の場合である。次いで、信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
この後、ワード線にベリファイ電位“g*’”を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“g*’”以上の場合である。つまり、メモリセルのデータが“7”に書き込まれていてベリファイ電位“g*’”に達した時である。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“7”を書き込んでいてベリファイ電位“g*’”に達した時と、メモリセルにデータ“0”“2”“4”“6”を書き込んでいる場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
この後、ワード線にベリファイ電位“g’”を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“g’”以上の場合である。つまり、メモリセルのデータが“7”に書き込まれていてベリファイ電位“g’”に達した時である。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“7”を書き込んでいてベリファイ電位“g’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
メモリセルにデータ“7”を書き込んでいてベリファイ電位“g*’”に達し、ベリファイ電位“g’”のベリファイで書き込み完了にならなかった場合、データ記憶回路のデータは、SDC=“0”、DDC=“1”、PDC=“0”となり、メモリセルにデータ“6”を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ“7”を書き込んでいてベリファイ電位“g*’”に達した場合、メモリセルにデータ“6”を書き込む状態となる。メモリセルに対するデータ“6”への書き込みは、ビット線に中間電位を供給している。このため、次の書き込みでは少しだけ書き込みが行われる。また、このセルは、次の“f’”“f*’”“g’”同時ベリファイにおいて、“f’”のベリファイの際、セルの閾値電圧が“g*’”以上に存在する。このため、ベリファイは必ずパスとなり、2回目以降の書き込みは行なわれなくなる。
このようにして、全てのPDCのデータが“1”になるまで、プログラムとベリファイ動作を繰り返す(S367、S368)。しかし、書き込み動作において、DDCのデータが“1”の場合、つまり、メモリセルにデータ“4”を書き込んでいる場合と、メモリセルにデータ“6”を書き込んでいる場合と、メモリセルにデータ“5”を書き込んでいて、ベリファイ電位“e*’”を超えた場合と、メモリセルにデータ“7”を書き込んでいて、ベリファイ電位“g*’”を超えた場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。このようにして、第1回目プログラムにより、メモリセルにデータ“4”〜“7”の4つが書き込まれる。
上記説明では、1回のプログラムの後、4つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらない。このため、初めは、ベリファイ電位“d’”を用いたベリファイのみ行なう。次に、ベリファイ電位“d’”“e*’”“e’”を用いた同時ベリファイを行なう。次に、ベリファイ電位“d’”“e*’”“e’”を用いた同時ベリファイと、“f’”のみを用いたベリファイを行なう。次に、ベリファイ電位“d’”“e*’”“e’”を用いた同時ベリファイと、“f’”“g*’”“g’”を用いた同時ベリファイを行なうことも可能である。
また、プログラムの終了近くのループでは、メモリセルのデータ“4”、“5”への書き込みは終了している。このため、ベリファイ電位“d’”“e*’”“e’”を用いた同時ベリファイ動作を省略し、最後に、“f’”“g*’”“g’”を用いた同時ベリファイのみを行なうことも可能である。
(第2回目プログラム)
第2回目プログラムにより、メモリセルにデータ“1”〜“3”の3つが書き込まれるが、データ“1”を書き込むメモリセルには、全く書き込みが行なわれていない。このため、第1の実施形態と同様に、本来のベリファイ電位より低いベリファイ電位“a*’”を設け、このベリファイ電位を超えたセルに対して、ビット線に中間電位を供給する。これにより、書き込みスピードを遅くし、閾値分布を狭くする。また、メモリセルのデータ“2”とデータ“3”のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、メモリセルにデータ“2”を書き込んでいる場合にも、ビット線に中間電位を供給することにより、書き込みスピードを遅くする。
(内部データリード2及びデータキャッシュ設定2)(S369,S370、図50(a))
セルへの書き込みの前に、ワード線の電位を“b*(=a)”、“d*”の順に設定し、内部リード動作を行なう。
この後、データキャッシュを操作することにより、図50(a)に示すように、データキャッシュを設定する。すなわち、メモリセルにデータ“0”を書き込む場合、PDCは“1”、DDCは“1”、SDCは“1”に設定する。メモリセルにデータ“1”を書き込む場合、PDCは“0”、DDCは“0”/“1”、SDCは“1”に設定する。メモリセルにデータ“2”を書き込む場合、PDCは“0”、DDCは“1”、SDCは“0”に設定する。メモリセルにデータ“3”を書き込む場合、PDCは“0”、DDCは“0”、SDCは“0”に設定する。メモリセルにデータ“4”〜“7”を書き込む場合、PDCは全て“1”に設定する。
(プログラム:第2回目)(S371)
ここで、例えばカウンタ(PC)をゼロに初期設定する。
次いで、例えばカウンタ(PC)をカウントアップした後、メモリセルにデータが書き込まれる。先ず、信号BLC1を中間電位(Vdd+Vth)とすると、PDCがデータ“0”の場合、ビット線がVssとなり、データ“1”の場合、ビット線はVddになる。次に、信号BLC1=Vssとした後、信号VREG=Vdd、信号REG=中間電位(例えば1V+Vth)とする。すると、DDCがデータ“1”の場合、ビット線が中間電位(例えば1V)となり、DDCがデータ“0”の場合、ビット線はプリチャージされない。この結果、メモリセルにデータ“3”を書き込んでいる時と、メモリセルにデータ“1”を書き込んでいて本来のベリファイ電位より低いベリファイ電位“a*’”以下の場合、ビット線は、Vssである。メモリセルにデータ“2”を書き込んでいる時と、メモリセルにデータ“1”を書き込んでいて本来のベリファイ電位より低いベリファイ電位“a*’”を越えている場合、ビット線は中間電位(1V)、メモリセルのデータが“0”、“4”〜“7”の場合(書き込みしない場合)、ビット線はVddになる。ここで、選択ワード線をVpgm、非選択ワード線をVpassとすると、ビット線がVddの場合、書き込みが行なわれない。また、ビット線がVssの場合、書き込みが起こり、ビット線が中間電位(1V)の場合、少しだけ書き込まれる。しかし、メモリセルにデータ“2”とデータ“3”を書き込む場合のベリファイは一括して行なうため、出来るだけ同時に書き込まれたほうが書き込み時間が早く終わる。したがって、ビット線に中間電位を供給する。
(ベリファイ“a’、a*’”)(S372−S374、図50(b))
ベリファイ電位“a’、a*’”を用いたベリファイは、先ず、信号VPREをハイレベルとし、信号BLPREをVdd+Vthとし、信号BLCLAMPを所定の電位に設定する。すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位“a*’”を供給し、ビット線を放電する。
次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“a*’”以上の場合である。次に、信号BLC2を中間電位(Vth+0.5V)にするとSDCがLの場合、TDCがLとなる。つまり、TDCがハイレベルになるのは、メモリセルのデータが“1”に書き込まれていてベリファイ電位“a*’”に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“1”を書き込んでいてベリファイ電位“a*’”に達した時と、メモリセルにデータ“0”“2”“4”“6”を書き込んでいる場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
この後、ワード線にベリファイ電位“a’”を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“a’”以上の場合である。次に、信号BLC2を中間電位(Vth+0.5V)にするとSDCがローレベル(“0”)の場合、TDCがハイレベル(“1”)となる。つまり、TDCがハイレベルになるのは、メモリセルのデータが“1”に書き込まれていてベリファイ電位“a’”に達した時である。次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“1”を書き込んでいてベリファイ電位“a’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。(図51(a))。
(ベリファイ電位“b’”)(S375−377、図51(b))
ベリファイ電位“b’”のみを用いたベリファイは、先ず、信号VPREをハイレベルとし、信号BLPREをVdd+Vthとし、信号BLCLAMPを所定の電位に設定する。すると、ビット線がプリチャージされる。
次に、ワード線にベリファイ電位“b’”を供給し、ビット線を放電する。前記ビット線放電中に、DDCのデータをTDCに移し、PDCのデータをDDCに移し、TDCのデータをPDCに移す。さらに、ビット線の放電中に、信号VREGをVssとし、信号REGをVddとし、信号BLCLAMPに所定の電圧を設定すると、DDCがハイレベル(“1”)の場合、つまり書込み非選択の場合、ビット線が強制的にローレベルになる。この後、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルのデータが、ベリファイ電位“b’”以上になったときである。この後、信号BLC1を中間電位(Vth+0.5V)にするとPDCがローレベルの場合、つまりメモリセルにデータ“3”を書き込んでいる場合TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ“2”を書き込んでいて、ベリファイ電位“b’”以上になったときである。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“2”を書き込んでいてベリファイ電位“b’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
(“b’”“c*’”“c’”同時ベリファイ)(S378,S379、図52)
プログラムを数回繰り繰り返すと、メモリセルデータ“2”への書き込みも完了してくる。したがって、ベリファイ“c’”のベリファイも行なう。このベリファイは、“b’”“c*’”“c’”レベルのベリファイを同時に行なう。
先ず、信号VPREをハイレベルとし、信号BLPREをVdd+Vthとし、信号BLCLAMPを所定の電位に設定すると、ビット線がプリチャージされる。次に、ワード線にベリファイ電位“b’”を供給し、ビット線を放電する。前記ビット線放電中に、DDCのデータをTDCに移し、PDCのデータをDDCに移し、TDCのデータをPDCに移す。さらに、ビット線の放電中に、信号VREGをVssとし、信号REGをVddとし、信号BLCLAMPに所定の電圧を設定すると、DDCが“1”の場合、つまり書込み非選択の場合、ビット線が強制的にローレベルになる。この後、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、メモリセルにデータ“2”を書き込んでいて、ベリファイ電位“b’”以上になったときである。この後、信号BLC1を中間電位(Vth+0.5V)にするとPDCがローレベルの場合、つまりメモリセルにデータ“3”書き込んでいる場合TDCがローレベルになる。したがって、TDCがハイレベルになるのは、メモリセルにデータ“2”を書き込んでいて、ベリファイ電位“b’”以上になったときである。
この後、ワード線にベリファイ電位“c*’”を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。すると、TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“c*’”以上の場合である。つまり、メモリセルのデータが“3”に書き込まれていてベリファイ電位“c*’”に達した時である。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“3”を書き込んでいてベリファイ電位“c*’”に達した時と、メモリセルにデータ“0”“2”“4”“6”を書き込んでいる場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
この後、ワード線にベリファイ電位“c’”を供給し、ビット線を放電する。次いで、TDCをVddに充電する。この後、信号BLCLAMPを所定の電位に設定する。TDCがハイレベルになるのは、セルの閾値電圧がベリファイ電位“c’”以上の場合である。つまり、メモリセルのデータが“3”に書き込まれていてベリファイ電位“c’”に達した時である。
次に、信号VREGをハイレベルとし、信号REGをVsgとすると、DDCのデータがハイレベルの場合、強制的にTDCがハイレベルとなる。したがって、TDCがVddになるのは、メモリセルにデータ“3”を書き込んでいてベリファイ電位“c’”に達した時と、書き込み非選択の場合である。信号DTGをVsgとし、PDCのデータをDDCにコピーした後、信号BLC1をVsgとしてTDCの電位をPDCに取りこむ。
メモリセルにデータ“3”を書き込んでいてベリファイ電位“c*’”に達し、ベリファイ電位“g’”のベリファイで書き込み完了にならなかった場合のデータ記憶回路データは、SDC=“0”、DDC=“1”、PDC=“0”となり、メモリセルにデータ“2”を書き込んでいる場合のデータ記憶回路のデータと同様になる。つまり、メモリセルにデータ“3”を書き込んでいてベリファイ電位“c*’”に達した場合、メモリセルにデータ“2”を書き込んでいる状態となる。メモリセルにデータ“2”を書き込んでいる場合、ビット線に中間電位を供給していた。このため、次の書き込みでは少しだけ書き込みが行われる。また、このメモリセルは、次の“b’”“c*’”“c’”同時ベリファイにおいて、“b’”のベリファイで、セルの閾値電圧が“c*’”以上に存在するため必ず、ベリファイはパスとなり、2回目以降の書き込みは行なわれなくなる。
このようにして、全てのPDCのデータが“1”になるまで、プログラムとベリファイ動作を繰り返す(S380,S381)。しかし、書き込み動作において、DDCのデータが“1”の場合、つまり、メモリセルにデータ“1”を書き込んでいる場合と、メモリセルにデータ“3”を書き込んでいて、ベリファイ電位“a*’”を超えた場合と、メモリセルにデータ“2”を書き込んでいる場合と、メモリセルにデータ“3”を書き込んでいて、ベリファイ電位“c*’”を超えた場合、ビット線を中間電位にして書き込み動作をする。また、プログラムとベリファイ動作を繰り返す毎に、プログラム電圧Vpgmを少しずつ上昇させる。第2回目プログラムにより、メモリセルにデータ“1”〜“3”の3つが書き込まれる。
PDCがローレベルの場合、再び書き込み動作を行ない全てのデータ記憶回路のPDCのデータがハイレベルになるまでこのプログラム動作とベリファイ動作が繰り返される。
上記説明では、1回のプログラムの後、2つのベリファイを行なっていた。しかし、プログラムの初期のループでは、閾値電圧が上がらないため、初めは、ベリファイ電位“a’、a*’”を用いたベリファイのみ行ない、次に、ベリファイ電位“a’、a*’”を用いたベリファイとベリファイ電位“b’”を行ない、最後に、ベリファイ電位“a’、a*’”を用いたベリファイとベリファイ電位”b’”“c’”同時ベリファイを行なうことも可能である。
また、プログラムの終了近くのループにおいて、メモリセルに対するデータ“1”への書き込みは終了しているため、これらのベリファイ動作は省略することもできる。メモリセルに対するデータ“1”のベリファイが不用になると、SDCでデータを保持する必要がなくなる。このため、次の書き込みのためのデータを外部より読み込み、SDCに記憶しておくことも可能である。このような構成とした場合、さらなる高速動作が可能である。
(リード)
リード動作は、第2、第3の実施形態とほぼ同じであるため、説明は省略する。
(イレーズ)
消去動作は、第1、第4の実施形態と同様であるため、説明は省略する。
上記第6の実施形態によれば、第3ページプログラムにおいて、メモリセルにデータ“3”“5”“7”を書き込む際、本来のベリファイ電位より低い閾値電圧でベリファイ動作を行なう。そして、この本来より低いベリファイ電位を超えた場合で、本来のベリファイ電位で書き込み完了とならなかった場合、次の書き込み時は、ビット線に中間電位を供給して書き込みスピードを遅くし、1回のみ書き込みを行ない書き込み完了とする。本来のベリファイ電位を超えているセルは、その時点で書き込みが終了となる。また、メモリセルにデータ“1”を書き込む場合、本来のベリファイ電位より低いベリファイ電圧でベリファイ動作を行ない、この本来より低いベリファイ電位を超えていた場合、次の書き込み以降、ビット線に中間電位を供給して書き込みスピードを遅くし、本来のベリファイ電位を超えるまで書き込んでいる。このため、8値(3ビット)のデータを確実且つ高速に書き込み、読み出すことができる。
しかも、第6の実施形態によれば、“1”“3”“5”“7”の奇数データを書き込むメモリセルの閾値電圧の分布を狭めることが可能である。
(第7の実施形態)
上記第6の実施形態は、第3ページの書き込み時、第1回目の書き込みで、メモリセルにデータ“4”〜“7”を書き込み、第2回目の書き込みでメモリセルにデータ“1”〜“3”を書き込んだ。
これに対して、第7の実施形態は、第3ページの書き込みにおいて、メモリセルにデータ“1”〜“7”を同時に書き込むことを可能とする。このため、データ記憶回路10の構成を若干変更している。
図53は、第7の実施形態に適用されるデータ記憶回路を示している。図53において、図6と同一部分には同一符号を付している。図53に示すように、データ記憶回路10には、SDCのデータを一時的に記憶し、SDC、PDC、DDC、TDCと共に、ベリファイ用のデータを記憶するSDDC(セコンダリダイナミックデータキャッシュ)が追加されている。このSDDCの構成は、DDCとほぼ同様であり、トランジスタ63a、63bにより構成されている。トランジスタ63aの電流通路の一端はノードN2bに接続されている。このトランジスタ63aのゲートには信号DTG2が供給され、電流通路の他端はトランジスタ63bのゲートに接続されている。このトランジスタ63bの電流通路の一端部には信号VREG2が供給され、電流通路の他端はトランジスタ63cの電流通路の一端部に接続されている。このトランジスタ63cの電流通路の他端はノードN3に接続され、ゲートには信号REG2が供給されている。
上記構成において、図54、図55、図56(a)(b)を参照して、上記データ記憶回路10を用いた第3ページの書き込み動作について説明する。
先ず、データ記憶回路10がリセットされた後、外部より書き込みデータがデータ記憶回路10のSDCにロードされる(S401,S402)。この後、閾値電圧“a”“d*”“f*”を用いて内部リードが行われ、メモリセルからデータが読み出される(S403)。
図56(a)は、第3ページのデータロード及び内部リード後のデータキャッシュの設定を示している。ここで、SDC、DDC、PDCのデータは、図47(a)と同様である。また、SDDCのデータは、メモリセルにデータ“0”“1”が書き込まれている場合、“0”が設定され、メモリセルにデータ“2”〜“7”が書き込まれている場合、“1”が設定される。
次いで、各データキャッシュが操作され、図56(b)に示すように、各データキャッシュのデータが設定される(S404)。ここで、SDDCのデータは、データ“5”“4”“1”“0”のベリファイに使用され、SDCのデータは“3”“2”“1”“0”のベリファイに使用され、DDCのデータは、“7”“5”“3”“1”のベリファイに使用される。第7の実施形態も第5の実施形態と同様に、書き込み時は、PDCが“0”である場合、ビット線の電位をVssに設定し、PDCが“1”である場合、ビット線の電位をVddに設定する。この後、DDCが“1”の場合、ビット線の電位を中間電位(例えばVth+0.5V)として書き込み動作が行なわれる(S405)。
ベリファイ動作は、閾値電圧の小さい側から順次実行する。すなわち、先ず、ベリファイ電位“a*’”“a’”を用いてデータ“1”のベリファイが行われる(S406−S408)。この後、ベリファイ電位“b’”を用いて、データ“2”のベリファイが行われる(S409−S412)。次に、ベリファイ電位“b’”“c*’”“c’”を用いて、データ“2”“3”のベリファイが行われる(S413−S415)。さらに、ベリファイ電位“d’”を用いて、データ“4”のベリファイが行われる(S416−S419)。この後、ベリファイ電位“d’”“e*’”“e’”を用いて、データ“4”“5”のベリファイが行われる(S420−S422)。次に、ベリファイ電位“f’”を用いて、データ“6”のベリファイが行われる(S423−S426)。次いで、ベリファイ電位“f’”“g*’”“g’”を用いて、データ“6”“7”のベリファイが行われる(S427−S429)。この動作が、各データのベリファイが完了するまで繰り返される(S430、S431)。
上記ベリファイ動作において、メモリセルのデータ“3”、“5”、“7”のベリファイにおいて、本来より低い閾値電圧に達した場合で、本来の閾値電圧より低い場合、データキャッシュ内のデータをそれぞれメモリセルのデータ“2”、“4”、“6”と同じに設定する。この状態において、次のプログラム時にビット線に中間電位を供給して書き込み動作を行い。次のベリファイで書き込み完了とする。また、メモリセルに対するデータ“1”の書き込みは、本来より低い閾値電圧に達した場合、以降のプログラムにおいて、ビット線に中間電位を供給して書き込み、本来の閾値電圧まで書き込み動作を行なう。
上記第7の実施形態によれば、データ記憶回路10にメモリセルのデータ“5”“4”“1”“0”のベリファイに使用するデータを保持するSDDCを設けている。このため、第3ページのデータを一度に書き込み、ベリファイすることが可能である。このため、書き込み速度を一層高速化することが可能である。
尚、上記第7の実施形態において、SDDCは、SDCとTDCの間に配置した。しかし、これに限らず、例えばPDCとTDCの間で、DDCと並列に配置することも可能である。
その他、本発明の要旨を変えない範囲において種々変形実施可能なことは勿論である。