(57)【要約】【課題】ホストの要求に対する応答時間を短縮させること。【解決手段】実施形態のメモリシステムは、不揮発性メモリにイレース及びプログラムの少なくともいずれかの処理をさせる第１の処理を不揮発性メモリが実行中に不揮発性メモリに実行させる他の処理の要求が発生した場合に、第１の処理の所定区切りまで待たずに第１の処理をサスペンドさせる第２のコマンドに従う第２の処理、及び、第１の処理の所定区切りまで待って第１の処理をサスペンドさせる第３のコマンドに従う第３の処理のうちいずれか１つの処理を選択して不揮発性メモリに実行させる。【選択図】図１
2020155182.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
前記不揮発性メモリの動作を制御するメモリコントローラと、を備え、
前記メモリコントローラは、
前記不揮発性メモリにイレース及びプログラムの少なくともいずれかの処理をさせる第１のコマンドに従う第１の処理を前記不揮発性メモリが実行中に前記不揮発性メモリに実行させる他の処理の要求が発生した場合に、
前記第１の処理の所定区切りまで待たずに前記第１の処理をサスペンドさせる第２のコマンドに従う第２の処理、及び、
前記第１の処理の所定区切りまで待って前記第１の処理をサスペンドさせる第３のコマンドに従う第３の処理、のうちいずれか１つの処理を選択して前記不揮発性メモリに実行させる、
メモリシステム。
【請求項２】
前記不揮発性メモリは、
前記第２の処理によりサスペンドされた前記第１の処理を再開するときは、サスペンドのタイミングに応じ、一部の処理を巻き戻して重複して前記第１の処理を実行し、または、一部の処理を巻き戻すことなく前記第１の処理を実行し、
前記第３の処理によりサスペンドされた前記第１の処理を再開するときは、一部の処理を巻き戻すことなく前記所定区切り後から前記第１の処理を実行する、
請求項１に記載のメモリシステム。
【請求項３】
前記メモリコントローラは、さらに、
前記不揮発性メモリが前記第１の処理を実行中に前記他の処理の要求が発生した場合であっても、所定の条件を満たした場合においては、前記第２の処理および前記第３の処理のいずれも選択することなく前記不揮発性メモリに前記第１の処理を継続させる、
請求項１に記載のメモリシステム。
【請求項４】
前記不揮発性メモリは、
複数のメモリセルを各々含む複数のブロックを有し、
前記メモリコントローラは、
前記不揮発性メモリのイレース済みブロック数がａ個の場合に前記第２の処理を選択し、
前記不揮発性メモリの前記イレース済みブロック数がｂ個（ただし、ａ＞ｂ）の場合に前記第３の処理を選択し、
前記不揮発性メモリの前記イレース済みブロック数がｃ個（ただし、ｂ＞ｃ）の場合に前記第２の処理および前記第３の処理のいずれも選択しない、
請求項３に記載のメモリシステム。
【請求項５】
前記メモリコントローラは、
ホストからのライト要求のうち未応答のライト要求数がａ個の場合に前記第２の処理を選択し、
前記ホストからの前記ライト要求のうち未応答の前記ライト要求数がｂ個（ただし、ａ＜ｂ）の場合に前記第３の処理を選択し、
前記ホストからの前記ライト要求のうち未応答の前記ライト要求数がｃ個（ただし、ｂ＜ｃ）の場合に前記第２の処理および前記第３の処理のいずれも選択しない、
請求項３に記載のメモリシステム。
【請求項６】
前記メモリコントローラは、
ホストからのリード要求数およびライト要求数の合計数に対するリード要求数の比率がａの場合に前記第２の処理を選択し、
前記ホストからの前記リード要求数および前記ライト要求数の前記合計数に対する前記リード要求数の前記比率がｂ（ただし、ａ＞ｂ）の場合に前記第３の処理を選択し、
前記ホストからの前記リード要求数および前記ライト要求数の前記合計数に対する前記リード要求数の前記比率がｃ（ただし、ｂ＞ｃ）の場合に前記第２の処理および前記第３の処理のいずれも選択しない、
請求項３に記載のメモリシステム。
【請求項７】
前記メモリコントローラは、
ホストから受信したデータであって、前記不揮発性メモリへのライト待ちのデータ量がａである場合に前記第２の処理を選択し、
前記不揮発性メモリへのライト待ちの前記データ量がｂ（ただし、ａ＜ｂ）である場合に前記第３の処理を選択し、
前記不揮発性メモリへのライト待ちの前記データ量がｃ（ただし、ｂ＜ｃ）である場合に前記第２の処理および前記第３の処理のいずれも選択しない、
請求項３に記載のメモリシステム。
【請求項８】
前記メモリコントローラは、
前記第１の処理の実行対象のブロックにおける前記不揮発性メモリの初期状態から現在までのプログラム及びイレースのサイクル数がａ回の場合に前記第２の処理を選択し、
前記第１の処理の実行対象の前記ブロックにおける前記不揮発性メモリの初期状態から現在までのプログラム及びイレースの前記サイクル数がｂ回（ただし、ａ＜ｂ）の場合に前記第３の処理を選択し、
前記第１の処理の実行対象の前記ブロックにおける前記不揮発性メモリの初期状態から現在までのプログラム及びイレースの前記サイクル数がｃ回（ただし、ｂ＜ｃ）の場合に前記第２の処理および前記第３の処理のいずれも選択しない、
請求項３に記載のメモリシステム。
【請求項９】
前記メモリコントローラは、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドした回数がａ回の場合に前記第２の処理を選択し、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドした前記回数がｂ回（ただし、ａ＜ｂ）の場合に前記第３の処理を選択し、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドした前記回数がｃ回（ただし、ｂ＜ｃ）の場合に前記第２の処理および前記第３の処理のいずれも選択しない、
請求項３に記載のメモリシステム。
【請求項１０】
前記メモリコントローラは、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドしている間に実行したリードの回数がａ回の場合に前記第２の処理を選択し、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドしている間に実行した前記リードの回数がｂ回（ただし、ａ＜ｂ）の場合に前記第２の処理を選択し、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドしている間に実行した前記リードの回数がｃ回（ただし、ｂ＜ｃ）の場合に前記第２の処理および前記第３の処理のいずれも選択しない、
請求項３に記載のメモリシステム。
【請求項１１】
前記メモリコントローラは、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドしていた期間が期間ａの場合に前記第２の処理を選択し、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドしていた前記期間が期間ｂ（ただし、ａ＜ｂ）の場合に前記第３の処理を選択し、
前記不揮発性メモリが実行中の前記第１の処理をサスペンドしていた前記期間が期間ｃ（ただし、ｂ＜ｃ）の場合に前記第２の処理および前記第３の処理のいずれも選択しない、
請求項３に記載のメモリシステム。
【請求項１２】
前記メモリコントローラは、
１つの前記第１の処理あたりの前記第２の処理の回数または前記第３の処理の回数のうち少なくともいずれかを制限する、
請求項１に記載のメモリシステム。
【請求項１３】
前記不揮発性メモリは、
複数のメモリセルを各々含む複数のブロックを有し、
前記メモリコントローラは、
前記第２の処理の所定期間における実行回数、
前記第３の処理の所定期間における実行回数、及び
前記第１の処理の実行対象のブロックにおける過去のプログラム及びイレースのサイクル数、のうち、少なくともいずれかに応じて、前記第２の処理の回数または前記第３の処理の回数のうち少なくともいずれかを制限する、
請求項１２に記載のメモリシステム。
【請求項１４】
複数のブロックを有する不揮発性メモリと、
前記不揮発性メモリの動作を制御するメモリコントローラと、を備え、
前記メモリコントローラは、
前記不揮発性メモリにイレース及びプログラムの少なくともいずれかの処理をさせる第１のコマンドに従う第１の処理を前記不揮発性メモリが実行中に前記不揮発性メモリに実行させる他の処理の要求が発生した場合に、
前記不揮発性メモリのイレース済みブロック数、
ホストからの要求のうち未応答の要求数、
前記ホストからのライト要求数及びリード要求数の合計数に対する前記リード要求数の比率、
前記ホストから受信したデータであって、不揮発性メモリへのライト処理待ちのデータ量、並びに、
前記第１の処理の実行対象のブロックにおける前記不揮発性メモリの初期状態から現在までのプログラム・イレースのサイクル数、のうち、少なくともいずれかに応じて前記第１の処理をサスペンドさせるか否かを制御して前記他の処理を前記不揮発性メモリに実行させる、
メモリシステム。
【請求項１５】
メモリコントローラによって動作を制御される不揮発性メモリであって、
イレース及びライトの少なくともいずれかを実行する第１の処理の実行中に前記メモリコントローラからの要求があった場合に、
前記メモリコントローラからの、
前記第１の処理の所定区切りまで待たずに前記第１の処理をサスペンドする第２の処理に関するコマンド、及び、
前記第１の処理の所定区切りまで待って前記第１の処理をサスペンドする第３の処理に関するコマンド、を受け付ける、
不揮発性メモリ。
【請求項１６】
不揮発性メモリと、
前記不揮発性メモリの動作を制御するメモリコントローラと、を備え、
前記メモリコントローラは、
前記不揮発性メモリがビジーであるときに前記不揮発性メモリに対して発行するサスペンドコマンドであって、前記不揮発性メモリがレディになるまでの最大時間が互いに異なる第１のサスペンドコマンドと第２のサスペンドコマンドとを有する、
メモリシステム。
【請求項１７】
メモリセルを有する不揮発性メモリと、
前記不揮発性メモリの動作を制御するメモリコントローラと、を備え、
前記メモリコントローラは、
前記不揮発性メモリにイレース及びプログラムの少なくともいずれかの処理をさせる第１のコマンドに従う第１の処理を前記不揮発性メモリが実行中に前記不揮発性メモリに実行させる第２の処理の要求が発生した場合に、前記不揮発性メモリに対して発行するサスペンドコマンドであって、
サスペンドされた前記第１の処理を前記不揮発性メモリが再開するとき、サスペンドのタイミングに応じ、サスペンド前に前記メモリセルに印加されていた電圧値と同じ電圧値の電圧が前記メモリセルに印加され、または、サスペンド前に前記メモリセルに印加されていた電圧値よりも高い電圧値の電圧が前記メモリセルに印加される第２のコマンド、及び、
サスペンドされた前記第１の処理を前記不揮発性メモリが再開するとき、サスペンド前に前記メモリセルに印加されていた電圧値よりも高い電圧値の電圧が前記メモリセルに印加される第３のコマンド、のうちいずれか１つのコマンドを前記不揮発性メモリに対して発行する、
メモリシステム。
【請求項１８】
前記第２のコマンドを受信した前記不揮発性メモリは、
サスペンドされた前記第１の処理を再開するとき、サスペンドのタイミングに応じ、一部の処理を巻き戻して重複して実行することで前記第１の処理を再開し、または、一部の処理を巻き戻すことなく前記第１の処理を再開し、
前記第３のコマンドを受信した前記不揮発性メモリは、
サスペンドされた前記第１の処理を再開するとき、一部の処理を巻き戻すことなく前記第１の処理を再開する、
請求項１７に記載のメモリシステム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステム及び不揮発性メモリに関する。
【背景技術】
【０００２】
近年、不揮発性メモリであるＮＡＮＤ型フラッシュメモリの大容量化が進行し、このようなＮＡＮＤ型フラッシュメモリを搭載したメモリシステムとして、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）が注目されている。
【０００３】
ＳＳＤにおいては、先行して行われるイレースまたはプログラム等の処理の実行中にホストからの要求に関わる処理等の他の処理を実行する必要が生じた場合には、先行するイレースまたはプログラム等の処理と、他の処理とのどちらを優先させるかが問題となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１７／０２６２２２９号明細書
【特許文献２】米国特許第９，８８６，２１４号明細書
【特許文献３】米国特許第８，３６４，８８８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一つの実施形態は、ホストからの要求に対する応答時間を短縮させることができるメモリシステム及び不揮発性メモリを提供することを目的とする。
【課題を解決するための手段】
【０００６】
実施形態のメモリシステムは、不揮発性メモリと、前記不揮発性メモリの動作を制御するメモリコントローラと、を備え、前記メモリコントローラは、前記不揮発性メモリにイレース及びプログラムの少なくともいずれかの処理をさせる第１のコマンドに従う第１の処理を前記不揮発性メモリが実行中に前記不揮発性メモリに実行させる他の処理の要求が発生した場合に、前記第１の処理の所定区切りまで待たずに前記第１の処理をサスペンドさせる第２のコマンドに従う第２の処理、及び、前記第１の処理の所定区切りまで待って前記第１の処理をサスペンドさせる第３のコマンドに従う第３の処理、のうちいずれか１つの処理を選択して前記不揮発性メモリに実行させる。
【図面の簡単な説明】
【０００７】
【図１】図１は、実施形態にかかるメモリシステムの概略構成例を示すブロック図である。
【図２】図２は、実施形態にかかるＮＡＮＤメモリのブロック図である。
【図３】図３は、実施形態にかかるメモリコントローラが保有するイレースサスペンド計画テーブルの一例を示す図である。
【図４】図４は、実施形態にかかるメモリコントローラが保有するイレースサスペンド残り回数レジスタの一例を示す図である。
【図５】図５は、実施形態にかかるメモリコントローラが保有するプログラムサスペンド計画テーブルの一例を示す図である。
【図６】図６は、実施形態にかかるメモリコントローラが保有するプログラムサスペンド残り回数レジスタの一例を示す図である。
【図７】図７は、実施形態にかかるメモリコントローラの制御部の機能ブロックを示す図である。
【図８】図８は、実施形態にかかるホスト、メモリコントローラ、及びＮＡＮＤメモリ間のデータフローの一例を示す図である。
【図９】図９は、実施形態にかかるメモリコントローラ、及びＮＡＮＤメモリ間のデータフローの一例を示す図である。
【図１０】図１０は、実施形態にかかるＮＡＮＤメモリにおけるイレース時の電圧印加のタイミングチャートの一例を示す図である。
【図１１】図１１は、実施形態にかかるＮＡＮＤメモリにおけるプログラム時の電圧印加のタイミングチャートの一例を示す図である。
【図１２】図１２は、実施形態にかかるＮＡＮＤメモリにおけるプログラム時の電圧印加のタイミングチャートの他の例を示す図である。
【図１３】図１３は、実施形態にかかるメモリシステムにおけるイレースサスペンドのコマンドシーケンスの一例を示す図である。
【図１４】図１４は、実施形態にかかるメモリシステムにおけるプログラムサスペンドのコマンドシーケンスの一例を示す図である。
【図１５】図１５は、実施形態にかかるメモリコントローラによるイレース時における巻き戻り有り／無しサスペンドの計画数を決定する処理の手順の一例を示すフロー図である。
【図１６】図１６は、実施形態にかかるメモリシステムにおけるイレースサスペンド処理の手順の一例を示すフロー図である。
【図１７】図１７は、実施形態にかかるメモリシステムが管理する巻き戻り有り／無しサスペンドの残り回数の時系列変化を示す図である。
【図１８】図１８は、実施形態にかかるメモリコントローラによるプログラム時における巻き戻り有り／無しサスペンドの計画数を決定する処理の手順の一例を示すフロー図である。
【図１９】図１９は、実施形態にかかるメモリシステムにおけるプログラムサスペンド処理の手順の一例を示すフロー図である。
【図２０】図２０は、実施形態の変形例１にかかるメモリコントローラが保有するイレースサスペンド計画テーブルの一例を示す図である。
【図２１】図２１は、実施形態の変形例１にかかるメモリコントローラが保有するライトのキューデプス（ＱＤ：Ｑｕｅｕｅ  Ｄｅｐｔｈ）に基づく計画補正テーブルの一例を示す図である。
【図２２】図２２は、実施形態の変形例２にかかるメモリコントローラが保有するプログラム／イレース回数に基づく計画補正テーブルの一例を示す図である。
【図２３】図２３は、実施形態の変形例３にかかるメモリコントローラが保有するリード要求の発行比率に基づく計画補正テーブルの一例を示す図である。
【図２４】図２４は、実施形態の変形例５にかかるメモリコントローラが保有する計画補正テーブルの一例を示す図である。
【図２５】図２５は、実施形態の変形例６にかかるメモリコントローラが保有するプログラムサスペンド回数制限テーブルの一例を示す図である。
【図２６】図２６は、実施形態の変形例７にかかるメモリコントローラが保有するイレースサスペンド計画設定時刻レジスタの一例を示す図である。
【図２７】図２７は、実施形態の変形例７にかかるメモリシステムにおけるイレースサスペンド計画の設定処理の手順の一例を示すフロー図である。
【図２８】図２８は、実施形態の変形例７にかかるメモリシステムが管理する巻き戻り有り／無しサスペンドの残り回数の時系列変化を示す図である。
【図２９】図２９は、実施形態の変形例７にかかるメモリシステムが管理する巻き戻り有り／無しサスペンドの残り回数の他の時系列変化を示す図である。
【発明を実施するための形態】
【０００８】
以下に、本発明の実施形態につき図面を参照しつつ詳細に説明する。なお、下記の実施形態により、本発明が限定されるものではない。また、下記実施形態における構成要素には、当業者が容易に想定できるものあるいは実質的に同一のものが含まれる。
【０００９】
（メモリシステムの構成例）
図１は、実施形態にかかるメモリシステム１の概略構成例を示すブロック図である。図１に示すように、メモリシステム１は、メモリコントローラ１０と不揮発性メモリとしてのＮＡＮＤ型フラッシュメモリ２０（以下、単にＮＡＮＤメモリ２０ともいう）とを備える。
【００１０】
メモリシステム１は、メモリコントローラ１０とＮＡＮＤメモリ２０とが１つのパッケージとして構成されるメモリカード等であってもよいし、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等であってもよい。メモリシステム１は、ホスト３０と接続可能である。ホスト３０は、例えば、パーソナルコンピュータ、サーバ、ストレージボックスなどの情報処理装置、携帯電話、撮像装置であってもよいし、タブレットコンピュータやスマートフォンなどの携帯端末であってもよいし、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。
【００１１】
ＮＡＮＤメモリ２０は、データを不揮発に記憶する不揮発性メモリである。ＮＡＮＤメモリ２０は複数のメモリチップにより構成されていてもよい。以下の説明では、不揮発性メモリとしてＮＡＮＤメモリが用いられた場合について説明するが、不揮発性メモリの例はこれに限られない。不揮発性メモリは、例えば、ＮＯＲ型のフラッシュメモリ、３次元構造フラッシュメモリ、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の種々の記憶媒体のいずれかであってよい。また、不揮発性メモリが半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対しても本実施形態を適用することが可能である。
【００１２】
ＮＡＮＤメモリ２０は、複数のメモリセルがマトリックス状に配列されたメモリセルアレイＭＣＡを備える。メモリセルアレイＭＣＡは、それぞれが複数のメモリセルを含む複数のブロックＢＬＫを有する。ホスト３０からのデータは、メモリセルアレイＭＣＡ内に不揮発に記憶される。ＮＡＮＤメモリ２０の詳細について更に図２を用いて説明する。
【００１３】
図２は、実施形態にかかるＮＡＮＤメモリ２０のブロック図である。図２に示すように、ＮＡＮＤ型フラッシュメモリ２０は、コア部ＣＯＲ、入出力部ＩＯ、及び周辺回路ＰＥＲを備えている。
【００１４】
コア部ＣＯＲは、メモリセルアレイＭＣＡ、ロウデコーダＲＤ、及びセンスアンプＳＡを備えている。
【００１５】
メモリセルアレイＭＣＡは、不揮発性のメモリセルの集合である複数のブロックＢＬＫ（ＢＬＫ０、ＢＬＫ１、ＢＬＫ２、…）を備えている。ブロックＢＬＫの各々は、メモリセルが直列接続されたＮＡＮＤストリングＮＳの集合である複数のストリングユニットＳＵ（ＳＵ０、ＳＵ１、ＳＵ２、…）を備えている。メモリセルアレイＭＣＡ内のブロック数及びブロックＢＬＫ内のストリングユニット数およびＮＡＮＤストリング数は任意である。
【００１６】
上述のように、ひとつのＮＡＮＤストリングＮＳでは、複数のメモリセルが直列に接続される。同一のストリングユニットＳＵ内の複数のＮＡＮＤストリングＮＳ中のｎ番目のメモリセルは、Ｘ方向に延びる１つのワード線ＷＬに共通に接続される。複数のブロックＢＬＫ間におけるｍ番目のＮＡＮＤストリングＮＳは、Ｙ方向に延びる１つのビット線ＢＬに共通に接続される。このように、メモリセルは、複数のワード線ＷＬと複数のビット線ＢＬとのそれぞれが交差する点に配置されている。
【００１７】
ＮＡＮＤメモリ２０では、一般に、ブロックＢＬＫごとのデータ単位でイレースが行われ、ページと呼ばれるデータ単位でプログラム及びリードが行われる。本実施形態では、同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルが、１ビットを記憶するＳＬＣ（Ｓｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）である場合は、１つのメモリセルグループが１ページに対応する。メモリセルが、多値（２ビット以上のデータ）を記憶するＭＬＣ（Ｍｕｌｔｉｐｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）である場合は、１つのメモリセルグループが複数ページに対応する。各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
【００１８】
ロウデコーダＲＤは、メモリコントローラ１０から受信したブロックアドレスをデコードして、対応するブロックＢＬＫ及びワード線ＷＬを選択する。
【００１９】
センスアンプＳＡは、データのリード時には、メモリセルからリードしたデータをセンスして増幅する。そして、必要に応じてリードデータをメモリコントローラ１０へ出力する。またデータのプログラム時には、メモリコントローラ１０から受信したライトデータをメモリセルに転送する。
【００２０】
入出力部ＩＯは、メモリコントローラ１０との間で種々のコマンドやデータの送受信を司る。
【００２１】
周辺回路ＰＥＲは、シーケンサＳＥＱ、チャージポンプＣＨＰ、レジスタＲＥＧ、及びドライバＤＲＶを備える。
【００２２】
ドライバＤＲＶは、データのプログラム、リード、及びイレースに必要な電圧を、ロウデコーダＲＤやセンスアンプＳＡに供給する。この電圧が、メモリセルアレイＭＣＡ内の各種配線に印加される。チャージポンプＣＨＰは、外部から与えられる電源電圧を昇圧して、必要な電圧をドライバＤＲＶに供給する。レジスタＲＥＧは、種々の信号を保持する。例えば、データのプログラムやイレース動作のステータスを保持し、これによってメモリコントローラ１０に動作が正常に完了したか否かを通知する。シーケンサＳＥＱは、ＮＡＮＤメモリ２０全体の動作を制御する。
【００２３】
図１に示すメモリコントローラ１０は、例えばＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−Ｃｈｉｐ）として構成される半導体集積回路である。メモリコントローラ１０は、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）またはＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）として構成されていてもよい。メモリコントローラ１０は、ホスト３０からのライト要求に従ってＮＡＮＤメモリ２０へのデータのライトを制御する。また、ホスト３０からのリード要求に従ってＮＡＮＤメモリ２０からのデータのリードを制御する。
【００２４】
メモリコントローラ１０は、制御部１１、メモリインタフェース（メモリＩ／Ｆ）１３、ＲＡＭ１４、及びホストインタフェース（ホストＩ／Ｆ）１５を備える。制御部１１、メモリＩ／Ｆ１３、ＲＡＭ１４、及びホストＩ／Ｆ１５は、内部バスで相互に接続されている。
【００２５】
ホストＩ／Ｆ１５は、ＳＡＳ（Ｓｅｒｉａｌ−Ａｔｔａｃｈｅｄ  ＳＣＳＩ）（登録商標）、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）（登録商標）、ＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）（登録商標）、ＮＶＭｅ（ＮＶＭ  Ｅｘｐｒｅｓｓ）（登録商標）等のホスト３０との間のインタフェース規格に従った処理を実施し、ホスト３０から受信したリクエスト（要求）、ライト対象のデータ（ユーザデータ）などを内部バスに出力する。また、ホストＩ／Ｆ１５は、ＮＡＮＤメモリ２０からリードされたデータ（ユーザデータ）、制御部１１からの応答などをホスト３０へ送信する。なお、ホストＩ／Ｆ１５の機能のうちの一部または全部を後述の制御部１１が兼ね備えていてもよい。つまり、ホスト３０との情報のやり取りを制御部１１が直接行ってもよい。
【００２６】
メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、ＮＡＮＤメモリ２０とレディビジー信号Ｒ／Ｂ、入出力信号Ｉ／Ｏ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ等の種々の信号のやり取りを行う。レディビジー信号Ｒ／Ｂは、ＮＡＮＤメモリ２０がメモリコントローラ１０からのコマンドを受信できる状態（レディ状態）であるか否か（ビジー状態）を示す。入出力信号Ｉ／Ｏは、ＮＡＮＤメモリ２０とメモリコントローラ１０との間で送受信されるデータの実体であり、コマンド、アドレス、ライトデータ、リードデータ等を示す８ビット単位の信号である。コマンドラッチイネーブル信号ＣＬＥは、入力信号Ｉ／ＯがコマンドであることをＮＡＮＤメモリ２０に通知する。アドレスラッチイネーブル信号ＡＬＥは、入力信号Ｉ／ＯがアドレスであることをＮＡＮＤメモリ２０に通知する。
【００２７】
これらの信号を授受することにより、メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、ＮＡＮＤメモリ２０へのデータのプログラム処理およびイレース処理等を行う。また、メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、ＮＡＮＤメモリ２０からのデータのリード処理を行う。なお、メモリＩ／Ｆ１３の機能のうちの一部または全部を後述の制御部１１が兼ね備えていてもよい。つまり、ＮＡＮＤメモリ２０との情報のやり取りを制御部１１が直接行ってもよい。
【００２８】
制御部１１は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。制御部１１は、ファームウェアプログラムに基づいて動作する。例えば、メモリシステム１の製造時または出荷時において、ファームウェアプログラムはＮＡＮＤメモリ２０に予め格納されている。制御部１１は、メモリシステム１の起動時に、メモリコントローラ１０が備えるＲＡＭ１４にＮＡＮＤメモリ２０からファームウェアプログラムをロードする。制御部１１は、ＲＡＭ１４にロードされたファームウェアプログラムを実行することによって、各種機能を実現する。
【００２９】
このように、制御部１１の機能のうちの一部または全部は、例えば、ファームウェアを実行するＣＰＵによって実現される。ただし、制御部１１の機能のうちの一部または全部は、ファームウェアを実行するＣＰＵではなく、ハードウェア回路によって実現されてもよい。
【００３０】
制御部１１は、メモリシステム１の各構成要素を統括的に制御する。制御部１１は、ホスト３０からホストＩ／Ｆ１５経由で要求を受けた場合に、その要求に従った制御を行う。例えば、制御部１１は、ホスト３０からのライト要求に従って、ＮＡＮＤメモリ２０へのデータのプログラムをメモリＩ／Ｆ１３へ指示する。また、制御部１１は、ホスト３０からのリード要求に従って、ＮＡＮＤメモリ２０からのデータのリードをメモリＩ／Ｆ１３へ指示する。また、制御部１１は、ＮＡＮＤメモリ２０のデータのイレースをメモリＩ／Ｆ１３へ指示する。
【００３１】
制御部１１は、ホスト３０からライト要求を受信した場合、後述のライトバッファ１４ｇに蓄積されるデータに対して、ＮＡＮＤメモリ２０上の格納領域であるメモリセルアレイＭＣＡ内の領域を決定する。すなわち、制御部１１は、データのライト先を管理する。ホスト３０から受信したデータの論理アドレスと該データが格納されたＮＡＮＤメモリ２０上の格納領域を示す物理アドレスとの対応情報はアドレス変換テーブルとして管理される。
【００３２】
なお、メモリコントローラ１０がホスト３０からライト要求を受信してから、ＮＡＮＤメモリ２０へのプログラムが実際に実行されるまでにはタイムラグがある場合がある。その間、ホスト３０からのライト要求にかかるデータはライトバッファ１４ｇに一時的に格納される。ＮＡＮＤメモリ２０へのデータのプログラムは、例えばライトバッファ１４ｇに蓄積されるデータの不揮発化を行うフラッシュ処理等により実行される。
【００３３】
制御部１１は、ホスト３０からリード要求を受信した場合、リード要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからのデータのリードをメモリＩ／Ｆ１３へ指示する。
【００３４】
制御部１１は、例えばホスト３０からの要求が無くとも、ＮＡＮＤメモリ２０におけるイレースまたはプログラムをメモリＩ／Ｆ１３へ指示することがある。ホスト３０からの要求によらずにイレース及びプログラムが実行される場合としては、例えば記憶したデータの保全のために誤り訂正を施したデータを改めてライトするリフレッシュ処理、プログラム／イレース処理の実行回数を複数のブロックＢＬＫ間で平準化するために、ブロックＢＬＫ間でデータを転記するウェアレベリング処理、及びプログラム可能なブロックＢＬＫを確保するためにデータを所定のブロックＢＬＫに集約させるガベージコレクション（コンパクション）処理等が含まれる。また、リフレッシュ処理後、ウェアレベリング処理後、及びコンパクション処理後のデータ移動元のブロックＢＬＫに対しては、後にイレース処理が行われる。なお、上述のように、イレース処理は例えばブロックＢＬＫ単位で行われ、イレース処理の完遂までには長時間を要することがある。
【００３５】
制御部１１は、ＮＡＮＤメモリ２０がイレース及びプログラムの少なくともいずれかの処理を行っているときに、ホスト３０からの要求に関わる処理等の他の処理を実行する必要が生じたときは、上記先行する処理と、上記他の処理とのどちらを優先させるか決定する。なお、本実施形態において、「（他の）処理を実行する必要性（の発生）」と、「（他の）処理の要求（の発生）」とは同じ意味で使用している。
【００３６】
より具体的には、ＮＡＮＤメモリ２０が１以上のメモリチップによって構成されている場合、あるメモリチップにおいて上記先行する処理が行われているときに、当該メモリチップに対する上記他の処理を実行する必要が生じたとき、制御部１１は、上記先行する処理と上記他の処理とのどちらを優先させるかを決定する。他の処理を実行する必要性は、例えばホスト３０から例えばリードを要求するコマンドが発行されたとき、及びホスト３０から発行された例えばリードを要求するコマンドを、メモリコントローラ１０がコマンドキューから取り出すとき、つまり、イレース中にリード要求が発生し、または、プログラム中にリード要求が発生したとき、等に生じる。イレース中にホスト３０からの要求によるプログラム要求が発生することもある。
【００３７】
イレース及びプログラム等の先行する処理を優先させる際には、制御部１１は、先行する処理をサスペンドさせることなく、先行する処理を終了させた後、ホスト３０からの要求に応じた処理等の他の処理をＮＡＮＤメモリ２０に行わせる。ＮＡＮＤメモリ２０によるこのような処理を、以降、サスペンド無しの処理と呼ぶことがある。ホスト３０からの要求に応じた処理等の他の処理を優先させる際には、制御部１１は、ＮＡＮＤメモリ２０にサスペンドコマンドを発行して、先行する処理をサスペンドさせる。先行する処理のサスペンドには、巻き戻り有りサスペンドと、巻き戻り無しサスペンドとがある。
【００３８】
巻き戻り有りサスペンドは、先行する処理の後述する所定区切りまで待たずに、ＮＡＮＤメモリ２０に先行する処理をサスペンドさせる処理である。ホスト３０からの要求にしたがい、ＮＡＮＤメモリ２０が所定の処理を終えた後のタイミングで、サスペンドされた先行処理が再開される。巻き戻り有りサスペンドでは、先行処理の再開にあたって、一部の処理が巻き戻され、重複して実行される場合がある。
【００３９】
巻き戻り無しサスペンドは、先行する処理の所定区切りまで待って、ＮＡＮＤメモリ２０に先行する処理をサスペンドさせる処理である。ホスト３０からの要求にしたがい、ＮＡＮＤメモリ２０が所定の処理を終えた後のタイミングで、サスペンドされた先行処理が再開される。巻き戻り無しサスペンドでは、先行処理の再開にあたって、一部の処理が巻き戻されることなく、サスペンド時点の処理から以降の処理が再開される。つまり、先行する処理の所定区切りは、換言すれば、巻き戻りを必要とせず、サスペンド可能となるタイミングを意味する。このような所定区切りについては後に詳述する。
【００４０】
巻き戻り有り／無しサスペンドの選択は、ＮＡＮＤメモリ２０の状態に応じて、イレース及びプログラムの遅延がどの程度許容されるのかに基づいてなされる。ＮＡＮＤメモリ２０がイレース及びプログラムの遅延をより許容しうる状態であれば、巻き戻り有りサスペンドが選択される。ＮＡＮＤメモリ２０がイレース及びプログラムの遅延をあまり許容しうる状態になければ、巻き戻り無しサスペンドが選択される。ＮＡＮＤメモリ２０の状態によっては、巻き戻り有り／無しサスペンドのいずれも選択されない場合もある。ＮＡＮＤメモリ２０の状態と巻き戻り有り／無しサスペンドの選択との関係の詳細については後述する。
【００４１】
ＲＡＭ１４は、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの汎用メモリ等であり、例えばＣＰＵとして構成される制御部１１の作業領域に用いられる。
【００４２】
また、ＲＡＭ１４は、メモリコントローラ１０がホスト３０から受信したデータをＮＡＮＤメモリ２０へ記憶するまでに一時格納するライトバッファ１４ｇを備える。また、ＲＡＭ１４は、ＮＡＮＤメモリ２０からリードされたデータをホスト３０へ送信するまでに一時格納するリードバッファ１４ｈを備える。また、ＲＡＭ１４は、ＮＡＮＤメモリ２０によるコンパクション処理の際にデータを一時格納するコンパクションバッファ１４ｉを備える。コンパクションバッファ１４１は、例えばリフレッシュ処理およびウェアレベリング処理の際にもデータの一時格納先として用いられる。
【００４３】
また、ＲＡＭ１４は、管理データの格納に用いられる。管理データは、メモリシステム１の管理のためにメモリシステム１内で使用されるデータである。管理データは、例えば、イレース済みブロック数格納部１４ａ、イレースサスペンド計画テーブル１４ｂ、イレースサスペンド残り回数レジスタ１４ｃ、ライトバッファ空き容量格納部１４ｄ、プログラムサスペンド計画テーブル１４ｅ、及びプログラムサスペンド残り回数レジスタ１４ｆ等を含む。イレース済みブロック数格納部１４ａには、ＮＡＮＤメモリ２０の有するブロックＢＬＫのうち、データがイレースされているブロックＢＬＫの数が格納されている。ライトバッファ空き容量格納部１４ｄには、ＲＡＭ１４が有するライトバッファ１４ｇの空き容量が格納されている。イレースサスペンド計画テーブル１４ｂ、イレースサスペンド残り回数レジスタ１４ｃ、プログラムサスペンド計画テーブル１４ｅ、及びプログラムサスペンド残り回数レジスタ１４ｆは、メモリコントローラ１０がＮＡＮＤメモリ２０にサスペンドコマンドを発行するか否かを決定する際に参照される。
【００４４】
図３は、実施形態にかかるメモリコントローラ１０が保有するイレースサスペンド計画テーブル１４ｂの一例を示す図である。
【００４５】
図３に示すように、イレースサスペンド計画テーブル１４ｂには、イレース済みブロック数が、３，２，１，０ごとに、巻き戻り有り／無しサスペンドの計画数が示されている。イレースサスペンド計画テーブル１４ｂの各数値は、例えばメモリシステム１の出荷時等に設定される。図３に示すイレース済みブロック数の数値、及びこれらの数値に対する各計画数の数値はあくまでも例示である。イレースサスペンド計画テーブル１４ｂは、ＮＡＮＤメモリ２０に先行する処理として所定のブロックＢＬＫのイレースを行わせるにあたって、メモリコントローラ１０によって参照される。メモリコントローラ１０は、参照したイレースサスペンド計画テーブル１４ｂに基づき、イレースサスペンドの計画数を決定する。
【００４６】
例えば、イレース済みブロック数が充分に多いときは、多少のイレース処理の遅れは問題となり難い。そこで、巻き戻り有り／無しサスペンドのいずれかが選択され、他の処理が優先して実行される。巻き戻り有り／無しサスペンドのいずれを選択するかは、イレース済みブロック数の多寡による。イレース済みブロック数がより多ければ巻き戻り有りサスペンドが選択される。以下、イレース済みブロック数が少なくなるにつれ、イレース処理の遅延を極力避けるために、巻き戻り無しサスペンド、そして、サスペンド無しが選択される。図３におけるイレース済みブロック数、及び巻き戻り有り／無しサスペンドの計画数の例示的な数字における関係性からも、イレース済みブロック数の減少と共にイレースの遅延を許容しない方向へと向かうことが読み取れる。
【００４７】
図４は、実施形態にかかるメモリコントローラ１０が保有するイレースサスペンド残り回数レジスタ１４ｃの一例を示す図である。
【００４８】
図４に示すように、イレースサスペンド残り回数レジスタ１４ｃには、イレースサスペンド計画テーブル１４ｂに示される計画数に基づく数値が格納される。メモリコントローラ１０は、ＮＡＮＤメモリ２０にイレース処理を行わせるにあたり、イレースサスペンド計画テーブル１４ｂを参照して得た巻き戻り有り／無しサスペンドの計画数をそれぞれイレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの項目に登録する。その後、巻き戻り有り／無しサスペンドがそれぞれ実行される毎に、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの登録数を減じていく。
【００４９】
図５は、実施形態にかかるメモリコントローラ１０が保有するプログラムサスペンド計画テーブル１４ｅの一例を示す図である。
【００５０】
図５に示すように、プログラムサスペンド計画テーブル１４ｅには、ライトバッファ（ＷＢ）１４ｇの空き容量７０〜１００，５０〜７０，３０〜５０，０〜３０ごとの、巻き戻り有り／無しサスペンドの計画数が示されている。プログラムサスペンド計画テーブル１４ｅの各数値は、例えばメモリシステム１の出荷時等に設定される。図５に示すライトバッファ１４ｇの空き容量の数値、及びこれらの数値に対する各計画数の数値はあくまでも例示である。また、ライトバッファ１４ｇの空き容量の単位は、４ｋＢからなるエントリ（データ格納領域）の数である。プログラムサスペンド計画テーブル１４ｅは、ＮＡＮＤメモリ２０に先行する処理として所定のブロックＢＬＫへのプログラムを行わせるにあたって、メモリコントローラ１０によって参照される。メモリコントローラ１０は、参照したプログラムサスペンド計画テーブル１４ｅに基づき、プログラムサスペンドの計画数を決定する。
【００５１】
例えば、ライトバッファ１４ｇの空き容量が充分に多いときは、多少のプログラム処理の遅れは問題となり難い。そこで、巻き戻り有り／無しサスペンドのいずれかが選択され、他の処理が優先して実行される。巻き戻り有り／無しサスペンドのいずれを選択するかは、ライトバッファ１４ｇの空き容量の多寡による。ライトバッファ１４ｇの空き容量がより多ければ巻き戻り有りサスペンドが選択される。以下、ライトバッファ１４ｇの空き容量が少なくなるにつれ、プログラム処理の遅延を極力避けるために、巻き戻り無しサスペンド、そして、サスペンド無しが選択される。図５におけるライトバッファ１４ｇの空き容量、及び巻き戻り有り／無しサスペンドの計画数の例示的な数字における関係性からも、ライトバッファ１４ｇの空き容量の減少と共にプログラムの遅延を許容しない方向へと向かうことが読み取れる。
【００５２】
図６は、実施形態にかかるメモリコントローラ１０が保有するプログラムサスペンド残り回数レジスタ１４ｆの一例を示す図である。
【００５３】
図６に示すように、プログラムサスペンド残り回数レジスタ１４ｆには、プログラムサスペンド計画テーブル１４ｅに示される計画数に基づく数値が格納される。メモリコントローラ１０は、ＮＡＮＤメモリ２０にプログラム処理を行わせるにあたり、プログラムサスペンド計画テーブル１４ｅを参照して得た巻き戻り有り／無しサスペンドの計画数を、それぞれプログラムサスペンド残り回数レジスタ１４ｆの巻き戻り有り／無しサスペンドの項目に登録する。その後、巻き戻り有り／無しサスペンドがそれぞれ実行される毎に、プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り有り／無しサスペンドの登録数を減じていく。
【００５４】
（制御部の機能構成例）
図７は、実施形態にかかるメモリコントローラ１０の制御部１１の機能ブロックを示す図である。図７に示すように、制御部１１は、例えばＣＰＵがファームウェアを実行することによって実現される機能として、データ取得部１１ａ、演算部１１ｂ、及びコマンド発行部１１ｃを備える。これらの機能部により、制御部１１は、例えばＮＡＮＤメモリ２０の先行する処理に対するサスペンドを制御する。
【００５５】
データ取得部１１ａは、ＮＡＮＤメモリ２０が有する複数のブロックＢＬＫの中から、データがイレース済みのブロック数を取得してイレース済みブロック数格納部１４ａに格納する。イレース済みブロック数は、例えばこれまでに実行されたコンパクション処理等により有効データを有さないこととなったブロックＢＬＫのうちで、直近のプログラムのために予めイレースされたブロックＢＬＫの数である。
【００５６】
また、ライトバッファ１４ｇには、これまでに受信したホスト３０からのライト要求等に付随するＮＡＮＤメモリ２０へのプログラム待ちデータが一時的に格納され、ライトバッファ１４ｇの空き容量はこのプログラム待ちデータの量により変化する。データ取得部１１ａは、ライトバッファ１４ｇの現時点での空き容量を取得してライトバッファ空き容量格納部１４ｄに格納する。
【００５７】
演算部１１ｂは、ＮＡＮＤメモリ２０に先行する処理としてイレースを行わせるにあたって、イレース済みブロック数格納部１４ａからイレース済みブロック数を取得する。そして、演算部１１ｂは、イレースサスペンド計画テーブル１４ｂを参照して、巻き戻り有り／無しサスペンドの計画数を決定する。つまり、演算部１１ｂは、例えば、イレース済みブロック数が３であったときには、イレースサスペンド計画テーブル１４ｂ最上段の「イレース済みブロック数」が３の項目を参照し、巻き戻り有り／無しサスペンドの計画数が、それぞれ２回および０回となるように、コマンド発行部１１ｃにコマンドを発行させる。
【００５８】
また、演算部１１ｂは、ＮＡＮＤメモリ２０に先行する処理としてプログラムを行わせるにあたって、ライトバッファ空き容量格納部１４ｄからライトバッファ１４ｇの空き容量を取得する。そして、演算部１１ｂは、プログラムサスペンド計画テーブル１４ｅを参照して、巻き戻り有り／無しサスペンドの計画数を決定する。つまり、演算部１１は、例えば、ライトバッファ１４ｇの空き容量が５０であったときには、プログラムサスペンド計画テーブル１４ｅ最下段から２段目の「ＷＢの空き容量」が３０より多く５０以下の範囲を参照し、巻き戻り有り／無しサスペンドの計画数が、それぞれ０回および２回となるように、コマンド発行部１１ｃにコマンドを発行させる。
【００５９】
コマンド発行部１１ｃは、例えば、巻き戻り有り／無しサスペンドの計画数が、０回および２回となるように指示されたときは、これらの計画数を巻き戻り有り／無しサスペンドのそれぞれの上限数としてコマンドを発行する。つまり、巻き戻り有りサスペンドの上限数はゼロであるので、巻き戻り有りサスペンドコマンドの発行回数はゼロとする。また、巻き戻り無しサスペンドの上限数は２であるので、例えば１回あたりのイレース処理につき、コマンドの発行回数は２回までとする。巻き戻り有り／無しサスペンドの計画数が全て消尽された以降は、メモリコントローラ１０はいずれのサスペンドコマンドも発行せず、サスペンドすることなく、先行する処理の完了を待ってから他の処理を行わせる。
【００６０】
（データフロー）
次に、図８及び図９を用いて、ホスト３０、メモリコントローラ１０、及びＮＡＮＤメモリ２０間のデータフローについて説明する。図８は、実施形態にかかるホスト３０、メモリコントローラ１０、及びＮＡＮＤメモリ２０間のデータフローの一例を示す図である。
【００６１】
図８に示すように、メモリコントローラ１０は、例えばホスト３０からライト要求Ｒ３１を受けると共に、ライトバッファ１４ｇに領域を確保し、ホスト３０から受け取ったライトデータＤ１をライトバッファ１４ｇへ一時格納し、ホスト３０にライト処理の完了応答を行う。ライトバッファ１４ｇに所定量のライトデータがたまると、メモリコントローラ１０は、ＮＡＮＤメモリ２０に対してプログラムコマンドＣ１１を発行する。メモリコントローラ１０からＮＡＮＤメモリ２０へプログラムコマンドＣ１１が発行されると、それと共にライトバッファ１４ｇに一時格納されたライトデータＤ１がＮＡＮＤメモリ２０へ受け渡され、ＮＡＮＤメモリ２０のプログラム対象のブロックＢＬＫにプログラムされる。ＮＡＮＤメモリ２０にライトデータＤ１を転送すると、メモリコントローラ１０は、ライトバッファ１４ｇの領域を解放する。
【００６２】
メモリコントローラ１０は、例えばホスト３０からリード要求Ｒ３２を受けると、リード要求Ｒ３２に応じてリードコマンドＣ１２を発行する。メモリコントローラ１０からＮＡＮＤメモリ１０へリードコマンドＣ１２が発行されると、ＮＡＮＤメモリ２０のリード対象のブロックＢＬＫからリードデータＤ２がリードされ、メモリコントローラ１０のリードバッファ１４ｈに一時格納される。リードバッファ１４ｈに一時格納されたリードデータＤ２は、ホスト３０へと受け渡される。
【００６３】
例えばホスト３０からリード要求Ｒ３２等を受け取ったタイミングにおいて、ＮＡＮＤメモリ２０がイレース処理中の場合がある。ＮＡＮＤメモリ２０は、イレースコマンドＣ１３にしたがってイレース処理中であるときは、メモリコントローラ１０からのイレースステータスリードコマンドＣ１４に対してイレース処理中である旨の情報を返す。
【００６４】
このような場合、メモリコントローラ１０が、巻き戻り有りイレースサスペンドコマンドＣ１６、または巻き戻り無しイレースサスペンドコマンドＣ１７のいずれかを発行した後、リードコマンドＣ１２を発行する場合がある。ＮＡＮＤメモリ２０は実行中のイレース処理を中断し、ホスト３０からの要求にしたがう処理を優先的に実行し、例えばリードコマンドＣ１２に対してリードデータＤ２を返す。
【００６５】
ＮＡＮＤメモリ２０における優先処理が終了すると、メモリコントローラ１０はイレースリジュームコマンドＣ１５を発行し、ＮＡＮＤメモリ２０によるイレース処理を継続させる。
【００６６】
図９は、実施形態にかかるメモリコントローラ１０、及びＮＡＮＤメモリ２０間のデータフローの一例を示す図である。
【００６７】
図９に示すように、メモリコントローラ１０は、プログラム可能なブロックＢＬＫを確保するため、ＮＡＮＤメモリ２０にコンパクション処理を実行させて、データを所定のブロックＢＬＫに集約させる。ＮＡＮＤメモリ２０は、メモリコントローラ１０からの命令を受けて（Ｃ１８）、コンパクション元のブロックＢＬＫからデータをリード（コンパクションリード）する。また、ＮＡＮＤメモリ２０は、メモリコントローラ１０からの命令を受けて（Ｃ１９）、コンパクション先のブロックＢＬＫへデータをプログラムする。
【００６８】
コンパクション処理のためにリードされたリードデータＤ３は、メモリコントローラ１０のコンパクションバッファ１４ｉに一時的に格納される。そして、ライトデータＤ４としてＮＡＮＤメモリ２０に受け渡される。なお、上述のリフレッシュ処理およびウェアレベリング処理においてもＮＡＮＤメモリ２０に対してデータのリード及びプログラムが実行されるが、コンパクション処理と同様、このときのデータもコンパクションバッファ１４ｉに一時格納されてよい。
【００６９】
コンパクション処理後、リフレッシュ処理後、及びウェアレベリング処理後のデータの移動元のブロックＢＬＫは、フリーブロックとなり、ホスト３０からのライト要求に対するプログラム対象となる。ＮＡＮＤメモリ２０は、メモリコントローラ１０からの命令を受けて（Ｃ１３）、データの移動元のブロックＢＬＫからデータをイレースする。イレースのタイミングは、例えばイレース対象のブロックＢＬＫにデータをプログラムするタイミングに近いことが好ましい。これにより、イレース状態のブロックＢＬＫが長時間放置されてデータリテンション等の問題が生じることを抑制できる。
【００７０】
（イレース及びプログラムにおけるループ処理）
次に、図１０〜図１２を用いて、実施形態にかかるＮＡＮＤメモリ２０におけるループ処理について説明する。図１０は、実施形態にかかるＮＡＮＤメモリ２０におけるイレース時の電圧印加のタイミングチャートの一例を示す図である。図１０のタイミングチャートには、ＮＡＮＤメモリ２０の基板への印加電圧であるイレース電圧Ｖｅｒａを示すが、より詳細には、イレース時の電圧印加処理には、基板に印加されるイレース電圧Ｖｅｒａと、ワード線に印加されるベリファイ電圧Ｖｖｅｒとがある。
【００７１】
図１０に示すように、ＮＡＮＤメモリ２０のシーケンサＳＥＱは、メモリコントローラ１０からの命令に従い、ＮＡＮＤメモリ２０の所定ブロックＢＬＫに対してデータのイレースを実行する。具体的には、シーケンサＳＥＱは、イレース対象のブロックＢＬＫ内のメモリセルに接続されるワード線を電源電位（ＶＳＳ）とし、ＮＡＮＤメモリ２０の基板にイレース電圧Ｖｅｒａを印加する。次に、シーケンサＳＥＱは、イレース電圧Ｖｅｒａの印加を停止し、所定ブロックＢＬＫ内の各メモリセルに接続されるワード線にベリファイ電圧を印加し（タイミングのみ図示し、印加電圧は不図示。）、ブロックＢＬＫ内の所定数以上のメモリセルのデータがイレースされたか否かをベリファイする（イレースベリファイ）。データがイレースされていないメモリセルが一定数以上残っていたときは、シーケンサＳＥＱはイレース電圧Ｖｅｒａを昇圧して基板に印加する。
【００７２】
このように、シーケンサＳＥＱは、イレース対象ブロックＢＬＫ内の所定数以上のメモリセルのデータがイレースされるまで、イレース電圧Ｖｅｒａを昇圧しながらイレース電圧Ｖｅｒａの印加処理とベリファイ処理とを交互に行う。この１回のイレース電圧Ｖｅｒａの印加処理とそれに続く１回のベリファイ処理との組を１回分のループとする。１回のループが終了するごとに、ＮＡＮＤメモリ２０のレジスタＲＥＧに終了済みのループ回数が登録される。これにより、ＮＡＮＤメモリ２０には、イレース処理の進捗が記憶される。換言すれば、本実施形態のＮＡＮＤメモリ２０においては、ループよりも小さい単位では進捗が記憶されない。
【００７３】
ここで、２回目のループ（ループ２）において、メモリコントローラ１０が、例えばホスト３０からリード要求等を受信し、または、コマンドキュー内のコマンドを取得したとする。メモリコントローラ１０は、新たに発生した他の処理の要求と、先行して実行中のイレース処理とのＮＡＮＤメモリ２０における実行の優先順を、上記のイレースサスペンド残り回数レジスタ１４ｃに基づき決定する。
【００７４】
図１０（ａ）に示すケースは、メモリコントローラ１０により巻き戻り有り／無しサスペンドのいずれのサスペンドコマンドも発行されることなく、ＮＡＮＤメモリ２０が先行するイレース処理を中断することなく継続する場合である。ＮＡＮＤメモリ２０は、途中であったループ２の処理を中断せずに継続し、その後、例えば、ループ３、及びループ４の処理を実行する。例えばループ４まででイレース処理が完遂したとすると、ＮＡＮＤメモリ２０は、そのイレース処理の完遂後、メモリコントローラ１０からのコマンドに従って他の処理を実行する。
【００７５】
ＮＡＮＤメモリ２０は、先行するイレース処理を実行中、Ｒ／Ｂｎ信号をビジーにしておく（図１０（ａ）のＢｕｓｙ（ｅｒａｓｅ））。先行するイレース処理が終了すると、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をレディとし、メモリコントローラ１０からの他の処理にかかるコマンドを受け付ける。他の処理の実行中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにする（図１０（ａ）のＢｕｓｙ（ｏｔｈｅｒ  ｐｒｏｃｅｓｓ））。
【００７６】
図１０（ｂ）に示すケースは、メモリコントローラ１０により巻き戻り無しサスペンドコマンドが発行され、ＮＡＮＤメモリ２０が先行するイレース処理を中断して他の処理を優先的に実行する場合である。ＮＡＮＤメモリ２０は、巻き戻り無しサスペンドコマンドに従い、途中であったループ２の処理を完遂する。その後、ＮＡＮＤメモリ２０は、例えば次のループ（ループ３）に移ることなくイレース処理を中断し、メモリコントローラ１０からのコマンドに従って他の処理を実行する。
【００７７】
他の処理の終了後、ＮＡＮＤメモリ２０は、中断していたイレース処理を継続する。サスペンド前において、イレース処理は所定区切り、つまり、２回目のループが終了するまで実行済みである。したがって、ＮＡＮＤメモリ２０は、２回目のループを重複して実行することなく、３回目のループの当初からイレース処理を再開する。
【００７８】
ＮＡＮＤメモリ２０は、先行するイレース処理を実行中、Ｒ／Ｂｎ信号をビジーにしておく（図１０（ｂ）のＢｕｓｙ（ｅｒａｓｅ））。メモリコントローラ１０から巻き戻り無しサスペンドコマンドが発行されると、ループ２の区切り、つまり、イレース電圧印加後のイレースベリファイ処理まで終了した後、Ｒ／Ｂｎ信号をレディとする。そして、メモリコントローラ１０から他の処理にかかるコマンドを受け付ける。他の処理の実行中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにする（図１０（ｂ）のＢｕｓｙ（ｏｔｈｅｒ  ｐｒｏｃｅｓｓ））。他の処理が終了すると、ＮＡＮＤメモリ２０はＲ／Ｂｎ信号を一旦、レディとし、イレース処理を再開する。イレース処理中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにしておく（図１０（ｂ）のＢｕｓｙ（ｅｒａｓｅ））。
【００７９】
ここで、巻き戻り無しサスペンドにおけるイレース電圧Ｖｅｒａの変化に着目すると、イレースの再開時、サスペンド直前のイレース電圧Ｖｅｒａよりもステップアップしたイレース電圧Ｖｅｒａからイレースが再開することが、巻き戻り無しサスペンドの１つの特徴である。
【００８０】
図１０（ｃ）に示すケースは、メモリコントローラ１０により巻き戻り有りサスペンドコマンドが発行され、ＮＡＮＤメモリ２０が先行するイレース処理を中断して他の処理を優先的に実行する場合である。ＮＡＮＤメモリ２０は、巻き戻り有りサスペンドコマンドに従い、途中であったループ２の処理を完遂することなく比較的短時間のうちに中断する。その後、ＮＡＮＤメモリ２０は、メモリコントローラ１０からのコマンドに従って他の処理を実行する。
【００８１】
他の処理の終了後、ＮＡＮＤメモリ２０は、中断していたイレース処理を継続する。サスペンド前において、イレース処理は所定区切り、つまり、２回目のループが終了するまで待たずに中断されている。したがって、ＮＡＮＤメモリ２０は、２回目のループを重複して実行（ループ２’）するところからイレース処理を再開する。
【００８２】
ＮＡＮＤメモリ２０は、先行するイレース処理を実行中、Ｒ／Ｂｎ信号をビジーにしておく（図１０（ｃ）のＢｕｓｙ（ｅｒａｓｅ））。メモリコントローラ１０から巻き戻り有りサスペンドコマンドが発行されると、ループ２の区切りまで処理を継続することなく中断し、Ｒ／Ｂｎ信号をレディとする。そして、メモリコントローラ１０から他の処理にかかるコマンドを受け付ける。他の処理の実行中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにする（図１０（ｃ）のＢｕｓｙ（ｏｔｈｅｒ  ｐｒｏｃｅｓｓ））。他の処理が終了すると、ＮＡＮＤメモリ２０はＲ／Ｂｎ信号を一旦、レディとし、イレース処理を再開する。イレース処理中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにしておく（図１０（ｃ）のＢｕｓｙ（ｅｒａｓｅ））。
【００８３】
ここで、巻き戻り有りサスペンドにおけるイレース電圧Ｖｅｒａの変化に着目すると、イレースの再開時、サスペンド直前のイレース電圧Ｖｅｒａを引き継いで、再びサスペンド直前と同じ電圧値のイレース電圧Ｖｅｒａからイレースが再開する場合があることが、巻き戻り有りサスペンドの１つの特徴である。
【００８４】
したがって、巻き戻り有り／無しサスペンドの使い分けが行われるメモリシステム１においては、サスペンド後のイレース再開時、イレース電圧Ｖｅｒａがサスペンド前のイレース電圧Ｖｅｒａから昇圧されない場合と昇圧される場合との２通りの状態が観測される。
なお、１回のイレース処理中に何度も巻き戻り有りサスペンドが発行された場合において、これらのサスペンドのタイミングによっては、例えば初回のループ（ループ１）ばかりが繰り返し実行されることとなり、イレース処理が進まないことがある。
【００８５】
巻き戻り有り／無しサスペンドのいずれかを実施することで、先行するイレース処理中に生じた他の処理の実行開始を、サスペンドを行わない場合と比べて早めることができる。また、巻き戻り有り／無しサスペンドを比較すると、巻き戻り有りサスペンドにおいては例えば実行中のループの完了を待たずにイレース処理が中断されるので、巻き戻り無しサスペンドよりも更にサスペンドによるレイテンシが小さくなる。
【００８６】
一方で、巻き戻り有りサスペンドにおいては、再開後のイレース処理において一部処理の重複が生じる場合があり、イレース処理の実行時間が長期化する傾向にある。また、イレース処理の重複実行により、オーバーイレースが生じてしまうなど、イレース処理の信頼性が低下する懸念がある。巻き戻り無しサスペンドにおいては、イレース処理の重複がなく、イレース処理においてイレース電圧Ｖｅｒａが印加されているトータル時間は、サスペンドされなかった場合とほとんど変わらない。また、巻き戻り有りサスペンドに比べてイレース処理の信頼性の低下を抑制することができる。
【００８７】
以上のように、イレースサスペンドを行わない場合、巻き戻り有り／無しサスペンドを行う場合、のいずれにおいても、メリットとデメリットとがあり、これらの処理を組み合わせることで、メモリシステム１の適正化を図ることが好ましい。
【００８８】
図１１は、実施形態にかかるＮＡＮＤメモリ２０におけるプログラム時の電圧印加のタイミングチャートの一例を示す図である。図１１のタイミングチャートには、処理対象のメモリセルに接続されるワード線への印加電圧Ｖｃｇを示すが、より詳細には、プログラム時にワード線に印加される電圧には、プログラム電圧Ｖｐｇｍと、ベリファイ電圧Ｖｖｅｒとがある。
【００８９】
図１１に示すように、ＮＡＮＤメモリ２０のシーケンサＳＥＱは、メモリコントローラ１０からの命令に従い、ＮＡＮＤメモリ２０の所定のメモリセルに対してデータのプログラムを実行する。具体的には、シーケンサＳＥＱは、プログラム対象のメモリセルに接続されるワード線にプログラム電圧Ｖｃｇ（Ｖｐｇｍ）を印加する。次に、シーケンサＳＥＱは、所定のメモリセルに接続されるワード線にベリファイ電圧Ｖｃｇ（Ｖｖｅｒ）を印加し、プログラム対象のメモリセルのうち所定数以上のメモリセルにそれぞれ目標とするデータがプログラムされたか否かをベリファイする（プログラムベリファイ）。プログラムすべきデータに対応する閾値電圧が目標値に達していないメモリセルが一定数以上残っていたときは、シーケンサＳＥＱはプログラム電圧を昇圧してワード線に印加する。
【００９０】
このように、シーケンサＳＥＱは、プログラム対象メモリセルのうち所定数以上のメモリセルにそれぞれ目標とするデータがプログラムされるまで、プログラム電圧を昇圧しながらベリファイ電圧と交互に印加していく。この１回のプログラム電圧の印加処理とそれに続く１回のベリファイ処理との組を１回分のループとする。１回のループが終了するごとに、ＮＡＮＤメモリ２０のレジスタＲＥＧに終了済みのループ回数が登録される。これにより、ＮＡＮＤメモリ２０には、プログラム処理の進捗が記憶される。換言すれば、本実施形態のＮＡＮＤメモリ２０においては、ループよりも小さい単位では進捗が記憶されない。
【００９１】
ここで、２回目のループ（ループ２）において、メモリコントローラ１０が、例えばホスト３０からリード要求等を受信し、または、コマンドキュー内のコマンドを取得したとする。メモリコントローラ１０は、新たに発生した他の処理と、先行して実施中のプログラム処理とのＮＡＮＤメモリ２０における実施の優先順を、上記のプログラムサスペンド残り回数レジスタ１４ｆに基づき決定する。
【００９２】
図１１（ａ）に示すケースは、メモリコントローラ１０により巻き戻り有り／無しサスペンドのいずれのサスペンドコマンドも発行されることなく、ＮＡＮＤメモリ２０が先行するプログラム処理を中断することなく継続する場合である。ＮＡＮＤメモリ２０は、途中であったループ２の処理を中断せずに継続し、その後、例えば、ループ３、及びループ４の処理を実行する。例えばループ４まででプログラム処理が完遂したとすると、ＮＡＮＤメモリ２０は、そのプログラム処理の完遂後、メモリコントローラ１０からのコマンドに従って他の処理を実行する。
【００９３】
ＮＡＮＤメモリ２０は、先行するプログラム処理を実行中、Ｒ／Ｂｎ信号をビジーにしておく（図１１（ａ）のＢｕｓｙ（ｐｒｏｇｒａｍ））。先行するプログラム処理が終了すると、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をレディとし、メモリコントローラ１０からの他の処理にかかるコマンドを受け付ける。他の処理の実行中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにする（図１１（ａ）のＢｕｓｙ（ｏｔｈｅｒ  ｐｒｏｃｅｓｓ））。
【００９４】
図１１（ｂ）に示すケースは、メモリコントローラ１０により巻き戻り無しサスペンドコマンドが発行され、ＮＡＮＤメモリ２０が先行するプログラム処理を中断して他の処理を優先的に実行する場合である。ＮＡＮＤメモリ２０は、巻き戻り無しサスペンドコマンドに従い、途中であったループ２の処理を完遂する。その後、ＮＡＮＤメモリ２０は、例えば次のループ（ループ３）に移ることなくプログラム処理を中断し、メモリコントローラ１０からのコマンドに従って他の処理を実行する。
【００９５】
他の処理の終了後、ＮＡＮＤメモリ２０は、中断していたプログラム処理を継続する。サスペンド前において、プログラム処理は所定区切り、つまり、２回目のループが終了するまで実行済みである。したがって、ＮＡＮＤメモリ２０は、２回目のループを重複して実行することなく、３回目のループの当初からプログラム処理を再開する。
【００９６】
ＮＡＮＤメモリ２０は、先行するプログラム処理を実行中、Ｒ／Ｂｎ信号をビジーにしておく（図１１（ｂ）のＢｕｓｙ（ｐｒｏｇｒａｍ））。メモリコントローラ１０から巻き戻り無しサスペンドコマンドが発行されると、ループ２の区切り、つまり、プログラム電圧印加後のプログラムベリファイ処理まで終了した後、Ｒ／Ｂｎ信号をレディとする。そして、メモリコントローラ１０から他の処理にかかるコマンドを受け付ける。他の処理の実行中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにする（図１１（ｂ）のＢｕｓｙ（ｏｔｈｅｒ  ｐｒｏｃｅｓｓ））。他の処理が終了すると、ＮＡＮＤメモリ２０はＲ／Ｂｎ信号を一旦、レディとし、プログラム処理を再開する。プログラム処理中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにしておく（図１１（ｂ）のＢｕｓｙ（ｐｒｏｇｒａｍ））。
【００９７】
ここで、巻き戻り無しサスペンドにおけるプログラム電圧Ｖｃｇの変化に着目すると、プログラムの再開時、サスペンド直前のプログラム電圧Ｖｃｇよりもステップアップしたプログラム電圧Ｖｃｇからプログラムが再開することが、巻き戻り無しサスペンドの１つの特徴である。
【００９８】
図１１（ｃ）に示すケースは、メモリコントローラ１０により巻き戻り有りサスペンドコマンドが発行され、ＮＡＮＤメモリ２０が先行するプログラム処理を中断して他の処理を優先的に実行する場合である。ＮＡＮＤメモリ２０は、巻き戻り有りサスペンドコマンドに従い、途中であったループ２の処理を完遂することなく中断する。その後、ＮＡＮＤメモリ２０は、メモリコントローラ１０からのコマンドに従って他の処理を実行する。
【００９９】
他の処理の終了後、ＮＡＮＤメモリ２０は、中断していたプログラム処理を継続する。サスペンド前において、プログラム処理は所定区切り、つまり、２回目のループが終了するまで待たずに中断されている。したがって、ＮＡＮＤメモリ２０は、２回目のループを重複して実行（ループ２’）するところからプログラム処理を再開する。
【０１００】
ＮＡＮＤメモリ２０は、先行するプログラム処理を実行中、Ｒ／Ｂｎ信号をビジーにしておく（図１１（ｃ）のＢｕｓｙ（ｐｒｏｇｒａｍ））。メモリコントローラ１０から巻き戻り有りサスペンドコマンドが発行されると、ループ２の区切りまで処理を継続することなく中断し、Ｒ／Ｂｎ信号をレディとする。そして、メモリコントローラ１０から他の処理にかかるコマンドを受け付ける。他の処理の実行中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにする（図１１（ｃ）のＢｕｓｙ（ｏｔｈｅｒ  ｐｒｏｃｅｓｓ））。他の処理が終了すると、ＮＡＮＤメモリ２０はＲ／Ｂｎ信号を一旦、レディとし、プログラム処理を再開する。プログラム処理中、ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにしておく（図１１（ｃ）のＢｕｓｙ（ｐｒｏｇｒａｍ））。
【０１０１】
ここで、巻き戻り有りサスペンドにおけるプログラム電圧Ｖｃｇの変化に着目すると、プログラムの再開時、サスペンド直前のプログラム電圧Ｖｃｇを引き継いで、再び同じ電圧値のプログラム電圧Ｖｃｇからプログラムが再開する場合があることが、巻き戻り有りサスペンドの１つの特徴である。
【０１０２】
したがって、巻き戻り有り／無しサスペンドの使い分けが行われるメモリシステム１においては、サスペンド後のプログラム再開時、プログラム電圧Ｖｃｇがサスペンド前のプログラム電圧Ｖｃｇから昇圧されない場合と昇圧される場合との２通りの状態が観測される。
【０１０３】
巻き戻り有り／無しサスペンドのいずれかを実施することで、先行するプログラム処理中に生じた他の処理の実行開始を、サスペンドを一切行わない場合よりも早めることができる。また、巻き戻り有り／無しサスペンドを比較すると、巻き戻り有りサスペンドにおいては例えば実行中のループの完了を待たずにプログラム処理が中断されるので、巻き戻り無しサスペンドよりも更にサスペンドによるレイテンシが小さくなる。
【０１０４】
一方で、巻き戻り有りサスペンドにおいては、再開後のプログラム処理において一部処理の重複が生じる場合があり、プログラム処理の実行時間が長期化する傾向にある。また、プログラム処理の重複実行により、データを示す閾値電圧が目標値より上昇するオーバープログラム、およびプログラム対象ではないメモリセル（非対象メモリセル）に対するプログラムディスターブが生じてしまうなど、プログラム処理の信頼性が低下する懸念がある。巻き戻り無しサスペンドにおいては、プログラム処理の重複がなく、プログラム処理においてプログラム電圧が印加されているトータル時間は、サスペンドされなかった場合とほとんど変わらない。また、巻き戻り有りサスペンドに比べてプログラム処理の信頼性の低下を抑制することができる。
【０１０５】
以上のように、プログラムサスペンドを行わない場合、巻き戻り有り／無しサスペンドを行う場合、のいずれにおいても、メリットとデメリットとがあり、これらの処理を組み合わせることで、メモリシステム１の適正化を図ることが好ましい。
【０１０６】
なお、巻き戻り有り／無しサスペンド後のプログラム処理の再開時、プログラム電圧の印加前にプリベリファイという処理が行われる場合がある。それを図１２に示す。図１２は、実施形態にかかるＮＡＮＤメモリにおけるプログラム時の電圧印加のタイミングチャートの他の例を示す図である。
【０１０７】
図１２（ａ）に示すように、図１２の例において、プログラム処理がサスペンドされなかった場合の処理は、上述の図１１（ａ）の例と同様である。
【０１０８】
図１２（ｂ）（ｃ）に示すように、巻き戻り有り／無しサスペンドのいずれかによりプログラム処理がサスペンドされた場合、図１２の例では、プログラム処理の再開時に、所定のプログラム電圧の印加後のベリファイと同様、ワード線にベリファイ電圧が印加される。このような、プリベリファイ処理によって、プログラム対象のメモリセルの現状の閾値電圧の分布を確認した後、プログラム電圧の印加が再開される。
【０１０９】
このように、プリベリファイでは、巻き戻り有り／無しサスペンドの別によらず、通常のベリファイ時と同じ電圧がワード線に印加されるのであって、プリベリファイ動作を、巻き戻り動作とは見做さない。リジューム後のプリベリファイが行われる場合であっても、巻き戻り有り／無しサスペンドの区別は、プリベリファイ後に印加されるプログラム電圧の値で判断される。なお、上述のイレース処理においても、リジューム後にプリベリファイが行われる場合がある。
【０１１０】
（イレースサスペンドのコマンドシーケンス）
次に、図１３を用いて、ＮＡＮＤメモリ２０が先行する処理として実行していたイレースをサスペンドする場合のコマンドシーケンスについて説明する。図１３は、実施形態にかかるメモリシステム１におけるイレースサスペンドのコマンドシーケンスの一例を示す図である。図１３（ａ）は、巻き戻り有りサスペンドのコマンドシーケンス例であり、（ｂ）は巻き戻り無しサスペンドのコマンドシーケンス例である。
【０１１１】
図１３（ａ）に示すように、メモリコントローラ１０は、ＮＡＮＤメモリ２０に例えばイレースの指示を出す。具体的には、メモリコントローラ１０は、イレース対象のブロックＢＬＫのアドレス送信を意味する「６０ｈ」コマンドとともに当該アドレス（Ａｄｄｒ）をＮＡＮＤメモリ２０に送信する。そして、メモリコントローラ１０は、イレースコマンド「Ｄ０ｈ」をＮＡＮＤメモリ２０に送信して当該アドレスに対応するブロックＢＬＫのイレースを実行させる。なお、イレースは所定のブロックＢＬＫ内の全メモリセルに対して行われる。
【０１１２】
ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにしてイレースの実行を開始する（図１３（ａ）のＢｕｓｙ（ｅｒａｓｅ））。ＮＡＮＤメモリ２０は、対象となるブロックＢＬＫ内のメモリセルに接続される全ワード線を電源電位（ＶＳＳ）としてＮＡＮＤメモリ２０の基板にイレース電圧Ｖｅｒａを印加する。イレース電圧Ｖｅｒａは、段階的に昇圧されながら印加される。各段階において、ＮＡＮＤメモリ２０は、対象となるメモリセルがイレース状態となったか否かをベリファイする。イレース状態となっていないメモリセルが一定数以上存在するときは、ＮＡＮＤメモリ２０は、さらにイレース電圧Ｖｅｒａを昇圧し、対象となるメモリセルが所定数以上イレース状態となるまでこれを繰り返す。ここで、上述のように、例えばイレース電圧Ｖｅｒａの印加処理及びベリファイ処理の１セットが、イレース処理の１回分のループに相当する。対象のメモリセルが全てイレース状態となるまで、イレース処理では１回以上のループが繰り返される。
【０１１３】
イレース処理の実行中を示す「Ｂｕｓｙ（ｅｒａｓｅ）」（図１３（ａ））状態において、ホスト３０から例えばリード要求を受信すると、メモリコントローラ１０は、例えば巻き戻り有りサスペンドコマンド「Ｅｘｈ」をＮＡＮＤメモリ２０に送信する。ＮＡＮＤメモリ２０は、巻き戻り有りサスペンドコマンドを受信すると、ループの終了時点まで継続することなく比較的短時間でイレースの処理をサスペンドし、Ｒ／Ｂｎ信号をレディにする。メモリコントローラ１０は、Ｒ／Ｂｎ信号により、あるいは、ステータスリードコマンドを発行することにより、ＮＡＮＤメモリ２０のレディ／ビジー状態を認識する。
【０１１４】
ＮＡＮＤメモリ２０がレディ状態になると、メモリコントローラ１０は、ホスト３０からのリード要求にしたがい、ＮＡＮＤメモリ２０にリードの指示を出す。具体的には、メモリコントローラ１０は、リード対象のメモリセルのアドレス送信を意味する「００ｈ」コマンドとともに当該アドレス（Ａｄｄｒ）をＮＡＮＤメモリ２０に送信する。そして、メモリコントローラ１０は、リードコマンド「Ｄ０ｈ」をＮＡＮＤメモリ２０に送信して当該アドレスに対応するメモリセルからのリードを実行させる。ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにしてリードを開始する（図１３（ａ）のＢｕｓｙ（ｒｅａｄ））。
【０１１５】
所定のメモリセルからのリードが終了してＲ／Ｂｎ信号がレディになると、メモリコントローラ１０は、リード対象のメモリセルのカラムアドレスを指示して（「０５ｈ」コマンド及びアドレス（Ａｄｄｒ）の送信）ＮＡＮＤメモリ２０にデータを出力させる（「ｅ０ｈ」コマンド及びリードデータ（Ｒ−Ｄａｔａ）の出力）。これにより、ホスト３０からのリード要求に対するリード処理が終了する。
【０１１６】
メモリコントローラ１０は、イレースのサスペンド時のＮＡＮＤメモリ２０の内部状態を復帰させる「２７ｈ」コマンドをＮＡＮＤメモリ２０に送信する。より具体的には、「２７ｈ」コマンドは、中断したイレース処理の再開に必要な情報、例えばイレース処理の中断前に終了済みのループ回数等の情報をＮＡＮＤメモリ２０のシーケンサＳＥＱに取得させるコマンドである。このように取得した情報に基づき、シーケンサＳＥＱがＮＡＮＤメモリ２０の内部状態を復帰させる。そして、メモリコントローラ１０は、「６０ｈ」コマンド、イレース対象アドレス（Ａｄｄｒ）、及びイレースコマンド「Ｄ０ｈ」をＮＡＮＤメモリ２０に送信してサスペンドされたイレースを再開させる。
【０１１７】
ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにしてイレースを再開する（図１３（ａ）のＢｕｓｙ（ｅｒａｓｅ））。イレース処理は巻き戻り有りサスペンドによりサスペンドされたので、何回目かのループの途中で中断された可能性がある。このような場合、中断されたループはサスペンド時に終了済みのループにカウントされていない。つまり、中断されたループは、ＮＡＮＤメモリ２０のレジスタＲＥＧに登録されている終了済みのループ回数に含まれない。このため、ＮＡＮＤメモリ２０は、イレース電圧Ｖｅｒａを中断されたループの値に戻し、中断されたループの最初からイレースを実行する。
【０１１８】
このように、巻き戻り有りサスペンドにおいては、サスペンド前に終了していたイレース処理の動作が繰り返されることがある。このため、サスペンドされることによって、イレースのトータル時間が、サスペンドされなかった場合よりも長くなる場合がある。
【０１１９】
次に、巻き戻り無しサスペンドのコマンドシーケンスについて説明する。
【０１２０】
図１３（ｂ）に示すように、メモリコントローラ１０は、「６０ｈ」コマンド、イレース対象アドレス（Ａｄｄｒ）、及びイレースコマンド「Ｄ０ｈ」を送信してＮＡＮＤメモリ２０にイレースを実行させる。
【０１２１】
ＮＡＮＤメモリ２０は、対象となるブロックＢＬＫ内のメモリセルに接続されるワード線を電源電位として、ＮＡＮＤメモリ２０の基板に、段階的に昇圧しながらイレース電圧Ｖｅｒａを印加する。
【０１２２】
イレース処理の実行中に例えばホスト３０からリード要求を受信すると、メモリコントローラ１０は、例えば巻き戻り無しサスペンドコマンド「Ｅｙｈ」をＮＡＮＤメモリ２０に送信する。ＮＡＮＤメモリ２０は、イレース処理が、イレース電圧Ｖｅｒａの印加処理及びベリファイ処理のループの途中であったときは、そのループが終了するまでイレース処理を継続した後にサスペンドする。このループの終了時点が上述の所定区切りに相当し、ＮＡＮＤメモリ２０のレジスタＲＥＧには、このときのループが、サスペンド前に終了済みのループ回数として登録される。
【０１２３】
イレースがサスペンドされて、Ｒ／Ｂｎ信号がレディになると、メモリコントローラ１０は、ホスト３０からのリード要求にしたがい、上記の「００ｈ」コマンド、リード対象アドレス（Ａｄｄｒ）、及びリードコマンド「Ｄ０ｈ」を送信してＮＡＮＤメモリ２０にリードを実行させる。また、メモリコントローラ１０は、「０５ｈ」コマンド、リード対象アドレス（Ａｄｄｒ）、及び「ｅ０ｈ」コマンドを送信してＮＡＮＤメモリ２０にリードデータ（Ｒ−Ｄａｔａ）を出力させる。
【０１２４】
メモリコントローラ１０は、「２７ｈ」コマンドを送信してＮＡＮＤメモリ２０にイレースのサスペンド時の内部状態を復帰させる。つまり、メモリコントローラ１０は、「６０ｈ」コマンド、イレース対象アドレス（Ａｄｄｒ）、及びイレースコマンド「Ｄ０ｈ」を送信する。ＮＡＮＤメモリ２０は、サスペンド時に所定区切り、つまり、実行中のループの終了時点までイレース処理を進めている。このため、ＮＡＮＤメモリ２０は、イレース電圧Ｖｅｒａをサスペンド時の電圧の次の電圧まで昇圧し、イレースの実行を再開する（図１３（ｂ）のＢｕｓｙ（ｅｒａｓｅ））。
【０１２５】
このように、巻き戻り無しサスペンドにおいては、重複処理を行うことなくイレースが再開される。このため、サスペンドされても、イレース処理においてイレース電圧Ｖｅｒａが印加されているトータル時間は、サスペンドされなかった場合とほとんど変わらない。
【０１２６】
また、以上のように、巻き戻り有り／無しサスペンドにおいては、サスペンドコマンドが発行されてからＮＡＮＤメモリ２０がレディになるまでの時間が互いに異なり得る。つまり、サスペンドコマンドが発行されてからＮＡＮＤメモリ２０がレディになるまでの最大時間は、巻き戻り無しサスペンドの方が巻き戻し有りサスペンドより長い場合がある。ただし、巻き戻り無しサスペンドにおいても、偶々、所定区切りと一致するタイミングでサスペンドコマンドが発行された場合には、ＮＡＮＤメモリ２０がレディになるまでの時間は、巻き戻り有りサスペンドと正味、変わらない場合もある。
【０１２７】
（プログラムサスペンドのコマンドシーケンス）
次に、図１４を用いて、ＮＡＮＤメモリ２０が先行する処理として実行していたプログラムをサスペンドする場合のコマンドシーケンスについて説明する。図１４は、実施形態にかかるメモリシステム１におけるプログラムサスペンドのコマンドシーケンスの一例を示す図である。図１４（ａ）は、巻き戻り有りサスペンドのコマンドシーケンス例であり、（ｂ）は巻き戻り無しサスペンドのコマンドシーケンス例である。
【０１２８】
図１４（ａ）に示すように、メモリコントローラ１０は、ＮＡＮＤメモリ２０に例えばプログラムの指示を出す。具体的には、メモリコントローラ１０は、プログラム対象のメモリセルのアドレス送信を意味する「８ｘｈ」コマンドとともに当該アドレス（Ａｄｄｒ１）をＮＡＮＤメモリ２０に送信する。そして、メモリコントローラ１０は、プログラムコマンド「１ｘｈ」及びライトデータ「ＤＩＮ」をＮＡＮＤメモリ２０に送信して当該アドレスに対応するメモリセルへのプログラムを実行させる。
【０１２９】
ＮＡＮＤメモリ２０は、Ｒ／Ｂｎ信号をビジーにしてプログラムの実行を開始する。ＮＡＮＤメモリ２０は、対象となる各々のメモリセルのゲートにプログラム電圧Ｖｃｇを印加する。プログラム電圧Ｖｃｇは、段階的に昇圧されながら印加される。各段階において、ＮＡＮＤメモリ２０は、対象となるメモリセルにそれぞれ目標とするデータがプログラムされたか否かをベリファイする。プログラムすべきデータに対応する閾値電圧が所定値に達していないメモリセルが一定数以上存在するときは、ＮＡＮＤメモリ２０は、さらにプログラム電圧Ｖｃｇを昇圧し、対象となるメモリセルの所定数以上に目標とするデータがプログラムされるまでこれを繰り返す。ここで、上述のように、例えばプログラム電圧Ｖｃｇ及びベリファイの１セットが、プログラム処理の１回分のループに相当する。対象のメモリセルの所定数以上に目標とするデータがプログラムされるまで、プログラム処理では１回以上のループが繰り返される。
【０１３０】
プログラム処理の実行中に例えばホスト３０からリード要求を受信すると、メモリコントローラ１０は、例えば巻き戻り有りサスペンドコマンド「Ｐｘｈ」をＮＡＮＤメモリ２０に送信する。ＮＡＮＤメモリ２０は、巻き戻り有りサスペンドコマンドを受信すると、巻き戻り無しサスペンドの場合と比較して、より短時間でプログラム処理をサスペンドし、Ｒ／Ｂｎ信号をレディにする。
【０１３１】
プログラムがサスペンドされると、メモリコントローラ１０は、ホスト３０からのリード要求にしたがい、上記の「００ｈ」コマンド、リード対象アドレス（Ａｄｄｒ２）、及びリードコマンド「３０ｈ」を送信してＮＡＮＤメモリ２０にリードを実行させる。また、メモリコントローラ１０はＮＡＮＤメモリ２０にリードデータを出力させる（「０５ｈ」コマンド及びアドレス（Ａｄｄｒ）の送信、「ｅ０ｈ」コマンドの送信およびリードデータの出力（図１４（ａ）のＲ−Ｄａｔａ））。
【０１３２】
メモリコントローラ１０は、「４８ｈ」コマンドを送信してＮＡＮＤメモリ２０にプログラムの実行を再開させる。プログラム処理は巻き戻り有りサスペンドによりサスペンドされたので、何回目かのループの途中で中断された可能性がある。このように、サスペンドを差し込むタイミングによっては、中断されたループはサスペンド時に終了済みのループにカウントされず、ＮＡＮＤメモリ２０のレジスタＲＥＧに登録されている終了済みのループ回数に含まれない。つまり、ＮＡＮＤメモリ２０は、上述のように、ループよりも小さい単位では進捗を記憶していないので、サスペンド直前の処理を正確に記憶しておらず、一部の処理を重複して実行する。より具体的には、ＮＡＮＤメモリ２０は、中断されたループに対応するプログラム電圧の値にプログラム電圧Ｖｃｇを戻し、中断されたループの最初からプログラムを実行する。
【０１３３】
このように、巻き戻り有りサスペンドにおいては、サスペンド前に終了していたプログラム処理の動作が繰り返されることがある。このため、サスペンドされることによって、プログラムのトータル時間が、サスペンドされなかった場合よりも長くなる場合がある。
【０１３４】
次に、巻き戻り無しサスペンドのコマンドシーケンスについて説明する。
【０１３５】
図１４（ｂ）に示すように、メモリコントローラ１０は、「８ｘｈ」コマンド、プログラム対象アドレス（Ａｄｄｒ１）、及びプログラムコマンド「１ｘｈ」を送信してＮＡＮＤメモリ２０にプログラムを実行させる。
【０１３６】
ＮＡＮＤメモリ２０は、対象となる各々のメモリセルのゲートに、段階的に昇圧しながらプログラム電圧Ｖｃｇを印加する。
【０１３７】
プログラム処理の実行中に例えばホスト３０からリード要求を受信すると、メモリコントローラ１０は、例えば巻き戻り無しサスペンドコマンド「Ｐｙｈ」をＮＡＮＤメモリ２０に送信する。ＮＡＮＤメモリ２０は、プログラム処理が、プログラム電圧Ｖｃｇの印加処理およびベリファイのループの途中であったときは、そのループが終了するまでプログラム処理を継続した後にサスペンドする。このループの区切りが上述の所定区切りに相当し、ＮＡＮＤメモリ２０のレジスタＲＥＧには、このときのループが、サスペンド前に終了済みのループ回数として登録される。
【０１３８】
プログラムがサスペンドされて、Ｒ／Ｂｎ信号がレディになると、メモリコントローラ１０は、ホスト３０からのリード要求にしたがい、上記の「００ｈ」コマンド、リード対象アドレス（Ａｄｄｒ２）、及びリードコマンド「３０ｈ」を送信してＮＡＮＤメモリ２０にリードを実行させる。また、メモリコントローラ１０はＮＡＮＤメモリ２０にリードデータを出力させる（「０５ｈ」コマンド及びアドレス（Ａｄｄｒ）の送信、「ｅ０ｈ」コマンドの送信およびリードデータの出力（図１４（ｂ）のＲ−Ｄａｔａ））。
【０１３９】
メモリコントローラ１０は、「４８ｈ」コマンドを送信してＮＡＮＤメモリ２０にプログラムの実行を再開させる。ＮＡＮＤメモリ２０は、サスペンド時に所定区切り、つまり、実行中のループの終了時点までプログラム処理を進めている。このため、ＮＡＮＤメモリ２０は、プログラム電圧Ｖｃｇをサスペンド時の電圧の次の電圧まで昇圧してプログラムの実行を再開する。
【０１４０】
このように、巻き戻り無しサスペンドにおいては、重複処理を行うことなくプログラムが再開される。このため、サスペンドされても、プログラム処理においてプログラム電圧Ｖｃｇが印加されているトータル時間は、サスペンドされなかった場合とほとんど変わらない。
【０１４１】
（イレースサスペンド処理の例）
次に、図１５及び図１６を用いて、ＮＡＮＤメモリ２０が先行する処理として実行していたイレースを計画数に従ってサスペンドする場合の処理の手順の一例について説明する。図１５は、実施形態にかかるメモリコントローラ１０によるイレース時における巻き戻り有り／無しサスペンドの計画数を決定する処理の手順の一例を示すフロー図である。
【０１４２】
本例において、メモリコントローラ１０の制御部１１が備えるデータ取得部１１ａは、これまでに実行されたコンパクション処理等を経た後にイレース済みとなっているブロック数を取得し、イレース済みブロック数格納部１４ａに格納済みである。データ取得部１１ａによるイレース済みブロック数の取得およびイレース済みブロック数格納部１４ａへの格納は、任意のタイミングで行われてよい。
【０１４３】
図１５に示すように、メモリコントローラ１０のコマンド発行部１１ｃは、所定のタイミングで、ＮＡＮＤメモリ２０にイレースコマンドを発行する（ステップＳ１０１）。演算部１１ｂは、イレース済みブロック数格納部１４ａに格納されているイレース済みブロック数を取得する（ステップＳ１０２）。演算部１１ｂは、イレースサスペンド計画テーブル１４ｂを参照して、取得したイレース済みブロック数に対応するよう、巻き戻り有り／無しサスペンドの計画数を決定する（ステップＳ１０３）。演算部１１ｂは、決定した計画数を巻き戻り有り／無しサスペンドの残り回数として、イレースサスペンド残り回数レジスタ１４ｃに登録する（ステップＳ１０４）。
【０１４４】
図１６は、実施形態にかかるメモリシステム１におけるイレースサスペンド処理の手順の一例を示すフロー図である。
【０１４５】
図１６に示すように、ＮＡＮＤメモリ２０が、先行する処理としてイレースを実行しているときに、ホスト３０から新たな要求があった場合等の他の処理の要求が生じた場合（ステップＳ２０１）、演算部１１ｂは、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有りサスペンドの残り回数がゼロであるか否かを確認する（ステップＳ２０２）。
【０１４６】
イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有りサスペンドの残り回数がゼロでなければ（ステップＳ２０２：Ｎｏ）、コマンド発行部１１ｃは巻き戻り有りサスペンドコマンドを発行する（ステップＳ２０３）。コマンド発行部１１ｃは、他の処理を実行させる実行コマンドをＮＡＮＤメモリ２０に発行する（ステップＳ２０４）。また、ＮＡＮＤメモリ２０における他の処理が完了したら、コマンド発行部１１ｃはＮＡＮＤメモリ２０にリジュームコマンドを発行する。ＮＡＮＤメモリ２０は、コマンド発行部１１ｃから受信したリジュームコマンドに応じてリジューム（イレース処理を再開）する。演算部１１ｂは、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有りサスペンドの残り回数を「１」減らす（ステップＳ２０５）。以上により、イレースサスペンド処理が終了する。
【０１４７】
イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有りサスペンドの残り回数がゼロであれば（ステップＳ２０２：Ｙｅｓ）、演算部１１ｂは、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り無しサスペンドの残り回数がゼロであるか否かを確認する（ステップＳ２０６）。
【０１４８】
イレースサスペンド残り回数レジスタ１４ｃの巻き戻り無しサスペンドの残り回数がゼロでなければ（ステップＳ２０６：Ｎｏ）、コマンド発行部１１ｃは巻き戻り無しサスペンドコマンドを発行する（ステップＳ２０７）。コマンド発行部１１ｃは、他の処理を実行させる実行コマンドをＮＡＮＤメモリ２０に発行する（ステップＳ２０８）。また、ＮＡＮＤメモリ２０における他の処理が完了したら、コマンド発行部１１ｃはＮＡＮＤメモリ２０にリジュームコマンドを発行する。ＮＡＮＤメモリ２０は、コマンド発行部１１ｃから受信したリジュームコマンドに応じてリジューム（イレース処理を再開）する。演算部１１ｂは、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り無しサスペンドの残り回数を「１」減らす（ステップＳ２０９）。以上により、イレースサスペンド処理が終了する。
【０１４９】
イレースサスペンド残り回数レジスタ１４ｃの巻き戻り無しサスペンドの残り回数がゼロであれば（ステップＳ２０６：Ｙｅｓ）、ＮＡＮＤメモリ２０におけるイレースの完了を待って（ステップＳ２１０）、コマンド発行部１１ｃは、他の処理を実行させる実行コマンドをＮＡＮＤメモリ２０に発行する（ステップＳ２１１）。
【０１５０】
以上により、ＮＡＮＤメモリ２０が先行する処理として実行していたイレースを計画数に従ってサスペンドする場合の処理が終了する。
【０１５１】
ここで、図１７を用いて、上記処理における巻き戻り有り／無しサスペンドの残り回数の時系列変化について説明する。図１７は、実施形態にかかるメモリシステムが管理する巻き戻り有り／無しサスペンドの残り回数の時系列変化を示す図である。
【０１５２】
図１７に示すように、ＮＡＮＤメモリ２０がレディ状態である場合において、イレース済みブロック数が「２」であったとする。つまり、イレース済みブロック数格納部１４ａには「２」が格納されている。イレースコマンドが発行されていないこの時点で、イレースサスペンド残り回数レジスタ１４ｃには、巻き戻り有り／無しサスペンドの残り回数は設定されていない。
【０１５３】
コマンド発行部１１ｃがイレースコマンドを発行すると、演算部１１ｂがイレース済みブロック数格納部１４ａからイレース済みブロック数を取得し、イレースサスペンド計画テーブル１４ｂを参照して、巻き戻り有り／無しサスペンドの計画数をそれぞれ「１」と決定する。また、演算部１１ｂにより、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの残り回数にそれぞれ「１」が登録される。
【０１５４】
ここで、イレース実行中のＮＡＮＤメモリ２０に対する１回目の他の処理（図中、他の処理１）の要求が発生したとする。演算部１１ｂは、イレースサスペンド残り回数レジスタ１４ｃの数値から、ここでの処理として巻き戻り有りサスペンドを選択する。コマンド発行部１１ｃは、ＮＡＮＤメモリ２０に、巻き戻り有りサスペンドコマンドを発行し、更に、１回目の他の処理を実行させる実行コマンドを発行する。また、コマンド発行部１１ｃは、他の処理の実行後、イレース処理を再開させるリジュームコマンドをＮＡＮＤメモリ２０に対して発行する。演算部１１ｂは、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有りサスペンドの残り回数を減じて「０」とする。
【０１５５】
ＮＡＮＤメモリ２０は、イレース処理を所定区切りまで待つことなく中断し、１回目の他の処理を実施した後、メモリコントローラ１０からのリジュームコマンドに従い、必要に応じて中断前の一部処理を繰り返しつつイレース処理を再開する。イレース処理の再開後、２回目の他の処理（図中、他の処理２）の要求が発生したとする。演算部１１ｂは、イレースサスペンド残り回数レジスタ１４ｃの数値から、ここでの処理として巻き戻り無しサスペンドを選択する。コマンド発行部１１ｃは、ＮＡＮＤメモリ２０に、巻き戻り無しサスペンドコマンドを発行し、更に、２回目の他の処理を実行させる実行コマンドを発行する。また、コマンド発行部１１ｃは、他の処理の実行後、イレース処理を再開させるリジュームコマンドをＮＡＮＤメモリ２０に対して発行する。演算部１１ｂは、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り無しサスペンドの残り回数を減じて「０」とする。
【０１５６】
ＮＡＮＤメモリ２０は、イレース処理を所定区切りで中断し、２回目の他の処理を実施した後、メモリコントローラ１０からのリジュームコマンドに従い、中断前の一部処理を繰り返すことなくイレース処理を再開する。イレース処理の再開後、３回目の他の処理（図中、他の処理３）の要求が発生したとする。イレースサスペンド残り回数レジスタ１４ｃの数値は、巻き戻り有り／無しサスペンド共にゼロであるから、ここでは巻き戻り有り／無しサスペンドのいずれも選択されず、いずれのサスペンドコマンドも発行されない。ＮＡＮＤメモリ２０は、イレース処理を中断することなく完遂させる。その後、コマンド発行部１１ｃは、３回目の他の処理を実行させる実行コマンドをＮＡＮＤメモリ２０に対して発行する。
【０１５７】
（プログラムサスペンド処理の例）
次に、図１８を用いて、ＮＡＮＤメモリ２０が先行する処理として実行していたプログラムをサスペンドする場合の処理の手順の一例について説明する。図１８は、実施形態にかかるメモリシステム１によるプログラム時における巻き戻り有り／無しサスペンドの計画数を決定する処理の手順の一例を示すフロー図である。
【０１５８】
本例において、メモリコントローラ１０のデータ取得部１１ａは、格納されているライト待ちデータ量に応じて変化するライトバッファ１４ｇの空き容量を取得し、ライトバッファ空き容量格納部１４ｄに格納済みである。データ取得部１１ａによるライトバッファ１４ｇの空き容量の取得およびライトバッファ空き容量格納部１４ｄへの格納は、任意のタイミングで行われてよい。
【０１５９】
図１８に示すように、メモリコントローラ１０のコマンド発行部１１ｃは、所定のタイミングで、ＮＡＮＤメモリ２０にプログラムコマンドを発行する（ステップＳ３０１）。演算部１１ｂは、ライトバッファ空き容量格納部１４ｄに格納されているライトバッファ１４ｇの空き容量を取得する（ステップＳ３０２）。演算部１１ｂは、プログラムサスペンド計画テーブル１４ｅを参照して、取得したライトバッファ１４ｇの空き容量に対応するよう、巻き戻り有り／無しサスペンドの計画数を決定する（ステップＳ３０３）。演算部１１ｂは、決定した計画数を巻き戻り有り／無しサスペンドの残り回数として、プログラムサスペンド残り回数レジスタ１４ｆに登録する（ステップＳ３０４）。
【０１６０】
図１９は、実施形態にかかるメモリシステム１におけるプログラムサスペンド処理の手順の一例を示すフロー図である。
【０１６１】
図１９に示すように、ＮＡＮＤメモリ２０が先行する処理としてプログラムを実行しているときに、ホスト３０から新たな要求があった場合等の他の処理の要求が生じた場合（ステップＳ４０１）、演算部１１ｂは、プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り有りサスペンドの残り回数がゼロであるか否かを確認する（ステップＳ４０２）。
【０１６２】
プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り有りサスペンドの残り回数がゼロでなければ（ステップＳ４０２：Ｎｏ）、コマンド発行部１１ｃは巻き戻り有りサスペンドコマンドを発行する（ステップＳ４０３）。コマンド発行部１１ｃは、他の処理を実行させる実行コマンドをＮＡＮＤメモリ２０に発行する（ステップＳ４０４）。また、ＮＡＮＤメモリ２０における他の処理が完了したら、コマンド発行部１１ｃはＮＡＮＤメモリ２０にリジュームコマンドを発行する。ＮＡＮＤメモリ２０は、コマンド発行部１１ｃから受信したリジュームコマンドに応じてリジューム（プログラム処理を再開）する。演算部１１ｂは、プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り有りサスペンドの残り回数を「１」減らす（ステップＳ４０５）。以上により、プログラムサスペンド処理が終了する。
【０１６３】
プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り有りサスペンドの残り回数がゼロであれば（ステップＳ４０２：Ｙｅｓ）、演算部１１ｂは、プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り無しサスペンドの残り回数がゼロであるか否かを確認する（ステップＳ４０６）。
【０１６４】
プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り無しサスペンドの残り回数がゼロでなければ（ステップＳ４０６：Ｎｏ）、コマンド発行部１１ｃは巻き戻り無しサスペンドコマンドを発行する（ステップＳ４０７）。コマンド発行部１１ｃは、他の処理を実行させる実行コマンドをＮＡＮＤメモリ２０に発行する（ステップＳ４０８）。また、ＮＡＮＤメモリ２０における他の処理が完了したら、コマンド発行部１１ｃはＮＡＮＤメモリ２０にリジュームコマンドを発行する。ＮＡＮＤメモリ２０は、コマンド発行部１１ｃから受信したリジュームコマンドに応じてリジューム（プログラム処理を再開）する。演算部１１ｂは、プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り無しサスペンドの残り回数を「１」減らす（ステップＳ４０９）。以上により、プログラムサスペンド処理が終了する。
【０１６５】
プログラムサスペンド残り回数レジスタ１４ｆの巻き戻り無しサスペンドの残り回数がゼロであれば（ステップＳ４０６：Ｙｅｓ）、ＮＡＮＤメモリ２０におけるプログラムの完了を待って（ステップＳ４１０）、コマンド発行部１１ｃは、他の処理を実行させる実行コマンドをＮＡＮＤメモリ２０に発行する（ステップＳ４１１）。
【０１６６】
以上により、ＮＡＮＤメモリ２０が先行する処理として実行していたプログラムを計画数に従ってサスペンドする場合の処理が終了する。
【０１６７】
（比較例）
次に、巻き戻り有り／無しサスペンド及びサスペンド無しの使い分けを行わない比較例のメモリシステムについて説明する。
【０１６８】
比較例１のメモリシステムはサスペンドを一切行わない。このため、フラッシュ処理及びコンパクション処理等の先行する処理の遅れが生じない。しかしながら、例えばイレースブロック数の空き容量等が充足している状態であっても、先行する処理が終了するまでホストからの要求に応ずることができずに、リード要求およびライト要求に対するレイテンシが増大する事態は生じやすくなる。また、ライトバッファの空き容量等が充足している状態であっても、先行する処理が終了するまでホストからの要求に応ずることができずに主にリード要求に対するレイテンシが増大する事態が生じやすくなる。
【０１６９】
比較例２のメモリシステムは常に巻き戻り有りサスペンドを行う。このため、先行する処理のためにホストからの要求に直ちに応ずることができずに主にリード要求に対するレイテンシが増大する事態を回避しやすくなる。しかしながら、フラッシュ処理、コンパクション処理、及びイレース処理等の遅れにより、イレース済みブロック数またはライトバッファの空き容量が不足して、これらの不足を取り戻すまでホストからの要求に応ずることができずにライト要求に対するレイテンシが増大する事態は生じやすくなる。また、サスペンド前の処理が繰り返されることがあり、先行する処理のトータル時間の長期化およびメモリセルの疲弊という難点もある。またさらに、所定ブロックがイレース状態で長時間放置されてデータリテンション等が生じ、次のプログラム時において意図したプログラムができない等の信頼性の低下が生じやすくもなる
【０１７０】
比較例３のメモリシステムは常に巻き戻り無しサスペンドを行う。このため、巻き戻り有りサスペンドと比較してフラッシュ処理及びコンパクション処理等の先行する処理の遅れが生じ難い。また、ホストからの要求にもある程度素早く応ずることができる。しかしながら、フラッシュ処理及びコンパクション処理等に極端な遅れが生じた場合には対応することができず、また、ホストからの緊急度の高いリード要求に充分に素早く応ずることができない場合がある。サスペンド前の先行する処理を引き継ぐとはいえ、サスペンドによる影響は皆無ではなく、所定ブロックがイレース状態またはプログラムの途中の状態で長時間放置されることで信頼性が低下するという、巻き戻り有りサスペンドに準ずる難点も生じてくる。
【０１７１】
以上のように、固定的なサスペンド制御では、刻々と変化するメモリシステムの状態に追随できず、その時々で最適な対応を取ることができない。
【０１７２】
実施形態のメモリシステム１は、巻き戻り有り／無しサスペンド及びサスペンド無しを動的に使い分ける。これにより、先行する処理とホスト３０からの要求に対応する処理等の他の処理との優先順位を適宜変更することができる。結果、総体的に見れば、ホスト３０からの要求に対する応答時間を短縮させることができる。
【０１７３】
実施形態のメモリシステム１は、イレース済みブロック数及びライトバッファ１４ｇの空き容量に応じて巻き戻り有り／無しサスペンドの計画数を設定することで、巻き戻り有り／無しサスペンド及びサスペンド無しを動的に使い分ける。これにより、メモリシステム１の状態に応じて、適正な対応をとることができ、ホスト３０からの要求に対する応答時間を短縮させることができる。
【０１７４】
なお、実施形態のメモリシステム１では、メモリコントローラ１０が巻き戻り有りサスペンドと巻き戻り無しサスペンドとサスペンド無しとを使い分けることとしたが、これに限られない。メモリコントローラが、巻き戻り有り／無しサスペンド及びサスペンド無しのうち、少なくともいずれか２つを使い分ける構成としてもよい。つまり、メモリコントローラが、巻き戻り有りサスペンドとサスペンド無しとを使い分けてもよい。また、メモリコントローラが、巻き戻り無しサスペンドと、サスペンド無しとを使い分けてもよい。また、メモリコントローラが、巻き戻り有りサスペンドと巻き戻り無しサスペンドとを使い分けてもよい。このように、メモリコントローラが、いずれか２つを動的に使い分けることで、これらのいずれかのみを固定的に使用する比較例１〜３に比べ、ホストへの応答時間を短縮する効果が得られる。
【０１７５】
また、実施形態のメモリシステム１では、ＮＡＮＤメモリ２０がイレース処理を実行している際、メモリコントローラ１０がイレース済みブロック数に基づいて、巻き戻り有り／無しサスペンド及びサスペンド無しの回数を適正化することとしたが、これに限られない。メモリコントローラは、追加のイレース処理を伴わずにプログラムが可能なクラスタ数、ページ数、またはワード線数等に基づいて、巻き戻り有り／無しサスペンド及びサスペンド無しの回数を適正化してもよい。上記に挙げたクラスタ数、ページ数、またはワード線数等のブロック数よりも解像度の高い指標を用いてサスペンド計画数を決定することができ、より精密に巻き戻り有り／無しサスペンド及びサスペンド無しの回数を適正化することができる。
【０１７６】
また、実施形態のメモリシステム１では、イレースサスペンド残り回数レジスタ１４ｃ及びプログラムサスペンド残り回数レジスタ１４ｆにおける巻き戻り有り／無しサスペンドの残り回数管理によって、巻き戻り有り／無しサスペンド及びサスペンド無しの回数を制御することとしたが、回数制御の手法はこれに限られない。
【０１７７】
巻き戻り有り／無しサスペンド及びサスペンド無しの回数制御の他の手法としては、例えば巻き戻り有り／巻き戻り無しサスペンドの実行比率を制御するなどしてもよい。イレース処理における巻き戻り有り／無しサスペンドの実行比率は、例えば、他の処理の要求が発生する度に、イレース済みブロック数を参照し、イレースサスペンド計画テーブルから取得してもよいし、イレースコマンドを発行した段階で、イレースサスペンド計画テーブルから決定した比率を用いてもよい。
【０１７８】
例えば、巻き戻り有り／巻き戻り無しサスペンドの実行比率を２：１としたい場合には、先行するイレース処理やプログラム処理に対する他の処理が生じた際、［０，３）（０を含み、３を含まないの意）の範囲の一様乱数値を生成し、一様乱数値がｘであるとして、０≦ｘ＜２のときは巻き戻り有りサスペンドを実行し、２≦ｘ＜３のときは巻き戻り無しサスペンドを実行する。
【０１７９】
巻き戻り有り／無しサスペンド及びサスペンド無しの回数制御の更に他の手法としては、例えば巻き戻り有り／巻き戻り無しサスペンドの最大実行可能数を制限してもよい。この場合、巻き戻り有り／無しサスペンドがこの最大実行可能数に到達したら、それ以降、サスペンドは行わないなどとすることができる。
【０１８０】
（変形例１）
次に、図２０及び図２１を用いて、実施形態の変形例１のメモリシステムについて説明する。変形例１のメモリシステムは、メモリシステムの状態に基づき、イレースサスペンド計画テーブルを補正する点が、上述の実施形態とは異なる。以下、先行する処理がイレースである場合について説明するが、先行する処理がプログラムである場合にも、以下に述べる構成を適用することができる。
【０１８１】
図２０は、実施形態の変形例１にかかるメモリコントローラが保有するイレースサスペンド計画テーブル１４ｊの一例を示す図である。イレースサスペンド計画テーブル１４ｊにおいては、例えばイレース済みブロック数が２である場合において、巻き戻り有りサスペンドの計画数が「Ｎ＋Δ」となっている。また、例えばイレース済みブロック数が１である場合において、巻き戻り無しサスペンドの比率が「Ｎ＋Δ」となっている。Ｎは予め定められた所定数であり、Δは以下に説明する計画補正テーブルから求められる補正値である。
【０１８２】
図２１は、実施形態の変形例１にかかるメモリコントローラが保有するライトのキューデプス（ＱＤ：Ｑｕｅｕｅ  Ｄｅｐｔｈ）に基づく計画補正テーブル１４ｋの一例を示す図である。計画補正テーブル１４ｋはメモリコントローラの備えるＲＡＭに格納されている。ライトのＱＤとは、ホストからメモリシステムに対して発行されたライト要求の数のうちの未応答のライト要求の数であり、メモリシステムにおいて、これ以降、ＮＡＮＤメモリ２０にライトされるべきデータ量であるのライト量、及びライト速度の指標となる。なお、図２１の例では、ライトのＱＤの所定期間内における平均値が用いられている。平均値を算出する際、個々のライト要求についてライトデータのサイズによる重み付けをしてもよい。
【０１８３】
変形例１のメモリシステムにおいて、メモリコントローラの演算部は、例えば計画補正テーブル１４ｋに基づきイレースサスペンド計画テーブル１４ｊを補正する。ライトのＱＤが大きいということは、イレース済みブロックが早く消費されるということを意味し、サスペンドコマンドを多発するとイレース済みブロックが枯渇する恐れがある。演算部は、例えば、イレース済みブロック数が２であり、ライトのＱＤの平均値が０であった場合には、計画補正テーブル１４ｋの計画補正値「１」を用いて巻き戻り有りサスペンドの計画数を（Ｎ＋１）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ（Ｎ＋１）、１と決定される。また例えば、演算部は、イレース済みブロック数が１であり、ライトのＱＤの平均値が３であった場合には、計画補正テーブル１４ｋの補正値「−１」を用いて巻き戻り無しサスペンドの比率を（Ｎ＋（−１））、つまり、（Ｎ−１）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ０、（Ｎ−１）と決定される。なお、（Ｎ−１）の値がマイナスとなったときはゼロに設定される。
【０１８４】
変形例１のメモリシステムは、ライトのＱＤに基づく計画補正テーブル１４ｋでイレースサスペンド計画テーブル１４ｊの計画数を補正する。これにより、イレース済みブロックのこれからの消費量を予測することができ、イレース済みブロックが枯渇することを抑制できる。
【０１８５】
（変形例２）
次に、図２０及び図２２を用いて、実施形態の変形例２のメモリシステムについて説明する。変形例２のメモリシステムは、プログラム／イレースのサイクル数に基づき、イレースサスペンド計画テーブルを補正する点が、上述の実施形態とは異なる。以下、先行する処理がイレースである場合について説明するが、先行する処理がプログラムである場合にも、以下に述べる構成を適用することができる。
【０１８６】
変形例２のメモリコントローラも、上述の図２０のイレースサスペンド計画テーブル１４ｊを有するものとする。
【０１８７】
図２２は、実施形態の変形例２にかかるメモリコントローラが保有するプログラム／イレースのサイクル数に基づく計画補正テーブル１４ｌの一例を示す図である。計画補正テーブル１４ｌはメモリコントローラの備えるＲＡＭに格納されている。ここでのプログラム／イレースのサイクル数は、そのときサスペンド対象となっているブロックに対して実行されてきたプログラム及びイレースのサイクル数である。ここで、「サスペンド対象となっているブロック」とは、他の処理に先行する処理を実行中のブロックで、かつ、他の処理の実行を優先させるために先行する処理をサスペンドすることとなることを意味する。
【０１８８】
変形例１のメモリシステムにおいて、メモリコントローラの演算部は、例えば計画補正テーブル１４ｌに基づきイレースサスペンド計画テーブル１４ｊを補正する。プログラム及びイレースのサイクル数が多いということは、それだけそのブロックのメモリセルの疲弊が進んでいるということであり、メモリセルのこれ以上の疲弊を避けることが望ましい。演算部は、例えば、イレース済みブロック数が２であり、サスペンド対象のブロックのプログラム／イレースのサイクル数が２００であった場合には、計画補正テーブル１４ｌの補正値「０」を用いて巻き戻り有りサスペンドの計画数を（Ｎ＋０）、つまり、Ｎとする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれＮ、１と決定される。また例えば、演算部は、イレース済みブロック数が１であり、サスペンド対象のブロックのプログラム／イレースのサイクル数が６００であった場合には、計画補正テーブル１４ｌの補正値「−２」を用いて巻き戻り無しサスペンドの計画数を（Ｎ−２）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ０、（Ｎ−２）と決定される。なお、（Ｎ−２）の値がマイナスとなったときはゼロに設定される。
【０１８９】
変形例２のメモリシステムは、プログラム／イレースのサイクル数に基づく計画補正テーブル１４ｌでイレースサスペンド計画テーブル１４ｊの計画数を補正する。これにより、例えば疲弊の進んだメモリセルのサスペンドに伴う信頼性低下を抑制することができる。
【０１９０】
（変形例３）
次に、図２０及び図２３を用いて、実施形態の変形例３のメモリシステムについて説明する。変形例３のメモリシステムは、ホスト３０からのリード要求の発行比率に基づき、イレースサスペンド計画テーブルを補正する点が、上述の実施形態とは異なる。以下、先行する処理がイレースである場合について説明するが、先行する処理がプログラムである場合にも、以下に述べる構成を適用することができる。
【０１９１】
変形例３のメモリコントローラも、上述の図２０のイレースサスペンド計画テーブル１４ｊを有するものとする。
【０１９２】
図２３は、実施形態の変形例３にかかるメモリコントローラが保有するリード要求の発行比率に基づく計画補正テーブル１４ｍの一例を示す図である。計画補正テーブル１４ｍはメモリコントローラの備えるＲＡＭに格納されている。ここでのリード要求の発行比率は、ホストからメモリシステムに向けて発行されたリード要求およびライト要求の合計数に対するリード要求の数の比率である。ここで、リード要求およびライト要求の合計数は、例えば直近に受信した所定数のコマンド分に相当する期間において、カウントしたものとすることができる。または、リード要求およびライト要求の合計数は、例えば直近の所定時間に受信したコマンド分に相当する期間において、カウントしたものとすることができる。比率を算出する際、個々のリード要求についてリードデータのサイズに基づく重み付け、個々のライト要求についてライトデータのサイズに基づく重み付けを行ってもよい。
【０１９３】
変形例３のメモリシステムにおいて、メモリコントローラの演算部は、例えば計画補正テーブル１４ｍに基づきイレースサスペンド計画テーブル１４ｊを補正する。リード要求の数が多く、すなわち、リード要求の発行比率が高いときは、イレース済みブロックが枯渇する恐れが少ない。一方で、ライト要求の数が多く、すなわち、リード要求の発行比率が低いときは、イレース済みブロックが枯渇する恐れが高くなる。演算部は、例えば、イレース済みブロック数が２であり、ホストからのリード要求の発行比率が１／（１＋０）、つまり、１であった場合には、計画補正テーブル１４ｍの補正値「２」を用いて巻き戻り有りサスペンドの計画数を（Ｎ＋２）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ（Ｎ＋２）、１と決定される。また例えば、演算部は、イレース済みブロック数が１であり、ホストからのリード要求の発行比率が３／（７＋３）、つまり、０．３であった場合には、計画補正テーブル１４ｍの補正値「−１」を用いて巻き戻り無しサスペンドの計画数を（Ｎ−１）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ０、（Ｎ−１）と決定される。なお、（Ｎ−１）の値がマイナスとなったときはゼロに設定される。
【０１９４】
変形例３のメモリシステムは、リード要求の発行比率に基づく計画補正テーブル１４ｍでイレースサスペンド計画テーブル１４ｊの計画数を補正する。これにより、イレース済みブロックが枯渇することを抑制できる。
【０１９５】
（変形例４）
次に、図２０〜図２３を用いて、実施形態の変形例４のメモリシステムについて説明する。変形例４のメモリシステムは、図２１〜図２３までの計画補正テーブル１４ｋ〜１４ｍの幾つかを組み合わせて用いる点が上述の実施形態とは異なる。すなわち、メモリコントローラの演算部は、例えば計画補正テーブル１４ｋ〜１４ｍの全てに基づきイレースサスペンド計画テーブル１４ｊを補正する。
【０１９６】
変形例４のメモリコントローラも、上述の図２０のイレースサスペンド計画テーブル１４ｊを有するものとする。
【０１９７】
演算部は、例えば、イレース済みブロック数が２であり、ライトのＱＤの平均値が０であり、サスペンド対象のブロックのプログラム／イレースのサイクル数が２００であり、ホストからのリード要求の発行比率が１であった場合には、計画補正テーブル１４ｋの補正値「１」、計画補正テーブル１４ｌの補正値「０」、及び計画補正テーブル１４ｍの補正値「２」を用いて巻き戻り有りサスペンドの計画数を（Ｎ＋１＋０＋２）、つまり、（Ｎ＋３）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ（Ｎ＋３）、１と決定される。
【０１９８】
また例えば、演算部は、イレース済みブロック数が１であり、ライトのＱＤの平均値が３であり、サスペンド対象のブロックのプログラム／イレースのサイクル数が６００であり、ホストからのリード要求の発行比率が０．３であった場合には、計画補正テーブル１４ｋの補正値「−１」、計画補正テーブル１４ｌの補正値「−２」、及び計画補正テーブル１４ｍの補正値「−１」を用いて巻き戻り無しサスペンドの計画数を（Ｎ−１−２−１）、つまり、（Ｎ−４）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ０、（Ｎ−４）と決定される。なお、（Ｎ−４）の値がマイナスとなったときはゼロに設定される。
【０１９９】
（変形例５）
次に、図２０、図２２、及び図２４を用いて、実施形態の変形例５のメモリシステムについて説明する。変形例５のメモリシステムは、ライトのＱＤ、プログラム／イレースのサイクル数、及びリード要求／ライト要求の発行比率等の幾つかのデータに基づき、イレースサスペンド計画テーブルを補正する場合において、図２１〜図２３までの計画補正テーブル１４ｋ〜１４ｍの幾つかを統合した頻度補正テーブルを用いてもよい。
【０２００】
変形例５のメモリコントローラも、上述の図２０のイレースサスペンド計画テーブル１４ｊを有するものとする。
【０２０１】
図２４は、実施形態の変形例５にかかるメモリコントローラが保有する計画補正テーブル１４ｎの一例を示す図である。計画補正テーブル１４ｎはメモリコントローラの備えるＲＡＭに格納されている。計画補正テーブル１４ｎは、図２１の計画補正テーブル１４ｋ及び図２３の計画補正テーブル１４ｍが統合されたものである。
【０２０２】
変形例５のメモリシステムにおいて、メモリコントローラの演算部は、例えば計画補正テーブル１４ｎに基づきイレースサスペンド計画テーブル１４ｊを補正してもよい。また、メモリコントローラの演算部は、例えば頻度補正テーブル１４ｌ，１４ｎに基づきイレースサスペンド計画テーブル１４ｊを補正してもよい。
【０２０３】
演算部は、例えば、イレース済みブロック数が２であり、ライトのＱＤの平均値が０であり、サスペンド対象のブロックのプログラム／イレースのサイクル数が２００であり、ホストからのリード要求の発行比率が１であった場合には、計画補正テーブル１４ｌの補正値「０」、及び計画補正テーブル１４ｎの補正値「３」を用いて巻き戻り有りサスペンドの計画数を（Ｎ＋０＋３）、つまり、（Ｎ＋３）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ（Ｎ＋３）、１と決定される。
【０２０４】
また例えば、演算部は、イレース済みブロック数が１であり、ライトのＱＤの平均値が３であり、サスペンド対象のブロックのプログラム／イレースのサイクル数が６００であり、ホストからのリード要求の発行比率が０．３であった場合には、計画補正テーブル１４ｌの補正値「−２」、及び計画補正テーブル１４ｎの補正値「−１」を用いて巻き戻り無しサスペンドの計画数を（Ｎ−２−１）、つまり、（Ｎ−３）とする。これにより、巻き戻り有り／無しサスペンドの計画数はそれぞれ０、（Ｎ−３）と決定される。なお、（Ｎ−３）の値がマイナスとなったときはゼロに設定される。
【０２０５】
実施形態の変形例５のメモリシステムにおいては、ライトのＱＤ、プログラム／イレースのサイクル数、及びリード要求の発行比率の少なくともいずれかの組み合わせに基づき、イレースサスペンド計画テーブル１４ｊが補正される。これにより、よりいっそう、メモリコントローラによるサスペンドの制御性が上がり、巻き戻り有り／無しサスペンド及びサスペンド無しの回数を適正化することができる。
【０２０６】
なお、実施形態の変形例１、変形例４、及び変形例５のメモリシステムにおいては、メモリシステムのライト量及びライト速度の指標としてライトのＱＤを用いることとしたが、単位時間あたりにホスト３０から受信するライトコマンドのサイズの合計量であるライトスループットの平均値等の他の指標を用いてもよい。
【０２０７】
（変形例６）
次に、図２５を用いて、実施形態の変形例６のメモリシステムについて説明する。変形例６のメモリシステムでは、巻き戻り有りサスペンド及び巻き戻り無しサスペンドの少なくともいずれかの回数が制限されている点が、上述の実施形態とは異なる。
【０２０８】
図２５は、実施形態の変形例６にかかるメモリコントローラが保有するプログラムサスペンド回数制限テーブルの一例を示す図である。
【０２０９】
図２５（ａ）に示すように、プログラムサスペンド回数制限テーブルにおいては、巻き戻り有りプログラムサスペンドコマンドの発行回数のバリエーションを列に取り、巻き戻り無しプログラムサスペンドコマンドの発行回数のバリエーションを行に取り、それぞれのコマンドの発行回数がマトリクス状に配置されている。図２５における各数値は一例である。
【０２１０】
プログラムサスペンド回数制限テーブルは静的なテーブルであって、サスペンド要求が発生するたびに巻き戻り有り／無しサスペンドコマンドの発行実績に基づき参照される。サスペンドコマンドの発行実績は、１回のプログラム処理が完了するたびにゼロにリセットされる。参照したエントリが１のときサスペンドコマンドを発行し、参照したエントリがゼロのときサスペンドコマンドを発行しない。
【０２１１】
図２５（ｂ）に示すように、巻き戻り有りプログラムサスペンドコマンド及び巻き戻り無しプログラムサスペンドコマンドの発行実績がそれぞれ１回であるときは、プログラムサスペンド回数制限テーブルのエントリが１となり、サスペンドコマンドを発行することが可能である。
【０２１２】
図２５（ｃ）に示すように、巻き戻り有りプログラムサスペンドコマンドの発行実績が２回であり、巻き戻り無しプログラムサスペンドコマンドの発行実績が３回であるときは、プログラムサスペンド回数制限テーブルのエントリが０となり、サスペンドコマンドは発行されない。
【０２１３】
図２５（ｄ）に示すように、上記図２５（ａ）〜（ｃ）の例とは別に、巻き戻り有り／無しサスペンドの合計回数を制限するようマトリクスを組んでもよい。
【０２１４】
すなわち、巻き戻り有りサスペンドの発行回数と、巻き戻り無しサスペンドの発行回数との合計数が所定数ｎ（図２５（ｄ）の例ではｎ＝４）未満であることが成立している範囲で１とし、それ以外の範囲で０とすることにより、サスペンドの合計回数を最大でｎに制限している
【０２１５】
また、巻き戻り有りサスペンドコマンドの発行回数と、巻き戻り無しサスペンドコマンドの発行回数とに重みづけを行ってもよい。つまり、例えば、巻き戻り有りサスペンドコマンドの発行回数×Ｎを、図２５（ａ）または図２５（ｄ）のマトリクスの列に当て嵌め、巻き戻り無しサスペンドの発行回数×Ｍを、図２５（ａ）または図２５（ｄ）のマトリクスの行に当て嵌めて、サスペンドコマンドを発行するかしないかを判定してもよい。
【０２１６】
なお、図２５の例では、巻き戻り有り／無しサスペンドコマンドを同一のテーブルで管理し、巻き戻り有り／無しサスペンドの許可または制限（禁止）を共通して行っている。しかし、巻き戻り有り／無しサスペンドコマンドのそれぞれに対してテーブルを用意し、巻き戻り有り／無しサスペンドの許可または制限（禁止）を別個に行ってもよい。
【０２１７】
また、巻き戻り有り／無しサスペンドのいずれかの機能のみ有するメモリシステムにおいては、プログラムサスペンド回数制限テーブルは１行または１列の行列となる。
【０２１８】
また、プログラムサスペンド回数制限テーブルを用いた手法をイレース処理において適用してもよい。
【０２１９】
実施形態の変形例６のメモリシステムにおいては、巻き戻り有りサスペンドの実行回数の実績値、巻き戻り無しサスペンドの実行回数の実績値、及びプログラム／イレースのサイクル数の少なくともいずれかにより、巻き戻り有りサスペンド及び巻き戻り無しサスペンドの少なくともいずれかの回数が制限される。これにより、サスペンドが多発することにより、イレース及びプログラムの処理が遅れてしまう弊害を抑制することができる。また、１回のイレース処理中または１回のプログラム処理中に、サスペンドを何度も実行すると、イレース途中のデータまたはプログラム途中のデータが放置されて短時間のデータリテンションを受ける。実施形態の変形例６のメモリシステムにおいては、巻き戻り有りサスペンド及び巻き戻り無しサスペンドの少なくともいずれかの回数が制限されることにより、意図したイレース及びプログラムができないという信頼性の低下を抑制することができる。
【０２２０】
実施形態の変形例６のメモリシステムにおいては、サスペンドコマンドを過剰に多用することが抑制され、先行する処理の長期化およびメモリセルの疲弊といった難点も回避されやすい。
【０２２１】
なお、変形例６のメモリシステムにおいては、巻き戻り有り／無しサスペンドの少なくともいずれかの回数が制限されていることとしたが、これに限られない。メモリシステムにおいては、巻き戻り有り／無しサスペンドを合わせたサスペンドの合計回数を制限してもよい。
【０２２２】
（変形例７）
次に、図２６〜図２９を用いて、実施形態の変形例７のメモリシステムについて説明する。変形例７のメモリシステムは、時間経過によりサスペンドの計画数を再設定する点、また、再設定においてイレース済みブロック数を参照することでイレース済みブロック数の変化に追随してサスペンドの計画数を設定する点が、上述の実施形態とは異なる。以下、先行する処理がイレースである場合について説明するが、先行する処理がプログラムである場合にも、以下に述べる構成を適用することができる。
【０２２３】
変形例７のメモリコントローラも、実施形態のイレース済みブロック数格納部１４ａ、イレースサスペンド計画テーブル１４ｂ、及びイレースサスペンド残り回数レジスタ１４ｃを有するものとする。
【０２２４】
図２６は、実施形態の変形例７にかかるメモリコントローラが保有するイレースサスペンド計画設定時刻レジスタ１４ｏの一例を示す図である。イレースサスペンド計画設定時刻レジスタ１４ｏは、メモリコントローラの備えるＲＡＭに格納されている。イレースサスペンド計画設定時刻レジスタ１４ｏには、次のサスペンド計画設定時刻ｔ１とサスペンド計画の設定間隔Ｐとの情報が含まれる。次のサスペンド計画設定時刻ｔ１は、メモリコントローラが今現在運用中のサスペンド計画を設定した時刻と、サスペンド計画の設定間隔Ｐとから算出される。次のサスペンド計画設定時刻ｔ１は、メモリコントローラの演算部がサスペンド計画を設定または再設定する度に、演算部により更新される。演算部は、イレースサスペンド計画設定時刻レジスタ１４ｏのサスペンド計画設定間隔Ｐを参照して、サスペンド計画を設定または再設定する。
【０２２５】
図２７は、実施形態の変形例７にかかるメモリシステムにおけるイレースサスペンド計画の設定処理の手順の一例を示すフロー図である。
【０２２６】
図２７に示すように、メモリコントローラのコマンド発行部は、所定のタイミングで、ＮＡＮＤメモリにイレースコマンドを発行する（ステップＳ５０１）。演算部は、イレースコマンドが発行された時点の時刻とサスペンド計画の設定間隔とから算出した、次の計画設定時刻をイレースサスペンド計画設定時刻レジスタ１４ｏに登録する（ステップＳ５０２）。
【０２２７】
演算部は、イレース済みブロック数格納部１４ａに格納されているイレース済みブロック数を取得する（ステップＳ５０３）。演算部は、イレースサスペンド計画テーブル１４ｂを参照して、取得したイレース済みブロック数に対応するよう、巻き戻り有り／無しサスペンドの計画数を決定する（ステップＳ５０４）。演算部は、決定した計画数を巻き戻り有り／無しサスペンドの残り回数として、イレースサスペンド残り回数レジスタ１４ｃに登録する（ステップＳ５０５）。
【０２２８】
演算部は、現在時刻が、イレースサスペンド計画設定時刻レジスタ１４ｏに登録した、次の計画設定時刻に到達したか否かを判断する（ステップＳ５０６）。演算部は、次の計画設定時刻に到達していない場合（ステップＳ５０６：Ｎｏ）、ＮＡＮＤメモリにおけるイレース処理が終了したか否かを判断する（ステップＳ５０８）。ＮＡＮＤメモリにおけるイレース処理が終了していなければ（ステップＳ５０８：Ｎｏ）、ステップＳ５０６に戻り、現在時刻の監視を続ける。
【０２２９】
演算部は、イレースサスペンド計画設定時刻レジスタ１４ｏに登録した、次の計画設定時刻に到達したら（ステップＳ５０６：Ｙｅｓ）、次の計画設定時刻の更新を行った後（ステップＳ５０７）、ステップＳ５０３〜Ｓ５０５の処理を行って巻き戻り有り／無しサスペンドの計画数を再設定する。ここで、イレース済みブロック数は、プログラム処理が実行されること等により減少する場合があり、計画設定時刻ごとに、巻き戻り有り／無しサスペンドの計画数が更新される。
【０２３０】
ＮＡＮＤメモリにおけるイレース処理が終了したら（ステップＳ５０８：Ｙｅｓ）、演算部は、イレースサスペンド計画設定時刻レジスタ１４ｏに登録した、次の計画設定時刻および計画設定間隔をゼロにリセットする（ステップＳ５０９）。
【０２３１】
図２８は、実施形態の変形例７にかかるメモリシステムが管理する巻き戻り有り／無しサスペンドの残り回数の時系列変化を示す図である。
【０２３２】
図２８に示すように、ＮＡＮＤメモリがレディ状態である場合において、イレース済みブロック数が「２」であったとする。つまり、イレース済みブロック数格納部１４ａには「２」が格納されている。イレースコマンドが発行されていないこの時点で、イレースサスペンド残り回数レジスタ１４ｃには、巻き戻り有り／無しサスペンドの残り回数は設定されていない。
【０２３３】
メモリコントローラにおいて、コマンド発行部がイレースコマンドを発行すると、演算部が、イレースサスペンド計画設定時刻レジスタ１４ｏの次の計画設定時刻に、現在時刻ｔ０に計画設定間隔Ｐを足した値を登録する。つまり、次の計画設定時刻は時刻「ｔ０＋Ｐ」である。また、演算部は、イレース済みブロック数格納部１４ａからイレース済みブロック数を取得し、イレースサスペンド計画テーブル１４ｂを参照して、巻き戻り有り／無しサスペンドの計画数をそれぞれ「１」と決定する。また、演算部により、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの残り回数にそれぞれ「１」が登録される。
【０２３４】
ここで、イレース実行中のＮＡＮＤメモリに対する１回目の他の処理（図中、他の処理１）の要求が発生したとする。演算部は、イレースサスペンド残り回数レジスタ１４ｃの数値から、ここでの処理として巻き戻り有りサスペンドを選択する。コマンド発行部は、巻き戻り有りサスペンドコマンドを発行し、更に、１回目の他の処理を実行させる実行コマンドをＮＡＮＤメモリに対して発行する。演算部は、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有りサスペンドの残り回数を減じて「０」とする。
【０２３５】
ＮＡＮＤメモリは、イレース処理を所定区切りまで待つことなく中断し、１回目の他の処理を実施した後、必要に応じて中断前の一部処理を繰り返しつつイレース処理を再開する。イレース処理の再開時、イレース済みブロック数が「２」のままであったとする。その後、次の計画設定時刻「ｔ０＋Ｐ」に到達すると、演算部が、イレースサスペンド計画設定時刻レジスタ１４ｏの次の計画設定時刻に、現在時刻「ｔ０＋Ｐ」に計画設定間隔Ｐを足した値を登録する。つまり、次の計画設定時刻は時刻「ｔ０＋２Ｐ」である。また、演算部は、イレース済みブロック数格納部１４ａからイレース済みブロック数を取得し、イレースサスペンド計画テーブル１４ｂを参照して、巻き戻り有り／無しサスペンドの計画数をそれぞれ「１」「１」と決定する。また、演算部により、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの残り回数にそれぞれ「１」「１」が登録される。
【０２３６】
なお、サスペンド残り回数の再設定時、演算部が、その時のサスペンド残り回数に再設定により決定された計画数を合算してもよい。この場合、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの残り回数はそれぞれ「１」「２」となる。
【０２３７】
イレース処理の再開後、２回目の他の処理（図中、他の処理２）の要求が発生したとする。演算部は、イレースサスペンド残り回数レジスタ１４ｃの数値から、ここでの処理として巻き戻り有りサスペンドを選択する。コマンド発行部は、巻き戻り有りサスペンドコマンドを発行し、更に、２回目の他の処理を実行させる実行コマンドをＮＡＮＤメモリに対して発行する。演算部は、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有りサスペンドの残り回数を減じて「０」とする。
【０２３８】
ＮＡＮＤメモリは、イレース処理を所定区切りまで待つことなく中断し、２回目の他の処理を実施した後、必要に応じて中断前の一部処理を繰り返しつつイレース処理を再開する。イレース処理の終了後、演算部は、イレースサスペンド計画設定時刻レジスタ１４ｏの次の計画設定時刻および計画設定間隔をゼロにリセットする。
【０２３９】
変形例７のメモリシステムは、時間経過によりサスペンドの計画数を再設定する。これにより、サスペンド計画数の早期消費により、その後、極端にレイテンシの長い要求が発生してしまうことを抑制することができる。
【０２４０】
ここで、計画設定時刻において再設定を行うにあたり、イレース済みブロック数の変化に追随してサスペンドの計画数を設定する手法を採ることもできる。
【０２４１】
図２９は、実施形態の変形例７にかかるメモリシステムが管理する巻き戻り有り／無しサスペンドの残り回数の他の時系列変化を示す図である。
【０２４２】
図２９に示すように、ＮＡＮＤメモリにイレース処理を実行中の任意のタイミングにおいて、イレース済みブロック数が「２」であったとする。つまり、イレース済みブロック数格納部１４ａには「２」が格納されている。この状態において、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの残り回数にそれぞれ「１」と「０」とが登録されているものとする。
【０２４３】
その後のタイミングにおいて、他の処理（図中、他の処理１）の要求が発生すると、巻き戻り有りサスペンドコマンドが発行される。これにより、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの残り回数は共に「０」となる。更に、この後のタイミングにおいて、イレースサスペンドまたは他の処理の実行等とは無関係に、当初「２」であったイレース済みブロック数が「１」に減少したとする。
【０２４４】
他の処理が実行され、イレース処理が再開した後に、他の処理（図中、他の処理２）の要求が発生したとする。巻き戻り有り／無しサスペンドの残り回数は共に消尽しており、いずれのサスペンドコマンドも発行されない。しかし、次の計画設定時刻「ｔ０＋Ｐ」に到達した際には、減少したイレース済みブロック数である「１」に基づいて、巻き戻り有り／無しサスペンドの残り回数が新たにイレースサスペンド残り回数レジスタ１４ｃに設定される。新たな設定では、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの残り回数は、それぞれ「０」と「２」とである。
【０２４５】
これを受けて、メモリコントローラは、ＮＡＮＤメモリに他の処理（図中、他の処理２）を実行させるべく、巻き戻り無しサスペンドコマンドを発行する。これにより、イレースサスペンド残り回数レジスタ１４ｃの巻き戻り有り／無しサスペンドの残り回数は、それぞれ「０」と「１」となる。
【０２４６】
変形例７のメモリシステムにおいては、時分割でサスペンド残り回数を設定することにより、巻き戻り有り／無しサスペンドの実行回数を平滑化する。これにより、サスペンド計画数の早期消費を回避し、極端にレイテンシの長い要求が発生してしまうことを抑制し、レイテンシの平滑化を図ることができる。
【０２４７】
なお、所定の周期によらず、イレース済みブロック数が変化したタイミングで再設定を行ってもよい。
【０２４８】
以上、イレース済みブロック数等に基づき、巻き戻り有り／無しサスペンドの回数を制御することにより、メモリシステムの状態を適正化する手法について説明したが、本実施形態の範囲はこれに限られない。
【０２４９】
例えば、１回あたりの先行する処理において実行したサスペンドの回数に基づき、巻き戻り有り／無しサスペンドの回数を制御してもよい。この場合、１回あたりの先行する処理において実行したサスペンドの回数が所定回数未満のときは巻き戻り有りサスペンドを選択し、サスペンドの回数が増加してきたときは巻き戻り無しサスペンドを選択し、サスペンドの回数が許容値を超えたときは巻き戻り有り／無しサスペンドのいずれも選択しない、つまり、サスペンドを行わないようにすることができる。
【０２５０】
また例えば、１回あたりの先行する処理においてサスペンドの期間中にＮＡＮＤメモリ２０が実行したリードの回数に基づき、巻き戻り有り／無しサスペンドの回数を制御してもよい。この場合、１回あたりの先行する処理においてサスペンドの期間中にＮＡＮＤメモリ２０が実行したリードの回数が所定回数未満のときは巻き戻り有りサスペンドを選択し、該リードの回数が増加してきたときは巻き戻り無しサスペンドを選択し、該リードの回数が許容値を超えたときは巻き戻り有り／無しサスペンドのいずれも選択しない、つまり、サスペンドを行わないようにすることができる。
【０２５１】
また例えば、１回あたりの先行する処理においてサスペンドの期間の長短に基づき、巻き戻り有り／無しサスペンドの回数を制御してもよい。この場合、１回あたりの先行する処理においてサスペンドの期間が（積算で）所定期間未満のときは巻き戻り有りサスペンドを選択し、サスペンドの期間が（積算で）増加してきたときは巻き戻り無しサスペンドを選択し、サスペンドの期間が（積算で）許容値を超えたときは巻き戻り有り／無しサスペンドのいずれも選択しない、つまり、サスペンドを行わないようにすることができる。
【０２５２】
（その他の変形例）
上述の実施形態のメモリシステム１では、イレース済みブロック数およびライトバッファ１４ｇの空き容量等のメモリシステム１の状態に応じて、巻き戻り有り／無しサスペンド及びサスペンド無しの頻度を制御することとしたが、ＮＡＮＤメモリの各ブロックを複数の領域に分け、複数領域の個々の異なる状態に対して個別に巻き戻り有り／無しサスペンド及びサスペンド無しの頻度を制御してもよい。
【０２５３】
ＮＡＮＤメモリが複数の領域に分けられる場合には、例えばＮＡＮＤメモリが複数のメモリチップを含む場合等が考えられる。この場合、メモリコントローラは、各メモリチップ内のイレース済みブロック数、各メモリチップにおけるライトのＱＤ、各メモリチップ内のブロックのライト／イレース回数、及び各メモリチップに対するリードコマンド／ライトコマンドの発行比率等を取得して、メモリチップごとに適正な巻き戻り有り／無しサスペンド及びサスペンド無しの頻度を決定することができる。
【０２５４】
また、ＮＡＮＤメモリを複数の領域に分ける場合、ライトバッファの領域がメモリチップごとに割り当てられていてもよい。この場合、メモリコントローラは、各メモリチップに割り当てられたライトバッファの空き容量を取得して、メモリチップごとに適正な巻き戻り有り／無しサスペンド及びサスペンド無しの頻度を決定することができる。
【０２５５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２５６】
１…メモリシステム、１０…メモリコントローラ、１１…制御部、１１ａ…データ取得部、１１ｂ…演算部、１１ｃ…コマンド発行部、１３…メモリＩ／Ｆ、１４…ＲＡＭ、１４ａ…イレース済みブロック数格納部、１４ｂ，１４ｊ…イレースサスペンド計画テーブル、１４ｃ…イレースサスペンド残り回数レジスタ、１４ｄ…ライトバッファ空き容量格納部、１４ｅ…プログラムサスペンド計画テーブル、１４ｆ…プログラムサスペンド残り回数レジスタ、１４ｇ…ライトバッファ、１４ｈ…リードバッファ、１４ｉ…コンパクションバッファ、１４ｋ，１４ｌ，１４ｍ，１４ｎ…計画補正テーブル、１４ｏ…イレースサスペンド計画設定時刻レジスタ、１５…ホストＩ／Ｆ、２０…ＮＡＮＤ型フラッシュメモリ、３０…ホスト、ＢＬＫ…ブロック、ＭＣＡ…メモリセルアレイ。
【図１】
2020155182.tif 000003
【図２】
2020155182.tif 000004
【図３】
2020155182.tif 000005
【図４】
2020155182.tif 000006
【図５】
2020155182.tif 000007
【図６】
2020155182.tif 000008
【図７】
2020155182.tif 000009
【図８】
2020155182.tif 000010
【図９】
2020155182.tif 000011
【図１０】
2020155182.tif 000012
【図１１】
2020155182.tif 000013
【図１２】
2020155182.tif 000014
【図１３】
2020155182.tif 000015
【図１４】
2020155182.tif 000016
【図１５】
2020155182.tif 000017
【図１６】
2020155182.tif 000018
【図１７】
2020155182.tif 000019
【図１８】
2020155182.tif 000020
【図１９】
2020155182.tif 000021
【図２０】
2020155182.tif 000022
【図２１】
2020155182.tif 000023
【図２２】
2020155182.tif 000024
【図２３】
2020155182.tif 000025
【図２４】
2020155182.tif 000026
【図２５】
2020155182.tif 000027
【図２６】
2020155182.tif 000028
【図２７】
2020155182.tif 000029
【図２８】
2020155182.tif 000030
【図２９】
2020155182.tif 000031