(57)【要約】【課題】ページ単位でデータを消失してもデータを復元することができるメモリコントローラを得ること。【解決手段】不揮発性メモリへ書き込む一定データ長のユニットデータごとに不揮発性メモリ上の格納位置を決定する制御部と、複数のパリティ格納部と、格納位置に基づいて１つのパリティ格納部を選択するアクセス制御部と、ユニットデータと選択されたパリティ格納部に格納されたデータとを用いてビット位置ごとにＸＯＲ演算を行い、演算結果を選択されたパリティ格納部へ格納するＸＯＲ演算部と、を備え、ユニットデータを不揮発性メモリに書込み、入力されたユニットデータの数が所定数になると、パリティ格納部に格納されたＸＯＲ演算の演算結果を不揮発性メモリへ書き込む。【選択図】図２
2015018451.tif 000002
【特許請求の範囲】
【請求項１】
所定のデータ単位であるページ単位で書込みが行われる不揮発性メモリを制御するメモリコントローラであって、
前記不揮発性メモリへ書き込むデータを分割して一定データ長のユニットデータを生成し、前記ユニットデータごとに、前記ユニットデータの前記不揮発性メモリ上の格納位置を決定する制御部と、
記憶手段である複数のパリティ格納部と、
前記ユニットデータごとに、前記格納位置に基づいて前記複数のパリティ格納部から１つを選択するアクセス制御部と、
入力された前記ユニットデータと前記アクセス制御部により選択された前記パリティ格納部に格納されたデータとを用いてビット位置ごとにＸＯＲ演算を行い、前記ＸＯＲ演算の演算結果を前記アクセス制御部により選択された前記パリティ格納部へ格納するＸＯＲ演算部と、
前記ユニットデータを前記不揮発性メモリへ書込み、前記ＸＯＲ演算部へ入力された前記ユニットデータの数が所定数になると、前記パリティ格納部に格納された前記ＸＯＲ演算の演算結果を前記不揮発性メモリの前記ユニットデータが格納されたページとは異なるページへ書き込むメモリインタフェースと、
を備えるメモリコントローラ。
【請求項２】
前記ユニットデータに対して符号化処理を実施してページ内パリティを生成する符号化部、をさらに備え、
前記メモリインタフェースは、前記ユニットデータと当該ユニットデータに対応する前記ページ内パリティを前記不揮発性メモリの同一ページに書込む請求項１に記載のメモリコントローラ。
【請求項３】
前記不揮発性メモリのメモリセルをシングルレベルセルとし、
前記パリティ格納部を２つ備え、
前記制御部は、前記不揮発性メモリのワード線の並び順にページ番号を連続して割当て、前記格納位置としてページ番号を決定し、
前記アクセス制御部は、前記ユニットデータに割当てられたページ番号が偶数の場合と奇数の場合で、異なる前記パリティ格納部を選択する請求項１または２に記載のメモリコントローラ。
【請求項４】
前記不揮発性メモリのメモリセルをマルチレベルセルとし、
前記パリティ格納部を前記メモリセルに格納可能なビット数と同一の個数備え、
前記制御部は、１つの前記メモリセルへ格納される複数のビットを、前記半導体メモリへの書込みが行われる順にビットごとにそれぞれ異なる種別のページに割当て、前記格納位置としてページの種別を識別する情報を含め、
前記アクセス制御部は、前記ユニットデータに割当てられたページの種別ごとにそれぞれ異なる前記パリティ格納部を選択する請求項１または２に記載のメモリコントローラ。
【請求項５】
前記不揮発性メモリでは、複数のワード線で構成されるブロック単位で消去が行われ、
前記制御部は、前記格納位置として前記ユニットデータが格納されるブロックの番号を含め、前記ユニットデータごとに当該ユニットデータが属するパリティグループを決定し、前記パリティグループの決定では、前記パリティグループが複数のブロックに格納される前記ユニットデータで構成されかつ前記パリティグループが前記複数のブロックにそれぞれ格納される１つずつの前記ユニットデータで構成されるよう前記パリティグループを決定し、
前記アクセス制御部は、前記ユニットデータが属するパリティグループに基づいて前記パリティ格納部を選択する請求項１または２に記載のメモリコントローラ。
【請求項６】
前記不揮発性メモリから読み出された前記ユニットデータおよび前記ページ内パリティに基づいて復号処理を行う復号部、
を備え、
前記アクセス制御部は、前記復号処理の結果に基づいて、前記ユニットデータごとに、ＸＯＲパリティを用いたデータ復元を行うか否かを判断し、ＸＯＲパリティを用いたデータ復元を行うと判断した前記ユニットデータをエラーページデータとし、データ復元用として用いる前記パリティ格納部を選択し、
前記メモリインタフェースは、前記エラーページデータを用いて生成されたＸＯＲパリティと当該ＸＯＲパリティの生成に用いられた前記ユニットデータのうち前記エラーページデータを除く前記ユニットデータとを復元処理データとして前記不揮発性メモリから読出し、
前記ＸＯＲ演算部は、データ復元用として選択された前記パリティ格納部に格納されたデータと前記復元処理データとを用いてビットごとにＸＯＲ演算を行うことにより前記エラーページデータを復元する請求項１〜５のいずれか１つに記載のメモリコントローラ。
【請求項７】
前記符号化部は、前記符号化処理として誤り訂正符号化処理を実施する請求項１〜６のいずれか１つに記載のメモリコントローラ。
【請求項８】
前記制御部は、前記所定数を前記復号処理により検出された誤り数の累積回数に基づいて決定する請求項７に記載のメモリコントローラ。
【請求項９】
前記制御部は、前記所定数を前記不揮発性メモリへの書込みの累積回数に基づいて決定する請求項１〜７のいずれか１つに記載のメモリコントローラ。
【請求項１０】
前記符号化部は、前記符号化処理として誤り検出符号化処理を実施する請求項１〜６、９のいずれか１つに記載のメモリコントローラ。
【請求項１１】
不揮発性メモリと、
磁気ディスクと、
前記不揮発性メモリおよび前記磁気ディスクに対するデータのリード処理及びライト処理を制御する請求項１〜１０のいずれか１つに記載のメモリコントローラと、
を備える記憶装置。
【請求項１２】
所定のデータ単位であるページ単位で書込みが行われる不揮発性メモリを制御するメモリ制御方法であって、
前記不揮発性メモリへ書き込むデータを分割して一定データ長のユニットデータを生成し、前記ユニットデータごとに、前記ユニットデータの前記不揮発性メモリ上の格納位置を決定し、
前記ユニットデータごとに、前記格納位置に基づいて複数のパリティ格納部から１つを選択し、
入力された前記ユニットデータと選択された前記パリティ格納部に格納されたデータとを用いてビット位置ごとにＸＯＲ演算を行い、前記ＸＯＲ演算の演算結果を選択された前記パリティ格納部へ格納し、
前記ユニットデータを前記不揮発性メモリに書込み、前記ＸＯＲ演算の入力となった前記ユニットデータの数が所定数になると、前記パリティ格納部に格納された前記ＸＯＲ演算の演算結果を前記不揮発性メモリの前記ユニットデータが格納されたページとは異なるページへ書き込むメモリ制御方法。
【請求項１３】
更に、前記ユニットデータに対して符号化処理を実施してページ内パリティを生成し、
前記ユニットデータと当該ユニットデータに対応する前記ページ内パリティを前記不揮発性メモリの同一ページに書込む請求項１２に記載のメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリコントローラ、記憶装置およびメモリ制御方法に関する。
【背景技術】
【０００２】
不揮発性メモリのアクセスを行うメモリコントローラにおいて、不揮発性メモリに格納されるデータに対して誤り訂正符号化処理を実施する技術が知られている。誤り訂正符号化処理を実施しておくことにより、不揮発性メモリに格納されたデータにエラーが生じた場合に、データを復元することができる。
【０００３】
不揮発性メモリとしてＮＡＮＤフラッシュメモリ（以下、ＮＡＮＤメモリという）を用いる場合、不揮発性メモリへの書込みはページとよばれる所定のデータ長単位で実施される。ＮＡＮＤメモリを用いる場合、誤り訂正符号化処理として、１つのページ内に書き込まれるデータに基づいてパリティを生成するページ内ＥＣＣ（Error  Check  and  Correct）処理が実施されることがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１３７９９４号公報
【特許文献２】特開２０１１−２０３８７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ページ内ＥＣＣ処理では、ページ内のデータに生じたエラーを復元することはできるが、ページ単位のデータ消失が生じるとデータを復元することは困難である。
【課題を解決するための手段】
【０００６】
本発明の一つの実施形態のメモリコントローラは、不揮発性メモリへ書き込む一定データ長のユニットデータごとに不揮発性メモリ上の格納位置を決定する制御部と、複数のパリティ格納部と、格納位置に基づいて１つのパリティ格納部を選択するアクセス制御部と、ユニットデータと選択されたパリティ格納部に格納されたデータとを用いてビット位置ごとにＸＯＲ演算を行い、演算結果を選択されたパリティ格納部へ格納するＸＯＲ演算部と、を備え、ユニットデータを不揮発性メモリに書込み、入力されたユニットデータの数が所定数になると、パリティ格納部に格納されたＸＯＲ演算の演算結果を不揮発性メモリへ書き込む。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態の記憶装置の構成例を示す図である。
【図２】図２は、ＮＡＮＤコントローラの構成例を示す図である。
【図３】図３は、半導体メモリに書き込まれたデータおよびＥＣＣパリティの一例を示す図である。
【図４】図４は、第１の実施の形態の半導体メモリの格納フォーマットの一例を示す図である。
【図５】図５は、ＮＡＮＤライト時のＸＯＲパリティ生成処理手順の一例を示すフローチャートである。
【図６】図６は、ＮＡＮＤリード時の動作手順の一例を示すフローチャートである。
【図７】図７は、エラーページ復元処理の処理手順の一例を示すフローチャートである。
【図８】図８は、第２の実施の形態におけるパリティグループの一例を示す図である。
【図９】図９は、第３の実施の形態におけるパリティグループの一例を示す図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかるメモリコントローラ、記憶装置およびメモリ制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００９】
（第１の実施形態）
図１は、第１の実施形態の記憶装置１の構成例を示す図である。本実施の形態の記憶装置１は、メモリコントローラ２、半導体メモリ（不揮発性メモリ）３および磁気ディスク５を備える。記憶装置１は、ホスト４と接続可能であり、図１ではホスト４と接続された状態を示している。ホスト４は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってもよいし、外部インタフェースであってもよい。
【００１０】
本実施の形態の記憶装置１は、半導体メモリ３と磁気ディスク５を有するハイブリッドドライブである。ハイブリッドドライブでは、半導体メモリ３は例えばライトキャッシュとして用いられる。即ち、ホスト４からのデータは、まず、キャッシュメモリとして用いられる半導体メモリ３に一旦書き込まれる。そして、その後磁気ディスク５に書き込まれる。
【００１１】
半導体メモリ３は、データを不揮発に記憶する不揮発性メモリであり、例えば、ＮＡＮＤメモリである。ここでは、半導体メモリ３としてＮＡＮＤメモリを用いる例を説明する。半導体メモリ３には、ページと呼ばれる書込み単位（例えば、１６キロバイト）で書込みが行われる。また、半導体メモリ３では、ブロックと呼ばれるデータ単位で消去が行われる。１ブロックは、複数のページを含む。後述の図２の例では、半導体メモリ３がＬ（Ｌは１以上の整数）個のバンク（Bank）で構成される例を示している。Bankは、１つ以上のブロックで構成される。各Bankは、並列に書込みまたは読出しの実行が可能である。
【００１２】
メモリコントローラ２は、ホスト４からの書込みコマンド（要求）に従って半導体メモリ３および磁気ディスク５への書込みを制御する。また、ホスト４からの読み出しコマンド（要求）に従って半導体メモリ３および磁気ディスク５からの読み出しを制御する。メモリコントローラ２は、ＨｏｓｔＩ／Ｆ（Interface）２１、ＮＡＮＤコントローラ２２、制御部２３、ディスクコントローラ２４およびデータバッファ２５を備える。ＨｏｓｔＩ／Ｆ２１、ＮＡＮＤコントローラ２２、制御部２３、ディスクコントローラ２４およびデータバッファ２５は、内部バス２０で接続されている。また、制御部２３は、ＨｏｓｔＩ／Ｆ２１、ＮＡＮＤコントローラ２２、ディスクコントローラ２４およびデータバッファ２５とそれぞれ、図示しない制御線により接続されている。
【００１３】
制御部２３は、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）等であり、記憶装置１の各構成要素を統括的に制御する。例えば、制御部２３は、ディスクコントローラ２４を介して磁気ディスク５への書込み、および磁気ディスク５からの読み出しを制御する。また、制御部２３は、ＮＡＮＤコントローラ２２を介して半導体メモリ３への書込み、および半導体メモリ３からの読み出しを制御する。
【００１４】
ＨｏｓｔＩ／Ｆ２１は、ホスト４との間のインタフェース規格に従った処理を実施し、ホスト４から受信した命令、データなどを内部バス２０に出力する。また、ＨｏｓｔＩ／Ｆ２１は、半導体メモリ３または磁気ディスク５から読み出されたデータ、制御部２３からの応答などをホスト４へ送信する。
【００１５】
ＮＡＮＤコントローラ２２は、制御部２３の指示に基づいて、書込みデータを半導体メモリ３へ書込む。また、ＮＡＮＤコントローラ２２は、制御部２３の指示に基づいて、半導体メモリ３からの読み出しを行う。ディスクコントローラ２４は、制御部２３の指示に基づいて、書込みデータを磁気ディスク５へ書込む。また、ディスクコントローラ２４は、制御部２３の指示に基づいて、磁気ディスク５からの読み出しを行う。
【００１６】
データバッファ２５は、メモリコントローラ２がホスト４から受信したデータを半導体メモリ３へ記憶するまでに一時的に格納する。また、データバッファ２５は、半導体メモリ３および磁気ディスク５から読出したデータをホスト４へ送信するまでに一時的に格納する。データバッファ２５は、例えば、ＳＲＡＭ（Static  Random  Access  Memory）やＤＲＡＭ（Dynamic  Random  Access  Memory）などの汎用メモリで構成される。なお、半導体メモリ３へ格納する書込みデータをデータバッファ２５に一時的に格納せずに直接ＮＡＮＤコントローラ２２へ入力するようにしてもよい。同様に、半導体メモリ３から読み出した読出しデータをデータバッファ２５に一時的に格納せずに直接ホスト４へ送信するようにしてもよい。
【００１７】
つぎに、記憶装置１の全体動作について説明する。まず、ホスト４からの書込みコマンドを受信した場合の動作、すなわち書込み動作について説明する。ホスト４からの書込みコマンドを受信した場合、制御部２３は、書込みデータを半導体メモリ３にキャッシュするか否かを判断する。キャッシュしない場合には、制御部２３は、その書込みデータを磁気ディスク５に書き込むようにディスクコントローラ２４に指示する。ディスクコントローラ２４は、制御部２３からの指示に基づいて書込みデータを磁気ディスク５に書き込む。具体的には、データバッファ２５に蓄積される書込みデータに対して、磁気ディスク５上の格納位置（物理アドレス）を割当てる。制御部２３は、書込みデータの論理アドレスと磁気ディスク５上の物理アドレスとの対応をアドレス情報として保持する。
【００１８】
一方、書込みデータを半導体メモリ３にキャッシュする場合、制御部２３は、書込みデータを半導体メモリ３に書き込むようにＮＡＮＤコントローラ２２へ指示する。具体的には、データバッファ２５に蓄積される書込みデータに対して、ユニットデータごとに、半導体メモリ３上の格納位置（物理アドレス）を割当てる。制御部２３は、書込みデータの論理アドレスと半導体メモリ３上の物理アドレスとの対応をアドレス情報として保持する。なお、本実施の形態では、半導体メモリ３の１ページに格納可能なデータのうちパリティ等の冗長データを除いた長さ（以下、第１単位とする）のデータをユニットデータと定義する。なお、本明細書では、半導体メモリ３の１ページとは、１ワード線に共通に接続されたメモリセル群を意味する。メモリセルとしてシングルレベルセルを用いる場合には、１ワード線に共通に接続されたメモリセルが１ページに相当し、メモリセルとしてマルチレベルセルを用いる場合には、１ワード線に共通に接続されたメモリセルが複数ページに相当する。以下、ユニットデータに割当てる半導体メモリ３上の物理アドレスをページアドレスと呼ぶ。ページアドレスは、ここではページを示す番号であるとし、物理的に隣接するワード線には連続するページアドレスが割当られるとする。
【００１９】
制御部２３は、複数のユニットデータに基づいて生成するＸＯＲパリティについても、半導体メモリ３上のページアドレスを割当てる。ＸＯＲパリティについては後述する。制御部２３は、ユニットデータごとに、ページアドレスを指定してＮＡＮＤコントローラ２２に対して半導体メモリ３への書き込み（ＮＡＮＤライト）の実施を指示する。
【００２０】
ＮＡＮＤコントローラ２２は、制御部２３からＮＡＮＤライトの実施を指示されると、ユニットデータに対して誤り訂正符号化処理を実施してパリティ（以下、ＥＣＣパリティという）を生成する。また、ＮＡＮＤコントローラ２２は、複数のユニットデータに基づいてＸＯＲパリティを生成する。ＸＯＲパリティの生成方法については後述する。ＮＡＮＤコントローラ２２は、ユニットデータと対応するＥＣＣパリティとを半導体メモリ３の同一ページに書き込む。また、ＮＡＮＤコントローラ２２は、ＸＯＲパリティを、制御部２３から指示された半導体メモリ３上のページへ書き込む。なお、書込みデータを半導体メモリ３にキャッシュする場合、当該書込みデータを磁気ディスク５にも書き込むようにしてもよい。
【００２１】
次に、ホスト４から読出しコマンドを受信した場合の動作、すなわち読出し動作について説明する。ホスト４から読出しコマンドを受信すると、制御部２３は、読出しが要求されたデータの論理アドレスと保持しているアドレス情報とに基づいて当該データの格納場所を特定する。アドレス情報には、ホスト４から受信したデータが磁気ディスク５と半導体メモリ３のどちらに格納された（または両方に格納された）かの区別が可能な情報が含まれているとする。
【００２２】
特定した格納場所が磁気ディスク５である場合、制御部２３は、ディスクコントローラ２４に読み出すデータの物理アドレスを指定して磁気ディスク５からの読み出しを指示する。ディスクコントローラ２４は、制御部２３からの指示に基づいて、磁気ディスク５からデータを読み出し、内部バス２０へ転送する。Ｈｏｓｔ  Ｉ／Ｆ２１は、読み出されたデータをホスト４へ転送する。読み出されたデータは、データバッファ２５に一時的に格納されてからＨｏｓｔ  Ｉ／Ｆ２１経由でホスト４に送信されてもよいし、直接、Ｈｏｓｔ  Ｉ／Ｆ２１経由でホスト４へ送信されてもよい。
【００２３】
読み出しを要求されたデータの格納場所が半導体メモリ３である場合、制御部２３は、ＮＡＮＤコントローラ２２に読み出すデータの物理アドレスを指定して半導体メモリ３からの読み出しを指示する。ＮＡＮＤコントローラ２２は、制御部２３からの指示に基づいて、半導体メモリ３からデータおよびＥＣＣパリティを読み出し、ＥＣＣパリティを用いて誤り訂正処理を行う。誤り訂正処理による訂正が不可であった場合、ＮＡＮＤコントローラ２２は、さらに半導体メモリ３からＸＯＲパリティを読み出し、ＸＯＲパリティを用いて訂正を行い、訂正後のデータを内部バス２０へ転送する。誤り訂正処理による訂正ができた場合、訂正後のデータを内部バス２０へ転送する。また、誤り訂正処理による訂正が無いと判断された場合、半導体メモリ３から読み出したデータをそのまま内部バス２０へ転送する。Ｈｏｓｔ  Ｉ／Ｆ２１は、内部バス２０に転送された読み出しデータ（誤りがあった場合は訂正後の読み出しデータ）をホスト４へ転送する。読み出しデータは、データバッファ２５に一時的に格納されてからＨｏｓｔ  Ｉ／Ｆ２１経由でホスト４に送信されてもよいし、直接、Ｈｏｓｔ  Ｉ／Ｆ２１経由でホスト４へ送信されてもよい。
【００２４】
一方、半導体メモリ３にキャッシュされたデータを磁気ディスク５に書き込む場合、上記の半導体メモリ３からの読み出し時と同様に半導体メモリ３からの読み出し動作が実施される。制御部２３は、半導体メモリ３からの読み出されたデータに対して磁気ディスク５上の物理アドレスを割当て、割当て結果をアドレス情報として保持する。そして、制御部２３は、ディスクコントローラ２４に対して、半導体メモリ３から読み出されたデータを磁気ディスク５へ書き込むよう指示する。
【００２５】
次に、本実施の形態の半導体メモリ３への書込みおよび半導体メモリ３からの読み出し動作について詳細に説明する。図２は、ＮＡＮＤコントローラ２の構成例を示す図である。ＮＡＮＤコントローラ２２は、ＮＡＮＤアクセス制御部２２１（アクセス制御部）、ＮＡＮＤ  Ｉ／Ｆ制御部（メモリインタフェース）２２２、ページ内ＥＣＣ部２２３（符号化部および復号部）、ＸＯＲ演算部２２４、パリティ格納部２２５−１，２２５−２およびセレクタ２２６を備える。ＮＡＮＤアクセス制御部２２１は、パリティ選択部２２７を備える。
【００２６】
ＮＡＮＤアクセス制御部２２１は、制御線（図２の点線）経由で入力される制御部２３からの指示に従って、半導体メモリ３へのアクセス（書込み、読み出し）を制御する。ＮＡＮＤ  Ｉ／Ｆ制御部２２２は、ＮＡＮＤアクセス制御部２２１からの指示に基づいて半導体メモリ３へのアクセスを実行する。ページ内ＥＣＣ部２２３は、内部バス２０から入力される書込みデータに対して所定のデータ単位ごとに誤り訂正符号化処理を実施してＥＣＣパリティを生成する。また、ページ内ＥＣＣ部２２３は、半導体メモリ３から読み出された読み出しデータおよびＥＣＣパリティを用いて誤り訂正処理を実施する。ＸＯＲ演算部２２４は、書込みデータを用いてＸＯＲパリティを生成する。また、ＸＯＲ演算部２２４は、ページ内ＥＣＣ部２２３により誤り訂正が不可であったデータを、半導体メモリ３から読み出したＸＯＲパリティを用いて復元する。パリティ格納部２２５−１，２２５−２は、ＸＯＲ演算部２２４の演算の中間演算結果を格納するための記憶手段であり、例えばＳＲＡＭ等で構成される。
【００２７】
本実施の形態の半導体メモリ３への書込み動作について説明する。制御部２３からＮＡＮＤライトの実施を指示されると、ＮＡＮＤコントローラ２２には、内部バス２０から書込みデータが入力される。ページ内ＥＣＣ部２２３は、書込みデータに対して、誤り訂正符号化処理を実施するデータ単位（以下、ＥＣＣ単位という）ごとに誤り訂正符号化処理を実施してＥＣＣパリティを生成する。ページ内ＥＣＣ部２２３は、ＥＣＣ単位の書込みデータとＥＣＣパリティとをＮＡＮＤ  Ｉ／Ｆ制御部２２２へ出力する。ＮＡＮＤ  Ｉ／Ｆ制御部２２２は、同一ページに書き込むＥＣＣ単位の書込みデータとＥＣＣパリティとをＮＡＮＤアクセス制御部２２１から指示されたページアドレスに書き込む。
【００２８】
ページ内ＥＣＣ部２２３が実施する誤り訂正符号化処理としてはどのような符号化処理を用いてもよいが、例えば、ＢＣＨ符号化処理、ＲＳ（Reed  Solomon）符号化処理等を用いることができる。ＥＣＣ単位は、ユニットデータのデータ長である第１単位以下である。例えば、ＥＣＣ単位を第１単位としてもよいし、ＥＣＣ単位を第１単位の整数分の１としてもよい。ページ内ＥＣＣ部２２３が生成したＥＣＣパリティは、半導体メモリ３に書き込まれる際に、当該ＥＣＣパリティの生成の元となったデータと同じページに書き込まれる。図３は、半導体メモリ３に書き込まれたデータおよびＥＣＣパリティ（図ではＥＣＣと略す）の一例を示す図である。図３は、半導体メモリ３の１ページ分の格納フォーマットを示している。図３の例では、第１単位（Ｋビットとする）ごとにＥＣＣパリティを生成する例を示している。ＥＣＣ単位を第１単位のＪ（Ｊは２以上の整数）分の１とする場合には、同一ページにＪ個のＥＣＣパリティが格納される。
【００２９】
なお、図示はしていないが、半導体メモリ３のBankごとに並列に書込み、読み出しを実施する場合、一般にＮＡＮＤ  Ｉ／Ｆ制御部２２２およびページ内ＥＣＣ部２２３は、Bankごと（チャネルごと）に動作可能とする。例えば、ＮＡＮＤ  Ｉ／Ｆ制御部２２２およびページ内ＥＣＣ部２２３は、Bank数の回路を有し、各回路で並列に動作可能とする。
【００３０】
ここでは、ページ内ＥＣＣ部２２３が誤り訂正符号化処理を施してＥＣＣパリティを生成するようにしたが、ページ内ＥＣＣ部２２３は、誤り訂正符号化処理または誤り検出符号化処理を実施すればよい。ページ内ＥＣＣ部２２３は、誤り訂正符号化処理または誤り検出符号化処理を実施してパリティを生成する符号化部としての機能と、生成されたパリティとデータを用いて復号する復号部としての機能を有する。誤り訂正符号化処理の替わりに誤り検出符号化処理により誤り検出用パリティを生成する場合、例えばＣＲＣ（Cyclic  Redundancy  Check）等の誤り検出符号化処理により誤り検出用パリティを生成して、上記のＥＣＣパリティと同様に半導体メモリ３へ書き込む。
【００３１】
本実施の形態では、データと同一ページ（半導体メモリ３の同一ページ）に格納されるＥＣＣパリティ（ページ内パリティ）を生成するが、ページ内パリティでは、ページ単位でのデータ消失時にデータが復元できない。本実施の形態では、異なるページのデータを用いてＸＯＲパリティを生成することにより、ページ単位でのデータ消失時にもデータを復元できるようにする。また、半導体メモリ３の隣接するワード線のデータが同時に消失した場合にもデータが復元できるように、隣接するワード線に格納されるデータはそれぞれ異なるＸＯＲパリティに対応させる。
【００３２】
図４は、本実施の形態の半導体メモリ３の格納フォーマットの一例を示す図である。図４に示すように、本実施の形態では、ページ（Page）＃０〜ページ＃Ｍ（Ｍは１以上の整数）までの各ページには、図３に示したようなデータおよびＥＣＣパリティが格納される。図４の例では、半導体メモリ３のメモリセルがシングルレベルセルの場合を想定して、隣接するワード線に格納されるデータはそれぞれ異なるＸＯＲパリティに対応するよう、偶数ページに格納されるデータと奇数ページに格納されるデータとをそれぞれ異なるパリティグループとし、パリティグループごとにＸＯＲパリティを生成する。また、図４は、Bankの数を２つとし、２つのBank（Bank＃０、＃１）を１組としてＸＯＲパリティを生成する例を示している。ページ＃Ｍには、Bank＃０、＃１のページ＃０〜ページ＃Ｍのうち偶数ページに格納されるデータを用いて生成されたＸＯＲパリティ＃１（Even）と、Bank＃０、＃１のページ＃０〜ページ＃Ｍのうち奇数ページに格納されるデータを用いて生成されたＸＯＲパリティ＃２（Odd）とが格納される。すなわち、Bank＃０、＃１のページ＃０〜ページ＃Ｍのうち偶数ページに格納されるデータをパリティググループ＃１とし、Bank＃０、＃１のページ＃０〜ページ＃Ｍのうち奇数ページに格納されるデータをパリティググループ＃２とする。そして、パリティググループ＃１を用いてＸＯＲパリティ＃１（Even）を生成し、パリティググループ＃２を用いてＸＯＲパリティ＃２（Odd）を生成する。なお、ここでは２つのBank（Bank＃０、＃１）を１組としてＸＯＲパリティを生成する例を示しているが、ＸＯＲパリティを生成する際に組とするBankの数はこれに限定されず１以上であればよい。
【００３３】
ＸＯＲパリティを生成する際に組とするBankの数（以下、ＮＢとする）、およびＸＯＲパリティの生成の際に組とするページの数（上記のＭ＋１）は、制御部２３により決定される。制御部２３は、これらの決定結果をＮＡＮＤアクセス制御部２２１に通知する。制御部２３は、ＮＢおよびＭをどのように決定してもよいが、ＸＯＲパリティは、復元可能なビット数が１ビットと固定であるため、半導体メモリ３に格納されたデータのエラー発生頻度が高いほど、生成の元になるデータ量を少なく（すなわちＮＢおよびＭを小さく）することが望ましい。したがって、例えば、半導体メモリ３に格納されるデータの誤りの推定発生頻度に応じて決定することができる。例えば、初期値としては、ＮＢおよびＭを任意の値に設定しておき、半導体メモリ３における消去の累積回数、等に応じてＮＢ、Ｍを変更する方法が考えられる。また、ページ内ＥＣＣ部２２３により検出された誤りの数の累積値に応じてＮＢ、Ｍを変更してもよい。また、制御部２３は、生成されたＸＯＲパリティを格納するページアドレスを決定して、ＮＡＮＤアクセス制御部２２１へ指示する。
【００３４】
図５は、ＮＡＮＤライト時のＸＯＲパリティ生成処理手順の一例を示すフローチャートである。ＮＡＮＤアクセス制御部２２１は、制御部２３からＮＡＮＤライトを指示されると、パリティモードをライトに設定する（ステップＳ１）。具体的には、ＮＡＮＤアクセス制御部２２１は、ＸＯＲ演算部２２４、セレクタ２２６に対して、以下に示すライト時の動作を行うよう設定する。
【００３５】
次に、ＮＡＮＤアクセス制御部２２１は、パリティ格納部２２５−１，２２５−２のデータを初期化する（ステップＳ２）。ＮＡＮＤアクセス制御部２２１は、書込み実行処理を起動する（ステップＳ３）。書込み実行処理は、ユニットデータごと（すなわち半導体メモリ３のページごと）に実施される処理であり、書込み実行処理が起動されると、ページ内ＥＣＣ部２２３およびＮＡＮＤ  Ｉ／Ｆ制御部２２２は、上述した半導体メモリ３への書込み時の動作を実行する。
【００３６】
一方、内部バス２０からページ内ＥＣＣ部２２３に入力される書込みデータは、ＸＯＲ演算部２２４にも入力される。ＮＡＮＤアクセス制御部２２１のパリティ選択部２２７は、ユニットデータごとに、制御部２３から指示されたページアドレスに基づいて奇数ページであるか偶数ページであるかを判定し、判定結果に基づいて、使用するパリティ格納部２２５−１，２２５−２を選択する（ステップＳ４）。この選択結果は、ＸＯＲ演算部２２４に指示される。例えば、パリティ格納部２２５−１を偶数ページ用、パリティ格納部２２５−２を奇数ページ用と定めておき、パリティ選択部２２７は、ユニットデータを偶数ページに書き込む場合はパリティ格納部２２５−１を選択する。
【００３７】
ＸＯＲ演算部２２４は、内部バス２０から入力されたユニットデータ（書込みデータ）と、選択されたパリティ格納部に格納されているデータ（ＸＯＲパリティの演算途中結果）とを用いて、ビットごとにＸＯＲ演算を行い、ＸＯＲ演算結果を生成する（ステップＳ５）。ＸＯＲ演算部２２４は、ユニットデータのビット数（Ｋ個）のＸＯＲ回路を有し、ビットごとに並列に演算を行う。すなわち、ユニットデータ内のビット位置ごとに、各ユニットデータの同一ビット位置のデータのＸＯＲを計算する。ＸＯＲ演算結果はＫビットのデータとして、ＸＯＲ演算部２２４から出力される。ＸＯＲ演算部２２４は、ＸＯＲ演算結果（Ｋビットのデータ）を、選択されたパリティ格納部へ書き戻す（ステップＳ６）。すなわち、選択されたパリティ格納部のデータをステップＳ５で生成したＸＯＲ演算結果に更新する。
【００３８】
次に、ＮＡＮＤアクセス制御部２２１は、ＸＯＲパリティの生成が完了したか否かを判断する（ステップＳ７）。ＮＡＮＤアクセス制御部２２１は、上記のＮＢ個のBankのＭページに格納されるユニットデータが全てＸＯＲ演算部２２４に入力された場合に、ＸＯＲパリティの生成が完了したと判断する。
【００３９】
ＸＯＲパリティの生成が完了していない場合（ステップＳ７  Ｎｏ）、ステップＳ３へ戻る。ＸＯＲパリティの生成が完了した場合（ステップＳ７  Ｙｅｓ）、ＮＡＮＤアクセス制御部２２１は、生成されたＸＯＲパリティの半導体メモリ３への書込みを実行し（ステップＳ８）、処理を終了する。具体的には、ＮＡＮＤアクセス制御部２２１は、ＸＯＲパリティを格納するページアドレスに応じて、パリティ格納部（パリティ格納部２２５−１，２２５−２のいずれか）を選択し、セレクタ２２６に対して選択結果を指示する。セレクタ２２６は、指示されたパリティ格納部に格納されたデータをページ内ＥＣＣ部２２３へ出力する。ページ内ＥＣＣ部２２３は、通常のライトデータと同様に入力されたＸＯＲパリティに対して誤り訂正符号を生成し、ＸＯＲパリティに付加して、ＮＡＮＤ  Ｉ／Ｆ制御部２２２へ出力する。
【００４０】
次に、本実施の形態の半導体メモリ３からの読み出し（ＮＡＮＤリード）動作について説明する。図６は、ＮＡＮＤリード時の動作手順の一例を示すフローチャートである。制御部２３からＮＡＮＤリードの実施を指示されると、ＮＡＮＤコントローラ２２は、読み出しを要求されたページを読み出すＮＡＮＤ読出し実行処理を起動する（ステップＳ１１）。制御部２３は、ＮＡＮＤ  Ｉ／Ｆ制御部２２２へ読み出すページアドレスを指定して半導体メモリ３からの読出しを指示する。ＮＡＮＤ  Ｉ／Ｆ制御部２２２は、半導体メモリ３から読み出したデータをページ内ＥＣＣ部２２３へ入力する。
【００４１】
ページ内ＥＣＣ部２２３は、半導体メモリ３の同一ページに格納されたデータおよびＥＣＣパリティを用いて誤り訂正処理（ページ内ＥＣＣ復号処理）を実施する（ステップＳ１２）。ページ内ＥＣＣ部２２３は、ページ内ＥＣＣ復号処理により誤り訂正が不可であったか否かを判断し（ステップＳ１３）、誤りが訂正できた場合（ステップＳ１３  Ｎｏ）、誤り訂正後のデータを出力（内部バス２０へ転送）する（ステップＳ１４）。なお、誤りが無かった場合、ページ内ＥＣＣ部２２３は、半導体メモリ３からの読み出したデータをそのまま出力するが、図６では、この場合も上記の誤りが訂正できた場合に含めている。
【００４２】
一方、誤りが訂正不可であった場合（ステップＳ１３  Ｙｅｓ）、ページ内ＥＣＣ部２２３は、ＮＡＮＤアクセス制御部２２１へその旨を通知し、ＮＡＮＤアクセス制御部２２１は、エラーページ復元処理を起動する（ステップＳ１５）。エラーページ復元処理については、後述する。エラーページ復元処理の後、復元後のデータが読出しデータとして（内部バス２０へ）出力される（ステップＳ１６）。
【００４３】
ＥＣＣパリティの替わりに誤り検出用パリティを用いる場合は、ステップＳ１２では、データと誤り検出用パリティを用いて誤り検出処理を実施し、ステップＳ１３では誤り無しであったか否かを判断する。そして、誤りが無かった場合、ステップＳ１４へ進み、誤りが有った場合にステップＳ１５へ進む。
【００４４】
次に、エラーページ復元処理について説明する。図７は、エラーページ復元処理の処理手順の一例を示すフローチャートである。ＮＡＮＤアクセス制御部２２１は、エラーページ復元処理を起動すると、パリティモードをリードに設定する（ステップＳ２１）。具体的には、ＮＡＮＤアクセス制御部２２１は、ＸＯＲ演算部２２４、セレクタ２２６に対して、以下に示すリード時の動作を行うよう設定する。
【００４５】
次に、ＮＡＮＤアクセス制御部２２１は、パリティ格納部２２５−１，２２５−２のデータを初期化する（ステップＳ２２）。ＮＡＮＤアクセス制御部２２１は、エラーが発生した（エラー訂正が不可であった）ページを含むパリティグループに属するデータ（エラーが発生したページのデータを除く）のうち１ページ分のデータを半導体メモリ３から読み出すようＮＡＮＤ  Ｉ／Ｆ制御部２２２へ指示する（ステップＳ２３）。パリティ選択部２２７は、読み出したページのページアドレス（ページ番号）に基づいて使用するパリティ格納部を選択する（ステップＳ２４）。エラーページ復元の場合、パリティ格納部は１つ使用すればよいので、どちらのパリティ格納部を選択してもよい。
【００４６】
ＸＯＲ演算部２２４は、半導体メモリ３から読み出されたデータと、選択されたパリティ格納部に格納されているデータとを用いて、ビットごとにＸＯＲ演算を行い、ＸＯＲ演算結果を生成する（ステップＳ２５）。ＸＯＲ演算部２２４は、ＸＯＲ演算結果（Ｋビットのデータ）を、選択されたパリティ格納部へ書き戻す（ステップＳ２６）。すなわち、選択されたパリティ格納部のデータをステップＳ２５で生成したＸＯＲ演算結果に更新する。
【００４７】
ＮＡＮＤアクセス制御部２２１は、エラーが発生したページを含むパリティグループに属するデータに対応する全てのページのリードを完了したか否かを判断し（ステップＳ２７）、完了していない場合（ステップＳ２７  Ｎｏ）、ステップＳ２３へ戻る。エラーが発生したページを含むパリティグループに属するデータに対応する全てのページ（訂正不可エラーが発生したページ自体は除く）のリードを完了した場合（ステップＳ２７  Ｙｅｓ）、選択されたパリティ格納部に格納されたＸＯＲ演算結果を、エラーが発生したページの復元結果として出力し（ステップＳ２８）、処理を終了する。
【００４８】
以上の処理により、半導体メモリ３への書込み時には、ＸＯＲパリティとして偶数ページと奇数ページごとに、以下の式（１）に示すＸＯＲパリティ＃１（Even）と、ＸＯＲパリティ＃２（Odd）が生成される。ＸＯＲパリティ＃１（Even）［ｉ］は、ＸＯＲパリティ＃１（Even）のｉ番目のビットとし、ＸＯＲパリティ＃２（Odd）［ｉ］は、ＸＯＲパリティ＃２（Odd）のｉ番目のビットとする。なお、１組とするBankの数をＮＢとし、１組とするページ数をＭ＋１とし、Ｍを奇数とする。また、Data［ａ，ｂ，ｃ］は、Bank＃ａのｂページに格納されるユニットデータのｃ番目のビットを示し、＋はＸＯＲ演算を示す。
ＸＯＲパリティ＃１（Even）［ｉ］
＝Data［０，０，ｉ］＋Data［０，２，ｉ］＋…＋Data［０，Ｍ−１，ｉ］
＋Data［１，０，ｉ］＋Data［１，２，ｉ］＋…＋Data［１，Ｍ−１，ｉ］
ＸＯＲパリティ＃２（Odd）［ｉ］
＝Data［０，１，ｉ］＋Data［０，３，ｉ］＋…＋Data［０，Ｍ，ｉ］
＋Data［１，３，ｉ］＋Data［１，３，ｉ］＋…＋Data［１，Ｍ，ｉ］  …（１）
【００４９】
一方、ＸＯＲパリティを用いたデータ復元時には、復元対象のページ（エラーの発生したページ）をBank＃０のページ番号ｋｅとするとき、復元後のデータのｉ番目のビット値Ｃｄａｔａ［ｉ］は、以下の式（２）により算出される。
復元対象のページが偶数ページの場合：
Ｃｄａｔａ［ｉ］
＝ＸＯＲパリティ＃１（Even）［ｉ］
＋Data［０，０，ｉ］＋…Data［０，ｋｅ−２，ｉ］＋Data［０，ｋｅ＋２，ｉ］
＋…＋Data［０，Ｍ−１，ｉ］
＋Data［１，０，ｉ］＋Data［１，２，ｉ］＋…＋Data［１，Ｍ−１，ｉ］
復元対象のページが奇数ページの場合：
Ｃｄａｔａ［ｉ］
＝ＸＯＲパリティ＃２（Odd）［ｉ］
＋Data［０，１，ｉ］＋…Data［０，ｋｅ−２，ｉ］＋Data［０，ｋｅ＋２，ｉ］
＋…＋Data［０，Ｍ，ｉ］
＋Data［１，１，ｉ］＋Data［１，３，ｉ］＋…＋Data［１，Ｍ，ｉ］  …（２）
【００５０】
同様に、このように、復元対象のページのデータを除くパリティグループ内のデータとＸＯＲパリティとのＸＯＲ演算により、復元データを算出することができる。
【００５１】
以上のように、本実施の形態では、半導体メモリ３に格納されるデータに対して、データと同一のページに格納するＥＣＣパリティを生成するとともに、偶数ページと奇数ページに分けて複数のページのデータでパリティグループを生成し、パリティグループごとにＸＯＲパリティを生成するようにした。このため、簡易な構成で、ページ単位のデータ消失時にデータを復元することができる。特に、隣接するワード線のデータが同時に消失した場合にもデータを復元することができる。
【００５２】
（第２の実施の形態）
図８は、第２の実施の形態におけるパリティグループの一例を示す図である。本実施の形態の記憶装置１の構成は第１の実施の形態と同様である。以下、第１の実施の形態と同様の部分は重複する説明を省略し、第１の実施の形態と異なる部分を説明する。
【００５３】
本実施の形態では、半導体メモリ３のメモリセルとしてマルチレベルセルを用いる例を説明する。マルチレベルセルでは、例えば、２ビット／セルの場合、メモリセルに４つの閾値を設定することにより２ビットを記憶する。マルチレベルセルでは、２回のライト（プログラム）動作を実施することにより、２ビットの記録を行う。このうち、１回目のプログラム動作で記録したページをLowerページと呼び、２回目のプログラム動作で記録したページをUpperページと呼ぶ。
【００５４】
本実施の形態では、図８に示すように、Lowerページに格納するＮＢ×（Ｍ＋１）個のユニットデータで１つのパリティグループを生成し、Upperページに格納するＮＢ×（Ｍ＋１）個のユニットデータで別のパリティグループを生成する。ＮＢは、第１の実施の形態と同様に、ＸＯＲパリティの生成の際に組とするBankの数である。そして、パリティグループごとにＸＯＲパリティを生成する。マルチレベルセルを用いる場合、１つのワード線が故障すると、当該ワード線に対応するLowerページとUpperページの２ページが同時に消失する。本実施の形態では、LowerページとUpperページでパリティグループを分けることで、LowerページとUpperページが同時に消失しても、消失したページを復元できる。
【００５５】
本実施の形態のＸＯＲパリティの生成手順は、第１の実施の形態の図５で示したＸＯＲパリティの生成手順において、偶数ページ、奇数ページをそれぞれLowerページ、Upperページに置き換えたものとなる。例えば、パリティ格納部２２５−１，２２５−２をそれぞれLowerページ用、Upperページ用とする。そして、半導体メモリ３へ書き込むユニットデータに割当られたページアドレスがLowerページのアドレスであった場合は、図５のステップＳ４では、パリティ格納部２２５−１を選択する。
【００５６】
本実施の形態で生成されるLowerページ用のパリティをＸＯＲパリティ＃１（Lower）とし、Upperページ用のパリティをＸＯＲパリティ＃２（Upper）とする。LowerページのページアドレスをＬk，UpperページのページアドレスをＵkとする。ＸＯＲパリティ＃１（Lower）［ｉ］は、ＸＯＲパリティ＃１（Lower）のｉ番目のビットとし、ＸＯＲパリティ＃２（Upper）［ｉ］は、ＸＯＲパリティ＃２（Upper）のｉ番目のビットとすると、ＸＯＲパリティ＃１（Upper）［ｉ］、ＸＯＲパリティ＃２（Upper）［ｉ］は、以下の式（３）となる。
ＸＯＲパリティ＃１（Lower）［ｉ］
＝Data［０，Ｌ0，ｉ］＋Data［０，Ｌ1，ｉ］＋…＋Data［０，ＬM，ｉ］
＋Data［１，Ｌ0，ｉ］＋Data［１，Ｌ1，ｉ］＋…＋Data［１，ＬM，ｉ］
ＸＯＲパリティ＃２（Upper）［ｉ］
＝Data［０，Ｕ0，ｉ］＋Data［０，Ｕ1，ｉ］＋…＋Data［０，ＵM，ｉ］
＋Data［１，Ｕ0，ｉ］＋Data［１，Ｕ1，ｉ］＋…＋Data［１，ＵM，ｉ］  …（３）
【００５７】
ＸＯＲパリティを用いたデータ復元処理についても、第１の実施の形態の図７で示したデータ復元処理において、偶数ページ、奇数ページをそれぞれLowerページ、Upperページに置き換えたものとなる。エラーが検出されたページのデータは、第１の実施の形態と同様に、ビットごとに、復元対象のページが属するパリティグループの復元対象のページ以外のページのデータと、ＸＯＲパリティとのＸＯＲ演算により復元できる。以上述べた以外の本実施の形態の動作は、第１の実施の形態と同様である。
【００５８】
本実施の形態では、２ビット／セルのマルチレベルセルを用いる例を説明したが、３ビット／セルのマルチレベルセルを用いる場合も、パリティグループを３つの種別のページ（Lowerページ、middleページ、Upperページ）ごとに生成すれば、同様にワード線単位の消失時にデータの復元が可能となる。この場合、パリティ格納部を３つ備え、ＸＯＲパリティの生成時には、ページの種別（Lowerページ、middleページ、Upperページ）により、パリティ格納部を選択する。
【００５９】
以上のように、本実施の形態では、半導体メモリ３に格納されるデータに対して、データと同一のページに格納するＥＣＣパリティを生成するとともに、LowerページとUpperページに分けて複数のページのデータでパリティグループを生成し、パリティグループごとにＸＯＲパリティを生成するようにした。このため、半導体メモリ３にマルチレベルセルを用いる場合に、簡易な構成で、ワード線単位のデータ消失時にデータを復元することができる。
【００６０】
（第３の実施の形態）
図９は、第３の実施の形態におけるパリティグループの一例を示す図である。本実施の形態の記憶装置１の構成は第１の実施の形態と同様である。以下、第１の実施の形態と同様の部分は重複する説明を省略し、第１の実施の形態と異なる部分を説明する。
【００６１】
本実施の形態では、ブロック単位のデータ消失時にデータの復元ができるように、パリティグループを生成する。ブロックとは、ＮＡＮＤメモリの消去の単位であり、不良モードとしてブロックごと読み出せなくなるモードが存在する。本実施の形態では、１つのパリティグループを構成するユニットデータは、半導体メモリ３の互いに異なるブロックに格納される。これにより、図９に示すように、半導体メモリ３に格納された後は、各ブロックの１ページずつのデータによりパリティグループが構成されることになる。
【００６２】
図９の例では、２ビット／セルのマルチレベルセルを前提とし、Bank＃０，＃１のブロック＃０〜ブロック＃Ｍまでの合計２×（Ｍ＋１）ブロックのそれぞれ１ページでパリティグループを構成する。各パリティグループのデータを用いて生成されたＸＯＲパリティは、ＸＯＲパリティ格納ブロックに格納される。例えば、Bank＃０，＃１のブロック＃０〜ブロック＃Ｍの先頭のLowerページに格納されるデータを用いてＸＯＲパリティ＃１（Grp（Group）＃０）を生成する。Bank＃０，＃１のブロック＃０〜ブロック＃Ｍの先頭のUpperページに格納されるデータを用いてＸＯＲパリティ＃２（Grp（Group）＃０）を生成する。Bank＃０，＃１のブロック＃０〜ブロック＃Ｍの２番目のLowerページに格納されるデータを用いてＸＯＲパリティ＃１（Grp（Group）＃１）を生成する。
【００６３】
本実施の形態のＸＯＲパリティの生成手順は、第１の実施の形態の図５で示したＸＯＲパリティの生成手順において、偶数ページ、奇数ページによりパリティ格納部２２５−１，パリティ格納部２２５−２を選択する替わりにグループ番号（Grp＃０等）に基づいて選択する。パリティグループを構成するデータの決定は、制御部２３が実施し、制御部２３はユニットデータごとに対応するグループ番号をＮＡＮＤアクセス制御部２２１へ通知する。ＮＡＮＤアクセス制御部２２１は、通知されたグループ番号に基づいてパリティ格納部２２５−１，パリティ格納部２２５−２を選択する。
【００６４】
１つのブロックに格納されるページが属するパリティグループの数（図９のＮ＋１）のパリティ格納部を備えれば、半導体メモリ３への書込み順は、どのような方法であってもよい。ただし、Ｎが２以上であり、パリティ格納部の数がＮ＋１未満の場合（例えば、パリティ格納部の数が２つ）、書込み順に制約が生じる。一般的には、１つのブロックは、連続して半導体メモリに書き込まれる。図９の例では、例えばBank＃０のブロック＃０では、Lowerページ（Grp＃０）、Upperページ（Grp＃０）、Lowerページ（Grp＃１）、Upperページ（Grp＃１）、…の順に書き込まれる。Bank＃０のブロック＃０の書込みが終了した後に、Bank＃０のブロック＃１の書込みが行われる。これに対し、パリティ格納部を２つとする場合、２つのパリティグループを用いて２つのＸＯＲパリティを生成するとともにこれらのパリティグループに属するデータを半導体メモリ３へ書込む。そして、これらのＸＯＲパリティの生成が完了すると、次の２つのパリティグループのＸＯＲパリティ生成および半導体メモリ３への書込みを実施する、というように、２つのパリティグループごとに処理を実施する。図９の例では、各ブロックのLowerページ（Grp＃０）、Upperページ（Grp＃０）の書き込みが行われた後、各ブロックのLowerページ（Grp＃１）、Upperページ（Grp＃１）の書き込みが行われ、以降グループの順に書込みが実施される。この書込み順は、制御部２３が決定し、決定した書込み順はＮＡＮＤアクセス制御部２２１へ通知される。実質的には、制御部２３から各ユニットデータのページアドレスが通知される際に、書込み先のブロックを示す情報もページアドレスに含まれるため、ページアドレスの通知により、書込み順が通知されることになる。
【００６５】
ＸＯＲパリティのデータ復元時には、第１の実施の形態と同様に、ビットごとに、復元対象のページが属するパリティグループの復元対象のページ以外のページのデータと、ＸＯＲパリティとのＸＯＲ演算により復元できる。本実施の形態の動作は、以上に述べたパリティグループの構成方法と半導体メモリ３の書込み順が異なる以外は、第１の実施の形態と同様である。また、図９では、マルチレベルセルの例を示したが、シングルレベルセルを用いる場合も、各ブロックのそれぞれ１ページでパリティグループを構成すれば、同様に、ブロック単位のデータ消失時にデータの復元が可能である。
【００６６】
以上のように、本実施の形態では、半導体メモリ３に格納されるデータに対して、データと同一のページに格納するＥＣＣパリティを生成するとともに、各ブロック１ページずつのデータでパリティグループを生成し、パリティグループごとにＸＯＲパリティを生成するようにした。このため、ブロック単位のデータ消失時にデータを復元することができる。
【００６７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６８】
１  記憶装置、２  メモリコントローラ、３  半導体メモリ、５  磁気ディスク、２２  ＮＡＮＤコントローラ、２２１  ＮＡＮＤアクセス制御部、２２３  ページ内ＥＣＣ部、２２４  ＸＯＲ演算部、２２５−１，２２５−２  パリティ格納部、２２７  パリティ選択部。
【図１】
2015018451.tif 000003
【図２】
2015018451.tif 000004
【図３】
2015018451.tif 000005
【図４】
2015018451.tif 000006
【図５】
2015018451.tif 000007
【図６】
2015018451.tif 000008
【図７】
2015018451.tif 000009
【図８】
2015018451.tif 000010
【図９】
2015018451.tif 000011