(57)【要約】【課題】セル間相互干渉を抑制しつつ、メモリコントローラの書き込みバッファ量を低減することができるメモリシステムを提供すること。【解決手段】実施形態のメモリシステムは、複数のメモリセルを有する不揮発性メモリと、メモリコントローラと、を備える。前記複数のメモリセルは、各々が、データが消去された消去状態を示す第１のしきい値領域と、前記第１のしきい値領域よりも電圧レベルが高くデータが書き込まれた書き込み状態を示す第２から第１６のしきい値領域とを合わせた１６個のしきい値領域により、第１から第４ビットで表わせられる４ビットのデータを記憶可能である。前記メモリコントローラは、前記第１ビット及び前記第２ビットのデータを書き込む第１プログラムを前記不揮発性メモリに行わせた後に、前記第３ビット及び前記第４ビットのデータを書き込む第２プログラムを前記不揮発性メモリに行わせる。【選択図】図３２
2020030881.tif 000002
【特許請求の範囲】
【請求項１】
各々が、データが消去された消去状態を示す第１のしきい値領域と、前記第１のしきい値領域よりも電圧レベルが高くデータが書き込まれた書き込み状態を示す第２から第１６のしきい値領域とを合わせた１６個のしきい値領域により、第１から第４ビットで表わせられる４ビットのデータを記憶可能な複数のメモリセルを有する不揮発性メモリと、
前記第１ビット及び前記第２ビットのデータを書き込む第１プログラムを前記不揮発性メモリに行わせた後に、前記第３ビット及び前記第４ビットのデータを書き込む第２プログラムを前記不揮発性メモリに行わせるメモリコントローラと、
を備え、
前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第１ビット及び前記第２ビットのデータに応じて、データが消去された消去状態を示す第１７のしきい値領域と、前記第１７のしきい値領域よりも電圧レベルが高くデータが書き込まれた書き込み状態を示す第１８から第２０のしきい値領域とのうちのいずれかのしきい値領域になるように前記第１プログラムを前記不揮発性メモリに行わせるように構成され、
前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第１７から第２０のしきい値領域のうちのいずれかのしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成され、
前記第ｎのしきい値領域は前記第（ｎ−１）のしきい値領域よりも電圧レベルが高く（ｎは２以上１６以下の自然数）、
前記第ｋのしきい値領域は前記第（ｋ−１）のしきい値領域よりも電圧レベルが高く（ｋは１８以上２０以下の自然数）、
前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第１７のしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせる場合に、前記第１から第１６のしきい値領域のうちの４個の第２１のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成され、
前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第１８のしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせる場合に、前記第１から第１６のしきい値領域のうちの４個の第２２のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成され、
前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第１９のしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせる場合に、前記第１から第１６のしきい値領域のうちの４個の第２３のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成され、
前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第２０のしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせる場合に、前記第１から第１６のしきい値領域のうちの４個の第２４のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成され、
前記４個の第２３のしきい値領域のしきい値領域及び前記４個の第２４のしきい値領域のしきい値領域はいずれも、前記４個の第２１のしきい値領域のうちのいずれのしきい値領域よりも電圧レベルが高く、
前記４個の第２３のしきい値領域のしきい値領域及び前記４個の第２４のしきい値領域のしきい値領域はいずれも、前記４個の第２２のしきい値領域のうちのいずれのしきい値領域よりも電圧レベルが高い、
メモリシステム。
【請求項２】
前記４個の第２２のしきい値領域は、前記第１から第１６のしきい値領域のうちの連続する４個のしきい値領域であり、
前記４個の第２４のしきい値領域は、前記第１から第１６のしきい値領域のうちの連続する４個のしきい値領域である、
請求項１に記載のメモリシステム。
【請求項３】
前記連続する４個の第２２のしきい値領域は、前記４個の第２１のしきい値領域のうちの１個のしきい値領域よりも電圧レベルが低く、前記４個の第２１のしきい値領域のうちの残りの３個のしきい値領域よりも電圧レベルが高い、請求項２に記載のメモリシステム。
【請求項４】
前記連続する４個の第２４のしきい値領域は、前記４個の第２３のしきい値領域のうちの１個のしきい値領域よりも電圧レベルが低く、前記４個の第２３のしきい値領域のうちの残りの３個のしきい値領域よりも電圧レベルが高い、請求項２又は請求項３に記載のメモリシステム。
【請求項５】
前記第１から第１６のしきい値領域のうち隣接するしきい値領域間に存在する１５個の境界のうち、前記第１ビットのデータの値の判定に用いられる第１の境界の数、前記第２ビットのデータの値の判定に用いられる第２の境界の数、前記第３ビットのデータの値の判定に用いられる第３の境界の数、前記第４ビットのデータの値の判定に用いられる第４の境界の数が順に１、４、５、５である、請求項１から請求項４のうちのいずれか一項に記載のメモリシステム。
【請求項６】
前記４個の第２１のしきい値領域は、前記第１から第１６のしきい値領域のうちの連続する４個のしきい値領域であり、
前記４個の第２３のしきい値領域は、前記第１から第１６のしきい値領域のうちの連続する４個のしきい値領域であり、
前記４個の第２２のしきい値領域のしきい値領域はいずれも、前記４個の第２１のしきい値領域のうちのいずれのしきい値領域よりも電圧レベルが高く、
前記４個の第２４のしきい値領域のしきい値領域はいずれも、前記４個の第２３のしきい値領域のうちのいずれのしきい値領域よりも電圧レベルが高い、
請求項２に記載のメモリシステム。
【請求項７】
前記第１から第１６のしきい値領域のうち隣接するしきい値領域間に存在する１５個の境界のうち、前記第１ビットのデータの値の判定に用いられる第１の境界の数、前記第２ビットのデータの値の判定に用いられる第２の境界の数、前記第３ビットのデータの値の判定に用いられる第３の境界の数、前記第４ビットのデータの値の判定に用いられる第４の境界の数が順に１、２、６、６である、請求項６に記載のメモリシステム。
【請求項８】
前記４個の第２２のしきい値領域のうちの２個のしきい値領域は、前記４個の第２１のしきい値領域のうちの２個のしきい値領域よりも電圧レベルが低く、
前記４個の第２２のしきい値領域のうちの残りの２個のしきい値領域は、前記４個の第２１のしきい値領域のうちのいずれのしきい値領域よりも電圧レベルが高い、
請求項１に記載のメモリシステム。
【請求項９】
前記４個の第２４のしきい値領域のうちの２個のしきい値領域は、前記４個の第２３のしきい値領域のうちの２個のしきい値領域よりも電圧レベルが低く、
前記４個の第２４のしきい値領域のうちの残りの２個のしきい値領域は、前記４個の第２３のしきい値領域のうちのいずれのしきい値領域よりも電圧レベルが高い、
請求項８に記載のメモリシステム。
【請求項１０】
前記第１から第１６のしきい値領域のうち隣接するしきい値領域間に存在する１５個の境界のうち、前記第１ビットのデータの値の判定に用いられる第１の境界の数、前記第２ビットのデータの値の判定に用いられる第２の境界の数、前記第３ビットのデータの値の判定に用いられる第３の境界の数、前記第４ビットのデータの値の判定に用いられる第４の境界の数が順に１、６、４、４である、請求項８又は請求項９に記載のメモリシステム。
【請求項１１】
前記不揮発性メモリは、前記メモリコントローラからの指示に従って前記第１プログラム及び前記第２プログラムを実行する制御部をさらに有し、
前記制御部は、前記メモリコントローラからの前記第２プログラム指示に対して、書き込み済みの前記第１プログラムにより書き込まれたデータを読み出し、前記読み出したデータと、前記メモリコントローラから指示された前記第３ビット及び前記第４ビットのデータと、を使用して前記第２プログラムを実行する、
ことを特徴とする請求項１から請求項１０のうちのいずれか一項に記載のメモリシステム。
【請求項１２】
前記メモリコントローラは、
前記複数のメモリセルのうちの第１のワード線に電気的に接続された第１のメモリセルグループに対する前記第１プログラムの後に、前記複数のメモリセルのうちの第２のワード線に電気的に接続された第２のメモリセルグループに対する前記第１プログラムを実行させ、
前記第２のメモリセルグループに対する前記第１プログラムの後に、前記第１のメモリセルグループに対する前記第２プログラムを実行させる、
請求項１１に記載のメモリシステム。
【請求項１３】
前記メモリコントローラは、
第１のストリングの前記第１のワード線に対する第１プログラムの実行よりも後に、第２のストリングの前記第１のワード線に対する第１プログラムを実行させ、
第２のストリングの前記第１のワード線に対する第１プログラムの実行よりも後に、前記第１のストリングの前記第１のワード線に対する第２プログラムを実行させる、
請求項１２に記載のメモリシステム。
【請求項１４】
前記メモリコントローラは、前記第２のメモリセルグループに対する前記第１プログラムに対応するデータと、前記第１のメモリセルグループに対する前記第２プログラムに対応するデータと、を前記不揮発性メモリに入力し、
その後、前記制御部は、前記第２のメモリセルグループに対する前記第１プログラムと、前記第１のメモリセルグループに対する前記第２プログラムと、を実行する、
請求項１２又は請求項１３に記載のメモリシステム。
【請求項１５】
前記制御部は、前記第２のメモリセルグループに対する前記第１プログラムを実行した後に、前記第１のメモリセルグループに対して前記第１プログラムで書き込まれたデータを読み出し、前記読み出したデータを使用して、前記第１のメモリセルグループに対する前記第２プログラムを実行する、請求項１４に記載のメモリシステム。
【請求項１６】
前記制御部は、前記第１のメモリセルグループに対して前記第１プログラムで書き込まれたデータを読み出し、その後、前記第２のメモリセルグループに対して前記第１プログラムを実行し、その後、前記第１のメモリセルグループに対して前記第２プログラムを実行する、請求項１４に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
近年の微細化が進んだ３ｂｉｔ／ＣｅｌｌのＮＡＮＤメモリでは、一般的に、セル間相互干渉を避けるため、第１のメモリセルに記憶する全ｂｉｔを同時に書き込んだ後、隣接セルに同様に全ｂｉｔを同時に書き込み、この後、再び第１のメモリセルに全Bitを再書込み（プログラムする）手法が取られる。しかし、この方法を用いると、再書込みのためにコントローラ側でデータを保持する必要がある。
【０００３】
全ｂｉｔを同時にプログラムする方法として、１−３−３コーディングが知られている。この方法は、３ｂｉｔ／Ｃｅｌｌの８個のしきい値電圧の領域間の７個を、３ｂｉｔにそれぞれ１つ、３つ、３つに分配するコーディングである。
【０００４】
しかしながら、近年のＮＡＮＤメモリは３次元化されており、必要な書き込みバッファ量が増大するので、メモリコントローラのコストが増大している。このため、３次元の不揮発性メモリにおいても、セル間相互干渉と各ページ間のビットエラー率の偏りを抑制しつつ、メモリコントローラの書き込みバッファ量を低減する対策が望まれている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−１９５０７１号公報
【特許文献２】米国特許第９２３０６６４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、セル間相互干渉を抑制しつつ、メモリコントローラの書き込みバッファ量を低減することができるメモリシステムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、メモリシステムが提供される。前記メモリシステムは、複数のメモリセルを有する不揮発性メモリと、メモリコントローラと、を備える。前記複数のメモリセルは、各々が、データが消去された消去状態を示す第１のしきい値領域と、前記第１のしきい値領域よりも電圧レベルが高くデータが書き込まれた書き込み状態を示す第２から第１６のしきい値領域とを合わせた１６個のしきい値領域により、第１から第４ビットで表わせられる４ビットのデータを記憶可能である。前記メモリコントローラは、前記第１ビット及び前記第２ビットのデータを書き込む第１プログラムを前記不揮発性メモリに行わせた後に、前記第３ビット及び前記第４ビットのデータを書き込む第２プログラムを前記不揮発性メモリに行わせる。前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第１ビット及び前記第２ビットのデータに応じて、データが消去された消去状態を示す第１７のしきい値領域と、前記第１７のしきい値領域よりも電圧レベルが高くデータが書き込まれた書き込み状態を示す第１８から第２０のしきい値領域とのうちのいずれかのしきい値領域になるように前記第１プログラムを前記不揮発性メモリに行わせるように構成される。前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第１７から第２０のしきい値領域のうちのいずれかのしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成される。前記第ｎのしきい値領域は前記第（ｎ−１）のしきい値領域よりも電圧レベルが高い。ここで、ｎは２以上１６以下の自然数である。前記第ｋのしきい値領域は前記第（ｋ−１）のしきい値領域よりも電圧レベルが高い。ここで、ｋは１８以上２０以下の自然数である。前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第１７のしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせる場合に、前記第１から第１６のしきい値領域のうちの４個の第２１のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成される。前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第１８のしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせる場合に、前記第１から第１６のしきい値領域のうちの４個の第２２のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成される。前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第１９のしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせる場合に、前記第１から第１６のしきい値領域のうちの４個の第２３のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成される。前記メモリコントローラは、前記メモリセルにおけるしきい値領域が、前記第３ビット及び前記第４ビットのデータに応じて、前記第２０のしきい値領域から、前記第１から第１６のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせる場合に、前記第１から第１６のしきい値領域のうちの４個の第２４のしきい値領域のうちのいずれかのしきい値領域になるように前記第２プログラムを前記不揮発性メモリに行わせるように構成される。前記４個の第２３のしきい値領域のしきい値領域及び前記４個の第２４のしきい値領域のしきい値領域はいずれも、前記４個の第２１のしきい値領域のうちのいずれのしきい値領域よりも電圧レベルが高い。前記４個の第２３のしきい値領域のしきい値領域及び前記４個の第２４のしきい値領域のしきい値領域はいずれも、前記４個の第２２のしきい値領域のうちのいずれのしきい値領域よりも電圧レベルが高い。
【図面の簡単な説明】
【０００８】
【図１】図１は、第１の実施形態にかかる記憶装置の構成例を示すブロック図である。
【図２】図２は、第１の実施形態の不揮発性メモリの構成例を示すブロック図である。
【図３】図３は、３次元構造のメモリセルアレイのブロックの構成例を示す図である。
【図４】図４は、３次元構造のＮＡＮＤメモリのメモリセルアレイの一部領域の断面図である。
【図５】図５は、第１の実施形態のしきい値領域の一例を示す図である。
【図６】図６は、第１の実施形態のデータコーディングを示す図である。
【図７】図７は、第１の実施形態におけるプログラム後のしきい値分布を示す図である。
【図８Ａ】図８Ａは、第１の実施形態のプログラム順序の第１の例を示す図である。
【図８Ｂ】図８Ｂは、第１の実施形態のプログラム順序の第２の例を示す図である。
【図８Ｃ】図８Ｃは、第１の実施形態のプログラム順序の第３の例を示す図である。
【図９Ａ】図９Ａは、第１の実施形態に係る１ブロック分全体の書き込み手順の例を示すフローチャートである。
【図９Ｂ】図９Ｂは、第１の実施形態に係る１ｓｔステージにおける書き込み手順を示すサブフローチャートである。
【図９Ｃ】図９Ｃは、第１の実施形態に係る２ｎｄステージでの書き込み手順を示すサブフローチャートである。
【図９Ｄ】図９Ｄは、第１の実施形態に係る２ｎｄステージでの書き込み手順の変形例を示すサブフローチャートである。
【図９Ｅ】図９Ｅは、複数回数の読み出し結果の多数決処理を説明するための図である。
【図１０Ａ】図１０Ａは、１−３−３コーディングを採用したLM-Foggy-Fineプログラムにおけるバッファデータ量を説明するための図である。
【図１０Ｂ】図１０Ｂは、第１の実施形態のプログラムにおけるバッファデータ量を説明するための図である。
【図１１】図１１は、第１の実施形態に係る外部プログラムコマンドのシーケンスの例を示す図である。
【図１２Ａ】図１２Ａは、第１の実施形態に係る記憶装置において１ｓｔステージまでプログラムが完了しているワード線でのページ読み出しの処理手順を示すフローチャートである。
【図１２Ｂ】図１２Ｂは、第１の実施形態に係る記憶装置において２ｎｄステージまでプログラムが完了しているワード線でのページ読み出しの処理手順を示すフローチャートである。
【図１３】図１３は、第１の実施形態に係る外部読み出しコマンドのシーケンスの例を示す図である。
【図１４Ａ】図１４Ａは、第２の実施形態に係る１ブロック分全体の書き込み手順を示すフローチャートである。
【図１４Ｂ】図１４Ｂは、第２の実施形態に係る１ｓｔステージおよび２ｎｄステージにおける書き込み手順を示すサブフローチャートである。
【図１５】図１５は、第２の実施形態に係る外部プログラムコマンドのシーケンスの例を示す図である。
【図１６】図１６は、電源遮断に起因するデータ破壊を説明するための図である。
【図１７】図１７は、第３の実施形態に係る２ｎｄステージのプログラムを説明するための図である。
【図１８】図１８は、第３の実施形態に係る２ｎｄステージでの書き込み手順を示すフローチャートである。
【図１９】図１９は、第３の実施形態に係る２ｎｄステージのプログラム変形例を説明するための図である。
【図２０】図２０は、１−３−３データコーディングの他の例を示す図である。
【図２１】図２１は、第４の実施形態におけるプログラム後のしきい値分布を示す図である。
【図２２Ａ】図２２Ａは、第４の実施形態に係る１ｓｔステージにおける書き込み手順を示すサブフローチャートである。
【図２２Ｂ】図２２Ｂは、第４の実施形態に係る２ｎｄステージでの書き込み手順を示すサブフローチャートである。
【図２２Ｃ】図２２Ｃは、第４の実施形態に係る２ｎｄステージでの書き込み手順の変形例を示すサブフローチャートである。
【図２３】図２３は、第４の実施形態に係る外部プログラムコマンドのシーケンスの例を示す図である。
【図２４Ａ】図２４Ａは、第４の実施形態に係る記憶装置において１ｓｔステージまでプログラムが完了しているワード線でのページ読み出しの処理手順を示すフローチャートである。
【図２４Ｂ】図２４Ｂは、第４の実施形態に係る記憶装置において２ｎｄステージまでプログラムが完了しているワード線でのページ読み出しの処理手順を示すフローチャートである。
【図２５】図２５は、第４の実施形態に係る外部読み出しコマンドのシーケンスの例を示す図である。
【図２６】図２６は、フラグセルの構成を説明するための図である。
【図２７Ａ】図２７Ａは、第５の実施形態に係るフラグセルへのプログラムを説明するための図である。
【図２７Ｂ】図２７Ｂは、第５の実施形態に係るダミーセルへのプログラムを説明するための図である。
【図２８】図２８は、第５の実施形態に係る２ｎｄステージでの書き込み手順を示すフローチャートである。
【図２９】図２９は、第５の実施形態に係るページ読み出しの処理手順を示すフローチャートである。
【図３０】図３０は、第５の実施形態に係る外部読み出しコマンドのシーケンスの例を示す図である。
【図３１】図３１は、第６の実施形態のしきい値領域の一例を示す図である。
【図３２】図３２は、第６の実施形態におけるプログラム後のしきい値分布を示す第１例の図である。
【図３３】図３３は、図３２に示すしきい値分布に対応するデータコーディングを示す図である。
【図３４】図３４は、第６の実施形態におけるプログラム後のしきい値分布を示す第２例の図である。
【図３５】図３５は、図３４に示すしきい値分布に対応するデータコーディングを示す図である。
【図３６】図３６は、第６の実施形態におけるプログラム後のしきい値分布を示す第３例の図である。
【図３７】図３７は、図３６に示すしきい値分布に対応するデータコーディングを示す図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、実施形態に係るメモリシステムおよび書き込み方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１０】
（第１の実施形態）
図１は、第１の実施形態にかかる記憶装置の構成例を示すブロック図である。本実施形態の記憶装置は、メモリコントローラ１と不揮発性メモリ２とを備える。記憶装置は、ホストと接続可能である。ホストは、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。
【００１１】
不揮発性メモリ２は、データを不揮発に記憶するメモリであり、例えば、ＮＡＮＤメモリ（ＮＡＮＤフラッシュメモリ）を備えている。本実施形態では、不揮発性メモリ２は、メモリセルあたり３ｂｉｔを記憶可能なメモリセルを有するＮＡＮＤメモリ、すなわち３ｂｉｔ／Ｃｅｌｌ（ＴＬＣ：Triple  Level  Cell）のＮＡＮＤメモリであるとして説明する。不揮発性メモリ２は、３次元化されている。
【００１２】
メモリコントローラ１は、ホストからの書き込みコマンドに従って不揮発性メモリ２へのデータの書き込みを制御する。また、メモリコントローラ１は、ホストからの読み出しコマンドに従って不揮発性メモリ２からのデータの読み出しを制御する。メモリコントローラ１は、ＲＡＭ（Random  Access  Memory）１１、プロセッサ１２、ホストインターフェイス１３、ＥＣＣ（Error  Check  and  Correct）回路１４およびメモリインターフェイス１５を備える。ＲＡＭ１１、プロセッサ１２、ホストインターフェイス１３、ＥＣＣ回路１４およびメモリインターフェイス１５は、互いに内部バス１６で接続される。
【００１３】
ホストインターフェイス１３は、ホストから受信したコマンド、ユーザデータ（書き込みデータ）などを内部バス１６に出力する。また、ホストインターフェイス１３は、不揮発性メモリ２から読み出されたユーザデータ、プロセッサ１２からの応答などをホストへ送信する。
【００１４】
メモリインターフェイス１５は、プロセッサ１２の指示に基づいて、ユーザデータ等を不揮発性メモリ２へ書き込む処理および不揮発性メモリ２から読み出す処理を制御する。
【００１５】
プロセッサ１２は、メモリコントローラ１を統括的に制御する。プロセッサ１２は、例えば、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）等である。プロセッサ１２は、ホストからホストインターフェイス１３経由でコマンドを受けた場合に、そのコマンドに従った制御を行う。例えば、プロセッサ１２は、ホストからのコマンドに従って、不揮発性メモリ２へのユーザデータおよびパリティの書き込みをメモリインターフェイス１５へ指示する。また、プロセッサ１２は、ホストからのコマンドに従って、不揮発性メモリ２からのユーザデータおよびパリティの読み出しを、メモリインターフェイス１５へ指示する。
【００１６】
プロセッサ１２は、ＲＡＭ１１に蓄積されるユーザデータに対して、不揮発性メモリ２上の格納領域（メモリ領域）を決定する。ユーザデータは、内部バス１６経由でＲＡＭ１１に格納される。プロセッサ１２は、メモリ領域の決定を、書き込み単位であるページ単位のデータ（ページデータ）に対して実施する。本明細書では、不揮発性メモリ２の１ページに格納されるユーザデータをユニットデータと定義する。ユニットデータは、一般的には符号化されて符号語として不揮発性メモリ２に格納される。本実施形態では、符号化は必須ではない。メモリコントローラ１は、符号化せずにユニットデータを不揮発性メモリ２に格納してもよいが、図１では、一構成例として符号化を行う構成を示している。メモリコントローラ１が符号化を行わない場合には、ページデータはユニットデータと一致する。また、１つのユニットデータに基づいて１つの符号語が生成されてもよいし、ユニットデータが分割された分割データに基づいて１つの符号語が生成されてもよい。また、複数のユニットデータを用いて１つの符号語が生成されてもよい。
【００１７】
プロセッサ１２は、ユニットデータごとに書き込み先の不揮発性メモリ２のメモリ領域を決定する。不揮発性メモリ２のメモリ領域には物理アドレスが割当てられている。プロセッサ１２は、ユニットデータの書き込み先のメモリ領域を、物理アドレスを用いて管理する。プロセッサ１２は、決定したメモリ領域（物理アドレス）を指定してユーザデータを不揮発性メモリ２へ書き込むようメモリインターフェイス１５へ指示する。プロセッサ１２は、ユーザデータの論理アドレス（ホストが管理する論理アドレス）と物理アドレスとの対応を管理する。プロセッサ１２は、ホストからの論理アドレスを含む読み出しコマンドを受信した場合は、論理アドレスに対応する物理アドレスを特定し、物理アドレスを指定してユーザデータの読み出しをメモリインターフェイス１５へ指示する。
【００１８】
本明細書では、１つのワード線に共通に接続されたメモリセルをメモリセルグループＭＧと定義する。本実施形態では、不揮発性メモリ２は、３ｂｉｔ／ＣｅｌｌのＮＡＮＤメモリであり、１つのメモリセルグループＭＧは３ページに対応する。各メモリセルの３ｂｉｔは、それぞれこの３ページに対応する。本実施形態では、この３ページをLowerページ（第１のページ）、Middleページ（第２のページ）、Upperページ（第３のページ）と呼ぶ。
【００１９】
ＥＣＣ回路１４は、ＲＡＭ１１に格納されたユーザデータを符号化して、符号語を生成する。また、ＥＣＣ回路１４は、不揮発性メモリ２から読み出された符号語を復号する。
【００２０】
ＲＡＭ１１は、ホストから受信したユーザデータを不揮発性メモリ２へ記憶するまでに一時格納したり、不揮発性メモリ２から読み出したデータをホストへ送信するまでに一時格納する。ＲＡＭ１１は、例えば、ＳＲＡＭ（Static  Random  Access  Memory）やＤＲＡＭ（Dynamic  Random  Access  Memory）などの汎用メモリである。
【００２１】
図１では、メモリコントローラ１が、ＥＣＣ回路１４とメモリインターフェイス１５をそれぞれ備える構成例を示した。しかしながら、ＥＣＣ回路１４がメモリインターフェイス１５に内蔵されていてもよい。また、ＥＣＣ回路１４が、不揮発性メモリ２に内蔵されていてもよい。
【００２２】
ホストからライト要求を受信した場合、記憶装置（メモリシステム）は次のように動作する。プロセッサ１２は、ライトデータをＲＡＭ１１に一時記憶させる。プロセッサ１２は、ＲＡＭ１１にストアされたデータをリードし、ＥＣＣ回路１４に入力する。ＥＣＣ回路１４は、入力されたデータを符号化し、符号語をメモリインターフェイス１５に入力する。メモリインターフェイス１５は、入力された符号語を不揮発性メモリ２に書き込む。
【００２３】
ホストからリード要求を受信した場合、記憶装置は次のように動作する。メモリインターフェイス１５は、不揮発性メモリ２から読み出した符号語をＥＣＣ回路１４に入力する。ＥＣＣ回路１４は、入力された符号語を復号し、復号されたデータをＲＡＭ１１にストアする。プロセッサ１２は、ＲＡＭ１１にストアされたデータを、ホストインターフェイス１３を介してホストに送信する。なお、不揮発メモリ２では、複数のチップが接続される場合もあり、不揮発メモリ２とメモリインターフェイス１５は、貫通ビア（ＴＳＶ）によって接続することも可能である。
【００２４】
図２は、本実施形態の不揮発性メモリの構成例を示すブロック図である。不揮発性メモリ２は、ＮＡＮＤ  Ｉ／Ｏインターフェイス２１、制御部２２、ＮＡＮＤメモリセルアレイ（メモリセル部）２３、およびページバッファ２４を備える。不揮発性メモリ２は、例えば１チップの半導体基板（例えば、シリコン基板）からなる。
【００２５】
制御部２２は、ＮＡＮＤ  Ｉ／Ｏインターフェイス２１経由でメモリコントローラ１から入力されたコマンド等に基づいて、不揮発性メモリ２の動作を制御する。具体的には、制御部２２は、書き込み要求が入力された場合、書き込みが要求されたデータをＮＡＮＤメモリセルアレイ２３上の指定されたアドレスへ書き込むよう制御する。また、制御部２２は、読み出し要求が入力された場合、読み出しが要求されたデータをＮＡＮＤメモリセルアレイ２３から読み出してＮＡＮＤ  Ｉ／Ｏインターフェイス２１経由でメモリコントローラ１へ出力するよう制御する。ページバッファ２４は、ＮＡＮＤメモリセルアレイ２３の書き込み時にメモリコントローラ１から入力されたデータを一時的に格納したり、ＮＡＮＤメモリセルアレイ２３から読み出したデータを一時的に格納したりするバッファである。
【００２６】
図３は、３次元構造のメモリセルアレイのブロックの構成例を示す図である。図３は、３次元構造のメモリセルアレイを構成する複数のブロックのうちの１つのブロックＢＬＫを示している。メモリセルアレイの他のブロックも図３と同様の構成を有する。なお、本実施形態は、２次元構造のメモリセルにも適用可能である。
【００２７】
図示するように、ブロックＢＬＫは、例えば４つのフィンガーＦＮＧ（ＦＮＧ０〜ＦＮＧ３）を含む。また各々のフィンガーＦＮＧは、複数のＮＡＮＤストリングＮＳを含む。ＮＡＮＤストリングＮＳの各々は、例えば８個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ７）と、選択トランジスタＳＴ１，ＳＴ２とを含む。なお、メモリセルトランジスタＭＴの個数は８個に限られない。メモリセルトランジスタＭＴは、選択トランジスタＳＴ１，ＳＴ２間に、その電流経路が直列接続されるようにして配置されている。この直列接続の一端側のメモリセルトランジスタＭＴ７の電流経路は、選択トランジスタＳＴ１の電流経路の一端に接続され、他端側のメモリセルトランジスタＭＴ０の電流経路は、選択トランジスタＳＴ２の電流経路の一端に接続されている。
【００２８】
フィンガーＦＮＧ０〜ＦＮＧ３の各々の選択トランジスタＳＴ１のゲートは、それぞれセレクトゲート線ＳＧＤ０〜ＳＧＤ３に共通接続される。他方で、選択トランジスタＳＴ２のゲートは、複数のフィンガーＦＮＧ間で同一のセレクトゲート線ＳＧＳに共通接続される。また、同一のブロックＢＬＫ内にあるメモリセルトランジスタＭＴ０〜ＭＴ７の制御ゲートは、それぞれワード線ＷＬ０〜ＷＬ７に共通接続される。すなわち、ワード線ＷＬ０〜ＷＬ７及びセレクトゲート線ＳＧＳは、同一ブロックＢＬＫ内の複数のフィンガーＦＮＧ０〜ＦＮＧ３間で共通に接続されているのに対し、セレクトゲート線ＳＧＤは、同一ブロックＢＬＫ内であってもフィンガーＦＮＧ０〜ＦＮＧ３毎に独立している。
【００２９】
ＮＡＮＤストリングＮＳを構成するメモリセルトランジスタＭＴ０〜ＭＴ７の制御ゲート電極には、それぞれワード線ＷＬ０〜ＷＬ７が接続されており、また各ＮＡＮＤストリングＮＳ中のメモリセルトランジスタＭＴｉ（ｉ＝０〜ｎ）間は、同一のワード線ＷＬｉ（ｉ＝０〜ｎ）によって共通接続されている。すなわち、ブロックＢＬＫ内において同一行にあるメモリセルトランジスタＭＴｉの制御ゲート電極は、同一のワード線ＷＬｉに接続される。なお、以下の説明では、ＮＡＮＤストリングＮＳをストリングという場合がある。
【００３０】
各メモリセルは、ワード線ＷＬｉに接続するとともにビット線にも接続される。各メモリセルは、ワード線ＷＬｉおよびセレクトゲート線ＳＧＤ０〜ＳＧＤ３を識別するアドレスとビット線を識別するアドレスとで識別可能である。上述した通り、同一のブロックＢＬＫ内にあるメモリセル（メモリセルトランジスタＭＴ）のデータは、一括して消去される。一方、データの読み出し及び書き込みは、物理セクタＭＳ単位で行われる。１物理セクタＭＳは、１つのワード線ＷＬｉに接続され、かつ１つのフィンガーＦＮＧに属する複数のメモリセルを含む。
【００３１】
リード動作及びプログラム動作時において、物理アドレスに応じて、１本のワード線ＷＬｉおよび１本のセレクトゲート線ＳＧＤが選択され、物理セクタＭＳが選択される。
【００３２】
図４は、３次元構造のＮＡＮＤメモリのメモリセルアレイの一部領域の断面図である。図４に示すように、ｐ型ウェル領域（P-well）上に複数のＮＡＮＤストリングＮＳが形成されている。すなわち、ｐ型ウェル領域上には、セレクトゲート線ＳＧＳとして機能する複数の配線層３３３、ワード線ＷＬｉとして機能する複数の配線層３３２、およびセレクトゲート線ＳＧＤとして機能する複数の配線層３３１が形成されている。
【００３３】
そして、これらの配線層３３３，３３２，３３１を貫通してｐ型ウェル領域に達するメモリホール３３４が形成されている。メモリホール３３４の側面には、ブロック絶縁膜３３５、電荷蓄積層３３６、およびゲート絶縁膜３３７が順次形成され、更にメモリホール３３４内に導電膜３３８が埋め込まれている。導電膜３３８は、ＮＡＮＤストリングＮＳの電流経路として機能し、メモリセルトランジスタＭＴ並びに選択トランジスタＳＴ１及びＳＴ２の動作時にチャネルが形成される領域である。
【００３４】
各ＮＡＮＤストリングＮＳにおいて、ｐ型ウェル領域上に選択トランジスタＳＴ２、複数のメモリセルトランジスタＭＴ、及び選択トランジスタＳＴ１が順次積層されている。導電膜３３８の上端には、ビット線ＢＬとして機能する配線層が形成される。
【００３５】
さらに、ｐ型ウェル領域の表面内には、ｎ＋型不純物拡散層およびｐ＋型不純物拡散層が形成されている。ｎ＋型不純物拡散層上にはコンタクトプラグ３４０が形成され、コンタクトプラグ３４０上には、ソース線ＳＬとして機能する配線層が形成される。またｐ＋型不純物拡散層上にはコンタクトプラグ３３９が形成され、コンタクトプラグ３３９上には、ウェル配線ＣＰＷＥＬＬとして機能する配線層が形成される。
【００３６】
以上の図４に示した構成が、図４の紙面の奥行き方向に複数配列されており、奥行き方向に一列に並ぶ複数のＮＡＮＤストリングの集合によって、１つのフィンガーＦＮＧが形成される。
【００３７】
図５は、第１の実施形態のしきい値領域の一例を示す図である。図５では、３ｂｉｔ／Ｃｅｌｌの不揮発性メモリ２のしきい値分布例を示している。不揮発性メモリ２では、メモリセルのフローティングゲートに蓄えられた電荷量により情報を記憶する。各メモリセルは、電荷量に応じたしきい値電圧を有する。そして、メモリセルに記憶する複数のデータ値を、しきい値電圧の複数の領域（しきい値領域）にそれぞれ対応させる。
【００３８】
図５の、Ｅｒ、Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇと記載した８つの分布（山型）は、８つのしきい値領域内のそれぞれのしきい値分布を示している。このように、各メモリセルは、７つの境界によって仕切られたしきい値分布を有している。図５の横軸はしきい値電圧を示し、縦軸はメモリセル数（セル数）の分布を示している。
【００３９】
本実施形態では、しきい値電圧がＶｒ１以下となる領域を領域Ｅｒとよび、しきい値電圧がＶｒ１より大きくＶｒ２以下となる領域を領域Ａとよび、しきい値電圧がＶｒ２より大きくＶｒ３以下となる領域を領域Ｂとよび、しきい値電圧がＶｒ３より大きくＶｒ４以下となる領域を領域Ｃとよぶ。また、本実施形態では、しきい値電圧がＶｒ４より大きくＶｒ５以下となる領域を領域Ｄとよび、しきい値電圧がＶｒ５より大きくＶｒ６以下となる領域を領域Ｅとよび、しきい値電圧がＶｒ６より大きくＶｒ７以下となる領域を領域Ｆとよび、しきい値電圧がＶｒ７より大きい領域を領域Ｇとよぶ。
【００４０】
また、領域Ｅｒ，Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇに対応するしきい値分布をそれぞれ分布Ｅｒ，Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ（第１〜第８の分布）と呼ぶ。Ｖｒ１〜Ｖｒ７は、各領域の境界となるしきい値電圧である。
【００４１】
不揮発性メモリ２では、メモリセルの複数のしきい値領域（すなわちしきい値分布）に複数のデータ値をそれぞれ対応させる。この対応をデータコーディングという。このデータコーディングをあらかじめ定めておき、データの書き込み（プログラム）時には、データコーディングに従って記憶するデータ値に応じたしきい値領域内となるようにメモリセルに電荷を注入する。そして、読み出し時には、メモリセルに読み出し電圧を印加し、読み出し電圧よりメモリセルのしきい値が低いか高いかにより、データが決定される。しきい値電圧が、読み出し電圧より低い場合には、「消去」状態であるデータ値は“１”と定義する。しきい値電圧が読み出し電圧以上である場合には、「プログラムされた」状態であり、データを“０”と定義する。
【００４２】
データの読み出し時には、読み出し対象の境界の読み出しレベルよりも、しきい値が低いか高いかでデータが決定される。しきい値が最も低い場合は、「消去」状態であり、全てのｂｉｔのデータが”１”と定義される。しきい値が、「消去」状態よりも高い場合は、「プログラムされた」状態であり、コーディングに従ってデータを”１”または”０”と定義される。
【００４３】
図６は、第１の実施形態のデータコーディングを示す図である。本実施形態では、図５に示した８つのしきい値分布（しきい値領域）を３ｂｉｔの８つのデータ値にそれぞれ対応させる。しきい値電圧と、Upper，Middle，Lowerページに対応するビットのデータ値との関係は、以下に示す通りである。
・しきい値電圧がＥｒ領域内にあるメモリセルは“１１１”を記憶している状態である。
・しきい値電圧がＡ領域内にあるメモリセルは“１０１”を記憶している状態である。
・しきい値電圧がＢ領域内にあるメモリセルは“００１”を記憶している状態である。
・しきい値電圧がＣ領域内にあるメモリセルは“０１１”を記憶している状態である。
・しきい値電圧がＤ領域内にあるメモリセルは“０１０”を記憶している状態である。
・しきい値電圧がＥ領域内にあるメモリセルは“１１０”を記憶している状態である。
・しきい値電圧がＦ領域内にあるメモリセルは“１００”を記憶している状態である。
・しきい値電圧がＧ領域内にあるメモリセルは“０００”を記憶している状態である。
【００４４】
このように、しきい値電圧の領域毎に、各メモリセルの３ｂｉｔのデータの状態を表すことが出来る。なお、メモリセルが未書き込みの状態（「消去」の状態）では、メモリセルのしきい値電圧はＥｒ領域内にある。また、ここに示した符号では，Ｅｒ（消去）状態で”１１１”というデータを記憶し、Ａ状態で”１０１”というデータを記憶するといったように、任意の2つの隣接する状態間で１ｂｉｔのみデータが変化する。このように、図６に示したコーディングは、任意の２つの隣接する領域間で１ｂｉｔのみデータが変化するグレイ符号である。
【００４５】
図６に示す本実施形態のコーディングでは、各ページのビット値を判定するための境界となるしきい値電圧は、以下に示す通りである。
・Lowerページのビット値を判定するための境界となるしきい値電圧はＶｒ４である。
・Middleページのビット値を判定するための境界となるしきい値電圧はＶｒ２、Ｖｒ５、Ｖｒ７である。
・Upperページのビット値を判定するための境界となるしきい値電圧はＶｒ１、Ｖｒ３、Ｖｒ６である。
【００４６】
このように、ビット値を判定するための境界となるしきい値電圧の数（以下、境界数とよぶ）が、Lowerページ、Middleページ、Upperページでそれぞれ１，３，３である。以下、このようなコーディングをLowerページ、Middleページ、Upperページのそれぞれの境界数を用いて、１−３−３コーディングという。ここで注目すべき事項は、ページごとの隣接データと変化する境界の最大数が３であることである。境界数の最大数が３であることは、８つの状態を３ｂｉｔで表現する場合、最大境界数が最小であり、ビットエラーの偏りが少なくなる。
【００４７】
不揮発性メモリ２の制御部２２は、図６に示したコーディングに基づいて、ＮＡＮＤメモリセルアレイ２３へのプログラムおよびＮＡＮＤメモリセルアレイ２３からの読み出しを制御する。
【００４８】
３次元メモリセルはメモリセルのサイズが、近年の微細化が進んだ世代の２次元のＮＡＮＤメモリに対して大きく、セル間相互干渉が小さい。この場合は、一般的に、全ｂｉｔを同時に（各ｂｉｔを異なるページに割り付けていれば全ページを同時に）プログラムする手法が取られる。
【００４９】
全ｂｉｔを同時にプログラムする場合、データコーディングとしては、１−２−４コーディングまたは２−３−２コーディングが用いられている。１−２−４コーディングでは、８個のしきい値分布間の７個の境界を３つのページに分配する際に、Lowerページに１つ、Middleページに２つ、Upperページに４つというように境界を分配している。また、２−３−２コーディングでは、８個のしきい値分布間の７個の境界を３つのページに分配する際に、Upperページに２つ、Middleページに３つ、Lowerページに２つというように境界を分配している。
【００５０】
ところが、１−２−４コーディングの場合、境界数が各ページで著しく偏っているために、結果としてページ間のビットエラー率の偏りが大きくなる。これは、ビットエラーの原因のほとんどが隣接分布へのしきい値移動によって引き起こされ、境界数を多く有しているページほどビットエラー数が多くなるためである。このことは、メモリセルとしてのエラー率が同じであったとしても、ページデータのエラーを訂正するのに必要なＥＣＣの訂正能力を強化しなくてはいけないことにつながるので、記憶装置の速度、コストおよび消費電力を悪化させてしまう。また、境界数の偏りは、読み出し速度の偏りも引き起こす。
【００５１】
また、３ｂｉｔ／ＣｅｌｌのＮＡＮＤメモリでは、セル間相互干渉が１ｂｉｔ／Ｃｅｌｌや２ｂｉｔ／ＣｅｌｌのＮＡＮＤメモリと比較して大きい。このため、近年の微細化が進んだ世代のＮＡＮＤメモリでは、一般的に、セル間相互干渉を抑えるため、３つ又は２つのステージを用いて、メモリセルのフローティングゲートに少しずつ電荷を注入するプログラム方法（LM-Foggy-Fineプログラム又はFoggy-Fineプログラム）がある。このLM-Foggy-Fineプログラムでは、１つ目のステージ（LMステージ）の書き込み後、隣接セルの書き込みを行い、先ほどのセルに戻り、２つ目のステージ（Foggyステージ）を書き込んだ後、更に再び隣接セルに書き込み、この後再び先ほどのメモリセルに戻り３つ目のステージ（Fineステージ）の３つのプログラムステージによって書き込みが実施される。
【００５２】
またFoggy-Fineプログラムでは、１つ目のステージ（Foggyステージ）の書き込み後、隣接セルの書き込みを行い、この後先ほどのメモリセルに戻り２つ目のステージ（Fineステージ）の２つのプログラムステージによって書き込みが実施される。この場合の各プログラムステージは、プログラムの実行単位であり、１ワード線ＷＬｉのプログラムは３つのプログラムステージを実行することで完了する。
【００５３】
１つ目のステージであるLMステージのプログラムでは、入力データは、Lowerページデータのみでよい。２つ目のステージであるFoggyステージのプログラムでは、８つのしきい値分布を用いてプログラムが実行される。この時のしきい値分布（しきい値領域）は、最終的なデータコーディングにおけるしきい値分布より広い幅を有する。すなわち、Foggyステージでは、Foggy（ラフ）書き込みが行われる。このFoggyステージのプログラムでは、入力データは３ページ全てが必要である。Foggyステージのプログラム後のしきい値分布は、隣接する分布が互いに重なり合っている中間状態であるので、データの読み出しは出来ない。３つ目のステージであるFineステージのプログラムでは、Foggyステージのプログラム後のしきい値分布を最終的なデータコーディングにおけるしきい値分布に移動させる。すなわち、Fineステージでは、Fine書き込みが行われる。このFineステージのプログラムも、入力データは３ページ全てが必要である。Fineステージのプログラム後のしきい値分布は、隣接する分布が分離された最終状態であるので、Fineステージのプログラム後にはデータの読み出しが可能である。
【００５４】
２−３−２コーディングの場合、境界数の偏りは少ないが、LM-Foggy-Fineプログラムのデータ入力において、全てのステージで３ページ分のデータ入力が必要となる。また、Foggy-Fineプログラムのデータ入力において、全てのステージで２ページ分のデータ入力が必要となる。これは、データ入力にかかる時間の増大となり、記憶装置の速度を悪化させてしまう。また、記憶装置内において、ＮＡＮＤメモリへ入力するためにデータを保持しておくための書き込みバッファのバッファ量（書き込みバッファ量）を増大させてしまう。この書き込みバッファは、一般的に、記憶装置が備えるＲＡＭ１１の一部の領域が割り当てられたものである。
【００５５】
これらに対する対策として、１−３−３コーディングを採用してLM-Foggy-Fineプログラムを行う方法がある。この方法では、LM-Foggy-Fineプログラムが採用されているので、セル間相互干渉を抑制できる。また、LMステージの入力は、１ページ分のデータでよいので、書き込みバッファ量の低減と、各ページ間の境界数の偏りに起因するビットエラー率の偏りの抑制と、を両立させている。
【００５６】
しかしながら、不揮発性メモリ２のＮＡＮＤメモリが３次元構造を有している場合、１−３−３コーディングを採用したLM-Foggy-Fineプログラム又はFoggy-Fineプログラムを適用しても、書き込みバッファ量が大きくなるので、メモリコントローラ１のコストが増大する。
【００５７】
そこで、本実施形態では、記憶装置が、３次元構造を有した不揮発性メモリ２に対して、１−３−３コーディングを採用し、さらに、２ステージでページ単位（ｐａｇｅ  ｂｙ  ｐａｇｅ）の書き込みを実施する。これにより、本実施形態では、３次元構造を有した不揮発性メモリ２においてもセル間相互干渉と各ページ間のビットエラー率の偏りを抑制しつつ、メモリコントローラ１の書き込みバッファ量を低減する。
【００５８】
ここで、隣接メモリセル間干渉について説明する。ある１つのメモリセルのフローティングゲートに蓄積された電荷は、隣接するメモリセルの電界を乱し、その結果、隣接するメモリセルの読み出しのしきい値を変動させるノイズを与える。ある電界条件下でプログラムとベリファイとが実施され、プログラムが完結した後、隣接するメモリセルが異なる電荷にプログラムされるということは、これに起因して読み出し精度が劣化することとなる。この隣接メモリセル間干渉は、メモリデバイスの製造技術が微細化され、メモリセル間隔が縮小するにつれて顕著となる。そして、この隣接メモリセル間干渉は、大きくは同一ワード線ＷＬｉ上で異なるビットラインの隣接メモリセルと、同一ビットライン上で異なるワード線ＷＬｉの隣接メモリセルと、によってもたらされる。
【００５９】
隣接メモリセル間干渉は、プログラムおよびベリファイの時と、隣接するメモリセルがプログラムされた後の読み出しの時と、の間における、メモリセルの電界条件の違いを少なくすることによって緩和することが可能である。同一ワード線ＷＬｉ上で異なるビットラインの隣接メモリセルとの間の隣接メモリセル間干渉を低減する１つの方法として、プログラムを複数のステージに分割し、各ステージ間での電荷の大きな変化を回避するマルチステージのプログラムを実行する方法がある。
【００６０】
本実施形態におけるプログラムシーケンスでは、１つのワード線ＷＬｉ上の３ｂｉｔは、２つのプログラムステージ、すなわち１ｓｔステージと２ｎｄステージとによってプログラムされる。各プログラムステージは、プログラムの実行単位であり、本実施形態の記憶装置は、ワード線ＷＬｉのプログラムを、２つのプログラムステージを実行することで完了する。また、本実施形態では、２つのプログラムステージのそれぞれに、３ｂｉｔの何れかのページが割り付けられる。具体的には、１ｓｔステージのプログラムには、Lowerページデータを割り付けられ、２ｎｄステージのプログラムには、MiddleページおよびUpperページのデータが割り付けられる。
【００６１】
図７は、第１の実施形態におけるプログラム後のしきい値分布を示す図である。図７では、メモリセルに対する各プログラムステージ後のしきい値分布を示している。図７の（Ｔ１）は、プログラム前の初期状態である消去状態のしきい値分布を示している。図７の（Ｔ２）は、１ｓｔステージのプログラム後のしきい値分布を示している。図７の（Ｔ３）は、２ｎｄステージのプログラム後のしきい値分布を示している。
【００６２】
図７の（Ｔ１）に示すように、ＮＡＮＤメモリセルアレイ２３の全メモリセルは、未書き込みの状態（「消去」の状態）では分布Ｅｒの状態である。不揮発性メモリ２の制御部２２は、図７の（Ｔ２）に示すように、１ｓｔステージのプログラムでは、Lowerページに書き込む（記憶する）ビット値に応じて、メモリセルごとに分布Ｅｒのままとする、または電荷を注入して分布Ｅｒよりも上の分布に移動させる。具体的には、制御部２２は、Lowerページに書き込むビット値が“１”の場合は、電荷を注入せず、Lowerページに書き込むビット値が“０”の場合は電荷を注入して、しきい値電圧を高い方に移動させるようプログラムする。
【００６３】
これにより、メモリセルは、Lowerページデータによって、２値のレベルにプログラムされる。ここで注意すべき事項は、１ｓｔステージのプログラム（第１のプログラム）におけるファンクションは、Lowerページデータのみのファンクションであることである。この実行に必要なページデータは、Lowerページのみでよい。さらに、この１ｓｔステージのプログラム後のしきい値分布は、後の２ｎｄステージのプログラム（第２のプログラム）で最終的にプログラムし直されるため、分布を細く整形する必要が無く、高速なプログラムが可能である。そして、この１ｓｔステージのプログラム後のデータは、バイナリのように見えるので、Lowerページデータの読み出しが可能である。よって、１ｓｔステージでプログラムする際のしきい値のレベルは、２ｎｄステージのプログラムでＤ以上に遷移するよう割り付けることに鑑み、Ｖｒ１とＶｒ４との間に入るよう制御される。
【００６４】
また、図７の（Ｔ３）に示すように、２ｎｄステージのプログラムでは、データの書き込みにはMiddleページとUpperページとの２ページが必要である。そして、不揮発性メモリ２の制御部２２は、２ｎｄステージのプログラム後のしきい値分布を、各隣接する分布が分離された最終状態で８値のレベルとなるようにプログラムする。この場合、全てのページデータの読み出しが可能である。
【００６５】
なお、典型的には、プログラムは、１回または複数回のプログラム電圧パルスが印加されることによって行われる。各プログラム電圧パルスの後には、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために読み出しが行なわれる。この印加と読み出しとが繰り返されることで、所定のしきい値分布の範囲の中にメモリセルのしきい値を移動させることが可能となる。
【００６６】
なお、制御部２２は、１つのワード線ＷＬｉについて、１ｓｔステージのプログラムと、２ｎｄステージのプログラムとを連続して実施してもよいが、隣接メモリセル間干渉の影響を低減するために、複数のワード線ＷＬｉをまたいで、非連続的な順序でプログラムを実施することも可能である。
【００６７】
図８Ａは、第１の実施形態のプログラム順序の第１の例を示す図である。図８Ｂは、第１の実施形態のプログラム順序の第２の例を示す図である。図８Ｃは、第１の実施形態のプログラム順序の第３の例を示す図である。図８Ａ〜図８Ｃでは、隣接メモリセル間干渉の影響が小さくなるシーケンス（２ステージのプログラムの方法）を示している。図８Ａは、ブロック内のストリングが１つのＮＡＮＤメモリである場合のプログラム順序の一例を示している。また、図８Ｂおよび図８Ｃは、ブロック内のストリングが４つのＮＡＮＤメモリである場合のプログラム順序の一例を示している。
【００６８】
書き込みを開始すると、制御部２２は、所定の非連続的な順序でワード線ＷＬｉをまたぎながら、各プログラムステージを進む。すなわち、２つの異なるプログラムステージは、同じワード線ＷＬｉで連続的に実行されない。
【００６９】
例えば、ワード線ＷＬｉが２ｎｄステージまでプログラム完了した後に、隣接ワード線ＷＬｉにおいて、１ｓｔステージおよび２ｎｄステージのプログラムが行われると、しきい値の変動量が大きくなる。そして、隣接ワード線ＷＬｉのしきい値の変動量が大きいと、ワード線ＷＬｉ間の隣接メモリセル間干渉が大きくなる。したがって、ワード線ＷＬｉ間の隣接メモリセル間干渉を小さくするためには、ワード線ＷＬｉが２ｎｄステージまでプログラム完了した後に、隣接ワード線ＷＬｉのしきい値の変動量を小さくすることが有効である。このようなシーケンスであれば、ワード線ＷＬｉが２ｎｄステージまでプログラム完了した後の隣接ワード線ＷＬｉのプログラムステージは２ｎｄステージのみとなる。
【００７０】
図８Ａに示すＮＡＮＤメモリの場合（不揮発性メモリ２のＮＡＮＤメモリが３次元構造である場合）、書き込みを開始すると、制御部２２は、プロセッサ１２からの指示に基づいて、以下の（１）〜（９）に示す順番でプログラムを実施する。なお、以下の処理においては、制御部２２のプログラムの動作はプロセッサ１２からの指示に基づくが、説明の簡略化のため、プロセッサ１２からの指示に基づくという記載を省略する。
【００７１】
（１）まず、制御部２２は、ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ1１を実施する。
（２）次に、制御部２２は、ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ1２を実施する。
（３）次に、制御部２２は、ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ1３を実施する。
（４）次に、制御部２２は、ワード線ＷＬ２の１ｓｔステージのプログラムＳＴ1４を実施する。
（５）次に、制御部２２は、ワード線ＷＬ１の２ｎｄステージのプログラムＳＴ1５を実施する。
（６）次に、制御部２２は、ワード線ＷＬ３の１ｓｔステージのプログラムＳＴ1６を実施する。
（７）次に、制御部２２は、ワード線ＷＬ２の２ｎｄステージのプログラムＳＴ1７を実施する。
（８）次に、制御部２２は、ワード線ＷＬ４の１ｓｔステージのプログラムＳＴ1８を実施する。
（９）次に、制御部２２は、ワード線ＷＬ３の２ｎｄステージのプログラムＳＴ1９を実施する。
以下同様に、制御部２２は、図８Ａに示す表の右斜め上へ向かう矢印の順に処理を進めていく。
【００７２】
図８Ｂに示すＮＡＮＤメモリの場合（不揮発性メモリ２のＮＡＮＤメモリが３次元構造である場合）、書き込みを開始すると、制御部２２は、以下の（１１）〜（２４）に示す順番でプログラムを実施する。
【００７３】
（１１）まず、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ2１を実施する。
（１２）次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ2２を実施する。
（１３）次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ2３を実施する。
（１４）次に、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ2４を実施する。
（１５）次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ2５を実施する。
（１６）次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ2６を実施する。
（１７）次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ2７を実施する。
（１８）次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ2８を実施する。
（１９）次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ2９を実施する。
（２０）次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ2１０を実施する。
（２１）次に、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ2１１を実施する。
（２２）次に、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ2１２を実施する。
（２３）次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ２の１ｓｔステージのプログラムＳＴ2１３を実施する。
（２４）次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ１の２ｎｄステージのプログラムＳＴ2１４を実施する。
以下同様に、制御部２２は、図８Ｂに示す表の右斜め上へ向かう矢印の順に処理を進めていく。なお、図８Ｂでは、ブロック内のストリングが４つである場合について説明したが、ブロック内のストリングは、３つ以下であってもよいし、５つ以上であってもよい。
【００７４】
図８Ｃに示すＮＡＮＤメモリの場合（不揮発性メモリ２のＮＡＮＤメモリが３次元構造である場合）、書き込みを開始すると、制御部２２は、以下の（３１）〜（５０）に示す順番でプログラムを実施する。
【００７５】
（３１）まず、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ3１を実施する。
（３２）次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ3２を実施する。
（３３）次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ3３を実施する。
（３４）次に、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ０の１ｓｔステージのプログラムＳＴ3４を実施する。
（３５）まず、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ3５を実施する。
（３６）次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ3６を実施する。
（３７）次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ3７を実施する。
（３８）次に、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ１の１ｓｔステージのプログラムＳＴ3８を実施する。
（３９）次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ3９を実施する。
（４０）次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ3１０を実施する。
（４１）次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ3１１を実施する。
（４２）次に、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ０の２ｎｄステージのプログラムＳＴ3１２を実施する。
（４３）次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ２の１ｓｔステージのプログラムＳＴ3１３を実施する。
（４４）次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ２の１ｓｔステージのプログラムＳＴ3１４を実施する。
（４５）次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ２の１ｓｔステージのプログラムＳＴ3１５を実施する。
（４６）次に、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ２の１ｓｔステージのプログラムＳＴ3１６を実施する。
（４７）次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ１の２ｎｄステージのプログラムＳＴ3１７を実施する。
（４８）次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ１の２ｎｄステージのプログラムＳＴ3１８を実施する。
（４９）次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ１の２ｎｄステージのプログラムＳＴ3１９を実施する。
（５０）次に、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ１の２ｎｄステージのプログラムＳＴ3２０を実施する。
なお、図８Ｃでは、ブロック内のストリングが４つである場合について説明したが、ブロック内のストリングは、３つ以下であってもよいし、５つ以上であってもよい。
【００７６】
このように、ストリングが複数となっても、１つのストリング内におけるワード線ＷＬｉの各プログラムステージのプログラムの順番は、ストリングが１つの場合と同じである。ブロック内に複数のストリングが存在する３次元構造の不揮発性メモリ２の場合、ワード線ＷＬｉとストリングとの組み合わせ位置のプログラムは、一般的には、異なるストリング内の同一ワード線番号をまずプログラムしてから、次のワード線番号に進められる。このような順番に従った場合、図８Ａをストリング数分だけ結合すると、例えば、図８Ｂまたは図８Ｃのような順番となる。
【００７７】
ここで図９Ａ〜図９Ｃを用いて、第１の実施形態に係るプログラム順序に従った書き込み手順の例について説明する。図９Ａ〜図９Ｃでは、図８Ｂまたは図８Ｃに示すプログラム順序に従った場合の書き込み手順を示している。前述のように、メモリコントローラ１は、非連続的な順序でワード線ＷＬｉをまたぎながらプログラムステージを進めていくので、あるワード線ＷＬｉのまとまり（ここではブロック）をプログラムシーケンスのまとまりとしてプログラムを実行する。
【００７８】
図９Ａは、第１の実施形態に係る１ブロック分全体の書き込み手順の第１の例を示すフローチャートである。ここでの１ブロックは、ワード線ＷＬ０〜ＷＬｎ（ｎは自然数）のｎ＋１本のワード線ＷＬｉを有するとする。図９Ｂは、第１の実施形態に係る１ｓｔステージにおける書き込み手順を示すサブフローチャートであり、図９Ｃは、第１の実施形態に係る２ｎｄステージでの書き込み手順を示すサブフローチャートである。なお、図９Ａの各ステップの右に示した（１ｓｔ）は、図９Ｂに示す１ｓｔステージに対応し、（２ｎｄ）は、図９Ｃに示す２ｎｄステージに対応する。
【００７９】
図９Ａに示すように、書き込みを開始すると、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ０の１ｓｔステージのプログラムを実施する（ステップＳ１０）。次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ０の１ｓｔステージのプログラムを実施する（ステップＳ２０）。この後、制御部２２は、各ストリングに対してステップＳ１０，Ｓ２０と同様の処理を実施する。そして、制御部２２は、ストリングＳｔ３＿ワード線ＷＬ０の１ｓｔステージのプログラムを実施する（ステップＳ３０）。
【００８０】
さらに、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ１の１ｓｔステージのプログラムを実施する（ステップＳ４０）。次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ０の２ｎｄステージのプログラムを実施する（ステップＳ５０）。次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ１の１ｓｔステージのプログラムを実施する（ステップＳ６０）。この後、制御部２２は、各ストリングの各ワード線ＷＬｉに対してステップＳ４０，Ｓ５０，Ｓ６０のような処理を繰り返す。
【００８１】
そして、制御部２２は、ストリングＳｔ０＿ワード線ＷＬｎの１ｓｔステージのプログラムを実施する（ステップＳ７０）。次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬｎ−１の２ｎｄステージのプログラムを実施する（ステップＳ８０）。この後、制御部２２は、各ストリングの各ワード線ＷＬｉに対してステップＳ７０，Ｓ８０のような処理を繰り返す。
【００８２】
そして、制御部２２は、ストリングＳｔ３＿ワード線ＷＬｎ−１の２ｎｄステージのプログラムを実施する（ステップＳ９０）。次に、制御部２２は、ストリングＳｔ０＿ワード線ＷＬｎの２ｎｄステージのプログラムを実施する（ステップＳ１００）。次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬｎの２ｎｄステージのプログラムを実施する（ステップＳ１１０）。この後、制御部２２は、各ストリングに対してステップＳ１００，Ｓ１１０と同様の処理を実施する。そして、制御部２２は、ストリングＳｔ３＿ワード線ＷＬｎの２ｎｄステージのプログラムを実施する（ステップＳ１２０）。
【００８３】
図９Ｂに示すように、１ｓｔステージのプログラムでは、まず、メモリコントローラ１から不揮発性メモリ２へLowerページデータの入力開始コマンドが入力される（ステップＳ２１０）。そして、メモリコントローラ１から不揮発性メモリ２へLowerページデータが入力される（ステップＳ２２０）。さらに、メモリコントローラ１から不揮発性メモリ２へ１ｓｔステージのプログラム実行コマンドが入力され（ステップＳ２３０）、これによりチップビジーとなる（ステップＳ２４０）。
【００８４】
データ書き込みの際には、１〜複数回のプログラム電圧パルスが印加される（ステップＳ２５０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するためにデータ読み出しが行なわれる（ステップＳ２６０）。
【００８５】
さらに、Lowerページにおけるデータのフェイルビット数がクライテリア（判定基準）よりも小さいか否かが確認される（ステップＳ２７０）。データのフェイルビット数がクライテリア以上である場合（ステップＳ２７０、Ｎｏ）、ステップＳ２５０〜Ｓ２７０の処理が繰り返される。そして、データのフェイルビット数がクライテリアよりも小さくなると（ステップＳ２７０、Ｙｅｓ）、チップレディーとなる（ステップＳ２８０）。このように、印加と、読み出しと、確認とが繰り返されることで、所定のしきい値分布の範囲の中にメモリセルのしきい値を移動させることが可能となる。
【００８６】
図９Ｃに示すように、２ｎｄステージのプログラムでは、まず、メモリコントローラ１から不揮発性メモリ２へMiddleページのデータの入力開始コマンドが入力される（ステップＳ３１０）。そして、メモリコントローラ１から不揮発性メモリ２へMiddleページのデータが入力される（ステップＳ３２０）。
【００８７】
次に、メモリコントローラ１から不揮発性メモリ２へUpperページのデータの入力開始コマンドが入力される（ステップＳ３３０）。そして、メモリコントローラ１から不揮発性メモリ２へUpperページのデータが入力される（ステップＳ３４０）。次に、メモリコントローラ１から不揮発性メモリ２へ２ｎｄステージのプログラム実行コマンドが入力され（ステップＳ３５０）、これによりチップビジーとなる（ステップＳ３６０）。
【００８８】
この後、制御部２２は、ＩＤＬ（Internal  Data  Load）であるLowerページデータの読み出しを行う（ステップＳ３７０）。そして、Lowerページデータに基づいて、MiddleページおよびUpperページのプログラム先のＶｔｈ（しきい値電圧）が決定される（ステップＳ３８０）。この後、決定されたＶｔｈを用いて、MiddleページおよびUpperページへのデータ書き込みが行われる。
【００８９】
さらに、制御部２２は、ＩＤＬの読み出しデータの信頼性を上げるために、複数回数読み出しを行い、チップ内のページバッファ２４でこの読み出し結果の多数決をとり、次の書き込みデータとして使用することも可能である。無論、制御部２２は、通常の読み出し動作時に於いて、複数回数読み出しを行いチップ内でこの読み出し結果の多数決をとり、外部への読み出しデータとして使用することも可能である。
【００９０】
図９Ｅは、複数回数の読み出し結果の多数決処理を説明するための図である。図９Ｅでは、正しいビットを丸印（○）で示し、誤ったビットをばつ印（×）で示している。また、図９Ｅでは、３回の読み出しが行われた場合の多数決の結果を示している。
【００９１】
各ビットにおいて、多数決の結果が誤りと判断されるのは、（ａ）３回とも誤った場合と、（ｂ）２回とも誤った場合である。各ビットが誤っている確立をｐとすると、ｐ＝０．２の場合、（ａ）３回誤る確率は、ｐ×ｐ×ｐ＝０．２×０．２×０．２であり、（ｂ）２回誤る確率は、（１−ｐ）×ｐ×ｐ＝（１−０．２）×０．２×０．２である。したがって、３回の多数決結果が誤りと判断されるのは、（ｐ×ｐ×ｐ）＋３×（１−ｐ）×ｐ×ｐ＝０．１０４である。このように、制御部２２は、複数回数の読み出し結果の多数決処理をチップ内のページバッファ２４で行うことで、読み出しデータの信頼性を上げることが可能となる。
【００９２】
MiddleページおよびUpperページへのデータ書き込みの際には、１〜複数回のプログラム電圧パルスが印加される（ステップＳ３９０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために、MiddleページおよびUpperページのデータ読み出しが行なわれる（ステップＳ４００）。
【００９３】
さらに、MiddleページおよびUpperページにおけるデータのフェイルビット数がクライテリアよりも小さいか否かが確認される（ステップＳ４１０）。MiddleページおよびUpperページにおけるデータのフェイルビット数がクライテリア以上である場合（ステップＳ４１０、Ｎｏ）、ステップＳ３９０〜Ｓ４１０の処理が繰り返される。そして、データのフェイルビット数がクライテリアよりも小さくなると（ステップＳ４１０、Ｙｅｓ）、チップレディーとなる（ステップＳ４２０）。
【００９４】
ここで、図９Ｃに示した書き込み手順の変形例について説明する。図９Ｄは、第１の実施形態に係る２ｎｄステージでの書き込み手順の変形例を示すサブフローチャートである。なお、図９Ｄに示す処理手順では、図９Ｃで説明したステップＳ３７０の処理が行われないところを除いて、ステップＳ３１０〜Ｓ４２０の処理手順は図９Ｃと同じである。
【００９５】
図９Ｄに示す処理手順の場合、ステップＳ３１０の前にステップＳ３０１〜Ｓ３０９の処理が行われる。具体的には、まず、メモリコントローラ１から不揮発性メモリ２へLowerページの読み出しコマンドが入力され（ステップＳ３０１）、これによりチップビジーとなる（ステップＳ３０２）。
【００９６】
この後、制御部２２は、ＩＤＬであるLowerページデータの読み出しをＶｒ４のしきい値電圧で行う。そして、制御部２２は、Ｖｒ４のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ３０３）。この後、チップレディーとなる（ステップＳ３０４）。
【００９７】
制御部２２が読み出したLowerページデータを出力すると（ステップＳ３０５）、このLowerページデータは、ＥＣＣ回路１４に送信される（ステップＳ３０６）。これにより、ＥＣＣ回路１４がLowerページデータをＥＣＣ訂正する（ステップＳ３０７）。
【００９８】
そして、メモリコントローラ１から不揮発性メモリ２へLowerページのデータの入力開始コマンドが入力される（ステップＳ３０８）。これにより、ＥＣＣ回路１４が、不揮発性メモリ２へLowerページのデータを入力する（ステップＳ３０９）。
【００９９】
この後、ステップＳ３１０〜Ｓ４２０の処理が行われる。なお、ステップＳ３８０では、ＥＣＣ回路１４からのLowerページデータに基づいて、MiddleページおよびUpperページのプログラム先のＶｔｈが決定される。
【０１００】
上述した２ｎｄステージのプログラムでは、不揮発性メモリ２へのデータ入力は、MiddleページとUpperページとの２ページだけである。しかし、この２ｎｄステージでは、メモリセルのプログラムの目的地であるＶｔｈには、Lowerページ（２ｎｄステージを始める前のＶｔｈ）も含めた３ページ分のデータが必要である。そのため、このステージのプログラムでは、前処理として、制御部２２が、まずLowerページデータを読み出し、そのデータを、入力されたMiddleページとUpperページとで合成してプログラム先のＶｔｈを決定するという動作を行う。
【０１０１】
Lowerページデータを読み出すことができるのは、Lowerページの境界数が１である１−３−３コーディングを採用しているからである。２ｎｄステージでLowerページデータが読み出されることで、２ｎｄステージでは、Lowerページデータ入力を不要としている。すなわち、１−３−３コーディングを採用し、Lowerページデータに基づいてプログラム先のＶｔｈが決定されるので、ワード線ＷＬｉ間の隣接メモリセル間干渉を小さくできるとともに、１つのページデータは１回のデータ入力で済む。
【０１０２】
これにより、１−３−３コーディングを採用して３ステージでLM-Foggy-Fineプログラムが実行される場合には、メモリコントローラ１の書き込みバッファに必要なメモリ量が複数ワード線分（最大７ページ）であったのに対し、本実施形態では、メモリコントローラ１の書き込みバッファに必要なメモリ量が最大でも２ページ分で済む。
【０１０３】
ここで、１−３−３コーディングを採用したLM-Foggy-Fineプログラムの処理手順と、本実施形態のプログラム処理手順との比較について説明する。図１０Ａは、１−３−３コーディングを採用したLM-Foggy-Fineプログラムにおける書き込みバッファデータ量を説明するための図である。
【０１０４】
図１０Ａおよび後述する図１０Ｂでは、上段側に、ブロック書き込みのデータ入力とプログラム実行のタイムチャートを示し、下段側に、データを書き込みバッファ内に保持するのに必要な期間のタイムチャートを示している。なお、図１０Ａおよび後述する図１０Ｂでは、説明を簡単化するために、１ブロック内のストリング数が１の場合を示している。ストリングが複数の場合は、ストリング数倍だけのメモリ量が必要である。
【０１０５】
１−３−３コーディングのLM-Foggy-Fineプログラムの場合、１つ目のステージであるLMステージでは、１ページ分のデータ入力と、この１ページ分のプログラム（LMステージのプログラム）とが行われる。また、１−３−３コーディングのLM-Foggy-Fineプログラムの場合、２つ目のステージであるFoggyステージでは、３ページ分のデータ入力と、この３ページ分のプログラム（Foggyステージのプログラム）とが行われる。また、１−３−３コーディングのLM-Foggy-Fineプログラムの場合、３つ目のステージであるFineステージでは、３ページ分のデータ入力と、この３ページ分のプログラム（Fineステージのプログラム）とが行われる。
【０１０６】
そして、各ワード線ＷＬ０，ＷＬ１，ＷＬ２，・・・では、Fineステージにおいてプログラムが開始されるまで、LMステージにおいて書き込まれた１ページ分のデータと、Foggyステージにおいて書き込まれた３ページ分のデータとを、書き込みバッファ内に格納しておく必要がある。
【０１０７】
LM-Foggy-Fineプログラムにおいても、隣接メモリセル間干渉を低減するため、Lower／Middle／Upperの３ページ分のデータは連続して書き込まれない。例えば、ワード線ＷＬ０へのLMステージが実行された後、ワード線ＷＬ０へのFoggyステージが実行される前に、ワード線ＷＬ０に隣接するワード線ＷＬ１へのLMステージが実行される。また、ワード線ＷＬ０へのFoggyステージが実行された後、ワード線ＷＬ０へのFineステージが実行される前に、ワード線ＷＬ０に隣接するワード線ＷＬ１へのFoggyステージが実行される。同様に、ワード線ＷＬ１へのLMステージが実行された後、ワード線ＷＬ１へのFoggyステージが実行される前に、ワード線ＷＬ１に隣接するワード線ＷＬ２へのLMステージが実行される。また、ワード線ＷＬ１へのFoggyステージが実行された後、ワード線ＷＬ１へのFineステージが実行される前に、ワード線ＷＬ１に隣接するワード線ＷＬ２へのFoggyステージが実行される。
【０１０８】
このように、LM-Foggy-Fineプログラムでは、各ワード線ＷＬｉにおいて、LMステージからFineステージまでには長時間を要する。例えば、ワード線ＷＬ１におけるLMステージからFineステージまでの間には、以下の（Ｐ１）〜（Ｐ５）のステージのプログラムが実行される。
（Ｐ１）ワード線ＷＬ２に対するLMステージ
（Ｐ２）ワード線ＷＬ１に対するFoggyステージ
（Ｐ３）ワード線ＷＬ０に対するFineステージ
（Ｐ４）ワード線ＷＬ３に対するLMステージ
（Ｐ５）ワード線ＷＬ２に対するFoggyステージ
【０１０９】
このように、１−３−３コーディングのLM-Foggy-Fineプログラムの場合、１つ目であるLMステージでは、入力データはLowerページだけである。ところが、この方法の場合、最終の３つ目であるFineステージのデータ入力が完了するまで、Lower／Middle／Upperの３ページ分のデータを、書き込みバッファ内に保持しておく必要がある。また、隣接メモリセル間干渉を低減するためには、複数のワード線ＷＬｉにおけるデータを、書き込みバッファ内に保持しておく必要がある。例えば、ワード線ＷＬ２に対してFoggyステージが実行される際には、ワード線ＷＬ１に対する３ページ分のデータと、ワード線ＷＬ２に対する３ページ分のデータと、ワード線ＷＬ３に対する１ページ分のデータとが、書き込みバッファ内に保持されている必要がある。このように、１−３−３コーディングのLM-Foggy-Fineプログラムの場合、最大７ページ分のデータが書き込みバッファ内に保持されている必要がある。
【０１１０】
図１０Ｂは、第１の実施形態のプログラムにおける書き込みバッファ量（バッファデータ量）を説明するための図である。本実施形態のプログラムでは、１−３−３コーディングで２ステージのプログラムが用いられる。この本実施形態のプログラムでは、１ｓｔステージでは、１ページ分（Lowerページ）のデータ入力と、この１ページ分のプログラム（１ｓｔプログラム）とが行われる。また、本実施形態のプログラムの場合、２ｎｄステージでは、２ページ分（MiddleページおよびUpperページ）のデータ入力と、この２ページ分のプログラム（２ｎｄプログラム）とが行われる。
【０１１１】
そして、各ワード線ＷＬ０，ＷＬ１，ＷＬ２，・・・では、各ステージのデータ入力の際にデータを書き込みバッファ内に格納しておけばよく、プログラムが開始されると、書き込みバッファ内からデータが削除されてもよい。例えば、１ｓｔステージにおいてデータが入力されると、このデータは書き込みバッファ内に格納される。そして、１ｓｔステージにおいてプログラムが開始されると、書き込みバッファ内に格納しておいたデータは削除されてもよい。同様に、２ｎｄステージにおいてデータが入力されると、このデータは書き込みバッファ内に格納される。そして、２ｎｄステージにおいてプログラムが開始されると、書き込みバッファ内に格納しておいたデータは削除されてもよい。
【０１１２】
本実施形態のプログラムにおいても、隣接メモリセル間干渉を低減するため、Lower／Middle／Upperの３ページ分のデータは連続して書き込まれない。例えば、ワード線ＷＬ０への１ｓｔステージが実行された後、ワード線ＷＬ０への２ｎｄステージが実行される前に、ワード線ＷＬ０に隣接するワード線ＷＬ１への１ｓｔステージが実行される。同様に、ワード線ＷＬ１への１ｓｔステージが実行された後、ワード線ＷＬ１への２ｎｄステージが実行される前に、ワード線ＷＬ１に隣接するワード線ＷＬ２への１ｓｔステージが実行される。
【０１１３】
このように、本実施形態のプログラムは、２ステージなので、各ワード線ＷＬｉにおいて、１ｓｔステージから２ｎｄステージまでの処理は短時間となる。例えば、ワード線ＷＬ１における１ステージから２ｎｄステージまでの間には、以下の（Ｐ１１）のステージのプログラムが実行される。
（Ｐ１１）ワード線ＷＬ２に対する１ｓｔステージ
【０１１４】
また、本実施形態のプログラムの場合、データ入力の開始からデータ入力の終了までの間だけデータを書き込みバッファ内に保持しておけばよく、プログラムが開始されると、書き込みバッファ内からデータが削除されてもよい。このため、本実施形態のプログラムの場合、書き込みバッファ内に保持しておく必要があるデータは、最大でも２ページ分のデータである。
【０１１５】
このように、本実施形態では、全てのページデータは、１回のステージのプログラムでのみ必要であるので、そのデータ入力が完了すれば書き込みバッファ内のデータは破棄可能となる。そのため、本実施形態では、書き込みバッファ内に同時に保持しておくことが必要なページ数が少なくて済む。
【０１１６】
不揮発性メモリ２へプログラムされるページデータは、ＲＡＭ１１内の書き込みバッファで構成されて一旦保持されてから、プログラム時に不揮発性メモリ２へデータ入力される。本実施形態においては、このＲＡＭ１１の必要容量を小さくすることが可能となるので、コスト削減となる。
【０１１７】
また、LM-Foggy-Fineプログラム又はFoggy-Fineプログラムが用いられるときは、全てのページデータのデータ転送を２回又は３回行なわなくてはならないので、転送時間が掛かり、また転送時の消費電力も余分に必要となる。本実施形態では、全てのページデータは、各ページそれぞれ１回のデータ転送で完了するため、転送時間及び電力消費を１/２〜１／３程度に抑えることが可能になる。
【０１１８】
図１１は、第１の実施形態に係る外部プログラムコマンドのシーケンスの例を示す図である。図１１の（Ａ）では、第１の実施形態に係る１ｓｔステージにおける外部プログラムコマンドのシーケンスを示し、図１１の（Ｂ）では、第１の実施形態に係る２ｎｄステージにおける外部プログラムコマンドのシーケンスを示している。
【０１１９】
図１１の（Ａ）に示すように、１ｓｔステージでは、プログラム開始コマンド（８０ｈ）が入力された後、プログラム対象ブロック・ページのアドレス（Lowerページのアドレス）が入力され、その後にLowerページのプログラムデータが入力される。そして、最後にプログラム実行コマンド（１０ｈ）が入力されると、チップがビジーとなりメモリチップ内部でプログラムの動作が開始される。このようなプログラムコマンドの入力により、Lowerページがプログラムされる。
【０１２０】
図１１の（Ｂ）に示すように、２ｎｄステージでは、プログラム開始コマンド（８０ｈ）が入力された後、プログラム対象ブロック・ページのアドレス（Middleページのアドレス）が入力され、その後にMiddleページのプログラムデータが入力される。この後、プログラムコマンドの連結コマンド（１Ａｈ）が入力され、同様のシーケンスで今度はUpperページのプログラムデータが入力される。そして、最後にプログラム実行コマンド（１０ｈ）が入力されると、チップがビジーとなりメモリチップ内部でプログラムの動作が開始される。このようなプログラムコマンドの入力により、Lowerページの読み出しが行われ、さらにMiddleページおよびUpperページがプログラムされる。なお、MiddleページのプログラムデータとUpperページのプログラムデータとは、何れが先に入力されてもよい。
【０１２１】
ここで、ページ読み出し処理について説明する。ページ読み出しの方法は、読み出し対象ページを含むワード線ＷＬｉに対するプログラムが、２ｎｄステージの書き込み前か、後かで異なる。
【０１２２】
２ｎｄステージ書き込み前の場合、記録されているデータはLowerページだけが有効である。このため、制御部２２は、読み出しページがLowerページのときだけメモリセルからデータを読み出す。そして、制御部２２は、その他のページの場合には、メモリセル読み出し動作は行わず、読み出しデータとして強制的に全て“１”を出力する制御を行う。
【０１２３】
一方、２ｎｄステージまで完了したワード線ＷＬｉの場合、制御部２２は、読み出しページがUpper／Middle／Lowerページの何れであってもメモリセルを読み出す。この場合、読み出すページが何れのページかによって必要な読み出し電圧が異なるので、制御部２２は、選択されたページに従って必要な読み出しだけを実行する。
【０１２４】
図６に示したコーディングによれば、Lowerページデータが変化するしきい値状態間の境界は１つだけであるので、制御部２２は、その境界で分離された２つの範囲の何れにしきい値が位置するかでデータを決定する。例えば、しきい値電圧がＶｒ４よりも小さい場合には、制御部２２は、メモリセルのデータとして“１”を出力する制御を行う。一方、しきい値電圧がＶｒ４よりも大きい場合には、制御部２２は、メモリセルのデータとして“０”を出力する制御を行う。
【０１２５】
また、MiddleページまたはUpperページのデータが変化するしきい値状態間の境界は３つであるので、制御部２２は、それらの境界で分離された４つの範囲の何れの中にしきい値が位置するかでデータを決定する。
【０１２６】
以下、ページ読み出しの具体的な処理手順について説明する。図１２Ａは、第１の実施形態に係る記憶装置において２ｎｄステージ書き込み前の場合のワード線でのページ読み出しの処理手順を示すフローチャートである。図１２Ｂは、第１の実施形態に係る記憶装置において２ｎｄステージまでプログラムが完了しているワード線でのページ読み出しの処理手順を示すフローチャートである。
【０１２７】
図１２Ａに示すように、２ｎｄステージ書き込み前のワード線ＷＬｉの場合、制御部２２は、読み出しページを選択する（ステップＳ５１０）。読み出しページがLowerページの場合（ステップＳ５１０、Lower）、制御部２２は、Ｖｒ４のしきい値電圧で読み出しを行う（ステップＳ５２０）。そして、制御部２２は、Ｖｒ４のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ５３０）。
【０１２８】
また、読み出しページがMiddleページの場合（ステップＳ５１０、Middle）、制御部２２は、メモリセルの出力データとして全て強制的に“１”を出力する制御を行う（ステップＳ５４０）。
【０１２９】
また、読み出しページがUpperページの場合（ステップＳ５１０、Upper）、制御部２２は、メモリセルの出力データとして全て強制的に“１”を出力する制御を行う（ステップＳ５５０）。
【０１３０】
また、図１２Ｂに示すように、２ｎｄステージまでプログラムが完了したワード線ＷＬｉの場合、制御部２２は、読み出しページを選択する（ステップＳ６１０）。読み出しページがLowerページの場合（ステップＳ６１０、Lower）、制御部２２は、Ｖｒ４のしきい値電圧で読み出しを行う（ステップＳ６２０）。そして、制御部２２は、Ｖｒ４のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ６３０）。
【０１３１】
また、読み出しページがMiddleページの場合（ステップＳ６１０、Middle）、制御部２２は、Ｖｒ１、Ｖｒ３およびＶｒ６のしきい値電圧で読み出しを行う（ステップＳ６４０，Ｓ６５０，Ｓ６６０）。そして、制御部２２は、Ｖｒ１、Ｖｒ３およびＶｒ６のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ６７０）。
【０１３２】
また、読み出しページがUpperページの場合（ステップＳ６１０、Upper）、制御部２２は、Ｖｒ２、Ｖｒ５およびＶｒ７のしきい値電圧で読み出しを行う（ステップＳ６８０，Ｓ６９０，Ｓ７００）。そして、制御部２２は、Ｖｒ２、Ｖｒ５およびＶｒ７のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ７１０）。
【０１３３】
なお、ワード線ＷＬｉに対するプログラムが、２ｎｄステージ書き込み完了前か後かは、メモリコントローラ１が管理・識別することが可能である。メモリコントローラ１が、プログラム制御を行っているので、メモリコントローラ１がその進捗状況を記録しておけば、メモリコントローラ１は、不揮発性メモリ２のどのアドレスがどのようなプログラム状態であるか容易に参照できる。この場合、メモリコントローラ１は、不揮発性メモリ２から読み出しを行う際、対象ページアドレスを含むワード線ＷＬｉがどのようなプログラム状態であるかを識別し、識別した状態に応じた読み出しコマンドを発行する。
【０１３４】
図１３は、第１の実施形態に係る外部読み出しコマンドのシーケンスの例を示す図である。図１３の（Ａ）では、第１の実施形態に係る記憶装置において１ｓｔステージまでプログラムが完了しているワード線ＷＬｉでの外部読み出しコマンドのシーケンスを示し、図１３の（Ｂ）では、第１の実施形態に係る記憶装置において２ｎｄステージまでプログラムが完了しているワード線ＷＬｉでの外部読み出しコマンドのシーケンスを示している。
【０１３５】
図１３の（Ａ）に示すように、２ｎｄステージ書き込み前のワード線ＷＬｉの場合、読み出し動作を実行するコマンドとして、最初に２ｎｄステージ書き込み前の状態を示すコマンド（２Ｄｈ）が入力される。この後、読み出し開始コマンド（００ｈ）が入力され、その後に読み出し対象ブロック・ページのアドレス（LowerページまたはMiddleページまたはUpperページのアドレス）が入力される。そして、最後に読出し実行コマンド（３０ｈ）が入力されると、チップがビジーとなり、メモリチップ内部で読み出しの動作が開始される。このようなプログラムコマンドの入力により、LowerページまたはMiddleページまたはUpperページからデータが読み出される。その後、チップがレディー状態となり、読み出されたデータが出力される。
【０１３６】
一方、図１３の（Ｂ）に示すように、２ｎｄステージまでプログラムが完了したワード線ＷＬｉの場合、読み出し動作を実行するコマンドとして、最初に２ｎｄステージまでの完了状態を示すコマンド（２５ｈ）が入力される。この後、読み出し開始コマンド（００ｈ）が入力され、その後に読み出し対象ブロック・ページのアドレス（LowerページまたはMiddleページまたはUpperページのアドレス）が入力される。そして、最後に読出し実行コマンド（３０ｈ）が入力されると、チップがビジーとなり、メモリチップ内部で読み出しの動作が開始される。このようなプログラムコマンドの入力により、LowerページまたはMiddleページまたはUpperページのアドレスからデータが読み出される。その後、チップがレディー状態となり、読み出されたデータが出力される。
【０１３７】
このように第１の実施形態では、不揮発性メモリ２（３次元構造または２次元構造を有した３ｂｉｔ／ＣｅｌｌのＮＡＮＤメモリ）をプログラムする際に、１−３−３データコーディングを採用し、プログラムのステージを２ステージ制とした。このように２ステージ制でプログラムされるので、データプログラムの際に入力するデータ量が減り、メモリコントローラ１に必要とされる書き込みバッファ量を抑制することが可能となる。また、不揮発性メモリ２のページ間のビットエラー率の偏りを低減できるとともに、ＥＣＣにかかるコストを下げることができる。また、データ転送は各ページ１回のみとなるため、転送時間及び消費電力を抑えることができる。
【０１３８】
また、ワード線ＷＬｉをまたぎながら、各プログラムステージを実行するので、隣接ワード線ＷＬｉとの隣接セル間干渉の量を低減することができる。また、１−３−３データコーディングを用いるので、２ｎｄステージの前のＩＤＬマージンを拡大することができ、書き込みシーケンスの信頼性を向上することが可能となる。また、１−３−３データコーディングを用いるので、Lowerページにおけるしきい値境界を１つとすることにより、１ｓｔステージのプログラム、すなわちLowerページのプログラムを高速化することができる。なお、１ｓｔステージのプログラムの高速化は、書き込み及び書き込みベリファイの繰り返しときに、書き込み電圧を少しずつステップアップさせて書き込むときのステップ電圧を、２ｎｄステージのプログラム時より大きい値にするなどで高速化ができる。
【０１３９】
（第２の実施形態）
つぎに、図１４Ａ，１４Ｂおよび図１５を用いて第２の実施形態について説明する。第２の実施形態では、ワード線ＷＬｎ−１の２ｎｄステージのプログラムと、ワード線ＷＬｎの１ｓｔステージのプログラムとをまとめて行う。なお、本実施形態でも第１の実施形態の図６で説明したものと同じデータコーディングを用いる場合について説明する。
【０１４０】
図９Ａに示したプログラムのフローチャートでは、１ｓｔステージのプログラムと２ｎｄステージのプログラムとは、全て１つずつ分離しており、それぞれのプログラムの際にそれぞれのプログラムコマンドとプログラムデータ入力が行なわれている。本実施形態では、このプログラムコマンドおよびプログラムデータ入力をなるべくまとめる。
【０１４１】
例えば、図８Ｂに示したように、ブロックの先頭と終わりの端部以外は、ワード線ＷＬｎの１ｓｔステージとワード線ＷＬｎ−１の２ｎｄステージのプログラムとが必ず連続する。そこで、本実施形態では、この部分をひとまとめのコマンド入力とする。すなわち、１回のコマンド入力で、ワード線ＷＬｎのLowerページとワード線ＷＬｎ−１のMiddle／Upperページとのプログラムデータがまとめて入力される。これは、LM-Foggy-Fineが採用された場合でも、１回のプログラムコマンドでLower／Middle／Upperページのデータをまとめて（ただし、この場合は同じワード線ＷＬｉ内のページ）３ページ分入力していたのと同じデータ量の入力である。
【０１４２】
このように、プログラムコマンドおよびプログラムデータの入力がまとめられることにより、メモリコントローラ１が行う制御におけるコマンド入力やポーリング（チップビジーがレディーに戻ったか否かの定期的なチェック）の頻度が減少し、記憶装置としての高速化・簡易化が可能となる。
【０１４３】
ここで図１４Ａおよび図１４Ｂを用いて、第２の実施形態に係るプログラム順序に従った書き込み手順の一例について説明する。図１４Ａおよび図１４Ｂでは、図８Ｂに示すプログラム順序に従った場合の書き込み手順を示している。なお、図１４Ａまたは図１４Ｂに示す処理のうち、図９Ａ〜図９Ｃで説明した処理と同様の処理については、その説明を省略する。
【０１４４】
図１４Ａは、第２の実施形態に係る１ブロック分全体の書き込み手順を示すフローチャートである。ここでの１ブロックは、ワード線ＷＬ０〜ＷＬｎ（ｎは自然数）のｎ＋１本のワード線ＷＬｉを有するとする。また、図１４Ｂは、第２の実施形態に係る１ｓｔステージおよび２ｎｄステージにおける書き込み手順を示すサブフローチャートである。なお、図１４Ａの各ステップの右に示した（１ｓｔ）は、図９Ｂに示す１ｓｔステージに対応し、（２ｎｄ）は、図９Ｃに示す２ｎｄステージに対応し、（１，２）は、図１４Ｂに示す１ｓｔステージおよび２ｎｄステージに対応している。
【０１４５】
図１４Ａに示すように、書き込みを開始すると、制御部２２は、ステップＳ１０〜Ｓ３０と同様の処理であるステップＳ８１０〜Ｓ８３０の処理を実行する。これにより、ストリングＳｔ０〜Ｓｔ３のワード線ＷＬ０の１ｓｔステージのプログラムが実施される。
【０１４６】
さらに、制御部２２は、ストリングＳｔ０＿ワード線ＷＬ１の１ｓｔステージのプログラムと、ストリングＳｔ０＿ワード線ＷＬ０の２ｎｄステージのプログラムを実施する（ステップＳ８４０）。次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬ１の１ｓｔステージのプログラムと、ストリングＳｔ１＿ワード線ＷＬ０の２ｎｄステージのプログラムを実施する（ステップＳ８５０）。次に、制御部２２は、ストリングＳｔ２＿ワード線ＷＬ１の１ｓｔステージのプログラムと、ストリングＳｔ２＿ワード線ＷＬ０の２ｎｄステージのプログラムを実施する（ステップＳ８６０）。この後、制御部２２は、各ストリングの各ワード線ＷＬｉに対してステップＳ８４０，Ｓ８５０，Ｓ８６０のような処理を繰り返す。
【０１４７】
そして、制御部２２は、ストリングＳｔ０＿ワード線ＷＬｎの１ｓｔステージのプログラムと、ストリングＳｔ０＿ワード線ＷＬｎ−１の２ｎｄステージのプログラムを実施する（ステップＳ８７０）。次に、制御部２２は、ストリングＳｔ１＿ワード線ＷＬｎの１ｓｔステージのプログラムと、ストリングＳｔ１＿ワード線ＷＬｎ−１の２ｎｄステージのプログラムを実施する（ステップＳ８８０）。この後、制御部２２は、各ストリングの各ワード線ＷＬｉに対してステップＳ８７０，Ｓ８８０のような処理を繰り返す。
【０１４８】
そして、制御部２２は、ストリングＳｔ３＿ワード線ＷＬｎの１ｓｔステージのプログラムと、ストリングＳｔ３＿ワード線ＷＬｎ−１の２ｎｄステージのプログラムを実施する（ステップＳ８９０）。次に、制御部２２は、ステップＳ１００〜Ｓ１２０と同様の処理であるステップＳ９００〜Ｓ９２０の処理を実行する。これにより、ストリングＳｔ０〜Ｓｔ３のワード線ＷＬｎの２ｎｄステージのプログラムが実施される。
【０１４９】
このように、ブロックの先頭では第１の実施形態と同様に１ｓｔステージのみのプログラムが実施され、ブロックの最後では第１の実施形態と同様に２ｎｄステージのみのプログラムが実施される。この場合において、１ｓｔステージのみのプログラムは、図９Ｂに示した手順に従って実行され、２ｎｄステージのみのプログラムは、図９Ｃに示した手順に従って実行される。
【０１５０】
図１４Ｂに示すように、１ｓｔステージおよび２ｎｄステージのプログラムでは、２ｎｄステージのプログラムが実行された後に、続けて１ｓｔステージのプログラムが実行される。具体的には、まず、メモリコントローラ１から不揮発性メモリ２へ、ワード線ＷＬｎ−１のMiddleページのデータの入力開始コマンドが入力される（ステップＳ１０１０）。そして、メモリコントローラ１から不揮発性メモリ２へ、ワード線ＷＬｎ−１のMiddleページのデータが入力される（ステップＳ１０２０）。
【０１５１】
次に、メモリコントローラ１から不揮発性メモリ２へ、ワード線ＷＬｎ−１のUpperページのデータの入力開始コマンドが入力される（ステップＳ１０３０）。そして、メモリコントローラ１から不揮発性メモリ２へ、ワード線ＷＬｎ−１のUpperページのデータが入力される（ステップＳ１０４０）。
【０１５２】
次に、メモリコントローラ１から不揮発性メモリ２へ、ワード線ＷＬｎのLowerページのデータの入力開始コマンドが入力される（ステップＳ１０５０）。そして、メモリコントローラ１から不揮発性メモリ２へ、ワード線ＷＬｎのLowerページのデータが入力される（ステップＳ１０６０）。
【０１５３】
次に、メモリコントローラ１から不揮発性メモリ２へ、１ｓｔステージおよび２ｎｄステージのプログラム実行コマンドが入力され（ステップＳ１０７０）、これによりチップビジーとなる（ステップＳ１０８０）。
【０１５４】
この後、ワード線ＷＬｎのLowerページに対し、１〜複数回のプログラム電圧パルスが印加される（ステップＳ１０９０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために、ワード線ＷＬｎのLowerページのデータ読み出しが行なわれる（ステップＳ１１００）。
【０１５５】
さらに、Lowerページにおけるデータのフェイルビット数がクライテリアよりも小さいか否かが確認される（ステップＳ１１１０）。Lowerページにおけるデータのフェイルビット数がクライテリア以上である場合（ステップＳ１１１０、Ｎｏ）、ステップＳ１１４０〜Ｓ１１６０の処理が繰り返される。そして、データのフェイルビット数がクライテリアよりも小さくなると（ステップＳ１１１０、Ｙｅｓ）、ワード線ＷＬｎ−１のLowerページデータが読み出される（ステップＳ１１２０）。
【０１５６】
そして、ワード線ＷＬｎ−１のLowerページデータに基づいて、MiddleページおよびUpperページのプログラム先のＶｔｈ（しきい値電圧）が決定される（ステップＳ１１３０）。この後、決定されたＶｔｈを用いて、ワード線ＷＬｎ−１のMiddleページおよびUpperページへのデータ書き込みが行われる。
【０１５７】
MiddleページおよびUpperページへのデータ書き込みの際には、ワード線ＷＬｎ−１のMiddleページおよびUpperページに対し、１〜複数回のプログラム電圧パルスが印加される（ステップＳ１１４０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために、ワード線ＷＬｎ−１のMiddleページおよびUpperページのデータ読み出しが行なわれる（ステップＳ１１５０）。
【０１５８】
さらに、MiddleページおよびUpperページにおけるデータのフェイルビット数がクライテリアよりも小さいか否かが確認される（ステップＳ１１６０）。MiddleページおよびUpperページにおけるデータのフェイルビット数がクライテリア以上である場合（ステップＳ１１６０、Ｎｏ）、ステップＳ１１４０〜Ｓ１１６０の処理が繰り返される。そして、データのフェイルビット数がクライテリアよりも小さくなると（ステップＳ１１６０、Ｙｅｓ）、チップレディーとなる（ステップＳ１１７０）。
【０１５９】
なお、ステップＳ１０１０，Ｓ１０３０，Ｓ１０５０の処理は、何れが先に行われてもよい。また、ステップＳ１０２０，Ｓ１０４０，Ｓ１０６０の処理は、何れが先に行われてもよい。ただし、ステップＳ１０２０の処理は、ステップＳ１０１０の処理の後に行われ、ステップＳ１０４０の処理は、ステップＳ１０３０の処理の後に行われ、ステップＳ１０６０の処理は、ステップＳ１０５０の処理の後に行われる。
【０１６０】
なお、図１４Ｂに示したステップＳ１１２０〜Ｓ１１６０までの処理が、ワード線ＷＬｎ−１の２ｎｄステージのプログラムに対応し、ステップＳ１０９０〜Ｓ１１１０までの処理が、ワード線ＷＬｎの１ｓｔステージのプログラムに対応している。
【０１６１】
このように、図１４Ｂでは、ワード線ＷＬｎの１ｓｔステージのプログラムがワード線ＷＬｎ−１の２ｎｄステージのプログラムよりも前に実行される場合について説明した。これは、ワード線ＷＬｎの１ｓｔステージのプログラムが先に行なわれることで、８値のＶｔｈが書き込まれるワード線ＷＬｎ−１のセルが隣接セルの影響を受けないようにするためである。
【０１６２】
このように、本実施形態では、ワード線ＷＬｎ−１のMiddleページおよびUpperページのデータと、ワード線ＷＬｎのLowerページのデータとの３ページ分のデータが連続して入力される。
【０１６３】
図１５は、第２の実施形態に係る外部プログラムコマンドのシーケンスの例を示す図である。なお、１ｓｔステージにおける外部プログラムコマンドのシーケンスは、図１１の（Ａ）に示したものと同じである。また、２ｎｄステージにおける外部プログラムコマンドのシーケンスは図１１の（Ｂ）に示したものと同じである。したがって、ここでは、２ｎｄステージと１ｓｔステージとが連続してプログラムされる際の外部プログラムコマンドのシーケンスについて説明する。１ｓｔステージと２ｎｄステージとが連続してプログラムされる場合には、２ｎｄステージのコマンドと１ｓｔステージのコマンドとが連続して入力される。
【０１６４】
具体的には、図１５に示すように、プログラム開始コマンド（８０ｈ）が入力された後、プログラム対象ブロック・ページのアドレス（ワード線ＷＬｎ−１のMiddleページのアドレス）が入力され、その後にワード線ＷＬｎ−１のMiddleページのプログラムデータが入力される。この後、プログラムコマンドの連結コマンド（１Ａｈ）が入力され、同様のシーケンスで今度はワード線ＷＬｎ−１のUpperページのプログラムデータが入力される。そして、プログラムコマンドの連結コマンド（１Ａｈ）が入力され、同様のシーケンスで今度はワード線ＷＬｎのLowerページのプログラムデータが入力される。そして、最後にプログラム実行コマンド（１０ｈ）が入力されると、チップがビジーとなりメモリチップ内部でプログラムの動作が開始される。
【０１６５】
このようなプログラムコマンドの入力により、ワード線ＷＬｎのLowerページがプログラムされる。また、ＩＤＬとして、ワード線ＷＬｎ−１のLowerページデータの読み出しが行われる。そして、Lowerページデータに基づいて、MiddleページおよびUpperページのプログラム先のＶｔｈが決定され、決定されたＶｔｈでワード線ＷＬｎ−１のMiddleページおよびUpperページがプログラムされる。
【０１６６】
また、別の変形例として、プログラムコマンドの入力後、ＩＤＬとして、ワード線ＷＬｎ−１のLowerページデータの読み出しを先に行なった後に、ワード線ＷＬｎのLowerページがプログラムを行い、次に、MiddleページおよびUpperページのプログラム先のＶｔｈが決定され、決定されたＶｔｈでワード線ＷＬｎのMiddleページおよびUpperページのプログラムを行なうこともできる。このようにすると、ワード線ＷＬｎの書込みによる隣接セル間干渉を受ける前に、ＩＤＬのワード線ＷＬｎ−１のLowerページデータの読み出しができる。
【０１６７】
なお、本実施形態における、ワード線ＷＬｎの１ｓｔステージとワード線ＷＬｎ−１の２ｎｄステージとのひとまとめのコマンドによるプログラムの実際の実行順番は変形が可能である。すなわち、図１５に示したワード線ＷＬｎのLowerページのプログラムと、ＩＤＬとしてのワード線ＷＬｎ−１のLowerページデータの読み出しとは、何れが先でもよく、入れ替えが可能である。ＩＤＬ（ワード線ＷＬｎ−１のLowerページデータの読み出し）がワード線ＷＬｎのLowerページのプログラムよりも前に行なわれることで、ワード線ＷＬｎのLowerページのプログラムによる影響を受けることなくＩＤＬが可能となる。
【０１６８】
このように第２の実施形態では、ワード線ＷＬｎ−１の２ｎｄステージのプログラムと、ワード線ＷＬｎの１ｓｔステージのプログラムとをまとめて行うので、コマンド入力やポーリングの頻度が減少する。したがって、記憶装置の高速化および簡易化が可能となる。
【０１６９】
（第３の実施形態）
つぎに、図１６〜図１９を用いて第３の実施形態について説明する。第３の実施形態では、２ｎｄステージのプログラムを実行する際に、Ｖｔｈ分布状態を領域Ｄ以上とする予定のメモリセルに対して最初にプログラムを実行し、その後、Ｖｔｈ分布状態を領域Ｃ以下とする予定のメモリセルに対してプログラムを実行する。なお、本実施形態でも第１の実施形態の図６で説明したものと同じデータコーディングを用いる場合について説明する。
【０１７０】
多ビット／ｃｅｌｌのプログラムにおいて、プログラム実行中に突然の電源遮断が発生すると、データが破壊される。このような場合、電源遮断が発生した際に実行していたプログラムの対象のプログラムデータの情報がメモリセルから失われる。このような場合、既にプログラムが完了して、メモリコントローラ１の書き込みバッファからデータが破棄されたような過去のプログラムデータも失われてしまう場合がある。この結果、データ復旧が不可能となってしまう。
【０１７１】
このような事象は、２ｎｄステージのMiddle／Upperページのプログラムの途中で電源遮断が起きると発生する。この状況について説明する。図１６は、電源遮断に起因するデータ破壊を説明するための図である。図１６の（Ｔ１１）は、１ｓｔステージのプログラムが完了した後のＶｔｈ分布状態（データ状態）を示している。また、図１６の（Ｔ１２）は、２ｎｄステージのプログラム途中のＶｔｈ分布状態を示している。また、図１６の（Ｔ１３）は、電源遮断後のＶｔｈ分布状態を示している。
【０１７２】
図１６の（Ｔ１１）に示したような１ｓｔステージのプログラムが完了した後に、２ｎｄステージのプログラムが開始され、図１６の（Ｔ１２）に示すようなＶｔｈ分布状態となる。そして、図１６の（Ｔ１２）に示すような書き込み途中のＶｔｈ分布状態の時に、電源遮断が発生すると、図１６の（Ｔ１３）に示すようなＶｔｈ分布状態となる。
【０１７３】
ここで、１ｓｔステージ完了後の状態から２ｎｄステージのプログラムを開始することを考える。一般的にＮＡＮＤメモリの内部では、低いＶｔｈから高いＶｔｈへと順番にプログラムが実行される。そのため、図１６の（Ｔ１２）に示すように、途中まで２ｎｄステージのプログラムが進行したところで、電源遮断が発生すると、図１６の（Ｔ１３）に示したようなＶｔｈ分布状態となる。
【０１７４】
ここで正の分布に含まれるメモリセルは、Lowerページデータが“１”であったメモリセルと“０”であったメモリセルとが混在した状態である。このため、この状態において既にプログラムが完了しているLowerページデータを読み出しても、正しい読み出しデータは得られない。なお、２ｎｄステージのプログラム完了後の読み出し電圧を用いても、正しいLowerページデータは得られない。
【０１７５】
そこで、本実施形態では、２ｎｄステージのMiddle／UpperページのプログラムのＶｔｈ順序を変更する。図１７は、第３の実施形態に係る２ｎｄステージのプログラムを説明するための図である。図１７では、２ｎｄステージにおけるＶｔｈ状態の遷移方法を示している。図１７の（Ｔ２１）は、１ｓｔステージのプログラムが完了した後のＶｔｈ分布状態を示している。また、図１７の（Ｔ２２）は、２ｎｄステージの前半のプログラムが完了した時点でのＶｔｈ分布状態を示している。また、図１７の（Ｔ２３）は、２ｎｄステージの後半のプログラムが完了した時点でのＶｔｈ分布状態を示している。
【０１７６】
本実施形態の制御部２２は、図１７の（Ｔ２１）に示す１ｓｔステージが完了すると、図１７の（Ｔ２２）に示すように、書き込み目的地のＶｔｈ分布状態が領域Ｄ以上となるメモリセルを最初にプログラム（Ｄ−Ｆｉｒｓｔプログラム）する。そして、制御部２２は、領域Ｄ〜ＧまでのＶｔｈ分布状態のプログラムを完了させた後、図１７の（Ｔ２３）に示すように、領域Ａ〜ＣのＶｔｈ分布状態のプログラムを実行する。
【０１７７】
このように、本実施形態の制御部２２は、書き込み目的地のＶｔｈ分布状態を領域Ｄ以上にさせるメモリセルへのプログラムを領域Ｃ以下にさせるメモリセルへのプログラムよりも先に開始する。そして、書き込み目的地のＶｔｈ分布状態を領域Ｄ以上にさせるメモリセルへのプログラムを完了させた後、領域Ｃ以下にさせるメモリセルへのプログラムを完了させる。
【０１７８】
これにより、Lowerページデータが“１”であったメモリセルと“０”であったメモリセルとが混在した状態となるタイミングが発生しなくなる。したがって、たとえ２ｎｄステージで電源遮断が発生したとしても、Ｖｒ１またはＶｒ４の何れかの読み出し電圧を用いることによって、制御部２２は、Lowerページデータを読み出すことが可能となる。
【０１７９】
図１８は、第３の実施形態に係る２ｎｄステージでの書き込み手順を示すフローチャートである。なお、図９Ｃで説明した処理と同様の処理については、その説明を省略する。第３の実施形態に係る２ｎｄステージのステップＳ１２１０〜Ｓ１２８０は、図９Ｃに示した第１の実施形態に係る２ｎｄステージのステップＳ３１０〜Ｓ３８０と同じである。
【０１８０】
MiddleページおよびUpperページのプログラム先のＶｔｈが決定された後（ステップＳ１２８０）、決定されたＶｔｈを用いて、MiddleページおよびUpperページへのデータ書き込みが行われる。
【０１８１】
第３の実施形態に係る２ｎｄステージでは、MiddleページおよびUpperページへのデータ書き込みの際に、領域Ｄ〜Ｇとさせるメモリセルに対し、１〜複数回のプログラム電圧パルスが印加される（ステップＳ１２９０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために、MiddleページおよびUpperページの領域Ｄ〜Ｇに対してデータ読み出しが行なわれる（ステップＳ１３００）。
【０１８２】
さらに、MiddleページおよびUpperページにおける領域Ｄ〜Ｇでのデータのフェイルビット数がクライテリアよりも小さいか否かが確認される（ステップＳ１３１０）。MiddleページおよびUpperページにおける領域Ｄ〜Ｇでのデータのフェイルビット数がクライテリア以上である場合（ステップＳ１３１０、Ｎｏ）、ステップＳ１２９０〜Ｓ１３１０の処理が繰り返される。
【０１８３】
そして、MiddleページおよびUpperページにおける領域Ｄ〜Ｇでのデータのフェイルビット数がクライテリアよりも小さくなると（ステップＳ１３１０、Ｙｅｓ）、MiddleページおよびUpperページにおける領域Ａ〜Ｃへの書き込みを行う。具体的には、MiddleページおよびUpperページへのデータ書き込みの際に、領域Ａ〜Ｃとさせるメモリセルに対し、１〜複数回のプログラム電圧パルスが印加される（ステップＳ１３２０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために、MiddleページおよびUpperページの領域Ａ〜Ｃに対してデータ読み出しが行なわれる（ステップＳ１３３０）。
【０１８４】
さらに、MiddleページおよびUpperページにおける領域Ａ〜Ｃでのデータのフェイルビット数がクライテリアよりも小さいか否かが確認される（ステップＳ１３４０）。MiddleページおよびUpperページにおける領域Ａ〜Ｃでのデータのフェイルビット数がクライテリア以上である場合（ステップＳ１３４０、Ｎｏ）、ステップＳ１３２０〜Ｓ１３４０が繰り返される。
【０１８５】
そして、MiddleページおよびUpperページにおける領域Ａ〜Ｃでのデータのフェイルビット数がクライテリアよりも小さくなると（ステップＳ１３５０、Ｙｅｓ）、チップレディーとなる（ステップＳ１３５０）。
【０１８６】
なお、本実施形態では、２ｎｄステージのプログラムの前半で、領域Ｄ〜ＧまでのＶｔｈ分布状態のプログラムを完了させたが、目的地が領域Ｄ〜ＧまでのＶｔｈ分布状態のメモリセルを、完全に終わらせる必要は無い。この場合、制御部２２は、一旦領域Ｄ程度のＶｔｈ分布状態までのプログラムにとどめておく。その後、制御部２２は、領域Ａ〜Ｃのプログラムと、プログラム途中であった領域Ｄ〜Ｇのプログラムとを順番に実行する。
【０１８７】
図１９は、第３の実施形態に係る２ｎｄステージのプログラム変形例を説明するための図である。図１９では、２ｎｄステージにおけるＶｔｈ状態の遷移方法（変形例）を示している。図１９の（Ｔ３１）は、１ｓｔステージのプログラムが完了した後のＶｔｈ分布状態を示している。また、図１９の（Ｔ３２）は、２ｎｄステージの前半のプログラムが完了した時点でのＶｔｈ分布状態を示している。また、図１９の（Ｔ３３）は、２ｎｄステージの後半のプログラムが完了した時点でのＶｔｈ分布状態を示している。
【０１８８】
本実施形態の制御部２２は、図１９の（Ｔ３１）に示す１ｓｔステージが完了すると、制御部２２は、図１９の（Ｔ３２）に示すように、領域Ｄ程度のＶｔｈ分布状態までプログラムを実行する。その後、制御部２２は、領域ＥｒのＶｔｈ分布状態を用いて、領域Ａ〜Ｃのプログラムを実行する。さらに、制御部２２は、領域Ｄ程度のＶｔｈ分布状態（プログラム途中のＶｔｈ分布状態）を用いて、領域Ｄ〜Ｇのプログラムを実行する。
【０１８９】
この図１９に示す方法の場合も、図１７に示す方法の場合と同様に、Lowerページデータが“１”であったメモリセルと“０”であったメモリセルとが混在した状態となるタイミングが発生しなくなる。したがって、たとえ２ｎｄステージで電源遮断が発生したとしても、Ｖｒ１またはＶｒ４の何れかの読み出し電圧を用いることによって、制御部２２は、Lowerページデータを読み出すことが可能となる。
【０１９０】
このように、制御部２２は、書き込み目的地のＶｔｈ分布状態を領域Ｄ以上にさせるメモリセルへのしきい値分布を、領域Ｅｒ〜Ｃまでのしきい値領域に重ならない位置まで移動させた後、領域Ｅｒ〜Ｇにさせるメモリセルへのプログラムを完了させる。
【０１９１】
このように第３の実施形態では、２ｎｄステージのプログラムの際に、上位のＶｔｈ分布を先にプログラムするので、不正電源遮断に起因する書き込み済みデータの巻き添え破壊を防止することができ、この結果、記憶装置の信頼性を向上させることが可能となる。
【０１９２】
なお、第１〜第３の実施形態では、図６で説明したものと同じ１−３−３データコーディングを用いる場合について説明したが、他の１−３−３データコーディングが用いられてもよい。ただし、１−３−３データコーディングにおいて、Lowerページデータの境界が１箇所であるという条件がある。
【０１９３】
図２０は、１−３−３データコーディングの他の例を示す図である。図２０の（Ａ）に示す１−３−３データコーディングの変形例１では、しきい値電圧とデータ値との関係は、以下に示す通りである。
・しきい値電圧がＥｒ領域内にあるメモリセルは“１１１”を記憶している状態である。
・しきい値電圧がＡ領域内にあるメモリセルは“０１１”を記憶している状態である。
・しきい値電圧がＢ領域内にあるメモリセルは“００１”を記憶している状態である。
・しきい値電圧がＣ領域内にあるメモリセルは“１０１”を記憶している状態である。
・しきい値電圧がＤ領域内にあるメモリセルは“１００”を記憶している状態である。
・しきい値電圧がＥ領域内にあるメモリセルは“１１０”を記憶している状態である。
・しきい値電圧がＦ領域内にあるメモリセルは“０１０”を記憶している状態である。
・しきい値電圧がＧ領域内にあるメモリセルは“０００”を記憶している状態である。
【０１９４】
図２０の（Ｂ）に示す１−３−３データコーディングの変形例２では、しきい値電圧とデータ値との関係は、以下に示す通りである。
・しきい値電圧がＥｒ領域内にあるメモリセルは“１１０”を記憶している状態である。
・しきい値電圧がＡ領域内にあるメモリセルは“１００”を記憶している状態である。
・しきい値電圧がＢ領域内にあるメモリセルは“０００”を記憶している状態である。
・しきい値電圧がＣ領域内にあるメモリセルは“０１０”を記憶している状態である。
・しきい値電圧がＤ領域内にあるメモリセルは“０１１”を記憶している状態である。
・しきい値電圧がＥ領域内にあるメモリセルは“１１１”を記憶している状態である。
・しきい値電圧がＦ領域内にあるメモリセルは“１０１”を記憶している状態である。
・しきい値電圧がＧ領域内にあるメモリセルは“００１”を記憶している状態である。
【０１９５】
図２０の（Ｃ）に示す１−３−３データコーディングの変形例３では、しきい値電圧とデータ値との関係は、以下に示す通りである。
・しきい値電圧がＥｒ領域内にあるメモリセルは“１１０”を記憶している状態である。
・しきい値電圧がＡ領域内にあるメモリセルは“０１０”を記憶している状態である。
・しきい値電圧がＢ領域内にあるメモリセルは“０００”を記憶している状態である。
・しきい値電圧がＣ領域内にあるメモリセルは“１００”を記憶している状態である。
・しきい値電圧がＤ領域内にあるメモリセルは“１０１”を記憶している状態である。
・しきい値電圧がＥ領域内にあるメモリセルは“１１１”を記憶している状態である。
・しきい値電圧がＦ領域内にあるメモリセルは“０１１”を記憶している状態である。
・しきい値電圧がＧ領域内にあるメモリセルは“００１”を記憶している状態である。
【０１９６】
（第４の実施形態）
つぎに、図２１を用いて第４の実施形態について説明する。第４の実施形態では、１ｓｔステージをLower／Middleページのプログラムとし、２ｎｄステージをUpperページのプログラムとする。
【０１９７】
図２１は、第４の実施形態におけるプログラム後のしきい値分布を示す図である。図２１では、メモリセルに対する各プログラムステージ後のしきい値分布を示している。図２１の（Ｔ４１）は、プログラム前の初期状態である消去状態のしきい値分布を示している。図２１の（Ｔ４２）は、１ｓｔステージのプログラム後のしきい値分布を示している。図２１の（Ｔ４３）は、２ｎｄステージのプログラム後のしきい値分布を示している。
【０１９８】
図２１の（Ｔ４１）に示すように、ＮＡＮＤメモリセルアレイ２３の全メモリセルは、未書き込みの状態では分布Ｅｒの状態である。不揮発性メモリ２の制御部２２は、図２１の（Ｔ４２）に示すように、１ｓｔステージのプログラムでは、Lower／Middleページに書き込むビット値に応じて、メモリセルごとに分布Ｅｒのままとする、または電荷を注入して分布Ｅｒよりも上の分布に移動させる。これにより、メモリセルは、Lower／Middleページデータによって、４値のレベルにプログラムされる。
【０１９９】
また、図２１の（Ｔ４３）に示すように、２ｎｄステージのプログラムでは、データの書き込みにはUpperページの１ページが必要である。不揮発性メモリ２の制御部２２は、１ｓｔステージのデータに対し、２ｎｄステージとしてUpperページのデータを加える。このように、制御部２２は、２ｎｄステージのプログラム後のしきい値分布を、各隣接する分布が分離された最終状態で８値のレベルとなるようにプログラムする。
【０２００】
１ｓｔステージの４値のレベルにプログラムする際のしきい値のレベルとしては、例えば以下のようにする。制御部２２は、下から２番目のしきい値レベルは、２ｎｄステージのプログラムで領域Ａと領域Ｂに遷移するよう割り付けることに鑑み、領域Ａと同じ分布に制御する。また、制御部２２は、下から３番目のしきい値レベルは、２ｎｄステージのプログラムで領域Ｄと領域Ｅに遷移するよう割り付けることに鑑み、Ｖｒ３とＶｒ５の間に入るよう制御する。また、制御部２２は、最上位のしきい値レベルは、２ｎｄステージのプログラムで領域Ｅと領域Ｆに遷移するよう割り付けることに鑑み、Ｖｒ５とＶｒ７の間に入るよう制御する。この後、制御部２２は、１ｓｔステージの４値を用いて、２ｎｄステージの８値のレベルにプログラムする。
【０２０１】
なお、隣接メモリセル間干渉の影響を小さくするために、図８Ｂで示した順番と同じ順番でプログラムが実行される。すなわち、２つの異なるプログラムステージは、同じワード線ＷＬｉに連続的に実行されない。ワード線ＷＬｉ間の隣接メモリセル間干渉を小さくするためには、ワード線ＷＬｉの２ｎｄステージまでのプログラムが完了した後に、隣接ワード線ＷＬｉのしきい値の変動量を小さくすることが有効である。図８Ｂに示したシーケンスであれば、ワード線ＷＬｉの２ｎｄステージまでのプログラムが完了した後の隣接ワード線ＷＬｉのプログラムステージは２ｎｄステージのみとなるので、隣接メモリセル間干渉の影響を小さくできる。
【０２０２】
ここで、第４の実施形態に係る書き込み手順について説明する。なお、第４の実施形態に係る１ブロック分全体の書き込み手順は、第１の実施形態に係る１ブロック分全体の書き込み手順（図９Ａ）と同じであるので、その説明を省略する。本実施形態でも、第１の実施形態と同様に、非連続的な順序でワード線ＷＬｉをまたぎながらプログラムステージが進められていくので、あるワード線ＷＬｉのまとまり（ここではブロック）をプログラムシーケンスのまとまりとしてプログラムが実行される。
【０２０３】
図２２Ａは、第４の実施形態に係る１ｓｔステージにおける書き込み手順を示すサブフローチャートであり、図２２Ｂは、第４の実施形態に係る２ｎｄステージでの書き込み手順を示すサブフローチャートである。なお、図２２Ａに示した処理のうち、図９Ｂに示した処理と同様の処理については、その説明を省略する。また、図２２Ｂに示した処理のうち、図９Ｃに示した処理と同様の処理については、その説明を省略する。
【０２０４】
図２２Ａに示すように、１ｓｔステージのプログラムでは、まず、メモリコントローラ１から不揮発性メモリ２へLowerページデータの入力開始コマンドが入力される（ステップＳ１４１０）。そして、メモリコントローラ１から不揮発性メモリ２へLowerページデータが入力される（ステップＳ１４２０）。
【０２０５】
さらに、メモリコントローラ１から不揮発性メモリ２へMiddleページのデータの入力開始コマンドが入力される（ステップＳ１４３０）。そして、メモリコントローラ１から不揮発性メモリ２へMiddleページのデータが入力される（ステップＳ１４４０）。
【０２０６】
そして、メモリコントローラ１から不揮発性メモリ２へ１ｓｔステージのプログラム実行コマンドが入力され（ステップＳ１４５０）、これによりチップビジーとなる（ステップＳ１４６０）。
【０２０７】
この後、LowerページデータとMiddleページデータに基づいて、２ｎｄステージのプログラム先のＶｔｈが決定される（ステップＳ１４７０）。この後、決定されたＶｔｈを用いて、LowerページおよびMiddleページへのデータ書き込みが行われる。
【０２０８】
LowerページおよびMiddleページへのデータ書き込みの際には、１〜複数回のプログラム電圧パルスが印加される（ステップＳ１４８０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために読み出しが行なわれる（ステップＳ１４９０）。さらに、LowerページおよびMiddleページにおけるデータのフェイルビット数がクライテリア（判定基準）よりも小さいか否かが確認される（ステップＳ１５００）。データのフェイルビット数がクライテリア以上である場合（ステップＳ１５００、Ｎｏ）、ステップＳ１４８０〜Ｓ１５００の処理が繰り返される。そして、データのフェイルビット数がクライテリアよりも小さくなると（ステップＳ１５００、Ｙｅｓ）、チップレディーとなる（ステップＳ１５１０）。
【０２０９】
図２２Ｂに示すように、２ｎｄステージのプログラムでは、まず、メモリコントローラ１から不揮発性メモリ２へUpperページのデータの入力開始コマンドが入力される（ステップＳ１６１０）。そして、メモリコントローラ１から不揮発性メモリ２へUpperページのデータが入力される（ステップＳ１６２０）。次に、メモリコントローラ１から不揮発性メモリ２へ２ｎｄステージのプログラム実行コマンドが入力され（ステップＳ１６３０）、これによりチップビジーとなる（ステップＳ１６４０）。
【０２１０】
この後、ＩＤＬであるLowerページデータの読み出しが行われる（ステップＳ１６５０）。さらに、ＩＤＬであるMiddleページデータの読み出しが行われる（ステップＳ１６６０）。そして、LowerページデータおよびMiddleページデータに基づいて、Upperページのプログラム先のＶｔｈが決定される（ステップＳ１６７０）。この後、決定されたＶｔｈを用いて、Upperページへのデータ書き込みが行われる。
【０２１１】
さらに、制御部２２は、ＩＤＬの読み出しデータの信頼性を上げるために、複数回数読み出しを行い、チップ内のページバッファ２４でこの読み出し結果の多数決をとり、次の書き込みデータとして使用することも可能である。無論、制御部２２は、通常の読み出し動作時に於いて、複数回数読み出しを行いチップ内でこの読み出し結果の多数決をとり、外部への読み出しデータとして使用することも可能である。
【０２１２】
Upperページへのデータ書き込みの際には、１〜複数回のプログラム電圧パルスが印加される（ステップＳ１６８０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために、Upperページのデータ読み出しが行なわれる（ステップＳ１６９０）。
【０２１３】
さらに、Upperページにおけるデータのフェイルビット数がクライテリアよりも小さいか否かが確認される（ステップＳ１７００）。Upperページにおけるデータのフェイルビット数がクライテリア以上である場合（ステップＳ１７００、Ｎｏ）、ステップＳ１６８０〜Ｓ１７００の処理が繰り返される。そして、データのフェイルビット数がクライテリアよりも小さくなると（ステップＳ１７００、Ｙｅｓ）、チップレディーとなる（ステップＳ１７１０）。
【０２１４】
ここで、図２２Ｂに示した書き込み手順の変形例について説明する。図２２Ｃは、第４の実施形態に係る２ｎｄステージでの書き込み手順の変形例を示すサブフローチャートである。なお、図２２Ｃに示す処理手順では、図２２Ｂで説明したステップＳ１６５０，Ｓ１６７０の処理が行われないところを除いて、ステップＳ１６１０〜Ｓ１７１０の処理手順は図２２Ｂと同じである。
【０２１５】
図２２Ｃに示す処理手順の場合、ステップＳ１６１０の前にステップＳ１６０１〜Ｓ１６０９の処理が行われる。具体的には、まず、メモリコントローラ１から不揮発性メモリ２へLowerページおよびMiddleページの読み出しコマンドが入力され（ステップＳ１６０１）、これによりチップビジーとなる（ステップＳ１６０２）。
【０２１６】
この後、制御部２２は、ＩＤＬであるLowerページデータおよびMiddleページデータの読み出しをＶｒ１、Ｖｒ３、Ｖｒ５、Ｖｒ７のしきい値電圧で行う。そして、制御部２２は、Ｖｒ１、Ｖｒ３、Ｖｒ５、Ｖｒ７のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ１６０３）。この後、チップレディーとなる（ステップＳ１６０４）。
【０２１７】
制御部２２が読み出したLowerページデータおよびMiddleページデータを出力すると（ステップＳ１６０５）、このLowerページデータおよびMiddleページデータは、ＥＣＣ回路１４に送信される（ステップＳ１６０６）。これにより、ＥＣＣ回路１４がLowerページデータおよびMiddleページデータをＥＣＣ訂正する（ステップＳ１６０７）。
【０２１８】
そして、メモリコントローラ１から不揮発性メモリ２へLowerページのデータおよびMiddleページデータの入力開始コマンドが入力される（ステップＳ１６０８）。これにより、ＥＣＣ回路１４が、不揮発性メモリ２へLowerページおよびMiddleページデータのデータを入力する（ステップＳ１６０９）。
【０２１９】
この後、ステップＳ１６１０〜Ｓ１７１０の処理が行われる。なお、ステップＳ１６７０では、ＥＣＣ回路１４からのLowerページデータおよびMiddleページデータに基づいて、MiddleページおよびUpperページのプログラム先のＶｔｈが決定される。
【０２２０】
このように、本実施形態では、２ｎｄステージのプログラムにおけるデータ入力は、Upperページの１ページだけである。しかし、この２ｎｄステージではメモリセルのプログラムの目的地であるＶｔｈは、Lower／Middleページも含めた３ページ分のデータが必要である。そのため、この２ｎｄステージのプログラムでは、前処理として、まずLowerページデータとMiddleページデータが読み出される。そして、読み出されたデータと、入力されたUpperページデータとが合成されることによって、Upperページのプログラム先のＶｔｈが決定される。
【０２２１】
図２３は、第４の実施形態に係る外部プログラムコマンドのシーケンスの例を示す図である。図２３の（Ａ）では、第４の実施形態に係る１ｓｔステージにおける外部プログラムコマンドのシーケンスを示し、図２４の（Ｂ）では、第４の実施形態に係る２ｎｄステージにおける外部プログラムコマンドのシーケンスを示している。
【０２２２】
図２３の（Ａ）に示すように、１ｓｔステージでは、プログラム開始コマンド（８０ｈ）が入力された後、プログラム対象ブロック・ページのアドレス（Lowerページのアドレス）が入力され、その後にLowerページのプログラムデータが入力される。この後、プログラムコマンドの連結コマンド（１Ａｈ）が入力され、同様のシーケンスで今度はMiddleページのプログラムデータが入力される。そして、最後にプログラム実行コマンド（１０ｈ）が入力されると、チップがビジーとなりメモリチップ内部でプログラムの動作が開始される。このようなプログラムコマンドの入力により、LowerページおよびMiddleページがプログラムされる。なお、LowerページのプログラムデータとMiddleページのプログラムデータの入力順序は何れが先であってもよい。
【０２２３】
図２３の（Ｂ）に示すように、２ｎｄステージでは、プログラム開始コマンド（８０ｈ）が入力された後、プログラム対象ブロック・ページのアドレス（Upperページのアドレス）が入力され、その後にUpperページのプログラムデータが入力される。そして、最後にプログラム実行コマンド（１０ｈ）が入力されると、チップがビジーとなりメモリチップ内部でプログラムの動作が開始される。このようなプログラムコマンドの入力により、ＩＤＬとしてのLowerページおよびMiddleページの読み出しが行われ、Upperページがプログラムされる。
【０２２４】
ここで、ページ読み出し処理について説明する。ページ読み出しの方法は、読み出し対象ページを含むワード線ＷＬｉに対するプログラムが、２ｎｄステージ書き込み前の場合と２ｎｄステージ完了後とによって異なる。
【０２２５】
２ｎｄステージ書き込み前のワード線ＷＬｉの場合、記録されているデータはLowerページおよびMiddleページが有効である。このため、制御部２２は、読み出しページがLowerページまたはMiddleページのときにはメモリセルからデータを読み出す。そして、制御部２２は、そのUpperページの場合には、メモリセル読み出し動作は行わず、読み出しデータとして強制的に全て“１”を出力する制御を行う。
【０２２６】
一方、２ｎｄステージまで完了したワード線ＷＬｉの場合、制御部２２は、読み出しページがUpper／Middle／Lowerページの何れであってもメモリセルを読み出す。この場合、読み出すページが何れのページかによって必要な読み出し電圧が異なるので、制御部２２は、選択されたページに従って必要な読み出しだけを実行する。
【０２２７】
図６に示したコーディングによれば、Lowerページデータが変化するしきい値状態間の境界は１つだけであるので、制御部２２は、その境界で分離された２つの範囲の何れにしきい値が位置するかでデータを決定する。
【０２２８】
また、MiddleページまたはUpperページのデータが変化するしきい値状態間の境界は３つであるので、制御部２２は、それらの境界で分離された４つの範囲の何れの中にしきい値が位置するかでデータを決定する。
【０２２９】
以下、ページ読み出しの具体的な処理手順について説明する。図２４Ａは、第４の実施形態に係る記憶装置において２ｎｄステージ書き込み前の場合のワード線でのページ読み出しの処理手順を示すフローチャートである。図２４Ｂは、第４の実施形態に係る記憶装置において２ｎｄステージまでプログラムが完了しているワード線でのページ読み出しの処理手順を示すフローチャートである。なお、図２４Ａに示した処理のうち、図１２Ａに示した処理と同様の処理については、その説明を省略する。また、図２４Ｂに示した処理のうち、図１２Ｂに示した処理と同様の処理については、その説明を省略する。
【０２３０】
図２４Ａに示すように、２ｎｄステージ書き込み前のワード線ＷＬｉの場合、制御部２２は、読み出しページを選択する（ステップＳ１８１０）。読み出しページがLowerページの場合（ステップＳ１８１０、Lower）、制御部２２は、Ｖｒ３のしきい値電圧で読み出しを行う（ステップＳ１８２０）。そして、制御部２２は、Ｖｒ３のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ１８３０）。
【０２３１】
また、読み出しページがMiddleページの場合（ステップＳ１８１０、Middle）、制御部２２は、Ｖｒ１、Ｖｒ３およびＶｒ５のしきい値電圧で読み出しを行う（ステップＳ１８４０，Ｓ１８５０，Ｓ１８６０）。そして、制御部２２は、Ｖｒ１、Ｖｒ３およびＶｒ５のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ１８７０）。
【０２３２】
また、読み出しページがUpperページの場合（ステップＳ１８１０、Upper）、制御部２２は、メモリセルの出力データとして全て強制的に“１”を出力する制御を行う（ステップＳ１８８０）。
【０２３３】
また、図２４Ｂに示すように、２ｎｄステージまでプログラムが完了したワード線ＷＬｉの場合、制御部２２は、読み出しページを選択する（ステップＳ１９１０）。読み出しページがLowerページの場合（ステップＳ１９１０、Lower）、制御部２２は、Ｖｒ４のしきい値電圧で読み出しを行う（ステップＳ１９２０）。そして、制御部２２は、Ｖｒ４のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ１９３０）。
【０２３４】
また、読み出しページがMiddleページの場合（ステップＳ１９１０、Middle）、制御部２２は、Ｖｒ１、Ｖｒ３およびＶｒ６のしきい値電圧で読み出しを行う（ステップＳ１９４０，Ｓ１９５０，Ｓ１９６０）。そして、制御部２２は、Ｖｒ１、Ｖｒ３およびＶｒ６のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ１９７０）。
【０２３５】
また、読み出しページがUpperページの場合（ステップＳ１９１０、Upper）、制御部２２は、Ｖｒ２、Ｖｒ５およびＶｒ７のしきい値電圧で読み出しを行う（ステップＳ１９８０，Ｓ１９９０，Ｓ２０００）。そして、制御部２２は、Ｖｒ２、Ｖｒ５およびＶｒ７のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ２０１０）。
【０２３６】
このように、図２１に示したようなしきい値のプログラム制御では、Lowerページデータの読み出しの場合、４レベルを上下で２レベルずつ分離できる読み出しレベルとして、Ｖｒ３が用いられる。また、Middleページデータの読み出しの場合、４レベルのどこか１つを特定しないとデータを決定できないデータ割付となっているので、読み出しレベルとして、Ｖｒ１、Ｖｒ３およびＶｒ５の３レベルの読み出しが必要となる。
【０２３７】
一方、２ｎｄステージまで完了したワード線ＷＬｉの場合、読み出しページはUpper／Middle／Lowerのうちの何れであってもメモリセルを読み出すが、どのページを読み出すかによって必要な読み出し電圧が異なるので、選択されたページに従った必要な読み出しだけが実行される。
【０２３８】
なお、ワード線ＷＬｉに対するプログラムが、１ｓｔステージと２ｎｄステージとの何れまで完了したかは、メモリコントローラ１が管理・識別することが可能である。メモリコントローラ１が、プログラム制御を行っているので、メモリコントローラ１がその進捗状況を記録しておけば、メモリコントローラ１は、不揮発性メモリ２のどのアドレスがどのようなプログラム状態であるか容易に参照できる。この場合、メモリコントローラ１は、不揮発性メモリ２から読み出しを行う際、対象ページアドレスを含むワード線ＷＬｉがどのようなプログラム状態であるかを識別し、識別した状態に応じた読み出しコマンドを発行する。
【０２３９】
図２５は、第４の実施形態に係る外部読み出しコマンドのシーケンスの例を示す図である。図２５の（Ａ）では、第４の実施形態に係る記憶装置において１ｓｔステージまでプログラムが完了しているワード線ＷＬｉでの外部読み出しコマンドのシーケンスを示し、図２５の（Ｂ）では、第４の実施形態に係る記憶装置において２ｎｄステージまでプログラムが完了しているワード線ＷＬｉでの外部読み出しコマンドのシーケンスを示している。
【０２４０】
図２５の（Ａ）に示すように、２ｎｄステージ書き込み前のワード線ＷＬｉの場合、読み出し動作を実行するコマンドとして、最初に２ｎｄステージ書き込み前の状態を示すコマンド（２Ｄｈ）が入力される。この後、読み出し開始コマンド（００ｈ）が入力され、その後に読み出し対象ブロック・ページのアドレス（LowerページまたはMiddleページまたはUpperページのアドレス）が入力される。そして、最後に読出し実行コマンド（３０ｈ）が入力されると、チップがビジーとなり、メモリチップ内部で読み出しの動作が開始される。このようなプログラムコマンドの入力により、LowerページまたはMiddleページまたはUpperページからデータが読み出される。その後、チップがレディー状態となり、読み出されたデータが出力される。
【０２４１】
一方、図２５の（Ｂ）に示すように、２ｎｄステージまでプログラムが完了したワード線ＷＬｉの場合、読み出し動作を実行するコマンドとして、最初に２ｎｄステージまでの完了状態を示すコマンド（２５ｈ）が入力される。この後、読み出し開始コマンド（００ｈ）が入力され、その後に読み出し対象ブロック・ページのアドレス（LowerページまたはMiddleページまたはUpperページのアドレス）が入力される。そして、最後に読出し実行コマンド（３０ｈ）が入力されると、チップがビジーとなり、メモリチップ内部で読み出しの動作が開始される。このようなプログラムコマンドの入力により、LowerページまたはMiddleページまたはUpperページからデータが読み出される。その後、チップがレディー状態となり、読み出されたデータが出力される。
【０２４２】
なお、第１の実施形態に対する第２の実施形態の変形と同様の変形を、本実施形態に適用してもよい。すなわち、本実施形態においても、ワード線ＷＬｎ−１の２ｎｄステージのプログラムと、ワード線ＷＬｎの１ｓｔステージのプログラムとがまとめて行なわれてもよい。
【０２４３】
また、本実施形態では、１−３−３データコーディングの種類は、Lowerでの境界数が１であるという制約が不要となる。このため、第１〜第３の実施形態で用いた１−３−３データコーディング以外の１−３−３データコーディングが適用されてもよい。本実施形態の１−３−３データコーディングの具体的な状態は、特開２０１５−１９５０７１号公報の図５〜８，１２〜１５，１８，２０，２２，２４，２８〜３０などに示されたものである。
【０２４４】
このように第４の実施形態では、第１の実施形態と同様に、不揮発性メモリ２（３次元構造または２次元構造を有した３ｂｉｔ／ＣｅｌｌのＮＡＮＤメモリ）をプログラムする際に、１−３−３データコーディングを採用し、プログラムを２ステージ制とした。このように２ステージ制でプログラムされるので、データプログラムの際に入力するデータ量が減り、メモリコントローラ１に必要とされる書き込みバッファ量を抑制することが可能となる。また、不揮発性メモリ２のページ間のビットエラー率の偏りを低減できるとともに、ＥＣＣにかかるコストを下げることができる。
【０２４５】
（第５の実施形態）
つぎに、図２６〜図３０を用いて第５の実施形態について説明する。第５の実施形態では、ワード線ＷＬｉに対するプログラムが、１ｓｔステージと２ｎｄステージとの何れまで完了したかをメモリセル（フラグセル）に記録しておき、データ読み出しの際は、フラグセルに記録された情報に基づいて読み出しシーケンスを適切に制御する。
【０２４６】
なお、本実施形態でも第１の実施形態の図６で説明したものと同じデータコーディングを用いる場合について説明する。また、以下の説明では、データを記憶するメモリセルアレイをデータ記憶セルという場合がある。また、１ｓｔステージと２ｎｄステージとの何れまで完了したかを示す情報を完了情報という場合がある。本実施形態では、２ｎｄステージまで完了している場合には、フラグセルにデータが書き込まれるので、このデータが２ｎｄステージまで完了したことを示す完了情報となる。一方、２ｎｄステージまで完了していない場合には、フラグセルにデータが書き込まれないので、この未書き込みのデータが２ｎｄステージまで完了していないことを示す完了情報となる。
【０２４７】
図２６は、フラグセルの構成を説明するための図である。本実施形態でも第１の実施形態の図３で説明したメモリセルアレイと同様の構成を有したメモリセルアレイが用いられる。なお、図２６では、セレクトゲート線ＳＧＤ０に接続されたメモリセルトランジスタＭＴなどを図示しており、セレクトゲート線ＳＧＤ１〜３に接続されたメモリセルトランジスタＭＴなどの図示を省略している。
【０２４８】
ビット線ＢＬ０〜ＢＬｍ−１に接続されたメモリセルトランジスタ（データ記憶セル）ＭＴの横には、ダミーセルＤＣとフラグセルＦＣが配置されている。ダミーセルＤＣおよびフラグセルＦＣは、メモリセルトランジスタＭＴと同様の構成を有している。具体的には、ダミーセルＤＣは、セレクトゲート線ＳＧＤ０、ワード線ＷＬ０〜ＷＬ７、セレクトゲート線ＳＧＳ、ソース線ＳＬ、ダミーセル用ビット線ＤＢＬなどに接続されている。また、フラグセルＦＣは、セレクトゲート線ＳＧＤ０、ワード線ＷＬ０〜ＷＬ７、セレクトゲート線ＳＧＳ、ソース線ＳＬ、フラグセル用ビット線ＦＢＬ０〜ＦＢＬｋ−１などに接続されている。換言すると、ブロックＢＬＫ内のメモリセルのうちの一部がデータ記憶として用いられ、残りの一部がダミーセルＤＣおよびフラグセルＦＣとして用いられる。
【０２４９】
第１〜第５の実施形態では、メモリコントローラ１が、ワード線ＷＬｉに対するプログラムが１ｓｔステージと２ｎｄステージとの何れまで完了したかを管理・識別している。そして、データ読み出しの際には、メモリコントローラ１が、プログラムの完了状態に応じた読み出しコマンドを発行する。
【０２５０】
これに対し、本実施形態では、制御部２２が、１ｓｔステージと２ｎｄステージとの何れまで完了したかを示す完了情報を不揮発性メモリ２のフラグセルＦＣに記録する。そして、データ読み出しの際には、制御部２２が、フラグセルＦＣに記録された完了情報に基づいて、読み出しシーケンスを制御する。
【０２５１】
フラグセルＦＣは、ワード線単位で設けられている。すなわち、ワード線ＷＬｉ内の複数のメモリセルのうちの一部がフラグセルＦＣとして使用される。フラグセルＦＣは、ワード線ＷＬｉ毎に１つでもよいが、多重化によってデータの信頼性を上げるために、複数個とするのが好ましい。また、隣接セル間干渉による信頼性悪化の影響を抑えるために、データを記憶するデータ記憶セルと、フラグセルＦＣとを物理的に隣接させない方が好ましい。たとえば、データ記憶セルと、フラグセルＦＣとの間にはデータ記録領域としては使用しないダミーセルＤＣなどを配置するのが好ましい。
【０２５２】
フラグセルＦＣに記録される完了情報は、２ｎｄステージのプログラムが行われたか否かの２値情報である。制御部２２は、２ｎｄステージのプログラム時に同一ワード線ＷＬｉ内のフラグセルＦＣに、２ｎｄステージのプログラムが完了したことを示す完了情報を書き込む。制御部２２は、完了情報を、例えばＤレベル以上でフラグセルＦＣに書き込む。このときのしきい値分布の変化の様子について説明する。
【０２５３】
図２７Ａは、第５の実施形態に係るフラグセルへのプログラムを説明するための図である。図２７Ａでは、２ｎｄステージのプログラムの際に行われるフラグセルＦＣでのＶｔｈ状態の遷移方法を示している。
【０２５４】
図２７Ａの（Ｔ５１）は、プログラム前の初期状態である消去状態のフラグセルＦＣでのＶｔｈ分布状態を示している。また、図２７Ａの（Ｔ５２）は、１ｓｔステージのプログラムが完了した時点でのＶｔｈ分布状態を示している。また、図２７Ａの（Ｔ５３）は、２ｎｄステージのプログラムが完了した時点でのＶｔｈ分布状態を示している。本実施形態の制御部２２は、２ｎｄステージが完了する際に、図２７Ａの（Ｔ５３）に示すように、書き込み目的地のＶｔｈ分布状態が領域Ｄ以上（Ｖｒ４以上）となるよう、フラグセルＦＣにプログラムする。
【０２５５】
フラグセルＦＣは、データセルと同時に２ｎｄステージ時に書き込みが行なわれるが、フラグセルＦＣ込みの閾値の遷移は、データセルよりも大きい。このため、フラグセルＦＣに隣接するデータセルの信頼性が悪化する場合は、フラグセルＦＣとデータセルとの間にダミーセルＤＣが設けられる。また、ダミーセルＤＣは、図２７Ｂに示すように２ｎｄステージ時にＥｒからＡ又はＢ又はＣへ書き込まれてもよい。
【０２５６】
図２７Ｂは、第５の実施形態に係るダミーセルへのプログラムを説明するための図である。図２７Ｂでは、２ｎｄステージのプログラムの際に行われるダミーセルＤＣでのＶｔｈ状態の遷移方法を示している。
【０２５７】
図２７Ｂの（Ｔ６１）は、プログラム前の初期状態である消去状態のダミーセルＤＣでのＶｔｈ分布状態を示している。また、図２７Ｂの（Ｔ６２）は、１ｓｔステージのプログラムが完了した時点でのＶｔｈ分布状態を示している。また、図２７Ａの（Ｔ５３）は、２ｎｄステージのプログラムが完了した時点でのＶｔｈ分布状態を示している。本実施形態の制御部２２は、２ｎｄステージが完了する際に、図２７Ｂの（Ｔ６３）に示すように、書き込み目的地のＶｔｈ分布状態が領域Ｃ以下（Ｖｒ４以下）となるよう、ダミーセルＤＣにプログラムする。
【０２５８】
図２８は、第５の実施形態に係る２ｎｄステージでの書き込み手順を示すフローチャートである。なお、図９Ｃで説明した処理と同様の処理については、その説明を省略する。第５の実施形態に係る２ｎｄステージのステップＳ２１１０〜Ｓ２１８０は、図９Ｃに示した第１の実施形態に係る２ｎｄステージのステップＳ３１０〜Ｓ３８０と同じである。
【０２５９】
本実施形態では、Middleページ、UpperページおよびフラグセルＦＣへのプログラム先のＶｔｈが決定された後（ステップＳ２１８０）、決定されたＶｔｈを用いて、データ記憶セル（Middleページ、Upperページ）およびフラグセルＦＣへのデータ書き込みが行われる。
【０２６０】
第５の実施形態に係る２ｎｄステージでは、Middleページ、UpperページおよびフラグセルＦＣへのデータ書き込みの際に、１〜複数回のプログラム電圧パルスが印加される。（ステップＳ２１９０）。そして、メモリセルがしきい値境界レベルを超えて移動したか否かを確認するために、Middleページ、UpperページおよびフラグセルＦＣに対してデータ読み出しが行なわれる（ステップＳ２２００）。
【０２６１】
さらに、MiddleページおよびUpperページにおけるデータのフェイルビット数がクライテリアよりも小さいか否かが確認される（ステップＳ２２１０）。MiddleページおよびUpperページにおけるデータのフェイルビット数がクライテリア以上である場合（ステップＳ２２１０、Ｎｏ）、ステップＳ２１９０〜Ｓ２２１０の処理が繰り返される。この場合において、フラグセルＦＣに対するステップＳ２１９０，Ｓ２２１０の処理は省略される。
【０２６２】
そして、MiddleページおよびUpperページにおけるデータのフェイルビット数がクライテリアよりも小さくなると（ステップＳ２２１０、Ｙｅｓ）、フラグセルＦＣにおけるデータのフェイルビット数がクライテリアよりも小さいか否かが確認される（ステップＳ２２２０）。
【０２６３】
フラグセルＦＣにおけるデータのフェイルビット数がクライテリア以上である場合（ステップＳ２２２０、Ｎｏ）、ステップＳ２１９０〜Ｓ２２２０の処理が繰り返される。この場合において、MiddleページおよびUpperページに対するステップＳ２１９０〜Ｓ２２１０の処理は省略される。
【０２６４】
そして、フラグセルＦＣにおけるデータのフェイルビット数がクライテリアよりも小さくなると（ステップＳ２２２０、Ｙｅｓ）、チップレディーとなる（ステップＳ２２３０）。
【０２６５】
このように、本実施形態のステップＳ２１９０（プログラム電圧パルスを印加するステップ）では、データを書き込むデータ記憶セルに加え、フラグセルＦＣに対してもプログラム電圧パルスが同時に印加される。そして、この後のデータ読み出しにおいても、データ記憶セルとフラグセルＦＣとがプログラムされたか否かを確認するために、データ記憶セル内のデータとフラグセルＦＣ内のデータ（完了情報）とが読み出される。
【０２６６】
その後、データ記憶セルおよびフラグセルＦＣから読み出されたデータと、期待値に対応するクライテリアとが比較される。このとき、フェイルしたビットの数がカウントされるが、データ記憶セル内でフェイルしたデータとフラグセルＦＣ内でフェイルしたデータとは、別々にカウントされ、それぞれのクライテリアと比較される。何れか一方でもクライテリアを満たさない場合には、再びプログラム電圧パルスの印加手順に戻る。何れの比較においてもクライテリアを満たした場合には、チップをレディーとして終了となる。
【０２６７】
第１の実施形態におけるページ読み出しでは、読み出し対象ページを含むワード線ＷＬｉに対するプログラムが、１ｓｔステージと２ｎｄステージとの何れまで完了したかによって、別々の処理順が用いられた。そして、何れの処理手順を実施するかは外部読み出しコマンドに基づいて決定されていた。しかし、本実施形態では、１ｓｔステージと２ｎｄステージとの何れまで完了したかは、メモリコントローラ１からのコマンドで指示されるのではなく、フラグセルＦＣ内の完了情報に従って判断される。すなわち、制御部２２は、読み出しコマンドをメモリコントローラ１から受信すると、まずフラグセルＦＣ内のデータである完了情報を読み出す。そして、制御部２２は、フラグセルＦＣが書き込み済みであるか否かに応じて、１ｓｔステージと２ｎｄステージとの何れまで完了しているかを判定する。
【０２６８】
上述したとおり、本実施形態では、フラグセルＦＣへの書き込みレベルをＤレベル以上としている。このため、フラグセルＦＣの読み出しは、Ｖｒ１，Ｖｒ２，Ｖｒ３またはＶｒ４のうちの任意の１つの読み出し電圧で可能である。したがって、制御部２２は、読み出し対象ページがLowerページ、MiddleページまたはUpperページの何れであっても、２ｎｄステージのプログラムまで完了している場合に必要な複数の読み出しレベルの最も低い読み出しレベルを使用して読み出せば、フラグセルＦＣの読み出しが可能である。そして、もしフラグセルＦＣが書き込み済みであると判定されたならば、制御部２２は、２ｎｄステージのプログラムまで完了していると判断し、フラグセルＦＣ以外のメモリセルから、残りの読み出しレベルで読み出しを実行する。
【０２６９】
一方、フラグセルＦＣが未書き込みと判定された場合、Lowerページが読み出し対象であるなら、制御部２２は、Ｖｒ１でデータを読み直す。また、Middle／Upperページが読み出し対象であるなら、制御部２２は、これ以降の読み出しは不要と判断し、出力データを強制的に“１”とする。
【０２７０】
フラグセルＦＣの読み出し結果（完了情報）からフラグセルＦＣが書き込み済みか否かを判定する際に、制御部２２は、フラグセルＦＣが１個であるならば、そのセル自身が書き込み済みであるか否かを判定すればよい。また、フラグセルＦＣのデータの信頼度を上げるためにフラグセルＦＣが複数個設けられている場合がある。この場合、制御部２２は、たとえば、複数個のフラグセルＦＣのうちのあるフラグセルＦＣから、クライテリアの数以上のセルが書き込みされたことを示す完了情報が読み出された場合、フラグセルＦＣは書き込み済みであると判断する。
【０２７１】
ここで、ページ読み出しの具体的な処理手順について説明する。図２９は、第５の実施形態に係るページ読み出しの処理手順を示すフローチャートである。なお、図２９に示した処理のうち、図１２Ａまたは図２４Ａに示した処理と同様の処理については、その説明を省略する。
【０２７２】
図２９に示すように、制御部２２は、読み出しページを選択する（ステップＳ２３１０）。読み出しページがLowerページの場合（ステップＳ２３１０、Lower）、制御部２２は、Ｖｒ４のしきい値電圧で読み出しを行う（ステップＳ２３２０）。
【０２７３】
そして、制御部２２は、フラグセルＦＣに完了情報が書き込まれているか否かを判定する（ステップＳ２３３０）。フラグセルＦＣに完了情報が書き込み済みでない場合（ステップＳ２３３０、Ｎｏ）、制御部２２は、Ｖｒ１のしきい値電圧で読み出しを行う（ステップＳ２３４０）。そして、制御部２２は、Ｖｒ１のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ２３５０）。
【０２７４】
一方、フラグセルＦＣに完了情報が書き込み済みである場合（ステップＳ２３３０、Ｙｅｓ）、制御部２２は、Ｖｒ４のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ２３６０）。
【０２７５】
また、読み出しページがMiddleページの場合（ステップＳ２３１０、Middle）、制御部２２は、Ｖｒ１のしきい値電圧で読み出しを行う（ステップＳ２３７０）。そして、制御部２２は、フラグセルＦＣに完了情報が書き込まれているか否かを判定する（ステップＳ２３８０）。フラグセルＦＣに完了情報が書き込み済みでない場合（ステップＳ２３８０、Ｎｏ）、制御部２２は、データ記憶セル（Middleページ）の出力データとして全て強制的に“１”を出力する制御を行う（ステップＳ２３９０）。
【０２７６】
一方、フラグセルＦＣに完了情報が書き込み済みである場合（ステップＳ２３８０、Ｙｅｓ）、制御部２２は、Ｖｒ３およびＶｒ６のしきい値電圧で読み出しを行う（ステップＳ２４００，Ｓ２４１０）。そして、制御部２２は、Ｖｒ１、Ｖｒ３およびＶｒ６のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ２４２０）。
【０２７７】
また、読み出しページがUpperページの場合（ステップＳ２４３０、Upper）、制御部２２は、Ｖｒ２のしきい値電圧で読み出しを行う（ステップＳ２３７０）。そして、制御部２２は、フラグセルＦＣに完了情報が書き込まれているか否かを判定する（ステップＳ２４４０）。フラグセルＦＣに完了情報が書き込み済みでない場合（ステップＳ２４４０、Ｎｏ）、制御部２２は、データ記憶セル（Upperページ）の出力データとして全て強制的に“１”を出力する制御を行う（ステップＳ２４５０）。
【０２７８】
一方、フラグセルＦＣに完了情報が書き込み済みである場合（ステップＳ２４４０、Ｙｅｓ）、制御部２２は、Ｖｒ５およびＶｒ７のしきい値電圧で読み出しを行う（ステップＳ２４６０，Ｓ２４７０）。そして、制御部２２は、Ｖｒ２、Ｖｒ５およびＶｒ７のしきい値電圧での読み出し結果に基づいて、読み出したデータの値を“０”または“１”に決定する（ステップＳ２７８０）。
【０２７９】
図３０は、第５の実施形態に係る外部読み出しコマンドのシーケンスの例を示す図である。本実施形態は、読み出しコマンドは１種類だけである。図３０に示すように、読み出し動作を実行するコマンドとして、読み出し開始コマンド（００ｈ）が入力され、その後に読み出し対象ブロック・ページのアドレス（LowerページまたはMiddleページまたはUpperページのアドレス）が入力される。そして、最後に読出し実行コマンド（３０ｈ）が入力されると、チップがビジーとなり、メモリチップ内部で読み出しの動作が開始される。このようなプログラムコマンドの入力により、LowerページまたはMiddleページまたはUpperページからデータが読み出される。その後、チップがレディー状態となり、読み出されたデータが出力される。
【０２８０】
このように第５の実施形態では、フラグセルＦＣに完了情報を記憶させておくので、１ｓｔステージと２ｎｄステージとの何れまで完了したかに依らず、同じ処理順でページデータを読み出すことが可能となる。
【０２８１】
（第６の実施形態）
つぎに、図３１〜図３６を用いて第６の実施形態について説明する。第６の実施形態では、３次元構造または２次元構造を有した４ｂｉｔ／Ｃｅｌｌ（ＱＬＣ：Quadruple  Level  Cell）の不揮発性メモリ２に対して２ステージでページ単位の書き込みを実施する。
【０２８２】
図３１は、第６の実施形態のしきい値領域の一例を示す図である。図３１では、４ｂｉｔ／Ｃｅｌｌの不揮発性メモリ２のしきい値分布例を示している。図３１の、Ｅｒ１、Ａ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１，Ｆ１，Ｇ１，Ｈ１，Ｉ１，Ｊ１，Ｋ１，Ｌ１，Ｍ１，Ｎ１，Ｏ１と記載した１６個の分布は、１６個のしきい値領域内のそれぞれのしきい値分布を示している。このように、本実施形態の各メモリセルは、１５個の境界によって仕切られたしきい値分布を有している。図３１の横軸はしきい値電圧を示し、縦軸はメモリセル数（セル数）の分布を示している。
【０２８３】
本実施形態では、しきい値電圧がＶｒ１１以下となる領域を領域Ｅｒ１とよび、しきい値電圧がＶｒ１１より大きくＶｒ１２以下となる領域を領域Ａ１とよび、しきい値電圧がＶｒ１２より大きくＶｒ１３以下となる領域を領域Ｂ１とよび、しきい値電圧がＶｒ１３より大きくＶｒ１４以下となる領域を領域Ｃ１とよぶ。また、本実施形態では、しきい値電圧がＶｒ１４より大きくＶｒ１５以下となる領域を領域Ｄ１とよび、しきい値電圧がＶｒ１５より大きくＶｒ１６以下となる領域を領域Ｅ１とよび、しきい値電圧がＶｒ１６より大きくＶｒ１７以下となる領域を領域Ｆ１とよび、しきい値電圧がＶｒ１７より大きくＶｒ１８以下となる領域を領域Ｇ１とよぶ。
【０２８４】
また、本実施形態では、しきい値電圧がＶｒ１８より大きくＶｒ１９以下となる領域を領域Ｈ１とよび、しきい値電圧がＶｒ１９より大きくＶｒ２０以下となる領域を領域Ｉ１とよび、しきい値電圧がＶｒ２０より大きくＶｒ２１以下となる領域を領域Ｊ１とよび、しきい値電圧がＶｒ２１より大きくＶｒ２２以下となる領域を領域Ｋ１とよぶ。また、本実施形態では、しきい値電圧がＶｒ２２より大きくＶｒ２３以下となる領域を領域Ｌ１とよび、しきい値電圧がＶｒ２３より大きくＶｒ２４以下となる領域を領域Ｍ１とよび、しきい値電圧がＶｒ２４より大きくＶｒ２５以下となる領域を領域Ｎ１とよび、しきい値電圧がＶｒ２５より大きい領域を領域Ｏ１とよぶ。
【０２８５】
また、領域Ｅｒ１，Ａ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１，Ｆ１，Ｇ１，Ｈ１，Ｉ１，Ｊ１，Ｋ１，Ｌ１，Ｍ１，Ｎ１，Ｏ１に対応するしきい値分布をそれぞれ分布Ｅｒ１，Ａ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１，Ｆ１，Ｇ１，Ｈ１，Ｉ１，Ｊ１，Ｋ１，Ｌ１，Ｍ１，Ｎ１，Ｏ１（第１〜第１６の分布）と呼ぶ。Ｖｒ１１〜Ｖｒ２５は、各領域の境界となるしきい値電圧である。
【０２８６】
以下の図３２，３４，３６は、４ｂｉｔ／Ｃｅｌｌのメモリセルに対する各プログラムステージ後のしきい値分布を示している。また、図３２に示すしきい値分布と図３３に示すデータコーディングは、１−４−５−５コーディングに対応している。１−４−５−５コーディングは、ビット値を判定するための境界数が、Lowerページ、Middleページ、Upperページ、Higherページでそれぞれ１，４，５，５である。
【０２８７】
図３２は、第６の実施形態におけるプログラム後のしきい値分布を示す第１例の図である。図３２の（Ｔ７１）は、プログラム前の初期状態である消去状態のしきい値分布を示している。図３２の（Ｔ７２）は、１ｓｔステージのプログラム後のしきい値分布を示している。図３２の（Ｔ７３）は、２ｎｄステージのプログラム後のしきい値分布を示している。
【０２８８】
図３２の（Ｔ７１）に示すように、ＮＡＮＤメモリセルアレイ２３の全メモリセルは、未書き込みの状態では分布Ｅｒである。不揮発性メモリ２の制御部２２は、図３２の（Ｔ７２）に示すように、１ｓｔステージのプログラムでは、LowerページおよびMiddleページに書き込むビット値に応じて、メモリセルごとに分布Ｅｒのままとする、または電荷を注入して分布Ｅｒよりも上の分布に移動させる。これにより、メモリセルは、LowerページデータおよびMiddleページデータによって、４値のレベルにプログラムされる。
【０２８９】
また、図３２の（Ｔ７３）に示すように、２ｎｄステージのプログラムでは、データの書き込みにはUpperページとHigherページの２ページが必要である。そして、不揮発性メモリ２の制御部２２は、２ｎｄステージのプログラム後のしきい値分布を、各隣接する分布が分離された最終状態で１６値のレベルとなるようにプログラムする。この場合、全てのページデータの読み出しが可能である。
【０２９０】
図３３は、図３２に示すしきい値分布に対応するデータコーディングを示す図である。図３３に示すデータコーディングでは、例えば、しきい値電圧がＥｒ１領域内にあるメモリセルは、Upper，Middle，Lower，Higherページに対応するビットのデータ値として“１１１１”を記憶している状態である。また、しきい値電圧がＡ１領域内にあるメモリセルは“１０１１”を記憶している状態である。
【０２９１】
また、以下の図３４に示すしきい値分布と図３５に示すデータコーディングは、１−６−４−４コーディングに対応している。１−６−４−４コーディングは、ビット値を判定するための境界数が、Lowerページ、Middleページ、Upperページ、Higherページでそれぞれ１，６，４，４である。
【０２９２】
図３４は、第６の実施形態におけるプログラム後のしきい値分布を示す第２例の図である。図３４の（Ｔ８１）は、プログラム前の初期状態である消去状態のしきい値分布を示している。図３４の（Ｔ８２）は、１ｓｔステージのプログラム後のしきい値分布を示している。図３４の（Ｔ８３）は、２ｎｄステージのプログラム後のしきい値分布を示している。
【０２９３】
図３４の（Ｔ８１）に示すように、ＮＡＮＤメモリセルアレイ２３の全メモリセルは、未書き込みの状態では分布Ｅｒである。不揮発性メモリ２の制御部２２は、図３４の（Ｔ８２）に示すように、１ｓｔステージのプログラムでは、LowerページおよびMiddleページに書き込むビット値に応じて、メモリセルごとに分布Ｅｒのままとする、または電荷を注入して分布Ｅｒよりも上の分布に移動させる。これにより、メモリセルは、LowerページデータおよびMiddleページデータによって、４値のレベルにプログラムされる。
【０２９４】
また、図３４の（Ｔ８３）に示すように、２ｎｄステージのプログラムでは、データの書き込みにはUpperページとHigherページの２ページが必要である。そして、不揮発性メモリ２の制御部２２は、２ｎｄステージのプログラム後のしきい値分布を、各隣接する分布が分離された最終状態で１６値のレベルとなるようにプログラムする。この場合、全てのページデータの読み出しが可能である。
【０２９５】
図３５は、図３４に示すしきい値分布に対応するデータコーディングを示す図である。図３５に示すデータコーディングでは、例えば、しきい値電圧がＥｒ１領域内にあるメモリセルは、Upper，Middle，Lower，Higherページに対応するビットのデータ値として“１１１１”を記憶している状態である。また、しきい値電圧がＡ１領域内にあるメモリセルは“０１１１”を記憶している状態である。
【０２９６】
また、以下の図３６に示すしきい値分布と図３７に示すデータコーディングは、１−２−６−６コーディングに対応している。１−２−６−６コーディングは、ビット値を判定するための境界数が、Lowerページ、Middleページ、Upperページ、Higherページでそれぞれ１，２，６，６である。
【０２９７】
図３６は、第６の実施形態におけるプログラム後のしきい値分布を示す第３例の図である。図３６の（Ｔ９１）は、プログラム前の初期状態である消去状態のしきい値分布を示している。図３６の（Ｔ９２）は、１ｓｔステージのプログラム後のしきい値分布を示している。図３６の（Ｔ９３）は、２ｎｄステージのプログラム後のしきい値分布を示している。
【０２９８】
図３６の（Ｔ９１）に示すように、ＮＡＮＤメモリセルアレイ２３の全メモリセルは、未書き込みの状態では分布Ｅｒである。不揮発性メモリ２の制御部２２は、図３６の（Ｔ９２）に示すように、１ｓｔステージのプログラムでは、LowerページおよびMiddleページに書き込むビット値に応じて、メモリセルごとに分布Ｅｒのままとする、または電荷を注入して分布Ｅｒよりも上の分布に移動させる。これにより、メモリセルは、LowerページデータおよびMiddleページデータによって、４値のレベルにプログラムされる。
【０２９９】
また、図３６の（Ｔ９３）に示すように、２ｎｄステージのプログラムでは、データの書き込みにはUpperページとHigherページの２ページが必要である。そして、不揮発性メモリ２の制御部２２は、２ｎｄステージのプログラム後のしきい値分布を、各隣接する分布が分離された最終状態で１６値のレベルとなるようにプログラムする。この場合、全てのページデータの読み出しが可能である。
【０３００】
図３７は、図３６に示すしきい値分布に対応するデータコーディングを示す図である。図３７に示すデータコーディングでは、例えば、しきい値電圧がＥｒ１領域内にあるメモリセルは、Upper，Middle，Lower，Higherページに対応するビットのデータ値として“１１１１”を記憶している状態である。また、しきい値電圧がＢ１領域内にあるメモリセルは“００１１”を記憶している状態である。
【０３０１】
本実施形態においても、第１〜第５の実施形態と同様の処理によって、プログラムが実行され、各ページデータの読み出しが行われる。
【０３０２】
このように第６の実施形態では、３次元構造または２次元構造を有した４ｂｉｔ／Ｃｅｌｌの不揮発性メモリ２に対して２ステージでページ単位の書き込みを実施するので、第１〜第５の実施形態と同様の効果を得ることが可能となる。
【０３０３】
なお、第１〜第６の実施形態が組み合されてもよい。例えば、第４の実施形態や第５の実施形態に、第２〜第４の実施形態の少なくとも１つが組み合されてもよい。
【０３０４】
また、第１〜第６の実施形態では、不揮発性メモリ２が、ＮＡＮＤメモリを用いて構成されている場合について説明したが、他のタイプのメモリが用いられてもよい。また、第１〜第５の実施形態では、不揮発性メモリ２が１−３−３コーディングを適用する場合について説明したが、不揮発性メモリ２が適用するコーディングは、１−３−３コーディングに限らない。例えば、不揮発性メモリ２は、１−２−４コーディングまたは２−３−２コーディングを適用してもよい。
【０３０５】
また、図７、図１２、図１７、図１９、図２９で説明した、２ｎｄステージ書き込み前と２ｎｄステージ書き込み後の読み出しレベル（Ｖｒ１、Ｖｒ４）は、２ｎｄステージ書き込み後（Ｔ３）の読出しレベル（Ｖｒ１，Ｖｒ４）と若干異なっていてもよい。また、図２１、図２４で説明した、２ｎｄステージ書き込み前と２ｎｄステージ書き込み後の読み出しレベル（Ｖｒ１、Ｖｒ３、Ｖｒ５、Ｖｒ７）は、２ｎｄステージ書き込み後（Ｔ３）の読出しレベル（Ｖｒ１、Ｖｒ３、Ｖｒ５、Ｖｒ７）と若干異なっていてもよい。
【０３０６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０３０７】
１…メモリコントローラ、２…不揮発性メモリ、１１…ＲＡＭ、１２…プロセッサ、２２…制御部、２３…ＮＡＮＤメモリセルアレイ、ＦＣ…フラグセル、ＭＴ…メモリセルトランジスタ。
【図１】
2020030881.tif 000003
【図２】
2020030881.tif 000004
【図３】
2020030881.tif 000005
【図４】
2020030881.tif 000006
【図５】
2020030881.tif 000007
【図６】
2020030881.tif 000008
【図７】
2020030881.tif 000009
【図８Ａ】
2020030881.tif 000010
【図８Ｂ】
2020030881.tif 000011
【図８Ｃ】
2020030881.tif 000012
【図９Ａ】
2020030881.tif 000013
【図９Ｂ】
2020030881.tif 000014
【図９Ｃ】
2020030881.tif 000015
【図９Ｄ】
2020030881.tif 000016
【図９Ｅ】
2020030881.tif 000017
【図１０Ａ】
2020030881.tif 000018
【図１０Ｂ】
2020030881.tif 000019
【図１１】
2020030881.tif 000020
【図１２Ａ】
2020030881.tif 000021
【図１２Ｂ】
2020030881.tif 000022
【図１３】
2020030881.tif 000023
【図１４Ａ】
2020030881.tif 000024
【図１４Ｂ】
2020030881.tif 000025
【図１５】
2020030881.tif 000026
【図１６】
2020030881.tif 000027
【図１７】
2020030881.tif 000028
【図１８】
2020030881.tif 000029
【図１９】
2020030881.tif 000030
【図２０】
2020030881.tif 000031
【図２１】
2020030881.tif 000032
【図２２Ａ】
2020030881.tif 000033
【図２２Ｂ】
2020030881.tif 000034
【図２２Ｃ】
2020030881.tif 000035
【図２３】
2020030881.tif 000036
【図２４Ａ】
2020030881.tif 000037
【図２４Ｂ】
2020030881.tif 000038
【図２５】
2020030881.tif 000039
【図２６】
2020030881.tif 000040
【図２７Ａ】
2020030881.tif 000041
【図２７Ｂ】
2020030881.tif 000042
【図２８】
2020030881.tif 000043
【図２９】
2020030881.tif 000044
【図３０】
2020030881.tif 000045
【図３１】
2020030881.tif 000046
【図３２】
2020030881.tif 000047
【図３３】
2020030881.tif 000048
【図３４】
2020030881.tif 000049
【図３５】
2020030881.tif 000050
【図３６】
2020030881.tif 000051
【図３７】
2020030881.tif 000052