JP2011198253A - メモリシステム及びメモリシステムのデータ書き込み・読み出し方法 - Google Patents

メモリシステム及びメモリシステムのデータ書き込み・読み出し方法 Download PDF

Info

Publication number
JP2011198253A
JP2011198253A JP2010066440A JP2010066440A JP2011198253A JP 2011198253 A JP2011198253 A JP 2011198253A JP 2010066440 A JP2010066440 A JP 2010066440A JP 2010066440 A JP2010066440 A JP 2010066440A JP 2011198253 A JP2011198253 A JP 2011198253A
Authority
JP
Japan
Prior art keywords
data
error
code
memory
word
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
Application number
JP2010066440A
Other languages
English (en)
Other versions
JP4982580B2 (ja
Inventor
Haruki Toda
春希 戸田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2010066440A priority Critical patent/JP4982580B2/ja
Priority to US13/011,318 priority patent/US8448051B2/en
Publication of JP2011198253A publication Critical patent/JP2011198253A/ja
Application granted granted Critical
Publication of JP4982580B2 publication Critical patent/JP4982580B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/138Codes linear in a ring, e.g. Z4-linear codes or Nordstrom-Robinson codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1515Reed-Solomon codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/152Bose-Chaudhuri-Hocquenghem [BCH] codes

Landscapes

  • Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Algebra (AREA)
  • General Physics & Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

【課題】ランダムエラー及び塊エラーに対応するECCシステムを搭載可能に構成されたメモリシステムを提供する。
【解決手段】メモリシステムは、一括処理するバイナリデータDをhビットでδ桁のシンボルに分割し、これをk桁のp進数(pは3以上の素数)のデータ語に変換するp進数変換部と、このデータ語からn桁のhビットで表示可能な桁の数をもつコード語からなる素数pの剰余体ZpよりなるコードCを生成するエンコード部と、Cを書き込みデータとして記憶するメモリ部と、メモリ部から読み出された読み出しデータYからシンドロームSを生成し、Sを用いた演算により読み出しYをエラー訂正してCを再生するエラー訂正部と、再生されたCを逆変換してp進数のデータ語を再生するデコード部と、再生されたデータ語を2進数に変換してDを再生するバイナリ変換部とを備える。
【選択図】図1

Description

本発明は、メモリシステムに関し、特にECCシステムによりエラー検出訂正を行うメモリシステムに関する。
メモリシステムの大容量化に伴い、メモリセルの微細化、1セル当たりの記憶ビット数の増加、メモリセルアレイの三次元構造化が進められている。しかし、メモリシステムでは、容量が大きいほど記憶データにエラーが生じ易くなる。そこで、オンチップECC(Error Correcting Code)システムを備えたメモリシステムも多数提案されている(例えば、特許文献1)。このECCシステムで扱うのはランダムなビットエラーであった(以下、単に「ランダムエラー」と呼ぶ)。この場合、メモリセルへのデータ書き込み等において生じるランダムなビットエラーには対応することができる。しかし、高密度な三次元化されたメモリセルでは、このようなランダムなビットエラーのみならず、製造の際に生じる欠陥等に起因し、所定の領域で集中的にビットエラーが生じることがある(以下、「塊エラー」と呼ぶ)。このような塊エラーに対し、上記ECCシステムでは対応することができない。また、他のオンチップECCシステムもいくつか提案されてはいるが(特許文献2など)、これらオンチップECCシステムは、ランダムエラー及び塊エラー双方に十分に対応しているとは言い難い。
特開2009−181439号 WO2008−099723号
本発明は、ランダムエラー及び塊エラー双方に対応したエラー検出訂正を行うメモリシステム及びこのメモリシステムのデータ書き込み・読み出し方法を提供することを目的とする。
本発明の一態様に係るメモリシステムは、一括処理するバイナリデータDをhビット(hは整数)でδ桁(δは整数)のシンボルに分割し、これをk桁(kは整数)のp進数(pは3以上の素数)のデータ語に変換するp進数変換部と、前記p進数変換部でp進数に変換されたデータ語からn桁(n=p−1)のhビットで表示可能な桁の数をもつコード語からなる素数pの剰余体ZpよりなるコードCを生成するエンコード部と、前記エンコード部で生成されたZpのコードCを書き込みデータとして記憶するメモリ部と、前記メモリ部から読み出された読み出しデータYからシンドロームSを生成し、生成されたシンドロームSを用いた演算により前記読み出しデータYをエラー訂正してZpのコードCを再生するエラー訂正部と、前記エラー訂正部で再生されたZpのコードCを逆変換してp進数のデータ語を再生するデコード部と、前記デコード部で再生されたデータ語を2進数に変換してバイナリデータDを再生するバイナリ変換部とを備えたことを特徴とする。
本発明の一態様に係るメモリシステムのデータ書き込み・読み出し方法は、一括処理するバイナリデータDをhビット(hは整数)でδ桁(δは整数)のシンボルに分割し、これをk桁(kは整数)のp進数(pは3以上の素数)のデータ語に変換し、前記p進数に変換されたデータ語からn桁(n=p−1)のhビットで表示可能な桁の数をもつコード語からなる素数pの剰余体ZpよりなるコードCを生成し、前記生成されたZpのコードCを書き込みデータとしてメモリ部に記憶し、前記メモリ部から読み出された読み出しデータYからシンドロームSを生成し、生成されたシンドロームSを用いた演算により前記読み出しデータYをエラー訂正してZpのコードCを再生し、前記再生されたZpのコードCを逆変換してp進数のデータ語を再生し、前記再生されたデータ語を2進数に変換してバイナリデータDを再生することを特徴とする。
本発明の他の一態様に係るメモリシステムは、一括処理するバイナリデータDをhビット(hは整数)でδ桁(δは整数)のシンボルに分割し、これをk桁(kは整数)のp進数(pは3以上の整数)のデータ語に変換するp進数変換部と、前記p進数変換部でp進数に変換されたデータ語からn桁(n=p−1)のhビットで表示可能な桁の数をもつコード語からなるコードCを生成するエンコード部と、複数のメモリセルを有し、少なくとも1又は複数のメモリセルでp段階の物理量レベルを設定可能で、前記物理量レベルによって前記エンコード部で生成されたコードCを前記hビットのコード語の桁の数を書き込みデータとして記憶するメモリ部と、前記メモリ部から読み出された読み出しデータYから前記hビットのコード語の桁の数のエラー訂正を行うエラー訂正部と、前記エラー訂正部でエラー訂正されたコードCを逆変換してp進数のデータ語を再生するデコード部と、前記デコード部で再生されたデータ語を2進数に変換してバイナリデータDを再生するバイナリ変換部とを備えたことを特徴とする。
本発明の他の一態様に係るメモリシステムのデータ書き込み・読み出し方法は、一括処理するバイナリデータDをhビット(hは整数)でδ桁(δは整数)のシンボルに分割し、これをk桁(kは整数)のp進数(pは3以上の整数)のデータ語に変換し、前記p進数に変換されたデータ語からn桁(n=p−1)のhビットで表示可能な桁の数をもつコード語からなるコードCを生成し、複数のメモリセルを有し、少なくとも1又は複数のメモリセルでp段階の物理量レベルを設定可能なメモリ部に対し、前記物理量レベルによって前記生成されたコードCを前記hビットのコード語の桁の数を書き込みデータとして記憶し、前記メモリ部から読み出された読み出しデータYから前記hビットのコード語の桁の数のエラー訂正を行い、前記エラー訂正されたコードCを逆変換してp進数のデータ語を再生し、前記再生されたデータ語を2進数に変換してバイナリデータDを再生することを特徴とする。
本発明によれば、ランダムエラー及び塊エラー双方に対応したエラー検出訂正を行うメモリシステム及びこのメモリシステムのデータ書き込み・読み出し方法を提供することができる。
本発明の第1の実施形態に係るメモリシステムのブロック図である。 本メモリシステムにおけるデータ書き込みのフローを示す図である。 本メモリシステムにおけるデータ読み出しのフローを示す図である。 本メモリシステムにおけるデータ読み出しのフローを示す図である。 本メモリシステムにおけるデータからコードへの変換の概略を説明する図である。 本メモリシステムにおけるデータからコードへの変換の概略を説明する図である。 本メモリシステムにおけるビットエラーとシンボルとの関係を示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルセルで記録する場合のレベルとシンボル値との関係を示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録する場合であって最大値を持つシンボルを記録する際のルールを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録する場合であって最小値を持つシンボルを記録する際のルールを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおいて1つのシンボルを2つの多レベルのメモリセルで記録した場合に生じるエラーを示す図である。 本メモリシステムにおけるメモリセルのレベル数と冗長度等との関係を示す図である。 本発明の第2の実施形態に係るメモリシステムにおいて2シンボルのエラーを訂正可能にした場合の処理単位と冗長度等との関係を示す図である。 本メモリシステムにおいて3シンボルのエラーを訂正可能にした場合の処理単位と冗長度等との関係を示す図である。 本メモリシステムにおいて4シンボルのエラーを訂正可能にした場合の処理単位と冗長度等との関係を示す図である。 本メモリシステムにおいて6シンボルのエラーを訂正可能にした場合の処理単位と冗長度等との関係を示す図である。 本メモリシステムにおいて7シンボルのエラーを訂正可能にした場合の処理単位と冗長度等との関係を示す図である。 本メモリシステムにおいて8シンボルのエラーを訂正可能にした場合の処理単位と冗長度等との関係を示す図である。 本発明の実施形態に係るメモリシステムのECCシステムと他のECCシステムとのエラー訂正能力を比較する図である。
[第1の実施形態]
以下、本発明の第1の実施形態について説明する。
メモリシステムの大容量化のために、メモリセルの微細化、セルアレイの三次元構造化、メモリセルの多値記憶化を進めた場合、メモリシステムに生じる不良も様々である。
例えば、メモリセル等の構造に不具合があった場合、不良が、所定のメモリセルに限定して生じることは少なく、ある一定の範囲の複数のメモリセルにまとまって生じることが多い。一方、メモリセルの動作が不安定になった場合などは、不良が広い範囲に分布する。そのため、このようなメモリシステムには、塊エラー及びランダムエラーの双方を検出・訂正可能なECCシステムが必要となる。
その点、従来からあるリード・ソロモン(Reed-Solomon)符号(以下、「RS符号」と呼ぶ)によるECCシステム(以下、「RS−ECCシステム」と呼ぶ)では、塊エラーを検出・訂正することはできても、多様なランダムエラーを検出・訂正することは困難である。
また、RS−ECCシステムの他、2の累乗を基本とするガロア体であるGF(2)を利用したBCH符号によるECCシステムも存在する(以下、「2−BCH−ECCシステム」と呼ぶ)。BCH−ECCシステムによれば、塊エラー及びランダムエラーの双方を検出・訂正することができる。しかし、ECCの処理のため、データのコード化に際して冗長なビットを付加するため、実際のデータよりも少なくとも1ビット分の余計な処理が必要となる。すなわち、2ビットのデータを扱うために、GF(2n+1)を用いるため、これは実際のデータ量の2倍のデータの演算を要することを意味する。特に、一括して扱うデータが大きくなる大容量のメモリシステムにおいては演算量が膨大となるため、回路規模が大きくなると共に処理時間も大きくなる。
そこで、本実施形態では、2−BCH−ECCシステムに替わるECCシステムとして素数pを基本とするガロア体であるGF(p)、すなわち既約剰余類Zpを利用したリー・メトリックコード(Lee Metric Code)によるECCシステムを提案する(以下、「p−LM−ECCシステム」)。このp−LM−ECCシステムは、データをシンボル化してシンボルとしてのエラーの訂正を行うもので、その意味でRS−ECCシステムに近い方式を採っている。以下では、具体例としてランダムな2つのシンボルエラーを訂正可能なp−LM−ECCシステムについて説明する。
ここで、改めてGF(2)を利用した場合の問題点を挙げつつ本実施形態のp−LM−ECCシステムの構築の方向性について説明する。ここでは、一般的な処理を行う2−BCH−ECCシステムと、オンチップ用に高速化な処理を実現するGF(2)を利用したRS符号によるECCシステム(以下、「2−RS−ECCシステム」と呼ぶ)の問題点を説明する。
これら2つのECCシステムは、エラーに対するシンドロームの生成処理については共通するものの、このシンドロームを如何に処理するかが相違している。
シンドロームの処理は、第1のステップである解探索多項式Λ(x)の構築と、第2のステップであるΛ(x)=0の根の探索の2つのステップに分かれる。
−BCH−ECCシステムでは、第1のステップに際し、シンドロームから得られた量をもとにして、反復法を用いて「キー」と呼ばれる一連の条件式を満足するような解探索多項式Λ(x)を求める。反復法としては、ユークリッド法やBM(Berlekamp-Massey)法といった確立したアルゴリズムが用いられている。続く第2のステップでは、解探索多項式Λ(x)に利用されるガロア体の各要素を逐次代入していき、Λ(x)=0を満足するガロア体の要素を求める。このアルゴリズムはチェーン・サーチ(Chain Search)法として確立したものである。このように、2−BCH−ECCシステムの場合、第1のステップでは、解探索多項式Λ(x)が得られるまでの反復に時間を要するが、膨大な時間を要するものではない。そのため、小規模回路を反復利用することで実現することができる。一方、第2のステップでは、小規模回路で実現できるものの、ガロア体の全要素をスキャンするため膨大な処理時間が必要となる。以上から、2−BCH−ECCシステムによれば、一括処理するデータが大きい場合、第2のステップにおける処理時間がボトルネックとなり、リアルタイムのデータアクセスを実現することはできない。
−RS−ECCシステムでは、第1のステップに際し、反復法を用いずに解探索多項式Λ(x)の係数を直接求めている。そのため回路規模は大きくなるものの、解探索多項式Λ(x)を得るための処理時間を短縮することができる。更に、第2のステップでは、予めΛ(x)=0を満足するガロア体の要素をデコーダとして求めておくことでマッチング・バイ・デコーダによって解を求めている。そのためガロア体の要素数に依らず高速に処理することができる。しかし、デコーダの回路規模はガロア体の要素数に比例して大きくなるため、回路規模は膨大になる。以上から、オンチップ用に高速な処理を実現する2−RS−ECCシステムは、回路規模が大きくなるため、処理速度を優先するような特定用途のメモリシステム以外では利用が困難である。
以上の問題点を考慮し、改良したものが今回提案するp−LS−ECCシステムである。このp−LS−ECCシステムは、塊エラー及びランダムエラーの双方に対する検知・訂正ができ、更に、オンチップECCシステムとして耐え得る回路規模且つ処理速度を実現するものである。
[メモリシステムの概要]
ここでは、本実施形態に係るメモリシステムの概要を説明する。
図1は、本メモリシステムのブロック図である。また、図2は、本メモリシステムにおけるデータ書き込みのフローを示す図であり、図3A、図3Bは、本システムにおけるデータ読み出しを示す図である。
本メモリシステムは、大別してメモリ部100とECCシステム200とを備える。
メモリ部100は、フラッシュメモリ、PRAM、ReRAM等の大容量記憶メモリである。ECCシステム200は、メモリ部100へのデータ書き込み側に、p進数変換部201及びエンコード部202を備え、メモリ部100からのデータ読み出し側に、エラー訂正部(203〜206)、デコード部207及びバイナリ変換部208を備えている。エラー訂正部(203〜206)は、シンドローム生成部203、解探索多項式生成部204、ハッセ(Hasse)微分多項式生成部205及びコード復元部206からなる。なお、ECCシステム200は、メモリ部100と同一チップ上に搭載されていても、メモリ部100とは別チップとして設けられていても良い。
このようなメモリシステムへのデータの書き込みは、次のように行われる。先ず、外部から入力されたデータDをp進数変換部201でhビット毎に区切って2進数表現(hは整数)へ変換し(図2のS1)、p進数表現(pは3以上の素数)のデータ語D(h)に変換する(図2のS2)。
続いて、エンコード部202で、このデータ語D(h)に生成行列Gを作用させてリー・メトリックコードCを生成する(図2のS3)。
最後に、メモリ部100にリー・メトリックコードCを記録保持する(図2のS4)。
データの読み出しは、次のように行われる。先ず、メモリ部100からエラーを含むコードYを読み出す(図3AのS5)。この読み出したコードYにシンドローム生成部203でシンドローム行列Hを作用させてシンドロームSを生成する(図3AのS6)。
続いて、解探索多項式生成部204で、このシンドロームSから解探索多項式Ψ(x)の係数を求め、解探索多項式Ψ(x)を生成する(図3AのS7)。
続いて、求めた解探索多項式Ψ(x)の係数が所定の条件を満たす場合(図3AのS8)、ハッセ微分多項式生成部205で、解を求めるためのハッセ微分多項式[Ψ(x)][i]を生成し(図3AのS9)、これらの根rとその根の多重度nを算出する(図3BのS10)。
続いて、コード復元部206で、この算出された根rとその根の多重度nを用いてコードYに含まれるエラーの位置とエラー量を割り出してコードCを復元する(図3BのS11)。
続いて、デコード部207で、復元されたコードCに対して生成行列Gの逆変換を行いp進数表現のデータ語D(h)を再生する(図3BのS12)。
最後に、バイナリ変換部208で、p進数表現のデータ語D(h)を2進数表現に変換した後、バイナリデータDとして外部に出力する(図3BのS13)。
以下において、以上の各処理を詳細に説明する。
[コードCへの変換]
ここでは、外部から入力されたデータDからメモリ部100に記録するコードCへの変換の原理を説明する。
先ず、データDからコードCへの変換方法の必要性について説明する。
GF(p)を用いる場合、素数pは2の累乗で表せないため、GF(2)を用いる場合と異なり、データDのビットパターンの全てをそのままコードCとして用いることはできない。そこでデータDのビットパターンとGF(p)の要素とを1対1で対応づける変換が必要となる。
GF(p)の要素は0からp−1の整数であり、これら要素は全てhビットのバイナリで表現できるものとする。この場合、hビットの全ビットパターンが使われないため、データDのhビットをそのままGF(p)の要素として扱うことはできない。
図4Aに示すように、メモリシステムに与えられるひとまとまりのデータDをhビットずつに区切り(以下、データにおけるhビット毎のまとまりを「データ語シンボル」と呼ぶ)、n個の集まり、すなわち2進数表現でn桁のデータD=(d,d,…,d)として見ると、各桁には、hビットの全ビットパターンのうち、2−1以下の範囲のビットパターンが出現する。一方、図4Bに示すように、n語長のGF(p)のコードC=(c,c,…,c)には、c<p<2が成立するようなhビットと素数pの関係があるため、hビットの全ビットパターンは出現しない。
そこで、データDとコードCとを1対1に対応づける変換が必要となるが、これは2進数表現からp進数表現への変換に相当する。
次に、p進数表現への変換に用いる素数pの選択方法について説明する。
ECCシステムで一括処理するデータDのビット数をM=δhとする。このMビットのデータDを、δ桁の2進数表現に変換する場合、数1に示すように1つのデータ語D(h)として見ることができる。
[数1]

ここで、dδ−1、dδ−2、…、d、dは、データ語シンボルが表す2進数表現の値(以下、シンボルが表わす値を「シンボル値」と呼ぶ)である。なお、最高桁δ−1のシンボル値dδ−1は非ゼロ値であることに注意する。
続いて、p進数変換する際に次の条件を設定する。すなわち、データ語D(h)で表現できる数の最大値と最小値を、hビットの2進数表現からp進数表現にした場合の桁数の増加を最大1桁とし、δ+1桁とする。したがって、p進数表現におけるデータ語D(h)は数2に示すδ+1桁のデータとなる。
[数2]

ここで、aδ、aδ−1、…、a、aは、2進数表現のシンボル値である。なお、最高桁δと次の桁δ−1のシンボル値であるaδとaδ−1は同時にゼロ値になることはない。
続いて、データ語D(h)の形式が普遍的に構成できるδとhとの関係を求める。すなわち、最低でもδ桁の表現がhの選択によって可能な条件を求める。ここで、データ語D(h)の最小数Dmin(h)と最大数Dmax(h)は数3のようになる。
[数3]

したがって、Dmin(h)−1は、δ−1桁となるためデータ語D(h)の形式でなくなってしまう。そこで、h−1ビットのまとまり、すなわち2h−1進数表現と比較するとDmin(h)−1≧Dmax(h−1)が成立すると、データ語D(h)の表現でも桁数δが低下することはない。つまり、δとhとの関係は数4のようになる。
[数4]

続いて、p進数表現にする際の桁数の増加が最大1桁となる条件を求める。ここで、最大値Dmax(h)をpδやpδ+1を法としてみると数5のようになる。
[数5]

ここで、数5の各辺は整数で表すことができるので、(p)δ<(2δ且つ(2δ≦(p)δ+1が成立する。したがって、素数pは以下の数6のような範囲となる。
[数6]

さらに、δ/(δ+1)=(1−1/δ)/(1+(1/δ))<1−1/δ<1−1/h(h≦δ)とpは素数であることから、素数pの選択条件の1つは数7のように表すことができる。また、このとき、δ桁のp進数の最小値pδ−1に対して、pδ−1<(2δ−1=Dmin(h)となることから、p進数はδ−1桁以下になることはない。
[数7]

続いて、数7で得られた素数pの選択条件に、更に、リー・メトリックコードの成立条件を付加する。
データ語D(h)のp進数表現においては、GF(p)のリー・メトリックコードを用いると、コードCの語長をn(すなわちC=(c,c,…,c))、このうちダミーの語長をκ、データの語長をkとし、訂正可能なエラーのリー・メトリックの和の最大値をε=γ−1とすると、δ+1個のシンボル値に対して数8のような条件を持つコードCを生成することができる。
[数8]

ここで、d(C)はコード語間の最小リー距離を示す。
続いて、ECCシステムが一括に処理するデータDのビット数はMなので、このデータDを適当なhビットずつのまとまりで考えてδ桁の数と見ると、δ+1桁以下のp進数に変換することができる。すなわちδ+1がリー・メトリックコードでのデータの語長に相当することになる。つまり、δ+1≦kでなければリー・メトリックコードを作ることができない。このことから素数pの選択をδ+1+κ=kとなるように語長κを定め、語長κのコード語には固定した値(例えば、0)を与えて処理するので、δ+1+κ=k、k=p−ε−2から、素数pの選択条件の1つは数9のようになる。
[数9]

以上をまとめると、ECCシステムに要求される訂正可能なエラーのリー・メトリックの和の最大値をε、一括処理するデータDのデータ長をMビットとした場合、δh≧M、δ+ε+3+κ=p(0≦κ)から、素数pの選択条件は、数10のようになる。
[数10]

さらに、選択すべき素数pは、数10に示す条件を満たす素数pのうちダミーの語長κが最小になるもの、つまり、κ=p−δ−ε−3を最小にする素数pとなる。なお、δはM/h以上の最小の整数である。
このとき、GF(p)上のコードCとしての冗長語長γは、γ=ε+1=n−k=n−(κ+δ+1)から、データ語D(h)の桁数から見た冗長語長(n−δ)は、n−δ=κ+1+γとなる。したがって、データ語D(h)から見た冗長ビット長は、数11のようになる。
[数11]

つまり、数10を満たす素数pのうち語長κが最小になる素数pを選択することで、冗長語長n−δを最も減少させることができる。
次に、入力されたデータDをリー・メトリックコードCへ変換する方法について説明するが、その前に本実施形態で使用するリー・メトリックコードについて説明する。以下において、コードを構成する各桁を「コード語シンボル」と呼ぶものとする。
コード語シンボルcは、数12に示す整数となる。
[数12]

これら整数のリー・メトリックを|c|とし、全てのリー・メトリック|c|をp/2以下の整数で表すとリー・メトリック|c|の定義は数13のようになる。
[数13]

コードCは、n=p−1個のコード語シンボルcの並びと考えられるため、図4Bにも示したようにC=(c,c,…,c)で表すことができ、コードCの計量w(C)は数14のように各コード語シンボルcのリー・メトリック|c|の和として定義される。
[数14]

また、コード間の距離はコードに対応する各コード語シンボルの差のリー・メトリックの和で定義される。ここで2つのコードCとYの差(リー距離)d(C,Y)は数15のようになる。
[数15]

さらに、コードCの最小リー距離は、数16に示すようにコードCの計量w(C)の最小の計量で定義される。
[数16]

このとき、リー・メトリックコードは、数17に示す生成行列G及びシンドローム行列Hを持ったコード間の最小距離が2γであり、且つ、γ−1以下のリー・メトリックのエラー訂正が可能なコードである。
[数17]

ここで、コードCのシンボル数をn、データ語Dのシンボル数をkとすると、γ=n−kであり、γはコードCに含まれる冗長なシンボル数を表している。
次に、メモリシステムに入力されたデータDを上記リー・メトリックコードCにエンコードする方法について説明する。
先ず、ECCシステムが一括処理するM=δhビットのバイナリであるデータDをδ+1桁のp進数表現に変換する。その際、予め設定したγに対してκ桁だけ不足している場合、κ桁は例えば0に固定しておく。このように得られたk桁の数は、GF(p)の要素xとなる。
続いて、データ語X(X=(x,x,…,x))として、演算C=XGを実行し、コードCを得る。
最後は、この得られたコードCを構成するコード語シンボルcを数18に示すhビットのバイナリ表現のデータとしてメモリセルに記憶する。
[数18]

[コードYのエラー訂正]
ここでは、エラーを含むコードYのエラー訂正の原理について説明する。
先ず、本メモリシステムにおけるコードYのエラー訂正を説明する前に、比較例となるエラー訂正について説明する。
メモリセルに記録されたコードCのバイナリデータは、hビットからなるコード語シンボルがn個集まったものであり、ビット毎に様々な擾乱を受けて変化を起こす。そのため、本来記憶されるべきコード語シンボルcから意図しない異なるコード語シンボルyに変化してしまう。このコード語シンボルyからなるコードYからコードCを復元するのがエラー訂正である。
エラー訂正の前には、シンドロームSを求める必要がある。
変化後のコード語シンボルyからなるコードYは、数19のように表すことができる。
[数19]

ここで、eは、各コード語シンボルcのエラー量を表す。
シンドロームSはシンドローム行列Hを利用したS=YHの演算をして数20に示す要素S、S、…、Sγ−1として求まる。
[数20]

ここで、HはHの転置行列である。生成行列Gとシンドローム行列Hの構成がGH=0(mod p)となるように構成されていることにより、Y=C+EとおくとS=EHとなる。またE=(e,e,…,e)とすると、シンドロームSは各コード語シンボルのエラーの総和になっていることが分かる。これらのシンドロームSが唯一のエラーの情報であり、これらシンドロームSを基にして以下のように、正しいコードCの復元を行う。
次に、デコードの原理をエラーの状況が予め分かっているものとして説明する。n(=p−1)個のエラーコード語シンボルを二つの組JとJに、数21のように分類する。
[数21]

すなわち、エラーコード語シンボルのエラー量がe<p/2の場合、コード語シンボルcの位置jの集まりであるJと、エラーコード語シンボルのエラー量がe>p/2の場合のコード語シンボルcの位置jの集まりであるJとに分類される。GF(p)上の多項式Λ(x)、V(x)をこれらの組を基に数22のように構成する。
[数22]

このように、多項式Λ(x)はJのエラーコード語シンボルの位置jの逆数を根として持ち、そのコード語シンボルのリー・メトリックeを根の多重度として持つ多項式となる。一方、多項式V(x)はJのエラーコード語シンボルの位置jの逆数を根として持ち、そのコード語シンボルのリー・メトリックp−eを根の多重度として持つ多項式となる。デコードは、最終的にこれらの多項式をシンドロームSの情報のみから構成して解くことによってエラーの情報を得る過程となる。つまり、これら多項式Λ(x)、V(x)とシンドロームSとの関係を求める必要がある。
続いて、数23に示すように各シンドロームSをその次数の係数に持つ級数多項式で構成すると、コード語シンボルのエラー量e、位置jとその値を持つ有理多項式で表される。
[数23]
数23から、多項式Λ(x)、V(x)、シンドロームS(x)の間には数24に示す関係式が成立する。
[数24]

続いて、数24に示す関係式を利用して、シンドロームS(x)から多項式Λ(x)、V(x)を求める。
シンドロームS(x)から、数25に示す次数がγ−1以下の多項式Ψ(x)を求める。
[数25]

多項式Ψ(x)の展開式において、数25に示す式の両辺の同次次数の係数の比較から、係数ψは、シンドロームSと既に求まっている係数ψj−1とを用いて反復法で求めることができる。シンドロームS〜Sγ−1から多項式Ψ(x)の係数ψ〜ψγ−1を求めた結果を数26に示す。
[数26]

この多項式Ψ(x)はΛ(x)/V(x)に等価な多項式であるが、多項式Λ(x)、V(x)には、数27に示すキー条件がある。そのため、xγと多項式Ψ(x)に対してユークリッドの反復法で定数倍を除いて求めることができる。
[数27]

したがって、シンドロームS〜Sγ−1から多項式Ψ(x)が構成できれば、反復法の停止条件としてシンドロームSを用いて多項式Λ(x)、V(x)が求まる。すなわち、反復法によって(S0,Ψ(x))の組から求めた多項式Λ(x)、V(x)は、エラーコード語シンボルの位置jとエラー量eを表している。
続いて、ユークリッドの反復法について説明する。ここでは、合同式V(x)Ψ(x)≡Λ(x)(mod xγ)を停止条件deg Λ(x)−deg V(x)≡S(mod p)で求める反復法について説明する。
ユークリッドの反復法は、関数f、f、…、fを多項式の割り算を用いて順に求めて行く方法である。これらの量の間には数28に示す関係がある。
[数28]

ここで、数29の示すように、特に割り算の過程で得られる商多項式kからpやqを逐次導入することによって、これらの多項式が簡単な関係を満足することから、fをf、f、pn−1、及びqn−1で表すことができる。そこでf=xγ、f=Ψ(x)とおいてxγでの合同式を作ると、反復の停止条件はdeg f−deg pn−1≡S(mod p)となる。この停止条件を満たすnについてdeg f+deg pn−1<γならλ(x)=fn、V(x)=pn−1とおくことができる。
続いて、Λ(x)=0、V(x)=0となる解探索を行う。
数22に示す多項式Λ(x)、V(x)は、f(x)=Λ(x)(又はV(x))とすると、数29に示す多項式となっている。
[数29]

解探索には、このf(x)のxにZpの要素1、…、p−1を順次代入していき、素数pを法としてf(x)=0となるxをrとする。つまり、f(r)=0(mod p)となる根rを求める。根rが求まると、この根rのGF(p)での逆元、つまりr−1がエラーコード語シンボルの位置jとなり(j=r−1)、根rの多重度eがエラーコード語シンボルのリー・メトリックeとなる。
ここで、根rの多重度の探索について説明する。根rの多重度eの探索には、先ず、多項式Λ(x)、V(x)の係数と二項係数から数30に示すハッセ微分多項式を求める。
[数30]

続いて、この数30に示すハッセ微分多項式に根を代入していき、最初にゼロにならない微分の階数をeとする。この階数eが根rの多重度である。
[数31]

次に、本発明の実施形態におけるコードYのエラー訂正について説明する。
これまでに説明した従来の解探索多項式の構成法では、ユークリッドの反復法を用いていたため、多項式の除算が必要となり、計算過程は煩雑になる。さらに、求めた多項式から得られるエラー量は多項式の次数によって制限されたものに限られるため、シンドロームから反復法によって得た多項式に対してエラー量が固定されていた。そこで本実施形態では、解探索多項式の構成方法を簡略化した上で、さらにエラー探索の自由度を向上させた方法を利用する。
従来の方法では、シンドロームSの値が解を求める際の停止条件であった。そのため、エラーの状況によってはシンドロームSが停止条件を満たさず、解を得られない場合が発生する。本実施形態ではこのようなこのようなエラー状況でも解を得られるように、各コード語シンボルに生じたエラーを一括して変換する。有限体の固定した要素に対して全ての要素との積を作ると有限体の全ての要素が改めて得られことを利用して、予め定めた要素ηに対してuS≡ηなるuを求める。メモリに記憶されたエラーを含むコードYにこのuを掛けてシンドロームを求めると、数32に示すようにuS、uS、…、uSγ−1を得る。
[数32]

ここで、変換されたエラーの総和がηになっていることに注意する。本実施形態におけるデコードの原理は、エラーのコードEに替えてuEを扱うことが従来の方法におけるデコードの原理との差異点となる。この差異点によって、従来の方法における多項式Λ(x)、V(x)の求め方を以下のように簡略化することができる。
以下において、この本実施形態におけるエラー訂正方法を「シンドローム変換法」と呼ぶことにする。
先ず、シンドロームS(x)から多項式Λ(x)、V(x)を導出する方法について説明する。
シンドロームS(x)から多項式Ψ(x)を構成する点については、シンドローム変換法においても従来の方法と同様である。但し、使用するシンドロームがuSとなっている点が異なる。つまり、シンドローム変換法で次数γ−1以下の多項式Ψ(x)を求めると数33のようになる。
[数33]

したがって、多項式Ψ(x)の係数ψ〜ψγ−1を求めた結果は数34のようになる。
[数34]

解探索多項式のキー条件を数35に示す。なお、これらキー条件を満足する多項式λ(x)、v(x)は、定数を除いて、それぞれ解探索多項式Λ(x)、V(x)に一致する。
[数35]

数35に示す通り、シンドローム変換法における解探索多項式のキー条件は、次数に関するシンドロームSで規定された条件が、予め決めたηで規定されている点において従来の方法と異なる。このように条件を予め決めたηにすることによって、多項式の次数に関する条件deg λ(x)−deg v(x)=η、deg λ(x)+deg v(x)≦γ−1から0≦2deg v(x)≦γ−1−ηであるため、γ‐1‐η≦1ならdegv(x)=0になることが分かる。すなわちγ−1≧η≧γ−2の範囲でηを設定することによって、ユークリッドの反復法を用いることなく解探索多項式を導出し得る。実際に、条件deg Ψ(x)=ηの場合、多項式Ψ(x)は全てのキー条件を満たす唯一の解探索多項式になる。この方法は、全てのエラーコード語シンボルに対し、その位置jを集合Jに集める変換を施すことに相当する。換言すれば、エラーの総和Sが素数pの倍数以外の場合、そのエラーの総和Sをγ−1又はγ−2になるように変換させることで、エラー修正ができる可能性があることを示す。但し、あくまで可能性であり、エラー修正には、全てのエラーがJに集められ、且つ、シンドロームuSから求めた多項式Ψ(x)の次数がηに等しいことが条件となる。
シンドローム変換法によれば、後述するように、1シンボルのエラーについては、どのようなエラーにも対応することができる。また、2シンボルのエラーについても、シンドロームSを循環的に用いることで、どのようなエラーにも対応することができる。
次に、解探索では、Λ(x)=Ψ(x)、V(x)=1とおいて、従来の方法と同様、Zpの要素から解を見つける。但し、シンドローム変換法では、得られた根の多重度は、uとの積となっているため、エラーを得る際には、多重度にu−1を掛ける必要がある。
シンドローム変換法では、γに基づいてηを設定する。そのため、η=γ−1とη=γ−2の場合があるが、以下の説明では、η=γ−1のみを考える。
次に、エラーの計量を変換して解探索多項式を求める方法について、シンドローム変換法を用いた場合、根の数(エラーが生じたコード語シンボルの数)に対してどの様なエラーが探索できるかを検討する。
第1のケースとして、解探索多項式から得られる根が1根の場合について説明する。
根をj−1とすると、エラーが発生したコード語シンボルの位置はjであり、実際のエラー量はeとなる。この場合、根の多重度は、適当なuを乗じて変換すれば、エラー量eに拠らず、必ずue=ηとなる。したがって、1シンボルのエラーを完全に解として得ることができる。
第2のケースとして、解探索多項式から得られる根が2根の場合について説明する。
根をi−1とj−1とするとエラーコード語シンボルの位置はiとjであり、それらの実際のエラー量はeとeである(E=(0,…,e,…,e,…,0)、n=p−1)。この場合、適当なuを掛けて変換しこれらが各々p/2以下でJにまとまれば、数36に示す多項式Ψ(x)が構成できるため、多項式Ψ(x)からエラー量を求めることができる。
[数36]

ここで、適当なuを掛けてエラー量を変換し、これらがJにまとまるにはエラー量eとeが一定の関係を持つ必要がある。それには、両者が等しければ十分であり、これによってuによる変換でいかなるエラー量もη(η=γ−1)にすることができるどの様なエラー量もηにすることができる。したがって、2シンボルのエラーを完全に解として得ることができる。
次に、2シンボルのエラー量を等しくする変換方法について詳述する。
エラーが生じた2つのコード語シンボルのコードYにおける位置をi、jとし、それぞれにエラー量をe、eとする。この場合、シンドロームSは、S=e+eとなる。一般的には、シンドロームSは、S=i+jとなる。つまり、適当なmを選択することで、i≡jとすることができる。
ここで、GF(p)の原始根と指数表示を用いてe=α(ei)、e=α(ej)、i=α(i)、j=α(j)とすると、m(i)+(e)≡m(j)+(e)が成立する。したがって、mは、m≡−{(e)−(e)}/{(j)−(i)}によって求めることができる。
以上から、シンドロームの系列(S,Sm+1,…,Sm+γ)を用いて、uS=ηとなる係数uを求めれば良い。
しかし、mは当初不明であるため、2つのコード語シンボルの様々なエラーに対応するには、次のような変換方法を用いる。最初に、mを0からp−2までスキャンし、各mに対する係数uをu=ηS −1によって算出する。これによって、(uS,uSm+1,…,uSm+η)を求めることができる。次に、これら(uS,uSm+1,…,uSm+η)から多項式Ψ(x)を構成する。最後に、構成された多項式Ψ(x)のうち、deg Ψ(x)=ηを満たすmを抽出する。以上によって抽出されたmを選択することによって、2つのコード語シンボルの変換後のエラー量ue、ueを等しくすることが可能である。
第3のケースとして、解探索多項式から得られる根が3根以上の場合について説明する。
多項式Ψ(x)から得られる根が3根以上の場合、解を得るには、全ての根のエラー量を変換してJに属するようにする事が条件であり、この条件を具備することで、多項式Ψ(x)がη次の多項式として構成される。しかし、根が3つ以上の場合、様々なエラーに対応するための単純な変換方法を構成することは困難である。
そこで、根が3根以上の場合には、全ての根のエラー量が変換後にJにまとまる場合を増やす変換方法を用いる。この変換方法は、各mについて、η=γ−1とη=γ−2に対して、2根以下の場合と同様の変換方法を適用するものである。すなわち、mを0からp−2まで順次増加させながら、S≠0の場合に以下を行う。最初にη=γ−1で、次にη=γ−2で、係数qを係数q≡ηS −1によって算出する。これによって、各ηに対して、(qS,qSm+1,…,qSm+γ−1)を求めることができる。次に、これら(qS,qSm+1,…,qSm+γ−1)から多項式Ψ(x)を構成する。このように構成された多項式Ψ(x)のうち、deg Ψ(x)=ηを満たす多項式Ψ(x)がある場合、多項式Λ(x)から解が得られる。一方、全ての多項式Ψ(x)がdeg Ψ(x)≠ηである場合、解けないエラー分布であるため、解無しとして終了となる。
この解法の中には2根や1根の解法も含まれており、根が2つ以下の場合には全てのエラーを求めることができる。一方、3つ以上の場合、エラー量の分布が狭い等の特殊な条件の下、エラーを求めることができる。具体的には、全てのエラーのエラー量が等しいか、又は1つのエラーを除くその他のエラー量が等しい場合、全てのコード語シンボルのエラーを求めることができる。特に、全てのエラーコード語シンボルのエラー量が等しい場合には、最大ηシンボルのエラーを求めることが可能である。
なお、η=γ−1とη=γ−2を用いることで、3つ以上のエラーコード語シンボルのエラー分布をJにまとめられるケースが増えることは確かだが、どのようなエラー分布の場合に解として得ることができるかは明確ではない。ただ、コード語間の最小リー・メトリックは2γであるので、エラーがγ−1以下なら、解からエラーの訂正は可能である。
[メモリシステムへの応用]
ここでは、以上説明したコードCへの変換及びコードYのエラー訂正の原理を実際のメモリシステムに応用する場合について説明する。
ここでは、p−LM−ECCシステムの具体的なメモリシステムへの応用例について説明する。
先ず、訂正可能な場合におけるエラーシンボル数とエラー量との関係について説明する。ここでは、メモリセルがビット単位で情報を記憶する場合の塊エラーとビットエラーとの関係について説明する。
コードCは、メモリセル内では、バイナリとして記憶されるため、エラービットの位置によってはコードのエラーEが異なってくる。リー・メトリックコードが扱うのは塊エラーであるため、ビットエラーとして対応できるものは制限される。具体的には、データ語シンボルをhビットのバイナリで表すため、2の位置の1ビットエラーは、±1のエラー量となり(Zpでは、1又はp−1)、2h−1の位置の1ビットエラーは、±2h−1(mod p)のエラー量となる。したがって、全てのビットエラーのパターンに対応するには、コード語シンボルの全てのエラー量に対応する必要がある。
上述のように、本実施形態の解探索方法を用いると、エラーコード語シンボルが2つまでの場合、如何なるエラー量であってもエラーの解を求めることができる。つまり、ビットエラーが塊で生じている場合でも、この塊が2つ以下の場合には確実に対応することができる。
コードCは、コード語シンボルcを、図5に示すように、バイナリに変換してやることで、様々に構成されたメモリシステムでも記憶することができる。但し、本実施形態の場合、エラー訂正方法の特徴を考慮すると、物理量レベル(以下、単に「レベル」と呼ぶ)によって多値を記憶するメモリセルを用いて構成されたメモリシステムが望ましい。この場合、メモリセルのレベルの順位と、シンボル値の大きさとを対応させたデータ記憶が可能であり、エラーによるリー・メトリックの変動を小さくすることができる。これは、エラーの多くは、正しいレベルから、このレベルの近傍に移動することで生じるためである。
次に、多値記憶メモリセルを用いたメモリシステムについて、メモリセルのレベルに対するシンボル値の割り付け方について説明する。
フラッシュメモリ、PRAM、ReRAM等のメモリセルは、物理量レベルをデータの量と対応させることで多値を記憶することができる。この場合、通常、レベルはそれほど大きくは変動しないため、エラーが生じた場合であっても、数レベル程度の小さいエラーになる。
本実施形態のようにGF(p)を利用する場合は、シンボル値をレベルの大きさに対応させると都合が良い。但し、2メモリセルで多レベルを構成し、Zpの代表元qの採り方を−2/p<q<p/2として考える。素数pを大きくすることで、冗長シンボルのコード全体に対する割合を減らせるので、できるだけレベル数を増やして素数pの値を大きく採れるようにするためである。
以下において、2つのメモリセルMC1、MC2のレベルに対するシンボル値−(p−1)/〜(p−1)/2の割り付け方の一例について説明する。ここでは、メモリセルMC1、MC2はそれぞれ2h−2のレベル数を持つものとする。
先ず、シンボル値0の割り付けた方について説明する。
シンボル値0の割り付けに関し、以下の2つのルールを定める。
(ルール1) メモリセルMC1、MC2のレベルが共に最下位レベルにある場合、シンボル値は0である。
(ルール2) メモリセルMC1、MC2のレベルが共に2番目に低いレベルにある場合、シンボル値は0である。
シンボル値0の場合、原則としてルール1に基づいて記録するが、エラーが生じた結果レベルがシフトしてしまった場合を考慮してルール2も定めている。
次に、シンボル値0以外の割り付け方について説明する。
シンボル値1〜(p−1)/2は、図6に示すように、メモリセルMC1の2番目に低いレベルからメモリセルMC2の最上位レベルにかけて割り付けられている。なお、メモリセルMC1の最上位レベル及びメモリセルMC2の最下位レベルは、シンボル値2h−2−1となり、便宜上、同じシンボル値が割り付けられていることに注意する。
シンボル値−(p−1)/2〜−1は、メモリセルMC2の2番目に低いレベルからメモリセルMC1の最上位レベルにかけて割り付けられている。これは、図6に示すシンボル値を絶対値とする負数とした上で、メモリセルMC1、MC2の役割を交換したものである。
便宜上、同じシンボル値が割り付けられていることに注意する。なお、メモリセルMC2の最上位レベル及びメモリセルMC1の最下位レベルは、シンボル値−2h−2+1となり、便宜上、同じシンボル値が割り付けられていることに注意する。
但し、上記の通り、メモリセルMC1、MC2の各レベルには2つのシンボル値が割り付けられているため、いずれのシンボル値を採用するかについて以下のルールを定める。
(ルール3) シンボル値が1〜2h−2−1の場合、メモリセルMC2を最下位レベルにする。実際のシンボル値はメモリセルMC1によって表す。
(ルール4) シンボル値が2h−2〜(p−1)/2の場合、メモリセルMC1を最上位レベルにする。実際のシンボル値はメモリセルMC2によって表す。
(ルール5) シンボル値が−2h−2+1〜−1の場合、メモリセルMC1を最下位レベルにする。実際のシンボル値はメモリセルMC2によって表す。
(ルール6) シンボル値が−(p−1)/2〜−2h−2の場合、メモリセルMC2を最上位レベルにする。実際のシンボル値はメモリセルMC1によって表す。
メモリセルMCのレベルとシンボル値との対応は、実際にはメモリシステム上でコード語シンボルをバイナリ表現に変えて、さらにメモリシステムへの読み出し書き込み回路でメモリセルMCのレベルに対応付けるための変換をする入出力システムによって実行される。
また、2つのメモリセルMC1、MC2を用いるため、これらメモリセルMC1、MC2を多値の相補対として構成し、読み出しや書き込みのときに相互に参照メモリセルとして用いることもできる。このように、メモリセルMCのレベルにさらに参照レベルの考え方を導入する等については、本発明の本質ではないため説明は割愛するが、メモリセルのレベルとシンボル値の関連付けについては容易に拡張できるものである。
次に、以上のようにシンボル値の割り付けを前提に、いくつかのエラー発生パターンを検証していく。ここで扱うエラーは、レベルが上又は下に一つだけシフトするものであり、コードの読み書きの際や、記憶状態の劣化によって生じるエラーを想定している。なお、図7〜図11において、太い実線のレベルは、正しい状態のレベルを示し、細い実線は、エラーが生じた場合のレベルを示している。
図7は、シンボル値0を記録した場合に生じるエラーを示す図である。
ルール1から、シンボル値0は、メモリセルMC1、MC2が共に最下位レベルの状態に割り当てられている。したがって、メモリセルMC1のみにエラーが生じた場合、図7上図に示す通り、エラー発生後のシンボル値は1となる。この場合、エラー量は+1となる。また、メモリセルMC2のみにエラーが生じた場合、図7上図に示す通り、エラー発生後のシンボル値は−1となる。この場合、エラー量は−1となる。一方、メモリセルMC1、MC2双方にエラーが生じた場合には、図7下図に示す通り、ルール2からシンボル値0として読み出すことになる。以上から、シンボル値が0の場合に生じるエラーは、エラー量±1の範囲で収まる。
図8Aは、一般的なシンボル値であるシンボル値6を記録した場合に生じるエラーを示す図である。
メモリセルMC1にのみエラーが生じた場合、エラー発生後のシンボル値は5又は7となる。この場合、エラー量は±1となる。メモリセルMC2にのみエラーが生じた場合、エラー発生後のシンボル値は、メモリセルMC2のみを考えた場合、2h−2となる。しかし、メモリセルMC1が中間レベルであるため、メモリセルMC1が示すシンボル値は無視される。したがって、シンボル値は、メモリセルMC2が示す6になる。この場合、エラー量は0となる。また、メモリセルMC1、MC2に共にエラーが生じた場合でも、メモリセルMC2のシンボル値は無視されるため、エラー量は±1となる。以上から、シンボル値が6の場合に生じるエラーは、エラー量±1の範囲で収まる。
図8Bは、一般的なシンボル値であるシンボル値−6を記録した場合に生じるエラーを示す図である。
メモリセルMC2にのみエラーが生じた場合、エラー発生後のシンボル値は−5又は−7となる。この場合、エラー量は±1となる。メモリセルMC1にのみエラーが生じた場合、エラー発生後のシンボル値は、メモリセルMC1のみを考えた場合、−2h−2となる。しかし、メモリセルMC2が中間レベルであるため、メモリセルMC1が示すシンボル値は無視される。したがって、シンボル値は、メモリセルMC2が示す−6になる。この場合、エラー量は0となる。また、メモリセルMC1、MC2に共にエラーが生じた場合でも、メモリセルMC1のシンボル値は無視されるため、エラー量は±1となる。以上から、シンボル値−6を記録した場合に生じるエラーは、エラー量±1の範囲で収まる。
図9Aは、一般的なシンボル値であるシンボル値2h−2+4を記録した場合に生じるエラーを示す図である。
メモリセルMC2にのみエラーが生じた場合、エラー発生後のシンボル値は2h−2+3又は2h−2+5となる。この場合、エラー量は±1となる。メモリセルMC1にのみエラーが生じた場合、エラー発生後のシンボル値は、メモリセルMC1のみを考えた場合、2h−2−2となる。しかし、メモリセルMC2が中間レベルであるため、メモリセルMC1が示すシンボル値は無視される。したがって、シンボル値は、メモリセルMC2が示す2h−2+4になる。この場合、エラー量は0となる。また、メモリセルMC1、MC2に共にエラーが生じた場合でも、メモリセルMC1のシンボル値は無視されるため、エラー量は±1となる。以上から、シンボル値2h−2+4を記録した場合に生じるエラーは、エラー量±1の範囲で収まる。
図9Bは、一般的なシンボル値であるシンボル値−2h−2−4を記録した場合に生じるエラーを示す図である。
メモリセルMC1にのみエラーが生じた場合、エラー発生後のシンボル値は2h−2−3又は2h−2−5となる。この場合、エラー量は±1となる。メモリセルMC2にのみエラーが生じた場合、エラー発生後のシンボル値は、メモリセルMC2のみを考えた場合、−2h−2+2となる。しかし、メモリセルMC1が中間レベルであるため、メモリセルMC2が示すシンボル値は無視される。したがって、シンボル値は、メモリセルMC2が示す−2h−2+2になる。この場合、エラー量は0となる。また、メモリセルMC1、MC2に共にエラーが生じた場合でも、メモリセルMC1のシンボル値は無視されるため、エラー量は±1となる。以上から、シンボル値−2h−2+2を記録した場合に生じるエラーは、エラー量±1の範囲で収まる。
図10Aは、メモリセルMC1、MC2の境界辺りに割り付けられたシンボル値2h−2を記録した場合に生じるエラーを示す図である。
メモリセルMC2にのみエラーが生じた場合、エラー発生後のシンボル値は2h−2+1又は2h−2−1となる。この場合、エラー量は±1となる。メモリセルMC1にのみエラーが生じた場合、エラー発生後のシンボル値は、メモリセルMC1のみを考えた場合、2h−2―2となる。しかし、メモリセルMC2が中間レベルであるため、メモリセルMC1が示すシンボル値は無視される。したがって、シンボル値は、メモリセルMC2が示す2h−2になる。この場合、エラー量は0となる。一方、メモリセルMC1、MC2に共にエラーが生じた場合であって、メモリセルMC2が最下位レベルにある場合、エラー発生後のシンボル値は2h−2−2となる。この場合、エラー量は−2となる。以上から、シンボル値2h−2を記録した場合に生じるエラーは、エラー量−2〜+1の範囲となる。
図10Bは、メモリセルMC1、MC2の境界辺りに割り付けられたシンボル値−2h−2を記録した場合に生じるエラーを示す図である。
メモリセルMC1にのみエラーが生じた場合、エラー発生後のシンボル値は−2h−2−1又は−2h−2+1となる。この場合、エラー量は±1となる。メモリセルMC2にのみエラーが生じた場合、エラー発生後のシンボル値は、メモリセルMC2のみを考えた場合、−2h−2+2となる。しかし、メモリセルMC1が中間レベルであるため、メモリセルMC2が示すシンボル値は無視される。したがって、シンボル値は、メモリセルMC1が示す−2h−2になる。この場合、エラー量は0となる。一方、メモリセルMC1、MC2に共にエラーが生じた場合であって、メモリセルMC1が最下位レベルにある場合、エラー発生後のシンボル値は−2h−2+2となる。この場合、エラー量は+2となる。以上から、シンボル値−2h−2を記録した場合に生じるエラーは、エラー量−1〜+2の範囲となる。
図11Aは、メモリセルMC1、MC2の境界辺りに割り付けられたシンボル値2h−2−2を記録した場合に生じるエラーを示す図である。
メモリセルMC1にのみエラーが生じた場合、エラー発生後のシンボル値は2h−2−1又は2h−2−3となる。この場合、エラー量は±1となる。メモリセルMC2にのみエラーが生じた場合、エラー発生後のシンボル値は、メモリセルMC2のみを考えた場合、2h−2となる。しかし、メモリセルMC1が中間レベルであるため、メモリセルMC2が示すシンボル値は無視される。したがって、シンボル値は、メモリセルMC1が示す2h−2−2になる。この場合、エラー量は0となる。一方、メモリセルMC1、MC2に共にエラーが生じた場合であって、メモリセルMC1が最上位レベルにある場合、エラー発生後のシンボル値は2h−2となる。この場合、エラー量は+2となる。以上から、シンボル値2h−2−2を記録した場合に生じるエラーは、エラー量−1〜+2の範囲となる。
図11Bは、メモリセルMC1、MC2の境界辺りに割り付けられたシンボル値−2h−2+2を記録した場合に生じるエラーを示す図である。
メモリセルMC2にのみエラーが生じた場合、エラー発生後のシンボル値は−2h−2+1又は−2h−2+3となる。この場合、エラー量は±1となる。メモリセルMC1にのみエラーが生じた場合、エラー発生後のシンボル値は、メモリセルMC1のみを考えた場合、−2h−2となる。しかし、メモリセルMC2が中間レベルであるため、メモリセルMC1が示すシンボル値は無視される。したがって、シンボル値は、メモリセルMC2が示す−2h−2+2になる。この場合、エラー量は0となる。一方、メモリセルMC1、MC2に共にエラーが生じた場合であって、メモリセルMC2が最上位レベルにある場合、エラー発生後のシンボル値は−2h−2となる。この場合、エラー量は−2となる。以上から、シンボル値−2h−2+2を記録した場合に生じるエラーは、エラー量−2〜+1の範囲となる。
ここで、メモリセルMC1、MC2に対するシンボル値(Zpの要素)のうち最小値及び最大値の割り付けについて言及しておく。シンボル値のうち最小値及び最大値の割り付けは、メモリセルMC1、MC2に設定できるレベルによっては不定になることがある。すなわち、シンボル値(p−1)/2、−(p−1)/2がそれぞれメモリセルMC1、MC2の最上位レベルに割り付けられて、メモリセルMC1、メモリセルMC2が共に最上位レベルにある場合、シンボル値が(p−1)/2、−(p−1)/2のいずれであるかを一意に決めることができない。
そこで、シンボル値(p−1)/2、−(p−1)/2をメモリセルのレベル数に依らず、図12A、図12Bのように割り当てる。すなわち、シンボル値(p−1)/2、−(p−1)/2の割り当てルールは以下のようになる。
(ルール7) メモリセルMC1、MC2が共に最上位レベルにある場合、シンボル値として最大値(p−1)/2を割り当てる。
(ルール8) メモリセルMC1、MC2が共に2番目に高いレベルにある場合、シンボル値として最小値−(p−1)/2を割り当てる。
ところで、メモリセルMC1、MC2のレベル数とシンボル数の選択によっては、最上位レベルにシンボル値を割り当てることができない場合もある。そこで、レベルに対するシンボル値の割り付けルールとして更にルールを定める。
(ルール9) メモリセルMC1のレベルが最上位レベルであり、且つ、メモリセルMC2のレベルが(p−1)/2−1以上のシンボル値に割り当てられているレベル以上、最上位レベルより下のレベルである場合、シンボル値を(p−1)/2−1とする。
(ルール10) メモリセルMC2のレベルが最上位レベルであり、且つ、メモリセルMC1のレベルが−(p−1)/2+1以上のシンボル値に割り当てられているレベル以上、最上位レベルより下のレベルである場合、シンボル値を−(p−1)/2+1とする。
(ルール11) メモリセルMC1、MC2が共に3番目に高いレベルの状態を−(p−1)/2とする。
このようにシンボル値の最小値及び最大値をメモリセルMC1、MC2のレベルに割り当てることで、シンボル値の最小値及び最大値が不定になることはない。
以下において、メモリセルMC1、MC2には、シンボル数よりも多いレベル数を有しており、シンボル値±(p−1)/2−1に割り当てられたレベルと最上位レベルとの間に2つ以上のレベルを有しているものとする。
図13Aは、シンボル値(p−1)/2を記録した場合に生じるエラーを示す図である。なお、シンボル値が(p−1)/2の場合、ルール7から、メモリセルMC1、MC2が共に最上位レベルとなる。
メモリセルMC1にのみエラーが生じた場合、メモリセルMC1のレベルは、2番目に高いレベルとなっている。したがって、ルール6から、シンボル値は−(p−1)/2+1となる。この場合のエラー量は、{−(p−1)/2+1}−(p−1)/2=−p+2≡2となる。メモリセルMC2にのみエラーが生じた場合、メモリセルMC2のレベルは、2番目に高いレベルとなっている。したがって、ルール4から、シンボル値は(p−1)/2−1となる。この場合のエラー量は、−1となる。メモリセルMC1、MC2に共にエラーが生じた場合、ルール8から、シンボル値は−(p−1)/2となる。この場合のエラー量は、−(p−1)/2−(p−1)/2=−p+1≡1となる。以上から、シンボル値(p−1)/2を記録した場合に生じるエラーは、エラー量−1〜+2の範囲となる。
図13Bは、シンボル値が−(p−1)/2を記録した場合に生じるエラーを示す図である。なお、シンボル値が−(p−1)/2の場合、ルール8から、メモリセルMC1、MC2が共に2番目に高いレベルとなる。
メモリセルMC1にエラーが生じ、最上位レベルになっている場合について検討する。メモリセルMC2にエラーが生じ、最上位レベルになっている場合、ルール7から、シンボル値は(p−1)/2となる。この場合のエラー量は−1となる。メモリセルMC2にエラーが生じなかった場合、ルール9から、シンボル値は(p−1)/2−1となる。この場合のエラー量は−2となる。メモリセルMC2にエラーが生じ、3番目に高いレベルになっている場合、ルール9から、シンボル値は(p−1)/2−1となる。この場合のエラー量は−2となる。
メモリセルMC1にエラーが生じなかった場合について検討する。メモリセルMC2にエラーが生じ、最上位レベルになっている場合、ルール10から、シンボル値は−(p−1)/2+1となる。この場合のエラー量は+1となる。メモリセルMC2にエラーが生じ、3番目に高いレベルになっている場合、(p−1)/2−1となる。この場合のエラー量は−2となる。
メモリセルMC1にエラーが生じ、3番目に高いレベルになっている場合について検討する。メモリセルMC2にエラーが生じ、最上位レベルになっている場合、シンボル値は−(p−1)/2+1となる。この場合のエラー量は+1となる。メモリセルMC2にエラーが生じなかった場合、シンボル値は−(p−1)/2+1となる。この場合のエラー量は+1となる。メモリセルMC2にエラーが生じ、3番目に高いレベルになっている場合、ルール11から、シンボル値は−(p−1)/2となる。この場合エラーは生じていない。
以上から、シンボル値−(p−1)/2を記録した場合に生じるエラーは、エラー量−2〜+1の範囲となる。
図14A、図14Bは、メモリセルMC1、MC2のレベル数がZpの要素数よりも多い場合で、シンボル値(p−1)/2−1、−(p−1)/2+1が割り当てられているレベルと、メモリセルMC2、MC1の最上位レベルとの間に1つのレベルを有する場合について示している。
このような割り付けの場合、シンボル値が(p−1)/2、−(p−1)/2の場合に生じるエラーの状態は図13A、図13Bに示す場合と全く同じになる。これは、3番目に高いレベルになっている場合、ルール11から、シンボル値が図13A、図13Bに示す場合と同じになるからである。したがって、ここでは、シンボル値が(p−1)/2−1、−(p−1)/2+1の場合に生じるエラーについて検討する。
図14Aは、シンボル値(p−1)/2−1を記録した場合に生じるエラーを示す図である。なお、シンボル値が(p−1)/2−1の場合、正しくは、メモリセルMC1が最上位レベル、メモリセルMC2が3番目に高いレベルとなる。
メモリセルMC1にのみエラーが生じた場合、メモリセルMC2が中間レベルであるため、エラーは生じない。一方、メモリセルMC2にのみエラーが生じ、2番目に高いレベル、4番目に高いレベルになっている場合、シンボル値はそれぞれ(p−1)/2−1、(p−1)/2−2となる。この場合のエラー量は、それぞれ0、−1となる。
メモリセルMC1、MC2に共にエラーが生じた場合、シンボル値は−(p−1)/2、(p−1)/2−2となる。この場合のエラー量はそれぞれ2、−1となる。
以上から、シンボル値(p−1)/2−1を記録した場合に生じるエラーは、エラー量−1〜+2の範囲となる。
図14Bは、シンボル値−(p−1)/2+1を記録した場合に生じるエラーを示す図である。なお、シンボル値が−(p−1)/2+1の場合、正しくは、メモリセルMC1が3番目に高いレベル、メモリセルMC2が最上位レベルとなる。
メモリセルMC1にのみエラーが生じ、2番目に高いレベル、4番目に高いレベルになっている場合、シンボル値はそれぞれ−(p−1)/2+1、−(p−1)/2+2となる。この場合のエラー量はそれぞれ0、+1となる。
メモリセルMC2にのみエラーが生じた場合、メモリセルMC1が中間レベルにあるため、エラーは生じない。
メモリセルMC1、MC2に共にエラーが生じた場合、シンボル値は−(p−1)/2、−(p−1)/2+2となる。この場合のエラー量はそれぞれ−1、+1となる。
以上から、シンボル値−(p−1)/2+1を記録した場合に生じるエラーは、エラー量±1の範囲となる。
図15A、図15Bは、メモリセルMC1、MC2のレベル数がZpの要素数と合致した場合で、シンボル値(p−1)/2−1、−(p−1)/2+1が割り当てられているレベルと、メモリセルMC2、MC1の最上位レベルとの間に無駄なラベルが一つもない場合について示している。
このような割り付けの場合、シンボル値(p−1)/2、−(p−1)/2を記録した場合に生じるエラーの状態は図13A、図13Bに示す場合と全く同じになる。これは、3番目に高いレベルになっている場合、ルール11から、シンボル値が図13A、図13Bに示す場合と同じになるからである。したがって、ここでは、シンボル値(p−1)/2−1、−(p−1)/2+1を記録した場合に生じるエラーについて検討する。
図15Aは、シンボル値(p−1)/2−1を記録した場合に生じるエラーを示す図である。なお、シンボル値(p−1)/2−1の場合、正しくは、メモリセルMC1が最上位レベル、メモリセルMC2が2番目に高いレベルとなる。
メモリセルMC1にのみエラーが生じた場合、シンボル値は−(p−1)/2となる。この場合のエラー量は+2となる。
メモリセルMC2にのみエラーが生じた場合、シンボル値は(p−1)/2、(p−1)/2−2となる。この場合のエラー量はそれぞれ+1、−1となる。
メモリセルMC1、MC2に共にエラーが生じた場合、シンボル値は−(p−1)/2+1、(p−1)/2−2となる。この場合のエラー量はそれぞれ3、−1となる。
以上から、シンボル値(p−1)/2−1を記録した場合に生じるエラーは、エラー量−1〜+3の範囲となる。
図15Bは、シンボル値−(p−1)/2+1を記録した場合に生じるエラーを示す図である。なお、シンボル値が−(p−1)/2+1の場合、正しくは、メモリセルMC1が2番目に高いレベル、メモリセルMC2が最上位レベルとなる。
メモリセルMC1にのみエラーが生じた場合、シンボル値は+(p−1)/2、−(p−1)/2+2となる。この場合のエラー量はそれぞれ−2、+1となる。
メモリセルMC2にのみエラーが生じた場合、シンボル値は−(p−1)/2となる。この場合のエラー量は−1となる。
メモリセルMC1、MC2に共にエラーが生じた場合、シンボル値は+(p−1)/2−1、−(p−1)/2+2となる。この場合のエラー量はそれぞれ−3、+1となる。
以上から、シンボル値−(p−1)/2+1を記録した場合に生じるエラーは、エラー量−3〜+1の範囲となる。
これまで見てきたように多レベルのメモリセルを用いた上記実施例では、エラー量は最大±3である。したがって、リー・メトリックが3のエラーに対応できれば、レベルの誤書き込みも含めて、レベルの誤認識のエラーに対応することができる。さらに、シンドローム変換法を使用すれば2つのコード語シンボルのエラーまでは完全に解を求めることができる。換言すれば、シンドローム変換法によって、2つのコード語シンボルを構成する4つのメモリセルの全部又は一部に不良がある場合でも対応することができる。
そこで、このように多レベルのメモリセルをコード語シンボルの記憶に利用するために、ビットストリングとしてメモリシステムに入力されたデータをメモリセルのレベルに割り付ける方法を簡単に説明する。以下に説明する方法では、バイナリデータとしてのコード語シンボルをメモリシステムに保存する場合と同じ変換をする。
メモリシステムにバイナリのビットストリングで入ってくるデータをhビットずつの塊としてみて、それぞれを2進数の各桁の数と考える。桁数をδとすると数37のようなデータ語D(h)となる。ここで、dδ−1、dδ−2、…、d、dはhビットからなる単位データである。
[数37]

続いて、数37に示すデータ語D(h)を、数38のようなp進数のデータ語D(h)に変換する。ここで、aδ、aδ−1、…、a、aはhビットの塊が表わすp進数表示のデータコードXである。
[数38]

先に説明したように適当に素数pを選択すればこのときの桁数はδ+1に抑えられる。しかし、多レベルのメモリセルを使用するときはレベル数を無闇には増やせないため、レベル数とそれに適合する素数pを予め決めておく。その上で条件に合うデータ語D(h)を決めることになる。すなわち、メモリセルのレベル数から一括処理するデータのビット数Mを決めることになる。後に具体例でこの決め方を説明する。
続いて、データコードXと生成行列GからC=XGとして、p−1個のコード語シンボルを作ることによって入力データがコードCになる。このコードCの各コード語シンボルは表現の代表元を−p/2からp/2の整数で表すことによって、2h−2個の多レベルを有するメモリセルで構成されたメモリシステムに保存する。
次に、具体例によって説明する。p−LM−ECCシステムで一括処理するデータのビット数M、単位データのビット数hと訂正可能なエラーのリー・メトリックの和の最大値εとの間にはp≧M/h+ε+3なる関係が成立することは上述の通りである。また素数pは、2h−1<p<2の範囲で選択することも上述の通りである。
そこで、メモリセルのレベル数として、1メモリセル当たり8レベルが取れるとする。この場合、h=5であり、素数pの候補は17、19、23、29、31のいずれかである。2つのメモリセルを用いる方法では32個のコード語シンボルを扱うことができるため、32を超えない条件を満たす素数pとして31を選択する。
εを2にすると、M≦130になる。バイト単位でデータを扱うとして、16バイトに相当する128ビットのデータに対して一括にECC処理を行う場合、M=128でδ=26となる。したがって、メモリシステム内部で値を0と置くダミーのシンボル数κはκ=p−δ−ε−3=31−26−2−3から0となる。データから見て余分に必要となるシンボル数である冗長シンボル数(n−δ)は(n−δ)=p−1−δ=31−1−26から4となる。その結果、メモリシステムとしての冗長率は、データの桁数と余分に増加した桁数との比として、4/26=2/13となる。これはエラー訂正を可能にするために余分に必要なメモリセルの増加率とみなせる。
なお、ここで説明した多値レベルのメモリセルを2つ用いて、メモリセル1つ当たりのレベル数の4倍弱のシンボル数を記憶する方法は、ECCを用いない場合でも有効である。ビットデータをp進数で表し、各桁の数をZpの要素としてレベルに対応させればよいので、桁数δの2倍がMビットを記憶する多値レベルのメモリセルの数にほぼ等しい。一方、従来の多値レベルのメモリセルの使用方法を用いると2h−2のレベルのメモリセルは、(h−2)ビットの記憶ができるので、Mビットの記憶にはM/(h−2)=hδ/(h−2)=δ(1−2/h)−1のメモリセル数で良い。
従って、本実施形態におけるp−LM−ECCシステムでは、Mビットはnシンボルからなるコードで記憶され、1シンボル当たり2メモリセル用いるため、2n=2(p−1)のメモリセルが必要となる。そこで、実質的な冗長度、すなわちデータ記憶の何倍の容量が必要となるかは2(p−1)/δ(1−2/h)−1である。具体的には、h=5の場合、p=31でδ=26なので、実質冗長度は60/43=1.40となる。ε=2であるため、最大2対のメモリセルのエラー訂正ができる。
次の具体例として、1メモリセル当たりのレベル数を8、εを4とした場合について説明する。なお、この具体例の場合、最大4対のメモリセルのエラー訂正が可能である。
先ず、この場合における本実施形態に係るメモリシステムの冗長率を示す。h=5とすると、素数pとして例えば31を選択することができる。ε=4からM≦120となるため、一括処理するデータのビット数Mとして、例えばM=120(15バイト)を設定する。この場合、δ=24となり、ダミーのシンボル数κはκ=p−δ−ε−3=31−24−4−3から0となる。したがって、冗長シンボル数(n−δ)は(n−δ)=p−1−δ=31−1−24から6となる。以上から、本メモリシステムの冗長率は、6/24=3/12となる。
続いて、ECCシステムを使用しない従来のメモリシステムに対する冗長度を示す。従来のメモリシステムの場合、120ビットのデータ記憶に用いるレベル数8(3ビット)のメモリセルの数は40となる。これに対し、本実施形態の場合、メモリセルの数は60となる。以上から、従来のメモリシステムに対する冗長度は、60/40=1.5となる。
次の具体例として、1メモリセル当たりのレベル数を16、εを4とした場合について説明する。なお、この具体例の場合、最大4対のメモリセルのエラー訂正が可能である。
先ず、この場合における本実施形態に係るメモリシステムの冗長率を示す。h=6とすると、素数pとして例えば61を選択することができる。ε=4からM≦324となるため、一括処理するデータのビット数Mとして、例えばM=324(40.5バイト)を設定する。この場合、δ=54となり、ダミーのシンボル数κはκ=p−δ−ε−3=61−54−4−3から0となる。したがって、冗長シンボル数(n−δ)は(n−δ)=p−1−δ=61−1−54から6となる。以上から、本メモリシステムの冗長率は、6/54=1/19となる。
続いて、ECCシステムを使用しない従来のメモリシステムに対する冗長度を示す。従来のメモリシステムの場合、120ビットのデータ記憶に用いるレベル数16(4ビット)のメモリセルの数は81となる。これに対し、本実施形態の場合、メモリセルの数は120となる。以上から、従来のメモリシステムに対する冗長度は、120/81≒1.48となる。
以上、3つの具体例を通して、1シンボルを多レベルのメモリセル2つで記憶する場合の冗長度を見てきたが、1メモリセルのレベル数、選択する素数p、及び訂正可能なリー・メトリックの和の最大値εと、最低救済率、一括処理するデータのビット数の最大値Mmax、一括処理するデータのビット数M、単位データ数δ、従来のメモリシステムで必要なメモリセル数、及び従来のメモリシステムに対する冗長度との関係をまとめた表を図16に示す。図16において、最大救済率については、エラー量に依らずn=p−1から最低でも2つのコード語シンボルを訂正できるため、2/(p−1)としている。
図16の下線で示すように、例えば、従来のメモリシステムに対する冗長度を1.5以下にすることを条件とした場合、レベル数8以上でε=4以下を選択できることが分かる。但し、εが小さい場合他のコードを正しいとして訂正する誤訂正も増えるため、冗長度が許す限りはεをできるだけ大きくすることが望ましい。また、図16から、レベル数2、すなわち単ビットのメモリセルにも適用することは現実的ではないことが分かる。
[第2の実施形態]
次に、本発明の第2の実施形態として、単レベルのメモリセルを用いたメモリシステムに応用した場合について説明する。
この場合、メモリセルのレベル数に拘束されないため、一括処理するデータを大きくすることができ、冗長度を非常に小さくできる。
エンコードの手順は、多レベルのメモリセルを用いた場合と同様であるが、先ず、一括処理するデータのビット数Mを決定してから、素数pの選択を行う。
具体例として、M=4096(512バイト)とした場合の素数pの選択例を説明する。ここでは、εを4とする。この場合、γ=ε+1=5となる。
先ず、単位データのビット数をh=8と仮定する。この場合、上述した素数pの選択条件によれば、素数pの選択範囲は、2h−1<p<2から128<p<256となる。しかし、この場合、p≧M/h+ε+3+κから少なくともp≧4096/8+4+3=519を具備する必要があるため、素数pを選択することはできない。
そこで、単位データのビット数をh=9とする。この場合、素数pの選択範囲は、256<p<512、且つ、p≧4096/9+4+3=462.1となる。したがって、素数pを463<p<512の範囲から選択することができる。そこで、ダミーシンボル数κが最小となるよう、この範囲内の素数467、479、487、491、499、503、509から、最小の467を素数pとして選択する。
素数をp=467とした場合、一括処理する単位データ数はδ=456であり、冗長ビット数は、h(γ+1+κ)=9(4+2+4)=90となる。その結果、ECCシステムを使用しない従来のメモリシステムに対する冗長度は、(4096+90)/4096=1.02となり、多レベルのメモリセルを用いた場合よりも小さい。しかし、一方では、最低救済率は2/466=1/233となり、多レベルのメモリセルに比べて1桁程度小さくなってしまう。
以下、単レベルのメモリセルを用いたメモリセルシステムにおいて、いくつかの条件設定に対する冗長度を評価する。
図17〜図22に示す表は、訂正可能なエラーのリー・メトリックの和の最大値ε、及び一括処理するデータのビット数Mと、単位データ数δ、δ+ε+3(素数pの選択条件)、2h−1<p<2(素数pの選択条件)、ダミーシンボル数κ、及び冗長度を示す冗長ビット数h(p−1−δ)との関係を示している。一括処理するデータのビット数Mは、256、512、1024、2048、4096としている。
なお、比較例として、GF(2)の要素数と、このGF(2)を利用したRS−ECCシステムにおける冗長ビット数も併せて示している。ここで示す要素(シンボル)数及び冗長ビット数は、素数pに対して決定する単位データのビット数hのまとまりを1シンボルとして算出している。
図17は、2つのコード語シンボルのエラーを訂正可能にした場合(ε=2)の表である。なお、図17に示すRS−ECCシステムは、2シンボルまでのエラー訂正を可能とするものである。
素数pの選択範囲は、一括処理するデータのビット数Mによって制限されるため、M=256(32バイト)ではp=53、M=512(64バイト)ではp=79、M=1024(128バイト)ではp=137、M=4096(512バイト)ではp=461となっている。また、M=2048(256バイト)では素数pを選択することができない。
2つのコード語シンボルに生じたエラーについては、比較例となるRS−ECCシステムでも訂正することができる。したがって、冗長ビット数を小さくできない場合、本実施形態におけるp−LM−ECCシステムを適用してもあまり意味がない。
図17に示す通り、ε=2の場合、p−LM−ECCシステムの冗長ビット数は、RS−ECCシステムの冗長ビット数よりも小さくなることはない。したがって、ε=2の場合、RS−ECCシステムとの比較において有利な点はない。
図18は、3つのコード語シンボルのエラーを訂正可能にした場合(ε=3)の表である。なお、図18に示すRS−ECCシステムは、3シンボルまでのエラー訂正を可能とするものである。
ε=3の場合、図18に示すε=2の場合に対し、M=512(64バイト)における素数がp=83、M=4096(512バイト)における素数がp=463となる点において異なる。
この場合も、RS−ECCシステムの冗長ビット数よりも小さくなることはなく、RS−ECCシステムとの比較において有利な点はない。
図19は、4つのコード語シンボルのエラーを訂正可能にした場合(ε=4)の表である。なお、図19に示すRS−ECCシステムは、4シンボルまでのエラー訂正を可能とするものである。
ε=4の場合、図18に示すε=3の場合に対し、M=4096(512バイト)における素数がp=467となる点において異なる。
この場合も、RS−ECCシステムの冗長ビット数よりも小さくなることはなく、RS−ECCシステムとの比較において有利な点はない。
図20は、6つのコード語シンボルのエラーを訂正可能にした場合(ε=6)の表である。なお、図20に示すRS−ECCシステムは、6シンボルまでのエラー訂正を可能とするものである。
ε=6の場合、図19に示すε=4の場合と選択する素数pは変わらない。
p−LM−ECCシステムを用いた場合、6シンボルのエラー訂正を可能に構成されたRS−ECCシステムの冗長ビット数よりも小さくすることができ有利である。但し、p−LM−ECCシステムでは、全てのエラーバターンを訂正できない事を考慮する必要がある。しかし、エラーが生じたシンボル数が2つ以内の場合、完全にエラーの解を求めることができ、さらに、エラーが生じたシンボル数が3つ以上であっても、訂正可能なリー・メトリックの和が6以内であればエラー訂正可能である。したがって、エラーが生じたシンボル数が6つまでならある程度エラー訂正が可能である。以上の点からε=6の場合、p−LM−ECCシステムの適用は有効である。
図21は、7つのコード語シンボルのエラーを訂正可能にした場合(ε=7)の表である。なお、図21に示すRS−ECCシステムは、7シンボルまでのエラー訂正を可能とするものである。
ε=7の場合、図20に示すε=6の場合に対し、M=256(32バイト)における素数がp=59、M=512(64バイト)における素数がp=89、M=1024(128バイト)における素数がp=139となる点において異なる。
p−LM−ECCシステムを用いた場合、7シンボルのエラー訂正を可能に構成されたRS−ECCシステムの冗長ビット数よりも小さくすることができ有利である。この場合でも、全てのエラーバターンに対応することはできないが、2シンボルまでのエラーを完全に解を求めることができる点、最大7シンボルのエラー訂正が可能である点から、有効である。
図22は、8つのコード語シンボルのエラーを訂正可能にした場合(ε=8)の表である。なお、図22示すRS−ECCシステムは、8シンボルまでのエラー訂正を可能とするものである。
ε=8の場合、図21に示すε=7の場合と選択する素数pは変わらない。
p−LM−ECCシステムを用いた場合、8シンボルのエラー訂正を可能に構成されたRS−ECCシステムの冗長ビット数よりも小さくすることができる。この場合でも、全てのエラーバターンに対応することはできないが、2シンボルまでのエラーを完全に解を求めることができる点、最大8シンボルのエラー訂正が可能である点から有効である。
以上、図17〜図22に示すように、p−LM−ECCシステムがRS−ECCシステムに対して有利性を発揮できるのは以下の場合である。つまり、一括処理するデータのビット数がM=4096(512バイト)の場合、ε=4〜8では、選択できる素数はp=467と変わらず、冗長ビット数も90となる。したがって、ε=8とすることが望ましい。同様に、M=1024(128バイト)ではε=6、M=512(64バイト)ではε=6、M=256(32バイト)ではε=6とすることで、RS−ECCシステムに対する有利性を発揮できる。
[まとめ]
ここでは、改めて上記実施形態におけるp−LM−ECCシステムの、エンコード手順、デコード手順、及びシステム構成をまとめる。
エンコード手順を図2を用いてまとめる。図2において、Zpを決める素数p、1シンボルにおけるエラー量が1の場合の訂正可能なシンボル数ε(=γ−1)、シンボルのバイナリ表現の桁数h、及び一括処理するデータのビット数M(=δh)は既に決まっているものとする。また、n=p−1、k=n−γなる関係があるものとする。
エンコードの手順は、以下の通り、2つの段階に大別できる。
(手順1) 先ず、外部からメモリシステムに入力されたバイナリデータをhビットずつまとめ、数38に示す2進数表現のδ桁のデータ語D(h)に変換する(図2のS1)。
[数39]

続いて、数39で示すデータ語D(h)を、更に、数40に示すp進数表現のδ+1桁のデータ語D(h)に変換する(図2のS2)。
[数40]

(手順2) 先ず、手順1によって得られたZpの要素a〜aδにゼロをκ個だけ追加し、数41に示すデータDのk個の要素a〜ak−1とする。
[数41]

続いて、このデータDに生成行列Gを乗じてコードCのn個のコード語シンボルc〜cを得る(図2のS3)。各コード語シンボルの値は数42に示す通りである。
[数42]

最後に、このコード語シンボルcをメモリセルに記憶する(図2のS4)。
エンコード手順を図3A、図3Bを用いてまとめる。
デコードの手順は、以下の通り以下の通り、7つの手順に大別できる。なお、以下において手順の番号は、エンコードの手順を含めた通し番号となる。また、以下に示す手順3及び手順4は、Zpの各要素(m=0〜p−2)に対して繰り返すことに注意されたい。
(手順3) メモリセルから読み出したコードYを読み出す(図3AのS5)。コードYは数43に示す構成となっている。ここで、eは、コードYの位置jにあるコード語シンボルのエラーのリー・メトリックを示す。
[数43]

続いて、コードYを構成するn個のコード語シンボルの値y(j=1〜n)にjを掛けて、jをZpの数として計算する。シンボル値yは多レベルのメモリセルの場合、レベルから求めることができる。また、一般のバイナリメモリならバイナリデータから得られる数である。コードYにシンドローム行列Hの転置行列を乗じて数44に示すように、シンドロームS〜Sm+εからなるシンドローム系列S(=YH)を得る(図3AのS6)。
[数44]

(手順4) 先ず、訂正可能なシンボル数の上限ε(=γ−1)に対して、q=εS −1を計算し、手順3で求めたシンドロームSからqS〜qSm+εを求める。続いて、このqS〜qSm+εから数45に示す解探索多項式Ψ(x)の係数ψを順次計算する(図3AのS7)。
[数45]

ここで、xεの係数であるψε≠0なら、手順5に進み解を得る。一方、ψε=0なら、解無しとして処理を終了するか、訂正の可能性をさらに探索すべくη=ε−1として、q=ηS −1を計算し、手順4を繰り返し、xηの係数であるψη≠0なら、手順5に進み解を得る。一方、ψη=0なら、解無しとして処理を終了する。この手順4で処理できなくなった場合、対応できないエラー分布であるため、解無しとしてエラー訂正を中止する。
(手順5) 手順4でψε≠0となって解を得られることが分かった場合、手順5、手順6で解を得る。先ず手順5では解の多重度を得るために、数46に示すハッセ微分多項式[Ψ(x)][i]を求める。手順4で得られた係数ψに対して、一連の2項係数を乗じることで掛けることでハッセ微分多項式の係数が得られる(図3AのS9)。
[数46]

(手順6) 得られたハッセ微分多項式に対して、Zpの要素1〜p−1を代入して、0次微分多項式(=Ψ(x))がゼロとなる要素rを全て求める。続いて、数47に示すように、各rに対してn−1次微分多項式はゼロであるが、n次微分多項式はゼロでない次数nを求める(図3BのS10)。
[数47]

得られたrは、エラーが生じたコードのコード語シンボルの位置の逆元であり、それに対応するnは、生じたエラー量から変換された量となる。
(手順7) 手順7では、解の多重度nからエラー量を変換で求める。エラーのあるコード語シンボルの位置はt=r−1となり、解を得るための多項式を得るために行なった変換の逆変換をnに施すことになる。qt=nの関係があるので、e=(qt−1nとすればnから本来のエラー量eを得ることができる。このエラー量eをメモリセルから読み出したコードYのシンボル値yから引いて、訂正されたコードCのシンボル値cを得る(図3BのS11)。
ここまでで、メモリセルに記憶された正しいコードCが得られたので、手順8、手順9によって、メモリシステムに入力されたバイナリデータを求める。
(手順8) 手順7によってエラー訂正されたコードCと生成行列Gから、XG=Cなる多元連立一次方程式を介して、k個のGF(p)の要素a〜ak−1を求める。このうちκ個の要素は、ダミー要素(0)であるため実質δ+1のGF(p)の要素a〜aδが得られたことになる。得られた要素a〜aδから、δ+1桁のp進数表現のデータ語D(h)を作る(図3BのS12)
(手順9) 最後に、このデータ語D(h)をδ桁の2進数表現に変換し、各桁の数字をバイナリ表現にする。以上によってメモリシステムに入力されたバイナリデータの復元が完了する(図3BのS13)。
次に、メモリシステムの構成を図1を用いてまとめる。
メモリシステムは、大別してメモリ部100とp−LM−ECCシステム200とを備える。
外部から入力されたバイナリ表現のデータDは、p進数変換部201に入力される。p進数変換部は、このデータDをδ桁のp進数表現のデータ語D(h)に変換する。
p進数変換部201から出力されたデータ語D(h)は、エンコード部202に入力される。エンコード部202は、このデータ語D(h)に生成行列Gを作用させてGF(p)の要素からなるコードCを生成する。エンコード部202から出力されたコードCは、フラッシュメモリ、PRAM、ReRAM等からなるメモリ部100に入力され記憶される。
メモリ部100から読み出されたコードY(エラーを含むコードC)は、シンドローム生成部203に入力される。シンドローム生成部203は、m=0とした上で、このコードYに対してシンドローム行列Hと、メモリ部100から読み出されたコードYのコード語シンボルの位置を示す数のm乗とを乗じる処理を対角行列を用いて行いシンドロームSを生成する。ここで、シンドロームSがゼロの場合、コードYはエラーを含まないため、コードYはそのままコードCとしてデコード部207で処理される。一方、シンドロームSがゼロでない場合、エラー訂正をするために解探索多項式生成部204に処理が移る。
解探索多項式生成部204は、シンドローム生成部203から出力されたシンドロームSから解探索多項式Ψ(x)を生成する。そのη=γ−1次の次数の係数がゼロでない場合、解を求めるためハッセ微分多項式生成部205に処理が移る。一方、η次の次数の係数がゼロの場合、必要に応じてηから1を減じた新たなηに対して解探索多項式Ψ(x)を求めるべく解探索多項式生成部204に再び処理が移る。これでも尚、η次の係数がゼロの場合、更にmに1を加えて新たなシンドロームSを求めるべくシンドローム生成部203に処理が移る。この一連の処理を、解探索多項式Ψ(x)のη次の係数がゼロになるまで繰り返す。η=γ−2、m=p−2まで繰り返しても、解探索多項式Ψ(x)のη次の係数がゼロであった場合、エラー訂正は不可能であるため、外部にエラー信号NGを出力する。なお、エラー訂正が可能な場合であっても、全てのmについて一連の処理を繰り返して訂正されたコードを求めると一致しないコードが得られる場合がある。この場合は誤訂正の判定ができ、得られたコードの中に正しいコードがある、いわゆるリストエラー訂正となる。
ハッセ微分多項式生成部205は、η次の係数が非ゼロの解探索多項式Ψ(x)からハッセ微分多項式を求め、これらの根rとその根の多重度nをGF(p)の中から抽出する。
コード復元部206は、ハッセ微分多項式生成部205で抽出された根rを用いてt=r−1からコードYにおけるエラーシンボルの位置を求めると共に、多重度nを用いてエラー量eを求める。そして、この結果からコードCを復元する。
コード復元部206で復元されたコードCは、デコード部207に入力される。デコード部207は、このコードCに対して生成行列Gの逆変換を行いp進数表現のデータ語D(h)を再生する。
デコード部で再生されたp進数表現のデータ語D(h)は、バイナリ変換部208に入力される。バイナリ変換部208は、このp進数表現のデータ語D(h)を2進数表現のデータ語D(h)への変換を介してバイナリデータDを生成する。最後にバイナリデータDは読み出しデータとして外部に出力される。
なお、図21では、メモリシステムにp−LM−ECCシステムに内蔵されている場合を示したが、p−LM−ECCシステムは、メモリシステムの外部にあっても良い。
最後に、本発明の実施形態に係るメモリシステムで採用するシンドローム変換方式のエラー訂正能力を改めて説明する。ここでは、最大4シンボルの訂正が可能なp−LM−ECCシステムのエラー訂正能力について、2シンボルの訂正が可能なRS−ECCシステム、及びランダムな4ビットのエラー訂正が可能な2−BCH−ECCシステムとの比較により検討する。
図23は、これら3つのECCシステムのエラー訂正の可否をまとめた表である。表の「エラー」列にある四角形はシンボルを、この四角形の中にある黒点は、エラーが生じたビットをそれぞれイメージしたものである。なお、1シンボルは8ビットで構成されている。
RS−ECCシステムを用いた場合、どの様なエラーであっても2シンボルまでの訂正が可能である。しかし、図23に示す通り、エラーのビット数が少なくても、これが3以上のシンボルに亘る場合には一切訂正することができない。
−BCH−ECCシステムを用いた場合、4ビットまでなら、どの様なエラーが生じても訂正することができる。しかし、エラーが5ビット以上ある場合には、それが例え1シンボルに収まっていてもエラー訂正することはできない。
本発明の実施形態に係るp−LM−ECCシステムを用いた場合、2シンボルに収まるエラーであれば、どの様なエラーであっても訂正することができる。さらに、3以上のシンボルに広がるエラーであっても、そのエラー内容が各シンボルで類似している場合、最大4シンボルまで訂正することができる。p−LM−ECCシステムの場合、4シンボルに亘るエラーを完全に訂正することはできないが、RS−ECCシステムに比べて、冗長度が低い点で有効である。
以上から分かるように、RS−ECCシステムは塊エラーの訂正が得意である一方、ランダムエラーの訂正が不得意である。また、2−BCH−ECCシステムはランダムエラーの訂正が得意である一方、塊エラーの訂正が不得意である。したがって、RS−ECCシステム、2−BCH−ECCシステムでは、メモリシステムの微細化によってランダムエラー及び塊エラーが併発する場合に対応することが困難である。その点、その点、本発明の実施形態に係るp−LM−ECCシステムは、このような塊エラー及びランダムエラーに対応することができるため、微細化されたメモリシステムに最適である。
[その他]
以上、発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加等が可能である。
本発明の実施形態は、3以上のレベル数を有するメモリセルを用いたメモリシステムであれば適用することができる。例えば、フラッシュメモリ、DRAM、PRAM、ReRAMなどを用いたメモリシステムに適用することが可能である。
100・・・メモリ部、200・・・ECCシステム、201・・・p進数変換部、202・・・エンコード部、203・・・シンドローム生成部、204・・・解探索多項式生成部、205・・・ハッセ微分多項式生成、206・・・コード復元部、207・・・デコード部、208・・・バイナリ変換部。

Claims (7)

  1. 一括処理するバイナリデータDをhビット(hは整数)でδ桁(δは整数)のシンボルに分割し、これをk桁(kは整数)のp進数(pは3以上の素数)のデータ語に変換するp進数変換部と、
    前記p進数変換部でp進数に変換されたデータ語からn桁(n=p−1)のhビットで表示可能な桁の数をもつコード語からなる素数pの剰余体ZpよりなるコードCを生成するエンコード部と、
    前記エンコード部で生成されたZpのコードCを書き込みデータとして記憶するメモリ部と、
    前記メモリ部から読み出された読み出しデータYからシンドロームSを生成し、生成されたシンドロームSを用いた演算により前記読み出しデータYをエラー訂正してZpのコードCを再生するエラー訂正部と、
    前記エラー訂正部で再生されたZpのコードCを逆変換してp進数のデータ語を再生するデコード部と、
    前記デコード部で再生されたデータ語を2進数に変換してバイナリデータDを再生するバイナリ変換部と
    を備えたことを特徴とするメモリシステム。
  2. 一括処理するバイナリデータDをhビット(hは整数)でδ桁(δは整数)のシンボルに分割し、これをk桁(kは整数)のp進数(pは3以上の素数)のデータ語に変換し、
    前記p進数に変換されたデータ語からn桁(n=p−1)のhビットで表示可能な桁の数をもつコード語からなる素数pの剰余体ZpよりなるコードCを生成し、
    前記生成されたZpのコードCを書き込みデータとしてメモリ部に記憶し、
    前記メモリ部から読み出された読み出しデータYからシンドロームSを生成し、生成されたシンドロームSを用いた演算により前記読み出しデータYをエラー訂正してZpのコードCを再生し、
    前記再生されたZpのコードCを逆変換してp進数のデータ語を再生し、
    前記再生されたデータ語を2進数に変換してバイナリデータDを再生する
    ことを特徴とするメモリシステムのデータ書き込み・読み出し方法。
  3. 一括処理するバイナリデータDをhビット(hは整数)でδ桁(δは整数)のシンボルに分割し、これをk桁(kは整数)のp進数(pは3以上の整数)のデータ語に変換するp進数変換部と、
    前記p進数変換部でp進数に変換されたデータ語からn桁(n=p−1)のhビットで表示可能な桁の数をもつコード語からなるコードCを生成するエンコード部と、
    複数のメモリセルを有し、少なくとも1又は複数のメモリセルでp段階の物理量レベルを設定可能で、前記物理量レベルによって前記エンコード部で生成されたコードCを前記hビットのコード語の桁の数を書き込みデータとして記憶するメモリ部と、
    前記メモリ部から読み出された読み出しデータYから前記hビットのコード語の桁の数のエラー訂正を行うエラー訂正部と、
    前記エラー訂正部でエラー訂正されたコードCを逆変換してp進数のデータ語を再生するデコード部と、
    前記デコード部で再生されたデータ語を2進数に変換してバイナリデータDを再生するバイナリ変換部と
    を備えたことを特徴とするメモリシステム。
  4. 一括処理するバイナリデータDをhビット(hは整数)でδ桁(δは整数)のシンボルに分割し、これをk桁(kは整数)のp進数(pは3以上の整数)のデータ語に変換し、
    前記p進数に変換されたデータ語からn桁(n=p−1)のhビットで表示可能な桁の数をもつコード語からなるコードCを生成し、
    複数のメモリセルを有し、少なくとも1又は複数のメモリセルでp段階の物理量レベルを設定可能なメモリ部に対し、前記物理量レベルによって前記生成されたコードCを前記hビットのコード語の桁の数を書き込みデータとして記憶し、
    前記メモリ部から読み出された読み出しデータYから前記hビットのコード語単位のエラー訂正を行い、
    前記エラー訂正されたコードCを逆変換してp進数のデータ語を再生し、
    前記再生されたデータ語を2進数に変換してバイナリデータDを再生する
    ことを特徴とするメモリシステムのデータ書き込み・読み出し方法。
  5. 前記メモリ部は、少なくとも2h−2段階の物理量レベルに設定可能な複数のメモリセルを有し、
    (1)2つのメモリセルの両方を最小近辺の物理量レベルに設定したときのデータを0に対応させ、
    (2)2つのメモリセルの両方を最大近辺の物理量レベルに設定したときのデータを−(p−1)/2又は(p−1)/2に対応させ、
    (3)2つのメモリセルのうちの一方のメモリセルを最小の物理量レベルに設定したときの他方のメモリセルの物理量レベルを−1〜−2h−2+1のデータに対応させ、
    (4)2つのメモリセルのうちの前記他方のメモリセルを最小の物理量レベルに設定したときの前記一方のメモリセルの物理量レベルを1〜2h−2−1のデータに対応させ、
    (5)2つのメモリセルのうちの前記一方のメモリセルを最大の物理量レベルに設定したときの前記他方のメモリセルの物理量レベルを2h−2〜(p−1)/2−1のデータに対応させ、
    (6)2つのメモリセルのうちの前記他方のメモリセルを最大の物理量レベルに設定したときの前記一方のメモリセルの物理量レベルを−2h−2〜−(p−1)/2+1のデータに対応させる
    ことを特徴とする請求項1又は3記載のメモリシステム。
  6. 前記エラー訂正部は、
    訂正可能なエラーのリー・メトリックの和の最大値をε=γ−1として、前記シンドロームSの成分S、S、…、Sγ−1について、予め定めた要素η=uSとなるuを求め、新たなシンドロームSを
    [数1]


    によって生成し、
    前記演算に、多項式Ψ(x)を
    [数2]


    によって生成して用いる
    ことを特徴とする請求項1、3及び5のいずれか1項記載のメモリシステム。
  7. h−1≦n≦2(2h−1−1)、訂正可能なエラーのリー・メトリックの和の最大値をεとした場合、δ+ε+2+κ=n(κ=0〜10の整数)なる関係がある
    ことを特徴とする請求項1、3、5及び6のいずれか1項記載のメモリシステム。
JP2010066440A 2010-03-23 2010-03-23 メモリシステム及びメモリシステムのデータ書き込み・読み出し方法 Expired - Fee Related JP4982580B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010066440A JP4982580B2 (ja) 2010-03-23 2010-03-23 メモリシステム及びメモリシステムのデータ書き込み・読み出し方法
US13/011,318 US8448051B2 (en) 2010-03-23 2011-01-21 Memory system and method of data writing and reading in memory systems

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010066440A JP4982580B2 (ja) 2010-03-23 2010-03-23 メモリシステム及びメモリシステムのデータ書き込み・読み出し方法

Publications (2)

Publication Number Publication Date
JP2011198253A true JP2011198253A (ja) 2011-10-06
JP4982580B2 JP4982580B2 (ja) 2012-07-25

Family

ID=44657756

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010066440A Expired - Fee Related JP4982580B2 (ja) 2010-03-23 2010-03-23 メモリシステム及びメモリシステムのデータ書き込み・読み出し方法

Country Status (2)

Country Link
US (1) US8448051B2 (ja)
JP (1) JP4982580B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012185689A (ja) * 2011-03-07 2012-09-27 Toshiba Corp メモリシステム及びメモリコントローラ
US9368197B2 (en) 2014-01-29 2016-06-14 Kabushiki Kaisha Toshiba Memory system

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012123600A (ja) 2010-12-08 2012-06-28 Toshiba Corp メモリシステム及びメモリコントローラ
US9455747B1 (en) * 2013-03-27 2016-09-27 SK Hynix Inc. Parallel chien search with folding and a symbolized minimal polynomial combinational network (S-MPCN)
US10353837B2 (en) 2013-09-09 2019-07-16 Qualcomm Incorporated Method and apparatus to enable multiple masters to operate in a single master bus architecture
US9996488B2 (en) * 2013-09-09 2018-06-12 Qualcomm Incorporated I3C high data rate (HDR) always-on image sensor 8-bit operation indicator and buffer over threshold indicator
CN104102587A (zh) * 2014-07-09 2014-10-15 昆腾微电子股份有限公司 Nvm数据处理方法和装置
US9524207B2 (en) 2014-09-02 2016-12-20 Micron Technology, Inc. Lee metric error correcting code
US11463113B2 (en) * 2016-01-29 2022-10-04 Massachusetts Institute Of Technology Apparatus and method for multi-code distributed storage
KR102504176B1 (ko) * 2016-06-23 2023-03-02 에스케이하이닉스 주식회사 반도체장치
TWI719850B (zh) * 2020-03-04 2021-02-21 華邦電子股份有限公司 記憶體儲存裝置及資料存取方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5960653A (ja) * 1982-09-30 1984-04-06 Toshiba Corp デジタル情報の符号化、復号化方式
JPS62120129A (ja) * 1985-11-20 1987-06-01 Hitachi Ltd バ−スト誤り訂正符号化・復号化方式
JPH10207689A (ja) * 1997-01-28 1998-08-07 Toshiba Corp 逆元計算装置及び逆元計算方法
JP2000323996A (ja) * 1999-05-13 2000-11-24 Toshiba Corp 誤り訂正積符号ブロックのためのデータ処理方法及び装置及び記録媒体
JP2002074854A (ja) * 2000-08-31 2002-03-15 Nec Corp ディジタルデータ記録伝送方法およびその装置
JP2010518464A (ja) * 2007-02-01 2010-05-27 株式会社東芝 半導体記憶装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4621715B2 (ja) * 2007-08-13 2011-01-26 株式会社東芝 メモリ装置
US8225180B2 (en) * 2007-11-20 2012-07-17 California Institute Of Technology Error correcting codes for rank modulation
WO2009074978A2 (en) * 2007-12-12 2009-06-18 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 メモリシステム
JP5259343B2 (ja) * 2008-10-31 2013-08-07 株式会社東芝 メモリ装置
JP5197448B2 (ja) * 2009-03-13 2013-05-15 株式会社東芝 抵抗変化メモリ装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5960653A (ja) * 1982-09-30 1984-04-06 Toshiba Corp デジタル情報の符号化、復号化方式
JPS62120129A (ja) * 1985-11-20 1987-06-01 Hitachi Ltd バ−スト誤り訂正符号化・復号化方式
JPH10207689A (ja) * 1997-01-28 1998-08-07 Toshiba Corp 逆元計算装置及び逆元計算方法
JP2000323996A (ja) * 1999-05-13 2000-11-24 Toshiba Corp 誤り訂正積符号ブロックのためのデータ処理方法及び装置及び記録媒体
JP2002074854A (ja) * 2000-08-31 2002-03-15 Nec Corp ディジタルデータ記録伝送方法およびその装置
JP2010518464A (ja) * 2007-02-01 2010-05-27 株式会社東芝 半導体記憶装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012185689A (ja) * 2011-03-07 2012-09-27 Toshiba Corp メモリシステム及びメモリコントローラ
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
US20110239091A1 (en) 2011-09-29
US8448051B2 (en) 2013-05-21
JP4982580B2 (ja) 2012-07-25

Similar Documents

Publication Publication Date Title
JP4982580B2 (ja) メモリシステム及びメモリシステムのデータ書き込み・読み出し方法
US10146618B2 (en) Distributed data storage with reduced storage overhead using reduced-dependency erasure codes
Pless Introduction to the theory of error-correcting codes
JP4988731B2 (ja) フラッシュエラー訂正
JP5723967B2 (ja) ソリッド・ステート・ストレージ・デバイスのsレベル・ストレージに入力データを記録するための方法、エンコーダ装置、およびソリッド・ステート・ストレージ・デバイス
Mazumdar et al. Constructions of rank modulation codes
JP5509165B2 (ja) 誤り訂正符号化装置、誤り訂正復号装置、不揮発性半導体記憶システム及びパリティ検査行列生成方法
JP2013524609A5 (ja)
WO1985002958A1 (en) Method and apparatus for decoding error correction code
US20100299575A1 (en) Method and system for detection and correction of phased-burst errors, erasures, symbol errors, and bit errors in a received symbol string
CN107239362B (zh) 一种并行crc校验码的计算方法及系统
US20070162821A1 (en) Parity check matrix, method of generating parity check matrix, encoding method and error correction apparatus
EP3182601B1 (en) Data processing method and system based on quasi-cyclic ldpc
US7461329B2 (en) Channel encoding adapted to error bursts
CN107196665B (zh) 一种纠错纠删rs码的识别方法
US9960788B2 (en) Memory controller, semiconductor memory device, and control method for semiconductor memory device
CN109935263B (zh) 非易失性存储器的编译码方法及存储系统
WO2020029418A1 (zh) 一种修复二进制码生成矩阵构造方法及修复方法
KR101391725B1 (ko) 선형 블럭 코딩을 위한 생성 행렬 구성 장치 및 그 방법과,그 방법으로 생성된 생성 행렬을 이용하는 코딩 장치 및디코딩 장치
KR20100042589A (ko) 이진 데이터의 오류 정정 및 오류 검출 방법
CN109257049B (zh) 一种修复二进制阵列码校验矩阵的构造方法及修复方法
Hoholdt et al. Graph codes with Reed-Solomon component codes
KR101923116B1 (ko) 분산 저장 시스템에서 부분접속 복구 부호를 이용하는 부호화/복호화 장치 및 방법
US8819331B2 (en) Memory system and memory controller
CN110928725B (zh) 闪存中基于矩阵表示的多重置换码的构造及译码方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120215

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: 20120327

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120423

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

Free format text: PAYMENT UNTIL: 20150427

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees