JP2013225830A - メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法 - Google Patents
メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法 Download PDFInfo
- Publication number
- JP2013225830A JP2013225830A JP2012187140A JP2012187140A JP2013225830A JP 2013225830 A JP2013225830 A JP 2013225830A JP 2012187140 A JP2012187140 A JP 2012187140A JP 2012187140 A JP2012187140 A JP 2012187140A JP 2013225830 A JP2013225830 A JP 2013225830A
- Authority
- JP
- Japan
- Prior art keywords
- parity
- error correction
- user data
- parities
- decoding
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/09—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic 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/152—Bose-Chaudhuri-Hocquenghem [BCH] codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/29—Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2906—Coding, 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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
Abstract
【課題】誤りの規模に応じて誤り訂正に用いるパリティ数を適応的に変化させることができるメモリコントローラを得ること。
【解決手段】メモリコントローラであって、ユーザデータに誤り訂正符号化処理を行うことにより第1乃至第nパリティを生成し、第1乃至第nパリティ各々に誤り訂正符号化処理を行うことにより第1乃至第n外部パリティを生成する符号化部と、ユーザデータ、第1乃至第nパリティ、及び第1乃至第n外部パリティを用いて、誤り訂正復号処理を行う復号部と、を備え、第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式は、第1乃至第(i−1)パリティを生成するために用いられる生成多項式に基づいて選択される。
【選択図】図1
【解決手段】メモリコントローラであって、ユーザデータに誤り訂正符号化処理を行うことにより第1乃至第nパリティを生成し、第1乃至第nパリティ各々に誤り訂正符号化処理を行うことにより第1乃至第n外部パリティを生成する符号化部と、ユーザデータ、第1乃至第nパリティ、及び第1乃至第n外部パリティを用いて、誤り訂正復号処理を行う復号部と、を備え、第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式は、第1乃至第(i−1)パリティを生成するために用いられる生成多項式に基づいて選択される。
【選択図】図1
Description
本実施形態は、メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法に関する。
メモリに格納されたユーザデータをメモリから読み出した場合に、本来の値と異なった値に変化したり、送信装置が送信したデータが受信装置に受信されると受信されたデータが本来の値と異なった値に変化したり、等の現象が生じることがある。
この問題に対応するために、ユーザデータを誤り訂正符号化してパリティデータを生成し、ユーザデータとパリティデータを組にして管理するという方法が一般的に取られる。誤り訂正符号としては、例えば、BCH符号やRS(リードソロモン)符号が存在する。
しかしながら、従来技術では、ユーザデータに対して、誤りの規模に応じて処理量を変更する適応的な誤り訂正を行うことができない。
本実施形態によれば、ユーザデータに誤り訂正符号化処理を行うことにより第1乃至第nパリティを生成し、第1乃至第nパリティ各々に誤り訂正符号化処理を行うことにより第1乃至第n外部パリティを生成する符号化部と、ユーザデータ、第1乃至第nパリティ、及び第1乃至第n外部パリティを用いて、誤り訂正復号処理を行う復号部と、を備え、第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式は、第1乃至第(i−1)パリティを生成するために用いられる生成多項式に基づいて選択される。
以下に添付図面を参照して、実施形態にかかるメモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施の形態)
図1は、第1の実施の形態にかかるメモリシステムの構成例を示すブロック図である。本実施の形態の半導体記憶装置(記憶装置)1は、メモリコントローラ2と半導体メモリ部(不揮発性メモリ)3を備える。記憶装置1は、ホスト4と接続可能であり、図1ではホスト4と接続された状態を示している。ホスト4は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。
図1は、第1の実施の形態にかかるメモリシステムの構成例を示すブロック図である。本実施の形態の半導体記憶装置(記憶装置)1は、メモリコントローラ2と半導体メモリ部(不揮発性メモリ)3を備える。記憶装置1は、ホスト4と接続可能であり、図1ではホスト4と接続された状態を示している。ホスト4は、例えば、パーソナルコンピュータ、携帯端末などの電子機器である。
半導体メモリ部3は、データを不揮発に記憶する不揮発性メモリであり、例えば、NANDメモリである。なお、ここでは、半導体メモリ部3としてNANDメモリを用いる例を説明するが、半導体メモリ部3としてNANDメモリ以外の記憶手段を用いてもよい。NANDメモリでは、一般にページと言われる書込み単位(最小書込み)が存在し、ページ単位で書込みが行われる。
メモリコントローラ2は、ホスト4からの書込みコマンド(要求)に従って半導体メモリ部3への書込みを制御し、またホスト4からの読み出しコマンド(要求)に従ってNANDメモリ3からの読み出しを制御する。メモリコントローラ2は、HostI/F21、メモリI/F22、制御部23、符号化/復号部24を備える。符号化/復号部24は、符号化部25と復号部26を備える。HostI/F21、メモリI/F22、制御部23、符号化部25および復号部26は、内部バス20で接続されている。
HostI/F21は、ホスト4との間のインタフェース規格に従った処理を実施し、ホスト4から受信した命令、ユーザデータなどを内部バス20に出力する。また、HostI/F21は、半導体メモリ部3から読み出されたユーザデータ、制御部23からの応答などをホスト4へ送信する。
メモリI/F22は、制御部23の指示に基づいて、書込みデータを半導体メモリ部3へ書込む処理および半導体メモリ部3からの読み出し処理を制御する。
制御部23は、半導体記憶装置1の各構成要素を統括的に制御する制御部である。制御部23は、ホスト4からHostI/F21経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部23は、ホスト4からの命令に従って、半導体メモリ部3へのユーザデータおよびパリティの書き込み、半導体メモリ部3からのユーザデータの読み出しなどを、メモリI/F22へ指示する。
符号化部25は、内部バス20に転送されたデータに基づいて、誤り訂正符号化処理を実施しパリティを生成する。誤り訂正符号としてはどのような符号を用いてもよいが、例えば、BCH符号やRS(Reed−Solomon)符号等を用いることができる。以下の説明では、BCH符号を用いる例について説明するが、誤り訂正符号の種類はこれに限定されないが、符号化後に情報データとパリティとに分離できる符号が好ましい。
復号部26は、半導体メモリ部3からの読み出されたユーザデータおよびパリティに基づいて復号処理を実施する。ユーザデータに誤りの無い場合、半導体メモリ部3からの読み出されたユーザデータをそのまま内部バス20へ出力し、ユーザデータに誤りのある場合、パリティを用いて誤り訂正を行った後にユーザデータを内部バス20へ出力する。
NANDメモリでは、ページ単位で書込みが行われるが、信頼性の異なる(誤りの発生する確率が異なる)ページが存在することがある。例えば、NANDメモリのメモリセルとして多値セルを用いる場合、一般に、1つのメモリセルに格納される各bitには異なるページが割当てられる。例えば、1つのメモリセルに格納されるビットを3ビットとすると、3ビットにはそれぞれ異なるページが割当てられる。このような場合、ページにより信頼性が異なることがある。
信頼性の低いページでは、誤り訂正能力の高いパリティを生成しておくことが望ましい。誤り訂正能力の高いパリティを実現するためにはパリティのサイズを大きくすることになるが、NANDメモリの各ページのサイズは同一である。このため、信頼性の低いページに対応した誤り訂正能力のパリティを生成するためには、例えば、信頼性の低いページのパリティを2つに分割して、信頼性の高いページに分割したうちの1つのパリティを格納する方法が考えられる。しかし、この方法では、信頼性の低いページのユーザデータを読み出す際に、分割したパリティを格納した別のページも読み出す必要があり、読み出し速度が低下する。また、信頼性の低いページでも、実際にはほとんどのページでは、誤りは無いまたは誤り数が最大の想定数より少ない場合が多く、信頼性の高いページに対応した誤り訂正能力で十分対応可能である。
本実施の形態では、誤り訂正符号として、誤り訂正能力を高めた分のパリティを追加することにより段階的に誤り訂正能力の高い符号化を行うことが可能な符号を用いる。図2は、本実施の形態のパリティの格納概念の一例を示す図である。図2の上側には、比較例として、信頼性の低いページのユーザデータ#1に対して誤り訂正能力の高いパリティ#1を生成し、信頼性の高いページのユーザデータ#2に対して誤り訂正能力の低いパリティ#2を生成して格納した例を示している。このように信頼性の高さに応じて誤り訂正能力を変えてパリティを生成してユーザデータと同一のページに格納するとページごとにパリティのサイズが異なることになってしまう。
これに対して、図2の下側に示した本実施の形態では、1段階で誤り訂正能力の高いパリティ#1を生成するのではなく、1段階目としてユーザデータ#1に基づいて所定の誤り訂正能力を有するパリティ#1−1を生成し、2段階目としてユーザデータ#1とパリティ#1−1を用いてパリティ#1−2を生成し、3段階目としてユーザデータ#1とパリティ#1−1とパリティ#1−2を用いてパリティ#1−3を生成し、…というように段階的にパリティを生成する。そして、復号時には、まず、パリティ#1−1を用いて復号を行い誤り訂正不可であった場合に、パリティ#1−2を読み出し、パリティ#1−1およびパリティ#1−2を用いて復号を行い誤り訂正不可であった場合にパリティ#1−3を読み出し、…というように段階的に復号を行う。このような符号化および復号化を行うと、例えば、図2に示すように、信頼性の低い(平均誤りビット数の多い)ページ#1にユーザデータ#1を格納する場合、ユーザデータ#1に基づいて生成したパリティ#1−1を当該パリティに対応するユーザデータ#1が格納されるページに格納し、パリティ#1−2を信頼性の高いページ#2に格納することができる。復号時には通常は、まずユーザデータ#1およびパリティ#1−1を読み出す。このように構成しておくと、パリティ#1−1を用いた復号で誤り訂正が可能であった場合には、ページ#1以外のページ(図2の例ではページ#2)を読み出さなくてよい。なお、図2では、図の簡略化のため、2段階のパリティを例に説明しているが、本実施の形態のパリティの生成は2段階に限らず、後述するように何段階で生成してもよい。
一方、パリティを多段階に分けて生成する方法として、独立した符号化処理を段階的に行う方法も考えられる。例えば、1段階目としてユーザデータに対して所定の誤り能力を有するパリティAを生成する。そして、2段階目としてユーザデータに基づいて別の符号化処理により所定の誤り能力より高い誤り能力を有するパリティBを生成し、図2と同様に、ユーザデータと同一ページにパリティAを格納し、同一でないページにパリティBを格納するということも考えられる。しかし、この場合、パリティBはパリティAとはまったく独立に生成されているため、パリティBを用いた復号の際にパリティAを用いることができない。一方、上述した誤り訂正能力を高めた分のパリティを追加する符号を用いれば、パリティ#1−2を用いた復号の際にパリティ#1−1も用いることができる。したがって、合計のパリティサイズが同じであれば、誤り訂正能力を高めた分のパリティを追加する符号の方が独立した多段階の符号化に比べ高い誤り訂正能力を有し、また、同じ誤り訂正能力であれば、誤り訂正能力を高めた分のパリティを追加する符号の方がパリティのサイズが少なくてすむ。
このため、本実施の形態では、i(iは2以上n以下の整数)段階目のパリティのサイズは、1乃至i段階目の全てのパリティを用いて誤り訂正を行う場合と同等の誤り訂正能力を有するよう単独で生成されるパリティのサイズより小さくなるようにn段階でパリティを生成する。例えば、上記の例では、本実施の形態の2段階目のパリティであるパリティ#1−2のサイズは、パリティAと独立に生成した2段階目のパリティであるパリティBのサイズより小さい。
以下、本実施の形態の誤り訂正符号化処理(以下、符号演算と略す)および復号演算について説明する。図3は、本実施の形態の符号演算の概念を示す図である。図3に示すように、本実施の形態の符号化部25は、符号演算として次のようにn段階でパリティを計算する。
(1)ユーザデータを用いてG1(x)によりパリティ#1を計算。
(2)ユーザデータ+パリティ#1を用いてG2(x)によりパリティ#2を計算。
(3)ユーザデータ+パリティ#1+パリティ#2を用いてG3(x)によりパリティ#3を計算。
…
(n)ユーザデータ+パリティ#1+パリティ#2+…+パリティ#(n−1)を用いてGn(x)によりパリティ#n(nは1以上の整数)を計算。
なお、Gi(x)(i=1,2,…,n)は生成多項式であり、Gi(x)については後述する。
(1)ユーザデータを用いてG1(x)によりパリティ#1を計算。
(2)ユーザデータ+パリティ#1を用いてG2(x)によりパリティ#2を計算。
(3)ユーザデータ+パリティ#1+パリティ#2を用いてG3(x)によりパリティ#3を計算。
…
(n)ユーザデータ+パリティ#1+パリティ#2+…+パリティ#(n−1)を用いてGn(x)によりパリティ#n(nは1以上の整数)を計算。
なお、Gi(x)(i=1,2,…,n)は生成多項式であり、Gi(x)については後述する。
図4は、本実施の形態の復号演算の概念を示す図である。図4に示すように、本実施の形態の復号部26は、復号演算として、次のようにn段階で誤り訂正を実施する。
(1)パリティ#1を用いてユーザデータ+パリティ#1の誤り訂正を実施する。
(2)(1)の誤り訂正に失敗した場合、パリティ#1〜パリティ#2を用いてユーザデータ+パリティ#1+パリティ#2の誤り訂正を実施する。
(3)(2)の誤り訂正に失敗した場合、パリティ#1〜パリティ#3を用いてユーザデータ+パリティ#1+パリティ#2+パリティ#3の誤り訂正を実施する。
…
(n)(n−1)の誤り訂正に失敗した場合、パリティ#1〜パリティ#nを用いてユーザデータ+パリティ#1+パリティ#2+パリティ#3+…+パリティ#nの誤り訂正を実施する。
(1)パリティ#1を用いてユーザデータ+パリティ#1の誤り訂正を実施する。
(2)(1)の誤り訂正に失敗した場合、パリティ#1〜パリティ#2を用いてユーザデータ+パリティ#1+パリティ#2の誤り訂正を実施する。
(3)(2)の誤り訂正に失敗した場合、パリティ#1〜パリティ#3を用いてユーザデータ+パリティ#1+パリティ#2+パリティ#3の誤り訂正を実施する。
…
(n)(n−1)の誤り訂正に失敗した場合、パリティ#1〜パリティ#nを用いてユーザデータ+パリティ#1+パリティ#2+パリティ#3+…+パリティ#nの誤り訂正を実施する。
なお、各段階で、誤り訂正に失敗した場合に次の段階へ進み、各段階で誤り訂正に成功した場合は次の段階へは進まず復号演算を終了する。n段階目の誤り訂正処理で誤り訂正に失敗した場合は、復号部26は、誤り訂正に失敗したことを制御部23へ通知する。制御部23は、誤り訂正に失敗した場合の所定の手順(例えば、ホスト4へ読み出したユーザデータに誤りがあることを通知する等)を実施する。
また、パリティ#1を用いてユーザデータ+パリティ#1の復号処理を実施した際に、ユーザデータに誤りが無かった場合は、ユーザデータに対して誤り訂正は実施せず、読み出したユーザデータをそのまま出力する。なお、ユーザデータに誤り検出符号を付加しておいて、誤り検出符号を用いてユーザデータの誤りの有無を判定するようにしてもよい。
以上の演算を実施する場合に、パリティ#1からパリティ#iまでを用いて誤り訂正を行うよりも、パリティ#1からパリティ#(i+1)までを用いて誤り訂正を行う方がより強力な誤り訂正能力を有するようにするために、本実施の形態では、例えば、以下のような符号演算を実施する。
なお、以下の説明では、BCH符号を用いる場合の符号演算方法および復号演算方法について説明するが、BCH符号に限定されるものではない。
まず、BCH符号に関する一般的な説明を行う。ユーザデータ、パリティ、符号語などは0または1の値の列であり、これらを表現するためには様々な方法が存在するが、ここでは、多項式表現を用いて説明する。例えば、ユーザデータ10101は、多項式表現によりユーザデータ多項式x4+x2+1と表現することができる。
符号演算に際しては、ユーザデータ多項式に生成多項式と呼ばれる多項式を用いた四則演算を施して、パリティの多項式表現であるパリティ多項式を計算する。そして、ユーザデータ多項式とパリティ多項式を組み合わせることで符号多項式を計算する。
上記四則演算は、
・ガロア体GF(2)
・ガロア拡大体GF(2m)
・原始多項式
・最小多項式
に基づいて行われるが、これらに関しては、詳細は省略する。
・ガロア体GF(2)
・ガロア拡大体GF(2m)
・原始多項式
・最小多項式
に基づいて行われるが、これらに関しては、詳細は省略する。
ガロア拡大体GF(2m)は2m種類の元があり、それらは、0,1,α,α2,α3,…,αM-1,αM(M=2m−2)と表現される。
生成多項式を用いて計算される符号多項式に誤りが加わった結果(時間の経過とともに様々なストレスを受けた結果)得られる多項式を受信多項式とするとき、受信多項式に基づいて誤り多項式を計算し、誤り多項式を用いて符号多項式が計算可能であるためには、生成多項式を適切に選択する必要がある。
具体的には、tビットの誤りが計算可能であるためには、生成多項式=0が、rを任意の整数とし、αr,αr+1,αr+2,…,α2t+r-2,α2t+r-1の2t個の根を持っていればよい(BCH限界)。
次に、以上行ったBCH符号の説明に基づき、本実施の形態における生成多項式の選択方法の説明を行う。図3に示したn段階の誤り訂正符号では、G1(x),G2(x),…,Gn(x)のn個の生成多項式を用いて符号化を行う。なお、以下、添え字付の文字(r1、bb1等)を、上付文字(指数の肩)や添え字(下付文字)のなかで用いる場合、上付または下付ではない表記(r1、bb1等)で記載するが、両者は同じものを示している。
このとき、
(1)r1を整数とし、G1(x)=0がαr1,αr1+1,αr1+2,…,α2t1+r1-2,α2t1+r1-1の2t1(=2×t1)個の根を持っており、
(2)r2を整数とし、G1(x)*G2(x)=0が、αr2,αr2+1,αr2+2,…,α2t2+r2-2,α2t2+r2-1の2t2個の根を持っており、
…
(n)rnを整数とし、G1(x)*G2(x)…*Gn(x)=0が、αrn,αrn+1,αrn+2,…,α2tn+rn-2,α2tn+rn-1の2tn個の根を持っている、
というn種の条件を満たすようにn個の生成多項式G1(x),G2(x),…,Gn(x)を選択する。なお、r1,r2,…,rnは、以下の関係を満たす。
・r2≦r1、r1+2t1−1≦r2+2t2−1
・r3≦r2、r2+2t2−1≦r3+2t3−1
…
・rn≦rn-1、
rn-1+2tn-1−1≦rn+2tn−1
これにより、tn>tn-1>…>t2>t1となる。
(1)r1を整数とし、G1(x)=0がαr1,αr1+1,αr1+2,…,α2t1+r1-2,α2t1+r1-1の2t1(=2×t1)個の根を持っており、
(2)r2を整数とし、G1(x)*G2(x)=0が、αr2,αr2+1,αr2+2,…,α2t2+r2-2,α2t2+r2-1の2t2個の根を持っており、
…
(n)rnを整数とし、G1(x)*G2(x)…*Gn(x)=0が、αrn,αrn+1,αrn+2,…,α2tn+rn-2,α2tn+rn-1の2tn個の根を持っている、
というn種の条件を満たすようにn個の生成多項式G1(x),G2(x),…,Gn(x)を選択する。なお、r1,r2,…,rnは、以下の関係を満たす。
・r2≦r1、r1+2t1−1≦r2+2t2−1
・r3≦r2、r2+2t2−1≦r3+2t3−1
…
・rn≦rn-1、
rn-1+2tn-1−1≦rn+2tn−1
これにより、tn>tn-1>…>t2>t1となる。
上記の生成多項式選択を行うと、
t0=0、bi=ti−ti-1(1≦i≦n)とするとき、
Gi(x)によって計算されるパリティ#iは、biビットの訂正能力を持つ。
t0=0、bi=ti−ti-1(1≦i≦n)とするとき、
Gi(x)によって計算されるパリティ#iは、biビットの訂正能力を持つ。
また、上記の生成多項式選択を行うと、パリティ#1からパリティ#iを用いると、ユーザデータ+パリティ#1+パリティ#2+…+パリティ#i内にtiビットまでの誤りがある場合に、ユーザデータ内の誤りを訂正し、ユーザデータが本来取るべき値を得ることが可能である。
したがって、上記の生成多項式選択を行うと、パリティ#1からパリティ#nを用いると、ユーザデータ+パリティ#1+パリティ#2+…+パリティ#n内にtnビットまでの誤りがある場合にユーザデータ内の誤りを訂正し、ユーザデータが本来取るべき値を得ることが可能である。
上記のn−1種の条件を満たすよう選択した生成多項式の一例として、r1=r2=…=rn=1とした例を説明する。αiを根とするGF(2)上の最小多項式をMi(x)と置く。0<bb1<bb2<bb3<…<bbnを満たす任意の整数bb1、bb2、bb3、…、bbnに関して以下の式(1)のようにGGi(x)を置く。
GGi(x)=M1(x)*M3(x)*M5(x)*
…*M2bbi-1(x) (1≦i≦n) …(1)
GGi(x)=M1(x)*M3(x)*M5(x)*
…*M2bbi-1(x) (1≦i≦n) …(1)
このとき、GGi(x)を生成多項式とするBCH符号はbbiビットまでの誤り訂正が可能である。
以下の式(2)のように、Gi(x)を置くと、
G0(x)=1、
Gi(x)=GGi(x)/GGi-1(x)
=M2bb(i-1)+1(x)*M2bb(i-1)+3(x)*
…*M2bbi-1 (1≦i≦n) …(2)
なお、bb(i−1)=bbi-1とする。
G0(x)=1、
Gi(x)=GGi(x)/GGi-1(x)
=M2bb(i-1)+1(x)*M2bb(i-1)+3(x)*
…*M2bbi-1 (1≦i≦n) …(2)
なお、bb(i−1)=bbi-1とする。
式(2)で示した生成多項式は、上記のn−1種の条件を満たすよう選択した生成多項式の一例となり、上記のn−1種の条件において、bi=bbi−bbi-1とし、ti=bbiとした例に相当する。
図5は、本実施の形態の符号演算手順の一例を示すフローチャートである。図5の手順は、上記で説明した生成多項式を選択してn段階の符号化を行う場合の符号演算手順を示している。まず、i=1とし、符号語#0をユーザデータ(符号語#0=ユーザデータ)とする(ステップS1)。次に、符号語#iを符号語#(i−1)×xK(Kは生成多項式Gi(x)の次数)とする(符号語#i=符号語#(i−1)×xK)(ステップS2)。パリティ#iを、符号語#iの生成多項式Gi(x)による剰余として求める(ステップS3)。
そして、符号語#iにパリティ#iを加えて符号語#iを更新(符号語#i=符号語#i+パリティ#i)する(ステップS4)。その後、i=i+1とし(ステップS5)、n<iであるか否かを判断する(ステップS6)。n<iである場合(ステップS6 Yes)、処理を終了し、n<iでない場合(ステップS6 No)、ステップS2に戻る。
図6は、本実施の形態の復号演算手順の一例を示すフローチャートである。図6の手順は、図5で説明した符号演算を行った符号語が、半導体メモリ部3に格納された後に、読み出された場合の復号部26における復号手順を示している。まず、i=1とし、ユーザデータとパリティ#1を受信する(ステップS12)。具体的には、制御部23の指示に基づいてメモリI/F22が半導体メモリ部3から読み出したユーザデータと当該ユーザデータに対応するパリティ#1を内部バス20経由で受信する。
ユーザデータとパリティ#1からパリティ#iまでのパリティに基づいて誤り訂正を試みる(ステップS13)。そして、誤り訂正に成功したか否かを判断し(ステップS14)、誤り訂正に成功した場合(ステップS14 Yes)、処理を終了する。
誤り訂正に成功しなかった場合(ステップS14 No)、i=i+1とし(ステップS15)、n<iであるか否かを判断する(ステップS16)。n<iである場合(ステップS16 Yes)、処理を終了する。n<iでない場合(ステップS16 No)、パリティ#iを受信し(ステップS17)、ステップS13へ戻る。パリティ#iの受信は、具体的には、復号部26が誤り訂正の失敗を制御部23へ通知し、制御部23が当該通知に基づいてメモリI/F22に対して、パリティ#iの読出しを指示する。そして、メモリI/F22により半導体メモリ部3から読み出されたパリティ#iを内部バス20経由で受信する。
次に、ユーザデータとパリティの半導体メモリ部3への格納方法の例について説明する。図7〜図8は、ユーザデータとパリティの半導体メモリ部3への格納形式の例を示す図である。
図7の例では、すべてのユーザデータのサイズが同一(ユーザデータ#1,ユーザデータ#2,…,ユーザデータ#Uのサイズが同一)とした例を示しており、全てのユーザデータに対して同一サイズのパリティを生成して半導体メモリ部3へ格納している。この例では、ユーザデータ#i(i=1,2,…,U)に対して、上述の1段階目のパリティ#1に相当するパリティ#i−1,上述の2段階目のパリティ#2に相当するパリティ#i−2,上述の3段階目のパリティ#3に相当するパリティ#i−3,…,上述のn段階目のパリティ#2に相当するパリティ#i−nを生成して格納している。例えば、半導体メモリ部3がNANDメモリである場合、図7の一行を1ページとしてもよい。
なお、図7では、すべてのユーザデータのサイズを同一としているが、ユーザデータのうち一部またはすべてのサイズが異なっていても同様にユーザデータ#iに対してパリティ#i−1〜#i−nを生成して格納することができる。
また、図7の例では、1≦i≦Uの全てのiについて、パリティ#i−1のサイズを同一とし、パリティ#i−2のサイズを同一とし、パリティ#i−3のサイズを同一とし、…、パリティ#i−nのサイズを同一としているが、これらパリティのうち一部またはすべてのサイズが異なっていてもよい。
また、図7の例では、すべてのユーザデータのパリティの数(n)が同一であるが、ユーザデータのうちの一部または全てについてパリティの数が異なっていてもよい。
また、図7の例では、パリティ#i−1,パリティ#i−2,パリティ#i−3,…,パリティ#i−nが連続する領域に記憶されているが、これらパリティのうち一部またはすべてが非連続な領域に記憶されてもよい。
図8の例では、ユーザデータ#2とユーザデータ#1およびユーザデータ#3とで、パリティの数(n)が異なり、また、パリティ#i−1,パリティ#i−2,パリティ#i−3,…,パリティ#i−nを非連続な領域に格納した例を示している。ユーザデータ#2ではn=3とし、ユーザデータ#1およびユーザデータ#3では、n=1としている。そして、ユーザデータ#2に連続する領域にパリティ#2−1を格納し、パリティ#2−2はユーザデータ#1に連続する領域に格納し、パリティ#2−3はユーザデータ#3に連続する領域に格納している。各ユーザデータに対応するパリティの数、各パリティの配置位置は図8の例に限定されない。例えば、半導体メモリ部3がNANDメモリである場合、図8の一行を1ページとしてもよい。
図6、図7、図8の例では、半導体メモリ部3が1つの記憶装置である例を示したが、図9は、半導体メモリ3がメモリ部3−1〜3−(n+1)の複数の記憶装置で構成される例を示している。メモリ部3−1〜3−(n+1)は、例えばそれぞれ異なるメモリチップであってもよいし、それぞれ異なる形式(例えば、NANDメモリと磁気記憶装置等)の記憶装置であってもよい。図9の例では、メモリ部3−1にユーザデータ#1〜#Uを格納し、パリティ#i−1をメモリ部3−2に格納し、パリティ#i−2をメモリ部3−3に格納し、パリティ#i−3をメモリ部3−4に格納し、…、パリティ#i−nをメモリ部3−(n+1)に格納している。図9は、各メモリ部へユーザデータおよび各パリティを分散して格納する場合の一例を示しており、具体的な分散方法は、図9の例に限定されない。また、図9の例では、半導体メモリ部3内の異なる記憶装置にユーザデータおよび各パリティを分散して格納する例を示したが、ユーザデータおよび各パリティの一部を半導体メモリ部3外の別の記憶装置に格納してもよい。
以上のように、本実施の形態では、パリティを多段階で生成する。そして、復号時に、1段階目と2段階目のパリティを2段階目の誤り訂正で用い、1段階目、2段階目および3段階目のパリティを3段目の誤り訂正で用い、…というように、他の段階のパリティを復号において用いることにより誤り訂正能力を向上させることができる符号を、符号演算において生成するようにした。このため、平均的な読み出し速度を低下させずに、誤りの規模に応じて誤り訂正に用いるパリティ数を適応的に変化させることができ、また、独立して多段階のパリティを生成する場合に比べ、パリティ量が同一であれば誤り訂正能力を高めることができる。
(第2の実施の形態)
図10は、第2の実施の形態にかかるメモリシステムの構成例を示すブロック図である。本実施の形態の半導体記憶装置1aは、メモリコントローラ2aと半導体メモリ部3を備える。半導体メモリ部3は第1の実施の形態の半導体メモリ部3と同様である。記憶装置1aは、第1の実施の形態の記憶装置1と同様にホスト4と接続可能である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
図10は、第2の実施の形態にかかるメモリシステムの構成例を示すブロック図である。本実施の形態の半導体記憶装置1aは、メモリコントローラ2aと半導体メモリ部3を備える。半導体メモリ部3は第1の実施の形態の半導体メモリ部3と同様である。記憶装置1aは、第1の実施の形態の記憶装置1と同様にホスト4と接続可能である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
メモリコントローラ2aは、符号化/復号部24を符号化/復号部24aに替える以外は、第1の実施の形態のメモリコントローラ2と同様である。符号/復号部24aは、符号化部25aと復号部26aで構成される。本実施の形態の動作は、半導体メモリ部3への書込み時の符号演算および半導体メモリ部3からの読み出し時の復号演算を除き、第1の実施の形態と同様である。
本実施の形態の符号化部25aにおける符号演算について説明する。図11は、本実施の形態の符号演算の概念を示す図である。図11に示したG1(x)〜Gn(x)は、第1の実施の形態で述べた生成多項式G1(x)〜Gn(x)と同様である。
図11に示すように、本実施の形態の符号化部25aは、符号演算として次のようにn段階でパリティを計算する。
(1)ユーザデータを用いてG1(x)によりパリティ#1を計算し、パリティ#1のパリティである外部パリティ#1を計算する。
(2)ユーザデータを用いてG2(x)によりパリティ#2を計算し、パリティ#2のパリティである外部パリティ#2を計算する。
(3)ユーザデータを用いてG3(x)によりパリティ#3を計算し、パリティ#3のパリティである外部パリティ#3を計算する。
…
(n)ユーザデータを用いてGn(x)によりパリティ#n(nは1以上の整数)を計算し、パリティ#nのパリティである外部パリティ#nを計算する。
(1)ユーザデータを用いてG1(x)によりパリティ#1を計算し、パリティ#1のパリティである外部パリティ#1を計算する。
(2)ユーザデータを用いてG2(x)によりパリティ#2を計算し、パリティ#2のパリティである外部パリティ#2を計算する。
(3)ユーザデータを用いてG3(x)によりパリティ#3を計算し、パリティ#3のパリティである外部パリティ#3を計算する。
…
(n)ユーザデータを用いてGn(x)によりパリティ#n(nは1以上の整数)を計算し、パリティ#nのパリティである外部パリティ#nを計算する。
次に、本実施の形態の復号部26aにおける復号演算について説明する。本実施の形態の復号部26aは、復号演算として次のようにn段階で誤り訂正を実施する。
(1)外部パリティ#1を用いてパリティ#1の誤り訂正を行う。パリティ#1の誤り訂正に成功した場合、誤り訂正後のパリティ#1(誤りの無かった場合には元のパリティ#1)とユーザデータを用いて、ユーザデータの誤り訂正を実施する。
(2)(1)でユーザデータの誤り訂正に失敗した場合、外部パリティ#2を用いてパリティ#2の誤り訂正を行う。パリティ#2の誤り訂正に成功した場合、誤り訂正後のパリティ#1と誤り訂正後のパリティ#2とユーザデータとを用いて、ユーザデータの誤り訂正を実施する。
(3)(2)でユーザデータの誤り訂正に失敗した場合、外部パリティ#3を用いてパリティ#3の誤り訂正を行う。パリティ#3の誤り訂正に成功した場合、誤り訂正後のパリティ#1と誤り訂正後のパリティ#2と誤り訂正後のパリティ#3とユーザデータとを用いて、ユーザデータの誤り訂正を実施する。
…
(n)(n−1)でユーザデータの誤り訂正に失敗した場合、外部パリティ#nを用いてパリティ#nの誤り訂正を行う。パリティ#nの誤り訂正に成功した場合、誤り訂正後のパリティ#1と誤り訂正後のパリティ#2と誤り訂正後のパリティ#3と…誤り訂正後のパリティ#nとユーザデータとを用いて、ユーザデータの誤り訂正を実施する。
(1)外部パリティ#1を用いてパリティ#1の誤り訂正を行う。パリティ#1の誤り訂正に成功した場合、誤り訂正後のパリティ#1(誤りの無かった場合には元のパリティ#1)とユーザデータを用いて、ユーザデータの誤り訂正を実施する。
(2)(1)でユーザデータの誤り訂正に失敗した場合、外部パリティ#2を用いてパリティ#2の誤り訂正を行う。パリティ#2の誤り訂正に成功した場合、誤り訂正後のパリティ#1と誤り訂正後のパリティ#2とユーザデータとを用いて、ユーザデータの誤り訂正を実施する。
(3)(2)でユーザデータの誤り訂正に失敗した場合、外部パリティ#3を用いてパリティ#3の誤り訂正を行う。パリティ#3の誤り訂正に成功した場合、誤り訂正後のパリティ#1と誤り訂正後のパリティ#2と誤り訂正後のパリティ#3とユーザデータとを用いて、ユーザデータの誤り訂正を実施する。
…
(n)(n−1)でユーザデータの誤り訂正に失敗した場合、外部パリティ#nを用いてパリティ#nの誤り訂正を行う。パリティ#nの誤り訂正に成功した場合、誤り訂正後のパリティ#1と誤り訂正後のパリティ#2と誤り訂正後のパリティ#3と…誤り訂正後のパリティ#nとユーザデータとを用いて、ユーザデータの誤り訂正を実施する。
なお、外部パリティ#i(i=1,2,…,n)を用いたパリティ#iの誤り訂正に失敗した場合、ユーザデータの誤り訂正ができないため、復号部26aは制御部23へ当該ユーザデータの誤り訂正の失敗を通知する。
なお、ユーザデータ、パリティ#i、外部パリティ#iの半導体メモリ部3への格納方法に制約はなく、ユーザデータ、パリティ#i、外部パリティ#iを連続した領域に格納してもよいし、分散させて格納してもよい。また、第1の実施の形態で述べたように、複数の記憶装置に分散させて格納してもよい。例えば、半導体メモリ部3がNANDメモリである場合、パリティ#1〜#nをユーザデータと同一ページ内に格納し、外部パリティ#1〜#nを半導体メモリ部3外の別の記憶装置に格納してもよい。また、パリティ#1をユーザデータと同一ページ内に格納し、パリティ#2〜#nと外部パリティ#1〜#nを別のページに格納してもよい。
以上のように、本実施の形態では、ユーザデータに基づいて第1の実施の形態と同様の生成多項式を用いて各段階のパリティを生成し、各段階のパリティのパリティである外部パリティを生成するようにした。このため、ユーザデータの誤り訂正を行う演算において、パリティに誤りは含まれないとして演算することができ、第1の実施の形態に比べ、演算を高速化することができる。
(第3の実施の形態)
図12は、第3の実施の形態にかかるメモリシステムの構成例を示すブロック図である。本実施の形態の半導体記憶装置1bは、メモリコントローラ2bと半導体メモリ部3を備える。半導体メモリ部3は第1の実施の形態の半導体メモリ部3と同様である。記憶装置1bは、第1の実施の形態の記憶装置1と同様にホスト4と接続可能である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
図12は、第3の実施の形態にかかるメモリシステムの構成例を示すブロック図である。本実施の形態の半導体記憶装置1bは、メモリコントローラ2bと半導体メモリ部3を備える。半導体メモリ部3は第1の実施の形態の半導体メモリ部3と同様である。記憶装置1bは、第1の実施の形態の記憶装置1と同様にホスト4と接続可能である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
メモリコントローラ2bは、符号/復号部24を符号/復号部24bに替える以外は、第1の実施の形態のメモリコントローラ2と同様である。符号/復号部24bは、符号化部25bと復号部26bとパリティ保護表記憶部27と構成される。本実施の形態の動作は、半導体メモリ部3への書込み時の符号演算および半導体メモリ部3からの読み出し時の復号演算を除き、第1の実施の形態と同様である。
第1の実施の形態では、n段階目の誤り訂正手続きの主要部において、パリティ#1、パリティ#2、…、パリティ#nの誤り訂正対象が、ユーザデータ+パリティ#1+パリティ#2+…+パリティ#nであり、すべてのパリティが誤り訂正の対象となっている。すなわち、パリティ#1、パリティ#2、…、パリティ#nに誤りが含まれているかもしれないという前提で誤り訂正を行う。
これに対し、第2の実施の形態では、パリティ#1、パリティ#2、…、パリティ#nの誤り訂正対象が、ユーザデータのみであり、パリティ#1、パリティ#2、…、パリティ#n自身はパリティ#1、パリティ#2、…、パリティ#nの誤り訂正の対象外である。パリティ#1、パリティ#2、…、パリティ#nは、パリティ#1、パリティ#2、…、パリティ#nとは異なる別のパリティである外部パリティ#1、外部パリティ#2、…、外部パリティ#nの誤り訂正対象である。
すなわち、パリティ#i(1≦i≦n)に誤りが存在する場合には、第1の実施の形態では、パリティ#i自身とパリティj(i<j)を用いてパリティ#iを訂正し、第2の実施の形態では、外部パリティ#iを用いてパリティ#iを訂正する。
本実施の形態では、パリティ#iの誤りを、第1の実施の形態の方法で訂正するか、第2の実施の形態の方法で訂正するか、をパリティ#iごとに設定可能とし、パリティ#iの誤りを、どのパリティで誤り訂正するかを示すパリティ保護情報をパリティ保護表として保持する。そして、符号演算、復号演算を行う際に、パリティ保護表に従って演算を実施する。パリティ保護表を任意に設定可能とすることで、パリティ#iの誤りをどのパリティを用いて誤り訂正するかを任意に設定することができる。パリティ保護表は、パリティ保護表記憶部27に記憶される。
図13は、パリティ保護表の一例を示す図である。図13の表の縦方向は、誤り訂正対象となるパリティを示し、横方向は誤り訂正対象をする際に用いることができるパリティを示している。図13の表では、丸印は誤り訂正に用いることが可能なことを示し、バツ印はパリティを用いることができないことを示す。また、図13の表では、パリティ#iを誤り訂正対象とする場合のパリティ#1〜#iは、設定により変更されることはないため「−」として示している。例えば、1行目のパリティ#1は、用いることが自明なパリティ#1と、丸印となっているパリティ#2、パリティ#3、…、パリティ#nを用いて誤り訂正することができる。パリティ#2は、用いることが自明なパリティ#2と、外部パリティを用いて誤り訂正を行うことができる。パリティ#3は、用いることが自明なパリティ#3と、外部パリティを用いて誤り訂正を行うことができる。なお、図13は一例であり、パリティ保護表の具体的内容はこの例に限定されない。
図14は、本実施の形態の符号演算の概念を示す図である。図14は、図13に示したパリティ保護表に対応する符号演算の例を示している。
図14の例では、符号化部25bは、符号演算として次のようにn段階でパリティを計算する。
(1)ユーザデータを用いてG1(x)によりパリティ#1を計算する。
(2)ユーザデータとパリティ#1を用いてG2(x)によりパリティ#2を計算し、パリティ#2のパリティである外部パリティ#2を計算する。
(3)ユーザデータとパリティ#1を用いてG3(x)によりパリティ#3を計算し、パリティ#3のパリティである外部パリティ#3を計算する。
…
(n)ユーザデータとパリティ#1を用いてGn(x)によりパリティ#n(nは1以上の整数)を計算し、パリティ#nのパリティである外部パリティ#nを計算する。
(1)ユーザデータを用いてG1(x)によりパリティ#1を計算する。
(2)ユーザデータとパリティ#1を用いてG2(x)によりパリティ#2を計算し、パリティ#2のパリティである外部パリティ#2を計算する。
(3)ユーザデータとパリティ#1を用いてG3(x)によりパリティ#3を計算し、パリティ#3のパリティである外部パリティ#3を計算する。
…
(n)ユーザデータとパリティ#1を用いてGn(x)によりパリティ#n(nは1以上の整数)を計算し、パリティ#nのパリティである外部パリティ#nを計算する。
符号化部25bは、パリティ保護表に基づいてパリティの生成方法を選択して、対応するパリティを生成する。例えば、図13の例の場合、パリティ#1については、外部パリティが用いられないため、第1の実施の形態と同様にユーザデータに基づいてパリティ#1を生成し、パリティ#1に対する外部パリティは生成しない。一方、パリティ#2については、外部パリティが用いるため、ユーザデータに基づいてパリティ#2を生成し、さらにパリティ#2に対する外部パリティを生成する。
なお、パリティ#1からパリティ#(i−1)までの全てが外部パリティにより保護されている場合は、ユーザデータのみに基づいてパリティ#iを生成すればよいが、パリティ#1からパリティ#(i−1)の中に外部パリティによって保護されないパリティが存在する場合には、ユーザデータ+外部パリティによって保護されないパリティすべてを用いてパリティ#iを生成する。
復号部26bは、パリティ保護表に基づいてパリティの復号方法を選択して、対応する誤り訂正処理を実施する。例えば、図13の例の場合、パリティ#1を用いた1段階目の誤り訂正処理では、外部パリティが生成されていないため、第1の実施の形態と同様にパリティ#1とユーザデータとに基づいてユーザデータの誤り訂正を行う。一方、パリティ#2については外部パリティが生成されているため、パリティ#2の外部パリティを用いてパリティ#2の誤り訂正を行った後に、パリティ#1、パリティ#2およびユーザデータに基づいてユーザデータの誤り訂正を実施する。
図15は、本実施の形態の復号演算の概念とユーザデータおよびパリティの格納例を示す図である。図15は、半導体メモリ部3への格納例として、ユーザデータ#1、ユーザデータ#2、ユーザデータ#3について、ユーザデータ#2にはユーザデータ#1、#3より多くのパリティを割り当てる例を示している。図15のユーザデータ#2に関しては、3段階の符号演算が実施され、ユーザデータ#1、ユーザデータ#3については、1段階の符号化が実施されている。ここでは、半導体メモリ部3をNANDメモリとし、ユーザデータ#1、ユーザデータ#2、ユーザデータ#3をそれぞれ異なるページに格納されるとする。
具体的には、ユーザデータ#2に関しては、1段階目のパリティとしてパリティ#2−1が生成され(パリティ#2−1に対する外部パリティは無し)、2段階目のパリティとしてパリティ#2−2が生成されるとともにパリティ#2−2の外部パリティ(図15のパリティ#1−1が外部パリティに相当する)が生成され、3段階目のパリティとしてパリティ#2−3が生成されるとともにパリティ#2−3の外部パリティ(図15のパリティ#3−1が外部パリティに相当する)が生成される。また、ユーザデータ#1に関しては、ユーザデータ#1とパリティ#2−2を通常のユーザデータと同様とみなしてパリティ#1−1を生成する。同様に、ユーザデータ#3に関しては、ユーザデータ#3とパリティ#2−3を通常のユーザデータと同様とみなしてパリティ#3−1を生成する。このように、パリティ#1−1はユーザデータ#1のパリティであるが、パリティ#2−2の外部パリティでもある。また、パリティ#3−1はユーザデータ#3のパリティであるが、パリティ#2−3の外部パリティでもある。
図15の例では、多段階の符号化を行うユーザデータ#2の外部パリティを他のページに格納し、他のページのパリティ(パリティ#1−1,#3−1)の誤り訂正対象としてユーザデータだけでなく当該ページに格納されたユーザデータ#2のパリティを含めるように構成しているが、外部パリティの生成方法はこの方法に限定されない。他のページ(ユーザデータ#1、ユーザデータ#3)のユーザデータのパリティとは別にユーザページ#2のパリティの外部パリティを生成して、半導体メモリ3上または他の記憶装置に格納するようにしてもよい。
図15の例のユーザデータ#2の復号演算の手順を説明する。
(1)ユーザデータ#2およびパリティ#2−1を用いてユーザデータの誤り訂正を実施する。
(2)(1)でユーザデータの誤り訂正に失敗した場合、外部パリティであるパリティ#1−1とユーザデータ#1とパリティ#2−2を用いて、パリティ#2−2の誤り訂正を行う。パリティ#2−2の誤り訂正に成功した場合、パリティ#2−1と誤り訂正後のパリティ#2−2とユーザデータ#2とを用いて、ユーザデータ#2の誤り訂正を実施する。
(3)(2)でユーザデータの誤り訂正に失敗した場合、外部パリティであるパリティ#3−1とユーザデータ#3とパリティ#2−3を用いて、パリティ#2−3の誤り訂正を行う。パリティ#2−3の誤り訂正に成功した場合、パリティ#2−1と誤り訂正後のパリティ#2−2と誤り訂正後のパリティ#2−3とユーザデータ#2とを用いて、ユーザデータ#2の誤り訂正を実施する。
(1)ユーザデータ#2およびパリティ#2−1を用いてユーザデータの誤り訂正を実施する。
(2)(1)でユーザデータの誤り訂正に失敗した場合、外部パリティであるパリティ#1−1とユーザデータ#1とパリティ#2−2を用いて、パリティ#2−2の誤り訂正を行う。パリティ#2−2の誤り訂正に成功した場合、パリティ#2−1と誤り訂正後のパリティ#2−2とユーザデータ#2とを用いて、ユーザデータ#2の誤り訂正を実施する。
(3)(2)でユーザデータの誤り訂正に失敗した場合、外部パリティであるパリティ#3−1とユーザデータ#3とパリティ#2−3を用いて、パリティ#2−3の誤り訂正を行う。パリティ#2−3の誤り訂正に成功した場合、パリティ#2−1と誤り訂正後のパリティ#2−2と誤り訂正後のパリティ#2−3とユーザデータ#2とを用いて、ユーザデータ#2の誤り訂正を実施する。
図16は、ユーザデータ1個とパリティ複数個とから外部パリティを計算する場合のユーザデータおよびパリティの格納例を示す図である。図16の例では、ユーザデータ#2、#3に関しては、3段階のパリティ生成が行われ、ユーザデータ#1については1段階のパリティ生成が行われる。ユーザデータ#2、#3に関しては、それぞれ1段階目のパリティとして生成多項式G1(x)に基づいてパリティ#2−1、#3−1が生成され、2段階目のパリティとして生成多項式G2(x)に基づいてパリティ#2−2、#3−2が生成される。そして、ユーザデータ#1、パリティ#2−2および#3−2に生成多項式G3(x)を用いてパリティ#1−1が生成される。パリティ#1−1は、パリティ#2−2および#3−2の外部パリティとなっている。
図17〜図19は、半導体メモリ部3をNANDメモリとした場合の本実施の形態のユーザデータおよび各パリティの格納方法の例を示している。ここでは、1つのメモリセルに3bitのデータを格納するとし、この3bitにそれぞれ異なるページが割当てられるとし、1ワードラインに格納されるページをlower(L)ページ、middle(M)ページ、upper(U)ページとそれぞれ呼ぶこととするが、半導体メモリ部3を構成するNANDメモリは、このようなタイプのメモリに限定されるものではない。図17〜図18では、パリティ専用ページ以外については、lowerページ、middleページ、upperページをそれぞれ異なるハッチングをして示している。例えば、図17〜図19において、1行目がlowerページ、2行目がmiddleページ、3行目がupperページ、4行目がlowerページ、…とする。パリティ専用ページについては、lowerページ用のパリティ、middle用ページのパリティ、upperページ用のパリティをそれぞれlowerページ、middleページ、upperページと同一のハッチングで示している。パリティ専用ページは、lowerページ、middleページ、upperページのいずれであってもよいが、図17〜図19では、パリティ専用ページは、middleページ(下から2段目)とupperページ(最下段)の例を示している。
図17〜図18の例では、パリティの一部を、(ユーザデータが格納されない)パリティ専用ページに格納している。図17の例では、lowerページ、middleページ、upperページの全てに同一サイズのパリティを割当てている。そして、1段階目で生成したパリティ(122B)をそれぞれ対応するユーザデータ(512B×2)と同一ページに格納し、2段階目のパリティ(7B)を、下から2行に示した2ページのパリティ専用ページに格納している。また、最下段のパリティ専用ページでは、2段階目のパリティをユーザデータと同等に扱って外部パリティ(129B)を生成し、各ページ(パリティ専用ページ)内に格納している。
図17の例では、lowerページ、middleページ、upperページの全てについて、それぞれページ内に格納された1段階目のパリティ(122B)を用いて69ビットまで訂正可能であり、さらにパリティ専用ページに格納された2段階目のパリティ(7B)を用いると73ビットまで訂正可能である。
また、図18の例では、lowerページ、middleページ、upperページの全てに、1段階目のパリティについては同一サイズのパリティを割当てている。そして、1段階目で生成したパリティ(122B)をそれぞれ対応するユーザデータ(512B×2)と同一ページに格納している。2段階目のパリティ(23B)については、middleページに対して生成して下から2行に示した2ページのパリティ専用ページに格納している。また、最下段のパリティ専用ページでは、2段階目のパリティをユーザデータと同等に扱って外部パリティ(145B)を生成し、各ページ(パリティ専用ページ)内に格納している。
図18の例では、lowerページ、middleページ、upperページの全てについて、それぞれページ内に格納された1段階目のパリティ(122B)を用いて69ビットまで訂正可能であり、さらにパリティ専用ページに格納された2段階目のパリティ(23B)を用いるとmiddleページについて82ビットまで訂正可能である。
また、図19の例では、middleページの1段階目のパリティのサイズをlowerページおよびupperページの1段階目のパリティのサイズより大きくしている。middleページの1段階目のパリティは69ビットまで訂正可能な122Bであり、lowerページおよびupperページの1段階目のパリティは、67ビットまで訂正可能な118Bである。また、2段階目のパリティ(23B)については、middleページに対して生成して下から2行に示した2ページのパリティ専用ページに格納する。さらに3段階目および4段階目のパリティ(各4B)をmiddleページに対して生成して、lowerページおよびupperページに格納している。また、最下段のパリティ専用ページでは、2段階目のパリティをユーザデータと同等に扱って外部パリティ(153B)を生成し、各ページ(パリティ専用ページ)内に格納している。
図19の例では、lowerページおよびupperページについては、67ビットまで訂正可能であり、middleページについては、ユーザデータと同一ページ内の1段階目のパリティを用いると69ビットまで訂正可能であり、パリティ専用ページの2段階目のパリティを用いると82ビットまで訂正可能であり、4段階目までの全てのパリティを用いると87ビットまで訂正可能である。
図18、図19の例のように、ページごとにパリティのサイズを変えるようにしておくと、例えば、信頼性の低いページに大きなサイズのパリティを割当てることが可能となる。また、実際の誤り数が少ない場合は、ページ内のパリティの読出しだけですむ。さらに、上述したように各段階のパリティを追加して誤り訂正を行うような符号化を行っているため、独立して多段階のパリティを生成する場合に比べ、パリティ量が同一であれば誤り訂正能力を高めることができる。
なお、図18、図19の例では、3ページのうち1ページにサイズの大きなパリティを割り当て、残りの2ページには同一サイズのパリティを割り当てたが、3ページすべてに異なるサイズのパリティを割り当ててもよい。
以上のように、本実施の形態では、パリティ保護表を用いて、パリティ#iを保護するパリティを設定可能とすることにより、第1の実施の形態の符号演算および復号演算と、第2の実施の形態の符号演算および復号演算と、を組み合わせて実施することができる。このため、想定される誤り数や演算速度への要求等に応じて適切な符号演算および復号演算を行うことができる。
(第4の実施の形態)
図20は、第4の実施の形態にかかる誤り訂正装置を備える通信装置の構成例を示すブロック図である。図20では、誤り訂正処理にかかる構成要素を示しており、例えば通信装置が無線通信装置である場合のアンテナ等、通信装置が通常備える機能は図示を省略している。
図20は、第4の実施の形態にかかる誤り訂正装置を備える通信装置の構成例を示すブロック図である。図20では、誤り訂正処理にかかる構成要素を示しており、例えば通信装置が無線通信装置である場合のアンテナ等、通信装置が通常備える機能は図示を省略している。
通信装置30−1,30−2は、それぞれ送信機能および受信機能を有し、通信装置30−1から送信されたユーザデータは通信装置30−2で受信され、通信装置30−2から送信されたユーザデータは通信装置30−1で受信される。通信装置30−1と通信装置30−2の間の通信路において、誤りが発生することがある。
このような通信路における誤りに対する誤り訂正にも第1の実施の形態で述べた多段階の符号化を適用することができる。
通信装置30−1,30−2は同様の構成を有する。図20に示すように、通信装置30−1,30−2は、符号化部40と復号部50を備える。符号化部40は、ユーザデータ生成部41、符号演算部42、符号記憶部43、送信部44および符号送信要求受信部45を備える。復号部50は、受信部51、復号演算部52および符号送信要求送信部53を備える。符号化部40および復号部50は、本実施の形態の誤り訂正装置を構成する。
まず、ユーザデータの送信動作について説明する。例えば、通信装置30−1から通信装置30−2へユーザデータを送信する場合、通信装置30−1のユーザデータ生成部41は、ユーザデータを生成して符号演算部42へ入力する。符号演算部42は、第1の実施の形態(または第2の実施の形態、第3の実施の形態のいずれかでもよい)と同様の多段階の符号演算によりパリティを生成し、符号記憶部43へパリティを格納する。例えば、パリティ#1〜パリティ#nが格納されるとする。送信部44は、ユーザデータと所定の段階までのパリティ(例えば、パリティ#1)とを通信装置30−2へ送信する。なお、第3の実施の形態の符号化を行う場合には、通信装置30−1および通信装置30−2はパリティ保護表を保持する。
通信装置30−2では、受信部51が、ユーザデータおよびパリティ(例えば、パリティ#1)を受信し、復号演算部52へ入力する。復号演算部52は、第1の実施の形態(または第2の実施の形態、第3の実施の形態のいずれかでもよい)と同様に受信したパリティに応じた処理を実施する。例えば、第1の実施の形態の符号演算が実施されて、パリティ#1を受信した場合、パリティ#1とユーザデータに基づいてユーザデータの誤り訂正を行う。復号演算部52は、この誤り訂正が成功した場合は、当該ユーザデータの受信処理を終了する。一方、この誤り訂正に失敗した場合は、復号演算部52は、誤り訂正の失敗を符号送信要求送信部53へ通知する。符号送信要求送信部53は、この通知を受けると、当該ユーザデータに対する次の段階のパリティ(例えば、パリティ#2)の送信要求を通信装置30−1へ送信する。なお、復号演算部52は、誤り訂正に失敗した場合、受信済みのパリティとユーザデータとを保持しておく。
通信装置30−1の符号送信要求受信部45は、通信装置30−2からの送信要求を受信すると、対応するパリティを符号記憶部43から送信部44へ出力するよう制御し、送信部44は入力されたパリティを通信装置30−1へ送信する。通信装置30−1の受信部51は、このパリティを復号演算部52へ渡し、復号演算部52は、保持しているパリティとユーザデータと新たに受信したパリティとを用いて復号演算を実施する。以降、復号演算において誤り訂正が失敗した場合には、同様に、次の段階のパリティの送信を要求し、当該パリティを受信した場合に、受信したパリティと保持しているパリティおよびユーザデータとを用いて復号演算を行うことを繰り返す。
例えば、まず、通信装置30−1は、ユーザデータとともに第1の実施の形態のパリティ#1を送信しておき、パリティの送信要求を受信した場合(すなわち、パリティ#1による誤り訂正が失敗であった場合)に、パリティ#2を送信し、さらにパリティの送信要求を受信した場合(すなわち、パリティ#2までによる誤り訂正が失敗であった場合)に、パリティ#2を送信する、…というように段階的にパリティを送信することができる。これにより、誤りの規模に応じて誤り訂正に用いるパリティ数を適応的に変化させることができ、パリティによる通信帯域の浪費を防ぎつつ誤り数が多い場合にも誤り訂正を実施することができる。
なお、ここでは、通信装置30−1,30−2がユーザデータを生成するようにしたが、通信装置30−1,30−2がユーザ端末等と接続し、ユーザデータをユーザ端末等から受信し、受信したユーザデータに対して符号演算を行うようにしてもよい。
(第5の実施の形態)
図21は、第5の実施の形態にかかる半導体記憶装置における復号部の構成例を示すブロック図である。本実施の形態では、第3の実施の形態で述べた多段階誤り訂正方式を実現するための復号部26bの構成と動作の一例を説明する。
図21は、第5の実施の形態にかかる半導体記憶装置における復号部の構成例を示すブロック図である。本実施の形態では、第3の実施の形態で述べた多段階誤り訂正方式を実現するための復号部26bの構成と動作の一例を説明する。
図21に示すように、本実施の形態の復号部26bは、シンドローム計算部261、誤り位置多項式演算部262、チエンサーチ部263および復号制御部264を備える。
図22は、本実施の形態の復号処理手順の一例を示すフローチャートである。図21、22を用いて、本実施の形態の復号処理の全体動作を説明する。制御部23は、HostI/F21経由でホスト4からデータの読み出し要求を受け取ると、読み出し対象のデータを読み出すようメモリI/F22へ指示し、メモリI/F22は読み出し対象のデータを対応するパリティとともに読み出し、復号部26へ渡す。復号部26では、メモリI/F22から読み出し対象のデータおよびパリティを受け取ると復号処理を開始する。
本実施の形態では、第3の実施の形態と同様に多段階誤り訂正方式により符号化演算が実施される。以下の説明では、符号化演算において2段階のパリティが生成され、また2段階目のパリティに外部パリティが生成される例について説明するが、多段階誤り訂正方式の段階数や外部パリティの付与方法はこれに限定されず、外部パリティを用いなくてもよい。外部パリティを用いない多段階誤り訂正方式を採用する場合も、本実施の形態の復号処理は適用可能であり、この場合は、例えば、各段階のパリティに誤りが無いと仮定して復号処理を実施する。
図22の手順は、多段階の復号演算のうちの1段階分の処理を示している。第1の実施の形態〜第3の実施の形態で述べたように、1段階目のパリティを用いた図22に示す手順により復号処理を実施し、誤り訂正に失敗した場合、2段階目のパリティを用いた復号処理が実施される。この際、2段階目のパリティに外部パリティが付与されている場合は、外部パリティを用いた復号処理を図22と同様の手順で実施し、復号後(誤り訂正後)の2段階目のパリティを用いて2段階目の復号処理を実施する。
まず、復号制御部264は、復号処理を開始すると、シンドローム計算部261に対してシンドローム計算の実施を指示し、シンドローム計算部261がシンドローム計算を実施する(ステップS21)。その後、復号制御部264は、誤り位置多項式演算部262に対して、計算済みのシンドローム計算結果を用いて誤り多項式演算を行うよう指示し、誤り位置多項式演算部262が誤り位置多項式演算を実施する(ステップS22)。
次に、復号制御部264は、チエンサーチ部263に対して、誤り位置多項式演算の結果を用いてチエンサーチを行うよう指示し、チエンサーチ部263は誤り位置多項式演算の結果である誤り位置多項式の係数を用いてチエンサーチを実施し(ステップS23)、誤り位置を特定し、処理を終了する。復号制御部264は、チエンサーチにより、誤りがあると判定されたビットを反転させることにより誤り訂正を実施する。
1段階目のパリティを用いた復号処理では、シンドローム計算部261に入力されるのは、ユーザデータ(読み出しデータ)と1段階目のパリティである。1段階目のパリティを用いた復号処理において誤り訂正不可であると判定された場合、本実施の形態では、2段階目のパリティに外部パリティが付与されるため、外部パリティと2段階目のパリティとを用いた復号処理が行われる。そして、ユーザデータと1段階目のパリティと誤り訂正後の2段階目のパリティとをシンドローム計算部261に入力し、2段階目の復号処理が実施される。なお、外部パリティと2段階目のパリティとを用いた復号処理については、図21に示したシンドローム計算部261、誤り位置多項式演算部262、チエンサーチ部263および復号制御部264を用いて実施してもよいし、これらとは別に復号処理演算の回路を設けて、この回路により実施してもよい。
以下、本実施の形態では、第1の実施の形態で述べた生成多項式G1(x)に基づいて1段階目のパリティとしてパリティ#1が生成され、生成多項式G2(x)に基づいて2段階目のパリティとしてパリティ#2が生成され、パリティ#2の外部パリティが生成されているとする。
パリティ#1がt1の誤り訂正能力を有し(t1ビットの誤り訂正が可能)、パリティ#1とパリティ#2の両方を用いた場合の誤り訂正能力をt2とする(t2ビットの誤り訂正が可能)。このとき、t1の誤り訂正能力に対応した復号処理回路とt2の誤り訂正能力に対応した復号処理回路を個別に備え、段階ごとに使い分けるように構成することも可能であるが、個別に備えるとハードウェア規模が大きくなるため、復号処理回路を共用することが望ましい。本実施の形態では、各段階の復号処理を単一の復号処理回路で実施する場合の構成および動作を説明する。
まず、本実施の形態のシンドローム計算部261について説明する。一般に、シンドローム計算部261は、αi倍の乗算を行うための乗算器を含む最小単位の計算回路(αi倍の乗算器、XOR回路、レジスタ等を含む)を誤り訂正可能なビット数個備える。αiの添字iは、G1(x)×G2(x)の根(αをガロア拡大体GF(2m)の原始元としたときの根α1,α2,α3,α4,α5,α6,…,α2t2-1)の指数部に対応する。ここでは、この最小単位の計算回路(シンドロームSiを算出する回路)をシンドロームSi計算回路とよぶ。1段階目の誤り訂正処理(復号処理)と、2段階目の誤り訂正処理とで回路を共用するためには、少なくとも、i=1,3,5,・・・,2t2−1にそれぞれ対応する合計t2個のシンドロームSi計算回路を備えることになる。
図23は、シンドローム計算部261の構成例を示す図である。図23では、一例としてパリティ#1、パリティ#2がそれぞれ2ビットの訂正能力を有する例を示しているが、パリティ#1、パリティ#2の訂正能力はそれぞれこれらに限定されない。ここでは、2段階目のパリティ#1およびパリティ#2を用いた誤り訂正処理を実施可能な復号化回路を共有するため、訂正能力の高い2段階目の誤り訂正能力t2(図23の例ではt2=2)個の回路を備える構成としている。
シンドロームSi計算回路は、αiを乗算するmビットのガロア拡大体乗算回路62−j(j=(i+1)/2)と、シンドロームSiの計算途中結果を保持するmビットのレジスタ(FF(FlipFlop))64−jと、mビットのXOR回路62−jとを備える。以上は、一般的なシンドローム計算回路と同様である。本実施の形態では、αiがG1(x)の根であるシンドロームSi計算回路がグループ#1を構成し、αiがG2(x)の根であるシンドロームSi計算回路がグループ#2を構成とする。本実施の形態では、グループ#1に属するシンドロームSi計算回路については、シンドロームのレジスタ更新に用いる値を、入力データ(IDATA)とするか0とするかを切り替えるセレクタ回路(選択回路)61−jを備え、セレクタ回路61−jを制御する制御回路65をグループ#1内に少なくとも1つ備える。入力データとは、ユーザデータおよびパリティである。図23の例では、制御回路65をグループ#1内に1つとしているが、例えば、セレクタ回路ごとに制御回路を備えてもよい。
図24は、1段階目の誤り訂正処理における回路使用状態を示す図である。図24では、図23に示したシンドローム計算部261により、1段階目のパリティ#1を用いて(1段階目のパリティ#1とユーザデータとを入力として)誤り訂正を行い場合の回路使用状態を示している。1段階目の誤り訂正では、図24に示すように、グループ#1に属するシンドロームSi計算回路を用い、グループ#2に属するシンドロームSi計算回路は停止されておいてよい。1段階目の誤り訂正では、制御回路65は、セレクタ回路61−jが入力データ(ユーザデータおよびパリティ#1)を選択するよう制御する。なお、図23,24では、ユーザデータ、パリティ#1、パリティ#2を、それぞれData、P1、P2と略して記載している。
図24に示すように、1段階目の誤り訂正では、パリティ#2は入力されず、パリティ#1の最終ビット位置を0番目と定義して通常のシンドローム計算が実施される。一般に、誤り訂正処理では、多項式表示で高次の項から順にデータがシンドローム計算回路に入力され、最終入力ビットを0番目のビットとしてチエンサーチ処理において誤り位置の特定が実施される。ここでは、ユーザデータ、パリティの順に入力されるとし、パリティの最終ビット(最後に入力されるビット)を0番目とする。1段階目の誤り訂正処理におけるシンドローム計算は、通常の誤り訂正処理と同様である。1段階目の誤り訂正処理におけるシンドローム計算以外の処理も、通常の誤り訂正処理と同様である。
次に、本実施の形態のシンドローム計算処理について説明する。図25は、本実施の形態のシンドローム計算の処理手順の一例を示すフローチャートである。前述のように、2段階目の誤り訂正処理は、1段階目の誤り訂正処理に失敗した場合に実施されるが、2段階目の誤り訂正処理を実施する際、パリティ#2に外部パリティが付与されている場合は、パリティ#2は外部パリティを用いた誤り訂正が実施済であるとする。
まず、グループ#1およびグループ#2のシンドロームSi計算回路にユーザデータとパリティ#1を高次の項から1ビット入力する(ステップS31)。具体的には、図23の例では、制御回路65が、入力データ(ユーザデータとパリティ)を選択するようセレクタ回路61−1,61−2を制御する。これにより、セレクタ回路61−1〜61−4の全てに入力データの1ビットが入力される。
次に、制御回路65は、パリティ#1の最終ビットを入力したか否かを判断し(ステップS32)、入力していない場合(ステップS32 No)、ステップS31へ戻り、次の次数の項の入力データを1ビット入力する。パリティ#1の最終ビットを入力したか否かは、例えば、入力済みのビット数とユーザデータ+パリティ#1のビット数との比較により判定することができる。
パリティ#1の最終ビットを入力した場合(ステップS32 Yes)、パリティ#2を入力する(すなわち、2段階目の誤り訂正処理である)か否かを判断する(ステップS33)。パリティ#2を入力しない場合(ステップS33 No)、処理を終了する。
パリティ#2を入力する場合(ステップS33 Yes)、グループ#1のシンドロームSi計算回路には0を1ビット入力し、グループ#2のシンドロームSi計算回路にはパリティ#2を高次の項から1ビット入力する(ステップS34)。具体的には、図23の例では、制御回路65が、0を選択するようセレクタ回路61−1,61−2を制御する。
次に、制御回路65は、パリティ#2の最終ビットを入力したか否かを判断し(ステップS35)、入力していない場合(ステップS35 No)、ステップS34へ戻り次の次数のパリティ#2を1ビット入力する。パリティ#2の最終ビットを入力した場合(ステップS35 Yes)、処理を終了する。
以上のようにシンドローム計算を実施することで、2段階目の誤り訂正処理では、パリティ#2を入力し終えたときには、グループ#1のシンドロームを保持するレジスタ64−1,64−2については、「データとパリティ#1」をパリティ#2の次数分ケタ上げした(ビット位置を高次側にシフトさせた)多項式にαiを代入した結果が格納され、グループ#1のシンドロームを保持するレジスタ64−3,64−4については、「データとパリティ#1とパリティ#2」を並べて表示した多項式にαiを代入した結果が格納される。
このようにすると、グループ#1に入力した多項式と、グループ#2に入力した多項式とは次数が揃うため、「データとパリティ#1とパリティ#2」のパリティ#2の最低次数の位置を、「データとパリティ#1とパリティ#2」の0番目のビットとして扱うことができる。このため、この後は、通常のt2重(t2ビットまでの誤り訂正処理が可能な)の誤り位置多項式の計算回路と、誤り位置の計算回路(チエンサーチ回路)とがあれば、2段階目の誤り訂正処理が可能である。
また、本実施の形態では、2段階の誤り訂正方式を採用しているが、n段階(nは3以上の整数)の誤り訂正方式を採用する場合は、グループ#1〜グループ#nを設け、それぞれが、生成多項式G1(x)の根〜生成多項式Gn(x)の根に対応するシンドロームSi計算回路を備えるようにすればよい。また、グループ#2〜グループ#nは、それぞれセレクタ回路および制御回路を備え、ユーザデータと自グループに対応する根に対応するパリティが入力される間はセレクタ回路が入力データを選択し、自グループに対応する根に対応しないパリティが入力される間は、セレクタ回路が0を選択するようにすればよい。
次に、誤り位置多項式演算部262およびチエンサーチ部263について述べる。誤り位置多項式演算部262は、シンドローム計算部261により計算されたシンドロームに基づいて誤り位置多項式を計算する。多段階の誤り訂正方式に対応するためには、誤り位置多項式演算部262は、t2重の誤りにまで対応できる構成を備えていればよい。また誤り位置多項式計算のアルゴリズムの1つである、バーレカンプ・マッシィのアルゴリズムは、符号の最大訂正ビット数に対応したループ回数の処理を行う。このアルゴリズムを用い、「データとパリティ#1」だけを入力として計算したシンドロームを入力とする1段階目の誤り訂正処理では、t1重の誤りに対応するループ回数で処理を止めれば、処理を早く終わらせることができる。
チエンサーチ部263は、誤り位置多項式に基づいて、誤り位置を計算する回路である。チエンサーチ部263については、t2重の誤りにまで対応できる構成を備えた上で、下記に示す2通りの制御方式が考えられる。
チエンサーチ部263では、誤り位置多項式演算部262により求められた誤り位置多項式に、誤りロケータを代入した値を順次計算することで、誤りロケータが誤り位置多項式の根となる位置を求める。ここで、データとパリティを合わせた符号語を多項式で表現したものを符号多項式と呼ぶ。符号多項式の最高次数の項がデータの先頭ビットに対応し、最低次数の項がパリティの最終ビットに対応する。符号多項式の最高次数の側の誤りロケータから代入する場合と、最低次数の側の誤りロケータから代入する場合とで、制御の仕方が異なる。
符号多項式の最高次数の側の誤りロケータから代入する場合は、パリティ#2を含めるとき(2段階目の誤り訂正処理)と含めないとき(1段階目の誤り訂正処理)とで符号多項式の最高次数が異なるため、チエンサーチ回路に最初に代入するロケータの値が異なる。すなわち、復号対象にパリティ#2を含めるかどうか(2段階目の誤り訂正処理か1段階目の誤り訂正処理か)で、チエンサーチ部263に最初に代入する値を切り替える処理が必要になる。
符号多項式の最低次数の側の誤りロケータから代入する場合は、パリティ#2を含めるとき(2段階目の誤り訂正処理)と含めないとき(1段階目の誤り訂正処理)とで符号多項式の最低次数の位置を表す誤りロケータは同じであるため、上記のようなチエンサーチ部263に最初に代入する値の切り替えは必要ない。
符号多項式の最高次数の側の誤りロケータから代入しても、最低次数の側の誤りロケータから代入しても、代入した誤りロケータの位置を順にずらしていく方向が、前者であれば次数が下がる方向、後者であれば次数が上がる方向というように異なるだけで、代入した誤りロケータの位置をずらして、誤り位置多項式の根になっているかチェックする、という処理自体は同じである。
仮に、グループ#1に属するシンドロームSi計算回路に、入力データ切り替えの機構(セレクタ回路61−1,61−2,制御回路65)が無かったとする。そうすると、グループ#1に属するシンドロームSi計算回路にもパリティ#2が入力される。パリティ#1の生成多項式G1(x)はグループ#1に対応する根(図23の例では、α1,α3)を持つが、生成多項式G2(x)の根は持たない。したがって、グループ#1のシンドロームSi計算回路に、パリティ#2が入力されると、シンドロームにおいて符号語の寄与を排除できず、誤り位置多項式を求めるのが非常に困難になる(シンドロームが誤りパターンにのみ依存して決まることが誤り位置多項式を効率的に求めるために必要である)。そのため、通常の誤り位置多項式計算回路と、チエンサーチ回路とでは誤り訂正ができない。
また、グループ#1に属するシンドロームSi計算回路への入力データを「データとパリティ#1」を入力した時点で打ち切ってしまうと、グループ#1とグループ#2とで入力した多項式の次数が異なるため、誤り位置を示す値が定められず、誤りロケータを定義できない。そのため、誤り位置多項式そのものが定義できず、通常の誤り位置多項式計算回路と、チエンサーチ回路とでは誤り訂正ができないことになる。
また、復号の各段階において、復号に使用しないパリティの生成に用いた生成多項式の根に対応するシンドローム計算を行う部分は、動作を停止するような制御を行うことで、各段階での誤り訂正処理でシンドローム計算部261を共用しても、消費電力を、各段階での誤り訂正に必要な最低限の回路構成とした場合と同程度に抑えることができる。
また、パリティ#2を保護する外部パリティを用いたパリティの誤り訂正処理では、パリティ#1、パリティ#2を用いた誤り訂正処理とは別の復号回路を備えてもよいが、復号回路を共用することもできる。
具体的には、パリティ#2を保護する外部パリティの訂正能力をt2ビット以下に設定し、t2重の誤り訂正を行うための回路を備えていれば、外部パリティを用いた誤り訂正処理についても回路を共用できる。特に外部パリティの生成多項式に、生成多項式G1(x)を用い、かつ符号長も1段階目の符号語(ユーザデータ+パリティ#1)と同じになるように揃えた場合、1段階目のパリティ#1を用いたユーザデータの誤り訂正処理と全く同じ処理で復号を行うことができ、制御を簡単化できる。
図26は、外部パリティを用いた復号も行う場合の復号部26bの構成例を示す図である。図26のdecoder100は、図21のシンドローム計算部261、誤り位置多項式演算部262、チエンサーチ部263および復号制御部264により構成される。図26に示すように、外部パリティを用いた復号と共用する場合、訂正済み拡張パリティ一時保存領域101およびセレクタ回路102をさらに備える。
セレクタ回路102は、制御部23または復号制御部264の制御により、パリティ#1を用いた1段階目の誤り訂正処理では、入力データを選択してdecoder100へ入力する。1段階目の誤り訂正処理に失敗した場合、セレクタ回路102は、制御部23または復号制御部264の制御により、入力データを選択してdecoder100へ入力する。この際、入力データとしては、パリティ#2と外部パリティが入力される。外部パリティを用いたパリティ#2の誤り訂正処理を行った後、誤り訂正処理後のパリティ#2は、一時的に訂正済み拡張パリティ一時保存領域101に格納される。
そして、ユーザデータに対する2段階目の誤り訂正処理を行う際に、セレクタ回路102は、制御部23または復号制御部264の制御により、はじめは入力データ(ユーザデータとパリティ#1)を選択し、ユーザデータとパリティ#1の入力が終わると、訂正済み拡張パリティ一時保存領域101に格納されたデータ(誤り訂正済みのパリティ#2)を選択してdecoder100へ入力する。
以上のように、本実施の形態では、2段階で誤り訂正符号化を実施する場合に、パリティ#1とパリティの両方を用いた場合の訂正能力に対応する復号部26bを有し、シンドロームSi計算回路を、同一段階の生成多項式の根に対応するシンドロームを計算するシンドロームSi計算回路を同一グループとして段階ごとにグループ分けする。そして、2段階目の誤り訂正処理では、1段階目に対応するグループに属するシンドロームSi計算回路には、パリティ#2の代わりに0を入力するようにした。このため、1段階目と2段階目の誤り訂正処理で回路を共有でき、かつ誤り位置を正しく定義することができる。
(第6の実施の形態)
図27は、第6の実施の形態にかかる半導体記憶装置におけるシンドローム計算部261aのシンドロームSi計算回路の構成例を示すブロック図である。本実施の形態の半導体記憶装置の構成は、第5の実施の形態のシンドーム計算部261を本実施の形態のシンドローム計算部261aに替える以外は、第5の実施の形態の半導体記憶装置と同様である。以下、第5の実施の形態と異なる部分を説明する。
図27は、第6の実施の形態にかかる半導体記憶装置におけるシンドローム計算部261aのシンドロームSi計算回路の構成例を示すブロック図である。本実施の形態の半導体記憶装置の構成は、第5の実施の形態のシンドーム計算部261を本実施の形態のシンドローム計算部261aに替える以外は、第5の実施の形態の半導体記憶装置と同様である。以下、第5の実施の形態と異なる部分を説明する。
第1の実施の形態では、シンドローム計算部261に、1ビットずつデータを入力する例を示したが、本実施の形態では、シンドローム計算部261aにおいてP(Pは2以上の整数)ビットの並列処理を行う例について説明する。本実施の形態の符号化演算は、第5の実施の形態と同様に2段階の誤り訂正方式で実施されているとする。図27では、P=2の場合のグループ#1のシンドロームSi計算回路の構成例を示している。グループ#1のシンドロームSi計算回路は、セレクタ回路71−1,71−2と、XOR回路72−1,72−2と、αiの乗算を行う乗算器73−1,73−2と、レジスタ74と、制御回路75と、を備える。なお、Pが3以上の場合も、同様に、各シンドロームSi計算回路が乗算器およびXOR回路をP個備え、グループ#1のシンドロームSi計算回路が、P個のセレクタ回路と制御回路75とを備えるようにすればよい。
本実施の形態のシンドローム計算部261aは、第5の実施の形態と同様に、グループ#2のシンドロームSi計算回路も備えるが、グループ#2のシンドロームSi計算回路については、従来のPビット並列処理を行うシンドロームSi計算回路と同様である。すなわち、図27のシンドロームSi計算回路からセレクタ回路71−1,71−2および制御回路75を削除したものであるため図示を省略する。
グループ#1のシンドロームSi計算回路のセレクタ回路71−1,71−2は、制御回路75からの制御により、入力データ(ユーザデータ、パリティ)と0のうちいずれか一方を選択してそれぞれXOR回路72−1,72−2へ入力する。具体的には、制御回路75は、ユーザデータとパリティ#1が入力される間は入力データを選択し、パリティ#2が入力される間は0を選択するようセレクタ回路71−1,71−2を制御する。制御回路75は、第5の実施の形態の制御回路65と同様に複数のシンドロームSi計算回路で共用してもよい。
並列処理を行う場合、シンドロームSi計算回路には、1サイクルでPビットずつ入力データが入力される。図27では、P=2であり、一例として、入力データの0番目のビットと1番目のビット(図27のIDATA[0]、IDATA[1])が同時に入力される例を示している。セレクタ回路71−1,71−2による入力データと0との切り替え動作以外は、通常の並列処理の動作と同様である。すなわち、Pビット並列処理を行う場合の1サイクルでのレジスタ74の更新値REG_updateは、CURを更新前のレジスタ74の値とするとき、以下の式(3)で表すことができる。
REG_update=
CUR×(αi)P
+ IDATA[0]×(αi)P-1
+ IDATA[1]×(αi)P-2
…
+ IDATA[P−2]×(αi)1
+ IDATA[P−1]×(αi)0 …(3)
REG_update=
CUR×(αi)P
+ IDATA[0]×(αi)P-1
+ IDATA[1]×(αi)P-2
…
+ IDATA[P−2]×(αi)1
+ IDATA[P−1]×(αi)0 …(3)
本実施の形態のシンドローム計算手順は、図25に示した処理手順のステップS31およびステップS34において、1ビット入力の代わりにPビット入力とする以外は第5の実施の形態の手順と同様である。
以上のようにシンドローム計算において並列処理を行う場合、パリティ#1、パリティ#2のビット数が並列ビット数Pの倍数でない場合、入力データがPビット未満となるサイクルが生じる。なお、ユーザデータはPビットの倍数であるとする(Pビットの倍数でない場合も0等のデータが付加することによりことにより、最終的にPビットの倍数であるとする)。一方、パリティ#1、パリティ#2については、それぞれ生成多項式G1(x)、G2(x)の最大次数により決定される数値であり、Pとは無関係に生成される。
入力データがPビット未満となるサイクルを含む場合、当該サイクルの処理は、他のPビット並列処理と異なることになり、別のハードウェアを用意する等の対応が必要となる。そこで、本実施の形態では、符号化演算の際に、別のハードウェアを用意する等の対応を実施しなくてよいように、パリティ#1、パリティ#2のビット数をそれぞれPの倍数となるようゼロパディング(ゼロ挿入処理)を実施する。
図28は、本実施の形態のデータフォーマットの一例を示す図である。ここでは、パリティ#1のビット数(生成多項式G1(x)の最大次数になる)がPビットの整数倍になっていないとする。本実施の形態では、roundup(パリティ#1のビット数/P)×P−パリティ#1のビット数=d1としたとき、図28に示す位置81に、d1ビットのゼロパディングを行う。このd1ビットのゼロは、符号化部25におけるパリティ#1を計算する演算で、情報多項式の下位d1ビットとして入力する。
パリティ#2についても、同様に、roundup(パリティ#2のビット数/P)×P−パリティ#2のビット数=d2としたとき、図28に示す位置82に、d2ビットのゼロパディングを行う。また、d2ビットのゼロについては、符号化部25におけるパリティ生成演算に入力せず、パリティ#2の生成後にゼロを付加する。
このようにすることで、図28に示すように、パリティ#1、パリティ#2のビット数がPの倍数となり、シンドローム計算において入力データがPビット未満となるサイクルの発生を防ぐことができる。このため、入力データがPビット未満となるサイクルに対応する場合に比べ、余分な処理を行う必要がないため、回路規模を抑えることができる。
また、パリティ#1のビット数がPの倍数でない場合、2段階目の誤り訂正処理では、パリティ#1とパリティ#2の間に無効なデータが含まれることになり、毎サイクル毎にP箇所の位置が誤りかどうかチェックするP並列チエンサーチ回路を使うときに、無効なデータ部分を飛ばした誤りロケータの割り当てを行うことになり、Pビットにアラインしたフォーマットに合わせて誤り位置を出力するためにはその部分をずらして誤り位置を出す処理が必要になる。図28に示すように、d1ビットのゼロパディングを行うことにより、このような処理は不要になり、回路規模を抑えることができる。
また、d1ビットのゼロを符号化部25におけるパリティ#1の生成処理に入力せずに、パリティ#1を生成した後にゼロを付加してもよい。この場合、d1ビットのゼロの位置81をパリティ#1の最後とする。図29は、d1ビットのゼロパディングの位置81をパリティ#1の最後の部分とした場合のデータフォーマットの一例を示す図である。位置81は、パリティ#1の始めではなく最後としている。同様に、d2ビットのゼロを符号化部25におけるパリティ#2の生成処理に入力せずに、パリティ#2を生成した後にd2ビットのゼロを付加するようにしてもよい。d2ビットのパディングの位置82もパリティ#2内の最後とする。
なお、本実施の形態では、符号化部25bにおけるパリティ演算にゼロを挿入してパリティのビット数をPの倍数とする処理と、符号化部25bにおいてパリティ(ビット数はPの倍数でない)を生成した後、パリティのビット数をPの倍数となるようゼロを挿入する処理と、の両方をゼロパディングと呼ぶこととする。
図30は、3段階の誤り訂正方式を採用する場合のデータフォーマットの一例を示す図である。パリティ#1の始めの部分の位置81にd1ビットのゼロをパディングし、パリティ#2の始めの部分の位置82にd2ビットのゼロをパディングする。具体的には、図30の例では、図28の例と同様に、d1ビットのゼロをパリティ#1の生成時に情報多項式の下位ビットとして入力する。また、d2ビットのゼロをパリティ#2の生成時に情報多項式の下位ビット(パリティ#1の下位ビット)として入力する。なお、ここではパリティ#3のビット数はPの倍数であるとしてゼロパディングを行っていないが、パリティ#3のビット数がPの倍数でない場合は、パリティ#3の生成後にroundup(パリティ#3のビット数/P)×P−パリティ#3のビット数=d3ビットをパリティ#3の始めまたは最後に付加する。また、d1ビットのゼロ、d2ビットのゼロについても、パリティ#1、パリティ#2のそれぞれの生成時に入力とせず、パリティ#1、パリティ#2の生成後にゼロを付加するようにしてもよい。この場合、位置81、位置82はパリティ#1、パリティ#2の最後の部分とする。
図31は、n段階の誤り訂正方式において復号時のPビット並列処理に対応したパリティ#nを生成するための符号化部25bの構成例を示す図である。ここでは、パリティ#nの生成時に、dnビット(dn=roundup(パリティ#nのビット数/P)×P−パリティ#nのビット数を情報多項式の下位ビットとして入力する場合に構成例を示している。図31に示す符号化部25は、入力データに対して生成多項式Gn(x)を用いた剰余計算を行うP並列剰余計算回路91と、パリティ#nの計算途中結果を保持するレジスタ(FF)93と、レジスタ93への入力を切り替えるセレクタ回路95と、セレクタ回路95の切り替えを制御するセレクタ回路制御回路92と、dnビットのゼロに対して生成多項式Gn(x)を用いた剰余計算を行うdnビットパディング処理部94と、を備える。
P並列剰余計算回路91に対する(すなわち、符号化部25に対する)入力データ(情報ビット)は、ユーザデータ+パリティ#1+・・・+パリティ#(n−1)となる(ただし、パリティ#1を計算する際は、入力データはユーザデータのみである)。符号化部25へ入力データが入力されている間は、セレクタ回路制御回路92は、Gn(x)によるP並列剰余計算回路91の出力をレジスタ93へ入力するようセレクタ回路95を制御する。入力が完了すると、セレクタ回路制御回路92は、dnビットパディング処理部94回路の出力をレジスタ93へ入力するようセレクタ回路95を制御する。
dnビットパディング処理部94回路は、例えば、dn’(dn’はdnの約数)並列のGn(x)による剰余回路構成でされ、入力をゼロに固定し、dn÷dn’サイクル分、この回路の出力でレジスタ93を更新すると、符号化処理は完了し、パリティ#nを出力することができる。
なお、以上では、外部パリティを用いる場合について説明を省略したが、外部パリティを用いたパリティ#i(i=1,2,…,n)の復号処理に、別の回路を用いる場合は外部パリティを用いたパリティ#iの復号処理は通常の復号処理と同様である。第1の実施の形態で述べたように、外部パリティを用いたパリティ#iと、パリティ#1等を用いたユーザデータの復号処理とで回路を共有する場合は、外部パリティを用いたパリティ#iの復号処理においてもP並列演算が実施される。このため、外部パリティについてもビット数がPの倍数でない場合は、Pの倍数となるようゼロパディングを行うことが望ましい。
以上のように、本実施の形態では、復号演算においてPビット並列処理を実施する場合に、符号化演算において各段階のパリティのビット数がPの倍数でない場合、各段階のパリティがPの倍数となるようゼロパディングを行うようにした。このため、復号時に、パリティがPの倍数でないことにより生じる「余分な処理を行う必要がないため、回路規模を抑えることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 半導体記憶装置、2 メモリコントローラ、3 半導体メモリ部、22 メモリI/F、23 制御部、24,24a,24b 符号/復号部、25,25a,25b,40 符号化部、26,26a,26b,50 復号部、61−1,61−2,71−1,71−2 セレクタ回路、65,75 制御回路、261 シンドローム計算部、262 誤り位置多項式演算部、263 チエンサーチ部、264 復号制御部。
Claims (19)
- 不揮発性メモリを制御するメモリコントローラであって、
ユーザデータに誤り訂正符号化処理を行うことにより第1乃至第nパリティを生成し、前記第1乃至第nパリティ各々に誤り訂正符号化処理を行うことにより第1乃至第n外部パリティを生成する符号化部と、
前記ユーザデータ、前記第1乃至第nパリティ、及び前記第1乃至第n外部パリティの前記不揮発性メモリへの書込み、及び前記不揮発性メモリからの読み出しを制御するメモリインタフェース部と、
前記不揮発性メモリから読み出される前記ユーザデータ、前記第1乃至第nパリティ、及び前記第1乃至第n外部パリティを用いて、誤り訂正復号処理を行う復号部と、
を備え、
前記第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式は、第1乃至第(i−1)パリティを生成するために用いられる生成多項式に基づいて選択されることを特徴とするメモリコントローラ。 - 前記復号部は、前記第1乃至第k外部パリティ(kは1以上n以下の整数)を用いて前記第1乃至第kパリティの誤り訂正復号処理を行った後に、前記第1乃至第kパリティを用いて前記ユーザデータの誤り訂正復号処理を行うことを特徴とする請求項1に記載のメモリコントローラ。
- 不揮発性メモリを制御するメモリコントローラであって、
ユーザデータに誤り訂正符号化処理を行うことにより第1パリティを生成し、前記ユーザデータと前記第1パリティに誤り訂正符号化処理を行うことにより第2パリティを生成し、前記ユーザデータと前記第1パリティに誤り訂正符号化処理を行うことにより第nパリティを生成し、さらに、前記第2乃至第nパリティ各々に誤り訂正符号化処理を行うことにより第2乃至第n外部パリティを生成する符号化部と、
前記ユーザデータ、前記第1乃至第nパリティ、及び前記第2乃至第n外部パリティの前記不揮発性メモリへの書込み、及び前記不揮発性メモリからの読み出しを制御するメモリインタフェース部と、
前記不揮発性メモリから読み出される前記ユーザデータ、前記第1乃至第nパリティ、及び前記第2乃至第n外部パリティを用いて、誤り訂正復号処理を行う復号部と、
を備え、
前記第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式は、第1乃至第(i−1)パリティを生成するために用いられる生成多項式に基づいて選択されることを特徴とするメモリコントローラ。 - 前記復号部は、前記第1パリティの誤り訂正能力では前記ユーザデータの誤り訂正復号できない場合に、前記第2乃至第k外部パリティ(kは2以上n以下の整数)を用いて前記第2乃至第kパリティの誤り訂正復号処理を行った後に、前記第2乃至第kパリティを用いて前記ユーザデータ及び前記第1パリティの誤り訂正を行うことを特徴とする請求項3に記載のメモリコントローラ。
- 前記第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式Gi(x)は、ri、tiを整数とした場合に、
r1,r2,…,rnは、以下の関係を満たし、
r2≦r1、r1+2t1−1≦r2+2t2−1
r3≦r2、r2+2t2−1≦r3+2t3−1
…
rn≦rn-1、n-1+2tn-1−1≦rn+2tn−1
G1(x)×G2(x)×…×Gi(x)=0が、αri,αri+1,αri+2,…,α2ti+ri-2,α2ti+ri-1の2×ti個の根を有するよう選択されることを特徴とする請求項1乃至4いずれか1項に記載のメモリコントローラ。 - 前記第1乃至第nパリティの生成する誤り訂正符号処理には、同一の誤り訂正符号が用いられることを特徴とする請求項1乃至5いずれか1項に記載のメモリコントローラ。
- 前記誤り訂正符号は、BCH符号であることを特徴とする請求項6に記載のメモリコントローラ。
- 前記パリティ及び前記外部パリティの少なくとも一部は、前記ユーザデータとは異なる、パリティを格納する専用のパリティ専用ページに格納されることを特徴とする請求項1乃至7いずれか1項に記載のメモリコントローラ。
- 前記パリティ及び前記外部パリティの少なくとも一部は、パリティの保護対象であるユーザデータまたはパリティとは異なるユーザデータページに格納されることを特徴とする請求項1乃至7いずれか1項に記載のメモリコントローラ。
- 不揮発性メモリを制御するメモリコントローラであって、
第1ユーザデータに誤り訂正符号化処理を行うことにより、第1パリティを生成し、前記第1ユーザデータと前記第1パリティに誤り訂正符号処理を行うことにより第2パリティを生成し、第2ユーザデータと前記第2パリティを含む複数のパリティに誤り訂正符号処理を行うことにより第3パリティを生成する符号化部と、
前記第1ユーザデータと前記第1パリティの第1ページへの書込み、及び前記第2ユーザデータ及び前記第2のパリティを含む複数のパリティ、第3パリティの第2ページへの書込みを制御するメモリインタフェース部と、
前記不揮発性メモリから読み出される前記第1、第2ユーザデータ及び前記第1乃至第3パリティに基づき、誤り訂正復号処理を行う復号部と、
を備え、
前記第2パリティを生成するために用いられる生成多項式は、第1パリティを生成するために用いられる生成多項式に基づいて選択されることを特徴とするメモリコントローラ。 - 前記第1パリティのサイズは、前記第2パリティのサイズと前記第3のパリティのサイズの和以上であることを特徴とする請求項10に記載のメモリコントローラ。
- 前記第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式Gi(x)は、r1、t1、r2、t2、r3、t3を整数とした場合に、
r1、t1、r1,r2、r3、t3は、以下の関係を満たし、
r2≦r1、r1+2t1−1≦r2+2t2−1
r3≦r2、r2+2t2−1≦r3+2t3−1
G1(x)×G2(x)×…×Gi(x)=0が、αri,αri+1,αri+2,…,α2ti+ri-2,α2ti+ri-1の2×ti個の根を有するよう選択されることを特徴とする請求項10又は11に記載のメモリコントローラ。 - 不揮発性メモリと、
ユーザデータに誤り訂正符号化処理を行うことにより第1乃至第nパリティを生成し、前記第1乃至第nパリティ各々に誤り訂正符号化処理を行うことにより第1乃至第n外部パリティを生成する符号化部と、
前記ユーザデータ、前記第1乃至第nパリティ、及び前記第1乃至第n外部パリティの前記不揮発メモリへの書込み、及び前記不揮発性メモリからの読み出しを制御するメモリインタフェース部と、
前記不揮発性メモリから読み出される前記ユーザデータ、前記第1乃至第nパリティ、及び前記第1乃至第n外部パリティを用いて、誤り訂正復号処理を行う復号部と、
を備え、
前記第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式は、第1乃至第(i−1)パリティを生成するために用いられる生成多項式に基づいて選択されることを特徴とする記憶装置。 - ユーザデータに誤り訂正符号化処理を行うことにより第1乃至第nパリティを生成し、前記第1乃至第nパリティ各々に誤り訂正符号化処理を行うことにより第1乃至第n外部パリティを生成する符号化部と、
受信した前記ユーザデータ、前記第1乃至第nパリティ、及び前記第1乃至第n外部パリティを用いて、誤り訂正復号処理を行う復号部と、
を備え、
前記第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式は、第1乃至第(i−1)パリティを生成するために用いられる生成多項式に基づいて選択されることを特徴とする誤り訂正装置。 - 不揮発性メモリを制御するメモリコントローラにおける誤り訂正方法であって、
ユーザデータに誤り訂正符号化処理を行うことにより第1乃至第nパリティを生成するステップと、
前記第1乃至第nパリティ各々に誤り訂正符号化処理を行うことにより第1乃至第n外部パリティを生成するステップと、
前記ユーザデータ、前記第1乃至第nパリティ、及び前記第1乃至第n外部パリティの前記不揮発メモリへの書込むステップと、
前記不揮発性メモリから前記ユーザデータ、前記第1乃至第nパリティ、及び前記第1乃至第n外部パリティの読み出しを行うステップと、
前記不揮発性メモリから読み出される前記ユーザデータ、前記第1乃至第nパリティ、及び前記第1乃至第n外部パリティを用いて、誤り訂正復号処理を行うステップと、
を備え、
前記第iパリティ(iは1以上n以下の整数)を生成するために用いられる生成多項式は、第1乃至第(i−1)パリティを生成するために用いられる生成多項式に基づいて選択されることを特徴とする誤り訂正方法。 - 前記復号部は、
第1乃至第nパリティの全てを用いた場合の訂正能力をtnビットとするとき、tnビット以上の演算に対応可能なシンドローム計算部、を備え、
前記シンドローム計算部は、第1乃至第nパリティを生成するために用いられる生成多項式の各根に対応するシンドロームを計算するtn個以上のシンドローム計算回路、を有し、
第iパリティを生成するために用いられる生成多項式をGiとするとき、G1乃至Gn-1に含まれる根に対応する前記シンドローム計算回路は、ユーザデータ、またはユーザデータおよび第1乃至第(n−1)パリティのうちの少なくとも1つと、0と、のうちいずれか一方を選択する選択回路と、
を備え、
前記第1乃至第iパリティを用いた前記ユーザデータの誤り訂正処理と第i誤り訂正処理とするとき、第1乃至第n誤り訂正処理を前記シンドローム計算部により実施することを特徴とする請求項1に記載のメモリコントローラ。 - 第i誤り訂正処理では、Giに含まれる根に対応する前記シンドローム計算回路以外の前記シンドローム計算回路の動作を停止させる、ことを特徴とする請求項16に記載のメモリコントローラ。
- 前記シンドローム計算回路がP(Pは2以上の整数)ビット並列演算を行う場合に、
前記符号化部は、前記第1乃至第nパリティのうちビット数がPの倍数でないパリティがある場合、当該パリティのビット数がPの倍数となるようゼロ挿入処理を実施する、ことを特徴とする請求項16または17に記載のメモリコントローラ。 - 前記ゼロ挿入処理を、前記第1乃至第nパリティのうちビット数がPの倍数でないパリティの生成処理において、当該パリティのビット数がPの倍数となるよう前記生成処理へゼロを入力する処理とすることを特徴とする請求項18に記載のメモリコントローラ。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012187140A JP5768022B2 (ja) | 2012-03-19 | 2012-08-28 | メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法 |
TW102106470A TW201351427A (zh) | 2012-03-19 | 2013-02-23 | 記憶體控制器 |
US13/841,923 US8954828B2 (en) | 2012-03-19 | 2013-03-15 | Memory controller |
CN201310088326XA CN103324548A (zh) | 2012-03-19 | 2013-03-19 | 存储器控制器 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012061692 | 2012-03-19 | ||
JP2012061692 | 2012-03-19 | ||
JP2012187140A JP5768022B2 (ja) | 2012-03-19 | 2012-08-28 | メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013225830A true JP2013225830A (ja) | 2013-10-31 |
JP5768022B2 JP5768022B2 (ja) | 2015-08-26 |
Family
ID=49158859
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012187140A Expired - Fee Related JP5768022B2 (ja) | 2012-03-19 | 2012-08-28 | メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8954828B2 (ja) |
JP (1) | JP5768022B2 (ja) |
CN (1) | CN103324548A (ja) |
TW (1) | TW201351427A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8924820B2 (en) | 2012-07-27 | 2014-12-30 | Kabushiki Kaisha Toshiba | Memory controller, semiconductor memory system, and memory control method |
US9128864B2 (en) | 2012-05-14 | 2015-09-08 | Kabushiki Kaisha Toshiba | Memory controller, storage device and error correction method |
US9208863B1 (en) | 2014-05-19 | 2015-12-08 | Kabushiki Kaisha Toshiba | Memory system and method of controlling memory system |
JP6115740B1 (ja) * | 2015-12-17 | 2017-04-19 | ウィンボンド エレクトロニクス コーポレーション | 半導体記憶装置 |
JP2017079050A (ja) * | 2015-08-11 | 2017-04-27 | エイチジーエスティーネザーランドビーブイ | 保護されたデータとは別個のパリティデータの記憶 |
US9971523B2 (en) | 2016-03-10 | 2018-05-15 | Toshiba Memory Corporation | Memory controller with data compression and padding features, method of controlling nonvolatile memory and memory system |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9069698B2 (en) * | 2012-09-06 | 2015-06-30 | Advanced Micro Devices, Inc. | Channel rotating error correction code |
CN104424127A (zh) | 2013-08-23 | 2015-03-18 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN107193684B (zh) | 2013-08-23 | 2020-10-16 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN104425019B (zh) | 2013-08-23 | 2018-07-06 | 慧荣科技股份有限公司 | 存取快闪存储器中存储单元的方法以及使用该方法的装置 |
CN110175088B (zh) * | 2013-08-23 | 2022-11-11 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
US9160371B2 (en) * | 2013-09-05 | 2015-10-13 | Kabushiki Kaisha Toshiba | Memory controller, storage device and memory control method |
US9520901B2 (en) * | 2014-03-06 | 2016-12-13 | Kabushiki Kaisha Toshiba | Memory controller, memory system, and memory control method |
TWI564904B (zh) * | 2014-05-13 | 2017-01-01 | 群聯電子股份有限公司 | 資料處理方法、記憶體控制電路單元以及記憶體儲存裝置 |
CN105095011B (zh) * | 2014-05-23 | 2019-03-19 | 群联电子股份有限公司 | 数据处理方法、存储器控制电路单元以及存储器存储装置 |
US9960788B2 (en) | 2015-03-27 | 2018-05-01 | Toshiba Memory Corporation | Memory controller, semiconductor memory device, and control method for semiconductor memory device |
US10461777B2 (en) | 2015-07-14 | 2019-10-29 | Western Digital Technologies, Inc. | Error locator polynomial decoder and method |
US10439644B2 (en) | 2015-07-14 | 2019-10-08 | Western Digital Technologies, Inc. | Error locator polynomial decoder and method |
US10572189B2 (en) * | 2016-11-04 | 2020-02-25 | Sandisk Technologies Llc | Method and decoder to adjust an error locator polynomial based on an error parity |
US10740176B2 (en) * | 2016-09-19 | 2020-08-11 | Cnex Labs, Inc. | Computing system with shift adjustable coding mechanism and method of operation thereof |
US10256843B2 (en) * | 2017-06-09 | 2019-04-09 | Western Digital Technologies, Inc. | Systems, methods, and devices for encoding and decoding data using multi-layer integrated interleaved codes |
JP2020150515A (ja) * | 2019-03-15 | 2020-09-17 | キオクシア株式会社 | 誤り訂正回路及びメモリシステム |
KR20220050315A (ko) | 2020-10-16 | 2022-04-25 | 삼성전자주식회사 | 반도체 메모리 장치 및 이를 포함하는 메모리 시스템 |
US11694761B2 (en) | 2021-09-17 | 2023-07-04 | Nxp B.V. | Method to increase the usable word width of a memory providing an error correction scheme |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09245442A (ja) * | 1996-03-05 | 1997-09-19 | Hitachi Ltd | ディジタル信号記録方法及び記録装置 |
JP2005184780A (ja) * | 2003-12-15 | 2005-07-07 | Daewoo Electronics Corp | 3次元の誤り訂正符号化方法 |
JP2006295510A (ja) * | 2005-04-08 | 2006-10-26 | Mitsubishi Electric Corp | Fecフレーム符号化装置、fec多重化装置、fec多重分離装置、および光通信装置 |
JP2008299922A (ja) * | 2007-05-30 | 2008-12-11 | Fujitsu Microelectronics Ltd | 半導体メモリ、半導体メモリの動作方法およびシステム |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4525838A (en) | 1983-02-28 | 1985-06-25 | International Business Machines Corporation | Multibyte error correcting system involving a two-level code structure |
JPS6354254A (ja) | 1986-08-25 | 1988-03-08 | Canon Inc | 印刷装置 |
US4996690A (en) * | 1988-08-26 | 1991-02-26 | Stac Electronics | Write operation with gating capability |
JPH098672A (ja) | 1995-06-21 | 1997-01-10 | Toshiba Corp | シンドローム回路 |
US6035401A (en) * | 1997-02-03 | 2000-03-07 | Intel Corporation | Block locking apparatus for flash memory |
US7231585B2 (en) * | 2002-12-11 | 2007-06-12 | Nvidia Corporation | Error correction for flash memory |
US20050028067A1 (en) | 2003-07-31 | 2005-02-03 | Weirauch Charles R. | Data with multiple sets of error correction codes |
JP2005129596A (ja) | 2003-10-21 | 2005-05-19 | Matsushita Electric Ind Co Ltd | 不揮発性半導体記憶装置 |
US7210077B2 (en) | 2004-01-29 | 2007-04-24 | Hewlett-Packard Development Company, L.P. | System and method for configuring a solid-state storage device with error correction coding |
US7418644B2 (en) | 2004-03-01 | 2008-08-26 | Hewlett-Packard Development Company, L.P. | System for error correction coding and decoding |
US8271848B2 (en) | 2006-04-06 | 2012-09-18 | Alcatel Lucent | Method of decoding code blocks and system for concatenating code blocks |
JP4534164B2 (ja) | 2006-07-25 | 2010-09-01 | エルピーダメモリ株式会社 | 半導体装置の製造方法 |
US8225185B1 (en) * | 2007-02-07 | 2012-07-17 | Marvell International, Ltd. | RS codec architecture that combines a compact encoder and serial BMA |
US8607128B2 (en) * | 2007-12-05 | 2013-12-10 | Densbits Technologies Ltd. | Low power chien-search based BCH/RS decoding system for flash memory, mobile communications devices and other applications |
JP4461170B2 (ja) * | 2007-12-28 | 2010-05-12 | 株式会社東芝 | メモリシステム |
KR101437396B1 (ko) * | 2008-02-27 | 2014-09-05 | 삼성전자주식회사 | 레이턴시를 줄일 수 있는 에러 정정 블록을 포함하는메모리 시스템 및 그것의 에러 정정 방법 |
JP5166074B2 (ja) | 2008-02-29 | 2013-03-21 | 株式会社東芝 | 半導体記憶装置、その制御方法、および誤り訂正システム |
US8230300B2 (en) | 2008-03-07 | 2012-07-24 | Apple Inc. | Efficient readout from analog memory cells using data compression |
JP2009259975A (ja) | 2008-04-15 | 2009-11-05 | Toshiba Corp | 半導体集積回路装置 |
US8168759B2 (en) * | 2008-07-18 | 2012-05-01 | Bristol-Myers Squibb Company | Compositions monovalent for CD28 binding and methods of use |
JP5317742B2 (ja) | 2009-02-06 | 2013-10-16 | 株式会社東芝 | 半導体装置 |
JP2010245454A (ja) | 2009-04-09 | 2010-10-28 | Renesas Electronics Corp | 半導体装置およびその製造方法 |
US8645776B2 (en) * | 2010-03-24 | 2014-02-04 | Apple Inc. | Run-time testing of memory locations in a non-volatile memory |
JP5467270B2 (ja) | 2010-04-28 | 2014-04-09 | 国立大学法人 東京大学 | データ入出力制御装置および半導体記憶装置システム |
KR101800445B1 (ko) * | 2011-05-09 | 2017-12-21 | 삼성전자주식회사 | 메모리 컨트롤러 및 메모리 컨트롤러의 동작 방법 |
US8677213B2 (en) * | 2011-09-16 | 2014-03-18 | Hitachi, Ltd. | Electronic device comprising error correction coding device and electronic device comprising error correction decoding device |
US8645789B2 (en) | 2011-12-22 | 2014-02-04 | Sandisk Technologies Inc. | Multi-phase ECC encoding using algebraic codes |
-
2012
- 2012-08-28 JP JP2012187140A patent/JP5768022B2/ja not_active Expired - Fee Related
-
2013
- 2013-02-23 TW TW102106470A patent/TW201351427A/zh unknown
- 2013-03-15 US US13/841,923 patent/US8954828B2/en not_active Expired - Fee Related
- 2013-03-19 CN CN201310088326XA patent/CN103324548A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09245442A (ja) * | 1996-03-05 | 1997-09-19 | Hitachi Ltd | ディジタル信号記録方法及び記録装置 |
JP2005184780A (ja) * | 2003-12-15 | 2005-07-07 | Daewoo Electronics Corp | 3次元の誤り訂正符号化方法 |
JP2006295510A (ja) * | 2005-04-08 | 2006-10-26 | Mitsubishi Electric Corp | Fecフレーム符号化装置、fec多重化装置、fec多重分離装置、および光通信装置 |
JP2008299922A (ja) * | 2007-05-30 | 2008-12-11 | Fujitsu Microelectronics Ltd | 半導体メモリ、半導体メモリの動作方法およびシステム |
Non-Patent Citations (1)
Title |
---|
辻岡 哲夫 他: "Rate-Compatible LDPC符号のレート推定に基づくHybrid-ARQ方式と適応制御", 電子情報通信学会技術研究報告, vol. 107, no. 463, JPN6015020584, 21 January 2008 (2008-01-21), pages 79 - 83, ISSN: 0003080565 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9128864B2 (en) | 2012-05-14 | 2015-09-08 | Kabushiki Kaisha Toshiba | Memory controller, storage device and error correction method |
US8924820B2 (en) | 2012-07-27 | 2014-12-30 | Kabushiki Kaisha Toshiba | Memory controller, semiconductor memory system, and memory control method |
US9208863B1 (en) | 2014-05-19 | 2015-12-08 | Kabushiki Kaisha Toshiba | Memory system and method of controlling memory system |
JP2017079050A (ja) * | 2015-08-11 | 2017-04-27 | エイチジーエスティーネザーランドビーブイ | 保護されたデータとは別個のパリティデータの記憶 |
KR101861924B1 (ko) * | 2015-08-11 | 2018-05-28 | 에이취지에스티 네덜란드 비.브이. | 보호된 데이터로부터 분리된 패리티 데이터 저장 |
US10133625B2 (en) | 2015-08-11 | 2018-11-20 | Western Digital Technologies, Inc. | Storing parity data separate from protected data |
JP6115740B1 (ja) * | 2015-12-17 | 2017-04-19 | ウィンボンド エレクトロニクス コーポレーション | 半導体記憶装置 |
JP2017111846A (ja) * | 2015-12-17 | 2017-06-22 | ウィンボンド エレクトロニクス コーポレーション | 半導体記憶装置 |
US9971523B2 (en) | 2016-03-10 | 2018-05-15 | Toshiba Memory Corporation | Memory controller with data compression and padding features, method of controlling nonvolatile memory and memory system |
Also Published As
Publication number | Publication date |
---|---|
JP5768022B2 (ja) | 2015-08-26 |
TW201351427A (zh) | 2013-12-16 |
US8954828B2 (en) | 2015-02-10 |
CN103324548A (zh) | 2013-09-25 |
US20130246887A1 (en) | 2013-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5768022B2 (ja) | メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法 | |
US9128864B2 (en) | Memory controller, storage device and error correction method | |
US9166624B2 (en) | Error-correcting code processing method and device | |
US8307261B2 (en) | Non-volatile memory management method | |
RU2527207C2 (ru) | Устройство кодирования, способ конфигурирования кода с исправлением ошибок и программа для них | |
JP2008510379A (ja) | データをエンコード及びデコードするための方法並びに装置 | |
US9015548B2 (en) | Error detection correction method and semiconductor memory apparatus | |
US20090187812A1 (en) | Processing module, error correction decoding circuit, and processing method for error locator polynomial | |
JP2013029882A (ja) | メモリコントローラ、半導体記憶装置および復号方法 | |
CN110941505A (zh) | 产生错误校正电路的方法 | |
JP5488472B2 (ja) | 復号装置、この復号装置を有するデータ通信装置およびデータ記憶装置 | |
CN102057580A (zh) | 针对多标准的可重新配置的Turbo交织器 | |
US20180034483A1 (en) | Variable t bch encoding | |
US10193574B1 (en) | Efficient syndrome calculation in processing a GLDPC code | |
US20150256204A1 (en) | Memory controller, storage device and memory control method | |
US10340955B2 (en) | Data processing circuit | |
JP2023045450A (ja) | シンドローム計算回路、誤り訂正回路およびメモリシステム | |
KR101267958B1 (ko) | 비씨에이치 디코더, 이를 포함하는 메모리 시스템 및 디코딩 방법 | |
KR101190522B1 (ko) | 비씨에이치 디코더, 이를 포함하는 메모리 시스템 및 비씨에이치 디코딩 방법 | |
KR101154923B1 (ko) | 비씨에이치 디코더, 이를 포함하는 메모리 시스템 및 비씨에이치 디코딩 방법 | |
US11342939B2 (en) | Processing of data read from a memory | |
KR101226439B1 (ko) | 리드-솔로몬 디코더, 이를 포함하는 메모리 시스템 및 디코딩 방법 | |
KR101791637B1 (ko) | 디코더 및 이를 포함하는 메모리 컨트롤러 | |
JP2005176244A (ja) | スポッティバイト誤り訂正・検出方法及び装置 | |
JP2013201503A (ja) | チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20140829 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20150521 |
|
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: 20150526 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20150622 |
|
LAPS | Cancellation because of no payment of annual fees |