(57)【特許請求の範囲】
【請求項１】
不揮発性メモリから、リードコマンドに含まれる第１の論理アドレスにより指定されるデータ及び当該データを特定する第２の論理アドレスを読み出すリード手段と、
前記リード手段により読み出されたデータ及び前記第２の論理アドレスに対する誤り検出処理を実行する誤り検出手段と、
前記誤り検出手段による検出結果に基づいて誤り訂正が不能である場合に、前記第１の論理アドレスと前記第２の論理アドレスとに基づいて再度の誤り検出処理を前記誤り検出手段に実行させる制御手段と
を具備するデータ記憶装置。
【請求項２】
前記制御手段は、
前記第１の論理アドレスと前記第２の論理アドレスとの差分を算出し、
前記差分に基づいて前記再度の誤り検出処理を前記誤り検出手段に実行させる請求項１に記載のデータ記憶装置。
【請求項３】
前記制御手段は、
前記第２の論理アドレスを前記第１の論理アドレスに変更し、変更後の前記第２の論理アドレスに基づいて前記再度の誤り検出処理を前記誤り検出手段に実行させる請求項１に記載のデータ記憶装置。
【請求項４】
前記誤り検出手段は、前記データ及び前記第２の論理アドレスに対するシンドローム計算を実行し、当該シンドローム計算結果に基づいて最初の誤り検出処理を行なう手段を含み、
前記制御手段は、
前記差分に基づいて前記シンドローム計算結果を補正し、
前記補正値に基づいて前記再度の誤り検出処理を前記誤り検出手段に実行させる請求項２に記載のデータ記憶装置。
【請求項５】
前記制御手段は、
前記第２の論理アドレスに対するシンドロームを前記第１の論理アドレスに対するシンドロームに補正する手段を含む請求項４に記載のデータ記憶装置。
【請求項６】
前記制御手段は、
前記差分がない場合に、前記誤り訂正が不能であることを確定する手段を含む請求項２に記載のデータ記憶装置。
【請求項７】
前記制御手段は、
前記再度の誤り検出処理による検出結果に基づいて誤り訂正が不能である場合には、前記誤り訂正が不能であることを確定する手段を含む請求項１に記載のデータ記憶装置。
【請求項８】
前記誤り検出手段は、前記データ及び前記第２の論理アドレスに対するシンドローム計算を実行し、当該シンドローム計算結果に基づいて最初の誤り検出処理を行なう手段を含み、
前記制御手段は、
前記第１の論理アドレスと前記第２の論理アドレスとに基づいて補正した補正後の前記第２の論理アドレス及び前記データに対する前記シンドローム計算を再実行し、
前記再実行後のシンドローム計算結果に基づいて前記再度の誤り検出処理を行なう手段を含む請求項１に記載のデータ記憶装置。
【請求項９】
不揮発性メモリから、リードコマンドに含まれる第１の論理アドレスにより指定されるデータ及び当該データを特定する第２の論理アドレスを読み出すリード手段を有するデータ記憶装置に適用する誤り検出訂正方法であって、
前記リード手段により読み出されたデータ及び前記第２の論理アドレスに対する誤り検出処理を実行し、
前記誤り検出処理による検出結果に基づいて誤り訂正が不能である場合に、前記第１の論理アドレスと前記第２の論理アドレスとに基づいて再度の誤り検出処理を実行する誤り検出訂正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを記憶媒体とするデータ記憶装置に関する。
【背景技術】
【０００２】
近年、データ記憶装置として、書き換え可能な不揮発性メモリであるNAND型フラッシュメモリ（以下、単にフラッシュメモリと表記する場合がある）を記憶媒体とするＳＳＤ（solid state drive）の開発が推進されている。
【０００３】
ＳＳＤは、フラッシュメモリからアクセス対象のデータを読み出すと、ホストシステムに転送する前に、誤り検出訂正（ＥＣＣ:error checking and correcting）処理を実行する。以下、誤り検出訂正処理をＥＣＣ処理と表記する場合がある。
【０００４】
ＳＳＤは、ＥＣＣ処理により誤り（エラー）が検出されないデータまたはエラー訂正後のデータを、アクセス要求を行なったホストシステムに転送する。ところで、ＳＳＤは、データ読み出し動作時に、アクセス対象のデータ（ユーザデータと呼ぶ場合がある）だけでなく、所定の単位（例えばセクタ）のデータフォーマットに含まれる論理ブロックアドレス（ＬＢＡ）などのデータに対してもＥＣＣ処理を実行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１０８０２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＳＳＤでは、ＥＣＣ処理によりエラーが検出された場合には、エラー訂正処理が実行される。エラー訂正処理では、予めエラー訂正能力が決定されており、その限界を超えた場合にはエラー訂正不能と判定される。具体的には、ユーザデータとＬＢＡを含めて、例えば８ビットのエラーまで訂正可能である場合に、９ビットのエラーが検出されるとエラー訂正不能と判定される。
【０００７】
ＳＳＤは、エラー訂正不能と判定された場合には、フラッシュメモリからデータを再度読み出し、ＥＣＣ処理を再実行するような処理を行なう。このような再度の読み出し処理を伴うＥＣＣ処理の再実行は、ＳＳＤのリード処理効率を低下させる要因となる。
【０００８】
そこで、本発明の目的は、エラー訂正不能と判定された場合に、ＥＣＣ処理の再実行を効率的に行なうことを実現し、リード処理効率を向上できるデータ記憶装置を提供することにある。
【課題を解決するための手段】
【０００９】
実施形態によれば、データ記憶装置は、リード手段と、誤り検出手段と、制御手段とを具備する。前記リード手段は、不揮発性メモリから、リードコマンドに含まれる第１の論理アドレスにより指定されるデータ及び当該データを特定する第２の論理アドレスを読み出す。前記誤り検出手段は、前記リード手段により読み出されたデータ及び前記第２の論理アドレスに対する誤り検出処理を実行する。前記制御手段は、前記誤り検出手段による検出結果に基づいて誤り訂正が不能である場合に、前記第１の論理アドレスと前記第２の論理アドレスとに基づいて再度の誤り検出処理を前記誤り検出手段に実行させる。
【図面の簡単な説明】
【００１０】
【図１】実施形態に関するデータ記憶装置の構成を説明するためのブロック図。
【図２】実施形態に関するＥＣＣモジュールの構成を説明するためのブロック図。
【図３】実施形態に関するデータフォーマットを説明するための図。
【図４】実施形態に関するフラッシュメモリのデータ記憶状態を説明するための図。
【図５】実施形態に関するコマンドフォーマットを説明するための図。
【図６】実施形態に関するＥＣＣ処理の手順を説明するためのフローチャート。
【図７】実施形態に関するＥＣＣエンコーダの一例を示す図。
【図８】実施形態に関するＥＣＣデコーダの一例を示す図。
【発明を実施するための形態】
【００１１】
以下図面を参照して、実施形態を説明する。
【００１２】
［データ記憶装置の構成］
図１は、実施形態のデータ記憶装置の構成を示すブロック図である。
【００１３】
図１に示すように、実施形態のデータ記憶装置はＳＳＤ（solid state drive）であり、大別してＳＳＤコントローラ１０と、NAND型フラッシュメモリ（フラッシュメモリ）１９とを有する。フラッシュメモリ１９はＳＳＤのデータ記憶媒体であり、複数のチャネルに対応するフラッシュメモリ１９-1〜１９-nからなる。
【００１４】
ＳＳＤコントローラ１０は、ホストインターフェース１１と、マイクロプロセッサ（ＭＰＵ）１２と、コマンド処理モジュール１３と、レジスタ群１４と、フラッシュメモリコントローラ（以下、メモリコントローラと表記する）１５とを有する。
【００１５】
ホストインターフェース１１は、ＳＳＤとホストシステム（例えばパーソナルコンピュータ）２０とのインターフェースであり、ホストシステム２０との間でコマンドやデータの転送を制御する。ホストインターフェース１１は、ホストシステム２０からのデータアクセス要求に応じて、後述するようなフォーマットからなるコマンド１１１を生成してＭＰＵ１２に転送する。
【００１６】
ＭＰＵ１２は図示しないシステムバスを介して、ホストインターフェース１１、コマンド処理モジュール１３、レジスタ群１４及びメモリコントローラ１５と接続し、各種の制御を実行する。ＭＰＵ１２は、レジスタ群１４に対して各種の制御に必要なコマンド、データ、値などを設定する。
【００１７】
コマンド処理モジュール１３は、ＭＰＵ１２によりレジスタ群１４のコマンドレジスタに設定されたコマンド１１１を解釈し、メモリコントローラ１５に対してリードコマンド又はライトコマンド等のコマンドを発行する。
【００１８】
メモリコントローラ１５は、調停モジュール（以下、アービタと表記する）１６と、ＮＡＮＤコントローラ１７とを有する。ＮＡＮＤコントローラ１７は、ライト動作、リード動作、イレース（消去）動作などに関して、フラッシュメモリ１９を制御する。ＮＡＮＤコントローラ１７は、フラッシュメモリ１９-1〜１９-nをそれぞれ個別に制御するチャネル毎のＮＡＮＤコントローラ１７-1〜１７-nからなる。さらに、ＮＡＮＤコントローラ１７-1〜１７-nはそれぞれ、後述する誤り検出訂正モジュール（以下、ＥＣＣモジュールと表記する）１８-1〜１８-n及びリードモジュールを有する。図示しないリードモジュールは、フラッシュメモリ１９-1〜１９-nからデータを読み出すリード動作を実行する。
【００１９】
なお、本実施形態のＳＳＤでは、ライト動作は、各チャネルのフラッシュメモリ１９-1〜１９-nに対して、データを並列に書き込むマルチチャネル方式である。また、フラッシュメモリに対するライト動作はプログラム動作と呼ばれる場合がある。
【００２０】
アービタ１６は、ＮＡＮＤコントローラ１７-1〜１７-nに接続し、ライト動作、リード動作、イレース動作のタイミングを調整する。また、アービタ１６は、ＮＡＮＤコントローラ１７-1〜１７-nに対して、コマンドやデータの転送を調整する。
【００２１】
図２は、ＮＡＮＤコントローラ１７-1〜１７-nに設けられるＥＣＣモジュール１８-1〜１８-nの構成を示すブロック図である。各ＥＣＣモジュール１８-1〜１８-nは同一構成である。ここでは、便宜的にＥＣＣモジュール１８をそれぞれの代表として説明する。
【００２２】
図２に示すように、ＥＣＣモジュール１８は、データバッファ１８１と、エラー訂正部１８２と、シンドローム計算部１８３と、エラー検出器１８４と、エラー特定部１８５と、ＬＢＡ差分計算部１８６と、シンドローム補正計算部１８７と、補正切り換え部１８８とを有する。
【００２３】
データバッファ１８１は、フラッシュメモリ１９から読み出されたセクタ単位のデータ１００を保持し、エラー訂正部１８２及びシンドローム計算部１８３に出力する。データ１００は、後述するように、ユーザデータ１１０と論理ブロックアドレス（以下、ＬＢＡと表記する）１２０を有する。エラー訂正部１８２は、エラー訂正処理の準備が完了すると、データバッファ１８１から出力されるデータに対して、エラー特定部１８５からのエラー位置情報に基づいてデータのエラー（エラービット）を訂正する。
【００２４】
シンドローム計算部１８３は、データバッファ１８１からのデータに対してシンドローム（syndrome）を算出する。シンドロームは、エラー位置を特定するための情報である。エラー検出器１８４は、シンドローム計算部１８３で算出されたシンドロームを使用してエラーを検出する。即ち、エラー検出器１８４は、エラーの有無を判定し、エラー判定結果２１０を出力する。エラー判定結果２１０は、アービタ１６を経由してＭＰＵ１２に転送される。エラー検出器１８４は、エラー判定結果としてエラーを検出した場合には、エラー特定部１８５にシンドロームを引き渡す。
【００２５】
エラー特定部１８５はエラー検出器１８４からのシンドロームに基づいて、エラー位置を特定し、当該エラー位置情報をエラー訂正部１８２に出力する。エラー訂正部１８２は、エラー訂正後のデータ２００を出力する。
【００２６】
ＬＢＡ差分計算部１８６は、フラッシュメモリ１９から読み出されたデータ１００に含まれるＬＢＡ（値Ｍ）１２０と、リードコマンドの引数として与えられたＬＢＡ（値Ｃ）１１３とを入力とし、これらの差分を算出する。ＬＢＡ差分計算部１８６は、計算結果をシンドローム補正計算部１８７に出力する。ＬＢＡ（値Ｃ）は、後述するように、ホストインターフェース１１により生成されて、レジスタ群１４に設定されているコマンドフォーマット１１１に含まれる論理ブロックアドレスである。
【００２７】
シンドローム補正計算部１８７は、ＬＢＡ差分計算部１８６からの情報（差分結果）に基づいて、シンドローム計算部１８３で算出されたシンドロームに対する補正値を算出する。補正切り換え部１８８は、補正オンの場合に補正値をシンドローム計算部１８３に出力する。補正切り換え部１８８は、エラー検出器１８４からの補正オン／オフの切り替え指示に応じて、補正オンの場合には補正値を出力し、補正オフの場合には補正値の出力を停止する。
【００２８】
ここで、エラー検出器１８４は、エラー検出結果（エラー判定）に基づいて、エラー訂正部１８２でのエラー訂正能力を超えるエラー状態を検出した場合には、訂正不能であると判定し、補正切り換え部１８８に対して補正オンを指示する。逆に、エラー検出器１８４は、検出したエラー状態がエラー訂正部１８２でエラー訂正可能であれば、補正切り換え部１８８に対して補正オフを指示する。エラー訂正部１８２でのエラー訂正能力とは、データ１００のビット数で、例えば８ビットまでのエラーに対してエラー訂正可能であると想定する。従って、エラー検出器１８４は、９ビット以上のエラーを検出した場合には、エラー訂正不能であると判定する。
【００２９】
［ＥＣＣ処理］
以下、図６のフローチャートを参照して、本実施形態のＥＣＣ処理を説明する。
【００３０】
ＳＳＤでは、ＮＡＮＤコントローラ１７-1〜１７-nはそれぞれ、コマンド処理モジュール１３により発行されるリードコマンドに応じて、フラッシュメモリ１９-1〜１９-nからＬＢＡ（値Ｃ）により指定されるＬＢＡ（値Ｍ）のデータを読み出す（ブロック６００）。ＥＣＣモジュール１８-1〜１８-nはそれぞれ、読み出されたデータに対するＥＣＣ処理を実行する。なお、本実施形態では、便宜的に１つのチャネルに対するデータ読み出し動作と、ＥＣＣ処理を説明する。
【００３１】
図３は、データフォーマットを示す図である。図３に示すように、１エントリとして例えばセクタ単位のデータフォーマット１００は大別して、ユーザデータ１１０とＬＢＡ（値Ｍ）１２０からなる。ユーザデータ１１０は、ホストシステム２０からのアクセス対象データである。ＬＢＡ（Ｍ）１２０は、当該ユーザデータ１１０を指定するための指定データであり、フラッシュメモリ１９内の格納位置を示すアドレスデータである。図４に示すように、フラッシュメモリ１９には、図３に示すデータフォーマット１００からなるデータ群が整列して記憶されている。
【００３２】
図５は、コマンド処理モジュール１３により発行されて、ＳＳＤコントローラ１０内で取り扱われるコマンド１１１のフォーマットである。コマンドフォーマットは、フラッシュメモリ１９に対してデータの読み出し又はライトを区別するためのフラグ１１２、アクセス対象データを指定するＬＢＡ（Ｃ）１１３、及びその他の属性を示すデータ１１４からなる。フラグ１１２がデータの読み出しを示すコマンド１１１は、便宜的にリードコマンドと呼ぶ。また、ＬＢＡ（Ｃ）１１３は、フラッシュメモリ１９内のデータフォーマット１００のＬＢＡ（Ｍ）１２０に対応するものである。ＬＢＡ（Ｃ）１１３により、値Ｃと同一の値ＭのＬＢＡ（Ｍ）１２０が付加されたデータ１１０がアクセス対象データとして指定される。
【００３３】
図２に示すように、ＥＣＣモジュール１８は、フラッシュメモリ１９から読み出されたデータ１００を入力し、データバッファ１８１に格納する。シンドローム計算部１８３は、データバッファ１８１からのデータに対してシンドローム（syndrome）を算出し、エラー検出器１８４に出力する。エラー検出器１８４は、シンドロームを使用してエラー検出処理を実行し、エラー判定結果２１０を出力する（ブロック６０１）。
【００３４】
ここで、エラー検出器１８４からエラーが存在しないエラー判定結果２１０が出力されると、ＮＡＮＤコントローラ１７は、読み出し完了として処理する（ブロック６０２のＮＯ，６０３）。なお、通常では、ＮＡＮＤコントローラ１７は、読み出したデータを一時的に格納するバッファを有する。メモリコントローラ１５は、ＮＡＮＤコントローラ１７からクラスタ単位（例えば８セクタ）のデータ読み出しが完了すると、ホストインターフェース１１へのデータ転送を実行する。
【００３５】
エラー検出器１８４は、エラー判定結果としてエラーを検出した場合には、前述のエラー訂正部１８２でのエラー訂正能力に基づいて、そのエラーが訂正可能または訂正不能であるかをチェックする（ブロック６０４）。
【００３６】
エラー検出器１８４により訂正可能と判定された場合には、エラー訂正部１８２は、エラー訂正処理を実行し、エラー訂正後のデータ２００を出力する（ブロック６０５）。ここで、エラー訂正部１８２は、前述したように、エラー特定部１８５からのエラー位置情報に基づいてエラー訂正処理を実行する。エラー訂正部１８２による訂正処理が完了すると、ＮＡＮＤコントローラ１７は、読み出し完了として処理する（ブロック６０３）。
【００３７】
一方、エラー検出器１８４により訂正不能と判定された場合には、ＬＢＡ差分計算部１８６は、フラッシュメモリ１９から読み出されたデータ１００に含まれるＬＢＡ（Ｍ）１２０と、リードコマンドのＬＢＡ（Ｃ）１１３とを入力とし、これらの差分を算出する（ブロック６０６）。
【００３８】
ここで、差分がなく、即ち読み出されたＬＢＡ（Ｍ）がリードコマンドのＬＢＡ（Ｃ）と同一の場合には、ＬＢＡ（Ｍ）にはエラーが存在しないことになる（ブロック６０７のＮＯ）。この場合、ＥＣＣモジュール１８は、エラー訂正不能としてＥＣＣ処理を終了する（ブロック６０８）。即ち、本実施形態のＥＣＣモジュール１８は、後述するように、ＬＢＡ（Ｍ）のシンドロームの補正処理後に再度のエラー検出処理を実行する。ＬＢＡ（Ｍ）にはエラーが存在しない場合には、再度のエラー検出処理の結果は同じであるため、エラー訂正不能としてＥＣＣ処理を終了することになる。
【００３９】
ＬＢＡ差分計算部１８６により差分が有る場合には、ＬＢＡ（Ｍ）にはエラービットが存在することになる（ブロック６０７のＹＥＳ）。そこで、シンドローム補正計算部１８７は、ＬＢＡ差分計算部１８６からの差分結果に基づいて、シンドローム計算部１８３で算出されたシンドロームの修正処理を実行する（ブロック６０９）。具体的には、シンドローム補正計算部１８７は、エラービットを含むＬＢＡ（Ｍ）のシンドロームを、ＬＢＡ（Ｃ）に基づいたシンドロームに補正する補正値を算出する。
【００４０】
ここで、エラー検出器１８４は、エラー訂正不能であると判定した場合には、補正切り換え部１８８に対して補正オンを指示する。これにより、補正切り換え部１８８は、シンドローム補正計算部１８７により算出された補正値をシンドローム計算部１８３に出力する。
【００４１】
シンドローム計算部１８３は、最初に計算したシンドロームを保持しており、当該シンドロームの中でＬＢＡ（Ｍ）に対応する部分を補正値に置き換えたシンドロームを、エラー検出器１８４に出力する。これにより、エラー検出器１８４は、補正値を含むシンドロームを使用して、再度のエラー検出処理を実行する（ブロック６１０）。
【００４２】
ここで、エラー検出器１８４からエラーが存在しないエラー判定結果２１０が出力されると、ＮＡＮＤコントローラ１７は、読み出し完了として処理する（ブロック６１１のＮＯ，６０３）。一方、エラーを検出した場合には、エラー検出器１８４は、再度、そのエラーが訂正可能または訂正不能であるかをチェックする（ブロック６１２）。
【００４３】
エラー検出器１８４により訂正可能と判定された場合には、エラー訂正部１８２は、エラー訂正処理を実行し、エラー訂正後のデータ２００を出力する（ブロック６１３）。また、エラー検出器１８４により訂正不能と判定された場合には、ＥＣＣモジュール１８は、エラー訂正不能としてＥＣＣ処理を終了する（ブロック６１２のＹＥＳ，６０８）。
【００４４】
以上のように本実施形態によれば、フラッシュメモリ１９から読み出されたデータ１００に対するＥＣＣ処理において、エラー検出処理でエラー訂正不能であると判定される場合に、ＬＢＡ（Ｃ）に基づいたＬＢＡ（Ｍ）の修正処理により、再度のエラー検出処理を実行する。具体的には、ＬＢＡ（Ｍ）に対するシンドロームを補正した補正値を使用して、再度のエラー検出処理を実行する。
【００４５】
このような方法により、エラー訂正不能であると判定された場合に、データ１００の再読み出しを行なうことなく、効率的に再度のエラー検出処理を実行することが可能となる。即ち、エラー訂正部１８２でのエラー訂正能力が例えば８ビットの場合に、ユーザデータ１１０に８ビットのエラーが存在し、さらに１ビットのエラーがＬＢＡ（Ｍ）に存在するとエラー訂正能力を超える。このため、最初のエラー検出処理により、エラー訂正不能であると判定される。このような場合に、本実施形態であれば、ＬＢＡ（Ｍ）の修正処理後の再度のエラー検出処理により、訂正可能の判定を得る可能性が高くなる。従って、結果としてＥＣＣモジュール１８の訂正能力以上のエラー発生に対しても訂正が行える可能性が高くなる。
【００４６】
また、本実施形態の方法であれば、フラッシュメモリ１９のエラー数の増加を示す統計情報を収集して記録する処理も、効率的に行なうことが可能となる。
【００４７】
なお、本実施形態の変形例として、ＬＢＡ（Ｍ）をＬＢＡ（Ｃ）に基づいて補正し、この補正したＬＢＡ（Ｍ）とユーザデータとを使用して、再度のシンドローム計算を実行する方法でも良い。但し、この方法では、データバッファ１８１からユーザデータ１１０の再読み出しが必要となる。
【００４８】
［ＥＣＣエンコーダ及びＥＣＣデコーダ］
図７は、ＥＣＣエンコーダの一例を示す機能ブロック図である。
【００４９】
本実施形態のＥＣＣモジュール１８は、リード動作時に前述のＥＣＣ処理を実行する場合に、ＥＣＣエンコーダにより生成されるエラー訂正符号を使用する。ＥＣＣエンコーダは、フラッシュメモリ１９にデータを書き込むライト動作時に、ＬＢＡ（Ｍ）及びユーザデータを有するデータを使用してエラー訂正符号を生成する。
【００５０】
図７に示すように、ＥＣＣエンコーダは、データ保持要素７０１，７０２と、ガロワ体（Galois field）の乗算器７０３，７０４と、ガロワ体の加算器７０５，７０６とを有する。データ保持要素７０１，７０２は例えばフリップフロップであり、ここでは符号値R1，R0を保持している状態を示す。乗算器７０３，７０４はそれぞれ、α２５倍器とα１倍器である。
【００５１】
ＥＣＣエンコーダは、下記式（１）の生成多項式（generator polynomial）で示される２５５シンボルのコード長に対して、１シンボルの訂正能力を持つＧＦ（２８）上のＲＳ符号（２５５，２５３，１）を生成する。ＲＳ符号は、リードソロモン符号（Reed-Solomon code）である。
【００５２】
Ｘ２＋Ｘα２５＋α…（１）
なお、シンドローム生成項（syndrome generators）は、Ｘ−１，Ｘ−αとなる。
【００５３】
ＥＣＣエンコーダは、入力データを１クロックで１シンボルずつ入力し、入力が完了した時点でのデータ保持要素７０１，７０２で保持されている符号値R1，R0をエラー訂正符号として生成する。
【００５４】
図８は、図７に示すＥＣＣエンコーダと対になるＥＣＣデコーダの一例を示す機能ブロック図である。
【００５５】
図８に示すＥＣＣデコーダは、ＥＣＣモジュール１８のシンドローム計算部１８３またはシンドローム補正計算部１８７の機能を実現する構成である。図８に示すように、ＥＣＣデコーダは、データ保持要素８１１，８１２と、ガロワ体（Galois field）の乗算器８１３，８１４と、ガロワ体の加算器８１５，８１６とを有する。
【００５６】
データ保持要素８１１，８１２は例えばフリップフロップであり、ここではシンドロームの値S0，S1を保持している状態を示す。乗算器８１３，８１４はそれぞれ、α０倍器、α１倍器である。
【００５７】
ＥＣＣデコーダは、入力データを１クロックで１シンボルずつ入力し、入力が完了した時点でデータ保持要素８１１，８１２に保持されている値S0，S1をシンドロームとして導出する。ここで、図８に示すように、シンドロームS0，S1の計算は独立しており、相互の計算結果は影響しない。シンドローム計算後にデータ保持要素８１１，８１２に保持されている値が両方とも０の場合には、エラー無しの判定となる。
【００５８】
ここで、デコードする入力データを、Ｉ０、Ｉ１、Ｉ２、…、Ｉｎとした場合に、データ保持要素８１１に保持される値S0は、下記式（２）により算出される。
【００５９】
Ｓ０＝Ｉ０（α０）ｎ＋Ｉ１（α０）（ｎ−１）＋Ｉ２（α０）（ｎ−２）＋  …  ＋Ｉｎ…（２）
また、データ保持要素８１２に保持される値S1は、下記式（３）により算出される。
【００６０】
Ｓ１＝Ｉ０（α１）ｎ＋Ｉ１（α１）（ｎ−１）＋Ｉ２（α１）（ｎ−２）＋  …  ＋Ｉｎ…（３）
ここで、シンドローム補正計算部１８７によるシンドローム補正計算は、入力データとしてＬＢＡ（Ｍ）とＬＢＡ（Ｃ）との違いが有る部分の項を入れ替えることで実現される。
【００６１】
例えばＩ２が異なるのであれば、前記式（２），（３）から、Ｉ２（α０）（ｎ−２）及びＩ２（α１）（ｎ−２）の項を減算し、それぞれ入れ替えたい値であるＩ２ａから算出したＩ２ａ （α０）（ｎ−２）及びＩ２ａ （α１）（ｎ−２）を加算する。
【００６２】
即ち、補正後のシンドロームをＳ０a及びＳ１aとした場合、ガロワ体の減算は加算という性質を利用すると、Ｓ０a及びＳ１aは、下記式（４），（５）から算出される。
【００６３】
Ｓ０a＝Ｓ０−Ｉ２（α０）（ｎ−２）＋Ｉ２ａ（α０）（ｎ−２）＝
Ｓ０＋（Ｉ２−Ｉ２ａ）（α０）（ｎ−２）…（４）
Ｓ１a＝Ｓ１−Ｉ２（α１）（ｎ−２）＋Ｉ２ａ（α１）（ｎ−２）＝
Ｓ１＋（Ｉ２−Ｉ２ａ）（α１）（ｎ−２）…（５）
以上のように、シンドロームS0，S1を補正する値は、入力データの差分にそれぞれα０及びα１の（入力データ位置）乗を乗じた値を加算すれば容易に算出できることがわかる。
【００６４】
なお、図７及び図８に示すＥＣＣエンコーダ及びＥＣＣデコーダは、便宜的にＲＳ符号に関する構成として説明したが、これに限ることはない。例えば、データフォーマット１００におけるデータ長が４Ｋバイトであれば、ＧＦ（２１３）上のＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号に関する構成でもよい。
【００６５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６６】
１０…ＳＳＤコントローラ、１１…ホストインターフェース、
１２…マイクロプロセッサ（ＭＰＵ）、１３…コマンド処理モジュール、
１４…レジスタ群、１５…フラッシュメモリコントローラ、
１６…調停モジュール（アービタ）、１７，１７-1〜１７-n…ＮＡＮＤコントローラ、
１８，１８-1〜１８-n…誤り検出訂正モジュール（ＥＣＣモジュール）、
１９，１９-1〜１９-n…NAND型フラッシュメモリ（フラッシュメモリ）、
２０…ホストシステム。
【図１】
0005330428.tif 000002
【図２】
0005330428.tif 000003
【図３】
0005330428.tif 000004
【図４】
0005330428.tif 000005
【図５】
0005330428.tif 000006
【図６】
0005330428.tif 000007
【図７】
0005330428.tif 000008
【図８】
0005330428.tif 000009