以下、実施の形態について、図面を参照して説明する。
以下、本発明の実施の形態について、図面を参照して説明する。
図1は、例えば8値、3ビットのデータを記憶するNAND型フラッシュメモリの概略構成を示している。
メモリセルアレイ1は、複数のビット線と複数のワード線と共通ソース線を含み、例えばEEPROMセルからなる電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ1には、ビット線を制御するためのビット制御回路2とワード線制御回路6が接続されている。
ビット線制御回路2は、ビット線を介してメモリセルアレイ1中のメモリセルのデータを読み出したり、ビット線を介してメモリセルアレイ1中のメモリセルの状態を検出したり、ビット線を介してメモリセルアレイ1中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行なう。ビット線制御回路2には、カラムデコーダ3、データ入出力バッファ4が接続されている。ビット線制御回路2内のデータ記憶回路はカラムデコーダ3によって選択される。データ記憶回路に読み出されたメモリセルのデータは、前記データ入出力バッファ4を介してデータ入出力端子5から外部へ出力される。データ入出力端子5は、メモリチップ外部のホスト11に接続される。このホスト11は例えばマイクロコンピュータにより構成され、前記データ入出力端子5から出力されたデータを受ける。さらに、ホスト11は、NAND型フラッシュメモリの動作を制御する各種コマンドCMD、アドレスADD、及びデータDTを出力する。ホスト11からデータ入出力端子5に入力された書き込みデータは、データ入出力バッファ4を介して、カラムデコーダ3によって選択されたデータ記憶回路に供給され、コマンド及びアドレスは制御信号及び制御電圧発生回路7に供給される。
ワード線制御回路6は、メモリセルアレイ1に接続されている。このワード線制御回路6は、メモリセルアレイ1中のワード線を選択し、選択されたワード線に読み出し、書き込みあるいは消去に必要な電圧を印加する。
メモリセルアレイ1、ビット線制御回路2、カラムデコーダ3、データ入出力バッファ4、及びワード線制御回路6は、制御信号及び制御電圧発生回路7に接続され、この制御信号及び制御電圧発生回路7によって制御される。制御信号及び制御電圧発生回路7は、制御信号入力端子8に接続され、ホスト11から制御信号入力端子8を介して入力される制御信号ALE(アドレス・ラッチ・イネーブル)、CLE(コマンド・ラッチ・イネーブル)、WE(ライト・イネーブル)、RE(リード・イネーブル)によって制御される。
前記ビット線制御回路2、カラムデコーダ3、ワード線制御回路6、制御信号及び制御電圧発生回路7は書き込み回路、及び読み出し回路を構成している。
また、制御信号及び制御電圧発生回路7は、ダイナミックデータキャッシュ(DDC)制御回路7−1を有している。このDDC制御回路7−1は、後述するデータ記憶回路に含まれるダイナミックラッチ回路としての複数のDRAMのリフレッシュ動作を制御する制御信号を発生する。
図2は、図1に示すメモリセルアレイ1及びビット線制御回路2の構成の一例を示している。図2はロウ方向に並んだ全てのセルを一括書き込む場合を示している。メモリセルアレイ1には複数のNANDセルが配置されている。1つのNANDセルは、直列接続された例えば32個のEEPROMからなるメモリセルMCと、選択ゲートS1、S2とにより構成されている。選択ゲートS2はビット線BL0eに接続され、選択ゲートS1はソース線SRCに接続されている。各ロウに配置されたメモリセルMCの制御ゲートはワード線WL0〜WL29、WL30、WL31に共通接続されている。また、選択ゲートS2はセレクト線SGDに共通接続され、選択ゲートS1はセレクト線SGSに共通接続されている。
ビット線制御回路2は複数のデータ記憶回路10を有している。各データ記憶回路10には、ビット線BL0、BL1、…BLi−1、BLi、…BL8k−2、BL8k−1が接続されている。
メモリセルアレイ1は、破線で示すように、複数のブロックを含んでいる。各ブロックは、複数のNANDセルにより構成され、例えばこのブロック単位でデータが消去される。
また、1つのワード線に接続された複数のメモリセル(破線で囲まれた範囲のメモリセル)は、1セクタを構成する。このセクタ毎にデータが書き込まれ、読み出される。すなわち、ロウ方向に配置された全メモリセルに対して書き込み又は読み出し動作が同時に実行される。
リード動作、プログラムベリファイ動作及びプログラム動作時において、データ記憶回路10に接続されている全ビット線が選択される。さらに、外部アドレスに応じて、1本のワード線が選択され、破線で示す、3ページが選択される。この3ページの切り替えはアドレスによって行われる。
図3(a)(b)は、メモリセル及び選択トランジスタの断面図を示している。
図3(a)(b)はメモリセル及び選択トランジスタの断面図を示している。図3(a)はメモリセルを示している。基板51(後述するP型ウェル領域55)にはメモリセルのソース、ドレインとしてのn型拡散層42が形成されている。P型ウェル領域55の上にはゲート絶縁膜43を介して浮遊ゲート(FG)44が形成され、この浮遊ゲート44の上には絶縁膜45を介して制御ゲート(CG)46が形成されている。図3(b)は選択ゲートを示している。P型ウェル領域55にはソース、ドレインとしてのn型拡散層47が形成されている。P型ウェル領域55の上にはゲート絶縁膜48を介して制御ゲート49が形成されている。
図4は、第1の実施形態に対応する半導体記憶装置の断面図を示している。例えばP型半導体基板51内には、N型ウェル領域52、53、54、P型ウェル領域56が形成されている。N型ウェル領域52内にはP型ウェル領域55が形成され、このP型ウェル領域55内にメモリセルアレイ1を構成する低電圧NチャネルトランジスタLVNTrが形成されている。さらに、前記N型ウェル領域53、P型ウェル領域56内に、データ記憶回路10を構成する低電圧PチャネルトランジスタLVPTr、低電圧NチャネルトランジスタLVNTrが形成されている。前記基板51内には、ビット線とデータ記憶回路10を接続する高電圧NチャネルトランジスタHVNTrが形成されている。また、前記N型ウェル領域54内には例えばワード線駆動回路等を構成する高電圧PチャネルトランジスタHVPTrが形成されている。図4に示すように、高電圧トランジスタHVNTr、HVPTrは、低電圧トランジスタLVNTr、LVPTrに比べて例えば厚いゲート絶縁膜を有している。尚、図1中2〜8の周辺の回路もLVNTr、LVPTr及びHVNTr、HVPTrにより構成されている。
図5は、メモリセルの消去、プログラム、リード時において、図4に示す各部に供給される電圧の例を示している。
(第1の実施形態)
図6に示すように、第1の実施形態において、例えばセルMC11のデータを読み出すとき、先ずセルMC11の後に書き込まれたセルMC12のデータの閾値電圧(閾値レベルとも言う)を調べ、この閾値レベルに応じたリードレベルでセルMC11から読み出した値をセルMC11の読み出しデータとする。
図7(a)に示すように、先ず、セルMC11にデータを書き込む。その後、図7(b)に示すように、隣接セルMC12を書き込む前、つまり、隣接セルが消去レベルにある場合、読み出しレベルAR、BR、CRで読み出したデータがセルMC11の読み出しデータである。
また、図7(c)に示すように、例えば隣接セルが消去レベルEからAのレベルに書き込まれた場合、浮遊ゲート間容量によって閾値レベル変動している筈である。このため、読み出しレベルAR、BR、CRにそれぞれ、シフト値DA1、DB1、DC1を加えたレベルAR+DA1、BR+DB1、CR+DC1で読み出した値を読み出しデータとする。
また、図7(d)に示すように、例えば隣接セルが消去レベルEからB−レベルに書き込まれた場合、読み出しレベルAR、BR、CRにそれぞれ、シフト値DA2、DB2、DC2を加えたレベルAR+DA2、BR+DB2、CR+DC2で読み出した値を読み出しデータとする。
さらに、図7(e)に示すように、例えば隣接セルが消去レベルEからC−レベルに書き込まれた場合、読み出しレベルAR、BR、CRにそれぞれ、シフト値DA3、DB3、DC3を加えたレベルAR+DA3、BR+DB3、CR+DC3で読み出した値を読み出しデータとする。
DA1とDB1とDC1はほぼ同じ値となるため、1つの値D1のみをパラメータとして保持する。同様に、DA2とDB2とDC2はD2、DA3とDB3とDC3はD3として、1つの値をパラメータとして保持する。また、隣のセルの消去レベルが−1V、A−レベル=0.5V、B−レベル=1.7V、C−レベル=3Vとすると、D1、D2、D3は、隣のセルの変化量にほぼ比例する。このため、D1=0.5−(−1)=1.5、D2=1.7−(−1)=2.7、D3=3−(−1)=4である。したがって、D1:D2:D3=1:1.8:2.7となる。
図8は、例えば隣接セルMC12が消去レベルEからC−レベルに変化した場合におけるセルMC11の閾値レベルの変化を実測した値を示している。図8に示すように、各サンプルにおいて、ワード線WLの位置によって閾値レベルがばらついていることが分かる。
図9は、第1の実施形態の構成を示すものであり、読み出し電圧補正回路7−1の一例を示している。読み出し電圧補正回路7−1は、例えば図1に示す制御信号及び制御電圧生成回路7に設けられている。読み出し電圧補正回路7−1は、シフト値記憶回路71,72,73、読み出しレベル記憶回路74、選択回路75を有している。例えばチップのダイソートテスト時に、チップ毎及びワード線毎に、図7(c)(d)(e)に示す各シフト値DA1、DB1、DC1と、DA2、DB2、DC2と、DA3、DB3、DC3をトリミングする。このトリミングされたシフト値をシフト値記憶回路71,72,73にそれぞれ記憶させる。このシフト値記憶回路71,72,73に記憶されたシフト値は、それぞれの読み出しに応じて、選択回路75により読み出される。選択回路75により選択されたシフト値は、加算器76により、リードレベル発生回路74から読み出された読み出しレベルに加算される。制御信号及び制御電圧発生回路7は、加算器56から供給される読み出しレベルに基づき読み出し電圧を発生する。
尚、ワード線WL1〜WL29は1つのパラメータとしている。上記トリミングは、例えば図6に示すセルMC11に、A又はB又はC−レベルに書き込みを行った後、隣接セルMC12の閾値レベルを消去レベルEからC−レベルに書き込む。この後、A又はB又はCの読み出しレベルを少しずつ変化させ、セルがオンした時の値をシフト値とする。本NAND型フラッシュメモリの場合、ワード線に接続されている全セルを一度に読み出すため、一度に読み出された複数のセルの平均を求めることも可能である。
また、ワード線に接続されている半数のセルずつ読み出すタイプの本NAND型フラッシュメモリの場合、半数ずつ読み出された閾値レベルの平均値を求めることも可能である。
さらに、D1、D2、D3のそれぞれをトリミングせず、これらのうちの1つをトリミングし、残りは、上記D1:D2:D3=1:1.8:2.7の関係から求めることも可能である。このようにして求められたシフト値がシフト値記憶回路71,72,73にそれぞれ記憶される。
尚、シフト値記憶回路は、不揮発性記憶素子で構成してもよい。又はメモリセルアレイ内のメモリセルにデータを記憶し、電源立ち上げ時に、このメモリセルから読み出して、シフト記憶回路内のレジスタに記憶するようにしてもよい。
図10は、例えばワード線WLnに接続されたメモリセルのリード動作を示すフローチャートである。ワード線WLnが選択されるとき、先ず、ワード線WLn+1に接続されたメモリセルを読み出しレベルAR、BR、CRで順次リードし、閾値レベルがどのレベルにあるかを判断する(S11)。この後、ワード線WLnに接続されたメモリセルを読み出しレベルAR、BR、CRで順次リードし、閾値レベルがどのレベルにあるかを判断する(S12)。この後、ワード線WLnに接続されたメモリセルを読み出しレベルAR+DA1、BR+DB1、CR+DC1で順次リードし、閾値レベルがどのレベルにあるかを判断する(S13)。次ぎに、ワード線WLnに接続されたメモリセルを読み出しレベルAR+DA2、BR+DB2、CR+DC2で順次リードし、閾値レベルがどのレベルにあるかを判断する(S14)。さらに、ワード線WLnに接続されたメモリセルを読み出しレベルAR+DA3、BR+DB3、CR+DC3で順次リードし、閾値レベルがどのレベルにあるかを判断する(S15)。
このようにして、ワード線WLn+1に接続されたメモリセルの閾値レベルを読み出し、この閾値レベルに応じて、補正値を加えてワード線WLnに接続されたメモリセルの閾値レベルを読み出し、この読み出し結果の中から適切なレベルで読み出したデータを選択し、読み出し結果としている。このため、隣接セルの書き込みによる閾値レベルの変動を抑制して正確にメモリセルのデータを読み出すことができる。
上記第1の実施形態によれば、チップ毎且つワード線毎にトリミングし、シフト値を求め、このシフト値を用いてリードレベルを補正してメモリセルのデータを読み出している。このため、チップ毎且つワード線毎に隣接するメモリセルの浮遊ゲート間(FG−FG)容量によって、隣接セルの閾値レベルが変化する大きさが異なる場合においても、正確にメモリセルの閾値レベルを読み出すことができる。
尚、第1の実施形態において、シフト値は、チップ毎、且つワード線毎にトリミングを行いそれぞれの値を補正値とした。しかし、これに限らず、チップ毎にトリミングして1つのシフト値を求め、このシフト値に応じて補正することも可能である。
また、ワード線毎のシフト値のばらつきが小さい場合、ワード線毎にトリミングをする必要はない。
さらに、チップ毎のシフト値のばらつきが小さい場合、チップ毎にはトリミングをせず、ワード線毎に異なる固定のシフト値をチップ内に持たせることも可能である。
(第2の実施形態)
図11は、第2の実施形態を示している。上記第1の実施形態は、チップ毎、及びワード線毎にシフト値D1、D2、D3をトリミングし、これらシフト値D1、D2、D3をパラメータとして記憶回路71、72、73に記憶した。これに対して、第2の実施形態は、メモリセルアレイ1にモニタセルを設け、このモニタセルにモニタレベルを設定し、このモニタレベルに応じて、各メモリセルの読み出しレベルを決定する。
すなわち、図11に示すように、メモリセルアレイ1は、例えば複数のモニタセルMMC0を有している。このモニタセルMMC0は、例えばビット線BL−M0に接続されている。ビット線BL−M0は、データ記憶回路10にそれぞれ接続され、データ記憶回路10のモニタセル用のアドレスYA−M0が供給される。モニタセルMMC0は、これらアドレスYA−M0及びロウアドレスにより選択される。すなわち、モニタセルMMC0は、ワード線を共通とするメモリセルと同時に選択される。モニタセルMMC0には、上記A又はB又はC−レベルのうち、例えばC−レベルが常に書き込まれる。1つのワード線に接続されるモニタセルの数は1つに限定されるものではなく、図11に破線で示すMMC1、MMC2のように、例えば1つのワード線にさらに2つ以上のモニタセルを追加し、3個以上のモニタセルから読み出されたレベルの多数決を求めることも可能である。
上記構成において、図6、図7、図12を参照して動作について説明する。尚、図6は、1つのワード線に1つのモニタセルが接続されている場合を示している。先ず、例えば図6に示すセルMC11にデータを書き込むとき、セルMC11と同時に選択されるモニタセルMMC11に例えばC−レベルを書き込む(S21)。次に、セルMC11を書き込んだ後、セルMC12を書き込む前に、セルMC11を読み出す場合、セルMC11と同時に書き込まれるモニタセルMMC11の閾値レベルを調べる(S22)。このとき、セルMC12と同時に選択されるモニタセルMMC12は書き込みが行なわれていない。このため、モニタセルMMC11は、FG−FG間のカップリングの影響を受けていないため、このモニタセルMMC11の閾値レベルは変動していない。したがって、セルMC11は、読み出しレベルAR、BR、CRで読み出される。また、セルMC12を書き込むとき、セルMC12と同時に選択されるモニタセルMMC12にはC−レベルが書き込まれる(S23)。この後、セルMC11を読み出す場合、先ず、セルMC11と同時に書き込まれるモニタセルMMC11の閾値レベルが検出される。セルMC12と同時に選択されるモニタセルMMC12が書き込まれているため、FG−FG間のカップリングの影響により、モニタセルMMC11の閾値レベルは変動している。したがって、モニタセルMMC11の閾値レベルの変動を検出ことによりシフト値が分かる。
すなわち、図7(a)(f)に示すように、メモリセルMC11と同時に選択されるモニタセルMMC11は、メモリセルMC12及びモニタセルMMC12に書き込みが行なわれていない場合、図7(b)に示すC−レベルの閾値分布となっている。このため、CR+xのレベルで読み出すと、モニタセルMMC11がオンするため、メモリセルMC12及びニタセルMMC12に書き込みが行なわれていないことが分かり、メモリセルMC11の読み出しもデータは、AR、BR、CRで読み出したデータとなる。
一方、メモリセルMC11と同時に選択されるモニタセルMMC11は、メモリセルMC12及びモニタセルMMC12に書き込みが行われた場合、図7(g)に示すC−レベルの閾値分布となっている。このため、CR+xのレベルで読み出すと、モニタセルMMC11がオフしてしまう。このため、“α”だけ読み出しレベルを高めたレベル“CR+x+α”で読み出すと、モニタセルMMC11がオンするため、メモリセルMC12及びニタセルMMC12に書き込みが行われたことが分かる。したがって、メモリセルMC11の読み出しは、AR、BR、CRに補正値“α”(DA3,DB3、DC3)を加えたレベルで読み出した結果からMC12のデータに応じて適切なデータを選び出す。したがって、“α”を求めることにより、チップ毎及びワード線毎に異なるシフト値を検出することができる。
図13は、第2の実施形態の読み出し動作を示している。メモリセルMC11のシフト値を検出するため、先ず、モニタセルMMC11の閾値レベルを読み出しレベル“CR+x”で読み出され(S24)。モニタセルMMC11がオンしたかどうかが判別される(S25)。この結果、モニタセルMMC11がオンしない場合、すなわち、読み出しレベルがモニタセルMMC11の閾値レベルより低い場合、読み出しレベル“x”が例えば“α”だけ増加され(S26)、再度、読み出される。このようにして、モニタセルMMC11の読み出し動作が行なわれ、モニタセルMMC11がオンした場合、図7(e)に示すシフト値DC3を検出することができる。すなわち、C−レベルに書き込まれたモニタセルMMC12と隣接するモニタセルMMC11もC−レベルに書き込まれるため、シフト値DA3、DB3、DC3=D3の値がわかる。ここでは、DA3=DB3=DC3としている。D2、D1の値は、上記関係式D1:D2:D3=1:1.8:2.7より求められる(S27)。
次に、第1の実施形態と同様の動作が行なわれる。つまり、セルMC12(ワード線WLn+1に接続されたセル)のレベルが消去レベルEからレベルE(閾値変化なし)、A−レベル、B−レベル、C−レベルに変化したかが判断する(S11)。この後、セルMC11(ワード線WLnに接続されたメモリセル)を読み出しレベルAR、BR、CRで順次リードし、閾値レベルがどのレベルにあるかを判断する(S12)。この後、ワード線WLnに接続されたメモリセル(MC11)を読み出しレベルAR+DA1、BR+DB1、CR+DC1で順次リードし、閾値レベルがどのレベルにあるかを判断する(S13)。次ぎに、ワード線WLnに接続されたメモリセル(MC11)を読み出しレベルAR+DA2、BR+DB2、CR+DC2で順次リードし、閾値レベルがどのレベルにあるかを判断する(S14)。さらに、ワード線WLnに接続されたメモリセル(MC11)を読み出しレベルAR+DA3、BR+DB3、CR+DC3で順次リードし、閾値レベルがどのレベルにあるかを判断する(S15)。このようにして、ワード線WLn+1に接続されたメモリセルの閾値レベルを読み出し、この閾値レベルに応じて、補正値を加え、ワード線WLnに接続されたメモリセルの閾値レベルを読み出す。この読み出し結果の中から適切なレベルで読み出したデータを選択し、読み出し結果とする。このようにすることで、隣接セルの書き込みによる閾値レベルの変動を抑制して正確にメモリセルのデータを読み出すことができる。
上記第2の実施形態によれば、メモリセルアレイ1にモニタセルMMCを設け、このモニタセルMMCに、閾値レベルA、B、Cのうちの1つを常に書き込み、あるメモリセルから閾値レベルを読み出す場合、このメモリセルと同時に選択されるモニタセルMMCの閾値レベルの変化量からシフト値D3を検出し、このシフト値から関連する他のシフト値D1、D2を算出し、これらシフト値D1、D2、D3を読み出しレベルに付加して、読み出すべきメモリセルからその閾値レベルを読み出している。このため、隣接セル間のカップリングの影響を抑制するため、あるセルにデータを書き込む場合、あるセルを本来の閾値レベルより低めのレベルに書き込み、この後、このセルの周囲に隣接するセルを書き込んだ後、再び、元のセルを本来の閾値レベルまでデータを書き込むという、従来必要であった書き込み動作を行う必要がない。したがって、書き込み速度を高速化することが可能である。
また、ワード線WLに接続されたメモリセルのデータを読み出す場合、先ず、チップ毎又はワード線毎にばらついている、隣接セル間のカップリングの影響を、モニタセルを用いて補正値を求める。次に、ワード線WLの後に選択されるワード線WLn+1に接続されたメモリセルの閾値レベルを読み出す。この読み出した閾値レベルに応じて、前に求めた補正値を加えてワード線WLnに接続されたメモリセルの閾値レベルを読み出す。この読み出し結果の中から適切なレベルで読み出したデータを選択し、読み出し結果とする。このため、第1の実施形態のように、予め各ワード線毎のシフト値をトリミングする必要がない。このため、テスト工程を簡単化することができる。また、モニタセルを複数個用意し、多数決を取ることも可能である。
上記第2の実施形態は、ロウ方向に配置された全てのセルを一括して書き込む場合について説明したが、これに限定されるものではなく、ロウ方向に並んだセルの半数を込む場合にも、同様に実施可能である。
また、第2の実施形態は、4値(2ビット)、8値(3ビット)、16値(4ビット)を記憶する場合も同様に実施することが可能である。
(第3の実施形態)
図14乃至図17は、第3の実施形態を示している。
上述したように、NAND型フラッシュメモリは、ロウ方向に並んだセル全て、又は半数のセルを例えば2KB(B:バイト)のデータとして一括して書き込んだり、読み出したりする。また、誤書き込み又は隣接セルの書き込みの影響により、既に書き込まれたセルの閾値レベルが変化した場合、読み出されたデータの精度が低下することがある。そこで、データの精度を向上させるため、例えば2KBのデータに対して64BのECC(Error Correction Code)コードを付加し、2KB+64Bのデータとして、データを書き込んだり、読み出したりされている。
このため、図1に示すように、例えばホスト11にECC回路11−1が設けられ、このECC回路11−1により、メモリセルから誤ったデータが読み出された場合、誤りを訂正し、正しいデータを出力するように構成されている。このECC回路11−1は、ホスト11に限らず、例えばNAND型フラッシュメモリの内部に設けられていてもよい。
ECC符号としては、例えば4〜8ビットの訂正に適用されるBCH符号、又は4〜8シンボルの訂正に適用されるリードソロモン(Reed-Solomon)符号が用いられている。さらに、100ビット以上を訂正するBCH符号、あるいは100シンボル以上を訂正するリードソロモン符号なども用いることも可能である。しかし、これらの符号を用いて、100ビット又は100シンボル以上の訂正を実現すると、データに付加されるECCコードが増大するという問題がある。このため、近時、ECCコードの増大を抑制して強力な訂正能力を有するLDPC(Low Density Parity Check)符号が用いられることがある。
LDPC符号の符号化は、他の符号と同様に、例えば16KBのデータに対してECCコードを付加し、メモリセルに書き込む。すなわち、ホスト11のECC回路11−1は、図示せぬ符号化器と複合化器を含み、符号化器は、例えば16KBのデータに対して例えば検査ビットとしてのECCコードを付加する。このECCコードが付加されたデータは、メモリセルアレイ1の各ページに書き込まれる。このため、1ページのデータは、書き込みデータと検査ビットにより構成されている。また、復号化器は、メモリセルから読み出した検査ビットのデータを確率値とし、この確率値に基づき、メモリセルから読み出されたデータを補正する。すなわち、復号化器は、確率値に基づき、メモリセルから読み出された誤ったデータを訂正し、正しいデータを出力する。このように、LDPC符号の場合、読み出したデータが“1”である場合、読み出したデータが“1”である確率値も必要とする。
図14乃至図17は、16値(4ビット)を記憶するNAND型フラッシュメモリのメモリセルに書き込まれるデータの割付を示しており、図14から図17の順に割付けられている。4ビットは、アドレスにより選択されるロワーページ(Lower Page)、アッパーページ(Upper Page)、ハイアーページ(Higher Page)、トップページ(Top Page)により区別される。図14乃至図17において、破線0〜64は読み出しレベルを示している。
通常の読み出し動作において、閾値分布の境界の読み出しレベルで読み出される。例えば図14に示すロワーページは、図16に示す読み出しレベル29によりメモリセルの閾値レベルを読み出し、メモリセルの閾値レベルがH−レベル(H−Level)以上か未満かを判別する。H−レベル以上の場合、メモリセルはオフするため“H”(データ“0”)となり、H−レベル未満の場合、セルはオンするため“L”(データ“1”)となる。
図14に示すアッパーページは、図15に示す読み出しレベル13、及び図17に示す読み出しレベル45の2つの読み出しレベルによりメモリセルの閾値レベルが読み出され、メモリセルの閾値レベルがD−レベル以上か未満か、L−レベル以上か未満かの2回のリード動作で区別される。すなわち、読み出された閾値レベルがD−レベル以上、L−レベル未満の場合、“H”(データ“0”)となり、D−レベル未満又は、L−レベル以上の場合、“L”(データ“1”)となる。
図14に示すハイアーページは、図14に示す読み出しレベル5,図15に示す読み出しレベル21,図16に示す読み出しレベル37,図17に示す読み出しレベル53の4つの読み出しレベルによりメモリセルの閾値レベルが読み出され、メモリセルの閾値レベルがB−レベル以上か未満か、F−レベル以上か未満か、J−レベル以上か未満か、N−レベル以上か未満かの4回のリード動作で区別される。すなわち、B−レベル以上F−レベル未満、又はJ−レベル以上N−レベル未満の場合、“H”(データ“0”)となり、B−レベル未満、又はF−レベル以上J−レベル未満の場合、又はN−レベル以上の場合、“L”(データ“1”)となる。
図14に示すトップページは、図14に示す読み出しレベル1、9、図15に示す読み出しレベル17、25、図16に示す読み出しレベル33、41、図17に示す読み出しレベル49,57の8つの読み出しレベルによりメモリセルの閾値レベルが読み出され、メモリセルの閾値レベルがA−レベル以上か未満か、C−レベル以上か未満か、E−レベル以上か未満か、G−レベル以上か未満か、I−レベル以上か未満か、K−レベル以上か未満か、M−レベル以上か未満か、O−レベル以上か未満かの8回のリード動作で区別される。すなわち、A−レベル以上C−レベル未満、E−レベル以上G−レベル未満、I−レベル以上K−レベル未満、N−レベル以上、O−レベル未満の場合、“H”(データ“0”)となり、A−レベル未満、C−レベル以上E−レベル未満、G−レベル以上I−レベル未満、K−レベル以上N−レベル未満O−レベル以上の場合、“L”(データ“1”)となる。
一方、LDPC符号の場合、上記のようにして読み出された各データに対して確率値が必要である。このため、通常では、15−レベルにより16値のデータを区別しているが、例えば各レベルと、各レベルの下の1つのレベルと、上の2つのレベルの合計4回を読み出す。具体的には、ロワーページの読み出しの場合、図15、図16に矢印を付して示すように、読み出しレベル28、29、30、31の4つの読み出しレベルにより閾値レベルが読み出され、4つの読み出しレベルに応じて読み出された“H”の数がそれぞれ計数される。この計数された回数から確率値が求められる。すなわち、図14乃至図17において、
4回“H”(データ“0”)の場合、
“H”(データ“0”)の確率は、100%(4/4)、
3回“H”(データ“0”)の場合、
“H”(データ“0”)の確率は、75%(3/4)、
2回“H”(データ“0”)の場合、
“H”(データ“0”)の確率は、50%(2/4)、
1回“H”(データ“0”)の場合、
“H”(データ“0”)の確率は、25%(1/4)
であるとする。アッパーページ、ハイアーページ、トップページも同様に、図14乃至図17において、矢印で示す4つの読み出しレベルを用いて閾値レベルが読み出され、“H”の数がそれぞれ計数される。この計数された回数から確率値が求められる。読み出された1ページのデータのそれぞれのデータが確率値となり、ECC回路11−1は、この求められた1ページ分の確率値に基づき、LDPC符号を処理し、誤ったデータを訂正する。
図18は、上記読み出しシーケンスを示している。ロワーページ、アッパーページ、ハイアーページ、トップページとも同じシーケンスである。各ページの各読み出しレベルに対して、読み出しレベルより1つ下のレベル、読み出しレベル、読み出しレベルより1つ上のレベル、2つ上のレベルにより、4回読み出される(S31、S32、S33、S34)。すなわち、1つのデータを読み出すために、ワード線の電位が4回変更される。各読み出しレベル、この読み出しレベルより1つ下のレベル、1つ上のレベル、2つ上のレベルは、後述するように、例えば閾値レベルの範囲を4等分したレベルに設定される。これら読み出しレベルを用いてNAND型フラッシュメモリのセルから読み出されたデータは、図2に示すデータ記憶回路10に保持され、このデータ記憶回路10から図1に示すデータ入出力バッファ4、データ入出力端子5を介してホスト11のECC回路11−1に転送される(S35、S36)。データ記憶回路10からホスト11にデータを転送している間に、次のデータがメモリセルから読み出され、データ記憶回路10に記憶される。ホスト11に転送されたデータは、LDPC符号のECC回路11−2によりエラー訂正処理が行なわれる(S37)。エラー訂正されたデータはホスト11から出力される。ECC回路11−2による訂正処理は、本実施形態の本質ではないため、具体的な説明は省略する。
図19(a)は、ロワーページにおける読み出しシーケンスを示しており、前述したように、H−レベルは、読み出しレベル28,29,30,31によりデータが読み出される(S40)。
図19(b)は、アッパーページにおける読み出しシーケンスを示しており、L−レベルは、読み出しレベル44,45,46,47によりデータが読み出され(S41)、D−レベルは、読み出しレベル12,13,14,15によりデータが読み出される(S42)。
図19(c)は、ハイアーページにおける読み出しシーケンスを示しており、N−レベルは、読み出しレベル52,53,54,55によりデータが読み出され(S43)、J−レベルは、読み出しレベル36,37,38,39によりデータが読み出される(S44)。さらに、F−レベルは、読み出しレベル20,21,22,23によりデータが読み出され(S45)、B−レベルは、読み出しレベル4,5,6,7によりデータが読み出される(S46)。
図20は、トップレベルにおける読み出しシーケンスを示しており、O−レベルは、読み出しレベル56,57,58,59によりデータが読み出され(S47)、M−レベルは、読み出しレベル48,49,50,51によりデータが読み出される(S48)。さらに、K−レベルは、読み出しレベル40,41,42,43によりデータが読み出され(S49)、I−レベルは、読み出しレベル32,33,34,35によりデータが読み出される(S50)。また、G−レベルは、読み出しレベル24,25,26,27によりデータが読み出され(S51)、E−レベルは、読み出しレベル16,17,18,19によりデータが読み出される(S52)。さらに、C−レベルは、読み出しレベル8,9,10,11によりデータが読み出され(S53)、A−レベルは、読み出しレベル0,1,2,3によりデータが読み出される(S54)。
尚、ECC回路11−2によりエラー訂正処理している間に、メモリセルからデータを読み出し、データ記憶回路10からECC回路11−1にデータを転送することも可能である。
図14乃至図17において、Z−レベルを−1.6V、O−レベルを4Vとすると、各分布のレベルは、(4V−(−1.6V))/15=5.6/15=約0.37Vとなる。LDPC符号を用いた場合、本例のように、1つのレベルに4つの読み出しレベルを設けると、1つの読み出しレベル間は、0.37V/4=約0.0925Vとなる。但し、レベルが高いほどデータリテンションが悪いため、高いレベルほど、少しずつレベル間隔を広げることが好ましい。また、レベルが低いほどデータリテンションが良いため、低いレベルほど、少しずつレベル間隔を狭めることが好ましい。このように読み出しレベルを設定することにより、読み出しレベルの高い場合、及び低い場合において、データリテンションを一定に確保して、確実に閾値レベルを読み出すことができる。
上記第3の実施形態によれば、メモリセルに記憶された1つの閾値レベルを読み出すために、ワード線のレベルを4回変えることにより、LDPC符号のエラー訂正に必要な確率値を求めることができる。このため、エラー訂正として、訂正能力が他のECC符号に比べて高く、記憶する検査ビットが少なく、高い訂正能力を有する、LDPC符号を用いることができる。
尚、上記第3の実施形態において、確率値を求めるために、読み出しレベルを変えて4回の読み出し動作を行った。しかし、これに限定されるものではなく、読み出しレベルを6回、8回と何回か変えることも可能である。また、読み出しレベルは変えずに同じレベルで4回の読み出し動作を行い、これら読み出し動作により読み出された“H”レベルの数を計数してもよい。さらに、この他のセルから読み出す場合の動作のタイミング、プリチャージ電圧などを少しずつ変化させて計数することも可能である。
(変形例1)
図21は、図2に示すデータ記憶回路10の一例を示している。
このデータ記憶回路10は、例えば4ビット、16値のデータを書き込み、読み出す場合を示しており、プライマリデータキャッシュ(PDC)、セコンダリデータキャッシュ(SDC)、ダイナミックデータキャッシュ(DDC0、DDC1、DDC2、DDC3)、テンポラリデータキャッシュ(TDC)を有している。SDC、PDC、DDC0、DDC1、DDC2、DDC3は、書き込み時に入力データを保持し、読み出し時に読み出しデータを保持し、ベリファイ時に一時的にデータを保持し、多値データを記憶する際に内部データの操作に使用される。TDCは、データの読み出し時にビット線のデータを増幅し、一時的に保持するとともに、多値データを記憶する際に内部データの操作に使用される。
SDCは、スタティックラッチ回路を構成するクロックドインバータ回路61a、61b、及びトランジスタ61c、61dにより構成されている。トランジスタ61cはクロックドインバータ回路61aの入力端と、クロックドインバータ回路61bの入力端の間に接続されている。このトランジスタ61cのゲートには信号EQ2が供給されている。トランジスタ61dはクロックドインバータ回路61aの出力端と接地間に接続されている。このトランジスタ61dのゲートには信号PRSTが供給されている。SDCのノードN2aは、カラム選択トランジスタ61eを介して入出力データ線IOnに接続され、ノードN2bは、カラム選択トランジスタ61fを介して入出力データ線IOに接続される。これらトランジスタ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のゲートはノードN3に接続されている。トランジスタ61n、61oの電流通路の他端は、信号線COMiに接続されている。この信号線COMiは全データ記憶回路10に共通に接続され、この信号線COMiのレベルにより、全データ記憶回路10のベリファイが完了したかどうかを判定できる。すなわち、後述するように、ベリファイが完了すると、PDCのノードN1bがローレベル(ノードN1aがハイレベル)となる。この状態において、信号CHK1、CHK2nをハイレベルとすると、ベリファイが完了している場合、信号COMiがハイレベルとなる。
さらに、前記TDCは、例えばMOSキャパシタ61pにより構成されている。このキャパシタ61pは、一端が前記トランジスタ61g、61hの接続ノードN3に接続され、他端に後述する信号BOOSTが供給されている。また、接続ノードN3には、トランジスタ61qA〜61qDを介してDDC0、DDC1、DDC2、DDC3が接続される。前記トランジスタ61qA〜61qDのゲートには、信号REGA〜REGDが供給されている。
ダイナミックラッチ回路を構成するDDC0、DDC1、DDC2、DDC3は、トランジスタ61rA〜61rDにより構成されている。トランジスタ61rA〜61rDの電流通路の一端には信号VPREが供給され、他端は前記トランジスタ61qA〜61qDの電流通路にそれぞれ接続されている。このトランジスタ61rA〜61rDのゲートはトランジスタ61sA〜61sDを介して前記PDCのノードN1aにそれぞれ接続されている。このトランジスタ61sA〜61sDのゲートには信号DTGA〜DTGDがそれぞれ供給されている。
さらに、前記接続ノードN3にはトランジスタ61t、61uの電流通路の一端が接続されている。トランジスタ61uの電流通路の他端には信号VPREが供給され、ゲートにはBLPREが供給されている。前記トランジスタ61tのゲートには信号BLCLAMPが供給されている。このトランジスタ61tの電流通路の他端はトランジスタ61vを介してビット線BLoの一端に接続され、トランジスタ61wを介してビット線BLeの一端に接続されている。ビット線BLoの一端はトランジスタ61xの電流通路の一端に接続されている。このトランジスタ61xのゲートには信号BIASoが供給されている。ビット線BLeの一端はトランジスタ61yの電流通路の一端に接続されている。このトランジスタ61yのゲートには信号BIASeが供給されている。これらトランジスタ61x、61yの電流通路の他端には、信号BLCRLが供給されている。トランジスタ61x、61yは、信号BIASo、BIASeに応じてトランジスタ61v、61wと相補的にオンとされ、非選択のビット線に信号BLCRLの電位を供給する。
尚、前記ノードN3と接地間には、例えばMOSキャパシタ61zが接続されている。このキャパシタ61zは、後述するTDCのキャパシタ61pを信号BOOSTにより昇圧する際、カップリングにより、ノードN3の電位が上昇し過ぎないように、ノードN3の電位を調整する。以後、PDCのデータはノードN1aの電位、SDCのデータはノードN2aの電位、TDCのデータはノードN3の電位とする。DDC0〜DDC3のデータは、トランジスタ61rA〜61rDのゲートの電位とする。
上記データ記憶回路10の各部に供給される信号は、図1に示す制御電圧及び制御信号生成回路7により発生される。また、各メモリセルの複数のページのデータはアドレスを変えて読み出される。
図22は、上記データ記憶回路10を使用した、通常のリードシーケンスを示している。
先ず、ロワーページのデータをメモリセルから読み出してPDCにより保持した後、PDCからSDCにデータを移す(L(30μs))。ロワーページのデータをSDCから外部に出力している間(DoutL)に、アッパーページのデータをメモリセルから読み出し、PDCで保持する(U(60μs))。この後、PDCのデータをSDCに移し、アッパーページのデータをSDCから外部に出力している間(DoutU)に、ハイアーページのデータをメモリセルから読み出しPDCに保持する(H(120μs))。この後、PDCのデータをSDCに移し、ハイアーページのデータをSDCから外部に出力している間(DoutH)に、トップページのデータをメモリセルから読み出しPDCに保持する(T(240μs))。この後、PDCのデータをSDCに移し、トップページのデータをSDCから外部に出力する(DoutT)。このように、通常の動作シーケンスの場合、4ページのデータをメモリセルから読み出し、外部に転送する場合、転送動作を4回行っている。
これに対して、図23は、図18に対応する第3の実施形態の動作シーケンスを示している。第3の実施形態は、1ページのデータを4回レベルを変えて読み出し、この読み出されたデータをそれぞれ外部に出力している。このため、第3の実施形態は、図23に示すように、外部への転送動作が、図22に示す通常の動作シーケンスの4倍必要となる。すなわち、通常の動作シーケンスの場合、外部への転送動作は、4回であったが、第3の実施形態の場合、4×4=16回必要となる。
一方、図24、図25、図26乃至図29は、第3の実施形態の変形例1を示している。変形例1の場合、先ず、図24、図25、図28に示すように、セルからロワーページのデータを、レベル29(対応レベル)により読み出し、PDCに保持する(31a)。この後、PDCからSDCにデータを移し、ロワーページのデータをSDCから外部に出力する(31b)。この出力している間に、セルからロワーページのデータを対応レベルより2つ上レベル(レベル31)で読み出し、PDCに保持する(31c)。PDCのデータとSDCに保持されているレベル29で読み出されたデータとのXOR(排他的論理和)を取り、この結果をDDC0に足す(31d)。DDC0が“H”となるのはメモリセルがレベル29以上、レベル31以下のときだけである。
次に、セルからロワーページのデータを対応レベルより1つ上のレベル(レベル30)で読み出す(S31e)。この読み出したデータと、PDCに記憶されている2つ上のレベル(レベル31)で読み出さされたデータとのXORを取り、この結果をDDC1に足す(S31f)。DDC1が“H”となるのはメモリセルがレベル30以上、レベル31以下のときだけである。
この後、セルからロワーページのデータを対応レベルより1つ下のレベル(レベル28)で読み出す(S31g)。この読み出したデータとSDCに記憶されている対応レベル(レベル29)で読み出されたデータとのXORを取り、この結果をDDC1に足(S31h)。この結果、DDC1が“H”となるのはメモリセルがレベル30以上レベル31以下、レベル28以上レベル29以下のときだけである。
上記と同様にして、アッパーページ、ハイアーページ、トップページの対応レベルによりセルからデータを読み出し、この後、PDCからSDCにデータを移し、ロワーページのデータをSDCから外部に出力している間に、対応レベルより2つ上のレベルで読み出したデータと対応レベルで読み出したデータとのXORをとり、この結果をDDC0に足す。また、対応レベルより1つ上のレベルにより読み出したデータと対応レベルより2つ上のレベルで読み出したデータとのXORをとり、この結果をDDC1に足す。さらに、対応レベルで読み出したデータと、対応レベルより1つ下のレベルで読み出したデータとのXORをとり、この結果をDDC1に足す。最後に、これらのDDC0とDDC1のデータを夫々外部に出力する(S36a、S36b)。
上記XORは、例えば次のようにして求められる。先ず、XORを取るデータをDDC2とDDC3に転送する。DDC2とDDC3に保持されたデータの組合せは、次の4通りとなる。
DDC2 1 1 0 0
DDC3 1 0 1 0
この後、信号VPRE=Vss、信号BLPRE=Vddとして、TDCをVssに設定する。次いで、信号VPRE=Vdd、信号REG2=“H”としてDDC2のデータをTDCにコピーする。信号VPRE=Vss、信号REG3=“H”としてDDC3が“1”の場合、TDCを強制的にVssとする。この後、TDCのデータをPDCに移す。すると、DDC2とDDC3及びPDCに保持されたデータの組合せは、次のようになる。
DDC2 1 1 0 0
DDC3 1 0 1 0
PDC 0 1 0 0
この後、信号VPRE=Vss、信号BLPRE=VddとしてTDCをVssに設定する。次に、信号VPRE=Vdd、信号REG3=“H”としてDDC3のデータをTDCにコピーする。信号VPRE=Vss、REG2=“H”とし、DDC2のデータが“1”の場合、TDCを強制的にVssに設定する。すると、DDC2、DDC3、PDC及びTDCに保持されたデータの組合せは、次のようになる。
DDC2 1 1 0 0
DDC3 1 0 1 0
PDC 0 1 0 0
TDC 0 0 1 0
この後、信号DTG2を一旦“H”とし、PDCのデータをDDC2に移す。次いで、信号VPRE=Vdd、信号REG2=“H”として、DDC2のデータが“1”の場合、TDCを強制的にVddにする。この後、TDCのデータをPDCに移す。すると、DDC2、DDC3及びPDCに保持されたデータの組合せは、次のようになる。
DDC2 0 1 0 0
DDC3 1 0 1 0
PDC 0 1 1 0
上記動作により、PDCに、DDC2とDDC3のXORの結果が残る。
上記変形例1によれば、外部への転送動作を6回(=4+2)に削減することができる。しかし、上記キャッシュを使った場合の、転送時間は1つのレベルの読み出し時間を30μs、外部への転送時間を45μsとすると、図22に示す例の場合の動作時間は、次式のようになる。
(30μs+60μs+120μs+240μs)×4+45μs
=1800μs+45μs
また、図24に示す変形例1の場合の動作時間は、次式のようになる。
(30μs+60μs+120μs+240μs)×4+45μs×3
=1800μs+135μs
このように、変形例1の場合、動作時間が増加してしまう問題がある。
(変形例2)
図30乃至図34は、変形例2を示している。変形例2は、図31乃至図34に示すように、セルの閾値、及びロワーページ、アッパーページ、ハイアーページ、及びトップページを割り付け、下のレベルから“H”が読み出された回数を計数する。すなわち、データ記憶回路10の各キャッシュをカウンタのように動作させる。すると、計数した数が図31乃至図34に示すように、PDC、DDC0、DDC1、DDC2、DDC3、SDCに記憶される。これら記憶された値が、ロワーページ、アッパーページ、ハイアーページ、トップページの割付の反転となる。しかし、“0”−レベルより低いと、ロワーページ、アッパーページ、ハイアーページ、トップページは、“1111”であり、“1”−レベルより高いと、ロワーページ、アッパーページ、ハイアーページ、トップページは、“1110”である。このため、先ず、SDC、DDC3、DDC2、DDC1、DDC0を“000011”にセットする。
この後、“0”−レベルでセルのデータを読み出す。読み出したデータが“H”の場合、/SDC、DDC3、DDC2、DDC1、DDC0、PDCは、“000100”、“L”の場合、/SDC、DDC3、DDC2、DDC1、DDC0は、“000011”となる。この後、“1”−レベル・・・・と下のレベルから読み出し、読み出したデータが“H”の場合、/SDC、DDC3、DDC2、DDC1、DDC0に“1”ずつ加算する。“28”−レベルによる読み出し後、SDCのデータが“0”か“1”が決まる。このため、図30にDoutで示すように、SDCのデータを外部に出力する。また、“44”−レベルによる読み出し後、DDC3のデータも決まる。このため、DDC3のデータを反転してSDCに転送し、この後、SDCのデータを外部に出力する。また、“52”−レベルによる読み出し後、DDC2のデータも決まる。このため、DDC2のデータを反転してSDCに転送し、この後、SDCのデータを外部に出力する。また、“56”−レベルによる読み出し後、DDC1のデータも決まる。このため、DDC1のデータを反転してSDCに転送し、この後、SDCのデータを外部に出力する。また、“58”−レベルによる読み出し後、DDC0のデータも決まる。このため、DDC0のデータを反転してSDCに転送し、この後、SDCのデータを外部に出力する。また、“59”−レベルによる読み出し後、PDCのデータも決まる。このため、PDCのデータを反転してSDCに転送し、この後、SDCのデータを外部に出力する。このように、定義することにより、外部への転送動作は、変形例1と同様、4+2=6回で済む。また、変形例2の動作速度は、次式のように、変形例1に比べて高速化できる。
(30μs+60μs+120μs+240μs)×4+45μs
=1800μs+45μs
また、書き込みでは、16レベルに同時書き込み、夫々のレベルのベリファイで、16レベルの区別をするために、図30乃至図34に示すように、ロワーページ、アッパーページ、ハイアーページ、トップページを割り付けた場合、図35に示すように、
トップページのデータを反転させたデータがDDC0に記憶され、
ハイアーページのデータを反転させたデータがDDC1に記憶され、
アッパーページのデータを反転させたデータがDDC2に記憶され、
ロワーページのデータがSDCに記憶され、
PDCには、書き込み時に“0”、非書き込み時に“1”が記憶される。
通常の書き込みでは、先に低い閾値レベルのセルが書き込み完了となる。このため、レベルA〜Gの書き込みが終了すると、SDCは、レベルA〜Gへの書き込みか、レベルH〜Oへの書き込みかを区別する必要がなくなるため、次のページのデータを保持するために使用できる。また、レベルH〜Kが書き込み終了すると、DDC2も、次のページのデータを保持するために使用できる。さらに、レベルL、Mの書き込みが終了すると、DDC1も、次のページのデータを保持するために使用できる。また、レベルNの書き込みが終了すると、DDC0も、次のページのデータを保持するために使用できる。このため、全レベルの書き込みの終了を待たずに、次ページのデータを保持することができるため、高速動作が可能である。
また、ロワーページ、アッパーページ、ハイアーページ、トップページのデータ設定は、図14乃至図17に示すように、
閾値レベル : ZABC DEFG HIJK LMNO
ロワーページ : 1111 1111 0000 0000
アッパーページ: 1111 0000 0000 1111
ハイアーページ: 1100 0011 1100 0011
トップページ : 1001 1001 1001 1001
と設定し、それぞれのレベル間を均一とした。しかし、例えばG−レベルとH−レベルの間隔を他のレベル間の間隔より大きく設定する。これにより、ロワーページの不良率を下げることが可能である。
また、C−レベルとD−レベルの間隔、及びK−レベルとL−レベルの間隔を他のレベル間の間隔より大きく設定する。これにより、アッパーページの不良率を下げることが可能である。
A−レベルとB−レベルの間隔、E−レベルとF−レベルの間隔、I−レベルとJ−レベルの間隔、M−レベルとN−レベルの間隔を他のレベル間の間隔より大きく設定する。これにより、ハイアーページの不良率を下げることが可能である。
Z−レベルとA−レベルの間隔、B−レベルとC−レベルの間隔、D−レベルとE−レベルの間隔、F−レベルとG−レベルの間隔、H−レベルとI−レベルの間隔、J−レベルとK−レベルの間隔、L−レベルとM−レベルの間隔、N−レベルとO−レベルの間隔を他のレベル間の間隔より大きく設定する。これにより、トップページの不良率を下げることが可能である。
(第4の実施形態)
(隣接セルの書き込みに伴う閾値シフトを補正してLDPC符号を使用する場合)
第3の実施形態は、隣接セルの書き込みによる閾値レベルの変化について考慮していなかった。しかし、前述したように、図6に示すセルMC11に4ビット(16値)のデータを書き込んだ後、セルMC12に4ビット(16値)のデータを書き込んだ場合、セル間のカップリング容量の影響により、セルMC11の閾値レベルが高くシフトしてしまう。このカップリング影響を抑えるため、書き込むべきセルに本来の閾値レベルより低めの閾値レベルまで書き込んだ後、周りのセルを本来の閾値レベルより低めの閾値レベルに書き込む。この後、書き込むべきセルを本来の閾値レベルまで書き込み、この後、周りのセルを本来の閾値にまで書き込む。このようにしてカップリングの影響を抑えることが可能である。しかし、周りのセルのデータが決まらないと書き込みを完了することができないという問題がある。このように周りのセルを書き込まない場合において、LDPC符号を使用する場合、上述したように、1つの閾値レベルを確率値として読み出すため、複数回の読み出しにより、この確率値を求める必要がある。このため、隣接セルの書き込みによりメモリセルの閾値レベルが変化した場合、メモリセルから4つの読み出しレベルで読み出されたデータの精度が低下し、エラー訂正の精度が低下する。
図36乃至図39は、図14乃至図17に示す閾値レベルにおいて、隣接セルが書き込まれたことに伴う閾値レベルの変化量を示しており、変化量が、無い、小、小中、中、中大、大の6つの場合を仮定し、それぞれの場合に読み出された“H”の回数を示している。このように、閾値レベルが変化している場合、通常のリードレベルで読み出すと、データを正しく読み出すことが困難となる。このため、隣接セルの書き込みに伴う閾値レベルの変化を補正して読み出す必要がある。
Z−レベルからO−レベルに対して、6つの閾値レベルの変化量があり、各レベルについて確率値を求めるために上記4つの読み出しレベルを設定する場合、図36乃至図39に破線0−64で示すように、全部で65個の読み出しレベルが必要となる。
図40は、第4の実施形態に係る読み出しシーケンスを示している。第4の実施形態では、例えば図6に示す読み出し対象のセルMC11について、0〜64レベルまでの65個の読み出しレベルでリード動作を行う(S61)。
具体的には、図1に示す制御信号及び制御電圧発生回路7により、レベル0〜レベル64の読み出しレベルを発生し、メモリセル1の選択されたワード線WLnに供給する。例えばセルの閾値レベルが、読み出しレベルより高い場合セルはオフする。このため、“H”(データ“0”)となり、H−レベル未満の場合、セルはオンするため“L”(データ“1”)となる。各読み出しレベルにより読み出されたデータは、図2に示すデータ記憶回路10に保持される。このデータ記憶回路10に保持されたデータは、図18に示す動作と同様に、次の読み出しレベルによりメモリセルからデータを読み出している間にホスト11に転送される。
この後、前記メモリセルMC11に隣接するメモリセルMC12の閾値レベルの変化が検出される(S62)。この場合、隣接セルの閾値レベルの移動が、無い、小、小中、中、中大、大のどれであるかが分かればよい。このため、0〜64レベルまでの65個の読み出しレベルでリード動作を行う必要は無く、例えば図36乃至図39に示す読み出しレベル10、21、32、43、54でリードする。すなわち、ワード線WLn+1に読み出しレベル10、21、32、43、54が順次供給されて閾値レベルが読み出される。このワード線WLn+1のレベルを変化させて読み出した隣接セルの閾値レベルの変化に対応した6つのデータは順次ホスト11に供給される。
ホスト11は、ステップS61により得られたデータより、セル毎に、“H”(データ“0”)の数を計数する。この後、隣接セルの閾値レベルの変化に対応した6つのデータに基づき、前記上記65個のデータを補正する。すなわち、ステップS62における読み出しの結果、隣接セルの閾値レベルの変化量に応じて計数された“H”の回数が減算される。具体的には、
閾値レベルの変化量が無い場合、補正なし。
閾値レベルの変化量が小の場合、計数した“H”の回数を−1する。
閾値レベルの変化量が小中の場合、計数した“H”の回数を−2する。
閾値レベルの変化量が中の場合、計数した“H”の回数を−3する。
閾値レベルの変化量が中大の場合、計数した“H”の回数を−4する。
閾値レベルの変化量が大の場合、計数した“H”の回数を−5する。
この結果、セルMC11で読み出した“H”(データ“0”)が出力される回数は、0〜60となり、隣接セルの閾値レベルの変化の影響が補正される。
図41(a)(b)の上段は、各ページの上記補正後の“H”の回数を示している。これらは、図14乃至図17の0〜59レベルで読み出した結果に相当する。例えば補正後“H”の数が“30”は、図14乃至図17のレベル29で読み出したことになり、ロワーページの場合、“H”の数は2個となる。また、補正後“H”の数が“29”は、図14乃至図17のレベル28で読み出したことになり、ロワーページの場合、“H”の数は1個となる。この“H”の回数に基づき、“H”の確率が以下のように設定される。
“H”が4回の場合、“H”(データ“0”)の確率は、100%(4/4)
“H”が3回の場合、“H”(データ“0”)の確率は、75%(3/4)
“H”が2回の場合、“H”(データ“0”)の確率は、50%(2/4)
“H”が1回の場合、“H”(データ“0”)の確率は、25%(1/4)
LDPC符号のECC回路11−1は、このようにして設定された確率に基づき、誤ったデータを訂正する。
尚、図40に示すフローチャートでは、初めにセルMC11を読み出した後に、セルMC11と隣接するセルMC12を読み出した。しかし、これに限定されるものではなく、例えば先にセルMC12を読み出すことも可能である。
上記第4の実施形態によれば、隣接セルとのカップリングの影響による閾値レベルの変化量を検出し、この検出した変化量に基づき、LDPC符号用の読み出し結果を補正している。したがって、隣接セルの書き込みによる閾値レベルの変動を除去することができるため、LDPC符号を用いたエラー訂正の精度を向上することが可能である。
無論、LDPC符号を使用しない場合、確率値を出力する必要がない。このため、隣接セルの閾値レベルの変化量に応じて計数された“H”の回数が減算され、この結果をそのまま読み出し結果とする。
(第5の実施形態)
セル間のカップリングは、プロセス等のばらつきに大きく依存する。このため、閾値レベルの補正は、上記第1の実施形態に示すように、ワード線毎、若しくはチップ毎にトリミングしたシフト値を使用して補正したり、第2の実施形態に示すように、メモリセルアレイにモニタセルを設け、モニタセルの閾値レベルから関連する閾値レベルのシフト値を算出してメモリセルの閾値レベルを読み出している。
第5の実施形態は、第2の実施形態と同様に、図11に示すモニタセルMMCを用いてセル間のカップリングの影響を検出する。第5の実施形態において、モニタセルには、図17に示す最も高い閾値レベル、例えばO−レベルを常に書き込み、隣接セルの書き込みによるO−レベルの閾値レベルの変化量を検出することにより、隣接セルの読み出しレベルを補正する。
図42、図43は、読み出し動作を示している。先ず、図6に示すように、セルMC11を読み出す。この読み出し動作は、図40に示す第4の実施形態とほぼ同様である。すなわち、図1に示す制御信号及び制御電圧発生回路7により、レベル0〜レベル64の読み出しレベルを発生し、メモリセル1の選択されたワード線WLnに供給する(S71)。例えばセルの閾値レベルが、読み出しレベルより高い場合セルはオフする。このため、“H”(データ“0”)となり、H−レベル未満の場合、セルはオンするため“L”(データ“1”)となる。このとき、モニタセルMMCがレベル57〜64のどのレベルでオンしたかも検出する(S72)。このモニタセルのオンしたレベルに応じて、セルMC12の読み出しレベルを決め、この読み出し結果に応じて補正を行う。
すなわち、図43に示すように、モニタセルMMCの閾値レベルがレベル57、58の場合、カップリングの影響がないため、セルMC12は読み出しレベルを補正することなく読み出される(S73)。
また、モニタセルMMCの閾値レベルがレベル59である場合、カップリングの影響は“小”であるため、レベル32をワード線WLn+1に供給し、このレベル32により隣接セルMC12の閾値レベルを読み出す(S74)。
また、モニタセルMMCの閾値レベルがレベル60である場合、カップリングの影響は“小中”であるため、先ず、レベル10をワード線WLn+1に供給し、このレベル10により隣接セルMC12の閾値レベルを読み出す。次いで、レベル21をワード線WLn+1に供給し、このレベル21により隣接セルMC12の閾値レベルを読み出す(S75)。
また、モニタセルMMCの閾値レベルがレベル61である場合、カップリングの影響は“中”であるため、先ず、レベル10をワード線WLn+1に供給し、このレベル10により隣接セルMC12の閾値レベルを読み出す。次いで、レベル21をワード線WLn+1に供給し、このレベル21により隣接セルMC12の閾値レベルを読み出す。さらに、レベル32をワード線WLn+1に供給し、このレベル32により隣接セルMC12の閾値レベルを読み出す。(S76)。
また、モニタセルMMCの閾値レベルがレベル62である場合、カップリングの影響は“中大”であるため、先ず、レベル10をワード線WLn+1に供給し、このレベル10により隣接セルMC12の閾値レベルを読み出す。次いで、レベル21をワード線WLn+1に供給し、このレベル21により隣接セルMC12の閾値レベルを読み出す。さらに、レベル32をワード線WLn+1に供給し、このレベル32により隣接セルMC12の閾値レベルを読み出す。この後、レベル43をワード線WLn+1に供給し、このレベル43により隣接セルMC12の閾値レベルを読み出す。(S77)。
また、モニタセルMMCの閾値レベルがレベル63、64である場合、カップリングの影響は“大”であるため、先ず、レベル10をワード線WLn+1に供給し、このレベル10により隣接セルMC12の閾値レベルを読み出す。次いで、レベル21をワード線WLn+1に供給し、このレベル21により隣接セルMC12の閾値レベルを読み出す。さらに、レベル32をワード線WLn+1に供給し、このレベル32により隣接セルMC12の閾値レベルを読み出す。この後、レベル43をワード線WLn+1に供給し、このレベル43により隣接セルMC12の閾値レベルを読み出す。さらに、レベル54をワード線WLn+1に供給し、このレベル54により隣接セルMC12の閾値レベルを読み出す。(S78)。
このようにして、メモリセルMC11に隣接するセルMC12の閾値レベルの変化を検出し、隣接セルのカップリングの大きさと移動(無し、小、小中、中、中大、大のいずれか)に応じてメモリセルMC11の読み出し結果が補正される(S79)。したがって、隣接セルのカップリングの大きさと、隣接セルの書き込みによる閾値レベルの変動を削除することができ、メモリセルMCのデータを高精度に読み出すことができる。
上記第5の実施形態によれば、メモリセルと同時に書き込まれるモニタセルMMCを設け、このモニタセルに常に最も高い閾値レベルを書き込み、このモニタセルMMCの閾値レベルを判別することにより、隣接セルとのカップリングによるモニタセルMMCの閾値レベルの変化量を6段階で検出している。このため、隣接セルとのカップリングの影響をより正確に検出することができる。したがって、この検出した変化量に基づき隣接セルの読み出しレベルを補正することにより、隣接セルの閾値レベルを正確に読み出すことが可能である。
読み出しレベルは、0〜64に限らず、読み出しレベルをさらに細かくする、又は粗くすることも可能である。隣接セルのカップリングの影響は、無し、小、小中、中、中大、大の6個、また、隣接セルの閾値レベルの変化量も、無し、小、小中、中、中大、大の6個に分類していた。しかし、これらも変更可能である。
尚、第5の実施形態において、モニタセルを複数個設け、これらモニタセルから読み出されたデータの多数決を求め、この結果を用いて補正することも可能である。
無論、LDPC符号を使用しない場合、確率値を出力する必要がない。このため、隣接セルの閾値レベルの変化量に応じて計数された“H”の回数が減算され、この結果をそのまま読み出し結果とする。
(第6の実施形態)
第6の実施形態は、上記トリミングデータやモニタセルを用いずにチップ間、ワード線間の閾値レベルのばらつきを補正可能とするものである。
NAND型フラッシュメモリは、ロウ方向に並んだ全てのセル、又は半数のセルを例えば2KB×4のデータとして一括して書き込むため、例えば2KB×4(4ビット/1セル)=16k×4(4ビット/1セル)ビットとなる。つまり、16k個のセルが、Z−レベルに1kセル、A−レベルに1kセル、B−レベルに1kセル、C−レベルに1kセル、D−レベルに1kセル、E−レベルに1kセル、F−レベルに1kセル、G−レベルに1kセル、H−レベルに1kセル、I−レベルに1kセル、J−レベルに1kセル、K−レベルに1kセル、L−レベルに1kセル、M−レベルに1kセル、N−レベルに1kセル、O−レベルに1kセルというように均等に存在すると仮定する。この状態において、隣接セルにデータを書き込んだとき、これらセルの閾値レベルが均等に変化したとする。これらセルから読み出したデータを、隣接セルの閾値レベルの変化に応じて、閾値レベルの変化量が、無い、小、小中、中、中大、大の6パターンに分類すると仮定すると、1つのパターンに対して、16k/6=2666セルが存在する。1つのパターンに16レベルが均等にあるとすると、1つのレベルに166セルが存在することになる。
図47は、第6の実施形態の動作を示すものであり、図40と同一部分には同一符号を付す。
(1)図47に示すように、先ず、WLnのセルについて、0〜64のそれぞれのレベルでリードを行う(S61)。
(2)WLn+1のセルのセルについて、10、21、32、43、65レベルでリード動作を行い隣のセル(WLn+1)の閾値レベルの変化量を、無し、小、小中、中、中大、大であるかを調べる(S62)。
(3)隣のセル(WLn+1)の閾値レベル変化量(無し、小、小中、中、中大、大)毎に、WLnのセルで“H”が読み出された回数を集計する。図44、図45は、この集計結果である(S81)。
図44、図45において、例えば隣接セルの閾値レベルの変化量が無い場合の集計結果は、
“H”が読み出された回数が0回となるのは、143セル、
“H”が読み出された回数が1回となるのは、23セル、
“H”が読み出された回数が2回となるのは、23セル、
“H”が読み出された回数が3回となるのは、60セル、
“H”が読み出された回数が4回となるのは、60セル、
“H”が読み出された回数が5回となるのは、23セル、
“H”が読み出された回数が6回となるのは、23セル、
“H”が読み出された回数が7回となるのは、60セル、
“H”が読み出された回数が8回となるのは、60セル、
“H”が読み出された回数が9回となるのは、23セル、
“H”が読み出された回数が10回となるのは、23セル、
“H”が読み出された回数が11回となるのは、60セル、以下省略となる。
また、例えば隣接セルの閾値レベルの変化量が“大”である場合の集計結果は、
“H”が読み出された回数が0回となるのは、0セル、
“H”が読み出された回数が1回となるのは、0セル、
“H”が読み出された回数が2回となるのは、0セル、
“H”が読み出された回数が3回となるのは、23セル、
“H”が読み出された回数が4回となるのは、60セル、
“H”が読み出された回数が5回となるのは、60セル、
“H”が読み出された回数が6回となるのは、23セル、
“H”が読み出された回数が7回となるのは、23セル、
“H”が読み出された回数が8回となるのは、60セル、
“H”が読み出された回数が9回となるのは、60セル、
“H”が読み出された回数が10回となるのは、23セル、以下省略。
というように、“H”が読み出された回数に対して、セルの数が大きくなったり小さくなったりする。セルの数が大きくなったところ、例えば“60セル”が、書き込こまれた閾値レベルの中心値と推定することができる(S82)。このため、この推定された中心値に従って読み出しレベルを補正する(S83)。
また、前述したように、閾値レベルの変化の6パターンに対応した変化は、図44、図45に示すようである。このため、閾値レベルの変化量が、無い、小、小中、中、中大、大に応じて補正値を、例えば“0”“−1”“−2”“−3”“−4”“−5”に設定し、これら補正値を上記“H”が読み出された回数から減算すると、図44,図45に“変換後”で示すようになる。この“変換後”は、読み出しレベルを補正値により補正したことに相当する。つまり、図41の上段に相当し、第4の実施形態と同様に、各ページでの“H”の回数に基づき確率値が求められる。したがって、セル間のカップリング容量が、プロセス等のばらつきにより大きい場合であっても、隣接セルにデータが書き込まれたことによる閾値レベルの変動を補正して、読み出すことが可能である。無論、LDPC符号を使用しない場合は確率値を出力する必要がない。このため、セルの数が大きくなったところが、各閾値レベルの中心値と考えることができ、この中心値に従って読み出しレベルを補正した結果が読み出しデータとなる。
第6の実施形態によれば、モニタセルを用いることなく、メモリセル間の閾値レベルのばらつき、ワード線間のばらつきを検出して閾値レベルの変動を補正することができる。このため、高精度の読み出しが可能である。
尚、第6の実施形態において、各レベルにそれぞれ均等に1k個のセルが存在すると仮定した。しかし、実際のデータはランダムである、このため、極端な場合、ある1つのレベルに1つのセルしかない場合もある。しかし、ページサイズが大きくなるに従い、データがこのような状態となる確率は非常にまれである。したがって、このような場合、データを必ず1つのレベルに複数セル(例えば10セル)が存在するように、ホスト11側で変更する。
また、隣接セルが書き込まれたことに伴う閾値レベルの移動が、無い、小、小中、中、中大、大の6つに分類したが、これ以上の状態に分類することも可能である。この場合、読み出し精度を向上することができる。
さらに、上記各実施形態は、3ビット、8値、又は4ビット、16値に限定されるものではなく、他のビット数にも適用可能である。
また、図46は、上述したワード線に接続された複数のメモリセルの半数ずつ選択する例を示している。一対のビット線は、データ記憶回路10にそれぞれ接続され、一対のビット線の一方が選択的にデータ記憶回路10に接続される。上記第1乃至第6の実施形態は、図46に示す構成のメモリセルアレイにも適用できる。
さらに、第3の実施形態と同様に、第4、第5、第6の実施形態は、図40、図42、図44、図45に示すように、ワード線WLnに接続されたセルから65回閾値レベルを読み出し、65回データ記憶回路からホストにデータを転送していた。しかし、65レベルは27と表せ、次のように、7ビットで表現できる。
“H”が読み出された回数0 0000000
“H”が読み出された回数1 0000001
“H”が読み出された回数2 0000010
“H”が読み出された回数3 0000011
“H”が読み出された回数4 0000100
“H”が読み出された回数5 0000101
・・・・・・・
“H”が読み出された回数63 1000000
“H”が読み出された回数64 1000001
“H”が読み出された回数65 1000010
このため、各データ記憶回路を例えばカウンタのように動作させ、このカウンタによって各読み出された回数を計数することにより、このカウンタから1ビットずつ7回、ホストにデータを転送すればよい。
第3の実施形態と同様に、全読み出し回数の半分までメモリセルから読み出すと、一番上の桁は外部に出力できる。このため、この桁のデータを外部に出力しながら、次のデータをメモリセルから読み出す。同様に、何回か読み出すと、計数結果を外部に出力可能となるため、順次外部に出力しながら、次のデータをメモリセルから読み出すことも可能である。
無論、LDPC符号を使用しない場合、確率値を出力する必要がない。このため、隣接セルの閾値レベルの変化量に応じて計数された“H”の回数が減算され、この結果をそのまま読み出し結果とする。
その他、本発明の要旨を変えない範囲において、種々変形実施可能なことは勿論である。