JP2012123600A - メモリシステム及びメモリコントローラ - Google Patents
メモリシステム及びメモリコントローラ Download PDFInfo
- Publication number
- JP2012123600A JP2012123600A JP2010273311A JP2010273311A JP2012123600A JP 2012123600 A JP2012123600 A JP 2012123600A JP 2010273311 A JP2010273311 A JP 2010273311A JP 2010273311 A JP2010273311 A JP 2010273311A JP 2012123600 A JP2012123600 A JP 2012123600A
- Authority
- JP
- Japan
- Prior art keywords
- data
- circuit block
- circuit
- bit
- binary
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding 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/1072—Adding 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 multilevel memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding 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/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/1016—Error in accessing a memory location, i.e. addressing error
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/56—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
Abstract
【課題】データの信頼性を向上させるメモリシステムを提供する。
【解決手段】メモリシステムは、複数の物理量レベルによってdビット(dは、2以上の整数)のデータを記憶する複数のメモリセルを有し、所定数のメモリセルの特定のビットからなるページ単位でデータの読み書きをするメモリデバイスと、メモリデバイスを制御するメモリコントローラとを備え、メモリコントローラは、メモリデバイスのページに読み書きするページ・データを保持し、メモリデバイスとの間でページ・データを送受信するページ・バッファと、ページ・データに基づいて生成されたp(pは、2<p<2dを満たす素数)の有限体Zp上の処理データに対する処理によってページ・データのエラーを検出し訂正するデータ処理部と、データ処理部の処理データをページ・データとしてページ・バッファにマッピングするマッピング部とを有する。
【選択図】図5
【解決手段】メモリシステムは、複数の物理量レベルによってdビット(dは、2以上の整数)のデータを記憶する複数のメモリセルを有し、所定数のメモリセルの特定のビットからなるページ単位でデータの読み書きをするメモリデバイスと、メモリデバイスを制御するメモリコントローラとを備え、メモリコントローラは、メモリデバイスのページに読み書きするページ・データを保持し、メモリデバイスとの間でページ・データを送受信するページ・バッファと、ページ・データに基づいて生成されたp(pは、2<p<2dを満たす素数)の有限体Zp上の処理データに対する処理によってページ・データのエラーを検出し訂正するデータ処理部と、データ処理部の処理データをページ・データとしてページ・バッファにマッピングするマッピング部とを有する。
【選択図】図5
Description
実施形態は、メモリシステム及びメモリコントローラに関する。
大容量のデータを記憶して利用するメモリとして3次元化が容易な抵抗変化メモリ(ReRAM)などが注目されている。しかし、どの様なメモリセルが用いられようとも、大容量化のための新たな製造技術の開発を必要としない切り札は、メモリセルの状態を多値化して多くのビットを1つのメモリセルに押し込むことであり、NANDフラッシュメモリにその例を見ることができる。但し、メモリセルを多値化した場合、その状態の設定の不安定性によって誤読み書きが生じやすくなる。このことは、メモリセルの物理量レベルの数を増やすこととトレードオフの関係にある。NANDフラッシュメモリの場合、1セル当たりの物理量レベルの数はせいぜい8レベルや16レベル止まりであり、データビット情報と物理量レベルの対応も煩雑であった。
データの信頼性を向上させるメモリシステム、及びこのメモリシステムに用いられるメモリコントローラを提供することを目的とする。
実施形態に係るメモリシステムは、複数の物理量レベルによってdビット(dは、2以上の整数)のデータを記憶する複数のメモリセルを有し、所定数の前記メモリセルの特定のビットからなるページ単位でデータの読み書きをするメモリデバイスと、前記メモリデバイスを制御するメモリコントローラとを備え、前記メモリコントローラは、前記メモリデバイスのページに読み書きするページ・データを保持し、前記メモリデバイスとの間で前記ページ・データを送受信するページ・バッファと、前記ページ・データに基づいて生成されたp(pは、2<p<2dを満たす素数)の有限体Zp上の処理データに対する処理によって前記ページ・データのエラーを検出し訂正するデータ処理部と、前記データ処理部の処理データをページ・データとして前記ページ・バッファにマッピングするマッピング部とを有することを特徴とする。
実施形態に係るメモリコントローラは、複数の物理量レベルによってdビット(dは、2以上の整数)のデータを記憶する複数のメモリセルを有し、所定数の前記メモリセルの特定のビットからなるページ単位でデータの読み書きをするメモリデバイスを制御するメモリコントローラであって、前記メモリデバイスのページに読み書きするページ・データを保持し、前記メモリデバイスとの間で前記ページ・データを送受信するページ・バッファと、前記ページ・データに基づいて生成されたp(pは、2<p<2dを満たす素数)の有限体Zp上の処理データに対する処理によって前記ページ・データのエラーを検出し訂正するデータ処理部と、前記データ処理部の処理データをページ・データとして前記ページ・バッファにマッピングするマッピング部とを備えることを特徴とする。
[実施形態の概要]
メモリシステムは、セルアレイの微細化、セルアレイ等の構造の3次元化、メモリセルに用いる物理現象に対する工夫などによって、記憶容量の高密度化を実現している。そして、安定した製造工程が達成された後のメモリシステムの高密度化には、メモリセルの多値化が有効な手段となる。
特に、NANDフラッシュメモリに関しては、いち早く多値化が進み、1セル当たり8値を記憶する3ビットセルが実用化されている。しかし、それ以上のメモリセルの多値化は、急激な信頼性の悪化を伴い、単ビットセルに対して、少なくとも2桁以上のエラー率の増加につながる。このように、信頼性と生産の歩留まりの問題から、メモリセルの多値化の進行は、大容量ファイルメモリの実現手段として期待されながらも、困難な問題を抱えている。
このメモリセルの多値化に際しての問題点を克服して、有効に活用できれば、安定したNANDフラッシュメモリの製造工程を長期に亘って利用しながらも、NANDフラッシュメモリの記憶容量の高密度化を達成することができる。
そこで、以下のような趣旨のもと、リー・メトリック・コードを利用したメモリコントローラ及びこのメモリコントローラを用いたメモリシステムを提案する。なお、以下において、多レベルのメモリセルを「MLC」(Multi Level Cell)と呼ぶこともある。また、MLCを利用したNANDフラッシュメモリを「MLC NANDフラッシュメモリ」と呼ぶこともある。
(1) MLCのエラーは、多くの場合、MLCに対する隣接する物理量レベル(以下、単に「レベル」と呼ぶ)への書き込みや、MLCからの隣接レベルとしての読み出し等によって生じる。このような場合であっても、従来のMLCに対するバイナリビットの割り付けの場合、エラー量が大きくなってしまうことがある。そこで、以下で説明する実施形態に係るメモリコントローラは、MLCのレベルに対する値の割り付けを簡素化することで信頼性を向上させる。その際、現に存在するMLC NANDフラッシュメモリをそのまま利用できるようにして生産性をも向上させる。
(2) 従来のMLC NANDフラッシュメモリで利用されているECC(Error Correcting Code)は、あらゆるエラーに対応している。そのため、発生可能性が極めて少ないMLCのレベル誤認識に対しても、ページを構成するビットエラーとして訂正することができる。このことは、換言すれば、ECCがエラーの発生の種類に対して過剰に対応しているとも言える。そこで、最も多い隣接レベル間のエラーに対しておおよそ対応できるようにし、過剰なチェックビットの増加を抑制し、効率的なECCを構築する。
(3) 以上の趣旨のもと、MLCのレベルを表すために、同一のメモリセルに属する複数のページバイナリデータとp進数のZpの要素を対応付けるマッピングを提案する。
先ず、16値のMLCを用いたMLC NANDフラッシュメモリを例に、多レベルとバイナリデータの関係について説明する。
16値のMLCを用いた場合、1セル当たり4ビットのデータを記憶することができる。4ビットのデータとMLCのレベルの対応付けについては、様々なパターンが考えられる。ここでは、グレイ・コード(Gray Code)を利用することを考える。このようにグレイ・コードを利用した場合、隣接レベル間の変化が4ビットのうちの1ビットのみの変化になるようにMLCのレベルとバイナリデータとを対応付けることができる。4ビットのバイナリデータは、データのまとまりとしてそれぞれ異なるページ<0>〜<3>を構成する。MLCのレベルに対し、一番低いレベルから順に0〜15を付番した場合、MLCのレベルに対応する各ページのビットは、図1のようになる。
ページ<0>のビットp0、ページ<1>のビットp1、ページ<2>のビットp2、及びページ<3>のビットp3は、数1に示すように、それぞれMLCのレベルの値Lを2進数で表した各桁B0、B1、B2、及びB3のバイナリ関数P0、P1、P2、及びP3で決定される。
[数1]
[数1]
特に、グレイ・コードでは、Lの1の変化に対してはp0、p1、p2、及びp3のうちのいずれか1つが変化するようにコード化されている。また、一般にLのどの様な変化も各ページのビットp0〜p3の変化で表せる。そのため、1セルで見た場合、4つのページ<0>〜<3>で各々1ビットのエラー検出・訂正が可能であれば、MLCの全てのレベル変化に関するエラーに対応することができる。更に、グレイ・コードを用いれば、MLCのレベルの変化が1だけの場合、いずれか1つのページに対する1ビットの修正によってエラー訂正できる。そのため、各ページで各々独立に1ビットの修正が可能ならば、独立した4つのMLCのエラー訂正が可能になる。
以上のように、ページを用いてMLCのレベルとバイナリデータとを対応付けた上で、ページ毎にビットエラーの修正を行なう方法は非常に強力であり、MLCのどの様なエラーにも対応することができる。
しかし、MLCでは隣接レベル間で生じるエラーがほとんどであることを鑑みれば、上記のようなエラー検出・訂正方法は、過剰なエラー対応であって、その分、エラー検出・訂正に通常必要としない多くの情報を扱うことになる。
次に、この余分な情報について説明する。
図2は、ページ・データを構成するMLCの一部とこれに対応するページ・バッファの部分を示す一例である。1つのMLCのレベルとページのビットとの対応付けについては図1に示したが、図2中にも拡大して示している。図中に示すページ・バッファの部分は、いわゆるセクタに対応していてデータ処理の1つのまとまりとなる部分である。この例では、1ページは、512バイトのMLCで構成されている。
図2は、ページ・データを構成するMLCの一部とこれに対応するページ・バッファの部分を示す一例である。1つのMLCのレベルとページのビットとの対応付けについては図1に示したが、図2中にも拡大して示している。図中に示すページ・バッファの部分は、いわゆるセクタに対応していてデータ処理の1つのまとまりとなる部分である。この例では、1ページは、512バイトのMLCで構成されている。
この例では、16値のMLCに対応するため、512バイトのMLCに対して4系列のページ・バッファが設けられている。これら4系列のページ・バッファは合計512バイトのメモリセルからなる。
ここで、このような構成に対して、従来のECCシステムから容易に拡張してメモリシステムに搭載できるシステムを検討してみる。
512バイトは212ビットなので、バイナリデータを用いたECCシステムでは、ガロア体GF(213)を利用する。この場合、1ビットのエラー訂正に必要なチェックビットは13ビットとなる。tビット(tは1以上の整数)のエラー訂正に必要なページ・バッファ当たりのビット数は、データの512バイトとチェックビットの13tバイトの和となる。したがって、512バイトのデータを扱えるものとして容易に拡張できる訂正ビット数tは、不等式212+13t≦213を満たす必要がある。このように構成すると、グレイ・コードを用いた場合、MLCに隣接レベル間のエラーのみが発生すると仮定した場合、512バイト+13t個のうち4t個のMLCを修正することができる。但し、図2に示す例では、さらに加えてt個のMLCで発生した如何なるエラーをも修正できるように構成されている。しかし、前述のように、MLCに生じるエラーの多くが隣接レベル間で生じる点に着目すると、図2に示すような構成は、エラーに対する過剰な保証と考えることができる。
次に、16値のMLCを用いてリー・メトリック・コードを利用したECCシステムを構築する場合のシステムの効率について、従来のバイナリを利用したECCシステムを構築する場合と比較して説明する。
図3は、16より小さい最大の素数p=13を用いたリー・メトリック・コードを利用した場合であり、エラー訂正可能なリー・メトリックをε=1〜4とした場合の関係量をまとめた表である。図3中(a)〜(d)列は、リー・メトリック・コードを利用した場合であって、それぞれε=1〜4とした場合の関係量である。また、図3中(e)列は、16値のMLCに対応する関係量である。各関係量について順に説明する。
L: ECCシステムに必要なMLCのレベル数である。リー・メトリック・コードを利用する場合、図3中(a)〜(d)列に示すように、MLCの16のレベルからリー・メトリック・コードの要素数である13を選択して使用している。一方、バイナリシステムの場合、図中(e)列に示すように、バイナリである16をそのまま使用する。
p: リー・メトリック・コードに用いる素数である。リー・メトリック・コードを利用する場合、図3中(a)〜(d)列に示すようにp=13になる。一方、バイナリシステムの場合、2を除いて、対応する素数pは存在しない。
h: Lを表現するために必要なビット数である。リー・メトリック・コードを利用する場合、図3中(a)〜(d)列に示すように、0〜15の16レベルを表現できれば良いためh=4となる。一方、バイナリシステムの場合、図3中(f)列に示すように、hはページ数に対応する。
M: ECC処理で一括して扱う情報データ量をビット数で表したものである。Mは、後述するエラー訂正可能量εによって変わる。リー・メトリック・コードを利用する場合、図3中(a)〜(d)列に示すように、エラー訂正可能量εを1ずつ増加させると、たとえばMは36ビットから24ビットへと4ビットずつ減少する。一方、バイナリシステムの場合、できるだけ大きなデータを一括して扱った方が効率は良い。そのため、図3中(e)列に示すように、従来ある方法の延長として512バイトのセクタデータを記憶させる512バイト個のMLCに対して保存することができるデータビット数、即ち4セクタ分のデータを一括して扱う。
ε: エラー訂正が可能な量である。リー・メトリック・コードを利用する場合、コードを記憶する12個のMLC中に生じたエラーのリー・メトリックの総量がε以下ならば訂正できる。εは、MLCの隣接レベル間のエラーの場合、つまりリー・メトリックが1のエラーの場合に、12個のMLCのうちの訂正可能なセル数を表わすものである。一方、バイナリシステムの場合、図3中(e)列に示すように、不等式212+13t≦213を満たす最大のtとして315を選択し、その4倍のセル数を4×512バイトのうちから訂正可能としている。
δ: Mをhビットずつのまとまりとして見たときの桁数である。Mを2h進数としたときの桁数となる。バイナリシステムの場合、図3中(e)列に示すように、セクタを構成する情報データを記憶するセル数に等しい。
n: 情報データをコード化して記憶するために必要なセル数である。リー・メトリック・コードを利用する場合、n=p−1であることから、図3中(a)〜(d)列に示すように、n=12となる。一方、バイナリシステムの場合、図3中(e)列に示すように、212+13tに等しい8191となる。
M/n: MLC1個当たりに記憶できる情報ビット数であり、MLCが記憶するコードの実効的なビット数を表す量である。エラー訂正可能量εを大きくするとコードが冗長になるため、M/nは減少する。ここでは、バイナリシステムの場合、図3中(e)列で示すように、4ビットのMLCを用いているものの、チェックビットを設ける必要性から、2ビット分の情報データしか記憶できない点に注意されたい。
log2L: 利用するMLCのレベルを最大限使用した場合に記憶できるビット数である。図3中(a)〜(d)列のかぎ括弧は、リー・メトリック・コードを用いる場合であっても実際に設定可能なMLCのレベル数に対する値である。この値は、16値のMLCを用いると、もちろん4となる。
code/M: ECCを構成するコードの冗長度である。コードのビット数(=nh)とそれに含まれる情報データ量Mのビット数の比であり、コードのビット数が情報データ量Mのビット数の何倍になるかを示す量である。code/Mは、リー・メトリック・コードを利用する場合、図3中(a)〜(d)列で示すように、εが増加するにつれ少しずつ増加する点と、バイナリシステムの場合、図3中(e)列に示すように、コードが情報データ量の2倍になっている点に注意されたい。
ε/n: 1つのコードを記憶するのに必要なMLCのセル数と、そのうちのエラー訂正可能な最大セル数の割合である。ε/nは、コードを記憶するMLCのうちエラーが生じたMLCのセル数が何個までなら、コードを復元できるかの目安となる値である。バイナリシステムの場合、図3中(e)列で示すように、リー・メトリック・コードを利用する場合に比べて、効率が悪いことが分かる。
(M/n)/log2L: MLCのレベルの利用効率である。ECCを組み込んだ場合の多値レベルとして利用される割合を示す。図3中(a)〜(d)列のかぎ括弧は、リー・メトリック・コードを利用する場合であって、16値に対する値である。
バイナリシステムでは、16値のMLCを用いた場合、各ページに1ビットのECCとした場合、1セルに生じるいかなるエラーも訂正することができ、ページ長分のメモリセルに対して最大4セルのエラー訂正が可能である。しかし、ε=3のリー・メトリック・コードを利用する場合に相当する12セル中3セルのエラー訂正を可能とするECCシステムを考えた場合、ページ長を2kバイトとしてほぼ512バイトの訂正ができる必要がある。これは、MLCの512バイトのうち128バイトにあたり、図3中(e)列に示したGF(213)のBCHでぎりぎり対応はできるものの、非常に効率が悪い。また、計算量も膨大になる。これは、1セルについて見たとき必要以上に強力なECCを用いているためであり、エラーの出現傾向を考慮した最適な方法とはなっていない。
なお、以下で説明する本実施形態に係るメモリコントローラ及びメモリシステムの具体例は、主に、二重丸が施された図3中(b)列に示すECCシステムを想定して説明する。
次に、8値のMLCを用いてリー・メトリック・コードを利用したECCシステムを構築する場合のシステムの効率について、従来のバイナリコードを利用したECCシステムを構築する場合と比較して説明する。
8値のMLCの場合、リー・メトリック・コードを利用したシステムのバイナリシステムに対する優位性は減少するものの、エラー許容を15%以上とした場合にバイナリシステムと同等以上のシステム効率を得ることができる。
図4は、8より小さい最大の素数p=7を用いたリー・メトリック・コードを利用した場合であり、エラー訂正可能なリー・メトリックをε=1〜3とした場合の関係量をまとめた表である。図4中(a)〜(c)列は、リー・メトリック・コードを利用した場合であって、それぞれε=1〜3とした場合の関係量である。また、図4中(d)列は、8値のMLCに対応する関係量である。各関係量について順に説明する。
L: リー・メトリック・コードを利用する場合、図4中(a)〜(c)列に示すように、MLCの8のレベルからリー・メトリック・コードの要素数である7を選択して使用している。一方、バイナリシステムの場合、図4中(d)列に示すように、バイナリである8をそのまま使用する。
p: リー・メトリック・コードを利用する場合、図4中(a)〜(c)列に示すようにp=7になる。一方、バイナリシステムの場合、2を除いて、対応する素数pは存在しない。
h: リー・メトリック・コードを利用する場合、図4中(a)〜(c)列に示すように、0〜7の8レベルを表現できれば良いためh=3となる。一方、バイナリシステムの場合、図4中(d)列に示すように、hはページ数に対応する。
M: リー・メトリック・コードを利用する場合、図4中(a)〜(c)列に示すように、エラー訂正量可能量εの1ずつ増加させると、Mは9ビットから3ビットへと3ビットずつ減少する。一方、バイナリシステムの場合、図4中(d)列に示すように、従来ある方法の延長として512バイトのセクタデータを記憶させる512バイト個のMLCに対して保存することができるデータビット数、即ち3セクタ分のデータを一括して扱う。
ε: リー・メトリック・コードを利用する場合、コードを記憶する6個のMLC中に生じたエラーのリー・メトリックの総量がε以下ならば訂正することができる。εは、MLCの隣接レベル間のエラーの場合、6個のMLCのうちの訂正可能なセル数を表わしている。一方、バイナリシステムの場合、図4中(d)列に示すように、不等式212+13t≦213を満たす最大のtとして315を選択し、その3倍のセル数を訂正可能としている。
δ: バイナリシステムの場合、図4中(d)列に示すように、セクタを構成する情報データを記憶するセル数に等しい。
n: リー・メトリック・コードを利用する場合、図4中(a)〜(c)列に示すように、n=6となる。一方、バイナリシステムの場合、図4中(d)列に示すように、212+13tに等しい8191となる。
M/n: バイナリシステムの場合、図4中(d)列で示すように、4ビットのMLCを用いているものの、チェックビットを設ける必要性から、2ビット分の情報データしか記憶できない点に注意されたい。
log2L: 図4中(a)〜(c)列のかぎ括弧は、リー・メトリック・コードを用いる場合であっても実際に設定可能なMLCのレベル数に対する値である。この値は、8値のMLCを用いると、もちろん3となる。
code/M: code/Mは、リー・メトリック・コードを利用する場合、図4中(a)〜(c)列で示すように、εが増加するにつれ少しずつ増加する点と、バイナリシステムの場合、図4中(d)列に示すように、コードが情報データ量の2倍になっている点に注意されたい。
ε/n: バイナリシステムの場合、図4中(d)列で示すように、リー・メトリック・コードを利用する場合に比べて、効率が悪いことが分かる。
(M/n)/log2L: 図4中(a)〜(c)列のかぎ括弧は、リー・メトリック・コードを利用する場合であって、8値に対する値である。
バイナリシステムでは、8値のMLCを用いた場合、各ページに1ビットのECCとした場合、1セルに生じるいかなるエラーも訂正することができ、ページ長分のメモリセルに対して最大3セルのエラー訂正が可能である。しかし、ε=1のリー・メトリック・コードを利用する場合に相当する6セル中1セルのエラー訂正を可能とするECCシステムを考えた場合、ページ長を2kバイトとしてほぼ341バイトの訂正ができる必要がある。これは、MLCの512バイトのうち85バイトに当たり、図4中(d)列に示したGF(213)のBCHでぎりぎり対応はできるものの、非常に効率が悪い。また、計算量も膨大になる。その点、リー・メトリック・コードを利用した場合、これと同等以上のエラー訂正効率を得ることができる。
[メモリコントローラ及びメモリシステム]
<全体構成>
図3、図4を用いて説明した通り、リー・メトリック・コードを利用することによって、従来のMLC NANDフラッシュメモリに対して、非常に強力なECCを構築できることが分かった。そこで、ここからは、従来あるMLC NANDフラッシュメモリ等のメモリデバイスを制御する実施形態に係るメモリコントローラの実現方法について説明する。なお、メモリコントローラを中心に説明するが、このメモリコントローラとメモリデバイスを組み合わせてメモリシステムとすることも可能である。
<全体構成>
図3、図4を用いて説明した通り、リー・メトリック・コードを利用することによって、従来のMLC NANDフラッシュメモリに対して、非常に強力なECCを構築できることが分かった。そこで、ここからは、従来あるMLC NANDフラッシュメモリ等のメモリデバイスを制御する実施形態に係るメモリコントローラの実現方法について説明する。なお、メモリコントローラを中心に説明するが、このメモリコントローラとメモリデバイスを組み合わせてメモリシステムとすることも可能である。
図5は、実施形態に係るメモリコントローラを含むメモリシステムのブロック図である。
本実施形態に係るメモリシステムは、メモリデバイス100と、このメモリデバイス100を制御するメモリコントローラ200からなる。
このメモリコントローラ200を用いることによって、リー・メトリック・コードを利用したECCシステムを搭載したエラー訂正効率の高いメモリシステムを、既存のメモリデバイス100を用いて構築することができる。以下の例では、既存のメモリデバイス100としてMLC NANDフラッシュメモリを用いる。
メモリコントローラ200に入力されたバイナリデータは、メモリコントローラ200におけるデータ処理体系である素数pの有限体Zpの量に変換される。このバイナリデータは、Mビット毎にメモリコントローラ200で処理される。
メモリコントローラ200に入力されたバイナリデータは、始めに、“binary to p−adic decode”回路ブロック210に入力される。“binary to p−adic decode”回路ブロック210では、バイナリデータをp進数データに変換する。
このp進数データは、“Lee metric code ECC system”回路ブロック220(データ処理部)に入力される。“Lee metric code ECC system”回路ブロック220では、p進数データの各桁のZpの数からリー・メトリック・コード(処理データ)が生成される。
このリー・メトリック・コードは、“p−adic<>MLC binary mapping”回路ブロック230(マッピング部)に入力される。“p−adic<>MLC binary mapping”回路ブロック230は、リー・メトリック・コードの各桁のZpの数をMLCのレベルに対応付けし、Zpのリー・メトリックとMLCのレベル間の距離との対応が成立するように変換する。この“p−adic<>MLC binary mapping”回路ブロック230によって、Zpの数は、MLCのページ・データをビット成分とするセルレベルへと変換されてページ・バッファ240に保持される。
16値のMLCを用いる場合、ページ・バッファ240は、4系列必要となる。ここで、ページ・バッファ240は、メモリデバイス100のMLCのレベルとページの関係を反映している必要がある。これらのページ・バッファ240がデータで満たされると、これらのデータはコントローラ200からメモリデバイス100に転送される。このデータ転送によって、Zpの数は、メモリデバイス100のMLCのレベルとして記憶されることになる。
メモリデバイス100は、コントローラ200から転送されたデータをページ毎にプログラムして行く。このようなメモリデバイス100の動作は、メモリコントローラ200内の“control”回路ブロック250から受け取るコマンド<2>に基づいて実行される。このコマンド<2>は、コントローラ200に入力されたコマンド<1>に応じて“control”回路ブロック250によって生成される。
メモリシステムからデータを読み出す場合、始めに、“control”回路ブロックからのコマンド<2>によって、メモリデバイス100から1つのMLCのレベルを表すことができる一連のデータが読み出される。このデータは、メモリデバイス100から順次メモリコントローラ200のページ・バッファ240に転送されて保持される。
続いて、ページ・バッファ240に保持されたデータは、“p−adic<>MLC binary mapping”回路ブロック230で処理される。“p−adic<>MLC binary mapping”回路ブロック230は、このページ・バッファ240が保持するデータをZpの数、即ちMLCのレベルを表す量に変換する。
続いて、Zpの数で表されたデータは、“Lee metric code ECC system”回路ブロック220に入力される。“Lee metric code ECC system”回路ブロック220は、このデータに対しエラー訂正を施し、正しいリー・メトリック・コードを復元し、更に、このリー・メトリック・コードをp進数データに変換する。
最後に、p進数データは、“p−adic to binary decode”回路ブロック260に入力される。“p−adic to binary decode”回路ブロック260は、このp進数データをMビットのバイナリデータに戻した上で、メモリコントローラ260の外部に出力する。
次に、メモリコントローラ200のデータ転送システムのデータの処理フローからみたブロック構成について説明する。
なお、以下において、メモリデバイス100などバイナリでデータを取り扱う環境を「binary world」と呼ぶことにする。これに対し、データをZpの数で取り扱うメモリコントローラ200などの環境を「p−adic Zp world」と呼ぶことにする。この場合、「binary world」は、「p−adic Z2 world」と呼ぶこともできる。
図6は、ε=2、p=13の場合であって、ECC処理にユークリッド反復法を用いた場合のメモリコントローラ200のブロック図である。
メモリコントローラ200は、13進数変換部210´、エンコード部221、“p−adic<>MLC binary mapping”回路ブロック230、ページ・バッファ240、シンドローム生成部222、解探索多項式生成部223、ユークリッド反復法処理部224、第1のハッセ微分多項式生成部225、第2のハッセ微分多項式生成部226、コード復元部227、デコード部228、及び24進数変換部260´を備える。
このうち13進数変換部210´は、“binary to p−adic decode”回路ブロック210に含まれる。エンコード部221、シンドローム生成部222、解探索多項式生成部223、ユークリッド反復法処理部224、第1のハッセ微分多項式生成部225、第2のハッセ微分多項式生成部226、コード復元部227及びデコード部228は、“Lee metric code ECC system”回路ブロック220に含まれる。また、24進数変換部260´は、“p−adic to binary decode”回路ブロック260に含まれる。
メモリコントローラ200に入力される32ビットずつのまとまり(M=32)としてのバイナリデータDは、始めに、13進数変換部210´に入力される。
13進数変換部210´では、入力されたバイナリデータDが13進数に変換される。これによって、各桁がZpの要素で表現されたデータAが生成される。このデータAは、エンコード部221に入力される。
エンコード部221では、入力されたデータAに生成行列Gを作用させる。これによって、データAからリー・メトリック・コードCが生成される。このコードCは、“p−adic<>MLC binary mapping”回路ブロック230に入力される。
“p−adic<>MLC binary mapping”回路ブロック230では、入力されたリー・メトリック・コードCからメモリデバイス100に転送されるデータが生成され、ページ・バッファ240に入力される。
その後、ページ・バッファ240に保持されたデータが、メモリデバイス100に転送され、MLCにプログラムされる。
続いて、メモリデバイス100にプログラムされたデータは、一連のページ・データとしてページ・バッファ240に読み出される。ここで、このデータは、“p−adic<>MLC binary mapping”回路ブロック230においてMLCのレベルの誤認識のエラーを含むコードYになる。以降の処理では、コードYからエラーのないリー・メトリック・コードCの復元を行う。
“NAND<>MLC binary mapping”回路ブロック230から出力されたコードYは、シンドローム生成部222に入力される。
シンドローム生成部222では、入力されたコードYに対するS=YHtの演算処理が行われ、シンドロームSが生成される。この演算で得られたS0のリー・メトリックが3以上(|S0|≧3)の場合、個々のエラーコード成分の和は必ず3以上になる。つまり、ε=2とする解法ではコードYのエラーを訂正できない場合がある。そのため、メモリコントローラ200の外部にNG信号が出力されると共に、エラー訂正前のコードYがそのままデコード部228に出力される。また、S=0の場合、コードYにはエラーが生じていないため、コードYはエラー訂正されることなくデコード部228に出力される。その他のシンドロームの場合、生成されたシンドロームSは、解探索多項式生成部223に出力される。
解探索多項式生成部223では、入力されたシンドロームS=(S0,S1,S2)から多項式Ψ(x)が生成される。多項式Ψ(x)の係数ψ0、ψ1及びψ2は、数2のようになる。この多項式Ψ(x)は、ユークリッド反復法処理部224に出力される。
[数2]
[数2]
ユークリッド反復法処理部224では、入力された多項式Ψ(x)とx3からユークリッド反復法によって多項式λ(x)及びv(x)の生成が試みられる。多項式λ(x)及びv(x)が生成できない場合、メモリコントローラ200の外部にNG信号が出力される共に、エラー訂正前のコードYがそのままデコード部228に出力される。一方、多項式λ(x)及びv(x)が生成できた場合、処理は、第1のハッセ微分多項式生成部225及び第2のハッセ微分多項式生成部226に移される。
第1のハッセ微分多項式生成部225では、多項式λ(x)からハッセ微分多項式が生成され、更に、このハッセ微分多項式に対してr=1〜12が代入され[λ(r)][0]=0となる根rが抽出される。続いて、これら抽出された根rから[λ(r)][n−1]=0且つ[λ(r)][n]≠0となる多重度nが求められる。そして、これら根r、多重度nに基づいた位置t=r−1及びエラーet=nがデコード部227に出力される。
同様に、第2のハッセ微分多項式生成部226では、多項式v(x)からハッセ微分多項式が生成され、更に、このハッセ微分多項式に対してr=1〜12が代入され[v(r)][0]=0となる根rが抽出される。続いて、これら抽出された根rから[v(r)][n−1]=0且つ[v(r)][n]≠0となる多重度nが求められる。そして、これら根r、多重度nに基づいた位置t=r−1及びエラーet=13−nがコード復元部227に出力される。
コード復元部227では、入力された位置t及びエラーetを用いてct=yt−etからエラー訂正されたリー・メトリック・コードC=(c1,c2,・・・,c3)が復元される。このリー・メトリック・コードCは、デコード部228に入力される。
デコード部228では、入力されたリー・メトリック・コードCに生成行列Gの逆変換が施される。これによって、各桁がZpの要素で表されるp進数データAが生成される。このp進数データAは、24進数変換部260´に入力される。
24進数変換部260´では、入力されたp進数データAが、バイナリデータである24進数のバイナリデータDに変換される。そして、このバイナリデータDが、メモリコントローラ200の外部に出力される。
なお、図6では、ページ・バッファ240を、メモリデバイス100とのデータ授受にのみに使用しているが、このページ・バッファ240は、図6に示された点線矢印aにあるように、データ処理の過程で多重に利用することもできる。この場合、メモリコントローラ200の回路規模を小さくすることができる。ページ・バッファ240の多重使用方法については後述する。
<マッピング部及びページ・バッファ>
マッピング部である“p−adic<>MLC binary mapping”回路ブロック230の機能について詳細に説明する。ここでは、例として、p=13、MLCのレベル数が16の場合について説明する。
マッピング部である“p−adic<>MLC binary mapping”回路ブロック230の機能について詳細に説明する。ここでは、例として、p=13、MLCのレベル数が16の場合について説明する。
マッピングは、始めに、MLCの16レベルとp=13とする有限体Zpとの対応について決定する。ここでは、2つのケースについて説明する。
図7は、p進数とMLCのレベルとの対応の例を示す図である。
ケース1は、Zpの各要素をMLCの下のレベルから順に対応させる割り付け方法である。図7の場合、Zpの要素0〜12をMLCの下のレベルから順に割り付け、余ったMLCの上の3レベルについてZpの要素12を割り付けている。ケース1は、NANDフラッシュメモリに対するプログラムにおいてワード線に印加する電圧パルスの振幅を抑えることができる。これによって、ワード線とワード線に隣接するメモリセルとの容量カップリングを小さくすることができ、ディスターブを抑制することができる。つまり、ケース1は、メモリセルのエラーの発生を低減させることが期待できる割り付け方法と言える。
ケース1は、Zpの各要素をMLCの下のレベルから順に対応させる割り付け方法である。図7の場合、Zpの要素0〜12をMLCの下のレベルから順に割り付け、余ったMLCの上の3レベルについてZpの要素12を割り付けている。ケース1は、NANDフラッシュメモリに対するプログラムにおいてワード線に印加する電圧パルスの振幅を抑えることができる。これによって、ワード線とワード線に隣接するメモリセルとの容量カップリングを小さくすることができ、ディスターブを抑制することができる。つまり、ケース1は、メモリセルのエラーの発生を低減させることが期待できる割り付け方法と言える。
ケース2は、MLCのレベルのうち高いレベルについてレベル間隔を大きくした割り付け方法である。図7の場合、Zpの要素0〜12をMLCの下のレベルから順に割り付けているが、このうちZpの要素10〜12については、2レベル間隔で割り付けている。ケース2は、消去レベルからの閾値変化が大きくなる高いレベルのプログラムをラフに行うことが可能であり、プログラムの負担の軽減が期待できる割り付け方法と言える。
このように、16値のNANDメモリの特性を踏まえた上で、エラー発生の抑制や、プログラム時間の短縮など、目的を絞って前述のケース1やケース2の割り付け方法を決定すれば良い。なお、割り付け方法について、メモリデバイス200の状況に応じてメモリコントローラ100で随時設定できるようにすれば良い。また、ケース1及びケース2では、MLCの下のレベルからZpの各要素を順番に割り付けているが、MLCの上のレベルからZpの各要素を割り付けることもできる。
続いて、MLCのレベルとページのビットとの対応について図6を用いて説明する。図7は、グレイ・コードを使用して、各ページのビットとMLCのレベルとの対応付けを行った例である。なお、ページのビットは、製品毎に異なる場合があるが、この場合、使用するメモリデバイス100に合わせればよい。
このように、Zpの要素とMLCのレベルとの対応が決定したら、続いて、Zpの各要素を、MLCのレベルに対応するページ<0>〜<3>の4ビットに基づいてデコードした後、ページ・バッファ240に保持する。そのため、ページ・バッファ240は、4系列が並列に配置された構成となっており、前述のマッピングによってデコードされた4ビットのデータは、それぞれページ・バッファ240の各系列に順に保持される。
メモリコントローラ200のページ・バッファ240の1系列は、メモリデバイス100が有するページ・バッファに対応する。メモリコントローラ200のページ・バッファ240がデータで満杯になった時点で、データは、1系列分ずつメモリデバイス100のページ・バッファに順次転送される。そして、4系列のページ・バッファ240のデータは、メモリデバイス100において、連続して同じMLCにプログラムされる。このようなデータ書き込み手順によって、メモリコントローラ200で得られたZpの要素は、MLCのレベルとしてメモリデバイス100に記憶される。
メモリデバイス100のMLCからのデータの読み出しは、前述のデータ書き込み手順とは逆の手順となる。つまり、同一のMLCの4つのページのデータが順次読み出され、これらデータをメモリコントローラ200の4系列のページ・バッファ240に転送される。そして、これら4系列のページ・バッファ240に転送されたデータからMLCのレベルを示すZpの数がデコードされる。
次に、16値のMLCを用いたメモリシステムであって、ε=4、3、2の場合のデータ処理過程におけるページ・バッファ240の多重使用について図8〜図10を参照しながら説明する。
なお、ここで説明するメモリコントローラ200のI/Oのデータ転送速度は、1バイト/サイクルとする。1セクタ分のデータは、512サイクルでページ・バッファ240に転送される。また、所定ビットのデータ毎の処理をプロセスと呼ぶが、一般的なプロセスと区別するため「PROCESS」と表記する。
始めに、ε=4、即ち12セル中で最高4セルのエラー訂正が可能な場合について説明する。
この場合、図8に示すように、ページ・バッファ240は、概念的に、6列のバイトレジスタ(以下、「REGISTER6」と呼ぶ)を基本として構成することができる。ここでいうバイトレジスタとは、1サイクル当たり1バイトのデータを記憶することができるレジスタをいう。以下において1列目からn列目までのバイトレジスタを「レジスタ<1:n>」と表現する。例えば1列目から6列目までのバイトレジスタの場合「レジスタ<1:6>」となる。
データ処理は、ε=4の場合、図3中(d)列に示すように、1PROCESS毎にM=24ビットずつ処理される。つまり、メモリコントローラ200の場合、データ転送速度が1バイト/サイクルであるため、1PROCESS分のデータを3サイクル毎に蓄積することができる。このため、3サイクル毎に1PROCESSの処理が可能となる。
1PRCESSで24ビットのデータを処理する場合、1セクタ分のデータ(512バイト)の処理には、171PROCESS要する。但し、171PROCESS分のデータは、1セクタ分のデータである4096ビット(512バイト)よりも多い171×24=4104ビット(513バイト)となる。したがって、8ビットのダミービットを付加する必要がある。なお、このダミービットは、回路的に生成された固定されたデータで良い。
外部から入力されたバイナリデータDは、ε=4の場合、REGISTER6のレジスタ<1:3>に保持される。このレジスタ<1:3>に保持されるバイナリデータDは、以下のステップS1〜S4によって処理される。
始めに、ステップS1において、バイナリデータDは、171PROCESSで処理されて13進数のデータAに変換される。この変換によって、「binary data」では、24ビットであった1PROCESS分のデータ(δ=6)が、「p−adic Zp world」では1桁分4ビット多い28ビットのデータ(δ=7)に変換される。したがって、171PROCESSで生成される13進数データAは、171PROCESS×28ビット=4788ビットになる。この4788ビットのデータは、バイトレジスタ3.5列分の容量に相当する。
続いて、ステップS2において、13進数データAのデータ量はバイトレジスタ3.5列分にあたるため、REGISTER6のうちレジスタ<1:4>に保持されることになる。したがって、REGISTER6のうち外部から入力されたバイナリデータDを保持していた領域は、13進数データAで上書きされることになる。
続いて、ステップS3において、13進数データAは、171PROCESSで処理されてリー・メトリック・コードCに変換される。この変換によって、1PROCESS分の28ビットの13進数データAから、p−1=12個の成分からなる48ビットのZpのコードが生成される。したがって、171PROCESSで生成されるリー・メトリック・コードCは、171PROCESS×48ビット=8208ビット(1026バイト)となる。この1026バイトのデータは、バイトレジスタ6列分の容量に相当する。
続いて、ステップS4において、リー・メトリック・コードCがREGISTER6に保持される。したがって、REGISTER6のうち13進数データAを保持していた領域は上書きされることになる。また、このステップS4において全てのレジスタ<1:6>が使用されることになる。
以上のように、ε=4の場合、「binary world」から入力されたバイナリデータDは、REGISTER6のうちレジスタ<1:3>で保持され、残りのレジスタ<4:6>については、レジスタ<1:3>と併せて最終的なデータ処理結果であるリー・メトリック・コードCを保持するまでの段階で上書きされて使用されることになる。
ステップS1〜S4からなるデータ処理は、図8に示すように、バイナリデータDを13進数変換データAに変換した後(ステップS1及びS2)、更に、13進数データAをリー・メトリック・コードCに変換して(ステップS3及びS4)、これをスキャンする仮想的なデータレジスタD−rとしてイメージすることができる。
図8で示すデータ処理の場合、1セクタ分4096ビットのデータに対して、1PROCESS毎に12セル分のデータを生成する過程を171PROCESS繰り返すことになる。そのため、1セルの実質ビット数は、4096/(171×12)=1.996となる。
次に、ε=3、即ち12セル中で最高3セルのエラー訂正が可能な場合について説明する。
この場合、図9に示すように、ページ・バッファ240は、概念的に、12列のバイトレジスタ(以下、「REGISTER12」と呼ぶ)を基本として構成することができる。
データ処理は、ε=3の場合、図3中(c)列に示すように、1PROCESS毎にM=28ビットずつ処理される。つまり、メモリコントローラ200の場合、データ転送速度が1バイト/サイクルであるため、2PROCESS分のデータを7サイクル毎に蓄積することができる。このため、7サイクル毎に2PROCESSの処理が可能となる。
1PRCESSで28ビットのデータを処理する場合、1セクタ分のデータ(512バイト)の処理には、147PROCESS要する。但し、147PROCESS分のデータは、1セクタ分のデータである4096ビット(512バイト)よりも多い147×28=4116ビットとなる。したがって、20ビットのダミービットを付加する必要がある。なお、このダミービットは、回路的に生成された固定されたデータで良い。
外部から入力されたバイナリデータDは、ε=3の場合、レジスタ<1:12>のうちレジスタ<1:6>に保持される。このレジスタ<1:6>に保持されるバイナリデータDは、以下のステップS1〜S4によって処理される。
始めに、ステップS1において、バイナリデータDは、147PROCESSで処理されて13進数のデータAに変換される。この変換によって、「binary world」では、28ビットであった1PROCESS分のデータ(δ=6)が、「p−adic Zp world」では1桁分4ビット多い32ビットのデータ(δ=7)に変換される。したがって、147PROCESSで生成される13進数データAは、147PROCESS×32ビット=4704ビットになる。この4704ビットのデータは、バイトレジスタ8列分の容量に相当する。
続いて、ステップS2において、13進数データAがREGISTER12のうちレジスタ<1:8>に保持される。したがって、REGISTER12のうち外部から入力されたバイナリデータDを保持していた領域については、13進数データAで上書きされることになる。
続いて、ステップS3において、13進数データAは、147PROCESSで処理されてリー・メトリック・コードCに変換される。この変換によって、2PROCESS分の32×2ビットの13進数データAから、p−1=12個の成分からなる48×2ビットのZpのコードが生成される。したがって、147PROCESSで生成されるリー・メトリック・コードCは、147PROCESS×48ビット=7056ビット(882バイト)となる。この882バイトのデータは、バイトレジスタ12列分の容量に相当する。
続いて、ステップS4において、リー・メトリック・コードCがレジスタ<1:12>に保持される。したがって、REGISTER12のうち13進数データAを保持していた領域については、上書きされることになる。また、このステップS4において全てのレジスタ<1:12>が使用されることになる。
以上のように、ε=3の場合、「binary world」から入力されたバイナリデータDは、REGISTER12のうちレジスタ<1:6>で保持され、残りのレジスタ<7:12>については、レジスタ<1:6>と併せて最終的なデータ処理結果であるリー・メトリック・コードCを保持するまでの段階で上書きされて使用されることになる。
ステップS1〜S4からなるデータ処理は、図9に示すように、バイナリデータDを13進数変換データAに変換した後(ステップS1及びS2)、更に、13進数データAをリー・メトリック・コードCに変換して(ステップS3及びS4)、これをスキャンする仮想的なデータレジスタD−rとしてイメージすることができる。
図9で示すデータ処理の場合、1セクタ分4096ビットのデータに対して、1PROCESS毎に12セル分のデータを生成する過程を147PROCESS繰り返すことになる。そのため、1セルの実質ビット数は、4096/(147×12)=2.322となる。
次に、ε=2、即ち12セル中で最高2セルのエラー訂正が可能な場合について説明する。
この場合、図10に示すように、ページ・バッファ240は、概念的に、6列のバイトレジスタ(以下、「REGISTER6」と呼ぶ)を基本として構成することができる。
データ処理は、ε=2の場合、図3中(b)列に示すように、1PROCESS毎にM=32ビットずつ処理される。つまり、メモリコントローラ200の場合、データ転送速度が1バイト/サイクルであるため、1PROCESS分のデータを4サイクル毎に蓄積することができる。このため、4サイクル毎に1PROCESSの処理が可能となる。
1PRCESSで32ビットのデータを処理する場合、1セクタ分のデータ(512バイト)の処理には、128PROCESS要する。但し、128PROCESS分のデータは、1セクタ分のデータである4096ビット(512バイト)と丁度同じ128×32=4096ビット(512バイト)となる。上記ε=4、3の場合のようにダミービットの付加は必要ない。
外部から入力されたバイナリデータDは、ε=2の場合、REGISTER6のうちレジスタ<1:4>に保持される。このレジスタ<1:4>に保持されるバイナリデータDは、以下のステップS1〜S4によって処理される。
始めに、ステップS1において、バイナリデータDは、128PROCESSで処理されて13進数のデータAに変換される。この変換によって、「binary data」では、32ビットであった1PROCESS分のデータ(δ=6)が、「p−adic Zp world」では1桁分4ビット多い36ビットのデータ(δ=7)に変換される。したがって、128PROCESSで生成される13進数データAは、128PROCESS×36ビット=4608ビットになる。この4608ビットのデータは、バイトレジスタ4.5列分の容量に相当する。
続いて、ステップS2において、13進数データAのデータ量はバイトレジスタ4.5列分にあたるため、REGISTER6のうちレジスタ<1:5>に保持されることになる。したがって、REGISTER6のうち外部から入力されたバイナリデータDを保持していた領域については、13進数データAで上書きされることになる。
続いて、ステップS3において、13進数データAは、128PROCESSで処理されてリー・メトリック・コードCに変換される。この変換によって、1PROCESS分の36ビットの13進数データAから、p−1=12個の成分からなる48ビットのZpのコードが生成される。したがって、128PROCESSで生成されるリー・メトリック・コードCは、128PROCESS×48ビット=6144ビット(768バイト)となる。この768バイトのデータは、バイトレジスタ6列分の容量に相当する。
続いて、ステップS4において、リー・メトリック・コードCがレジスタ<1:6>に保持される。したがって、REGISTER6のうち13進数データAを保持していた領域については上書きされることになる。また、このステップS4において全てのレジスタ<1:6>が使用されることになる。
以上のように、ε=2の場合、「binary world」から入力されたバイナリデータDは、REGISTER6のうちレジスタ<1:4>で保持され、残りのレジスタ<5:6>については、レジスタ<1:4>と併せて最終的なデータ処理結果であるリー・メトリック・コードCを保持するまでの段階で上書きされて使用されることになる。
ステップS1〜S4からなるデータ処理は、図10に示すように、バイナリデータDを13進数変換データAに変換した後(ステップS1及びS2)、更に、13進数データAをリー・メトリック・コードCに変換して(ステップS3及びS4)、これをスキャンする仮想的なデータレジスタD−rとしてイメージすることができる。
図8で示すデータ処理の場合、1セクタ分4096ビットのデータに対して、1PROCESS毎に12セル分のデータを生成する過程を128PROCESS繰り返すことになる。そのため、1セルの実質ビット数は、4096/(128×12)=2.667となる。
次に、ε=2の場合について、REGISTER6とページ・バッファの関係の一例について図11を参照しながら説明する。図11中に施されたハッチングは、「binary world」から4サイクルで入力される32ビットのバイナリデータDで満たされている領域を示す。
REGISTER6は、8行6列のレジスタ群である。これをメモリコントローラ200のページ・バッファ240として見た場合、図11に示すように、12行4列のレジスタ群となる。この12行4列のレジスタ群の各列がそれぞれページ<0>〜<4>に対応している。
ある第i番目のPROCESSについてみた場合、イメージ的には、図11に示すように、始めに、入力されたバイナリデータDは、12個のMLC<i+0>〜<i+11>のうち8個のMLC<i+0>〜<i+7>に保持され、その後、データ処理の過程で残りのMLC<i+8>〜<i+11>も含めて次々にMLCにデータが上書きされると考えることができる。
以上説明したように、本実施形態に係るメモリコントローラ200では、データ処理の過程でページ・バッファ240が多重に使用される。
次に、ε=2の場合について、データ書き込み時におけるREGISTER6でのセクタデータの処理過程について図12を参照しながら説明する。
図12は、左から順に、バイナリデータのバースト転送時のREGISTER6の様子(図12中S1)、p進数変換後のREGISTER6の様子(図12中S2)、リー・メトリック・コード変換後のREGISTER6の様子(図12中S3)を示している。なお、図12中のレジスタを貫く実線は、8ビット毎のバイトレジスタの境界を示している。
セクタレジスタとなるREGISTER6は、1024個のレジスタを6列並べた構成となっており、1024行で768バイトのデータ転送の受け口を持つ。6列のうち、1〜4列目をデータ転送で利用し、残りの5〜6列目をデータ転送後の処理データの保持に利用する。
図12中S1では、転送されたバイナリデータが、4サイクル毎に1〜4列目のレジスタに1バイトずつ行方向に順次格納されていく。この動作は128回繰り返される。その結果、レジスタには1列毎に128バイトのバイナリデータが格納されることになる。一連の動作の総サイクル数は512サイクルとなる。
以上によって、セクタレジスタには、10桁の24進数のh=4、δ=8に相当する32ビットのバイナリデータが128PROCESS分格納されることになる。
図12中S2では、32ビットのバイナリデータが9桁のp(=13)進数である36ビットのデータに変換されセクタレジスタに上書きされる。このPROCESSはレジスタ8行毎に行われる。元々のレジスタブロックは1024行6列であるため、1PROCESS毎に8行ずつ、合計128PROCESSで埋められることになる。ここまでで、1セクタにおける「binary world」から「p−adic Zp world」への移行が完了したことになる。
図12中S3では、p進数データをリー・メトリック・コードに変換する。
リー・メトリック・コードは、p−1(=12)個のZpの要素を成分とするデータとなる。1PROCESS分のリー・メトリック・コードは、36ビットのp進数データに対してG行列を掛けて得られる48ビットのデータであり、この1PROCESS分のリー・メトリック・コードは、8行6列のレジスタブロック1つに上書き格納される。この場合、128PROCESSで1セクタレジスタ全体がリー・メトリック・コードで満たされることになる。これによって、セクタレジスタには、MLC192バイト個に書き込むためのデータが保持される。
リー・メトリック・コードは、p−1(=12)個のZpの要素を成分とするデータとなる。1PROCESS分のリー・メトリック・コードは、36ビットのp進数データに対してG行列を掛けて得られる48ビットのデータであり、この1PROCESS分のリー・メトリック・コードは、8行6列のレジスタブロック1つに上書き格納される。この場合、128PROCESSで1セクタレジスタ全体がリー・メトリック・コードで満たされることになる。これによって、セクタレジスタには、MLC192バイト個に書き込むためのデータが保持される。
以上、図12中S1〜S3に示す3段階の処理は、8行6列のレジスタ群毎に順時進行して行く。
なお、メモリコントローラ200では、512バイトのバイナリデータからp進数データへの変換の際とp進数データから192バイト個のMLCに書き込むリー・メトリック・コードへの変換の際の2回、セクタレジスタに対するデータの上書きが実行される。
例えば、メモリデバイス100であるMLC NANDフラッシュメモリのページ構成が512+16バイトのセクタ8個で構成されている場合、4ページで(512+16)バイト×8個のMLCのデータとなるので、192バイト個のMLCのレベルは、ここで述べた22個分のセクタレジスタに対応する。そのためメモリコントローラ200のページ・バッファ240は、22個分のセクタレジスタで構成され、このページ・バッファ240のデータは、MLC NANDフラッシュメモリに対して、4ページ分のデータとして転送される。
メモリデバイス100であるMLC NANDフラッシュメモリのページ構成が512+16バイトのセクタ4個で構成されている場合、4ページで(512+16)バイト×4個のMLCのデータとなるので、192バイト個のMLCのレベルは、ここで述べた11個分のセクタレジスタに対応する。そのためメモリコントローラ200のページ・バッファ240は、11個分のセクタレジスタで構成され、MLC NANDフラッシュメモリに対して、4ページ分のデータとして転送される。
次に、データ読み出し時のセクタレジスタにおけるデータ処理の過程について、図13を参照しながら説明する。
図13中S1では、MLC NANDフラッシュメモリの4ページ分のデータが、192バイト個のMLCに記憶されたデータ毎に、メモリコントローラ200のページ・バッファ240にまとめて転送される。
セクタレジスタに格納された128PROCESS分の768バイトのデータは、8行6列のレジスタブロックに格納された1PROCESS分のデータ毎に、セクタレジスタの端からECCによる計算処理を受け、エラーが訂正できるものは訂正され、できないものはそのままにされる。そして128PROCESSによって1セクタ全てのデータに対するECC処理が完了し、リー・メトリック・コードが復元される。
図13中S2では、図13中S1において復元されたリー・メトリック・コードが順次13進数データに変換される。ここでは、1セクタ分のリー・メトリック・コードは、1PROCESS分の48ビット毎に生成行列Gの逆変換が行われ、4ビットの9桁で表される13進数データに変換された上で、各レジスタブロックに上書きされる。
図13中S3では、図13中S2において生成された13進数データが24進数のバイナリデータに変換される。“p−adic to binary decode”回路ブロック260では、1PROCESS分の13進数データを4ビット8桁の32ビットのバイナリデータへと変換した上で、このバイナリデータを8行6列のレジスタブロックの単位で上書きしていく。
その後、バイナリデータは8行5列のレジスタ群毎に、1バイト/サイクルの速度で列順に読み出され、1セクタ分のデータとして出力される。
このように、メモリコントローラ200では、ECC処理後に実行されるリー・メトリック・コードからp進数データへの変換の際とp進数データからバイナリデータへの変換の際の2回、セクタレジスタに対するデータの上書きが実行される。
次に、メモリコントローラ200の仕様の重要部分のであるページ・バッファ240の使用方法や、データ転送の処理に関する具体例を説明する。ここでは、メモリデバイス100に用いるMLCのレベル数が16及び8である場合について特徴をまとめている。
MLCのレベル数によって使用する素数pが決定するため、これによって、コード化に必要なセル数も決定する。16値のMLCを使用した場合、p=13になるため、12(=p−1)個のMLCでコード化されたデータを保持する。したがって、ε=2の場合、12個のMLCのうち最大2個のMLCに対するエラー訂正ができる。
一方、8値のMLCを使用した場合、p=7になるため、6(=p−1)個のMLCでコード化されたデータを保持する。したがって、ε=1の場合、6個のMLCのうち最大1個のMLCに対するエラー訂正ができる。
上記、16値、8値のいずれのMLCを使用した場合であっても、少数のMLC毎に、2個或いは1個のMLCを救済できるので、メモリコントローラ200はMLCのエラーに対する救済効率が高いと言える。
なお、メモリコントローラ200と同等のエラー救済効率を、バイナリのBCH符号を用いる場合など従来のECCの方法で達成したい場合、多くのメモリ冗長領域と膨大な回路領域が必要となる。
続いて、メモリコントローラ200の構成について以下に示す。
p=13、ε=2の場合: データ・インタフェースは、×8の1バイト単位で構成する。更に、データ・インタフェースは、クロックに同期して動作する。データ転送は、512バイトのセクタ単位で実行される。
p=13、ε=2の場合: データ・インタフェースは、×8の1バイト単位で構成する。更に、データ・インタフェースは、クロックに同期して動作する。データ転送は、512バイトのセクタ単位で実行される。
図3中(b)列で示すように、1PROCESSは、バイナリデータにして32ビット毎に実行される。したがって、1セクタは、128PROCESSによって「p−adic Zp world」のデータに変換される。
NANDフラッシュメモリのページサイズは、4セクタ又は8セクタであるが、メモリコントローラ200からメモリデバイス100へのデータ転送は、4ページ続けて実行される。そのため、メモリコントローラ200では、メモリデバイス100よりも多くのセクタでページを構成することになる。例えば、先の例の場合、11セクタ分或いは22セクタ分でページを構成しているが、ページを構成するセクタ数については、メモリシステムの応用分野によって異なるため、ここでは特定しない。
ページを構成するセクタへのアクセスはランダムとする。
メモリコントローラ200からメモリデバイス100の16値のMLCに対するアクセスは4ページ単位で行われる。
メモリコントローラ200からメモリデバイス100の16値のMLCに対するアクセスは4ページ単位で行われる。
p=7、ε=1の場合: データ・インタフェースは、×8の1バイト単位で構成する。更に、データ・インタフェースは、クロックに同期して動作する。データ転送は、512バイトのセクタ単位で実行される。
図4中(a)列で示すように、1PROCESSは、バイナリデータにして9ビット毎に実行される。したがって、1セクタは、456PROCESSによって「p−adic Zp world」のデータに変換される。
NANDフラッシュメモリのページサイズは、4セクタ又は8セクタであるが、メモリコントローラ200からメモリデバイス100へのデータ転送は、3ページ続けて実行される。そのため、メモリコントローラ200では、メモリデバイス100よりも多くのセクタでページを構成することになる。ページを構成するセクタ数については、メモリシステムの応用分野によって異なるため仕様スケルトンでは特定しない。
ページを構成するセクタへのアクセスはランダムとする。
メモリコントローラ200からメモリデバイス100の16値のMLCに対するアクセスは3ページ単位で行われる。
メモリコントローラ200からメモリデバイス100の16値のMLCに対するアクセスは3ページ単位で行われる。
<13進数変換部>
ここからは、メモリコントローラ200におけるデータ処理を用いる回路の具体例について説明する。
ここからは、メモリコントローラ200におけるデータ処理を用いる回路の具体例について説明する。
先ず、メモリコントローラ200の入口と出口において必要となるバイナリとp進数(13進数)との変換回路について説明する。
図14は、p=13とした場合の「binary world」のδ桁の2h進数D(d0,d1,・・・,dδ−1)から「p−adic Zp world」のδ+1桁のp進数A(a0,a1,・・・,aδ−1,aδ)への変換計算の過程の構成を模式的に示した図である。図14中のハッチングで示す部分は、処理が終了したデータを示している。
なお、図14に示す“4 res”と示した四角は、入力されたバイナリデータを13で割り、商と剰余を求める演算回路である。この演算回路の入力は5ビットのバイナリデータであり、出力はこのバイナリデータを13で割った剰余となる。また、入力されたバイナリデータが13より大きい場合、商をキャリーCとして出力する。以下、この演算回路素子を“4 res”回路ブロックと呼ぶ。
始めに、第0ステップ(図14中S0)では、8桁の24進数のデータD(d0,d1,・・・,d7)に対して最右側のd7側から13の数え上げを行う。ここでは、d7に対して、“4 res”回路ブロックに入力された5ビットのバイナリデータの最上位ビットに0を入れてd7を13で割った剰余と共に商であるキャリーC1 28を直接生成する。
続いて、4〜1ビット目が先の“4 res”回路ブロックの出力(4ビットで表現された剰余)、0ビット(最下位ビット)目がd8の最上位ビットD7 3(=D31)である5ビットのバイナリデータを入力とする次の“4 res”回路ブロックによって、入力されたバイナリデータを13で割った剰余と共に商であるキャリーC1 27を作る。
以降、“4 res”回路ブロックに入力される5ビットのバイナリデータのうちの0ビット目がd0の最下位ビットD0 0(=D0)になるまで、29個の“4 res”回路ブロックを用いてキャリーC1 0〜C1 28を生成する。これら生成されたキャリーC1 0〜C1 28によって表現されるバイナリデータは、データDに含まれる13の個数になっている。
そして、d0を入力とする“4 res”回路ブロックの出力が、9桁の13進数D(a0,a1,・・・,a8)のうち、a0のバイナリ表示になる。
続いて、第1ステップ(図14中S1)では、第0ステップで得られたデータDに含まれる13の個数に対して、更に13がいくつ含まれるかを計算して132の個数を求め、13進数Dの重み131の桁の係数a1のバイナリを求める。
第1ステップでは、キャリーC1 0〜C1 28に対して最右側のC1 28側から13の数え上げを行う。キャリーC1 25〜C1 28に対する13の数え上げに際しては、5ビットの入力バイナリデータの最上位ビットに0を入れて入力バイナリデータを13で割った剰余と共にキャリーC2 25を直接生成する。
続いて、4〜1ビット目が先の“4 res”回路ブロックの出力(4ビットで表現された剰余)、0ビット(最下位ビット)目がC1 24である5ビットのバイナリデータを入力とする次の“4 res”回路ブロックによって、入力されたバイナリデータを13で割った剰余と共に商であるキャリーC2 24を生成する。
以降、“4 res”回路ブロックに入力される5ビットのバイナリデータのうちの0ビット目がC1 iの最下位ビットC1 0になるまで、26個の“4 res”回路ブロックを用いてキャリーC2 0〜C2 25を生成する。これら生成されたキャリーC2 0〜C2 25によって表現されるバイナリデータは、データDに含まれる素数132の個数になっている。
そして、C1 0を入力とする“4 res”回路ブロックの出力が、9桁の13進数D(a0,a1,・・・,a8)のうち、a1のバイナリになる。
続く第2ステップ(図14中S2)では、第1ステップで得られたデータDに含まれる132の個数に対して、更に素数13がいくつ含まれるかを計算して133の個数を求め、13進数Dの重み132の桁の係数a2のバイナリを求める。
以降、同様に13進数の重み138の桁の係数a8のバイナリ表示を求める第8ステップ(図14中S8)まで行う。
なお、第8ステップのキャリーC9 0〜C9 4は計算には使用しない。
なお、第8ステップのキャリーC9 0〜C9 4は計算には使用しない。
次に、“5 bit mod 13”回路ブロックを用いた13進数変換部210´の構成について考える。ここで、“5 bit mod 13”回路ブロックとは、5ビットのバイナリデータである入力Aと、素数13を比較し、Aが13以上の場合にPF0=‘1’を出力すると共に、Aの素数13による剰余Qを出力する回路である。詳細については後述する。
図15中(A)は、13進数変換部210´の第kステップの回路を、“5 bit mod 13”回路ブロックを用いて構成したものである。
ここでは、データを8桁の24進数表現にした場合の第j桁目をdjとする。この場合、djは4ビットのバイナリで表示できるが、この表示の係数Dを他のdの係数Dと共通に表現するために、数3に示すようにサブインデックスを用いる。
[数3]
[数3]
また、第kステップの演算の入力である前ステップ(第k−1ステップ)のキャリーはCk 0〜Ck 4(8−k)+k−1であり、サブインデックスを2の累乗の指数とする2進数としての係数となっていて、この2進数によって表現される数がデータに含まれる13kの個数となる。
第kステップでは、図15中(A)に示すように、入力は4(8−k)+k個のバイナリ(キャリーCk 0〜Ck 4(8−k)+k−1)であり、これを4(8−(k+1))+k+1個の“5 bit mod 13”回路ブロックで受ける。
1つ目の“5 bit mod 13”回路ブロック<1>は、入力バイナリA0〜A3、A4に、それぞれCk 4(8−k)+k−4〜Ck 4(8−k)+k−1、0を入力し、出力Q0〜Q3、キャリーPF0から、それぞれR4(8−(k+1))+k 0〜R4(8−(k+1))+k 3、Ck+1 4(8−(k+1))+kを出力する。
図示しない2つ目の“5 bit mod 13”回路ブロック<2>は、入力バイナリA0、及びA1〜A4にそれぞれキャリーCk 4(8−(k+1))+k−1、及び1つ目の“5 bit mod 13”回路ブロック<1>の出力R4(8−(k+1))+k 0〜R4((8−(k+1))+k 3を入力し、出力Q0〜Q3、及びキャリーPF0から、それぞれR4(8−(k+1))+k−1 0〜R4(8−(k+1))+k−1 3、及びCk+1 4(8−(k+1))+k−1を出力する。
以降、図15中(A)に示すように、同様の入出力を持つ“5 bit mod 13”回路ブロックが、合計4(8−(k+1))+k+1個並び、各“5 bit mod 13”回路ブロックから出力されるキャリーCk+1 0〜Ck+1 4(8−(k+1))+kが、次のステップである第k+1ステップの入力となる。
このように、バイナリから13進数への変換は、図15中(B)に示す模式図のように、キャリーCの最上位ビット側から順次実行される。
図15中(A)は、第kステップに関係する回路構成であるが、各ステップを時分割で処理することで、図15中(A)に示す回路構成を各ステップで使い回すことができる。この場合、各“5 bit mod 13”回路ブロックの入出力を単純なオン/オフによって制御可能にするために、“5 bit mod 13”回路ブロックの必要数が最大となる第0ステップの回路構成に、更に、8個の“5 bit mod 13”回路ブロックが付加される。
この様に構成された37個の“5 bit mod 13”回路ブロックからなる回路を図16に示す。以下において、この回路を“X to p”回路ブロックと呼ぶ。
図17に示すように、この“X to p”回路ブロックの入力は、図15中(A)においてk=0とした場合よりも8個多く、C0 0〜C0 39の合計40個となっている。また、出力は、4個おきの“5 bit mod 13”回路ブロックから出力される9個の4ビットのバイナリR0 0〜R0 3、R4 0〜R4 3、・・・、R28 0〜R28 3、R32 0〜R32 3と、次のステップの入力となる37個のキャリーC1 0〜C1 36となる。
次に、図14に示した“5 res”回路ブロックである“5 bit mod 13”回路ブロックについて具体的に説明する。
図18は、“5 bit mod 13”回路ブロックの回路記号を示す図である。“5 bit mod 13”回路ブロックは、5ビットのバイナリA0〜A4を入力し、4ビットのバイナリQ0〜Q3及びキャリーPF0を出力する。
“5 bit mod 13”回路ブロックは、入力バイナリAの素数13による剰余Qを出力すると共に、入力バイナリAが13以上の場合にPF0から‘1’、13未満の場合にPF0から‘0’を出力する。
ここで、h=4、p=13の場合、バイナリA、バイナリQ、素数pの間には、数4に示す関係が成立する。
[数4]
[数4]
図19は、“5 bit mod 13”回路ブロックの回路図である。
“5 bit mod 13”回路ブロックは、PF0生成部U1、2個の半加算器(Half adder)HA1〜HA3、及び全加算器(Full adder)FA1を有する。
“5 bit mod 13”回路ブロックは、PF0生成部U1、2個の半加算器(Half adder)HA1〜HA3、及び全加算器(Full adder)FA1を有する。
PF0生成部U1は、所定の電圧が供給されるVcc端子と、接地電圧が供給されるVss端子との間に、直列に接続されたPMOSトランジスタQP1〜QP3及びNMOSトランジスタQN1〜QN3を有する。これらトランジスタQP1、QP2、QP3、QN1、QN2、及びQN3は、それぞれA4、A1、A0、A0、A2、及びA3で制御される。
また、PF0生成部U1は、その他に、2個のPMOSトランジスタQP4、QP5、2個のNMOSトランジスタQN4、QN5、及びインバータIV1を有する。
トランジスタQP4、QP5は、それぞれ、トランジスタQP2のソース及びトランジスタQP3のドレイン間に並列に接続されている。トランジスタQN4は、トランジスタQN1のソース及びドレイン間に並列に接続されている。また、トランジスタQN5は、トランジスタQN1のソース及びトランジスタQN3のドレイン(Vss端子)間に並列に接続されている。これらトランジスタQP4、QP5、QN4、及びQN5は、それぞれA2、A3、A1、及びA4で制御される。
インバータIV1は、入力がトランジスタQN1、QN4、及びQN5のソースに接続されている。このインバータIV1の出力がキャリーPF0になる。
半加算器HA1は、入力がA0及びPF0、出力がQ0、桁上げ出力がC0となっている。全加算器FA1は、入力がC0及びA1、桁上げ入力がPF0、出力がQ1、桁上げ出力がC1となっている。半加算器HA2は、入力がC1及びA2、出力がQ2、桁上げ出力がC2となっている。半加算器HA3は、入力がC2及びA3、出力がQ3となっている。
以上の構成によって、PF0生成部U1は、“5 bit mod 13”回路ブロックに入力されるバイナリAが13以上か否かを判断し、その結果をPF0から出力する。バイナリAが13以上の場合、13をバイナリAから引くために、半加算器HA1〜HA3、及び全加算器FA1によって、5ビットバイナリの13の補数である3をバイナリAに加えている。
次に、13進数変換部210´のコア部分となる“p−adic”回路ブロックについて説明する。
図20は、“p−adic”回路ブロックの回路記号を示す図である。
“p−adic”回路ブロックは、図20に示すように、B0〜B9、I0〜I39を入力し、r0〜r35を出力する。
“p−adic”回路ブロックは、図20に示すように、B0〜B9、I0〜I39を入力し、r0〜r35を出力する。
図21は、“p−adic”回路ブロックのブロック図である。“p−adic”回路ブロックは、1ステップの回路構成を“X to p”回路ブロックとして、これに“X to p”回路ブロックの入出力を制御する制御スイッチSWが付加された構成となっている。
具体的には、入力I0〜I3、I4〜I7、・・・、I35〜I39は、それぞれ、制御スイッチSW1を介してC0 0〜C0 3、C0 4〜C0 7、・・・C0 35〜C0 39として“X to p”回路ブロックに入力される。これら制御スイッチSW1は、それぞれ入力B1〜B9によって制御される。
1個の制御スイッチSW1は、入力INと出力OUTを接続するトランスファトランジスタTQと、出力OUTを接地電圧に引き下げるNMOSトランジスタQNを有する。トランスファトランジスタTQは、制御信号がCNT=‘0’の場合にオンし、トランジスタQNは、制御信号がCNT=‘1’の場合にオンする。
制御スイッチSW1の場合、制御信号CNTは、/B1〜/B9となる。したがって、B=‘1’の場合、I0〜I39がそのままC0 0〜C0 39として出力され、B=‘0’の場合、入力に依らず出力は‘0’となる。これは、“p−adic”回路ブロックへの入力I0〜I39が不定であっても、“X to p”回路ブロックの入力が不定になることを回避するためである。
C0 0〜C0 39が入力された“X to p”回路ブロックは、前述の通り、R0 0〜R32 3、C1 0〜C1 36を出力する。
“X to p”回路ブロックから出力されたC1 0〜C1 36は、制御スイッチSW2を介して“p−adic”回路ブロックの出力であるr4〜r40となる。これら制御スイッチSW2は、入力B1〜B9によって制御される。したがって、これら制御スイッチSW2は、B=‘0’の場合、C1 0〜C1 36をそのままr4〜r40として出力する。
また、“X to p”回路ブロックから出力されたR0 0〜R32 3は、制御スイッチSW3を介して、“p−adic”回路ブロックの出力であるr0〜r35となる。これら制御スイッチSW3は、それぞれB0∧/B1〜B8∧/B9で制御される。これによって、例えば、R0 0及びr0間にある制御スイッチSW3は、B0=‘1’、B1=‘0’の場合のみ、R0 0をそのままr0として出力する。
制御スイッチSWを制御するB0〜B9は、タイミング信号であり、順次立ち上がる信号である。これに合わせて入力Iのパスが下位ビット側から4ビットずつ開通し、出力rのパスが出力Rのパスと切り替わる。
13進数の各桁の係数Aに相当するRは、次のステップの計算過程に入るまでに、そのステップの結果を出力するため、隣接するタイミング信号Bと論理演算した信号によってオン/オフ制御される制御スイッチSW3を介して後述する外部の“D−r”レジスタに出力される。
次に、以上説明した回路をまとめて構成された13進数変換部210´について説明する。
図22は、13進数変換部210´のブロック図である。13進数変換回路部210´は、“p−adic”回路ブロックに“D−r”レジスタが結合されて構成される。
“D−r”レジスタは、図22に示すように、タイミング信号B及びクロックclkで制御されるレジスタで、入力r0〜r39、D0〜D39、出力I0〜I39を持つ。
図23は、“D−r”レジスタの回路図である。
“D−r”レジスタは、ビット毎に2つのインバータからなるフリップフロップFFを有している。このフリップフロップFFには、制御スイッチSW1を介してDj(j=0〜39)が入力され、制御スイッチSW2を介してrjが入力される。一方、フリップフロップFFの出力側には、制御スイッチSW3を介してインバータIV1が接続されている。このインバータIV1の出力がIjとなる。
“D−r”レジスタは、ビット毎に2つのインバータからなるフリップフロップFFを有している。このフリップフロップFFには、制御スイッチSW1を介してDj(j=0〜39)が入力され、制御スイッチSW2を介してrjが入力される。一方、フリップフロップFFの出力側には、制御スイッチSW3を介してインバータIV1が接続されている。このインバータIV1の出力がIjとなる。
制御スイッチSW1〜SW3は、タイミング信号B0及びクロックclkによって制御される。具体的には、制御スイッチSW1は/clk∧/B0=‘1’の場合、制御スイッチSW2は/clk∧B0=‘1’の場合、制御スイッチSW3はclk=‘1’の場合にそれぞれオンする。
なお、“D−r”レジスタのデータ入力にないD32〜D39は‘0’とする。
なお、“D−r”レジスタのデータ入力にないD32〜D39は‘0’とする。
“D−r”レジスタの初期状態は、バイナリD0〜D31が設定され、残りは‘0’で埋められた状態となっている。以後、B0が立ち上がるとclkの立ち下がりに同期してデータrjを取り込み、clkの立ち上がりに同期して取り込んだrjをIjとして出力する。
この“D−r”レジスタは、“p−adic”回路ブロックと結合してタイミング信号Bj毎に計算のステップを進める。各クロックの変化の様子は図24に示す。タイミング信号Biは、図24に示すように、クロックclkの立ち上がりの度に、B0、B1、B2、・・・と順番に‘L’から‘H’に立ち上がっていく信号である。
各計算ステップで13進数の各桁Ajが下位側から出力rとして得られ、これをタイミング信号Bjの後半のIjの取り込みと同じタイミングで保持していく。
全計算ステップが終了すると“D−r”レジスタには、13進数のデータDの各桁の係数aをバイナリに変換した場合の各桁の係数Aj mが保持されている。
なお、p=13の場合、計算ステップの数は10、“p−adic”回路ブロックに含まれる“5 bit mod 13”回路ブロックの数は37となる。
<24進数変換部>
図25は、「p−adic Zp world」の9桁の13進数D(a0,a1,・・・,a7,a8)から「binary world」の8桁の24進数D(d0,d1,・・・,d7)への変換回路の構成を模式的に示した図である。
図25は、「p−adic Zp world」の9桁の13進数D(a0,a1,・・・,a7,a8)から「binary world」の8桁の24進数D(d0,d1,・・・,d7)への変換回路の構成を模式的に示した図である。
なお、図25中“4 add 13”と示した四角は、入力された4ビットのデータに対して、入力されたキャリーCに応じて13を加え、5ビットのバイナリを出力する演算回路である。以下、この回路を“4 add 13”回路ブロックと呼ぶ。
始めに、第0ステップ(図25中S0)では、13進数の7次の桁のバイナリ表示に対して8次の桁のバイナリ表示をキャリーすなわち138の個数のバイナリ表現として前述の計算を行う。これによって、137の個数としてキャリーC1 0〜C1 7の8ビットを得る。このキャリーC1 0〜C1 7が次の第1ステップの入力となる。
続いて、第1ステップ(図25中S1)では、13進数の6次の桁のバイナリ表示に対して、第0ステップで得られたキャリーC1 0〜C1 7を137の個数のバイナリ表現として前述の計算を行う。これによって、137の個数としてキャリーC2 0〜C2 11の12ビットを得る。このキャリーC2 0〜C2 11が次の第2ステップ(図25中S2)の入力となる。
以降、第0ステップ及び第1ステップと同様のステップを重ね、第8ステップ(図25中S8)では、13進数表現の0次の桁のバイナリ表示に対して、前の第7ステップ(図25中S7)で得られたキャリーC7 0〜C8 31を13の個数のバイナリ表現として前述の計算を行ない、130の個数すなわちDの2進数表現としてキャリーC8 0〜C8 35の36ビットを得る。但し、上位の4ビットはDの13進数と24進数との設定からゼロとなる。これらのキャリーC8 0〜C8 35からC8 32〜C8 35を除いたC8 0〜C8 31を4ビット毎にまとめるとDのバイナリ表現D(d0,d1,・・・,d7)を得ることができる。
次に、24進数変換部260´の構成について考える。
図26は、24進数変換部260´の第kステップの回路構成を、“5 bit add 13”回路ブロックを用いて構成したものである。ここで、“5 bit add 13”回路ブロックは、4ビットのバイナリデータである入力Bに素数13を加えてその結果をバイナリデータQとして出力する回路である。詳細については後述する。
図26は、24進数変換部260´の第kステップの回路構成を、“5 bit add 13”回路ブロックを用いて構成したものである。ここで、“5 bit add 13”回路ブロックは、4ビットのバイナリデータである入力Bに素数13を加えてその結果をバイナリデータQとして出力する回路である。詳細については後述する。
9桁の13進数表現のj次の桁の係数ajは、5ビットのバイナリで表現できるが、このバイナリ表現の係数Aを他の桁の係数aと共通の表現とするめに、数5に示すようなサブインデックスを用いる。
[数5]
[数5]
また、第kステップの演算の入力である前ステップ(第k−1ステップ)のキャリーはCk 0〜Ck 4(k+1)−1であり、サブインデックスが2の累乗の指数の2進数としての係数となっていて、この2進数が表現する数がデータに含まれる138−kの個数となる。
第kステップでは、図26中(A)に示すように、4(k+1)個の“5 bit add 13”回路ブロックで処理される。各“5 bit add 13”回路ブロックには、1個のキャリー(carry)と、13進数表現の1桁分の係数を表示する4個のバイナリが入力される。
1つ目の“5 bit add 13”回路ブロック<1>は、carry、入力B0〜B3に、それぞれCk 0、Q−1 0〜Q−1 3が入力され、Q0、Q1〜Q4に、それぞれCk+1 0、Q0 0〜Q0 3が出力される。
図示しない2つ目の“5 bit add 13”回路ブロック<2>は、carry、入力B0〜B3に、それぞれCk 1、Q0 0〜Q0 3が入力され、Q0、Q1〜Q4から、それぞれCk+1 1、Q1 0〜Q1 3が出力される。
以降、図26中(A)に示すように、同様の入出力を持つ“5 bit add 13”回路ブロックが、合計4(k+1)個並び、各“5 bit add 13”回路ブロックから出力されるキャリーCk+1 0〜Ck+1 4(k+2)−1(=Ck+1 4(k+1)+3)が、次にステップである第k+1ステップの入力となる。
このように、13進数からバイナリへの変換は、図26中(B)に示す模式図のように、キャリーCの最下位ビット側から順次実行される。
図26中(A)は、上記の通り、第kステップに関係する回路構成であるが、各ステップを時分割で処理することで、図26中(A)に示す回路構成を各ステップで使い回すことができる。この場合、各“5 bit add 13”回路ブロックの入出力を単純なオン/オフによって制御可能にするために、図27に示すように、k=0とした場合の4個の“5 bit add 13”回路ブロックを最小構成の回路ブロックとする。
この様に構成された4個の“5 bit add 13”回路ブロックからなる回路を“a to X”回路ブロックと呼ぶ。
図28に示すように、この“a to X”回路ブロックの入力は、Q−1 0〜Q−1 3とC0 0〜C0 3の8個となり、出力はQ3 0〜Q3 3とC1 0〜C1 3の8個となる。
次に、図21に示した“4 add 17”回路ブロックである“5 bit add 13”回路ブロックについて具体的に説明する。
図29は、“5 bit add 13”回路ブロックの回路記号である。“5 bit add 13”回路ブロックは、4ビットのバイナリB0〜B3と1ビットのキャリー(carry)を入力し、5ビットのバイナリQ0〜Q4を出力する。この“5 bit add 13”回路ブロックは、入力Bに対し、carryが‘1’なら素数13を加え、その結果をQとして出力する。
ここで、h=4、p=13の場合、バイナリB、バイナリQの間には、数6に示す関係が成立する。
[数6]
[数6]
図30は、“5 bit add 13”回路ブロックのブロック図である。
“5 bit add 13”回路ブロックは、2個の半加算器HA1、HA2、及び2個の全加算器FA1、FA2を有する。
“5 bit add 13”回路ブロックは、2個の半加算器HA1、HA2、及び2個の全加算器FA1、FA2を有する。
半加算器HA1は、入力がB0及びcarry、出力がQ0、桁上げ出力がC0となっている。半加算器HA2は、入力がC0及びB1、出力がQ1、桁上げ出力がC1となっている。全加算器FA1は、入力がB2及びcarry、桁上げ入力がC1、出力がC2、桁上げ出力がQ2となっている。全加算器FA2は、入力がB3及びcarry、桁上げ入力がC2、出力がQ3、桁上げ出力がQ4となっている。
以上の構成によって、“5 bit add 13”回路ブロックは、carry=‘1’なら、入力バイナリBに素数13を加える。
次に、前述の“a to X”回路ブロックを用いて、13進数の次数を1つ下げるための1ステップ分の回路を構成する。以下では、この回路を“p to X”回路ブロックと呼ぶ。この“p to X”回路ブロックは、全計算ステップに共通に使用することができる。
図31は、“p to X”回路ブロックの回路記号を示す図である。“p to X”回路ブロックはタイミング信号B1〜B7で制御され、入力であるQ−1 0〜Q31 3、C7 0〜C7 31から、C8 0〜C8 35を出力する。
図32は、“p to X”回路ブロックのブロック図である。
“p to X”回路ブロックは、8個の“a to X”回路ブロックからなる。
“p to X”回路ブロックは、8個の“a to X”回路ブロックからなる。
1個目の“a to X”回路ブロック<1>は、“p to X”回路ブロックの入力の一部であるQ−1 0〜Q−1 3、及びC7 0〜C7 3を入力し、Q´3 0〜Q´3 3、及び“p to X”回路ブロックの出力の一部であるC8 0〜C8 3を出力する。
2個目の“a to X”回路ブロック<2>は、Q3 0〜Q3 3、及び“p to X”回路ブロックの入力の一部であるC7 4〜C7 7を入力し、Q´7 0〜Q´7 3、及び“p to X”回路ブロックの出力の一部であるC8 5〜C8 7を出力する。入力のうち、Q3 0〜Q3 3は、1個目の“a to X”回路ブロック<1>の出力Q´3 0〜Q´3 3がタイミング信号B7で制御される制御スイッチSW1を介して入力される信号である。
3個目の“a to X”回路ブロック<3>は、Q7 0〜Q7 3、及び“p to X”回路ブロックの入力の一部であるC7 8〜C7 11を入力し、Q´11 0〜Q´11 3、及び“p to X”回路ブロックの出力の一部であるC8 8〜C8 11を出力する。入力のうち、Q7 0〜Q7 3は、2個目の“a to X”回路ブロック<2>の出力Q´7 0〜Q´7 3がタイミング信号B6で制御される制御スイッチSW2を介して入力される信号である。
以降、8個目の“a to X”回路ブロック<8>まで同様に接続される。
以降、8個目の“a to X”回路ブロック<8>まで同様に接続される。
このように、“a to X”回路ブロックの入出力間を制御スイッチSWで接続するのは、計算ステップ毎に入力の接続が外部入力と内部入力で切り替わるためであり、外部入力の場合に内部回路の出力が干渉しないようにするためである。
図32の回路構成の場合、タイミング信号B0だけが‘1’のタイミングにおいて、全ての制御スイッチSWがオフされ、図32中右から1番目の“a to X”回路ブロック<8>だけが活性化する。これが第0ステップに相当する。
続いて、タイミング信号B1も‘1’になると、図32中右から2番目の“a to X”回路ブロック<7>までが活性化する。これが第1ステップに相当する。
以降、タイミング信号B2〜B7が順次立ち上がっていく毎に、各ステップで必要な“a to X”回路ブロックが活性化されていく。
次に、24進数変換部260´のコア部分となる“binary”回路ブロックについて説明する。
図33は、“binary”回路ブロックの回路記号である。
“binary”回路ブロックは、図33に示すように、B0〜B9、I0〜I35を入力し、r0〜r35を出力する。
“binary”回路ブロックは、図33に示すように、B0〜B9、I0〜I35を入力し、r0〜r35を出力する。
図34は、“binary”回路ブロックのブロック図である。“binary”回路ブロックは、1ステップの回路構成を“p to X”回路ブロックとして、これに“p to X”回路ブロックの入出力を制御する制御スイッチSWが付加された構成となっている。
具体的には、入力I4〜I35は、それぞれ、制御スイッチSW1を介してC7 0〜C7 31として“p to X”回路ブロックに入力される。これら制御スイッチSW1は、それぞれタイミング信号B7〜B0によって制御される。したがって、制御スイッチSW1は、B=‘1’の場合、I4〜I35がそのままC7 0〜C7 31として出力され、B=‘0’の場合、入力に依らず出力は‘0’となる。
また、入力I0〜I35は、それぞれ、制御スイッチSW2を介してQ−1 0〜Q31 3として“p to X”回路ブロックに入力される。これら制御スイッチSW2は、それぞれ/B9∧B8〜/B1∧B0によって制御される。したがって、例えば、I0及びQ−1 0間にある制御スイッチSW2は、B9=‘0’、B8=‘1’の場合のみ、I0をそのままQ−1 0として出力する。
“p to X”回路ブロックから出力されたC8 0〜C8 35は、制御スイッチSW3を介して、“binary”回路ブロックの出力であるr0〜r35となる。これら制御スイッチSW3は、タイミング信号B7〜B0によって制御される。したがって、制御スイッチSW3は、B=‘1’の場合、C8 0〜C8 35をそのままr0〜r35として出力する。
以上の回路構成によって、“p to X”回路ブロックは、入力と出力のビット幅を4ビットずつ順次増やしながら各計算ステップに対応する。各計算ステップで13進数の桁の数Aを順次上位桁から取り込み、全ての計算ステップが終了したときに得られるのがデータのバイナリ表現となる。
前述のように、タイミング信号B0〜B9は、順次立ち上がる信号である。これに合わせて入力Iと出力rへのパスが上位ビット側から4ビットずつ導通していく。
13進数の各桁の数Aは、後述する外部の“A−r”レジスタに初期設定されて、次の計算ステップに入るまでに、選択的にパスが切り替わるように、隣接するタイミング信号Bでオン/オフ制御される制御スイッチSW3を介して“A−r”レジスタに出力される。
次に、以上説明した回路をまとめて構成された24進数変換部260´について説明する。
図35は、24進数変換部260´のブロック図である。24進数変換部260´は、“binary”回路ブロックに“A−r”レジスタが結合されて構成される。
“A−r”レジスタは、図35に示すように、タイミング信号B0及びクロックclkで制御されるレジスタで、入力r0〜r35、A0〜A35、出力I0〜I35を持つ。
図36は、“A−r”レジスタの回路図である。
“A−r”レジスタは、ビット毎に2つのインバータからなるフリップフロップFFを有している。このフリップフロップFFには、制御スイッチSW1を介してAj(j=0〜35)が入力され、制御スイッチSW2を介してrjが入力される。一方、フリップフロップFFの出力側には、制御スイッチSW3を介してインバータIV1が接続されている。このインバータIV1の出力がIjとなる。
“A−r”レジスタは、ビット毎に2つのインバータからなるフリップフロップFFを有している。このフリップフロップFFには、制御スイッチSW1を介してAj(j=0〜35)が入力され、制御スイッチSW2を介してrjが入力される。一方、フリップフロップFFの出力側には、制御スイッチSW3を介してインバータIV1が接続されている。このインバータIV1の出力がIjとなる。
制御スイッチSW1〜SW3はタイミング信号B0及びクロックclkによって制御される。具体的には、制御スイッチSW1は/clk∧/B0=‘1’の場合、制御スイッチSW2は/clk∧B0=‘1’の場合、制御スイッチSW3はclk=‘1’の場合にそれぞれオンする。
“A−r”レジスタの初期状態は、13進数の桁A0〜A35となっている。
“A−r”レジスタの初期状態は、13進数の桁A0〜A35となっている。
以後、タイミング信号B0が立ち上がるとクロックclkの立ち下がりに同期して取り込んだrjを、クロックclkの立ち上がりに同期してIjとして出力する。
この“A−r”レジスタは“binary”回路ブロックと結合してタイミング信号Bj毎に計算ステップを進める。各クロックの変化の様子は、図24と同様である。クロックclkからckが作られ、更にタイミング信号Bjが作られる。
全計算ステップが終了すると“A−r”レジスタには、入力である13進数Aのバイナリ表現Djが保持される。
以上の構成による24進数変換部260´によれば、計算ステップの数は10で、“binary”回路ブロックに含まれる“5 bit add 13”回路ブロックの数は32となる。
<ECCシステムの概要>
本実施形態のメモリコントローラ200は、既存のメモリデバイス100(MLC NANDフラッシュメモリなど)が記憶するデータの信頼性を確保するためにECCシステムとして“Lee metric code ECC system”回路ブロック220を搭載している。
本実施形態のメモリコントローラ200は、既存のメモリデバイス100(MLC NANDフラッシュメモリなど)が記憶するデータの信頼性を確保するためにECCシステムとして“Lee metric code ECC system”回路ブロック220を搭載している。
この“Lee metric code ECC system”回路ブロック220は、エラー検出・訂正に必要な計算をより簡便するため、リー・メトリック・コードを用いている。そこで、ここではリー・メトリック・コードについて簡単に説明する。
コードを表すシンボルcは、数7に示す整数となる。
[数7]
これら整数の計量をリー・メトリックとして|cj|で表わし、全てのリー・メトリック|cj|はp/2以下の整数で表されて、リー・メトリック|cj|の定義は数8のようになる。
[数8]
[数7]
これら整数の計量をリー・メトリックとして|cj|で表わし、全てのリー・メトリック|cj|はp/2以下の整数で表されて、リー・メトリック|cj|の定義は数8のようになる。
[数8]
コードCは、n=p−1個のシンボルcjの並びと考えられるため、C=(c1,c2,…,cn)で表すことができる。コードCの計量w(C)は、数9のように各シンボルcjのリー・メトリック|cj|の和として定義される。
[数9]
[数9]
また、コード間の距離はコードに対応する各シンボルの差のリー・メトリックの和で定義される。ここで2つのシンボルcとyの差(リー距離)dL(c,y)は数10のようになる。
[数10]
[数10]
さらに、コードCの最小リー距離は、数11に示すようにコードCの計量w(C)の最小の計量で定義される。
[数11]
[数11]
このとき、リー・メトリック・コードは、数12に示す生成行列G及びシンドローム行列Hを持ったコード間の最小距離が2γであり、且つ、γ−1以下のリー・メトリックのエラー訂正が可能なコードである。
[数12]
ここで、コードCの語長をn、データの語長をkとすると、γ=n−kであり、γはコードCに含まれる冗長語長を表している。
[数12]
ここで、コードCの語長をn、データの語長をkとすると、γ=n−kであり、γはコードCに含まれる冗長語長を表している。
この様に構成されるリー・メトリック・コードを生成するために入力変換されたデータをk桁のp進数で表す。このp進数の各桁の数はZpの要素であるから、これをリー・メトリック・コードのデータ語Xとして、生成行列Gから演算C=XGとしてコード表現が得られる。得られたコード語をメモリに記憶する。記憶したZpの数に生じたエラーの情報は、メモリから読み出したリー・メトリック・コードのデータ語Yとして、演算S=YHt(HtはHの転置行列)からシンドロームを得て、エラーの位置と量が計算できエラーが訂正できる。
次に、本実施形態で扱うp=13、γ=ε+1=3、ε=2とするユークリッド反復法を用いたECCシステムを説明する前提として、ユークリッド法に関する一般的な関係式などをまとめて説明しておく。
メモリデバイス100に記録されたコードCのバイナリデータは、4ビットからなるコード語シンボルが12個集まったものであり、ビット毎に様々な擾乱を受けて変化を起こす。そこで、コードYからコードCを復元するのがデコードである。このデコードに先立ち、始めにシンドロームを求める。
シンドロームSはシンドローム行列Hを利用したS=YHtの演算をして数13に示す要素S0、S1、S2として求まる。
[数13]
ここで、HtはHの転置行列である。生成行列Gとシンドローム行列Hの構成がGHt=0(mod 13)となるように構成されていることにより、Y=C+EとおくとS=EHtとなる。またE=(e1,e2,・・・,e12)とすると、シンドロームS0は各コード語シンボルのエラーの総和になっていることが分かる。これらのシンドロームSが唯一のエラーの情報であり、これらシンドロームSを基にして以下のように、正しいコードCの復元を行う。
[数13]
ここで、HtはHの転置行列である。生成行列Gとシンドローム行列Hの構成がGHt=0(mod 13)となるように構成されていることにより、Y=C+EとおくとS=EHtとなる。またE=(e1,e2,・・・,e12)とすると、シンドロームS0は各コード語シンボルのエラーの総和になっていることが分かる。これらのシンドロームSが唯一のエラーの情報であり、これらシンドロームSを基にして以下のように、正しいコードCの復元を行う。
続いて、デコードの原理を説明する。n=p−1=12個のエラーのシンボルを二つの組J+とJ−に、数14のように分類する。
[数14]
[数14]
すなわち、シンボルのエラー量がej<13/2の場合、コードシンボルcjの位置jの集まりであるJ+と、シンボルのエラー量がej>13/2の場合のコードシンボルcjの位置jの集まりであるJ−とに分類される。ガロア体GF(13)上の多項式Λ(x)、V(x)をこれらの組を基に数15のように構成する。
[数15]
[数15]
このように、多項式Λ(x)はJ+のエラーコード語シンボルの位置jの逆数を根として持ち、そのコード語シンボルのリー・メトリックejを根の多重度として持つ多項式となる。一方、多項式V(x)はJ−のエラーコード語シンボルの位置jの逆数を根として持ち、そのコード語シンボルのリー・メトリック13−ejを根の多重度として持つ多項式となる。デコードは、最終的にこれらの多項式をシンドロームSlの情報のみから構成して解くことによってエラーの情報を得る過程となる。つまり、これら多項式Λ(x)、V(x)とシンドロームSlとの関係を求める必要がある。
続いて、数16に示すように各シンドロームSlをその次数の係数に持つ級数多項式で構成すると、シンボルのエラー量ej、位置jとその値を持つ有理多項式で表される。
[数16]
数16から、多項式Λ(x)、V(x)、シンドロームS(x)の間には数17に示す関係式が成立する。
[数17]
[数16]
数16から、多項式Λ(x)、V(x)、シンドロームS(x)の間には数17に示す関係式が成立する。
[数17]
続いて、数17に示す関係式を利用して、シンドロームS(x)から多項式Λ(x)、V(x)を求める。
シンドロームS(x)から、数18に示す次数がγ−1以下の多項式Ψ(x)を求める。
[数18]
多項式Ψ(x)の展開式において、数18に示す式の両辺の同次次数の係数の比較から、係数ψjは、シンドロームSiと既に求まっている係数ψj−1とを用いて反復法で求めることができる。シンドロームS1、S2から多項式Ψ(x)の係数ψ0〜ψ2を求めた結果を数19に示す。
[数19]
この多項式Ψ(x)はΛ(x)/V(x)に等価な多項式であるが、多項式Λ(x)、V(x)には、数20に示すキー条件がある。そのため、x3と多項式Ψ(x)に対してユークリッド法で定数倍を除いて求めることができる。
[数20]
[数18]
多項式Ψ(x)の展開式において、数18に示す式の両辺の同次次数の係数の比較から、係数ψjは、シンドロームSiと既に求まっている係数ψj−1とを用いて反復法で求めることができる。シンドロームS1、S2から多項式Ψ(x)の係数ψ0〜ψ2を求めた結果を数19に示す。
[数19]
この多項式Ψ(x)はΛ(x)/V(x)に等価な多項式であるが、多項式Λ(x)、V(x)には、数20に示すキー条件がある。そのため、x3と多項式Ψ(x)に対してユークリッド法で定数倍を除いて求めることができる。
[数20]
したがって、シンドロームS1、S2から多項式Ψ(x)が構成できれば、反復法の停止条件としてシンドロームS0を用いて多項式Λ(x)、V(x)が求まる。すなわち、反復法によって(S0,Ψ(x))の組から求めた多項式Λ(x)、V(x)は、エラーコード語シンボルの位置jとエラー量ejを表している。
ユークリッド反復法については後ほど詳述する。
ユークリッド反復法については後ほど詳述する。
次に、図37〜図39を用いて説明したデータ処理の手順について詳細に説明する。
以下では、「p−adic Zp world」でのECCの演算について、Zpデータとしてメモリシステムに入力されたデータをエンコードする手順と、メモリシステムから読み出されたコードをデコードし、データAを得るまでの手順についてまとめる。
エンコードの手順は以下のようになる。
始めに、入力されたデータDは、13進数変換部210´によって数21に示す13進数表現の9桁のデータ語D(h)に変換する(図37中S1)。
[数21]
始めに、入力されたデータDは、13進数変換部210´によって数21に示す13進数表現の9桁のデータ語D(h)に変換する(図37中S1)。
[数21]
続いて、このデータDに生成行列Gを乗じてコードCの12個のコード語成分c1〜c12を得る(図37中S2)。各コード語成分の値は数22に示す通りである。
[数22]
[数22]
最後に、このコード語成分cjをメモリセルに記憶する(図37中S3)。各コード語成分は4ビットのバイナリ表示として処理されるが、メモリデバイス100には、p−adicセルに対応する閾値レベルとして、Zpの数の表示のままレベルが設定される。
リー・メトリック・コードCは、メモリデバイス100に記憶されて、エラーを含むコードYとなる。
データ読み出しの際、メモリデバイス100から読み出されたコードYは、メモリコントローラ100のページ・バッファ240に保持される(図38中S4)。コードYは数23に示す構成となっている。ここで、ejは、コードYの位置jにあるコード語シンボルのエラーのリー・メトリックを示す。
[数23]
[数23]
メモリコントローラ200は、このページ・バッファ240に保持されたコードYに対して、ECCによるエラー訂正を施した上でバイナリデータを生成し外部に出力する。これらデータ読み出しの際のデータ処理の手順は以下の通りである。
(手順1) ページ・バッファ240が保持するコードYから数24に示す計算式に基づいてシンドロームS=(S0,S1,S2)を計算する(図38中S5)。
[数24]
[数24]
S0=Σejとなるため、|S0|>2の場合、エラーのリー・メトリック総量が3以上となることから、コードYのエラー訂正が不可能と判断し、解無しとしてエラー探索を中止する(図38中S6、S7)。一方、|S0|≦2の場合、手順2に処理を進める(図38中S6)。
(手順2) 訂正可能なコード語成分の数の上限であるε=2に対して、まず手順1で求めたシンドロームS0〜S2から数25に示す計算式に基づいて解探索多項式Ψ(x)の係数ψjを順次計算する(図38中S8)。
[数25]
[数25]
続いて、x3及び多項式Ψ(x)に対するユークリッドの方法によって、リー・メトリック・コードCのECCの解となる多項式λ(x)及びv(x)を求める(図38中S9)。ユークリッドの方法によって解が得られない場合、解無しとしてエラー訂正を中止する(図38中S10、S11)。一方、解が得られた場合、手順3以降に処理を進める(図38中S10)。
(手順3) 手順2で求めた多項式λ(x)又はv(x)をφ(x)として、このφ(x)の根の多重度を得るために必要なハッセ微分多項式の係数を求める(図38中S12)。手順2で得られた係数ψjに対して、数26のように、一連の二項係数jCiを掛けることによってハッセ微分多項式の係数のベクトルφ[i]=(iCiφi,i+1Ciφi+1,i+2Ciφi+1,・・・)が得られる。
[数26]
具体的には、数27のようになる。
[数27]
[数26]
具体的には、数27のようになる。
[数27]
(手順4) 手順3で得られたハッセ微分多項式に対して、Zpの要素1〜12を代入して、0次微分多項式(=φ(x))がゼロとなる要素rを求める。続いて、数28に示すように、各rに対してn−1次微分多項式はゼロであるが、n次微分多項式はゼロでない次数nを求める(図39中S13)。
[数28]
得られたrは、エラーが生じたコード成分の位置番号tの逆元であり、それに対応するnは、生じたエラー量etから変換された量となる。この過程を要素rの全てに対して行う。
[数28]
得られたrは、エラーが生じたコード成分の位置番号tの逆元であり、それに対応するnは、生じたエラー量etから変換された量となる。この過程を要素rの全てに対して行う。
(手順5) ここでは、解の多重度nからエラー量を変換で求める(図39中S14)。エラーのあるコード語成分の位置番号はt=r−1となる。多項式の根λ(x)及びv(x)の根がr、この根の多重度がnであれば、多項式λ(x)の場合のエラー量はet=nとなり、多項式v(x)の場合のエラー量はet=13−nとなる。
続いて、コードytとエラー量etから、ct=yt−etに基づいて正しいリー・メトリック・コードC=(c1,c2,・・・,c12)を復元した後(図39中S15)、手順6に処理を進める。
(手順6) コードC及びコードAと生成行列Gの関係AG=Cなる多元連立一次方程式を介して、9個のZpの要素a0〜a8を求める。得られた要素a0〜a8から9桁の13進数A=(a0,a1,・・・,a8)を求める(図39中S16)。
以上で、メモリコントローラ200における「p−adic Zp world」内でのデータ処理は終了したため、続いて「p−adic Zp world」の出口においてデータAをバイナリデータに戻す変換を行う。データAを9桁の13進数表現から8桁の24進数表現に変換し、8桁として各桁の数字をバイナリ表示する。これがメモリシステムに入力されたバイナリデータDとなる。
以上でデータの復元が完了する。
以上でデータの復元が完了する。
<デコード部>
ここらからは、上記手順を実現する具体的な回路の例について説明する。
先ず、Zpの積を求める計算回路について説明する。以下においてこの計算回路を“X Zp”回路ブロックと呼ぶ。
ここらからは、上記手順を実現する具体的な回路の例について説明する。
先ず、Zpの積を求める計算回路について説明する。以下においてこの計算回路を“X Zp”回路ブロックと呼ぶ。
図40は、“X Zp”回路ブロックの回路記号を示す図、図41中(A)は、“X Zp”回路ブロックのブロック図、図41中(B)、及び(C)は“X Zp”回路ブロックによる演算処理を模式的に示した図である。
“X Zp”回路ブロックは、大別して、前半の計算ステップ群を処理する回路と、後半の計算ステップ群を処理する回路とからなる。
前半の計算ステップ群を処理する回路は、ANDゲートG1と、3個の“4 bit AD mod 13”回路ブロック<1>〜<3>とで構成される。
ANDゲートG1は、掛けられる数aの第i(i=0〜3)ビットと、掛ける数bの第j(j=0〜3)ビットとの論理積を取り、これをMijとして出力する。ここで、数a及びbは、数29のように表わす。
[数29]
[数29]
“4 bit AD mod 13”回路ブロックは、2つのZpの数に対して13を法とする和を求める回路である。“4 bit AD mod 13”回路ブロックは、A0〜A3、及びB0〜B3を入力し、Q0〜Q3を出力する。この“4 bit AD mod 13”回路ブロックの具体的構成については、後述する。
1つ目の“4 bit AD mod 13”回路ブロック<1>は、A0〜A2、A3、及びB0〜B3に、それぞれM10〜M30、‘0’、M01〜M31を入力し、Q0〜Q3からQ0 0〜Q0 3を出力する。
2つ目の“4 bit AD mod 13”回路ブロック<2>は、A0〜A2、A3、及びB0〜B3に、それぞれ“4 bit AD mod 13”回路ブロック<1>の出力であるQ0 1〜Q0 3、‘0’、及びM02〜M32を入力し、Q0〜Q4からQ1 0〜Q1 3を出力する。
3つ目の“4 bit AD mod 13”回路ブロック<3>は、A0〜A2、A3、及びB0〜B3に、それぞれ“4 bit AD mod 13”回路ブロック<2>の出力であるQ1 1〜Q1 3、‘0’、及びM03〜M33を入力し、Q0〜Q4からQ2 0〜Q2 3を出力する。
以上のように、前半の計算ステップ群を処理する回路は、“4 bit ADmod 13”回路ブロック<1>〜<3>の出力と入力とを順次接続して構成されている。
後半の計算ステップ群を処理する回路は、3個の“5 bit mod 13”回路ブロック<1>〜<3>で構成されている。この“5 bit mod 13”回路ブロック<1>〜<3>は図18、図19に示す回路である。
1つ目の“5 bit mod 13”回路ブロック<1>は、A0、及びA1〜A4に、それぞれQ1 0、及びQ2 0〜Q2 3を入力し、Q0〜Q3からQ3 0〜Q3 3を出力する。
2つ目の“5 bit mod 13”回路ブロック<2>は、A0、及びA1〜A4に、それぞれQ0 0、及び“5 bit mod 13”回路ブロック<1>の出力であるQ3 0〜Q3 3を入力し、Q0〜Q3からQ4 0〜Q4 3を出力する。
3つ目の“5 bit mod 13”回路ブロック<3>は、A0、及びA1〜A4に、それぞれM00、及び“5 bit mod 13”回路ブロック<2>の出力であるQ4 0〜Q4 3を入力し、Q0〜Q3からQ6 0〜Q6 3(Q0〜Q3)を出力する。
以上のように、後半の計算ステップ群を処理する回路は、“5 bit mod 13”回路ブロック<1>〜<3>の出力と入力とを順次接続して構成されている。
全ての回路はクロック非同期で動作し、入力Mijを与えることによって出力Qが確定する。
以上のように、“X Zp”回路ブロックを構成する回路ブロック数は6個となる。
次に、図41に示す“4 bit AD mod 13”回路ブロックについて説明する。
図42は、“4 bit AD mod 13”回路ブロックの回路記号である。
“4 bit AD mod 13”回路ブロックは、A及びBから入力される数a及びbの和を求めて、得られた和の素数13による剰余をQから出力する。なお、入力の和をZpの数として扱わないで4ビットのバイナリ数として扱う場合が必要となるので、ブロック内の信号の変更で実現できる“4 bit AD(16) mod 13”回路ブロックとしても回路記号を図42に示した。
“4 bit AD mod 13”回路ブロックは、A及びBから入力される数a及びbの和を求めて、得られた和の素数13による剰余をQから出力する。なお、入力の和をZpの数として扱わないで4ビットのバイナリ数として扱う場合が必要となるので、ブロック内の信号の変更で実現できる“4 bit AD(16) mod 13”回路ブロックとしても回路記号を図42に示した。
h=4、p=13の場合、数a、b、剰余のバイナリ表示Qの間には、数30に示す関係が成立する。
[数30]
[数30]
図43は、“4 bit AD mod 13”回路ブロックの回路図である。
“4 bit AD mod 13”及び“4 bit AD(16) mod 13”回路ブロックは、PF0生成部U1、4個の半加算器HA1〜HA4、及び4個の全加算器FA1〜FA4を有する。
“4 bit AD mod 13”及び“4 bit AD(16) mod 13”回路ブロックは、PF0生成部U1、4個の半加算器HA1〜HA4、及び4個の全加算器FA1〜FA4を有する。
PF0生成部U1は、所定の電圧が供給されるVcc端子と、Vss端子との間に、直列に接続されたPMOSトランジスタQP0、QP1、QP2、及びNMOSトランジスタQN1〜QN3を有する。これらトランジスタQP0、QP1、QP2、QN1、QN2、及びQN3は、それぞれC3又はVss、S1、S0、S0、S2、及びS3で制御される。
また、PF0生成部U1は、その他に、2個のPMOSトランジスタQP3、QP4、2個のNMOSトランジスタQN4、QN5、及びインバータIV1を有する。
トランジスタQP3、QP4は、それぞれ、トランジスタQP1のソース及びトランジスタQP2のドレイン間に並列に接続されている。トランジスタQN4は、トランジスタQN1のソース及びドレイン間に並列に接続されている。トランジスタQN5は、トランジスタQN1のソース及びQN3のドレイン間に並列に接続されている。これらトランジスタQP3、QP4、QN4、及びQN5は、それぞれ、S2、S3、S1、及びC3又はVssで制御される。また、インバータIV1は、入力がトランジスタQN1、QN4、及びQN5のソースに接続されている。このインバータIV1の出力がキャリーPF0になる。以上でC3に替わりVssが入力される場合が“4 bit AD(16) mod 13”回路ブロックとなる。
半加算器HA1は、入力がA0及びB0、出力がS0、桁上げ出力がC0´となっている。全加算器FA1は、入力がA1及びB1、桁上げ入力がC0´、出力がS1、桁上げ出力がC1´となっている。全加算器FA2は、入力がA2及びB2、桁上げ入力がC1´、出力がS2、桁上げ出力がC2´となっている。全加算器FA3は、入力がA3及びB3、桁上げ入力がC2´、出力がS3、桁上げ出力がC3´となっている。半加算器HA2は、入力がS0及びPF0、出力がQ0、桁上げ出力がC0となっている。全加算器FA4は、入力がS1及びPF0、桁上げ入力がC0、出力がQ1、桁上げ出力がC1となっている。半加算器HA3は、入力がC1及びS2、出力がQ2、桁上げ出力がC2となっている。半加算器HA4は、入力がC2及びS3、出力がQ3となっている。
以上の構成によって、PF0生成部U1は、“4 bit AD mod 13”回路ブロックに入力されるバイナリA及びBの和が13以上か否かを判断し、“4 bit AD(16) mod 13”回路ブロックに入力される数の和をZpの数ではなく4ビットバイナリの数として13以上か否かを判断し、A及びBの和が13以上の場合、13をA及びBの和から引くために、半加算器HA1〜HA3、及び全加算器FA1〜FA3によって、4ビットバイナリの13の補数である3をA及びBの和に加えている。
次に、エンコード部221の回路構成例を説明する。
図44中(A)は、Zpのコード語Aをリー・メトリック・コードCに変換する回路のブロック図であり、図44中(B)は、図44中(A)に示す回路を制御する2重のクロックck及びclを示す図である。
図44中(A)は、Zpのコード語Aをリー・メトリック・コードCに変換する回路のブロック図であり、図44中(B)は、図44中(A)に示す回路を制御する2重のクロックck及びclを示す図である。
図44中(B)に示すように、クロックclは、ckの立ち上がりに遅れて立ち上がるパルスであり、クロックck毎にcl0〜cl8の合計9個のクロックclが順次立ち上がる。そして、cl8が立ち上がると、これに遅れて次にクロックckが立ち上がる。同様の波形がck1からck12まで繰り返される。
これらクロックck、clのうち、ckは“Counter(1 to 12)”回路ブロック及び“Ri(1〜12)”レジスタ部を制御し、clは、“Ro(0〜8)”レジスタ部、“X k−times”回路ブロック及び“Rgstr”レジスタを制御する。
“Counter(1 to 12)”回路ブロックは、初期状態が0で、クロックckが立ち上がる毎に改めてクロック数を数えて出力する回路である。すなわちckj(j=1〜12)のうち、ckjの立ち上がりでjを“X k−times”回路ブロックに出力する。
“Ri(1〜12)”レジスタ部は、コード語Cの成分cjを記憶するレジスタで、合計12個の数を記憶することができる。この“Ri(1〜12)”レジスタ部は、ckの立ち上がりのタイミングに合わせて順次個々のレジスタに数を記憶していく。即ちckj+1の立ち上がりのタイミングで要素cjとなるデータをレジスタに取り込む。ck13の立ち上がりによって、レジスタに12個の要素cjが取り込まれる。つまり、コード語Cを記憶することができる。
“X k−times”回路ブロックは、クロックclが立ち上がる度に出力に入力を乗じる回路である。“X k−times”回路ブロックでは、入力されるjを合計9回のclの立ち上がりの度に出力に乗じる。即ち、cli(i=0〜8)の立ち上がりによって、“X k−times”回路ブロックの出力は(j)i+1となる。この出力は“X Zp”回路ブロックに出力される。
“Ro(0〜8)”レジスタ部は、9個の数を記憶できるレジスタであり、初期状態では、コードAの9個の成分a0〜a8を記憶している。“Ro(0〜8)”レジスタ部には、クロックclが入力されており、このクロックclが立ち上がる度にコードAの成分a0〜a8を順次出力する。即ち、cli(i=0〜8)を受けてaiを出力する。
“X Zp”回路ブロックは、入力の掛け算をZpで行なう回路である。“X Zp”回路ブロックには、クロックcli毎に“X k−times”回路ブロックの出力(j)i+1と“Ro(0〜8)”レジスタ部の出力aiが入力され、(j)i+1aiを出力する。この出力された数(j)i+1aiを加算していくのが、“4 bit AD mod 13”回路ブロック及び“Rgstr”レジスタの組み合わせである。
“4 bit AD mod 13”回路ブロックは、2つの入力の数の和を13を法として求める回路である。一方、“Rgstr”レジスタは、初期状態が‘0’でクロックclの入力毎に、“4 bit AD mod 13”回路ブロックからの入力を遮断し、自身が保持する内容を“4 bit AD mod 13”回路ブロックに出力するレジスタである。図44に示すような、“4 bit AD mod 13”回路ブロック及び“Rgstr”レジスタの接続によって、クロックclの入力毎に前回出力した数に新たな“X Zp”回路ブロックから出力される数を加算していく。即ち、クロックcl0〜cl8が立ち上がると、コードAをリー・メトリック・コードに変換した後のCの成分cjが、クロックckjのサイクルで出力される。これが次のckj+1のサイクルの頭で“Ri(1〜12)”レジスタ部に保持される。これによって、コードAから変換されたコードCを得ることができる。
次に、図44に示す“X k−times”回路ブロックについて説明する。
図45は、“X k−times”回路ブロックの回路記号を示す図であり、図46は、“X k−times”回路ブロックのブロック図である。
図45は、“X k−times”回路ブロックの回路記号を示す図であり、図46は、“X k−times”回路ブロックのブロック図である。
“X k−times”回路ブロックは、図45に示すように、入力Xの累乗(X)jを算出し出力する回路であり、クロックclj(j=1〜12)で制御される。
“X k−times”回路は、図46に示すように、“X Zp”回路ブロックと、クロックclに同期して動作する“Rgstr”レジスタ<1>及び“Rgstr”レジスタ<2>とを有する。
“Rgstr”レジスタ<1>は、入力がXに接続され、出力が“X Zp”回路ブロックの一方の出力に接続されている。“Rgstr”レジスタ<2>は、入力に“X k−tims”回路ブロックの出力が接続され、出力に“k−times”回路ブロックの一方の入力が接続されている。“Rgstr”レジスタ<2>には初期状態として‘1’が保持されている。
この回路構成によって、“X k−times”回路ブロックは、自身の出力を1サイクル遅れで取り込み、これによって入力Xと出力(X)jの積を得る。
クロックclが入るごとに出力(X)jに入力Xを累積的に掛ける。クロックcljの立ち上がる前に“Rgstr”レジスタ<1>にデータXを設定しておき、初期設定が‘1’の“Rgstr”レジスタ<2>を同期させることで、j発目のcljで(X)jを得る。
<シンドローム生成部>
ここでは、シンドローム生成部222の回路構成について説明する。
先ず、シンドローム生成部222を始めとして、以降の演算処理で多用するZpの要素jのm乗を全ての要素jに対して一括して計算する回路ブロックを説明する。以下では、この回路ブロックを“(j)i(j=1 to 12)”回路ブロックと呼ぶ。
ここでは、シンドローム生成部222の回路構成について説明する。
先ず、シンドローム生成部222を始めとして、以降の演算処理で多用するZpの要素jのm乗を全ての要素jに対して一括して計算する回路ブロックを説明する。以下では、この回路ブロックを“(j)i(j=1 to 12)”回路ブロックと呼ぶ。
図47は、“(j)i(j=1 to 12)”回路ブロックの回路記号を示す図である。
“(j)i(j=1 to 12)”回路ブロックは、クロックcki(i=0〜11)とclj(j=1〜12)で制御され、クロックcljの立ち上がるに同期して(j)iと(j)i+1を出力する。
図48は、“(j)i(j=1 to 12)”回路ブロックのブロック図である。
“(j)i(j=1 to 12)”回路ブロックは、Zpのゼロ以外の全ての要素1〜12に対して、0〜11乗を順次算出し、レジスタに保持する回路である。
“(j)i(j=1 to 12)”回路ブロックは、図48に示す通り、“X Zp”回路ブロック、“Counter(1 to 12)”回路ブロック、及び“R(1〜12)”レジスタ部を有する。
指数を決めるクロックがckiで、何回目のクロックckiであるかで指数iが決まる。一方、Zpの要素を1から順次指定するのがクロックclで、クロックcljの回数jが要素数となる。
“Counter(1 to 12)”回路ブロックは、“X Zp”回路ブロックの一方の入力に接続されている。ckiをスタート信号とし、cljの立ち上がりのタイミングで1〜12の範囲でカウントアップする。
“R(1〜12)”レジスタ部は、12個のレジスタからなり、inのクロック/cljの立ち上がりで入力i1〜i12を順次1〜12番目のレジスタに格納し、outのクロックcljの立ち上がりで順次1〜12番目のレジスタの内容i1〜i12を出力する。
図48に示すように、“Counter(1 to 12)”回路ブロックと“R(1〜12)”レジスタ部への入力クロックck及びclを同期させ、“R(1〜12)”レジスタ部の出力と“Counter(1 to 12)”回路ブロックの出力とを“X Zp”回路ブロックで乗算すると、クロックckiが立ち上がった後、cljが立ち上がる毎に“R(1〜12)”レジスタ部から(j)iが出力される。また、“X Zp”回路ブロックから(j)i+1が出力される。この(j)i+1は、計算回路ごとに必要に応じて用いることができる。
次に、シンドローム生成部222の回路構成例として、シンドロームSの成分要素を一括して求める演算回路を説明する。以下、この演算回路を「シンドローム成分要素生成回路」と呼ぶ。
シンドローム成分要素生成回路は、数31に示す関係式に基づいて構成されている。
[数31]
[数31]
図49中(A)は、シンドローム成分要素生成回路のブロック図であり、図49中(B)は、シンドローム成分要素生成回路を制御するクロックcki(i=0〜3)、clj(j=1〜12)のタイミングチャートである。
シンドローム成分要素生成回路は、図49中(A)に示すように、“Ro(1〜12)”レジスタ部、“(j)i(j=1 to 12)”回路ブロック、“X Zp”回路ブロック、“4 bit AD mod 13”回路ブロック、“Rgstr”レジスタ、及び“Ri(0〜2)”レジスタ部を有する。
メモリデバイス100から読み出され、“p−adic<>MLC binary mapping”回路ブロック230で変換されたコードYは“Ro(1〜12)”レジスタ部に初期設定として格納される。“(j)i(j=1 to 12)”回路ブロックからは(j)iを発生させる。これら“Ro(1〜12)”レジスタ及び“(j)i(j=1 to 12)”回路ブロックは、クロックcliによって同期され、Yの成分yjが出力されると同時に(j)iが出力されるように制御される。これらの積(j)iyjを“X Zp”回路ブロックで生成し、クロックclj(j=1〜12)と同期して、“4 bit AD mod 13”回路ブロック及び“Rgstr”レジスタのループによって加算していき、シンドローム成分Siを作る。得られたSiをクロックcki+1で“Ri(0〜2)”レジスタの第i番目のレジスタに格納する。この過程をクロックckiのi=0〜2について処理し、全てのシンドローム成分を得て“Ri(0〜2)”レジスタ部に格納する。
コードYのエラーの探索の可否の判定には、シンドローム・ベクタの成分S0のリー・メトリック|S0|を求める必要がある。
そこで、次は、Zpの要素のリー・メトリックを計算する演算回路素子について説明する。以下において、この演算回路素子を“4 bit LM 13”回路ブロックと呼ぶ。
4ビットのバイナリ表示のZpの要素aについて、そのリー・メトリックQ=|a|は、Q=/PF0×a+PF0×(13−a)と表現できる。ここでPF0は、a≧7の場合に‘1’、a<7の場合に‘0’になる。したがって、aのリー・メトリックを求めるには、a≧7の場合、13からaを引く、即ち、13にaの補数を加えれば良い。
h=4、p=13の場合のAとQの関係は数32のようになる。
[数32]
[数32]
図50は、“4 bit LM 13”回路ブロックの回路記号であり、図51は、“4 bit LM 13”回路ブロックのブロック図である。
“4 bit LM 13”回路ブロックは、4ビットのバイナリA0〜A3を入力し、4ビットのバイナリQ0〜Q3を出力する。
“4 bit LM 13”回路ブロックは、PF0生成部U1、XORゲートG1、1半加算器HA1、及び3個の全加算器FA1〜FA3を有する。
PF0生成部U1は、Vcc端子及びVss端子間に、直列に接続されたPMOSトランジスタQP1、QP2、及びNMOSトランジスタQN1〜QN3を有する。これらトランジスタQP1、QP2、QN1、QN2、及びQN3は、それぞれ入力A3、A0、A0、A1、及びA2で制御される。
また、PF0出力部U1は、その他に、2個のPMOSトランジスタQP3、QP4、NMOSトランジスタQN4、及びインバータIV1を有する。
トランジスタQP3、QP4は、それぞれ、トランジスタQP2のソース及びドレイン間に接続されている。また、トランジスタQN4は、トランジスタQN1のソース及びトランジスタQN3のドレイン(Vss端子)間に接続されている。これらトランジスタQP3、QP4、及びQN4は、それぞれ、入力A1、A2、及びA3で制御される。インバータIV1は、入力がトランジスタQN1、及びQN4のソースに接続されている。このインバータIV1の出力がキャリーPF0になる。
XORゲートG1は、Aj(j=0〜3)及びPF0を入力し、Bjを出力する。
全加算器FA1は、入力がB0及びPF0、桁上げ入力がPF0、出力がQ0、桁上げ出力がC0となっている。半加算器HA1は、入力がC0及びB1、出力がQ1、桁上げ出力がC1となっている。全加算器FA2は、入力がB2及びPF0、桁上げ入力がC1、出力がQ2、桁上げ出力がC2となっている。全加算器FA3は、入力がB3及びPF0、桁上げ入力がC2、出力がQ3となっている。
全加算器FA1は、入力がB0及びPF0、桁上げ入力がPF0、出力がQ0、桁上げ出力がC0となっている。半加算器HA1は、入力がC0及びB1、出力がQ1、桁上げ出力がC1となっている。全加算器FA2は、入力がB2及びPF0、桁上げ入力がC1、出力がQ2、桁上げ出力がC2となっている。全加算器FA3は、入力がB3及びPF0、桁上げ入力がC2、出力がQ3となっている。
入力が7以上になったらaの補数を13に加えている。aの補数は、PF0=1の場合、XORゲートG1でaの各ビット表示Ajを反転してBjとし、これに1を加えて生成されている。
p=13は、13=(1101)2であるので、これをPF0で表し、更に、1としてPF0を使い、これらとバイナリの和としてBjと加えている。
“4 bit LM 13”回路は、クロックに非同期で動作し、入力を入れると計算されたリー・メトリックを出力する。このリー・メトリックが3以上の場合、解探索は中止される。
<解探索多項式生成部>
ここでは、解探索多項式生成部223の回路構成について説明する。
先ず、解探索多項式Ψ(x)を求める演算回路について説明する。この演算回路を「解探索多項式生成回路」と呼ぶ。
ここでは、解探索多項式生成部223の回路構成について説明する。
先ず、解探索多項式Ψ(x)を求める演算回路について説明する。この演算回路を「解探索多項式生成回路」と呼ぶ。
解探索多項式Ψ(x)のxの各次数jの係数ψjを求める演算の処理に必要な処理式を数33に示す。
[数33]
[数33]
図53は、解探索多項式生成回路のブロック図である。
解探索多項式生成回路は、一次の係数ψ1を求める第1の部分回路U1と、二次の係数ψ2を求める第2の部分回路U2とを有する。
解探索多項式生成回路は、一次の係数ψ1を求める第1の部分回路U1と、二次の係数ψ2を求める第2の部分回路U2とを有する。
第1の部分回路U1は、S1を入力とするインバータIV1と、このインバータIV1の出力及び14(=p+1)を入力とする“4 bit AD(16) mod 13”回路ブロック<1>とを有する。
一次の係数はψ1=−S1なので、4ビットの表示でのS1の補数を求めれば良い。4ビットのバイナリの補数を求めることで、Zpの負数を表現することができる。そこで第1の部分回路U1は、S1をインバータIV1で反転し、“4 bit AD(16) mod 13”回路ブロック<1>によって14を加えている。これによって、“4 bit AD(16) mod 13”回路ブロック<1>の出力がψ1となる。
なお、この第1の部分回路U1は、入力Aに対する数33に示す計算式に基づいて構成されている。
[数33]
ここで、A*はAのhビットでの補数、/AはAのhビットでの反転された数、≡はmod pの和をそれぞれ表わしている。
[数33]
ここで、A*はAのhビットでの補数、/AはAのhビットでの反転された数、≡はmod pの和をそれぞれ表わしている。
第1の部分回路U1は、数33中p+1+/A(mod 2h)を具体化したものである。したがって、“4 bit AD(16) mod 13”回路ブロック<1>で4ビットの数の和としてmod 13を計算するために、/Aに相当するインバータIV1の出力と、p+1に相当する14が入力されている。
第2の部分回路U2は、S1及びψ1を入力とする“X Zp”回路ブロック<1>、“X Zp”回路ブロック<1>の出力及びS2を入力とする“4 bit mod 13”回路ブロック<2>、2の逆元である7(=2−1)及び“4 bit AD mod 13”回路ブロック<2>の出力であるψ1S1+S2を入力とする“X Zp”回路ブロック<2>、“X Zp”回路ブロック<2>の出力を入力とするインバータIV2、並びに、インバータIV2の出力及び14(=p+1)を入力とする“4 bit AD(16) mod 13”回路ブロック<3>からなる。この“4 bit AD mod(16) 13”回路ブロック<3>の出力がψ2となる。
この第2の部分回路U2は、二次の係数の式ψ2=−(ψ1S1+S2)/2を“X Zp”回路ブロック<1>、<2>と“4 bit AD mod 13”回路ブロック<2>、“4 bit AD mod(16) 13”回路ブロック<3>を用いて忠実に実現したものである。なお、2の逆元は7であるため、2での割り算は7の掛け算となる。
解探索多項式生成回路を構成する全ての回路ブロックはクロックを用いない非同期回路であり、単純な回路構成となっている。
<ユークリッド反復法処理部>
ここでは、ユークリッド反復法処理部224について説明する。
先ず、ユークリッドの方法を用いてΨ(x)及びx3からエラー探索の多項式を求める前提として、ユークリッドの方法について説明する。
ここでは、ユークリッド反復法処理部224について説明する。
先ず、ユークリッドの方法を用いてΨ(x)及びx3からエラー探索の多項式を求める前提として、ユークリッドの方法について説明する。
ここでは、ユークリッド反復法を用いて、合同式v(x)Ψ(x)≡λ(x)(mod x3)を満足する多項式λ(x)及びv(x)を、停止条件deg λ(x)−deg v(x)≡S0(mod 13)で求める方法について説明する。求まった多項式λ(x)及びv(x)のうち、deg λ(x)+deg v(x)<3を具備するものがエラー探索の多項式となる。
ユークリッド反復法は、関数f0、f1、…、fnを多項式の割り算を用いて順に求めて行く方法である。これらの量の間には数34に示す関係がある。
[数34]
[数34]
このとき、数34の示すように、nを増加させていくと必ず、あるnにおいてそれまでの次数よりも小さい次数のfnを得られることが、ユークリッド反復法で停止条件を具備する解を得られる可能性があることの条件となる。
特に、割り算の過程で得られる商多項式knからpnやqnを逐次導入することによって、これらの多項式が簡単な関係を満足することから、fnをf0、f1、pn−1、及びqn−1で表すことができる。即ち、fn=(−1)n(qn−1f0−pn−1f1)となり、fnの次数が減少するにつれて、pn−1及びqn−1の次数が増加する。このようにfnの次数が減少するにつれてpn−1の次数が増加するため、次数の差は必ず減少し、停止条件を満足し得るようになる。
なお、一般にはユークリッドの方法では、fn=knfn+1+fn+2は割り算の関係で、次数が順次下がることを利用するが、ここでは、knは1次又は0次の式を仮定するので必ずしも次数は減少しない。むしろ、次数が増加することもあるが、f0の次数を超えることはない。いずれにしても、上記多項式Ψ(x)の分解の関係が成立すれば、数34に示す関係は成立するため、最終的には次数を下げることができて反復の停止条件を具備し得る。
そこでf0=x3、f1=Ψ(x)とおいてx3での合同式を作ると、反復の停止条件はdeg fn−deg pn−1≡S0(mod 13)となる。この停止条件を満たすnについてdeg fn+deg pn−1<3ならλ(x)=fn、V(x)=pn−1とおくことができる。
一方、このような次数関係を具備できない場合、エラー訂正できる条件を満たさないエラーが発生したことを意味する。
次に、ユークリッド反復法処理部224の回路構成例を説明する。
始めに、fn=knfn+1+fn+2の計算のknを求める回路について説明する。以下において、この回路を“kn”回路ブロックと呼ぶ。
始めに、fn=knfn+1+fn+2の計算のknを求める回路について説明する。以下において、この回路を“kn”回路ブロックと呼ぶ。
“kn”回路ブロックは、数35に示す関係式に基づいて構成されている。
[数35]
[数35]
この“kn”回路ブロックでは、係数の関係b(n) 1=a(n) m/b(n+1) m−1、b(n) 0=(a(n) m−1−b(n) 1a(n+1) m−2)/a(n+1) m−1を計算する。
図54は、“kn”回路ブロックの回路記号を示す図であり、図55は、“kn”回路ブロックのブロック図である。
“kn”回路ブロックは、図54に示すように、a(n) m−1及びa(n) mを入力し、a(n+1) m−1、a(n+1) m−2、b(n) 1、及びb(n) 0を出力する。
“kn”回路ブロックは、3つの“X Zp”回路ブロック<1>、<2>、<3>、1つの“4 bit AD(16) mod 13”回路ブロック<1>、1つの“4 bit AD mod 13”回路ブロック<2>、“j−1 dec”回路ブロック、XNORゲートG1、及びORゲートG2を有する。
“X Zp”回路ブロック<1>は、a(n+1) m−2及びb(n) 1で積演算する。この結果b(n) 1a(n+1) m−2は、インバータIV1を介して“4 bit AD(16) mod 13”回路ブロック<1>に出力される。
“4 bit AD(16) mod 13”回路ブロック<1>は、インバータIV1の出力及び14(=p+1)を入力し、b(n) 1a(n+1) m−2の補数を得る。
“4 bit AD mod 13”回路ブロック<2>は、“4 bit AD(16) mod 13”回路ブロック<1>の出力及びa(n) m−1を入力し、その結果a(n) m−1−b(n) 1a(n+1) m−2を“X Zp”回路ブロック<2>に出力する。
“j−1 dec”回路ブロックは、a(n+1) m−1を入力し、その逆元(a(n+1) m−1)−1を“X Zp”回路ブロック<2>及び<3>に出力する。
“X Zp”回路ブロック<2>は、“4 bit AD mod 13”回路ブロック<2>の出力a(n) m−1−b(n) 1a(n+1) m−2及び“j−1 dec”回路ブロックの出力(a(n+1) m−1)−1で積演算し、その結果b´(n) 0を得る。
“X Zp”回路ブロック<3>は、a(n) m及び“j−1 dec”回路ブロックの出力(a(n+1) m−1)−1で積演算し、“kn”回路ブロックの出力であるb(n) 1を得る。
XNOR回路G1は、“X Zp”回路ブロック<2>の出力b´(n) 0及び“X Zp”回路ブロック<3>の出力b(n) 1を入力する。また、OR回路G2は、XNOR回路G1の出力及びb´(n) 0を入力する。この場合、OR回路G2の出力が“kn”回路ブロックの出力b(n) 0になる。
“kn”回路ブロックは、数35に示した係数間の関係を用いて既知の係数から未知の係数を求める。なお、knの多項式は1次であるとして、計算の過程では最高次の係数が0になる場合も係数を0として、計算の手順を逐次進めるようにする。このとき0の逆元は0としている。また、XNOR回路G1とOR回路G2のロジックを入れて、knがfn及びfn+1の次数との関係でゼロにならないようにknを1として扱うことで、計算は、繰り返しループに入らずに、進行するようになっている。このとき、計算の過程でfn+1の次数が上がることもあるが、次以降のサイクルで次数を1ずつ下げていくので、やがてはそれまでの次数よりも次数を減少させることができる。
続いて、fn=knfn+1+fn+2の計算のfn+2を求める回路について説明する。以下において、この回路を“fn”回路ブロックと呼ぶ。
“fn”回路ブロックは、数36に示す関係式に基づいて構成されている。
[数36]
[数36]
“fn”回路ブロックは、数36に示した係数間の関係を用いて既知の係数から未知の係数を求める。なお、既に得られているknの多項式の係数を利用する。この“fn”回路ブロックでは、a(n+2) m=a(n) m−(b(n) 0a(n+1) m+b(n) 1a(n+1) m−1)を計算する。
図56は、“fn”回路ブロックの回路記号を示す図であり、図57は、“fn”回路ブロックのブロック図である。
“fn”回路ブロックは、図56に示すように、a(n+1) m−1、a(n+1) m、a(n) m、b(n) 1、及びb(n) 0を入力しa(n+2) mを出力する。
“fn”回路ブロックは、2つの“X Zp”回路ブロック<1>、<2>、2つの“4 bit AD mod 13”回路ブロック<1>、<3>、及び1つの“4 bit AD(16) mod 13”回路ブロック<2>を有する。
“X Zp”回路ブロック<1>は、a(n+1) m−1及びb(n) 1で積演算し、この結果b(n) 1a(n+1) m−1を“4 bit AD mod 13”回路ブロック<1>に出力する。
“X Zp”回路ブロック<2>は、a(n+1) m及びb(n) 0で積演算し、この結果b(n) 0a(n+1) mを“4 bit AD mod 13”回路ブロック<1>に出力する。
“4 bit AD mod 13”回路ブロック<1>は、“X Zp”回路ブロック<1>の出力b(n) 1a(n+1) m−1及び“X Zp”回路ブロック<2>の出力b(n) 0a(n+1) mを入力する。この“4 bit AD mod 13”回路ブロック<1>の出力は、インバータIV1を介して“4 bit AD(16) mod 13”回路ブロック<2>に入力される。
“4 bit AD(16) mod 13”回路ブロック<2>は、インバータIV1の出力及び‘1’を入力し、(b(n) 0a(n+1) m+b(n) 1a(n+1) m−1)の補数を得る。
“4 bit AD mod 13”回路ブロック<3>は、a(n) m及び“4 bit AD(16) mod 13”回路ブロック<2>の出力を入力し、この“fn”回路ブロックの出力であるa(n+2) mを得る。
続いて、pn=kn−1pn−1+pn−2の計算のpn−2を求める回路について説明する。以下において、この回路を“pn”回路ブロックと呼ぶ。
“pn”回路ブロックは、数37に示す関係式に基づいて構成されている。
[数37]
[数37]
“pn”回路ブロックは、数37に示した係数間の関係を用いて既知の係数から未知の係数を求める。なお、既に得られているknの多項式の係数を利用する。この“pn”回路ブロックでは、係数の関係a(n+1) m=(b(n) 0a(n) m+b(n) 1a(n) m−1)+a(n−1) mを計算する。
図58は、“pn”回路ブロックの回路記号を示す図であり、図59は、“pn”回路ブロックのブロック図である。
“pn”回路ブロックは、図58に示すように、a(n) m−1、a(n) m、及びa(n−1) mを入力し、a(n+1) mを出力する。
“pn”回路ブロックは、図59に示すように、2つの“X Zp”回路ブロック<1>、<2>、2つの“4 bit AD mod 13”回路ブロック<1>、及び<2>を有する。
“X Zp”回路ブロック<1>は、a(n) m−1及びb(n) 1で積演算し、この結果b(n) 1a(n) m−1を“4 bit AD mod 13”回路ブロック<1>に出力する。
“X Zp”回路ブロック<2>は、a(n) m及びb(n) 0で積演算し、この結果b(n) 0a(n) mを“4 bit AD mod 13”回路ブロック<1>に出力する。
“4 bit AD mod 13”回路ブロック<1>は、“X Zp”回路ブロック<1>の出力b(n) 1a(n) m−1及び“X Zp”回路ブロック<2>の出力b(n) 0a(n) mを入力し、b(n) 0a(n) m+b(n) 1a(n) m−1を“4 bit AD mod 13”回路ブロック<1>に出力する。
“4 bit AD mod 13”回路ブロック<2>は、a(n−1) m及び“4 bit AD mod 13”回路ブロック<1>の出力b(n) 0a(n) m+b(n) 1a(n) m−1を入力し、“pn”回路ブロックの出力であるa(n+1) mを得る。
続いて、fn=knfn+1+fn+2の計算回路について説明する。以下において、この回路を“fn=knfn+1+fn+2”回路ブロックと呼ぶ。
図60は、“fn=knfn+1+fn+2”回路ブロックの回路記号を示す図であり、図61は、“fn=knfn+1+fn+2”回路ブロックのブロック図である。
“fn=knfn+1+fn+2”回路ブロックは、図60に示すように、fnの係数a0〜a3、及びfn+1の係数b0〜b2を入力し、fn+2の係数c0〜c3、及びknの係数β0〜β1を出力する。
計算は、f0=x3、f1=Ψ(x)とおいて開始されるため、fnの最大次数は3となり、fn+2の最大次数もknが1の場合もあるため3となる。このため、“fn=knfn+1+fn+2”回路ブロックは、図61に示すように、4個の“kn”回路ブロック<1>〜<4>、及び4個の“fn”回路ブロック<1>〜<4>を有する。
“kn”回路ブロック<1>は、a(n+1) m−2、a(n) m−1、a(n+1) m−1、及びa(n) mとして、それぞれ‘0’、a0、b0、及びa1を対応付け、b(n) 0、及びb(n) 1として、それぞれβ(0) 0、及びβ(0) 1を対応付ける。
“kn”回路ブロック<2>は、a(n+1) m−2、a(n) m−1、a(n+1) m−1、及びa(n) mとして、それぞれb0、a1、b1、及びa2を対応付け、b(n) 0、及びb(n) 1として、それぞれβ(1) 0、及びβ(1) 1を対応付ける。
“kn”回路ブロック<3>は、a(n+1) m−2、a(n) m−1、a(n+1) m−1、及びa(n) mとして、それぞれb1、a2、b2、及びa3を対応付け、b(n) 0、及びb(n) 1として、それぞれβ(2) 0、及びβ(2) 1を対応付ける。
“kn”回路ブロック<4>は、a(n+1) m−2、a(n) m−1、a(n+1) m−1、及びa(n) mとして、それぞれb2、a3、b3、及び‘0’を対応付け、b(n) 0、及びb(n) 1として、それぞれβ(3) 0、及びβ(3) 1を対応付ける。
“kn”回路ブロック<1>〜<4>の出力β(m)0及びβ(m)1(m=0〜3)は、それぞれdeg(b1,b2,b3)=mで制御される制御スイッチSWを介して“fn=knfn+1+fn+2”回路ブロックからβ0及びβ1として出力される。また、このβ0及びβ1は、“fn”回路ブロック<1>〜<4>の入力としても利用される。ここで、deg()は、fn+1の次数判別回路出力を表わす。
“fn”回路ブロック<1>は、a(n+1) m−1、a(n+1) m、a(n) m、b(n) 0、及びb(n) 1として、それぞれ‘0’、b0、a0、β0、及びβ1を入力し、a(n+2) mとしてc0を出力する。
“fn”回路ブロック<2>は、a(n+1) m−1、a(n+1) m、a(n) m、b(n) 0、及びb(n) 1として、それぞれb0、b1、a1、β0、及びβ1を入力し、a(n+2) mとしてc1を出力する。
“fn”回路ブロック<3>は、a(n+1) m−1、a(n+1) m、a(n) m、b(n) 0、及びb(n) 1として、それぞれb1、b2、a2、β0、及びβ1を入力し、a(n+2) mとしてc2を出力する。
“fn”回路ブロック<4>は、a(n+1) m−1、a(n+1) m、a(n) m、b(n) 0、及びb(n) 1として、それぞれb2、b3、a3、β0、及びβ1を入力し、a(n+2) mとしてc3を出力する。
“fn”回路ブロック<1>〜<4>の出力が、“fn=knfn+1+fn+2”回路ブロックの出力であるc0〜c3となる。
なお、“kn”回路ブロック<1>〜<4>及び“fn”回路ブロック<1>〜<4>の入力のうち、対応する値がない場合について‘0’を入力している。
また、“kn”回路ブロック<1>〜<4>の計算結果は、入力bnの係数を表わす多項式fn+1の次数にしたがって切り替えられ、βとして“fn=knfn+1+fn+2”回路ブロック内部で利用され、且つ、出力される。すなわち、fn+1の最高次数に関係する“kn”回路ブロックの出力するβが利用されている。
続いて、pn+1=knpn+pn−1の計算回路について説明する。以下において、この回路を“pn+1=knpn+pn−1”回路ブロックと呼ぶ。
図62は、“pn+1=knpn+pn−1”回路ブロックの回路記号を示す図であり、図63は、“pn+1=knpn+pn−1”回路ブロックのブロック図である。
“pn+1=knpn+pn−1”回路ブロックは、図62に示すように、knの係数β0、β1、pn−1の係数a0〜a2、及びpnの係数b0〜b2を入力し、pn+1の係数c0〜c2を出力する。
計算は、p−1=0、p0=1とおいて開始し、mod x3でpn+1を利用するため、pn+1の最大次数は2となる。このため、“pn+1=knpn+pn−1”回路ブロックは、3個の“pn”回路ブロック<1>〜<3>を有する。
“pn”回路ブロック<1>は、a(n) m−1、a(n) m、a(n−1) m、b(n) 0、及びb(n) 1として、それぞれ‘0’、b0、a0、β0、及びβ1を入力し、a(n+1) mとしてc0を出力する。
“pn”回路ブロック<2>は、a(n) m−1、a(n) m、a(n−1) m、b(n) 0、及びb(n) 1として、それぞれb0、b1、a1、β0、及びβ1を入力し、a(n+1) mとしてc1を出力する。
“pn”回路ブロック<3>は、a(n) m−1、a(n) m、a(n−1) m、b(n) 0、及びb(n) 1として、それぞれb1、b2、a2、β0、及びβ1を入力し、a(n+1) mとしてc2を出力する。
“pn”回路ブロック<1>〜<3>の出力が、“pn+1=knpn+pn−1”回路ブロックの出力であるc0〜c2となる。
続いて、0からnまでの反復計算によってfn及びpn−1を求める計算回路について説明する。
図64は、fnを求める計算回路であり、図65は、pn−1を求める計算回路である。
fnを求める計算回路は、図64に示すように、“fn=knfn+1+fn+2”回路ブロックの他、3つの“16”レジスタ部<1>〜<3>を有する。“16”レジスタ部<1>〜<3>は、それぞれ4ビットのラッチを4組有する。“16”レジスタ部<1>〜<3>には、対応する入力がない場合‘0’が設定される。fnの計算は、“fn=knfn+1+fn+2”回路ブロックとこの周辺に設けられた3つの“16”レジスタ部<1>〜<3>によって、データを巡回転送して進められる。
pn+1を求める計算回路は、図65に示すように、“pn+1=knpn+pn−1”回路ブロックの他、“12”レジスタ部<1>〜<3>を有する。“12”レジスタ部<1>〜<3>は、それぞれ4ビットのラッチを3組有する。“12”レジスタ部<1>〜<3>には、対応する入力がない場合‘0’が設定される。pn+1の計算は、“pn+1=knpn+fn−1”回路ブロックとこの周辺に設けられた3つの“12”レジスタ部<1>〜<3>によって、データを巡回転送して進められる。
fn及びpn−1の計算は、クロックclのサイクル毎に進行し、このクロックclのサイクルを0から数えた数がユークリッド反復法のnに対応する。最終的に、“16”レジスタ部<1>にfnが保持され、“12”レジスタ部<1>にpn−1が保持される。
最初のクロックサイクルcl0において、“16”レジスタ部<1>〜<3>、及び“12”レジスタ部<1>〜<3>レジスタには、それぞれ図64、及び図65に示すような初期値が設定される。
即ち、fnを求める回路では、f0=x3の係数が“16”レジスタ部<1>に、f1=Ψ(x)の係数が“16”レジスタ部<3>にそれぞれ設定さる。また、pn−1を求める回路では、p−1=‘0’が“12”レジスタ部<1>に、p0=‘1’が“12”レジスタ部<3>に設定される。以後、クロックサイクルを進める度に、clnサイクルの始めにfnやpn−1が、それぞれ対応するレジスタ部に保持される。
“16”レジスタ部<1>、“12”レジスタ部<1>は、信号/ISTOPによって入力が遮断されるため、その時点で“16”レジスタ部<1>、“12”レジスタ部<1>のデータは確定する。ここで、信号/ISTOPは、後述するユークリッド反復法の停止条件を満たす場合に活性化される信号である。
以上によって、“16”レジスタ部<1>、“12”レジスタ部<1>に、それぞれ所望の結果の多項式の係数を得ることができる。
これら係数を、第1のハッセ微分多項式生成部225、第2のハッセ微分多項式生成部226に入力することで、ハッセ微分多項式の根と多重度を求めることができる。
図64及び図65に示す信号/ISTOP、即ちユークリッド反復法の停止条件を求めるためには、計算の結果の多項式の次数を判別する必要がある。そこで、得られたfnやpn−1の係数aj(j=0〜3)から次数をバイナリ表示する回路について説明する。以下において、この回路を“DEG”回路ブロックと呼ぶ。
図66は、“DEG”回路ブロックの回路記号を示す図であり、図67は、“DEG”回路ブロックのブロック図である。
“DEG”回路ブロックは、図66に示すように、a1〜a3を入力し、次数のバイナリ表示b0、b1を出力する。
“DEG”回路ブロックは、図67に示すように、4ビットレジスタ<1>〜<3>、ORゲートG0<1>〜<3>、G1<1>〜<3>、及び“A to deg DEC.”回路ブロックを有する。
4ビットレジスタ<1>〜<3>には、それぞれ3次の多項式の係数a1〜a3を示す3ビットのバイナリデータが保持されている。これら係数a1〜a3を示す4ビットのバイナリデータは、それぞれORゲートG0<1>〜<3>に入力される。
ORゲートG0<n>(n=1〜3)には、anを示す3ビットのバイナリデータが入力される。ORゲートG0<1>は、an=0の場合‘0’を出力し、an≠0の場合‘1’を出力する。つまり、ORゲートG0<n>は、anが0から0以外かを判別している。
ORゲートG1<m>(m=1、2)には、ORゲートG0<m>〜<3>が入力される。そして、ORゲートG1<1>、<2>の出力がそれぞれA1、A2となる。また、ORゲートG0<3>の出力が、そのままA3となる。これらA1〜A3は、“A to deg DEC.”回路ブロックに入力される。
“A to deg DEC.”回路ブロックは、図67中T1で示すA1〜A3と次数のバイナリ表示との対応関係を実現するデコーダ回路である。Aj(j=1〜3)の‘1’の総和が次数のバイナリ表示に対応している。
“A to deg DEC.”は、図67中T1に示す対応表に基づいて、A1〜A3から“DEC”回路ブロックの出力であるb0、b1を得る。なお、次数3は、2ビットで表示することができる。
最後に、ユークリッド反復法で得られたfn及びpn−1から、リー・メトリック・コードのキー条件を満たして反復を停止し、且つ、エラー訂正可能条件を満たしているかどうかの判定を行なう回路について説明する。
図68は、ユークリッド反復法の停止条件の判定、つまり信号/ISTOPを生成する回路のブロック図である。
この回路は、2つの“DEG”回路ブロック<1>、<2>、1つの“4 bit AD(16) mod 13”回路ブロック<1>、1つの“4 bit AD mod 13”回路ブロック<2>、及び複数の論理ゲートからなる部分回路U1を有する。
“DEG”回路ブロック<1>は、a1〜a3としてfnを入力し、b0、b1としてfnのバイナリ表示であるdeg fnを出力する。このdeg fnは、“4 bit AD mod 13”回路ブロック<2>に入力される。
“DEG”回路ブロック<2>は、a1〜a3としてpn−1を入力し、b0、b1としてpn−1のバイナリ表示であるdeg pn−1を出力する。このdeg pn−1は、インバータIV1を介して“4 bit AD(16) mod 13”回路ブロック<1>に入力される。
“4 bit AD(16) mod 13”回路ブロック<1>は、インバータIV1を介して入力されるdeg pn−1及び‘1’からdeg pn−1の補数を得る。このdeg pn−1の補数は、“4 bit AD mod 13”回路ブロック<2>に出力される。
ユークリッド反復法の停止条件は、deg fn−deg pn−1≡S0(mod 13)であるため、“4 bit AD mod 13”回路ブロック<2>にdeg fn及びdeg pn−1の補数を入力し、deg fn−deg pn−1をZpの数として得る。この結果は、バイナリ表示のビット毎にS0と比較するために、部分回路U1に出力される。
部分回路U1は、deg fn−deg pn−1とS0とをビット毎に比較するためビット毎の排他的論理和を取る。全てのビット(deg fn−deg pn−1)j(j=0〜3)と(S0)jが一致する場合、部分回路U1は、信号/ISTOPとして‘0’を出力する。つまり、信号/ISTOPは、(deg fn−deg pn−1)0(+)(S0)0∨・・・∨(deg fn−deg pn−1)m(+)(S0)m∨・・・∨(deg fn−deg pn−1)h−1(+)(S0)h−1となる。以上によって、部分回路U1は、deg fn−deg pn−1とS0が一致するか否かを実現している。
図69は、ユークリッド反復法の成功条件を判定する回路のブロック図である。
この回路は、NANDゲートG1、“4 bit AD mod 13”回路ブロック、後述する“4 bit 3≦”回路ブロック、及びNORゲートG2を有する。
この回路は、NANDゲートG1、“4 bit AD mod 13”回路ブロック、後述する“4 bit 3≦”回路ブロック、及びNORゲートG2を有する。
NANDゲートG1は、ユークリッド反復法が停止条件を満たさず停止しない場合に備えて設けられている。fnの次数が1、fn+1の次数が0、信号/ISTOPが1のとき、つまり、(deg fn=1)∧(deg fn+1=0)∧(/ISTOP=1)を条件に、NANDゲートG1は、信号Ifailとして‘1’を出力する。
ユークリッド反復法の停止が行なわれた時点でエラー訂正が可能か否かは、deg fn+deg pn−1<3に基づいて判断する。
そこで、“4 bit AD mod 13”回路ブロックにdeg fn及びdeg pn−1を入力し、これらの和deg fn+deg pn−1を求める。この和deg fn+deg pn−1は、“4 bit 3≦”回路ブロックに出力される。
“4 bit 3≦”回路ブロックは、入力が3以上か否かを判定する回路である。“4 bit 3≦”回路ブロックは、“4 bit AD mod 13”回路ブロックから入力されたdeg fn+deg pn−1が3以上の場合、信号gtn3として‘1’を出力する。
なお、この“4 bti 3≦”回路ブロックの詳細は、省略するが、図43に示す“4 bit AD mod 13”回路ブロックのPF0生成部U1と同様に構成することができる。
ORゲートG2は、NANDゲートG1の出力Ifail又は“4 bit 3≦”回路ブロックの出力gtn3を入力し、Ifail∨gtn3の場合、ユークリッド反復法によるエラー訂正ができないことを意味するNG信号を出力する。
以上、図54〜図69に示す回路ブロックによってユークリッド反復法を実現することができる。
なお、これら回路ブロックでは、Zpの要素の逆元を利用している。
なお、これら回路ブロックでは、Zpの要素の逆元を利用している。
図70は、p=13の場合の、Zpの各要素と、これら各要素との対応を示す表である。この表に示されている数字の4ビットのバイナリ表示を用いることでデコーダを作ることができる。なお0の逆元は、回路動作の便宜上0として設定している。
次に、具体的なデコーダの構成例について説明する。
特に、Zpの要素の逆元を生成するデコーダは必要性が高いため、ここでは、要素jの逆元j−1を生成するデコーダについて説明する。
以下では、このデコーダを“j−1 dec”回路ブロックと呼ぶ。
特に、Zpの要素の逆元を生成するデコーダは必要性が高いため、ここでは、要素jの逆元j−1を生成するデコーダについて説明する。
以下では、このデコーダを“j−1 dec”回路ブロックと呼ぶ。
要素jから逆元j−1を求めるには、j×j−1≡1(mod 13)の関係を求めておき、j及びj−1を4ビットのバイナリ表示を数38に示すように構成し、これの変換デコーダを作れば良い。
[数38]
[数38]
図71は、“j−1 dec”回路ブロックのブロック図である。
“j−1 dec”回路ブロックは、4ビットのバイナリデータIを4ビットの他のバイナリデータOにデコードする一般的な回路で構成することができる。この場合、数38に示すように、I=j、O=j−1とすれば良い。
“j−1 dec”回路ブロックは、4ビットのバイナリデータIを4ビットの他のバイナリデータOにデコードする一般的な回路で構成することができる。この場合、数38に示すように、I=j、O=j−1とすれば良い。
“j−1 dec”回路ブロックは、2つのNANDゲートG1、G2、及び2つのNORゲートG3、G4からなる。
始めに、NANDゲートG1及びG2において、入力の4ビットI0〜I3がプリデコードされ、信号/A0〜/A3、/B0〜/B3が生成される。続いて、NORゲートG3において、/Am、/Bm(m=0〜3)の‘L’の組み合わせに基づいて、入力のZpを‘H’で表現したOI mが生成される。最後に、NORゲートG4において、OI mから逆元のmビットが1となるものを集めて各mについて論理和が取られる。以上によって、入力の逆元を求めることができる。なお、入力j=0の場合、j−1=0としている。
<ハッセ微分多項式生成部>
ここでは、ハッセ微分多項式生成部225及び226について説明する。
ユークリッド反復法で得られたエラー探索多項式の次数は最大でも2次となる。そのため、エラー探索多項式の根及び根の多重度を求めるハッセ微分多項式の係数は簡単な演算で求めることができる。
ここでは、ハッセ微分多項式生成部225及び226について説明する。
ユークリッド反復法で得られたエラー探索多項式の次数は最大でも2次となる。そのため、エラー探索多項式の根及び根の多重度を求めるハッセ微分多項式の係数は簡単な演算で求めることができる。
φ(x)のハッセ微分多項式の表現と係数の関係は数39のようになる。
[数39]
[数39]
この数39に示す関係式をユークリッド反復法で得られたエラー探索多項式λ(x)、v(x)にφ(x)=λ(x)、φ(x)=v(x)として適用すると、それぞれ数40及び数41のようになる。
[数40]
[数41]
[数40]
[数41]
数40及び数41からも分かるように、ハッセ微分多項式の係数は、ユークリッド反復法で得られた係数の並び替えと2との掛け算で得ることができる。これらの係数はレジスタに記憶しておく。
次に、解探索多項式φ(x)の根とその多重度を計算する演算回路を説明する。ここで、φ(x)は、エラー解探索多項式λ(x)又はv(x)となる。以下、この演算回路を「解探索多項式根/多重度演算回路」と呼ぶ。
解探索多項式根/多重度演算回路は、ハッセ微分多項式の0階微分をφ(x)とみなし、Zpの各要素に対してハッセ微分多項式がゼロでなければ次の要素に計算を移し、ハッセ微分多項式がゼロである間は微分の階数を上げる。各Zpの要素に対して、ハッセ微分多項式がゼロでない最初のハッセ微分の階数をレジスタに残していくと、階数がゼロではない要素が根であり、その残された階数がその根の多重度になる。つまり、レジスタから内容が‘0’ではないものを選び、その保持された値がその根の多重度となる。
具体的に、解探索多項式φ(x)の根をαとし、φ(x)のi階のハッセ微分多項式を[φ(x)][i]とすると、αの多重度をnとした場合の関係式は数42のようになる。
[数42]
[数42]
解探索多項式根/多重度演算回路は、この数42を具備するnを、Zpの各要素αに対して、φ(x)の根であるか否かに関わらず求める。n=0の場合、αが根でないことを意味する。
図72中(A)は、解探索多項式根/多重度演算回路のブロック図であり、図72中(B)は、解探索多項式根/多重度演算回路を制御するクロックck、cl、及びclkのタイミングチャートである。
解探索多項式根/多重度演算回路は、クロックckでZpの要素1〜12についてスキャンし、クロックclでハッセ微分の階数を上げ、クロックclkでその階数のハッセ微分多項式の値を求める。クロックckは、計算しているハッセ微分多項式の値がゼロでなくなった場合に発生させ、次のZpの要素でのサイクルに入る。
解探索多項式根/多重度演算回路は、図72中(A)に示すように、“Conter(1 to 12)”回路ブロック、“X Zp”回路ブロック<1>、“Rgstr”レジスタ<1>、“Ro i(0〜2)/j(0〜2)”レジスタ部、“X Zp”回路ブロック<2>、“Rgstr”レジスタ<2>、“4 bit AD mod 13”回路ブロック、“Rgstr”レジスタ<3>、“clock cl gen.”回路ブロック、“Counter(0 to 2)”回路ブロック、“Li(1〜12)”レジスタ部を有する。
“Counter(1 to 12)”回路ブロックは、クロックckをα回受けてZpの要素αを発生して、1から12までカウントアップする。“Counter(1 to 12)”回路ブロックは、12までカウントした後、必ず初期値1に戻る巡回カウントである。
“Rgstr”レジスタは、初期値が1であり、クロックclkj(j=0〜2)を受けて、“X Zp”回路ブロック<1>の出力で保持する値を更新する。
“X Zp”回路ブロック<1>は、“Counter(1 to 12)”回路ブロックが出力αと、“Rgstr”回路ブロック<1>の保持する値とを乗算し、αjを出力する。
“Ro i(0〜2)/j(0〜2)”レジスタ部は、クロックcli及びclkjを受けてハッセ微分多項式の係数ψ[i] jを出力するレジスタである。
“X Zp”回路ブロック<2>は、“X Zp”回路ブロック<1>からの出力αjと、“Ro i(0〜2)/j(0〜2)”レジスタ部からの出力ψ[i] jを積演算し、αjψ[i] jを出力する。
以上、“Counter(1 to 12)”回路ブロック、“Rgstr”レジスタ<1>、“X Zp”回路ブロック<1>、“Ro i(0〜2)/j(0〜2)”レジスタ部、及び“X Zp”回路ブロック<2>からなる回路に対し、クロックclkを3回与えてやることでハッセ微分多項式の値を得ることができる。なお、クロックck、cl、及びclkの制御を簡単にするため、この計算では存在しない0の値の項の和も計算する。したがって、本来は必要なクロックclkの総数は半分程度となる。
微分多項式の値[φ(α)][i]は、ゼロの場合‘0’、その他の場合‘1’として“Rgstr”レジスタ<1>に取り込まれる。
“Rgstr”レジスタ<1>で保持された値は、クロックclk0のタイミングで、クロックckα(α=1〜12)として出力される。このクロックckαは、クロックclk2でリセットされるまで保持される。
“Rgstr”レジスタ<1>は、初期値が‘1’であるため、クロックck1は最初のclk0で立ち上がる。クロックck2以降は、計算結果にしたがってclkのいずれかのサイクルのclk0で立ち上がる。
“clock cl gen.”回路ブロックは、クロックclk0に同期してクロックcliを発生させて、クロックckαが立ち上がる毎にクロックcl0にリセットする。
”Counter(0 to 2)”回路ブロックは、クロックckαで0にリセットされ、クロックclが入るたびにカウントアップし、クロックclの回数−1を出力する。この出力は、“Li(1〜12)レジスタ部に格納される。
“Li(1〜12)”レジスタ部は、入力をクロックckαによって切り換えていくので、α番目のレジスタにはその多重度が格納されることになる。
“Counter(1 to 12)”回路ブロックによるカウントアップが一巡すると、“Li(1〜12)”レジスタには、解探索多項式φ(x)の各αに対する多重度が記憶され、これらが有限であれば根αとその多重度が分かる。
<デコード部>
ここでは、デコード部228について説明する。
エラー探索を終了し、エラーコードEによって訂正されたリー・メトリック・コードCが得られたら、これをZpのデータコードAに戻す必要がある。この演算はGを生成行列として、C=AGの逆演算を行うことに相当するが、行列の逆を得るのは規模の大きな演算となる。そのため、Aの要素を逐次的にCの要素から求めて行く。計算の過程を数43に示す。
[数43]
ここでは、デコード部228について説明する。
エラー探索を終了し、エラーコードEによって訂正されたリー・メトリック・コードCが得られたら、これをZpのデータコードAに戻す必要がある。この演算はGを生成行列として、C=AGの逆演算を行うことに相当するが、行列の逆を得るのは規模の大きな演算となる。そのため、Aの要素を逐次的にCの要素から求めて行く。計算の過程を数43に示す。
[数43]
数43に示したように、cj=Σ(j)i+1aiの関係を順次変形して、a0からa1、続いてa1からa2、・・・と逐次的にamを求めて行くことが計算の原理となる。
両辺にjの累乗の逆元を掛けてjのZpの全ての元についての項として足し合わせる。このときZpの全ての元の和はゼロとなることを利用して変形している。
数44は、Cの成分とAの成分の関係式である。
[数44]
[数44]
次に、数44に示した関係式を使って具体的な演算回路として実現したものを説明する。
なお、am−1を得てから、amを求めるときには、c(m−1) jを求めながらamでのjについての和を順次計算して行くことによってクロックの並列利用を行う。
次に、数44に示すc(m−1) j=c(m−2) j−(j)mam−1に基づき、リー・メトリック・コードCの成分の変換を都度行う回路について説明する。以下において、この回路を“c(m−1) j”回路ブロックと呼ぶ。
図73は、“c(m−1) j”回路ブロックの回路記号を示す図であり、図74は、“c(m−1) j”回路ブロックのブロック図である。
“c(m−1) j”回路ブロックは、クロックclj、/cljに同期して動作する回路であり、(j)m、am−1、及びコード成分c1〜c16を入力し、c(m−1) jを出力する。
“c(m−1) j”回路ブロックは、“X Zp”回路ブロック、1つの“4 bit AD(16) mod 13”回路ブロック<1>、1つの”4 bit AD mod 13”回路ブロック<2>、及び“R(1〜12)”レジスタ部を有する。
“X Zp”回路ブロックでは、(j)mとam−1との積を生成しインバータIV1を介して“4 bit AD(16) mod 13”回路ブロック<1>に出力する。
“4 bit AD(16) mod 13”回路ブロック<1>では、インバータIV1を介して出力された出力(j)mam−1の補数を求め、−jmam−1を生成し、“4 bit AD mod 13”回路ブロック<2>に出力する。
“4 bit AD mod 13”回路ブロック<2>では、“4 bit AD(16) mod 13”回路ブロック<1>から出力された−jmam−1と、クロックclに同期して“R(1〜12)”レジスタ部から出力されるcj(=c(m−2) j)との和を生成する。この和が“c(m−1) j”回路ブロックの出力であるc(m−1) jとなる。この“4 bit AD mod 13”回路ブロック<2>から出力されたc(m−1) jは、クロックclの立ち下がりに同期して“R(1〜12)”レジスタ部の第j番目のレジスタに記録される。
続いて、数44に示すam=12−1Σ(jm+1)−1c(m−1) j(j=1〜12)に基づき、amを生成する回路について説明する。以下において、この回路を“am”回路ブロックと呼ぶ。
図75は、“am”回路ブロックの回路記号を示す図であり、図76は、“am”回路ブロックのブロック図である。
“am”回路ブロックは、クロックcljに同期して動作する回路であり、(j)m+1、及びc(m−1) jを入力し、amを出力する。
“am”回路ブロックは、“j−1 dec”回路ブロック、2つの“X Zp”回路ブロック<1>、<2>、“4 bit AD mod 13”回路ブロック、及び“Rgstr”レジスタを有する。
“j−1 dec”回路ブロックでは、(j)m+1を、その逆元(j)−(m+1)に変換し、“X Zp”回路ブロック<1>に出力する。
“X Zp”回路ブロック<1>は、“j−1 dec”回路ブロックから入力された(j)−(m+1)と、“c(m−1) j”回路ブロックから出力されるcj(=c(m−1) j)との積演算をし、“4 bit AD mod 13”回路ブロックに出力する。
“4 bit AD mod 13”回路ブロックから出力された積は、初期値が‘0’の“Rgstr”レジスタと“4 bit AD mod 13”回路ブロックからなるループによって加算されて行く。この結果は、“4 bit AD mod 13”回路ブロックから“X Zp”回路ブロック<2>に出力される。
“X Zp”回路ブロック<2>では、“4 bit AD mod 13”回路ブロックから出力された和と12−1=12との積を演算し、“am”回路ブロックの出力であるamを得る。
次に、前述の“c(m−1) j”回路ブロック及び“am”回路ブロックを用いてデータコードAを得る計算回路について説明する。以下では、この計算回路を「逆変換回路」と呼ぶ。
図77中(A)は、逆変換回路のブロック図であり、図77中(B)は、この逆変換回路を制御するクロックck及びclのタイミングチャートである。
図77中(B)に示すように、クロックck及びclは、所定のクロックckの立ち上がりから次のクロックckの立ち上がりまでの間に、クロックclが12回立ち上がる関係となっている。
逆変換回路は、逆変換のために必要なリー・メトリック・コードCの成分の変換を都度行う第1の部分回路U1と、データコードAの要素を一つ一つ求める第2の部分回路U2を有する。
第1の部分回路U1は、“(j)i (j=1 to 12)”回路ブロック、“Rgstr”レジスタ、及び“c(m−1) j”回路ブロックを有する。
第2の部分回路U2は、“(j)i (j=1 to 12)”回路ブロック、“am”回路ブロック、及び“Li(0〜8)”レジスタ部を有する。
このうち“(j)i (j=1 to 12)”回路ブロックは、第1の回路部分U1と共有されている。“(j)i (j=1 to 12)”回路ブロックは、“am”回路ブロックと“c(m−1) j”回路ブロックで用いるZpの要素jのm+1乗とm乗を発生する回路である。この回路ブロックは、クロックckのサイクル数m+1及びこのサイクル回数よりも1少ない数mを指数とし、クロックclのサイクル数をjとして、(j)m+1及び(j)mを出力する。
“(j)i (j=1 to 12)”回路ブロックは、ckの1サイクル目では、“am”回路ブロックに対してZpの要素そのものを出力し、“c(m−1) j”回路ブロックに対しては‘1’を出力する。この“c(m−1) j”回路ブロックに出力される‘1’は本来計算で利用されないものであるため、この‘1’が演算結果に影響を及ぼさないようにする工夫を施す必要がある。そこで、この‘1’の影響を無くすために、第1の部分回路U1の積演算では、クロックckの最初のサイクルの際、もう一方の入力を‘0’とし、積演算の結果がゼロになるようにしている。
第1の部分回路U1の“Rgstr”レジスタにはamが設定される。この設定されたamは、クロックck1以降のクロックckのタイミングで“Rgstr”レジスタから出力される。即ち、“Rgstr”レジスタの出力am−1は、クロックckmのタイミングで出力される。
クロックckの最初のクロックサイクルck0では、“Rgstr”レジスタの出力ノードの初期値は‘0’に設定されており、上記のように計算結果に影響を与えないようになっている。
“c(m−1) j”回路ブロックは、クロックckmに同期して、“Rgstr”レジスタ及び“(j)i (j=1 to 12)”回路ブロックからそれぞれ出力されるam−1及び(j)mが入力される。“c(m−1) j”回路ブロックは、これらの入力am−1及び(j)mから第1の部分回路U1の出力であるc(m−1) jを得る。
なお、“c(m−1) j”回路ブロックの初期値は、復元されたコードデータCとなっており、クロックck0での“Rgstr”レジスタの設定からc(−1) j=init Cである。
第2の回路部分U2の“am”回路ブロックは、クロックclの12サイクル毎に、数44に示した計算式に従ってamを得る。“am”回路ブロックが生成したamは、次の12回のクロックclのサイクルの開始タイミングとなるクロックckm+1によって“Li(0〜8)”レジスタ部の第m番目のレジスタに格納される。
全てのクロックサイクルが終了すると“Li(0〜8)”レジスタ部には、コードデータA設定され格納されている。
[まとめ]
従来、NANDフラッシュメモリに対して16値のMLCを用いる場合はもとより8値のMLCを用いる場合であっても、実用化に際しては、安定した精度の良い工程を用いる必須であった。
従来、NANDフラッシュメモリに対して16値のMLCを用いる場合はもとより8値のMLCを用いる場合であっても、実用化に際しては、安定した精度の良い工程を用いる必須であった。
その点、本実施形態に係るメモリコントローラ及びメモリシステムによれば、MLCのレベル設定が甘くてもデータの信頼性を確保することができる。また、これに伴いメモリセルの更なる多値化を進めることもできる。
[その他]
以上、発明の実施形態について説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加等が可能である。
以上、発明の実施形態について説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加等が可能である。
以上説明した実施形態は、主に、h=4、p=13の場合のメモリコントローラを想定して説明したが、図3や図5にも示す通り、その他のhやpを用いた場合であっても同様の効果を得ることができる。
また、メモリデバイスとしてMLC NANDフラッシュメモリを用いる場合について説明したが、メモリデバイスは、これに限らず、多値記憶が可能なメモリセル(例えば、ReRAM等)を用いており、ページ単位でアクセスする方式のものであれば本発明を同様に適用することができる。
100・・・メモリデバイス、200・・・メモリシステム、210´・・・13進数変換部、221、エンコード部、222・・・シンドローム生成部、223・・・解探索多項式生成部、224・・・ユークリッド反復法処理部、225、226・・・ハッセ微分多項式生成部、227・・・コード復元部、227・・・デコード部、260´・・・24、進数変換部、240・・・ページ・バッファ。
Claims (7)
- 複数の物理量レベルによってdビット(dは、2以上の整数)のデータを記憶する複数のメモリセルを有し、所定数の前記メモリセルの特定のビットからなるページ単位でデータの読み書きをするメモリデバイスと、
前記メモリデバイスを制御するメモリコントローラと
を備え、
前記メモリコントローラは、
前記メモリデバイスのページに読み書きするページ・データを保持し、前記メモリデバイスとの間で前記ページ・データを送受信するページ・バッファと、
前記ページ・データに基づいて生成されたp(pは、2<p<2dを満たす素数)の有限体Zp上の処理データに対する処理によって前記ページ・データのエラーを検出し訂正するデータ処理部と、
前記データ処理部の処理データをページ・データとして前記ページ・バッファにマッピングするマッピング部と
を有する
ことを特徴とするメモリシステム。 - 前記マッピング部は、有限体Zpの数をdビットのバイナリに変換して前記ページ・バッファにマッピングする
ことを特徴とする請求項1記載のメモリシステム。 - 前記マッピング部は、前記メモリセルの物理量レベルの昇順又は降順に前記Zpの数0〜p−1を順番に対応するように前記ページ・バッファにマッピングする
ことを特徴とする請求項1又は2記載のメモリシステム。 - 前記マッピング部は、前記メモリセルの消去レベルからより遠い物理量レベルのレベル幅を、消去レベルに近い物理量レベルのレベル幅以上になるようにマッピングする
ことを特徴とする請求項3記載のメモリシステム。 - 前記ページ・バッファは、同一の前記メモリセルに読み書きされるdページ分のページ・データを保持する
ことを特徴とする請求項1〜4のいずれか1項記載のメモリシステム。 - 前記メモリデバイス及び前記ページ・バッファ間の前記dページ分のページ・データは、各ページ・データ毎にd回に分けて送受信される
ことを特徴とする請求項5記載のメモリシステム。 - 複数の物理量レベルによってdビット(dは、2以上の整数)のデータを記憶する複数のメモリセルを有し、所定数の前記メモリセルの特定のビットからなるページ単位でデータの読み書きをするメモリデバイスを制御するメモリコントローラであって、
前記メモリデバイスのページに読み書きするページ・データを保持し、前記メモリデバイスとの間で前記ページ・データを送受信するページ・バッファと、
前記ページ・データに基づいて生成されたp(pは、2<p<2dを満たす素数)の有限体Zp上の処理データに対する処理によって前記ページ・データのエラーを検出し訂正するデータ処理部と、
前記データ処理部の処理データをページ・データとして前記ページ・バッファにマッピングするマッピング部と
を備えることを特徴とするメモリコントローラ。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010273311A JP2012123600A (ja) | 2010-12-08 | 2010-12-08 | メモリシステム及びメモリコントローラ |
US13/237,418 US8959415B2 (en) | 2010-12-08 | 2011-09-20 | Memory system and memory controller |
US14/593,705 US9336085B2 (en) | 2010-12-08 | 2015-01-09 | Memory system and memory controller |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010273311A JP2012123600A (ja) | 2010-12-08 | 2010-12-08 | メモリシステム及びメモリコントローラ |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2012123600A true JP2012123600A (ja) | 2012-06-28 |
Family
ID=46200574
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010273311A Pending JP2012123600A (ja) | 2010-12-08 | 2010-12-08 | メモリシステム及びメモリコントローラ |
Country Status (2)
Country | Link |
---|---|
US (2) | US8959415B2 (ja) |
JP (1) | JP2012123600A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9368197B2 (en) | 2014-01-29 | 2016-06-14 | Kabushiki Kaisha Toshiba | Memory system |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012123600A (ja) * | 2010-12-08 | 2012-06-28 | Toshiba Corp | メモリシステム及びメモリコントローラ |
KR102299880B1 (ko) * | 2017-04-04 | 2021-09-09 | 에스케이하이닉스 주식회사 | 데이터 변환 장치 및 방법 |
CN109828794B (zh) * | 2017-11-23 | 2021-09-17 | 建兴储存科技(广州)有限公司 | 固态储存装置及其相关程序的载入方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008053472A2 (en) | 2006-10-30 | 2008-05-08 | Anobit Technologies Ltd. | Reading memory cells using multiple thresholds |
WO2008099723A1 (en) | 2007-02-01 | 2008-08-21 | Kabushiki Kaisha Toshiba | Semiconductor memory with reed- solomon decoder |
US8359516B2 (en) * | 2007-12-12 | 2013-01-22 | Densbits Technologies Ltd. | Systems and methods for error correction and decoding on multi-level physical media |
JP2009181439A (ja) | 2008-01-31 | 2009-08-13 | Toshiba Corp | メモリシステム |
KR101506655B1 (ko) * | 2008-05-15 | 2015-03-30 | 삼성전자주식회사 | 메모리 장치 및 메모리 데이터 오류 관리 방법 |
JP5259343B2 (ja) | 2008-10-31 | 2013-08-07 | 株式会社東芝 | メモリ装置 |
JP2011165026A (ja) | 2010-02-12 | 2011-08-25 | Toshiba Corp | エラー検出訂正システム |
JP4982580B2 (ja) | 2010-03-23 | 2012-07-25 | 株式会社東芝 | メモリシステム及びメモリシステムのデータ書き込み・読み出し方法 |
JP2012123600A (ja) * | 2010-12-08 | 2012-06-28 | Toshiba Corp | メモリシステム及びメモリコントローラ |
-
2010
- 2010-12-08 JP JP2010273311A patent/JP2012123600A/ja active Pending
-
2011
- 2011-09-20 US US13/237,418 patent/US8959415B2/en active Active
-
2015
- 2015-01-09 US US14/593,705 patent/US9336085B2/en active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9368197B2 (en) | 2014-01-29 | 2016-06-14 | Kabushiki Kaisha Toshiba | Memory system |
US9691474B2 (en) | 2014-01-29 | 2017-06-27 | Kabushiki Kaisha Toshiba | Memory system |
Also Published As
Publication number | Publication date |
---|---|
US20150128009A1 (en) | 2015-05-07 |
US8959415B2 (en) | 2015-02-17 |
US20120151123A1 (en) | 2012-06-14 |
US9336085B2 (en) | 2016-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101438072B1 (ko) | 소거 없는 플래시 메모리의 다중 프로그래밍 | |
JP4836608B2 (ja) | 半導体記憶装置 | |
JP4621715B2 (ja) | メモリ装置 | |
Chen et al. | An adaptive-rate error correction scheme for NAND flash memory | |
JP4791831B2 (ja) | 半導体記憶装置 | |
JP2010518464A (ja) | 半導体記憶装置 | |
JP4846384B2 (ja) | 半導体記憶装置 | |
US9075739B2 (en) | Storage device | |
JP5259343B2 (ja) | メモリ装置 | |
JP5204186B2 (ja) | メモリシステム | |
CN102017425A (zh) | 用于执行级联纠错的方法和系统 | |
US10498364B2 (en) | Error correction circuits and memory controllers including the same | |
WO2014174370A2 (en) | Syndrome tables for decoding turbo-product codes | |
US9336085B2 (en) | Memory system and memory controller | |
JP5143203B2 (ja) | メモリシステム | |
JP2021047712A (ja) | メモリシステム | |
US10133628B2 (en) | Apparatuses and methods for encoding using error protection codes | |
JP2008052866A (ja) | 半導体記憶装置 | |
CN110113058A (zh) | 编译码方法、装置、设备及计算机可读存储介质 | |
CN110908827A (zh) | 用于NAND Flash闪存纠错的并行BCH解码方法 | |
US8819331B2 (en) | Memory system and memory controller | |
JP2023045450A (ja) | シンドローム計算回路、誤り訂正回路およびメモリシステム | |
US20230299794A1 (en) | Memory system and control method of controlling nonvolatile memory | |
CN117632577A (zh) | 一种基于bch编码的快速ecc纠错电路 | |
JP2023137091A (ja) | メモリシステムおよびメモリ制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20130221 |