説明

メモリコントローラ

【課題】半導体メモリを効率的に利用可能なメモリコントローラを提供すること。
【解決手段】実施形態のメモリコントローラ20は、第1インターフェイス21と、第2インターフェイス23と、制御部24とを備える。第1インターフェイス21は、ホスト10との間で信号を送受信する。第2インターフェイス23は、不揮発性の半導体メモリ30との間で信号を送受信する。制御部24は、第1インターフェイス21で受信した第1コマンドに応答して半導体メモリ30に予備領域を確保し、半導体メモリ30に保持されるデータの更新時には予備領域に更新データを書き込む。予備領域のサイズは、第1コマンドに応じて可変である。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態はメモリコントローラに関する。
【背景技術】
【0002】
NAND型フラッシュメモリでは、データの書き換え可能回数を高めるために、種々の研究が為されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国出願公開2009/0089491号
【発明の概要】
【発明が解決しようとする課題】
【0004】
半導体メモリを効率的に利用可能なメモリコントローラを提供する。
【課題を解決するための手段】
【0005】
実施形態のメモリコントローラは、第1インターフェイスと、第2インターフェイスと、制御部とを備える。第1インターフェイスは、ホストとの間で信号を送受信する。第2インターフェイスは、不揮発性の半導体メモリとの間で信号を送受信する。制御部は、第1インターフェイスで受信した第1コマンドに応答して半導体メモリに予備領域を確保し、半導体メモリに保持されるデータの更新時には、予備領域に更新データを書き込む。予備領域のサイズは、第1コマンドに応じて可変である。
【図面の簡単な説明】
【0006】
【図1】第1実施形態に係るメモリシステムのブロック図。
【図2】第1実施形態に係るメモリ空間の概念図。
【図3】第1実施形態に係るメモリ空間の概念図。
【図4】第1実施形態に係るメモリコントローラの動作を示すフローチャート。
【図5】第1実施形態に係るメモリ空間の概念図。
【図6】第1実施形態の第2変形例に係る耐用回数テーブルの概念図。
【図7】第1実施形態の第2変形例に係るメモリコントローラの動作を示すフローチャート。
【図8】第2実施形態に係る書き込み回数テーブルの概念図。
【図9】第2実施形態に係るメモリコントローラの動作を示すフローチャート。
【図10】第3実施形態に係るメモリ空間の概念図。
【図11】第4実施形態に係るメモリコントローラの動作を示すフローチャート。
【図12】第4実施形態に係るメモリ空間の概念図。
【図13】第4実施形態に係るメモリ空間の概念図。
【発明を実施するための形態】
【0007】
以下、実施形態につき図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【0008】
[第1実施形態]
第1実施形態に係るメモリコントローラについて説明する。以下では、NAND型フラッシュメモリを制御するメモリコントローラを例に挙げて説明する。
【0009】
1.メモリシステムの構成について
1.1 メモリシステムの全体構成について
まず、本実施形態に係るメモリコントローラを含むメモリシステムの構成について説明する。
【0010】
図示するようにメモリシステム1は、ホスト機器10、メモリコントローラ20、及びNAND型フラッシュメモリ30を備えている。
【0011】
ホスト機器10は、メモリコントローラ20に対して命令を与えることでNAND型フラッシュメモリ30にアクセスする。そして、メモリコントローラ20を介して、NAND型フラッシュメモリ30にデータを書き込み、NAND型フラッシュメモリ30からデータを読み出し、またはNAND型フラッシュメモリ30のデータを消去する。ホスト機器10は、例えばパーソナルコンピュータ、デジタルカメラ、または携帯電話等である。
【0012】
メモリコントローラ20は、ホスト機器10からの命令に応答して、NAND型フラッシュメモリ30に対して読み出し、書き込み、消去を命令する。また、NAND型フラッシュメモリ30のメモリ空間を管理する。
【0013】
NAND型フラッシュメモリ30は、不揮発にデータを保持する。NAND型フラッシュメモリは複数のメモリセルを備え、メモリセルの各々は、電荷蓄積層と制御ゲートが積層されたゲートを有し、データを不揮発に保持する。そしてNAND型フラッシュメモリ30では、複数のメモリセルの集合であるブロック単位でデータが消去される。
【0014】
メモリコントローラ20とNAND型フラッシュメモリ30は、同一の製品内に含まれても良く、その例としてはSDTMカードのようなメモリカードや、SSD(solid state drive)等が挙げられる。
【0015】
1.2 メモリコントローラ20の構成について
次に、上記のメモリコントローラ20の構成について、引き続き図1を用いて説明する。図示するようにメモリコントローラ20は、ホストインターフェイス回路21、内蔵メモリ22、メモリインターフェイス回路23、及びプロセッサ(CPU)24を備えている。
【0016】
ホストインターフェイス回路21は、ホストインターフェイスを介してホスト機器10と接続され、ホスト機器10との通信を司る。そして、ホスト機器10から受信した命令及びデータを、それぞれCPU24及び内蔵メモリ22に転送する。またCPU24の命令に応答して、内蔵メモリ22内のデータをホスト機器10へ転送する。
【0017】
内蔵メモリ22は、例えばNOR型フラッシュメモリDRAM等の半導体メモリであり、ホストインターフェイス回路21及びメモリインターフェイス回路23から転送されるデータを一時的に保持する。また、NAND型フラッシュメモリ30を管理するために必要な情報等(ファームウェアや各種のテーブル)を保持する。
【0018】
CPU24は、メモリコントローラ20全体の動作を制御する。例えばホスト機器から書き込み命令を受信した際には、それに従ってメモリインターフェイス(本例ではNANDインターフェイス)に従った書き込み命令を発行する。読み出し及び消去の際も同様である。またCPU24は、ウェアレベリング等、NAND型フラッシュメモリ30を管理するための様々な処理を実行する。
【0019】
メモリインターフェイス回路23は、メモリインターフェイスを介してNAND型フラッシュメモリ30と接続され、NAND型フラッシュメモリ30との通信を司る。そして、CPU24から受信した命令をNAND型フラッシュメモリ30に転送し、また書き込み時には内蔵メモリ22内の書き込みデータをNAND型フラッシュメモリ30へ転送する。更に読み出し時には、NAND型フラッシュメモリ30から読み出されたデータを内蔵メモリ22へ転送する。
【0020】
1.3 NAND型フラッシュメモリ30の管理について
次に、上記構成のメモリコントローラ20によるNAND型フラッシュメモリ30の管理について説明する。
【0021】
1.3.1 通常の管理について
図2は、ホスト機器10からNAND型フラッシュメモリ30を見たメモリ空間(論理アドレス空間)と、NAND型フラッシュメモリのブロック(論理アドレス空間と対比して「物理ブロック」と呼ぶ)との関係を示す模式図である。
【0022】
ホスト機器10は、論理アドレスを用いてNAND型フラッシュメモリ30にアクセスする。NAND型フラッシュメモリ30内の物理ブロック(または物理アドレス)は、それぞれ論理アドレスに対応付けられている。論理アドレスと物理ブロックとの対応は、データが更新される際等、頻繁に変更される。従ってCPU24は、この論理アドレスと物理ブロックとの対応関係を、テーブルを用いて管理している。このテーブルを、以下アドレス変換テーブルと呼ぶ。アドレス変換テーブルは、例えば内蔵メモリ22及びNAND型フラッシュメモリ30に保持される。
【0023】
図2の例では、NAND型フラッシュメモリ30が88個の物理ブロックBLK(BLK0〜BLK87)を有する場合について示している。もちろん、この数は一例に過ぎず、任意である。また図2の例では、論理アドレスが0x0000から始まる論理アドレス空間が8個の物理ブロックBLK0〜BLK7に対応し、論理アドレスが0x1000から始まる論理アドレス空間が8個の物理ブロックBLK8〜BLK15に対応している。もちろん、この対応関係も一例に過ぎない。
【0024】
メモリコントローラ20のCPU24は、88個の物理ブロックBLKを、使用ブロックと予備ブロックとに分けて管理する。図2の例では、物理ブロックBLK0〜BLK79が使用ブロックであり、物理ブロックBLK80〜BLK87が予備ブロックである。
【0025】
使用ブロックには論理アドレスが割り当てられている。従って使用ブロックは、ホスト機器10によってアクセス可能な領域であり、ホスト機器10の命令によってデータの書き込み、読み出し、及び消去が行われる。
【0026】
これに対して、予備ブロックには論理アドレスは割り当てられておらず、ホスト機器10は予備ブロックに対して直接アクセスすることは出来ない。予備ブロックは、使用ブロック内のデータを更新する際や、消去の際に使用されるブロックである。
【0027】
例えば、物理ブロックBLK0内のデータが更新される場合を考える。この場合、更新データはブロックBLK0では無くブロックBLK80に書き込まれる(この際、ブロックBLK0の更新対象では無いデータも一緒にブロックBLK80にコピーされる)。そして、物理ブロックBLK80に論理アドレスが割り当てられ使用ブロックとなる。また物理ブロックBLK0への論理アドレスの割り当てが解消される。つまり、それまで物理ブロックBLK0が関連付けられていた論理アドレス空間は、物理ブロックBLK80で置き換えられる。そして物理ブロックBLK0が予備ブロックとされる。その後、使用ブロックのいずれかのデータが更新される際には、同様にして予備ブロックBLK81、BLK82、…が順次使用される。
【0028】
CPU24は以上のようにNAND型フラッシュメモリ30を管理することで、特定の物理ブロックにのみアクセスが集中することを防止する。
【0029】
1.3.2 拡張エリアを設ける場合の管理について
メモリコントローラ20は、ホスト機器10の命令に従って、NAND型フラッシュメモリ30のメモリ空間に拡張エリアを設定することが出来る。拡張エリアとは、ある特定のメモリ空間につき、その他のメモリ空間とは異なる特性を持たせた領域のことであり、拡張エリアに対してより高い信頼性や高い性能を持たせたものである。以下では、拡張エリアとの区別のため、拡張エリアを除く領域を通常エリアと呼ぶことにする。
【0030】
拡張エリアの一例は、メモリセルに対してiビット(iは1以上の整数)のデータを書き込む領域であり、通常エリアの一例は、メモリセルに対して(i+1)ビットのデータを書き込む領域である。以下では、i=1の場合を例に説明する。すなわち、通常エリアのメモリセルは2ビット(4値)のデータを保持可能であり、拡張エリアのメモリセルは1ビット(2値)のデータを保持可能である。
【0031】
図3は、図2で説明したNAND型フラッシュメモリにおいて、物理ブロックBLK15を用いて拡張エリアを設定した場合について示している。
【0032】
図示するようにCPU24は、物理ブロックBLK15を拡張エリアに設定すると共に、この拡張エリア用の予備ブロックとして物理ブロックBLK0〜BLK7を確保する。もちろん、物理ブロックBLK0〜BLK7には、それが使用ブロックに置き換えられない限り、論理アドレスは割り当てられない。そしてCPU24は、物理ブロックBLK0〜BLK7、及びBLK15にはデータを2値で書き込み、その他の物理ブロックには4値で書き込む。なお、データを2値で書き込むことにより、4値で書き込む場合に比べて論理アドレス空間は半分になるが、本明細書の添付図面では、説明の簡略化のため、その点は無視して示してある。
【0033】
2.メモリシステムの動作について
次に、上記構成のメモリシステム1において、特に拡張エリアを設定する場合のメモリコントローラ20の動作について説明する。図4は、メモリコントローラ20の動作を示すフローチャートである。
【0034】
図示するように、まずメモリコントローラ20は、ホスト機器10からホストインターフェイスを介して送信された拡張エリア設定コマンドを、ホストインターフェイス回路21において受信する(ステップS10)。拡張エリア設定コマンドには、論理アドレスと論理サイズを示す情報が含まれている。この論理アドレスは、拡張エリアをとなる領域の、論理アドレス空間における先頭アドレスを示し、論理サイズは、拡張エリアの論理アドレス空間におけるサイズ(容量)を示す。
【0035】
するとCPU24は、拡張エリア設定コマンドによって指定される論理アドレスと論理サイズを、内蔵メモリ22に保持させる(ステップS11)。
【0036】
引き続きメモリコントローラ20は、ホスト機器10からホストインターフェイスを介して送信された耐用回数設定コマンドを、ホストインターフェイス回路21において受信する(ステップS12)。耐用回数設定コマンドは、ステップS10で受信した拡張エリア設定コマンドで設定される拡張エリアに対して要求される書き換え可能な最大回数(これを書き換え耐用回数と呼ぶ)を示す情報を含む。
【0037】
するとCPU24は、耐用回数設定コマンドによって指定される書き換え耐用回数を、内蔵メモリ22に保持させる(ステップS13)。
【0038】
次にCPU24は、内蔵メモリ22に保持された論理アドレス、論理サイズ、及びデータ書き換え耐用回数を満足させるために必要な、拡張エリア用の予備ブロック数を算出する(ステップS14)。この際、CPU24は、以下の(1)式に基づいて予備ブロック数Xを算出する。すなわち、
X=A(C−B)/B (1)
但し、Aは拡張エリアの使用ブロック数(論理サイズに比例する)であり、Bは物理ブロック1個あたりの書き換え耐用回数(以下、これを実力値と呼び、固定値である)であり、Cは拡張エリアに要求される書き換え耐用回数である。但し、C>Bである。
【0039】
そしてCPU24は、通常エリアの使用ブロックのうちの必要な数の物理ブロックを拡張エリアの使用ブロックに設定し、更にステップS14で算出された数の物理ブロックを拡張エリアの予備ブロックに設定する(ステップS15)。またこれにより論理アドレスと物理ブロックとの対応関係が変化するため、CPU24はアドレス変換テーブルを更新して、この対応関係の変化を反映させる。
【0040】
図5は、論理アドレス空間と物理ブロックとの関係を示す模式図であり、上記方法の具体例を示している。
【0041】
例えばステップS11によって指定される論理アドレスが物理ブロックBLK40に相当し、論理サイズが8個の物理ブロック分の容量に相当していたと仮定する。またステップS12で指定される書き換え耐用回数が5000回であったと仮定する。この5000回という数字は、8個の物理ブロック分の容量を有する拡張エリアにおいて、予備ブロックの使用を前提として物理ブロックあたりに要求される書き換え可能な最大回数である。更に、1個の物理ブロックにおいて書き換え可能な最大回数(実力値)は1000回であったとする。この実力値は、当然ながら予備ブロックの使用を前提としたものでは無く、各物理ブロックの正味の書き換え可能回数である。すると、ステップS14においてCPU24は、X=8・(5000−1000)/1000=32から、必要な予備ブロック数は32個であると決定する。
【0042】
これによりCPU24はステップS15において、8個の物理ブロックBLK40〜BLK47を拡張エリアの使用ブロックに設定し、32個の例えば物理ブロックBLK0〜BLK31を拡張エリアの予備ブロックに設定する。
【0043】
これにより、拡張エリアの8個の使用ブロックを32個の予備ブロックとの間で使い回すことで、物理ブロック8個分の拡張エリアに対して使用ブロックあたり5000回の書き換えを可能とする。言い換えれば、32個の予備ブロックを使うことで、物理ブロック8個分の拡張エリアで40,000回の書き換えを可能とする。
【0044】
3.本実施形態に係る効果
上記のように、本実施形態に係る構成であると、半導体メモリを効率的に利用出来る。以下、本効果につき詳細に説明する。
【0045】
NAND型フラッシュメモリを管理する際に、例えば2値で書き込む領域と4値で書き込む領域とを区別すると共に、重要な情報を2値で書き込むことによって、大容量を確保しつつ、重要なデータの信頼性を維持することが可能となる。
【0046】
またこの際、各領域に対して予備ブロックを設けて、使用ブロックと予備ブロックとの間でブロックを使い回すことで、特定の物理ブロックにアクセスが集中することを防止出来、拡張エリアの書き換え回数を十分に大きくすることが出来る。
【0047】
このような構成において本実施形態では、拡張エリアの予備ブロック数を可変にしている。より具体的には、ホスト機器10から要求された拡張エリアサイズと書き換え耐用回数に基づき、最適な予備ブロック数をCPU24が算出し、これを確保している。従って、拡張エリアサイズと書き換え耐用回数の両方の要求を満たすことが出来る。
【0048】
仮に、拡張エリアの予備ブロック数が一定であったとすると、このような効果は得られない。例えば予備ブロック数が常に8個であり、物理ブロックの書き換え可能な最大回数は1000回であったとする。
【0049】
すると、拡張エリアの使用ブロック数が8個であると、拡張エリアにおける総書き換え耐用回数は、
(8(使用ブロック数)+8(予備ブロック数))×1,000(書き換え耐用回数/ブロック)=16,000回
となり、1つの使用ブロック当たりに換算すると、
16,000回/8 (使用ブロック数)=2,000回
が書き換え耐用回数となる。また、拡張エリアの使用ブロック数が1個であると、拡張エリアにおける総書き換え耐用回数は、
(1(使用ブロック数)+8(予備ブロック数))×1,000(書き換え耐用回数/ブロック)=9,000回
となり、1つの使用ブロック当たりに換算すると、
9,000回/1 (使用ブロック数)=9,000回
となる。つまり、拡張エリアサイズによって書き換え耐用回数が変化し、使用ブロック数が多くなるほど書き換え耐用回数が小さくなる。従って、必要な書き換え耐用回数を満たせなくなるおそれがある。あるいは、逆に書き換え耐用回数が過剰になる場合があり得る。
【0050】
本実施形態では、拡張エリアサイズが大きくなるほど(すなわち拡張エリアの使用ブロック数が増えるほど)、そして要求される書き換え耐用回数が増えるほど、より多くの予備ブロックを確保する。その際には、過度に多くの予備ブロックを確保することはせず、最適な数の予備ブロックを確保する。従って、拡張エリアに要求される書き換え耐用回数を満足させることが出来ると共に、過剰に予備ブロックを確保して物理ブロックが無駄に使用されることも防止出来る。
【0051】
もちろん、予備ブロックを多くするほど、通常エリアの使用ブロックとして使える物理ブロック数は減少する。従って、CPU24は、予備ブロック数の最大数を設定し、この最大数以下の範囲内で予備ブロックを確保するようにしても良い。
【0052】
4.本実施形態の変形例
4.1 第1の変形例
上記実施形態では、メモリコントローラ20は、拡張エリア設定コマンドと耐用回数設定コマンドとを別個に受信する。しかしながら、これらは1つのコマンドにまとめて受信しても良い。つまり、1つのコマンドに、拡張エリアを設定する旨の命令、論理アドレス、論理サイズ、及び書き換え耐用回数が含まれている場合であっても良い。
【0053】
4.2 第2の変形例
また、上記実施形態では、メモリコントローラ20は耐用回数設定コマンドによってデータ書き換え耐用回数を受信する。しかし、書き換え耐用回数そのもので無くても、書き換え耐用回数を示す情報であれば良い。
【0054】
例えば、書き換え耐用回数そのものの代わりに、「多い」、「普通」、「少ない」等の書き換え回数レベル情報を用いても良い。このような場合、メモリコントローラ20は、例えば図6に示すような耐用回数テーブルを内蔵メモリ22に保持する。図示するように耐用回数テーブルは、各レベルに応じた書き換え耐用回数情報を保持する。この場合のメモリコントローラ20の動作を図7に示す。図示するように、ステップS12の後、CPU24は耐用回数テーブルを参照する(ステップS20)。そしてCPU24は、受信した書き換え回数レベルに基づいて、耐用回数テーブルから書き換え耐用回数を決定する(ステップS21)。その後、ステップS13の処理に進む。
【0055】
別の方法としては、書き換え耐用回数の代わりに、必要な書き換え耐用回数を確保するために必要な予備ブロック数が、耐用回数設定コマンドによって直接指定されても良い。
【0056】
4.3 第3の変形例
上記実施形態では、物理ブロック1個あたりの書き換え耐用回数の実力値Bが固定値である場合を例に説明した。この実力値Bは、例えば内蔵メモリ22に予め保持される。
【0057】
しかしながら、拡張エリア設定コマンド、耐用回数設定コマンド、またはその他のコマンドによって、ホスト機器10から実力値Bを受信し、受信した実力値Bを用いてCPU24が(1)式の計算を行っても良い。
【0058】
NAND型フラッシュメモリ30の実力値Bは、その世代によって変わる可能性がある。従って、ある実力値Bは、ある製品には適切であっても、別の製品では適切でないかもしれない。従って、最適な実力値Bをホスト機器10から受信することが好ましい。
【0059】
[第2実施形態]
次に、第2実施形態に係るメモリコントローラについて説明する。本実施形態は、上記第1実施形態またはその変形例において、書き換え回数がその上限(書き換え耐用回数)に達した際に、書き換えを禁止するものである。以下では、第1実施形態と異なる点についてのみ説明する。
【0060】
1.書き込み回数テーブルについて
本実施形態に係るメモリコントローラ20は、内蔵メモリに書き込み回数テーブルを保持する。図8は書き込み回数テーブルの概念図である。図示するように書き込み回数テーブルは、物理ブロックBLKj(jは自然数)毎に書き込み回数Njを保持する。そして、書き込みを実行するたびに、書き込み回数テーブルを更新する。
【0061】
2.メモリコントローラ20の動作について
図9は、ホスト機器10から書き込み命令を受信した際のメモリコントローラ20の動作を示すフローチャートである。
【0062】
図示するように、書き込み命令を受信すると(ステップS30)、CPU24は書き込み回数テーブルを参照する(ステップS31)。そして、書き込み対象となる物理ブロック(拡張エリアの使用ブロック)の書き込み回数が上限(書き換え耐用回数)に達しているか否かを判断する。達していなければ(ステップS32、NO)、書き込みを行って、書き込み回数テーブルを更新する(ステップS33)。他方、達していれば(ステップS32、YES)、CPU24は書き込みを禁止する(ステップS34)。そして書き込みエラーをホスト機器10に返す。
【0063】
3.本実施形態に係る効果
データの書き換えを繰り返すことにより書き込み回数が書き換え耐用回数に達した物理ブロックは、データの書き込みや保持についての信頼性が低下している可能性がある。従って、このような物理ブロックのデータ更新を禁止することで、書き換え失敗やデータの消失などが生じることを防止出来る。また、書き換え回数を制限することで、データのセキュリティ保持にも寄与出来る。
【0064】
なお、ステップS32で最初にYESと判断された際、書き換えテーブルの対応するエントリにフラグを立てるようにしても良い。そしてCPU24は、書き込みアクセスがあった際には、対応する物理ブロックのフラグを確認し、フラグが立っていれば書き換えを行わないようにしても良い。これによれば、毎回ステップS32の比較処理を行う必要が無い。
【0065】
[第3実施形態]
次に、第3実施形態に係るメモリコントローラについて説明する。本実施形態は、上記第1実施形態またはその変形例または第2実施形態において、拡張エリアを複数設けるものである。以下では、第1実施形態と異なる点についてのみ説明する。
【0066】
1.複数の拡張エリアの設定について
図4で説明した処理を複数回行うことで、拡張エリアが複数設けられる。図10は、そのような場合の論理アドレス空間と物理ブロックとの関係を示す模式図である。
【0067】
図示するように、図5と同様にまず8個の物理ブロックBLK32〜BLK39が拡張エリアの使用ブロックとして設定され、32個の物理ブロックBLK0〜BLK31がこの拡張エリアの予備ブロックとして設定されている。
【0068】
この状態で、更に拡張エリア設定コマンドと耐用回数設定コマンドを受信することで、物理ブロックBLK71を拡張エリアの使用ブロックとして設定し、8個の物理ブロックBLK72〜BLK79をこの拡張エリアの予備ブロックとして設定する。
【0069】
この場合、8個の物理ブロックBLK32〜BLK39(及び32個の予備ブロック)で構成される拡張エリアの書き換え耐用回数は40,000回(5,000回/ブロック)であり、1個の物理ブロックBLK71(及び8個の予備ブロック)で構成される拡張エリアの書き換え耐用回数は7,000回(7,000回/ブロック)となる。
【0070】
2.本実施形態に係る効果
以上のように、本実施形態によれば複数の拡張エリアを設定することが可能であり、また拡張エリア毎に書き換え耐用回数を任意に設定出来る。
【0071】
[第4実施形態]
次に、第4実施形態に係るメモリコントローラについて説明する。本実施形態は、上記第1実施形態またはその変形例または第2、第3実施形態において、拡張エリアに必要となる書き換え耐用回数が、物理ブロックの実力値より小さい場合に関する。
【0072】
1.メモリコントローラ20の動作について
データの書き込み時におけるメモリコントローラ20の動作について、図11を用いて説明する。図11は、メモリコントローラ20の動作を示すフローチャートである。
【0073】
図示するように、図9で説明したステップS30の後、書き込み対象エリアが拡張エリアであった場合、CPU24は、拡張エリアの使用ブロック毎に必要な書き換え耐用回数と実力値とを比較する(ステップS40)。耐用回数<実力値であれば(ステップS40、YES)、CPU24は書き込み回数テーブルを参照する(ステップS41)。そして書き込み回数テーブルに基づいてCPU24は、書き込み対象エリアの拡張ブロックの書き込み回数が、既に書き換え耐用回数に達しているか、あるいは書き換え耐用回数間近であるかを確認する(ステップS42)。書き換え耐用回数間近であるか否かを判断する場合には、メモリコントローラ20は所定の閾値を内蔵メモリ22に保持し、CPU24がこの閾値と書き込み回数とを比較すれば良い。そして閾値を超えている場合には、耐用回数間近であると判断出来る。
【0074】
拡張エリアの書き込み回数が既に書き換え耐用回数に達している場合、あるいは書き換え耐用回数間近である場合(ステップS42、YES)、CPU24は書き込み回数テーブルを参照する(ステップS43)。そして書き込み回数テーブルに基づいてCPU24は、通常エリア、または別の拡張エリアの使用ブロック(もしあれば)において、書き込み回数が実力値間近である物理ブロックがあるか否かを判断する(ステップS44)。この判断も、メモリコントローラ20が所定の閾値を内蔵メモリ22に保持し、CPU24がこの閾値と書き込み回数とを比較し、閾値を超えている場合に実力値間近であると判断出来る。
【0075】
実力値間近の物理ブロックが存在すれば(ステップS44、YES)、CPU24は、この実力値間近の物理ブロックと、書き換え耐用回数間近の拡張エリアの使用ブロック及び/または予備ブロックの一部または全てと入れ替える(ステップS45)。その後、ステップS33の処理に進む。
【0076】
上記の具体例を、図12及び図13を用いて説明する。図12及び図13は、論理アドレス空間と物理ブロックとの関係を示す模式図である。
【0077】
図12の例では、物理ブロックBLK8〜BLK15が拡張エリアの使用ブロックとされ、BLK0〜BLK7がこの拡張エリアの予備ブロックとされている。そして拡張エリアの書き換え耐用回数は500回/ブロックである。つまり、実力値の1,000回よりも小さい。また、通常エリアの物理ブロックBLK40〜BLK55の各々は、その書き換え回数が990回に達し、書き換え可能な残り回数は10回、すなわち寿命間近である。
【0078】
この場合、図13に示すようにCPU24は、物理ブロックBLK0〜BLK15とBLK40〜BLK55とを入れ替える。つまり、物理ブロックBLK40〜BLK55の代わりに物理ブロックBLK0〜BLK15が通常エリアの使用ブロックに設定される。また、物理ブロックBLK8〜BLK15の代わりに物理ブロックBLK40〜BLK47が拡張エリアの使用ブロックに設定され、物理ブロックBLK0〜BLK7の代わりに物理ブロックBLK48〜BLK55が拡張エリアの予備ブロックに設定される。
【0079】
2.本実施形態に係る効果
本実施形態に係る構成であると、より効率良くNAND型フラッシュメモリを使用出来る。
【0080】
拡張エリアにおいて、必要となる耐用回数が1ブロック当たりの書き換え耐用回数の実力値より小さい場合、データ書き換え回数が必要耐用回数に達した時点で、拡張エリアの物理ブロックにつき無駄な使い方をしていると判断できる。
【0081】
そこで本実施形態では、他に実力値付近で寿命間近のブロックがあれば、その物理ブロックと割り当てを入れ替えることで、寿命間近であったブロックが割り当てられていた論理アドレス空間の書き換え回数を延ばすことが出来る。
【0082】
図12の例であると、物理ブロックの実力値が1,000回/ブロックであるにも関わらず、拡張エリアでは500回/ブロックの書き換えが可能であれば十分である。すると、500回分の更なる書き換え能力を無駄にしていることになる。
【0083】
そこで図13に示すように、CPU24は、既に990回の書き換えを行った寿命間近の物理ブロックBLK40〜BLK55を、拡張エリアの物理ブロックBLK0〜BLK15と入れ替えている。これにより、物理ブロックBLK40〜BLK55が割り当てられていた論理アドレス空間の書き換え可能残数を、入れ替え前の10回/ブロック(=1,000回−990回)から500回/ブロック(1,000回−500回)に増やすことが出来る。
【0084】
他方、拡張エリアでの書き換え可能残数は10回に低下するが、拡張エリアは既に書き換え耐用回数(500回/ブロック)に達しているか、または書き換え耐用回数間近であるので、特に問題となることは無い。
【0085】
この際、拡張エリアがまだ書き換え耐用回数に達していない場合には、その残り書き換え可能回数が、入れ替え対象となる通常エリアの残り書き換え回数と同じか、それ未満であることが望ましい。
【0086】
[変形例等]
以上のように、本実施形態に係るメモリコントローラは、第1インターフェイス(host I/F21@図1)と、第2インターフェイス(memory I/F23@図1)と、制御部(CPU24@図1)とを備える。第1インターフェイス(host I/F21@図1)は、ホスト(host10@図1)との間で信号を送受信する。第2インターフェイス(memory I/F23@図1)は、不揮発性の半導体メモリ(NAND30@図1)との間で信号を送受信する。制御部(CPU24@図1)は、第1インターフェイスで受信した第1コマンド(拡張area設定CMD and 耐用回数設定CMD@図4)に応答して半導体メモリに予備領域(予備block@図5)を確保し、半導体メモリに保持されるデータの更新時には予備領域に更新データを書き込む。予備領域のサイズは、第1コマンドに応じて可変である(S14@図4)。
【0087】
本構成によれば、データの書き換え回数を任意に設定しつつ、過不足無く予備領域を確保出来る。その結果、半導体メモリのメモリ空間を効率的に利用出来る。
【0088】
なお、実施形態は上記説明した形態に限定されるものではなく、種々の変形が可能である。例えば、メモリコントローラ20によって制御される半導体メモリはNAND型フラッシュメモリに限らず、NOR型フラッシュメモリ、AND型フラッシュメモリ、磁気ランダムアクセスメモリ(MRAM)、強誘電体メモリ(Ferroelectric RAM)、ReRAM(Resistive RAM)などのその他の半導体メモリ全般であって良い。
【0089】
更に、上記実施形態では、メモリセルの各々が2ビット以上の多ビットデータを保持する領域を通常エリアと定義し、メモリセルの各々が1ビットデータを保持する領域を拡張エリアと定義した。しかし、このビット数に限定されるものでは無い。例えば、通常エリアと拡張エリアの両方が、2ビット以上の多ビットデータを保持可能な場合であっても良い。この際に、拡張エリア内における各メモリセルの保持可能なビット数が、通常エリア内における各メモリセルの保持可能なビット数よりも小さいものとしても良い。もちろん、この大小関係が逆の場合であっても良い。そして、(1)式における変数Bを、メモリセルが保持可能なビット数に応じて変えれば良い。一例として、拡張エリアのメモリセルが1ビットデータを保持する場合にはB=10,000とし、多ビットデータを保持する場合にはB=1,000とする。1ビットデータを保持するか多ビットデータを保持するかは、例えば拡張エリア設定コマンド及び/または耐用回数設定コマンドで設定出来る。更に、複数の拡張エリアを設ける場合、それぞれの保持可能なデータのビット数を変えても良い。例えば、通常エリアの各メモリセルは3ビットデータを保持し、ある拡張エリアの各メモリセルは1ビットデータを保持し、別の拡張エリアの各メモリセルは2ビットデータを保持するような場合であっても良い。あるいは、通常エリアの各メモリセルは2ビットデータを保持し、2つ以上の拡張エリアの各メモリセルが共に1ビットデータを保持するような場合であっても良い。また、通常エリアと拡張エリアは、メモリセルに保持させるビット数で使い分ける場合に限らない。すなわち、通常エリアの各メモリセルが保持可能なデータのビット数と、拡張エリアの各メモリセルが保持可能なデータのビット数とが等しくても良い。この場合、両者が1ビットデータを保持しても良いし、あるいは両者が多ビットデータを保持しても良い。そして通常エリアと拡張エリアとを、ビット数では無く、その他の様々な特性の違いで使い分けても良い。
【0090】
また、上記実施形態で説明したメモリコントローラによって実行される機能の一部または全ては、半導体メモリ内で行っても良いし、ホスト機器で行っても良い。
【0091】
更に、予備ブロック数を算出する式は実施形態で説明した(1)式に限定されず、必要な予備ブロック数を算出できれば、減算、加算、掛算、及び/または割算などを加えても良い。また、上記説明したフローチャートは、図示した順序には限らず、可能な限り順序を入れ替えても良いし、または複数の処理を同時に行っても良い。
【0092】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0093】
1…メモリシステム、10…ホスト機器、20…メモリコントローラ、21…ホストインターフェイス、22…内蔵メモリ、23…メモリインターフェイス、24…CPU、30…NAND型フラッシュメモリ

【特許請求の範囲】
【請求項1】
ホストとの間で信号を送受信する第1インターフェイスと、
データ保持する複数のメモリセルの集合であり且つ消去単位となるブロックを複数備える不揮発性の半導体メモリとの間で信号を送受信する第2インターフェイスと、
前記第1インターフェイスで受信し、前記半導体メモリの書き換え耐用回数に関する情報を含む第1コマンドに応答して前記半導体メモリに予備領域を確保し、前記半導体メモリに保持されるデータの更新時には、前記予備領域に更新データを書き込む制御部と
を具備し、前記制御部は、前記第1コマンドに応答して前記半導体メモリに第1領域を確保し、前記第1領域のデータの更新時に前記予備領域を使用し、
前記第1コマンドに含まれる前記情報は、前記第1領域に求められる書き換え耐用回数に関する情報であり、
前記第1領域のブロック数をA、1ブロックあたりの書き換え耐用回数をB、前記第1領域に求められる書き換え耐用回数をCとすると、前記制御部は前記予備領域のブロック数Xを、
X=A(C−B)/B
により算出し、
前記半導体メモリにおいて、前記第1領域及び該第1領域に対応する前記予備領域に含まれる前記メモリセルは、1ビットのデータを保持可能であり、その他の領域に含まれる前記メモリセルは2ビット以上のデータを保持可能である
ことを特徴とするメモリコントローラ。
【請求項2】
ホストとの間で信号を送受信する第1インターフェイスと、
不揮発性の半導体メモリとの間で信号を送受信する第2インターフェイスと、
前記第1インターフェイスで受信した第1コマンドに応答して前記半導体メモリに予備領域を確保し、前記半導体メモリに保持されるデータの更新時には、前記予備領域に更新データを書き込む制御部と
を具備し、前記予備領域のサイズは、前記第1コマンドに応じて可変である
ことを特徴とするメモリコントローラ。
【請求項3】
前記第1コマンドは、前記半導体メモリの書き換え耐用回数に関する情報を含み、
前記制御部は、前記情報に基づいて前記予備領域のサイズを決定する
ことを特徴とする請求項2記載のメモリコントローラ。
【請求項4】
前記半導体メモリは、データ保持する複数のメモリセルの集合であり且つ消去単位となるブロックを複数備え、
前記制御部は、前記第1コマンドに応答して前記半導体メモリに第1領域を確保し、前記第1領域のデータの更新時に前記予備領域を使用し、
前記第1コマンドに含まれる前記情報は、前記第1領域に求められる書き換え耐用回数に関する情報であり、
前記第1領域のブロック数をA、1ブロックあたりの書き換え耐用回数をB、前記第1領域に求められる書き換え耐用回数をCとすると、前記制御部は前記予備領域のブロック数Xを、
X=A(C−B)/B
により算出する
ことを特徴とする請求項3記載のメモリコントローラ。
【請求項5】
前記半導体メモリにおいて、前記第1領域及び該第1領域に対応する前記予備領域に含まれる前記メモリセルは、1ビットのデータを保持可能であり、その他の領域に含まれる前記メモリセルは2ビット以上のデータを保持可能である
ことを特徴とする請求項4記載のメモリコントローラ。
【請求項6】
前記メモリセルの各々は多ビットのデータを保持可能である
ことを特徴とする請求項4記載のメモリコントローラ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate