(57)【特許請求の範囲】
【請求項１】
ｋビットの情報記号系列と、１ビット訂正可能なハミング符号から構成されるｍビットのパリティ検査符号系列とを含むｋ＋ｍビットの符号語系列を、検査行列に従って復号する復号装置において、
前記ｍビットのパリティ検査符号系列は前記検査行列に対応する生成行列に従って生成されており、
前記検査行列は単位行列と係数行列とを含み、前記係数行列内の２番目のベクトル乃至最後のベクトルそれぞれの最上位ビットは１であり、前記２番目のベクトル乃至前記最後のベクトルから構成される行列の内、前記２番目のベクトル乃至前記最後のベクトルそれぞれの最上位ビットを除いた残りの行列には、値が１からｋ−１までのバイナリコード群が前記２番目のベクトルから前記最後のベクトルに向けて順番に配置され、前記係数行列の先頭のベクトルは、前記検査行列内の他の各ベクトルと重複せず且つ最上位ビットが零である所定のビットパターンから構成され、且つ前記ｋおよび前記ｍは、ｋ＋ｍ≦２ｍ−１、およびｋ≦２（ｍ−１）の制約条件を満たす整数であり、
前記ｋ＋ｍビットの符号語系列に対応するｍビットのシンドロームを前記検査行列に従って算出するように構成されたシンドローム算出部と、
前記算出されたｍビットのシンドロームの最上位ビットが１で、且つ前記算出されたｍビットのシンドロームが前記単位行列内の各ベクトルと重複しない場合、前記算出されたｍビットのシンドロームに含まれる下位ｍ−１ビットのデータフィールドを、エラーが発生している、前記ｋビットの情報記号系列中のビット位置を示すエラーアドレスとして出力し、前記算出されたｍビットのシンドロームが前記所定のビットパターンである場合、零を前記エラーアドレスとして出力するように構成されたエラーアドレス出力部とを具備することを特徴とする復号装置。
【請求項２】
前記エラーアドレス出力部から出力されるエラーアドレスにしたがって、前記ｋビットの情報記号系列のエラーを訂正するエラー訂正部とをさらに具備することを特徴とする請求項１記載の復号装置。
【請求項３】
前記エラー訂正部は、前記エラーアドレス出力部から出力されるエラーアドレスによって指定される、前記ｋビットの情報記号系列のビット位置の論理値を反転することを特徴とする請求項２記載の復号装置。
【請求項４】
前記シンドローム算出部は、前記ｋ＋ｍビットの符号語系列に含まれる前記ｋビットの情報記号系列を２のべき乗ビットのデータフィールド単位で繰り返し入力し、入力されたデータフィールド毎に当該データフィールドと前記係数行列との間の行列演算を実行して前記ｋビットの情報記号系列に対応する前記ｍビットのパリティ検査符号系列を生成する手段と、前記生成されたｍビットのパリティ検査符号系列に、前記ｋ＋ｍビットの符号語系列に含まれる前記ｍビットのパリティ検査符号系列をそれぞれ加算して、前記ｋ＋ｍビットの符号語系列に対応するｍビットのシンドロームを生成する手段とを含むことを特徴とする請求項１記載の復号装置。
【請求項５】
ｋビットの情報記号系列を検査行列に対応する生成行列に従って符号化して、前記ｋビットの情報記号系列と、１ビット訂正可能なハミング符号から構成されるｍビットのパリティ検査符号系列とを含むｋ＋ｍビットの符号語系列を生成するように構成された符号化部であって、前記検査行列は、単位行列と係数行列とを含み、前記係数行列内の２番目のベクトル乃至最後のベクトルそれぞれの最上位ビットは１であり、前記２番目のベクトル乃至前記最後のベクトルから構成される行列の内、前記２番目のベクトル乃至前記最後のベクトルそれぞれの最上位ビットを除いた残りの行列には、値が１からｋ−１までのバイナリコード群が前記２番目のベクトルから前記最後のベクトルに向けて順番に配置され、前記係数行列の先頭のベクトルは、前記検査行列内の他の各ベクトルと重複せず且つ最上位ビットが零である所定のビットパターンから構成され、且つ前記ｋおよび前記ｍは、ｋ＋ｍ≦２ｍ−１、およびｋ≦２（ｍ−１）の制約条件を満たす整数であり、
前記生成されたｋ＋ｍビットの符号語系列を記憶メディアに書き込む書き込み部と、
前記記憶媒体に格納されている前記ｋ＋ｍビットの符号語系列を読み出す読み出し部と、
前記読み出された前記ｋ＋ｍビットの符号語系列に対応するｍビットのシンドロームを前記検査行列に従って算出するように構成されたシンドローム算出部と、
前記算出されたｍビットのシンドロームの最上位ビットが１で、且つ前記算出されたｍビットのシンドロームが前記単位行列内の各ベクトルと重複しない場合、前記算出されたｍビットのシンドロームに含まれる下位ｍ−１ビットのデータフィールドを、エラーが発生している、前記ｋビットの情報記号系列中のビット位置を示すエラーアドレスとして出力し、前記算出されたｍビットのシンドロームが前記所定のビットパターンである場合、零を前記エラーアドレスとして出力するように構成されたエラーアドレス出力部と、
前記エラーアドレス出力部から出力されるエラーアドレスにしたがって、前記ｋビットの情報記号系列のエラーを訂正するエラー訂正部とを具備することを特徴とする記憶装置。
【請求項６】
前記エラー訂正部は、前記エラーアドレス出力部から出力されるエラーアドレスによって指定される、前記ｋビットの情報記号系列のビット位置の論理値を反転することを特徴とする請求項５記載の記憶装置。
【請求項７】
前記シンドローム算出部は、前記ｋ＋ｍビットの符号語系列に含まれる前記ｋビットの情報記号系列を２のべき乗ビットのデータフィールド単位で繰り返し入力し、入力されたデータフィールド毎に当該データフィールドと前記係数行列との間の行列演算を実行して前記ｋビットの情報記号系列に対応する前記ｍビットのパリティ検査符号系列を生成する手段と、前記生成されたｍビットのパリティ検査符号系列に、前記ｋ＋ｍビットの符号語系列に含まれる前記ｍビットのパリティ検査符号系列をそれぞれ加算して、前記ｋ＋ｍビットの符号語系列に対応するｍビットのシンドロームを生成する手段とを含むことを特徴とする請求項５記載の記憶装置。
【請求項８】
ｋビットの情報記号系列と、１ビット訂正可能なハミング符号から構成されるｍビットのパリティ検査符号系列とを含むｋ＋ｍビットの符号語系列を、検査行列に従って復号する復号方法であって、
前記ｍビットのパリティ検査符号系列は前記検査行列に対応する生成行列に従って生成されており、前記検査行列は単位行列と係数行列とを含み、前記係数行列内の２番目のベクトル乃至最後のベクトルそれぞれの最上位ビットは１であり、前記２番目のベクトル乃至前記最後のベクトルから構成される行列の内、前記２番目のベクトル乃至前記最後のベクトルそれぞれの最上位ビットを除いた残りの行列には、値が１からｋ−１までのバイナリコード群が前記２番目のベクトルから前記最後のベクトルに向けて順番に配置され、前記係数行列の先頭のベクトルは、前記検査行列内の他の各ベクトルと重複せず且つ最上位ビットが零である所定のビットパターンから構成され、且つ前記ｋおよび前記ｍは、ｋ＋ｍ≦２ｍ−１、およびｋ≦２（ｍ−１）の制約条件を満たす整数であり、
前記ｋ＋ｍビットの符号語系列に対応するｍビットのシンドロームを前記検査行列に従って算出するシンドローム算出ステップと、
前記算出されたｍビットのシンドロームの最上位ビットが１で、且つ前記算出されたｍビットのシンドロームが前記単位行列内の各ベクトルと重複しない場合、前記算出されたｍビットのシンドロームに含まれる下位ｍ−１ビットのデータフィールドを、エラーが発生している、前記ｋビットの情報記号系列中のビット位置を示すエラーアドレスとして出力するステップと、
前記算出されたｍビットのシンドロームが前記所定のビットパターンである場合、零を前記エラーアドレスとして出力するステップとを具備することを特徴とする復号方法。
【請求項９】
前記出力されるエラーアドレスにしたがって、前記ｋビットの情報記号系列のエラーを訂正するエラー訂正ステップをさらに具備することを特徴とする請求項８記載の復号方法。
【請求項１０】
前記エラー訂正ステップは、前記出力されるエラーアドレスによって指定される、前記ｋビットの情報記号系列のビット位置の論理値を反転することを特徴とする請求項９記載の復号方法。
【請求項１１】
前記シンドローム算出ステップは、前記ｋ＋ｍビットの符号語系列に含まれる前記ｋビットの情報記号系列を２のべき乗ビットのデータフィールド単位で繰り返し入力し、入力されたデータフィールド毎に当該データフィールドと前記係数行列との間の行列演算を実行して前記ｋビットの情報記号系列に対応する前記ｍビットのパリティ検査符号系列を生成するステップと、前記生成されたｍビットのパリティ検査符号系列に、前記ｋ＋ｍビットの符号語系列に含まれる前記ｍビットのパリティ検査符号系列をそれぞれ加算して、前記ｋ＋ｍビットの符号語系列に対応するｍビットのシンドロームを生成するステップとを含むことを特徴とする請求項８記載の復号方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報記号系列とパリティ検査符号系列とを含む符号語系列を検査行列に従って復号する復号装置および記憶装置、並びに復号方法に関する。
【背景技術】
【０００２】
一般に、記憶装置や通信装置においては、情報記号系列の誤りを訂正するための誤り訂正機能が利用されている。誤り訂正機能の多くは、パリティ検査符号系列を用いている。
【０００３】
特許文献１には、パリティビット群を含むデータフィールド内のエラーを訂正するエラー訂正回路が開示されている。
【０００４】
通常、情報記号系列に対応するパリティ検査符号系列（またはパリティビット群と云う）は、生成行列に従って生成される。また、情報記号系列と生成されたパリティ検査符号系列とを含む符号語系列の復号は、生成行列に対応する検査行列にしたがって実行される。符号語系列の復号処理においては、符号語系列のシンドロームが検査行列にしたがって算出される。そして、この算出されたシンドロームは、情報記号系列内のエラー位置を示すエラーアドレスに変換される。
【特許文献１】特許第２５３９３４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
算出されたシンドロームをエラーアドレスに変換する処理は組み合わせ回路を用いて実行することができる。しかし、情報記号系列のデータ長（ビット数）が大きい場合には、変換処理に必要な組み合わせ回路の回路規模は非常に大きくなる。
【０００６】
このため、データ長の長い情報記号系列を扱う復号装置においては、変換処理を組み合わせ回路によって行うことは現実的ではない。よって、復号装置の回路規模の低減を図るためには、シンドロームから容易にエラーアドレスを決定するための新たな機能が必要となる。
【０００７】
本発明は上述の事情を考慮してなされたものであり、シンドロームから容易にエラーアドレスを決定することが可能な復号装置、記憶装置および復号方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述の課題を解決するため、本発明は、ｋビットの情報記号系列と、１ビット訂正可能なハミング符号から構成されるｍビットのパリティ検査符号系列とを含むｋ＋ｍビットの符号語系列を、検査行列に従って復号する復号装置において、前記ｍビットのパリティ検査符号系列は前記検査行列に対応する生成行列に従って生成されており、前記検査行列は単位行列と係数行列とを含み、前記係数行列内の２番目のベクトル乃至最後のベクトルそれぞれの最上位ビットは１であり、前記２番目のベクトル乃至前記最後のベクトルから構成される行列の内、前記２番目のベクトル乃至前記最後のベクトルそれぞれの最上位ビットを除いた残りの行列には、値が１からｋ−１までのバイナリコード群が前記２番目のベクトルから前記最後のベクトルに向けて順番に配置され、前記係数行列の先頭のベクトルは、前記検査行列内の他の各ベクトルと重複せず且つ最上位ビットが零である所定のビットパターンから構成され、且つ前記ｋおよび前記ｍは、ｋ＋ｍ≦２ｍ−１、およびｋ≦２（ｍ−１）の制約条件を満たす整数であり、前記ｋ＋ｍビットの符号語系列に対応するｍビットのシンドロームを前記検査行列に従って算出するように構成されたシンドローム算出部と、前記算出されたｍビットのシンドロームの最上位ビットが１で、且つ前記算出されたｍビットのシンドロームが前記単位行列内の各ベクトルと重複しない場合、前記算出されたｍビットのシンドロームに含まれる下位ｍ−１ビットのデータフィールドを、エラーが発生している、前記ｋビットの情報記号系列中のビット位置を示すエラーアドレスとして出力し、前記算出されたｍビットのシンドロームが前記所定のビットパターンである場合、零を前記エラーアドレスとして出力するように構成されたエラーアドレス出力部とを具備することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、シンドロームから容易にエラーアドレスを決定することが可能となる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照して、本発明の実施形態を説明する。  
図１には、本発明の一実施形態に係る復号装置を用いたシステムの構成例が示されている。このシステムは、例えば、ハードディスクドライブのような記憶装置内に設けられる、符号化および復号回路として実現されている。この符号化および復号回路は、１ビット訂正可能なハミング符号を用いて符号化および復号処理を実行する。
【００１１】
情報記号系列の長さ（ビット数）をｋビットとし、ｋビットの情報記号系列に付加するパリティ検査符号系列の長さ（ビット数）をｍとすると、一般には、次の制約を満たすことが必要となる。
【００１２】
（１）  ｋ＋ｍ  ≦  ２ｍ−１
ここで、ｋ，ｍは整数である。
【００１３】
本実施形態では、シンドロームからエラーへアドレスへの変換処理を簡単化するために、（１）式の制約条件に加え、さらに、
（２）  ｋ≦２（ｍ−１）
の制約条件が追加されている。
【００１４】
ここで、（１）式および（２）式を満たすｋ，ｍの例について考える。
【００１５】
例えば、情報記号系列のビット数ｋがハードディスクドライブの１セクタのビット数（４０９６ビット）である場合、つまりｋ＝４０９６である場合を想定する。この場合、（１）式および（２）式を満たす、パリティ検査符号系列のビット数ｍは、例えば、１３ビットとなる。
【００１６】
以下では、説明を簡単にするために、情報記号系列のビット数ｋが８ビット、パリティ検査符号系列のビット数ｍが４ビットである場合を想定する。ｋ＝８、ｍ＝４は、（１）式および（２）式の双方の制約条件を満たす整数である。
【００１７】
ホスト装置から送信されるデータを記憶メディア１２に書き込み処理においては、ホスト装置からライトデータとして送信される８ビットの情報記号系列C0,C1,C2,C3,C4,C5,C6,C7は、まず、符号化器１１に入力される。
【００１８】
符号化器１１は、８ビットの情報記号系列C0,C1,C2,C3,C4,C5,C6,C7を符号化して、８ビットの情報記号系列C0,C1,C2,C3,C4,C5,C6,C7と４ビットのパリティ検査符号系列P0,P1,P2,P3とを含む１２ビットの符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3を生成する。パリティ検査符号系列P0,P1,P2,P3は、１ビット訂正可能なハミング符号から構成されている。符号化処理は、図２で後述する検査行列に対応した生成行列に従って実行される。１２ビットの符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3は記憶メディア１２に格納される。
【００１９】
記憶メディア１２に格納されたデータをホストに読み出す処理においては、記憶メディア１２に格納された１２ビットの符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3は記憶メディア１２から読み出され、復号器１３に入力される。
【００２０】
復号器１３は１２ビットの符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3を図２で後述する検査行列に従って復号して、８ビットの情報記号系列C0,C1,C2,C3,C4,C5,C6,C7内でエラーが発生しているビット位置（エラー発生位置）を示すエラーアドレスを生成する。
【００２１】
エラー訂正回路１４は、エラーアドレスに従って、記憶メディア１２から読み出された１２ビットの符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3内の８ビットの情報記号系列C0,C1,C2,C3,C4,C5,C6,C7のエラーを訂正する。具体的には、エラー訂正回路１４は、例えば、エラーアドレスによって指定される、８ビットの情報記号系列C0,C1,C2,C3,C4,C5,C6,C7内の特定のビット位置の論理値を反転する。
【００２２】
次に、図２を参照して、本実施形態で用いられる検査行列の例を説明する。
【００２３】
図２は、転置された検査行列の例が示されている。
【００２４】
この転置された検査行列は、ｍ×ｍ（＝４×４）の単位行列と、ｍ×ｋ（＝４×８）の係数行列とから構成されている。
【００２５】
ｋ，ｍは、
（１）  ｋ＋ｍ≦２ｍ−１、および
（２）  ｋ≦２（ｍ−１）
の制約条件を満たす整数である。
【００２６】
係数行列内の２番目のベクトル乃至最後のベクトルそれぞれの最上位ビットは１であり、２番目のベクトル乃至最後のベクトルから構成される行列の内、２番目のベクトル乃至最後のベクトルそれぞれの最上位ビットを除いた残りの行列には、値が１からｋ−１までのバイナリコード群が２番目のベクトルから最後のベクトルに向けて順番に配置されている。係数行列の先頭のベクトルは、他の各ベクトルと重複せず且つ最上位ビットが零である所定のビットパターンから構成されている。
【００２７】
すなわち、図２に示されているように、ｍ×ｋの係数行列内の２番目の行ベクトルからｋ番目（＝８番目）の行ベクトルまでのｋ−１個（＝７個）の行ベクトルそれぞれの最上位ビットは１に設定されている。これらｋ−１個（＝７個）の行ベクトルから各行ベクトルの最上位ビットを除いた残りの（ｍ−１）×（ｋ−１）の行列、つまり３×７の行列には、それぞれの値が１からｋ−１（＝７）までのバイナリコード群（001,010,011,100,101,110,111）が２番目の行ベクトルからｋ番目（＝７番目）の行ベクトルに向けて順番に配置されている。ｍ×ｋの係数行列の先頭の行ベクトルは、転置された検査行列内の他のどの行ベクトルとも重複せず且つ最上位ビットが零である所定のビットパターン（例えば0111）から構成されている。
【００２８】
このような構成の検査行列を用いることにより、基本的には、シンドロームの値そのものをエラーアドレスとして使用することが可能となる。
【００２９】
図３には、図１の復号器１３の構成例が示されている。
【００３０】
図３に示されているように、復号器１３は、シンドローム算出部１３１、“S0=1”検出部１３２、“1000”検出部１３３、“0111”検出部１３４、およびエラーアドレス出力部１３５から構成されている。
【００３１】
シンドローム算出部１３１は、１２ビットの符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3に対応する４ビットのシンドロームS0,S1,S2,S3を図２の転置された検査行列に従って算出するように構成されている。
【００３２】
“S0=1”検出部１３２は、算出された４ビットのシンドロームS0,S1,S2,S3の最上位ビットS0が“１”であることを検出する。“1000”検出部１３３は、算出された４ビットのシンドロームS0,S1,S2,S3のビットパターンが“1000”であることを検出する。“0111”検出部１３４は、算出された４ビットのシンドロームS0,S1,S2,S3のビットパターンが“0111”であることを検出する。
【００３３】
エラーアドレス出力部１３５は、算出された４ビットのシンドロームS0,S1,S2,S3の最上位ビットS0が“１”で、且つ算出された４ビットのシンドロームS0,S1,S2,S3のビットパターンが単位行列内の各行ベクトルと重複しないビットパターンである場合、つまり、S0が“１”で、且つ４ビットのシンドロームS0,S1,S2,S3のビットパターンが“1000”ではない場合、算出された４ビットのシンドロームS0,S1,S2,S3の下位３ビットのデータフィールドS1,S2,S3をそのまま３ビットのエラーアドレスe0,e1,e2として出力する。
【００３４】
また、エラーアドレス出力部１３５は、算出された４ビットのシンドロームS0,S1,S2,S3のビットパターンが“0111”である場合、零をエラーアドレスとして出力、つまり0,0,0をe0,e1,e2として出力する。
【００３５】
ここで、エラーアドレスとシンドロームとの関係を説明する。
【００３６】
図２の転置された検査行列を用いて復号処理を実行した場合においては、エラー発生位置とシンドロームとの関係は、次の通りである。
【００３７】
(1)  アドレス0つまりC0にエラーが発生した場合、(S0 S1 S2 S3) = (0 1 1 1)
(2)  アドレス1つまりC1にエラーが発生した場合、(S0 S1 S2 S3) = (1 0 0 1)
(3)  アドレス2つまりC2にエラーが発生した場合、(S0 S1 S2 S3) = (1 0 1 0)
(4)  アドレス3つまりC3にエラーが発生した場合、(S0 S1 S2 S3) = (1 0 1 1)
(5)  アドレス4つまりC4にエラーが発生した場合、(S0 S1 S2 S3) = (1 1 0 0)
(6)  アドレス5つまりC5にエラーが発生した場合、(S0 S1 S2 S3) = (1 1 0 1)
(7)  アドレス6つまりC6にエラーが発生した場合、(S0 S1 S2 S3) = (1 1 1 0)
(8)  アドレス7つまりC7にエラーが発生した場合、(S0 S1 S2 S3) = (1 1 1 1)
(9)  パリティP0にエラーが発生した場合、(S0 S1 S2 S3) = (1 0 0 0)
(10) パリティP1にエラーが発生した場合、(S0 S1 S2 S3) = (0 1 0 0)
(11) パリティP2にエラーが発生した場合、(S0 S1 S2 S3) = (0 0 1 0)
(12) パリティP3にエラーが発生した場合、(S0 S1 S2 S3) = (0 0 0 1)
このうち、エラー訂正が必要なのは(1)〜(8)だけである。従って、S0が“１”で、且つシンドロームS0,S1,S2,S3が“1000”でない場合には、S1,S2,S3をそのままエラーアドレスe0,e1,e2として使用することができる。また、シンドロームS0,S1,S2,S3が“0111”である場合には、エラーアドレスがアドレス０を示すように、0,0,0をe0,e1,e2として出力すればよい。
【００３８】
このように、図２の検査行列(転置)を用いることにより、シンドロームから容易にエラーアドレスを決定することが可能となる。
【００３９】
なお、図２は、転置された検査行列の構成例を示したが、転置していない標準形式の検査行列を用いて符号化および復号化処理を実行することもできる。
【００４０】
図４は、図２の転置された検査行列に対応する、標準形式の検査行列を示している。
【００４１】
図２の転置された検査行列を転置したものが、図４の検査行列である。図４の検査行列は、ｍ×ｍ（＝４×４）の単位行列と、ｋ×ｍ（＝８×４）の係数行列とから構成されている。
【００４２】
ｋ×ｍの係数行列内の２番目の列ベクトルからｋ番目（＝８番目）の列ベクトルまでのｋ−１個（＝７個）の列ベクトルそれぞれの最上位ビット（１行目のビット）は１である。これらｋ−１個（＝７個）の列ベクトルから各列ベクトルの最上位ビットを除いた残りの（ｋ−１）×（ｍ−１）の行列、つまり７×３の行列には、それぞれの値が１からｋ−１（＝７）までのバイナリコード群（001,010,011,100,101,110,111）が２番目の列ベクトルからｋ番目（＝７番目）の列ベクトルに向けて順番に配置されている。
【００４３】
ｋ×ｍの係数行列の先頭（１列目）の列ベクトルは、検査行列内の他のどの列ベクトルとも重複せず且つ最上位ビットが零である所定のビットパターン（例えば0111）から構成されている。
【００４４】
図４の検査行列は図２の転置された検査行列と等価であるので、図４の検査行列を用いた場合でも、図２の転置された検査行列を用いた場合と同じ効果を得ることが可能となる。
【００４５】
次に、本実施形態の特徴を明確にするために、図５乃至図１０を参照して、通常の検査行列を用いた、通常の符号化および復号回路について説明する。
【００４６】
図５には、ｍ＝４、ｋ＝８の場合における通常の検査行列の転置行列の構成例が示されている。
【００４７】
通常の検査行列は、４×４の単位行列と、４×８の係数行列とから構成されている。４×８の係数行列においては、００００を除く、任意のビットパターンの４ビットの行ベクトル群が配置されている。この場合、制約条件は、検査行列内の全ての行ベクトルが互いに異なるという条件のみである。
【００４８】
情報記号系列をC0,C1,C2,C3,C4,C5,C6,C7とし、求めるべきパリティ検査符号系列をP0,P1,P2,P3とすると、P0,P1,P2,P3は、図６に示す演算によって算出される。
【００４９】
つまり、P0,P1,P2,P3は、以下の式で与えられる。
【００５０】
P0 = C0 + C1 + C3 + C5 + C6 + C7
P1 = C0 + C2 + C3 + C4 + C5
P2 = C1 + C3 + C4 + C5 + C6
P3 = C0 + C2 + C4 + C5 + C6 + C7
したがって、P0,P1,P2,P3を算出するための符号化器は図７に示す組み合わせ回路によって実現することができる。
【００５１】
P0は、C0,C1,C3,C5,C6,C7を加算する６入力ＥＸＯＲ（排他的論理和）回路２０によって算出される。P1は、C0,C2,C3,C4,C5を加算する５入力ＥＸＯＲ回路２１によって算出される。P2は、C1,C3,C4,C5,C6を加算する５入力ＥＸＯＲ回路２２によって算出される。P3は、C0,C2,C4,C5,C6,C7を加算する６入力ＥＸＯＲ回路２３によって算出される。
【００５２】
符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3のシンドロームS0,S1,S2,S3は、図８の演算によって算出される。
【００５３】
したがって、復号部は、図９のように構成することができる。
【００５４】
ＥＸＯＲ回路３１は、図７で説明した６入力ＥＸＯＲ回路２０の出力値と、P0とを加算してS0を算出する。ＥＸＯＲ回路３２は、図７の５入力ＥＸＯＲ回路２１の出力値と、P1とを加算してS1を算出する。ＥＸＯＲ回路３３は、図７の５入力ＥＸＯＲ回路２２の出力値と、P2とを加算してS2を算出する。ＥＸＯＲ回路３４は、図７の６入力ＥＸＯＲ回路２３の出力値と、P3とを加算してS3を算出する。
【００５５】
シンドローム→エラーアドレス変換回路３５は、シンドロームS0,S1,S2,S3をエラーアドレスに変換する。このシンドローム→エラーアドレス変換回路３５は、図１０の変換テーブルに示す変換処理を実行する。
【００５６】
すなわち、例えば、S0,S1,S2,S3が“1101”の場合においては、“1101”は図５の転置された検査行列の１行目に存在するので、“1101”を、符号語系列の１ビット目のビットCOにエラーが発生していることを示すエラーアドレス0に変換することが必要となる。同様に、S0,S1,S2,S3が“1010”の場合においては、“1010”は図５の転置された検査行列の２行目に存在するので、“1010”を、符号語系列の２ビット目のビットC1にエラーが発生していることを示すエラーアドレス1に変換することが必要となる。
【００５７】
情報記号系列のビット数が増えると、シンドロームをエラーアドレスに変換するための組み合わせ回路の回路規模は非常に膨大となる。
【００５８】
図１１に示されているように、本実施形態で用いられる検査行列（転置）においては、係数行列の２番目のベクトル乃至最後のベクトルに１から７までのバイナリコード群が順番に配置されているので、算出されたシンドロームS0,S1,S2,S3が“0111”の場合以外は、算出されたシンドロームS0,S1,S2,S3の下位３ビットS1,S2,S3をそのままエラーアドレスとして使用することができる。
【００５９】
本実施形態においては、P0,P1,P2,P3は、図１２の演算によって算出される。図２の右辺の４×８の行列は生成行列であり、図２の転置された検査行列内の係数行列に一致している。
【００６０】
図１３は、本実施形態で用いられる符号化器１１の回路構成の例を示している。この符号化器１１は、８ビットの情報記号系列C0,C1,C2,C3,C4,C5,C6,C7を２のべき乗ビットのデータフィールド単位（例えば４ビット単位）で繰り返し入力し、入力されたデータフィールド毎に当該データフィールドと図２の転置された検査行列内の係数行列との間の行列演算処理を実行することにより、４ビットのパリティ検査符号系列P0,P1,P2,P3を生成する。
【００６１】
すなわち、符号化器１１においては、１クロック当たり４ビットのデータを処理することができる。以下では、１クロック当たりに入力される４ビットのデータをD0,D1,D2,D3と表記することとする。１クロック目に処理される４ビットのデータD0,D1,D2,D3はC0,C1,C2,C3に対応し、２クロック目に処理される４ビットのデータD0,D1,D2,D3はC4,C5,C6,C7に対応する。
【００６２】
符号化器１１は、１ビットカウンタ１０１、ＡＮＤゲート１０２、４入力ＥＸＯＲ回路１０３、４入力ＥＸＯＲ回路１０４、４入力ＥＸＯＲ回路１０５、３入力ＥＸＯＲ回路１０６、４入力ＥＸＯＲ回路１０７、および４つのＤフリップフロップ１０８〜１１１から構成されている。
【００６３】
１ビットカウンタ１０１は、１クロック目で０を出力し、２クロック目で１を出力する。４入力ＥＸＯＲ回路１０３およびＤフリップフロップ１０８は、情報記号系列C0,C1,C2,C3,C4,C5,C6,C7と列ベクトル1,1,0,1,0,1,0,1との間の行列演算を実行してP3を算出するための回路である。図１４に示すように、４入力ＥＸＯＲ回路１０３は、１クロック目では、列ベクトル1,1,0,1に従ってD0+D1+D3の演算を実行し、その演算結果をＤフリップフロップ１０８に格納する。２クロック目では、４入力ＥＸＯＲ回路１０３は、列ベクトル0,1,0,1に従ってD1+D3の演算を実行すると共に、その演算結果（D1+D3）とＤフリップフロップ１０８の出力(=D0+D1+D3)とを加算する。これにより、C0+C1+C3+C5+C7がP3として算出される。
【００６４】
４入力ＥＸＯＲ回路１０４およびＤフリップフロップ１０９は、情報記号系列C0,C1,C2,C3,C4,C5,C6,C7と列ベクトル1,0,1,1,0,0,1,1との間の行列演算を実行してP2を算出するための回路である。図１４に示すように、４入力ＥＸＯＲ回路１０４は、１クロック目では、列ベクトル1,0,1,1に従ってD0+D2+D3の演算を実行し、その演算結果をＤフリップフロップ１０９に格納する。２クロック目では、４入力ＥＸＯＲ回路１０４は、列ベクトル0,0,1,1に従ってD2+D3の演算を実行すると共に、その演算結果（D2+D3）とＤフリップフロップ１０９の出力(=D0+D2+D3)とを加算する。これにより、C0+C2+C3+C6+C7がP2として算出される。
【００６５】
４入力ＥＸＯＲ回路１０５およびＤフリップフロップ１１０は、情報記号系列C0,C1,C2,C3,C4,C5,C6,C7と列ベクトル1,0,0,1,1,1,1との間の行列演算を実行してP1を算出するための回路である。図１４に示すように、４入力ＥＸＯＲ回路１０５は、１クロック目では、列ベクトル1,0,0,0に従ってD0をＤフリップフロップ１０９に格納する。２クロック目では、４入力ＥＸＯＲ回路１０５は、列ベクトル1,1,1,1に従って４入力ＥＸＯＲ回路１０７の出力（＝D0+D1+D2+D3）を入力し、そして４入力ＥＸＯＲ回路１０７の出力（＝D0+D1+D2+D3）とＤフリップフロップ１１０の出力(=D0)とを加算する。これにより、C0+C4+C5+C6+C7がP1として算出される。
【００６６】
３入力ＥＸＯＲ回路１０６およびＤフリップフロップ１１１は、情報記号系列C0,C1,C2,C3,C4,C5,C6,C7と列ベクトル0,1,1,1,1,1,1,1との間の行列演算を実行してP0を算出するための回路である。図１４に示すように、３入力ＥＸＯＲ回路１０６は、１クロック目では、列ベクトル0,1,1,1に従って、４入力ＥＸＯＲ回路１０７の出力（＝D0+D1+D2+D3）とD0との排他的論理和演算によってD1+D2+D3を算出し、その算出したD1+D2+D3をＤフリップフロップ１１１に格納する。２クロック目では、３入力ＥＸＯＲ回路１０６は、列ベクトル1,1,1,1に従って４入力ＥＸＯＲ回路１０７の出力（＝D0+D1+D2+D3）を入力し、そして４入力ＥＸＯＲ回路１０７の出力（＝D0+D1+D2+D3）とＤフリップフロップ１１１の出力(=D0+D1+D2+D3)とを加算する。これにより、C1+C2+C3+C4+C5+C6+C7がP0として算出される。
【００６７】
図１５には、情報記号系列C0,C1,C2,C3,C4,C5,C6,C7=“10110010”の場合に対応する図１４の符号化器１１の符号化処理の過程が示されている。
【００６８】
初期状態においては、符号化器１１の出力P0,P1,P2,P3は“0000”である。１クロック目では、“1011”がD1,D2,D3,D4として符号化器１１に入力され、符号化器１１の出力P0,P1,P2,P3は“0110”となる。２クロック目では、“0010”がD1,D2,D3,D4として符号化器１１に入力され、符号化器１１の出力P0,P1,P2,P3は“1000”となる。
【００６９】
図１６は、復号器１３の構成例を示している。
【００７０】
図１６に示すように、復号器１３は、符号化器１１を用いて実現されている。すなわち、復号器１３は、符号化器１１と、４つの２入力ＥＸＯＲ回路１２１〜１２４と、３つの２入力ＡＮＤゲート３１〜３３と、“0111”検出回路１３４とから構成されている。
【００７１】
２入力ＥＸＯＲ回路１２１は、２クロック目のＤフリップフロップ１０８の出力値と、符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3内のP3とを加算してS3を算出する。
【００７２】
２入力ＥＸＯＲ回路１２２は、２クロック目のＤフリップフロップ１０９の出力値と、符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3内のP2とを加算してS2を算出する。
【００７３】
２入力ＥＸＯＲ回路１２３は、２クロック目のＤフリップフロップ１１０の出力値と、符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3内のP1とを加算してS1を算出する。
【００７４】
２入力ＥＸＯＲ回路１２４は、２クロック目のＤフリップフロップ１１１の出力値と、符号語系列C0,C1,C2,C3,C4,C5,C6,C7,P0,P1,P2,P3内のP0とを加算してS0を算出する。
【００７５】
“0111”検出回路１３４は、算出されたシンドロームS0,S1,S2,S3が“0111”である時は１を出力し、それ以外の場合は０を出力する。“0111”検出回路１３４の出力が０ならば、S1,S2,S3がそのままe0,e1,e2として出力される。一方、“0111”検出回路１３４の出力が１ならば、S1,S2,S3それぞれを反転した値がe0,e1,e2として出力される。S0は、後述の２つのエラーフラグ＃１，＃２を生成するために使用される。エラーフラグ＃１，＃２を用いることにより、e0,e1,e2をエラーアドレスとして正しく使用することが可能となる。
【００７６】
図１７には、復号器１３内に設けられるエラーフラグ＃１出力回路の例が示されている。この回路は、３つの２つの２入力ＯＲ回路２０１、２０２と、２入力ＮＯＲ回路２０３とから構成されている。S0,S1,S2,S3が“0000”の時、１のエラーフラグ＃１が出力される。１のエラーフラグ＃１は、エラーが発生していないことを示す。
【００７７】
図１８には、復号器１３内に設けられるエラーフラグ＃２出力回路の例が示されている。この回路は、訂正可能なエラーを検出した時に１のエラーフラグ＃２を発生する。この回路は、 “0111”検出回路３０１、“1000”検出回路３０２、および２つの２入力ＥＸＯＲ回路３０３，３０４から構成されている。“0111”検出回路３０１はS0,S1,S2,S3が“0111”の時、１を出力する。“1000”検出回路３０２は、S0,S1,S2,S3が“1000”の時、１を出力する。
【００７８】
１ビットのエラーが発生する状況は、以下のケースに分けられる。
【００７９】
(1)  アドレス0にエラーが発生した場合、(S0 S1 S2 S3) = (0 1 1 1)
(2)  アドレス1にエラーが発生した場合、(S0 S1 S2 S3) = (1 0 0 1)
(3)  アドレス2にエラーが発生した場合、(S0 S1 S2 S3) = (1 0 1 0)
(4)  アドレス3にエラーが発生した場合、(S0 S1 S2 S3) = (1 0 1 1)
(5)  アドレス4にエラーが発生した場合、(S0 S1 S2 S3) = (1 1 0 0)
(6)  アドレス5にエラーが発生した場合、(S0 S1 S2 S3) = (1 1 0 1)
(7)  アドレス6にエラーが発生した場合、(S0 S1 S2 S3) = (1 1 1 0)
(8)  アドレス7にエラーが発生した場合、(S0 S1 S2 S3) = (1 1 1 1)
(9)  パリティ0にエラーが発生した場合、(S0 S1 S2 S3) = (1 0 0 0)
(10) パリティ1にエラーが発生した場合、(S0 S1 S2 S3) = (0 1 0 0)
(11) パリティ2にエラーが発生した場合、(S0 S1 S2 S3) = (0 0 1 0)
(12) パリティ3にエラーが発生した場合、(S0 S1 S2 S3) = (0 0 0 1)
これらの内、エラー訂正が必要なのは(1)〜(8)だけである。従って、(1)〜(8)が発生したときのみ、このエラーフラグ＃２を１にすればよい。
【００８０】
(2)〜(9)の場合にS0出力が1になるので、このS0出力に対して、(1)を付け足して、(9)を差し引くことにより、エラーフラグ＃２を生成することができる。S0出力に対して、(1)を付け足して、(9)を差し引く演算は、“0111”検出回路３０１の出力と “1000”検出回路３０２の出力との排他的論理和によって実現されている。
【００８１】
図１９は、復号処理の手順を示している。上述したように、シンドロームS0,S1,S2,S3は、符号化器１１の演算結果にP0,P1,P2,P3を加算することによって算出される。エラーが発生していないならば、エラーフラグ＃１は１となる。１ビットエラーが発生しているならば、エラーフラグ＃１は０、エラーフラグ＃２は１となる。訂正不能なエラーが発生しているならば、エラーフラグ＃１は０、エラーフラグ＃２は０となる。
【００８２】
図２０には、情報記号系列C0,C1,C2,C3,C4,C5,C6,C7=“10110010”で、２ビット目にエラーが発生している場合に対応する復号器１３の復号処理の過程が示されている。
【００８３】
初期状態においては、S0,S1,S2,S3は“0000”である。１クロック目では、“1111”がD1,D2,D3,D4として復号器１３に入力され、S0,S1,S2,S3は“1111”となる。２クロック目では、“0010”がD1,D2,D3,D4として復号器１３に入力され、S0,S1,S2,S3は“0001”となる。そして、S0,S1,S2,S3にP0,P1,P2,P3が加算され、S0,S1,S2,S3の最終結果は“1001”となる。この場合、S0が１で、且つS0,S1,S2,S3は“1000”ではないので、S1,S2,S3が訂正可能なエラーが発生している位置を直接的に示す。
【００８４】
すなわち、S0,S1,S2,S3=“1001”の場合には、エラーフラグ＃１＝０、エラーフラグ＃２＝１となり、１ビットエラーの発生が検出される。エラーアドレスは“001”となる。
【００８５】
図２１には、情報記号系列のビット数ｋがハードディスクドライブの１セクタのビット数（４０９６ビット）であり、パリティ検査符号系列のビット数ｍが１３ビットである場合に対応する検査行列の転置行列の例が示されている。
【００８６】
従来では、１３ビットのシンドロームを１２ビットのエラーアドレスに変換するための専用の回路が必要とされたが、本実施形態では、１３ビットのシンドロームの下位１２ビットをエラーアドレスとして使用することができる。よって、符号化および復号回路の回路規模の低減を図ることが可能となる。
【００８７】
図２２には、本実施形態の符号化および復号回路が適用された記憶装置の構成例が示されている。
【００８８】
この記憶装置１はホスト装置２として機能する電子機器にストレージデバイスとして内蔵される装置であり、記憶メディアであるディスク媒体１１０にデータを磁気的に記録する磁気ディスクドライブ装置（ハードディスクドライブ：ＨＤＤ）として実現されている。
【００８９】
この記憶装置１は、ディスク媒体１１０、ヘッド１２０、スピンドルモータ（ＳＰＭ）１３０、アクチュエータ１４０、ボイスコイルモータ（ＶＣＭ）１５０、モータドライバＩＣ１６０、リード／ライト回路１７０、ハードディスクコントローラ（ＨＤＣ）１８０、マイクロプロセッサユニット（ＭＰＵ）１９０、バッファ２００、メモリ２１０、インターフェース回路２２０、およびランプ機構２３を備えている。
【００９０】
ディスク媒体１１０はデータを磁気的に記録する記憶媒体である。ヘッド１２０は磁気ヘッドであり、ディスク媒体１１０へのデータの書き込みおよびディスク媒体１１０からのデータの読み出しを行う。このヘッド１２０は、リード動作を実行するためのリードヘッドとライト動作を実行するライトヘッドとを備えている。ヘッド１２０は、アクチュエータ１４０の先端部に搭載されている。
【００９１】
ディスク媒体１１０はスピンドルモータ（ＳＰＭ）１３０に固定されている。スピンドルモータ（ＳＰＭ）１３０はディスク媒体１１０を回転させるためのモータである。アクチュエータ１４０は、ボイスコイルモータ（ＶＣＭ）１５０によって駆動され、ヘッド１２０をディスク媒体１１０の半径方向に移動する。このアクチュエータ１４０は、軸１４１に対して旋回可能に支持されたヘッドアームから構成されている。
【００９２】
モータドライバＩＣ１６０は、ボイスコイルモータ（ＶＣＭ）１５０を駆動するＶＣＭドライバ１６１およびスピンドルモータ（ＳＰＭ）１３０を駆動するＳＰＭドライバ１６２を備えている。これらＶＣＭドライバ１６１およびＳＰＭドライバ１６２はＭＰＵ１９０によって制御される。
【００９３】
リード／ライト回路１７０は、プリアンプ回路、およびリード／ライトチャネルから構成されている。プリアンプ回路は、リードヘッド１２０から出力されるリード信号を増幅するリードアンプ、及びライトアンプを有する。ライトアンプは、リード／ライトチャネルから出力されるライトデータ信号をライト電流信号に変換して、ライトヘッドに送出する。
【００９４】
ＨＤＣ１８０は、ＭＰＵ１９０の制御の下、リード／ライト回路１７０を用いてリード／ライト制御処理を実行する。このＨＤＣ１８０は、符号化部１８１と、復号およびエラー訂正部１８２を備えている。符号化部１８１は図１の符号化器１１に相当し、復号およびエラー訂正部１８２は、図１の復号器１３およびエラー訂正回路１４に相当する。符号化部１８１、および復号およびエラー訂正部１８２は、記憶媒体としてのバッファ２００へのデータの書き込み／読み出し時に発生するエラーを検出および訂正するために使用される。
【００９５】
すなわち、符号化部１８１は、ホスト装置２からのライトデータを符号化して、パリティ検査符号系列を生成する。このパリティ検査符号系列が付加されたライトデータはＨＤＣ１８０内の書き込み部によってバッファ２００に一旦書き込まれる。そして、ライトデータをディスク媒体１１０に書き込む時には、パリティ検査符号系列が付加されたライトデータはＨＤＣ１８０内の読み出し部によってバッファ２００から読み出され、復号およびエラー訂正部１８２に送られる。復号およびエラー訂正部１８２は、パリティ検査符号系列が付加されたデータを復号してシンドロームを生成し、そして生成されたシンドロームから得られるエラーアドレスに従ってエラー訂正処理を実行する。エラー訂正された後のライトデータはリード／ライト回路１７０によってディスク媒体１１０に書き込まれる。
【００９６】
ＭＰＵ１９０は記憶装置１の動作を制御する制御部であり、メモリ２１０に格納されたプログラムを実行する。メモリ２１０には、ＭＰＵ１９０によって実行されるプログラムが格納されている。
【００９７】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００９８】
【図１】本発明の一実施形態に係る復号装置を用いたシステムの構成例を示すブロック図。
【図２】図１のシステムに設けられる符号化器および復号器によってそれぞれ用いられる検査行列（転置）の例を示す図。
【図３】図１のシステムに設けられる復号器の構成例を示すブロック図。
【図４】図１のシステムに設けられる符号化器および復号器によってそれぞれ用いられる検査行列（標準系）の例を示す図。
【図５】通常の検査行列の例を示す図。
【図６】パリティビット列を生成するための演算を説明するための図。
【図７】通常の符号化器の構成を示す回路図。
【図８】シンドロームを生成するための演算を説明するための図。
【図９】通常の復号器の構成を示す回路図。
【図１０】シンドロームをエラーアドレスに変換する処理を説明するための図。
【図１１】図１のシステムで用いられる検査行列とエラーアドレスとの関係を説明するための図。
【図１２】シンドロームを生成するための演算を説明するための図。
【図１３】図１のシステムに設けられる符号化器の構成の例を示す回路図。
【図１４】図１３の符号化器の動作を説明するための図。
【図１５】図１３の符号化器によって実行される符号化処理の内容の具体例を説明するための図。
【図１６】図１のシステムに設けられる復号器の構成の例を示す回路図。
【図１７】図１６の復号器に設けられるエラーフラグ＃１出力回路の例を示す図。
【図１８】図１６の復号器に設けられるエラーフラグ＃２出力回路の例を示す図。
【図１９】図１６の復号器によって実行される復号処理の手順の例を示す図。
【図２０】図１６の復号器によって実行される復号処理の内容の具体例を説明するための図。
【図２１】図１のシステムで用いられる検査行列の他の例を示す図。
【図２２】図１のシステムが適用される記憶装置の構成の例を示す図。
【符号の説明】
【００９９】
１１…符号化器、１３…復号器、１４…エラー訂正回路、１３１…シンドローム算出部、１３２…“S0=1”、１３３…“1000”検出部、１３４…“0111”検出部、１３５…エラーアドレス出力部。
【図１】
0004619931.tif 000002
【図２】
0004619931.tif 000003
【図３】
0004619931.tif 000004
【図４】
0004619931.tif 000005
【図５】
0004619931.tif 000006
【図６】
0004619931.tif 000007
【図７】
0004619931.tif 000008
【図８】
0004619931.tif 000009
【図９】
0004619931.tif 000010
【図１０】
0004619931.tif 000011
【図１１】
0004619931.tif 000012
【図１２】
0004619931.tif 000013
【図１３】
0004619931.tif 000014
【図１４】
0004619931.tif 000015
【図１５】
0004619931.tif 000016
【図１６】
0004619931.tif 000017
【図１７】
0004619931.tif 000018
【図１８】
0004619931.tif 000019
【図１９】
0004619931.tif 000020
【図２０】
0004619931.tif 000021
【図２１】
0004619931.tif 000022
【図２２】
0004619931.tif 000023