メモリにECCシステムを搭載するには、リアルタイムでデータ訂正を行なう必要があるために高速な計算処理が要求される。また、ランダムなエラー発生に対してはBCHコードを用いたECCが有効であることは知られている。しかしこれまでのところ、4ビットエラー訂正可能な高速ECCシステムは、知られていない。この発明では、オンチップメモリ用の高速4ビットエラー訂正システムを提案する。
BCHコードを用いて高速にエラー検出演算を行なうには、予め作成しておいた解のテーブルとメモリからの読み出しデータから計算されたシンドロームを比較して解を求める。このような比較を行うには解を求める多項式で未知数を表す変数部分とシンドローム部分が分離した方程式が変数変換で作れることがキーとなる。
4ビットエラー訂正のBCHコードシステムでは未知数とシンドロームが混在した4次多項式が解を求めるエラー探索方程式となるが、4次方程式をパラメータの導入により2次方程式の積に直し、より低次の(具体的には3次と2次の)因子方程式の解を求める方法に帰着させる。この様な変換により変数とシンドロームの分離が行なえること、更にBCHコードの有限体の要素と解のテーブルとの比較を、“表現インデックス”というindexを導入することで短い計算の並列演算として高速に行なうことが出来ることを示す。
このようなECCシステムをメモリシステムに搭載することによって、メモリ外部から見ればメモリの性能を落とさずにデータ保持の信頼性を向上したメモリを提供できることになる。
この発明の概要を説明すれば、次の通りである。
・メモリセルアレイのデータ書き込みと或いは読み出しに際して、そのデータ転送過程でエンコードとデコードを行い、メモリセルアレイ等で生じた4ビットまでのエラーの訂正を行なうECCシステムをメモリと同じ基板上に、或いは同じパッケージ上に搭載する。
・ガロア有限体GF(2n)のBCHコードを利用して、4ビットエラー訂正を行なうECCシステムにおいて、エラービット位置を示す未知変数とエラーを含むデータから計算されたシンドロームを含むエラー位置検索方程式を二つ以上の低次の因子方程式の積に分解してその係数パラメータを確定してからそれぞれの因子方程式においてエラー位置探索方程式を解く。
・n(≧2)ビットエラーが訂正可能なECCシステム搭載メモリ装置において、メモリへの読み書きを介さずに情報データのコードに直接一連のエラーパタンを与えてエラー訂正が行なわれるか否かをテストすることでメモリ装置のテストを行う方法。
[4EC−EW(4 error correction-error warning)−BCHシステムの原理説明]
・データのエンコーディング(encoding)
有限体GF(2n)での一般的な場合について原理を説明し、その後具体的なGF(256)の応用例としてのシステムを詳述する。
GF(2)上の原始既約多項式をm1(x)としてこの根(原始根)をαとする。有限体としてGF(2n)を考えるのでm1(x)はn次の多項式となる。このαを用いるとGF(2n)の要素はh=2n−1として0,α0,α1,…,αh−2,αh−1の2n個である。
4つのエラー検出訂正を行うためには、α1,α3,α5及びα7を根とする既約多項式として、下記数1を満たす4つの原始既約多項式m1(x),m3(x),m5(x)及びm7(x)を選択する。
これらの既約多項式から、下記数2の4n次のコード生成多項式を作る。
ECCシステムのコードを作る要素は有限体のゼロ因子を除くとh個であるので、h−1次の多項式の係数がデータを表すことになる。即ち情報多項式f(x)は、下記数3となる。
データビットのうちの情報ビットを係数a
4n〜a
h−1に割り当て4n次から始まる多項式f(x)x
4nをg(x)で割って剰余を求め、下記数4に示すように剰余をr(x)とする。
上述のように、r(x)は4n−1次の多項式で、その係数が情報ビットに付随するチェックビットb
4n−1〜b
0となり、これが情報ビットa
4n〜a
h−1と併せてメモリに記憶させるデータを構成する。
・データのデコーディング(decoding)
データビットに生じたエラーはh−1次のエラー多項式e(x)で表されるので、メモリから読み出したデータに対応する多項式ν(x)は、エラー多項式e(x)を用いて次のように表される。
エラー多項式e(x)の係数1の項がエラービットとなるので、これを求めるのがエラー検出である。
第1段階としてν(x)をm1(x),m3(x),m5(x),m7(x)でそれぞれ割って剰余をS1(x),S3(x),S5(x),S7(x)とすると、これはe(x)の各々の剰余ともなっている。これらの剰余多項式がシンドローム(syndrome)多項式であり、下記数6のようになる。
4ビットエラーがi,j,k,l 次にあれば、エラー多項式e(x)は次の数7となる。
このエラー多項式の次数i,j,k,lを求めればエラー位置すなわちどのデータビットがエラーであるかが確定する。そこで、m
1(x)=0の根の指数に関するGF(2
n)内での計算により、i,j,k,lを求める。
そのために、xnをm1(x)で割った剰余をpn(x)とすると、αn=pn(α)となるので、下記数8のように、X1,X2,X3,X4及びシンドロームS1,S3,S5及びS7を定義する。
ここでX
1,X
2,X
3,X
4のインデックスがそれぞれi,j,k,lでS
1,S
3,S
5,S
7のインデックスがそれぞれσ1 (=σ),σ3,σ5,σ7である。
第2段階として、数10に示す、X1,X2,X3,X4を未知数とするGF(2n)内の多項式ΛR(x)を考える。
数10の各係数のパラメータS,D,T,Qは下記数11に示すように、X
1,X
2,X
3,X
4の基本対称式となる。
これらの係数とシンドロームである対称式S
1=S,S
3,S
5,S
7の間には関係があって式で表すことができ、下記数12の連立方程式系を構成する。
D,T,Q をシンドロームで表現するために上の3元連立方程式を解く。係数行列式をΓとして、下記数13のように解くことができる。
ここで、Γ≠0ならば、D,T,Qは確定し、次の数14のエラー探索方程式を解く過程に入る。
Γ=0の場合は、連立方程式の解法から未知数のひとつQを任意に設定してDとTを求めることが出来るが、4エラーきっかりが生じていればS,D,T,Qの間に任意関係はありえないので、この場合は5エラー以上が生じたか、3エラー以下の場合となる。
3エラーの場合は X4=0 であるから、Q=0として次の2元連立方程式となり、DとTを求めることができる。
Sζ≠0の場合は、D=ζ/S,T=0となり、2エラーとなる。
Sζ=0の場合は、ζは2元連立方程式の係数行列式であるので、S≠0で、ζ=0なら、連立方程式の解法からTを任意に設定してDを求めることができるが、3エラーが生じていれば、S,D,Tの間に任意の関係はあり得ないので、この場合は、5エラーが生じたか、または2エラー以下となる。2エラー以下の場合、X3=0であるから、T=0とおいて、Dを求める。
Γ=0,ζ=0でかつ、T=0の場合、上の連立方程式は、SD=0となり、Sがゼロでないとしているので、D=0、即ち1エラーとなり、X1=Sとなる。この場合、ζ=η=θ=0が導かれるので、Q=0が得られ、5エラー以上の可能性は排除される。
S=0の場合は、ζ=0なので、連立方程式から、T=0となり2エラー以下であるが、S=X1+X2=0から、X1=X2の1エラーの場合となり、しかも1エラーとすると、S=0であるので、結局エラーがゼロ(no error)となる。
以上で連立方程式の解法の全ての場合が尽くされ、この分岐したエラー探索で解が求まらない場合は、5エラー以上が発生していることになる。
以下に、分岐した場合(1)〜(9)それぞれの4次のエラー探索方程式の解法を、シンドロームから決まる量の関係の場合分けによって説明する。解かなければならないのは、数14に示した4次方程式である。
(1)S≠0,Γ≠0,b≠0,c≠0の場合:
ここで、a=D/S,b=D2+ST,c=S2Q+SDT+T2,B=a4+Ta+Qである。
数16に示すように、4次のエラー探索方程式にX=x+aなる変数変換を施して、更にそれを2次式の積の形に因数分解する。
因数分解された2次式の係数α0,α1,β0,β1とシンドロームから導かれた量の関係から、未知量δ=α0 +β0を導入してδが満たすべき3次の方程式が得られる。即ち、α
0+β
0=δとおいて、α
0β
0=B,β
1α
0+α
1β
0=b/S,δ+α
1β
1=0,α
1+β
1=Sとして、次の3次方程式が得られる。
この方程式を解いて1根αを選択すると、因数分解係数が満たすべき2次方程式が2つ、数18のように得られる。
これらを解いて係数α0, α1,β0,β1が得られる。これらの係数を持つ因数分解の次の二つの2次方程式を解く。
この方程式を解いて、未知量xを求めると、X=x+aからエラー探索の4次方程式の4つの解が求まる。
なお,各方程式を解く際に解のテーブルが利用できるように未知数の係数はGF(2)の要素となる様に変換している。δを求める3次方程式では未知変数をδ/b1/2とし、α0,β0を求める2次方程式では未知変数をε/δとし、α1,β1を求める2次方程式では未知変数をε/Sとし、因数分解の2次方程式ではx/α1,x/β1としている。
(2)S≠0,Γ≠0,b≠0,c=0の場合:
ここで、a=D/S,b=D2+ST,B=a4+Ta+Qであり、S2Q+SDT+T2=0,S4B=b2である。
変数変換X=x+aを施してエラー探索方程式から2次の項を消去し,これを数20のように、2次式の積に因数分解する。
因数分解された2次式の係数α0,α1,β0,β1とシンドロームから導かれた量の関係から、未知量δ=α0 +β0を導入してδが満たすべき3次の方程式が得られる。即ち、α
0+β
0=δとおいて、α
0β
0=B,β
1α
0+α
1β
0=b/S,δ+α
1β
1=0,α
1+β
1=Sとして、次の3次方程式が得られる。
この方程式を解いて1根α(≠0)即ちb
1/2を選択すると、因数分解係数が満たすべき2次方程式が2つ、数22のように得られる。
これらを解いて係数α0, α1,β0,β1が得られる。但し、B/δ
2=(δ/S
2)
2なので、α
0/δ=(α
1/S)
2,β
0/δ=(β
1/S)
2である。
これらの係数を持つ因数分解の次の二つの2次方程式を解く。
この方程式を解いて、未知量xを求めると、X=x+aからエラー探索の4次方程式の解が求まる。ここで先の関係式から、α0/α12=β0/β12=δ/S
2であり、u
1=α1/S,u
2=β1/Sとすると4次方程式の根として、数24が得られる。
数24から、X
2=X
3となり、結局3つのエラー位置の解が求まる。
なおδ=0も解を求める条件に合致し同じ結果が得られるが、計算の過程が変わり先の条件(1)の場合の計算の流れが利用できないので選択しない。
(1)の場合と同様に各方程式を解く際に解のテーブルが利用できるように未知数の係数はGF(2)の要素になる様に変換している。α0,β0を求める2次方程式では未知変数をε/δとし、α1,β1を求める2次方程式では未知変数をε/Sとし、因数分解の2次方程式ではx/α1,x/β1 としている。
(3)S≠0,Γ≠0,b=0,c≠0の場合:
ここで、a=D/S,c=S2Q+SDT+T2,B=a4+Ta+Qであり、D2+ST=0,S2B=cである。
変数変換X=x+aを施してエラー探索方程式から2次の項を消去し,これを数25のように2次式の積に因数分解する。
因数分解の2次式の係数α0、α1,β0,β1とシンドロームから導かれた量の関係から、未知量δ=α0 +β0を導入してδが満たすべき3次方程式が得られる。即ち、α
0+β
0=δとおいて、α
0β
0=B,β
1α
0+α
1β
0=0,δ+α
1β
1=0,α
1+β
1=Sとして、数26の3次方程式が得られる。
この方程式からδ=c
1/3が得られ、因数分解係数が満たすべき2次の方程式が2つ、数27のように得られる。
これらを解いて係数α0, α1,β0,β1が得られる。ただしこの場合の条件から、B/δ2=δ/S2となるのでα1とβ1を求める2次方程式の根とα0とβ0を求める2次方程式の根は全く同じ、u
1=α0/δ=α1/S,u
2=β0/δ=β1/Sとなり、2次の方程式は実質ひとつになる。即ち、下記数28の2次方程式を解くことになる。
この2次方程式を解いて未知量xを求め、X=x+aからエラー探索の4次方程式の解が求まる。この際、先の関係式からα0/α12=δ/(S
2u
1),β0/β12=δ/(S
2u
2)であるから、4つの解が求まる。
(1)と同様に各方程式を解く際に解のテーブルが利用できるように未知数の係数はGF(2)の要素になる様に変換している。α0,β0 を求める2次方程式では未知変数をε/δ, α1,β1を求める2次方程式では未知変数をε/S,因数分解の2次方程式ではx/α1,x/β1 としている。
(4)S≠0,Γ≠0で、b=0,c=0の場合:
ここで、a=D/S,B=a4+Ta+Qであり、D2+ST=0,S2Q+SDT+T2=0,S2B=0である。
変数変換X=x+aを施してエラー探索方程式から2次の項を消去すると、数29が得られる。
これから、二つの解X
1=a,X
2=S+aが得られる。
(5)S≠0,ζ≠0で、Γ=0の場合:
Q=0の場合のみ4エラー以下であり、この場合で解がなければ5エラー以上となり、D=ζ/S,T=0である。
4次のエラー探索方程式は次の2次方程式になる。
なお、方程式を解く際に解のテーブルが利用できるように未知数の係数はGF(2)の要素になる様に変換している。すなわちX/Sを未知変数としている。
(6)S≠0で、Γ=0,ζ=0の場合:
T=0であり、SD+T=ζよりD=0で更に、Q=0である。
従ってエラー探索方程式は、次の数31となる。
これから、ゼロでないひとつの解として、X
1=Sが得られる。
(7)Γ≠0,D≠0で、S=0の場合:
ΓD≠0からζ≠0,η≠0であり、Γ=ζ2, D=η/ζ, T=ζ, Q=η2/ζ2+θ/ζ, b=D2,c=T2である。
数32のようにエラー探索方程式は3次の項がなくなり、これを2次式の積に因数分解する。
2次式の係数α
0,α
1,β
0,β
1とシンドロームから導かれた量の関係即ち、未知量δ=α
0+β
0を導入して、α
0β
0=Q,β
1α
0+α
1β
0=T,δ+α
1β
1=D,α
1+β
1=0を用いて、δ/D+1の満たすべき3次の方程式が数33のように得られる。
この方程式は2次の項がない他の条件でも使用した3次方程式の形である。この方程式を解いて1根をδとして求め、因数分解係数が満たすべき2次方程式が2つ、数34のように得られる。
これらを解いて係数α
0, α
1,β
0,β
1 が得られる。ただしα
1とβ
1を方程式の根とするものはすぐに解けα
1=β
1=(δ+D)
1/2を得る。
これらの係数を持つ因数分解の次の2次方程式を解く。
これにより、未知量Xがエラー探索方程式の4つの解として求まる。
(1)と同様に各方程式を解く際に解のテーブルが利用できるように未知数の係数はGF(2)の要素になる様に変換している。α
0,β
0を求める2次方程式では未知変数をε/δとし、因数分解の2次方程式ではX/α
1としている。
(8)Γ≠0で、S=0及びD=0の場合:
Γ≠0からζ≠0であり、S=0及びD=0からη=0であり、Γ=ζ2, D=η/ζ, T=ζ, c=T2, D=0, Q=θ/ζである。
エラー探索方程式は2次と3次の項がない、数36となる。
その因数分解の2次式の係数α0、α1,β0,β1とシンドロームから導かれた量の関係から、未知量δ=α0 +β0を導入して、α
0β
0=Q,β
1α
0+α
1β
0=T,δ+α
1β
1=0,α
1+β
1=0を用いて、δが満たすべき3次の方程式が得られる。
この方程式はすぐ解けて、δ=c
1/3が得られる。このδから因数分解係数が満たすべき2次の方程式が2つ、数38のように得られる。
これらの係数を持つ因数分解の次の2次方程式を解く。
これにより、未知量Xがエラー探索方程式の4つの解として求まる。
(1)と同様に各方程式を解く際に解のテーブルが利用できるように未知数の係数はGF(2)の要素になる様に変換している。α0、β0 を求める2次方程式では未知変数をε/δとし、因数分解の2次方程式ではX/α1としている。
(9)Γ=0及びS=0の場合:
Γ=ζ2=0,T=ζ=0であり、4エラー以下の場合のシンドロームの量の関係式から、η=θ=0で、D=0及びQ=0として、エラー探索方程式は、数40となる。
即ちこの場合、エラーなし(no error)となる。
5エラー以上あれば、η≠0かθ≠0となり、数40の4エラーの関係式は不成立である。この場合はエラー訂正不可(non correctable)となる。
以上のエラー探索の計算過程を、実際のシステムの計算手順に即し必要な量と式のみで示すと、次の通りである。
1)前掲(9)に相当するS=0でζ=0の場合:
η=0かつθ=0ならno errorである。η≠0またはθ≠0ならnon correctbleである。
2)前掲(8)に相当するS=0でζ≠0かつη=0の場合:
δ=ζ2/3,Q=θ/ζとおいて、方程式u2+u=Q/δ2を解き、解u1とu2を得る。α0=δu1,β0=δu2,α1=β1=δ1/2とおいて、方程式y2+y=α0/α12,z2+z=β0/β12を解き、それぞれ解y1,y2とz1,z2を得る。X1=α1y1,X2=α1y2,X3=β1z1,X4=β1z2がエラー位置を示す解となる。
3)前掲(7)に相当するS=0でζ≠0かつη≠0の場合:
b=η2/ζ2,c=ζ2,Q=η2/ζ2+θ/ζとおいて、方程式w3+w=c/b3/2を解き1根wを選択する。この根からδ=b1/2(w+1)を作り、方程式u2+u=Q/δ2を解き解u1とu2を得る。α0=δu1,β0=δu2,α1=β1=(δ+b1/2) 1/2とおいて、方程式y2+y=α0/α12,z2+z=β0/β12を解き、それぞれ解y1とy2,z1とz2を得る。X1=α1y1,X2=α1y2,X3=β1z1,X4=β1z2がエラー位置を示す解となる。
4)前掲(6)に相当するS≠0でζ=0かつΓ=0の場合:
X1=Sなるひとつのエラーである。
5)前掲(5)に相当するS≠0かつζ≠0でΓ=0の場合:
D=ζ/Sとおいて、α0=D,α1=Sとして方程式方程式y2+y=α0/α12を解き解y1とy2を得る。X1=α1y1,X2=α1y2が二つのエラー位置を示す解となる。
6)前掲(1)に相当するS≠0かつΓ≠0かつb≠0かつc≠0の場合:
方程式w3+w=c/b3/2を解き1根wを選択する。この根wからδ=b1/2wを作り、方程式u2+u=B/δ2及びv2+v=δ/S2を解き解u1とu2及びv1とv2を得る。α0=δu1,β0=δu2,α1=Sv1,β1=Sv2とおいて、方程式y2+y=α0/α12,z2+z=β0/β12を解きそれぞれ解y1とy2、z1とz2を得る。X1=α1y1+a,X2=α1y2+a,X3=β1z1+a,X4=β1z2+aがエラー位置を示す解となる。
7)前掲(2)に相当するS≠0かつΓ≠0かつb≠0でc=0の場合:
δ=b1/2とおき、方程式u2+u=B/δ2及びv2+v=δ/S2を解き解u1とu2及びv1とv2を得る。ただし条件から、u=v2という関係がある。α0=δu1,β0=δu2,α1=Sv1,β1=Sv2とおいて、方程式y2+y=α0/α12,z2+z=β0/β12を解きそれぞれ解y1とy2、z1とz2を得る。ここでも条件からy=zとなっている。X1=α1y1+a,X2=α1y2+a,X3=β1z1+a,X4=β1z2+aがエラー位置を示す解となるが、条件からX2=X3=δ/S+aとなっている。
8)前掲(3)に相当するS≠0かつΓ≠0かつc≠0でb=0の場合:
δ=c1/3とおき、方程式u2+u=B/δ2及びv2+v=δ/S2を解き解u1とu2及びv1とv2を得る。ただし条件からu=vとなる。α0=δu1,β0=δu2,α1=Sv1,β1=Sv2とおいて、方程式y2+y=α0/α12,z2+z=β0/β12を解きそれぞれ解y1とy2、z1とz2を得る。X1=α1y1+a,X2=α1y2+a,X3=β1z1+a,X4=β1z2+aがエラー位置を示す解となる。
9)前掲(4)に相当するS≠0かつΓ≠0でb=0かつc=0の場合:
(4)からは直接X1=a,X2=S+aと解が求まるが、8)の計算過程を出来るだけ利用するために以下の様な手順で行なう。α0=β0=0,α1=β1=Sとおいて、方程式y2+y=α0/α12,z2+z=β0/β12を解きそれぞれ解y1とy2、z1とz2を得る。ただし解y1とy2、z1とz2 のそれぞれは一方が0で他方が1となり、例えばy1=0、y2=1、z1=0、z2=1となる。このときX1=α1y1+a=a、X2=α1y2+a=S+a、X3=β1z1+a=a、X4=β1z2+a=S+aがエラー位置を示す解となる。
先のエラー探索方程式を解く手順で様々な量を計算の分岐と計算の過程で利用したが、これらの量は全てシンドロームから計算される量である。シンドロームS(=S1),S3,S5,S7は記憶されたデータから直接計算され得られる量であり、他の量はこれをもとに積、累乗、和を行なうことによって得られる。
図1はシンドロームから順に計算で必要な量が得られる手順を示している。シンドロームが得られた次のステップ1でζ=S3+S3,η=S5+S5,θ=S7+S7を計算する。ここでは累乗と和の演算が行なわれる。
次のステップ2でこの計算結果とSを用いてこれらの様々な累乗の積と商とが計算される。必要な量は13個ある。これらの13個の量の和と積を計算するのがその次のステップ3でΓ,ΓD,ΓT,S2ζηの4つの量が計算される。
次のステップ4で前のステップの量の商演算とこれまでに得られた量の和によってD,T,ΓQを計算する。次のステップ5は得られた量の積と商によってa,ST,DT,Qを計算する。
更に次のステップ6で和と積と商演算でb,S2Q,SDT,Taを計算し、最後のステップ7で和によってcとBを計算する。
シンドローム以降の計算ステップは以上の7ステップで、累乗演算は量を表現するコードの組み換えであるマルチプレックスで対応でき、和はパリティチェッカ回路、積と商は量を表現するコードのアダー回路で対応できる。これらの詳細は後に説明する。
[4EC−EW−BCHシステムの構成説明]
図2は、4ビットまでのエラー訂正が可能で、5ビット以上のエラーがあることの警告を出すことができる4EC−EW−BCHシステムの構成図である。
記憶すべきデータに対応する情報多項式f(x)に基づいて、チェックビットを生成する剰余多項式r(x)を求めるのが、エンコード部21である。情報ビットはデータビットの構成によって適宜必要な次数を選んでその係数のみを用い、使用しない係数は固定した0または1データとして扱うことによって、固定ビットをメモリに記憶させずにメモリ容量に合ったシステムを構成する。
情報ビットの次数の選択は、計算規模やシステム規模が最小になるよう選択する。一般的には情報をaiとしてこれらを係数とするh−1−4n次の多項式が情報多項式f(x)である。
前述のように、f(x)x4nをコード生成多項式g(x)で割った剰余をr(x)として多項式f(x)x4n+r(x)の係数をデータビットとしてメモリコア22に書き込む。ここでメモリコア22は、メモリセルアレイとデコーダ回路及びセンスアンプ回路を含むもので、具体的には、フラッシュメモリや抵抗変化メモリ(相変化メモリを含む)等の大容量メモリであり、ビットエラーが避けられない構成のものである。
データ読み出しに関しては、メモリコア22から読み出したhビットのデータは h−1次の多項式ν(x)の係数として扱われる。
この読み出しデータ多項式ν(x)に基づいて、シンドロームS(=S1),S3,S5,S7を求めるのが、シンドローム計算部23である。ν(x)をm1(x),m3(x),m5(x),m7(x)でそれぞれ割った剰余からシンドロームS,S3,S5,S7を得て、そのインデックスをmod 17,mod 15で区別する。
mod 17とmod 15のペアで表されるインデックスを以後、“表現インデックス”と呼ぶ。以後の計算では、アダーにおいてはシンドロームS,S3,S5,S7は表現インデックスで表され、これを更にバイナリ数としての足し算が行なわれ、パリティチェッカでは表現インデックスをデコードして有限体要素としての7次の多項式として表され、各次数の係数のパリティチェックの結果として和の要素の多項式の係数を得て、これを表現インデックスにデコードする。
シンドロームが得られた後は、シンドローム要素計算(SEC;Syndrome Element Calculation)部24において、先に図1に示したステップで必要な量が計算されレジスタに保持される。15個のレジスタがある。
シンドローム要素計算部24で得られた量をもとにエラー位置探索を行なうのが、エラー探索(ES:Error Search)部25である。これらの要素計算部24及びエラー探索部25で保持されるのは全て表現インデックスである。これらの計算過程を制御するのがクロック発生器27で、外部クロックCLから分周されたクロックck1〜ck16が用いられる。図では計算ブロックを主に制御するクロック分配が示されている。
なお、シンドローム要素計算部24とエラー探索部25とは、データをやり取りして互いの回路ブロックをマルチプレックスして使用し、回路規模を小さくするようにしている。従って、図ではシンドローム要素計算部24とエラー探索部25とは両方向の矢印で結ばれている。
エラー探索部25で得られた結果は、エラー訂正(EC:Error Correction)部26によってメモリから読み出されたデータの修正に利用される。エラー訂正部26では外部からメモリに入れられた情報データ多項式f(x)が復元され、情報データとして出力される。
図3は、クロック発生器27の生成するクロックの概要を示している。メモリとデータの転送を制御する基本クロックCLは、数十nsのサイクルタイムを有する。このクロックCLをトリガとしてクロック発生器27は、内部クロックck1〜ck16を発生する。クロック発生の具体的方法はここでは述べないが、例えば筆者が以前提案した特願2004-150614に記載されている方法が利用できる。
クロックck1〜ck16は順次重なりなくカスケード的に発生されて巡回するクロックであり、数nsのパルスクロックである。更にこれらのパルスクロックをトリガとして新たなクロックサイクルが開始されるまで状態を保持するダッシュつきのクロックが発生される。例えばck8パルスからはck8’が、ck10パルスからはck10’が発生される。なお、条件に依存して発生される状態保持タイプのクロックは2重ダッシュを付して今後の説明で用いる。
図4は、SEC部24の詳細構成である。即ちSEC部25は、3つの2入力パリティチェッカグループ401〜403と、16個のアダーグループ411〜416,421〜427,431,441び442と、4つの4入力パリティチェッカグループ451,461,462及び471と、15個のデータレジスタグループ480とから構成される。
これらのうち3つの2入力パリティチェッカグループ401〜403と、入出力に括弧つきの別の量が示されている7つのアダーグループ221〜427と、3つの4入力パリティチェッカグループ451,461,462はマルチプレックスして使用される。
各回路グループと制御クロックの関係も合わせて示している。この計算手順は先に示した7ステップでの計算に相当する。
シンドローム計算部23はクロックck1で制御される。この計算結果を受けて、SEC部24ではまず、クロックck2でステップ1に相当する計算である3つの2入力パリティチェッカグループ401〜403を働かせる。ステップ2に相当する13個の計算量のアダーグループ411〜416,421〜427はクロックck3で働く。
次のステップ3に相当する和と積は、クロックck4で働くひとつのアダーグループ431と3つの4入力パリティチェッカグループ451,461,462で行われる。ステップ4に相当する積と和は、クロックck5で働く2つのアダーグループ441,442とひとつの4入力パリティチェッカグループ471で行われる。
ステップ5に相当する積は、4つのアダーグループ422〜425をマルチプレックスしてクロックck6で働く。ステップ6に相当する積と和は、3つのアダーグループ421,426,427と1つの4入力パリティチェッカグループ451でクロックck7で働く。ステップ7に相当する和は、2つの4入力パリティチェッカグループ461,462でクロックck8で働く。
これらの計算過程で得られた15個の計算結果はそれぞれダッシュつきのクロックで図に示すようにレジスタグループ480に保持される。
各回路ブロックの詳細は後に説明する。
図5は、ES部25の詳細構成を示す。先のSEC部24での計算結果として保持された有限体要素を元にして計算を進めてエラー位置を特定するのがES部25である。その構成は、3次方程式の解を求める回路ブロック(CUBE部)500と、2次方程式の解を求める回路ブロック(SQUARE部)510と、要素間の和を求める4つの2入力パリティチェッカグループ520〜523とを有する。
CUBE部500は、3次方程式の未知数部が等値されるシンドロームから得られる量Hを計算するひとつのアダーグループ501と、3次方程式w3+w=Hからwを求めるデコーダ回路502と、wから本来欲しい量δをwまたはw+1とb1/2の積として計算するひとつのアダーグループ503とからなる。
SQUARE部510は、2次方程式の未知数部が等値されるδから得られる量JとKを計算する2つのアダーグループ511a,512aと、2つの2次方程式u2+u=Jとv2+v=Kとからからuとvをそれぞれ求めるデコーダ回路513a,514aと、u及びvから4次方程式の2次式への因数分解の係数α0、β0、α1、β1を計算する4つのアダーグループ515a〜518aを有する。
SQUARE部510は更に、得られた係数からエラー探索の4次方程式の根を求めるために解く2次方程式の未知数部に等値される量LとMを計算する2つのアダーグループ511b,512bと、2つの2次方程式y2+y=Lとz2+z=Mからyとzをそれぞれ求めるデコーダ回路513b,514bと、y及びzから4次方程式の解を計算する4つのアダーグループ515b〜518bとから構成される。
なお、SQUARE部510では、全く同じ構成の回路システムが計算の前半と後半で使用されるので、図中括弧でくくった後半の計算回路部分511b〜518bは前半回路部分511a〜518aをマルチプレクスして利用する。このために前半回路部の計算結果を保持するためのレジスタ(α0、β0、α1、β1)群530が設けられている。
SQUARE部510の計算結果はそれぞれシンドロームから得ら量を加えて本来のエラー探索結果となるので、この和の計算を行なう4つの2入力パリティチェッカグループ520〜523があり、その結果を保持するためのレジスタ(X1、X2、X3、X4)群531も設けられている。
なおこの4つのパリティチェッカグループ520〜523はそのうちの3つ520〜522をSEC部24で使用される3つのパリティチェッカグループ401〜403をマルチプレクスして使用している。
以下、ES部25について、具体的な計算の場合に従って計算に進行過程を説明する。8つのケースcase1〜case8の計算過程を、図6〜図12を参照して説明する。
図6は、ケース1(case1)であり、計算方式の説明の6)に相当する。SEC部24のレジスタ群480が、S≠0、Γ≠0、b≠0、c≠0の場合で、他の量としてBを計算に使用する。各計算回路ブロックにはそのブロックを働かせるタイミングクロックを示した。
回路ブロック(CUBE部)500ではクロックck9でbとcからそれらの累乗の積がアダー501で作られ、デコーダ502でクロックck10により3次方程式の解がデコードされ、解wとbの累乗積がアダー503で計算されて、結果δを得る。
回路ブロック(SQUARE部)510では、クロックck11でBとδの累乗の積がひとつのアダーで、δとSの累乗の積がもうひとつのアダーで計算され(アダーグループ511a,512a)、クロックck12でそれぞれ2次方程式の解がデコードされ(デコード回路513a,514a)、それぞれの解とδ及びSとの積が4つのアダーで計算されてα0、β0、α1、β1が得られて(アダーグループ515a〜518a)、クロックck13ででこれらがレジスタ群530に保持される。
その後同じ回路ブロック510がマルチプレクスして使用される。すなわちクロックck13でα0、α1の累乗の積がひとつのアダーで、β0、β1の累乗の積がもうひとつのアダーで計算され(アダーグループ511b,512b)、クロックck14でそれぞれ2次方程式の解がデコードされ(デコード回路513b,514b)、それぞれの解とα1及びβ1との積が4つのアダーグループ515b〜518bで計算されてα1y1、α1y2、β1z1、β1z2が得られる。
2入力パリティチェッカグループ520〜522によって、以上の結果がクロックck15でaと加えられてX1、X2、X3、X4が得られ、これがクロックck16でレジスタ群531に保持される。
図7は、ケース2(case2)であり、計算方式の説明の2)に相当する。レジスタ群480が、S=0、ζ≠0、η=0 の場合で、他の量としてζ-1θを計算に使用する。各計算回路ブロックにはそのブロックを働かせるタイミングクロックを示した。回路ブロック500による計算は必要ではなく、ここではδ=ζ2/3とおく。またこのケースでは、パリティチェッカグループも用いられない。
回路ブロック510では、クロックck5でζ-1θとδの累乗の積がひとつのアダーで、もうひとつのアダーでの計算はないのでゼロが入力され(アダーグループ511a,512a)、クロックck6で2次方程式の解がデコードされて(デコード回路513a,514a)、解とδの積が2つのアダー515a,516aで計算されてα0、β0が得られる。さらにα1=β1=ζ1/3とおき、クロックck7でこれらがレジスタ群530に保持される。
その後同じ回路ブロックがマルチプレクスして使用される。すなわちクロックck7でα0、α1の累乗の積がひとつのアダーで、β0、β1の累乗の積がもうひとつのアダーで計算され(アダーグループ511b,512b)、クロックck8でそれぞれ2次方程式の解がデコードされ(デコード回路513b,514b)、それぞれの解とα1及びβ1との積が4つのアダーで計算されて(アダーグループ515b〜518b)、X1、X2、X3、X4 が得られる。この結果がクロックck9でレジスタ群531に保持される。
図8はケース3(case3)であり、計算方式の説明の3)に相当する。レジスタ群480が、S=0、ζ≠0、η≠0の場合で、他の量としてζ-1ηとQを計算に使用する。各計算回路ブロックにはそのブロックを働かせるタイミングクロックを示した。
c=ζ2、b=(ζ-1η)2 とおいて、回路ブロック500では、クロックck7でbとcからそれらの累乗の積が作られ(アダー501)、クロックck8で3次方程式の解がデコードされ(デコード回路502)、解wに1を加えたw+1とbの累乗積がアダーで計算されて(アダー503)、結果δを得る。
回路ブロック510では、クロックck9でQとδの累乗の積がひとつのアダー511aで計算され、もうひとつのアダー512aは計算には使用しなのでゼロが入力される。クロックck10で2次方程式の解がデコードされて(デコード回路513a,514a)、解とδとの積が2つのアダーで計算されてα0、β0 が得られる(アダー515a,516a)。さらにα1=β1=(δ+ζ-1η)1/2 とおいて、クロックck11でこれらがレジスタ群530に保持される。
なお、クロックck9のタイミングで2入力パリティチェッカグループのひとつ523でδとζ-1ηの和が計算されてα1とβ1で利用される。その後同じ回路ブロック510がマルチプレクスして使用される。すなわちクロックck11でα0、 α1の累乗の積がひとつのアダーで、β0、β1の累乗の積がもうひとつのアダーで計算され(アダーグループ511b,512b)、クロックck12でそれぞれ2次方程式の解がデコードされ(デコード回路513b,514b)、それぞれの解とα1及びβ1との積が4つのアダーでで計算されてX1、X2、X3、X4 が得られる(アダーグループ515b〜518b)。この結果がクロックck13でレジスタ群531に保持される。
図9は、ケース4(case4)とケース5(case5)を併せて示している。上部に示したケース4は、計算方式説明の4)に相当する。S≠0、ζ=0、Γ=0の場合で、クロックck6でレジスタ群531にX1=Sを保持するだけでよい。
図9の下部のケース5(case5)は、計算方式の説明の5)に相当する。S≠0、ζ≠0、Γ=0の場合で、他の量としてS-1ζを計算に使用する。各計算回路ブロックにはそのブロックを働かせるタイミングクロックを示した。
回路ブロック501による計算と回路ブロック510による前半の計算は必要ではなく、α0=S-1ζ、α1=Sとおいて、これをクロックck6でレジスタ群530に保持する。
回路ブロック510では、クロックck6でα0とα1の累乗の積がひとつのアダーで計算され、もうひとつのアダーは計算には使用しなのでゼロが入力される
(アダーグループ511b,512b)。クロックck7で2次方程式の解がデコードされて(デコード回路513b,514b)、その解とα1との積が2つのアダーで計算されてX1、X2が得られ(アダーグループ515b,516b)、これらがクロックck8でレジスタ群531に保持される。
図10はケース6(case6)であり、計算方式の説明の7)に相当する。S≠0、Γ≠0、b≠0、c=0の場合で、他の量としてBを計算に使用する。各計算回路ブロックにはそのブロックを働かせるタイミングクロックを示した。
回路ブロック500による計算は必要ではなく、δ=b1/2とおく。
回路ブロック510は、クロックck9でBとδの累乗の積がひとつのアダーで、δとSの累乗の積がもうひとつのアダーで計算され(アダーグループ511a,512a)、クロックck10でそれぞれ2次方程式の解がデコードされ(デコード回路513a,514a)、それぞれの解とδ及びSとの積が4つのアダーで計算されてα0、β0、α1、β1が得られる(アダーグループ515a〜518a)。これらの結果がクロックck11でレジスタ群530に保持される。
その後同じ回路ブロック510がマルチプレクスして使用される。すなわちクロックck11でα0、α1の累乗の積がひとつのアダーで、β0、β1の累乗の積がもうひとつのアダーで計算され(アダーグループ511b,512b)、クロックck12でそれぞれ2次方程式の解がデコードされ(デコード回路513b,514b)、それぞれの解とα1及びβ1との積が4つのアダーで計算されてα1y1、α1y2 、β1z1 、β1z2 が得られる(アダーグループ615b〜518b)。
この結果が、クロックck13により2入力パリティチェッカ520〜523によって、aと加えられてX1、X2、X3、X4が得られ、これがクロックck14でレジスタ群531に保持される。
図11は、計算方式の説明の8)に相当するケース7(case7)である。S≠0、Γ≠0、b=0、c≠0の場合で、他の量としてBを計算に使用する。各計算回路ブロックにはそのブロックを働かせるタイミングクロックを示した。
回路ブロック500による計算は必要ではなく、δ=c1/3とおく。
回路ブロック510では、クロックck9でBとδの累乗の積がひとつのアダーで、δとSの累乗の積がもうひとつのアダーで計算され(アダーグループ511a,512a)、クロックck10でそれぞれ2次方程式の解がデコードされ(デコード回路513a,514a)、それぞれの解とδ及びSとの積が4つのアダーで計算されてα0、β0、α1、β1が得られる(アダーグループ515a〜518a)。それらの結果がクロックck11でレジスタ群530に保持される。
その後同じ回路ブロックがマルチプレクスして使用される。すなわちクロックck11でα0、α1の累乗の積がひとつのアダーで、β0、β1の累乗の積がもうひとつのアダーで計算され(アダーグループ511b,512b)、クロックck12でそれぞれ2次方程式の解がデコードされ(デコード回路513b,514b)それぞれの解とα1及びβ1との積が4つのアダーで計算されてα1y1、α1y2 、β1z1 、β1z2 が得られる(アダーグループ515b〜518b)。
この結果が、2入力パリティチェッカグループ520−523によって、クロックck13でaと加えられてX1、X2、X3、X4が得られる。これがクロックck14でレジスタ群531に保持される。
図12はケース8(case8)であり、計算方式の説明の9)に相当する。S≠0、Γ≠0、b=、c=0の場合で、他の量としてaとBを計算に使用する。各計算回路ブロックにはそのブロックを働かせるタイミングクロックを示した。
回路ブロック500による計算と回路ブロック510による前半の計算は必要ではなく、α0=β0="0"、 α1=β1=Sとおいて、これをクロックck9でレジスタ群530に保持する。
回路ブロック510では、クロックck9でα0、α1の累乗の積がひとつのアダーで、β0、β1の累乗の積がもうひとつのアダーで計算され(アダーグループ511b,512b)、クロックck10でそれぞれ2次方程式の解がデコードされ(デコード回路513b,514b)、それぞれの解とα1及びβ1との積が4つのアダーで計算されてα1y1、α1y2、β1z1、β1z2が得られる(アダーグループ515b〜518b)。
この結果が、2入力パリティチェッカグループ520−523によって、クロックck13でaと加えられてX1、X2、X3、X4が得られる。これがクロックck12でレジスタ群531に保持される。
ここまでは一般的な記述で4ビットエラー探索と訂正の原理的な説明を行なってきたが、具体的な回路システムを説明するために256の要素からなるGF(256)の場合について詳細な実施の形態を示す。GF(256)を選ぶ理由はメモリで一括して扱うデータ量が128ビット以上から256ビット程度までが実用的であるためである。
・データのエンコーディング
基本既約多項式m1(x)を下記数41とし、その根をαとする。
GF(256)では、GF(2)上の多項式として8次多項式となる。このαを用いるとGF(256)の要素は0,α0,α1,…,α253,α254の256個である。
α3,α5及びα7を根とする既約多項式として、m3(x),m5(x)及びm7(x)を下記数42のように選択する。
これらの既約多項式から、コード生成多項式g(x)=m
1(x)m
3(x)m
5(x)m
7(x)を作ると、下記数43のような32次多項式となる。
ECCシステムのコードを作る要素は有限体のゼロ因子を除いた255個であるので254次の多項式の係数がデータを表すことになる。データビットのうちの情報ビットを係数a32〜a254に割り当て32次から始まる多項式f(x)x
32をg(x)で割って剰余を求めr(x)とする。r(x)は、数44に示すように、31次の多項式となる。
r(x)の係数b
31,b
30,…,b
1,b
0が情報ビットに付随した32のチェックビットとなり、情報ビットと合わせてメモリに記憶させるデータを構成する。
扱う情報データとしては2の累乗がメモリの構成上望ましいので、128ビットとするとデータビット数は160ビットとなる。128の情報ビットをGF(256)の多項式のどの次数に割当てるかは計算の効率の観点から決める。この方法は後に説明する。
情報ビットの次数の選択は計算規模やシステム規模が最小になるよう選択され、128ビットの情報をai(1)〜ai(128)としてこれらを係数とするi(128)-1次の多項式をf(x)とする。これが入力となる。選ばれた128ビットの次数を昇順でi(1),i(2),…,i(127),i(128) で示す。
図13は、GF(256)を用いた4EC−BCHシステムでのシンドローム多項式S1(x),S3(x3),S5(x5),S7(x7)の同時並列計算の量が少なくなるように選択を行なった多項式次数の選択の1例である。計算で使用する有限体要素多項式である7次多項式pn(x)の係数1の総数が出来るだけ少なくなるように、かつ各次数での係数1の総数が次数間で均等にバラツクように、128個の次数を選択している。
具体的にはxのn乗をm1(x),m3(x),m5(x)及びm7(x)で割った剰余をそれぞれ有限体要素で表したことに相当するpn(x)の係数、これの3乗であるp3n(x)、5乗であるp5n(x)、7乗であるp7n(x)の係数1の数を考慮して選択している。0次から31次はチェックビットとして使用されるので固定ビットである。選択された128個の次数を昇順にi(1),i(2),…,i(127),i(128)として対応する実際に選択された次数を表の真ん中の行に示した。
図14A及び図14Bは、チェックビットを計算するためのデータビット位置に対応するf(x)x32の次数の選択表である。表の意味は以下の通りである。
単項xiをコード生成多項式g(x)で割った31次多項式となる剰余ri(x)を求めておく。選択された160個のデータは254次多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxiの項があり、生成多項式g(x)の剰余の寄与はri(x)である。
よってデータ1であるiのri(x)を選択してri(x)の各次数の係数の和をmod 2で求めればデータ多項式のg(x)での割り算による剰余となる。但しri(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。
ri(x)の各次数mについてその係数が1であるiをまとめると、これらの表になる。もちろん表には選択されて使用される128個の次数のiのみが挙げてあり、チェックビットを作る際にはi=31までの次数はデータとして使わないのでi=32以降のiの表となる。
表の使い方は、例えばx15の係数が1であるri(x)のiは表のm=15の行の"PCL入力番号"の欄の値が1から65に書かれている33,34,38,…,227,249,253のiの次数の項であり、チェックビットのx15の係数に相当するb15は情報データ多項式f(x)x32の中のこの選択されたi次の項の中のデータが1であるビット位置のiの1のパリティチェックの結果、すなわち表の中のデータが1に相当するiの数のmod 2の剰余として得られる。
図15は、上述のチェックビットの計算表を回路として実現したものである。情報データ多項式f(x)x32からチェックビットを、g(x)による剰余として計算する回路であり、入力選択回路151と32個の4ビットパリティ・チェッカ・ラダー(PCL:Parity Checker Ladder)152とを有する。
4ビットPCL152は、チェックビットを表す多項式の各次数の係数の値を計算するためのXOR回路の集合で、生成多項式によるxiの剰余のテーブルに従って各次数で入力を選択してそのパリティを計算する。
入力選択回路151は入力信号である情報データ多項式の係数ai(1)〜ai(128)信号すなわち入力データ信号をインバータで反転した信号の配線と、PCLの入力となる配線との接続をテーブルに従って選択するものである。入力配線の交点は入力データとテーブルのm=0〜32の総数の和から128×2026であり、必要な交点がテーブルより選ばれてそこにコンタクトが設けられる。
図16は、4ビットPCL152の一例である。各mについて表からnを選択しaiを用いてパリティチェックを行なう。入力の数が4の剰余系のいずれに属するかによって用いるパリティチェッカ(PC)を組合せる。すなわち、4で割り切れれば4ビットPCのみで、1が余れば2ビットPCの一方の入力端子をVssにしたもの(すなわちバッファ)を加え、2が余れば2ビットPCを加え、3が余れば4ビットPCのひとつの入力端子をVssにしたものを加える。
xiのm=17は図14A,14Bの表からパリティチェックするビット数が最大の73個であるのでこの場合を例として示す。73入力であるので最初の段は4ビットPCを18個とバッファ1個、2段目は19入力となるから、4ビットPCを5個(うち1個は、一つの入力端子をVss)、3段目は5入力となるので4ビットPCを1個とバッファ1個、4段目は2入力なので2ビットPC一つで構成される。
他のmについても同様に構成する。
図17は、2ビットPCの回路記号と具体回路を示している。即ち2ビットPCは、入力2ビットaとbをXOR部とXNOR部でロジック演算して、even parity、すなわち入力端子中の"1"の数が奇数のときEP="1"を出力する。
図18は、4ビットPCの回路記号と具体回路を示している。4ビットPCでは、4ビット入力a,b,c,dを、構成要素である二つの2ビットPCの出力のロジックを取り、奇数個の1が入力にあるときEP="1"を出力する。
・シンドローム計算部23
図19は、シンドロームS=S1(x)の計算で使用する、xiのm1(x)での剰余pi(x)の各次数の係数が1であるiの表である。表の意味は以下の通りである。
単項xiを多項式m1(x)で割った7次の剰余多項式pi(x)を求めておく。255個のデータは254次の多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxiの項があり、多項式m1(x)の剰余の寄与はpi(x)である。よってデータが1であるiのpi(x)を選択してpi(x)の各次数mの係数の和をmod 2で求めれば、データ多項式のm1(x)での割り算による剰余となる。
但しpi(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。pi(x)の各次数mについてその係数が1であるiをまとめると図19の表になる。
例えばx7の係数が1であるpi(x)のiは表のm=7の行の"PCL入力番号"の欄の数が1から71の列に書かれている7,11,12,…,237,242,254のiであり、S1(x)のx7の係数に相当する(s)7は、データの多項式ν(x)の中のこれらのi次の項の係数のパリティチェックの結果として得られる。
図20は、シンドロームS3=S3(x3)の計算で使用する、x3iのm1(x)での剰余p3i(x)の各次数の係数が1であるiの表である。表の意味は以下の通りである。
単項xiを多項式m3(x)で割った7次多項式となる剰余をti(x)とする。S3(x)へはti(x)が寄与するが、S3=S3(x3)であるからS3へはti(x3)が寄与する。xi≡ti(x)mod m3(x)からti(x3)≡x3imod m3(x3)かつ、m3(x3)≡0 mod m1(x)であるので、ti(x3)≡x3i≡p3i(x) mod m1(x)となる。
GF(256)の要素はmod m1(x)の既約剰余なのでν(x)のxiの項からはS3にp3i(x)の寄与と等しくなる。そこでp3i(x)を求めておく。255個のデータは254次の多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxiの項があり、この項の多項式m3(x)の剰余ti(x)のS3=S3(x3)への寄与はp3i(x)である。
よってデータ1であるiのp3i(x)を選択してp3i(x)の各次数mの係数の和をmod 2で求めればデータ多項式のm3(x)での割り算による剰余S3(x)を求めなくてもS3(x3)が直接得られる。但し、p3i(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。p3i(x)の各次数mについてその係数が1であるiをまとめると図20の表になる。
例えばx7の係数が1であるp3i(x)のiは表のm=7の行の"PCL入力番号"の欄の数が1から73の列に書かれている4,8,14,…,242,249,254のiであり、S3(x3)のx7の係数に相当する(s3)7はデータの多項式ν(x)の中のこれらのi次の項の係数のパリティチェックの結果として得られる。
他のmについても同様にして係数が得られる。
図21はシンドロームS5=S5(x5)の計算で使用する、x5iのm1(x)での剰余p5i(x)の各次数の係数が1であるiの表である。表の意味は以下の通りである。
単項xiを多項式m5(x)で割った7次多項式となる剰余をqi(x)とする。S5(x)へはqi(x)が寄与するがS5=S5(x5)であるからS5へはqi(x5)が寄与する。xi≡qi(x) mod m5(x)からqi(x5)≡x5i mod m5(x5)とm5(x5)≡0 mod m1(x)なので、qi(x5)≡x5i≡p5i(x) mod m1(x)となる。
GF(256)の要素はmod m1(x)の既約剰余なのでν(x)のxiの項からはS5にp5i(x)の寄与と等しくなる。そこでp5i(x)を求めておく。255個のデータは254次の多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxiの項があり、この項の多項式m5(x)の剰余qi(x)のS5=S5(x5)への寄与はp5i(x)である。
よってデータが1であるiのp5i(x)を選択してp5i(x)の各次数mの係数の和をmod 2で求めれば、データ多項式のm5(x)での割り算による剰余S5(x)を求めなくてもS5(x5)が直接得られる。但しp5i(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。p5i(x)の各次数mについてその係数が1であるiをまとめると図21の表になる。
例えばx7の係数が1であるp5i(x)のiは表のm=7の行の"PCL入力番号"の欄の数が1から64の列に書かれている4,7,9,…,242,250,253のiであり、S5(x5)のx7の係数に相当する(s5)7はデータの多項式ν(x)の中のこれらのi次の項の係数のパリティチェックの結果として得られる。
他のmについても同様にして係数が得られる。
図22は、シンドロームS7=S7(x7)の計算で使用する、x7iのm1(x)での剰余p7i(x)の各次数の係数が1であるiの表である。表の意味は以下の通りである。
単項xiを多項式m7(x)で割った7次多項式となる剰余をsei(x)とする。S7(x)へはsei(x)が寄与するがS7=S7(x7)であるからS7へはsei(x7)が寄与する。xi≡sei(x) mod m7(x)から、sei(x7)≡x7i mod m7(x7)とm7(x7)≡0 mod m1(x)なので、sei(x7)≡x7i≡p7i(x) mod m1(x)となる。
GF(256)の要素はmod m1(x)の既約剰余なので、ν(x)のxiの項からはS7にp7i(x)の寄与と等しくなる。そこでp7i(x)を求めておく。255個のデータは254次の多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxiの項があり、この項の多項式m7(x)の剰余sei(x)のS7=S7(x7)への寄与はp7i(x)である。
よってデータ1であるiのp7i(x)を選択してp7i(x)の各次数mの係数の和をmod 2で求めれば、データ多項式のm7(x)での割り算による剰余S7(x)を求めなくてもS7(x7)が直接得られる。但しp7i(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。p7i(x)の各次数mについてその係数が1であるiをまとめると図22の表になる。
例えばx7の係数が1であるp7i(x)のiは表のm=7の行の"PCL入力番号"の欄の数が1から81の列に書かれている1,5,6,…,242,249,250のiであり、S7(x7)のx7の係数に相当する(s7)7はデータの多項式ν(x)の中のこれらのi次の項の係数のパリティチェックの結果として得られる。
他のmについても同様にして係数が得られる。
図23は、上述のシンドロームS(=S1),S3,S5,S7の計算表を回路として実現した場合の構成である。データ多項式ν(x)から各シンドロームをm1(x)の剰余として計算する際のパリティチェック回路であり、入力回路部231と、4ビットPCL232とからなる。
4ビットPCLは、チェックビットを表す多項式の各次数の係数の値を計算するためのXOR回路の集合で、多項式m1(x)によるxiの剰余pi(x)のテーブルに従って各次数で入力を選択してそのパリティを計算する。
入力回路部231は入力信号であるデータ多項式の160個の係数d0,d1,…,d31,di(1),…,di(128)すなわちメモリからのデータ信号をインバータで反転した信号をテーブルにしたがって配線接続し、さらにインバータで反転してバッファすることでPCL232の入力とする。
入力配線の交点は、入力データとテーブルのm=0〜7の総数の和から、Sの場合160×575、S3の場合160×618、S5の場合160×571、S7の場合160×578である。これらの必要な交点がテーブルより選ばれてコンタクトが設けられ、接続が実現される。
図24は、シンドローム計算での4ビットPCLの構成例を示す。各mについて表からiを選択し、diを用いてパリティチェックを行なう。入力の数が4の剰余系のいずれに属するかによって用いるパリティチェッカ(PC)を組合せる。すなわち4で割り切れれば4ビットPCのみで、1が余れば2ビットPCの一方の入力端子をVssにしたもの(即ちバッファ)を加え、2が余れば2ビットPCを加え、3が余れば4ビットPCのひとつの入力端子をVssにしたものを加える。
xiのm=5は表からパリティチェックするビット数が最大の77個であるので、図24はこの場合を例として示す。77入力であるので最初の段は4ビットPCを19個とバッファ1個、2段目は20入力となり4ビットPCを5個、3段目は5入力となるので4ビットPCを1個とバッファ1個、4段目は2入力なので2ビットPCで構成される。
他のmについても同様に構成する。他のシンドロームについても同様に表から構成できるので説明は省略する。
シンドロームS,S3,S5,S7は7次の多項式として得られ、GF(256)の要素であるpin(x)のいずれかに一致している。そこで多項式を、m1(x)の根αのインデックスをmod 17,mod 15のペアによって表した“表現インデックス”に変換して以後の計算で利用する。この変換を行なうデコーダ回路を図25〜図27に示す。
図25は、プリデコーダであり、8ビットのpi(x)の係数が表す256のバイナリ信号状態を信号Ai,Bi,Ci,Di(i=0〜3)の組合せとして表し、更にこれから16個のE[i]とF[i]であるE[0;15]とF[0;15]への変換を行うものであって、NAND回路とNOR回路で構成される。
8ビットのバイナリを2ビットずつ下位から区切り4進数としてそれぞれ表し、これらをAi,Bi,Ci,Diとしている。更にAとBから16進の下位信号E[0;15]を、CとDから16進の上位信号F[0;15]を作っている。このプリデコーダを設けることにより、次段のデコード回路の構成ユニットのトランジスタ数を、プリデコーダを設けない場合に比べて8個から2個に削減することができる。
図26のインデックス(17),(15)デコーダは、図25でプリデコードされた信号を元に、剰余類のグループに分けて表現インデックスのmod 17とmod 15の成分を発生しこれらをラッチする回路である。信号E[0;15]とF[0;15]を入力とするNAND接続とそれらを並列にしたNOR接続とを有し、プリチャージされたノードがクロックck2とck2’で放電されるか否かにより剰余類のインデックス信号iを出力している。剰余類の数だけこの回路は必要である。mod 17,mod 15に対してこれらのインデックス信号をつくりこれらのペアとして表現インデックスとする。
pi(x)=0の場合はαの指数で表現できずインデックスが求まらない。この場合はE[0]=1かつF[0]=1であり、インデックスは出力されない。シンドロームSに関してはゼロ要素であることの判断を使うので、インデックスの状態をモニターしても良いが、ゼロ成分であるこの判定を簡単に行うために、図27のSゼロ元判定回路を設けている。具体的には信号S=0をシンドロームSがゼロ元に対応する場合に発生する。
図28は、図25のプリデコーダ、図26のインデックス(17),(15)デコーダによって表現インデックスを求める際の対応表であり、既約剰余pi(x)のインデックスiをmod 17の剰余類i(17)として分類したものである。0から16のインデックスで分類され、各々の類には15個のnが含まれ、これらに対応するpi(x)の各次数mの係数に従ってプリデコーダされた16進表示を示している。
16進表示は回路でのF[j]E[k]のペアとしてjkで表している。すなわち、01はF[0]とE[1]のペアである。Ai,Bi,Ci,Diについては表には載せていないが各次数mのペアから4進表示として得られる。
各表現インデックスi(17)に属するインデックスの16進表示のE[0;15]とF[0;15]を表から選択して、図26のデコーダのトランジスタゲートへの信号接続が決まる。例えばi(17)=1においては並列にNOR接続されるNANDのノードはiが1,18,35,52,69,86,103,120,137,154,171,188,205,222,239に相当し、NANDのトランジスタゲートへは対応する表のF[j]E[k]のペアを接続する。
図29は、図25のプリデコーダ、図26のインデックス(17),(15)デコーダによって表現インデックスを求める際の対応表であり、既約剰余pi(x)のインデックスiをmod 15の剰余類i(15)として分類したものである。0から14のインデックスで分類され、各々の類には17個のnが含まれこれらに対応するpi(x)の各次数mの係数に従ってプリデコーダされた16進表示を示している。
16進表示は回路でのF[j]E[k]のペアとしてjkで表している。すなわち01はF[0]とE[1]のペアである。Ai,Bi,Ci,Diについては表には載せていないが各次数mのペアから4進表示として得られる。
各表現インデックスi(15)に属するインデックスの16進表示のE[0;15]とF[0;15]を表から選択して、図26のデコーダのトランジスタゲートへの信号接続が決まる。例えばi(15)=1においては並列にNOR接続されるNANDのノードはiが1,16,31,46,61,76,91,106,121,136,151,166,181,196,211,226,241に相当し、NANDのトランジスタゲートへは対応する表のF[j]E[k]のペアを接続する。
計算の過程では有限体要素の累乗が頻繁に現れるが、累乗の関係は表現インデックスでは各成分間の一定の変換に対応するので、計算ではなく信号のつなぎ変えに相当する。累乗の指数と表現インデックスの対応関係を示したのが図30の表である。
要素の累乗は表現インデックス成分の倍数としての関係になる。表現インデックス{i(17),i(15)}の成分インデックスがiのm倍で新たに得られる表現インデックスをxmの欄として示した。この変換を組みあわて本システムで必要な表現インデックスは全て得られる。
例えば表現インデックス{3,8}で表される要素を−3/2乗した要素の表現インデックスは−3/2倍に相当する。最初の成分インデックスはi(17)=3であるので、x(−1)の−i(17)欄から14になり、これを新たにi(17)と見なしてx3の3i(17)から8となり、これを新たにi(17)と見なしてx(1/2)のi/2(17)欄から4となる。
この変換の順番はどの様な順番でも結果は同じである。2番目の成分インデックスはi(15)=88であるので、 x(−1)の−i(15)欄から7になり、これを新たにi(15)と見なしてx3の3i(15)欄から6となり、これを新たにi(15)と見なしてx(1/2)のi/2(15)欄から3となる。すなわち表現インデックス{3,8} は対応する要素の−3/2乗で表現インデックス {4,3}に対応する要素になる。
以上で計算に必要な表現インデックスを得ることが出来るので、次にシンドロームの和であるζ、η、θを求める具体的な回路を説明する。
図31は、シンドロームの表現インデックスからその累乗との和であるζ、η、θの多項式表現の係数を求める回路の構成である。有限体要素の和をその表現インデックスから求めるには表現インデックスから要素の多項式表現を得てその係数のパリティチェックを行う必要がある。従って表現インデックスと多項式表現の変換を行なうデコーダ回路312a,312bと2ビットPC313とを有する。
入力信号はSk,Sk (k=3,5,7)それぞれの表現インデックスであり、これらの信号ごとに和の多項式表示のm次の係数に相当するノードNa,Nbを持ちこのノードをプリチャージするプリチャージ回路311がある。クロックck2でプリチャージ回路311をオフにして、デコーダ回路312a,312bを活性化する。
各信号のm次のノードの表現インデックス信号のトランジスタゲートへの接続は次に説明する表から決まり信号によらない構成である。各mについて各要素からの2つのノードNa,Nbのパリティチェックを2ビットPC313で行うことにより、入力信号の和の多項式表示の係数が得られる。
有限体要素間の和の計算は、有限体の要素を既約多項式と見てその係数の2を法としての和を求めるものである。そこで表現インデックスによって表された有限体の要素多項式pi(x)を加えるための係数を求める方法を説明する。
図32A及び図32Bの表はpi(x)の次数mの係数とインデックスのiと{i(17),i(15)}の関係を表現インデックス成分i(15)の値0〜14ごとのグループでまとめて示したものである。各グループ内で表現インデックス成分i(17)は0から16までが昇順に並べられている。また、input i(17)の部分には、pi(x)の係数の和において係数が0であるところは和に寄与しないので係数が1であるところの次数mに対してi(17)の値を表示している。
pi(x)と表現インデックス{i(17),i(15)}は一対一に対応しているので、ある表現インデックスが与えられたとき多項式のpi(x)の次数mの係数の和への寄与をこの表からデコードできる。
ζ=S3+S3の計算を例にして、表現インデックスと多項式表現の係数間のこの表の使用方法を説明する。先の図31に示すように、入力S3とS3は表現インデックスとして入力される。各入力の各々の各次数mについて、 ひとつのi(15)をゲート入力とするひとつのトランジスタの下にこのi(15)に属するpi(x)の次数mの係数が1であるi(17)をゲート入力とするトランジスタのNOR接続を作る。すなわち表現インデックスがこのグループにヒットすれば電流パスが出来るようにする。
このような接続を各成分i(15)について図32A,32Bの表から作り、共通ノードを放電するようにする。この共通ノードがひとつの表現インデックスに対してpi(x)の次数mの係数の反転を表している。
例えばm=7は表から、i(15)=0の下のi(17)=5,9,10,11,12,16のNOR接続と、i(15)=1の下のi(17)=6,7,9,12,14,15のNOR接続と、i(15)=2の下のi(17)=0,1,3,4,6,10,11,15のNOR接続と、i(15)=3の下のi(17)=0,4,6,8,9,12,13,15のNOR接続と、i(15)=4の下のi(17)=5,6,7,10,11,14,15,16のNOR接続と、i(15)=5の下のi(17)=0,1,3,4,7,9,10,11,12,14のNOR接続と、i(15)=6の下のi(17)=1,3,8,9,10,11,12,13のNOR接続と、i(15)=7の下のi(17)=0,4,5,7,8,9,10,11,12,13,14,16のNOR接続と、i(15)=8の下のi(17)=0,1,3,4,5,6,9,12,15,16のNOR接続と、i(15)=9の下のi(17)=0,4,7,8,13,14のNOR接続と、i(15)=10の下のi(17)=0,1,3,4,5,7,14,16のNOR接続と、i(15)=11の下のi(17)=1,3,6,7,8,10,11,13,14,15のNOR接続と、i(15)=12の下のi(17)=1,3,5,6,7,8,9,12,13,14,15,16のNOR接続と、i(15)=13の下のi(17)=1,3,5,8,13,16のNOR接続と、i(15)=14の下のi(17)=0,4,5,6,8,10,11,13,15,16のNOR接続とから作られる放電パスのNOR接続である共通ノードが表現する。
例えば、{i(17),i(15)}={11,4}はi(15)=4の下のi(17)= 5,6,7,10,11,14,15,16のNOR接続を介してノードNa,Nbが放電されm=7次の係数が1であることがデコードされる。入力S3とS3の次数mのノードNa,Nbの情報は2ビットPC313でパリティが計算されるので、ノードNa,Nbが放電で反転されているが和としての結果は反転されていない場合と同じである。
この様にして有限体要素ζの多項式表現の係数が得られる。なお入力がゼロ要素である場合は表現インデックスは発生されず、信号はVss状態であるので放電パスは出来ずにノードは"1"となるので、ここでの計算はゼロ元も含めて正しい結果を得る。
シンドロームの和としてのζ、η、θは7次の多項式として得られ、GF(256)の要素であるpi(x)のいずれかに一致している。そこで多項式をm1(x)の根αのインデックスを、mod 17,mod 15によって表した表現インデックスに変換して以後の計算で利用する。
この変換を行なうためのプリデコーダは、シンドローム計算の際の図27のそれと同じ構成であり、多項式表現の8ビットの係数から16進表示の信号E[0;15]とF[0;15]を発生するので改めて図に示さない。
図33のインデックス(17),(15)デコーダは、プリデコードされた信号をもとに剰余類のグループに分けて表現インデックスのmod 17とmod 15の成分を発生し、これらをラッチする。即ち、信号E[0;15]とF[0;15]を剰余類の各要素を表すデコードのNAND接続とこれら要素の集合を表すこれらのNOR接続で結合して、プリチャージされたノードをクロックck3とck3’で放電して、さらに反転して、剰余類のインデックス信号iを出力している。剰余類の数だけこの回路は必要である。mod 17,mod 15に対してこれらのインデックスをつくりこれらのペアとして表現インデックスとする。
pi(x)=0の場合はαの指数で表現できずインデックスが求まらない。この場合はE[0]=1かつ、F[0]=1でありインデックスは出力されない。ζ、η、θに関してはゼロ要素であることの判断を使うので、インデックスの状態をモニターしても良いが、ゼロ成分であるこの判定を簡単に行うために、図34に示すデコーダを別途、ζ,η,θゼロ要素判定回路として設けている。具体的には信号ζ=0、η=0、θ=0をそれぞれゼロ要素に対応する場合に発生する。
次にエラー位置探索について説明する。
・シンドローム要素計算(SEC)部24
エラー位置検索で必要な計算はインデックス間の合同式からインデックスを確定することである。図2のシンドローム要素計算部24においてクロックck3で起動される計算について次に説明する。
有限体要素間の積演算は要素の表現インデックス間の合同式の計算になる。合同式はいずれもGF(256)であるので255を法としたものである。この計算はまともに行なうと255×255の規模の比較を行うことに相当し回路規模が大きくなる。そこで計算を並列化する。すなわち、255を互いに素である二つの因子に分けてこれらを法とする二つの合同式に分離して、これらの合同式を同時に満たす数はもともとの合同式も満たすことを利用する。
具体的には、以下に説明するように、いずれの合同式をとく場合も、255=17×15によって、17と15をそれぞれ法とする二つの合同式を同時に解くようにする。
数45は、S4ηのインデックスσ(S4η)を求める場合である。SのインデックスをσとすればSの4乗は先の変換表で4σの表現インデックスが得られるのでこれとインデックスσ(η)から、この様な合同式となる。
数46は、S
4ζ
2のインデックスσ(S
4ζ
2)を求める場合の合同式である。
以下、数47は、S3ζのインデックスσ(S
3ζ)を求める場合、数48は、S3ηのインデックスσ(S3η)を求める場合、数49は、S2ζ2のインデックスσ(S2ζ2)を求める場合、数50は、ζθのインデックスσ(ζθ)を求める場合のそれぞれ合同式である。
次に、以上の合同式計算を行なう回路システムを具体的に説明する。
合同式計算にて表現インデックスの和を求めるに際して必要な要素の累乗の表現インデックスへの変換を行なう必要がある。必要な累乗は4乗、3乗、2乗でありインデックスσ、σ(ζ)の表現インデックス成分を先の累乗の変換表に従って、図35に示すインデックスマルチプレクス回路351,352で出力変換接続する。これらのマルチプレクス回路はインデックス間の対応関係に従って信号を配信するだけの分岐回路である。
更に表現インデックスをそれぞれ2進表示にするため、図36に示すような、クロックck3で活性化されるインデックス/バイナリ変換回路361に入れる。即ち、インデックス(17)を5バイナリに変換し、或いはインデックス(15)を4バイナリに変換して、次のアダー入力とする。
表現インデックスの和を求めるアダーを一般的な形で説明する。有限体要素Aのα乗と要素Bのβ乗との積の表現インデックス成分を求める。積のインデックスは、σ(AαBβ)であり、これは積の因子のインデックスであるσ(A)のα倍とσ(B)のβ倍との和の剰余類として求められる。α倍やβ倍は先の変換で得られ、和は2進数の和を求めるアダーで得られる。アダーは表現インデックスごとに必要なので、いまの場合法17と15のそれぞれ用に必要である。
従って、和の法による剰余を求めるための、図37に示す5ビット(17)アダーと図38に示す4ビット(15)アダーを構成する。結果は表現インデックス成分の2進数表示としてそれぞれ5ビットと4ビットの数として得られる。
図39は、5ビット(17)アダー371の構成であり、数AmとBmを2進数で表した各桁の和をフルアダー(Full adder)及びハーフアダー(Half adder)で求めて法17の剰余として和を表すものである。
図示のようにこのアダーは、5ビットの第1段加算回路1001と、その和が17以上であることを検出して、桁上げをする桁上げ補正回路1002と、この桁上げ補正回路と共に、和が17以上の場合に32に対する17の補数15(=32−17)を加える第2段加算回路1003とを有する。
図40は、4ビット(15)アダー381の構成であり、数AmとBmを2進数で表した各桁の和をフルアダー(Full adder)及びハーフアダー(Half adder)で求めて法15の剰余として和を表すものである。
このアダーは、4ビットの第1段加算回路1011と、その和が15以上であることを検出して、桁上げをする桁上げ補正回路1012と、この桁上げ補正回路と共に、和が15以上の場合に16に対する15の補数1(=16−15)を加える第2段加算回路1013とを有する。
図39及び図40に示すアダーは、クロックなどの同期が必要でなく、入力が確定すれば出力も確定するようにして、システムのタイミング制御の負担を減らす構成となっている。
図41と図42は、2進数の足し算を行なう基本的な単位であるフルアダーとハーフアダーの構成をそれぞれ回路記号と共に示している。フルアダーは加えるビットAとBをXORとXNOR回路でロジック演算を行い、桁上げ信号Cinとのロジックを更に取って出力としてA,B,Cinの和Soutと桁上げ信号Coutを出力する。ハーフアダーは、一般的なロジックゲートで構成できる。このユニットを組み合わせて計算に必要なアダー回路を構成する。
上述のアダーで得られた結果は、表現インデックス成分の2進数表示であるのでこれを表現インデックス成分自体にデコードする必要がある。
その様なデコード回路として、図43のプリデコーダと、図44のインデックスラッチを必要とする。まず、図43のプリデコーダで、4ビットアダーか5ビットアダーかの種類によらず、アダー出力の2進数の4ビット目までのビットs0〜s3のプリデコードを行う。2ビットずつ区切って4進数表示に変換し、更に4ビットの8進数表示のゼロに相当する信号を作る。
これらの信号を図44のインデックス(17),(15) &ラッチ回路で表現インデックス成分,index(17)とindex(15),に表に示したようにトランジスタゲートaとbに接続して出力iを得る。この回路はクロックck4にて活性化されクロックck4’で出力が保持される。
次に計算ブロック(SEC)24において、クロックck3とck6でマルチプレクスされて起動される計算部(アダー422〜452の部分)について説明する。
数51は、Sηのインデックスσ(Sη)とSTのインデックスσ(ST)を求める場合の合同式である。Sのインデックスをσとすれば、これとインデックスσ(η)及びσ(T)から、この様な合同式となる。
数52は、S-1ζのインデックスσ(S-1ζ)とa=D/Sのインデックスσ(a)を求める場合で、SのインデックスをσとすればSの−1乗は先の変換表から−σの表現インデックスが得られ、これとσ(ζ)及びσ(D)から、この様な合同式となる。
数53は、ζηのインデックスσ(ζη)とDTのインデックスσ(DT)を求める場合で、ζのインデックスをσ(ζ)とし、Dのインデックスをσ(D)とすればこれとインデックスσ(η)及びσ(T)からこの様な合同式となる。
数54は、ζ-1ηのインデックスσ(ζ-1η)とQ=ΓQ/Γのインデックスσ(Q)を求める場合で、ζのインデックスをσ(ζ)、Γのインデックスをσ(Γ)とすれば、それぞれの−1乗は先の変換表で表現インデックスが得られ、これとσ(η)及びσ(ΓQ)からこの様な合同式となる。
以上の合同式計算において、表現インデックスの和を求めるに際して必要な要素の累乗の表現インデックスへの変換を行なう。必要な累乗は−1乗でこれにクロックでのマルチプレクスが加わる。これらの累乗の表現インデックスへの変換とマルチプレクスの構成を、図45及び図46で説明する。
図45は、クロックck3とck6でマルチプレクスされて使用される、SEC回路ブロック24でのアダー群(アダー422−425対応)と、これに入力される有限体要素の表現インデックス群との関係を示している。マルチプレクスされるアダー入力はa2,b2,d1,d2であり、Sは表現インデックスでσと−σとして固定である。アダー群の出力はAA,BB,CC,DDでありマルチプレクスされたタイミングでそれぞれクロックck4’とck7’の矢印で示された表現インデックスとなる。
図46は、インデックスマルチプレクサ1031とインデックス/バイナリ変換回路1032を示している。インデックスマルチプレクサ(17)(15)1031のブロックはσ、σ(η)、σ(T)、σ(ζ)、σ(D)、σ(Γ)、σ(ΓQ)の表現インデックス成分または−1乗を先の累乗の変換表に従って出力変換接続する。具体的にこのマルチプレクス回路は、インデックス間の対応関係に従って信号を配信するだけの分岐回路である。クロック信号ck6で入力を交代してアダーをマルチプレクスして使用している。
この様にして得られた表現インデックスをそれぞれ2進数表示にするため、クロックck3またはck6で活性化されるインデックス/バイナリ変換回路1032に入力し、インデックス(17)または(15)をそれぞれ5バイナリまたは4バイナリに変換する。こうして変換されたバイナリを、それぞれのタイミングでのアダー回路の入力とする。
アダーで得られた結果は表現インデックス成分の2進数表示であるので、これを表現インデックス成分自体にデコードするには、図43に示すようなプリデコーダを用いる。このプリデコード回路は、2ビットずつ区切って4進数表示に変換し、更に4ビットの8進数表示のゼロに相当する信号を作る。
これらのアダーのビットs0〜s3のプリデコード結果を、図47に示すインデックス(17),(15) &ラッチ回路1035で表現インデックス成分,index(17)とindex(15),に表の様にトランジスタゲートaとbに接続して出力iを得る。この回路はクロックck4及びck7にて活性化されるクロックck4’及びck7’にて結果をラッチする。
回路がマルチプレクスされるため出力のラッチはタイミングに合わせて2系統必要である。後に必要な有限体要素としては、クロックck4’ではS−1ζ、ζ−1ηの表現インデックスがラッチされ、クロックck7’ではaとQの表現インデックスがラッチされる。
次に、計算ブロック(SEC)24において、クロックck3とck7でマルチプレクスされて起動される計算部(アダー421,426,427の部分)について説明する。
数55は、S2θのインデックスσ(S2θ)とS2Qのインデックスσ(S2Q)を求める場合の合同式である。Sのインデックスをσとすれば、Sの2乗については先の変換表で2σの表現インデックスが得られ、これとインデックスσ(θ)及びσ(Q)からこの様な合同式となる。
数56は、Sθのインデックスσ(Sθ)とSDTのインデックスσ(SDT)を求める場合であり、Sのインデックスをσとすれば、これとσ(θ)及びσ(DT)からこの様な合同式となる。
数57は、ζ-1θのインデックスσ(ζ-1θ)とTa=S-1DTのインデックスσ(Ta)を求める場合で、SのインデックスをσとすればSの−1乗は先の変換表で−σの表現インデックスとなり、これとインデックスσ(θ)及びσ(DT)からこの様な合同式となる。
以上の合同式計算において、表現インデックスの和を求めるに際して必要な要素の累乗の表現インデックスへの変換を行なう。必要な累乗は2乗と−1乗でこれにクロックでのマルチプレクスが加わる。これらの累乗の表現インデックスへの変換とマルチプレクスの構成を、図48及び図49で説明する。
図48は、これらのクロックck3とck7でマルチプレクスされて使用されるアダー回路群とこれに入力される有限体要素の表現インデックス群との関係を示している。マルチプレクスされるアダー入力はe1,e2,f2,g1である。アダー回路群の出力はEE,FF,GGでありマルチプレクスされたタイミングでそれぞれck4’とck8’の矢印で示された表現インデックスとなる。
図49は、インデックスマルチプレクサ1041とインデックス/バイナリ変換回路1042を示している。インデックスマルチプレクサ(17)(15)1041のブロックはσ、σ(θ)、σ(Q)、σ(DT)の表現インデックス成分または2乗または−1乗を先の累乗の変換表に従って出力変換接続する。具体的にこのマルチプレクス回路は、インデックス間の対応関係に従って信号を配信するだけの分岐回路である。クロック信号ck7で入力を交代してアダーをマルチプレクスして使用している。
この様にして得られた表現インデックスをそれぞれ2進数表示にするため、クロックck3またはck7で活性化されるインデックス/バイナリ変換回路1042に入力し、インデックス(17)または(15)をそれぞれ5バイナリまたは4バイナリに変換する。こうして変換されたバイナリを、それぞれのタイミングでのアダー回路の入力とする。
アダーで得られた結果は表現インデックス成分の2進数表示であるので、これを表現インデックス成分自体にデコードするために、既に説明したプリデコーダが用いられる。プリデコーダでは、2ビットずつ区切って4進数表示に変換する。更に4ビットの8進数表示のゼロに相当する信号を作る。
これらのアダーのビットs0〜s3のプリデコードされたインデックス信号から各インデックス成分を生成してラッチするのが、図49のインデックス(17),(15) &ラッチ回路1043である。表現インデックス成分,index(17)とindex(15),に表のようにトランジスタゲートaとbに接続して出力iを得る。
この回路はクロックck4及びck8にて活性化されるクロックck4’及びクロックck8’にて結果がラッチされる。回路がマルチプレクスされるため出力のラッチはタイミングに合わせて2系統必要で後に必要な有限体要素としてはck4’ではS-1θの表現インデックスがラッチされる。
計算ブロック(SEC)24において、クロックck4とck7またはck8でマルチプレクスされて起動される計算部(PC回路451,461,462の部分)について、次に説明する。このブロックでは有限体要素の積と和の計算が行なわれるがまず積の計算の部分について説明する。ここではクロックマルチプレクスはない。
数58は、S2ζηのインデックスσ(S2ζη)を求める場合の合同式であり、Sのインデックスをσとすれば、Sの2乗は先の変換表で2σの表現インデックスとなり、ζηのインデックスをσ(ζη)とすれば、この様な合同式となる。
アダーに入力する前のクロックck4で活性化されるインデックス/バイナリ変換回路(index(17),index(15) をそれぞれ5 binary,4 binary に変換する回路)はSの2乗の表現インデックスが既に作られていてck3で活性化される回路と同じ構成であり、クロックが異なるのみであるので、回路構成は改めて示さない。
アダーで得られた結果は表現インデックス成分の2進数表示であるのでこれを表現インデックス成分自体にデコードするのがプリデコーダである。これも既に説明してあるので、ここでは示さない。プリデコーダは、2ビットずつ区切って4進数表示に変換する。更に4ビットの8進数表示のゼロに相当する信号を作る。
これらのアダーのビットs0〜s3のプリデコードされたインデックス信号から各表現インデックス成分を生成してラッチするのが、図51に示すインデックス(17),(15) &ラッチ回路1051で、表現インデックス成分,index(17)とindex(15),に表の様にトランジスタゲートaとbに接続して出力iを得る。この回路はクロックck5にて活性化されクロックck5’で出力が保持される。
図52は、クロックck4とck7でマルチプレクスされて起動される有限体要素の和の計算を行う部分(PC回路451の部分)である。ここでは有限体要素ΓD=S3η+S2ζ2+Sθ+ζηをck4で、b=D2+STをck7で計算する。
有限体要素の和をその表現インデックスから求めるには表現インデックスから要素の多項式表現を得てその係数のパリティチェックを行う必要がある。従って表現インデックスと多項式表現の変換を行なうデコーダ部1061とパリティチェッカ(PC)1062を備える。
デコーダ部1061は、ζなどを求める回路で説明したものと同じであり、入力信号の数が4つになった点のみが異なる。したがってPC回路1062は4入力回路となる。
クロックck4では、入力信号はS3η、S2ζ2、Sθ、ζηの表現インデックスであり、前段でマルチプレクスされているものがあるのでSθ=FF、ζη=CCである。クロックck7では、入力信号はD2、STの表現インデックスとゼロであり、前段でマルチプレクスされているのでST=AAである。
これらの信号ごとに和の多項式表示のm次の係数に相当するノードを持ちこのノードはプリチャージ回路1063がプリチャージしておき、クロックck4またはck7でデコーダ部1061を活性化する。各信号のm次のノードの表現インデックス信号のトランジスタゲートへの接続は、先に説明したζなどの計算で説明したとおりである。
各mについて各要素からの4つのノードのパリティチェックを4ビットPC回路1062で行い、入力信号の和の多項式表示の係数(ΓD)m、(b)mが得られる。なおPC回路の入力は入力信号に対して反転しているが、4入力なのでパリティチェックとしては結果は反転していない場合と変わらない。
図53は、計算ブロック(SEC)部24でクロックck4とck8でマルチプレクスされて起動される有限体要素の和の2つの計算のうちのひとつを行う部分(PC回路461部分)である。ここでは、有限体要素Γ=S3ζ+Sη+ζ2をck4で、c=S2Q+SDT+T2をck8で計算する。
入力信号数は実際は3つである。したがってPC回路1072は4入力の一つをVssに固定して利用する。クロックck4では、入力信号はS3ζ、Sη、ζ2の表現インデックスである。クロックck8では、入力信号はS2Q、SDT、T2の表現インデックスであり、前段でマルチプレックスされているのでS2Q=EE、 SDT=FFである。
ζ及びTの2乗の要素に関しては有限体要素の累乗の表現インデックスを変換するテーブルに従って接続変換をインデックスマルチプレクサ(17)(15)にて行なう。これらの信号ごとに和の多項式表示のm次の係数に相当するノードを持ち、このノードをプリチャージ回路1073によりプリチャージしておき、クロックck4またはck8でデコーダ1071を活性化する。各mについて各要素からの3つのノードのパリティチェックを4ビットPC回路1072で行い入力信号の和の多項式表示の係数(Γ)m、(c)mが得られる。
図54は、クロックck4とck8でマルチプレクスされて起動される有限体要素の和の2つの計算うちのもうひとつの計算部(PC回路462部分)である。ここでは、有限体要素ΓT=S4η+S2θ+ζ3をck4で、B=Q+Ta+a4をck8で計算する。
入力信号の数は3つであり、したがってPC回路1082は4入力回路のひとつをVssに固定して利用する。
クロックck4では、入力信号はS4η、S2θ、ζ3の表現インデックスである。クロックck8では、入力信号はQ、Ta、a4の表現インデックスであり、前段でマルチプレクスされているのでQ=DD、Ta=GG、a=BBである。ζ及びBBのそれぞれ3乗と4乗の要素に関しては有限体要素の累乗の表現インデックスを変換するテーブルに従って接続変換をインデックスマルチプレクサ(17)(15)にて行なう。
これらの信号ごとに和の多項式表示のm次の係数に相当するノードを持ち、このノードをプリチャージ回路1083によりプリチャージしておき、クロックck4またはck8でデコーダ1081を活性化する。各mについて各要素からの3つのノードのパリティチェックを4ビットPC回路1082で行い、入力信号の和の多項式表示の係数(ΓT)m、(B)mが得られる。
4ビットPC回路の出力は7次の多項式として得られ、GF(256)の要素であるpi(x)のいずれかに一致している。そこで多項式表示を表現インデックスに変換して以後の計算で利用する。この変換を行なうデコーダ回路はシンドローム計算の際の回路と同じ構成で、多項式表現の8ビットの係数から16進数表示の信号E[0;15]とF[0;15]を発生するので改めて図に示さない。
図55は、インデックス(17),(15)&ラッチ回路1091で、プリデコードされた信号をもとに剰余類のグループに分けて表現インデックスのmod 17とmod 15の成分を発生しこれらをラッチする。クロックck5とck8とでマルチプレクスされる回路では、信号E[0;15]とF[0;15]を剰余類の各要素を表すデコードのNAND接続とこれら要素の集合を表すこれらのNOR接続で結合し、リセットされた2つのラッチのノードをクロックck5とck8で各々放電して、さらに反転して剰余類のインデックス信号iを出力する。
ラッチは各々クロックck5’とck8’で保持している。剰余類の数だけこの回路は必要である。mod 17、mod 15に対してこれらのインデックスをつくりこれらのペアとして表現インデックスとする。
pi(x)=0の場合はαの指数で表現できず、この場合はE[0]=1かつ、F[0]=1でありインデックスは出力されない。bに関してはゼロ要素であることの判断を使うので、インデックスの状態をモニタしても良いがゼロ成分であるこの判定を簡単に行うために、デコーダ回路として別途、図56に示すゼロ要素判定回路1092を設ける。具体的には信号b=0をゼロ要素に対応する場合にクッロクck8’で発生し保持する。
クロックck5とck9とでマルチプレクスされる回路では、図57に示すインデックス(17),(15)&ラッチ回路1094で、信号E[0;15]とF[0;15]を剰余類の各要素を表すデコードのNAND接続とこれら要素の集合を表すこれらのNOR接続で結合し、リセットされた2つのラッチのノードをクロックck5とck9で各々放電して、さらに反転して剰余類のインデックス信号iを出力している。ラッチは各々クロックck5’とck9’で保持している。剰余類の数だけこの回路は必要である。mod 17、mod 15に対してこれらのインデックスをつくりこれらのペアとして表現インデックスとする。
pi(x)=0の場合はαの指数で表現できず、この場合はE[0]=1かつF[0]=1でありインデックスは出力されない。Γ,cに関してはゼロ要素であることの判断を使うので、ゼロ成分であるこの判定を簡単に行うためのデコード回路として、図58に示すゼロ要素判定回路1095,1096を設ける。
具体的にはゼロ要素に対応する場合に、判定回路1095で信号Γ=0をクッロクck5’で発生し、判定回路1096で信号c=0をクロックck9’で発生して保持する。
次に、計算ブロック(SEC)24において、クロックck5で起動される計算部(アダー441,442及びPC回路471の部分)について説明する。このブロックでは有限体要素の2つの積と1つの和の計算が行なわれるが、まず積の計算の部分について説明する。ここではクロックマルチプレクスはない。
数59は、Γ-1ΓDのインデックスσ(D)を求める場合の合同式で、Γのインデックスをσ(Γ)とすればΓの−1乗は先の変換表で−σ(Γ)の表現インデックスとなり、ΓDのインデックスをσ(ΓD)とすれば、この様な合同式となる。
数60は、Γ-1ΓTのインデックスσ(T)を求める場合であり、Γのインデックスをσ(Γ)とすればΓの−1乗は先の変換表で−σ(Γ)なる表現インデックスが得られ、ΓTのインデックスをσ(ΓT)とすれば、この様な合同式となる。
数59及び60の合同式計算にて表現インデックスの和を求めるに際して、必要な要素の累乗の表現インデックスへの変換を行なう。必要な累乗は−1乗でありインデックスσ(Γ)の表現インデックス成分を先の累乗の変換表に従って、図59に示すインデックスマルチプレクサ1010,1011で出力変換接続する。これらのマルチプレクサはインデックス間の対応関係に従って信号を配信するだけの分岐回路である。
更に表現インデックスをそれぞれ2進数表示するため、インデックス/バイナリ変換回路1012に入力する。これはクロックck5で活性化され、表現インデックスのmod 17,mod 15成分(index(17),index(15))をそれぞれ5binary, 4 binaryに変換して、アダー回路の入力とする。
アダーで得られた結果は表現インデックス成分の2進数表示であるのでこれを表現インデックス成分自体にデコードするためのプリデコーダ、更に表現インデックスに変換するためのインデックス(17),(15)&ラッチ回路が用いられる。この回路はクロックck6にて活性化されクロックck6’で出力が保持される点が異なるのみで、構成自体は先に説明したものと同じであるので説明を省く。
図60は、計算ブロック(SEC)部24においてクロックck5で起動される有限体要素の和の計算部(PC回路471の部分)を示している。ここでは、有限体要素ΓQ=S4ζ2+S2ζη+ζθ+η2を計算する。入力信号の数は4つである。したがってPC回路1022は4入力回路である。
入力信号はS4ζ2、S2ζη、ζθ、η2の表現インデックスである。これらの信号ごとに和の多項式表示のm次の係数に相当するノードを持ちこのノードをプリチャージ回路1023によりプリチャージしておく。そしてクロックck5でデコーダ1021を活性化する。各mについて各要素からの4つのノードのパリティチェックを行うことで、入力信号の和の多項式表示の係数(ΓQ)mが得られる。
4ビットPC回路1022の出力は7次の多項式として得られ、GF(256)の要素であるpi(x)のいずれかに一致している。そこで多項式表示を表現インデックスに変換して以後の計算で利用する。この変換を行なうデコーダ回路はシンドローム計算の際の回路と同じ構成で多項式表現の8ビットの係数から16進表示の信号E[0;15]とF[0;15]を発生するので改めて図に示さない。
プリデコードされたされた信号をもとに、インデックス(17),(15) &ラッチ回路では剰余類のグループに分けて表現インデックスのmod 17とmod 15の成分を発生しこれらをラッチする。この回路も先に示した回路とクロックck6とck6’で保持するようにタイミングクロックが変わるのみなので、改めて説明しない。ΓQに関してはゼロであることを利用しないのでゼロの判定回路は必要がない。
・エラー探索(ES)部25
以上、シンドローム要素計算(SEC)部24での計算を説明したが、この部分での計算結果は次のエラー探索(ES)部25での計算に利用される。ES部ではケースに従って計算過程が分岐するが、その分岐の判断を行う信号を作るのが、図61に示した各種論理ゲート回路である。SEC部24の計算結果から先の場合分けに従って論理ゲートG1〜G10を組んでケース信号,case1〜case8,no error及びnon correctable,を発生する。
計算ブロック(ES部)25内のCUBE部500ではケース1(case1)とケース3(case3)でマルチプレクスされるのでまずケース1の場合の計算について説明する。
cb-3/2のインデックスとしてσ(H)を求める場合は、cのインデックスをσ(c)とし、bのインデックスをσ(b)とすれば、bの−3/2乗は先の変換表で−3/2σ(b)なる表現インデックスとなるので、数61のような合同式となる。
数62は、3次方程式w3+w=Hを解いてひとつのwを得てwb1/2を求める場合である。wにGF(256)の要素を予め代入して求めておいたw3+wのインデックスσ(w3+w)とσ(H)を比較して、wからインデックスσ(w)を求め、wb1/2のインデックスσ(δ)を計算する。
bのインデックスをσ(b)とすればbの1/2乗は先の変換表で(1/2)σ(b)の表現インデックスが得られるので、数62の合同式となる。
CUBE部500のケース3(case3)の場合の計算は、次のようになる。数63は、ζ2(ζ-1η)-3のインデックスとしてσ(H)を求める場合の合同式である。ζのインデックスをσ(ζ)とすれば、ζの2乗は先の変換表で2σ(ζ)の表現インデックスとなり、ζ-1ηのインデックスをσ(ζ-1η)とすれば、ζ-1ηの−3乗は先の変換表で−3(ζ-1η)の表現インデックスが得られるので、この様な合同式となる。
数64は、3次方程式w3+w=Hを解いてひとつのwを得て(w+1)b1/2を求める場合である。wにGF(256)の要素を予め代入して求めておいたw3+wのインデックスσ(w3+w)とσ(H)を比較して、wからインデックスσ(w+1)を求め、(w+1)b1/2のインデックスσ(δ)を計算する。
bのインデックスをσ(b)とすればbの1/2乗は先の変換表で(1/2)σ(b)の表現インデックスが得られるので、数64の合同式となる。
上述のような合同式計算を行うCUBE部500は、具体的に図62のように構成される。case1とcase3で分岐して使われるので入力部には信号のマルチプレクスを行うマルチプレクサ500aがある。ここで信号b,c,ζ,ζ-1ηをケースに応じてマルチプレクスして、CUBE本体500bへ信号x,y,zとして渡す。
CUBE本体500bは、x,y,zを表現インデックスの2進数表示へと変換するインデックス/バイナリ変換回路1031a〜1031cで受け取る。xとyはアダー1032によって、要素の積の表現インデックスの2進数表示となる。これをプリデコーダ1033とバイナリ/インデックス変換回路1034で表現インデックスにして、デコーダ1035で3次方程式の解を求める。
その解を再びインデックス/バイナリ変換回路1036によって2進数表示に直し、これとzをやはり2進数表示に直したものとをアダー1037に入力して積を作る。その結果をプリデコーダ1038とバイナリ/インデックス変換回路1039を通して、δの表現インデックスを得ることができる。
図63は、マルチプレクサ500aの詳細である。ケース1(case1)では、mod 17,mod 15に対応したマルチプレクサ1041,1042でそれぞれ、信号cとbの表現インデックス成分がそれぞれの累乗に対応した接続替えにより、信号x,y,zを生成する。
ケース3(case3)では、同様にmod 17,mod 15に対応したマルチプレクサ1043,1044で信号ζとζ-1ηの表現インデックス成分がそれぞれの累乗に対応した接続替えにより出力信号x,y,zを生成する。
表現インデックスをそれぞれ2進数表示するため、図64に示すインデックス/バイナリ変換回路1051が用いられる。これは、case1のタイミングクロックck7とcase3のタイミングクロックck9とで活性化されて、表現インデックス成分,index(17)とindex(15),をそれぞれ5binaryと4 binaryに変換して、アダー入力をつくる。
アダーで得られた結果は表現インデックス成分の2進数表示であるのでこれを表現インデックス成分自体にデコードするため、プリデコーダが用いられる。これは既に説明したものと同じであり、説明を省く。プリデコードでは、2ビットずつ区切って4進数表示に変換する。更に4ビットの8進数表示のゼロに相当する信号を作る。
これらの信号を図65に示すインデックス(17),(15) &ラッチ回路1052により、表現インデックス成分,index(17)とindex(15),として表のようにトランジスタゲートaとbに接続して出力σ(H)を得る。この回路はcase3ではクロックck8、case1ではクロックck10にて活性化される。ラッチ自体はそれぞれクロックck8’とクロックck10’で活性化後の出力が保持されるように設定される。出力は次の3次方程式の解法の計算段に渡される。
図66は、3次方程式w3+w=Hを解くためのテーブルであり、方程式を満たすインデックス間の関係をα3σ(w)+ασ(w)=ασ(H)として、その対応関係をまとめたものである。インデックスσ(w)とσ(H)の関係に加えて、σ(w+1)も示している。
3次方程式であるから最大3つの要素が解となる。例えばσ(w)=51,58,163の時にσ(H)=17となり、またそれぞれσ(w+1)=107,182,238となる。またHがゼロ元のときはwがσ(w)=0で、w+1=0かw=0でσ(w+1)=0となる。
σ(H)の順番に並べられ、同じσ(H)に対して3つのσ(w)がある場合を区分けして示している。また、Hがゼロ元ではwは1かゼロ元であるからw又はw+1のインデックスは0である。
図67は、図66の解のテーブルを、case1とcase3で実際に使うものだけをまとめて示したものである。これらのケース,case1とcase3,ではHがゼロになることはないこと、3次方程式の解は任意に選んだひとつのみが必要であることから表が簡単になる。ただし3つの解がない場合は最終的には2つのエラー個数以下のエラー探索になる。
図68は、case1に対応する表現インデックス{σ(H)(17),σ(H)(15)}とσ(w) の表現インデックス成分σ(w)(17)の間の関係で前の図を表したものである。表はσ(w)(17)の値ごとにまとめてグループとしている。計算で得られたσ(H)の表現インデックスに対して、この表からデコーダを作ると解のσ(w)の表現インデックス成分が求まる。
図69は、case1に対応する表現インデックス{σ(H)(17),σ(H)(15)}とσ(w) の表現インデックス成分σ(w)(15) の間の関係で前の図を表したものである。表はσ(w)(15)の値ごとにまとめてグループとしている。計算で得られたσ(H) の表現インデックスに対して、この表からデコーダを作ると解のσ(w)の表現インデックス成分が求まる。
図70は、case3に対応する表現インデックス{σ(H)(17),σ(H)(15)}とσ(w+1) の表現インデックス成分σ(w)(17)の間の関係で前の図を表したものである。表はσ(w+1)(17)の値ごとにまとめてグループとしている。計算で得られたσ(H) の表現インデックスに対して、この表からデコーダを作ると解のσ(w)の表現インデックス成分が求まる。
図71は、case3に対応する表現インデックス{σ(H)(17),σ(H)(15)}とσ(w+1) の表現インデックス成分σ(w)(15)の間の関係で前の図を表したものである。表はσ(w+1)(15)の値ごとにまとめてグループとしている。計算で得られたσ(H) の表現インデックスに対して、この表からデコーダを作ると解のσ(w)の表現インデックス成分が求まる。
図72は、以上のテーブルで示された3次方程式の解法を具体的に実現するデコーダ回路と出力結果をアダーに渡すための回路部である。方程式の解法を表すデコーダ回路,σ(w),σ(w+1)(17)(15) decoder,1061はσ(H)の表現インデックス成分を入力とするNAND接続をσ(w)またはσ(w+1)の表現インデックス成分のグループごとに表に従ってNOR接続でまとめる。case1ではタイミングクロックck10、case3ではタイミングクロックck8で回路が働き、それぞれクロックck10’とck8’で出力をラッチする。
積wb1/2や(w+1)b1/2の因子b1/2の表現インデックス成分はインデックスマルチプレクス回路1062で配線替えを行うことで実現できる。
デコーダ出力をアダーに渡すために2進数表示に変換するのがインデックス/バイナリ変換回路1063である。もし入力がゼロ元であればこの回路は全てビットが"1"のままであるのでこれを利用して解となるwが存在しないことを判断する。そのための回路がno index判定回路1064である。
アダーで得られた結果は表現インデックス成分の2進数表示であるのでこれを表現インデックス成分自体にデコードする必要があり、これは既述のプリデコーダによる。プリデコーダは、アダーのビットs0〜s3を2ビットずつ区切って4進数表示に変換する。更に4ビットの8進数表示のゼロに相当する信号を作る。
これらの信号を、図73に示すインデックス&ラッチ回路で、表のようにトランジスタゲートaとbに接続して、表現インデックス成分index(17)とindex(15)の出力δを得る。この回路はcase3ではクロックck9、case1ではクロックck11にて活性化される。ラッチ自体はそれぞれクロックck9’とクロックck11’で活性化後の出力が保持されるように設定される。
計算ブロック(ES部)25内のSQUARE部510での計算について次に説明する。ケースによって計算が異なるのでまず、ケース1(case1)の場合の計算について示す。
数65は、Bδ-2のインデックスとしてσ(J)を求める場合で、Bのインデックスをσ(B)とし、δのインデックスをσ(δ)とすれば、δの−2乗は先の変換表で−2σ(δ)なる表現インデックスが得られるので、この様な合同式となる。
数66は、2次方程式u2+u=Jを解いてふたつのuを得てα0,β0=δuを求める場合である。uにGF(256)の要素を予め代入して求めておいたu2+uのインデックスσ(u2+u)とσ(J)をテーブルによりデコードで比較してuからインデックスσ(u)を求め、δuのインデックスσ(α0)とσ(β0)を、この様な合同式で計算する。
数67は、δS-2のインデックスとしてσ(K)を求める場合で、δのインデックスをσ(δ)とし、Sのインデックスをσとすれば、Sの−2乗は先の変換表で−2σの表現インデックスが得られるので、この様な合同式となる。
数68は、2次方程式v2+v=Kを解いてふたつのvを得てα1,β1=Svを求める場合である。vにGF(256)の要素を予め代入して求めておいたv2+vのインデックスσ(v2+v)とσ(K)を比較してvからインデックスσ(v)を求め、Svのインデックスσ(α1)とσ(β1)をこの様な合同式で計算する。
数69は、α0α1-2のインデックスとしてσ(L)を求める場合である。α0のインデックスをσ(α0)とし、α1のインデックスをσ(α1)とすれば、α1の−2乗は先の変換表で−2σ(α1)なる表現インデックスとなるので、この様な合同式となる。
数70は、2次方程式y2+y=Lを解いてふたつのyを得てふたつのα
1yを求める場合である。yにGF(256)の要素を予め代入して求めておいたy2+yのインデックスσ(y2+y)とσ(L)を比較してyからインデックスσ(y)を求め、α
1yのインデックスσ(α
1y)を、この様な合同式で計算する。
数71は、β0β1-2のインデックスとしてσ(M)を求める場合で、β0のインデックスをσ(β0)とし、β1のインデックスをσ(β1)とすれば、β1の−2乗は先の変換表で−2σ(β1)の表現インデックスが得られるので、この様な合同式となる。
数72は、2次方程式z2+z=Mを解いてふたつのzを得て、ふたつのβ
1zを求める場合である。zにGF(256)の要素を予め代入して求めておいたz2+zのインデックスσ(z2+z)とσ(M)を比較してzからインデックスσ(z)を求め、β
1zのインデックスσ(β
1z)をこの様な合同式で計算する。
数73は、Bδ-2のインデックスとしてσ(J)を求める場合である。Bのインデックスをσ(B)とし、δ=ζ2/3とおくので、インデックスはσ(δ)=(2/3)σ(ζ)であり、δの−2乗は先の変換表で(-4/3)σ(ζ)の表現インデックスとして得られるので、この様な合同式となる。
数74は、2次方程式u2+u=Jを解いてふたつのuを得て、α0,β0=δuを求める場合である。uにGF(256)の要素を予め代入して求めておいたu2+uのインデックスσ(u2+u)とσ(J)を比較してuからインデックスσ(u)を求め、δuのインデックスσ(α0)とσ(β0)をこの様な合同式で計算する。この数74は、先の数66と全く同じである。
数75は、α0α1-2のインデックスとしてσ(L)を求める場合で、α0のインデックスをσ(α0)とし、α1=ζ1/3とおくので、インデックスはσ(α1)=(1/3)σ(ζ)であり、α1の−2乗は先の変換表で(-2/3)σ(ζ)の表現インデックスとして得られるので、この様な合同式となる。
数76は、2次方程式y2+y=Lを解いてふたつのyを得てふたつのα1y=Xを求める場合である。yにGF(256)の要素を予め代入して求めておいたy2+yのインデックスσ(y2+y)とσ(L)を比較してyからインデックスσ(y)を求め、α1y=ζ1/3y=Xのインデックスσ(X)をこの様な合同式で計算する。
数77は、β0β1-2のインデックスとしてσ(M)を求める場合である。β0のインデックスをσ(β0)とし、β1=ζ1/3とおくので、インデックスはσ(β1)=(1/3)σ(ζ)であり、β1の−2乗は先の変換表で(−2/3)σ(ζ)の表現インデックスとして得られるので、この様な合同式となる。
数78は、2次方程式z2+z=Mを解いてふたつのzを得て、ふたつのβ1z=Xを求める場合である。zにGF(256)の要素を予め代入して求めておいたz2+zのインデックスσ(z2+z)とσ(M)を比較してzからインデックスσ(z)を求め、β1z=ζ1/3z=Xのインデックスσ(X)をこの様な合同式で計算する。
次にケース3(case3)の場合の計算について示す。
下記数79及び数80は、それぞれケース1(case1)の数65及び数66と全く同じであるので、説明は省く。
数81は、α0α1-2のインデックスとしてσ(L)を求める場合である。α0のインデックスをσ(α0)とし、α1=(δ+ζ-1η)1/2とおくので、インデックスはσ(α1)=(1/2)σ(δ+ζ-1ηζ)であり、α1の−2乗は先の変換表で−σ(δ+ζ-1ηζ)の表現インデックスとして得られるので、この様な合同式となる。
数82は、2次方程式y2+y=Lを解いてふたつのyを得てふたつのα1y=Xを求める場合である。yにGF(256)の要素を予め代入して求めておいたy2+yのインデックスσ(y2+y)とσ(L)を比較してyからインデックスσ(y)を求め、α1y=(δ+ζ-1η)1/2y=Xのインデックスσ(X)をこの様な合同式で計算する。
数83は、β0β1-2のインデックスσ(M)を求める場合である。β0のインデックスをσ(β0)とし、β1=(δ+ζ-1η)1/2とおくので、インデックスはσ(β1)=(1/2)σ(δ+ζ-1ηζ)であり、β1の−2乗は先の変換表で−σ(δ+ζ-1ηζ)の表現インデックスとして得られるので、この様な合同式となる。
数84は、2次方程式z2+z=Mを解いてふたつのz を得てふたつのβ1z=Xを求める場合である。zにGF(256)の要素を予め代入して求めておいたz2+zのインデックスσ(z2+z)とσ(M)を比較してzからインデックスσ(z)を求め、β1z=(δ+ζ-1η)1/2z=Xのインデックスσ(X)をこの様な合同式で計算する。
次にケース5(case5)の場合の計算について示す。
数85は、α0α1-2のインデックスσ(L)を求める場合である。α0=S-1ζとおくのでインデックスはσ(α0)=σ(S-1ζ)であり、またα1=Sとおくのでインデックスはσ(α1)=σ(S)であり、α1の−2乗は先の変換表で−2σ(S)の表現インデックスとして得られるので、この様な合同式となる。
数86は、2次方程式z2+z=Mを解いてふたつのzを得てふたつのα
1z=Xを求める場合である。zにGF(256)の要素を予め代入して求めておいたz2+zのインデックスσ(z2+z)とσ(M)を比較してzからインデックスσ(z)を求め、α
1z=Sz=Xのインデックスσ(X)をこの様な合同式で計算する。
ケース6(case6)の場合は、δ=b
1/2とおいて、後の計算はケース1(case1)の場合と全く同じである。但し、σ(δ)を(1/2)σ(b)で置き換える。
ケース7(case7)の場合は、δ=c1/3とおいて、後の計算はケース1(case1)の場合と全く同じである。但し、σ(δ)を(1/3)σ(c)で置き換える。
ケース8(case8)の場合の計算は次のようになる。
数87は、α1=S、L=0とおいて2次方程式y2+y=Lを解いてふたつのyすなわちy=0とy=1を得て、ふたつのα1y=Xを求める場合である。yにGF(256)の要素を予め代入して求めておいたy2+yのインデックスσ(y2+y)とσ(L)=no indexを比較して、yからインデックスσ(y)を求め、α1y=Sy=Xのインデックスσ(X)をこの様な合同式で計算する。
数88は、β
1=S,M=0として、z
2+z=Mを解いて、β
1zの計算を行う場合である。α
1がβ
1、LがM、yがzと置き換わっただけで、数87と全く同じである。
以上の合同式を具体的に計算するSQUARE部510の回路構成は、図74のようになっている。ケースに応じて分岐して使われるので、入力部には信号のマルチプレックスを行うマルチプレクス回路510aがあり、その出力が入るSQUARE部本体510bがある。
マルチプレクス回路510aは、信号B,δ,S,α0,α1,β0,β1,ζ−1θ,ζ,"0",Q,δ+ζ−1η,S−1ζ,b,cをケースによってマルチプレクスしてSQUARE部本体510bへ信号j,k,l,m,p,qとして渡す。
SQUARE部本体510bは、j,k,l,m,p,qを表現インデックスの2進数表示へと変換するインデックス/バイナリ変換回路1061a〜1061fで受け取る。j,k,l,mはアダー1062a,1062bによって要素の積の表現インデックスの2進数表示とされ、これがプリデコーダ1063a,1063bとバイナリ/インデックス変換回路1064a,1064bにおいて表現インデックスに変換され、デコーダ1065a,1065bにおいて、σ(J)to σ(u)や σ(K)to σ(v)等の2次方程式の解が求められる。
デコードされた解は再びインデックス/バイナリ変換回路1066a〜1066dによって2進数表示に直される。これらと、p,qをやはり変換回路1061e,1061fにより2進数表示に直したものとがアダー1067a〜1067dで積がとられる。
そして、プリデコーダ1068a〜1068dとバイナリ/インデックス変換回路1069a〜1069dを経て出力のe,f,g,hの表現インデックスとなる。e,f,g,hはケースによって直接かさらに計算過程を経てエラー探索結果となる。
マルチプレクス回路510aを構成する要素の一連のインデックスマルチプレクサ(17),(15)について、次に図75〜図77を参照して説明する。図75に示す切り換え論理信号発生回路1071,1072は、ケースによって入力信号を表現インデックスの累乗の表現インデックスとして接続替えを行うものである。
これらの一連の回路の切り替え信号はそれぞれのケースで必要なタイミングクロック以降は常に活性化される信号となるので、ダッシュ付きのクロック信号から作られる。図では切り替え信号発生論理回路1071,1072の出力として切り替え信号は、ケースの番号をcと数字で示したあとクロック名を付けて表してある。
切り替え信号をクロックトインバータのスイッチ信号として入力の表現インデックス成分を切り替えてj,k,l,m,p,qにつなぐのがインデックスマルチプレクサ1073である。図75に示したケース1(case1)の場合を例として詳細に説明をする。case1ではタイミングクロックck13で出力jはインデックスσ(B)とσ(α0)の表現インデックス成分を切り替えて出力する。
出力kはインデックスσ(δ)とσ(α1)の表現インデックス成分を−2倍する変換を行い切り替えて出力する。出力lはインデックスσ(δ)とσ(β0)の表現インデックス成分を切り替えて出力する。出力mはインデックスσ(S)とσ(β1)の表現インデックス成分を−2倍する変換を行い切り替えて出力する。出力pはインデックスσ(δ)とσ(α1)の表現インデックス成分を切り替えて出力する。出力qはインデックスσ(S)とσ(β1)の表現インデックス成分を切り替えて出力する。図の出力の前の倍数の数字が有限体要素の累乗に対応する数値である。
図76は、ケース2,ケース3,ケース5のインデックスマルチプレクサ1074,1075,1076を示している。それぞれ、タイミングクロックck7,ck11,ck6によって切り替えを行う。出力の前に倍数が二つあるもの、例えばケース2のkではクロックck7まではインデックスσ(ζ)の−1/3倍されたものに対応する表現インデックス成分が出力kとなり、クロックck7以降はインデックスσ(ζ)の−2/3倍されたものに対応する表現インデックス成分が出力kとなる。
図77は、ケース6,ケース7,ケース8のインデックスマルチプレクサ1077,1078,1079を示している。それぞれ、タイミングクロックck11,ck8,ck9によって切り替えを行う。
マルチプレクサ出力j,k,l,m,p,qの表現インデックスをそれぞれ2進数表示するため、図78に示すタイミングクロック生成回路1081と、その出力により制御されるバイナリ/インデックス変換回路1082が設けられる。
タイミングをとるクロックは、図78のクロック生成回路1081に示すように、ケース1(case1)では、クロックck11とck13、ケース2(case2)では、クロックck5とck7、ケース3,6,7(case3,case6,case7)では、ck9とck11、ケース5(case5)ではck6、ケース8(case8)ではck9である。
インデックス/バイナリ変換回路1082では、これらのタイミングのいずれかで活性化されてクロックのパルスの間だけ表現インデックス成分の2進数表示状態を保持する。
このインデックス/バイナリ変換回路1082により得られるバイナリ値がアダー入力となるが、アダー入力の一方がゼロ元であれば積のインデックスを求めるアダー出力は確定しなので、入力段階でこの判断を行う。このための、図79に示すゼロ元判定回路1083が設けられ、2進数表示の状態からゼロ元判断を行い、zero elementを作る。
アダーで得られた結果は表現インデックス成分の2進数表示であるので、これを表現インデックス成分自体にデコードするために、既に述べたプリデコーダを用いる。プリデコーダは、2ビットずつ区切って4進数表示に変換する。更に4ビットの8進数表示のゼロに相当する信号を作る。
これらのアダーのビットs0〜s3のプリデコード信号を、図80に示すインデックス(17),(15)&ラッチで、表現インデックス成分,index(17)とindex(15),について表のようなトランジスタゲートaとbの接続により、出力σ(J),σ(K)またはσ(L),σ(M)を得る。
この回路はケース1(case1)ではクロックck12とck14でマルチプレクスして活性化され、ケース2(case2)ではクロックck6とck8でマルチプレクスして活性化され、ケース3,6,7(case3,6,7)ではクロックck10とck12でマルチプレクスして活性化され、ケース5(case5)ではクロックck7で活性化され、ケース8(case8)ではクロックck10で活性化される。ラッチはクロックのパルスの間のみ有効でマルチプレクスに対応している。出力は次の2次方程式の解法の計算段に渡される。
そこで次に、2次方程式u2+u=J、v2+v=K、y2+y=L、z2+z=Mを解くためのテーブルの説明を行う。
図81は、y2+y=Lを代表例として、方程式を満たすインデックス間の対応関係を、α2σ(y)+ασ(y)=ασ(L)としてまとめたものである。インデックス σ(y)に対する順番とインデックスσ(L)に対する順番とで対応関係を示している。σ(L)との対応関係からわかるように、同一のσ(L)に対して二つのσ(y)が存在する。これは2次方程式であることに対応している。例えばσ(y)=85,170の時にσ(L)=0となり、Lがゼロ元のときはyがゼロ元かσ(y)=0となる。
図82は、2次方程式の解に対して、Lの表現インデックス{σ(L)(17),σ(L)(15)}とyの表現インデックス成分σ(y)(17) の間の関係を示している。またデコードの際のバス構成(bs1,bs2)との関係も併せて示している。表はσ(y)(17)の値ごとにまとめてグループとしている。
計算で得られたLの表現インデックスに対して、この表からデコーダを作るとyの表現インデックス成分が求まる。但し同じLが2つのyに対応するので、デコードの出力を2つに分けてyごとにデータ出力データがバスでぶつからないように、2つのバスbs1,bs2を設けている。
例えばσ(L)=17にはσ(y)=119,153が対応するので、σ(y)=119はbs1、σ(y)=153はbs2になるようにバスを分ける。また、Lの表現インデックスが得られない要素ゼロ元の場合はzero element信号が出る(L=0)ので、その場合にはバスbs1に0、バスbs2にzero(すなわちno index)となる状態を設定して区別する。
実際のデコードで利用されるのは表現インデックスであり、Lの各表現インデックスに対して各バスbs1,bs2に出力されるyの表現インデックス成分σ(y)(17)の値を対応させる。表現インデックス間に対応がない場合は解が存在しない。
図83は、2次方程式の解に対して、Lの表現インデックス{σ(L)(17),σ(L)(15)}とyの表現インデックス成分σ(y)(15)の間の関係を示している。またデコードの際のバス構成との関係も合わせて示している。詳細は、図82で説明した表現インデックス成分σ(y)(17)の場合と同様であるので説明はしない。
図84は、2次方程式の解を求めてアダーに結果を送るデコーダ回路の構成である。代表してy2+y=Lの場合について示す。Lの表現インデックスから対応するyの表現インデックスに変換するのがσ(y)(17)(15) デコーダ1091である。ひとつのLに2つのyが対応しているのでバスbs1,bs2にそれぞれyの表現インデックスを出力する。
Lの表現インデックス成分σ(L)(17),σ(L)(15)をゲート入力とするNAND接続によってこれらの表現インデックスを区別する。表に従って同じyの表現インデックス成分に対応するグループごとにNOR接続で結合する。そして、ケース1(case1)ではクロックck12とck14、ケース2(case2)ではck6とck8、ケース3,6,7(case3,6,7)ではck10とck12、ケース5(case5)ではck7、ケース8(case8)ではck10のそれぞれのタイミングクロックでプリチャージされたノードを活性化することにより、yの表現インデックス成分σ(y)(17)またはσ(y)(15)をバスごとに発生する。
Lのゼロ元に対応してzero element信号でバスbs1にはσ(y)=0に対応する成分であるσ(y)(17)=0,σ(y)(15)=0が出力され、バスbs2ではno indexとなるようにする。
表現インデックスの和をアダーで計算できるように2進数表示にする回路がインデックス/バイナリ変換回路1092である。ここでインデックスは、5バイナリまたは4バイナリに変換される。
さらに2つの解が求まらない場合を示すのがno index信号発生回路1093である。インデックスが出なければインデックス/バイナリ変換回路1092の出力が全ビット"1"となるので、この状態を検出するNAND回路で構成される。バスbs1ではインデックスがあれば必ずバイナリ信号があるので、バスbs1の状態をモニターする。
表現インデックスの和を求めるアダーは、先に説明したように、有限体要素Aのα乗と要素Bのβ乗との積の表現インデックス成分を求める。アダーは表現インデックスごとに必要なので、いまの場合法17と15のそれぞれ用に必要である。
図85に示すような、バスbs1,bs2に併設された5ビット(17)アダー1100,1101と、同様に図86に示すような併設された4ビット(15)アダー1102,1103を構成する。結果は表現インデックス成分の2進数表示としてそれぞれ5ビットと4ビットの数として得られる。
図87は、アダーの出力をデコードしてラッチするタイミングをケースごとに制御するためのクロック発生論理回路である。ここに示したのは今までに作られていないものである。信号の名前の付け方は今まで通りである。例えばcase3とcase6とcase7で使われるクロックck10のタイミングで立ち上がりサイクル中状態を保つクロックであるダッシュ付きクロックck10’から作られるクロックは反転して、/c365ck10’として表現される。c365がケースを表す。
アダーで得られた結果は表現インデックス成分の2進数表示であるので、これを表現インデックス成分自体にデコードする。これは既に説明したプリデコーダによる。プリデコーダは、アダーのビットs0〜s3を2ビットずつ区切って4進数表示に変換する。更に4ビットの8進数表示のゼロに相当する信号を作る。
これらのプリデコードされた信号から、図88に示すインデックス(17),(15) &ラッチ回路により表現インデックス成分を出力する。即ちindex(17)とindex(15)の表にしめすように、トランジスタゲートaとbに接続して、SQUARE部の出力e,f,g,hから出力インデックスσ(α0)、σ(β0)、σ(α1)、σ(β1)を第1のタイミングで、σ(α1y1) 、σ(α1y2)、σ(β1z1)、σ(β1z1)を第2のタイミングで得る。
第1のタイミングは、ケース1(case1)ではクロックck13、ケース2(case2)ではck7、ケース3,6,7(case3,6,7)ではck11、ケース5(case5)ではck6、ケース8(case8)ではck9であり、第2のタイミングはケース1(case1)ではck15、ケース2(case2)ではck9、ケース3,6,7(case3,6,7)ではck13、ケース5(case5)ではck8、ケース8(case8)ではck11である。デコーダはクロックのパルスの間のみ有効でマルチプレクスに対応している。第1、第2のタイミングでそれぞれのラッチで出力はサイクルの間保持される。
SQUARE部25の計算結果からエラー位置を求めるために、有限体要素の和を求めるケースがあるので、これを図89を参照して説明する。X1,X2,X3の計算では先に説明したシンドロームの表現インデックスからその累乗との和であるζ、η、θの多項式表現の係数を求める回路をマルチプレクスして使うことができるのでその例を示す。
入力信号はタイミングクロックck2のパルス期間はSk、Sk (k=3,5,7)それぞれの表現インデックスであり、タイミングクロックcck’でそれぞれα1y1(=SQUARE出力のe)、α1y2(=SQUARE出力のf)、β1z1(=SQUARE出力のg)とaの表現インデックスを切り替える。これらの信号ごとに和の多項式表示のm次の係数に相当するノードを持ち、このノードをプリチャージ回路1110でプリチャージしておき、クロックck2またはcck’でデコーダ1111を活性化する。
各信号のm次のノードの表現インデックス信号のトランジスタゲートへの接続は先に説明した通り表から決まる。各mについて各要素からの2つのノードのパリティチェックを2ビットPC1112で行い、入力信号の和の多項式表示の係数を得る。
タイミング信号cck’はケース1(case1)ではクロックck15’、ケース6,7(case6,7)ではck13’、ケース8(case8)ではck11’から、図に示す論理回路1113により発生される。
X4の計算ではSQUARE部25のケース3(case3)の計算過程で必要とされる量δ+ζ-1ηの計算回路とマルチプレクスして使う場合を、図90に示す。
入力信号はタイミングクロックc3ck9のパルス期間はζ-1η、δのそれぞれの表現インデックスであり、タイミングクロックcck’でそれぞれβ1z2(=SQUARE出力のh)とaの表現インデックスを切り替える。これらの信号ごとに和の多項式表示のm次の係数に相当するノードを持ち、このノードをプリチャージ回路1120によりプリチャージしておき、クロックck2またはcck’でデコーダ1121を活性化する。
各信号のm次のノードの表現インデックス信号のトランジスタゲートへの接続は先に説明した通り表から決まる。各mについて各要素からの2つのノードのパリティチェックを2ビットPC1123で行い、入力信号の和の多項式表示の係数を得る。
タイミング信号c3ck9はケース3(case3)ではクロックck9から、図に示す論理回路1124により発生される。
有限体要素の和として得られたζ,η,θ及びX1,X2,X3,X4などは7次の多項式として得られ、GF(256)の要素であるpi(x)のいずれかに一致している。そこで多項式をm1(x)の根αのインデックスをmod 17,mod 15によって表した表現インデックスに変換して以後の計算で利用する。この変換を行なうプリデコーダは、シンドロームの表現インデックスをデコードする場合のそれと同じであるので改めて示さない。プリデコーダは、8ビットのpi(x)の係数の表す256のバイナリ信号状態を信号Ai,Bi,Ci,Di(i=0〜3)の組合せとして表し、更にこれから16個のE[i]とF[i]であるE[0;15]とF[0;15]への変換である。
プリデコードされた信号を元に、図91のインデックス(17),(15) &ラッチ回路1131は剰余類のグループに分けて表現インデックス成分を発生しこれらをラッチする。即ち、信号E[0;15]とF[0;15]を剰余類の各要素を表すデコードのNAND接続とこれら要素の集合を表すこれらのNOR接続で結合し、プリチャージされたノードを第1のタイミングではクロックck3とck3’で放電してラッチして、剰余類のインデックス信号 σ(ζ)、σ(η)、σ(θ)を出力する。第2のタイミングではクロックcck+1’で放電してラッチして剰余類のインデックス信号σ(X1)、σ(X2)、σ(X3)を出力する。
pi(x)=0の場合はαの指数で表現できないので、インデックスが求まらない。この場合はE[0]=1かつF[0]=1であり、インデックスは出力されない。ζ、η、θに関してはゼロ要素であることの判断を使うので、ゼロ成分であるこの判定を簡単に行うために、ゼロ要素判定回路1132なるデコーダを別途設けている。具体的には信号ζ=0、η=0、θ=0をそれぞれゼロ要素に対応する場合に発生し保持する。
第2のタイミングはケース1(case1)ではクロックck16’から、ケース6,7(case6,7)ではck14’から、ケース8(case8)ではck12’から、図91に示す論理回路1133で作られて、クロックcck+1’となる。パリティチェックのデコーダを活性化するクロックより1クロックあとのタイミングにして計算結果をラッチするようにしている。
X4に関しては、図92のインデックス(17),(15) &ラッチ回路1141が用いられる。即ち、信号E[0;15]とF[0;15]を剰余類の各要素を表すデコードのNAND接続とこれら要素の集合を表すNOR接続で結合し、プリチャージされたノードを第1のタイミングではクロックck10で放電してラッチして剰余類のインデックス信号 σ(δ+ζ-1η)を出力する。第2のタイミングではクロックcck+1’で放電してラッチして剰余類のインデックス信号σ(X4)を出力する。
第1のタイミングは、ケース3(case3)でクロックck10から、図の論理回路1142で作られるc3ck10となる。σ(δ+ζ-1η)の保持は計算で必要となるクロックパルスの期間である。
図93は、計算過程で得られた結果をエラー情報X1,X2,X3,X4としてエラー位置情報に変換して保持するデコード回路即ち、エラー位置デコーダ(ELD)1151を示している。SQUARE部からの最終計算結果としての表現インデックスe,f,g,hか、これらにさらに和の演算をした結果であるσ(X1), σ(X2), σ(X3), σ(X4)かまたはシンドロームSのインデックスσをケースによって選択して、これらの表現インデックスをデコードしてエラー位置となるXのインデックスσ(X)をラッチする。
ELD1151の入力信号の切り替えを行うのが、マルチプレクス回路1152であり、その出力はX1(17), X2(17), X3(17), X4(17), X1(15), X2(15), X3(15), X4(15)なる表現インデックス成分である。ELD1151は、表現インデックスをインデックス自体にデコードする4つのNAND接続をNOR接続で結合し、クロックCLKでプリチャージされたノードを放電して、さらに反転して信号としラッチする。
ELD1151を起動するクロックCLKは図に示した論理回路1153によって発生される。即ち、ケース1(case1)ではクロックck16’、ケース2(case2)ではck9’、ケース3(case3)ではck13’、ケース4(case4)ではck6’、ケース5(case5)ではck8’、ケース6,7(case6,7)ではck14’、ケース8(case8)ではck12’からそれぞれ作られる。
図94は、ELD用のマルチプレクス回路1152の詳細を示している。ケースごとに入力と出力の対応を切り換えるが、ELDの信号X1にはクロックc1678ckX’の場合に表現インデックスσ(X1)、c235ckefgh’の場合に表現インデックスe、c4ck6’の場合に表現インデックスσが接続される。信号X2にはクロックc1678ckX’の場合に表現インデックスσ(X2)、c235ckefgh’の場合にインデックスf、c4ck6’の場合にVssが接続される。
信号X3にはクロックc1678ckX’の場合に表現インデックスσ(X3)、c235ckefgh’の場合に表現インデックスg、c4ck6’の場合にVssが接続される。信号X4にはクロックc1678ckX’の場合に表現インデックスσ(X4)、c235ckefgh’の場合に表現インデックスh、c4ck6’の場合にVssが接続される。
接続替えを行うクロック発生は、図の論理回路1154による。即ち、c1678ckX’はケース1(case1)でck16’、ケース6,7(case6,7)でck14’、ケース8(case8)でck12’から作られ、c235cdefgh’はケース2(case2)でck9’、ケース3(case3)でck13’、ケース5(case5)でck8’から作られ、c4ck6’はケース4(case4)でck6’から作られる。
・エラー訂正(EC)部26
図95は、エラービット位置でデータ訂正を行なうエラー訂正部26の回路構成を示す。エラー訂正が必要でないかできない場合を除いてエラー位置を示すインデックスσ(X)と一致したビット位置のIO nではメモリからから読み出したビットデータDi(n)を2ビットPCで反転して、エラー訂正されたデータを得る。エラー訂正が必要でないかできない場合は、訂正不可信号"non correctable"を出力する。
[4EC−EW−BCHシステムのテスト法]
大容量メモリの容量はECCシステムが扱うデータビット数hの4乗以上の量のデータが保存されるのが一般的である。例えばh=255に対して16Gビットなどは普通である。そこで、ECCシステム自体がエラーを生じないこと、データにエラーが無いこと及び訂正不可能な数のエラーがあることをメモリ外部に知らせることが出来れば、メモリセルの良・不良のテストをECCシステムのテストで代用することが出来るので、メモリのテストコストの削減になる。
その様なECCシステムのテスト法を、図96を用いて説明する。上の実施の形態で説明したように、入力f(x)をエンコードしたh次の多項式f(x)x4n+r(x)を、メモリコアに書き込むことなく、これに加算部28でテスト用エラーデータe(x)を加えて、ECCシステムが正しい訂正を行なうことを調べる。即ち外部からのデータf(x)のエンコードデータに、外部からの(または内部で自動発生される)テストデータe(x)を加えてECCシステムを通して、データf(x)を復元しこれを入力データと比較する。
テストデータe(x)のデータパタンの数(従ってテスト回数)は4EC−EW−BCHシステムの場合、h4であり、h=255では4G回程度である。これはメモリの全ビットを数ビットの並列テストでテストする程度以下であり、メモリへの読み書き動作を経ない分だけ高速サイクルでのテストが出来る。従ってテスト時間の大幅な削減となる。
ECCシステムが完全であれば、メモリのメモリセルのテストを行わなくても、訂正可能なエラーは訂正し、訂正不能な場合はそれを知らせてくれるのでそのエラービット分は使用しないなどの対応がとれる。外部への訂正不可能なエラー数が生じたことを示すnon correctable 信号を出力することがこの対応のためには必須である。
図97は更に、上述したnon correctable信号を出力できるオンチップのECC回路を備えたファイルメモリ1200について、テストフリーとする場合のシステム構成例を示す。即ち、通常行われるメモリのウェハテストを行うことなく、ECCシステムの機能を利用して、不良アドレスについて冗長セルアレイによる置換制御を可能とした例である。
ファイルメモリ1200は、そのメモリセルアレイのアドレス空間が、1サイクルのECCで使うデータ毎のブロックに分割されているものとする。この分割は、アドレス空間の論理的分割であるが、図では物理的に分割されたように示している。勿論物理ブロックと論理ブロックが一致してもよい。
メモリセルアレイには、いくつかの冗長ブロックを有する冗長アレイ領域1201が用意されている。これは、テスト時や使用中に訂正不可能なエラーが発生したブロックを置き換えるための代替ブロック領域である。オンチップのECC回路1202は、ブロック毎にエラー検出訂正処理を行い、エラー訂正が不可能であれば、non correctable 信号を発生する。
システムには、ホストデバイスのCPU1400から送られるアドレスをキーとして、ファイルメモリ1200のアドレスを発生するための内容参照メモリ(CAM;Contents Addressable Memory)1301がある。このCAM1301は、キーに対応するアドレスデータがないときには、入力されたアドレスをそのままファイルメモリ1200のアドレスとして出力するものとする。
また、テスト時や使用中にnon correctable 信号が発生したときに、これを受けてファイルメモリ1200の冗長アレイ領域1201の冗長ブロックアドレスを順次発生するためのアドレス発生器1302がある。このアドレス発生回路1302から順次発生される冗長ブロックアドレスのうち、後に説明するように不良ブロックアドレスに置き換えられるべきものが、CAM1301に書き込まれる。以後、CAM1301は、CPU1400から送られるアドレスが不良ブロックアドレスである場合に、これに代わって記録された冗長ブロックアドレスを発生する。即ち、CAM1301とアドレス発生器1302とがメモリコントローラ1300を構成する。
具体的にこのシステムの動作を説明する。初期テスト時、CPU1400からファイルメモリ1200の全てのブロックにテストデータを書き込む。このテストデータは、オール“0”やオール“1”でもよいが、使用されるメモリセルに特有のエラーを生じやすいデータパターンを用いることが好ましい。
この後、CPU1400から順次読み出しアドレスを発生してファイルメモリ1200をアクセスする。アドレスは、メモリコントローラ1300内のCAM1301に入力されるが、最初はそのまま素通りしてファイルメモリ1200に送られ、アクセスが行われる。ファイルメモリ1200からnon correctable信号が発生されず、従ってエラーがあってもエラー訂正が可能である場合は、CAM1301への書き込みは行われない。
CPUからの送られるアドレスが初期不良ブロックアドレスに一致し、ECC回路1202がnon correctable信号を発生すると、アドレス発生器1302が起動されて、冗長アレイ領域1201の冗長ブロックアドレスを発生し、これをファイルメモリ1200に送ると同時に、CAM1301に送る。このとき、CPU1400は、non correctable信号を受けて、アドレス送信を一時停止する。
CAM1301は、CPUから送られたアドレスをキーとして、アドレス発生器1302から送られた冗長ブロックアドレスを記憶する。そしてこの冗長ブロックアドレスでファイルメモリアクセスを行い、再びnon correctable信号が発生された場合は、アドレス発生器1302は次の冗長ブロックアドレスを発生し、これをCAM1301に記憶する。
この動作を、置き換え可能な冗長ブロックアドレスが得られるまで繰り返す。これにより、CAM1301には結局、初期不良ブロックアドレスとこれを置換すべき冗長ブロックアドレスとの対応が記憶される。
例えば図97に示したように、ファイルメモリ1200に初期不良ブロックBBLK0−3があるものとして、これらに代わってアクセスされるべき冗長ブロックRBLK0−3のアドレスが、CAM1301に記憶される。以後CPUからのアクセスはCAM1301を介して行われ、初期不良ブロックへのアクセスは回避されて、冗長ブロックがアクセスされることになる。
CAM1301がDRAM等の揮発性メモリである場合には、電源投入時に初期テストを毎回行うことが必要である。CAM1301のアドレス記憶部にファイルメモリ1200と同様の不揮発性メモリを用いれば、電源投入毎の初期テストは不要になる。この場合、初期テストの結果求められたキーアドレスと冗長ブロックアドレスの対応は、例えば初期テスト終了後に一括して不揮発性メモリに書き込めばよい。
メモリ使用中に不良ブロックが発生して、non correctable信号が発生した場合に、同様の処理を行うことも可能である。即ち、アドレス発生器1302が起動されて冗長ブロックアドレスを発生し、これを置き換えアドレスとしてCAM1301に書き込む。新たに発生した不良ブロックのデータを外部に読み出すか否かは、CPU1400のプログラムが判断する。次回からは、この不良ブロックに対するアクセスは、CAM1301によって、冗長ブロックアドレスに変更される。
なおこの不良救済方式は、通常アクセスされるメモリセルアレイと別に冗長セルアレイを設ける場合に限られず、格別の冗長セルアレイを設けない場合にも有効である。即ちこの場合も、不良ブロックアドレスとこれに代わってアクセスされるべき代替ブロックアドレスとの対応をCAMに記憶して、同様に不良ブロックを避けたアクセスを行うことが可能になる。但し、不良ブロックアドレスに代わって使用すべく記憶された代替ブロックアドレスは、その後通常のアクセスには用いられなくなる。
NAND型フラッシュメモリでは、図98に示したように、インタフェース1501,1502、バッフアDRAM1503、ハードウェアシーケンサ1505、MPU1504等を備えたメモリコントローラ1500を用い、例えばフラッシュメモリ1200とメモリコントローラ1500とを一体にパッケージするメモリシステムが知られている。図97に示したメモリコントローラ1300は、図98のようなメモリシステムのコントローラ1500の付加機能であってもよい。更に、ECC回路がメモリコントローラ1500側に搭載される場合も有効である。
この様にECC回路をフルにテストしておけば、ファイルメモリ自体のテストを行うことなく、不良ブロックを排除して冗長ブロックを使うというアドレス置換制御が可能になる。従って信頼性の高いメモリシステムが構築可能である。
なお図96及び図97で説明したテスト法は、4ビットエラーまで訂正可能なECCシステムの場合に限らず、有効である。即ちエラー探索方程式を、解の候補のインデックスとシンドロームのインデックスとの間の合同式計算によりエラー位置対応のインデックスを求める際に、2n−1を法とする合同式を、2n−1の互いに素である2因数を法とする二つの合同式に分けて並列計算する、という手法を適用して、2ビット以上のエラー訂正を可能とするオンチップECCシステムを構成した場合に有効である。
以上のようにこの実施の形態によれば、エラー探索をテーブルによるデコーダを用いて高速に行なうことが出来る最大のエラー数であると思われる4ビットまでのエラー訂正を数十nsの演算時間で完了することが出来るため、大容量ファイルメモリなどの性能を落とすことなく信頼性の向上が実現できる。
また、ECCシステムの動作テストを行っておけばメモリ本体のテストは行なわずにファイルメモリのエラー訂正可能領域のみを利用できるので、テストのコストを削減して利用可能な大容量メモリを安価に提供できる。
[4EC−EW−BCHシステムのまとめ]
(a)メモリに搭載してメモリとのデータ読み書きの経路上で演算を実時間で行なう4ビットエラー訂正可能な高速ECCシステムを実現した。システムのポイントはエラー探索多項式を低次数の多項式の因子の積に係数パラメータ導入して分解して、まずこの係数パラメータをシンドロームから求め、次に因子の多項式を解く。いずれの段階でも変数変換によって方程式を未知数部分とシンドローム部分に分離して、予め計算した解の候補とシンドローム計算の結果をマッチングし高速な演算処理で解を得る。マッチングの演算は有限体要素の表現インデックス間の関係を利用して計算を高速化している。また、ECCシステムのテスト方法としてメモリへの読み書きをバイパスして入力データのコードにエラーパタンを加えて訂正を確認することによって、メモリ自体のテストをせずにメモリを利用できる。
(b)4ビットエラー訂正可能な上記ECCシステムにおいて、エラー位置検索方程式を二つの因子方程式の積に分解して、分解の係数パラメータをシンドロームから計算し、さらに因子方程式を解いてエラー位置を探索する。
(c)有限体GF(2n)の要素を利用してひとまとまりごとのデータに対して4ビットまでのエラー訂正が可能なコードシステムをメモリに搭載して、5ビット以上のエラーが発生している場合には訂正不可能であることをメモリ外部に知らせる。
(d)有限体GF(2n)の要素を利用してひとまとまりごとのデータに対して一定数ビットまでのエラー訂正が可能なコードシステムをメモリに搭載して、一定数より多くのエラーが発生している場合には訂正不可能であることをメモリ外部に知らせるとともに、システムに正常に働くことをテストするために、メモリへ書き込むコードデータにメモリへの書き込みをバイパスして外部からエラーパタンを付加してエラー訂正を確認するパスを備える。
(e)エラー訂正不可能という信号が出たひとまとまりのメモリデータ領域は、不良領域として使用しないようにすることができ、これによりメモリのデータの信頼性を高いものとすることができる。
21…エンコード部、22…メモリコア、23…シンドローム計算部、24…シンドローム要素計算(SEC)部、25…エラー探索(ES)部、26…エラー訂正(EC)部、27…クロック発生回路、411−416,421−427,431,441,442…401−403,451,461,462,471…パリティチェッカ(PC)、500…CUBE部、510…SQUARE部、520−523…パリティチェッカ、530,531…レジスタ群。