(57)【要約】【課題】半導体メモリを効率的に利用可能なメモリコントローラを提供すること。【解決手段】実施形態のメモリコントローラ２０は、第１インターフェイス２１と、第２インターフェイス２３と、制御部２４とを備える。第１インターフェイス２１は、ホスト１０との間で信号を送受信する。第２インターフェイス２３は、不揮発性の半導体メモリ３０との間で信号を送受信する。制御部２４は、第１インターフェイス２１で受信した第１コマンドに応答して半導体メモリ３０に予備領域を確保し、半導体メモリ３０に保持されるデータの更新時には予備領域に更新データを書き込む。予備領域のサイズは、第１コマンドに応じて可変である。【選択図】図４
2013068993.tif 000002
【特許請求の範囲】
【請求項１】
ホストとの間で信号を送受信する第１インターフェイスと、
データ保持する複数のメモリセルの集合であり且つ消去単位となるブロックを複数備える不揮発性の半導体メモリとの間で信号を送受信する第２インターフェイスと、
前記第１インターフェイスで受信し、前記半導体メモリの書き換え耐用回数に関する情報を含む第１コマンドに応答して前記半導体メモリに予備領域を確保し、前記半導体メモリに保持されるデータの更新時には、前記予備領域に更新データを書き込む制御部と
を具備し、前記制御部は、前記第１コマンドに応答して前記半導体メモリに第１領域を確保し、前記第１領域のデータの更新時に前記予備領域を使用し、
前記第１コマンドに含まれる前記情報は、前記第１領域に求められる書き換え耐用回数に関する情報であり、
前記第１領域のブロック数をＡ、１ブロックあたりの書き換え耐用回数をＢ、前記第１領域に求められる書き換え耐用回数をＣとすると、前記制御部は前記予備領域のブロック数Ｘを、
Ｘ＝Ａ（Ｃ−Ｂ）／Ｂ
により算出し、
前記半導体メモリにおいて、前記第１領域及び該第１領域に対応する前記予備領域に含まれる前記メモリセルは、１ビットのデータを保持可能であり、その他の領域に含まれる前記メモリセルは２ビット以上のデータを保持可能である
ことを特徴とするメモリコントローラ。
【請求項２】
ホストとの間で信号を送受信する第１インターフェイスと、
不揮発性の半導体メモリとの間で信号を送受信する第２インターフェイスと、
前記第１インターフェイスで受信した第１コマンドに応答して前記半導体メモリに予備領域を確保し、前記半導体メモリに保持されるデータの更新時には、前記予備領域に更新データを書き込む制御部と
を具備し、前記予備領域のサイズは、前記第１コマンドに応じて可変である
ことを特徴とするメモリコントローラ。
【請求項３】
前記第１コマンドは、前記半導体メモリの書き換え耐用回数に関する情報を含み、
前記制御部は、前記情報に基づいて前記予備領域のサイズを決定する
ことを特徴とする請求項２記載のメモリコントローラ。
【請求項４】
前記半導体メモリは、データ保持する複数のメモリセルの集合であり且つ消去単位となるブロックを複数備え、
前記制御部は、前記第１コマンドに応答して前記半導体メモリに第１領域を確保し、前記第１領域のデータの更新時に前記予備領域を使用し、
前記第１コマンドに含まれる前記情報は、前記第１領域に求められる書き換え耐用回数に関する情報であり、
前記第１領域のブロック数をＡ、１ブロックあたりの書き換え耐用回数をＢ、前記第１領域に求められる書き換え耐用回数をＣとすると、前記制御部は前記予備領域のブロック数Ｘを、
Ｘ＝Ａ（Ｃ−Ｂ）／Ｂ
により算出する
ことを特徴とする請求項３記載のメモリコントローラ。
【請求項５】
前記半導体メモリにおいて、前記第１領域及び該第１領域に対応する前記予備領域に含まれる前記メモリセルは、１ビットのデータを保持可能であり、その他の領域に含まれる前記メモリセルは２ビット以上のデータを保持可能である
ことを特徴とする請求項４記載のメモリコントローラ。
【請求項６】
前記メモリセルの各々は多ビットのデータを保持可能である
ことを特徴とする請求項４記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態はメモリコントローラに関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリでは、データの書き換え可能回数を高めるために、種々の研究が為されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国出願公開２００９／００８９４９１号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
半導体メモリを効率的に利用可能なメモリコントローラを提供する。
【課題を解決するための手段】
【０００５】
実施形態のメモリコントローラは、第１インターフェイスと、第２インターフェイスと、制御部とを備える。第１インターフェイスは、ホストとの間で信号を送受信する。第２インターフェイスは、不揮発性の半導体メモリとの間で信号を送受信する。制御部は、第１インターフェイスで受信した第１コマンドに応答して半導体メモリに予備領域を確保し、半導体メモリに保持されるデータの更新時には、予備領域に更新データを書き込む。予備領域のサイズは、第１コマンドに応じて可変である。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態に係るメモリシステムのブロック図。
【図２】第１実施形態に係るメモリ空間の概念図。
【図３】第１実施形態に係るメモリ空間の概念図。
【図４】第１実施形態に係るメモリコントローラの動作を示すフローチャート。
【図５】第１実施形態に係るメモリ空間の概念図。
【図６】第１実施形態の第２変形例に係る耐用回数テーブルの概念図。
【図７】第１実施形態の第２変形例に係るメモリコントローラの動作を示すフローチャート。
【図８】第２実施形態に係る書き込み回数テーブルの概念図。
【図９】第２実施形態に係るメモリコントローラの動作を示すフローチャート。
【図１０】第３実施形態に係るメモリ空間の概念図。
【図１１】第４実施形態に係るメモリコントローラの動作を示すフローチャート。
【図１２】第４実施形態に係るメモリ空間の概念図。
【図１３】第４実施形態に係るメモリ空間の概念図。
【発明を実施するための形態】
【０００７】
以下、実施形態につき図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【０００８】
［第１実施形態］  
第１実施形態に係るメモリコントローラについて説明する。以下では、ＮＡＮＤ型フラッシュメモリを制御するメモリコントローラを例に挙げて説明する。
【０００９】
１．メモリシステムの構成について  
１．１  メモリシステムの全体構成について  
まず、本実施形態に係るメモリコントローラを含むメモリシステムの構成について説明する。
【００１０】
図示するようにメモリシステム１は、ホスト機器１０、メモリコントローラ２０、及びＮＡＮＤ型フラッシュメモリ３０を備えている。
【００１１】
ホスト機器１０は、メモリコントローラ２０に対して命令を与えることでＮＡＮＤ型フラッシュメモリ３０にアクセスする。そして、メモリコントローラ２０を介して、ＮＡＮＤ型フラッシュメモリ３０にデータを書き込み、ＮＡＮＤ型フラッシュメモリ３０からデータを読み出し、またはＮＡＮＤ型フラッシュメモリ３０のデータを消去する。ホスト機器１０は、例えばパーソナルコンピュータ、デジタルカメラ、または携帯電話等である。
【００１２】
メモリコントローラ２０は、ホスト機器１０からの命令に応答して、ＮＡＮＤ型フラッシュメモリ３０に対して読み出し、書き込み、消去を命令する。また、ＮＡＮＤ型フラッシュメモリ３０のメモリ空間を管理する。
【００１３】
ＮＡＮＤ型フラッシュメモリ３０は、不揮発にデータを保持する。ＮＡＮＤ型フラッシュメモリは複数のメモリセルを備え、メモリセルの各々は、電荷蓄積層と制御ゲートが積層されたゲートを有し、データを不揮発に保持する。そしてＮＡＮＤ型フラッシュメモリ３０では、複数のメモリセルの集合であるブロック単位でデータが消去される。
【００１４】
メモリコントローラ２０とＮＡＮＤ型フラッシュメモリ３０は、同一の製品内に含まれても良く、その例としてはＳＤＴＭカードのようなメモリカードや、ＳＳＤ（solid state drive）等が挙げられる。
【００１５】
１．２  メモリコントローラ２０の構成について  
次に、上記のメモリコントローラ２０の構成について、引き続き図１を用いて説明する。図示するようにメモリコントローラ２０は、ホストインターフェイス回路２１、内蔵メモリ２２、メモリインターフェイス回路２３、及びプロセッサ（ＣＰＵ）２４を備えている。
【００１６】
ホストインターフェイス回路２１は、ホストインターフェイスを介してホスト機器１０と接続され、ホスト機器１０との通信を司る。そして、ホスト機器１０から受信した命令及びデータを、それぞれＣＰＵ２４及び内蔵メモリ２２に転送する。またＣＰＵ２４の命令に応答して、内蔵メモリ２２内のデータをホスト機器１０へ転送する。
【００１７】
内蔵メモリ２２は、例えばＮＯＲ型フラッシュメモリＤＲＡＭ等の半導体メモリであり、ホストインターフェイス回路２１及びメモリインターフェイス回路２３から転送されるデータを一時的に保持する。また、ＮＡＮＤ型フラッシュメモリ３０を管理するために必要な情報等（ファームウェアや各種のテーブル）を保持する。
【００１８】
ＣＰＵ２４は、メモリコントローラ２０全体の動作を制御する。例えばホスト機器から書き込み命令を受信した際には、それに従ってメモリインターフェイス（本例ではＮＡＮＤインターフェイス）に従った書き込み命令を発行する。読み出し及び消去の際も同様である。またＣＰＵ２４は、ウェアレベリング等、ＮＡＮＤ型フラッシュメモリ３０を管理するための様々な処理を実行する。
【００１９】
メモリインターフェイス回路２３は、メモリインターフェイスを介してＮＡＮＤ型フラッシュメモリ３０と接続され、ＮＡＮＤ型フラッシュメモリ３０との通信を司る。そして、ＣＰＵ２４から受信した命令をＮＡＮＤ型フラッシュメモリ３０に転送し、また書き込み時には内蔵メモリ２２内の書き込みデータをＮＡＮＤ型フラッシュメモリ３０へ転送する。更に読み出し時には、ＮＡＮＤ型フラッシュメモリ３０から読み出されたデータを内蔵メモリ２２へ転送する。
【００２０】
１．３  ＮＡＮＤ型フラッシュメモリ３０の管理について  
次に、上記構成のメモリコントローラ２０によるＮＡＮＤ型フラッシュメモリ３０の管理について説明する。
【００２１】
１．３．１  通常の管理について  
図２は、ホスト機器１０からＮＡＮＤ型フラッシュメモリ３０を見たメモリ空間（論理アドレス空間）と、ＮＡＮＤ型フラッシュメモリのブロック（論理アドレス空間と対比して「物理ブロック」と呼ぶ）との関係を示す模式図である。
【００２２】
ホスト機器１０は、論理アドレスを用いてＮＡＮＤ型フラッシュメモリ３０にアクセスする。ＮＡＮＤ型フラッシュメモリ３０内の物理ブロック（または物理アドレス）は、それぞれ論理アドレスに対応付けられている。論理アドレスと物理ブロックとの対応は、データが更新される際等、頻繁に変更される。従ってＣＰＵ２４は、この論理アドレスと物理ブロックとの対応関係を、テーブルを用いて管理している。このテーブルを、以下アドレス変換テーブルと呼ぶ。アドレス変換テーブルは、例えば内蔵メモリ２２及びＮＡＮＤ型フラッシュメモリ３０に保持される。
【００２３】
図２の例では、ＮＡＮＤ型フラッシュメモリ３０が８８個の物理ブロックＢＬＫ（ＢＬＫ０〜ＢＬＫ８７）を有する場合について示している。もちろん、この数は一例に過ぎず、任意である。また図２の例では、論理アドレスが０ｘ００００から始まる論理アドレス空間が８個の物理ブロックＢＬＫ０〜ＢＬＫ７に対応し、論理アドレスが０ｘ１０００から始まる論理アドレス空間が８個の物理ブロックＢＬＫ８〜ＢＬＫ１５に対応している。もちろん、この対応関係も一例に過ぎない。
【００２４】
メモリコントローラ２０のＣＰＵ２４は、８８個の物理ブロックＢＬＫを、使用ブロックと予備ブロックとに分けて管理する。図２の例では、物理ブロックＢＬＫ０〜ＢＬＫ７９が使用ブロックであり、物理ブロックＢＬＫ８０〜ＢＬＫ８７が予備ブロックである。
【００２５】
使用ブロックには論理アドレスが割り当てられている。従って使用ブロックは、ホスト機器１０によってアクセス可能な領域であり、ホスト機器１０の命令によってデータの書き込み、読み出し、及び消去が行われる。
【００２６】
これに対して、予備ブロックには論理アドレスは割り当てられておらず、ホスト機器１０は予備ブロックに対して直接アクセスすることは出来ない。予備ブロックは、使用ブロック内のデータを更新する際や、消去の際に使用されるブロックである。
【００２７】
例えば、物理ブロックＢＬＫ０内のデータが更新される場合を考える。この場合、更新データはブロックＢＬＫ０では無くブロックＢＬＫ８０に書き込まれる（この際、ブロックＢＬＫ０の更新対象では無いデータも一緒にブロックＢＬＫ８０にコピーされる）。そして、物理ブロックＢＬＫ８０に論理アドレスが割り当てられ使用ブロックとなる。また物理ブロックＢＬＫ０への論理アドレスの割り当てが解消される。つまり、それまで物理ブロックＢＬＫ０が関連付けられていた論理アドレス空間は、物理ブロックＢＬＫ８０で置き換えられる。そして物理ブロックＢＬＫ０が予備ブロックとされる。その後、使用ブロックのいずれかのデータが更新される際には、同様にして予備ブロックＢＬＫ８１、ＢＬＫ８２、…が順次使用される。
【００２８】
ＣＰＵ２４は以上のようにＮＡＮＤ型フラッシュメモリ３０を管理することで、特定の物理ブロックにのみアクセスが集中することを防止する。
【００２９】
１．３．２  拡張エリアを設ける場合の管理について  
メモリコントローラ２０は、ホスト機器１０の命令に従って、ＮＡＮＤ型フラッシュメモリ３０のメモリ空間に拡張エリアを設定することが出来る。拡張エリアとは、ある特定のメモリ空間につき、その他のメモリ空間とは異なる特性を持たせた領域のことであり、拡張エリアに対してより高い信頼性や高い性能を持たせたものである。以下では、拡張エリアとの区別のため、拡張エリアを除く領域を通常エリアと呼ぶことにする。
【００３０】
拡張エリアの一例は、メモリセルに対してｉビット（ｉは１以上の整数）のデータを書き込む領域であり、通常エリアの一例は、メモリセルに対して（ｉ＋１）ビットのデータを書き込む領域である。以下では、ｉ＝１の場合を例に説明する。すなわち、通常エリアのメモリセルは２ビット（４値）のデータを保持可能であり、拡張エリアのメモリセルは１ビット（２値）のデータを保持可能である。
【００３１】
図３は、図２で説明したＮＡＮＤ型フラッシュメモリにおいて、物理ブロックＢＬＫ１５を用いて拡張エリアを設定した場合について示している。
【００３２】
図示するようにＣＰＵ２４は、物理ブロックＢＬＫ１５を拡張エリアに設定すると共に、この拡張エリア用の予備ブロックとして物理ブロックＢＬＫ０〜ＢＬＫ７を確保する。もちろん、物理ブロックＢＬＫ０〜ＢＬＫ７には、それが使用ブロックに置き換えられない限り、論理アドレスは割り当てられない。そしてＣＰＵ２４は、物理ブロックＢＬＫ０〜ＢＬＫ７、及びＢＬＫ１５にはデータを２値で書き込み、その他の物理ブロックには４値で書き込む。なお、データを２値で書き込むことにより、４値で書き込む場合に比べて論理アドレス空間は半分になるが、本明細書の添付図面では、説明の簡略化のため、その点は無視して示してある。
【００３３】
２．メモリシステムの動作について  
次に、上記構成のメモリシステム１において、特に拡張エリアを設定する場合のメモリコントローラ２０の動作について説明する。図４は、メモリコントローラ２０の動作を示すフローチャートである。
【００３４】
図示するように、まずメモリコントローラ２０は、ホスト機器１０からホストインターフェイスを介して送信された拡張エリア設定コマンドを、ホストインターフェイス回路２１において受信する（ステップＳ１０）。拡張エリア設定コマンドには、論理アドレスと論理サイズを示す情報が含まれている。この論理アドレスは、拡張エリアをとなる領域の、論理アドレス空間における先頭アドレスを示し、論理サイズは、拡張エリアの論理アドレス空間におけるサイズ（容量）を示す。
【００３５】
するとＣＰＵ２４は、拡張エリア設定コマンドによって指定される論理アドレスと論理サイズを、内蔵メモリ２２に保持させる（ステップＳ１１）。
【００３６】
引き続きメモリコントローラ２０は、ホスト機器１０からホストインターフェイスを介して送信された耐用回数設定コマンドを、ホストインターフェイス回路２１において受信する（ステップＳ１２）。耐用回数設定コマンドは、ステップＳ１０で受信した拡張エリア設定コマンドで設定される拡張エリアに対して要求される書き換え可能な最大回数（これを書き換え耐用回数と呼ぶ）を示す情報を含む。
【００３７】
するとＣＰＵ２４は、耐用回数設定コマンドによって指定される書き換え耐用回数を、内蔵メモリ２２に保持させる（ステップＳ１３）。
【００３８】
次にＣＰＵ２４は、内蔵メモリ２２に保持された論理アドレス、論理サイズ、及びデータ書き換え耐用回数を満足させるために必要な、拡張エリア用の予備ブロック数を算出する（ステップＳ１４）。この際、ＣＰＵ２４は、以下の（１）式に基づいて予備ブロック数Ｘを算出する。すなわち、  
Ｘ＝Ａ（Ｃ−Ｂ）／Ｂ                       （１）  
但し、Ａは拡張エリアの使用ブロック数（論理サイズに比例する）であり、Ｂは物理ブロック１個あたりの書き換え耐用回数（以下、これを実力値と呼び、固定値である）であり、Ｃは拡張エリアに要求される書き換え耐用回数である。但し、Ｃ＞Ｂである。
【００３９】
そしてＣＰＵ２４は、通常エリアの使用ブロックのうちの必要な数の物理ブロックを拡張エリアの使用ブロックに設定し、更にステップＳ１４で算出された数の物理ブロックを拡張エリアの予備ブロックに設定する（ステップＳ１５）。またこれにより論理アドレスと物理ブロックとの対応関係が変化するため、ＣＰＵ２４はアドレス変換テーブルを更新して、この対応関係の変化を反映させる。
【００４０】
図５は、論理アドレス空間と物理ブロックとの関係を示す模式図であり、上記方法の具体例を示している。
【００４１】
例えばステップＳ１１によって指定される論理アドレスが物理ブロックＢＬＫ４０に相当し、論理サイズが８個の物理ブロック分の容量に相当していたと仮定する。またステップＳ１２で指定される書き換え耐用回数が５０００回であったと仮定する。この５０００回という数字は、８個の物理ブロック分の容量を有する拡張エリアにおいて、予備ブロックの使用を前提として物理ブロックあたりに要求される書き換え可能な最大回数である。更に、１個の物理ブロックにおいて書き換え可能な最大回数（実力値）は１０００回であったとする。この実力値は、当然ながら予備ブロックの使用を前提としたものでは無く、各物理ブロックの正味の書き換え可能回数である。すると、ステップＳ１４においてＣＰＵ２４は、Ｘ＝８・（５０００−１０００）／１０００＝３２から、必要な予備ブロック数は３２個であると決定する。
【００４２】
これによりＣＰＵ２４はステップＳ１５において、８個の物理ブロックＢＬＫ４０〜ＢＬＫ４７を拡張エリアの使用ブロックに設定し、３２個の例えば物理ブロックＢＬＫ０〜ＢＬＫ３１を拡張エリアの予備ブロックに設定する。
【００４３】
これにより、拡張エリアの８個の使用ブロックを３２個の予備ブロックとの間で使い回すことで、物理ブロック８個分の拡張エリアに対して使用ブロックあたり５０００回の書き換えを可能とする。言い換えれば、３２個の予備ブロックを使うことで、物理ブロック８個分の拡張エリアで４０，０００回の書き換えを可能とする。
【００４４】
３．本実施形態に係る効果  
上記のように、本実施形態に係る構成であると、半導体メモリを効率的に利用出来る。以下、本効果につき詳細に説明する。
【００４５】
ＮＡＮＤ型フラッシュメモリを管理する際に、例えば２値で書き込む領域と４値で書き込む領域とを区別すると共に、重要な情報を２値で書き込むことによって、大容量を確保しつつ、重要なデータの信頼性を維持することが可能となる。
【００４６】
またこの際、各領域に対して予備ブロックを設けて、使用ブロックと予備ブロックとの間でブロックを使い回すことで、特定の物理ブロックにアクセスが集中することを防止出来、拡張エリアの書き換え回数を十分に大きくすることが出来る。
【００４７】
このような構成において本実施形態では、拡張エリアの予備ブロック数を可変にしている。より具体的には、ホスト機器１０から要求された拡張エリアサイズと書き換え耐用回数に基づき、最適な予備ブロック数をＣＰＵ２４が算出し、これを確保している。従って、拡張エリアサイズと書き換え耐用回数の両方の要求を満たすことが出来る。
【００４８】
仮に、拡張エリアの予備ブロック数が一定であったとすると、このような効果は得られない。例えば予備ブロック数が常に８個であり、物理ブロックの書き換え可能な最大回数は１０００回であったとする。
【００４９】
すると、拡張エリアの使用ブロック数が８個であると、拡張エリアにおける総書き換え耐用回数は、  
（８(使用ブロック数)＋８(予備ブロック数)）×１，０００（書き換え耐用回数/ブロック）＝１６，０００回  
となり、１つの使用ブロック当たりに換算すると、  
１６，０００回／８ (使用ブロック数)＝２，０００回  
が書き換え耐用回数となる。また、拡張エリアの使用ブロック数が１個であると、拡張エリアにおける総書き換え耐用回数は、  
（１(使用ブロック数)＋８(予備ブロック数)）×１，０００（書き換え耐用回数/ブロック）＝９，０００回  
となり、１つの使用ブロック当たりに換算すると、  
９，０００回／１ (使用ブロック数)＝９，０００回  
となる。つまり、拡張エリアサイズによって書き換え耐用回数が変化し、使用ブロック数が多くなるほど書き換え耐用回数が小さくなる。従って、必要な書き換え耐用回数を満たせなくなるおそれがある。あるいは、逆に書き換え耐用回数が過剰になる場合があり得る。
【００５０】
本実施形態では、拡張エリアサイズが大きくなるほど（すなわち拡張エリアの使用ブロック数が増えるほど）、そして要求される書き換え耐用回数が増えるほど、より多くの予備ブロックを確保する。その際には、過度に多くの予備ブロックを確保することはせず、最適な数の予備ブロックを確保する。従って、拡張エリアに要求される書き換え耐用回数を満足させることが出来ると共に、過剰に予備ブロックを確保して物理ブロックが無駄に使用されることも防止出来る。
【００５１】
もちろん、予備ブロックを多くするほど、通常エリアの使用ブロックとして使える物理ブロック数は減少する。従って、ＣＰＵ２４は、予備ブロック数の最大数を設定し、この最大数以下の範囲内で予備ブロックを確保するようにしても良い。
【００５２】
４．本実施形態の変形例  
４．１  第１の変形例  
上記実施形態では、メモリコントローラ２０は、拡張エリア設定コマンドと耐用回数設定コマンドとを別個に受信する。しかしながら、これらは１つのコマンドにまとめて受信しても良い。つまり、１つのコマンドに、拡張エリアを設定する旨の命令、論理アドレス、論理サイズ、及び書き換え耐用回数が含まれている場合であっても良い。
【００５３】
４．２  第２の変形例  
また、上記実施形態では、メモリコントローラ２０は耐用回数設定コマンドによってデータ書き換え耐用回数を受信する。しかし、書き換え耐用回数そのもので無くても、書き換え耐用回数を示す情報であれば良い。
【００５４】
例えば、書き換え耐用回数そのものの代わりに、「多い」、「普通」、「少ない」等の書き換え回数レベル情報を用いても良い。このような場合、メモリコントローラ２０は、例えば図６に示すような耐用回数テーブルを内蔵メモリ２２に保持する。図示するように耐用回数テーブルは、各レベルに応じた書き換え耐用回数情報を保持する。この場合のメモリコントローラ２０の動作を図７に示す。図示するように、ステップＳ１２の後、ＣＰＵ２４は耐用回数テーブルを参照する（ステップＳ２０）。そしてＣＰＵ２４は、受信した書き換え回数レベルに基づいて、耐用回数テーブルから書き換え耐用回数を決定する（ステップＳ２１）。その後、ステップＳ１３の処理に進む。
【００５５】
別の方法としては、書き換え耐用回数の代わりに、必要な書き換え耐用回数を確保するために必要な予備ブロック数が、耐用回数設定コマンドによって直接指定されても良い。
【００５６】
４．３  第３の変形例  
上記実施形態では、物理ブロック１個あたりの書き換え耐用回数の実力値Ｂが固定値である場合を例に説明した。この実力値Ｂは、例えば内蔵メモリ２２に予め保持される。
【００５７】
しかしながら、拡張エリア設定コマンド、耐用回数設定コマンド、またはその他のコマンドによって、ホスト機器１０から実力値Ｂを受信し、受信した実力値Ｂを用いてＣＰＵ２４が（１）式の計算を行っても良い。
【００５８】
ＮＡＮＤ型フラッシュメモリ３０の実力値Ｂは、その世代によって変わる可能性がある。従って、ある実力値Ｂは、ある製品には適切であっても、別の製品では適切でないかもしれない。従って、最適な実力値Ｂをホスト機器１０から受信することが好ましい。
【００５９】
［第２実施形態］  
次に、第２実施形態に係るメモリコントローラについて説明する。本実施形態は、上記第１実施形態またはその変形例において、書き換え回数がその上限（書き換え耐用回数）に達した際に、書き換えを禁止するものである。以下では、第１実施形態と異なる点についてのみ説明する。
【００６０】
１．書き込み回数テーブルについて  
本実施形態に係るメモリコントローラ２０は、内蔵メモリに書き込み回数テーブルを保持する。図８は書き込み回数テーブルの概念図である。図示するように書き込み回数テーブルは、物理ブロックＢＬＫｊ（ｊは自然数）毎に書き込み回数Ｎｊを保持する。そして、書き込みを実行するたびに、書き込み回数テーブルを更新する。
【００６１】
２．メモリコントローラ２０の動作について  
図９は、ホスト機器１０から書き込み命令を受信した際のメモリコントローラ２０の動作を示すフローチャートである。
【００６２】
図示するように、書き込み命令を受信すると（ステップＳ３０）、ＣＰＵ２４は書き込み回数テーブルを参照する（ステップＳ３１）。そして、書き込み対象となる物理ブロック（拡張エリアの使用ブロック）の書き込み回数が上限（書き換え耐用回数）に達しているか否かを判断する。達していなければ（ステップＳ３２、ＮＯ）、書き込みを行って、書き込み回数テーブルを更新する（ステップＳ３３）。他方、達していれば（ステップＳ３２、ＹＥＳ）、ＣＰＵ２４は書き込みを禁止する（ステップＳ３４）。そして書き込みエラーをホスト機器１０に返す。
【００６３】
３．本実施形態に係る効果  
データの書き換えを繰り返すことにより書き込み回数が書き換え耐用回数に達した物理ブロックは、データの書き込みや保持についての信頼性が低下している可能性がある。従って、このような物理ブロックのデータ更新を禁止することで、書き換え失敗やデータの消失などが生じることを防止出来る。また、書き換え回数を制限することで、データのセキュリティ保持にも寄与出来る。
【００６４】
なお、ステップＳ３２で最初にＹＥＳと判断された際、書き換えテーブルの対応するエントリにフラグを立てるようにしても良い。そしてＣＰＵ２４は、書き込みアクセスがあった際には、対応する物理ブロックのフラグを確認し、フラグが立っていれば書き換えを行わないようにしても良い。これによれば、毎回ステップＳ３２の比較処理を行う必要が無い。
【００６５】
［第３実施形態］  
次に、第３実施形態に係るメモリコントローラについて説明する。本実施形態は、上記第１実施形態またはその変形例または第２実施形態において、拡張エリアを複数設けるものである。以下では、第１実施形態と異なる点についてのみ説明する。
【００６６】
１．複数の拡張エリアの設定について  
図４で説明した処理を複数回行うことで、拡張エリアが複数設けられる。図１０は、そのような場合の論理アドレス空間と物理ブロックとの関係を示す模式図である。
【００６７】
図示するように、図５と同様にまず８個の物理ブロックＢＬＫ３２〜ＢＬＫ３９が拡張エリアの使用ブロックとして設定され、３２個の物理ブロックＢＬＫ０〜ＢＬＫ３１がこの拡張エリアの予備ブロックとして設定されている。
【００６８】
この状態で、更に拡張エリア設定コマンドと耐用回数設定コマンドを受信することで、物理ブロックＢＬＫ７１を拡張エリアの使用ブロックとして設定し、８個の物理ブロックＢＬＫ７２〜ＢＬＫ７９をこの拡張エリアの予備ブロックとして設定する。
【００６９】
この場合、８個の物理ブロックＢＬＫ３２〜ＢＬＫ３９（及び３２個の予備ブロック）で構成される拡張エリアの書き換え耐用回数は４０，０００回（５，０００回／ブロック）であり、１個の物理ブロックＢＬＫ７１（及び８個の予備ブロック）で構成される拡張エリアの書き換え耐用回数は７，０００回（７，０００回／ブロック）となる。
【００７０】
２．本実施形態に係る効果  
以上のように、本実施形態によれば複数の拡張エリアを設定することが可能であり、また拡張エリア毎に書き換え耐用回数を任意に設定出来る。
【００７１】
［第４実施形態］  
次に、第４実施形態に係るメモリコントローラについて説明する。本実施形態は、上記第１実施形態またはその変形例または第２、第３実施形態において、拡張エリアに必要となる書き換え耐用回数が、物理ブロックの実力値より小さい場合に関する。
【００７２】
１．メモリコントローラ２０の動作について  
データの書き込み時におけるメモリコントローラ２０の動作について、図１１を用いて説明する。図１１は、メモリコントローラ２０の動作を示すフローチャートである。
【００７３】
図示するように、図９で説明したステップＳ３０の後、書き込み対象エリアが拡張エリアであった場合、ＣＰＵ２４は、拡張エリアの使用ブロック毎に必要な書き換え耐用回数と実力値とを比較する（ステップＳ４０）。耐用回数＜実力値であれば（ステップＳ４０、ＹＥＳ）、ＣＰＵ２４は書き込み回数テーブルを参照する（ステップＳ４１）。そして書き込み回数テーブルに基づいてＣＰＵ２４は、書き込み対象エリアの拡張ブロックの書き込み回数が、既に書き換え耐用回数に達しているか、あるいは書き換え耐用回数間近であるかを確認する（ステップＳ４２）。書き換え耐用回数間近であるか否かを判断する場合には、メモリコントローラ２０は所定の閾値を内蔵メモリ２２に保持し、ＣＰＵ２４がこの閾値と書き込み回数とを比較すれば良い。そして閾値を超えている場合には、耐用回数間近であると判断出来る。
【００７４】
拡張エリアの書き込み回数が既に書き換え耐用回数に達している場合、あるいは書き換え耐用回数間近である場合（ステップＳ４２、ＹＥＳ）、ＣＰＵ２４は書き込み回数テーブルを参照する（ステップＳ４３）。そして書き込み回数テーブルに基づいてＣＰＵ２４は、通常エリア、または別の拡張エリアの使用ブロック（もしあれば）において、書き込み回数が実力値間近である物理ブロックがあるか否かを判断する（ステップＳ４４）。この判断も、メモリコントローラ２０が所定の閾値を内蔵メモリ２２に保持し、ＣＰＵ２４がこの閾値と書き込み回数とを比較し、閾値を超えている場合に実力値間近であると判断出来る。
【００７５】
実力値間近の物理ブロックが存在すれば（ステップＳ４４、ＹＥＳ）、ＣＰＵ２４は、この実力値間近の物理ブロックと、書き換え耐用回数間近の拡張エリアの使用ブロック及び／または予備ブロックの一部または全てと入れ替える（ステップＳ４５）。その後、ステップＳ３３の処理に進む。
【００７６】
上記の具体例を、図１２及び図１３を用いて説明する。図１２及び図１３は、論理アドレス空間と物理ブロックとの関係を示す模式図である。
【００７７】
図１２の例では、物理ブロックＢＬＫ８〜ＢＬＫ１５が拡張エリアの使用ブロックとされ、ＢＬＫ０〜ＢＬＫ７がこの拡張エリアの予備ブロックとされている。そして拡張エリアの書き換え耐用回数は５００回／ブロックである。つまり、実力値の１，０００回よりも小さい。また、通常エリアの物理ブロックＢＬＫ４０〜ＢＬＫ５５の各々は、その書き換え回数が９９０回に達し、書き換え可能な残り回数は１０回、すなわち寿命間近である。
【００７８】
この場合、図１３に示すようにＣＰＵ２４は、物理ブロックＢＬＫ０〜ＢＬＫ１５とＢＬＫ４０〜ＢＬＫ５５とを入れ替える。つまり、物理ブロックＢＬＫ４０〜ＢＬＫ５５の代わりに物理ブロックＢＬＫ０〜ＢＬＫ１５が通常エリアの使用ブロックに設定される。また、物理ブロックＢＬＫ８〜ＢＬＫ１５の代わりに物理ブロックＢＬＫ４０〜ＢＬＫ４７が拡張エリアの使用ブロックに設定され、物理ブロックＢＬＫ０〜ＢＬＫ７の代わりに物理ブロックＢＬＫ４８〜ＢＬＫ５５が拡張エリアの予備ブロックに設定される。
【００７９】
２．本実施形態に係る効果  
本実施形態に係る構成であると、より効率良くＮＡＮＤ型フラッシュメモリを使用出来る。
【００８０】
拡張エリアにおいて、必要となる耐用回数が１ブロック当たりの書き換え耐用回数の実力値より小さい場合、データ書き換え回数が必要耐用回数に達した時点で、拡張エリアの物理ブロックにつき無駄な使い方をしていると判断できる。
【００８１】
そこで本実施形態では、他に実力値付近で寿命間近のブロックがあれば、その物理ブロックと割り当てを入れ替えることで、寿命間近であったブロックが割り当てられていた論理アドレス空間の書き換え回数を延ばすことが出来る。
【００８２】
図１２の例であると、物理ブロックの実力値が１，０００回／ブロックであるにも関わらず、拡張エリアでは５００回／ブロックの書き換えが可能であれば十分である。すると、５００回分の更なる書き換え能力を無駄にしていることになる。
【００８３】
そこで図１３に示すように、ＣＰＵ２４は、既に９９０回の書き換えを行った寿命間近の物理ブロックＢＬＫ４０〜ＢＬＫ５５を、拡張エリアの物理ブロックＢＬＫ０〜ＢＬＫ１５と入れ替えている。これにより、物理ブロックＢＬＫ４０〜ＢＬＫ５５が割り当てられていた論理アドレス空間の書き換え可能残数を、入れ替え前の１０回／ブロック（＝１，０００回−９９０回）から５００回／ブロック（１，０００回−５００回）に増やすことが出来る。
【００８４】
他方、拡張エリアでの書き換え可能残数は１０回に低下するが、拡張エリアは既に書き換え耐用回数（５００回／ブロック）に達しているか、または書き換え耐用回数間近であるので、特に問題となることは無い。
【００８５】
この際、拡張エリアがまだ書き換え耐用回数に達していない場合には、その残り書き換え可能回数が、入れ替え対象となる通常エリアの残り書き換え回数と同じか、それ未満であることが望ましい。
【００８６】
［変形例等］  
以上のように、本実施形態に係るメモリコントローラは、第１インターフェイス(host I/F21@図1)と、第２インターフェイス(memory I/F23@図1)と、制御部(CPU24@図1)とを備える。第１インターフェイス(host I/F21@図1)は、ホスト(host10@図1)との間で信号を送受信する。第２インターフェイス(memory I/F23@図1)は、不揮発性の半導体メモリ(NAND30@図1)との間で信号を送受信する。制御部(CPU24@図1)は、第１インターフェイスで受信した第１コマンド(拡張area設定CMD and 耐用回数設定CMD@図4)に応答して半導体メモリに予備領域(予備block@図5)を確保し、半導体メモリに保持されるデータの更新時には予備領域に更新データを書き込む。予備領域のサイズは、第１コマンドに応じて可変である(S14@図4)。
【００８７】
本構成によれば、データの書き換え回数を任意に設定しつつ、過不足無く予備領域を確保出来る。その結果、半導体メモリのメモリ空間を効率的に利用出来る。
【００８８】
なお、実施形態は上記説明した形態に限定されるものではなく、種々の変形が可能である。例えば、メモリコントローラ２０によって制御される半導体メモリはＮＡＮＤ型フラッシュメモリに限らず、ＮＯＲ型フラッシュメモリ、ＡＮＤ型フラッシュメモリ、磁気ランダムアクセスメモリ（ＭＲＡＭ）、強誘電体メモリ（Ferroelectric ＲＡＭ）、ＲｅＲＡＭ（Resistive RAM）などのその他の半導体メモリ全般であって良い。
【００８９】
更に、上記実施形態では、メモリセルの各々が２ビット以上の多ビットデータを保持する領域を通常エリアと定義し、メモリセルの各々が１ビットデータを保持する領域を拡張エリアと定義した。しかし、このビット数に限定されるものでは無い。例えば、通常エリアと拡張エリアの両方が、２ビット以上の多ビットデータを保持可能な場合であっても良い。この際に、拡張エリア内における各メモリセルの保持可能なビット数が、通常エリア内における各メモリセルの保持可能なビット数よりも小さいものとしても良い。もちろん、この大小関係が逆の場合であっても良い。そして、（１）式における変数Ｂを、メモリセルが保持可能なビット数に応じて変えれば良い。一例として、拡張エリアのメモリセルが１ビットデータを保持する場合にはＢ＝１０，０００とし、多ビットデータを保持する場合にはＢ＝１，０００とする。１ビットデータを保持するか多ビットデータを保持するかは、例えば拡張エリア設定コマンド及び／または耐用回数設定コマンドで設定出来る。更に、複数の拡張エリアを設ける場合、それぞれの保持可能なデータのビット数を変えても良い。例えば、通常エリアの各メモリセルは３ビットデータを保持し、ある拡張エリアの各メモリセルは１ビットデータを保持し、別の拡張エリアの各メモリセルは２ビットデータを保持するような場合であっても良い。あるいは、通常エリアの各メモリセルは２ビットデータを保持し、２つ以上の拡張エリアの各メモリセルが共に１ビットデータを保持するような場合であっても良い。また、通常エリアと拡張エリアは、メモリセルに保持させるビット数で使い分ける場合に限らない。すなわち、通常エリアの各メモリセルが保持可能なデータのビット数と、拡張エリアの各メモリセルが保持可能なデータのビット数とが等しくても良い。この場合、両者が１ビットデータを保持しても良いし、あるいは両者が多ビットデータを保持しても良い。そして通常エリアと拡張エリアとを、ビット数では無く、その他の様々な特性の違いで使い分けても良い。
【００９０】
また、上記実施形態で説明したメモリコントローラによって実行される機能の一部または全ては、半導体メモリ内で行っても良いし、ホスト機器で行っても良い。
【００９１】
更に、予備ブロック数を算出する式は実施形態で説明した（１）式に限定されず、必要な予備ブロック数を算出できれば、減算、加算、掛算、及び／または割算などを加えても良い。また、上記説明したフローチャートは、図示した順序には限らず、可能な限り順序を入れ替えても良いし、または複数の処理を同時に行っても良い。
【００９２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００９３】
１…メモリシステム、１０…ホスト機器、２０…メモリコントローラ、２１…ホストインターフェイス、２２…内蔵メモリ、２３…メモリインターフェイス、２４…ＣＰＵ、３０…ＮＡＮＤ型フラッシュメモリ
【図１】
2013068993.tif 000003
【図２】
2013068993.tif 000004
【図３】
2013068993.tif 000005
【図４】
2013068993.tif 000006
【図５】
2013068993.tif 000007
【図６】
2013068993.tif 000008
【図７】
2013068993.tif 000009
【図８】
2013068993.tif 000010
【図９】
2013068993.tif 000011
【図１０】
2013068993.tif 000012
【図１１】
2013068993.tif 000013
【図１２】
2013068993.tif 000014
【図１３】
2013068993.tif 000015