(57)【特許請求の範囲】
【請求項１】
複数のメモリセルがマトリクス状に配列され、書き込みデータを記憶する第１のメモリセルと前記第１のメモリセルのデータに対して誤り訂正用の検査ビットを記憶する第２のメモリセルを有するメモリセルアレイと、
前記第１及び第２のメモリセルから読み出されたデータに基づき、前記第１のメモリセルから読み出されたデータの誤りを訂正する誤り訂正処理部を有し、
前記誤り訂正処理部で使用する確率データを生成するため、前記第１、第２のメモリセルから複数の読み出しレベルを用いて複数回読み出す制御部と
を具備し、
前記メモリセルはｎ（ｎは２以上の自然数）値の閾値によりデータを記憶し、
前記制御部は、ｎ値の前記閾値毎に複数の読み出しレベルを用いて複数回読み出すことを特徴とするメモリシステム。
【請求項２】
前記制御部は、前記メモリセルに隣接するメモリセルの閾値レベルを検出し、検出した隣接セルの閾値レベルの変化量に応じて、前記メモリセルから読み出されたデータを補正することを特徴とする請求項１記載のメモリシステム。
【請求項３】
前記制御部は、前記第１のメモリセルの閾値レベルをｊ個（ｊは自然数）の読み出しレベルで読み出し、前記第２のメモリセルの閾値レベルをｋ個（ｋはｊ以下の自然数）の読み出しレベルで読み出すことにより、確率データを生成することを特徴とする請求項１記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば１つのメモリセルに２値以上のデータを記憶することが可能なメモリシステムに関する。
【背景技術】
【０００２】
例えばＮＡＮＤ型フラッシュメモリは、ロウ方向に配置された複数のメモリセルがそれぞれビット線を介して対応するラッチ回路に接続されている。各ラッチ回路はデータの書き込み、及び読み出し時にデータを保持する。ロウ方向に配置された複数のセルは、一括してデータの書き込み、又は読み出しが行なわれる。
【０００３】
また、大容量を記憶するために、１つのメモリセルに２ビット以上を記憶する多値メモリが開発されている。また、素子の微細化に伴い、隣接する複数のセルの浮遊ゲート間の容量結合の影響が問題となっている。すなわち、１つのメモリセルにデータを書き込むと、このメモリセルに隣接し、先に書かれたメモリセルの閾値電圧が容量結合により上昇してしまう。
【０００４】
このため、例えば第１のメモリセルのデータを読み出すとき、第１のメモリセルに隣接し、第１のメモリセルより後に書き込まれる第２のメモリセルの閾値電圧を検出し、この検出した閾値電圧に応じた補正値を、第１のメモリセルを読み出すときの読み出し電圧に加えて、第１のメモリセルのデータを読み出す方法が提案されている（例えば特許文献１参照）。
【０００５】
しかし、隣接セルの浮遊ゲート間の容量は、チップ毎、又はワード線毎にかなり大きなばらつきを持っている。このため、適正な補正値を定めることが困難であった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−３２６８６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、隣接セルの浮遊ゲート間容量に対応して適正な補正値を設定することが可能なメモリシステムを提供しようとするものである。
【課題を解決するための手段】
【０００８】
本実施形態のメモリシステムは、複数のメモリセルがマトリクス状に配列され、書き込みデータを記憶する第１のメモリセルと前記第１のメモリセルのデータに対して誤り訂正用の検査ビットを記憶する第２のメモリセルを有するメモリセルアレイと、前記第１及び第２のメモリセルから読み出されたデータに基づき、前記第１のメモリセルから読み出されたデータの誤りを訂正する誤り訂正処理部を有し、前記誤り訂正処理部で使用する確率データを生成するため、前記第１、第２のメモリセルから複数の読み出しレベルを用いて複数回読み出す制御部とを具備し、前記メモリセルはｎ（ｎは２以上の自然数）値の閾値によりデータを記憶し、前記制御部は、ｎ値の前記閾値毎に複数の読み出しレベルを用いて複数回読み出すことを特徴とする。
【図面の簡単な説明】
【０００９】
【図１】ＮＡＮＤ型フラッシュメモリの概略構成を示す図。
【図２】図２に示すメモリセルアレイ及びビット線制御回路の構成の一例を示す回路図。
【図３】図３（ａ）（ｂ）はメモリセル及び選択トランジスタを示す断面図。
【図４】ＮＡＮＤ型フラッシュメモリを示す断面図。
【図５】図４の各部に供給される電圧の例を示す図。
【図６】メモリセルの読み出し順序を示す図。
【図７】図７（ａ）乃至（ｇ）は、メモリセルに書き込まれた閾値レベルの例を示す図。
【図８】隣接セルの閾値レベルの変化に伴う閾値レベルの変化の様子を示す図。
【図９】第１の実施形態を示す構成図。
【図１０】第１の実施形態の動作を示すフローチャート。
【図１１】第２の実施形態に適用されるメモリセルアレイを示す回路図。
【図１２】第２の実施形態の動作を示すフローチャート。
【図１３】第２の実施形態の読み出し動作を示すフローチャート。
【図１４】第３の実施形態に係り、閾値レベルと読み出しレベルの関係の一部を示す図。
【図１５】図１４に続く、閾値レベルと読み出しレベルの関係の一部を示す図。
【図１６】図１５に続く、閾値レベルと読み出しレベルの関係の一部を示す図。
【図１７】図１６に続く、閾値レベルと読み出しレベルの関係の一部を示す図。
【図１８】第３の実施形態の読み出し動作を示すフローチャート。
【図１９】図１９（ａ）は、ロワーページにおける読み出しシーケンスを示し、図１９（ｂ）は、アッパーページにおける読み出しシーケンスを示し、図１９（ｃ）は、ハイアーページにおける読み出しシーケンスを示すフローチャート。
【図２０】トップレベルにおける読み出しシーケンスを示すフローチャート。
【図２１】データ記憶回路の一例を示す回路図。
【図２２】データ記憶回路を使用した通常のリードシーケンスを示す図。
【図２３】図１８に対応する第３の実施形態の動作シーケンスを示す図。
【図２４】第３の実施形態の変形例１を示すものであり、動作シーケンスを示す図。
【図２５】変形例１の動作を示すフローチャート。
【図２６】変形例１の閾値レベルと読み出しレベルの関係の一部を示す図。
【図２７】図２６に続く閾値レベルと読み出しレベルの関係の一部を示す図。
【図２８】図２７に続く閾値レベルと読み出しレベルの関係の一部を示す図。
【図２９】図２８に続く閾値レベルと読み出しレベルの関係の一部を示す図。
【図３０】第３の実施形態の変形例２を示すものであり、動作シーケンスを示す図。
【図３１】変形例２の閾値レベルと読み出しレベルの関係の一部を示す図。
【図３２】図３１に続く閾値レベルと読み出しレベルの関係の一部を示す図。
【図３３】図３２に続く閾値レベルと読み出しレベルの関係の一部を示す図。
【図３４】図３３に続く閾値レベルと読み出しレベルの関係の一部を示す図。
【図３５】変形例２の書き込みデータの一例を示す図。
【図３６】第４の実施形態に係り、隣接セルが書き込まれたことに伴う閾値レベルと読み出しレベルの関係の一部を示す図。
【図３７】図３６に続く、閾値レベルと読み出しレベルの関係の一部を示す図。
【図３８】図３７に続く、閾値レベルと読み出しレベルの関係の一部を示す図。
【図３９】図３８に続く、隣接セルが書き込まれたことに伴う閾値レベルと読み出しレベルの関係の一部を示す図。
【図４０】第４の実施形態に係る読み出し動作を示すフローチャート。
【図４１】第４の実施形態に係り、各ページの上記補正後の“Ｈ”の回数を示す図。
【図４２】第５の実施形態に係る読み出し動作を示すフローチャート。
【図４３】第５の実施形態に係り、図４２に続く読み出し動作を示すフローチャート。
【図４４】第６の実施形態に係り、閾値レベルの変化量に対応して“Ｈ”が読み出された回数を示す図。
【図４５】図４４に続き、閾値レベルの変化量に対応して“Ｈ”が読み出された回数を示す図。
【図４６】メモリセルアレイの他の例を示す回路図。
【図４７】第６の実施形態に係る読み出し動作を示すフローチャート。
【発明を実施するための形態】
【００１０】
以下、実施の形態について、図面を参照して説明する。
【００１１】
以下、本発明の実施の形態について、図面を参照して説明する。
【００１２】
図１は、例えば８値、３ビットのデータを記憶するＮＡＮＤ型フラッシュメモリの概略構成を示している。
【００１３】
メモリセルアレイ１は、複数のビット線と複数のワード線と共通ソース線を含み、例えばＥＥＰＲＯＭセルからなる電気的にデータを書き換え可能なメモリセルがマトリクス状に配置されている。このメモリセルアレイ１には、ビット線を制御するためのビット制御回路２とワード線制御回路６が接続されている。
【００１４】
ビット線制御回路２は、ビット線を介してメモリセルアレイ１中のメモリセルのデータを読み出したり、ビット線を介してメモリセルアレイ１中のメモリセルの状態を検出したり、ビット線を介してメモリセルアレイ１中のメモリセルに書き込み制御電圧を印加してメモリセルに書き込みを行なう。ビット線制御回路２には、カラムデコーダ３、データ入出力バッファ４が接続されている。ビット線制御回路２内のデータ記憶回路はカラムデコーダ３によって選択される。データ記憶回路に読み出されたメモリセルのデータは、前記データ入出力バッファ４を介してデータ入出力端子５から外部へ出力される。データ入出力端子５は、メモリチップ外部のホスト１１に接続される。このホスト１１は例えばマイクロコンピュータにより構成され、前記データ入出力端子５から出力されたデータを受ける。さらに、ホスト１１は、ＮＡＮＤ型フラッシュメモリの動作を制御する各種コマンドＣＭＤ、アドレスＡＤＤ、及びデータＤＴを出力する。ホスト１１からデータ入出力端子５に入力された書き込みデータは、データ入出力バッファ４を介して、カラムデコーダ３によって選択されたデータ記憶回路に供給され、コマンド及びアドレスは制御信号及び制御電圧発生回路７に供給される。
【００１５】
ワード線制御回路６は、メモリセルアレイ１に接続されている。このワード線制御回路６は、メモリセルアレイ１中のワード線を選択し、選択されたワード線に読み出し、書き込みあるいは消去に必要な電圧を印加する。
【００１６】
メモリセルアレイ１、ビット線制御回路２、カラムデコーダ３、データ入出力バッファ４、及びワード線制御回路６は、制御信号及び制御電圧発生回路７に接続され、この制御信号及び制御電圧発生回路７によって制御される。制御信号及び制御電圧発生回路７は、制御信号入力端子８に接続され、ホスト１１から制御信号入力端子８を介して入力される制御信号ＡＬＥ（アドレス・ラッチ・イネーブル）、ＣＬＥ（コマンド・ラッチ・イネーブル）、ＷＥ（ライト・イネーブル）、ＲＥ（リード・イネーブル）によって制御される。
【００１７】
前記ビット線制御回路２、カラムデコーダ３、ワード線制御回路６、制御信号及び制御電圧発生回路７は書き込み回路、及び読み出し回路を構成している。
【００１８】
また、制御信号及び制御電圧発生回路７は、ダイナミックデータキャッシュ（ＤＤＣ）制御回路７−１を有している。このＤＤＣ制御回路７−１は、後述するデータ記憶回路に含まれるダイナミックラッチ回路としての複数のＤＲＡＭのリフレッシュ動作を制御する制御信号を発生する。
【００１９】
図２は、図１に示すメモリセルアレイ１及びビット線制御回路２の構成の一例を示している。図２はロウ方向に並んだ全てのセルを一括書き込む場合を示している。メモリセルアレイ１には複数のＮＡＮＤセルが配置されている。１つのＮＡＮＤセルは、直列接続された例えば３２個のＥＥＰＲＯＭからなるメモリセルＭＣと、選択ゲートＳ１、Ｓ２とにより構成されている。選択ゲートＳ２はビット線ＢＬ０ｅに接続され、選択ゲートＳ１はソース線ＳＲＣに接続されている。各ロウに配置されたメモリセルＭＣの制御ゲートはワード線ＷＬ０〜ＷＬ２９、ＷＬ３０、ＷＬ３１に共通接続されている。また、選択ゲートＳ２はセレクト線ＳＧＤに共通接続され、選択ゲートＳ１はセレクト線ＳＧＳに共通接続されている。
【００２０】
ビット線制御回路２は複数のデータ記憶回路１０を有している。各データ記憶回路１０には、ビット線ＢＬ０、ＢＬ１、…ＢＬｉ−１、ＢＬｉ、…ＢＬ８ｋ−２、ＢＬ８ｋ−１が接続されている。
【００２１】
メモリセルアレイ１は、破線で示すように、複数のブロックを含んでいる。各ブロックは、複数のＮＡＮＤセルにより構成され、例えばこのブロック単位でデータが消去される。
【００２２】
また、１つのワード線に接続された複数のメモリセル（破線で囲まれた範囲のメモリセル）は、１セクタを構成する。このセクタ毎にデータが書き込まれ、読み出される。すなわち、ロウ方向に配置された全メモリセルに対して書き込み又は読み出し動作が同時に実行される。
【００２３】
リード動作、プログラムベリファイ動作及びプログラム動作時において、データ記憶回路１０に接続されている全ビット線が選択される。さらに、外部アドレスに応じて、１本のワード線が選択され、破線で示す、３ページが選択される。この３ページの切り替えはアドレスによって行われる。
【００２４】
図３（ａ）（ｂ）は、メモリセル及び選択トランジスタの断面図を示している。
【００２５】
図３（ａ）（ｂ）はメモリセル及び選択トランジスタの断面図を示している。図３（ａ）はメモリセルを示している。基板５１（後述するＰ型ウェル領域５５）にはメモリセルのソース、ドレインとしてのｎ型拡散層４２が形成されている。Ｐ型ウェル領域５５の上にはゲート絶縁膜４３を介して浮遊ゲート（ＦＧ）４４が形成され、この浮遊ゲート４４の上には絶縁膜４５を介して制御ゲート（ＣＧ）４６が形成されている。図３（ｂ）は選択ゲートを示している。Ｐ型ウェル領域５５にはソース、ドレインとしてのｎ型拡散層４７が形成されている。Ｐ型ウェル領域５５の上にはゲート絶縁膜４８を介して制御ゲート４９が形成されている。
【００２６】
図４は、第１の実施形態に対応する半導体記憶装置の断面図を示している。例えばＰ型半導体基板５１内には、Ｎ型ウェル領域５２、５３、５４、Ｐ型ウェル領域５６が形成されている。Ｎ型ウェル領域５２内にはＰ型ウェル領域５５が形成され、このＰ型ウェル領域５５内にメモリセルアレイ１を構成する低電圧ＮチャネルトランジスタＬＶＮＴｒが形成されている。さらに、前記Ｎ型ウェル領域５３、Ｐ型ウェル領域５６内に、データ記憶回路１０を構成する低電圧ＰチャネルトランジスタＬＶＰＴｒ、低電圧ＮチャネルトランジスタＬＶＮＴｒが形成されている。前記基板５１内には、ビット線とデータ記憶回路１０を接続する高電圧ＮチャネルトランジスタＨＶＮＴｒが形成されている。また、前記Ｎ型ウェル領域５４内には例えばワード線駆動回路等を構成する高電圧ＰチャネルトランジスタＨＶＰＴｒが形成されている。図４に示すように、高電圧トランジスタＨＶＮＴｒ、ＨＶＰＴｒは、低電圧トランジスタＬＶＮＴｒ、ＬＶＰＴｒに比べて例えば厚いゲート絶縁膜を有している。尚、図１中２〜８の周辺の回路もＬＶＮＴｒ、ＬＶＰＴｒ及びＨＶＮＴｒ、ＨＶＰＴｒにより構成されている。
【００２７】
図５は、メモリセルの消去、プログラム、リード時において、図４に示す各部に供給される電圧の例を示している。
【００２８】
（第１の実施形態）
図６に示すように、第１の実施形態において、例えばセルＭＣ１１のデータを読み出すとき、先ずセルＭＣ１１の後に書き込まれたセルＭＣ１２のデータの閾値電圧（閾値レベルとも言う）を調べ、この閾値レベルに応じたリードレベルでセルＭＣ１１から読み出した値をセルＭＣ１１の読み出しデータとする。
【００２９】
図７（ａ）に示すように、先ず、セルＭＣ１１にデータを書き込む。その後、図７（ｂ）に示すように、隣接セルＭＣ１２を書き込む前、つまり、隣接セルが消去レベルにある場合、読み出しレベルＡＲ、ＢＲ、ＣＲで読み出したデータがセルＭＣ１１の読み出しデータである。
【００３０】
また、図７（ｃ）に示すように、例えば隣接セルが消去レベルＥからＡのレベルに書き込まれた場合、浮遊ゲート間容量によって閾値レベル変動している筈である。このため、読み出しレベルＡＲ、ＢＲ、ＣＲにそれぞれ、シフト値ＤＡ１、ＤＢ１、ＤＣ１を加えたレベルＡＲ＋ＤＡ１、ＢＲ＋ＤＢ１、ＣＲ＋ＤＣ１で読み出した値を読み出しデータとする。
【００３１】
また、図７（ｄ）に示すように、例えば隣接セルが消去レベルＥからＢ−レベルに書き込まれた場合、読み出しレベルＡＲ、ＢＲ、ＣＲにそれぞれ、シフト値ＤＡ２、ＤＢ２、ＤＣ２を加えたレベルＡＲ＋ＤＡ２、ＢＲ＋ＤＢ２、ＣＲ＋ＤＣ２で読み出した値を読み出しデータとする。
【００３２】
さらに、図７（ｅ）に示すように、例えば隣接セルが消去レベルＥからＣ−レベルに書き込まれた場合、読み出しレベルＡＲ、ＢＲ、ＣＲにそれぞれ、シフト値ＤＡ３、ＤＢ３、ＤＣ３を加えたレベルＡＲ＋ＤＡ３、ＢＲ＋ＤＢ３、ＣＲ＋ＤＣ３で読み出した値を読み出しデータとする。
【００３３】
ＤＡ１とＤＢ１とＤＣ１はほぼ同じ値となるため、１つの値Ｄ１のみをパラメータとして保持する。同様に、ＤＡ２とＤＢ２とＤＣ２はＤ２、ＤＡ３とＤＢ３とＤＣ３はＤ３として、１つの値をパラメータとして保持する。また、隣のセルの消去レベルが−１Ｖ、Ａ−レベル＝０．５Ｖ、Ｂ−レベル＝１．７Ｖ、Ｃ−レベル＝３Ｖとすると、Ｄ１、Ｄ２、Ｄ３は、隣のセルの変化量にほぼ比例する。このため、Ｄ１＝０．５−（−１）＝１．５、Ｄ２＝１．７−（−１）＝２．７、Ｄ３＝３−（−１）＝４である。したがって、Ｄ１：Ｄ２：Ｄ３＝１：１．８：２．７となる。
【００３４】
図８は、例えば隣接セルＭＣ１２が消去レベルＥからＣ−レベルに変化した場合におけるセルＭＣ１１の閾値レベルの変化を実測した値を示している。図８に示すように、各サンプルにおいて、ワード線ＷＬの位置によって閾値レベルがばらついていることが分かる。
【００３５】
図９は、第１の実施形態の構成を示すものであり、読み出し電圧補正回路７−１の一例を示している。読み出し電圧補正回路７−１は、例えば図１に示す制御信号及び制御電圧生成回路７に設けられている。読み出し電圧補正回路７−１は、シフト値記憶回路７１，７２，７３、読み出しレベル記憶回路７４、選択回路７５を有している。例えばチップのダイソートテスト時に、チップ毎及びワード線毎に、図７（ｃ）（ｄ）（ｅ）に示す各シフト値ＤＡ１、ＤＢ１、ＤＣ１と、ＤＡ２、ＤＢ２、ＤＣ２と、ＤＡ３、ＤＢ３、ＤＣ３をトリミングする。このトリミングされたシフト値をシフト値記憶回路７１，７２，７３にそれぞれ記憶させる。このシフト値記憶回路７１，７２，７３に記憶されたシフト値は、それぞれの読み出しに応じて、選択回路７５により読み出される。選択回路７５により選択されたシフト値は、加算器７６により、リードレベル発生回路７４から読み出された読み出しレベルに加算される。制御信号及び制御電圧発生回路７は、加算器５６から供給される読み出しレベルに基づき読み出し電圧を発生する。
【００３６】
尚、ワード線ＷＬ１〜ＷＬ２９は１つのパラメータとしている。上記トリミングは、例えば図６に示すセルＭＣ１１に、Ａ又はＢ又はＣ−レベルに書き込みを行った後、隣接セルＭＣ１２の閾値レベルを消去レベルＥからＣ−レベルに書き込む。この後、Ａ又はＢ又はＣの読み出しレベルを少しずつ変化させ、セルがオンした時の値をシフト値とする。本ＮＡＮＤ型フラッシュメモリの場合、ワード線に接続されている全セルを一度に読み出すため、一度に読み出された複数のセルの平均を求めることも可能である。
【００３７】
また、ワード線に接続されている半数のセルずつ読み出すタイプの本ＮＡＮＤ型フラッシュメモリの場合、半数ずつ読み出された閾値レベルの平均値を求めることも可能である。
【００３８】
さらに、Ｄ１、Ｄ２、Ｄ３のそれぞれをトリミングせず、これらのうちの１つをトリミングし、残りは、上記Ｄ１：Ｄ２：Ｄ３＝１：１．８：２．７の関係から求めることも可能である。このようにして求められたシフト値がシフト値記憶回路７１，７２，７３にそれぞれ記憶される。
【００３９】
尚、シフト値記憶回路は、不揮発性記憶素子で構成してもよい。又はメモリセルアレイ内のメモリセルにデータを記憶し、電源立ち上げ時に、このメモリセルから読み出して、シフト記憶回路内のレジスタに記憶するようにしてもよい。
【００４０】
図１０は、例えばワード線ＷＬｎに接続されたメモリセルのリード動作を示すフローチャートである。ワード線ＷＬｎが選択されるとき、先ず、ワード線ＷＬｎ＋１に接続されたメモリセルを読み出しレベルＡＲ、ＢＲ、ＣＲで順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１１）。この後、ワード線ＷＬｎに接続されたメモリセルを読み出しレベルＡＲ、ＢＲ、ＣＲで順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１２）。この後、ワード線ＷＬｎに接続されたメモリセルを読み出しレベルＡＲ＋ＤＡ１、ＢＲ＋ＤＢ１、ＣＲ＋ＤＣ１で順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１３）。次ぎに、ワード線ＷＬｎに接続されたメモリセルを読み出しレベルＡＲ＋ＤＡ２、ＢＲ＋ＤＢ２、ＣＲ＋ＤＣ２で順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１４）。さらに、ワード線ＷＬｎに接続されたメモリセルを読み出しレベルＡＲ＋ＤＡ３、ＢＲ＋ＤＢ３、ＣＲ＋ＤＣ３で順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１５）。
【００４１】
このようにして、ワード線ＷＬｎ＋１に接続されたメモリセルの閾値レベルを読み出し、この閾値レベルに応じて、補正値を加えてワード線ＷＬｎに接続されたメモリセルの閾値レベルを読み出し、この読み出し結果の中から適切なレベルで読み出したデータを選択し、読み出し結果としている。このため、隣接セルの書き込みによる閾値レベルの変動を抑制して正確にメモリセルのデータを読み出すことができる。
【００４２】
上記第１の実施形態によれば、チップ毎且つワード線毎にトリミングし、シフト値を求め、このシフト値を用いてリードレベルを補正してメモリセルのデータを読み出している。このため、チップ毎且つワード線毎に隣接するメモリセルの浮遊ゲート間（ＦＧ−ＦＧ）容量によって、隣接セルの閾値レベルが変化する大きさが異なる場合においても、正確にメモリセルの閾値レベルを読み出すことができる。
【００４３】
尚、第１の実施形態において、シフト値は、チップ毎、且つワード線毎にトリミングを行いそれぞれの値を補正値とした。しかし、これに限らず、チップ毎にトリミングして１つのシフト値を求め、このシフト値に応じて補正することも可能である。
【００４４】
また、ワード線毎のシフト値のばらつきが小さい場合、ワード線毎にトリミングをする必要はない。
【００４５】
さらに、チップ毎のシフト値のばらつきが小さい場合、チップ毎にはトリミングをせず、ワード線毎に異なる固定のシフト値をチップ内に持たせることも可能である。
【００４６】
（第２の実施形態）
図１１は、第２の実施形態を示している。上記第１の実施形態は、チップ毎、及びワード線毎にシフト値Ｄ１、Ｄ２、Ｄ３をトリミングし、これらシフト値Ｄ１、Ｄ２、Ｄ３をパラメータとして記憶回路７１、７２、７３に記憶した。これに対して、第２の実施形態は、メモリセルアレイ１にモニタセルを設け、このモニタセルにモニタレベルを設定し、このモニタレベルに応じて、各メモリセルの読み出しレベルを決定する。
【００４７】
すなわち、図１１に示すように、メモリセルアレイ１は、例えば複数のモニタセルＭＭＣ０を有している。このモニタセルＭＭＣ０は、例えばビット線ＢＬ−Ｍ０に接続されている。ビット線ＢＬ−Ｍ０は、データ記憶回路１０にそれぞれ接続され、データ記憶回路１０のモニタセル用のアドレスＹＡ−Ｍ０が供給される。モニタセルＭＭＣ０は、これらアドレスＹＡ−Ｍ０及びロウアドレスにより選択される。すなわち、モニタセルＭＭＣ０は、ワード線を共通とするメモリセルと同時に選択される。モニタセルＭＭＣ０には、上記Ａ又はＢ又はＣ−レベルのうち、例えばＣ−レベルが常に書き込まれる。１つのワード線に接続されるモニタセルの数は１つに限定されるものではなく、図１１に破線で示すＭＭＣ１、ＭＭＣ２のように、例えば１つのワード線にさらに２つ以上のモニタセルを追加し、３個以上のモニタセルから読み出されたレベルの多数決を求めることも可能である。
【００４８】
上記構成において、図６、図７、図１２を参照して動作について説明する。尚、図６は、１つのワード線に１つのモニタセルが接続されている場合を示している。先ず、例えば図６に示すセルＭＣ１１にデータを書き込むとき、セルＭＣ１１と同時に選択されるモニタセルＭＭＣ１１に例えばＣ−レベルを書き込む（Ｓ２１）。次に、セルＭＣ１１を書き込んだ後、セルＭＣ１２を書き込む前に、セルＭＣ１１を読み出す場合、セルＭＣ１１と同時に書き込まれるモニタセルＭＭＣ１１の閾値レベルを調べる（Ｓ２２）。このとき、セルＭＣ１２と同時に選択されるモニタセルＭＭＣ１２は書き込みが行なわれていない。このため、モニタセルＭＭＣ１１は、ＦＧ−ＦＧ間のカップリングの影響を受けていないため、このモニタセルＭＭＣ１１の閾値レベルは変動していない。したがって、セルＭＣ１１は、読み出しレベルＡＲ、ＢＲ、ＣＲで読み出される。また、セルＭＣ１２を書き込むとき、セルＭＣ１２と同時に選択されるモニタセルＭＭＣ１２にはＣ−レベルが書き込まれる（Ｓ２３）。この後、セルＭＣ１１を読み出す場合、先ず、セルＭＣ１１と同時に書き込まれるモニタセルＭＭＣ１１の閾値レベルが検出される。セルＭＣ１２と同時に選択されるモニタセルＭＭＣ１２が書き込まれているため、ＦＧ−ＦＧ間のカップリングの影響により、モニタセルＭＭＣ１１の閾値レベルは変動している。したがって、モニタセルＭＭＣ１１の閾値レベルの変動を検出ことによりシフト値が分かる。
【００４９】
すなわち、図７（ａ）（ｆ）に示すように、メモリセルＭＣ１１と同時に選択されるモニタセルＭＭＣ１１は、メモリセルＭＣ１２及びモニタセルＭＭＣ１２に書き込みが行なわれていない場合、図７（ｂ）に示すＣ−レベルの閾値分布となっている。このため、ＣＲ＋ｘのレベルで読み出すと、モニタセルＭＭＣ１１がオンするため、メモリセルＭＣ１２及びニタセルＭＭＣ１２に書き込みが行なわれていないことが分かり、メモリセルＭＣ１１の読み出しもデータは、ＡＲ、ＢＲ、ＣＲで読み出したデータとなる。
【００５０】
一方、メモリセルＭＣ１１と同時に選択されるモニタセルＭＭＣ１１は、メモリセルＭＣ１２及びモニタセルＭＭＣ１２に書き込みが行われた場合、図７（ｇ）に示すＣ−レベルの閾値分布となっている。このため、ＣＲ＋ｘのレベルで読み出すと、モニタセルＭＭＣ１１がオフしてしまう。このため、“α”だけ読み出しレベルを高めたレベル“ＣＲ＋ｘ＋α”で読み出すと、モニタセルＭＭＣ１１がオンするため、メモリセルＭＣ１２及びニタセルＭＭＣ１２に書き込みが行われたことが分かる。したがって、メモリセルＭＣ１１の読み出しは、ＡＲ、ＢＲ、ＣＲに補正値“α”（ＤＡ３，ＤＢ３、ＤＣ３）を加えたレベルで読み出した結果からＭＣ１２のデータに応じて適切なデータを選び出す。したがって、“α”を求めることにより、チップ毎及びワード線毎に異なるシフト値を検出することができる。
【００５１】
図１３は、第２の実施形態の読み出し動作を示している。メモリセルＭＣ１１のシフト値を検出するため、先ず、モニタセルＭＭＣ１１の閾値レベルを読み出しレベル“ＣＲ＋ｘ”で読み出され（Ｓ２４）。モニタセルＭＭＣ１１がオンしたかどうかが判別される（Ｓ２５）。この結果、モニタセルＭＭＣ１１がオンしない場合、すなわち、読み出しレベルがモニタセルＭＭＣ１１の閾値レベルより低い場合、読み出しレベル“ｘ”が例えば“α”だけ増加され（Ｓ２６）、再度、読み出される。このようにして、モニタセルＭＭＣ１１の読み出し動作が行なわれ、モニタセルＭＭＣ１１がオンした場合、図７（ｅ）に示すシフト値ＤＣ３を検出することができる。すなわち、Ｃ−レベルに書き込まれたモニタセルＭＭＣ１２と隣接するモニタセルＭＭＣ１１もＣ−レベルに書き込まれるため、シフト値ＤＡ３、ＤＢ３、ＤＣ３＝Ｄ３の値がわかる。ここでは、ＤＡ３＝ＤＢ３＝ＤＣ３としている。Ｄ２、Ｄ１の値は、上記関係式Ｄ１：Ｄ２：Ｄ３＝１：１．８：２．７より求められる（Ｓ２７）。
【００５２】
次に、第１の実施形態と同様の動作が行なわれる。つまり、セルＭＣ１２（ワード線ＷＬｎ＋１に接続されたセル）のレベルが消去レベルＥからレベルＥ（閾値変化なし）、Ａ−レベル、Ｂ−レベル、Ｃ−レベルに変化したかが判断する（Ｓ１１）。この後、セルＭＣ１１（ワード線ＷＬｎに接続されたメモリセル）を読み出しレベルＡＲ、ＢＲ、ＣＲで順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１２）。この後、ワード線ＷＬｎに接続されたメモリセル（ＭＣ１１）を読み出しレベルＡＲ＋ＤＡ１、ＢＲ＋ＤＢ１、ＣＲ＋ＤＣ１で順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１３）。次ぎに、ワード線ＷＬｎに接続されたメモリセル（ＭＣ１１）を読み出しレベルＡＲ＋ＤＡ２、ＢＲ＋ＤＢ２、ＣＲ＋ＤＣ２で順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１４）。さらに、ワード線ＷＬｎに接続されたメモリセル（ＭＣ１１）を読み出しレベルＡＲ＋ＤＡ３、ＢＲ＋ＤＢ３、ＣＲ＋ＤＣ３で順次リードし、閾値レベルがどのレベルにあるかを判断する（Ｓ１５）。このようにして、ワード線ＷＬｎ＋１に接続されたメモリセルの閾値レベルを読み出し、この閾値レベルに応じて、補正値を加え、ワード線ＷＬｎに接続されたメモリセルの閾値レベルを読み出す。この読み出し結果の中から適切なレベルで読み出したデータを選択し、読み出し結果とする。このようにすることで、隣接セルの書き込みによる閾値レベルの変動を抑制して正確にメモリセルのデータを読み出すことができる。
【００５３】
上記第２の実施形態によれば、メモリセルアレイ１にモニタセルＭＭＣを設け、このモニタセルＭＭＣに、閾値レベルＡ、Ｂ、Ｃのうちの１つを常に書き込み、あるメモリセルから閾値レベルを読み出す場合、このメモリセルと同時に選択されるモニタセルＭＭＣの閾値レベルの変化量からシフト値Ｄ３を検出し、このシフト値から関連する他のシフト値Ｄ１、Ｄ２を算出し、これらシフト値Ｄ１、Ｄ２、Ｄ３を読み出しレベルに付加して、読み出すべきメモリセルからその閾値レベルを読み出している。このため、隣接セル間のカップリングの影響を抑制するため、あるセルにデータを書き込む場合、あるセルを本来の閾値レベルより低めのレベルに書き込み、この後、このセルの周囲に隣接するセルを書き込んだ後、再び、元のセルを本来の閾値レベルまでデータを書き込むという、従来必要であった書き込み動作を行う必要がない。したがって、書き込み速度を高速化することが可能である。
【００５４】
また、ワード線ＷＬに接続されたメモリセルのデータを読み出す場合、先ず、チップ毎又はワード線毎にばらついている、隣接セル間のカップリングの影響を、モニタセルを用いて補正値を求める。次に、ワード線ＷＬの後に選択されるワード線ＷＬｎ＋１に接続されたメモリセルの閾値レベルを読み出す。この読み出した閾値レベルに応じて、前に求めた補正値を加えてワード線ＷＬｎに接続されたメモリセルの閾値レベルを読み出す。この読み出し結果の中から適切なレベルで読み出したデータを選択し、読み出し結果とする。このため、第１の実施形態のように、予め各ワード線毎のシフト値をトリミングする必要がない。このため、テスト工程を簡単化することができる。また、モニタセルを複数個用意し、多数決を取ることも可能である。
【００５５】
上記第２の実施形態は、ロウ方向に配置された全てのセルを一括して書き込む場合について説明したが、これに限定されるものではなく、ロウ方向に並んだセルの半数を込む場合にも、同様に実施可能である。
【００５６】
また、第２の実施形態は、４値（２ビット）、８値（３ビット）、１６値（４ビット）を記憶する場合も同様に実施することが可能である。
【００５７】
（第３の実施形態）
図１４乃至図１７は、第３の実施形態を示している。
【００５８】
上述したように、ＮＡＮＤ型フラッシュメモリは、ロウ方向に並んだセル全て、又は半数のセルを例えば２ＫＢ（Ｂ：バイト）のデータとして一括して書き込んだり、読み出したりする。また、誤書き込み又は隣接セルの書き込みの影響により、既に書き込まれたセルの閾値レベルが変化した場合、読み出されたデータの精度が低下することがある。そこで、データの精度を向上させるため、例えば２ＫＢのデータに対して６４ＢのＥＣＣ（Error Correction Code）コードを付加し、２ＫＢ＋６４Ｂのデータとして、データを書き込んだり、読み出したりされている。
【００５９】
このため、図１に示すように、例えばホスト１１にＥＣＣ回路１１−１が設けられ、このＥＣＣ回路１１−１により、メモリセルから誤ったデータが読み出された場合、誤りを訂正し、正しいデータを出力するように構成されている。このＥＣＣ回路１１−１は、ホスト１１に限らず、例えばＮＡＮＤ型フラッシュメモリの内部に設けられていてもよい。
【００６０】
ＥＣＣ符号としては、例えば４〜８ビットの訂正に適用されるＢＣＨ符号、又は４〜８シンボルの訂正に適用されるリードソロモン(Reed-Solomon)符号が用いられている。さらに、１００ビット以上を訂正するＢＣＨ符号、あるいは１００シンボル以上を訂正するリードソロモン符号なども用いることも可能である。しかし、これらの符号を用いて、１００ビット又は１００シンボル以上の訂正を実現すると、データに付加されるＥＣＣコードが増大するという問題がある。このため、近時、ＥＣＣコードの増大を抑制して強力な訂正能力を有するＬＤＰＣ(Low Density Parity Check)符号が用いられることがある。
【００６１】
ＬＤＰＣ符号の符号化は、他の符号と同様に、例えば１６ＫＢのデータに対してＥＣＣコードを付加し、メモリセルに書き込む。すなわち、ホスト１１のＥＣＣ回路１１−１は、図示せぬ符号化器と複合化器を含み、符号化器は、例えば１６ＫＢのデータに対して例えば検査ビットとしてのＥＣＣコードを付加する。このＥＣＣコードが付加されたデータは、メモリセルアレイ１の各ページに書き込まれる。このため、１ページのデータは、書き込みデータと検査ビットにより構成されている。また、復号化器は、メモリセルから読み出した検査ビットのデータを確率値とし、この確率値に基づき、メモリセルから読み出されたデータを補正する。すなわち、復号化器は、確率値に基づき、メモリセルから読み出された誤ったデータを訂正し、正しいデータを出力する。このように、ＬＤＰＣ符号の場合、読み出したデータが“１”である場合、読み出したデータが“１”である確率値も必要とする。
【００６２】
図１４乃至図１７は、１６値（４ビット）を記憶するＮＡＮＤ型フラッシュメモリのメモリセルに書き込まれるデータの割付を示しており、図１４から図１７の順に割付けられている。４ビットは、アドレスにより選択されるロワーページ(Lower Page)、アッパーページ(Upper Page)、ハイアーページ(Higher Page)、トップページ(Top Page)により区別される。図１４乃至図１７において、破線０〜６４は読み出しレベルを示している。
【００６３】
通常の読み出し動作において、閾値分布の境界の読み出しレベルで読み出される。例えば図１４に示すロワーページは、図１６に示す読み出しレベル２９によりメモリセルの閾値レベルを読み出し、メモリセルの閾値レベルがＨ−レベル（Ｈ−Ｌｅｖｅｌ）以上か未満かを判別する。Ｈ−レベル以上の場合、メモリセルはオフするため“Ｈ”（データ“０”）となり、Ｈ−レベル未満の場合、セルはオンするため“Ｌ”（データ“１”）となる。
【００６４】
図１４に示すアッパーページは、図１５に示す読み出しレベル１３、及び図１７に示す読み出しレベル４５の２つの読み出しレベルによりメモリセルの閾値レベルが読み出され、メモリセルの閾値レベルがＤ−レベル以上か未満か、Ｌ−レベル以上か未満かの２回のリード動作で区別される。すなわち、読み出された閾値レベルがＤ−レベル以上、Ｌ−レベル未満の場合、“Ｈ”（データ“０”）となり、Ｄ−レベル未満又は、Ｌ−レベル以上の場合、“Ｌ”（データ“１”）となる。
【００６５】
図１４に示すハイアーページは、図１４に示す読み出しレベル５，図１５に示す読み出しレベル２１，図１６に示す読み出しレベル３７，図１７に示す読み出しレベル５３の４つの読み出しレベルによりメモリセルの閾値レベルが読み出され、メモリセルの閾値レベルがＢ−レベル以上か未満か、Ｆ−レベル以上か未満か、Ｊ−レベル以上か未満か、Ｎ−レベル以上か未満かの４回のリード動作で区別される。すなわち、Ｂ−レベル以上Ｆ−レベル未満、又はＪ−レベル以上Ｎ−レベル未満の場合、“Ｈ”（データ“０”）となり、Ｂ−レベル未満、又はＦ−レベル以上Ｊ−レベル未満の場合、又はＮ−レベル以上の場合、“Ｌ”（データ“１”）となる。
【００６６】
図１４に示すトップページは、図１４に示す読み出しレベル１、９、図１５に示す読み出しレベル１７、２５、図１６に示す読み出しレベル３３、４１、図１７に示す読み出しレベル４９，５７の８つの読み出しレベルによりメモリセルの閾値レベルが読み出され、メモリセルの閾値レベルがＡ−レベル以上か未満か、Ｃ−レベル以上か未満か、Ｅ−レベル以上か未満か、Ｇ−レベル以上か未満か、Ｉ−レベル以上か未満か、Ｋ−レベル以上か未満か、Ｍ−レベル以上か未満か、Ｏ−レベル以上か未満かの８回のリード動作で区別される。すなわち、Ａ−レベル以上Ｃ−レベル未満、Ｅ−レベル以上Ｇ−レベル未満、Ｉ−レベル以上Ｋ−レベル未満、Ｎ−レベル以上、Ｏ−レベル未満の場合、“Ｈ”（データ“０”）となり、Ａ−レベル未満、Ｃ−レベル以上Ｅ−レベル未満、Ｇ−レベル以上Ｉ−レベル未満、Ｋ−レベル以上Ｎ−レベル未満Ｏ−レベル以上の場合、“Ｌ”（データ“１”）となる。
【００６７】
一方、ＬＤＰＣ符号の場合、上記のようにして読み出された各データに対して確率値が必要である。このため、通常では、１５−レベルにより１６値のデータを区別しているが、例えば各レベルと、各レベルの下の１つのレベルと、上の２つのレベルの合計４回を読み出す。具体的には、ロワーページの読み出しの場合、図１５、図１６に矢印を付して示すように、読み出しレベル２８、２９、３０、３１の４つの読み出しレベルにより閾値レベルが読み出され、４つの読み出しレベルに応じて読み出された“Ｈ”の数がそれぞれ計数される。この計数された回数から確率値が求められる。すなわち、図１４乃至図１７において、
４回“Ｈ”（データ“０”）の場合、
“Ｈ”（データ“０”）の確率は、１００％（４／４）、
３回“Ｈ”（データ“０”）の場合、
“Ｈ”（データ“０”）の確率は、７５％（３／４）、
２回“Ｈ”（データ“０”）の場合、
“Ｈ”（データ“０”）の確率は、５０％（２／４）、
１回“Ｈ”（データ“０”）の場合、
“Ｈ”（データ“０”）の確率は、２５％（１／４）
であるとする。アッパーページ、ハイアーページ、トップページも同様に、図１４乃至図１７において、矢印で示す４つの読み出しレベルを用いて閾値レベルが読み出され、“Ｈ”の数がそれぞれ計数される。この計数された回数から確率値が求められる。読み出された１ページのデータのそれぞれのデータが確率値となり、ＥＣＣ回路１１−１は、この求められた１ページ分の確率値に基づき、ＬＤＰＣ符号を処理し、誤ったデータを訂正する。
【００６８】
図１８は、上記読み出しシーケンスを示している。ロワーページ、アッパーページ、ハイアーページ、トップページとも同じシーケンスである。各ページの各読み出しレベルに対して、読み出しレベルより１つ下のレベル、読み出しレベル、読み出しレベルより１つ上のレベル、２つ上のレベルにより、４回読み出される（Ｓ３１、Ｓ３２、Ｓ３３、Ｓ３４）。すなわち、１つのデータを読み出すために、ワード線の電位が４回変更される。各読み出しレベル、この読み出しレベルより１つ下のレベル、１つ上のレベル、２つ上のレベルは、後述するように、例えば閾値レベルの範囲を４等分したレベルに設定される。これら読み出しレベルを用いてＮＡＮＤ型フラッシュメモリのセルから読み出されたデータは、図２に示すデータ記憶回路１０に保持され、このデータ記憶回路１０から図１に示すデータ入出力バッファ４、データ入出力端子５を介してホスト１１のＥＣＣ回路１１−１に転送される（Ｓ３５、Ｓ３６）。データ記憶回路１０からホスト１１にデータを転送している間に、次のデータがメモリセルから読み出され、データ記憶回路１０に記憶される。ホスト１１に転送されたデータは、ＬＤＰＣ符号のＥＣＣ回路１１−２によりエラー訂正処理が行なわれる（Ｓ３７）。エラー訂正されたデータはホスト１１から出力される。ＥＣＣ回路１１−２による訂正処理は、本実施形態の本質ではないため、具体的な説明は省略する。
【００６９】
図１９（ａ）は、ロワーページにおける読み出しシーケンスを示しており、前述したように、Ｈ−レベルは、読み出しレベル２８，２９，３０，３１によりデータが読み出される（Ｓ４０）。
【００７０】
図１９（ｂ）は、アッパーページにおける読み出しシーケンスを示しており、Ｌ−レベルは、読み出しレベル４４，４５，４６，４７によりデータが読み出され（Ｓ４１）、Ｄ−レベルは、読み出しレベル１２，１３，１４，１５によりデータが読み出される（Ｓ４２）。
【００７１】
図１９（ｃ）は、ハイアーページにおける読み出しシーケンスを示しており、Ｎ−レベルは、読み出しレベル５２，５３，５４，５５によりデータが読み出され（Ｓ４３）、Ｊ−レベルは、読み出しレベル３６，３７，３８，３９によりデータが読み出される（Ｓ４４）。さらに、Ｆ−レベルは、読み出しレベル２０，２１，２２，２３によりデータが読み出され（Ｓ４５）、Ｂ−レベルは、読み出しレベル４，５，６，７によりデータが読み出される（Ｓ４６）。
【００７２】
図２０は、トップレベルにおける読み出しシーケンスを示しており、Ｏ−レベルは、読み出しレベル５６，５７，５８，５９によりデータが読み出され（Ｓ４７）、Ｍ−レベルは、読み出しレベル４８，４９，５０，５１によりデータが読み出される（Ｓ４８）。さらに、Ｋ−レベルは、読み出しレベル４０，４１，４２，４３によりデータが読み出され（Ｓ４９）、Ｉ−レベルは、読み出しレベル３２，３３，３４，３５によりデータが読み出される（Ｓ５０）。また、Ｇ−レベルは、読み出しレベル２４，２５，２６，２７によりデータが読み出され（Ｓ５１）、Ｅ−レベルは、読み出しレベル１６，１７，１８，１９によりデータが読み出される（Ｓ５２）。さらに、Ｃ−レベルは、読み出しレベル８，９，１０，１１によりデータが読み出され（Ｓ５３）、Ａ−レベルは、読み出しレベル０，１，２，３によりデータが読み出される（Ｓ５４）。
【００７３】
尚、ＥＣＣ回路１１−２によりエラー訂正処理している間に、メモリセルからデータを読み出し、データ記憶回路１０からＥＣＣ回路１１−１にデータを転送することも可能である。
【００７４】
図１４乃至図１７において、Ｚ−レベルを−１．６Ｖ、Ｏ−レベルを４Ｖとすると、各分布のレベルは、（４Ｖ−（−１．６Ｖ））／１５＝５．６／１５＝約０．３７Ｖとなる。ＬＤＰＣ符号を用いた場合、本例のように、１つのレベルに４つの読み出しレベルを設けると、１つの読み出しレベル間は、０．３７Ｖ／４＝約０．０９２５Ｖとなる。但し、レベルが高いほどデータリテンションが悪いため、高いレベルほど、少しずつレベル間隔を広げることが好ましい。また、レベルが低いほどデータリテンションが良いため、低いレベルほど、少しずつレベル間隔を狭めることが好ましい。このように読み出しレベルを設定することにより、読み出しレベルの高い場合、及び低い場合において、データリテンションを一定に確保して、確実に閾値レベルを読み出すことができる。
【００７５】
上記第３の実施形態によれば、メモリセルに記憶された１つの閾値レベルを読み出すために、ワード線のレベルを４回変えることにより、ＬＤＰＣ符号のエラー訂正に必要な確率値を求めることができる。このため、エラー訂正として、訂正能力が他のＥＣＣ符号に比べて高く、記憶する検査ビットが少なく、高い訂正能力を有する、ＬＤＰＣ符号を用いることができる。
【００７６】
尚、上記第３の実施形態において、確率値を求めるために、読み出しレベルを変えて４回の読み出し動作を行った。しかし、これに限定されるものではなく、読み出しレベルを６回、８回と何回か変えることも可能である。また、読み出しレベルは変えずに同じレベルで４回の読み出し動作を行い、これら読み出し動作により読み出された“Ｈ”レベルの数を計数してもよい。さらに、この他のセルから読み出す場合の動作のタイミング、プリチャージ電圧などを少しずつ変化させて計数することも可能である。
【００７７】
（変形例１）
図２１は、図２に示すデータ記憶回路１０の一例を示している。
【００７８】
このデータ記憶回路１０は、例えば４ビット、１６値のデータを書き込み、読み出す場合を示しており、プライマリデータキャッシュ（ＰＤＣ）、セコンダリデータキャッシュ（ＳＤＣ）、ダイナミックデータキャッシュ（ＤＤＣ０、ＤＤＣ１、ＤＤＣ２、ＤＤＣ３）、テンポラリデータキャッシュ（ＴＤＣ）を有している。ＳＤＣ、ＰＤＣ、ＤＤＣ０、ＤＤＣ１、ＤＤＣ２、ＤＤＣ３は、書き込み時に入力データを保持し、読み出し時に読み出しデータを保持し、ベリファイ時に一時的にデータを保持し、多値データを記憶する際に内部データの操作に使用される。ＴＤＣは、データの読み出し時にビット線のデータを増幅し、一時的に保持するとともに、多値データを記憶する際に内部データの操作に使用される。
【００７９】
ＳＤＣは、スタティックラッチ回路を構成するクロックドインバータ回路６１ａ、６１ｂ、及びトランジスタ６１ｃ、６１ｄにより構成されている。トランジスタ６１ｃはクロックドインバータ回路６１ａの入力端と、クロックドインバータ回路６１ｂの入力端の間に接続されている。このトランジスタ６１ｃのゲートには信号ＥＱ２が供給されている。トランジスタ６１ｄはクロックドインバータ回路６１ａの出力端と接地間に接続されている。このトランジスタ６１ｄのゲートには信号ＰＲＳＴが供給されている。ＳＤＣのノードＮ２ａは、カラム選択トランジスタ６１ｅを介して入出力データ線ＩＯｎに接続され、ノードＮ２ｂは、カラム選択トランジスタ６１ｆを介して入出力データ線ＩＯに接続される。これらトランジスタ６１ｅ、６１ｆのゲートにはカラム選択信号ＣＳＬｉが供給されている。ＳＤＣのノードＮ２ａは、トランジスタ６１ｇ、６１ｈを介してＰＤＣのノードＮ１ａに接続されている。トランジスタ６１ｇのゲートには信号ＢＬＣ２が供給され、トランジスタ６１ｈのゲートには信号ＢＬＣ１が供給されている。
【００８０】
ＰＤＣは、スタティックラッチ回路を構成するクロックドインバータ回路６１ｉ、６１ｊ及びトランジスタ６１ｋにより構成されている。トランジスタ６１ｋは、クロックドインバータ回路６１ｉの入力端とクロックドインバータ回路６１ｊの入力端の相互間に接続されている。このトランジスタ６１ｋのゲートには信号ＥＱ１が供給されている。ＰＤＣのノードＮ１ｂはトランジスタ６１ｌのゲートに接続されている。このトランジスタ６１ｌの電流通路の一端はトランジスタ６１ｍを介して接地されている。このトランジスタ６１ｍのゲートには信号ＣＨＫ１が供給されている。また、トランジスタ６１ｌの電流通路の他端はトランスファーゲートを構成するトランジスタ６１ｎ、６１ｏの電流通路の一端に接続されている。このトランジスタ６１ｎのゲートには信号ＣＨＫ２ｎが供給されている。また、トランジスタ６１ｏのゲートはノードＮ３に接続されている。トランジスタ６１ｎ、６１ｏの電流通路の他端は、信号線ＣＯＭｉに接続されている。この信号線ＣＯＭｉは全データ記憶回路１０に共通に接続され、この信号線ＣＯＭｉのレベルにより、全データ記憶回路１０のベリファイが完了したかどうかを判定できる。すなわち、後述するように、ベリファイが完了すると、ＰＤＣのノードＮ１ｂがローレベル（ノードＮ１ａがハイレベル）となる。この状態において、信号ＣＨＫ１、ＣＨＫ２ｎをハイレベルとすると、ベリファイが完了している場合、信号ＣＯＭｉがハイレベルとなる。
【００８１】
さらに、前記ＴＤＣは、例えばＭＯＳキャパシタ６１ｐにより構成されている。このキャパシタ６１ｐは、一端が前記トランジスタ６１ｇ、６１ｈの接続ノードＮ３に接続され、他端に後述する信号ＢＯＯＳＴが供給されている。また、接続ノードＮ３には、トランジスタ６１ｑＡ〜６１ｑＤを介してＤＤＣ０、ＤＤＣ１、ＤＤＣ２、ＤＤＣ３が接続される。前記トランジスタ６１ｑＡ〜６１ｑＤのゲートには、信号ＲＥＧＡ〜ＲＥＧＤが供給されている。
【００８２】
ダイナミックラッチ回路を構成するＤＤＣ０、ＤＤＣ１、ＤＤＣ２、ＤＤＣ３は、トランジスタ６１ｒＡ〜６１ｒＤにより構成されている。トランジスタ６１ｒＡ〜６１ｒＤの電流通路の一端には信号ＶＰＲＥが供給され、他端は前記トランジスタ６１ｑＡ〜６１ｑＤの電流通路にそれぞれ接続されている。このトランジスタ６１ｒＡ〜６１ｒＤのゲートはトランジスタ６１ｓＡ〜６１ｓＤを介して前記ＰＤＣのノードＮ１ａにそれぞれ接続されている。このトランジスタ６１ｓＡ〜６１ｓＤのゲートには信号ＤＴＧＡ〜ＤＴＧＤがそれぞれ供給されている。
【００８３】
さらに、前記接続ノードＮ３にはトランジスタ６１ｔ、６１ｕの電流通路の一端が接続されている。トランジスタ６１ｕの電流通路の他端には信号ＶＰＲＥが供給され、ゲートにはＢＬＰＲＥが供給されている。前記トランジスタ６１ｔのゲートには信号ＢＬＣＬＡＭＰが供給されている。このトランジスタ６１ｔの電流通路の他端はトランジスタ６１ｖを介してビット線ＢＬｏの一端に接続され、トランジスタ６１ｗを介してビット線ＢＬｅの一端に接続されている。ビット線ＢＬｏの一端はトランジスタ６１ｘの電流通路の一端に接続されている。このトランジスタ６１ｘのゲートには信号ＢＩＡＳｏが供給されている。ビット線ＢＬｅの一端はトランジスタ６１ｙの電流通路の一端に接続されている。このトランジスタ６１ｙのゲートには信号ＢＩＡＳｅが供給されている。これらトランジスタ６１ｘ、６１ｙの電流通路の他端には、信号ＢＬＣＲＬが供給されている。トランジスタ６１ｘ、６１ｙは、信号ＢＩＡＳｏ、ＢＩＡＳｅに応じてトランジスタ６１ｖ、６１ｗと相補的にオンとされ、非選択のビット線に信号ＢＬＣＲＬの電位を供給する。
【００８４】
尚、前記ノードＮ３と接地間には、例えばＭＯＳキャパシタ６１ｚが接続されている。このキャパシタ６１ｚは、後述するＴＤＣのキャパシタ６１ｐを信号ＢＯＯＳＴにより昇圧する際、カップリングにより、ノードＮ３の電位が上昇し過ぎないように、ノードＮ３の電位を調整する。以後、ＰＤＣのデータはノードＮ１ａの電位、ＳＤＣのデータはノードＮ２ａの電位、ＴＤＣのデータはノードＮ３の電位とする。ＤＤＣ０〜ＤＤＣ３のデータは、トランジスタ６１ｒＡ〜６１ｒＤのゲートの電位とする。
【００８５】
上記データ記憶回路１０の各部に供給される信号は、図１に示す制御電圧及び制御信号生成回路７により発生される。また、各メモリセルの複数のページのデータはアドレスを変えて読み出される。
【００８６】
図２２は、上記データ記憶回路１０を使用した、通常のリードシーケンスを示している。
【００８７】
先ず、ロワーページのデータをメモリセルから読み出してＰＤＣにより保持した後、ＰＤＣからＳＤＣにデータを移す（Ｌ（３０μｓ））。ロワーページのデータをＳＤＣから外部に出力している間（ＤｏｕｔＬ）に、アッパーページのデータをメモリセルから読み出し、ＰＤＣで保持する（Ｕ（６０μｓ））。この後、ＰＤＣのデータをＳＤＣに移し、アッパーページのデータをＳＤＣから外部に出力している間（ＤｏｕｔＵ）に、ハイアーページのデータをメモリセルから読み出しＰＤＣに保持する（Ｈ（１２０μｓ））。この後、ＰＤＣのデータをＳＤＣに移し、ハイアーページのデータをＳＤＣから外部に出力している間（ＤｏｕｔＨ）に、トップページのデータをメモリセルから読み出しＰＤＣに保持する（Ｔ（２４０μｓ））。この後、ＰＤＣのデータをＳＤＣに移し、トップページのデータをＳＤＣから外部に出力する（ＤｏｕｔＴ）。このように、通常の動作シーケンスの場合、４ページのデータをメモリセルから読み出し、外部に転送する場合、転送動作を４回行っている。
【００８８】
これに対して、図２３は、図１８に対応する第３の実施形態の動作シーケンスを示している。第３の実施形態は、１ページのデータを４回レベルを変えて読み出し、この読み出されたデータをそれぞれ外部に出力している。このため、第３の実施形態は、図２３に示すように、外部への転送動作が、図２２に示す通常の動作シーケンスの４倍必要となる。すなわち、通常の動作シーケンスの場合、外部への転送動作は、４回であったが、第３の実施形態の場合、４×４＝１６回必要となる。
【００８９】
一方、図２４、図２５、図２６乃至図２９は、第３の実施形態の変形例１を示している。変形例１の場合、先ず、図２４、図２５、図２８に示すように、セルからロワーページのデータを、レベル２９（対応レベル）により読み出し、ＰＤＣに保持する（３１ａ）。この後、ＰＤＣからＳＤＣにデータを移し、ロワーページのデータをＳＤＣから外部に出力する（３１ｂ）。この出力している間に、セルからロワーページのデータを対応レベルより２つ上レベル（レベル３１）で読み出し、ＰＤＣに保持する（３１ｃ）。ＰＤＣのデータとＳＤＣに保持されているレベル２９で読み出されたデータとのＸＯＲ（排他的論理和）を取り、この結果をＤＤＣ０に足す（３１ｄ）。ＤＤＣ０が“Ｈ”となるのはメモリセルがレベル２９以上、レベル３１以下のときだけである。
【００９０】
次に、セルからロワーページのデータを対応レベルより１つ上のレベル（レベル３０）で読み出す（Ｓ３１ｅ）。この読み出したデータと、ＰＤＣに記憶されている２つ上のレベル（レベル３１）で読み出さされたデータとのＸＯＲを取り、この結果をＤＤＣ１に足す（Ｓ３１ｆ）。ＤＤＣ１が“Ｈ”となるのはメモリセルがレベル３０以上、レベル３１以下のときだけである。
【００９１】
この後、セルからロワーページのデータを対応レベルより１つ下のレベル（レベル２８）で読み出す（Ｓ３１ｇ）。この読み出したデータとＳＤＣに記憶されている対応レベル（レベル２９）で読み出されたデータとのＸＯＲを取り、この結果をＤＤＣ１に足（Ｓ３１ｈ）。この結果、ＤＤＣ１が“Ｈ”となるのはメモリセルがレベル３０以上レベル３１以下、レベル２８以上レベル２９以下のときだけである。
【００９２】
上記と同様にして、アッパーページ、ハイアーページ、トップページの対応レベルによりセルからデータを読み出し、この後、ＰＤＣからＳＤＣにデータを移し、ロワーページのデータをＳＤＣから外部に出力している間に、対応レベルより２つ上のレベルで読み出したデータと対応レベルで読み出したデータとのＸＯＲをとり、この結果をＤＤＣ０に足す。また、対応レベルより１つ上のレベルにより読み出したデータと対応レベルより２つ上のレベルで読み出したデータとのＸＯＲをとり、この結果をＤＤＣ１に足す。さらに、対応レベルで読み出したデータと、対応レベルより１つ下のレベルで読み出したデータとのＸＯＲをとり、この結果をＤＤＣ１に足す。最後に、これらのＤＤＣ０とＤＤＣ１のデータを夫々外部に出力する（Ｓ３６ａ、Ｓ３６ｂ）。
【００９３】
上記ＸＯＲは、例えば次のようにして求められる。先ず、ＸＯＲを取るデータをＤＤＣ２とＤＤＣ３に転送する。ＤＤＣ２とＤＤＣ３に保持されたデータの組合せは、次の４通りとなる。
【００９４】
ＤＤＣ２  １  １  ０  ０
ＤＤＣ３  １  ０  １  ０
この後、信号ＶＰＲＥ＝Ｖｓｓ、信号ＢＬＰＲＥ＝Ｖｄｄとして、ＴＤＣをＶｓｓに設定する。次いで、信号ＶＰＲＥ＝Ｖｄｄ、信号ＲＥＧ２＝“Ｈ”としてＤＤＣ２のデータをＴＤＣにコピーする。信号ＶＰＲＥ＝Ｖｓｓ、信号ＲＥＧ３＝“Ｈ”としてＤＤＣ３が“１”の場合、ＴＤＣを強制的にＶｓｓとする。この後、ＴＤＣのデータをＰＤＣに移す。すると、ＤＤＣ２とＤＤＣ３及びＰＤＣに保持されたデータの組合せは、次のようになる。
【００９５】
ＤＤＣ２  １  １  ０  ０
ＤＤＣ３  １  ０  １  ０
ＰＤＣ    ０  １  ０  ０
この後、信号ＶＰＲＥ＝Ｖｓｓ、信号ＢＬＰＲＥ＝ＶｄｄとしてＴＤＣをＶｓｓに設定する。次に、信号ＶＰＲＥ＝Ｖｄｄ、信号ＲＥＧ３＝“Ｈ”としてＤＤＣ３のデータをＴＤＣにコピーする。信号ＶＰＲＥ＝Ｖｓｓ、ＲＥＧ２＝“Ｈ”とし、ＤＤＣ２のデータが“１”の場合、ＴＤＣを強制的にＶｓｓに設定する。すると、ＤＤＣ２、ＤＤＣ３、ＰＤＣ及びＴＤＣに保持されたデータの組合せは、次のようになる。
【００９６】
ＤＤＣ２  １  １  ０  ０
ＤＤＣ３  １  ０  １  ０
ＰＤＣ    ０  １  ０  ０
ＴＤＣ    ０  ０  １  ０
この後、信号ＤＴＧ２を一旦“Ｈ”とし、ＰＤＣのデータをＤＤＣ２に移す。次いで、信号ＶＰＲＥ＝Ｖｄｄ、信号ＲＥＧ２＝“Ｈ”として、ＤＤＣ２のデータが“１”の場合、ＴＤＣを強制的にＶｄｄにする。この後、ＴＤＣのデータをＰＤＣに移す。すると、ＤＤＣ２、ＤＤＣ３及びＰＤＣに保持されたデータの組合せは、次のようになる。
【００９７】
ＤＤＣ２  ０  １  ０  ０
ＤＤＣ３  １  ０  １  ０
ＰＤＣ    ０  １  １  ０
上記動作により、ＰＤＣに、ＤＤＣ２とＤＤＣ３のＸＯＲの結果が残る。
【００９８】
上記変形例１によれば、外部への転送動作を６回（＝４＋２）に削減することができる。しかし、上記キャッシュを使った場合の、転送時間は１つのレベルの読み出し時間を３０μｓ、外部への転送時間を４５μｓとすると、図２２に示す例の場合の動作時間は、次式のようになる。
【００９９】
（３０μｓ＋６０μｓ＋１２０μｓ＋２４０μｓ）×４＋４５μｓ
＝１８００μｓ＋４５μｓ
また、図２４に示す変形例１の場合の動作時間は、次式のようになる。
【０１００】
（３０μｓ＋６０μｓ＋１２０μｓ＋２４０μｓ）×４＋４５μｓ×３
＝１８００μｓ＋１３５μｓ
このように、変形例１の場合、動作時間が増加してしまう問題がある。
【０１０１】
（変形例２）
図３０乃至図３４は、変形例２を示している。変形例２は、図３１乃至図３４に示すように、セルの閾値、及びロワーページ、アッパーページ、ハイアーページ、及びトップページを割り付け、下のレベルから“Ｈ”が読み出された回数を計数する。すなわち、データ記憶回路１０の各キャッシュをカウンタのように動作させる。すると、計数した数が図３１乃至図３４に示すように、ＰＤＣ、ＤＤＣ０、ＤＤＣ１、ＤＤＣ２、ＤＤＣ３、ＳＤＣに記憶される。これら記憶された値が、ロワーページ、アッパーページ、ハイアーページ、トップページの割付の反転となる。しかし、“０”−レベルより低いと、ロワーページ、アッパーページ、ハイアーページ、トップページは、“１１１１”であり、“１”−レベルより高いと、ロワーページ、アッパーページ、ハイアーページ、トップページは、“１１１０”である。このため、先ず、ＳＤＣ、ＤＤＣ３、ＤＤＣ２、ＤＤＣ１、ＤＤＣ０を“００００１１”にセットする。
【０１０２】
この後、“０”−レベルでセルのデータを読み出す。読み出したデータが“Ｈ”の場合、／ＳＤＣ、ＤＤＣ３、ＤＤＣ２、ＤＤＣ１、ＤＤＣ０、ＰＤＣは、“０００１００”、“Ｌ”の場合、／ＳＤＣ、ＤＤＣ３、ＤＤＣ２、ＤＤＣ１、ＤＤＣ０は、“００００１１”となる。この後、“１”−レベル・・・・と下のレベルから読み出し、読み出したデータが“Ｈ”の場合、／ＳＤＣ、ＤＤＣ３、ＤＤＣ２、ＤＤＣ１、ＤＤＣ０に“１”ずつ加算する。“２８”−レベルによる読み出し後、ＳＤＣのデータが“０”か“１”が決まる。このため、図３０にＤｏｕｔで示すように、ＳＤＣのデータを外部に出力する。また、“４４”−レベルによる読み出し後、ＤＤＣ３のデータも決まる。このため、ＤＤＣ３のデータを反転してＳＤＣに転送し、この後、ＳＤＣのデータを外部に出力する。また、“５２”−レベルによる読み出し後、ＤＤＣ２のデータも決まる。このため、ＤＤＣ２のデータを反転してＳＤＣに転送し、この後、ＳＤＣのデータを外部に出力する。また、“５６”−レベルによる読み出し後、ＤＤＣ１のデータも決まる。このため、ＤＤＣ１のデータを反転してＳＤＣに転送し、この後、ＳＤＣのデータを外部に出力する。また、“５８”−レベルによる読み出し後、ＤＤＣ０のデータも決まる。このため、ＤＤＣ０のデータを反転してＳＤＣに転送し、この後、ＳＤＣのデータを外部に出力する。また、“５９”−レベルによる読み出し後、ＰＤＣのデータも決まる。このため、ＰＤＣのデータを反転してＳＤＣに転送し、この後、ＳＤＣのデータを外部に出力する。このように、定義することにより、外部への転送動作は、変形例１と同様、４＋２＝６回で済む。また、変形例２の動作速度は、次式のように、変形例１に比べて高速化できる。
【０１０３】
（３０μｓ＋６０μｓ＋１２０μｓ＋２４０μｓ）×４＋４５μｓ
＝１８００μｓ＋４５μｓ
また、書き込みでは、１６レベルに同時書き込み、夫々のレベルのベリファイで、１６レベルの区別をするために、図３０乃至図３４に示すように、ロワーページ、アッパーページ、ハイアーページ、トップページを割り付けた場合、図３５に示すように、
トップページのデータを反転させたデータがＤＤＣ０に記憶され、
ハイアーページのデータを反転させたデータがＤＤＣ１に記憶され、
アッパーページのデータを反転させたデータがＤＤＣ２に記憶され、
ロワーページのデータがＳＤＣに記憶され、
ＰＤＣには、書き込み時に“０”、非書き込み時に“１”が記憶される。
【０１０４】
通常の書き込みでは、先に低い閾値レベルのセルが書き込み完了となる。このため、レベルＡ〜Ｇの書き込みが終了すると、ＳＤＣは、レベルＡ〜Ｇへの書き込みか、レベルＨ〜Ｏへの書き込みかを区別する必要がなくなるため、次のページのデータを保持するために使用できる。また、レベルＨ〜Ｋが書き込み終了すると、ＤＤＣ２も、次のページのデータを保持するために使用できる。さらに、レベルＬ、Ｍの書き込みが終了すると、ＤＤＣ１も、次のページのデータを保持するために使用できる。また、レベルＮの書き込みが終了すると、ＤＤＣ０も、次のページのデータを保持するために使用できる。このため、全レベルの書き込みの終了を待たずに、次ページのデータを保持することができるため、高速動作が可能である。
【０１０５】
また、ロワーページ、アッパーページ、ハイアーページ、トップページのデータ設定は、図１４乃至図１７に示すように、
閾値レベル    ： ZABC DEFG HIJK LMNO
ロワーページ  ： 1111 1111 0000 0000
アッパーページ： 1111 0000 0000 1111
ハイアーページ： 1100 0011 1100 0011
トップページ  ： 1001 1001 1001 1001
と設定し、それぞれのレベル間を均一とした。しかし、例えばＧ−レベルとＨ−レベルの間隔を他のレベル間の間隔より大きく設定する。これにより、ロワーページの不良率を下げることが可能である。
【０１０６】
また、Ｃ−レベルとＤ−レベルの間隔、及びＫ−レベルとＬ−レベルの間隔を他のレベル間の間隔より大きく設定する。これにより、アッパーページの不良率を下げることが可能である。
【０１０７】
Ａ−レベルとＢ−レベルの間隔、Ｅ−レベルとＦ−レベルの間隔、Ｉ−レベルとＪ−レベルの間隔、Ｍ−レベルとＮ−レベルの間隔を他のレベル間の間隔より大きく設定する。これにより、ハイアーページの不良率を下げることが可能である。
【０１０８】
Ｚ−レベルとＡ−レベルの間隔、Ｂ−レベルとＣ−レベルの間隔、Ｄ−レベルとＥ−レベルの間隔、Ｆ−レベルとＧ−レベルの間隔、Ｈ−レベルとＩ−レベルの間隔、Ｊ−レベルとＫ−レベルの間隔、Ｌ−レベルとＭ−レベルの間隔、Ｎ−レベルとＯ−レベルの間隔を他のレベル間の間隔より大きく設定する。これにより、トップページの不良率を下げることが可能である。
【０１０９】
（第４の実施形態）
（隣接セルの書き込みに伴う閾値シフトを補正してＬＤＰＣ符号を使用する場合）
第３の実施形態は、隣接セルの書き込みによる閾値レベルの変化について考慮していなかった。しかし、前述したように、図６に示すセルＭＣ１１に４ビット（１６値）のデータを書き込んだ後、セルＭＣ１２に４ビット（１６値）のデータを書き込んだ場合、セル間のカップリング容量の影響により、セルＭＣ１１の閾値レベルが高くシフトしてしまう。このカップリング影響を抑えるため、書き込むべきセルに本来の閾値レベルより低めの閾値レベルまで書き込んだ後、周りのセルを本来の閾値レベルより低めの閾値レベルに書き込む。この後、書き込むべきセルを本来の閾値レベルまで書き込み、この後、周りのセルを本来の閾値にまで書き込む。このようにしてカップリングの影響を抑えることが可能である。しかし、周りのセルのデータが決まらないと書き込みを完了することができないという問題がある。このように周りのセルを書き込まない場合において、ＬＤＰＣ符号を使用する場合、上述したように、１つの閾値レベルを確率値として読み出すため、複数回の読み出しにより、この確率値を求める必要がある。このため、隣接セルの書き込みによりメモリセルの閾値レベルが変化した場合、メモリセルから４つの読み出しレベルで読み出されたデータの精度が低下し、エラー訂正の精度が低下する。
【０１１０】
図３６乃至図３９は、図１４乃至図１７に示す閾値レベルにおいて、隣接セルが書き込まれたことに伴う閾値レベルの変化量を示しており、変化量が、無い、小、小中、中、中大、大の６つの場合を仮定し、それぞれの場合に読み出された“Ｈ”の回数を示している。このように、閾値レベルが変化している場合、通常のリードレベルで読み出すと、データを正しく読み出すことが困難となる。このため、隣接セルの書き込みに伴う閾値レベルの変化を補正して読み出す必要がある。
【０１１１】
Ｚ−レベルからＯ−レベルに対して、６つの閾値レベルの変化量があり、各レベルについて確率値を求めるために上記４つの読み出しレベルを設定する場合、図３６乃至図３９に破線０−６４で示すように、全部で６５個の読み出しレベルが必要となる。
【０１１２】
図４０は、第４の実施形態に係る読み出しシーケンスを示している。第４の実施形態では、例えば図６に示す読み出し対象のセルＭＣ１１について、０〜６４レベルまでの６５個の読み出しレベルでリード動作を行う（Ｓ６１）。
【０１１３】
具体的には、図１に示す制御信号及び制御電圧発生回路７により、レベル０〜レベル６４の読み出しレベルを発生し、メモリセル１の選択されたワード線ＷＬｎに供給する。例えばセルの閾値レベルが、読み出しレベルより高い場合セルはオフする。このため、“Ｈ”（データ“０”）となり、Ｈ−レベル未満の場合、セルはオンするため“Ｌ”（データ“１”）となる。各読み出しレベルにより読み出されたデータは、図２に示すデータ記憶回路１０に保持される。このデータ記憶回路１０に保持されたデータは、図１８に示す動作と同様に、次の読み出しレベルによりメモリセルからデータを読み出している間にホスト１１に転送される。
【０１１４】
この後、前記メモリセルＭＣ１１に隣接するメモリセルＭＣ１２の閾値レベルの変化が検出される（Ｓ６２）。この場合、隣接セルの閾値レベルの移動が、無い、小、小中、中、中大、大のどれであるかが分かればよい。このため、０〜６４レベルまでの６５個の読み出しレベルでリード動作を行う必要は無く、例えば図３６乃至図３９に示す読み出しレベル１０、２１、３２、４３、５４でリードする。すなわち、ワード線ＷＬｎ＋１に読み出しレベル１０、２１、３２、４３、５４が順次供給されて閾値レベルが読み出される。このワード線ＷＬｎ＋１のレベルを変化させて読み出した隣接セルの閾値レベルの変化に対応した６つのデータは順次ホスト１１に供給される。
【０１１５】
ホスト１１は、ステップＳ６１により得られたデータより、セル毎に、“Ｈ”（データ“０”）の数を計数する。この後、隣接セルの閾値レベルの変化に対応した６つのデータに基づき、前記上記６５個のデータを補正する。すなわち、ステップＳ６２における読み出しの結果、隣接セルの閾値レベルの変化量に応じて計数された“Ｈ”の回数が減算される。具体的には、
閾値レベルの変化量が無い場合、補正なし。
【０１１６】
閾値レベルの変化量が小の場合、計数した“Ｈ”の回数を−１する。
【０１１７】
閾値レベルの変化量が小中の場合、計数した“Ｈ”の回数を−２する。
【０１１８】
閾値レベルの変化量が中の場合、計数した“Ｈ”の回数を−３する。
【０１１９】
閾値レベルの変化量が中大の場合、計数した“Ｈ”の回数を−４する。
【０１２０】
閾値レベルの変化量が大の場合、計数した“Ｈ”の回数を−５する。
【０１２１】
この結果、セルＭＣ１１で読み出した“Ｈ”（データ“０”）が出力される回数は、０〜６０となり、隣接セルの閾値レベルの変化の影響が補正される。
【０１２２】
図４１（ａ）（ｂ）の上段は、各ページの上記補正後の“Ｈ”の回数を示している。これらは、図１４乃至図１７の０〜５９レベルで読み出した結果に相当する。例えば補正後“Ｈ”の数が“３０”は、図１４乃至図１７のレベル２９で読み出したことになり、ロワーページの場合、“Ｈ”の数は２個となる。また、補正後“Ｈ”の数が“２９”は、図１４乃至図１７のレベル２８で読み出したことになり、ロワーページの場合、“Ｈ”の数は１個となる。この“Ｈ”の回数に基づき、“Ｈ”の確率が以下のように設定される。
【０１２３】
“Ｈ”が４回の場合、“Ｈ”（データ“０”）の確率は、１００％（４／４）
“Ｈ”が３回の場合、“Ｈ”（データ“０”）の確率は、７５％（３／４）
“Ｈ”が２回の場合、“Ｈ”（データ“０”）の確率は、５０％（２／４）
“Ｈ”が１回の場合、“Ｈ”（データ“０”）の確率は、２５％（１／４）
ＬＤＰＣ符号のＥＣＣ回路１１−１は、このようにして設定された確率に基づき、誤ったデータを訂正する。
【０１２４】
尚、図４０に示すフローチャートでは、初めにセルＭＣ１１を読み出した後に、セルＭＣ１１と隣接するセルＭＣ１２を読み出した。しかし、これに限定されるものではなく、例えば先にセルＭＣ１２を読み出すことも可能である。
【０１２５】
上記第４の実施形態によれば、隣接セルとのカップリングの影響による閾値レベルの変化量を検出し、この検出した変化量に基づき、ＬＤＰＣ符号用の読み出し結果を補正している。したがって、隣接セルの書き込みによる閾値レベルの変動を除去することができるため、ＬＤＰＣ符号を用いたエラー訂正の精度を向上することが可能である。
【０１２６】
無論、ＬＤＰＣ符号を使用しない場合、確率値を出力する必要がない。このため、隣接セルの閾値レベルの変化量に応じて計数された“Ｈ”の回数が減算され、この結果をそのまま読み出し結果とする。
【０１２７】
（第５の実施形態）
セル間のカップリングは、プロセス等のばらつきに大きく依存する。このため、閾値レベルの補正は、上記第１の実施形態に示すように、ワード線毎、若しくはチップ毎にトリミングしたシフト値を使用して補正したり、第２の実施形態に示すように、メモリセルアレイにモニタセルを設け、モニタセルの閾値レベルから関連する閾値レベルのシフト値を算出してメモリセルの閾値レベルを読み出している。
【０１２８】
第５の実施形態は、第２の実施形態と同様に、図１１に示すモニタセルＭＭＣを用いてセル間のカップリングの影響を検出する。第５の実施形態において、モニタセルには、図１７に示す最も高い閾値レベル、例えばＯ−レベルを常に書き込み、隣接セルの書き込みによるＯ−レベルの閾値レベルの変化量を検出することにより、隣接セルの読み出しレベルを補正する。
【０１２９】
図４２、図４３は、読み出し動作を示している。先ず、図６に示すように、セルＭＣ１１を読み出す。この読み出し動作は、図４０に示す第４の実施形態とほぼ同様である。すなわち、図１に示す制御信号及び制御電圧発生回路７により、レベル０〜レベル６４の読み出しレベルを発生し、メモリセル１の選択されたワード線ＷＬｎに供給する（Ｓ７１）。例えばセルの閾値レベルが、読み出しレベルより高い場合セルはオフする。このため、“Ｈ”（データ“０”）となり、Ｈ−レベル未満の場合、セルはオンするため“Ｌ”（データ“１”）となる。このとき、モニタセルＭＭＣがレベル５７〜６４のどのレベルでオンしたかも検出する（Ｓ７２）。このモニタセルのオンしたレベルに応じて、セルＭＣ１２の読み出しレベルを決め、この読み出し結果に応じて補正を行う。
【０１３０】
すなわち、図４３に示すように、モニタセルＭＭＣの閾値レベルがレベル５７、５８の場合、カップリングの影響がないため、セルＭＣ１２は読み出しレベルを補正することなく読み出される（Ｓ７３）。
【０１３１】
また、モニタセルＭＭＣの閾値レベルがレベル５９である場合、カップリングの影響は“小”であるため、レベル３２をワード線ＷＬｎ＋１に供給し、このレベル３２により隣接セルＭＣ１２の閾値レベルを読み出す（Ｓ７４）。
【０１３２】
また、モニタセルＭＭＣの閾値レベルがレベル６０である場合、カップリングの影響は“小中”であるため、先ず、レベル１０をワード線ＷＬｎ＋１に供給し、このレベル１０により隣接セルＭＣ１２の閾値レベルを読み出す。次いで、レベル２１をワード線ＷＬｎ＋１に供給し、このレベル２１により隣接セルＭＣ１２の閾値レベルを読み出す（Ｓ７５）。
【０１３３】
また、モニタセルＭＭＣの閾値レベルがレベル６１である場合、カップリングの影響は“中”であるため、先ず、レベル１０をワード線ＷＬｎ＋１に供給し、このレベル１０により隣接セルＭＣ１２の閾値レベルを読み出す。次いで、レベル２１をワード線ＷＬｎ＋１に供給し、このレベル２１により隣接セルＭＣ１２の閾値レベルを読み出す。さらに、レベル３２をワード線ＷＬｎ＋１に供給し、このレベル３２により隣接セルＭＣ１２の閾値レベルを読み出す。（Ｓ７６）。
【０１３４】
また、モニタセルＭＭＣの閾値レベルがレベル６２である場合、カップリングの影響は“中大”であるため、先ず、レベル１０をワード線ＷＬｎ＋１に供給し、このレベル１０により隣接セルＭＣ１２の閾値レベルを読み出す。次いで、レベル２１をワード線ＷＬｎ＋１に供給し、このレベル２１により隣接セルＭＣ１２の閾値レベルを読み出す。さらに、レベル３２をワード線ＷＬｎ＋１に供給し、このレベル３２により隣接セルＭＣ１２の閾値レベルを読み出す。この後、レベル４３をワード線ＷＬｎ＋１に供給し、このレベル４３により隣接セルＭＣ１２の閾値レベルを読み出す。（Ｓ７７）。
【０１３５】
また、モニタセルＭＭＣの閾値レベルがレベル６３、６４である場合、カップリングの影響は“大”であるため、先ず、レベル１０をワード線ＷＬｎ＋１に供給し、このレベル１０により隣接セルＭＣ１２の閾値レベルを読み出す。次いで、レベル２１をワード線ＷＬｎ＋１に供給し、このレベル２１により隣接セルＭＣ１２の閾値レベルを読み出す。さらに、レベル３２をワード線ＷＬｎ＋１に供給し、このレベル３２により隣接セルＭＣ１２の閾値レベルを読み出す。この後、レベル４３をワード線ＷＬｎ＋１に供給し、このレベル４３により隣接セルＭＣ１２の閾値レベルを読み出す。さらに、レベル５４をワード線ＷＬｎ＋１に供給し、このレベル５４により隣接セルＭＣ１２の閾値レベルを読み出す。（Ｓ７８）。
【０１３６】
このようにして、メモリセルＭＣ１１に隣接するセルＭＣ１２の閾値レベルの変化を検出し、隣接セルのカップリングの大きさと移動（無し、小、小中、中、中大、大のいずれか）に応じてメモリセルＭＣ１１の読み出し結果が補正される（Ｓ７９）。したがって、隣接セルのカップリングの大きさと、隣接セルの書き込みによる閾値レベルの変動を削除することができ、メモリセルＭＣのデータを高精度に読み出すことができる。
【０１３７】
上記第５の実施形態によれば、メモリセルと同時に書き込まれるモニタセルＭＭＣを設け、このモニタセルに常に最も高い閾値レベルを書き込み、このモニタセルＭＭＣの閾値レベルを判別することにより、隣接セルとのカップリングによるモニタセルＭＭＣの閾値レベルの変化量を６段階で検出している。このため、隣接セルとのカップリングの影響をより正確に検出することができる。したがって、この検出した変化量に基づき隣接セルの読み出しレベルを補正することにより、隣接セルの閾値レベルを正確に読み出すことが可能である。
【０１３８】
読み出しレベルは、０〜６４に限らず、読み出しレベルをさらに細かくする、又は粗くすることも可能である。隣接セルのカップリングの影響は、無し、小、小中、中、中大、大の６個、また、隣接セルの閾値レベルの変化量も、無し、小、小中、中、中大、大の６個に分類していた。しかし、これらも変更可能である。
【０１３９】
尚、第５の実施形態において、モニタセルを複数個設け、これらモニタセルから読み出されたデータの多数決を求め、この結果を用いて補正することも可能である。
【０１４０】
無論、ＬＤＰＣ符号を使用しない場合、確率値を出力する必要がない。このため、隣接セルの閾値レベルの変化量に応じて計数された“Ｈ”の回数が減算され、この結果をそのまま読み出し結果とする。
【０１４１】
（第６の実施形態）
第６の実施形態は、上記トリミングデータやモニタセルを用いずにチップ間、ワード線間の閾値レベルのばらつきを補正可能とするものである。
【０１４２】
ＮＡＮＤ型フラッシュメモリは、ロウ方向に並んだ全てのセル、又は半数のセルを例えば２ＫＢ×４のデータとして一括して書き込むため、例えば２ＫＢ×４（４ビット／１セル）＝１６ｋ×４（４ビット／１セル）ビットとなる。つまり、１６ｋ個のセルが、Ｚ−レベルに１ｋセル、Ａ−レベルに１ｋセル、Ｂ−レベルに１ｋセル、Ｃ−レベルに１ｋセル、Ｄ−レベルに１ｋセル、Ｅ−レベルに１ｋセル、Ｆ−レベルに１ｋセル、Ｇ−レベルに１ｋセル、Ｈ−レベルに１ｋセル、Ｉ−レベルに１ｋセル、Ｊ−レベルに１ｋセル、Ｋ−レベルに１ｋセル、Ｌ−レベルに１ｋセル、Ｍ−レベルに１ｋセル、Ｎ−レベルに１ｋセル、Ｏ−レベルに１ｋセルというように均等に存在すると仮定する。この状態において、隣接セルにデータを書き込んだとき、これらセルの閾値レベルが均等に変化したとする。これらセルから読み出したデータを、隣接セルの閾値レベルの変化に応じて、閾値レベルの変化量が、無い、小、小中、中、中大、大の６パターンに分類すると仮定すると、１つのパターンに対して、１６ｋ／６＝２６６６セルが存在する。１つのパターンに１６レベルが均等にあるとすると、１つのレベルに１６６セルが存在することになる。
【０１４３】
図４７は、第６の実施形態の動作を示すものであり、図４０と同一部分には同一符号を付す。
【０１４４】
（１）図４７に示すように、先ず、ＷＬｎのセルについて、０〜６４のそれぞれのレベルでリードを行う（Ｓ６１）。
【０１４５】
（２）ＷＬｎ＋１のセルのセルについて、１０、２１、３２、４３、６５レベルでリード動作を行い隣のセル（ＷＬｎ＋１）の閾値レベルの変化量を、無し、小、小中、中、中大、大であるかを調べる（Ｓ６２）。
【０１４６】
（３）隣のセル（ＷＬｎ＋１）の閾値レベル変化量（無し、小、小中、中、中大、大）毎に、ＷＬｎのセルで“Ｈ”が読み出された回数を集計する。図４４、図４５は、この集計結果である（Ｓ８１）。
【０１４７】
図４４、図４５において、例えば隣接セルの閾値レベルの変化量が無い場合の集計結果は、
“Ｈ”が読み出された回数が０回となるのは、１４３セル、
“Ｈ”が読み出された回数が１回となるのは、２３セル、
“Ｈ”が読み出された回数が２回となるのは、２３セル、
“Ｈ”が読み出された回数が３回となるのは、６０セル、
“Ｈ”が読み出された回数が４回となるのは、６０セル、
“Ｈ”が読み出された回数が５回となるのは、２３セル、
“Ｈ”が読み出された回数が６回となるのは、２３セル、
“Ｈ”が読み出された回数が７回となるのは、６０セル、
“Ｈ”が読み出された回数が８回となるのは、６０セル、
“Ｈ”が読み出された回数が９回となるのは、２３セル、
“Ｈ”が読み出された回数が１０回となるのは、２３セル、
“Ｈ”が読み出された回数が１１回となるのは、６０セル、以下省略となる。
【０１４８】
また、例えば隣接セルの閾値レベルの変化量が“大”である場合の集計結果は、
“Ｈ”が読み出された回数が０回となるのは、０セル、
“Ｈ”が読み出された回数が１回となるのは、０セル、
“Ｈ”が読み出された回数が２回となるのは、０セル、
“Ｈ”が読み出された回数が３回となるのは、２３セル、
“Ｈ”が読み出された回数が４回となるのは、６０セル、
“Ｈ”が読み出された回数が５回となるのは、６０セル、
“Ｈ”が読み出された回数が６回となるのは、２３セル、
“Ｈ”が読み出された回数が７回となるのは、２３セル、
“Ｈ”が読み出された回数が８回となるのは、６０セル、
“Ｈ”が読み出された回数が９回となるのは、６０セル、
“Ｈ”が読み出された回数が１０回となるのは、２３セル、以下省略。
【０１４９】
というように、“Ｈ”が読み出された回数に対して、セルの数が大きくなったり小さくなったりする。セルの数が大きくなったところ、例えば“６０セル”が、書き込こまれた閾値レベルの中心値と推定することができる（Ｓ８２）。このため、この推定された中心値に従って読み出しレベルを補正する（Ｓ８３）。
【０１５０】
また、前述したように、閾値レベルの変化の６パターンに対応した変化は、図４４、図４５に示すようである。このため、閾値レベルの変化量が、無い、小、小中、中、中大、大に応じて補正値を、例えば“０”“−１”“−２”“−３”“−４”“−５”に設定し、これら補正値を上記“Ｈ”が読み出された回数から減算すると、図４４，図４５に“変換後”で示すようになる。この“変換後”は、読み出しレベルを補正値により補正したことに相当する。つまり、図４１の上段に相当し、第４の実施形態と同様に、各ページでの“Ｈ”の回数に基づき確率値が求められる。したがって、セル間のカップリング容量が、プロセス等のばらつきにより大きい場合であっても、隣接セルにデータが書き込まれたことによる閾値レベルの変動を補正して、読み出すことが可能である。無論、ＬＤＰＣ符号を使用しない場合は確率値を出力する必要がない。このため、セルの数が大きくなったところが、各閾値レベルの中心値と考えることができ、この中心値に従って読み出しレベルを補正した結果が読み出しデータとなる。
【０１５１】
第６の実施形態によれば、モニタセルを用いることなく、メモリセル間の閾値レベルのばらつき、ワード線間のばらつきを検出して閾値レベルの変動を補正することができる。このため、高精度の読み出しが可能である。
【０１５２】
尚、第６の実施形態において、各レベルにそれぞれ均等に１ｋ個のセルが存在すると仮定した。しかし、実際のデータはランダムである、このため、極端な場合、ある１つのレベルに１つのセルしかない場合もある。しかし、ページサイズが大きくなるに従い、データがこのような状態となる確率は非常にまれである。したがって、このような場合、データを必ず１つのレベルに複数セル（例えば１０セル）が存在するように、ホスト１１側で変更する。
【０１５３】
また、隣接セルが書き込まれたことに伴う閾値レベルの移動が、無い、小、小中、中、中大、大の６つに分類したが、これ以上の状態に分類することも可能である。この場合、読み出し精度を向上することができる。
【０１５４】
さらに、上記各実施形態は、３ビット、８値、又は４ビット、１６値に限定されるものではなく、他のビット数にも適用可能である。
【０１５５】
また、図４６は、上述したワード線に接続された複数のメモリセルの半数ずつ選択する例を示している。一対のビット線は、データ記憶回路１０にそれぞれ接続され、一対のビット線の一方が選択的にデータ記憶回路１０に接続される。上記第１乃至第６の実施形態は、図４６に示す構成のメモリセルアレイにも適用できる。
【０１５６】
さらに、第３の実施形態と同様に、第４、第５、第６の実施形態は、図４０、図４２、図４４、図４５に示すように、ワード線ＷＬｎに接続されたセルから６５回閾値レベルを読み出し、６５回データ記憶回路からホストにデータを転送していた。しかし、６５レベルは２７と表せ、次のように、７ビットで表現できる。
【０１５７】
“Ｈ”が読み出された回数０    ０００００００
“Ｈ”が読み出された回数１    ００００００１
“Ｈ”が読み出された回数２    ０００００１０
“Ｈ”が読み出された回数３    ０００００１１
“Ｈ”が読み出された回数４    ００００１００
“Ｈ”が読み出された回数５    ００００１０１
・・・・・・・
“Ｈ”が読み出された回数６３  １００００００
“Ｈ”が読み出された回数６４  １０００００１
“Ｈ”が読み出された回数６５  １００００１０
このため、各データ記憶回路を例えばカウンタのように動作させ、このカウンタによって各読み出された回数を計数することにより、このカウンタから１ビットずつ７回、ホストにデータを転送すればよい。
【０１５８】
第３の実施形態と同様に、全読み出し回数の半分までメモリセルから読み出すと、一番上の桁は外部に出力できる。このため、この桁のデータを外部に出力しながら、次のデータをメモリセルから読み出す。同様に、何回か読み出すと、計数結果を外部に出力可能となるため、順次外部に出力しながら、次のデータをメモリセルから読み出すことも可能である。
【０１５９】
無論、ＬＤＰＣ符号を使用しない場合、確率値を出力する必要がない。このため、隣接セルの閾値レベルの変化量に応じて計数された“Ｈ”の回数が減算され、この結果をそのまま読み出し結果とする。
【０１６０】
その他、本発明の要旨を変えない範囲において、種々変形実施可能なことは勿論である。
【符号の説明】
【０１６１】
１…メモリセルアレイ、７…制御信号及び制御電圧発生回路、７−１…読み出し電圧補正回路、１１…ホスト、１１−１…ＥＣＣ回路、ＭＭＣ０〜ＭＭＣ２、ＭＭＣ１１、ＭＭＣ１２…モニタセル。
【図１】
0005355667.tif 000002
【図２】
0005355667.tif 000003
【図３】
0005355667.tif 000004
【図４】
0005355667.tif 000005
【図５】
0005355667.tif 000006
【図６】
0005355667.tif 000007
【図７】
0005355667.tif 000008
【図８】
0005355667.tif 000009
【図９】
0005355667.tif 000010
【図１０】
0005355667.tif 000011
【図１１】
0005355667.tif 000012
【図１２】
0005355667.tif 000013
【図１３】
0005355667.tif 000014
【図１４】
0005355667.tif 000015
【図１５】
0005355667.tif 000016
【図１６】
0005355667.tif 000017
【図１７】
0005355667.tif 000018
【図１８】
0005355667.tif 000019
【図１９】
0005355667.tif 000020
【図２０】
0005355667.tif 000021
【図２１】
0005355667.tif 000022
【図２２】
0005355667.tif 000023
【図２３】
0005355667.tif 000024
【図２４】
0005355667.tif 000025
【図２５】
0005355667.tif 000026
【図２６】
0005355667.tif 000027
【図２７】
0005355667.tif 000028
【図２８】
0005355667.tif 000029
【図２９】
0005355667.tif 000030
【図３０】
0005355667.tif 000031
【図３１】
0005355667.tif 000032
【図３２】
0005355667.tif 000033
【図３３】
0005355667.tif 000034
【図３４】
0005355667.tif 000035
【図３５】
0005355667.tif 000036
【図３６】
0005355667.tif 000037
【図３７】
0005355667.tif 000038
【図３８】
0005355667.tif 000039
【図３９】
0005355667.tif 000040
【図４０】
0005355667.tif 000041
【図４１】
0005355667.tif 000042
【図４２】
0005355667.tif 000043
【図４３】
0005355667.tif 000044
【図４４】
0005355667.tif 000045
【図４５】
0005355667.tif 000046
【図４６】
0005355667.tif 000047
【図４７】
0005355667.tif 000048