(57)【特許請求の範囲】
【請求項１】
データの誤りを訂正する復号器であって、
複数のセルを含み、各セルは、データブロックおよび１つまたは複数の冗長ブロックに基づいて部分シンドロームを生成し、かつ、部分シンドロームと誤りを有するデータブロックの位置を特定する誤り位置行列の逆行列の部分とに基づいて部分誤り値を生成するよう構成され、さらに、
複数のセルに接続される加算論理を含み、加算論理は、複数のセルによって生成される部分誤り値に基づいて誤り値を生成するよう構成され、誤り値はデータブロックの１つにある誤りを訂正する、復号器。
【請求項２】
複数のセルの中のセルの個数は冗長ブロックの個数に等しい、請求項１に記載の復号器。
【請求項３】
各セルは、
入力論理と、
入力論理に接続される第１のキューと、
入力論理および第１のキューに接続される乗算器とを含む、請求項１に記載の復号器。
【請求項４】
各セルは、読出モードで部分シンドロームを生成するよう動作する、請求項１に記載の復号器。
【請求項５】
各セルは、入力論理と、入力論理に接続される第１のキューと、入力論理および第１のキューに接続される乗算器とを含み、
セルが読出モードで動作するとき、セルの入力論理は、乗算器と、データブロックおよび１つまたは複数の冗長ブロックを保持するデータバッファとから入力を受取るよう設定される、請求項４に記載の復号器。
【請求項６】
入力論理は乗算器およびデータバッファからの入力の合計を生成し、合計は第１のキューに格納される、請求項５に記載の復号器。
【請求項７】
入力論理は、入力がデータバッファおよび乗算器に接続され、かつ出力が合計を生成するために第１のキューに接続される排他的論理和（ＸＯＲ）ゲートを含む、請求項６に記載の復号器。
【請求項８】
セルが読出モードで動作するとき、乗算器は、生成多項式の根と第１のキューからの合計とを受取るよう設定される、請求項６に記載の復号器。
【請求項９】
乗算器は、生成多項式の根と合計との間でガロア体乗算を実行するガロア体乗算器である、請求項８に記載の復号器。
【請求項１０】
乗算器は、生成多項式の根と合計との間で複数の並列なガロア体乗算を実行する複数のガロア体乗算器を含む、請求項９に記載の復号器。
【請求項１１】
複数のセルの各セルは、異なる部分シンドロームを生成するために生成多項式の異なる根を受取るよう設定される、請求項８に記載の復号器。
【請求項１２】
生成多項式の根は、ハードワイヤードの定数、またはファームウェアによって設定されるレジスタである、請求項８に記載の復号器。
【請求項１３】
生成多項式の根を保持する第２のキューと、
入力が第２のキューに接続され出力が乗算器に接続されるマルチプレクサとをさらに含
み、マルチプレクサは、セルが読出モードで動作するとき第２のキューを乗算器に接続するよう設定される、請求項８に記載の復号器。
【請求項１４】
各セルは、書込モードで部分誤り値を生成するよう動作する、請求項４に記載の復号器。
【請求項１５】
各セルは、入力論理と、入力論理に接続される第１のキューと、入力論理および第１のキューに接続される乗算器とを含み、
セルが書込モードで動作するとき、セルの入力論理は第１のキューから入力を受取るよう設定され、第１のキューは読出モード中にセルによって生成される部分シンドロームを保持する、請求項１４に記載の復号器。
【請求項１６】
乗算器は、部分シンドロームと誤り位置行列の逆行列の部分の要素との間でガロア体乗算を実行するガロア体乗算器である、請求項１５に記載の復号器。
【請求項１７】
乗算器は、部分シンドロームと誤り位置行列の逆行列の部分の要素との間で複数の並列なガロア体乗算を実行する複数のガロア体乗算器を含む、請求項１６に記載の復号器。
【請求項１８】
複数のセルの各セルは、異なる部分誤り値を生成するために誤り位置行列の異なる部分を受取るよう設定される、請求項１４に記載の復号器。
【請求項１９】
各セルは、入力論理と、入力論理に接続される第１のキューと、入力論理および第１のキューに接続される乗算器とを含み、
復号器は、
誤り位置行列の部分を保持する第３のキューと、
入力が第３のキューに接続され出力が乗算器に接続されるマルチプレクサとをさらに含み、マルチプレクサは、セルが書込モードで動作するとき第３のキューを乗算器に接続するよう設定される、請求項１４に記載の復号器。
【請求項２０】
加算論理はＸＯＲゲートのアレイを含む、請求項１に記載の復号器。
【請求項２１】
誤り位置行列の逆行列は、ファームウェアまたはハードウェアによって生成される、請求項１に記載の復号器。
【請求項２２】
復号器はデータ記憶装置のコンポーネントであって、データブロックおよび１つまたは複数の冗長ブロックが、データ記憶装置の記憶媒体から検索され、データ記憶装置のデータバッファに保持される、請求項１に記載の復号器。
【請求項２３】
記憶媒体から検索されたデータの誤りを訂正するよう構成されるデータ記憶装置であって、
記憶媒体から検索されたデータブロックおよび１つまたは複数の冗長ブロックを保持するよう構成されるデータバッファと、
データバッファに接続される復号器とを含み、復号器は、
データバッファに保持されるデータブロックおよび１つまたは複数の冗長ブロックにアクセスする複数のセルを含み、各セルは、検索されたデータブロックおよび１つまたは複数の冗長ブロックに基づいて部分シンドロームを生成するよう構成され、かつ、部分シンドロームおよび誤り位置行列の逆行列の部分に基づいて部分誤り値を生成するよう構成され、復号器はさらに、
複数のセルに接続される加算論理を含み、加算論理は、複数のセルによって生成された部分誤り値に基づいて誤り値を生成するよう構成され、誤り値はデータブロックの誤りを訂正する、データ記憶装置。
【請求項２４】
複数のセルの中のセルの個数は、記憶媒体から検索される冗長ブロックの個数に等しい、請求項２３に記載の記憶データ装置。
【請求項２５】
各セルは、
入力論理と、
入力論理に接続される第１のキューと、
入力論理および第１のキューに接続される乗算器と、
乗算器に接続される第２のキューとを含み、第２のキューは生成多項式の根を保持し、さらに、
乗算器に接続される第３のキューを含み、第３のキューは誤り位置行列の逆行列の部分を保持する、請求項２３に記載のデータ記憶装置。
【請求項２６】
各セルは、読出モードで部分シンドロームを生成するよう動作し、書込モードで部分誤り値を生成するよう動作する、請求項２５に記載のデータ記憶装置。
【請求項２７】
セルが読出モードで動作する場合、
セルの入力論理は、乗算器とデータバッファとから受取った入力の合計を生成し、合計を第１のキューに格納し、さらに、
乗算器は、第２のキューからの生成多項式の根と第１のキューからの合計とを乗算する、請求項２６に記載のデータ記憶装置。
【請求項２８】
セルが書込モードで動作する場合、
セルの入力論理は第１のキューから合計を受取り、さらに、
乗算器は、第１のキューに保持される合計と、第３のキューに保持される誤り位置行列の逆行列の部分の要素とを乗算する、請求項２７に記載のデータ記憶装置。
【請求項２９】
複数のセルの各セルは、異なる部分シンドロームを生成するために生成多項式の異なる根を受取るよう設定され、また、異なる部分誤り値を生成するために誤り位置行列の逆行列の異なる部分を受取るよう設定される、請求項２８に記載のデータ記憶装置。
【請求項３０】
乗算器は、複数の並列なガロア体乗算を実行するための複数のガロア体乗算器を含む、請求項２８に記載のデータ記憶装置。
【請求項３１】
加算論理は、排他的論理和（ＸＯＲ）ゲートのアレイを含む、請求項２３に記載のデータ記憶装置。
【請求項３２】
誤り位置行列の逆行列は、ファームウェアまたはハードウェアによって生成される、請求項２３に記載のデータ記憶装置。
【請求項３３】
データの誤りを訂正する方法であって、
データブロックおよび１つまたは複数の冗長ブロックを受取るステップと、
受取られたデータブロックで誤りを有するものの位置を伴う誤り位置行列の逆行列を生成するステップと、
復号器の複数のセルにおいて複数の部分シンドロームを生成するステップとを含み、複数の部分シンドロームの各々は、受取られたデータブロックおよび１つまたは複数の冗長ブロックに基づいて複数のセルの各々において生成され、さらに、
複数のセルにおいて複数の部分誤り値を生成するステップを含み、複数の部分誤り値の各々は、部分シンドロームおよび誤り位置行列の逆行列の部分に基づいて複数のセルの各々において生成され、さらに、
複数のセルによって生成される複数の部分誤り値に基づいて誤り値を生成するステップを含む、方法。
【請求項３４】
受取られたデータブロックおよび１つまたは複数の冗長ブロックはデータバッファに保
持され、複数の部分シンドロームを生成するステップは、
複数のセルの各々において、
ａ）  データバッファからデータを読出すステップと、
ｂ）  データバッファから読出されたデータと乗算器からの出力との合計を生成するステップと、
ｃ）  合計を格納するステップと、
ｄ）  生成多項式の根と合計とを乗算するステップと、
ｅ）  ステップａ）からステップｄ）までを反復して、データバッファに保持されるデータブロックおよび１つまたは複数の冗長ブロックをすべて処理するステップとを含み、データバッファに保持されるデータブロックおよび１つまたは複数の冗長ブロックがすべて処理されたとき、合計が部分シンドロームである、請求項３３に記載の方法。
【請求項３５】
請求項３４のステップａ）からステップｄ）までを反復する回数は、データバッファに保持されるデータブロックおよび冗長ブロックの個数に等しい、請求項３４に記載の方法。
【請求項３６】
ステップａ）の反復において、誤りを有するデータブロックからデータが読出されようとするとき、誤りを有するデータブロックからのデータではなくすべて０を読出す、請求項３４に記載の方法。
【請求項３７】
生成多項式の根と合計とを乗算するステップは、
複数のガロア体乗算器を用いて、生成多項式の根と合計との間で複数の並列なガロア体乗算を実行するステップを含む、請求項３４に記載の方法。
【請求項３８】
複数の部分誤り値を生成するステップは、
請求項３４のステップａ）からステップｅ）までが完了した後、複数のセルの各々において、
ｆ）  部分誤り値を生成するために、部分シンドロームを誤り位置行列の逆行列の部分の要素で乗算するステップと、
ｇ）  部分誤り値を、複数のセルの各々によって生成された部分誤り値と合計するために送るステップとを含む、請求項３４に記載の方法。
【請求項３９】
ｈ）  誤り値を生成するために、複数のセルの各々によって生成された部分誤り値を合計するステップと、
ｉ）  誤り値を、誤りを有するデータブロックを訂正するためにデータバッファに書込むステップとを含む、請求項３８に記載の方法。
【請求項４０】
ｊ）  誤りを有する他のデータブロックを訂正するために、請求項３８のステップｆ）およびステップｇ）、ならびに請求項３９のステップｈ）およびステップｉ）を繰返すステップをさらに含む、請求項３９に記載の方法。
【請求項４１】
請求項３８のステップｆ）およびステップｇ）、ならびに請求項３９のステップｈ）およびステップｉ）を繰返す回数は、誤りを有するデータブロックの個数に等しい、請求項４０に記載の方法。
【請求項４２】
請求項３８のステップｆ）およびステップｇ）、ならびに請求項３９のステップｈ）およびステップｉ）を繰返す回数は、データバッファに保持される冗長ブロックの個数に等しい、請求項４０に記載の方法。
【請求項４３】
合計がクリアされ、請求項３４のステップａ）からステップｅ）まで、請求項３８のス
テップｆ）およびステップｇ）、請求項３９のステップｈ）およびステップｉ）ならびに請求項４０のステップｊ）が繰返されて、データバッファに保持されるデータブロックおよび１つまたは複数の冗長ブロックの他の部分を処理する、請求項４０に記載の方法。
【請求項４４】
部分シンドロームを誤り位置行列の逆行列の部分の要素で乗算するステップは、
複数のガロア体乗算器を用いて、部分シンドロームと誤り位置行列の逆行列の部分の要素との間で複数の並列なガロア体乗算を実行するステップを含む、請求項３８に記載の方法。
【請求項４５】
データブロックおよび１つまたは複数の冗長ブロックを受取るステップは、データ記憶装置の記憶媒体からデータブロックおよび１つまたは複数の冗長ブロックを検索するステップを含む、請求項３３に記載の方法。
【請求項４６】
誤り位置行列の逆行列は、ファームウェアまたはハードウェアによって生成される、請求項３３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
発明の分野
本願は、一般に、誤り訂正符号（たとえば、ボース−チャウドゥーリー−オッカンガム（Bose-Chaudhuri-Hocquenghem）（ＢＣＨ）符号、リード−ソロモン（Reed-Solomon）符号など）を用いるデータの誤り訂正に関し、より特定的には、部分シンドローム発生を伴うセルを用いる誤り訂正復号器に関する。
【背景技術】
【０００２】
関連技術
データの誤り訂正は、データ記憶装置、電気通信システムなどの多様な分野で用いられる。たとえば、データ記憶装置では、データは、記憶装置の記憶媒体にデータを書込むことによって格納される。格納されたデータは、記憶媒体からそのデータを読出すことによって記憶装置から後に検索され得る。しかしながら、多くの理由により、記憶装置から検索されたデータに誤りが存在する場合がある。つまり、格納されたデータが検索できないか、または記憶媒体に最初に格納されたデータとは異なっていることがある。たとえば、記憶媒体に格納されたデータの一部は時間が経つと劣化することがあり、格納されたデータの一部を後で正確に読出すことができなくなってしまう。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来の誤り訂正手法は、データの１つまたは複数の冗長ブロックを生成すること、または符号化することを含み、それをデータの誤りを訂正するために復号化プロセスで用いることができる。典型的には、復号化プロセスは特別なハードウェアを用いて実行され、複雑で変更の困難なものとなりがちである。
【課題を解決するための手段】
【０００４】
概要
１つの例示的な実施例では、データの誤りを訂正する復号器は、複数のセルを含む。各セルは、データブロックおよび１つまたは複数の冗長ブロックに基づいて、部分シンドロームを生成する。各セルは、誤りを有するデータブロックの位置を特定する、誤り位置行列の逆行列の部分に基づいて、部分誤り値を生成する。複数のセルに接続される加算論理は、複数のセルによって生成される部分誤り値に基づいて誤り値を生成する。誤り値は、誤りを有するデータブロックの誤りを訂正する。
【発明を実施するための最良の形態】
【０００５】
詳細な説明
以下の説明は、多数の特定の構成、パラメータなどを明示する。しかしながら、このような説明が、この発明の範囲に対する限定とは意図されず、例示的な実施例のよりよい説明をもたらすために提供されることが認識される。
【０００６】
例として、記憶装置のデータの誤り訂正が以下に説明される。しかしながら、誤り訂正は電気通信を含む多様な分野で用いられ得ることが認識される。
【０００７】
図１を参照すると、記憶装置１０４に接続されるホスト端末１０２が示される。ホストコンピュータ１０２は、任意の種類のコンピュータ、たとえばパーソナルコンピュータ、ワークステーション、サーバなどであり得る。記憶装置１０４は任意の種類の記憶ドライ
ブ、たとえばテープドライブ、ハードドライブなどであり得る。ホスト端末１０２を任意の数の記憶装置１０４に接続でき、任意の数のホスト端末１０２を１つまたは複数の記憶装置１０４に接続できることが認識される。
【０００８】
引続き図１を参照すると、例示的な一実施例において、記憶装置１０４は、記憶装置１０４に格納されたデータの誤りを検出して訂正するよう構成される。より具体的には、記憶装置１０４に格納されたデータが検索されるときにたとえばその検索されたデータが記憶装置１０４に最初に格納されていたデータと異なる場合、または格納されたデータを検索できない場合に、記憶装置１０４は、検索されたデータの誤りを訂正するために、誤り訂正符号（ＥＣＣ）冗長ブロックとも呼ばれる冗長ブロックを用いるよう設定される。加えて、検索されたデータの誤りを検出するために、巡回冗長検査（ＣＲＣ）符号などの内部符号が用いられ得る。しかしながらリード−ソロモン符号などの誤り訂正符号が、誤りを訂正するためとともに検出するためにも用いられ得ることが認識される。
【０００９】
図１に示された実施例において、記憶装置１０４は、記憶媒体１０６、チャネルおよび読出／書込ヘッド１０８、プロセッサ１１０、および誤り検出／訂正ユニット１１２を含む。記憶装置１０４において、データは記憶媒体１０６に格納される。読出／書込ヘッド１０８は、記憶媒体１０６にデータの読出および／または書込を行なう。プロセッサ１１０は、チャネルおよび読出／書込ヘッド１０８の動作を含む、記憶装置１０４の動作を制御する。以下により詳細に説明されるように、誤り検出／訂正ユニット１１２は、記憶媒体１０６に格納されたデータの誤りを検出して訂正する。
【００１０】
この例示的な実施例において、誤り検出／訂正ユニット１１２は、データバッファ１１４、冗長ブロック符号器／復号器１１６、および内部符号符号器／復号器１１８を含む。データが記憶媒体１０６に格納されるべき場合、データがホスト端末１０２から受取られてデータバッファ１１４に書込まれる。冗長ブロック符号器／復号器１１６は、データバッファ１１４のデータに対して冗長ブロックを生成する。内部符号符号器／復号器１１８は、データバッファ１１４のデータに対して内部符号（たとえば、ＣＲＣ符号、リード−ソロモン符号など）を生成する。次に、読出／書込ヘッド１０８は、データと、生成された冗長ブロックおよび内部符号とを記憶媒体１０６に書込む。
【００１１】
データが記憶媒体１０６から読出されるべき場合、読出／書込ヘッド１０８は、記憶媒体１０６からデータバッファ１１４にデータ、冗長ブロック、および内部符号を読出す。以下により詳細に説明されるように、記憶媒体１０６から読出されたデータのどのような誤りも、内部符号および冗長ブロックを用いて検出され、訂正される。次に、このデータがホスト端末１０２に転送され得る。
【００１２】
この例示的実施例において、データはホスト端末１０２と記憶装置１０４との間をデータレコードとして転送され、このデータレコードはバッファに格納される。データレコードは、予め規定された長さ、たとえば２ｋバイト、４ｋバイト、６ｋバイトなどのデータブロックに分割される。しかしながら、さまざまな長さのデータブロックを用い得ることが認識される。
【００１３】
記憶媒体１０６からデータブロックが検索された後、誤りを有する検索されたデータブロックが検出され、そこで検索されたデータブロックの誤りは、検索されたデータブロックのデータが読出せないか、またはデータブロックが記憶媒体１０６に最初に格納されたときのデータブロックのデータとは異なることを示す。たとえば、検索されたデータブロックのデータが、データブロックが記憶媒体１０６に最初に格納されたときのデータブロックのデータとは異なる場合、ＣＲＣ符号が検出のために用いられ得る。より具体的には、記憶媒体１０６にデータブロックを格納する前に、そのデータブロックに対してＣＲＣ
符号が生成され、記憶媒体１０６にデータブロックとともに格納される。データブロックが後に検索されると、その検索されたデータブロックに対して新規のＣＲＣ符号が生成される。次に、この新規のＣＲＣ符号が、記憶媒体１０６から検索されたＣＲＣ符号と比較される。記憶媒体１０６から検索されたこのＣＲＣ符号は、検索されたデータブロックに対応しており、検索されたデータブロックを記憶媒体１０６に格納する前に、この検索されたデータブロックに対して最初に生成されたものである。新規のＣＲＣ符号と検索されたＣＲＣ符号とが異なる場合、そのデータブロックに誤りが検出される。しかしながら、リード−ソロモン符号を含む多様なタイプの誤り訂正符号が用いられ得ることが認識される。
【００１４】
この例示的実施例において、誤り位置行列は、記憶媒体から検索された、誤りを有するデータの位置を特定する。たとえば、ある例示的な誤り位置行列は下記のように表わされる。
【００１５】
【数１】
0004733403.tif 000002
【００１６】
ここで、Ｘは誤りの位置であり、ρは誤りのあるデータブロックおよび冗長ブロックの総数である。
【００１７】
この例示的な実施例において、誤り位置行列の逆行列が生成される。たとえば、上記の例における例示的な誤り位置行列の逆行列は下記のように表わされる。
【００１８】
【数２】
0004733403.tif 000003
【００１９】
誤り位置行列はヴァンデルモンド（Vandermonde）行列であって、Ｏ（ρ3）演算を必要とする一般的な逆行列と比較すると、一般に、逆数の演算にＯ（ρ2）演算を必要とすることに注意されたい。ヴァンデルモンド行列における行は、ゼロから始まり、昇冪で累乗された定数値からなる。誤り位置行列の逆行列は、多様な行列反転手法を用いてファームウェアまたはハードウェアによって生成され得る。
【００２０】
この例示的な実施例において、検索されたデータブロックの誤りを訂正するために冗長ブロックが用いられる。より具体的には、記憶媒体１０６にデータブロックを格納する前に、そのデータブロックに基づいて冗長ブロックが生成され、記憶媒体１０６にデータブロックとともに格納される。データブロックが後に検索されたときに、誤りを有していると識別されたデータブロックは、冗長ブロックを用いて訂正される。
【００２１】
この例示的な実施例において、冗長ブロックはボース−チャウドゥーリー−オッカンガム（ＢＣＨ）符号であり、より特定的にはリード−ソロモン符号である。リード−ソロモン符号のより詳細な説明については、この明細書においてその全体が引用によって援用される、１９７２年、ＭＩＴプレス（MIT Press）、ピーターソン（Peterson）およびウェルドン（Weldon）による「誤り訂正符号（Error Correcting Codes）」第２版が参照される。しかしながら、さまざまな種類の誤り訂正符号を用い得ることが認識される。
【００２２】
この例示的な実施例において、データブロックの集合、冗長ブロックの集合、および内部符号の冗長シンボルの集合は、「エンティティ」と呼ばれるグループとしてまとめて読出および書込が行なわれ得る。たとえば図２を参照すると、エンティティ２０２は、１６個のデータブロック２０４、４個の冗長ブロック２０６、および内部符号２０８の２０個の冗長シンボルを有していることが示される。しかしながら、エンティティ２０２がさまざまな数のデータブロック２０４、冗長ブロック２０６、および内部符号２０８の冗長シンボルを含み得ることが認識される。たとえば、エンティティ２０２は、３２個のデータブロック２０４および８個の冗長ブロック２０６、１１２個のデータブロック２０４および１６個の冗長ブロック２０６、などを含み得る。加えて、内部符号２０８の冗長シンボルは、データブロック２０４または冗長ブロック２０６の中で誤りを検出、かつ訂正することができる。
【００２３】
図２は、エンティティ２０２がデータバッファ１１４（図１）に格納されている形を示す。しかしながら、エンティティ２０２が図２に示された形で物理的に存在しなくてよいことが認識される。また、エンティティ２０２のデータ、より特定的にはデータブロック２０４のデータが、１つのファイルに対応する必要がないことも認識される。むしろ、この例示的な実施例において、ホスト端末１０２（図１）から検索されたデータはインタリーブされる。したがって、特定のデータブロック２０４のデータは、ホスト端末１０２（図１）から受取られた別個のファイルの、それぞれの一部に対応し得る。
【００２４】
図２はまた、エンティティ２０２のデータブロック２０４、冗長ブロック２０６、および内部符号２０８の冗長シンボル間の論理関係を示す。図３を参照すると、データブロック２０４、冗長ブロック２０６、および内部符号２０８の冗長シンボル間の論理関係をより明らかに示すために、エンティティ２０２の部分がより詳細に示される。
【００２５】
図３において、内部符号２０８の冗長シンボルは、ＣＲＣ符号として示される。しかしながら、リード−ソロモン符号のような多様なタイプの誤り検出または誤り訂正符号が用いられ得ることが認識される。
【００２６】
この例示的な実施例において、内部符号２０８の冗長シンボルは、データブロック２０４または冗長ブロック２０６に対応しており、データブロック２０４または冗長ブロック２０６の誤りを検出するために用いられる。たとえばＣＲＣ符号のＣＲＣ19は、エンティティ２０２のデータブロックＤ19に対応する。したがって、データブロックＤ19の誤りを検出するために、記憶媒体１０６（図１）からデータブロックＤ19を検索した後、検索されたデータブロックＤ19に対して新規のＣＲＣ符号であるＣＲＣ19´が生成される。次に、新規のＣＲＣ符号であるＣＲＣ19´と、記憶媒体１０６（図１）から検索され、検索されたデータブロックＤ19に対応するＣＲＣ符号（すなわちＣＲＣ符号であるＣＲＣ19）とが比較される。新規のＣＲＣ符号であるＣＲＣ19´と検索されたＣＲＣ符号であるＣＲＣ19とが異なる場合、データブロックＤ19に誤りが検出される。
【００２７】
この例示的実施例において、冗長ブロックの個数が、訂正され得るデータブロックの最大個数を決定する。したがって、図２に示される例において、合計で４個の冗長ブロック２０６を用いて、最大で４個の誤りデータブロック２０４を訂正することが可能である。
【００２８】
この例示的な実施例において、各冗長ブロック２０６はエンティティ２０２のすべてのデータブロックのデータに基づいて生成される。たとえば冗長ブロックＥ0、Ｅ1、Ｅ2、およびＥ3の各々は、データブロックＤ4、…、Ｄ18、およびＤ19のデータに基づいて生成される。上述のように、図１を参照すると、冗長ブロックは冗長ブロック符号器／復号器１１６によって生成される。また上述のように、冗長ブロックは、ホスト端末１０２から受取られたデータに対して最初に生成される。次に、生成された冗長ブロックと受取られたデータとが記憶媒体１０６に格納される。
【００２９】
再び図３を参照すると、冗長ブロックＥ0、Ｅ1、Ｅ2、およびＥ3は同じ集合のデータ（すなわちエンティティ２０２のデータブロック２０４）に基づいて生成されており、各冗長ブロック２０６は互いに固有である。より具体的には、この実施例において、冗長ブロックＥ0、Ｅ1、Ｅ2、およびＥ3はボース−チャウドゥーリー−オッカンガム（ＢＣＨ）符号であり、より特定的にはリード−ソロモン符号である。
【００３０】
図１を参照すると、この例示的実施例において、冗長ブロック符号器／復号器１１６は、記憶媒体１０６にデータブロックとともに格納される冗長ブロックを生成するための符号器として動作する。冗長ブロック符号器／復号器１１６は、記憶媒体１０６から検索されたデータブロックの誤りを訂正するための復号器として動作する。しかしながら、冗長ブロック符号器／復号器１１６は、記憶装置１０４の中で別個のコンポーネント（すなわち、符号器コンポーネントおよび復号器コンポーネント）として実現され得ることが認識される。
【００３１】
図４を参照すると、記憶媒体から検索されたデータブロックの誤りを訂正するための、例示的な符号器４００が示される。上述のように、符号器４００は、冗長ブロック符号器／復号器１１６（図１）の統合された部分として実現されるか、または記憶装置１０４（図１）の中で別個のコンポーネントとして実現されてもよい。
【００３２】
図４に示されるように、符号器４００は複数のセル４０２と複数のセル４０２に接続される加算論理４０４とを含む。各セル４０２は、記憶媒体から検索された冗長ブロックとデータブロックとに基づいて部分シンドロームを生成する。各セル４０２はさらに、記憶媒体から検索された誤りを有するデータブロックの位置を特定する、誤り位置行列の逆行列の部分に基づいて部分誤り値を生成する。上述のように、誤り位置行列の逆行列は、ファームウェアまたはハードウェアによって生成され得る。加算論理４０４は、複数のセル４０２によって生成される部分誤り値に基づいて、記憶媒体から検索されたデータブロックの誤りを訂正する、誤り値を生成する。
【００３３】
図１を参照すると、上述のように、記憶媒体１０６から検索されたデータブロックおよび冗長ブロックはデータバッファ１１４に保持される。より特定的には、図２を参照すると、１つの例示的実施例において、データブロック２０４および冗長ブロック２０６はデータバッファ１１４（図１）にエンティティ２０２の形で格納され得る。
【００３４】
図４を再び参照すると、この例示的実施例において、複数のセル４０２はライン４０６を介してデータバッファ１１４（図１）に接続される。各セル４０２は、データバッファ１１４（図１）に格納されるエンティティ２０２（図２）の一部を入力として受取る。より特定的には、各セル４０２はエンティティ２０２（図２）の部分をキャッシュバーストで読出す。
【００３５】
図２を参照すると、この例示的実施例において、各キャッシュバーストは単一のデータブロック２０４または冗長ブロック２０６の一部である。加えて、この例示的実施例にお
いて、データブロック２０４および冗長ブロック２０６の部分はラスタパターンで読出される。
【００３６】
たとえば、各キャッシュバーストが３２バイト長であると仮定する。第１のデータブロック２０４の第１の３２バイトが第１のキャッシュバーストで読出される。次に、エンティティ２０２の次の１５個のデータブロック２０４および４個の冗長ブロック２０６の各々の第１の３２バイトが、次の１９個のキャッシュバーストで読出される。最後の冗長ブロック２０６の第１の３２バイトが読出された後、第１のデータブロック２０４の次の第２の３２バイトが読出され、次いで、エンティティ２０２の次の１５個のデータブロック２０４および４個の冗長ブロック２０６の各々の次の第２の３２バイトが読出される。この態様で、エンティティ２０２のデータブロック２０４および冗長ブロック２０６は、３２バイト部分ずつラスタパターンでキャッシュバーストで読出される。しかしながら、キャッシュバーストのサイズは変動してもよく、データブロック２０４および冗長ブロック２０６は多様なパターンで読出され得ることが認識される。たとえば、各キャッシュバーストは３２バイトではなく６４バイトでもよい。
【００３７】
この例示的実施例において、エンティティ２０２のデータブロック２０４および冗長ブロック２０６の各々の部分は、符号語２１０として論理的にグループ化され得る。たとえば、データブロック２０４および冗長ブロック２０６の各々の第１の部分は第１の符号語２１０として論理的にグループ化されることができ、それは図２の第１の列に対応する。データブロック２０４および冗長ブロック２０６の各々の第２のバイトは、第２の符号語２１０として論理的にグループ化されることができ、それは図２の第２の列に対応する。
【００３８】
この例示的実施例において、符号語２１０は１バイト幅である。したがって、データブロック２０４および冗長ブロック２０６が２ｋバイト長である場合、エンティティ２０２のデータブロック２０４および冗長ブロック２０６は、２０００個の別個独立の符号語２１０へと論理的にグループ化され得る。加えて、データブロック２０４および冗長ブロック２０６が、それぞれが３２ビットである１６個の長語に対応する３２バイトのキャッシュバーストを用いて読出される場合、３２個の符号語２１０の各部分が一度に読出される。
【００３９】
再び図４を参照すると、この例示的実施例において、復号器４００のセル４０２の個数はエンティティ２０２の冗長ブロック２０６（図２）の個数に対応し、それは次に、訂正され得るデータブロック２０４の最大個数に対応する。したがって、復号器４００は訂正されるべきデータブロック２０４の最大個数に基づいて修正される。たとえば、最大４個のデータブロック２０４が訂正される場合、復号器４００は４個のセル４０２を含むように変形される。同様に、最大１６個または３２個のデータブロック２０４が訂正される場合、復号器４００は１６個または３２個のセル４０２を含むように変形される。
【００４０】
図５を参照すると、例示的セル４０２が示される。この例示的実施例において、各セル４０２は、入力論理５０２、キュー５０４、乗算器５０６、マルチプレクサ５０８、キュー５１０およびキュー５１２を含む。
【００４１】
上述のように、各セル４０２は、記憶媒体から検索されたデータブロックおよび１つまたは複数の冗長ブロックに基づいて部分シンドロームを生成する。図６を参照すると、セル４０２（図４）において部分シンドロームを生成する、例示的な読出プロセス６００が示される。
【００４２】
６０２において、セル４０２（図４）は読出モードに設定される。図５を参照すると、この例示的実施例において、入力論理５０２はデータバッファ１１４（図１）に接続され
るライン４０６から、および乗算器５０６の出力に接続されるフィードバックライン５１４から、入力を受取るよう設定される。より特定的には、図７を参照すると、マルチプレクサ７０２は、ライン４０６およびフィードバックライン５１４に接続されるＸＯＲゲート７０４から入力を受取るよう設定される。図５を参照すると、乗算器５０６は、入力論理５０２によって生成される中間結果を保持するキュー５０４から、および生成多項式の根を保持するキュー５１０から、入力を受取るよう設定される。より特定的には、入力がキュー５１０およびキュー５１２に接続されるマルチプレクサ５０８は、キュー５１０から入力を受取るよう設定される。
【００４３】
図６を参照すると、６０４において、セル４０２（図４）はデータバッファ１１４（図１）からデータを読出す。この例示的実施例において、セル４０２（図４）は、データバッファ１１４（図１）に格納されたエンティティ２０２（図２）から、データブロックまたは冗長ブロックの一部をキャッシュバーストとして読出す。
【００４４】
たとえばデータは、データバッファ１１４（図１）から、１６個の長語に対応する３２バイトのキャッシュバーストで読出され得る。図５を参照すると、ライン４０６およびフィードバックライン５１４は３２ビット幅であり、そのためセル４０２は３２ビット（１つの長語）を一度に処理できる。しかしながら、ライン４０６およびフィードバックライン５１４は任意のサイズでもよく、セル４０２は一度に何ビットでも処理できることが認識される。
【００４５】
６０６において、データバッファ１１４（図１）から読出されたデータは、乗算器５０６（図５）からの出力と合計される。図５を参照すると、この例示的実施例において、入力論理５０２は、ライン４０６を介した、エンティティ２０２（図２）から読出されたキャッシュバーストと、フィードバックライン５１４を介した乗算器５０６の出力とに対して、排他的論理和（ＸＯＲ）演算を実行する。上述のように、図７を参照して、入力論理５０２は、ＸＯＲ演算を実行することのできるＸＯＲゲート７０４を含む。しかしながら、入力論理５０２は、多様なタイプおよび個数の論理ゲートを含む、データバッファ１１４（図１）から読出されたデータを乗算器５０６（図５）の出力と合計するための多様なコンポーネントを含み得ることが認識される。
【００４６】
図６を参照すると、６０８において、データバッファ１１４（図１）から読出されたデータと乗算器５０６（図５）の出力との合計が中間結果として格納される。図５を参照すると、この例示的実施例において、入力論理５０２によって生成される中間結果はキュー５０４に格納される。
【００４７】
この例示的実施例において、キュー５０４のエントリのサイズおよび個数は、データバッファ１１４（図１）からデータを読出すのに用いられるキャッシュバーストのサイズ、および、ライン４０６とフィードバックライン５１４とのサイズに基づいて決定される。たとえば、１６個の長語に対応する３２バイトのキャッシュバーストでデータバッファ１１４（図１）からデータが読出され、ライン５１６およびフィードバックライン５１４が３２ビット幅である場合、キャッシュバーストの各長語は乗算器５０６の出力と合計され、キュー５０４のエントリとして格納される。したがって、この例によれば、キュー５０４は８個のエントリを含み、各エントリは３２ビット長である。キャッシュバーストのサイズが変更されると、キュー５０４のサイズもさらに変更され得る。たとえばキャッシュバーストが６４バイト長の場合、キュー５０４は各々が３２ビット長の１６個のエントリを含むことができる。
【００４８】
図６を参照すると６１０において、中間結果は生成多項式の根で乗算される。図５を参照するとこの例示的実施例において、乗算器５０６は、キュー５０４に格納される中間結
果とキュー５１０に格納される生成多項式の根との間でガロア体乗算を実行する、ガロア体乗算器(Galois Field Multiplier)である。
【００４９】
この例示的実施例において、乗算器５０６は複数の並列なガロア体乗算を実行する。たとえば、キュー５０４の各エントリが３２ビット長の場合、キュー５０４のエントリの３２ビットのデータが、４個の並列な８ビットのガロア体要素としてフォーマットされ得る。次に乗算器５０６は、キュー５０４の３２ビット長のエントリとキュー５１０の生成多項式の８ビットの根との間で４個の並列な８×８のガロア体乗算を実行することができる。
【００５０】
図６を参照すると６１２において、エンティティ２０２（図２）のすべてのデータブロックおよび冗長ブロックが処理されていない場合、ループ６０４からループ６１２は、次のデータブロックまたは冗長ブロックを処理するために反復される。この例示的実施例において、次に処理されるべきデータブロックが誤りを有すると判断されたときは、６０４において、データバッファ１１４（図１）からキャッシュバーストを読出すのではなく、すべてゼロが読出される。すべてのデータブロックおよび冗長ブロックの処理が済めば、読出プロセス６００は６１４において終了する。
【００５１】
この例示的実施例において、ループ６０４からループ６１２の反復の回数は、エンティティ２０２（図２）のデータブロックおよび冗長ブロックの個数に対応する。たとえば図３を参照して、エンティティ２０２の部分が３２バイト長のキャッシュバーストで読出されると仮定する。ループ６０４からループ６１２（図６）の第１の反復において、データブロックＤ19の第１の３２バイトを含む第１のキャッシュバーストが読出され、処理される。ループ６０４からループ６１２（図６）の第２の反復において、データブロックＤ18の第１の３２バイトを含む第２のキャッシュバーストが読出され、処理される。データブロックＤ4が誤りを有すると識別されたと仮定する。すると、ループ６０４からループ６１２（図６）の第１６の反復において、データブロックＤ4からキャッシュバーストを読出すのではなく、すべてゼロが読出され、処理される。この例において、ループ６０４からループ６１２（図６）は、１６個のデータブロックおよび４個の冗長ブロックすべてを処理するために２０回反復される。
【００５２】
図５を参照すると、ループ６０４からループ６１２（図６）の第１の反復において、第１のキャッシュバーストと乗算器５０６の出力との合計の結果は、第１のキャッシュバーストで読出されたデータであることに注意されたい。なぜなら、キュー５０４は空で乗算器５０６の出力はゼロだからである。第２の反復において、キュー５０４は第１のキャッシュバーストで読出されたデータを保持し、乗算器５０６の出力は、第１のキャッシュバーストで読出されたデータを生成多項式の根で乗算したものである。したがって、第２のキャッシュバーストと乗算器５０６の出力との合計の結果は、第２のキャッシュバーストで読出されたデータと、第１のキャッシュバーストで読出されたデータを生成多項式の根で乗算した結果との合計である。次にこの結果は新しい中間結果としてキュー５０４に格納される。すべてのデータブロックおよび冗長ブロックの処理が済んで、読出プロセス６００が６１４（図６）において終了するとき、各セル４０２のキュー５０４に格納されている最終的な結果は、各セル４０２の部分シンドロームである。
【００５３】
再び図４を参照するとこの例示的実施例において、各セル４０２は生成多項式の異なる根を用いる。したがって、複数のセル４０２の各々において異なる部分シンドロームが生成される。
【００５４】
【数３】
0004733403.tif 000004
【００５５】
複数のセル４０２の生成多項式の根が逐次的である必要がある一方で、シーケンスはいずれの数から開始してもよい。たとえば、各セル４０２は生成多項式の根であるαn+lを用いることができ、ここでｎはセルのシーケンス番号であり、ｌは各セル４０２の固定定数である。
【００５６】
【数４】
0004733403.tif 000005
【００５７】
読出プロセス６００（図６）が終了した後、各セル４０２は、生成された部分シンドロームおよび誤り位置行列の逆行列の部分に基づいて、部分誤り値を生成する。図８を参照すると、セル４０２（図４）で部分誤り値を生成する例示的な書込プロセス８００が示される。
【００５８】
８０２において、セル４０２（図４）は書込モードに設定される。図５を参照すると、この例示的実施例において、入力論理５０２は、フィードバックライン５１６から入力を受取るよう設定され、フィードバックライン５１６は、前の読出プロセスでセル４０２に生成された部分シンドロームを保持するキュー５０４に接続される。より特定的には、図７を参照すると、マルチプレクサ７０２はフィードバックライン５１６から入力を受取るように設定される。図５を参照すると、乗算器５０６は、キュー５０４、および、誤り位置行列の逆行列の部分を保持するキュー５１２から入力を受取るよう設定される。より特定的には、キュー５１０およびキュー５１２に入力が接続されたマルチプレクサ５０８は、キュー５１２から入力を受取るよう設定される。
【００５９】
上述のように、誤り位置行列は、記憶媒体から検索された誤りを有するデータブロックの位置を特定する。たとえば、例示的な誤り位置行列は下記のように表わされる。
【００６０】
【数５】
0004733403.tif 000006
【００６１】
ここでＸは誤りの位置であり、ρは誤りのあるデータブロックおよび冗長ブロックの総数である。誤り位置行列の逆行列は下記のように表わされる。
【００６２】
【数６】
0004733403.tif 000007
【００６３】
さらに上述のように、この例示的実施例において、誤り位置行列の逆行列はファームウェアまたはハードウェアによって生成され得る。
【００６４】
【数７】
0004733403.tif 000008
【００６５】
【数８】
0004733403.tif 000009
【００６６】
図８を参照すると、８０６において、セル４０２（図４）によって生成された部分誤り値が加算論理４０４（図４）に送られる。図４を参照すると、上述の例において、セル４０２（０）、セル４０２（１）、…、セル４０２（ρ−１）によって生成された部分誤り値ｙ0（０）、ｙ0（１）、…、およびｙ0（ρ−１）が加算論理４０４に送られる。
【００６７】
加算論理４０４は、誤り値を生成するため、セル４０２によって生成された部分誤り値を合計する。上述の例において、第１の誤り値Ｙ0は、セル４０２（０）、セル４０２（１）、…、セル４０２（ρ−１）によって生成された部分誤り値ｙ0（０）、ｙ0（１）、…、およびｙ0（ρ−１）を合計することによって生成される。
【００６８】
図９を参照すると、この例示的実施例において、加算論理４０４はセル４０２（図４）の出力のガロア体和を演算する、ＸＯＲゲート９０２のアレイを含むことができる。しかしながら、加算論理４０４は、多様なタイプおよび個数の論理コンポーネントを含む、セル４０２（図４）の出力のガロア体和を演算する多様なコンポーネントを含むことができることが認識される。
【００６９】
【数９】
0004733403.tif 000010
【００７０】
【数１０】
0004733403.tif 000011
【００７１】
【数１１】
0004733403.tif 000012
【００７２】
図５を参照すると、次に書込プロセス８００（図８）を反復して部分誤り値の他の集合を生成することができ、それらを合計して他の誤り値を生成することができ、次にその生成された他の誤り値を用いて、誤りのある他のデータブロックの部分を訂正することができる。たとえば第２の反復において、部分誤り値の第２の集合が生成され、合計されて、第２の誤り値が生成される。
【００７３】
【数１２】
0004733403.tif 000013
【００７４】
８０６（図８）の第２の反復において、セル４０２（０）、セル４０２（１）、…、およびセル４０２（ρ−１）によって生成される部分誤り値ｙ1（０）、ｙ1（１）、…、およびｙ1（ρ−１）の第２の集合が、加算論理４０４に送られる。次に部分誤り値ｙ1（０）、ｙ1（１）、…、およびｙ1（ρ−１）を合計することによって、第２の誤り値Ｙ1が生成される。
【００７５】
書込プロセス８００（図８）を反復し、生成された部分誤り値の集合を合計することによって、誤りを有すると識別されるデータブロックの部分を訂正するための誤り値が生成され得る。書込プロセス８００（図８）が反復される回数および生成される誤り値の個数は、誤りを有すると識別されたデータブロックの個数（すなわち、ρ個）に基づいて決定され得る。代替として、書込プロセス８００（図８）が反復される回数および生成される誤り値の個数は、訂正され得るデータブロックの最大個数に設定されることができ、それはエンティティ２０２（図２）の冗長ブロックの個数に対応する。
【００７６】
書込プロセス８００（図８）が完了した後で、読出プロセス６００（図６）を再び反復して、データバッファ１１４（図１）に格納されたデータブロックおよび冗長ブロックの他の部分を処理することができ、次いで、書込プロセス８００（図８）を再び反復して、誤りを有するデータブロックの他の部分で誤りを訂正することができる。この例示的実施例において、読出プロセス６００（図６）を再び反復させる前に、キュー５０４（図５）がクリアされる。
【００７７】
たとえば、図３を参照して、エンティティ２０２の部分が３２バイトの長さのキャッシュバーストで読出されると仮定する。読出プロセス６００（図６）が反復され、各データブロック２０４および各冗長ブロック２０６の第１の３２バイトを読出し、処理して、部分シンドロームを生成する。次に書込プロセス８００（図８）が反復されて誤り値を生成し、誤りを有するデータブロック２０４の第１の３２バイトにおける誤りを訂正する。キュー５０４（図５）がクリアされ、次に読出プロセス６００（図６）が再び反復されて、各データブロック２０４および各冗長ブロック２０６の第２の３２バイトを読出し、処理して、部分シンドロームの他の集合を生成する。次に書込プロセス８００（図８）が再び反復されて誤り値を生成し、誤りを有するデータブロック２０４の第２の３２バイトにおける誤りを訂正する。この態様で、各データブロック２０４および各冗長ブロック２０６のすべての部分が読出プロセス６００（図６）を用いて読出され、処理されて、誤りを有するデータブロックのすべての部分が書込プロセス８００（図８）を用いて訂正される。
【００７８】
例示的な実施例について説明されたが、本発明の精神および／または範囲を逸脱することなく多様な変形がなされ得る。たとえば図４を参照すると、復号器４００が記憶装置と接続して説明されるが、復号器４００は多様な装置と接続して用いることができ、また、たとえば電気通信システムの一部のような、誤りをもたらすチャネルを介してデータが受取られる、多様な分野で用いられることができる認識されるべきである。したがって本発明は、上記に説明され、図面に示された具体的形態に限定されるものと解されてはならない。
【図面の簡単な説明】
【００７９】
【図１】例示的な記憶装置に接続された例示的なホスト端末を示す図である。
【図２】データブロック、冗長ブロック、および巡回冗長検査符号の集合を有する例示的なエンティティを示す図である。
【図３】図２の例示的なエンティティの部分を示す図である。
【図４】例示的な復号器を示す図である。
【図５】図４で示された例示的な復号器の例示的なセルを示す図である。
【図６】図５で示された例示的なセルによって実行される例示的な読出プロセスを示す図である。
【図７】図５で示された例示的なセルの部分を示す図である。
【図８】図５で示された例示的なセルによって実行される例示的な書込プロセスを示す図である。
【図９】図５で示された例示的なセルの他の部分を示す図である。
【符号の説明】
【００８０】
１０２  ホスト端末、１０４  記憶装置、１０６  記憶媒体、１０８  チャネルおよび読出／書込ヘッド、１１０  プロセッサ、１１２  誤り検出／訂正ユニット、１１４  データバッファ、１１６  冗長ブロック符号器／復号器、１１８  内部符号符号器／復号器、４００  復号器、４０２  セル、４０４  加算論理
【図１】
0004733403.tif 000014
【図２】
0004733403.tif 000015
【図３】
0004733403.tif 000016
【図４】
0004733403.tif 000017
【図５】
0004733403.tif 000018
【図６】
0004733403.tif 000019
【図７】
0004733403.tif 000020
【図８】
0004733403.tif 000021
【図９】
0004733403.tif 000022