(57)【要約】【課題】メモリシステムの寿命を延ばす。【解決手段】データ消去の単位であるブロックを複数個有する不揮発性メモリ１０を含むメモリシステム１の制御方法であって、各ブロックのデータが消去された消去時期を計測する工程と、ブロックごとに、空き状態或いは使用中状態を示す状態値と消去時期とを対応付けるブロックテーブル３０Ｂを作成する工程と、短期的に書き換えが集中したブロックを検出する工程と、ブロックテーブルの情報に基づいて、空き状態かつ消去時期が古い第１のブロックを選択する工程と、ブロックテーブルの情報に基づいて、使用中状態かつ消去時期が古い第２のブロックを選択する工程と、第１のブロックが検出ブロックに含まれる場合に、第２のブロックのデータを第１のブロックに移動する工程とを含む。【選択図】      図４
2010067284.tif 000002
【特許請求の範囲】
【請求項１】
データ消去の単位であるブロックを複数個有する不揮発性メモリを含むメモリシステムの制御方法であって、
各ブロックのデータが消去された消去時期を計測する工程と、
ブロックごとに、空き状態或いは使用中状態を示す状態値と前記消去時期とを対応付けるブロックテーブルを作成する工程と、
短期的に書き換えが集中したブロックを検出する工程と、
前記ブロックテーブルの情報に基づいて、空き状態かつ消去時期が古い第１のブロックを選択する工程と、
前記ブロックテーブルの情報に基づいて、使用中状態かつ消去時期が古い第２のブロックを選択する工程と、
前記第１のブロックが前記検出されたブロックに含まれる場合に、前記第２のブロックのデータを前記第１のブロックに移動する工程と、
を具備することを特徴とするメモリシステムの制御方法。
【請求項２】
前記第１のブロックは、前記第２のブロックから前記第１のブロックへデータが移動された場合に、再度、選択されることを特徴とする請求項１に記載のメモリシステムの制御方法。
【請求項３】
各ブロックの消去回数をカウントする工程をさらに具備し、
前記ブロックテーブルは、前記消去回数を格納することを特徴とする請求項１又は２に記載のメモリシステムの制御方法。
【請求項４】
前記第１のブロックが前記検出されたブロックに含まれる場合、或いは前記第１のブロックと前記第２のブロックとの消去回数の差が閾値を超えた場合に、前記第２のブロックのデータを前記第１のブロックに移動することを特徴とする請求項３に記載のメモリシステムの制御方法。
【請求項５】
前記検出する工程は、ブロック間の消去時期の差が大きい境界を検出し、この境界より消去時期が新しいブロックを短期的に書き換えが集中したブロックとして検出することを特徴とする請求項１乃至４のいずれかに記載のメモリシステムの制御方法。
【請求項６】
前記ブロックテーブルは、短期的に書き換えが集中したブロックであるか否かを示すフラグを格納することを特徴とする請求項１乃至５のいずれかに記載のメモリシステムの制御方法。
【請求項７】
前記検出する工程は、
使用中状態のブロックのうちで、任意の第３のブロックと、前記第３のブロックの次に消去時期が新しい第４のブロックとの消去時期の差を算出する工程と、
この差が所定間隔より大きい場合に、全ブロックのうちで前記第４のブロックより消去時期が新しいブロックを検出する工程とを含むことを特徴とする請求項１乃至６のいずれかに記載のメモリシステムの制御方法。
【請求項８】
前記算出する工程は、使用中状態のブロックの情報を消去時期順に整列し、前記整列された情報に基づいて、前記第３のブロックと前記第４のブロックとの消去時期の差を算出することを特徴とする請求項７に記載のメモリシステムの制御方法。
【請求項９】
前記検出する工程は、
使用中状態のブロックに対して現在時刻と消去時期との差を算出する工程と、
この差が閾値を越えたブロックのうち消去時期が最も新しい第５のブロックを判定する工程と、
全ブロックのうちで前記第５のブロックより消去時期が新しいブロックを検出する工程とを含むことを特徴とする請求項１乃至６のいずれかに記載のメモリシステムの制御方法。
【請求項１０】
前記算出する工程は、使用中状態のブロックの情報を消去時期順に整列し、前記整列された情報に基づいて、現在時刻とブロックの消去時期との差が閾値を越えたか否かを判定することを特徴とする請求項９に記載のメモリシステムの制御方法。
【請求項１１】
前記第１のブロックは、空き状態かつ消去時期が最も古いことを特徴とする請求項１乃至１０のいずれかに記載のメモリシステムの制御方法。
【請求項１２】
前記第１のブロックは、空き状態かつ消去時期が最も古い方から一定数のブロックのうちで、消去回数が最も少ないことを特徴とする請求項１乃至１０のいずれかに記載のメモリシステムの制御方法。
【請求項１３】
前記第１のブロックは、空き状態かつ消去時期が最も古い方から一定割合数のブロックのうちで、消去回数が最も少ないことを特徴とする請求項１乃至１０のいずれかに記載のメモリシステムの制御方法。
【請求項１４】
前記第１のブロックは、空き状態かつ消去時期が一定時期より古いブロックのうちで、消去回数が最も少ないことを特徴とする請求項１乃至１０のいずれかに記載のメモリシステムの制御方法。
【請求項１５】
前記第２のブロックは、使用中状態かつ消去時期が最も古いことを特徴とする請求項１乃至１４のいずれかに記載のメモリシステムの制御方法。
【請求項１６】
前記第２のブロックは、使用中状態かつ消去時期が最も古い方から一定数のブロックのうちで、消去回数が最も少ないことを特徴とする請求項１乃至１４のいずれかに記載のメモリシステムの制御方法。
【請求項１７】
前記第２のブロックは、使用中状態かつ消去時期が最も古い方から一定割合数のブロックのうちで、消去回数が最も少ないことを特徴とする請求項１乃至１４のいずれかに記載のメモリシステムの制御方法。
【請求項１８】
前記第２のブロックは、使用中状態かつ消去時期が一定時期より古いブロックのうちで、消去回数が最も少ないことを特徴とする請求項１乃至１４のいずれかに記載のメモリシステムの制御方法。
【請求項１９】
前記不揮発性メモリから読み出されたデータの誤り数を算出する工程をさらに具備し、
前記ブロックテーブルは、ブロックごとに誤り数を格納し、
前記第２のブロックは、使用中状態かつ誤り数が一定数より多いブロックのうちで、消去回数が最も少ないことを特徴とする請求項１乃至１４のいずれかに記載のメモリシステムの制御方法。
【請求項２０】
前記計測する工程は、全てのブロックにおいて実行される通算消去回数をカウントし、
前記消去時期は、前記通算消去回数に対応することを特徴とする請求項１乃至１９のいずれかに記載のメモリシステムの制御方法。
【請求項２１】
前記計測する工程は、各ブロックが消去された時刻を計測し、
前記消去時期は、前記時刻に対応することを特徴とする請求項１乃至１９のいずれかに記載のメモリシステムの制御方法。
【請求項２２】
前記計測する工程は、各ブロックが消去されたときの当該メモリシステムの通電時間を計測し、
前記消去時期は、前記通電時間に対応することを特徴とする請求項１乃至１９のいずれかに記載のメモリシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリシステムの制御方法に係り、例えばＮＡＮＤ型フラッシュメモリを備えたメモリシステムの制御方法に関する。
【背景技術】
【０００２】
近年、不揮発性半導体メモリは、大型コンピュータから、パーソナルコンピュータ、家電製品、携帯電話等、様々な用途で利用されている。この不揮発性半導体メモリの一種としては、電気的に書き換えが可能であり、不揮発性、大容量化、高集積化が可能なＮＡＮＤ型フラッシュメモリが知られている。近年では、このＮＡＮＤ型フラッシュメモリは、ハードディスクドライブ（ＨＤＤ）の置き換えとしても考えられている。
【０００３】
ＮＡＮＤ型フラッシュメモリは、書き込みを行う前に消去処理が必要な不揮発性半導体メモリであり、その寿命は、書き換え回数に依存している。ＮＡＮＤ型フラッシュメモリのデータの書き込み／消去は、基板−制御ゲート間に高電圧を印加することにより、電荷蓄積層（例えば、浮遊ゲート）に電子を注入／放出させる。これを多数回行うと浮遊ゲート周りのゲート酸化膜が劣化してしまい、浮遊ゲートに注入した電子が時間の経過とともに抜けていき、結果として、データが破壊されてしまう可能性がある。すなわち、書き換え回数が増えると、書き換えをしてからデータを保持（リテンション）できる期間が短くなってしまう（リテンション特性の低下）。
【０００４】
また、パーソナルコンピュータ等が記録するデータは、時間的局所性、及び領域的局所性を兼ね備えている（非特許文献１参照）。そのため、データを記録する際に外部から指定されたアドレスにそのまま記録していくと、特定の領域に短期間に書き換え、すなわち消去処理が集中し、消去回数の偏りが大きくなる。
【０００５】
一方で、ＮＡＮＤ型フラッシュメモリの寿命は、消去処理の間隔にも依存しており、その間隔が長いほどリテンション特性が良く、寿命が延びることが確認されている（非特許文献２参照）。これは、消去間隔が短いとリテンション特性が悪く、寿命が損なわれることも示している。また、短い間隔で書き込みを行ったとしても、相応の長期間消去処理を行わなければリテンション特性が回復することも確認されている（非特許文献３参照）。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】David A. Patterson and John L. Hennessy, “Computer Organization and Design: The Hardware/Software Interface”, Morgan Kaufmann Pub, 2004/8/31
【非特許文献２】Neal Mielke et al., “Flash EEPROM Threshold Instabilities due to Charge Trapping During Program/Erase Cycling”, IEEE TRANSACTIONS ON DEVICE AND MATERIALS RELIABILITY, VOL. 4, NO. 3, SEPTEMBER 2004, PP.335-344
【非特許文献３】Neal Mielke et al., “Recovery Effects in the Distributed Cycling of Flash Memories”, 44th Annual International Reliability Physics Symposium, San Jose, 2006, PP.29-35
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、不揮発性メモリのある特定領域に書き換えが集中するのを抑制することで、寿命を延ばすことが可能なメモリシステムの制御方法を提供する。
【課題を解決するための手段】
【０００８】
本発明の一視点に係るメモリシステムの制御方法は、データ消去の単位であるブロックを複数個有する不揮発性メモリを含むメモリシステムの制御方法であって、各ブロックのデータが消去された消去時期を計測する工程と、ブロックごとに、空き状態或いは使用中状態を示す状態値と前記消去時期とを対応付けるブロックテーブルを作成する工程と、
短期的に書き換えが集中したブロックを検出する工程と、前記ブロックテーブルの情報に基づいて、空き状態かつ消去時期が古い第１のブロックを選択する工程と、前記ブロックテーブルの情報に基づいて、使用中状態かつ消去時期が古い第２のブロックを選択する工程と、前記第１のブロックが前記検出されたブロックに含まれる場合に、前記第２のブロックのデータを前記第１のブロックに移動する工程とを具備する。
【発明の効果】
【０００９】
本発明によれば、不揮発性メモリのある特定領域に書き換えが集中するのを抑制することで、寿命を延ばすことが可能なメモリシステムの制御方法を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態に係るメモリシステム１を備えた計算機システムの一例を示す概略図。
【図２】第１の実施形態に係るメモリシステム１の構成を示す概略図。
【図３】ＮＡＮＤ型フラッシュメモリ１０に含まれる１個のブロックの構成を示す回路図。
【図４】ＮＡＮＤコントローラ１１の構成の一例を示すブロック図。
【図５】ブロック制御部３０及び消去時期計測部３１の構成を示すブロック図。
【図６】ＮＡＮＤコントローラ１１による一連の書き込み動作を示すフローチャート。
【図７】ＮＡＮＤコントローラ１１によるブロック解放処理を示すフローチャート。
【図８】割当ブロック選択部３２の構成を示すブロック図。
【図９】割当ブロック選択部３２による割当ブロック選択処理を示すフローチャート。
【図１０】ＮＡＮＤコントローラ１１によるブロック割当処理を示すフローチャート。
【図１１】ＮＡＮＤコントローラ１１によるブロック消去処理を示すフローチャート。
【図１２】短期書き換え検出部３４の構成を示すブロック図。
【図１３】短期書き換え検出部３４による短期書き換え検出処理を示すフローチャート。
【図１４】短期書き換え検出処理の具体例を説明する図。
【図１５】平準化部３５の構成を示すブロック図。
【図１６】ＮＡＮＤコントローラ１１による平準化処理を示すフローチャート。
【図１７】入替元ブロック選択部３３の構成を示すブロック図。
【図１８】入替元ブロック選択部３３による入替元ブロック選択処理を示すフローチャート。
【図１９】本発明の第２の実施形態に係る割当ブロック選択部３２の構成を示すブロック図。
【図２０】第２の実施形態に係る割当ブロック選択部３２による割当ブロック選択処理を示すフローチャート。
【図２１】本発明の第３の実施形態に係る入替元ブロック選択部３３の構成を示すブロック図。
【図２２】第３の実施形態に係る入替元ブロック選択部３３による入替元ブロック選択処理を示すフローチャート。
【図２３】本発明の第４の実施形態に係る短期書き換え検出部３４の構成を示すブロック図。
【図２４】短期書き換え検出部３４による短期書き換え検出処理を示すフローチャート。
【図２５】図２４に続く短期書き換え検出処理を示すフローチャート。
【図２６】短期書き換え検出処理の具体例を説明する図。
【図２７】本発明の第５の実施形態に係るＮＡＮＤコントローラ１１の構成の一例を示すブロック図。
【図２８】ブロック制御部３０の構成を示すブロック図。
【図２９】ＮＡＮＤコントローラ１１による読み出し動作を示すフローチャート。
【図３０】入替元ブロック選択部３３による入替元ブロック選択処理を示すフローチャート。
【図３１】実施例に係るＳＳＤ１の構成を示すブロック図。
【図３２】ドライブ制御回路１０２の構成を示すブロック図。
【図３３】プロセッサ１０８の構成を示すブロック図。
【図３４】ＳＳＤ１００を搭載したポータブルコンピュータの一例を示す斜視図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
【００１２】
［第１の実施形態］
本実施形態のメモリシステムは、例えば、ホスト装置が実装されたプリント基板上に実装され、バスを介してホスト装置との間でデータの転送を行う。或いは、本実施形態のメモリシステムは、ホスト装置に対して着脱可能なように構成され、ホスト装置に接続された状態でバスを介してホスト装置との間でデータの転送を行う。図１は、本実施形態のメモリシステム１を備えた計算機システムの一例を示す概略図である。
【００１３】
計算機システムは、中央演算処理装置（ＣＰＵ：central processing unit）２、ＤＲＡＭ（dynamic random access memory）等のメインメモリ３、メインメモリ３を制御するメモリコントローラ４、及び本実施形態のメモリシステム１を備えている。ＣＰＵ２、メインメモリ３、及びメモリシステム１は、互いに、アドレスを扱うアドレスバス５、及びデータを扱うデータバス６を介して接続されている。
【００１４】
このような計算機システムでは、ＣＰＵ２からの転送要求（読出要求、或いは書込要求）に応じて、書込要求であればＣＰＵ２のデータ（外部から入力されたデータを含む）、或いはメインメモリ３のデータがメモリシステム１に転送され、読出要求であればメモリシステム１のデータがＣＰＵ２、或いはメインメモリ３に転送される。
【００１５】
メモリシステム１は、不揮発性半導体メモリの一種であるＮＡＮＤ型フラッシュメモリ１０、及びこのＮＡＮＤ型フラッシュメモリ１０を制御するＮＡＮＤコントローラ１１を備えている。以下に、メモリシステム１の構成の一例について説明する。
【００１６】
［１．メモリシステム１の構成］
図２は、メモリシステム１の構成を示す概略図である。メモリシステム１は、ＮＡＮＤ型フラッシュメモリ１０、及びＮＡＮＤコントローラ１１を備えている。ＮＡＮＤコントローラ１１は、ホストインターフェース回路（ホストＩ／Ｆ）２１、演算処理装置（ＭＰＵ：micro processing unit）２２、ＲＯＭ（read only memory）２３、ＲＡＭ（random access memory）２４、及びＮＡＮＤインターフェース回路（ＮＡＮＤ Ｉ／Ｆ）２５を備えている。
【００１７】
ホストインターフェース回路２１は、所定のプロトコルに従って、ＮＡＮＤコントローラ１１とホスト装置（ＣＰＵ２、メインメモリ３）との間のインターフェース処理を行う。
【００１８】
ＭＰＵ２２は、メモリシステム１全体の動作を制御する。ＭＰＵ２２は、例えば、メモリシステム１が電源供給を受けたときに、ＲＯＭ２３に格納されているファームウェア（制御プログラム）をＲＡＭ２４上に読み出して所定の処理を実行することにより、各種のテーブルをＲＡＭ２４上に作成する。また、ＭＰＵ２２は、ホスト装置から書込要求、読出要求、消去要求を受け、これらの要求に応じてＮＡＮＤ型フラッシュメモリ１０に所定の処理を実行する。
【００１９】
ＲＯＭ２３は、ＭＰＵ２２により制御される制御プログラム等を格納する。ＲＡＭ２４は、ＭＰＵ２２の作業エリアとして使用され、ＲＯＭ２３からロードされた制御プログラムや各種テーブルを記憶する。ＮＡＮＤインターフェース回路２５は、所定のプロトコルに従って、ＮＡＮＤコントローラ１１とＮＡＮＤ型フラッシュメモリ１０との間のインターフェース処理を行う。
【００２０】
ＮＡＮＤ型フラッシュメモリ１０は、データ消去の最小単位であるブロックを複数個配列して構成されている。図３は、ＮＡＮＤ型フラッシュメモリ１０に含まれる１個のブロックの構成を示す回路図である。各ブロックは、Ｘ方向に沿って順に配列された（ｍ＋１）個のＮＡＮＤストリングを備えている（ｍは、０以上の整数）。（ｍ＋１）個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴ１は、ドレインがビット線ＢＬ０〜ＢＬｍに接続され、ゲートが選択ゲート線ＳＧＤに共通接続されている。また、（ｍ＋１）個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴ２は、ソースがソース線ＳＬに共通接続され、ゲートが選択ゲート線ＳＧＳに共通接続されている。
【００２１】
各メモリセルトランジスタＭＴは、半導体基板上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（metal oxide semiconductor field effect transistor）から構成される。積層ゲート構造は、半導体基板上に、ゲート絶縁膜、電荷蓄積層（浮遊ゲート電極）、ゲート間絶縁膜、制御ゲート電極が順に積層されて構成されている。メモリセルトランジスタＭＴは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。メモリセルトランジスタＭＴは、２値（１ビット）を記憶するように構成されていてもよいし、多値（２ビット以上のデータ）を記憶するように構成されていてもよい。
【００２２】
また、メモリセルトランジスタＭＴは、浮遊ゲート電極を有する構造に限らず、ＭＯＮＯＳ（metal-oxide-nitride-oxide-silicon）型など、電荷蓄積層としての窒化膜界面に電子をトラップさせることで閾値調整可能な構造であってもよい。ＭＯＮＯＳ構造のメモリセルトランジスタＭＴについても同様に、１ビットを記憶するように構成されていてもよいし、多値（２ビット以上のデータ）を記憶するように構成されていてもよい。
【００２３】
各ＮＡＮＤストリングにおいて、（ｎ＋１）個のメモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている（ｎは、０以上の整数）。すなわち、（ｎ＋１）個のメモリセルトランジスタＭＴは、隣接するもの同士で拡散領域（ソース領域若しくはドレイン領域）を共有するような形でＹ方向に直列接続される。
【００２４】
そして、最もドレイン側に位置するメモリセルトランジスタＭＴから順に、制御ゲート電極がワード線ＷＬ０〜ＷＬｎにそれぞれ接続されている。従って、ワード線ＷＬ０に接続されたメモリセルトランジスタＭＴのドレインは選択トランジスタＳＴ１のソースに接続され、ワード線ＷＬｎに接続されたメモリセルトランジスタＭＴのソースは選択トランジスタＳＴ２のドレインに接続されている。
【００２５】
ワード線ＷＬ０〜ＷＬｎは、ブロック内のＮＡＮＤストリング間で、メモリセルトランジスタＭＴの制御ゲート電極を共通に接続している。つまり、ブロック内において同一行にあるメモリセルトランジスタＭＴの制御ゲート電極は、同一のワード線ＷＬに接続される。この同一のワード線ＷＬに接続される（ｍ＋１）個のメモリセルトランジスタＭＴは１ページとして取り扱われ、このページごとにデータの書き込み及びデータの読み出しが行われる。
【００２６】
また、ビット線ＢＬ０〜ＢＬｍは、ブロック間で、選択トランジスタＳＴ１のドレインを共通接続している。つまり、複数のブロック内において同一列にあるＮＡＮＤストリングは、同一のビット線ＢＬに接続される。
【００２７】
本発明の各実施形態における各機能ブロックは、ハードウェア、及びソフトウェアのいずれか、又は両者の組み合わせとして実現することができる。このため、各機能ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェアとして実現されるか、又はソフトウェアとして実現されるかは、具体的な実施態様、或いはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれる。
【００２８】
以下に、ＮＡＮＤコントローラ１１のより具体的な構成の一例について説明する。図４は、本実施形態におけるＮＡＮＤコントローラ１１の構成の一例を示すブロック図である。
【００２９】
ＮＡＮＤコントローラ１１は、ブロック制御部３０、消去時期計測部３１、割当ブロック選択部３２、入替元ブロック選択部３３、短期書き換え検出部３４、平準化部３５、及びＮＡＮＤインターフェース回路（ＮＡＮＤ Ｉ／Ｆ）２５を備えている。
【００３０】
消去時期計測部３１は、ＮＡＮＤ型フラッシュメモリ１０に含まれる各ブロックのデータが消去されるごとに、当該ブロックの消去時期を計測する。そして、消去時期計測部３１は、この計測した消去時期をブロック制御部３０に送る。
【００３１】
ブロック制御部３０は、ブロックごとに、消去回数や消去時期等を含む各種情報を管理する。また、ブロック制御部３０は、ＣＰＵ２からの転送要求に応じて、ＮＡＮＤ型フラッシュメモリ１０に対して書込要求、読出要求、及び消去要求を発行する。具体的には、ブロック制御部３０は、後述するアドレステーブル３０Ａ、及びブロックテーブル３０Ｂを備えており、これらのテーブルを利用して、ＮＡＮＤ型フラッシュメモリ１０に書込要求、読出要求、及び消去要求を発行する。
【００３２】
割当ブロック選択部３２は、例えば外部（ＣＰＵ２、或いはメインメモリ３等）から供給される新たなデータをＮＡＮＤ型フラッシュメモリ１０に書き込む際に、この書き込みに割り当てるブロック（以下、割当ブロックという）を選択する。すなわち、割当ブロック選択部３２は、ブロックテーブル３０Ｂに記憶されている全ブロックの情報（全ブロック情報）をブロック制御部３０から受け、所定の条件に従って割当ブロックを選択する。そして、割当ブロック選択部３２は、この割当ブロックに対応するブロック番号（割当ブロック番号）をブロック制御部３０に送る。また、割当ブロック選択部３２は、全ブロック情報のうち割当ブロックに対応する情報（割当ブロック情報）を平準化部３５に送る。なお、ＮＡＮＤ型フラッシュメモリ１０に書き込まれるデータとしては、メモリシステム１の外部から供給されるユーザデータの他に、メモリシステム１内部の管理に必要なシステムデータ等も存在する。
【００３３】
平準化部３５は、後述する平準化処理を実行する。そして、平準化部３５は、この平準化処理に伴い、ＮＡＮＤ型フラッシュメモリ１０に対して書込要求、読出要求、及び消去要求を発行する。なお、平準化とは、ブロックの消去回数を揃えること（いわゆる、ウェアレベリング：wear leveling）を意味する。このように、ブロックの消去回数を揃えることで、一部のブロックへ消去処理が集中するのを防ぐことができるため、ＮＡＮＤ型フラッシュメモリ１０の寿命を延ばすことが可能となる。
【００３４】
入替元ブロック選択部３３は、平準化部３５による平準化処理に使用される、データ入れ替え元のブロック（以下、入替元ブロックという）を選択する。すなわち、入替元ブロック選択部３３は、全ブロック情報をブロック制御部３０から受け、所定の条件に従って入替元ブロックを選択する。そして、入替元ブロック選択部３３は、全ブロック情報のうち入替元ブロックに対応する情報（入替元ブロック情報）を平準化部３５に送る。
【００３５】
ＮＡＮＤインターフェース回路２５は、ブロック制御部３０及び平準化部３５から、書込要求、読出要求、及び消去要求を受ける。そして、ＮＡＮＤインターフェース回路２５は、これらの要求に応じて、ＮＡＮＤ型フラッシュメモリ１０に対してデータの書き込み、読み出し、及び消去を行うように指示する。
【００３６】
短期書き換え検出部３４は、頻繁に（短期間で）書き換えが行われているブロック（すなわち、消去間隔が短いブロック）を検出する。短期間で書き換えが行われているブロックはその消去時期が頻繁に更新される（消去時期が新しくなる）が、短期間で書き換えが行われていないブロックはその消去時期が古いままである。本実施形態では、これらの消去時期の差を利用して、短期間で書き換えが行われているブロックを検出する。このために、短期書き換え検出部３４は、使用中状態のブロックを消去時期順に整列（ソート）し、ある探索対象ブロックと、この探索対象ブロックの次に消去時期が新しい比較対象ブロックとの消去時期の差を算出する。そして、この消去時期の差が所定の閾値を越えていた場合に、消去時期が比較対象ブロックより新しいブロックを、短期間で書き換えが行われているブロックであると判定する。この判定結果は、短期書き換え情報としてブロック制御部３０に送られる。
【００３７】
図５は、ブロック制御部３０及び消去時期計測部３１の構成を示すブロック図である。ブロック制御部３０は、アドレステーブル３０Ａ、ブロックテーブル３０Ｂ、及び演算部３０Ｃを備えている。ブロック制御部３０は、外部から供給されるアドレスや各種情報を受け、これらの情報に基づいてアドレステーブル３０Ａ及びブロックテーブル３０Ｂを更新する。
【００３８】
アドレステーブル３０Ａは、ホスト装置（ＣＰＵ２）からアドレスバス５を介して送られるアドレスを含むアドレス領域（論理ブロックアドレス）と、このアドレス領域に対応する、ＮＡＮＤ型フラッシュメモリ１０内のブロックの番号（物理ブロックアドレス）との対応関係を示す。このアドレステーブル３０Ａを用いることで、ブロック制御部３０は、ホスト装置から送られるアドレスを含むアドレス領域のデータがどのブロックに対応するかを特定することができる。このアドレステーブル３０Ａは、例えば、後述するブロック解放処理、ブロック割当処理に伴い更新される。
【００３９】
ブロックテーブル３０Ｂは、ブロック番号ごとに、アドレステーブル３０Ａにブロック番号が登録されていないか（空き状態であるか）、アドレステーブル３０Ａにブロック番号が登録されているか（使用中状態であるか）を示すブロックの状態と、データが消去された回数（消去回数）と、消去時期計測部３１から送られる消去時期と、短期書き換え検出部３４から送られる短期書き換え情報に対応した短期書き換えフラグ（図５には、単に「フラグ」と記載している）と、を情報として格納する。このブロックテーブル３０Ｂは、例えば、後述するブロック解放処理、ブロック割当処理、ブロック消去処理、及び短期書き換え検出処理に伴い更新される。ブロックテーブル３０Ｂに含まれる全ブロック情報は、割当ブロック選択部３２、入替元ブロック選択部３３、及び短期書き換え検出部３４に送られる。
【００４０】
ブロックが空き状態であれば、ＮＡＮＤ型フラッシュメモリ１０内部で当該ブロックに対して実際に消去が行われたか否かに係わらず、当該ブロックに対応するアドレス領域は、ホスト装置から見ると、データが格納されていない空き領域であると認識される。一方、ブロックが使用中状態であれば、当該ブロックに対応するアドレス領域は、ホスト装置から見ると、データが格納されている使用中領域であると認識される。
【００４１】
なお、実際には、これらアドレステーブル３０Ａ及びブロックテーブル３０Ｂは、ＲＡＭ２４、或いは、ＲＡＭ２４及びＮＡＮＤ型フラッシュメモリ１０の両方に格納されている。但し、ＮＡＮＤ型フラッシュメモリ１０に不揮発に格納されたアドレステーブル３０Ａ及びブロックテーブル３０Ｂは、必ずしもＲＡＭ２４を更新した都度更新を行う必要はない。
【００４２】
演算部３０Ｃは、ＮＡＮＤ型フラッシュメモリ１０のデータが消去されるごとに、ブロックテーブル３０Ｂに含まれる、消去が行われたブロックの消去回数を１カウントアップする。なお、実際には、演算部３０Ｃの処理は、ＭＰＵ２２により行われる。
【００４３】
ブロック制御部３０は、割当ブロック選択部３２から割当ブロック番号を受ける。そして、この割当ブロック番号を用いて、アドレステーブル３０Ａのブロック番号を更新する。また、ブロック制御部３０は、この割当ブロックに対する書込要求をＮＡＮＤ型フラッシュメモリ１０に対して発行する。さらに、ブロック制御部３０は、外部からのアドレスに応じた通常の読出要求、及び消去要求をＮＡＮＤ型フラッシュメモリ１０に対して発行する。
【００４４】
消去時期計測部３１は、消去回数をカウントする消去回数カウンタ３１Ａ、及び消去回数カウンタ３１Ａのカウント値を更新する演算部３１Ｂを備えている。消去時期計測部３１は、ＮＡＮＤ型フラッシュメモリ１０内のブロックに対して消去処理が行われた回数を計測し、この計測された回数を消去時期として出力する。
【００４５】
具体的には、演算部３１Ｂは、いずれかのブロックが消去されるごとに、消去回数カウンタ３１Ａを１カウントアップする。消去回数カウンタ３１Ａのカウント値（消去番号）は、消去時期としてブロック制御部３０（具体的には、ブロックテーブル３０Ｂ）に送られる。この例の消去時期計測部３１では、消去番号が小さいほど消去時期が古くなる。なお、実際には、演算部３１Ｂの処理は、ＭＰＵ２２により行われる。
【００４６】
消去時期としては、この他に、消去処理が行われた時刻（消去時刻）や、ＮＡＮＤコントローラ１１の通電時間等を用いるようにしてもよい。消去時刻を消去時期として用いる場合は、消去時期計測部３１が時計を備え、消去処理が行われるごとに、その時刻を消去時期として出力する。通電時間を消去時期として用いる場合は、消去時期計測部３１がタイマーを備え、消去処理が行われるごとに、それまでの通電時間を計測し、その通電時間を消去時期として出力する。このように、消去時期として、消去回数、消去時刻、及び通電時間のいずれを用いるかは、任意に選択することが可能である。なお、消去時期が特定可能な情報であれば、上記３種類以外を用いることも可能である。
【００４７】
［２．ＮＡＮＤコントローラ１１の書き込み動作］
次に、ＮＡＮＤコントローラ１１の書き込み動作について説明する。図６は、ＮＡＮＤコントローラ１１による一連の書き込み動作を示すフローチャートである。
【００４８】
まず、ＮＡＮＤコントローラ１１は、ＣＰＵ２から書込要求を受けることで、書き込み動作を開始する（ステップＳ１０）。続いて、ブロック制御部３０は、アドレステーブル３０Ａを用いて、書込要求のアドレスを含むアドレス領域に対して、ブロック番号が登録されている（ブロックが割り当てられている）か否かを判定する（ステップＳ１１）。ブロック番号が登録されている（ブロックが割り当てられている）場合、このアドレス領域に対してデータの上書きを行う必要があるため、ブロック制御部３０は、上記ブロック番号に対応するブロックを解放するブロック解放処理を実行する（ステップＳ１２）。
【００４９】
ステップＳ１１においてブロック番号が登録されていない（ブロックが割り当てられていない）と判定された場合、或いはステップＳ１２においてブロック解放処理が実行された後、割当ブロック選択部３２は、上記アドレス領域に割り当てるブロック（割当ブロック）を選択する割当ブロック選択処理を実行する（ステップＳ１３）。
【００５０】
続いて、平準化部３５及び入替元ブロック選択部３３は、平準化処理を実行する（ステップＳ１４）。続いて、ブロック制御部３０は、平準化処理において、割当ブロックの入れ替えを行ったか否かを判定する（ステップＳ１５）。割当ブロックの入れ替えを行った場合、ステップＳ１３に戻って、割当ブロック選択部３２は、再度、割当ブロック選択処理を実行する。
【００５１】
ステップＳ１５において割当ブロックの入れ替えを行っていないと判定された場合、ブロック制御部３０は、割当ブロックに対応するブロック番号（割当ブロック番号）を用いて、アドレステーブル３０Ａ及びブロックテーブル３０Ｂを更新するために、ブロック割当処理を実行する（ステップＳ１６）。続いて、ブロック制御部３０は、割当ブロックに対してブロック消去処理を実行する（ステップＳ１７）。
【００５２】
続いて、ブロック制御部３０は、データが消去された割当ブロックに、新たなデータを書き込む（ステップＳ１８）。すなわち、ブロック制御部３０は、ＮＡＮＤインターフェース回路２５に書込要求を発行する。この書込要求に基づいて、ＮＡＮＤインターフェース回路２５は、ＮＡＮＤ型フラッシュメモリ１０に、割当ブロックへ新たなデータを書き込むように指示する。
【００５３】
続いて、短期書き換え検出部３４は、短期書き換え検出処理を実行する（ステップＳ１９）。そして、ブロック制御部３０は、短期書き換え検出部３４から送られる短期書き換え情報を用いて、ブロックテーブル３０Ｂのフラグを更新する。このようにして、ＮＡＮＤコントローラ１１によって一連の書き込み動作が実行される。
【００５４】
以下に、書き込み動作に含まれる各処理について具体的に説明する。  
［２−１．ブロック解放処理］
図７は、ＮＡＮＤコントローラ１１によるブロック解放処理を示すフローチャートである。ブロック制御部３０は、アドレステーブル３０Ａに含まれる、書込要求のアドレスを含むアドレス領域に対応するブロック番号を、未割り当ての状態（未割当状態）に設定する（ステップＳ２０）。続いて、ブロック制御部３０は、ブロックテーブル３０Ｂに含まれる、上記ブロック番号の状態を、空き状態に設定する（ステップＳ２１）。ブロック解放処理において新たに空き状態に設定されたブロックを、以下、解放ブロックという。以後、ＮＡＮＤコントローラ１１は、解放ブロックに新たなデータを書き込むことが可能となる。
【００５５】
［２−２．割当ブロック選択処理］
図８は、割当ブロック選択部３２の構成を示すブロック図である。図９は、割当ブロック選択部３２による割当ブロック選択処理を示すフローチャートである。
【００５６】
割当ブロック選択部３２は、２個のセレクタ３２Ａ及び３２Ｂを備えている。割当ブロック選択部３２は、ブロック制御部３０から全ブロック情報を受ける（ステップＳ３０）。この全ブロック情報は、セレクタ３２Ａに送られる。続いて、セレクタ３２Ａは、全ブロックの状態を確認し、全ブロックのうち空き状態のブロックを抽出する（ステップＳ３１）。そして、セレクタ３２Ａは、空き状態のブロックに対応するブロック情報（空き状態ブロック情報）をセレクタ３２Ｂに送る。
【００５７】
続いて、セレクタ３２Ｂは、セレクタ３２Ａにより抽出されたブロックのうち、消去時期が最も古いブロックを割当ブロックとして選択する（ステップＳ３２）。この割当ブロックに対応する割当ブロック番号は、ブロック制御部３０に送られる。また、この割当ブロックに対応する割当ブロック情報は、平準化部３５に送られる。
【００５８】
［２−３．ブロック割当処理］
図１０は、ＮＡＮＤコントローラ１１によるブロック割当処理を示すフローチャートである。ＮＡＮＤコントローラ１１は、割当ブロック選択部３２により選択された割当ブロックに対して、アドレステーブル３０Ａ及びブロックテーブル３０Ｂの情報を更新する。
【００５９】
まず、ブロック制御部３０は、割当ブロック選択部３２から割当ブロック番号を受ける（ステップＳ４０）。続いて、ブロック制御部３０は、アドレステーブル３０Ａに含まれる書込要求のアドレスを含むアドレス領域に対して、割当ブロックのブロック番号を設定する（ステップＳ４１）。続いて、ブロック制御部３０は、ブロックテーブル３０Ｂに含まれる割当ブロックの状態を、使用中状態に設定する（ステップＳ４２）。このようにして、割当ブロック選択部３２により選択された割当ブロックが空き状態から使用中状態に設定変更される。
【００６０】
［２−４．ブロック消去処理］
図１１は、ＮＡＮＤコントローラ１１によるブロック消去処理を示すフローチャートである。ブロック制御部３０は、ＮＡＮＤインターフェース回路２５に、割当ブロックに対する消去要求を発行する（ステップＳ５０）。この消去要求に基づいて、ＮＡＮＤインターフェース回路２５は、ＮＡＮＤ型フラッシュメモリ１０に、割当ブロックのデータを消去するように指示する（ステップＳ５１）。続いて、消去時期計測部３１（具体的には、演算部３１Ｂ）は、消去回数カウンタ３１Ａのカウント値（消去番号）を１カウントアップする（ステップＳ５２）。
【００６１】
続いて、ブロック制御部３０は、ブロックテーブル３０Ｂに含まれる、データが消去された割当ブロックに対応する消去回数及び消去時期を更新する（ステップＳ５３）。具体的には、ブロック制御部３０は、消去時期計測部３１から送られる消去時期を用いて、ブロックテーブル３０Ｂに含まれる、割当ブロックのブロック番号に対応する消去時期を更新する。また、演算部３０Ｃは、ブロックテーブル３０Ｂに含まれる、割当ブロックのブロック番号に対応する消去回数を１カウントアップする。
【００６２】
［２−５．短期書き換え検出処理］
図１２は、短期書き換え検出部３４の構成を示すブロック図である。短期書き換え検出部３４は、セレクタ３４Ａ、整列部３４Ｂ、探索リスト３４Ｃ、判定部３４Ｄ、消去時期間隔閾値を格納する記憶部３４Ｅ、及び情報出力部３４Ｆを備えている。
【００６３】
セレクタ３４Ａは、ブロック制御部３０から送られる全ブロック情報を用いて、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する。整列部３４Ｂは、使用中状態のブロックを消去時期順に整列（ソート）する。探索リスト３４Ｃは、ソートされたブロック情報を一時的に格納する。なお、実際には、この探索リスト３４Ｃは、ＲＡＭ２４に格納されている。
【００６４】
判定部３４Ｄは、探索リスト３４Ｃの中で、消去時期が最も新しいブロックを「探索対象ブロック」、消去時期が探索対象ブロックの次に新しいブロックを「比較対象ブロック」として選択する。さらに、判定部３４Ｄは、探索対象ブロックと比較対象ブロックとの消去時期の差を算出し、この差が消去時期間隔閾値を超えているか否かを判定する。そして、この判定結果に基づいて、消去時期が急激に変化する境界を探索する。
【００６５】
情報出力部３４Ｆは、判定部３４Ｄから送られる判定結果（比較対象ブロックの番号）を用いて、全ブロックのうち比較対象ブロックより消去時期が新しいブロックの範囲を算出する。そして、情報出力部３４Ｆは、上記範囲を短期書き換え情報としてブロック制御部３０に送る。
【００６６】
記憶部３４Ｅに格納される消去時期間隔閾値は、頻繁に書き換えが行われているブロックの範囲を特定するために使用され、また、ＮＡＮＤ型フラッシュメモリ１０の寿命（或いは、データリテンション期間）をどの程度延ばすかという基準に基づいて設定される。消去時期間隔閾値を低くすると短期書き換え検出の可能性が上がり、一方、消去時期間隔閾値を高くすると短期書き換え検出の可能性が下がる。すなわち、消去時期間隔閾値を低くすると平準化処理の回数が増え、一方、消去時期間隔閾値を高くすると平準化処理の回数が減ることになる。この平準化処理は、ブロックのデータ消去処理を伴う。
【００６７】
データを消去するごとに、ＮＡＮＤ型フラッシュメモリ１０のリテンション特性は悪化する（すなわち、寿命が短くなる）。一方、消去間隔が長くなると、ＮＡＮＤ型フラッシュメモリ１０のリテンション特性が回復していく。すなわち、短い間隔で消去処理が連続して行われた場合には、リテンション特性の回復時間が確保できないため、ＮＡＮＤ型フラッシュメモリ１０の寿命が短くなってしまう。そこで、本実施形態では、頻繁に書き換えが行われているブロックに対して短期書き換えフラグを立てることで、これらのブロックを平準化の対象にしている。そして、消去間隔を所定時間長くすることでどの程度寿命が回復するかを示す、ＮＡＮＤ型フラッシュメモリ１０の特性を加味した上で、平準化処理の対象となるブロック、及び平準化の回数が最適化されるように、消去時期間隔閾値が決定される。
【００６８】
図１３は、短期書き換え検出部３４による短期書き換え検出処理を示すフローチャートである。まず、短期書き換え検出部３４は、ブロック制御部３０から全ブロック情報を受ける（ステップＳ６０）。この全ブロック情報は、セレクタ３４Ａに送られる。続いて、セレクタ３４Ａは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する（ステップＳ６１）。そして、セレクタ３４Ａは、使用中状態のブロックに対応するブロック情報（使用中状態ブロック情報）を整列部３４Ｂに送る。
【００６９】
続いて、整列部３４Ｂは、使用中状態ブロック情報に含まれる消去時期を確認し、使用中状態のブロックを消去時期順にソートする（ステップＳ６２）。そして、整列部３４Ｂによりソートされたブロック情報は、探索リスト３４Ｃに入れられる。
【００７０】
続いて、判定部３４Ｄは、探索リスト３４Ｃの中で、消去時期が最も新しいブロックを探索対象ブロック、消去時期が探索対象ブロックの次に新しいブロックを比較対象ブロックとして選択する（ステップＳ６３）。
【００７１】
続いて、判定部３４Ｄは、探索対象ブロックと比較対象ブロックとの消去時期の差を算出する（ステップＳ６４）。続いて、判定部３４Ｄは、上記算出した消去時期の差が、消去時期間隔閾値を超えているか否かを判定する（ステップＳ６５）。消去時期間隔閾値を超えていない場合、判定部３４Ｄは、探索リスト３４Ｃの中に２個以上のブロックが残っているか否かを判定する（ステップＳ６６）。２個以上のブロックが残っている場合、判定部３４Ｄは、探索対象ブロックを探索リスト３４Ｃから除外し、ステップＳ６３に戻って探索対象ブロック及び比較対象ブロックの選択をやり直す。
【００７２】
ステップＳ６５において消去時期間隔閾値を超えている場合、判定部３４Ｄは、比較対象ブロック番号を情報出力部３４Ｆに送る。情報出力部３４Ｆは、この比較対象ブロック番号を用いて、全ブロックのうち比較対象ブロックより消去時期が新しいブロックの範囲を算出する（ステップＳ６８）。そして、情報出力部３４Ｆは、上記範囲を短期書き換え情報としてブロック制御部３０に送る。短期書き換え情報を受けて、ブロック制御部３０では、短期書き換え情報に含まれるブロックに対応する短期書き換えフラグを立て、その他のブロックに対応する短期書き換えフラグはクリアする。
【００７３】
ステップＳ６６において２個以上のブロックが残っていない場合、短期書き換えが行われたブロックを検出できないと判断し、短期書き換え検出処理を終了する。
【００７４】
図１４は、短期書き換え検出部３４による短期書き換え検出処理の具体例を説明する図である。ＮＡＮＤ型フラッシュメモリ１０に含まれるブロックが１２個（ブロック♯０〜１１）であり、このうち、ブロック＃０〜７が探索リスト３４Ｃに含まれる使用中状態のブロックであり、ブロック＃８〜１１が空き状態であるものとする。ブロック＃０〜７は、消去時期が新しい順にソートされている。ブロックごとの消去時期は、図に示した通りである。
【００７５】
まず、探索リスト３４Ｃの中で、消去時期が最も新しいブロック＃０が探索対象ブロック、消去時期が次に新しいブロック＃１が比較対象ブロックとして選択される。ブロック＃０とブロック＃１との消去時期の差は、“１０”である。この差“１０”は、消去時期間隔閾値（例えば、“１００”）を超えていない。よって、探索対象ブロック＃０は、探索リスト３４Ｃから除外される。
【００７６】
続いて、探索リスト３４Ｃの中で、消去時期が最も新しいブロック＃１が探索対象ブロック、消去時期が次に新しいブロック＃２が比較対象ブロックとして選択される。ブロック＃１とブロック＃２との消去時期の差は、“１１０”である。この差“１１０”は、消去時期間隔閾値を超えている。よって、比較対象ブロック＃２の番号が、判定部３４Ｄから情報出力部３４Ｆに送られる。
【００７７】
情報出力部３４Ｆでは、空き状態ブロックを含む全ブロックのうち、消去時期が比較対象ブロック＃２より新しいブロック＃０、１、８〜１１を算出する。そして、情報出力部３４Ｆは、ブロック＃０、１、８〜１１を短期書き換え情報として、ブロック制御部３０に送る。これに対し、ブロック制御部３０では、ブロック＃０、１、８〜１１に対応する短期書き換えフラグを立て、その他のブロックに対応する短期書き換えフラグはクリアする。このようにして、ブロックテーブル３０Ｂの情報が更新される。
【００７８】
［２−６．平準化処理］
ＮＡＮＤ型フラッシュメモリ１０の寿命を延長するには、各ブロックの消去回数を揃えることと、特定の領域に対して短期間に頻繁に書き換えを行うことを避けることとの両立が必要である。消去回数を揃えることにだけ着目してＮＡＮＤ型フラッシュメモリ１０の寿命を延長しようとすると、書き込み状況によっては特定の領域が短期間に書き換えが進行してしまうことがある。短期間にこの修正（平準化）を頻繁に行うと、消去回数は揃い、短期間の特定の領域への書き込み集中を避けることができるが、修正に起因する消去処理が多くなり、結果として寿命を延長することができない。一方で、修正の間隔を延ばし過ぎると、特定の領域に間隔の短い消去処理が集中することになり、寿命が短くなってしまう。このような知見に基づいて、本実施形態の平準化処理では、平準化の回数を最適化し、かつブロックごとの消去回数を揃えるようにしている。
【００７９】
平準化処理は、平準化部３５、及び入替元ブロック選択部３３により実行される。図１５は、平準化部３５の構成を示すブロック図である。平準化部３５は、平準化判定部３５Ａ、及び平準化閾値を格納する記憶部３５Ｂを備えている。
【００８０】
平準化判定部３５Ａは、平準化閾値、割当ブロック選択部３２から送られる割当ブロック情報、及び入替元ブロック選択部３３から送られる入替元ブロック情報を用いて、今回の書き込み動作時に平準化処理を行うか否かを判定する。そして、平準化処理を行う場合、平準化判定部３５Ａは、ＮＡＮＤインターフェース回路２５に、平準化処理に伴う読出要求、消去要求、及び書込要求を発行する。
【００８１】
図１６は、ＮＡＮＤコントローラ１１による平準化処理を示すフローチャートである。まず、入替元ブロック選択部３３によって、入替元ブロック選択処理が実行される（ステップＳ７０）。そして、この選択処理の結果として、入替元ブロック情報が、入替元ブロック選択部３３から平準化部３５へ送られる。
【００８２】
続いて、平準化判定部３５Ａは、割当ブロック選択部３２から送られる割当ブロック情報を確認し、この割当ブロック情報に含まれる短期書き換えフラグが立っているか否かを判定する（ステップＳ７１）。短期書き換えフラグが立っていない場合、すなわち、割当ブロックの書き換えが頻繁に行われていない場合、平準化判定部３５Ａは、入替元ブロックと割当ブロックとの消去回数の差が平準化閾値を越えているか否かを判定する（ステップＳ７２）。平準化閾値を越えていない場合、平準化部３５は、今回の書き込み動作において平準化を行わない。
【００８３】
この平準化閾値は、平準化処理を実行するか否かを判定するために使用され、また、ＮＡＮＤ型フラッシュメモリ１０の寿命（或いは、データリテンション期間）をどの程度延ばすかという基準に基づいて設定される。前述したように、消去回数を揃えることにだけ着目してＮＡＮＤ型フラッシュメモリ１０の寿命を延長しようとすると、平準化に伴う消去処理が多発してしまい、結果として特定領域への消去回数が増えてしまう。従って、本実施形態では、入替元ブロックと割当ブロックとの消去回数の差が平準化閾値を越えている場合にのみ平準化処理を実行するようにしている。
【００８４】
ステップＳ７１において短期書き換えフラグが立っている場合、或いは、ステップＳ７２において平準化閾値を越えている場合、ブロック制御部３０は、入替元ブロックのブロック解放処理を実行する（ステップＳ７３）。このブロック解放処理は、図７と同じである。
【００８５】
続いて、ブロック制御部３０は、割当ブロック選択部３２により選択された割当ブロックを、入替元ブロックのデータを移動するブロックとして割り当てるブロック割当処理を実行する（ステップＳ７４）。このブロック割当処理は、図１０と同じである。
【００８６】
続いて、ＮＡＮＤコントローラ１１は、ＮＡＮＤ型フラッシュメモリ１０に含まれる入替元ブロックのデータを読み出す（ステップＳ７５）。具体的には、平準化判定部３５Ａは、入替元ブロック選択部３３から送られる入替元ブロック情報を用いて、ＮＡＮＤインターフェース回路２５に読出要求を発行する。この読出要求に基づいて、ＮＡＮＤインターフェース回路２５は、ＮＡＮＤ型フラッシュメモリ１０に、入替元ブロックからデータを読み出すように指示する。読み出されたデータは、ＲＡＭ２４等に一時的に格納される。
【００８７】
続いて、ＮＡＮＤコントローラ１１は、割当ブロックのデータを消去する（ステップＳ７６）。具体的には、平準化判定部３５Ａは、割当ブロック選択部３２から送られる割当ブロック情報を用いて、ＮＡＮＤインターフェース回路２５に消去要求を発行する。この消去要求に基づいて、ＮＡＮＤインターフェース回路２５は、ＮＡＮＤ型フラッシュメモリ１０に、割当ブロックのデータを消去するように指示する。この際、ブロック制御部３０によって割当ブロックの消去回数及び消去時期が更新される（図１１参照）。
【００８８】
続いて、ＮＡＮＤコントローラ１１は、ＮＡＮＤ型フラッシュメモリ１０に含まれる割当ブロックに、入替元ブロックから読み出されたデータを書き込む（ステップＳ７７）。具体的には、平準化判定部３５Ａは、割当ブロック情報を用いて、ＮＡＮＤインターフェース回路２５に書込要求を発行する。この書込要求に基づいて、ＮＡＮＤインターフェース回路２５は、ＮＡＮＤ型フラッシュメモリ１０に、割当ブロックへデータを書き込むように指示する。
【００８９】
以上により、入替元ブロックのデータを割当ブロックに移し変え、入替元ブロックを空き状態にすることができるため、あまり書き換えが行われていないと考えられる入替元ブロックを、再度割当ブロックとして使用することが可能となる。また、あまり書き換えが行われないデータを、すでに消去回数が多くなっている割当ブロックに移すことで、今後、割当ブロックの消去回数が増えるのを防ぐことが可能となる。
【００９０】
［２−６−１．入替元ブロック選択処理］
図１７は、入替元ブロック選択部３３の構成を示すブロック図である。図１８は、入替元ブロック選択部３３による入替元ブロック選択処理を示すフローチャートである。
【００９１】
入替元ブロック選択部３３は、２個のセレクタ３３Ａ及び３３Ｂを備えている。入替元ブロック選択部３３は、ブロック制御部３０から全ブロック情報を受ける（ステップＳ８０）。この全ブロック情報は、セレクタ３３Ａに送られる。続いて、セレクタ３３Ａは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する（ステップＳ８１）。そして、セレクタ３３Ａは、使用中状態のブロックに対応するブロック情報（使用中状態ブロック情報）をセレクタ３３Ｂに送る。
【００９２】
続いて、セレクタ３３Ｂは、セレクタ３３Ａにより抽出されたブロックのうち、消去時期が最も古いブロックを入替元ブロックとして選択する（ステップＳ８２）。この入替元ブロックに対応する入替元ブロック情報は、平準化部３５に送られる。このような入替元ブロック選択処理により、頻繁に書き換えられていないデータを格納した、リテンション特性の良いブロックを入替元ブロックとして選択することができる。
【００９３】
以上詳述したように本実施形態では、各ブロックが消去された消去時期を計測し、各ブロックと消去時期とを対応付けてブロックテーブル３０Ｂに格納する。そして、外部から供給されたデータをＮＡＮＤ型フラッシュメモリ１０に書き込む場合に、空き状態のブロックのうち消去時期が最も古いブロックを割当ブロックとして選択し、この割当ブロックに上記データを書き込むようにしている。
【００９４】
従って本実施形態によれば、各ブロックに対して消去間隔を長くすることができる。このため、消去間隔を長くすることでリテンション特性が回復するというメモリセルトランジスタの特性を利用して、各ブロックのリテンション特性の悪化を低減することができる。これにより、ＮＡＮＤ型フラッシュメモリ１０の寿命を長くすることが可能となる。
【００９５】
また、本実施形態では、短期書き換え検出部３４によって頻繁に書き換えが行われているブロックを特定し、このブロックが割当ブロックとして選択された場合に、消去時期が古い入替元ブロックと割当ブロックとを入れ替えるようにしている。そして、入替元ブロックに格納されていた頻繁に書き換えられていないデータを割当ブロックに移すようにしている。これにより、一度書き込みで割り当てられたまま長い期間解放されない入替元ブロックも平準化処理により解放されるようになるため、あまり書き換えが行われていないと考えられる入替元ブロックを、再度割当ブロックとして使用することが可能となる。また、割当ブロックに対しては、頻繁に書き換えられていないデータを格納することになるため、以後のデータ消去回数を減らすことが可能となり、ひいては、割当ブロックのリテンション特性の悪化を低減することが可能となる。
【００９６】
また、入替元ブロックと割当ブロックとの消去回数の差が閾値を超えている場合に、平準化処理を行うようにしている。これにより、平準化を頻繁に行わずに、平準化の回数を最適化でき、かつブロックごとの消去回数を揃えることが可能となる。この結果、一部のブロックの消去回数が増えることでＮＡＮＤ型フラッシュメモリ１０全体の寿命が短くなるのを防ぐことができる。
【００９７】
［第２の実施形態］
第２の実施形態は、割当ブロック選択部３２による割当ブロック選択処理の他の例について示しており、割当ブロックを選択する際に、消去時期が古く、かつ消去回数が少ないブロックを割当ブロックとして選択するようにしている。
【００９８】
図１９は、第２の実施形態に係る割当ブロック選択部３２の構成を示すブロック図である。図２０は、割当ブロック選択部３２による割当ブロック選択処理を示すフローチャートである。なお、ＮＡＮＤコントローラ１１のうち割当ブロック選択部３２以外の構成は、第１の実施形態と同じである。
【００９９】
割当ブロック選択部３２は、３個のセレクタ３２Ａ〜３２Ｃ、及び割当ブロック設定値を格納する記憶部３２Ｄを備えている。割当ブロック選択部３２は、ブロック制御部３０から全ブロック情報を受ける（ステップＳ９０）。この全ブロック情報は、セレクタ３２Ａに送られる。続いて、セレクタ３２Ａは、全ブロックの状態を確認し、全ブロックのうち空き状態のブロックを抽出する（ステップＳ９１）。そして、セレクタ３２Ａは、空き状態のブロックに対応するブロック情報（空き状態ブロック情報）をセレクタ３２Ｂに送る。
【０１００】
続いて、セレクタ３２Ｂは、空き状態ブロック情報のうち割当ブロック設定値により設定された条件のブロック情報を抽出する（ステップＳ９２）。ここで、割当ブロック設定値には、
（Ａ）消去時期の最も古い方から一定数のブロック
（Ｂ）消去時期の最も古い方から一定割合数のブロック
（Ｃ）消去時期が一定時期より古いブロック
のいずれかが設定されている。条件（Ａ）〜（Ｃ）のいずれを割当ブロック設定値として使用するのかは、任意に選択することができる。例えば、割当ブロック設定値として条件（Ａ）を用いる場合、セレクタ３２Ｂは、空き状態のブロックのうち、消去時期の最も古い方から一定数のブロックを抽出する。そして、セレクタ３２Ｂは、抽出したブロックに対応するブロック情報をセレクタ３２Ｃに送る。
【０１０１】
条件（Ａ）及び（Ｂ）は、空き状態のブロックを消去時期順にソートし、古い方から一定数／一定割合のブロックを探索する。従って、ステップＳ９２において選択されるブロック数を多くすることができるため、ステップＳ９３においてより消去回数が少ないブロックを選択する確率を高くすることが可能となる。条件（Ｃ）は、消去時期が一定時期を超えた空き状態のブロックのみをソートすればよいので、処理負荷が最も少ない。また、条件（Ａ）及び（Ｂ）は、消去時期の古いほうから常に一定数／一定割合のブロックを抽出するのに対し、条件（Ｃ）では、消去時期が一定期間以上空いたブロックが抽出される。このため、条件（Ｃ）は、消去間隔を必ず一定間隔空けることができ、その分、消去回数の比較候補を少なくすることが可能となる。
【０１０２】
続いて、セレクタ３２Ｃは、セレクタ３２Ｂにより抽出されたブロックのうち消去回数が最も少ないブロックを割当ブロックとして選択する（ステップＳ９３）。この割当ブロックに対応する割当ブロック番号は、ブロック制御部３０に送られる。また、この割当ブロックに対応する割当ブロック情報は、平準化部３５に送られる。
【０１０３】
以上詳述したように本実施形態によれば、外部から供給されたデータを書き込む割当ブロックを選択する際に、空き状態のブロックのうちで、消去時期が古く、かつ消去回数が少ないブロックを割当ブロックとして選択することが可能となる。これにより、リテンション特性がより良いブロックに外部からのデータを書き込むことができるため、ＮＡＮＤ型フラッシュメモリ１０の寿命を長くすることが可能となる。
【０１０４】
［第３の実施形態］
第３の実施形態は、入替元ブロック選択部３３による入替元ブロック選択処理の他の例について示しており、入替元ブロックを選択する際に、消去時期が古く、かつ消去回数が少ないブロックを入替元ブロックとして選択するようにしている。
【０１０５】
図２１は、第３の実施形態に係る入替元ブロック選択部３３の構成を示すブロック図である。図２２は、入替元ブロック選択部３３による入替元ブロック選択処理を示すフローチャートである。
【０１０６】
入替元ブロック選択部３３は、３個のセレクタ３３Ａ〜３３Ｃ、及び入替元ブロック設定値を格納する記憶部３３Ｄを備えている。入替元ブロック選択部３３は、ブロック制御部３０から全ブロック情報を受ける（ステップＳ１００）。この全ブロック情報は、セレクタ３３Ａに送られる。続いて、セレクタ３３Ａは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する（ステップＳ１０１）。そして、セレクタ３３Ａは、使用中状態のブロックに対応するブロック情報（使用中状態ブロック情報）をセレクタ３３Ｂに送る。
【０１０７】
続いて、セレクタ３３Ｂは、使用中状態ブロック情報のうち入替元ブロック設定値により設定された条件のブロック情報を抽出する（ステップＳ１０２）。ここで、入替元ブロック設定値には、
（Ａ）消去時期の最も古い方から一定数のブロック
（Ｂ）消去時期の最も古い方から一定割合数のブロック
（Ｃ）消去時期が一定時期より古いブロック
のいずれかが設定されている。条件（Ａ）〜（Ｃ）のいずれを入替元ブロック設定値として使用するのかは、任意に選択することができる。例えば、入替元ブロック設定値として条件（Ａ）を用いる場合、セレクタ３３Ｂは、使用中状態のブロックのうち、消去時期の最も古い方から一定数のブロックを抽出する。そして、セレクタ３３Ｂは、抽出したブロックに対応するブロック情報をセレクタ３３Ｃに送る。
【０１０８】
条件（Ａ）及び（Ｂ）は、空き状態のブロックを消去時期順にソートし、古い方から一定数／一定割合のブロックを探索する。従って、ステップＳ１０２において選択されるブロック数を多くすることができるため、ステップＳ１０３においてより消去回数が少ないブロックを選択する確率を高くすることが可能となる。条件（Ｃ）は、消去時期が一定時期を超えた空き状態のブロックのみをソートすればよいので、処理負荷が最も少ない。また、条件（Ａ）及び（Ｂ）は、消去時期の古いほうから常に一定数／一定割合のブロックを抽出するのに対し、条件（Ｃ）では、消去時期が一定期間以上空いたブロックが抽出される。このため、条件（Ｃ）は、消去間隔を必ず一定間隔空けることができ、その分、消去回数の比較候補を少なくすることが可能となる。
【０１０９】
続いて、セレクタ３３Ｃは、セレクタ３３Ｂにより抽出されたブロックのうち消去回数が最も少ないブロックを入替元ブロックとして選択する（ステップＳ１０３）。この入替元ブロックに対応する入替元ブロック情報は、平準化部３５に送られる。
【０１１０】
以上詳述したように本実施形態によれば、平準化時に使用される入替元ブロックを選択する際に、使用中状態のブロックのうちで、消去時期が古く、かつ消去回数が少ないブロックを入替元ブロックとして選択することが可能となる。これにより、頻繁に書き換えられていないデータを格納した、リテンション特性の良いブロックを入替元ブロックとして選択することができるため、結果として、ＮＡＮＤ型フラッシュメモリ１０の寿命を長くすることが可能となる。
【０１１１】
［第４の実施形態］
第４の実施形態は、短期書き換え検出処理の他の実施例について示しており、短期書き換え検出処理を二分探索法を用いて行うようにしている。
【０１１２】
図２３は、第４の実施形態に係る短期書き換え検出部３４の構成を示すブロック図である。短期書き換え検出部３４は、セレクタ３４Ａ、整列部３４Ｂ、探索リスト３４Ｃ、判定部３４Ｄ、集中係数閾値を格納する記憶部３４Ｅ、及び情報出力部３４Ｆを備えている。
【０１１３】
判定部３４Ｄは、探索リスト３４Ｃの中で、二分探索法を用いて探索対象ブロックを選択する。そして、この探索対象ブロックに対して、短期書き換え検出に使用される集中係数を算出し、この集中係数が集中係数閾値を超えているか否かを判定する。この判定結果に基づいて探索リスト３４Ｃからブロックを除外していき、探索リスト３４Ｃの中のブロックを１個の探索対象ブロックに絞り込む。そして、最後に残った探索対象ブロックを用いて、消去時期が急激に変化する境界を探索する。
【０１１４】
記憶部３４Ｅに格納される集中係数閾値は、頻繁に書き換えが行われているブロックの範囲を特定するために使用され、また、ＮＡＮＤ型フラッシュメモリ１０の寿命（或いは、データリテンション期間）をどの程度延ばすかという基準に基づいて設定される。集中係数閾値を低くすると短期書き換え検出の可能性が上がり、一方、集中係数閾値を高くすると短期書き換え検出の可能性が下がる。
【０１１５】
図２４及び図２５は、短期書き換え検出部３４による短期書き換え検出処理を示すフローチャートである。
【０１１６】
まず、短期書き換え検出部３４は、ブロック制御部３０から全ブロック情報を受ける（ステップＳ１１０）。この全ブロック情報は、セレクタ３４Ａに送られる。続いて、セレクタ３４Ａは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する（ステップＳ１１１）。そして、セレクタ３４Ａは、使用中状態のブロックに対応するブロック情報（使用中状態ブロック情報）を整列部３４Ｂに送る。
【０１１７】
続いて、整列部３４Ｂは、使用中状態ブロック情報に含まれる消去時期を確認し、使用中状態のブロックを消去時期順にソートする（ステップＳ１１２）。そして、整列部３４Ｂによりソートされたブロック情報は、探索リスト３４Ｃに入れられると共に、消去時期が新しいブロックから順にリスト番号が付与される。
【０１１８】
続いて、判定部３４Ｄは、探索リスト３４Ｃの中で、消去時期が最も新しいブロックを“start”、消去時期が最も古いブロックを“end”に設定する（ステップＳ１１３）。続いて、判定部３４Ｄは、リスト番号が“（start＋end）／２”であるブロックを探索対象ブロックとして選択する（ステップＳ１１４）。
【０１１９】
続いて、判定部３４Ｄは、探索対象ブロックに対して集中係数を算出する（ステップＳ１１５）。この集中係数は、次式で与えられる。  
集中係数＝現在時刻−リスト番号−消去時期
なお、集中係数の算出に使用される現在時刻は、例えば、消去時期計測部３１から短期書き換え検出部３４に供給される。現在時刻としては、例えば、消去回数カウンタ３１Ａのカウント値を用いればよい。
【０１２０】
続いて、判定部３４Ｄは、上記算出した集中係数が、集中係数閾値を超えているか否かを判定する（ステップＳ１１６）。集中係数閾値を超えている場合、判定部３４Ｄは、検索対象ブロックを“end”に設定する（ステップＳ１１７）。続いて、判定部３４Ｄは、“end”より消去時期が古いブロックを探索リスト３４Ｃから除外する（ステップＳ１１７）。
【０１２１】
一方、ステップＳ１１６において集中係数閾値を超えていないと判定された場合、判定部３４Ｄは、検索対象ブロックの次に消去時期が古いブロックを“start”に設定する（ステップＳ１１９）。続いて、判定部３４Ｄは、“start”より消去時期が新しいブロックを探索リスト３４Ｃから除外する（ステップＳ１２０）。
【０１２２】
ステップＳ１１８或いはステップＳ１２０において探索リスト３４Ｃから所定のブロックが除外された後、判定部３４Ｄは、探索リスト３４Ｃに２個以上のブロックが残っているか否かを判定する（ステップＳ１２１）。探索リスト３４Ｃに２個以上のブロックが残っている場合、ステップＳ１１４に戻って、再度、探索対象ブロックの選択を行う。
【０１２３】
ステップＳ１２１において探索リスト３４Ｃに２個以上のブロックが残っていないと判定された場合、判定部３４Ｄは、探索リスト３４Ｃに最後に残っているブロックを探索対象ブロックとして選択する。そして、この探索対象ブロックに対して集中係数（＝現在時刻−リスト番号−消去時期）を算出する（ステップＳ１２２）。
【０１２４】
続いて、判定部３４Ｄは、上記算出した集中係数が、集中係数閾値を超えているか否かを判定する（ステップＳ１２３）。集中係数閾値を超えている場合、判定部３４Ｄは、探索対象ブロック番号を情報出力部３４Ｆに送る。情報出力部３４Ｆは、この探索対象ブロック番号を用いて、全ブロックのうち探索対象ブロックより消去時期が新しいブロックの範囲を算出する（ステップＳ１２４）。そして、情報出力部３４Ｆは、上記範囲を短期書き換え情報としてブロック制御部３０に送る。短期書き換え情報を受けて、ブロック制御部３０では、短期書き換え情報に含まれるブロックに対応する短期書き換えフラグを立て、その他のブロックに対応する短期書き換えフラグはクリアする。
【０１２５】
ステップＳ１２３において集中係数閾値を超えていないと判定された場合、短期書き換えが行われたブロックを検出できないと判断し、短期書き換え検出処理を終了する。
【０１２６】
図２６は、短期書き換え検出部３４による短期書き換え検出処理の具体例を説明する図である。ＮＡＮＤ型フラッシュメモリ１０に含まれるブロックが１２個（ブロック♯０〜１１）であり、このうち、ブロック＃０〜７が探索リスト３４Ｃに含まれる使用中状態のブロックであり、ブロック＃８〜１１が空き状態であるものとする。ブロック＃０〜７は、消去時期が新しい順にソートされている。ブロックごとの消去時期は、図に示した通りである。探索リスト３４Ｃに含まれるブロック＃０〜７は、消去時期の新しい方からリスト番号が付与されている。
【０１２７】
まず、探索リスト３４Ｃの中で、消去時期が最も新しいブロック＃０を“start”、消去時期が最も古いブロック＃７を“end”に設定する。続いて、リスト番号が“（start＋end）／２”であるブロック＃３が探索対象ブロックとして選択され、探索対象ブロック＃３に対して集中係数（＝現在時刻−リスト番号−消去時期）を計算し、この集中係数が集中係数閾値を越えているか否かを判定する。ここで、現在時刻が“１０６”、集中係数閾値が“９０”であるものとする。探索対象ブロック＃３の集中係数は“９７”であり、これは閾値を超えている。よって、探索対象ブロック＃３が“end”に設定され、ブロック＃３より消去時期が古いブロック＃４〜７は、探索リスト３４Ｃから除外される。
【０１２８】
続いて、リスト番号が“（start＋end）／２”であるブロック＃１が探索対象ブロックとして選択され、探索対象ブロック＃１に対して集中係数を計算する。探索対象ブロック＃１の集中係数は“０”であり、これは閾値を超えていない。よって、探索対象ブロック＃１の次に消去時期が古いブロック＃２が“start”に設定され、ブロック＃２より消去時期が新しいブロック＃０、１は、探索リスト３４Ｃから除外される。
【０１２９】
続いて、リスト番号が“（start＋end）／２”であるブロック＃２が探索対象ブロックとして選択され、探索対象ブロック＃２に対して集中係数を計算する。探索対象ブロック＃２の集中係数は“９７”であり、これは閾値を超えている。よって、探索対象ブロック＃２が“end”に設定され、ブロック＃２より消去時期が古いブロック＃３は、探索リスト３４Ｃから除外される。
【０１３０】
続いて、最後に探索リスト３４Ｃに残ったブロック＃２が探索対象ブロックとして選択され、探索対象ブロック＃２に対して集中係数を計算する。探索対象ブロック＃２の集中係数は閾値を超えている。よって、探索対象ブロック＃２の番号が、判定部３４Ｄから情報出力部３４Ｆに送られる。
【０１３１】
情報出力部３４Ｆでは、空き状態ブロックを含む全ブロックのうち、消去時期が探索対象ブロック＃２より新しいブロック＃０、１、８〜１１を算出する。そして、情報出力部３４Ｆは、ブロック＃０、１、８〜１１を短期書き換え情報として、ブロック制御部３０に送る。これに対し、ブロック制御部３０では、ブロック＃０、１、８〜１１に対応する短期書き換えフラグを立て、その他のブロックに対応する短期書き換えフラグはクリアする。このようにして、ブロックテーブル３０Ｂの情報が更新される。
【０１３２】
以上詳述したように本実施形態によれば、短期書き換え検出部３４によって頻繁に書き換えが行われているブロックを特定することができる。さらに、短期書き換え検出処理において、“log２Ｎ”回の閾値チェックで探索が終わるため、短期書き換え検出の効率を向上させることができる。
【０１３３】
［第５の実施形態］
第５の実施形態では、エラー訂正回路（ＥＣＣ（Error Check and Correct）回路）をＮＡＮＤコントローラ１１が備え、データの読み出し時に、ＥＣＣ回路によってエラーの検出及び訂正を行う。一般的に、誤り数は、データの書き込みから時間が経過するにつれて増加する傾向がある。よって、誤り数が多いブロックは、消去時期が古いブロックであるとも言える。そこで、本実施形態では、ＥＣＣ回路による誤り数を入替元ブロック選択の指標にするようにしている。
【０１３４】
図２７は、第５の実施形態に係るＮＡＮＤコントローラ１１の構成の一例を示すブロック図である。ＮＡＮＤコントローラ１１は、ＥＣＣ回路３６を備えている。ＥＣＣ回路３６は、ＮＡＮＤ型フラッシュメモリ１０からデータを読み出す際に、エラーの検出及び訂正を行う。さらに、ＥＣＣ回路３６は、ブロックごとに、エラーの検出時に検出した誤り数をブロック制御部３０に送る。
【０１３５】
図２８は、ブロック制御部３０の構成を示すブロック図である。ブロック制御部３０に含まれるブロックテーブル３０Ｂは、ブロック番号ごとに、誤り数を格納する。ブロックテーブル３０Ｂに含まれる誤り数は、ＮＡＮＤ型フラッシュメモリ１０からのデータ読み出しごとに（ＥＣＣ回路３６によるエラー訂正ごとに）、更新される。
【０１３６】
次に、ＮＡＮＤコントローラ１１の読み出し動作について説明する。図２９は、ＮＡＮＤコントローラ１１による読み出し動作を示すフローチャートである。
【０１３７】
まず、ＮＡＮＤコントローラ１１は、ＣＰＵ２から読出要求を受けることで、読み出し動作を開始する（ステップＳ１３０）。続いて、ブロック制御部３０は、アドレステーブル３０Ａを用いて、読出要求のアドレスを含むアドレス領域に対応するブロック番号を検索する（ステップＳ１３１）。
【０１３８】
続いて、ブロック制御部３０は、読出要求のブロックからデータを読み出す（ステップＳ１３２）。すなわち、ブロック制御部３０は、ＮＡＮＤインターフェース回路２５に読出要求を発行する。この読出要求に基づいて、ＮＡＮＤインターフェース回路２５は、ＮＡＮＤ型フラッシュメモリ１０に、読出要求のブロックからデータを読み出すように指示する。
【０１３９】
続いて、ＥＣＣ回路３６は、ＮＡＮＤ型フラッシュメモリ１０から読み出されたデータに対して、エラーの検出及び訂正を行う（ステップＳ１３３）。エラー訂正された読み出しデータは、データバス６を介してＣＰＵ２等に送られる。このエラー訂正の際、ＥＣＣ回路３６は、誤り数を算出し、この誤り数をブロック制御部３０に送る。ＥＣＣ回路３６から誤り数を受けて、ブロック制御部３０は、この誤り数をブロックテーブル３０Ｂに記録する。このようにして、ブロックテーブル３０Ｂに含まれる誤り数が更新される。
【０１４０】
次に、入替元ブロック選択部３３による入替元ブロック選択処理について説明する。図３０は、入替元ブロック選択部３３による入替元ブロック選択処理を示すフローチャートである。なお、入替元ブロック選択部３３の構成は、図２１と同じである。
【０１４１】
入替元ブロック選択部３３は、ブロック制御部３０から全ブロック情報を受ける（ステップＳ１４０）。この全ブロック情報は、セレクタ３３Ａに送られる。続いて、セレクタ３３Ａは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する（ステップＳ１４１）。そして、セレクタ３３Ａは、使用中状態のブロックに対応するブロック情報（使用中状態ブロック情報）をセレクタ３３Ｂに送る。
【０１４２】
続いて、セレクタ３３Ｂは、使用中状態ブロック情報のうち入替元ブロック設定値により設定された条件のブロック情報を抽出する（ステップＳ１４２）。ここで、入替元ブロック設定値には、「誤り数が一定数より多いブロック」が設定されている。
【０１４３】
続いて、セレクタ３３Ｃは、セレクタ３３Ｂにより抽出されたブロックのうち消去回数が最も少ないブロックを入替元ブロックとして選択する（ステップＳ１４３）。この入替元ブロックに対応する入替元ブロック情報は、平準化部３５に送られる。
【０１４４】
以上詳述したように本実施形態によれば、メモリシステム１の書き込み処理において、短期的に書き換えが集中したブロックを、一度書き込みで割り当られたまま長い期間解放されないブロックと入れ替えることができる。これにより、消去時期の間隔が短いことによるブロックの消耗を抑え、ブロックの消耗をＮＡＮＤ型フラッシュメモリ１０全体で平均化することができる。
【０１４５】
さらに、入替元ブロックとして、ＥＣＣによる誤り数が多いブロックが選択される。これにより、誤り数が多いブロックのデータが書き直されるため、平準化処理と同時にリフレッシュ処理（ＮＡＮＤ型フラッシュメモリ１０に記憶してあるデータを読み出してエラー訂正を行った後に、再びＮＡＮＤ型フラッシュメモリ１０に書き戻す）を行うことにもなる。この結果、リフレッシュ処理の回数を低減することができるため、リフレッシュに伴うデータ書き込み量を削減する効果も得られる。
【０１４６】
［実施例］
上記各実施形態のメモリシステム１をＳＳＤ（Solid State Drive）として構成した場合の実施例について説明する。図３１は、ＳＳＤ１００の構成を示すブロック図である。
【０１４７】
ＳＳＤ１００は、データ保存用の複数のＮＡＮＤ型フラッシュメモリ（ＮＡＮＤメモリ）１０、データ転送用又は作業領域用のＤＲＡＭ１０１、これらを制御するドライブ制御回路１０２、及び電源回路１０３を備えている。ドライブ制御回路１０２は、ＳＳＤ１００の外部に設けられる状態表示用ＬＥＤを制御するための制御信号を出力する。なお、ＤＲＡＭ１０１に代えて、ＦｅＲＡＭ（ferroelectric random access memory）を用いてもよい。
【０１４８】
ＳＳＤ１００は、ＡＴＡインターフェース（ＡＴＡ  Ｉ／Ｆ）を介して、パーソナルコンピュータ等のホスト装置との間でデータを送受信する。また、ＳＳＤ１００は、ＲＳ２３２Ｃインターフェース（ＲＳ２３２Ｃ  Ｉ／Ｆ）を介して、デバッグ用機器との間でデータを送受信する。
【０１４９】
電源回路１０３は、外部電源を受け、この外部電源を用いて複数の内部電源を生成する。これらの内部電源は、ＳＳＤ１００内の各部に供給される。また、電源回路１０３は、外部電源の立ち上がりを検知して、パワーオンリセット信号を生成する。パワーオンリセット信号は、ドライブ制御回路１０２に送られる。
【０１５０】
図３２は、ドライブ制御回路１０２の構成を示すブロック図である。ドライブ制御回路１０２は、データアクセス用バス１０４、第１の回路制御用バス１０５、及び第２の回路制御用バス１０６を備えている。
【０１５１】
第１の回路制御用バス１０５には、ドライブ制御回路１０２全体を制御するプロセッサ１０７が接続されている。また、第１の回路制御用バス１０５には、各管理プログラム（ＦＷ：firmware）のブート用プログラムが格納されたブートＲＯＭ１０８がＲＯＭコントローラ１０９を介して接続されている。また、第１の回路制御用バス１０５には、電源回路１０３からのパワーオンリセット信号を受けて、リセット信号及びクロック信号を各部に供給するクロックコントローラ１１０が接続されている。
【０１５２】
第２の回路制御用バス１０６は、第１の回路制御用バス１０５に接続されている。第２の回路制御用バス１０６には、状態表示用ＬＥＤにステータス表示用信号を供給するパラレルＩＯ（ＰＩＯ）回路１１１、ＲＳ２３２Ｃインターフェースを制御するシリアルＩＯ（ＳＩＯ）回路１１２が接続されている。
【０１５３】
ＡＴＡインターフェースコントローラ（ＡＴＡコントローラ）１１３、第１のＥＣＣ（Error Check and Correct）回路１１４、ＮＡＮＤコントローラ１１５、及びＤＲＡＭコントローラ１１９は、データアクセス用バス１０４と第１の回路制御用バス１０５との両方に接続されている。ＡＴＡコントローラ１１３は、ＡＴＡインターフェースを介してホスト装置との間でデータを送受信する。データアクセス用バス１０４には、データ作業領域として使用されるＳＲＡＭ１２０がＳＲＡＭコントローラ１２１を介して接続されている。
【０１５４】
ＮＡＮＤコントローラ１１５は、４つのＮＡＮＤメモリ１０とのインターフェース処理を行うＮＡＮＤインターフェース回路（ＮＡＮＤ  Ｉ／Ｆ）１１８、第２のＥＣＣ回路１１７、及びＮＡＮＤメモリ−ＤＲＡＭ間のアクセス制御を行うＤＭＡ転送制御用ＤＭＡコントローラ１１６を備えている。
【０１５５】
図３３は、プロセッサ１０７の構成を示すブロック図である。プロセッサ１０７は、データ管理部１２２、ＡＴＡコマンド処理部１２３、セキュリティ管理部１２４、ブートローダ１２５、初期化管理部１２６、デバッグサポート部１２７を備えている。
【０１５６】
データ管理部１２２は、ＮＡＮＤコントローラ１１５、第１のＥＣＣ回路１１４を介して、ＮＡＮＤメモリ−ＤＲＡＭ間のデータ転送、ＮＡＮＤチップに関する各種機能を制御する。
【０１５７】
ＡＴＡコマンド処理部１２３は、ＡＴＡコントローラ１１３、及びＤＲＡＭコントローラ１１９を介して、データ管理部１２２と協働してデータ転送処理を行う。セキュリティ管理部１２４は、データ管理部１２２及びＡＴＡコマンド処理部１２３と協働して各種のセキュリティ情報を管理する。ブートローダ１２５は、パワーオン時、各管理プログラム（ＦＷ）をＮＡＮＤメモリ１０からＳＲＡＭ１２０にロードする。
【０１５８】
初期化管理部１２６は、ドライブ制御回路１０２内の各コントローラ／回路の初期化を行う。デバッグサポート部１２７は、外部からＲＳ２３２Ｃインターフェースを介して供給されたデバッグ用データを処理する。
【０１５９】
図３４は、ＳＳＤ１００を搭載したポータブルコンピュータ２００の一例を示す斜視図である。ポータブルコンピュータ２００は、本体２０１、及び表示ユニット２０２を備えている。表示ユニット２０２は、ディスプレイハウジング２０３と、このディスプレイハウジング２０３に収容された表示装置２０４とを備えている。
【０１６０】
本体２０１は、筐体２０５と、キーボード２０６と、ポインティングデバイスであるタッチパッド２０７とを備えている。筐体２０５内部には、メイン回路基板、ＯＤＤ（optical disk device）ユニット、カードスロット、及びＳＳＤ１００等が収容されている。
【０１６１】
カードスロットは、筐体２０５の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部２０８が設けられている。ユーザは、この開口部２０８を通じて筐体２０５の外部から追加デバイスをカードスロットに挿抜することが可能である。
【０１６２】
ＳＳＤ１００は、従来のＨＤＤの置き換えとして、ポータブルコンピュータ２００内部に実装された状態として使用してもよいし、ポータブルコンピュータ２００が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【０１６３】
なお、上記各実施形態のメモリシステム１は、ＳＳＤに限らず、例えば、ＳＤＴＭカードに代表されるメモリカードとして構成することも可能である。メモリシステム１をメモリカードとして構成する場合、ポータブルコンピュータに限らず、携帯電話、ＰＤＡ、デジタルスチルカメラ、デジタルビデオカメラ等、各種電子機器に対して適用可能である。
【０１６４】
本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲内で、構成要素を変形して具体化できる。また、実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成することができる。例えば、実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１６５】
１…メモリシステム、２…ＣＰＵ、３…メインメモリ、４…メモリコントローラ、１０…ＮＡＮＤ型フラッシュメモリ、１１…ＮＡＮＤコントローラ、２１…ホストインターフェース回路、２２…ＭＰＵ、２３…ＲＯＭ、２４…ＲＡＭ、２５…ＮＡＮＤインターフェース回路、３０…ブロック制御部、３０Ａ…アドレステーブル、３０Ｂ…ブロックテーブル、３０Ｃ，３１Ｂ…演算部、３１…消去時期計測部、３１Ａ…消去回数カウンタ、３２…割当ブロック選択部、３２Ａ〜３２Ｃ，３３Ａ〜３３Ｃ…セレクタ、３２Ｄ，３３Ｄ，３４Ｅ，３５Ｂ…記憶部、３３…入替元ブロック選択部、３４…短期書き換え検出部、３４Ａ…セレクタ、３４Ｂ…整列部、３４Ｃ…探索リスト、３４Ｄ…判定部、３４Ｆ…情報出力部、３５…平準化部、３５Ａ…平準化判定部、３６…ＥＣＣ回路、１００…ＳＳＤ、１０１…ＤＲＡＭ、１０２…ドライブ制御回路、１０３…電源回路、１０４…データアクセス用バス、１０５…第１の回路制御用バス、１０６…第２の回路制御用バス、１０７…プロセッサ、１０８…ブートＲＯＭ、１０９…ＲＯＭコントローラ、１１０…クロックコントローラ、１１１…ＰＩＯ回路、１１２…ＳＩＯ回路、１１３…ＡＴＡインターフェースコントローラ、１１４…第１のＥＣＣ回路、１１５…ＮＡＮＤコントローラ、１１６…ＤＭＡコントローラ、１１７…第２のＥＣＣ回路、１１８…ＮＡＮＤインターフェース回路、１１９…ＤＲＡＭコントローラ、１２０…ＳＲＡＭ、１２１…ＳＲＡＭコントローラ、１２２…データ管理部、１２３…ＡＴＡコマンド処理部、１２４…セキュリティ管理部、１２５…ブートローダ、１２６…初期化管理部、１２７…デバッグサポート部、２００…ポータブルコンピュータ、２０１…本体、２０２…表示ユニット、２０３…ディスプレイハウジング、２０４…表示装置、２０５…筐体、２０６…キーボード、２０７…タッチパッド、２０８…開口部。
【図１】
2010067284.tif 000003
【図２】
2010067284.tif 000004
【図３】
2010067284.tif 000005
【図４】
2010067284.tif 000006
【図５】
2010067284.tif 000007
【図６】
2010067284.tif 000008
【図７】
2010067284.tif 000009
【図８】
2010067284.tif 000010
【図９】
2010067284.tif 000011
【図１０】
2010067284.tif 000012
【図１１】
2010067284.tif 000013
【図１２】
2010067284.tif 000014
【図１３】
2010067284.tif 000015
【図１４】
2010067284.tif 000016
【図１５】
2010067284.tif 000017
【図１６】
2010067284.tif 000018
【図１７】
2010067284.tif 000019
【図１８】
2010067284.tif 000020
【図１９】
2010067284.tif 000021
【図２０】
2010067284.tif 000022
【図２１】
2010067284.tif 000023
【図２２】
2010067284.tif 000024
【図２３】
2010067284.tif 000025
【図２４】
2010067284.tif 000026
【図２５】
2010067284.tif 000027
【図２６】
2010067284.tif 000028
【図２７】
2010067284.tif 000029
【図２８】
2010067284.tif 000030
【図２９】
2010067284.tif 000031
【図３０】
2010067284.tif 000032
【図３１】
2010067284.tif 000033
【図３２】
2010067284.tif 000034
【図３３】
2010067284.tif 000035
【図３４】
2010067284.tif 000036