以下、図面を参照して、この発明の実施の形態を説明する。
図1は、一実施の形態によるフラッシュメモリの要部構成を示す図である。このフラッシュメモリは、4つのセルアレイ1即ち、T−cellアレイ(0−1),C−cellアレイ(0−2),T−cellアレイ(0−3)及びC−cellアレイ(0−4)により一つのバンクBNK0を構成し、残りの4つのセルアレイ1即ち、T−cellアレイ(1−1),C−cellアレイ(1−2),T−cellアレイ(1−3)及びC−cellアレイ(1−4)により、もう一つのバンクBNK1を構成している。
各セルアレイ1には、ワード線選択を行うロウデコーダ(RDEC)3が配置され、また隣接するT−cellアレイとC−cellアレイとが共有するセンスアンプ回路(SA)2を持つ。T−cellアレイとC−cellアレイは、詳細は後述するが、それぞれ複数の情報セルT−cellとC−cellを有し、それぞれ少なくとも一つずつの参照セルR−cellを有する。
情報セルT−cell,C−cellと参照セルR−cellとは同じメモリセル構造を有する。そして、T−cellアレイから情報セルT−cellが選択されたときに、これと対をなすC−cellアレイからは参照セルR−cellが選択される。同様に、C−cellアレイから情報セルC−cellが選択されたときに、これと対をなすT−cellアレイからは参照セルR−cellが選択される。
上下に4つずつ分けられたセルアレイ1の読み出し/書き込みデータは、データバス5,6を介し入出力バッファ7を介して、センスアンプ回路2と外部入出力端子との間で転送される。上下に4つずつ分けられたセルフアレイ1の間に、読み出しデータのエラー検出訂正回路であるECC回路8が設けられている。
図2は、センスアンプ回路2を共有するT−cellアレイとC−cellアレイの具体構成を示している。T−cellアレイには、一つのビット線BLに、複数の情報セルNANDストリング,T−NANDと、少なくとも一つの参照セルNANDストリングR−NANDとが接続されている。T−cellアレイには、T−cellアレイ側のビット線BLと対をなすビット線BBLに、複数の情報セルNANDストリング,C−NANDと、少なくとも一つの参照セルNANDストリングR−NANDとが接続されている。
センスアンプ回路2は、ビット線対BL,BBLのセル電流差を検出してデータをセンスする、電流検出型のセンスユニットSAUを配置して構成される。図では、一対のビット線BL,BBLに一つずつセンスユニットSAUを配置した場合を示しているが、通常は複数対のビット線で一つのセンスユニットを共有する方式が用いられる。
情報セルNANDストリングT−NAND,C−NAND及び参照セルNANDストリングR−NANDは、ビット線と直交する方向に複数個配列されて、セルブロックを構成する。セルブロックには共通に、ワード線TWL,CWL,RWLが配設される。
図3は、センスユニットSAUに接続される情報セルNANDストリングT−NAND(またはC−NAND)と参照セルNANDストリングR−NANDの具体構成を示している。それぞれ、複数個の直列接続された、電気的書き換え可能な不揮発性メモリセルM0−M31と、選択ゲートトランジスタSG1,SG2とを有する。同じ不揮発性メモリセルM0−M31を用いているが、情報セルNANDストリングT−NAND(またはC−NAND)ではこれらが情報セルT−cell(またはC−cell)として、また参照セルNANDストリングR−NANDでは参照セルR−cellとして用いられる。
センスユニットSAUは、データセンス時、情報セルNANDストリングT−NAND(またはC−NAND)と参照セルNANDストリングR−NAND内の対応するセルが同時に選択され、それらのセル電流Icと参照電流Irの差を検出して、データセンスを行う。
図4は、4値記憶を行う場合のメモリセルのデータレベル(しきい値レベル)分布を示している。情報セルT−cell,C−cellには、4つのデータレベルL0,L1,L2,L3のいずれか一つが書かれる。参照セルR−cellには、例えばデータレベルL0とL1の間に設定された参照レベルLrが書かれる。
4つのデータレベルL0−L3のビット割付は、情報セルT−cellとC−cellの間で異なる。例えば、4値データを上位ビットHBと下位ビットLBで(HB,LB)で表すものとして、T−cellアレイ側の情報セルT−cellでは、L0=(1,0),L1=(1,1),L2=(0,1),L3=(0,0)とされ、C−cellアレイ側の情報セルC−cellでは、L0=(0,0),L1=(0,1),L2=(1,1),L3=(1,0)とされる。
図4には、読み出し時、情報セルT−cell,C−cellに読み出すべきデータに応じて与えられる読み出し電圧R1,R2,R3及び参照セルR−cellに与えられる読み出し電圧Rrを示している。また、書き込み時、情報セルT−cell,C−cellに書き込むべきデータに応じて与えられる書き込みベリファイ電圧P1,P2,P3及び参照セルR−cellに与えられる書き込みベリファイ電圧Prを示している。
この実施の形態では、二つの512MbitのバンクBNK0,BNK1を用いて、1Gbitメモリを構成する場合のECC回路8の搭載方法とそのアクセスモードについて説明する。
ここで想定しているメモリは、×16IO構成であって、各バンクのページアドレスは独立に設定できるが、アドレス発生は全バンクに共通であり、ページアドレスをどのバンクに適用するのかを指定することによって、各バンクに割り付けるものとする。従って、バンク間でインターリーブしてページアドレスを利用する。
1バンク当たり1024kページである。各バンクの16IOに共通のページ長は32ビットで、このうち8ビットがパラレルに出力できるとする。ページ長は1回のワード線アドレスの設定とセンス動作で読み出せる1IOあたり、バンクあたりの最長データ長である。
このような構成ではセンスアンプ回路2からの1回のデータ転送で128ビットのデータが外部に出力される。すなわち構成上2のべき乗のデータが転送される。
このようなフラッシュメモリに搭載するECC回路8として、2ビットのエラーが訂正可能なBCH(Bose−Chaudhuri−Hocquenghem)符号即ち、2重エラー訂正BCH符号を導入する。以下、この符号を2EC−BCH符号という。2ビットエラー訂正を可能とするためには、異なる根をもつ連立方程式が必要である。2EC−BCHコードは、以下に述べるように、二つの原始多項式の積で表されるコード生成多項式を持つ巡回符号である。
使用するビット長は2n−1であり、情報として利用できるデータビットは2n−1−2nである。2mビットのデータを扱うにはn=m+1とすることになり、必要な量の2倍に近いデータ長を用いなければならない。
図1のメモリ構成で、128ビットの情報データの2ビットエラー訂正を行なうのに必要な2EC−BCHコードは、ガロア体GF(28)であり、使用するビット長は28−1=255であり、エラーの検査ビットとして16ビットが必要である。従って、128ビットデータ長に16ビットの検査ビットを加えた144ビットが必須となるが、残りの111ビットが余分になる。このとき図1に示すように例えば各バンクを2分した上下セルからのデータバス5は、各々72DQ線となり、トータル144ビットのデータを一括転送することになる。
必要のない余分な111ビットの扱いと、BCH符号の内でどのように情報ビット選択するかでECCシステムの効率が変わるので、最適なECCシステムを構成する方法を検討しなければならない。
必要なビット数は不良セルの置き換えのリダンダンシーをも含めて考えれば128ビットより多くなることもあるが、ここで検討する128ビットデータ長の場合から容易に拡張可能である。
(データのエンコーディング)
ガロア体GF(28)上の2EC−BCHについて概要を説明する。GF(256)の原始根をαとすると、これを根とする対応するGF(2)上の8次の原始多項式m1(x)は、数1のように表される。即ち、αのべき乗とm1(x)によるxのべき乗の既約多項式がお互いに対応するGF(256)の要素となる。
また、αの3乗を根とする8次の既約多項式として、m1(x)と互いに素な数1に示す多項式m3(x)を用いる。
これらの二つの原始多項式をもとに、2ビットエラー訂正可能なECCが構成される。書き込むべきデータに検査ビットを付加してエンコードするには、コード生成多項式として、数2のようなm1(x)とm3(x)の積多項式g(x)を作る。
2ビットエラー訂正が可能な、情報ビットとして利用できる最大ビット数は、28−1=255から検査ビット数16を引いた239ビットである。これらを、ビット位置16から254の係数をa16〜a254として、数3のような238次の情報多項式f(x)を作る。
実際にはデータとして用いるのは、239ビット中例えば128ビットであり、このとき111ビットの係数は“0” に固定して対応する次数の項がない情報多項式となる。239の項数の情報多項式f(x)のうち、その係数を“0”に固定する111項として、どの次数を選ぶかによって、後述するデコード時のシンドローム計算の計算量が異なるのでこの選択のしかたが重要となる。これは後に説明する。
情報多項式f(x)から、検査ビット16ビットを含むデータ多項式f(x)x16を作る。このデータ多項式から検査ビットを作るには、データ多項式f(x)x16をコード生成多項式g(x)で割った、数4のような15次の剰余多項式r(x)を求める。
この剰余多項式r(x)の係数b15〜b0を検査ビットとして用いる。すなわち、239から選ばれた128の係数ai(128)〜ai(1)を“情報ビット”とし、b15〜b0の16ビットを“検査ビット”として、下記数5に示す計144ビットがメモリに記憶させる“データビット”となる。
ここで、ai(k)は、メモリに外部から書き込むデータであり、このデータをもとに、チップ内部のECCシステムで検査ビットbjが作られ、これが同時にセルアレイに書き込まれることになる。
(データのデコーディング)
次に、セルアレイから読み出した144ビットのデータからエラーを検出し、2ビットのエラーまでを訂正する方法について説明する。
f(x)x16なる254次のデータ多項式の係数をメモリに記憶させてエラーが生じたとすれば、そのエラーも254次多項式で表される。このエラー多項式をe(x)とすれば、メモリから読み出したデータは、数6のような構造の多項式ν(x)になる。
この数6のエラー多項式e(x)の係数が“1”の項がエラーとなる。即ち、e(x)を検出することがエラー検出と訂正を行なうことに相当する。
第一段階として、読み出しデータ多項式ν(x)を原始多項式m1(x),m3(x)で割って各々の剰余をS1(x),S3(x)とする。数7に示すように、これは、e(x)をm1(x),m3(x)で割った剰余に等しいことは、ν(x)の構造から明らかである。
この剰余S1(x)とS3(x)をシンドローム(syndrome)多項式という。
2ビットのエラーがiとjビットにあるとすれば、エラー多項式は、e(x)=xi+xjである。この実施の形態においては、GF(256)の要素であるm1(x)=0の根αの指数(インデックス)に関するGF(256)内の計算でiとjを求める。
xnのm1(x)での剰余をpn(x)としたとき、αn=pn(α)である。下記数8に示すように、エラーの次数の対応するαi,αjのそれぞれをX1,X2とし、シンドロームS1(x),S3(x)に対してS1(α)とS3(α3)に対応する指数をσ1,σ2として、S1(α)とS3(α3)をそれぞれS1とS3とする。
m3(α3)=0であることから、次の数9の関係式が得られる。
第二段階として未知数X1とX2を根とする多項式ΛR(x)を考えると、数10のように、積X1X2がS1とS3で表現できるので、係数がsyndrome多項式から計算できる。
第三段階としてΛR(x)のGF(256)での根となるαnを見つければ、X1,X2=αnからエラービット位置iやjがαnのnとして求められる。即ち、ΛR(αn)=0を、n=0〜254で探索してヒットした指数nがエラービットとなる。
下記数11に示すように、1ビットエラーの時は、X1=S1,X1 3=S3=S1 3となり、エラー位置がS1からわかる。エラーがないときにはS1=S3=0となる。3ビット以上のエラーでその位置が計算出来ないときにはS1,S3の一方のみが0となる。
前述のように、エラー位置の検索は、ΛR(x)=0を満たすαnの指数nを求めることである。そのために、数10に示す式ΛR(x)を変形して、指数関係だけでnを求められるようにする。具体的に、ΛR(x)=0を解くことは、これにx=ασ1yなる変換を施すことにより、下記数12の変数yを求めることと等価になる。
この式を用いることより、変数計算から決まる指数とシンドローム計算から決まる指数とを直接比較して、一致する変数を見つけることができる。具体的には、数12を解くために、yにαnを代入して、下記数13の指数ynを求める。
そして、下記数14のように、シンドローム計算で求まる指数σ3−3σ1と変数計算から決まる指数ynとを比較して、一致したnがエラー位置対応のyの指数ということになる。
この変数yの指数を本来の変数xの指数に戻すためには、下記数15のように、ασ1をyに掛ければよい。
数15のαの指数σ1+nが、エラー位置に対応するxの指数であり、このxに対して、ΛR(x)=0となる。
具体的な計算を行なう際に必要となるものをまとめると、次の通りである。
エンコードでは、最高254次のデータ多項式f(x)x16からデータビットとして選ばれた128個の項のコード生成多項式g(x)による剰余多項式r(x)の係数の表(剰余テーブル)が必要である。検査ビットの計算にはデータビットで選ばれた項に対応するこの係数を選び、“0”または“1”の2元符号を用いたGF(2)上での加算をおこなう。
デコードでは、syndrome多項式S1(x)及びS3(x3)の計算を行なう際に、254次から0次までのm1(x)による剰余pn(x)の係数の表(剰余テーブル)が必要でこれから検査ビットと同様にして計算を行なう。
GF(256)を用いた2EC−BCHで使用可能なデータビット239を全て使用しないメモリシステムで、ECCでの計算時間を少なくするためには、情報多項式の中から実際に使用する項(次数)を選択するための具体的な選択方法が必要である。特にシンドロームの計算は剰余を効率的に求められるような項(次数)の選択をしなければならない。
まず剰余の計算の具体的な方法を説明する。
GF(2)上での計算では掛け算、割り算とも多項式の係数の足し算すなわち“1”の数の偶奇判定で行なわれる。関係する項の係数“1”の数が偶数なら“0”、奇数なら“1”が演算結果となるパリティチェックが基本の計算回路となる。
この実施の形態で用いる構成の単純な2種のパリティチェック回路(PC)を説明する。
図5(a),(b)は、2ビットのパリティチェック回路(PC)の回路構成とその回路記号である。これは、2ビットの信号a,bをXOR回路とXNOR回路でロジック演算して、“1”の数が偶数のときに出力ノードEPに“1”を出力する。
図6(a),(b)は、4ビットのパリティチェック回路(PC)の回路構成とその回路記号を示している。これは、4ビットの信号a,b,c,dを、二つずつのXOR回路とXNOR回路でロジック演算して、“1”の数が偶数であるときに、出力ノードEPに“1”を出力する。
このような2種のパリティチェック回路を用いて、GF(256)の多項式のGF(2)上での積の計算法を、図7に示す。GF(256)の多項式の演算は、原始多項式が8次であるから、全て7次多項式pn(x)間の演算となり、四則演算結果は全てどれかの多項式pn(x)になる。{pn(x)}−1なる除算は、p255−n(x)の積になる。
pn(x)のm次の項の係数をPn mと表して、下記数16の7次多項式pi(x),pj(x)の積は、図7のように計算される。係数Pn mは無論“0”か“1”である。
xn≡pn(x)(mod m1(x))であるので、14次の項は掛けるpj(x)の7つ先にpj+7(x)が出てくる、という規則を使うと、多項式pi(x)とpj(x)の積は、図7に示すように、各多項式の係数間の掛け算と和演算(=パリティチェック)とで可能となる。
すなわち、1か0との掛け算を行なったものを7から0の各次数ごとに和であるパリティチェックを行い、その結果がpi(x)pj(x)の各次数の係数になる。掛けるpj(x)については7つ先までの多項式の係数が必要となる。
回路としてはパリティチェック回路のみでよく、掛けるpj(x)からpj+7(x)の係数に固有の入力を行なう回路をもうけることになる。これは係数Pj m=0のパリティチェックはないからである。パリティチェック回路は、図5及び図6に示した2ビットパリティチェック回路と4ビットパリティチェック回路を、必要な入力数に応じて組み合わせて用いる。
このような演算方法をエンコードで検査ビットを生成する際に応用する。次にこれを説明する。
検査ビットの計算は、コード生成多項式g(x)で情報データから作られたデータ多項式f(x)x16を割って剰余多項式r(x)を求めることによって得られる。この演算を行うためには単項のxiをg(x)で割った15次の剰余多項式ri(x)の係数を予め求めておき、この係数をpn(x)の積の場合と同じように用いる。ri(x)の係数をRi m(m=0〜15)とし、情報ビットとしてのf(x)x16のxiの係数をaiとする。
具体的な計算は、データビットをa16〜a254としたとき、このうちの111ビット分を後のシンドローム計算が少なくなるように選んで“0”に固定してから、図8に示すように、データ多項式の係数aiと剰余多項式の係数Ri mの掛け算と、同じ次数の項の係数の和演算(パリティチェック)によって行なわれる。すなわちデータビットaiが“1”である次数の剰余ri(x)の係数Ri mを各mごとにGF(2)上での和すなわちパリティチェックを行い、結果を検査ビットbmとする。
次に、111ビットの“0”に固定するビット位置の選択を行なう際に必要となるデコードでの計算法を説明する。
まず、メモリセルから読み出したデータdiを係数とする多項式ν(x)のm1(x)での剰余を求めるのがシンドローム多項式S1(x)の計算である。この演算は、図9に示すように、xi(i=254〜0)のm1(x)による剰余pi(x)の係数Pi m(m=0〜7)とdiの積と、その結果の和(パリティチェック)とにより行なわれる。すなわち、diが“1”であるpi(x)のm次の係数Pi mのパリティチェックの結果をシンドローム多項式S1(x)のm次の係数とする。
この計算では、diが“0”であるところと、Pi mが“0”であるときは計算を行なわないので、238の情報ビット全てを使用しない場合に使用しないビットの選択が計算量を決めることになる。
次にもう一つのシンドローム多項式S3(x)に関連する計算法を説明する。
シンドローム多項式S3(x)に関連してエラー位置jの検索に必要なのは多項式S3(x3)である。S3(x)自体は、ν(x)のm3(x)での剰余である。ν(x3)とS3(x3)との間には、xiのm1(x)による剰余多項式pi(x)の係数をPi m(m=0〜7)とし、xiの係数をdiとして、次の数17のような関係がある。
以上の数17から、S3(x3)はν(x)の係数diと剰余p3i(x)によって計算できる。従って必要なのは、xiのm1(x)でのpi(x)の係数Pi mであり、具体的な計算法は、図10のようになる。
この計算でもdiが“0”であるところと、P3i mが“0”であるときは計算を行なわないので、238の情報ビット全てを使用しない場合に使用しないビットの選択が計算量を決めることになる。デコードではシンドローム多項式の計算の後エラー位置を検索する演算などを行なうので、計算時間を短くするためにも計算量を出来るだけ少なくしたい。これは、238次の情報多項式f(x)の中から、例えば最適な128個の項(次数)の選択を行なうことにより可能となる。次にこの選択の方法について説明する。
シンドローム多項式S1(x)とS3(x3)は同時に並列に計算を行なう。各多項式の各次数の係数の計算は“1”のパリティチェックであるのでどの次数の係数の計算もバラツキなくほぼ同じ時間で行なわれれば計算量は減る。
そのための選択の一つの方法は、シンドローム計算に用いられる7次の剰余多項式pn(x)とp3n(x)の係数が“1”の総和を、各nについて求め、総和の数の少ない方から必要なデータビット数だけのnを選択する。この際最初の16個は検査ビットとしてx0〜x15の係数を使うので固定し、17個目以降の選択に係数の“1”の総和の昇順選択をする。
また、同じ総和の数のグループ内で選択が終了する際には、係数“1”がpn(x)とp3n(x)内で各次数の項の間に均等に分布するnを基準に同じ次数項での“1”の重なりが少ない順に選択する。すなわち基準となるnのpn(x),p3n(x)の係数“1”の次数での項の係数の総和が少ない順に選択する。
このような選択方法で選んだ254次のデータ多項式f(x)x16で144ビットデータを扱う場合に使用する、144個の次数nを、図11に示す。
この選択方法は必ずしもパリティチェックを行なう多項式の各次数の係数“1”の数の最大のものを最も少なくするとは限らないが、全ての組合せの中から計算ステップが最小となるものを探索する様な大規模な計算を必要としないでシンドローム計算回路規模を減らしかつ、シンドローム計算のステップ数を減らす簡便な方法ではある。
図12は、g(x)の剰余rn(x)であって、選択されたxnの剰余rn(x)の各次数での係数が“1”であるnの表である。
例えば、x15の係数が“1”であるrn(x)の次数nは、図12のm=15の列の係数“1”の数が1から62の欄に書かれている17,18,22,…,245,249,250である。チェックビットのx15の係数に相当するb15は情報データ多項式f(x)x16の中のこの選択されたn次の項の係数のパリティチェックの結果として得られる。
このようにして、図12の表から行なう検査ビットの計算回路例を図13に示す。xmのm=11,5,2は図12の表からパリティチェックするビット数が最大72個であるので、図13ではこの場合を例として示す。xnのg(x)による剰余多項式rn(x)のm次項の係数Pn mが“0”でない次数nは表にしてあるので、各mについて表からnを選択し、anを用いてパリティチェックを行なう。
入力の数が4の剰余系のいずれに属するかによって用いるパリティチェック回路(PC)を組合せる。すなわち、4で割り切れれば4ビットPCのみで、1が余れば2ビットPCの一方の入力端にVddを与えたもの(即ちインバータ)を加え、2が余れば2ビットPCを加え、3が余れば4ビットPCの一つの入力端にVddを与えたものを加える。
m=11,5,2の例では72入力であり、このとき検査ビット計算回路は図13に示すように、4段のパリティチェック回路により構成することができる。初段は、18個の4ビットPCで構成する。2段目は18入力となるので、4個の4ビットPCと1個の2ビットPCを用いて構成する。3段目は5入力となるので1個の4ビットPCとインバータで構成する。4段目は2入力なので、2ビットPCとなる。4段目出力が検査ビットbmとなる。
検査ビットの計算の場合と同様の計算をシンドローム計算でも行なうので次にこれを説明する。
図14はシンドローム多項式S1(x)の計算で使用する7次の剰余多項式pn(x)の選択されたnでの各次数の係数“1”のnの表である。例えばx7の係数が“1”であるpn(x)の次数nは、表のm=7の列の係数“1”の数が1から56の欄に書かれている7,11,12,…,237,242,245である。S1(x)のx7の係数はデータ多項式ν(x)の中のこの選択されたn次の項の係数のパリティチェックの結果として得られる。
このようにして、図14の表から行なうシンドロームS1(x)の計算回路例を図15に示す。m=6,2の場合に、図14からパリティチェックするビット数が最大66個となるので、図15ではこの場合を例として示す。xnのm1(x)の剰余多項式pn(x)のm次項の係数Pn mが“0”でない次数nは表にしてあるので、各mについて表からnを選択し、データビットdnを用いてパリティチェックを行なう。
入力の数が4の剰余系のいずれに属するかによって用いるパリティチェッカ(PC)を組合せる。すなわち4で割り切れれば4ビットPCのみで、1が余れば2ビットPCの一方の入力端にVddを与えたもの(即ちインバータ)を加え、2が余れば2ビットPCを加え、3が余れば4ビットPCの一つの入力端にVddを与えたものを加える。
m=6,2の例では66入力であるので、この場合も4段のパリティチェック回路で構成する。初段は、4ビットPCを16個と2ビットPC1個で構成する。2段目は17入力となるから、4ビットPCを4個とインバータで構成する。3段目は5入力となるので4ビットPC1個とインバータにより構成する。4段目は2入力となるので、2ビットPC1個となる。4段目出力が、シンドローム係数(s1)mとなる。
シンドローム多項式S3(x3)の計算にも同様であり、次にこれを説明する。
図16は、シンドローム多項式S3(x3)の計算で使用するx3nのm1(x)での剰余p3n(x)の選択されたnでの各次数の係数“1”の次数nの表である。
例えば、x7の係数が“1”であるp3n(x)の次数nは、表のm=7の列の係数“1”の数が1から58の欄に書かれている4,8,14,…,241,242,249である。S3(x3)のx7の係数に相当する(s3)7はデータ多項式ν(x)の中のこの選択されたn次の項の係数のパリティチェックの結果として得られる。
その計算回路例を図17に示す。図16から、xmのm=5がパリティチェックするビット数が最大73個であるので、図17はこの場合を例として示す。x3nのm1(x)の剰余多項式p3n(x)のm次項の係数P3n mが“0”でないnは表にしてあるので、各mについて表からnを選択し、dnを用いてパリティチェックを行なう。
m=5の例では73入力であるので、この場合も4段のパリティチェック回路で構成する。初段は、4ビットPCを18個とインバータとで構成する。2段目は19入力となるので、4ビットPCを4個と4ビットPCの一つの入力端をVddとしたものとで構成する。3段目は5入力となるので4ビットPCを1個とインバータで構成する。4段目は2入力となるので、2ビットPC一つで構成する。4段目出力が、シンドローム係数(s3)mとなる。
次に指数比較によりエラー位置検索を行うエラー位置検索回路の回路規模を小さくするための方法について説明する。
必要な計算は、数14に示す指数の合同式を解くことであり、具体的には二つの合同式を解く必要がある。はじめに、シンドロームの指数からy2+y+1=αynのynを求める。次に、このynに対応するy=αnの指数nを対応関係で見つけた後、x=ασ1yによってxの指数iを合同式を解いて求める。
合同式はいずれもGF(256)であるので255を法としたものである。この計算はまともに行なうと、255×255の規模の比較を行うことに相当し、回路規模が大きくなる。そこで回路規模を小さくするために、計算を並列化する。
すなわち、255を互いに素である二つの因数(第1と第2の整数)に分解し、これらを法とする二つの合同式に分離して、これらの合同式を同時に満たす数はもともとの合同式も満たすことを利用する。この場合、二つの整数はできるだけ差が小さいことが、二つの合同式の演算を同時に並行させる場合に、それらの回路規模と計算時間を近いものとする上で好ましい。
具体的に、255は、17×15,51×5,85×3のように分解できるが、これらのうち17×15を用いて、17と15をそれぞれ法とする合同式を同時に解くことにする。
まず、ynを求めるには、数18の合同式を用いる。即ち、15倍した指数間の17を法とした加減算と、17倍した指数間の15を法とした加減算とを同時並行させる。
次に、指数iを求めるには、数19の合同式を用いる。ここでも、15倍した指数間の17を法とした加減算と、17倍した指数間の15を法とした加減算とを同時並行させる。
以上の指数の和演算や差演算は、後に説明するが、新たに工夫した2進数の加算器を用いる。合同式を分解してその演算を同時並行させることにより、計算規模を小さく、従って計算時間を短くすることができる。
次に、GF(256)での各インデックス間の関係をまとめておく。
図18は、xnのm1(x)による剰余であるpn(x)の各次数の係数の“0”,“1”と、その0〜3次と4〜7次の係数をそれぞれ16進表示で表したものを各インデックスnについて示した。以下の全てのインデックスの関係はこの表をもとに計算される。すなわちインデックスを用いたm1(x)の根αの四則はこの表のどこかに一対一で対応する。
図19A及び図19Bは、インデックスn=0〜255について、y=αnに対してy2+y+1=αynのインデックスynと、対応する多項式の係数及びその16進表示を示している。同じynに二つのnが対応する場合がエラー数2であり、ひとつの場合がエラー数1である。エラー数2の場合はペアとなるインデックスの値も示した。
なおインデックス85と170では、y2+y+1=0である。これは、S1とS3が両方とも0か、S3のみが0であることを意味し、それぞれエラーなしか3つ以上のエラーかある場合に相当する。この場合はシンドロームの値を用いてデータ訂正の回路を直接制御する系を設けるようにする。
図20は、インデックスnとynの対応関係を改めてまとめたもので、nの順にynを並べた表と、ynの順にnを並べた表とを併せて示している。後者ではyn=0の場合を除いて、同一のynに二つのnが対応することを示している。なお、nが85と170では対応するynはない(ガロア体の要素0に対応)。
図21は、各インデックスynが15yn(mod 17)と17yn(mod 15)によって一意的に分類されること示すもので、左半分は15yn(mod 17)の値の小さいものから、右半分は17yn(mod 15)の小さいものから、それぞれynを並べている。
この図21の表から、数18に示した合同式の解法の並列化によって計算規模を縮小できることが分かる。15yn(mod 17)と17yn(mod 15)の合同式計算の結果の共通要素がシンドロームのインデックスから求められるynになる。
図22は、データビットとして選択されたインデックスiと対応するデータビットの物理的なビット位置kの対応を示すともに、インデックスiについて15i(mod 17)と15i(mod 15)で分類したものである。インデックスiが、15i(mod 17)と15i(mod 15)のペアで一対一に分類されることが見て取れる。この表から、数19に示した合同式の解法の並列化によって計算規模を縮小できることが分かる。
15i(mod 17)と15i(mod 15)の合同式計算の結果の共通要素が物理的なビット位置を計算する際にnとシンドロームS1のインデックスから求められるi(すなわちk) になる。
次に、剰余類を示すインデックス(指数)間の加減算を行う加算器について説明する。
図23(a),(b)は、2進数の加算を行う基本単位であるフルアダーの回路構成とその回路記号を示している。フルアダーは、加えるビットAとBを、XOR回路とXNOR回路でロジック演算を行い、更に桁上げ(キャリー)信号Cinとのロジックをとって、A,B,Cinの和Soutと、桁上げ信号Coutを出力する。
このフルアダーを用いて、エラー位置検索のための合同式計算に用いる加算器を次のように構成する。
図24は、17を法として、その剰余としての和を求めるインデックス加算回路である5ビット加算器(mod17)200の構成を示し、図25はその回路記号を示している。5ビットの第1段加算回路201と、その和が17以上であることを検出して桁上げする桁上げ補正回路203と、この桁上げ補正回路203と共に、和が17以上の場合に32に対する17の補数15(=32−17)を加えるための第2段加算回路202とを有する。
桁上げ補正回路203は、各演算サイクルで発生するクロックCLKによりノード充電を行い、それが第1段加算回路201の出力状態により放電されるか否かによって、信号PF0を発生するものである。具体的に桁上げ補正回路203は、第1段加算回路201の最上位ビット出力S4’が“1”でありかつ、それ以外のビット出力S0,S1’〜S3’の少なくとも一つが“1”であることを検出して、和が17以上であることを検出して、信号PF0を発生する。
4ビットの第2段加算回路202には、第1段加算回路201の第2〜第5ビット出力S1’〜S4’と、桁上げ補正回路203の出力PF0及び“0”とを加算入力として、所望の補数加算を行う。具体的に、第1段加算回路201の和が17のときにこれにその補数(01111)を加えるために、第1段加算回路201に対して、(00001)を加え、更に第2段加算回路202で(01110)を加える、というロジックが組まれている。
図26は、15を法として、その剰余としての和を求めるインデックス加算回路である4ビット加算器(mod15)300の構成を示し、図27はその回路記号を示している。4ビットの加算器301と、その出力和が15以上であることを検出して、補数1(=16−15)を加えるための桁上げ補正回路302とを有する。桁上げ補正回路302は、出力S0〜S3が全て“1”であること(言い換えれば和が15であること)を検出して最下位ビット段への桁上げ入力信号PF0を出力する。これにより、15を法とする加算回路を実現している。
次に実際にエラー位置検索に適用する例を示す。
図28は、上述の5ビット加算器(mod17)200を用いて、数18の第1式、15yn≡15σ3−45σ1(mod 17)の右辺の指数演算を行うインデックス加算回路200aを示している。
入力はσ3である。シンドローム計算で得られた7次の多項式の係数(s3)m (m=0〜7)をデコードして15σ3の17を法としての剰余類のインデックス位置の入力信号を選択しそのインデックスを2進数に変換した5ビットの数値をデータバス213aに発生させるために、17個のデコード回路211aが設けられる。
制御入力はσ1である。シンドローム計算で得られた7次の多項式の係数(s1)m(m=0〜7)をデコードして−45σ1の17を法としての剰余類のインデックス位置の制御信号を選択し、そのインデックスを2進数に変換した5ビットの数値をデータバス214aに発生させるために、17個のデコード回路212aが設けられる。
データバス213a,214a上の2進数に変換された値は、5ビット加算器(17)200に入り、和が求められて、17を法とした数値がデータバス215aに出力される。出力は、前に示した表の15yn(17)に相当する15ynの17を法としての類を示すインデックスの2進数表示である。
図29は、図28における入力及び制御入力のデコード回路211a,212aの構成例を示す。シンドローム多項式の係数であるm=0〜7の信号を選択的にゲート信号とするトランジスタを直列したNAND回路を各剰余類に属する既約多項式pn(x)の数だけ並列接続して構成される。
クロックCLKにより制御されるプリチャージトランジスタにより共通ノードをプリチャージし、その放電の有無で剰余類のインデックス信号とする。係数信号配線と、その反転信号配線とがペアをなして配設され、これがNAND回路を構成するトランジスタのゲートにデコードのコードに従って接続される。
並列接続されるNANDノードは、各剰余類インデックスあたり法が17なら255の二つの互いに素な因数への分解のもう一方の数15であり、法が15なら17である。
剰余類のインデックスを示す信号は、反転され2進数表示にデコードされる。その際、2進数の各桁Ai/Biは、クロック/CLKでリセットされるラッチ216aにより、データバス213a(或いは214a)に保持される。
同様のデコーダ回路が制御信号入力にも用いられるが、具体的なデコードのコードを図30に示す。この表は既約剰余pn(x)のインデックスnを15倍した法17の剰余類15n(17)として分類したものである。0から16のインデックスで分類され、各々の類には15個のnが含まれ、これらに対応するpn(x)の各次数の係数に従ってデコーダのトランジスタゲートへの信号配線接続が決まる。
例えばインデックス1においては、並列にOR接続されるNANDのノードは、nが161,59,246,127,42,93,178,144,212,229,110,195,8,76,25に相当する。
図31は、既約剰余pn(x)のインデックスnを−45倍して法17の剰余類−45n(17)として分類したものである。0から16のインデックスで分類され、各々の類には15個のnが含まれ、これらに対応するpn(x)の各次数の係数に従ってデコーダのトランジスタゲートへの信号配線接続が決まる。
例えばインデックス1においては、並列にOR接続されるNANDのノードは、nが88,173,122,156,71,20,190,207,241,54,37,139,105,224,3に相当する。
図32は、4ビット加算器(mod15)300を用いて、数18の第2式、17yn≡17σ3−51σ1(mod 15)の右辺の指数演算を行うもの、即ちシンドロームのインデックスσ3とσ1からインデックス17σ3−51σ1(mod15)を求めるインデックス加算回路300aを示している。
入力はσ3である。シンドローム計算で得られた7次の多項式の係数(s3)m(m=0〜7)をデコードして17σ3の法15の剰余類のインデックス位置を選択し、インデックスを2進数に変換するために、15個のデコード回路311aが設けられる。
制御入力はσ1である。シンドローム計算で得られた7次の多項式の係数(s1)m(m=0〜7)をデコードして−51σ1の法15の剰余類のインデックス位置を選択し、インデックスを2進数に変換するために、5個のデコード回路312が設けられる。即ち、法が15なので51とは3を共通因子として含み、剰余類の数は15を3で割った5となり、その剰余類の法15でのインデックスは0,3,6,9,12となるのでデコード回路312aの数は5個で制御入力は5本となる。
出力には、前に示した表の17yn(15)に相当する17ynの15を法としての類を示すインデックスが得られる。
デコーダ回路は、図29のそれと同じであるので、示さないが、剰余類分類のデコードのコードが異なる。
図33は、既約剰余pn(x)のインデックスnを17倍して法15の剰余類17n(15)として分類したものである。0から14のインデックスで分類され、各々の類には17個のnが含まれ、これらに対応するpn(x)の各次数の係数に従ってデコーダのトランジスタゲートへの信号接続が決まる。
例えばインデックス1においては、並列にOR接続されるNANDのノードは、nが173,233,203,23,83,158,188,68,38,128,143,98,53,218,8,113,248に相当する。
図34は、既約剰余pn(x)のインデックスnを−51倍して法15の剰余類−17n(15)として分類したものである。0,3,6,9,12のインデックスで分類され、各々の類には51個のnが含まれ、これらに対応するpn(x)の各次数の係数に従ってデコーダのトランジスタゲートへの信号接続が決まる。
例えば、インデックス3においては、並列にOR接続されるNANDのノードはnが232,22,117,122,62,…,47,52,27,2に相当する。
図35は、上述した二つのインデックス加算回路200a,300aの演算結果を統合して、次の演算の信号を出力するための出力バス構造を示す。インデックス加算回路200a,300aの出力を2進数表示データとして出すためにそれぞれ、5本,4本の出力バス215a,315aが用意される。
これらの出力バス215a,315aの信号から、これまで示した表から得られる {15yn(17),17yn(15)}からynへ、 ynからnへ、nから15n(17),17n(15)へのデコードを一気に行い、次の計算へと移る。
図36は、数19の第1式、15i≡15n+15σ1(mod 17)の右辺の指数演算を行うインデックス加算回路200bである。入力は2進数表示のバス215a,315aの信号で、これをデコードして15nの17を法としての剰余類インデックスを入力とするために17個のデコード回路211bが設けられる。
15yn(17)と17yn(15)からは、最大二つの15n(17)のインデックスが得られるので、二つの5ビット加算器(17)200で計算する必要があり、これらの入力が同時に選択されてバス上でぶつからないように、デコード回路211bの出力には、二つのバス213b1,213b2が独立に設けられる。
制御入力はσ1である。シンドローム計算で得られた7次の多項式の係数(s1)m(m=0〜7)をデコードして15σ1の法17での剰余類のインデックス位置を選択してそのインデックスを2進数に変換して二つの加算器200に入力するために、17個のデコード回路212bが設けられ、その出力がバス214bに得られる。
おのおのの加算器200からは、15i(17)に相当する15iの17を法としての類を示す2進数表示のインデックスが得られ、これらがデータバス215b1,215b2に出力される。
図37は、デコード回路211bの構成を示す。前段のインデックス加算回路200a,300aの出力である剰余類インデックス17yn(15)と15yn(17)の信号を選択的にゲート信号とするトランジスタを直列接続したNAND回路を、各剰余類間の関係によって決まる数だけ並列接続して構成される。NAND回路の共通ノードを制御信号CLKによりオンするプリチャージトランジスタによりプリチャージして、その放電の有無で選択された剰余類のインデックス信号とする。
後に示すデコード表から分かるように、二つの剰余類が選択されるので、同時に選択されたものが同じバスを使用しないように、同一の剰余類に属してもデコードを分けて、別々のバス(bs1)213b1,(bs2)213b2に出力する。NANDを構成するトランジスタはゲート入力として、剰余類インデックス17yn(15)と15yn(17)及びその反転信号をペアで配線し、これをコードに従ってゲートに接続する。剰余類インデックスは、反転され、2進数表示でデコードされる。二つのインデックスは、デコードによって、バス213b1と213b2に振り分けられる。各桁Ai/Biは、クロック/CLKでリセットされるラッチ216bによりバスに保持される。
制御入力側のデコード回路も同様に構成される。
次に、剰余類インデックス間の関係とデコーダの入力となるコードを示す。
図38は、剰余類インデックス15yn(17),17yn(15),15n(17)の間の関係を示している。またこれらのインデックスに対応するynとnの類を併せて示している。実際のデコードに利用されるのは剰余類インデックスのみである。
また剰余類15n(17)は、二つのバスbs1,bs2にわけて、それぞれのバスにつなぐインデックスを示した。これは、ペア{15yn(17)}{17yn(15)}で同時に選択される二つの15n(17)が必ず異なるバスに属するようにしたものである。但し例外として、{15yn(17),17yn(15)}={0,0}のときは、1ビットエラーであるので、バスbs1,bs2に同時に“0”を送り、二つの加算器で同じ計算を行わせて、誤って2ビットエラーと検出しないようにする。
この例外を除いて、例えば剰余類15n(17)=5には、{15yn(17),17yn(15)}={11,13},{13,5},{14,0},{16,1},{0,9},{4,8},{4,13},{5,1},{6,2},{6,14},{10,2},{11,6},{13,3},{14,1},{16,5}が対応して、{11,13},{13,5},{14,0},{16,1)は、バスbs1に、残りはバスbs2につなぐので、デコード回路はその様にグループ分けされる。
この表に従ってデコード回路のNAND部15yn(17),17yn(15)のゲートを2進数で表したインデックスに従って接続することで、バス213b1,213b2に15n(17)の2進数が出力される。
図39は、数19の第2式、17i≡17n+17σ1(mod 15)の右辺の指数演算を行うインデックス加算回路300bである。入力はインデックスバス215a,315aの信号でこれをデコードして17nの15を法としての剰余類インデックスの2進数表示を得るための、15個のデコード回路311bが設けられている。
17yn(15)と15yn(17)からは最大二つの対応する17n(15)のインデックスが得られるので、二つの4ビット加算器(15)300で計算する必要がある。これらの加算器の入力が同時に選択されてぶつかることがないように、独立のバス(b1)313b1とバス(b2)313b2をもつようにデコード回路311bが構成される。
制御入力はσ1である。シンドローム計算で得られた7次の多項式の係数(s1)m(m=0〜7)をデコードして17σ1の法15による剰余類インデックス位置を選択しそのインデックスを2進数に変換するために、15個のデコード回路312bが設けられ、その出力がバス314bに得られる。
おのおのの加算器200から得られる、17i(15)に相当する17iの15を法としての類を示すインデックスの2進数表示が、バス315b1,315b2に出力される。
入力側のデコード回路311bは、バスbs1,bs2の本数が4本になる。そのコードの表を図40に示す。この表は剰余類インデックス15yn(17),17yn(15),17n(15)の間の関係を示している。またこれらのインデックスに対応するynとnの類を併せて示している。実際のデコードに利用されるのは剰余類入インデックスのみである。
剰余類15n(17)は、二つのバスbs1,bs2にわけて、それぞれのバスにつなぐインデックスを示した。これは、ペア{15yn(17)}{17yn(15)}で同時に選択される二つの17n(15)が必ず異なるバスに属するようにしたものである。但し例外として、{15yn(17),17yn(15)}={0,0}のときは、1ビットエラーであるので、バスbs1,bs2に同時に“0”を送り、二つの加算器で同じ計算を行わせて、誤って2ビットエラーと検出しないようにする。
この例外を除いて、例えば、剰余類15n(17)=3には、{15yn(17),17yn(15)}={2,2},{2,13},{15,2},{15,13},{0,8},{0,13},{1,2},{3,0},{3,14},{6,6},{6,14},{11,14},{14,0},{14,14},{16,2}が対応し、{2,2},{2,13},{15,2},{15,13}はバスbs1に、残りはバスbs2につなぐように、デコード出力される。
NAND部15yn(17),17yn(15)のゲートを、この表に示した2進数で表したインデックスに従って接続することで、バスbs1,bs2に17n(15)の2進数出力が得られる。
図41は、インデックス加算回路200b,300bの演算結果を統合して、エラー位置yをビット位置として検出する部分を示す。加算回路200b,300bの出力はそれぞれ、15i(17)バス215b1,215b2及び、17i(15)バス315b1,315b2に出力される。
これらのバス上のペアによってiを一意的に指定できることは、先に示したkとiと15i(17)および17i(15)の表から明らかである。{15i(17),17i(15)}の組からkを指定できるので、デコード回路317でkを選択する。αiが演算結果の最終的な出力となる。kは、選択される場合1又は2個選択され、2ビットまでのエラー位置を示すことになる。
図42は、デコード回路317の構成例である。17yn(15)の二つのバス315b1,315b2に対して、iに対応する信号をゲートに接続したNANDを並列に並べたものに対し、更に15yn(17)の二つのバス215b1,215b2に対して同様にiに対応する信号をゲートに接続したNANDを並列に並べたものを接続する。このいわばOR・NAND回路により、クロックCLKで予めプリチャージしたノード318が放電されれば、iが選択されたことになる。ノード318の反転信号をαiとして出力する。
図43は、剰余類インデックス15i(17),17i(15),i,kの関係をまとめて示している。物理的なビット位置kの順番にビット位置のインデックスiを並べている。また各i に対応する剰余類インデックス{15i(17),17i(15)}も示した。
これらの情報をもとに最終的にエラーを訂正する回路を、図44示す。エラー訂正回路はシンドローム計算結果によって動作が異なる。すなわち、シンドロームS1×S3が0でなければ、1つ又は2つのエラーが発生しており、データ訂正を行なう。S1×S3=0の場合は二つに別れ、S1=S3=0であればエラーなしでデータを修正する必要はない。S1又はS3の一方のみが0であれば、3ビット以上のエラーが発生しており修正は不可能である。
これらの場合の動作を判別するために、シンドローム多項式の係数(s1)mと(s3)mの係数がすべて“0”の場合を検出するNORゲートG1,G2を用いた判定回路401が設けられている。3ビット以上のエラーがある場合は、ゲートG1,G2の一方の出力が“0”となる。これを受けて、NORゲートG5が訂正不能(non correctable)を示す“1”を出力する。このとき、NORゲートG4の出力は“0”となり、エラー訂正を行うデコード回路402を非活性にする。
エラーがない場合は、ゲートG1,G2の出力が共に“1”となり、NORゲートG4,G5ともに“0”を出力し、NANDゲートG7からなるデコード回路402を非活性にする。
1又は2ビットのエラーがある場合、ゲートG1,G2の出力は共に“0”となり、NORゲートG4の出力“1”がデコード回路402を活性にする。αiで選択されたビット位置kのデータdkを反転する反転回路403として、2ビットパリティチェック回路を用いて、エラーがない場合はdkをそのまま、エラー位置ではこれを反転して出力する。
エラー位置検出の演算回路系を無駄に働かせないようにするため、一番可能性の高いエラーなしの場合(S1=S3=0)、その演算回路系のクロックCLKを“L”固定にする。そのために、クロック転送を制御するNANDゲートG6が設けられている。即ち、NANDゲートG3の出力が“L”になると、NANDゲートG6が非活性になり、クロックCLKが“L”固定となる。これにより、エラー位置検索回路内の各デコード回路で無駄な充放電が行われなくなる。
この実施の形態によると、2ビットエラー訂正BCHコードを用いたオンチップのECC回路の回路規模と計算時間を効果的に小さくすることができる。即ち、エラー位置検索のためにこの実施の形態では、GF(256)の要素の積や商演算を、要素の生成元の指数の加減算として行う。その際、255を互いに素である因数15と17に分解し、17を法として、加減算の対象数に15を乗じた加減算と、15を法として、加減算の対象数に17を乗じた加減算とを並列に行い、その演算結果から255を法とする加減算結果を得る。
これにより、指数の加減算を行う回路規模を、効果的に縮小することが可能になる。
図45は、1ブロック化して示したメモリコア回路10との関係で、ECC回路8の機能ブロック構成を示したものである。
エンコード部81では、データ多項式f(x)x16をコード生成多項式g(x)で割って、その剰余多項式r(x)の係数として検査ビットを求める。情報ビットと共に検査ビットがメモリコア回路10のセルアレイに書き込まれる。
多項式ν(x)で表されるメモリコア回路10からの読み出しデータは、シンドローム演算部82でシンドローム計算が行われる。得られたシンドロームに基づくエラー位置検索を行う指数計算部83は、インデックス加算回路200a,300aの並列演算、更にその演算結果に対するインデックス加算回路200b,300bによる並列演算により行われる。エラー訂正部84でエラー位置のビットデータが反転される。
この発明は、上記実施の形態で説明したフラッシュメモリの他、如何なる半導体メモリにも適用可能である。
例えば図46は、通常のNAND型フラッシュメモリのメモリコア回路構成を示している。このメモリコア回路は、セルアレイ1a、センスアンプ回路2a及びロウデコーダ3aを有する。セルアレイ1aは、直列接続されたメモリセルM0−M31を有するNANDセルユニット(NANDストリング)を配列して構成されている。NANDセルユニットNUの一端は選択ゲートトランジスタS1を介してビット線BLe(BLo)に、他端は選択ゲートトランジスタS2を介して共通ソース線CELSRCに接続されている。
メモリセルの制御ゲートは、ワード線WL0−WL31に接続され、選択ゲートトランジスタS1,S2のゲートは選択ゲート線SGD,SGSに接続されている。ワード線WL0−WL31と選択ゲート線SGD,SGSを選択駆動するのがロウデコーダ3aである。
センスアンプ回路2aは、同時書き込み及び読み出しを行う1ページ分のセンスユニットSAを有する。各センスユニットSAには、ビット線選択回路4により、隣接するビット線BLe,BLoのいずれかが選択されて接続される。これにより、一つのワード線WLiと複数の偶数番ビット線BLe(或いは複数の奇数番ビット線BLo)により同時に選択されるメモリセルの集合が、同時に書き込み/読み出しが行われる1ページ(1セクタ)となる。非選択側のビット線は所定電位を与えたシールド線として利用することにより、選択ビット線間の干渉を防止することができる。
ワード線WL0−WL31を共有するNANDセルユニットの集合は、データ消去の単位とするブロックを構成し、図のようにビット線の方向に複数のブロックBLK0−BLKnが配置される。
この様なコア回路を持つNAND型フラッシュメモリにおいても、微細化や多値化が進むと、2ビット以上のエラー訂正をチップ内で実現する必要性が増える。この発明のエラー訂正システムは、エラー検出訂正の計算規模を抑えて高速演算可能としており、従ってこの様なメモリに適用して有効である。
なお、この実施の形態の並列演算方式は、有限体の剰余類の一般的性質を利用するものであって、GF(2n)のBCHコードを用いる2ビットエラー訂正システム以外にも適用可能である。また実施の形態では、2ビットエラーまで訂正可能な2EC−BCHコードを説明したが、より一般的に、t≧2として、t重エラー訂正BCH符号を用いることができる。この場合、ガロア体GF(2n)のt個の元α,α3,…,α2t−1をコードの根に持つBCH符号となる。
1…セルアレイ、2…センスアンプ回路、3…ロウデコーダ、5,6…データバス、7…IOバッファ、8…ECC回路、201…演算部、201…入力端、202…出力端、203…スイッチ回路、204…制御入力端、200…5ビット加算器(mod17)、300…4ビット加算器(mod15)、201,202,301…加算回路、203,302…桁上げ補正回路、200a,200b,300a,300b…インデックス加算回路、211a,211b,212a,212b,311a,311b,312a,312b…デコーダ回路、213a,214a,215a,313a,314a,315a,213b1,213b2,214b,215b1,215b2,313b1,313b2,314b,315b1,315b2…データバス、317…デコーダ回路、401…判定回路、402…デコード回路、403…2ビットパリティチェック回路(データ反転回路)。