"複数の不揮発性メモリセルからなる複数のブロックを有する複数のメモリマットと、前記複数のブロックのうち不良なブロックを前記メモリマット毎に表すデータを記憶するバッドブロックテーブルと、データの書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、前記バッドブロックテーブルを参照することで、不良ではない前記複数のメモリマットの各ブロックに分散させて書き込み、データの読み出し時に、指示されたデータに対応する複数の分割データとパリティデータとを前記複数のメモリマットの各ブロックから読み出すとともに、その読み出したデータのエラーの有無を確認し、エラーがあると確認された場合には、エラーが発生したメモリマットのデータを他のメモリマットのデータを用いて復元するとともに、その復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、エラーが発生したブロックを表すデータを前記バッドブロックテーブルに記憶する、制御回路とを備えることを特徴とする不揮発性半導体記憶装置。前記複数のブロックうち有効なブロックを表すデータを外部から参照可能なデータとして記憶する有効ブロックテーブルを備え、前記制御回路が、前記エラーが発生したブロックを表すデータを前記バッドブロックテーブルに記憶する際に、当該ブロックを表すデータを前記有効ブロックテーブルから削除することを特徴とする請求項1に記載の不揮発性半導体記憶装置。3個の前記メモリマットを1組として、2個のメモリマットに前記分割データを書き込み、1個のメモリマットに前記パリティデータを書き込むことを特徴とする請求項1又は2に記載の不揮発性半導体記憶装置。複数の不揮発性メモリセルからなる複数のブロックを有する複数のメモリマットと、前記複数のブロックのうち不良なブロックを前記メモリマット毎に表すデータを記憶するバッドブロックテーブルとを用い、データの書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、前記バッドブロックテーブルを参照することで、不良ではない前記複数のメモリマットの各ブロックに分散させて書き込み、データの読み出し時に、指示されたデータに対応する複数の分割データとパリティデータとを前記複数のメモリマットの各ブロックから読み出すとともに、その読み出したデータのエラーの有無を確認し、エラーがあると確認された場合には、エラーが発生したメモリマットのデータを他のメモリマットのデータを用いて復元するとともに、その復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、エラーが発生したブロックを表すデータを前記バッドブロックテーブルに記憶する、ことを特徴とする不揮発性半導体記憶装置の管理方法。特許文献1に記載されているドライブ装置では、1つのパリティデータに関連する複数ページのうち1つのページに読み出しエラーが発生した場合には、そのエラーが発生したデータを他のページのデータを用いて復元することができる。しかしながら、2以上のページで読み出しエラーが発生した場合、エラーが発生したデータは復元することができない。特許文献1に記載されている例では、15ページのデータに対して1ページのパリティデータが付加されており、16ページのうちで1ページにエラーが発生した場合に復元可能となっている。そのため、1つのパリティデータの生成元となるページの数を増加させると、データが復元できなくなる可能性は大きくなる。つまり、特許文献1に記載されているドライブ装置では、パリティデータの生成単位となるページの数に依存して冗長性の向上効果が変化してしまうという課題がある。本発明は、上記の課題を解決することができる不揮発性半導体記憶装置及びその管理方法を提供することを目的とする。上記課題を解決するため、本発明の不揮発性半導体記憶装置は、複数の不揮発性メモリセルからなる複数のブロックを有する複数のメモリマットと、前記複数のブロックのうち不良なブロックを前記メモリマット毎に表すデータを記憶するバッドブロックテーブルと、データの書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、前記バッドブロックテーブルを参照することで、不良ではない前記複数のメモリマットの各ブロックに分散させて書き込み、データの読み出し時に、指示されたデータに対応する複数の分割データとパリティデータとを前記複数のメモリマットの各ブロックから読み出すとともに、その読み出したデータのエラーの有無を確認し、エラーがあると確認された場合には、エラーが発生したメモリマットのデータを他のメモリマットのデータを用いて復元するとともに、その復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、エラーが発生したブロックを表すデータを前記バッドブロックテーブルに記憶する、制御回路と、を備えることを特徴とする。本発明の不揮発性半導体記憶装置では、複数のメモリマットに、分割データとそのパリティデータとを分散させて書き込むことで冗長性を付加している。すなわち、メモリマット数を単位としてパリティデータが生成される。したがって、パリティデータの生成単位はページ数とは無関係となり、上記のようなページ数に関係する復元可能性の変化は問題とならない。以下、図面を参照して本発明の実施の形態について説明する。図1は、本発明の一実施形態としての不揮発性半導体記憶装置1の構成を説明するためのブロック図である。なお、不揮発性半導体記憶装置1はNAND型フラッシュメモリを例えば1半導体チップで構成するものであるが、図1では、不揮発性半導体記憶装置1が備える構成として、本発明の特徴に係る部分の構成のみを示している。すなわち、不揮発性半導体記憶装置1は、図示していない構成として、外部の装置と接続される端子である、アドレス、データ又はコマンドの入出力端子としての複数のI/O端子入出力端子、ライトイネーブル端子、リードイネーブル端子、レディ/ビジィ端子、電源端子、グランド端子等を備えている。また、不揮発性半導体記憶装置1は、内部に図示していない、電源回路、各種レジスタ、ワード線デコーダ等のアドレスデコーダ回路、タイミング制御回路等を備えている。また、不揮発性半導体記憶装置1は、不揮発性メモリセルの使用頻度に応じて書き込み頻度を均等にするためのウェアレベリングの機能を備えている。本実施形態の不揮発性半導体記憶装置1は、上述した構成のほか、レイドRAID;RedundantArraysofInexpensiveDisksコントローラ11、バッドブロックテーブル12、有効ブロックテーブル13、ページバッファ114、ページバッファ215、ページバッファ316、メモリマット117、メモリマット218及びメモリマット319を備えている。なお、本願ではこのように、構成の名称の末尾に数字が付く場合には例えばメモリマット1のように数字1が末尾に付く場合には、図面中の参照符号を括弧でくくって示す場合があるすなわちメモリマット117の17は図中の参照符号である。メモリマット117、メモリマット218及びメモリマット319は、それぞれ、複数のNAND型不揮発性メモリセルからなる複数のブロックを有する一群のメモリセルアレイである。また、この例では、メモリマット117、メモリマット218及びメモリマット319には、レジスタやセンスアンプ、選択ゲート等が含まれている。また、各メモリマット117、メモリマット218及びメモリマット319は、ワード線デコーダ等を共用する所定の複数のブロックを含んでいる。また、複数のNAND型不揮発性メモリセルは、所定個数のNAND型不揮発性メモリセルを含んでデータのプログラム書き込み及び読み出しの単位となるページと、所定個数のページを含んでデータの消去の単位となるブロックとに分割されている。ページバッファ114、ページバッファ215及びページバッファ316は、それぞれメモリマット117、メモリマット218及びメモリマット319に対してデータの書き込みや読み出しを行う際に、書き込むデータや読み出したデータを記憶するために用いられる記憶回路である。バッドブロックテーブル12は、メモリマット117、メモリマット218及びメモリマット319が有する複数のブロックのうち不良なブロックをメモリマット毎に表すデータを記憶する不揮発性の記憶回路である。有効ブロックテーブル13は、メモリマット117、メモリマット218及びメモリマット319が有する複数のブロックうち有効なブロックを表すデータを外部から参照可能すなわち問い合わせ可能なデータとして記憶する不揮発性の記憶回路である。本実施形態の不揮発性半導体記憶装置1に対して外部からのデータを書き込む場合、この有効ブロックテーブル13に格納されているデータが示すブロックに対して行われることが要求される。レイドコントローラ11は、外部から入力されたデータの不揮発性メモリセルへの書き込みプログラムと不揮発性メモリセルからの読み出しの際に実行されるデータの分割及びパリティの生成とデータの復元とを制御する回路である。レイドコントローラ11は、また、バッドブロックテーブル12を参照することで書き込み先のブロックを選択するとともに、エラーが発生した場合にはエラーが発生したブロックをバッドブロックテーブル12に登録する。レイドコントローラ11は、また、エラーが発生した場合にはエラーが発生したブロックを他のエラーが発生していないブロックに置き換える処理を行い、置き換えに使用されたブロックを有効ブロックテーブル13から削除する処理を行う。その際、置き換え先のブロックは、故障が発生したブロックと同一のメモリマット117、218又は319に設定される。すなわち、例えばメモリマット117内のブロックで故障が発生した場合には、メモリマット117内の他のブロックが置き換え先となる。また、レイドコントローラ11は、置き換え処理を行った場合には、以後、置き換え前の故障ブロックのアドレスに対するアクセスを、置き換え後のブロックのアドレスに置換する処理を行う。すなわち、外部からは、故障前のブロックと同一のアドレス指定で、置き換え後のアドレスへのアクセスが可能となる。なお、置き換え処理の仕方については特に限定されない。例えば、あらかじめ同一メモリマット内の2以上のブロックを1組として設定しておき、その組の中でブロックの置き換えを行うようにしたり、同一メモリマット内のすべてのブロックを1組としていずれかのブロックに置き換えるようにしたりしてもよい。また、置き換え先となるブロックは、置き換え先として設定される前はユーザからアクセスできないようにしておいてもよいし、置き換え先となるブロックを複数用意しておいてアクセスを可能としておき、その中で使用されていないアドレスを置き換え先として選択するようにしてもよい。なお、以下では、特に明示しない場合、復元処理あるいは復元は、分割されたデータからエラーを訂正せずにデータを統合することで元のデータを生成する処理と、分割されたデータとパリティデータからエラーを訂正する処理あるいはさらにエラーを訂正した後、データを統合することで元のデータを生成する処理とを意味するものであるとする。すなわち、レイドコントローラ11は、データの書き込み時には、外部から入力されたデータを分割し、分割したデータに基づいてパリティの生成を行い、各メモリマット117、メモリマット218及びメモリマット319に対応する各ページバッファ114、ページバッファ215及びページバッファ316に分割したデータとパリティデータとを格納し、不揮発性メモリセルに書き込むプログラムする制御を行う。その際、レイドコントローラ11は、バッドブロックテーブル12を参照して、複数のメモリマット117、218及び319における不良ではない各ブロックに分割したデータとパリティデータとを分散させて書き込む。データの分散は、分割データとパリティデータとが異なるメモリマット117、218及び319の各ブロックに分けられる。本実施形態では、メモリマットの数が3なので、入力データは2つに分割され、その2つの分割データ間でビット単位の排他的論理和をとることで1つのパリティデータが生成される。そして、2つの分割データと1つのパリティデータとがメモリマット117、218及び319の各ブロックに分割されて書き込まれる。例えば、図1に示すように、入力データ2データAとデータBからなるデータDataABを書き込む場合、データ21データAからなるDataAがメモリマット117の所定のブロックに書き込まれ、データ22データBからなるDataBがメモリマット218の所定のブロックに書き込まれ、そして、データ23データAとデータBに基づいて生成されたパリティデータPabがメモリマット319の所定のブロックに書き込まれる。また、レイドコントローラ11は、データの読み出し時には、指示されたアドレスに対応する分割されたデータとパリティデータとを、ブロック単位あるいはブロック内の所定ビット数単位で、各メモリマット117、メモリマット218及びメモリマット319から各ページバッファ114、ページバッファ215及びページバッファ316へと読み出し、パリティの確認を行い、データの復元処理を行う。また、レイドコントローラ11は、データを復元する際のパリティチェックによってどのブロックが故障しているかを検知し、故障しているブロックを検知した場合は、バッドブロックテーブル12を自動で更新する。また、故障しているブロックを置き換えるブロックを設定し、そのブロックにそれ以後、アクセスできないようにするため、すなわち新たな冗長性を有するためのブロックの組を設定するために、有効ブロックテーブル13も同時に更新する。不揮発性半導体記憶装置1にデータの書き込み及び不揮発性半導体記憶装置1からデータの読み出しを行うユーザここでユーザとは例えばコンピュータ等で実行されるドライバソフトやオペレーティングシステムのカーネルを意味するは、バッドブロックテーブル12や有効ブロックテーブル13を監視することで、故障していないブロックへのデータの書き込みを行うことができる。上述したように、レイドコントローラ11は、データの書き込み時に、当該データを分割した複数の分割データとその分割データから生成したパリティデータとを、バッドブロックテーブル12を参照することで、メモリマット117、218及び319の不良ではない各ブロックに分散させて書き込む。また、レイドコントローラ11は、データの読み出し時に、指示されたデータに対応する複数の分割データとパリティデータとをメモリマット117、218及び319の各ブロックから読み出すとともに、その読み出したデータのエラーの有無を確認し、エラーがあると確認された場合には、エラーが発生したメモリマット117、218及び319のいずれかのメモリマットのデータを他のメモリマットのデータを用いて復元する。また、レイドコントローラ11は、復元したデータをエラーが発生した同一メモリマットの他のブロックに格納し、エラーが発生したブロックを表すデータをバッドブロックテーブル12に記憶する制御を行う。さらに、レイドコントローラ11は、エラーが発生したブロックを表すデータをバッドブロックテーブル12に記憶する際に、当該ブロックを表すデータを有効ブロックテーブル13から削除する処理を行う。次に、図2~図4を参照して、図1のメモリマット117、218及び319内の各ブロックの構成例と、バッドブロックテーブル12及び有効ブロックテーブル13の構成例とについて説明する。図2に示す例では、メモリマット117、218及び319のそれぞれがユーザアドレス0~Nが割り当てられているN1個のブロック21を有している。ユーザアドレスは、ユーザがブロック単位でデータの読み書きを行うブロックを指定する際に使用されるアドレスである。メモリマット117、218及び319内の各ブロックの構成が図2に示すようになっている場合、すべてのブロックが有効であるときすなわち不良なブロックが無いとき、図3に示すように、バッドブロックテーブル12にはいずれのブロックも登録されておらず、有効ブロックテーブル13にはユーザアドレス0~Nのすべてが登録されている。なお、バッドブロックテーブル12及び有効ブロックテーブル13の初期値の登録は例えば工場での製造あるいは出荷段階で行うことができる。一方、仮に図2のメモリマット218のユーザアドレス0のブロック21すなわちブロック21aにおいてデータ読み出しエラーが発生したとすると、図4に示すように、バッドブロックテーブル12にユーザアドレス0とメモリマット218とを1組として表す情報が登録される。また、有効ブロックテーブル13からは、メモリマット218でユーザアドレス0のブロック21aの置き換え先として選択されたブロックのユーザアドレスが削除される。例えば、メモリマット218のユーザアドレス0のブロック21aで故障が発生しすなわちパリティエラーが確認され、メモリマット218のユーザアドレス0のブロック21aの置き換え先ブロックが、メモリマット218のユーザアドレス1のブロック21bに設定されたとすると、有効ブロックテーブル13からは置き換え先のブロック1のユーザアドレス1が削除される。この場合、以後、ユーザは、有効ブロックテーブル13を参照することで、データ書き込み時に、ユーザアドレス1のブロック21bにアクセスしないようにすることができる。次に、図5を参照して、図1に示した不揮発性半導体記憶装置1のデータ書き込み時の動作について説明する。なお、図5及び図6に示す動作例では、ブロックの置換は同一メモリマット内でユーザアドレス0,1、2,3、...、N-1,Nの組み合わせで行うものとする。また、ユーザは偶数アドレスに対してのみアクセスできるようになっているものとする。例えばメモリマット117のユーザアドレス0のブロックが故障となった場合、メモリマット117のユーザアドレス1のブロックと置換される。ただし、ユーザは置換後もユーザアドレス0へのアクセスで、メモリマット117のユーザアドレス1のブロックにアクセスすることができるようになっている。また、図5において、ステップS10~S16はユーザ側の処理であり、ステップS20~S27が不揮発性半導体記憶装置1内の処理である。また、図5のフローは、ユーザがユーザアドレス0のブロック21に8ビットのデータData10101111を書き込む場合について示している。まず、ユーザは、有効ブロックテーブル13を確認する所定のコマンドを不揮発性半導体記憶装置1に対して発行し、不揮発性半導体記憶装置1から、有効ブロックテーブル13の内容を示すデータを受信するステップS11。ここではユーザから、ユーザアドレス0が有効ブロックテーブル13に含まれているか否かを問い合わせるコマンドが発行され、不揮発性半導体記憶装置1でレイドコントローラ11が有効ブロックテーブル13を参照して図3に示すようにユーザアドレス0が有効ブロックテーブル13に含まれていることを確認し、不揮発性半導体記憶装置1からユーザに対してその旨を示す応答が返信されたものとする。この場合、ユーザは、不揮発性半導体記憶装置1からの応答に基づいて有効ブロックテーブル13にユーザアドレス0が含まれているか否かを確認しステップS12、存在していると判定するステップS12でYes。次に、ユーザは、ユーザアドレス0のブロック21に対してデータData10101111の書き込みを指示する書き込みコマンドプログラムコマンドを発行するステップS13。ユーザ側ではこれ以後、不揮発性半導体記憶装置1のレディ/ビジィ端子がレディ状態となるまでステップS14でレディ/ビジィ端子の状態を確認する処理と、ステップS15でレディ状態となっているか否かの判定処理を繰り返し実行する。ユーザがステップS13で発行した書き込みコマンドを受けた不揮発性半導体記憶装置1では、レディ/ビジィ端子をビジィ状態とした後、レイドコントローラ11で入力データData10101111を2つのデータDataA1010とデータDataB1111とに分割するステップS21。次に、レイドコントローラ11が分割したDataA1010とDataB1111との排他的論理和を求めることでパリティデータPab0101を生成するステップS22。次にレイドコントローラ11がバッドブロックテーブル12を参照するステップS23。ステップS23でバッドブロックテーブル12を参照した結果、図3に示したようにバッドブロックテーブル12にユーザアドレス0が存在しない場合ステップS24でYes、レイドコントローラ11は、メモリマット117のユーザアドレス0のブロック21にデータDataA1010を、メモリマット218のユーザアドレス0のブロック21ブロック21aにデータDataB1111を、そして、メモリマット319のユーザアドレス0のブロック21にデータPab0101を書き込む処理を実行するステップS25。そして、書き込みが終了すると、不揮発性半導体記憶装置1のレディ/ビジィ端子がレディ状態に設定され、本コマンドに対する処理が終了するステップS27。なお、本実施形態では、複数のメモリマット117、218及び319を用いてデータを分散記憶するRAIDシステムが構成されているので、メモリマット117、218及び319への各データは同時書き込むことがでる。一方、ステップS23でバッドブロックテーブル12を参照した結果、図4に示したようにバッドブロックテーブル12にユーザアドレス0が存在していた場合ステップS24でNo、レイドコントローラ11は、バッドブロックテーブル12の内容に基づいて置換するブロックを設定してこの例ではメモリマット218のユーザアドレス0をユーザアドレス1に置換する設定を行い、メモリマット117のユーザアドレス0のブロック21にデータDataA1010を、メモリマット218のユーザアドレス1のブロック21ブロック21bにデータDataB1111を、そして、メモリマット319のユーザアドレス0のブロック21にデータPab0101を書き込む処理を実行するステップS26。そして、書き込みが終了すると、不揮発性半導体記憶装置1のレディ/ビジィ端子がレディ状態に設定され、本コマンドに対する処理が終了するステップS27。以上のようにして不揮発性半導体記憶装置1にユーザによって指示されたData10101111が書き込まれる。次に、図6を参照して、図1に示した不揮発性半導体記憶装置1のデータ読み出し時の動作について説明する。図6において、ステップS30~S33はユーザ側の処理であり、ステップS40~S52が不揮発性半導体記憶装置1内の処理である。また、図6のフローは、ユーザが、図5の動作例で書き込まれた、ユーザアドレス0のブロック21からデータData10101111を読み出す場合について示している。まず、ユーザは、ユーザアドレス0のブロック21に対する読み出しコマンドを実行するステップS31。ユーザ側では以後、不揮発性半導体記憶装置1からデータが出力されるまでステップS32でデータが出力されたか否かを確認する処理を繰り返し実行する。一方、ユーザがステップS31で発行した読み出しコマンドを受けた不揮発性半導体記憶装置1では、レイドコントローラ11によってバッドブロックテーブル12を確認するステップS41。ステップS41でバッドブロックテーブル12を参照した結果、図3に示したようにバッドブロックテーブル12にユーザアドレス0が存在しない場合ステップS42でYes、レイドコントローラ11は、メモリマット117のユーザアドレス0のブロック21からデータDataA1010を、メモリマット218のユーザアドレス0のブロック21ブロック21aからデータDataB1111を、そして、メモリマット319のユーザアドレス0のブロック21からデータPab0101を読み出す処理を実行するステップS43。そして、レイドコントローラ11は、読み出したデータを用いてパリティチェックを実行するステップS44。他方、ステップS41でバッドブロックテーブル12を参照した結果、図4に示したようにバッドブロックテーブル12にユーザアドレス0が存在していた場合ステップS42でNo、レイドコントローラ11は、バッドブロックテーブル12の内容に基づいて置換するブロックを設定してこの例ではメモリマット218のユーザアドレス0をユーザアドレス1に置換する設定を行い、メモリマット117のユーザアドレス0のブロック21からデータDataA1010を、メモリマット218のユーザアドレス1のブロック21ブロック21bからデータDataB1111を、そして、メモリマット319のユーザアドレス0のブロック21からデータPab0101を読み出す処理を実行するステップS45。そして、レイドコントローラ11は、読み出したデータを用いてパリティチェックを実行するステップS44。ステップS44では、レイドコントローラ11は、ステップS43又はステップS45で読み出した3つのデータDataA、DataB及びPabの各2つのデータ間で排他的論理和を求め、残りの1つのデータに一致するか否かを確認することでパリティチェックを実行する。パリティチェックの結果、ステップS46に示した3つの式の左辺と右辺とがすべて一致した場合にはステップS46でYes、レイドコントローラ11は、ステップS43又はステップS45で読み出したデータDataA1010とデータDataB1111とを結合するステップS47。そして、不揮発性半導体記憶装置1は、ステップS47で復元されたデータData1010111を出力するステップS48。一方、ステップS44でのパリティチェックの結果、ステップS46に示した3つの式の左辺と右辺のどれかが不一致であった場合にはステップS46でNo、レイドコントローラ11は、どのブロックが故障したのかを確認しステップS50、不一致となった式の内容に基づいて故障がなかった2つのデータから、残りの1つのデータを復元するステップS51。ただし、ステップS50での故障ブロックの検出とステップS51でのデータの復元は2つのブロックが同時に故障した場合は不可能である。次に、レイドコントローラ11は、故障が検出されたブロックをメモリマットを特定してバッドブロックテーブル12に登録するとともに、当該ブロックを有効ブロックテーブル13から削除するステップS52。ステップS52の後は、上述したステップS47及びステップS48の処理が行われる。以上のようにして不揮発性半導体記憶装置1から、ユーザによって指示されたユーザアドレス0のブロックに記憶されていたData10101111が読み出される。本実施形態の不揮発性半導体記憶装置1では、複数のメモリマットに、データとそのパリティデータとを分散させて書き込むことで冗長性を付加している。すなわち、メモリマット数を単位としてパリティデータが生成される。したがって、パリティデータの生成単位はページ数とは無関係となり、背景技術で説明したようなページ数に関係する復元可能性の低下は問題とならない。また、本実施形態の不揮発性半導体記憶装置1では、1つの不揮発性半導体記憶装置内でRAIDシステムを構築でき、ブロック単位で故障箇所の置換を行えるようにしているので、エラーが発生した場合の記憶領域の置換を自動で行うことができ、複数のハードディスクドライブ装置や複数の半導体ドライブ装置を用いてRAIDを構築する場合に必要となるドライブ装置の交換が不要となるという利点がある。また、ブロック単位で記憶領域の冗長性の確保と置換とを行っているため、信頼性の向上と、操作性の向上とを容易に図ることができる。また、不揮発性半導体記憶装置1は1つの半導体チップとして実現することができ、その場合、半導体チップ内部のハードウェアにおいてRAIDシステムを構築することによる信頼性向上を図ることができるため、従来信頼性向上のために用いているソフトウェアの負荷軽減につながる。なお、本発明の実施の形態は上記のものに限定されず、例えば、メモリマット数を増やしたり、バッドブロックテーブル12や有効ブロックテーブル13に冗長性を持たせたりといった変更を適宜行うことができる。"