(57)【要約】【課題】比較的小さい演算規模で高速の４ビットエラー訂正を可能としたエラー検出訂正システムを搭載したメモリ装置を提供する。【解決手段】ガロア有限体を用いて読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、前記エラー検出訂正システムは、読み出しデータから求められたシンドロームに基づいて有限体要素間の積や和を計算する計算回路を備えてエラー位置探索を行うものであり、前記計算回路は、内部クロックにより時分割で使用される共通化回路を有する。【選択図】図８
2010108569.tif 000002
【特許請求の範囲】
【請求項１】
ガロア有限体を用いて読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、読み出しデータから求められたシンドロームに基づいて有限体要素間の積や和を計算する計算回路を備えてエラー位置探索を行うものであり、前記計算回路は、内部クロックにより時分割で使用される共通化回路を有する
ことを特徴とするメモリ装置。
【請求項２】
前記シンドロームのインデックスは、そのドメインを素因数分解して得られる、互いに素である数を法とする表現インデックスの組で表すものとし、
前記計算回路は、前記表現インデックスで表された有限体要素間の積を計算するアダー回路と和を計算するパリティチェッカ回路とを有し、前記アダー回路とパリティチェッカ回路がそれぞれ、前記内部クロックにより時分割で使用される共通化回路を持ち、かつ
前記エラー検出訂正システムは、４ビットまでのエラー訂正を行うものであって、１ビットエラー、２ビットエラー、３ビットエラー及び４ビットエラーへのエラー探索の分岐を、前記シンドロームから導かれた量の間の排他的条件に従って判定し、各分岐先でエラー位置が求まらない場合に５ビットエラーと判定する
ことを特徴とする請求項１記載のメモリ装置。
【請求項３】
前記エラー検出訂正システムは、ガロア有限体ＧＦ（２１０）を用いて、その有限体要素のインデックスを、３，１１及び３１を法とする表現インデックスの組で表して、有限体要素間の積和演算を行う
ことを特徴とする請求項１記載のメモリ装置。
【請求項４】
ガロア有限体を用いてメモリコアの読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、
前記メモリコアに情報ビットと共に書き込むべきチェックビットを生成するエンコード部と、
前記メモリコアの読み出しデータからシンドロームを求めるシンドローム演算部と、
求められたシンドロームに基づいて有限体要素間の計算を行い、エラー位置探索の計算に必要な各種量を求めるシンドローム要素計算部と、
前記シンドローム要素計算部とのデータ授受と有限体要素間の計算によりエラー位置探索の計算を行うエラー探索部と、
前記シンドローム要素計算部及びエラー探索部において有限体要素間の積演算を行うアダー回路及び和演算を行うパリティチェック回路について、それぞれ時分割で動作させるための内部クロックを生成するクロック発生器と、を有する
ことを特徴とするメモリ装置。
【請求項５】
ガロア有限体を用いて読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、エラー位置を表す有限体要素を根とする３次のエラー探索方程式を解く際に、前記エラー探索方程式の係数をシンドロームで表現した２元連立方程式を解いて係数を確定し、更に前記エラー探索方程式を２次方程式と１次方程式の積の形に変換して、その解探索を行う
ことを特徴とするメモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＥＣＣシステムを搭載したメモリ装置に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリ、抵抗変化メモリ（Ｒｅｓｉｓｔａｎｃｅ  Ｃｈａｎｇｅ ＲＡＭ：ＲｅＲＡＭ）、相変化メモリ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  ＲＡＭ：ＰＣＲＡＭ）などの大容量メモリでは、データ保持中などに様々な原因で記憶内容が壊れる。特にデータの保持状態として使用する物理的機構が外乱の影響を受け易い場合であって、今後メモリ容量の大規模化と製造プロセスの微細化が進むとエラー率は上昇する。このためメモリにオンチップでＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）システムを搭載することは重要な技術となる。
【０００３】
フラッシュメモリチップ内に、或いはこれを制御するメモリコントローラ内にＥＣＣ回路を搭載することは、従来より提案されている（例えば、特許文献１参照）。
【０００４】
ガロア有限体ＧＦ（２ｎ）を利用する、ＢＣＨコードを用いたＥＣＣシステム（ＢＣＨ−ＥＣＣシステム）で２ビット以上のエラー訂正を行う場合、エラー位置探索方程式の解を求めるのに、有限体の要素を逐次代入する方法を利用すると、演算時間は膨大となり、オンチップとした場合にもメモリの読み出しや書き込み性能を大幅に低下させる。
【０００５】
従って、そのような逐次探索によらず、メモリの性能を犠牲にしないようなＥＣＣシステムが望まれる。
【特許文献１】特開２０００−１７３２８９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
この発明は、比較的小さい演算規模で高速の４ビットエラー訂正を可能としたエラー検出訂正システムを搭載したメモリ装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
この発明の一態様によるメモリ装置は、ガロア有限体を用いて読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、読み出しデータから求められたシンドロームに基づいて有限体要素間の積や和を計算する計算回路を備えてエラー位置探索を行うものであり、前記計算回路は、内部クロックにより時分割で使用される共通化回路を有する
ことを特徴とする。
【０００８】
この発明の他の態様によるメモリ装置は、ガロア有限体を用いてメモリコアの読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、
前記メモリコアに情報ビットと共に書き込むべきチェックビットを生成するエンコード部と、
前記メモリコアの読み出しデータからシンドロームを求めるシンドローム演算部と、
求められたシンドロームに基づいて有限体要素間の計算を行い、エラー位置探索の計算に必要な各種量を求めるシンドローム要素計算部と、
前記シンドローム要素計算部とのデータ授受と有限体要素間の計算によりエラー位置探索の計算を行うエラー探索部と、
前記シンドローム要素計算部及びエラー探索部において有限体要素間の積演算を行うアダー回路及び和演算を行うパリティチェック回路について、それぞれ時分割で動作させるための内部クロックを生成するクロック発生器と、を有する
ことを特徴とする。
【０００９】
この発明の更に他の態様によるメモリ装置は、ガロア有限体を用いて読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、エラー位置を表す有限体要素を根とする３次のエラー探索方程式を解く際に、前記エラー探索方程式の係数をシンドロームで表現した２元連立方程式を解いて係数を確定し、更に前記エラー探索方程式を２次方程式と１次方程式の積の形に変換して、その解探索を行う
ことを特徴とする。
【発明の効果】
【００１０】
比較的小さい演算規模で高速の４ビットエラー訂正を可能としたエラー検出訂正システムを搭載したメモリ装置を提供することが出来る。
【発明を実施するための最良の形態】
【００１１】
以下、図面を参照して、この発明の実施の形態を説明する。
【００１２】
メモリの微細化や大容量化に伴い、メモリセルのデータ保持の信頼性は低下する。特にフラッシュメモリを多値化した場合や、近年開発された抵抗変化メモリや相変化メモリでは、データ状態の不安定性が避けられず、保持データはいずれ変化すると見なす必要がある。そこでメモリから読み出したデータを実際に使用する前にＥＣＣシステムによってエラー訂正を行なうことは必須の技術となる。
【００１３】
メモリ搭載のＥＣＣでは、リアルタイムでデータ訂正を行なう必要があるために、高速の計算処理が要求される。また、ランダムなエラー発生に対してはＢＣＨコードを用いたＥＣＣが有効であることは知られている。
【００１４】
高速のＢＣＨ−ＥＣＣシステムとして、本発明者は先に、４ビットエラー訂正を可能としたものを提案している（特願２００７−２１０６５９号）。しかし、４ビットエラー訂正を可能とするためには、回路システムは複雑になり、その演算規模も大きくなる。そこで出来る限り回路規模を縮小するシステムが望まれる。
【００１５】
以下の実施の形態では、４ビットエラー訂正可能なＢＣＨ−ＥＣＣシステムにおいて、計算過程の分岐条件を明確にし、演算回路のタイムシェアリングを徹底することで規模縮小を図る。またオンチップに最適なガロア有限体として好ましくは、ＧＦ（２１０）を選択する。このようなＥＣＣシステムをメモリにオンチップで搭載することによって、メモリ外部から見ればメモリの性能を落とさずにデータ保持の信頼性を向上したメモリを提供することが可能になる。
【００１６】
以下の実施の形態での技術内容の概略を説明すれば、次の通りである。
【００１７】
・有限体を利用して４ビットまでのエラー訂正を行なうＥＣＣシステムにおいて、１エラー、２エラー、３エラー、４エラーへのエラー探索への計算の分岐を、シンドロームから導かれた量の間の排他的条件を用いて行ない、分岐先で解が得られない場合は５エラー以上と判断する。
【００１８】
・有限体を利用して３ビットまでのエラー訂正を行なうＥＣＣシステムにおいて、エラー位置を表す有限体要素を根とする３次方程式から解を求める際、３次方程式を1次と2次の方程式の積の形に変換し、これらの方程式の係数を分解する前の３次方程式の係数から求めて２次方程式で解探索を行なう。
【００１９】
・有限体を利用してエラー訂正を行なうＥＣＣシステムにおいて、シンドロームから導かれる量の計算とエラー位置を表す要素を求める方程式の解探索で用いられる、“表現インデックス”で表された有限体要素間の積を計算するアダー回路と要素間の和を計算するパリティチェッカ回路とについて、物理的に出来る範囲で共通化し、これを内部クロックでタイムシェアリングして利用する。
【００２０】
ここで表現インデックスとは、有限体要素を、異なる素因数を法とする複数の数を成分とする組として表したものである。
【００２１】
・メモリに搭載するリアルタイムオンチップＥＣＣシステムにおいてガロア体ＧＦ(２１０)を利用して、３，１１及び３１を法とする数の組をガロア体の要素を表す表現インデックスとして用いる。
【００２２】
・有限体要素を複数の互いに素である数を法とする数を成分とする表現インデックスを用いて表現するＥＣＣシステムにおいて、有限体要素の表現インデックスの成分を求めるデコーダ回路の構成が表現インデックスの２成分に共通なデコーダのグループを作りこれらの出力の論理をとってそれぞれの表現インデックス成分を得る。
【００２３】
以下の実施の形態は、高速にリアルタイムでデータ処理が出来るオンチップＥＣＣの最大エラー訂正数と考えられる４ビットまでのエラー訂正を行い、５ビット以上のエラーに対して警告（Ｗａｒｎｉｎｇ）を発するシステム，４ＥＣ−ＥＷ−ＢＣＨシステム，を説明するのが目的であるが、４ＥＣ−ＥＷでは３ビット、２ビット、１ビットのデータ処理も分岐して行なうので、１ビットの場合も含め２ビットエラー訂正の原理から順次に説明していく。
【００２４】
［２ＥＣ−ＥＷ（2 error correction - error warning）−ＢＣＨシステムの原理説明］
・データのエンコーディング（encoding）
ガロア体ＧＦ（２）上の原始既約多項式をｍ１（ｘ）としてこの根をαとする。有限体としてＧＦ（２ｎ）を考えるので、ｍ１（ｘ）はｎ次の多項式となる。この根αを用いるとＧＦ（２ｎ）の要素は、ｈ＝２ｎ−１として、０，α０，α１，…，αｈ−２，αｈ−１の２ｎ個である。
【００２５】
二つのエラー訂正を行うには、更にα３を根とする原始既約多項式ｍ３（ｘ）を選択する。
【００２６】
これらの既約多項式からコード生成多項式ｇ（ｘ）＝ｍ１（ｘ）ｍ３（ｘ）を作る。
【００２７】
ＥＣＣシステムのコードを作る要素は有限体のゼロ因子を除くとｈ個であるので、次の数１に示すｈ−１次の多項式ｆ（ｘ）が情報多項式となり、その係数がデータを表すことになる。
【００２８】
［数１］
ｆ（ｘ）＝ａｈ−１ｘｈ−１−２ｎ＋ａｈ−２ｘｈ−２−２ｎ＋
…＋ａ２ｎ＋２ｘ２＋ａ２ｎ＋１ｘ＋ａ２ｎ
【００２９】
データビットのうちの情報ビットを係数ａ２ｎ〜ａｈ−１に割り当てこれらを係数とする多項式ｆ（ｘ）に対して、数２に示すように、２ｎ次から始まる多項式ｆ（ｘ）ｘ２ｎをｇ（ｘ）で割って剰余を求め、これをｒ（ｘ）とする。
【００３０】
［数２］  
ｆ（ｘ）ｘ２ｎ＝ｑ（ｘ）ｇ（ｘ）＋ｒ（ｘ）
ｒ（ｘ）＝ｂ２ｎ−１ｘ２ｎ−１＋ｂ２ｎ−２ｘ２ｎ−２＋…＋ｂ１ｘ＋ｂ０
【００３１】
この剰余多項式ｒ（ｘ）の係数ｂ２ｎ−１〜ｂ０がチェックビットとなり、情報ビットａｈ−１〜ａ２ｎと共にメモリに記憶されるデータビットを構成する。
【００３２】
・データのデコーディング（decoding）
データビットに生じたエラーはｈ−１次のエラー多項式ｅ（ｘ）で表され、メモリから読み出したデータは、次の数３で表されるν（ｘ）となる。
【００３３】
［数３］
ν（ｘ）＝ｆ（ｘ）ｘ２ｎ＋ｒ（ｘ）＋ｅ（ｘ）
＝ｑ（ｘ）ｇ（ｘ）＋ｅ（ｘ）
【００３４】
即ち、エラー多項式ｅ（ｘ）を求めれば、エラー訂正が可能である。
【００３５】
第1段階としてν（ｘ）をｍ１（ｘ），ｍ３（ｘ）でそれぞれ割って剰余Ｓ１（ｘ），Ｓ３（ｘ）を求める。これらは、下記数４に示すように、ｅ（ｘ）の剰余ともなっている。これらの剰余多項式Ｓ１（ｘ），Ｓ３（ｘ）がシンドローム（syndrome）多項式である。
【００３６】
［数４］
ν（ｘ） ≡ Ｓ１（ｘ）ｍｏｄ ｍ１（ｘ）
→ ｅ（ｘ）≡  Ｓ１（ｘ）ｍｏｄ  ｍ１（ｘ）
ν（ｘ） ≡ Ｓ３（ｘ）ｍｏｄ ｍ３（ｘ）
→ ｅ（ｘ）≡  Ｓ３（ｘ）ｍｏｄ  ｍ３（ｘ）
【００３７】
２ビットエラーがｉ，ｊ 次にあればｅ（ｘ）＝ｘｉ＋ｘｊとなるので、この次数ｉ，ｊを求めれば、エラー位置すなわちどのデータがエラーを生じたのかが確定する。
【００３８】
そこで、ｍ１（ｘ）＝０の根αの指数（インデックス）に関するＧＦ（２ｎ）内の計算で“ｉ”と“ｊ”を求める。ｘｎをｍ１（ｘ）で割った剰余多項式をｐｎ（ｘ）とすると、αｎ＝ｐｎ（α)となるので、Ｘ１，Ｘ２及びsyndromeであるＳ１，Ｓ３を次の数５のように定義する。
【００３９】
［数５］
Ｘ１＝ｐｉ（α）＝αｉ
Ｘ２＝ｐｊ（α）＝αｊ
Ｓ１＝Ｓ１（α）＝ασ１
Ｓ３＝Ｓ３（α）＝ασ３
【００４０】
以上の定義から、次の数６が得られる。
【００４１】
［数６］
ｅ（α）＝Ｘ１＋Ｘ２＝Ｓ１
ｅ（α３）＝Ｘ１３＋Ｘ２３＝Ｓ３
ここで、Ｘ１，Ｘ２のインデックスがそれぞれｉ，ｊであり、Ｓ１，Ｓ３のインデックスがそれぞれσ１ (＝σ),σ３である。
【００４２】
第２段階として、Ｘ１とＸ２を未知数とするＧＦ（２ｎ）の多項式ΛＲ（ｘ）を考えると、その係数は数７に示すように、Ｘ１，Ｘ２の基本対称式Ｓ，Ｄとなる。
【００４３】
［数７］
ΛＲ（ｘ）＝（ｘ−Ｘ１）（ｘ−Ｘ２）＝ｘ２＋Ｓｘ＋Ｄ
Ｓ＝Ｓ１＝Ｘ１＋Ｘ２
Ｄ＝Ｘ１Ｘ２
これらの係数とシンドロームである対称式Ｓ１（＝Ｓ），Ｓ３の間には関係があって、ＳＤ＝Ｓ３＋Ｓ３＝ζとおいて、数８が得られる。
【００４４】
［数８］
Ｄ＝ζ／Ｓ
次に、２次方程式ｘ２＋Ｓｘ＋Ｄ＝０を満たす有限体要素を探索する。
【００４５】
（１）まず、エラー探索の分岐として、重根またはゼロ元を根に含む場合として、Ｓ＝０とＤ＝０の場合を考える。Ｓ＝０なら重根であり、Ｘ１＝Ｘ２＝Ｄ１／２の１エラーで、１エラーならＸ１＝Ｓである。いま、Ｓ＝０としたから、Ｘ１＝０のゼロエラーであり、Ｄ＝０となり、しかもこのとき、ζ＝ＳＤ＝０で０エラーである。
【００４６】
Ｄ＝０であると、ゼロ元がひとつの根で、もうひとつの根はＸ１＝Ｓとなり、１エラーで、しかもζ＝ＳＤ＝０である。
【００４７】
即ちこれらは、ζ＝０の場合にまとめられて、エラー位置はＸ１＝Ｓとなり、Ｓ＝０ならノーエラー（no error）、Ｓ≠0なら１エラー（1 error）となる。
【００４８】
（２）２つエラーがある場合のエラー位置検索は、ΛＲ（ｘ）＝x２＋Ｓｘ＋ζ／Ｓ＝０の根Ｘ＝αｎのインデックスｎを求めることである。この場合、Ｓ≠０でＤ≠０、すなわちζ＝ＳＤ≠０なので、ｘ＝Ｓｙなる変数変換をして、解くべき２次方程式を、下記数９とする。
【００４９】
［数９］
ｙ２＋ｙ＝ζ／Ｓ３
【００５０】
即ち、エラー位置探索方程式を変数変換して、変数部分とシンドローム部分に分離する。
【００５１】
このように、ΛＲ（ｘ）を変形して変数部分とsyndrome部分に分離すると、インデックスの関係だけでｎを求めることが出来る。言い換えれば、ｙに有限体要素を代入したｙ２＋ｙとζ／Ｓ３とをデコーダで比較して、２根を求めて２エラーの位置が求まる。デコードによって根を求める方法の詳細は以下に示す。
【００５２】
（３）３エラー以上の場合は、ζ＝０でＤ≠０である矛盾の場合と解ｎが求まらない場合である。即ち対応するデコードが出来ない場合が３エラー以上となる。
【００５３】
２エラーの場合の根計算は、次のようになる。変数部分ｙ２＋ｙにαｉを代入した結果のα２ｉ＋αｉのインデックスをｙｉとすると、これがζ／Ｓ３のインデックスσ(ζ／Ｓ３)と ｍｏｄ ｈで合同となる“ｉ”がエラーの“ｙ”のインデックスとなる。即ち、σ(ζ／Ｓ３)≡ｙｉ ｍｏｄ ｈとなる“ｉ”がエラーの“ｙ”のインデックスとなる。
【００５４】
シンドロームから決まる右辺のインデックスに対応するｙｉを満たす“ｉ”が２個存在しない場合は解が求まらないので、３ビット以上のエラーの場合である。
【００５５】
エラーの実際の位置は、ｘ＝Ｓｙ＝ασ１＋ｉ＝αｎとして、ビット位置ｎとして求められる。即ちインデックスｙｉに対応する“ｙ”のインデックスである“ｉ”に対して本来の変数ｘのインデックスに戻すために、Ｓ＝ασ1をｙに掛けて解Ｘのインデックスｎを求めると、ｎ≡σ１＋ｉ ｍｏｄ ｈがエラー位置に対応する解Ｘのインデックスであり、このＸに対してΛＲ（ｘ）＝０となる。
【００５６】
［３ＥＣ−ＥＷ（3 error correction - error warning）−ＢＣＨシステムの原理説明］
・データのエンコーディング（encoding）
２ＥＣの場合の既約多項式ｍ１（ｘ），ｍ３（ｘ）に加えて、もう一つの既約多項式、即ちα５を根とする既約多項式ｍ５（ｘ）を用いる。これらの既約多項式ｍ１（ｘ），ｍ３（ｘ），ｍ５（ｘ）から、コード生成多項式ｇ（ｘ）＝ｍ１（ｘ）ｍ３（ｘ）ｍ５（ｘ）を作る。
【００５７】
システムのコードを作る要素は有限体のゼロ因子を除くとｈ個であるので、ｈ−１次の多項式の係数がデータを表すことになる。このうち３ｎ−１次までの部分がデータのチェックビットとなる。数１に対応する情報多項式は、次の数１０となる。
【００５８】
［数１０］
ｆ（ｘ）＝ａｈ−１ｘｈ−１−３ｎ＋ａｈ−２ｘｈ−２−３ｎ＋
…＋ａ３ｎ＋２ｘ２＋ａ３ｎ＋１ｘ＋ａ３ｎ
【００５９】
データビットのうちの情報ビットを係数ａ３ｎ〜ａｈ−１に割り当てこれらを係数とする多項式ｆ（ｘ）に対して、数１１に示すように、３ｎ次から始まる多項式ｆ（ｘ）ｘ３ｎをｇ（ｘ）で割って剰余を求め、これをｒ（ｘ）とする。
【００６０】
［数１１］  
ｆ（ｘ）ｘ３ｎ＝ｑ（ｘ）ｇ（ｘ）＋ｒ（ｘ）
ｒ（ｘ）＝ｂ３ｎ−１ｘ３ｎ−１＋ｂ３ｎ−２ｘ３ｎ−２＋…＋ｂ１ｘ＋ｂ０
【００６１】
この剰余多項式ｒ（ｘ）の係数ｂ３ｎ−１〜ｂ０がチェックビットとなり、情報ビットａｈ−１〜ａ３ｎと共にメモリに記憶されるデータビットを構成する。
【００６２】
・データのデコーディング（decoding）
データビットに生じたエラーはｈ-1次のエラー多項式ｅ（ｘ）で表されるのでメモリから読み出したデータは、下記数１  ２に示した構成の多項式ν(x)となる。
【００６３】
［数１２］
ν（ｘ）＝ｆ（ｘ）ｘ３ｎ＋ｒ（ｘ）＋ｅ（ｘ）
＝ｑ（ｘ）ｇ（ｘ）＋ｅ（ｘ）
【００６４】
数１２のエラー多項式ｅ（ｘ）を求めれば、エラー訂正が可能である。
【００６５】
第1段階として、ν（ｘ）をｍ１（ｘ），ｍ３（ｘ），ｍ５（ｘ）でそれぞれ割って剰余をＳ１（ｘ），Ｓ３（ｘ），Ｓ５（ｘ）とすると、これらは下記数１３に示すように、ｅ（ｘ）の剰余ともなっている。これらの剰余多項式がシンドローム（syndrome）多項式である。
【００６６】
［数１３］
ν（ｘ） ≡ Ｓ１（ｘ）ｍｏｄ ｍ１（ｘ）
→ ｅ（ｘ）≡  Ｓ１（ｘ）ｍｏｄ  ｍ１（ｘ）
ν（ｘ） ≡ Ｓ３（ｘ）ｍｏｄ ｍ３（ｘ）
→ ｅ（ｘ）≡  Ｓ３（ｘ）ｍｏｄ  ｍ３（ｘ）
ν（ｘ） ≡ Ｓ５（ｘ）ｍｏｄ ｍ５（ｘ）
→ ｅ（ｘ）≡  Ｓ５（ｘ）ｍｏｄ  ｍ５（ｘ）
【００６７】
３ビットエラーがｉ，ｊ，ｋ次にあれば、ｅ（ｘ）＝ｘｉ＋ｘｊ＋ｘｋとなるので、この次数ｉ，ｊ，ｋを求めればエラーの位置すなわちどのデータがエラーを生じたのかが確定する。
【００６８】
そこで、ｍ１（ｘ）＝０の根αの指数（インデックス）に関するＧＦ（２ｎ）内の計算でｉ，ｊ，ｋを求める。ｘｎをｍ１（ｘ）で割った剰余多項式をｐｎ（ｘ）とすると、αｎ＝ｐｎ（α)となるので、Ｘ１，Ｘ２，Ｘ３及びsyndromeであるＳ１，Ｓ３，Ｓ５を次の数１４のように定義する。
【００６９】
［数１４］
Ｘ１＝ｐｉ（α）＝αｉ
Ｘ２＝ｐｊ（α）＝αｊ
Ｘ３＝ｐｋ（α）＝αｋ
Ｓ１＝Ｓ１（α）＝ασ１
Ｓ３＝Ｓ３（α）＝ασ３
Ｓ５＝Ｓ５（α）＝ασ５
【００７０】
以上の定義から、次の数１５が得られる。
【００７１】
［数１５］
ｅ（α）＝Ｘ１＋Ｘ２＋Ｘ３＝Ｓ１
ｅ（α３）＝Ｘ１３＋Ｘ２３＋Ｘ３３＝Ｓ３
ｅ（α５）＝Ｘ１５＋Ｘ２５＋Ｘ３５＝Ｓ５
ここで、Ｘ１，Ｘ２，Ｘ３のインデックスがそれぞれｉ，ｊ，ｋであり、Ｓ１，Ｓ３，Ｓ５のインデックスがそれぞれσ１ (＝σ),σ３，σ５である。
【００７２】
第２段階として、エラー探索多項式として、数１６に示すような、未知数Ｘ１，Ｘ２，Ｘ３を根とするＧＦ（２ｎ）内の多項式ΛＲ（ｘ）を考える。
【００７３】
［数１６］
ΛＲ（ｘ）＝（ｘ−Ｘ１）（ｘ−Ｘ２）（ｘ−Ｘ３）＝ｘ３＋Ｓｘ２＋Ｄｘ＋Ｔ＝０
Ｓ＝Ｓ１＝Ｘ１＋Ｘ２＋Ｘ３
Ｄ＝Ｘ１Ｘ２＋Ｘ２Ｘ３＋Ｘ３Ｘ１
Ｔ＝Ｘ１Ｘ２Ｘ３
【００７４】
この多項式の解法として２つの方法がある。まず解法その１を説明する。
【００７５】
（３ＥＣ−ＥＷ，データデコードの解法その１）
ΛＲ（ｘ）の係数は数１６に示すように、Ｘ１，Ｘ２，Ｘ３の基本対称式Ｓ，Ｄ，Ｔとなる。これらの係数とシンドロームである対称式Ｓ１＝Ｓ，Ｓ３，Ｓ５の間には関係があって、ＳＤ＋Ｔ＝Ｓ３＋Ｓ３＝ζ，Ｓ３Ｄ＋Ｓ２Ｔ＝Ｓ５＋Ｓ５＝ηとおいて、数１７の関係式で表すことが出来る。
【００７６】
［数１７］
ζＤ＝ζＳ２＋η
ζＴ＝ζＳ３＋ηＳ＋ζ２
【００７７】
ΛＲ（ｘ）の根探査（エラー探索）は、次のように２エラーの場合、３エラーの場合及び４エラー以上の場合に分岐する。
【００７８】
（１）ゼロ元を解にもつ場合と重根を持つ場合は、２エラーとして、２ＥＣ−ＥＷに分岐する。即ちゼロ元も根にもてばＴ＝０であり、重根を持てばｘ３＋Ｓｘ２＋Ｄｘ＋Ｔ＝（ｘ＋Ｓ）（ｘ２＋Ｄ）から、ＳＤ＝Ｔと等価で、ζ＝０がζＳＤ＝Ｓ（ζＳ２＋η）＝ζＴ＝ζＳ３＋ηＳ＋ζ２から導かれるので、ζＴ＝０で成立し、この場合は２ＥＣ−ＥＷに分岐する。
【００７９】
（２）ζＴ≠０なら、３ＥＣ−ＥＷである。この場合はη＝０とするとＤ＝Ｓ２，Ｔ＝Ｓ３＋ζから、ｘ３＋Ｓｘ２＋Ｄｘ＋Ｔ＝（ｘ＋Ｓ）３＋ζとなり、３重根の１エラーとなるが、１エラーではζ＝０であるので矛盾となるので、η≠０となる。η＝０なら、４エラー以上である。
【００８０】
（３）２ＥＣ−ＥＷ及び３ＥＣ−ＥＷの解探索で解ｎが求まらない場合は、４エラー以上となる。
【００８１】
ＧＦ（２ｎ）上の３次方程式がゼロ元を除き３根以外を持つ場合についてまとめておく。すなわちゼロ元を３根のひとつに持つか重根を含めば２根以下になるので、この条件を求める。
【００８２】
ゼロ元が解である場合は、Ｔ＝０であり、この場合数１８のように、２次方程式になる。
【００８３】
［数１８］
ｘ３＋Ｓｘ２＋Ｄ＋Ｔ＝（ｘ＋ａ）（ｘ２＋ｂ）
【００８４】
このとき、ａ＝Ｓ，ｂ＝Ｄ，ａｂ＝Ｔから、Ｔ＝ａｂ＝ＳＤであるので、ＳＤ＋Ｔ＝０となり、ζ＝ＳＤ＋Ｔであるので、ζ＝０と等価となる。従って、ζＴ＝０が２ＥＣ−ＥＷに分岐する条件になる。これは上の考察と一致する。
【００８５】
３エラーがある場合には、ｘに逐次有限体の要素を代入して解を求めるのでなく、解の候補を予めテーブルとして求めておき、ΛＲ（ｘ）＝０となる根ｘ＝αｎのインデックスｎを求めるという方法を用いる。その計算方法を次に説明する。
【００８６】
先ず、多項式ΛＲ（ｘ）を変形して、変数部分とシンドローム部分を完全に分離して、解の候補のインデックスとシンドロームのインデックスの関係だけで解ｎを求めることが出来るようにする。
【００８７】
具体的には、ΛＲ（ｘ）＝ｘ３＋Ｓｘ２＋Ｄｘ＋Ｔ＝ｘ３＋Ｓｘ２＋（Ｓ２＋η／ζ）ｘ＋（Ｓ３＋ηＳ／ζ＋ζ）から、次の数１９に示す変数変換を行う。
【００８８】
［数１９］
ｘ＝ａｚ＋ｂ
ａ＝（η／ζ）１／２
ｂ＝Ｓ
【００８９】
この変数変換を行うと、３エラーではη≠０であるので、下記数２０が得られる。
【００９０】
［数２０］
ｚ３＋ｚ＝ζ５／２／η３／２
【００９１】
このように変数変換された方程式を解く際に、シンドローム計算から必要となる基本的なインデックスは、Ｓ１のσ1，Ｓ３のσ３，Ｓ５のσ５，ζのσζ，ηのση，ａ＝(η/ζ)１／２のσａである。
【００９２】
方程式の変数部分ｚにαｊを代入してα３ｊ＋αｊ＝αｚｊなるインデックスｚｊを予め求めておきテーブルとする。
【００９３】
一方方程式のシンドローム部分ζ５／２／η３／２のインデックスは（５／２）σζ−（３／２）σηであるから、（５／２）σζ−（３／２）ση≡ｚｊｍｏｄ ｈを満たす“ｊ”がエラーのインデックスから変換されたインデックスで、実際のエラー位置はａｚ＝ασa＋ｊ=ασＸから、σa＋ｊ≡σＸｍｏｄ ｈなるσＸを求め、Ｘ＝ａｚ＋Ｓ＝ασＸ+ασ１＝αｎのビット位置ｎから求まる。
【００９４】
なお、ｚｊに対応する“ｊ”が存在しない場合は４ビット以上のエラーがある。
【００９５】
３ＥＣ−ＥＷの回路システムを作るにあたり、エラー探索の分岐を次にまとめておく。３エラー探索の条件のもとでの分岐条件である。
【００９６】
先に説明したように、ζＴ＝０ではゼロ元を根にもつか重根になるので、ζ≠０で３エラー探索の解法を行い、３つの解が求まらない場合やη＝０となった場合は４エラー以上となる。
【００９７】
ζＴ＝０は２ＥＣ−ＥＷ以下に分岐するが、２ＥＣ−ＥＷではζ≠０であるので、ζ≠０で２エラー探索の解法を行い、２つの解が求まらない場合やＳ＝０の矛盾となった場合は４エラー以上となる。
【００９８】
ζＴ＝０でζ＝０は、１エラー以下となるが、これはζ＝０かつη＝０と等価であり、エラー位置はＸ１＝ＳでＳ＝０ではノーエラー（no error)となる。
【００９９】
以上をまとめると、次のようになる。
【０１００】
（１）ζ＝０かつη＝０なら、Ｘ１＝Ｓ（ゼロエラーを含む）で１エラーとなる。η≠０なら４エラー以上となる。
【０１０１】
（２）ζ≠0でζＴ＝０なら２ＥＣ−ＥＷへ分岐し、Ｓ＝０及び２解が求まらないときは4エラー以上となる。
【０１０２】
（３）ζ≠0でかつζＴ≠０なら３ＥＣ−ＥＷであり、η＝０及び３解が求まらないときは４エラー以上となる。
【０１０３】
図１は、ここまで説明した、デコーディング解法その１を利用した、３ＥＣ−ＥＷ−ＢＣＨシステムの構成図である。
【０１０４】
エンコード部２０は、ｈ−１−３ｎビットの情報をａ３ｎ〜ａｈ−１としてこれらを係数とするｈ−１−３ｎ次の情報多項式をｆ（ｘ）として、これが入力となる。情報ビットはデータビットの構成によって適宜必要な次数を選んでその係数のみを用い、使用しない係数は固定した０または１データとして扱うことによって、固定ビットをメモリに記憶させずにメモリ容量に合ったシステムを構成することが可能である。
【０１０５】
エンコード部２０では、ｆ（ｘ）ｘ３ｎをコード生成多項式ｇ（ｘ）で割った剰余をｒ（ｘ）として多項式ｆ（ｘ）ｘ３ｎ＋ｒ（ｘ）の係数をデータビットとしてメモリコア１０に書き込む。メモリコア１０から読み出したｈビットのデータはｈ−１次の多項式ν（ｘ）の係数として扱われる。
【０１０６】
メモリコア１０は、例えば多値ＮＡＮＤ型フラッシュメモリ、ＲｅＲＡＭ,ＰＣＲＡＭ等である。メモリコア１０の具体例を以下に示す。
【０１０７】
図２は、ＮＡＮＤ型フラッシュメモリを構成するセルアレイ１０１とセンスアンプ列１０２の例を示している。セルアレイ１０１は、複数の浮遊ゲートタイプの不揮発性メモリセルＭ０−Ｍ３１を直列接続して構成されたＮＡＮＤセルユニット（ＮＡＮＤストリング）ＮＵを配列して構成される。特に、多値データ記憶を行うものである場合に、この実施の形態のＥＣＣシステムが有効になる。
【０１０８】
図３は、ＲｅＲＡＭのセルアレイ２０１として、可変抵抗素子ＶＲとダイオードＤｉの直列接続により構成されるメモリセルＭＣを配列してなるセルアレイを示している。具体的に大容量ＲｅＲＡＭでは、図４に例示したように、下地基板の読み出し／書き込み回路２２０上に、複数層のセルアレイＭＡ０−ＭＡ３を積層した三次元セルアレイ２１０として構成される。
【０１０９】
メモリコア１０の読み出しデータν（ｘ）をデコードしてエラー探索を行う部分は、次のようになる。
【０１１０】
先ずシンドロームＳ１，Ｓ３，Ｓ５を求めるのが、シンドローム演算部３０である。即ち、ν（ｘ）をｍ１（ｘ），ｍ３（ｘ），ｍ５（ｘ）でそれぞれ割った剰余から、シンドロームＳ１，Ｓ３，Ｓ５を得る。
【０１１１】
次に、パリティチェッカ４１と４２により、それぞれＳ３とＳ３のパリティチェック及びＳ５とＳ５のパリティチェックを行って、ζとηを求める。これらのインデックスには、以下の計算では、ｈ＝ｐｑｒなる因数分解による素因数ｐ，ｑ，ｒを用いたｍｏｄ ｐ，ｍｏｄ ｑ，ｍｏｄ ｒで区別する、いわゆる表現インデックスを用いる。
【０１１２】
即ち、アダーの計算では、シンドロームＳ１，Ｓ３，Ｓ５やζ，ηは、表現インデックスを用いてバイナリの数として足し算を行う。パリティチェックでは、有限体の要素としてｎ−１次の多項式として表されて、各次数の係数のパリティチェックとして和の要素の多項式の係数が得られる。
【０１１３】
Ｓ，ζ,ηが全てゼロであれば、ゲート７１がこれを検出して、信号“エラーなし”（no error）を出力する。Ｓがゼロでなければ、ゲート７２がこれを検出して、信号“１エラー”（１error）を出力する。これを受けて、Ｓｙアダー回路５４からは、Ｓのインデックスがｎとして出力される。
【０１１４】
ζがゼロでηがゼロでなければ、ゲート７３が１ＥＣの解がないこと、即ち４error以上に相当することを示す信号“１ＥＣ解なし”（no solution 1EC）を出力する。
【０１１５】
次に、シンドロームＳ，Ｓ３，Ｓ５やζとηとの冪の積や商であるａ，Ｓａ２のインデックスをアダー回路５１，５２で計算する。ここでは、ｍｏｄ ｐとｍｏｄ ｑとｍｏｄ ｒの合同式として計算を行い、結果の表現インデックスによって以降の演算を行なう。
【０１１６】
次に４入力のパリティチェッカ回路４３によって、３つの要素のＳ３，Ｓａ２，ζの和であるＴを求める。このパリティチェッカは入力インデックスを多項式に直した同じ次数の係数間のｍｏｄ ２による和を行なう部分であり、余分な入力にはＶｓｓを入れている。
【０１１７】
アダー回路５３，５４は、２ＥＣに対応するｙ２＋ｙ＝ζ／Ｓ３によってｙを求め、変換ｘ＝Ｓｙによってエラー位置ｎの表現インデックスを計算する部分である。最初のアダー回路５３の入力部分は、ζとＳ−３であり解探索多項式のシンドローム部分のζ／Ｓ３の表現インデックスを計算する。次のアダー回路５４の入力はこの結果とＳと1error信号である。この入力部でｙ２＋ｙ＝ζ／Ｓ３を満たすｙのインデックスｉをデコードする。
【０１１８】
１errorではζ／Ｓ３が０となり、ｙ２＋ｙ＝０を満たすｙが1とゼロの２つあるにも関わらず、ζ／Ｓ３のインデックスは存在しないので、前段アダー回路から出力されない。そこで、1errorの場合の信号はシンドロームの計算部分のゲート７２から直接受け取り、ｙ２＋ｙ＝０となるｙのインデックスをデコードする。この場合は1エラーとして解がデコードされる。この場合も含めてデコード結果のｉとＳのインデックスσ１から２つのエラー分のｎのインデックスの表現インデックスを計算結果として出力する。
【０１１９】
また、入力部でのデコードの結果ｙのインデックスｉを求めることができない場合は、２ＥＣシステムでは対応できないので、信号“２ＥＣ解なし”（no solution 2EC）を発生する。この信号が立つか、Ｓ＝０（重根）である場合は、２ＥＣ−ＥＷでは解が求まらないものとして、ゲート７５によって、信号“２ＥＣ不解”（not solved 2EC）を発生する。
【０１２０】
アダー回路５５，５６は、３ＥＣに対応するｚ３＋ｚ＝ζ５／２／η３／２によってｚを求め、変換Ｘ＝ａｚの表現インデックスを計算する部分である。即ち最初のアダー回路５５は、入力としてζ５／２の表現インデックスとη−３／２の表現インデックスを受け取り、ζ５／２／η３／２の表現インデックスとして出力する。
【０１２１】
次のアダー回路５６は、３ＥＣに対応するｚ３＋ｚ＝ζ５／２/η３／２によってｚを求め、変換ａｚによってインデックスσＸの表現インデックスを計算する部分である。アダー回路の入力部分は前段までの結果ｚｊとａのインデックスσａの表現インデックスを示す信号である。
【０１２２】
この入力部でｚ３＋ｘ＝ ζ５／２／η３／２を満たすｚのインデックスｊをデコードする。そのデコード結果のｊとａの関係からインデックスσａの表現インデックスから３つのエラー分のａｚのインデックスの表現インデックスを計算結果として出力する。また、入力部でのデコードの結果ｚのインデックスｊが求めることができない場合は、３ＥＣでは対応できないので、信号“３ＥＣ解なし”（no solution 3EC）を発生する。
【０１２３】
この信号が立つか、η＝０である場合は、３ＥＣ−ＥＷでは解が求まらないので、ゲート７６が信号“３ＥＣ不解”（not solved 3EC）を発生する。
【０１２４】
右端のパリティチェッカ回路４４は、Ｘ＝ａｚ＋Ｓなる和として、Ｘのインデックス としてエラー位置ｎの表現インデックスを計算している。
【０１２５】
４ビット以上のエラーがあり訂正が出来ない場合の信号“訂正不可”（non correctable）は、ＯＲゲート７４により、no solution 1ECかnot solved 2ECかnot solved 3EC信号のいずれかが立った場合に立つ。
【０１２６】
エラー訂正部６０は、メモリコア１０から読み出したデータを最終的に訂正して出力するロジック部分である。２ＥＣ部分からのエラー位置情報が使われるのはζＴ＝０の場合すなわちζ＝０ またはＴ＝０の場合で、ゲート６１の“０”出力で、ゲート６２がオン、ゲート６３がオフであり、３ＥＣからのエラー位置情報は使わない。２ＥＣの条件を満たさない場合には、ゲート６２がオフ、ゲート６３がオンであり、３ＥＣからの位置情報が使われる。
【０１２７】
エラー位置のデータ多項式ν（ｘ）の係数は、エラー位置情報が入ると、ＸＯＲゲート６４でロジック反転（即ちデータ訂正）されて、データｄｎとして出力される。また、“エラーなし”（no error）または“訂正不可”（non correctable） のいずれかが立てば、ゲート７７によりスルー信号（through）が発生され、これにより読み出しデータはそのまま訂正されず、データｄｎとして出力される。
【０１２８】
（３ＥＣ−ＥＷ，データデコードの解法その２）
次に、３ＥＣ−ＥＷのデータデコードの解法その２を説明する。これは、４ＥＣ−ＥＷの分岐の場合に回路システムを共通化する上で好ましい方法である。
【０１２９】
数１６に示したエラー探索方程式である３次多項式ΛＲ（ｘ）の係数ＤとＴは、シンドロームからのＳ，ζ，ηと共に、下記数２１のように、２元連立方程式をなす。
【０１３０】
［数２１］
ＳＤ＋Ｔ＝ζ
（ζ＋Ｓ３）Ｄ＋Ｓ２Ｔ＝η
【０１３１】
Ｄ，Ｔをシンドロームで表現するためにこの２元連立方程式を解く。係数行列式はζとなり、ζＤ＝ζＳ２＋η、ζＴ＝ζＳ３＋ηＳ＋ζ２として解くことができる。
【０１３２】
ここで、ζ≠０ならば、Ｄ，Ｔは確定する。従って、エラー探索方程式ΛＲ（ｘ）＝０を解く過程に入る。ζ＝０であれば、連立方程式の解法から未知数のひとつＴを任意に設定してＤを求めることが出来るが、３エラーが生じていればＳ，Ｄ，Ｔの間に任意関係はありえないので、この場合は4エラー以上が生じたか2エラー以下の場合となる。従って、２ＥＣ−ＥＷに分岐しても解が求まらなければ、４エラー以上となる。
【０１３３】
そこで、ζ≠０の条件で３次方程式を解くことになるが、これを1次と2次の方程式に分解して解く。その方法を次に説明する。
【０１３４】
Ｘ３＋ＳＸ２＋ＤＸ＋Ｔ＝０なる３次方程式から、２次の項を消去するように変換Ｘ＝ｘ＋Ｓを行い、Ａ＝η/ζとおくと、３根の場合は先に説明したようにη≠０であるのでＡ≠０であり、下記数２２が得られる。
【０１３５】
［数２２］
ｘ３＋Ａｘ＋ζ＝０
【０１３６】
これを、下記数２３のように、１次式ｘ＋αと２次式ｘ２＋β１ｘ＋β０の積の方程式で表す。
【０１３７】
［数２３］
ｘ３＋Ａｘ＋ζ＝（ｘ＋α）（ｘ２＋β１ｘ＋β０）＝０
【０１３８】
ここで、β0＝δとおいて、αβ０＝ζ，αβ１＋β０＝Ａ，α＋β１＝０を用いると、数２４のように、(δ＋Ａ）／Ａを未知数とする３次方程式が得られる。
【０１３９】
［数２４］
｛（δ＋Ａ）／Ａ｝３＋｛（δ＋Ａ）／Ａ｝＋ζ２／Ａ３＝０
【０１４０】
この方程式はシンドローム部分と未知数部分が分離されているのでテーブルによるデコード方式で解くことができ、１根（δ＋Ａ）／Ａを選択する。α＝β1＝（Ａ＋δ)１／２であるので、３次方程式の根δ＝β０を得る。これから、分解因子の多項式の係数が得られる。
【０１４１】
これにより、１次と２次の解くべき方程式が確定して、未知数部分とシンドローム部分を分離した２次方程式は、次の数２５となる。
【０１４２】
［数２５］
（ｘ／β１）２＋（ｘ／β１）＋β０／β１２＝０
【０１４３】
これを解いて、ｘ＝αと共に３つの解が求まる。Ｘ＝ｘ＋Ｓとして、本来のエラー位置を求めることが出来る。
【０１４４】
ここで、エラー探索３次方程式の解法を回路システムに焼きなおすことができる様に形式化しておく。解くべき３次方程式は、ｗ３＋ｗ＝ζ５／η３となり、ζ≠０からｗがゼロ元または１になることはない。
【０１４５】
根ｗを1つ選択すると、β０＝（ｗ＋１）η／ζ及びβ１＝α＝（ｗη／ζ)１／２が得られ、β０／β１２＝（ｗ＋１）／ｗとなるので、２次のエラー探索方程式はｚ２＋ｚ＝（ｗ＋１）／ｗとなる。（ｗ＋１）／ｗ≠０であるから、２根ｚ１とｚ２が求まり、１次方程式の根α＝β１と合わせてエラー位置の解として、Ｘ１＝β１＋Ｓ、Ｘ２＝β１ｚ１＋Ｓ、Ｘ３＝β１ｚ２＋Ｓの３つが得られる。
【０１４６】
以上説明した解法その２に従って３ＥＣ−ＥＷの回路システムを作るにあたり、エラー探索の分岐を以下にまとめておく。３エラー探索の条件のもとでの分岐条件である。基本的には先の場合と変わらない。
【０１４７】
行列式ζ＝０は連立方程式の解が確定しないので、ζ≠０で３エラー探索の解法を行う。３つの解が求まらない場合やη＝０となった場合は４エラー以上となる。すなわち、η≠０とＴ≠０で３エラー探索の結果を利用する。
【０１４８】
Ｔ＝０は２ＥＣ−ＥＷ以下に分岐するが、２ＥＣ−ＥＷではζ≠０であるので、ζ≠0で２エラー探索の解法を行い、２つの解が求まらない場合やＳ＝０となった場合は４エラー以上となる。
【０１４９】
ζ＝０は1エラー以下となるが、これはζ＝０かつη＝０と等価であり、エラー位置はＸ１＝Ｓで、Ｓ＝０ではno errorとなる。η≠０なら４エラー以上である。
【０１５０】
以上をまとめると、次のようになる。
【０１５１】
・ζ＝０かつη＝０なら、Ｘ１＝Ｓ（ゼロエラーを含む）で、η≠０で４エラー以上となる。
【０１５２】
・ζ≠０かつＴ＝０なら、２ＥＣ−ＥＷへ分岐し、Ｓ＝０及び２解が求まらないときは４エラー以上となる。
【０１５３】
・ζ≠０かつＴ≠０なら、３ＥＣ−ＥＷであり、η＝０及び３解が求まらないときは４エラー以上となる。
【０１５４】
図５は、以上の解法その２を適用した場合について、３ビットまでのエラー訂正が可能で４ビット以上のエラーがあることの警告を出すことができる３ＥＣ−ＥＷ−ＢＣＨシステムの構成を図１と対応させて示している。図１と対応する部分には図１と同じ符号を付してある。
【０１５５】
メモリコア１０、エンコード部２０、シンドローム演算部３０は、図１と同様である。シンドロームを利用したエラー位置探索の計算手法も基本的に先の例と同様である。
【０１５６】
シンドロームＳ，Ｓ３，Ｓ５やζとηとの冪の積や商であるｗｉ＝ζ５η−３及び Ａ＝ηζ−１のインデックスを計算するのが、アダー回路８２及び８３である。アダー回路８１は、ＡとＳの積ＳＡをｍｏｄ ｐ，ｍｏｄ ｑ，ｍｏｄ ｒの合同式として計算し、結果の表現インデックスによって以降の演算を行なう。
【０１５７】
４入力のパリティチェッカ回路４５は、３つの要素のＳ３，ＳＡ，ζの和であるＴを求める。このパリティチェッカ回路４５は、入力インデックスを多項式に直した同じ次数の係数間のｍｏｄ２よる和を行なう部分であり、余分な入力にはＶｓｓを入れている。
【０１５８】
アダー回路８４，８５は、２ＥＣに対応するｙ２＋ｙ＝ζ／Ｓ３によってｙを求め、更に変換Ｘ＝Ｓｙによってエラー位置ｎの表現インデックスを計算する部分である。最初のアダー回路８４の入力部分は、ζとＳ−３であり、解探索多項式のシンドローム部分のζ／Ｓ３の表現インデックスを計算する。次のアダー回路８５の入力はこの結果とＳと１errorを示す信号である。この入力部で、ｙ２＋ｙ＝ζ／Ｓ３を満たすｙのインデックスｉをデコードする。
【０１５９】
１errorではζ／Ｓ３が０となり、ｙ２＋ｙ＝０を満たすｙが1とゼロの２つあるにも拘わらず、ζ／Ｓ３のインデックスは存在せず前段のアダー回路から出力されない。そこで、１errorの場合の信号をシンドローム計算部分のゲート７２から直接受け取り、ｙ２＋ｙ＝０となるｙのインデックスをデコードするが、この場合は1エラーとして解がデコードされる。
【０１６０】
この場合も含めてデコード結果のｉとＳのインデックスσ１から２つのエラー分のｎのインデックスの表現インデックスを計算結果として出力する。また、入力部でのデコードの結果ｙのインデックスｉを求めることができない場合は、２ＥＣでは対応できないので信号“２ＥＣ解なし”（no solution 2EC）を発生する。この信号が立つかＳ＝０である場合は２ＥＣ−ＥＷでは解が求まらないので、ゲート７５が信号“２ＥＣ不解”（not solved 2EC）を発生する。
【０１６１】
アダー回路８６，８７，８８は、３ＥＣ対応部分であり、それぞれ、ｗ３＋ｗ＝ζ５／η３によってｗとｗ＋１を得てｚｊ＝（ｗ＋１）／ｗを計算する部分、β１＝（Ａｗ）１／２を求める部分、さらにｚ２＋ｚ＝ｚｊによってｚを得て、変換Ｘ＝β１ｚの表現インデックスを計算する部分である。
【０１６２】
最初のアダー回路８６は入力としてｗｉ＝ζ５／η３の表現インデックスを受け取り、ｗ３＋ｗ＝ｗｉを満たすｗをデコードし、（ｗ＋１）／ｗを計算してｚｊとして出力する。対応するｗがないときには解がないので信号“ｗ解なし”（no solution ｗ）を出力して解けないことを示す。
【０１６３】
この下側のアダー回路８８は、出力されたｗとＡからＡｗを計算して、結果の冪（Ａｗ）１／２をβ１として出力する。
【０１６４】
アダー回路８７は、３ＥＣの２つのエラーに対応するｚ２＋ｚ＝ｚｊによってｚを求め、変換β１ｚの表現インデックスを計算する部分である。アダー回路の入力部分は前段までの結果ｚｊとβ１の表現インデックス示す信号の入力部である。この入力部でｚ２＋ｘ＝ｚｊを満たすｚのインデックスｊをデコードする。デコード結果のｊとβ１から２つのエラー分の表現インデックスを計算結果として出力する。
【０１６５】
また、入力部でのデコードの結果ｚのインデックスｊを求めることができない場合は、解がないので信号“ｚ解なし”（no solution z）を発生する。
【０１６６】
３ＥＣの解法のデコーダで解が求まらないno solution ｗやno solution ｚの信号が立つか、３ＥＣでη＝０である場合は、３ＥＣ−ＥＷでは解が求まらないので、ゲート７９が信号“３ＥＣ不解”（not solved 3EC）を発生する。
【０１６７】
パリティチェッカ回路４６，４７はそれぞれ、Ｘ＝β１ｚ＋Ｓ，Ｘ＝β１＋Ｓなる和として、Ｘのインデックスとしてエラー位置ｎの表現インデックスを計算している。
【０１６８】
４ビット以上のエラーがあり訂正が出来ない場合の信号“訂正不可”（non correctable）は、ＯＲゲート７４により、no solution 1ECかnot solved 2ECかnot solved 3EC信号のいずれかが立った場合に立つ。
【０１６９】
データ訂正部６０は、図１のシステムと同じである。即ち２ＥＣ部分からのエラー位置情報が使われるのはζ＝０またはT＝０の場合で、この場合は３ＥＣからのエラー位置情報は使わない。
【０１７０】
２ＥＣの条件を満たさない場合に３ＥＣからの位置情報を使い、これらのエラー位置のデータ多項式ν（ｘ）の係数が位置情報とのＸＯＲロジックで反転されてデータｄｎとして出力される。また、no errorまたはnon correctable のいずれかが立てば、through信号が立ちデータｄｎはそのまま出力される。
【０１７１】
次にオンチップで有限体要素のデコーダを用いて高速にデータ処理できるＥＣＣシステムとして最大のエラー訂正数と思われる４ビットエラー訂正の場合について説明する。
【０１７２】
［４ＥＣ−ＥＷ（4 error correction - error warning）−ＢＣＨシステムの原理説明］
・データのエンコーディング（encoding）
３ＥＣの場合の既約多項式ｍ１（ｘ），ｍ３（ｘ），ｍ５（ｘ）に加えて、更にもう一つの既約多項式、即ちα７を根とする既約多項式ｍ７（ｘ）を用いる。これらの既約多項式ｍ１（ｘ），ｍ３（ｘ），ｍ５（ｘ），ｍ７（ｘ）から、コード生成多項式ｇ（ｘ）＝ｍ１（ｘ）ｍ３（ｘ）ｍ５（ｘ）ｍ７（ｘ）を作る。
【０１７３】
システムのコードを作る要素は有限体のゼロ因子を除くとｈ個であるので、ｈ−１次の多項式の係数がデータを表すことになる。このうち４ｎ−１次までの部分がデータのチェックビットとなる。情報多項式ｆ（ｘ）は、次の数２６となる。
【０１７４】
［数２６］
ｆ（ｘ）＝ａｈ−１ｘｈ−１−４ｎ＋ａｈ−２ｘｈ−２−４ｎ＋
…＋ａ４ｎ＋２ｘ２＋ａ４ｎ＋１ｘ＋ａ４ｎ
【０１７５】
データビットのうちの情報ビットを係数ａ４ｎ〜ａｈ−１に割り当てこれらを係数とする多項式ｆ（ｘ）に対して、数２７に示すように、４ｎ次から始まる多項式ｆ（ｘ）ｘ４ｎをｇ（ｘ）で割って剰余を求め、これをｒ（ｘ）とする。
【０１７６】
［数２７］  
ｆ（ｘ）ｘ４ｎ＝ｑ（ｘ）ｇ（ｘ）＋ｒ（ｘ）
ｒ（ｘ）＝ｂ４ｎ−１ｘ４ｎ−１＋ｂ４ｎ−２ｘ４ｎ−２＋…＋ｂ１ｘ＋ｂ０
【０１７７】
この剰余多項式ｒ（ｘ）の係数ｂ４ｎ−１〜ｂ０がチェックビットとなり、情報ビットａｈ−１〜ａ４ｎと共にメモリに記憶されるデータビットを構成する。
【０１７８】
・データのデコーディング（decoding）
データビットに生じたエラーはｈ−１次のエラー多項式ｅ（ｘ）で表されるので、メモリから読み出したデータは、下記数２８に示した構成の多項式ν（ｘ）となる。
【０１７９】
［数２８］
ν（ｘ）＝ｆ（ｘ）ｘ４ｎ＋ｒ（ｘ）＋ｅ（ｘ）
＝ｑ（ｘ）ｇ（ｘ）＋ｅ（ｘ）
【０１８０】
従って、読み出したデータから多項式ｅ（ｘ）を求めれば、エラー訂正が可能である。
【０１８１】
第1段階として、ν（ｘ）をｍ１（ｘ），ｍ３（ｘ），ｍ５（ｘ），ｍ７（ｘ）でそれぞれ割って剰余をＳ１（ｘ），Ｓ３（ｘ），Ｓ５（ｘ），Ｓ７（ｘ）とする。これらは下記数２９に示すように、ｅ（ｘ）の剰余ともなっており、これらの剰余多項式がシンドローム（syndrome）多項式である。
【０１８２】
［数２９］
ν（ｘ） ≡ Ｓ１（ｘ）ｍｏｄ ｍ１（ｘ）
→ ｅ（ｘ）≡  Ｓ１（ｘ）ｍｏｄ  ｍ１（ｘ）
ν（ｘ） ≡ Ｓ３（ｘ）ｍｏｄ ｍ３（ｘ）
→ ｅ（ｘ）≡  Ｓ３（ｘ）ｍｏｄ  ｍ３（ｘ）
ν（ｘ） ≡ Ｓ５（ｘ）ｍｏｄ ｍ５（ｘ）
→ ｅ（ｘ）≡  Ｓ５（ｘ）ｍｏｄ  ｍ５（ｘ）
ν（ｘ） ≡ Ｓ７（ｘ）ｍｏｄ ｍ７（ｘ）
→ ｅ（ｘ）≡  Ｓ７（ｘ）ｍｏｄ  ｍ７（ｘ）
【０１８３】
４ビットエラーがｉ，ｊ，ｋ，ｌ次にあれば、ｅ（ｘ）＝ｘｉ＋ｘｊ＋ｘｋ＋ｘｌとなるので、この次数ｉ，ｊ，ｋ，ｌを求めればエラーの位置すなわちどのデータがエラーを生じたのかが確定する。
【０１８４】
そこで、ｍ１（ｘ）＝０の根αの指数（インデックス）に関するＧＦ（２ｎ）内の計算でｉ，ｊ，ｋ，ｌを求める。ｘｎをｍ１（ｘ）で割った剰余多項式をｐｎ（ｘ）とすると、αｎ＝ｐｎ（α)となるので、Ｘ１，Ｘ２，Ｘ３，Ｘ４及びsyndromeであるＳ１，Ｓ３，Ｓ５，Ｓ７を次の数３０のように定義する。
【０１８５】
［数３０］
Ｘ１＝ｐｉ（α）＝αｉ
Ｘ２＝ｐｊ（α）＝αｊ
Ｘ３＝ｐｋ（α）＝αｋ
Ｘ４＝ｐｌ（α）＝αｌ
Ｓ１＝Ｓ１（α）＝ασ１
Ｓ３＝Ｓ３（α）＝ασ３
Ｓ５＝Ｓ５（α）＝ασ５
Ｓ７＝Ｓ７（α）＝ασ７
【０１８６】
以上の定義から、次の数３１が得られる。
【０１８７】
［数３１］
ｅ（α）＝Ｘ１＋Ｘ２＋Ｘ３＋Ｘ４＝Ｓ１
ｅ（α３）＝Ｘ１３＋Ｘ２３＋Ｘ３３＋Ｘ４３  ＝Ｓ３
ｅ（α５）＝Ｘ１５＋Ｘ２５＋Ｘ３５＋Ｘ４５ ＝Ｓ５
ｅ（α７）＝Ｘ１７＋Ｘ２７＋Ｘ３７＋Ｘ４７ ＝Ｓ７
【０１８８】
ここで、Ｘ１，Ｘ２，Ｘ３，Ｘ４のインデックスがそれぞれｉ，ｊ，ｋ，ｌであり、Ｓ１，Ｓ３，Ｓ５，Ｓ７のインデックスがそれぞれσ１ (＝σ),σ３，σ５，σ７である。
【０１８９】
第２段階として、エラー探索多項式として、数３２に示すようなＸ１，Ｘ２，Ｘ３，Ｘ４を未知数とするＧＦ（２ｎ）内の多項式ΛＲ（ｘ）を考えると、その係数Ｓ，Ｄ，Ｔ，Ｑは、Ｘ１，Ｘ２，Ｘ３，Ｘ４の基本対称式となる。
【０１９０】
［数３２］
ΛＲ（ｘ）＝（ｘ−Ｘ１）（ｘ−Ｘ２）（ｘ−Ｘ３）（ｘ−Ｘ４）
＝ｘ４＋Ｓｘ３＋Ｄｘ２＋Ｔｘ＋Ｑ
Ｓ＝Ｓ１＝Ｘ１＋Ｘ２＋Ｘ３＋Ｘ４
Ｄ＝Ｘ１Ｘ２＋Ｘ２Ｘ３＋Ｘ３Ｘ４＋Ｘ４Ｘ１
Ｔ＝Ｘ１Ｘ２Ｘ３＋Ｘ２Ｘ３Ｘ４＋Ｘ３Ｘ４Ｘ１＋Ｘ４Ｘ１Ｘ２
Ｑ＝Ｘ１Ｘ２Ｘ３Ｘ４
【０１９１】
これらの係数とシンドロームＳ１＝Ｓ，Ｓ３，Ｓ５，Ｓ７の間には一定の関係があって式で表すことができ、数３３の連立方程式系を構成する。
【０１９２】
［数３３］
ＳＤ＋Ｔ＝ζ
（ζ＋Ｓ３）Ｄ＋Ｓ２Ｔ＋ＳＱ＝η
（η＋Ｓ５）Ｄ＋Ｓ４Ｔ＋（ζ＋Ｓ３）Ｑ＝θ
【０１９３】
Ｄ，Ｔ，Ｑは、この連立方程式を解いて得ることができる。但し計算の便宜上、  ζ＝Ｓ３＋Ｓ３，η＝Ｓ５＋Ｓ５，θ＝Ｓ７＋Ｓ７とおいている。
【０１９４】
Ｄ，Ｔ，Ｑをシンドロームで表現するために、上の３元連立方程式を解く。係数行列式をΓとして、下記数３４のように解くことがきる。
【０１９５】
［数３４］
Γ＝Ｓ３ζ＋Ｓη＋ζ２
ΓＤ＝Ｓ３η＋Ｓ２ζ２＋Ｓθ＋ζη
ΓＴ＝Ｓ４η＋Ｓ２θ＋ζ３
ΓＱ＝Ｓ４ζ２＋Ｓ２ζη＋ζθ＋η２
【０１９６】
Γ≠０では、Ｄ，Ｔ，Ｑが確定してエラー探索方程式ΛＲ（ｘ）＝０を解く過程に入る。このとき方程式がゼロ元を根に持つか重根の場合には、３ＥＣ−ＥＷの解法に分岐する。
【０１９７】
Γ＝０であれば、連立方程式の解法から未知数のひとつＱを任意に設定してＤとＴを求めることが出来るが、４エラーきっかりが生じていればＳ，Ｄ，Ｔ，Ｑの間に任意関係はありえないので、この場合は５エラー以上が生じたか、或いは３エラー以下となる。３エラー以下の場合は３ＥＣ−ＥＷの解法に分岐し、５エラー以上は分岐した３ＥＣ−ＥＷの解法で解が求まらない場合に相当する。
【０１９８】
Γ≠０で解かなければならない方程式は、次の数３５の４次方程式である。
【０１９９】
［数３５］
ｘ４＋Ｓｘ３＋Ｄｘ２＋Ｔｘ＋Ｑ＝０
【０２００】
次に、４ＥＣ−ＥＷの解法の条件、即ち上記の４次方程式がきっかり異なる４つの解を持つ条件を検討する。根にゼロ元を含む場合か、或いは重根を持つ場合が条件から外れるのでこの条件を調べる。
【０２０１】
先ず、ゼロ元が解である場合は、Ｑ＝０となり、３次となる。
【０２０２】
重根を持つ場合は、上の４次方程式は、数３６のように因数分解できる。
【０２０３】
［数３６］
ｘ４＋Ｓｘ３＋Ｄｘ２＋Ｔｘ＋Ｑ＝（ｘ２＋ａ）（ｘ２＋ｂｘ＋ｃ）
【０２０４】
このとき係数Ｓ，Ｄ，Ｔ，Ｑの間に一定の関係がある。即ち、ｂ＝Ｓ，ａ＋ｃ＝Ｄ，ａｂ＝Ｔ，ａｃ＝Ｑより、ａ＝Ｔ／Ｓ，ｃ＝ＳＱ／Ｔであり、これから、Ｄ＝ａ＋ｃ＝Ｔ／Ｓ＋ＳＱ／Ｔであるので、Ｓ２Ｑ＋ＳＤＴ＋Ｔ２＝０なる関係となる。従って、Ｑ＝０又はＳ２Ｑ＋ＳＤＴ＋Ｔ２＝０の場合は３ＥＣ−ＥＷの解法を用いることになる。
【０２０５】
４次のエラー探索方程式の解法を、シンドロームから決まる量の関係の場合分けによって示す。以下の４つの場合、Ｃａｓｅ １〜Ｃａｓｅ ４に分けることが出来、当然全ての場合でΓ≠０である。
【０２０６】
Ｃａｓｅ １：Ｓ≠０，ｂ≠０の場合
ここで、ａ＝Ｄ／Ｓ，ｂ＝Ｄ２＋ＳＴ，ｃ＝Ｓ２Ｑ＋ＳＤＴ＋Ｔ２，Ｂ＝ａ４＋Ｔａ＋Ｑとする。なお、ｃ＝０は重根の条件となるので、４ＥＣの解法を考える限りc≠０である。
【０２０７】
変数変換Ｘ＝ｘ＋ａを施して、エラー探索方程式から２次の項を消去し、これを数３７のように２次式の積に因数分解する。
【０２０８】
［数３７］
ｘ４＋Ｓｘ３＋（ｂ／Ｓ）ｘ＋Ｂ＝（ｘ２＋α１ｘ＋α０）（ｘ２＋β１ｘ＋β０）＝０
【０２０９】
因数分解の２次式の係数α０，α１，β０，β１とシンドロームから導かれた量の関係から、未知量δ＝α０＋β０を導入すると、δが満たすべき数３８の３次方程式が得られる。
【０２１０】
［数３８］
（δ／ｂ１／２）３＋（δ／ｂ１／２）＋ｃ／ｂ３／２＝０
【０２１１】
この方程式を導く際に、ｂを分母にするために、b≠０がこのケースでの必要条件となっている。
【０２１２】
この３次方程式を解いて1根δを選択すると、因数分解係数が満たすべきεを未知数とする２次方程式が２つ、数３９のように得られる。
【０２１３】
［数３９］
（ε／δ）２＋（ε／δ）＋Ｂ／δ２＝０
（ε／Ｓ）２＋（ε／Ｓ）＋δ／Ｓ２＝０
【０２１４】
これらを解いて係数α０，α１，β０，β１が得られる。これらの係数を持つ次の数４０に示すような因数分解の２次方程式を解いて、未知量xを求めると、Ｘ＝ｘ＋ａからエラー探索の４次方程式の解が求まる。
【０２１５】
［数４０］
（ｘ／α１）２＋（ｘ／α１）＋α０／α１２＝０
（ｘ／β１）２＋（ｘ／β１）＋β０／β１２＝０
【０２１６】
なお，各方程式を解く際に解のテーブルが利用できるように未知数の係数はＧＦ（２）の要素となる様に変換している。δを求める３次方程式では未知変数をδ／ｂ１／２とし、α０，β０を求める２次方程式では未知変数をε／δとし、α１，β１を求める２次方程式では未知変数をε／Ｓとし、因数分解の２次方程式ではｘ／α１，ｘ／β１としている。
【０２１７】
Ｃａｓｅ ２：Ｓ≠０，ｂ＝０の場合
ここでａ＝Ｄ／Ｓ，ｂ＝Ｄ２＋ＳＴ＝０，c＝Ｓ２Ｑ＋ＳＤＴ＋Ｔ２，Ｂ＝ａ４＋Ｔａ＋Ｑ であり、これらからＳ２Ｂ＝ｃである。なおc＝０は重根の条件となるので４ＥＣの解法を考える限りc≠０である。
【０２１８】
変数変換Ｘ＝ｘ＋ａを施してエラー探索方程式から２次の項を消去し、これを数４１のように２次式の積に因数分解する。
【０２１９】
［数４１］
ｘ４＋Ｓｘ３＋Ｂ＝（ｘ２＋α１ｘ＋α０）（ｘ２＋β１ｘ＋β０）＝０
【０２２０】
因数分解の２次式の係数α０，α１，β０，β１とシンドロームから導かれた量の関係α０β０＝Ｂ，β１α０＋α１β０＝０，δ＋α１β１＝０，α１＋β１＝Ｓから、未知量δ＝α０＋β０を導入して、δが満たすべき数４２の３次方程式が得られる。
【０２２１】
［数４２］
δ３＋ｃ＝０
【０２２２】
この方程式からただちに、δ＝ｃ１／３が得られ、因数分解係数が満たすべき未知数εの２次の方程式が２つ、Ｃａｓｅ １の数３９と同じ方程式が得られ、これらを解いて係数α０, α１，β０，β１が得られる。
【０２２３】
ただしこのＣａｓｅ ２の条件から、Ｂ／δ２＝δ／Ｓ２となるので、α１とβ１を求める２次方程式の根とα０とβ０を求める２次方程式の根は全く同じ形となり、この２根から、ｕ１＝α０／δ＝α１／Ｓ，ｕ２＝β０／δ＝β１／Ｓとなり、２次方程式は実質ひとつになる。
【０２２４】
これらの関係を有する係数を持つ因数分解の２次方程式（数４０）を解いて未知量ｘを求め、Ｘ＝ｘ＋ａからエラー探索の４次方程式の解が求まる。この際、先の関係式からα０／α１２＝δ／（Ｓ２ｕ１）,β０／β１２＝δ／（Ｓ２ｕ２）である。
【０２２５】
Ｃａｓｅ １と同様に、各方程式を解く際に解のテーブルが利用できるように未知数の係数はＧＦ（２）の要素なる様に変換している。即ちα０，β０を求める２次方程式では未知変数をε／δとし、α１，β１を求める２次方程式では未知変数をε／Ｓとし、因数分解の２次方程式ではｘ／α１，ｘ／β１としている。
【０２２６】
Ｃａｓｅ ３：Ｓ＝０，Ｄ≠０の場合
ａはＳ＝０で定義出来ず、ｂ＝Ｄ２＋ＳＤ＝Ｄ２，ｃ＝Ｓ２Ｑ＋ＳＤＴ＋Ｔ２＝Ｔ２であり、ｃ＝０は重根の条件となるので４ＥＣの解法を考える限り、ｃ≠０である。 ΓＤ＝ζη≠０からζ≠０，η≠０であり、Γ＝ζ２, Ｄ＝η／ζ, Ｔ＝ζ, Ｑ＝η２／ζ２＋θ／ζとなる。
【０２２７】
エラー探索方程式は３次の項がなく，これを下記数４３のように２次式の積に因数分解する。
【０２２８】
［数４３］
Ｘ４＋ＤＸ２＋ＴＸ＋Ｑ＝（Ｘ２＋α１Ｘ＋α０）（Ｘ２＋β１Ｘ＋β０）＝０
【０２２９】
この２次式方程式の係数α０，α１，β０，β１とシンドロームから導かれた量の関係から、未知量δ＝α０＋β０を導入して、δの満たすべき下記数４４の３次方程式が得られる。
【０２３０】
［数４４］
｛（δ＋Ｄ）／Ｄ｝３＋｛（δ＋Ｄ）／Ｄ｝＋ｃ／Ｄ３＝０
【０２３１】
このＣａｓｅ ３の条件Ｄ≠０は、上の３次方程式でＤが分母にくることから必要になる。この方程式は２次の項がない他の条件でも使用した３次方程式の形である。この方程式を解いて１根（δ＋Ｄ）／Ｄを選択し、因数分解係数が満たすべき未知数がεの２次方程式が２つ、下記数４５のように得られる。
【０２３２】
［数４５］
（ε／δ）２＋（ε／δ）＋Ｑ／δ２＝０
ε２＋δ＋Ｄ＝０
【０２３３】
これらを解いて係数α０, α１，β０，β１  が得られる。α１とβ１は、数４５の第２式から、α１＝β１＝(δ＋Ｄ）１／２である。
【０２３４】
これらの係数を持つ、下記数４６の因数分解の２次方程式を解いて、未知量Ｘを求めエラー探索の４次方程式の解が求まる。
【０２３５】
［数４６］
（Ｘ／α１）２＋（Ｘ／α１）＋α０／α１２＝０
（Ｘ／β１）２＋（Ｘ／β１）＋β０／β１２＝０
【０２３６】
Ｃａｓｅ １と同様に各方程式を解く際に解のテーブルが利用できるように、未知数の係数はＧＦ（２）の要素なる様に変換している。α０，β０を求める２次方程式では未知変数をε/δ，因数分解の２次方程式ではＸ／α１としている。
【０２３７】
Ｃａｓｅ ４：Ｓ＝０及びＤ＝０の場合
ｂ＝Ｄ２＋ＳＴ＝Ｄ２＝０，ｃ＝Ｓ２Ｑ＋ＳＤＴ＋Ｔ２＝Ｔ２であり、ｃ＝０は重根の条件となるので、４ＥＣの解法を考える限りｃ≠０である。Γ＝ζ２≠０からζ≠０、Ｓ＝０及びＤ＝０からη＝０であり、Ｔ＝ζ, Ｑ＝θ／ζとなる。
【０２３８】
エラー探索方程式は２次と３次の項がなく，これを数４７のように２次式の積に因数分解する。
【０２３９】
［数４７］
Ｘ４＋ＴＸ＋Ｑ＝（Ｘ２＋α１Ｘ＋α０）（Ｘ２＋β１Ｘ＋β０）＝０
【０２４０】
これらの２次式の係数α０，α１，β０，β１とシンドロームから導かれた量の関係、α０β０＝Ｑ，β１α０＋α１β０＝Ｔ，δ＋α１β１＝０，α１＋β１＝０を用い、未知量δ＝α０＋β０を導入して、δが満たすべき数４８の３次方程式（Ｃａｓｅ ２の数４２と同じ）が得られる。
【０２４１】
［数４８］
δ３＋ｃ＝０
【０２４２】
この方程式はすぐ解けて、δ＝ｃ１／３が得られる。このδから因数分解係数が満たすべき未知数がεの２次方程式が２つ、数４９のように得られる。
【０２４３】
［数４９］
（ε／δ）２＋（ε／δ）＋Ｑ／δ２＝０
ε２＋δ＝０
【０２４４】
これらを解いて係数α０，α１，β０，β１が得られる。α１とβ１は第２式から、α１＝β１＝δ１／２である。
【０２４５】
これらの係数を持つ、数４６と同じ因数分解の２次方程式を解いて未知量Ｘを求めエラー探索の４次方程式の解が求まる。
【０２４６】
Ｃａｓｅ １と同様に各方程式を解く際に解のテーブルが利用できるように、未知数の係数はＧＦ（２）の要素なる様に変換している。α０，β０を求める２次方程式では未知変数をε／δ，因数分解の２次方程式ではｘ／α１としている。
【０２４７】
以上のエラー探索の計算過程を、シンドロームから順に得られる要素の計算過程に即して場合分けしてまとめると、次のようになる。
【０２４８】
Ｃａｓｅ １：Ｓ≠０，ｂ≠０の場合
３次方程式ｗ３＋ｗ＝ｃ／ｂ３／２より、デコードにより１根ｗを選び、δ＝ｂ１／２ｗとする。次に２次方程式ｕ２＋ｕ＝Ｂ／δ２，ｖ２＋ｖ＝δ／Ｓ２の根を、デコードして求め、それぞれｕ１，ｕ２，ｖ１，ｖ２として、α０＝δｕ１，β０＝δｕ２及びα１＝Ｓｖ１，β１＝Ｓｖ２とする。
【０２４９】
さらに２次方程式ｙ２＋ｙ＝α０／α１２，ｚ２＋ｚ＝β０／β１２の根をデコードして求めた結果をｙ１，ｙ２及びｚ１，ｚ２として、４つのエラー位置を示す有限体要素がＸ１＝α１ｙ１＋ａ，Ｘ２＝α１ｙ２＋ａ，Ｘ３＝β１ｚ１＋ａ，Ｘ４＝β１ｚ２＋ａとして求まる。
【０２５０】
Ｃａｓｅ ２：Ｓ≠０，ｂ＝０の場合
δ＝ｃ１／３とする。次に２次方程式ｕ２＋ｕ＝Ｂ／δ２，ｖ２＋ｖ＝δ／Ｓ２の根をデコードして求め、それぞれｕ１，ｕ２とｖ１，ｖ２として、α０＝δｕ１，β０＝δｕ２及びα１＝Ｓｖ１，β１＝Ｓｖ２とする。
【０２５１】
さらに２次方程式ｙ２＋ｙ＝α０／α１２，ｚ２＋ｚ＝β０／β１２の根をデコードして求めた結果をｙ１，ｙ２及びｚ１，ｚ２として、４つのエラー位置を示す有限体要素がＸ１＝α１ｙ１＋ａ，Ｘ２＝α２ｙ２＋ａ，Ｘ３＝β１ｚ１＋ａ，Ｘ４＝β１ｚ２＋ａとして求まる。
【０２５２】
なおｕとｖの２次方程式は、Ｂ／δ２＝δ／Ｓ２の関係から同じ方程式である。
【０２５３】
Ｃａｓｅ ３：Ｓ＝０，η≠０の場合
３次方程式ｗ３＋ｗ＝ｃ／ｂ３／２より、デコードにより１根ｗからｗ＋１を選び、δ＝ｂ１／２（ｗ＋１）とする。次に２次方程式ｕ２＋ｕ＝Ｑ／δ２の根をデコードして求め、それぞれｕ１，ｕ２としてα０＝δｕ１，β０＝δｕ２及びα１＝β１＝（ｂ１／２ｗ）１／２とする。
【０２５４】
さらに２次方程式ｙ２＋ｙ＝α０／α１２，ｚ２＋ｚ＝β０／β１２の根をデコードして求めた結果を、ｙ１，ｙ２及びｚ１，ｚ２として、４つのエラー位置を示す有限体要素がＸ１＝α１ｙ１，Ｘ２＝α１ｙ２，Ｘ３＝β１ｚ１，Ｘ４＝β１ｚ２として求まる。
【０２５５】
Ｃａｓｅ ４：Ｓ＝０，η＝０の場合
δ＝ｃ１／３とする。次に２次方程式ｕ２＋ｕ＝Ｑ／δ２の根をデコードして求めて、それぞれｕ１，ｕ２として、α０＝δｕ１，β０＝δｕ２及びα１＝β１＝δ１／２とする。
【０２５６】
さらに２次方程式ｙ２＋ｙ＝α０／α１２，ｚ２＋ｚ＝β０／β１２の根をデコードして求めた結果をｙ１，ｙ２及びｚ１，ｚ２として、４つのエラー位置を示す有限体要素がＸ１＝α１ｙ１，Ｘ２＝α１ｙ２，Ｘ３＝β１ｚ１，Ｘ４＝β１ｚ２として求まる。
【０２５７】
エラー探索方程式を解く際に、様々な量を計算の分岐と計算の過程で利用するが、これらの量は全てシンドロームから計算される量である。シンドロームＳ（＝Ｓ１），Ｓ３，Ｓ５，Ｓ７は記憶されたデータから直接計算され得られる量であり、他の量はこれをもとに積、累乗、和を行なうことによって得られる。
【０２５８】
図６は、シンドロームから順に計算で必要な量が得られる手順を示している。同じステップで並列に求める量を出来るだけ少なくしてかつステップ数も少なくなるように計算の手順を作っている。
【０２５９】
即ち、シンドロームが得られた次のステップ１で、ζ＝Ｓ３＋Ｓ３，η＝Ｓ５＋Ｓ５，θ＝Ｓ７＋Ｓ７が計算される。ここでは累乗と和の演算が行なわれる。
【０２６０】
次のステップ２でこの計算結果とＳを用いて、これらの様々な累乗の積と商とが計算される。まず和を計算する際に必要な量は４個（Ｓ３ζ，Ｓη，Ｓ４η，Ｓ２θ）ある。
【０２６１】
これらの４個の量の和から２個の量を計算するのがその次のステップ３であり、Γ，ΓＴと次のステップの和で必要な４つの量が計算される。
【０２６２】
次のステップ４で前のステップの量の和であるΓＤ、そして次のステップの和で必要な３つの量が計算される。
【０２６３】
次のステップ５では得られた量の和であるΓＱと積と商によってＤ，Ｔが計算される。更に次のステップ６で積と商演算で必要な３つの量Ｑ，ａ，ＳＴが計算される。
【０２６４】
ステップ７で、ｂとζＴとＴａとＳ２Ｑが計算され、最後のステップ８でｃとＢが計算される。ｃの計算では和の数を少なくすため、ζ＝ＳＤ＋Ｔの関係を用いて変形している。
【０２６５】
シンドローム以降の計算ステップは、以上の８ステップであり、累乗演算は量を表現するコードの組み換えであるマルチプレクスで対応でき、和はパリティチェッカ回路、積と商は量を表現するコードのアダー回路で対応できる。これらの詳細は後に説明する。
【０２６６】
４ＥＣ−ＥＷのＥＣＣでは、４以下のエラーに対しての探索を行なうが、シンドロームから得られた情報によってエラーの数の判断が出来てその状況に合った探索を行なうことになる。最も単純には、全ての場合の探索を並行して行い、その結果をもってエラー位置の判断をする方法が考えられる。これは先に探索できるものから順次探索を開始できるので高速な探索は可能であるが、無駄な探索も行なうことになり、回路システムの規模が大きくなる。
【０２６７】
今まで説明して来た各エラー探索での条件から、並行して行われる解探索は、以下の様にまとめることが出来る。なお、Ｓ，ζなどシンドローム計算から得られる量はどのエラー探索でも共通の量であり、解探索方程式の係数Ｄ，Ｔ，Ｑ等はその方程式で固有の量であり、下付きの数字で区別した。即ち、係数Ｄを、２ＥＣなら、Ｄ２、３ＥＣならＤ３として区別した。
【０２６８】
・２ＥＣ以下の場合：エラー探索方程式は２次で、ｘ２＋Ｓｘ＋Ｄ２＝０であり、係数Ｄ２はシンドロームとＳＤ２＝ζの関係がある。この２次方程式が異なる２根を持つためには、ゼロ元と重根を持たないことが条件で、Ｓ≠０またＤ２≠０からζ≠０であり、この場合に不解なら、３エラー以上である。Ｓ＝０またはζ＝０で１ＥＣ以下となり、Ｓ≠０でζ＝０なら、Ｄ２＝０でｘ＋Ｓ＝０の１エラーであり、Ｓ＝０でno errorとなる。
【０２６９】
・３ＥＣの場合：エラー探索方程式は３次で、ｘ３＋Ｓｘ２＋Ｄ３ｘ＋Ｔ３＝０であり、係数を求める連立方程式の行列式はζでζ≠０であり、ζＤ３＝Ｓζ２＋η，ζＴ３＝Ｓ３ζ＋Ｓη＋ζ２の関係がある。この３次方程式が異なる３根を持つためには、ゼロ元と重根を持たないことが条件で、ゼロ元Ｔ３＝０、重根Ｔ３＋ＳＤ３＝ζ＝０からζＴ３＝Γ≠０となる。不解なら4エラー以上となる。
【０２７０】
・４ＥＣの場合：エラー探索方程式は４次で、ｘ４＋Ｓｘ３＋Ｄ４ｘ２＋Ｔ４ｘ＋Ｑ４＝０であり、係数を求める連立方程式の行列式はΓ＝Ｓ３ζ＋Ｓη＋ζ２＝ζＴ３でΓ≠０である。この４次方程式が異なる４根を持つためには、ゼロ元と重根を持たないことが条件で、ゼロ元Ｑ４＝０、重根Ｓ２Ｑ４＋ＳＤ４Ｔ４＋Ｔ４２＝ｃ＝０からｃＱ４≠０となる。不解なら５エラー以上となる。
【０２７１】
以上のエラー探索を並行に行い４つのエラーが検索可能なシステムを作ることができる。しかし、２ＥＣ以下，３ＥＣ及び４ＥＣの解探索を並行して行い、その結果からエラー判断するのは、単純であるが、無駄な探索を行うことにもなり、回路規模が大きくなる。
【０２７２】
そこでこの実施の形態においては、システムの回路規模を効果的に小さくするため、エラー数の条件として排他的な条件を抽出する。即ち各エラーの解探索の排他的条件を検討し、これを用いてシステム内の共通回路を時分割で多重に利用することにより、回路規模を小さくする。
【０２７３】
４ＥＣでのシンドロームとエラー探索方程式の係数が基本となるので、ここでは係数を、Ｄ４＝Ｄ，Ｔ４＝Ｔ，Ｑ４＝Ｑとおく。先の各エラー数の探索の条件から、４ＥＣの探索が３ＥＣ以下の探索になるのは、Γ＝０またはcＱ＝０、３ＥＣの探索が２ＥＣ以下の探索になるのは、ζＴ３＝Γ＝０、２ＥＣの探索が１ＥＣ以下になるのはζ＝０の場合である。これを踏まえて、エラー数が少ない方から多い方へと排他的分岐の条件を求める。
【０２７４】
・１ＥＣ以下の分岐条件
Γ＝０，ζ＝０の条件での、ζ＝０から、４ＥＣでのシンドロームと係数の関係は、次の数５０のようになる。
【０２７５】
［数５０］
ＳＤ＋Ｔ＝ζ  →  ＳＤ＋Ｔ＝０
（ζ＋Ｓ３）Ｄ＋Ｓ２Ｔ＋ＳＱ＝η  →  ＳＱ＝η
（η＋Ｓ５）Ｄ＋Ｓ４Ｔ＋（ζ＋Ｓ３）Ｑ  →  ηＤ＋Ｓ３Ｑ＝η（Ｓ２＋Ｄ）＝θ
Γ＝Ｓ３ζ＋Ｓη＋ζ２  →  Γ＝Ｓη
ｃ＝Ｓ２Ｑ＋ＳＤＴ＋Ｔ２  →  ｃ＝Ｓ２Ｑ＝Γ
【０２７６】
ｃＱ＝０からはＳＱ＝０となり、Γ＝０が成り立ち、Γ＝０とすると、ｃ＝０でｃＱ＝０は成り立つ。従って、Γ＝０のみ考えればよく、このときη＝０又はＳ＝０であり、Ｓ＝０なら、ζ＝０でθ＝０になるから、η＝０が常に成り立つ。逆に、ζ＝η＝０（θ＝０）から、Γ＝０，ｃＱ＝０が成り立つので、これは４ＥＣの計算の１ＥＣ以下の条件と同値になる。
【０２７７】
１ＥＣ以下への分岐の排他的条件は、ζ＝η＝０（θ＝０）である。このとき、Ｓ≠０ならＸ１＝Ｓで１エラー、Ｓ＝０ならno errorとなる。
【０２７８】
１ＥＣ以下のエラー探索が不解の場合に相当するのは同値条件下で矛盾が生じる場合で、η＝０でθ≠０なら矛盾、Ｓ＝０でη≠０なら矛盾がシンドロームと係数の関係から言え、この場合は５エラー以上となる。
【０２７９】
・２ＥＣの分岐条件
Γ＝０で４ＥＣが３ＥＣ以下となり、２ＥＣ以下になるには、ζＴ３＝Γ＝０であるが、ζ＝０とすると１ＥＣ以下なので、ζ≠0からＴ３＝０となる。
【０２８０】
従って、３ＥＣでのシンドロームと係数の関係は、次の数５１のように書き換えられる。
【０２８１】
［数５１］
ＳＤ３＋Ｔ３＝ζ  →  ＳＤ３＝ζ
（ζ＋Ｓ３）Ｄ３＋Ｓ２Ｔ３＝η  →  ζ（Ｓ２＋Ｄ３）＝η
Γ＝Ｓ３ζ＋Ｓη＋ζ２  →  Γ＝０
【０２８２】
４ＥＣでの２ＥＣになる条件Γ＝０が常に成り立つので、ｃＱ＝０は考えなくても良く、２ＥＣへの分岐条件はΓ＝０かつζ≠０となる。
【０２８３】
・３ＥＣの分岐条件
Γ＝０またはcＱ＝０の条件で３ＥＣ以下となるが、Γ＝０は２ＥＣ以下となるので、３ＥＣへの分岐条件は、Γ≠０の時のｃ＝０又はＱ＝０である。
【０２８４】
・４ＥＣの分岐条件
Γ≠０かつcＱ≠０が４ＥＣの条件、言い換えれば、Γ≠０かつc≠０かつＱ≠０が４ＥＣの分岐条件となる。
【０２８５】
これらの分岐した解探索で有限体の要素がエラー探索方程式を満たさず不解であれば、５エラー以上が生じていることになる。
【０２８６】
以上の排他的分岐条件をまとめると、図７のようになる。ζ＝０の分岐ではΓ＝０を見る必要がないので、１ＥＣ以下の判断は早い段階で可能となる。
【０２８７】
図８は、４ビットまでのエラー訂正が可能で５ビット以上のエラーがあることの警告を出すことができる４ＥＣ−ＥＷ−ＢＣＨシステムの構成図である。エンコード部２０ａでは、情報ビットはデータビットの構成によって適宜必要な次数を選んでその係数のみを用い、使用しない係数は固定した０または１データとして扱うことによって固定ビットをメモリコア１０に記憶させずにメモリ容量に合ったシステムを構成する。
【０２８８】
情報ビットに使用する次数の選択は計算規模やシステム規模が最小になるよう選択する。一般的には情報をａｉとしてこれらを係数とするｈ−１−４ｎ次の多項式をｆ（ｘ）とし、これを入力とする。ｆ（ｘ）ｘ４ｎをコード生成多項式ｇ（ｘ）で割った剰余をｒ（ｘ）として多項式ｆ（ｘ）ｘ４ｎ＋ｒ（ｘ）の係数をデータビットとしてメモリコア１０に書き込む。
【０２８９】
メモリコア１０は、フラッシュメモリ（特に多値）、ＲｅＲＡＭ，ＰＣＲＡＭ等の大容量メモリであり、ビットエラーが避けられない構成のものである。例えば特開２００７−３５１２４公報(対応米国特許Ｎｏ．7,369,433 B2）に記載されているリアルタイムの高速アクセスが必要な仕様のメモリである。
【０２９０】
データ読み出しに関しては、メモリから読み出したｈビットのデータはｈ−１次の多項式ν（ｘ）の係数として扱われる。
【０２９１】
シンドローム演算部３０ａは、ν（ｘ）をそれぞれ、ｍ１（ｘ），ｍ３（ｘ），ｍ５（ｘ），ｍ７（ｘ）で割ってシンドロームＳ，Ｓ３，Ｓ５，Ｓ７を求める演算部である。シンドロームのそれぞれは、インデックスをｍｏｄ ｐ，ｍｏｄ ｑ，ｍｏｄ ｒ（ｈ＝ｐｑｒ）で区別した表現インデックスとして表す。
【０２９２】
以後の計算で、アダーにおいてはシンドロームＳ，Ｓ３，Ｓ５，Ｓ７は、表現インデックスで表され、これを更にバイナリの数としての足し算が行なわれる。パリティチェッカでは、表現インデックスをデコードして有限体の要素そしてｎ−１次の多項式として表され、各次数の係数のパリティチェックの結果として和の要素の多項式の係数を得て、これを表現インデックスにデコードする。
【０２９３】
シンドロームが得られた後は、計算ブロックであるシンドローム要素計算部，ＳＥＣ(Syndrome Element Calculation)部，９０において、必要な量が先に示したステップで計算されレジスタ部９１に保持される。レジスタ部９１は具体的には各アダー等がその出力部に持つラッチにより構成されるが、ここでは条件分岐などで特に必要なもの１０個の量を保持する部分をまとめて示している。
【０２９４】
ＳＥＣ部９０で得られた量をもとに、エラー位置の探索を行なう計算ブロックがエラー探索部，ＥＳ(Error Search)部，１００であり、計算結果の量を保持するレジスタ部１０１，１０２がある。
【０２９５】
ＳＥＣ部９０及びＥＳ部１００で保持されるのは全て表現インデックスである。シンドローム演算部３０ａ、ＳＥＣ部９０及びＥＳ部１００の計算過程を制御するのがクロック発生器（Clock Generator）３００で、外部クロックＣＬから分周されたクロックｃｋ１〜ｃｋ１６を発生する。図では計算ブロックを主に制御するクロック分配が示されている。
【０２９６】
ＳＥＣ部９０とＥＳ部１００は、データをやり取りして回路ブロックがタイムシェアリングやマルチプレクスして使用される。従って、ＳＥＣ部９０とＥＳ部１００は、両方向の矢印で結ばれている。これらの時分割とマルチプレクスにより、これらの計算部の回路規模を小さくしている。
【０２９７】
ＥＳ部１００で得られた結果は、次の計算ブロックであるエラー訂正部，ＥＣ（Error Correction）部，２００に入り、メモリから読み出されたデータの修正が行われる。即ちＥＣ部２００では外部からシステムに入れられた情報データ多項式ｆ（ｘ）が復元され、情報データとして出力される。
【０２９８】
図８に示した計算ブロック，ＳＥＣ部９０やＥＳ部１００は機能として分けたものであり、回路としては共通回路を時分割して利用するので回路システムの時間区分による動作を分けたものであると見なすことができる。
【０２９９】
図９は、クロック発生器３００が発生する内部クロックの概要を示している。メモリとデータの転送を制御する基本的なクロックがＣＬであり、これは数十nsのサイクルタイムを有する、メモリ外部の制御クロックに同期したクロックである。このクロックをトリガーとして内部クロックｃｋ１からｃｋ１６を発生する。クロック発生の方法はここでは述べないが、例えば筆者が以前提案した特願2004-150614号明細書に記載されている方法が利用できる。
【０３００】
クロックｃｋ１〜ｃｋ１６は順次カスケード的に発生されて巡回するクロックであり、数nsのパルスクロックである。更にこれらのパルスクロックをトリガーとして新たなクロック（ＣＬ）サイクルが開始されるまで状態を保持する、ダッシュつきのクロックが発生される。例えばｃｋ８パルスからはｃｋ８’が、ｃｋ１０パルスからはｃｋ１０’が発生される。
【０３０１】
図１０は、ＳＥＣ部９０の詳細構成を示している。４つのアダー回路ＡＤ１−ＡＤ４と４つのパリティチェッカ回路ＰＣ１−ＰＣ４をクロックｃｋ１−ｃｋ８でタイムシェアリングして利用するので、各クロックｃｋ１−ｃｋ８の流れを横軸として、それぞれのクロックタイミングで同時に用いられるアダーやパリティチェッカを破線で囲んで示している。
【０３０２】
ここで、４つのアダー回路ＡＤ１−ＡＤ４は、クロックｃｋ２で同時に用いられ、クロックｃｋ３でも全て同時に用いられ、クロックｃｋ４では、ＡＤ２−ＡＤ４が用いられることを示している。以下同様である。また４つのパリティチェッカ回路ＰＣ１−ＰＣ４（２入力パルティチェッカＰＣ１，ＰＣ２と４入力パリティチェッカＰＣ３，ＰＣ４）は、クロックｃｋ１のタイミングでは、ＰＣ１,ＰＣ２及びＰＣ４が同時に用いられ、クロックｃｋ３のタイミングでは、ＰＣ３，ＰＣ４が同時に用いられ、以下同様に時分割で使用されることを示している。
【０３０３】
クロックｃｋ１〜ｃｋ８の各々で各ステップが動作するが、これらのステップで計算される量は先に図６において、シンドロームからの有限体要素の計算手順として示したステップ１〜８の順番である。即ちステップ数１〜８とクロックｃｋ１〜ｃｋ８の番号が対応している。なお、４入力パリティチェッカで３入力となるときに用いない入力は“０”すなわちＶｓｓを入力信号として与える。
【０３０４】
これらの計算過程で得られた１０個の量Ｓ，ζ，η，θ，Γ，Ｑ，ａ，ｂ，ｃ，Ｂは、それぞれダッシュつきのクロックｃｋ１’〜ｃｋ９’で、図１０に示すように、レジスタ部９１（各アダーやパリティチェッカの出力ラッチ）で保持された状態にある。
【０３０５】
図１１は、ＥＳ部１００の構成の詳細を示す。ＳＥＣ部９０での計算結果として保持された有限体要素を元にして計算過程の分岐を行ない、さらにこれらの量を用いて計算を進めてエラーを特定するのがＥＳ部１００である。
【０３０６】
このＥＳ部１００で使用する回路は、先のＳＥＣ部９０で用いた回路ではあるが、図１１では先ずは計算の手順に従った回路機能のまとまりとして示している。即ち、ＥＳ部１００は、３次方程式の解を求める回路ブロック（ＣＵＢＥ）１０３、２次方程式の解を求める回路ブロック（ＳＱＵＡＲＥ）１０４及び、要素間の和を求めるための４つの２入力パリティチェッカ回路１０５〜１０８と、計算の途中結果と最終結果を保持するレジスタ１０１，１０２とにより構成される。
【０３０７】
４ＥＣシステムの解法をまず説明すると、ＣＵＢＥ １０３の構成は、３次方程式の未知数部がこれと等値される量Ｈをシンドロームから計算するひとつのアダー回路１１１と、３次方程式ｗ３＋ｗ＝Ｈからｗを求めるデコーダ計算回路１１２と、ｗから本来欲しい量δをｗまたはｗ＋１とｂ１／２の積として計算するもうひとつのアダー回路１１３とからなる。
【０３０８】
ＳＱＵＡＲＥ １０４は、２次方程式の未知数部がこれと等値されるδから得られる量ＪとＫを計算する２つのアダー回路１２１，１２２と、２つの２次方程式ｕ２＋ｕ＝Ｊ，ｖ２＋ｖ＝Ｋからそれぞれｕ，ｖを求めるデコーダ計算回路１２３，１２４と、ｕ及びｖから４次方程式の２次式への因数分解の係数α０，β０，α１，β１を計算する４つのアダー回路１２５〜１２８とを有する。
【０３０９】
ＳＱＵＡＲＥ １０４は更に、上のアダー回路１２１，１２２、デコーダ計算回路１２３，１２４、アダー回路１２５〜１２８をマルチプレクスして後半の計算部として使用する、括弧つきで示した回路部を有する。即ち、得られた係数からエラー探索の４次方程式の根を求めるために解く2次方程式の未知数部にこれと等値される量ＬとＭを計算する２つのアダー回路１２１ａ，１２２ａと、２つの２次方程式ｙ２＋ｙ＝Ｌ，ｚ２＋ｚ＝Ｍからそれぞれｙ，ｚを求めるデコーダ計算回路１２３ａ，１２４ａと、ｙ及びｚから４次方程式解を計算する４つのアダー回路１２５ａ〜１２８ａとを有する。
【０３１０】
このＳＱＵＡＲＥ １０４の前半計算部と後半計算部の各対応回路は、添字“ａ”の有無で区別しているが、これらは時分割で使用される共通化回路であることを示している。前半計算部の計算結果を保持するために、レジスタ部１０１が用いられ、ここにα１，β１が保持される。
【０３１１】
ＳＱＵＡＲＥ １０４の計算結果はそれぞれシンドロームから得ら量を加えて本来のエラー探索結果となるので、この和の計算を行なう４つの実質２入力パリティチェッカ回路１０５〜１０８があり、その結果Ｘ１，Ｘ２，Ｘ３，Ｘ４を保持するためにレジスタ部１０２がある。
【０３１２】
なお、図１１において、３ＥＣでの解法で使用する回路の入出力は括弧[ ]を信号名につけて、２ＥＣでの解法で使用する回路の入出力には括弧{ }を信号名につけて示して、これらの回路も共通化回路であることを示している。
【０３１３】
図１２は、ＥＳ部１００について、ＳＥＣ部９０と共通のアダー回路ＡＤ１−ＡＤ４及びパリティチェッカ回路ＰＣ１−ＰＣ４及び、３次式、２次式の解をデコーダを用いて求める計算回路を、タイムシェアリングして利用する手順として、図１０と同様にクロックの流れに沿って分散させて示したものである。
【０３１４】
ＥＳ部１００ではエラー探索の分岐の場合によって使用する回路とクロックが変わるので、クロックの番号は特定せず、回路が使用される全ての場合を重ねて示した。３ＥＣでの解法で使用する回路の入出力は[ ]を信号名につけて、２ＥＣでの解法で使用する回路の入出力には{ }を信号名につけて示したのは、図１０の場合と同様である。
【０３１５】
α、βのレジスタ１０１、Ｘｉのレジスタ１０２がデータを保持するのはそれぞれのデータが計算されてからであるので、それらのクロックには計算結果が得られたクロックに対してその次を意味する＋１を付け、さらにサイクル期間中保持されるのでダッシュ（’）を付して示している。
【０３１６】
クロックｃｋｉとｃｋｊで使用されるのが、ＣＵＢＥ １０３の回路ブロックに相当し、計算回路１１２は、３次式ｗ３＋ｗ＝Ｈの計算に一回使用される。クロックｃｋｋからｃｋｎまでで使用されるのが、ＳＱＵＡＲＥ １０４の回路ブロックに相当し、計算回路１２３，１２３ａは、同じものをそれぞれｕ２＋ｕ＝Ｊ，ｙ２＋ｙ＝Ｌの計算に時分割で用いることを示し、同様に、計算回路１２４，１２４ａは、同じものをｖ２＋ｖ＝Ｋ，ｚ２＋ｚ＝Ｍの計算に時分割で用いることを示している。
【０３１７】
クロックｃｋｏは最終的にエラー位置の有限体要素を特定する要素間の和の演算を行なうタイミングであり、パリティチェッカ回路ＰＣ１〜ＰＣ４（２ビットパリティチェッカ回路１０５〜１０８対応）により、Ｘ１〜Ｘ４を出力する。
【０３１８】
４ＥＣでのエラー探索の計算過程を、先に４つのケース，Ｃａｓｅ １〜Ｃａｓｅ ４，に場合分けして説明したが、図１３，１４，１５及び１６は、ＥＳ部１００でのそれぞれＣａｓｅ １〜４の計算手順を示している。
【０３１９】
以下、各部の計算手順を簡単に説明すれば、次の通りである。
【０３２０】
図１３のＣａｓｅ １：
４ＥＣであるので、Γ≠０，Ｑ≠０，ｃ≠０であり、さらにＣａｓｅ １の条件として、Ｓ≠０とｂ≠０である。
【０３２１】
ＣＵＢＥ １０３は、クロックｃｋ９でアダー回路ＡＤ１を用いて、Ｈ＝ｃｂ−３／２を計算する。またクロックｃｋ１０で、デコーダ計算回路１１２により、ｗ３＋ｗ＝Ｈからｗをデコードし、アダー回路ＡＤ４でδ＝ｗｂ１／２を計算する。
【０３２２】
ＳＱＵＡＲＥ １０４は、クロックｃｋ１１でアダー回路ＡＤ１によりＪ＝Ｂδ−２を、アダー回路ＡＤ４によりＫ＝δＳ−２を計算する。クロックｃｋ１２で、計算回路１２３，１２４によりｕ２＋ｕ＝Ｊ，ｖ２＋ｖ＝Ｋからｕ，ｖをデコードし、アダー回路ＡＤ１−ＡＤ４でそれぞれ、α０＝δｕ１，β０＝δｕ２，α１＝Ｓｖ１，β１＝Ｓｖ２を計算する。
【０３２３】
更に、クロックｃｋ１３でアダー回路ＡＤ２によりＬ＝α０α１−２，アダー回路ＡＤ３によりＭ＝β０β１−２を計算する。更に、クロックｃｋ１４で、計算回路１２３ａ，１２４ａにより、ｙ２＋ｙ＝Ｌとｚ２＋ｚ＝Ｍから、ｙ１，ｙ２とｚ１，ｚ２をデコードし、アダー回路ＡＤ１〜ＡＤ４により、α１ｙ１，α１ｙ２，β１ｚ１，β１ｚ２を計算する。
【０３２４】
α１とβ１は、次ステップ以降のステップで利用するのでクロックｃｋ１３’でレジスタ１０１に保持する。
【０３２５】
ＳＱＵＡＲＥ １０４の出力部ではクロックｃｋ１５でパリティチェッカ回路ＰＣ１〜ＰＣ４にて、Ｘ１＝ａ＋α１ｙ１，Ｘ２＝ａ＋α１ｚ１，Ｘ３＝ａ＋β１ｚ１，Ｘ４＝ａ＋β１ｚ２を計算し、その結果をクロックｃｋ１６’でレジスタ１０２に保持する。
【０３２６】
図１４のＣａｓｅ ２：
４ＥＣであるので、Γ≠０，Ｑ≠０，ｃ≠０であり、さらにＣａｓｅ ２の条件として、Ｓ≠０，ｂ＝０である。
【０３２７】
ＣＵＢＥ １０３は使用しないで、δ＝ｃ１／３とする。
【０３２８】
ＳＱＵＡＲＥ １０４は、クロックｃｋ９でアダー回路ＡＤ１，ＡＤ４によりそれぞれ、Ｊ＝Ｂδ−２，Ｋ＝δＳ−２を計算する。クロックｃｋ１０で、デコーダ計算回路１２３，１２４により、ｕ２＋ｕ＝Ｊとｖ２＋ｖ＝Ｋからｕとｖをそれぞれ２つｕ１とｕ２，ｖ１とｖ２としてデコードし、アダー回路ＡＤ１〜ＡＤ４でα０＝δｕ１，β０＝δｕ２，α１＝Ｓｖ１，β１＝Ｓｖ２を計算する。
【０３２９】
更に、クロックｃｋ１１でアダー回路ＡＤ２，ＡＤ３によりそれぞれ、Ｌ＝α０α１−２，Ｍ＝β０β１−２を計算する。
【０３３０】
更に、クロックｃｋ１２で、デコーダ計算回路１２３ａ，１２４ａにより、ｙ２＋ｙ＝Ｌ，ｚ２＋ｚ＝Ｍからｙ，ｚをそれぞれ２つｙ１とｙ２，ｚ１とｚ２としてデコードし、アダー回路ＡＤ１−ＡＤ４によりそれぞれ、α１ｙ１，α１ｙ２，β１ｚ１，β１ｚ２を計算する。
【０３３１】
α１とβ１は、次ステップ以降のステップで利用するのでクロックｃｋ１１’でレジスタ１０１に保持する。
【０３３２】
またＳＱＵＡＲＥ １０４の出力部ではクロックｃｋ１３でパリティチェッカ回路ＰＣ１−ＰＣ４にてそれぞれ、Ｘ１＝ａ＋α１ｙ１，Ｘ２＝ａ＋α１ｙ２，Ｘ３＝ａ＋β１ｚ１，Ｘ４＝ａ＋β１ｚ２を計算し、その結果をクロックｃｋ１４’でレジスタ１０２に保持する。
【０３３３】
図１５のＣａｓｅ ３：
４ＥＣであるので、Γ≠０，Q≠０，c≠０であり、更にＣａｓｅ ３の条件として、Ｓ＝０とη≠０である。
【０３３４】
ＣＵＢＥ １０３は、クロックｃｋ９でアダー回路ＡＤ１を用いてＨ＝ｃｂ−３／２を計算し、クロックｃｋ１０でデコーダ計算回路１１２によりｗ３＋ｗ＝Ｈからｗとｗ＋１をデコードして、アダー回路ＡＤ４でδ＝（ｗ＋１）ｂ１／２を計算する。
【０３３５】
ＳＱＵＡＲＥ１０４ は、クロックｃｋ１１でアダー回路ＡＤ１によりＪ＝Ｑδ−２を計算し、クロックｃｋ１２でデコーダ計算回路１２３によりｕ２＋ｕ＝Ｊから２つの解ｕ１とｕ２をデコードして、アダー回路ＡＤ１，ＡＤ２及びＡＤ４によりそれぞれ、α０＝δｕ１，β０＝δｕ２及びα１２＝β１２＝ｗｂ１／２を計算する。
【０３３６】
更に、クロックｃｋ１３では、アダー回路ＡＤ２によりＬ＝α０α１−２を、アダー回路ＡＤ３によりＭ＝β０β１−２を計算する。更にクロックｃｋ１４で、デコーダ計算回路１２３ａ，１２４ａによりそれぞれ、ｕ２＋ｕ＝Ｊとｖ２＋ｖ＝Ｋをｙ２＋ｙ＝Ｌとｚ２＋ｚ＝Ｍとして、ｙとｚをそれぞれ二つずつ、ｙ１，ｙ２とｚ１，ｚ２としてデコードし、アダー回路ＡＤ１，ＡＤ２，ＡＤ３及びＡＤ４でそれぞれ、α１ｙ１，α１ｙ２，β１ｚ１及びβ１ｚ２を計算する。
【０３３７】
α１とβ１は次ステップ以降のステップで利用するので、クロックｃｋ１３’でレジスタ１０１に保持する。
【０３３８】
ＳＱＵＡＲＥ １０４の出力は、クロックｃｋ１５でパリティチェッカ回路ＰＣ１−ＰＣ４により、ａ＝“０”として、Ｘ１＝ａ＋α１ｙ１，Ｘ２＝ａ＋α１ｙ２，Ｘ３＝ａ＋β１ｚ１，Ｘ４＝ａ＋β１ｚ２として計算し、その結果はクロックｃｋ１６’でレジスタ１０２に保持する。クロックｃｋ１５の計算ステップは本来必要がないが、手順をなるべく変えないようにするため、ａ＝“０”として利用している。
【０３３９】
図１６のＣａｓｅ ４： 
４ＥＣであるので、Γ≠０，Ｑ≠０，ｃ≠０であり、更にＣａｓｅ ４の条件として、Ｓ＝０，η＝０である。
【０３４０】
ＣＵＢＥ １０３は使用しないで、δ＝ｃ１／３とする。
【０３４１】
ＳＱＵＡＲＥ １０４は、クロックｃｋ９でアダー回路ＡＤ１によりＪ＝Ｑδ−２を計算し、クロックｃｋ１０でデコーダ計算回路１２３によりｕ２＋ｕ＝Ｊからｕ１とｕ２をデコードして、アダー回路ＡＤ１，ＡＤ２でそれぞれ、α０＝δｕ１，β０＝δｕ２を計算し、更にα１２＝β１２＝δと置く。
【０３４２】
更に、クロックｃｋ１１でアダー回路ＡＤ２，ＡＤ３によりそれぞれ、Ｌ＝α０α１−２，Ｍ＝β０β１−２を計算する。そしてクロックｃｋ１２でデコーダ計算回路１２３ａ，１２４ａにより、ｕ２＋ｕ＝Ｊと ｖ２＋ｖ＝ｋをｙ２＋ｙ＝Ｌとｚ２＋ｚ＝Ｋとしてｙとｚをそれぞれ２つｙ１，ｙ２とｚ１，ｚ２としてデコードし、アダー回路ＡＤ１，ＡＤ２，ＡＤ３及びＡＤ４でそれぞれ、α１ｙ１，α１ｙ２，β１ｚ１及びβ１ｚ２を計算する。
【０３４３】
α１とβ１は次ステップ以降のステップで利用するので、クロックｃｋ１１’でレジスタ１０１に保持する。
【０３４４】
ＳＱＵＡＲＥ １０４の出力は、クロックｃｋ１３でパリティチェッカ回路ＰＣ１−ＰＣ４にて、ａ＝０として、Ｘ１＝ａ＋α１ｙ１，Ｘ２＝ａ＋α１ｙ２，Ｘ３＝ａ＋β１ｚ１，Ｘ４＝ａ＋β１ｚ２を計算し、その結果をクロックｃｋ１４’でレジスタ１０２に保持する。
【０３４５】
図１７は、３ＥＣの場合のＥＳ部１００の計算手順である。３ＥＣであるので、Γ≠０であり、Ｑ＝０又はｃ＝０である。
【０３４６】
ＣＵＢＥ １０３は、クロックｃｋ９でアダー回路ＡＤ１，ＡＤ３によりそれぞれ、Ｈ＝ζ５η−３，Ａ＝ηζ−１を計算する。またクロックｃｋ１０で、デコード計算回路１１２によりｗ３＋ｗ＝Ｈからｗとｗ＋１をデコードし、アダー回路ＡＤ４でα２＝β１２＝ｗＡを計算する。
【０３４７】
ＳＱＵＡＲＥ１０４は、クロックｃｋ１１でアダー回路ＡＤ１にてＪ＝（ｗ＋１）ｗ−１を計算し、クロックｃｋ１２でデコーダ計算回路１１２によりｕ２＋ｕ＝Ｊから二つｕ１，ｕ２をデコードし、アダー回路ＡＤ１，ＡＤ２でそれぞれ、β１ｚ１＝β１ｕ１，β１ｚ２＝β１ｕ２を計算する。β１は次ステップ以降のステップで利用するので、クロックｃｋ１１’でレジスタ１０１に保持する。
【０３４８】
ＳＱＵＡＲＥ１０４の出力はクロックｃｋ１３でパリティチェッカ回路ＰＣ１−ＰＣ３により、Ｘ１＝Ｓ＋β１，Ｘ２＝Ｓ＋β１ｚ１，Ｘ３＝Ｓ＋β１ｚ２を計算して、その結果をクロックｃｋ１４’でレジスタ１０２に保持する。
【０３４９】
図１８は、２ＥＣの場合のＥＳ部１００の計算手順である。２ＥＣであるので、Γ＝０，ζ≠０である。ＣＵＢＥ １０３は使用しない。
【０３５０】
ＳＱＵＡＲＥ １０４は、クロックｃｋ９でアダー回路ＡＤ４によりＫ＝ζＳ−３を計算する。更にクロックｃｋ１０でデコーダ計算回路１２４により、ｖ２＋ｖ＝Ｋからｖを２つｖ１とｖ２としてデコードし、アダー回路ＡＤ３，ＡＤ４によりそれぞれ、Ｘ１＝Ｓｖ１，Ｘ２＝Ｓｖ２を計算する。
【０３５１】
ＳＱＵＡＲＥ １０４の出力はクロックｃｋ１１’でレジスタ１０２に保持する。
【０３５２】
図１９は、１ＥＣ以下の場合の手順である。１ＥＣ以下であるのでζ＝０，η＝０，θ＝０である。ＥＳ部１００は使用せず、ＳＥＣ部９０までで計算手順は終了する。Ｘ１＝Ｓとして、これをクロックｃｋ３’でレジスタ１０２に保持する。Ｓ＝０なら、no errorとなる。
【０３５３】
今まで示した、４ＥＣ，３ＥＣ，２ＥＣの全ての手順で、デコーダ計算回路（ｓｏｌｖｅｒ）で解が求まらない場合は、５エラー以上であり、ζ＝０であってη＝０かつθ≠０、または、ζ＝０であってＳ＝０かつη≠０の場合も５エラー以上となる。
【０３５４】
以上のクロック制御による４ＥＣの回路システムは、構成するアダー回路やパリティチェッカ回路の数で見ると、図１に示した、クロック制御によらないタイプの回路方式に比べて、アダー回路は6つから４つに減り、パリティチェッカ回路は４つで変わらない。即ち回路規模を大きくすることなく、４ＥＣが実現できることが分かる。無論、４ＥＣのこのシステムから不必要な部分を除けば、図１に相当するクロック制御の３ＥＣシステムが構築できる。
【０３５５】
今まで説明した計算過程で使用される有限体要素間の演算を並列化して高速化する手法としての表現インデックスについて、ここで詳細を説明する。
【０３５６】
有限体要素間の積は、そのインデックスの和を求めることに帰着するので、インデックスを２進表示したときの桁数を小さくすれば、足し算での桁上げの時間を小さくすることができる。また和はインデックスの数（ドメイン）を法とする同値類でありドメインの剰余として求められるので、使用する有限体を大きくするとドメインが大きくなりその分演算時間は増加する。
【０３５７】
有限体要素と１対１に対応するインデックスの数を見かけ上大幅に減らすことが出来るのが、表現インデックスである。いま有限体ＧＦ（２ｎ）を考える。このインデックスのドメインはｈ＝２ｎ−１であるが、ｈを素因数分解して素数ｐ１，ｐ２，，ｐｉ（ｈ）の積として表すと、インデックスがｍに相当する有限体要素αｍの等価な表現が、下記数５２のように得られる。
【０３５８】
［数５２］
αｍ⇔ ｍ（ｍｏｄ ｈ）
⇔ ｛ｍ（ｍｏｄ ｐ１），ｍ（ｍｏｄ ｐ２），，ｍ（ｍｏｄ ｐｉ（ｈ）｝
【０３５９】
これはインデックスを、ドメインの因数分解の成分をドメインとする成分に分解して表すものであり、これをインデックスに対する表現インデックスと呼んでいる。この表現インデックスを用いることにより、ドメインが見かけ上小さくなる。すなわちインデックスのドメインは０からｈ−１のｈであるが、表現インデックスのドメインは因数分解の最大の素数ｐｉ（ｈ）で決まり、０からｐｉ（ｈ）−１までのｐｉ（ｈ）である。
【０３６０】
有限体要素αｉとαｊの積はαｉ＋ｊとなるので、対応する表現インデックスで表すと数５３のようになる。
【０３６１】
［数５３］
αｉ×αｊ＝αｉ＋ｊ  ⇔
｛ｉ(ｐ１)，ｉ(ｐ２)，…，ｉ(ｐｉ（ｈ）)｝{ｊ(ｐ１)，ｊ(ｐ２)，…，ｊ(ｐｉ（ｈ）)｝
＝｛ｉ＋ｊ(ｐ１)，ｉ＋ｊ(ｐ２)，…，ｉ＋ｊ(ｐｉ（ｈ）)｝
【０３６２】
従って、有限体要素の積は、それらのインデックス成分の間の因数分解素数を法としての足し算となる。即ちドメインｈのビットはｎであり、この足し算が最大ｌｏｇ２ｐｉ（ｈ）ビットの足し算の並列演算に縮小される。
【０３６３】
次に、ｎの実用的ないくつかのケースについて具体的に比較検討する。
【０３６４】
大容量ファイルメモリにオンチップで搭載するＥＣＣシステムは回路規模、演算スピード、冗長メモリの規模を最適化して決める必要がある。具体的に用いられる可能性の高い有限体ＧＦ（２ｎ）のｎ＝８から１３について比較検討する。検討するのはエラー探索をデコーダを用いて行なう高速なリアルタイム方式であるから、デコーダ規模が大きくなり過ぎないｎ＝１３までを対象とした。
【０３６５】
図２０は、その比較結果をまとめた表である。表の各行の項目は、以下の通りである。
【０３６６】
情報ビット数：有限体要素の数は２ｎであるが、チェックビットが必要なので２の累乗で扱える情報ビット数は２ｎ−１となる。２の累乗にこだわらなければ２ｎからチェックビット数を引いたビット数まで情報ビット数を増やすことが出来る。この数は一括してデータ処理できる有効な情報のビット数を表す。
【０３６７】
４ＥＣチェックビット：オンチップでデコーダ方式による高速処理が可能な最大訂正である４ＥＣの場合を想定してシステムの規模を比較するので、４ＥＣのチェックビット数４ｎを示す。
【０３６８】
訂正率：情報ビットとチェックビットを足したビット数がＥＣＣの演算で一括処理され、４ビットのエラーまでが訂正されるので、訂正率は４／（２ｎ−１＋４ｎ）となる。
【０３６９】
メモリ冗長率：メモリのデータとして有効な情報ビット数に対して、ＥＣＣのために設けなければならないチェックビット数４ｎの割合で、４ｎ／２ｎ−１である。
【０３７０】
ｈ＝２ｎ−１素因数分解：インデックスのドメインｈの素因数分解を示す。
【０３７１】
最大成分インデックスビット数：インデックスの素因数分解の最大素数を２進表現するためのビット数である。
【０３７２】
バス幅：表現インデックス成分のドメインの総和で、システムを構成する際に回路間でやり取りされる有限体要素データのバスとなる。
【０３７３】
これらの比較結果から、訂正率０．５％以上、チェックビット領域１０％以下、計算の並列化から考えて表現インデックス成分数が２または３、並列化の効果を得るために成分インデックス最大ビット数５以下、回路規模からバス幅５０以下の条件を満たす部分を、部分的ハッチングのセルとして示した。この結果から、全ての項目で条件に合致するのは、ＧＦ（２１０）であり、これがオンチップＥＣＣシステムに最適な有限体として選択できることがわかる。
【０３７４】
ＧＦ（２１０）が最適な選択であることが分かったので、この有限体を例にオンチップＥＣＣの本方式において最も回路規模が大きくなるデコーダ回路の最適な構成方法を次に検討する。ＧＦ（２１０）の表現インデックス成分は、ｍｏｄ ３，ｍｏｄ １１及びｍｏｄ ３１となる。
【０３７５】
ある条件を充たす有限体要素の表現インデックス成分を求める場合の一般的な方法は、表現インデックス成分の各値ごとにひとつの条件にあう有限値要素の集合を作り、その集合にこのひとつの条件を充たす有限体があればその集合を表す表現インデックス成分の値をその有限体の表現インデックス成分値とするように、デコーダを構成する。
【０３７６】
すなわち、有限体要素ｗに対してＦ（ｗ）＝ｗ３＋ｗやＦ（ｗ）＝ｗ２＋ｗ，Ｆ（ｗ）＝ｗなどの関係の有限体要素の関係があるとき、ｗの表現インデックス成分の要素のそれぞれに対して、Ｆ（ｗ）をグループ分けしたデコーダを作り、Ｈ＝Ｆ（ｗ）が含まれるグループの表現インデックス成分から関係を充たすｗの表現インデックスとするものである。
【０３７７】
図２１は、表現インデックス成分ｍｏｄ ３，ｍｏｄ １１及びｍｏｄ ３１の３種のデコーダ方式の概要を示している。α＊がｍｏｄ ３＝α、β＊がｍｏｄ １１＝β、γ＊がｍｏｄ ３１＝γのｗのＦ（ｗ）のグループを表し、例えば関係Ｆ（ｗ）＝ｗ３＋ｗは３次の探索方程式、Ｆ（ｗ）＝ｗ２＋ｗは２次の探索方程式、Ｆ（ｗ）＝ｗはｗの多項式表現との変換などのデコーダに用いられる。
【０３７８】
このようなデコード方式では、表現インデックスの成分数だけのデコーダ系列、即ち、α＊，β＊，γ＊の各グループでそれぞれ、３個，１１個，３１個のデコーダ系列が必要となり、デコーダを構成する素子は有限体要素数の１０２４個はあるので系列が多いと大きな回路規模となる。
【０３７９】
デコーダの規模を縮減する構成を次に検討する。先のグループα＊，β＊，γ＊に対して、α＊とβ＊の共通グループα＊∧β＊を構成する。この新たなグループを｛α，β｝と表記すると、次の数５４となる。
【０３８０】
［数５４］
｛α, β｝（＝（Ｆ（ｗ）：ｗ ｍｏｄ ３＝α and ｗ ｍｏｄ １１）＝α＊∧β＊
α＊＝{α,0}∨{α,1}∨{α,2}∨{α,3 }∨  …  ∨{α, 9}∨{α,10}
β＊＝{0,β}∨{1,β}∨{2,β}
【０３８１】
すなわち、｛α，β｝をデコーダの要素回路とその出力のＯＲをとることで、αやβを得ることが出来る。
【０３８２】
図２２は、この共通化グループ｛α，β｝とグループγ＊の２系統をデコーダ回路要素とする場合を、図２１と対応させて示している。図２２に示すように、グループ｛α，β｝の数は３×１１＝３３個であり、γ＊のデコーダ数３１とほぼ同じである。デコーダの系列としてはこの共通のものとｍｏｄ ３１に相当する２系統になるので、回路規模は、各成分ごとの３系統がある先の場合に対し、３分の２程度になる。
【０３８３】
デコーダ構成の具体例として、Ｆ（ｗ）＝ｗの場合の有限体の多項式表現から表現インデックスへの変換デコードを行う例を説明する。
【０３８４】
ＧＦ（２１０）の要素は、ＧＦ（２）上の例えば既約多項式ｘ１０＋ｘ３＋１の剰余として得られる。インデックスがｎの要素は、ｘｎを割った剰余多項式であり、
ｘｎ＝ｐｎ（ｘ）＝Ｐｎ９ｘ９＋Ｐｎ８ｘ８＋Ｐｎ７ｘ７＋…＋Ｐｎ２ｘ２＋Ｐｎ１ｘ＋Ｐｎ０
として、係数の組として多項式表現となる。
【０３８５】
この係数表現を表現インデックスに変換するために、先ず図２３に示すように、係数を４つ、４つ、２つのグループに分けて、４ビットバイナリは１６進に変換する。すなわち多項式の低次の係数側から、Ａ０〜Ａ１５，Ｂ０〜Ｂ１５，Ｃ０〜Ｃ３を得る。
【０３８６】
図２４には、低次側の４ビットからＡ０〜Ａ１５を得るプリデコード回路例を示した。有限体はＡｉ，Ｂｉ，Ｃｉの組で表されるので、デコーダの回路{α，β}またはγが、図２５に示すように、Ａｉ，Ｂｉ，ＣｉのＮＡＮＤのＯＲとして構成される。このデコーダはクロックＣＬＫが立ち上がると、{α，β}またはγに属するＡｉ，Ｂｉ，Ｃｉなる多項式表現がデコーダ内にあればノードＮＤを放電して、出力を立ち上げる。
【０３８７】
表現インデックスのデコーダで得られた結果を、図２６に示すようなＯＲロジックで合成すれば、表現インデックス成分α，βが得られ、有限体要素ｘσの多項式表現ｘα＝Ｐα９，Ｐα８，Ｐα７，…，Ｐα２，Ｐα１，Ｐα０を、表現インデックスの表現に変換することができる。
【０３８８】
４ＥＣの計算システムでは、前述のように、有限体要素の積はアダー回路を用いてインデックスの和の計算として行い、これらのアダー回路はタイムシェアリングして複数の積演算に多用される。そこで次に、アダー回路の入力と出力の構成のひとつの方法を説明する。
【０３８９】
アダー回路の計算は、バイナリ表現された表現インデックスの成分間で行なわれる。従って、図２７に示すように、入力の表現インデックスをバイナリ値に変換するインデックス／バイナリ変換回路４０１が必要であり、得られたバイナリ値に演算を施すアダー本体４０２があり、更にその演算結果を表現インデックスに変換するためのバイナリ／インデックス変換回路４０３が必要になる。
【０３９０】
アダー間のデータバスを通るのは表現インデックス成分であり、クロックｃｋｍとｃｋｎとでタイムシェアリングして使用する場合には、更に入力部にアダー入力マルチプレクサ４００が必要である。即ち、クロックｃｋｍで入力α、クロックｃｋｎで入力βを使用して演算を行う場合、入力の表現インデックス成分はクロックトインバータで構成されるマルチプレクサ４００によりマルチプレクスして入力インデックス“ｉ”とする。
【０３９１】
なお、さらに多くのクロックでタイムシェアリングする場合は上述の２クロックの例からクロックに対応する部分を増やしてやればよい。
【０３９２】
インデックス／バイナリ変換回路４０１は、図２８に示すように、表現インデックス成分のドメインに従ってビット数が決まる。ＧＦ（２１０）では、表現インデックス成分のドメインは３，１１，３１であるので、それぞれ２，４，５ビットのバイナリとなる。
【０３９３】
変換はクロックｃｋｍ，ｃｋｎが活性化されていないときに充電されているノードＮＤ０，ＮＤ１，…，ＮＤ４／３を表現インデックスの成分インデックス“ｉ”で適切に放電して、“ｉ”をバイナリ値表現にする。バイナリ表現はｉｎｄｅｘ（３），（１１），（３１）に対応してそれぞれ２ビット（０，１），４ビット（０，１，２，３），５ビット（０，１，２，３，４）のノードのレベルでありこのレベルはクロックのパルス期間ラッチ回路に保持される。
【０３９４】
アダー本体４０２で計算された出力はバイナリで、これらのビットをｓ０，ｓ１，ｓ２，ｓ３とする。これらは、図２９に示すようなバイナリ／インデックス変換回路４０３によりプリデコードして、信号０，１，２，３及び００，４，８，１２を作る。そして、２入力または３入力の回路であるインデックスデコード＆出力ラッチ４０４に入れて、表現インデックスをデコードする。それぞれの表現インデックス成分ｉ（３），ｉ（１１）及びｉ（３１）のデコードの入力は、図３１，３２及び３３の表の通りである。
【０３９５】
回路が働くのはクロックｃｋｍ＋１とｃｋｎ＋１、即ちアダー入力部のクロックｃｋｍ，ｃｋｎよりそれぞれ１つ遅いクロックパルスとなっている。またデコーダの出力は同じクロックのダッシュ付きのクロックｃｋｍ＋１’，ｃｋｎ＋１’でＥＣＣのサイクルの期間ラッチに保持されるようになっていて、自分自身またはその他のアダー回路で次のクロックサイクル以降に使用可能とされている。これらの出力ラッチ４０４の一部が先のＥＣＣ回路ブロック図のＳＥＣ部などで特別に述べたレジスタ部９１等になる。
【０３９６】
アダー本体４０２は、三つの表現インデックス成分のおのおのバスに対して表現インデックスの和を並列に求める部分であり、図３４に示すように、２ビットアダー４１０，４ビットアダー４１１及び５ビットアダー４１２が併設されている。
【０３９７】
有限体要素ＡとＢのそれぞれのα乗とβ乗の積ＡαＢβを求めるもので、インデックスへの変換σを用いて、表現インデックス間で、
σ(ＡαＢβ)≡ασ(A)＋βσ(B) (mod 3),(mod 11),(mod 31)
を各成分ごとにバイナリ数の和として計算する。
【０３９８】
これらのアダーは合同式のアダーであり、回路の詳細を次に示す。
【０３９９】
図３５は、２ビットアダー４１０の回路記号と詳細構成を示しており、数ＡとＢを２進数で表した各桁の和をフルアダーとハーフアダーで求めて３の剰余（ｍｏｄ ３）としての和を表すものである。初段加算器４１０ａと、その加算結果が３以上になったことを検出するためのキャリー補正回路４１０ｂと、補正回路４１０ｂの出力ＰＦ０に基づいて、２ビットに対する３の補数１（＝４−３）を加える加算器４１０ｃとを備えている。
【０４００】
この回路は、クロックなどの同期が必要でないように入力が確定すれば出力も確定するようにしており、システムのタイミング制御の負担を減らす構成となっている。
【０４０１】
図３６は、４ビットアダー４１１の回路記号と詳細構成を示しており、数ＡとＢを２進数で表した各桁の和をフルアダーとハーフアダーで求めて１１の剰余（ｍｏｄ １１）としての和を表すものである。初段加算器４１１ａと、その加算結果が１１以上になったことを検出するためのキャリー補正回路４１１ｂと、補正回路４１１ｂの出力ＰＦ０に基づいて、４ビットに対する１１の補数５（＝１６−１１）を加える加算器４１１ｃとを備えている。
【０４０２】
これも、クロックなどの同期が必要でないように入力が確定すれば出力も確定するようにして、システムのタイミング制御の負担を減らす構成としている。
【０４０３】
図３７は、５ビットアダー４１２の回路記号と詳細構成を示しており、数ＡとＢを２進数で表した各桁の和をフルアダーとハーフアダーで求めて３１の剰余（ｍｏｄ ３１）としての和を表すものである。初段加算器４１２ａと、その加算結果が３１以上になったことを検出するためのキャリー補正回路４１２ｂと、補正回路４１２ｂの出力ＰＦ０に基づいて、５ビットに対する３１の補数１（＝３２−３１）を加える加算器４１２ｃとを備えている。
【０４０４】
これも、クロックなどの同期が必要でないように入力が確定すれば出力も確定するようにして、システムのタイミング制御の負担を減らす構成としている。
【０４０５】
図３８及び図３９は、２進数の足し算を行なう基本的な単位であるフルアダーとハーフアダーの構成を示している。フルアダーは、加えるビットＡとＢをＸＯＲ回路とＸＮＯＲ回路でロジック演算を行い、桁上げ信号Ｃｉｎとのロジックを更に取って出力としてＡ，Ｂ，Ｃｉｎの和Ｓｏｕｔと桁上げ信号Ｃｏｕｔを出力する。ハーフアダーは一般的なロジックゲートで構成できる。
【０４０６】
計算の過程では有限体要素の累乗が頻繁に現れるが、累乗の関係は表現インデックスでは各成分間の一定の変換に対応するので、計算ではなく信号のつなぎ変えに相当する。累乗の指数と表現インデックスの対応関係の一部を示したのが、図４０の表である。
【０４０７】
要素の累乗は表現インデックス成分の倍数としての関係になる。図４０は、表現インデックス｛ｉ（３１），ｉ（１１），ｉ（３）｝の成分インデックスがｉのｍ倍で新たに得る表現インデックスをｘ（ｍ）の欄に示した。この変換を組み合わせて必要な表現インデックスは得られる。
【０４０８】
例えば表現インデックス｛３，８，０｝で表される要素を−２／３乗した要素の表現インデックスは−２／３倍に相当する。
【０４０９】
即ち最初の成分インデックスｉ（３１）＝３であるので、×（−１）の−ｉ（３１）欄から２８になり、これを新たにｉ（３１）と見なして、×２の２ｉ（３１）欄から２５となり、これを新たにｉ（３１）と見なして×（１／３）のｉ／３（３１）欄から２９となる。この変換の順番はどの様な順番でも結果は同じである。
【０４１０】
２番目の成分インデックスはｉ（１１）＝８であるので、×（−１）の−ｉ（１１）欄から３になり、これを新たにｉ（１１）と見なして×２の２ｉ（１１）欄から６となり、これを新たにｉ（１１）と見なして×（１／３）のｉ／３（１１）欄から２となる。この変換の順番はどの様な順番でも結果は同じである。
【０４１１】
３番目の成分インデックスはｉ（３）＝０であるので、×（−１）の−ｉ（３）欄から０になり、これを新たにｉ（３）と見なして、×２の２ｉ（３）欄から０となりこれを新たにｉ（３）と見なして、×（１／３）のｉ／３（３）欄から０となる。この変換の順番はどの様な順番でも結果は同じである。
【０４１２】
以上の変換により、表現インデックス｛３，８，０｝は、対応する要素の３／２乗で表現インデックス｛２９，２，０｝の対応する要素になる。この様な変換によって、ＧＦ（２１０）の表現インデックスによる累乗の表現インデックスが得られる。
【０４１３】
以上説明したように、この実施の形態では、メモリに搭載してメモリとのデータ読み書きの経路上で演算を実時間で行なう４ビットエラー訂正可能な高速のＥＣＣ−ＢＣＨシステムをシステムを簡略に構成して実現した。簡略化のポイントは計算過程の分岐条件をシンドロームから導かれる量を用いて排他的に決めて、演算回路をタイムシェアリングする点である。また、使用する有限体がＧＦ（２１０）なるガロア体を用いることで最適なオンチップシステムが得られることを明らかにした。
【０４１４】
この実施の形態によると、エラー探索をテーブルによるデコーダを用いて高速に行なうことが出来る最大のエラー数であると思われる４ビットまでのエラー訂正を数１０nsの演算時間で完了することが出来、大容量ファイルメモリなどの性能を落とすことなく面積増も僅かで信頼性の向上が実現できる。
【図面の簡単な説明】
【０４１５】
【図１】実施の形態による３ＥＣ−ＢＣＨ−ＥＣＣシステムの構成（その１）を示す図である。
【図２】メモリコアの一例であるＮＡＮＤ型フラッシュメモリセルアレイを示す図である。
【図３】メモリコアの他の例であるＲｅＲＡＭセルアレイを示す図である。
【図４】ＲｅＲＡＭの三次元セルアレイの構成例である。
【図５】実施の形態による３ＥＣ−ＢＣＨ−ＥＣＣシステムの構成（その２）を示す図である。
【図６】シンドロームからの有限体要素の計算ステップを示す図である。
【図７】４ＥＣ−ＥＷシステムでの解探索の排他的分岐の条件を示す図である。
【図８】実施の形態による４ＥＣ−ＢＣＨ−ＥＣＣシステムの構成例を示す図である。
【図９】同システムにおける外部クロックに同期した内部クロック波形を示す図である。
【図１０】アダー回路及びパリティチェック回路をタイムシェアリングする同システムのＳＥＣ部の動作を内部クロックの流れに従って示す図である。
【図１１】同システムのＥＳ部の回路構成をブロック表現で示したものである。
【図１２】同じくＥＳ部の動作を内部クロックの流れに従って示す図である。
【図１３】同じくＥＳ部のＣａｓｅ １での動作を示す図である。
【図１４】同じくＥＳ部のＣａｓｅ ２での動作を示す図である。
【図１５】同じくＥＳ部のＣａｓｅ ３での動作を示す図である。
【図１６】同じくＥＳ部のＣａｓｅ ４での動作を示す図である。
【図１７】３ＥＣの場合のＥＳ部の動作の流れを示す図である。
【図１８】２ＥＣの場合のＥＳ部の動作の流れを示す図である。
【図１９】１ＥＣの場合のＥＳ部の動作を示す図である。
【図２０】オンチップＥＣＣに用いる有限体の種類とＥＣＣ特性との関係を示す図である。
【図２１】表現インデックス成分のデコーダ回路方式を説明するための図である。
【図２２】同じくデコーダ回路の規模縮減法を説明するための図である。
【図２３】係数表現を表現インデックスに変換するための係数のグループ分けを示す図である。
【図２４】４ビットバイナリを１６進に変換するプリデコーダの構成例である。
【図２５】タイムシェアリングするデコーダ構成を示す図である。
【図２６】表現インデックスのデコード結果の合成回路を示す図である。
【図２７】アダー回路の構成例を示す図である。
【図２８】同アダー回路入力部のインデックス／バイナリ変換回路の構成を示す図である。
【図２９】同アダー回路出力部のバイナリ／インデックス変換回路の構成を示す図である。
【図３０】同アダー回路のインデックスデコード＆出力ラッチの構成を示す図である。
【図３１】同出力ラッチの表現インデックス成分ｉ（３）のデコード入力を示す図である。
【図３２】同出力ラッチの表現インデックス成分ｉ（１１）のデコード入力を示す図である。
【図３３】同出力ラッチの表現インデックス成分ｉ（３１）のデコード入力を示す図である。
【図３４】アダー本体の構成例を示す図である。
【図３５】同アダー本体の２ビットアダー構成を示す図である。
【図３６】同アダー本体の４ビットアダー構成を示す図である。
【図３７】同アダー本体の５ビットアダー構成を示す図である。
【図３８】フルアダー構成を示す図である。
【図３９】ハーフアダー構成を示す図である。
【図４０】表現インデックス間の関係を示す図である。
【符号の説明】
【０４１６】
１０…メモリコア、２０，２０ａ…エンコード部、３０，３０ａ…シンドローム演算部、４１−４７…パリティチェッカ、５１−５６…アダー回路、６０…エラー訂正部、７１−７７…ゲート、８１−８８…アダー回路、９０…シンドローム要素計算（ＳＥＣ）部、９１…レジスタ部、１００…エラー探索（ＥＳ）部、１０１，１０２…レジスタ部、１０３…ＣＵＢＥ部、１０４…ＳＱＵＡＲＥ部、１０５−１０８…パリティチェッカ、１１１，１１３，１２１，１２２，１２５−１２８，１２１ａ，１２２ａ，１２５ａ−１２８ａ…アダー回路、１１２，１２３，１２４，１２３ａ，１２４ａ…デコーダ計算回路、２００…エラー訂正部、３００…クロック発生器。
【図１】
2010108569.tif 000003
【図２】
2010108569.tif 000004
【図３】
2010108569.tif 000005
【図４】
2010108569.tif 000006
【図５】
2010108569.tif 000007
【図６】
2010108569.tif 000008
【図７】
2010108569.tif 000009
【図８】
2010108569.tif 000010
【図９】
2010108569.tif 000011
【図１０】
2010108569.tif 000012
【図１１】
2010108569.tif 000013
【図１２】
2010108569.tif 000014
【図１３】
2010108569.tif 000015
【図１４】
2010108569.tif 000016
【図１５】
2010108569.tif 000017
【図１６】
2010108569.tif 000018
【図１７】
2010108569.tif 000019
【図１８】
2010108569.tif 000020
【図１９】
2010108569.tif 000021
【図２０】
2010108569.tif 000022
【図２１】
2010108569.tif 000023
【図２２】
2010108569.tif 000024
【図２３】
2010108569.tif 000025
【図２４】
2010108569.tif 000026
【図２５】
2010108569.tif 000027
【図２６】
2010108569.tif 000028
【図２７】
2010108569.tif 000029
【図２８】
2010108569.tif 000030
【図２９】
2010108569.tif 000031
【図３０】
2010108569.tif 000032
【図３１】
2010108569.tif 000033
【図３２】
2010108569.tif 000034
【図３３】
2010108569.tif 000035
【図３４】
2010108569.tif 000036
【図３５】
2010108569.tif 000037
【図３６】
2010108569.tif 000038
【図３７】
2010108569.tif 000039
【図３８】
2010108569.tif 000040
【図３９】
2010108569.tif 000041
【図４０】
2010108569.tif 000042