(57)【要約】【課題】  信頼性を向上させることが可能なメモリシステムを提供する。【解決手段】  実施形態のメモリシステムは、不揮発性メモリと、コントローラとを具備する。コントローラは、複数の第１フレームを不揮発性メモリから読み出し、複数の第１フレームのそれぞれに対して第１誤り訂正を行い、第２フレームに対して第１シンドロームを生成し、第１シンドロームを用いて第２フレームに対して第２誤り訂正を行い、少なくとも１つの第３フレームに対して第３誤り訂正を行う。複数の第１フレームのそれぞれは第１データと、第１データの誤り訂正用の第１パリティとを含む。第２フレームは、第１誤り訂正が行われた複数の第１フレームにそれぞれ含まれる第１シンボルの集合と、第１シンボルの集合に対する誤り訂正用の第２パリティとを含む。第３フレームは、第２誤り訂正が行われた第１シンボルである第２シンボルを含む第１フレームである。【選択図】  図１９
2020195007.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
複数の第１フレームを前記不揮発性メモリから読み出し、
前記複数の第１フレームのそれぞれに対して第１誤り訂正を行い、
第２フレームに対して第１シンドロームを生成し、
前記第１シンドロームを用いて前記第２フレームに対して第２誤り訂正を行い、
少なくとも１つの第３フレームに対して第３誤り訂正を行う
コントローラと、
を具備し、
前記複数の第１フレームのそれぞれは第１データと、前記第１データの誤り訂正用の第１パリティとを含み、
前記第２フレームは、前記第１誤り訂正が行われた前記複数の第１フレームにそれぞれ含まれる第１シンボルの集合と、前記第１シンボルの集合に対する誤り訂正用の第２パリティとを含み、
前記第３フレームは、前記第２誤り訂正が行われた前記第１シンボルである第２シンボルを含む前記第１フレームである
メモリシステム。
【請求項２】
前記第２フレームは線型符号である、請求項１に記載のメモリシステム。
【請求項３】
前記コントローラは、
前記第３誤り訂正により誤りが訂正された前記少なくとも１つの第３フレームに含まれる前記第２シンボルである第３シンボルを用いて、前記第１シンドロームの少なくとも一部を更新することにより、第２シンドロームを生成する
請求項２に記載のメモリシステム。
【請求項４】
前記コントローラはさらに、
前記第１シンボルに対する第１部分シンドロームを生成し、
前記第１シンドロームから前記第１部分シンドロームをキャンセルすることにより第３シンドロームを生成し、
前記第３シンドロームに基づいて前記第２シンドロームを生成する
請求項３に記載のメモリシステム。
【請求項５】
前記コントローラはさらに、
前記第３シンボルに対する第２部分シンドロームを生成し、
前記第３シンドロームと前記第２部分シンドロームとに基づいて前記第２シンドロームを生成する
請求項４に記載のメモリシステム。
【請求項６】
前記コントローラは、
前記第１シンドロームと前記第１部分シンドロームとに対して排他的論理和演算を行うことにより前記第３シンドロームを生成し、
前記第３シンドロームと前記第２部分シンドロームとに対して排他的論理和演算を行うことにより前記第２シンドロームを生成する
請求項５に記載のメモリシステム。
【請求項７】
前記コントローラはさらに、
前記第２シンドロームを用いて第４フレームに対して第４誤り訂正を行い、
前記第４フレームは、前記第２フレームを構成する複数の第１シンボルのうち、少なくとも１つを前記第３シンボルに置換した前記第２フレームである
請求項５に記載のメモリシステム。
【請求項８】
前記コントローラはさらに、
前記第３シンドロームを用いて第５フレームに対して第５誤り訂正を行い、
前記第５フレームは、前記第２フレームを構成する複数の第１シンボルのうち、少なくとも１つを誤りシンボルであるとみなした前記第２フレームである
請求項５に記載のメモリシステム。
【請求項９】
揮発性メモリをさらに備え、
前記コントローラはさらに、
前記第１誤り訂正において誤りが訂正できなかった少なくとも１つの前記第１フレームである第６フレームを前記揮発性メモリに格納し、
前記第１部分シンドロームの生成にあたり、前記不揮発性メモリから前記第１フレームを再び読み出すことなく、前記揮発性メモリから前記第６フレームを読み出し、前記読み出した第６フレームに含まれる前記第１シンボルに基づいて、前記第１部分シンドロームを生成する
請求項４に記載のメモリシステム。
【請求項１０】
前記コントローラは、
前記第２部分シンドロームの生成にあたり、前記不揮発性メモリから前記第１フレームを再び読み出すことなく、第７フレームに含まれる前記第３シンボルに基づいて、前記第２部分シンドロームを生成し、
前記第７フレームは、前記第３誤り訂正において誤りが訂正できた前記少なくとも１つの第１フレームである
請求項５に記載のメモリシステム。
【請求項１１】
揮発性メモリをさらに備え、
前記コントローラはさらに、
前記第１シンドロームを前記揮発性メモリに格納し、
複数の前記第１シンボルに対する複数の第１部分シンドローム生成し、前記複数の第１部分シンドロームに対して排他的論理和演算を行うことにより第１累積部分シンドロームを生成し、
複数の前記第３シンボルに対する複数の第２部分シンドローム生成し、前記複数の第２部分シンドロームに対して排他的論理和演算を行うことにより第２累積部分シンドロームを生成し、
前記第１累積部分シンドローム、及び、前記第２累積部分シンドロームをさらに前記揮発性メモリに格納する、
請求項３に記載のメモリシステム。
【請求項１２】
前記コントローラは、
前記複数の第１部分シンドロームのうちの少なくとも１つの生成と、前記複数の第２部分シンドロームのうちの少なくとも１つの生成とを、並行して行う
請求項１１に記載のメモリシステム。
【請求項１３】
前記コントローラは、
前記第１シンドローム、前記第１累積部分シンドローム、及び、前記第２累積部分シンドロームに対して排他的論理和演算を行うことにより、前記第２シンドロームを生成する
請求項１１に記載のメモリシステム。
【請求項１４】
前記第３誤り訂正は、軟判定復号による誤り訂正である
請求項３に記載のメモリシステム。
【請求項１５】
前記第３誤り訂正は、硬判定復号による誤り訂正である
請求項３に記載のメモリシステム。
【請求項１６】
前記第１誤り訂正は、硬判定復号による誤り訂正である
前記第３誤り訂正は、軟判定復号による誤り訂正である
請求項３に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
デジタル通信において、データの信頼性を向上させるために、誤り訂正符号が用いられる。また、２種類の誤り訂正符号を用いた積符号が知られている。積符号を用いた誤り訂正は、誤り訂正能力を向上させることができる。
【０００３】
積符号を構成するＣ１符号（内符号とも呼ぶ）とＣ２符号（外符号とも呼ぶ）とでは、訂正処理の方向が異なる。Ｃ１符号とＣ２符号では、訂正処理におけるデータの単位が異なる。例えば、Ｃ１符号を用いた誤り訂正と、Ｃ２符号を用いた誤り訂正とを繰り返す場合、訂正処理にかかる時間が長くなってしまう。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４８７９３２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
実施形態は、信頼性を向上させることが可能なメモリシステムを提供する。
【課題を解決するための手段】
【０００６】
実施形態に係るメモリシステムは、不揮発性メモリと、コントローラとを具備する。コントローラは、複数の第１フレームを不揮発性メモリから読み出し、複数の第１フレームのそれぞれに対して第１誤り訂正を行い、第２フレームに対して第１シンドロームを生成し、第１シンドロームを用いて第２フレームに対して第２誤り訂正を行い、少なくとも１つの第３フレームに対して第３誤り訂正を行う。複数の第１フレームのそれぞれは第１データと、第１データの誤り訂正用の第１パリティとを含む。第２フレームは、第１誤り訂正が行われた複数の第１フレームにそれぞれ含まれる第１シンボルの集合と、第１シンボルの集合に対する誤り訂正用の第２パリティとを含む。第３フレームは、第２誤り訂正が行われた第１シンボルである第２シンボルを含む第１フレームである。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態に係る積符号の通信路モデルを説明する図。
【図２】第１実施形態に係る積符号による誤り訂正を実現するためのモジュール構成を説明する図。
【図３】第１実施形態に係るメモリシステムのブロック図。
【図４】第１実施形態に係るＲＳ符号のデータ構造を説明する図。
【図５】第１実施形態に係るＲＳ符号の符号化及び復号化を説明する図。
【図６Ａ】第１実施形態に係る２次元に配列されたＲＳフレーム及び符号化を説明する図。
【図６Ｂ】第１実施形態に係る２次元に配列されたＲＳフレーム及び復号化を説明する図。
【図７】第１実施形態に係るＬＤＰＣフレーム及び符号化を説明する図。
【図８】第１実施形態に係るＬＤＰＣフレーム及び復号化を説明する図。
【図９】第１実施形態に係るＬＤＰＣ訂正の単位及びＲＳ訂正の単位を説明する図。
【図１０】第１実施形態に係る積符号を用いた誤り訂正の一例を説明する図。
【図１１】第１実施形態に係るＲＳ通常訂正を説明する図。
【図１２】第１実施形態に係るＲＳ消失訂正を説明する図。
【図１３】第１実施形態に係るＲＳ消失訂正の応用を説明する図。
【図１４】第１実施形態に係るメモリコントローラの符号化動作を説明するフローチャート。
【図１５】第１実施形態に係る符号化のデータフローを説明する図。
【図１６Ａ】第１実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の一例（第１例）を説明する図。
【図１６Ｂ】第１実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の一例（第１例）を説明する図。
【図１６Ｃ】第１実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の一例（第１例）を説明する図。
【図１７Ａ】第１実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の他の一例（第２例）を説明する図。
【図１７Ｂ】第１実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の他の一例（第２例）を説明する図。
【図１７Ｃ】第１実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の他の一例（第２例）を説明する図。
【図１７Ｄ】第１実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の他の一例（第２例）を説明する図。
【図１８】第１実施形態に係る反復訂正を行う回路構成を説明するブロック図。
【図１９】第１実施形態に係る反復訂正の概要を説明するフローチャート。
【図２０】第１実施形態に係るＣ２シンドローム生成のデータフローを説明する図。
【図２１】第１実施形態に係る反復訂正動作を説明するフローチャート。
【図２２】第１実施形態に係るページ番号、ステージ処理、及びラウンド処理の関係を説明する図。
【図２３】第１実施形態に係るＣ２通常訂正のデータフローを説明する図。
【図２４】第１実施形態に係るＣ２消失訂正のデータフローを説明する図。
【図２５】第１実施形態に係るＣ２シンドローム更新動作を行う回路を説明するブロック図。
【図２６】第１実施形態に係るＣ２シンドローム更新動作を説明する図。
【図２７】第１実施形態に係るＣ２シンドローム更新動作を説明する図。
【図２８】第１実施形態に係るＣ２シンドローム更新動作を説明する図。
【図２９】第２実施形態に係るＣ２モジュールのブロック図。
【図３０】第２実施形態に係るＣ１訂正及びＣ２訂正による誤り訂正の一例（第１例）を説明する図。
【図３１】第２実施形態の第１例に係る誤り訂正の流れを説明する図。
【図３２】第２実施形態に係るＣ１訂正及びＣ２訂正による誤り訂正の他の一例（第２例）を説明する図。
【図３３】第２実施形態の第２例に係る誤り訂正の流れを説明する図。
【図３４Ａ】第３実施形態に係るＣ２シンドローム更新動作を行う回路を説明するブロック図。
【図３４Ｂ】第３実施形態に係るＣ２モジュール及びＳｙｎｄ_ＢＵＦのブロック図。
【図３５Ａ】第３実施形態に係る誤り訂正動作を説明する図。
【図３５Ｂ】第３実施形態に係る誤り訂正動作を説明する図。
【図３６】第３実施形態に係る誤り訂正動作を説明する図。
【図３７】第３実施形態に係る誤り訂正動作を説明する図。
【図３８】第３実施形態に係るＣ２シンドローム更新動作を説明する図。
【図３９】第３実施形態に係るＣ２シンドローム更新動作を説明する図。
【図４０】第３実施形態に係るＣ２シンドローム更新動作を説明する図。
【図４１】比較例に係る動作を説明する図。
【図４２】第４実施形態に係るメモリシステムのブロック図。
【図４３】第４実施形態に係る誤り訂正動作を説明するフローチャート。
【図４４】第４実施形態に係るＣ２シンドローム集合のデータ構造を説明する図。
【図４５】第４実施形態に係る軟判定復号におけるシンドロームをキャンセルする動作を説明する図。
【図４６】第４実施形態に係る軟判定復号におけるシンドロームを更新する動作を説明する図。
【図４７Ａ】第５実施形態に係るメモリシステムのブロック図。
【図４７Ｂ】第５実施形態に係る軟判定前処理の開始前の状態を示すブロック図。
【図４７Ｃ】第５実施形態に係る軟判定前処理のデータフローを示すブロック図。
【図４７Ｄ】第５実施形態に係る軟判定前処理のデータフローを示すブロック図。
【図４７Ｅ】第５実施形態に係る軟判定前処理のデータフローを示すブロック図。
【図４７Ｆ】第５実施形態に係る軟判定前処理の完了後の状態を示すブロック図。
【図４８Ａ】第５実施形態に係る軟判定後処理のデータフローを示すブロック図。
【図４８Ｂ】第５実施形態に係る軟判定後処理のデータフローを示すブロック図。
【図４８Ｃ】第５実施形態に係る軟判定後処理のデータフローを示すブロック図。
【図４８Ｄ】第５実施形態に係る軟判定後処理のデータフローを示すブロック図。
【図４８Ｅ】第５実施形態に係る軟判定後処理のデータフローを示すブロック図。
【図４９】第６実施形態に係るメモリシステムのブロック図。
【図５０】第６実施形態に係る誤り訂正動作を説明するフローチャート。
【図５１】第６実施形態に係るＣ１−ＳＤ訂正及びシンドロームの更新処理の流れを説明する図。
【図５２】第７実施形態に係る符号化動作を説明するフローチャート。
【図５３】第７実施形態に係る符号化のデータフローを説明する図。
【図５４】第７実施形態に係るシンドローム生成動作を説明するフローチャート。
【図５５】第７実施形態に係るシンドローム生成のデータフローを説明する図。
【図５６Ａ】第８実施形態に係るデータ構造を説明する図。
【図５６Ｂ】第８実施形態に係るデータ構造を説明する図。
【図５７】第８実施形態に係るメモリコントローラのブロック図。
【図５８】第８実施形態に係る符号化のデータフローを説明する図。
【図５９】第８実施形態に係るバスに転送されるべき積符号情報部の一例を説明する図。
【図６０】図５９の積符号情報部が実際にバスを転送される際のデータの流れを説明する図。
【図６１】第８実施形態に係るバスに転送されるべき積符号情報部の別の一例を説明する図。
【図６２】図６１の積符号情報部が実際にバスを転送される際のデータの流れを説明する図。
【図６３】第８実施形態に係る復号化に関連する回路構成を説明するブロック図。
【図６４】第８実施形態に係る復号化のデータフローを説明する図。
【発明を実施するための形態】
【０００８】
以下、実施形態について図面を参照して説明する。以下に示す幾つかの実施形態は、本発明の技術思想を具体化するための装置及び方法を例示したものであって、構成部品の形状、構造、配置等によって、本発明の技術思想が特定されるものではない。各機能ブロックは、ハードウェア及びソフトウェアのいずれか又は両者を組み合わせたものとして実現することができる。各機能ブロックが以下の例のように区別されていることは必須ではない。例えば、一部の機能が例示の機能ブロックとは別の機能ブロックによって実行されても良い。さらに、例示の機能ブロックがさらに細かい機能サブブロックに分割されていても良い。なお、以下の説明において、同一の機能及び構成を有する要素については同一符号を付し、重複説明は必要な場合にのみ行う。
【０００９】
ある実施形態についての記述は全て、明示的に又は自明的に排除されない限り、別の実施形態の記述としても当てはまる。また、実施形態の方法のフローにおけるいずれのステップも、例示の順序に限定されず、そうでないと示されない限り、例示の順序とは異なる順序で及び（又は）別のステップと並行して実行することが可能である。
【００１０】
［１］  第１実施形態
［１−１］  誤り訂正部の概要
本実施形態では、２種類の誤り訂正符号を組み合わせた一般連接符号又は積符号が用いられる。どちらの符号に対しても本実施形態は適用できるので、以下では積符号が用いられた場合を説明する。図１は、本実施形態に係る積符号の通信路モデルを説明する図である。
【００１１】
ホスト装置（Ｈｏｓｔ）から送信されたデータは、外符号により符号化され、続いて、内符号により符号化される。外符号及び内符号により符号化されたデータは、不揮発性メモリに格納される。不揮発性メモリに格納されたデータには、様々な要因（例えばノイズ）により、誤りが生じる可能性がある。
【００１２】
不揮発性メモリから読み出されたデータは、内符号により復号化され、続いて、外符号により復号化される。内符号及び外符号により復号化されたデータは、ホスト装置に送信される。
【００１３】
図２は、本実施形態に係る積符号による誤り訂正を実現するためのモジュール構成を説明する図である。前述の通り、内符号をＣ１符号、外符号をＣ２符号とも呼ぶ。誤り訂正能力は、例えば、“Ｃ１符号＞Ｃ２符号”の関係を有する。誤り訂正能力とは、複数ビットからなるデータのうち訂正可能な誤りビット数の比率である。本実施形態では、Ｃ１符号として、例えば、ＬＤＰＣ（低密度パリティ検査（Low-Density Parity-Check））符号が用いられ、Ｃ２符号として、例えば、ＲＳ（リード・ソロモン（Reed-Solomon））符号が用いられる。Ｃ１符号は、ＬＤＰＣ符号に限らず、ＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号などを用いても良い。Ｃ２符号は、ＲＳ符号に限らず、線型符号と呼ばれるクラスの符号であれば良い。
【００１４】
線型符号では、各符号語のパリティは、その符号語を構成する各シンボルのパリティを求め、それらを累積加算することで求めることができる。以下では、符号語の一部を構成するいくつかのシンボルに対するパリティを部分パリティと呼ぶ。特に、Ｃ２符号に対する部分パリティを、部分Ｃ２パリティと呼ぶ。また、線型符号では、各符号語のシンドロームは、その符号語を構成する各シンボルのシンドロームを求め、それらを累積加算することで求めることができる。以下では、符号語の一部を構成するいくつかのシンボルに対するシンドロームを部分シンドロームと呼ぶ。特に、Ｃ２符号に対する部分シンドロームを、部分Ｃ２シンドロームと呼ぶ。
【００１５】
図２に示すように、ホスト装置から送信されたデータは、Ｃ２モジュールにより符号化され、続いて、Ｃ１モジュールにより符号化される。Ｃ２符号（ＲＳ符号）及びＣ１符号（ＬＤＰＣ符号）により符号化されたデータは、不揮発性メモリに格納される。不揮発性メモリから読み出されたデータは、Ｃ１モジュールにより復号化され、続いて、Ｃ２モジュールにより復号化される。Ｃ１符号及びＣ２符号により復号化されたデータは、ホスト装置に送信される。
【００１６】
［１−２］  メモリシステムの構成
図３は、本実施形態に係るメモリシステム２のブロック図である。メモリシステム２は、ホスト装置１と接続可能である。ホスト装置１は、例えばサーバ、又はパーソナルコンピュータのような情報処理装置に搭載されるプロセッサやチップセットである。
【００１７】
メモリシステム２は、ホスト装置１が搭載されたマザーボード上にメモリシステム２を構成する複数のチップを実装して構成されても良い。メモリシステム２は、１つのモジュールで実現するシステムＬＳＩ（large-scale integrated circuit）、又はＳｏＣ（system on a chip）として構成されても良い。メモリシステム２は、ＳＳＤ（solid state drive）、ＳＤＴＭカードのようなメモリカード、及びｅＭＭＣ（embedded multimedia card）などで構成されても良い。本実施形態では、メモリシステム２は、ＳＳＤで構成される。
【００１８】
図３に示すように、メモリシステム２は、不揮発性メモリ３、及びメモリコントローラ４を備える。
【００１９】
本実施形態では、不揮発性メモリとして、ＮＡＮＤ型フラッシュメモリを例に挙げて説明する。不揮発性メモリ３は、ＮＡＮＤ型フラッシュメモリ３、ＮＡＮＤメモリ３、ＮＡＮＤ３と称される場合もある。不揮発性メモリとして、ＭＲＡＭ（magnetoresistive random access memory）、ＲｅＲＡＭ（resistive random access memory）、又はＰＣＲＡＭ（phase-change random access memory）などを採用しても良い。
【００２０】
ＮＡＮＤ型フラッシュメモリ３は、複数のメモリセルを備え、データを不揮発に記憶する。図３では、簡略化のために１個のＮＡＮＤ型フラッシュメモリ３を示している。メモリシステム２は、複数のＮＡＮＤ型フラッシュメモリ３を備えていても良い。この場合、複数のＮＡＮＤ型フラッシュメモリ３は、並列動作が可能である。ＮＡＮＤ型フラッシュメモリ３の内部構成は、公知のものを適用可能である。
【００２１】
メモリコントローラ４は、例えばホスト装置１からの命令に応答して、ＮＡＮＤ型フラッシュメモリ３に対して書き込み、読み出し、及び消去などを命令する。また、メモリコントローラ４は、ＮＡＮＤ型フラッシュメモリ３のメモリ空間を管理する。メモリコントローラ４は、ホストインターフェース回路（ホストＩ／Ｆ）１０、プロセッサ１１、ＳＲＡＭ（static random access memory）１２、ＤＲＡＭ（dynamic random access memory）１３、データバッファ（ＤＢＵＦ）１４、ＤＭＡＣ（direct memory access controller）１５、ＮＡＮＤインターフェース回路（ＮＡＮＤ Ｉ／Ｆ）１６、バス１７、ＥＣＣ（error checking and correcting）回路としてのＣ１モジュール２０、ＥＣＣ回路としてのＣ２モジュール２４、訂正不能データ用バッファ（ＵＮＣＢＵＦ）２７、及びシンドロームバッファ（Ｓｙｎｄ_ＢＵＦ）２８などを備える。メモリコントローラ４は、ＳｏＣで構成しても良い。
【００２２】
ホストインターフェース回路１０は、ホストバス１８を介してホスト装置１に接続される。ホストインターフェース回路１０は、所定のプロトコルに従って、ホスト装置１との間でインターフェース処理を行う。また、ホストインターフェース回路１０は、ホスト装置１との間で、命令、アドレス、及びデータの送受信を行う。ホストインターフェース回路１０は、例えばＳＡＴＡ（Serial Advanced Technology Attachment）、ＳＡＳ（Serial Attached SCSI）、ＰＣＩｅ（Peripheral Component Interconnect Express）ＴＭ及びＮＶＭｅ（Non-Volatile Memory Express）ＴＭに準拠したインターフェース処理を行う。
【００２３】
プロセッサ１１は、例えばＣＰＵ（central processing unit)で構成される。プロセッサ１１は、メモリコントローラ４全体の動作を制御する。例えば、プロセッサ１１は、ホスト装置１から書き込み命令を受けた場合に、それに応答して、ＮＡＮＤインターフェース仕様に基づく書き込み命令をＮＡＮＤ型フラッシュメモリ３に発行する。読み出し及び消去の場合も同様である。また、プロセッサ１１は、ウェアレベリング、ガベージコレクションなど、ＮＡＮＤ型フラッシュメモリ３を管理するための様々な処理を実行する。
【００２４】
ＳＲＡＭ１２は、揮発性メモリの一種である。ＳＲＡＭ１２は、プロセッサ１１の作業領域として使用される。ＳＲＡＭ１２は、ＮＡＮＤ型フラッシュメモリ３からロードされたファームウェアなどを格納する。
【００２５】
ＤＲＡＭ１３は、揮発性メモリの一種である。ＤＲＡＭ１３は、ＮＡＮＤ型フラッシュメモリ３からロードされたテーブルや、動作中にメモリコントローラ４が作成したテーブルなどを格納する。ＤＲＡＭ１３は、ＤＲＡＭインターフェースを介して、メモリコントローラ４の外に設けられても良い。
【００２６】
データバッファ（ＤＢＵＦ）１４は、ＮＡＮＤ型フラッシュメモリ３に書き込むべきデータを一時的に保持するためのライトバッファとして用いられる。ＤＢＵＦ１４は、ＮＡＮＤ型フラッシュメモリ３から読み出されたデータを一時的に保持するためのリードバッファとしても用いられる。ＤＢＵＦ１４は、例えばＳＲＡＭで構成される。ＤＲＡＭ１３は必須の要件ではなく、十分な記憶容量を持つＤＢＵＦ１４がその役割を担っても良い。
【００２７】
ＤＭＡＣ１５は、データ転送を専用に行う回路である。ＤＭＡＣ１５は、プロセッサ１１に代わって、データ転送の制御を実行する。ＤＭＡＣ１５は、ハードウェアを用いて直接データ転送を行うため、高速かつ大容量のデータ転送が可能である。また、プロセッサ１１の負荷を軽減できるため、システム全体の性能を向上させることができる。ＤＭＡＣ１５は、必須の要件ではなく、ＤＭＡＣ１５が担うデータ転送をプロセッサ１１が担っても良い。
【００２８】
ＮＡＮＤインターフェース回路１６は、ＮＡＮＤバス１９を介してＮＡＮＤ型フラッシュメモリ３に接続される。ＮＡＮＤインターフェース回路１６は、所定のプロトコルに従って、ＮＡＮＤ型フラッシュメモリ３との間でインターフェース処理を行う。ＮＡＮＤインターフェース回路１６は、ＮＡＮＤ型フラッシュメモリ３との間で命令、アドレス、及びデータの送受信を行う。
【００２９】
Ｃ１モジュール２０は、Ｃ１符号（例えばＬＤＰＣ符号）を用いて、誤り訂正を行う。Ｃ１モジュール２０は、Ｃ１エンコーダ２１、Ｃ１デコーダ２２、及びＣＲＣ（cyclic redundancy check）回路２３を備える。Ｃ１エンコーダ２１は、書き込み動作時、例えばホスト装置１から送られるデータ（ユーザデータと呼ぶ）を用いて、Ｃ１誤り訂正符号語を生成する。Ｃ１デコーダ２２は、読み出し動作時、誤り訂正アルゴリズムを用いて、ユーザデータの誤りを訂正する。Ｃ１モジュール２０の詳細については後述する。
【００３０】
ＣＲＣ回路２３は、書き込み動作時、ユーザデータを用いて、誤り検出符号語（例えばＣＲＣパリティ）を生成する。また、ＣＲＣ回路２３は、読み出し動作時、誤り検出アルゴリズムを用いて、ユーザデータの誤りを検出する。ＣＲＣ回路２３は、Ｃ１モジュール２０とは別に配置しても良い。
【００３１】
Ｃ２モジュール２４は、Ｃ２符号（例えばＲＳ符号）を用いて、誤り訂正を行う。Ｃ２モジュール２４は、Ｃ２エンコーダ２５、及びＣ２デコーダ２６を備える。Ｃ２エンコーダ２５は、書き込み動作時、ユーザデータを用いて、Ｃ２誤り訂正符号語を生成する。Ｃ２デコーダ２６は、読み出し動作時、誤り訂正アルゴリズムを用いて、ユーザデータの誤りを訂正する。
【００３２】
Ｃ２モジュール２４はさらに、Ｃ１デコーダ３７、及びＣＲＣ回路３８を備える。Ｃ１デコーダ３７、及びＣＲＣ回路３８は、後述する反復訂正用のモジュールである。Ｃ１デコーダ３７は、誤り訂正アルゴリズムを用いて、ユーザデータの誤りを訂正する。ＣＲＣ回路３８は、誤り検出アルゴリズムを用いて、ユーザデータの誤りを検出する。Ｃ２モジュール２４の詳細については後述する。
【００３３】
訂正不能データ用バッファ（ＵＮＣＢＵＦ）２７、及びシンドロームバッファ（Ｓｙｎｄ_ＢＵＦ）２８は、Ｃ２モジュール２４に接続される。ＵＮＣＢＵＦ２７、及びＳｙｎｄ_ＢＵＦ２８は、例えばＳＲＡＭで構成される。ＵＮＣＢＵＦ２７、及びＳｙｎｄ_ＢＵＦ２８は、データを一時的に格納する。ＵＮＣＢＵＦ２７、及びＳｙｎｄ_ＢＵＦ２８の詳細については後述する。
【００３４】
バス１７は、メモリコントローラ４内の複数のモジュールを相互に接続する。バス１７は、データバス、アドレスバス、及び制御バスを含む。
【００３５】
［１−３］  データ構造
［１−３−１］  ＲＳフレームのデータ構造
次に、データ構造について説明する。まず、ＲＳ符号（Ｃ２符号）の符号パラメータの一例について説明する。図４は、本実施形態に係るＲＳ符号のデータ構造を説明する図である。
【００３６】
以下で例示するＲＳ符号は、有限体ＧＦ（２）の８次の拡大体であるＧＦ（２８）上のＲＳ符号である。以下で例示するＲＳ符号は、符号パラメータとして符号長ｎ＝２５５シンボル、情報長ｋ＝２５３シンボル、設計距離（最小距離）ｄ＝３を有するものとする。以下で例示するＲＳ符号においては、１シンボルは、８ビット（１バイト）である。最小距離ｄ＝３である場合、パリティ長ｍ＝２シンボルである。
【００３７】
ＲＳ符号は、情報部とＲＳパリティ部からなる。情報部にはユーザデータが含まれる。情報部は２５３シンボルのデータｄ２５４〜ｄ２からなり、ＲＳパリティ部は２シンボルのデータｐ１、ｐ０からなる。データｐ１、ｐ０の各々は、データｄ２５４〜ｄ２に基づいて生成されたパリティである。データｄ２５４〜ｄ２、ｐ１及びｐ０の各々は、１シンボルの大きさを有する。本実施形態のＲＳ符号では、1シンボルは1バイトであるので、データｄ２５４〜ｄ２、ｐ１及びｐ０の各々は、１バイトの大きさを有する。２５３シンボルの情報部と、２シンボルのＲＳパリティ部との合計２５５シンボルが、ＲＳフレームを構成する。ＲＳパリティ部はＣ２パリティ部と称される場合もある。ＲＳフレームはＣ２フレームと称される場合もある。
【００３８】
次に、図５を参照して、本実施形態に係るＲＳ符号の符号化及び復号化を説明する。
【００３９】
符号化時、２５３バイトのユーザデータは、Ｃ２モジュール２４により符号化され、２バイトのＲＳパリティ部が生成される。
【００４０】
復号化時、ユーザデータ及びＲＳパリティ部の組は、Ｃ２モジュール２４により復号化され、２バイトのＣ２シンドロームが生成される。Ｃ２シンドロームはＲＳシンドロームと称される場合もある。
【００４１】
続いて、Ｃ２モジュール２４により、Ｃ２シンドロームを用いて、ユーザデータ及びＲＳパリティ部の誤り訂正が行われる。ＲＳ符号の誤り訂正には、通常訂正（ＲＳ通常訂正、又は、Ｃ２通常訂正と称される場合もある）、及び消失訂正（ＲＳ消失訂正、又は、Ｃ２消失訂正と称される場合もある）が含まれる。通常訂正、及び消失訂正の詳細については後述する。
【００４２】
通常訂正で訂正できるシンボル数は、設計距離ｄを用いて“ｉｎｔ（（ｄ−１）／２）”で算出され、ｄ＝３の場合は１である。すなわち通常訂正では、１シンボルを訂正できる。ここで“ｉｎｔ（（ｄ−１）／２）”は、“（ｄ−１）／２”を超えない最大の整数を意味する。消失訂正で訂正できるシンボル数は、“ｄ−１”で算出され、ｄ＝３の場合は２である。すなわち消失訂正では、２シンボルを訂正できる。通常訂正の場合も、消失訂正の場合も、訂正可能なシンボル数以内であれば、１シンボル中で何ビット誤っていても訂正対象のシンボルの誤りを訂正可能である。
【００４３】
通常訂正では、１バイトの誤り位置情報、及び１バイトの誤り量情報を含む誤り情報（error info）が生成される。消失訂正では、１バイトの第１誤り量情報（誤り量１）、及び１バイトの第２誤り量情報（誤り量２）を含む誤り情報が生成される。誤り情報を用いて、Ｃ２モジュール２４により誤り訂正が行われる。
【００４４】
次に、２次元に配列されたユーザデータとそれに対するＲＳフレームの関係について説明する。図６Ａは、本実施形態に係る２次元に配列されたＲＳフレーム及び符号化を説明する図である。図６Ｂは、本実施形態に係る２次元に配列されたＲＳフレーム及び復号化を説明する図である。
【００４５】
図６Ａは、２次元に配列されたユーザデータＵＤのデータ構造の一例を示す。ユーザデータＵＤは、例えば、１行が４Ｋ＋α（＝４＊１０２４＋α）バイトのデータを２５３行有する。αは、ホスト装置１からメモリシステム２に格納することを指示されたユーザデータに付け加える管理情報部分である。以下、ユーザデータＵＤのうちの１行の部分はユーザデータ行と称する場合がある。２５３行のユーザデータ行の組は、積符号情報部と称する場合がある。積符号情報部のサイズは、例えば１ＭＢである。
【００４６】
積符号情報部は、Ｃ２モジュール２４により、列単位で符号化される。積符号情報部における「列」は、１バイト（＝１シンボル）の幅を指す。符号化の結果、各列において２バイトからなるＲＳパリティ部が生成される。各列でのＲＳパリティ部の生成の結果、２５３行目及び２５４行目に合計２行分のＲＳパリティ部の組が付加される。このようにして付加された２行分のＲＳパリティ部の組を、ＲＳパリティ集合又はＣ２パリティ集合と称する場合がある。列方向に並ぶ、ユーザデータの部分(２５３バイト)とこれに対応するＲＳパリティ部(２バイト)からなるデータ列（図６Ａの破線で示した１つの四角）が、図４のＲＳフレーム（２５５バイト）に対応する。積符号情報部及びＲＳパリティ集合は、ＮＡＮＤ型フラッシュメモリ３に格納される。
【００４７】
図６Ｂに示すように、ＮＡＮＤ型フラッシュメモリ３から読み出された積符号情報部及びＲＳパリティ集合は、誤りを含んでいることがある。復号時、Ｃ２モジュール２４により、列単位の復号化が積符号情報部の各列に対して行われ、各列において２バイトのＲＳシンドロームが生成される。各列でのＲＳシンドローム生成の結果、２行分のＲＳシンドロームの組が生成される。このように生成された２行分のＲＳシンドロームの組を、ＲＳシンドローム集合又はＣ２シンドローム集合と称する場合がある。
【００４８】
続いて、Ｃ２モジュール２４により、ＲＳシンドロームを用いて列ごとに誤り訂正が行われる。すなわち、Ｃ２モジュール２４は、列ごとに、当該列に対応するＲＳシンドロームを用いて、当該列中のユーザデータ及びＲＳパリティ部の誤りを訂正する。この訂正が通常訂正の場合、各列の誤り位置情報、及び各列の誤り量情報を含む誤り情報が生成される。一方、この訂正が消失訂正の場合、各列の第１誤り量情報（誤り量情報１）、及び各列の第２誤り量情報（誤り量情報２）を含む誤り情報が生成される。誤り情報を用いて、Ｃ２モジュール２４により誤り訂正が行われる。
【００４９】
［１−３−２］  ＬＤＰＣフレームのデータ構造
次に、ＬＤＰＣフレームのデータ構造について説明する。図７は、本実施形態に係るＬＤＰＣフレーム及び符号化を説明する図である。図７の実線の矢印は、符号化処理の方向を表している。
【００５０】
ＲＳ符号化は、図６Ａと同じである。続いて、ユーザデータＵＤ（すなわち積符号情報部）及びＲＳパリティ集合の各行に対して、Ｃ１モジュール２０に含まれるＣＲＣ回路２３により、ＣＲＣパリティが生成される。ＣＲＣパリティは、ＣＲＣ（cyclic redundancy check）方式を用いた誤り検出符号の符号語のパリティ部分である。このようにして生成された２５５個のＣＲＣパリティの組をＣＲＣパリティ集合と称する場合がある。
【００５１】
積符号情報部、ＲＳパリティ集合、及びＣＲＣパリティ集合を含むデータ構造の各行は、Ｃ１モジュール２０により符号化され、ＬＤＰＣパリティ部（Ｃ１パリティ部と称される場合もある）が生成される。すなわち、積符号情報部に含まれるユーザデータ行の各行及び対応するＣＲＣパリティの各組に対してＬＤＰＣパリティ部が生成される。また、積符号情報部に含まれるＲＳパリティ集合の各行及び対応するＣＲＣパリティの各組に対してＬＤＰＣパリティ部が生成される。このようにして生成された２５５個のＬＤＰＣパリティ部の組をＬＤＰＣパリティ集合又はＣ１パリティ集合と称する場合がある。１行分の積符号情報部又はＲＳパリティ集合、対応するＣＲＣパリティ、及び対応するＬＤＰＣパリティ部は、ＬＤＰＣフレームを構成する。ＬＤＰＣフレームはＣ１フレームと称される場合もある。積符号情報部、ＲＳパリティ集合、ＣＲＣパリティ集合、及びＬＤＰＣパリティ集合からなるデータ構造、すなわち２５５行分のＬＤＰＣフレームは、Ｃ１×Ｃ２フレームと称される場合もある。Ｃ１×Ｃ２フレームは、ＮＡＮＤ型フラッシュメモリ３に格納される。
【００５２】
図８は、本実施形態に係るＬＤＰＣフレーム及び復号化を説明する図である。Ｃ１×Ｃ２フレームは、ＮＡＮＤ型フラッシュメモリ３から読み出される。
【００５３】
各ＬＤＰＣフレームは、Ｃ１モジュール２０により復号化され、誤り訂正が行われる。誤り訂正がされた積符号情報部に含まれるユーザデータ行の各行、及びＲＳパリティ集合の各行に対しては、対応するＣＲＣパリティを用いて、ＣＲＣ回路２３により誤り検出（ＣＲＣ検証とも呼ぶ）が行われる。ＣＲＣ検証がなされたユーザデータ行及びＲＳパリティ集合の各列（ＲＳフレーム）は、Ｃ２モジュール２４により復号化され、誤り訂正が行われる。
【００５４】
図９は、本実施形態に係るＬＤＰＣパリティ部を用いた誤り訂正処理（ＬＤＰＣ訂正又はＣ１訂正と称される場合もある）、及びＲＳパリティ部を用いた誤り訂正処理（ＲＳ訂正又はＣ２訂正と称される場合もある）の単位を説明する図である。ＬＤＰＣ訂正は、データ構造の各行に対して行われ、さらに、ビット単位で誤り訂正が行われる。ＲＳ訂正は、データ構造の各列に対して行われ、さらに、バイト単位で誤り訂正が行われる。
【００５５】
図１０は、本実施形態に係る積符号を用いた誤り訂正の一例を説明する図である。図１０（ａ）は、ＮＡＮＤ型フラッシュメモリ３から読み出されたデータ構造を示している。図１０（ａ）の“×”は１バイトからなるＲＳシンボルのうちの誤りのあるＲＳシンボルを示している。誤りのあるＲＳシンボルには１ビット〜８ビットの誤りが含まれている。ここでは、ＲＳ訂正の単位となるシンボルをＲＳシンボルと称している。ＲＳシンボルはＣ２シンボルと称される場合もある。
【００５６】
図１０（ｂ）は、ＬＤＰＣ訂正によって誤り訂正が行われたデータ構造を示している。ある行に含まれる誤りビット数が少ない場合は、ＬＤＰＣ訂正により訂正可能である。ここでは説明の簡略化のため、ＬＤＰＣ訂正の誤り訂正能力が１つのＬＤＰＣフレーム当たり１６ビットまでであるとする。すなわち、“×”が２個以下であるＬＤＰＣフレームはＬＤＰＣ訂正により訂正可能であり、“×”が３個以上であるＬＤＰＣフレームはＬＤＰＣ訂正により訂正不能であるとする。なお、ＬＤＰＣパリティ部にのみ誤りが残ってしまう場合もある。しかし、ＬＤＰＣ訂正ではユーザデータ及びＲＳパリティ部が正しく誤り訂正できていれば良いので、ＬＤＰＣパリティ部にのみ残っている誤りは無視して構わない。よって、ＬＤＰＣパリティ部にのみ誤りが残っている行は、ＬＤＰＣ訂正によって誤り訂正が正常に行われたものとして扱われる。
【００５７】
図１０（ｃ）は、ＲＳ訂正を示している。ＲＳ訂正は、データ構造の列方向に行われる。ＬＤＰＣ訂正後は列方向で見ると、誤りが少なくっている。よって、訂正能力が低いＲＳ訂正でも誤り訂正が可能な場合がある。
【００５８】
［１−４］  ＲＳ訂正の訂正能力
次に、ＲＳ訂正の訂正能力について説明する。前述したように、ＲＳ訂正には、通常訂正と消失訂正とが含まれる。
【００５９】
図１１は、本実施形態に係るＲＳ通常訂正を説明する図である。図１１には、ＲＳフレームが示されている。本実施形態のＲＳ通常訂正は、１シンボルのみ訂正可能である。ＲＳ通常訂正では、誤り位置を指定する必要はない。図５に示したように、ＲＳ通常訂正で生成される誤り情報は、それぞれ１バイトの誤り位置情報及び誤り量情報を含む。誤り量情報は、１シンボルのデータを訂正するための誤りパターンの情報を含む。
【００６０】
図１２は、本実施形態に係るＲＳ消失訂正を説明する図である。本実施形態のＲＳ消失訂正は、最大２シンボルまで訂正可能である。ただし、ＲＳ消失訂正では、誤り位置を指定する必要がある。図５に示したように、ＲＳ消失訂正で生成される誤り情報は、２バイトの誤り量情報を含む。すなわち、誤り情報には、誤り位置情報が含まれない。このように、ＲＳ消失訂正は、誤り位置を指定することで、最大２シンボルまで訂正可能である。
【００６１】
図１３は、本実施形態に係るＲＳ消失訂正の応用を説明する図である。誤りが１シンボル以下（図１３の例ではシンボル番号２のシンボル）で誤り位置が分かっている場合にも、消失訂正を適用しても良い。すなわち、任意の誤りのないシンボル（図１３の例ではシンボル番号２５３のシンボル）を誤りシンボルとして扱い、合計で２シンボルが誤っていると見なした上で、当該２シンボルに対して消失訂正を適用しても良い。
【００６２】
ＣＲＣ検証とＲＳ訂正とを連携させ、ＣＲＣ検証により検出された誤り情報を、ＲＳ訂正で利用しても良い。すなわち、ＣＲＣ検証により検出された誤りを、誤り位置が分かっている誤りとして、ＲＳ消失訂正の対象とする。また、ＲＳ通常訂正時、ＣＲＣ検証により誤りがないとされたデータは、ＲＳ通常訂正の対象外にする。
【００６３】
［１−５］  符号化のデータフロー
次に、符号化のデータフローについて説明する。図１４は、本実施形態に係るメモリコントローラ４の符号化動作を説明するフローチャートである。図１５は、本実施形態に係る符号化のデータフローを説明する図である。
【００６４】
図１５は、符号化のデータフローに関係する回路を主に示している。ホスト装置１は、ホストインターフェース回路１０（図示せず）及びバス１７Ａを介して、データバッファ（ＤＢＵＦ）１４に接続される。ＤＢＵＦ１４は、バス１７Ｂを介して、Ｃ１モジュール２０に接続される。Ｃ１モジュール２０は、例えば、バス１７Ｂに接続されたバスインターフェース回路（Ｂｕｓ  Ｉ／Ｆ）２０Ａを備える。Ｃ２モジュール２４は、バス１７Ｂ、１７Ｃを介して、ＤＢＵＦ１４及びＣ１モジュール２０に接続される。Ｃ２モジュール２４は、Ｃ２パリティ集合を一時的に格納するパリティバッファ６３を備える。パリティバッファ６３は、例えばＳＲＡＭで構成される。
【００６５】
ホスト装置１は、ユーザデータＵＤ０〜ＵＤｎを格納している。ｎは例えば２５２である。ユーザデータＵＤ０〜ＵＤｎのそれぞれは、例えば図６Ａを参照して説明したように、４Ｋ＋αバイトの大きさを有する。プロセッサ１１は、例えば、書き込み命令及びアドレスと共に、ユーザデータＵＤ０〜ＵＤｎをホスト装置１から受信する。プロセッサ１１は、ホスト装置１から受信したデータユーザデータＵＤ０〜ＵＤｎを、バス１７Ａを介してＤＢＵＦ１４に転送する（ステップＳ１００）。
【００６６】
プロセッサ１１は、ＤＢＵＦ１４に格納されたユーザデータＵＤ０〜ＵＤｎを、バス１７Ｂを介してＣ１モジュール２０に転送する（ステップＳ１０１）。Ｃ２モジュール２４は、バス１７Ｂを転送されるユーザデータＵＤ０〜ＵＤｎをスヌープする（ステップＳ１０２）。すなわち、Ｃ２モジュール２４は、バス１７Ｂを介して、ユーザデータＵＤ０〜ＵＤｎを受け取ることが可能である。
【００６７】
Ｃ２モジュール２４は、スヌープされたユーザデータＵＤ０〜ＵＤｎから、Ｃ２パリティ集合を生成する（ステップＳ１０３）。Ｃ２モジュール２４は、Ｃ２パリティ集合を、パリティバッファ６３に一時的に格納する。
【００６８】
Ｃ１モジュール２０に含まれるＣＲＣ回路２３は、ユーザデータＵＤｍ（ｍは、０〜ｎのいずれかの整数）に対して、ＣＲＣパリティを生成する。Ｃ１モジュール２０に含まれるＣ１エンコーダ２１は、ユーザデータＵＤｍとこれに対応するＣＲＣパリティに対して、Ｃ１パリティ部を生成する（ステップＳ１０４）。プロセッサ１１は、ユーザデータＵＤｍ、対応するＣＲＣパリティ、対応するＣ１パリティ部からなるＣ１フレームをＮＡＮＤ型フラッシュメモリ３に書き込む。
【００６９】
Ｃ２モジュール２４によりＣ２パリティ集合が完成した後、プロセッサ１１は、パリティバッファ６３に格納されたＣ２パリティ集合を、バス１７Ｂ、１７Ｃを介してＤＢＵＦ１４に転送する（ステップＳ１０５）。プロセッサ１１は、ＤＢＵＦ１４に格納されたＣ２パリティ集合を、バス１７Ｂを介してＣ１モジュール２０に転送する（ステップＳ１０６）。
【００７０】
Ｃ１モジュール２０に含まれるＣＲＣ回路２３は、Ｃ２パリティ集合の各行に対してＣＲＣパリティを生成する。Ｃ１モジュール２０に含まれるＣ１エンコーダ２１は、Ｃ２パリティ集合の各行及び対応するＣＲＣパリティに対して、Ｃ１パリティ部を生成する（ステップＳ１０７）。プロセッサ１１は、Ｃ２パリティ集合の各行を含んだ各Ｃ１フレームをＮＡＮＤ型フラッシュメモリ３に書き込む。この時点で、ＮＡＮＤ型フラッシュメモリ３は、Ｃ１×Ｃ２フレームを格納している。
【００７１】
［１−６］  ＬＤＰＣ訂正及びＲＳ訂正の概要
次に、ＬＤＰＣ訂正及びＲＳ訂正の概要について説明する。
【００７２】
（第１例）
図１６Ａ〜図１６Ｃは、本実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の一例（第１例）を説明する図である。第１例は、誤りが比較的少ない例を示している。
【００７３】
図１６Ａ（ａ）は、ＮＡＮＤ型フラッシュメモリ３に格納されたデータのイメージである。図１６Ａ（ａ）のデータ構造が読み出し対象である。メモリコントローラ４は、例えばホスト装置１から読み出し命令を受信すると、ＮＡＮＤ型フラッシュメモリ３からデータを読み出す。図１６Ａ（ａ）の１つの四角は１つのＬＤＰＣフレームを表している。図１６Ａ（ａ）に示すデータ構造の１行は、１６個のＬＤＰＣフレームからなる。このデータ構造を列方向に１バイトずつ区切ったものは、２５５バイト（２５５シンボル）よりなるＲＳフレームである。列方向に並ぶ２５５個のＬＤＰＣフレームは、Ｃ１×Ｃ２フレームを構成する。各ＬＤＰＣフレームに記載された番号（例えば“１−０”）のうち、前の番号（例えば“１−０”の“１”）がＲＳフレームのシンボル番号（ＲＳシンボル番号とも称する）、後ろの番号（例えば“１−０”の“０”）が１６個のＬＤＰＣフレームを区別するＬＤＰＣフレーム番号である。図中に示した“×”は、図１０（ａ）と同様に、誤りのあるＲＳシンボルを表している。
【００７４】
メモリコントローラ４は、ＮＡＮＤ型フラッシュメモリ３から、ＬＤＰＣフレーム単位でデータを読み出す（図中に“ＮＡＮＤ  Ｒｄ”と表記）。Ｃ１モジュール２０は、各ＬＤＰＣフレームに対してＬＤＰＣ訂正を行う。メモリコントローラ４は、データ構造の行方向に沿って、複数のＬＤＰＣフレームを順に読み出す。
【００７５】
図１６Ａ（ｂ）に示すように、Ｃ１モジュール２０は、より具体的にはＣＲＣ回路２３は、ＬＤＰＣフレームに対してＣＲＣ検証を行う。ＣＲＣ回路２３によるＣＲＣ検証の結果、誤りが検出されなかった場合、プロセッサ１１は、当該ＬＤＰＣフレームをＤＢＵＦ１４に転送する。図１６Ａ（ｂ）では、ＬＤＰＣフレーム“０−０”〜“０−１５”、“１−０”において誤りが検出されていない（図中に“ＣＲＣ  ＯＫ”と表記）。“ＣＲＣ  ＯＫ”となったＬＤＰＣフレームに含まれるＲＳシンボルは、ＲＳ訂正が不要である。
【００７６】
メモリコントローラ４は、ＮＡＮＤ型フラッシュメモリ３から、データの読み出しを継続する。図１６Ｂ（ｃ）に示すように、ＣＲＣ回路２３によるＣＲＣ検証の結果、誤りが検出された場合（図中に“ＣＲＣ  ＮＧ”と表記）、プロセッサ１１は、ＤＢＵＦ１４へのＬＤＰＣフレームの転送を一旦中止する。図１６Ｂ（ｃ）の例では、ＬＤＰＣフレーム“１−１”が“ＣＲＣ  ＮＧ”である。メモリコントローラ４は、誤りが検出されたＬＤＰＣフレームに含まれるＲＳシンボルをＲＳ訂正するため、ＬＤＰＣフレーム番号１のＬＤＰＣフレーム群（すなわち、ＬＤＰＣフレーム“０−１”〜“２５４−１”）をＮＡＮＤ型フラッシュメモリ３から読み出す。
【００７７】
図１６Ｂ（ｄ）に示すように、Ｃ１モジュール２０は、ＬＤＰＣフレーム番号１のＬＤＰＣフレーム群のそれぞれのＬＤＰＣフレームに対して、順にＬＤＰＣ訂正及びＣＲＣ検証を行う。このＣＲＣ検証の結果、“ＣＲＣ  ＯＫ”となったＬＤＰＣフレームと、“ＣＲＣ  ＮＧ”となったＬＤＰＣフレームとに区別される。“ＣＲＣ  ＯＫ”となったＬＤＰＣフレームについては、それを構成している全てのＲＳシンボルは誤っていないことが保障される。一方、“ＣＲＣ  ＮＧ”となったＬＤＰＣフレームについては、それに含まれるＲＳシンボルのいくつかは誤っている。図１６Ｂ（ｄ）の例では、ＬＤＰＣフレーム“１−１”、“２５４−１”が“ＣＲＣ  ＮＧ”である。Ｃ１モジュール２０は、ＬＤＰＣ訂正及びＣＲＣ検証がなされたＬＤＰＣフレームをＣ２モジュール２４及びＤＢＵＦ１４に転送する。
【００７８】
図１６Ｃ（ｅ）に示すように、Ｃ２モジュール２４は、“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレーム数が２以下である場合、当該ＬＤＰＣフレームを構成している全てのＲＳシンボルが誤っているとみなす。すなわち、Ｃ２モジュール２４は、当該ＲＳシンボルを消失とみなして、消失訂正により誤り訂正を行う。誤りを含むＬＤＰＣフレームは、ＣＲＣ検証により特定できている。ＲＳ訂正では、誤り位置（誤りシンボル）が分かっている場合、消失訂正によって２シンボルの誤りまで訂正可能である。また、誤りが１シンボルである場合、Ｃ２モジュール２４は消失訂正の応用を行うことができる。従って、“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレーム数が１又は２であればＲＳ訂正によって誤り訂正が可能である。
【００７９】
図１６Ｃ（ｆ）に示すように、消失扱いされたＲＳシンボルで構成される２個のＬＤＰＣフレーム（ＬＤＰＣフレーム“１−１”、“２５４−１”）の誤りが、ＲＳ訂正によって全て訂正される。これにより、訂正処理が完了する。
【００８０】
Ｃ２モジュール２４は、訂正処理完了フラグを発行してプロセッサ１１に送信する。図１６Ｃ（ｇ）に示すように、プロセッサ１１は、訂正されたＬＤＰＣフレーム“１−１”及び“２５４−１”をＤＢＵＦ１４に転送する。
【００８１】
（第２例）
図１７Ａ〜図１７Ｄは、本実施形態に係るＬＤＰＣ訂正及びＲＳ訂正による誤り訂正の他の一例（第２例）を説明する図である。第２例は、誤りが比較的多い例を示している。
【００８２】
図１７Ａ（ａ）は、ＮＡＮＤ型フラッシュメモリ３に格納されたデータのイメージである。メモリコントローラ４は、例えばホスト装置１から読み出し命令を受信すると、ＮＡＮＤ型フラッシュメモリ３からデータを読み出す。メモリコントローラ４は、ＮＡＮＤ型フラッシュメモリ３から、ＬＤＰＣフレーム単位でデータを読み出す。
【００８３】
図１７Ａ（ｂ）に示すように、Ｃ１モジュール２０は、各ＬＤＰＣフレームに対してＬＤＰＣ訂正を行う。ＣＲＣ回路２３は、ＬＤＰＣフレームに対してＣＲＣ検証を行う。ＣＲＣ回路２３によるＣＲＣ検証の結果、誤りが検出された場合、プロセッサ１１は、ＤＢＵＦ１４へのＬＤＰＣフレームの転送を一旦中止する。図１７Ａ（ｂ）の例では、ＬＤＰＣフレーム“０−１”が“ＣＲＣ  ＮＧ”である。メモリコントローラ４は、誤りが検出されたＬＤＰＣフレームに含まれるＲＳシンボルをＲＳ訂正するため、ＬＤＰＣフレーム番号１のＬＤＰＣフレーム群（すなわち、ＬＤＰＣフレーム“０−１”〜“２５４−１”）をＮＡＮＤ型フラッシュメモリ３から読み出す。
【００８４】
図１７Ｂ（ｃ）に示すように、Ｃ１モジュール２０は、ＬＤＰＣフレーム番号１のＬＤＰＣフレーム群のそれぞれのＬＤＰＣフレームに対して、順にＬＤＰＣ訂正及びＣＲＣ検証を行う。このＣＲＣ検証の結果、“ＣＲＣ  ＮＧ”となったＬＤＰＣフレームが特定される。図１７Ｂ（ｃ）の例では、ＬＤＰＣフレーム“０−１”、“１−１”、“２５３−１”、“２５４−１”が“ＣＲＣ  ＮＧ”である。Ｃ１モジュール２０は、ＬＤＰＣ訂正及びＣＲＣ検証がなされたＬＤＰＣフレームを、Ｃ２モジュール２４及びＤＢＵＦ１４に転送する。
【００８５】
図１７Ｂ（ｄ）に示すように、Ｃ２モジュール２４は、“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレーム数が３以上なので消失訂正は使えない。しかし“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレームであっても、その全てのビットが誤っているわけではない。“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレームであっても、１バイトごとに区切って列方向にみれば（すなわちＲＳフレーム単位でみれば）、全てのシンボルに誤りが含まれない場合、１シンボルだけ誤っている場合、及び２シンボル以上誤っている場合がある。これらのうち、１シンボルだけ誤っている場合は通常訂正により訂正が可能である。
【００８６】
“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレーム数が３以上の場合には、Ｃ２モジュール２４は、まず通常訂正を適用して誤り訂正処理を行う。この際、２シンボル以上誤っているＲＳフレームについては、その誤りシンボル数が通常訂正の訂正能力を超えるため、誤訂正が発生する可能性がある。そのような誤訂正が発生したとしても、そのあと続けてＬＤＰＣ訂正とＲＳ訂正とを反復適用することで、正しく訂正され直すことがある。そのため、そのような誤訂正はこの段階では許容する。なお、そのような誤訂正の発生及びそれが後段の訂正処理により正しく訂正され直す過程は後に例示される。
【００８７】
図１７Ｂ（ｄ）に示した縦に延びる破線は、ＲＳ訂正の処理単位、すなわちＲＳフレームを表している。Ｃ２モジュール２４は、ＲＳシンドロームを生成し、誤り位置情報及び誤り量情報を含む誤り情報（error info）を生成する。誤り訂正のための演算は、ＬＤＰＣフレーム番号１のＬＤＰＣフレーム群に含まれる全てのＲＳフレームに対して行われる。
【００８８】
図１７Ｂ（ｅ）に示すように、Ｃ２モジュール２４は、“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレームのみを順次取り出す。Ｃ２モジュール２４は、当該ＬＤＰＣフレームに含まれる各ＲＳシンボルを、各ＲＳフレームに対する誤り情報を用いて順次訂正していく。取り出されるＬＤＰＣフレームの順序は、例えば、ＲＳシンボル番号の昇順である。具体的には、最小のＲＳシンボル番号を持つＬＤＰＣフレーム“０−１”に含まれるＲＳシンボルに対する誤り訂正が、ＲＳフレームごとのＲＳ訂正により試みられる。次に、同様に、ＬＤＰＣフレーム“１−１”について、ＲＳフレームごとのＲＳ訂正が行われる。同様の訂正処理が“ＣＲＣ  ＮＧ”と判定された全てのＬＤＰＣフレームに対して順に行われる。各ＲＳフレームに対して算出された誤り位置情報が、訂正処理の対象となるＬＤＰＣフレームが持つＲＳシンボル番号に一致するときに限り、このＲＳ訂正は行われる。
【００８９】
図１７Ｂ（ｄ）及び（ｅ）は、ＬＤＰＣフレーム“０−１”に対して上記の順次訂正する処理が適用されている場合の例を示している。図１７Ｂ（ｄ）の「ｂ」、及び「ｈ」で示したＲＳフレームには誤りが１シンボル（ＲＳシンボル番号０のＬＤＰＣフレームに含まれるシンボル）しか含まれていない。従って、通常訂正で算出された誤り位置と誤り量は正しい値を持つ。特に誤り位置については正しく“０”と算出される。そのため、ＬＤＰＣフレーム“０−１”に対する誤り訂正処理において、Ｃ２モジュール２４が「ｂ」及び「ｈ」で示したＲＳフレームを処理しているときは、ＬＤＰＣフレーム“０−１”が持つＲＳシンボル番号“０”と、算出された誤り位置が一致する。従って、各ＲＳフレームに含まれる誤り量と算出された誤り量が一致するので、その訂正処理は正しく行われる。すなわち、図１７Ｂ（ｅ）の「ｂ’」及び「ｈ’」のように誤りを正しく訂正できる。
【００９０】
図１７Ｂ（ｄ）の「ａ」で示したＲＳフレームにはＲＳ通常訂正の訂正能力を超える２シンボルの誤りシンボル（ＲＳシンボル番号１、２５４のＬＤＰＣフレームに含まれるシンボル）が含まれるので、ＲＳ通常訂正で算出された誤り位置は正しくない。しかし、例えばＣ２モジュール２４がＬＤＰＣフレーム“０−１”を処理しているとき、算出された誤り位置が当該ＬＤＰＣフレームのＲＳシンボル番号“０”に等しくなければ訂正処理は行われない。図１７Ｂ（ｄ）は、算出された誤り位置が当該ＬＤＰＣフレームのＲＳシンボル番号“０”に等しくなかった場合を例示する。この時、図１７Ｂ（ｅ）の「ａ’」のＲＳフレームに示したように訂正処理は行われず、誤訂正は発生しない。
【００９１】
一方、図１７Ｂ（ｄ）の「ｆ」で示したＲＳフレームにもＲＳ通常訂正の訂正能力を超える２シンボルの誤りシンボル（ＲＳシンボル番号１、２５４のＬＤＰＣフレームに含まれるシンボル）が含まれるので、ＲＳ通常訂正で算出された誤り位置は正しくない。例えばＣ２モジュール２４がＬＤＰＣフレーム“０−１”処理しているとき、算出された誤り位置が当該ＬＤＰＣフレームのＲＳシンボル番号“０”にたまたま一致してしまった場合、図１７Ｂ（ｅ）の「ｆ’」のＲＳフレームに示したように誤訂正が発生してしまう。すなわち、ＬＤＰＣフレーム“０−１”に含まれる「ｆ’」のＲＳフレームに属するＲＳシンボルに誤訂正が発生している。この際、誤訂正で発生する誤りビット数は１ビット〜８ビット、すなわち１ＲＳシンボル以下である。
【００９２】
次に、図１７Ｃ（ｆ）に示すように、Ｃ２モジュール２４に含まれるＣ１デコーダ３７は、ＬＤＰＣフレーム“０−１”に対して誤り訂正を行う。この際、図１７Ｂ（ｅ）の「ｆ’」のＲＳフレームで誤訂正が発生して誤りが増えたものの、図１７Ｂ（ｅ）の「ｂ’」及び「ｈ’」のＲＳフレームでは、誤りはなくなっている。「ｆ’」のＲＳフレームで誤訂正により発生した誤りビット数が「ｂ’」及び「ｈ’」のＲＳフレームで訂正された誤りビット数より少なければ、ＬＤＰＣフレーム“０−１”全体としては誤りビット数が減っている。従って、ＬＤＰＣフレーム“０−１”はＬＤＰＣ訂正で訂正可能になっている可能性がある。図１７Ｃ（ｆ）はＬＤＰＣフレーム“０−１”がＬＤＰＣ訂正で訂正可能になった場合を例示している。Ｃ２モジュール２４に含まれるＣＲＣ回路３８は、ＬＤＰＣフレーム“０−１”に対してＣＲＣ検証を行う。これにより、ＬＤＰＣフレーム“０−１”の誤りが全て訂正されたことが検証される。その後、Ｃ２モジュール２４は、訂正後のＬＤＰＣフレーム“０−１”に含まれるＲＳシンボルを用いてＲＳシンドロームを生成しなおす。プロセッサ１１は、訂正されたＬＤＰＣフレーム“０−１”をＤＢＵＦ１４に転送する。
【００９３】
図１７Ｃ（ｇ）に示すように、Ｃ２モジュール２４は、“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレーム数がまだ３以上（ＬＤＰＣフレーム“１−１”、“２５３−１”、“２５４−１”）なので、通常訂正を行う。具体的には、図１７Ｃ（ｇ）のＬＤＰＣフレーム“１−１”がまだ“ＣＲＣ  ＮＧ”なので、Ｃ２モジュール２４は、このＬＤＰＣフレーム“１−１”に含まれる各ＲＳシンボルに対してＲＳ通常訂正を行う。この際、Ｃ２モジュール２４は、誤り情報の誤り位置がＬＤＰＣフレーム“１−１”のＲＳシンボル番号“１”に等しいＲＳシンボルに対して誤り訂正を行い、それ以外のＲＳシンボルに対して誤り訂正を行わない。ＲＳ通常訂正が行われても、ＬＤＰＣフレーム“１−１”内の誤りを持つ各ＲＳシンボルが属しているＲＳフレーム（「ａ’」、「ｄ」、「ｅ」、及び「ｆ“」）に、誤りが２シンボル以上含まれているので、ＲＳ通常訂正によって誤りは訂正されることができない。よって、ＬＤＰＣフレーム“１−１”には依然として誤りが含まれる。Ｃ２モジュール２４は、ＲＳシンドロームを生成し、誤り情報（error info）を生成する。
【００９４】
ＬＤＰＣフレーム“１−１”に含まれる各ＲＳシンボルに対するＲＳ通常訂正の実行後も“ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレーム数は、まだ３以上（ＬＤＰＣフレーム“１−１”、“２５３−１”、“２５４−１”）である。図１７Ｃ（ｈ）に示すように、Ｃ２モジュール２４は、“ＣＲＣ  ＮＧ”と判定された次のＬＤＰＣフレーム“２５３−１”に含まれる各ＲＳシンボルに対してＲＳ通常訂正を行う。この際、Ｃ２モジュールは、誤り情報の誤り位置がＬＤＰＣフレーム“２５３−１”のＲＳシンボル番号“２５３”に等しいＲＳシンボルに対して誤り訂正を行い、それ以外のＲＳシンボルに対して誤り訂正を行わない。図１７Ｃ（ｇ）の「ｃ」、「ｉ」で示したＲＳフレームは、誤りシンボルがそれぞれ１シンボルしか含まれていないため、図１７Ｃ（ｈ）の「ｃ’」、「ｉ’」で示したＲＳフレームに示すように誤りが訂正できている。
【００９５】
図１７Ｄ（ｉ）に示すように、Ｃ２モジュール２４に含まれるＣ１デコーダ３７は、ＬＤＰＣフレーム“２５３−１”に対してＬＤＰＣ訂正を行う。ＣＲＣ回路３８は、ＬＤＰＣフレーム“２５３−１”に対してＣＲＣ検証を行う。これにより、ＬＤＰＣフレーム“２５３−１”の誤りが全て訂正されたことが検証される。その後、Ｃ２モジュール２４は、訂正後のＬＤＰＣフレーム“２５３−１”に含まれるＲＳシンボルを用いてシンドロームを生成しなおす。プロセッサ１１は、訂正されたＬＤＰＣフレーム“２５３−１”をＤＢＵＦ１４に転送する。
【００９６】
図１７Ｄ（ｊ）に示すように、 “ＣＲＣ  ＮＧ”と判定されたＬＤＰＣフレーム数は２以下（ＬＤＰＣフレーム“１−１”、“２５４−１”）である。Ｃ２モジュール２４は、当該ＬＤＰＣフレームに含まれる各ＲＳシンボルを消失扱いにしてＲＳ訂正を行う。誤りを含むＬＤＰＣフレームは、ＣＲＣ検証により特定できている。ＲＳ訂正では、誤り位置が分かっている場合、消失訂正によって２シンボルの誤りまで訂正可能である。
【００９７】
図１７Ｄ（ｋ）に示すように、消失扱いされたＲＳシンボルで構成される２個のＬＤＰＣフレーム（ＬＤＰＣフレーム“１−１”、“２５４−１”）の誤りが、ＲＳ訂正によって全て訂正される。これにより、訂正処理が完了する。
【００９８】
Ｃ２モジュール２４は、訂正処理完了フラグを発行してプロセッサ１１に送信する。図１７Ｄ（ｌ）に示すように、プロセッサ１１は、訂正されたＬＤＰＣフレーム“１−１”及び“２５４−１”をＤＢＵＦ１４に転送する。
【００９９】
［１−７］  誤り訂正動作の詳細
次に、誤り訂正動作の詳細について説明する。本実施形態では、積符号を用いた誤り訂正において、反復訂正が行われる。反復訂正とは、Ｃ１訂正（ＬＤＰＣ訂正）とＣ２訂正（ＲＳ訂正）とを繰り返しながら誤り訂正を行うことをいう。
【０１００】
［１−７−１］  反復訂正用の回路構成
図１８は、本実施形態に係る反復訂正を行う回路構成を説明するブロック図である。図１８は、反復訂正を行う回路構成を主に示している。
【０１０１】
Ｃ１モジュール２０に含まれるＣ１デコーダ２２は、ＮＡＮＤ型フラッシュメモリ３から読み出されたＣ１フレームに対してＣ１訂正を行う。Ｃ１モジュール２０に含まれるＣＲＣ回路２３は、Ｃ１デコーダ２２により誤りが訂正されたＣ１フレームに対してＣＲＣ検証を行う。
【０１０２】
Ｃ１モジュール２０は、Ｎ個のチャネルＣＨ１〜ＣＨ（Ｎ）を介して、データバッファ（ＤＢＵＦ）１４に接続される。Ｎは、２以上の整数である。チャネルＣＨ１〜ＣＨ（Ｎ）は、バスを構成する。ＤＢＵＦ１４は、Ｃ１訂正及びＣＲＣ検証が行われたＣ１フレームを格納する。また、Ｃ１モジュール２０は、Ｎ個のチャネルＣＨ１〜ＣＨ（Ｎ）を介して、Ｃ２モジュール２４に接続される。本実施形態では、チャネルＣＨ１〜ＣＨ（Ｎ）を用いて、複数のＣ１フレームを並行して転送可能である。
【０１０３】
Ｃ２モジュール２４は、Ｃ２デコーダ２６、ディスパッチャ３０、Ｃ２シンドローム生成部３１、シンドロームバッファ（Ｓｙｎｄ_ＢＵＦ）用のインターフェース回路（Ｓｙｎｄ  ＢＵＦ  Ｉ／Ｆ）３２、訂正不能データ用バッファ（ＵＮＣＢＵＦ）用のインターフェース回路（ＵＮＣＢＵＦ  Ｉ／Ｆ）３３、レジスタ配列（unc_pageid[] reg）３４、レジスタ（total_unc_num reg）３５、レジスタ（unc_num_in_uncbuf reg）３６、Ｃ１デコーダ３７、ＣＲＣ回路３８、及びセレクタ３９、４０を備える。
【０１０４】
Ｃ２モジュール２４は、反復訂正を行うために、ＬＤＰＣ符号用のＣ１デコーダ３７と、ＣＲＣ回路３８とを含む。Ｃ１デコーダ３７の機能は、Ｃ１モジュール２０に含まれるＣ１デコーダ２２と同じである。ＣＲＣ回路３８の機能は、Ｃ１モジュール２０に含まれるＣＲＣ回路２３と同じである。
【０１０５】
ディスパッチャ３０は、チャネルＣＨ１〜ＣＨ（Ｎ）、及びセレクタ３９、４０からデータを受ける。ディスパッチャ３０は、転送するデータの順番を制御する。ディスパッチャ３０から出力されたデータは、Ｃ２シンドローム生成部３１に送信される。
【０１０６】
Ｃ２シンドローム生成部３１はＣ２シンドロームを生成する。Ｃ２デコーダ２６は、Ｃ２シンドロームを用いて、誤り情報を生成する。Ｃ２シンドローム生成部３１は、インターフェース回路３２、及びＣ２デコーダ２６に接続される。
【０１０７】
インターフェース回路３２は、シンドロームバッファ（Ｓｙｎｄ_ＢＵＦ）２８との間で、データの送受信を行う。Ｓｙｎｄ_ＢＵＦ２８は、Ｃ２シンドローム生成部３１によって生成されたＣ２シンドロームを一時的に格納する。
【０１０８】
インターフェース回路３３は、ＵＮＣＢＵＦ２７との間で、データの送受信を行う。ＵＮＣＢＵＦ２７は、反復訂正の対象であるデータを一時的に格納する。
【０１０９】
セレクタ３９は、例えばチャネルＣＨ１と、ＵＮＣＢＵＦ２７のパスとを切り替える。セレクタ３９の出力は、ディスパッチャ３０に接続される。セレクタ４０は、例えばチャネルＣＨ２と、Ｃ１デコーダ３７及びＣＲＣ回路３８の出力とを切り替える。セレクタ４０の出力は、ディスパッチャ３０に接続される。セレクタ３９、４０の選択動作は、例えばプロセッサ１１から送られる選択信号により制御される。
【０１１０】
レジスタ群３４〜３６は、訂正不能であったＣ１フレームの情報（Ｃ１訂正不能情報とも称される場合もある）を格納する。レジスタ群３４〜３６が格納する情報の詳細については後述する。
【０１１１】
［１−７−２］  シンドローム生成動作
図１９は、本実施形態に係る反復訂正の概要を説明するフローチャートである。図２０は、本実施形態に係るＣ２シンドローム生成のデータフローを説明する図である。
【０１１２】
図１９に示すように、メモリコントローラ４はＮＡＮＤ型フラッシュメモリ３から、Ｃ１フレームを読み出す（ステップＳ２００Ａ）。Ｃ１モジュール２０は、読み出されたＣ１フレームに対してＣ１訂正を行う（ステップＳ２０１Ａ）。当該Ｃ１フレームがＣ１訂正により訂正可能であれば（ステップＳ２０２Ａ＝Ｎｏ）、訂正済みの当該Ｃ１フレームはＤＢＵＦへ転送され処理が終了する（Ｓ２１１Ａ）。一方で、当該Ｃ１フレームがＣ１訂正により訂正不能であれば（ステップＳ２０２Ａ＝Ｙｅｓ）、メモリコントローラ４は訂正不能な当該Ｃ１フレームを含むＣ１×Ｃ２フレームに対し、反復訂正を行う。反復訂正を行う際にはその準備として、ステップＳ２００Ｂ、Ｓ２０１、Ｓ２０３、Ｓ２０４、Ｓ２０５の処理により、まずＣ２シンドロームの生成が行われる。
【０１１３】
プロセッサ１１は、ＮＡＮＤ型フラッシュメモリ３から、Ｃ１フレームを単位として訂正不能な当該Ｃ１フレームを含むＣ１×Ｃ２フレームを読み出す（ステップＳ２００Ｂ）。
【０１１４】
Ｃ１モジュール２０は、読み出されたＣ１×Ｃ２フレームに含まれる各Ｃ１フレームに対してＣ１訂正（及びＣＲＣ検証）を行う（ステップＳ２０１）。プロセッサ１１は、Ｃ１×Ｃ２フレームを、ＤＢＵＦ１４に転送する（ステップＳ２０３）。
【０１１５】
Ｃ２モジュール２４は、バス（チャネルＣＨ１〜ＣＨ（Ｎ））を転送されるＣ１×Ｃ２フレームを構成する２５５個のＣ１フレームをスヌープする（ステップＳ２０４）。Ｃ２シンドローム生成部３１は、スヌープされたＣ１フレームに含まれるＲＳシンボルを用いて、Ｃ２シンドローム集合を生成する（ステップＳ２０５）。
【０１１６】
ステップＳ２０５の処理の具体的な動作は、以下の通りである。Ｃ２モジュール２４は、訂正可能なＣ１フレーム及び訂正不能なＣ１フレームを含むＣ１×Ｃ２フレームのうちの１行目のＣ１フレームをバスからスヌープする。Ｃ２モジュール２４は、スヌープされた１行目のＣ１フレームに含まれるＲＳシンボル対する部分Ｃ２シンドロームを生成する。Ｃ２モジュール２４は、生成された部分Ｃ２シンドロームをＳｙｎｄ_ＢＵＦ２８に格納する。Ｃ２モジュール２４は、Ｃ１×Ｃ２フレームのうちの２行目のＣ１フレームをバスからスヌープする。Ｃ２モジュール２４は、スヌープされた２行目のＣ１フレームに含まれるＲＳシンボルに対する部分Ｃ２シンドロームを生成する。Ｃ２モジュール２４は、１行目のＣ１フレームに対応する部分Ｃ２シンドロームをＳｙｎｄ_ＢＵＦ２８からリードする。Ｃ２モジュール２４は、２行目のＣ１フレームに対応する部分Ｃ２シンドロームと１行目のＣ１フレームに対応する部分Ｃ２シンドロームを累積加算する。累積加算された部分Ｃ２シンドロームは、累積部分Ｃ２シンドロームと呼ばれ、Ｓｙｎｄ_ＢＵＦ２８に格納される。同様に、Ｃ２モジュール２４は、Ｃ１×Ｃ２フレームのうちの３行目〜２５５行目のＣ１フレームに含まれるＲＳシンボルに対する部分Ｃ２シンドロームを生成し、Ｓｙｎｄ_ＢＵＦ２８に格納されている累積部分Ｃ２シンドロームと累積加算して、累積部分Ｃ２シンドロームを更新する。各Ｃ１フレームに含まれるＲＳシンボルに対する部分Ｃ２シンドロームの生成と、それまでの累積部分Ｃ２シンドロームとの累積加算が、Ｃ１×Ｃ２フレームに含まれる２５５個のＣ１フレームについて行われる。２５５個のＣ１フレームについて累積加算を実行して得られる累積部分Ｃ２シンドロームが、Ｃ２シンドロームである。
【０１１７】
Ｃ２シンドロームは、Ｃ１×Ｃ２フレームを構成する各列のＣ２フレームごとに生成される。こうして得られる各列のＣ２シンドロームの組が前述のＣ２シンドローム集合に相当する。
【０１１８】
ＤＭＡＣ１５は、訂正不能な（すなわち、Ｃ１モジュール２０によって誤りが訂正できなかった）複数のＣ１フレームのうちの一部を、ＤＢＵＦ１４からＵＮＣＢＵＦ２７に転送する（ステップＳ２０７）。図２０のＤＢＵＦ１４及びＵＮＣＢＵＦ２７では、ＤＢＵＦ１４に格納された訂正不能なＣ１フレーム（“×”を含むＣ１フレーム）のうち、ＵＮＣＢＵＦ２７に転送されたＣ１フレームを白丸で表し、ＵＮＣＢＵＦ２７に転送されていないＣ１フレームを黒丸で表している。
【０１１９】
プロセッサ１１は、Ｃ１訂正不能情報を生成する（ステップＳ２０８）。プロセッサ１１は、このＣ１訂正不能情報をレジスタ群３４〜３６に格納する。レジスタ配列（unc_pageid[] reg）３４は、ＵＮＣＢＵＦ２７に転送したＣ１フレームの、Ｃ１×Ｃ２フレーム内でのＲＳシンボル番号（以下ページ番号と記載する）を格納する。レジスタ配列（unc_pageid[] reg）３４のＮ番目の要素（unc_pageid[Ｎ]）は、ＵＮＣＢＵＦ２７にＮ番目に転送されたＣ１フレームのページ番号を格納する。図２０の例では、レジスタ配列３４に格納されるページ番号は、ＤＢＵＦ１４の白丸で示したＣ１フレームのページ番号に対応する。レジスタ（total_unc_num reg）３５は、ＤＢＵＦ１４に格納されたＣ１フレームのうち、訂正不能であった全てのＣ１フレームの数（total_unc_num）を格納する。図２０の例では、レジスタ３５に格納されるＣ１フレームの数は、ＤＢＵＦ１４の黒丸及び白丸で示したＣ１フレームの数の合計に対応する。レジスタ（unc_num_in_uncbuf reg）３６は、ＵＮＣＢＵＦ２７に転送された訂正不能なＣ１フレームの数（unc_num_in_uncbuf）を格納する。
【０１２０】
［１−７−３］  反復訂正動作
図２１は、本実施形態に係る反復訂正動作を説明するフローチャートである。図２１は、Ｃ１×Ｃ２フレーム対する反復訂正動作を示す。反復訂正動作の開始に先立ち、反復動作の対象のＣ１×Ｃ２フレームについてのＣ２シンドローム集合が作成され、Ｓｙｎｄ＿ＢＵＦ２８に格納されている。
【０１２１】
Ｃ２モジュール２４は、以下の条件１及び条件２を両方満たすか否かを判定する（ステップＳ３００）。
【０１２２】
（条件１）：レジスタ３５に格納された値により示されるＣ１フレームの数（total_unc_num）が２以下である。
【０１２３】
（条件２）：レジスタ３６に格納された値により示されるＣ１フレームの数（unc_num_in_uncbuf）と、レジスタ３５に格納されたＣ１フレームの数（total_unc_num）とが同じである。
【０１２４】
条件１は、Ｃ１×Ｃ２フレームに含まれる訂正不能なＣ１フレームが２個以下であるか否かを判定している。すなわち、条件１は、Ｃ２消失訂正の条件を満たしたことを示している。条件２は、ＤＢＵＦ１４に格納された訂正不能なＣ１フレームの全てが、ＵＮＣＢＵＦ２７に転送されたことを示している。
【０１２５】
ステップＳ３００の条件を満たす場合（ステップＳ３００＝Ｙｅｓ）、反復訂正は不要である。Ｃ２デコーダ２６は、Ｃ２消失訂正を実行する（ステップＳ３０１）。ステップＳ３０１の詳細については後述する。Ｃ２モジュール２４は、レジスタ群３４〜３６に格納されたＣ１訂正不能情報を更新する（ステップＳ３０２）。更新されるＣ１訂正不能情報は、前述した情報“unc_pageid［Ｎ］”、“total_unc_num”、及び“unc_num_in_uncbuf”からなる。
【０１２６】
ステップＳ３００の条件を満たさない場合（ステップＳ３００＝Ｎｏ）、反復訂正が行われる。すなわち、Ｃ２モジュール２４は、現在ラウンド数を０に設定する（ステップＳ３０３）。図２２は、本実施形態に係るページ番号unc_pageid［Ｎ］、ステージ処理、及びラウンド処理の関係を説明する図である。ステージ処理は、（Ａ）訂正不能である１つのＣ１フレームに対してのＣ１訂正、（Ｂ）当該Ｃ１フレームに含まれるＣ２シンボルを含むＣ２フレームに対してのＣ２訂正、及び、（Ｃ）当該Ｃ１訂正、Ｃ２訂正の結果に基づくＣ１訂正不能情報の更新、を行う処理である。ラウンド処理は、ステージ処理をＵＮＣＢＵＦ２７内の全ての訂正不能Ｃ１フレームそれぞれに対し、１回ずつ適用する処理である。現在ラウンド数とは現在のラウンド処理の回数を指す。
【０１２７】
図２１に戻る。Ｃ２モジュール２４は、現在ラウンド数が規定回数未満か否かを判定する（ステップＳ３０４）。現在ラウンド数が規定回数以上の場合（ステップＳ３０４＝Ｎｏ）、Ｃ２モジュール２４は、反復訂正を終了する。
【０１２８】
現在ラウンド数が規定回数未満である場合（ステップＳ３０４＝Ｙｅｓ）、Ｃ２モジュール２４は、レジスタ配列（unc_pageid[]）３４のインデックスＮをゼロに設定する（ステップＳ３０５）。
【０１２９】
Ｃ２モジュール２４は、ページ番号unc_pageid［Ｎ］のＣ１フレームが、まだ訂正不能であるか否かを判定する（ステップＳ３０６）。
【０１３０】
ページ番号unc_pageid［Ｎ］のＣ１フレームがまだ訂正不能である場合（ステップＳ３０６＝Ｙｅｓ）、Ｃ２モジュール２４は、当該Ｃ１フレームに含まれるＣ２シンボルを含むＣ２フレームに対するＣ２通常訂正、及び当該Ｃ１フレームに対するＣ１訂正を行う（ステップＳ３０８）。ステップＳ３０８の詳細については後述する。
【０１３１】
Ｃ２モジュール２４は、レジスタ配列３４及びレジスタ３５、３６の情報、すなわちページ番号unc_pageid[Ｎ]、全訂正不能Ｃ１フレーム数total_unc_num、及びＵＮＣＢＵＦ内の訂正不能Ｃ１フレーム数unc_num_in_uncbufを更新する（ステップＳ３０９）。
【０１３２】
Ｃ２モジュール２４は、現在のステージ処理の対象であるページ番号unc_pageid［Ｎ］のＣ１フレームがＵＮＣＢＵＦ２７内の最後のＣ１フレームであるか否か、すなわち、１回のラウンド処理が終了したか否かを判定する（ステップＳ３１０）。１回のラウンド処理が終了していない場合（ステップＳ３１０＝Ｎｏ）、Ｃ２モジュール２４は、ページ番号unc_pageid［Ｎ］のＮに１を加算する（ステップＳ３０７）。そして、Ｃ２モジュール２４は、図２１のＳ３０８及びＳ３０９で構成されるステージ処理を繰り返す。
【０１３３】
ページ番号unc_pageid［Ｎ］のＣ１フレームが訂正可能である場合（ステップＳ３０６＝Ｎｏ）、処理はステップＳ３０７に移行する。
【０１３４】
１回のラウンド処理が終了した場合（ステップＳ３１０＝Ｙｅｓ）、Ｃ２モジュール２４は、ステップＳ３００で説明した条件１及び条件２を再度判定する（ステップＳ３１１）。
【０１３５】
ステップＳ３１１の条件を満たさない場合（ステップＳ３１１＝Ｎｏ）、Ｃ２モジュール２４は、現在ラウンド数に１を加算する（ステップＳ３１２）。そして、Ｃ２モジュール２４は、ラウンド処理を繰り返す。
【０１３６】
ステップＳ３１１の条件を満たす場合（ステップＳ３１１＝Ｙｅｓ）、処理はステップＳ３０１に移行する。なお、図２１では省略するが、ＤＢＵＦ１４に格納されたＣ１フレームと、ＵＮＣＢＵＦ２７に格納されたＣ１フレームとを入れ替えても良い。例えば、ステップＳ３０４＝Ｎｏの後に、ＵＮＣＢＵＦ２７の中身を入れ替えるか否かを判定する。ＵＮＣＢＵＦ２７の中身を入れ替える場合、ＵＮＣＢＵＦ２７に格納された一部のＣ１フレームとＤＢＵＦ１４に格納された一部のＣ１フレームとを入れ替えた後、ステップＳ３００に戻るようにすることができる。ＵＮＣＢＵＦ２７の中身を入れ替えない場合、そこで反復訂正動作は終了する。
【０１３７】
［１−７−４］  通常訂正動作
次に、図２１のステップＳ３０８の動作、すなわちＣ２通常訂正、及びＣ１訂正について説明する。図２３は、本実施形態に係るＣ２通常訂正のデータフローを説明する図である。図２３のＵＮＣＢＵＦ２７内の白丸は、図２０のＵＮＣＢＵＦ２７内の白丸に対応する。
【０１３８】
Ｃ２モジュール２４は、訂正対象Ｃ１フレームを、ＵＮＣＢＵＦ２７から読み出す（図２３のステップ（１））。訂正対象Ｃ１フレームは、あるステージ処理の対象のＣ１フレームである。そして、Ｃ２モジュール２４は、訂正対象Ｃ１フレームを、Ｃ２デコーダ２６に転送すると共に、セレクタ３９に転送する（図２３のステップ（２））。図２３では、訂正対象Ｃ１フレームをＣ２デコーダ２６に転送するパスを“訂正用ストリーム”と表記し、訂正対象Ｃ１フレームをセレクタ３９に転送するパスを“シンドロームキャンセル用ストリーム（Synd cancel用ストリーム）”と表記している。セレクタ３９及びディスパッチャ３０は、訂正対象Ｃ１フレームを、Ｃ２シンドローム生成部３１に送る（図２３のステップ（３））。本実施形態では、一例として、チャネルＣＨ１がシンドロームキャンセル用として用いられる。
【０１３９】
Ｃ２モジュール２４は、Ｓｙｎｄ_ＢＵＦ２８に格納されているＣ２シンドローム集合のうち、訂正対象Ｃ１フレームに含まれる各Ｃ２シンボルについて、それを含むＣ２フレームに対して生成されたＣ２シンドロームを読み出す（図２３のステップ（４））。そして、Ｃ２モジュール２４は、当該Ｃ２シンドローム（以下、オリジナルＣ２シンドロームと称する場合がある）を、Ｓｙｎｄ_ＢＵＦ２８からＣ２シンドローム生成部３１及びＣ２デコーダ２６に転送する（図２３のステップ（５））。
【０１４０】
Ｃ２シンドローム生成部３１は、オリジナルＣ２シンドロームのうち、訂正対象Ｃ１フレームに含まれるＣ２シンボルに対応する部分Ｃ２シンドロームをキャンセル、すなわちゼロにする。オリジナルＣ２シンドロームから部分Ｃ２シンドロームがキャンセルされることによって得られるＣ２シンドロームを相殺Ｃ２シンドロームと呼ぶ。続いて、Ｃ２シンドローム生成部３１は、相殺Ｃ２シンドロームを、Ｓｙｎｄ_ＢＵＦ２８に転送する（図２３のステップ（６））。
【０１４１】
Ｃ２デコーダ２６は、オリジナルＣ２シンドロームを用いて、訂正対象Ｃ１フレームに含まれるＣ２シンボルを含むＣ２フレームに対するＣ２通常訂正を行う。この際、Ｃ２デコーダ２６によるＣ２通常訂正は、Ｃ１フレーム中のユーザデータに対してのみ行われ、ＣＲＣパリティ及びＣ１パリティ部に対しては行われない。次に、Ｃ１デコーダ３７は、訂正対象Ｃ１フレームに対してＣ１訂正を行う（図２３のステップ（７））。
【０１４２】
Ｃ２モジュール２４は、訂正後の訂正対象Ｃ１フレームを、ＵＮＣＢＵＦ２７に転送すると共に、セレクタ４０に転送する（図２３のステップ（８））。図２３では、訂正後の訂正対象Ｃ１フレームをセレクタ４０に転送するパスを“シンドローム更新用ストリーム（Synd revise用ストリーム）”と表記している。本実施形態では、一例として、チャネルＣＨ２がシンドローム更新用として用いられる。セレクタ４０及びディスパッチャ３０は、訂正後の訂正対象Ｃ１フレームを、Ｃ２シンドローム生成部３１に送る。
【０１４３】
Ｃ２モジュール２４は、相殺Ｃ２シンドロームを、Ｓｙｎｄ_ＢＵＦ２８から読み出す。そして、Ｃ２モジュール２４は、相殺Ｃ２シンドロームを、Ｓｙｎｄ_ＢＵＦ２８からＣ２シンドローム生成部３１に転送する（図２３のステップ（９））。
【０１４４】
Ｃ２シンドローム生成部３１は、シンドローム更新用ストリームを介して受け取った訂正後の訂正対象Ｃ１フレームに含まれるＣ２シンボルに対応する部分Ｃ２シンドロームを生成する。Ｃ２シンドローム生成部３１は、生成した部分Ｃ２シンドロームとステップ（９）で読み出された相殺Ｃ２シンドロームとの排他的論理和演算を実行し、オリジナルＣ２シンドロームを更新する。オリジナルＣ２シンドロームを更新する動作の詳細については後述する。Ｃ２シンドローム生成部３１は、更新後のＣ２シンドロームを、Ｓｙｎｄ_ＢＵＦ２８に転送する（図２３のステップ（１０））。
【０１４５】
Ｃ２モジュール２４は、レジスタ配列３４及びレジスタ３５、３６に格納されたＣ１訂正不能情報（UNC info）を更新する（図２３のステップ（１１））。
【０１４６】
Ｃ２モジュール２４は、図２３のステップ（１）〜ステップ（１１）の処理を、訂正対象Ｃ１フレームに含まれる全てのＣ２シンボルに対して行う。
【０１４７】
［１−７−５］  消失訂正動作
次に、図２１のステップＳ３０１の動作、すなわちＣ２消失訂正について説明する。図２４は、本実施形態に係るＣ２消失訂正のデータフローを説明する図である。図２４のＵＮＣＢＵＦ２７内の白丸は、Ｃ２通常訂正及びＣ１訂正によっても未だ訂正不能であるＣ１フレームを表す。図２４のＵＮＣＢＵＦ２７内の白四角は、Ｃ２通常訂正及びＣ１訂正により訂正されたＣ１フレームを表す。
【０１４８】
Ｃ２モジュール２４は、訂正対象Ｃ１フレームを、ＵＮＣＢＵＦ２７から読み出す（図２４のステップ（１））。そして、Ｃ２モジュール２４は、訂正対象Ｃ１フレームを、訂正用ストリームを介してＣ２デコーダ２６に転送すると共に、シンドロームキャンセル用ストリームを介してセレクタ３９に転送する（図２４のステップ（２））。
【０１４９】
Ｃ２モジュール２４は、Ｓｙｎｄ＿ＢＵＦ２８に格納されているＣ２シンドローム集合のうち、訂正対象Ｃ１フレームに含まれる各Ｃ２シンボルについて、それを含むＣ２フレームに対して生成されたオリジナルＣ２シンドロームを読み出す（図２４のステップ（３））。そして、Ｃ２モジュール２４は、当該オリジナルＣ２シンドロームを、Ｓｙｎｄ_ＢＵＦ２８からＣ２シンドローム生成部３１に転送する（図２４のステップ（４））。
【０１５０】
Ｃ２シンドローム生成部３１は、オリジナルＣ２シンドロームのうち、訂正対象Ｃ１フレームに含まれるＣ２シンボルに対応する部分Ｃ２シンドロームをキャンセル、すなわちゼロにして、相殺Ｃ２シンドロームを得る。続いて、Ｃ２シンドローム生成部３１は、相殺Ｃ２シンドロームを、Ｃ２デコーダ２６に転送する（図２４のステップ（５））。
【０１５１】
Ｃ２デコーダ２６は、相殺Ｃ２シンドロームを用いて、訂正対象Ｃ１フレームに含まれるＣ２シンボルを含むＣ２フレームに対するＣ２消失訂正を行う（図２４のステップ（６））。この際、Ｃ２デコーダ２６によるＣ２消失訂正は、Ｃ１フレーム中のユーザデータに対してのみ行われ、ＣＲＣパリティ及びＣ１パリティ部に対しては行われない。
【０１５２】
Ｃ２モジュール２４は、訂正後のＣ１フレームを、ＵＮＣＢＵＦ２７に転送する（図２４のステップ（７））。
【０１５３】
Ｃ２モジュール２４は、レジスタ配列３４及びレジスタ３５、３６に格納されたＣ１訂正不能情報（UNC info）を更新する（図２４のステップ（８））。
【０１５４】
Ｃ２モジュール２４は、図２４のステップ（１）〜ステップ（８）の処理を、訂正対象Ｃ１フレームに含まれる全てのＣ２シンボルに対して行う。
【０１５５】
［１−８］  シンドローム更新動作
次に、図２３を参照して説明したＣ２シンドローム更新動作について詳しく説明する。Ｃ２シンドロームを逐次的に更新する動作をＣ２シンドローム更新動作と呼ぶ。
【０１５６】
［１−８−１］  シンドローム更新用の回路構成
図２５は、本実施形態に係るＣ２シンドローム更新動作を行う回路を説明するブロック図である。図２５は、シンドローム更新動作を行う回路を主に示している。Ｃ２シンドローム更新動作は、主にＣ２モジュール２４により行われる。
【０１５７】
Ｃ２モジュール２４は、Ｃ２シンドローム生成回路４１、シンドロームキャンセル回路４２、シンドローム更新回路４３、セレクタ４４、Ｃ２誤り情報（Ｃ２  ｅｒｒ  ｉｎｆｏ）生成回路４５、Ｃ２デコーダ２６、及びＣ１デコーダ３７を備える。Ｃ２シンドローム生成回路４１、シンドロームキャンセル回路４２、及びシンドローム更新回路４３は、図１８に示したＣ２シンドローム生成部３１に含まれる。
【０１５８】
Ｃ２モジュール２４は、ＵＮＣＢＵＦ２７、及びＳｙｎｄ_ＢＵＦ２８に接続される。Ｓｙｎｄ_ＢＵＦ２８用のインターフェース回路３２、及びＵＮＣＢＵＦ２７用のインターフェース回路３３の図示は省略している。
【０１５９】
ＵＮＣＢＵＦ２７は、Ｃ１訂正により訂正不能であったＣ１フレームを格納する。図２５の例では、ＵＮＣＢＵＦ２７は、訂正不能なｊ個のＣ１フレームＵｎｃＦｒｍ１〜ＵｎｃＦｒｍ（ｊ）を格納している。
【０１６０】
Ｃ２シンドローム生成回路４１は、バスからスヌープした複数（例えば２５５個）のＣ１フレームそれぞれに含まれるユーザデータとＲＳパリティ部によって構成される各Ｃ２フレームについての、オリジナルＣ２シンドロームを生成する。オリジナルＣ２シンドロームのそれぞれは、Ｃ１×Ｃ２フレームを構成している各Ｃ２フレームから生成される。オリジナルＣ２シンドロームは、各Ｃ２フレームに含まれている全てのＣ２シンボルについての部分Ｃ２シンドロームを、排他的論理和により累積加算したものである。よって、オリジナルＣ２シンドロームのことを完全Ｃ２シンドロームと称する場合がある。完全Ｃ２シンドロームＣｏｍｐＳｙｎｄは、Ｓｙｎｄ_ＢＵＦ２８に転送される。
【０１６１】
シンドロームキャンセル回路４２は、相殺Ｃ２シンドロームＣａｎＳｙｎｄを生成する。相殺Ｃ２シンドロームＣａｎＳｙｎｄは、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄのうち訂正対象Ｃ１フレームに含まれるＣ２シンボルに対応する部分Ｃ２シンドロームがキャンセルされたシンドロームである。シンドロームキャンセル回路４２は、Ｃ２シンドローム生成回路（Ｃ２  ｓｙｎｄ  ｇｅｎ）４２Ａ、及び排他的論理和回路４２Ｂを備える。Ｃ２シンドローム生成回路４２Ａは、Ｃ２シンドローム生成回路４１と機能的に同一であり、回路を共有しても良い。
【０１６２】
Ｃ２シンドローム生成回路４２Ａは、ＵＮＣＢＵＦ２７から訂正対象Ｃ１フレームＵｎｃＦｒｍを読み出す。訂正対象Ｃ１フレームＵｎｃＦｒｍは、訂正不能なＣ１フレームＵｎｃＦｒｍ１〜ＵｎｃＦｒｍ（ｊ）のいずれか１つである。Ｃ２シンドローム生成回路４２Ａは、訂正対象Ｃ１フレームＵｎｃＦｒｍに含まれる各Ｃ２シンボルＵｎｃＤａｔから、部分Ｃ２シンドロームPartialSyndOldをそれぞれ生成する。
【０１６３】
排他的論理和回路４２Ｂは、Ｃ２シンドローム生成回路４２Ａから部分Ｃ２シンドロームPartialSyndOldを受け、Ｓｙｎｄ_ＢＵＦ２８から完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを受ける。排他的論理和回路４２Ｂは、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄと部分Ｃ２シンドロームPartialSyndOldとを用いて、排他的論理和演算を行う。この排他的論理輪演算の結果、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄのうち、訂正対象Ｃ１フレームＵｎＣＦｒｍに含まれるＣ２シンボルＵｎｃＤａｔに対応する部分はゼロになる。この排他的論理和演算により、相殺Ｃ２シンドロームＣａｎＳｙｎｄが得られる。排他的論理和回路４２Ｂは、相殺Ｃ２シンドロームＣａｎＳｙｎｄを出力する。相殺Ｃ２シンドロームＣａｎＳｙｎｄは、Ｓｙｎｄ_ＢＵＦ２８に格納されると共にセレクタ４４へ送られる。
【０１６４】
セレクタ４４は、Ｓｙｎｄ_ＢＵＦ２８から完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを受け、シンドロームキャンセル回路４２から相殺Ｃ２シンドロームＣａｎＳｙｎｄを受ける。Ｃ２モジュール２４は、Ｃ２訂正を通常訂正で行うか消失訂正で行うかに応じて、セレクタ４４で、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄと相殺Ｃ２シンドロームＣａｎＳｙｎｄとの一方を選択する。セレクタ４４は、通常訂正の場合は完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを選択し、消失訂正の場合は相殺Ｃ２シンドロームＣａｎＳｙｎｄを選択する。セレクタ４４は、選択結果として、選択シンドロームＳｅｌＳｙｎｄを出力する。
【０１６５】
Ｃ２誤り情報生成回路４５は、セレクタ４４から選択シンドロームＳｅｌＳｙｎｄを受ける。Ｃ２誤り情報生成回路４５は、選択シンドロームＳｅｌＳｙｎｄを用いて、Ｃ２符号に基づく誤り情報（error info）を生成する。誤り情報の内容は、図５を参照して前述した通りである。
【０１６６】
Ｃ２デコーダ２６は、ＵＮＣＢＵＦ２７から読み出した訂正対象Ｃ１フレームＵｎｃＦｒｍに含まれる各Ｃ２シンボルＵｎｃＤａｔと、Ｃ２誤り情報生成回路４５からの当該Ｃ２シンボルＵｎｃＤａｔに対応する誤り情報とを用いて、当該Ｃ２シンボルＵｎｃＤａｔに対するＣ２訂正を行う。
【０１６７】
Ｃ１デコーダ３７は、訂正対象Ｃ１フレームＵｎｃＦｒｍに対するＣ１訂正を行う。Ｃ１デコーダ３７は、訂正後のＣ１フレーム（訂正済みＣ１フレームと称する）ＣｒｃｔＦｒｍを出力する。なお、Ｃ１デコーダ３７によるＣ１訂正の後にＣＲＣ回路３８によるＣＲＣ検証が行われるが、ＣＲＣ回路３８の図示は省略されている。
【０１６８】
シンドローム更新回路４３は、Ｃ２シンドローム生成回路（Ｃ２  ｓｙｎｄ  ｇｅｎ）４３Ａ、及び排他的論理和回路４３Ｂを備える。Ｃ２シンドローム生成回路４３Ａは、Ｃ２シンドローム生成回路４１と機能的に同一であり、回路を共有しても良い。
【０１６９】
Ｃ２シンドローム生成回路４３Ａは、訂正済みＣ１フレームＣｒｃｔＦｒｍに含まれる各Ｃ２シンボルＣｒｃｔＤａｔを、Ｃ１デコーダ３７から受ける。Ｃ２シンドローム生成回路４３Ａは、当該Ｃ２シンボルＣｒｃｔＤａｔに対応する部分Ｃ２シンドロームPartialSyndNew（以下、更新部分Ｃ２シンドロームと称される場合がある）をそれぞれ生成する。
【０１７０】
排他的論理和回路４３Ｂは、Ｃ２シンドローム生成回路４３Ａから更新部分Ｃ２シンドロームPartialSyndNewを受け、Ｓｙｎｄ_ＢＵＦ２８から相殺Ｃ２シンドロームＣａｎＳｙｎｄを受ける。排他的論理和回路４３Ｂは、相殺Ｃ２シンドロームＣａｎＳｙｎｄと更新部分Ｃ２シンドロームPartialSyndNewとを用いて、排他的論理和演算を行う。この排他的論理和演算により生成される、更新された完全Ｃ２シンドロームを更新完全Ｃ２シンドロームＲｅｖＳｙｎｄと称する。排他的論理和回路４３Ｂは、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄを出力する。更新完全Ｃ２シンドロームＲｅｖＳｙｎｄは、Ｓｙｎｄ_ＢＵＦ２８に格納される。
【０１７１】
［１−８−２］  シンドローム更新動作の詳細
次に、図２６乃至図２８を参照して、本実施形態に係るＣ２シンドローム更新動作の詳細について説明する。Ｃ２シンドローム更新動作は、図２６乃至図２８に示したステップＳ４００〜Ｓ４０４の順に行われる。
【０１７２】
まず、反復訂正の準備について説明する。図２６に示すように、Ｃ２シンドローム生成回路（Ｃ２  ｓｙｎｄ  ｇｅｎ）４１は、スヌープ動作により、Ｃ１×Ｃ２フレームを構成する全てのＣ１フレームを受信する。Ｃ１×Ｃ２フレームを構成するＣ１フレームをｒ０、ｒ１、・・・、ｒｉ、・・・、ｒＮと表記する。訂正対象Ｃ１フレームをｒｉと表記する。Ｃ２符号がＲＳ符号である場合、Ｎ＝２５４である。Ｃ２シンドローム生成回路４１は、Ｃ１フレームｒ０、ｒ１、・・・、ｒｉ、・・・、ｒＮそれぞれのｋ番目に位置するＣ２シンボル（以下Ｓｙｍｂｏｌｋ（ｒＭ）と表記する。Ｍは０〜Ｎのいずれかの整数である。）によって生成された完全Ｃ２シンドローム（以下、ＣｏｍｐＳｙｎｄｋと表記する）を生成する。ｋは例えば図６Ａを参照して説明したように、０〜４Ｋ＋αのいずれかの整数である。Ｃ２シンドローム生成回路４１は、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋを、Ｓｙｎｄ_ＢＵＦ２８に転送する。完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋの生成及びＳｙｎｄ_ＢＵＦ２８への転送は、当該Ｃ１×Ｃ２フレームの行方向に繰り返される。これにより、Ｓｙｎｄ_ＢＵＦ２８は、当該Ｃ１×Ｃ２フレームを構成する全てのＣ２フレームについての完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋの集合である、完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐを格納する（図２６のステップＳ４００）。訂正対象Ｃ１フレームｒｉは、図１８に示すＤＭＡＣ１５によってＤＢＵＦ１４からＵＮＣＢＵＦ２７に転送される。
【０１７３】
完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋは、以下のようなシンドローム多項式で求められる。
Ｓｋ（ｘ）＝ＳｙｎｄＮ（Ｓｙｍｂｏｌｋ（ｒＮ））＋・・・＋Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ｒｉ））＋・・・＋Ｓｙｎｄ１（Ｓｙｍｂｏｌｋ（ｒ１））＋Ｓｙｎｄ０（Ｓｙｍｂｏｌｋ（ｒ０））
すなわち、シンドローム多項式は、訂正対象Ｃ１フレームｒ０、ｒ１、・・・、ｒｉ、・・・、ｒＮそれぞれのｋ番目に位置するＣ２シンボルに対応した多項式（以下部分シンドローム多項式と呼ぶ）ＳｙｎｄＭ（Ｓｙｍｂｏｌｋ（ｒＭ））の和として表され、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋは、このシンドローム多項式に有限体の元を、訂正能力等に応じて必要なだけ代入することによって求められる。ここで加算記号は、有限体係数多項式の和を示す。有限体の元の表現としてベクトル表現を取れば、上記の加算記号は排他的論理和演算を表す。以下では有限体の元の表現としてベクトル表現を取るものとする。
【０１７４】
続いて、反復訂正が行われる。図２７のステップＳ４０１に示すように、Ｃ２モジュール２４は、ＵＮＣＢＵＦ２７から訂正対象Ｃ１フレームｒｉを読み出す。また、Ｃ２モジュール２４は、Ｓｙｎｄ_ＢＵＦ２８に格納されている完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐのうち、ｋ列目のＣ２フレームに対応する完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋを読み出す。
【０１７５】
図２７のステップＳ４０２に示すように、Ｃ２シンドローム生成回路４２Ａは、訂正対象Ｃ１フレームｒｉのｋ番目に位置するＣ２シンボル対して、部分シンドローム多項式Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ｒｉ））を生成する。Ｃ２シンドローム生成回路４２Ａは、生成した部分シンドローム多項式を用いて部分Ｃ２シンドロームPartialSyndOldｋを生成する。排他的論理和回路４２Ｂは、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋと部分Ｃ２シンドロームPartialSyndOldｋとを用いて、排他的論理和演算を行う。そして、排他的論理和回路４２Ｂは、相殺Ｃ２シンドロームＣａｎＳｙｎｄｋを生成する。
【０１７６】
相殺Ｃ２シンドロームＣａｎＳｙｎｄｋは、以下のようなシンドローム多項式で求められる。
Ｓｋ（ｘ）＝ＳｙｎｄＮ（Ｓｙｍｂｏｌｋ（ｒＮ））＋・・・Ｓｙｎｄｉ＋１（Ｓｙｍｂｏｌｋ（ｒｉ＋１））＋０＋Ｓｙｎｄｉ−１（Ｓｙｍｂｏｌｋ（ｒｉ−１））＋・・・＋Ｓｙｎｄ１（Ｓｙｍｂｏｌｋ（ｒ１））＋Ｓｙｎｄ０（Ｓｙｍｂｏｌｋ（ｒ０））
すなわち、相殺Ｃ２シンドロームＣａｎＳｙｎｄｋを生成する多項式は、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋを生成するシンドローム多項式から、訂正対象Ｃ１フレームｒｉに含まれるＣ２シンボルに対応する部分シンドローム多項式Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ｒｉ））をキャンセルすることで得られ、これを用いて相殺Ｃ２シンドロームＣａｎＳｙｎｄｋが得られる。排他的論理和回路４２Ｂは、相殺Ｃ２シンドロームＣａｎＳｙｎｄｋを、セレクタ４４及びＳｙｎｄ_ＢＵＦ２８に転送する。相殺Ｃ２シンドロームＣａｎＳｙｎｄｋの生成及びＳｙｎｄ_ＢＵＦ２８への転送は、当該Ｃ１×Ｃ２フレームの行方向に繰り返される。これにより、Ｓｙｎｄ_ＢＵＦ２８は、当該Ｃ１×Ｃ２フレームを構成する全てのＣ２フレームについての相殺Ｃ２シンドロームＣａｎＳｙｎｄｋの集合である、Ｃ２シンドローム集合ＣａｎＳｙｎｄＧｒｐを格納する。
【０１７７】
セレクタ４４は、プロセッサ１１から送られる選択信号に基づいて、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋと相殺Ｃ２シンドロームＣａｎＳｙｎｄｋとの一方を選択し、選択シンドロームＳｅｌＳｙｎｄｋを出力する。前述のように、セレクタ４４は、通常訂正の場合は完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋを選択し、消失訂正の場合は相殺Ｃ２シンドロームＣａｎＳｙｎｄｋを選択するように制御される。
【０１７８】
なお、一般的に、Ｃ２通常訂正を行う場合は、全てのＣ２シンボルを用いてシンドロームが生成される。一方で、Ｃ２消失訂正を行う場合は、消失扱いとなるＣ２シンボルを除いたＣ２シンボル群を用いて誤り訂正を行われる。本実施形態における相殺Ｃ２シンドロームＣａｎＳｙｎｄｋでは、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋに含まれていた部分シンドローム多項式Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ｒｉ））に対応する部分Ｃ２シンドロームがキャンセルされている。よって、相殺Ｃ２シンドロームＣａｎＳｙｎｄｋを用いることで、Ｃ２消失訂正を行うことが可能となる。
【０１７９】
図２８のステップＳ４０３に示すように、Ｃ２誤り情報生成回路４５は、選択シンドロームＳｅｌＳｙｎｄｋを用いて、Ｃ２誤り情報を生成する。
【０１８０】
Ｃ２デコーダ２６は、Ｃ２訂正アルゴリズムを用いて、訂正対象Ｃ１フレームｒｉに含まれるＣ２シンボルの誤りを訂正する。Ｃ１デコーダ３７は、Ｃ１訂正アルゴリズムを用いて、訂正対象Ｃ１フレームｒｉの誤りを訂正する。Ｃ２モジュール２４は、訂正済みＣ１フレームＣｒｃｔＦｒｍを、ＵＮＣＢＵＦ２７に転送する。
【０１８１】
図２８のステップＳ４０４に示すように、Ｃ２シンドローム生成回路４３Ａは、訂正済みＣ１フレームＣｒｃｔＦｒｍのｋ番目に位置するＣ２シンボルに対応する部分シンドローム多項式Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ＣｒｃｔＦｒｍ））を生成する。Ｃ２シンドローム生成回路４３Ａは、生成した部分シンドローム多項式を用いて更新部分Ｃ２シンドロームPartialSyndNewｋを生成する。排他的論理和回路４３Ｂは、相殺Ｃ２シンドロームＣａｎＳｙｎｄｋと更新部分Ｃ２シンドロームPartialSyndNewｋとを用いて、排他的論理和演算を行う。これにより、排他的論理和回路４３Ｂは、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄｋを生成する。
【０１８２】
更新完全Ｃ２シンドロームＲｅｖＳｙｎｄｋは、以下のようなシンドローム多項式で求められる。
Ｓｋ（ｘ）＝ＳｙｎｄＮ（Ｓｙｍｂｏｌｋ（ｒＮ））＋・・・＋Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ＣｒｃｔＦｒｍ））＋・・・＋Ｓｙｎｄ１（Ｓｙｍｂｏｌｋ（ｒ１））＋Ｓｙｎｄ０（Ｓｙｍｂｏｌｋ（ｒ０））
すなわち、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄｋを生成する多項式は、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋを生成するシンドローム多項式から、訂正対象Ｃ１フレームｒｉのｋ番目に位置するＣ２シンボルに対応する部分シンドローム多項式Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ｒｉ））を、訂正済みＣ１フレームＣｒｃｔＦｒｍのｋ番目に位置するＣ２シンボルに対応するＳｙｎｄｉ（Ｓｙｍｂｏｌｋ（ＣｒｃｔＦｒｍ））に置き換えることで得られ、これを用いて更新完全Ｃ２シンドロームＲｅｖＳｙｎｄｋが得られる。これにより、Ｃ２シンドロームの信頼性が向上する。すなわち、完全Ｃ２シンドローム集合が更新されたことにより、当初の訂正対象Ｃ１フレームｒｉ以外のＣ１フレームも訂正可能になる可能性がある。
【０１８３】
排他的論理和回路４３Ｂは、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄｋを、Ｓｙｎｄ_ＢＵＦ２８に転送する。更新完全Ｃ２シンドロームＲｅｖＳｙｎｄｋの生成及びＳｙｎｄ_ＢＵＦ２８への転送は、ＵＮＣＢＵＦ２７内の訂正対象Ｃ１フレームのそれぞれに含まれる各Ｃ２シンボルについて、Ｃ１×Ｃ２フレームの行方向に繰り返し実行される。これにより、Ｓｙｎｄ_ＢＵＦ２８は、当該Ｃ１×Ｃ２フレームを構成する全てのＣ２フレームについての更新完全Ｃ２シンドロームＲｅｖＳｙｎｄｋの集合である、Ｃ２シンドローム集合ＲｅｖＳｙｎｄＧｒｐを格納する。
【０１８４】
［１−９］  第１実施形態の効果
以上詳述したように第１実施形態では、Ｃ１符号及びＣ２符号による積符号を用いた誤り訂正において、Ｃ１訂正とＣ２訂正とを繰り返す反復訂正が行われる。Ｃ２符号は、線型符号で構成される。そして、線型符号の線型性という特性を利用して、反復訂正を行いながら、Ｃ２シンドロームが部分的に更新されるようにしている。さらに、順次更新されたＣ２シンドロームを用いて、反復訂正が行われるようにしている。
【０１８５】
第１実施形態によれば、Ｃ２シンドロームの再生成にＣ１×Ｃ２フレーム全体は必要なく、必要最小限のデータでＣ２シンドロームを再生成できる。これにより、誤り訂正の手順を簡略化することができる。また、反復訂正の途中で随時、Ｃ２シンドロームが、訂正後のデータを用いて更新される。これにより、Ｃ２シンドロームの信頼性が向上し、誤り訂正能力を向上できる。結果として、メモリシステムの信頼性を向上させることが可能となる。
【０１８６】
第１実施形態によれば、訂正対象であるＣ１×Ｃ２フレームを不揮発性メモリ（例えばＮＡＮＤ型フラッシュメモリ３）から読み出した後に、Ｃ２シンドロームを生成する。そして、このＣ２シンドロームを更新しながら、反復訂正を行うようにしている。すなわち、訂正対象であるＣ１×Ｃ２フレームを不揮発性メモリから１回読み出すだけで、その後、反復訂正を行うことができる。これにより、不揮発性メモリへのアクセス数を低減できる。また、生成したＣ２シンドロームが、訂正が進むにつれて更新され、このとき不揮発性メモリへアクセスする必要がない。
【０１８７】
第１実施形態によれば、反復訂正時、バスを介したデータ転送が発生しない。すなわち、メモリコントローラ４は訂正対象データ（すなわち、訂正不能と判定されたＣ１フレーム）を格納するデータバッファ（ＵＮＣＢＵＦ）２７を備え、ＵＮＣＢＵＦ２７は、Ｃ２モジュール２４にバス（例えばＮＡＮＤ型フラッシュメモリ３とＤＢＵＦ１４とを接続するバス）を介さずに接続される。よって、反復訂正時にバスを介したデータ転送が発生しない。これにより、訂正処理にかかる時間が短縮でき、またファームウェア手順を簡略化できる。
【０１８８】
第１実施形態によれば、メモリコントローラ４はＣ２シンドローム集合を格納するシンドロームバッファ（Ｓｙｎｄ_ＢＵＦ）２８を備える。Ｓｙｎｄ_ＢＵＦ２８は、Ｃ２モジュール２４にバス（例えばＮＡＮＤ型フラッシュメモリ３とＤＢＵＦ１４とを接続するバス）を介さずに接続される。Ｃ２通常訂正を行う際には、Ｓｙｎｄ_ＢＵＦ２８から読み出したＣ２シンドロームが用いられる。一方、訂正対象データに対応した部分シンドロームがキャンセルされた相殺Ｃ２シンドロームが生成され、この相殺Ｃ２シンドロームがＣ２消失訂正で使用される。このため、Ｃ２通常訂正とＣ２消失訂正との切り替え時にＣ２シンドロームを再生成する必要がない。この結果、Ｃ２通常訂正とＣ２消失訂正とを容易に切り替えることができる。
【０１８９】
［２］  第２実施形態
第２実施形態では、あるＣ１×Ｃ２フレームの訂正処理における最後のＣ２消失訂正の後、Ｃ１デコーダ３７によるＣ１訂正、及びＣ２シンドロームの再生成（すなわち、更新完全Ｃ２シンドロームの生成）を省略する。これにより、訂正処理にかかる時間を短縮するようにしている。
【０１９０】
［２−１］  Ｃ２モジュール２４の構成
図２９は、第２実施形態に係るＣ２モジュール２４のブロック図である。第２実施形態に係るＣ２モジュール２４には、第１実施形態に比べて、Ｃ２デコーダ２６からＵＮＣＢＵＦ２７へのデータパスが追加されている。すなわち、訂正処理に時間のかかるＣ１デコーダ３７をバイパスする経路が付加的に設けられている。
【０１９１】
本実施形態のＣ２モジュール２４は、第１実施形態のＣ２モジュール２４に含まれる要素に加えて、セレクタ４６を備える。セレクタ４６の第１入力端子は、Ｃ２デコーダ２６の出力に接続される。セレクタ４６の第２入力端子は、Ｃ１デコーダ３７の出力に接続される。セレクタ４６の出力端子は、ＵＮＣＢＵＦ２７に接続される。セレクタ４６は、Ｃ２デコーダ２６によってＣ２訂正されたＣ２シンボルを含むＣ１フレームと、Ｃ１デコーダ３７によってＣ１訂正されたＣ１フレームとの一方を、ＵＮＣＢＵＦ２７に転送する。セレクタ４６の選択動作は、Ｃ２モジュール２４内でセレクタ４６に送られる制御信号によって制御される。
【０１９２】
［２−２］  誤り訂正動作
以下に、誤り訂正動作について説明する。誤り訂正の対象はＣ１×Ｃ２フレームである。  
（第１例）
図３０は、本実施形態に係るＣ１訂正及びＣ２訂正による誤り訂正の一例（第１例）を説明する図である。第１例は、誤りが比較的少ない例を示している。
【０１９３】
Ｃ１モジュール２０は、Ｃ１フレームに対して誤り訂正を行う（図３０の「Ｃ１訂正」）。ＣＲＣ回路２３は、Ｃ１フレームに対してＣＲＣ検証を行う。
【０１９４】
Ｃ１訂正の結果、“（Ｃ１×Ｃ２フレーム中の訂正不能なＣ１フレーム数）≦（Ｃ２消失訂正が可能なシンボル数）”の条件を満たす場合、Ｃ２デコーダ２６は、訂正不能なＣ１フレームに含まれる誤りシンボルを消失扱いにしてＣ２消失訂正を行う（図３０の「Ｃ２消失訂正」）。本実施形態では、例えば、Ｃ２消失訂正が可能なシンボル数は２である。
【０１９５】
その後、Ｃ２モジュール２４は、訂正処理を終了する。すなわち、セレクタ４６は、Ｃ２デコーダ２６によってＣ２消失訂正されたＣ２シンボルを含むＣ１フレームをＵＮＣＢＵＦ２７に転送する。また、Ｃ１デコーダ３７は、訂正処理を行わず、シンドローム更新回路４３も、Ｃ２シンドローム更新動作を行わない。すなわち、Ｃ２消失訂正の後、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄは生成されない。
【０１９６】
図３１は、本実施形態の第１例に係る誤り訂正の流れを説明する図である。図３１において、Ｃ１モジュール２０に含まれるＣ１デコーダ２２を“Ｃ１  ｄｅｃ１”と表記し、Ｃ２モジュール２４に含まれるＣ１デコーダ３７を“Ｃ１  ｄｅｃ２”と表記している。
【０１９７】
第１実施形態では、Ｃ２消失訂正の後、Ｃ１デコーダ３７によるＣ１訂正処理が行われる。さらに、Ｃ２消失訂正の後、シンドローム更新回路４３による更新完全Ｃ２シンドロームＲｅｖＳｙｎｄの生成が行われる。そして、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄがＳｙｎｄ_ＢＵＦ２８に格納される。
【０１９８】
一方、第２実施形態では、Ｃ２消失訂正の後、訂正処理が終了する。すなわち、第１実施形態に示したＣ１デコーダ３７によるＣ１訂正、及び更新完全Ｃ２シンドロームＲｅｖＳｙｎｄの生成が省略される。
【０１９９】
（第２例）
図３２は、本実施形態に係るＣ１訂正及びＣ２訂正による誤り訂正の他の一例（第２例）を説明する図である。第２例は、誤りが比較的多い例を示している。
【０２００】
Ｃ１モジュール２０は、Ｃ１フレームに対して誤り訂正を行う（図３２の「Ｃ１訂正」）。ＣＲＣ回路２３は、Ｃ１フレームに対してＣＲＣ検証を行う。
【０２０１】
Ｃ１訂正の結果、“（Ｃ１×Ｃ２フレーム中の訂正不能なＣ１フレーム数）≦（Ｃ２消失訂正が可能なシンボル数）”の条件を満たさないので、Ｃ２デコーダ２６及びＣ１デコーダ３７は、反復訂正を行う（図３２の「反復訂正」）。
【０２０２】
本例では、反復訂正の後、“（Ｃ１×Ｃ２フレーム中の訂正不能なＣ１フレーム数）≦（Ｃ２消失訂正が可能なシンボル数）”の条件を満たしたものとする。よって、Ｃ２デコーダ２６は、訂正不能なＣ１フレームに含まれる誤りシンボルを消失扱いにして誤り訂正を行う（図３２の「Ｃ２消失訂正」）。その後、Ｃ２モジュール２４は、訂正処理を終了する。
【０２０３】
図３３は、本実施形態の第２例に係る誤り訂正の流れを説明する図である。第１実施形態では、反復訂正が行われた後、Ｃ２消失訂正が行われる。その後、Ｃ１デコーダ３７によるＣ１訂正が行われ、さらに、シンドローム更新回路４３による更新完全Ｃ２シンドロームＲｅｖＳｙｎｄの生成が行われる。
【０２０４】
一方、第２実施形態では、Ｃ２消失訂正の後、訂正処理が終了する。すなわち、第１実施形態に示したＣ１デコーダ３７によるＣ１訂正、及び更新完全Ｃ２シンドロームＲｅｖｐＳｙｎｄの生成が省略される。
【０２０５】
［２−３］  第２実施形態の効果
積符号を用いた誤り訂正を行う場合、Ｃ２符号の誤り訂正能力に比べて、Ｃ１符号の誤り訂正能力を高くしておくことが多い。このような符号構成では、不揮発性メモリが劣化していない初期状態では、Ｃ１訂正のみで誤り訂正可能な場合が多い。またそうでない場合でも、“（Ｃ１×Ｃ２フレーム中の訂正不能なＣ１フレーム数）≦（Ｃ２消失訂正が可能なシンボル数）”の条件を満たしていることが多い。このため、Ｃ２訂正については、Ｃ２消失訂正を１回行うだけで十分な場合が多い。
【０２０６】
また、不揮発性メモリが劣化してきて、Ｃ１×Ｃ２フレームに対して反復訂正を適用する場合でも、反復訂正アルゴリズムでは最後の１回のＣ２訂正としてＣ２消失訂正が適用される場合が多い。
【０２０７】
このような場合、Ｃ２消失訂正後は、消失扱いされたＣ２シンボルで構成されるＣ１フレームは、訂正済みのクリーンデータ（すなわち、誤りが無いデータ）であることが保障されているので、Ｃ２消失訂正後にＣ１訂正を適用する必要はない。
【０２０８】
第２実施形態によれば、Ｃ２消失訂正した後のＣ１訂正を省略でき、またＣ１訂正後の完全Ｃ２シンドロームの更新が不要になる。これにより、訂正処理にかかる時間を短縮できる。特に、Ｃ１符号は誤り訂正能力が高いことに伴い処理時間が長いので、Ｃ１訂正の省略に伴う処理時間の短縮効果は大きい。
【０２０９】
［３］  第３実施形態
第３実施形態に係るメモリシステムは、３個のシンドロームバッファを備える。第１のシンドロームバッファは、反復訂正の対象であるＣ１×Ｃ２フレーム中の、ある列に位置するＣ２フレームについての完全Ｃ２シンドロームを保持する。第２のシンドロームバッファは、当該Ｃ２フレームについての、反復訂正前の累積部分Ｃ２シンドローム（以下、累積相殺部分Ｃ２シンドロームとも称される）を保持する。第３のシンドロームバッファは、当該Ｃ２フレームについての、反復訂正において誤り訂正された後の累積部分Ｃ２シンドローム（以下、累積更新部分Ｃ２シンドロームとも称される）を保持する。そして、完全Ｃ２シンドロームを用いて、複数のＣ１フレームをパイプライン動作で誤り訂正するようにしている。
【０２１０】
以下では、反復訂正の対象であるＣ１×Ｃ２フレーム中の、ある列に位置するＣ２フレームについての説明を行う。以下で説明される処理は、反復訂正の対象であるＣ１×Ｃ２フレーム中の全ての列のＣ２フレームについて適用される。
【０２１１】
［３−１］  シンドローム更新用の回路構成
図３４Ａ及び図３４Ｂは、第３実施形態に係るＣ２モジュール２４及びＳｙｎｄ_ＢＵＦ２８のブロック図である。Ｃ２モジュール２４は、Ｃ２シンドローム生成回路４１、シンドロームキャンセル回路４２、シンドローム更新回路４３、シンドローム併合回路４７、Ｃ２デコーダ２６、及びＣ１デコーダ３７を備える。Ｃ２デコーダ２６、及びＣ１デコーダ３７の機能は、図２５を参照して説明した第１実施形態と同じである。
【０２１２】
第３実施形態に係るＣ２モジュール２４は、第１実施形態に比べて、シンドロームキャンセル回路４２内の排他的論理和回路４２Ｃ、シンドローム更新回路４３内の排他的論理和回路４３Ｃ、及びシンドローム併合回路４７を備える点で異なる。また、第３実施形態に係るＳｙｎｄ＿ＢＵＦ２８は、相殺部分シンドロームバッファ（PartialSyndOld_BUF）２８Ａ、完全シンドロームバッファ（ＣｏｍｐＳｙｎｄ_ＢＵＦ）２８Ｂ、及び更新部分シンドロームバッファ（PartialSyndNew_BUF）２８Ｃを備える。
【０２１３】
図３４Ａに示すように、Ｃ２モジュール２４は、ＵＮＣＢＵＦ２７、及びＳｙｎｄ_ＢＵＦ２８に接続される。なお、Ｓｙｎｄ_ＢＵＦ２８用のインターフェース回路３２、及びＵＮＣＢＵＦ２７用のインターフェース回路３３の図示は省略されている。
【０２１４】
ＵＮＣＢＵＦ２７は、Ｃ１訂正により訂正不能であったＣ１フレームを格納する。図３４Ａの例では、ＵＮＣＢＵＦ２７は、訂正不能なｊ個のＣ１フレームＵｎｃＦｒｍ１〜ＵｎｃＦｒｍ（ｊ）を格納している。
【０２１５】
Ｃ２シンドローム生成回路４２Ａは、ＵＮＣＢＵＦ２７から訂正対象Ｃ１フレームＵｎｃＦｒｍを読み出す。訂正対象Ｃ１フレームＵｎｃＦｒｍは、訂正不能なＣ１フレームＵｎｃＦｒｍ１〜ＵｎｃＦｒｍ（ｊ）のいずれか１つである。訂正対象Ｃ１フレームＵｎｃＦｒｍは、ここでは例えばＵｎｃＦｒｍ１であるとする。Ｃ２シンドローム生成回路４２Ａは、訂正対象Ｃ１フレームＵｎｃＦｒｍ１中のＣ２シンボルＵｎｃＤａｔから、部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（ＵｎｃＦｒｍ１））を生成する。Ｃ２シンボルＵｎｃＤａｔは、反復訂正の対象であるＣ１×Ｃ２フレーム中の、ある列（ｋ列目とする）に位置するＣ２フレームを構成するＣ２シンボルのうち、訂正対象Ｃ１フレームＵｎｃＦｒｍ１に含まれるＣ２シンボルである。部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（ＵｎｃＦｒｍ１））は、相殺部分シンドロームバッファ２８Ａに格納される。
【０２１６】
Ｃ２シンドローム生成回路４２Ａは、次の訂正対象Ｃ１フレームＵｎｃＦｒｍをＵＮＣＢＵＦ２７から受ける。次の訂正対象Ｃ１フレームＵｎｃＦｒｍは、ここでは例えばＵｎｃＦｒｍ２であるとする。Ｃ２シンドローム生成回路４２Ａは、訂正対象Ｃ１フレームＵｎｃＦｒｍ２中の、ｋ番目のＣ２シンボルＵｎｃＤａｔから、部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（ＵｎｃＦｒｍ２））を生成する。排他的論理和回路４２Ｃは、相殺部分シンドロームバッファ２８Ａから部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（ＵｎｃＦｒｍ１））を受ける。排他的論理和回路４２Ｃは、部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（ＵｎｃＦｒｍ１））と部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（ＵｎｃＦｒｍ２））とを用いて、排他的論理和演算を行う。この排他的論理和演算により、累積相殺部分Ｃ２シンドロームAccPartialSyndOldが得られる。累積相殺部分Ｃ２シンドロームAccPartialSyndOldは、相殺部分シンドロームバッファ２８Ａに格納される。
【０２１７】
以下同様に、Ｃ２シンドローム生成回路４２Ａは、反復訂正の対象であるＣ１×Ｃ２フレーム中の、ｋ列目に位置するＣ２フレームに対し、全ての訂正対象Ｃ１フレームＵｎｃＦｒｍに含まれるＣ２シンボルについての部分Ｃ２シンドロームPartialSyndOldを累積加算する。これにより、ｋ列目のＣ２フレームに対する累積相殺部分Ｃ２シンドロームAccPartialSyndOldが得られる。
【０２１８】
排他的論理和回路４２Ｂは、Ｃ２シンドローム生成回路４２Ａから、訂正対象Ｃ１フレームＵｎｃＦｒｍ中のｋ番目のＣ２シンボルについての部分Ｃ２シンドロームPartialSyndOldを受ける。また、排他的論理和回路４２Ｂは、完全シンドロームバッファ２８Ｂに格納されている完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐのうち、ｋ列目のＣ２フレームに対応する完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを受ける。排他的論理和回路４２Ｂは、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄと部分Ｃ２シンドロームPartialSyndOldとを用いて、排他的論理和演算を行う。この排他的論理輪演算の結果、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄのうち、訂正対象Ｃ１フレームＵｎｃＦｒｍに含まれるｋ番目のＣ２シンボルに対応する部分はゼロになる。この排他的論理和演算により、ｋ列目のＣ２フレームに対応する相殺Ｃ２シンドロームＣａｎＳｙｎｄが得られる。排他的論理和回路４２Ｂは、相殺Ｃ２シンドロームＣａｎＳｙｎｄを出力する。相殺Ｃ２シンドロームＣａｎＳｙｎｄは、セレクタ４４へ送られる。
【０２１９】
セレクタ４４は、完全シンドロームバッファ２８Ｂからｋ列目のＣ２フレームに対応する完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを受け、シンドロームキャンセル回路４２からｋ列目のＣ２フレームに対応する相殺Ｃ２シンドロームＣａｎＳｙｎｄを受ける。Ｃ２モジュール２４は、Ｃ２訂正を通常訂正で行うか消失訂正で行うかに応じて、セレクタ４４で、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄと相殺Ｃ２シンドロームＣａｎＳｙｎｄとの一方を選択する。セレクタ４４は、通常訂正の場合は完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを選択し、消失訂正の場合は相殺Ｃ２シンドロームＣａｎＳｙｎｄを選択する。セレクタ４４は、選択結果として、選択シンドロームＳｅｌＳｙｎｄを出力する。
【０２２０】
Ｃ２誤り情報生成回路４５は、セレクタ４４から選択シンドロームＳｅｌＳｙｎｄを受ける。Ｃ２誤り情報生成回路４５は、選択シンドロームＳｅｌＳｙｎｄを用いて、Ｃ２符号に基づく誤り情報（error info）を生成する。誤り情報の内容は、図５を参照して前述した通りである。
【０２２１】
Ｃ２デコーダ２６は、ＵＮＣＢＵＦ２７から読み出した訂正対象Ｃ１フレームＵｎｃＦｒｍ中のｋ番目のＣ２シンボルと、Ｃ２誤り情報生成回路４５からの当該Ｃ２シンボルに対応する誤り情報とを用いて、当該Ｃ２シンボル対するＣ２訂正を行う。
【０２２２】
Ｃ１デコーダ３７は、訂正対象Ｃ１フレームＵｎｃＦｒｍに対するＣ１訂正を行う。Ｃ１デコーダ３７は、訂正済みＣ１フレームＣｒｃｔＦｒｍを出力する。なお、Ｃ１デコーダ３７によるＣ１訂正の後にＣＲＣ回路３８によるＣＲＣ検証が行われるが、ＣＲＣ回路３８の図示は省略されている。
【０２２３】
Ｃ２シンドローム更新回路４３は、訂正済みＣ１フレームＣｒｃｔＦｒｍをＣ１デコーダ３７から受ける。訂正済みＣ１フレームＣｒｃｔＦｒｍは、訂正不能なＣ１フレームＵｎｃＦｒｍ１〜ＵｎｃＦｒｍ（ｊ）のいずれかがＣ２デコーダ２６及びＣ１デコーダ３７により誤り訂正されたものである。訂正済みＣ１フレームＣｒｃｔＦｒｍは、ここでは例えばＵｎｃＦｒｍ１が誤り訂正されたものであるとする。Ｃ２シンドローム生成回路４３Ａは、訂正済みＣ１フレームＣｒｃｔＦｒｍ中のｋ番目のＣ２シンボルＣｒｃｔＤａｔについての部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（ＵｎｃＦｒｍ１））を生成する。部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（ＵｎｃＦｒｍ１））は、更新部分シンドロームバッファ２８Ｃに格納される。
【０２２４】
Ｃ２シンドローム更新回路４３は、次の訂正済みＣ１フレームＣｒｃｔＦｒｍを、Ｃ１デコーダ３７から受ける。次の訂正済みＣ１フレームＵｎｃＦｒｍは、ここでは例えばＵｎｃＦｒｍ２が誤り訂正されたものであるとする。Ｃ２シンドローム生成回路４３Ａは、訂正済みＣ１フレームＣｒｃｔＦｒｍ中のｋ番目のＣ２シンボルＣｒｃｔＤａｔについての部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（ＵｎｃＦｒｍ２））を生成する。排他的論理和回路４３Ｃは、更新部分シンドロームバッファ２８Ｃから部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（ＵｎｃＦｒｍ１））を受ける。排他的論理和回路４３Ｃは、部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（ＵｎｃＦｒｍ１））と部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（ＵｎｃＦｒｍ２））とを用いて、排他的論理和演算を行う。この排他的論理和演算により、累積更新部分Ｃ２シンドロームAccPartialSyndNewが得られる。累積更新部分Ｃ２シンドロームAccPartialSyndNewは、更新部分シンドロームバッファ２８Ｃに格納される。
【０２２５】
以下同様に、Ｃ２シンドローム生成回路４３Ａは、反復訂正の対象であるＣ１×Ｃ２フレーム中の、ｋ列目に位置するＣ２フレームに対し、全ての訂正済みＣ１フレームＣｒｃｔＦｒｍに含まれるＣ２シンボルについての部分Ｃ２シンドロームPartialSyndNewを累積加算する。これにより、ｋ列目のＣ２フレームに対する累積更新部分Ｃ２シンドロームAccPartialSyndNewが得られる。
【０２２６】
シンドローム併合回路４７については後述する。
【０２２７】
図３４Ｂに説明を移す。ＵＮＣＢＵＦ２７は、反復訂正の対象であるＣ１×Ｃ２フレーム中の５つの訂正対象Ｃ１フレームＦｒｍ１〜Ｆｒｍ５を保持しているものとする。
【０２２８】
Ｃ２シンドローム生成回路４１は、スヌープ動作により受信するＣ１×Ｃ２フレーム（訂正対象Ｃ１フレームＦｒｍ１〜Ｆｒｍ５を含む）中の、ｋ列目に位置するＣ２フレームについての完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを生成する。
【０２２９】
相殺部分シンドロームバッファ２８Ａは、シンドロームキャンセル回路４２から、ｋ列目のＣ２フレームについての累積相殺部分Ｃ２シンドロームAccPartialSyndOldを受け、これを一時的に格納する。図３４Ｂの例では、相殺部分シンドロームバッファ２８Ａは、５つの部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ１））〜PartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ５））が累積加算されて得られた累積相殺部分Ｃ２シンドロームAccPartialSyndOldを保持している。
【０２３０】
完全シンドロームバッファ２８Ｂは、Ｃ２シンドローム生成回路４１から、ｋ列目のＣ２フレームについての完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを受け、これを一時的に格納する。また、完全シンドロームバッファ２８Ｂは、シンドローム併合回路４７から後述のマージによって得られるｋ列目のＣ２フレームについての完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを受け、これを一時的に格納する。
【０２３１】
更新部分シンドロームバッファ２８Ｃは、シンドローム更新回路４３から、当該Ｃ２フレームについての累積更新部分Ｃ２シンドロームAccPartialSyndNewを受け、これを一時的に格納する。図３４Ｂの例では、更新部分シンドロームバッファ２８Ｃは、５つの部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（Ｆｒｍ１））〜PartialSyndNew（ＣｒｃｔＤａｔ（Ｆｒｍ５））が累積加算されて得られた累積更新部分Ｃ２シンドロームAccPartialSyndNewを保持している。
【０２３２】
シンドローム併合回路４７は、排他的論理和回路（図示せず）を含む。シンドローム併合回路４７は、相殺部分シンドロームバッファ２８Ａに格納された累積相殺部分Ｃ２シンドロームAccPartialSyndOld、更新部分シンドロームバッファ２８Ｃに格納された累積更新部分Ｃ２シンドロームAccPartialSyndNew、及び完全シンドロームバッファ２８Ｂに格納された完全Ｃ２シンドロームＣｏｍｐＳｙｎｄに対し排他的論理和演算を行う。この排他的論理和演算により、累積相殺部分Ｃ２シンドローム、累積更新部分Ｃ２シンドローム、完全Ｃ２シンドロームがマージされ、新たな完全Ｃ２シンドロームが得られる。シンドローム併合回路４７は、得られた新たな完全Ｃ２シンドロームを完全シンドロームバッファ２８Ｂに書き戻す。
【０２３３】
［３−２］  シンドローム更新動作
図３５Ａ、図３５Ｂ、図３６及び図３７は、本実施形態に係る誤り訂正動作を説明する図である。ＵＮＣＢＵＦ２７は、Ｃ１訂正不能であった反復訂正の対象であるＣ１フレームＦｒｍ１〜Ｆｒｍ５を格納しているものとする。
【０２３４】
図３５Ａ及び図３６に示すように、シンドロームキャンセル回路４２は、Ｃ２シンドローム生成回路４２Ａ（図３４Ａ参照）を用いて、反復訂正による誤り訂正前のＣ１フレームＦｒｍ１に含まれるＣ２シンボルＵｎｃＤａｔについての部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ１））を生成する。シンドロームキャンセル回路４２は、生成された部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ１））を相殺部分シンドロームバッファ２８Ａに格納する。
【０２３５】
シンドロームキャンセル回路４２は、反復訂正による誤り訂正前のＣ１フレームＦｒｍ２に含まれるＣ２シンボルＵｎｃＤａｔについての部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ２））を生成する。次いで、シンドロームキャンセル回路４２は、生成された部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ２））と、相殺部分シンドロームバッファ２８Ａに格納されている部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ１））から、累積相殺部分Ｃ２シンドロームAccPartialSyndOldを生成し、相殺部分シンドロームバッファ２８Ａに格納する。同様にシンドロームキャンセル回路４２は、反復訂正による誤り訂正前のＣ１フレームＦｒｍ３〜Ｆｒｍ５に含まれるＣ２シンボルＵｎｃＤａｔについての部分Ｃ２シンドロームPartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ３））〜PartialSyndOld（ＵｎｃＤａｔ（Ｆｒｍ５））を用いて累積相殺部分Ｃ２シンドロームAccPartialSyndOldを生成し、相殺部分シンドロームバッファ２８Ａに格納する。
【０２３６】
Ｃ２デコーダ２６は、完全シンドロームバッファ２８Ｂに格納されている完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを用いてＣ１フレームＦｒｍ１〜Ｆｒｍ５に含まれるＣ２シンボルの誤りを訂正する。Ｃ１デコーダ３７は、Ｃ２デコーダ２６により誤りが訂正されたＣ１フレームＦｒｍ１に対して、Ｃ１訂正を行う。シンドローム更新回路４３内のＣ２シンドローム生成回路４３Ａ（図３４Ａ参照）は、Ｃ１訂正後のＣ１フレームＦｒｍ１に含まれるＣ２シンボルＣｒｃｔＤａｔについての部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（Ｆｒｍ１））を生成し、更新部分シンドロームバッファ２８Ｃに格納する。図３５Ａに示す時刻Ｔ１は、ここまでの処理が完了した時刻である。図３６は時刻Ｔ１におけるＳｙｎｄ_ＢＵＦ２８の状態を示している。
【０２３７】
次に、Ｃ１デコーダ３７は、Ｃ２デコーダ２６により誤りが訂正されたＣ１フレームＦｒｍ２に対して、Ｃ１訂正を行う。シンドローム更新回路４３は、Ｃ１訂正後のＣ１フレームＦｒｍ２に含まれるＣ２シンボルＣｒｃｔＤａｔについての部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（Ｆｒｍ２））を生成する。次いで、シンドローム更新回路４３は、生成された部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（Ｆｒｍ２））と、更新部分シンドロームバッファ２８Ｃに格納されている部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（Ｆｒｍ１））から、累積更新部分Ｃ２シンドロームAccPartialSyndNewを生成し、更新部分シンドロームバッファ２８Ｃに格納する。
【０２３８】
同様にＣ１デコーダ３７は、Ｃ２デコーダ２６により誤りが訂正されたＣ１フレームＦｒｍ３〜Ｆｒｍ５の各々に対してＣ１訂正を行う。次いでシンドローム更新回路４３はＣ１訂正後のＣ１フレームＦｒｍ３〜Ｆｒｍ５に含まれるＣ２シンボルＣｒｃｔＤａｔについての部分Ｃ２シンドロームPartialSyndNew（ＣｒｃｔＤａｔ（Ｆｒｍ３））〜PartialSyndNew（ＣｒｃｔＤａｔ（Ｆｒｍ５））を用いて累積更新部分Ｃ２シンドロームAccPartialSyndNewを生成し、更新部分シンドロームバッファ２８Ｃに格納する。図３５Ｂに示す時刻Ｔ２は、ここまでの処理が完了した時刻である。図３７は時刻Ｔ２におけるＳｙｎｄ_ＢＵＦ２８の状態を示している。
【０２３９】
図３５Ｂ及び図３７に示すように、Ｃ２モジュール２４は、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄ、累積相殺部分Ｃ２シンドロームAccPartialSyndOld、及び累積更新部分Ｃ２シンドロームAccPartialSyndNewを、Ｓｙｎｄ_ＢＵＦ２８からシンドローム併合回路４７に転送する。シンドローム併合回路４７は、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄ、累積相殺部分Ｃ２シンドロームAccPartialSyndOld、及び累積更新部分Ｃ２シンドロームAccPartialSyndNewの排他的論理和演算を行い、これらをマージする。こうして、マージされた完全Ｃ２シンドロームＣｏｍｐＳｙｎｄが得られる。マージ後の完全Ｃ２シンドロームＣｏｍｐＳｙｎｄは、訂正前のＣ１フレームＦｒｍ１〜Ｆｒｍ５に含まれるＣ２シンボルに代えて、Ｃ２訂正及びＣ１訂正が行われた後のＣ１フレームＦｒｍ１〜Ｆｒｍ５に含まれるＣ２シンボルを用いることで得られる完全シンドロームＣｏｍｐＳｙｎｄと同じものである。
【０２４０】
Ｃ２モジュール２４は、マージされた完全シンドロームＣｏｍｐＳｙｎｄを、完全シンドロームバッファ２８Ｂに転送する。完全シンドロームバッファ２８Ｂは、マージされた完全シンドロームＣｏｍｐＳｙｎｄ格納する。マージされた完全シンドロームＣｏｍｐＳｙｎｄは、ＵＮＣＢＵＦ２７に格納されている誤り訂正されたＣ１フレームと整合性が取れている。すなわち、上記のように、誤り訂正前のＣ１フレームＦｒｍ１〜Ｆｒｍ５に含まれるＣ２シンボルに代えて、誤り訂正されたＣ１フレームＦｒｍ１〜Ｆｒｍ５に含まれるＣ２シンボルを用いることで得られる完全シンドロームＣｏｍｐＳｙｎｄと同じものである。
【０２４１】
このように、Ｃ１フレームＦｒｍ１〜Ｆｒｍ５に対する反復訂正の間、完全シンドロームバッファ２８Ｂは完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを保持し続ける。このため、Ｃ１フレームＦｒｍ１〜Ｆｒｍ５に含まれるＣ２シンボルに対して、常時、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを用いた訂正処理が可能である。
【０２４２】
［３−３］  シンドローム更新動作の詳細
次に、Ｃ２シンドローム更新動作の詳細について説明する。図３８乃至図４０は、本実施形態に係るＣ２シンドローム更新動作を説明する図である。Ｃ２シンドローム更新動作は、図３８乃至図４０に示したステップＳ４００Ａ〜Ｓ４０５Ａの順に行われる。
【０２４３】
まず、反復訂正の準備について説明する。図３８に示す完全シンドロームＣｏｍｐＳｙｎｄｋの生成動作は、図２６を参照して説明した第１実施形態と同様である。Ｃ２シンドローム生成回路４１は、生成された完全シンドロームＣｏｍｐＳｙｎｄｋを、完全シンドロームバッファ２８Ｂに転送する。完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋの生成及び完全シンドロームバッファ２８Ｂへの転送は、当該Ｃ１×Ｃ２フレームの行方向に繰り返される。これにより、完全シンドロームバッファ２８Ｂは、当該Ｃ１×Ｃ２フレームを構成する全てのＣ２フレームについての完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋの集合である、完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐを格納する（図３８のステップＳ４００Ａ）。訂正対象Ｃ１フレームｒｉは、図１８に示すＤＭＡＣ１５によってＤＢＵＦ１４からＵＮＣＢＵＦ２７に転送される。
【０２４４】
続いて、反復訂正が行われる。図３９のステップＳ４０１Ａに示すように、Ｃ２モジュール２４は、ＵＮＣＢＵＦ２７から訂正対象Ｃ１フレームｒｉを読み出す。また、Ｃ２モジュール２４は、完全シンドロームバッファ２８Ｂに格納されている完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐのうち、ｋ列目のＣ２フレームに対応する完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋを読み出す。
【０２４５】
図３９のステップＳ４０２Ａに示すように、Ｃ２シンドローム生成回路４２Ａは、訂正対象Ｃ１フレームｒｉ中のｋ番目のＣ２シンボル対して、部分シンドローム多項式Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ｒｉ））を生成し、それを用いて部分Ｃ２シンドロームPartialSyndOldｋを生成する。排他的論理和回路４２Ｂは、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋと部分Ｃ２シンドロームPartialSyndOldｋとを用いて、排他的論理和演算を行う。そこれにより、相殺Ｃ２シンドロームＣａｎＳｙｎｄｋが生成される。
【０２４６】
図２７を参照して説明した第１実施形態と同様に、相殺Ｃ２シンドロームＣａｎＳｙｎｄｋは、以下のようなシンドローム多項式で求められる。
Ｓｋ（ｘ）＝ＳｙｎｄＮ（Ｓｙｍｂｏｌｋ（ｒＮ））＋・・・Ｓｙｎｄｉ＋１（Ｓｙｍｂｏｌｋ（ｒｉ＋１））＋０＋Ｓｙｎｄｉ−１（Ｓｙｍｂｏｌｋ（ｒｉ−１））＋・・・＋Ｓｙｎｄ１（Ｓｙｍｂｏｌｋ（ｒ１））＋Ｓｙｎｄ０（Ｓｙｍｂｏｌｋ（ｒ０））
排他的論理和回路４２Ｂは、相殺Ｃ２シンドロームＣａｎＳｙｎｄｋを、セレクタ４４に転送する。
【０２４７】
セレクタ４４は、プロセッサ１１から送られる選択信号に基づいて、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋと相殺Ｃ２シンドロームＣａｎＳｙｎｄｋとの一方を選択し、選択シンドロームＳｅｌＳｙｎｄｋを出力する。前述のように、セレクタ４４は、通常訂正の場合は完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋを選択し、消失訂正の場合は相殺Ｃ２シンドロームＣａｎＳｙｎｄｋを選択するように制御される。
【０２４８】
図３９のステップＳ４０２Ａに示すように、排他的論理和回路４２Ｃは、部分Ｃ２シンドロームPartialSyndOldｋと、相殺部分シンドロームバッファ２８Ａに格納されている累積相殺部分Ｃ２シンドロームAccPartialSyndOldkとを用いて、排他的論理和演算を行う。これにより生成される累積相殺部分Ｃ２シンドロームAccPartialSyndOldkは、相殺部分シンドロームバッファ２８Ａに書き戻される。
【０２４９】
累積相殺部分Ｃ２シンドロームAccPartialSyndOldkの生成及び相殺部分シンドロームバッファ２８Ａへの転送は、ＵＮＣＢＵＦ２７内の訂正対象Ｃ１フレームのそれぞれに含まれる各Ｃ２シンボルについて、Ｃ１×Ｃ２フレームの行方向に繰り返し実行される。
【０２５０】
図４０のステップＳ４０３Ａに示すように、Ｃ２誤り情報生成回路４５は、選択シンドロームＳｅｌＳｙｎｄｋを用いて、Ｃ２誤り情報を生成する。
【０２５１】
Ｃ２デコーダ２６は、Ｃ２訂正アルゴリズムを用いて、訂正対象Ｃ１フレームｒｉに含まれるＣ２シンボルの誤りを訂正する。Ｃ１デコーダ３７は、Ｃ１訂正アルゴリズムを用いて、訂正対象Ｃ１フレームｒｉの誤りを訂正する。Ｃ２モジュール２４は、訂正済みＣ１フレームＣｒｃｔＦｒｍを、ＵＮＣＢＵＦ２７に転送する。
【０２５２】
図４０のステップＳ４０４Ａに示すように、Ｃ２シンドローム生成回路４３Ａは、訂正済みＣ１フレームＣｒｃｔＦｒｍ中のｋ番目のＣ２シンボルに対応する部分シンドローム多項式Ｓｙｎｄｉ（Ｓｙｍｂｏｌｋ（ＣｒｃｔＦｒｍ））を生成し、それを用いて更新部分Ｃ２シンドロームPartialSyndNewｋを生成する。排他的論理和回路４３Ｃは、更新部分Ｃ２シンドロームPartialSyndNewｋと、更新部分シンドロームバッファ２８Ｃに格納されている累積更新部分Ｃ２シンドロームAccPartialSyndNewkとを用いて、排他的論理和演算を行う。これにより生成される累積更新部分Ｃ２シンドロームAccPartialSyndNewkは、更新部分シンドロームバッファ２８Ｃに書き戻される。
【０２５３】
累積更新部分Ｃ２シンドロームAccPartialSyndNewkの生成及び更新部分シンドロームバッファ２８Ｃへの転送は、ＵＮＣＢＵＦ２７内の訂正対象Ｃ１フレームのそれぞれに含まれる各Ｃ２シンボルについて、Ｃ１×Ｃ２フレームの行方向に繰り返し実行される。
【０２５４】
訂正対象Ｃ１フレームのそれぞれに含まれる各Ｃ２シンボルについて、累積相殺部分Ｃ２シンドロームAccPartialSyndOldkと累積更新部分Ｃ２シンドロームAccPartialSyndNewkが生成される。その後、図４０のステップＳ４０５Ａに示すように、シンドローム併合回路４７は、完全シンドロームバッファに格納されている完全シンドロームＣｏｍｐＳｙｎｄｋと、相殺部分シンドロームバッファ２８Ａに格納されている累積相殺部分Ｃ２シンドロームAccPartialSyndOldkと、更新部分シンドロームバッファ２８Ｃに格納されている累積更新部分Ｃ２シンドロームAccPartialSyndNewｋと、を用いて排他的論理演算を行う。これにより、マージされた完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋが得られる。シンドローム併合回路４７は、マージされた完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋを完全シンドロームバッファ２８Ｂに転送する。
【０２５５】
マージされた完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋの生成及び完全シンドロームバッファ２８Ｂへの転送は、ＵＮＣＢＵＦ２７内の訂正対象Ｃ１フレームのそれぞれに含まれる各Ｃ２シンボルについて、Ｃ１×Ｃ２フレームの行方向に繰り返し実行される。これにより、当該Ｃ１×Ｃ２フレームを構成する全てのＣ２フレームについてマージされた完全Ｃ２シンドロームＣｏｍｐＳｙｎｄｋが生成され、その集合である完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐが完全シンドロームバッファ２８Ｂに格納される。
【０２５６】
［３−４］  比較例
次に、比較例について説明する。図４１は、比較例に係る動作を説明する図である。比較例では、Ｓｙｎｄ_ＢＵＦ２８は、相殺部分シンドロームバッファ２８Ａ、完全シンドロームバッファ２８Ｂ、及び更新部分シンドロームバッファ２８Ｃを備えておらず、転送されたシンドロームをその都度保持する。
【０２５７】
シンドロームキャンセル回路４２は、反復訂正による誤り訂正前のＣ１フレームＦｒｍ１に含まれるＣ２シンボルＵｎｃＤａｔについての部分Ｃ２シンドロームと、現在の完全Ｃ２シンドロームＣｏｍｐＳｙｎｄとの排他的論理和演算を行い、得られる相殺Ｃ２シンドロームＣａｎＳｙｎｄ（ＵｎｃＤａｔ（Ｆｒｍ１））をＳｙｎｄ_ＢＵＦ２８に転送する（図４１の（１））。
【０２５８】
この時点で、Ｓｙｎｄ_ＢＵＦ２８が格納しているシンドロームは、Ｃ１フレームＦｒｍ１に対応するＣ２部分シンドロームがキャンセルされた不完全Ｃ２シンドロームである。よって、Ｃ２デコーダ２６は、この不完全Ｃ２シンドロームを用いては、Ｃ１フレームＦｒｍ２に含まれるＣ２シンボルに対するＣ２訂正を行うことができない。
【０２５９】
Ｃ１デコーダ３７は、Ｃ１フレームＦｒｍ１に対して、Ｃ１訂正を行う。シンドローム更新回路４３は、Ｃ１訂正後のＣ１フレームＦｒｍ１に含まれるＣ２シンボルについての部分Ｃ２シンドロームを用いて不完全Ｃ２シンドロームを更新する。更新された不完全Ｃ２シンドロームは、完全Ｃ２シンドロームとなり、Ｓｙｎｄ_ＢＵＦ２８に転送される（図４１の（２））。Ｃ２デコーダ２６は、この完全Ｃ２シンドロームを用いて、次の訂正対象であるＣ１フレームＦｒｍ２に含まれるＣ２シンボルに対するＣ２訂正を行うことができる（図４１の（３））。
【０２６０】
このように、比較例では、Ｓｙｎｄ_ＢＵＦ２８が不完全Ｃ２シンドロームを格納している間、次のＣ１フレームに含まれるＣ２シンボルに対するＣ２訂正を行うことができない。よって、この期間に対応する遅延が発生してしまう。
【０２６１】
［３−５］  第３実施形態の効果
第３実施形態によれば、反復訂正における訂正対象Ｃ１フレームの訂正の間、完全シンドロームバッファ２８Ｂは完全Ｃ２シンドロームを保持し続ける。このため、ある訂正対象Ｃ１フレームに含まれるＣ２シンボル対するＣ２訂正及び当該Ｃ１フレームに対するＣ１訂正の完了前に、次の訂正対象Ｃ１フレームに含まれるＣ２シンボルに対して、完全Ｃ２シンドロームを用いたＣ２訂正を開始することができる。すなわち、ＵＮＣＢＵＦ２７に格納された複数の訂正不能Ｃ１フレームに含まれるＣ２シンボル対してパイプライン動作で誤り訂正を行うことができる。この結果、訂正処理にかかる時間を短縮できる。
【０２６２】
［４］  第４実施形態
第４実施形態は、反復訂正におけるＣ１訂正を行う際に、内部モジュールによる硬判定を用いた誤り訂正と、外部モジュールによる軟判定を用いた誤り訂正の選択ができるようにする。そして、外部モジュールによる軟判定を用いた誤り訂正の際にも、反復訂正の後でシンドロームの整合性が確保されるようにする。
【０２６３】
［４−１］  回路構成
図４２は、第４実施形態に係るメモリシステム２のブロック図である。図４２は、誤り訂正に関連する回路構成を主に示している。
【０２６４】
メモリコントローラ４は、硬判定復号、及び軟判定復号を行うことが可能である。硬判定（ＨＤ：hard decision）は、“０”及び“１”の２値の情報を用いて、データを判定する。軟判定（ＳＤ：soft decision）は、データの確からしさを示す確率、尤度、あるいは対数尤度比（ＬＬＲ：log likelihood ratio）を用いて、データを判定する。軟判定復号は、硬判定復号より誤り訂正能力が高い。しかし、軟判定復号による訂正処理の時間は、硬判定復号による訂正処理の時間より長い。軟判定では、対数尤度比等の付加情報が必要である。
【０２６５】
Ｃ２シンドローム生成部３１及びＣ２デコーダ２６の機能は、前述した通りである。Ｃ１硬判定モジュール（Ｃ１−ＨＤモジュール）２０は、硬判定復号を行う。Ｃ１硬判定デコーダ（Ｃ１−ＨＤデコーダ）３７は、硬判定復号を行う。
【０２６６】
Ｃ２シンドローム生成部３１の構成は、第１実施形態と同じである。すなわち、Ｃ２シンドローム生成部３１は、シンドロームキャンセル回路４２、及びシンドローム更新回路４３を備える。シンドロームキャンセル回路４２、及びシンドローム更新回路４３は、Ｃ１硬判定デコーダ３７による硬判定復号時に、完全Ｃ２シンドロームを更新する。
【０２６７】
メモリコントローラ４は、Ｃ１軟判定デコーダ（Ｃ１−ＳＤデコーダ）５０をさらに備える。
【０２６８】
Ｃ１軟判定デコーダ５０は、Ｃ１符号を用いて、軟判定復号を行う。Ｃ１軟判定デコーダ５０は、Ｃ１フレームを単位として誤り訂正を行う。Ｃ１軟判定デコーダ５０は、バス１７に接続される。Ｃ１軟判定デコーダ５０は、Ｃ２デコーダ２６によって訂正されたＣ２シンボルを含むＣ１フレームを受け、当該Ｃ１フレームに対して誤り訂正を行う。Ｃ１軟判定デコーダ５０によって訂正されたＣ１フレームは、バス１７を介してＣ２モジュール２４に転送され、さらにＵＮＣＢＵＦ２７に転送される。
【０２６９】
Ｃ２モジュール２４は、シンドロームキャンセル回路５１、及びシンドローム更新回路５２をさらに備える。シンドロームキャンセル回路５１の機能及び回路構成は、前述したシンドロームキャンセル回路４２と同じであり、回路を共有しても良い。シンドローム更新回路５２の機能及び回路構成も、前述したシンドローム更新回路４３と同じであり、回路を共有しても良い。
【０２７０】
Ｃ２モジュール２４は、Ｃ２デコーダ２６によって誤りが訂正される前の訂正対象Ｃ１フレームＵｎｃＦｒｍに含まれるＣ２シンボルＵｎｃＤａｔを、ＵＮＣＢＵＦ２８から順次受信する。シンドロームキャンセル回路５１は、Ｓｙｎｄ_ＢＵＦ２８から完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを受信する。シンドロームキャンセル回路５１は、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄから、Ｃ２シンボルＵｎｃＤａｔについての部分Ｃ２シンドロームがキャンセルされた相殺Ｃ２シンドロームＣａｎＳｙｎｄを生成する。相殺Ｃ２シンドロームＣａｎＳｙｎｄは、Ｓｙｎｄ_ＢＵＦ２８に転送される。
【０２７１】
Ｃ２モジュール２４は、Ｃ１軟判定デコーダ５０によって誤りが訂正された訂正対象Ｃ１フレームＣｒｃｔＦｒｍ＿ＳＤに含まれるＣ２シンボルＣｒｃｔＤａｔ＿ＳＤを順次受信する。シンドローム更新回路５２は、Ｓｙｎｄ_ＢＵＦ２８から相殺Ｃ２シンドロームＣａｎＳｙｎｄを受信する。シンドローム更新回路５２は、相殺Ｃ２シンドロームＣａｎＳｙｎｄと、訂正されたＣ２シンボルＣｒｃｔＤａｔ＿ＳＤについての更新部分Ｃ２シンドロームPartialSyndNewとの排他的論理和演算を行うことで、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄを生成する。更新完全Ｃ２シンドロームＲｅｖＳｙｎｄは、Ｓｙｎｄ_ＢＵＦ２８に転送される。
【０２７２】
図４２は、部分Ｃ２シンドロームPartialSyndの組（以下、部分Ｃ２シンドローム集合PartialSyndGrpとも称する）に対する排他的論理和演算によって生成された完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐが、Ｓｙｎｄ＿ＢＵＦ２８に格納されていることを示す。部分Ｃ２シンドローム集合PartialSyndGrpについては、図４４を参照して後述する。
【０２７３】
［４−２］  動作
次に、本実施形態のメモリシステム２の動作について説明する。図４３は、本実施形態に係る誤り訂正動作を説明するフローチャートである。なお、ＵＮＣＢＵＦ２７に訂正対象Ｃ１フレームが格納されているものとする。すなわち、反復訂正用の準備は、第１実施形態と同じである。
【０２７４】
まず、硬判定を用いた反復訂正が行われる。硬判定を用いた反復訂正では、Ｃ２デコーダ２６は、訂正対象Ｃ１フレームに含まれるＣ２シンボルに対するＣ２訂正を行い、Ｃ１硬判定デコーダ３７は、訂正対象Ｃ１フレームに対してＣ１符号の硬判定を用いた誤り訂正（以下、Ｃ１−ＨＤ訂正又は硬判定復号と呼ぶ）を行う（ステップＳ５００）。
【０２７５】
Ｃ２シンドローム生成部３１内のシンドロームキャンセル回路４２及びシンドローム更新回路４３は、Ｃ１−ＨＤ訂正をされた訂正対象Ｃ１フレームに含まれるＣ２シンボルを用いて、完全Ｃ２シンドロームを更新する（ステップＳ５０１）。
【０２７６】
プロセッサ１１は、ＵＮＣＢＵＦ２７内の全ての訂正対象Ｃ１フレームをステップＳ５００での処理によって訂正できたか否かを判定する（ステップＳ５０２）。ＵＮＣＢＵＦ２７内の全ての訂正対象Ｃ１フレームを訂正できた場合（ステップＳ５０２＝Ｙｅｓ）、訂正処理が終了する。
【０２７７】
ＵＮＣＢＵＦ２７内に訂正不能な訂正対象Ｃ１フレームが残っている場合（ステップＳ５０２＝Ｎｏ）、プロセッサ１１は、硬判定を用いた反復訂正の回数が規定回数Ｍ１に達したか否かを判定する（ステップＳ５０３）。反復訂正の回数が規定回数Ｍ１に達していない場合（ステップＳ５０３＝Ｎｏ）、プロセッサ１１は、ステップＳ５００に戻って、硬判定を用いた反復訂正を繰り返す。
【０２７８】
反復訂正の回数が規定回数Ｍ１に達した場合（ステップＳ５０３＝Ｙｅｓ）、以後、軟判定を用いた反復訂正が行われる。軟判定を用いた反復訂正では、Ｃ２デコーダ２６は、訂正対象Ｃ１フレームに含まれるＣ２シンボルに対するＣ２訂正を行い、Ｃ１軟判定デコーダ５０は、訂正対象Ｃ１フレームに対してＣ１符号の軟判定を用いた誤り訂正（以下、Ｃ１−ＳＤ訂正又は軟判定復号と呼ぶ）を行う（ステップＳ５０４）。
【０２７９】
シンドロームキャンセル回路５１及びシンドローム更新回路５２は、Ｃ１−ＳＤ訂正をされた訂正対象Ｃ１フレームに含まれるＣ２シンボルを用いて、完全Ｃ２シンドロームを更新する（ステップＳ５０５）。完全Ｃ２シンドロームを更新する動作には、Ｃ１−ＳＤ訂正される前の訂正対象Ｃ１フレームに含まれるＣ２シンボルを用いた完全Ｃ２シンドロームの部分的なキャンセル動作と、Ｃ１−ＳＤ訂正された訂正対象Ｃ１フレームに含まれるＣ２シンボルを用いた完全Ｃ２シンドロームの部分的な更新動作とが含まれる。
【０２８０】
図４４は、本実施形態に係るＣ２シンドローム集合のデータ構造を説明する図である。反復訂正の対象となるＣ１×Ｃ２フレームは、Ｃ２シンボル番号０〜Ｎに対応する（Ｎ＋１）個のＣ１フレームで構成される。Ｎは例えば２５４である。
【０２８１】
Ｃ１×Ｃ２フレームに対して、Ｃ２シンドローム集合が生成される。Ｃ２シンドローム集合は、（Ｎ＋１）個の部分Ｃ２シンドローム集合を基に構成される。各部分Ｃ２シンドローム集合は、１つのＣ１フレームに含まれるＣ２シンボルの集合に対応する。具体的には、Ｃ２シンボル番号０に対応するＣ１フレームに含まれる複数（例えば４Ｋ＋α個）のＣ２シンボルについてそれぞれ生成される部分Ｃ２シンドロームから、Ｃ２シンボル番号０に対応するＣ１フレームに対応する部分Ｃ２シンドローム集合（PartialSyndGrp(Frm0)）が生成される。同様に、Ｃ２シンボル番号１に対応するＣ１フレームに含まれる複数のＣ２シンボルについてそれぞれ生成される部分Ｃ２シンドロームから、Ｃ２シンボル番号１に対応するＣ１フレームに対応する部分Ｃ２シンドローム集合（PartialSyndGrp(Frm1)）が生成される。Ｃ２シンボル番号Ｎに対応するＣ１フレームに含まれる複数のＣ２シンボルについてそれぞれ生成される部分Ｃ２シンドロームから、Ｃ２シンボル番号Ｎに対応するＣ１フレームに対応する部分Ｃ２シンドローム集合（PartialSyndGrp(FrmN)）が生成される。このように生成された部分Ｃ２シンドローム集合PartialSyndGrp(Frm0)〜PartialSyndGrp(FrmN)に対して排他的論理和演算を行うことで、当該Ｃ１×Ｃ２フレームについての完全Ｃ２シンドローム集合（ＣｏｍｐＳｙｎｄＧｒｐ）が得られる。
【０２８２】
また、第１実施形態において説明したように、完全Ｃ２シンドロームは、Ｃ２フレームごと（すなわちＣ１×Ｃ２フレーム中のＣ２シンボルの列ごと）に生成される。各部分Ｃ２シンドロームのうちのＣ２フレーム番号「３」についての部分Ｃ２シンドロームの組は、破線により囲まれている。破線で囲まれている部分Ｃ２シンドロームの組に対して排他的論理和演算を行うことで、Ｃ２フレーム番号「３」のＣ２フレームについての完全Ｃ２シンドロームＣｏｍｐＳｙｎｄが得られる。
【０２８３】
図４５は、本実施形態に係る軟判定復号における完全Ｃ２シンドロームをキャンセルする動作を説明する図である。ここでは、Ｃ２シンボル番号１に対応するＣ１フレームＦｒｍ１を訂正するものとする。
【０２８４】
シンドロームキャンセル回路５１は、Ｃ２デコーダ２６によって訂正される前のＣ１フレームＦｒｍ１に含まれるＣ２シンボルＵｎｃＤａｔをＵＮＣＢＵＦ２７から受ける。シンドロームキャンセル回路５１は、Ｃ１フレームＦｒｍ１に含まれるＣ２シンボルＵｎｃＤａｔから部分Ｃ２シンドロームPartialSyndOldを生成する。シンドロームキャンセル回路５１は、Ｓｙｎｄ＿ＢＵＦ２８に格納されている完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐのうち、そのＵｎｃＤａｔが位置する列に対応する完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを受ける。シンドロームキャンセル回路５１は、部分Ｃ２シンドロームPartialSyndOldと完全Ｃ２シンドロームＣｏｍｐＳｙｎｄとの排他的論理和演算を行うことにより、相殺Ｃ２シンドロームＣａｎＳｙｎｄを生成する。相殺Ｃ２シンドロームＣａｎＳｙｎｄは、Ｓｙｎｄ_ＢＵＦ２８に転送される。相殺Ｃ２シンドロームＣａｎＳｙｎｄの生成及びＳｙｎｄ＿ＢＵＦ２８への転送は、ＵＮＣＢＵＦ２７内の訂正対象Ｃ１フレームのそれぞれに含まれる各Ｃ２シンボルについて、Ｃ１×Ｃ２フレームの行方向に繰り返し実行される。これにより、Ｓｙｎｄ＿ＢＵＦ２８は、Ｃ２シンボル番号１に対応するＣ１フレームに対応する部分Ｃ２シンドローム集合がキャンセルされた相殺Ｃ２シンドローム集合ＣａｎＳｙｎｄＧｒｐを保持する。
【０２８５】
相殺Ｃ２シンドローム集合ＣａｎＳｙｎｄＧｒｐは、Ｃ１フレームＦｒｍ０〜ＦｒｍＮのそれぞれについて生成されたＮ＋１個の部分Ｃ２シンドローム集合PartialSyndGrpから、訂正対象Ｃ１フレームＦｒｍ１について生成された部分Ｃ２シンドローム集合PartialSyndGrpがキャンセルされたものに相当する。図４５のＳｙｎｄ_ＢＵＦ２８は、この状態を示している。各部分Ｃ２シンドローム集合PartialSyndGrpに付随する数字０〜Ｎの１つは、当該部分Ｃ２シンドローム集合PartialSyndGrpが、当該数字に対応するＣ１フレームＦｒｍに含まれるＣ２シンボルを用いて生成されたことを示す。例えば、数字「１」を付随する部分Ｃ２シンドローム集合PartialSyndGrpは、Ｃ１フレームＦｒｍ１に含まれるＣ２シンボルについての部分Ｃ２シンドローム集合PartialSyndGrpである。このような部分Ｃ２シンドローム集合PartialSyndGrp(Ｆｒｍ０)〜PartialSyndGrp(ＦｒｍＮ)のうち、Ｃ１フレームＦｒｍ１について生成された部分Ｃ２シンドローム集合PartialSyndGrp(Ｆｒｍ１)がキャンセルされている。
【０２８６】
図４６は、本実施形態に係る軟判定復号におけるシンドロームを更新する動作を説明する図である。シンドローム更新回路５２は、Ｃ１軟判定デコーダ５０によって訂正されたＣ１フレームＣｒｃｔＦｒｍ１＿ＳＤに含まれるＣ２シンボルＣｒｃｔＤａｔ１＿ＳＤを受ける。シンドローム更新回路５２は、Ｃ２シンボルＣｒｃｔＤａｔ１＿ＳＤに対応する更新部分Ｃ２シンドロームPartialSyndNewを生成する。シンドローム更新回路５２は、Ｓｙｎｄ＿ＢＵＦ２８に格納されている相殺Ｃ２シンドローム集合ＣａｎＳｙｎｄＧｒｐのうち、そのＣｒｃｔＤａｔ１＿ＳＤが位置する列に対応する相殺Ｃ２シンドロームＣａｎＳｙｎｄを受ける。シンドローム更新回路５２は、部分Ｃ２シンドロームPartialSyndNewと相殺Ｃ２シンドロームＣａｎＳｙｎｄとの排他的論理和演算を行うことにより、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄを生成する。更新完全Ｃ２シンドロームＲｅｖＳｙｎｄは、Ｓｙｎｄ_ＢＵＦ２８に転送される。更新完全Ｃ２シンドロームＲｅｖＳｙｎｄの生成及びＳｙｎｄ＿ＢＵＦ２８への転送は、Ｃ２シンボル番号１に対応するＣ１フレームＦｒｍ１に含まれるＣ２シンボルについて、Ｃ１×Ｃ２フレームの行方向に繰り返し実行される。これにより、Ｓｙｎｄ＿ＢＵＦ２８は、Ｃ２シンボル番号１に対応するＣ１フレームＦｒｍ１に対応する部分Ｃ２シンドローム集合が更新された更新完全Ｃ２シンドローム集合ＲｅｖＳｙｎｄＧｒｐを保持する。
【０２８７】
図４３に戻る。プロセッサ１１は、ＵＮＣＢＵＦ２７内の全ての訂正対象Ｃ１フレームを訂正できたか否かを判定する（ステップＳ５０６）。ＵＮＣＢＵＦ２７内の全ての訂正対象Ｃ１フレームを訂正できた場合（ステップＳ５０６＝Ｙｅｓ）、訂正処理が終了する。
【０２８８】
ＵＮＣＢＵＦ２７内に訂正不能な訂正対象Ｃ１フレームが残っている場合（ステップＳ５０６＝Ｎｏ）、プロセッサ１１は、軟判定による反復訂正の回数が規定回数Ｍ２に達したか否かを判定する（ステップＳ５０７）。反復訂正の回数が規定回数Ｍ２に達していない場合（ステップＳ５０７＝Ｎｏ）、プロセッサ１１は、ステップＳ５０４に戻って、軟判定を用いた反復訂正を繰り返す。一方、反復訂正の回数が規定回数Ｍ２に達した場合（ステップＳ５０７＝Ｙｅｓ）、訂正処理が終了する。
【０２８９】
［４−３］  第４実施形態の効果
第４実施形態によれば、軟判定復号による訂正の場合でも、以下に説明するように、訂正後の状態が反映されたＣ２シンドロームを簡便に生成することができる。軟判定復号は、Ｃ２モジュールの外部に位置するＣ１軟判定デコーダ５０により実行される。このため、軟判定復号によりある訂正対象Ｃ１フレームの誤りが訂正された場合、誤り訂正された訂正対象Ｃ１フレームを含む新たなＣ１×Ｃ２フレーム全体を用いて、新たなＣ２シンドローム集合を生成する必要がある。これは処理に時間を要する。
【０２９０】
第４実施形態では、Ｃ２モジュール２４は、Ｃ１×Ｃ２フレーム中の複数のＣ１フレームのそれぞれについて生成されたＣ２シンドロームを、Ｓｙｎｄ_ＢＵＦ２８中に保持する。そして、Ｃ２モジュール２４は、訂正対象Ｃ１フレームに含まれるＣ２シンボルに対応する部分Ｃ２シンドロームをキャンセルする。Ｃ２モジュール２４は、Ｃ２モジュール２４の外部のＣ１軟判定デコーダ５０で誤り訂正されたＣ１フレームに含まれるＣ２シンボルについての更新部分Ｃ２シンドロームを生成する。Ｃ２モジュール２４は、更新部分Ｃ２シンドロームを用いて、キャンセルされた部分Ｃ２シンドロームを更新する。こうすることによって、Ｃ２シンドロームの全体を再生成することなく、Ｃ２モジュール２４の外部で処理された訂正対象フレームＣ１の状態が反映されたＣ２シンドロームが、短時間で得られる。
【０２９１】
また、硬判定復号より誤り訂正能力が高い軟判定復号を実行できる。これにより、誤り訂正の精度を向上できる。
【０２９２】
［５］  第５実施形態
第５実施形態は、反復訂正におけるＣ１訂正を行う際に、内部モジュールを用いた硬判定復号と、外部モジュールを用いた軟判定復号の選択ができるようにする。そして、外部モジュールを用いた軟判定復号を行う際にも、反復訂正の後でシンドロームの整合性が確保されるようにする。
【０２９３】
［５−１］  回路構成
図４７Ａ〜図４７Ｆは、第５実施形態に係るメモリシステム２のブロック図である。図４７Ａ〜図４７Ｆは、誤り訂正に関連する回路構成を主に示している。
【０２９４】
メモリコントローラ４は、Ｃ２モジュール２４、Ｃ１−ＳＤデコーダ５０、ＤＭＡＣ１５Ａ、及びＤＭＡＣ１５Ｂを備える。Ｃ２モジュール２４は、Ｃ２デコーダ２６、Ｃ２シンドローム生成部３１、Ｃ１硬判定デコーダ（Ｃ１−ＨＤデコーダ）３７、及びバスインターフェース回路（Ｂｕｓ  Ｉ／Ｆ）５３を備える。
【０２９５】
バスインターフェース回路５３、ＤＭＡＣ１５Ａ、及びＤＭＡＣ１５Ｂは、ＡＸＩ（advanced extensible interface）プロトコルに準拠している。ＡＸＩは、付加情報であるユーザ定義信号ＡｘＵＳＥＲを通信できる。ユーザ定義信号ＡｘＵＳＥＲは、ライト用のユーザ定義信号ＡＷＵＳＥＲ、及びリード用のユーザ定義信号ＡＲＵＳＥＲを含む。本実施形態では、信号ＡｘＵＳＥＲを用いて、Ｃ２シンドロームを生成するための付加情報（Ｃ２シンドローム情報と呼ぶ）を通信する。
【０２９６】
ＤＭＡＣ１５Ａ、ＤＭＡＣ１５Ｂは、転送されるべきデータにＣ２シンドローム情報を含む信号ＡｘＵＳＥＲを付加して、データ転送を行う。ＤＭＡＣ１５Ａは、ＵＮＣＢＵＦ２７に格納されている訂正前Ｃ１フレームＵｎｃＦｒｍ＿ＳＤを、Ｃ１軟判定デコーダ５０及びバスインターフェース回路５３に転送する。ＤＭＡＣ１５Ｂは、Ｃ１軟判定デコーダ５０から出力された訂正後Ｃ１フレームＣｒｃｔＦｒｍ＿ＳＤを、ＵＮＣＢＵＦ２７及びバスインターフェース回路５３に転送する。
【０２９７】
バスインターフェース回路５３は、ＤＭＡＣ１５ＡとＣ１軟判定デコーダ５０との間のバスに接続される。バスインターフェース回路５３は、ＤＭＡＣ１５ＢとＵＮＣＢＵＦ２７との間のバスにも接続される。バスインターフェース回路５３は、ＤＭＡＣ１５Ａから出力されたデータ、すなわち訂正前Ｃ１フレームＵｎｃＦｒｍ＿ＳＤに含まれるＣ２シンボルＵｎｃＤａｔ＿ＳＤを順次スヌープする。バスインターフェース回路５３は、ＤＭＡＣ１５Ｂから出力されたデータ、すなわち訂正後Ｃ１フレームＣｒｃｔＦｒｍ＿ＳＤに含まれるＣ２シンボルＣｒｃｔＤａｔ＿ＳＤを順次スヌープする。このとき、バスインターフェース回路５３は、ＤＭＡＣ１５Ａ及びＤＭＡＣ１５Ｂから出力されるデータに付随する信号ＡｘＵＳＥＲを参照して、スヌープ処理を行う。信号ＡｘＵＳＥＲは、ライト転送情報ＷＴＩを含む。ライト転送情報ＷＴＩは、Ｃ２パリティを生成するために利用される情報である。具体的には、ライト転送情報ＷＴＩは、スヌープしたＣ２シンボルが、Ｃ１×Ｃ２フレームのどの行に位置するＣ２シンボルであるのか、すなわちどのＣ１フレームに含まれるＣ２シンボルであるのかを示す。
【０２９８】
Ｃ２シンドローム生成部３１は、バスインターフェース回路５３から、Ｃ１軟判定デコーダ５０による訂正前Ｃ１フレームＵｎｃＦｒｍ＿ＳＤに含まれるＣ２シンボルＵｎｃＤａｔ＿ＳＤを順次受信する。また、Ｃ２シンドローム生成部３１は、バスインターフェース回路５３から、Ｃ１軟判定デコーダ５０による訂正後Ｃ１フレームＣｒｃｔＦｒｍ＿ＳＤに含まれるＣ２シンボルＣｒｃｔＤａｔ＿ＳＤを順次受信する。Ｃ２シンドローム生成部３１の構成は、第１実施形態と同じである。すなわち、Ｃ２シンドローム生成部３１は、シンドロームキャンセル回路４２、及びシンドローム更新回路４３を備える。Ｃ２シンドローム生成部３１は、訂正前Ｃ１フレームに含まれるＣ２シンボルＵｎｃＤａｔ＿ＳＤ及び訂正後Ｃ１フレームに含まれるＣ２シンボルＣｒｃｔＤａｔ＿ＳＤを用いて、シンドロームのキャンセル及び更新を行う。
【０２９９】
［５−２］  動作
次に、本実施形態のメモリシステム２の動作について説明する。本実施形態の動作は、反復訂正の準備及びそれに続く硬判定を用いた反復訂正は第４実施形態と同一であるが、その後の軟判定を用いた反復訂正が第４実施形態と異なる。
【０３００】
本実施形態の軟判定を用いた反復訂正では、Ｃ２訂正とＣ１−ＳＤ訂正を別々に行う。すなわち、まずＵＮＣＢＵＦ２７に格納されている訂正対象Ｃ１フレームのそれぞれに含まれるＣ２シンボルに対してＣ２訂正のみを行い、またそれに合わせてＳｙｎｄ＿ＢＵＦ２８に格納されている完全Ｃ２シンドロームに対する部分Ｃ２シンドロームのキャンセル及び更新処理を行う（以下これを軟判定前処理と呼ぶ）。そのあと、ＵＮＣＢＵＦ２７に格納されている訂正対象Ｃ１フレームのそれぞれに対してＣ１−ＳＤ訂正のみを行い、またそれに合わせてＳｙｎｄ＿ＢＵＦ２８に格納されている完全Ｃ２シンドロームに対する部分Ｃ２シンドロームのキャンセル及び更新処理を行う（以下これを軟判定後処理と呼ぶ）。
【０３０１】
図４７Ｂは軟判定前処理の開始前の状態を示す図である。Ｓｙｎｄ＿ＢＵＦ２８には、硬判定を用いた反復訂正によって得られるＣ１×Ｃ２フレームＣ１×Ｃ２Ｆｒｍ_ＨＤ（図示せず）に対応した完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐが格納されているものとする。図に示すPartialSyndGrp(Frm0)〜PartialSyndGrp(FrmN)は、Ｃ１×Ｃ２Ｆｒｍ_ＨＤを構成するＣ２シンボル番号０〜Ｎに対応するＣ１フレームのそれぞれから生成される部分Ｃ２シンドローム集合であるとする。完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐはこれら部分Ｃ２シンドローム集合の排他的論理和演算で得られるものとする。またＵＮＣＢＵＦ２７には、Ｃ１×Ｃ２Ｆｒｍ_ＨＤのＣ２シンボル番号１に対応するＣ１フレームであるＵｎｃＦｒｍ１が格納されており、以下ではこのＵｎｃＦｒｍ１が軟判定前処理及び軟判定後処理で訂正されるものとする。
【０３０２】
軟判定前処理は、第１実施形態におけるＣ１デコーダ３７による訂正処理をバイパスしたものに相当する。軟判定前処理は、Ｃ２訂正と部分Ｃ２シンドロームのキャンセル処理、及びそれに続くＣ２シンドローム更新処理からなる。
【０３０３】
図４７Ｃに示すように、Ｃ２モジュール２４は、ＵｎｃＦｒｍ１にＣ２訂正を行うため、ＵｎｃＦｒｍ１に含まれているＣ２シンボルＵｎｃＤａｔをＵＮＣＢＵＦ２７から受信する。同時にＣ２モジュール２４は、ＵｎｃＤａｔに対応する完全Ｃ２シンドロームＣｏｍｐＳｙｎｄをＳｙｎｄ＿ＢＵＦ２８から受信する。
【０３０４】
続いて図４７Ｄに示すように、Ｃ２デコーダ２６は完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを用いて、ＵｎｃＤａｔをＣ２訂正したＣｒｃｔＤａｔ＿Ｃ２を生成する。またそれに並行して、Ｃ２シンドローム生成部３１は、完全Ｃ２シンドロームＣｏｍｐＳｙｎｄと、Ｃ２シンボルＵｎｃＤａｔから生成される部分Ｃ２シンドロームとの排他的論理和演算を行うことで、相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿ＵＮＣを生成する。Ｃ２シンドローム生成部３１は、生成された相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿ＵＮＣをＳｙｎｄ＿ＢＵＦ２８に転送する。この処理により、図４７Ｃに示したＳｙｎｄ＿ＢＵＦ２８内の完全Ｃ２シンドロームＣｏｍｐＳｙｎｄは、図４７Ｄに示す相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿ＵＮＣに置き換えられる。
【０３０５】
Ｃ２モジュール２４は、ＵｎｃＦｒｍ１に含まれる各Ｃ２シンボルＵｎｃＤａｔに対応する完全Ｃ２シンドロームＣｏｍｐＳｙｎｄを、Ｓｙｎｄ＿ＢＵＦ２８から順次受信する。また、それに続くＣ２訂正されたＣｒｃｔＤａｔ＿Ｃ２の生成、及び相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿ＵＮＣの生成とＳｙｎｄ＿ＢＵＦ２８への転送も、ＵｎｃＦｒｍ１に含まれる各Ｃ２シンボルＵｎｃＤａｔについて順次行われる。
【０３０６】
図４７Ｄに示すように、Ｃ２訂正されたＣｒｃｔＤａｔ＿Ｃ２は、Ｃ１−ＨＤデコーダ３７で処理せずにＵＮＣＢＵＦ２７へ転送される。またそれと並行してＣ２モジュール２４は、Ｓｙｎｄ＿ＢＵＦ２８に格納された相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿ＵＮＣを読み出す。読み出された相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿ＵＮＣと、ＣｒｃｔＤａｔ＿Ｃ２は、Ｃ２シンドローム生成部３１に転送される。Ｃ２シンドローム生成部３１は、相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿ＵＮＣと、ＣｒｃｔＤａｔ＿Ｃ２から生成される部分Ｃ２シンドロームとの排他的論理和演算を行うことで、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿Ｃ２を生成する。生成された更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿Ｃ２は、Ｓｙｎｄ＿ＢＵＦ２８に転送される。この処理により図４７Ｄに示したＳｙｎｄ＿ＢＵＦ２８内の相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿ＵＮＣは、図４７Ｅに示す更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿Ｃ２に置き換えられる。
【０３０７】
更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿Ｃ２の生成とＳｙｎｄ＿ＢＵＦ２８への転送は、Ｃ２デコーダ２６により順次出力されるＣｒｃｔＤａｔ＿Ｃ２に対して順次繰り返される。図４７Ｆに示すように、ＵｎｃＦｒｍ１に含まれる全てのＣ２シンボルに対してＣ２訂正が行われると、ＵＮＣＢＵＦ２７に格納されていたＵｎｃＦｒｍ１は、全てのＣ２シンボルがＣ２訂正されたＣ１フレームであるＣｒｃｔＦｒｍ１＿Ｃ２に置き換わる。また完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐに含まれている全ての完全Ｃ２シンドロームＣｏｍｐＳｙｎｄに対して、ＵｎｃＦｒｍ１に含まれるＣ２シンボルＵｎｃＤａｔを用いたキャンセル処理と、ＣｒｃｔＦｒｍ１＿Ｃ２に含まれるＣ２シンボルＣｒｃｔＤａｔ＿Ｃ２を用いた更新処理が行われる。これにより、完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐを排他的論理和演算により生成する際に用いられた部分Ｃ２シンドローム集合の一つであるPartialSyndGrp(Frm1)は、PartialSyndGrp(Frm1)を構成する各部分Ｃ２シンドロームが、ＣｒｃｔＦｒｍ１＿Ｃ２に対応する部分Ｃ２シンドロームに置き換わったPartialSyndNewC2Grp(Frm1)になる。このようにして、完全Ｃ２シンドローム集合ＣｏｍｐＳｙｎｄＧｒｐは、更新完全Ｃ２シンドローム集合ＲｅｖＳｙｎｄＣ２Ｇｒｐに置き換えられる。
【０３０８】
更新完全Ｃ２シンドローム集合ＲｅｖＳｙｎｄＣ２Ｇｒｐは、硬判定を用いた反復訂正によって得られるＣ１×Ｃ２フレームＣ１×Ｃ２Ｆｒｍ_ＨＤのうち、Ｃ２シンボル番号１に対応するＣ１フレームであるＵｎｃＦｒｍ１を、Ｃ２訂正されたＣ１フレームＣｒｃｔＦｒｍ１＿Ｃ２に置き換えたＣ１×Ｃ２フレームＣ１×Ｃ２Ｆｒｍ_Ｃ２（図示せず）の完全Ｃ２シンドローム集合に相当する。ＵＮＣＢＵＦ２７に訂正対象Ｃ１フレームが複数ある場合には、この軟判定前処理が各訂正対象Ｃ１フレームに対して繰り返される。
【０３０９】
図４７ＦはＵｎｃＦｒｍ１に対して軟判定前処理を行った後の状態を表す図であり、同時にＣｒｃｔＦｒｍ１＿Ｃ２に対して軟判定後処理を行う前の状態を表す図でもある。軟判定後処理では、ＵＮＣＢＵＦ２７に格納されているＣ１フレームＣｒｃｔＦｒｍ１＿Ｃ２がＣ１−ＳＤデコーダ５０で訂正されると共に、Ｓｙｎｄ＿ＢＵＦ２８に格納されている更新完全Ｃ２シンドローム集合ＲｅｖＳｙｎｄＣ２Ｇｒｐが、その訂正に合わせてさらに更新される。
【０３１０】
次に、図４８Ａ乃至図４８Ｅを参照して、本実施形態に係る軟判定後処理のデータフローについて説明する。
【０３１１】
図４８Ａに示すように、ＤＭＡＣ１５ＡはＵＮＣＢＵＦ２７に格納されている訂正対象Ｃ１フレームＣｒｃｔＦｒｍ１＿Ｃ２に含まれる全てのＣ２シンボルをＣ１−ＳＤデコーダ５０に転送する。またそれに合わせ、バスインターフェース回路５３は、ＤＭＡＣ１５Ａから送信される信号ＡｘＵＳＥＲを参照して、Ｃ１フレームＣｒｃｔＦｒｍ１＿Ｃ２に含まれる各Ｃ２シンボルＣｒｃｔＤａｔ＿Ｃ２を順次スヌープし、Ｃ２シンドローム生成部３１に転送する。Ｃ２シンドローム生成部３１は、受信したＣ２シンボルＣｒｃｔＤａｔ＿Ｃ２に対応する更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿Ｃ２を、更新完全Ｃ２シンドローム集合ＲｅｖＳｙｎｄＣ２Ｇｒｐから読み出す。
【０３１２】
図４８Ｂは更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿Ｃ２のキャンセルを説明する図である。Ｃ２シンドローム生成部３１は、Ｃ２シンボルＣｒｃｔＤａｔ＿Ｃ２から部分Ｃ２シンドロームを生成し、それと更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿Ｃ２との排他的論理和演算を行うことで相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿Ｃ２を生成する。生成された相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿Ｃ２は、Ｓｙｎｄ_ＢＵＦ２８に転送される。
【０３１３】
相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿Ｃ２の生成とＳｙｎｄ_ＢＵＦ２８への転送は、Ｃ１フレームＣｒｃｔＦｒｍ１＿Ｃ２に含まれる各Ｃ２シンボルＣｒｃｔＤａｔ＿Ｃ２について行われる。これにより、図４８Ｃに示すように、更新完全Ｃ２シンドローム集合ＲｅｖＳｙｎｄＣ２Ｇｒｐを排他的論理和演算により生成する際に用いられた部分Ｃ２シンドローム集合PartialSyndGrp(Frm0)、PartialSyndNewC2Grp(Frm1)、及びPartialSyndGrp(Frm2)〜PartialSyndGrp(FrmN)のうち、PartialSyndNewC2Grp(Frm1)がキャンセルされた相殺Ｃ２シンドローム集合ＣａｎＳｙｎｄＣ２Ｇｒｐが生成される。
【０３１４】
図４８Ｄは、Ｃ１−ＳＤ訂正後のＣ１フレームＣｒｃｔＦｒｍ１＿ＳＤのＵＮＣＢＵＦ２７への転送と、Ｃ２シンドローム更新処理を説明する図である。図４８Ｄに示すように、ＤＭＡＣ１５ＢはＣ１−ＳＤデコーダ５０で訂正されたＣ１フレームＣｒｃｔＦｒｍ１＿ＳＤに含まれる全てのＣ２シンボルをＵＮＣＢＵＦ２７に転送する。またそれに合わせ、バスインターフェース回路５３は、ＤＭＡＣ１５Ｂから送信される信号ＡｘＵＳＥＲを参照して、ＣｒｃｔＦｒｍ１＿ＳＤに含まれる各Ｃ２シンボルＣｒｃｔＤａｔ＿ＳＤを順次スヌープし、Ｃ２シンドローム生成部３１に転送する。Ｃ２シンドローム生成部３１は、受信したＣ２シンボルＣｒｃｔＤａｔ＿ＳＤに対応する相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿Ｃ２を、相殺Ｃ２シンドローム集合ＣａｎＳｙｎｄＣ２Ｇｒｐから読み出す。そしてＣ２シンドローム生成部３１は、ＣｒｃｔＤａｔ＿ＳＤから部分Ｃ２シンドロームを生成し、それとＣａｎＳｙｎｄ＿Ｃ２との排他的論理和演算を行うことで、更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿ＳＤを生成する。生成された更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿ＳＤは、Ｓｙｎｄ_ＢＵＦ２８に転送される。
【０３１５】
更新完全Ｃ２シンドロームＲｅｖＳｙｎｄ＿ＳＤの生成とＳｙｎｄ＿ＢＵＦ２８への転送は、ＣｒｃｔＦｒｍ１＿ＳＤに含まれる各Ｃ２シンボルＣｒｃｔＤａｔ＿ＳＤに対して順次繰り返される。これに伴い、相殺Ｃ２シンドローム集合ＣａｎＳｙｎｄＣ２Ｇｒｐに含まれている全ての相殺Ｃ２シンドロームＣａｎＳｙｎｄ＿Ｃ２に対して、シンドローム更新処理が行われる。これにより、図４８Ｅに示すように、相殺Ｃ２シンドローム集合ＣａｎＳｙｎｄＣ２Ｇｒｐは、ＣｒｃｔＦｒｍ１＿ＳＤに含まれる各Ｃ２シンボルによって生成される部分Ｃ２シンドローム集合PartialSyndNewSDGrp(Frm1)が排他的論理和演算により加えられた更新完全Ｃ２シンドローム集合ＲｅｖＳｙｎｄＳＤＧｒｐになる。
【０３１６】
更新完全Ｃ２シンドローム集合ＲｅｖＳｙｎｄＳＤＧｒｐは、軟判定前処理によって得られるＣ１×Ｃ２フレームＣ１×Ｃ２Ｆｒｍ_Ｃ２のうち、Ｃ２シンボル番号１に対応するＣ１フレームであるＣｒｃｔＦｒｍ１＿Ｃ２を、Ｃ１−ＳＤ訂正されたＣ１フレームＣｒｃｔＦｒｍ１＿ＳＤに置き換えたＣ１×Ｃ２フレームＣ１×Ｃ２Ｆｒｍ_ＳＤ（図示せず）の完全Ｃ２シンドローム集合に相当する。ＵＮＣＢＵＦ２７に訂正対象Ｃ１フレームが複数ある場合には、この軟判定後処理が各訂正対象Ｃ１フレームに対して繰り返される。
【０３１７】
［５−３］  第５実施形態の効果
第５実施形態によれば、Ｃ２訂正後と、軟判定復号によるＣ１訂正とのそれぞれで、シンドロームの整合性が確保される。また、データ転送時の付加情報（例えば、信号ＡｘＵＳＥＲ）を参照することで、訂正対象Ｃ１フレームに含まれるＣ２シンボルがスヌープされ、それによってＣ２シンドローム集合のキャンセルと更新が行える。このような方法によっても、第４実施形態と同じく軟判定復号後もＣ２シンドローム集合の整合性を確保することができる。
【０３１８】
［６］  第６実施形態
第６実施形態は、Ｃ１訂正を行うごとに、Ｃ２訂正用のシンドロームを部分的に更新するようにしている。
【０３１９】
［６−１］  回路構成
図４９は、第６実施形態に係るメモリシステム２のブロック図である。図４９は、誤り訂正に関連する回路構成を主に示している。
【０３２０】
Ｃ１モジュール２０は、例えばＣ１−ＨＤ訂正を行う。
【０３２１】
Ｃ１デコーダ３７は、バス１７に接続される。Ｃ１デコーダ３７は、例えばＣ１−ＳＤ訂正を行う。
【０３２２】
Ｃ２モジュール２４は、Ｃ２シンドローム生成部３１、及びＣ２デコーダ２６を含む。Ｃ２シンドローム生成部３１は、第１実施形態と同様に、完全Ｃ２シンドロームを生成する機能（すなわち、Ｃ２シンドローム生成回路４１による機能）と、相殺Ｃ２シンドロームを生成する機能（すなわち、シンドロームキャンセル回路４２による機能）と、更新完全Ｃ２シンドロームを生成する機能（すなわち、シンドローム更新回路４３による機能）とを有する。また、Ｃ２モジュール２４は、ＵＮＣＢＵＦ２７、及びＳｙｎｄ_ＢＵＦ２８に接続される。
【０３２３】
［６−２］  動作
次に、本実施形態のメモリシステム２の動作について説明する。図５０は、本実施形態に係る誤り訂正動作を説明するフローチャートである。なお、ＵＮＣＢＵＦ２７に訂正対象Ｃ１フレームが格納されているものとする。すなわち、反復訂正用の準備は、第１実施形態と同じである。
【０３２４】
プロセッサ１１は、Ｃ１フレームを単位として、Ｃ１×Ｃ２フレームを、ＮＡＮＤ型フラッシュメモリ３から読み出す（ステップＳ６００）。
【０３２５】
Ｃ１モジュール２０（具体的には、Ｃ１デコーダ２２）は、読み出されたＣ１×Ｃ２フレームに含まれる各Ｃ１フレームに対して、Ｃ１−ＨＤ訂正を行う（ステップＳ６０１）。Ｃ１モジュール２０から出力された全てのＣ１フレームは、ＤＢＵＦ１４に格納される。ＤＢＵＦ１４に格納されるＣ１フレームは、Ｃ１−ＨＤ訂正により誤りが訂正できたＣ１Ｃ１フレームと、Ｃ１−ＨＤ訂正により誤りが訂正できなかったＣ１フレームを含む。
【０３２６】
Ｃ２シンドローム生成部３１は、バスを転送されるＣ１×Ｃ２フレームを構成する２５５個のＣ１フレームをスヌープする。Ｃ２シンドローム生成部３１は、スヌープされたＣ１フレームに含まれるＣ２シンボルを用いて、完全Ｃ２シンドロームを生成する（ステップＳ６０２）。Ｃ２シンドローム生成部３１により生成された完全Ｃ２シンドロームは、Ｓｙｎｄ_ＢＵＦ２８に格納される。
【０３２７】
Ｃ１デコーダ３７は、ＤＢＵＦ１４に格納された訂正不能なＣ１フレームに対して、Ｃ１−ＳＤ訂正を行う（ステップＳ６０３）。Ｃ２シンドローム生成部３１は、訂正されたＣ１フレームに含まれるＣ２シンボルを用いて完全Ｃ２シンドロームを更新する（ステップＳ６０４）。
【０３２８】
図５１は、本実施形態に係るＣ１−ＳＤ訂正及びシンドロームの更新処理（図５０のステップＳ６０３及びＳ６０４）の流れを説明する図である。図中において、データフローを一点鎖線で示している。
【０３２９】
プロセッサ１１は、ＤＢＵＦ１４に格納されたＣ１×Ｃ２フレームのうち、Ｃ１モジュール２０によるＣ１−ＨＤ訂正で誤りが訂正できなかった訂正対象Ｃ１フレームを、Ｃ１デコーダ３７及びＣ２シンドローム生成部３１に転送する（ステップＳ６１０）。
【０３３０】
Ｃ１デコーダ３７は、ＤＢＵＦ１４から転送された訂正対象Ｃ１フレームに対して、Ｃ１−ＳＤ訂正を行う（ステップＳ６１１）。これと並行して、Ｃ２シンドローム生成部３１は、ＤＢＵＦ１４から転送された訂正された訂正対象Ｃ１フレームに含まれるＣ２シンボルを用いて、部分Ｃ２シンドロームを生成する。そして、Ｃ２シンドローム生成部３１は、生成された部分Ｃ２シンドロームを用いて、Ｓｙｎｄ_ＢＵＦ２８に格納された完全Ｃ２シンドロームを部分的にキャンセルし、相殺Ｃ２シンドロームを生成する（ステップＳ６１２）。
【０３３１】
プロセッサ１１は、Ｃ１デコーダ３７によりＣ１−ＳＤ訂正された訂正対象Ｃ１フレームを、ＤＢＵＦ１４及びＣ２シンドローム生成部３１に転送する（ステップＳ６１３）。
【０３３２】
Ｃ２シンドローム生成部３１は、Ｃ１デコーダ３７から転送されたＣ１フレーム（すなわち、Ｃ１−ＳＤ訂正後のＣ１フレーム）に含まれるＣ２シンボルを用いて、更新部分Ｃ２シンドロームを生成する。そして、Ｃ２シンドローム生成部３１は、生成された更新部分Ｃ２シンドロームを用いて、Ｓｙｎｄ_ＢＵＦ２８に格納された相殺Ｃ２シンドロームを部分的に更新する（ステップＳ６１４）。すなわち、相殺Ｃ２シンドロームのうちの訂正対象Ｃ１フレームに対応する部分Ｃ２シンドロームを、更新部分Ｃ２シンドロームで置き換える。このようにして、完全Ｃ２シンドロームが更新される。
【０３３３】
図５０に戻り、Ｃ２デコーダ２６は、Ｓｙｎｄ_ＢＵＦ２８に格納された更新完全Ｃ２シンドロームを用いて、Ｃ２訂正を行う（ステップＳ６０５）。なお、ステップＳ６０５のＣ２訂正では、誤りの数に応じて通常訂正及び消失訂正のいずれかを適用できる。
【０３３４】
［６−３］  第６実施形態の効果
第６実施形態では、訂正対象であるＣ１×Ｃ２フレームを不揮発性メモリから１回読み出すだけで、その後、Ｃ１訂正とＣ２訂正との反復訂正を行うことができる。これにより、不揮発性メモリへのアクセス数を低減できる。
【０３３５】
また、Ｃ１デコーダ３７によるＣ１−ＳＤ訂正ごとに、Ｃ２シンドロームを部分的に更新できる。これにより、Ｃ１−ＳＤ訂正とＣ２訂正との反復訂正を行うことができる。
【０３３６】
［７］  第７実施形態
第７実施形態は、符号化動作時、及びシンドローム生成動作時に、付加情報（リード転送情報ＲＴＩ及びライト転送情報ＷＴＩ）を利用するようにしている。
【０３３７】
［７−１］  符号化動作
図５２は、第７実施形態に係る符号化動作を説明するフローチャートである。図５３は、本実施形態に係る符号化のデータフローを説明する図である。図５３の回路構成は、図１５と同じである。ただし、本実施形態のバス１７（１７Ａ、１７Ｂ、１７Ｃ）は、ＡＸＩプロトコルに準拠する。
【０３３８】
ステップＳ１００〜Ｓ１０２の動作は、図１４及び図１５を参照して説明した第１実施形態と同じである。Ｃ１モジュール２０に含まれるバスインターフェース回路２０Ａは、リード転送情報ＲＴＩを、バス１７Ｂ及びバス１７Ｃを介してＣ２モジュール２４に送信する（ステップＳ１１０）。リード転送情報ＲＴＩは、例えばリード用のユーザ定義信号ＡＲＵＳＥＲに含まれる。リード転送情報ＲＴＩは、Ｃ２パリティ集合を生成するために利用される情報である。リード転送情報ＲＴＩは、具体的には、スヌープしたユーザデータが積符号情報部のどの行に位置するユーザデータなのか、換言すると、ユーザデータＵＤ０〜ＵＤｎのいずれであるかを示す。
【０３３９】
Ｃ２モジュール２４は、スヌープされたユーザデータ及びリード転送情報ＲＴＩを用いて、Ｃ２パリティ集合を生成する（ステップＳ１１１）。このとき、Ｃ２モジュール２４は、リード転送情報ＲＴＩを参照して、スヌープされたユーザデータがユーザデータＵＤ０〜ＵＤｎのいずれであるのかを特定する。Ｃ２モジュール２４は、この特定された情報を使用してＣ２パリティ集合を生成する。ステップＳ１１１の後の動作（ステップＳ１０４〜Ｓ１０７）は、図１４及び図１５と同じである。
【０３４０】
［７−２］  シンドローム生成動作
次に、シンドローム生成動作について説明する。ここで説明するシンドローム生成動作は、反復訂正の準備として、すなわち、反復訂正の前に行われる。図５４は、本実施形態に係るシンドローム生成動作を説明するフローチャートである。図５５は、本実施形態に係るシンドローム生成のデータフローを説明する図である。図５５では、シンドロームバッファ（Ｓｙｎｄ_ＢＵＦ）２８がＣ２モジュール２４に含まれる構成が例示されている。
【０３４１】
プロセッサ１１は、ＮＡＮＤ型フラッシュメモリ３から、Ｃ１フレームを単位としてデータを読み出す（ステップＳ７００）。Ｃ１モジュール２０は、Ｃ１フレームを単位として、Ｃ１訂正及びＣＲＣ検証を行う（ステップＳ７０１）。
【０３４２】
プロセッサ１１は、訂正不能なＣ１フレームが発生したか否かを判定する（ステップＳ７０２）。訂正不能なＣ１フレームが発生していない場合（ステップＳ７０２＝Ｎｏ）、プロセッサ１１は、シンドローム生成動作を終了する。訂正不能なＣ１フレームが発生した場合（ステップＳ７０２＝Ｙｅｓ）、プロセッサ１１は、Ｃ１フレームを単位として訂正不能な当該Ｃ１フレームを含むＣ１×Ｃ２フレームを、ＮＡＮＤ型フラッシュメモリ３から読み出しＤＢＵＦ１４に転送する（ステップＳ７０３）。
【０３４３】
Ｃ２モジュール２４は、バス１７Ｂを転送されるＣ１×Ｃ２フレームを構成する２５５個のＣ１フレーム（図５５のＦｒｍ０、Ｆｒｍ１、Ｆｒｍ２、・・・）をスヌープする（ステップＳ７０４）。この際、Ｃ２モジュール２４は、Ｃ１フレームのうちユーザデータＵＤ及びＣ２パリティ集合のみをスヌープする。すなわち、ＣＲＣパリティ及びＣ１パリティ部は、スヌープされない。
【０３４４】
Ｃ１モジュール２０に含まれるバスインターフェース回路２０Ａは、ライト転送情報ＷＴＩを、バス１７Ｂ及びバス１７Ｃを介してＣ２モジュール２４に送信する（ステップＳ７０５）。ライト転送情報ＷＴＩは、例えばライト用のユーザ定義信号ＡＷＵＳＥＲに含まれる。ライト転送情報ＷＴＩは、Ｃ２シンドロームを生成するために利用される情報である。ライト転送情報ＷＴＩは、具体的には、スヌープしたＣ１フレームが、Ｃ１×Ｃ２フレームのどの行に位置するのかを示す。
【０３４５】
Ｃ２モジュール２４は、スヌープされたＣ１フレーム及びライト転送情報ＷＴＩを用いて、Ｃ２シンドローム集合を生成する（ステップＳ７０６）。このとき、Ｃ２モジュール２４は、ライト転送情報ＷＴＩを参照して、スヌープされたＣ１フレームがＣ１×Ｃ２フレームのどの行のＣ１フレームなのか、すなわちＣ１フレームＦｒｍ０〜ＦｒｍＮのいずれであるのかを特定する。Ｃ２モジュール２４は、この特定された情報を使用してＣ２シンドローム集合を生成する。Ｃ２モジュール２４は、生成したＣ２シンドローム集合を、Ｓｙｎｄ_ＢＵＦ２８に格納する（ステップＳ７０７）。
【０３４６】
［７−３］  第７実施形態の効果
第７実施形態によれば、Ｃ２パリティ集合を生成する際に、リード転送情報ＲＴＩを利用することができる。リード転送情報ＲＴＩは、ユーザデータの位置を表す情報、すなわち転送される複数のユーザデータの１つを特定することを可能にする情報を含む。これにより、符号化動作を効率良く行うことができる。
【０３４７】
また、Ｃ２シンドローム集合を生成する際に、ライト転送情報ＷＴＩを利用することができる。ライト転送情報ＷＴＩは、Ｃ１フレームの位置を表す情報、すなわち転送される複数のＣ１フレームの１つを特定することを可能にする情報を含む。これにより、シンドローム生成動作を効率良く行うことができる。
【０３４８】
［８］  第８実施形態
Ｃ２符号の符号化処理及び復号化処理の方向は、Ｃ１符号の符号化処理及び復号化処理の方向と直交する。よって、Ｃ２パリティ集合の生成には積符号情報部全体が必要であり、Ｃ２シンドローム集合の生成にはＣ１×Ｃ２フレーム全体が必要である。このため、Ｃ２パリティ集合及びＣ２シンドローム集合を生成するのに時間がかかる。そのため、複数のＣ２パリティ部を並行して生成することが望ましい。Ｃ２シンドロームについても同様である。第８実施形態では、複数のチャネルを転送されるデータを並列処理するようにしている。
【０３４９】
［８−１］  符号化の回路構成
まず、本実施形態で使用される各種情報について説明する。図５６Ａ及び図５６Ｂは、本実施形態に係るデータ構造を説明する図である。
【０３５０】
図５６Ａに示すように、積符号情報部（すなわち、ユーザデータ）には、コードＩＤ（ＣｏｄｅＩＤ）１〜Ｍが割り当てられる。Ｍは、２以上の整数である。１つの積符号情報部に含まれる複数のユーザデータ行には、ページＩＤ（ＰａｇｅＩＤ）１〜Ｌが割り当てられる。Ｌは、２以上の整数である。
【０３５１】
図５６Ｂに示すように、Ｃ１×Ｃ２フレームには、コードＩＤ（ＣｏｄｅＩＤ）１〜Ｍが割り当てられる。１つのＣ１×Ｃ２フレームに含まれる複数のＣ１フレームには、ページＩＤ（ＰａｇｅＩＤ）１〜Ｊが割り当てられる。Ｊは、２以上の整数である。
【０３５２】
本実施形態では、後述するように、Ｃ２エンコーダ及びＣ２パリティバッファのセットがＺ個用意される。同様に、Ｃ２デコーダ及びＣ２シンドロームバッファのセットがＺ個用意される。Ｃ２エンコーダ及びＣ２パリティバッファの複数のセットには、エンジンＩＤ（ＥｎｇＩＤ）１〜Ｚが割り当てられる。Ｚは、２以上の整数である。ＥｎｇＩＤは、Ｃ２エンコーダ及びＣ２デコーダに共通して使用される。図５６Ａに示すように、積符号情報部が複数のＣ２シンボルへと分割され、各Ｃ２シンボルにＥｎｇＩＤ（１〜Ｚ）のいずれかが割り当てられる。図５６Ｂに示すように、Ｃ１×Ｃ２フレームがＣ２シンボルに分割され、各Ｃ２シンボルには、ＥｎｇＩＤ（１〜Ｚ）のいずれかが割り当てられる。図５６Ａのユーザデータ行及び図５６ＢのＣ１フレームに含まれる１つの四角が、分割された１つのＣ２シンボルを示している。
【０３５３】
図５７は、本実施形態に係るメモリコントローラ４のブロック図である。図５７は、符号化に関連する回路構成を主に示している。
【０３５４】
Ｃ１モジュール２０は、Ｎ個のチャネルＣＨ１〜ＣＨ（Ｎ）を介して、データバッファ（ＤＢＵＦ）１４に接続される。チャネルＣＨ１〜ＣＨ（Ｎ）は、バスを構成する。Ｎは、２以上の整数である。
【０３５５】
Ｃ１モジュール２０は、リード転送情報ＲＴＩをＣ２モジュール２４に送信する。リード転送情報ＲＴＩは、例えばリード用のユーザ定義信号ＡＲＵＳＥＲに含まれる。ユーザ定義信号ＡＲＵＳＥＲは、ＡＸＩプロトコルに準拠する。リード転送情報ＲＴＩは、バスを転送中のデータに関するＣｏｄｅＩＤ、積符号情報部のページＩＤ（すなわち、ユーザデータ行の位置を特定する情報（例えば積符号情報部における行の番号））、及び積符号情報部内の、Ｃ２フレームを構成することになるＣ２シンボルの組（ユーザデータ列と称する場合がある）の位置を特定する情報（例えば積符号情報部における列の番号）を含む。ユーザデータ列の位置を特定する情報を、ユーザデータ列位置情報と呼ぶ。
【０３５６】
Ｃ２モジュール２４は、チャネルＣＨ１〜ＣＨ（Ｎ）を介して、Ｃ１モジュール２０及びＤＢＵＦ１４に接続される。Ｃ２モジュール２４は、アービタ６０、インターリーバ６１、ディスパッチャ６２、ＥｎｇＩＤ＝１〜Ｚに対応するＺ個のＣ２エンコーダ２５−１〜２５−Ｚ、及びＥｎｇＩＤ＝１〜Ｚに対応するＺ個のＣ２パリティバッファ群（Ｃ２  ｐａｒｉｔｙ  ｂｕｆ）６３−１〜６３−Ｚを備える。
【０３５７】
アービタ６０は、チャネルＣＨ１〜ＣＨ（Ｎ）に接続される。アービタ６０は、チャネルＣＨ１〜ＣＨ（Ｎ）を介して、Ｎ個のデータを並列に受信することが可能である。アービタ６０及びインターリーバ６１は、リード転送情報ＲＴＩを用いて、アービタ６０から送られるＮ個のデータに対してインターリーブ処理を行う。
【０３５８】
ディスパッチャ６２は、アービタ６０によって決定された優先順位に従い、ＥｎｇＩＤに対応するＣ２シンボルをそれぞれ、Ｃ２エンコーダ２５−１〜２５−Ｚに送信する。
【０３５９】
Ｃ２エンコーダ２５−１は、ＥｎｇＩＤ＝１に対応するＣ２シンボルの組を用いて、Ｃ２パリティ部を生成する。すなわち、Ｃ２エンコーダ２５−１は１つの積符号情報部に含まれるＥｎｇＩＤ＝１のＬ個のＣ２シンボルの組から、対応するＣ２パリティ部を生成する。同様にＣ２エンコーダ２５−１は、別の積符号情報部に含まれるＥｎｇＩＤ＝１のＬ個のＣ２シンボルの組から別のＣ２パリティ部を生成する。すなわち、Ｃ２エンコーダ２５−１は、複数（Ｍ個）の積符号情報部について、ＥｎｇＩＤ＝１に対応する複数（Ｍ個）のＣ２パリティ部を生成する。同様に、Ｃ２エンコーダ２５−２〜２５−Ｚの各々は、複数（Ｍ個）の積符号情報部について、ＥｎｇＩＤ＝２〜Ｚに対応する複数（Ｍ個）のＣ２パリティ部を生成する。Ｃ１エンコーダ２５−１〜２５−Ｚは、生成したＣ２パリティ部をＣ２パリティバッファ群６３−１〜６３−Ｚにそれぞれ転送する。
【０３６０】
Ｃ２パリティバッファ群６３−１〜６３−Ｚの各々は、ＣｏｄｅＩＤ＝１〜Ｍに対応したＭ個のＣ２パリティバッファを備える。Ｍ個のＣ２パリティバッファはそれぞれ、ＣｏｄｅＩＤ＝１〜Ｍに対応するＣ２パリティ部を一時的に格納する。
【０３６１】
［８−２］  符号化動作
次に、符号化動作について説明する。図５８は、本実施形態に係る符号化のデータフローを説明する図である。
【０３６２】
プロセッサ１１は、ホスト装置１から送信された積符号情報部をＤＢＵＦ１４に転送する。図５８では、ＤＢＵＦ１４は、ＣｏｄｅＩＤ＝Ｋに対応する積符号情報部を格納している。Ｋは、１〜Ｍの間の任意の整数である。
【０３６３】
プロセッサ１１は、積符号情報部を構成するＬ個のユーザデータ行からＮ個を選択し、チャネルＣＨ１〜ＣＨ（Ｎ）を介して、ＤＢＵＦ１４からＣ１モジュール２０に転送する（図５８の（１））。図５８は、ＰａｇｅＩＤ＝１〜Ｎに対応するＮ個のユーザデータ行が選択されている例を示している。
【０３６４】
Ｃ２モジュール２４は、チャネルＣＨ１〜ＣＨ（Ｎ）を転送されるＮ個のユーザデータ行をスヌープする（図５８の（２））。アービタ６０及びインターリーバ６１は、スヌープされたＮ個のユーザデータ行に対してインターリーブ処理を行う。
【０３６５】
ディスパッチャ６２は、リード転送情報ＲＴＩから決定されるユーザデータ列位置情報を用いて、Ｃ２パリティ部を生成するＣ２エンコーダを決定する。そして、アービタ６０及びインターリーバ６１から転送される複数のＣ２シンボルを、Ｃ２エンコーダ２５−１〜２５−Ｚのうちのユーザデータ列位置情報に基づいて決定された１つのＣ２エンコーダに振り分ける。具体的には、ディスパッチャ６２はＥｎｇＩＤ＝１に対応するＣ２シンボルをＣ２エンコーダ２５−１に振り分け、同様に、ＥｎｇＩＤ＝α（αは２以上Ｚ以下の整数）に対応するＣ２シンボルをＣ２エンコーダ２５−αに振り分ける（図５８の（３））。
【０３６６】
Ｃ２エンコーダ２５−１〜２５−Ｚはそれぞれ、ＥｎｇＩＤに対応するＣ２シンボルを単位として、部分Ｃ２パリティを生成する。部分Ｃ２パリティは、Ｃ２パリティ部（すなわち一つのユーザデータ列から生成されるＣ２パリティ部）を生成するための要素である。例えば、ＥｎｇＩＤ＝１に対応するＣ２エンコーダ２５−１は、リード転送情報ＲＴＩに含まれるＣｏｄｅＩＤを用いて、Ｃ２パリティバッファ群６３−１に含まれるＭ個のＣ２パリティバッファのうち、どのＣ２パリティバッファを使用するかを決定する。そして、Ｃ２エンコーダ２５−１は、生成した部分Ｃ２パリティを、Ｃ２パリティバッファ群６３−１に含まれるＣｏｄｅＩＤ＝Ｋ用のＣ２パリティバッファに転送する。この部分Ｃ２パリティは、生成されるべき、ＥｎｇＩＤ＝１に対応するユーザデータ列のＣ２パリティ部の不完全な（未完の）形態である。その後、Ｃ２エンコーダ２５−１は、ＥｎｇＩＤ＝１に対応するＣ２シンボルを受けるたびに、対応する部分Ｃ２パリティを生成し、生成した部分Ｃ２パリティを、当該Ｃ２シンボルのＣｏｄｅＩＤ（今の場合はＣｏｄｅＩＤ＝Ｋ）に基づいて決定されたＣ２パリティバッファに転送する。Ｃ２パリティバッファ内では、すでに格納されている部分Ｃ２パリティと、新たに転送されてきた部分Ｃ２パリティとに対して、排他的論理和演算が行われる。これにより、Ｃ２パリティ部を構成する複数の部分Ｃ２パリティが、順次、更新される（すなわち、部分Ｃ２パリティが未完のＣ２パリティ部に畳み込まれる）。この際、Ｃ２エンコーダ２５−１は、リード転送情報ＲＴＩに含まれるユーザデータ列位置情報を用いて、処理対象のＣ２シンボルのユーザデータ列の位置を特定することで、畳み込みに必要となる部分Ｃ２パリティを生成する。Ｃ２エンコーダ２５−２〜２５−Ｚについても同様である。
【０３６７】
（単一の積符号情報部を転送する動作）
以下に、単一の積符号情報部を転送する具体的な動作について説明する。図５９は、本実施形態に係るバスに転送されるべき積符号情報部の一例を説明する図である。ＣｏｄｅＩＤ＝１、チャネル数Ｎ＝５（チャネルＣＨ１〜ＣＨ５）、エンジンＩＤ数Ｚ＝４（ＥｎｇＩＤ＝１〜４）であるものとする。図５９の１つの四角で示したデータは、１つのユーザデータ行をエンジンＩＤ数Ｚ＝４で分割したＣ２シンボルを示す。
【０３６８】
単一の積符号情報部を転送するので、全てのＣ２シンボルのＣｏｄｅＩＤは１となっている。
【０３６９】
チャネルＣＨ１には、ＰａｇｅＩＤ＝１のユーザデータ行が、ＥｎｇＩＤ＝１、２、３、４、１、２、３、４に対応して分割された８個のＣ２シンボルとして転送される。
【０３７０】
チャネルＣＨ２には、ＰａｇｅＩＤ ＝２のユーザデータ行が、ＥｎｇＩＤ＝１、２、３、４、１、２、３、４に対応して分割された８個のＣ２シンボルとして転送される。
【０３７１】
チャネルＣＨ３には、ＰａｇｅＩＤ ＝３のユーザデータ行が、ＥｎｇＩＤ＝１、２、３、４、１、２、３、４に対応して分割された８個のＣ２シンボルとして転送される。
【０３７２】
チャネルＣＨ４には、ＰａｇｅＩＤ ＝４のユーザデータ行ユニットが、ＥｎｇＩＤ＝１、２、３、４、１、２、３、４に対応して分割された８個のＣ２シンボルとして転送される。
【０３７３】
チャネルＣＨ５には、ＰａｇｅＩＤ ＝５のユーザデータ行が、ＥｎｇＩＤ＝１、２、３、４、１、２、３、４に対応して分割された８個のＣ２シンボルとして転送される。
【０３７４】
図６０は、図５９の積符号情報部が実際にバスを転送される際のデータの流れを説明する図である。図中の白丸は、Ｃ２エンコーダ及びＣ２パリティバッファ群が使用されていない期間を表している。図６０において、処理の開始の時刻をＴ０とする。
【０３７５】
時刻Ｔ０から、チャネルＣＨ１により、ＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２、アービタ６０、及びインターリーバ６１（以下、ディスパッチャ６２等とも称する）は、時刻Ｔ０から、チャネルＣＨ１上のＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１は、時刻Ｔ０から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ０からは、残りのチャネルＣＨ２、ＣＨ３、ＣＨ４、ＣＨ５では、Ｃ２シンボルは転送されず、Ｃ２エンコーダ２５−２、２５−３、２５−４は動作しない。
【０３７６】
時刻Ｔ１から、チャネルＣＨ１によりＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルが送信され、チャネルＣＨ２によりＰａｇｅＩＤ＝２かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ１から、チャネルＣＨ１上のＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルをＣ２エンコーダ２５−２に転送し、チャネルＣＨ２上のＰａｇｅＩＤ＝２かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１、２５−２は、時刻Ｔ１から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ１からは、残りのチャネルＣＨ３、ＣＨ４、ＣＨ５では、Ｃ２シンボルは転送されず、Ｃ２エンコーダ２５−３、２５−４は動作しない。
【０３７７】
時刻Ｔ２から、チャネルＣＨ１によりＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝３のＣ２シンボルが送信され、チャネルＣＨ２によりＰａｇｅＩＤ＝２かつＥｎｇＩＤ＝２のＣ２シンボルが送信され、チャネルＣＨ３によりＰａｇｅＩＤ＝３かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ２から、チャネルＣＨ１上のＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝３のＣ２シンボルをＣ２エンコーダ２５−３に転送し、チャネルＣＨ２上のＰａｇｅＩＤ＝２かつＥｎｇＩＤ＝２のＣ２シンボルをＣ２エンコーダ２５−２に転送し、チャネルＣＨ３上のＰａｇｅＩＤ＝３かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１、２５−２、２５−３は、時刻Ｔ２から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ２からは、残りのチャネルＣＨ４、ＣＨ５では、Ｃ２シンボルは転送されず、Ｃ２エンコーダ２５−４は動作しない。
【０３７８】
時刻Ｔ３から、チャネルＣＨ１によりＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝４のＣ２シンボルが送信され、チャネルＣＨ２によりＰａｇｅＩＤ＝２かつＥｎｇＩＤ＝３のＣ２シンボルが送信され、チャネルＣＨ３によりＰａｇｅＩＤ＝３かつＥｎｇＩＤ＝２のＣ２シンボルが送信され、チャネルＣＨ４によりＰａｇｅＩＤ＝４かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ３から、チャネルＣＨ１上のＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝４のＣ２シンボルをＣ２エンコーダ２５−４に転送し、チャネルＣＨ２上のＰａｇｅＩＤ＝２かつＥｎｇＩＤ＝３のＣ２シンボルをＣ２エンコーダ２５−３に転送し、チャネルＣＨ３上のＰａｇｅＩＤ＝３かつＥｎｇＩＤ＝２のＣ２シンボルをＣ２エンコーダ２５−２に転送し、チャネルＣＨ４上のＰａｇｅＩＤ＝４かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１、２５−２、２５−３、２５−４は、時刻Ｔ３から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ３からは、残りのチャネルＣＨ５では、Ｃ２シンボルは転送されない。
【０３７９】
時刻Ｔ３において、Ｃ２エンコーダ２５−１〜２５−４の全てが並列動作している。時刻Ｔ３より後では、Ｃ２エンコーダ２５−１〜２５−４及びＣ２パリティバッファ群６３−１〜６３−４は、並列動作している。すなわち、Ｃ２エンコーダ及びＣ２パリティバッファ群の使用率は１００％になっている。
【０３８０】
時刻Ｔ４から、チャネルＣＨ２によりＰａｇｅＩＤ＝２かつＥｎｇＩＤ＝４のＣ２シンボルが送信され、チャネルＣＨ３によりＰａｇｅＩＤ＝３かつＥｎｇＩＤ＝３のＣ２シンボルが送信され、チャネルＣＨ４によりＰａｇｅＩＤ＝４かつＥｎｇＩＤ＝２のＣ２シンボルが送信され、チャネルＣＨ５によりＰａｇｅＩＤ＝５かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ４から、チャネルＣＨ２上のＰａｇｅＩＤ＝２かつＥｎｇＩＤ＝４のＣ２シンボルをＣ２エンコーダ２５−４に転送し、チャネルＣＨ３上のＰａｇｅＩＤ＝３かつＥｎｇＩＤ＝３のＣ２シンボルをＣ２エンコーダ２５−３に転送し、チャネルＣＨ４上のＰａｇｅＩＤ＝４かつＥｎｇＩＤ＝２のＣ２シンボルをＣ２エンコーダ２５−２に転送し、チャネルＣＨ５上のＰａｇｅＩＤ＝５かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１〜２５−４は、時刻Ｔ４から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ４からは、残りのチャネルＣＨ１では、Ｃ２シンボルは転送されない。時刻Ｔ４からは、ＥｎｇＩＤ＝１のＣ２シンボルのうち、ＰａｇｅＩＤ＝５のＣ２シンボルがチャネルＣＨ５によって転送され、このＣ２シンボルがＣ２エンコーダ２５―１により処理されている。従って、チャネルＣＨ１でＥｎｇＩＤ＝１のＣ２シンボルが送信されても、Ｃ２エンコーダ２５−１が受け付けられないからである。
【０３８１】
時刻Ｔ５からの動作は、時刻Ｔ１からのものと同じである。
【０３８２】
なお、エンジンＩＤ数Ｚ＝５かつチャネル数Ｎ＝５である場合、エンジンＩＤ数とチャネル数とが同じであるため、各チャネルにおいて、データ転送の隙間がなくなる。エンジンＩＤ数Ｚ＝４かつチャネル数Ｎ＝６である場合、各チャネルにおいて、データ転送の隙間は、部分Ｃ２パリティを２つ生成する時間になる。
【０３８３】
（複数の積符号情報部を転送する動作）
次に、複数の積符号情報部を転送する具体的な動作について説明する。図６１は、本実施形態に係るバスに転送されるべき積符号情報部の別の一例を説明する図である。コードＩＤ数Ｍ＝５（ＣｏｄｅＩＤ＝１〜５）、チャネル数Ｎ＝５（チャネルＣＨ１〜ＣＨ５）、エンジンＩＤ数Ｚ＝４（ＥｎｇＩＤ＝１〜４）であるものとする。
【０３８４】
チャネルＣＨ１には、ＣｏｄｅＩＤ＝１の積符号情報部が転送される。より具体的には、チャネルＣＨ１には、ＰａｇｅＩＤ＝１のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送され、次いで、ＰａｇｅＩＤ＝２のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。同様に、チャネルＣＨ１には、ＣｏｄｅＩＤ＝１のＰａｇｅＩＤ＝３、４…の昇順で、ＰａｇｅＩＤごとにＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。
【０３８５】
チャネルＣＨ２には、ＣｏｄｅＩＤ＝２の積符号情報部が転送される。より具体的には、チャネルＣＨ２には、ＰａｇｅＩＤ＝２のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送され、次いで、ＰａｇｅＩＤ＝２のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。同様に、チャネルＣＨ２には、ＣｏｄｅＩＤ＝２のＰａｇｅＩＤ＝３、４…の昇順で、ＰａｇｅＩＤごとにＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。
【０３８６】
チャネルＣＨ３には、ＣｏｄｅＩＤ＝３の積符号情報部が転送される。より具体的には、チャネルＣＨ３には、ＰａｇｅＩＤ＝３のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送され、次いで、ＰａｇｅＩＤ＝２のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。同様に、チャネルＣＨ１には、ＣｏｄｅＩＤ＝３のＰａｇｅＩＤ＝３、４…の昇順で、ＰａｇｅＩＤごとにＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。
【０３８７】
チャネルＣＨ４には、ＣｏｄｅＩＤ＝４の積符号情報部が転送される。より具体的には、チャネルＣＨ４には、ＰａｇｅＩＤ＝４のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送され、次いで、ＰａｇｅＩＤ＝２のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。同様に、チャネルＣＨ４には、ＣｏｄｅＩＤ＝４のＰａｇｅＩＤ＝３、４…の昇順で、ＰａｇｅＩＤごとにＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。
【０３８８】
チャネルＣＨ５には、ＣｏｄｅＩＤ＝５の積符号情報部が転送される。より具体的には、チャネルＣＨ５には、ＰａｇｅＩＤ＝５のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送され、次いで、ＰａｇｅＩＤ＝２のユーザデータ行のＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。同様に、チャネルＣＨ５には、ＣｏｄｅＩＤ＝５のＰａｇｅＩＤ＝３、４…の昇順で、ＰａｇｅＩＤごとにＥｎｇＩＤ＝１、２、３、４に対応するＣ２シンボルが順に転送される。
【０３８９】
図６２は、図６０と同様に、図６１の積符号情報部が実際にバスを転送される際のデータの流れを説明する図である。
【０３９０】
時刻Ｔ０から、チャネルＣＨ１により、ＣｏｄｅＩＤ＝１かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ０から、チャネルＣＨ１上のＣｏｄｅＩＤ＝１かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１は、時刻Ｔ０から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ０からは、残りのチャネルＣＨ２、ＣＨ３、ＣＨ４、ＣＨ５では、Ｃ２シンボルは転送されず、Ｃ２エンコーダ２５−２、２５−３、２５−４は動作しない。
【０３９１】
時刻Ｔ１から、チャネルＣＨ１によりＣｏｄｅＩＤ＝１かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルが送信され、チャネルＣＨ２によりＣｏｄｅＩＤ＝２かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ１から、チャネルＣＨ１上のＣｏｄｅＩＤ＝１かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルをＣ２エンコーダ２５−２に転送し、チャネルＣＨ２上のＣｏｄｅＩＤ＝２かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１、２５−２は、時刻Ｔ１から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ１からは、残りのチャネルＣＨ３、ＣＨ４、ＣＨ５では、Ｃ２シンボルは転送されず、Ｃ２エンコーダ２５−３、２５−４は動作しない。
【０３９２】
時刻Ｔ２から、チャネルＣＨ１によりＣｏｄｅＩＤ＝１かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝３のＣ２シンボルが送信され、チャネルＣＨ２によりＣｏｄｅＩＤ＝２かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルが送信され、チャネルＣＨ３によりＣｏｄｅＩＤ＝３かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ２から、チャネルＣＨ１上のＣｏｄｅＩＤ＝１かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝３のＣ２シンボルをＣ２エンコーダ２５−３に転送し、チャネルＣＨ２上のＣｏｄｅＩＤ＝２かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルをＣ２エンコーダ２５−２に転送し、チャネルＣＨ３上のＣｏｄｅＩＤ＝３かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１、２５−２、２５−３は、時刻Ｔ２から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ２からは、残りのチャネルＣＨ４、ＣＨ５では、Ｃ２シンボルは転送されず、Ｃ２エンコーダ２５−４は動作しない。
【０３９３】
時刻Ｔ３から、チャネルＣＨ１によりＣｏｄｅＩＤ＝１かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝４のＣ２シンボルが送信され、チャネルＣＨ２によりＣｏｄｅＩＤ＝２かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝３のＣ２シンボルが送信され、チャネルＣＨ３によりＣｏｄｅＩＤ＝３かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルが送信され、チャネルＣＨ４によりＣｏｄｅＩＤ＝４かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ３から、チャネルＣＨ１上のＣｏｄｅＩＤ＝１かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝４のＣ２シンボルをＣ２エンコーダ２５−４に転送し、チャネルＣＨ２上のＣｏｄｅＩＤ＝２かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝３のＣ２シンボルをＣ２エンコーダ２５−３に転送し、チャネルＣＨ３上のＣｏｄｅＩＤ＝３かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルをＣ２エンコーダ２５−２に転送し、チャネルＣＨ４上のＣｏｄｅＩＤ＝４かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１、２５−２、２５−３、２５−４は、時刻Ｔ３から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ３からは、残りのチャネルＣＨ５では、Ｃ２シンボルは転送されない。
【０３９４】
複数の積符号情報部を転送する場合においても、時刻Ｔ３より後では、Ｃ２エンコーダ２５−１〜２５−４及びＣ２パリティバッファ群６３−１〜６３−４の全ては、並列動作している。すなわち、Ｃ２エンコーダ及びＣ２パリティバッファ群の使用率は１００％になっている。
【０３９５】
時刻Ｔ４から、チャネルＣＨ２によりＣｏｄｅＩＤ＝２かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝４のＣ２シンボルが送信され、チャネルＣＨ３によりＣｏｄｅＩＤ＝３かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝３のＣ２シンボルが送信され、チャネルＣＨ４によりＣｏｄｅＩＤ＝４かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルが送信され、チャネルＣＨ５によりＣｏｄｅＩＤ＝５かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルが送信される。ディスパッチャ６２等は、時刻Ｔ４から、チャネルＣＨ２上のＣｏｄｅＩＤ＝２かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝４のＣ２シンボルをＣ２エンコーダ２５−４に転送し、チャネルＣＨ３上のＣｏｄｅＩＤ＝３かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝３のＣ２シンボルをＣ２エンコーダ２５−３に転送し、チャネルＣＨ４上のＣｏｄｅＩＤ＝４かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝２のＣ２シンボルをＣ２エンコーダ２５−２に転送し、チャネルＣＨ５上のＣｏｄｅＩＤ＝５かつＰａｇｅＩＤ＝１かつＥｎｇＩＤ＝１のＣ２シンボルをＣ２エンコーダ２５−１に転送する。Ｃ２エンコーダ２５−１、２５−２、２５−３、２５−４は、時刻Ｔ４から、受けたＣ２シンボルについての部分Ｃ２パリティを生成する。時刻Ｔ４からは、残りのチャネルＣＨ１では、Ｃ２シンボルは転送されない。時刻Ｔ４からは、ＥｎｇＩＤ＝１のＣ２シンボルのうち、ＣｏｄｅＩＤ＝５かつＰａｇｅＩＤ＝１のＣ２シンボルがチャネルＣＨ５によって転送され、このＣ２シンボルがＣ２エンコーダ２５―１により処理されている。従って、ＣＨ１でＥｎｇＩＤ＝１のＣ２シンボルが送信されても、Ｃ２エンコーダ２５−１が受け付けられないからである。
【０３９６】
時刻Ｔ５からの動作は、ページＩＤが２であることを除いて、時刻Ｔ１から時刻Ｔ４までのものと同じである。さらに、時刻Ｔ１から時刻Ｔ４までの動作が、ＰａｇｅＩＤがインクリメントされながら、繰り返される。
【０３９７】
［８−３］  復号化について
復号化についても、符号化と同様に、インターリーブ処理が行われる。図６３は、本実施形態に係る復号化に関連する回路構成を説明するブロック図である。
【０３９８】
Ｃ１モジュール２０は、ライト転送情報ＷＴＩをＣ２モジュール２４に送信する。ライト転送情報ＷＴＩは、現在転送中のデータに関するＣｏｄｅＩＤ、ページＩＤ、及びＣ２位置情報を含む。Ｃ２位置情報は、Ｃ１×Ｃ２フレーム内の列、すなわち１つのＣ２フレームがＣ１×Ｃ２フレーム内でどの列に該当するのかを特定する情報である。
【０３９９】
Ｃ２モジュール２４は、アービタ６０、インターリーバ６１、ディスパッチャ６２、ＥｎｇＩＤに対応するＺ個のＣ２デコーダ２６−１〜２６−Ｚ、及びＥｎｇＩＤに対応するＺ個のＣ２シンドロームバッファ群（Ｃ２  ｓｙｎｄ  ｂｕｆ）２８−１〜２８−Ｚを備える。
【０４００】
Ｃ２デコーダ２６−１は、ＥｎｇＩＤ＝１に対応するＣ２シンボルの組を用いて、Ｃ２シンドロームを生成する。すなわち、Ｃ２デコーダ２６−１は、１つのＣ１×Ｃ２フレームに含まれるＥｎｇＩＤ＝１に対応するＪ個のＣ２シンボルの組から、対応するＣ２シンドロームを生成する。同様にＣ２デコーダ２６−１は、別のＣ１×Ｃ２フレームに含まれるＥｎｇＩＤ＝１に対応するＪ個のＣ２シンボルの組から別のＣ２シンドロームを生成する。同様に、Ｃ２デコーダ２６−２〜２６−Ｚの各々は、ＥｎｇＩＤに対応するＣ２シンドームを生成する。Ｃ２デコーダ２６−１〜２６−Ｚは、生成したＣ２シンドロームをＣ２シンドロームバッファ群２８−１〜２８−Ｚにそれぞれ転送する。
【０４０１】
Ｃ２シンドロームバッファ群２８−１〜２８−Ｚの各々は、ＣｏｄｅＩＤ＝１〜Ｍに対応したＭ個のＣ２シンドロームバッファを備える。Ｍ個のＣ２シンドロームバッファはそれぞれ、ＣｏｄｅＩＤ＝１〜Ｍに対応するＣ２シンドロームを一時的に格納する。
【０４０２】
図６４は、本実施形態に係る復号化のデータフローを説明する図である。
【０４０３】
プロセッサ１１は、Ｃ１×Ｃ２フレームを構成するＪ個のＣ１フレームからＮ個を選択し、チャネルＣＨ１〜ＣＨ（Ｎ）を介して、Ｃ１モジュール２０からＤＢＵＦ１４に転送する（図６４の（１））。図６４は、ＰａｇｅＩＤ＝１〜Ｎに対応するＮ個のＣ１フレームが選択されている例を示している。
【０４０４】
Ｃ２モジュール２４は、チャネルＣＨ１〜ＣＨ（Ｎ）を転送されるＮ個のＣ１フレームをスヌープする（図６４の（２））。アービタ６０、インターリーバ６１、及びディスパッチャ６２は、スヌープされたＮ個のＣ１フレームに対してインターリーブ処理を行う。復号化時のインターリーブ処理は、前述した符号化時のインターリーブ処理と同じである。
【０４０５】
［８−４］  第８実施形態の効果
第８実施形態によれば、チャネルＣＨ１〜ＣＨ（Ｎ）を転送されるデータを並列処理することが可能である。
【０４０６】
また、Ｃ２エンコーダ及びＣ２パリティバッファ群の使用率１００％である期間では、ＤＢＵＦ及びＣ１モジュール間の実行スループットは、全てのＣ２エンコーダ及びＣ２パリティバッファ群の処理速度とほぼ等しくなる。これにより、データ転送速度を高速化することができる。復号化時においても同様の効果が得られる。
【０４０７】
［９］  その他の変形例
上記実施形態では、不揮発性メモリとして、ＮＡＮＤ型フラッシュメモリを例に挙げて説明したが、これに限定されず、他の種類の不揮発性メモリ及び不揮発性半導体メモリに適用することができる。さらに、上記実施形態は、不揮発性メモリに限定されず、揮発性メモリに適用しても良い。
【０４０８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０４０９】
１…ホスト装置、２…メモリシステム、３…ＮＡＮＤ型フラッシュメモリ、４…メモリコントローラ、１０…ホストインターフェース回路、１１…プロセッサ、１４…データバッファ、１６…ＮＡＮＤインターフェース回路、１７…バス、１８…ホストバス、１９…ＮＡＮＤバス、２０…Ｃ１モジュール、２１…Ｃ１エンコーダ、２２…Ｃ１デコーダ、２３…ＣＲＣ回路、２４…Ｃ２モジュール、２５…Ｃ２エンコーダ、２６…Ｃ２デコーダ、２７…データバッファ、２８…シンドロームバッファ、３０…ディスパッチャ、３１…シンドローム生成部、３２，３３…インターフェース回路、３４〜３６…レジスタ、３７…Ｃ１デコーダ、３８…ＣＲＣ回路、３９，４０…セレクタ、４１…シンドローム生成回路、４２…シンドロームキャンセル回路、４３…シンドローム更新回路、４４，４６…セレクタ、４５…誤り情報生成回路、４７…シンドローム併合回路、５０…Ｃ１軟判定デコーダ、５１…シンドロームキャンセル回路、５２…シンドローム更新回路、５３…バスインターフェース回路、６０…アービタ、６１…インターリーバ、６２…ディスパッチャ、６３…パリティバッファ
【図１】
2020195007.tif 000003
【図２】
2020195007.tif 000004
【図３】
2020195007.tif 000005
【図４】
2020195007.tif 000006
【図５】
2020195007.tif 000007
【図６Ａ】
2020195007.tif 000008
【図６Ｂ】
2020195007.tif 000009
【図７】
2020195007.tif 000010
【図８】
2020195007.tif 000011
【図９】
2020195007.tif 000012
【図１０】
2020195007.tif 000013
【図１１】
2020195007.tif 000014
【図１２】
2020195007.tif 000015
【図１３】
2020195007.tif 000016
【図１４】
2020195007.tif 000017
【図１５】
2020195007.tif 000018
【図１６Ａ】
2020195007.tif 000019
【図１６Ｂ】
2020195007.tif 000020
【図１６Ｃ】
2020195007.tif 000021
【図１７Ａ】
2020195007.tif 000022
【図１７Ｂ】
2020195007.tif 000023
【図１７Ｃ】
2020195007.tif 000024
【図１７Ｄ】
2020195007.tif 000025
【図１８】
2020195007.tif 000026
【図１９】
2020195007.tif 000027
【図２０】
2020195007.tif 000028
【図２１】
2020195007.tif 000029
【図２２】
2020195007.tif 000030
【図２３】
2020195007.tif 000031
【図２４】
2020195007.tif 000032
【図２５】
2020195007.tif 000033
【図２６】
2020195007.tif 000034
【図２７】
2020195007.tif 000035
【図２８】
2020195007.tif 000036
【図２９】
2020195007.tif 000037
【図３０】
2020195007.tif 000038
【図３１】
2020195007.tif 000039
【図３２】
2020195007.tif 000040
【図３３】
2020195007.tif 000041
【図３４Ａ】
2020195007.tif 000042
【図３４Ｂ】
2020195007.tif 000043
【図３５Ａ】
2020195007.tif 000044
【図３５Ｂ】
2020195007.tif 000045
【図３６】
2020195007.tif 000046
【図３７】
2020195007.tif 000047
【図３８】
2020195007.tif 000048
【図３９】
2020195007.tif 000049
【図４０】
2020195007.tif 000050
【図４１】
2020195007.tif 000051
【図４２】
2020195007.tif 000052
【図４３】
2020195007.tif 000053
【図４４】
2020195007.tif 000054
【図４５】
2020195007.tif 000055
【図４６】
2020195007.tif 000056
【図４７Ａ】
2020195007.tif 000057
【図４７Ｂ】
2020195007.tif 000058
【図４７Ｃ】
2020195007.tif 000059
【図４７Ｄ】
2020195007.tif 000060
【図４７Ｅ】
2020195007.tif 000061
【図４７Ｆ】
2020195007.tif 000062
【図４８Ａ】
2020195007.tif 000063
【図４８Ｂ】
2020195007.tif 000064
【図４８Ｃ】
2020195007.tif 000065
【図４８Ｄ】
2020195007.tif 000066
【図４８Ｅ】
2020195007.tif 000067
【図４９】
2020195007.tif 000068
【図５０】
2020195007.tif 000069
【図５１】
2020195007.tif 000070
【図５２】
2020195007.tif 000071
【図５３】
2020195007.tif 000072
【図５４】
2020195007.tif 000073
【図５５】
2020195007.tif 000074
【図５６Ａ】
2020195007.tif 000075
【図５６Ｂ】
2020195007.tif 000076
【図５７】
2020195007.tif 000077
【図５８】
2020195007.tif 000078
【図５９】
2020195007.tif 000079
【図６０】
2020195007.tif 000080
【図６１】
2020195007.tif 000081
【図６２】
2020195007.tif 000082
【図６３】
2020195007.tif 000083
【図６４】
2020195007.tif 000084