(57)【要約】【課題】ＥＣＣを用いたデータの誤り検出において、検出性能を向上させる。【解決手段】データ処理装置１は、第１のＥＣＣ生成行列に従って演算することによりＥＣＣを生成するエンコーダ部４と、前記第１のＥＣＣ生成行列の列を入れ替えた第２のＥＣＣ生成行列に従って演算することによりＥＣＣを生成するエンコーダ部５とを有するエンコーダ装置２を備える。エンコーダ部４は、第１のデータに対する第１のＥＣＣを生成する。エンコーダ部５は、前記第１のデータのビットを入れ替えた第２のデータに対する第２のＥＣＣを生成する。【選択図】図１
2019109806.tif 000002
【特許請求の範囲】
【請求項１】
エンコーダ装置と、
デコーダ装置と
を備え、
前記エンコーダ装置は、
第１のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣ（Error Correction Code）を生成する第１のエンコーダ部と、
前記第１のＥＣＣ生成行列の列を入れ替えた第２のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣを生成する第２のエンコーダ部と
を有し、
前記第１のエンコーダ部には、第１のデータが入力され、前記第１のエンコーダ部は、前記第１のデータに対する第１のＥＣＣを生成し、
前記第２のエンコーダ部には、前記第１のデータのビットを入れ替えた第２のデータが入力され、前記第２のエンコーダ部は、前記第２のデータに対する第２のＥＣＣを生成し、
前記エンコーダ装置は、前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣとをメモリに格納し、
前記デコーダ装置は、前記メモリから読み出された前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣとに基づいて、前記第１のデータの誤りの発生状態について示す通知信号を生成する
データ処理装置。
【請求項２】
前記デコーダ装置は、
前記メモリから読み出された前記第１のデータ及び前記第１のＥＣＣからなる第１のビット列が入力され、前記第１のビット列に訂正可能な１ビットの誤りが存在するか否かを示す第１の判定信号と、前記第１のビット列に２ビット以上の誤りが存在するか否かを示す第２の判定信号とを生成する第１のデコーダ部と、
前記メモリから読み出された前記第１のデータを前記第２のデータと同じくビットを入れ替えた第３のデータと、前記メモリから読み出された前記第２のＥＣＣとからなる第２のビット列が入力され、前記第２のビット列に訂正可能な１ビットの誤りが存在するか否かを示す第３の判定信号と、前記第２のビット列に２ビット以上の誤りが存在するか否かを示す第４の判定信号とを生成する第２のデコーダ部と、
前記第１の判定信号と、前記第２の判定信号と、前記第３の判定信号と、前記第４の判定信号とに基づいて、前記通知信号を生成する通知部と、
を有する請求項１に記載のデータ処理装置。
【請求項３】
前記通知部は、前記第１の判定信号及び前記第３の判定信号のいずれか一方のみが、訂正可能な１ビットの誤りが存在することを示す場合、前記メモリから読み出された前記第１のデータ、前記第１のＥＣＣ、及び前記第２のＥＣＣからなるビット列が２ビット以上の誤りを含むことを示す前記通知信号を生成する
請求項２に記載のデータ処理装置。
【請求項４】
前記通知部は、前記第２の判定信号又は前記第４の判定信号の少なくとも一方が、２ビット以上の誤りが存在することを示す場合、前記メモリから読み出された前記第１のデータ、前記第１のＥＣＣ、及び前記第２のＥＣＣからなるビット列が２ビット以上の誤りを含むことを示す前記通知信号を生成する
請求項２に記載のデータ処理装置。
【請求項５】
前記デコーダ装置は、
前記メモリから読み出された前記第１のデータ及び前記第１のＥＣＣから第１のシンドロームコードを生成し、前記第１のシンドロームコードが前記第１のＥＣＣ生成行列及び単位行列からなる第１のＥＣＣ検査行列のいずれかの列のビットパターンと一致しているか否かを示す第１のフラグと、前記第１のシンドロームコードの各ビットが全て０であるか否かを示す第２のフラグを生成する第１のシンドローム部と、
前記メモリから読み出された前記第１のデータを前記第２のデータと同じくビットを入れ替えた第３のデータと前記メモリから読み出された前記第２のＥＣＣから、第２のシンドロームコードを生成し、前記第２のシンドロームコードが前記第２のＥＣＣ生成行列及び単位行列からなる第２のＥＣＣ検査行列のいずれかの列のビットパターンと一致しているか否かを示す第３のフラグと、前記第２のシンドロームコードの各ビットが全て０であるか否かを示す第４のフラグを生成する第２のシンドローム部と、
前記第１のフラグと前記第３のフラグとを比較するとともに、前記第２のフラグと前記第４のフラグとを比較するシンドロームチェック部と
を有し、
前記デコーダ装置は、前記シンドロームチェック部の比較結果に基づいて、前記通知信号を生成する
請求項１に記載のデータ処理装置。
【請求項６】
前記シンドロームチェック部は、前記第１のフラグが、前記第１のシンドロームコードが前記第１のＥＣＣ検査行列のｔ列目（ただし、ｔは正整数であり、前記第１のＥＣＣ検査行列に含まれる前記第１のＥＣＣ生成行列のいずれかの列に相当する列番号である）のビットパターンと一致していることを示し、かつ、前記第３のフラグも、前記第２のシンドロームコードが前記第２のＥＣＣ検査行列のｔ列目のビットパターンと一致していることを示す場合に限り、前記第１のシンドロームコードが前記第１のＥＣＣ検査行列のｔ列目のビットパターンと一致していることを示すフラグを第５のフラグとして出力し、
前記第１のフラグが、前記第１のシンドロームコードが前記第１のＥＣＣ検査行列のｓ列目（ただし、ｓは正整数であり、前記第１のＥＣＣ検査行列に含まれる前記単位行列のいずれかの列に相当する列番号である）のビットパターンと一致していることを示す場合、又は、前記第３のフラグが、前記第２のシンドロームコードが前記第２のＥＣＣ検査行列のｓ列目のビットパターンと一致していることを示す場合、前記第１のシンドロームコードが前記第１のＥＣＣ検査行列のｓ列目のビットパターンと一致していることを示すフラグを前記第５のフラグとして出力する
請求項５に記載のデータ処理装置。
【請求項７】
前記デコーダ装置は、前記第５のフラグに基づいて、前記メモリから読み出された前記第１のデータの１ビットの誤りを訂正する誤り訂正部をさらに有する
請求項６に記載のデータ処理装置。
【請求項８】
前記シンドロームチェック部は、前記第２のフラグが、前記第１のシンドロームコードの各ビットが全て０であることを示し、かつ、前記第４のフラグが、前記第２のシンドロームコードの各ビットが全て０であることを示す場合に限り、前記第１のシンドロームコードの各ビットが全て０であることを示す第６のフラグを出力し、
前記デコーダ装置は、前記第５のフラグの値及び前記第６のフラグの値に基づいて前記通知信号を生成する通知部をさらに有する
請求項６に記載のデータ処理装置。
【請求項９】
前記第２のＥＣＣ生成行列は、前記第１のＥＣＣ生成行列の各列をローテーションさせた行列であり、
前記第２のデータは、前記第１のデータの各ビットをローテーションさせたデータである
請求項１に記載のデータ処理装置。
【請求項１０】
前記第２のＥＣＣ生成行列は、前記第１のＥＣＣ生成行列において、所定の行の値が同じである複数の列を入れ替えた行列であり、
前記エンコーダ装置は、前記第１のデータと、前記第１のエンコーダ部により生成された前記第１のＥＣＣの全ビットと、前記第２のエンコーダ部により生成された前記第２のＥＣＣの一部のビットとを前記メモリに格納し、
前記一部のビットは、前記第２のＥＣＣ生成行列における前記所定の行以外の行を用いた演算により得られるビットであり、
前記デコーダ装置は、前記メモリから読み出された前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣの前記一部のビットとに基づいて、前記通知信号を生成する
請求項１に記載のデータ処理装置。
【請求項１１】
エンコーダ装置と、
デコーダ装置と
を備え、
前記エンコーダ装置は、
１ビット誤り訂正及び２ビット誤り検出が可能なｐビット（ただし、ｐは正整数）のＥＣＣ（Error Correction Code）を生成するための第１のＥＣＣ生成行列のｑ行（ただし、ｑはｐ未満の正整数）の部分行列に従って演算することによりｑビットのチェックビットを生成するチェックビット生成部と、
前記第１のＥＣＣ生成行列から前記ｑ行の部分行列を除いた部分行列であるｒ行（ただし、ｒ＝ｐ−ｑ）の第２のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なｒビットのＥＣＣを生成するＥＣＣ生成部と、
を有し、
前記ＥＣＣ生成部には、第１のデータが入力され、前記ＥＣＣ生成部は、前記第１のデータに対する前記ＥＣＣを生成し、
前記チェックビット生成部には、前記第１のデータが入力され、前記チェックビット生成部は、前記第１のデータに対する前記チェックビットを生成し、
前記エンコーダ装置は、前記第１のデータと、前記ＥＣＣと、前記チェックビットとをメモリに格納し、
前記デコーダ装置は、
前記メモリから読み出された前記第１のデータ及び前記ＥＣＣから第１のシンドロームコードを生成し、前記第１のシンドロームコードが前記第１のＥＣＣ生成行列及び単位行列からなるＥＣＣ検査行列におけるｒ行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第１のフラグと、前記第１のシンドロームコードの各ビットが全て０であるか否かを示す第２のフラグを生成する第１のシンドローム部と、
前記メモリから読み出された前記第１のデータ及び前記チェックビットから第２のシンドロームコードを生成し、前記第２のシンドロームコードが前記第１のＥＣＣ生成行列及び単位行列からなるＥＣＣ検査行列におけるｑ行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第３のフラグを生成する第２のシンドローム部と、
前記第１のシンドローム部により生成されたフラグと前記第２のシンドローム部により生成されたフラグとを比較し、比較結果に基づいて、前記第１のデータの誤りの発生状態について示す通知信号を生成する通知部と
を有する
データ処理装置。
【請求項１２】
第１のＥＣＣ生成行列に従って演算することにより、第１のデータに対し、１ビット誤り訂正及び２ビット誤り検出が可能な第１のＥＣＣ（Error Correction Code）を生成し、
前記第１のＥＣＣ生成行列の列を入れ替えた第２のＥＣＣ生成行列に従って演算することにより、前記第１のデータのビットを入れ替えた第２のデータに対し、１ビット誤り訂正及び２ビット誤り検出が可能な第２のＥＣＣを生成し、
前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣとをメモリに格納し、
前記メモリから読み出された前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣとに基づいて、前記第１のデータの誤りの発生状態について示す通知信号を生成する
データ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置及びデータ処理方法に関し、特に、データの誤りを検出するデータ処理装置及びデータ処理方法に関する。
【背景技術】
【０００２】
１ビット誤り訂正・２ビット誤り検出（いわゆるSEC-DED（Single Error Correction - Double Error Detection））機能を持つＥＣＣ（誤り訂正符号：Error Correction Code）の特性として、４ビット以上の偶数ビット誤りの全てを検出できる訳ではないこと、及び、３ビット以上の奇数ビット誤りを１ビット誤りと誤認識して正常なビットを誤訂正してしまうケースがあることが知られている（非特許文献１）。
【０００３】
これに対し、特許文献１は、１ビット誤り訂正・２ビット誤り検出が可能なＥＣＣを用いた誤り検出回路において、比較的高い割合で多ビット（３ビット以上）の誤り検出を実現する技術について開示している。この誤り検出回路では、ＥＣＣと、データの各ビットに現れる「１」のカウント数とを用いることにより、ＥＣＣを用いたチェックだけではデータ誤りの検出が上手く行えないケースにおいても、適切に誤りを検出できるようにしている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−４２８８号公報
【非特許文献】
【０００５】
【非特許文献１】M. Y. Hsiao, “A Class of Optimal Minimum Odd-weight-column SEC-DED Codes", IBM Journal of Research and Development, Volume 14, Issue 4, published by IBM, July 1970.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の技術では、データに含まれる「１」の個数をカウントするカウンタ回路を設ける必要があり、カウント処理に複数クロックの期間を要する。このため、メモリに対する読み書きに時間がかかる、あるいは、クロック周波数を上げる必要が生じる。したがって、ＥＣＣを用いたデータの誤り検出において、検出性能を向上させる新規な手法が求められている。
【０００７】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
一実施の形態によれば、データ処理装置は、第１のＥＣＣ生成行列に従って演算することによりＥＣＣを生成する第１のエンコーダ部と、前記第１のＥＣＣ生成行列の列を入れ替えた第２のＥＣＣ生成行列に従って演算することによりＥＣＣを生成する第２のエンコーダ部とを有するエンコーダ装置を備える。また、前記第１のエンコーダ部は、前記第１のデータに対する第１のＥＣＣを生成する。前記第２のエンコーダ部は、前記第１のデータのビットを入れ替えた第２のデータに対する第２のＥＣＣを生成する。
【発明の効果】
【０００９】
前記一実施の形態によれば、ＥＣＣを用いたデータの誤り検出において、検出性能を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態の概要にかかるデータ処理装置１の構成の一例を示すブロック図である。
【図２】比較例にかかるエンコーダ装置９０を示すブロック図である。
【図３】ＥＣＣエンコーダ回路２１に用いられるＥＣＣ生成行列を示す図である。
【図４】図３に示すＥＣＣ生成行列によって行われる演算を示した式である。
【図５】ＥＣＣエンコーダ回路２１の具体的な回路構成の一例について示すブロック図である。
【図６】比較例にかかるデコーダ装置９１を示すブロック図である。
【図７】ＥＣＣデコーダ回路３１に用いられるＥＣＣ検査行列を示す図である。
【図８】図７に示すＥＣＣ検査行列によって行われる演算を示した式である。
【図９】ＥＣＣデコーダ回路３１の具体的な回路構成の一例について示すブロック図である。
【図１０】比較例にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。
【図１１】比較例にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。
【図１２】実施の形態にかかるデータ処理装置の一例を示すブロック図である。
【図１３】エンコーダ装置２０を示すブロック図である。
【図１４】ＥＣＣエンコーダ回路２２に用いられるＥＣＣ生成行列を示す図である。
【図１５】ＥＣＣエンコーダ回路２２の具体的な回路構成の一例について示すブロック図である。
【図１６】デコーダ装置３０を示すブロック図である。
【図１７】デコーダ装置３０のＥＣＣデコーダ回路３１に用いられるＥＣＣ検査行列を示す図である。
【図１８】デコーダ装置３０のＥＣＣデコーダ回路３２に用いられるＥＣＣ検査行列を示す図である。
【図１９】ＥＣＣデコーダ回路３２の具体的な回路構成の一例について示すブロック図である。
【図２０Ａ】６４ビットの入力データから８ビットのＥＣＣを生成するＥＣＣ生成行列の一例を示す図である。
【図２０Ｂ】６４ビットの入力データから８ビットのＥＣＣを生成するＥＣＣ生成行列の一例を示す図である。
【図２１】デコーダ装置３０Ａの構成を示すブロック図である。
【図２２】実施の形態２にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。
【図２３】実施の形態２にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。
【図２４】エンコーダ装置２０Ａを示すブロック図である。
【図２５】ＥＣＣエンコーダ回路２３で用いられるＥＣＣ生成行列の一例を示す図である。
【図２６】デコーダ装置３０Ｂを示すブロック図である。
【図２７】デコーダ装置３０ＢのＥＣＣデコーダ回路３１に用いられるＥＣＣ検査行列を示す図である。
【図２８】デコーダ装置３０ＢのＥＣＣデコーダ回路３４に用いられるＥＣＣ検査行列を示す図である。
【図２９】デコーダ装置３０Ｃを示すブロック図である。
【図３０】実施の形態３の変形例にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。
【図３１】実施の形態３の変形例にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。
【図３２】エンコーダ装置２０Ｂを示すブロック図である。
【図３３】ＥＣＣ生成全体行列、ＥＣＣ生成部分行列、及びチェックビット生成行列の一例を示すものである。
【図３４】チェックビット生成回路２４の具体的な回路構成の一例について示すブロック図である。
【図３５】デコーダ装置３０Ｄの構成を示すブロック図である。
【図３６】ＥＣＣ検査全体行列、ＥＣＣ検査部分行列、及びチェックビット検査行列の一例を示すものである。
【図３７】デコーダ装置３０Ｄのシンドローム生成回路３０３及びシンドローム復号回路３１２の具体的な回路構成の一例について示すブロック図である。
【図３８】実施の形態４にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。
【図３９】実施の形態４にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。
【発明を実施するための形態】
【００１１】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１２】
＜実施の形態の概要＞
まず、実施の形態の詳細な説明に先立って、実施の形態の概要について説明する。図１は、実施の形態の概要にかかるデータ処理装置１の構成の一例を示すブロック図である。データ処理装置１は、エンコーダ装置２とデコーダ装置３とを備えている。
【００１３】
エンコーダ装置２は、エンコーダ部４と、エンコーダ部５とを有し、第１のデータが入力される。そして、エンコーダ部４には、第１のデータが入力され、エンコーダ部５には、第２のデータが入力される。ここで、第１のデータは、メモリ６に格納する対象のデータである。第２のデータは、第１のデータのビットを入れ替えたデータである。例えば、第２のデータは、第１のデータの各ビットを所定の方向に所定段数だけローテーションしたデータであってもよいし、第１のデータの所定の複数のビットを相互に入れ替えたデータであってもよい。
【００１４】
エンコーダ部４は、第１のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣ（すなわち、ＳＥＣ−ＤＥＤ符号）を生成する。また、エンコーダ部５は、第１のＥＣＣ生成行列の列を入れ替えた第２のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣ（すなわち、ＳＥＣ−ＤＥＤ符号）を生成する。なお、第２のデータにおける上述の入れ替えと、第２のＥＣＣ生成行列における上述の入れ替えとは、対応している。すなわち、第１のデータから第２のデータを導出するためのビットの入れ替えにおける入れ替え元のビット位置は、第１のＥＣＣ生成行列から第２のＥＣＣ生成行列を導出するための列の入れ替えにおける入れ替え元の列番号と対応している。また、第２のデータを導出するためのビットの入れ替えにおける入れ替え先のビット位置は、第２のＥＣＣ生成行列を導出するための列の入れ替えにおける入れ替え先の列番号と対応している。
【００１５】
エンコーダ部４は、第１のデータに対する第１のＥＣＣを生成する。また、エンコーダ部５は、第２のデータに対する第２のＥＣＣを生成する。そして、エンコーダ装置２は、記憶対象のデータである第１のデータと、第１のデータから生成された第１のＥＣＣと、第２のデータから生成された第２のＥＣＣとをメモリ６に格納する。
【００１６】
また、デコーダ装置３は、メモリ６から読み出された第１のデータと、第１のＥＣＣと、第２のＥＣＣとに基づいて、第１のデータの誤りの発生状態について示す通知信号を生成する。
【００１７】
データ処理装置１では、上述のような異なる２つのＥＣＣが生成される。見過ごされてしまう誤りの発生パターンは、ＥＣＣ生成行列に依存する。より詳細には、第１のＥＣＣを用いた検出処理では見過ごされてしまう誤りの発生パターンであっても、第１のＥＣＣとは異なる第２のＥＣＣを用いた検出処理では誤りが発見されうる。実施の形態では、この点に着目し、異なるＥＣＣ生成行列から生成された第１のＥＣＣと第２のＥＣＣを用いる。これにより、データ処理装置１によれば、第１のＥＣＣのみによるデータの誤り検出に比べ、検出性能を向上させることができる。
【００１８】
＜比較例＞
次に、実施の形態の詳細について理解を容易にするために比較例について説明する。図２は、比較例にかかるエンコーダ装置９０を示すブロック図である。エンコーダ装置９０は、一例として、８ビットの入力データ（Ｄ０〜Ｄ７）から５ビットのＥＣＣ（Ｅ０〜Ｅ４）を生成する。そして、エンコーダ装置９０は、ライトデータとして入力データ（Ｄ０〜Ｄ７）を出力するとともに、生成したＥＣＣを出力する。さらに、エンコーダ装置９０は、ＥＣＣエンコーダ回路２１を有しており、ＥＣＣエンコーダ回路２１によりＥＣＣを生成する。
【００１９】
ＥＣＣエンコーダ回路２１は、例えば、図３に示すＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣを生成する回路である。図３に示すＥＣＣ生成行列は、ライトデータとしてメモリに書き込まれる８ビットの入力データ（Ｄ０〜Ｄ７）から、５ビットのＥＣＣ（Ｅ０〜Ｅ４）を生成するＥＣＣ生成行列である。図３に示すＥＣＣ生成行列は、各列のビットパターンが相互に異なっており、各列が奇数個の１を含んでいる。このため、図３に示すＥＣＣ生成行列は、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣを生成するための行列である。なお、ＥＣＣ生成行列の各列は入力データの各ビットに対応し、また各行は生成するＥＣＣの各ビットに対応する。
【００２０】
具体的には、ＥＣＣエンコーダ回路２１は、図４に示される演算を行う。図４は、図３に示すＥＣＣ生成行列によって行われる演算を示した式である。すなわち、ＥＣＣエンコーダ回路２１は、入力データにＥＣＣ生成行列を乗ずることによりＥＣＣを生成する。言い換えると、ＥＣＣエンコーダ回路２１は、ＥＣＣ生成行列により特定されるビット位置の組み合わせについて、入力データのビット値の排他的論理和（ＸＯＲ：eXclusive OR）演算を行うことでＥＣＣを生成する。例えば、ＥＣＣ生成行列の１行目により特定されるビット位置の組み合わせは、（Ｄ０，Ｄ１，Ｄ２，Ｄ３，Ｄ４）であり、ＥＣＣエンコーダ回路２１は、これらの排他的論理和を行うことにより、Ｅ０を算出する。
【００２１】
図５は、ＥＣＣエンコーダ回路２１の具体的な回路構成の一例について示すブロック図である。ＥＣＣエンコーダ回路２１は、上述の通り、図３に示すＥＣＣ生成行列に従った排他的論理和演算を行うことにより、８ビットの入力データ（Ｄ０〜Ｄ７）から、５ビットのＥＣＣ（Ｅ０〜Ｅ４）を生成する回路である。ＥＣＣエンコーダ回路２１は、ＥＣＣ生成回路２００を含み、ＥＣＣ生成回路２００によりＥＣＣを生成する。図５に示すように、ＥＣＣ生成回路２００は、５個の排他的論理和回路２００ａ〜２００ｅを用いて構成される。排他的論理和回路２００ａ〜２００ｄは５入力ＸＯＲ回路であり、排他的論理和回路２００ｅは４入力ＸＯＲ回路である。排他的論理和回路２００ａ〜２００ｅは、それぞれ、図４に示した演算式に対応しており、５ビットのＥＣＣ（Ｅ０〜Ｅ４）のうちの１ビットの値を決定する。
【００２２】
Ｅ０は、排他的論理和回路２００ａの出力として得られる。具体的には、排他的論理和回路２００ａはＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４の排他的論理和を演算して、演算結果をＥ０として出力する。同様に、Ｅ１は、排他的論理和回路２００ｂの出力として得られる。Ｅ２は、排他的論理和回路２００ｃの出力として得られる。Ｅ３は、排他的論理和回路２００ｄの出力として得られる。Ｅ４は、排他的論理和回路２００ｅの出力として得られる。ＥＣＣエンコーダ回路２１から出力されたデータ（Ｄ０〜Ｄ７）とＥＣＣ（Ｅ０〜Ｅ４）は、メモリに記憶される。
【００２３】
図６は、比較例にかかるデコーダ装置９１を示すブロック図である。メモリから読み出されたデータ（Ｄ０〜Ｄ７）は、同じくメモリから読み出されたＥＣＣ（Ｅ０〜Ｅ４）とともにデコーダ装置９１のＥＣＣデコーダ回路３１に入力される。ＥＣＣデコーダ回路３１は、入力されたリードデータ（Ｄ０〜Ｄ７）及びＥＣＣ（Ｅ０〜Ｅ４）に基づいて、リードデータ（Ｄ０〜Ｄ７）及びＥＣＣ（Ｅ０〜Ｅ４）の誤りの有無を判定し、エラー通知信号を出力する。また、デコーダ装置９１のＥＣＣデコーダ回路３１は、リードデータに１ビットの誤りが含まれていることを検出した場合、１ビットの誤りを訂正したデータを出力データ（Ｄ’０〜Ｄ’７）として出力する。なお、ＥＣＣデコーダ回路３１は、それ以外の場合、入力されたリードデータを出力データ（Ｄ’０〜Ｄ’７）として出力する。
【００２４】
ＥＣＣデコーダ回路３１は、誤りの有無に応じたエラー通知信号を出力する。具体的には、ＥＣＣデコーダ回路３１は、リードデータ及びＥＣＣからなるビット列に１ビットの誤りが含まれていたか否かを示す「１ビットエラー通知信号」と、このビット列に２ビット以上の誤りが含まれていたか否かを示す「２ビットエラー通知信号」とを出力する。なお、１ビットエラー通知信号が１であり、２ビットエラー通知信号が０である場合、ＥＣＣデコーダ回路３１は、ビット列に１ビットの誤りがあり、かつ、リードデータについての誤りを訂正したデータを出力データ（Ｄ’０〜Ｄ’７）として出力することを通知する。また、１ビットエラー通知信号が０であり、２ビットエラー通知信号が１である場合、ＥＣＣデコーダ回路３１は、誤りを含む可能性があるデータを出力データ（Ｄ’０〜Ｄ’７）として出力することを通知する。さらに、１ビットエラー通知信号が０であり、２ビットエラー通知信号も０である場合、ＥＣＣデコーダ回路３１は、誤りがないリードデータを、出力データ（Ｄ’０〜Ｄ’７）として出力することを通知する。
【００２５】
ＥＣＣデコーダ回路３１は、例えば、図７に示すＥＣＣ検査行列に従って演算することにより、シンドロームコードを生成し、生成したシンドロームコードに基づいて、エラー通知信号の生成及び誤り訂正を行う回路である。図７に示すＥＣＣ検査行列は、メモリから読み出した８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）から、５ビットのシンドロームコード（Ｓ０〜Ｓ４）を生成するＥＣＣ検査行列である。ＥＣＣ検査行列は、ＥＣＣ生成行列に単位行列を結合した行列である。なお、ＥＣＣ検査行列の各列は入力データ（リードデータ及びＥＣＣ）の各ビットに対応し、また各行は生成するシンドロームコードの各ビットに対応する。
【００２６】
具体的には、ＥＣＣデコーダ回路３１は、図８に示される演算を行う。図８は、図７に示すＥＣＣ検査行列によって行われる演算を示した式である。すなわち、ＥＣＣデコーダ回路３１は、入力データ（リードデータ及びＥＣＣ）にＥＣＣ検査行列を乗ずることによりシンドロームコードを生成する。言い換えると、ＥＣＣデコーダ回路３１は、ＥＣＣ検査行列により特定されるビット位置の組み合わせについて、入力データのビット値の排他的論理和（ＸＯＲ）演算を行うことでシンドロームコードを生成する。例えば、ＥＣＣ検査行列の１行目により特定されるビット位置の組み合わせは、（Ｄ０，Ｄ１，Ｄ２，Ｄ３，Ｄ４，Ｅ０）であり、ＥＣＣデコーダ回路３１は、これらの排他的論理和を行うことにより、Ｓ０を算出する。
【００２７】
図９は、ＥＣＣデコーダ回路３１の具体的な回路構成の一例について示すブロック図である。ＥＣＣデコーダ回路３１は、シンドローム生成回路３００と、シンドローム復号回路３１０と、誤り訂正回路３２０とを有する。
【００２８】
シンドローム生成回路３００は、８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）から５ビットのシンドロームコード（Ｓ０〜Ｓ４）を生成して出力する回路である。図９に示すように、シンドローム生成回路３００は、５個の排他的論理和回路３００ａ〜３００ｅを用いて構成される。排他的論理和回路３００ａ〜３００ｄは６入力ＸＯＲ回路であり、排他的論理和回路３００ｅは５入力ＸＯＲ回路である。排他的論理和回路３００ａ〜３００ｅは、それぞれ、図８に示した演算式に対応しており、５ビットのシンドロームコード（Ｓ０〜Ｓ４）のうちの１ビットの値を決定する。
【００２９】
Ｓ０は、排他的論理和回路３００ａの出力として得られる。具体的には、排他的論理和回路３００ａはＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４、Ｅ０の排他的論理和を演算して、演算結果をＳ０として出力する。同様に、Ｓ１は、排他的論理和回路３００ｂの出力として得られる。Ｓ２は、排他的論理和回路３００ｃの出力として得られる。Ｓ３は、排他的論理和回路３００ｄの出力として得られる。Ｓ４は、排他的論理和回路３００ｅの出力として得られる。シンドローム生成回路３００から出力されたシンドロームコード（Ｓ０〜Ｓ４）は、シンドローム復号回路３１０に入力される。
【００３０】
シンドローム復号回路３１０は、５ビットのシンドロームコード（Ｓ０〜Ｓ４）を復号して１３ビットの「誤りビット位置フラグ」（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と１ビットの「誤り無しフラグ」（Ｃｘｘ）を生成して出力する回路である。図９に示すように、シンドローム復号回路３１０は、１３個のＩＮＶ（インバータ）付き論理積回路３１０ａ〜３１０ｍと、１個の否定論理和回路３１０ｎとを用いて構成される。
【００３１】
ＩＮＶ付き論理積回路３１０ａ〜３１０ｍは、５入力ＩＮＶ付きＡＮＤ回路である。ＩＮＶ付き論理積回路３１０ａ〜３１０ｍは、それぞれ、図７に示したＥＣＣ検査行列の各列（具体的には、図７に示すＤ０〜Ｄ７及びＥ０〜Ｅ４の１３列）に現れている５ビットのビットパターン（図７に示すＳ０〜Ｓ４に対応）と、５ビットのシンドロームコード（Ｓ０〜Ｓ４）のビットパターンとが一致する場合に１を出力する回路である。誤りビット位置フラグ（Ｃ０〜Ｃ７）を出力するためのＩＮＶ付き論理積回路３１０ａ〜３１０ｈについてのシンドローム復号回路３１０のこのような動作は、図３に示したＥＣＣ生成行列の各列（具体的には、図３に示すＤ０〜Ｄ７の８列）に現れている５ビットのビットパターン（図３に示すＥ０〜Ｅ４に対応）と、５ビットのシンドロームコード（Ｓ０〜Ｓ４）のビットパターンとの一致をチェックしていることに等しい。シンドロームコードのビットパターンが、ＥＣＣ検査行列のいずれかの列（具体的には、図７に示すＤ０〜Ｄ７及びＥ０〜Ｅ４の１３列）のビットパターンと一致する場合は、その列に対応したビット位置（Ｄ０〜Ｄ７，Ｅ０〜Ｅ４のいずれかのビット）に１ビット誤りが発生していると判定される。ＩＮＶ付き論理積回路３１０ａ〜３１０ｈのそれぞれの出力は、誤りビット位置フラグ（Ｃ０〜Ｃ７）として出力される。ＩＮＶ付き論理積回路３１０ｉ〜３１０ｍのそれぞれの出力は、誤りビット位置フラグ（ＣＥ０〜ＣＥ４）として出力される。誤りビット位置フラグ（Ｃ０〜Ｃ７）は、リードデータ（Ｄ０〜Ｄ７）に発生した１ビットの誤りの位置を示すフラグであり、誤りビット位置フラグ（ＣＥ０〜ＣＥ４）は、ＥＣＣ（Ｅ０〜Ｅ４）に発生した１ビットの誤りの位置を示すフラグである。
なお、誤りビット位置フラグの出力パターンとしては、以下の２種類がある。
第１の出力パターンは、Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４が全て０である出力パターンである。これは、誤りが検出されない場合、及び、２ビット以上の誤りが検出される場合の出力パターンである。
第２の出力パターンは、Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４のいずれか１つが１である出力パターンである。これは、１ビットの誤りが検出される場合の出力パターンである。
【００３２】
図７に示すＥＣＣ検査行列の第１列を見ると、そのビットパターンは（１１１００）である。シンドローム復号回路３１０では、これに対応するように、誤りビット位置フラグＣ０を生成するＩＮＶ付き論理積回路３１０ａが設けられている。具体的には、ＩＮＶ付き論理積回路３１０ａの入力ポートのうち、３個のＩＮＶ無し入力ポートにはシンドロームコードのＳ０，Ｓ１，Ｓ２が接続され、２個のＩＮＶ付き入力ポートにはシンドロームコードのＳ３，Ｓ４が接続されている。ＩＮＶ付き論理積回路３１０ｂ〜３１０ｍについても同様に接続されている。
【００３３】
否定論理和回路３１０ｎは、５入力ＮＯＲ回路である。否定論理和回路３１０ｎは、５ビットのシンドロームコード（Ｓ０〜Ｓ４）の全ビットの値が０である場合に、１を出力する回路である。シンドロームコード（Ｓ０〜Ｓ４）の全ビットの値が０である場合、ビット誤りが発生していないと判定される。否定論理和回路３１０ｎの出力は、誤り無しフラグ（Ｃｘｘ）として出力される。なお、誤り無しフラグの出力パターンとしては、以下の２種類がある。
第１の出力パターンは、Ｃｘｘが１である出力パターンである。これは、上述の通り、誤りが検出されない場合の出力パターンである。
第２の出力パターンは、Ｃｘｘが０である出力パターンである。これは、１ビット以上の誤りが検出される場合の出力パターンである。
【００３４】
このように、ＳＥＣ−ＤＥＤ符号では、シンドロームコードのビットパターンがＥＣＣ生成行列のいずれかのビットパターンと一致していることを検出することで、１ビットの誤りの検出が可能となる。また、シンドロームコードのビットパターンがＥＣＣ生成行列のいずれのビットパターンとも一致せず、かつ、全て０でないことを検出することで、２ビット以上の誤りの検出が可能となる。
【００３５】
誤り訂正回路３２０は、リードデータの１ビット誤りが検出された場合に、その誤りを訂正する回路を構成する訂正処理部３２０Ａと、エラー通知信号を生成する回路を構成する通知処理部３２０Ｂとを有する。
【００３６】
訂正処理部３２０Ａは、８ビットのリードデータ（Ｄ０〜Ｄ７）及び８ビットの誤りビット位置フラグ（Ｃ０〜Ｃ７）に基づいて誤り訂正を行い、８ビットの出力データ（Ｄ’０〜Ｄ’７）を出力する。なお、誤り訂正を行った場合には、出力データ（Ｄ’０〜Ｄ’７）は訂正済みのデータであり、誤り訂正が行われなかった場合には、出力データ（Ｄ’０〜Ｄ’７）はリードデータ（Ｄ０〜Ｄ７）と同じである。図９に示すように、訂正処理部３２０Ａは、８個の排他的論理和回路３２０ａ〜３２０ｈを用いて構成される。排他的論理和回路３２０ａ〜３２０ｈは２入力ＸＯＲ回路である。排他的論理和回路３２０ａ〜３２０ｈのそれぞれは、誤りビット位置フラグと、誤りビット位置フラグと対応するリードデータのビットとの排他的論理和演算を行うことにより、１ビットの誤りを訂正する。すなわち、訂正処理部３２０Ａは、８ビットの誤りビット位置フラグ（Ｃ０〜Ｃ７）のいずれか１つのフラグが１である場合に、リードデータ（Ｄ０〜Ｄ７）の対応するビット位置（Ｄ０〜Ｄ７のいずれかのビット）の値を反転させることで１ビット誤り訂正を行う回路である。
【００３７】
通知処理部３２０Ｂは、１３ビットの誤りビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）及び１ビットの誤り無しフラグ（Ｃｘｘ）に基づいて、エラー通知信号として、「１ビットエラー通知信号」及び「２ビットエラー通知信号」を出力する。図９に示すように、通知処理部３２０Ｂは、１個の論理和回路３２０ｉと、１個の否定論理和回路３２０ｊとを用いて構成される。論理和回路３２０ｉは１３入力ＯＲ回路であり、１３ビットのビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）が入力される。また、否定論理和回路３２０ｊは２入力ＮＯＲ回路であり、論理和回路３２０ｉの出力と、誤り無しフラグ（Ｃｘｘ）が入力される。
【００３８】
論理和回路３２０ｉは、入力された１３ビットのビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）のいずれか１つのフラグが１である場合に、１ビットエラー通知信号として１を出力する。また、否定論理和回路３２０ｊは、論理和回路３２０ｉの出力及び誤り無しフラグ（Ｃｘｘ）がいずれも０である場合に、２ビットエラー通知信号として１を出力する。通知処理部３２０Ｂによるエラー通知信号の出力パターンとしては、以下の３種類がある。
第１の出力パターンは、１ビットエラー通知信号及び２ビットエラー通知信号がいずれも０である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ（Ｄ０〜Ｄ７）、つまり出力データ（Ｄ’０〜Ｄ’７）が誤りを含まないことを示す。
第２の出力パターンは、１ビットエラー通知信号が１であり、２ビットエラー通知信号が０である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ及びＥＣＣからなるビット列が１ビットの誤りを含むこと及び出力データ（Ｄ’０〜Ｄ’７）は誤りを含まないデータであることを示す。
第３の出力パターンは、１ビットエラー通知信号が０であり、２ビットエラー通知信号が１である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ及びＥＣＣからなるビット列が２ビット以上の誤りを含むこと及び出力データ（Ｄ’０〜Ｄ’７）はこの誤りを含んでいる可能性があるデータであることを示す。
【００３９】
図１０は、比較例にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。具体的には、図１０は、リードデータ（Ｄ０〜Ｄ７）とＥＣＣ（Ｅ０〜Ｅ４）の合計１３ビットのデータにビット誤りが発生している場合に、そのビット誤りを検出できず見逃す（ビット誤り無しと誤判定する）ケースの個数をシミュレーションにより検証した結果を示す表である。ここで、ビット誤りとは、いずれかのビットの値が反転する（ビットの値が０から１になる、または１から０になる）誤りのことをいう。この表において、ｎは全ビットの個数（すなわち、ｎ＝１３）、ｋは誤りが発生したビットの個数（ｋ＝０，１，・・・，１３）、Ｃ（ｎ，ｋ）はｎ個のうちｋ個のビットに誤りが発生する組合せの総数であり、Ｗ（ｋ）がｋビット誤りのうち検出できず見逃すケースの個数、Ｐｋがｋビット誤りに対する検出見逃し確率である。
【００４０】
ＥＣＣを用いた誤り検出では、原理的に奇数ビット誤りは１００％検出可能である。また、ビット誤り無し（ｋ＝０）の場合と２ビット誤り（ｋ＝２）の場合も、原理的にそれらのビット誤りを１００％検出可能であるため、この表の検出見逃し個数のＷ（０）とＷ（２）は０個になっている。一方、４ビット誤り（ｋ＝４）の検出見逃し個数Ｗ（４）が５５個である等、４ビット以上の偶数ビット誤りの場合にはある程度の確率（割合）で誤りを検出できず見逃すことが、この表から分かる。
【００４１】
図１１は、比較例にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケース（多ビット誤りが発生しているのにも関わらず１ビット誤りと誤検出し、どこかの正常なビットを誤訂正してしまうケース）の個数をまとめた表である。具体的には、図１１は、リードデータ（Ｄ０〜Ｄ７）とＥＣＣ（Ｅ０〜Ｅ４）の合計１３ビットのデータにビット誤りが発生した場合に誤訂正するケースの個数を、図１０に示す結果から求め、それらをまとめた表である。図１１の表において、Ｘ（ｋ）はｋビット誤りが発生している際に誤訂正が発生するケースの個数、Ｑｋはｋビット誤りに対する誤訂正確率である。
【００４２】
ＥＣＣを用いた誤り検出では原理的に奇数ビット誤りを１００％検出可能、すなわち検出できず見逃すことはないが、このような誤訂正は起こり得る。図１０に示したように、偶数ビット誤りの見逃しがあることから、例えば、次のような誤訂正が発生する。検出見逃し個数Ｗ（４）が５５個である４ビット誤り（ｋ＝４）を見逃すケースを例に考える。ここで、１３ビットのデータのｂ１番目のビットとｂ２番目のビットとｂ３番目のビットとｂ４番目のビットの合計４ビットに同時に誤りが発生した場合に、誤りが発生していないと判断されるものとする。なお、ｂ１、ｂ２、ｂ３、ｂ４の値は、ＥＣＣ生成行列の各列をどのように設定するかによって必然的に定まる値である。
【００４３】
この場合、あるデータにおいて、ｂ１、ｂ２、ｂ３、ｂ４のうち、いずれか３つのビット位置のビットのみに誤りがあるとき、残りの１つのビット位置のビットのみに誤りが発生していると誤判定されてしまう。例えば、ｂ１番目のビット、ｂ２番目のビット、及びｂ３番目のビットに誤りがあり、ｂ４番目のビットを含む残りの１０ビットに誤りがない場合、ｂ４番目のビットのみに誤りが発生していると誤判定されてしまう。すなわち、１ビット誤りが発生していると誤判定され、誤りがあると判定された１ビット（上記例ではｂ４番目のビット）について訂正が行われてしまう。つまり、正常なビットに対する誤訂正が生じてしまう。このとき、残りの３ビットに誤りが発生していることは見逃していることになる。これにより、３ビット誤り（ｋ＝３）に対する誤訂正個数Ｘ（３）はＷ（４）の４倍の個数、すなわち２２０個になる。
【００４４】
また、検出を見逃す４ビット誤り（ｋ＝４）に対して、更に１ビットの誤りが発生しているケースを考える。つまり、１３ビットのデータのｂ１番目のビットとｂ２番目のビットとｂ３番目のビットとｂ４番目のビットとｂ５番目のビットの合計５ビットに同時に誤りが発生しているケースを考える。このケースでは、ｂ５番目のビットだけに誤りが発生している、すなわち１ビット誤りが発生していると誤判定される。このため、ｂ５番目のビットは正しく訂正するものの、４ビット（ｂ１番目のビットとｂ２番目のビットとｂ３番目のビットとｂ４番目のビット）に誤りが発生していることは見逃される。これも誤訂正の一種と考えられる。したがって、図１１の表では、W（４）の９（＝１３−４）倍の個数、すなわち４９５個を、５ビット誤り（ｋ＝５）の誤訂正個数Ｘ（５）において加算している。これ以外にＸ（５）に寄与する誤訂正個数としては、上述した考え方と同様、Ｗ（６）の６倍の誤訂正、すなわち５７６個の誤訂正がある。したがって、誤訂正個数Ｘ（５）は、１０７１（＝４９５＋５７６）個になる。Ｘ（５）以外の誤訂正個数についても、同様にして得られる。３ビット以上の奇数ビット誤りの場合にはかなり高い確率（割合）で誤訂正が発生することが、図１１の表から分かる。
【００４５】
＜実施の形態１＞
次に、実施の形態１について説明する。図１２は、実施の形態にかかるデータ処理装置の一例を示すブロック図である。図１２において、入出力インタフェース１０は、図１のデータ処理装置１に対応する。入出力インタフェース１０は、メモリ６に対する入出力のためのインタフェースである。例えば、入出力インタフェース１０は、ＳＯＣ（System-on-a-chip）に設けられ、ＳＯＣのバスシステムと、ＤＤＲ（Double Data Rate）メモリなどの外付けメモリであるメモリ６との間に設けられる。なお、入出力インタフェース１０による誤り検出・訂正機能は外付けのメモリ６に限らず、ＳＯＣなどに内蔵されたメモリ６に対する機能として利用されてもよいことは言うまでもない。
【００４６】
図１２に示すように、入出力インタフェース１０は、エンコーダ装置２０とデコーダ装置３０を有する。エンコーダ装置２０は、図１のエンコーダ装置２に対応しており、メモリ６に書き込む入力データに対し、後述する処理を行い、処理結果をメモリ６に記憶する。また、デコーダ装置３０は、図１のデコーダ装置３に対応しており、メモリ６から読み出したデータに対し、後述する処理を行い、出力データ及びエラー通知信号を出力する。
【００４７】
図１３は、エンコーダ装置２０を示すブロック図である。図１３に示すように、エンコーダ装置２０は、ＥＣＣエンコーダ回路２１とＥＣＣエンコーダ回路２２とを有する。ＥＣＣエンコーダ回路２１は、第１のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣを生成する回路である。また、ＥＣＣエンコーダ回路２２は、上記第１のＥＣＣ生成行列の列を入れ替えた第２のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣをチェックビットとして生成する回路である。なお、ＥＣＣエンコーダ回路２１とＥＣＣエンコーダ回路２２は、同じ回路構成であるが、入力されるデータのビット順序が異なっているため、異なるＥＣＣを生成する。
【００４８】
エンコーダ装置２０のＥＣＣエンコーダ回路２１は、比較例におけるエンコーダ装置９０が有するＥＣＣエンコーダ回路２１と同じである。このため、ＥＣＣエンコーダ回路２１は、第１のＥＣＣ生成行列として、例えば図３に示すＥＣＣ生成行列を用いた演算を行い、８ビットの入力データ（Ｄ０〜Ｄ７）から５ビットのＥＣＣ（Ｅ０〜Ｅ４）を生成する。また、エンコーダ装置２０のＥＣＣエンコーダ回路２１の具体的な回路構成の一例は、図５に示した通りである。
【００４９】
ＥＣＣエンコーダ回路２２は、８ビットの入力データのビット位置をローテーションしたデータ（Ｄ７，Ｄ０〜Ｄ６）から５ビットのＥＣＣ（Ｆ０〜Ｆ４）を生成する。つまり、ＥＣＣエンコーダ回路２２に入力されるデータは、ＥＣＣエンコーダ回路２１に入力されるデータの各ビットをローテーションさせたデータである。なお、ＥＣＣエンコーダ回路２２により生成されるＥＣＣは、ＥＣＣエンコーダ回路２１により生成されるＥＣＣによる誤り検出・訂正を補うために用いられるため、ＥＣＣエンコーダ回路２１により生成されるＥＣＣと区別して「チェックビット」と称す。ＥＣＣエンコーダ回路２２は、用いるＥＣＣ生成行列が異なることを除き、ＥＣＣエンコーダ回路２１と同様の回路構成となっている。つまり、ＥＣＣエンコーダ回路２２の具体的な回路構成は、ＥＣＣエンコーダ回路２２には８ビットの入力データのビット位置がローテーションされたデータ（Ｄ７，Ｄ０〜Ｄ６）が入力される点、及び、ＥＣＣエンコーダ回路２２の出力が５ビットのＥＣＣ（Ｅ０〜Ｅ４）ではなく５ビットのチェックビット（Ｆ０〜Ｆ４）になる点でＥＣＣエンコーダ回路２１と異なる。
【００５０】
ＥＣＣエンコーダ回路２１が、図３に示すＥＣＣ生成行列に従った演算を行う場合、ＥＣＣエンコーダ回路２２は、例えば図１４に示すＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣ（チェックビット）を生成する。図１４に示すＥＣＣ生成行列は、８ビットの入力データ（Ｄ０〜Ｄ７）から５ビットのチェックビット（Ｆ０〜Ｆ４）を生成するＥＣＣ生成行列であり、図３に示したＥＣＣ生成行列の各列を左に１列だけローテーションした行列である。このように、ＥＣＣエンコーダ回路２２に用いられるＥＣＣ生成行列におけるローテーションは、ＥＣＣエンコーダ回路２２に入力されるデータのローテーションに対応している。すなわち、ＥＣＣエンコーダ回路２２に入力されるビット列を導出するためのビットのローテーションにおけるローテーション後のビット位置は、ＥＣＣエンコーダ回路２２で用いられるＥＣＣ生成行列を導出するための列のローテーションにおけるローテーション後の列番号と対応している。なお、図１４に示すＥＣＣ生成行列は、図３に示すＥＣＣ生成行列をローテーションしただけであるため、図３に示すＥＣＣ生成行列と同様、各列のビットパターンが相互に異なっており、各列が奇数個の１を含んでいる。このため、図１４に示すＥＣＣ生成行列も、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣを生成するための行列である。
【００５１】
図１５は、ＥＣＣエンコーダ回路２２の具体的な回路構成の一例について示すブロック図である。ＥＣＣエンコーダ回路２２は、上述の通り、図１４に示すＥＣＣ生成行列に従った排他的論理和演算を行うことにより、８ビットの入力データ（Ｄ７，Ｄ０〜Ｄ６）から、５ビットのチェックビット（Ｆ０〜Ｆ４）を生成する回路である。ＥＣＣエンコーダ回路２２は、ＥＣＣ生成回路２０１を含み、ＥＣＣ生成回路２０１によりチェックビットを生成する。図５に示した回路と同様、ＥＣＣ生成回路２０１は、５個の排他的論理和回路２０１ａ〜２０１ｅを用いて構成される。排他的論理和回路２０１ａ〜２０１ｄは５入力ＸＯＲ回路であり、排他的論理和回路２０１ｅは４入力ＸＯＲ回路である。排他的論理和回路２０１ａ〜２０１ｅは、それぞれ、図１４に示したＥＣＣ生成行列に応じた演算を行い、５ビットのチェックビット（Ｆ０〜Ｆ４）のうちの１ビットの値を決定する。
【００５２】
Ｆ０は、排他的論理和回路２０１ａの出力として得られる。具体的には、排他的論理和回路２０１ａはＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ７の排他的論理和を演算して、演算結果をＦ０として出力する。同様に、Ｆ１は、排他的論理和回路２０１ｂの出力として得られる。Ｆ２は、排他的論理和回路２０１ｃの出力として得られる。Ｆ３は、排他的論理和回路２０１ｄの出力として得られる。Ｆ４は、排他的論理和回路２０１ｅの出力として得られる。
【００５３】
なお、ここで示した例では、ＥＣＣエンコーダ回路２２は、ＥＣＣエンコーダ回路２１が用いるＥＣＣ生成行列の各列を左に１列だけローテーションした行列を用いているが、ローテーションの方向及びローテーションの段数は、これに限られない。ただし、この場合、上述の通り、ＥＣＣエンコーダ回路２２に入力されるデータは、ＥＣＣエンコーダ回路２１に入力されるデータに対し、ＥＣＣ生成行列のローテーションと同様のローテーションが行われたデータである必要がある。
【００５４】
エンコーダ装置２０は、入力データを８ビットのライトデータ（Ｄ０〜Ｄ７）として、生成した５ビットのＥＣＣ（Ｅ０〜Ｅ４）と５ビットのチェックビット（Ｆ０〜Ｆ４）とともに、メモリ６に格納する。
【００５５】
次に、デコーダ装置３０について説明する。図１６は、デコーダ装置３０を示すブロック図である。デコーダ装置３０は、ＥＣＣデコーダ回路３１と、ＥＣＣデコーダ回路３２と、エラー通知チェック回路３３とを有する。なお、ＥＣＣデコーダ回路３１とＥＣＣデコーダ回路３２は、同じ回路構成であるが、入力されるデータのビット順序が異なっているため、両者はデコード対象が異なる。ＥＣＣデコーダ回路３１には、メモリ６から読み出されたリードデータ（Ｄ０〜Ｄ７）及びＥＣＣ（Ｅ０〜Ｅ４）が入力される。また、ＥＣＣデコーダ回路３２には、メモリ６から読み出されたリードデータ（Ｄ０〜Ｄ７）を、ＥＣＣエンコーダ回路２２に入力されたデータと同じくビットを入れ替えたデータ（Ｄ７，Ｄ０〜Ｄ６）と、メモリ６から読み出されたチェックビット（Ｆ０〜Ｆ４）とが入力される。
【００５６】
ＥＣＣデコーダ回路３１は、比較例におけるデコーダ装置９１が有するＥＣＣデコーダ回路３１と同じである。このため、ＥＣＣデコーダ回路３１は、メモリ６から読み出した８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）に対し、１ビット誤り訂正・２ビット誤り検出を行い、１ビット誤りが検出された場合にはそのビットの誤りを訂正する。ＥＣＣデコーダ回路３２は、メモリ６から読み出した８ビットのリードデータのビット位置をローテーションしたデータ（Ｄ７，Ｄ０〜Ｄ６）と５ビットのチェックビット（Ｆ０〜Ｆ４）に対し、１ビット誤り訂正・２ビット誤り検出を行う。ＥＣＣデコーダ回路３２は、用いるＥＣＣ検査行列が異なることを除き、ＥＣＣデコーダ回路３１と同様の回路構成となっている。すなわち、ＥＣＣデコーダ回路３１は、第１のＥＣＣ検査行列に従った演算を行うのに対し、ＥＣＣデコーダ回路３２は第２のＥＣＣ検査行列に従った演算を行う。
【００５７】
図１７は、デコーダ装置３０のＥＣＣデコーダ回路３１に用いられるＥＣＣ検査行列を示したものである。デコーダ装置３０のＥＣＣデコーダ回路３１に用いられるＥＣＣ検査行列は、比較例のデコーダ装置９１のＥＣＣデコーダ回路３１に用いられるＥＣＣ検査行列と同様、８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）とから５ビットのシンドロームコード（Ｓ０〜Ｓ４）を生成する行列である。なお、図１７に示すＥＣＣ検査行列では、演算に利用されないため全て０の要素からなるチェックビット（Ｆ０〜Ｆ４）に対応する列（斜線が引かれている列）も含んでいる。なお、斜線が引かれていない左側の１３列は、図７に示したＥＣＣ検査行列と同じ内容になっている。
【００５８】
図１８は、デコーダ装置３０のＥＣＣデコーダ回路３２に用いられるＥＣＣ検査行列を示したものである。デコーダ装置３０のＥＣＣデコーダ回路３２に用いられるＥＣＣ検査行列は、８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのチェックビット（Ｆ０〜Ｆ４）とから５ビットのシンドロームコード（Ｒ０〜Ｒ４）を生成する行列である。なお、図１８に示すＥＣＣ検査行列では、演算に利用されないため全て０の要素からなるＥＣＣ（Ｅ０〜Ｅ４）に対応する列（斜線が引かれている列）も含んでいる。なお、斜線が引かれた列の左側の８列は、（Ｄ０〜Ｄ７に対応する列）は、図１７に示したＥＣＣ検査行列の左側の８列（Ｄ０〜Ｄ７に対応する列）の各列を左に１列だけローテーションした内容になっている。このように、ＥＣＣデコーダ回路３２に用いられるＥＣＣ検査行列は、エンコーダ装置２０におけるＥＣＣエンコーダ回路２２に用いられるＥＣＣ生成行列の列の入れ替えに対応して列の入れ替えが行われている。
【００５９】
なお、図１８は、ＥＣＣエンコーダ回路２２が、ＥＣＣエンコーダ回路２１が用いるＥＣＣ生成行列の各列を左に１列だけローテーションした行列を用いている場合に、ＥＣＣデコーダ回路３２で用いられるＥＣＣ検査行列を示している。したがって、ローテーションの方向及びローテーションの段数に応じて、ＥＣＣデコーダ回路３２で用いられるＥＣＣ検査行列は異なる。
【００６０】
デコーダ装置３０のＥＣＣデコーダ回路３１の具体的な回路構成の一例は、図９に示した通りであり、シンドローム生成回路３００とシンドローム復号回路３１０と誤り訂正回路３２０とを有している。すなわち、図１７に示したＥＣＣ検査行列に従った演算は、図９に示したシンドローム生成回路３００により行われる。
【００６１】
デコーダ装置３０のＥＣＣデコーダ回路３２の具体的な回路構成は、用いるＥＣＣ検査行列が異なることを除き、ＥＣＣデコーダ回路３１と同様である。図１９は、ＥＣＣデコーダ回路３２の具体的な回路構成の一例について示すブロック図である。ＥＣＣデコーダ回路３２は、シンドローム生成回路３０１と、シンドローム復号回路３１１と、誤り訂正回路３２１とを有する。
【００６２】
シンドローム生成回路３０１は、以下の３つの点を除き、シンドローム生成回路３００と同じである。第１に、シンドローム生成回路３０１は、８ビットのリードデータのビット位置がローテーションされたデータ（Ｄ７，Ｄ０〜Ｄ６）が入力される。また、第２に、シンドローム生成回路３０１は、５ビットのＥＣＣではなく５ビットのチェックビット（Ｆ０〜Ｆ４）が入力される。また、第３に、シンドローム生成回路３０１は、出力が５ビットのシンドロームコード（Ｓ０〜Ｓ４）ではなく別の５ビットのシンドロームコード（Ｒ０〜Ｒ４）になる。
【００６３】
したがって、シンドローム生成回路３０１は、８ビットのデータ（Ｄ７，Ｄ０〜Ｄ６）と５ビットのチェックビット（Ｆ０〜Ｆ４）から５ビットのシンドロームコード（Ｒ０〜Ｒ４）を生成して出力する回路である。図９に示した回路と同様、シンドローム生成回路３０１は、５個の排他的論理和回路３０１ａ〜３０１ｅを用いて構成される。排他的論理和回路３０１ａ〜３０１ｄは６入力ＸＯＲ回路であり、排他的論理和回路３０１ｅは５入力ＸＯＲ回路である。排他的論理和回路３０１ａ〜３０１ｅは、それぞれ、図１８に示したＥＣＣ検査行列に応じた演算を行い、５ビットのシンドロームコード（Ｒ０〜Ｒ４）のうちの１ビットの値を決定する。
【００６４】
Ｒ０は、排他的論理和回路３０１ａの出力として得られる。具体的には、排他的論理和回路３０１ａはＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ７、Ｆ０の排他的論理和を演算して、演算結果をＲ０として出力する。同様に、Ｒ１は、排他的論理和回路３０１ｂの出力として得られる。Ｒ２は、排他的論理和回路３０１ｃの出力として得られる。Ｒ３は、排他的論理和回路３０１ｄの出力として得られる。Ｒ４は、排他的論理和回路３０１ｅの出力として得られる。シンドローム生成回路３００から出力されたシンドロームコード（Ｒ０〜Ｒ４）は、シンドローム復号回路３１１に入力される。
【００６５】
シンドローム復号回路３１１は、以下の２つの点を除き、シンドローム復号回路３１０と同じである。第１に、シンドローム復号回路３１１は、入力がシンドロームコード（S０〜Ｓ４）ではなく別のシンドロームコード（Ｒ０〜Ｒ４）である。第２に、シンドローム復号回路３１１は、出力が誤りビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と誤り無しフラグ（Ｃｘｘ）ではなく、別の誤りビット位置フラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）と誤り無しフラグ（Ｂｘｘ）である。
【００６６】
したがって、シンドローム復号回路３１１は、５ビットのシンドロームコード（Ｒ０〜Ｒ４）を復号して１３ビットの誤りビット位置フラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）と１ビットの誤り無しフラグ（Ｂｘｘ）を生成して出力する回路である。図１９に示すように、シンドローム復号回路３１１は、１３個のＩＮＶ付き論理積回路３１１ａ〜３１１ｍと、１個の否定論理和回路３１１ｎとを用いて構成される。
【００６７】
ＩＮＶ付き論理積回路３１１ａ〜３１１ｍは、５入力ＩＮＶ付きＡＮＤ回路である。ＩＮＶ付き論理積回路３１１ａ〜３１１ｍは、それぞれ、図１８に示したＥＣＣ検査行列の各列（具体的には、図１８に示すＤ０〜Ｄ７及びＦ０〜Ｆ４の１３列）に現れている５ビットのビットパターン（図１８に示すＲ０〜Ｒ４に対応）と、５ビットのシンドロームコード（Ｒ０〜Ｒ４）のビットパターンとが一致する場合に１を出力する回路である。シンドロームコードのビットパターンが、ＥＣＣ検査行列のいずれかの列のビットパターンと一致することを検出することで、１ビット誤りが検出される。ＩＮＶ付き論理積回路３１１ａ〜３１１ｈのそれぞれの出力は、誤りビット位置フラグ（Ｂ０〜Ｂ７）として出力される。ＩＮＶ付き論理積回路３１１ｉ〜３１１ｍのそれぞれの出力は、誤りビット位置フラグ（ＢＦ０〜ＢＦ４）として出力される。なお、誤りビット位置フラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）の出力パターンは、誤りビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）の出力パターンと同様であり、以下の２種類がある。
第１の出力パターンは、Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４が全て０である出力パターンである。これは、誤りが検出されない場合、及び、２ビット以上の誤りが検出される場合の出力パターンである。
第２の出力パターンは、Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４のいずれか１つが１である出力パターンである。これは、１ビットの誤りが検出される場合の出力パターンである。
【００６８】
図１８に示すＥＣＣ検査行列の第１列を見ると、そのビットパターンは（１，１，０，１，０）である。シンドローム復号回路３１０では、これに対応するように、誤りビット位置フラグＢ０を生成するＩＮＶ付き論理積回路３１１ａが設けられている。具体的には、ＩＮＶ付き論理積回路３１１ａの入力ポートのうち、３個のＩＮＶ無し入力ポートにはシンドロームコードのＲ０，Ｒ１，Ｒ３が接続され、２個のＩＮＶ付き入力ポートにはシンドロームコードのＲ２，Ｒ４が接続されている。ＩＮＶ付き論理積回路３１１ｂ〜３１１ｍについても同様に接続されている。
【００６９】
否定論理和回路３１１ｎは、５入力ＮＯＲ回路である。否定論理和回路３１１ｎは、５ビットのシンドロームコード（Ｒ０〜Ｒ４）の全ビットの値が０である場合に、１を出力する回路である。シンドロームコード（Ｒ０〜Ｒ４）の全ビットの値が０である場合、ビット誤りが発生していないと判定される。否定論理和回路３１１ｎの出力は、誤り無しフラグ（Ｂｘｘ）として出力される。なお、誤り無しフラグ（Ｂｘｘ）の出力パターンとしては、誤り無しフラグ（Ｃｘｘ）の出力パターンと同様、以下の２種類がある。
第１の出力パターンは、Ｂｘｘが１である出力パターンである。これは、上述の通り、誤りが検出されない場合の出力パターンである。
第２の出力パターンは、Ｂｘｘが０である出力パターンである。これは、１ビット以上の誤りが検出される場合の出力パターンである。
【００７０】
誤り訂正回路３２１は、以下の２つの点を除き、誤り訂正回路３２０と同じである。第１に、誤り訂正回路３２１は、入力が誤りビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と誤り無しフラグ（Ｃｘｘ）ではなく、別の誤りビット位置フラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）と誤り無しフラグ（Ｂｘｘ）である。また、第２に、誤り訂正回路３２１の出力である１ビット誤り訂正後の出力データ（Ｄ’０〜Ｄ’７）は使用されず、１ビットエラー通知信号と２ビットエラー通知信号だけが使用される。デコーダ装置３０の出力データとしては、ＥＣＣデコーダ回路３１の出力データが使用される。
【００７１】
誤り訂正回路３２１は、リードデータの１ビット誤りが検出された場合にその誤りを訂正する回路を構成する訂正処理部３２１Ａと、リードデータの誤りの発生状態について示すエラー通知信号を生成する回路を構成する通知処理部３２１Ｂとを有する。
【００７２】
訂正処理部３２１Ａは、８ビットのリードデータ（Ｄ７，Ｄ０〜Ｄ６）及び８ビットの誤りビット位置フラグ（Ｂ０〜Ｂ７）に基づいて誤り訂正を行う。具体的には、図９に示した訂正処理部３２０Ａと同様、訂正処理部３２１Ａは、８個の排他的論理和回路３２１ａ〜３２１ｈを用いて構成される。排他的論理和回路３２１ａ〜３２１ｈは２入力ＸＯＲ回路である。排他的論理和回路３２１ａ〜３２１ｈのそれぞれは、誤りビット位置フラグと、誤りビット位置フラグと対応するリードデータのビットとの排他的論理和演算を行うことにより、１ビットの誤りを訂正する。すなわち、訂正処理部３２１Ａは、８ビットの誤りビット位置フラグ（Ｂ０〜Ｂ７）のいずれか１つのフラグが１である場合に、リードデータ（Ｄ０〜Ｄ７）の対応するビット位置の値を反転させることで１ビット誤り訂正を行う回路である。なお、本実施の形態では、容易にデコーダ装置３０を構成するよう、ＥＣＣデコーダ回路３１と同じ回路構成のＥＣＣデコーダ回路３２を用いるため、誤り訂正回路３２１は、訂正処理部３２１Ａを有する。しかしながら、上述の通り、本実施の形態では、ＥＣＣデコーダ回路３２の訂正機能は使われないため、誤り訂正回路３２１は、訂正処理部３２１Ａを有さなくてもよい。
【００７３】
通知処理部３２１Ｂは、１３ビットの誤りビット位置フラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）及び１ビットの誤り無しフラグ（Ｂｘｘ）に基づいて、エラー通知信号として、１ビットエラー通知信号及び２ビットエラー通知信号を出力する。通知処理部３２１Ｂは、図９に示した通知処理部３２０Ｂと同様、１個の論理和回路３２１ｉと、１個の否定論理和回路３２１ｊとを用いて構成される。論理和回路３２１ｉは１３入力ＯＲ回路であり、１３ビットのビット位置フラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）が入力される。また、否定論理和回路３２１ｊは２入力ＮＯＲ回路であり、論理和回路３２１ｉの出力と、誤り無しフラグ（Ｂｘｘ）が入力される。
【００７４】
論理和回路３２１ｉは、入力された１３ビットのビット位置フラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）のいずれか１つのフラグが１である場合に、１ビットエラー通知信号として１を出力する。また、否定論理和回路３２１ｊは、論理和回路３２１ｉの出力及び誤り無しフラグ（Ｂｘｘ）がいずれも０である場合に、２ビットエラー通知信号として１を出力する。通知処理部３２１Ｂによるエラー通知信号の出力パターンとしては、通知処理部３２０Ｂによるエラー通知信号の出力パターンと同様、以下の３種類がある。
第１の出力パターンは、１ビットエラー通知信号及び２ビットエラー通知信号がいずれも０である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ（Ｄ７，Ｄ０〜Ｄ６）が誤りを含まないことを示す。
第２の出力パターンは、１ビットエラー通知信号が１であり、２ビットエラー通知信号が０である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ（Ｄ７，Ｄ０〜Ｄ６）及びチェックビット（Ｆ０〜Ｆ４）からなるビット列が１ビットの誤りを含むことを示す。
第３の出力パターンは、１ビットエラー通知信号が０であり、２ビットエラー通知信号が１である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ（Ｄ７，Ｄ０〜Ｄ６）及びチェックビット（Ｆ０〜Ｆ４）からなるビット列が２ビット以上の誤りを含むことを示す。
【００７５】
図１６に示すように、ＥＣＣデコーダ回路３１の誤り訂正回路３２０から出力されたエラー通知信号（１ビットエラー通知信号及び２ビットエラー通知信号）と、ＥＣＣデコーダ回路３２の誤り訂正回路３２１から出力されたエラー通知信号（１ビットエラー通知信号及び２ビットエラー通知信号）は、エラー通知チェック回路３３に入力される。誤り訂正回路３２０から出力されるエラー通知信号、及び誤り訂正回路３２１から出力されるエラー通知信号は、いずれも、エラー通知チェック回路３３により最終的な通知信号を生成するために用いられる信号である。
【００７６】
誤り訂正回路３２０が生成する１ビットエラー通知信号は、リードデータ（Ｄ０〜Ｄ７）及びＥＣＣ（Ｅ０〜Ｅ４）からなるビット列に訂正可能な１ビットの誤りが存在するか否かを示す信号ということもできる。なお、誤り訂正回路３２０から出力される１ビットエラー通知信号は、第１の判定信号とも称す。
誤り訂正回路３２０が生成する２ビットエラー通知信号は、リードデータ（Ｄ０〜Ｄ７）及びＥＣＣ（Ｅ０〜Ｅ４）からなるビット列に２ビット以上の誤りが存在するか否かを示す信号ということもできる。なお、誤り訂正回路３２０から出力される２ビットエラー通知信号は、第２の判定信号とも称す。
誤り訂正回路３２１が生成する１ビットエラー通知信号は、リードデータ（Ｄ７，Ｄ０〜Ｄ６）及びチェックビット（Ｆ０〜Ｆ４）からなるビット列に訂正可能な１ビットの誤りが存在するか否かを示す信号ということもできる。なお、誤り訂正回路３２１から出力される１ビットエラー通知信号は、第３の判定信号とも称す。
誤り訂正回路３２１が生成する２ビットエラー通知信号は、リードデータ（Ｄ７，Ｄ０〜Ｄ６）及びチェックビット（Ｆ０〜Ｆ４）からなるビット列に２ビット以上の誤りが存在するか否かを示す信号ということもできる。なお、誤り訂正回路３２１から出力される２ビットエラー通知信号は、第４の判定信号とも称す。
【００７７】
エラー通知チェック回路３３は、上述の第１から第４の判定信号に基づいて、誤りの発生状態について示す最終的なエラー通知信号を生成する回路である。エラー通知チェック回路３３は、エラー通知信号として、リードデータ（Ｄ０〜Ｄ７）に１ビットの誤りが含まれていたか否かを示す「１ビットエラー通知信号」と、リードデータ（Ｄ０〜Ｄ７）に２ビット以上の誤りが含まれていたか否かを示す「２ビットエラー通知信号」とを出力するものである。ただし、実際には、ＥＣＣ（Ｅ０〜Ｅ４）とチェックビット（Ｆ０〜Ｆ４）の両方に１ビットずつ誤りが含まれていた場合も１ビットエラー通知信号は１となる、また、ＥＣＣ（Ｅ０〜Ｅ４）又はチェックビット（Ｆ０〜Ｆ４）のどちらかに２ビット以上の誤りが含まれていた場合も２ビットエラー通知信号は１となる、ものである。エラー通知チェック回路３３が出力する１ビットエラー通知信号が１であり、２ビットエラー通知信号が０である場合、ＥＣＣデコーダ装置３０は、ビット列に１ビットの誤りがあり、かつ、リードデータについての誤りを訂正したデータを出力データ（Ｄ’０〜Ｄ’７）として出力することを通知する。また、エラー通知チェック回路３３が出力する１ビットエラー通知信号が０であり、２ビットエラー通知信号が１である場合、ＥＣＣデコーダ装置３０は、誤りを含む可能性があるデータを出力データ（Ｄ’０〜Ｄ’７）として出力することを通知する。なお、この場合、誤りがＥＣＣのみ、又はチェックビットのみに発生している場合もあるため、必ずしも出力データ（Ｄ’０〜Ｄ’７）が誤りを含むとは限らない。さらに、ＥＣＣデコーダ装置３０が出力する１ビットエラー通知信号が０であり、２ビットエラー通知信号も０である場合、ＥＣＣデコーダ装置３０は、誤りがないリードデータを、出力データ（Ｄ’０〜Ｄ’７）として出力することを通知する。
【００７８】
このように、デコーダ装置３０は、メモリ６から読み出されたリードデータ、ＥＣＣ、及びチェックビットに基づいて、読み出されたビット列が誤りを含まないこと、１ビットの誤りを含むこと、又は、２ビット以上の誤りを含むことのいずれかを示す通知信号を生成する。
【００７９】
エラー通知チェック回路３３は、図１６に示すように、１個の論理積回路３３ａと、１個の排他的論理和回路３３ｂと、１個の論理和回路３３ｃを用いて構成される。論理積回路３３ａは２入力ＡＮＤ回路であり、排他的論理和回路３３ｂは２入力ＸＯＲ回路であり、論理和回路３３ｃは３入力ＯＲ回路である。
論理積回路３３ａには、ＥＣＣデコーダ回路３１により生成された１ビットエラー通知信号（第１の判定信号）と、ＥＣＣデコーダ回路３２により生成された１ビットエラー通知信号（第３の判定信号）とが入力される。論理積回路３３ａは、これらの入力に対する論理積演算を行って得られる信号を最終的な１ビットエラー通知信号として出力する。
排他的論理和回路３３ｂには、ＥＣＣデコーダ回路３１により生成された１ビットエラー通知信号（第１の判定信号）と、ＥＣＣデコーダ回路３２により生成された１ビットエラー通知信号（第３の判定信号）とが入力される。排他的論理和回路３３ｂは、これらの入力に対する排他的論理積演算を行って得られる信号を論理和回路３３ｃに出力する。
論理和回路３３ｃには、ＥＣＣデコーダ回路３１により生成された２ビットエラー通知信号（第２の判定信号）と、ＥＣＣデコーダ回路３２により生成された２ビットエラー通知信号（第４の判定信号）と、排他的論理和回路３３ｂの出力信号が入力される。論理和回路３３ｃは、これらの入力に対する論理和演算を行って得られる信号を最終的な２ビットエラー通知信号として出力する。
【００８０】
このような構成により、エラー通知チェック回路３３は、ＥＣＣデコーダ回路３１の１ビットエラー通知信号及びＥＣＣデコーダ回路３２の１ビットエラー通知信号のいずれか一方のみが、１である場合（すなわち、訂正可能な１ビットの誤りが存在することを示す場合）、２ビットエラー通知信号として１を出力する。つまり、エラー通知チェック回路３３は、ＥＣＣデコーダ回路３１の１ビットエラー通知信号及びＥＣＣデコーダ回路３２の１ビットエラー通知信号のいずれか一方のみが、１である場合、メモリ６から読み出されたビット列（Ｄ０〜Ｄ７，Ｅ０〜Ｅ４，Ｆ０〜Ｆ４）が２ビット以上の誤りを含むことを示す通知信号を生成する。また、エラー通知チェック回路３３は、ＥＣＣデコーダ回路３１の２ビットエラー通知信号又はＥＣＣデコーダ回路３２の２ビットエラー通知信号の少なくとも一方が、１である場合（すなわち、２ビット以上の誤りが存在することを示す場合）、２ビットエラー通知信号として１を出力する。つまり、エラー通知チェック回路３３は、ＥＣＣデコーダ回路３１の２ビットエラー通知信号又はＥＣＣデコーダ回路３２の２ビットエラー通知信号の少なくとも一方が、１である場合、メモリ６から読み出されたビット列（Ｄ０〜Ｄ７，Ｅ０〜Ｅ４，Ｆ０〜Ｆ４）が２ビット以上の誤りを含むことを示す通知信号を生成する。
【００８１】
以上説明した通り、本実施の形態では、ＥＣＣエンコーダ回路２１によるＥＣＣと、ＥＣＣエンコーダ回路２２によるＥＣＣであるチェックビットとが生成される。そして、これらは、異なるＥＣＣ生成行列に従ったＥＣＣである。ＥＣＣエンコーダ回路２１により生成されたＥＣＣを用いた検出処理では見過ごされてしまう誤りの発生パターンであっても、ＥＣＣエンコーダ回路２２により生成されたチェックビットを用いた検出処理では誤りが発見されうる。したがって、ＥＣＣエンコーダ回路２１が生成したＥＣＣのみによるデータの誤り検出に比べ、検出性能を向上させることができる。
【００８２】
なお、上述した実施の形態１では、８ビットのデータに対し、５ビットのＥＣＣと５ビットのチェックビットとを付加する例を示したが、ＥＣＣ（チェックビット）の付加対象のデータ（記憶対象のデータ）のビット数及びＥＣＣ（チェックビット）のビット数は、任意のビット数とすることができる。例えば、６４ビットのデータに対して、８ビットのＥＣＣ及び８ビットのチェックビットを付加することも可能である。
【００８３】
図２０Ａ及び図２０Ｂは、ライトデータとしてメモリに書き込む６４ビットの入力データ（Ｄ０〜Ｄ６３）から８ビットのＥＣＣ（Ｅ０〜Ｅ７）を生成するＥＣＣ生成行列の一例である。このＥＣＣ生成行列に対応して、メモリから読み出した６４ビットのリードデータ（Ｄ０〜Ｄ６３）と８ビットのＥＣＣ（Ｅ０〜Ｅ７）とから８ビットのシンドロームコード（Ｓ０〜Ｓ７）を生成するＥＣＣ検査行列が決まる。なお、このＥＣＣ検査行列の左側６４列はＥＣＣ生成行列の６４列と同じ内容となり、ＥＣＣ検査行列の右側８列には８行８列の単位行列が追加された形となる。
【００８４】
チェックビットを生成するためのＥＣＣ生成行列については、実施の形態１と同様、任意のローテーションを行った行列を用いればよい。チェックビット用のＥＣＣ検査行列は、チェックビット用のＥＣＣ生成行列に応じて決定される。また、チェックビット用のエンコーダ回路及びデコーダ回路には、ＥＣＣ生成行列と同様のローテーションを行ったデータを入力すればよい。
【００８５】
６４ビットのデータに対して、８ビットのＥＣＣ及び８ビットのチェックビットを付加した場合も、多ビット誤りの検出性能を向上させることが可能である。また、６４ビットのデータに対して付加するＥＣＣとチェックビットの合計ビット数を１６ビットにすることができる。つまり、ＥＣＣとチェックビットの合計ビット数をデータ伝送に適したサイズである２バイトにすることができる。
【００８６】
＜実施の形態２＞
次に、実施の形態２について説明する。実施の形態２では、実施の形態１と同じエンコーダ装置２０が用いられるが、デコーダ装置については、デコーダ装置３０の代わりにデコーダ装置３０Ａが用いられる。
【００８７】
図２１は、実施の形態２におけるデコーダ装置３０Ａの構成を示すブロック図である。デコーダ装置３０Ａは、シンドローム生成回路３００及び３０１と、シンドローム復号回路３１０及び３１１と、シンドロームチェック回路３３０と、誤り訂正回路３２０とを有する。
【００８８】
デコーダ装置３０Ａのシンドローム生成回路３００は、ＥＣＣデコーダ回路３１のシンドローム生成回路３００（図９参照）と同じであり、８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）から５ビットのシンドロームコード（Ｓ０〜Ｓ４）を生成して出力する回路である。
デコーダ装置３０Ａのシンドローム生成回路３０１は、ＥＣＣデコーダ回路３２のシンドローム生成回路３０１（図１９参照）と同じであり、８ビットのリードデータのビット位置がローテーションされたデータ（Ｄ７，Ｄ０〜Ｄ６）と５ビットのチェックビット（Ｆ０〜Ｆ４）から５ビットのシンドロームコード（Ｒ０〜Ｒ４）を生成して出力する回路である。
デコーダ装置３０Ａのシンドローム復号回路３１０は、ＥＣＣデコーダ回路３１（図９参照）のシンドローム復号回路３１０と同じであり、５ビットのシンドロームコード（Ｓ０〜Ｓ４）を復号して、１３ビットの誤りビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と誤り無しフラグ（Ｃｘｘ）を生成して出力する回路である。
デコーダ装置３０Ａのシンドローム復号回路３１１は、ＥＣＣデコーダ回路３２のシンドローム復号回路３１１（図１９参照）と同じであり、５ビットのシンドロームコード（Ｒ０〜Ｒ４）を復号して、１３ビットの誤りビット位置フラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）と誤り無しフラグ（Ｂｘｘ）を生成して出力する回路である。
【００８９】
デコーダ装置３０Ａのシンドローム生成回路３００及びシンドローム復号回路３１０は、第１のシンドローム部とも称す。第１のシンドローム部は、メモリ６から読み出されたリードデータ（Ｄ０〜Ｄ７）及びＥＣＣ（Ｅ０〜Ｅ４）から第１のシンドロームコード（Ｓ０〜Ｓ４）を生成する。そして、第１のシンドローム部は、この第１のシンドロームコードがＥＣＣ（Ｅ０〜Ｅ４）を生成するためのＥＣＣ生成行列（第１のＥＣＣ生成行列）及び単位行列からなるＥＣＣ検査行列（第１のＥＣＣ検査行列）のいずれかの列のビットパターンと一致しているか否かを示す第１のフラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と、第１のシンドロームコードの各ビットが全て０であるか否かを示す第２のフラグ（Ｃｘｘ）を生成する。
また、デコーダ装置３０Ａのシンドローム生成回路３０１及びシンドローム復号回路３１１は、第２のシンドローム部とも称す。第２のシンドローム部は、メモリ６から読み出されたリードデータ（Ｄ０〜Ｄ７）のビットを入れ替えたデータ（Ｄ７，Ｄ０〜Ｄ６）とメモリ６から読み出されたチェックビット（Ｆ０〜Ｆ４）から、第２のシンドロームコード（Ｒ０〜Ｒ４）を生成する。そして、第２のシンドローム部は、この第２のシンドロームコードがチェックビット（Ｆ０〜Ｆ４）を生成するためのＥＣＣ生成行列（第２のＥＣＣ生成行列）及び単位行列からなるＥＣＣ検査行列（第２のＥＣＣ検査行列）のいずれかの列のビットパターンと一致しているか否かを示す第３のフラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）と、第２のシンドロームコードの各ビットが全て０であるか否かを示す第４のフラグ（Ｂｘｘ）を生成する。
【００９０】
シンドロームチェック回路３３０は、シンドロームチェック部とも称し、上記第１のフラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と上記第３のフラグ（Ｂ０〜Ｂ７，ＢＦ０〜ＢＦ４）とを比較するとともに、上記第２のフラグ（Ｃｘｘ）と上記第４のフラグ（Ｂｘｘ）とを比較する回路である。つまり、シンドロームチェック回路３３０は、２種類の誤りビット位置フラグ（Ｃ０〜Ｃ７とＢ０〜Ｂ７）の一致性をチェックして、確度（信頼性）を高めた誤りビット位置フラグ（Ｃ’０〜Ｃ’７）を生成し、また、誤りビット位置フラグ（ＣＥ０〜ＣＥ４）と誤りビット位置フラグ（ＢＦ０〜ＢＦ４）については両者の論理和を誤りビット位置フラグ（ＣＥ’０〜ＣＥ’４）として出力する。また、同様に、シンドロームチェック回路３３０は、２種類の誤り無しフラグ（ＣｘｘとＢｘｘ）の一致性をチェックして、確度（信頼性）を高めた誤り無しフラグ（Ｃ’ｘｘ）を生成する。
【００９１】
シンドロームチェック回路３３０は、図２１に示すように、論理積回路３３０ａ〜３３０ｈと、論理和回路３３０ｉ〜３３０ｍと、論理積回路３３０ｎを用いて構成される。論理積回路３３０ａ〜３３０ｈは２入力ＡＮＤ回路である。また、論理和回路３３０ｉ〜３３０ｍは２入力ＯＲ回路である。論理積回路３３０ａ〜３３０ｈには、シンドローム復号回路３１０から出力された誤りビット位置フラグ（Ｃ０〜Ｃ７）とシンドローム復号回路３１１から出力された誤りビット位置フラグ（Ｂ０〜Ｂ７）が入力される。そして、論理積回路３３０ａ〜３３０ｈは、入力された値が両方とも１である場合に、１を出力し、それ以外の場合、０を出力する。つまり、上述の第１のフラグ（Ｃ０〜Ｃ７）、第３のフラグ（Ｂ０〜Ｂ７）、第１のシンドロームコード（Ｓ０〜Ｓ４）、第２のシンドロームコード（Ｒ０〜Ｒ４）、第１のＥＣＣ検査行列、及び、第２のＥＣＣ検査行列により説明すると、シンドロームチェック回路３３０は以下のようにフラグ（Ｃ’０〜Ｃ’７）を出力する。シンドロームチェック回路３３０は、第１の条件と第２の条件をともに満たす場合に限り、第１のシンドロームコード（Ｓ０〜Ｓ４）が第１のＥＣＣ検査行列のｔ列目（ただし、ｔは正整数であり、第１のＥＣＣ検査行列に含まれる第１のＥＣＣ生成行列のいずれかの列に相当する列番号である）のビットパターンと一致していることを示す第５のフラグ（Ｃ’０〜Ｃ’７）を出力する。ここで、第１の条件は、第１のフラグ（Ｃ０〜Ｃ７）が、第１のシンドロームコード（Ｓ０〜Ｓ４）が第１のＥＣＣ検査行列のｔ列目のビットパターンと一致していることを示すという条件である。第２の条件は、第３のフラグ（Ｂ０〜Ｂ７）が、第２のシンドロームコード（Ｒ０〜Ｒ４）が第２のＥＣＣ検査行列のｔ列目のビットパターンと一致していることを示すという条件である。
また、論理和回路３３０ｉ〜３３０ｍには、シンドローム復号回路３１０から出力された誤りビット位置フラグ（ＣＥ０〜ＣＥ４）とシンドローム復号回路３１１から出力された誤りビット位置フラグ（ＢＦ０〜ＢＦ４）が入力される。そして、論理和回路３３０ｉ〜３３０ｍは、入力された値の少なくとも一方が１である場合に、１を出力し、それ以外の場合、０を出力する。つまり、上述の第１のフラグ（ＣＥ０〜ＣＥ４）、第３のフラグ（ＢＦ０〜ＢＦ４）、第１のシンドロームコード（Ｓ０〜Ｓ４）、第２のシンドロームコード（Ｒ０〜Ｒ４）、第１のＥＣＣ検査行列、及び、第２のＥＣＣ検査行列により説明すると、シンドロームチェック回路３３０は以下のようにフラグ（ＣＥ’０〜ＣＥ’４）を出力する。シンドロームチェック回路３３０は、第１のフラグ（ＣＥ０〜ＣＥ４）が、第１のシンドロームコード（Ｓ０〜Ｓ４）が第１のＥＣＣ検査行列のｓ列目（ただし、ｓは正整数であり、第１のＥＣＣ検査行列に含まれる単位行列のいずれかの列に相当する列番号である）のビットパターンと一致していることを示す場合、又は、第３のフラグ（ＢＦ０〜ＢＦ４）が、第２のシンドロームコード（Ｒ０〜Ｒ４）が第２のＥＣＣ検査行列のｓ列目のビットパターンと一致していることを示す場合、第１のシンドロームコード（Ｓ０〜Ｓ４）が第１のＥＣＣ検査行列のｓ列目のビットパターンと一致していることを示す第５のフラグ（ＣＥ’０〜ＣＥ’４）を出力する。
【００９２】
また、論理積回路３３０ｎには、シンドローム復号回路３１０から出力された誤り無しフラグ（Ｃｘｘ）とシンドローム復号回路３１１から出力された誤り無しフラグ（Ｂｘｘ）が入力される。そして、論理積回路３３０ｎは、入力された値が両方とも１である場合に、１を出力し、それ以外の場合、０を出力する。つまり、上述の第２のフラグ（Ｃｘｘ）、第４のフラグ（Ｂｘｘ）、第１のシンドロームコード（Ｓ０〜Ｓ４）、及び第２のシンドロームコード（Ｒ０〜Ｒ４）により説明すると、シンドロームチェック回路３３０は以下のようにフラグ（Ｃ’ｘｘ）を出力する。シンドロームチェック回路３３０は、第２のフラグが、第１のシンドロームコードの各ビットが全て０であることを示し、かつ、第４のフラグが、第２のシンドロームコードの各ビットが全て０であることを示す場合に限り、第１のシンドロームコードの各ビットが全て０であることを示す第６のフラグ（Ｃ’ｘｘ）を出力する。
【００９３】
シンドロームチェック回路３３０から出力された誤りビット位置フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）及び誤り無しフラグ（Ｃ’ｘｘ）は、誤り訂正回路３２０に入力される。デコーダ装置３０Ａの誤り訂正回路３２０は、ＥＣＣデコーダ回路３１の誤り訂正回路３２０（図９参照）と同じであり、シンドロームチェック回路３３０から出力された誤りビット位置フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）及び誤り無しフラグ（Ｃ’ｘｘ）を用いて、誤り訂正及びエラー通知を行う回路である。誤り訂正回路３２０は、誤りビット位置フラグ（Ｃ‘０〜Ｃ’７）のいずれか１つのフラグが１である場合に、リードデータ（Ｄ０〜Ｄ７）の対応するビット位置（Ｄ０〜Ｄ７のいずれかのビット）の値を反転させることで１ビット誤り訂正を行い、１ビット誤り訂正後の出力データ（Ｄ’０〜Ｄ’７）を出力する。また、誤り訂正回路３２０は、誤りビット位置フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）及び誤り無しフラグ（Ｃ’ｘｘ）に基づいて、１ビットエラー通知信号及び２ビットエラー通知信号からなるエラー通知信号を生成する。このように、デコーダ装置３０Ａの誤り訂正回路３２０は、シンドローム復号回路３１０が出力する誤りビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）及び誤り無しフラグ（Ｃｘｘ）の代わりに、シンドロームチェック回路３３０が出力する誤りビット位置フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）及び誤り無しフラグ（Ｃ’ｘｘ）を用いる点を除き、その構成及び動作は、図９に示した誤り訂正回路３２０と同じである。
【００９４】
このように、本実施の形態では、デコーダ装置３０Ａは、シンドロームチェック回路３３０の比較結果に基づいて、１ビット誤り訂正及びエラー通知を行う。すなわち、デコーダ装置３０Ａは、シンドロームチェック回路３３０により確度が高められた誤りビット位置フラグ（Ｃ’０〜Ｃ’７）の値に基づいて、メモリ６から読み出されたリードデータ（Ｄ０〜Ｄ７）に対する１ビット誤り訂正を行う。また、デコーダ装置３０Ａは、シンドロームチェック回路３３０により確度が高められた誤りビット位置フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）の値及び誤り無しフラグ（Ｃ’ｘｘ）の値に基づいてエラー通知を行う。このエラー通知は、ＥＣＣによる誤り検出結果とチェックビットによる誤り検出結果を統合したエラー通知となっている。したがって、本実施の形態においても、誤りの検出性能を向上させることができる。
【００９５】
なお、上述の通り、シンドロームチェック回路３３０は、論理積回路３３０ａ〜３３０ｈを用いて、誤りビット位置フラグ（Ｃ０〜Ｃ７）及び誤りビット位置フラグ（Ｂ０〜Ｂ７）をチェックしている。したがって、例えば、誤りビット位置フラグＣ０の値と、誤りビット位置フラグＢ０の値が異なる場合、Ｃ’０の値は０となる。この場合、Ｃ０に相当するビット位置の値は誤り訂正回路３２０において訂正されない。つまり、本実施の形態では、誤りビット位置フラグ（Ｃ０〜Ｃ７）及び誤りビット位置フラグ（Ｂ０〜Ｂ７）の値が一致する場合に限り、訂正処理が行われる。すなわち、本実施の形態によれば、誤訂正が回避される。また、シンドロームチェック回路３３０は、論理積回路３３０ｎを用いて、誤り無しフラグ（Ｃｘｘ）及び誤り無しフラグ（Ｂｘｘ）をチェックしている。したがって、誤り無しフラグＣｘｘの値と、誤り無しフラグＢｘｘの値が異なる場合、Ｃ’ｘｘの値は０となる。つまり、この場合、Ｃ’ｘｘの出力として、誤り無しであることを示す１は出力されない。このため、誤り検出の見逃しが回避される。
【００９６】
図２２は、実施の形態２にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。また、図２３は、実施の形態２にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。これらの表の見方は、図１０及び図１１と同様である。ただし、実施の形態２では、８ビットのライトデータ（Ｄ０〜Ｄ７）と、５ビットのＥＣＣ（Ｅ０〜Ｅ４）と５ビットのチェックビット（Ｆ０〜Ｆ４）がメモリ６に格納される。このため、図２２及び図２３は、ｋ＝１からｋ＝１８までについて結果を示している。
【００９７】
図１０及び図２２からわかるように、誤りの検出見逃しの総数は変らないものの、比較例では、ｋ＝４において、５５個の誤りの検出見逃しが発生していたが、実施の形態２では、これが０個となっている。また、比較例では、ｋ＝５及びｋ＝６において合計９６個の誤りの検出見逃しが発生していたが、実施の形態２では、これが２８個となっている。このように、実施の形態２では、ｋの値が比較的小さい場合における見逃し個数を減少させることが可能となる。また、これにともない、図１１及び図２３からわかるように、ｋの値が比較的小さい場合における誤訂正の個数も減少している。
【００９８】
＜実施の形態３＞
次に実施の形態３について説明する。実施の形態３は、ＥＣＣの一部のビットをチェックビットとしても利用することにより、チェックビットのビット数を減らしている点で実施の形態１と異なる。具体的には、実施の形態１では５ビットのＥＣＣに対し、５ビットのチェックビットを用いたが、実施の形態３では、３ビットのチェックビットを用いている。実施の形態３にかかる入出力インタフェース１０は、エンコーダ装置２０の代わりにエンコーダ装置２０Ａを有し、デコーダ装置３０の代わりにデコーダ装置３０Ｂを有する。
【００９９】
図２４は、エンコーダ装置２０Ａを示すブロック図である。図２４に示すように、エンコーダ装置２０Ａは、ＥＣＣエンコーダ回路２１とＥＣＣエンコーダ回路２３とを有する。エンコーダ装置２０ＡのＥＣＣエンコーダ回路２１は、エンコーダ装置２０のＥＣＣエンコーダ回路２１と同じであり、第１のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣを生成する回路である。また、ＥＣＣエンコーダ回路２３は、上記第１のＥＣＣ生成行列において、所定の行の値が同じである複数の列を入れ替えた行列である第２のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣをチェックビットとして生成する回路である。なお、ＥＣＣエンコーダ回路２１とＥＣＣエンコーダ回路２３は、同じ回路構成であるが、入力されるデータのビット順序が異なっているため、異なるＥＣＣを生成する。
【０１００】
図２５は、図２４に示したＥＣＣエンコーダ回路２３で用いられるＥＣＣ生成行列の一例を示したものである。図２５に示すように、このＥＣＣ生成行列は、８ビットの入力データ（Ｄ０〜Ｄ７）から５ビットのチェックビット（Ｆ０〜Ｆ４）を生成するＥＣＣ生成行列であり、ＥＣＣエンコーダ回路２１で用いている図３に示したＥＣＣ生成行列の一部分（下側の３行（Ｆ２〜Ｆ４の部分）の左側の３列（Ｄ０〜Ｄ２の部分））の各列を左に１列だけローテーションした形になっている。図３に示したＥＣＣ生成行列では、左側の３列（Ｄ０〜Ｄ２の部分）は、１行目の要素の値が同じであり、かつ、２行目の要素の値が同じである。したがって、図２５に示したＥＣＣ生成行列は、図３に示したＥＣＣ生成行列において、１行目及び２行目の値が同じである３つの列（左側の３列）を入れ替えた行列である。このような入れ替えが行われたＥＣＣ生成行列においては、入れ替えの前後において、１行目及び２行目の値はいずれの列においても変更がない。つまり、入れ替え前のＥＣＣ生成行列の１行目で生成されるＥＣＣ（Ｅ０）は、入れ替え後のＥＣＣ生成行列の１行目で生成されるチェックビット（Ｆ０）と同じである。同様に、入れ替え前のＥＣＣ生成行列の２行目で生成されるＥＣＣ（Ｅ１）は、入れ替え後のＥＣＣ生成行列の２行目で生成されるチェックビット（Ｆ１）と同じである。したがって、ＥＣＣエンコーダ回路２３において生成されるチェックビット（Ｆ０，Ｆ１）をメモリ６に記憶する必要はない。
【０１０１】
ＥＣＣエンコーダ回路２３は、ビットの入れ替えが行われたデータが入力される。この入れ替えは、図２５に示したＥＣＣ生成行列を導出するための入れ替えに対応している。すなわち、Ｄ０〜Ｄ２だけをローテーションさせる入れ替えが行われたデータがＥＣＣエンコーダ回路２３に入力される。具体的には、図２４に示すように、ＥＣＣエンコーダ回路２３は、８ビットの入力データの下位３ビットのビット位置だけをローテーションしたデータ（Ｄ２，Ｄ０，Ｄ１，Ｄ３〜Ｄ７）が入力され、５ビットのチェックビット（Ｆ０〜Ｆ４）を生成する。
【０１０２】
エンコーダ装置２０Ａは、入力データを８ビットのライトデータ（Ｄ０〜Ｄ７）として、生成した５ビットのＥＣＣ（Ｅ０〜Ｅ５）と、生成した５ビットのチェックビットのうちの上位３ビット（Ｆ２〜Ｆ４）とともに、メモリ６に書き込む。なお、上述したとおり、ＥＣＣエンコーダ回路２３で生成される５ビットのチェックビットのうちの下位２ビット（Ｆ０〜Ｆ１）は、ＥＣＣエンコーダ回路２１で生成される５ビットのＥＣＣのうちの下位２ビット（Ｅ０〜Ｅ１）と完全に同じものになるため、重複してメモリ６に書き込む必要はない。このようにエンコーダ装置２０Ａは、入力データと、ＥＣＣエンコーダ回路２１により生成されたＥＣＣの全ビットと、ＥＣＣエンコーダ回路２３により生成されたＥＣＣの一部のビットとをメモリ６に格納する。なお、この一部のビットは、ＥＣＣエンコーダ回路２３が用いるＥＣＣ生成行列における上記所定の行以外の行を用いた演算により得られるビットである。
【０１０３】
次に、デコーダ装置３０Ｂについて説明する。図２６は、デコーダ装置３０Ｂを示すブロック図である。デコーダ装置３０Ｂは、ＥＣＣデコーダ回路３１と、ＥＣＣデコーダ回路３４と、エラー通知チェック回路３３とを有する。
【０１０４】
デコーダ装置３０ＢのＥＣＣデコーダ回路３１は、デコーダ装置３０のＥＣＣデコーダ回路３１と同じであり、メモリ６から読み出した８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）に対し、１ビット誤り訂正・２ビット誤り検出を行い、１ビット誤りが検出された場合にはそのビットの誤りを訂正する回路である。ＥＣＣデコーダ回路３４は、メモリ６から読み出した８ビットのリードデータの下位３ビットのビット位置だけをローテーションしたデータ（Ｄ２，Ｄ０，Ｄ１，Ｄ３〜Ｄ７）と、５ビットのＥＣＣのうちの下位２ビット（Ｅ０＝Ｆ０，Ｅ１＝Ｆ１）と５ビットのチェックビットのうちの上位３ビット（Ｆ２〜Ｆ４）とを用いて、１ビット誤り訂正・２ビット誤り検出を行う回路である。なお、ＥＣＣデコーダ回路３１とＥＣＣデコーダ回路３４は、同じ回路構成であるが、入力されるデータのビット順序が異なっているため、両者はデコード対象が異なる。
【０１０５】
図２７は、デコーダ装置３０ＢのＥＣＣデコーダ回路３１に用いられるＥＣＣ検査行列を示したものである。デコーダ装置３０ＢのＥＣＣデコーダ回路３１に用いられるＥＣＣ検査行列は、８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）とから５ビットのシンドロームコード（Ｓ０〜Ｓ４）を生成する行列である。なお、図２７に示すＥＣＣ検査行列では、演算に利用されないため全て０の要素からなる、５ビットのチェックビットのうちの上位３ビット（Ｆ２〜Ｆ４）に対応する列（斜線が引かれている列）も含んでいる。なお、斜線が引かれていない左側の１３列は、図７に示したＥＣＣ検査行列と同じ内容になっている。
【０１０６】
また、図２８は、デコーダ装置３０ＢのＥＣＣデコーダ回路３４に用いられるＥＣＣ検査行列を示したものである。デコーダ装置３０ＢのＥＣＣデコーダ回路３４に用いられるＥＣＣ検査行列は、８ビットのリードデータ（Ｄ０〜Ｄ７）と、５ビットのＥＣＣのうちの下位２ビット（Ｅ０＝Ｆ０，Ｅ１＝Ｆ１）と、５ビットのチェックビットのうちの上位３ビット（Ｆ２〜Ｆ４）とから、５ビットのシンドロームコード（Ｒ０〜Ｒ４）を生成する行列である。なお、図２８に示すＥＣＣ検査行列では、演算に利用されないため全て０の要素からなる、５ビットのＥＣＣのうちの上位３ビット（Ｅ２〜Ｅ４）に対応する列（斜線が引かれている列）も含んでいる。なお、左側の８列（Ｄ０〜Ｄ７に対応する列）は、図２７に示したＥＣＣ検査行列の左側の８列（Ｄ０〜Ｄ７に対応する列）の一部の列（Ｄ０〜Ｄ２に対応する列）をローテーションした形となっている。ここで、上側の２行は、全て１であるため、より詳細には、図２８の左側の８列（Ｄ０〜Ｄ７に対応する列）は、図２７に示したＥＣＣ検査行列の左側の８列（Ｄ０〜Ｄ７に対応する列）の一部分（下側の３行（Ｒ２〜Ｒ４に対応する行）の左側の３列（Ｄ０〜Ｄ２に対応する列））の各列を左に１列だけローテーションした形になっている。
【０１０７】
デコーダ装置３０Ｂのエラー通知チェック回路３３は、デコーダ装置３０のエラー通知チェック回路３３と同じであり、ＥＣＣデコーダ回路３１が出力するエラー通知及びＥＣＣデコーダ回路３４が出力するエラー通知に基づいて、最終的なエラー通知信号を生成する回路である。
【０１０８】
このように、デコーダ装置３０Ｂは、メモリ６から読み出されたリードデータ（Ｄ０〜Ｄ７）と、ＥＣＣ（Ｅ０〜Ｅ４）と、チェックビットの一部のビット（Ｆ２〜Ｆ４）とに基づいて、通知信号を生成する。
【０１０９】
以上、実施の形態３について説明した。本実施の形態においても、実施の形態１と同様、ＥＣＣによる誤り検出とチェックビットによる誤り検出とが行われる。このため、１種類のＥＣＣのみによるデータの誤り検出に比べ、検出性能を向上させることができる。また、上述の通り、ＥＣＣの下位２ビットをチェックビットの下位２ビットと共用できるため、データとＥＣＣとチェックビットの合計ビット数を１６ビットとすることができる。つまり、合計ビット数をデータ伝送に適したサイズである２バイトにすることができる。
【０１１０】
以下、実施の形態３の変形例について説明する。実施の形態２において、実施の形態３のようなＥＣＣとチェックビットの共用が行われてもよい。すなわち、実施の形態３にかかるエンコーダ装置２０Ａと、図２９に示すデコーダ装置３０Ｃとが用いられてもよい。図２９に示すデコーダ装置３０Ｃは、シンドローム生成回路３０１が、シンドローム生成回路３０２に置き換えられた点を除き、図２１に示した実施の形態２にかかるデコーダ装置３０Ａと同じである。シンドローム生成回路３０２は、シンドローム生成回路３０１と同じ回路構成であるが、入力されるデータのビット順序が異なっているため、生成するシンドロームコードが異なる。
【０１１１】
シンドローム生成回路３０２は、上述のＥＣＣデコーダ回路３４と同様、メモリ６から読み出した８ビットのリードデータの下位３ビットのビット位置だけをローテーションしたデータ（Ｄ２，Ｄ０，Ｄ１，Ｄ３〜Ｄ７）と、５ビットのＥＣＣのうちの下位２ビット（Ｅ０＝Ｆ０，Ｅ１＝Ｆ１）と、５ビットのチェックビットのうちの上位３ビット（Ｆ２〜Ｆ４）とが入力される。そして、これらの入力に基づいて、シンドロームコードを生成する。
このような構成とすることにより、実施の形態２においても、合計ビット数をデータ伝送に適したサイズである２バイトにすることができる。
【０１１２】
図３０は、実施の形態３の変形例にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。また、図３１は、実施の形態３の変形例にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。これらの表の見方は、図１０及び図１１と同様である。ただし、実施の形態３の変形例では、８ビットのライトデータ（Ｄ０〜Ｄ７）と、５ビットのＥＣＣ（Ｅ０〜Ｅ４）と３ビットのチェックビット（Ｆ２〜Ｆ４）がメモリ６に格納される。このため、図３０及び図３１は、ｋ＝１からｋ＝１６までについて結果を示している。
【０１１３】
図１０及び図３０からわかるように、誤りの検出見逃しの総数は変らないものの、比較例では、ｋ＝４において、５５個の誤りの検出見逃しが発生していたが、実施の形態３の変形例では、これが４個となっている。また、比較例では、ｋ＝５及びｋ＝６において合計９６個の誤りの検出見逃しが発生していたが、実施の形態３の変形例では、これが５９個となっている。このように、実施の形態３の変形例では、ｋの値が比較的小さい場合における見逃し個数を減少させることが可能となる。また、これにともない、図１１及び図３１からわかるように、ｋの値が比較的小さい場合における誤訂正の個数も減少している。
【０１１４】
＜実施の形態４＞
次に、実施の形態４について説明する。実施の形態１から３では、エンコーダ装置は、２つの同じ回路構成を有するＥＣＣエンコーダ回路を有し、一方が、チェックビットを生成する回路として利用された。これに対し、実施の形態４にかかるエンコーダ装置２０Ｂは、互いに回路構成が異なっているＥＣＣエンコーダ回路２１とチェックビット生成回路２４とを有している。
【０１１５】
実施の形態４にかかる入出力インタフェース１０は、エンコーダ装置２０の代わりにエンコーダ装置２０Ｂを有し、デコーダ装置３０の代わりにデコーダ装置３０Ｄを有する。
【０１１６】
図３２は、エンコーダ装置２０Ｂを示すブロック図である。図３２に示すように、エンコーダ装置２０Ｃは、ＥＣＣエンコーダ回路２１とチェックビット生成回路２４とを有する。エンコーダ装置２０ＢのＥＣＣエンコーダ回路２１は、実施の形態１などのＥＣＣエンコーダ回路２１と同じであり、所定のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣを生成する回路である。本実施の形態４において、ＥＣＣエンコーダ回路２１が用いるＥＣＣ生成行列をＥＣＣ生成部分行列と称す。また、チェックビット生成回路２４は、所定のチェックビット生成行列に従って演算することによりチェックビットを生成する回路である。
【０１１７】
ここで、ＥＣＣエンコーダ回路２１に用いられるＥＣＣ生成部分行列と、チェックビット生成回路２４に用いられるチェックビット生成行列について説明する。ＥＣＣ生成部分行列及びチェックビット生成行列は、いずれも、所定のＥＣＣ生成行列（以下、ＥＣＣ生成全体行列と称す）の部分行列である。ここで、ＥＣＣ生成全体行列は、１ビット誤り訂正及び２ビット誤り検出が可能なｐビット（ただし、ｐは正整数）のＥＣＣを生成するためのＥＣＣ生成行列であるとする。この場合、チェックビット生成行列はＥＣＣ生成全体行列のｑ行（ただし、ｑはｐ未満の正整数）の部分行列であり、ＥＣＣ生成部分行列は、ＥＣＣ生成全体行列から上記ｑ行の部分行列を除いた部分行列であるｒ行（ただし、ｒ＝ｐ−ｑ）の部分行列である。ＥＣＣエンコーダ回路２１は、このようなＥＣＣ生成部分行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なｒビットのＥＣＣを生成する。また、チェックビット生成回路２４は、チェックビット生成行列に従って演算することによりｑビットのチェックビットを生成する。なお、本実施の形態では、具体的な一例として、ｐ＝８、ｑ＝３、ｒ＝５としている。
【０１１８】
図３３は、ＥＣＣ生成全体行列、ＥＣＣ生成部分行列、及びチェックビット生成行列の一例を示すものである。なお、図３３において、上側に図示された５行８列の行列がＥＣＣ生成部分行列であり、下側に図示された３行８列の行列がチェックビット生成行列であり、全体の８行８列の行列がＥＣＣ生成全体行列である。図３３に示したＥＣＣ生成全体行列は、８ビットの入力データ（Ｄ０１〜Ｄ７）から、１ビット誤り訂正及び２ビット誤り検出が可能な８ビットのＥＣＣを生成することが可能なＥＣＣ生成行列である。図３３に示したＥＣＣ生成部分行列は、８ビットの入力データ（Ｄ０１〜Ｄ７）から、１ビット誤り訂正及び２ビット誤り検出が可能な５ビットのＥＣＣ（Ｅ０〜Ｅ４）を生成することが可能なＥＣＣ生成行列である。図３３に示したチェックビット生成行列は、８ビットの入力データ（Ｄ０１〜Ｄ７）から、３ビットのチェックビット（Ｇ５〜Ｇ７）を生成することが可能な行列である。なお、図３３に示したチェックビット生成行列は、各列のビットパターンの種類は、８パターンではなく４パターンしかない。このため、チェックビットは、ＳＥＣ−ＤＥＤ符号ではない。
【０１１９】
エンコーダ装置２０ＢのＥＣＣエンコーダ回路２１には、８ビットのデータ（Ｄ０〜Ｄ７）が入力される。ＥＣＣエンコーダ回路２１は、図３３の上側に示すＥＣＣ生成部分行列を用いた演算を行い、８ビットの入力データ（Ｄ０〜Ｄ７）に対する５ビットのＥＣＣ（Ｅ０〜Ｅ４）を生成する。なお、エンコーダ装置２０ＢのＥＣＣエンコーダ回路２１の具体的な回路構成の一例は、図５に示した通りである。
【０１２０】
エンコーダ装置２０Ｂのチェックビット生成回路２４には、８ビットのデータ（Ｄ０〜Ｄ７）が入力される。チェックビット生成回路２４は、図３３の下側に示すチェックビット生成行列を用いた演算を行い、８ビットの入力データ（Ｄ０〜Ｄ７）に対する３ビットのチェックビット（Ｇ５〜Ｇ７）を生成する。図３４は、チェックビット生成回路２４の具体的な回路構成の一例について示すブロック図である。チェックビット生成回路２４は、図３３に示すチェックビット生成行列に従った排他的論理和演算を行うことにより、８ビットの入力データ（Ｄ０〜Ｄ７）から、３ビットのチェックビット（Ｇ５〜Ｇ７）を生成する回路である。チェックビット生成回路２４は、３個の排他的論理和回路２４ａ〜２４ｃを用いて構成される。排他的論理和回路２４ａ〜２４ｃは４入力ＸＯＲ回路である。排他的論理和回路２４ａ〜２４ｃは、それぞれ、図３３に示したチェックビット生成行列に応じた演算を行い、３ビットのチェックビット（Ｇ５〜Ｇ７）のうちの１ビットの値を決定する。
【０１２１】
Ｇ５は、排他的論理和回路２４ａの出力として得られる。具体的には、排他的論理和回路２４ａはＤ１、Ｄ２、Ｄ４、Ｄ５の排他的論理和を演算して、演算結果をＧ５として出力する。同様に、Ｇ６は、排他的論理和回路２４ｂの出力として得られる。Ｇ７は、排他的論理和回路２４ｃの出力として得られる。
【０１２２】
エンコーダ装置２０Ｂは、入力データを８ビットのライトデータ（Ｄ０〜Ｄ７）として、生成した５ビットのＥＣＣ（Ｅ０〜Ｅ４）と３ビットのチェックビット（Ｇ５〜Ｇ７）とともに、メモリ６に格納する。
【０１２３】
次に、デコーダ装置３０Ｄについて説明する。図３５は、実施の形態４におけるデコーダ装置３０Ｄの構成を示すブロック図である。デコーダ装置３０Ｄは、シンドローム生成回路３００及び３０３と、シンドローム復号回路３１０及び３１２と、エラー通知信号生成回路３３１と、誤り訂正回路３２０とを有する。
【０１２４】
デコーダ装置３０Ｄのシンドローム生成回路３００は、ＥＣＣデコーダ回路３１のシンドローム生成回路３００（図９参照）と同じであり、８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）から５ビットのシンドロームコード（Ｓ０〜Ｓ４）を生成して出力する回路である。シンドローム生成回路３００は、生成したシンドロームコードをシンドローム復号回路３１０に出力する。
デコーダ装置３０Ｄのシンドローム復号回路３１０は、ＥＣＣデコーダ回路３１（図９参照）のシンドローム復号回路３１０と同じであり、５ビットのシンドロームコード（Ｓ０〜Ｓ４）を復号して、１３ビットの誤りビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と誤り無しフラグ（Ｃｘｘ）を生成して出力する回路である。なお、デコーダ装置３０Ｄのシンドローム復号回路３１０から出力された誤りビット位置フラグ（Ｃ０〜Ｃ７）は、誤り訂正回路３２０に入力されるが、シンドローム復号回路３１０から出力された誤りビット位置フラグ（ＣＥ０〜ＣＥ４）と誤り無しフラグ（Ｃｘｘ）は、誤り訂正回路３２０ではなくエラー通知信号生成回路３３１に入力される。また、デコーダ装置３０Ｄのシンドローム復号回路３１０から出力された誤りビット位置フラグ（Ｃ０〜Ｃ７）は、エラー通知信号生成回路３３１にも入力される。
【０１２５】
デコーダ装置３０Ｄのシンドローム生成回路３０３は、８ビットのリードデータ（Ｄ０〜Ｄ７）と３ビットのチェックビット（Ｇ５〜Ｇ７）から３ビットのシンドロームコード（Ｑ５〜Ｑ７）を生成して出力する回路である。シンドローム生成回路３０３は、生成したシンドロームコードをシンドローム復号回路３１２に出力する。
デコーダ装置３０Ｄのシンドローム復号回路３１２は、３ビットのシンドロームコード（Ｑ５〜Ｑ７）を復号して、７ビットの「誤りビット位置特定補助フラグ」（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）を生成して出力する回路である。シンドローム復号回路３１２は、生成した誤りビット位置特定補助フラグをエラー通知信号生成回路３３１に出力する。
【０１２６】
デコーダ装置３０Ｄの誤り訂正回路３２０は、ＥＣＣデコーダ回路３１の誤り訂正回路３２０（図９参照）と同じである。なお、本実施の形態では、誤り訂正回路３２０は、誤り訂正機能だけが利用され、エラー通知機能は利用されない。このため、誤り訂正回路３２０には、上述の通り、ビット位置フラグ（Ｃ０〜Ｃ７）は入力されるが、誤り無しフラグ（Ｃｘｘ）は入力されない。このように、本実施の形態では、誤り訂正回路３２０の訂正処理部３２０Ａのみが使用され、通知処理部３２０Ｂは使用されない。したがって、本実施の形態において、誤り訂正回路３２０の代わりに、訂正処理部３２０Ａのみを備える回路が用いられてもよい。
【０１２７】
デコーダ装置３０Ｄのエラー通知信号生成回路３３１は、１３ビットのビット位置フラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と、１ビットの誤り無しフラグ（Ｃｘｘ）と、７ビットの誤りビット位置特定補助フラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）から、１ビットエラー通知信号及び２ビットエラー通知信号からなるエラー通知信号を生成して出力する回路である。なお、エラー通知信号生成回路３３１の具体的な回路構成については後述する。
【０１２８】
シンドローム生成回路３００、３０３は、図３６に示す検査行列に従って演算することにより、シンドロームコードを生成する回路である。以下の説明では、シンドローム生成回路３００で用いられる検査行列をＥＣＣ検査部分行列と称し、シンドローム生成回路３０３で用いられる検査行列をチェックビット検査行列と称す。ＥＣＣ検査部分行列及びチェックビット検査行列は、いずれも、所定のＥＣＣ検査行列（以下、ＥＣＣ検査全体行列と称す）の部分行列である。ここで、ＥＣＣ検査全体行列は、ＥＣＣ生成全体行列に単位行列を結合した行列である。ＥＣＣ検査部分行列は、ＥＣＣ検査全体行列のｒ（図３６に示す例ではｒ＝５）行の部分行列であり、チェックビット検査行列は、ＥＣＣ検査全体行列からから上記ｒ行の部分行列を除いたｑ（図３６に示す例ではｑ＝３）行の部分行列である。シンドローム生成回路３００は、このようなＥＣＣ検査部分行列に従って演算することにより、ｒビットのシンドロームコードを生成する。また、シンドローム生成回路３０３は、チェックビット検査行列に従って演算することによりｑビットのシンドロームコードを生成する。
【０１２９】
図３６に示される８行１６列の行列がＥＣＣ検査全体行列であり、上側の５行１６列の行列がシンドローム生成回路３００で用いられるＥＣＣ検査部分行列であり、下側の３行１６列の行列がシンドローム生成回路３０３で用いられるチェックビット検査行列である。
図３６に示すＥＣＣ検査部分行列は、８ビットのリードデータ（Ｄ０〜Ｄ７）と５ビットのＥＣＣ（Ｅ０〜Ｅ４）とから５ビットのシンドロームコード（Ｓ０〜Ｓ４）を生成する行列である。なお、図３６に示すＥＣＣ検査部分行列では、演算に利用されないため全て０の要素からなるチェックビット（Ｇ５〜Ｇ７）に対応する列（斜線が引かれている列）も含んでいる。なお、斜線が引かれていない左側の１３列は、図７に示したＥＣＣ検査行列と同じ内容になっている。
図３６に示すチェックビット検査行列は、８ビットのリードデータ（Ｄ０〜Ｄ７）と３ビットのチェックビット（Ｇ５〜Ｇ７）とから３ビットのシンドロームコード（Ｑ５〜Ｑ７）を生成する行列である。なお、図３６に示すチェックビット検査行列では、演算に利用されないため全て０の要素からなるＥＣＣ（Ｅ０〜Ｅ４）に対応する列（斜線が引かれている列）も含んでいる。
【０１３０】
図３７は、デコーダ装置３０Ｄのシンドローム生成回路３０３及びシンドローム復号回路３１２の具体的な回路構成の一例について示すブロック図である。
図３７に示すように、シンドローム生成回路３０３は、３個の排他的論理和回路３０３ａ〜３０３ｃを用いて構成される。排他的論理和回路３０３ａ〜３０３ｃは５入力ＸＯＲ回路である。排他的論理和回路３０３ａ〜３０３ｃは、それぞれ、図３６に示したチェックビット検査行列に従って、３ビットのシンドロームコード（Ｑ５〜Ｑ７）のうちの１ビットの値を決定する。
【０１３１】
Ｑ５は、排他的論理和回路３０３ａの出力として得られる。具体的には、排他的論理和回路３０３ａはＤ１、Ｄ２、Ｄ４、Ｄ５、Ｇ５の排他的論理和を演算して、演算結果をＱ５として出力する。同様に、Ｑ６は、排他的論理和回路３０３ｂの出力として得られる。Ｑ７は、排他的論理和回路３０３ｃの出力として得られる。シンドローム生成回路３０３から出力されたシンドロームコード（Ｑ５〜Ｑ７）は、シンドローム復号回路３１２に入力される。
【０１３２】
シンドローム復号回路３１２は、図３７に示すように、１個の否定論理和回路３１２ａと、６個のＩＮＶ付き論理積回路３１２ｂ〜３１２ｇとを用いて構成される。否定論理和回路３１２ａは、３入力ＮＯＲ回路である。ＩＮＶ付き論理積回路３１２ｂ〜３１２ｇは、３入力ＩＮＶ付きＡＮＤ回路である。否定論理和回路３１２ａ及びＩＮＶ付き論理積回路３１２ｂ〜３１２ｇは、それぞれ、図３６に示したチェックビット検査行列の各列に現れている３ビットのビットパターン（図３６に示すＱ５〜Ｑ７に対応）と、３ビットのシンドロームコード（Ｑ５〜Ｑ７）のビットパターンとが一致する場合に１を出力する回路である。なお、図３６に示すように、チェックビット検査行列の各列に現れている３ビットのビットパターンは、７種類（０００，１１０，１０１，０１１，１００，０１０，００１）である。誤りビット位置特定補助フラグ（Ａ０〜Ａ３）を出力するための否定論理和回路３１２ａ及びＩＮＶ付き論理積回路３１２ｂ〜３１２ｄについてのシンドローム復号回路３１２のこのような動作は、図３３に示したチェックビット生成行列の各列に現れている３ビットのビットパターンと、３ビットのシンドロームコード（Ｑ５〜Ｑ７）のビットパターンとの一致をチェックしていることに等しい。
【０１３３】
否定論理和回路３１２ａ及びＩＮＶ付き論理積回路３１２ｂ〜３１２ｇのそれぞれの出力は、誤りビット位置特定補助フラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）として出力される。なお、誤りビット位置特定補助フラグの出力パターンとしては、以下の２種類がある。第１の出力パターンは、Ａ０〜Ａ３，ＡＧ５〜ＡＧ７が全て０である出力パターンである。第２の出力パターンは、Ａ０〜Ａ３，ＡＧ５〜ＡＧ７のいずれか１つが１である出力パターンである。
【０１３４】
なお、シンドローム復号回路３１０では、シンドロームコード（Ｓ０〜Ｓ４）の全ビットが０である場合に限って１となるフラグＣｘｘを、Ｃ０〜Ｃ７とは別に出力する。これに対し、シンドローム復号回路３１２では、否定論理和回路３１２ａにより生成される誤りビット位置特定補助フラグ（Ａ０）が、シンドロームコード（Ｑ５〜Ｑ７）の全ビットが０である場合に限って１となるフラグであるため、シンドローム復号回路３１２は、誤りビット位置特定補助フラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）だけを出力する。シンドローム復号回路３１２は、誤りビット位置特定補助フラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）を、エラー通知信号生成回路３３１に出力する。
【０１３５】
デコーダ装置３０Ｄのシンドローム生成回路３００及びシンドローム復号回路３１０は、第１のシンドローム部とも称す。第１のシンドローム部は、メモリ６から読み出されたリードデータ（Ｄ０〜Ｄ７）及びＥＣＣ（Ｅ０〜Ｅ４）から第１のシンドロームコード（Ｓ０〜Ｓ４）を生成する。そして、第１のシンドローム部は、この第１のシンドロームコードがＥＣＣ検査部分行列のいずれかの列のビットパターンと一致しているか否かを示す第１のフラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）と、第１のシンドロームコードの各ビットが全て０であるか否かを示す第２のフラグ（Ｃｘｘ）を生成する。
また、デコーダ装置３０Ｄのシンドローム生成回路３０３及びシンドローム復号回路３１２は、第２のシンドローム部とも称す。第２のシンドローム部は、メモリ６から読み出されたリードデータ（Ｄ０〜Ｄ７）及びチェックビット（Ｇ５〜Ｇ７）から、第２のシンドロームコード（Ｑ５〜Ｑ７）を生成する。そして、第２のシンドローム部は、この第２のシンドロームコードがチェックビット検査行列のいずれかの列のビットパターンと一致しているか否かを示す第３のフラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）を生成する。
【０１３６】
エラー通知信号生成回路３３１は、通知部とも称し、第１のシンドローム部により生成されたフラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４，Ｃｘｘ）と第２のシンドローム部により生成されたフラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）とを比較し、比較結果に基づいて、エラー通知信号を生成する回路である。つまり、エラー通知信号生成回路３３１は、第１のシンドローム部により生成されたフラグと第２のシンドローム部により生成されたフラグの一致性をチェックして、確度（信頼性）を高めた誤りビット位置フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）及び誤りビット位置特定補助フラグ（ＡＧ’５〜ＡＧ’７）を生成する。また、同様に、エラー通知信号生成回路３３１は、誤り無しフラグ（Ｃｘｘ）と誤りビット位置特定補助フラグ（Ａ０）の一致性をチェックして、確度（信頼性）を高めた誤り無しフラグ（Ｃ’ｘｘ）を生成する。
【０１３７】
エラー通知信号生成回路３３１は、図３５に示すように、１７個の論理積回路３３１ａ〜３３１ｑと、１個の論理和回路３３１ｒと、１個の否定論理和回路３３１ｓとを用いて構成される。論理積回路３３１ａ〜３３１ｑは２入力ＡＮＤ回路である。
誤りビット位置特定補助フラグ（Ａ０）は、シンドロームコード（Ｑ５〜Ｑ７）のビットパターンが、図３６に示すチェックビット検査行列におけるＤ０又はＤ７に対応する列のビットパターンと一致する場合に１になるフラグである。また、シンドロームコード（Ｓ０〜Ｓ４）のビットパターンが、図３６に示すＥＣＣ検査部分行列におけるＤ０に対応する列のビットパターンと一致する場合に１になるフラグは誤りビット位置フラグ（Ｃ０）であり、図３６に示すＥＣＣ検査部分行列におけるＤ７に対応する列のビットパターンと一致する場合に１になるフラグは誤りビット位置フラグ（Ｃ７）である。したがって、エラー通知信号生成回路３３１は、Ｃ０とＡ０を比較し、Ｃ７とＡ０を比較する。このため、論理積回路３３１ａにはＣ０とＡ０が入力され、論理積回路３３１ａはＣ’０を出力する。また、論理積回路３３１ｈにはＣ７とＡ０が入力され、論理積回路３３１ｈは、Ｃ’７を出力する。
エラー通知信号生成回路３３１は、他の誤りビット位置フラグについても同様に比較する。すなわち、論理積回路３３１ｂにはＣ１とＡ１が入力され、論理積回路３３１ｂはＣ’１を出力する。論理積回路３３１ｃにはＣ２とＡ２が入力され、論理積回路３３１ｃはＣ’２を出力する。論理積回路３３１ｄにはＣ３とＡ３が入力され、論理積回路３３１ｄはＣ’３を出力する。論理積回路３３１ｅにはＣ４とＡ１が入力され、論理積回路３３１ｅはＣ’４を出力する。論理積回路３３１ｆにはＣ５とＡ２が入力され、論理積回路３３１ｆはＣ’５を出力する。論理積回路３３１ｇにはＣ６とＡ３が入力され、論理積回路３３１ｇはＣ’６を出力する。
【０１３８】
また、誤りビット位置フラグ（ＣＥ０）は、シンドロームコード（Ｓ０〜Ｓ４）のビットパターンが、図３６に示すＥＣＣ検査部分行列におけるＥ０に対応する列のビットパターンと一致する場合に１になるフラグである。ここで、図３６から明らかなように、シンドロームコード（Ｓ０〜Ｓ４）のビットパターンがＥ０に対応する列のビットパターンと一致する場合、シンドロームコード（Ｑ５〜Ｑ７）のビットパターンは（０，０，０）となるはずである。シンドロームコード（Ｑ５〜Ｑ７）のビットパターン（０，０，０）であるか否かはＡ０により判定可能である。したがって、エラー通知信号生成回路３３１は、ＣＥ０とＡ０を比較する。つまり、論理積回路３３１ｉにはＣＥ０とＡ０が入力され、論理積回路３３１ｉはＣＥ’０を出力する。
同様に、論理積回路３３１ｊにはＣＥ１とＡ０が入力され、論理積回路３３１ｊはＣＥ’１を出力する。論理積回路３３１ｋにはＣＥ２とＡ０が入力され、論理積回路３３１ｋはＣＥ’２を出力する。論理積回路３３１ｌにはＣＥ３とＡ０が入力され、論理積回路３３１ｌはＣＥ’３を出力する。論理積回路３３１ｍにはＣＥ４とＡ０が入力され、論理積回路３３１ｍはＣＥ’４を出力する。論理積回路３３１ｎにはＡＧ５とＣｘｘが入力され、論理積回路３３１ｎはＡＧ’５を出力する。論理積回路３３１ｏにはＡＧ６とＣｘｘが入力され、論理積回路３３１ｏはＡＧ’６を出力する。論理積回路３３１ｐにはＡＧ７とＣｘｘが入力され、論理積回路３３１ｐはＡＧ’７を出力する。
【０１３９】
論理積回路３３１ａ〜３３１ｐは、入力された２種類のフラグの値が両方とも１である場合に、１を出力し、それ以外の場合、０を出力する。つまり、上記第１のフラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）、第３のフラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）、第１のシンドロームコード（Ｓ０〜Ｓ４）、第２のシンドロームコード（Ｑ５〜Ｑ７）、ＥＣＣ検査部分行列、及び、チェックビット検査行列により説明すると、エラー通知信号生成回路３３１は以下のようにフラグを生成する。エラー通知信号生成回路３３１は、第１の条件と第２の条件をともに満たす場合に限り、第１のシンドロームコード（Ｓ０〜Ｓ４）がＥＣＣ部分検査行列のｔ列目（ただし、ｔは正整数）のビットパターンと一致していることを示す第５のフラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）を生成する。ここで、第１の条件は、第１のフラグ（Ｃ０〜Ｃ７，ＣＥ０〜ＣＥ４）が、第１のシンドロームコード（Ｓ０〜Ｓ４）がＥＣＣ生成部分行列のｔ列目のビットパターンと一致していることを示すという条件である。第２の条件は、第３のフラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）が、第２のシンドロームコード（Ｑ５〜Ｑ４）がチェックビット検査行列のｔ列目のビットパターンと一致していることを示すという条件である。
【０１４０】
誤りビット位置特定補助フラグ（Ａ０）は、シンドロームコード（Ｑ５〜Ｑ７）のビットパターンが、図３３に示すチェックビット生成行列におけるＤ０又はＤ７に対応する列のビットパターン、すなわち（０，０，０）と一致する場合に１になるフラグである。したがって、論理積回路３３１ｑには、シンドローム復号回路３１０から出力された誤り無しフラグ（Ｃｘｘ）とシンドローム復号回路３１２から出力された誤りビット位置特定補助フラグ（Ａ０）が入力される。そして、論理積回路３３１ｑは、入力された値が両方とも１である場合に、１を出力し、それ以外の場合、０を出力する。つまり、上述の第２のフラグ（Ｃｘｘ）、第３のフラグ（Ａ０〜Ａ３，ＡＧ５〜ＡＧ７）、第１のシンドロームコード（Ｓ０〜Ｓ４）、及び第２のシンドロームコード（Ｑ５〜Ｑ７）により説明すると、エラー通知信号生成回路３３１は以下のようにフラグ（Ｃ’ｘｘ）を生成する。エラー通知信号生成回路３３１は、第２のフラグ（Ｃｘｘ）が、第１のシンドロームコード（Ｓ０〜Ｓ４）の各ビットが全て０であることを示し、かつ、所定の第３のフラグ（Ａ０）が、第２のシンドロームコード（Ｑ５〜Ｑ７）の各ビットが全て０であることを示す場合に限り、第１のシンドロームコード（Ｓ０〜Ｓ４）の各ビットが全て０であることを示す第６のフラグ（Ｃ’ｘｘ）を生成する。
【０１４１】
フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４，ＡＧ’５〜ＡＧ’７）は論理和回路３３１ｒに入力され、フラグ（Ｃ’ｘｘ）は、否定論理和回路３３１ｓに入力される。論理和回路３３１ｒ及び否定論理和回路３３１ｓにより、通知処理部３２０Ｂと同様の回路が構成される。すなわち、論理和回路３３１ｒは、図９の論理和回路３２０ｉに対応しており、否定論理和回路３３１ｓは図９の否定論理和回路３２０ｊに対応している。このような構成により、エラー通知信号生成回路３３１は、誤りビット位置フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）及び誤り無しフラグ（Ｃ’ｘｘ）に基づいて、１ビットエラー通知信号及び２ビットエラー通知信号からなるエラー通知信号を生成する。
【０１４２】
本実施の形態では、デコーダ装置３０Ｄは、シンドローム復号回路３１０の出力とシンドローム復号回路３１２の出力の比較結果に基づいてエラー通知を行う。すなわち、デコーダ装置３０Ｄは、エラー通知信号生成回路３３１により確度が高められた誤りビット位置フラグ（Ｃ’０〜Ｃ’７，ＣＥ’０〜ＣＥ’４）の値及び誤り無しフラグ（Ｃ’ｘｘ）の値に基づいてエラー通知を行う。このエラー通知は、ＥＣＣによる誤り検出結果とチェックビットによる誤り検出結果を統合したエラー通知となっている。したがって、本実施の形態においても、誤りの検出性能を向上させることができる。
【０１４３】
図３８は、実施の形態４にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。また、図３９は、実施の形態４にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。これらの表の見方は、図１０及び図１１と同様である。ただし、実施の形態４では、８ビットのライトデータ（Ｄ０〜Ｄ７）と、５ビットのＥＣＣ（Ｅ０〜Ｅ４）と３ビットのチェックビット（Ｇ５〜Ｇ７）がメモリ６に格納される。このため、図３８及び図３９は、ｋ＝１からｋ＝１６までについて結果を示している。
【０１４４】
図１０及び図３８からわかるように、誤りの検出見逃しの総数は変らないものの、比較例では、ｋ＝４において、５５個の誤りの検出見逃しが発生していたが、実施の形態４では、これが９個となっている。また、比較例では、ｋ＝５及びｋ＝６において合計９６個の誤りの検出見逃しが発生していたが、実施の形態３では、これが７６個となっている。このように、実施の形態４では、ｋの値が比較的小さい場合における見逃し個数を減少させることが可能となる。また、これにともない、図１１及び図３９からわかるように、ｋの値が比較的小さい場合における誤訂正の個数も減少している。
【０１４５】
＜実施の形態の変形例＞
最後に、実施の形態の変形例について説明する。上述の実施の形態ではＥＣＣ（チェックビット）を生成する回路への入力データのビット位置をローテーションしていたが、他の方法が用いられてもよい。例えば、一部のビット位置を入れ替えたデータを用いてチェックビットが生成されてもよい。
【０１４６】
また、エンコーダ装置に適用される２種類のＥＣＣ生成行列の列のビットパターンの組み合わせは、異なっていてもよい。すなわち、一方のＥＣＣ生成行列の各列に現れるビットパターンに含まれない別のビットパターンがＥＣＣとして使用可能である場合には、一方のＥＣＣ生成行列のいずれかの列のビットパターンを、当該別のビットパターンで置き換えることで、他方のＥＣＣ生成行列を構成してもよい。なお、さらに、ビット位置のローテーション又は一部のビット位置の入れ換えを併用することも可能である。
【０１４７】
実施の形態１〜４では、多ビット誤りとして、例えば、いずれかのビットの値が反転する（ビットの値が“０”から“１”になる、または“１”から“０”になる）誤りが想定されるが、他の態様の多ビット誤りの検出が行われてもよい。例えば、データ信号系の処理回路又は入出力端子の故障などによって発生する多ビット誤りでは、複数ビットからなるデータのすべて、または回路の構成に依存した所定のビット幅のデータがStuck-at故障する（ビットの値が“０”または“1”に固着する）ことが想定される。そのような想定の場合であっても、多ビット誤りの検出性能を同様に向上させることができる。
【０１４８】
ところで、たとえば、図３のＥＣＣ生成行列と図７のＥＣＣ検査行列が用いられる場合、データの全ビットが０だとＥＣＣの全ビットも０になる。このため、データとＥＣＣの全ビットがStuck-at故障（０に固着）した多ビット誤りは原理的に見逃してしまう。しかしながら、ＥＣＣのいずれかのビットについては反転値をメモリに格納するようにすれば、その誤りは見逃すことなく検出可能になる。したがって、Stuck-at故障（“０”または“1”に固着）を想定する場合は、ＥＣＣ（とチェックビット）のいずれか特定のビットの値を反転させて用いることによっても、多ビット誤りを見逃す確率（割合）を減らせる可能性がある。すなわち、ＥＣＣ生成行列に従ってデータから生成したＥＣＣのいずれかの特定のビットの値を反転させてメモリに格納すると共に、メモリから読み出したＥＣＣのその特定のビットの値は反転させてからＥＣＣ検査行列に従ってシンドロームを生成することにより、多ビット誤りを見逃す確率（割合）を減らしうる。これは、ＥＣＣデコーダ回路におけるシンドローム生成回路の入力となるリードデータの各ビットの値とＥＣＣ（とチェックビット）の各ビットの値とが独立ではないため、Stuck-at故障（“０”または“1”に固着）による多ビット誤りの組合せの総数が減り、また多ビット誤りの見逃し・誤訂正のケースの個数も減るためである。
【０１４９】
実施の形態１〜４は、例えば、メモリに対する読み書きのためのインタフェース回路におけるデータ信号系の処理回路又は入出力端子（並びに、メモリ内部のデータ入出力回路）の故障によって発生する多ビット誤りの検出性能を上げることが可能である。しかしながら、誤り検出のための上述の構成が他の態様で利用されてもよい。例えば、メモリに対するデータ読み書きのために付加するＥＣＣ（とチェックビット）による処理を行う構成と、ＳＯＣの内部バスのデータ転送のために付加するＥＤＣ（Error Detecting Code）による処理を行う構成とを統合した構成により誤り検出が行われてもよい。
【０１５０】
ところで、メモリに対するデータ読み書きのためにＥＣＣを付加する場合、ＥＣＣデコーダ回路に故障が発生して１ビット誤り訂正・２ビット誤り検出機能が正常に働かなくなることを防ぐために、ハードウェアを二重化する構成が採用されることがある。この構成では、もう１つ追加でＥＣＣデコーダ回路（チェック用）を設け、本来のＥＣＣデコーダ回路の出力信号と追加のＥＣＣデコーダ回路（チェック用）の出力信号が一致していることを比較回路によりチェックする。同様に、ＥＣＣエンコーダ回路についても、同様のハードウェアの二重化の構成が採用されることがある。上述の実施の形態では、追加でＥＣＣデコーダ回路（チェックビット用）とＥＣＣエンコーダ回路（チェックビット用）を設ける構成によって、上述のハードウェア二重化の構成とは異なるものの、ＥＣＣデコーダ回路やＥＣＣエンコーダ回路の故障に対して、ハードウェア二重化と同等の効果が得られることになる。
【０１５１】
なお、以上の説明では、エンコーダ装置及びデコーダ装置が、ハードウェア回路により実装される構成について説明したが、エンコーダ装置の一部若しくは全部、又はデコーダ装置の一部若しくは全部が、命令を含むプログラムがプロセッサにより実行されることによりソフトウェア的に実現されてもよい。
【０１５２】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０１５３】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。例えば、入力データ、ＥＣＣ、チェックビットなどのビット数は一例であり、これらのビット数が、上記の実施の形態で示したビット数以外のビット数であってもよい。
【０１５４】
上記実施の形態の一部または全部は、以下の付記のようにも記載され得るが、以下には限られない。
（付記１）
エンコーダ装置と、
デコーダ装置と
を備え、
前記エンコーダ装置は、
第１のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣ（Error Correction Code）を生成する第１のエンコーダ部と、
前記第１のＥＣＣ生成行列の列を入れ替えた第２のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なＥＣＣを生成する第２のエンコーダ部と
を有し、
前記第１のエンコーダ部には、第１のデータが入力され、前記第１のエンコーダ部は、前記第１のデータに対する第１のＥＣＣを生成し、
前記第２のエンコーダ部には、前記第１のデータのビットを入れ替えた第２のデータが入力され、前記第２のエンコーダ部は、前記第２のデータに対する第２のＥＣＣを生成し、
前記エンコーダ装置は、前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣとをメモリに格納し、
前記デコーダ装置は、前記メモリから読み出された前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣとに基づいて、前記第１のデータの誤りの発生状態について示す通知信号を生成する
データ処理装置。
（付記２）
前記デコーダ装置は、
前記メモリから読み出された前記第１のデータ及び前記第１のＥＣＣからなる第１のビット列が入力され、前記第１のビット列に訂正可能な１ビットの誤りが存在するか否かを示す第１の判定信号と、前記第１のビット列に２ビット以上の誤りが存在するか否かを示す第２の判定信号とを生成する第１のデコーダ部と、
前記メモリから読み出された前記第１のデータを前記第２のデータと同じくビットを入れ替えた第３のデータと、前記メモリから読み出された前記第２のＥＣＣとからなる第２のビット列が入力され、前記第２のビット列に訂正可能な１ビットの誤りが存在するか否かを示す第３の判定信号と、前記第２のビット列に２ビット以上の誤りが存在するか否かを示す第４の判定信号とを生成する第２のデコーダ部と、
前記第１の判定信号と、前記第２の判定信号と、前記第３の判定信号と、前記第４の判定信号とに基づいて、前記通知信号を生成する通知部と、
を有する付記１に記載のデータ処理装置。
（付記３）
前記通知部は、前記第１の判定信号及び前記第３の判定信号のいずれか一方のみが、訂正可能な１ビットの誤りが存在することを示す場合、前記メモリから読み出された前記第１のデータ、前記第１のＥＣＣ、及び前記第２のＥＣＣからなるビット列が２ビット以上の誤りを含むことを示す前記通知信号を生成する
付記２に記載のデータ処理装置。
（付記４）
前記通知部は、前記第２の判定信号又は前記第４の判定信号の少なくとも一方が、２ビット以上の誤りが存在することを示す場合、前記メモリから読み出された前記第１のデータ、前記第１のＥＣＣ、及び前記第２のＥＣＣからなるビット列が２ビット以上の誤りを含むことを示す前記通知信号を生成する
付記２に記載のデータ処理装置。
（付記５）
前記デコーダ装置は、
前記メモリから読み出された前記第１のデータ及び前記第１のＥＣＣから第１のシンドロームコードを生成し、前記第１のシンドロームコードが前記第１のＥＣＣ生成行列及び単位行列からなる第１のＥＣＣ検査行列のいずれかの列のビットパターンと一致しているか否かを示す第１のフラグと、前記第１のシンドロームコードの各ビットが全て０であるか否かを示す第２のフラグを生成する第１のシンドローム部と、
前記メモリから読み出された前記第１のデータを前記第２のデータと同じくビットを入れ替えた第３のデータと前記メモリから読み出された前記第２のＥＣＣから、第２のシンドロームコードを生成し、前記第２のシンドロームコードが前記第２のＥＣＣ生成行列及び単位行列からなる第２のＥＣＣ検査行列のいずれかの列のビットパターンと一致しているか否かを示す第３のフラグと、前記第２のシンドロームコードの各ビットが全て０であるか否かを示す第４のフラグを生成する第２のシンドローム部と、
前記第１のフラグと前記第３のフラグとを比較するとともに、前記第２のフラグと前記第４のフラグとを比較するシンドロームチェック部と
を有し、
前記デコーダ装置は、前記シンドロームチェック部の比較結果に基づいて、前記通知信号を生成する
付記１に記載のデータ処理装置。
（付記６）
前記シンドロームチェック部は、
前記第１のフラグが、前記第１のシンドロームコードが前記第１のＥＣＣ検査行列のｔ列目（ただし、ｔは正整数であり、前記第１のＥＣＣ検査行列に含まれる前記第１のＥＣＣ生成行列のいずれかの列に相当する列番号である）のビットパターンと一致していることを示し、かつ、前記第３のフラグも、前記第２のシンドロームコードが前記第２のＥＣＣ検査行列のｔ列目のビットパターンと一致していることを示す場合に限り、前記第１のシンドロームコードが前記第１のＥＣＣ検査行列のｔ列目のビットパターンと一致していることを示すフラグを第５のフラグとして出力し、
前記第１のフラグが、前記第１のシンドロームコードが前記第１のＥＣＣ検査行列のｓ列目（ただし、ｓは正整数であり、前記第１のＥＣＣ検査行列に含まれる前記単位行列のいずれかの列に相当する列番号である）のビットパターンと一致していることを示す場合、又は、前記第３のフラグが、前記第２のシンドロームコードが前記第２のＥＣＣ検査行列のｓ列目のビットパターンと一致していることを示す場合、前記第１のシンドロームコードが前記第１のＥＣＣ検査行列のｓ列目のビットパターンと一致していることを示すフラグを前記第５のフラグとして出力する
付記５に記載のデータ処理装置。
（付記７）
前記デコーダ装置は、前記第５のフラグに基づいて、前記メモリから読み出された前記第１のデータの１ビットの誤りを訂正する誤り訂正部をさらに有する
付記６に記載のデータ処理装置。
（付記８）
前記シンドロームチェック部は、前記第２のフラグが、前記第１のシンドロームコードの各ビットが全て０であることを示し、かつ、前記第４のフラグが、前記第２のシンドロームコードの各ビットが全て０であることを示す場合に限り、前記第１のシンドロームコードの各ビットが全て０であることを示す第６のフラグを出力し、
前記デコーダ装置は、前記第５のフラグの値及び前記第６のフラグの値に基づいて前記通知信号を生成する通知部をさらに有する
付記６に記載のデータ処理装置。
（付記９）
前記第２のＥＣＣ生成行列は、前記第１のＥＣＣ生成行列の各列をローテーションさせた行列であり、
前記第２のデータは、前記第１のデータの各ビットをローテーションさせたデータである
付記１に記載のデータ処理装置。
（付記１０）
前記第２のＥＣＣ生成行列は、前記第１のＥＣＣ生成行列において、所定の行の値が同じである複数の列を入れ替えた行列であり、
前記エンコーダ装置は、前記第１のデータと、前記第１のエンコーダ部により生成された前記第１のＥＣＣの全ビットと、前記第２のエンコーダ部により生成された前記第２のＥＣＣの一部のビットとを前記メモリに格納し、
前記一部のビットは、前記第２のＥＣＣ生成行列における前記所定の行以外の行を用いた演算により得られるビットであり、
前記デコーダ装置は、前記メモリから読み出された前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣの前記一部のビットとに基づいて、前記通知信号を生成する
付記１に記載のデータ処理装置。
（付記１１）
エンコーダ装置と、
デコーダ装置と
を備え、
前記エンコーダ装置は、
１ビット誤り訂正及び２ビット誤り検出が可能なｐビット（ただし、ｐは正整数）のＥＣＣ（Error Correction Code）を生成するための第１のＥＣＣ生成行列のｑ行（ただし、ｑはｐ未満の正整数）の部分行列に従って演算することによりｑビットのチェックビットを生成するチェックビット生成部と、
前記第１のＥＣＣ生成行列から前記ｑ行の部分行列を除いた部分行列であるｒ行（ただし、ｒ＝ｐ−ｑ）の第２のＥＣＣ生成行列に従って演算することにより、１ビット誤り訂正及び２ビット誤り検出が可能なｒビットのＥＣＣを生成するＥＣＣ生成部と、
を有し、
前記ＥＣＣ生成部には、第１のデータが入力され、前記ＥＣＣ生成部は、前記第１のデータに対する前記ＥＣＣを生成し、
前記チェックビット生成部には、前記第１のデータが入力され、前記チェックビット生成部は、前記第１のデータに対する前記チェックビットを生成し、
前記エンコーダ装置は、前記第１のデータと、前記ＥＣＣと、前記チェックビットとをメモリに格納し、
前記デコーダ装置は、
前記メモリから読み出された前記第１のデータ及び前記ＥＣＣから第１のシンドロームコードを生成し、前記第１のシンドロームコードが前記第１のＥＣＣ生成行列及び単位行列からなるＥＣＣ検査行列におけるｒ行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第１のフラグと、前記第１のシンドロームコードの各ビットが全て０であるか否かを示す第２のフラグを生成する第１のシンドローム部と、
前記メモリから読み出された前記第１のデータ及び前記チェックビットから第２のシンドロームコードを生成し、前記第２のシンドロームコードが前記第１のＥＣＣ生成行列及び単位行列からなるＥＣＣ検査行列におけるｑ行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第３のフラグを生成する第２のシンドローム部と、
前記第１のシンドローム部により生成されたフラグと前記第２のシンドローム部により生成されたフラグとを比較し、比較結果に基づいて、前記第１のデータの誤りの発生状態について示す通知信号を生成する通知部と
を有する
データ処理装置。
（付記１２）
第１のＥＣＣ生成行列に従って演算することにより、第１のデータに対し、１ビット誤り訂正及び２ビット誤り検出が可能な第１のＥＣＣ（Error Correction Code）を生成し、
前記第１のＥＣＣ生成行列の列を入れ替えた第２のＥＣＣ生成行列に従って演算することにより、前記第１のデータのビットを入れ替えた第２のデータに対し、１ビット誤り訂正及び２ビット誤り検出が可能な第２のＥＣＣを生成し、
前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣとをメモリに格納し、
前記メモリから読み出された前記第１のデータと、前記第１のＥＣＣと、前記第２のＥＣＣとに基づいて、前記第１のデータの誤りの発生状態について示す通知信号を生成する
データ処理方法。
（付記１３）
１ビット誤り訂正及び２ビット誤り検出が可能なｐビット（ただし、ｐは正整数）のＥＣＣ（Error Correction Code）を生成するための第１のＥＣＣ生成行列のｑ行（ただし、ｑはｐ未満の正整数）の部分行列に従って演算することにより、第１のデータに対するｑビットのチェックビットを生成し、
前記第１のＥＣＣ生成行列から前記ｑ行の部分行列を除いた部分行列であるｒ行（ただし、ｒ＝ｐ−ｑ）の第２のＥＣＣ生成行列に従って演算することにより、前記第１のデータに対し、１ビット誤り訂正及び２ビット誤り検出が可能なｒビットのＥＣＣを生成し、
前記第１のデータと、前記ＥＣＣと、前記チェックビットとをメモリに格納し、
前記メモリから読み出された前記第１のデータ及び前記ＥＣＣから第１のシンドロームコードを生成し、前記第１のシンドロームコードが前記第１のＥＣＣ生成行列及び単位行列からなるＥＣＣ検査行列におけるｒ行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第１のフラグと、前記第１のシンドロームコードの各ビットが全て０であるか否かを示す第２のフラグを生成し、
前記メモリから読み出された前記第１のデータ及び前記チェックビットから第２のシンドロームコードを生成し、前記第２のシンドロームコードが前記第１のＥＣＣ生成行列及び単位行列からなるＥＣＣ検査行列におけるｑ行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第３のフラグを生成し、
前記第１のシンドロームコードに基づいて生成されたフラグと第２のシンドロームコードに基づいて生成されたフラグとを比較し、
前記比較の結果に基づいて、前記第１のデータの誤りの発生状態について示す通知信号を生成する
データ処理方法。
【符号の説明】
【０１５５】
１    データ処理装置
２、２０、２０Ａ、２０Ｂ、２０Ｃ、９０    エンコーダ装置
３、３０、３０Ａ、３０Ｂ、３０Ｃ、３０Ｄ、９１    デコーダ装置
４、５    エンコーダ部
６    メモリ
１０    入出力インタフェース
２１、２２、２３    ＥＣＣエンコーダ回路
２４    チェックビット生成回路
３１、３２、３４    ＥＣＣデコーダ回路
３３    エラー通知チェック回路
２００、２０１    ＥＣＣ生成回路
３００、３０１、３０２、３０３    シンドローム生成回路
３１０、３１１、３１２    シンドローム復号回路
３２０、３２１    誤り訂正回路
３２０Ａ、３２１Ａ    訂正処理部
３２０Ｂ、３２１Ｂ    通知処理部
３３０    シンドロームチェック回路
３３１    エラー通知信号生成回路
【図１】
2019109806.tif 000003
【図２】
2019109806.tif 000004
【図３】
2019109806.tif 000005
【図４】
2019109806.tif 000006
【図５】
2019109806.tif 000007
【図６】
2019109806.tif 000008
【図７】
2019109806.tif 000009
【図８】
2019109806.tif 000010
【図９】
2019109806.tif 000011
【図１０】
2019109806.tif 000012
【図１１】
2019109806.tif 000013
【図１２】
2019109806.tif 000014
【図１３】
2019109806.tif 000015
【図１４】
2019109806.tif 000016
【図１５】
2019109806.tif 000017
【図１６】
2019109806.tif 000018
【図１７】
2019109806.tif 000019
【図１８】
2019109806.tif 000020
【図１９】
2019109806.tif 000021
【図２０Ａ】
2019109806.tif 000022
【図２０Ｂ】
2019109806.tif 000023
【図２１】
2019109806.tif 000024
【図２２】
2019109806.tif 000025
【図２３】
2019109806.tif 000026
【図２４】
2019109806.tif 000027
【図２５】
2019109806.tif 000028
【図２６】
2019109806.tif 000029
【図２７】
2019109806.tif 000030
【図２８】
2019109806.tif 000031
【図２９】
2019109806.tif 000032
【図３０】
2019109806.tif 000033
【図３１】
2019109806.tif 000034
【図３２】
2019109806.tif 000035
【図３３】
2019109806.tif 000036
【図３４】
2019109806.tif 000037
【図３５】
2019109806.tif 000038
【図３６】
2019109806.tif 000039
【図３７】
2019109806.tif 000040
【図３８】
2019109806.tif 000041
【図３９】
2019109806.tif 000042