以下、本発明の実施の形態について図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
[第1の実施形態]
本実施形態のメモリシステムは、例えば、ホスト装置が実装されたプリント基板上に実装され、バスを介してホスト装置との間でデータの転送を行う。或いは、本実施形態のメモリシステムは、ホスト装置に対して着脱可能なように構成され、ホスト装置に接続された状態でバスを介してホスト装置との間でデータの転送を行う。図1は、本実施形態のメモリシステム1を備えた計算機システムの一例を示す概略図である。
計算機システムは、中央演算処理装置(CPU:central processing unit)2、DRAM(dynamic random access memory)等のメインメモリ3、メインメモリ3を制御するメモリコントローラ4、及び本実施形態のメモリシステム1を備えている。CPU2、メインメモリ3、及びメモリシステム1は、互いに、アドレスを扱うアドレスバス5、及びデータを扱うデータバス6を介して接続されている。
このような計算機システムでは、CPU2からの転送要求(読出要求、或いは書込要求)に応じて、書込要求であればCPU2のデータ(外部から入力されたデータを含む)、或いはメインメモリ3のデータがメモリシステム1に転送され、読出要求であればメモリシステム1のデータがCPU2、或いはメインメモリ3に転送される。
メモリシステム1は、不揮発性半導体メモリの一種であるNAND型フラッシュメモリ10、及びこのNAND型フラッシュメモリ10を制御するNANDコントローラ11を備えている。以下に、メモリシステム1の構成の一例について説明する。
[1.メモリシステム1の構成]
図2は、メモリシステム1の構成を示す概略図である。メモリシステム1は、NAND型フラッシュメモリ10、及びNANDコントローラ11を備えている。NANDコントローラ11は、ホストインターフェース回路(ホストI/F)21、演算処理装置(MPU:micro processing unit)22、ROM(read only memory)23、RAM(random access memory)24、及びNANDインターフェース回路(NAND I/F)25を備えている。
ホストインターフェース回路21は、所定のプロトコルに従って、NANDコントローラ11とホスト装置(CPU2、メインメモリ3)との間のインターフェース処理を行う。
MPU22は、メモリシステム1全体の動作を制御する。MPU22は、例えば、メモリシステム1が電源供給を受けたときに、ROM23に格納されているファームウェア(制御プログラム)をRAM24上に読み出して所定の処理を実行することにより、各種のテーブルをRAM24上に作成する。また、MPU22は、ホスト装置から書込要求、読出要求、消去要求を受け、これらの要求に応じてNAND型フラッシュメモリ10に所定の処理を実行する。
ROM23は、MPU22により制御される制御プログラム等を格納する。RAM24は、MPU22の作業エリアとして使用され、ROM23からロードされた制御プログラムや各種テーブルを記憶する。NANDインターフェース回路25は、所定のプロトコルに従って、NANDコントローラ11とNAND型フラッシュメモリ10との間のインターフェース処理を行う。
NAND型フラッシュメモリ10は、データ消去の最小単位であるブロックを複数個配列して構成されている。図3は、NAND型フラッシュメモリ10に含まれる1個のブロックの構成を示す回路図である。各ブロックは、X方向に沿って順に配列された(m+1)個のNANDストリングを備えている(mは、0以上の整数)。(m+1)個のNANDストリングにそれぞれ含まれる選択トランジスタST1は、ドレインがビット線BL0〜BLmに接続され、ゲートが選択ゲート線SGDに共通接続されている。また、(m+1)個のNANDストリングにそれぞれ含まれる選択トランジスタST2は、ソースがソース線SLに共通接続され、ゲートが選択ゲート線SGSに共通接続されている。
各メモリセルトランジスタMTは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(metal oxide semiconductor field effect transistor)から構成される。積層ゲート構造は、半導体基板上に、ゲート絶縁膜、電荷蓄積層(浮遊ゲート電極)、ゲート間絶縁膜、制御ゲート電極が順に積層されて構成されている。メモリセルトランジスタMTは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。メモリセルトランジスタMTは、2値(1ビット)を記憶するように構成されていてもよいし、多値(2ビット以上のデータ)を記憶するように構成されていてもよい。
また、メモリセルトランジスタMTは、浮遊ゲート電極を有する構造に限らず、MONOS(metal-oxide-nitride-oxide-silicon)型など、電荷蓄積層としての窒化膜界面に電子をトラップさせることで閾値調整可能な構造であってもよい。MONOS構造のメモリセルトランジスタMTについても同様に、1ビットを記憶するように構成されていてもよいし、多値(2ビット以上のデータ)を記憶するように構成されていてもよい。
各NANDストリングにおいて、(n+1)個のメモリセルトランジスタMTは、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている(nは、0以上の整数)。すなわち、(n+1)個のメモリセルトランジスタMTは、隣接するもの同士で拡散領域(ソース領域若しくはドレイン領域)を共有するような形でY方向に直列接続される。
そして、最もドレイン側に位置するメモリセルトランジスタMTから順に、制御ゲート電極がワード線WL0〜WLnにそれぞれ接続されている。従って、ワード線WL0に接続されたメモリセルトランジスタMTのドレインは選択トランジスタST1のソースに接続され、ワード線WLnに接続されたメモリセルトランジスタMTのソースは選択トランジスタST2のドレインに接続されている。
ワード線WL0〜WLnは、ブロック内のNANDストリング間で、メモリセルトランジスタMTの制御ゲート電極を共通に接続している。つまり、ブロック内において同一行にあるメモリセルトランジスタMTの制御ゲート電極は、同一のワード線WLに接続される。この同一のワード線WLに接続される(m+1)個のメモリセルトランジスタMTは1ページとして取り扱われ、このページごとにデータの書き込み及びデータの読み出しが行われる。
また、ビット線BL0〜BLmは、ブロック間で、選択トランジスタST1のドレインを共通接続している。つまり、複数のブロック内において同一列にあるNANDストリングは、同一のビット線BLに接続される。
本発明の各実施形態における各機能ブロックは、ハードウェア、及びソフトウェアのいずれか、又は両者の組み合わせとして実現することができる。このため、各機能ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェアとして実現されるか、又はソフトウェアとして実現されるかは、具体的な実施態様、或いはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれる。
以下に、NANDコントローラ11のより具体的な構成の一例について説明する。図4は、本実施形態におけるNANDコントローラ11の構成の一例を示すブロック図である。
NANDコントローラ11は、ブロック制御部30、消去時期計測部31、割当ブロック選択部32、入替元ブロック選択部33、短期書き換え検出部34、平準化部35、及びNANDインターフェース回路(NAND I/F)25を備えている。
消去時期計測部31は、NAND型フラッシュメモリ10に含まれる各ブロックのデータが消去されるごとに、当該ブロックの消去時期を計測する。そして、消去時期計測部31は、この計測した消去時期をブロック制御部30に送る。
ブロック制御部30は、ブロックごとに、消去回数や消去時期等を含む各種情報を管理する。また、ブロック制御部30は、CPU2からの転送要求に応じて、NAND型フラッシュメモリ10に対して書込要求、読出要求、及び消去要求を発行する。具体的には、ブロック制御部30は、後述するアドレステーブル30A、及びブロックテーブル30Bを備えており、これらのテーブルを利用して、NAND型フラッシュメモリ10に書込要求、読出要求、及び消去要求を発行する。
割当ブロック選択部32は、例えば外部(CPU2、或いはメインメモリ3等)から供給される新たなデータをNAND型フラッシュメモリ10に書き込む際に、この書き込みに割り当てるブロック(以下、割当ブロックという)を選択する。すなわち、割当ブロック選択部32は、ブロックテーブル30Bに記憶されている全ブロックの情報(全ブロック情報)をブロック制御部30から受け、所定の条件に従って割当ブロックを選択する。そして、割当ブロック選択部32は、この割当ブロックに対応するブロック番号(割当ブロック番号)をブロック制御部30に送る。また、割当ブロック選択部32は、全ブロック情報のうち割当ブロックに対応する情報(割当ブロック情報)を平準化部35に送る。なお、NAND型フラッシュメモリ10に書き込まれるデータとしては、メモリシステム1の外部から供給されるユーザデータの他に、メモリシステム1内部の管理に必要なシステムデータ等も存在する。
平準化部35は、後述する平準化処理を実行する。そして、平準化部35は、この平準化処理に伴い、NAND型フラッシュメモリ10に対して書込要求、読出要求、及び消去要求を発行する。なお、平準化とは、ブロックの消去回数を揃えること(いわゆる、ウェアレベリング:wear leveling)を意味する。このように、ブロックの消去回数を揃えることで、一部のブロックへ消去処理が集中するのを防ぐことができるため、NAND型フラッシュメモリ10の寿命を延ばすことが可能となる。
入替元ブロック選択部33は、平準化部35による平準化処理に使用される、データ入れ替え元のブロック(以下、入替元ブロックという)を選択する。すなわち、入替元ブロック選択部33は、全ブロック情報をブロック制御部30から受け、所定の条件に従って入替元ブロックを選択する。そして、入替元ブロック選択部33は、全ブロック情報のうち入替元ブロックに対応する情報(入替元ブロック情報)を平準化部35に送る。
NANDインターフェース回路25は、ブロック制御部30及び平準化部35から、書込要求、読出要求、及び消去要求を受ける。そして、NANDインターフェース回路25は、これらの要求に応じて、NAND型フラッシュメモリ10に対してデータの書き込み、読み出し、及び消去を行うように指示する。
短期書き換え検出部34は、頻繁に(短期間で)書き換えが行われているブロック(すなわち、消去間隔が短いブロック)を検出する。短期間で書き換えが行われているブロックはその消去時期が頻繁に更新される(消去時期が新しくなる)が、短期間で書き換えが行われていないブロックはその消去時期が古いままである。本実施形態では、これらの消去時期の差を利用して、短期間で書き換えが行われているブロックを検出する。このために、短期書き換え検出部34は、使用中状態のブロックを消去時期順に整列(ソート)し、ある探索対象ブロックと、この探索対象ブロックの次に消去時期が新しい比較対象ブロックとの消去時期の差を算出する。そして、この消去時期の差が所定の閾値を越えていた場合に、消去時期が比較対象ブロックより新しいブロックを、短期間で書き換えが行われているブロックであると判定する。この判定結果は、短期書き換え情報としてブロック制御部30に送られる。
図5は、ブロック制御部30及び消去時期計測部31の構成を示すブロック図である。ブロック制御部30は、アドレステーブル30A、ブロックテーブル30B、及び演算部30Cを備えている。ブロック制御部30は、外部から供給されるアドレスや各種情報を受け、これらの情報に基づいてアドレステーブル30A及びブロックテーブル30Bを更新する。
アドレステーブル30Aは、ホスト装置(CPU2)からアドレスバス5を介して送られるアドレスを含むアドレス領域(論理ブロックアドレス)と、このアドレス領域に対応する、NAND型フラッシュメモリ10内のブロックの番号(物理ブロックアドレス)との対応関係を示す。このアドレステーブル30Aを用いることで、ブロック制御部30は、ホスト装置から送られるアドレスを含むアドレス領域のデータがどのブロックに対応するかを特定することができる。このアドレステーブル30Aは、例えば、後述するブロック解放処理、ブロック割当処理に伴い更新される。
ブロックテーブル30Bは、ブロック番号ごとに、アドレステーブル30Aにブロック番号が登録されていないか(空き状態であるか)、アドレステーブル30Aにブロック番号が登録されているか(使用中状態であるか)を示すブロックの状態と、データが消去された回数(消去回数)と、消去時期計測部31から送られる消去時期と、短期書き換え検出部34から送られる短期書き換え情報に対応した短期書き換えフラグ(図5には、単に「フラグ」と記載している)と、を情報として格納する。このブロックテーブル30Bは、例えば、後述するブロック解放処理、ブロック割当処理、ブロック消去処理、及び短期書き換え検出処理に伴い更新される。ブロックテーブル30Bに含まれる全ブロック情報は、割当ブロック選択部32、入替元ブロック選択部33、及び短期書き換え検出部34に送られる。
ブロックが空き状態であれば、NAND型フラッシュメモリ10内部で当該ブロックに対して実際に消去が行われたか否かに係わらず、当該ブロックに対応するアドレス領域は、ホスト装置から見ると、データが格納されていない空き領域であると認識される。一方、ブロックが使用中状態であれば、当該ブロックに対応するアドレス領域は、ホスト装置から見ると、データが格納されている使用中領域であると認識される。
なお、実際には、これらアドレステーブル30A及びブロックテーブル30Bは、RAM24、或いは、RAM24及びNAND型フラッシュメモリ10の両方に格納されている。但し、NAND型フラッシュメモリ10に不揮発に格納されたアドレステーブル30A及びブロックテーブル30Bは、必ずしもRAM24を更新した都度更新を行う必要はない。
演算部30Cは、NAND型フラッシュメモリ10のデータが消去されるごとに、ブロックテーブル30Bに含まれる、消去が行われたブロックの消去回数を1カウントアップする。なお、実際には、演算部30Cの処理は、MPU22により行われる。
ブロック制御部30は、割当ブロック選択部32から割当ブロック番号を受ける。そして、この割当ブロック番号を用いて、アドレステーブル30Aのブロック番号を更新する。また、ブロック制御部30は、この割当ブロックに対する書込要求をNAND型フラッシュメモリ10に対して発行する。さらに、ブロック制御部30は、外部からのアドレスに応じた通常の読出要求、及び消去要求をNAND型フラッシュメモリ10に対して発行する。
消去時期計測部31は、消去回数をカウントする消去回数カウンタ31A、及び消去回数カウンタ31Aのカウント値を更新する演算部31Bを備えている。消去時期計測部31は、NAND型フラッシュメモリ10内のブロックに対して消去処理が行われた回数を計測し、この計測された回数を消去時期として出力する。
具体的には、演算部31Bは、いずれかのブロックが消去されるごとに、消去回数カウンタ31Aを1カウントアップする。消去回数カウンタ31Aのカウント値(消去番号)は、消去時期としてブロック制御部30(具体的には、ブロックテーブル30B)に送られる。この例の消去時期計測部31では、消去番号が小さいほど消去時期が古くなる。なお、実際には、演算部31Bの処理は、MPU22により行われる。
消去時期としては、この他に、消去処理が行われた時刻(消去時刻)や、NANDコントローラ11の通電時間等を用いるようにしてもよい。消去時刻を消去時期として用いる場合は、消去時期計測部31が時計を備え、消去処理が行われるごとに、その時刻を消去時期として出力する。通電時間を消去時期として用いる場合は、消去時期計測部31がタイマーを備え、消去処理が行われるごとに、それまでの通電時間を計測し、その通電時間を消去時期として出力する。このように、消去時期として、消去回数、消去時刻、及び通電時間のいずれを用いるかは、任意に選択することが可能である。なお、消去時期が特定可能な情報であれば、上記3種類以外を用いることも可能である。
[2.NANDコントローラ11の書き込み動作]
次に、NANDコントローラ11の書き込み動作について説明する。図6は、NANDコントローラ11による一連の書き込み動作を示すフローチャートである。
まず、NANDコントローラ11は、CPU2から書込要求を受けることで、書き込み動作を開始する(ステップS10)。続いて、ブロック制御部30は、アドレステーブル30Aを用いて、書込要求のアドレスを含むアドレス領域に対して、ブロック番号が登録されている(ブロックが割り当てられている)か否かを判定する(ステップS11)。ブロック番号が登録されている(ブロックが割り当てられている)場合、このアドレス領域に対してデータの上書きを行う必要があるため、ブロック制御部30は、上記ブロック番号に対応するブロックを解放するブロック解放処理を実行する(ステップS12)。
ステップS11においてブロック番号が登録されていない(ブロックが割り当てられていない)と判定された場合、或いはステップS12においてブロック解放処理が実行された後、割当ブロック選択部32は、上記アドレス領域に割り当てるブロック(割当ブロック)を選択する割当ブロック選択処理を実行する(ステップS13)。
続いて、平準化部35及び入替元ブロック選択部33は、平準化処理を実行する(ステップS14)。続いて、ブロック制御部30は、平準化処理において、割当ブロックの入れ替えを行ったか否かを判定する(ステップS15)。割当ブロックの入れ替えを行った場合、ステップS13に戻って、割当ブロック選択部32は、再度、割当ブロック選択処理を実行する。
ステップS15において割当ブロックの入れ替えを行っていないと判定された場合、ブロック制御部30は、割当ブロックに対応するブロック番号(割当ブロック番号)を用いて、アドレステーブル30A及びブロックテーブル30Bを更新するために、ブロック割当処理を実行する(ステップS16)。続いて、ブロック制御部30は、割当ブロックに対してブロック消去処理を実行する(ステップS17)。
続いて、ブロック制御部30は、データが消去された割当ブロックに、新たなデータを書き込む(ステップS18)。すなわち、ブロック制御部30は、NANDインターフェース回路25に書込要求を発行する。この書込要求に基づいて、NANDインターフェース回路25は、NAND型フラッシュメモリ10に、割当ブロックへ新たなデータを書き込むように指示する。
続いて、短期書き換え検出部34は、短期書き換え検出処理を実行する(ステップS19)。そして、ブロック制御部30は、短期書き換え検出部34から送られる短期書き換え情報を用いて、ブロックテーブル30Bのフラグを更新する。このようにして、NANDコントローラ11によって一連の書き込み動作が実行される。
以下に、書き込み動作に含まれる各処理について具体的に説明する。
[2−1.ブロック解放処理]
図7は、NANDコントローラ11によるブロック解放処理を示すフローチャートである。ブロック制御部30は、アドレステーブル30Aに含まれる、書込要求のアドレスを含むアドレス領域に対応するブロック番号を、未割り当ての状態(未割当状態)に設定する(ステップS20)。続いて、ブロック制御部30は、ブロックテーブル30Bに含まれる、上記ブロック番号の状態を、空き状態に設定する(ステップS21)。ブロック解放処理において新たに空き状態に設定されたブロックを、以下、解放ブロックという。以後、NANDコントローラ11は、解放ブロックに新たなデータを書き込むことが可能となる。
[2−2.割当ブロック選択処理]
図8は、割当ブロック選択部32の構成を示すブロック図である。図9は、割当ブロック選択部32による割当ブロック選択処理を示すフローチャートである。
割当ブロック選択部32は、2個のセレクタ32A及び32Bを備えている。割当ブロック選択部32は、ブロック制御部30から全ブロック情報を受ける(ステップS30)。この全ブロック情報は、セレクタ32Aに送られる。続いて、セレクタ32Aは、全ブロックの状態を確認し、全ブロックのうち空き状態のブロックを抽出する(ステップS31)。そして、セレクタ32Aは、空き状態のブロックに対応するブロック情報(空き状態ブロック情報)をセレクタ32Bに送る。
続いて、セレクタ32Bは、セレクタ32Aにより抽出されたブロックのうち、消去時期が最も古いブロックを割当ブロックとして選択する(ステップS32)。この割当ブロックに対応する割当ブロック番号は、ブロック制御部30に送られる。また、この割当ブロックに対応する割当ブロック情報は、平準化部35に送られる。
[2−3.ブロック割当処理]
図10は、NANDコントローラ11によるブロック割当処理を示すフローチャートである。NANDコントローラ11は、割当ブロック選択部32により選択された割当ブロックに対して、アドレステーブル30A及びブロックテーブル30Bの情報を更新する。
まず、ブロック制御部30は、割当ブロック選択部32から割当ブロック番号を受ける(ステップS40)。続いて、ブロック制御部30は、アドレステーブル30Aに含まれる書込要求のアドレスを含むアドレス領域に対して、割当ブロックのブロック番号を設定する(ステップS41)。続いて、ブロック制御部30は、ブロックテーブル30Bに含まれる割当ブロックの状態を、使用中状態に設定する(ステップS42)。このようにして、割当ブロック選択部32により選択された割当ブロックが空き状態から使用中状態に設定変更される。
[2−4.ブロック消去処理]
図11は、NANDコントローラ11によるブロック消去処理を示すフローチャートである。ブロック制御部30は、NANDインターフェース回路25に、割当ブロックに対する消去要求を発行する(ステップS50)。この消去要求に基づいて、NANDインターフェース回路25は、NAND型フラッシュメモリ10に、割当ブロックのデータを消去するように指示する(ステップS51)。続いて、消去時期計測部31(具体的には、演算部31B)は、消去回数カウンタ31Aのカウント値(消去番号)を1カウントアップする(ステップS52)。
続いて、ブロック制御部30は、ブロックテーブル30Bに含まれる、データが消去された割当ブロックに対応する消去回数及び消去時期を更新する(ステップS53)。具体的には、ブロック制御部30は、消去時期計測部31から送られる消去時期を用いて、ブロックテーブル30Bに含まれる、割当ブロックのブロック番号に対応する消去時期を更新する。また、演算部30Cは、ブロックテーブル30Bに含まれる、割当ブロックのブロック番号に対応する消去回数を1カウントアップする。
[2−5.短期書き換え検出処理]
図12は、短期書き換え検出部34の構成を示すブロック図である。短期書き換え検出部34は、セレクタ34A、整列部34B、探索リスト34C、判定部34D、消去時期間隔閾値を格納する記憶部34E、及び情報出力部34Fを備えている。
セレクタ34Aは、ブロック制御部30から送られる全ブロック情報を用いて、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する。整列部34Bは、使用中状態のブロックを消去時期順に整列(ソート)する。探索リスト34Cは、ソートされたブロック情報を一時的に格納する。なお、実際には、この探索リスト34Cは、RAM24に格納されている。
判定部34Dは、探索リスト34Cの中で、消去時期が最も新しいブロックを「探索対象ブロック」、消去時期が探索対象ブロックの次に新しいブロックを「比較対象ブロック」として選択する。さらに、判定部34Dは、探索対象ブロックと比較対象ブロックとの消去時期の差を算出し、この差が消去時期間隔閾値を超えているか否かを判定する。そして、この判定結果に基づいて、消去時期が急激に変化する境界を探索する。
情報出力部34Fは、判定部34Dから送られる判定結果(比較対象ブロックの番号)を用いて、全ブロックのうち比較対象ブロックより消去時期が新しいブロックの範囲を算出する。そして、情報出力部34Fは、上記範囲を短期書き換え情報としてブロック制御部30に送る。
記憶部34Eに格納される消去時期間隔閾値は、頻繁に書き換えが行われているブロックの範囲を特定するために使用され、また、NAND型フラッシュメモリ10の寿命(或いは、データリテンション期間)をどの程度延ばすかという基準に基づいて設定される。消去時期間隔閾値を低くすると短期書き換え検出の可能性が上がり、一方、消去時期間隔閾値を高くすると短期書き換え検出の可能性が下がる。すなわち、消去時期間隔閾値を低くすると平準化処理の回数が増え、一方、消去時期間隔閾値を高くすると平準化処理の回数が減ることになる。この平準化処理は、ブロックのデータ消去処理を伴う。
データを消去するごとに、NAND型フラッシュメモリ10のリテンション特性は悪化する(すなわち、寿命が短くなる)。一方、消去間隔が長くなると、NAND型フラッシュメモリ10のリテンション特性が回復していく。すなわち、短い間隔で消去処理が連続して行われた場合には、リテンション特性の回復時間が確保できないため、NAND型フラッシュメモリ10の寿命が短くなってしまう。そこで、本実施形態では、頻繁に書き換えが行われているブロックに対して短期書き換えフラグを立てることで、これらのブロックを平準化の対象にしている。そして、消去間隔を所定時間長くすることでどの程度寿命が回復するかを示す、NAND型フラッシュメモリ10の特性を加味した上で、平準化処理の対象となるブロック、及び平準化の回数が最適化されるように、消去時期間隔閾値が決定される。
図13は、短期書き換え検出部34による短期書き換え検出処理を示すフローチャートである。まず、短期書き換え検出部34は、ブロック制御部30から全ブロック情報を受ける(ステップS60)。この全ブロック情報は、セレクタ34Aに送られる。続いて、セレクタ34Aは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する(ステップS61)。そして、セレクタ34Aは、使用中状態のブロックに対応するブロック情報(使用中状態ブロック情報)を整列部34Bに送る。
続いて、整列部34Bは、使用中状態ブロック情報に含まれる消去時期を確認し、使用中状態のブロックを消去時期順にソートする(ステップS62)。そして、整列部34Bによりソートされたブロック情報は、探索リスト34Cに入れられる。
続いて、判定部34Dは、探索リスト34Cの中で、消去時期が最も新しいブロックを探索対象ブロック、消去時期が探索対象ブロックの次に新しいブロックを比較対象ブロックとして選択する(ステップS63)。
続いて、判定部34Dは、探索対象ブロックと比較対象ブロックとの消去時期の差を算出する(ステップS64)。続いて、判定部34Dは、上記算出した消去時期の差が、消去時期間隔閾値を超えているか否かを判定する(ステップS65)。消去時期間隔閾値を超えていない場合、判定部34Dは、探索リスト34Cの中に2個以上のブロックが残っているか否かを判定する(ステップS66)。2個以上のブロックが残っている場合、判定部34Dは、探索対象ブロックを探索リスト34Cから除外し、ステップS63に戻って探索対象ブロック及び比較対象ブロックの選択をやり直す。
ステップS65において消去時期間隔閾値を超えている場合、判定部34Dは、比較対象ブロック番号を情報出力部34Fに送る。情報出力部34Fは、この比較対象ブロック番号を用いて、全ブロックのうち比較対象ブロックより消去時期が新しいブロックの範囲を算出する(ステップS68)。そして、情報出力部34Fは、上記範囲を短期書き換え情報としてブロック制御部30に送る。短期書き換え情報を受けて、ブロック制御部30では、短期書き換え情報に含まれるブロックに対応する短期書き換えフラグを立て、その他のブロックに対応する短期書き換えフラグはクリアする。
ステップS66において2個以上のブロックが残っていない場合、短期書き換えが行われたブロックを検出できないと判断し、短期書き換え検出処理を終了する。
図14は、短期書き換え検出部34による短期書き換え検出処理の具体例を説明する図である。NAND型フラッシュメモリ10に含まれるブロックが12個(ブロック♯0〜11)であり、このうち、ブロック#0〜7が探索リスト34Cに含まれる使用中状態のブロックであり、ブロック#8〜11が空き状態であるものとする。ブロック#0〜7は、消去時期が新しい順にソートされている。ブロックごとの消去時期は、図に示した通りである。
まず、探索リスト34Cの中で、消去時期が最も新しいブロック#0が探索対象ブロック、消去時期が次に新しいブロック#1が比較対象ブロックとして選択される。ブロック#0とブロック#1との消去時期の差は、“10”である。この差“10”は、消去時期間隔閾値(例えば、“100”)を超えていない。よって、探索対象ブロック#0は、探索リスト34Cから除外される。
続いて、探索リスト34Cの中で、消去時期が最も新しいブロック#1が探索対象ブロック、消去時期が次に新しいブロック#2が比較対象ブロックとして選択される。ブロック#1とブロック#2との消去時期の差は、“110”である。この差“110”は、消去時期間隔閾値を超えている。よって、比較対象ブロック#2の番号が、判定部34Dから情報出力部34Fに送られる。
情報出力部34Fでは、空き状態ブロックを含む全ブロックのうち、消去時期が比較対象ブロック#2より新しいブロック#0、1、8〜11を算出する。そして、情報出力部34Fは、ブロック#0、1、8〜11を短期書き換え情報として、ブロック制御部30に送る。これに対し、ブロック制御部30では、ブロック#0、1、8〜11に対応する短期書き換えフラグを立て、その他のブロックに対応する短期書き換えフラグはクリアする。このようにして、ブロックテーブル30Bの情報が更新される。
[2−6.平準化処理]
NAND型フラッシュメモリ10の寿命を延長するには、各ブロックの消去回数を揃えることと、特定の領域に対して短期間に頻繁に書き換えを行うことを避けることとの両立が必要である。消去回数を揃えることにだけ着目してNAND型フラッシュメモリ10の寿命を延長しようとすると、書き込み状況によっては特定の領域が短期間に書き換えが進行してしまうことがある。短期間にこの修正(平準化)を頻繁に行うと、消去回数は揃い、短期間の特定の領域への書き込み集中を避けることができるが、修正に起因する消去処理が多くなり、結果として寿命を延長することができない。一方で、修正の間隔を延ばし過ぎると、特定の領域に間隔の短い消去処理が集中することになり、寿命が短くなってしまう。このような知見に基づいて、本実施形態の平準化処理では、平準化の回数を最適化し、かつブロックごとの消去回数を揃えるようにしている。
平準化処理は、平準化部35、及び入替元ブロック選択部33により実行される。図15は、平準化部35の構成を示すブロック図である。平準化部35は、平準化判定部35A、及び平準化閾値を格納する記憶部35Bを備えている。
平準化判定部35Aは、平準化閾値、割当ブロック選択部32から送られる割当ブロック情報、及び入替元ブロック選択部33から送られる入替元ブロック情報を用いて、今回の書き込み動作時に平準化処理を行うか否かを判定する。そして、平準化処理を行う場合、平準化判定部35Aは、NANDインターフェース回路25に、平準化処理に伴う読出要求、消去要求、及び書込要求を発行する。
図16は、NANDコントローラ11による平準化処理を示すフローチャートである。まず、入替元ブロック選択部33によって、入替元ブロック選択処理が実行される(ステップS70)。そして、この選択処理の結果として、入替元ブロック情報が、入替元ブロック選択部33から平準化部35へ送られる。
続いて、平準化判定部35Aは、割当ブロック選択部32から送られる割当ブロック情報を確認し、この割当ブロック情報に含まれる短期書き換えフラグが立っているか否かを判定する(ステップS71)。短期書き換えフラグが立っていない場合、すなわち、割当ブロックの書き換えが頻繁に行われていない場合、平準化判定部35Aは、入替元ブロックと割当ブロックとの消去回数の差が平準化閾値を越えているか否かを判定する(ステップS72)。平準化閾値を越えていない場合、平準化部35は、今回の書き込み動作において平準化を行わない。
この平準化閾値は、平準化処理を実行するか否かを判定するために使用され、また、NAND型フラッシュメモリ10の寿命(或いは、データリテンション期間)をどの程度延ばすかという基準に基づいて設定される。前述したように、消去回数を揃えることにだけ着目してNAND型フラッシュメモリ10の寿命を延長しようとすると、平準化に伴う消去処理が多発してしまい、結果として特定領域への消去回数が増えてしまう。従って、本実施形態では、入替元ブロックと割当ブロックとの消去回数の差が平準化閾値を越えている場合にのみ平準化処理を実行するようにしている。
ステップS71において短期書き換えフラグが立っている場合、或いは、ステップS72において平準化閾値を越えている場合、ブロック制御部30は、入替元ブロックのブロック解放処理を実行する(ステップS73)。このブロック解放処理は、図7と同じである。
続いて、ブロック制御部30は、割当ブロック選択部32により選択された割当ブロックを、入替元ブロックのデータを移動するブロックとして割り当てるブロック割当処理を実行する(ステップS74)。このブロック割当処理は、図10と同じである。
続いて、NANDコントローラ11は、NAND型フラッシュメモリ10に含まれる入替元ブロックのデータを読み出す(ステップS75)。具体的には、平準化判定部35Aは、入替元ブロック選択部33から送られる入替元ブロック情報を用いて、NANDインターフェース回路25に読出要求を発行する。この読出要求に基づいて、NANDインターフェース回路25は、NAND型フラッシュメモリ10に、入替元ブロックからデータを読み出すように指示する。読み出されたデータは、RAM24等に一時的に格納される。
続いて、NANDコントローラ11は、割当ブロックのデータを消去する(ステップS76)。具体的には、平準化判定部35Aは、割当ブロック選択部32から送られる割当ブロック情報を用いて、NANDインターフェース回路25に消去要求を発行する。この消去要求に基づいて、NANDインターフェース回路25は、NAND型フラッシュメモリ10に、割当ブロックのデータを消去するように指示する。この際、ブロック制御部30によって割当ブロックの消去回数及び消去時期が更新される(図11参照)。
続いて、NANDコントローラ11は、NAND型フラッシュメモリ10に含まれる割当ブロックに、入替元ブロックから読み出されたデータを書き込む(ステップS77)。具体的には、平準化判定部35Aは、割当ブロック情報を用いて、NANDインターフェース回路25に書込要求を発行する。この書込要求に基づいて、NANDインターフェース回路25は、NAND型フラッシュメモリ10に、割当ブロックへデータを書き込むように指示する。
以上により、入替元ブロックのデータを割当ブロックに移し変え、入替元ブロックを空き状態にすることができるため、あまり書き換えが行われていないと考えられる入替元ブロックを、再度割当ブロックとして使用することが可能となる。また、あまり書き換えが行われないデータを、すでに消去回数が多くなっている割当ブロックに移すことで、今後、割当ブロックの消去回数が増えるのを防ぐことが可能となる。
[2−6−1.入替元ブロック選択処理]
図17は、入替元ブロック選択部33の構成を示すブロック図である。図18は、入替元ブロック選択部33による入替元ブロック選択処理を示すフローチャートである。
入替元ブロック選択部33は、2個のセレクタ33A及び33Bを備えている。入替元ブロック選択部33は、ブロック制御部30から全ブロック情報を受ける(ステップS80)。この全ブロック情報は、セレクタ33Aに送られる。続いて、セレクタ33Aは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する(ステップS81)。そして、セレクタ33Aは、使用中状態のブロックに対応するブロック情報(使用中状態ブロック情報)をセレクタ33Bに送る。
続いて、セレクタ33Bは、セレクタ33Aにより抽出されたブロックのうち、消去時期が最も古いブロックを入替元ブロックとして選択する(ステップS82)。この入替元ブロックに対応する入替元ブロック情報は、平準化部35に送られる。このような入替元ブロック選択処理により、頻繁に書き換えられていないデータを格納した、リテンション特性の良いブロックを入替元ブロックとして選択することができる。
以上詳述したように本実施形態では、各ブロックが消去された消去時期を計測し、各ブロックと消去時期とを対応付けてブロックテーブル30Bに格納する。そして、外部から供給されたデータをNAND型フラッシュメモリ10に書き込む場合に、空き状態のブロックのうち消去時期が最も古いブロックを割当ブロックとして選択し、この割当ブロックに上記データを書き込むようにしている。
従って本実施形態によれば、各ブロックに対して消去間隔を長くすることができる。このため、消去間隔を長くすることでリテンション特性が回復するというメモリセルトランジスタの特性を利用して、各ブロックのリテンション特性の悪化を低減することができる。これにより、NAND型フラッシュメモリ10の寿命を長くすることが可能となる。
また、本実施形態では、短期書き換え検出部34によって頻繁に書き換えが行われているブロックを特定し、このブロックが割当ブロックとして選択された場合に、消去時期が古い入替元ブロックと割当ブロックとを入れ替えるようにしている。そして、入替元ブロックに格納されていた頻繁に書き換えられていないデータを割当ブロックに移すようにしている。これにより、一度書き込みで割り当てられたまま長い期間解放されない入替元ブロックも平準化処理により解放されるようになるため、あまり書き換えが行われていないと考えられる入替元ブロックを、再度割当ブロックとして使用することが可能となる。また、割当ブロックに対しては、頻繁に書き換えられていないデータを格納することになるため、以後のデータ消去回数を減らすことが可能となり、ひいては、割当ブロックのリテンション特性の悪化を低減することが可能となる。
また、入替元ブロックと割当ブロックとの消去回数の差が閾値を超えている場合に、平準化処理を行うようにしている。これにより、平準化を頻繁に行わずに、平準化の回数を最適化でき、かつブロックごとの消去回数を揃えることが可能となる。この結果、一部のブロックの消去回数が増えることでNAND型フラッシュメモリ10全体の寿命が短くなるのを防ぐことができる。
[第2の実施形態]
第2の実施形態は、割当ブロック選択部32による割当ブロック選択処理の他の例について示しており、割当ブロックを選択する際に、消去時期が古く、かつ消去回数が少ないブロックを割当ブロックとして選択するようにしている。
図19は、第2の実施形態に係る割当ブロック選択部32の構成を示すブロック図である。図20は、割当ブロック選択部32による割当ブロック選択処理を示すフローチャートである。なお、NANDコントローラ11のうち割当ブロック選択部32以外の構成は、第1の実施形態と同じである。
割当ブロック選択部32は、3個のセレクタ32A〜32C、及び割当ブロック設定値を格納する記憶部32Dを備えている。割当ブロック選択部32は、ブロック制御部30から全ブロック情報を受ける(ステップS90)。この全ブロック情報は、セレクタ32Aに送られる。続いて、セレクタ32Aは、全ブロックの状態を確認し、全ブロックのうち空き状態のブロックを抽出する(ステップS91)。そして、セレクタ32Aは、空き状態のブロックに対応するブロック情報(空き状態ブロック情報)をセレクタ32Bに送る。
続いて、セレクタ32Bは、空き状態ブロック情報のうち割当ブロック設定値により設定された条件のブロック情報を抽出する(ステップS92)。ここで、割当ブロック設定値には、
(A)消去時期の最も古い方から一定数のブロック
(B)消去時期の最も古い方から一定割合数のブロック
(C)消去時期が一定時期より古いブロック
のいずれかが設定されている。条件(A)〜(C)のいずれを割当ブロック設定値として使用するのかは、任意に選択することができる。例えば、割当ブロック設定値として条件(A)を用いる場合、セレクタ32Bは、空き状態のブロックのうち、消去時期の最も古い方から一定数のブロックを抽出する。そして、セレクタ32Bは、抽出したブロックに対応するブロック情報をセレクタ32Cに送る。
条件(A)及び(B)は、空き状態のブロックを消去時期順にソートし、古い方から一定数/一定割合のブロックを探索する。従って、ステップS92において選択されるブロック数を多くすることができるため、ステップS93においてより消去回数が少ないブロックを選択する確率を高くすることが可能となる。条件(C)は、消去時期が一定時期を超えた空き状態のブロックのみをソートすればよいので、処理負荷が最も少ない。また、条件(A)及び(B)は、消去時期の古いほうから常に一定数/一定割合のブロックを抽出するのに対し、条件(C)では、消去時期が一定期間以上空いたブロックが抽出される。このため、条件(C)は、消去間隔を必ず一定間隔空けることができ、その分、消去回数の比較候補を少なくすることが可能となる。
続いて、セレクタ32Cは、セレクタ32Bにより抽出されたブロックのうち消去回数が最も少ないブロックを割当ブロックとして選択する(ステップS93)。この割当ブロックに対応する割当ブロック番号は、ブロック制御部30に送られる。また、この割当ブロックに対応する割当ブロック情報は、平準化部35に送られる。
以上詳述したように本実施形態によれば、外部から供給されたデータを書き込む割当ブロックを選択する際に、空き状態のブロックのうちで、消去時期が古く、かつ消去回数が少ないブロックを割当ブロックとして選択することが可能となる。これにより、リテンション特性がより良いブロックに外部からのデータを書き込むことができるため、NAND型フラッシュメモリ10の寿命を長くすることが可能となる。
[第3の実施形態]
第3の実施形態は、入替元ブロック選択部33による入替元ブロック選択処理の他の例について示しており、入替元ブロックを選択する際に、消去時期が古く、かつ消去回数が少ないブロックを入替元ブロックとして選択するようにしている。
図21は、第3の実施形態に係る入替元ブロック選択部33の構成を示すブロック図である。図22は、入替元ブロック選択部33による入替元ブロック選択処理を示すフローチャートである。
入替元ブロック選択部33は、3個のセレクタ33A〜33C、及び入替元ブロック設定値を格納する記憶部33Dを備えている。入替元ブロック選択部33は、ブロック制御部30から全ブロック情報を受ける(ステップS100)。この全ブロック情報は、セレクタ33Aに送られる。続いて、セレクタ33Aは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する(ステップS101)。そして、セレクタ33Aは、使用中状態のブロックに対応するブロック情報(使用中状態ブロック情報)をセレクタ33Bに送る。
続いて、セレクタ33Bは、使用中状態ブロック情報のうち入替元ブロック設定値により設定された条件のブロック情報を抽出する(ステップS102)。ここで、入替元ブロック設定値には、
(A)消去時期の最も古い方から一定数のブロック
(B)消去時期の最も古い方から一定割合数のブロック
(C)消去時期が一定時期より古いブロック
のいずれかが設定されている。条件(A)〜(C)のいずれを入替元ブロック設定値として使用するのかは、任意に選択することができる。例えば、入替元ブロック設定値として条件(A)を用いる場合、セレクタ33Bは、使用中状態のブロックのうち、消去時期の最も古い方から一定数のブロックを抽出する。そして、セレクタ33Bは、抽出したブロックに対応するブロック情報をセレクタ33Cに送る。
条件(A)及び(B)は、空き状態のブロックを消去時期順にソートし、古い方から一定数/一定割合のブロックを探索する。従って、ステップS102において選択されるブロック数を多くすることができるため、ステップS103においてより消去回数が少ないブロックを選択する確率を高くすることが可能となる。条件(C)は、消去時期が一定時期を超えた空き状態のブロックのみをソートすればよいので、処理負荷が最も少ない。また、条件(A)及び(B)は、消去時期の古いほうから常に一定数/一定割合のブロックを抽出するのに対し、条件(C)では、消去時期が一定期間以上空いたブロックが抽出される。このため、条件(C)は、消去間隔を必ず一定間隔空けることができ、その分、消去回数の比較候補を少なくすることが可能となる。
続いて、セレクタ33Cは、セレクタ33Bにより抽出されたブロックのうち消去回数が最も少ないブロックを入替元ブロックとして選択する(ステップS103)。この入替元ブロックに対応する入替元ブロック情報は、平準化部35に送られる。
以上詳述したように本実施形態によれば、平準化時に使用される入替元ブロックを選択する際に、使用中状態のブロックのうちで、消去時期が古く、かつ消去回数が少ないブロックを入替元ブロックとして選択することが可能となる。これにより、頻繁に書き換えられていないデータを格納した、リテンション特性の良いブロックを入替元ブロックとして選択することができるため、結果として、NAND型フラッシュメモリ10の寿命を長くすることが可能となる。
[第4の実施形態]
第4の実施形態は、短期書き換え検出処理の他の実施例について示しており、短期書き換え検出処理を二分探索法を用いて行うようにしている。
図23は、第4の実施形態に係る短期書き換え検出部34の構成を示すブロック図である。短期書き換え検出部34は、セレクタ34A、整列部34B、探索リスト34C、判定部34D、集中係数閾値を格納する記憶部34E、及び情報出力部34Fを備えている。
判定部34Dは、探索リスト34Cの中で、二分探索法を用いて探索対象ブロックを選択する。そして、この探索対象ブロックに対して、短期書き換え検出に使用される集中係数を算出し、この集中係数が集中係数閾値を超えているか否かを判定する。この判定結果に基づいて探索リスト34Cからブロックを除外していき、探索リスト34Cの中のブロックを1個の探索対象ブロックに絞り込む。そして、最後に残った探索対象ブロックを用いて、消去時期が急激に変化する境界を探索する。
記憶部34Eに格納される集中係数閾値は、頻繁に書き換えが行われているブロックの範囲を特定するために使用され、また、NAND型フラッシュメモリ10の寿命(或いは、データリテンション期間)をどの程度延ばすかという基準に基づいて設定される。集中係数閾値を低くすると短期書き換え検出の可能性が上がり、一方、集中係数閾値を高くすると短期書き換え検出の可能性が下がる。
図24及び図25は、短期書き換え検出部34による短期書き換え検出処理を示すフローチャートである。
まず、短期書き換え検出部34は、ブロック制御部30から全ブロック情報を受ける(ステップS110)。この全ブロック情報は、セレクタ34Aに送られる。続いて、セレクタ34Aは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する(ステップS111)。そして、セレクタ34Aは、使用中状態のブロックに対応するブロック情報(使用中状態ブロック情報)を整列部34Bに送る。
続いて、整列部34Bは、使用中状態ブロック情報に含まれる消去時期を確認し、使用中状態のブロックを消去時期順にソートする(ステップS112)。そして、整列部34Bによりソートされたブロック情報は、探索リスト34Cに入れられると共に、消去時期が新しいブロックから順にリスト番号が付与される。
続いて、判定部34Dは、探索リスト34Cの中で、消去時期が最も新しいブロックを“start”、消去時期が最も古いブロックを“end”に設定する(ステップS113)。続いて、判定部34Dは、リスト番号が“(start+end)/2”であるブロックを探索対象ブロックとして選択する(ステップS114)。
続いて、判定部34Dは、探索対象ブロックに対して集中係数を算出する(ステップS115)。この集中係数は、次式で与えられる。
集中係数=現在時刻−リスト番号−消去時期
なお、集中係数の算出に使用される現在時刻は、例えば、消去時期計測部31から短期書き換え検出部34に供給される。現在時刻としては、例えば、消去回数カウンタ31Aのカウント値を用いればよい。
続いて、判定部34Dは、上記算出した集中係数が、集中係数閾値を超えているか否かを判定する(ステップS116)。集中係数閾値を超えている場合、判定部34Dは、検索対象ブロックを“end”に設定する(ステップS117)。続いて、判定部34Dは、“end”より消去時期が古いブロックを探索リスト34Cから除外する(ステップS117)。
一方、ステップS116において集中係数閾値を超えていないと判定された場合、判定部34Dは、検索対象ブロックの次に消去時期が古いブロックを“start”に設定する(ステップS119)。続いて、判定部34Dは、“start”より消去時期が新しいブロックを探索リスト34Cから除外する(ステップS120)。
ステップS118或いはステップS120において探索リスト34Cから所定のブロックが除外された後、判定部34Dは、探索リスト34Cに2個以上のブロックが残っているか否かを判定する(ステップS121)。探索リスト34Cに2個以上のブロックが残っている場合、ステップS114に戻って、再度、探索対象ブロックの選択を行う。
ステップS121において探索リスト34Cに2個以上のブロックが残っていないと判定された場合、判定部34Dは、探索リスト34Cに最後に残っているブロックを探索対象ブロックとして選択する。そして、この探索対象ブロックに対して集中係数(=現在時刻−リスト番号−消去時期)を算出する(ステップS122)。
続いて、判定部34Dは、上記算出した集中係数が、集中係数閾値を超えているか否かを判定する(ステップS123)。集中係数閾値を超えている場合、判定部34Dは、探索対象ブロック番号を情報出力部34Fに送る。情報出力部34Fは、この探索対象ブロック番号を用いて、全ブロックのうち探索対象ブロックより消去時期が新しいブロックの範囲を算出する(ステップS124)。そして、情報出力部34Fは、上記範囲を短期書き換え情報としてブロック制御部30に送る。短期書き換え情報を受けて、ブロック制御部30では、短期書き換え情報に含まれるブロックに対応する短期書き換えフラグを立て、その他のブロックに対応する短期書き換えフラグはクリアする。
ステップS123において集中係数閾値を超えていないと判定された場合、短期書き換えが行われたブロックを検出できないと判断し、短期書き換え検出処理を終了する。
図26は、短期書き換え検出部34による短期書き換え検出処理の具体例を説明する図である。NAND型フラッシュメモリ10に含まれるブロックが12個(ブロック♯0〜11)であり、このうち、ブロック#0〜7が探索リスト34Cに含まれる使用中状態のブロックであり、ブロック#8〜11が空き状態であるものとする。ブロック#0〜7は、消去時期が新しい順にソートされている。ブロックごとの消去時期は、図に示した通りである。探索リスト34Cに含まれるブロック#0〜7は、消去時期の新しい方からリスト番号が付与されている。
まず、探索リスト34Cの中で、消去時期が最も新しいブロック#0を“start”、消去時期が最も古いブロック#7を“end”に設定する。続いて、リスト番号が“(start+end)/2”であるブロック#3が探索対象ブロックとして選択され、探索対象ブロック#3に対して集中係数(=現在時刻−リスト番号−消去時期)を計算し、この集中係数が集中係数閾値を越えているか否かを判定する。ここで、現在時刻が“106”、集中係数閾値が“90”であるものとする。探索対象ブロック#3の集中係数は“97”であり、これは閾値を超えている。よって、探索対象ブロック#3が“end”に設定され、ブロック#3より消去時期が古いブロック#4〜7は、探索リスト34Cから除外される。
続いて、リスト番号が“(start+end)/2”であるブロック#1が探索対象ブロックとして選択され、探索対象ブロック#1に対して集中係数を計算する。探索対象ブロック#1の集中係数は“0”であり、これは閾値を超えていない。よって、探索対象ブロック#1の次に消去時期が古いブロック#2が“start”に設定され、ブロック#2より消去時期が新しいブロック#0、1は、探索リスト34Cから除外される。
続いて、リスト番号が“(start+end)/2”であるブロック#2が探索対象ブロックとして選択され、探索対象ブロック#2に対して集中係数を計算する。探索対象ブロック#2の集中係数は“97”であり、これは閾値を超えている。よって、探索対象ブロック#2が“end”に設定され、ブロック#2より消去時期が古いブロック#3は、探索リスト34Cから除外される。
続いて、最後に探索リスト34Cに残ったブロック#2が探索対象ブロックとして選択され、探索対象ブロック#2に対して集中係数を計算する。探索対象ブロック#2の集中係数は閾値を超えている。よって、探索対象ブロック#2の番号が、判定部34Dから情報出力部34Fに送られる。
情報出力部34Fでは、空き状態ブロックを含む全ブロックのうち、消去時期が探索対象ブロック#2より新しいブロック#0、1、8〜11を算出する。そして、情報出力部34Fは、ブロック#0、1、8〜11を短期書き換え情報として、ブロック制御部30に送る。これに対し、ブロック制御部30では、ブロック#0、1、8〜11に対応する短期書き換えフラグを立て、その他のブロックに対応する短期書き換えフラグはクリアする。このようにして、ブロックテーブル30Bの情報が更新される。
以上詳述したように本実施形態によれば、短期書き換え検出部34によって頻繁に書き換えが行われているブロックを特定することができる。さらに、短期書き換え検出処理において、“log2N”回の閾値チェックで探索が終わるため、短期書き換え検出の効率を向上させることができる。
[第5の実施形態]
第5の実施形態では、エラー訂正回路(ECC(Error Check and Correct)回路)をNANDコントローラ11が備え、データの読み出し時に、ECC回路によってエラーの検出及び訂正を行う。一般的に、誤り数は、データの書き込みから時間が経過するにつれて増加する傾向がある。よって、誤り数が多いブロックは、消去時期が古いブロックであるとも言える。そこで、本実施形態では、ECC回路による誤り数を入替元ブロック選択の指標にするようにしている。
図27は、第5の実施形態に係るNANDコントローラ11の構成の一例を示すブロック図である。NANDコントローラ11は、ECC回路36を備えている。ECC回路36は、NAND型フラッシュメモリ10からデータを読み出す際に、エラーの検出及び訂正を行う。さらに、ECC回路36は、ブロックごとに、エラーの検出時に検出した誤り数をブロック制御部30に送る。
図28は、ブロック制御部30の構成を示すブロック図である。ブロック制御部30に含まれるブロックテーブル30Bは、ブロック番号ごとに、誤り数を格納する。ブロックテーブル30Bに含まれる誤り数は、NAND型フラッシュメモリ10からのデータ読み出しごとに(ECC回路36によるエラー訂正ごとに)、更新される。
次に、NANDコントローラ11の読み出し動作について説明する。図29は、NANDコントローラ11による読み出し動作を示すフローチャートである。
まず、NANDコントローラ11は、CPU2から読出要求を受けることで、読み出し動作を開始する(ステップS130)。続いて、ブロック制御部30は、アドレステーブル30Aを用いて、読出要求のアドレスを含むアドレス領域に対応するブロック番号を検索する(ステップS131)。
続いて、ブロック制御部30は、読出要求のブロックからデータを読み出す(ステップS132)。すなわち、ブロック制御部30は、NANDインターフェース回路25に読出要求を発行する。この読出要求に基づいて、NANDインターフェース回路25は、NAND型フラッシュメモリ10に、読出要求のブロックからデータを読み出すように指示する。
続いて、ECC回路36は、NAND型フラッシュメモリ10から読み出されたデータに対して、エラーの検出及び訂正を行う(ステップS133)。エラー訂正された読み出しデータは、データバス6を介してCPU2等に送られる。このエラー訂正の際、ECC回路36は、誤り数を算出し、この誤り数をブロック制御部30に送る。ECC回路36から誤り数を受けて、ブロック制御部30は、この誤り数をブロックテーブル30Bに記録する。このようにして、ブロックテーブル30Bに含まれる誤り数が更新される。
次に、入替元ブロック選択部33による入替元ブロック選択処理について説明する。図30は、入替元ブロック選択部33による入替元ブロック選択処理を示すフローチャートである。なお、入替元ブロック選択部33の構成は、図21と同じである。
入替元ブロック選択部33は、ブロック制御部30から全ブロック情報を受ける(ステップS140)。この全ブロック情報は、セレクタ33Aに送られる。続いて、セレクタ33Aは、全ブロックの状態を確認し、全ブロックのうち使用中状態のブロックを抽出する(ステップS141)。そして、セレクタ33Aは、使用中状態のブロックに対応するブロック情報(使用中状態ブロック情報)をセレクタ33Bに送る。
続いて、セレクタ33Bは、使用中状態ブロック情報のうち入替元ブロック設定値により設定された条件のブロック情報を抽出する(ステップS142)。ここで、入替元ブロック設定値には、「誤り数が一定数より多いブロック」が設定されている。
続いて、セレクタ33Cは、セレクタ33Bにより抽出されたブロックのうち消去回数が最も少ないブロックを入替元ブロックとして選択する(ステップS143)。この入替元ブロックに対応する入替元ブロック情報は、平準化部35に送られる。
以上詳述したように本実施形態によれば、メモリシステム1の書き込み処理において、短期的に書き換えが集中したブロックを、一度書き込みで割り当られたまま長い期間解放されないブロックと入れ替えることができる。これにより、消去時期の間隔が短いことによるブロックの消耗を抑え、ブロックの消耗をNAND型フラッシュメモリ10全体で平均化することができる。
さらに、入替元ブロックとして、ECCによる誤り数が多いブロックが選択される。これにより、誤り数が多いブロックのデータが書き直されるため、平準化処理と同時にリフレッシュ処理(NAND型フラッシュメモリ10に記憶してあるデータを読み出してエラー訂正を行った後に、再びNAND型フラッシュメモリ10に書き戻す)を行うことにもなる。この結果、リフレッシュ処理の回数を低減することができるため、リフレッシュに伴うデータ書き込み量を削減する効果も得られる。
[実施例]
上記各実施形態のメモリシステム1をSSD(Solid State Drive)として構成した場合の実施例について説明する。図31は、SSD100の構成を示すブロック図である。
SSD100は、データ保存用の複数のNAND型フラッシュメモリ(NANDメモリ)10、データ転送用又は作業領域用のDRAM101、これらを制御するドライブ制御回路102、及び電源回路103を備えている。ドライブ制御回路102は、SSD100の外部に設けられる状態表示用LEDを制御するための制御信号を出力する。なお、DRAM101に代えて、FeRAM(ferroelectric random access memory)を用いてもよい。
SSD100は、ATAインターフェース(ATA I/F)を介して、パーソナルコンピュータ等のホスト装置との間でデータを送受信する。また、SSD100は、RS232Cインターフェース(RS232C I/F)を介して、デバッグ用機器との間でデータを送受信する。
電源回路103は、外部電源を受け、この外部電源を用いて複数の内部電源を生成する。これらの内部電源は、SSD100内の各部に供給される。また、電源回路103は、外部電源の立ち上がりを検知して、パワーオンリセット信号を生成する。パワーオンリセット信号は、ドライブ制御回路102に送られる。
図32は、ドライブ制御回路102の構成を示すブロック図である。ドライブ制御回路102は、データアクセス用バス104、第1の回路制御用バス105、及び第2の回路制御用バス106を備えている。
第1の回路制御用バス105には、ドライブ制御回路102全体を制御するプロセッサ107が接続されている。また、第1の回路制御用バス105には、各管理プログラム(FW:firmware)のブート用プログラムが格納されたブートROM108がROMコントローラ109を介して接続されている。また、第1の回路制御用バス105には、電源回路103からのパワーオンリセット信号を受けて、リセット信号及びクロック信号を各部に供給するクロックコントローラ110が接続されている。
第2の回路制御用バス106は、第1の回路制御用バス105に接続されている。第2の回路制御用バス106には、状態表示用LEDにステータス表示用信号を供給するパラレルIO(PIO)回路111、RS232Cインターフェースを制御するシリアルIO(SIO)回路112が接続されている。
ATAインターフェースコントローラ(ATAコントローラ)113、第1のECC(Error Check and Correct)回路114、NANDコントローラ115、及びDRAMコントローラ119は、データアクセス用バス104と第1の回路制御用バス105との両方に接続されている。ATAコントローラ113は、ATAインターフェースを介してホスト装置との間でデータを送受信する。データアクセス用バス104には、データ作業領域として使用されるSRAM120がSRAMコントローラ121を介して接続されている。
NANDコントローラ115は、4つのNANDメモリ10とのインターフェース処理を行うNANDインターフェース回路(NAND I/F)118、第2のECC回路117、及びNANDメモリ−DRAM間のアクセス制御を行うDMA転送制御用DMAコントローラ116を備えている。
図33は、プロセッサ107の構成を示すブロック図である。プロセッサ107は、データ管理部122、ATAコマンド処理部123、セキュリティ管理部124、ブートローダ125、初期化管理部126、デバッグサポート部127を備えている。
データ管理部122は、NANDコントローラ115、第1のECC回路114を介して、NANDメモリ−DRAM間のデータ転送、NANDチップに関する各種機能を制御する。
ATAコマンド処理部123は、ATAコントローラ113、及びDRAMコントローラ119を介して、データ管理部122と協働してデータ転送処理を行う。セキュリティ管理部124は、データ管理部122及びATAコマンド処理部123と協働して各種のセキュリティ情報を管理する。ブートローダ125は、パワーオン時、各管理プログラム(FW)をNANDメモリ10からSRAM120にロードする。
初期化管理部126は、ドライブ制御回路102内の各コントローラ/回路の初期化を行う。デバッグサポート部127は、外部からRS232Cインターフェースを介して供給されたデバッグ用データを処理する。
図34は、SSD100を搭載したポータブルコンピュータ200の一例を示す斜視図である。ポータブルコンピュータ200は、本体201、及び表示ユニット202を備えている。表示ユニット202は、ディスプレイハウジング203と、このディスプレイハウジング203に収容された表示装置204とを備えている。
本体201は、筐体205と、キーボード206と、ポインティングデバイスであるタッチパッド207とを備えている。筐体205内部には、メイン回路基板、ODD(optical disk device)ユニット、カードスロット、及びSSD100等が収容されている。
カードスロットは、筐体205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部208が設けられている。ユーザは、この開口部208を通じて筐体205の外部から追加デバイスをカードスロットに挿抜することが可能である。
SSD100は、従来のHDDの置き換えとして、ポータブルコンピュータ200内部に実装された状態として使用してもよいし、ポータブルコンピュータ200が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
なお、上記各実施形態のメモリシステム1は、SSDに限らず、例えば、SDTMカードに代表されるメモリカードとして構成することも可能である。メモリシステム1をメモリカードとして構成する場合、ポータブルコンピュータに限らず、携帯電話、PDA、デジタルスチルカメラ、デジタルビデオカメラ等、各種電子機器に対して適用可能である。
本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲内で、構成要素を変形して具体化できる。また、実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成することができる。例えば、実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。