JP5259343B2 - メモリ装置 - Google Patents

メモリ装置 Download PDF

Info

Publication number
JP5259343B2
JP5259343B2 JP2008281316A JP2008281316A JP5259343B2 JP 5259343 B2 JP5259343 B2 JP 5259343B2 JP 2008281316 A JP2008281316 A JP 2008281316A JP 2008281316 A JP2008281316 A JP 2008281316A JP 5259343 B2 JP5259343 B2 JP 5259343B2
Authority
JP
Japan
Prior art keywords
error
equation
calculation
syndrome
finite field
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008281316A
Other languages
English (en)
Other versions
JP2010108569A5 (ja
JP2010108569A (ja
Inventor
春希 戸田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2008281316A priority Critical patent/JP5259343B2/ja
Priority to US12/555,507 priority patent/US7962838B2/en
Publication of JP2010108569A publication Critical patent/JP2010108569A/ja
Publication of JP2010108569A5 publication Critical patent/JP2010108569A5/ja
Application granted granted Critical
Publication of JP5259343B2 publication Critical patent/JP5259343B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/152Bose-Chaudhuri-Hocquenghem [BCH] codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1575Direct decoding, e.g. by a direct determination of the error locator polynomial from syndromes and subsequent analysis or by matrix operations involving syndromes, e.g. for codes with a small minimum Hamming distance
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3707Adaptive decoding and hybrid decoding, e.g. decoding methods or techniques providing more than one decoding algorithm for one code
    • H03M13/3715Adaptation to the number of estimated errors or to the channel state

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Theoretical Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Physics & Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Error Detection And Correction (AREA)
  • Read Only Memory (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)

Description

この発明は、ECCシステムを搭載したメモリ装置に関する。
NANDフラッシュメモリ、抵抗変化メモリ(Resistance Change RAM:ReRAM)、相変化メモリ(Phase Change RAM:PCRAM)などの大容量メモリでは、データ保持中などに様々な原因で記憶内容が壊れる。特にデータの保持状態として使用する物理的機構が外乱の影響を受け易い場合であって、今後メモリ容量の大規模化と製造プロセスの微細化が進むとエラー率は上昇する。このためメモリにオンチップでECC(Error Correcting Code)システムを搭載することは重要な技術となる。
フラッシュメモリチップ内に、或いはこれを制御するメモリコントローラ内にECC回路を搭載することは、従来より提案されている(例えば、特許文献1参照)。
ガロア有限体GF(2)を利用する、BCHコードを用いたECCシステム(BCH−ECCシステム)で2ビット以上のエラー訂正を行う場合、エラー位置探索方程式の解を求めるのに、有限体の要素を逐次代入する方法を利用すると、演算時間は膨大となり、オンチップとした場合にもメモリの読み出しや書き込み性能を大幅に低下させる。
従って、そのような逐次探索によらず、メモリの性能を犠牲にしないようなECCシステムが望まれる。
特開2000−173289号公報
この発明は、比較的小さい演算規模で高速の4ビットエラー訂正を可能としたエラー検出訂正システムを搭載したメモリ装置を提供することを目的とする。
この発明の一態様によるメモリ装置は、ガロア有限体を用いて読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、読み出しデータから求められたシンドロームに基づいて有限体要素間の積や和を計算する計算回路を備えてエラー位置探索を行うものであり、前記計算回路は、内部クロックにより時分割で使用される共通化回路を有する
ことを特徴とする。
この発明の他の態様によるメモリ装置は、ガロア有限体を用いてメモリコアの読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、
前記メモリコアに情報ビットと共に書き込むべきチェックビットを生成するエンコード部と、
前記メモリコアの読み出しデータからシンドロームを求めるシンドローム演算部と、
求められたシンドロームに基づいて有限体要素間の計算を行い、エラー位置探索の計算に必要な各種量を求めるシンドローム要素計算部と、
前記シンドローム要素計算部とのデータ授受と有限体要素間の計算によりエラー位置探索の計算を行うエラー探索部と、
前記シンドローム要素計算部及びエラー探索部において有限体要素間の積演算を行うアダー回路及び和演算を行うパリティチェック回路について、それぞれ時分割で動作させるための内部クロックを生成するクロック発生器と、を有する
ことを特徴とする。
この発明の更に他の態様によるメモリ装置は、ガロア有限体を用いて読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
前記エラー検出訂正システムは、エラー位置を表す有限体要素を根とする3次のエラー探索方程式を解く際に、前記エラー探索方程式の係数をシンドロームで表現した2元連立方程式を解いて係数を確定し、更に前記エラー探索方程式を2次方程式と1次方程式の積の形に変換して、その解探索を行う
ことを特徴とする。
比較的小さい演算規模で高速の4ビットエラー訂正を可能としたエラー検出訂正システムを搭載したメモリ装置を提供することが出来る。
以下、図面を参照して、この発明の実施の形態を説明する。
メモリの微細化や大容量化に伴い、メモリセルのデータ保持の信頼性は低下する。特にフラッシュメモリを多値化した場合や、近年開発された抵抗変化メモリや相変化メモリでは、データ状態の不安定性が避けられず、保持データはいずれ変化すると見なす必要がある。そこでメモリから読み出したデータを実際に使用する前にECCシステムによってエラー訂正を行なうことは必須の技術となる。
メモリ搭載のECCでは、リアルタイムでデータ訂正を行なう必要があるために、高速の計算処理が要求される。また、ランダムなエラー発生に対してはBCHコードを用いたECCが有効であることは知られている。
高速のBCH−ECCシステムとして、本発明者は先に、4ビットエラー訂正を可能としたものを提案している(特願2007−210659号)。しかし、4ビットエラー訂正を可能とするためには、回路システムは複雑になり、その演算規模も大きくなる。そこで出来る限り回路規模を縮小するシステムが望まれる。
以下の実施の形態では、4ビットエラー訂正可能なBCH−ECCシステムにおいて、計算過程の分岐条件を明確にし、演算回路のタイムシェアリングを徹底することで規模縮小を図る。またオンチップに最適なガロア有限体として好ましくは、GF(210)を選択する。このようなECCシステムをメモリにオンチップで搭載することによって、メモリ外部から見ればメモリの性能を落とさずにデータ保持の信頼性を向上したメモリを提供することが可能になる。
以下の実施の形態での技術内容の概略を説明すれば、次の通りである。
・有限体を利用して4ビットまでのエラー訂正を行なうECCシステムにおいて、1エラー、2エラー、3エラー、4エラーへのエラー探索への計算の分岐を、シンドロームから導かれた量の間の排他的条件を用いて行ない、分岐先で解が得られない場合は5エラー以上と判断する。
・有限体を利用して3ビットまでのエラー訂正を行なうECCシステムにおいて、エラー位置を表す有限体要素を根とする3次方程式から解を求める際、3次方程式を1次と2次の方程式の積の形に変換し、これらの方程式の係数を分解する前の3次方程式の係数から求めて2次方程式で解探索を行なう。
・有限体を利用してエラー訂正を行なうECCシステムにおいて、シンドロームから導かれる量の計算とエラー位置を表す要素を求める方程式の解探索で用いられる、“表現インデックス”で表された有限体要素間の積を計算するアダー回路と要素間の和を計算するパリティチェッカ回路とについて、物理的に出来る範囲で共通化し、これを内部クロックでタイムシェアリングして利用する。
ここで表現インデックスとは、有限体要素を、異なる素因数を法とする複数の数を成分とする組として表したものである。
・メモリに搭載するリアルタイムオンチップECCシステムにおいてガロア体GF(210)を利用して、3,11及び31を法とする数の組をガロア体の要素を表す表現インデックスとして用いる。
・有限体要素を複数の互いに素である数を法とする数を成分とする表現インデックスを用いて表現するECCシステムにおいて、有限体要素の表現インデックスの成分を求めるデコーダ回路の構成が表現インデックスの2成分に共通なデコーダのグループを作りこれらの出力の論理をとってそれぞれの表現インデックス成分を得る。
以下の実施の形態は、高速にリアルタイムでデータ処理が出来るオンチップECCの最大エラー訂正数と考えられる4ビットまでのエラー訂正を行い、5ビット以上のエラーに対して警告(Warning)を発するシステム,4EC−EW−BCHシステム,を説明するのが目的であるが、4EC−EWでは3ビット、2ビット、1ビットのデータ処理も分岐して行なうので、1ビットの場合も含め2ビットエラー訂正の原理から順次に説明していく。
[2EC−EW(2 error correction - error warning)−BCHシステムの原理説明]
・データのエンコーディング(encoding)
ガロア体GF(2)上の原始既約多項式をm(x)としてこの根をαとする。有限体としてGF(2)を考えるので、m(x)はn次の多項式となる。この根αを用いるとGF(2)の要素は、h=2−1として、0,α,α,…,αh−2,αh−1の2個である。
二つのエラー訂正を行うには、更にαを根とする原始既約多項式m(x)を選択する。
これらの既約多項式からコード生成多項式g(x)=m(x)m(x)を作る。
ECCシステムのコードを作る要素は有限体のゼロ因子を除くとh個であるので、次の数1に示すh−1次の多項式f(x)が情報多項式となり、その係数がデータを表すことになる。
[数1]
f(x)=ah−1h−1−2n+ah−2h−2−2n
…+a2n+2+a2n+1x+a2n
データビットのうちの情報ビットを係数a2n〜ah−1に割り当てこれらを係数とする多項式f(x)に対して、数2に示すように、2n次から始まる多項式f(x)x2nをg(x)で割って剰余を求め、これをr(x)とする。
[数2]
f(x)x2n=q(x)g(x)+r(x)
r(x)=b2n−12n−1+b2n−22n−2+…+bx+b
この剰余多項式r(x)の係数b2n−1〜bがチェックビットとなり、情報ビットah−1〜a2nと共にメモリに記憶されるデータビットを構成する。
・データのデコーディング(decoding)
データビットに生じたエラーはh−1次のエラー多項式e(x)で表され、メモリから読み出したデータは、次の数3で表されるν(x)となる。
[数3]
ν(x)=f(x)x2n+r(x)+e(x)
=q(x)g(x)+e(x)
即ち、エラー多項式e(x)を求めれば、エラー訂正が可能である。
第1段階としてν(x)をm(x),m(x)でそれぞれ割って剰余S(x),S(x)を求める。これらは、下記数4に示すように、e(x)の剰余ともなっている。これらの剰余多項式S(x),S(x)がシンドローム(syndrome)多項式である。
[数4]
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
2ビットエラーがi,j 次にあればe(x)=x+xとなるので、この次数i,jを求めれば、エラー位置すなわちどのデータがエラーを生じたのかが確定する。
そこで、m(x)=0の根αの指数(インデックス)に関するGF(2)内の計算で“i”と“j”を求める。xをm(x)で割った剰余多項式をpn(x)とすると、α=pn(α)となるので、X,X及びsyndromeであるS,Sを次の数5のように定義する。
[数5]
=pi(α)=α
=pj(α)=α
=S(α)=ασ1
=S(α)=ασ3
以上の定義から、次の数6が得られる。
[数6]
e(α)=X+X=S
e(α)=X +X =S
ここで、X,Xのインデックスがそれぞれi,jであり、S,Sのインデックスがそれぞれσ (=σ),σである。
第2段階として、XとXを未知数とするGF(2)の多項式Λ(x)を考えると、その係数は数7に示すように、X,Xの基本対称式S,Dとなる。
[数7]
Λ(x)=(x−X)(x−X)=x+Sx+D
S=S=X+X
D=X
これらの係数とシンドロームである対称式S(=S),Sの間には関係があって、SD=S+S=ζとおいて、数8が得られる。
[数8]
D=ζ/S
次に、2次方程式x+Sx+D=0を満たす有限体要素を探索する。
(1)まず、エラー探索の分岐として、重根またはゼロ元を根に含む場合として、S=0とD=0の場合を考える。S=0なら重根であり、X=X=D1/2の1エラーで、1エラーならX=Sである。いま、S=0としたから、X=0のゼロエラーであり、D=0となり、しかもこのとき、ζ=SD=0で0エラーである。
D=0であると、ゼロ元がひとつの根で、もうひとつの根はX=Sとなり、1エラーで、しかもζ=SD=0である。
即ちこれらは、ζ=0の場合にまとめられて、エラー位置はX=Sとなり、S=0ならノーエラー(no error)、S≠0なら1エラー(1 error)となる。
(2)2つエラーがある場合のエラー位置検索は、Λ(x)=x+Sx+ζ/S=0の根X=αのインデックスnを求めることである。この場合、S≠0でD≠0、すなわちζ=SD≠0なので、x=Syなる変数変換をして、解くべき2次方程式を、下記数9とする。
[数9]
+y=ζ/S
即ち、エラー位置探索方程式を変数変換して、変数部分とシンドローム部分に分離する。
このように、Λ(x)を変形して変数部分とsyndrome部分に分離すると、インデックスの関係だけでnを求めることが出来る。言い換えれば、yに有限体要素を代入したy+yとζ/Sとをデコーダで比較して、2根を求めて2エラーの位置が求まる。デコードによって根を求める方法の詳細は以下に示す。
(3)3エラー以上の場合は、ζ=0でD≠0である矛盾の場合と解nが求まらない場合である。即ち対応するデコードが出来ない場合が3エラー以上となる。
2エラーの場合の根計算は、次のようになる。変数部分y+yにαを代入した結果のα2i+αのインデックスをyとすると、これがζ/Sのインデックスσ(ζ/S)と mod hで合同となる“i”がエラーの“y”のインデックスとなる。即ち、σ(ζ/S)≡y mod hとなる“i”がエラーの“y”のインデックスとなる。
シンドロームから決まる右辺のインデックスに対応するyを満たす“i”が2個存在しない場合は解が求まらないので、3ビット以上のエラーの場合である。
エラーの実際の位置は、x=Sy=ασ1+i=αとして、ビット位置nとして求められる。即ちインデックスyに対応する“y”のインデックスである“i”に対して本来の変数xのインデックスに戻すために、S=ασ1をyに掛けて解Xのインデックスnを求めると、n≡σ+i mod hがエラー位置に対応する解Xのインデックスであり、このXに対してΛ(x)=0となる。
[3EC−EW(3 error correction - error warning)−BCHシステムの原理説明]
・データのエンコーディング(encoding)
2ECの場合の既約多項式m(x),m(x)に加えて、もう一つの既約多項式、即ちαを根とする既約多項式m(x)を用いる。これらの既約多項式m(x),m(x),m(x)から、コード生成多項式g(x)=m(x)m(x)m(x)を作る。
システムのコードを作る要素は有限体のゼロ因子を除くとh個であるので、h−1次の多項式の係数がデータを表すことになる。このうち3n−1次までの部分がデータのチェックビットとなる。数1に対応する情報多項式は、次の数10となる。
[数10]
f(x)=ah−1h−1−3n+ah−2h−2−3n
…+a3n+2+a3n+1x+a3n
データビットのうちの情報ビットを係数a3n〜ah−1に割り当てこれらを係数とする多項式f(x)に対して、数11に示すように、3n次から始まる多項式f(x)x3nをg(x)で割って剰余を求め、これをr(x)とする。
[数11]
f(x)x3n=q(x)g(x)+r(x)
r(x)=b3n−13n−1+b3n−23n−2+…+bx+b
この剰余多項式r(x)の係数b3n−1〜bがチェックビットとなり、情報ビットah−1〜a3nと共にメモリに記憶されるデータビットを構成する。
・データのデコーディング(decoding)
データビットに生じたエラーはh-1次のエラー多項式e(x)で表されるのでメモリから読み出したデータは、下記数1 2に示した構成の多項式ν(x)となる。
[数12]
ν(x)=f(x)x3n+r(x)+e(x)
=q(x)g(x)+e(x)
数12のエラー多項式e(x)を求めれば、エラー訂正が可能である。
第1段階として、ν(x)をm(x),m(x),m(x)でそれぞれ割って剰余をS(x),S(x),S(x)とすると、これらは下記数13に示すように、e(x)の剰余ともなっている。これらの剰余多項式がシンドローム(syndrome)多項式である。
[数13]
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
3ビットエラーがi,j,k次にあれば、e(x)=x+x+xとなるので、この次数i,j,kを求めればエラーの位置すなわちどのデータがエラーを生じたのかが確定する。
そこで、m(x)=0の根αの指数(インデックス)に関するGF(2)内の計算でi,j,kを求める。xをm(x)で割った剰余多項式をpn(x)とすると、α=pn(α)となるので、X,X,X及びsyndromeであるS,S,Sを次の数14のように定義する。
[数14]
=pi(α)=α
=pj(α)=α
=pk(α)=α
=S(α)=ασ1
=S(α)=ασ3
=S(α)=ασ5
以上の定義から、次の数15が得られる。
[数15]
e(α)=X+X+X=S
e(α)=X +X +X =S
e(α)=X +X +X =S
ここで、X,X,Xのインデックスがそれぞれi,j,kであり、S,S,Sのインデックスがそれぞれσ (=σ),σ,σである。
第2段階として、エラー探索多項式として、数16に示すような、未知数X,X,Xを根とするGF(2)内の多項式Λ(x)を考える。
[数16]
Λ(x)=(x−X)(x−X)(x−X)=x+Sx+Dx+T=0
S=S=X+X+X
D=X+X+X
T=X
この多項式の解法として2つの方法がある。まず解法その1を説明する。
(3EC−EW,データデコードの解法その1)
Λ(x)の係数は数16に示すように、X,X,Xの基本対称式S,D,Tとなる。これらの係数とシンドロームである対称式S=S,S,Sの間には関係があって、SD+T=S+S=ζ,SD+ST=S+S=ηとおいて、数17の関係式で表すことが出来る。
[数17]
ζD=ζS+η
ζT=ζS+ηS+ζ
Λ(x)の根探査(エラー探索)は、次のように2エラーの場合、3エラーの場合及び4エラー以上の場合に分岐する。
(1)ゼロ元を解にもつ場合と重根を持つ場合は、2エラーとして、2EC−EWに分岐する。即ちゼロ元も根にもてばT=0であり、重根を持てばx+Sx+Dx+T=(x+S)(x+D)から、SD=Tと等価で、ζ=0がζSD=S(ζS+η)=ζT=ζS+ηS+ζから導かれるので、ζT=0で成立し、この場合は2EC−EWに分岐する。
(2)ζT≠0なら、3EC−EWである。この場合はη=0とするとD=S,T=S+ζから、x+Sx+Dx+T=(x+S)+ζとなり、3重根の1エラーとなるが、1エラーではζ=0であるので矛盾となるので、η≠0となる。η=0なら、4エラー以上である。
(3)2EC−EW及び3EC−EWの解探索で解nが求まらない場合は、4エラー以上となる。
GF(2)上の3次方程式がゼロ元を除き3根以外を持つ場合についてまとめておく。すなわちゼロ元を3根のひとつに持つか重根を含めば2根以下になるので、この条件を求める。
ゼロ元が解である場合は、T=0であり、この場合数18のように、2次方程式になる。
[数18]
+Sx+D+T=(x+a)(x+b)
このとき、a=S,b=D,ab=Tから、T=ab=SDであるので、SD+T=0となり、ζ=SD+Tであるので、ζ=0と等価となる。従って、ζT=0が2EC−EWに分岐する条件になる。これは上の考察と一致する。
3エラーがある場合には、xに逐次有限体の要素を代入して解を求めるのでなく、解の候補を予めテーブルとして求めておき、Λ(x)=0となる根x=αのインデックスnを求めるという方法を用いる。その計算方法を次に説明する。
先ず、多項式Λ(x)を変形して、変数部分とシンドローム部分を完全に分離して、解の候補のインデックスとシンドロームのインデックスの関係だけで解nを求めることが出来るようにする。
具体的には、Λ(x)=x+Sx+Dx+T=x+Sx+(S+η/ζ)x+(S+ηS/ζ+ζ)から、次の数19に示す変数変換を行う。
[数19]
x=az+b
a=(η/ζ)1/2
b=S
この変数変換を行うと、3エラーではη≠0であるので、下記数20が得られる。
[数20]
+z=ζ5/2/η3/2
このように変数変換された方程式を解く際に、シンドローム計算から必要となる基本的なインデックスは、Sのσ1,Sのσ,Sのσ,ζのσζ,ηのση,a=(η/ζ)1/2のσである。
方程式の変数部分zにαを代入してα3j+α=αzjなるインデックスzを予め求めておきテーブルとする。
一方方程式のシンドローム部分ζ5/2/η3/2のインデックスは(5/2)σζ−(3/2)σηであるから、(5/2)σζ−(3/2)ση≡zmod hを満たす“j”がエラーのインデックスから変換されたインデックスで、実際のエラー位置はaz=ασa+jσXから、σa+j≡σmod hなるσを求め、X=az+S=ασXσ1=αのビット位置nから求まる。
なお、zに対応する“j”が存在しない場合は4ビット以上のエラーがある。
3EC−EWの回路システムを作るにあたり、エラー探索の分岐を次にまとめておく。3エラー探索の条件のもとでの分岐条件である。
先に説明したように、ζT=0ではゼロ元を根にもつか重根になるので、ζ≠0で3エラー探索の解法を行い、3つの解が求まらない場合やη=0となった場合は4エラー以上となる。
ζT=0は2EC−EW以下に分岐するが、2EC−EWではζ≠0であるので、ζ≠0で2エラー探索の解法を行い、2つの解が求まらない場合やS=0の矛盾となった場合は4エラー以上となる。
ζT=0でζ=0は、1エラー以下となるが、これはζ=0かつη=0と等価であり、エラー位置はX=SでS=0ではノーエラー(no error)となる。
以上をまとめると、次のようになる。
(1)ζ=0かつη=0なら、X1=S(ゼロエラーを含む)で1エラーとなる。η≠0なら4エラー以上となる。
(2)ζ≠0でζT=0なら2EC−EWへ分岐し、S=0及び2解が求まらないときは4エラー以上となる。
(3)ζ≠0でかつζT≠0なら3EC−EWであり、η=0及び3解が求まらないときは4エラー以上となる。
図1は、ここまで説明した、デコーディング解法その1を利用した、3EC−EW−BCHシステムの構成図である。
エンコード部20は、h−1−3nビットの情報をa3n〜ah−1としてこれらを係数とするh−1−3n次の情報多項式をf(x)として、これが入力となる。情報ビットはデータビットの構成によって適宜必要な次数を選んでその係数のみを用い、使用しない係数は固定した0または1データとして扱うことによって、固定ビットをメモリに記憶させずにメモリ容量に合ったシステムを構成することが可能である。
エンコード部20では、f(x)x3nをコード生成多項式g(x)で割った剰余をr(x)として多項式f(x)x3n+r(x)の係数をデータビットとしてメモリコア10に書き込む。メモリコア10から読み出したhビットのデータはh−1次の多項式ν(x)の係数として扱われる。
メモリコア10は、例えば多値NAND型フラッシュメモリ、ReRAM,PCRAM等である。メモリコア10の具体例を以下に示す。
図2は、NAND型フラッシュメモリを構成するセルアレイ101とセンスアンプ列102の例を示している。セルアレイ101は、複数の浮遊ゲートタイプの不揮発性メモリセルM0−M31を直列接続して構成されたNANDセルユニット(NANDストリング)NUを配列して構成される。特に、多値データ記憶を行うものである場合に、この実施の形態のECCシステムが有効になる。
図3は、ReRAMのセルアレイ201として、可変抵抗素子VRとダイオードDiの直列接続により構成されるメモリセルMCを配列してなるセルアレイを示している。具体的に大容量ReRAMでは、図4に例示したように、下地基板の読み出し/書き込み回路220上に、複数層のセルアレイMA0−MA3を積層した三次元セルアレイ210として構成される。
メモリコア10の読み出しデータν(x)をデコードしてエラー探索を行う部分は、次のようになる。
先ずシンドロームS,S,Sを求めるのが、シンドローム演算部30である。即ち、ν(x)をm(x),m(x),m(x)でそれぞれ割った剰余から、シンドロームS,S,Sを得る。
次に、パリティチェッカ41と42により、それぞれSとSのパリティチェック及びSとSのパリティチェックを行って、ζとηを求める。これらのインデックスには、以下の計算では、h=pqrなる因数分解による素因数p,q,rを用いたmod p,mod q,mod rで区別する、いわゆる表現インデックスを用いる。
即ち、アダーの計算では、シンドロームS,S,Sやζ,ηは、表現インデックスを用いてバイナリの数として足し算を行う。パリティチェックでは、有限体の要素としてn−1次の多項式として表されて、各次数の係数のパリティチェックとして和の要素の多項式の係数が得られる。
S,ζ,ηが全てゼロであれば、ゲート71がこれを検出して、信号“エラーなし”(no error)を出力する。Sがゼロでなければ、ゲート72がこれを検出して、信号“1エラー”(1error)を出力する。これを受けて、Syアダー回路54からは、Sのインデックスがnとして出力される。
ζがゼロでηがゼロでなければ、ゲート73が1ECの解がないこと、即ち4error以上に相当することを示す信号“1EC解なし”(no solution 1EC)を出力する。
次に、シンドロームS,S,Sやζとηとの冪の積や商であるa,Saのインデックスをアダー回路51,52で計算する。ここでは、mod pとmod qとmod rの合同式として計算を行い、結果の表現インデックスによって以降の演算を行なう。
次に4入力のパリティチェッカ回路43によって、3つの要素のS,Sa,ζの和であるTを求める。このパリティチェッカは入力インデックスを多項式に直した同じ次数の係数間のmod 2による和を行なう部分であり、余分な入力にはVssを入れている。
アダー回路53,54は、2ECに対応するy+y=ζ/Sによってyを求め、変換x=Syによってエラー位置nの表現インデックスを計算する部分である。最初のアダー回路53の入力部分は、ζとS−3であり解探索多項式のシンドローム部分のζ/Sの表現インデックスを計算する。次のアダー回路54の入力はこの結果とSと1error信号である。この入力部でy+y=ζ/Sを満たすyのインデックスiをデコードする。
1errorではζ/Sが0となり、y+y=0を満たすyが1とゼロの2つあるにも関わらず、ζ/Sのインデックスは存在しないので、前段アダー回路から出力されない。そこで、1errorの場合の信号はシンドロームの計算部分のゲート72から直接受け取り、y+y=0となるyのインデックスをデコードする。この場合は1エラーとして解がデコードされる。この場合も含めてデコード結果のiとSのインデックスσから2つのエラー分のnのインデックスの表現インデックスを計算結果として出力する。
また、入力部でのデコードの結果yのインデックスiを求めることができない場合は、2ECシステムでは対応できないので、信号“2EC解なし”(no solution 2EC)を発生する。この信号が立つか、S=0(重根)である場合は、2EC−EWでは解が求まらないものとして、ゲート75によって、信号“2EC不解”(not solved 2EC)を発生する。
アダー回路55,56は、3ECに対応するz+z=ζ5/2/η3/2によってzを求め、変換X=azの表現インデックスを計算する部分である。即ち最初のアダー回路55は、入力としてζ5/2の表現インデックスとη−3/2の表現インデックスを受け取り、ζ5/2/η3/2の表現インデックスとして出力する。
次のアダー回路56は、3ECに対応するz+z=ζ5/23/2によってzを求め、変換azによってインデックスσの表現インデックスを計算する部分である。アダー回路の入力部分は前段までの結果zとaのインデックスσの表現インデックスを示す信号である。
この入力部でz+x= ζ5/2/η3/2を満たすzのインデックスjをデコードする。そのデコード結果のjとaの関係からインデックスσの表現インデックスから3つのエラー分のazのインデックスの表現インデックスを計算結果として出力する。また、入力部でのデコードの結果zのインデックスjが求めることができない場合は、3ECでは対応できないので、信号“3EC解なし”(no solution 3EC)を発生する。
この信号が立つか、η=0である場合は、3EC−EWでは解が求まらないので、ゲート76が信号“3EC不解”(not solved 3EC)を発生する。
右端のパリティチェッカ回路44は、X=az+Sなる和として、Xのインデックス としてエラー位置nの表現インデックスを計算している。
4ビット以上のエラーがあり訂正が出来ない場合の信号“訂正不可”(non correctable)は、ORゲート74により、no solution 1ECかnot solved 2ECかnot solved 3EC信号のいずれかが立った場合に立つ。
エラー訂正部60は、メモリコア10から読み出したデータを最終的に訂正して出力するロジック部分である。2EC部分からのエラー位置情報が使われるのはζT=0の場合すなわちζ=0 またはT=0の場合で、ゲート61の“0”出力で、ゲート62がオン、ゲート63がオフであり、3ECからのエラー位置情報は使わない。2ECの条件を満たさない場合には、ゲート62がオフ、ゲート63がオンであり、3ECからの位置情報が使われる。
エラー位置のデータ多項式ν(x)の係数は、エラー位置情報が入ると、XORゲート64でロジック反転(即ちデータ訂正)されて、データdとして出力される。また、“エラーなし”(no error)または“訂正不可”(non correctable) のいずれかが立てば、ゲート77によりスルー信号(through)が発生され、これにより読み出しデータはそのまま訂正されず、データdとして出力される。
(3EC−EW,データデコードの解法その2)
次に、3EC−EWのデータデコードの解法その2を説明する。これは、4EC−EWの分岐の場合に回路システムを共通化する上で好ましい方法である。
数16に示したエラー探索方程式である3次多項式Λ(x)の係数DとTは、シンドロームからのS,ζ,ηと共に、下記数21のように、2元連立方程式をなす。
[数21]
SD+T=ζ
(ζ+S)D+ST=η
D,Tをシンドロームで表現するためにこの2元連立方程式を解く。係数行列式はζとなり、ζD=ζS+η、ζT=ζS+ηS+ζとして解くことができる。
ここで、ζ≠0ならば、D,Tは確定する。従って、エラー探索方程式Λ(x)=0を解く過程に入る。ζ=0であれば、連立方程式の解法から未知数のひとつTを任意に設定してDを求めることが出来るが、3エラーが生じていればS,D,Tの間に任意関係はありえないので、この場合は4エラー以上が生じたか2エラー以下の場合となる。従って、2EC−EWに分岐しても解が求まらなければ、4エラー以上となる。
そこで、ζ≠0の条件で3次方程式を解くことになるが、これを1次と2次の方程式に分解して解く。その方法を次に説明する。
+SX+DX+T=0なる3次方程式から、2次の項を消去するように変換X=x+Sを行い、A=η/ζとおくと、3根の場合は先に説明したようにη≠0であるのでA≠0であり、下記数22が得られる。
[数22]
+Ax+ζ=0
これを、下記数23のように、1次式x+αと2次式x+βx+βの積の方程式で表す。
[数23]
+Ax+ζ=(x+α)(x+βx+β)=0
ここで、β0=δとおいて、αβ=ζ,αβ+β=A,α+β=0を用いると、数24のように、(δ+A)/Aを未知数とする3次方程式が得られる。
[数24]
{(δ+A)/A}+{(δ+A)/A}+ζ/A=0
この方程式はシンドローム部分と未知数部分が分離されているのでテーブルによるデコード方式で解くことができ、1根(δ+A)/Aを選択する。α=β1=(A+δ)1/2であるので、3次方程式の根δ=βを得る。これから、分解因子の多項式の係数が得られる。
これにより、1次と2次の解くべき方程式が確定して、未知数部分とシンドローム部分を分離した2次方程式は、次の数25となる。
[数25]
(x/β+(x/β)+β/β =0
これを解いて、x=αと共に3つの解が求まる。X=x+Sとして、本来のエラー位置を求めることが出来る。
ここで、エラー探索3次方程式の解法を回路システムに焼きなおすことができる様に形式化しておく。解くべき3次方程式は、w+w=ζ/ηとなり、ζ≠0からwがゼロ元または1になることはない。
根wを1つ選択すると、β=(w+1)η/ζ及びβ=α=(wη/ζ)1/2が得られ、β/β =(w+1)/wとなるので、2次のエラー探索方程式はz+z=(w+1)/wとなる。(w+1)/w≠0であるから、2根zとzが求まり、1次方程式の根α=βと合わせてエラー位置の解として、X=β+S、X=β+S、X=β+Sの3つが得られる。
以上説明した解法その2に従って3EC−EWの回路システムを作るにあたり、エラー探索の分岐を以下にまとめておく。3エラー探索の条件のもとでの分岐条件である。基本的には先の場合と変わらない。
行列式ζ=0は連立方程式の解が確定しないので、ζ≠0で3エラー探索の解法を行う。3つの解が求まらない場合やη=0となった場合は4エラー以上となる。すなわち、η≠0とT≠0で3エラー探索の結果を利用する。
T=0は2EC−EW以下に分岐するが、2EC−EWではζ≠0であるので、ζ≠0で2エラー探索の解法を行い、2つの解が求まらない場合やS=0となった場合は4エラー以上となる。
ζ=0は1エラー以下となるが、これはζ=0かつη=0と等価であり、エラー位置はX=Sで、S=0ではno errorとなる。η≠0なら4エラー以上である。
以上をまとめると、次のようになる。
・ζ=0かつη=0なら、X=S(ゼロエラーを含む)で、η≠0で4エラー以上となる。
・ζ≠0かつT=0なら、2EC−EWへ分岐し、S=0及び2解が求まらないときは4エラー以上となる。
・ζ≠0かつT≠0なら、3EC−EWであり、η=0及び3解が求まらないときは4エラー以上となる。
図5は、以上の解法その2を適用した場合について、3ビットまでのエラー訂正が可能で4ビット以上のエラーがあることの警告を出すことができる3EC−EW−BCHシステムの構成を図1と対応させて示している。図1と対応する部分には図1と同じ符号を付してある。
メモリコア10、エンコード部20、シンドローム演算部30は、図1と同様である。シンドロームを利用したエラー位置探索の計算手法も基本的に先の例と同様である。
シンドロームS,S,Sやζとηとの冪の積や商であるw=ζη−3及び A=ηζ−1のインデックスを計算するのが、アダー回路82及び83である。アダー回路81は、AとSの積SAをmod p,mod q,mod rの合同式として計算し、結果の表現インデックスによって以降の演算を行なう。
4入力のパリティチェッカ回路45は、3つの要素のS,SA,ζの和であるTを求める。このパリティチェッカ回路45は、入力インデックスを多項式に直した同じ次数の係数間のmod2よる和を行なう部分であり、余分な入力にはVssを入れている。
アダー回路84,85は、2ECに対応するy+y=ζ/Sによってyを求め、更に変換X=Syによってエラー位置nの表現インデックスを計算する部分である。最初のアダー回路84の入力部分は、ζとS−3であり、解探索多項式のシンドローム部分のζ/Sの表現インデックスを計算する。次のアダー回路85の入力はこの結果とSと1errorを示す信号である。この入力部で、y+y=ζ/Sを満たすyのインデックスiをデコードする。
1errorではζ/Sが0となり、y+y=0を満たすyが1とゼロの2つあるにも拘わらず、ζ/Sのインデックスは存在せず前段のアダー回路から出力されない。そこで、1errorの場合の信号をシンドローム計算部分のゲート72から直接受け取り、y+y=0となるyのインデックスをデコードするが、この場合は1エラーとして解がデコードされる。
この場合も含めてデコード結果のiとSのインデックスσから2つのエラー分のnのインデックスの表現インデックスを計算結果として出力する。また、入力部でのデコードの結果yのインデックスiを求めることができない場合は、2ECでは対応できないので信号“2EC解なし”(no solution 2EC)を発生する。この信号が立つかS=0である場合は2EC−EWでは解が求まらないので、ゲート75が信号“2EC不解”(not solved 2EC)を発生する。
アダー回路86,87,88は、3EC対応部分であり、それぞれ、w+w=ζ/ηによってwとw+1を得てz=(w+1)/wを計算する部分、β=(Aw)1/2を求める部分、さらにz+z=zによってzを得て、変換X=βzの表現インデックスを計算する部分である。
最初のアダー回路86は入力としてw=ζ/ηの表現インデックスを受け取り、w+w=wを満たすwをデコードし、(w+1)/wを計算してzとして出力する。対応するwがないときには解がないので信号“w解なし”(no solution w)を出力して解けないことを示す。
この下側のアダー回路88は、出力されたwとAからAwを計算して、結果の冪(Aw)1/2をβとして出力する。
アダー回路87は、3ECの2つのエラーに対応するz+z=zによってzを求め、変換βzの表現インデックスを計算する部分である。アダー回路の入力部分は前段までの結果zとβの表現インデックス示す信号の入力部である。この入力部でz+x=zを満たすzのインデックスjをデコードする。デコード結果のjとβから2つのエラー分の表現インデックスを計算結果として出力する。
また、入力部でのデコードの結果zのインデックスjを求めることができない場合は、解がないので信号“z解なし”(no solution z)を発生する。
3ECの解法のデコーダで解が求まらないno solution wやno solution zの信号が立つか、3ECでη=0である場合は、3EC−EWでは解が求まらないので、ゲート79が信号“3EC不解”(not solved 3EC)を発生する。
パリティチェッカ回路46,47はそれぞれ、X=βz+S,X=β+Sなる和として、Xのインデックスとしてエラー位置nの表現インデックスを計算している。
4ビット以上のエラーがあり訂正が出来ない場合の信号“訂正不可”(non correctable)は、ORゲート74により、no solution 1ECかnot solved 2ECかnot solved 3EC信号のいずれかが立った場合に立つ。
データ訂正部60は、図1のシステムと同じである。即ち2EC部分からのエラー位置情報が使われるのはζ=0またはT=0の場合で、この場合は3ECからのエラー位置情報は使わない。
2ECの条件を満たさない場合に3ECからの位置情報を使い、これらのエラー位置のデータ多項式ν(x)の係数が位置情報とのXORロジックで反転されてデータdとして出力される。また、no errorまたはnon correctable のいずれかが立てば、through信号が立ちデータdはそのまま出力される。
次にオンチップで有限体要素のデコーダを用いて高速にデータ処理できるECCシステムとして最大のエラー訂正数と思われる4ビットエラー訂正の場合について説明する。
[4EC−EW(4 error correction - error warning)−BCHシステムの原理説明]
・データのエンコーディング(encoding)
3ECの場合の既約多項式m(x),m(x),m(x)に加えて、更にもう一つの既約多項式、即ちαを根とする既約多項式m(x)を用いる。これらの既約多項式m(x),m(x),m(x),m(x)から、コード生成多項式g(x)=m(x)m(x)m(x)m(x)を作る。
システムのコードを作る要素は有限体のゼロ因子を除くとh個であるので、h−1次の多項式の係数がデータを表すことになる。このうち4n−1次までの部分がデータのチェックビットとなる。情報多項式f(x)は、次の数26となる。
[数26]
f(x)=ah−1h−1−4n+ah−2h−2−4n
…+a4n+2+a4n+1x+a4n
データビットのうちの情報ビットを係数a4n〜ah−1に割り当てこれらを係数とする多項式f(x)に対して、数27に示すように、4n次から始まる多項式f(x)x4nをg(x)で割って剰余を求め、これをr(x)とする。
[数27]
f(x)x4n=q(x)g(x)+r(x)
r(x)=b4n−14n−1+b4n−24n−2+…+bx+b
この剰余多項式r(x)の係数b4n−1〜bがチェックビットとなり、情報ビットah−1〜a4nと共にメモリに記憶されるデータビットを構成する。
・データのデコーディング(decoding)
データビットに生じたエラーはh−1次のエラー多項式e(x)で表されるので、メモリから読み出したデータは、下記数28に示した構成の多項式ν(x)となる。
[数28]
ν(x)=f(x)x4n+r(x)+e(x)
=q(x)g(x)+e(x)
従って、読み出したデータから多項式e(x)を求めれば、エラー訂正が可能である。
第1段階として、ν(x)をm(x),m(x),m(x),m(x)でそれぞれ割って剰余をS(x),S(x),S(x),S(x)とする。これらは下記数29に示すように、e(x)の剰余ともなっており、これらの剰余多項式がシンドローム(syndrome)多項式である。
[数29]
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
ν(x) ≡ S(x)mod m(x)
→ e(x)≡ S(x)mod m(x)
4ビットエラーがi,j,k,l次にあれば、e(x)=x+x+x+xとなるので、この次数i,j,k,lを求めればエラーの位置すなわちどのデータがエラーを生じたのかが確定する。
そこで、m(x)=0の根αの指数(インデックス)に関するGF(2)内の計算でi,j,k,lを求める。xをm(x)で割った剰余多項式をpn(x)とすると、α=pn(α)となるので、X,X,X,X及びsyndromeであるS,S,S,Sを次の数30のように定義する。
[数30]
=pi(α)=α
=pj(α)=α
=pk(α)=α
=pl(α)=α
=S(α)=ασ1
=S(α)=ασ3
=S(α)=ασ5
=S(α)=ασ7
以上の定義から、次の数31が得られる。
[数31]
e(α)=X+X+X+X=S
e(α)=X +X +X +X =S
e(α)=X +X +X +X =S
e(α)=X +X +X +X =S
ここで、X,X,X,Xのインデックスがそれぞれi,j,k,lであり、S,S,S,Sのインデックスがそれぞれσ (=σ),σ,σ,σである。
第2段階として、エラー探索多項式として、数32に示すようなX,X,X,Xを未知数とするGF(2)内の多項式Λ(x)を考えると、その係数S,D,T,Qは、X,X,X,Xの基本対称式となる。
[数32]
Λ(x)=(x−X)(x−X)(x−X)(x−X
=x+Sx+Dx+Tx+Q
S=S=X+X+X+X
D=X+X+X+X
T=X+X+X+X
Q=X
これらの係数とシンドロームS=S,S,S,Sの間には一定の関係があって式で表すことができ、数33の連立方程式系を構成する。
[数33]
SD+T=ζ
(ζ+S)D+ST+SQ=η
(η+S)D+ST+(ζ+S)Q=θ
D,T,Qは、この連立方程式を解いて得ることができる。但し計算の便宜上、 ζ=S+S,η=S+S,θ=S+Sとおいている。
D,T,Qをシンドロームで表現するために、上の3元連立方程式を解く。係数行列式をΓとして、下記数34のように解くことがきる。
[数34]
Γ=Sζ+Sη+ζ
ΓD=Sη+Sζ+Sθ+ζη
ΓT=Sη+Sθ+ζ
ΓQ=Sζ+Sζη+ζθ+η
Γ≠0では、D,T,Qが確定してエラー探索方程式Λ(x)=0を解く過程に入る。このとき方程式がゼロ元を根に持つか重根の場合には、3EC−EWの解法に分岐する。
Γ=0であれば、連立方程式の解法から未知数のひとつQを任意に設定してDとTを求めることが出来るが、4エラーきっかりが生じていればS,D,T,Qの間に任意関係はありえないので、この場合は5エラー以上が生じたか、或いは3エラー以下となる。3エラー以下の場合は3EC−EWの解法に分岐し、5エラー以上は分岐した3EC−EWの解法で解が求まらない場合に相当する。
Γ≠0で解かなければならない方程式は、次の数35の4次方程式である。
[数35]
+Sx+Dx+Tx+Q=0
次に、4EC−EWの解法の条件、即ち上記の4次方程式がきっかり異なる4つの解を持つ条件を検討する。根にゼロ元を含む場合か、或いは重根を持つ場合が条件から外れるのでこの条件を調べる。
先ず、ゼロ元が解である場合は、Q=0となり、3次となる。
重根を持つ場合は、上の4次方程式は、数36のように因数分解できる。
[数36]
+Sx+Dx+Tx+Q=(x+a)(x+bx+c)
このとき係数S,D,T,Qの間に一定の関係がある。即ち、b=S,a+c=D,ab=T,ac=Qより、a=T/S,c=SQ/Tであり、これから、D=a+c=T/S+SQ/Tであるので、SQ+SDT+T=0なる関係となる。従って、Q=0又はSQ+SDT+T=0の場合は3EC−EWの解法を用いることになる。
4次のエラー探索方程式の解法を、シンドロームから決まる量の関係の場合分けによって示す。以下の4つの場合、Case 1〜Case 4に分けることが出来、当然全ての場合でΓ≠0である。
Case 1:S≠0,b≠0の場合
ここで、a=D/S,b=D+ST,c=SQ+SDT+T,B=a+Ta+Qとする。なお、c=0は重根の条件となるので、4ECの解法を考える限りc≠0である。
変数変換X=x+aを施して、エラー探索方程式から2次の項を消去し、これを数37のように2次式の積に因数分解する。
[数37]
+Sx+(b/S)x+B=(x+αx+α)(x+βx+β)=0
因数分解の2次式の係数α,α,β,βとシンドロームから導かれた量の関係から、未知量δ=α+βを導入すると、δが満たすべき数38の3次方程式が得られる。
[数38]
(δ/b1/2+(δ/b1/2)+c/b3/2=0
この方程式を導く際に、bを分母にするために、b≠0がこのケースでの必要条件となっている。
この3次方程式を解いて1根δを選択すると、因数分解係数が満たすべきεを未知数とする2次方程式が2つ、数39のように得られる。
[数39]
(ε/δ)+(ε/δ)+B/δ=0
(ε/S)+(ε/S)+δ/S=0
これらを解いて係数α,α,β,βが得られる。これらの係数を持つ次の数40に示すような因数分解の2次方程式を解いて、未知量xを求めると、X=x+aからエラー探索の4次方程式の解が求まる。
[数40]
(x/α+(x/α)+α/α =0
(x/β+(x/β)+β/β =0
なお,各方程式を解く際に解のテーブルが利用できるように未知数の係数はGF(2)の要素となる様に変換している。δを求める3次方程式では未知変数をδ/b1/2とし、α,βを求める2次方程式では未知変数をε/δとし、α,βを求める2次方程式では未知変数をε/Sとし、因数分解の2次方程式ではx/α,x/βとしている。
Case 2:S≠0,b=0の場合
ここでa=D/S,b=D+ST=0,c=SQ+SDT+T,B=a+Ta+Q であり、これらからSB=cである。なおc=0は重根の条件となるので4ECの解法を考える限りc≠0である。
変数変換X=x+aを施してエラー探索方程式から2次の項を消去し、これを数41のように2次式の積に因数分解する。
[数41]
+Sx+B=(x+αx+α)(x+βx+β)=0
因数分解の2次式の係数α,α,β,βとシンドロームから導かれた量の関係αβ=B,βα+αβ=0,δ+αβ=0,α+β=Sから、未知量δ=α+βを導入して、δが満たすべき数42の3次方程式が得られる。
[数42]
δ+c=0
この方程式からただちに、δ=c1/3が得られ、因数分解係数が満たすべき未知数εの2次の方程式が2つ、Case 1の数39と同じ方程式が得られ、これらを解いて係数α, α,β,βが得られる。
ただしこのCase 2の条件から、B/δ=δ/Sとなるので、αとβを求める2次方程式の根とαとβを求める2次方程式の根は全く同じ形となり、この2根から、u=α/δ=α/S,u=β/δ=β/Sとなり、2次方程式は実質ひとつになる。
これらの関係を有する係数を持つ因数分解の2次方程式(数40)を解いて未知量xを求め、X=x+aからエラー探索の4次方程式の解が求まる。この際、先の関係式からα/α =δ/(S),β/β =δ/(S)である。
Case 1と同様に、各方程式を解く際に解のテーブルが利用できるように未知数の係数はGF(2)の要素なる様に変換している。即ちα,βを求める2次方程式では未知変数をε/δとし、α,βを求める2次方程式では未知変数をε/Sとし、因数分解の2次方程式ではx/α,x/βとしている。
Case 3:S=0,D≠0の場合
aはS=0で定義出来ず、b=D+SD=D,c=SQ+SDT+T=Tであり、c=0は重根の条件となるので4ECの解法を考える限り、c≠0である。 ΓD=ζη≠0からζ≠0,η≠0であり、Γ=ζ, D=η/ζ, T=ζ, Q=η/ζ+θ/ζとなる。
エラー探索方程式は3次の項がなく,これを下記数43のように2次式の積に因数分解する。
[数43]
+DX+TX+Q=(X+αX+α)(X+βX+β)=0
この2次式方程式の係数α,α,β,βとシンドロームから導かれた量の関係から、未知量δ=α+βを導入して、δの満たすべき下記数44の3次方程式が得られる。
[数44]
{(δ+D)/D}+{(δ+D)/D}+c/D=0
このCase 3の条件D≠0は、上の3次方程式でDが分母にくることから必要になる。この方程式は2次の項がない他の条件でも使用した3次方程式の形である。この方程式を解いて1根(δ+D)/Dを選択し、因数分解係数が満たすべき未知数がεの2次方程式が2つ、下記数45のように得られる。
[数45]
(ε/δ)+(ε/δ)+Q/δ=0
ε+δ+D=0
これらを解いて係数α, α,β,β が得られる。αとβは、数45の第2式から、α=β=(δ+D)1/2である。
これらの係数を持つ、下記数46の因数分解の2次方程式を解いて、未知量Xを求めエラー探索の4次方程式の解が求まる。
[数46]
(X/α+(X/α)+α/α =0
(X/β+(X/β)+β/β =0
Case 1と同様に各方程式を解く際に解のテーブルが利用できるように、未知数の係数はGF(2)の要素なる様に変換している。α,βを求める2次方程式では未知変数をε/δ,因数分解の2次方程式ではX/αとしている。
Case 4:S=0及びD=0の場合
b=D+ST=D=0,c=SQ+SDT+T=Tであり、c=0は重根の条件となるので、4ECの解法を考える限りc≠0である。Γ=ζ≠0からζ≠0、S=0及びD=0からη=0であり、T=ζ, Q=θ/ζとなる。
エラー探索方程式は2次と3次の項がなく,これを数47のように2次式の積に因数分解する。
[数47]
+TX+Q=(X+αX+α)(X+βX+β)=0
これらの2次式の係数α,α,β,βとシンドロームから導かれた量の関係、αβ=Q,βα+αβ=T,δ+αβ=0,α+β=0を用い、未知量δ=α+βを導入して、δが満たすべき数48の3次方程式(Case 2の数42と同じ)が得られる。
[数48]
δ+c=0
この方程式はすぐ解けて、δ=c1/3が得られる。このδから因数分解係数が満たすべき未知数がεの2次方程式が2つ、数49のように得られる。
[数49]
(ε/δ)+(ε/δ)+Q/δ=0
ε+δ=0
これらを解いて係数α,α,β,βが得られる。αとβは第2式から、α=β=δ1/2である。
これらの係数を持つ、数46と同じ因数分解の2次方程式を解いて未知量Xを求めエラー探索の4次方程式の解が求まる。
Case 1と同様に各方程式を解く際に解のテーブルが利用できるように、未知数の係数はGF(2)の要素なる様に変換している。α,βを求める2次方程式では未知変数をε/δ,因数分解の2次方程式ではx/αとしている。
以上のエラー探索の計算過程を、シンドロームから順に得られる要素の計算過程に即して場合分けしてまとめると、次のようになる。
Case 1:S≠0,b≠0の場合
3次方程式w+w=c/b3/2より、デコードにより1根wを選び、δ=b1/2wとする。次に2次方程式u+u=B/δ,v+v=δ/Sの根を、デコードして求め、それぞれu,u,v,vとして、α=δu,β=δu及びα=Sv,β=Svとする。
さらに2次方程式y+y=α/α ,z+z=β/β の根をデコードして求めた結果をy,y及びz,zとして、4つのエラー位置を示す有限体要素がX=α+a,X=α+a,X=β+a,X=β+aとして求まる。
Case 2:S≠0,b=0の場合
δ=c1/3とする。次に2次方程式u+u=B/δ,v+v=δ/Sの根をデコードして求め、それぞれu,uとv,vとして、α=δu,β=δu及びα=Sv,β=Svとする。
さらに2次方程式y+y=α/α ,z+z=β/β の根をデコードして求めた結果をy,y及びz,zとして、4つのエラー位置を示す有限体要素がX=α+a,X=α+a,X=β+a,X=β+aとして求まる。
なおuとvの2次方程式は、B/δ=δ/Sの関係から同じ方程式である。
Case 3:S=0,η≠0の場合
3次方程式w+w=c/b3/2より、デコードにより1根wからw+1を選び、δ=b1/2(w+1)とする。次に2次方程式u+u=Q/δの根をデコードして求め、それぞれu,uとしてα=δu,β=δu及びα=β=(b1/2w)1/2とする。
さらに2次方程式y+y=α/α ,z+z=β/β の根をデコードして求めた結果を、y,y及びz,zとして、4つのエラー位置を示す有限体要素がX=α,X=α,X=β,X=βとして求まる。
Case 4:S=0,η=0の場合
δ=c1/3とする。次に2次方程式u+u=Q/δの根をデコードして求めて、それぞれu,uとして、α=δu,β=δu及びα=β=δ1/2とする。
さらに2次方程式y+y=α/α ,z+z=β/β の根をデコードして求めた結果をy,y及びz,zとして、4つのエラー位置を示す有限体要素がX=α,X=α,X=β,X=βとして求まる。
エラー探索方程式を解く際に、様々な量を計算の分岐と計算の過程で利用するが、これらの量は全てシンドロームから計算される量である。シンドロームS(=S),S,S,Sは記憶されたデータから直接計算され得られる量であり、他の量はこれをもとに積、累乗、和を行なうことによって得られる。
図6は、シンドロームから順に計算で必要な量が得られる手順を示している。同じステップで並列に求める量を出来るだけ少なくしてかつステップ数も少なくなるように計算の手順を作っている。
即ち、シンドロームが得られた次のステップ1で、ζ=S+S,η=S+S,θ=S+Sが計算される。ここでは累乗と和の演算が行なわれる。
次のステップ2でこの計算結果とSを用いて、これらの様々な累乗の積と商とが計算される。まず和を計算する際に必要な量は4個(Sζ,Sη,Sη,Sθ)ある。
これらの4個の量の和から2個の量を計算するのがその次のステップ3であり、Γ,ΓTと次のステップの和で必要な4つの量が計算される。
次のステップ4で前のステップの量の和であるΓD、そして次のステップの和で必要な3つの量が計算される。
次のステップ5では得られた量の和であるΓQと積と商によってD,Tが計算される。更に次のステップ6で積と商演算で必要な3つの量Q,a,STが計算される。
ステップ7で、bとζTとTaとSQが計算され、最後のステップ8でcとBが計算される。cの計算では和の数を少なくすため、ζ=SD+Tの関係を用いて変形している。
シンドローム以降の計算ステップは、以上の8ステップであり、累乗演算は量を表現するコードの組み換えであるマルチプレクスで対応でき、和はパリティチェッカ回路、積と商は量を表現するコードのアダー回路で対応できる。これらの詳細は後に説明する。
4EC−EWのECCでは、4以下のエラーに対しての探索を行なうが、シンドロームから得られた情報によってエラーの数の判断が出来てその状況に合った探索を行なうことになる。最も単純には、全ての場合の探索を並行して行い、その結果をもってエラー位置の判断をする方法が考えられる。これは先に探索できるものから順次探索を開始できるので高速な探索は可能であるが、無駄な探索も行なうことになり、回路システムの規模が大きくなる。
今まで説明して来た各エラー探索での条件から、並行して行われる解探索は、以下の様にまとめることが出来る。なお、S,ζなどシンドローム計算から得られる量はどのエラー探索でも共通の量であり、解探索方程式の係数D,T,Q等はその方程式で固有の量であり、下付きの数字で区別した。即ち、係数Dを、2ECなら、D、3ECならDとして区別した。
・2EC以下の場合:エラー探索方程式は2次で、x+Sx+D=0であり、係数DはシンドロームとSD=ζの関係がある。この2次方程式が異なる2根を持つためには、ゼロ元と重根を持たないことが条件で、S≠0またD≠0からζ≠0であり、この場合に不解なら、3エラー以上である。S=0またはζ=0で1EC以下となり、S≠0でζ=0なら、D=0でx+S=0の1エラーであり、S=0でno errorとなる。
・3ECの場合:エラー探索方程式は3次で、x+Sx+Dx+T=0であり、係数を求める連立方程式の行列式はζでζ≠0であり、ζD=Sζ+η,ζT=Sζ+Sη+ζの関係がある。この3次方程式が異なる3根を持つためには、ゼロ元と重根を持たないことが条件で、ゼロ元T=0、重根T+SD=ζ=0からζT=Γ≠0となる。不解なら4エラー以上となる。
・4ECの場合:エラー探索方程式は4次で、x+Sx+D+Tx+Q=0であり、係数を求める連立方程式の行列式はΓ=Sζ+Sη+ζ=ζTでΓ≠0である。この4次方程式が異なる4根を持つためには、ゼロ元と重根を持たないことが条件で、ゼロ元Q=0、重根S+SD+T =c=0からcQ≠0となる。不解なら5エラー以上となる。
以上のエラー探索を並行に行い4つのエラーが検索可能なシステムを作ることができる。しかし、2EC以下,3EC及び4ECの解探索を並行して行い、その結果からエラー判断するのは、単純であるが、無駄な探索を行うことにもなり、回路規模が大きくなる。
そこでこの実施の形態においては、システムの回路規模を効果的に小さくするため、エラー数の条件として排他的な条件を抽出する。即ち各エラーの解探索の排他的条件を検討し、これを用いてシステム内の共通回路を時分割で多重に利用することにより、回路規模を小さくする。
4ECでのシンドロームとエラー探索方程式の係数が基本となるので、ここでは係数を、D=D,T=T,Q=Qとおく。先の各エラー数の探索の条件から、4ECの探索が3EC以下の探索になるのは、Γ=0またはcQ=0、3ECの探索が2EC以下の探索になるのは、ζT=Γ=0、2ECの探索が1EC以下になるのはζ=0の場合である。これを踏まえて、エラー数が少ない方から多い方へと排他的分岐の条件を求める。
・1EC以下の分岐条件
Γ=0,ζ=0の条件での、ζ=0から、4ECでのシンドロームと係数の関係は、次の数50のようになる。
[数50]
SD+T=ζ → SD+T=0
(ζ+S)D+ST+SQ=η → SQ=η
(η+S)D+ST+(ζ+S)Q → ηD+SQ=η(S+D)=θ
Γ=Sζ+Sη+ζ → Γ=Sη
c=SQ+SDT+T → c=SQ=Γ
cQ=0からはSQ=0となり、Γ=0が成り立ち、Γ=0とすると、c=0でcQ=0は成り立つ。従って、Γ=0のみ考えればよく、このときη=0又はS=0であり、S=0なら、ζ=0でθ=0になるから、η=0が常に成り立つ。逆に、ζ=η=0(θ=0)から、Γ=0,cQ=0が成り立つので、これは4ECの計算の1EC以下の条件と同値になる。
1EC以下への分岐の排他的条件は、ζ=η=0(θ=0)である。このとき、S≠0ならX=Sで1エラー、S=0ならno errorとなる。
1EC以下のエラー探索が不解の場合に相当するのは同値条件下で矛盾が生じる場合で、η=0でθ≠0なら矛盾、S=0でη≠0なら矛盾がシンドロームと係数の関係から言え、この場合は5エラー以上となる。
・2ECの分岐条件
Γ=0で4ECが3EC以下となり、2EC以下になるには、ζT=Γ=0であるが、ζ=0とすると1EC以下なので、ζ≠0からT=0となる。
従って、3ECでのシンドロームと係数の関係は、次の数51のように書き換えられる。
[数51]
SD+T=ζ → SD=ζ
(ζ+S)D+S=η → ζ(S+D)=η
Γ=Sζ+Sη+ζ→ Γ=0
4ECでの2ECになる条件Γ=0が常に成り立つので、cQ=0は考えなくても良く、2ECへの分岐条件はΓ=0かつζ≠0となる。
・3ECの分岐条件
Γ=0またはcQ=0の条件で3EC以下となるが、Γ=0は2EC以下となるので、3ECへの分岐条件は、Γ≠0の時のc=0又はQ=0である。
・4ECの分岐条件
Γ≠0かつcQ≠0が4ECの条件、言い換えれば、Γ≠0かつc≠0かつQ≠0が4ECの分岐条件となる。
これらの分岐した解探索で有限体の要素がエラー探索方程式を満たさず不解であれば、5エラー以上が生じていることになる。
以上の排他的分岐条件をまとめると、図7のようになる。ζ=0の分岐ではΓ=0を見る必要がないので、1EC以下の判断は早い段階で可能となる。
図8は、4ビットまでのエラー訂正が可能で5ビット以上のエラーがあることの警告を出すことができる4EC−EW−BCHシステムの構成図である。エンコード部20aでは、情報ビットはデータビットの構成によって適宜必要な次数を選んでその係数のみを用い、使用しない係数は固定した0または1データとして扱うことによって固定ビットをメモリコア10に記憶させずにメモリ容量に合ったシステムを構成する。
情報ビットに使用する次数の選択は計算規模やシステム規模が最小になるよう選択する。一般的には情報をaとしてこれらを係数とするh−1−4n次の多項式をf(x)とし、これを入力とする。f(x)x4nをコード生成多項式g(x)で割った剰余をr(x)として多項式f(x)x4n+r(x)の係数をデータビットとしてメモリコア10に書き込む。
メモリコア10は、フラッシュメモリ(特に多値)、ReRAM,PCRAM等の大容量メモリであり、ビットエラーが避けられない構成のものである。例えば特開2007−35124公報(対応米国特許No.7,369,433 B2)に記載されているリアルタイムの高速アクセスが必要な仕様のメモリである。
データ読み出しに関しては、メモリから読み出したhビットのデータはh−1次の多項式ν(x)の係数として扱われる。
シンドローム演算部30aは、ν(x)をそれぞれ、m(x),m(x),m(x),m(x)で割ってシンドロームS,S,S,Sを求める演算部である。シンドロームのそれぞれは、インデックスをmod p,mod q,mod r(h=pqr)で区別した表現インデックスとして表す。
以後の計算で、アダーにおいてはシンドロームS,S,S,Sは、表現インデックスで表され、これを更にバイナリの数としての足し算が行なわれる。パリティチェッカでは、表現インデックスをデコードして有限体の要素そしてn−1次の多項式として表され、各次数の係数のパリティチェックの結果として和の要素の多項式の係数を得て、これを表現インデックスにデコードする。
シンドロームが得られた後は、計算ブロックであるシンドローム要素計算部,SEC(Syndrome Element Calculation)部,90において、必要な量が先に示したステップで計算されレジスタ部91に保持される。レジスタ部91は具体的には各アダー等がその出力部に持つラッチにより構成されるが、ここでは条件分岐などで特に必要なもの10個の量を保持する部分をまとめて示している。
SEC部90で得られた量をもとに、エラー位置の探索を行なう計算ブロックがエラー探索部,ES(Error Search)部,100であり、計算結果の量を保持するレジスタ部101,102がある。
SEC部90及びES部100で保持されるのは全て表現インデックスである。シンドローム演算部30a、SEC部90及びES部100の計算過程を制御するのがクロック発生器(Clock Generator)300で、外部クロックCLから分周されたクロックck1〜ck16を発生する。図では計算ブロックを主に制御するクロック分配が示されている。
SEC部90とES部100は、データをやり取りして回路ブロックがタイムシェアリングやマルチプレクスして使用される。従って、SEC部90とES部100は、両方向の矢印で結ばれている。これらの時分割とマルチプレクスにより、これらの計算部の回路規模を小さくしている。
ES部100で得られた結果は、次の計算ブロックであるエラー訂正部,EC(Error Correction)部,200に入り、メモリから読み出されたデータの修正が行われる。即ちEC部200では外部からシステムに入れられた情報データ多項式f(x)が復元され、情報データとして出力される。
図8に示した計算ブロック,SEC部90やES部100は機能として分けたものであり、回路としては共通回路を時分割して利用するので回路システムの時間区分による動作を分けたものであると見なすことができる。
図9は、クロック発生器300が発生する内部クロックの概要を示している。メモリとデータの転送を制御する基本的なクロックがCLであり、これは数十nsのサイクルタイムを有する、メモリ外部の制御クロックに同期したクロックである。このクロックをトリガーとして内部クロックck1からck16を発生する。クロック発生の方法はここでは述べないが、例えば筆者が以前提案した特願2004-150614号明細書に記載されている方法が利用できる。
クロックck1〜ck16は順次カスケード的に発生されて巡回するクロックであり、数nsのパルスクロックである。更にこれらのパルスクロックをトリガーとして新たなクロック(CL)サイクルが開始されるまで状態を保持する、ダッシュつきのクロックが発生される。例えばck8パルスからはck8’が、ck10パルスからはck10’が発生される。
図10は、SEC部90の詳細構成を示している。4つのアダー回路AD1−AD4と4つのパリティチェッカ回路PC1−PC4をクロックck1−ck8でタイムシェアリングして利用するので、各クロックck1−ck8の流れを横軸として、それぞれのクロックタイミングで同時に用いられるアダーやパリティチェッカを破線で囲んで示している。
ここで、4つのアダー回路AD1−AD4は、クロックck2で同時に用いられ、クロックck3でも全て同時に用いられ、クロックck4では、AD2−AD4が用いられることを示している。以下同様である。また4つのパリティチェッカ回路PC1−PC4(2入力パルティチェッカPC1,PC2と4入力パリティチェッカPC3,PC4)は、クロックck1のタイミングでは、PC1,PC2及びPC4が同時に用いられ、クロックck3のタイミングでは、PC3,PC4が同時に用いられ、以下同様に時分割で使用されることを示している。
クロックck1〜ck8の各々で各ステップが動作するが、これらのステップで計算される量は先に図6において、シンドロームからの有限体要素の計算手順として示したステップ1〜8の順番である。即ちステップ数1〜8とクロックck1〜ck8の番号が対応している。なお、4入力パリティチェッカで3入力となるときに用いない入力は“0”すなわちVssを入力信号として与える。
これらの計算過程で得られた10個の量S,ζ,η,θ,Γ,Q,a,b,c,Bは、それぞれダッシュつきのクロックck1’〜ck9’で、図10に示すように、レジスタ部91(各アダーやパリティチェッカの出力ラッチ)で保持された状態にある。
図11は、ES部100の構成の詳細を示す。SEC部90での計算結果として保持された有限体要素を元にして計算過程の分岐を行ない、さらにこれらの量を用いて計算を進めてエラーを特定するのがES部100である。
このES部100で使用する回路は、先のSEC部90で用いた回路ではあるが、図11では先ずは計算の手順に従った回路機能のまとまりとして示している。即ち、ES部100は、3次方程式の解を求める回路ブロック(CUBE)103、2次方程式の解を求める回路ブロック(SQUARE)104及び、要素間の和を求めるための4つの2入力パリティチェッカ回路105〜108と、計算の途中結果と最終結果を保持するレジスタ101,102とにより構成される。
4ECシステムの解法をまず説明すると、CUBE 103の構成は、3次方程式の未知数部がこれと等値される量Hをシンドロームから計算するひとつのアダー回路111と、3次方程式w+w=Hからwを求めるデコーダ計算回路112と、wから本来欲しい量δをwまたはw+1とb1/2の積として計算するもうひとつのアダー回路113とからなる。
SQUARE 104は、2次方程式の未知数部がこれと等値されるδから得られる量JとKを計算する2つのアダー回路121,122と、2つの2次方程式u+u=J,v+v=Kからそれぞれu,vを求めるデコーダ計算回路123,124と、u及びvから4次方程式の2次式への因数分解の係数α,β,α,βを計算する4つのアダー回路125〜128とを有する。
SQUARE 104は更に、上のアダー回路121,122、デコーダ計算回路123,124、アダー回路125〜128をマルチプレクスして後半の計算部として使用する、括弧つきで示した回路部を有する。即ち、得られた係数からエラー探索の4次方程式の根を求めるために解く2次方程式の未知数部にこれと等値される量LとMを計算する2つのアダー回路121a,122aと、2つの2次方程式y+y=L,z+z=Mからそれぞれy,zを求めるデコーダ計算回路123a,124aと、y及びzから4次方程式解を計算する4つのアダー回路125a〜128aとを有する。
このSQUARE 104の前半計算部と後半計算部の各対応回路は、添字“a”の有無で区別しているが、これらは時分割で使用される共通化回路であることを示している。前半計算部の計算結果を保持するために、レジスタ部101が用いられ、ここにα,βが保持される。
SQUARE 104の計算結果はそれぞれシンドロームから得られた量を加えて本来のエラー探索結果となるので、この和の計算を行なう4つの実質2入力パリティチェッカ回路105〜108があり、その結果X,X,X,Xを保持するためにレジスタ部102がある。
なお、図11において、3ECでの解法で使用する回路の入出力は括弧[ ]を信号名につけて、2ECでの解法で使用する回路の入出力には括弧{ }を信号名につけて示して、これらの回路も共通化回路であることを示している。
図12は、ES部100について、SEC部90と共通のアダー回路AD1−AD4及びパリティチェッカ回路PC1−PC4及び、3次式、2次式の解をデコーダを用いて求める計算回路を、タイムシェアリングして利用する手順として、図10と同様にクロックの流れに沿って分散させて示したものである。
ES部100ではエラー探索の分岐の場合によって使用する回路とクロックが変わるので、クロックの番号は特定せず、回路が使用される全ての場合を重ねて示した。3ECでの解法で使用する回路の入出力は[ ]を信号名につけて、2ECでの解法で使用する回路の入出力には{ }を信号名につけて示したのは、図10の場合と同様である。
α、βのレジスタ101、Xのレジスタ102がデータを保持するのはそれぞれのデータが計算されてからであるので、それらのクロックには計算結果が得られたクロックに対してその次を意味する+1を付け、さらにサイクル期間中保持されるのでダッシュ(’)を付して示している。
クロックckiとckjで使用されるのが、CUBE 103の回路ブロックに相当し、計算回路112は、3次式w+w=Hの計算に一回使用される。クロックckkからcknまでで使用されるのが、SQUARE 104の回路ブロックに相当し、計算回路123,123aは、同じものをそれぞれu+u=J,y+y=Lの計算に時分割で用いることを示し、同様に、計算回路124,124aは、同じものをv+v=K,z+z=Mの計算に時分割で用いることを示している。
クロックckoは最終的にエラー位置の有限体要素を特定する要素間の和の演算を行なうタイミングであり、パリティチェッカ回路PC1〜PC4(2ビットパリティチェッカ回路105〜108対応)により、X〜Xを出力する。
4ECでのエラー探索の計算過程を、先に4つのケース,Case 1〜Case 4,に場合分けして説明したが、図13,14,15及び16は、ES部100でのそれぞれCase 1〜4の計算手順を示している。
以下、各部の計算手順を簡単に説明すれば、次の通りである。
図13のCase 1:
4ECであるので、Γ≠0,Q≠0,c≠0であり、さらにCase 1の条件として、S≠0とb≠0である。
CUBE 103は、クロックck9でアダー回路AD1を用いて、H=cb−3/2を計算する。またクロックck10で、デコーダ計算回路112により、w+w=Hからwをデコードし、アダー回路AD4でδ=wb1/2を計算する。
SQUARE 104は、クロックck11でアダー回路AD1によりJ=Bδ−2を、アダー回路AD4によりK=δS−2を計算する。クロックck12で、計算回路123,124によりu+u=J,v+v=Kからu,vをデコードし、アダー回路AD1−AD4でそれぞれ、α=δu,β=δu,α=Sv,β=Svを計算する。
更に、クロックck13でアダー回路AD2によりL=αα −2,アダー回路AD3によりM=ββ −2を計算する。更に、クロックck14で、計算回路123a,124aにより、y+y=Lとz+z=Mから、y,yとz,zをデコードし、アダー回路AD1〜AD4により、α,α,β,βを計算する。
αとβは、次ステップ以降のステップで利用するのでクロックck13’でレジスタ101に保持する。
SQUARE 104の出力部ではクロックck15でパリティチェッカ回路PC1〜PC4にて、X=a+α,X=a+α,X=a+β,X=a+βを計算し、その結果をクロックck16’でレジスタ102に保持する。
図14のCase 2:
4ECであるので、Γ≠0,Q≠0,c≠0であり、さらにCase 2の条件として、S≠0,b=0である。
CUBE 103は使用しないで、δ=c1/3とする。
SQUARE 104は、クロックck9でアダー回路AD1,AD4によりそれぞれ、J=Bδ−2,K=δS−2を計算する。クロックck10で、デコーダ計算回路123,124により、u+u=Jとv+v=Kからuとvをそれぞれ2つuとu,vとvとしてデコードし、アダー回路AD1〜AD4でα=δu,β=δu,α=Sv,β=Svを計算する。
更に、クロックck11でアダー回路AD2,AD3によりそれぞれ、L=αα −2,M=ββ −2を計算する。
更に、クロックck12で、デコーダ計算回路123a,124aにより、y+y=L,z+z=Mからy,zをそれぞれ2つyとy,zとzとしてデコードし、アダー回路AD1−AD4によりそれぞれ、α,α,β,βを計算する。
αとβは、次ステップ以降のステップで利用するのでクロックck11’でレジスタ101に保持する。
またSQUARE 104の出力部ではクロックck13でパリティチェッカ回路PC1−PC4にてそれぞれ、X=a+α,X=a+α,X=a+β,X=a+βを計算し、その結果をクロックck14’でレジスタ102に保持する。
図15のCase 3:
4ECであるので、Γ≠0,Q≠0,c≠0であり、更にCase 3の条件として、S=0とη≠0である。
CUBE 103は、クロックck9でアダー回路AD1を用いてH=cb−3/2を計算し、クロックck10でデコーダ計算回路112によりw+w=Hからwとw+1をデコードして、アダー回路AD4でδ=(w+1)b1/2を計算する。
SQUARE104 は、クロックck11でアダー回路AD1によりJ=Qδ−2を計算し、クロックck12でデコーダ計算回路123によりu+u=Jから2つの解uとuをデコードして、アダー回路AD1,AD2及びAD4によりそれぞれ、α=δu,β=δu及びα =β =wb1/2を計算する。
更に、クロックck13では、アダー回路AD2によりL=αα −2を、アダー回路AD3によりM=ββ −2を計算する。更にクロックck14で、デコーダ計算回路123a,124aによりそれぞれ、u+u=Jとv+v=Kをy+y=Lとz+z=Mとして、yとzをそれぞれ二つずつ、y,yとz,zとしてデコードし、アダー回路AD1,AD2,AD3及びAD4でそれぞれ、α,α,β及びβを計算する。
αとβは次ステップ以降のステップで利用するので、クロックck13’でレジスタ101に保持する。
SQUARE 104の出力は、クロックck15でパリティチェッカ回路PC1−PC4により、a=“0”として、X=a+α,X=a+α,X=a+β,X=a+βとして計算し、その結果はクロックck16’でレジスタ102に保持する。クロックck15の計算ステップは本来必要がないが、手順をなるべく変えないようにするため、a=“0”として利用している。
図16のCase 4:
4ECであるので、Γ≠0,Q≠0,c≠0であり、更にCase 4の条件として、S=0,η=0である。
CUBE 103は使用しないで、δ=c1/3とする。
SQUARE 104は、クロックck9でアダー回路AD1によりJ=Qδ−2を計算し、クロックck10でデコーダ計算回路123によりu+u=Jからuとuをデコードして、アダー回路AD1,AD2でそれぞれ、α=δu,β=δuを計算し、更にα =β =δと置く。
更に、クロックck11でアダー回路AD2,AD3によりそれぞれ、L=αα −2,M=ββ −2を計算する。そしてクロックck12でデコーダ計算回路123a,124aにより、u+u=Jと v+v=kをy+y=Lとz+z=Kとしてyとzをそれぞれ2つy,yとz,zとしてデコードし、アダー回路AD1,AD2,AD3及びAD4でそれぞれ、α,α,β及びβを計算する。
αとβは次ステップ以降のステップで利用するので、クロックck11’でレジスタ101に保持する。
SQUARE 104の出力は、クロックck13でパリティチェッカ回路PC1−PC4にて、a=0として、X=a+α,X=a+α,X=a+β,X=a+βを計算し、その結果をクロックck14’でレジスタ102に保持する。
図17は、3ECの場合のES部100の計算手順である。3ECであるので、Γ≠0であり、Q=0又はc=0である。
CUBE 103は、クロックck9でアダー回路AD1,AD3によりそれぞれ、H=ζη−3,A=ηζ−1を計算する。またクロックck10で、デコード計算回路112によりw+w=Hからwとw+1をデコードし、アダー回路AD4でα=β =wAを計算する。
SQUARE104は、クロックck11でアダー回路AD1にてJ=(w+1)w−1を計算し、クロックck12でデコーダ計算回路112によりu+u=Jから二つu,uをデコードし、アダー回路AD1,AD2でそれぞれ、β=β,β=βを計算する。βは次ステップ以降のステップで利用するので、クロックck11’でレジスタ101に保持する。
SQUARE104の出力はクロックck13でパリティチェッカ回路PC1−PC3により、X=S+β,X=S+β,X=S+βを計算して、その結果をクロックck14’でレジスタ102に保持する。
図18は、2ECの場合のES部100の計算手順である。2ECであるので、Γ=0,ζ≠0である。CUBE 103は使用しない。
SQUARE 104は、クロックck9でアダー回路AD4によりK=ζS−3を計算する。更にクロックck10でデコーダ計算回路124により、v+v=Kからvを2つvとvとしてデコードし、アダー回路AD3,AD4によりそれぞれ、X=Sv,X=Svを計算する。
SQUARE 104の出力はクロックck11’でレジスタ102に保持する。
図19は、1EC以下の場合の手順である。1EC以下であるのでζ=0,η=0,θ=0である。ES部100は使用せず、SEC部90までで計算手順は終了する。X=Sとして、これをクロックck3’でレジスタ102に保持する。S=0なら、no errorとなる。
今まで示した、4EC,3EC,2ECの全ての手順で、デコーダ計算回路(solver)で解が求まらない場合は、5エラー以上であり、ζ=0であってη=0かつθ≠0、または、ζ=0であってS=0かつη≠0の場合も5エラー以上となる。
以上のクロック制御による4ECの回路システムは、構成するアダー回路やパリティチェッカ回路の数で見ると、図1に示した、クロック制御によらないタイプの回路方式に比べて、アダー回路は6つから4つに減り、パリティチェッカ回路は4つで変わらない。即ち回路規模を大きくすることなく、4ECが実現できることが分かる。無論、4ECのこのシステムから不必要な部分を除けば、図1に相当するクロック制御の3ECシステムが構築できる。
今まで説明した計算過程で使用される有限体要素間の演算を並列化して高速化する手法としての表現インデックスについて、ここで詳細を説明する。
有限体要素間の積は、そのインデックスの和を求めることに帰着するので、インデックスを2進表示したときの桁数を小さくすれば、足し算での桁上げの時間を小さくすることができる。また和はインデックスの数(ドメイン)を法とする同値類でありドメインの剰余として求められるので、使用する有限体を大きくするとドメインが大きくなりその分演算時間は増加する。
有限体要素と1対1に対応するインデックスの数を見かけ上大幅に減らすことが出来るのが、表現インデックスである。いま有限体GF(2)を考える。このインデックスのドメインはh=2−1であるが、hを素因数分解して素数p,p,,pi(h)の積として表すと、インデックスがmに相当する有限体要素αの等価な表現が、下記数52のように得られる。
[数52]
α⇔ m(mod h)
⇔ {m(mod p1),m(mod p2),,m(mod pi(h)}
これはインデックスを、ドメインの因数分解の成分をドメインとする成分に分解して表すものであり、これをインデックスに対する表現インデックスと呼んでいる。この表現インデックスを用いることにより、ドメインが見かけ上小さくなる。すなわちインデックスのドメインは0からh−1のhであるが、表現インデックスのドメインは因数分解の最大の素数pi(h)で決まり、0からpi(h)−1までのpi(h)である。
有限体要素αとαの積はαi+jとなるので、対応する表現インデックスで表すと数53のようになる。
[数53]
α×α=αi+j
{i(p),i(p),…,i(pi(h))}{j(p),j(p),…,j(pi(h))}
={i+j(p),i+j(p),…,i+j(pi(h))}
従って、有限体要素の積は、それらのインデックス成分の間の因数分解素数を法としての足し算となる。即ちドメインhのビットはnであり、この足し算が最大logi(h)ビットの足し算の並列演算に縮小される。
次に、nの実用的ないくつかのケースについて具体的に比較検討する。
大容量ファイルメモリにオンチップで搭載するECCシステムは回路規模、演算スピード、冗長メモリの規模を最適化して決める必要がある。具体的に用いられる可能性の高い有限体GF(2)のn=8から13について比較検討する。検討するのはエラー探索をデコーダを用いて行なう高速なリアルタイム方式であるから、デコーダ規模が大きくなり過ぎないn=13までを対象とした。
図20は、その比較結果をまとめた表である。表の各行の項目は、以下の通りである。
情報ビット数:有限体要素の数は2であるが、チェックビットが必要なので2の累乗で扱える情報ビット数は2n−1となる。2の累乗にこだわらなければ2からチェックビット数を引いたビット数まで情報ビット数を増やすことが出来る。この数は一括してデータ処理できる有効な情報のビット数を表す。
4ECチェックビット:オンチップでデコーダ方式による高速処理が可能な最大訂正である4ECの場合を想定してシステムの規模を比較するので、4ECのチェックビット数4nを示す。
訂正率:情報ビットとチェックビットを足したビット数がECCの演算で一括処理され、4ビットのエラーまでが訂正されるので、訂正率は4/(2n−1+4n)となる。
メモリ冗長率:メモリのデータとして有効な情報ビット数に対して、ECCのために設けなければならないチェックビット数4nの割合で、4n/2n−1である。
h=2−1素因数分解:インデックスのドメインhの素因数分解を示す。
最大成分インデックスビット数:インデックスの素因数分解の最大素数を2進表現するためのビット数である。
バス幅:表現インデックス成分のドメインの総和で、システムを構成する際に回路間でやり取りされる有限体要素データのバスとなる。
これらの比較結果から、訂正率0.5%以上、チェックビット領域10%以下、計算の並列化から考えて表現インデックス成分数が2または3、並列化の効果を得るために成分インデックス最大ビット数5以下、回路規模からバス幅50以下の条件を満たす部分を、部分的ハッチングのセルとして示した。この結果から、全ての項目で条件に合致するのは、GF(210)であり、これがオンチップECCシステムに最適な有限体として選択できることがわかる。
GF(210)が最適な選択であることが分かったので、この有限体を例にオンチップECCの本方式において最も回路規模が大きくなるデコーダ回路の最適な構成方法を次に検討する。GF(210)の表現インデックス成分は、mod 3,mod 11及びmod 31となる。
ある条件を充たす有限体要素の表現インデックス成分を求める場合の一般的な方法は、表現インデックス成分の各値ごとにひとつの条件にあう有限値要素の集合を作り、その集合にこのひとつの条件を充たす有限体があればその集合を表す表現インデックス成分の値をその有限体の表現インデックス成分値とするように、デコーダを構成する。
すなわち、有限体要素wに対してF(w)=w+wやF(w)=w+w,F(w)=wなどの関係の有限体要素の関係があるとき、wの表現インデックス成分の要素のそれぞれに対して、F(w)をグループ分けしたデコーダを作り、H=F(w)が含まれるグループの表現インデックス成分から関係を充たすwの表現インデックスとするものである。
図21は、表現インデックス成分mod 3,mod 11及びmod 31の3種のデコーダ方式の概要を示している。αがmod 3=α、βがmod 11=β、γがmod 31=γのwのF(w)のグループを表し、例えば関係F(w)=w+wは3次の探索方程式、F(w)=w+wは2次の探索方程式、F(w)=wはwの多項式表現との変換などのデコーダに用いられる。
このようなデコード方式では、表現インデックスの成分数だけのデコーダ系列、即ち、α,β,γの各グループでそれぞれ、3個,11個,31個のデコーダ系列が必要となり、デコーダを構成する素子は有限体要素数の1024個はあるので系列が多いと大きな回路規模となる。
デコーダの規模を縮減する構成を次に検討する。先のグループα,β,γに対して、αとβの共通グループα∧βを構成する。この新たなグループを{α,β}と表記すると、次の数54となる。
[数54]
{α, β}(=(F(w):w mod 3=α and w mod 11)=α∧β
α={α,0}∨{α,1}∨{α,2}∨{α,3 }∨ … ∨{α, 9}∨{α,10}
β={0,β}∨{1,β}∨{2,β}
すなわち、{α,β}をデコーダの要素回路とその出力のORをとることで、αやβを得ることが出来る。
図22は、この共通化グループ{α,β}とグループγの2系統をデコーダ回路要素とする場合を、図21と対応させて示している。図22に示すように、グループ{α,β}の数は3×11=33個であり、γのデコーダ数31とほぼ同じである。デコーダの系列としてはこの共通のものとmod 31に相当する2系統になるので、回路規模は、各成分ごとの3系統がある先の場合に対し、3分の2程度になる。
デコーダ構成の具体例として、F(w)=wの場合の有限体の多項式表現から表現インデックスへの変換デコードを行う例を説明する。
GF(210)の要素は、GF(2)上の例えば既約多項式x10+x+1の剰余として得られる。インデックスがnの要素は、xを割った剰余多項式であり、
=pn(x)=P +P +P +…+P +P x+P
として、係数の組として多項式表現となる。
この係数表現を表現インデックスに変換するために、先ず図23に示すように、係数を4つ、4つ、2つのグループに分けて、4ビットバイナリは16進に変換する。すなわち多項式の低次の係数側から、A0〜A15,B0〜B15,C0〜C3を得る。
図24には、低次側の4ビットからA0〜A15を得るプリデコード回路例を示した。有限体はAi,Bi,Ciの組で表されるので、デコーダの回路{α,β}またはγが、図25に示すように、Ai,Bi,CiのNANDのORとして構成される。このデコーダはクロックCLKが立ち上がると、{α,β}またはγに属するAi,Bi,Ciなる多項式表現がデコーダ内にあればノードNDを放電して、出力を立ち上げる。
表現インデックスのデコーダで得られた結果を、図26に示すようなORロジックで合成すれば、表現インデックス成分α,βが得られ、有限体要素xσの多項式表現xα=Pα ,Pα ,Pα ,…,Pα ,Pα ,Pα を、表現インデックスの表現に変換することができる。
4ECの計算システムでは、前述のように、有限体要素の積はアダー回路を用いてインデックスの和の計算として行い、これらのアダー回路はタイムシェアリングして複数の積演算に多用される。そこで次に、アダー回路の入力と出力の構成のひとつの方法を説明する。
アダー回路の計算は、バイナリ表現された表現インデックスの成分間で行なわれる。従って、図27に示すように、入力の表現インデックスをバイナリ値に変換するインデックス/バイナリ変換回路401が必要であり、得られたバイナリ値に演算を施すアダー本体402があり、更にその演算結果を表現インデックスに変換するためのバイナリ/インデックス変換回路403が必要になる。
アダー間のデータバスを通るのは表現インデックス成分であり、クロックckmとcknとでタイムシェアリングして使用する場合には、更に入力部にアダー入力マルチプレクサ400が必要である。即ち、クロックckmで入力α、クロックcknで入力βを使用して演算を行う場合、入力の表現インデックス成分はクロックトインバータで構成されるマルチプレクサ400によりマルチプレクスして入力インデックス“i”とする。
なお、さらに多くのクロックでタイムシェアリングする場合は上述の2クロックの例からクロックに対応する部分を増やしてやればよい。
インデックス/バイナリ変換回路401は、図28に示すように、表現インデックス成分のドメインに従ってビット数が決まる。GF(210)では、表現インデックス成分のドメインは3,11,31であるので、それぞれ2,4,5ビットのバイナリとなる。
変換はクロックckm,cknが活性化されていないときに充電されているノードND0,ND1,…,ND4/3を表現インデックスの成分インデックス“i”で適切に放電して、“i”をバイナリ値表現にする。バイナリ表現はindex(3),(11),(31)に対応してそれぞれ2ビット(0,1),4ビット(0,1,2,3),5ビット(0,1,2,3,4)のノードのレベルでありこのレベルはクロックのパルス期間ラッチ回路に保持される。
アダー本体402で計算された出力はバイナリで、これらのビットをs0,s1,s2,s3とする。これらは、図29に示すようなバイナリ/インデックス変換回路403によりプリデコードして、信号0,1,2,3及び00,4,8,12を作る。そして、2入力または3入力の回路であるインデックスデコード&出力ラッチ404に入れて、表現インデックスをデコードする。それぞれの表現インデックス成分i(3),i(11)及びi(31)のデコードの入力は、図31,32及び33の表の通りである。
回路が働くのはクロックckm+1とckn+1、即ちアダー入力部のクロックckm,cknよりそれぞれ1つ遅いクロックパルスとなっている。またデコーダの出力は同じクロックのダッシュ付きのクロックckm+1’,ckn+1’でECCのサイクルの期間ラッチに保持されるようになっていて、自分自身またはその他のアダー回路で次のクロックサイクル以降に使用可能とされている。これらの出力ラッチ404の一部が先のECC回路ブロック図のSEC部などで特別に述べたレジスタ部91等になる。
アダー本体402は、三つの表現インデックス成分のおのおのバスに対して表現インデックスの和を並列に求める部分であり、図34に示すように、2ビットアダー410,4ビットアダー411及び5ビットアダー412が併設されている。
有限体要素AとBのそれぞれのα乗とβ乗の積Aαβを求めるもので、インデックスへの変換σを用いて、表現インデックス間で、
σ(AαBβ)≡ασ(A)+βσ(B) (mod 3),(mod 11),(mod 31)
を各成分ごとにバイナリ数の和として計算する。
これらのアダーは合同式のアダーであり、回路の詳細を次に示す。
図35は、2ビットアダー410の回路記号と詳細構成を示しており、数AとBを2進数で表した各桁の和をフルアダーとハーフアダーで求めて3の剰余(mod 3)としての和を表すものである。初段加算器410aと、その加算結果が3以上になったことを検出するためのキャリー補正回路410bと、補正回路410bの出力PF0に基づいて、2ビットに対する3の補数1(=4−3)を加える加算器410cとを備えている。
この回路は、クロックなどの同期が必要でないように入力が確定すれば出力も確定するようにしており、システムのタイミング制御の負担を減らす構成となっている。
図36は、4ビットアダー411の回路記号と詳細構成を示しており、数AとBを2進数で表した各桁の和をフルアダーとハーフアダーで求めて11の剰余(mod 11)としての和を表すものである。初段加算器411aと、その加算結果が11以上になったことを検出するためのキャリー補正回路411bと、補正回路411bの出力PF0に基づいて、4ビットに対する11の補数5(=16−11)を加える加算器411cとを備えている。
これも、クロックなどの同期が必要でないように入力が確定すれば出力も確定するようにして、システムのタイミング制御の負担を減らす構成としている。
図37は、5ビットアダー412の回路記号と詳細構成を示しており、数AとBを2進数で表した各桁の和をフルアダーとハーフアダーで求めて31の剰余(mod 31)としての和を表すものである。初段加算器412aと、その加算結果が31以上になったことを検出するためのキャリー補正回路412bと、補正回路412bの出力PF0に基づいて、5ビットに対する31の補数1(=32−31)を加える加算器412cとを備えている。
これも、クロックなどの同期が必要でないように入力が確定すれば出力も確定するようにして、システムのタイミング制御の負担を減らす構成としている。
図38及び図39は、2進数の足し算を行なう基本的な単位であるフルアダーとハーフアダーの構成を示している。フルアダーは、加えるビットAとBをXOR回路とXNOR回路でロジック演算を行い、桁上げ信号Cinとのロジックを更に取って出力としてA,B,Cinの和Soutと桁上げ信号Coutを出力する。ハーフアダーは一般的なロジックゲートで構成できる。
計算の過程では有限体要素の累乗が頻繁に現れるが、累乗の関係は表現インデックスでは各成分間の一定の変換に対応するので、計算ではなく信号のつなぎ変えに相当する。累乗の指数と表現インデックスの対応関係の一部を示したのが、図40の表である。
要素の累乗は表現インデックス成分の倍数としての関係になる。図40は、表現インデックス{i(31),i(11),i(3)}の成分インデックスがiのm倍で新たに得る表現インデックスをx(m)の欄に示した。この変換を組み合わせて必要な表現インデックスは得られる。
例えば表現インデックス{3,8,0}で表される要素を−2/3乗した要素の表現インデックスは−2/3倍に相当する。
即ち最初の成分インデックスi(31)=3であるので、×(−1)の−i(31)欄から28になり、これを新たにi(31)と見なして、×2の2i(31)欄から25となり、これを新たにi(31)と見なして×(1/3)のi/3(31)欄から29となる。この変換の順番はどの様な順番でも結果は同じである。
2番目の成分インデックスはi(11)=8であるので、×(−1)の−i(11)欄から3になり、これを新たにi(11)と見なして×2の2i(11)欄から6となり、これを新たにi(11)と見なして×(1/3)のi/3(11)欄から2となる。この変換の順番はどの様な順番でも結果は同じである。
3番目の成分インデックスはi(3)=0であるので、×(−1)の−i(3)欄から0になり、これを新たにi(3)と見なして、×2の2i(3)欄から0となりこれを新たにi(3)と見なして、×(1/3)のi/3(3)欄から0となる。この変換の順番はどの様な順番でも結果は同じである。
以上の変換により、表現インデックス{3,8,0}は、対応する要素の3/2乗で表現インデックス{29,2,0}の対応する要素になる。この様な変換によって、GF(210)の表現インデックスによる累乗の表現インデックスが得られる。
以上説明したように、この実施の形態では、メモリに搭載してメモリとのデータ読み書きの経路上で演算を実時間で行なう4ビットエラー訂正可能な高速のECC−BCHシステムをシステムを簡略に構成して実現した。簡略化のポイントは計算過程の分岐条件をシンドロームから導かれる量を用いて排他的に決めて、演算回路をタイムシェアリングする点である。また、使用する有限体がGF(210)なるガロア体を用いることで最適なオンチップシステムが得られることを明らかにした。
この実施の形態によると、エラー探索をテーブルによるデコーダを用いて高速に行なうことが出来る最大のエラー数であると思われる4ビットまでのエラー訂正を数10nsの演算時間で完了することが出来、大容量ファイルメモリなどの性能を落とすことなく面積増も僅かで信頼性の向上が実現できる。
実施の形態による3EC−BCH−ECCシステムの構成(その1)を示す図である。 メモリコアの一例であるNAND型フラッシュメモリセルアレイを示す図である。 メモリコアの他の例であるReRAMセルアレイを示す図である。 ReRAMの三次元セルアレイの構成例である。 実施の形態による3EC−BCH−ECCシステムの構成(その2)を示す図である。 シンドロームからの有限体要素の計算ステップを示す図である。 4EC−EWシステムでの解探索の排他的分岐の条件を示す図である。 実施の形態による4EC−BCH−ECCシステムの構成例を示す図である。 同システムにおける外部クロックに同期した内部クロック波形を示す図である。 アダー回路及びパリティチェック回路をタイムシェアリングする同システムのSEC部の動作を内部クロックの流れに従って示す図である。 同システムのES部の回路構成をブロック表現で示したものである。 同じくES部の動作を内部クロックの流れに従って示す図である。 同じくES部のCase 1での動作を示す図である。 同じくES部のCase 2での動作を示す図である。 同じくES部のCase 3での動作を示す図である。 同じくES部のCase 4での動作を示す図である。 3ECの場合のES部の動作の流れを示す図である。 2ECの場合のES部の動作の流れを示す図である。 1ECの場合のES部の動作を示す図である。 オンチップECCに用いる有限体の種類とECC特性との関係を示す図である。 表現インデックス成分のデコーダ回路方式を説明するための図である。 同じくデコーダ回路の規模縮減法を説明するための図である。 係数表現を表現インデックスに変換するための係数のグループ分けを示す図である。 4ビットバイナリを16進に変換するプリデコーダの構成例である。 タイムシェアリングするデコーダ構成を示す図である。 表現インデックスのデコード結果の合成回路を示す図である。 アダー回路の構成例を示す図である。 同アダー回路入力部のインデックス/バイナリ変換回路の構成を示す図である。 同アダー回路出力部のバイナリ/インデックス変換回路の構成を示す図である。 同アダー回路のインデックスデコード&出力ラッチの構成を示す図である。 同出力ラッチの表現インデックス成分i(3)のデコード入力を示す図である。 同出力ラッチの表現インデックス成分i(11)のデコード入力を示す図である。 同出力ラッチの表現インデックス成分i(31)のデコード入力を示す図である。 アダー本体の構成例を示す図である。 同アダー本体の2ビットアダー構成を示す図である。 同アダー本体の4ビットアダー構成を示す図である。 同アダー本体の5ビットアダー構成を示す図である。 フルアダー構成を示す図である。 ハーフアダー構成を示す図である。 表現インデックス間の関係を示す図である。
符号の説明
10…メモリコア、20,20a…エンコード部、30,30a…シンドローム演算部、41−47…パリティチェッカ、51−56…アダー回路、60…エラー訂正部、71−77…ゲート、81−88…アダー回路、90…シンドローム要素計算(SEC)部、91…レジスタ部、100…エラー探索(ES)部、101,102…レジスタ部、103…CUBE部、104…SQUARE部、105−108…パリティチェッカ、111,113,121,122,125−128,121a,122a,125a−128a…アダー回路、112,123,124,123a,124a…デコーダ計算回路、200…エラー訂正部、300…クロック発生器。

Claims (4)

  1. ガロア有限体を用いて読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
    前記エラー検出訂正システムは、
    読み出しデータからシンドロームを求めるシンドローム演算部と、
    求められたシンドロームに基づいて有限体要素間の計算を行い、エラー位置探索の計算に必要な各種量を求めるシンドローム要素計算部と、
    前記シンドローム要素計算部とのデータ授受と有限体要素間の計算によりエラー位置探索の計算を行うエラー探索部と、
    前記シンドローム要素計算部及びエラー探索部において有限体要素間の積演算を行うアダー回路及び和演算を行うパリティチェック回路について、それぞれ時分割で動作させるための内部クロックを生成するクロック発生器と
    を有し、
    前記シンドローム要素計算部及び前記エラー探索部は、前記有限体のドメインの異なる素因数をp及びqとした場合、当該有限体要素をpを法とする数とqを法とする数との組で表わしたものである表現インデックスを用いて前記有限体要素間の計算を行う
    ことを特徴とするメモリ装置。
  2. 記エラー検出訂正システムは、4ビットまでのエラー訂正を行うものであって、1ビットエラー、2ビットエラー、3ビットエラー及び4ビットエラーへのエラー探索の分岐を、前記シンドロームから導かれた量の間の排他的条件に従って判定し、各分岐先でエラー位置が求まらない場合に5ビットエラーと判定する
    ことを特徴とする請求項1記載のメモリ装置。
  3. 前記エラー検出訂正システムは、ガロア有限体GF(2 10 )を用いて、その有限体要素のインデックスを、3、11及び31を法とする前記表現インデックスの組で表して、有限体要素間の積和演算を行う
    ことを特徴とする請求項1記載のメモリ装置。
  4. ガロア有限体を用いてメモリコアの読み出しデータのエラー検出と訂正を行うエラー検出訂正システムを備えたメモリ装置において、
    前記エラー検出訂正システムは、
    前記メモリコアに情報ビットと共に書き込むべきチェックビットを生成するエンコード部と、
    前記メモリコアの読み出しデータからシンドロームを求めるシンドローム演算部と、
    求められたシンドロームに基づいて有限体要素間の計算を行い、エラー位置探索の計算に必要な各種量を求めるシンドローム要素計算部と、
    前記シンドローム要素計算部とのデータ授受と有限体要素間の計算によりエラー位置探索の計算を行うエラー探索部と、
    前記シンドローム要素計算部及びエラー探索部において有限体要素間の積演算を行うアダー回路及び和演算を行うパリティチェック回路について、それぞれ時分割で動作させるための内部クロックを生成するクロック発生器と
    を有し、
    前記シンドローム要素計算部及び前記エラー探索部は、前記有限体のドメインの異なる素因数をp及びqとした場合、当該有限体要素をpを法とする数とqを法とする数との組で表わしたものである表現インデックスを用いて前記有限体要素間の計算を行う
    ことを特徴とするメモリ装置。
JP2008281316A 2008-10-31 2008-10-31 メモリ装置 Expired - Fee Related JP5259343B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008281316A JP5259343B2 (ja) 2008-10-31 2008-10-31 メモリ装置
US12/555,507 US7962838B2 (en) 2008-10-31 2009-09-08 Memory device with an ECC system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008281316A JP5259343B2 (ja) 2008-10-31 2008-10-31 メモリ装置

Publications (3)

Publication Number Publication Date
JP2010108569A JP2010108569A (ja) 2010-05-13
JP2010108569A5 JP2010108569A5 (ja) 2011-04-28
JP5259343B2 true JP5259343B2 (ja) 2013-08-07

Family

ID=42132983

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008281316A Expired - Fee Related JP5259343B2 (ja) 2008-10-31 2008-10-31 メモリ装置

Country Status (2)

Country Link
US (1) US7962838B2 (ja)
JP (1) JP5259343B2 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4846384B2 (ja) * 2006-02-20 2011-12-28 株式会社東芝 半導体記憶装置
JP4836608B2 (ja) 2006-02-27 2011-12-14 株式会社東芝 半導体記憶装置
JP2007305267A (ja) * 2006-05-15 2007-11-22 Toshiba Corp 半導体記憶装置
JP4621715B2 (ja) * 2007-08-13 2011-01-26 株式会社東芝 メモリ装置
JP2011165026A (ja) * 2010-02-12 2011-08-25 Toshiba Corp エラー検出訂正システム
JP4982580B2 (ja) * 2010-03-23 2012-07-25 株式会社東芝 メモリシステム及びメモリシステムのデータ書き込み・読み出し方法
JP5682253B2 (ja) * 2010-11-22 2015-03-11 富士通株式会社 プログラムおよび通信装置
JP2012123600A (ja) 2010-12-08 2012-06-28 Toshiba Corp メモリシステム及びメモリコントローラ
JP5204868B2 (ja) * 2011-04-12 2013-06-05 シャープ株式会社 半導体記憶装置
KR101814476B1 (ko) 2011-07-15 2018-01-05 삼성전자주식회사 비휘발성 메모리 장치 및 그 구동 방법
JP5458064B2 (ja) 2011-07-14 2014-04-02 株式会社東芝 不揮発性半導体メモリ
US9904595B1 (en) 2016-08-23 2018-02-27 Texas Instruments Incorporated Error correction hardware with fault detection
CN107124187B (zh) * 2017-05-05 2020-08-11 南京大学 一种应用于闪存的基于等差校验矩阵的ldpc码译码器
US10833707B2 (en) * 2019-02-12 2020-11-10 International Business Machines Corporation Error trapping in memory structures

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3418629A (en) * 1964-04-10 1968-12-24 Ibm Decoders for cyclic error-correcting codes
US4099160A (en) * 1976-07-15 1978-07-04 International Business Machines Corporation Error location apparatus and methods
US4058851A (en) * 1976-10-18 1977-11-15 Sperry Rand Corporation Conditional bypass of error correction for dual memory access time selection
US4142174A (en) * 1977-08-15 1979-02-27 International Business Machines Corporation High speed decoding of Reed-Solomon codes
DE3376907D1 (en) * 1982-06-15 1988-07-07 Toshiba Kk Apparatus for dividing the elements of a galois field
JPS58219852A (ja) * 1982-06-15 1983-12-21 Toshiba Corp エラ−訂正回路
DE3377029D1 (en) * 1982-06-15 1988-07-14 Toshiba Kk Apparatus for dividing the elements of a galois field
US4509172A (en) * 1982-09-28 1985-04-02 International Business Machines Corporation Double error correction - triple error detection code
US4604655A (en) * 1982-10-23 1986-08-05 Pioneer Electronic Corporation Method of recording and reproducing video format signal
US4567594A (en) * 1983-06-07 1986-01-28 Burroughs Corporation Reed-Solomon error detecting and correcting system employing pipelined processors
US4677622A (en) * 1983-06-22 1987-06-30 Hitachi, Ltd. Error correction method and system
EP0136587B1 (en) * 1983-09-06 1991-04-17 Kabushiki Kaisha Toshiba Error correction circuit
US4841300A (en) * 1986-06-18 1989-06-20 Mitsubishi Denki K.K. Error correction encoder/decoder
US4782490A (en) * 1987-03-16 1988-11-01 Cythera Corporation Method and a system for multiple error detection and correction
US4958349A (en) * 1988-11-01 1990-09-18 Ford Aerospace Corporation High data rate BCH decoder
JP2810397B2 (ja) * 1989-02-16 1998-10-15 キヤノン株式会社 誤り訂正装置
US5040179A (en) * 1989-08-18 1991-08-13 Loral Aerospace Corp. High data rate BCH encoder
JP2824474B2 (ja) * 1992-02-17 1998-11-11 三菱電機株式会社 誤り訂正方式及びこの誤り訂正方式を用いた復号器
EP0563491A1 (en) * 1992-03-31 1993-10-06 International Business Machines Corporation Method and apparatus for implementing a triple error detection and double error correction code
US5710782A (en) * 1995-12-28 1998-01-20 Quantum Corporation System for correction of three and four errors
US5761102A (en) * 1995-12-28 1998-06-02 Quantum Corporation System and method for determining the cube root of an element of a galois field GF(2)
US5771246A (en) * 1996-09-17 1998-06-23 Quantum Corporation Multiple-burst-correction system
KR100213254B1 (ko) * 1996-10-18 1999-08-02 윤종용 에러 정정 방법 및 장치
US5887005A (en) * 1997-06-26 1999-03-23 Integrated Device Technology, Inc. Methods and apparatus for error correction
US5889793A (en) * 1997-06-27 1999-03-30 Integrated Device Technology, Inc. Methods and apparatus for error correction
KR100260415B1 (ko) * 1997-08-13 2000-07-01 윤종용 고속시리얼에러위치다항식계산회로
US6199188B1 (en) * 1997-10-07 2001-03-06 Quantum Corporation System for finding roots of degree three and degree four error locator polynomials over GF(2M)
US5978956A (en) * 1997-12-03 1999-11-02 Quantum Corporation Five-error correction system
US6272659B1 (en) * 1998-05-18 2001-08-07 Cirrus Logic, Inc. Error correction code processor employing adjustable correction power for miscorrection minimization
JP2000173289A (ja) 1998-12-10 2000-06-23 Toshiba Corp エラー訂正可能なフラッシュメモリシステム
US6343367B1 (en) * 1999-03-29 2002-01-29 Maxtor Corporation Error correction system for five or more errors
US6374383B1 (en) * 1999-06-07 2002-04-16 Maxtor Corporation Determining error locations using error correction codes
US6360348B1 (en) * 1999-08-27 2002-03-19 Motorola, Inc. Method and apparatus for coding and decoding data
US6560747B1 (en) * 1999-11-10 2003-05-06 Maxtor Corporation Error counting mechanism
JP3975245B2 (ja) 1999-12-16 2007-09-12 株式会社ルネサステクノロジ 記録再生装置および半導体メモリ
US6651214B1 (en) * 2000-01-06 2003-11-18 Maxtor Corporation Bi-directional decodable Reed-Solomon codes
US6643819B1 (en) * 2000-01-26 2003-11-04 Maxtor Corporation Hybrid root-finding technique
JP3606569B2 (ja) * 2001-03-09 2005-01-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 復号回路、該復号回路を用いる復号装置、復号方法および半導体デバイス
JP3447053B2 (ja) * 2001-03-09 2003-09-16 インターナショナル・ビジネス・マシーンズ・コーポレーション 組み合わせ回路、該組み合わせ回路を使用する符号化装置、復号装置、および半導体デバイス
JP4112849B2 (ja) * 2001-11-21 2008-07-02 株式会社東芝 半導体記憶装置
US7228467B2 (en) * 2003-10-10 2007-06-05 Quantum Corporation Correcting data having more data blocks with errors than redundancy blocks
JP4791831B2 (ja) 2006-01-20 2011-10-12 株式会社東芝 半導体記憶装置
JP4836608B2 (ja) 2006-02-27 2011-12-14 株式会社東芝 半導体記憶装置
JP2007305267A (ja) * 2006-05-15 2007-11-22 Toshiba Corp 半導体記憶装置
JP4891704B2 (ja) 2006-08-28 2012-03-07 株式会社東芝 半導体記憶装置
US20100107039A1 (en) 2007-02-01 2010-04-29 Kabushiki Kaisha Toshiba Semiconductor memory with reed-solomon decoder
JP4621715B2 (ja) 2007-08-13 2011-01-26 株式会社東芝 メモリ装置
US8433742B2 (en) * 2008-08-06 2013-04-30 Oracle America, Inc. Modulus-based error-checking technique

Also Published As

Publication number Publication date
US7962838B2 (en) 2011-06-14
US20100115383A1 (en) 2010-05-06
JP2010108569A (ja) 2010-05-13

Similar Documents

Publication Publication Date Title
JP5259343B2 (ja) メモリ装置
JP4621715B2 (ja) メモリ装置
JP2010518464A (ja) 半導体記憶装置
US5754563A (en) Byte-parallel system for implementing reed-solomon error-correcting codes
JP4791831B2 (ja) 半導体記憶装置
JP4836608B2 (ja) 半導体記憶装置
US8468434B2 (en) Error detection and correction system including a syndrome element calculating unit
JPS59197940A (ja) 誤り検出・補正メモリ
JP2007305267A (ja) 半導体記憶装置
US5668976A (en) Error correction method and apparatus for disk drive emulator
JP4846384B2 (ja) 半導体記憶装置
US9384083B2 (en) Error location search circuit, and error check and correction circuit and memory device including the same
JPS6037833A (ja) 符号語の複号装置及び読み取り装置
TWI479317B (zh) Memory system
US8661319B2 (en) Memory system
JP4891704B2 (ja) 半導体記憶装置
US10367529B2 (en) List decode circuits
Chen et al. An adaptive code rate EDAC scheme for random access memory
JP2012123600A (ja) メモリシステム及びメモリコントローラ
KR102021560B1 (ko) 오류 위치 탐색 회로, 그리고 그것을 포함하는 오류 검출 정정 회로 및 메모리 장치
US20220179741A1 (en) Programmable error correction code encoding and decoding logic
JP2014057203A (ja) ガロア体演算回路、及びメモリ装置
JP2014068058A (ja) 誤り位置検索回路、誤り検出訂正回路、及びメモリ装置
JP2014064242A (ja) 誤り検出訂正回路及び半導体メモリ

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110315

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110315

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121218

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130213

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20130221

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130402

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130424

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160502

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees