本発明者は、従来のような有限体要素の逐次代入によりエラー位置探索方程式を満たす要素を求める方法に代わって、2ビットエラー訂正を高速演算で実現する手法を先に提案している。
即ち、GF(256)のBCHコードを利用して高速にエラー位置検索を行なうために、予め解の候補のテーブルを作成しておき、これとメモリの読み出しデータから計算されたシンドロームのインデックスを比較して解を求める。具体的には、読み出しデータから計算されたシンドロームを含むエラー位置検索方程式を解くことになるが、そのエラー位置検索方程式を、変数変換によって未知数のみの部分(以下、変数部分という)とシンドロームにより計算される部分(以下、シンドローム部分という)に分けてそれらのインデックス関係だけでエラー位置を求められるようにする。即ち、シンドローム部分と変数部分のインデックスとを比較して、一致する変数がエラー位置対応インデックスであることから、エラー位置を求める。
更に、エラー位置検索に必要な計算は、インデックス間の合同式からインデックスを確定することである。その際、255を法とする合同式を、17と15を法とする二つの合同式に分離し、これらの合同式を満たす数は元の合同式を満たすという性質を利用する。これにより、回路規模と演算時間を縮小したエラー位置検索ができる。
この発明は、上述の2ビットエラー検出訂正システム(2ECシステム)の手法を拡張して、オンチップメモリ用の高速3ビットエラー検出訂正システム(3ECシステム)を提案するものである。
3EC−BCHでは未知数とシンドロームが混在した3次の多項式が解を求める方程式となるが、これは2パラメータを導入した線形変換で変数部分とシンドローム部分の分離が行なえること、更に解とテーブルの比較をBCHコードの有限体の要素を“表現インデックス”というindexを導入することで短い計算の並列演算として高速に行なうことが出来ることが、本発明者の検討により明らかになった。
その様な、BCHコードを用いて3ビットまでのエラー訂正(Error Correction)と4ビット以上のエラーに対する警告(Error Warning)とを行うことができる“3EC−EW”システムを、フラッシュメモリにオンチップで搭載することによって、メモリ外部からはメモリの性能を落とさずにデータ保持の信頼性を向上させたフラッシュメモリを得ることができる。
[3EC−EWシステムの概要]
GF(2n)のBCHコードを利用して3ビットエラー訂正を行なうために、エラービット位置を示す未知数変数とエラーを含むデータから計算されたシンドロームを含むエラー位置検索方程式は、2つ以上のパラメータを導入して変数変換を行い、変数部分とシンドローム部分とに変換する。
3EC−EWシステムは具体的には、2ビット以下のエラー訂正可能な2ECシステムと3ビットエラー訂正可能な3ECシステムとを含む。2ECシステムのエラー位置検索方程式は1パラメータを含む変数変換によって、3ECシステムのエラー位置検索方程式は2パラメータを含む変数変換によって、それぞれ変数部分とシンドローム部分に分離されて、エラー数の状況に応じてエラー位置検索方程式の解の結果を切り替えるようにする。
有限体GF(2n)の要素を利用するECCシステムにおいて、各要素を基本既約多項式の根の指数(インデックス)によって指定するとき、このインデックスを互いに素である2n−1の2因数に分解し、各々の数をインデックスにかけた数の互いに因数を法とする剰余系の組を“表現インデックス”として用い、要素間の演算をこの表現インデックス間の対応関係として行なう。
上記要素間の演算は、要素の積に対しては各表現インデックスの要素間の和を対応する法の剰余系として表したものが対応し、要素の和は表現インデックスから基本既約多項式の剰余多項式の係数を求め係数間のパリティチェックを用いて行なう。
(データのエンコーディング)
ガロア体GF(28)上の3EC−EWについてまず、データのエンコーディングを説明する。GF(2)上の基本既約多項式をm1(x)としてこの根をαとする。有限体としてGF(28)を考えるので、これは数1に示すような8次の多項式となる。3ビットエラー訂正のためには、数1に示すように、更に二つのα3及びα5を根とする既約多項式m3(x)及びm5(x)を選択する。
これらの3つの既約多項式をもとに、3ビットエラー訂正可能なECCが構成される。書き込むべきデータに検査ビット(チェックビット)を付加してエンコードするには、コード生成多項式として、数2のようなm1(x),m3(x)及びm5(x)の積である24次のコード生成多項式g(x)を作る。
3ビットエラー訂正が可能な情報ビットとして利用できる最大ビット数は、28−1=255からチェックビット数24を引いた231ビットである。これらを、ビット位置24から254の係数をa24〜a254として、数3のような情報多項式f(x)を作る。
データビットのうちの情報ビットを係数a24〜a254に割り当てて24次から始まる情報多項式f(x)をコード生成多項式g(x)で割って剰余を求め、数4の剰余多項式r(x)を求める。
この剰余多項式r(x)の係数b23〜b0の24ビットを“チェックビット”とし、これを情報多項式f(x)のビット位置24からの係数a254〜a24からなる“情報ビット”と共にメモリに記憶させる。即ちメモリに記憶させるデータビットは、数5のようになる。
(データのデコーディング)
254次の多項式の係数を情報ビットとしてメモリに記憶させてエラーが生じたとすれば、そのエラーも254次の多項式で表される。このエラー多項式をe(x)とすれば、メモリから読み出したデータは、数6のような構造の多項式ν(x)となる。
この数6のエラー多項式e(x)の係数が1の項がエラーとなる。
読み出しデータのデコードのための第1段階として、ν(x)を原始多項式m1(x),m3(x),m5(x)で割って各々の剰余S1(x),S3(x),S5(x)を求める。
数7に示すように、これはe(x)をm1(x),m3(x),m5(x)で割った剰余ともなっている。
これら数7の剰余S1(x),S3(x),S5(x)をシンドローム(syndrome)多項式という。
3ビットエラーがi,j,k次にあれば、エラー多項式は、e(x)=xi+xj+xkとなるので、これらの指数i,j,kを求めれば、エラー位置が確定する。そこで、m1(x)=0の根αの指数(インデックス)に関するGF(256)内の計算で、i,j及びkを求める。
xn≡pn(x)mod m1(x)なる剰余多項式pn(x)を導入すると、GF(256)内では、αn=pn(α)である。下記数8に示すように、エラーの次数に対応する根αi,αj,αkをそれぞれ、X1,X2,X3とし、シンドロームS1(x),S3(x),S5(x)に対してS1(α),S3(α3),S5(α5)に対応する指数をそれぞれ、σ1,σ3,σ5として、S1(α),S3(α3),S5(α5)をそれぞれ、S1,S3,S5とする。ちなみに、剰余多項式による表現では、S1,S3,S5は、S1(x),S3(x3),S5(x5)と同等である。
m3(α3)=m5(α5)=0であるから、数8から次の数9の関係が得られる。
第二段階として、未知数X1,X2,X3を根とするエラー位置探索多項式ΛR(x)=0を考えると、ΛR(x)は数10のように、X1,X2,X3の基本対称式S1,D,Tを用いて表すことができる。
エラー位置検索は、ΛR(x)=0を満たす根αnのインデックスnを探すことである。そこでまず、ΛR(x)=0の係数をシンドロームS1,S3,S5で表現する。S1,D,Tは基本対称式であり、S3,S5は対称式なので基本対称式で表すことができ、逆にD,TをS1,S3,S5で表現することができる。即ち、S1 2D+S1T=S1 3+S3,S3D+S1 2T=S1 5+S5の関係から、A=S3/S1 3,B=S5/S1 3とおいて、数11が求まる。
第三段階として、ΛR(x)のGF(256)での根αnを見つければX1,X2,X3=αnから、i,j,kがαnのnとして求まる。即ち、ΛR(x)=0をn=0〜254で探索してヒットしたnがエラービットということになる。
なお、ΛR(x)=0の根が常に求まるわけではなく、この多項式が3次でないこともあり、それぞれの場合にエラー数が異なる。詳細は後に説明するがエラー数とその場合の条件をまとめると、数12のようになる。
なお、1エラー又は2エラーの場合は、2ECシステムへ分岐して解を探索することになる。
3つのエラーがある場合に、原理的にはxに逐次有限体の要素を代入して解を求めることができるが、これは膨大な計算量となる。そこでこの実施の形態では、解の候補を予めテーブルとして求めておき、ΛR(x)を変形して、未知数のみにより決まる部分(以下、変数部分という)とシンドロームのみにより計算される部分(以下、シンドローム部分という)を完全に分離して解の候補のインデックスとシンドロームのインデックスの関係だけで解のインデックスnを求めることが出来るようにする。
具体的に説明する。3ECの場合は、3次のエラー位置探索方程式ΛR(x)=x3+S1x2+Dx+T=0の根αnのインデックスnを計算する。このときは、x=az+bなる変数変換を行い、エラー位置検索方程式を下記数13のように、変数部分とシンドローム部分に分離する。
変換の仕方はこの他にも項z2が残るような変換法もあるが、ここでは変換が最も簡単になる方法を選んでいる。変数変換された方程式を解く際にシンドローム計算から必要となる基本的なインデックスは、S1のσ1、S3のσ3、S5のσ5、AのσA、BのσB、TのσT、aのσaである。
変数部分zにαjを代入して、下記数14のインデックスzjを求めて、テーブルとする。
方程式のシンドローム部分T/a3のインデックスは、σT−3σaであるから、下記数15を満たすjが、エラー位置対応変数zでのインデックスである。
実際のエラー位置は、下記数16のビット位置nとして求まる。
2EC又は1ECの場合は、エラー位置検索方程式(即ち解探索多項式)は、ΛR(x)=(x−X1)(x−X2)=x2+S1x+X1X2=0となる2次式の根のαnのインデックスnを探索する。ここで、X1X2=S1 2+S3/S1である。
この場合も、ΛR(x)を変形して変数部分とシンドローム部分に分離してインデックス関係だけでnを求めることが出来るようにする。即ち、x=S1yなる変換により、次の数17を得る。
数17の変数部分のyにαiを代入した結果のα2i+αi+1のインデックスをyiとすると、下記数18のiがエラー位置のyのインデックスとなる。
シンドロームから決まる右辺のインデックスに対応するyiを満たすiが存在しない場合は、解が求まらないので3ビット以上のエラーの場合である。実際のエラー位置は、下記数19のビット位置nとして求まる。
3EC,2ECの場合を通してエラー位置検索で必要な計算は、インデックス 間の合同式からインデックスを確定することである。システム構成上必要なこれらの計算法を次に示す。
合同式はいずれも、255を法とするGF(256)である。この合同式計算はまともに行なうと、255×255の規模の比較を行うことに相当し、回路規模が大きくなる。そこでこの実施の形態では、この合同式計算を並列化する。すなわち、255を互いに素である二つの因子に分けてこれらを法とする二つの合同式に分離して、これらの合同式を同時に満たす数はもともとの合同式も満たすことを利用する。
以下に示すように、いずれの合同式を解く場合も255=17×15によって17と15をそれぞれ法とする合同式に分けてこれを同時に解く。
1:A=S3/S1 3のインデックスσAの計算は、σA≡σ3−3σ1(mod255)を求めるもので、次の数20の二つの合同式に分ける。
2:B=S5/S1 3のインデックスσBの計算は、σB≡σ5−3σ1(mod255)を求めるもので、次の数21の二つの合同式に分ける。
3:E=S5/S1 2のインデックスσEの計算は、σE≡σ5−2σ1(mod255)を求めるもので、次の数22の二つの合同式に分ける。
4:F=S3 2/S1 3のインデックスσFの計算は、σF≡2σ3−3σ1(mod255)を求めるもので、次の数23の二つの合同式に分ける。
5:yiからyのインデックスiを選択して、ασ1y=αnのインデックスnを求めるには、yi=σAからiをテーブルによるデコードで選択して、n≡σ1+i(mod255)を求める。この合同式は次の数24の二つに分ける。
6:C=(S1 2+B)/(A+1)のインデックスσCの計算は、σC≡σ(S1 2+B)−σ(A+1)(mod255)を求めるもので、次の数25の二つの合同式に分ける。
7:T=t/(A+1)のインデックスσTの計算は、σT≡σt−σ(A+1)(mod255)を求めるもので、次の数26の二つの合同式に分ける。
8:αzj=ασT−3σaからのインデックスzjの計算は、zj≡σT−3σa(mod255)を求めるもので、次の数27の二つの合同式に分ける。
9:zjからzのインデックスjを選択して、ασaz=ασXのインデックスσXを求めるには、zjからjをテーブルによるデコードで選択し、σX≡σa+j(mod255)を求める。この合同式は次の数28の二つの合同式に分ける。
以上の数20から数23で計算しようとする合同式は、シンドロームS1,S3,S5のインデックスの倍数間の差のインデックスを求めるものであるが、15倍や17倍のインデックスとその他の倍数のインデックス間の17や15を法としたインデックス間の対応関係は、後に示すように予め求めておけるので、この関係を使ってインデックスの倍数間の和を、加算回路(アダー)により求める。
数20から数23の合同式では、A,B,E,Fの根αのインデックスについて、mod17とmod15による剰余類インデックスのペアにより定義される“表現インデックス”を求めている。
数24では、シンドロームから得られたインデックスσAから、インデックスiとyiの対応関係を用いて、yi=σAとなるiを求めるが、計算はmod17とmod15による剰余類インデックスによって行なわれ、2値による表現インデックスとしてインデックスnが得られる。このときσAがiが存在しないyiに対応することもある。
数25は、シンドローム間の計算から得られた(S1 2+B) のインデックスと(A+1)のインデックスからCのインデックスσCを表現インデックスとして求めている。
数26は、シンドローム間の計算から得られたtのインデックスと(A+1)のインデックスからTのインデックスσTを表現インデックスとして求めている。
数27は、シンドロームから得られたインデックスの演算によってインデックスzjを求めるもので、インデックスσTと−3σaの和をmod17とmod15 による表現インデックスとして求める。この計算で対応するjがないzjがインデックスとして得られることもある。
数28は、インデックスjとzjの対応関係からjを選択してこのjとインデックスσaの和のインデックスσXを表現インデックスとして求めている。
[3EC−EWシステムの構成]
図1は、フラッシュメモリに搭載される3EC−EWシステムの構成をメモリコア10との関係で示している。
NAND型フラッシュメモリの場合のメモリコア10は、図2に示すように、セルアレイ1、センスアンプ回路2及びロウデコーダ3を有する。セルアレイ1は、直列接続されたメモリセルM0−M31を有するNANDセルユニット(NANDストリング)を配列して構成されている。NANDセルユニットNUの一端は選択ゲートトランジスタS1を介してビット線BLe(BLo)に、他端は選択ゲートトランジスタS2を介して共通ソース線CELSRCに接続されている。
メモリセルの制御ゲートは、ワード線WL0−WL31に接続され、選択ゲートトランジスタS1,S2のゲートは選択ゲート線SGD,SGSに接続されている。ワード線WL0−WL31と選択ゲート線SGD,SGSを選択駆動するのがロウデコーダ3である。
センスアンプ回路2は、同時書き込み及び読み出しを行う1ページ分のセンスユニットSAを有する。各センスユニットSAには、ビット線選択回路4により、隣接するビット線BLe,BLoのいずれかが選択されて接続される。これにより、一つのワード線WLiと複数の偶数番ビット線BLe(或いは複数の奇数番ビット線BLo)により同時に選択されるメモリセルの集合が、同時に書き込み/読み出しが行われる1ページ(1セクタ)となる。非選択側のビット線は所定電位を与えたシールド線として利用することにより、選択ビット線間の干渉を防止することができる。
ワード線WL0−WL31を共有するNANDセルユニットの集合は、データ消去の単位とするブロックを構成し、図のようにビット線の方向に複数のブロックBLK0−BLKnが配置される。
図1において、エンコード部21は、231ビットの情報をa24〜a254としてこれらを係数とする230次の多項式f(x)が入力となる。情報ビットはデータビットの構成によって適宜必要な次数を選んでその係数のみを用い、使用しない係数は固定した0または1データとして扱うことによって固定ビットをメモリに記憶させずにメモリ容量に合ったシステムを構成することが可能である。
f(x)x24をg(x)で割った剰余をr(x)として多項式f(x)x24+r(x)の係数をデータビットとしてメモリコア10に書き込む。メモリコア10から読み出した255ビットのデータは254次の多項式ν(x)の係数として扱われる。
読み出したデータ多項式ν(x)からシンドロームS1,S3,S5を求めるのが、シンドローム演算部22である。先に説明したように、ν(x)を既約多項式m1(x),m3(x),m5(x)でそれぞれ割ることにより、その剰余としてシンドロームS1,S3,S5が得られる。
シンドロームS1,S3,S5が全てゼロであれば、エラーがない。このとき、ゲート回路36により、信号“no error”が出力される。
シンドロームS1,S3,S5のインデックスは、mod17,mod15で区別し、以後の加算回路を用いた計算ではそのインデックスで表されるバイナリの数としての足し算が行なわれる。即ち加算回路23〜26は、シンドロームS1,S3,S5間の積や商で表されるA,B,E,Fのインデックスをmod17とmod15の合同式として計算し、その結果の剰余類ペアで表される表現インデックスとして以降の演算を行う。
パリティチェッカ27,28,29は、入力インデックスを多項式に直した同じ次数間のmod2による和をとるものであり、具体的には、Aと1の和、BとS1 2の和、S1 3とS3とEとFの和をそれぞれ求めている。これらのパリティチェッカでは、7次の多項式の各次数の係数のパリティチェックの結果として和の有限体要素の多項式の係数が得られる。
加算回路30は、2ECシステムに対応するy2+y+1=Aによってyを求め、変換式x=S1yによってエラー位置nの表現インデックスを計算する部分である。この加算回路30の入力は、AとS1とS3=0を示す信号である。この入力部でy2+y+1=A を満たすyのインデックスiをデコードする。
S3=0ではA=0となり、y2+y+1=0を満たすyが2つあるにも拘わらず、AのインデックスσAが前段の加算回路から出力されないので、S3=0の場合の信号はシンドローム演算部22から直接受け取り、y2+y+1=0となるyのインデックスをデコードする。
デコード結果のiとS1のインデックスσ1から2つのエラー分のnのインデックスの表現インデックスを計算結果として出力する。入力部でのデコードの結果、yのインデックスiを求めることができない場合は、2ECシステムでは対応できないので、信号“no index 2EC”を発生する。
加算回路31は、入力としてB+S1 2の表現インデックスとA+1の表現インデックスを用い、C=(B+S1 2)/(A+1)のインデックスσCの表現インデックスを出力する。
加算回路32は、入力としてS1 2+S3+E+F=tの表現インデックスとA+1の表現インデックスを受け取り、T=t/(A+1)のインデックスσTの表現インデックスとして出力する。
これらの加算回路30〜32の次に、CとTのインデックスを入力としてインデックスzjを計算する加算回路33がある。a3=C3/2であるから、ここではCのインデックスσCの表現インデックスからインデックスの変換表によって入力の切り替えのみによってa3の表現インデックスを得る。これとTのインデックスσTからT/a3の表現インデックスを計算して出力する。
加算回路34は、3ECシステムに対応するz3+z=T/a3によってzを求め、変換azによってインデックスσXの表現インデックスを計算する部分である。その入力部分は前段までの結果zjとCのインデックスσCの表現インデックスを示す信号である。この入力部でz3+z=T/a3を満たすzのインデックスjをデコードする。
デコード結果のjとa=C1/2の関係により、インデックスσCの表現インデックスからインデックスの変換表によって入力の切り替えのみによってaの表現インデックスを得た結果を用いて、3つのエラー分のazのインデックスの表現インデックスを計算結果として出力する。
また、入力部でのデコードの結果zのインデックスjが求められない場合は、3ECでは対応できない。この場合は、信号“no index 3EC”を発生する。
パリティチェッカ35は、X=az+S1の和からXのインデックスとしてエラーの位置nの表現インデックスを計算している。4ビット以上のエラーがあり訂正が出来ない場合は、警告信号発生回路37により訂正不能であることを示す信号“non correctable”が出力される。
この警告信号発生回路37は、シンドロームがオール“0”ではなくかつ、2ECシステムでも3ECシステムでも解が得られない場合にその旨の警告信号を出す。具体的には、S1=0でS3≠0又はS5≠0か、或いは3ECシステムで解がない場合即ち“no index 3EC”が出力された場合に、“non correcrable”が出力されるように、ロジックが組まれている。
メモリコア10から読み出したデータを最終的に訂正して出力する部分がエラー訂正回路38である。2ECシステム部分からのエラー位置情報が使われるのは、t=0でかつ、“no index 2EC”が出力されない場合(ゲートG1出力=“1”)であり、この場合はゲートG2が活性になり、ゲートG3が非活性になって3ECシステムからのエラー位置情報は使われない。
2ECの条件を満たさない場合に、ゲートG3が活性となり、3ECシステムからの位置情報が使われる。エラー位置nのデータ多項式ν(x)の係数は位置情報とのXOR論理により反転されて、データdnとして出力される。
図3A及び図3Bは、エンコード部21で用いられる、チェックビットを計算するためのデータビット位置の選択表である。この表の意味は以下の通りである。
単項xnを生成多項式g(x)で割った23次多項式となる剰余rn(x)を求めておく。255個のデータは254次の多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxnの項があり、生成多項式g(x)の剰余の寄与はrn(x)である。
よってデータ1であるnのrn(x)を選択してrn(x)の各次数の係数の和をmod2で求めればデータ多項式のg(x)での割り算による剰余となる。
但しrn(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。rn(x)の各次数mについてその係数が1であるnをまとめたのが、図3A及び図3Bの表ということになる。チェックビットを作る際にはn=23までの次数はデータとして使わないので、n=24以降のnの表となる。
表の使い方は、次の通りである。例えばx15の係数が1であるrn(x)のnは表のm=15の列の“係数1の数”の欄の値が1から130に書かれている24,25,27,…,250,253,254のn次の項であり、x15の係数に相当するチェックビットb15は情報データの多項式f(x)x24の中のこの選択されたn次の項の中のデータが1であるビット位置nの1のパリティチェックの結果、すなわち表の中のデータが1に対応するnの数のmod2の剰余として得られる。
チェックビットの計算表を回路として実現するのが、図4である。これは、情報データ多項式f(x)x24からチェックビットをg(x)の剰余として計算する、m個の4ビットパリティチェッカラダー40と、図3A及び図3Bに示す生成多項式によるxnの剰余のテーブルに従って各次数の入力を選択する入力回路41とを有する。すなわちこの回路は、各mについて表からnを選択しanを用いてパリティチェックを行なう。
パリティチェッカラダー40は、後に示すように、チェックビットを表す多項式の各次数の係数の値を計算するためのXOR回路の集合であり、生成多項式によるxnの剰余のテーブルに従って各次数で入力を選択してそのパリティを計算する。
入力回路41は、CLK=“L”により駆動されるPMOSトランジスタP0によりプリチャージされる複数のノード42と、入力信号である情報データ多項式の231個の係数a24〜a254即ち入力データ信号を反転するインバータ群43と、その反転信号をゲート入力としてドレインが入力ノード42に接続されたNMOSトランジスタN2と、これらNMOSトランジスタN2のソースが共通に接続される、CLK=“H”でオンする放電用NMOSトランジスタN1とを有する。
NMOSトランジスタN2の配置が、図3A及び図3Bに従って定められる。予めプリチャージされたノード42がそれぞれ放電されるか否かが、NMOSトランジスタN2の配置と入力信号とにより決まり、その結果がパリティチェッカラダー40の入力となる。
m個のパリティチェッカラダー40の出力がそれぞれチェックビットbmとなる。なお231個の係数を全て情報として使用しない時はシステムの構成によって適宜選択された係数のみを用いればよい。
図5は、4ビットパリティチェッカラダー40の構成例である。入力数が4の剰余系のいずれに属するかによって用いるパリティチェッカ(PC)を組合せる。すなわち4で割り切れれば4ビットPCのみで、1が余れば2ビットPCの一方の入力端子をVddにしたものすなわちインバータを加え、2が余れば2ビットPCを加え、3が余れば4ビットPCのひとつの入力端子をVddにしたものを加える。
図3A及び図3Bから、xmのm=6,5はパリティチェックするビット数が最大の131個であるので、図5はその場合を例として示す。この場合131入力であるので、最初の段は4ビットPCを33個(そのうち一つは、一つの入力端子がVdd)、2段目は33入力となるので、4ビットPCを8個とインバータを1個、3段目は9入力となるので4ビットPCを2個とインバータを1個、4段目は3入力なので一つの入力端子をVddとした一つの4ビットPCで構成される。
他のmについても同様に構成していく。
図6(a),(b)は、2ビットPCの回路記号と具体回路例である。2ビットPCは、2ビット入力aとbの間のXOR演算部とXNOR演算部とから、偶数パリティのチェックを行うように、即ち入力中の“1”の数が偶数のときEP=“1”を出力する回路として構成されている。
図7(a),(b)は、4ビットPCの回路記号と具体回路例である。4ビットa,b,c,dを入力として、構成要素である二つの2ビットPCの出力のロジックを取り、偶数個の“1”が入力にあるときEP=“1”を出力する回路として構成されている。
図8は、シンドローム演算部22において、シンドロームS1=S1(x)の計算で使用する、xnのm1(x)での剰余pn(x)の各次数の係数が1であるnの表である。表の意味は以下の通りである。
単項xnを多項式m1(x)で割った7次多項式となる剰余pn(x)を求めておく。255個のデータは254次の多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxnの項があり、多項式m1(x)の剰余の寄与はpn(x)である。よってデータ1であるnのpn(x)を選択してpn(x)の各次数の係数の和をmod2で求めれば、データ多項式のm1(x)での割り算による剰余となる。
但しpn(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。pn(x)の各次数mについてその係数が1であるnをまとめると、図8の表になる。
例えばx7の係数が1であるpn(x)のnは、表のm=7の列の“係数1の数”の欄の数が1から128の行に書かれている7,11,12,…,251,252,254のnであり、シンドロームS1(x)のx7の係数(s1)7はデータの多項式ν(x)の中のこれらのn次の項の係数のパリティチェックの結果として得られる。
図9は、データ多項式ν(x)からシンドロームS1をm1(x)の剰余として計算する計算回路を示している。データ多項式f(x)x24からシンドロームS1をm1(x)の 剰余として計算する、m個の4ビットパリティチェッカラダー50と、図8に示すxnの剰余テーブルに従って各次数の入力を選択する入力回路51とを有する。すなわちこの回路は、各mについて表からnを選択しdnを用いてパリティチェックを行なうものである。
パリティチェッカラダー50は、シンドロームS1を表す多項式の各次数の係数の値を計算するためのXOR回路の集合であり、xnの剰余のテーブルに従って各次数で入力を選択してそのパリティを計算する。
入力回路51は、CLK=“L”により駆動されるPMOSトランジスタP0によりプリチャージされる複数のノード52と、入力信号である情報データ多項式の255個の係数d0〜d254即ち入力データ信号を反転するインバータ群53と、その反転信号をゲート入力としてドレインがノード52に接続されたNMOSトランジスタN2と、これらNMOSトランジスタN2のソースが共通に接続される、CLK=“H”でオンする放電用NMOSトランジスタN1とを有する。
NMOSトランジスタN2の配置が、図8に従って定められる。予めプリチャージされたノード52がそれぞれ放電されるか否かが、NMOSトランジスタN2の配置と入力信号とにより決まり、その結果がパリティチェッカラダー50の入力となる。
m個のパリティチェッカラダー50の出力がそれぞれシンドローム係数(s1)mとなる。なお255個の係数を全て情報として使用しない時はシステムの構成によって適宜選択された係数のみを用いればよい。
シンドロームS3,S5の係数(s3)m,(s5)mを求める計算回路も4ビットパリティチェッカラダーの構成が異なるのみで、同様の回路となる。
図10は、シンドロームS1の計算回路での4ビットパリティチェッカラダー50の構成例である。この場合も、入力の数が4の剰余系のいずれに属するかによって用いるパリティチェッカPCを組合せる。すなわち、4で割り切れれば4ビットPCのみで、1が余れば2ビットPCの一方の入力端子をVddにしたもの即ちインバータを加え、2が余れば2ビットPCを加え、3が余れば4ビットPCのひとつの入力端子をVddにしたものを加える。
xmの全てのmは、図8からパリティチェックするビット数が128個である。従って、最初の段は128入力であり、4ビットPCを32個、2段目は32入力となり4ビットPCを8個、3段目は8入力となるので4ビットPCを2個、4段目は2入力なので2ビットPC1個で構成される。
図11は、シンドロームS3=S3(x3)の計算で使用する、x3nのm3(x)での剰余p3n(x)の各次数の係数が1であるnの表である。表の意味は以下の通りである。
単項xnを多項式m3(x)で割った7次多項式となる剰余をtn(x)とする。シンドロームS3(x)へはtn(x)が寄与するが、S3=S3(x3)であるからS3へはtn(x3)が寄与する。
xn≡tn(x)mod m3(x)から、tn(x3)≡x3nmod m3(x3)とm3(x3)≡0 mod m1(x)なので、tn(x3)≡x3n≡p3n(x)mod m1(x)である。
GF(256)の要素はmod m1(x)の既約剰余なので、ν(x)のxnの項からはS3にp3n(x)の寄与と等しくなる。そこでp3n(x)を求めておく。255個のデータは254次の多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxnの項があり、この項の多項式m3(x)の剰余tn(x)のS3=S3(x3)への寄与はp3n(x)である。
よってデータ1であるnのp3n(x)を選択してp3n(x)の各次数の係数の和をmod2で求めれば、データ多項式のm3(x)での割り算による剰余S3(x)を求めなくてもS3(x3)が直接得られる。但しp3n(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。
p3n(x)の各次数mについてその係数が1であるnをまとめると、図11のの表になる。例えば、x7の係数が1であるp3n(x)のnは表のm=7の列の“係数1の数”の欄の数が1から128の行に書かれている、4,8,14,…,249,252,254のnであり、シンドロームS3(x3)のx7の係数(s3)7は、データの多項式ν(x)の中のこれらのn次の項の係数のパリティチェックの結果として得られる。他のmについても同様にして係数が得られる。
図12は、シンドロームS3=S3(x3)の計算での4ビットパリティチェッカラダーの構成例を示す。各mについて図11の表からnを選択してパリティチェックを行なう。
入力の数が4の剰余系のいずれに属するかによって用いるパリティチェッカ(PC)を組合せる。すなわち4で割り切れれば4ビットPCのみで、1が余れば2ビットPCの一方の入力端子をVddにしたものすなわちインバータを加え、2が余れば2ビットPCを加え、3が余れば4ビットPCのひとつの入力端子をVdd にしたものを加える。
xmのm=5,2,0は、図11の表からパリティチェックするビット数が最大の144個であるのでこの場合を例として示す。144入力であるので初段は4ビットPCを36個、2段目は36入力となるから、4ビットPCを9個、3段目は9入力となるので4ビットPC2個とインバータ1個、4段目は3入力なので一つの入力にVddが与えられた4ビットPC一つで構成される。
他のmについても同様に構成していく。
図13は、シンドロームS5=S5(x5)の計算で使用する、x5nのm1(x)での剰余p5n(x)の各次数の係数が1であるnの表である。表の意味は以下の通りである。
単項xnを多項式m5(x)で割った7次多項式となる剰余をqn(x)とする。S5(x)へはq(x)が寄与するが、S5=S5(x5)であるからS5へはqn(x5)が寄与する。xn≡qn(x)mod m5(x)からqn(x5)≡x5nmod m5(x5)とm5(x5)≡0mod m1(x)なので、qn(x5)≡x5n≡p5n(x)mod m1(x)である。
GF(256)の要素はmod m1(x)の既約剰余なのでν(x)のxnの項からはS5にp5n(x)の寄与と等しくなる。そこでp5n(x)を求めておく。255個のデータは254次の多項式の各次数の係数となるので、データが1である場合はそのデータ位置の次数のxnの項があり、この項の多項式m5(x)の剰余qn(x)のS5=S5(x5)への寄与はp5n(x)である。
よってデータ1であるnのp5n(x)を選択してp5n(x)の各次数の係数の和をmod2で求めれば、データ多項式のm5(x)での割り算による剰余S5(x)を求めなくてもS5(x5)が直接得られる。但しp5n(x)の各次数で係数が0であるものはどのようなデータ多項式でもこの計算に寄与しないので予め除いておける。p5n(x)の各次数mについてその係数が1であるnをまとめると図13の表になる。
例えばx7の係数が1であるp5n(x)のnは表のm=7の列の“係数1の数”の欄の数が1から120の行に書かれている4,7,9,…,250,251,253のnであり、シンドロームS5(x5)のx7の係数(s5)7はデータの多項式ν(x)の中のこれらのn次の項の係数のパリティチェックの結果として得られる。
他のmについても同様にして係数が得られる。
図14は、シンドロームS5=S5(x5)の計算での4ビットパリティチェッカラダーの構成例を示す。各mについて表から図13のnを選択してパリティチェックを行なう。
入力の数が4の剰余系のいずれに属するかによって用いるパリティチェッカ(PC)を組合せる。すなわち4で割り切れれば4ビットPCのみで、1が余れば2ビットPCの一方の入力端子をVddにしたものすなわちインバータを加え、2が余れば2ビットPCを加え、3が余れば4ビットPCのひとつの入力端子をVdd にしたものを加える。
xmのm=5,2は、表からパリティチェックするビット数が最大の160個であるのでこの場合を例として示す。160入力であるので最初の段は4ビットPCを40個、2段目は40入力となるので4ビットPCを10個、3段目は10入力となるので4ビットPCを2個と2ビットPCを1個、4段目は3入力なのでVddが与えられた4ビットPC1個で構成される。
他のmについても同様に構成していく。
シンドロームS1,S3,S5は、は7次の多項式として得られ、GF(256)の要素であるpn(x)のいずれかに一致している。そこでこれらのシンドローム多項式を、m1(x)の根αのインデックスであって、mod17,mod15によって表した表現インデックスに変換して以後の計算で利用する。この変換を行なうデコード回路を図15A〜図15Cに示す。
図15Aは、プリデコード部Pre−DECであり、8ビットのpn(x)の係数の表す256のバイナリ信号状態を信号Ai,Bi,Ci,Di(i=0〜3)の組合せとして表す変換を行う部分であって、NAND回路で構成される。8ビットのバイナリ信号を2ビットずつ下位から区切り、4進数としてそれぞれ表し、これらをAi,Bi,Ci,Diとしている。
これにより、シンドロームS1,S3,S5の次数m=0,1がAi、m=2,3がBi、m=4,5がCi、m=6,7がDiに変換される。このプリデコード部を用いることによって、次段のメインデコード回路の構成ユニットのトランジスタ数を8から4に削減できる。
図15Bは、メインのインデックスデコード部(DEC)即ち、17σ5DEC、15σ5DEC、17σ3DEC、15σ3DEC、17σ1DEC、15σ1DECの構成である。回路構成は同じで入力信号が異なるのみである。プリデコードされた信号を剰余類のグループに分けてそのインデックスを出力するようになっている。 即ち、プリデコーダPre−DECの出力Ai,Bi,Ci,Diを選択的にゲート信号とするトランジスタを直列接続したNAND回路を、各剰余類に属する既約多項式の数だけ並列接続して構成される。
クロックCLKにより制御されるプリチャージトランジスタにより共通ノードをプリチャージし、その放電の有無で剰余類のインデックス信号“index i”とする。信号配線とその反転信号線とがペアをなして配設され、これがNAND回路を構成するトランジスタのゲートにデコードのコードに従って接続される。
mod17,mod15に対してこれらのインデックスをつくり、これらのペアとして表現インデックスとする。
pn(x)=0の場合はαの指数で表現できずインデックスが求まらないので、後でこの状態が必要になる場合のためにこの状態を示す信号を発生する。これが図15Cの補助デコード部即ち、A0=B0=C0=D0=“1”でそれぞれ(s5=0),(s3=0),(s1=0)を出力するs5=0 DEC,s3=0 DEC,s1=0 DECである。
図16及び図17は、プリデコーダ等により表現インデックスを求める際の対応表である。これらのうち図16は、既約剰余pn(x)のインデックスnを17倍して法15の剰余類17n(15)として分類したものである。0から14のインデックスで分類され、各々の類には17個のnが含まれ、これらに対応するpn(x)の各次数の係数に従ってプリデコードされた信号Ai,Bi,Ci,Diの各i(=0〜3)を示した。
これらのAi,Bi,Ci,Diで図15Bのインデックスデコーダのトランジスタゲートへの信号の接続が決まる。例えばインデックス1においては並列にNOR接続されるNANDのノードはnが173,233,203,23,83,158,188,68,38,128,143,98,53,218,8,113,248に相当し、NANDゲートのトランジスタゲートへは対応するAi,Bi,Ci,Diを接続する。
図17は、既約剰余pn(x)のインデックスnを15倍して法17の剰余類15n(17)として分類したものである。0から16のインデックスで分類され、各々の類には15個のnが含まれ、これらに対応するpn(x)の各次数の係数に従ってプリデコードされた信号Ai,Bi,Ci,Diのiを示した。
例えばインデックス1においては並列にNOR接続されるNANDのノードはnが161,59,246,127,42,93,178,144,212,229,110,195,8,76,25に相当し、NANDゲートのトランジスタゲートへは対応するAi,Bi,Ci,Diを接続する。
αnのインデックスnに対応する表現インデックスをmod17とmod15のペアとして{15n(17),17n(15)}で表す。このとき、nの倍数についてその表現インデックスと剰余類がどの様に変換するかを見る。本システムでは次の3つの場合がある。なお15n(17)=σ17(mod17),17n(15)=σ15(mod15)として説明する。
1)nの表現インデックスσ17,σ15から法15と互いに素である数mの倍数mnの表現インデックスを求める。17は素数なのでどんなmとも互いに素である。
nをm倍してもmが法と互いに素であるので合同式の両辺を、法を変えずにmで割ることが出来る。従って剰余類自体は変わらず含まれる要素の構成に変わりはない。表現インデックスはm倍され{σ17(mod17),σ15(mod15)}から、{mσ17(mod17),mσ15(mod15)}となる。
2) 法17は素数であるので因数を持たないが、法15は3や5を因数として持つ。このときnの表現インデックスから法15の因数である数mの倍数mnの表現インデックスを求める。
mnとmn’が同じ剰余類に属するなら、17m(n−n’)≡0(mod15)である。mが15の因数であるのでこの合同式の両辺をmで割るときには法もその絶対値で割られて、n≡n’(mod15/|m|)であるから、15/|m|だけ差がある剰余類の要素は同じ剰余類の要素と見なされるので今まで分離していた剰余類が結合して新たな大きな剰余類となる。
表現インデックスはこれらの結合によって同一の表現インデックス を持つように変換される。例えばm=−3の場合はn≡n’(mod5)となり法15での剰余類3つが結合して15個の剰余類が5つの剰余類にまとまる。表現インデックスの変換自体は、1)の場合と同じである。
3)nの表現インデックスσ17,σ15から法15と互いに素である数mのm分の1のn/mの表現インデックスを求める。17は素数なのでどんなmとも互いに素である。
17n/mと17n’/mの剰余類について、17(n−n’)/m(mod15)でmが15と互いに素であるので、17(n−n’)/m≡(σ15−σ15’)/m(mod15)であるから、剰余類自体は変わらない。
表現インデックスは、17n/m≡σm(mod15)とすると、mσm≡σ15(mod15)である。mと15が互いに素であるので、σ15+15a15=mb15となる整数a15,b15が必ずあり、σm≡b15(mod15)となる。mod17についても同様であり、ペアの表現インデックスは、{b17(mod17),b15(mod15)}となる。
例えばm=2のときは、σ17が偶数なら、b17=σ17/2、奇数なら、b17=(σ17+17)/2となる。σ15が偶数なら、b15=σ15/2、奇数なら、b15=(σ15+15)/2となる。
図18は、nの表現インデックス{15n(17),17n(15)}の成分インデックスについて、nのm倍の変換後の値を欄xmの表にしたものである。この変換を組みあわて本システムで必要な表現インデックスは全て得られる。
例えば、−3/2倍に表現インデックス{3,8}を変換する。最初の成分インデックスは15n(17)=3であるので、×(−3)の欄から8になり、これを新たに15n(17)と見なして×1/2の欄から4となる。2番目の成分インデックスは17n(15)=8であるので、×(−3)の欄から6になり、これを新たに17n(15)と見なして×1/2の欄から3になる。
即ち{3,8}は、×(−3/2)により{4,3}に変換される。この変換過程は最初に×1/2を求め、次に×(−3)を求めても結果は同じである。
図19は、シンドローム多項式からシンドロームS1,S3,S5の表現インデックスに変換し、これらの2乗、3乗、−2乗、−3乗の表現インデックスを変換×2,×3,×(−2),×(−3)で求める回路を示す。
デコード回路DEC1,DEC2は、それぞれ15,17を法とした各シンドロームS1,S3,S5の各表現インデックス{15σ1(17),17σ1(15)}, {15σ3(17),17σ3(15)}、 {15σ5(17),17σ5(15)}を発生させる。これは先に示したプリデコーダとメインのインデックスデコーダを用いて構成される。
これらの表現インデックスの成分インデックスを、図18の変換テーブルに従ってマルチプレクサMUX1,MUX2で変換して、このあとの加算回路での計算で利用する。マルチプレクサMUX1,MUX2はインデックス間の対応関係に従って信号を配信するだけの分岐回路である。
図20は、図1の加算回路23の中の一つである、有限体要素A=S3/S1 3の17を法とする表現インデックスを計算する加算回路即ち、A−Adder(mod17)であり、数20の合同式15σA≡15σ3−45σ1(mod17)の右辺を計算する回路である。
入力101と102は表現インデックス成分15σ1(17)から変換された−45σ1(17)と15σ3(17)である。これらを5ビットの加算器105で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路103,104が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路106を介することにより、出力107に表現インデックスの成分15σA(17)が得られる。
図21は、図1の加算回路23の中で有限体要素A=S3/S1 3の15を法とする表現インデックスを計算する加算回路即ち、A−Adder(mod15)であり、数20の合同式17σA≡17σ3−51σ1(mod15)の右辺を計算する回路である。
入力201と202は表現インデックス成分17σ1(15)から変換された−51σ1(15)と17σ3(15)である。これらを4ビットの加算器205で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路203,204が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路206を介することにより、出力207に表現インデックスの成分17σA(15)が得られる。
図22は、インデックス/バイナリ変換回路103,104,203,204の構成例である。これは、剰余類を表すインデックスiを2進数表示に変換するもの(index to 5 binary,index to 4 binary)で、変換されたバイナリ情報を保持するためにクロックCLKでリセットされるラッチ回路108を有する。インデックスが入力されない場合は5binary回路なら2進数の31、4binary回路なら2進数の15である全ての信号が“H”状態を維持する。
図23は、バイナリ/インデックス変換回路106,206の構成例である。これは、2進数表示の計算結果を、次の段の計算で表現インデックス間の計算として利用できるようにインデックス信号へと再変換する必要があるため用意される。図15Bのデコード回路と同様の構成を用いることができる。
図24は、数AmとBmを2進数で表した各桁の和をハーフアダー、フルアダーで求めて、17を法としてその剰余としての和を求める5ビット加算器105の構成例を示している。図示のように、この加算器105は、5ビットの第1段加算器1051と、その和が17以上であることを検出して桁上げする桁上げ補正回路1052と、この桁上げ補正回路1052と共に、和が17以上の場合に32に対する17の補数15(=32−17)を加えるための第2段加算器1053とを有する。
桁上げ補正回路1052は、第1段加算器1051の出力状態に応じて、信号PF0を発生するものである。具体的にいえば、第1段加算器1051の最上位ビット出力S4’が“1”でありかつ、それ以外のビット出力S0,S1’〜S3’の少なくとも一つが“1”であること、即ち和が17以上であることを検出して、信号PF0(=“H”)を発生するように構成されている。
第2段加算器1053は、第1段加算器1051の出力が17以上の場合に、17の補数(01111)を加えるというロジックが組まれている。
図25は同様に、15を法としてその剰余としての和を求める4ビット加算器205の構成例を示している。図示のように、この加算器205は、4ビットの第1段加算器2051と、その和が15以上であることを検出して桁上げする桁上げ補正回路2052と、この桁上げ補正回路2052と共に、和が15以上の場合に15の補数を加えるための第2段加算器2053とを有する。
桁上げ補正回路2052は、第1段加算器2051の出力状態に応じて、信号PF0を発生するものである。
第2段加算器2053は、第1段加算器2051の出力が15以上の場合に、15の補数1=(0001)を加えるというロジックが組まれている。
これらの加算器105,205は、クロックなどの同期が必要でなく、入力が確定すれば出力も確定するようにして、システムのタイミング制御の負担を減らす構成となっている。
図26(a)(b)及び図27(a)(b)は、以上の加算器105,205で用いられる、2進数の足し算を行なう基本的な単位であるフルアダー及びハーフアダーの回路記号と具体回路を示している。フルアダーは、加えるビットAとBをXOR回路とXNOR回路でロジック演算を行い、桁上げ信号Cinとのロジックを更に取って、出力としてA,B,Cinの和Soutと桁上げ信号Coutを出力する。ハーフアダーは一般的なロジックゲートで構成できる。
図28は、図1の加算回路24の中の一つである、有限体要素B=S5/S1 3の17を法とする表現インデックスを計算する加算回路即ち、B−Adder(mod17)であり、数21の合同式15σB≡15σ3−45σ1(mod17)の右辺を計算する回路である。
入力301と302は表現インデックス成分15σ1(17)から変換された−45σ1(17)と15σ5(17)である。これらを5ビットの加算器305で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路303,304が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路306を介することにより、出力307に表現インデックス成分15σB(17)として得られる。
図29は、図1の加算回路24の中で有限体要素B=S5/S1 3の15を法とする表現インデックスを計算する加算回路即ち、B−Adder(mod15)であり、数21の合同式17σB≡17σ3−51σ1(mod15)の右辺を計算する回路である。
入力401と402は表現インデックス成分17σ1(15)から変換された−51σ1(15)と17σ5(15)である。これらを4ビットの加算器405で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路403,404が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路406を介することにより、出力407に表現インデックス成分17σB(15)が得られる。
図30は、図1の加算回路25の中の一つである、有限体要素E=S5/S1 2の17を法とする表現インデックスを計算する加算回路即ち、E−Adder(mod17)であり、数22の合同式15σE≡15σ5−30σ1(mod17)の右辺を計算する回路である。
入力501と502は表現インデックス成分15σ1(17)から変換された−30σ1(17)と15σ5(17)である。これらを5ビットの加算器505で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路503,504が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路506を介することにより、出力507に表現インデックスの成分15σE(17)が得られる。
図31は、図1の加算回路25の中の有限体要素E=S5/S1 2の15を法とする表現インデックスを計算する加算回路即ち、E−Adder(mod15)であり、数22の合同式17σE≡17σ5−34σ1(mod15)の右辺を計算する回路である。
入力601と602は表現インデックス成分17σ1(15)から変換された−34σ1(15)と17σ5(15)である。これらを4ビットの加算器605で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路603,604が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路606を介することにより、出力607に表現インデックス成分17σE(15)が得られる。
図32は、図1の加算回路26の中の一つである、有限体要素F=S3 2/S1 3の17を法とする表現インデックスを計算する加算回路即ち、F−Adder(mod17)であり、数23の合同式15σF≡30σ3−45σ1(mod17)の右辺を計算する回路である。
入力701と702は表現インデックス成分15σ1(17)から変換された−45σ1(17)と15σ3(17)から変換された30σ3(17)である。これらを5ビットの加算器705で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路703,704が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路706を介することにより、出力707に表現インデックスの成分15σF(17)が得られる。
図33は、図1の加算回路26の中の有限体要素F=S3 2/S1 3の15を法とする表現インデックスを計算する加算回路即ち、F−Adder(mod15)であり、数23の合同式17σF≡34σ3−51σ1(mod15)の右辺を計算する回路である。
入力801と802は表現インデックス成分17σ1(15)から変換された−51σ1(15)と17σ3(15)から変換された34σ3(15)である。これらを4ビットの加算器805で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路803,804が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路806を介することにより、出力807に表現インデックスの成分17σF(15)が得られる。
加算回路23−26の出力は、パリティチェッカ27−29での計算、例えばt=S1 3+S3+E+F等を計算するために供される。ここでの計算は有限体の要素を既約多項式と見てその係数の2を法としての和を求めるものである。そこで表現インデックスによって表された有限体の要素多項式pn(x)を加えるその係数を求める方法を説明する。
図34A及び図34Bの表は、pn(x)の次数mの係数と根αnのインデックスnと表現インデックス{15n(17),17n(15)}の関係を表現インデックス成分17n(15)の値0〜14ごとのグループにまとめて示した。各グループ内で表現インデックス成分15n(17)は0から16までが昇順に並べられている。
また、input 15n(17)の部分には、pn(x)の係数の和を、係数が0であるところは和に寄与しないので係数が1であるときの15n(17)の値を表示している。pn(x)と表現インデックス {15n(17),17n(15)}は一対一に対応しているので、ある表現インデックスが与えられたとき多項式のpn(x)の次数mの係数の和への寄与をこの表からデコードできる。
すなわち各次数mについて、 ひとつの17n(15)をゲート入力とするひとつのトランジスタの下にこの17n(15)に属するpn(x)の次数mの係数が1である15n(17)をゲート入力とするトランジスタが並列接続されたNOR接続を作る。すなわち表現インデックスがこのグループにヒットすれば電流パスが出来るようにする。
このような接続を各17n(15)について図34A及び図34Bの表から作り、共通ノードを放電するようにする。この共通ノードがひとつの表現インデックスに対してpn(x)の次数mの係数の反転を表している。
例えば次数m=7では表から、次の(1)〜(15)のNOR接続を作る。
(1)17n(15)=0の下の15n(17)=2,7,10,12,14,16のNOR接続、
(2)17n(15)=1の下の15n(17)=0,2,4,4,7,9,10,11,15,16のNOR接続、
(3)17n(15)=2の下の15n(17)=3,4,5,6,10,16のNOR接続、
(4)17n(15)=3の下の15n(17)=0,1,3,6,8,9のNOR接続、
(5)17n(15)=4の下の15n(17)=0,4,5,9,11,12,14,15のNOR接続、
(6)17n(15)=5の下の15n(17)=0,2,3,6,7,9,11,15のNOR接続、
(7)17n(15)=6の下の15n(17)=0,1,4,5,8,9,10,16のNOR接続、
(8)17n(15)=7の下の15n(17)=1,3,4,5,6,8,11,12,14,15のNOR接続、
(9)17n(15)=8の下の15n(17)=2,3,4,5,6,7,12,14のNOR接続、
(10)17n(15)=9の下の15n(17)=1,2,3,4,5,6,7,8,10,11,15,16のNOR接続、
(11)17n(15)=10の下の15n(17)=0,3,6,9,10,11,12,14,15,16のNOR接続、
(12)17n(15)=11の下の15n(17)=1,2,7,8,11,15のNOR接続、
(13)17n(15)=12の下の15n(17)=1,8,10,11,12,14,15,16のNOR接続、
(14)17n(15)=13の下の15n(17)=0,1,2,4,5,7,8,9,12,14のNOR接続、
(15)17n(15)=14の下の15n(17)=0,1,2,3,6,7,8,9,10,12,14,16のNOR接続。
これらのNOR接続により共通ノードが放電されるか否かにより、係数1がデコードされる。例えば{15n(17),17n(15)}={11,4}は、17n(15)=4の下の15n(17)=0,4,5,9,11,12,14,15のNOR接続を介してノードが放電され、m=7次の係数が1であることがデコードされる。
図35は、上述の図34A及び図34Bのテーブルを利用して、2ビットエラーであるか否かの判定信号となるt=S1 3+S3+E+Fを計算する4ビットパリティチェッカ29の入力デコード部の構成を示している。
入力信号は、要素S1 3,S3,E,Fそれぞれの表現インデックスであり、これらの要素毎にm次の係数に相当する共通ノード3501を有する。この共通ノード3501は、信号CLKで駆動されるPMOSトランジスタによりVddにプリチャージされる。
各要素の共通ノード3501に対して、表現インデックス成分17n(15)によりゲートが駆動されるNMOSトランジスタN11と、表現インデックス成分15n(17)によりゲートが駆動されるNMOSトランジスタN12とによりNOR回路NOR1,NOR2,NOR3,NOR4が構成される。NMOSトランジスタN11,N12の配置が図34A及び図34Bのテーブルにより決まる。
4つずつの共通ノード3501のパリティチェックを4ビットパリティチェッカ29で行うことにより、tのm次の係数(t)mが得られる。ちなみに、パリティチェッカの入力は全入力が反転されていても出力は変わらないので、ノードの放電を利用したロジックが作りやすい反転入力としている。
図36は、同様に図34A及び図34Bのテーブルを利用して、数13に関係するC=(S1 2+B)/(A+1)の要素であるS1 2+Bを計算するパリティチェッカ28の入力デコード部の構成を示している。
入力信号は、要素S1 2及びBの表現インデックスであり、これらの要素毎にm次の係数に相当する共通ノード3601を有する。この共通ノード3601は、信号CLKで駆動されるPMOSトランジスタによりVddにプリチャージされる。
各要素の共通ノード3601に対して、表現インデックス成分17n(15)によりゲートが駆動されるNMOSトランジスタN11と、表現インデックス成分15n(17)によりゲートが駆動されるNMOSトランジスタN12とによりNOR回路NOR5,NOR6が構成される。
2つずつの共通ノード3601のパリティチェックを2ビットパリティチェッカ28で行うことにより、S1 2+Bのm次の係数(S1 2+B)mが得られる。
図37は、同様に図34A及び図34Bのテーブルを利用して、数13に関係するC=(S1 2+B)/(A+1)のA+1を計算するパリティチェッカ27の入力デコード部の構成を示している。
入力信号は、要素Aの表現インデックスであり、この要素のm次の係数に相当する共通ノード3701を有する。この共通ノード3701は、信号CLKで駆動されるPMOSトランジスタによりVddにプリチャージされる。
各共通ノード3701に対して、表現インデックス成分17n(15)によりゲートが駆動されるNMOSトランジスタN11と、表現インデックス成分15n(17)によりゲートが駆動されるNMOSトランジスタN12とによりNOR回路NOR7が構成される。
パリティチェッカ27は、Aに1を加えるのみであるので、出力m=0は、共通ノード3701の信号を反転するインバータ2段により、他のmはインバータ1段により構成される。これにより、A+1のm次の係数(A+1)mが得られる。
以上のように、要素の和から多項式のm次の係数を求めた後、これを表現インデックスに変換する。即ち、要素t,S1 2+B,A+1は7次の多項式として得られ、GF(256)の要素であるpn(x)のいずれかに一致している。そこで多項式をm1(x)の根αのインデックスをmod17,mod15によって表した表現インデックスに変換して以後の計算で利用する。
図38A〜図38Cは、そのような表現インデックスへの変換を行なうデコード回路の構成を示す。デコード回路は、図38AのプリデコーダPre−DEC、図38Bに示すメインのデコーダ即ち、15σtDEC,17σtDEC,15σ(S12+B)DEC,17σ(S12+B)DEC,15σ(A+1)DEC,17σ(A+1)DECと、図38Cに示す補助的デコーダ,t=0DECとを有する。
図38AのプリデコーダPre−DECは、8ビットのpn(x)の係数の表す256のバイナリ信号状態を信号Ai,Bi,Ci,Di(i=0〜3)の組合せとして表す変換を行うものであり、NAND回路で構成される。8ビットのバイナリを2ビットずつ下位から区切り4進数としてそれぞれ表し、これらをAi,Bi,Ci,Diとしている。
このプリデコーダにより、t,S1 2+B,A+1の次数m=0,1がAi、m=2,3がBi、m=4,5がCi、m=6,7がDiに変換される。このプリデコーダを用いることによって、次段のメインデコード回路の構成ユニットのトランジスタ数を8から4に削減できる。
図38Bのメインデコーダは、6種あるが各回路構成は同じで入力信号が異なるのみであるので、一つを示している。ここでは、プリデコードされた信号を剰余類のグループに分けてそのインデックスを出力する。即ち信号Ai,Bi,Ci,Diを剰余類の各要素を表すデコードのNAND接続とこれら要素の集合を表すこれらのNOR接続で結合して、クロックCLKでプリチャージされるノードを放電させ、さらに反転して剰余類のインデックス信号iを出力する。剰余類の数だけこの回路は必要である。mod17,mod15に対して先に計算した表からこれらのインデックスをつくりこれらのペアとして表現インデックスとする。
pn(x)=0の場合はαのインデックスが求まらないので、後でこの状態が必要になる場合のために、図38Cに示す補助的デコーダでこの状態を示す信号を発生する。即ち、A0=B0=C0=D0=“1”のとき、t=0を示す信号を発生する。
図39は、図1の加算回路32の中の一つである、有限体要素T=t/(A+1)の17を法とする表現インデックスを計算する加算回路即ち、T−Adder(mod17)であり、数26の合同式15σT≡15σt−15σ(A+1)(mod17)の右辺を計算する回路である。
入力901と902はA+1の表現インデックス成分15σ(A+1)(17)から変換された−15σ(A+1)(17)とtの表現インデックス成分15σt(17)である。これらを5ビットの加算器905で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路903,904が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路906を介することにより、出力907に表現インデックスの成分15σT(17)が得られる。
図40は、図1の加算回路32の中の有限体要素T=t/(A+1)の15を法とする表現インデックスを計算する加算回路即ち、T−Adder(mod15)であり、数26の合同式17σT≡17σt−17σ(A+1)(mod15)の右辺を計算する回路である。
入力1001と1002はA+1の表現インデックス成分15σ(A+1)(15)から変換された−17σ(A+1)(15)とtの表現インデックス成分17σt(15)である。これらを4ビットの加算器1005で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路1003,1004が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路1006を介することにより、出力1007に表現インデックスの成分17σT(15)が得られる。
図41は、図1の加算回路31の中の一つである、有限体要素C=(S1 2+B)/(A+1)の17を法とする表現インデックスを計算する加算回路即ち、C−Adder(mod17)であり、数25の合同式15σC≡15σ(S12+B)−15σ(A+1)(mod17)の右辺を計算する回路である。
入力1101と1102はA+1の表現インデックス成分15σ(A+1)(17)から変換された−15σ(A+1)(17)とS1 2+Bの表現インデックス成分17σ(S12+B)(17)である。これらを5ビットの加算器1105で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路1103,1104が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路1106を介することにより、出力1107に表現インデックス成分17σC(17)が得られる。
図42は、図1の加算回路31の中の有限体要素C=(S1 2+B)/(A+1)の15を法とする表現インデックスを計算する加算回路即ち、C−Adder(mod15)であり、数25の合同式17σC≡17σ(S12+B)−17σ(A+1)(mod15)の右辺を計算する回路である。
入力1201と1202はA+1の表現インデックス成分15σ(A+1)(15)から変換された−17σ(A+1)(15)とS1 2+Bの表現インデックス成分17σ(S12+B)(15)である。これらを4ビットの加算器1205で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路1203,1204が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路1206を介することにより、出力1207に表現インデックス成分17σC(15)が得られる。
図43は、図1の加算回路33の中の一つである、有限体要素αzj=T/a3の17を法とする表現インデックスを計算する加算回路即ち、zj−Adder(mod17)であり、数27の合同式15zj≡15σT−45σa(mod17)の右辺を計算する回路である。
入力1301は、σa=σC(1/2)の対応関係から信号つなぎ替えで変換された要素a=C1/2の表現インデックス成分15σa(17)を更に変換した−45σa(17)であり、入力1302は、Tの表現インデックス成分15σT(17)である。これらを5ビットの加算器1305で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路1303,1304が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路1306を介することにより、出力1307に表現インデックス成分17zj(17)が得られる。
図44は、図1の加算回路33の中の有限体要素αzj=T/a3の15を法とする表現インデックスを計算する加算回路即ち、zj−Adder(mod15)であり、数27の合同式17zj≡17σT−51σa(mod15)の右辺を計算する回路である。
入力1401は、σa=σC(1/2)の対応関係から信号つなぎ替えで変換された要素a=C1/2の表現インデックス成分17σa(15)を更に変換した−51σa(15)であり、入力1402は、Tの表現インデックス成分17σT(15)である。これらを4ビットの加算器1405で加えるために、インデックスをバイナリ表示に変換するインデックス/バイナリ変換回路1403,1404が設けられている。
加算結果は、バイナリをインデックスに戻すバイナリ/インデックス変換回路1406を介することにより、出力1407に表現インデックス成分15zj(15)が得られる。
図45は、3つのエラー位置をz3+z=αzjからz=αjのインデックスjとして求めるための、インデックスjとこれがz3+z変換されたインデックスzjの対応関係をまとめたものである。jの順にzjを並べたものと、zjの順にjを並べたものを併せて示した。
後者は同一のzjに三つのjが対応する場合があることを示している。三つのjが対応しないzjは、ぴったり3つのエラーがない場合であって解が存在しない状態であり、これらは解の探索からは最初から省いてよい。
図46は、3つのエラーがある場合に、zjの表現インデックス{15zj(17),17zj(15)}とjの表現インデックス成分15j(17)の間の関係を示している。またデコードの際のバス構成との関係も併せて示している。
表は15j(17)の値ごとにまとめてグループとしている。計算で得られたzjの表現インデックスに対して、この表からデコーダを作るとjの表現インデックス成分が求まる。但し同じzjが3つのjに対応するので、デコードの出力を3つに分けてjごとにデータ出力データがバスでぶつからないように3つのバスbs1,bs2,bs3を設けている。
例えばzj=17にはj=51,58,163が対応するのでj=51はバスbs1に、j=58はbs2に、j=163はbs2になるように、出力バスを分ける。
実際のデコードで利用されるのは表現インデックスであり、zj各表現インデックスに対して各バスbs1,bs2,bs3に出力されるjの表現インデックス成分15j(17)の値を対応させる。表現インデックス間に対応がない場合は3エラーではない。
図47は、同様に3つのエラーがある場合に、zjの表現インデックス{15zj(17),17zj(15)}とjの表現インデックス成分17j(15)の間の関係を示している。またデコードの際のバス構成との関係も併せて示している。
表は15j(15)の値ごとにまとめてグループとしている。計算で得られたzjの表現インデックスに対して、この表からデコーダを作るとjの表現インデックス成分が求まる。但し同じzjが3つのjに対応するので、デコードの出力を3つに分けてjごとにデータ出力データがバスでぶつからないように3つのバスbs1,bs2,bs3を設けている。
例えばzj=17にはj=51,58,163が対応するので、j=51はbs1に、j=58はbs2に、j=163はbs3になるようにバスを分けているのは15j(17)の表と同じである。
実際のデコードで利用されるのは表現インデックスであり、zj各表現インデックスに対して各バスbs1,bs2,bs3に出力されるjの表現インデックス成分17j(15)の値を対応させる。表現インデックス間に対応がない場合は3エラーではない。
図48は、図1における加算回路34の中の一つである、有限体要素azの17を法とする表現インデックス成分15σX(17)を計算する回路部分即ち、az−Adder(mod17)であり、数28の合同式15σX≡15σa+15j(mod17)の右辺を計算する回路である。
一方の入力1501はσa=σC(1/2)の対応関係から信号つなぎ替えで変換されて得られた要素a=C1/2の表現インデックス成分15σa(17)である。他方の入力1502は、zjの表現インデックス17zj(15),15zj(17)を先の図46及び図47のテーブルによって構成されたデコーダ1507で対応付けした表現インデックス成分15j(17)である。
入力1501の15σa(17)はバイナリ信号に変換するインデックス/バイナリ変換回路1503を通す。同様に入力1502の15j(17)は、3つのエラーのそれぞれに対応した3つの5ビット加算器1505a,1505b,1505cで加えるために、インデックスを2進表示に変換するインデックス/バイナリ変換回路1504によって変換して、3つのバスbs1,bs2,bs3にそれぞれ出力する。
これらのバスbs1,bs2,bs3の出力と、入力1501側のバイナリ出力とを、各加算器1505a,1505b,1505cで17を法とした剰余として計算する。それらの加算出力は、バイナリ信号を表現インデックスに変換するバイナリ/インデックス変換回路1506a,1506b,1506cを通して、表現インデックス成分15σX(17)に戻して3つのバスbus1,bus2,bus3にそれぞれ出力する。
図49は、図1における加算回路34の中の有限体要素azの15を法とする表現インデックス成分17σX(15)を計算する回路部分、az−Adder(mod15)であり、数28の合同式17σX≡17σa+17j(mod15)の右辺を計算する回路である。
一方の入力1601はσa=σC(1/2)の対応関係から信号つなぎ替えで変換されて得られた要素a=C1/2の表現インデックス成分17σa(15)である。他方の入力1602は、zjの表現インデックス17zj(15),15zj(17)を先の図46及び図47のテーブルによって構成されたデコーダ1607で対応付けした表現インデックス成分17j(15)である。
入力1601の17σa(15)については、インデックス を2進表示に変換するインデックス/バイナリ変換回路1603によって変換し、入力1602の17j(15)は、3つのエラーのそれぞれに対応した3つの5ビット加算器1605a,1605b,1605cで加えるために、インデックスを2進表示に変換するインデックス/バイナリ変換回路1604によって変換して、3つのバスbs1,bs2,bs3にそれぞれ出力する。
これらのバスbs1,bs2,bs3の出力と、入力1601側のバイナリ出力とを、各加算器1605a,1605b,1605cで15を法とした剰余として計算する。それらの加算出力は、バイナリ信号を表現インデックスに変換するバイナリ/インデックス変換回路1606a,1606b,1606cを通して、表現インデックス成分17σX(15)に戻して3つのバスbus1,bus2,bus3にそれぞれ出力する。
図50は、デコード回路1507,1607の構成である。zjの表現インデックスから対応するjの表現インデックスに変換するのがこれらのデコーダzj(17)DEC,zj(15)DECである。ひとつのzjに3つのjが対応してあるのでバスbs1,bs2,bs3にそれぞれjの表現インデックスを出力する。
zjの表現インデックス成分15zj(17),17zj(15)をゲート入力とするNAND接続によってこれらの表現インデックスを区別し、先の表に従って同じjの表現インデックス成分に対応するグループごとにNOR接続で結合している。クロックCLKでプリチャージされたノードが放電され、インバータで反転されて、jの表現インデックス成分15j(17),17j(15)がバス毎に発生される。
図51は、表現インデックスの和を加算器で計算できるように2進表示にする変換するインデックス/バイナリ変換回路1503,1504,1603,1604の回路構成である。これは先に図22で説明した回路と同じである。
図52は、zjに対応するjが存在しない場合即ち、3つのエラーが解として求まらない場合を示す信号“no index 3EC(17)”,“no index 3EC(15)”を発生する回路である。インデックスが出なければインデックス/バイナリ変換回路の出力が全ビット“1”となるので、この状態を検出するNAND回路G1,G2を用いてこれらの信号発生回路が構成される。バスbs1,bs2,bs3には同じ信号が発生するので、一つのバスbs1のみの状態のみをモニタすれば十分である。
図53は、3つのバスbus1,bus2,bus3上の要素azの表現インデックスによってエラーが発生した実際のビット位置をX=az+S1と計算する回路、即ち図1のパリティチェッカ35とその入力デコード回路部の構成である。この回路は各バス毎に設けられ、バスbus1,bus2,bus3に対してそれぞれ、X1,X2,X3が得られる。
入力デコード回路構成は、図35〜図37と同様の原理による。即ち入力信号は要素azとS1それぞれの表現インデックスであり、これらの要素ごとにm次の係数に相当するノードを持ちこのノードを信号CLKでプリチャージしておく。各要素のm次のノードの表現インデックス信号のトランジスタゲートへの接続は表から決まる。各mについて各要素からの2つのノードのパリティチェック2ビットパリティチェッカ35で行い、az+S1のm次の係数である(Xn)mが得られる。
実際のエラー位置を表す多項式Xnのm次の係数を求めた後でこれを表現インデックスに変換する。Xnは7次の多項式として得られ、GF(256)の要素であるpn(x)のいずれかに一致している。そこで多項式をm1(x)の根αのインデックスのmod17,mod15によって表した表現インデックスに変換して以後の計算で利用する。
図54A及び図54Bは、そのような表現インデックスへの変換を行なうデコード回路の構成を示す。即ちデコード回路は、図54AのプリデコーダPre−DECと、図54Bに示すメインのデコーダ即ち、15n(bus1)DEC,17n(bus1)DEC,15n(bus2)DEC,17n(bus2)DEC,15n(bus3)DEC,17n(bus3)DECにより構成される。
図54AのプリデコーダPre−DECは、8ビットのpn(x)の係数の表す256のバイナリ信号状態を信号Ai,Bi,Ci,Di(i=0〜3)の組合せとして表す変換であり、NAND回路で構成される。8ビットのバイナリを2ビットずつ下位から区切り4進数としてそれぞれ表し、これらをAi,Bi,Ci,Diとしている。
このプリデコーダにより、次数m=0,1がAi、m=2,3がBi、m=4,5がCi、m=6,7がDiに変換される。このブリデコーダを用いることによって、次段のメインデコード回路の構成ユニットのトランジスタ数を削減できる。
図54Bのメインデコーダは、6種あるが各回路構成は同じで入力信号が異なるのみであるので、一つを示している。ここでは、プリデコードされた信号を剰余類のグループに分けてそのインデックスを出力する。即ち信号Ai,Bi,Ci,Diを剰余類の各要素を表すデコードのNAND接続とこれら要素の集合を表すこれらのNOR接続で結合して、クロックCLKでプリチャージされるノードを放電させ、さらに反転して剰余類のインデックス信号nを出力する。剰余類の数だけこの回路は必要である。mod17,mod15に対して先に計算した表からこれらのインデックスをつくりこれらのペアとして各バスbus1,bus2,bus3毎の表現インデックスnを出力する。
図55は、各バスbus1,bus2,bus3ごとに得られたエラー位置nの表現インデックスを用いてエラー位置にエラー信号を発生するエラー位置デコード回路である。各バスbus1,bus2,bus3のnの表現インデックス成分のNAND接続をつくりこれらの表現インデックスを選択できるようにする。
ビット位置nでエラーが発生した場合のエラー位置信号n(3EC)(情報データビットとして利用するのはn=24〜254である)を発生するために、バスbus1,bus2,bus3の表現インデックスをNOR接続で結合し、CLKでプリチャージされたノードを放電し、さらにインバータで反転して信号とする。
エラーが2つ以下の場合は2ECシステムを用いてエラー位置の検索を行なう。このときy2+y+1=Aを解くが、y2+y+1のインデックスをyiとし、yのインデックスをiとすればiとyiの関係が決まる。
図56は、そのインデックスiとyiの対応関係をまとめたものである。iの順にyiを並べたものと、yiの順にiを並べたものを併せて示した。後者はyi=0の場合を除いて同一のyiに二つのiが対応することを示している。yi=0は1ビットエラーに対応する。
なお、iが85と170では対応するyiはない(有限体の要素0に対応)のでインデックスとは別の系統で解を求める。またyiの値が全ての255の剰余にわたっていないことが分かる。対応するyiがない場合にはエラー位置検索方程式ΛR(x)=0に解が存在しない。
図57は、2つ以下のエラーがある場合に、yiの表現インデックス{15yi(17),17yi(15)}とiの表現インデックス成分15i(17)の間の関係を示している。またデコードの際のバス構成との関係も合わせて示している。
表は15i(17)の値ごとにまとめてグループとしている。計算で得られたyiの表現インデックスに対して、この表からデコーダを作るとiの表現インデックス成分が求まる。但し同じyiが2つのiに対応するので、デコード出力を2つに分けてiごとにデータ出力データがバスでぶつからないように2つのバスbs1,bs2を設けている。
例えば、yi=17にはi=102,221が対応するので、i=102はbs1に、i=221はbs2になるようにバスを分ける。
また、yiの表現インデックスが得られない要素0の場合は、S3=0がその場合を示し、i=85,170はそれぞれバスbs1,bs2になる。
実際のデコードで利用されるのは表現インデックスであり、yi各表現インデックスに対して各バスbs1,bs2に出力されるiの表現インデックス成分15i(17)の値を対応させる。表現インデックス間に対応がない場合は1又は2エラーではない。
図58は、2つ以下のエラーがある場合に、yiの表現インデックス{15yi(17),17yi(15)}とiの表現インデックス成分17i(15)の間の関係を示している。またデコードの際のバス構成との関係も合わせて示している。
表は17i(15)の値ごとにまとめてグループとしている。計算で得られたyiの表現インデックスに対して、この表からデコーダを作るとiの表現インデックス成分が求まる。但し同じyiが2つのiに対応するので、デコード出力を2つに分けてiごとにデータ出力データがバスでぶつからないように2つのバスbs1,bs2を設けている。
例えば、yi=17にはi=102,221が対応するので、i=102はbs1に、i=221はbs2になるようにバスを分ける。
また、yiの表現インデックスが得られない要素0の場合は、S3=0がその場合を示し、i=85,170はそれぞれバスbs1,bs2になる。
実際のデコードで利用されるのは表現インデックスであり、yi各表現インデックスに対して各バスbs1,bs2に出力されるiの表現インデックス成分17i(15)の値を対応させる。表現インデックス間に対応がない場合は1又は2エラーではない。
図59は、図1における加算回路30の中の一つである、有限体要素X=ay=S1yの17を法とする表現インデックス成分15n(17)を計算する回路部分即ち、ay−Adder(mod17)であり、数24の合同式15n≡15σ1+15i(mod17)の右辺を計算する回路である。
一方の入力1701はシンドロームS1の表現インデックス成分15σ1(17)である。他方の入力1702は、yiの表現インデックス17yi(15),17yi(17)を先の図57及び図58のテーブルによって構成されたデコーダ1707で対応付けした表現インデックス成分15i(17)である。
入力1701の15σ1(17)については、インデックスを2進表示に変換するインデックス/バイナリ変換回路1703によって変換し、入力1702の15i(17)は、2つのエラーに対応した2つの5ビット加算器1705a,1705bで加えるために、インデックスを2進表示に変換するインデックス/バイナリ変換回路1704によって変換して、2つのバスbs1,bs2にそれぞれ出力する。
これらのバスbs1,bs2の出力と、入力1701側のバイナリ出力とを、各加算器1705a,1705bで17を法とした剰余として計算する。それらの加算出力は、バイナリ信号を表現インデックスに変換するバイナリ/インデックス変換回路1706a,1706bを通して、表現インデックス成分15n(17)に戻して2つのバスbus1,bus2にそれぞれ出力する。
図60は、図1における加算回路30の中の有限体要素X=ay=S1yの15を法とする表現インデックス成分17n(15)を計算する回路部分、ay−Adder(mod15)であり、数24の合同式17n≡17σ1+17i(mod15)の右辺を計算する回路である。
一方の入力1801はシンドロームS1の表現インデックス成分17σ1(15)である。他方の入力1802は、yiの表現インデックス17yi(15),17yi(17)を先の図57及び図58のテーブルによって構成されたデコーダ1807で対応付けした表現インデックス成分17i(15)である。
入力1801の15σ1(17)については、インデックスを2進表示に変換するインデックス/バイナリ変換回路1803によって変換し、入力1802の15i(17)は、2つのエラーのそれぞれに対応した2つの4ビット加算器1805a,1805bで加えるために、インデックスを2進表示に変換するインデックス/バイナリ変換回路1804によって変換して、2つのバスbs1,bs2にそれぞれ出力する。
これらのバスbs1,bs2の出力と、入力1801側のバイナリ出力とを、各加算器1805a,1805bで15を法とした剰余として計算する。それらの加算出力は、バイナリ信号を表現インデックスに変換するバイナリ/インデックス変換回路1806a,1806bを通して、表現インデックス成分17n(15)に戻して2つのバスbus1,bus2にそれぞれ出力する。
図61は、デコード回路1707,1807の構成である。yiの表現インデックスから対応するiの表現インデックスに変換するのがこれらのデコーダyi(17)DEC,yi(15)DECである。ひとつのyiに2つのiが対応してあるのでバスbs1,bs2にそれぞれiの表現インデックスを出力する。
yiの表現インデックス成分15yi(17),17yi(15)をゲート入力とするNAND接続によってこれらの表現インデックスを区別し、先の表に従って同じiの表現インデックス成分に対応するグループごとにNOR接続で結合している。クロックCLKでプリチャージされたノードが放電され、インバータで反転されて、iの表現インデックス成分15i(17),17i(15)がバス毎に発生される。
図62は、表現インデックスの和を加算器で計算できるように2進表示にする変換するインデックス/バイナリ変換回路1703,1704,1803,1804の回路構成である。これは先に図22で説明した回路と同じである。
図63は、yiに対応するiが存在しない場合即ち、2つのエラーが解として求まらない場合を示す信号“no index 2EC(17)”,“no index 2EC(15)”を発生する回路である。インデックスが出なければインデックス/バイナリ変換回路の出力が全ビット“1”となるので、この状態を検出するNAND回路G11,G12を用いてこれらの信号発生回路が構成される。バスbs1,bs2には必ず同じ信号が発生するので、一つのバスbs1のみの状態のみをモニタすれば十分である。
図64は、各バスbus1,bus2ごとに得られたエラー位置nの表現インデックスを用いてエラー位置にエラー信号を発生するエラー位置デコード回路である。各バスbus1,bus2のnの表現インデックス成分のNAND接続をつくりこれらの表現インデックスを選択できるようにする。
ビット位置nでエラーが発生した場合のエラー位置信号n(2EC)(情報データビットとして利用するのはn=24〜254である)を発生するために、bus1,bus2の表現インデックスをNOR接続で結合し、CLKでプリチャージされたノードを放電し、さらにインバータで反転して信号とする。
図65は、2ECシステムと3ECシステムがあるこの実施の形態において、3ビットまでのエラー検索と訂正がどのような手順で進行するかをまとめて示している。基本的にはエラーのないことがまず検出され、エラーがある場合にはその探索すべきエラーの数を拡大する方向で手順が進行する。
即ちシンドローム演算の結果得られたシンドロームS1,S3,S5について、S1=S3=S5=0であれば、エラーなしを示す信号“no error”が出力され、いずれかが0でなければエラーが存在することになる。
エラーが1乃至2に対しては、2ECシステムで対応可能である。2ビットエラーの場合シンドロームS1,S3,S5と解X1,X2との間に、S1 3=S3+X1X2S1,S1 5=S5+X1X2S3なる関係があり、t=S1 3+S3+E+F(E=S5/S1 2,F=S3 2/S1 3)とおいて、x=S1yなる変数変換を行い、y2+y+1=A(A=S3/S1 3)を解く。
1ビット乃至2ビットエラーのとき、S1=0なら、S3=S5=0となるので、S1=0でS3又はS5が0でなければ、2ECシステムでは解けない。またS1≠0なら、t=0であり、2ECシステムで解を求める。
2ECシステムでは1ビットエラーも解けるが、そのときの条件を見るとS1 3=S3,S1 5=S5であり、A=1,t=0となり、2ECシステムの特別の場合に相当する。
エラーが3以上のとき、3ECシステムに移る。t≠0又は2ECシステムで解が求まらない場合、シンドロームS1,S3,S5と解X1,X2,X3との間に、
S1 2D+S1T=S1 3+S3,S3D+S1 2T=S1 5+S5(D=X1X2+X2X3+X3X1,T=X1X2X3)なる関係があり、x=az+S1なる変数変換を行って、z3+z=T/a3を解く(但し、a={(S1 2+B)/(A+1)}1/2)。
S1=0ならS3=S5=0であるから、S3≠0又はS5≠0ではエラーは4つ以上あるので3ECシステムでは解けない。S1≠0なら解探索を3ECシステムで行い、解が求まらない場合は4ビット以上のエラーがあることになる。
図66は、図65で説明した階層的エラー探索の分岐判定条件をまとめて示している。エラーなしでは、シンドロームS1,S3,S5が全て“0”であるから、各次数mのシンドローム係数(s1)m(m=0〜7),(s3)m(m=0〜7),(s5)m(m=0〜7)が全て0であることにより、エラーなしと判定される。この判定条件を、図では、(s1=0)=1&(s3=0)=1&(s5=0)=1で示している。
2ECシステムへの移行条件は、S1≠0のときt=0即ち、全次数mで(t)m=1である。この判定条件は、上と同様の表記法で、(s1=0)=0&(t=0)=1である。
3ECシステムへの分岐条件は、S1≠0のときt≠0又は2ECシステムで解けない場合である。従ってこの条件は、(s1=0)=0&(t=0)=0又は、no index 2EC=1である。
4エラー以上でNon−Correctableと判定されるのは、S1=0でS3又はS5≠0、又は3ECシステムで解けない場合である。従ってその判定条件は、(s1=0)=1&(s3=0)=0/(s5=0)=0又は、no index 3EC=1である。
2ECシステムと3ECシステムによって、それぞれエラー数に応じてエラー位置が検索される。
図67は、図55に示す3ECシステムの場合のエラー位置デコード回路と、図64に示す2ECシステムの場合のエラー位置デコード回路とを統合した、各バス毎に得られるエラー位置nの表現インデックスを用いてエラー位置信号を発生するエラー位置デコード回路を示している。
2ECシステムと3ECシステムの分岐条件を判定する論理回路660を用いて、3ECシステムの場合に判定信号3EC=“1”を発生する。この判定信号3ECに基づいて、3ECシステムの放電パス(図55のデコード回路)と2ECシステムの放電パス(図64のデコード回路)とを選択している。
ビット位置nでエラーが発生した信号n(EC)(情報データビットとして利用するのはn=24〜254)を発生するために選択されたデコーダをNOR接続で結合し、CLKでプリチャージされたノードを放電し、さらに反転して出力信号とする。
図68は、エラービット位置でのデータ訂正回路を示している。先の分岐判定条件に従って、4ビット以上のエラーがある場合即ち、(s1=0)=1&(s3=0)=0/(s5=0)=0又は、no index 3EC=1の場合、NANDゲート681により、訂正不能を示すnon correctable=1が出力される。このときメモリから読み出されたデータdnはそのまま出力される。
0エラーではエラー訂正部からの信号は遮断してデータdnをそのまま出力する。1乃至3ビットのエラーの場合、各I/O部でエラーが発生していればエラーを示す信号n(EC)が1となり、2ビットパリティチェッカ683でデータdnは反転されて、データdatanとなる。2ビットパリティチェッカ683は、XNOR回路と等価であり、NANDゲート682の出力が“1”のときインバータとして働く。
以上のようにこの実施の形態によると、3ビットまでのエラー訂正を数十nsの演算時間で完了することが出来、NAND型フラッシュメモリ等の性能を落とすことなく信頼性の向上が実現できる。
10…メモリコア、21…エンコード部、22…シンドローム演算部、23〜26…加算回路、27,28,29…パリティチェッカ、30〜34…加算回路、35…パリティチェッカ、36…No Error信号発生回路、37…Non Correctable信号発生回路、38…エラー訂正回路、40,50…パリティチェッカラダー、41,51…入力回路、42,52…共通ノード、43,53…インバータ、(101,102,201,202,…,1801,1802)…入力、(103,104,203,204,…,1803,1804)…インデックス/バイナリ変換回路、(105,205,…,1805a,1805b)…加算器、(106,206,…,1806)…バイナリ/インデックス変換回路、(107,207,…,1807)…出力。