(57)【要約】【課題】  メモリシステムにおいて、プログラム時間を短縮することである。【解決手段】  実施形態によれば、メモリシステムは不揮発性の半導体メモリと、半導体メモリを制御するコントローラと、を具備する。半導体メモリは、メモリセルと、メモリセルにプログラム電圧を印加することにより前記メモリセルにデータを書き込む書き込み回路と、を具備する。書き込み回路は、プログラム電圧を変化させながら、閾値電圧と、書き込みデータに応じた第１基準電圧とは異なる第２基準電圧とを比較することにより書き込みパラメータを求める第１書き込み動作を実行する。【選択図】図６
2019061731.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性の半導体メモリと、
前記半導体メモリを制御するコントローラと、を具備するメモリシステムにおいて、
前記半導体メモリは、
メモリセルと、
前記メモリセルにプログラム電圧を印加することにより前記メモリセルにデータを書き込む書き込み回路と、を具備し、
前記書き込み回路は、
前記プログラム電圧を変化させながら、閾値電圧と、書き込みデータに応じた第１基準電圧とは異なる第２基準電圧とを比較することにより書き込みパラメータを求める第１書き込み動作を実行するメモリシステム。
【請求項２】
前記書き込み回路は、前記書き込みパラメータに基づいて前記プログラム電圧を変化させながら前記閾値電圧が前記第１基準電圧を超えるようにする第２書き込み動作も実行可能であり、
前記コントローラは前記第１書き込み動作又は前記第２書き込み動作を前記書き込み回路に指示する請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、
前記第１書き込み動作を表すコマンドを含む第１コマンドシーケンスにより前記第１書き込み動作を前記書き込み回路に指示し、
前記第２書き込み動作を表すコマンドを含む第２コマンドシーケンスにより前記第２書き込み動作を前記書き込み回路に指示する請求項２記載のメモリシステム。
【請求項４】
前記コントローラは、
プレフィックスコマンドを含む第１コマンドシーケンスにより前記第１書き込み動作、前記第２書き込み動作の一方を前記書き込み回路に指示し、
プレフィックスコマンド無しの第２コマンドシーケンスにより前記第１書き込み動作、前記第２書き込み動作の他方を前記書き込み回路に指示する請求項２記載のメモリシステム。
【請求項５】
前記コントローラは、
第１メモリを具備し、
前記半導体メモリから取得した前記書き込みパラメータを前記第１メモリに設定する請求項１記載のメモリシステム。
【請求項６】
前記半導体メモリは複数のメモリセルを具備し、
前記コントローラは、
前記複数のメモリセルを複数のグループに分けて管理し、
第１メモリを具備し、
前記複数の各グループのうちの各グループに対応する前記書き込みパラメータを前記第１メモリに設定し、
書き込み対象グループについて前記第２書き込み動作を前記書き込み回路に指示するとともに、前記第１メモリに設定されている前記書き込み対象グループについての前記書き込みパラメータを前記書き込み回路に伝える請求項２記載のメモリシステム。
【請求項７】
前記コントローラは、前記書き込み対象グループについての前記書き込みパラメータが前記第１メモリに設定されていない場合、前記第１書き込み動作を前記書き込み回路に指示する請求項６記載のメモリシステム。
【請求項８】
前記コントローラは、前記複数のメモリセルの中の書き込み対象メモリセルが前記複数のグループ全ての所属条件を満たしていない場合、前記書き込み対象メモリセルが満たす所属条件を持つ新グループを作成する請求項６記載のメモリシステム。
【請求項９】
前記コントローラは、第１グループに所属する第１のメモリセルについての前記第１書き込み動作を前記書き込み回路に指示し、
前記第１書き込み動作により求められた前記書き込みパラメータと前記第１メモリに設定されている前記書き込みパラメータとの比較結果に応じて、前記第１のメモリセルを前記第１グループに滞留させるか、あるいは第２グループに所属を変更させる請求項６記載のメモリシステム。
【請求項１０】
前記コントローラは、第１グループに所属する第１のメモリセルが前記第１グループの所属条件を満たさなくなった場合、前記第１のメモリセルについての前記第１書き込み動作を前記書き込み回路に指示する請求項６記載のメモリシステム。
【請求項１１】
前記半導体メモリは複数のメモリセルを具備し
前記書き込み回路は、
前記第１書き込み動作においては複数のメモリセルそれぞれの前記閾値電圧の分布の上裾が前記第２基準電圧を超える時の前記プログラム電圧を前記書き込みパラメータとする請求項１記載のメモリシステム。
【請求項１２】
前記半導体メモリは複数のメモリセルを具備し
前記複数のメモリセルは複数のメモリセルブロックに分割され、
前記複数のメモリセルブロックの各メモリセルブロックは１または複数のワード線に接続され、
前記コントローラは、前記複数のワード線に接続されるメモリセルブロックの先頭のワード線の書き込みについて前記第１書き込み動作を前記書き込み回路に指示し、前記先頭のワード線以外のワード線の書き込みについて前記第２書き込み動作を前記書き込み回路に指示する請求項２記載のメモリシステム。
【請求項１３】
前記半導体メモリは複数のメモリセルを具備し
前記複数のメモリセルは複数のメモリセルブロックに分割され、
前記複数のメモリセルブロックの各メモリセルブロックは１または複数のワード線に接続され、
前記複数のワード線のそれぞれまたは第１のワード線に接続される前記複数のメモリセルは複数のストリングユニットに分割され、
前記コントローラは、前記複数のワード線のそれぞれまたは前記第１のワード線に接続される先頭のストリングユニットの書き込みについて前記第１書き込み動作を前記書き込み回路に指示し、前記先頭のストリングユニット以外のストリングユニットの書き込みについて前記第２書き込み動作を前記書き込み回路に指示する請求項２記載のメモリシステム。
【請求項１４】
前記半導体メモリは複数のメモリセルを具備し
前記複数のメモリセルは複数のメモリセルブロックに分割され、
書き換えは前記複数のメモリセルブロックのそれぞれ毎に行われ、
前記コントローラは、前記複数のメモリブロックのいずれかの書き換えの際、複数回の書き換え毎に１回前記第１書き込み動作を前記書き込み回路に指示する請求項１記載のメモリシステム。
【請求項１５】
前記半導体メモリは複数のメモリセルを具備し
前記複数のメモリセルは複数のメモリセルブロックに分割され、
書き換えは前記複数のメモリセルブロックのそれぞれ毎に行われ、
前記コントローラは、前記複数のメモリブロックの書き換えの際、毎回前記メモリセルブロックの中の一部のワード線に接続されている前記複数のメモリセルの書き込みについて前記第１書き込み動作を前記書き込み回路に指示し、
連続する２回の書き換えにおいて、前記第１書き込み動作が指示される前記複数のメモリセルが接続されるワード線は異なっている請求項１記載のメモリシステム。
【請求項１６】
前記コントローラは、書き換え動作毎に、前記メモリセルの１つのブロックの最初のワード線の最初のストリングユニットのメモリセルの書き込みについて前記第１書き込み動作を前記書き込み回路に指示し、異なる書き換え動作において前記第１書き込み動作が指示されるブロックは異なっている請求項１記載のメモリシステム。
【請求項１７】
前記半導体メモリは３次元に配列された複数のメモリセルと、前記複数のメモリセルの各層毎に設けられた複数のワード線とを具備し、
前記複数のワード線は複数のワード線グループに分割され、
前記コントローラは、前記複数のワード線グループのそれぞれに接続される前記複数のメモリセルについて１つの第１プログラム電圧を求めるように前記第１書き込み動作を前記書き込み回路に指示し、
前記第１書き込み動作が前記書き込み回路に指示されるタイミングは、前記複数のワード線グループのそれぞれが接続される前記複数のメモリセルの層の位置に応じている請求項１記載のメモリシステム。
【請求項１８】
前記コントローラは、前記メモリセルの集合毎に前記第１書き込み動作を前記書き込み回路へ指示する頻度を書き換え回数により設定し、書き換え回数の現在値が前記設定した書き換え回数になると、前記第１書き込み動作を前記書き込み回路へ指示する請求項１７記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態はメモリシステムに関する。
【背景技術】
【０００２】
近年、複数のメモリセルを備えるメモリシステムが提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５２９２０５２号公報
【特許文献２】特許第５７８４７８８号公報
【特許文献３】特許第５３６４７５０号公報
【特許文献４】特開２００２−３６７３８０号公報
【特許文献５】特表２０１０−５０３９４６号公報
【特許文献６】特表２００８−５３５１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、メモリシステムにおいて、プログラム時間を短縮することである。
【課題を解決するための手段】
【０００５】
実施形態によれば、メモリシステムは、不揮発性の半導体メモリと、前記半導体メモリを制御するコントローラと、を具備する。前記半導体メモリは、メモリセルと、前記メモリセルにプログラム電圧を印加することにより前記メモリセルにデータを書き込む書き込み回路と、を具備する。前記書き込み回路は、前記プログラム電圧を変化させながら、閾値電圧と、書き込みデータに応じた第１基準電圧とは異なる第２基準電圧とを比較することにより書き込みパラメータを求める第１書き込み動作を実行する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１実施形態に係るメモリシステムの一例のブロック図である。
【図２】図２は、第１実施形態に係るメモリシステムが備えるメモリセルアレイの一例を示す斜視図である。
【図３】図３は、第１実施形態に係るメモリシステムが備えるメモリセルアレイのブロックの一例を示す回路図である。
【図４】図４は、第１実施形態に係るメモリシステムが備えるメモリセルアレイのブロックの一例を示す断面図である。
【図５】図５は、第１実施形態に係るメモリシステムが備えるメモリセルの閾値電圧分布の一例を示す。
【図６】図６は、第１実施形態における検知書き込み、適用書き込みの一例を示す。
【図７Ａ】図７Ａは、１つの書き込みパラメータがフラッシュメモリのレジスタに設定される場合のコントローラ側とフラッシュメモリ側の書き込み動作の一例を示すフローチャートである。
【図７Ｂ】図７Ｂは、２つの書き込みパラメータがフラッシュメモリのレジスタに設定される場合のコントローラ側の書き込み動作の一例を示すフローチャートである。
【図７Ｃ】図７Ｃは、２つの書き込みパラメータがフラッシュメモリのレジスタに設定される場合のフラッシュメモリ側の書き込み動作の一例を示すフローチャートである。
【図８】図８は、書き込みパラメータがコントローラに記憶される場合の書き込み動作の一例を示すフローチャートである。
【図９】図９は、検知書き込みまたは適用書き込みを実行するかをコントローラが判断するシステムの一例のブロック図である。
【図１０】図１０は、図９のコントローラの書き込み動作の一例を示すフローチャートである。
【図１１】図１１は、図１０に示す書き込み動作を比較例と比較して示す。
【図１２】図１２は検知書き込みを指示するコマンドシーケンスの一例を示すタイミングチャートである。
【図１３】図１３は検知書き込みの際、書き込みパラメータの退避を指示するGet featureコマンドシーケンスの一例を示すタイミングチャートである。
【図１４】図１４は適用書き込みを指示するコマンドシーケンスの一例を示すタイミングチャートである。
【図１５】図１５は適用書き込みの際、書き込みパラメータの復元を指示するSet featureコマンドシーケンスの一例を示すタイミングチャートである。
【図１６】図１６はプレフィックスコマンドにより検知書き込み、適用書き込みを区別し、プレフィックスコマンドの後に書き込みパラメータの情報を付加するコマンドシーケンスの一例を示すタイミングチャートである。
【図１７】図１７は検知書き込みの際、書き込みパラメータの退避を指示するステータスリードコマンドシーケンスの一例を示すタイミングチャートである。
【図１８】図１８は３ページのデータを２段階に分けて書き込むコマンドシーケンスの一例を示す。
【図１９】図１９は図１８に示すシーケンスによる書込み後の閾値電圧分布の一例を示す。
【図２０】図２０は図１８に示す書き込み方式において実行される検知書き込みを示すコマンドシーケンスの一例を示す。
【図２１】図２１は２段階の書き込みコマンドシーケンスの他の例による書込み後の閾値電圧分布の一例を示す。
【図２２】図２２は図２１に示す方式により書き込むコマンドシーケンスの一例を示す。
【図２３】図２３は図２１に示す方式において実行される検知書き込みを示すコマンドシーケンスの一例を示す。
【図２４】図２４は、各グループの先頭のワード線の先頭のストリングユニットについて検知書き込みを実行する一例を示す。
【図２５】図２５は、複数のＰ／Ｅサイクル毎に検知書き込みを実行する一例を示す。
【図２６】図２６は、１グループの複数のワード線についての検知書き込みを複数のＰ／Ｅサイクルで分散して実行する一例を示す。
【図２７】図２７は、１グループの複数のワード線の先頭のストリングユニットについての検知書き込みを複数のＰ／Ｅサイクルで分散して実行する一例を示す。
【図２８】図２８は、図２４から図２７に示す検知書き込みに必要なテーブルの一例を示す。
【図２９】図２９は、図２４から図２７に示す検知書き込みに必要なテーブルの他の例を示す。
【図３０】図３０は、図２４から図２７に示す検知書き込みに必要な製造時の書き込み動作の一例を示すフローチャートである。
【図３１】図３１は、図２４から図２７に示す検知書き込みの一例を示すフローチャートである。
【図３２】図３２は、図２４から図２７に示す検知書き込みに関する更新スケジュールテーブルと書き込みパラメータテーブルの製造時の状態の一例を示す。
【図３３】図３３は、Ｐ／Ｅサイクルが１００の時の図３２に示す更新スケジュールテーブルと書き込みパラメータテーブルの状態の一例を示す。
【図３４】図３４は、Ｐ／Ｅサイクルが１０５の時の図３２に示す更新スケジュールテーブルと書き込みパラメータテーブルの状態の一例を示す。
【図３５】図３５は、Ｐ／Ｅサイクルが２００の時の図３２に示す更新スケジュールテーブルと書き込みパラメータテーブルの状態の一例を示す。
【図３６】図３６は、Ｐ／Ｅサイクルが２０５の時の図３２に示す更新スケジュールテーブルと書き込みパラメータテーブルの状態の一例を示す。
【図３７】図３７は、Ｐ／Ｅサイクルが３００の時の図３２に示す更新スケジュールテーブルと書き込みパラメータテーブルの状態の一例を示す。
【図３８】図３８は、Ｐ／Ｅサイクルが３０１の時の図３２に示す更新スケジュールテーブルと書き込みパラメータテーブルの状態の一例を示す。
【図３９】図３９は、Ｐ／Ｅサイクルが３０４の時の図３２に示す更新スケジュールテーブルと書き込みパラメータテーブルの状態の一例を示す。
【図４０】図４０は、２−tier構造の三次元フラッシュメモリと、グループテーブルと、更新頻度テーブルの一例を示す。
【図４１】図４１は、書き込みパラメータの値が近い要素からなるグループの構成要素がＰ／Ｅサイクルの増加に伴い変化する一例を示す。
【図４２】図４２は、グループ間の要素の移動の一例を示す。
【図４３】図４３は、グループの状態遷移の一例を示す。
【図４４】図４４は、グループの再構成に必要なテーブルの一例を示す。
【図４５】図４５は、グループの再構成に必要なテーブルの他の例を示す。
【図４６】図４６は、グループの再構成を伴う書き込み動作の一例を示すフローチャートである。
【図４７Ａ】図４７Ａは、図４６のフローチャートの第１合流ステップの一例を示すフローチャートである。
【図４７Ｂ】図４７Ｂは、図４６のフローチャートの第２合流ステップの一例を示すフローチャートである。
【図４８】図４８は、グループに所属しない要素が新たに作成されたグループに合流する場合のテーブルの状態変化の一例を示す。
【図４９】図４９は、グループに所属しない要素が既存のグループに合流する場合のテーブルの状態変化の一例を示す。
【図５０】図５０は、グループに所属する要素がグループから放出され、新たに作成されたグループに合流する場合のテーブルの状態変化の一例を示す。
【図５１】図５１は、要素が抜き取り検査され、所属していたグループに滞留する場合のテーブルの状態変化の一例を示す。
【図５２】図５２は、要素が抜き取り検査され、所属していたグループから追放され、既存の他のグループに合流する場合のテーブルの状態変化の一例を示す。
【図５３】図５３は、承継先が定義されていないグループに所属する要素のＰ／ＥサイクルがグループのＰ／Ｅサイクル範囲を逸脱してグループから放出される場合のテーブルの状態変化の一例を示す。
【図５４】図５４は、承継先が定義されているグループに所属する要素のＰ／ＥサイクルがグループのＰ／Ｅサイクル範囲を逸脱してグループから放出される場合のテーブルの状態変化の一例を示す。
【発明を実施するための形態】
【０００７】
以下、図面を参照して実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成部品の材質、形状、構造、配置等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各部分のサイズ、形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、略同一の機能及び構成を有する構成要素には同じ参照数字を付し、重複する説明は省略する場合もある。なお、以下の説明において、「接続」は直接接続のみならず、他の素子を介して接続されることも意味する。
【０００８】
［第１実施形態］  
第１実施形態に係るメモリシステムについて説明する。例として、不揮発性半導体メモリ、例えばＮＡＮＤ型フラッシュメモリを備えたメモリシステムを説明するが、他の不揮発性メモリを備えたメモリシステムでもよい。
【０００９】
［全体構成］  
本実施形態に係るメモリシステムの一例の大まかな全体構成を図１に示す。
【００１０】
メモリシステム１は、不揮発性半導体メモリとしての例えばＮＡＮＤ型フラッシュメモリ１００とコントローラ２００とを備える。ＮＡＮＤ型フラッシュメモリ１００とコントローラ２００とは、例えばそれらを同一の筐体を有する１つの装置として構成してもよい。その例としてはＳＤ（登録商標）カードのようなメモリカードや、ＳＳＤ（solid state drive）等が挙げられる。
【００１１】
ＮＡＮＤ型フラッシュメモリ１００は複数の不揮発性のメモリセルを備える。コントローラ２００は、ＮＡＮＤインターフェース（Ｉ／Ｆ）によってＮＡＮＤ型フラッシュメモリ１００に接続され、ホストインターフェース（Ｉ／Ｆ）によってホスト機器３００に接続される。ＮＡＮＤＩ／Ｆは、例えばチップイネーブル信号ＣＥ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、ライトイネーブル信号ＷＥ、リードイネーブル信号ＲＥ、データストローブ信号ＤＱＳ、Ｉ／Ｏ信号ＤＱｘ（ＤＱ０〜ＤＱ７）、レディー／ビジー信号Ｒ／Ｂを含む。Ｉ／Ｏ信号ＤＱｘはコマンド、アドレス、データ等を通信する。
【００１２】
ホストＩ／Ｆは、例えばＳＡＳ（Serial Attached SCSI）に従うインターフェースである。コントローラ２００は、ＮＡＮＤ型フラッシュメモリ１００を制御し、ホスト機器３００から受信した命令に応答してＮＡＮＤ型フラッシュメモリ１００にアクセスする。図１は、１つのＮＡＮＤ型フラッシュメモリ１００がコントローラ２００に接続される例を示すが、複数のＮＡＮＤ型フラッシュメモリ１００が１つのコントローラ２００に接続されてもよい。ホスト機器３００は、例えばデジタルカメラやパーソナルコンピュータ等である。
【００１３】
［コントローラ２００］  
コントローラ２００は、ホストＩ／Ｆコントローラ２１０、内蔵メモリ（ＲＡＭ）２２０、プロセッサ（ＣＰＵ）２３０、バッファメモリ２４０、ＮＡＮＤＩ／Ｆコントローラ２５０、及びＥＣＣ（Error Checking and Correcting）回路２６０を備えるＬＳＩ等から構成される。コントローラ２００の各機能は、プロセッサ２３０が実行するファームウェアによって実現されても良い。
【００１４】
ホストＩ／Ｆコントローラ２１０は、ホストＩ／Ｆを介してホスト機器３００と接続され、ホスト機器３００から受信した命令及びデータを、それぞれプロセッサ２３０及びバッファメモリ２４０に転送する。またプロセッサ２３０の命令に応答して、バッファメモリ２４０内のデータをホスト機器３００へ転送する。
【００１５】
プロセッサ２３０は、コントローラ２００全体の動作を制御する。例えばプロセッサ２３０は、ホスト機器３００から書き込み命令を受信した際には、それに応答して、ＮＡＮＤＩ／Ｆコントローラ２５０に対して書き込み命令を発行する。読み出しの際も同様である。またプロセッサ２３０は、ガベージコレクション、ウェアレベリング等、ＮＡＮＤ型フラッシュメモリ１００を管理するための様々な処理を実行する。
【００１６】
ＮＡＮＤＩ／Ｆコントローラ２５０は、ＮＡＮＤＩ／Ｆを介してＮＡＮＤ型フラッシュメモリ１００と接続され、ＮＡＮＤ型フラッシュメモリ１００との通信を司る。そしてＮＡＮＤＩ／Ｆコントローラ２５０は、プロセッサ２３０から受信した命令に基づき、種々の信号をＮＡＮＤ型フラッシュメモリ１００へ送信し、またＮＡＮＤ型フラッシュメモリ１００から受信する。
【００１７】
バッファメモリ２４０は、書き込みデータや読み出しデータを一時的に保持する。バッファメモリ２４０はＤＲＡＭやＳＲＡＭ等から構成してもよい。さらに、バッファメモリ２４０はコントローラ２００に内蔵せず、コントローラ２００に外付けのものでもよい。
【００１８】
内蔵メモリ２２０は、例えばＤＲＡＭやＳＲＡＭ等の半導体メモリであり、プロセッサ２３０の作業領域として使用される。内蔵メモリ２２０は、ＮＡＮＤ型フラッシュメモリ１００を管理するためのファームウェアや、各種の管理テーブル等を保持する。
【００１９】
ＥＣＣ回路２６０は、ＮＡＮＤ型フラッシュメモリ１００に記憶されるデータに関する誤り検出及び誤り訂正処理を行う。すなわち、ＥＣＣ回路２６０は、データの書き込み時には誤り訂正符号を生成し、これを書き込みデータに付与し、データの読み出し時にはこれを復号する。
【００２０】
［ＮＡＮＤ型フラッシュメモリ１００］  
ＮＡＮＤ型フラッシュメモリ（以下、単にフラッシュメモリと称する）１００は、メモリセルアレイ１１０、ロウデコーダ１２０、ドライバ回路１３０、センスアンプ１４０、アドレスレジスタ１５０、コマンドレジスタ１６０、及びシーケンサ１７０を備える。
【００２１】
メモリセルアレイ１１０は、ロウ及びカラムに対応付けられた複数の不揮発性のメモリセルを含む複数の物理ブロック（以下、単にブロックと称する）ＢＬＫを備える。図１では一例として４つのブロックＢＬＫ０〜ＢＬＫ３が図示される。メモリセルアレイ１１０は、コントローラ２００から与えられたデータを記憶する。
【００２２】
ロウデコーダ１２０は、ブロックＢＬＫ０〜ＢＬＫ３のいずれかを選択し、選択したブロックＢＬＫにおけるロウ方向を選択する。
【００２３】
ドライバ回路１３０は、選択されたブロックＢＬＫに対して、ロウデコーダ１２０を介して電圧を供給する。
【００２４】
センスアンプ１４０は、データの読み出し時には、メモリセルアレイ１１０をセンスし、必要な演算を行い、データＤＡＴをコントローラ２００に出力する。センスアンプ１４０は、データの書き込み時には、コントローラ２００から受信した書き込みデータＤＡＴを、メモリセルアレイ１１０に転送する。
【００２５】
アドレスレジスタ１５０は、コントローラ２００から受信したアドレスＡＤＤを保持する。コマンドレジスタ１６０は、コントローラ２００から受信したコマンドＣＭＤを保持する。
【００２６】
シーケンサ１７０は、コマンドレジスタ１６０に保持されたコマンドＣＭＤに基づき、フラッシュメモリ１００全体の動作を制御する。具体的には、シーケンサ１７０は、ロウデコーダ１２０、ドライバ１３０、センスアンプ１４０等に所定の電圧を印加して、書き込み、読出し、消去等を行う。シーケンサ１７０には、書き込みパラメータや種々のテーブルを記憶するレジスタ１７０Ａが接続されていてもよい。書き込みパラメータの一例はプログラム電圧の初期値Initial Vpgmである。なお、書き込みパラメータや種々のテーブルをフラッシュメモリ１００の外部、例えばコントローラ２００に格納するようにしてもよい。その場合は、レジスタ１７０Ａは省略可能である。
【００２７】
［メモリセルアレイ１１０］
図２はメモリセルアレイ１１０の一例の斜視図を示す。図２は、説明の便宜上、２つのブロックＢＬＫ０、ＢＬＫ１と、４つのワード線ＷＬ０〜ＷＬ３を示し、他のブロックとワード線は図示省略する。データの消去動作は、例えばブロック毎に行われる。なお、ブロックを一般的に示す場合は、ブロックＢＬＫと記す。
【００２８】
各ブロックＢＬＫは、ソース拡散層４２、ソース拡散層４２の上方に形成された導電層としてのソース側セレクトゲート線ＳＧＳ、ＷＬ０〜ＷＬ３、ドレイン側セレクトゲート線ＳＧＤ、及び活性層ＡＡなどを有し、これらにより複数のＮＡＮＤストリングユニットが構成される。
【００２９】
図示せぬ半導体基板内に形成されるソース拡散層４２は、例えば同一プレーン内の全ブロックＢＬＫに共通に設けられる。ソース拡散層４２は、コンタクトプラグＰＳＬを介して、ソース線ＳＬ・Ｍ１に接続される。
【００３０】
ソース拡散層４２上には、例えば、導電性ポリシリコンを材料とする３つ以上の導電層が図示せぬ層間絶縁膜を介して積層される。この導電層は、層間絶縁膜を介して、例えば６層積層される。各導電膜は、最下層に位置するソース側セレクトゲート線（第２セレクトゲート線）ＳＧＳと、最上層に位置するドレイン側セレクトゲート線（第１セレクトゲート線）ＳＧＤ０〜ＳＧＤ５、及びソース側セレクトゲート線ＳＧＳとドレイン側セレクトゲート線ＳＧＤの間に配置されたワード線ＷＬ０〜ＷＬ３を構成する。なお、図２では、第１セレクトゲート線ＳＧＤ０〜ＳＧＤ４は他の部材に隠され、図示されない。
【００３１】
最上層のドレイン側セレクトゲート線ＳＧＤ０〜ＳＧＤ５を除く残りの５つの導電層は、１つのブロックＢＬＫ内でそれぞれプレート状に形成される。また、６つの導電層のｘ方向（半導体基板の表面と平行方向）の端部は、各々の導電層にコンタクトを接触可能とするため、階段状に形成される。例えばワード線ＷＬ０は、ソース側セレクトゲート線ＳＧＳの上方に形成されるが、ソース側セレクトゲート線ＳＧＳにコンタクトを接触可能とするため、ソース側セレクトゲート線ＳＧＳの端部の上方には形成されない。即ち、ワード線ＷＬ０は、ソース側セレクトゲート線ＳＧＳよりもｘ方向の幅が短く形成される。同様に、ワード線ＷＬ１は、ワード線ＷＬ２よりもｘ方向の幅が短く形成され、ワード線ＷＬ２は、ワード線ＷＬ３よりもｘ方向の幅が短く形成され、ワード線ＷＬ３は、ドレイン側セレクトゲート線ＳＧＤよりもｘ方向の幅が短く形成される。
【００３２】
最上層のドレイン側セレクトゲート線ＳＧＤ０〜ＳＧＤ５は、それぞれ棒状に形成される。ドレイン側セレクトゲート線ＳＧＤ０〜ＳＧＤ５は、ｙ方向に間隔をおいてｘ方向に延びる。
【００３３】
複数の活性層（アクティブエリア）ＡＡは、柱状に形成され、ｚ方向（半導体基板の表面に対して垂直方向）にソース拡散層４２からソース側セレクトゲート線ＳＧＳ、ワード線ＷＬ０〜ＷＬ３、及びドレイン側セレクトゲート線ＳＧＤ０〜ＳＧＤ５をそれぞれ貫通するように形成される。複数の活性層ＡＡの上端は、ｘ方向に間隔をおいてｙ方向に延びる複数のビット線ＢＬ０〜ＢＬ（Ｌ―１）にそれぞれ接続される。
【００３４】
ソース側セレクトゲート線ＳＧＳは、コンタクトプラグＰＳＧＳを介して、ｘ方向に延びる引き出し線ＳＧＳ・Ｍ１に接続され、ワード線ＷＬ０〜ＷＬ３は、それぞれ、コンタクトプラグＰＷＬ０〜ＰＷＬ３を介して、ｘ方向に延びる引き出し線ＷＬ０・Ｍ１〜ＷＬ３・Ｍ１に接続される。
【００３５】
ドレイン側セレクトゲート線ＳＧＤ０〜ＳＧＤ５は、それぞれ、コンタクトプラグＰSGD0〜ＰSGD5を介して、ｘ方向に延びる引き出し線ＳＧＤ０・Ｍ１〜ＳＧＤ５・Ｍ１に接続される。
【００３６】
複数のビット線ＢＬ０〜ＢＬ（Ｌ−１）及び引き出し線ＳＧＳ・Ｍ１，ＷＬ０・Ｍ１，ＷＬ１・Ｍ１〜ＷＬ３・Ｍ１，ＳＧＤ０・Ｍ１〜ＳＧＤ５・Ｍ１は、例えば金属配線により構成される。
【００３７】
［ブロックＢＬＫ］
ブロックＢＬＫの構成の一例を図３に示す。ブロックＢＬＫは例えば４つのストリングユニットＳＵ０〜ＳＵ３を含む。ストリングユニットを一般的に示す場合は、ストリングユニットＳＵと記す。各々のストリングユニットＳＵは、複数のＮＡＮＤストリング１０を含む。
【００３８】
ＮＡＮＤストリング１０の各々は、例えば８個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ７）及び選択トランジスタＳＴ１、ＳＴ２を含んでいる。メモリセルトランジスタＭＴは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。メモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に直列接続される。
【００３９】
ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ１のゲートは、それぞれセレクトゲート線ＳＧＤ０〜ＳＧＤ３に接続される。これに対して、ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、例えばセレクトゲート線ＳＧＳに共通接続される。ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、ストリングユニット毎に異なるセレクトゲート線ＳＧＳ０〜ＳＧＳ３に接続されてもよい。同一のブロックＢＬＫ内にあるメモリセルトランジスタＭＴ０〜ＭＴ７の制御ゲートは、それぞれワード線ＷＬ０〜ＷＬ７に共通接続される。
【００４０】
メモリセルアレイ１１０内において同一列にあるＮＡＮＤストリング１０の選択トランジスタＳＴ１のドレインは、ビット線ＢＬ（ＢＬ０〜ＢＬ（Ｌ−１）、但しＬは自然数）に共通接続される。すなわちビット線ＢＬは、複数のブロックＢＬＫ間でＮＡＮＤストリング１０を共通に接続する。更に、複数の選択トランジスタＳＴ２のソースは、ソース線ＳＬに共通に接続される。
【００４１】
つまりストリングユニットＳＵは、異なるビット線ＢＬに接続され、且つ同一のセレクトゲート線ＳＧＤに接続されたＮＡＮＤストリング１０を複数含む。ブロックＢＬＫは、ワード線ＷＬを共通にする複数のストリングユニットＳＵを複数含む。メモリセルアレイ１１０は、ビット線ＢＬを共通にする複数のブロックＢＬＫを複数含む。
【００４２】
図４は、ブロックＢＬＫの一例の一部領域の断面図である。ｐ型ウェル領域２０上に、複数のＮＡＮＤストリング１０が形成される。すなわち、ウェル領域２０上には、セレクトゲート線ＳＧＳとして機能する例えば４層の配線層２７、ワード線ＷＬ０〜ＷＬ７として機能する８層の配線層２３、及びセレクトゲート線ＳＧＤとして機能する例えば４層の配線層２５が、順次積層される。積層された配線層間には、図示せぬ絶縁膜が形成される。
【００４３】
配線層２５、２３、２７を貫通して下端がウェル領域２０に達する複数のピラー状の導電体３１が形成される。導電体３１を形成するために、先ず、配線層２５、２３、２７を貫通して下端がウェル領域２０に達する複数のメモリホールがエッチングにより形成される。図４では、メモリホールの径は上層領域でも下層領域でも均一であり、導電体３１は径が一様なピラー状とするが、実際には、多層膜における上層領域は下層領域よりも多くエッチングされるので、上層領域のメモリホールの径は下層領域のメモリホールの径よりも大きい。すなわち、メモリホールの径は、上層領域から下層領域に向かって大径から小径に連続的に変化している。この径の変化は、メモリホールのエッチング距離（図４の上下方向の距離）が長くなればなるほど、顕著となる。メモリホールの内側にブロック絶縁膜２８、電荷蓄積層（絶縁膜）２９、ゲート絶縁膜３０、導電体３１が順次形成され、これらによってメモリセルトランジスタＭＴ、並びに選択トランジスタＳＴ１及びＳＴ２が形成される。導電体３１は、ＮＡＮＤストリング１０の電流経路として機能し、各トランジスタのチャネルが形成される領域となる。導電体３１の上端は、ビット線ＢＬとして機能する金属配線層３２に接続される。このように、メモリホールの径が上層領域と下層領域とで異なるので、三次元構造のフラッシュメモリにおいて、深さ方向に異なるレイヤーに配置されたメモリセルトランジスタ同士では、それぞれのメモリセルトランジスタの特性は異なる。
【００４４】
ウェル領域２０の表面領域内には、ｎ＋型不純物拡散層３３が形成される。拡散層３３上にはコンタクトプラグ３５が形成される。コンタクトプラグ３５は、ソース線ＳＬとして機能する金属配線層３６に接続される。更に、ウェル領域２０の表面領域内には、ｐ＋型不純物拡散層３４が形成される。拡散層３４上にはコンタクトプラグ３７が形成される。コンタクトプラグ３７は、ウェル配線ＣＰＷＥＬＬとして機能する金属配線層３８に接続される。ウェル配線ＣＰＷＥＬＬは、ウェル領域２０を介して導電体３１に電位を印加するための配線である。
【００４５】
以上の構成が、図４の紙面に直交する方向（奥行き方向）に複数配列されており、奥行き方向に並ぶ複数のＮＡＮＤストリング１０の集合によってストリングユニットＳＵが形成される。
【００４６】
１つのメモリセルトランジスタＭＴは１ビットあるいは複数ビットのデータを保持するように構成可能である。ここでは、１つのメモリセルトランジスタＭＴは例えば２ビットデータを保持可能である。２ビットデータを、下位ビットからそれぞれlowerビット及びupperビットと呼ぶ。同一のストリングユニットＳＵにおいて、ゲート電極が同一のワード線ＷＬに接続されたメモリセルトランジスタの保持するlowerビットの集合をlower（下位）ページと呼び、upperビットの集合をupper（上位）ページと呼ぶ。つまり、１本のワード線ＷＬには２ページが割り当てられ、８本のワード線ＷＬを含むブロックＢＬＫは１６ページ分の容量を有する。言い換えると、「ページ」とは、ゲート電極が同一ワード線に接続されたメモリセルトランジスタによって形成されるメモリ空間の一部であると定義できる。データの書き込み及び読み出しは、ページ単位もしくはストリングユニット単位で行われる。もし、メモリセルトランジスタが３ビットデータを保持可能であるとすると、３ビットデータを、下位ビットからそれぞれlowerビット、middleビット及びupperビットと呼ぶ。同一のストリングユニットＳＵにおいて、ゲート電極が同一のワード線ＷＬに接続されたメモリセルトランジスタの保持するlowerビットの集合をlower（下位）ページと呼び、middleビットの集合をmiddle（中位）ページと呼び、upperビットの集合をupper（上位）ページと呼ぶ。
【００４７】
図５は、メモリセルトランジスタＭＴの取り得る閾値電圧分布、及び読み出し時に用いる電圧を示すグラフである。
【００４８】
前述したように、メモリセルトランジスタＭＴは閾値電圧分布に応じて２ビットのデータを保持出来る。２ビットで表現されるデータを、閾値電圧分布の低いものから順に“Ｅｒ”ステート、“Ａ”ステート、“Ｂ”ステート、及び“Ｃ”ステートと呼ぶ。
【００４９】
閾値電圧分布が電圧ＶＡ未満のメモリセルトランジスタＭＴはデータ消去状態に相当する“Ｅｒ”ステートのデータを保持するとみなす。閾値電圧分布が電圧ＶＡ以上であり且つＶＢ（＞ＶＡ）未満であるメモリセルトランジスタＭＴは“Ａ”ステートデータを保持するとみなす。閾値電圧分布が電圧ＶＢ以上であり且つＶＣ（＞ＶＢ）未満であるメモリセルトランジスタＭＴは“Ｂ”ステートを保持するとみなす。閾値電圧分布が電圧ＶＣ以上であり且つＶＲＥＡＤ（＞ＶＣ）未満であるメモリセルトランジスタＭＴは“Ｃ”ステートのデータを保持するとみなす。２ビットデータのうちで“Ｃ”ステートが、閾値電圧分布の最も高いデータに相当する。
【００５０】
前述のlowerページは、読み出し電圧として例えば電圧ＶＡ及びＶＣを用いて読み出される。電圧ＶＡ及びＶＣが印加されてデータが読み出される動作を、それぞれ読み出し動作ＡＲ及びＣＲと呼ぶ。すなわち、読み出し動作ＡＲにより、保持データが“Ｅｒ”ステートであるか、または“Ａ”〜“Ｃ”ステートのいずれであるかが特定される。更に読み出し動作ＣＲにより、保持データが“Ｃ”ステートであるか、または“Ｅｒ”〜“Ｂ”ステートのいずれであるかが特定される。またupperページは、電圧ＶＢを用いて読み出される。これを読み出し動作ＢＲと呼ぶ。読み出し動作ＢＲにより、保持データが“Ｅｒ”〜“Ａ”ステートと、“Ｂ”〜“Ｃ”ステートのいずれであるかが特定される。
【００５１】
データの消去は、ブロックＢＬＫ単位、またはブロックＢＬＫよりも小さい単位で行うことが出来る。
【００５２】
更に、メモリセルアレイ１１０の構成についてはその他の構成であってもよい。
【００５３】
［フラッシュメモリの書き込み］  
書き込み動作は、メモリセルトランジスタＭＴのゲート電極にプログラム電圧を印加することによりメモリセルトランジスタＭＴの電荷蓄積層に電荷を注入し、メモリセルトランジスタの閾値電圧を上昇させるプログラム電圧印加動作（プログラム動作とも称する）と、当該プログラム電圧が印加されたことによるメモリセルトランジスタの閾値電圧の変化を確認するプログラムベリファイ動作とを含む。プログラムベリファイは、メモリセルトランジスタの閾値が所定の閾値に達したか否かを判定するものである。プログラムベリファイに失敗する（メモリセルトランジスタの閾値が所定の閾値に達していない）と、プログラム電圧が一定電圧ΔＶ増加され、プログラム動作が再び実行される。プログラムベリファイに成功するまでプログラム動作は繰り返される。なお、増加される電圧は一定電圧に限らず、任意に変化する電圧でもよい。このようにプログラム電圧を増加しながら書き込みを行うことをステップアップ書き込みとも称する。
【００５４】
プログラム電圧の初期値、電圧増加分等の書き込みパラメータをどの値に設定するかによってプログラムベリファイに成功するまでの時間、あるいはプログラム特性は変化する。そのため、実施形態では、複数のメモリセルトランジスタの集合からなるグループが定義され、このグループの中の１つのワード線またはそのワード線の１つのストリングユニットに接続されるメモリセルトランジスタ（これらのメモリセルトランジスタをセルユニットとも称する）に対してプログラム動作が実行されつつ、目標とするプログラム特性を実現する適切な書き込みパラメータを検知する検知書き込みが実行される。適切な書き込みパラメータが検知されると、それが記憶され、他のメモリセルトランジスタに対して、あるいは同一のメモリセルトランジスタの次回以降の書き込みにおいて、記憶されている書き込みパラメータを用いる適用書き込みが実行される。このように、検知書き込みを時々実行することにより、適切な書き込みパラメータを動的にチューニングすることができる。適用書き込みに要する時間は、検知書き込みに要する時間よりも短い。書き込みパラメータはプログラム電圧の初期値以外にも増加電圧ΔＶ等も含むが、以下の説明では書き込みパラメータはプログラム電圧の初期値とする。
【００５５】
［検知書き込みと適用書き込み］  
複数ビットのデータを保持可能なメモリセルトランジスタに対する書き込み方式は、１つのプログラムコマンドによりメモリセルトランジスタに複数ビットのデータを一括して書き込む方式と、複数のプログラムコマンドによりメモリセルトランジスタに複数ビットのデータを多段階に分けて書き込む方式とがある。先ず、１つのプログラムコマンドによりメモリセルトランジスタに複数ビットのデータを一括して書き込む方式について説明する。
【００５６】
図６は検知書き込み、適用書き込みの様子を示す。図６の上側のパルス波形はプログラム電圧の変化を示し、下側の波形はプログラム電圧が印加された時のメモリセルトランジスタの閾値電圧分布を示す。ワード線にプログラム電圧の初期値Initial Vpgmが印加され、メモリセルトランジスタの閾値電圧分布を判定するプログラムベリファイが行われ、ベリファイ失敗の場合、プログラム電圧が一定電圧ΔＶだけ増加される。メモリセルトランジスタの閾値電圧分布の下裾（最も低い閾値電圧）が書き込みデータに応じたプログラムベリファイ基準電圧を超えると、プログラムベリファイ成功となり、プログラム動作が終了する。なお、プログラムベリファイ成功となるためには、プログラム対象のメモリセルであって、閾値電圧がプログラムベリファイ基準電圧未満であると判定されたメモリセルの個数が閾値XX個以下（０でなくてもよい）であるという条件がある。図５に示す“Ａ”ステートに関するベリファイを説明する。検知書き込みでは、通常のプログラムベリファイ以外に、プログラムベリファイ基準電圧ＶＡとは異なる基準電圧を用いてスマートベリファイも行われる。以下の説明では、スマートベリファイ基準電圧はプログラムベリファイ基準電圧ＶＡより低い場合を説明する。メモリセルトランジスタの閾値電圧分布の上裾（最も高い閾値電圧）がスマートベリファイ基準電圧を超えるとスマートベリファイ検知完了とされる。なお、検知完了となるためには、プログラム対象のメモリセルであって、閾値電圧がスマートベリファイ基準電圧を超えたと判定されたメモリセルの個数が閾値YY個以上になったという条件がある。なお、検知書き込みは、メモリセルトランジスタの閾値電圧分布の下裾（最も低い閾値電圧）がプログラムベリファイ基準電圧ＶＡを超えるまで行われる。他のステートに関するベリファイはプログラムベリファイ基準電圧が違うだけで、実質的に同じ動作である。検知書き込みは、メモリセルトランジスタの閾値電圧分布の上裾がスマートベリファイ基準電圧を初めて超えた時のプログラム電圧を検知する。検知されたプログラム電圧（以下、書き込みパラメータとも称する）を適用書き込みの際のプログラム電圧の初期値とすると、適用書き込みのプログラム時間を短縮することができる。検知書き込みは、通常よりも低いプログラム電圧の初期値Initial Vpgmを使用し、徐々にプログラム電圧を昇圧することによって、所望の性能に対応する書き込みパラメータを検知する。そのため、適用書き込みよりも、プログラムベリファイが完了するまでのループ数が多く、また、ループ内でスマートベリファイ用のベリファイ動作を行っているため、時間がかかる。
【００５７】
検知書き込みにより求められた書き込みパラメータがフラッシュメモリ１００のレジスタ１７０Ａに設定又はコントローラ２００のＲＡＭ２２０内の書き込みパラメータテーブルに保存される。書き込みパラメータは特性が近いメモリセルトランジスタのグループに対しては共通に適用可能であるが、特性が大きく異なるメモリセルアレイ全体に対しては共通に適用可能ではないことがある。そのため、メモリセルアレイ全体については多数の書き込みパラメータが存在し得る。ここでは、限られた数、例えば１つの書き込みパラメータがフラッシュメモリ１００のレジスタ１７０Ａに設定される場合の書き込み動作の一例を図７Ａのフローチャートを参照して説明し、２つの書き込みパラメータがフラッシュメモリ１００のレジスタ１７０Ａに設定される場合の書き込み動作の一例を図７Ｂ、図７Ｃのフローチャートを参照して説明する。レジスタ１７０Ａはそれぞれ１つの書き込みパラメータが設定されるレジスタ１とレジスタ２を備える。
【００５８】
レジスタ１７０Ａには書き込みパラメータとともにその書き込みパラメータがメモリセルトランジスタのどのグループに関するものかを示す情報も設定されている。同じ書き込みパラメータが適用可能なメモリセルトランジスタのグループはメモリセルトランジスタの種々の集合が考えられるが、図７Ａ、図７Ｂ、図７Ｃの例ではブロックであるとする。データの書き込みはホスト機器３００からのユーザデータの書き込み（以下、ホスト書き込みと称することもある）と、ガベージコレクションによるデータの書き込み（以下、ＧＣ書き込みと称することもある）を含み、コントローラ２００は書き込み先のブロックがホスト書き込み先ブロックかＧＣ書き込み先ブロックかを把握している。
【００５９】
図７Ａ（ａ）はコントローラ２００側の書き込み動作の一例を示し、図７Ａ（ｂ）はフラッシュメモリ１００側の書き込み動作の一例を示す。コントローラ２００は、図７Ａ（ａ）に示すように、ステップＳ２で書き込み先として今回の書き込み先のブロックアドレスを指定しつつ、フラッシュメモリ１００に書き込みを指示する。
【００６０】
コントローラ２００から書き込みが指示されると、フラッシュメモリ１００は、図７Ａ（ｂ）に示すように、ステップＳ４で今回の書き込み先ブロックアドレスは前回のブロックアドレス（レジスタ１７０Ａに設定されている書き込みパラメータに関するブロックアドレス）と同じであるか否か判定する。判定結果がイエスの場合（今回の書き込み先ブロックアドレスは前回と同じである場合）、フラッシュメモリ１００は、ステップＳ５でレジスタ１７０Ａに書き込みパラメータが設定されているか否か判定する。判定結果がイエスの場合（書き込みパラメータがレジスタ１７０Ａに設定されている場合）、フラッシュメモリ１００は、ステップＳ６でレジスタ１７０Ａに設定されている書き込みパラメータを使って適用書き込みを行う。レジスタ１７０Ａには当該ブロックの書き込みパラメータであるスマートベリファイ検知完了時のプログラム電圧が書き込みパラメータとして設定されており、その書き込みパラメータをプログラム電圧の初期値として使って適用書き込みを実行すると、プログラム時間を短縮することができる。
【００６１】
ステップＳ４の判定結果がノーの場合（今回の書き込み先ブロックアドレスは前回と同じでない場合）、あるいはステップＳ５の判定結果がノーの場合（書き込みパラメータがレジスタ１７０Ａに設定されていない場合）、フラッシュメモリ１００は、ステップＳ７で検知書き込みを行う。フラッシュメモリ１００は、検知された書き込みパラメータと書き込みブロックアドレスをステップＳ８でレジスタ１７０Ａに設定する。
【００６２】
図７Ｂは２つの書き込みパラメータがフラッシュメモリ１００のレジスタ１７０Ａに設定される場合のコントローラ２００側の書き込み動作の一例を示し、図７Ｃはフラッシュメモリ１００側の書き込み動作の一例を示す。レジスタ１７０Ａは第１のレジスタ１と、第２のレジスタ２を備える。ここでは、ホスト書き込み先ブロックが１個あり、ＧＣ書き込み先ブロックが１個あり、さらにその他の書き込み先ブロックが１個あることを想定する。そして、ホスト書き込み先ブロックとＧＣ書き込み先ブロックについては書き込み頻度が高いため、検知書き込みを実行する頻度を下げたい要求があるとする。
【００６３】
コントローラ２００は、図７Ｂに示すように、ステップＳ１２で今回の書き込み先はホスト書き込み先か否かを判定する。判定結果がイエスの場合（今回の書き込み先はホスト書き込み先である場合）、コントローラ２００は、ステップＳ１４でＢ１ｈプリフィックスコマンドを付けずに書き込み先として今回の書き込み先（ホスト書き込み先）のブロックアドレスを指定しつつ、フラッシュメモリ１００に書込みを指示する。Ｂ１ｈプリフィックスコマンドはレジスタ１、レジスタ２を選択するものであり、Ｂ１ｈプリフィックスコマンドがあるとレジスタ２が使用され、Ｂ１ｈプリフィックスコマンドがないとレジスタ１が使用されるとする。
【００６４】
ステップＳ１２の判定結果がノーの場合（今回の書き込み先はホスト書き込み先ではない場合）、コントローラ２００は、ステップＳ１６で今回の書き込み先はＧＣ書き込み先か否かを判定する。判定結果がイエスの場合（今回の書き込み先はＧＣ書き込み先である場合）、コントローラ２００は、ステップＳ１８でＢ１ｈプリフィックスコマンドを付けて書き込み先として今回の書き込み先（ＧＣ書き込み先）のブロックアドレスを指定しつつ、フラッシュメモリ１００に書込みを指示する。
【００６５】
ステップＳ１６の判定結果がノーの場合（今回の書き込み先はＧＣ書き込み先ではない場合）、コントローラ２００は、ステップＳ２０でＢ１ｈプリフィックスコマンドを付けて書き込み先として今回の書き込み先（その他の書き込み先）のブロックアドレスを指定しつつ、フラッシュメモリ１００に書込みを指示する。なお、今回の書き込み先がホスト書き込み先でもないし、ＧＣ書き込み先でもない場合、すなわちステップＳ２０でＢ１ｈプリフィックスコマンドを付けないで書き込みを指示してもよい。Ｂ１ｈプリフィックスコマンドを付ける／付けないは、ホスト書き込みとＧＣ書き込みのいずれを犠牲にするかにより決めてもよい。例えば、より書き込み頻度が低い方を犠牲にするという判断をしてもよい。あるいは、ステップＳ２０でスマートベリファイを無効化するコマンドを付けてスマートベリファイを用いなくてもよい。
【００６６】
コントローラ２００から書き込みが指示されると、フラッシュメモリ１００は、図７Ｃに示すように、ステップＳ２１でＢ１ｈプリフィックスコマンドの指定があるか否か判定する。判定結果がノーの場合（Ｂ１ｈプリフィックスコマンドの指定がない場合）、フラッシュメモリ１００は、ステップＳ２２Ａで今回の書き込み先ブロックアドレスは前回のブロックアドレス（レジスタ１に設定されている書き込みパラメータに関するブロックアドレス）と同じであるか否か判定する。判定結果がイエスの場合（今回の書き込み先ブロックアドレスは前回と同じである場合）、フラッシュメモリ１００は、ステップＳ２３Ａでレジスタ１に書き込みパラメータが設定されているか否か判定する。判定結果がイエスの場合（書き込みパラメータがレジスタ１に設定されている場合）、フラッシュメモリ１００は、ステップＳ２４Ａでレジスタ１に設定されている書き込みパラメータを使って適用書き込みを行う。レジスタ１には当該ブロックの書き込みパラメータであるスマートベリファイ検知完了時のプログラム電圧が書き込みパラメータとして設定されており、その書き込みパラメータをプログラム電圧の初期値として使って適用書き込みを実行すると、プログラム時間を短縮することができる。
【００６７】
ステップＳ２２Ａの判定結果がノーの場合（今回の書き込み先ブロックアドレスは前回と同じでない場合）、あるいはステップＳ２３Ａの判定結果がノーの場合（書き込みパラメータがレジスタ１に設定されていない場合）、フラッシュメモリ１００は、ステップＳ２６Ａで検知書き込みを行う。フラッシュメモリ１００は、検知された書き込みパラメータと書き込みブロックアドレスをステップＳ２７Ａでレジスタ１に設定する。
【００６８】
ステップＳ２１の判定結果がイエスの場合（Ｂ１ｈプリフィックスコマンドの指定がある場合）、フラッシュメモリ１００は、ステップＳ２２Ｂで今回の書き込み先ブロックアドレスは前回のブロックアドレス（レジスタ２に設定されている書き込みパラメータに関するブロックアドレス）と同じであるか否か判定する。判定結果がイエスの場合（今回の書き込み先ブロックアドレスは前回と同じである場合）、フラッシュメモリ１００は、ステップＳ２３Ｂでレジスタ２に書き込みパラメータが設定されているか否か判定する。判定結果がイエスの場合（書き込みパラメータがレジスタ２に設定されている場合）、フラッシュメモリ１００は、ステップＳ２４Ｂでレジスタ２に設定されている書き込みパラメータを使って適用書き込みを行う。レジスタ２には当該ブロックの書き込みパラメータであるスマートベリファイ検知完了時のプログラム電圧が書き込みパラメータとして設定されており、その書き込みパラメータをプログラム電圧の初期値として使って適用書き込みを実行すると、プログラム時間を短縮することができる。
【００６９】
ステップＳ２２Ｂの判定結果がノーの場合（今回の書き込み先ブロックアドレスは前回と同じでない場合）、あるいはステップＳ２３Ｂの判定結果がノーの場合（書き込みパラメータがレジスタ２に設定されていない場合）、フラッシュメモリ１００は、ステップＳ２６Ｂで検知書き込みを行う。フラッシュメモリ１００は、検知された書き込みパラメータと書き込みブロックアドレスをステップＳ２７Ｂでレジスタ２に設定する。
【００７０】
図７ＣはＢ１ｈプリフィックスコマンドを用いて書き込みパラメータを設定するレジスタを指定したが、Ｂ１ｈプリフィックスコマンドを用いない場合等でレジスタ１７０Ａに新たな書き込みパラメータを設定できない場合、たとえば最も古く検知書き込みが実行されたブロックの書き込みパラメータに新たな検知結果が上書き設定されうる。そのため、同時に使用する書き込み先ブロックが、設定できる書き込みパラメータの数よりも多く、かつ頻繁に切り替わる場合、レジスタ１７０Ａに設定されていた書き込みパラメータが上書きされることで、適用書き込みを実行することができなくなることがあり、検知書き込みを再度実行しなければならない。もし、レジスタ１７０Ａが１つの書き込みパラメータしか設定できない場合であっても、ユーザデータをブロックＢＬＫ０に書き込む際、最初のワード線について検知書き込みを行い、書き込みパラメータをレジスタ１７０Ａに設定し、ブロックＢＬＫ０の他のワード線について、レジスタ１７０Ａに設定されている書き込みパラメータを使って適用書き込みを実行することができる。ただし、この後、例えばガベージコレクションによりデータを他のブロック、例えばブロックＢＬＫ１に書き込む際、ブロックＢＬＫ１に対する検知書き込みが必要になる。さらに、この後、ユーザデータを再びブロックＢＬＫ０に書き込む際にも、再度検知書き込みが必要になる。検知書き込みの実行により平均プログラム時間が増大する。
【００７１】
レジスタ１７０Ａに多数の書き込みパラメータを設定できる場合でも、フラッシュメモリ１００単体（例えば、シーケンサ１７０）でスマートベリファイを制御することが想定される。フラッシュメモリ１００の周辺回路であるシーケンサ１７０は、面積、コストの関係で大型化しづらく複雑な制御をすることが難しい。例えば、シーケンサ１７０は、図７Ｂ、図７Ｃのような判定を行うことが困難である場合がある。そのため、書き込み先ブロックが変更される際、レジスタ１７０Ａに２つのブロックの書き込みパラメータが設定されており、設定されている書き込みパラメータが変更先のブロックに適用できる場合でも、検知書き込みを再度実行してしまうことがある。
【００７２】
一方、書き込みパラメータがコントローラ２００のＲＡＭ２２０の書き込みパラメータテーブルに保存される場合の書き込み動作の一例を図８のフローチャートを参照して説明する。ＲＡＭ２２０は全ブロックの書き込みパラメータを書き込みパラメータテーブルとして保存できる。
【００７３】
データの書き込み（ホスト機器３００から指示によるユーザデータの書き込みと、ガベージコレクションによるデータの書き込みを含む）の際、コントローラ２００は、ステップＳ３２で書き込み先物理アドレスに基づいて書き込み先ブロックが前回の書き込みに対して変更されているか否かを判定する。ノーの場合（書き込み先ブロックが変更されない場合）、コントローラ２００は、ステップＳ３４でレジスタ１７０Ａに設定されている書き込みパラメータをプログラム電圧の初期値として用いる適用書き込みの実行をフラッシュメモリ１００に指示する。ステップＳ３２の判定がイエスの場合（書き込み先ブロックが変更されている場合）、コントローラ２００は、ステップＳ３８で変更後の書き込み先ブロックの書き込みパラメータが書き込みパラメータテーブルに保存されているか否かを判定する。
【００７４】
ステップＳ３８の判定がイエスの場合（変更後の書き込み先ブロックの書き込みパラメータが書き込みパラメータテーブルに保存されている場合）、コントローラ２００は、ステップＳ３９で書き込みパラメータテーブルから変更後の書き込み先ブロックの書き込みパラメータを取得し、取得した書き込みパラメータを、ステップＳ４０で例えばSet featureコマンドを使ってフラッシュメモリ１００のレジスタ１７０Ａに設定する。その後、コントローラ２００は、ステップＳ３４でレジスタ１７０Ａに設定されている書き込みパラメータをプログラム電圧の初期値として用いる適用書き込みの実行をフラッシュメモリ１００に指示する。
【００７５】
ステップＳ３８の判定がノーの場合（変更後の書き込み先ブロックの書き込みパラメータが書き込みパラメータテーブルに保存されていない場合）、コントローラ２００は、ステップＳ４２でフラッシュメモリ１００に検知書き込みの実行を指示する。検知書き込みが実行され、メモリセルトランジスタの閾値電圧分布の上裾がスマートベリファイ基準電圧を超えた時のプログラム電圧が書き込みパラメータとしてレジスタ１７０Ａに設定された後、コントローラ２００は、ステップＳ４３で例えばGet featureコマンドを使ってフラッシュメモリ１００のレジスタ１７０Ａから書き込みパラメータを取得し、取得した書き込みパラメータをステップＳ４４でＲＡＭ２２０の書き込みパラメータテーブルに保存する。
【００７６】
このように、コントローラ２００がブロックの最初の書き込み時に検知書き込みを実行し、その結果求められた書き込みパラメータをブロック毎に書き込みパラメータテーブルに保存する。そして、コントローラ２００は、同じブロックのそれ以降の書き込み時あるいは他のブロックの書き込み時、書き込みパラメータテーブルを参照して当該ブロックの書き込みパラメータを取得して、それをプログラム電圧の初期値として用いる適用書き込みを実行することにより、平均プログラム時間が短縮される。ただし、書き込み先ブロックが頻繁に変わらなければ、コントローラ２００のＲＡＭ２２０内の書き込みパラメータテーブルに書き込みパラメータを保存せずに、フラッシュメモリ１００のレジスタ１７０Ａに書き込みパラメータを設定しても、問題は生じない。
【００７７】
［コントローラ２００］  
コントローラ２００は、フラッシュメモリ１００のレジスタ１７０Ａに設定されている書き込みパラメータをＲＡＭ２２０の書き込みパラメータテーブルに保存する（これを退避とも称する）とともに、その反対に、ＲＡＭ２２０の書き込みパラメータテーブルに保存されている書き込みパラメータをフラッシュメモリ１００のレジスタ１７０Ａに設定する（これを復元とも称する）。図８はコントローラ２００が書き込みパラメータをSet Featureコマンド、Get Featureコマンドを使って退避、復元する例を示す。なお、図１０は、コントローラ２００がメモリセルトランジスタの特性の変化を考慮して検知書き込みを行う場合の書き込みパラメータの退避、復元の例を示す。
【００７８】
図８では、書き込みパラメータテーブルに書き込みパラメータが保存されている場合、検知書き込みは実行されないが、図１０では書き込みパラメータテーブルに書き込みパラメータが保存されていても、メモリセルトランジスタの特性の変化を考慮して検知書き込みを実行する例を説明する。
【００７９】
図９はこの一例のシステム全体のブロック図である。図９は図１の詳細を示すものであるが、図１と同じものは図示省略する。フラッシュメモリ１００のメモリセル１１０は複数（ｎ個）のブロックＢＬＫ０〜ＢＬＫ（ｎ−１）を含む。メモリセルトランジスタのグループについての検知書き込みにより求められた書き込みパラメータＶ０はレジスタ１７０Ａに設定される。フラッシュメモリ１００の他の部分の構成は図１と同じである。
【００８０】
コントローラ２００のＲＡＭ２２０は種々のテーブルを含む。一例として、ＲＡＭ２２０は、書き込みパラメータテーブル５０２、グループテーブル５０４、書き換え回数（現在値）テーブル５０６、前回検知時書き換え回数テーブル５０８を含む。ＲＡＭ２２０は種々のデータ、例えば検知書き込みの閾値（Ｎｕｍ）５１０を記憶する。書き込みパラメータテーブル５０２は所望の書き込み性能に関するプログラム電圧の初期値（書き込みパラメータ）が近いと予想できるグループ毎に書き込みパラメータを保存する。グループの例はブロックあるいはワード線あるいはストリングユニットの集合である。所望の書き込み性能に関するプログラム電圧の初期値は、メモリホールの径の違いにより、１ブロック内の全ワード線に接続されるメモリセルトランジスタについて同じとは限らず、ワード線毎に異なる可能性がある。そのため、ワード線の集合によりグループが定義されることもある。ただし、図９では説明の便宜上、所望の書き込み性能に関するプログラム電圧の初期値は１ブロック内の全ワード線に接続されるメモリセルトランジスタについて同じと仮定し、グループはブロックの集合で定義する。所望の書き込み性能に関するプログラム電圧の初期値は１ワード線の全ストリングユニットに接続されるメモリセルトランジスタについて同じとは限らず、ストリングユニット毎に異なる場合は、グループはブロックとワード線とストリングユニットの組み合わせの集合で定義される。
【００８１】
グループテーブル５０４は、グループの定義を示すために、各グループに含まれるブロックのインデックスを保存する。例えば、グループテーブル５０４は、グループ０はブロック０からなり、グループ１はブロック１，２からなること等を定義する情報を保存する。もし、ブロックのワード線毎に所望の書き込み性能に関するプログラム電圧の初期値が異なる場合は、グループテーブル５０４は、ブロックとワード線の組み合わせでグループを定義すればよい。例えば、グループテーブル５０４は、グループ０はブロック０のワード線０からなり、グループ１はブロック０のワード線１からなり、グループ２はブロック０のワード線２〜３１からなること等を定義する情報を保存してもよい。ブロック間の特性ばらつきが小さければ、ワード線の集合ごとにグループを定義し、異なるブロック間の同一ワード線の集合ではグループを同一としてもよい。
【００８２】
メモリセルトランジスタの特性は書き換え回数（以下、Ｐ／Ｅサイクルとも称する）が増えるにつれて変化する可能性があるので、所望の書き込み性能に関するプログラム電圧の初期値が近いと予想できるグループの構成は書き換え回数が増えるにつれて変化する可能性がある。例えば、疲弊が進むにつれて、所望の書き込み性能に関するプログラム電圧の初期値は低くなる。これに反して、過剰に高いプログラム電圧を適用すると、目標とする閾値電圧範囲を超えてプログラムされてしなうオーバープログラムという状態に陥る。当該セルから期待するデータが読めないほか、同一ブロック内の同一ストリングのほかのワードラインに接続されたメモリセルのデータが読めなくなる可能性がある。そのため、グループの定義は固定的ではなく、書き換え回数の増加に伴い見直されてもよい。グループ定義の見直しは後述する。
【００８３】
書き換え回数テーブル５０６は、ブロック毎のＰ／Ｅサイクルの回数（現在値）を記憶する。前回検知時書き換え回数テーブル５０８は、前回検知書き込みを実行した時点でのブロック毎のＰ／Ｅサイクルの回数を記憶する。あるブロックのメモリセルトランジスタの所望の書き込み性能に関するプログラム電圧の初期値はブロックの書き換え回数の増加に応じて変化するので、現在の書き換え回数と前回検知書き込みを実行した時の書き換え回数との差が閾値回数以上の場合、検知書き込みを再度行うことが好ましいと判断される。閾値５１０はこの判断のための書き換え回数の閾値Ｎｕｍである。
【００８４】
図１０は、図９に示すように構成されるコントローラ２００によるデータ書き込みの一例を示すフローチャートである。データの書き込みの際（ホスト機器３００からの指示によるユーザデータの書き込みと、ガベージコレクションによるデータの書き込みを含む）、コントローラ２００は、ステップＳ６２で書き込み先物理アドレスから書き込み先ブロックを求め、グループテーブル５０４を参照して書き込み先ブロックが所属するグループを特定する。コントローラ２００は、このグループについての書き込みを検知書き込みにより実行するか、または適用書き込みにより実行するかを判定する。検知書き込みを実行する条件は、当該グループの書き込みパラメータが書き込みパラメータテーブル５０２に保存されていないこと、あるいは当該グループの書き込みパラメータが書き込みパラメータテーブル５０２に保存されていてかつ前回の検知書き込みを実行してから閾値回数以上の書き換え動作が実行されたことである。これ以外の場合は、適用書き込みを実行する。
【００８５】
そのため、コントローラ２００は、ステップＳ６４で書き込みパラメータテーブル５０２に書き込み先グループの書き込みパラメータが保存されているか否かを判定する。ノーの場合（書き込みパラメータテーブル５０２に書き込み先グループの書き込みパラメータが保存されていない場合）、コントローラ２００は、ステップＳ６６でフラッシュメモリ１００に検知書き込みの実行を指示する。フラッシュメモリ１００は図６に示すような検知書き込みを行い、メモリセルトランジスタの閾値電圧分布の上裾がスマートベリファイ基準電圧を超えた時のプログラム電圧を書き込みパラメータとしてレジスタ１７０Ａに設定する。検知書き込みの終了後、コントローラ２００は、ステップＳ６７で、例えばGet featureコマンドを使ってフラッシュメモリ１００のレジスタ１７０Ａから書き込みパラメータを取得し、取得した書き込みパラメータをステップＳ６８で書き込みパラメータテーブル５０２に保存する。すなわち、書き込みパラメータがレジスタ１７０Ａからコントローラ２００の書き込みパラメータテーブル５０２に退避される。
【００８６】
ステップＳ６４の判定がイエスの場合（書き込みパラメータテーブル５０２に書き込み先グループの書き込みパラメータが保存されている場合）、コントローラ２００は、ステップＳ７０で書換え回数テーブル５０６と前回検知時書換え回数テーブル５０８と閾値（Ｎｕｍ）５１０とを参照して、前回の検知書き込みを実行してから閾値以上の書き換え動作が実行されたか否かを判定する。具体的には、（Ｐ／Ｅサイクル（現在値）−前回検知時のＰ／Ｅサイクル）≧閾値Ｎｕｍか否かが判定される。イエスの場合（前回の検知書き込みを実行してから閾値以上の書き換え動作が実行された場合）、メモリセルトランジスタの特性が変化している可能性があるので、コントローラ２００は、ステップＳ６６でフラッシュメモリ１００に検知書き込みの実行を指示する。ステップＳ７０の判定がノーの場合（前回の検知書き込みを実行してから閾値以上の書き換え動作が実行されていない場合）、メモリセルトランジスタの特性が変化していないと判断できるので、コントローラ２００は、ステップＳ７１で、パラメータテーブル５０２を参照して書き込みパラメータを取得し、取得した書き込みパラメータをステップＳ７２で例えばSet featureコマンドを使ってフラッシュメモリ１００のレジスタ１７０Ａに設定する。すなわち、書き込みパラメータがコントローラ２００の書き込みパラメータテーブル５０２からレジスタ１７０Ａに復元される。コントローラ２００は、ステップＳ７４でフラッシュメモリ１００に適用書き込みの実行を指示する。
【００８７】
なお、各種テーブルはＲＡＭ２２０に保存されているので、メモリシステムの電源がオフされると、テーブルの内容は消去される。そのため、メモリシステムの電源投入時には、全てのグループに対して一度検知書き込みが実行される。この検知書き込みの実行を不要とするためには、メモリシステムの電源オフ時までに、ＲＡＭ２２０内のテーブルをフラッシュメモリ１００のメモリセルアレイ１１０の一部に書き込んでもよい。あるいは、コントローラ２００内に不揮発性のメモリを設け、メモリシステムの電源オフ時までに、ＲＡＭ２２０内のテーブルを不揮発性のメモリに書き込んでもよい。
【００８８】
図１１は比較例による書き込みと図８に示す手順による書き込みとを対比して示す。“書き込みシーケンス”の右側に記載の“Ｕ書き込み”はホスト装置３００の指示によるユーザデータの書き込みを意味し、“Ｃ書き込み”はガベージコレクションによるデータ書き込みを意味する。図１１の上段に示す比較例は、コントローラ２００に書き込みパラメータテーブルが設けられず、１つの書き込みパラメータがレジスタ１７０Ａに設定され、コントローラ２００が検知書き込みを制御せずにフラッシュメモリ１００単独で検知書き込みを制御する場合である。
【００８９】
比較例では、ユーザデータの書き込み先がグループ１の場合、グループ１の先頭のワード線について検知書き込みが実行され、求められた書き込みパラメータＶ１はレジスタ１７０Ａに設定される。グループ１の他のワード線については適用書き込みが実行される。この後、ガベージコレクションが実行され、ガベージコレクションデータの書き込み先がグループ２の場合、グループ２の先頭のワード線について検知書き込みが実行され、求められた書き込みパラメータＶ２がレジスタ１７０Ａに設定される。
【００９０】
ガベージコレクションが終了し、ユーザデータのグループ１への書き込みを再度行う場合、レジスタ１７０Ａの書き込みパラメータはガベージコレクションによりグループ２の書き込みパラメータＶ２とされているので、グループ１の最初の書き込みの際は検知書き込みが実行される。求められた書き込みパラメータＶ１はレジスタ１７０Ａに設定される。グループ１の他のワード線については適用書き込みが実行される。この後、ガベージコレクションが実行され、ガベージコレクションデータの書き込み先がグループ２の場合、再び検知書き込みが実行され、求められた書き込みパラメータＶ２がレジスタ１７０Ａに設定される。
【００９１】
このように比較例では書き込み先グループが変更されると、必ず検知書き込みが実行される。
【００９２】
一方、図１１の下段に示す図８に示す手順による書き込みでは、グループ１について一度検知書き込みが実行され、書き込みパラメータＶ１がレジスタ１７０Ａに設定されると、コントローラ２００は、書き込みパラメータＶ１をフラッシュメモリ１００のレジスタ１７０Ａからコントローラ２００の書き込みパラメータテーブル５０２に退避させる。この後、ガベージコレクションが実行され、ガベージコレクションデータの書き込み先がグループ２になると、再び検知書き込みが実行され、求められた書き込みパラメータＶ２がレジスタ１７０Ａに設定される。コントローラ２００は、書き込みパラメータＶ２をフラッシュメモリ１００のレジスタ１７０Ａからコントローラ２００の書き込みパラメータテーブル５０２に退避させる。
【００９３】
この後、ガベージコレクションが終了し、ユーザデータのグループ１への書き込みを再度行う場合、レジスタ１７０Ａの書き込みパラメータはガベージコレクションによりグループ２の書き込みパラメータＶ２とされている。しかし、グループ１の書き込みパラメータＶ１はコントローラ２００の書き込みパラメータテーブル５０２に保存されているので、コントローラ２００は、書き込みパラメータＶ１をコントローラ２００の書き込みパラメータテーブル５０２からフラッシュメモリ１００のレジスタ１７０Ａに復元させる。ユーザデータのグループ１への書き込みは、レジスタ１７０Ａに復元されたグループ１の書き込みパラメータＶ１をプログラム電圧の初期値として用いる適用書き込みとして実行される。ホスト装置３００の指示によるユーザデータの書き込みが終了し、再びガベージコレクションによるデータ書き込みをするときも同様に、書き込みパラメータを復元させ、適用書き込みとして実行される。
【００９４】
このため、図８に示す手順による書き込みでは、検知書き込みが実行される頻度が比較例に比べて低い。このようにコントローラ２００が明示的に，検知／適用書き込み、書き込みパラメータの退避／復元を指示することにより、検知書き込みの頻度を減らし，平均プログラム実行時間を削減することができる。さらに、図１０に示す手順による書き込みでは、前回検知書き込みを実行してから閾値回数以上書き換え動作が実行されると、検知書き込みが再度実行される。このため、メモリセルトランジスタの特性の変化を考慮すると、信頼性が向上する。
【００９５】
［コマンドシーケンス例］  
図８に示す手順による書き込みで使用されるコマンドシーケンスの一例を説明する。上述したように、複数ビットのデータを保持可能なメモリセルトランジスタに対する書き込み方式は複数ある。
【００９６】
図１２は、図１０のステップＳ６６でコントローラ２００がフラッシュメモリ１００に検知書き込みを指示するためのページプログラムコマンドシーケンスの一例のタイミングチャートである。各信号はハイアクティブ（正論理）信号とローアクティブ（負論理）信号のいずれか一方により表す場合と、正論理信号と負論理信号の相補信号により表す場合がある。ローアクティブの信号は図１２等では信号を表す記号にオーバーライン（又は上線）を付して表現するが、本明細書では、説明の便宜上、記号の後にｎを付して表現する。
【００９７】
チップイネーブル信号ＣＥｎが活性化されるともに、コマンドラッチイネーブル信号ＣＬＥが活性化され、アドレスラッチイネーブル信号ＡＬＥが非活性化され、相補信号であるリードイネーブル信号ＲＥｎ／ＲＥが非活性化される。ライトイネーブル信号ＷＥｎが活性化され、Ｉ／Ｏ信号ＤＱｘにより“８ｘｈ”が検知書き込みコマンドとしてフラッシュメモリ１００に取り込まれる。Ｉ／Ｏ信号は複数ビットの信号、例えばＤＱ０〜ＤＱ７からなるが、複数ビットを纏めてＩ／Ｏ信号ＤＱｘと称する。コマンドラッチイネーブル信号ＣＬＥが非活性化され、アドレスラッチイネーブル信号ＡＬＥが活性化され、ライトイネーブル信号ＷＥｎの活性化に同期して、Ｉ／Ｏ信号ＤＱｘにより書き込み先のカラムアドレス(Column Address)とロウアドレス(Row Address)がフラッシュメモリ１００に取り込まれる。この後、アドレスラッチイネーブル信号ＡＬＥが非活性化され、データストローブ信号ＤＱＳ／ＤＱＳｎのトグルに同期して書き込みデータＤ０，Ｄ１，…ＤＮがフラッシュメモリ１００に取り込まれる。
【００９８】
データの伝送後、Ｉ／Ｏ信号ＤＱｘによりチップ内部プログラム開始コマンド“１０ｈ”がフラッシュメモリ１００に伝送され、書き込みが開始される。書き込み期間ｔPROGはレディ／ビジー信号（Ｒ／Ｂｎ）はビジーとされる。
【００９９】
その後、Ｉ／Ｏ信号ＤＱｘによりステータスリードコマンド“７０ｈ”がフラッシュメモリ１００に伝送され、例えばＩ／Ｏ信号ＤＱ０によりプログラムが成功したか失敗したかが判定される。Ｉ／Ｏ信号ＤＱ０＝０ならば、成功、Ｉ／Ｏ信号ＤＱ０＝１ならば、失敗と判断できる。
【０１００】
以下の図でも同様であるが、コマンドを示す数字はあくまでも一例であり、この数字に何ら限定されない。
【０１０１】
図１３は、図１０のステップＳ６７でコントローラ２００がフラッシュメモリ１００のレジスタ１７０Ａからコントローラ２００のＲＡＭ２２０へ書き込みパラメータを退避させるためのGet featureコマンドシーケンスの一例のタイミングチャートである。
【０１０２】
チップイネーブル信号ＣＥｎが活性化されるともに、コマンドラッチイネーブル信号ＣＬＥとアドレスラッチイネーブル信号ＡＬＥとライトイネーブル信号ＷＥｎとリードイネーブル信号ＲＥｎ／ＲＥが非活性化される。この後、コマンドラッチイネーブル信号ＣＬＥとライトイネーブル信号ＷＥｎが活性化され、Ｉ／Ｏ信号ＤＱｘにより“ＥＥｈ”が伝送される。ライトイネーブル信号ＷＥの立ち上がりに同期して、Ｉ／Ｏ信号ＤＱｘの“ＥＥｈ”がコマンドとしてフラッシュメモリ１００に取り込まれる。コマンド“ＥＥｈ”はGet featureシーケンスを開始するコマンドを示す。Get featureシーケンスはレジスタ１７０Ａのアドレス“ＸＸｈ”からデータＲ−Ｂ０、Ｒ−Ｂ１、Ｒ−Ｂ２、Ｒ−Ｂ３を読み出すものである。アドレス“ＸＸｈ”のレジスタ１７０Ａには書き込みパラメータが記憶されているとする。
【０１０３】
コマンドラッチイネーブル信号ＣＬＥが非活性化され、アドレスラッチイネーブル信号ＡＬＥとライトイネーブル信号ＷＥｎが活性化され、Ｉ／Ｏ信号ＤＱｘにより“ＸＸｈ”が伝送される。ライトイネーブル信号ＷＥｎの立ち上がりに同期して、Ｉ／Ｏ信号ＤＱｘの“ＸＸｈ”がアドレスとしてフラッシュメモリ１００に取り込まれる。その後、アドレスラッチイネーブル信号ＡＬＥが非活性化され、Ｉ／Ｏ信号ＤＱｘによりＲ−Ｂ０、Ｒ−Ｂ１、Ｒ−Ｂ２、Ｒ−Ｂ３がコントローラ２００に伝送される。コントローラ２００がリードイネーブル信号ＲＥｎ／ＲＥをトグルすることに応じてフラッシュメモリ１００がデータストローブ信号ＤＳＱ／ＤＳＱｎをトグルさせ、データストローブ信号ＤＳＱ／ＤＳＱｎのトグルに同期してＩ／Ｏ信号ＤＱｘのＲ−Ｂ０、Ｒ−Ｂ１、Ｒ−Ｂ２、Ｒ−Ｂ３がデータとして取得される。取得されたデータは、書き込みパラメータテーブル５０２に保存される。以上により、Get featureシーケンスによって、レジスタ１７０Ａの書き込みパラメータがコントローラ２００に退避される。
【０１０４】
図１４は、図１０のステップＳ７４でコントローラ２００がフラッシュメモリ１００に適用書き込みを指示するためのページプログラムコマンドシーケンスの一例のタイミングチャートである。図１４のタイミングチャートは、図１２に示す検知書き込みのタイミングチャートとは、検知書き込みコマンド“８ｘｈ”が適用書き込みコマンド“８ｙｈ”に変わった点が異なり、他は同じである。
【０１０５】
図１５は、図１０のステップＳ７２でコントローラ２００がコントローラ２００のＲＡＭ２２０からフラッシュメモリ１００のレジスタ１７０Ａへ書き込みパラメータを復元させるためのSet featureコマンドシーケンスの一例のタイミングチャートである。
【０１０６】
チップイネーブル信号ＣＥｎが活性化されるともに、コマンドラッチイネーブル信号ＣＬＥとアドレスラッチイネーブル信号ＡＬＥとライトイネーブル信号ＷＥｎとリードイネーブル信号ＲＥｎ／ＲＥが非活性化される。この後、コマンドラッチイネーブル信号ＣＬＥとライトイネーブル信号ＷＥｎが活性化され、Ｉ／Ｏ信号ＤＱｘにより“ＥＦｈ”が伝送される。ライトイネーブル信号ＷＥｎの立ち上がりに同期して、Ｉ／Ｏ信号ＤＱｘの“ＥＦｈ”がコマンドとしてフラッシュメモリ１００に取り込まれる。コマンド“ＥＦｈ”はSet featureシーケンスを開始するコマンドを示す。Set featureシーケンスはフラッシュメモリ１００のアドレス“ＸＸｈ”のレジスタ１７０Ａに書き込みパラメータを表すデータＷ−Ｂ０、Ｗ−Ｂ１、Ｗ−Ｂ２、Ｗ−Ｂ３を書き込むものである。
【０１０７】
コマンドラッチイネーブル信号ＣＬＥが非活性化され、アドレスラッチイネーブル信号ＡＬＥとライトイネーブル信号ＷＥｎが活性化され、Ｉ／Ｏ信号ＤＱｘにより“ＸＸｈ”が伝送される。ライトイネーブル信号ＷＥｎの立ち上がりに同期して、Ｉ／Ｏ信号ＤＱｘの“ＸＸｈ”がアドレスとしてフラッシュメモリ１００に取り込まれる。その後、アドレスラッチイネーブル信号ＡＬＥが非活性化され、Ｉ／Ｏ信号ＤＱｘにより書き込みパラメータを表すデータＷ−Ｂ０、Ｗ−Ｂ１、Ｗ−Ｂ２、Ｗ−Ｂ３がフラッシュメモリに伝送される。データストローブ信号ＤＳＱ／ＤＳＱｎのトグルに同期してＩ／Ｏ信号ＤＱｘのＷ−Ｂ０、Ｗ−Ｂ１、Ｗ−Ｂ２、Ｗ−Ｂ３がデータとしてフラッシュメモリ１００に取り込まれ、レジスタ１０７Ａのアドレス“ＸＸｈ”にデータＷ−Ｂ０、Ｗ−Ｂ１、Ｗ−Ｂ２、Ｗ−Ｂ３が書き込まれる。以上により、Set featureシーケンスによって、レジスタ１０７Ａに書き込みパラメータが復元される。
【０１０８】
図１２、図１４は、それぞれ別のコマンドによる検知書き込みシーケンスと適用書き込みシーケンスを示したが、図１６に示すようにプレフィックスコマンドを利用した共通のシーケンスを検知書き込みと適用書き込みとで使ってもよい。図１２、図１４はメモリセルトランジスタに書き込まれる複数ビットのうちの１ビットの書き込みを示し、複数ビットの分だけ図１２、図１４のシーケンスが繰り返されてもよい。複数ビットが３ビットとすると、図１２、図１４のシーケンスが３回繰り返される。あるいは、複数ビットの分だけ図１２、図１４のシーケンスが繰り返されるのではなく、任意の１シーケンスだけを図１２、図１４のシーケンスとし、残りの２シーケンスを通常のプログラムシーケンスとするというように、１コマンドだけで区別してもよい。図１６は３ビットの一括書き込みの場合のＩ／Ｏ信号ＤＱｘとレディ／ビジー信号（Ｒ／Ｂ）の状態を示す。１行目、２行目、３行目がそれぞれ下位ビット、中位ビット、上位ビットのデータの書き込みに対応する。時間軸関係は１行目のＡ端が２行目のＡ端に続き、２行目のＢ端が３行目のＢ端に続くものである。
【０１０９】
図１６に示すプレフィックスコマンド“ＹＹｈ”は例えば検知書き込みを示し、図示していない別のプレフィックスコマンド、例えば“ＹＺｈ”は適用書き込みを示す。このように、プレフィックスコマンドの種類により検知書き込みか適用書き込みかを示すことができる。ただし、プレフィックスコマンドの種類に限らず、プレフィックスコマンドの有無により検知書き込みか適用書き込みかを示すようにしてもよい。Ｉ／Ｏ信号ＤＱｘによりプレフィックスコマンド“ＹＹｈ”の次に下位ページを示すコマンド“０１ｈ”が供給され、その後、書き込みコマンド“８０ｈ”が供給される。書き込みコマンド“８０ｈ”は通常の書き込みコマンドと同じであってもよい。書き込みコマンド“８０ｈ”は図１２では“８ｘｈ”に対応し、図１４では“８ｙｈ”に対応する。図１２、図１４に示したシーケンスと同様に書き込みコマンド“８０ｈ”に続いてカラムアドレスＣＡ１，ＣＡ２、ローアドレスＲＡ１，ＲＡ２，ＲＡ３が供給される。ローアドレスＲＡ３に後続するデータ入力は図１２、図１４の書き込みデータＤ０，Ｄ１，…ＤＮに対応する。
【０１１０】
下位ページのデータ入力後のコマンド“１Ａｈ”は書き込みデータをバッファ（例えば、コントローラ２００内のＲＡＭ２２０）に書き込ませるコマンドである。書き込み中はレディ／ビジー信号（Ｒ／Ｂ）はビジーとされる。
【０１１１】
その後、下位ページの場合と同様に中位ページ、上位ページの書き込みデータが供給される。上位ページのデータ入力後のコマンド“１０ｈ”はチップ内部プログラム開始コマンドであり、これにより一括書き込みが開始される。書き込み期間ｔPROGはレディ／ビジー信号（Ｒ／Ｂ）はビジーとされる。
【０１１２】
図１７は、Get featureコマンドの代わりにステータスリードコマンドを利用して、コントローラ２００がフラッシュメモリ１００のレジスタ１７０Ａからコントローラ２００のＲＡＭ２２０へ書き込みパラメータを退避させるためのコマンドシーケンスの一例のタイミングチャートである。図１７に示すタイミングチャートは、図１３に示すGet featureコマンドシーケンスのタイミングチャートにおいてGet featureコマンド“ＥＥｈ”の代わりにステータスリードコマンド“７０ｈ／７８ｈ／Ｆ１ｈ／Ｆ２ｈ”が伝送され、アドレス“ＸＸｈ”が伝送されない点が異なる。さらに、図１７に示すタイミングチャートでは、図１３に示す読み出しデータの代わりにステータスが出力される。ステータスの一例は、８ビットのステータスデータであり、その中の一部のビットを使って書き込みパラメータを表す。
【０１１３】
コマンドシーケンスはこれらに限らず、同様なコマンドシーケンスを用いてもよい。
【０１１４】
次に、メモリセルトランジスタに複数ビットのデータを複数のプログラムコマンドにより多段階に分けて書き込む方式のコマンドシーケンスを説明する。多段階に分けて書き込む方式では、ワード線を往復しながら、段階的にメモリセルトランジスタにデータが書き込まれる。多段階に分けて書き込む方式で検知書き込みを行う例は、例えば(i)書き込み段階毎に検知書き込みを行い、書き込み段階毎にそれぞれの書き込みパラメータを使って適用書き込みを行なう例と、(ii)１段目の最初のグループの書き込みで検知書き込みを行い、書き込みパラメータを保存する。そして、１段目の残りのグループの書き込みは、検知書き込みで検知した書き込みパラメータを使って適用書き込みを行い、他の段に対しては、個別の検知書き込みは行わず、１段目の書き込みで検知した書き込みパラメータを補正したパラメータを使って適用書き込みを行う例がある。
【０１１５】
多段階に分ける方式は、段階毎に書き込むページが異なる方式と、段階毎に精度が異なる方式を含む。図１８に３ページのデータを２段階に分けて書き込む場合の書き込みのコマンドシーケンスを示す。図１８（ａ）は下位ページのデータを書き込む１段目のシーケンスを、図１８（ｂ）は中位と上位の２ページのデータを一括して書き込む２段目のシーケンスを示す。１段目書き込みの書き込み時間をｔPROG１、２段目書き込みの書き込み時間をｔPROG２と示す。図１６に示す一括書き込みのシーケンスと似ているが、プレフィックスコマンドがない点と、下位ページのデータだけの書き込みも行われる点が異なる。ワード線０に１段目書き込みで下位ページのデータを書込み、ワード線１に１段目書き込みで下位ページのデータを書込み、ワード線０に２段目書き込みで中位・上位ページのデータを書込み、ワード線３に１段目書き込みで下位ページのデータを書込み、…のようにワード線を往復しながら、データが書き込まれる。
【０１１６】
このような２段階の書き込みにおいても、検知書き込みの結果を用いて適用書き込みを行うことによりプログラム時間を短縮することができる。図１９（ａ）は図１８（ａ）に示す１段目書き込み後の閾値電圧分布を示す。１段目書き込みでは下位ページのデータだけが書き込まれる。２段目書き込みではその他のページのデータも含めて書き込まれる。図１９（ｂ）は図１８（ｂ）に示す２段目の書き込み後の閾値電圧分布を示す。１段目書き込みと２段目書き込みでは閾値電圧分布が異なる。１段階書き込みと２段階書き込みともスマートベリファイ電圧は通常のプログラムベリファイ電圧とは異なり、例えば少し低い電圧である。
【０１１７】
図２０（ａ）、（ｂ）は１段目と２段目の検知書き込みのコマンドシーケンスを示す。図１８（ａ）、（ｂ）とは異なり、コマンド“０１ｈ”、“０２ｈ”の前に検知書き込みを示すプレフィックスコマンド“ＹＹｈ”が入力される。検知結果は、図１３に示したようなGet Featureシーケンスによりレジスタ１７０Ａから取得し、書き込みパラメータテーブル５０２に格納される。
【０１１８】
図２１は別の多段階書き込みの例を示す。図１８、図２０の例では１段目書き込みと２段目書き込みとで書き込むページが異なるが、図２１の例では書き込みの精度が異なる。１段目書き込みでは図５に示すような規定のベリファイ電圧よりも低いベリファイ電圧が用いられ、図２１（ａ）に示すように重なりが大きく見かけ上１つの閾値電圧分布が得らえる。２段目書き込みでは規定のベリファイ電圧が用いられ、図２１（ｂ）に示すように閾値電圧分布の重なりは無い。
【０１１９】
図２２（ａ）は図２１のような２段階書き込みの１段目書き込みシーケンスを、図２２（ｂ）は２段目書き込みのシーケンスを示す。図２２（ａ）、（ｂ）それぞれは図１６のシーケンスと似ているが、検知書き込みを示すプレフックすコマンド“ＹＹｈ”が無い点が異なる。図２２の例では、プログラムを表すコマンド“８０ｈ”が１段目書き込みと２段目書き込みで共通であるが、段階毎に異なるコマンドを用いてもよい。また、書き込みデータ(Data input)は１段目書き込みと２段目書き込みで同じデータがホスト装置３００から入力される。
【０１２０】
図２３（ａ）、（ｂ）は図２２（ａ）、（ｂ）に示す２段階書き込みで検知書き込みを行う場合の１段目書き込みシーケンスと、２段目書き込みのシーケンスそれぞれを示す。図２３（ａ）、（ｂ）は図２２（ａ）、（ｂ）に示すシーケンスに対して検知書き込みを示すプレフックすコマンド“ＹＹｈ”が追加されている点が異なる。なお、図１６の例と同様に、プレフィックスコマンドの種類により検知書き込みか適用書き込みかを区別するに限らず、プレフィックスコマンドの有無により検知書き込みか適用書き込みかを区別するようにしてもよい。図２３の検知書き込みの場合は、１段目書き込みの書き込み時間ｔPROG１は２段目書き込みの書き込み時間ｔPROG２より短い。さらに、プレフィックスコマンドで検知書き込みと適用書き込みを区別する場合、適用書き込みを示すプレフィックスコマンドの後に検知書込みで検知された書き込みパラメータの情報を付加して、フラッシュメモリに書込みパラメータを伝えてもよい。
【０１２１】
［検知書き込みの頻度低減］  
上述したように検知書き込みは適用書き込みよりも時間がかかるので、検知書き込みを実行する頻度を低く抑えると平均プログラム時間が短縮できる。ただし、メモリセルトランジスタの特性は、書き換えるたびに緩やかに変化するので、適切な頻度で検知書込みを実行したい要求がある。例えば書き換え回数が所定回数に達すると、検知書き込みを実行して、所望の書き込み性能に関するプログラム電圧の初期値を検知したい要求もある。近接するワード線に接続されているメモリセルトランジスタの特性は類似していることが知られている。さらに、書き換え回数（Ｐ／Ｅサイクル）が近いメモリセルトランジスタの特性も類似していることが知られている。このようなメモリセルトランジスタの特性の類似性を考慮して、コントローラ２００が適宜なタイミングで検知書き込みの実行を指示することにより、検知書き込みの実行頻度を低くする（あるいは実行回数を少なくする）対策例を説明する。
【０１２２】
図２４は第１対策例の原理を示す。第１対策例では、ブロック内で特性が近いと思われる近接するワード線がグループ化される。ここでは、ワード線ＷＬは６４層である場合を想定する。例えば、ワード線ＷＬ０がグループＧｒ０に、ワード線ＷＬ１がグループＧｒ１に、ワード線ＷＬ２〜ＷＬ３１がグループＧｒ２に、ワード線ＷＬ３２〜ＷＬ６１がグループＧｒ３に、ワード線ＷＬ６２がグループＧｒ４に、ワード線ＷＬ６３がグループＧｒ５に分類される。なお、このグループ分けは１ブロックについてであり、他のブロックも同様に図２４に示すようにグループ分けされている。ただし、グループの数、グループに所属するワード線の数はブロック毎に異なりうる。１ブロックが４ストリングユニットからなり、各ワード線についてストリングユニットＳｔｒ０からストリングユニットＳｔｒ３の順に書き込まれる場合、各グループで最初に書き込まれる先頭ワード線の最初のストリングユニットＳｔｒ０に接続されるメモリセルトランジスタについて検知書き込みが実行され、グループ内の残りのメモリセルトランジスタについては適用書き込みが実行される。図２４の数字は書き込みの順番を示し、斜線で示される順番の書き込みは検知書き込みに対応し、斜線が付いていない数字は適用書き込みに対応する。
【０１２３】
比較例として、各グループで最初に書き込まれる先頭ワード線（グループ０ではＷＬ０、グループ１ではＷＬ１、グループ２ではＷＬ２、グループ３ではＷＬ３２、グループ４ではＷＬ６２、グループ５ではＷＬ６３）に接続される全てのストリングユニットのメモリセルトランジスタについて検知書き込みを実行する例を考える。図２４に示す例では、比較例に比べて、検知書き込みの回数はワード線に接続されるストリングユニットの数の逆数に減り、平均プログラム時間が短縮される。
【０１２４】
第１対策例では各Ｐ／Ｅサイクル時に検知書き込みが行われるので、検知頻度がある程度多い。第１対策例よりも検知頻度を下げる第２対策例を説明する。第１対策例は検知書き込みを実行するワード線とストリングユニットを間引いたことと等価である。第２対策例は検知書き込みを実行するＰ／Ｅサイクルに関するタイミングを間引いたことと等価である。図２４に示す第１対策例では、ワード線がグループ化されているが、図２５に示す第２対策例では、ワード線はグループ化されていなくてもよい。図２５はワード線がグループ化されず、各ワード線毎に同じ書き込みパラメータを使う場合の第２対策例の原理を示す。グループ化されない場合は、各ワード線の先頭のストリングユニットについて検知書き込みが実行され、各ワード線の先頭以外のストリングユニットについては適用書き込みが実行される。
【０１２５】
第２対策例では、Ｐ／Ｅサイクル（書き換え）毎に検知書き込みが実行されるのではなく、図２５に示すように、数回のＰ／Ｅサイクル毎に検知書き込みが実行される。フラッシュメモリ１００は、書き換えにより特性が変化することが知られているが、ある範囲の書き換え回数では特性がさほど変化しないことも知られている。そのため、ある検知書き込みの検知結果は、それ以降数回以上の書き換えが行われるまで、他の適用書き込みのプログラム電圧の初期値として使うことができる。第２対策例によっても、検知書き込みの実行回数が減るので、平均プログラム時間が短縮できる。
【０１２６】
なお、図２５に示す第２対策例では、各ワード線のストリングユニット０について検知書き込みが実行されるが、第２対策例でグループ化する場合は、図２４の場合と同様に、各グループで最初に書き込まれる先頭ワード線の最初のストリングユニット０について検知書き込みが実行される。すなわち、図２５のＰ／ＥサイクルＮとＰ／ＥサイクルＮ＋ａの際、図２４に示すような検知書き込みが実行される。
【０１２７】
図２５に示す第２対策例では、ａ回の書き換え毎に各ワード線の先頭のストリングユニットについて検知書き込みが実行されるので、検知書き込みが実行されるＰ／Ｅサイクルでは平均プログラム時間が長く、それ以外のＰ／Ｅサイクルでは平均プログラム時間が短く、Ｐ／Ｅサイクル間で平均プログラム時間が変動する。図２６を参照してこの変動を均一化する第３対策例を説明する。図２５に示す第２対策例では、１回のＰ／Ｅサイクルで全ワード線のストリングユニット０について検知書き込みが実行されるが、図２６に示す第３対策例では、１回のＰ／Ｅサイクルで検知書き込みが実行されるワード線を減らして、各Ｐ／Ｅサイクルで一部（図示の例では１本）のワード線のストリングユニット０についての検知書き込みが実行される。例えば、Ｐ／ＥサイクルＮ，Ｎ＋ｂでワード線ＷＬ０のストリングユニット０についての検知書き込みが実行され、Ｐ／ＥサイクルＮ＋１，Ｎ＋１＋ｂでワード線ＷＬ１のストリングユニット０についての検知書き込みが実行され、Ｐ／ＥサイクルＮ＋２，Ｎ＋２＋ｂでワード線ＷＬ３のストリングユニット０についての検知書き込みが実行され、以下同様に各Ｐ／Ｅサイクルで１本のワード線のストリングユニット０についての検知書き込みが実行される。
【０１２８】
なお、図２６は、各Ｐ／Ｅサイクルでストリングユニット０について検知書き込みが実行され、他のストリングユニットについては適用書き込みが実行される例を示すが、各Ｐ／Ｅサイクルで１本のワード線の全てのストリングユニットについて検知書き込みを実行してもよい。
【０１２９】
図２７に示す第４対策例は、図２６に示す第３対策例の変形であり、特性が近いと思われる近接するワード線がグループ化される場合の例を示す。すなわち、図２７に示す第４対策例は、図２４に示す第１対策例における１Ｐ／Ｅサイクルでの複数の検知書き込みの実行を複数Ｐ／Ｅサイクルに分散し、Ｐ／Ｅサイクルに関するタイミングを間引いた例である。第３、第４対策例のように検知書き込みを時間的に分散させることにより、１Ｐ／Ｅサイクルという短期間内に検知書き込みという比較的長いプログラム動作が複数回連続して実行されることがなく、ドライブのライト性能（例えば１秒平均）を安定化することができる。
【０１３０】
［検知書き込みの実行タイミングの決定］  
図２６、図２７はある周期で検知書き込みを実行することにより検知書き込みの実行回数を減らす例を説明したが、次に、コントローラ２００が検知書き込みのタイミングを決める例を説明する。
【０１３１】
図２８、図２９はＲＡＭ２２０に記憶されているこの制御に必要なテーブルの例を示す。ここでも、特性が近いと判断できるメモリセルトランジスタがグループ化され、グループ毎に検知書き込みが実行される。メモリセルトランジスタの特性が、トランジスタが接続されているワード線に応じて違う場合は、グループはワード線に基づいて定義される。便宜上、テーブルはあるブロックについて図示するが、図示したテーブルがブロック毎に個別に設けられてもよい。さらに、ワード線よりも細かく、ワード線とストリングユニットの組み合わせに基づいてグループ化してもよいが、ここでは、説明の便宜上どのストリングユニットでも特性は同じであるとする。
【０１３２】
図２８（ａ）はワード線の積層構造の一例を示す。ここでは、６４本のワード線ＷＬ０〜ＷＬ６３が下から順に積層されている。例えば、メモリホールの径は上層領域は大きいが、下層領域になるにつれて小さくなることがある。下層領域のワード線ＷＬ０、ＷＬ１に接続されるメモリセルトランジスタと中央部近辺のワード線に接続されるメモリセルトランジスタとは特性が異なることがあり、別グループにすることがある。同様に、上層領域のワード線ＷＬ６３、ＷＬ６２に接続されるメモリセルトランジスタと中央部近辺のワード線に接続されるメモリセルトランジスタとは特性が異なることがあり、両者を別グループにすることがある。中央部近辺のワード線に接続されるメモリセルトランジスタは特性が似ているため、１つのグループとする、あるいは少数のグループに分類することがある。
【０１３３】
図２８（ｂ）は、グループインデックスと当該グループに含まれるワード線範囲との対応関係を示すグループテーブルであり、図９に示したグループテーブル５０４（ここではブロックによりグループが定義される）に対応する。グループテーブルは、例えばグループ０はワード線ＷＬ０からなり、グループ１はワード線ＷＬ１からなり、グループ２はワード線ＷＬ２〜ＷＬ３１からなり、グループ３はワード線ＷＬ３２〜ＷＬ６１からなり、グループ４はワード線ＷＬ６２からなり、グループ５はワード線ＷＬ６３からなること等を示す。
【０１３４】
図２８（ｃ）は、グループインデックスと当該グループに設定される更新頻度（Ｐ／Ｅサイクル間隔）との対応関係を示す更新頻度テーブルである。更新頻度は検知書き込みを実行する頻度であり、Ｐ／Ｅサイクルの間隔で示される。更新頻度テーブルは、例えばグループ０は１００回のＰ／Ｅサイクル毎、グループ１は３００回のＰ／Ｅサイクル毎、グループ２は１０００回のＰ／Ｅサイクル毎、グループ３は１０００回のＰ／Ｅサイクル毎、グループ４は３００回のＰ／Ｅサイクル毎、グループ５は１００回のＰ／Ｅサイクル毎に検知書き込みを実行すべきであること等を示す。
【０１３５】
図２８（ｄ）は、グループインデックスと当該グループに設定されるずらし値との対応関係を示すタイミングずらし値テーブルである。ずらし値はグループ毎の更新タイミングを分散させるためのものである。タイミングずらし値テーブルは、例えばグループ０のずらし値は０、グループ１のずらし値は１、グループ２のずらし値は２、グループ３のずらし値は３、グループ４のずらし値は４、グループ５のずらし値は５であること等を示す。
【０１３６】
図２８（ｂ）、（ｃ）、（ｄ）のテーブルは一度設定されると更新されない。図２８（ｅ）は、ブロックインデックスと当該ブロックの書き換え回数（Ｐ／Ｅサイクルの現在値）との対応関係を示す書き換え回数テーブルであり、図９に示した書き換え回数テーブル５０６に対応する。Ｐ／Ｅサイクルの初期値は０とされ、ブロックが書き換えられる毎にインクリメントされる。
【０１３７】
図２９（ａ）は、グループインデックスと当該グループの検知書き込みで検知された所望の書き込み性能に関するプログラム電圧の初期値を示す書き込みパラメータとの対応関係を示す書き込みパラメータテーブルであり、図９の書き込みパラメータテーブル５０２と対応する。図２９（ｂ）は、グループインデックスと前回検知時のＰ／Ｅサイクルと次回検知予定のＰ／Ｅサイクルとの対応関係を示す更新スケジュールテーブルである。図２９（ａ）、（ｂ）のテーブルは検知書き込みの実行時に更新される。
【０１３８】
図３０は、図２９（ａ）に示した書き込みパラメータテーブルの初期設定処理の一例を示すフローチャートである。この処理はメモリシステムの出荷前（製造時）に行われる。コントローラ２００は、ステップＳ８２で１つのブロックを指定し、ステップＳ８４で１つのワード線を指定する。コントローラ２００は、ステップＳ８６でこの指定されたワード線がワード線の集合により定義されるグループの代表ワード線であるか否かを判定する。代表ワード線とはグループに含まれるワード線の中で最初にデータパターンが書き込まれるワード線、例えばワード線ＷＬ０である。データパターンは、例えば任意のランダムパターンである。
【０１３９】
ステップＳ８６の判定がイエスの場合（指定されたワード線が代表ワード線である場合）、コントローラ２００は、ステップＳ８８で当該ワード線に接続されるメモリセルトランジスタについて検知書き込みを実行することをフラッシュメモリ１００に指示する。検知書き込みにより求められた書き込みパラメータはフラッシュメモリ１００のレジスタ１７０Ａに設定される。コントローラ２００は、ステップＳ８９で、例えばGet featureコマンドを使ってレジスタ１７０Ａから書き込みパラメータを取得する。コントローラ２００は、取得した書き込みパラメータをステップＳ９０で書き込みパラメータテーブル（図２９（ａ））に保存する。コントローラ２００は、ステップＳ９２で更新頻度テーブル（図２８（ｃ））から更新頻度を取得し、タイミングずらし値テーブル（図２８（ｄ））からずらし値を取得し、書き換え回数テーブル（図２８（ｅ））からＰ／Ｅサイクル（現在値）を取得する。コントローラ２００は、ステップＳ９４でＰ／Ｅサイクル（現在値）を前回検知Ｐ／Ｅサイクルとして、（Ｐ／Ｅサイクル（現在値）＋更新頻度＋ずらし値）を次回検知予定Ｐ／Ｅサイクルとして、更新スケジュールテーブル（図２９（ｂ））に保存する。コントローラ２００は、ステップＳ９６で１ブロックの全てのワード線の書き込みが終了したか否かを判定する。
【０１４０】
ステップＳ９６の判定がノーの場合（全てのワード線の書き込みが終了していない場合）、ステップＳ８４に戻り、コントローラ２００は次のワード線を選択する。次のワード線に対してもステップＳ８６以降の処理が行われる。ステップＳ９６の判定がイエスの場合（全てのワード線の書き込みが終了した場合）、コントローラ２００は、ステップＳ９８で全てのブロックの書き込みが終了したか否かを判定する。
【０１４１】
ステップＳ９８の判定がノーの場合（全てのブロックの書き込みが終了していない場合）、ステップＳ８２に戻り、コントローラ２００は次のブロックを選択する。次のブロックに対してもステップＳ８４以降の処理が行われる。ステップＳ９８の判定がイエスの場合（全てのブロックの書き込みが終了した場合）、学習は終了する。
【０１４２】
ステップＳ８６の判定がノーの場合（指定されたワード線が代表ワード線ではない場合）、コントローラ２００は、ステップＳ１０１で書き込みパラメータテーブルから書き込みパラメータを取得し、取得した書き込みパラメータを、ステップＳ１０２で例えばSet featureコマンドを使ってフラッシュメモリ１００のレジスタ１７０Ａに設定する。コントローラ２００は、ステップＳ１０３で当該ワード線に接続されるメモリセルトランジスタについてレジスタ１７０Ａに設定されている書き込みパラメータを取得し、取得した書き込みパラメータを用いる適用書き込みを実行することをフラッシュメモリ１００に対してステップＳ１０４で指示する。適用書き込みが終了すると、ステップＳ９６が実行される。
【０１４３】
図３１は、ユーザが実際にメモリシステムを使用する際の書き込み動作の一例を示すフローチャートである。ホスト機器３００からの指示によるユーザデータの書き込み、あるいはガベージコレクションによる書き込みが開始すると、コントローラ２００は、ステップＳ１１６で書き込み先物理アドレスからブロックを特定し、特定したブロックからグループを特定し、ステップＳ１１８で更新スケジュールテーブル（図２９（ｂ））から次回検知予定Ｐ／Ｅサイクルを取得する。コントローラ２００は、ステップＳ１２０で書き込み先物理アドレスから書き込み先ブロックを特定し、ステップＳ１２２で書き換え回数テーブル（図２８（ｅ））からＰ／Ｅサイクル（現在値）を取得する。
【０１４４】
コントローラ２００は、ステップＳ１２４でＰ／Ｅサイクル（現在値）が次回検知予定Ｐ／Ｅサイクルに等しいか否かを判定する。イエスの場合（Ｐ／Ｅサイクル（現在値）が次回検知予定Ｐ／Ｅサイクルに等しい場合）、現在のＰ／Ｅサイクルは検知書き込みを実行すべきサイクルであるので、コントローラ２００は、ステップＳ１２６で書き込み先物理アドレスにより指定されるメモリセルトランジスタについて検知書き込みを実行することをフラッシュメモリ１００に対して指示する。検知書き込みにより求められた書き込みパラメータはフラッシュメモリ１００のレジスタ１７０Ａに設定される。コントローラ２００は、ステップＳ１２７で、例えばGet featureコマンドを使ってレジスタ１７０Ａから書き込みパラメータを取得し、取得した書き込みパラメータをステップＳ１２８で書き込みパラメータテーブル（図２９（ａ））に保存する。
【０１４５】
コントローラ２００は、ステップＳ１３０で更新頻度テーブル（図２８（ｃ））から更新頻度を取得する。コントローラ２００は、ステップＳ１３２でＰ／Ｅサイクル（現在値）を前回検知Ｐ／Ｅサイクルとして、（Ｐ／Ｅサイクル（現在値）＋更新頻度）を次回検知予定Ｐ／Ｅサイクルとして、更新スケジュールテーブル（図２９（ｂ））に保存する。
【０１４６】
ステップＳ１２４の判定がノーの場合（Ｐ／Ｅサイクル（現在値）が次回検知予定Ｐ／Ｅサイクルに等しくない場合）、現在のＰ／Ｅサイクルは適用書き込みを実行すべきサイクルであるので、コントローラ２００は、ステップＳ１３５で書き込みパラメータテーブルから書き込みパラメータを取得し、取得した書き込みパラメータを、ステップＳ１３６で例えばSet featureコマンドを使ってフラッシュメモリ１００のレジスタ１７０Ａに設定する。コントローラ２００は、ステップＳ１３８で書き込み先物理アドレスにより指定されるメモリセルトランジスタについてレジスタ１７０Ａに設定されている書き込みパラメータを用いる適用書き込みを実行することをフラッシュメモリ１００に対して指示する。
【０１４７】
図３２〜図３９はＰ／Ｅサイクルの増加に伴う書き込みパラメータテーブルと更新スケジュールテーブルとの変遷を示す。  
【０１４８】
図３２（ａ）は更新スケジュールテーブルデータの学習直後の書き込みパラメータテーブルの状態を示し、図３２（ｂ）は学習直後の更新スケジュールテーブルの状態を示す。学習時は、図３０のステップＳ８８に示すように各グループの代表ワード線について検知書き込みが実行される。検知書き込みにより求められた各グループ０〜５のスマートベリファイ検知完了時のプログラム電圧が、図３２（ａ）に示すように、書き込みパラメータＶ０＿０〜Ｖ５＿０として書き込みパラメータテーブルに保存される。学習時に検知書き込みが行われると、そのときのＰ／Ｅサイクルが検出され、更新スケジュールテーブルに保存される。図３２（ｂ）の更新スケジュールテーブルは、図２９（ｂ）に示すテーブルと同じである。
【０１４９】
図３３（ａ）、（ｂ）はＰ／Ｅサイクルが１００回に達した時の書き込みパラメータテーブル、更新スケジュールテーブルの状態をそれぞれ示す。コントローラ２００は、書き換え回数テーブル（図２８（ｅ））と、更新スケジュールテーブル（最新版は図３２（ａ））を参照する。更新スケジュールテーブルによると、一番早く検知書き込みを実行するのはグループ０であり、実行予定Ｐ／Ｅサイクルは１００回である。そのため、Ｐ／Ｅサイクルが１００回に達すると、図３１のステップＳ１２６に示すように、コントローラ２００はグループ０の検知書き込みをフラッシュメモリ１００に指示する。検知書き込みにより求められたグループ０の所望の書き込み性能に関するプログラム電圧の初期値が、図３３（ａ）に示すように、書き込みパラメータＶ０＿１として書き込みパラメータテーブルに保存されるとともに、図３３（ｂ）に示すように、現在のＰ／Ｅサイクル（１００）がグループ０の前回検知Ｐ／Ｅサイクルとして更新スケジュールテーブルに保存される。さらに、図２８（ｃ）に示す更新頻度テーブルからグループ０の更新頻度（１００）が取得され、取得された更新頻度（１００）と現在のＰ／Ｅサイクルと（１００）が加算され、図３３（ｂ）に示すように、次回検知予定サイクル（２００）として、更新スケジュールテーブルに保存される。
【０１５０】
図３４（ａ）、（ｂ）はＰ／Ｅサイクルが１０５回に達した時の書き込みパラメータテーブル、更新スケジュールテーブルの状態を示す。コントローラ２００は、書き換え回数テーブル（図２８（ｅ））と、更新スケジュールテーブル（最新版は図３３（ａ））を参照する。更新スケジュールテーブルによると、Ｐ／Ｅサイクルが１００回以降で最初に検知書き込みを実行するのはグループ５であり、実行予定Ｐ／Ｅサイクルは１０５回である。そのため、Ｐ／Ｅサイクルが１０５回に達すると、図３１のステップＳ１２６に示すように、コントローラ２００はグループ５の検知書き込みをフラッシュメモリ１００に指示する。検知書き込みにより求められたグループ５の所望の書き込み性能に関するプログラム電圧の初期値が、図３４（ａ）に示すように、書き込みパラメータＶ５＿１として書き込みパラメータテーブルに保存されるとともに、図３４（ｂ）に示すように、現在のＰ／Ｅサイクル（１０５）がグループ５の前回検知Ｐ／Ｅサイクルとして更新スケジュールテーブルに保存される。さらに、図２８（ｃ）に示す更新頻度テーブルからグループ５の更新頻度（１００）が取得され、取得された更新頻度（１００）と現在のＰ／Ｅサイクルと（１０５）が加算され、図３４（ｂ）に示すように、次回検知予定サイクル（２０５）として、更新スケジュールテーブルに保存される。
【０１５１】
図３５（ａ）、（ｂ）はＰ／Ｅサイクルが２００回に達した時の書き込みパラメータテーブル、更新スケジュールテーブルの状態を示す。コントローラ２００は、書き換え回数テーブル（図２８（ｅ））と、更新スケジュールテーブル（最新版は図３４（ａ））を参照する。更新スケジュールテーブルによると、Ｐ／Ｅサイクルが１０５回以降で最初に検知書き込みを実行するのはグループ０であり、実行予定Ｐ／Ｅサイクルは２００回である。そのため、Ｐ／Ｅサイクルが２００回に達すると、図３１のステップＳ１２６に示すように、コントローラ２００はグループ０の検知書き込みをフラッシュメモリ１００に指示する。検知書き込みにより求められたグループ０の所望の書き込み性能に関するプログラム電圧の初期値が、図３５（ａ）に示すように、書き込みパラメータＶ０＿２として書き込みパラメータテーブルに保存されるとともに、図３５（ｂ）に示すように、現在のＰ／Ｅサイクル（２００）がグループ０の前回検知Ｐ／Ｅサイクルとして更新スケジュールテーブルに保存される。さらに、図２８（ｃ）に示す更新頻度テーブルからグループ０の更新頻度（１００）が取得され、取得された更新頻度（１００）と現在のＰ／Ｅサイクルと（２００）が加算され、図３５（ｂ）に示すように、次回検知予定サイクル（３００）として、更新スケジュールテーブルに保存される。
【０１５２】
図３６（ａ）、（ｂ）はＰ／Ｅサイクルが２０５回に達した時の書き込みパラメータテーブル、更新スケジュールテーブルの状態を示す。コントローラ２００は、書き換え回数テーブル（図２８（ｅ））と、更新スケジュールテーブル（最新版は図３５（ａ））を参照する。更新スケジュールテーブルによると、Ｐ／Ｅサイクルが２００回以降で最初に検知書き込みを実行するのはグループ５であり、実行予定Ｐ／Ｅサイクルは２０５回である。そのため、Ｐ／Ｅサイクルが２０５回に達すると、図３１のステップＳ１２６に示すように、コントローラ２００はグループ５の検知書き込みをフラッシュメモリ１００に指示する。検知書き込みにより求められたグループ５の所望の書き込み性能に関するプログラム電圧の初期値が、図３６（ａ）に示すように、書き込みパラメータＶ５＿２として書き込みパラメータテーブルに保存されるとともに、図３６（ｂ）に示すように、現在のＰ／Ｅサイクル（２０５）がグループ５の前回検知Ｐ／Ｅサイクルとして更新スケジュールテーブルに保存される。さらに、図２８（ｃ）に示す更新頻度テーブルからグループ５の更新頻度（１００）が取得され、取得された更新頻度（１００）と現在のＰ／Ｅサイクルと（２０５）が加算され、図３６（ｂ）に示すように、次回検知予定サイクル（３０５）として、更新スケジュールテーブルに保存される。
【０１５３】
図３７（ａ）、（ｂ）はＰ／Ｅサイクルが３００回に達した時の書き込みパラメータテーブル、更新スケジュールテーブルの状態を示す。コントローラ２００は、書き換え回数テーブル（図２８（ｅ））と、更新スケジュールテーブル（最新版は図３６（ａ））を参照する。更新スケジュールテーブルによると、Ｐ／Ｅサイクルが２０５回以降で最初に検知書き込みを実行するのはグループ０であり、実行予定Ｐ／Ｅサイクルは３００回である。そのため、Ｐ／Ｅサイクルが３００回に達すると、図３１のステップＳ１２６に示すように、コントローラ２００はグループ０の検知書き込みをフラッシュメモリ１００に指示する。検知書き込みにより求められたグループ０の所望の書き込み性能に関するプログラム電圧の初期値が、図３７（ａ）に示すように、書き込みパラメータＶ０＿３として書き込みパラメータテーブルに保存されるとともに、図３７（ｂ）に示すように、現在のＰ／Ｅサイクル（３００）がグループ０の前回検知Ｐ／Ｅサイクルとして更新スケジュールテーブルに保存される。さらに、図２８（ｃ）に示す更新頻度テーブルからグループ０の更新頻度（１００）が取得され、取得された更新頻度（１００）と現在のＰ／Ｅサイクルと（３００）が加算され、図３７（ｂ）に示すように、次回検知予定サイクル（４００）として、更新スケジュールテーブルに保存される。
【０１５４】
図３８（ａ）、（ｂ）はＰ／Ｅサイクルが３０１回に達した時の書き込みパラメータテーブル、更新スケジュールテーブルの状態を示す。コントローラ２００は、書き換え回数テーブル（図２８（ｅ））と、更新スケジュールテーブル（最新版は図３７（ａ））を参照する。更新スケジュールテーブルによると、Ｐ／Ｅサイクルが３００回以降で最初に検知書き込みを実行するのはグループ１であり、実行予定Ｐ／Ｅサイクルは３０１回である。そのため、Ｐ／Ｅサイクルが３０１回に達すると、図３１のステップＳ１２６に示すように、コントローラ２００はグループ１の検知書き込みをフラッシュメモリ１００に指示する。検知書き込みにより求められたグループ１の所望の書き込み性能に関するプログラム電圧の初期値が、図３８（ａ）に示すように、書き込みパラメータＶ１＿１として書き込みパラメータテーブルに保存されるとともに、図３８（ｂ）に示すように、現在のＰ／Ｅサイクル（３０１）がグループ１の前回検知Ｐ／Ｅサイクルとして更新スケジュールテーブルに保存される。さらに、図２８（ｃ）に示す更新頻度テーブルからグループ１の更新頻度（３００）が取得出され、取得された更新頻度（３００）と現在のＰ／Ｅサイクルと（３０１）が加算され、図３８（ｂ）に示すように、次回検知予定サイクル（６０１）として、更新スケジュールテーブルに保存される。
【０１５５】
図３９（ａ）、（ｂ）はＰ／Ｅサイクルが３０４回に達した時の書き込みパラメータテーブル、更新スケジュールテーブルの状態を示す。コントローラ２００は、書き換え回数テーブル（図２８（ｅ））と、更新スケジュールテーブル（最新版は図３８（ａ））を参照する。更新スケジュールテーブルによると、Ｐ／Ｅサイクルが３０１回以降で最初に検知書き込みを実行するのはグループ４であり、実行予定Ｐ／Ｅサイクルは３０４回である。そのため、Ｐ／Ｅサイクルが３０４回に達すると、図３１のステップＳ１２６に示すように、コントローラ２００はグループ４の検知書き込みをフラッシュメモリ１００に指示する。検知書き込みにより求められたグループ４の所望の書き込み性能に関するプログラム電圧の初期値が、図３９（ａ）に示すように、書き込みパラメータＶ４＿１として書き込みパラメータテーブルに保存されるとともに、図３９（ｂ）に示すように、現在のＰ／Ｅサイクル（３０４）がグループ４の前回検知Ｐ／Ｅサイクルとして更新スケジュールテーブルに保存される。さらに、図２８（ｃ）に示す更新頻度テーブルからグループ４の更新頻度（３００）が取得され、取得された更新頻度（３００）と現在のＰ／Ｅサイクルと（３０４）が加算され、図３９（ｂ）に示すように、次回検知予定サイクル（６０４）として、更新スケジュールテーブルに保存される。
【０１５６】
以下、同様にして、更新スケジュールテーブルにより定められた次回検知予定Ｐ／Ｅサイクルに達すると、検知書き込みが実行され、書き込みパラメータテーブルと更新スケジュールテーブルとが更新される。
【０１５７】
このように、ワード線で定義されるグループ毎に検知書き込みのタイミングを制御することにより、特性変化の程度に応じた時間間隔（Ｐ／Ｅサイクル数間隔）で検知書き込みを実行することができる。そのため、検知書き込みにより求められた書き込みパラメータが、特性が変化したメモリセルトランジスタにとって最適ではなくなり、あるいは不適切となる事態が生じることが抑制される。なお、上述の説明では同じワード線に接続されるストリングユニット間で特性のバラつきがないことを前提としているが、ストリングユニット間で特性が異なる場合は、ストリングユニットも考慮にいれてグループを定義すればよい。
【０１５８】
上述の説明は１ｔｉｅｒの３次元構造のフラッシュメモリを想定していた。近年、図４０（ａ）に示すような２ｔｉｅｒのフラッシュメモリが開発されている。メモリホールＭＨの径は上半分の層群(ｔｉｅｒ−２)では、例えば上から下に向かって大径から小径となり、下半分の層群(ｔｉｅｒ−１)でも例えば上から下に向かって大径から小径となることがあり、メモリホールＭＨの形状はｔｉｅｒ−１とｔｉｅｒ−２の境界で不連続であることがある。図４０（ｂ）はグループテーブル、図４０（ｃ）は更新頻度テーブルを示す。グループテーブルは、例えばグループ０はｔｉｅｒ−１のワード線ＷＬ０〜ＷＬ１からなり、グループ１はｔｉｅｒ−１のワード線ＷＬ２〜ＷＬ３１からなり、グループ２はｔｉｅｒ−１のワード線ＷＬ３２〜ＷＬ６１からなり、グループ３はｔｉｅｒ−１のワード線ＷＬ６２〜ＷＬ６３からなり、グループ４はｔｉｅｒ−２のワード線ＷＬ６４〜ＷＬ６５からなり、グループ５はｔｉｅｒ−２のワード線ＷＬ６６〜ＷＬ９５からなり、グループ６はｔｉｅｒ−２のワード線ＷＬ９６〜ＷＬ１２５からなり、グループ７はｔｉｅｒ−２のワード線ＷＬ１２６〜ＷＬ１２７からなること等を示すものであり、図９に示したグループテーブル５０４（ここではブロックによりグループが定義される）と図２８（ｂ）に示したグループテーブルに対応する。更新頻度テーブルは、例えばグループ０は１００回のＰ／Ｅサイクル毎、グループ１は１０００回のＰ／Ｅサイクル毎、グループ２は１０００回のＰ／Ｅサイクル毎、グループ３は１００回のＰ／Ｅサイクル毎、グループ４は１００回のＰ／Ｅサイクル毎、グループ５は１０００回のＰ／Ｅサイクル毎、グループ６は１０００回のＰ／Ｅサイクル毎、グループ７は１００回のＰ／Ｅサイクル毎に検知書き込みを実行すべきであることを示すものであり、図２８（ｃ）に示した更新頻度テーブルに対応する。
【０１５９】
なお、一部又は全部のアドレスの割り振りは図４０（ａ）の逆になる可能性もある。例えば、ｔｉｅｒ−１において上層から下層にワード線ＷＬ０〜ＷＬ６３が割り振られることもある。
【０１６０】
[グループの更新]  
上述したように、プログラム電圧の初期値が近いと予想できるメモリセルのグループ毎に書き込みパラメータが記憶され、記憶されている書き込みパラメータがグループ内の他のメモリセルトランジスタの書き込みに適用される。適用書き込みが適切に行われるためには、グループ内の全メモリセルトランジスタの特性が一致あるいは似ている、かつ、検知を行ったときと比較して、特性が大きくは変化していないことが必要である。グループ内の全メモリセルトランジスタの特性が似ていないと、検知書き込みで検知した書き込みパラメータが適切ではないことになる。メモリセルトランジスタの特性に基づいてグループを作成した後、書き換え回数が増えると、グループ内でメモリセルトランジスタの特性がずれる可能性がある。
【０１６１】
以下、コントローラ２００が書き込みパラメータを共有するグループを動的に構成する例を説明する。コントローラ２００は、メモリセルトランジスタの特性が似ていると推測されるブロックもしくはワード線の集合をグループとして、グループの書き込みの際、検知書き込みを実行するか、適用書き込みを実行するかを判断する。グループに所属するブロックやワード線のなどのセルユニットの集合のことを要素と称する。グループ内の要素の１つを代表要素と称し、代表要素について検知書き込みを実行して求められた所望の書き込み性能に関するプログラム電圧の初期値を示す書き込みパラメータをグループ代表値とも称する。
【０１６２】
コントローラ２００は、グループにおいて、代表要素について一度だけ検知書き込みを実行し、グループ代表値を検知して、グループ代表値を記憶する。コントローラ２００は、グループに所属する非代表要素についてはグループ代表値を用いる適用書き込みを実行させる。グループ代表値は決定された後変更されることはない。そのため、セルの特性変化に伴い、所属する要素に対するグループ代表値の妥当性が下がることがある。この場合、本実施形態では、グループ代表値は変更せず、代わりに、要素の所属グループを当該グループから妥当なグループ代表値を有する別のグループに移す。このように、コントローラ２００は、所属する要素にとってグループ代表値が妥当であるかどうか適宜検査し、所属する要素にとってグループ代表値が妥当ではなくなると、要素が所属するグループを動的に変化させる。また、グループ毎に要素の所属条件を定め、要素が所属条件を満たしている限り、グループに属するメモリセルトランジスタの特性が変化していないと判断する。所属条件の例はＰ／Ｅサイクル回数の範囲（例えば、１〜１００回）、ワード線の範囲（例えば、ワード線ＷＬ２〜ＷＬ３１）がある。コントローラ２００は、要素が所属するグループのグループ代表値が要素にとっての所望の書き込み性能に関する書き込みパラメータであるか否かを抜き取り検査により判定し、かつ、要素が所属条件を満たしているか否かを判定する。求められた書き込みパラメータがグループ代表値から離れている場合、要素は、求められた書き込みパラメータと近いグループ代表値を有するグループに移動する。グループＧに所属する要素が検知書き込みの結果グループＧ´に所属が変更された後、グループＧ内の他の要素が検知書き込みをせずにグループＧ´への所属の変更を追随することがある。これを承継と称する。
【０１６３】
図４１は、検知書き込みの頻度を削減し、グループ代表値の妥当性を担保するために要素をグループ間で移動させ、所属する要素を変更することによりグループを更新する処理の概要を示す。（ａ）から（ｅ）は時間の経過に応じた要素の状態の変化を示し、（ａ）が最も古い状態を示す。二重の四角で囲まれた要素は検知書き込みの対象であり、一重の四角で囲まれた要素は適用書き込みの対象である。初期段階では、図４１（ａ）に示すように、６つの要素はどのグループにも属していないので、適正な書き込みパラメータを検知するために検知書き込みがそれぞれ実行される。検知書き込みの結果、要素０〜要素４の書き込みパラメータが似ていることが分り、コントローラ２００は図４１（ｂ）に示すように要素０〜要素４をグループＧｒ０に所属させる。要素５の書き込みパラメータは要素０〜要素４の書き込みパラメータとは似ていないので、コントローラ２００は要素５をグループＧｒ１に所属させる。書き換えが繰り返される間、要素がランダムに抜き取り検査の対象とされる。図４１（ｃ）に示すようにあるタイミングで要素４が抜き取り検査され、要素４の書き込みパラメータが検知される。この書き込みパラメータがグループＧｒ０のグループ代表値よりもグループＧｒ１のグループ代表値に近い場合、コントローラ２００は図４１（ｃ）に示すように、要素４をグループＧｒ０からグループＧｒ１に移動させる。その結果、図４１（ｄ）に示すように、グループＧｒ０の所属要素は要素０〜要素３となり、グループＧｒ１の所属要素は要素４、要素５となる。この後、ある要素の図４１（ａ）の状態からのＰ／Ｅサイクルが所定回数（例えば１０１回）変化すると、図４１（ｅ）に示すように、グループＧｒ０の要素０についての検知書き込みが実行される。図４１（ｅ）に示す状態では、グループＧｒ１に所属する要素はＰ／Ｅサイクル数が少ないので、書き込みが発生した際には、適用書き込みが実行される、もしくは抜き取り検査による検知書き込みが実行される。
【０１６４】
図４２は、グループ間の要素の移動の態様を説明する。  
【０１６５】
・追放：抜き取り検査の結果、要素がグループＧの所属条件を満たしていないことが判明した場合、コントローラ２００は要素をグループＧから追放する（グループＧから外す）。
【０１６６】
・放出：Ｐ／Ｅサイクルが進む等により、要素がグループＧの所属条件を満たさなくなった場合、コントローラ２００は要素をグループＧから放出する（グループＧから外す）。
【０１６７】
・承継：コントローラ２００は要素をグループＧから放出した時、グループＧの承継先グループとしてグループＧ´が定義されている場合、要素の所属先をグループＧからグループＧ´へ承継する（変更する）。
【０１６８】
・滞留：Ｐ／Ｅサイクルの変化等によるメモリセルトランジスタの特性の変化時又は抜き取り検査の結果、要素がグループＧの所属条件を満たしていることが判明した場合、コントローラ２００は要素をグループＧに滞留させる（要素の所属グループを変更しない）。
【０１６９】
・合流：グループＧに所属する要素に対する検知書き込みにより、要素に所望の書き込み性能に関する書き込みパラメータが得られた場合、コントローラ２００は要素を所望の書き込み性能に関する書き込みパラメータを代表値とするグループＧ´に合流させる（要素の所属先を変更する）。コントローラ２００は、承継先グループが定義されていないグループＧから要素を放出する場合、合流先のグループＧ´をグループＧの承継先グループとして登録する。
【０１７０】
要素がグループに所属するためには、要素はグループの所属条件を満たさなければならない。要素が所属条件を満たすか否かに応じて、次のように要素は移動する。なお、要素はたかだか１つのグループに所属し、複数のグループに所属することはない。言い換えると、グループの所属条件は全てのグループで互いに重ならない。
【０１７１】
抜き取り検査の結果、コントローラ２００は要素が所属グループの所属条件を満たしていないことを検出すると、要素を所属グループから追放する。抜き取り検査以外で、要素が所属グループの所属条件を満たさなくなった場合、コントローラ２００は要素を所属グループから放出する。例えば、所属条件が時間の経過とともに変化する書き換え回数（Ｐ／Ｅサイクル）である場合、書き換え回数が増えると、要素は所属グループの所属条件を満たさなくなることもある。コントローラ２００は要素が所属グループの所属条件を満たしているか否かを判定し、満たしていると判定した場合、要素を所属グループに滞留させる。コントローラ２００は要素が所属グループの所属条件を満たしていないと判定した場合、要素が他のグループの所属条件を満たしているか否かを判定する。コントローラ２００は要素が他のグループの所属条件を満たしていると判定した場合、所属条件を満たすグループに要素を合流（所属グループを変更）させる。コントローラ２００は要素の所属を変更しようとした時、要素がどのグループの所属条件も満たしていない場合、新グループを作成する。コントローラ２００は要素をグループから放出する際、要素が所属していたグループに承継先グループが定義されている時、承継先グループに所属を変更する（要素はグループを承継する）。
【０１７２】
図４３はグループの状態遷移を示す。「存在しない」グループは生成されていないグループと等価である。この「存在しない」グループにグループ代表値が定義されると、存在するグループになり、先ずは承継先未定義グループとなる。承継先未定義グループに承継先グループが定義されると、承継先未定義グループは承継先定義済みグループとなる。メモリシステム内のいずれの要素も、将来にわたり、当該グループに所属することがもうないと分ると、承継先定義済みグループは削除可能グループとなる。例えば、グループＧｊのＰ／Ｅサイクル数範囲が、１０１−２００であり、メモリシステム内のすべての要素のＰ／Ｅサイクル数が２０１回以上であるとする。このとき、いずれの要素もＰ／Ｅサイクル数範囲が２００以下ではないので、グループＧｊにはメモリシステム内のいずれの要素も将来にわたり所属することがないと分かり、グループＧｊは削除可能グループとなる。
【０１７３】
図４４、図４５は、グループ間の要素の移動を制御するために用いられ、ＲＡＭ２２０に記憶されているテーブルの一例を示す。図４４（ａ）は要素に対するグループインデックスと検知予約フラグとの対応関係を示す要素・グループテーブルである。要素はブロックインデックスとワード線範囲により特定される。検知予約フラグは要素がグループ所属条件を満たしているか否かを判定するための抜き取り検査をする必要があるか否かを示す。フラグが１ならば、抜き取り検査が行われ、フラグが０ならば、抜き取り検査は行われない。
【０１７４】
要素・グループテーブルは、例えば要素（ブロック０のワード線ＷＬ０）はグループ０に含まれ、要素（ブロック０のワード線ＷＬ１）はグループ１に含まれ、要素（ブロック０のワード線ＷＬ２〜ＷＬ３１）はグループ２に含まれ、要素（ブロック０のワード線ＷＬ３２〜ＷＬ６１）はグループ３に含まれ、要素（ブロック０のワード線ＷＬ６２）はグループ４に含まれ、要素（ブロック０のワード線ＷＬ６３）はグループ５に含まれ、要素（ブロック１のワード線ＷＬ０）はグループ６に含まれ、要素（ブロック１のワード線ＷＬ１）はグループ７に含まれ、要素（ブロック１のワード線ＷＬ２〜ＷＬ３１）はグループ８に含まれ、グループ０〜８の検知予約フラグは０であること等を示す。
【０１７５】
図４４（ｂ）はグループインデックスに対するワード線範囲とＰ／Ｅサイクル範囲とグループ代表値との対応関係を示すグループテーブルである。ワード線範囲とＰ／Ｅサイクル範囲とはグループ所属条件であり、要素のワード線とＰ／Ｅサイクルがこの範囲内であれば、要素は所属条件を満たす。グループテーブルは、例えばグループ０のワード線範囲はＷＬ０、Ｐ／Ｅサイクル範囲は０〜１００回、グループ代表値はＶ１であり、グループ１のワード線範囲はＷＬ１、Ｐ／Ｅサイクル範囲は０〜３００回、グループ代表値はＶ２であり、グループ２のワード線範囲はＷＬ２〜ＷＬ３１、Ｐ／Ｅサイクル範囲は０〜１０００回、グループ代表値はＶ３であり、グループ３のワード線範囲はＷＬ３２〜ＷＬ６１、Ｐ／Ｅサイクル範囲は０〜１０００回、グループ代表値はＶ４であり、グループ４のワード線範囲はＷＬ６２、Ｐ／Ｅサイクル範囲は０〜３００回、グループ代表値はＶ５であり、グループ５のワード線範囲はＷＬ６３、Ｐ／Ｅサイクル範囲は０〜１００回、グループ代表値はＶ６であり、グループ６のワード線範囲はＷＬ０、Ｐ／Ｅサイクル範囲は１０１〜２００回、グループ代表値はＶ７であり、グループ７のワード線範囲はＷＬ１、Ｐ／Ｅサイクル範囲は３０１〜６００回、グループ代表値はＶ４であり、グループ８のワード線範囲はＷＬ２〜ＷＬ３１、Ｐ／Ｅサイクル範囲は１００１〜２０００回、グループ代表値はＶ５であり、グループ９のワード線範囲はＷＬ３２〜ＷＬ６１、Ｐ／Ｅサイクル範囲は１００１〜２０００回、グループ代表値はＶ６であること等を示す。ワード線ごとの特性ばらつきが大きいにも関わらずワード線範囲を所属条件に含めないと、合流処理において、ある時点でたまたまグループ代表値が一致したグループに所属してしまい、その後特性が大きく変化しても（抜き取り検査の対象となるまで）なかなか気がつかず、不適切な書き込みパラメータを使って適用書き込みしてしまうことがある。特性ばらつきが激しく、あらかじめ分けて考えておくべき（ある時点でたまたま代表値と同じだったからといって合流すべきではない）条件として、ワード線範囲が所属条件に含められている。
【０１７６】
図４４（ｃ）はグループインデックスに対する承継先グループのインデックスを示す承継先テーブルである。承継先テーブルは、例えばグループ０の承継先は未定義であり、グループ１の承継先は未定義であり、グループ２の承継先はグループ８であり、グループ３の承継先は未定義であり、グループ４の承継先は未定義であること等を示す。
【０１７７】
図４５（ａ）はブロックインデックスに対するＰ／Ｅサイクル（現在値）を示す書き換え回数テーブルを示す。書き換え回数テーブルは、例えばブロック０のＰ／Ｅサイクルは２０回であり、ブロック１のＰ／Ｅサイクルは３５回であり、ブロック２のＰ／Ｅサイクルは２５回であり、ブロック３のＰ／Ｅサイクルは８０回であること等を示す。
【０１７８】
図４５（ｂ）は所属条件を設定するためのワード線範囲に対するＰ／Ｅサイクル幅を示すＰ／Ｅサイクル幅テーブルを示す。Ｐ／Ｅサイクル幅テーブルは、例えばワード線範囲ＷＬ０のＰ／Ｅサイクル幅は１００回であり、ワード線範囲ＷＬ１のＰ／Ｅサイクル幅は３００回であり、ワード線範囲ＷＬ２〜ＷＬ３１のＰ／Ｅサイクル幅は１０００回であり、ワード線範囲ＷＬ３２〜ＷＬ６１のＰ／Ｅサイクル幅は１０００回であり、ワード線範囲ＷＬ６２のＰ／Ｅサイクル幅は３００回であり、ワード線範囲ＷＬ６３のＰ／Ｅサイクル幅は１００回であること等を示す。
【０１７９】
図４６は、グループ間の要素の移動によるグループの再構成の処理例を説明するフローチャートである。ホスト機器３００からの指示によるユーザデータの書き込み、あるいはガベージコレクションによる書き込みが開始すると、コントローラ２００は、ステップＳ１５４で要素・グループテーブル（図４４（ａ））を参照して上記書き込み先の物理アドレスに相当する要素（ブロック、ワード線）がグループに所属しているか否かを判定する。ノーの場合（要素がグループに所属していない場合）、コントローラ２００は、ステップＳ１５６で「合流１」処理を実行する。
【０１８０】
図４７ＡはステップＳ１５６、Ｓ１７０の「合流１」処理を示すフローチャート、図４７ＢはステップＳ１６２の「合流２」処理を示すフローチャートである。  
【０１８１】
図４７Ａの「合流１」処理においては、コントローラ２００は、ステップＳ２０２で要素に対して検知書き込みを実行することをフラッシュメモリ１００に指示する。検知書き込みにより求められた書き込みパラメータはレジスタ１７０Ａに記憶され、その後コントローラ２００により取得される。コントローラ２００は、ステップＳ２０４でグループテーブル（図４４（ｂ））を参照して、検知書き込みにより求められた書き込みパラメータと一致するグループ代表値が存在し（グループＧｒｋに存在していたとする）、かつ要素がグループＧｒｋの所属条件を満たすか否かを判定する。なお、一致とは厳密な一致に限らず、差が閾値以内であれば一致とみなしてもよい。イエスの場合（上記グループ代表値が存在し、要素が所属条件を満たす場合）、コントローラ２００は、ステップＳ２０６で要素をグループＧｒｋに所属させるため、各テーブルを更新する。テーブルの更新例は後述する。
【０１８２】
ステップＳ２０４の判定がノーの場合（上記グループ代表値が存在しない場合、あるいは要素が所属条件を満たしていない場合）、コントローラ２００は、ステップＳ２０８で検知書き込みにより求められた書き込みパラメータをグループ代表値とする新グループＧｒｋを作成するため、各テーブルを更新する。グループＧｒｋの所属条件は、書き換え回数テーブルとＰ／Ｅサイクル幅テーブルと要素・ワード線テーブルとを参照して設定される。要素・ワード線テーブルは、各要素に含まれるワード線範囲を予め登録している。その後、コントローラ２００は、ステップＳ２０６で要素をグループＧｒｋに所属させる。
【０１８３】
図４６に戻り、ステップＳ１５４の判定がイエスの場合（要素がグループに所属している場合）、コントローラ２００は、ステップＳ１５８で要素・グループテーブル（図４４（ａ））を参照して要素の検知予約フラグは１であるか否かを判定する。イエスの場合（検知予約フラグが１である場合）、コントローラ２００は、ステップＳ１６０で要素の検知予約フラグを０とする。その後、コントローラ２００は、ステップＳ１６２で「合流２」処理を実行する。
【０１８４】
図４７Ｂの「合流２」処理においては、コントローラ２００は、ステップＳ３０２で要素に対して検知書き込みを実行することをフラッシュメモリ１００に指示する。検知書き込みにより求められた書き込みパラメータはレジスタ１７０Ａに記憶される。コントローラ２００は、検知した書き込みパラメータが所属するグループのグループ代表値と異なるか否かをステップＳ３０４で判定する。ノーの場合（検知した書き込みパラメータがグループ代表値と同じ場合）、「合流２」処理は終了する（要素は滞留する）。イエスの場合（検知した書き込みパラメータがグループ代表値と異なる場合）、コントローラ２００はステップＳ３０６で要素をグループから追放する（グループから外す）。
【０１８５】
コントローラ２００は、ステップＳ３０８でグループテーブル（図４４（ｂ））を参照して、レジスタ１７０Ａに記憶されている書き込みパラメータと一致するグループ代表値が存在し（グループＧｒｋに存在したとする）、かつ要素がグループＧｒｋの所属条件を満たすか否かを判定する。イエスの場合（上記グループ代表値が存在し、要素が所属条件を満たす場合）、コントローラ２００は、ステップＳ３１０で要素をグループＧｒｋに所属させるため、各テーブルを更新する。テーブルの更新例は後述する。
【０１８６】
ステップＳ３０８の判定がノーの場合（上記グループ代表値が存在しない場合、あるいは要素が所属条件を満たしていない場合）、コントローラ２００は、ステップＳ３１２で検知書き込みで求められた書き込みパラメータをグループ代表値とする新グループＧｒｋを作成するため、各テーブルを更新する。グループＧｒｋの所属条件は、書き換え回数テーブルとＰ／Ｅサイクル幅テーブルと要素・ワード線テーブルとを参照して設定される。その後、コントローラ２００は、ステップＳ３１０で要素をグループＧｒｋに所属させる。ステップＳ３１０で「合流２」処理は終了する。
【０１８７】
図４６のフローに戻り、ステップＳ１５８の判定がノーの場合（検知予約フラグが０である場合）、コントローラ２００は、ステップＳ１６６でグループテーブル（図４４（ｂ））を参照し、要素は所属しているグループの所属条件を満たすか否かを判定する。イエスの場合（所属しているグループの所属条件を満たす場合）、コントローラ２００は、ステップＳ１７８で所属しているグループのグループ代表値を用いる適用書き込みの実行をフラッシュメモリ１００に指示する。この場合は、要素は所属しているグループに滞留する。この後、コントローラ２００は、ステップＳ１８２で要素・グループテーブルの当該要素の検知予約フラグを１とする。なお、ステップＳ１８２で必ず検知予約フラグを１とせずに、ランダムに１とするか又は０のままとしてもよい。これは、抜き取り検査の実行回数を減らすためである。
【０１８８】
ステップＳ１６６の判定がノーの場合（所属しているグループの所属条件を満たさない場合）、コントローラ２００は、ステップＳ１６８で承継先テーブル（図４４（ｃ））を参照して所属しているグループの承継先が定義されているか否かを判定する。ノーの場合（所属しているグループの承継先が定義されていない場合）、コントローラ２００は、ステップＳ１７０で「合流１」処理を実行する。「合流１」処理の後、コントローラ２００は、ステップＳ１７２で承継先をグループＧｒｋ（図４７ＡのステップＳ２０６参照）とする（承継先設定）ため、承継先テーブルを更新する。
【０１８９】
ステップＳ１６８の判定がイエスの場合（グループＧｒｋが承継先として定義されている場合）、コントローラ２００は、ステップＳ１７６で要素が所属するグループをグループＧｒｋに変更するために要素・グループテーブルを更新し（承継）、グループＧｒｋのグループ代表値を用いる適用書き込みの実行をフラッシュメモリ１００に指示する。
【０１９０】
図４８〜図５４は、要素の移動の種々の態様におけるテーブルの更新例を示す。  
【０１９１】
図４８は、グループに所属しない要素が新たに作成されたグループに合流するとき、例えば図４６のステップＳ１５６の「合流１」処理の中のステップＳ２０４、Ｓ２０８、Ｓ２０６のテーブルの状態を示す。グループ０、１が定義され、要素・グループテーブル、グループテーブル、承継先テーブルの斜線（３行目）のエントリは未登録の状態で、対象の要素はブロック０のワード線ＷＬ２の要素である場合を説明する。
【０１９２】
要素（ブロック０、ワード線ＷＬ２）はどのグループにも所属していないので（ステップＳ１５４のノー）、ステップＳ２０２で要素に対して検知書き込みが実行され、プログラム電圧Ｖ０が検知される。ステップＳ２０４でグループ代表値がＶ０であるグループがあるか否か、かつグループ代表値がＶ０である場合は要素が所属条件を満たすか否か判定される。グループ０、１ともグループ代表値はＶ０であるが、要素（ワード線ＷＬ２）はいずれのグループの所属条件（ワード線範囲）を満たさないので、グループ代表値がＶ０である新グループ２が作成され、要素が新グループ２に所属する。この結果、ステップＳ２０８で要素・グループテーブルに斜線で示すブロック０のワード線範囲ＷＬ２〜ＷＬ３１のグループ２のエントリが追加され、グループテーブルに斜線で示すグループ２のエントリが追加され、承継先テーブルにも斜線で示すループ２のエントリが追加される。グループ２の所属条件であるワード線範囲とＰ／Ｅサイクル範囲は、書き換え回数テーブル（斜線で示すブロック０のエントリ）とＰ／Ｅサイクル幅テーブル（斜線で示すワード線範囲ＷＬ２〜ＷＬ３１のエントリ）を参照して設定される。ここで、Ｐ／Ｅサイクル数＜Ｐ／Ｅサイクル幅であれば、所属条件のＰ／Ｅサイクル範囲はＰ／Ｅサイクル幅テーブルから取得できる。しかし、例えばＰ／Ｅサイクル数＝１０２０のときは、サイクル幅テーブルとＰ／Ｅサイクル数から所属条件のＰ／Ｅサイクル範囲を計算する。例えば、現在のＰ／Ｅサイクル回数をｋ、Ｐ／Ｅサイクル幅をＮとするならば、Ｎ＊Ｍ≦ｋ＜Ｎ＊（Ｍ＋１）（ただし、Ｍは整数）を満たすＭを求め、Ｐ／Ｅサイクル範囲をＮ＊Ｍ〜Ｎ＊（Ｍ＋１）としてもよい。
【０１９３】
図４９は、グループに所属しない要素が既存のグループに合流するとき、例えば図４６のステップＳ１５６の「合流１」処理の中のステップＳ２０４、Ｓ２０６のテーブルの状態を示す。要素・グループテーブルは斜線（３行目）のエントリは未登録の状態で、対象の要素はブロック１のワード線ＷＬ０の要素である場合を説明する。
【０１９４】
要素（ブロック１、ワード線ＷＬ０）はどのグループにも所属していないので（ステップＳ１５４のノー）、ステップＳ２０２で検知書き込みが実行され、プログラム電圧Ｖ０が検知される。ステップＳ２０４でグループ代表値がＶ０であるグループがあるか否か、かつある場合は要素が所属条件を満たすか否か判定される。グループ０、１ともグループ代表値はＶ０である。要素（ワード線ＷＬ０）はグループ０の所属条件（ワード線範囲ＷＬ０）を満たし、かつ要素（ブロック１）のＰ／Ｅサイクル数は２０であり、グループ０の所属条件（Ｐ／Ｅサイクル範囲：０−１００）を満たす。要素をグループ０に所属させるために、ステップＳ２０６で要素・グループテーブルに斜線で示すようなブロック１のワード線範囲ＷＬ０のグループ０のエントリが追加される。
【０１９５】
図５０は、グループに所属する要素がグループから放出され、新たに作成されたグループに合流する際のテーブルの状態を示す。例えば、図５０は図４６のフローチャートのステップＳ１５４のイエスの時、ステップＳ１５８のノーの時、ステップＳ１６６のノーの時、ステップＳ１６８のノーの時のテーブルの状態を示す。グループ０、１が定義され、グループテーブル、承継先テーブルは斜線（３行目）のエントリは未登録の状態で、対象の要素はブロック１のワード線ＷＬ０の要素である場合を説明する。
【０１９６】
要素（ブロック１、ワード線ＷＬ０）はグループ０に所属しているが、要素（ブロック１）の書き換え回数は１０１回であり、グループ０の所属条件（Ｐ／Ｅサイクル範囲：０-１００）を満たさない。グループ０の承継先が定義されていないので、要素に対して検知書き込みが実行され、プログラム電圧Ｖ１が検知される。グループ代表値がＶ１である新グループ２が作成され、要素はグループ２に所属する。この結果、要素・グループテーブルのブロック１・ワード線範囲０のグループインデックスが０から２に変更され、グループテーブルに斜線で示すグループ２のエントリが追加される。グループ２の所属条件であるワード線範囲とＰ／Ｅサイクル範囲は、書き換え回数テーブル（斜線で示すブロック１のエントリ）とＰ／Ｅサイクル幅テーブル（斜線で示すワード線範囲ＷＬ０）を参照して設定される。承継先テーブルのグループ０の承継先グループは２に設定される。
【０１９７】
図５１は、抜き取り検査の結果、要素が元のグループに滞留するとき、例えば図４６のステップＳ１６２の「合流２」処理の中のステップＳ３０４のノーの場合のテーブルの状態を示す。抜き取り検査の対象はブロック０のワード線ＷＬ０の要素である場合を説明する。
【０１９８】
要素（ブロック０、ワード線ＷＬ０）はグループ０に所属しており、検知予約フラグが１であるので、ステップＳ１６０で検知予約フラグが０とされる。ステップＳ３０２で要素に対して検知書き込みが実行され、プログラム電圧Ｖ０が検知される。プログラム電圧Ｖ０はグループ０のグループ代表値Ｖ０と一致するので、要素はグループ０に滞留する。
【０１９９】
図５２は、抜き取り検査の結果、要素が所属グループから追放され、新たに作成されたグループに合流するとき、例えば図４６のステップＳ１６２の「合流２」処理の中のステップＳ３０２、Ｓ３０４のイエス、Ｓ３０６、Ｓ３０８のイエス、Ｓ３１０のテーブルの状態を示す。グループ０が定義されている状態で、抜き取り検査の対象はブロック０のワード線ＷＬ０の要素である場合を説明する。
【０２００】
要素（ブロック０、ワード線ＷＬ０）はグループ０に所属しており、検知予約フラグが１であるので、ステップＳ１６０で検知予約フラグが０とされる。ステップＳ３０２で要素に対して検知書き込みが実行され、プログラム電圧Ｖ１が検知される。プログラム電圧Ｖ１はグループ０のグループ代表値Ｖ０と異なるので、要素はグループ０から追放される。追放された要素が所属するグループが探されるが、グループ代表値Ｖ１のグループが存在しないので、新グループ１が作成される。この結果、要素・グループテーブルのブロック０・ワード線範囲０のグループインデックスが０から１に変更され、グループテーブルに斜線で示すグループ１のエントリが追加される。グループ１の所属条件であるワード線範囲とＰ／Ｅサイクル範囲は、書き換え回数テーブル（ブロック０のエントリ）と、Ｐ／Ｅサイクル幅テーブル（ワード線範囲、Ｐ／Ｅサイクル幅）を参照して設定される。
【０２０１】
図５３は、承継先が定義されていないグループに所属する要素が所属条件を満たさなくなり、他のグループに所属を変更するとき、例えば図４６のステップＳ１７０、Ｓ１７２のテーブルの状態を示す。対象の要素はブロック０のワード線ＷＬ０の要素である場合を説明する。
【０２０２】
要素（ブロック０、ワード線ＷＬ０）はグループ０に所属しているが、ブロック０の書き換え回数１０１回がグループ０のＰ／Ｅサイクル範囲（０-１００回）外であるので、要素はグループ０から放出される。グループ０の承継先は未定義であるので、要素に対して検知書き込みが実行され、プログラム電圧Ｖ１が検知される。グループ代表値がＶ１であるグループがあるか否か、かつある場合は要素が所属条件を満たすか否か判定される。グループ２がグループ代表値はＶ１である。要素（ブロック０）の書き換え回数１０１はグループ２の所属条件（Ｐ／Ｅサイクル数範囲：１０１−２００）を満たし、要素のワード線ＷＬ０もグループ２の所属条件（ワード線範囲ＷＬ０）を満たす。この結果、要素をグループ２に所属させるために、要素・グループテーブルのブロック０、ワード線ＷＬ０のグループインデックスが０から２に変更され、承継先テーブルで承継先が未定義であるグループ０の承継先がグループ２に設定される。
【０２０３】
もしも、グループ代表値がＶ１であるグループが無い場合は、グループ代表値はＶ１である新グループが作成される。
【０２０４】
図５４は、承継先が定義されているグループに所属する要素が所属条件を満たさなくなり、承継が行われるとき、例えば図４６のステップＳ１６８、Ｓ１７６のテーブルの状態を示す。対象の要素はブロック０のワード線ＷＬ０の要素である場合を説明する。
【０２０５】
要素（ブロック０、ワード線ＷＬ０）はグループ０に所属しているが、ブロック０の書き換え回数１０１回がグループ０のＰ／Ｅサイクル範囲（０-１００回）外であるので、要素はグループ０から放出される。グループ０の承継先としてグループ２が定義されているので、要素・グループテーブルのブロック０、ワード線ＷＬ０のグループインデックスが０から２に変更される。承継では、検知書き込みは行われずに、要素が所属するグループが変更される。これによって、検知書き込みの頻度を下げることができる。
【０２０６】
以上のように、グループに所属していない要素に対して検知書き込みが実行され、書き込みパラメータが求められる。求められた書き込みパラメータに基づいて要素が既存のグループに所属するか、新規に作成するグループに所属するかが決定される。グループには要素の特性変化を検出するための所属条件が定義され、要素がこの所属条件を満たしていないと、要素の特性は変化していると判断される。書き込み処理の前に、要素がグループの所属条件を満たすか否かが判定され、満たしていない場合、他のグループに所属が変更される。このため、コントローラ２００が検知書き込みにより求められた要素の書き込み及びグループの所属条件に基づいて要素を動的に構成し直すことができ、グループの要素の特性が変化しても、グループ内の要素に対して実行された検知書き込みにより求められた書き込みパラメータを用いてグループ内の他の要素に対して適用書き込みを実行することで、プログラム時間を短縮することができる。
【０２０７】
図２４から図５４ではメモリセルトランジスタに複数ビットのデータを１つプログラムコマンドにより一括して書き込むことを想定していた。メモリセルトランジスタに複数ビットのデータを多段階で書き込む方式で、１段目の書き込みのみで検知書き込みをする場合は、１段目の書き込みとそれ以外の段の書き込みでは、目標とする閾値電圧分布が異なるので、所望の書き込み性能に関するプログラム電圧の初期値も異なることが多い。１段目の書き込みで図４６に示す処理によりグループが再構成される。その他の段の書き込みでは、１段目の書き込みパラメータに基づいてその他の段の書き込みパラメータを推測することによって適用書き込みを行ってもよい。また、各段の書き込み毎に検知書き込みを行なう場合は、書き込み段階ごとにグループテーブルを作成してもよい。これにより、書き込み段階ごとにグループが作成されるので，段階ごとに検知書き込み／適用書き込みの判定が可能となる。
【０２０８】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【符号の説明】
【０２０９】
１００…フラッシュメモリ、１１０…メモリセルアレイ、１７０…シーケンサ、１７０Ａ…レジスタ、２００…コントローラ、２１０…ホストＩ／Ｆコントローラ、２２０…ＲＡＭ、２５０…ＮＡＮＤＩ／Ｆコントローラ、３００…ホスト機器。
【図１】
2019061731.tif 000003
【図２】
2019061731.tif 000004
【図３】
2019061731.tif 000005
【図４】
2019061731.tif 000006
【図５】
2019061731.tif 000007
【図６】
2019061731.tif 000008
【図７Ａ】
2019061731.tif 000009
【図７Ｂ】
2019061731.tif 000010
【図７Ｃ】
2019061731.tif 000011
【図８】
2019061731.tif 000012
【図９】
2019061731.tif 000013
【図１０】
2019061731.tif 000014
【図１１】
2019061731.tif 000015
【図１２】
2019061731.tif 000016
【図１３】
2019061731.tif 000017
【図１４】
2019061731.tif 000018
【図１５】
2019061731.tif 000019
【図１６】
2019061731.tif 000020
【図１７】
2019061731.tif 000021
【図１８】
2019061731.tif 000022
【図１９】
2019061731.tif 000023
【図２０】
2019061731.tif 000024
【図２１】
2019061731.tif 000025
【図２２】
2019061731.tif 000026
【図２３】
2019061731.tif 000027
【図２４】
2019061731.tif 000028
【図２５】
2019061731.tif 000029
【図２６】
2019061731.tif 000030
【図２７】
2019061731.tif 000031
【図２８】
2019061731.tif 000032
【図２９】
2019061731.tif 000033
【図３０】
2019061731.tif 000034
【図３１】
2019061731.tif 000035
【図３２】
2019061731.tif 000036
【図３３】
2019061731.tif 000037
【図３４】
2019061731.tif 000038
【図３５】
2019061731.tif 000039
【図３６】
2019061731.tif 000040
【図３７】
2019061731.tif 000041
【図３８】
2019061731.tif 000042
【図３９】
2019061731.tif 000043
【図４０】
2019061731.tif 000044
【図４１】
2019061731.tif 000045
【図４２】
2019061731.tif 000046
【図４３】
2019061731.tif 000047
【図４４】
2019061731.tif 000048
【図４５】
2019061731.tif 000049
【図４６】
2019061731.tif 000050
【図４７Ａ】
2019061731.tif 000051
【図４７Ｂ】
2019061731.tif 000052
【図４８】
2019061731.tif 000053
【図４９】
2019061731.tif 000054
【図５０】
2019061731.tif 000055
【図５１】
2019061731.tif 000056
【図５２】
2019061731.tif 000057
【図５３】
2019061731.tif 000058
【図５４】
2019061731.tif 000059