(57)【要約】【課題】パリティデータを用いたデータの復元可能性を向上させることができる不揮発性半導体記憶装置を提供する。【解決手段】書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、バッドブロックテーブル１２を参照することで、不良ではない複数のメモリマットの各ブロックに分散させて書き込み、データの読み出し時に、指示されたデータに対応する複数の分割データとパリティデータとを複数のメモリマットの各ブロックから読み出すとともに、エラーがあった場合には、エラーが発生したメモリマットのデータを他のメモリマットのデータを用いて復元するとともに、その復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、エラーが発生したブロックを表すデータをバッドブロックテーブルに記憶するレイドコントローラ１１とを備えている。【選択図】図１
2013125513.tif 000002
【特許請求の範囲】
【請求項１】
複数の不揮発性メモリセルからなる複数のブロックを有する複数のメモリマットと、
前記複数のブロックのうち不良なブロックを前記メモリマット毎に表すデータを記憶するバッドブロックテーブルと、
データの書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、前記バッドブロックテーブルを参照することで、不良ではない前記複数のメモリマットの各ブロックに分散させて書き込み、
データの読み出し時に、
指示されたデータに対応する複数の分割データとパリティデータとを前記複数のメモリマットの各ブロックから読み出すとともに、その読み出したデータのエラーの有無を確認し、
エラーがあると確認された場合には、エラーが発生したメモリマットのデータを他のメモリマットのデータを用いて復元するとともに、その復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、
エラーが発生したブロックを表すデータを前記バッドブロックテーブルに記憶する、
制御回路と
を備えることを特徴とする不揮発性半導体記憶装置。
【請求項２】
前記複数のブロックうち有効なブロックを表すデータを外部から参照可能なデータとして記憶する有効ブロックテーブルを備え、
前記制御回路が、前記エラーが発生したブロックを表すデータを前記バッドブロックテーブルに記憶する際に、当該ブロックを表すデータを前記有効ブロックテーブルから削除する
ことを特徴とする請求項１に記載の不揮発性半導体記憶装置。
【請求項３】
３個の前記メモリマットを１組として、２個のメモリマットに前記分割データを書き込み、１個のメモリマットに前記パリティデータを書き込む
ことを特徴とする請求項１又は２に記載の不揮発性半導体記憶装置。
【請求項４】
複数の不揮発性メモリセルからなる複数のブロックを有する複数のメモリマットと、
前記複数のブロックのうち不良なブロックを前記メモリマット毎に表すデータを記憶するバッドブロックテーブルと
を用い、
データの書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、前記バッドブロックテーブルを参照することで、不良ではない前記複数のメモリマットの各ブロックに分散させて書き込み、
データの読み出し時に、
指示されたデータに対応する複数の分割データとパリティデータとを前記複数のメモリマットの各ブロックから読み出すとともに、その読み出したデータのエラーの有無を確認し、
エラーがあると確認された場合には、エラーが発生したメモリマットのデータを他のメモリマットのデータを用いて復元するとともに、その復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、
エラーが発生したブロックを表すデータを前記バッドブロックテーブルに記憶する、
ことを特徴とする不揮発性半導体記憶装置の管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体記憶装置及びその管理方法に関する。
【背景技術】
【０００２】
特許文献１には、不揮発性半導体記憶装置を用いたＦｌａｓｈ  ＳＳＤ（Ｆｌａｓｈ  Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の半導体ドライブ装置において、データの冗長性を向上させるための技術の一例が示されている。特許文献１等に記載されている半導体ドライブ装置で用いられている複数のＮＡＮＤ型フラッシュメモリセルは、一般に、所定の複数のメモリセルを含んでデータのプログラム（書き込み）及び読み出しの単位となるページと、所定の複数のページを含んでデータの消去の単位となるブロックとに分割されて構成されている。また、ワード線デコーダ等を共用する所定の複数のブロックを含んでメモリマットが構成されている。
【０００３】
特許文献１に記載されている半導体ドライブ装置では、所定の複数ページ毎に１ページ分のパリティデータが生成され、その所定の複数ページにつづく１ページに生成されたパリティデータが書き込まれる。そして、いずれかのページで読み出しエラーが発生した場合には、他のページのデータとパリティデータとを用いてデータが復元される。さらに、読み出しに失敗したデータは無効化され、復元されたデータが別のページにリカバリ処理として書き込まれる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１５２５５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載されているドライブ装置では、１つのパリティデータに関連する複数ページのうち１つのページに読み出しエラーが発生した場合には、そのエラーが発生したデータを他のページのデータを用いて復元することができる。しかしながら、２以上のページで読み出しエラーが発生した場合、エラーが発生したデータは復元することができない。特許文献１に記載されている例では、１５ページのデータに対して１ページのパリティデータが付加されており、１６ページのうちで１ページにエラーが発生した場合に復元可能となっている。そのため、１つのパリティデータの生成元となるページの数を増加させると、データが復元できなくなる可能性は大きくなる。つまり、特許文献１に記載されているドライブ装置では、パリティデータの生成単位となるページの数に依存して冗長性の向上効果が変化してしまうという課題がある。
【０００６】
本発明は、上記の課題を解決することができる不揮発性半導体記憶装置及びその管理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本発明の不揮発性半導体記憶装置は、複数の不揮発性メモリセルからなる複数のブロックを有する複数のメモリマットと、前記複数のブロックのうち不良なブロックを前記メモリマット毎に表すデータを記憶するバッドブロックテーブルと、データの書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、前記バッドブロックテーブルを参照することで、不良ではない前記複数のメモリマットの各ブロックに分散させて書き込み、データの読み出し時に、指示されたデータに対応する複数の分割データとパリティデータとを前記複数のメモリマットの各ブロックから読み出すとともに、その読み出したデータのエラーの有無を確認し、エラーがあると確認された場合には、エラーが発生したメモリマットのデータを他のメモリマットのデータを用いて復元するとともに、その復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、エラーが発生したブロックを表すデータを前記バッドブロックテーブルに記憶する、制御回路と、を備えることを特徴とする。
【発明の効果】
【０００８】
本発明の不揮発性半導体記憶装置では、複数のメモリマットに、分割データとそのパリティデータとを分散させて書き込むことで冗長性を付加している。すなわち、メモリマット数を単位としてパリティデータが生成される。したがって、パリティデータの生成単位はページ数とは無関係となり、上記のようなページ数に関係する復元可能性の変化は問題とならない。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施の形態としての不揮発性半導体記憶装置の構成例を示すブロック図である。
【図２】図１のメモリマット１７〜１９の構成例を説明するための説明図である。
【図３】図１のバッドブロックテーブル１２及び有効ブロックテーブル１３の構成例を説明するための説明図である。
【図４】図１のバッドブロックテーブル１２及び有効ブロックテーブル１３の構成例を説明するための他の説明図である。
【図５】図１の不揮発性半導体記憶装置１の動作例（プログラム時）を示すフローチャートである。
【図６】図１の不揮発性半導体記憶装置１の動作例（読み出し時）を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施の形態について説明する。図１は、本発明の一実施形態としての不揮発性半導体記憶装置１の構成を説明するためのブロック図である。なお、不揮発性半導体記憶装置１はＮＡＮＤ型フラッシュメモリを例えば１半導体チップで構成するものであるが、図１では、不揮発性半導体記憶装置１が備える構成として、本発明の特徴に係る部分の構成のみを示している。すなわち、不揮発性半導体記憶装置１は、図示していない構成として、外部の装置と接続される端子である、アドレス、データ又はコマンドの入出力端子としての複数のＩ／Ｏ端子（入出力端子）、ライトイネーブル端子、リードイネーブル端子、レディ／ビジィ端子、電源端子、グランド端子等を備えている。また、不揮発性半導体記憶装置１は、内部に図示していない、電源回路、各種レジスタ、ワード線デコーダ等のアドレスデコーダ回路、タイミング制御回路等を備えている。また、不揮発性半導体記憶装置１は、不揮発性メモリセルの使用頻度に応じて書き込み頻度を均等にするためのウェアレベリングの機能を備えている。
【００１１】
本実施形態の不揮発性半導体記憶装置１は、上述した構成のほか、レイド（ＲＡＩＤ；Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）コントローラ１１、バッドブロックテーブル１２、有効ブロックテーブル１３、ページバッファ１（１４）、ページバッファ２（１５）、ページバッファ３（１６）、メモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）を備えている。なお、本願ではこのように、構成の名称の末尾に数字が付く場合には（例えばメモリマット１のように数字「１」が末尾に付く場合には）、図面中の参照符号を括弧でくくって示す場合がある（すなわちメモリマット１（１７）の「１７」は図中の参照符号である）。
【００１２】
メモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）は、それぞれ、複数のＮＡＮＤ型不揮発性メモリセルからなる複数のブロックを有する一群のメモリセルアレイである。また、この例では、メモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）には、レジスタやセンスアンプ、選択ゲート等が含まれている。また、各メモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）は、ワード線デコーダ等を共用する所定の複数のブロックを含んでいる。また、複数のＮＡＮＤ型不揮発性メモリセルは、所定個数のＮＡＮＤ型不揮発性メモリセルを含んでデータのプログラム（書き込み）及び読み出しの単位となるページと、所定個数のページを含んでデータの消去の単位となるブロックとに分割されている。
【００１３】
ページバッファ１（１４）、ページバッファ２（１５）及びページバッファ３（１６）は、それぞれメモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）に対してデータの書き込みや読み出しを行う際に、書き込むデータや読み出したデータを記憶するために用いられる記憶回路である。
【００１４】
バッドブロックテーブル１２は、メモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）が有する複数のブロックのうち不良なブロックをメモリマット毎に表すデータを記憶する不揮発性の記憶回路である。
【００１５】
有効ブロックテーブル１３は、メモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）が有する複数のブロックうち有効なブロックを表すデータを外部から参照可能（すなわち問い合わせ可能）なデータとして記憶する不揮発性の記憶回路である。本実施形態の不揮発性半導体記憶装置１に対して外部からのデータを書き込む場合、この有効ブロックテーブル１３に格納されているデータが示すブロックに対して行われることが要求される。
【００１６】
レイドコントローラ１１は、外部から入力されたデータの不揮発性メモリセルへの書き込み（プログラム）と不揮発性メモリセルからの読み出しの際に実行されるデータの分割及びパリティの生成とデータの復元とを制御する回路である。レイドコントローラ１１は、また、バッドブロックテーブル１２を参照することで書き込み先のブロックを選択するとともに、エラーが発生した場合にはエラーが発生したブロックをバッドブロックテーブル１２に登録する。レイドコントローラ１１は、また、エラーが発生した場合にはエラーが発生したブロックを他のエラーが発生していないブロックに置き換える処理を行い、置き換えに使用されたブロックを有効ブロックテーブル１３から削除する処理を行う。その際、置き換え先のブロックは、故障が発生したブロックと同一のメモリマット１（１７）、２（１８）又は３（１９）に設定される。すなわち、例えばメモリマット１（１７）内のブロックで故障が発生した場合には、メモリマット１（１７）内の他のブロックが置き換え先となる。また、レイドコントローラ１１は、置き換え処理を行った場合には、以後、置き換え前の故障ブロックのアドレスに対するアクセスを、置き換え後のブロックのアドレスに置換する処理を行う。すなわち、外部からは、故障前のブロックと同一のアドレス指定で、置き換え後のアドレスへのアクセスが可能となる。
【００１７】
なお、置き換え処理の仕方については特に限定されない。例えば、あらかじめ同一メモリマット内の２以上のブロックを１組として設定しておき、その組の中でブロックの置き換えを行うようにしたり、同一メモリマット内のすべてのブロックを１組としていずれかのブロックに置き換えるようにしたりしてもよい。また、置き換え先となるブロックは、置き換え先として設定される前はユーザからアクセスできないようにしておいてもよいし、置き換え先となるブロックを複数用意しておいてアクセスを可能としておき、その中で使用されていないアドレスを置き換え先として選択するようにしてもよい。
【００１８】
なお、以下では、特に明示しない場合、復元処理（あるいは復元）は、分割されたデータからエラーを訂正せずにデータを統合することで元のデータを生成する処理と、分割されたデータとパリティデータからエラーを訂正する処理（あるいはさらにエラーを訂正した後、データを統合することで元のデータを生成する処理）とを意味するものであるとする。
【００１９】
すなわち、レイドコントローラ１１は、データの書き込み時には、外部から入力されたデータを分割し、分割したデータに基づいてパリティの生成を行い、各メモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）に対応する各ページバッファ１（１４）、ページバッファ２（１５）及びページバッファ３（１６）に分割したデータとパリティデータとを格納し、不揮発性メモリセルに書き込む（プログラムする）制御を行う。その際、レイドコントローラ１１は、バッドブロックテーブル１２を参照して、複数のメモリマット１（１７）、２（１８）及び３（１９）における不良ではない各ブロックに分割したデータとパリティデータとを分散させて書き込む。データの分散は、分割データとパリティデータとが異なるメモリマット１（１７）、２（１８）及び３（１９）の各ブロックに分けられる。本実施形態では、メモリマットの数が「３」なので、入力データは２つに分割され、その２つの分割データ間でビット単位の排他的論理和をとることで１つのパリティデータが生成される。そして、２つの分割データと１つのパリティデータとがメモリマット１（１７）、２（１８）及び３（１９）の各ブロックに分割されて書き込まれる。例えば、図１に示すように、入力データ２（データ「Ａ」とデータ「Ｂ」からなるデータＤａｔａＡＢ）を書き込む場合、データ２１（データ「Ａ」からなるＤａｔａＡ）がメモリマット１（１７）の所定のブロックに書き込まれ、データ２２（データ「Ｂ」からなるＤａｔａＢ）がメモリマット２（１８）の所定のブロックに書き込まれ、そして、データ２３（データ「Ａ」とデータ「Ｂ」に基づいて生成されたパリティデータＰａｂ）がメモリマット３（１９）の所定のブロックに書き込まれる。
【００２０】
また、レイドコントローラ１１は、データの読み出し時には、指示されたアドレスに対応する分割されたデータとパリティデータとを、ブロック単位（あるいはブロック内の所定ビット数単位）で、各メモリマット１（１７）、メモリマット２（１８）及びメモリマット３（１９）から各ページバッファ１（１４）、ページバッファ２（１５）及びページバッファ３（１６）へと読み出し、パリティの確認を行い、データの復元処理を行う。
【００２１】
また、レイドコントローラ１１は、データを復元する際のパリティチェックによってどのブロックが故障しているかを検知し、故障しているブロックを検知した場合は、バッドブロックテーブル１２を自動で更新する。また、故障しているブロックを置き換えるブロックを設定し、そのブロックにそれ以後、アクセスできないようにするため、すなわち新たな冗長性を有するためのブロックの組を設定するために、有効ブロックテーブル１３も同時に更新する。不揮発性半導体記憶装置１にデータの書き込み及び不揮発性半導体記憶装置１からデータの読み出しを行うユーザ（ここでユーザとは例えばコンピュータ等で実行されるドライバソフトやオペレーティングシステムのカーネルを意味する）は、バッドブロックテーブル１２や有効ブロックテーブル１３を監視することで、故障していないブロックへのデータの書き込みを行うことができる。
【００２２】
上述したように、レイドコントローラ１１は、データの書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、バッドブロックテーブル１２を参照することで、メモリマット１（１７）、２（１８）及び３（１９）の不良ではない各ブロックに分散させて書き込む。また、レイドコントローラ１１は、データの読み出し時に、指示されたデータに対応する複数の分割データとパリティデータとをメモリマット１（１７）、２（１８）及び３（１９）の各ブロックから読み出すとともに、その読み出したデータのエラーの有無を確認し、エラーがあると確認された場合には、エラーが発生したメモリマット１（１７）、２（１８）及び３（１９）のいずれかのメモリマットのデータを他のメモリマットのデータを用いて復元する。また、レイドコントローラ１１は、復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、エラーが発生したブロックを表すデータをバッドブロックテーブル１２に記憶する制御を行う。さらに、レイドコントローラ１１は、エラーが発生したブロックを表すデータをバッドブロックテーブル１２に記憶する際に、当該ブロックを表すデータを有効ブロックテーブル１３から削除する処理を行う。
【００２３】
次に、図２〜図４を参照して、図１のメモリマット１（１７）、２（１８）及び３（１９）内の各ブロックの構成例と、バッドブロックテーブル１２及び有効ブロックテーブル１３の構成例とについて説明する。図２に示す例では、メモリマット１（１７）、２（１８）及び３（１９）のそれぞれがユーザアドレス０〜Ｎが割り当てられているＮ＋１個のブロック２１を有している。ユーザアドレスは、ユーザがブロック単位でデータの読み書きを行うブロックを指定する際に使用されるアドレスである。メモリマット１（１７）、２（１８）及び３（１９）内の各ブロックの構成が図２に示すようになっている場合、すべてのブロックが有効であるとき（すなわち不良なブロックが無いとき）、図３に示すように、バッドブロックテーブル１２にはいずれのブロックも登録されておらず、有効ブロックテーブル１３にはユーザアドレス０〜Ｎのすべてが登録されている。なお、バッドブロックテーブル１２及び有効ブロックテーブル１３の初期値の登録は例えば工場での製造あるいは出荷段階で行うことができる。
【００２４】
一方、仮に図２のメモリマット２（１８）のユーザアドレス０のブロック２１（すなわちブロック２１ａ）においてデータ読み出しエラーが発生したとすると、図４に示すように、バッドブロックテーブル１２にユーザアドレス０とメモリマット２（１８）とを１組として表す情報が登録される。また、有効ブロックテーブル１３からは、メモリマット２（１８）でユーザアドレス０のブロック２１ａの置き換え先として選択されたブロックのユーザアドレスが削除される。例えば、メモリマット２（１８）のユーザアドレス０のブロック２１ａで故障が発生し（すなわちパリティエラーが確認され）、メモリマット２（１８）のユーザアドレス０のブロック２１ａの置き換え先ブロックが、メモリマット２（１８）のユーザアドレス１のブロック２１ｂに設定されたとすると、有効ブロックテーブル１３からは置き換え先のブロック１のユーザアドレス１が削除される。この場合、以後、ユーザは、有効ブロックテーブル１３を参照することで、データ書き込み時に、ユーザアドレス１のブロック２１ｂにアクセスしないようにすることができる。
【００２５】
次に、図５を参照して、図１に示した不揮発性半導体記憶装置１のデータ書き込み時の動作について説明する。なお、図５及び図６に示す動作例では、ブロックの置換は同一メモリマット内でユーザアドレス（０，１）、（２，３）、…、（Ｎ−１，Ｎ）の組み合わせで行うものとする。また、ユーザは偶数アドレスに対してのみアクセスできるようになっているものとする。例えばメモリマット１（１７）のユーザアドレス０のブロックが故障となった場合、メモリマット１（１７）のユーザアドレス１のブロックと置換される。ただし、ユーザは置換後もユーザアドレス０へのアクセスで、メモリマット１（１７）のユーザアドレス１のブロックにアクセスすることができるようになっている。
【００２６】
また、図５において、ステップＳ１０〜Ｓ１６はユーザ側の処理であり、ステップＳ２０〜Ｓ２７が不揮発性半導体記憶装置１内の処理である。また、図５のフローは、ユーザがユーザアドレス０のブロック２１に８ビットのデータＤａｔａ（１０１０１１１１）を書き込む場合について示している。
【００２７】
まず、ユーザは、有効ブロックテーブル１３を確認する所定のコマンドを不揮発性半導体記憶装置１に対して発行し、不揮発性半導体記憶装置１から、有効ブロックテーブル１３の内容を示すデータを受信する（ステップＳ１１）。ここではユーザから、ユーザアドレス０が有効ブロックテーブル１３に含まれているか否かを問い合わせるコマンドが発行され、不揮発性半導体記憶装置１でレイドコントローラ１１が有効ブロックテーブル１３を参照して図３に示すようにユーザアドレス０が有効ブロックテーブル１３に含まれていることを確認し、不揮発性半導体記憶装置１からユーザに対してその旨を示す応答が返信されたものとする。
【００２８】
この場合、ユーザは、不揮発性半導体記憶装置１からの応答に基づいて有効ブロックテーブル１３にユーザアドレス０が含まれているか否かを確認し（ステップＳ１２）、存在していると判定する（ステップＳ１２で「Ｙｅｓ」）。次に、ユーザは、ユーザアドレス０のブロック２１に対してデータＤａｔａ（１０１０１１１１）の書き込みを指示する書き込みコマンド（プログラムコマンド）を発行する（ステップＳ１３）。ユーザ側ではこれ以後、不揮発性半導体記憶装置１のレディ／ビジィ端子がレディ状態となるまでステップＳ１４でレディ／ビジィ端子の状態を確認する処理と、ステップＳ１５でレディ状態となっているか否かの判定処理を繰り返し実行する。
【００２９】
ユーザがステップＳ１３で発行した書き込みコマンドを受けた不揮発性半導体記憶装置１では、レディ／ビジィ端子をビジィ状態とした後、レイドコントローラ１１で入力データＤａｔａ（１０１０１１１１）を２つのデータＤａｔａＡ（１０１０）とデータＤａｔａＢ（１１１１）とに分割する（ステップＳ２１）。次に、レイドコントローラ１１が分割したＤａｔａＡ（１０１０）とＤａｔａＢ（１１１１）との排他的論理和を求めることでパリティデータＰａｂ（０１０１）を生成する（ステップＳ２２）。次にレイドコントローラ１１がバッドブロックテーブル１２を参照する（ステップＳ２３）。
【００３０】
ステップＳ２３でバッドブロックテーブル１２を参照した結果、図３に示したようにバッドブロックテーブル１２にユーザアドレス０が存在しない場合（ステップＳ２４で「Ｙｅｓ」）、レイドコントローラ１１は、メモリマット１（１７）のユーザアドレス０のブロック２１にデータＤａｔａＡ（１０１０）を、メモリマット２（１８）のユーザアドレス０のブロック２１（ブロック２１ａ）にデータＤａｔａＢ（１１１１）を、そして、メモリマット３（１９）のユーザアドレス０のブロック２１にデータＰａｂ（０１０１）を書き込む処理を実行する（ステップＳ２５）。そして、書き込みが終了すると、不揮発性半導体記憶装置１のレディ／ビジィ端子がレディ状態に設定され、本コマンドに対する処理が終了する（ステップＳ２７）。なお、本実施形態では、複数のメモリマット１（１７）、２（１８）及び３（１９）を用いてデータを分散記憶するＲＡＩＤシステムが構成されているので、メモリマット１（１７）、２（１８）及び３（１９）への各データは同時書き込むことがでる。
【００３１】
一方、ステップＳ２３でバッドブロックテーブル１２を参照した結果、図４に示したようにバッドブロックテーブル１２にユーザアドレス０が存在していた場合（ステップＳ２４で「Ｎｏ」）、レイドコントローラ１１は、バッドブロックテーブル１２の内容に基づいて置換するブロックを設定して（この例ではメモリマット２（１８）のユーザアドレス０をユーザアドレス１に置換する設定を行い）、メモリマット１（１７）のユーザアドレス０のブロック２１にデータＤａｔａＡ（１０１０）を、メモリマット２（１８）のユーザアドレス１のブロック２１（ブロック２１ｂ）にデータＤａｔａＢ（１１１１）を、そして、メモリマット３（１９）のユーザアドレス０のブロック２１にデータＰａｂ（０１０１）を書き込む処理を実行する（ステップＳ２６）。そして、書き込みが終了すると、不揮発性半導体記憶装置１のレディ／ビジィ端子がレディ状態に設定され、本コマンドに対する処理が終了する（ステップＳ２７）。
【００３２】
以上のようにして不揮発性半導体記憶装置１にユーザによって指示されたＤａｔａ（１０１０１１１１）が書き込まれる。
【００３３】
次に、図６を参照して、図１に示した不揮発性半導体記憶装置１のデータ読み出し時の動作について説明する。図６において、ステップＳ３０〜Ｓ３３はユーザ側の処理であり、ステップＳ４０〜Ｓ５２が不揮発性半導体記憶装置１内の処理である。また、図６のフローは、ユーザが、図５の動作例で書き込まれた、ユーザアドレス０のブロック２１からデータＤａｔａ（１０１０１１１１）を読み出す場合について示している。
【００３４】
まず、ユーザは、ユーザアドレス０のブロック２１に対する読み出しコマンドを実行する（ステップＳ３１）。ユーザ側では以後、不揮発性半導体記憶装置１からデータが出力されるまでステップＳ３２でデータが出力されたか否かを確認する処理を繰り返し実行する。
【００３５】
一方、ユーザがステップＳ３１で発行した読み出しコマンドを受けた不揮発性半導体記憶装置１では、レイドコントローラ１１によってバッドブロックテーブル１２を確認する（ステップＳ４１）。ステップＳ４１でバッドブロックテーブル１２を参照した結果、図３に示したようにバッドブロックテーブル１２にユーザアドレス０が存在しない場合（ステップＳ４２で「Ｙｅｓ」）、レイドコントローラ１１は、メモリマット１（１７）のユーザアドレス０のブロック２１からデータＤａｔａＡ（１０１０）を、メモリマット２（１８）のユーザアドレス０のブロック２１（ブロック２１ａ）からデータＤａｔａＢ（１１１１）を、そして、メモリマット３（１９）のユーザアドレス０のブロック２１からデータＰａｂ（０１０１）を読み出す処理を実行する（ステップＳ４３）。そして、レイドコントローラ１１は、読み出したデータを用いてパリティチェックを実行する（ステップＳ４４）。
【００３６】
他方、ステップＳ４１でバッドブロックテーブル１２を参照した結果、図４に示したようにバッドブロックテーブル１２にユーザアドレス０が存在していた場合（ステップＳ４２で「Ｎｏ」）、レイドコントローラ１１は、バッドブロックテーブル１２の内容に基づいて置換するブロックを設定して（この例ではメモリマット２（１８）のユーザアドレス０をユーザアドレス１に置換する設定を行い）、メモリマット１（１７）のユーザアドレス０のブロック２１からデータＤａｔａＡ（１０１０）を、メモリマット２（１８）のユーザアドレス１のブロック２１（ブロック２１ｂ）からデータＤａｔａＢ（１１１１）を、そして、メモリマット３（１９）のユーザアドレス０のブロック２１からデータＰａｂ（０１０１）を読み出す処理を実行する（ステップＳ４５）。そして、レイドコントローラ１１は、読み出したデータを用いてパリティチェックを実行する（ステップＳ４４）。
【００３７】
ステップＳ４４では、レイドコントローラ１１は、ステップＳ４３又はステップＳ４５で読み出した３つのデータＤａｔａＡ、ＤａｔａＢ及びＰａｂの各２つのデータ間で排他的論理和を求め、残りの１つのデータに一致するか否かを確認することでパリティチェックを実行する。パリティチェックの結果、ステップＳ４６に示した３つの式の左辺と右辺とがすべて一致した場合には（ステップＳ４６で「Ｙｅｓ」）、レイドコントローラ１１は、ステップＳ４３又はステップＳ４５で読み出したデータＤａｔａＡ（１０１０）とデータＤａｔａＢ（１１１１）とを結合する（ステップＳ４７）。そして、不揮発性半導体記憶装置１は、ステップＳ４７で復元されたデータＤａｔａ（１０１０１１１）を出力する（ステップＳ４８）。
【００３８】
一方、ステップＳ４４でのパリティチェックの結果、ステップＳ４６に示した３つの式の左辺と右辺のどれかが不一致であった場合には（ステップＳ４６で「Ｎｏ」）、レイドコントローラ１１は、どのブロックが故障したのかを確認し（ステップＳ５０）、不一致となった式の内容に基づいて故障がなかった２つのデータから、残りの１つのデータを復元する（ステップＳ５１）。ただし、ステップＳ５０での故障ブロックの検出とステップＳ５１でのデータの復元は２つのブロックが同時に故障した場合は不可能である。
【００３９】
次に、レイドコントローラ１１は、故障が検出されたブロックをメモリマットを特定してバッドブロックテーブル１２に登録するとともに、当該ブロックを有効ブロックテーブル１３から削除する（ステップＳ５２）。ステップＳ５２の後は、上述したステップＳ４７及びステップＳ４８の処理が行われる。
【００４０】
以上のようにして不揮発性半導体記憶装置１から、ユーザによって指示されたユーザアドレス０のブロックに記憶されていたＤａｔａ（１０１０１１１１）が読み出される。
【００４１】
本実施形態の不揮発性半導体記憶装置１では、複数のメモリマットに、データとそのパリティデータとを分散させて書き込むことで冗長性を付加している。すなわち、メモリマット数を単位としてパリティデータが生成される。したがって、パリティデータの生成単位はページ数とは無関係となり、背景技術で説明したようなページ数に関係する復元可能性の低下は問題とならない。
【００４２】
また、本実施形態の不揮発性半導体記憶装置１では、１つの不揮発性半導体記憶装置内でＲＡＩＤシステムを構築でき、ブロック単位で故障箇所の置換を行えるようにしているので、エラーが発生した場合の記憶領域の置換を自動で行うことができ、複数のハードディスクドライブ装置や複数の半導体ドライブ装置を用いてＲＡＩＤを構築する場合に必要となるドライブ装置の交換が不要となるという利点がある。また、ブロック単位で記憶領域の冗長性の確保と置換とを行っているため、信頼性の向上と、操作性の向上とを容易に図ることができる。また、不揮発性半導体記憶装置１は１つの半導体チップとして実現することができ、その場合、半導体チップ内部のハードウェアにおいてＲＡＩＤシステムを構築することによる信頼性向上を図ることができるため、従来信頼性向上のために用いているソフトウェアの負荷軽減につながる。
【００４３】
なお、本発明の実施の形態は上記のものに限定されず、例えば、メモリマット数を増やしたり、バッドブロックテーブル１２や有効ブロックテーブル１３に冗長性を持たせたりといった変更を適宜行うことができる。
【符号の説明】
【００４４】
１  不揮発性半導体記憶装置
１１  レイドコントローラ
１２  バッドブロックテーブル
１３  有効ブロックテーブル
１７  メモリマット１
１８  メモリマット２
１９  メモリマット３
２１  ブロック
【図１】
2013125513.tif 000003
【図２】
2013125513.tif 000004
【図３】
2013125513.tif 000005
【図４】
2013125513.tif 000006
【図５】
2013125513.tif 000007
【図６】
2013125513.tif 000008