JP5143203B2 - メモリシステム - Google Patents

メモリシステム Download PDF

Info

Publication number
JP5143203B2
JP5143203B2 JP2010213215A JP2010213215A JP5143203B2 JP 5143203 B2 JP5143203 B2 JP 5143203B2 JP 2010213215 A JP2010213215 A JP 2010213215A JP 2010213215 A JP2010213215 A JP 2010213215A JP 5143203 B2 JP5143203 B2 JP 5143203B2
Authority
JP
Japan
Prior art keywords
circuit
adic
output
circuit block
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010213215A
Other languages
English (en)
Other versions
JP2012068900A (ja
Inventor
春希 戸田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2010213215A priority Critical patent/JP5143203B2/ja
Priority to TW100130950A priority patent/TWI459398B/zh
Priority to US13/232,312 priority patent/US8661319B2/en
Publication of JP2012068900A publication Critical patent/JP2012068900A/ja
Application granted granted Critical
Publication of JP5143203B2 publication Critical patent/JP5143203B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1072Adding 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
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • G11C11/401Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
    • G11C11/4063Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
    • G11C11/407Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
    • G11C11/409Read-write [R-W] circuits 
    • G11C11/4094Bit-line management or control circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Hardware Design (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Error Detection And Correction (AREA)
  • Read Only Memory (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)

Description

実施形態は、メモリシステムに関する。
大容量のデータを記憶して利用するメモリとして三次元化が容易な抵抗変化型メモリ(ReRAM)などが注目されている。しかし、どのようなセルが用いられている場合であっても、大容量化にはセルの状態をいくつかのレベルで細分化し、複数のビットを一つのセルに押し込むことが有効である。これについては、NAND型フラッシュメモリにその例を見ることができる。
但し、このような多値記憶セルを用いた場合、セルの状態の設定の不安定性によって誤読み書きが生じ易くなる。これはレベル数を増やす事とトレードオフの関係にある。そのため、NAND型フラッシュメモリの場合、せいぜい8や16レベルに留まるばかりでなく、データとレベルとの対応も煩雑であった。
特開2009−181439号 WO2008−099723号
実施形態は、データの信頼性が高い多値記憶セルを用いたメモリシステムを提供することを目的とする。
本実施形態に係るメモリシステムは、p(pは3以上の素数)以上の物理量レベルを持つセルユニットからなるセルアレイと、バイナリ表現の入力データを、pの剰余体であるZpの要素で表現された書き込みコードに変換するコード生成部と、Zpの各要素をそれぞれ異なる前記物理量レベルに対応させて前記セルユニットに前記書き込みコードを書き込むコード書き込み部とを備え、前記入力データをp−1個の前記セルユニットに記録する場合において、これらp−1個の前記セルユニットのうち、前記入力データが0の場合と、1ビットのみが1の場合で、同一の物理量レベルに書き込まれるセルユニットはないことを特徴とする。
実施形態に係るメモリシステムのビットエラーとコードエラーとの関係を示す図である。 本実施形態に係るメモリシステムの概略図である。 本実施形態に係るメモリシステムのバイナリデータ及びコードデータの構成を示す図である。 本実施形態に係るメモリシステムのバイナリからp進数への変換過程の一部を示す図である。 本実施形態に係るメモリシステムのp進数への変換回路の構成を示す図である。 本実施形態に係るメモリシステムの“h+1 bit mod p”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“h+1 bit mod p”回路ブロックの回路図である。 本実施形態に係るメモリシステムの全加算器の回路記号を示す図である。 本実施形態に係るメモリシステムの全加算器の回路図である。 本実施形態に係るメモリシステムの半加算器の回路記号を示す図である。 本実施形態に係るメモリシステムの半加算器の回路図である。 本実施形態に係るメモリシステムの“X to p”回路ブロックの構成を示す図である。 本実施形態に係るメモリシステムの“X to p”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“p−adic”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“p−adic”回路ブロックのブロック図である。 本実施形態に係るメモリシステムの“binary to p−adic”変換演算回路のブロック図である。 本実施形態に係るメモリシステムの“D−r”レジスタの回路図である。 本実施形態に係るメモリシステムの“binary to p−adic”変換演算回路を制御するクロックのタイミングチャートである。 本実施形態に係るメモリシステムのp進数からバイナリへの変換過程の一部を示す図である。 本実施形態に係るメモリシステムの2進数への変換回路の構成を示す図である。 本実施形態に係るメモリシステムの“h+1 bit add p”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“h+1 bit add p”回路ブロックの回路図である。 本実施形態に係るメモリシステムの“a to X”回路ブロックの構成を示す図である。 本実施形態に係るメモリシステムの“a to X”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“p to X”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“p to X”回路ブロックのブロック図である。 本実施形態に係るメモリシステムの“binary”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“binary”回路ブロックのブロック図である。 本実施形態に係るメモリシステムの“p−adic to binary”変換演算回路のブロック図である。 本実施形態に係るメモリシステムの“A−r”レジスタの回路図である。 本実施形態に係るメモリシステムのタイミング信号発生回路の動作概念図である。 本実施形態に係るメモリシステムのクロックを生成するフリップフロップ回路の回路図である。 本実施形態に係るメモリシステムのタイミング信号発生回路の回路図である。 本実施形態に係るメモリシステムのp−adicセルへのZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのp−adicセルからの読み出し方法を説明する図である。 本実施形態に係るメモリシステムのペアp−adicセルで表示可能な素数を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルへのZpの割り付け方を説明する図である。 図37に示す割り付け方の効果を説明する図である。 図37に示す割り付け方の効果を説明する図である。 本実施形態に係るメモリシステムのペアp−adicセルに対するZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルに対するZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルに対するZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルに対するZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルに対するZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルに対するZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルに対するZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルに対するZpの割り付け例を示す図である。 本実施形態に係るメモリシステムのペアp−adicセルの対応可能なリー・メトリックを説明する図である。 本実施形態に係るメモリシステムのペアp−adicセルからの読み出し方法を説明する図である。 本実施形態に係るメモリシステムのp−adicセルのレベル数毎のパフォーマンスを示す表である。 本実施形態に係るメモリシステムのペアp−adicセルのレベル数毎のパフォーマンスを示す表である。 本実施形態に係るメモリシステムのデータ/コードの変換手順のフローチャートである。 本実施形態に係るメモリシステムのデータ/コードの変換手順のフローチャートである。 本実施形態に係るメモリシステムのデータ/コードの変換手順のフローチャートである。 本実施形態に係るメモリシステムのブロック図である。 本実施形態に係るメモリシステムのエンコード部の回路構成例を示す図である。 本実施形態に係るメモリシステムの“X Zp”回路ブロックにおける積演算処理を模式的に示した図である。 本実施形態に係るメモリシステムの“X Zp”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“X Zp”回路ブロックのブロック図である。 本実施形態に係るメモリシステムの“X Zp”回路ブロックの演算処理を模式的に示した図である。 本実施形態に係るメモリシステムの“h bit AD mod p”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“h bit AD mod p”回路ブロックの回路図である。 本実施形態に係るメモリシステムの“X k−times”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“X k−times”回路ブロックのブロック図である。 本実施形態に係るメモリシステムの“(j)(j=1 to p−1)”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“(j)(j=1 to p−1)”回路ブロックのブロック図である。 本実施形態に係るメモリシステムのシンドロームの構成要素を求める演算回路のブロック図である。 本実施形態に係るメモリシステムの解探索多項式を求める演算回路のブロック図である。 本実施形態に係るメモリシステムのハッセ(Hasse)微分多項式の係数を求める演算回路のブロック図である。 本実施形態に係るメモリシステムの解探索多項式の根及びその多重度を求める演算回路のブロック図である。 本実施形態に係るメモリシステムの素数とその逆元及び階乗の対応を示す表である。 本実施形態に係るメモリシステムの“j−1 dec”回路ブロックとして利用可能なデコーダ回路の回路図である。 本実施形態に係るメモリシステムの“h bit LMp”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“h bit LMp”回路ブロックのブロック図である。 本実施形態に係るメモリシステムのエラーコードのリー・メトリックを求める演算回路のブロック図である。 本実施形態に係るメモリシステムのC=AGからA=CG−1を求める演算回路のブロック図である。 本実施形態に係るメモリシステムの“(j)−1(j=1 to p−1)2”回路ブロックの回路記号を示す図である。 本実施形態に係るメモリシステムの“(j)−1(j=1 to p−1)2”回路ブロックのブロック図である。
[実施形態の概要]
メモリシステムは、加工の微細化の他、メモリセルに用いる物理現象やセルアレイ部分の三次元構造化などの工夫によって記憶容量密度の増大を成し遂げている。これに加え、安定した製造工程が達成された後の記憶容量密度の向上には、メモリセルの持つ物理量を複数のレベルに区分し、メモリセルを多値記憶化させる事が有効な手段となる。
しかし、微細化された多値記憶セルの場合、データ書き込みに関しては、本来書き込むべきレベルの隣接レベルに誤ってデータを書き込む誤書き込みや、データ読み出しに関しては、メモリセルが記憶しているレベルの隣接レベルに対応したデータであるとして誤ったデータを読み出す誤読み出しが生じやすくなる。また、データ保持に関しても、隣接レベル間における状態遷移が生じ易くなる。
このようにメモリセルの多値記憶化は、状態の安定性を損なうため、かなりの制限があった。このメモリセルの多値記憶化の欠点を克服して、有効に活用できれば、安定したメモリシステムの製造工程を長期に亘って利用でき、記憶容量の高密度化を達成することができる。
そこで、本実施形態に係るメモリシステムでは、リー・メトリック・コード(Lee metric code)を用いたECC(Error Correcting Code)システムを搭載している。
リー・メトリック・コードを用いたECCシステムでは、エラーのトータル数でデータの訂正を行うため、小さなレベル変化を伴うエラーが生じた場合には多くのセル数を訂正することができる。この点、上記のような隣接レベル間のエラーに対しては有効である。一方、大きなレベル変化を伴うエラーについても、エラーのトータル数の範囲内であればエラーの訂正が可能であるため、広範囲なエラー分布に対応することができる。
ここで、1セルに多値を記憶させる場合、各レベルを基底レベルからの高さとして捉えることができるため、本来であれば、バイナリで情報をデジタル化するよりも、有限整数、特に素数で情報をデジタル化することが望ましい。そこで、本実施形態では、素数pを要素とする剰余体Zp(以下、単に「Zp」と呼ぶ)によるリー・メトリック・コードを用いる。
この場合、メモリシステムの外部では、通常、データは、バイナリで取り扱われるため、バイナリからZpへの変換が必要となる。そこで、以下では、効率的なオンチップECCシステムを搭載したメモリシステムを実現するために、バイナリからZpへの表現変換とリー・メトリック・コードを用いたECCのための具体的な回路について言及する。ここで、これら変換回路を構成するトランジスタはスイッチとして機能するため、データの表示と演算はあくまでバイナリを基本としている点に注意を要する。
なお、入力されるバイナリデータとメモリセルに記憶されるp進数のコードは線形の関係にないため、変換回路においてはバイナリデータとp進数のコードの対応を勝手に設定することができる。そのため、変換回路をロックした場合、メモリセルが記憶するp進数のコードからバイナリデータを逆読みすることは困難であり、この点においてメモリシステムのセキュリティ強化を図ることも可能である。
従来用いられるメモリセルでは、データをバイナリの‘1’、‘0’として記憶する。そのため、リー・メトリック・コードのようなZpの数を直接扱う場合には予め数を2進数にしてから各桁をメモリセルに記憶する必要がある。
そこで、エラーが生じたコード語とエラー量との関係に関して、メモリシステムのメモリセルがビット単位で情報を記憶する場合におけるコードとしてのエラー量とメモリセルのビットエラーとの関係について図1を用いて説明する。
図1に示すように、Zpの数n個で構成されるコードをC=(c,c,c,・・・,cn−1,c)、このCをメモリシステムに記憶する際などに生じたコードエラーをE=(e,e,e,・・・,en−1,e)、Cの各成分cがEによって変化した後の語をY=(y,y,y,・・・,yn−1,y)とする。
Cはメモリシステム内ではバイナリとして記憶されるので、メモリセルに生じたビットエラーはその生じた場所によってEとしての量が異なってくる。
ここで、Zpの各数がhビットのバイナリで表示されるとして考える。どのメモリセルにも同じように生じるビットエラーがリー・メトリック・コードのコードエラーに対応し、その量はEとなる。
コード語をhビットのバイナリで表すので2の位置の1ビットエラーはコード語では±1のエラー量(Zpでは1またはp−1の変化)となり、2h−1の位置での1ビットエラーは±2h−1(mod p)のエラー量となる。このようにメモリセルの位置によってコードエラーへの重みが異なることになる。したがって、全てのメモリセルのビットエラーのパターンに対応するためには、コード語の全てのエラー量に対応できる必要がある。
コード語を上記のようにバイナリに直してメモリシステムに記憶した場合、メモリシステムのメモリセルの構成はどの様なものでも対応できる。しかし、上記のように、リー・メトリック・コードを用いたECCでは、総エラー量Σe(j=1〜n)が所定の値未満でないと、エラー訂正ができない。つまり、エラーが生じたメモリセルの位置によってはエラー訂正できない場合があり、この点において、バイナリでメモリセルに記憶させた場合、全てのメモリセルに均等に対応することができない。
以上から、リー・メトリック・コードを用いる場合、従来のように、バイナリデータをメモリセルに記憶することは適当ではない。そこで、本実施形態では、メモリセルの状態、つまりトランジスタの閾値や抵抗素子の抵抗値を複数のレベルに分割したいわゆる多値レベルセルに対し、各レベルにZpの数をそのまま対応させて記憶する。これによって、上記不具合を解消することができる。以下において、リー・メトリック・コードなどZpの数を直接記憶する多値レベルセルを「p−adicセル」と呼ぶ事もある。また、p−adicセルを用いたメモリシステムを「p−adicメモリシステム」と呼ぶ事もある。
次に、Zpの数をデータとして扱うp−adicメモリシステムの概要について図2を用いて説明する。
以下では、p−adicメモリシステム外にあるIT機器などバイナリでデータを取り扱う環境を「binary world」と呼ぶことにする。これに対し、演算処理などバイナリのデータを取り扱う部分も含め、データをZpで取り扱うp−adicメモリシステム内の環境を「p−adic Zp world」と呼ぶことにする。この場合、「binary world」は、「p−adic Z world」と呼ぶこともできる。
本実施形態に係るメモリシステムは、「binary world」と「p−adic Zp world」とのインタフェースとして、バイナリのデータをZpのデータに変換する“binary to p−adic”変換演算回路と、Zpのデータをバイナリのデータに変換する“p−adic to binary”変換演算回路とを有する。
「binary world」(外部)のデータは、“binary to p−adic”変換演算回路を介して「p−adic Zp world」(メモリシステム)に入力される。メモリシステム内部では、データをZpの数のままp−adicセルに記憶する。このようにデータをZpの数で記録することによって、リー・メトリック・コードを用いたECCの処理が容易になる。ECCによってエラー処理されたZpのデータは、“p−adic to binary”変換演算回路を介して「binary world」に出力される。
このように、メモリシステムに“binary to p−adic”変換演算回路及び“p−adic to binary”変換演算回路を設けることで、「p−adic Zp world」を意識することなく、p−adicメモリシステムを「binary world」で取り扱うことができる。
[バイナリデータからZpデータへの変換]
次に、“binary to p−adic”変換演算回路の具体的な回路構成を説明する前提として、バイナリデータからZpデータへの変換原理について説明する。
Zp=GF(p)(「GF」は、ガロア体の意味であり、「GF(p)」は、整数を素数pで除算した余りの集合となる)を用いる場合、pは当然のことながら2の累乗では表せないため、GF(2)を用いる場合とは違ってデータのビットパターン全てをコードとしてそのまま用いることはできない。そこで、データの全てのビットパターンをZpの要素で1対1に表す変換が必要となる。
ここで、Zpの要素は0〜p−1の整数で代表され、これらの整数は全て、hビットのバイナリで表すことができるものとする。このときhビットの全てのビットパターンが使われるわけではないため、バイナリのhビットのデータをそのままZpの要素として扱うわけにはいかない。
つまり、図3中(A)に示すように、「binary world」からメモリシステムに与えられる一まとまりのデータDをhビットずつに区切り、n個の集まり、すなわち2進数でn桁のデータD=(d,d,・・・,dn−1)として見る。この場合、各桁には、2−1以下の数でhビットのビットパターンの全てが出現することになる。
一方、図3中(B)に示すようにn語長のZp表現のコードC=(c,c,・・・,cn−1)では、hとpの間にc<p<2の関係が成立する場合、hビットの全てのビットパターンを利用しない。
次に、データDとコードCが1対1で対応する変換について考えるが、これは2進数からp進数への表現の変換に相当する。この変換の条件について検討し、素数pの選択条件のいくつかを限定する。
1つ目の条件として、バイナリのデータDをδ桁の2進数として扱うための条件について説明する。
一括で処理するバイナリのデータDのビット数をM=δhとする。この場合、Dには、hビットの組がδ個あることになる。これら各組が2進数の各桁を表すと考えると、Dは、δ桁の2進数と見ることができる。
つまり、MビットのデータDの全てのビットパターンは、このようなδ桁数の表示と考えることができる。この表示をZpの要素へ変換して、リー・メトリック・コードとして構成できるようにする。即ち、δ桁の2進数をp進数に変換し、p進数の各桁の数をZpのデータとする。
そこで、この変換に最適なpを検討する。
進数からp進数への変換の不変量として、Mビットよりなり、1桁当たりhビットで表わすことができるδ桁の2進数の整数D(h)を用いる。つまり、D(h)は数1のように表すことができる。
[数1]

数1において、d、d、・・・、dδ−3、dδ−2、dδ−1は、hビットのまとまりが表すデータである。
ここで、D(h)の形で表現できる数の最大数、最小数をp進数にした場合、各桁の数の表示がhビットのバイナリで表わされるpを見つける。その際の条件として、2進数からp進数に変換した場合の桁数の増加量は最大1桁とする。つまり、p進数にした後の桁数を最大δ+1桁までとする。
また、D(h)は、hビットのまとまりのバイナリ表示をa、a、・・・、aδ−2、aδ−1、aδとすると、数2のように表わすことができる。
[数2]

ここで、D(h)の形式が普遍的に構成できるδとhの関係を求める。即ち、最低でもδ桁の表現がhの選択によって可能なD(h)の最小数Dmin(h)、最大数Dmax(h)は、数3のようになる。
[数3]

従って、最小数Dmin(h)−1は、δ−1桁となるため、D(h)の形式でなくなってしまう。そこで、h−1ビットのまとまり、即ち、2h−1進数でできる最大数Dmax(h−1)を考慮すると、Dmin(h)−1≧Dmax(h−1)になる場合、D(h)の表現としてδ桁よりも下回ることはない。
即ち、タD(h)がδ桁の2進数表現以外に成立しないためのδとhの条件は、数4のような関係となる。
[数4]

2つ目の条件として、数5に示すように、データDをδ+1桁のp進数表現で扱える条件を説明する。
[数5]

数5から、全て整数であるため、データDをδ+1桁のp進数表現で扱える条件は、数6のようになる。
[数6]

即ち、数7のように表わすことができる。
[数7]

更に、δ/(δ+1)=(1−1/δ)/(1−(1/δ))>1−1/δ>1−1/h(h≦δ)及びpが素数であることから、素数pの選択条件は、数8のようになる。
[数8]

ちなみに、このときδ桁のp進数の最小値pδ−1に対して、
[数9]

が成立するため、p進数変換後のデータDがδ−1桁になることはない。
以上、数8に示す条件で素数pを選択すれば、2進数からp進数への変換で桁数の増加を最大1に抑えることができる。
次に、データとして等価な「binary world」のδ桁の2進数D(d,d,・・・,dδ−1)から「p−adic Zp world」のδ+1桁のp進数D(a,a,・・・,aδ−1 ,aδ)への変換の原理を説明する。
始めに、hビットの2進数に注目してこれを数Aとする。数Aは、数10のようになる。
[数10]

また、hビットの素数pの選択条件は、数8の通りである。
ここで、dh−1=1と置くと、2h−1≦A<2なので、数11のような関係が成立する。
[数11]

数11において、0≦A−pの場合、剰余の2h−1の係数は0になるため、剰余は、h−1ビットのZpの数になる。
また、dh−1=0と置くと、A<pなのでAはZpの数そのものになる。したがって、A−p<0からA−p≦−1となり、更に、(2A+1)−2p≦−1となる。
つまり、hビットの2進数には、数8に示す素数pの選択条件から、pがたかだか1つしか含まれない。更に、剰余などのZpの数は、これを2倍して1を足しても、pがたかだか1つしか含まれない。したがって、h+1ビットのバイナリに対してpを引く操作を繰り返して、pの引ける数を数えて行くと、含まれるpの個数のバイナリ表現を直接得ることができる。
図4は、バイナリからp進数への変換過程の一部を示す図であり、p進数の重みpの桁(最下位桁)の係数を求めるための計算過程となる。
バイナリのAは、図4中の式E1(=C+C+・・・+Ch−1h−1+C+・・・+Cj−hj−h+Cj−h+1j-h+1+・・・+Cj−1j−1+C)で表わすことができる。
始めに、図4中S1で示すように、式E1のうち2の重みを持つ最上位の桁からh桁分、つまり、2j−h+1〜2の重みを持つ桁に対応する式E2(=Cj−h+1j−h+1+・・・+Cj−1j−1+C)をp2j−h+1で割って、商Ck+1 j−h+1及び剰余(R +・・・+R h−2h−2+R h−1h−1)2j−h+1を求める。
続いて、図4中S2で示すように、式E2をp2j−h+1で割った剰余と、式E1のうち2j−hの重みを持つ桁に対応する項Cj−hj−hとを足した式E3(=(Cj−h+2(R +・・・+R h−2h−2+R h−1h−1))2j−h)をp2j−hで割って、商Ck+1 j−h及び剰余(Rk−1 +・・・+Rk−1 h−2h−2+Rk−1 h−1h−1)2j−hを求める。
以降、図4中S2と同様の計算に桁をずらしながら繰り返し、最後に、式E4(=C+2(R +・・・R h−2h−2+Rh−1))2)をp2で割って、商Ck+1及び剰余(R +・・・+R h−2h−2+R h−1h−1)2を求める。
これら一連の計算によって、素数pの総数は2の累乗の最上位からCk+1 j−h+1j−h+1、Ck+1 j−hj−h、・・・のように求めることができる。ここで、素数pの個数の最上位が元々の式E1の最上位2に対してh−1だけ指数の小さい2j−h+1になっていることに注意する。つまり、hビットのp進数の係数を得たときに、素数pの総数のバイナリ表現は、h桁ではなく、h−1桁だけ減るのである。最終的に得られるp2の係数Ck+1 を求める際の剰余(R +R 2+・・・+R h−2h−2+R h−1h−1)2がZpの数であり、p進数の重みpの桁の係数となる。
更に、以上の計算ステップで得られたpの個数のバイナリ表現のCk+1 を新たなデータとし、図4と同様の計算ステップを繰り返すと、p進数の重みpの桁の係数R +R 2+・・・+R h−2h−2+R h−1h−1が得られる。
以降、同様の計算ステップを繰り返すことで、p進数の各桁の係数を順次求めることができる。
つまり、バイナリデータに含まれる素数pの数え上げをする回路は、h+1ビットのバイナリのデータを素数pで割った剰余を求める回路をラダーにすることで構成するできることが分かる。
図5は、「binary world」のδ桁の2進数D(d,d,・・・,dδ−1)から「p−adic Zp mod p world」のδ+1桁のp進数D(a,a,・・・,aδ−1,aδ)への変換計算の過程の構成を模式的に示した図である。
なお、図5に示す“h res”と示した四角は、入力されたバイナリデータを素数pで割り、商と剰余を求める演算回路である。この演算回路の入力はh+1ビットのバイナリデータであり、出力はこのバイナリデータを素数pで割った剰余となる。また、入力されたバイナリデータが素数p以上の場合、商をキャリーCとして出力する。以下、この演算回路素子を“h res”回路ブロックと呼ぶ。
始めに、第0ステップ(図5中S0)では、δ桁の2進数のデータD(d,d,・・・,dδ−1)に対して最右側のdδ−1側から素数pの数え上げを行う。ここでは、dδ−1に対して、“h res”回路ブロックに入力されたh+1ビットのバイナリデータの最上位ビットに0を入れてdδ−1を素数pで割った剰余と共に商であるキャリーC h(δ−1)を直接生成する。
続いて、h〜1ビット目が先の“h res”回路ブロックの出力(hビットで表現された剰余)、0ビット(最下位ビット)目がdδ−2の最上位ビットDδ−2 h−1(=Dh(δ−2)−1)であるh+1ビットのバイナリデータを入力とする次のh res回路によって、入力されたバイナリデータを素数pで割った剰余と共に商であるキャリーC h(δ−1)−1を作る。
以降、“h res”回路ブロックに入力されるh+1ビットのバイナリデータのうちの0ビット目がdの最下位ビットD (=D)になるまで、h(δ−1)+1個の“h res”回路ブロックを用いてキャリーC 〜C h(δ−1)を生成する。これら生成されたキャリーC 〜C h(δ−1)によって表現されるバイナリデータは、データDに含まれる素数pの個数になっている。
そして、dを入力とする“h res”回路ブロックの出力が、δ+1桁のp進数D(a,a,・・・,aδ−1 ,aδ)のうち、aのバイナリ表示になる。
続いて、第1ステップ(図5中S1)では、第0ステップで得られたデータDに含まれる素数pの個数に対して、更に素数pがいくつ含まれるかを計算してpの個数を求め、p進数Dの重みpの桁の係数aのバイナリを求める。
第1ステップでは、キャリーC 〜C h(δ−1)に対して最右側のC h(δ−1)側から素数pの数え上げを行う。キャリーC h(δ−2)+1〜C h(δ−1)に対する素数pの数え上げに際しては、h+1ビットの入力バイナリデータの最上位ビットに0を入れて入力バイナリデータを素数pで割った剰余と共にキャリーC h(δ−2)+1を直接生成する。
続いて、h〜1ビット目が先の“h res”回路ブロックの出力(hビットで表現された剰余)、0ビット(最下位ビット)目がC h(δ−2)であるh+1ビットのバイナリデータを入力とする次の“h res”回路ブロックによって、入力されたバイナリデータを素数pで割った剰余と共に商であるキャリーC h(δ−2)を生成する。
以降、“h res”回路ブロックに入力されるh+1ビットのバイナリデータのうちの0ビット目がC 〜C h(δ−1)の最下位ビットC になるまで、h(δ−2)+1個の“h res”回路ブロックを用いてキャリーC 〜C h(δ−2)+1を生成する。これら生成されたキャリーC 〜C h(δ−2)+1によって表現されるバイナリデータは、データDに含まれる素数pの個数になっている。
そして、C を入力とする“h res”回路ブロックの出力が、δ+1桁のp進数D(a,a,・・・,aδ−1 ,aδ)のうち、aのバイナリになる。
続く第2ステップ(図5中S2)では、第1ステップで得られたデータDに含まれるpの個数に対して、更に素数pがいくつ含まれるかを計算してpの個数を求め、p進数Dの重みpの桁の係数aのバイナリを求める。
以降、同様にp進数の重みpδの桁の係数aδのバイナリ表示を求める第δ−1ステップ(図5中Sδ−1)まで行う。
なお、ステップSδ−1のキャリーCδ+1 〜Cδ+1 δ−hは計算には使用しない。
次に、図5に示した“h res”回路ブロックである“h+1 bit mod p”回路ブロック(足し算回路)について具体的に説明する。
図6は、“h+1 bit mod p”回路ブロックの回路記号である。“h+1 bit mod p”回路ブロックは、h+1ビットのバイナリA〜Aを入力し、hビットのバイナリQ〜Qh−1及びキャリーPF0を出力する。
“h+1 bit mod p”回路ブロックは、入力バイナリAの素数pによる剰余Qを出力すると共に、入力バイナリAがp以上の場合にPF0から‘1’、p未満の場合にPF0から‘0’を出力する。
ここで、h=7、p=79の場合について考える。この場合、バイナリA、バイナリQ、素数pの間には、数12に示す関係が成立する。
[数12]

図7は、h=7、p=79とした場合の“h+1 bit mod p”回路ブロックの回路図である。
“h+1 bit mod p”回路ブロックは、PF0生成部U1、5個の半加算器(Half adder)HA1〜HA5、及び2個の全加算器(Full adder)FA1、FA2を有する。
PF0生成部U1は、所定の電圧が供給されるVcc端子と、接地電圧が供給されるVss端子との間に、直列に接続されたPMOSトランジスタQP1〜QP4、及びNMOSトランジスタQN1〜QN5を有する。これらトランジスタQP1、QP2、QP3、QP4、QN1、QN2、QN3、QN4、及びQN5は、それぞれ、A、A、A、A、A、A、A、A、及びAで制御される。
また、PF0生成部U1は、その他に、5個のPMOSトランジスタQP5〜QP9、3個のNMOSトランジスタQN6〜QN8、及びインバータIV1を有する。
トランジスタQP5〜QP8は、それぞれ、トランジスタQP1のソース及びドレイン間に接続されている。また、トランジスタQP9は、トランジスタQP1のソース及びトランジスタQP3のドレイン間に接続されている。トランジスタQP5、QP6、QP7、QP8、及びQP9は、それぞれ、A、A、A、A、及びAで制御される。
トランジスタQN6、QN7は、それぞれ、トランジスタQN1のソース及びトランジスタQN4のドレイン間に接続されている。また、トランジスタQN8は、トランジスタQN1のソース及びトランジスタQN5のドレイン(Vss端子)間に接続されている。トランジスタQN6、QN7、及びQN8は、それぞれ、A、A、及びAで制御される。
インバータIV1は、入力がトランジスタQP4とQN1との接続点に接続されている。このインバータIV1の出力がキャリーPF0になる。
半加算器HA1は、入力がA及びPF0、出力がQ、桁上げ出力がC0となっている。半加算器HA2は、入力がC0及びA、出力がQ、桁上げ出力がC1となっている。半加算器HA3は、入力がC1及びA、出力がQ、桁上げ出力がC2となっている。半加算器HA4は、入力がC2及びA、出力がQ、桁上げ出力がC3となっている。全加算器FA1は、入力がC3及びA、桁上げ入力がPF0、出力がQ、桁上げ出力がC4となっている。全加算器FA2は、入力がC4及びA、桁上げ入力がPF0、出力がQ、桁上げ出力がC5となっている。半加算器HA5は、入力がC5及びA、出力がQとなっている。
以上の構成によって、PF0生成部U1は、“h+1 bit mod p”回路ブロックに入力されるバイナリAがp=79以上か否かを判断し、その結果をPF0から出力する。バイナリAがp=79以上の場合、79をバイナリAから引くために、半加算器HA111〜HA115、及び全加算器FA111〜FA112によって、8ビットバイナリの79の補数である49をバイナリAに加えている。
次に、“h+1 bit mod p”回路ブロックに用いられている2進数の加算を行なう基本的な単位となる全加算器FAと半加算器HAについて説明する。
全加算器FAは、図8に示すように、入力A、B、桁上げ入力Cin、出力Sout、及び桁上げ出力Coutを持つ。
全加算器FAは、図9に示すようにXOR(排他的論理和)回路、XNOR(否定排他的論理和)回路、出力回路U1、及び桁上げ出力回路U2からなる。
XOR回路は、入力A及びB間に直列接続されたPNOSトランジスタQP1及びQP2と、これらトランジスタQP1及びQP2間のノードn1及びVss端子間に直列接続されたNMOSトランジスタQN1とQN2とを有する。このうちトランジスタQP2及びQN1のゲートは、入力Aに接続されている。また、トランジスタQP1及びQN2のゲートは、入力Bに接続されている。この構成によって、ノードn1がXOR回路の出力となる。
XNOR回路は、入力A及びB間に直列接続されたNMOSトランジスタQN3及びQN4と、これらトランジスタQN3及びQN4間のノードn2とVcc端子との間に直列接続されたPMOSトランジスタQP3及びQP4とを有する。このうちトランジスタQN4及びQP3のゲートは、入力Aに接続されている。また、トランジスタQN3及びQP4のゲートは、入力Bに接続されている。この構成によって、ノードn2がXNOR回路の出力となる。
出力回路U1は、桁上げ入力Cin及び出力Sout間に接続されたPMOSトランジスタQP5、並びに、同じく接続されたNMOSトランジスタQN5と、ノードn2及び出力Sout間に接続されたNMOSトランジスタQN6と、ノードn1及び出力Sout間に接続されたPMOSトランジスタQP6とを有する。このうちトランジスタQP5のゲートは、XOR回路の出力であるノードn1に接続されている。トランジスタQN5のゲートは、XNOR回路の出力であるノードn2に接続されている。トランジスタQN6及びQP6のゲートは、桁上げ出力Cinに接続されている。また、出力回路U1は、ノードn1及びVss端子間にNMOSトランジスタQN7を有する。トランジスタQN7のゲートは、XNOR回路の出力であるノードn2に接続されている。
桁上げ出力回路U2は、桁上げ入力Cin及び桁上げ出力Cout間に接続されたPMOSトランジスタQP7、並びに、同じく接続されたNMOSトランジスタQN8と、入力B及び桁上げ出力Cout間に接続されたPMOSトランジスタQP8、並びに、同じく接続されたNMOSトランジスタQN9とを有する。このうちトランジスタQP7及びQN9のゲートは、XNOR回路の出力であるノードn2に接続されている。トランジスタQN8及びQP8のゲートは、XOR回路の出力であるノードn1に接続されている。また、桁上げ出力回路U2は、Vcc端子とノードn2との間に接続されたNMOSトランジスタQN10を有する。トランジスタQN10のゲートは、XOR回路の出力であるノードn1にインバータを介して接続されている。
以上の構成によって、全加算器FAは、入力A及び入力BをXOR回路及びXNOR回路で論理演算し、更に、この結果及び桁上げ入力Cinを出力回路U1及び桁上げ出力回路U2に入力し、出力Sout及び桁上げ出力Coutを生成する。
半加算器HAは、図10に示すように、入力A、B、出力Sout、及び桁上げ出力Coutを持つ。
半加算器HAは、図11に示すように一般的な論理ゲートとインバータで構成できる。具体的には、入力Aと入力Bを入力とするNANDゲートG1、入力Aと入力Bを入力とするORゲートG2、NANDゲートG1の出力とORゲートG2の出力を入力とするNANDゲートG3、NANDゲートG1の出力を入力とするインバータIV1、及びNANDゲートG3の出力を入力とするインバータIV2によって構成できる。この構成によって、インバータIV1の出力が桁上げ出力Cout、インバータIV2の出力が出力Soutとなる。
次に、“h+1 bit mod p”回路ブロックを用いた“binary to p−adic”変換演算回路の構成について考える。
図12中(A)は、“binary to p−adic”変換演算回路の第kステップの回路を、“h+1 bit mod p”回路ブロックを用いて構成したものである。
ここでは、データをδ桁の2進数表現にした場合の第j桁目をdとする。この場合、dはhビットのバイナリで表示できるが、この表示の係数Dを他のdの係数Dと区別するために、数13に示すようにサブインデックスを用いる。
[数13]

また、第kステップの演算の入力である前ステップ(第k−1ステップ)のキャリーはC 〜C h(δ−k)+k−1であり、サブインデックスの2の累乗の2進数としての係数となっていて、この2進数によって表現される数がデータに含まれるpの個数となる。
第kステップでは、図12中(A)に示すように、入力はh(δ−k)+k個のバイナリ(キャリーC 〜C h(δ−k)+k−1)であり、これをh(δ−(k+1))+k+1個の“h+1 bit mod p”回路ブロックで受ける。
1つ目の“h+1 bit mod p”回路ブロック<1>は、入力バイナリA〜Ah−1、Aに、それぞれC h(δ−k)+k−h〜C h(δ−k)+k−1、0が入力され、出力Q〜Qh−1、キャリーPF0から、それぞれRh(δ−(k+1))+k 〜Rh(δ−(k+1))+k h−1、Ck+1 h(δ−(k+1))+kが出力される。
図示しない2つ目の“h+1 bit mod p”回路ブロック<2>は、入力バイナリA〜A、及びAにそれぞれ1つ目の“h+1 bit mod p”回路ブロック<1>の出力Rh(δ−(k+1))+k 〜Rh(δ−(k+1))+k h−1、及びキャリーC h(δ−(k+1))+k−1が入力され、出力Q〜Qh−1、及びキャリーPF0から、それぞれRh(δ−(k+1))+k−1 〜Rh(δ−(k+1))+k−1 h−1、及びCk+1 h(δ−(k+1))+k−1が出力される。
以降、図12中(A)に示すように、同様の入出力を持つ“h+1 bit mod p”回路ブロックが、合計h(δ−(k+1))+k+1個並び、各“h+1 bit mod p”回路ブロックから出力されるキャリーCk+1 〜Ck+1 h(δ−(k+1))+kが、次のステップである第k+1ステップの入力となる。
このように、バイナリからp進数への変換は、図12中(B)に示す模式図のように、キャリーCの最上位ビット側から順次実行される。
図12中(A)は、第kステップに関係する回路構成であるが、各ステップを時分割で処理することで、図12中(A)に示す回路構成を各ステップで使い回すことができる。この場合、各“h+1 bit mod p”回路ブロックの入出力を単純なオン/オフによって制御可能にするために、“h+1 bit mod p”回路ブロックの必要数が最大となる第0ステップの回路構成に、更に、δ個の“h+1 bit mod p”回路ブロックが付加される。
この様に構成されたh(δ−1)+δ+1個の“h+1 bit mod p”回路ブロックからなる回路を“X to p”回路ブロックと呼ぶ。
図13に示すように、この“X to p”回路ブロックの入力は、図12中(A)においてk=0とした場合よりもδ個多く、C 〜C hδ+δ−1の合計(h+1)δ個となっている。また、出力は、h個おきの“h+1 bit mod p”回路ブロックから出力されるδ+1個のhビットのバイナリR 〜R h−1、R 〜R h−1、・・・、Rh(δ−1) 〜Rh(δ−1) h−1、Rhδ 〜Rhδ h−1と、次のステップの入力となるhδ+δ−h個のキャリーC 〜C h(δ−1)+δとなる。
次に、“binary to p−adic”変換演算回路のコア部分となる“p−adic”回路ブロックについて説明する。
図14は、“p−adic”回路ブロックの回路記号を示す図である。
“p−adic”回路ブロックは、図14に示すように、B〜Bδ+1、I〜Ihδ+δ−1を入力し、r〜rhδ+δ−1を出力する。
図15は、“p−adic”回路ブロックのブロック図である。“p−adic”回路ブロックは、1ステップの回路構成を“X to p”回路ブロックとして、これに“X to p”回路ブロックの入出力を制御する制御スイッチSWが付加された構成となっている。
具体的には、入力I〜Ihδ+δ−1は、それぞれ、制御スイッチSW1を介してC 〜C hδ+δ−1として“X to p”回路ブロックに入力される。これらδグループの制御スイッチSW1は、それぞれ入力/B〜/Bδ(‘/’は否定を表わす)によって制御される。
1個の制御スイッチSW1は、入力INと出力OUTを接続するトランスファトランジスタTQと、出力OUTを接地電圧に引き下げるNMOSトランジスタQNを有する。トランスファトランジスタTQは、制御信号がCNT=‘0’の場合にオンし、トランジスタQNは、制御信号がCNT=‘1’の場合にオンする。
制御スイッチSW1の場合、制御信号CNTは、/B〜/Bδとなる。したがって、B=‘1’の場合、I〜Ihδ+δ−1がそのままC 〜C hδ+δ−1として出力され、B=‘0’の場合、入力に依らず出力は‘0’となる。これは、“p−adic”回路ブロックへの入力I〜Ihδ+δ−1が不定であっても、“X to p”回路ブロックの入力が不定になることを回避するためである。
〜C hδ+δ−1が入力された“X to p”回路ブロックは、前述の通り、R 〜Rhδ h−1、C 〜C hδ+δ−hを出力する。
“X to p”回路ブロックから出力されたC 〜C hδ+δ−hは、制御スイッチSW2を介して“p−adic”回路ブロックの出力であるr〜rh(δ+1)+δ−hとなる。これらδグループの制御スイッチSW2は、入力/B〜/Bδによって制御される。したがって、制御スイッチSW2は、B=‘0’の場合、C 〜C hδ+δ-hをそのままr〜rh(δ+1)+δ−hとして出力する。
また、“X to p”回路ブロックから出力されたR 〜Rhδ h−1は、制御スイッチSW3を介して、“p−adic”回路ブロックの出力であるr〜rh(δ+1)−1となる。これらδグループの制御スイッチSW3は、それぞれB∧/B〜Bδ∧/Bδ+1で制御される。これによって、例えば、R 及びr間にある制御スイッチSW3は、B=‘1’、B=‘0’の場合のみ、R をそのままrとして出力する。
制御スイッチSWを制御するB〜Bδ+1は、タイミング信号であり、順次立ち上がる信号である。これに合わせて入力Iのパスが下位ビット側からhビットずつ閉じ、出力rのパスが出力Rのパスと切り替わる。
p進数の各桁の係数Aに相当するRは、次のステップの計算過程に入るまでに、そのステップの結果を出力するため、隣接するタイミング信号Bと論理演算した信号によってオン/オフ制御される制御スイッチSW3を介して後述する外部の“D−r”レジスタに出力される。
次に、前述した回路をまとめて構成された“binary to p−adic”変換演算回路について説明する。
図16は、“binary to p−adic”変換演算回路のブロック図である。“binary to p−adic”変換演算回路は、“p−adic”回路ブロックに“D−r”レジスタが結合されて構成される。
“D−r”レジスタは、図16に示すように、タイミング信号B及びクロックclkで制御されるレジスタで、入力r〜rhδ+δ−1、D〜Dhδ−1、出力I〜Ihδ+δ−1を持つ。
図17は、“D−r”レジスタの回路図である。
“D−r”レジスタは、ビット毎に2つのインバータからなるフリップフロップFFを有している。このフリップフロップFFには、制御スイッチSW1を介してD(j=0〜hδ−1)が入力され、制御スイッチSW2を介してrが入力される。一方、フリップフロップFFの出力側には、制御スイッチSW3を介してインバータIV1が接続されている。このインバータIV1の出力がIとなる。
制御スイッチSW1〜SW3は、タイミング信号B及びクロックclkによって制御される。具体的には、制御スイッチSW1は/clk∧/B=‘1’の場合、制御スイッチSW2は/clk∧B=‘1’の場合、制御スイッチSW3はclk=‘1’の場合にそれぞれオンする。
なお、“D−r”レジスタの入力にないDhδ〜Dhδ+δ−1は‘0’とする。
“D−r”レジスタの初期状態は、バイナリD〜Dhδ−1が設定され、残りは‘0’で埋められた状態となっている。以後、Bが立ち上がるとclkの立ち下がりに同期してデータrを取り込み、clkの立ち上がりに同期して取り込んだrをIとして出力する。
この“D−r”レジスタは、“p−adic”回路ブロックと結合してタイミング信号B毎に計算のステップを進める。各クロックの変化の様子は図18に示す。クロックclkからクロックckが作られ、更にタイミング信号Bが作られる。
各計算ステップでp進数の各桁Aが下位側から出力rとして得られ、これをタイミング信号Bの後半のIの取り込みと同じタイミングで保持していく。
全計算ステップが終了すると“D−r”レジスタには、p進数のデータDの各桁の係数aをバイナリに変換した場合の各桁の係数A が保持されている。
なお、後に色々な場合について比較するが、実用的な素数pを用いたシステムでは計算ステップの数は10以下となり、“p−adic”回路ブロックに含まれる“h+1 bit mod p”回路ブロックの数は50以下となる。
[Zpデータからバイナリデータへの変換]
次に、データとして等価な「p−adic Zp world」のδ+1桁のp進数D(a,a,・・・,aδ−1,aδ)から「binary world」のδ桁の2進数D(d,d,・・・,dδ−1)への変換の具体的回路を以下に示す。
p進数から2進数への変換は、p進数に含まれる素数pの個数を数え上げ、その個数分だけ素数pのバイナリ表示を加え合わせていく作業となる。この作業では、p進数の最大の次数の桁から次数を1つずつ下げてバイナリに変換し、最終的に素数pのゼロ次でのバイナリが同じ数の2進数になっていることを使う。そのため、hビット毎の計算からh+1ビットを得て、このうちの最下位ビットを分離して、次の2の累乗の次数における計算を行なうという計算過程の繰り返しで処理することができる。
図19は、p進数からバイナリへの変換過程の一部を示す図である。ここでは、既に、p進数のデータに含まれるpn+1の個数をバイナリで表現できているものとして、p進数の重みpの桁の数のバイナリ表示を用いて、pの個数のバイナリを得る過程について説明する。
データに含まれるpn+1の個数のバイナリ表現が、C+C+・・・+Cj−1j−1+C+Cj+1j+1+・・・であった場合、データDのpの個数は、図19中の式E1(=p(A+A+・・・+Ah−1h−1)+pn+1(C+C+・・・+Cj−1j−1+C+Cj+1j+1+・・・))のように表わすことができる。ここで、pの係数は、A+A+・・・+Ah−1h−1はp進数の重みpの桁のhビット表現となる。
始めに、図19中S1で示すように、hビットのバイナリに素数pを加える演算として、式E1のうちpの項p(A+A+・・・+Ah−1h−1)にpn+1の項のうちp進数の重みpn+1の桁をバイナリ表現したときの最下位ビットに対応するpn+1の項を加え、式E2(=p(A+A+・・・+Ah−1h−1)+pn+1)を生成する。この式E2から、h+1ビットのバイナリ表示p(C +Q +・・・+Q h−1h−1+Q )を得る。更に、次の処理のために、式E2から式E2に含まれるpの個数の2進数表現の最下位の項p を分離した新たなhビットのバイナリp(Q +・・・+Q h−1h−2+Q h−1)を得ておく。
続いて、図19中S2で示すように、hビットのバイナリに素数pを加える演算として、図19中S1で得られたp(Q +・・・+Q h−1h−2+Q h−1)に式E1のうちpn+1の項を加え、式E3(=p(Q +・・・+Q h−1h−2+Q h−1)+pn+1)を生成する。この式E3から、h+1ビットのバイナリ表示p(C +Q +・・・+Q h−1h−1+Q )を得る。更に、次の処理のために、式E3から式E3に含まれるpの個数の2進数表現の最下位の項p を分離したp(Q +・・・+Q h−1h−2+C h−1)を得ておく。
以降、図19中S2と同様に、pの個数のバイナリ表現p を全て得てこのステップの計算を終了する。
この次のステップでは同様にしてp進数のpn−1の個数のバイナリ表現を求める。
以上のように、計算の過程では、hビットのバイナリに素数pを加えた数がh+1ビット以下になるように素数pが選ばれていることを利用している。
hビットのバイナリの数Aは、数14のように表わすことができことから、0≦A<2が成立する。
[数14]

また、hビットの素数pは、2h−1<p<2の範囲となる。したがって、数15のような関係が成立する。
[数15]

数15は、hビットのバイナリに素数pを加えても、数8に示した素数pの選択条件からh+1ビット以下のバイナリで表現できることを意味する。
したがって、データをp進数からバイナリに変換する“p−adic to binary”変換演算回路は、入力hビット、出力h+1ビットの加算回路のラダーで構成できることが分かる。
図20は、「p−adic Zp world」のδ+1桁のp進数D(a,a,・・・,aδ−1,aδ)から「binary world」のδ桁の2進数D(d,d,・・・,dδ−1)への変換回路の構成を模式的に示した図である。
なお、図20中“h+p”と示した四角は、入力されたhビットのデータに対して、入力されたキャリーCに応じて素数pを加え、h+1ビットのバイナリを出力する演算回路である。以下、この回路を“h+p”回路ブロックと呼ぶ。
始めに、第0ステップ(図20中S0)では、p進数のδ−1次の桁のバイナリ表示に対してδ次の桁のバイナリ表示をキャリーすなわちpδの個数のバイナリ表現として上述した計算を行う。これによって、pδ−1の個数としてキャリーC 〜C h2−1の2hビットを得る。このキャリーC 〜C h2−1が次の第1ステップの入力となる。
続いて、第1ステップ(図20中S1)では、p進数のδ−2次の桁のバイナリ表示に対して、第0ステップで得られたキャリーC 〜C h2−1をpδ−1の個数のバイナリ表現として前述の計算を行う。これによって、pδ−2の個数としてキャリーC 〜C h3−1の3hビットを得る。このキャリーC 〜C h3−1が次の第2ステップ(図20中S3)の入力となる。
以降、第0ステップ及び第1ステップと同様のステップを重ね、第δ−1ステップでは、p進数表現の0次の桁のバイナリ表示に対して、前の第δ−2ステップで得られたキャリーCδ−1 〜Cδ−1 hδ−1をpの個数のバイナリ表現として前述の計算を行ない、pの個数すなわちDの2進数表現としてキャリーCδ 〜Cδ h(δ+1)−1のh(δ+1)ビットを得る。但し、上位のhビットはDのp進数と2進数との設定からゼロとなる。これらのキャリーCδ 〜Cδ h(δ+1)−1からCδ hδ〜Cδ h(δ+1)−1を除いたCδ 〜Cδ hδ−1をhビット毎にまとめるとDのバイナリ表現D(d,d,・・・,dδ−1)を得ることができる。
次に、図20に示した“h+p”回路ブロックである“h+1 bit add p”回路ブロックについて具体的に説明する。
図21は、“h+1 bit add p”回路ブロックの回路記号である。“h+1 bit add p”回路ブロックは、hビットのバイナリB〜Bh−1と1ビットのキャリー(carry)を入力し、h+1ビットのバイナリQ〜Qを出力する。この“h+1 bit add p”回路ブロックは、入力Bに対し、carryが‘1’なら素数pを加え、その結果をQとして出力する。
ここで、h=7、p=79の場合の“h+1 bit add p”回路ブロックについて考える。この場合、バイナリb、バイナリQ、素数pの間には、数16に示す関係が成立する。
[数16]

図22は、h=7、p=79とした場合の“h+1 bit add p”回路ブロックの回路図である。
“h+1 bit add p”回路ブロックは、3個の半加算器(Half Adder)HA1〜HA3、及び4個の全加算器(Full Adder)FA1〜FA4を有する。
半加算器HA1は、入力がB及びcarry、出力がQ、桁上げ出力がC0となっている。全加算器FA1は、入力がB及びcarry、桁上げ入力がC0、出力がQ、桁上げ出力がC1となっている。全加算器FA2は、入力がB及びcarry、桁上げ入力がC1、出力がQ、桁上げ出力がC2となっている。全加算器FA3は、入力がB及びcarry、桁上げ入力がC2、出力がQ、桁上げ出力がC3となっている。半加算器HA2は、入力がB、桁上げ入力がC3、出力がQ、桁上げ出力がC4となっている。半加算器HA3は、入力がB、桁上げ入力がC4、出力がQ、桁上げ出力がC5となっている。全加算器FA4は、入力がB及びcarry、桁上げ入力がC5、出力がQ、桁上げ出力がQ7となっている。
以上の構成によって、“p+1 bit add p”回路ブロックは、carry=‘1’なら、入力バイナリBにp=79を加える。
なお、全加算器FA及び半加算器HAの回路構成については、図9及び図11と同様であるため割愛する。
次に、以上説明した“h+1 bit add p”回路ブロックを用いた“p−adic to binary”変換演算回路の構成について考える。
図23は、“p−adic to binary”変換演算回路の第kステップの回路構成を、“h+1 bit add p”回路ブロックを用いて構成したものである。
ここで、データをδ+1桁のp進数表現のj次の桁の係数aは、hビットのバイナリで表現できるが、このバイナリ表現の係数Aを他の桁の係数aと区別するめに、数17に示すようなサブインデックスを用いる。
[数17]

また、第kステップの演算の入力である前ステップ(第k−1ステップ)のキャリーはC 〜C h(k+1)−1であり、サブインデックスの2の累乗の2進数としての係数となっていて、この2進数が表現する数がデータに含まれるpδ−kの個数となる。
第kステップでは、図23中(A)に示すように、h(k+1)個の“h+1 bit add p”回路ブロックで処理される。各“h+1 bit add p”回路ブロックには、1個のキャリー(carry)と、p進数表現の1桁分の係数を表示するh個のバイナリが入力される。
1つ目の“h+1 bit add p”回路ブロック<1>は、carry、入力B〜Bh−1に、それぞれC 、Q−1 〜Q−1 h−1が入力され、Q、Q〜Qに、それぞれCk+1 、Q 〜Q h−1が出力される。
図示しない2つ目の“h+1 bit add p”回路ブロック<2>は、carry、入力B〜Bh−1に、それぞれC 、Q 〜Q h−1が入力され、Q、Q〜Qに、それぞれCk+1 、Q 〜Q h−1が出力される。
以降、図23中(A)に示すように、同様の入出力を持つ“h+1 bit add p”回路ブロックが、合計h(k+1)個並び、各“h+1 bit add p”回路ブロックから出力されるキャリーCk+1 〜Ck+1 h(k+1)−1が、次にステップである第k+1ステップの入力となる。
このように、p進数からバイナリへの変換は、図23中(B)に示す模式図のように、キャリーCの最下位ビット側から順次実行される。
図23は、上記の通り、第kステップに関係する回路構成であるが、各ステップを時分割で処理することで、図23中(A)に示す回路構成を各ステップで使い回すことができる。この場合、各“h+1 bit add p”回路ブロックの入出力を単純なオン/オフによって制御可能にするために、k=0とした場合のh個の“h+1 bit add p”回路ブロックを最小構成の回路ブロックとする。
この様に構成されたh個の“h+1 bit add p”回路ブロックからなる回路を“a to X”回路ブロックと呼ぶ。
図24に示すように、この“a to X”回路ブロックの入力は、Q−1 〜Q−1 h−1とC 〜C h−1の2h個となり、出力はQh−1 〜Qh−1 h−1とC 〜C h−1の2h個となる。
次に、前述の“a to X”回路ブロックを用いて、p進数の次数を1つ下げるための1ステップ分の回路を構成する。以下では、この回路を“p to X”回路ブロックと呼ぶ。この“p to X”回路ブロックは、全計算ステップに共通に使用することができる。
図25は、“p to X”回路ブロックの回路記号である。“p to X”回路ブロックはタイミング信号B〜Bδ−1で制御され、入力であるQ−1 〜Qh(δ−1)−1 h−1、Cδ−1 〜Cδ−1 hδ−1から、Cδ 〜Cδ h(δ+1)−1を出力する。
図26は、“p to X”回路ブロックのブロック図である。
“p to X”回路ブロックは、δ個の“a to X”回路ブロックからなる。
1個目の“a to X”回路ブロック<1>は、“p to X”回路ブロックの入力の一部であるQ−1 〜Q−1 h−1、及びCδ−1 〜Cδ−1 h−1を入力し、Q´h−1 〜Q´h−1 h−1、及び“p to X”回路ブロックの出力の一部であるCδ 〜Cδ h−1を出力する。
2個目の“a to X”回路ブロック<2>は、Qh−1 〜Qh−1 h−1、及び“p to X”回路ブロックの入力の一部であるCδ−1 〜Cδ−1 h2−1を入力し、Q´h2−1 〜Q´h2−1 h−1、及び“p to X”回路ブロックの出力の一部であるCδ 〜Cδ h2−1を出力する。入力のうち、Qh−1 〜Qh−1 h−1は、1個目の“a to X”回路ブロック<1>の出力Q´h−1 〜Q´h−1 h−1がタイミング信号Bδ−1で制御される制御スイッチSW1を介して入力される信号である。
3個目の“a to X”回路ブロック<3>は、Qh2−1 〜Qh2−1 h−1、及び“p to X”回路ブロックの入力の一部であるCδ−1 h2〜Cδ−1 h3−1を入力し、Q´h3−1 〜Q´h3−1 h−1、及び“p to X”回路ブロックの出力の一部であるCδ h2〜Cδ h3−1を出力する。入力のうち、Qh2−1 〜Qh2−1 h−1は、2個目の“a to X”回路ブロックの出力Q´h2−1 〜Q´h2−1 h−1がタイミング信号Bδ−2で制御される制御スイッチSW2を介して入力される信号である。
以降、δ個目の“a to X”回路ブロック<δ>まで同様に接続される。
このように、“a to X”回路ブロックの入出力間を制御スイッチSWで接続するのは、計算ステップ毎に入力の接続が外部入力と内部入力で切り替わるためであり、外部入力の場合に内部回路の出力が干渉しないようにするためである。
図26の回路構成の場合、タイミング信号Bだけが‘1’のタイミングにおいて、全ての制御スイッチSWがオフされ、1番目の“a to X”回路ブロックだけが活性化する。これが第0ステップに相当する。
続いて、タイミング信号Bも‘1’になると、2番目の“a to X”回路ブロックまでが活性化する。これが第1ステップに相当する。
以降、タイミング信号B〜Bδ−1が順次立ち上がっていく毎に、各ステップで必要な“a to X”回路ブロックが活性化されていく。
次に、2進数変換回路のコア部分となる“binary”回路ブロックについて説明する。
図27は、“binary”回路ブロックの回路記号である。
“binary”回路ブロックは、図27に示すように、B〜Bδ、I〜Ih(δ+1)−1を入力し、r〜rh(δ+1)−1を出力する。
図28は、“binary”回路ブロックのブロック図である。“binary”回路ブロックは、1ステップの回路構成を“p to X”回路ブロックとして、これに“p to X”回路ブロックの入出力を制御する制御スイッチSWが付加された構成となっている。
具体的には、入力I〜Ih(δ−1)−1は、それぞれ、制御スイッチSW1を介してCδ−1 〜Cδ−1 hδ−1として“p to X”回路ブロックに入力される。これらδ個の制御スイッチSW1は、それぞれタイミング信号B〜Bδ−1によって制御される。したがって、制御スイッチSW1は、B=‘1’の場合、I〜Ih(δ+1)−1がそのままCδ−1 〜Cδ−1 hδ−1として出力され、B=‘1’の場合、入力に依らず出力は‘0’となる。
また、入力I〜Ihδ−1は、それぞれ、制御スイッチSW2を介してQ−1 〜Qh(δ−1)−1 h−1として“p to X”回路ブロックに入力される。これらδ個の制御スイッチSW2は、それぞれBδ∧Bδ−1〜B∧Bによって制御される。したがって、例えば、I及びQ−1 間にある制御スイッチSW2は、Bδ=‘1’、Bδ−1=‘0’の場合のみ、IをそのままQ−1 として出力する。
“p to X”回路ブロックから出力されたCδ 〜Cδ h(δ+1)−1は、制御スイッチSW3を介して、“binary”回路ブロックの出力であるr〜rh(δ+1)−1となる。これら制御スイッチSW3は、タイミング信号Bδ−1〜Bによって制御される。したがって、制御スイッチSW3は、B=‘1’の場合、Cδ 〜Cδ h(δ+1)−1をそのままr〜rh(δ+1)−1として出力する。
以上の回路構成によって、“p to X”回路ブロックは、入力と出力のビット幅をhビットずつ順次増やしながら各計算ステップに対応する。各計算ステップでp進数の桁の数Aを順次上位桁から取り込み、全ての計算ステップが終了したときに得られるのがデータのバイナリ表現となる。
前述のように、タイミング信号B〜Bδは、順次立ち上がる信号である。これに合わせて入力Iと出力rへのパスが上位ビット側からhビットずつ導通していく。
p進数の各桁の数Aは、後述する外部の“A−r”レジスタに初期設定されて、次の計算ステップに入るまでに、選択的にパスが切り替わるように、隣接するタイミング信号Bで論理演算した信号によってオン/オフ制御される制御スイッチSW3を介して“A−r”レジスタに出力される。
次に、前述した回路をまとめて構成された“p−adic to binary”変換演算回路について説明する。
図29は、“p−adic to binary”変換演算回路のブロック図である。“p−adic to binary”変換演算回路は、“binary”回路ブロックに“A−r”レジスタが結合されて構成される。
“A−r”レジスタは、図29に示すように、タイミング信号B及びクロックclkで制御されるレジスタで、入力r〜rh(δ+1)−1、A〜Ah(δ+1)−1、出力I〜Ih(δ+1)−1を持つ。
図30は、“A−r”レジスタの回路図である。
“A−r”レジスタは、ビット毎に2つのインバータからなるフリップフロップFFを有している。このフリップフロップFFには、制御スイッチSW1を介してA(j=0〜h(δ+1)−1)が入力され、制御スイッチSW2を介してrが入力される。一方、フリップフロップFFの出力側には、制御スイッチSW3を介してインバータIV1が接続されている。このインバータIV1の出力がIとなる。
制御スイッチSW1〜SW3はタイミング信号B及びクロックclkによって制御される。具体的には、制御スイッチSW1は/clk∧/B0=‘1’の場合、制御スイッチSW2は/clk∧B0=‘1’の場合、制御スイッチSW3はclk=‘1’の場合にそれぞれオンする。
“A−r”レジスタの初期状態は、p進数の桁A〜Ah(δ+1)−1となっている。
以後、タイミング信号Bが立ち上がるとクロックclkの立ち下がりに同期して取り込んだrを、クロックclkの立ち上がりに同期してIとして出力する。
この“A−r”レジスタは“binary”回路ブロックと結合してタイミング信号B毎に計算ステップを進める。各クロックの変化の様子は、図18と同様である。クロックclkからckが作られ、更にタイミング信号Bが作られる。
全計算ステップが終了すると“A−r”レジスタには、入力であるp進数Aのバイナリ表現Dが保持される。
なお、後で色々な場合について比較するが、実用的な素数pを用いたシステムでは計算ステップの数は10以下となり、“binary”回路ブロックに含まれる“h+1 bit add p”回路ブロックの数は50以下となる。
[タイミング信号発生回路]
次に、“binary to p−adic”変換演算回路、“p−adic to binary”変換演算回路を時分割で制御するクロックなどを発生するタイミング信号発生回路について説明する。
始めに、タイミング信号発生回路の動作概念について説明する。
タイミング信号発生回路は、後述する単位回路を順次接続して構成される回路であり、この単位回路数によって、必要最小限のステップ数を発生させることができる。
図31は、このタイミング信号発生回路の動作概念図である。
タイミング信号発生回路は、単位回路の状態が‘1’である状態をクロックckでシフトしていき、‘1’状態と‘0’状態の境界からタイミング信号Bを発生させる。
クロックclkからその立ち上がりでトグルするクロックck及び/ckは、図32に示すフリップフロップ回路FFで生成する。つまり、フリップフロップ回路FFは、/ck及びclkを入力とするNANDゲートG1、ck及びclkを入力とするNANDゲートG2、NANDゲートG1の出力を一方の入力とするNANDゲートG3、並びにNANDゲートG2の出力を一方の入力とするNANDゲートG4を有する。NANDゲートG3の他方の入力と、NANDゲートG4の他方の入力は、それぞれNANDゲートG4の出力と、NANDゲートG3の出力に接続されている。
図31に示すように、クロックckが変化する毎に、フリップフロップ回路FFの境界が右に移動し、右端に達すると、反射して左に移動する。そして、フリップフロップ回路FFの境界が左端に達すると、反射して右に移動する。以降、右への境界移動、左への境界移動を繰り返していく。このような動作によって、フリップフロップ回路FFの境界をタイミング信号Bの出力とした場合、図18に示すように、クロックckの周期ずつずれて立ち上がるタイミング信号Bが生成される。
続いて、図33で、タイミング信号発生回路ブロックの詳細な回路構成についてその一例を説明する。
タイミング信号発生回路ブロックは、単位回路間のノードnから出力される境界信号b0〜bmからタイミング信号B〜B2m+2を生成するタイミング信号生成部U1と、単位回路を接続してなる境界信号生成部U2と、単位回路の状態の移動方向を決定する信号R及びLを生成する移動方向生成部U3とからなる。
タイミング信号生成部U1は、それぞれがL及びbj(j=0〜m)を入力し、Bを出力するm+1個のORゲートG1と、それぞれがR及びbjを入力し、B(k=2m+1〜m+1)を出力するm+1個のNORゲートG2とを有する。
境界信号生成部U2は、図33に示すように、複数の単位回路によって構成されている。
各単位回路U4は、2つのクロスカップルされたインバータと、単位回路U4の状態を隣接する単位回路U4に伝搬させるための6個のNMOSトランジスタによって構成されている。
具体的には、例えば、1つ目の単位回路U4<1>は、クロスカップルされたインバータIV1及びIV2を有する。
このうち、インバータIV1の出力ノード及びVss端子間には、直列接続された3つのNMOSトランジスタQN1〜QN3を有する。これらトランジスタQN1、QN2、QN3は、それぞれ‘H’(常にオン)、信号R、クロックckで制御される。
一方、インバータIV2の出力ノード及びVss端子間には、直列接続された3つのNMOSトランジスタQN4〜QN6を有する。これらトランジスタQN4、QN5、QN6は、それぞれ隣接する単位回路U4<2>のインバータIV3の出力、信号L、クロックckで制御される。
また、2つ目の単位回路U4<2>は、クロスカップルされたインバータIV3及びIV4を有する。
このうち、インバータIV3の出力ノード及びVss端子間には、直列接続された3つのNMOSトランジスタQN7〜QN9を有する。これらトランジスタQN7、QN8、QN9は、それぞれ隣接する単位回路U4<1>のインバータIV2の出力、信号L、クロック/ckで制御される。
一方、インバータIV4の出力ノード及びVss端子間には、直列接続された3つのNMOSトランジスタQNa〜QNcを有する。これらトランジスタQNa、QNb、QNcは、それぞれ、隣接する3つめの単位回路U4<3>のインバータIV5の出力、信号L、クロック/ckで制御される。
以降、1つ目のユニット回路U4<1>と2つ目のユニット回路U4<2>と同様の単位回路U4が交互に接続された構成となっている。
この構成によって各単位回路U4間の各ノードnが境界信号b0〜bmとなる。また、最初のインバータIV1の出力が信号F、最後のインバータIVaの出力が信号Cとなる。
移動方向生成部U3は、図33で示すように、フリップフロップ回路FFで構成されている。つまり、移動方向生成部U3は、F及び/ckを入力とするNANDゲートG3、C及び/ckを入力とするNANDゲートG4、NANDゲートG3の出力を一方の入力とするNANDゲートG5、並びにNANDゲートG144の出力を一方の入力とするNANDゲートG146を有する。NANDゲートG5の他方の入力と、NANDゲートG6の他方の入力は、それぞれNANDゲートG5の出力と、NANDゲートG6の出力に接続されている。
移動方向生成部U3は、境界信号生成部U2の両端のノードn0、nmの信号F及びCによって状態の移動方向を決める信号R及びLを発生させている。
以上説明した回路によって、「binary world」と「p−adic Zp world」との間を往来させる扉は構成できる。
[リー・メトリック・コードの概要]
次に、「p−adic Zp world」でのデータ処理について説明する。ここでは、コードを構成する各桁を「コード語シンボル」と呼ぶものとする。
コード語シンボルcは、数18に示す整数となる。
[数18]

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

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

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

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

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

ここで、コードCのシンボル数をn、データ語Dのシンボル数をkとすると、γ=n−kであり、γはコードCに含まれる冗長なシンボル数を表している。
この様に構成されるリー・メトリック・コードを作るために入力変換されたデータであるk桁のp進数の桁の数をZpの数として、これをリー・メトリック・コードのデータ語Xとして、G行列から演算C=XGとしてコード表現が得られる。得られたコード語をメモリに記憶する。記憶したZpの数に生じたエラーの情報は、メモリから読み出したリー・メトリック・コードのデータ語Yとして、演算S=YH(HはHの転置行列)からシンドロームを得て、エラーの位置と量が計算できエラーが訂正できる。
次に、リー・メトリック・コードを記憶するメモリセルとして最適なものを示すためにリー・メトリック・コードに現れる量の間の条件関係をまとめる。
Zpのリー・メトリック・コードを用いると、「binary world」で2進数δ桁のデータであるから、コードの語長をn、すなわちC=(c,c,・・・・,c)、データの語長をk、訂正可能なエラーのリー・メトリックの最大値をε=γ−1とするとき、δ+1個のコードデータに対して、数24のようなコードを作ることができる。
[数24]

すなわち、k=δ+1がリー・メトリック・コードでのデータの語長に相当することになる。
素数pの選択をδ+1=kとなるように決めて、更に、k=n−γ=p−1−ε−1=p−ε−2から数25が素数pの具備すべき条件となる。
[数25]

ここで、素数pの条件をまとめると、訂正可能なエラーのリー・メトリックの総量をε、「binary world」でのECC一括処理データビット数をMとすると、M及びpの選択条件は、δh=Mと数25から、数26のようになる。
[数26]

このとき、Zp上のコードとして、データとの冗長語長はγ=ε+1=n−k=n−(δ+1)であるから、「binary world」のデータの2進数としての桁数δと、「p−adic Zp world」のコード語数nとの間には、数27のような関係が成立する。
[数27]

[p−adicセル]
次に、「p−adic Zp world」でリー・メトリック・コードC=(c,c,・・・,c)の各コードcを記憶するメモリセルについて説明する。
一つにつき複数の値の物理量を設定できるメモリセルで、この量が物理的に順序集合をなすメモリセルをZpの表現に対応させるときに、このメモリセルを「p−adicセル」と呼ぶことにする。
p−adicセルとしては、具体的には、MOSトランジスタの複数の閾値を物理量として用いるメモリセル、可変抵抗体の複数の抵抗値を物理量として用いるメモリセル、保持された磁束量子の数を物理量として用いるメモリセル、トラップされた電荷の量を物理量として用いるメモリセルなど、ある物理量を量設定の順序集合の一つの要素として保持できるメモリセルであれば何でもよい。以下において、物理量の順序を「レベル」と呼ぶことにする。
この様なメモリセルに対してレベルとZpの要素との割り付けを行ったメモリセルがp−adicセルとなる。
p−adicセルへのZpの割り付け例を図34に示す。この例は、一つのメモリセルにZpの表現の数と同じレベルを設定し、レベルと表現を割り付けたものである。つまり、セルユニットであるp−adicセルは、1つのメモリセルから構成されている。
図34中a〜fは、それぞれ素数pとして7、11、13、17、19、23の場合を示した例である。それぞれp個に区分された物理量の順序の区分に分けて、それぞれの区分をZpに割り付けている。
メモリセルのエラーとしては順序の近いレベル間で誤動作する可能性が高いので、リー・メトリックが近いものはレベルの順序で近いものを割り当てることになるが、これは必然的に物理量としてのレベルの順序とZpの表現としての順序を一致させることになる。Zpの順序は巡回的であるので、1つのメモリセルに対する順序の割り付け方はp通り存在する。図34に示したのは最低レベルを0に割り付けた場合であるが、Zpのリー・メトリックによる順序が保たれるようなセルレベルとZpの表現が対応していれば、図34に示す例以外の割り付けも利用できる。また、メモリセル毎にこの割り付け方が変わっても、セルアレイの外から見たリー・メトリック・コードの一貫性は維持できる。
レベル変化によるリー・メトリックの変化については図34中aに示すp=7の場合に詳細に示した。変化量をdL=1、2、3とし、対応するレベルの跳びは矢印で示されている。いずれも対応するレベル変化の場合の数はp=7である。
これはpが素数であるので変化量とは互いに素であることによる。また、リー・メトリックの変化量としては(p−1)/2以下しかないことに注意する。Zpの順序が巡回的であることからdL=1や2では、破線で示す矢印のように、レベルとしての跳びの大きい誤動作が現れる可能性は低いと考えられる。
図34中a〜fでは、リー・メトリックの変化量として、ε=(p−1)/4の場合とε´=(p−1)/3の場合とで、各pについて代表的なレベル変化を示した。これらのリー・メトリックとしての変化は物理的レベルの誤動作としては、いずれの素数pに対してもεとε´で各々ほぼ同じ量になる。したがって、同じ物理量を利用するメモリセルに対してpを大きくすればコードのエラーも大きくなりエラー訂正可能量も大きくする必要がある。
次に、p−adicセルの読み出し方法について図35を用いて説明する。
言葉の定義として、「バイアスを区分的にシリアル印加する」とは、メモリセルのレベルにしたがって順番にバイアスを変化させることを言う。
ΔΣ変調(デルタシグマへんちょう)などを用いてセルレベルの物理量を直接センスすることも考えられるが、ここでは、メモリセルへの書き込みとベリファイも考慮して、メモリセルに与えるバイアスを区分的にシリアル印加してリファレンスの物理量Irefと比較し、どのバイアスでIrefを超えたかを検知するセンスの方式を用いる例について説明する。
図35は、p−adicセルからの読み出し動作に必要となるブロック構成である。
図35には、p−adicセルがアレイ状に配列されたp−adicセルアレイと、p−adicセルから読み出した物理量をIrefと比較するセンスアンプ部t−SA、t−SAの結果に基づいて、p−adicセルから読み出したデータを保持するレジスタ、センスアンプ部t−SAとレジスタを選択的に接続する“Zp→h dec”回路ブロック、及びロウデコード/ワード線ドライバからなるコード読み出し部とが示されている。
p−adicセルアレイでは、ZpのデータA=(a,a,・・・,a)の各コードaを記憶するp−adicセルに同時にアクセスする。このアクセスの方法として、ワード線WLとビット線BLを使う従来の方法を想定し、1つのワード線WLと複数のビット線BLとのクロスポイントに設けられたp−adicセルにバイアスをかける。このバイアスは、電圧、電流、又はその他の物理量であって、センスアンプ部t−SAを用いてIrefと比較可能な物理量としてビット線BLに現すものである。
ワード線WLの一端に設けられたロウデコーダ/ワード線ドライバ(Row Dec./WL Driver)は、ワード線WLを選択し、このワード線に対して、読み出しに必要なバイアスを区分的にシリアル印加する。この際のバイアスの区分はp段階となる。
なお、このコード読み出し部のロウデコード/ワード線ドライバは、コード書き込みの際には、コード書き込み部の一部として、選択ワード線WLに対し、コード書き込みに必要なバイアスを区分的にシリアル印加する。この際のバイアスの区分は、p−1段階となる。
センスアンプ部t−SAは、Irefとp−adicセルからの物理量Icellとを比較する回路である。センスアンプ部t−SAは、図35に示すように、IcellとIrefとをセンスアンプsaで比較し、先の比較結果をラッチL2に退避させた後、現在の比較結果をラッチL1に上書き保持する。
センスアンプ部t−SAの出力は、ラッチL1、L2のデータ内容が異なる時のみ信号Lとして‘1’を出力する。即ち、Icellが順序にしたがって変化するときにIrefとIcellの順序関係が最初に逆転したシリアルサイクルでのみ出力Lが‘1’になる。なお、ラッチL1とラッチL2の初期値は両者同じにしておき、最初のIrefとIcellの比較の際に正しいセンス出力が得られるように準備しておく。
“Zp→h dec”回路ブロックは、区分的にシリアル印加するバイアスを制御する信号Δ0、Δ1、・・・、Δp−2、Δp−1を入力とし、この入力に応じて、選択レジスタを指定するhビットの選択線SL〜SLh−1を活性化させる。ワード線WLによって同時に選択されたn個のp−adicセルに対応するセンスアンプ部t−SAの出力は、各々h個のレジスタに選択的に接続されるが、この“Zp→h dec”回路ブロックは、信号Δ0、Δ1、・・・、Δp−2、Δp−1に応じて活性化される選択線SL〜SLh−1によって、センスアンプ部t−SAとレジスタとの対応付けを行う。
レジスタは、信号RSで、内容をリセット、つまり‘0’にし、信号j及びセンスアンプ部t−SAから出力される信号Lが共に‘1’になった場合に内容を‘1’に置き換える。
以上のような構成において、p−adicセルからの読み出し動作は以下のようになる。
データ読み出し前、レジスタの初期値は‘0’になっている。
ここで、レベル0から順にセンス動作を実行し、レベルjのステップでのセンスアンプ部t−SAの出力Lが‘1’になったとする。同時に、レベルjのステップでは、“Zp→h dec”回路ブロックに活性化された信号Δが入力されており、“Zp→h dec”回路ブロックは、jをhビットのバイナリに変換し、対応する選択線SLを活性化させる。
これによって、信号Lと信号jは共に‘1’となり、対応するレジスタの内容は‘1’に書き換えられる。
以上の動作によって、p−adicセルへの全てのステップが終了した時点で、レジスタにはp−adicセルに記憶されたZpの要素のバイナリ表示Aが格納されている。このレジスタに格納されたAが「p−adic Zp world」での演算処理を受けることになる。
以上、Zpの表現にp−adicセルを1セル用いる場合について説明した。しかし、選択したい素数pに対してメモリセルのレベルが不足する場合、ペアでp−adicセルを用いてレベル数を稼ぐことができる。以下では、このようにペアで用いられるp−adicセルを「ペアp−adicセル」(セルユニット)と呼ぶこともある。
そこで、ペアp−adicセルでZpを表現する方法について説明する。
1個のp−adicセルにnレベルが設定可能とする場合、このp−adicセルをペアで用いるとnのレベルの設定が可能になる。このレベル数に素数pを対応付ける場合、pはnより小さく且つ因数分解できないとの条件から、許される素数の形はp=n−2、n−3、n−5、・・・となる。
ここで、ペアp−adicセルのレベルを最大限有効活用できる素数pについて考える。
図36は、1個当たりのp−adicセルに設定可能なレベル数nと、n、n−2、n−3、及びn−5との関係をまとめた表である。図36中下線で示された数が素数となる。nが偶数の場合、素数はp=n−3又はp=n−5、nが奇数の場合、素数はp=n−2のタイプとなることはnの遇奇性から分かる。なお、図36から、n=11とした場合、n−5までに素数は存在しない。
続いて、ペアp−adicセルのレベルについて説明する。ペアp−adicセルの各々のレベルからその組合せでレベルを設定する方法は種々考えられるが、基本的にはペアp−adicセルのいずれかのレベルが1変わればペアp−adicセルのレベルも1変わるように設定される。
ペアp−adicセルに設定された具体的な設定よりも、レベル間の距離の方が、エラー訂正の観点からは重要である。
図37は、11×11の範囲のレベル間距離の行列を示した図である。図37は、図中斜線で表した中心のレベルを基準にしてペアp−adicセルのレベルをいくつ跳び移れば対応するレベルになるかを示している。いわば中心のレベルから見た周りのレベルへの移り難さを表したものである。この数値が小さいレベル間では誤動作が生じやすい。この様なレベル間距離があるときに、Zpの要素の順序とレベルとを如何に対応させるかについては、リー・メトリックの変化とレベル間距離との変化を近づけられるかがポイントとなる。
Zpの要素をゼロを基点として±の数直線で−(p−1)/2〜(p−1)/2の範囲で表したとき、リー・メトリックは中心から見た両端が最大となる。
ここで、数直線をこの数値線の中心でガラが変わる紐と考え、この紐を如何に伸ばせばリー・メトリックが大きくならないかを考える。なお、図37では紐のガラを実線と破線で表現している。
リー・メトリックが大きくならないためには、紐の両端がなるべくレベル距離の大きいところ、すなわち図37に示す行列の角にきて、且つ、紐のガラの変更点ができるだけ紐の中心部分になるように配置すると良い。
この場合、図37に示すように、紐を畳み込み、割付にできた余裕であるダミー部はゼロの中心部に繋げ、紐の中心部の対角線上で適当な位置にゼロを配置して紐が最短リー・メトリックで折り返された紐の部分と最短距離になるようにして、Zpの変化が無い様にしてやるのが良い。
以上説明したZpの割付は、行列の中心のレベルからのレベル距離とリー・メトリックとが適合するように設定されたが、次は、他のレベル位置からのレベル距離との適合の効果を見る。
図38、図39は、共に斜線で示したレベルのペアp−adicセルに対して、レベル距離とZpの割付の数直線の紐の対応を示している。0の周辺には紐の対応する部分の近い部分が素直に畳み込まれている様子が分かる。したがって、ペアp−adicセルのレベルの変化がリー・メトリック・コードの変化に対して可能な限り適合されていることが分かる。
次に、素数pに対する割り付けの具体例について説明する。
1つのp−adicセルのレベル数が3、4、5、6、7、8、9、10の場合の、素数p=7、13、23、31、47、61、79、97の割り付けの具体例を図40〜図47に示す。図40〜図47は、図48中aで示すように、各行列表の縦軸が1つ目のメモリセル<1>のレベル、横軸が2つ目のメモリセル<2>のレベルであり、その組合せによって表されるペアp−adicセルにZpの要素(−(p−1)/2〜(p−1)/2)を割り付けている。
図48中b及びcに示すように、εとε´は一定のレベル距離パターンを仮定して、そのときの最大リー・メトリック変化量を表す。すなわち、εは図48中bに示すように、レベル距離2までの変化を対応可能なリー・メトリックであり、ε´はレベル距離3とレベル距離4の一部であるペアp−adicセルの両方がレベル距離2の変化をした場合に対応可能なリー・メトリックである。
図40〜図47に示す行列表の中で、実線がεに対応するZp割り付け移動であり、破線がε´に対応する割り付け移動である。なお、p=31までは如何なる変化に対してもε´で対応可能である。
次に、ペアp−adicセルからの読み出し方法の一例を説明する。
ペアp−adicセルの読み出し方法は、基本的には、図35を用いて説明した単体のp−adicセルの読み出す方法と同様である。したがって、ここでは、異なる点を中心に説明する。
ペアp−adicセルを構成する個々の単体セルを見た場合、異なるレベルが設定されているので、これらを同時に読み出す。そこで同時に選択されるワード線WLに対してペアp−adicセルを構成するセルアレイとしてメモリセル<1>からなるp−adicセルアレイ<1>と、メモリセル<2>からなるp−adicセル<2>を設ける。これらp−adicセルアレイ<1>、p−adicセルアレイ<2>は物理的に区別されている必要はなく、少なくともセルアレイの構成上のアドレスの割付で決まる論理的な概念で区別されていれば良い。セルアレイに与えるバイアスとしては、図35の場合と同様、Δ〜Δl−1を区分的にシリアル印加する。ここで、lは1つのp−adicセルに設定できる最大のレベル数であり、例えば、図40〜図47に示した行列表の行又は列の数であるnそのものである。
各p−adicセルアレイにおいて、ZpのデータA=(a,a,・・・,a)の各コードaを記憶するp−adicセルに同時にアクセスする。
ワード線WLによって同時に選択された各p−adicセルアレイのn個のp−adicセルに対応するセンスアンプ部t−SAの出力は、各々l個のレジスタに選択的に接続される。
これらのレジスタとセンスアンプ部t−SAの出力Lの選択的接続を制御するのは、図35の場合とは異なり、区分的にシリアル印加されるバイアスの印加タイミングに対応して‘1’となるl本の信号δ、δ、・・・、δl−2、δl−1となる。信号δはp−adicセルのレベルに対応したバイアスであるため、レベルjの検知ステップでセンスアンプ部t−SAの出力Lが‘1’であれば、対応するp−adicセルのレベルはjということになる。
レジスタは、図35の場合と同様、予め信号RSによって‘0’に初期化されているが、センスアンプ部t−SAの出力信号Lとδが共に‘1’になった場合、レジスタの内容は‘1’に設定される。メモリセルへの全ての検知ステップを終了した時点でレジスタにはメモリセルに記憶されたレベルが保持されている。
この保持された各メモリセルのレベルLを、前述のZpとレベルとの対応行列表にしたがって、ペアp−adicセルを構成するメモリセル<1>、メモリセル<2>に対応するレジスタの内容の論理積(AND)を取り、対応するZpの要素を得る。得られたZpの要素に対しては、前述の“Zp→h dec”回路ブロックを用いてhビットのバイナリ表示にして、「p−adic Zp world」での演算処理を受ける。
次に、p−adicセル及びペアp−adicセルのレベル数によるパフォーマンスの比較を行なう。
始めに、単体のp−adicセルを用いた場合に関し、図34に示した具体例について、図50に評価項目毎にまとめた。図50に示す表の第1列目が評価項目となる。各評価項目は以下の通りである。
L: p−adicセルのレベル数
p: 使用する素数
h: Zpをバイナリ表示するために必要な最小ビット数
ε: (p−1)/4より大きな最小の整数であり、エラー訂正できるエラーのリー・メトリック総量
ε´: (p−1)/3より大きな最小の整数であり、エラー訂正できるエラーのリー・メトリック総量
ここで、ε及びε´は、p−adicセルの設定レベル数に依らず、p−adicセルのレベルを作る物理量の誤動作の量が、ほぼ一定であると仮定して設定している。
M: M=h(p−ε−3)によって決定する値であり、ECCで一括処理を行う「binary world」のバイナリのデータ量
M´: M´=h(p−ε´−3)によって決定する値であり、ECCで一括処理を行う「binary world」のバイナリのデータ量
δ: Mの2進数としての桁数
δ´: M´の2進数としての桁数
p−1: リー・メトリック・コードのコード語を記憶するのに必要なp−adicセル数
logL: p−adicセルをバイナリを記憶する多値セルとした場合に、p−adicセルに記憶できるビット数
M/logL: 「binary world」でデータMをp−adicセルと同じレベル数を持つ多値セルに記憶させる場合のメモリセル数
但し、M/logLは、ECCが設けられていないことを条件として算出している。
M´/logL: 「binary world」でデータM´をp−adicセルと同じレベル数を持つ多値セルに記憶させる場合のメモリセル数
但し、M´/logLは、ECCが設けられていないことを条件として算出している。
冗長度: データMを「p−adic Zp world」でp−adicセルにECCを入れて記憶する場合のセル数と、同じデータMを「binary world」で同じp−adicセルを多値セルとしてECC無しで記憶する場合のセル数との比
冗長度´: データM´を「p−adic Zp world」でp−adicセルにECCを入れて記憶するセル数と、同じデータMを「binary world」で同じp−adicセルを多値セルとしてECC無しで記憶する場合のセル数との比
ε/(p−1): εを用いた場合の最大訂正できるセル数の割合
ε´/(p−1): ε´を用いた場合の最大訂正できるセル数の割合
なお、図50では、素数3や5では本実施形態に係るメモリとしての「p−adic Zp world」を構成できないので、7以上の素数について示されている。
ここで、実用面からレベル数はせいぜい20くらいまでとし、且つ、コスト的なメリットの観点からECCを入れた場合の冗長度を2以下として考えると、図50中で点々で示した列が選択可能な範囲となる。この範囲において、ほぼ30%の訂正率が確保されるため、かなり信頼性の高いメモリシステムが構築できると考えられる。
続いて、ペアp−adicセルに関し、図40〜図47に示した具体例について、図51に評価項目毎にまとめた。図51に示す表の第1列目が評価項目となる。評価項目のうち図50に示す項目と異なる評価項目は以下の通りである。
L: ペアp−adicセルを構成する単体のメモリセルのレベル数
−p: ペアp−adicセルのレベルにZpを割り付けたときの余分なレベルであって、図40〜図47に示した具体例におけるZpの‘0’を冗長に割り付けたレベルの数
2(p−1): リー・メトリック・コードのコード語を記憶するのに必要なp−adicセル数
ここで、p−adicセルはペアで利用されるため、図50に示す表の2倍となる。
なお、図51に示すεとε´は、図50に示すεとε´とは異なり、p−adicセルのレベルの変化距離を固定し、Zp割付の対応するリー・メトリックとして焼きなおしたもので、レベル数が多い場合はレベルを作る物理量の誤動作変化量は小さくなるものとして算出されている。即ち、レベルの多いセルは精度良く作られると仮定している。
さて、メモリセルのレベル数を余り多くすることができない場合にペアp−adicセルを利用するという前提のもと、実用的なLとして10以下と仮定する。したがって、素数pは100以下となる。さらに、コスト的なメリットを考えて冗長度を2以下にすると考えると図51中で点々で示した列が選択可能な範囲となる。この範囲において、訂正率がほぼ20%確保されるため、かなり信頼性の高いメモリシステムが構築できると考えられる。
[p−adicメモリシステムのデータ/コード処理手順]
次に、「p−adic Zp world」でのECCの演算について、「p−adic Zp world」の入口での変換手順、Zpデータとしてメモリシステムに入力されたコードをエンコードする手順、メモリシステムから読み出されたコードをデコードする手順、「p−adic Zp world」の出口での変換手順についてまとめる。
ここでは、Zpを決める素数であるp、pのバイナリ表示に必要な最少ビット数であるh、一括処理データの「binary world」での2進数としての桁数であるδ、訂正可能なエラーのリー・メトリック総量であるε=γ−1については決まっているものと仮定する。また、以下の説明においてn、kはそれぞれn=p−1、k=n−γとする。
「p−adic Zp world」の入口における変換手順は、以下のようになる。
(手順0) 始めに、外部からメモリシステムに入力されたバイナリデータをhビットずつまとめ、数28に示す2進数表現のδ桁のデータ語D(h)に変換する(図52のS1)。
[数28]

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

Zpデータとしてメモリシステムに入力されたコードをエンコードする手順は、以下の通りである。
(手順1) 始めに、手順0によって得られたZpの要素a〜aδにゼロを追加し、数30に示すデータDのk個の要素a〜ak−1とする。
[数30]

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

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

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

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

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

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

得られたrは、エラーが生じたコードのコード語シンボルの位置の逆元であり、それに対応するnは、生じたエラー量から変換された量となる。
(手順6) 手順6では、解の多重度nからエラー量を変換で求める。エラーのあるコード語シンボルの位置はt=r−1となり、解を得るための多項式を得るために行なった変換の逆変換をnに施すことになる。ut=nの関係があるので、e=(ut−1nとすればnから本来のエラー量eを得ることができる。このエラー量eをメモリセルから読み出したコードYのシンボル値yから引いて、訂正されたコードCのシンボル値cを得る(図54のS11)。
ここまでで、メモリセルに記憶された正しいコードCが得られたので、手順7、手順8によって、メモリシステムに入力されたバイナリデータを求める。
(手順7) 手順6によってエラー訂正されたコードCと生成行列Gから、XG=Cなる多元連立一次方程式を介して、k個のZpの要素a〜ak−1とX(=a,a,・・・ak−1)を求める。これによって、δ+1個のZpの要素a〜aδが得られたことになる。得られた要素a〜aδから、δ+1桁のp進数表現のデータ語D(h)を作る(図54のS12)
(手順8) 最後に、このデータ語D(h)をδ桁の2進数表現に変換し、各桁の数字をバイナリ表現にする。以上によってメモリシステムに入力されたバイナリデータの復元が完了する(図54のS13)。
次に、「p−adic Zp world」でのデータ処理の手順で用いた方法の原理を説明しておく。この原理は従来の方法を改良したもので「シンドローム変換法」と呼ぶことにする。
メモリシステムに保持されたコード語Cの成分は、Zpの数であり、成分毎に様々な擾乱を受けて変化を起こし、数37に示すように、異なる成分からなるコード語Yへと変化する。
[数37]

このYからCを復元するのがデコードである。デコードに先立ちシンドロームを求める。
シンドロームSは、あるmをZpから選択して、S=(Sm+l)(l=0〜γ−1)とし、m=0よりSを得て|S|≦γ−1ならデコードを開始する。シンドロームSは、H行列を利用して数38のような行列演算によって、要素がSm+0、Sm+1、・・・、Sm+γ+1として求まる。
[数38]

ここで、HはHの転置行列である。これはG行列とH行列の構成がGH=0(mod p)となるように構成されていることより、Y=C+Eとおくと、SはEの成分で表せる。なお、m=0として、E=(e,e,・・・,e)とすると、S=ΣeとなっていてSは各シンボルのエラーの総和になっている。|S|≦γ−1の場合、以下のシンドローム変換法でエラーを求めることができる。この条件を満たさなくても計算上はコード成分に対するエラーの値を得るが、真のコードに対するエラーか、或いは隣のコードに対するエラーかを判別できないため、エラー訂正に用いることはできない。これはコード間のリー・メトリックの最小値が2γであることによる。
エラー訂正に利用できることが確実な場合、次にコード語のエラーの成分eの計量を全て一括して変換する。有限体の固定した要素と全ての要素との積を作ることにより有限体の全ての要素が得られることを利用して、予め定めた要素ηに対して|S|≠0となるmに対して、uS≡ηなるuを求める。メモリセルアレイに記憶されたエラーを含むコードYにこのuを乗じてシンドロームを求めると、Sにuを乗じた成分のシンドローム成分としてuS、uSm+1、・・・、uSm+γ+1を得る。これをuSと表記する。つまりuSは数39のように表わすことができる。
[数39]

変換された後では、変換後のエラーの総和uSmがηになっていることに注意する。また、この総和からエラーの成分eがu(j)とみなせることも分かる。これらのシンドロームが唯一のエラーの情報であり、これを元に正しいコードの復元を行う。
続いて、デコードの原理をエラーが予め分かっているとして説明する。
メモリセルアレイに記憶されたコードは、エラーE=(e,e,・・・,e)(n=p−1)を持つので、新たなシンドロームにといって仮想的なエラーは{u(1),u(2),・・・,u(n)}となる。これらn=p−1個のエラー成分を変換したものを2つの組JとJに数40のように分類する。
[数40]

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

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

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

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

この多項式Ψ(x)はΛ(x)/V(x)に等価な多項式であるが、互いに素なλ(x)とv(x)のキー条件は数46のようになるため、ηをうまく選択することでV(x)=1とでき、Ψ(x)をΛ(x)そのものとして採用することができる。
[数46]

多項式の次数に関する条件deg λ(x)−deg v(x)=η、deg λ(x)+deg v(x)≦γ−1から0≦2deg v(x)≦γ−1−ηなので、0≦γ−1−η≦1ならdeg v(x)=0になることが分かる。即ち、γ−1≧η≧γ−2の場合、V(x)=1且つΛ(x)=Ψ(x)とできて、Ψ(x)はこの条件を満たす。このときシンドロームから求めたΨ(x)が予め決めたηとη=deg Ψ(x)=deg Λ(x)が成立するはずである。成立する場合、キー条件を全て満たすため、Ψ(x)を用いて解を得ることができる。一方、不成立の場合、エラーがキー条件を満たさず、解無しとなる。
この方法は全てのエラーコード成分位置を集合Jに集める変換をエラーに対して施せることに相当する。また、別の観点からは変換したエラーの総和がγ−1以下、γ−2以上になるように変換することによってエラー修正ができるようになる可能性があることを示す。
ここで、可能性と言ったのはふたつの意味があり、第1は、全てのエラー成分位置がJに集められて、シンドロームから求めたΨ(x)の次数がちょうどηに等しいことが必要だからである。第2は、|S|≦γ−1でなくても計算上はエラー量を得ることができるが、誤訂正を排除するためにこの条件を加える必要があるからである。
次の例で示すように1コード語成分のエラーに対してはどのようなエラーに対してもこの方法で解を得られ、2コード語成分についてはシンドロームを循環的に用いることでどのようなエラーにもこの方法で解を得られることが分かる。
解探索では、Λ(x)=Ψ(x)、V(x)=1とおいてZpの要素から方程式を満たす解を見つけ、得られた根の多重度とから、逆変換を施して真のエラーEを得る。
次に、エラーの計量を変換して解探索多項式を求めるシンドローム変換法で、根の数すなわちエラーを生じたコード語の成分の数に対してどの様なエラーが探索できるか検討する。
始めに、解探索多項式から得られる根が1根の場合について検討する。
根をj−1とするとエラーコードE=(0,e,…,0)(n=p−1)の成分位置はjであり、そのエラー量はeである。適当なu(j)を乗じて変換し、これらが各々p/2以下でJ={j;u(j)<p/2}にまとまれば、数47に示す多項式Ψ(x)が構成できる。
[数47]

数47からエラーの量に拠らず必ずu(j)=ηとなりJに入る。したがって1コード語のエラーは完全にその値を得ることができるが、コード語間の最小距離が2γであるので、|e|がγ以上では真のコード語を特定できず、mの選択によって様々な値のエラー量を得ることになる。各々のエラー量がコード語に対し、そのうちの一つが真のコード語からのエラーとなる、いわゆるリスト訂正となる。
続いて、解探索多項式から得られる根が2根の場合について検討する。
根をi−1とj−1とするとエラーコードE=(0,…,e,…,e,…,0)(n=p−1)の成分位置はiとjであり、それらのエラー量はeとeである。適当なu(j)を乗じて変換し、これらが各々p/2以下になりJ={i,j;uU(i),u(j)<p/2}にまとまれば、数48のΨ(x)が構成できるので、多項式Ψ(x)からエラー量を求めることができる。
[数48]

適当なu(j)をエラーコードに乗じて変換し、これらが各々p/2以下になりJにまとまるには、eとeが一定の関係を持たねばならない。これは両者が等しければ十分であり、等しければu(j)による変換でどの様なエラー量もηにできるため、2コード語成分のエラーは完全にその値を得ることができる。
しかし、コード語間の最小距離が2γであるのがリー・メトリック・コードであるから、|e|+|e|がγ以上では真のコード語を特定できず、mの選択によって様々な値のエラー量を得ることになる。各々のエラー量がコード語に対応し、そのうちの1つが真のコード語からのエラーとなる。ちなみに、2つのエラーの距離がある条件を満たせば適当な変換によって両者をJにまとめられるので、両者が等しいは必要条件ではない。
次に、2コードのエラーを等しくする変換方法について説明する。
2つのエラーコードをi、jとし、それぞれにエラー量をe、eとする。この場合、シンドロームは、S=e+eとなる。更にシンドローム計算から分かるように、シンドロームは、S=i+jとなる。つまり、適当なmを選択することで、i≡jとすることができる。
ここで、Zpの原始根と指数表示を用いてe=α(ei)、e=α(ej)、i=α(i)、j=α(j)とすると、m(i)+(e)≡m(j)+(e)が成立する。したがって、mは、m≡−{(e)−(e)}/{(j)−(i)}によって求めることができる。
以上から、シンドロームの系列(S,Sm+1,…,Sm+γ−1)を用いて、uS=ηとなる係数uを求めれば良い。
しかし、mは当初不明であるため、2つのコード語シンボルの様々なエラーに対応するには、次のような変換方法を用いる。最初に、mを0からp−2までスキャンし、各mに対する係数uをu=ηSm−1によって算出する。これによって、(uS,uSm+1,…,uSm+η−1)を求めることができる。続いて、これら(uS,uSm+1,…,uSm+η−1)から多項式Ψ(x)を構成する。最後に、構成された多項式Ψ(x)のうち、deg Ψ(x)=ηを満たすmを抽出する。以上によって抽出されたmのときにΨ(x)を構成してdeg Ψ(x)=ηとなったらそのmのときにΨ(x)を用いて根と多重度を求める。
以上のように、解探索多項式の根が2根以下すなわち2コード語成分のエラー以下ならどの様なエラーでも求めることができる方法が得られたが、次は、3根以上の場合についてはどうなるかを検討する。
3根以上で解が得られる条件は全ての根のエラー量を変換してJ={j;{j∈(1,2,・・・,n);u(j)<p/2}に属するようにできることであり、このとき数49に示すようにΨ(x)がη次の多項式として構成される。
[数49]

どの様なエラー量に対してもこの様にできる変換は、2根以下では存在するが、3根以上では簡単な変換として構成することは困難である。そこで2コード語成分以下のエラーが生じている場合にはどの様なエラーに対しても対処できる方法として、前述の2根の場合の変換と解探索の方法をそのまま用いる。但し、3根以上のエラー成分がJにまとまるエラー分布の場合を増やすために、新たなスキャンとして、ηのもうひとつの候補γ−2=ε−1に対しても同じ方法を繰り返し適用する。
即ち、ηをεとε−1の各ηに対してmを0からp−2と順に変えてu≡ηS −1として(uS,uSm+1,・・・,uSm+ε)→Ψ(x)とし、deg Ψ(x)=ηならΛ(x)=Ψ(x)から解が得られる。これを解いて解探索終了。deg Ψ(x)≠ηなら解けないエラー分布であり、解無しとして終了する。
この解法の中には2根や1根の解法が含まれ、2根以下ならコード語成分にランダムに生じた如何なるエラーでも計算ができる。3根以上のコード語成分のエラーでは、エラー量の分布が狭いなど特殊な場合については、最大ε=γ−1コード語成分の訂正が可能である。特にエラー量の分布が、全てのエラー量が等しいか同じ様な値に集中している場合については、2根以下の場合と同じであるのであらゆる種類のエラーが生じてもコード語成分の計算が可能ある。しかし誤訂正を考慮すると、真のコードへの訂正はΣ|e|≦εの場合のみとなり、他の場合には様々なコードに対するエラー量、即ち誤訂正のエラーが得られ、この中に真のコードからのエラーが存在することになる。
また、ηの選択を2つにしたスキャンによって3コード語成分以上のエラー分布でJにまとめる変換の場合が増えるため、訂正できる場合が増えることは確実であるが、どの様な分布がさらに訂正可能となるかは明確ではない。
なお、3根以上の場合にはε以下のエラーに対して、従来のユークリッド(Euclid)法で解探索多項式を求められる全ての場合に対してJへの変換ができるわけではないため、シンドローム変換法で対応できるわけではない。しかし、エラーの成分のエラー量のパターンが似ている場合には差はなく、シンドローム変換法で3根以上でも容易に対応できる点は大きなメリットとなる。
p−adicセルのようにエラーの量が各メモリセルで似ている場合には処理の規模と計算がより簡略化され、オンチップシステムとして有効になる。
無論、シンドローム変換法と従来のユークリッド法とを併用することで、訂正できるエラー分布の範囲を向上させることができる。しかし、ユークリッド法で複雑な演算処理と回路を用いるため、回路規模の簡略化と処理の高速化が損なわれてしまう。また、リー・メトリック・コードを用いたメモリシステムの解探索にユークリッド法をそのまま用いることができるのも当然である。
[p−adicメモリシステムの構成]
次に、「p−adic Zp world」のリー・メトリック・コードを用いた本実施形態に係るメモリシステムの構成について説明する。
図55は、本実施形態に係るメモリシステムのブロック図である。
「p−adic Zp world」において、メモリシステムの最大のメリットは、リー・メトリック・コードを用いたECCを利用することができる点である。したがって、ECC利用を前提としてメモリシステムを構成している。
本メモリシステムは、「p−adic Zp world」の入口処理を実行する部分、「p−adic Zp world」における処理を実行する部分、及び「p−adic Zp world」の出口処理を実行する部分の3つの部分に大別することができる。
「p−adic Zp world」への入口処理を実行する部分として、p進数変換部101がある。このp進数変換部101は、後述するエンコード部201と共に、コード生成部に含まれる。入力された「binary world」のバイナリデータDは、最初、このp進数変換部101によってp進数変換された上でデータAとして「p−adic Zp world」に入力される。
「p−adic Zp world」における処理を実行する部分には、エンコード部201、p−adicセルメモリ部202、エラー検出・訂正部(203〜206)、及びデコード部207がある。
エンコード部201では、p進数変換部101から入力されたデータAに対し生成行列Gを作用させてリー・メトリック・コード化し、書き込みコードCとしてp−adicセルメモリ202に記憶保持する。
ここで、p−adicセルメモリ202は、フラッシュメモリ、PRAM、ReRAM等の大容量記憶メモリである。
p−adicセルメモリからデータを読み出す際には、コード化されたデータCはエラーを含み読み出しコードYとして読み出される。
シンドローム生成部203では、シンドロームSの計算をシンドローム行列Hと、Yの各コード語成分の位置に合わせてその場所の座標数のm乗を掛ける処理を数50に示す対角行列を用いて行なう。
[数50]

そこでm=0として、S=0の場合、エラーが生じていないので、「p−adic Zp world」における最後の処理のステップをすべくコードYをデコード部207に出力する。一方、S≠0の場合、m=0の場合のSの最初の成分Sが|S|>γなら、エラー訂正は確実には不可能なのでNG信号を出力した上で、エラー込みのコードYをデコード部207に出力する。その他の場合には、シンドロームSを解探索多項式生成部204に出力する。
解探索多項式生成部204では、このシンドロームSからη=γ−1として解探索多項式Ψ(x)を求め、そのη次の次数の係数がψη≠0の場合、そのψ(x)をハッセ微分多項式生成部205に出力する。一方、ψη=0の場合、η=γ−2として再び多項式Ψ(x)を求める。そして、その多項式Ψ(x)のη+1次の次数の係数ψη+1=0の場合、η次の次数の係数ψη≠0ならΨ(x)がη次であるのでΨ(x)をハッセ微分多項式生成部205に出力する。一方ψη=0なら、mを1つ増やしながらシンドロームSを求める処理を繰り返す。そして、mがp−2になるまで繰り返してもΨ(x)のη次の係数ψη=0なら、エラー訂正は不可能であるのでNG信号を出力した上で、エラー込みのコードYをデコード部207に出力する。
ハッセ微分多項式生成部205では、入力されたΨ(x)からハッセ微分多項式を求め、これらの根rとその根の多重度nを算出し、t=r−1としてコード復元部206に出力する。
コード復元部206では、この算出された根rとその根の多重度nを用いてエラーの生じたコード語の位置座標と、エラー量eを求めて、エラー量のリー・メトリックの総量Σ|e|を算出する。これがγ−1以下ならリー・メトリック・コードのコードデータCを復元する。一方、γ以上なら誤訂正の可能性があるため、訂正不可能と考え、次のη或いは次のmについて処理すべく、シンドローム生成部203或いは解探索多項式生成部204に処理を移す。但し、m=p−2でη=γ−2の場合には、NG信号を出力した上で、デコード部207に処理を移す。
デコード部207では、コードデータCに生成行列Gの逆変換を実行し、p進数を得てコードAを得る。このコードAは、「binary world」に出力される。
「p−adic Zp world」の出口処理を実行する部分として、2進数変換部301がある。
進数変換部301では、コードAを2進数へとバイナリ表現の出力データに変換して出力する。これが復元されたバイナリデータDとなる。
ここからは、「p−adic Zp world」の各ブロックの回路構成について具体例を示して説明する。
図56中(A)は、エンコード部201の回路構成例である、図56中(B)は、エンコード部201を制御する2重のクロックckとclを示す図である。
図56中(B)に示すように、クロックclは、ckの立ち上がりに遅れて立ち上がるパルスであり、クロックck毎にcl〜clp−ε−3の合計p−ε−2発のclが順次立ち上がる。そして、clp−ε−3が立ち上がると、これに遅れて次にクロックckが立ち上がる。同様の波形がckからckまで繰り返される。
これらクロックck、clのうち、ckは“Counter(1 to p−1)”回路ブロック及び“Ri(1〜p−1)”レジスタ部を制御し、clは、“X k−times”回路ブロック、“Ro(0〜k−1)”レジスタ部、及び“Rgstr”レジスタ部を制御する。
“Counter(1 to p−1)”回路ブロックは、初期状態が0で、クロックckが立ち上がる毎に改めてクロック数を数えて出力する回路である。すなわちck(j=1〜p−1)のうち、ckの立ち上がりでjを“X k−times”回路ブロックに出力する。
“Ri(1〜p−1)”レジスタ部は、コード語Cの成分cを記憶するレジスタで、合計p−1個の数を記憶することができる。この“Ri(1〜p−1)”レジスタ部は、ckの立ち上がりのタイミングに合わせて順次個々のレジスタに数を記憶していく。即ちckj+1の立ち上がりのタイミングで要素cとなるデータをレジスタに取り込む。ckの立ち上がりによって、レジスタにp−1個の要素cが取り込まれる。つまり、コード語Cを記憶することができる。
“X k−times”回路ブロックは、クロックclが立ち上がる度に出力に入力を乗じる回路である。“X k−times”回路ブロックでは、入力されるjを合計p−ε−2回のclの立ち上がりの度に出力に乗じる。即ち、cl(i=0〜p−ε−3)の立ち上がりによって、“X k−times”回路ブロックの出力は(j)i+1となる。この出力は“X Zp”回路ブロックに出力される。
“Ro(0〜k−1)”レジスタ部は、k個の数を記憶できるレジスタであり、初期状態では、コードAのk=p−ε−2個の成分a〜ap−ε−3を記憶している。“Ro(0〜k−1)”レジスタ部には、クロックclが入力されており、このクロックclが立ち上がる度にコードAの成分a〜ap−ε−3を順次出力する。即ち、cl(i=0〜p−ε−3)を受けてaを出力する。
“X Zp”回路ブロックは、入力の掛け算をZpで行なう回路である。“X Zp”回路ブロックには、クロックcl毎に“X k−times”回路ブロックの出力(j)i+1と“Ro(0〜k−1)”レジスタ部の出力aが入力され、(j)i+1を出力する。この出力された数(j)i+1を加算していくのが、“h bit AD mod p”回路ブロック及び“Rgstr”レジスタの組み合わせである。
“h bit AD mod p”回路ブロックは、2つの入力の数の和をpを法として求める回路である。一方、“Rgstr”レジスタは、初期状態が‘0’でクロックclの入力毎に、“h bit AD mod p”回路ブロックからの入力を遮断し、自身が保持する内容を“h bit AD mod p”回路ブロックに出力するレジスタである。図56に示すような、“h bit AD mod p”回路ブロック及び“Rgstr”レジスタの接続によって、クロックclの入力毎に前回出力した数に新たな“X Zp”回路ブロックから出力される数を加算していく。即ち、クロックcl〜clp−ε−3が立ち上がると、コードAをリー・メトリック・コードに変換した後のCの成分cが、クロックckのサイクルで出力される。これが次のckj+1のサイクルの頭で“Ri(1〜p−1)”レジスタ部に保持される。これによって、コードAから変換されたコードCを得ることができる。
次に、図56に示された“X Zp”回路ブロックを構成する積演算回路について説明する。
始めに、Zpでの数の掛け算を行なう回路の原理の説明を行なう。
Zpの2つの数aとbをそれぞれhビットでバイナリ表示したときの各ビットは数51のように表示し、各ビットの積をh×hの要素のMabで表す。
[数51]

ただし、hはpをバイナリ表示できる最小のビット数とする。
ここで、使用する計算の根拠となる2つの事項を挙げる。
(第1の事項) 0≦a、b≦p−1から、0≦a/2+b≦3/2(p−1)<2(p−1)となる。つまり、Zpのhビットバイナリ表示の一方の数の最下位ビットを無視し、桁を1桁ずらしてh−1ビットバイナリの数とみなしたものと、hビットで表される数とを加えた場合でも、その和には、pが高々1つ含まれるのみである。したがって、この和をpが法としてみればhビットのバイナリで表示することができる。
(第2の事項) 0≦a≦p−1から、2a+1≦2p−2+1=2p−1となる。つまり、hビットバイナリ表示の数に最下位ビットを加えてh+1ビットの数にした場合でも、その和には、pは高々1つ含まれるのみである。したがって、この和をpを法としてみればhビットのバイナリで表示することができる。
そこで、これら2つの事項を利用して計算を行う。
数52は、上記第1の事項を利用した前半の計算ステップ群である。なお、上記第1の事項を利用した部分については下線を付している。また、図57は、前半の計算ステップ群を、模式的に示した図である。
[数52]















前半の計算ステップ群の第1のステップでは、始めに、数52中の(b)式に示すように、pを法として得られたhビットの数から最下位ビットM00をはき出し、残りの数を2でくくる。
続いて、この2で括られた項から、数52中の(b)式に示すように、掛ける数bの最下位ビットBと掛けられる数aとの乗算を行いh+1ビットの数(M10+M20+・・・+Mh−1・0h−2)を作る。これと共に、この時点における掛ける数bの最下位ビットBと掛けられる数aとの乗算を行い、数52中の(c)式に示すように、hビットの数(M01+M112+・・・+Mh−1・1h−1)を作る。
最後に、数(M10+M20+・・・+Mh−1・0h−2)と数(M01+M112+・・・+Mh−1・1h−1)とを加算し、数52中の(d)式に示すように、新たなhビットの数(Q +Q 2+・・・+Q h−1h−1)を作る。
以降同様の計算ステップを、数52中の(o)式で示すように、掛ける数bの最上位ビットBh−1と掛けられる数Aとの乗算を行いhビットの数(Qh−2 +Qh−2 2+・・・+Qh−2 h−1h−1)を得るまで繰り返す。
数53は、上記第2の事項を利用した後半の計算ステップ群である。なお、上記第2の事項を利用した部分については2重下線を付している。また、数53中の(p)式は数52中の(o)式に続く式である。
[数53]






後半のステップ群では、前半のステップ群で得られた2h−1ビットの数からpを引いてp以下の数を得る。
始めに、数53中の(o)式で示された前半のステップ群で得た2h−1ビットの数のうち、最上位からh+1ビット分の数Qh−3 h−2+2h−1(Qh−2 +Qh−2 2+・・・+Qh−2 h−1h−1)を2h−2で括る。この結果が、数53中の(p)式となる。
続いて、数53中の(p)式で示されたh+1ビットのバイナリ表示の数Qh−3 +2(Qh−2 +・・・+Qh−2 h−1h−1)からpを引いて、数53中の(q)式に示すような、hビットの数(Qh−1 +Qh−1 2+・・・+Qh−1 h−1h−1)を得る。
以降、ビット数を減らしながら同様の計算ステップを繰り返す。そして、数53中の(u)式に示すようなhビットの表示を得て終了する。
以上、数52及び数53で示す全計算ステップの終了によって、Zpの数の乗算の結果としてhビットの積が得られる。
図58は、“X Zp”回路ブロックの一般的な回路記号を示す図であり、図59は、“X Zp”回路ブロックのブロック図である。また、図60は、図59に示す回路構成による演算処理を模式的に示した図である。
“X Zp”回路ブロックは、大別して、数52で示した前半の計算ステップ群を処理する回路と、数53で示した後半の計算ステップ群を処理する回路とからなる。
前半の計算ステップ群を処理する回路は、ANDゲートG1と、h−1個の“h bit AD mod p”回路ブロックとで構成される。
ANDゲートG1は、掛けられる数aの第i(i=0〜h−1)ビットと、掛ける数bの第j(j=0〜h−1)ビットとの論理積を取り、これをMijとして出力する。
“h bit AD mod p”回路ブロックは、Zpの2数のpを法としての和を求める回路である。“h bit AD mod p”回路ブロックは、A〜Ah−1、及びB〜Bh−1を入力し、Q〜Qh−1を出力する。
1つ目の“h bit AD mod p”回路ブロック<1>は、A〜Ah−2、Ah−1、及びB〜Bh−1に、それぞれM10〜Mh−1・0、‘0’、M01〜Mh−1・1を入力し、Q〜Qh−1からQ 〜Q h−1を出力する。
以上のように、前半の計算ステップ群を処理する回路は、“h bit ADmod p”回路ブロック<1>〜“h bit ADmod p”回路ブロック<h−1>の出力と入力とを順次接続して構成されている。
後半の計算ステップ群を処理する回路は、h−1個の“h+1 bit mod p”回路ブロックで構成されている。この“h+1 bit mod p”回路ブロックは図6、図7に示す回路である。
1つ目の“h+1 bit mod p”回路ブロック<1>は、A、及びA〜Aに、それぞれQh−3 、及びQh−2 〜Qh−2 h−1を入力し、Q〜Qh−1からQh−1 〜Qh−1 h−1を出力する。
2つ目の“h+1 bit mod p”回路ブロック<2>は、A、及びA〜Aに、それぞれQh−4 、及びQh−1 〜Qh−1 h−1を入力し、Q〜Qh−1からQ 〜Q h−1を出力する。
以上のように、後半の計算ステップ群を処理する回路は、“h+1 bit mod p”回路ブロック<1>〜<h−1>の出力と入力とを順次接続して構成されている。
全ての回路はクロック非同期で動作し、入力Mabを与えることによって出力Qが確定する。
ここで、“X Zp”回路ブロックの回路規模に言及する。
例えば、p=17とした場合、h=5となる。この場合、“X Zp”回路ブロックは、h−1=4個の“h bit AD mod p”回路ブロックとh−1=4個の“h+1 bit mod p”回路ブロックで構成することができる。このことから、“X Zp”回路ブロックの回路規模は小さいと言える。
なお、“X Zp”回路ブロックでは、2h−2個必要となる。
次に、図59に示された“h bit AD mod p”回路ブロックを詳述する。
図61は、“h bit AD mod p”回路ブロックの回路記号である。
“h bit AD mod p”回路ブロックは、A及びBから入力される数a及びbの和を求めて、得られた和の素数pによる剰余をQから出力する。
ここで、h=7、p=79の場合について考える。この場合、数a、b、素数p、剰余のバイナリ表示Qの間には、数54に示す関係が成立する。
[数54]

図62は、h=7、p=79とした場合の“h bit AD mod p”回路ブロックの回路図である。
“h bit AD mod p”回路ブロックは、PF0生成部U1、6個の半加算器HA1〜HA6、及び8個の全加算器FA1〜FA8を有する。
PF0生成部U1は、図7に示す“h+1 bit mod p”回路ブロックのPF0生成部U1と同じであるため説明を省略する。
半加算器HA1は、入力がA及びB、出力がS0、桁上げ出力がC0´となっている。全加算器FA1は、入力がA及びB、桁上げ入力がC0´、出力がS1、桁上げ出力がC1´となっている。全加算器FA2は、入力がA及びB、桁上げ入力がC1´、出力がS2、桁上げ出力がC2´となっている。全加算器FA3は、入力がA及びB、桁上げ入力がC2´、出力がS3、桁上げ出力がC3´となっている。全加算器FA4は、入力がA及びB、桁上げ入力がC3´、出力がS4、桁上げ出力がC4´となっている。全加算器FA5は、入力がA及びB、桁上げ入力がC4´、出力がS5、桁上げ出力がC5´となっている。全加算器FA6は、入力がA及びB、桁上げ入力がC5´、出力がS6、桁上げ出力がC6´となっている。半加算器HA2は、入力がS及びPF0、出力がQ、桁上げ出力がC0となっている。半加算器HA3は、入力がC0及びS1、出力がQ、桁上げ出力がC1となっている。半加算器HA4は、入力がC1及びS2、出力がQ、桁上げ出力がC2となっている。半加算器HA5は、入力がC2及びS3、出力がQ、桁上げ出力がC3となっている。全加算器FA7は、入力がS4及びPF0、桁上げ入力がC3、出力がQ、桁上げ出力がC4となっている。全加算器FA8は、入力がS5及びPF0、桁上げ入力がC4、出力がQ、桁上げ出力がC5となっている。半加算器HA6は、入力がC5及びS6、出力がQとなっている。
以上の構成によって、PF0生成部U1は、“h bit AD mod p”回路ブロックに入力されるバイナリA及びBの和がp=79以上か否かを判断し、A及びBの和がp=79以上の場合、79をA及びBの和から引くために、半加算器HA2〜HA6、及び全加算器FA7、FA8によって、8ビットバイナリの79の補数である49をA及びBの和に加えている。
次に、図56に示す“X k−times”回路について説明する。
図63は、“X k−times”回路ブロックの回路記号である。
“X k−times”回路ブロックは、入力Xの累乗(X)を算出し出力する回路であり、クロックcl(j=1〜p−1)で制御される。
“X k−times”回路は、“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)の積を得る。
クロックclが入るごとに出力(X)に入力Xを累積的に掛ける。クロックcl(j=1〜k)の立ち上がる前に“Rgstr”レジスタ<1>にデータXを設定しておき、初期設定が‘1’の“Rgstr”レジスタ<2>を同期させることで、j発目のclで(X)を得る。
次に、後述の演算処理で多用するZpの要素jのm乗を計算する回路ブロックを説明する。以下では、この回路ブロックを“(j)(j=1 to p−1)”回路ブロックと呼ぶ。
図65は、“(j)(j=1 to p−1)”回路ブロックの回路記号を示す図である。
“(j)(j=1 to p−1)”回路ブロックは、クロックck(i=0〜p−2)とcl(j=1〜p−1)で制御され、クロックclの立ち上がりに同期して(j)を出力する。
図66中(A)は、“(j)(j=1 to p−1)”回路ブロックのブロック図であり、図66中(B)は、“(j)(j=1 to p−1)”回路ブロックを制御するクロックck及びclのタイミングチャートである。
“(j)(j=1 to p−1)”回路ブロックは、Zpのゼロ以外の全ての要素1〜p−1に対して、0〜p−2乗を順次算出し、レジスタに保持する回路である。
“(j)(j=1 to p−1)”回路ブロックは、図66に示す通り、“X Zp”回路ブロック、“Counter(1 to p−1)”回路ブロック、“Ro(1〜p−1)”レジスタ部を有する。
指数を決めるクロックがckで、何回目のクロックckであるかで指数iが決まる。一方、Zpの要素を1から順次指定するのがクロックclで、クロックclの回数jが要素数となる。
“Counter(1 to p−1)”回路ブロックは、“X Zp”回路ブロックの一方の入力に接続されている。ckをスタート信号とし、clの立ち上がりのタイミングで1〜p−1の範囲でカウントアップする。
“Ro(1〜p−1)”レジスタ部は、p−1個のレジスタからなり、inのクロック/clの立ち上がりで入力i〜ip−1を順次1〜p−1番目のレジスタに格納し、outのクロックclの立ち上がりで順次1〜p−1番目のレジスタの内容i〜ip−1を出力する。
図66に示すように、“Counter(1 to p−1)”回路ブロックと“Ro(1〜p−1)”レジスタ部への入力クロックck及びclを同期させ、“Ro(1〜p−1)”レジスタ部の出力と“Counter(1 to p−1)回路ブロックの出力とを“X Zp”回路ブロックで乗算すると、クロックckが立ち上がった後、clが立ち上がる毎に“X Zp”回路ブロックから(j)が出力される。
次に、シンドロームSの成分要素を一括して求める演算回路を説明する。以下、この演算回路を「シンドローム成分要素生成回路」と呼ぶ。
mを0〜p−2の範囲でスキャンすると、シンドロームSの成分として必要なものは、S〜Sp−2+εのε個である。シンドロームSの成分生成に必要な演算処理の式を数55に示す。
[数55]

図67中(A)は、シンドローム成分要素生成回路の回路図であり、図67中(B)は、シンドローム成分要素生成回路を制御するクロックck(i=0〜p−2+ε)、cl(j=1〜p−1)のタイミングチャートである。
シンドローム成分要素生成回路は、図67中(A)に示すように、“Ro(1〜p−1)”レジスタ部、“(j)(j=1 to p−1)”回路ブロック、“X Zp”回路ブロック、“h bit AD mod p”回路ブロック、“Rgstr”レジスタ、及び“Ri(0〜p−2+ε)”レジスタを有する。
p−adicセルアレイから読み出されたデータYは“Ro(1〜p−1)”レジスタに初期設定として格納される。“(j)(j=1 to p−1)”回路ブロックからは(j)を発生させる。これら“Ro(1〜p−1)”レジスタ及び“(j)(j=1 to p−1)”回路ブロックは、クロックclによって同期され、Yの成分yが出力されると同時に(j)が出力されるように制御される。これらの積(j)を“X Zp”回路ブロックで生成し、クロックcl(j=1〜p−1)と同期して、“h bit AD mod p”回路ブロック及び“Rgstr”レジスタのループによって加算していき、シンドローム成分Sを作る。得られたSをクロックcki+1で“Ri(0〜p−2+ε)”レジスタの第i番目のレジスタに格納する。この過程をクロックckのi=0〜p−2+εについて処理し、全てのシンドローム成分を得て“Ri(0〜p−2+ε)”レジスタ部に格納する。
次に、解探索多項式Ψ(x)を求める演算回路を説明する。以下、この演算回路を「解探索多項式生成回路」と呼ぶ。
解探索多項式Ψ(x)のxの各次数jの係数ψを求める演算の処理に必要な処理式を数56に示す。
[数56]

図68は、解探索多項式生成回路のブロック図である。
解探索多項式生成回路は、シンドロームuS=(uS,uSm+1,・・・,uSm+ε)を用いてエラーを探索するステップで用いる回路である。
解探索多項式生成回路によれば、複雑なユークリッド法を用いることなく、単純な巡回回路で解探索多項式Ψ(x)を生成できる。
解探索多項式生成回路は、数56に示す第2式右辺のうちΣψj−1m+iを求める第1の部分回路U1と、同じく数56に示す第2式右辺のうち−u(j)−1を求める第2の部分回路U2とを有する。
第1の部分回路U1は、ε−1個の直列接続された“Rgstr”レジスタ<1>〜<ε>と、各“Rgstr”レジスタ間の接続点に接続されたε−1個の“X Zp”回路ブロック<1>〜<ε>を有する。
“Rgstr”レジスタ<1>の初期値は‘1’であり、その他の、“Rgstr”レジスタ<2>〜<ε>の初期値は‘0’である。
第1の部分回路U1は、各“Rgstr”レジスタに入力されるクロックckで制御され、j回目のクロックckの立ち上がりで、“Rgstr”レジスタの接続点から各次数の係数ψj−1、ψj−2、・・・、ψj−(ε−1)、ψj−εを出力する。係数が存在しない接続点は‘0’になるため、“X Zp”回路ブロック<1>〜<ε>によるシンドローム成分Sm+1〜Sm+εとの積演算に寄与しない。“X Zp”回路ブロック<1>〜<ε>の出力は2つずつ“h bit AD mod p”回路ブロックで和演算され、これら“h bit AD mod p”回路ブロックのラダーによって最終的にΣψj−im+iを得る。
第2の部分回路U2は、“Counter(1 to ε)”回路ブロック、“X Zp”回路ブロック<a>、<b>、及び“j−1 dec”回路ブロックを有する。
第2の部分回路U2は、クロックckに応じて“Counter(1 to ε)”回路ブロックで生成されたjとシンドローム成分Sから“X Zp”回路ブロック<a>及び“j−1 dec”回路ブロックによって(jS−1を生成する。そして、この生成された(jS−1と設定されたηから“X Zp”回路ブロック<b>によってu(j)−1を得る。
そして、“X Zp”回路ブロック<c>によって、第1の部分回路U1で生成されたΣψj−im+iと第2の部分回路U2で生成されたu(j)−1との乗算を行い、係数ψを得る。
係数ψは、hビットのバイナリであり、負数の表示にするために補数表現となっている。そこで、“X Zp”回路ブロック<c>の出力に対し、インバータIVで反転させた上で、“h bit AD mod p”回路ブロックで‘1’を加算する。これによって、hビットのバイナリの補数表現を得ることができる。
なお、図68に示す“j−1 dec”回路ブロックは、Zpの要素jの逆元j−1を求める回路である。“j−1 dec”回路ブロックの詳細については、後述する。
以上説明した解探索多項式生成回路によれば、クロックckをε回入れると各ノードにj=εとした係数ψ〜ψj−εが得られる。
なお、実用的なp−adicセルメモリに用いる場合、εとして5や6が選ばれるため、解探索多項式生成回路に必要な回路ブロック数は少なく、回路規模としては実用上十分に小さいと考えられる。
Ψ(x)の次数がηに一致した場合、このΨ(x)の根とその多重度を求める必要がある。そこで、次は、根の多重度を求める際に必要となるハッセ微分多項式の係数を計算する演算回路を説明する。以下では、この演算回路を「ハッセ微分多項式係数生成回路」と呼ぶ。
ハッセ微分多項式の係数とその係数とΨ(x)の係数との関係は、数57のようになる。
[数57]

つまり、数57からも分かるように、ハッセ微分多項式係数生成回路は、Ψ(x)の係数と2項係数の掛け算を行い、各微分の階数での各次数の係数をクロックck及びclを用いて生成し、全ての係数をレジスタに格納する。
図69中(A)は、ハッセ微分多項式係数生成回路のブロック図であり、図69中(B)は、ハッセ微分多項式係数生成回路を制御するクロックck及びclのタイミングチャートである。
ハッセ微分多項式係数生成回路は、Zpの各要素iの階乗i!が記録された“i!”テーブル、その逆元が記録された“(i!)−1”テーブル、及び解探索多項式Ψ(x)の係数ψが記録された“ψ”テーブルを有する。“i!”テーブル及び“(i!)−1”テーブルに関しては、例えば、p=17の場合、実用上十分小さい規模に抑えることができる。
また、“ψ”テーブルに関しては、図68で示す解探索多項式生成回路で生成されるため、これを使う。
ハッセ微分多項式係数生成回路は、図69に示すように、“i!”テーブル、“(i!)−1”テーブル、及び“ψ”テーブルと、“X Zp”回路ブロックと、これらの接続を切り替える制御スイッチSWを有する。非選択のノードは、“X Zp”回路ブロックによる積演算の結果が‘0’となるように、制御スイッチSWの出力側のノードを、初期状態で‘0’に放電されている。
クロックckのクロック数は、微分の階数に対応しており、ckのiは1〜εの値をとる。一方、クロックclは、次数に相当し、微分の階数が上がれば不要な次数が増える。そのため、クロックckに対して毎回同じ数の発生をする必要はないが、図69の回路では毎回同じ回数ε発生させる。したがって、格納タイミングはε個あるが、係数を格納する“R i(0〜ε)/j(0〜ε−1)”レジスタ部は、全てのクロックに対応したレジスタがある必要はなく、ほぼ半分のレジスタがあれば良い。
なおckはレジスタにΨ(x)の係数、すなわちΨ[0]に相当する係数を予め格納しておくために便宜上設けたものである。
次に、解探索多項式Ψ(x)の根とその多重度を計算する演算回路を説明する。以下、この演算回路を「解探索多項式根/多重度演算回路」と呼ぶ。
解探索多項式根/多重度演算回路は、ハッセ微分多項式の0階微分をΨ(x)とみなし、Zpの各要素に対してハッセ微分多項式がゼロでなければ次の要素に計算を移し、ハッセ微分多項式がゼロである間は微分の階数を上げる。各Zpの要素に対して、ハッセ微分多項式がゼロでない最初のハッセ微分の階数をレジスタに残していくと、階数がゼロではない要素が根であり、その残された階数がその根の多重度になる。つまり、レジスタから内容が‘0’ではないものを選び、その保持された値がその根の多重度となる。
具体的に、解探索多項式Ψ(x)の根をαとし、Ψ(x)のi階のハッセ微分多項式を[Ψ(x)][i]とすると、αの多重度をnとした場合の関係式は数58のようになる。
[数58]

解探索多項式根/多重度演算回路は、この数58を具備するnを、Zpの各要素αに対して、Ψ(x)の根であるか否かに関わらず求める。n=0の場合、αが根でないことを意味する。
図70中(A)は、解探索多項式根/多重度演算回路のブロック図であり、図70中(B)は、解探索多項式根/多重度演算回路を制御するクロックck、cl、及びclkのタイミングチャートである。
解探索多項式根/多重度演算回路は、クロックckでZpの要素1〜p−1についてスキャンし、クロックclでハッセ微分の階数、クロックclkでその階数のハッセ微分多項式の値を求める。クロックckは、計算しているハッセ微分多項式の値がゼロでなくなった場合に発生させ、次のZpの要素でのサイクルに入る。
解探索多項式根/多重度演算回路は、図70中(A)に示すように、“(j)(j=1 to p−1)”回路ブロック、“Ro i(0〜ε)/j(0〜ε)”レジスタ部、“X Zp”回路ブロック、“Rgstr”レジスタ<1>、“h bit AD mod p”回路ブロック、“Rgstr”レジスタ<2>、“clock cl gen.”回路ブロック、“Counter(0 to ε)”回路ブロック、“Li(1〜p−1)”レジスタ部を有する。
“(j)(j=1 to p−1)”回路ブロックは、クロックckをα回受けて要素αを選択し、クロックclkをj+1回受けてαのj乗を出力する。
“Ro i(0〜ε)/j(0〜ε)”レジスタ部は、クロックcl及びclkを受けてハッセ微分多項式の係数ψ[i] を出力するレジスタであり、図69に示す“R i(0〜ε)/j(0〜ε−1)”レジスタ部に相当するものである。
“X Zp”回路ブロックは、“(j)(j=1 to p−1)”回路ブロックからの出力αと、“Ro i(0〜ε)/j(0〜ε)”レジスタ部からの出力ψ[i] を積演算し、αψ[i] を出力する。
以上、“(j)(j=1 to p−1)”回路ブロック、“Ro i(0〜ε)/j(0〜ε)”レジスタ部、及び“X Zp”回路ブロックに対し、クロックclkをε+1回与えてやることでハッセ微分多項式の値を得ることができる。なお、クロックck、cl、及びclkの制御を簡単にするため、この計算では存在しない0の値の項の和も計算する。したがって、本来は必要なクロックclkの総数は半分程度となる。
微分多項式の値[Ψ(α)][i]は、ゼロの場合‘0’、その他の場合‘1’として“Rgstr”レジスタ<1>に取り込まれる。
“Rgstr”レジスタ<1>で保持された値は、クロックclkのタイミングで、クロックckα(α=1〜p−1)として出力される。このクロックckαは、クロックclkεでリセットされるまで保持される。
“Rgstr”レジスタ<1>は、初期値が‘1’であるため、クロックckは最初のclkで立ち上がる。クロックck以降は、計算結果にしたがってclkのいずれかのサイクルのclkで立ち上がる。
“clock cl gen.”回路ブロックは、クロックclkに同期してクロックclを発生させて、クロックckαが立ち上がる毎にクロックclにリセットする。
”Counter(0 to ε)”回路ブロックは、クロックckαで0にリセットされ、クロックclが入るたびにカウントアップし、クロックclの回数−1を出力する。この出力は、“Li(1〜p−1)”レジスタ部に格納される。
“Li(1〜p−1)”レジスタ部は、入力をクロックckαによって切り換えていくので、α番目のレジスタにはその多重度が格納されることになる。
ところで、pが小さい場合、計算で利用するZpの要素で、テーブルとして持っておけるものについては、予め用意しておけば良い。これによって、計算を省略することができ、回路規模が小さくすることができる。例えば、実用的なpはせいぜい19程度までであるので、要素の逆元や階乗などはテーブルにしておく。これらのテーブルは、バイナリのデコーダを構成することになる。
特に、Zpの要素の逆元は、変化する入力要素に対して直ぐに必要となる場合が多いので、デコーダ回路として構成しておくことが望ましい。
要素jから逆元j−1を求めるには、j×j−1≡1(mod p)の関係を求めておき、j及びj−1をhビットのバイナリ表示を数59に示すように構成し、これの変換デコーダを作れば良い。
[数59]

具体的な変換デコーダの構成については、後述する。
また、要素jの階乗j!は、ハッセ微分多項式の係数の計算で必要になるが、これも予め求めて順に利用すればよい。
なお、j!を計算する際、Zpの要素での値を求めている。そのため、pが素数であり、階乗を構成する各要素の数とは互いに素であることから、数60に示す漸化式を利用することで、大きな数を扱わなくても階乗を求めることができる。
[数60]

図71は、具体的な例として、実用には少し大きい素数として、p=23の場合の逆元と階乗の表である。これらの数字の5ビットでのバイナリ表示を用いると変換デコーダを作ることができる。
次に、変換デコーダである“j−1 dec”回路ブロックの具体的な回路構成について説明する。
図72中(A)は、h=7とした場合のjの逆元j−1を求めるデコーダ回路のブロック図であり、図72中(B)は、本デコーダ回路を制御するクロックτ及びτのタイミングチャートである。
本デコーダ回路は、7ビットのバイナリデータIを7ビットの他のバイナリデータOにデコーダする一般的な回路の構成となっている。
Iにj、Oにj−1を入れて考えれば、“j−1 dec”回路ブロックとして用いることができる。本デコーダ回路は、Zpの要素間の変換に使用され、クロックτ、τの2つのクロックで動作する。
デコード回路は、論理ゲートによって、ビットI〜Iを2ビットずつ部分デコードして信号/A〜/A、/B〜/B、C〜Cを生成し、更に、/A及び/BからNORゲートを用いてAを生成する。
また、デコード回路は、出力ビットO毎に16個のVssへの放電経路を持ったNOR接続を有し、NORノードをラッチしたレベルを反転してOとする。なおラッチ回路のリセットには、クロックτを1クロックだけ用いる。
16個の放電経路は、それぞれ信号A(i=0〜3、k=0〜3)でゲートされ、更に、入力ビットIと/Iで分岐する。この分岐の下に変換の対応にしたがってCmi(mi=0〜3)で制御されるNMOSトランジスタのOR接続が配置される。これらの分岐はクロックτでVssに接続される。
miで制御されるトランジスタは、変換においてビットOに対応する入力IのビットをAで分類した後、Iの‘1’、‘0’で分類してC〜Cの中から含まれるものを選択することによって配置される。
演算処理で求めたエラーEについては、そのリー・メトリックがε以下であることを確認して、誤訂正とならいないことが分かってから訂正される。
そこで、次は、Zpの要素のリー・メトリックを計算する演算回路素子について説明する。以下において、この演算回路素子を“h bit LMp”回路ブロックと呼ぶ。
hビットのバイナリ表示のZpの要素aについて、そのリー・メトリックQ=|a|は、Q=/PF0×a+PF0×(p−a)と表現できる。ここでPF0は、a≧(p+1)/2の場合に‘1’、a<(p+1)/2の場合に‘0’になる。したがって、aのリー・メトリックを求めるには、a≧(p+1)/2の場合、pからaを引く、即ち、pにaの補数を加えれば良い。
ここで、具体例として、h=7、p=79の場合について説明する。
h=7、p=79の場合のAとQの関係は数61のようになる。
[数61]

図73は、“h bit LMp”回路ブロックの回路記号であり、図74は、h=7、p=79とした場合の“h bit LMp”回路ブロックのブロック図である。
“h bit LMp”回路ブロックは、hビットのバイナリA〜Ah−1を入力し、hビットのバイナリQ〜Qh−1を出力する。
“h bit LMp”回路ブロックは、PF0生成部U1、XORゲートG1、2個の半加算器HA1、HA2、及び5個の全加算器FA1〜FA5を有する。
PF0生成部U1は、Vcc端子及びVss端子間に、直列に接続されたPMOSトランジスタQP1、QP2、NMOSトランジスタQN1、及びQN2を有する。これらトランジスタQP1、QP2、QN1、及びQN2は、それぞれ、入力A、A、A、及びAで制御される。
また、PF0出力部U1は、その他に、2個のPMOSトランジスタQP3、
QP4、2個のNMOSトランジスタQN3、QN4、及びインバータIV1を有する。
トランジスタQP3、QP4は直列接続されており、その両端は、トランジスタQP1のソース及びドレインに接続されている。トランジスタQN3は、トランジスタQN1のソース及びドレイン間に接続されている。また、トランジスタQN4は、トランジスタQN1のソース及びトランジスタQN2のドレイン(Vss端子)間に接続されている。トランジスタQP3、QP4、QN3、及びQN4は、それぞれ、入力A、A、A、及びAで制御される。インバータIV1は、入力がトランジスタQP2及びQN1の接続点に接続されている。このインバータIV1の出力がキャリーPF0になる。
XORゲートG1は、A(j=0〜7)及びPF0を入力し、Bを出力する。
全加算器FA1は、入力がB及びPF0、桁上げ入力がPF0、出力がQ、桁上げ出力がC0となっている。全加算器FA2は、入力がB及びPF0、桁上げ入力がC0、出力がQ、桁上げ出力がC1となっている。全加算器FA3は、入力がB及びPF0、桁上げ入力がC1、出力がQ、桁上げ出力がC2となっている。全加算器FA4は、入力がB及びPF0、桁上げ入力がC2、出力がQ、桁上げ出力がC3となっている。半加算器HA1は、入力がC3及びB、出力がQ、桁上げ出力がC4となっている。半加算器HA2は、入力がC4及びB、出力がQ、桁上げ出力がC5となっている。
この具体例では入力が40以上になったらaの補数をpに加えている。aの補数は、PF0=1の場合、XORゲートでaの各ビット表示Aを反転してBとし、これに1を加えて生成されている。
p=79は、79=(1001111)であるので、これをPF0で表し、更に、1としてPF0を使い、79をPF0を1として表したものとAの反転又はそのものとなるBと加えている。
“h bit LMp”回路は、クロックに非同期で動作し、入力を入れると計算されたリー・メトリックを出力する。
次に、エラーコード語Eのリー・メトリックw(E)=Σ|e|(j=1〜p−1)を計算する演算回路について説明する。以下、この演算回路を「リー・メトリック演算回路」と呼ぶ。
図75は、リー・メトリック演算回路のブロック図である。
リー・メトリック演算回路は、“Ro(0〜p−1)”レジスタ部、“h bit LMp”回路ブロック、“h bit AD mod p”回路ブロック、及び“Rgstr”レジスタを有する。
多項式Ψ(x)から得られたエラーコード語Eは、“Ro(0〜p−1)”レジスタ部に初期値として格納されている。“Ro(0〜p−1)”レジスタ部からは、Eの成分eをクロックckによって順次取り出される。
“h bit LMp”回路ブロックは、この取り出された成分eからそのリー・メトリック|e|を計算する。“h bit LMp”回路ブロックは、クロックck毎に計算された成分のリー・メトリック|e|を“h bit AD mod p”回路ブロックに出力する。
“Rgstr”レジスタと“h bit AD mod p”回路ブロックによって構成されるループで、この|e|を加算していく。そして、p−1回目のクロックckが立ち上がった時点の“h bit AD mod p”回路ブロックの出力がw(E)=Σ|e|となる。
なお、EはΨ(x)の根αと多重度の組みとして、前述の演算で得られたα、[n]から、変換t=α−1、e=(ut−1nによって成分eが得られる。w(E)≦εなら、一連のエラー探索が終わり、Eによって、訂正を行うことができる。
エラー探索を終了し、エラーコードEによって訂正されたリー・メトリック・コードCが得られたら、これをZpのデータコードAに戻す必要がある。この演算はGを生成行列として、C=AGの逆演算を行うことに相当するが、行列の逆を得るのは規模の大きな演算となる。そのため、Aの要素を逐次的にCの要素から求めて行く。計算の過程を数62に示す。但し、数62において、j=1〜p−1、n=p−1、p−ε−3=n−γ−1=k−1であることに注意されたい。
[数62]



数62に示したように、c=Σ(j)i+1の関係を順次変形して、aからa、続いてaからa、・・・と逐次的にaを求めて行くことが計算の原理となる。
両辺にjの累乗の逆元を掛けてjのZpの全ての元についての項として足し合わせる。このときZpの全ての元の和はゼロとなることを利用して変形している。
数63は、Cの成分とAの成分の関係式である。
[数63]

次に、この数63の関係式を具体的に実現する演算回路について説明する。
なお、aを得てから、am+1を求める際、c(m) を求めながらam+1でのjについての和を順次計算して行く。この際、jについての必要な累乗は、c(m) ではm+1乗、am+1ではm+2乗となる。そのため、本演算回路では、Zpの要素の累乗を計算する回路ブロックを若干修正したものを用いる。
図76中(A)は、C=AGからA=CG−1を求める演算回路(以下、この演算回路を「逆変換回路」と呼ぶ)のブロック図であり、図76中(B)は、逆変換回路を制御するクロックck及びclのタイミングチャートである。
逆変換回路は、データコードAの要素を1つずつ演算で求める第1の部分回路U1と、この演算に必要なリー・メトリック・コードCの成分の変換を都度行う第2の部分回路U2とからなる。
部分回路U1及びU2には、Zpの要素jのm+1乗とm乗を発生する“(j)(j=1 to p−1)2”回路ブロックが配置されている。この“(j)(j=1〜p−1)2”回路ブロックは、部分回路U1に対しては、クロックclのサイクル数をjとした場合、クロックckのサイクル数iを指数とした要素jの累乗を出力する。一方、部分回路U2に対しては、クロックclのサイクル数をjとした場合、クロックckのサイクル数よりも1だけ小さいiを指数とした要素jの累乗を出力する。
この“(j)(j=1〜p−1)2”回路ブロックは、“(j)(j=1 to p−1)”回路ブロックに対し、更に、内部ノードの信号を取り出した回路として改めてシンボル化したものである。詳細については、後述する。
“(j)(j=1 to p−1)2”回路ブロックは、クロックclの1サイクル目で、部分回路U1に対しては、Zpの要素そのものを出力し、部分回路U2に対しては、1が出力される。この部分回路U2に出力される1は、本来の演算で現れる値ではないため、演算結果に影響を及ぼさないようにする工夫が必要となる。そこで、この1の影響を無くすために、部分回路U2の積演算では、クロックckの最初のサイクルの際、もう一方の入力を‘0’とし、積演算の結果がゼロになるようにしている。
始めに、第1の部分回路U1について説明する。
第1の部分回路U1は、“(j)(j=1 to p−1)2”回路ブロックの他、“(j)−1 dec”回路ブロック、2つの“X Zp”回路<1>、<2>、“h bit AD mod p”回路ブロック<1>、“Rgstr”レジスタ<1>、及び“Li(0〜k−1)”レジスタ部を有する。
“(j)(j=1 to p−1)2”回路ブロックの出力(j)m+1は、“(j)−1 dec”回路ブロックに入力される。
“(j)−1 dec”回路ブロックでは、(j)m+1を、その逆元(j)−(m+1)に変換し、“X Zp”回路ブロック<1>に出力する。
“X Zp”回路ブロック<1>は、“(j)−1 dec”回路ブロックから入力された(j)−(m+1)と、クロックck間のp−1個のクロックclと同期して第2の部分回路U2から出力されるc(=c(m−1) )との積演算をし、“h bit AD mod p”回路ブロック<1>に出力する。
“h bit AD mod p”回路ブロック<1>から出力された積は、初期値が‘0’の“Rgstr”レジスタ<1>と“h bit AD mod p”回路ブロック<1>からなるループによって加算されて行く。この結果は、“h bit AD mod p”回路ブロック<1>から“X Zp”回路ブロック<2>に出力される。
“X Zp”回路ブロック<2>では、“h bit AD mod p”回路ブロック<1>から出力された和と(p−1)−1との積を演算し、数62に示した計算式に従ったaを得る。このaは、次のサイクルの始まりであるクロックckm+1によって“Li(0〜k−1)”レジスタ部の第m番目のレジスタに格納される。
続いて、第2の部分回路U2について説明する。
第2の部分回路U2は、“(j)(j=1 to p−1)2”回路ブロックの他、“Rgstr”レジスタ<2>、“X Zp”回路ブロック<3>、2つの“h bit AD mod p”回路ブロック<2>、<3>、及び“R(1〜p−1)”レジスタ部を有する。
“Rgstr”レジスタ<2>は、設定されたaをck以降のサイクルで出力する。即ち、出力am−1は、クロックckで出力される。クロックckの最初のサイクルckでは“Rgstr”レジスタ<2>の出力ノードの初期値は‘0’に設定されている。これは、前述の通り、クロックclの際の積演算の結果をゼロにするためである。
“X Zp”回路ブロック<3>では、クロックckのサイクルckで発生する“(j)(j=1 to p−1)2”回路ブロックの出力(j)と、“Rgstr”レジスタ<2>の出力am−1との積を生成しインバータIV1を介して“h bit AD mod p”回路ブロック<2>に出力する。
“h bit AD mod p”回路ブロック<2>では、インバータIV1を介して出力された“Rgstr”レジスタ<2>の出力am−1の補数を求め、−jm−1を生成し、“h bit AD mod p”回路ブロック<3>に出力する。
“h bit AD mod p”回路ブロック<3>では、“h bit AD mod p”回路ブロック<2>から出力された−jm−1と、クロックclに同期して“R(1〜p−1)”レジスタ部から出力されるc(=c(m−2) )との和を生成し、c(m−1) として出力する。この“h bit AD mod p”回路ブロック<3>から出力されたc(m−1) は、クロックclの立ち下がりに同期して“R(1〜p−1)”レジスタ部の第j番目のレジスタに記録される。なお、“Rgstr”レジスタ<2>の設定から“R(1〜p−1)”レジスタ部の初期値は、c(m−2) =c(m−1) =Cとなる。
次に、図76に示す“(j)(j=1 to p−1)2”回路ブロックについて説明する。
“(j)(j=1 to p−1)2”回路ブロックは、Zpのゼロ以外の全ての要素1〜p−1に対して、0〜p−2乗を順次求めてレジスタに保持する回路である“(j)(j=1 to p−1)”回路ブロックを変形させた回路である。
図77は、“(j)(j=1 to p−1)2”回路ブロックの回路記号を示す図である。また、図78中(A)は、“(j)(j=1 to p−1)2”回路ブロックのブロック図であり、図78中(B)は、“(j)(j=1 to p−1)2”回路ブロックを制御するクロックck及びclのタイミングチャートを示す。
“(j)(j=1 to p−1)2”回路ブロックは、図77に示すように、入力されるクロックck(i=0〜p−2)及びcl(j=1〜p−1)に同期して(j)i+1及び(j)を出力する。
“(j)(j=1 to p−1)2”回路は、“Counter(1〜p−1)”回路ブロック、“X Zp”回路ブロック、及び“R(1〜p−1)”レジスタ部を有する。
“R(1〜p−1)”レジスタ部は、p−1個のレジスタからなり、inのクロック/clの立ち上がりで入力を順次1〜p−1番目のレジスタに格納し、outのクロック/clの立ち上がりで順次1〜p−1番目のレジスタの内容を出力する。
“X Zp”回路ブロックでは、入力クロックclに同期してカウントアップされる“Counter(1〜p−1)”回路ブロックの出力と“R(1〜p−1)”レジスタ部の出力との乗算を行う。
以上の構成によって、“R(1〜p−1)”レジスタ部からは、ckの立ち上がった後のclの各サイクルでclが立ち上がる毎に(j)が出力される。これと同時に、“X Zp”回路ブロックからは、(j)とは指数が1つだけ異なった(j)i+1が出力される。
[シンドローム変換法]
次に、リー・メトリック・コードを表すコードの空間で見たとき、シンドローム変換法によるエラーの訂正が行っていることを検討し、この方法の有効に活用できる条件を検討する。
実際には不明な真のエラーコード語の点をE=(e,e,・・・,e,・・・,e)とすると、シンドローム変換法では、これを仮想的なエラーコード語の点E=(u(1),u(2),・・・,u(j),・・・,u(n))に変換している。このとき成分座標自体は不変であることに注意する。この場合、シンドロームは数64のようになる。
[数64]

これらの変換はm≠m´、η≠η´の場合、E≠´Eとなる。即ち、ηが異なれば同一の点になることが無い。これは、E=´Eの場合、全てのiに対してu(i)=u´(i)m´、つまり数65が成立しなければいけないが、数65は、E=0以外では成立しないためである。
[数65]

そこで、(j)p−1=1であるからm=0〜p-2についてスキャンし、ηとしてシンドローム変換法が解探索多項式の構成を簡単にするのに有効なηとしてγ−1とγ−2の2つを使う。こうすると、真のエラーコード語点も含めて、2(p−1)個の点が得られる。これらの点が真のエラーと同じ様なリー・メトリックの制約を受けると考えられるエラーコード語点を全て含んでいれば、解探索多項式を求めて解を得ることによって、漏れの無いエラーの探索と、訂正が可能な場合の訂正ができる。
エラーコード語点を全て含まない場合は、真のエラーから変換された点以外にエラーに対応する点がありえるため、解探索が出来ないからといってエラーが特定できないとは言い切れず、エラー訂正に漏れが生じる場合もある。
そこで次は、エラー量の条件と、訂正が可能な条件を具体的に説明する。
シンドローム変換法では、シンドロームを巡回的に使用するp−1個の変換とηの値を用い、最大2(p−1)個の変換を用いている。そこで次は、この変換によって、発生し得るエラーを全てカバーできるかを検討する。
前述の通り、エラーコード語の点をE=(e,e,・・・,e,・・・,e)とすると、シンドローム変換法では、これを仮想的なエラーコード語の点E=(u(1),u(2),・・・,u(j),・・・,u(n))となる。
ξ個のエラー成分位置があり、これらをj(i=1〜ξ)で表すと、シンドローム変換では数66のように和をηとできる。
[数66]

数66において、εを変数と考えて、変数εとしては1〜p−1となること、ξ個の和がηと固定されていることから、各変数の値の選択は、(p−1)ξ−1となる。但し、このままでは最後の選択に0を含むため、この場合を排除する。
ξ個の自由変数εの和がηと合同になる場合の数をn(ξ)とすると、最後の選択の前に和がηとなる場合を除いておかなければならないため、n(ξ)=(p−1)ξ−1−n(ξ−1)となる。これから数67のようなn(ξ)を得る。
[数67]

この場合の中には成分が全て0〜p/2の範囲にあるもの、即ち、Jのみに成分が属するものがあるため、変換の数が場合の数以上であれば、異なる変換は異なる場合をカバーできるので、Jの仮想エラーを作ることができて、シンドローム変換法で解ける。
シンドローム変換法から見た場合、この条件は、ξ=2の場合であり、これは前述の考察の通り2根の場合である。しかし、3根以上(ξ≧3)の場合では解を求められないエラーの場合を排除することはできない。
つまり、これは、シンドローム変換法は処理が簡単であるものの、エラー訂正の取りこぼしがあることを示している。色々なパターンのエラーが生じてしまう可能性がある場合には、シンドローム変換法の変換の範囲を、シンドローム成分を循環的に変換する以外の変換方法を用いて変換数を増やすか、処理は複雑になりオンチップには不向きではあるがユークリッドの反復法を用いて解探索多項式を構成するのが良いことが分かる。
次に、リー・メトリック・コードでエラー訂正が可能な条件としてのw(E)≦εと、シンドローム変換法の漏れの無い探索条件との関係で、演算処理結果で得られるエラー量と誤訂正の関係をまとめる。
(1) εの分配数≦探索数の場合
・ 真のエラー語のリー・メトリックがε=γ−1以下の場合: シンドローム変換法で得られた解Eで、そのリー・メトリックW(E)≦εなるものが見つかったら、それが真のエラーであることは確実なので、そこで解探索は終了する。
これはε以下のエラー語間の自己写像で解法が閉じるので、真のエラーと解法が適用できるエラーが対応するためである。
・ 真のエラー語のリー・メトリックがγ以上の場合: シンドローム変換法で得られた解Eで、そのリー・メトリックW(E)≦εなるものが見つかったら、これは隣のコードへの誤エラーであるが、このようなエラーと真のエラーの判断はリー・メトリック・コード上では出来ない。
なお、これはどの様なECCであっても排除できない誤訂正の場合である。
・ シンドローム変換法で得られた解Eに、そのリー・メトリックw(E)≦εなるものがない場合: コード語間の隙間にエラーコード点が落ち込んだ場合であり、シンドローム変換法では真のエラーを見つけることが出来る可能性がある。
エラーは真のコードに最短であり、そのコードにユニークに帰属すると考えられるので、シンドローム変換法で得られたエラーEの中から最小のリー・メトリックw(E)>εを持つものをEminとして、Eminがただ1つの成分構成によって満たされる場合、Eminを真のエラーとして採用する。これは真のエラーから変換で得られる全ての仮想的なエラーで真のエラーの発生パターンの全ての場合を網羅しているので、エラーが確定するためである。但し、Eminが複数ある場合は確定しないので解が得られない。
(2) ε分配数>探索数の場合
真のエラーに対する誤訂正の他に、シンドローム変換法としての取りこぼしが生じてしまう。
探索の手順としては、εの分配数≦探索数の場合、「解Eが見つかる毎にw(E)を計算する。w(E)≦εの場合、真のエラーが見つかったため処理を終了し、w(E)>εの場合、スキャンを続けて、更に、小さいw(E)を見つける。全ての処理の最後で最小のw(E)がw(E)>εの場合、解法が適用できない場合である」となる。
[p−adicメモリシステムの検証方法]
最後に、「p-adic world」での演算処理の回路の動作を検証する簡便な方法について説明する。
「binary world」と「p-adic Zp world」の入口での変換やp-adicメモリシステムへのリー・メトリック・コード変換の回路は複雑であり、その働きを検証し特定するのは困難である。
そこで、入力データとセルアレイが保持するデータの状態を見て回路動作の判断が出来れば有効となる。特殊なデータパターンに対してp−adicセルの取る状態が特殊になることを利用してこの検証を行うことが出来るので、これを説明する。この検証方法は、一括処理されるデータとして‘0’と‘1’を用い、このときのセルアレイのメモリセルの状態をモニターして判断する方法となる。
入力データは、数68のように表わすことができる。
[数68]

ここで、ECC一括処理対象の入力データをバイナリで1とする。この場合、入力データのバイナリ表現と、p進数表現は数69のようになる。
[数69]

入力データのバイナリを1とした場合、Zpとセルレベルの対応が各メモリセルで同一であるとすると、これを記憶するするメモリセル群の多値レベルは全て異なるものに設定される。
バイナリデータ数として0を入れた場合と1を入れた場合で同じレベル設定のメモリセルが存在しない。これは数70の関係から、必要にして十分な判断条件であり、リー・メトリック・コードでは0は(0,0,…,0,0,0)のコード語、1は(1,2,…,p−3,p−2,p−1)のコード語になるからである。
[数70]

なお、バイナリデータの‘1’がどのビット位置を‘1’とした時であるかは回路の設定によるものなので、この変換を固有な対応にするとデータを容易に解読できないようにも出来る。
これらの回路動作の判定条件からも分かるように、セルレベルとZpの数の対応はメモリセル毎に変えることが出来、入力バイナリと記憶データのp進数に線形の関係がないので変換回路においてはバイナリとp進数の対応を勝手に設定できる。したがって、この回路をロックすれば記憶データから直接入力バイナリを逆読みすることは困難であり、データのセキュリティへの応用も容易となることも分かる。
以上をまとめると、本実施本実施形態に係るp−adicメモリシステムのコード変換によれば、メモリシステムに入力されるコードと、メモリセルに記録されたレベルの対応は、結果的に以下のようになる。
(1) 所定数のp−adicセルを処理単位にした場合、入力されたバイナリデータが0の場合、処理単位に属する全てのp−adicセルに対しZpの0に対応するセルレベルが書き込まれる。
(2) p−1個のp−adicセルを処理単位にした場合、入力されたバイナリデータの1ビットのみが‘1’の場合、処理単位に属するp−adicセルには、Zpの1〜p−1に対応する全てのセルレベルが書き込まれる。
(3) 上記(2)の場合であって、処理単位に属する全てのメモリセルのZpの要素とセルレベルとの対応関係が同一であった場合、処理単位に属するメモリセルに書き込まれたセルレベルは全て異なる。
(4) 上記(1)及び(2)から、p−1個のp−adicセルを処理単位にした場合、処理単位に属する各メモリセルにおいて、入力されたバイナリデータが0だった場合に書き込まれるセルレベルと、入力されたバイナリデータの1ビットのみが‘1’だった場合に書き込まれるセルレベルは異なっている。
以上、従来、メモリセルの多値化には安定した精度の高い動作を必要としたが、本実施形態に係るメモリシステムによれば、高効率のエラー訂正によって、従来に比べて、動作マージンを大きくとることができるため、メモリセルの更なる多値化を図ることができる。
[その他]
以上、発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加等が可能である。
本発明の実施形態は、3以上のレベル数を有するセルを用いたメモリシステムであれば適用することができる。例えば、フラッシュメモリ、DRAM、PRAM、ReRAMなどを用いたメモリシステムに適用することが可能である。
101・・・p進数変換部、201・・・エンコード部、202・・・p−adicセルメモリ部、203・・・シンドローム生成部、204・・・解探索多項式生成部、205・・・ハッセ微分多項式生成部、206・・・コード復元部、207・・・デコード部、301・・・バイナリ変換部。

Claims (10)

  1. p(pは3以上の素数)以上の物理量レベルを持つセルユニットからなるセルアレイと、
    バイナリ表現の入力データを、pの剰余体であるZpの要素で表現された書き込みコードに変換するコード生成部と、
    Zpの各要素をそれぞれ異なる前記物理量レベルに対応させて前記セルユニットに前記書き込みコードを書き込むコード書き込み部と
    を備え、
    前記入力データをp−1個の前記セルユニットに記録する場合において、これらp−1個の前記セルユニットのうち、前記入力データが0の場合と、1ビットのみが1の場合で、同一の物理量レベルに書き込まれるセルユニットはない
    ことを特徴とするメモリシステム。
  2. 前記書き込みコードは、リー・メトリック・コードである
    ことを特徴とする請求項1記載のメモリシステム。
  3. 前記コード生成部は、pを法とする足し算回路の組み合わせからなる
    ことを特徴とする請求項1又は2記載のメモリシステム。
  4. 前記セルユニットに記録された物理量レベルを、この物理量レベルに対応するZpの要素によって表現された読み出しコードとして読み出すコード読み出し部と、
    前記読み出しコードをバイナリ表現の出力データに変換するデコード部と
    を備える
    ことを特徴とする請求項1〜3のいずれか1記載のメモリシステム。
  5. 前記読み出しコードのエラー検出・訂正を行うエラー検出・訂正部を備え、
    前記エラー検出・訂正部は、前記読み出しコードからシンドロームを生成し、このシンドロームの成分の組み合わせを順次変更しながらエラー探索する
    ことを特徴とする請求項4記載のメモリシステム。
  6. 前記エラー検出・訂正部は、pを法とする足し算回路からなる
    ことを特徴とする請求項5記載のメモリシステム。
  7. 前記エラー検出・訂正部は、予め算出されたZpの要素の逆元及び階上の少なくとも一方のテーブルを有する
    ことを特徴とする請求項5又は6記載のメモリシステム。
  8. 前記デコード部は、前記エラー検出・訂正部によって、前記読み出しコードのエラーが検出できなかった場合、エラーを含む前記読み出しコードをそのまま前記出力データに変換する
    ことを特徴とする請求項5〜7のいずれか1項記載のメモリシステム。
  9. 前記所定のセルユニットにおけるZpの要素と前記物理量レベルとの対応関係は、他の前記セルユニットにおけるZpの要素と前記物理量レベルとの対応関係と異なる
    ことを特徴とする請求項1〜8のいずれか1項記載のメモリシステム。
  10. 前記セルユニットは、複数のメモリセルからなる
    ことを特徴とする請求項1〜9のいずれか1項記載のメモリシステム。
JP2010213215A 2010-09-24 2010-09-24 メモリシステム Expired - Fee Related JP5143203B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2010213215A JP5143203B2 (ja) 2010-09-24 2010-09-24 メモリシステム
TW100130950A TWI459398B (zh) 2010-09-24 2011-08-29 Memory system
US13/232,312 US8661319B2 (en) 2010-09-24 2011-09-14 Memory system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010213215A JP5143203B2 (ja) 2010-09-24 2010-09-24 メモリシステム

Publications (2)

Publication Number Publication Date
JP2012068900A JP2012068900A (ja) 2012-04-05
JP5143203B2 true JP5143203B2 (ja) 2013-02-13

Family

ID=45871930

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010213215A Expired - Fee Related JP5143203B2 (ja) 2010-09-24 2010-09-24 メモリシステム

Country Status (3)

Country Link
US (1) US8661319B2 (ja)
JP (1) JP5143203B2 (ja)
TW (1) TWI459398B (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9311969B2 (en) 2011-07-22 2016-04-12 Sandisk Technologies Inc. Systems and methods of storing data
CN104040634A (zh) * 2012-01-12 2014-09-10 索尼公司 存储控制装置、存储装置、信息处理系统及其处理方法
US9368197B2 (en) 2014-01-29 2016-06-14 Kabushiki Kaisha Toshiba Memory system
DE102020100541A1 (de) * 2020-01-13 2021-07-15 Infineon Technologies Ag Bestimmung eines resultierenden datenworts beim zugriff auf einen speicher
CN111313889B (zh) * 2020-02-21 2023-05-12 宁波大学 一种正反馈异或/同或门及混合逻辑加法器

Family Cites Families (9)

* 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 デジタル情報の符号化、復号化方式
US5500811A (en) * 1995-01-23 1996-03-19 Microunity Systems Engineering, Inc. Finite impulse response filter
TW384447B (en) * 1996-01-22 2000-03-11 Infinite Technology Inc Processor with reconfigurable arithmetic data path
US5790545A (en) * 1996-03-14 1998-08-04 Motorola Inc. Efficient output-request packet switch and method
JPH10207689A (ja) * 1997-01-28 1998-08-07 Toshiba Corp 逆元計算装置及び逆元計算方法
US7984360B2 (en) * 2006-12-31 2011-07-19 Ramot At Tel Aviv University Ltd. Avoiding errors in a flash memory by using substitution transformations
US20100107039A1 (en) * 2007-02-01 2010-04-29 Kabushiki Kaisha Toshiba Semiconductor memory with reed-solomon decoder
US7848142B2 (en) * 2007-10-31 2010-12-07 Micron Technology, Inc. Fractional bits in memory cells
JP2009181439A (ja) * 2008-01-31 2009-08-13 Toshiba Corp メモリシステム

Also Published As

Publication number Publication date
JP2012068900A (ja) 2012-04-05
US20120079331A1 (en) 2012-03-29
TWI459398B (zh) 2014-11-01
TW201230056A (en) 2012-07-16
US8661319B2 (en) 2014-02-25

Similar Documents

Publication Publication Date Title
JP4621715B2 (ja) メモリ装置
JP4836608B2 (ja) 半導体記憶装置
KR101266594B1 (ko) 솔리드 스테이트 스토리지 소자 및 방법
Chen et al. An adaptive-rate error correction scheme for NAND flash memory
JP5259343B2 (ja) メモリ装置
US9235488B2 (en) System and method for random noise generation
JP4791831B2 (ja) 半導体記憶装置
JP2007305267A (ja) 半導体記憶装置
JP5143203B2 (ja) メモリシステム
JP4846384B2 (ja) 半導体記憶装置
JP2010518464A (ja) 半導体記憶装置
TWI479317B (zh) Memory system
KR102064508B1 (ko) 오류 검출 정정 회로 및 이를 포함하는 메모리 장치
Li et al. Low delay single error correction and double adjacent error correction (SEC-DAEC) codes
Fabiano et al. Design and optimization of adaptable BCH codecs for NAND flash memories
US9336085B2 (en) Memory system and memory controller
JP4891704B2 (ja) 半導体記憶装置
JP2013122797A (ja) 半導体記憶装置
KR102021560B1 (ko) 오류 위치 탐색 회로, 그리고 그것을 포함하는 오류 검출 정정 회로 및 메모리 장치
Maity et al. An Improved Single and Double-Adjacent Error Correcting Codec with Lower Decoding Overheads
JPS594741B2 (ja) ブロツク誤り検出訂正方式
JP2014068058A (ja) 誤り位置検索回路、誤り検出訂正回路、及びメモリ装置
Lee et al. A New Approach to Multi-objective Error Correcting Code Design Method
JP2014057203A (ja) ガロア体演算回路、及びメモリ装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120814

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

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

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

Free format text: PAYMENT UNTIL: 20151130

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees