(57)【特許請求の範囲】
【請求項１】
それぞれが、データイレースの単位であるブロックを複数含む複数のフラッシュメモリチップと、
前記複数のフラッシュメモリチップに接続されており、ブロックに対してデータのプログラム及びデータのイレースを行うコントローラと
を有し、
各ブロックは、データのプログラムの単位であるページを複数有し、
前記コントローラは、
無効ブロックを複数生成し、
前記複数の無効ブロックのそれぞれについて、ブロックにデータを最近プログラムした時刻である最近プログラム時刻を管理し、
前記複数の無効ブロックのうち、前記最近プログラム時刻からの経過時間である経過プログラム時間が相対的に長い無効ブロック内のデータをイレースする、
フラッシュメモリモジュール。
【請求項２】
前記複数の無効ブロックは、一定数より多くの無効ブロックであり、
前記コントローラは、無効ブロックの数が前記一定数以下となった場合に新たに無効ブロックを生成することにより、前記一定数より多くの無効ブロックを維持する、
請求項１記載のフラッシュメモリモジュール。
【請求項３】
前記コントローラは、前記複数のページのそれぞれの論理アドレスと物理アドレスを対応付けて管理しており、
前記無効ブロックは、前記論理アドレスに対応付けられた前記物理アドレスから特定される有効ページを含まないブロックである、
請求項１又は２記載のフラッシュメモリモジュール。
【請求項４】
前記コントローラは、信頼性低下の危険がありデータがプログラムされているブロックである危険ブロックを検出し、
前記最近プログラム時刻に基づくブロックに関してイレース処理が行われるタイミングの制御において、前記コントローラは、前記危険ブロックの代わりに無効ブロックをイレース処理対象ブロックとして優先的に選択する、
請求項１乃至３のうちのいずれか１項に記載のフラッシュメモリモジュール。
【請求項５】
前記最近プログラム時刻に基づくブロックに関してイレース処理が行われるタイミングの制御において、前記コントローラは、
無効ブロックが選択された回数であるブロック選択数が所定の値未満である場合、無効ブロックを前記イレース処理対象ブロックとして選択し、前記ブロック選択数を更新し、
前記ブロック選択数が所定の値以上である場合、前記危険ブロックを前記イレース処理対象ブロックとして選択し、前記ブロック選択数の値を初期値に戻す、
請求項４記載のフラッシュメモリモジュール。
【請求項６】
前記危険ブロックは、障害ビット数が障害ビット閾値以上のブロックであり、
前記コントローラは、複数の障害ビット閾値から、ブロックの前記経過プログラム時間に対応した障害ビット閾値を特定し、そのブロックの障害ビット数が前記特定された障害ビット閾値以上の場合、そのブロックを前記危険ブロックとして検出する、
請求項５記載のフラッシュメモリモジュール。
【請求項７】
前記経過プログラム時間は、最終ページにデータが最近プログラムされた時刻からの経過時間である第１の経過時間と、前記最終ページ以外のページにデータが最近プログラムされた時刻からの経過時間である第２の経過時間とを含み、
前記危険ブロックを検出する前記コントローラに関する前記経過プログラム時間は、前記第２の経過時間である、
請求項６記載のフラッシュメモリモジュール。
【請求項８】
それぞれが、データイレースの単位であるブロックを複数含む複数のフラッシュメモリモジュールと、
前記複数のフラッシュメモリモジュールに接続されており、ブロックに対してデータのプログラム及びデータのイレースを行うフラッシュコントローラと
を有し、
各ブロックは、データのプログラムの単位であるページを複数有し、
前記フラッシュコントローラは、
無効ブロックを複数生成し、
前記複数の無効ブロックのそれぞれについて、ブロックにデータを最近プログラムした時刻である最近プログラム時刻を管理し、
前記複数の無効ブロックのうち、前記最近プログラム時刻からの経過時間である経過プログラム時間が相対的に長い無効ブロック内のデータをイレースする、
ストレージ装置。
【請求項９】
前記複数の無効ブロックは、一定数より多くの無効ブロックであり、
前記コントローラは、無効ブロックの数が前記一定数以下となった場合に新たに無効ブロックを生成することにより、前記一定数より多くの無効ブロックを維持する、
請求項８記載のストレージ装置。
【請求項１０】
前記コントローラは、前記複数のページのそれぞれの論理アドレスと物理アドレスを対応付けて管理しており、
前記無効ブロックは、前記論理アドレスに対応付けられた前記物理アドレスから特定される有効ページを含まないブロックである、
請求項８又は９記載のストレージ装置。
【請求項１１】
前記フラッシュコントローラは、信頼性低下の危険がありデータがプログラムされているブロックである危険ブロックを検出し、
前記最近プログラム時刻に基づくブロックに関してイレース処理が行われるタイミングの制御において、前記フラッシュコントローラは、前記危険ブロックの代わりに無効ブロックをイレース処理対象ブロックとして優先的に選択する、
請求項８乃至１０のうちのいずれか１項に記載のストレージ装置。
【請求項１２】
前記最近プログラム時刻に基づくブロックに関してイレース処理が行われるタイミングの制御において、前記フラッシュコントローラは、
無効ブロックが選択された回数であるブロック選択数が所定の値未満である場合、無効ブロックを前記イレース処理対象ブロックとして選択し、前記ブロック選択数を更新し、
前記ブロック選択数が所定の値以上である場合、前記危険ブロックを前記イレース処理対象ブロックとして選択し、前記ブロック選択数の値を初期値に戻す、
請求項１１記載のストレージ装置。
【請求項１３】
前記危険ブロックは、障害ビット数が障害ビット閾値以上のブロックであり、
前記フラッシュコントローラは、複数の障害ビット閾値から、ブロックの前記経過プログラム時間に対応した障害ビット閾値を特定し、そのブロックの障害ビット数が前記特定された障害ビット閾値以上の場合、そのブロックを前記危険ブロックとして検出する、
請求項１２記載のストレージ装置。
【請求項１４】
前記経過プログラム時間は、最終ページにデータが最近プログラムされた時刻からの経過時間である第１の経過時間と、前記最終ページ以外のページにデータが最近プログラムされた時刻からの経過時間である第２の経過時間とを含み、
前記危険ブロックを検出する前記フラッシュコントローラに関する前記経過プログラム時間は、前記第２の経過時間である、
請求項１３記載のストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電気的に書き換え可能な不揮発性半導体メモリにデータをプログラムする記憶制御に関する。
【背景技術】
【０００２】
不揮発性半導体メモリでは、内部セルへのデータの記憶（プログラム）の過程で、フローティングゲートに酸化絶縁膜を貫通して電子が送られる。また、記録データのイレース（イレース）の過程で、ＦＧ（Floating  Gate）から酸化絶縁膜を貫通して電子が取り出される。
【０００３】
こうしたデータ記憶の仕組みを有する不揮発性半導体メモリは、プログラムとイレースの処理毎に酸化絶縁膜への負荷が生じる。そして、この負荷が繰り返されることで酸化絶縁膜内に複数の電子トラップ及び正孔トラップが生成される。
【０００４】
不揮発性半導体メモリは、ＦＧ内の電荷量（電子の数）により変動する閾値電圧を測定し、記録データを判別する。このため、前述のとおり酸化絶縁膜内に電子トラップ及び正孔トラップが生成されると、この電子トラップ及び正孔トラップに電子が入り込み電圧が生じ、この電圧がＦＧの閾値電圧を変動させ記録データの正確な判別を困難とする。
【０００５】
こうした電子トラップ及び正孔トラップによる閾値電圧の変動は、プログラム、及びイレースの累積実行回数と制御間隔に依存することが知られている。また、閾値電圧の変動による、データ保持の時間特性（以下、リテンション特性と記す）の変化についても知られている。
【０００６】
ＦＧに蓄えられた電荷量は、時間経過により変化するため、不揮発性半導体メモリのデータ保持期間は限られている。加えて前述の電子トラップ及び正孔トラップによる閾値電圧が変動するため、データの保持期間は、更に短縮される。
【０００７】
不揮発性半導体メモリを記憶媒体とする半導体記憶装置（以下、記憶装置と記す）は、装置仕様として定めたデータ保持期間の基準を満たす必要がある。記憶装置は、データのプログラムとイレース回数等から酸化絶縁膜の劣化具合を予測し、搭載した不揮発性半導体メモリの特定領域のデータ保持期間が、基準を満たないと予測される場合、この記憶領域を使用不可とする。
【０００８】
記憶装置は、こうした使用不可領域が生じても稼働し続けられるようにするため、一般に装置の総記憶データ量以上の予備の記憶領域を搭載し、この予備の記憶領域を前述の使用不可と判断した領域の代替えとして割り当て、常に一定の記憶領域を維持するように制御する。しかし、この割り当てる予備の領域が枯渇したときには、記憶装置は、データを新たに記録する能力を失ったとして停止する。
【０００９】
従って、記憶装置の長寿命化を実現させるには、電子トラップ及び正孔トラップによる閾値電圧の変動を抑え、記憶領域のデータ保持期間が短縮されるのを防止する必要がある。
【００１０】
こうした電子トラップ及び正孔トラップの影響を軽減する制御を開示する文献として、例えば特許文献１がある。特許文献１には、リテンション特性の悪化した領域を一定期間不使用とし、電子トラップおよび正孔トラップを減少させ、再利用する記憶装置が開示されている（特許文献１）。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】ＵＳ２０１０/０１６５６８９  Ａ１
【発明の概要】
【発明が解決しようとする課題】
【００１２】
例えば、不揮発性半導体メモリ（典型的にはフラッシュメモリ）は、複数のブロックより構成され、このブロックを最小イレース単位としている。そして、前述した通り、イレースとプログラムの繰り返しの処理により酸化絶縁膜に電子トラップ及び正孔トラップが生成されるため、ブロック毎にイレース回数の上限が設けられている。
【００１３】
一般的に、半導体メモリは、上書きが不可であり、プログラム済みの領域についてイレースが実施されなければ、その領域に再度プログラムすることができない。従って、データがプログラムされているブロックに新たなデータをプログラムする際、必ずイレースがプログラムとセットで実施される。そのため、記憶装置は、ブロックについてイレースを実施した回数（以下、ブロックイレース回数と記す）をブロック別に管理し、ブロックイレース回数の上限を超えたブロックについては、データ保持期間（具体的には、データを信頼性を持って保持できる期間）を超えたとして、そのブロックを使用不可とし予備ブロックを代替えとして割り当てる。
【００１４】
特定のブロック群に対して、イレースとプログラムが集中した場合、短期間でブロックイレース回数が上限に達し使用不可となるブロックが多数生じてしまう可能性がある。そして、それらのブロックには、予備ブロックを割り当てる必要があるため、予備ブロックが早急に枯渇してしまう。つまり、特定のブロック群へのアクセス集中により、予備ブロックの枯渇が早まり、記憶装置の寿命が短縮してしまうことがある。
【００１５】
記憶装置は、このような特定のブロック群に対してプログラムとアクセスが集中するのを防止するため、ブロックへのプログラム処理を分散させ、ブロック毎のイレース回数を平準化する処理を実施する（以下、この処理をウェアレベリングと記す）。ウェアレベリングは、記憶装置に搭載するブロックのイレース回数の平均値に対して、より少ないイレース回数のブロックへ優先的にデータをプログラムするものである。
【００１６】
このため、記憶装置が搭載するブロックのブロックイレース回数の平均値がＸ（Ｘは１以上の整数）であり、記憶装置が搭載するブロックの中にブロックイレース回数がＹ（Ｙは、Ｙ＜Ｘを満たす整数）であるブロック（以下、対象ブロックと記す）が存在する場合、この対象ブロックが優先的に使用されることになる。このため、この対象ブロックには、プログラムとイレースが短期間に繰り返される可能性が生じる。
【００１７】
一般に、ブロックに対するイレースからそのブロックにデータをプログラムするまでの時間（以下、ＥＰ間隔と記す）が短い方がデータ保持期間は長い。
【００１８】
このため、或るブロックのブロックイレース回数が少なくても、そのブロックが優先的に繰り返し使用されることにより、そのブロックについてプログラムからイレースまでの時間（以下、ＰＥ間隔と記す）が短くなることがある。故に、そのブロックのブロックイレース回数が上限値に達していなくても、データ保持期間が経過してしまっているブロックが短時間で多数生じる可能性がある。これにより、記憶装置の寿命が短縮されてしまう可能性が高まる。
【００１９】
つまり、ブロックイレース回数をカウントする、及びウェアレベリングだけでは、記憶装置の信頼性を維持することが困難となる場合がある。
【００２０】
従って、本発明の目的は、不揮発半導体メモリを記憶媒体とした半導体記憶装置の高信頼化と長寿命化を実現することにある。
【課題を解決するための手段】
【００２１】
半導体記憶装置は、ブロックにデータを最近プログラムした時刻である最近プログラム時刻と、ブロックに対してイレース処理を最近行った時刻である最近イレース時刻との少なくとも一方を表す情報を不揮発性半導体メモリの各ブロックについて含んだ管理情報を記憶している。半導体記憶装置は、（ｂ１）ブロックの最近プログラム時刻と最近イレース時刻の少なくとも一方を基に、そのブロックにデータをプログラムするタイミングを制御する、及び／又は、（ｂ２）ブロックの最近プログラム時刻を基に、そのブロックに対してイレース処理を行うタイミングを制御する。
【００２２】
例えば、半導体記憶装置は、ウェアレベリングによるイレース回数の平準化を実施しながらも半導体記憶装置の通常処理であるプログラムとイレースの各処理の時間的間隔を制御し、最小時間を確保して良い。
【００２３】
また、例えば、半導体記憶装置は、各ブロックに対し、プログラムとイレースの各処理の時間的間隔を上位装置（例えばホスト計算機）からの要求に対して可能な限り長く確保するように制御して良い。
【００２４】
また、例えば、データリテンション特性の悪いブロックを検出した際には、半導体記憶装置は、そのブロックの使用頻度を下げるように制御して良い。これにより、電子トラップおよび正孔トラップの減少が期待され、故に、リテンション特性の回復が期待される。
【発明の効果】
【００２５】
本発明によれば、半導体記憶装置の高信頼化と長寿命化を図ることができる。
【図面の簡単な説明】
【００２６】
【図１】図１は、第１実施例に係るＦＭモジュール１００を含んだ計算機システム１の構成例を示す。
【図２】図２は、メモリチップ１２０の構成例を示す。
【図３】図３は、ブロック２０２の内部構成例を示す。
【図４】図４は、ページ３０１に格納されるデータの例を示す。
【図５】図５は、アドレス変換テーブル５００の一例を示す。
【図６】図６は、ブロック管理テーブル６００の一例を示す。
【図７】図７は、ウェアレベリング管理キュー７００の一例を示す。
【図８】図８は、ＲＡＭ１１４に記憶されるプログラムの例を示す。
【図９】図９は、イレース処理の制御の概要を示す。
【図１０】図１０は、プログラム処理の制御の概要を示す。
【図１１】図１１は、プログラム処理のフローの一例を示す。
【図１２】図１２は、ステップＳ１１０２のフローの一例を示す。
【図１３】図１３は、リード処理のフローの一例を示す。
【図１４】図１４は、リクラメーション処理のフローの一例を示す。
【図１５】図１５は、ＰＥ間隔管理キュー１５００の一例を示す。
【図１６】図１６は、第２実施例における、ブロックの利用サイクルを示した概要図である。
【図１７】図１７は、無効ブロック生成処理のフローの一例を示す。
【図１８】図１８は、イレース処理のフローの一例を示す。
【図１９】図１９は、ＲＡＭ１１４に記憶されるプログラムの例を示す。
【図２０】図２０は、経過日数と障害ビット閾値との関係を表すテーブルの一例を示す。
【図２１】図２１は、管理画面２１００の一例を示す。
【図２２】図２２は、第３実施例におけるイレース処理のフローの一例を示す。
【図２３】図２３は、第３実施例におけるリード処理のフローの一例を示す。
【発明を実施するための形態】
【００２７】
以下、本発明の幾つかの実施例を説明する。
【００２８】
なお、以下の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。
【００２９】
また、以下の説明では、要素を特定するための識別情報として、番号が使用されるが、識別情報として、番号に代えて又は加えて他種の識別情報（例えば英文字）が使用されて良い。
【００３０】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェイス装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされても良い。プログラムを主語として説明された処理は、そのプロセッサを有する装置（例えば、記憶制御装置、記憶装置）が行う処理としても良い。また、プロセッサは、ＣＰＵのようなマイクロプロセッサに代えて又は加えて、処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから各装置にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ、又は、コンピュータ読取可能な記憶メディアであっても良い。
【００３１】
また、管理計算機は、一以上の計算機で構成されて良い。例えば、管理計算機が情報を表示する場合、或いは、管理計算機が表示用情報を遠隔の計算機に送信する場合、一つの計算機が管理計算機である。また、例えば、複数の計算機で管理計算機と同等の機能が実現されている場合は、当該複数の計算機（表示を表示用計算機が行う場合は表示用計算機を含んで良い）が、管理計算機である。
【００３２】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号のみを用いることとし、同種の要素を区別して説明する場合には、参照符号（共通符号と個別符号の組合せ）を用いることがある。
【実施例１】
【００３３】
図１は、本発明の第１実施例に係る半導体記憶装置１００を含んだ計算機システム１の構成例を示す。なお、半導体メモリは典型的にはＦＭ（Flash  Memory)であるため、以下、半導体記憶装置を「ＦＭモジュール」と言う。
【００３４】
計算機システム１は、ホスト計算機１０と、管理計算機１１と、半導体記憶装置（以下、ＦＭ（Flash  Memory）モジュールと言う）１００とを有する。
【００３５】
ＦＭモジュール１００は、内蔵する第１のＦＥ−ＩＦ（Front  End-Interface）１１１を介してホスト計算機１０に接続され、内蔵する第２のＦＥ−ＩＦを介して１１１を介して管理計算機１１に接続される。ＦＭモジュール１００とホスト計算機１０間の通信のプロトコルと、ＦＭモジュール１００と管理計算機１１間の通信のプロトコルは、同じであっても異なっていても良い。
【００３６】
ホスト計算機１０は、例えば、業務システムの中核をなすコンピュータ、ファイルサーバー、もしくは多数のＦＭモジュール１００が接続されるストレージ装置である。
【００３７】
ホスト計算機１０は、例えば、図示省略の、プロセッサ、メモリ、ネットワークインターフェース、及びローカル入出力用のデバイス等のハードウェア資源を備えている。また、ホスト計算機１０は、デバイスドライバ、ＯＳ（Operating  System）、管理プログラム、及びアプリケーションプログラム等のソフトウェア資源も備えている。
【００３８】
ホスト計算機１０のプロセッサが各種プログラム（ソフトウェア資源）を実行することができる。例えば、ホスト計算機１０のプロセッサがアプリケーションプログラムを実行することで、ホスト計算機１０が、ＦＭモジュール１００との通信を行う、及びＦＭモジュール１００に対するデータのリード/ライトコマンドを発行することができる。また、例えば、ホスト計算機１０のプロセッサが管理用プログラムを実行することで、ホスト計算機１０が、ＦＭモジュール１００の使用状況、及び処理状況等の管理情報を取得することができる。また、ホスト計算機１０は、ＦＭモジュール１００の管理単位、制御方法の指定、及び制御方法の変更をすることができる。
【００３９】
管理計算機１１は、計算機システム１全体を管理することができる。管理計算機１１は、例えば、図示省略の、キーボードやマウスなどの入力装置、プロセッサ、液晶ディスプレイ装置などの表示装置、及びメモリ等の記憶資源を備えている。その記憶資源には、各種プログラムが記憶され、このプログラムがプロセッサにより実行され、各種機能が実現される。
【００４０】
ＦＭモジュール１００は、ＦＭコントローラ１１０と、複数個(例えば３２個)の不揮発性半導体メモリチップ（以下、単にメモリチップと言う）１２０を備える。複数のメモリチップ１２０を基に複数のＲＡＩＤグループが構成されても良い。ＲＡＩＤグループは、２以上のメモリチップ１２０で構成されて良い。ＲＡＩＤグループを基に、論理ボリュームが構成されて良い。論理ボリュームは、ホスト計算機１０に提供されても良いし、ホスト計算機１０に提供されない種類の論理ボリューム（例えばプールを構成する論理ボリュームであるプールボリューム）であっても良い。プールボリュームは、２以上の領域（以下、実領域）に分割されて良い。実領域は、Thin  Provisoningに従う仮想的な論理ボリュームを構成する仮想領域に割り当てられて良い。プールを構成する複数のプールボリュームのうちの少なくとも１つは、ＦＭモジュール１００に接続されている外部のストレージ装置（図示せず）の論理ボリュームがマッピングされた仮想的な論理ボリュームであっても良い。
【００４１】
ＦＭコントローラ１１０は、本実施例では、ＦＭモジュール１００に内蔵されたコントローラであるが、ＦＭモジュール１００の外部に存在する計算機であっても良い。ＦＭコントローラ１１０は、ＦＥ−ＩＦ（Front  End-Interface）１１１と、データ転送を相互に行うスイッチ１１２と、記憶資源（例えば、データバッファ１１３と、ＲＡＭ（Random  Access  Memory）１１４）と、プロセッサ１１５と、ＦＭ−ＩＦ（Flash  Memory-Interface）１１６とを備えている。
【００４２】
スイッチ１１２は、プロセッサ１１５、ＲＡＭ１１４、データバッファ１１３、ＦＥ−ＩＦ１１１、及びＦＭ−ＩＦ１１６を接続し、データをアドレス又はＩＤによってルーティングし転送する。
【００４３】
ＦＥ−ＩＦ１１１は、スイッチ１１２を介してＦＭコントローラ１１０の各構成要素と、ホスト計算機１０及び管理計算機１１とを接続する。ＦＥ−ＩＦ１１１は、ホスト計算機１０から、リード/ライトコマンド、及び対象の論理的な格納位置を指定するＬＢＡ（Logical  Block  Address）を受信する。ライトコマンドをホスト計算機１０から受けたＦＥ−ＩＦ１１１は、ホスト計算機１０からライトデータも受信する。また、ＦＥ−ＩＦ１１１は、ホスト計算機１０及び管理計算機１１から、ＦＭモジュール１００に対する制御用のコマンド等を受領し、そのコマンドに応じてＦＭモジュール１００を制御する。また、ＦＥ−ＩＦ１１１は、ＦＭモジュール１００の処理状況、利用状況、及び現在の設定値等を、ホスト計算機１０及び管理計算機１１に通知する。
【００４４】
データバッファ１１３は、ＦＭコントローラ１１０でのデータ転送処理途中の一時的なデータを格納する。
【００４５】
ＲＡＭ１１４は、具体的にはＤＲＡＭ（Dynamic  Random  Access  Memory）などの揮発性メモリである。ＲＡＭ１１４は、ＦＭモジュール１００で用いられるメモリチップ１２０の管理情報１１４０、及び各ＤＭＡ（Direct  Memory  Access）が用いる転送制御情報を含んだ転送リスト等を格納する。なお、ＲＡＭ１１４は、データを格納するデータバッファ１１３の機能の一部又は全てを含み、データの一時的な格納先として用いることもできる。
【００４６】
プロセッサ１１５は、スイッチ１１２を介してＦＭコントローラ１１０の各構成要素と接続され、ＲＡＭ１１４に記憶されたプログラム及び管理情報を基に、ＦＭコントローラ１１０の全体を制御する。また、プロセッサ１１５は、定期的な情報取得、及び割り込み受信機能等により、ＦＭコントローラ１１０の全体を監視する。
【００４７】
ＦＭ−ＩＦ１１６は、複数バス（例えば１６本）によってメモリチップ１２０と接続される。各バスには複数（例えば２本）のメモリチップ１２０を接続される。各バスに接続された各メモリは、ＣＥ(Chip  Enable)信号に基づき独立して制御される。
【００４８】
ＦＭ−ＩＦ１１６は、プロセッサ１１５から指示されるリード/ライトコマンドに応じて処理する。このときＦＭ−ＩＦ１１６は、コマンドの対象を物理アドレス(以下ＰＢＡ（Physical  Block  Address)によって指示される。
【００４９】
ＰＢＡを受領したＦＭ−ＩＦ１１６は、このＰＢＡから必要なメモリチップ１２０（ブロック、ページ）を算出し、メモリチップ１２０に対してブロック、及びページを指定して、リード/ライトコマンドを処理する。
【００５０】
ＦＭ−ＩＦ１１６は、リード処理時には、メモリチップ１２０からデータをリードし、データバッファ１１３に転送する。また、ＦＭ−ＩＦ１１６は、ライト処理時には、ライトデータをデータバッファ１１３から呼び出し、メモリチップ１２０にライトする。
【００５１】
また、ＦＭ−ＩＦ１１６は、ＥＣＣ（Error  Correcting  Code）生成回路、ＥＣＣによるデータ損失検出回路、及びＥＣＣ訂正回路を有している。ＦＭ−ＩＦ１１６は、ライト処理時にはデータに対してＥＣＣを付加してライトする。また、ＦＭ−ＩＦ１１６は、データ呼び出し時にはＥＣＣによるデータ損失検出回路によって、メモリチップ１２０からの呼び出しデータを検査する。データ損失が検出された際には、ＦＭ−ＩＦ１１６は、ＥＣＣ訂正回路によってデータ訂正を行い、訂正ｂｉｔ数をプロセッサ１１５に通知する為、訂正ｂｉｔ数をＲＡＭ１１４に記憶する。
【００５２】
以上説明した、ＦＥ−ＩＦ１１１、スイッチ１１２、データバッファ１１３、ＲＡＭ１１４、プロセッサ１１５、及びＦＭ−ＩＦ１１６は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ(Field  Programmable  Gate  Array)として、一つの半導体素子内で構成してもよいし、複数の個別専用ＩＣ(Integrated  Circuit)を相互に接続した構成であってもよい。
【００５３】
図２は、メモリチップ１２０の構成例を示す。
【００５４】
メモリチップ１２０は、複数（例えば、４０９６個）のブロック２０２で構成される。各ブロック２０２は、複数のページで構成される。メモリチップ１２０は、ブロック単位でイレース処理が行われ、ページ単位でデータのリード／プログラムが行われる。メモリチップ１２０は、例えば、ブロック単位でデータのイレースが可能なＮＡＮＤ型のフラッシュメモリである。フラッシュメモリは、ＮＡＮＤ型でなくて良い（例えばＮＯＲ型でも良い）。
【００５５】
メモリチップ１２０は、レジスタ２０１を備える。レジスタ２０１は、ページサイズ（例えば４ＫＢ＋付加ＥＣＣ用の予備領域）以上の記憶容量を持つレジスタである。
【００５６】
メモリチップ１２０は、ＦＭ−ＩＦ１１６からのリード/ライトコマンドの指示に従って処理する。
【００５７】
ライト処理において、メモリチップ１２０は、まず、ＦＭ−ＩＦ１１６より、ライトコマンド及びライト先情報（例えば、ライトコマンドの対象ブロック、ページ番号、及びページ内のプログラム開始位置を表す情報）を受信する。
【００５８】
次に、メモリチップ１２０は、ＦＭ−ＩＦ１１６より転送されるライトデータを、ページ内のプログラム開始位置（アドレス）順に、レジスタ２０１に格納する。その後、レジスタ２０１は、ＦＭ−ＩＦ１１６からデータ転送完了のコマンドを受領すると、レジスタ２０１に格納されたデータを、指定されたメモリチップ１２０（ページ）にライト（プログラム）する。
【００５９】
リード処理において、メモリチップ１２０は、まず、ＦＭ−ＩＦ１１６からリードコマンド及びリード元情報（例えば、リードコマンドの対象のブロック、及びページ番号）を受信する。次に、メモリチップ１２０は、指定されたブロック２０２のページに格納されたデータをリードし、レジスタ２０１に格納する。その後、レジスタ２０１は、レジスタ２０１に格納されたデータを、ＦＭ−ＩＦ１１６に対して転送する。
【００６０】
図３は、ブロック２０２の内部構成例を示す。
【００６１】
ブロック２０２は、複数（例えば１２８ページ）のページ３０１に分かれており、データの読み出し、及びデータのライトは、ページ単位でのみ処理可能である。また、ブロック２０２内のページ３０１を書き込む順序は規定されており、図では、ページ１から順番に連続的にデータが書き込まれる。
【００６２】
ＦＭモジュール１００では、ホスト計算機１０が指定するＬＢＡと、ＦＭモジュール１００の内部における物理的な記憶位置を指定するアドレスＰＢＡ（Physical  Block  Address）とを、それぞれ別のアドレス体系によって管理すると共に、ＬＢＡとＰＢＡとの対応関係をテーブル情報として管理する（図５参照）。
【００６３】
ＦＭモジュール１００では、また、ライト済みページへの上書きを行うことができず、そのページが属するブロックに対してイレース処理を実施しなければ、再びそのページにライトすることはできない。従って、データを更新する際には、更新前にＬＢＡに対応付けられていたページを新たなページに変更し、その新たなページにデータをライトする。ホスト計算機１０は、このように、ＬＢＡに新たなページが対応付けられたことは分からない。なお、更新前にＬＢＡに対応付けられていたページは無効ページとなる。
【００６４】
また、ＰＢＡはＦＭモジュール１００の任意のページを一意に指定でき、少なくとも１ブロック分のデータサイズ範囲内はページ番号順にアドレスが連続するアドレス体系である。例えば、あるブロックの３ページ目を指定するＰＢＡに対して１ページ分のデータサイズをインクリメントすると４ページ目を指定するＰＢＡとなる。
【００６５】
図４は、ページ３０１に格納されるデータの例を示す。
【００６６】
ページ３０１は、一定ｂｉｔ数(例えば４ＫＢ)のデータを記憶する。ページ３０１には、データ４０１に加えてＦＭ−ＩＦ１１６で付加されたＥＣＣ（Error  Correcting  Code）４０２を格納している。ＥＣＣは、保護するデータ４０１（以下、保護データと言う）に対して隣接して記憶される。データ１  ４０１と、データ１  ４０１に付加されたＥＣＣ４０２を１セットとして、ＥＣＣ  ＣＷ(ECC  CodeWord)を構成するように記憶される。
【００６７】
なお、図４には１ページにＥＣＣ  ＣＷを４個格納した構成について示したが、ページサイズや、ＥＣＣの性能（訂正可能ｂｉｔ数）に合わせて、任意の数とすることができる。
また、上記構成においてデータ損失障害とは、１つのＥＣＣ  ＣＷ当たりの障害ビット数が、そのＥＣＣ  ＣＷを構成するＥＣＣの訂正可能なｂｉｔ数を超過した際に生じる現象である。
【００６８】
以上、ＦＭモジュール１００の構成、及びＦＭモジュール１００のデータの記憶構成について説明した。
【００６９】
図５は、アドレス変換テーブル５００の一例を示す。
【００７０】
アドレス変換テーブル５００は、ＦＭモジュール１００のＲＡＭ１１４に記憶された管理情報１１４０のうちの１つである。
【００７１】
アドレス変換テーブル５００は、ページ（図５の例では４ＫＢ）毎に、ＬＢＡ５０１と、ＰＢＡ５０２とを対応付けて管理する。
【００７２】
ＬＢＡ５０１は、１ページに記憶されるデータの先頭アドレスを示す。ＰＢＡ５０２は、メモリチップ１２０を構成するページを一意に特定するアドレスを示す。なお、ＰＢＡ５０２が対応付けられていない場合、ＬＢＡ５０１には、未割当であることを示す情報が格納される。
【００７３】
本実施例では、ＦＭコントローラ１１０は、ＬＢＡ５０１に対応するページに新たなデータが書かれる度に、そのＬＢＡ５０１に、そのＬＢＡ５０１に対応付けられているＰＢＡ５０２に代えて新たなＰＢＡ５０２を対応付ける。ＦＭコントローラ１１０は、ホスト計算機１０から指定されたＬＢＡ５０１に新たなＰＢＡ５０２を対応付けて、アドレス変換テーブル５００に登録する。なお、図５では、ページサイズ単位でＬＢＡ５０１とＰＢＡと５０２とを対応付けた例を示したが、本発明はこの単位に限定されるものではない。例えば、ＬＢＡ５０１とＰＢＡ５０２とを、ブロックサイズの単位で対応付けることもできる。
【００７４】
続いて、本実施例における特徴的な時間制御を実施する為の管理情報について説明する。
【００７５】
図６は、ブロック管理テーブル６００の一例を示す。
【００７６】
ブロック管理テーブル６００は、ＦＭモジュール１００のＲＡＭ１１４に記憶された管理情報のうちの１つである
【００７７】
ブロック管理テーブル６００は、ブロック（図６の例では１ＭＢ）２０２毎に、ＰＢＡ  Ｇｒｏｕｐ６０１、チップ番号６０２、ブロック番号６０３、イレース回数６０４、前回イレース日時６０５、Ｆｉｒｓｔページプログラム日時６０６、Ｌａｓｔページプログラム日時６０７、最終プログラムページ６０８、及び無効ページ数６０９を対応付けて管理する。
【００７８】
ＰＢＡ  Ｇｒｏｕｐ６０１は、ブロック２０２（図２参照）の先頭アドレス（先頭ＰＢＡ）を示す。
【００７９】
チップ番号６０２は、ブロック２０２を有するメモリチップ１２０の番号を示す。本実施例においては、図６に示すように、アドレスが早いＰＢＡ  Ｇｒｏｕｐ６０１から順番に、アドレスの早いチップ番号６０２を順番に対応付けている。
【００８０】
ブロック番号６０３は、ブロックの番号を示す。本実施例においては、図６に示すように、アドレスが早いＰＢＡ  Ｇｒｏｕｐ６０１から順番に、アドレスの早いブロック番号６０３を順番に対応付けている。
【００８１】
イレース回数６０４は、Ｂｌｏｃｋ番号６０３により特定されるブロックに実施されたイレース処理の回数を示す。ここでイレース処理とは、ブロック２０２に存在する全てのデータをイレースすること、及び、ブロック２０２にデータが存在しなくてもブロック２０２内のデータを再イレースすることを示す。本実施例においては、イレース処理が実施される度に、イレース回数６０４が１ずつインクリメントされる。
【００８２】
前回イレース日時６０５は、ブロック番号６０３により特定されるブロックに対してイレース処理が最近実施された日時を示す。本実施例においては、ブロックに対してイレース処理をした時に、そのイレース処理の日時が前回イレース日時６０５として登録される。
【００８３】
Ｆｉｒｓｔページプログラム日時６０６は、ブロック番号６０３により特定されるブロックの先頭ページに対してデータがプログラムされた日時を示す。ここで「プログラム」とは、レジスタ２０１からブロック２０２（ページ３０１）にデータが書き込まれることを示す。本実施例においては、先頭ページにデータがプログラムされる時に、そのプログラムの日時が、Ｆｉｒｓｔページプログラム日時６０６として登録される。なお、先頭ページに対してプログラムが実施されていないブロックには「全ページイレース状態」、又は、「未書き込み」であることを示す値が、Ｆｉｒｓｔページプログラム日時６０６に登録される。以後、ホスト計算機１０からＦＭモジュール１００にデータを書き込むことを「ライト」と言い、ＦＭモジュール１００内においてデータを書き込むことを「プログラム」と言う。
【００８４】
Ｌａｓｔページプログラム日時６０７は、ブロック番号６０３により特定されるブロック２０２の最終ページにデータがプログラムされた日時を示す。本実施例においては、最終ページにデータがプログラムされる度に、そのプログラム時の日時がＬａｓｔページプログラム日時６０７として登録される。なお、最終ページへのプログラムが実施されていないブロック２０２に関しては、ブロック内の全ページへの書き込みが未完了であることを示す値が、Ｌａｓｔページプログラム日時６０７として登録される。
【００８５】
最終プログラムページ６０８は、ブロック番号６０３により特定されるブロックにおいて、現時点までにプログラムが終了したページの番号を示す。本実施例においては、この最終プログラムページ６０８の値を１つインクリメントすることで、次のプログラム先のページ３０１が特定される。なお、ブロック２０２内の全ページ３０１にデータがプログラムされている場合、最終プログラムページ６０８には、最終ページの番号が登録される。なお、そのブロック２０２には、イレース処理がされるまでデータをプログラムすることができない。
【００８６】
無効ページ数６０９は、ブロック番号６０３により特定されるブロック２０２のうちの無効ページ（ＬＢＡ５０１に対応づけられていないページ）の数を示す。
【００８７】
メモリチップ１２０は、上書き更新不可の為、ホスト計算機１０がＬＢＡ５０１に対してデータ更新を行う際、ＬＢＡ５０１に対して新たなＰＢＡ５０２が対応付けられる（図５参照）。そして、この新たに対応付けられたＰＢＡ５０２に対応するページ３０１に、データがプログラムされる。このため、更新前のデータをプログラムしたページ３０１は、ＬＢＡ５０１との対応付けを失い、ホスト計算機１０から参照されることのない無効ページとなる。本実施例では、こうした無効ページの数がブロック２０２毎に管理され、この無効ページの数に基づいて、後述するリクラメーションの対象とするブロック２０２が選定される。
【００８８】
以上が、ブロック管理テーブル６００についての説明である。なお、本実施例では、図６に示す全ての情報を用いる例について説明するが、ブロック管理テーブル６００は、必ずしも図６に示す全種類の情報により構築されている必要はない。メモリチップ１２０への命令間隔制御における制御対象として「プログラムとイレースの間の時間」、「イレースとプログラムの間の時間」、「イレースと次回イレースの間の時間」、及び「プログラムと次回プログラムの間の時間」等複数が考えられるが、このうち制御対象とする時間により、図６に示す各情報欄の一部のみにより構築されるとしてもよい。例えば、制御対象を「プログラムとイレースの間の時間」とした場合、ブロック管理テーブル６００は、Ｌａｓｔページプログラム日時６０７のみにより構築されるとしてもよい。また、テーブル６００のサイズは大きくなるが、ページ毎に、プログラム日時を表す情報がテーブル６００に登録されても良い。そして、ＰＥ間隔或いはＥＰ間隔について、プログラム日時は、必ずしも先頭又は最終のページのプログラム日時ではなく、先頭及び最終のページ以外のプログラムの日時が、ＰＥ間隔或いはＥＰ間隔についてのプログラム日時として採用されても良い。
【００８９】
また、ブロック管理テーブル６００の各種情報（６０１〜６０９）は、必ずしも、ＲＡＭ１１３に記録されなくてもよい。例えば、ＰＢＡ  Ｇｒｏｕｐ６０１、チップ番号６０２、ブロック番号６０３、イレース回数６０４、前回イレース日時６０５、Ｆｉｒｓｔページプログラム日時６０６、及びＬａｓｔページプログラム日時６０７については、行ごとに、この行に含まれているブロック番号６０３により特定されるブロック２０２の最終ページに記録するとしてもよい。
【００９０】
１つのブロック２０２（１つのページ３０１）について、データがプログラムされてからイレースされるまでの時間（ＰＥ間隔）は、長い方が良い。本実施例では、ＦＭコントローラ１１０は、あるブロック２０２にプログラムされているデータをイレースしようとするとき、このイレース処理の対象のブロック２０２を構成するページ３０１のうち、最後のページ３０１にデータがプログラムされた時間である「Ｌａｓｔページプログラム日時６０７」から現時点までの時間を検出し、この時間が、ある閾値（以下、ＰＥ閾値）以上である場合、イレース処理の対象のブロック２０２にプログラムされているデータをイレースする。このようにすると、ブロック２０２を構成する全ページ３０１のＰＥ間隔を、ＰＥ閾値以上となるように制御することができる。それは、最後のページ３０１よりも前のページ３０１は、データがプログラムされてから現時点までの時間が、最後のページ３０１よりも必ず長くなるからである。つまり、ブロック２０２について最後のページ３０１のＰＥ間隔が、そのブロック２０２について最短のＰＥ間隔となり、そのブロック２０２について最初のページ３０１のＰＥ間隔が、そのブロック２０２について最長のＰＥ間隔となる。
【００９１】
ページ３０１（又はセル：ページ３０１を構成する単位）毎に、プログラム日時を管理することが望ましいが、管理情報が膨大となってしまう。ブロック２０２を構成する全てのページのプログラム日時を管理するのではなく、本実施例の様に、最終ページについてプログラム日時を管理し、これに基づきＰＥ間隔を算出することで、管理情報１１４０のサイズが膨大となるのを防止しつつ、ブロック２０２を構成する全てのページについてＰＥ間隔をＰＥ閾値以上に制御することができる。
【００９２】
また、ページ３０１は、データがイレースされてからプログラムされるまでの時間（ＥＰ間隔）は、短い方が良い。本実施例では、データをプログラムしようとしているブロック２０２（プログラム対象のブロック）の「前回Ｅｒａｓｅ日時６０５」から現時点までの時間を検出し、この時間が、ある閾値（以下、ＥＰ閾値）以下である場合、プログラム対象のブロック２０２にデータをプログラムする。これにより、ＥＰ間隔をＥＰ閾値以下に制御することができる。
【００９３】
なお、ＥＰ間隔（「前回Ｅｒａｓｅ日時６０５」から現時点までの時間）がＥＰ閾値を越えているブロック２０２がある場合、ＦＭコントローラ１１０は、そのブロック２０２にデータがプログラムされていなくても、そのブロック２０２に対してイレース処理を実行する。これにより、「前回Ｅｒａｓｅ日時６０５」が現在日時に更新されるので、ＥＰ間隔が初期値（例えばゼロ）にリセットされる。
【００９４】
図７は、ウェアレベリング管理キュー７００の一例を示す。
【００９５】
ウェアレベリング管理キュー７００は、ＲＡＭ１１４に記憶された管理情報の１つである。ウェアレベリング管理キュー７００は、ブロック２０２（ＰＢＡ  Ｇｒｏｕｐ）のイレース回数を一定数毎にレベル分けにより管理する。ウェアレベリング管理キュー７００は、イレース回数範囲７０１と、ＰＢＡ  Ｇｒｏｕｐ７０２とを関連付けて管理する。
【００９６】
イレース回数範囲７０１は、イレース回数の範囲（イレース回数の上限及び下限の少なくとも一方）を示す。図７では、ＦＭモジュール１００に搭載された全ブロック２０２のイレース回数の統計（例えば平均値）に基づき、５つのレベルに分けた例が示されている。つまり、イレース回数範囲は、ＦＭモジュール１００に搭載された全ブロック２０２のイレース回数の平均値によって異なる。イレース回数範囲は、定期的に又は不定期的に更新されて良い。
【００９７】
図７では、例えば、最もイレース回数の少ないレベル（イレース回数範囲）は、平均値より２０１回以上イレース回数の少ない範囲であり、以後、イレース回数：２００回毎にイレース範囲が区切られている。ブロックのイレース回数を平準化するウェアレベリングでは、イレース回数の少ないブロック群から優先してブロックを利用することで（なるべく小さいレベルに属するブロックを優先的に利用することで）、イレース回数の平準化を実現する。
【００９８】
ＰＢＡ  Ｇｒｏｕｐ７０２は、イレース回数範囲７０１に属するブロック２０２の先頭アドレスを示す。
【００９９】
ＰＢＡ  Ｇｒｏｕｐ７０２は、ＦＩＦＯ（first  In  First  Out）型のキューとして登録されており、キューの最後尾(図７の例では右端)に新たにＰＢＡ  Ｇｒｏｕｐ７０２が登録される。そして、ブロック利用時には、時系列的に最も前に登録されたブロックが使用され、先に登録された全ブロックが利用されるまで、キューの最後尾に登録されたブロックは選択されない。
【０１００】
なお、本実施例では、図７に示すイレース回数を２００回毎に５段階にレベル分けする例について示したが、本発明はこのレベル分けに限定されるものではない。例えば、要求されるイレース回数の平準化の精度により、如何なる範囲でも分類することもできる。また、イレース回数範囲は必ずしも均等でなくて良い。例えば、或るイレース回数範囲は２００回であるが、別のイレース回数範囲は１５０回でも良い。
【０１０１】
以上が、本実施例で用いられる管理情報についての説明である。
【０１０２】
図８は、ＲＡＭ１１４に記憶されるプログラムの例を示す。
【０１０３】
ＲＡＭ１１４には、Ｉ／Ｏ（Input/Output）プログラム１１４１、リクラメーションプログラム１１４２、及びイレースプログラム１１４３が記憶される。これらプログラムは、プロセッサ１１５により実行されることにより、各種機能が実現される。これら、プログラムの詳しい説明は、フローチャートを用いて後述する。
【０１０４】
図９は、イレース処理の制御の概要を示す。
【０１０５】
ＦＭコントローラ１１０は、ＦＭモジュール１００が搭載する各メモリチップ１２０を構成するブロック２０２の「無効ページ数６０９」をチェックし、無効ページ数６０９が基準値より多いブロックを検出する（ステップＳ１）。基準値は、所定の閾値でも良いし、或いは、全ブロック２０２の無効ページ数の平均値であっても良い。つまり、Ｓ１では、無効ページ数が絶対的及び／又は相対的に多いブロックが検出される。ここでは、ブロック２０２Ａが検出されたとする。
【０１０６】
次に、ＦＭコントローラ１１０は、検出したブロック２０２Ａの「Ｌａｓｔページプログラム日時６０７」から現時点までの時間を算出し、その算出した時間（経過時間）がＰＥ閾値以上であるかをチェックする（Ｓ２）。図示の例によれば、ＰＥ閾値は３ｈ（ｈ：時間）である。ブロック２０２Ａは、「Ｌａｓｔページプログラム日時６０７」が「２０１０／４．１４／９：００」である。現在時刻が「２０１０／４．１４／１３：００」であることから、現在までの時間は４ｈである。この場合、ＦＭコントローラ１１０は、ブロック２０２Ａは、最後にプログラムされてからの時間がＰＥ閾値以上となっていると判断する。
【０１０７】
従って、ＦＭコントローラ１１０は、ブロック２０２Ａに対してイレース処理を実行する（Ｓ３）。
【０１０８】
一方、ＦＭコントローラ１１０は、ブロック２０２Ｂを検出しても（Ｓ５）、ブロック２０２Ｂについてはイレース処理を行わない。すなわち、ブロック２０２Ｂの「Ｌａｓｔページプログラム日時６０７」は「２０１０／４．１４／１１：００」であり、現在時刻が「２０１０／４．１４／１３：００」であることから、現在までの時間は２ｈである。その時間（２ｈ）は、ＰＥ閾値（３ｈ）以上ではない。このため、ＦＭコントローラ１１０は、ブロック２０２Ｂに対してイレース処理を実施しない（Ｓ６）。ＦＭコントローラ１１０は、ブロック２０２Ｂに関しては、「Ｌａｓｔページプログラム日時６０７」から現在までの時間がＰＥ閾値以上となった場合、ブロック２０２Ｂに対してイレース処理を実行する。
【０１０９】
このように、Ｌａｓｔページプログラム日時６０７から現在日時までの時間がＰＥ閾値以上ではないブロックに対して、イレース処理が行われない。このため、ブロックのＰＥ間隔がＰＥ閾値になるよう保証される。
【０１１０】
図１０は、プログラム処理の制御の概要を示す。
【０１１１】
ＦＭコントローラ１１０は、イレース処理後にデータが書き込まれていないブロック（以下、イレース済みブロック）２０２Ｃを検出する（Ｓ１１）。ＦＭコントローラ１１０は、そのブロック２０２Ｃの「前回イレース日時６０５」から現時点までの時間を算出し、算出した時間が、ＥＰ閾値以下か否かをチェックする（Ｓ１２）。
【０１１２】
図示の例では、ＥＰ閾値が５ｈである。ブロック２０２Ｃの「前回イレース日時６０５」が「２０１０／４．１５／９：００」である。現在時刻が「２０１０／４．１５／１３：００」であることから、現在までの時間（経過時間）は４ｈである。この場合、ＦＭコントローラ１１０は、ブロック２０２Ｃの「前回イレース日時６０５」からの時間がＥＰ閾値以下であると判断する。この場合、ＦＭコントローラ１１０は、ブロック２０２Ｃの先頭ページにデータをプログラムする（Ｓ１３）。
【０１１３】
一方、ＦＭコントローラ１１０は、イレース済みブロック２０２Ｄを検出しても（Ｓ１４）、ブロック２０２Ｄの先頭ページにデータをプログラムせず、ブロック２０２Ｄに対してイレース処理を行う。具体的には、ブロック２０２Ｄの「前回イレース日時６０５」は「２０１０／４．１５／５：００」である。現在時刻が「２０１０／４．１５／１３：００」であることから、現在までの時間は８ｈである。この場合、ＦＭコントローラ１１０は、ブロック２０２Ｄの「前回イレース日時６０５」からの時間（８ｈ）がＥＰ閾値を超えていると判断する（Ｓ１５）。この場合、ＦＭコントローラ１１０は、ブロック２０２Ｄの先頭ページにデータをプログラムせず、ブロック２０２Ｄに対してイレース処理を行う（Ｓ１６）。
【０１１４】
このように、「前回イレース日時６０５」からの時間がＥＰ閾値を超えているイレース済みブロックの先頭ページにデータが書き込まれない。このため、ＥＰ間隔がＥＰ閾値を超えているブロックが生じてしまうことを回避することができる。
【０１１５】
以下、本実施例で行われる処理の詳細を説明する。
【０１１６】
図１１は、プログラム処理のフローの一例を示す。プロセッサ１１５は、例えば、Ｉ／Ｏプログラム１１４１を実行することにより、図１１を参照して説明する処理を行うことができる。
【０１１７】
ＦＭモジュール１００は、ホスト計算機１０よりライト対象のデータ、及びライト対象領域を指定するＬＢＡを含んだライトコマンドを受信する（Ｓ１１０１）。より具体的には、ＦＥ−ＩＦ１１１を介して、ライトコマンドが、ホスト計算機１０からプロセッサ１１５に通知される。次に、プロセッサ１１５は、ＦＥ−ＩＦ１１１にライト対象のデータを、データバッファ１１３に書き込むよう指示する。ＦＥ−ＩＦ１１１は、ホスト計算機１０からのライト対象のデータをデータバッファ１１３にプログラムする。
【０１１８】
次に、プロセッサ１１５は、Ｓ１１０１にて受信したＬＢＡに対応付けるＰＢＡを取得する（Ｓ１１０２）。この処理は、本実施例の特徴的な処理であるため、詳細については後述する。
【０１１９】
プロセッサ１１５が、ＦＭ−ＩＦ１１６にＥＣＣ(Error  Correcting  Code)の生成を指示する（Ｓ１１０３）。次に、ＦＭ−ＩＦ１１６は、ライト対象のデータを、データバッファ１１３よりＥＣＣの保護データ長単位で読み出し、ＦＭ−ＩＦ１１６の内部のＥＣＣ生成回路により、保護データ長毎にＥＣＣを算出し、データバッファ１１３にプログラムする。
【０１２０】
プロセッサ１１５は、ステップＳ１１０３にて生成したＥＣＣとＳ１１０１にて受領したライト対象のデータを、データバッファ１１３からメモリチップ１２０に転送し、プログラムを実施する（Ｓ１１０４）。具体的には、プロセッサ１１５は、ＦＭ−ＩＦ１１６にライト対象のデータ、及びそれに対して生成したＥＣＣを、メモリチップ１２０に転送し、ＦＭ−ＩＦ１１６にプログラムを実施するように指示する。次に、指示を受けたＦＭ−ＩＦ１１６は、データバッファ１１３よりライト対象のデータとＥＣＣを読み出し、メモリチップ１２０に転送し、メモリチップ１２０にプログラムを指示する。メモリチップ１２０は、その指示に従い、データをプログラムする。データのプログラム先は、Ｓ１１０２で特定されたＰＢＡに対応するページである。
【０１２１】
Ｓ１１０１にて受領したＬＢＡと、Ｓ１１０２にて取得したＰＢＡの対応付けの為、プロセッサ１１５は、アドレス変換テーブル（図５参照）を更新する（Ｓ１１０５）。この処理により、ホスト計算機１０からのＬＢＡに対して対応付けられたＰＢＡの取得が可能となる。具体的には、プロセッサ１１５が、アドレス変換テーブル５００から、ライトコマンドで指定されているＬＢＡに適合するＬＢＡ５０１を探索し、見つかったＬＢＡ５０１に対応するＰＢＡ５０２として、Ｓ１１０２にて取得したＰＢＡを登録する。
【０１２２】
プロセッサ１１５は、ブロック管理テーブル６００を更新する（Ｓ１１０６）。具体的には、下記が行われる。
（Ｓ１１０６−１）プロセッサ１１５が、Ｓ１１０２にて取得したＰＢＡに適合するＰＢＡ  Ｇｒｏｕｐを、ブロック管理テーブル６００から探す。
（Ｓ１１０６−２）次に、プロセッサ１１５は、Ｓ１１０２にて取得したＰＢＡのブロック（図１１の説明において対象ブロック）における、Ｓ１１０４にてプログラム先となったページ、のページ番号３０１を取得する。プロセッサ１１５は、そのページ番号３０１を、最終プログラムページ６０８として登録する。
（Ｓ１１０６−３）なお、プロセッサ１１５は、このページ番号３０１が対象ブロック２０２の先頭ページであるとき、ブロック管理テーブル６００の該当するＦｉｒｓｔページプログラム日時６０６として、現在日時を表す情報を登録する。或いは、プロセッサ１１５は、ページ番号３０１が対象ブロック２０２の最終ページであるとき、Ｌａｓｔページプログラム日時６０７として現在日時を表す情報を登録する。
【０１２３】
以上が、プログラム処理の概要である。
【０１２４】
次に、本実施例の１つの特徴であるステップＳ１１０２について、図１２を用いて説明する。
【０１２５】
イレース処理が実施されてから長い時間が経過、又はページにデータをプログラムしてから長い時間が経過してしまうと、ページ３０１において初期閾値電圧が変動してしまい、プログラム時にフローティングゲートに対して適切な量の電荷を加えることが困難となり、格納データの信頼性が低下してしまうおそれがある。
【０１２６】
こうしたメモリチップ１２０の特性に対して、本実施例では、前回イレース日時からの経過時間、及び先頭ページをプログラムしてからの経過時間を一定時間以内とする制御を行う。
【０１２７】
図１２は、ステップＳ１１０２のフローの一例を示す。
【０１２８】
プロセッサ１１５が、途中プログラムブロック群から候補ブロックを選択する（Ｓ１２０１）。
【０１２９】
具体的には、プロセッサ１１５が、ブロック管理テーブル６００を参照し、最終プログラムページ６０８が最終ページを示していない複数のブロック２０２から任意に１つのブロックを選択する。ここで、最終プログラムページ６０８が最終ページを示していないブロック２０２が、図１２の説明で言う「途中プログラムブロック」であり、任意に選択された１つのブロックが、図１２の説明で言う「候補ブロック」である。
【０１３０】
なお、Ｓ１２０１において、プロセッサ１１５は、イレース回数６０４が基準値（所定の閾値、又は、複数のブロックのイレース回数に基づいて得られた値）以上のブロックを、候補ブロックになり得る途中書きブロックとして良い。これにより、イレース回数６０４が少ないブロック２０２に対して優先的にプログラムできるので、イレースからの時間経過により生じるデータ保持信頼性の低下を軽減できる。
【０１３１】
プロセッサ１１５は、候補ブロックを選択できるか否かを判断する（Ｓ１２０２）。候補ブロックが取得できる場合（Ｓ１２０２：Ｙｅｓ）、プロセッサ１１５は、選択した候補ブロックのＦｉｒｓｔページプログラム日時６０６を特定する（Ｓ１２０３）。
【０１３２】
プロセッサ１１５は、Ｆｉｒｓｔページプログラム日時６０６から現在までの経過時間を算出する（Ｓ１２０４）。
【０１３３】
プロセッサ１１５は、Ｓ１２０４で算出した経過時間が、予め設定された閾値（以下、ＰＰ閾値）以下かどうかを判断する（Ｓ１２０５）。経過時間がＰＰ閾値以下である場合（Ｓ１２０５：Ｙｅｓ）、プロセッサ１１５は、候補ブロックの最終プログラムページの次のページのＰＢＡを特定する（Ｓ１２０６）。Ｓ１２０４で算出された時間経過がＰＰ閾値以下である場合、信頼性は保たれているからである。
【０１３４】
Ｓ１２０４で算出された経過時間がＰＰ閾値を超えている場合（Ｓ１２０５：Ｎｏ）、プロセッサ１１５は、Ｓ１２０１で選択したブロックを途中プログラムブロック群から外す（Ｓ１２０７）。Ｓ１２０４で算出された経過時間がＰＰ閾値を超えている場合、信頼性低下が許容範囲外であるおそれがあるからである。Ｓ１２０７では、具体的には、例えば、プロセッサ１１５は、Ｓ１２０１で選択したブロックについて、最終プログラムページ６０８として、最終ページの値を登録し、Ｌａｓｔページプログラム日時６０７として、現在日時を表す情報を登録して良い。
【０１３５】
一方、候補ブロックを選択できない場合（典型的には、途中プログラムブロックが無い場合）（Ｓ１２０２：Ｎｏ）、プロセッサ１１５は、ウェアリング管理キュー７００を参照して、イレース回数が基準値未満であるブロックを選択する（Ｓ１２０８）。メモリチップ１２０は、前述の通り、ＥＰ時間が長いと信頼性が低下する特性を有する。この為、プログラムの直前にイレースを実施する制御方法が高信頼化に有効である。しかし、本実施例では、メモリチップ１２０のイレースにかかる時間はプログラムやリードの時間と比べて長いという特性に基づき、ＦＭモジュール１００の性能向上を目的として、イレース処理が施されたブロックが予め用意される。本実施例では、複数のイレース済みブロックが、ウェアレベリング管理キュー７００に、イレース回数に応じてレベル分けをして登録される。Ｓ１２０８では、例えば、イレース回数範囲のレベルがなるべく小さいブロックが選択される。
【０１３６】
プロセッサ１１５は、Ｓ１２０８で選択したブロックの「前回イレース日時６０５」を特定する（Ｓ１２０９）。
【０１３７】
プロセッサ１１５は、Ｓ１２０９で特定した前回イレース日時６０５から現時点までの経過時間を算出する（Ｓ１２１０）。
【０１３８】
プロセッサ１１５は、Ｓ１２１０で算出した経過時間がＥＰ閾値以下かどうかをチェックする（Ｓ１２１１）。Ｓ１２１０で算出した経過時間がＥＰ閾値以下である場合（Ｓ１２１２：Ｙｅｓ）、プロセッサ１１５は、Ｓ１２０８で取得したブロックのＦｉｒｓｔページのＰＢＡを特定する（Ｓ１２１３）。
【０１３９】
プロセッサ１１５は、Ｓ１２１０で算出した経過時間がＥＰ閾値以下でない場合（Ｓ１２１２：Ｎｏ）、Ｓ１２０８で選択したブロックに対して、イレース処理を実行する（Ｓ１２１２）。この処理により、前回イレース日時６０５から現時点までの経過時間が初期値（例えばゼロ）にリセットされることになる。プロセッサ１１５は、Ｓ１２１２でイレース処理が実行されたブロックのＦｉｒｓｔページのＰＢＡを特定する（Ｓ１２１３）。
【０１４０】
Ｓ１２１１及びＳ１２１２によれば、Ｓ１２１３で特定されたＰＢＡに対応するページを有するブロックは、前回イレース日時６０５から現時点までの経過時間がＥＰ閾値以下であるブロックであることが保証される。
【０１４１】
Ｓ１２０６又はＳ１２１３で特定されたＰＢＡに対応するページに、図１１のＳ１１０４でデータがプログラムされる。
【０１４２】
次に、リード処理について説明する。
【０１４３】
図１３は、リード処理のフローの一例を示す。
【０１４４】
ＦＭコントローラ１１０は、ホスト計算機１０から、リード対象となるＬＢＡ（図１３の説明で対象ＬＢＡ）を指定したリードコマンドを受信する（Ｓ１３０１）。
【０１４５】
プロセッサ１１５は、アドレス変換テーブル５００を参照し、対象ＬＢＡに割り当てられたＰＢＡを特定する（Ｓ１３０２）。
【０１４６】
プロセッサ１１５は、Ｓ１３０２にて特定したＰＢＡに対応するページからデータをリードする（Ｓ１３０３）。具体的には、プロセッサ１１５が、ＦＭ−ＩＦ１１６に対して、リード命令を発行する。命令を受けたＦＭ−ＩＦ１１６は、ＰＢＡが示すページを有するメモリチップ１２０に対して、ブロック２０２とページ３０１を指定してデータをリードする。
【０１４７】
ＦＭ−ＩＦ１１６は、Ｓ１３０３でリードしたデータに付随するＥＣＣ用いて、リードしたデータの整合性を検査する。この検査にて誤りが検出されれば、ＦＭ−ＩＦ１１６は、ＥＣＣを用いてリードしたデータを修正する（Ｓ１３０４）。
【０１４８】
ＦＭ−ＩＦ１１６は、リードしたデータをホスト計算機１０に転送する。Ｓ１３０４にてデータを修正したのであれば、修正したデータをホスト計算機１０に転送する（Ｓ１３０５）。
【０１４９】
以上が、本実施例におけるリード処理の説明である。
【０１５０】
次に、本実施例におけるリクラメーション処理を説明する。リクラメーション処理は、ホスト計算機１０からの要求の他にライト処理によっても副次的に生じる。
【０１５１】
まず、リクラメーション処理の開始契機を説明する。
【０１５２】
前述の通り、メモリチップ１２０は、一旦、ページにデータをプログラムすると上書きできないという特性をもつ。この為、同一のＬＢＡに対してライトが実施された際、最終プログラムページの次のページにデータがプログラムされ、アドレス変換テーブル５００には、そのＬＢＡに対応するＰＢＡとして、更新前データがプログラムされているページのＰＢＡから、新たにデータがプログラムされたページのＰＢＡが登録される。
【０１５３】
この制御により、ホスト計算機１０に、ＰＢＡが変更されたことを意識させることなくデータの更新が実施される。
【０１５４】
上述の更新ライトが実施されると、更新ライトの度に新たなページを使用する為、ＦＭモジュール１００内のプログラムが可能なページが減る。この為、本実施例のＦＭモジュール１００は、ＦＭモジュール１００内のプログラムが可能なページが一定量以下となった場合に、リクラメーション処理を実施する。
【０１５５】
リクラメーション処理は、例えば、プロセッサ１１５がリクラメーションプログラム１１４２を実行することによって実施される。具体的には、リクラメーション処理では、下記が実行される。
（ｘ１）プロセッサ１１５は、基準値以上の無効ページを有するブロックを探す。ここで言う「基準値」は、所定の閾値であっても良いし、複数のブロックの無効ページ数に基づく値（例えば平均値）であっても良い。つまり、ここでは、無効ページ数が絶対的又は相対的に多いブロックが探される。「無効ページ」とは、アドレス変換テーブル５００にてＬＢＡが対応付けられていないページであって、データがプログラム済みのページである。
（ｘ２）次に、プロセッサは、（ｘ１）で見つかったブロックに含まれる有効ページ（アドレス変換テーブル５００にてＬＢＡに対応付けられているページ）内のデータを他ブロックのページにコピーし、アドレス変換テーブル５００のＬＢＡとの対応付けをコピー先のページに更新する。この処理により、（ｘ１）で見つかったブロック内の全ページが無効ページとされる。つまり、そのブロックが無効ブロックとされる。無効ブロックは、全てのページが無効ページであるブロックである（言い換えれば、ＬＢＡに割り当てられたＰＢＡから特定される有効ページを含まないブロックである）。無効ブロックが、イレース処理されて良いブロックである。
【０１５６】
本実施例のリクラメーション処理では、複数の無効ブロック（イレース対象候補であるブロック）が管理され、無効ブロックに対するイレース処理は、イレース済みブロックの数が閾値以下となった場合に実施されて良い。なお、その閾値は、ＦＭモジュール１００のライト性能に合わせて決定されて良い。
【０１５７】
一方で、メモリチップ１２０の特性によれば、ＰＥ間隔（プログラムからイレースまでの経過時間）が短いと、セルの酸化絶縁膜に生成される電子及び正孔トラップの個数が、ＰＥ間隔が長い場合と比べて多数生じる。この為、ＰＥ間隔が短いブロックの信頼性は低いおそれがある。
【０１５８】
上記特性に対し、本実施例では、リクラメーション契機にて生じるイレース処理において、ＰＥ間隔がＰＥ閾値以下のブロックについてはイレース処理が実施されない。例外として、イレース済みブロックの数が枯渇していれば、イレース済みブロックを確保するために、Ｌａｓｔページプログラム日時６０７からの経過時間がＰＥ閾値以下のブロックに対してイレース処理が施されて良い。その際、イレース処理が施されるブロックは、Ｌａｓｔページプログラム日時６０７からの経過時間がＰＥ閾値以下の複数のブロックのうち、Ｌａｓｔページプログラム日時６０７からの経過時間が最も長いブロックで良い。なお、イレース処理は、例えば、イレースプログラム１１４３をプロセッサ１１５が行うことにより行われて良い。
【０１５９】
図１４は、リクラメーション処理のフローの一例を示す。
【０１６０】
リクラメーション処理は、所定のイベントが検出されたとき、例えば、ＦＭモジュール１００内のイレース済みブロックの数が所定の閾値以下となったことが検出されたときに、開始される。
【０１６１】
プロセッサ１１５は、ブロック管理テーブル６００より、無効ページ数６０９が絶対的又は相対的に多いブロックを特定する（Ｓ１４０１）。Ｓ１４０１で選択されるブロックは、最終ページにデータがプログラム済みのブロックでよい。
【０１６２】
プロセッサ１１５は、Ｓ１４０１にて特定したブロック（図１４の説明において「候補ブロック」）のＬａｓｔページプログラム日時６０７を特定する（Ｓ１４０２）。
【０１６３】
プロセッサ１１５が、Ｓ１４０２にて特定したＬａｓｔページプログラム日時６０７の値と現在の日時の差を算出することで、候補ブロックについて、Ｌａｓｔページプログラム日時６０７からの経過時間を得る（Ｓ１４０３）。
【０１６４】
プロセッサ１１５は、Ｓ１４０３にて算出した経過時間がＰＥ閾値未満かどうかをチェックする（Ｓ１４０４）。Ｓ１４０３で得た経過時間がＰＥ閾値未満の場合（Ｓ１４０４：Ｙｅｓ）、候補ブロックをキャンセルし（Ｓ１４０５）、再度Ｓ１４０１を行う。Ｓ１４０５で、プロセッサ１１５は、キャンセルした候補ブロックが再度選択されないよう、例えば、キャンセルした候補ブロックの番号をＲＡＭ１１４に書込んで良い。Ｓ１４０５のような処理が行われる理由は、Ｓ１４０３で得た経過時間がＰＥ閾値未満のブロックは、データ保持に関する信頼性が低下しているおそれがあるからである。
【０１６５】
一方、Ｓ１４０３で得た経過時間がＰＥ閾値以上の場合（Ｓ１４０４：Ｎｏ）、プロセッサ１１５は、候補ブロック内の全ての有効ページのデータを他のブロックのページにコピーする（Ｓ１４０６）。そして、プロセッサ１１５は、候補ブロックの有効ページのＰＢＡに対応付けられているＬＢＡに、そのＰＢＡに代えて、コピー先ページのＰＢＡを対応付ける（アドレス変換テーブル５００の更新）。この処理により、候補ブロック内の全ページが無効ページとなる。つまり、候補ブロックが無効ブロックとなる。なお、Ｓ１４０１にて取得した候補ブロックが既に無効ブロックであった場合、このステップを実行する必要はなく、プロセッサ１１５は、Ｓ１４０４の処理の次に、Ｓ１４０７の処理を実行することができる。
【０１６６】
プロセッサ１１５は、Ｓ１４０６にて作成した無効ブロックに対してイレース処理を実施する。（Ｓ１４０７）。
【０１６７】
プロセッサ１１５は、Ｓ１４０６にてイレース処理を実施したブロックのイレース回数６０４に１を加算する。そして、プロセッサ１１５は、加算後のイレース回数に基づき、イレース済みブロック（候補ブロック）を、ウェアレベリング管理キュー７００に登録する（Ｓ１４０８）。これにより、候補ブロックは、候補ブロックの加算後のイレース回数が属するイレース回数範囲のレベルに関連付けられる。
【０１６８】
以上が、本実施例におけるリクラメーション処理の説明である。なお、本実施例では、Ｌａｓｔページプログラム日時６０７からの経過時間がＰＥ閾値と比較されるが、比較される経過時間は、これに限定されない。例えば、Ｆｉｒｓｔページプログラム日時６０６からの現時点までの経過時間がＰＥ閾値と比較されても良い。また、Ｌａｓｔページプログラム日時６０７は、実測値でなくても良く、例えば、Ｆｉｒｓｔページプログラム日時６０６から予測された値であっても良い。
【０１６９】
ここまで述べたように、本実施例では、Ｌａｓｔページプログラム日時６０７からの経過時間がＰＥ閾値以上のブロックにイレース処理が施され、その経過時間がＰＥ閾値未満のブロックにはイレース処理が施されない。また、前回イレース日時６０５からの経過時間がＥＰ閾値以下のブロックの先頭ページにデータがプログラムされ、その経過時間がＥＰ閾値を超えているブロックの先頭ページにはデータがプログラムされない（そのブロックにイレース処理が施されてから、そのブロックの先頭ページにデータがプログラムされる）。また、Ｆｉｒｓｔページプログラム日時６０６から経過時間がＰＰ閾値以下の場合に、データが最終プログラムページの次のページにプログラムされる。以上の制御により、ＦＭモジュール１００のデータ保持に関する信頼性の低下を抑えることができる。また、ＰＥ間隔がＰＥ閾値以上であることが確保されるので、イレース回数が上限に達してしまう時期を遅くすることが図れ、以って、ＦＭモジュール１００の高寿命化が期待できる。
【実施例２】
【０１７０】
以下、実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する（なお、これは、実施例３についても同様である）。
【０１７１】
実施例１では、ＰＥ間隔の最小時間（ＰＥ閾値）が規定されるが、実施例２では、ＰＥ閾値が規定されることに代えて、ホスト計算機１０からのコマンドに対して個々のブロックについて可能な限りＰＥ間隔を確保するよう制御が実施される。
【０１７２】
図１５は、ＰＥ間隔管理キュー１５００の一例を示す。
【０１７３】
ＰＥ間隔管理キュー１５００は、ＲＡＭ１１４に記憶された管理情報の一つである、ＰＥ間隔管理キュー１５００は、Ｌａｓｔページプログラム日時から現在日時までの経過時間（以下、プログラム経過時間と言う）によりグループ分けし、各グループの経過時間範囲内に該当する無効ブロックのＰＢＡ  Ｇｒｏｕｐを登録した管理情報である。ＰＥ間隔管理キュー１５００は、プログラム経過時間１５０１と、ＰＢＡ  Ｇｒｏｕｐ１５０２より構成される。
【０１７４】
プログラム経過時間１５０１は、プログラム経過時間を示す情報である。
【０１７５】
図１５の例によれば、プログラム経過時間が４つのレベルに分けられている。プログラム経過時間が最も長いレベルに属するブロック群として、プログラム経過時間が３０分以上であるブロック群があり、次に、プログラム経過時間が２０分以上２９分以下であるブロック群のように、プログラム経過時間の一定の範囲毎にブロックが分類される。本実施例では、プログラム経過時間は、分オーダーまで管理され、秒オーダーについて管理されないが、プログラム経過時間の単位は分までに限定されないで良い。
【０１７６】
ＰＢＡ  Ｇｒｏｕｐ１５０２は、プログラム経過時間レベル（範囲）毎に該当するブロックを示すＰＢＡ  Ｇｒｏｕｐ１５０２の先頭アドレスを格納する。ＰＢＡ  Ｇｒｏｕｐ１５０２はＦＩＦＯ型のキューとして登録されており、ブロックは新たにキューの最後尾に登録される。
【０１７７】
実施例２では、ＰＥ間隔管理キュー１５００を用いて無効ブロックが管理される。無効ブロック数が一定数以下となった際に、無効ブロック生成処理（例えばリクラメーション処理）により無効ブロックが作成され、生成された無効ブロックが、その無効ブロックのプログラム経過時間を基に、ＰＥ間隔管理キュー１５００に登録される。これらの詳細は後述する。
【０１７８】
また、実施例２では、ＰＥ間隔管理キュー１５００は、定期的又は不定期的に、例えば１０分毎に更新される。具体的には、ＦＭコントローラ１１０が、ＰＥ間隔管理キュー１５００を更新する都度に、その更新した時刻から現在までの時間を測定する。ＦＭコントローラ１１０は、時点Ｔ（測定された時間が１０分経過した時点）での無効ブロックのプログラム経過時間が、時点Ｔにおいてその無効ブロックが属するレベルよりも上のレベルに属していれば、その無効ブロックの先頭ページのＰＢＡを、上のレベルのキューの最後尾に登録する。
【０１７９】
なお、本実施例では、１０分経過毎にキュー１５００が変更されるが、キュー１５００の更新は、１０分経過毎に限定されない。例えば１秒単位でキュー１５００が更新されてもよい。
【０１８０】
次に、本実施例における無効ブロック生成処理について説明する。
【０１８１】
図１６は、第２実施例における、ブロックの利用サイクルを示した概要図である。
【０１８２】
データ記録ブロック群１６０１は、有効ページを含むブロックを概念的に示すブロック群である。ＦＭコントローラ１１０は、ブロック管理テーブル６００からデータ記録ブロック群１６０１を把握する。また、ＦＭコントローラ１１０は、無効ブロック群１６０２に登録されたブロック数が一定数以下となった際、データ記録ブロック群１６０１の中から、無効ページが基準値以上のブロック（つまり、無効ページが絶対的に又は相対的に多いブロック）を選択する。その選択されたブロックが、リクラメーション候補ブロックである。そして、ＦＭコントローラ１１０は、リクラメーション候補ブロックの全ての有効ページを、他のブロックのページにコピーする。
【０１８３】
次に、ＦＭコントローラ１１０は、リクラメーション候補ブロックの有効ページが対応していたＬＢＡの対応先を、リクラメーション候補ブロックの有効ページからそれのコピー先ページに変更する。これにより、リクラメーション候補ブロックの全有効ページが無効ページとなる。その結果、リクラメーション候補ブロックは無効ブロックとなる。こうして生成された無効ブロックは、無効ブロック群１６０２に登録される。
【０１８４】
無効ブロック群1６０２には、無効ブロック（全ページが無効ページとなったブロック）が登録されたブロック群である。ＦＭコントローラ１１０は、無効ブロックを、その無効ブロックのプログラム経過時間が該当する、ＰＥ間隔管理キュー１５００のレベルに、登録する。ＦＭコントローラ１１０は、イレース済みブロック群１６０３を構成するブロックの数が一定数以下となった際、無効ブロック群１６０２の中からプログラム経過時間が基準値以上のブロックを選択し、選択した無効ブロックに対してイレース処理をすることで、イレース済みブロックを生成する。こうして生成されたイレース済みブロックは、イレース済みブロック群１６０３に登録される。なお、プログラム経過時間の基準値は、プログラム経過時間の所定のＰＥ閾値でも良いし、無効ブロック群１６０２を構成する複数の無効ブロックのプログラム経過時間に基づく値（例えば平均値）であっても良い。つまり、選択される無効ブロックは、プログラム経過時間が絶対的又は相対的に長い無効ブロックである。
【０１８５】
イレース済みブロック群１６０３は、イレース済みのブロックが登録されたブロック群である。ＦＭコントローラ１１０は、ウェアレベリング管理キュー７００にイレース済みブロックを登録する。
【０１８６】
ＦＭコントローラ１１０は、ホスト計算機１０からのライトコマンドが生じ、途中プログラムブロック（最終ページまでデータが記録されておらず、記録可能なページを持つブロック）が一定数以下となった際、イレース済みブロック群１６０３の中からイレース回数が基準値以下のブロックを選択し、ホスト計算機１０から受領したライトデータを、その選択したブロック内ページにプログラムする。これにより、そのブロックは、データ記録ブロック（途中プログラムブロック）となる。なお、イレース回数の基準値は、イレース回数の所定の閾値でも良いし、イレース済みブロック群１６０３を構成する複数のイレース済みブロックのイレース回数に基づく値（例えば平均値）であっても良い。つまり、選択されるイレース済みブロックは、イレース回数が絶対的又は相対的に少ないイレース済みブロックである。
【０１８７】
以下、実施例２で行われる処理を詳細に説明する。
【０１８８】
図１７は、無効ブロック生成処理のフローの一例を示す。プロセッサ１１５は、例えば、無効ブロック生成プログラム１１４４（図１９参照）を実行することで、図１７で説明する処理を行うことができる。
【０１８９】
プロセッサ１１５は、データ記録ブロック群から無効ブロックの候補（以下、無効候補ブロック）を選択する（Ｓ１７０１）。具体的には、プロセッサ１１５が、ブロック管理テーブル６００を参照し、無効ページ数６０９に格納された値が絶対的又は相対的に多いブロックを無効候補ブロックとして選択する。このとき、プロセッサ１１５は、テーブル６００から、最も無効ページ数の多いブロックを無効候補ブロックとして選択してもよい。また、無効ブロック生成対象の基準として、無効ページ数の閾値があり、プロセッサ１１５は、無効ページ数６０９に登録された値が閾値以上のブロックを無効候補ブロックとして選択してもよい。
【０１９０】
プロセッサ１１５は、Ｓ１７０１にて選択した無効候補ブロックにのＬａｓｔページプログラム日時６０７を特定する（Ｓ１７０２）。
【０１９１】
プロセッサ１１５は、Ｓ１７０２にて特定したＬａｓｔページプログラム日時６０７から現在までの経過時間（プログラム経過時間）を算出する（Ｓ１７０３）。
【０１９２】
プロセッサ１１５は、Ｓ１７０１で選択した無効候補ブロック内の全有効ページを他のブロックの空きページ（有効データでも無効データでもない、データが記録されていないページ）にコピーし、コピー元の有効ページが対応付けられていたＬＢＡの対応先を、コピー元の有効ページからそれのコピー先ページに変更する（Ｓ１７０４）。この処理により無効候補ブロック内の全ページは無効ページとなり、無効候補ブロックは無効ブロックとなる。
【０１９３】
プロセッサ１１５は、ＰＥ間隔管理キュー１５００における、Ｓ１７０４にて算出したプログラム経過時間が該当するレベルに、無効ブロック（全ページが無効ページとなった候補ブロック）を登録する（Ｓ１７０５）。例えば、Ｓ１７０３にて算出されたプログラム経過時間が１２分であった場合、プロセッサ１１５は、ＰＥ間隔管理キュー１５００における、ＰＥ間隔１０分以上１９分以内の行に、無効候補ブロックの先頭ページのＰＢＡを記録する。
【０１９４】
以上が、本実施例における無効ブロック生成処理の説明である。
【０１９５】
次に、本実施例におけるイレース処理について説明する。
【０１９６】
図１８は、イレース処理のフローの一例を示す。
【０１９７】
イレース処理の最初のステップにおいて、プロセッサ１１５は、ＰＥ間隔管理キュー１５００を参照し、最もプロセッサ経過時間の長いレベルよりブロックを選択する（Ｓ１８０１）。図１８の説明において、Ｓ１８０１で選択されたブロックを「イレース候補ブロック」と言う。
【０１９８】
より具体的には、プロセッサ１１５が、ＰＥ間隔管理キュー１５００を参照し、最もプロセッサ経過時間の長いレベル（最上位レベル）（図１５の例では３０分以上）の先頭ブロック（グループに登録された全ブロックのうち、最も過去に登録されたブロック）を特定する。このとき、最上位レベルに登録されたブロックがない場合、プロセッサ１１５が、次に上位のレベル（図１５の例では２０分以上２９分以内）よりブロックを選択する。このように、ブロックを特定できない場合は、プロセッサ１１５は、１段階レベルを下げ、そのレベルからよりブロックを選択する。このように、ブロックが取得できるまで、ブロックの探索範囲が、順にプロセッサ経過時間の低いレベルに変更される。
【０１９９】
プロセッサ１１５は、ブロック管理テーブル６００を参照し、イレース候補ブロックが該当する行のイレース回数６０４の値を特定する（Ｓ１８０２）。
【０２００】
プロセッサ１１５は、ＦＭ−ＩＦ１１６に、イレース候補ブロックを示すＰＢＡとイレースコマンドを通知し、ＦＭ−ＩＦ１１６が、イレース候補ブロックを含むチップに対して、ブロック番号を通知し、且つ、イレースコマンドを送信する（Ｓ１８０３）。
【０２０１】
プロセッサ１１５は、Ｓ１８０２にて特定したイレース回数を１インクリメントする（Ｓ１８０４）。これにより、イレース候補ブロックの新たなイレース回数が決定される。
【０２０２】
プロセッサ１１５は、Ｓ１８０４にて算出したイレース回数を用いて、ウェアレベリング管理キュー７００の該当するレベルに、Ｓ１８０３にてイレース処理を実施した候補ブロック（イレース済みブロック）を登録する。また、新たなイレース回数がブロック管理テーブル６００イレース回数６０４に登録される（Ｓ１８０５）。
【０２０３】
実施例２によれば、プログラム経過時間が長い無効ブロックに対して優先的にイレース処理を施す。これにより、全ブロックのＰＥ間隔がより長くされることが図れる。この結果、短いＰＥ間隔時に生じる電子トラップ及び正孔トラップの数が低減され、高信頼化が期待される。
【０２０４】
また、こうした高信頼化により、データの記憶に使用不可と判断されるブロックを減らし、利用可能なブロックのイレース回数の上限を実質的に増やすことができるため、ＦＭモジュール１００の長寿命化が期待できる。
【０２０５】
なお、実施例１におけるＰＥ間隔の最小時間規定と、本実施例におけるＰＥ間隔を可能な限り確保する制御（つまり実施例１と実施例２）は、組み合わせて実施されてもよい。
【実施例３】
【０２０６】
ここまで、通常処理の中でＰＥ間隔の最小時間を制限し（実施例１）、またはＰＥ間隔を長く制御する（実施例２）例について述べてきた。ＰＥ間隔の短縮により電子トラップおよび正孔トラップが多量に発生するのを抑え、不揮発性半導体メモリのデータ保持に関する信頼性（データ保持信頼性）の低下を防ぐことが期待できる。
【０２０７】
実施例３では、稼働中にデータ保持信頼性が低いブロックが検出され、そのブロックのＰＥ間隔を長くすることで、生じた正孔トラップおよび電子トラップを減らし、データ保持信頼性を向上させることが期待できる。つまり、本実施例により、使用不可となるブロックを減少することができる。
【０２０８】
不揮発性半導体メモリは、一般にデータの保持期間が有限である。このため、一定期間毎にデータをリードし他所にコピーする処理を行うことが望ましい。こうした処理は、一般に「リフレッシュ処理」と呼ばれる。また、不揮発性半導体メモリは、データ記録後の時間経過とともに障害ビット数が増加する。このため、ＦＭコントローラ１１０は、定期的又は不定期的にＦＭモジュール１００内の全記憶領域をリードし、各ページに生じている障害ビット数を検査することができる。この処理を、本実施例において「ベリファイ処理」と呼ぶ。
【０２０９】
図２０は、経過日数と障害ビット閾値との関係を表すテーブルの一例を示す。
【０２１０】
データをプログラムしてから日数が経過すると、メモリの障害ビットは増加していく。このため、図２０に示すテーブル２０００によれば、経過日数２００１（例えば或るページ（例えば先頭ページ又は最終ページ）にデータをプログラムしてから現在までの日数）の値が長いと、障害ビット閾値２００２は高い。障害ビット閾値は、障害ビット数の閾値である。
【０２１１】
本実施例では、リード処理（ホスト計算機１０からのリードコマンドの処理）、リフレッシュ処理およびベリファイ処理の少なくとも１つの処理において、ＦＭコントローラ１１０は、ブロックについての経過日数（例えば或るページ（例えば先頭ページ又は最終ページ）にデータをプログラムしてから現在までの日数）に対応する障害ビット閾値２００２を特定する。ＦＭコントローラ１１０は、障害ビット数（または、ブロック内全ECC CWの平均障害bit数）が障害ビット閾値以上のブロック（以下、危険ブロックと言う）を検出する。より具体的には、ＦＭコントローラ１１０は、まず前述の何れかの処理においてブロック内のページからデータをリードする。そして、ＦＭコントローラ１１０は、そのページを構成するＥＣＣ毎の障害ビット数を取得する。次に、ＦＭコントローラ１１０は、障害ビット数が障害ビット閾値以上となったブロックを危険ブロックとして特定する。なお、障害ビット閾値は、ＥＣＣで修正可能なｂｉｔ数以下の値で良い。
【０２１２】
危険ブロックと判断されたブロックは、実施例２で述べた無効ブロック生成処理の対象となる。ＦＭコントローラ１１０は、危険ブロックに含まれる全ページのデータを別のブロックにコピーし、アドレス変換テーブル５００を更新する。この処理により、危険ブロックが無効ブロックとなる。そして、ＦＭコントローラ１１０は、その無効ブロックを危険ブロック管理キュー（図示せず）に登録する。危険ブロック管理キューは、ＦＩＦＯ型のキューであり、ブロックをキューに登録する際には、キューの最後尾に登録する。
【０２１３】
実施例３では実施例２と同様に、無効ブロックはＰＥ間隔管理キュー１５００に登録される。
【０２１４】
図２１は、管理画面２１００の一例を示す。
【０２１５】
管理画面２１００は、管理計算機１１に表示される画面である。管理計算機１１は、複数（又は一）のＦＭモジュール１００を管理している。
【０２１６】
管理画面２１００には、管理計算機１１が管理している複数のＦＭモジュール１００のＩＤ（モジュールリスト）が表示される。モジュールリストのうちの１以上のＦＭモジュールＩＤをユーザが選択することができる。
【０２１７】
管理画面２１００は、時間表示エリア２１０１を有し、この画面２１００上の前面に、ブロック表示画面２１０２が表示される。この画面２１０２には、複数のＦＭモジュールＩＤからユーザにより選択されたＦＭモジュールに関する情報が表示される。管理計算機１１が、複数のＦＭモジュール１００から管理情報を収集しており、その管理情報の全部又は一部が、画面２１００及び２１０２の少なくとも一方に表示されて良い。
【０２１８】
時間表示エリア２１０１には、「許容最小ＰＥ間隔」及び「許容最大ＥＰ間隔」が表示される。この「許容最小ＰＥ間隔」（つまりＰＥ閾値）及び「許容最大ＥＰ間隔」（つまりＥＰ閾値）は、本実施例では、この管理画面２１００からユーザは変更できないが、これらの閾値のうちの少なくとも１つがユーザによってこの画面２１００から変更されても良い。
【０２１９】
ブロック表示画面２１０２は、モジュールリストからユーザに選択されたＦＭモジュールＩＤに対応するＦＭモジュールについて、「総ブロック数」及び「危険ブロック数」を表示する。「総ブロック数」は、ユーザに選択されたＦＭモジュール１００が有するブロックの総数であり、「危険ブロック数」は、それらのブロックのうちの危険ブロックの数である。危険ブロックは、前述したように、障害ビット数が障害ビット閾値以上となったブロックである。
【０２２０】
図２２は、イレース処理のフローの一例を示す。
【０２２１】
本実施例では、前述したように、障害ビット数が障害ビット閾値以上であるブロックが危険ブロックとして管理される。ＦＭコントローラ１１０は、危険ブロックを、なるべくイレース対象とならないようにする。なぜなら、メモリチップ１２０は、データがプログラムされた状態で放置すると、次回プログラム時の記録データに生ずる障害ビット数が減少するという特性を有するからである。危険ブロックは、そのブロックのプログラム経過時間が所定時間を経過した後、イレース対象のブロックとなるように制御される。
【０２２２】
プロセッサ１１５は、ＦＭモジュール１００が管理するブロック選択数が、所定の閾値未満かどうかを判断する（Ｓ２２０１）。このとき閾値は、例えば１０万である。
【０２２３】
ブロック選択数が閾値未満である場合（Ｓ２２０１：Ｙｅｓ）、実施例２と同様に、プロセッサ１１５は、ＰＥ間隔管理キュー１５００より無効ブロックを選択（Ｓ２２０２）する。プロセッサ１１５は、ブロック選択数を１インクリメントする。従って、前述の「ブロック選択数」とは、危険ブロックでない無効ブロックが選択された回数を示す。Ｓ２２０４〜Ｓ２２０７までの処理は、実施例２のＳ１８０２〜Ｓ１８０５（図１８参照）とほぼ同じであるため、説明を省略する。
【０２２４】
一方、ブロック選択数が所定の閾値以上の場合（Ｓ２２０１：Ｎｏ）、プロセッサ１１５は、危険ブロック管理キューよりブロック（図２２の説明においてイレース候補ブロック）を取得する（Ｓ２２０８）。ブロック選択数がゼロから閾値以上に増えたということは、ブロック選択数がゼロから閾値以上に増えるまでの時間だけ危険ブロックは選択されずに放置されていたことを意味する。故に、危険ブロックにおいて次回プログラム時の記録データに生ずる障害ビット数が減少する可能性がある。危険ブロックは、望ましくは何らかのデータがプログラム済みのブロックである。
【０２２５】
プロセッサ１１５は、ブロック選択数を初期値（例えば０）とする（Ｓ２２０９）。これにより、以後、ブロック選択数が再び閾値以上に増えるまで、危険ブロックがイレース候補ブロックとして選択されることは無い。
【０２２６】
Ｓ２２０９の後、プロセッサ１１５は、Ｓ２２０４の処理を行う。
【０２２７】
図２３は、リード処理のフローの一例を示す。
【０２２８】
Ｓ２３０１〜Ｓ２３０４までの処理は、図１３のＳ１３０１〜Ｓ１３０４と、ほぼ同じであるため説明を省略する。
【０２２９】
プロセッサ１１５は、リード元のブロックの障害ビット数を特定する（Ｓ２３０５）。
【０２３０】
プロセッサ１１５は、リード元ブロックのプログラム経過日数に対応する障害ビット閾値を図２０に示したテーブル２０００から特定し、Ｓ２３０５で特定した障害ビット数が特定された障害ビット閾値未満かどうかをチェックする（Ｓ２３０６）。
【０２３１】
障害ビット数が障害ビット閾値未満である場合（Ｓ２３０６：Ｙｅｓ）、プロセッサ１１５は、修正したデータをホスト計算機１０に転送する（Ｓ１３０５）。
【０２３２】
一方、特定した障害ビット数が障害ビット閾値以上の場合（Ｓ２３０６：Ｎｏ）、プロセッサ１１５は、リード元ブロックを危険ブロックとして登録する（Ｓ２３０７）。
【０２３３】
実施例３によれば、危険ブロックではない無効ブロックよりも低い頻度で危険ブロックがイレース候補ブロックとして選択される。これにより、危険ブロックのＰＥ間隔が延長される。ＰＥ間隔が延長されると、危険ブロックの酸化膜内にある電子トラップおよび正孔トラップのデトラップが行われ、危険ブロックのデータ保持能力は回復し、再度データ保持信頼性を維持可能となる。これにより、使用不可となるブロックが減り、利用可能なイレース回数が増加し、ＦＭモジュール１００の長寿命化が期待される。
【０２３４】
なお、上記の説明によれば、危険ブロックは、障害ビット数が障害ビット閾値以上のブロックであるが、障害ビット数と障害ビット閾値の比較は、データ単位、ページ単位、ブロック単位、など、所定の単位で行われて良い。
【０２３５】
また、危険ブロックは、障害ビット数が障害ビット閾値以上のブロックに代えて又は加えて、下記の（１）及び（２）のうちの少なくとも１つに該当するブロックであっても良い。
（１）プログラムにかかる時間が第１の基準値未満である。
（＊）ブロックが劣化すると、酸化絶縁膜にホールができる。ＦＧ（フローティングゲート）にＮ個の電子をいれたつもりが、ＦＧにはＮ個未満しか入らず、残りは酸化絶縁膜のホールに入るおそれがある。この場合、注入される電子の数は、Ｎ個未満で済むので、プログラムにかかる時間は短くなる。
（＊）第１の基準値は、所定の閾値であっても良いし、複数のブロックのプログラム時間（プログラムに要した時間）に基づく値（例えば平均値）であっても良い。つまり、この（１）は、「プログラムにかかる時間が絶対的又は相対的に長い」ということで良い。
（２）イレースにかかる時間が第２の基準値未満である。
（＊）ブロックが劣化すると、イレース処理においてなかなか電子がＦＧから出ていかない。
（＊）第２の基準値は、所定の閾値であっても良いし、複数のブロックのイレース時間（イレース処理に要した時間）に基づく値（例えば平均値）であっても良い。つまり、この（２）は、「イレースにかかる時間が絶対的又は相対的に短い」ということで良い。
【０２３６】
以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されない。
【０２３７】
例えば、ＬＢＡは、多段であっても良い。例えば、ホスト計算機１０から指定されるＬＢＡは、論理ボリュームにおける領域の第１段のＬＢＡであって、第１段のＬＢＡには、ＦＭモジュール１００が認識する第２段のＬＢＡが対応付けられていて、第２段のＬＢＡに、ＰＢＡが対応付けられても良い。多段であっても、第１段のＬＢＡに間接的にＰＢＡが対応付けられる。
【０２３８】
また、例えば、実施例３は、実施例１及び２を含むが、実施例２を含まないでも良い。この場合、例えば、図２２のＳ２２０２では、無効ページが絶対的又は相対的に多いブロックが選択され、Ｓ２２０３で、ブロック選択数が１インクリメントされても良い。
【符号の説明】
【０２３９】
１００…ＦＭモジュール、１１０…ＦＭコントローラ、１２０…メモリ（不揮発性半導体メモリ）
【図１】
0005989156.tif 000002
【図２】
0005989156.tif 000003
【図３】
0005989156.tif 000004
【図４】
0005989156.tif 000005
【図５】
0005989156.tif 000006
【図６】
0005989156.tif 000007
【図７】
0005989156.tif 000008
【図８】
0005989156.tif 000009
【図９】
0005989156.tif 000010
【図１０】
0005989156.tif 000011
【図１１】
0005989156.tif 000012
【図１２】
0005989156.tif 000013
【図１３】
0005989156.tif 000014
【図１４】
0005989156.tif 000015
【図１５】
0005989156.tif 000016
【図１６】
0005989156.tif 000017
【図１７】
0005989156.tif 000018
【図１８】
0005989156.tif 000019
【図１９】
0005989156.tif 000020
【図２０】
0005989156.tif 000021
【図２１】
0005989156.tif 000022
【図２２】
0005989156.tif 000023
【図２３】
0005989156.tif 000024