(57)【要約】【課題】メインフラッシュメモリと交替フラッシュメモリとライトキャッシュメモリとを搭載する半導体記憶装置において、ライトキャッシュメモリ用のＲＡＭを削減する。【解決手段】メインメモリチップとその交替用のサブメモリチップとを持つ半導体記憶装置において、各メインメモリチップは不良化したメモリブロックの代替先として同一チップ内に複数の予備メモリブロックを持つ。そして、メインメモリチップで、代替先として未使用の予備メモリブロックの残り数が第１の所定値に達したことを検出したときに、サブメモリチップ内のメモリブロックのフォーマット処理を開始する。また、メインメモリチップの未使用の予備メモリブロックの残り数が第２の所定値になった時には、そのサブメモリチップ内のメモリブロックのフォーマット処理をバイパスしながら、メインメモリチップへの読み書きをサブメモリチップに切り替える。【選択図】図１
2008117195.tif 000002
【特許請求の範囲】
【請求項１】
一括消去が可能な不揮発性のメモリブロックを複数備えた第１のメモリチップと、
一括消去が可能な不揮発性のメモリブロックを複数備えた第２のメモリチップと、
前記第１のメモリチップと前記第２のメモリチップを制御するコントローラと、
を有する半導体記憶装置であって、
前記コントローラは、
前記第１のメモリチップの前記メモリブロックの一部を、読み書きを行う使用中のメモリブロックとして割り当てる使用メモリブロック割り当て部と、
前記第１のメモリチップの前記メモリブロックの一部を予備のメモリブロックとして割り当てる予備メモリブロック割り当て部と、
前記第１のメモリチップの使用中のメモリブロックの劣化を検知する劣化検知部と、
前記劣化が検知された前記第１のメモリチップの使用中のメモリブロックに代わって、前記第１のメモリチップの予備のメモリブロックを前記使用中のメモリブロックとして切り換えるチップ内ブロック切換部と、
前記第１のメモリチップの未使用の前記予備のメモリブロックの数を検知し、前記未使用の予備のメモリブロックの数が第１の所定値となったか否かを判定する予備メモリブロック残数判定部と、
前記記第１のメモリチップの未使用の前記予備のメモリブロックの数が前記第１の所定値となったときに、前記第２のメモリチップのメモリブロックの初期化を開始するメモリブロック初期化部と、
前記第１のメモリチップの未使用の前記予備のメモリブロックの数が第２の所定値となったか否かを判定するメモリチップ切換判定部と、
前記第１のメモリチップの未使用の前記予備のメモリブロックの数が前記第２の所定値となっときに、前記初期化が完了した第２のメモリチップのメモリブロックを、前記第１のメモリチップに代わって使用中のメモリブロックとして割り当てるメモリチップ切換部と、
前記第１の所定値は、
前記第１のメモリチップの劣化の進行速度と、前記メモリブロック初期化部が実行する初期化の速度に基づいて、前記メモリブロック初期化部が前記初期化を開始した後に、前記第１のメモリチップの未使用の前記予備のメモリブロックの数が第２の所定値となる以前に、前記第２のメモリチップの前記メモリブロックの初期化を完了する値に設定されたことを特徴とする請求項１に記載の半導体記憶装置。
【請求項２】
前記劣化の進行速度は、
単位時間当たりに前記未使用の予備のメモリブロックを使用中のメモリブロックとして割り当てた数であることを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記コントローラは、前記初期化処理が完了した後、前記第１のメモリチップの未使用の前記予備のメモリブロックの数が前記第２の所定値となるまでの間に、前記初期化処理が完了した前記第２のメモリチップの前記メモリブロックに格納されたデータが有効であるか否かを判定する検証処理を実行することを特徴とする請求項１に記載の半導体記憶装置。
【請求項４】
前記コントローラは、前記検証処理を所定の間隔で繰り返して実行することを特徴とする請求項３に記載の半導体記憶装置。
【請求項５】
前記コントローラは、前記第１のメモリチップの前記メモリブロックを消去した回数が第３の所定値となる度に前記検証処理を実行し、前記回数をリセットしてから前記消去した回数の計数を再開することを特徴とする請求項４に記載の半導体記憶装置。
【請求項６】
一括消去が可能な不揮発性のメモリブロックを複数含むメモリチップを有する第１のメモリモジュールと、
前記第１のメモリモジュールのメモリチップを制御する第１のチップコントローラと、
一括消去が可能な不揮発性のメモリブロックを複数含むメモリチップを有する第２のメモリモジュールと、
前記第２のメモリモジュールのメモリチップを制御する第２のチップコントローラと、
前記第１のチップコントローラと前記第２のチップコントローラと通信を行って、前記第１のメモリモジュールと第２のメモリモジュールを制御するメモリモジュールコントローラとを有する半導体記憶装置であって、
前記第１のチップコントローラは、
前記第１メモリモジュールを構成する前記メモリチップ内の前記メモリブロックの一部を、読み書きを行う使用中のメモリブロックとして割り当てる使用メモリブロック割り当て部と、
前記第１のメモリモジュールを構成する前記メモリチップ内の前記メモリブロックの一部を予備のメモリブロックとして割り当てる予備メモリブロック割り当て部と、
前記第１のメモリモジュールの前記使用中のメモリブロックの劣化を検知する劣化検知部と、
前記劣化が検知された前記第１のメモリモジュールの前記使用中のメモリブロックに代わって、前記第１のメモリモジュールの予備のメモリブロックを前記使用中のメモリブロックとして割り当てるモジュール内ブロック切換部と、
前記第１のメモリモジュール内の未使用の前記予備のメモリブロックの数を検知し、前記未使用の予備のメモリブロックの数が第１の所定値となったか否かを判定する予備メモリブロック残数判定部と、
前記記第１のメモリモジュール内の未使用の前記予備のメモリブロックの数が前記第１の所定値となったことを前記メモリモジュールコントローラに通知する第１の通知部と、
を備え、
前記メモリモジュールコントローラは、
前記記第１のメモリモジュールから前記未使用の前記予備のメモリブロックの数が前記第１の所定値となった通知を受信したときに、前記第２のメモリモジュールの第２のチップコントローラに対して、前記メモリチップのテストを実行するように指令するテスト指令部を有することを特徴とする半導体記憶装置。
【請求項７】
前記第２のチップコントローラは、
前記メモリモジュールコントローラからのテストの指令を受信したときに、前記メモリチップが正常に動作するか否かを検証するテスト実行部を有することを特徴とする請求項６に記載の半導体記憶装置。
【請求項８】
前記第１のチップコントローラは、
前記記第１のメモリモジュール内の未使用の前記予備のメモリブロックの数が第２の所定値となったことを前記メモリモジュールコントローラに通知する第２の通知部を有し、
前記メモリモジュールコントローラは、
前記記第１のメモリモジュールから前記未使用の前記予備のメモリブロックの数が前記第２の所定値となった通知を受信したときに、前記第１のメモリモジュールに代わって読み書きを行うデータの格納先として前記第２のメモリモジュールを割り当てるメモリモジュール切換部を有することを特徴とする請求項６に記載の半導体記憶装置。
【請求項９】
前記第１または第２のメモリチップに書き込むデータを一時的に格納するキャッシュメモリをさらに備え、
前記コントローラは、前記第１のメモリチップと前記第２のメモリチップ及び前記キャッシュメモリを制御することを特徴とする請求項１に記載の半導体記憶装置。
【請求項１０】
前記第１または第２のメモリモジュールに書き込むデータを一時的に格納するキャッシュメモリをさらに備え、
前記メモリモジュールコントローラは、
前記第１のチップコントローラと前記第２のチップコントローラと通信を行って、前記第１のメモリモジュールと第２のメモリモジュール及び前記キャッシュメモリを制御することを特徴とする請求項６に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電気的に書き換え可能な不揮発性メモリを使用した半導体記憶装置に関し、特に不揮発性メモリとしてフラッシュメモリを用い、メモリ故障時または劣化時における代替メモリの制御方法に関する。
【背景技術】
【０００２】
一般的に、フラッシュメモリは書き換えできない先天的に不良なメモリブロックを多くとも数パーセントの割合で含む半導体メモリであり、不良メモリブロックを使用しないように扱う必要がある。そのため、データの読み書きに利用する前には、ブロック内の特定アドレスから当該メモリブロックが正常か不良かを示す特徴データを読み出し、使用可能な正常ブロックならば正常であることを示す管理情報をそのブロックに書き込む、といったフォーマット処理が必要である。また、フラッシュメモリは、メモリブロックを１０万回以上書き換えると、劣化により後天的にも不良化することがあり、当該ブロックは書き換え不能となる（ただし、読出しは可能。）。その場合、半導体記憶装置の保全を目的として、ブロック代替を行う。すなわち、不良化したブロックのデータを未使用の正常ブロックに移動し、論理的なアドレスの割り当てを切り替える。なお、代替先の正常ブロックの所在は、同一メモリチップでも他のメモリチップでもよい。
【０００３】
特許文献１には、メインフラッシュメモリと交替フラッシュメモリとライトキャッシュメモリとを搭載する半導体記憶装置が記載されている。メインフラッシュメモリにおいて寿命または故障となったブロックが検出されたときは、この不良ブロックへの記録を交替フラッシュメモリのブロックに切り替える。なお、ライトキャッシュメモリは、半導体記憶装置におけるライト・レイテンシを改善するためのライトデータキャッシュとして機能するＲＡＭである。また、特許文献２には、フラッシュメモリ、処理装置、表示ランプを有する記憶装置が記載されている。処理装置は予備記憶領域の残容量が設定容量に達したら、表示ランプを制御し、保守作業を行うオペレータ等にフラッシュメモリが書き換え寿命に近くなったことを知らせる手段を提供している。
【特許文献１】特開平５−２１６７７５号公報
【特許文献２】特開２０００−１８１８０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記特許文献１のような構成の半導体記憶装置は、メインフラッシュメモリの不良ブロックへの記録を交替フラッシュメモリのブロックに切り替える際に、交替フラッシュメモリのブロックのフォーマット処理を行う必要がある。その処理中にホストから当該不良ブロックに割り当てられた論理アドレスに対するライト要求が頻繁に来ると、交替フラッシュメモリがまだ書き込み可能な状態でないため、そのライトデータを全てライトキャッシュメモリに蓄積しなければならない。これに対応するため、ライトキャッシュメモリとして大容量のＲＡＭを搭載する必要があるという問題がある。
【０００５】
また、ライトキャッシュメモリを備えていない半導体記憶装置の場合では、メインフラッシュメモリの不良ブロックへの読み書きを交替フラッシュメモリのブロックに切り替える際に、交替フラッシュメモリのブロックのフォーマット処理を行うと、フォーマット処理が完了するまで半導体記憶装置の読み書きができないという問題がある。
【０００６】
そこで、本発明は上記問題点に鑑みてなされたもので、不良が生じたメインフラッシュメモリへのアクセスを交替フラッシュメモリへ切り換える際に、迅速な切り換えを実現することを目的とし、また、ライトキャッシュメモリを用いる場合ではＲＡＭの容量が増大するのを抑制することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、複数のメインメモリチップ（第１のメモリチップ）と交替用のサブメモリチップ（第２のメモリチップ）とを持つ半導体記憶装置において、それぞれのメインメモリチップは不良化したメモリブロックの代替先として同一チップ内に複数の予備メモリブロックを持つ。そして、ある１つのメインメモリチップで、代替先として未使用の予備メモリブロックの残り数が第１の所定値（例えば１）に達したことを検出したときに、ある１つのサブメモリチップ内のメモリブロックのフォーマット（初期化）処理を開始する。そして、そのメインメモリチップの未使用の予備メモリブロックの残り数が第２の所定値（例えば０）になるまでにはフォーマット処理を完了させることを特徴とする半導体記憶装置を提供する。
【０００８】
また、本発明は、サブメモリチップのフォーマット処理後から切り替え開始までの期間に、メインメモリチップの劣化進行度（メモリブロックを消去した回数）に応じて、定期的にサブメモリチップのデータ検証を行うことを特徴とする半導体記憶装置を提供する。
【０００９】
また、半導体記憶装置へ書き込むデータを一時的に蓄積するキャッシュメモリを備える。
【発明の効果】
【００１０】
本発明によれば、メインメモリチップへの記録をサブメモリチップに切り替える際に、サブメモリチップ内のブロックのフォーマット処理をバイパスすることができ、フォーマットに要する時間を削減できる。また、ライトキャッシュメモリを備える場合には、メインメモリチップへの記録をサブメモリチップに切り替えるまでの間にライトキャッシュメモリに蓄積されるライトデータ量が削減されるため、半導体記憶装置に搭載すべきライトキャッシュ用のＲＡＭの容量を縮小でき、製造コストを低減できるという効果を奏する。
【００１１】
また、本発明によれば、フォーマットされたサブメモリチップの使用開始までに長時間の待機が必要な場合に、リテンション（電荷保持）不良による致命的なデータ化けの発生が保全されるため、信頼性が向上するという効果を奏する。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施の形態を図面を参照して説明する。
【００１３】
＜第１実施形態＞
以下、本発明の第一の実施形態について説明する。
【００１４】
図１は、第一の実施形態における半導体記憶装置１０００の内部構成を簡単に表したブロック図である。半導体記憶装置１０００は、ホストインタフェース１０１０、メモリチップコントローラ１０２０、ライトキャッシュメモリ１０３０、メインメモリチップ１０４０、サブメモリチップ１０５０で構成される。
【００１５】
ホストインタフェース１０１０は外部のホストと接続されるインタフェース機構であり、ホストからのリード／ライト要求コマンドに応答して、記憶されたリードデータをホストに送信したり、記憶すべきライトデータをホストから受信する。なお、ホストは、リード／ライトを要求するデータの格納位置を論理アドレスによって指定する。この論理アドレスはメインメモリチップ１０４０、サブメモリチップ１０５０を直接アクセスする時に用いる物理的なアドレスとは異なる仮想的なアドレスである。
【００１６】
ホストインタフェース１０１０の機構およびコマンドやデータの送受信のプロトコルについては、標準的なハードディスク装置と互換性のあるインタフェース仕様（例えば、パラレルＡＴＡ、シリアルＡＴＡ、ＳＣＳＩ）に準拠することが好ましい。
【００１７】
ライトキャッシュメモリ１０３０は、主にＲＡＭにより構成される揮発性メモリであり、データの一時的な格納やキャッシュメモリとして機能する。ホストからのライト要求によって受信したライトデータは、一時的にライトキャッシュメモリ１０３０に格納され、その時点でホストにデータライト完了が報告される。そして、ホストからのアクセスがない時間帯に、また、ライトキャッシュメモリ１０３０がオーバーフローすることがないように、メインメモリチップ１０４０（あるいはサブメモリチップ１０５０）の所定のメモリチップ内の所定の位置に書き込まれる（デステージされる）。さらに、ホストからのリード要求に応答して送信すべきリードデータが、ライトキャッシュメモリ１０３０に存在するときは、メモリチップ内の所定の位置から読み出す代わりにライトキャッシュメモリ１０３０から読み出す。
【００１８】
メモリチップコントローラ１０２０は、ホストインタフェース１０１０、ライトキャッシュメモリ１０３０、メインメモリチップ１０４０、サブメモリチップ１０５０と接続され、それらを制御するマイクロプロセッサである。これは、上に述べたような、ホストからのリード／ライト要求の解釈、ホストとの間のデータ送受信、ライトキャッシュメモリ１０３０へのアクセス（リード／ライト）、各フラッシュメモリチップへのアクセス（リード／ライト／消去）を実行する。また、メモリチップコントローラ１０２０は、ホストから指定された論理アドレスがどのフラッシュメモリチップ内のどの格納位置に対応するかをアドレス変換テーブルによって管理している。メモリチップコントローラ１０２０は、ＲＡＭなどの揮発性メモリを搭載し、半導体記憶装置１０００の電源投入時にその一部にそのアドレス変換テーブルを作成する（どのように作成するかは後述する）。さらに、メモリチップコントローラ１０２０は、各フラッシュメモリチップに格納されるデータを保障するためのＥＣＣ（エラー訂正コード）の計算や検証も実行する。
【００１９】
メインメモリチップ１０４０は、複数のフラッシュメモリチップ（例えば、チップＡ１０４１、チップＢ１０４２、チップＣ１０４３、チップＤ１０４４の４個）から構成されるメモリチップ群である。サブメモリチップ１０５０は、複数のフラッシュメモリチップ（例えば、チップＥ１０５１、チップＦ１０５２の２個）から構成されるメモリチップ群である。
【００２０】
上記のメモリチップＡ〜Ｆは、いずれもページを単位としてメモリチップコントローラ１０２０によってライトされ、複数（例えば、１２８個）のページからなるメモリブロックを単位として消去される構造を持った不揮発性半導体メモリである。各チップＡ〜Ｆには複数（例えば、４０９６個）のメモリブロックが含まれる。一般に、フラッシュメモリには先天的に不良なメモリブロックが多くとも数パーセントの割合で含まれる。
【００２１】
図３において、メモリブロック３０１０はメモリチップ内の各メモリブロックの内部構成を示す。メモリブロック３０１０は１２８個のページで構成される。各ページは、先頭から２０４８バイトのデータ領域３０３１と、その後ろに６４バイトの管理領域３０３２を持つ。データ領域３０３１は、主にホストから受信したデータを格納するための領域である。管理領域３０３２は、主にそのページの管理に関連する情報を格納するための領域である。未使用（出荷時の状態）のメモリチップでは、正常なメモリブロックを構成する全てのページの内容は“ＦＦ”バイトで満たされている。そうでないメモリブロックは先天的不良である。
【００２２】
メインメモリチップ１０４０を構成する各メモリチップ内には、半導体記憶装置１０００の製造段階で論理アドレスが割り当てられたページを持つメモリブロックが複数含まれる。論理アドレスが割り当てられたページを持つメモリブロックは、図１で“使用中”と記されている。これらのメモリブロックには先天的に不良でない（つまり正常な）メモリブロックが適用される。使用中のメモリブロックが正常に読み書きできる状態である限り、ホストから受信したライトデータはこれらのメモリブロックのいずれかに記憶され、ホストに送信するリードデータはこれらのメモリブロックのいずれかから読み出される。また、メインメモリチップ１０４０を構成する各メモリチップ内には、論理アドレスが割り当てられていないページを持つ正常なメモリブロックも複数含まれる。それらは、図１で“予備”と記されている。予備のメモリブロックは使用中のメモリブロックが後天的に不良化した際に代替先ブロックとして利用される。半導体記憶装置１０００が長時間稼働すると、使用中のメモリブロックは多数回の消去とライトが行われる。使用中のメモリブロックは劣化していき、いずれ不良化する（書き換え不能になる）。よって、不良化したブロックが発生するたびに、予備のメモリブロックは徐々に消費されていく。
【００２３】
図２は、チップＡ１０４１を例に、不良化したメモリブロックの代替手順を示す図である。ホストからのライト要求で指定された論理アドレスＸが、使用中メモリブロック２０１１内のページに割り当てられていた場合、メモリチップコントローラ１０２０は、まず、ブロック２０１１の内容（元データ）をキャッシュメモリに退避する。
【００２４】
次に、メモリチップコントローラ１０２０は、ブロック２０１１を消去し、受信したライトデータでライトキャッシュメモリ１０３０上の元データの一部を書き換え、そのライトデータを消去したブロック２０１１に書き込む。その際、エラーが発生したならば、そのブロックは不良メモリブロック２０１２となる。メモリチップコントローラ１０２０は、論理アドレスＸを予備メモリブロック２０２１内の所定のページに割り当て、エラーにより書き込めなかったライトデータを予備メモリブロック１０２１に書き込む。そして、ライトデータが書き込まれたメモリブロックは使用中メモリブロック２０２２となる。以上の代替処理の結果として、チップＡ１０４１の予備メモリブロックの残数は３から２へと減少する。
【００２５】
サブメモリチップ１０５０を構成するメモリチップ内のメモリブロックには、半導体記憶装置１０００の製造段階では全く未使用であり、その中のいずれのページにも論理アドレスが割り当てられていない。サブメモリチップ１０５０においても、未使用のメモリブロックの多くは正常なブロックであるが、先天的に不良なブロックも含まれる。それらのメモリブロックは、図１でそれぞれ“正常”、“不良”と記されている。半導体記憶装置１０００が長時間稼働して、メインメモリチップ１０４０のいずれかのメモリチップ（例えば、チップＢ１０４２）内の予備のメモリブロックが使い尽くされる（残数がゼロになる）と、チップＢ１０４２内のページに割り当てられた論理アドレスへのライトデータは、それ以降はサブメモリチップ１０５０のいずれかのメモリチップ（例えば、チップＥ１０５１）内のメモリブロックに記憶される。無論、その新しいメモリブロックとしては正常なメモリブロックが使用される。
【００２６】
サブメモリチップ１０５０の中の未使用のメモリチップ（例えば、チップＥ１０５１）のメモリブロックに、メインメモリチップ１０４０のメモリブロックの代替としてデータを記憶できるようにするためには、事前にメモリチップコントローラ１０２０が未使用のチップＥ１０５１のフォーマット（初期化）処理を行う必要がある。以下、未使用チップフォーマット処理の内容を示す。
【００２７】
第一に、メモリチップコントローラ１０２０は、チップＥ１０５１を構成する各メモリブロック３０１０の正常／不良を判定する。その判定はベンダが推奨する以下の基準に従って行う。
（１）先頭ページ３０２１（図３参照）において、データ領域３０３１の先頭バイト３０４１、あるいは管理領域３０３２の先頭バイト３０４２の値が“ＦＦ”であること。
（２）最終ページ３０２２（図３参照）において、データ領域３０３１の先頭バイト３０４３、あるいは管理領域３０３２の先頭バイト３０４４の値が“ＦＦ”であること。
上記条件（１）と（２）を共に満足すれば、そのメモリブロックは正常と判定し、さもなくば先天的不良とみなす。
【００２８】
第二に、正常と判定された複数のメモリブロックを“予備”のブロックとして管理する。図３において、ページ３０２３はサブメモリチップ１０５０の予備のブロックを構成する各ページの構造を示している。各ページ３０２３について、メモリチップコントローラ１０２０は、データ領域３０５１にはデフォルト値としてゼロを書き、管理領域の先頭バイト３０６１には“予備”を意味する値“５５”を書き、後続の領域３０７１にはゼロを書く。そして、そのページ全体に対するＥＣＣを計算し、末尾８バイトの領域３０８１に求めたＥＣＣを書く。
【００２９】
以上が未使用チップフォーマット処理である。なお、この未使用チップフォーマット処理は半導体記憶装置１０００の製造段階で行うよりも、そのチップの使用を開始する直前に行うことが好ましい。なぜなら、サブメモリチップ１０５０のそれぞれのチップがフォーマット後から代替先として使用されるまでに長い時間（例えば１０年）が経過すると、それらのチップに格納されたデータがフラッシュメモリセルのリテンション不良などにより致命的なデータ化けを起してしまう可能性があり、信頼性が低下するからである。
【００３０】
本発明によれば、メモリチップコントローラ１０２０は、この未使用チップフォーマット処理を、チップＢ１０４２内の予備のメモリブロックの残数がわずか（例えば、１個）になった時点で行う。これにより、ホストからのライトデータの記憶先をチップＢ１０４２からチップＥ１０５１への切り替える際に行うべき処理の量が従来よりも削減される。
【００３１】
切り替え処理中はライトキャッシュメモリ１０３０上のライトデータをデステージできないため、その間にホストから受信したライトデータはライトキャッシュメモリ１０３０に蓄積される。本発明により、切り替え処理中にライトキャッシュメモリ１０３０に蓄積されるライトデータ量が削減されるため、ライトキャッシュメモリ１０３０用に半導体記憶装置１０００に搭載すべきＲＡＭの容量を縮小できるという効果を奏する。
【００３２】
図４のタイミングチャートを用いて、第一の実施形態におけるチップＢ１０４２からチップＥ１０５１への代替の過程を示す。ただし、横軸に時間をとり、チップＢ１０４２およびチップＥ１０５１が稼働している期間（書き込み対象となっている期間）を実線で示す。チップＥ１０５１が稼働待機している期間を破線で示す。
【００３３】
まず、時刻Ｔ４００１に、チップＢ１０４２内の予備のメモリブロックの残数が第１の所定値（例えば１個）になったという事象４０１１が起こる。メモリチップコントローラ１０２０は予備メモリブロックの残数を監視し、残数が第１の所定値となったことを契機としてチップＥ１０５１に対して前述のフォーマット処理を開始する。このフォーマット処理は、半導体記憶装置１０００の性能低下を防ぐため、時刻Ｔ４００１以降でホストからのアクセスがない時間帯に少しずつフォーマットを行うことが好ましい。例えば、ホストからのアクセスが無いときにサブメモリチップ１０５０の所定のメモリブロックについてフォーマットを開始し、ホストからのアクセスがあればフォーマットを中断し、アクセスが完了するとフォーマットを再開し、断続的にフォーマットを実行することができる。
【００３４】
次に、時刻Ｔ４００２に、チップＢ１０４２内の予備のメモリブロックの残数が第２の所定値（例えば、０個）になったという事象４０１２（メモリチップコントローラ１０２０が残数＝０を検知したこと）が起こる。メモリチップコントローラ１０２０は、予備メモリブロックの数を監視して予備メモリブロックの残数が０となったことを契機としてチップＥ１０５１の使用を開始する（４０２２）。時刻Ｔ４００２以降、メモリチップコントローラ１０２０はチップＢ１０４２内のメモリブロックは読み取り専用とし、書き換えを禁止する。
【００３５】
時刻Ｔ４００２以降、メモリチップコントローラ１０２０は、チップＢ１０４２内のページに割り当てられている論理アドレスＸに対してホストからのリード要求があれば、チップＢ１０４２内の対応ページからデータをリードするが、論理アドレスＸに対してホストからのライト要求があれば、アドレス変換テーブル内の論理アドレスＸに対応するページアドレス情報を書き換え、チップＥ１０５１内の予備メモリブロックに含まれるページを指すようにアドレス変換テーブルを変更する。そしてメモリチップコントローラ１０２０は、論理アドレスＸに対応する新たなデータ格納位置であるチップＥ１０５１の該当ページにデータをライトする。このとき、サブメモリチップ１０５０のチップＥ１０５１のページのデータ構造は図３のページ３０２４のようになる。
【００３６】
すなわち、データ領域３０５２にはホストから受信したライトデータが書かれ、管理領域の先頭バイト３０６２には“使用中”を意味する値“ＡＡ”が書かれ、後続の領域３０７２にはそのページに割り当てられた論理アドレスＸが書かれる。そして、ページ全体３０２４に対するＥＣＣを計算し、ページ３０２４の末尾８バイトの領域３０８２に計算したＥＣＣが書き込まれる。論理アドレスＸに対する以後のホストからのリード／ライト要求に際しては、メモリチップコントローラ１０２０は、チップＥ１０５１内の論理アドレスＸに対応するページをアクセスする。
【００３７】
以上のような処理により、チップＢ１０４２からチップＥ１０５１への代替が徐々に進行する。そして、チップＢ１０４２内のページに割り当てられていた全ての論理アドレスに対するホストからのリード／ライト要求が、チップＥ１０５１のみのリード／ライトアクセスにより実施されるようになり、チップ代替が完了する（４０１３）。その時刻が時刻Ｔ４００３である。
【００３８】
図３のページ３０２４に示すように、半導体記憶装置１０００において使用中のメモリブロックの各ページには、それに対応する論理アドレスが記載される。半導体記憶装置１０００の電源投入時に、メモリチップコントローラ１０２０は、それらのページに記載された論理アドレスを読み出し、その情報に基づいてＲＡＭ上に前述のアドレス変換テーブルを作成する。
【００３９】
図５は、チップＥ１０５１のフォーマットに至るまでにメモリチップコントローラ１０２０が行う処理の一例を示すフローチャートである。まず、ホストが半導体記憶装置１０００にライトアクセスすることによって、メモリチップコントローラ１０２０はメインメモリチップ１０４０のチップＢ１０４２に対してライトまたは消去のアクセスを行う（Ｓ５０１０）。チップＢ１０４２でのライト又は消去のアクセス結果がエラーならば（Ｓ５０２０）、メモリチップコントローラ１０２０は、エラーが発生したブロックをチップＢ１０４２内の予備メモリブロックへ代替する処理を行う（Ｓ５０３０）。予備メモリブロックへの代替が完了したすると、チップＢ１０４２から予備メモリブロックの残数は１つ減る。次に、メモリチップコントローラ１０２０は、チップＢ１０４２予備メモリブロックの残数を調べ、残数が１個であるならば（Ｓ５０４０）、サブメモリチップ１０５０のチップＥ１０５１のフォーマット処理を開始する（Ｓ５０５０）。
【００４０】
ここで、メモリチップコントローラ１０２０がサブメモリチップ１０５０の所定のチップＥ１０５１の初期化を開始するトリガとなる第１の所定値（残数＝１）は、メモリチップコントローラ１０２０がチップＥ１０５１をフォーマットに要する時間（フォーマットの速度）と、メインメモリチップ１０４０のチップＢ１０４２の予備メモリブロックの数が第２の所定値（残数＝０）となるまでの時間（劣化の進行速度）に応じて決定すればよい。例えば、単位時間当たりの予備メモリブロックの数の減少速度である劣化の進行速度が大きい場合では、第１の所定値を２個などの大きい値に設定しておくことで、サブメモリチップ１０５０の初期化を確実に完了させた後に、書き込み先をチップＥ１０５１に切り換えることができる。あるいは、ホストからのアクセス頻度が大きい場合も、第１の所定値の値を大きく設定しておく。この場合、ホストからのアクセスを阻害しないようにサブメモリチップ１０５０のフォーマットを実行しなければならないので、フォーマットを実行する時間を確保しにくい。このため、フォーマットに要する時間はほぼ一定であっても、ホストからの頻繁なアクセスを行いながらフォーマットを開始し、完了するまでの時間はアクセス頻度が低いときよりも長くなる。そこで、第１の所定値を大きな値としておくことで、予備メモリブロックの数が０となるまでに代替先のチップＥ１０５１のフォーマットを確実に完了させることができる。
【００４１】
また、メモリチップコントローラ１０２０がサブメモリチップ１０５０の所定のチップＥ１０５１の初期化を開始するか否かを決定する第１の所定値は、メインメモリチップ１０４０の予備メモリブロックを消費する速度である劣化の進行速度（単位時間当たりの残数の減少量）と、サブメモリチップ１０５０のチップＥ１０５１の所定のブロックをフォーマットする速度（単位時間当たりにフォーマットするバイト数など）に基づいて予め決定することができる。つまり、まず、実験などによりメインメモリチップ１０４０の予備メモリブロックを消費する速度を求めておく。そして、サブメモリチップ１０５０の所定のチップＥ１０５１のブロックのサイズ（記憶容量）のフォーマットに要する時間を、メモリチップコントローラ１０２０の動作速度やサブメモリチップ１０５０の応答速度から決まるフォーマットの速度から求めておく。メインメモリチップ１０４０の予備メモリブロックの残数が第１の所定値となってから、サブメモリチップ１０５０のチップＥ１０５１の所定のブロックについてフォーマットを開始してから、メインメモリチップ１０４０で上記劣化の進行速度で予備メモリブロックを消費したときに、残数が第２の所定値に達する以前にフォーマットが完了するように第１の所定値を設定するのである。
【００４２】
なお、第２の所定値は、メインメモリチップ１０４０のチップＡ〜Ｄの劣化の進行に応じて書き込みを禁止する値である。つまり、チップＢ１０４２の予備メモリブロックの残数が第２の所定値に達した場合、メモリチップコントローラ１０２０は当該チップＢ１０４２への書き込みを禁止して、当該チップＢ１０４２に割り当てられた論理アドレスをサブメモリチップ１０５０のチップＥ１０５１へ切り換える。なお、第２の所定値の値は、上記では０として例を示したが、第１の所定値よりも小さい値であればよく、半導体記憶装置１０００の構成やメモリチップコントローラ１０２０の制御の内容などに応じて適宜設定すればよい。例えば、予備メモリブロックの消化速度が速く、予備メモリブロックのうちの一部をメモリチップコントローラ１０２０が制御のために使用している場合では、第１の所定値を「３」とし、第２の所定値を「１」としてもよい。このように、第２の所定値は、チップＡ〜Ｄの劣化の結果、当該チップへの書き込みを中止して、書き込み先をサブメモリチップ１０５０に代替するしきい値として用いる。
【００４３】
さらに、メモリチップコントローラ１０２０が、メインメモリチップ１０４０の予備メモリブロックの減少速度（単位時間当たりの予備メモリブロックの消費数）や、ホストからのアクセス頻度を検知して第１の所定値を変更するようにしても良い。この場合、メモリチップコントローラ１０２０は、予備メモリブロックの減少速度が大きい場合や、ホストからのアクセス頻度が多い場合に、第１の所定値を大きくするように変更することができる。
【００４４】
以上のように、メインメモリチップ１０４０のチップＡ〜Ｆで予備メモリブロックの数が、第１の所定値以下（上記の例では残数≦１）になると、メモリチップコントローラ１０２０は、近いうちに代替先となるサブメモリチップ１０５０の所定のチップについて初期化を開始しておく。
【００４５】
そして、メインメモリチップ１０４０への読み書きをサブメモリチップ１０５０に切り替える際には、既に初期化が完了しているサブメモリチップ１０５０のブロックを使用するので、サブメモリチップ１０５０内のブロックの初期化処理に要する時間が削減される。したがって、メインメモリチップ１０４０からサブメモリチップ１０５０へ記憶先を切り換える間にライトキャッシュメモリ１０３０に蓄積されるライトデータ量を削減できるので、半導体記憶装置１０００に搭載すべきライトキャッシュメモリ１０３０用のＲＡＭの容量を縮小でき、製造コストの低減を図ることが可能となる。
【００４６】
＜第２実施形態＞
以下、本発明の第２の実施形態について説明する。
【００４７】
第２の実施形態は、前記第１の実施形態の構成にサブメモリチップ１０５０内データの検証機能を追加して半導体記憶装置１０００の信頼性を高めたものである。すなわち、第１の実施形態で示したサブメモリチップ１０５０のフォーマット後からその使用開始までの過程において、フォーマットされたサブメモリチップ１０５０に格納されたデータがフラッシュメモリセルのリテンション不良などにより致命的なデータ化けを起していないかを各データに付加されたＥＣＣを利用して定期的に検証する処理を追加したものである。なお、その他の構成は前記第１実施形態と同様である。
【００４８】
一般に、フラッシュメモリのメモリブロックの寿命は個々のばらつきが大きいため、メモリチップ内の予備メモリブロックの数が残りわずかになってから長い間メモリブロックの故障が発生しないこともある。つまり、サブメモリチップ１０５０のフォーマット後からその使用開始までに非常に長い時間（例えば、１０年）が経過する可能性がある。その場合、メモリベンダが保証するフラッシュメモリのデータ保持期間は１０年であるため、サブメモリチップ１０５０の使用開始時点で一部のメモリブロックがデータ化けを起している可能性が高い。もしＥＣＣで訂正可能な範囲を超えるデータ化けを起したデータがあれば、このデータを含むメモリブロックは使用不能となる。その結果、サブメモリチップ１０５０内の不良メモリブロックの割合が大きくなり、半導体記憶装置１０００の信頼性は低下する。
【００４９】
そこで、本第２実施形態ではメインメモリチップ１０４０の劣化の進行度合いを示す指標（劣化指標）を利用して、サブメモリチップ１０５０に格納されたデータを定期的に検証する。例えば、その指標はメインメモリチップ内のメモリブロックが消去された回数であり、その回数が所定の値（例えば、１００００回）増えるたびに検証を実施する。
【００５０】
メモリチップコントローラ１０２０は、ＥＥＰＲＯＭや相変化ＲＡＭなどフラッシュメモリよりも高信頼の不揮発性メモリを搭載し、そこにメインメモリチップ１０４０の各メモリチップＡ〜Ｆについて、その中のメモリブロックが消去された回数を劣化の進行指標としてそれぞれ記録する領域を確保する。以下これを消去回数レジスタと呼ぶ。なお、消去回数レジスタに割り当てる領域としては、メモリチップコントローラ１０２０の記憶領域に限らず、メインメモリチップ１０４０の各メモリチップＡ〜Ｆ内のメモリブロックの一部を消去回数レジスタに適用してもよい。また、消去回数レジスタは、各チップＡ〜Ｆのブロック毎に設定されるものである。
【００５１】
図１においてメモリチップコントローラ１０２０は、メインメモリチップ１０４０の各メモリチップＡ〜Ｆ内のメモリブロックが消去されるたびに、それぞれの消去回数レジスタの値に“１”を加算する。その値が第３の所定値（例えば、“１００００”）に達するたびに、フォーマット処理が済んだサブメモリチップ１０５０に格納されたデータの検証を実施し、その値を“０”にクリアする。
【００５２】
図６のタイミングチャートを用いて、第２の実施形態におけるチップＢ１０４２からチップＥ１０５１への代替の過程を示す。ただし、横軸に時間をとり、チップＢ１０４２およびチップＥ１０５１が稼働している期間を実線で示す。また、チップＥ１０５１が稼働待機している期間を破線で示す。
【００５３】
まず、時刻Ｔ６００１で、チップＢ１０４２内の予備のメモリブロックの残数が第１の所定値（例えば、１個）になったという事象６０１１が起こる。メモリチップコントローラ１０２０は予備メモリブロックの残数を監視し、残数が第１の所定値となったことを契機としてメモリチップコントローラ１０２０は、チップＥ１０５１に対して前述のフォーマット処理を開始する。このフォーマット処理は、時刻Ｔ６００１以降でホストからのアクセスがない時間帯において、ライトキャッシュメモリ１０３０内の蓄積データ量が十分少ない時に、少しずつ行うことが好ましい。
【００５４】
次に、時刻Ｔ６００２では、チップＢ１０４２の消去回数レジスタの値が“１００００”になったという事象が起こる。メモリチップコントローラ１０２０は、各消去回数レジスタの値を監視し、この値が第３の所定値（例えば、１００００）となったことを契機としてチップＥ１０５１内の格納データのＥＣＣ検証を開始する（６０２２）。この処理は、ホストからのアクセスがない時間帯において、ライトキャッシュメモリ１０３０内の蓄積データ量が十分少ない時に、少しずつ行うことが好ましい。
【００５５】
消去回数レジスタは０にリセットされた後、さらに時刻Ｔ６００３にも、チップＢ１０４２の消去回数レジスタの値が第３の所定値である“１００００”になったという事象が起こる。メモリチップコントローラ１０２０は、上記Ｔ６００２と同様に、これを契機としてチップＥ１０５１内の格納データのＥＣＣ検証を開始する（６０２３）。
【００５６】
そして、時刻Ｔ６００４では、チップＢ１０４２内の予備のメモリブロックの残数が第２の所定値（例えば、０個）になったという事象６０１４（メモリチップコントローラ１０２０が残数＝０を検知したこと）が起こる。メモリチップコントローラ１０２０は、これを契機としてチップＥ１０５１の使用を開始する（６０２４）。時刻Ｔ６００４以降、メモリチップコントローラ１０２０は、チップＢ１０４２内のメモリブロックは読み取り専用とし、書き換えを禁止する。
【００５７】
時刻Ｔ６００４以降、メモリチップコントローラ１０２０は、チップＢ１０４２内のページに割り当てられている論理アドレスＸに対してホストからのリード要求があれば、チップＢ１０４２内の対応ページからデータをリードするが、論理アドレスＸに対してホストからのライト要求があれば、アドレス変換テーブル内の論理アドレスＸに対応するページアドレス情報を書き換え、チップＥ１０５１内の予備メモリブロックに含まれるページを指すようにアドレス変換テーブルを変更する。そしてメモリチップコントローラ１０２０は、論理アドレスＸに対応する新たなデータ格納位置であるチップＥ１０５１の該当ページにデータをライトする。また、論理アドレスＸに対する以後のホストからのリード／ライト要求に際しては、メモリチップコントローラ１０２０は、チップＥ１０５１内の論理アドレスＸに対応するページをアクセスする。
【００５８】
以上のような処理により、チップＢ１０４２からチップＥ１０５１への代替が徐々に進行する。そして、チップＢ１０４２内のページに割り当てられていた全ての論理アドレスに対するホストからのリード／ライト要求が、チップＥ１０５１のみのリード／ライトアクセスにより実施されるようになり、チップ代替が完了する（６０１５）。その時刻が時刻Ｔ６００５である。
【００５９】
図７は、チップＥ１０５１のフォーマットまたはＥＣＣ検証に至るまでにメモリチップコントローラ１０２０が行う処理の過程を示すフローチャートである。まず、ホストが半導体記憶装置１０００にライトアクセスすることによって、メモリチップコントローラ１０２０はメインメモリチップのチップＢ１０４２に対してライトまたは消去のアクセスを行う（Ｓ７０１０）。ホストからのアクセスが消去ならば、メモリチップコントローラ１０２０がチップＢ１０４２の該当ブロックの消去回数レジスタに“１”を加算する（Ｓ７０２０）。次に、Ｓ７０１０のアクセス結果がエラーならば（Ｓ７０３０）、メモリチップコントローラ１０２０はエラーが発生したブロックをチップＢ１０４２内の予備メモリブロックへ代替する処理を行い（Ｓ７０４０）、Ｓ７０５０に遷移する。そのとき、メインメモリチップ１０４０の予備メモリブロックの残数は１つ減る。
【００６０】
一方、Ｓ７０３０で結果がエラーでないならば、Ｓ７０７０に遷移する。Ｓ７０５０において、メモリチップコントローラ１０２０は、予備メモリブロックの残数を調べ、残数が第１の所定値（例えば１個）であるならばサブメモリチップ１０５０のチップＥ１０５１のフォーマット処理を開始し（Ｓ７０６０）、Ｓ７０７０に遷移する。Ｓ７０７０において、メモリチップコントローラ１０２０は、チップＢ１０４２の消去回数レジスタの値を調べ、この値が“１００００”であるならば、消去回数レジスタを“０”にクリアし（Ｓ７０８０）、Ｓ７０９０に遷移する。一方、消去回数レジスタの値が“１００００”でないならば、チップＥ１０５１に対して何も行わない。
【００６１】
Ｓ７０９０において、メモリチップコントローラ１０２０は、サブメモリチップ１０５０内にフォーマット済みのメモリチップ（すなわち、チップＥ１０５１）が存在するかを調べ、存在するならばチップＥ１０５１内の格納データのＥＣＣ検証処理を開始する（Ｓ７１００）。その後、ＥＣＣ検証処理において誤りを検出したならば（Ｓ７１１０）、メモリチップコントローラ１０２０が、訂正されたデータをチップＥ１０５１に再書き込みすることによって、格納データの誤り訂正を行う（Ｓ７１２０）。
【００６２】
このように、第２の実施形態によれば、サブメモリチップ１０５０の初期化処理の完了後から切り替え開始までの期間に、メインメモリチップ１０４０の劣化進行度に応じて、定期的にサブメモリチップ１０５０のデータ検証を行う。これにより、サブメモリチップ１０５０の使用開始まで長時間待機するような場合に、リテンション不良による致命的なデータ化けの発生が保全されるため、半導体記憶装置１０００の信頼性を向上させることが可能となる。
【００６３】
以上の第１および第２の実施形態の説明においては、サブメモリチップ１０５０のフォーマット処理開始の契機となる予備メモリブロックの残数は１個としているが、上述のようにメインメモリチップが書き換え不能になる時期が近いことを示す個数であれば何個でもよい。また、フォーマット処理やＥＣＣ検証処理を開始する契機としては上で示した事象に限定しない。メインメモリチップ１０４０が書き換え不能になる時期が近いことを示す事象、またはメインメモリチップ１０４０の劣化が何らかの基準まで進行していることを示す事象であればどのようなものでも適用可能である。例えば、メインメモリチップ１０４０に含まれる全メモリブロックの平均消去回数が１０万回を超えたという事象を契機としてメモリチップコントローラ１０２０がサブメモリチップ１０５０に対してフォーマット処理を開始してもよい。例えば、メモリチップコントローラ１０２０は、予備のメモリブロックの残数が２個になったという事象を契機としてサブメモリチップ１０５０に対してフォーマット処理を開始し、その後、予備のメモリブロックの残数が１個になったという事象を契機としてサブメモリチップ１０５０に対してＥＣＣ検証処理を開始してもよい。
【００６４】
また、上記では劣化の進行指標としてメモリブロックの消去回数を用いたが、これに限定されるものではなく、書き込み回数や使用開始からの時間などを劣化の進行指標として用いることができる。
【００６５】
また、チップＥ１０５１のフォーマット後、チップＢ１０４２の予備メモリブロックの残数がゼロになるまでの間に、チップＢ１０４２とチップＥ１０５１をＲＡＩＤ１のようにミラーリング動作させれば、チップＢ１０４２が書き換え禁止になった時点で、すぐにチップＢ１０４２の動作を停止させることも可能である。
【００６６】
＜第３実施形態＞
以下、本発明の第３の実施形態について説明する。
【００６７】
第３の実施形態は、複数の小規模フラッシュメモリモジュールを搭載した半導体記憶装置に本発明を適用したものである。
【００６８】
図８は、第３の実施形態における半導体記憶装置８０００の内部構成を簡単に表したブロック図である。半導体記憶装置８０００は、ホストインタフェース８０１０、メモリモジュールコントローラ８０２０、ライトキャッシュメモリ８０３０、メインメモリモジュール８０４０、サブメモリモジュール８０５０で構成される。
【００６９】
ホストインタフェース８０１０は外部のホストと接続されるインタフェース機構であり、ホストからリード／ライト要求コマンドに応答して、記憶されたリードデータをホストに送信したり、記憶すべきライトデータをホストから受信する。なお、ホストは、リード／ライトを要求するデータの格納位置をホスト論理アドレスによって指定する。この論理アドレスはメインメモリモジュール８０４０、サブメモリモジュール８０５０をアクセスする時に用いるモジュール論理アドレスとは異なる。
【００７０】
ホストインタフェース８０１０の機構およびコマンドやデータの送受信のプロトコルについては、標準的なハードディスク装置と互換性のあるインタフェース仕様（例えば、パラレルＡＴＡ、シリアルＡＴＡ、ＳＣＳＩ）に準拠することが好ましい。
【００７１】
ライトキャッシュメモリ８０３０は、主にＲＡＭにより構成される揮発性メモリであり、データの一時的な格納やキャッシュメモリとして機能する。ホストからのライト要求によって受信したライトデータは、一時的にライトキャッシュメモリ８０３０に格納され、その時点でホストにデータライト完了が報告される。そして、ホストからのアクセスがない時間帯に、また、ライトキャッシュメモリ８０３０がオーバーフローすることがないように、メインメモリモジュール８０４０（あるいはサブメモリモジュール８０５０）に書き込まれる（デステージされる）。さらに、ホストからのリード要求に応答して送信すべきリードデータがライトキャッシュメモリ８０３０に存在するときは、メモリチップ内の所定の位置から読み出す代わりにライトキャッシュメモリ８０３０から読み出す。
【００７２】
メモリモジュールコントローラ８０２０は、ホストインタフェース８０１０、ライトキャッシュメモリ８０３０、メインメモリモジュール８０４０、サブメモリモジュール８０５０と接続され、それらを制御するマイクロプロセッサである。これは、上に述べたような、ホストからのリード／ライト要求の解釈、ホストとの間のデータ送受信、ライトキャッシュメモリ８０３０へのアクセス（リード／ライト）、各メモリモジュールへのアクセス（リード／ライト）を実行する。また、メモリモジュールコントローラ８０２０は、ホストから指定されたホスト論理アドレスがどのメモリモジュールのモジュール論理アドレスに対応するかをアドレス変換テーブルによって管理している。メモリモジュールコントローラ８０２０は、ＥＥＰＲＯＭや相変化ＲＡＭなどフラッシュメモリよりも高信頼の不揮発性メモリを搭載し、その一部にそのアドレス変換テーブルを格納する。
【００７３】
メインメモリモジュール８０４０は、複数のフラッシュメモリモジュール（例えば、モジュールＡ８０４１、モジュールＢ８０４２、モジュールＣ８０４３、モジュールＤ８０４４の４個）から構成されるメモリモジュール群である。これらのモジュールには半導体記憶装置８０００の製造段階でホスト論理アドレスが割り当てられている。
【００７４】
サブメモリモジュール８０５０は、複数のフラッシュメモリモジュール（例えば、モジュールＥ８０５１、モジュールＦ８０５２の２個）から構成されるメモリモジュール群である。これらのモジュールには半導体記憶装置８０００の製造段階ではホスト論理アドレスが割り当てられていないが、メインメモリモジュール８０４０の一部が劣化により書き換え不能になると、メモリモジュールコントローラ８０２０によりホスト論理アドレスが割り当てられる。
【００７５】
上記のメモリモジュールＡ〜Ｆは、いずれも同じ構成であり、メモリモジュールコントローラ８０２０からモジュール論理アドレスを指定してそれらの格納データをリード／ライトする。以下、モジュールＡ８０４１を例にその構成や機能を示す。
【００７６】
モジュールＡ８０４１はＵＳＢ（Universal SerialBus）に準拠したインタフェース８０８１を有し、複数（例えば、３個）のフラッシュメモリチップ（８０７１、８０７２、８０７３）とそれらを制御するメモリチップコントローラ８０６１を搭載する。各メモリチップ（８０７１、８０７２、８０７３）は第１の実施形態でのメモリチップ（チップＡ１０４１など）と同じ構造・特性を持つ。メモリチップコントローラ８０６１は、ＵＳＢインタフェース８０８１及び各メモリチップ８０７１〜８０７３と接続され、それらを制御するマイクロプロセッサである。これは、メモリモジュールコントローラ８０２０からのリード／ライト要求の解釈、メモリモジュールコントローラ８０２０との間のデータ送受信、各メモリチップへのアクセス（リード／ライト／消去）を実行する。また、メモリチップコントローラ８０６１は、各メモリチップの使用中メモリブロックへのライト／消去においてエラーが発生したときに、エラーブロックをあらかじめ用意された予備メモリブロックに代替する機能を持つ。また、モジュールＡ８０４１内の未使用の予備メモリブロックの残数を管理する。予備メモリブロックの残数が第２の所定値（例えば、０個）になったとき、モジュールＡ８０４１は書き換え不能となる。
【００７７】
モジュールＡ８０４１のメモリチップコントローラ８０６１は、メモリモジュールコントローラ８０２０からのステータスリードコマンドに応答して、予備メモリブロックの残数値が第１の所定値（例えば、１個）になったこと（すなわちモジュールＡ８０４１が書き換え不能になる時期が近いこと）、さらにその残数値が第２の所定値（例えば、０個）になったこと（すなわちモジュールＡ８０４１が書き換え不能になったこと）をメモリモジュールコントローラ８０２０へ送信する機能を持つ。
【００７８】
メモリモジュールコントローラ８０２０は、上記ステータスリードコマンドでモジュールＡ８０４１が書き換え不能になる時期（予備メモリブロックの残数が第１の所定値となった時点）が近いことを検出すると、サブメモリモジュールの１つ（例えば、モジュールＦ８０５２）がデータを正常にリード／ライトできる状態であるかのテストを開始する。このテストは、例えば、モジュールＦ８０５２の各モジュール論理アドレスに対してメモリモジュールコントローラ８０２０が乱数データをライトし、そのアドレスから読み出したデータがライトしたデータに一致するかを調べることである。なお、このテストはホストからのアクセスがない時間帯において、ライトキャッシュメモリ８０３０内の蓄積データ量が十分少ない時に、少しずつ行うことが好ましい。例えば、ホストからのアクセスが無いときに各メモリチップのメモリブロックについてテストを開始し、ホストからのアクセスがあればテストを中断し、アクセスが完了するとテストを再開し、断続的にテストを実行することができる。また、テストの手法としては、ハードディスクドライブの記憶領域を検証するチェックディスクなどと同様の手法を用いることができる。
【００７９】
メインメモリモジュール８０４０の代替として搭載されたサブメモリモジュール８０５０内のメモリブロックは長い時間（例えば１０年）アクセスされないため、その中のメモリブロックに格納されたデータはフラッシュメモリセルのリテンション不良などによりデータ化けを起している可能性が高い。例えば、もしモジュールＦ８０５２内でメモリチップ制御に関する管理情報が格納されたメモリブロックが致命的なデータ化けを起していれば、モジュールＦ８０５２が代替モジュールとして正常に稼働しない恐れがある。
【００８０】
本発明によれば、メインメモリモジュールの１つが書き換え不能になる少し前に代替先のモジュールＦ８０５２が正常か異常かをメモリモジュールコントローラ８０２０が調査し、その結果が“異常”ならばサブメモリモジュール８０５０内の別のモジュール（例えば、モジュールＥ８０５１）を代わりに使用するなどの対応をとることができるため、半導体記憶装置８０００の信頼性が向上する。
【００８１】
また、モジュールＡ８０４１のメモリチップコントローラ８０６１は、未使用の予備メモリブロックの残数が第２の所定値となったことをメモリモジュールコントローラ８０２０に通知する。メモリモジュールコントローラ８０２０は、残数が第２の所定値となった通知をモジュールＡ８０４１のメモリチップコントローラ８０６１から受信すると、ホストからのアクセスに応じて読み書きを行うデータの格納先をメインメモリモジュール８０４０のメモリモジュールＡ８０４１に代わってサブメモリモジュール８０５０のモジュールＥ８０５１へ切り換える。
【００８２】
図９は、チップＦ８０５２のテストに至るまでにメモリモジュールコントローラ８０２０が行う処理の過程を示すフローチャートである。まず、ホストが半導体記憶装置８０００にステータスリードコマンドを送信する（Ｓ９０１０）。読み出したステータスの意味が“書き換え不能時期が近い”ならば（Ｓ９０２０）、メモリモジュールコントローラ８０２０がサブメモリモジュールのモジュールＦ８０５２のテストを開始する（Ｓ９０３０）。
【００８３】
以上のように第３の実施形態も前記第１実施形態と同要に、メインメモリモジュール８０４０のモジュールＡ〜Ｄの予備メモリブロックの数が、第１の所定値（上記の例では残数＝１）になると、メモリモジュールコントローラ８０２０は、近いうちに代替先となるサブメモリモジュール８０５０のテストを開始しておく。そして、メインメモリモジュール８０４０への記録をサブメモリモジュール８０５０に切り替える際には、既にテストによって正常な状態が確認されているサブメモリモジュール８０５０を使用するので、サブメモリモジュール８０５０のテストに要する時間が削減される。したがって、メインメモリモジュール８０４０からサブメモリモジュール８０５０へ記憶先を切り換える間にライトキャッシュメモリ８０３０に蓄積されるライトデータ量を削減できるので、半導体記憶装置８０００に搭載すべきライトキャッシュメモリ８０３０用のＲＡＭの容量を縮小でき、製造コストの低減を図ることが可能となる。
【００８４】
以上の第３の実施形態においては、半導体記憶装置８０００内の各メモリモジュールの外部インタフェースはＵＳＢでなく他の標準的なインタフェースであっても、本発明が適用可能で、その効果を享受しうることは明白である。また、モジュールＦ８０５２のテスト後、モジュールＡ８０４１が書き換え不能になるまでの間に、モジュールＡ８０４１とモジュールＦ８０５２をＲＡＩＤ１のようにミラーリング動作させれば、モジュールＡ８０４１が書き換え不能になった時点で、すぐにモジュールＡ８０４１の動作させることも可能である。これにより、不要になったモジュールＡ８０４１をすぐに装置から外して、その場所に新しいサブモジュールＧをすぐに装着して本記憶装置を継続的に保全することができる。
【００８５】
また、サブメモリモジュールのテストに関しては、サブメモリモジュール内のメモリチップコントローラにセルフテスト機能を搭載し、メモリモジュールコントローラ８０２０からの指示（コマンド）により自律的に各メモリチップのテストを行うようにすれば、メインメモリモジュールへのアクセスとサブメモリモジュールのテストとを並列化できるため、より効率的である。
【図面の簡単な説明】
【００８６】
【図１】第１の実施形態を示し、本発明を適用する半導体記憶装置を示すブロック図である。
【図２】不良化したメモリブロックの代替手順を示す図である。
【図３】メモリブロックの内部構成を示す図である。
【図４】第１の実施形態を示し、メインメモリチップからサブメモリチップへの代替過程を示すタイミングチャートである。
【図５】第１の実施形態を示し、サブメモリチップのフォーマットに至るまでの処理を示すフローチャートである。
【図６】第２の実施形態を示し、メインメモリチップからサブメモリチップへの代替処理を示すタイミングチャートである。
【図７】第２の実施形態を示し、サブメモリチップのフォーマットまたはＥＣＣ検証に至るまでの過程を示すフローチャートである。
【図８】第３の実施形態を示し、半導体記憶装置を示すブロック図である。
【図９】第３の実施形態を示し、サブメモリモジュールのテストに至るまでの処理を示すフローチャートである。
【符号の説明】
【００８７】
１０００  半導体記憶装置
１０２０  メモリチップコントローラ
１０３０  ライトキャッシュメモリ
１０４０  メインメモリチップ
１０５０  サブメモリチップ
８０００  半導体ディスク
８０２０  メモリモジュールコントローラ
８０３０  ライトキャッシュメモリ
８０４０  メインメモリモジュール
８０５０  サブメモリモジュール
【図３】
2008117195.tif 000003
【図５】
2008117195.tif 000004
【図７】
2008117195.tif 000005
【図９】
2008117195.tif 000006
【図１】
2008117195.tif 000007
【図２】
2008117195.tif 000008
【図４】
2008117195.tif 000009
【図６】
2008117195.tif 000010
【図８】
2008117195.tif 000011