JP2019109806A - データ処理装置及びデータ処理方法 - Google Patents

データ処理装置及びデータ処理方法 Download PDF

Info

Publication number
JP2019109806A
JP2019109806A JP2017243558A JP2017243558A JP2019109806A JP 2019109806 A JP2019109806 A JP 2019109806A JP 2017243558 A JP2017243558 A JP 2017243558A JP 2017243558 A JP2017243558 A JP 2017243558A JP 2019109806 A JP2019109806 A JP 2019109806A
Authority
JP
Japan
Prior art keywords
ecc
bit
circuit
data
error
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2017243558A
Other languages
English (en)
Inventor
幸利 坪井
Yukitoshi Tsuboi
幸利 坪井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2017243558A priority Critical patent/JP2019109806A/ja
Priority to US16/175,567 priority patent/US10735028B2/en
Priority to EP18206176.2A priority patent/EP3503411B1/en
Priority to TW107144264A priority patent/TW201929442A/zh
Priority to CN201811557353.6A priority patent/CN109947674A/zh
Publication of JP2019109806A publication Critical patent/JP2019109806A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2906Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/19Single error correction without using particular properties of the cyclic codes, e.g. Hamming codes, extended or generalised Hamming codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3738Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with judging correct decoding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/615Use of computational or mathematical techniques
    • H03M13/616Matrix operations, especially for generator matrices or check matrices, e.g. column or row permutations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6575Implementations based on combinatorial logic, e.g. Boolean circuits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2957Turbo codes and decoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • Detection And Correction Of Errors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Error Detection And Correction (AREA)

Abstract

【課題】ECCを用いたデータの誤り検出において、検出性能を向上させる。【解決手段】データ処理装置1は、第1のECC生成行列に従って演算することによりECCを生成するエンコーダ部4と、前記第1のECC生成行列の列を入れ替えた第2のECC生成行列に従って演算することによりECCを生成するエンコーダ部5とを有するエンコーダ装置2を備える。エンコーダ部4は、第1のデータに対する第1のECCを生成する。エンコーダ部5は、前記第1のデータのビットを入れ替えた第2のデータに対する第2のECCを生成する。【選択図】図1

Description

本発明はデータ処理装置及びデータ処理方法に関し、特に、データの誤りを検出するデータ処理装置及びデータ処理方法に関する。
1ビット誤り訂正・2ビット誤り検出(いわゆるSEC-DED(Single Error Correction - Double Error Detection))機能を持つECC(誤り訂正符号:Error Correction Code)の特性として、4ビット以上の偶数ビット誤りの全てを検出できる訳ではないこと、及び、3ビット以上の奇数ビット誤りを1ビット誤りと誤認識して正常なビットを誤訂正してしまうケースがあることが知られている(非特許文献1)。
これに対し、特許文献1は、1ビット誤り訂正・2ビット誤り検出が可能なECCを用いた誤り検出回路において、比較的高い割合で多ビット(3ビット以上)の誤り検出を実現する技術について開示している。この誤り検出回路では、ECCと、データの各ビットに現れる「1」のカウント数とを用いることにより、ECCを用いたチェックだけではデータ誤りの検出が上手く行えないケースにおいても、適切に誤りを検出できるようにしている。
特開2005−4288号公報
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.
しかしながら、特許文献1の技術では、データに含まれる「1」の個数をカウントするカウンタ回路を設ける必要があり、カウント処理に複数クロックの期間を要する。このため、メモリに対する読み書きに時間がかかる、あるいは、クロック周波数を上げる必要が生じる。したがって、ECCを用いたデータの誤り検出において、検出性能を向上させる新規な手法が求められている。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
一実施の形態によれば、データ処理装置は、第1のECC生成行列に従って演算することによりECCを生成する第1のエンコーダ部と、前記第1のECC生成行列の列を入れ替えた第2のECC生成行列に従って演算することによりECCを生成する第2のエンコーダ部とを有するエンコーダ装置を備える。また、前記第1のエンコーダ部は、前記第1のデータに対する第1のECCを生成する。前記第2のエンコーダ部は、前記第1のデータのビットを入れ替えた第2のデータに対する第2のECCを生成する。
前記一実施の形態によれば、ECCを用いたデータの誤り検出において、検出性能を向上させることができる。
実施の形態の概要にかかるデータ処理装置1の構成の一例を示すブロック図である。 比較例にかかるエンコーダ装置90を示すブロック図である。 ECCエンコーダ回路21に用いられるECC生成行列を示す図である。 図3に示すECC生成行列によって行われる演算を示した式である。 ECCエンコーダ回路21の具体的な回路構成の一例について示すブロック図である。 比較例にかかるデコーダ装置91を示すブロック図である。 ECCデコーダ回路31に用いられるECC検査行列を示す図である。 図7に示すECC検査行列によって行われる演算を示した式である。 ECCデコーダ回路31の具体的な回路構成の一例について示すブロック図である。 比較例にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。 比較例にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。 実施の形態にかかるデータ処理装置の一例を示すブロック図である。 エンコーダ装置20を示すブロック図である。 ECCエンコーダ回路22に用いられるECC生成行列を示す図である。 ECCエンコーダ回路22の具体的な回路構成の一例について示すブロック図である。 デコーダ装置30を示すブロック図である。 デコーダ装置30のECCデコーダ回路31に用いられるECC検査行列を示す図である。 デコーダ装置30のECCデコーダ回路32に用いられるECC検査行列を示す図である。 ECCデコーダ回路32の具体的な回路構成の一例について示すブロック図である。 64ビットの入力データから8ビットのECCを生成するECC生成行列の一例を示す図である。 64ビットの入力データから8ビットのECCを生成するECC生成行列の一例を示す図である。 デコーダ装置30Aの構成を示すブロック図である。 実施の形態2にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。 実施の形態2にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。 エンコーダ装置20Aを示すブロック図である。 ECCエンコーダ回路23で用いられるECC生成行列の一例を示す図である。 デコーダ装置30Bを示すブロック図である。 デコーダ装置30BのECCデコーダ回路31に用いられるECC検査行列を示す図である。 デコーダ装置30BのECCデコーダ回路34に用いられるECC検査行列を示す図である。 デコーダ装置30Cを示すブロック図である。 実施の形態3の変形例にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。 実施の形態3の変形例にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。 エンコーダ装置20Bを示すブロック図である。 ECC生成全体行列、ECC生成部分行列、及びチェックビット生成行列の一例を示すものである。 チェックビット生成回路24の具体的な回路構成の一例について示すブロック図である。 デコーダ装置30Dの構成を示すブロック図である。 ECC検査全体行列、ECC検査部分行列、及びチェックビット検査行列の一例を示すものである。 デコーダ装置30Dのシンドローム生成回路303及びシンドローム復号回路312の具体的な回路構成の一例について示すブロック図である。 実施の形態4にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。 実施の形態4にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
<実施の形態の概要>
まず、実施の形態の詳細な説明に先立って、実施の形態の概要について説明する。図1は、実施の形態の概要にかかるデータ処理装置1の構成の一例を示すブロック図である。データ処理装置1は、エンコーダ装置2とデコーダ装置3とを備えている。
エンコーダ装置2は、エンコーダ部4と、エンコーダ部5とを有し、第1のデータが入力される。そして、エンコーダ部4には、第1のデータが入力され、エンコーダ部5には、第2のデータが入力される。ここで、第1のデータは、メモリ6に格納する対象のデータである。第2のデータは、第1のデータのビットを入れ替えたデータである。例えば、第2のデータは、第1のデータの各ビットを所定の方向に所定段数だけローテーションしたデータであってもよいし、第1のデータの所定の複数のビットを相互に入れ替えたデータであってもよい。
エンコーダ部4は、第1のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECC(すなわち、SEC−DED符号)を生成する。また、エンコーダ部5は、第1のECC生成行列の列を入れ替えた第2のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECC(すなわち、SEC−DED符号)を生成する。なお、第2のデータにおける上述の入れ替えと、第2のECC生成行列における上述の入れ替えとは、対応している。すなわち、第1のデータから第2のデータを導出するためのビットの入れ替えにおける入れ替え元のビット位置は、第1のECC生成行列から第2のECC生成行列を導出するための列の入れ替えにおける入れ替え元の列番号と対応している。また、第2のデータを導出するためのビットの入れ替えにおける入れ替え先のビット位置は、第2のECC生成行列を導出するための列の入れ替えにおける入れ替え先の列番号と対応している。
エンコーダ部4は、第1のデータに対する第1のECCを生成する。また、エンコーダ部5は、第2のデータに対する第2のECCを生成する。そして、エンコーダ装置2は、記憶対象のデータである第1のデータと、第1のデータから生成された第1のECCと、第2のデータから生成された第2のECCとをメモリ6に格納する。
また、デコーダ装置3は、メモリ6から読み出された第1のデータと、第1のECCと、第2のECCとに基づいて、第1のデータの誤りの発生状態について示す通知信号を生成する。
データ処理装置1では、上述のような異なる2つのECCが生成される。見過ごされてしまう誤りの発生パターンは、ECC生成行列に依存する。より詳細には、第1のECCを用いた検出処理では見過ごされてしまう誤りの発生パターンであっても、第1のECCとは異なる第2のECCを用いた検出処理では誤りが発見されうる。実施の形態では、この点に着目し、異なるECC生成行列から生成された第1のECCと第2のECCを用いる。これにより、データ処理装置1によれば、第1のECCのみによるデータの誤り検出に比べ、検出性能を向上させることができる。
<比較例>
次に、実施の形態の詳細について理解を容易にするために比較例について説明する。図2は、比較例にかかるエンコーダ装置90を示すブロック図である。エンコーダ装置90は、一例として、8ビットの入力データ(D0〜D7)から5ビットのECC(E0〜E4)を生成する。そして、エンコーダ装置90は、ライトデータとして入力データ(D0〜D7)を出力するとともに、生成したECCを出力する。さらに、エンコーダ装置90は、ECCエンコーダ回路21を有しており、ECCエンコーダ回路21によりECCを生成する。
ECCエンコーダ回路21は、例えば、図3に示すECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECCを生成する回路である。図3に示すECC生成行列は、ライトデータとしてメモリに書き込まれる8ビットの入力データ(D0〜D7)から、5ビットのECC(E0〜E4)を生成するECC生成行列である。図3に示すECC生成行列は、各列のビットパターンが相互に異なっており、各列が奇数個の1を含んでいる。このため、図3に示すECC生成行列は、1ビット誤り訂正及び2ビット誤り検出が可能なECCを生成するための行列である。なお、ECC生成行列の各列は入力データの各ビットに対応し、また各行は生成するECCの各ビットに対応する。
具体的には、ECCエンコーダ回路21は、図4に示される演算を行う。図4は、図3に示すECC生成行列によって行われる演算を示した式である。すなわち、ECCエンコーダ回路21は、入力データにECC生成行列を乗ずることによりECCを生成する。言い換えると、ECCエンコーダ回路21は、ECC生成行列により特定されるビット位置の組み合わせについて、入力データのビット値の排他的論理和(XOR:eXclusive OR)演算を行うことでECCを生成する。例えば、ECC生成行列の1行目により特定されるビット位置の組み合わせは、(D0,D1,D2,D3,D4)であり、ECCエンコーダ回路21は、これらの排他的論理和を行うことにより、E0を算出する。
図5は、ECCエンコーダ回路21の具体的な回路構成の一例について示すブロック図である。ECCエンコーダ回路21は、上述の通り、図3に示すECC生成行列に従った排他的論理和演算を行うことにより、8ビットの入力データ(D0〜D7)から、5ビットのECC(E0〜E4)を生成する回路である。ECCエンコーダ回路21は、ECC生成回路200を含み、ECC生成回路200によりECCを生成する。図5に示すように、ECC生成回路200は、5個の排他的論理和回路200a〜200eを用いて構成される。排他的論理和回路200a〜200dは5入力XOR回路であり、排他的論理和回路200eは4入力XOR回路である。排他的論理和回路200a〜200eは、それぞれ、図4に示した演算式に対応しており、5ビットのECC(E0〜E4)のうちの1ビットの値を決定する。
E0は、排他的論理和回路200aの出力として得られる。具体的には、排他的論理和回路200aはD0、D1、D2、D3、D4の排他的論理和を演算して、演算結果をE0として出力する。同様に、E1は、排他的論理和回路200bの出力として得られる。E2は、排他的論理和回路200cの出力として得られる。E3は、排他的論理和回路200dの出力として得られる。E4は、排他的論理和回路200eの出力として得られる。ECCエンコーダ回路21から出力されたデータ(D0〜D7)とECC(E0〜E4)は、メモリに記憶される。
図6は、比較例にかかるデコーダ装置91を示すブロック図である。メモリから読み出されたデータ(D0〜D7)は、同じくメモリから読み出されたECC(E0〜E4)とともにデコーダ装置91のECCデコーダ回路31に入力される。ECCデコーダ回路31は、入力されたリードデータ(D0〜D7)及びECC(E0〜E4)に基づいて、リードデータ(D0〜D7)及びECC(E0〜E4)の誤りの有無を判定し、エラー通知信号を出力する。また、デコーダ装置91のECCデコーダ回路31は、リードデータに1ビットの誤りが含まれていることを検出した場合、1ビットの誤りを訂正したデータを出力データ(D’0〜D’7)として出力する。なお、ECCデコーダ回路31は、それ以外の場合、入力されたリードデータを出力データ(D’0〜D’7)として出力する。
ECCデコーダ回路31は、誤りの有無に応じたエラー通知信号を出力する。具体的には、ECCデコーダ回路31は、リードデータ及びECCからなるビット列に1ビットの誤りが含まれていたか否かを示す「1ビットエラー通知信号」と、このビット列に2ビット以上の誤りが含まれていたか否かを示す「2ビットエラー通知信号」とを出力する。なお、1ビットエラー通知信号が1であり、2ビットエラー通知信号が0である場合、ECCデコーダ回路31は、ビット列に1ビットの誤りがあり、かつ、リードデータについての誤りを訂正したデータを出力データ(D’0〜D’7)として出力することを通知する。また、1ビットエラー通知信号が0であり、2ビットエラー通知信号が1である場合、ECCデコーダ回路31は、誤りを含む可能性があるデータを出力データ(D’0〜D’7)として出力することを通知する。さらに、1ビットエラー通知信号が0であり、2ビットエラー通知信号も0である場合、ECCデコーダ回路31は、誤りがないリードデータを、出力データ(D’0〜D’7)として出力することを通知する。
ECCデコーダ回路31は、例えば、図7に示すECC検査行列に従って演算することにより、シンドロームコードを生成し、生成したシンドロームコードに基づいて、エラー通知信号の生成及び誤り訂正を行う回路である。図7に示すECC検査行列は、メモリから読み出した8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)から、5ビットのシンドロームコード(S0〜S4)を生成するECC検査行列である。ECC検査行列は、ECC生成行列に単位行列を結合した行列である。なお、ECC検査行列の各列は入力データ(リードデータ及びECC)の各ビットに対応し、また各行は生成するシンドロームコードの各ビットに対応する。
具体的には、ECCデコーダ回路31は、図8に示される演算を行う。図8は、図7に示すECC検査行列によって行われる演算を示した式である。すなわち、ECCデコーダ回路31は、入力データ(リードデータ及びECC)にECC検査行列を乗ずることによりシンドロームコードを生成する。言い換えると、ECCデコーダ回路31は、ECC検査行列により特定されるビット位置の組み合わせについて、入力データのビット値の排他的論理和(XOR)演算を行うことでシンドロームコードを生成する。例えば、ECC検査行列の1行目により特定されるビット位置の組み合わせは、(D0,D1,D2,D3,D4,E0)であり、ECCデコーダ回路31は、これらの排他的論理和を行うことにより、S0を算出する。
図9は、ECCデコーダ回路31の具体的な回路構成の一例について示すブロック図である。ECCデコーダ回路31は、シンドローム生成回路300と、シンドローム復号回路310と、誤り訂正回路320とを有する。
シンドローム生成回路300は、8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)から5ビットのシンドロームコード(S0〜S4)を生成して出力する回路である。図9に示すように、シンドローム生成回路300は、5個の排他的論理和回路300a〜300eを用いて構成される。排他的論理和回路300a〜300dは6入力XOR回路であり、排他的論理和回路300eは5入力XOR回路である。排他的論理和回路300a〜300eは、それぞれ、図8に示した演算式に対応しており、5ビットのシンドロームコード(S0〜S4)のうちの1ビットの値を決定する。
S0は、排他的論理和回路300aの出力として得られる。具体的には、排他的論理和回路300aはD0、D1、D2、D3、D4、E0の排他的論理和を演算して、演算結果をS0として出力する。同様に、S1は、排他的論理和回路300bの出力として得られる。S2は、排他的論理和回路300cの出力として得られる。S3は、排他的論理和回路300dの出力として得られる。S4は、排他的論理和回路300eの出力として得られる。シンドローム生成回路300から出力されたシンドロームコード(S0〜S4)は、シンドローム復号回路310に入力される。
シンドローム復号回路310は、5ビットのシンドロームコード(S0〜S4)を復号して13ビットの「誤りビット位置フラグ」(C0〜C7,CE0〜CE4)と1ビットの「誤り無しフラグ」(Cxx)を生成して出力する回路である。図9に示すように、シンドローム復号回路310は、13個のINV(インバータ)付き論理積回路310a〜310mと、1個の否定論理和回路310nとを用いて構成される。
INV付き論理積回路310a〜310mは、5入力INV付きAND回路である。INV付き論理積回路310a〜310mは、それぞれ、図7に示したECC検査行列の各列(具体的には、図7に示すD0〜D7及びE0〜E4の13列)に現れている5ビットのビットパターン(図7に示すS0〜S4に対応)と、5ビットのシンドロームコード(S0〜S4)のビットパターンとが一致する場合に1を出力する回路である。誤りビット位置フラグ(C0〜C7)を出力するためのINV付き論理積回路310a〜310hについてのシンドローム復号回路310のこのような動作は、図3に示したECC生成行列の各列(具体的には、図3に示すD0〜D7の8列)に現れている5ビットのビットパターン(図3に示すE0〜E4に対応)と、5ビットのシンドロームコード(S0〜S4)のビットパターンとの一致をチェックしていることに等しい。シンドロームコードのビットパターンが、ECC検査行列のいずれかの列(具体的には、図7に示すD0〜D7及びE0〜E4の13列)のビットパターンと一致する場合は、その列に対応したビット位置(D0〜D7,E0〜E4のいずれかのビット)に1ビット誤りが発生していると判定される。INV付き論理積回路310a〜310hのそれぞれの出力は、誤りビット位置フラグ(C0〜C7)として出力される。INV付き論理積回路310i〜310mのそれぞれの出力は、誤りビット位置フラグ(CE0〜CE4)として出力される。誤りビット位置フラグ(C0〜C7)は、リードデータ(D0〜D7)に発生した1ビットの誤りの位置を示すフラグであり、誤りビット位置フラグ(CE0〜CE4)は、ECC(E0〜E4)に発生した1ビットの誤りの位置を示すフラグである。
なお、誤りビット位置フラグの出力パターンとしては、以下の2種類がある。
第1の出力パターンは、C0〜C7,CE0〜CE4が全て0である出力パターンである。これは、誤りが検出されない場合、及び、2ビット以上の誤りが検出される場合の出力パターンである。
第2の出力パターンは、C0〜C7,CE0〜CE4のいずれか1つが1である出力パターンである。これは、1ビットの誤りが検出される場合の出力パターンである。
図7に示すECC検査行列の第1列を見ると、そのビットパターンは(11100)である。シンドローム復号回路310では、これに対応するように、誤りビット位置フラグC0を生成するINV付き論理積回路310aが設けられている。具体的には、INV付き論理積回路310aの入力ポートのうち、3個のINV無し入力ポートにはシンドロームコードのS0,S1,S2が接続され、2個のINV付き入力ポートにはシンドロームコードのS3,S4が接続されている。INV付き論理積回路310b〜310mについても同様に接続されている。
否定論理和回路310nは、5入力NOR回路である。否定論理和回路310nは、5ビットのシンドロームコード(S0〜S4)の全ビットの値が0である場合に、1を出力する回路である。シンドロームコード(S0〜S4)の全ビットの値が0である場合、ビット誤りが発生していないと判定される。否定論理和回路310nの出力は、誤り無しフラグ(Cxx)として出力される。なお、誤り無しフラグの出力パターンとしては、以下の2種類がある。
第1の出力パターンは、Cxxが1である出力パターンである。これは、上述の通り、誤りが検出されない場合の出力パターンである。
第2の出力パターンは、Cxxが0である出力パターンである。これは、1ビット以上の誤りが検出される場合の出力パターンである。
このように、SEC−DED符号では、シンドロームコードのビットパターンがECC生成行列のいずれかのビットパターンと一致していることを検出することで、1ビットの誤りの検出が可能となる。また、シンドロームコードのビットパターンがECC生成行列のいずれのビットパターンとも一致せず、かつ、全て0でないことを検出することで、2ビット以上の誤りの検出が可能となる。
誤り訂正回路320は、リードデータの1ビット誤りが検出された場合に、その誤りを訂正する回路を構成する訂正処理部320Aと、エラー通知信号を生成する回路を構成する通知処理部320Bとを有する。
訂正処理部320Aは、8ビットのリードデータ(D0〜D7)及び8ビットの誤りビット位置フラグ(C0〜C7)に基づいて誤り訂正を行い、8ビットの出力データ(D’0〜D’7)を出力する。なお、誤り訂正を行った場合には、出力データ(D’0〜D’7)は訂正済みのデータであり、誤り訂正が行われなかった場合には、出力データ(D’0〜D’7)はリードデータ(D0〜D7)と同じである。図9に示すように、訂正処理部320Aは、8個の排他的論理和回路320a〜320hを用いて構成される。排他的論理和回路320a〜320hは2入力XOR回路である。排他的論理和回路320a〜320hのそれぞれは、誤りビット位置フラグと、誤りビット位置フラグと対応するリードデータのビットとの排他的論理和演算を行うことにより、1ビットの誤りを訂正する。すなわち、訂正処理部320Aは、8ビットの誤りビット位置フラグ(C0〜C7)のいずれか1つのフラグが1である場合に、リードデータ(D0〜D7)の対応するビット位置(D0〜D7のいずれかのビット)の値を反転させることで1ビット誤り訂正を行う回路である。
通知処理部320Bは、13ビットの誤りビット位置フラグ(C0〜C7,CE0〜CE4)及び1ビットの誤り無しフラグ(Cxx)に基づいて、エラー通知信号として、「1ビットエラー通知信号」及び「2ビットエラー通知信号」を出力する。図9に示すように、通知処理部320Bは、1個の論理和回路320iと、1個の否定論理和回路320jとを用いて構成される。論理和回路320iは13入力OR回路であり、13ビットのビット位置フラグ(C0〜C7,CE0〜CE4)が入力される。また、否定論理和回路320jは2入力NOR回路であり、論理和回路320iの出力と、誤り無しフラグ(Cxx)が入力される。
論理和回路320iは、入力された13ビットのビット位置フラグ(C0〜C7,CE0〜CE4)のいずれか1つのフラグが1である場合に、1ビットエラー通知信号として1を出力する。また、否定論理和回路320jは、論理和回路320iの出力及び誤り無しフラグ(Cxx)がいずれも0である場合に、2ビットエラー通知信号として1を出力する。通知処理部320Bによるエラー通知信号の出力パターンとしては、以下の3種類がある。
第1の出力パターンは、1ビットエラー通知信号及び2ビットエラー通知信号がいずれも0である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ(D0〜D7)、つまり出力データ(D’0〜D’7)が誤りを含まないことを示す。
第2の出力パターンは、1ビットエラー通知信号が1であり、2ビットエラー通知信号が0である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ及びECCからなるビット列が1ビットの誤りを含むこと及び出力データ(D’0〜D’7)は誤りを含まないデータであることを示す。
第3の出力パターンは、1ビットエラー通知信号が0であり、2ビットエラー通知信号が1である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ及びECCからなるビット列が2ビット以上の誤りを含むこと及び出力データ(D’0〜D’7)はこの誤りを含んでいる可能性があるデータであることを示す。
図10は、比較例にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。具体的には、図10は、リードデータ(D0〜D7)とECC(E0〜E4)の合計13ビットのデータにビット誤りが発生している場合に、そのビット誤りを検出できず見逃す(ビット誤り無しと誤判定する)ケースの個数をシミュレーションにより検証した結果を示す表である。ここで、ビット誤りとは、いずれかのビットの値が反転する(ビットの値が0から1になる、または1から0になる)誤りのことをいう。この表において、nは全ビットの個数(すなわち、n=13)、kは誤りが発生したビットの個数(k=0,1,・・・,13)、C(n,k)はn個のうちk個のビットに誤りが発生する組合せの総数であり、W(k)がkビット誤りのうち検出できず見逃すケースの個数、Pkがkビット誤りに対する検出見逃し確率である。
ECCを用いた誤り検出では、原理的に奇数ビット誤りは100%検出可能である。また、ビット誤り無し(k=0)の場合と2ビット誤り(k=2)の場合も、原理的にそれらのビット誤りを100%検出可能であるため、この表の検出見逃し個数のW(0)とW(2)は0個になっている。一方、4ビット誤り(k=4)の検出見逃し個数W(4)が55個である等、4ビット以上の偶数ビット誤りの場合にはある程度の確率(割合)で誤りを検出できず見逃すことが、この表から分かる。
図11は、比較例にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケース(多ビット誤りが発生しているのにも関わらず1ビット誤りと誤検出し、どこかの正常なビットを誤訂正してしまうケース)の個数をまとめた表である。具体的には、図11は、リードデータ(D0〜D7)とECC(E0〜E4)の合計13ビットのデータにビット誤りが発生した場合に誤訂正するケースの個数を、図10に示す結果から求め、それらをまとめた表である。図11の表において、X(k)はkビット誤りが発生している際に誤訂正が発生するケースの個数、Qkはkビット誤りに対する誤訂正確率である。
ECCを用いた誤り検出では原理的に奇数ビット誤りを100%検出可能、すなわち検出できず見逃すことはないが、このような誤訂正は起こり得る。図10に示したように、偶数ビット誤りの見逃しがあることから、例えば、次のような誤訂正が発生する。検出見逃し個数W(4)が55個である4ビット誤り(k=4)を見逃すケースを例に考える。ここで、13ビットのデータのb1番目のビットとb2番目のビットとb3番目のビットとb4番目のビットの合計4ビットに同時に誤りが発生した場合に、誤りが発生していないと判断されるものとする。なお、b1、b2、b3、b4の値は、ECC生成行列の各列をどのように設定するかによって必然的に定まる値である。
この場合、あるデータにおいて、b1、b2、b3、b4のうち、いずれか3つのビット位置のビットのみに誤りがあるとき、残りの1つのビット位置のビットのみに誤りが発生していると誤判定されてしまう。例えば、b1番目のビット、b2番目のビット、及びb3番目のビットに誤りがあり、b4番目のビットを含む残りの10ビットに誤りがない場合、b4番目のビットのみに誤りが発生していると誤判定されてしまう。すなわち、1ビット誤りが発生していると誤判定され、誤りがあると判定された1ビット(上記例ではb4番目のビット)について訂正が行われてしまう。つまり、正常なビットに対する誤訂正が生じてしまう。このとき、残りの3ビットに誤りが発生していることは見逃していることになる。これにより、3ビット誤り(k=3)に対する誤訂正個数X(3)はW(4)の4倍の個数、すなわち220個になる。
また、検出を見逃す4ビット誤り(k=4)に対して、更に1ビットの誤りが発生しているケースを考える。つまり、13ビットのデータのb1番目のビットとb2番目のビットとb3番目のビットとb4番目のビットとb5番目のビットの合計5ビットに同時に誤りが発生しているケースを考える。このケースでは、b5番目のビットだけに誤りが発生している、すなわち1ビット誤りが発生していると誤判定される。このため、b5番目のビットは正しく訂正するものの、4ビット(b1番目のビットとb2番目のビットとb3番目のビットとb4番目のビット)に誤りが発生していることは見逃される。これも誤訂正の一種と考えられる。したがって、図11の表では、W(4)の9(=13−4)倍の個数、すなわち495個を、5ビット誤り(k=5)の誤訂正個数X(5)において加算している。これ以外にX(5)に寄与する誤訂正個数としては、上述した考え方と同様、W(6)の6倍の誤訂正、すなわち576個の誤訂正がある。したがって、誤訂正個数X(5)は、1071(=495+576)個になる。X(5)以外の誤訂正個数についても、同様にして得られる。3ビット以上の奇数ビット誤りの場合にはかなり高い確率(割合)で誤訂正が発生することが、図11の表から分かる。
<実施の形態1>
次に、実施の形態1について説明する。図12は、実施の形態にかかるデータ処理装置の一例を示すブロック図である。図12において、入出力インタフェース10は、図1のデータ処理装置1に対応する。入出力インタフェース10は、メモリ6に対する入出力のためのインタフェースである。例えば、入出力インタフェース10は、SOC(System-on-a-chip)に設けられ、SOCのバスシステムと、DDR(Double Data Rate)メモリなどの外付けメモリであるメモリ6との間に設けられる。なお、入出力インタフェース10による誤り検出・訂正機能は外付けのメモリ6に限らず、SOCなどに内蔵されたメモリ6に対する機能として利用されてもよいことは言うまでもない。
図12に示すように、入出力インタフェース10は、エンコーダ装置20とデコーダ装置30を有する。エンコーダ装置20は、図1のエンコーダ装置2に対応しており、メモリ6に書き込む入力データに対し、後述する処理を行い、処理結果をメモリ6に記憶する。また、デコーダ装置30は、図1のデコーダ装置3に対応しており、メモリ6から読み出したデータに対し、後述する処理を行い、出力データ及びエラー通知信号を出力する。
図13は、エンコーダ装置20を示すブロック図である。図13に示すように、エンコーダ装置20は、ECCエンコーダ回路21とECCエンコーダ回路22とを有する。ECCエンコーダ回路21は、第1のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECCを生成する回路である。また、ECCエンコーダ回路22は、上記第1のECC生成行列の列を入れ替えた第2のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECCをチェックビットとして生成する回路である。なお、ECCエンコーダ回路21とECCエンコーダ回路22は、同じ回路構成であるが、入力されるデータのビット順序が異なっているため、異なるECCを生成する。
エンコーダ装置20のECCエンコーダ回路21は、比較例におけるエンコーダ装置90が有するECCエンコーダ回路21と同じである。このため、ECCエンコーダ回路21は、第1のECC生成行列として、例えば図3に示すECC生成行列を用いた演算を行い、8ビットの入力データ(D0〜D7)から5ビットのECC(E0〜E4)を生成する。また、エンコーダ装置20のECCエンコーダ回路21の具体的な回路構成の一例は、図5に示した通りである。
ECCエンコーダ回路22は、8ビットの入力データのビット位置をローテーションしたデータ(D7,D0〜D6)から5ビットのECC(F0〜F4)を生成する。つまり、ECCエンコーダ回路22に入力されるデータは、ECCエンコーダ回路21に入力されるデータの各ビットをローテーションさせたデータである。なお、ECCエンコーダ回路22により生成されるECCは、ECCエンコーダ回路21により生成されるECCによる誤り検出・訂正を補うために用いられるため、ECCエンコーダ回路21により生成されるECCと区別して「チェックビット」と称す。ECCエンコーダ回路22は、用いるECC生成行列が異なることを除き、ECCエンコーダ回路21と同様の回路構成となっている。つまり、ECCエンコーダ回路22の具体的な回路構成は、ECCエンコーダ回路22には8ビットの入力データのビット位置がローテーションされたデータ(D7,D0〜D6)が入力される点、及び、ECCエンコーダ回路22の出力が5ビットのECC(E0〜E4)ではなく5ビットのチェックビット(F0〜F4)になる点でECCエンコーダ回路21と異なる。
ECCエンコーダ回路21が、図3に示すECC生成行列に従った演算を行う場合、ECCエンコーダ回路22は、例えば図14に示すECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECC(チェックビット)を生成する。図14に示すECC生成行列は、8ビットの入力データ(D0〜D7)から5ビットのチェックビット(F0〜F4)を生成するECC生成行列であり、図3に示したECC生成行列の各列を左に1列だけローテーションした行列である。このように、ECCエンコーダ回路22に用いられるECC生成行列におけるローテーションは、ECCエンコーダ回路22に入力されるデータのローテーションに対応している。すなわち、ECCエンコーダ回路22に入力されるビット列を導出するためのビットのローテーションにおけるローテーション後のビット位置は、ECCエンコーダ回路22で用いられるECC生成行列を導出するための列のローテーションにおけるローテーション後の列番号と対応している。なお、図14に示すECC生成行列は、図3に示すECC生成行列をローテーションしただけであるため、図3に示すECC生成行列と同様、各列のビットパターンが相互に異なっており、各列が奇数個の1を含んでいる。このため、図14に示すECC生成行列も、1ビット誤り訂正及び2ビット誤り検出が可能なECCを生成するための行列である。
図15は、ECCエンコーダ回路22の具体的な回路構成の一例について示すブロック図である。ECCエンコーダ回路22は、上述の通り、図14に示すECC生成行列に従った排他的論理和演算を行うことにより、8ビットの入力データ(D7,D0〜D6)から、5ビットのチェックビット(F0〜F4)を生成する回路である。ECCエンコーダ回路22は、ECC生成回路201を含み、ECC生成回路201によりチェックビットを生成する。図5に示した回路と同様、ECC生成回路201は、5個の排他的論理和回路201a〜201eを用いて構成される。排他的論理和回路201a〜201dは5入力XOR回路であり、排他的論理和回路201eは4入力XOR回路である。排他的論理和回路201a〜201eは、それぞれ、図14に示したECC生成行列に応じた演算を行い、5ビットのチェックビット(F0〜F4)のうちの1ビットの値を決定する。
F0は、排他的論理和回路201aの出力として得られる。具体的には、排他的論理和回路201aはD0、D1、D2、D3、D7の排他的論理和を演算して、演算結果をF0として出力する。同様に、F1は、排他的論理和回路201bの出力として得られる。F2は、排他的論理和回路201cの出力として得られる。F3は、排他的論理和回路201dの出力として得られる。F4は、排他的論理和回路201eの出力として得られる。
なお、ここで示した例では、ECCエンコーダ回路22は、ECCエンコーダ回路21が用いるECC生成行列の各列を左に1列だけローテーションした行列を用いているが、ローテーションの方向及びローテーションの段数は、これに限られない。ただし、この場合、上述の通り、ECCエンコーダ回路22に入力されるデータは、ECCエンコーダ回路21に入力されるデータに対し、ECC生成行列のローテーションと同様のローテーションが行われたデータである必要がある。
エンコーダ装置20は、入力データを8ビットのライトデータ(D0〜D7)として、生成した5ビットのECC(E0〜E4)と5ビットのチェックビット(F0〜F4)とともに、メモリ6に格納する。
次に、デコーダ装置30について説明する。図16は、デコーダ装置30を示すブロック図である。デコーダ装置30は、ECCデコーダ回路31と、ECCデコーダ回路32と、エラー通知チェック回路33とを有する。なお、ECCデコーダ回路31とECCデコーダ回路32は、同じ回路構成であるが、入力されるデータのビット順序が異なっているため、両者はデコード対象が異なる。ECCデコーダ回路31には、メモリ6から読み出されたリードデータ(D0〜D7)及びECC(E0〜E4)が入力される。また、ECCデコーダ回路32には、メモリ6から読み出されたリードデータ(D0〜D7)を、ECCエンコーダ回路22に入力されたデータと同じくビットを入れ替えたデータ(D7,D0〜D6)と、メモリ6から読み出されたチェックビット(F0〜F4)とが入力される。
ECCデコーダ回路31は、比較例におけるデコーダ装置91が有するECCデコーダ回路31と同じである。このため、ECCデコーダ回路31は、メモリ6から読み出した8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)に対し、1ビット誤り訂正・2ビット誤り検出を行い、1ビット誤りが検出された場合にはそのビットの誤りを訂正する。ECCデコーダ回路32は、メモリ6から読み出した8ビットのリードデータのビット位置をローテーションしたデータ(D7,D0〜D6)と5ビットのチェックビット(F0〜F4)に対し、1ビット誤り訂正・2ビット誤り検出を行う。ECCデコーダ回路32は、用いるECC検査行列が異なることを除き、ECCデコーダ回路31と同様の回路構成となっている。すなわち、ECCデコーダ回路31は、第1のECC検査行列に従った演算を行うのに対し、ECCデコーダ回路32は第2のECC検査行列に従った演算を行う。
図17は、デコーダ装置30のECCデコーダ回路31に用いられるECC検査行列を示したものである。デコーダ装置30のECCデコーダ回路31に用いられるECC検査行列は、比較例のデコーダ装置91のECCデコーダ回路31に用いられるECC検査行列と同様、8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)とから5ビットのシンドロームコード(S0〜S4)を生成する行列である。なお、図17に示すECC検査行列では、演算に利用されないため全て0の要素からなるチェックビット(F0〜F4)に対応する列(斜線が引かれている列)も含んでいる。なお、斜線が引かれていない左側の13列は、図7に示したECC検査行列と同じ内容になっている。
図18は、デコーダ装置30のECCデコーダ回路32に用いられるECC検査行列を示したものである。デコーダ装置30のECCデコーダ回路32に用いられるECC検査行列は、8ビットのリードデータ(D0〜D7)と5ビットのチェックビット(F0〜F4)とから5ビットのシンドロームコード(R0〜R4)を生成する行列である。なお、図18に示すECC検査行列では、演算に利用されないため全て0の要素からなるECC(E0〜E4)に対応する列(斜線が引かれている列)も含んでいる。なお、斜線が引かれた列の左側の8列は、(D0〜D7に対応する列)は、図17に示したECC検査行列の左側の8列(D0〜D7に対応する列)の各列を左に1列だけローテーションした内容になっている。このように、ECCデコーダ回路32に用いられるECC検査行列は、エンコーダ装置20におけるECCエンコーダ回路22に用いられるECC生成行列の列の入れ替えに対応して列の入れ替えが行われている。
なお、図18は、ECCエンコーダ回路22が、ECCエンコーダ回路21が用いるECC生成行列の各列を左に1列だけローテーションした行列を用いている場合に、ECCデコーダ回路32で用いられるECC検査行列を示している。したがって、ローテーションの方向及びローテーションの段数に応じて、ECCデコーダ回路32で用いられるECC検査行列は異なる。
デコーダ装置30のECCデコーダ回路31の具体的な回路構成の一例は、図9に示した通りであり、シンドローム生成回路300とシンドローム復号回路310と誤り訂正回路320とを有している。すなわち、図17に示したECC検査行列に従った演算は、図9に示したシンドローム生成回路300により行われる。
デコーダ装置30のECCデコーダ回路32の具体的な回路構成は、用いるECC検査行列が異なることを除き、ECCデコーダ回路31と同様である。図19は、ECCデコーダ回路32の具体的な回路構成の一例について示すブロック図である。ECCデコーダ回路32は、シンドローム生成回路301と、シンドローム復号回路311と、誤り訂正回路321とを有する。
シンドローム生成回路301は、以下の3つの点を除き、シンドローム生成回路300と同じである。第1に、シンドローム生成回路301は、8ビットのリードデータのビット位置がローテーションされたデータ(D7,D0〜D6)が入力される。また、第2に、シンドローム生成回路301は、5ビットのECCではなく5ビットのチェックビット(F0〜F4)が入力される。また、第3に、シンドローム生成回路301は、出力が5ビットのシンドロームコード(S0〜S4)ではなく別の5ビットのシンドロームコード(R0〜R4)になる。
したがって、シンドローム生成回路301は、8ビットのデータ(D7,D0〜D6)と5ビットのチェックビット(F0〜F4)から5ビットのシンドロームコード(R0〜R4)を生成して出力する回路である。図9に示した回路と同様、シンドローム生成回路301は、5個の排他的論理和回路301a〜301eを用いて構成される。排他的論理和回路301a〜301dは6入力XOR回路であり、排他的論理和回路301eは5入力XOR回路である。排他的論理和回路301a〜301eは、それぞれ、図18に示したECC検査行列に応じた演算を行い、5ビットのシンドロームコード(R0〜R4)のうちの1ビットの値を決定する。
R0は、排他的論理和回路301aの出力として得られる。具体的には、排他的論理和回路301aはD0、D1、D2、D3、D7、F0の排他的論理和を演算して、演算結果をR0として出力する。同様に、R1は、排他的論理和回路301bの出力として得られる。R2は、排他的論理和回路301cの出力として得られる。R3は、排他的論理和回路301dの出力として得られる。R4は、排他的論理和回路301eの出力として得られる。シンドローム生成回路300から出力されたシンドロームコード(R0〜R4)は、シンドローム復号回路311に入力される。
シンドローム復号回路311は、以下の2つの点を除き、シンドローム復号回路310と同じである。第1に、シンドローム復号回路311は、入力がシンドロームコード(S0〜S4)ではなく別のシンドロームコード(R0〜R4)である。第2に、シンドローム復号回路311は、出力が誤りビット位置フラグ(C0〜C7,CE0〜CE4)と誤り無しフラグ(Cxx)ではなく、別の誤りビット位置フラグ(B0〜B7,BF0〜BF4)と誤り無しフラグ(Bxx)である。
したがって、シンドローム復号回路311は、5ビットのシンドロームコード(R0〜R4)を復号して13ビットの誤りビット位置フラグ(B0〜B7,BF0〜BF4)と1ビットの誤り無しフラグ(Bxx)を生成して出力する回路である。図19に示すように、シンドローム復号回路311は、13個のINV付き論理積回路311a〜311mと、1個の否定論理和回路311nとを用いて構成される。
INV付き論理積回路311a〜311mは、5入力INV付きAND回路である。INV付き論理積回路311a〜311mは、それぞれ、図18に示したECC検査行列の各列(具体的には、図18に示すD0〜D7及びF0〜F4の13列)に現れている5ビットのビットパターン(図18に示すR0〜R4に対応)と、5ビットのシンドロームコード(R0〜R4)のビットパターンとが一致する場合に1を出力する回路である。シンドロームコードのビットパターンが、ECC検査行列のいずれかの列のビットパターンと一致することを検出することで、1ビット誤りが検出される。INV付き論理積回路311a〜311hのそれぞれの出力は、誤りビット位置フラグ(B0〜B7)として出力される。INV付き論理積回路311i〜311mのそれぞれの出力は、誤りビット位置フラグ(BF0〜BF4)として出力される。なお、誤りビット位置フラグ(B0〜B7,BF0〜BF4)の出力パターンは、誤りビット位置フラグ(C0〜C7,CE0〜CE4)の出力パターンと同様であり、以下の2種類がある。
第1の出力パターンは、B0〜B7,BF0〜BF4が全て0である出力パターンである。これは、誤りが検出されない場合、及び、2ビット以上の誤りが検出される場合の出力パターンである。
第2の出力パターンは、B0〜B7,BF0〜BF4のいずれか1つが1である出力パターンである。これは、1ビットの誤りが検出される場合の出力パターンである。
図18に示すECC検査行列の第1列を見ると、そのビットパターンは(1,1,0,1,0)である。シンドローム復号回路310では、これに対応するように、誤りビット位置フラグB0を生成するINV付き論理積回路311aが設けられている。具体的には、INV付き論理積回路311aの入力ポートのうち、3個のINV無し入力ポートにはシンドロームコードのR0,R1,R3が接続され、2個のINV付き入力ポートにはシンドロームコードのR2,R4が接続されている。INV付き論理積回路311b〜311mについても同様に接続されている。
否定論理和回路311nは、5入力NOR回路である。否定論理和回路311nは、5ビットのシンドロームコード(R0〜R4)の全ビットの値が0である場合に、1を出力する回路である。シンドロームコード(R0〜R4)の全ビットの値が0である場合、ビット誤りが発生していないと判定される。否定論理和回路311nの出力は、誤り無しフラグ(Bxx)として出力される。なお、誤り無しフラグ(Bxx)の出力パターンとしては、誤り無しフラグ(Cxx)の出力パターンと同様、以下の2種類がある。
第1の出力パターンは、Bxxが1である出力パターンである。これは、上述の通り、誤りが検出されない場合の出力パターンである。
第2の出力パターンは、Bxxが0である出力パターンである。これは、1ビット以上の誤りが検出される場合の出力パターンである。
誤り訂正回路321は、以下の2つの点を除き、誤り訂正回路320と同じである。第1に、誤り訂正回路321は、入力が誤りビット位置フラグ(C0〜C7,CE0〜CE4)と誤り無しフラグ(Cxx)ではなく、別の誤りビット位置フラグ(B0〜B7,BF0〜BF4)と誤り無しフラグ(Bxx)である。また、第2に、誤り訂正回路321の出力である1ビット誤り訂正後の出力データ(D’0〜D’7)は使用されず、1ビットエラー通知信号と2ビットエラー通知信号だけが使用される。デコーダ装置30の出力データとしては、ECCデコーダ回路31の出力データが使用される。
誤り訂正回路321は、リードデータの1ビット誤りが検出された場合にその誤りを訂正する回路を構成する訂正処理部321Aと、リードデータの誤りの発生状態について示すエラー通知信号を生成する回路を構成する通知処理部321Bとを有する。
訂正処理部321Aは、8ビットのリードデータ(D7,D0〜D6)及び8ビットの誤りビット位置フラグ(B0〜B7)に基づいて誤り訂正を行う。具体的には、図9に示した訂正処理部320Aと同様、訂正処理部321Aは、8個の排他的論理和回路321a〜321hを用いて構成される。排他的論理和回路321a〜321hは2入力XOR回路である。排他的論理和回路321a〜321hのそれぞれは、誤りビット位置フラグと、誤りビット位置フラグと対応するリードデータのビットとの排他的論理和演算を行うことにより、1ビットの誤りを訂正する。すなわち、訂正処理部321Aは、8ビットの誤りビット位置フラグ(B0〜B7)のいずれか1つのフラグが1である場合に、リードデータ(D0〜D7)の対応するビット位置の値を反転させることで1ビット誤り訂正を行う回路である。なお、本実施の形態では、容易にデコーダ装置30を構成するよう、ECCデコーダ回路31と同じ回路構成のECCデコーダ回路32を用いるため、誤り訂正回路321は、訂正処理部321Aを有する。しかしながら、上述の通り、本実施の形態では、ECCデコーダ回路32の訂正機能は使われないため、誤り訂正回路321は、訂正処理部321Aを有さなくてもよい。
通知処理部321Bは、13ビットの誤りビット位置フラグ(B0〜B7,BF0〜BF4)及び1ビットの誤り無しフラグ(Bxx)に基づいて、エラー通知信号として、1ビットエラー通知信号及び2ビットエラー通知信号を出力する。通知処理部321Bは、図9に示した通知処理部320Bと同様、1個の論理和回路321iと、1個の否定論理和回路321jとを用いて構成される。論理和回路321iは13入力OR回路であり、13ビットのビット位置フラグ(B0〜B7,BF0〜BF4)が入力される。また、否定論理和回路321jは2入力NOR回路であり、論理和回路321iの出力と、誤り無しフラグ(Bxx)が入力される。
論理和回路321iは、入力された13ビットのビット位置フラグ(B0〜B7,BF0〜BF4)のいずれか1つのフラグが1である場合に、1ビットエラー通知信号として1を出力する。また、否定論理和回路321jは、論理和回路321iの出力及び誤り無しフラグ(Bxx)がいずれも0である場合に、2ビットエラー通知信号として1を出力する。通知処理部321Bによるエラー通知信号の出力パターンとしては、通知処理部320Bによるエラー通知信号の出力パターンと同様、以下の3種類がある。
第1の出力パターンは、1ビットエラー通知信号及び2ビットエラー通知信号がいずれも0である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ(D7,D0〜D6)が誤りを含まないことを示す。
第2の出力パターンは、1ビットエラー通知信号が1であり、2ビットエラー通知信号が0である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ(D7,D0〜D6)及びチェックビット(F0〜F4)からなるビット列が1ビットの誤りを含むことを示す。
第3の出力パターンは、1ビットエラー通知信号が0であり、2ビットエラー通知信号が1である出力パターンである。このような出力パターンのエラー通知信号は、リードデータ(D7,D0〜D6)及びチェックビット(F0〜F4)からなるビット列が2ビット以上の誤りを含むことを示す。
図16に示すように、ECCデコーダ回路31の誤り訂正回路320から出力されたエラー通知信号(1ビットエラー通知信号及び2ビットエラー通知信号)と、ECCデコーダ回路32の誤り訂正回路321から出力されたエラー通知信号(1ビットエラー通知信号及び2ビットエラー通知信号)は、エラー通知チェック回路33に入力される。誤り訂正回路320から出力されるエラー通知信号、及び誤り訂正回路321から出力されるエラー通知信号は、いずれも、エラー通知チェック回路33により最終的な通知信号を生成するために用いられる信号である。
誤り訂正回路320が生成する1ビットエラー通知信号は、リードデータ(D0〜D7)及びECC(E0〜E4)からなるビット列に訂正可能な1ビットの誤りが存在するか否かを示す信号ということもできる。なお、誤り訂正回路320から出力される1ビットエラー通知信号は、第1の判定信号とも称す。
誤り訂正回路320が生成する2ビットエラー通知信号は、リードデータ(D0〜D7)及びECC(E0〜E4)からなるビット列に2ビット以上の誤りが存在するか否かを示す信号ということもできる。なお、誤り訂正回路320から出力される2ビットエラー通知信号は、第2の判定信号とも称す。
誤り訂正回路321が生成する1ビットエラー通知信号は、リードデータ(D7,D0〜D6)及びチェックビット(F0〜F4)からなるビット列に訂正可能な1ビットの誤りが存在するか否かを示す信号ということもできる。なお、誤り訂正回路321から出力される1ビットエラー通知信号は、第3の判定信号とも称す。
誤り訂正回路321が生成する2ビットエラー通知信号は、リードデータ(D7,D0〜D6)及びチェックビット(F0〜F4)からなるビット列に2ビット以上の誤りが存在するか否かを示す信号ということもできる。なお、誤り訂正回路321から出力される2ビットエラー通知信号は、第4の判定信号とも称す。
エラー通知チェック回路33は、上述の第1から第4の判定信号に基づいて、誤りの発生状態について示す最終的なエラー通知信号を生成する回路である。エラー通知チェック回路33は、エラー通知信号として、リードデータ(D0〜D7)に1ビットの誤りが含まれていたか否かを示す「1ビットエラー通知信号」と、リードデータ(D0〜D7)に2ビット以上の誤りが含まれていたか否かを示す「2ビットエラー通知信号」とを出力するものである。ただし、実際には、ECC(E0〜E4)とチェックビット(F0〜F4)の両方に1ビットずつ誤りが含まれていた場合も1ビットエラー通知信号は1となる、また、ECC(E0〜E4)又はチェックビット(F0〜F4)のどちらかに2ビット以上の誤りが含まれていた場合も2ビットエラー通知信号は1となる、ものである。エラー通知チェック回路33が出力する1ビットエラー通知信号が1であり、2ビットエラー通知信号が0である場合、ECCデコーダ装置30は、ビット列に1ビットの誤りがあり、かつ、リードデータについての誤りを訂正したデータを出力データ(D’0〜D’7)として出力することを通知する。また、エラー通知チェック回路33が出力する1ビットエラー通知信号が0であり、2ビットエラー通知信号が1である場合、ECCデコーダ装置30は、誤りを含む可能性があるデータを出力データ(D’0〜D’7)として出力することを通知する。なお、この場合、誤りがECCのみ、又はチェックビットのみに発生している場合もあるため、必ずしも出力データ(D’0〜D’7)が誤りを含むとは限らない。さらに、ECCデコーダ装置30が出力する1ビットエラー通知信号が0であり、2ビットエラー通知信号も0である場合、ECCデコーダ装置30は、誤りがないリードデータを、出力データ(D’0〜D’7)として出力することを通知する。
このように、デコーダ装置30は、メモリ6から読み出されたリードデータ、ECC、及びチェックビットに基づいて、読み出されたビット列が誤りを含まないこと、1ビットの誤りを含むこと、又は、2ビット以上の誤りを含むことのいずれかを示す通知信号を生成する。
エラー通知チェック回路33は、図16に示すように、1個の論理積回路33aと、1個の排他的論理和回路33bと、1個の論理和回路33cを用いて構成される。論理積回路33aは2入力AND回路であり、排他的論理和回路33bは2入力XOR回路であり、論理和回路33cは3入力OR回路である。
論理積回路33aには、ECCデコーダ回路31により生成された1ビットエラー通知信号(第1の判定信号)と、ECCデコーダ回路32により生成された1ビットエラー通知信号(第3の判定信号)とが入力される。論理積回路33aは、これらの入力に対する論理積演算を行って得られる信号を最終的な1ビットエラー通知信号として出力する。
排他的論理和回路33bには、ECCデコーダ回路31により生成された1ビットエラー通知信号(第1の判定信号)と、ECCデコーダ回路32により生成された1ビットエラー通知信号(第3の判定信号)とが入力される。排他的論理和回路33bは、これらの入力に対する排他的論理積演算を行って得られる信号を論理和回路33cに出力する。
論理和回路33cには、ECCデコーダ回路31により生成された2ビットエラー通知信号(第2の判定信号)と、ECCデコーダ回路32により生成された2ビットエラー通知信号(第4の判定信号)と、排他的論理和回路33bの出力信号が入力される。論理和回路33cは、これらの入力に対する論理和演算を行って得られる信号を最終的な2ビットエラー通知信号として出力する。
このような構成により、エラー通知チェック回路33は、ECCデコーダ回路31の1ビットエラー通知信号及びECCデコーダ回路32の1ビットエラー通知信号のいずれか一方のみが、1である場合(すなわち、訂正可能な1ビットの誤りが存在することを示す場合)、2ビットエラー通知信号として1を出力する。つまり、エラー通知チェック回路33は、ECCデコーダ回路31の1ビットエラー通知信号及びECCデコーダ回路32の1ビットエラー通知信号のいずれか一方のみが、1である場合、メモリ6から読み出されたビット列(D0〜D7,E0〜E4,F0〜F4)が2ビット以上の誤りを含むことを示す通知信号を生成する。また、エラー通知チェック回路33は、ECCデコーダ回路31の2ビットエラー通知信号又はECCデコーダ回路32の2ビットエラー通知信号の少なくとも一方が、1である場合(すなわち、2ビット以上の誤りが存在することを示す場合)、2ビットエラー通知信号として1を出力する。つまり、エラー通知チェック回路33は、ECCデコーダ回路31の2ビットエラー通知信号又はECCデコーダ回路32の2ビットエラー通知信号の少なくとも一方が、1である場合、メモリ6から読み出されたビット列(D0〜D7,E0〜E4,F0〜F4)が2ビット以上の誤りを含むことを示す通知信号を生成する。
以上説明した通り、本実施の形態では、ECCエンコーダ回路21によるECCと、ECCエンコーダ回路22によるECCであるチェックビットとが生成される。そして、これらは、異なるECC生成行列に従ったECCである。ECCエンコーダ回路21により生成されたECCを用いた検出処理では見過ごされてしまう誤りの発生パターンであっても、ECCエンコーダ回路22により生成されたチェックビットを用いた検出処理では誤りが発見されうる。したがって、ECCエンコーダ回路21が生成したECCのみによるデータの誤り検出に比べ、検出性能を向上させることができる。
なお、上述した実施の形態1では、8ビットのデータに対し、5ビットのECCと5ビットのチェックビットとを付加する例を示したが、ECC(チェックビット)の付加対象のデータ(記憶対象のデータ)のビット数及びECC(チェックビット)のビット数は、任意のビット数とすることができる。例えば、64ビットのデータに対して、8ビットのECC及び8ビットのチェックビットを付加することも可能である。
図20A及び図20Bは、ライトデータとしてメモリに書き込む64ビットの入力データ(D0〜D63)から8ビットのECC(E0〜E7)を生成するECC生成行列の一例である。このECC生成行列に対応して、メモリから読み出した64ビットのリードデータ(D0〜D63)と8ビットのECC(E0〜E7)とから8ビットのシンドロームコード(S0〜S7)を生成するECC検査行列が決まる。なお、このECC検査行列の左側64列はECC生成行列の64列と同じ内容となり、ECC検査行列の右側8列には8行8列の単位行列が追加された形となる。
チェックビットを生成するためのECC生成行列については、実施の形態1と同様、任意のローテーションを行った行列を用いればよい。チェックビット用のECC検査行列は、チェックビット用のECC生成行列に応じて決定される。また、チェックビット用のエンコーダ回路及びデコーダ回路には、ECC生成行列と同様のローテーションを行ったデータを入力すればよい。
64ビットのデータに対して、8ビットのECC及び8ビットのチェックビットを付加した場合も、多ビット誤りの検出性能を向上させることが可能である。また、64ビットのデータに対して付加するECCとチェックビットの合計ビット数を16ビットにすることができる。つまり、ECCとチェックビットの合計ビット数をデータ伝送に適したサイズである2バイトにすることができる。
<実施の形態2>
次に、実施の形態2について説明する。実施の形態2では、実施の形態1と同じエンコーダ装置20が用いられるが、デコーダ装置については、デコーダ装置30の代わりにデコーダ装置30Aが用いられる。
図21は、実施の形態2におけるデコーダ装置30Aの構成を示すブロック図である。デコーダ装置30Aは、シンドローム生成回路300及び301と、シンドローム復号回路310及び311と、シンドロームチェック回路330と、誤り訂正回路320とを有する。
デコーダ装置30Aのシンドローム生成回路300は、ECCデコーダ回路31のシンドローム生成回路300(図9参照)と同じであり、8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)から5ビットのシンドロームコード(S0〜S4)を生成して出力する回路である。
デコーダ装置30Aのシンドローム生成回路301は、ECCデコーダ回路32のシンドローム生成回路301(図19参照)と同じであり、8ビットのリードデータのビット位置がローテーションされたデータ(D7,D0〜D6)と5ビットのチェックビット(F0〜F4)から5ビットのシンドロームコード(R0〜R4)を生成して出力する回路である。
デコーダ装置30Aのシンドローム復号回路310は、ECCデコーダ回路31(図9参照)のシンドローム復号回路310と同じであり、5ビットのシンドロームコード(S0〜S4)を復号して、13ビットの誤りビット位置フラグ(C0〜C7,CE0〜CE4)と誤り無しフラグ(Cxx)を生成して出力する回路である。
デコーダ装置30Aのシンドローム復号回路311は、ECCデコーダ回路32のシンドローム復号回路311(図19参照)と同じであり、5ビットのシンドロームコード(R0〜R4)を復号して、13ビットの誤りビット位置フラグ(B0〜B7,BF0〜BF4)と誤り無しフラグ(Bxx)を生成して出力する回路である。
デコーダ装置30Aのシンドローム生成回路300及びシンドローム復号回路310は、第1のシンドローム部とも称す。第1のシンドローム部は、メモリ6から読み出されたリードデータ(D0〜D7)及びECC(E0〜E4)から第1のシンドロームコード(S0〜S4)を生成する。そして、第1のシンドローム部は、この第1のシンドロームコードがECC(E0〜E4)を生成するためのECC生成行列(第1のECC生成行列)及び単位行列からなるECC検査行列(第1のECC検査行列)のいずれかの列のビットパターンと一致しているか否かを示す第1のフラグ(C0〜C7,CE0〜CE4)と、第1のシンドロームコードの各ビットが全て0であるか否かを示す第2のフラグ(Cxx)を生成する。
また、デコーダ装置30Aのシンドローム生成回路301及びシンドローム復号回路311は、第2のシンドローム部とも称す。第2のシンドローム部は、メモリ6から読み出されたリードデータ(D0〜D7)のビットを入れ替えたデータ(D7,D0〜D6)とメモリ6から読み出されたチェックビット(F0〜F4)から、第2のシンドロームコード(R0〜R4)を生成する。そして、第2のシンドローム部は、この第2のシンドロームコードがチェックビット(F0〜F4)を生成するためのECC生成行列(第2のECC生成行列)及び単位行列からなるECC検査行列(第2のECC検査行列)のいずれかの列のビットパターンと一致しているか否かを示す第3のフラグ(B0〜B7,BF0〜BF4)と、第2のシンドロームコードの各ビットが全て0であるか否かを示す第4のフラグ(Bxx)を生成する。
シンドロームチェック回路330は、シンドロームチェック部とも称し、上記第1のフラグ(C0〜C7,CE0〜CE4)と上記第3のフラグ(B0〜B7,BF0〜BF4)とを比較するとともに、上記第2のフラグ(Cxx)と上記第4のフラグ(Bxx)とを比較する回路である。つまり、シンドロームチェック回路330は、2種類の誤りビット位置フラグ(C0〜C7とB0〜B7)の一致性をチェックして、確度(信頼性)を高めた誤りビット位置フラグ(C’0〜C’7)を生成し、また、誤りビット位置フラグ(CE0〜CE4)と誤りビット位置フラグ(BF0〜BF4)については両者の論理和を誤りビット位置フラグ(CE’0〜CE’4)として出力する。また、同様に、シンドロームチェック回路330は、2種類の誤り無しフラグ(CxxとBxx)の一致性をチェックして、確度(信頼性)を高めた誤り無しフラグ(C’xx)を生成する。
シンドロームチェック回路330は、図21に示すように、論理積回路330a〜330hと、論理和回路330i〜330mと、論理積回路330nを用いて構成される。論理積回路330a〜330hは2入力AND回路である。また、論理和回路330i〜330mは2入力OR回路である。論理積回路330a〜330hには、シンドローム復号回路310から出力された誤りビット位置フラグ(C0〜C7)とシンドローム復号回路311から出力された誤りビット位置フラグ(B0〜B7)が入力される。そして、論理積回路330a〜330hは、入力された値が両方とも1である場合に、1を出力し、それ以外の場合、0を出力する。つまり、上述の第1のフラグ(C0〜C7)、第3のフラグ(B0〜B7)、第1のシンドロームコード(S0〜S4)、第2のシンドロームコード(R0〜R4)、第1のECC検査行列、及び、第2のECC検査行列により説明すると、シンドロームチェック回路330は以下のようにフラグ(C’0〜C’7)を出力する。シンドロームチェック回路330は、第1の条件と第2の条件をともに満たす場合に限り、第1のシンドロームコード(S0〜S4)が第1のECC検査行列のt列目(ただし、tは正整数であり、第1のECC検査行列に含まれる第1のECC生成行列のいずれかの列に相当する列番号である)のビットパターンと一致していることを示す第5のフラグ(C’0〜C’7)を出力する。ここで、第1の条件は、第1のフラグ(C0〜C7)が、第1のシンドロームコード(S0〜S4)が第1のECC検査行列のt列目のビットパターンと一致していることを示すという条件である。第2の条件は、第3のフラグ(B0〜B7)が、第2のシンドロームコード(R0〜R4)が第2のECC検査行列のt列目のビットパターンと一致していることを示すという条件である。
また、論理和回路330i〜330mには、シンドローム復号回路310から出力された誤りビット位置フラグ(CE0〜CE4)とシンドローム復号回路311から出力された誤りビット位置フラグ(BF0〜BF4)が入力される。そして、論理和回路330i〜330mは、入力された値の少なくとも一方が1である場合に、1を出力し、それ以外の場合、0を出力する。つまり、上述の第1のフラグ(CE0〜CE4)、第3のフラグ(BF0〜BF4)、第1のシンドロームコード(S0〜S4)、第2のシンドロームコード(R0〜R4)、第1のECC検査行列、及び、第2のECC検査行列により説明すると、シンドロームチェック回路330は以下のようにフラグ(CE’0〜CE’4)を出力する。シンドロームチェック回路330は、第1のフラグ(CE0〜CE4)が、第1のシンドロームコード(S0〜S4)が第1のECC検査行列のs列目(ただし、sは正整数であり、第1のECC検査行列に含まれる単位行列のいずれかの列に相当する列番号である)のビットパターンと一致していることを示す場合、又は、第3のフラグ(BF0〜BF4)が、第2のシンドロームコード(R0〜R4)が第2のECC検査行列のs列目のビットパターンと一致していることを示す場合、第1のシンドロームコード(S0〜S4)が第1のECC検査行列のs列目のビットパターンと一致していることを示す第5のフラグ(CE’0〜CE’4)を出力する。
また、論理積回路330nには、シンドローム復号回路310から出力された誤り無しフラグ(Cxx)とシンドローム復号回路311から出力された誤り無しフラグ(Bxx)が入力される。そして、論理積回路330nは、入力された値が両方とも1である場合に、1を出力し、それ以外の場合、0を出力する。つまり、上述の第2のフラグ(Cxx)、第4のフラグ(Bxx)、第1のシンドロームコード(S0〜S4)、及び第2のシンドロームコード(R0〜R4)により説明すると、シンドロームチェック回路330は以下のようにフラグ(C’xx)を出力する。シンドロームチェック回路330は、第2のフラグが、第1のシンドロームコードの各ビットが全て0であることを示し、かつ、第4のフラグが、第2のシンドロームコードの各ビットが全て0であることを示す場合に限り、第1のシンドロームコードの各ビットが全て0であることを示す第6のフラグ(C’xx)を出力する。
シンドロームチェック回路330から出力された誤りビット位置フラグ(C’0〜C’7,CE’0〜CE’4)及び誤り無しフラグ(C’xx)は、誤り訂正回路320に入力される。デコーダ装置30Aの誤り訂正回路320は、ECCデコーダ回路31の誤り訂正回路320(図9参照)と同じであり、シンドロームチェック回路330から出力された誤りビット位置フラグ(C’0〜C’7,CE’0〜CE’4)及び誤り無しフラグ(C’xx)を用いて、誤り訂正及びエラー通知を行う回路である。誤り訂正回路320は、誤りビット位置フラグ(C‘0〜C’7)のいずれか1つのフラグが1である場合に、リードデータ(D0〜D7)の対応するビット位置(D0〜D7のいずれかのビット)の値を反転させることで1ビット誤り訂正を行い、1ビット誤り訂正後の出力データ(D’0〜D’7)を出力する。また、誤り訂正回路320は、誤りビット位置フラグ(C’0〜C’7,CE’0〜CE’4)及び誤り無しフラグ(C’xx)に基づいて、1ビットエラー通知信号及び2ビットエラー通知信号からなるエラー通知信号を生成する。このように、デコーダ装置30Aの誤り訂正回路320は、シンドローム復号回路310が出力する誤りビット位置フラグ(C0〜C7,CE0〜CE4)及び誤り無しフラグ(Cxx)の代わりに、シンドロームチェック回路330が出力する誤りビット位置フラグ(C’0〜C’7,CE’0〜CE’4)及び誤り無しフラグ(C’xx)を用いる点を除き、その構成及び動作は、図9に示した誤り訂正回路320と同じである。
このように、本実施の形態では、デコーダ装置30Aは、シンドロームチェック回路330の比較結果に基づいて、1ビット誤り訂正及びエラー通知を行う。すなわち、デコーダ装置30Aは、シンドロームチェック回路330により確度が高められた誤りビット位置フラグ(C’0〜C’7)の値に基づいて、メモリ6から読み出されたリードデータ(D0〜D7)に対する1ビット誤り訂正を行う。また、デコーダ装置30Aは、シンドロームチェック回路330により確度が高められた誤りビット位置フラグ(C’0〜C’7,CE’0〜CE’4)の値及び誤り無しフラグ(C’xx)の値に基づいてエラー通知を行う。このエラー通知は、ECCによる誤り検出結果とチェックビットによる誤り検出結果を統合したエラー通知となっている。したがって、本実施の形態においても、誤りの検出性能を向上させることができる。
なお、上述の通り、シンドロームチェック回路330は、論理積回路330a〜330hを用いて、誤りビット位置フラグ(C0〜C7)及び誤りビット位置フラグ(B0〜B7)をチェックしている。したがって、例えば、誤りビット位置フラグC0の値と、誤りビット位置フラグB0の値が異なる場合、C’0の値は0となる。この場合、C0に相当するビット位置の値は誤り訂正回路320において訂正されない。つまり、本実施の形態では、誤りビット位置フラグ(C0〜C7)及び誤りビット位置フラグ(B0〜B7)の値が一致する場合に限り、訂正処理が行われる。すなわち、本実施の形態によれば、誤訂正が回避される。また、シンドロームチェック回路330は、論理積回路330nを用いて、誤り無しフラグ(Cxx)及び誤り無しフラグ(Bxx)をチェックしている。したがって、誤り無しフラグCxxの値と、誤り無しフラグBxxの値が異なる場合、C’xxの値は0となる。つまり、この場合、C’xxの出力として、誤り無しであることを示す1は出力されない。このため、誤り検出の見逃しが回避される。
図22は、実施の形態2にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。また、図23は、実施の形態2にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。これらの表の見方は、図10及び図11と同様である。ただし、実施の形態2では、8ビットのライトデータ(D0〜D7)と、5ビットのECC(E0〜E4)と5ビットのチェックビット(F0〜F4)がメモリ6に格納される。このため、図22及び図23は、k=1からk=18までについて結果を示している。
図10及び図22からわかるように、誤りの検出見逃しの総数は変らないものの、比較例では、k=4において、55個の誤りの検出見逃しが発生していたが、実施の形態2では、これが0個となっている。また、比較例では、k=5及びk=6において合計96個の誤りの検出見逃しが発生していたが、実施の形態2では、これが28個となっている。このように、実施の形態2では、kの値が比較的小さい場合における見逃し個数を減少させることが可能となる。また、これにともない、図11及び図23からわかるように、kの値が比較的小さい場合における誤訂正の個数も減少している。
<実施の形態3>
次に実施の形態3について説明する。実施の形態3は、ECCの一部のビットをチェックビットとしても利用することにより、チェックビットのビット数を減らしている点で実施の形態1と異なる。具体的には、実施の形態1では5ビットのECCに対し、5ビットのチェックビットを用いたが、実施の形態3では、3ビットのチェックビットを用いている。実施の形態3にかかる入出力インタフェース10は、エンコーダ装置20の代わりにエンコーダ装置20Aを有し、デコーダ装置30の代わりにデコーダ装置30Bを有する。
図24は、エンコーダ装置20Aを示すブロック図である。図24に示すように、エンコーダ装置20Aは、ECCエンコーダ回路21とECCエンコーダ回路23とを有する。エンコーダ装置20AのECCエンコーダ回路21は、エンコーダ装置20のECCエンコーダ回路21と同じであり、第1のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECCを生成する回路である。また、ECCエンコーダ回路23は、上記第1のECC生成行列において、所定の行の値が同じである複数の列を入れ替えた行列である第2のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECCをチェックビットとして生成する回路である。なお、ECCエンコーダ回路21とECCエンコーダ回路23は、同じ回路構成であるが、入力されるデータのビット順序が異なっているため、異なるECCを生成する。
図25は、図24に示したECCエンコーダ回路23で用いられるECC生成行列の一例を示したものである。図25に示すように、このECC生成行列は、8ビットの入力データ(D0〜D7)から5ビットのチェックビット(F0〜F4)を生成するECC生成行列であり、ECCエンコーダ回路21で用いている図3に示したECC生成行列の一部分(下側の3行(F2〜F4の部分)の左側の3列(D0〜D2の部分))の各列を左に1列だけローテーションした形になっている。図3に示したECC生成行列では、左側の3列(D0〜D2の部分)は、1行目の要素の値が同じであり、かつ、2行目の要素の値が同じである。したがって、図25に示したECC生成行列は、図3に示したECC生成行列において、1行目及び2行目の値が同じである3つの列(左側の3列)を入れ替えた行列である。このような入れ替えが行われたECC生成行列においては、入れ替えの前後において、1行目及び2行目の値はいずれの列においても変更がない。つまり、入れ替え前のECC生成行列の1行目で生成されるECC(E0)は、入れ替え後のECC生成行列の1行目で生成されるチェックビット(F0)と同じである。同様に、入れ替え前のECC生成行列の2行目で生成されるECC(E1)は、入れ替え後のECC生成行列の2行目で生成されるチェックビット(F1)と同じである。したがって、ECCエンコーダ回路23において生成されるチェックビット(F0,F1)をメモリ6に記憶する必要はない。
ECCエンコーダ回路23は、ビットの入れ替えが行われたデータが入力される。この入れ替えは、図25に示したECC生成行列を導出するための入れ替えに対応している。すなわち、D0〜D2だけをローテーションさせる入れ替えが行われたデータがECCエンコーダ回路23に入力される。具体的には、図24に示すように、ECCエンコーダ回路23は、8ビットの入力データの下位3ビットのビット位置だけをローテーションしたデータ(D2,D0,D1,D3〜D7)が入力され、5ビットのチェックビット(F0〜F4)を生成する。
エンコーダ装置20Aは、入力データを8ビットのライトデータ(D0〜D7)として、生成した5ビットのECC(E0〜E5)と、生成した5ビットのチェックビットのうちの上位3ビット(F2〜F4)とともに、メモリ6に書き込む。なお、上述したとおり、ECCエンコーダ回路23で生成される5ビットのチェックビットのうちの下位2ビット(F0〜F1)は、ECCエンコーダ回路21で生成される5ビットのECCのうちの下位2ビット(E0〜E1)と完全に同じものになるため、重複してメモリ6に書き込む必要はない。このようにエンコーダ装置20Aは、入力データと、ECCエンコーダ回路21により生成されたECCの全ビットと、ECCエンコーダ回路23により生成されたECCの一部のビットとをメモリ6に格納する。なお、この一部のビットは、ECCエンコーダ回路23が用いるECC生成行列における上記所定の行以外の行を用いた演算により得られるビットである。
次に、デコーダ装置30Bについて説明する。図26は、デコーダ装置30Bを示すブロック図である。デコーダ装置30Bは、ECCデコーダ回路31と、ECCデコーダ回路34と、エラー通知チェック回路33とを有する。
デコーダ装置30BのECCデコーダ回路31は、デコーダ装置30のECCデコーダ回路31と同じであり、メモリ6から読み出した8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)に対し、1ビット誤り訂正・2ビット誤り検出を行い、1ビット誤りが検出された場合にはそのビットの誤りを訂正する回路である。ECCデコーダ回路34は、メモリ6から読み出した8ビットのリードデータの下位3ビットのビット位置だけをローテーションしたデータ(D2,D0,D1,D3〜D7)と、5ビットのECCのうちの下位2ビット(E0=F0,E1=F1)と5ビットのチェックビットのうちの上位3ビット(F2〜F4)とを用いて、1ビット誤り訂正・2ビット誤り検出を行う回路である。なお、ECCデコーダ回路31とECCデコーダ回路34は、同じ回路構成であるが、入力されるデータのビット順序が異なっているため、両者はデコード対象が異なる。
図27は、デコーダ装置30BのECCデコーダ回路31に用いられるECC検査行列を示したものである。デコーダ装置30BのECCデコーダ回路31に用いられるECC検査行列は、8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)とから5ビットのシンドロームコード(S0〜S4)を生成する行列である。なお、図27に示すECC検査行列では、演算に利用されないため全て0の要素からなる、5ビットのチェックビットのうちの上位3ビット(F2〜F4)に対応する列(斜線が引かれている列)も含んでいる。なお、斜線が引かれていない左側の13列は、図7に示したECC検査行列と同じ内容になっている。
また、図28は、デコーダ装置30BのECCデコーダ回路34に用いられるECC検査行列を示したものである。デコーダ装置30BのECCデコーダ回路34に用いられるECC検査行列は、8ビットのリードデータ(D0〜D7)と、5ビットのECCのうちの下位2ビット(E0=F0,E1=F1)と、5ビットのチェックビットのうちの上位3ビット(F2〜F4)とから、5ビットのシンドロームコード(R0〜R4)を生成する行列である。なお、図28に示すECC検査行列では、演算に利用されないため全て0の要素からなる、5ビットのECCのうちの上位3ビット(E2〜E4)に対応する列(斜線が引かれている列)も含んでいる。なお、左側の8列(D0〜D7に対応する列)は、図27に示したECC検査行列の左側の8列(D0〜D7に対応する列)の一部の列(D0〜D2に対応する列)をローテーションした形となっている。ここで、上側の2行は、全て1であるため、より詳細には、図28の左側の8列(D0〜D7に対応する列)は、図27に示したECC検査行列の左側の8列(D0〜D7に対応する列)の一部分(下側の3行(R2〜R4に対応する行)の左側の3列(D0〜D2に対応する列))の各列を左に1列だけローテーションした形になっている。
デコーダ装置30Bのエラー通知チェック回路33は、デコーダ装置30のエラー通知チェック回路33と同じであり、ECCデコーダ回路31が出力するエラー通知及びECCデコーダ回路34が出力するエラー通知に基づいて、最終的なエラー通知信号を生成する回路である。
このように、デコーダ装置30Bは、メモリ6から読み出されたリードデータ(D0〜D7)と、ECC(E0〜E4)と、チェックビットの一部のビット(F2〜F4)とに基づいて、通知信号を生成する。
以上、実施の形態3について説明した。本実施の形態においても、実施の形態1と同様、ECCによる誤り検出とチェックビットによる誤り検出とが行われる。このため、1種類のECCのみによるデータの誤り検出に比べ、検出性能を向上させることができる。また、上述の通り、ECCの下位2ビットをチェックビットの下位2ビットと共用できるため、データとECCとチェックビットの合計ビット数を16ビットとすることができる。つまり、合計ビット数をデータ伝送に適したサイズである2バイトにすることができる。
以下、実施の形態3の変形例について説明する。実施の形態2において、実施の形態3のようなECCとチェックビットの共用が行われてもよい。すなわち、実施の形態3にかかるエンコーダ装置20Aと、図29に示すデコーダ装置30Cとが用いられてもよい。図29に示すデコーダ装置30Cは、シンドローム生成回路301が、シンドローム生成回路302に置き換えられた点を除き、図21に示した実施の形態2にかかるデコーダ装置30Aと同じである。シンドローム生成回路302は、シンドローム生成回路301と同じ回路構成であるが、入力されるデータのビット順序が異なっているため、生成するシンドロームコードが異なる。
シンドローム生成回路302は、上述のECCデコーダ回路34と同様、メモリ6から読み出した8ビットのリードデータの下位3ビットのビット位置だけをローテーションしたデータ(D2,D0,D1,D3〜D7)と、5ビットのECCのうちの下位2ビット(E0=F0,E1=F1)と、5ビットのチェックビットのうちの上位3ビット(F2〜F4)とが入力される。そして、これらの入力に基づいて、シンドロームコードを生成する。
このような構成とすることにより、実施の形態2においても、合計ビット数をデータ伝送に適したサイズである2バイトにすることができる。
図30は、実施の形態3の変形例にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。また、図31は、実施の形態3の変形例にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。これらの表の見方は、図10及び図11と同様である。ただし、実施の形態3の変形例では、8ビットのライトデータ(D0〜D7)と、5ビットのECC(E0〜E4)と3ビットのチェックビット(F2〜F4)がメモリ6に格納される。このため、図30及び図31は、k=1からk=16までについて結果を示している。
図10及び図30からわかるように、誤りの検出見逃しの総数は変らないものの、比較例では、k=4において、55個の誤りの検出見逃しが発生していたが、実施の形態3の変形例では、これが4個となっている。また、比較例では、k=5及びk=6において合計96個の誤りの検出見逃しが発生していたが、実施の形態3の変形例では、これが59個となっている。このように、実施の形態3の変形例では、kの値が比較的小さい場合における見逃し個数を減少させることが可能となる。また、これにともない、図11及び図31からわかるように、kの値が比較的小さい場合における誤訂正の個数も減少している。
<実施の形態4>
次に、実施の形態4について説明する。実施の形態1から3では、エンコーダ装置は、2つの同じ回路構成を有するECCエンコーダ回路を有し、一方が、チェックビットを生成する回路として利用された。これに対し、実施の形態4にかかるエンコーダ装置20Bは、互いに回路構成が異なっているECCエンコーダ回路21とチェックビット生成回路24とを有している。
実施の形態4にかかる入出力インタフェース10は、エンコーダ装置20の代わりにエンコーダ装置20Bを有し、デコーダ装置30の代わりにデコーダ装置30Dを有する。
図32は、エンコーダ装置20Bを示すブロック図である。図32に示すように、エンコーダ装置20Cは、ECCエンコーダ回路21とチェックビット生成回路24とを有する。エンコーダ装置20BのECCエンコーダ回路21は、実施の形態1などのECCエンコーダ回路21と同じであり、所定のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECCを生成する回路である。本実施の形態4において、ECCエンコーダ回路21が用いるECC生成行列をECC生成部分行列と称す。また、チェックビット生成回路24は、所定のチェックビット生成行列に従って演算することによりチェックビットを生成する回路である。
ここで、ECCエンコーダ回路21に用いられるECC生成部分行列と、チェックビット生成回路24に用いられるチェックビット生成行列について説明する。ECC生成部分行列及びチェックビット生成行列は、いずれも、所定のECC生成行列(以下、ECC生成全体行列と称す)の部分行列である。ここで、ECC生成全体行列は、1ビット誤り訂正及び2ビット誤り検出が可能なpビット(ただし、pは正整数)のECCを生成するためのECC生成行列であるとする。この場合、チェックビット生成行列はECC生成全体行列のq行(ただし、qはp未満の正整数)の部分行列であり、ECC生成部分行列は、ECC生成全体行列から上記q行の部分行列を除いた部分行列であるr行(ただし、r=p−q)の部分行列である。ECCエンコーダ回路21は、このようなECC生成部分行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なrビットのECCを生成する。また、チェックビット生成回路24は、チェックビット生成行列に従って演算することによりqビットのチェックビットを生成する。なお、本実施の形態では、具体的な一例として、p=8、q=3、r=5としている。
図33は、ECC生成全体行列、ECC生成部分行列、及びチェックビット生成行列の一例を示すものである。なお、図33において、上側に図示された5行8列の行列がECC生成部分行列であり、下側に図示された3行8列の行列がチェックビット生成行列であり、全体の8行8列の行列がECC生成全体行列である。図33に示したECC生成全体行列は、8ビットの入力データ(D01〜D7)から、1ビット誤り訂正及び2ビット誤り検出が可能な8ビットのECCを生成することが可能なECC生成行列である。図33に示したECC生成部分行列は、8ビットの入力データ(D01〜D7)から、1ビット誤り訂正及び2ビット誤り検出が可能な5ビットのECC(E0〜E4)を生成することが可能なECC生成行列である。図33に示したチェックビット生成行列は、8ビットの入力データ(D01〜D7)から、3ビットのチェックビット(G5〜G7)を生成することが可能な行列である。なお、図33に示したチェックビット生成行列は、各列のビットパターンの種類は、8パターンではなく4パターンしかない。このため、チェックビットは、SEC−DED符号ではない。
エンコーダ装置20BのECCエンコーダ回路21には、8ビットのデータ(D0〜D7)が入力される。ECCエンコーダ回路21は、図33の上側に示すECC生成部分行列を用いた演算を行い、8ビットの入力データ(D0〜D7)に対する5ビットのECC(E0〜E4)を生成する。なお、エンコーダ装置20BのECCエンコーダ回路21の具体的な回路構成の一例は、図5に示した通りである。
エンコーダ装置20Bのチェックビット生成回路24には、8ビットのデータ(D0〜D7)が入力される。チェックビット生成回路24は、図33の下側に示すチェックビット生成行列を用いた演算を行い、8ビットの入力データ(D0〜D7)に対する3ビットのチェックビット(G5〜G7)を生成する。図34は、チェックビット生成回路24の具体的な回路構成の一例について示すブロック図である。チェックビット生成回路24は、図33に示すチェックビット生成行列に従った排他的論理和演算を行うことにより、8ビットの入力データ(D0〜D7)から、3ビットのチェックビット(G5〜G7)を生成する回路である。チェックビット生成回路24は、3個の排他的論理和回路24a〜24cを用いて構成される。排他的論理和回路24a〜24cは4入力XOR回路である。排他的論理和回路24a〜24cは、それぞれ、図33に示したチェックビット生成行列に応じた演算を行い、3ビットのチェックビット(G5〜G7)のうちの1ビットの値を決定する。
G5は、排他的論理和回路24aの出力として得られる。具体的には、排他的論理和回路24aはD1、D2、D4、D5の排他的論理和を演算して、演算結果をG5として出力する。同様に、G6は、排他的論理和回路24bの出力として得られる。G7は、排他的論理和回路24cの出力として得られる。
エンコーダ装置20Bは、入力データを8ビットのライトデータ(D0〜D7)として、生成した5ビットのECC(E0〜E4)と3ビットのチェックビット(G5〜G7)とともに、メモリ6に格納する。
次に、デコーダ装置30Dについて説明する。図35は、実施の形態4におけるデコーダ装置30Dの構成を示すブロック図である。デコーダ装置30Dは、シンドローム生成回路300及び303と、シンドローム復号回路310及び312と、エラー通知信号生成回路331と、誤り訂正回路320とを有する。
デコーダ装置30Dのシンドローム生成回路300は、ECCデコーダ回路31のシンドローム生成回路300(図9参照)と同じであり、8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)から5ビットのシンドロームコード(S0〜S4)を生成して出力する回路である。シンドローム生成回路300は、生成したシンドロームコードをシンドローム復号回路310に出力する。
デコーダ装置30Dのシンドローム復号回路310は、ECCデコーダ回路31(図9参照)のシンドローム復号回路310と同じであり、5ビットのシンドロームコード(S0〜S4)を復号して、13ビットの誤りビット位置フラグ(C0〜C7,CE0〜CE4)と誤り無しフラグ(Cxx)を生成して出力する回路である。なお、デコーダ装置30Dのシンドローム復号回路310から出力された誤りビット位置フラグ(C0〜C7)は、誤り訂正回路320に入力されるが、シンドローム復号回路310から出力された誤りビット位置フラグ(CE0〜CE4)と誤り無しフラグ(Cxx)は、誤り訂正回路320ではなくエラー通知信号生成回路331に入力される。また、デコーダ装置30Dのシンドローム復号回路310から出力された誤りビット位置フラグ(C0〜C7)は、エラー通知信号生成回路331にも入力される。
デコーダ装置30Dのシンドローム生成回路303は、8ビットのリードデータ(D0〜D7)と3ビットのチェックビット(G5〜G7)から3ビットのシンドロームコード(Q5〜Q7)を生成して出力する回路である。シンドローム生成回路303は、生成したシンドロームコードをシンドローム復号回路312に出力する。
デコーダ装置30Dのシンドローム復号回路312は、3ビットのシンドロームコード(Q5〜Q7)を復号して、7ビットの「誤りビット位置特定補助フラグ」(A0〜A3,AG5〜AG7)を生成して出力する回路である。シンドローム復号回路312は、生成した誤りビット位置特定補助フラグをエラー通知信号生成回路331に出力する。
デコーダ装置30Dの誤り訂正回路320は、ECCデコーダ回路31の誤り訂正回路320(図9参照)と同じである。なお、本実施の形態では、誤り訂正回路320は、誤り訂正機能だけが利用され、エラー通知機能は利用されない。このため、誤り訂正回路320には、上述の通り、ビット位置フラグ(C0〜C7)は入力されるが、誤り無しフラグ(Cxx)は入力されない。このように、本実施の形態では、誤り訂正回路320の訂正処理部320Aのみが使用され、通知処理部320Bは使用されない。したがって、本実施の形態において、誤り訂正回路320の代わりに、訂正処理部320Aのみを備える回路が用いられてもよい。
デコーダ装置30Dのエラー通知信号生成回路331は、13ビットのビット位置フラグ(C0〜C7,CE0〜CE4)と、1ビットの誤り無しフラグ(Cxx)と、7ビットの誤りビット位置特定補助フラグ(A0〜A3,AG5〜AG7)から、1ビットエラー通知信号及び2ビットエラー通知信号からなるエラー通知信号を生成して出力する回路である。なお、エラー通知信号生成回路331の具体的な回路構成については後述する。
シンドローム生成回路300、303は、図36に示す検査行列に従って演算することにより、シンドロームコードを生成する回路である。以下の説明では、シンドローム生成回路300で用いられる検査行列をECC検査部分行列と称し、シンドローム生成回路303で用いられる検査行列をチェックビット検査行列と称す。ECC検査部分行列及びチェックビット検査行列は、いずれも、所定のECC検査行列(以下、ECC検査全体行列と称す)の部分行列である。ここで、ECC検査全体行列は、ECC生成全体行列に単位行列を結合した行列である。ECC検査部分行列は、ECC検査全体行列のr(図36に示す例ではr=5)行の部分行列であり、チェックビット検査行列は、ECC検査全体行列からから上記r行の部分行列を除いたq(図36に示す例ではq=3)行の部分行列である。シンドローム生成回路300は、このようなECC検査部分行列に従って演算することにより、rビットのシンドロームコードを生成する。また、シンドローム生成回路303は、チェックビット検査行列に従って演算することによりqビットのシンドロームコードを生成する。
図36に示される8行16列の行列がECC検査全体行列であり、上側の5行16列の行列がシンドローム生成回路300で用いられるECC検査部分行列であり、下側の3行16列の行列がシンドローム生成回路303で用いられるチェックビット検査行列である。
図36に示すECC検査部分行列は、8ビットのリードデータ(D0〜D7)と5ビットのECC(E0〜E4)とから5ビットのシンドロームコード(S0〜S4)を生成する行列である。なお、図36に示すECC検査部分行列では、演算に利用されないため全て0の要素からなるチェックビット(G5〜G7)に対応する列(斜線が引かれている列)も含んでいる。なお、斜線が引かれていない左側の13列は、図7に示したECC検査行列と同じ内容になっている。
図36に示すチェックビット検査行列は、8ビットのリードデータ(D0〜D7)と3ビットのチェックビット(G5〜G7)とから3ビットのシンドロームコード(Q5〜Q7)を生成する行列である。なお、図36に示すチェックビット検査行列では、演算に利用されないため全て0の要素からなるECC(E0〜E4)に対応する列(斜線が引かれている列)も含んでいる。
図37は、デコーダ装置30Dのシンドローム生成回路303及びシンドローム復号回路312の具体的な回路構成の一例について示すブロック図である。
図37に示すように、シンドローム生成回路303は、3個の排他的論理和回路303a〜303cを用いて構成される。排他的論理和回路303a〜303cは5入力XOR回路である。排他的論理和回路303a〜303cは、それぞれ、図36に示したチェックビット検査行列に従って、3ビットのシンドロームコード(Q5〜Q7)のうちの1ビットの値を決定する。
Q5は、排他的論理和回路303aの出力として得られる。具体的には、排他的論理和回路303aはD1、D2、D4、D5、G5の排他的論理和を演算して、演算結果をQ5として出力する。同様に、Q6は、排他的論理和回路303bの出力として得られる。Q7は、排他的論理和回路303cの出力として得られる。シンドローム生成回路303から出力されたシンドロームコード(Q5〜Q7)は、シンドローム復号回路312に入力される。
シンドローム復号回路312は、図37に示すように、1個の否定論理和回路312aと、6個のINV付き論理積回路312b〜312gとを用いて構成される。否定論理和回路312aは、3入力NOR回路である。INV付き論理積回路312b〜312gは、3入力INV付きAND回路である。否定論理和回路312a及びINV付き論理積回路312b〜312gは、それぞれ、図36に示したチェックビット検査行列の各列に現れている3ビットのビットパターン(図36に示すQ5〜Q7に対応)と、3ビットのシンドロームコード(Q5〜Q7)のビットパターンとが一致する場合に1を出力する回路である。なお、図36に示すように、チェックビット検査行列の各列に現れている3ビットのビットパターンは、7種類(000,110,101,011,100,010,001)である。誤りビット位置特定補助フラグ(A0〜A3)を出力するための否定論理和回路312a及びINV付き論理積回路312b〜312dについてのシンドローム復号回路312のこのような動作は、図33に示したチェックビット生成行列の各列に現れている3ビットのビットパターンと、3ビットのシンドロームコード(Q5〜Q7)のビットパターンとの一致をチェックしていることに等しい。
否定論理和回路312a及びINV付き論理積回路312b〜312gのそれぞれの出力は、誤りビット位置特定補助フラグ(A0〜A3,AG5〜AG7)として出力される。なお、誤りビット位置特定補助フラグの出力パターンとしては、以下の2種類がある。第1の出力パターンは、A0〜A3,AG5〜AG7が全て0である出力パターンである。第2の出力パターンは、A0〜A3,AG5〜AG7のいずれか1つが1である出力パターンである。
なお、シンドローム復号回路310では、シンドロームコード(S0〜S4)の全ビットが0である場合に限って1となるフラグCxxを、C0〜C7とは別に出力する。これに対し、シンドローム復号回路312では、否定論理和回路312aにより生成される誤りビット位置特定補助フラグ(A0)が、シンドロームコード(Q5〜Q7)の全ビットが0である場合に限って1となるフラグであるため、シンドローム復号回路312は、誤りビット位置特定補助フラグ(A0〜A3,AG5〜AG7)だけを出力する。シンドローム復号回路312は、誤りビット位置特定補助フラグ(A0〜A3,AG5〜AG7)を、エラー通知信号生成回路331に出力する。
デコーダ装置30Dのシンドローム生成回路300及びシンドローム復号回路310は、第1のシンドローム部とも称す。第1のシンドローム部は、メモリ6から読み出されたリードデータ(D0〜D7)及びECC(E0〜E4)から第1のシンドロームコード(S0〜S4)を生成する。そして、第1のシンドローム部は、この第1のシンドロームコードがECC検査部分行列のいずれかの列のビットパターンと一致しているか否かを示す第1のフラグ(C0〜C7,CE0〜CE4)と、第1のシンドロームコードの各ビットが全て0であるか否かを示す第2のフラグ(Cxx)を生成する。
また、デコーダ装置30Dのシンドローム生成回路303及びシンドローム復号回路312は、第2のシンドローム部とも称す。第2のシンドローム部は、メモリ6から読み出されたリードデータ(D0〜D7)及びチェックビット(G5〜G7)から、第2のシンドロームコード(Q5〜Q7)を生成する。そして、第2のシンドローム部は、この第2のシンドロームコードがチェックビット検査行列のいずれかの列のビットパターンと一致しているか否かを示す第3のフラグ(A0〜A3,AG5〜AG7)を生成する。
エラー通知信号生成回路331は、通知部とも称し、第1のシンドローム部により生成されたフラグ(C0〜C7,CE0〜CE4,Cxx)と第2のシンドローム部により生成されたフラグ(A0〜A3,AG5〜AG7)とを比較し、比較結果に基づいて、エラー通知信号を生成する回路である。つまり、エラー通知信号生成回路331は、第1のシンドローム部により生成されたフラグと第2のシンドローム部により生成されたフラグの一致性をチェックして、確度(信頼性)を高めた誤りビット位置フラグ(C’0〜C’7,CE’0〜CE’4)及び誤りビット位置特定補助フラグ(AG’5〜AG’7)を生成する。また、同様に、エラー通知信号生成回路331は、誤り無しフラグ(Cxx)と誤りビット位置特定補助フラグ(A0)の一致性をチェックして、確度(信頼性)を高めた誤り無しフラグ(C’xx)を生成する。
エラー通知信号生成回路331は、図35に示すように、17個の論理積回路331a〜331qと、1個の論理和回路331rと、1個の否定論理和回路331sとを用いて構成される。論理積回路331a〜331qは2入力AND回路である。
誤りビット位置特定補助フラグ(A0)は、シンドロームコード(Q5〜Q7)のビットパターンが、図36に示すチェックビット検査行列におけるD0又はD7に対応する列のビットパターンと一致する場合に1になるフラグである。また、シンドロームコード(S0〜S4)のビットパターンが、図36に示すECC検査部分行列におけるD0に対応する列のビットパターンと一致する場合に1になるフラグは誤りビット位置フラグ(C0)であり、図36に示すECC検査部分行列におけるD7に対応する列のビットパターンと一致する場合に1になるフラグは誤りビット位置フラグ(C7)である。したがって、エラー通知信号生成回路331は、C0とA0を比較し、C7とA0を比較する。このため、論理積回路331aにはC0とA0が入力され、論理積回路331aはC’0を出力する。また、論理積回路331hにはC7とA0が入力され、論理積回路331hは、C’7を出力する。
エラー通知信号生成回路331は、他の誤りビット位置フラグについても同様に比較する。すなわち、論理積回路331bにはC1とA1が入力され、論理積回路331bはC’1を出力する。論理積回路331cにはC2とA2が入力され、論理積回路331cはC’2を出力する。論理積回路331dにはC3とA3が入力され、論理積回路331dはC’3を出力する。論理積回路331eにはC4とA1が入力され、論理積回路331eはC’4を出力する。論理積回路331fにはC5とA2が入力され、論理積回路331fはC’5を出力する。論理積回路331gにはC6とA3が入力され、論理積回路331gはC’6を出力する。
また、誤りビット位置フラグ(CE0)は、シンドロームコード(S0〜S4)のビットパターンが、図36に示すECC検査部分行列におけるE0に対応する列のビットパターンと一致する場合に1になるフラグである。ここで、図36から明らかなように、シンドロームコード(S0〜S4)のビットパターンがE0に対応する列のビットパターンと一致する場合、シンドロームコード(Q5〜Q7)のビットパターンは(0,0,0)となるはずである。シンドロームコード(Q5〜Q7)のビットパターン(0,0,0)であるか否かはA0により判定可能である。したがって、エラー通知信号生成回路331は、CE0とA0を比較する。つまり、論理積回路331iにはCE0とA0が入力され、論理積回路331iはCE’0を出力する。
同様に、論理積回路331jにはCE1とA0が入力され、論理積回路331jはCE’1を出力する。論理積回路331kにはCE2とA0が入力され、論理積回路331kはCE’2を出力する。論理積回路331lにはCE3とA0が入力され、論理積回路331lはCE’3を出力する。論理積回路331mにはCE4とA0が入力され、論理積回路331mはCE’4を出力する。論理積回路331nにはAG5とCxxが入力され、論理積回路331nはAG’5を出力する。論理積回路331oにはAG6とCxxが入力され、論理積回路331oはAG’6を出力する。論理積回路331pにはAG7とCxxが入力され、論理積回路331pはAG’7を出力する。
論理積回路331a〜331pは、入力された2種類のフラグの値が両方とも1である場合に、1を出力し、それ以外の場合、0を出力する。つまり、上記第1のフラグ(C0〜C7,CE0〜CE4)、第3のフラグ(A0〜A3,AG5〜AG7)、第1のシンドロームコード(S0〜S4)、第2のシンドロームコード(Q5〜Q7)、ECC検査部分行列、及び、チェックビット検査行列により説明すると、エラー通知信号生成回路331は以下のようにフラグを生成する。エラー通知信号生成回路331は、第1の条件と第2の条件をともに満たす場合に限り、第1のシンドロームコード(S0〜S4)がECC部分検査行列のt列目(ただし、tは正整数)のビットパターンと一致していることを示す第5のフラグ(C’0〜C’7,CE’0〜CE’4)を生成する。ここで、第1の条件は、第1のフラグ(C0〜C7,CE0〜CE4)が、第1のシンドロームコード(S0〜S4)がECC生成部分行列のt列目のビットパターンと一致していることを示すという条件である。第2の条件は、第3のフラグ(A0〜A3,AG5〜AG7)が、第2のシンドロームコード(Q5〜Q4)がチェックビット検査行列のt列目のビットパターンと一致していることを示すという条件である。
誤りビット位置特定補助フラグ(A0)は、シンドロームコード(Q5〜Q7)のビットパターンが、図33に示すチェックビット生成行列におけるD0又はD7に対応する列のビットパターン、すなわち(0,0,0)と一致する場合に1になるフラグである。したがって、論理積回路331qには、シンドローム復号回路310から出力された誤り無しフラグ(Cxx)とシンドローム復号回路312から出力された誤りビット位置特定補助フラグ(A0)が入力される。そして、論理積回路331qは、入力された値が両方とも1である場合に、1を出力し、それ以外の場合、0を出力する。つまり、上述の第2のフラグ(Cxx)、第3のフラグ(A0〜A3,AG5〜AG7)、第1のシンドロームコード(S0〜S4)、及び第2のシンドロームコード(Q5〜Q7)により説明すると、エラー通知信号生成回路331は以下のようにフラグ(C’xx)を生成する。エラー通知信号生成回路331は、第2のフラグ(Cxx)が、第1のシンドロームコード(S0〜S4)の各ビットが全て0であることを示し、かつ、所定の第3のフラグ(A0)が、第2のシンドロームコード(Q5〜Q7)の各ビットが全て0であることを示す場合に限り、第1のシンドロームコード(S0〜S4)の各ビットが全て0であることを示す第6のフラグ(C’xx)を生成する。
フラグ(C’0〜C’7,CE’0〜CE’4,AG’5〜AG’7)は論理和回路331rに入力され、フラグ(C’xx)は、否定論理和回路331sに入力される。論理和回路331r及び否定論理和回路331sにより、通知処理部320Bと同様の回路が構成される。すなわち、論理和回路331rは、図9の論理和回路320iに対応しており、否定論理和回路331sは図9の否定論理和回路320jに対応している。このような構成により、エラー通知信号生成回路331は、誤りビット位置フラグ(C’0〜C’7,CE’0〜CE’4)及び誤り無しフラグ(C’xx)に基づいて、1ビットエラー通知信号及び2ビットエラー通知信号からなるエラー通知信号を生成する。
本実施の形態では、デコーダ装置30Dは、シンドローム復号回路310の出力とシンドローム復号回路312の出力の比較結果に基づいてエラー通知を行う。すなわち、デコーダ装置30Dは、エラー通知信号生成回路331により確度が高められた誤りビット位置フラグ(C’0〜C’7,CE’0〜CE’4)の値及び誤り無しフラグ(C’xx)の値に基づいてエラー通知を行う。このエラー通知は、ECCによる誤り検出結果とチェックビットによる誤り検出結果を統合したエラー通知となっている。したがって、本実施の形態においても、誤りの検出性能を向上させることができる。
図38は、実施の形態4にかかる誤り検出のアルゴリズムにおいて発生する、誤り検出の見逃しについてまとめた表である。また、図39は、実施の形態4にかかる誤り検出のアルゴリズムにおいて発生する誤訂正のケースの個数をまとめた表である。これらの表の見方は、図10及び図11と同様である。ただし、実施の形態4では、8ビットのライトデータ(D0〜D7)と、5ビットのECC(E0〜E4)と3ビットのチェックビット(G5〜G7)がメモリ6に格納される。このため、図38及び図39は、k=1からk=16までについて結果を示している。
図10及び図38からわかるように、誤りの検出見逃しの総数は変らないものの、比較例では、k=4において、55個の誤りの検出見逃しが発生していたが、実施の形態4では、これが9個となっている。また、比較例では、k=5及びk=6において合計96個の誤りの検出見逃しが発生していたが、実施の形態3では、これが76個となっている。このように、実施の形態4では、kの値が比較的小さい場合における見逃し個数を減少させることが可能となる。また、これにともない、図11及び図39からわかるように、kの値が比較的小さい場合における誤訂正の個数も減少している。
<実施の形態の変形例>
最後に、実施の形態の変形例について説明する。上述の実施の形態ではECC(チェックビット)を生成する回路への入力データのビット位置をローテーションしていたが、他の方法が用いられてもよい。例えば、一部のビット位置を入れ替えたデータを用いてチェックビットが生成されてもよい。
また、エンコーダ装置に適用される2種類のECC生成行列の列のビットパターンの組み合わせは、異なっていてもよい。すなわち、一方のECC生成行列の各列に現れるビットパターンに含まれない別のビットパターンがECCとして使用可能である場合には、一方のECC生成行列のいずれかの列のビットパターンを、当該別のビットパターンで置き換えることで、他方のECC生成行列を構成してもよい。なお、さらに、ビット位置のローテーション又は一部のビット位置の入れ換えを併用することも可能である。
実施の形態1〜4では、多ビット誤りとして、例えば、いずれかのビットの値が反転する(ビットの値が“0”から“1”になる、または“1”から“0”になる)誤りが想定されるが、他の態様の多ビット誤りの検出が行われてもよい。例えば、データ信号系の処理回路又は入出力端子の故障などによって発生する多ビット誤りでは、複数ビットからなるデータのすべて、または回路の構成に依存した所定のビット幅のデータがStuck-at故障する(ビットの値が“0”または“1”に固着する)ことが想定される。そのような想定の場合であっても、多ビット誤りの検出性能を同様に向上させることができる。
ところで、たとえば、図3のECC生成行列と図7のECC検査行列が用いられる場合、データの全ビットが0だとECCの全ビットも0になる。このため、データとECCの全ビットがStuck-at故障(0に固着)した多ビット誤りは原理的に見逃してしまう。しかしながら、ECCのいずれかのビットについては反転値をメモリに格納するようにすれば、その誤りは見逃すことなく検出可能になる。したがって、Stuck-at故障(“0”または“1”に固着)を想定する場合は、ECC(とチェックビット)のいずれか特定のビットの値を反転させて用いることによっても、多ビット誤りを見逃す確率(割合)を減らせる可能性がある。すなわち、ECC生成行列に従ってデータから生成したECCのいずれかの特定のビットの値を反転させてメモリに格納すると共に、メモリから読み出したECCのその特定のビットの値は反転させてからECC検査行列に従ってシンドロームを生成することにより、多ビット誤りを見逃す確率(割合)を減らしうる。これは、ECCデコーダ回路におけるシンドローム生成回路の入力となるリードデータの各ビットの値とECC(とチェックビット)の各ビットの値とが独立ではないため、Stuck-at故障(“0”または“1”に固着)による多ビット誤りの組合せの総数が減り、また多ビット誤りの見逃し・誤訂正のケースの個数も減るためである。
実施の形態1〜4は、例えば、メモリに対する読み書きのためのインタフェース回路におけるデータ信号系の処理回路又は入出力端子(並びに、メモリ内部のデータ入出力回路)の故障によって発生する多ビット誤りの検出性能を上げることが可能である。しかしながら、誤り検出のための上述の構成が他の態様で利用されてもよい。例えば、メモリに対するデータ読み書きのために付加するECC(とチェックビット)による処理を行う構成と、SOCの内部バスのデータ転送のために付加するEDC(Error Detecting Code)による処理を行う構成とを統合した構成により誤り検出が行われてもよい。
ところで、メモリに対するデータ読み書きのためにECCを付加する場合、ECCデコーダ回路に故障が発生して1ビット誤り訂正・2ビット誤り検出機能が正常に働かなくなることを防ぐために、ハードウェアを二重化する構成が採用されることがある。この構成では、もう1つ追加でECCデコーダ回路(チェック用)を設け、本来のECCデコーダ回路の出力信号と追加のECCデコーダ回路(チェック用)の出力信号が一致していることを比較回路によりチェックする。同様に、ECCエンコーダ回路についても、同様のハードウェアの二重化の構成が採用されることがある。上述の実施の形態では、追加でECCデコーダ回路(チェックビット用)とECCエンコーダ回路(チェックビット用)を設ける構成によって、上述のハードウェア二重化の構成とは異なるものの、ECCデコーダ回路やECCエンコーダ回路の故障に対して、ハードウェア二重化と同等の効果が得られることになる。
なお、以上の説明では、エンコーダ装置及びデコーダ装置が、ハードウェア回路により実装される構成について説明したが、エンコーダ装置の一部若しくは全部、又はデコーダ装置の一部若しくは全部が、命令を含むプログラムがプロセッサにより実行されることによりソフトウェア的に実現されてもよい。
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。例えば、入力データ、ECC、チェックビットなどのビット数は一例であり、これらのビット数が、上記の実施の形態で示したビット数以外のビット数であってもよい。
上記実施の形態の一部または全部は、以下の付記のようにも記載され得るが、以下には限られない。
(付記1)
エンコーダ装置と、
デコーダ装置と
を備え、
前記エンコーダ装置は、
第1のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECC(Error Correction Code)を生成する第1のエンコーダ部と、
前記第1のECC生成行列の列を入れ替えた第2のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECCを生成する第2のエンコーダ部と
を有し、
前記第1のエンコーダ部には、第1のデータが入力され、前記第1のエンコーダ部は、前記第1のデータに対する第1のECCを生成し、
前記第2のエンコーダ部には、前記第1のデータのビットを入れ替えた第2のデータが入力され、前記第2のエンコーダ部は、前記第2のデータに対する第2のECCを生成し、
前記エンコーダ装置は、前記第1のデータと、前記第1のECCと、前記第2のECCとをメモリに格納し、
前記デコーダ装置は、前記メモリから読み出された前記第1のデータと、前記第1のECCと、前記第2のECCとに基づいて、前記第1のデータの誤りの発生状態について示す通知信号を生成する
データ処理装置。
(付記2)
前記デコーダ装置は、
前記メモリから読み出された前記第1のデータ及び前記第1のECCからなる第1のビット列が入力され、前記第1のビット列に訂正可能な1ビットの誤りが存在するか否かを示す第1の判定信号と、前記第1のビット列に2ビット以上の誤りが存在するか否かを示す第2の判定信号とを生成する第1のデコーダ部と、
前記メモリから読み出された前記第1のデータを前記第2のデータと同じくビットを入れ替えた第3のデータと、前記メモリから読み出された前記第2のECCとからなる第2のビット列が入力され、前記第2のビット列に訂正可能な1ビットの誤りが存在するか否かを示す第3の判定信号と、前記第2のビット列に2ビット以上の誤りが存在するか否かを示す第4の判定信号とを生成する第2のデコーダ部と、
前記第1の判定信号と、前記第2の判定信号と、前記第3の判定信号と、前記第4の判定信号とに基づいて、前記通知信号を生成する通知部と、
を有する付記1に記載のデータ処理装置。
(付記3)
前記通知部は、前記第1の判定信号及び前記第3の判定信号のいずれか一方のみが、訂正可能な1ビットの誤りが存在することを示す場合、前記メモリから読み出された前記第1のデータ、前記第1のECC、及び前記第2のECCからなるビット列が2ビット以上の誤りを含むことを示す前記通知信号を生成する
付記2に記載のデータ処理装置。
(付記4)
前記通知部は、前記第2の判定信号又は前記第4の判定信号の少なくとも一方が、2ビット以上の誤りが存在することを示す場合、前記メモリから読み出された前記第1のデータ、前記第1のECC、及び前記第2のECCからなるビット列が2ビット以上の誤りを含むことを示す前記通知信号を生成する
付記2に記載のデータ処理装置。
(付記5)
前記デコーダ装置は、
前記メモリから読み出された前記第1のデータ及び前記第1のECCから第1のシンドロームコードを生成し、前記第1のシンドロームコードが前記第1のECC生成行列及び単位行列からなる第1のECC検査行列のいずれかの列のビットパターンと一致しているか否かを示す第1のフラグと、前記第1のシンドロームコードの各ビットが全て0であるか否かを示す第2のフラグを生成する第1のシンドローム部と、
前記メモリから読み出された前記第1のデータを前記第2のデータと同じくビットを入れ替えた第3のデータと前記メモリから読み出された前記第2のECCから、第2のシンドロームコードを生成し、前記第2のシンドロームコードが前記第2のECC生成行列及び単位行列からなる第2のECC検査行列のいずれかの列のビットパターンと一致しているか否かを示す第3のフラグと、前記第2のシンドロームコードの各ビットが全て0であるか否かを示す第4のフラグを生成する第2のシンドローム部と、
前記第1のフラグと前記第3のフラグとを比較するとともに、前記第2のフラグと前記第4のフラグとを比較するシンドロームチェック部と
を有し、
前記デコーダ装置は、前記シンドロームチェック部の比較結果に基づいて、前記通知信号を生成する
付記1に記載のデータ処理装置。
(付記6)
前記シンドロームチェック部は、
前記第1のフラグが、前記第1のシンドロームコードが前記第1のECC検査行列のt列目(ただし、tは正整数であり、前記第1のECC検査行列に含まれる前記第1のECC生成行列のいずれかの列に相当する列番号である)のビットパターンと一致していることを示し、かつ、前記第3のフラグも、前記第2のシンドロームコードが前記第2のECC検査行列のt列目のビットパターンと一致していることを示す場合に限り、前記第1のシンドロームコードが前記第1のECC検査行列のt列目のビットパターンと一致していることを示すフラグを第5のフラグとして出力し、
前記第1のフラグが、前記第1のシンドロームコードが前記第1のECC検査行列のs列目(ただし、sは正整数であり、前記第1のECC検査行列に含まれる前記単位行列のいずれかの列に相当する列番号である)のビットパターンと一致していることを示す場合、又は、前記第3のフラグが、前記第2のシンドロームコードが前記第2のECC検査行列のs列目のビットパターンと一致していることを示す場合、前記第1のシンドロームコードが前記第1のECC検査行列のs列目のビットパターンと一致していることを示すフラグを前記第5のフラグとして出力する
付記5に記載のデータ処理装置。
(付記7)
前記デコーダ装置は、前記第5のフラグに基づいて、前記メモリから読み出された前記第1のデータの1ビットの誤りを訂正する誤り訂正部をさらに有する
付記6に記載のデータ処理装置。
(付記8)
前記シンドロームチェック部は、前記第2のフラグが、前記第1のシンドロームコードの各ビットが全て0であることを示し、かつ、前記第4のフラグが、前記第2のシンドロームコードの各ビットが全て0であることを示す場合に限り、前記第1のシンドロームコードの各ビットが全て0であることを示す第6のフラグを出力し、
前記デコーダ装置は、前記第5のフラグの値及び前記第6のフラグの値に基づいて前記通知信号を生成する通知部をさらに有する
付記6に記載のデータ処理装置。
(付記9)
前記第2のECC生成行列は、前記第1のECC生成行列の各列をローテーションさせた行列であり、
前記第2のデータは、前記第1のデータの各ビットをローテーションさせたデータである
付記1に記載のデータ処理装置。
(付記10)
前記第2のECC生成行列は、前記第1のECC生成行列において、所定の行の値が同じである複数の列を入れ替えた行列であり、
前記エンコーダ装置は、前記第1のデータと、前記第1のエンコーダ部により生成された前記第1のECCの全ビットと、前記第2のエンコーダ部により生成された前記第2のECCの一部のビットとを前記メモリに格納し、
前記一部のビットは、前記第2のECC生成行列における前記所定の行以外の行を用いた演算により得られるビットであり、
前記デコーダ装置は、前記メモリから読み出された前記第1のデータと、前記第1のECCと、前記第2のECCの前記一部のビットとに基づいて、前記通知信号を生成する
付記1に記載のデータ処理装置。
(付記11)
エンコーダ装置と、
デコーダ装置と
を備え、
前記エンコーダ装置は、
1ビット誤り訂正及び2ビット誤り検出が可能なpビット(ただし、pは正整数)のECC(Error Correction Code)を生成するための第1のECC生成行列のq行(ただし、qはp未満の正整数)の部分行列に従って演算することによりqビットのチェックビットを生成するチェックビット生成部と、
前記第1のECC生成行列から前記q行の部分行列を除いた部分行列であるr行(ただし、r=p−q)の第2のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なrビットのECCを生成するECC生成部と、
を有し、
前記ECC生成部には、第1のデータが入力され、前記ECC生成部は、前記第1のデータに対する前記ECCを生成し、
前記チェックビット生成部には、前記第1のデータが入力され、前記チェックビット生成部は、前記第1のデータに対する前記チェックビットを生成し、
前記エンコーダ装置は、前記第1のデータと、前記ECCと、前記チェックビットとをメモリに格納し、
前記デコーダ装置は、
前記メモリから読み出された前記第1のデータ及び前記ECCから第1のシンドロームコードを生成し、前記第1のシンドロームコードが前記第1のECC生成行列及び単位行列からなるECC検査行列におけるr行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第1のフラグと、前記第1のシンドロームコードの各ビットが全て0であるか否かを示す第2のフラグを生成する第1のシンドローム部と、
前記メモリから読み出された前記第1のデータ及び前記チェックビットから第2のシンドロームコードを生成し、前記第2のシンドロームコードが前記第1のECC生成行列及び単位行列からなるECC検査行列におけるq行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第3のフラグを生成する第2のシンドローム部と、
前記第1のシンドローム部により生成されたフラグと前記第2のシンドローム部により生成されたフラグとを比較し、比較結果に基づいて、前記第1のデータの誤りの発生状態について示す通知信号を生成する通知部と
を有する
データ処理装置。
(付記12)
第1のECC生成行列に従って演算することにより、第1のデータに対し、1ビット誤り訂正及び2ビット誤り検出が可能な第1のECC(Error Correction Code)を生成し、
前記第1のECC生成行列の列を入れ替えた第2のECC生成行列に従って演算することにより、前記第1のデータのビットを入れ替えた第2のデータに対し、1ビット誤り訂正及び2ビット誤り検出が可能な第2のECCを生成し、
前記第1のデータと、前記第1のECCと、前記第2のECCとをメモリに格納し、
前記メモリから読み出された前記第1のデータと、前記第1のECCと、前記第2のECCとに基づいて、前記第1のデータの誤りの発生状態について示す通知信号を生成する
データ処理方法。
(付記13)
1ビット誤り訂正及び2ビット誤り検出が可能なpビット(ただし、pは正整数)のECC(Error Correction Code)を生成するための第1のECC生成行列のq行(ただし、qはp未満の正整数)の部分行列に従って演算することにより、第1のデータに対するqビットのチェックビットを生成し、
前記第1のECC生成行列から前記q行の部分行列を除いた部分行列であるr行(ただし、r=p−q)の第2のECC生成行列に従って演算することにより、前記第1のデータに対し、1ビット誤り訂正及び2ビット誤り検出が可能なrビットのECCを生成し、
前記第1のデータと、前記ECCと、前記チェックビットとをメモリに格納し、
前記メモリから読み出された前記第1のデータ及び前記ECCから第1のシンドロームコードを生成し、前記第1のシンドロームコードが前記第1のECC生成行列及び単位行列からなるECC検査行列におけるr行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第1のフラグと、前記第1のシンドロームコードの各ビットが全て0であるか否かを示す第2のフラグを生成し、
前記メモリから読み出された前記第1のデータ及び前記チェックビットから第2のシンドロームコードを生成し、前記第2のシンドロームコードが前記第1のECC生成行列及び単位行列からなるECC検査行列におけるq行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第3のフラグを生成し、
前記第1のシンドロームコードに基づいて生成されたフラグと第2のシンドロームコードに基づいて生成されたフラグとを比較し、
前記比較の結果に基づいて、前記第1のデータの誤りの発生状態について示す通知信号を生成する
データ処理方法。
1 データ処理装置
2、20、20A、20B、20C、90 エンコーダ装置
3、30、30A、30B、30C、30D、91 デコーダ装置
4、5 エンコーダ部
6 メモリ
10 入出力インタフェース
21、22、23 ECCエンコーダ回路
24 チェックビット生成回路
31、32、34 ECCデコーダ回路
33 エラー通知チェック回路
200、201 ECC生成回路
300、301、302、303 シンドローム生成回路
310、311、312 シンドローム復号回路
320、321 誤り訂正回路
320A、321A 訂正処理部
320B、321B 通知処理部
330 シンドロームチェック回路
331 エラー通知信号生成回路

Claims (12)

  1. エンコーダ装置と、
    デコーダ装置と
    を備え、
    前記エンコーダ装置は、
    第1のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECC(Error Correction Code)を生成する第1のエンコーダ部と、
    前記第1のECC生成行列の列を入れ替えた第2のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なECCを生成する第2のエンコーダ部と
    を有し、
    前記第1のエンコーダ部には、第1のデータが入力され、前記第1のエンコーダ部は、前記第1のデータに対する第1のECCを生成し、
    前記第2のエンコーダ部には、前記第1のデータのビットを入れ替えた第2のデータが入力され、前記第2のエンコーダ部は、前記第2のデータに対する第2のECCを生成し、
    前記エンコーダ装置は、前記第1のデータと、前記第1のECCと、前記第2のECCとをメモリに格納し、
    前記デコーダ装置は、前記メモリから読み出された前記第1のデータと、前記第1のECCと、前記第2のECCとに基づいて、前記第1のデータの誤りの発生状態について示す通知信号を生成する
    データ処理装置。
  2. 前記デコーダ装置は、
    前記メモリから読み出された前記第1のデータ及び前記第1のECCからなる第1のビット列が入力され、前記第1のビット列に訂正可能な1ビットの誤りが存在するか否かを示す第1の判定信号と、前記第1のビット列に2ビット以上の誤りが存在するか否かを示す第2の判定信号とを生成する第1のデコーダ部と、
    前記メモリから読み出された前記第1のデータを前記第2のデータと同じくビットを入れ替えた第3のデータと、前記メモリから読み出された前記第2のECCとからなる第2のビット列が入力され、前記第2のビット列に訂正可能な1ビットの誤りが存在するか否かを示す第3の判定信号と、前記第2のビット列に2ビット以上の誤りが存在するか否かを示す第4の判定信号とを生成する第2のデコーダ部と、
    前記第1の判定信号と、前記第2の判定信号と、前記第3の判定信号と、前記第4の判定信号とに基づいて、前記通知信号を生成する通知部と、
    を有する請求項1に記載のデータ処理装置。
  3. 前記通知部は、前記第1の判定信号及び前記第3の判定信号のいずれか一方のみが、訂正可能な1ビットの誤りが存在することを示す場合、前記メモリから読み出された前記第1のデータ、前記第1のECC、及び前記第2のECCからなるビット列が2ビット以上の誤りを含むことを示す前記通知信号を生成する
    請求項2に記載のデータ処理装置。
  4. 前記通知部は、前記第2の判定信号又は前記第4の判定信号の少なくとも一方が、2ビット以上の誤りが存在することを示す場合、前記メモリから読み出された前記第1のデータ、前記第1のECC、及び前記第2のECCからなるビット列が2ビット以上の誤りを含むことを示す前記通知信号を生成する
    請求項2に記載のデータ処理装置。
  5. 前記デコーダ装置は、
    前記メモリから読み出された前記第1のデータ及び前記第1のECCから第1のシンドロームコードを生成し、前記第1のシンドロームコードが前記第1のECC生成行列及び単位行列からなる第1のECC検査行列のいずれかの列のビットパターンと一致しているか否かを示す第1のフラグと、前記第1のシンドロームコードの各ビットが全て0であるか否かを示す第2のフラグを生成する第1のシンドローム部と、
    前記メモリから読み出された前記第1のデータを前記第2のデータと同じくビットを入れ替えた第3のデータと前記メモリから読み出された前記第2のECCから、第2のシンドロームコードを生成し、前記第2のシンドロームコードが前記第2のECC生成行列及び単位行列からなる第2のECC検査行列のいずれかの列のビットパターンと一致しているか否かを示す第3のフラグと、前記第2のシンドロームコードの各ビットが全て0であるか否かを示す第4のフラグを生成する第2のシンドローム部と、
    前記第1のフラグと前記第3のフラグとを比較するとともに、前記第2のフラグと前記第4のフラグとを比較するシンドロームチェック部と
    を有し、
    前記デコーダ装置は、前記シンドロームチェック部の比較結果に基づいて、前記通知信号を生成する
    請求項1に記載のデータ処理装置。
  6. 前記シンドロームチェック部は、前記第1のフラグが、前記第1のシンドロームコードが前記第1のECC検査行列のt列目(ただし、tは正整数であり、前記第1のECC検査行列に含まれる前記第1のECC生成行列のいずれかの列に相当する列番号である)のビットパターンと一致していることを示し、かつ、前記第3のフラグも、前記第2のシンドロームコードが前記第2のECC検査行列のt列目のビットパターンと一致していることを示す場合に限り、前記第1のシンドロームコードが前記第1のECC検査行列のt列目のビットパターンと一致していることを示すフラグを第5のフラグとして出力し、
    前記第1のフラグが、前記第1のシンドロームコードが前記第1のECC検査行列のs列目(ただし、sは正整数であり、前記第1のECC検査行列に含まれる前記単位行列のいずれかの列に相当する列番号である)のビットパターンと一致していることを示す場合、又は、前記第3のフラグが、前記第2のシンドロームコードが前記第2のECC検査行列のs列目のビットパターンと一致していることを示す場合、前記第1のシンドロームコードが前記第1のECC検査行列のs列目のビットパターンと一致していることを示すフラグを前記第5のフラグとして出力する
    請求項5に記載のデータ処理装置。
  7. 前記デコーダ装置は、前記第5のフラグに基づいて、前記メモリから読み出された前記第1のデータの1ビットの誤りを訂正する誤り訂正部をさらに有する
    請求項6に記載のデータ処理装置。
  8. 前記シンドロームチェック部は、前記第2のフラグが、前記第1のシンドロームコードの各ビットが全て0であることを示し、かつ、前記第4のフラグが、前記第2のシンドロームコードの各ビットが全て0であることを示す場合に限り、前記第1のシンドロームコードの各ビットが全て0であることを示す第6のフラグを出力し、
    前記デコーダ装置は、前記第5のフラグの値及び前記第6のフラグの値に基づいて前記通知信号を生成する通知部をさらに有する
    請求項6に記載のデータ処理装置。
  9. 前記第2のECC生成行列は、前記第1のECC生成行列の各列をローテーションさせた行列であり、
    前記第2のデータは、前記第1のデータの各ビットをローテーションさせたデータである
    請求項1に記載のデータ処理装置。
  10. 前記第2のECC生成行列は、前記第1のECC生成行列において、所定の行の値が同じである複数の列を入れ替えた行列であり、
    前記エンコーダ装置は、前記第1のデータと、前記第1のエンコーダ部により生成された前記第1のECCの全ビットと、前記第2のエンコーダ部により生成された前記第2のECCの一部のビットとを前記メモリに格納し、
    前記一部のビットは、前記第2のECC生成行列における前記所定の行以外の行を用いた演算により得られるビットであり、
    前記デコーダ装置は、前記メモリから読み出された前記第1のデータと、前記第1のECCと、前記第2のECCの前記一部のビットとに基づいて、前記通知信号を生成する
    請求項1に記載のデータ処理装置。
  11. エンコーダ装置と、
    デコーダ装置と
    を備え、
    前記エンコーダ装置は、
    1ビット誤り訂正及び2ビット誤り検出が可能なpビット(ただし、pは正整数)のECC(Error Correction Code)を生成するための第1のECC生成行列のq行(ただし、qはp未満の正整数)の部分行列に従って演算することによりqビットのチェックビットを生成するチェックビット生成部と、
    前記第1のECC生成行列から前記q行の部分行列を除いた部分行列であるr行(ただし、r=p−q)の第2のECC生成行列に従って演算することにより、1ビット誤り訂正及び2ビット誤り検出が可能なrビットのECCを生成するECC生成部と、
    を有し、
    前記ECC生成部には、第1のデータが入力され、前記ECC生成部は、前記第1のデータに対する前記ECCを生成し、
    前記チェックビット生成部には、前記第1のデータが入力され、前記チェックビット生成部は、前記第1のデータに対する前記チェックビットを生成し、
    前記エンコーダ装置は、前記第1のデータと、前記ECCと、前記チェックビットとをメモリに格納し、
    前記デコーダ装置は、
    前記メモリから読み出された前記第1のデータ及び前記ECCから第1のシンドロームコードを生成し、前記第1のシンドロームコードが前記第1のECC生成行列及び単位行列からなるECC検査行列におけるr行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第1のフラグと、前記第1のシンドロームコードの各ビットが全て0であるか否かを示す第2のフラグを生成する第1のシンドローム部と、
    前記メモリから読み出された前記第1のデータ及び前記チェックビットから第2のシンドロームコードを生成し、前記第2のシンドロームコードが前記第1のECC生成行列及び単位行列からなるECC検査行列におけるq行の部分行列のいずれかの列のビットパターンと一致しているか否かを示す第3のフラグを生成する第2のシンドローム部と、
    前記第1のシンドローム部により生成されたフラグと前記第2のシンドローム部により生成されたフラグとを比較し、比較結果に基づいて、前記第1のデータの誤りの発生状態について示す通知信号を生成する通知部と
    を有する
    データ処理装置。
  12. 第1のECC生成行列に従って演算することにより、第1のデータに対し、1ビット誤り訂正及び2ビット誤り検出が可能な第1のECC(Error Correction Code)を生成し、
    前記第1のECC生成行列の列を入れ替えた第2のECC生成行列に従って演算することにより、前記第1のデータのビットを入れ替えた第2のデータに対し、1ビット誤り訂正及び2ビット誤り検出が可能な第2のECCを生成し、
    前記第1のデータと、前記第1のECCと、前記第2のECCとをメモリに格納し、
    前記メモリから読み出された前記第1のデータと、前記第1のECCと、前記第2のECCとに基づいて、前記第1のデータの誤りの発生状態について示す通知信号を生成する
    データ処理方法。
JP2017243558A 2017-12-20 2017-12-20 データ処理装置及びデータ処理方法 Pending JP2019109806A (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2017243558A JP2019109806A (ja) 2017-12-20 2017-12-20 データ処理装置及びデータ処理方法
US16/175,567 US10735028B2 (en) 2017-12-20 2018-10-30 Data processing device and data processing method
EP18206176.2A EP3503411B1 (en) 2017-12-20 2018-11-14 Improved single error correction and double error detection
TW107144264A TW201929442A (zh) 2017-12-20 2018-12-10 資料處理裝置及資料處理方法
CN201811557353.6A CN109947674A (zh) 2017-12-20 2018-12-19 数据处理器件和数据处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017243558A JP2019109806A (ja) 2017-12-20 2017-12-20 データ処理装置及びデータ処理方法

Publications (1)

Publication Number Publication Date
JP2019109806A true JP2019109806A (ja) 2019-07-04

Family

ID=64331678

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017243558A Pending JP2019109806A (ja) 2017-12-20 2017-12-20 データ処理装置及びデータ処理方法

Country Status (5)

Country Link
US (1) US10735028B2 (ja)
EP (1) EP3503411B1 (ja)
JP (1) JP2019109806A (ja)
CN (1) CN109947674A (ja)
TW (1) TW201929442A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11831337B2 (en) 2021-06-29 2023-11-28 Renesas Electronics Corporation Semiconductor device and error detection methods

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210019676A (ko) * 2019-08-13 2021-02-23 삼성전자주식회사 메모리 컨트롤러의 구동방법, 스토리지 장치 및 그 구동방법
JP2021150733A (ja) * 2020-03-17 2021-09-27 キオクシア株式会社 半導体装置及び半導体記憶装置
US11416331B2 (en) * 2020-12-09 2022-08-16 Micron Technology, Inc. Modified checksum using a poison data pattern

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6675344B1 (en) * 2000-05-01 2004-01-06 Hewlett-Packard Development Company, L.P. Multiple ECC schemes to improve bandwidth
US6675349B1 (en) * 2000-05-11 2004-01-06 International Business Machines Corporation Error correction coding of data blocks with included parity bits
US6289000B1 (en) * 2000-05-19 2001-09-11 Intellon Corporation Frame control encoder/decoder for robust OFDM frame transmissions
US7069494B2 (en) * 2003-04-17 2006-06-27 International Business Machines Corporation Application of special ECC matrix for solving stuck bit faults in an ECC protected mechanism
JP2005004288A (ja) 2003-06-10 2005-01-06 Digital Electronics Corp 誤り検出回路
JP3743915B2 (ja) * 2003-12-15 2006-02-08 国立大学法人東京工業大学 スポッティバイト誤り訂正・検出方法及び装置
JP2006060465A (ja) * 2004-08-19 2006-03-02 Tokyo Institute Of Technology スポッティバイト誤り訂正・検出方法及び装置
US8539321B2 (en) * 2010-11-10 2013-09-17 Infineon Technologies Ag Apparatus and method for correcting at least one bit error within a coded bit sequence
US8984372B2 (en) * 2012-11-21 2015-03-17 Nvidia Corporation Techniques for storing ECC checkbits in a level two cache
JP6212396B2 (ja) * 2014-01-08 2017-10-11 ルネサスエレクトロニクス株式会社 データ処理装置
US10176040B2 (en) * 2016-04-05 2019-01-08 Micron Technology, Inc. Error correction code (ECC) operations in memory
GB2550929A (en) * 2016-05-31 2017-12-06 Advanced Risc Mach Ltd An apparatus and method for generating an error code for a block comprising a plurality of data bits and a plurality of address bits
KR102479212B1 (ko) * 2016-08-17 2022-12-20 삼성전자주식회사 반도체 메모리 장치, 이를 포함하는 메모리 시스템 및 이의 동작 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11831337B2 (en) 2021-06-29 2023-11-28 Renesas Electronics Corporation Semiconductor device and error detection methods

Also Published As

Publication number Publication date
US10735028B2 (en) 2020-08-04
CN109947674A (zh) 2019-06-28
TW201929442A (zh) 2019-07-16
EP3503411A3 (en) 2019-08-07
US20190190540A1 (en) 2019-06-20
EP3503411B1 (en) 2023-07-05
EP3503411A2 (en) 2019-06-26

Similar Documents

Publication Publication Date Title
JP2019109806A (ja) データ処理装置及びデータ処理方法
US7398449B1 (en) Encoding 64-bit data nibble error correct and cyclic-redundancy code (CRC) address error detect for use on a 76-bit memory module
US7203890B1 (en) Address error detection by merging a polynomial-based CRC code of address bits with two nibbles of data or data ECC bits
US8539303B2 (en) Low overhead error correcting code protection for stored information
US9979416B2 (en) Memory controller and method of data bus inversion using an error detection correction code
CN107436821B (zh) 为包括多个数据位和地址位的块生成错误码的装置和方法
US9195551B2 (en) Enhanced storage of metadata utilizing improved error detection and correction in computer memory
US9912355B2 (en) Distributed concatenated error correction
KR102231294B1 (ko) 복수의 레벨의 오류 정정을 제공하는 정보 처리 장치 및 시스템, 및 그것의 동작 방법
KR20040064259A (ko) 컴포넌트 실패를 검출 및 보정하고, 컴포넌트 실패 후에단일 비트 에러보정을 제공하는 에러검출/보정 코드
JPS63115239A (ja) エラ−検査訂正回路
KR101050744B1 (ko) 오류 판정 회로 및 공유 메모리 시스템
JP2001249854A (ja) メモリ設計のための共有式誤り訂正
JPH087721B2 (ja) エラー検出/訂正機構を有するデータ処理システム
US5631915A (en) Method of correcting single errors
JP2015222467A (ja) マイクロコントローラ及びそれを用いた電子制御装置
US10860419B2 (en) Minimal aliasing bit-error correction code
US8332727B2 (en) Error correction circuit, flash memory system including the error correction circuit, and operating method of the error correction circuit
JPH0529935B2 (ja)
JP2023512892A (ja) 比較システム
US10270471B2 (en) Memory system having ECC self-checking function and associated method
US20230085730A1 (en) Hard decoding methods in data storage devices
CN112346903B (zh) 用于执行内建式自我测试的独立磁盘冗余数组译码系统
TW201710900A (zh) 資料儲存系統與其相關方法
CN110716824B (zh) 编码方法及使用所述编码方法的存储器存储装置