(57)【特許請求の範囲】
【請求項１】
ワード線、並びに、前記ワード線で選択され、異なる複数の物理量レベルによってデータを記憶する複数のメモリセルを有するセルアレイと、
外部から入力された第１のデータを保持するレジスタと、
前記レジスタに保持された第１のデータを第２のデータに変換してこの第２のデータを前記レジスタの第１のデータを保持する領域に上書きし、更に、前記レジスタに保持された第２のデータを前記メモリセルに記録する第３のデータに変換してこの第３のデータを前記レジスタの第２のデータを保持する領域に上書きするデータ変換部と、
前記レジスタに保持された第３のデータに基づいて前記メモリセルの物理量レベルを遷移させるデータ書き込み部と
を備え、
前記第１のデータは、バイナリデータであり、
前記第２のデータは、ｐ進数データ（ｐは素数）であり、
前記第３のデータは、リー・メトリック・コードである
ことを特徴とするメモリシステム。
【請求項２】
前記メモリセルの物理量レベルに基づいて前記メモリセルの記憶するデータである第４のデータを前記メモリセルから読み出すデータ読み出し部を備え、
前記レジスタは、前記メモリセルから読み出された第４のデータに基づいて復元された前記第３のデータを保持し、
前記データ変換部は、前記レジスタに保持された第３のデータを前記第２のデータに変換してこの第２のデータを前記レジスタの第３のデータを保持する領域に上書きし、更に、前記レジスタに保持された第２のデータを外部に出力する前記第１のデータに変換してこの第１のデータを前記レジスタの第２の保持する領域に上書きする
ことを特徴とする請求項１記載のメモリシステム。
【請求項３】
前記第１のデータは、所定ビットからなる転送単位毎に前記レジスタに保持され、
前記データ変換部は、所定ビットからなる処理単位毎に前記第１〜第３のデータの変換処理を実行し、
所定の前記転送単位の一部は、所定の処理単位で変換処理され、前記所定の転送単位の他の一部は、前記所定の処理単位とは異なる他の処理単位で変換処理される
ことを特徴とする請求項１又は２記載のメモリシステム。
【請求項４】
前記データ書き込み部は、
前記複数の物理量レベルそれぞれに遷移させる複数の書き込み電圧を前記ワード線を介して前記メモリセルに供給するものであり、
前記ワード線で選択される複数のメモリセルに対してデータを書き込む際、最低の前記書き込み電圧から最高の前記書き込み電圧まで段階的に変化させながら全ての前記書き込み電圧を連続的に前記ワード線に供給する
ことを特徴とする請求項１〜３のいずれか１項記載のメモリシステム。
【請求項５】
前記データ読み出し部は、
前記メモリセルの複数の物理量レベルをそれぞれ検知する複数の読み出し電圧を前記ワード線を介して前記メモリセルに供給するものであり、
前記ワード線で選択される複数のメモリセルからデータを読み出す際、最低の前記読み出し電圧から最高の前記読み出し電圧まで、又は、最高の前記読み出し電圧から最低の前記読み出し電圧まで段階的に変化させながら全ての前記読み出し電圧を連続的に前記ワード線に供給する
ことを特徴とする請求項１〜４のいずれか１項記載のメモリシステム。
【請求項６】
前記第４のデータは、エラーを含むデータであり、
前記第４のデータのエラーを訂正し、前記第３のデータを復元するエラー訂正部を備える
ことを特徴とする請求項２〜５のいずれか１項記載のメモリシステム。
【請求項７】
前記エラー訂正部は、
前記第４のデータからシンドロームを生成するシンドローム生成部と、
前記シンドロームから解探索多項式を生成する解探索多項式生成部と、
根及び多重度からエラー量を算出するエラー量算出部と、
前記エラー量に基づいて前記第４のデータから前記第３のデータを復元するコード復元部と
を有する
ことを特徴とする請求項６記載のメモリシステム。
【請求項８】
前記エラー訂正部は、
前記第４のデータからシンドロームを生成するシンドローム生成部と、
前記シンドロームから解探索多項式を生成する解探索多項式生成部と、
前記解探索多項式からユークリッド反復法によって根及び多重度からエラー量を算出し、前記エラー量に基づいて前記第４のデータから前記第３のデータを復元するコード復元部と
を有する
ことを特徴とする請求項６記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
近年、携帯されるスマート端末や電子書籍など、携帯機器に大量のデータを保持して高速にアクセスする技術がますます重要になりつつある。さらに、情報機器の軽量化と省エネルギーの観点から、モーターなどの可動部分を持たないメモリのシリコン化が急速に進んでいる。このとき重要となるのが、メモリ製造時の性能のマージナル部分のメモリセルを如何に使いきれるかである。これによって、メモリの生産性向上による低価格化と大容量化を実現することができる。更に、この様な大容量メモリに保存されたデータの信頼性の確保も重要となる。
【０００３】
大規模な技術革新を伴わなくても、メモリの大容量化を実現する方法として、メモリセル１つ当たりの記憶容量を増やす多値化技術がある。また、マージナルなメモリセルに対してデータを保証する技術としてＥＣＣがある。特に、ＮＡＮＤフラッシュメモリに関しては、メモリセルの多値化やＥＣＣのシステム技術が成熟しており、ほぼ完成の域にある。
【０００４】
このような、ＮＡＮＤフラッシュメモリは、携帯端末やＳＳＤなどその用途はますます多岐に亘ってきている。それに伴い、ＮＡＮＤフラッシュメモリの、更なる技術的飛躍を図る必要があり、そのためには、従来ある多値化技術やＥＣＣに革新的な変更を施す必要がある。
【０００５】
しかし、多値化されたＮＡＮＤフラッシュメモリは、元々、多値化が想定されていない仕様を元に発展したものである。また、ＥＣＣもメモリ全般のシステムを対象とした技術を元にＮＡＮＤフラッシュメモリに応用されている。したがって、これら多値化技術とＥＣＣは、ＮＡＮＤフラッシュメモリのメモリセルの多値化に即した技術として最適なものとはなっていない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−１８１４３９号
【特許文献２】ＷＯ２００８−０９９７２３号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
データの信頼性を向上させた多値記憶セルを用いたメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本実施形態に係るメモリシステムは、外部から入力された第１のデータを保持するレジスタと、前記レジスタに保持された第１のデータを第２のデータに変換してこの第２のデータを前記レジスタの第１のデータを保持する領域に上書きし、更に、前記レジスタに保持された第２のデータをメモリセルに記録する第３のデータに変換してこの第３のデータを前記レジスタの第２のデータを保持する領域に上書きするデータ変換部とを備えたことを特徴とする。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態に係るメモリシステムのｐ−ａｄｉｃセルのレベル数とデータ記憶効率等の関係を示す表である。
【図２】本実施形態に係るメモリシステムの概念図である。
【図３】本実施形態に係るメモリシステムのデータインタフェースの概要を説明する図である。
【図４】本実施形態に係るメモリシステムのデータ転送の手順を説明する図である。
【図５】本実施形態に係るメモリシステムのセクタ毎の書き込み処理を説明する図である。
【図６】本実施形態に係るメモリシステムのセクタ毎の読み出し処理を説明する図であえる。
【図７】本実施形態に係るメモリシステムのｐ−ａｄｉｃセルに対する有限体Ｚｐ（ｐ＝１７）の数の割り当てを説明する図である。
【図８】本実施形態に係るメモリシステムの書き込み／読み出し方法を説明する図である。
【図９】本実施形態に係るメモリシステムの書き込み／読み出し時のワード線レベルの変換とデータ転送タイミングを説明する図である。
【図１０】本実施形態に係るメモリシステムの１７進数への変換回路の構成を説明する図である。
【図１１】本実施形態に係るメモリシステムの１ステップ分の１７進数への変換回路（“Ｘ  ｔｏ  ｐ”回路ブロック）のブロック図である。
【図１２】本実施形態に係るメモリシステムの“Ｘ  ｔｏ  ｐ”回路ブロックのブロック図である。
【図１３】本実施形態に係るメモリシステムの“Ｘ  ｔｏ  ｐ”回路ブロックの回路記号を示す図である。
【図１４】本実施形態に係るメモリシステムのＺｐの要素を求める演算回路素子（“６  ｂｉｔ  ｍｏｄ  １７”回路ブロック）の回路記号を示す図である。
【図１５】本実施形態に係るメモリシステムの“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックのブロック図である。
【図１６】本実施形態に係るメモリシステムの１７進数への変換コア（“ｐ−ａｄｉｃ”回路ブロック）の回路記号を示す図である。
【図１７】本実施形態に係るメモリシステムの“ｐ−ａｄｉｃ”回路ブロックのブロック図である。
【図１８】本実施形態に係るメモリシステムの１７進数への変換回路のブロック図である。
【図１９】本実施形態に係るメモリシステムの“Ｄ−ｒ”レジスタの回路図である。
【図２０】本実施形態に係るメモリシステムの１７進数への変換回路を制御するタイミング信号のタイミングチャートである。
【図２１】本実施形態に係るメモリシステムの２５進数への変換回路の構成を説明する図である。
【図２２】本実施形態に係るメモリシステムの１ステップ分の２５進数への変換回路（“ａ  ｔｏ  Ｘ”回路ブロック）のブロック図である。
【図２３】本実施形態に係るメモリシステムの“ａ  ｔｏ  Ｘ”回路ブロックのブロック図である。
【図２４】本実施形態に係るメモリシステムの“ａ  ｔｏ  Ｘ”回路ブロックの回路記号を示す図である。
【図２５】本実施形態に係るメモリシステムのバイナリの要素を求める演算回路素子（“６  ｂｉｔ  ａｄｄ  １７”回路ブロック）の回路記号を示す図である。
【図２６】本実施形態に係るメモリシステムの“６  ｂｉｔ  ａｄｄ  １７”回路ブロックのブロック図である。
【図２７】本実施形態に係るメモリシステムの共通化された１ステップ分の２５進数への変換回路ブロック（“ｐ  ｔｏ  Ｘ”回路ブロック）のブロック図である。
【図２８】本実施形態に係るメモリシステムの“ｐ  ｔｏ  Ｘ”回路ブロックの回路記号を示す図である。
【図２９】本実施形態に係るメモリシステムの２５進数への変換回路コア（“ｂｉｎａｒｙ”回路ブロック）の回路記号を示す図である。
【図３０】本実施形態に係るメモリシステムの“ｂｉｎａｒｙ”回路ブロックのブロック図である。
【図３１】本実施形態に係るメモリシステムの２５進数への変換回路のブロック図である。
【図３２】本実施形態に係るメモリシステムの“Ａ−ｒ”レジスタの回路図である。
【図３３】本実施形態に係るメモリシステムのブロック図である。
【図３４】本実施形態に係るメモリシステムのエンコードのフロー図である。
【図３５】本実施形態に係るメモリシステムのデコードのフロー図である。
【図３６】本実施形態に係るメモリシステムのデコードのフロー図である。
【図３７】本実施形態に係るメモリシステムのＺｐの要素の積を求める掛け算回路（“Ｘ  Ｚｐ”回路ブロック）の回路記号を示す図である。
【図３８】本実施形態に係るメモリシステムの“Ｘ  Ｚｐ”回路ブロックのブロック図である。
【図３９】本実施形態に係るメモリシステムのＺｐの要素の和を求める演算回路素子（“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック）の回路記号を示す図である。
【図４０】本実施形態に係るメモリシステムの“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックの回路図である。
【図４１】本実施形態に係るメモリシステムのメモリに記憶するコード成分を求める回路のブロック図である。
【図４２】本実施形態に係るメモリシステムのＺｐの要素の累乗を求める回路（“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロック）の回路記号を示す図である。
【図４３】本実施形態に係るメモリシステムの“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックのブロック図である。
【図４４】本実施形態に係るメモリシステムのシンドロームを求める回路のブロック図である。
【図４５】本実施形態に係るメモリシステムのシンドロームを求める回路のブロック図である。
【図４６】本実施形態に係るメモリシステムのシンドロームを求める回路のブロック図である。
【図４７】本実施形態に係るメモリシステムのＺｐの要素の累乗を求める回路（“（ｊ）ｉ  （ｊ＝１  ｔｏ  １６）”回路ブロック）の回路記号を示す図である。
【図４８】本実施形態に係るメモリシステムの“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックのブロック図である。
【図４９】本実施形態に係るメモリシステムの解探索多項式を求める回路のブロック図である。
【図５０】本実施形態に係るメモリシステムのハッセ（Ｈａｓｓｅ）微分多項式の係数を求める回路のブロック図である。
【図５１】本実施形態に係るメモリシステムのＺｐの各要素の対する各種演算結果の表である。
【図５２】本実施形態に係るメモリシステムのＺｐの要素間の対応を求めるデコーダの回路図である。
【図５３】本実施形態に係るメモリシステムの多項式の解とその多重度を求める回路のブロック図である。
【図５４】本実施形態に係るメモリシステムのハッセ微分多項式の根と多重度のペアから真のエラーを求めてコード訂正を行う回路のブロック図である。
【図５５】本実施形態に係るメモリシステムのエラーコード語のリー・メトリックを計算する演算回路のブロック図である。
【図５６】本実施形態に係るメモリシステムのリー・メトリックを計算する演算回路素子（“５  ｂｉｔ  ＬＭ  １７”回路ブロック）の回路記号を示す図である。
【図５７】本実施形態に係るメモリシステムの“５  ｂｉｔ  ＬＭ  １７”回路ブロックのブロック図である。
【図５８】本実施形態に係るメモリシステムのＣ＝ＡＧからＡ＝ＣＧ−１を求める計算回路を構成するユニット（“ｃ（ｍ−１）ｊ”回路ブロック）の回路記号を示す図である。
【図５９】本実施形態に係るメモリシステムの“ｃ（ｍ−１）ｊ”回路ブロックのブロック図である。
【図６０】本実施形態に係るメモリシステムのＣ＝ＡＧからＡ＝ＣＧ−１を求める計算回路を構成するユニット（“ａｍ”回路ブロック）の回路記号を示す図である。
【図６１】本実施形態に係るメモリシステムの“ａｍ”回路ブロックのブロック図である。
【図６２】本実施形態に係るメモリシステムのＣ＝ＡＧからＣ＝ＣＧ−１を求める計算回路のブロック図である。
【図６３】第２の実施形態に係るメモリシステムのブロック図である。
【図６４】本実施形態に係るメモリシステムのシンドロームの成分要素を求める回路のブロック図である。
【図６５】本実施形態に係るメモリシステムのユークリッド反復法で用いる回路（“ｋｎ”回路ブロック）の回路記号を示す図である。
【図６６】本実施形態に係るメモリシステムの“ｋｎ”回路ブロックのブロック図である。
【図６７】本実施形態に係るメモリシステムのユークリッド反復法で用いる回路（“ｆｎ”回路ブロック）の回路記号を示す図である。
【図６８】本実施形態に係るメモリシステムの“ｆｎ”回路ブロックのブロック図である。
【図６９】本実施形態に係るメモリシステムのユークリッド反復法で用いる回路（“ｐｎ”回路ブロック）の回路記号を示す図である。
【図７０】本実施形態に係るメモリシステムの“ｐｎ”回路ブロックのブロック図である。
【図７１】本実施形態に係るメモリシステムのユークリッド反復法で用いる回路（“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロック）の回路記号を示す図である。
【図７２】本実施形態に係るメモリシステムの“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックのブロック図である。
【図７３】本実施形態に係るメモリシステムのユークリッド反復法で用いる回路（“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロック）の回路記号を示す図である。
【図７４】本実施形態に係るメモリシステムの“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロックのブロック図である。
【図７５】本実施形態に係るメモリシステムのユークリッド反復法で用いる回路のブロック図である。
【図７６】本実施形態に係るメモリシステムのユークリッド反復法で用いる回路のブロック図である。
【図７７】本実施形態に係るメモリシステムのユークリッド反復法で用いる回路（“ＤＥＧ”回路ブロック）の回路記号を示す図である。
【図７８】本実施形態に係るメモリシステムの“ＤＥＧ”回路ブロックのブロック図である。
【図７９】本実施形態に係るメモリシステムのユークリッド反復法の停止条件を判定する回路のブロック図である。
【図８０】本実施形態に係るメモリシステムのユークリッド反復法の成功条件を判定する回路のブロック図である。
【発明を実施するための形態】
【００１０】
［実施形態の概要］
メモリシステムは、セルアレイの微細化、セルアレイ等の構造の３次元化、メモリセルに用いる物理現象に対する工夫などによって、記憶容量の高密度化を実現している。そして、安定した製造工程が達成された後のメモリシステムの高密度化には、メモリセルの多値化が有効な手段となる。
【００１１】
特に、ＮＡＮＤフラッシュメモリに関しては、いち早く多値化が進み、１セル当たり８値を記憶する３ビットセルが実用化されている。しかし、それ以上のメモリセルの多値化は、急激な信頼性の悪化を伴い、単ビットセルに対して、少なくとも２桁以上のエラー率の増加につながる。このように、信頼性と生産の歩留まりの問題から、メモリセルの多値化の進行は、大容量ファイルメモリの実現手段として期待されながらも、困難な問題を抱えている。
【００１２】
このメモリセルの多値化に際しての問題点を克服して、有効に活用できれば、安定したＮＡＮＤフラッシュメモリの製造工程を長期に亘って利用しながらも、ＮＡＮＤフラッシュメモリの記憶容量の高密度化を達成することができる。
【００１３】
そこで、第１の実施形態では、以下のような趣旨のもと、リー・メトリック・コードを利用したメモリシステムを提案する。
【００１４】
（１）  メモリセルのエラーは、多くの場合、メモリセルに対する隣接レベルへの書き込みや、メモリセルからの隣接レベルとしての読み出し等によって生じる。このような場合であっても、従来のメモリセルに対するバイナリビットの割り付けの場合、エラー量が大きくなってしまうことがある。そこで、以下で説明する実施形態に係るメモリシステムは、メモリセルに対する値の割り付けを簡素化することで信頼性を向上させた多値記憶セルを利用する。
【００１５】
（２）  メモリセルの多値レベルは、基底レベルからの高さとして捉えることができる。つまり、多値化されたメモリセルは、本来、バイナリでデジタル化さされた情報ではなく、素数でデジタル化された情報の記憶に適している。そこで、以下で説明する実施形態に係るメモリシステムは、物理量レベルを素数ｐの有限体Ｚｐの各要素に割り付けたメモリセル（以下、「ｐ−ａｄｉｃセル」と呼ぶ）を用いて構成する。
【００１６】
（３）  メモリセルに対する隣接レベルへの書き込みや、メモリセルへの隣接レベルとしての読み出し等のよって生じるエラーの場合の有効なＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）は、有限体Ｚｐのリー・メトリック・コード（Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ）である。そこで、以下で説明する実施形態に係るメモリシステムでは、エラーの検索漏れが生じないように工夫されたリー・メトリック・コードを用いたＥＣＣシステムを利用する。
【００１７】
（４）  ｐ−ａｄｉｃセルを利用したＮＡＮＤフラッシュメモリの構成は、従来のＮＡＮＤフラッシュメモリの構成とは異なる。そこで、以下で説明する実施形態では、具体的なメモリシステムの仕様の骨子案を提示し、これに基づいて構成されたメモリシステムについて説明する。
【００１８】
（５）  訂正できるエラー量を大きく設定したい場合、リー・メトリック・コードのＥＣＣを利用するエラー訂正方法として、ユークリッド反復法を用いたエラー訂正方法を利用すると有効な場合がある。そこで、ユークリッド反復法を用いてエラー訂正するメモリシステムを実現するために必要となる具体的な回路について説明する。
【００１９】
［第１の実施形態］
＜リー・メトリック・コード＞
先ず、リー・メトリック・コードについて概要を説明する。
【００２０】
コードを表すシンボルｃは、数１に示す整数となる。
【００２１】
［数１］
0005204186.tif 000002
【００２２】
これら整数の計量をリー・メトリックとして｜ｃｊ｜で表わし、全てのリー・メトリック｜ｃｊ｜はｐ／２以下の整数で表されて、リー・メトリック｜ｃｊ｜の定義は数２のようになる。
【００２３】
［数２］
0005204186.tif 000003
【００２４】
コードＣは、ｎ＝ｐ−１個のシンボルｃｊの並びと考えられるため、Ｃ＝（ｃ１，ｃ２，…，ｃｎ）で表すことができる。コードＣの計量ｗ（Ｃ）は、数３のように各シンボルｃｊのリー・メトリック｜ｃｊ｜の和として定義される。
【００２５】
［数３］
0005204186.tif 000004
【００２６】
また、コード間の距離はコードに対応する各シンボルの差のリー・メトリックの和で定義される。ここで２つのシンボルｃとｙの差（リー距離）ｄＬ（ｃ，ｙ）は数４のようになる。
【００２７】
［数４］
0005204186.tif 000005
【００２８】
さらに、コードＣの最小リー距離は、数５に示すようにコードＣの計量ｗ（Ｃ）の最小の計量で定義される。
【００２９】
［数５］
0005204186.tif 000006
【００３０】
このとき、リー・メトリック・コードは、数６に示す生成行列Ｇ及びシンドローム行列Ｈを持ったコード間の最小距離が２γであり、且つ、γ−１以下のリー・メトリックのエラー訂正が可能なコードである。
【００３１】
［数６］
0005204186.tif 000007
【００３２】
ここで、コードＣの語長をｎ、データの語長をｋとすると、γ＝ｎ−ｋであり、γはコードＣに含まれる冗長語長を表している。
【００３３】
この様に構成されるリー・メトリック・コードを生成するために入力変換されたデータをｋ桁のｐ進数で表す。このｐ進数の各桁の数はＺｐの要素であるから、これをリー・メトリック・コードのデータ語Ｘとして、生成行列Ｇから演算Ｃ＝ＸＧとしてコード表現が得られる。得られたコード語をメモリに記憶する。記憶したＺｐの数に生じたエラーの情報は、メモリから読み出したリー・メトリック・コードのデータ語Ｙとして、演算Ｓ＝ＹＨｔ（ＨｔはＨの転置行列）からシンドロームを得て、エラーの位置と量が計算できエラーが訂正できる。
【００３４】
＜データ処理の原理、シンドローム変換法＞
次に、ｐ−ａｄｉｃセルを用いたＮＡＮＤフラッシュメモリにおけるデータ処理の方法の原理について説明する。以下において、この原理を「シンドローム変換法」と呼ぶ。
【００３５】
ｐ−ａｄｉｃセルに保持されたコード語Ｃの成分は、Ｚｐの数であり、成分毎に様々な擾乱を受けて変化を起こし、数７に示すように、異なる成分からなるコード語Ｙへと変化する。
【００３６】
［数７］
0005204186.tif 000008
【００３７】
このＹからＣを復元するのがデコードである。デコードに先立ちシンドロームを求める。
【００３８】
シンドローム＜ｍ＞Ｓは、３個の成分を持つベクトル＜ｍ＞＝＜ｍ１，ｍ２，ｍ３）（ｍｉ＝０〜ｐ−２）をＺｐから選択した上で、これらベクトルとＨ行列からなる数８のような行列演算によって、要素Ｓ＜ｍ＞＋０、Ｓ＜ｍ＞＋１、・・・、Ｓ＜ｍ＞＋εとして求まる。ここで、ε＝γ−１である。
【００３９】
［数８］
0005204186.tif 000009
【００４０】
＜ｍ＞Ｓ＝（Ｓ＜ｍ＞＋ｌ）（ｌ＝０〜ε）とした上で、＜ｍ＞＋ｌ＝０からＳ０を得て、｜Ｓ０｜≦εならばデコードを開始する。
【００４１】
これは、生成行列Ｇとシンドローム行列Ｈの構成がＧＨｔ＝０（ｍｏｄ  ｐ）となるように構成されていることなどによって、Ｙ＝Ｃ＋Ｅと置くと、Ｃについては数９のようにその対応部分がゼロになり、ＳはＥの成分で表わすことができる。
【００４２】
［数９］
0005204186.tif 000010
【００４３】
なお、＜ｍ＞＝＜０＞、ｌ＝０として、Ｅ＝（ｅ１，ｅ２，・・・，ｅｎ）とすると、Ｓ＜０＞＋０＝Ｓ０＝Σｅｊと表わすことができ、Ｓ０は各エラーの総和となることが分かる。
【００４４】
｜Ｓ０｜≦γ−１の場合、以下のシンドローム変換法でエラーを求めることができる。この条件を満たさなくても計算上はコード成分に対するエラーの値を得るが、真のコードに対するエラーか、或いは隣のコードに対するエラーかを判別できないため、エラー訂正に用いることはできない。これは、リー・メトリック・コードのエラー訂正可能な必要条件が、コード間のリー・メトリックの最小値が２γであるためであり、この場合、必ず、Ｓ０のリー・メトリックがε以下、つまり、エラー成分のリー・メトリックの総和がε以下となるためである。
【００４５】
｜Ｓ０｜≦εの場合、シンドローム変換法によるエラー探索に入るが、始めに行うのが、シンドロームの変換である。ここでは、Ｓ＜ｍ＞＋０≠０になる＜ｍ＞に対して数１０から、ｕＳ＜ｍ＞＋０≡εとなるｕ＝ε（Ｓ＜ｍ＞＋０）−１を求め、これから新たなシンドロームｕ＜ｍ＞Ｓ＝（ｕＳ＜ｍ＞＋０，ｕＳ＜ｍ＞＋１，・・・，ｕＳ＜ｍ＞＋ε）を得る。
【００４６】
［数１０］
0005204186.tif 000011
【００４７】
続いて、変換されたシンドロームを用いてエラーのデコードを行うが、この方法を説明する。
【００４８】
メモリセルアレイに記憶されたコードは、エラーＥ＝（ｅ１，ｅ２，・・・，ｅｎ）（ｎ＝ｐ−１）を持つので、新たなシンドロームにとって仮想的なエラーは｛ｕ（１）＜ｍ＞ｅ１，ｕ（２）＜ｍ＞ｅ２，・・・，ｕ（ｎ）＜ｍ＞ｅｐ−１｝となる。これらｎ＝ｐ−１個のエラー成分を変換したものを２つの組Ｊ＋とＪ−に数１１のように分類する。
【００４９】
［数１１］
0005204186.tif 000012
【００５０】
すなわち、シンボルのエラー量がｕ（ｊ）＜ｍ＞ｅｊ＜ｐ／２の場合、シンボルｃｊの位置ｊの集まりであるＪ＋と、シンボルのエラー量がｕ（ｊ）＜ｍ＞ｅｊ＞ｐ／２の場合のシンボルｃｊの位置ｊの集まりであるＪ−とに分類される。Ｚｐ上の多項式Λ（ｘ）、Ｖ（ｘ）をこれらの組をもとに数１２のように構成する。
【００５１】
［数１２］
0005204186.tif 000013
【００５２】
このように、多項式Λ（ｘ）はＪ＋のエラー成分位置ｊの逆数を根として持ち、そのエラー成分のリー・メトリックであるｕ（ｊ）＜ｍ＞ｅｊを根の多重度として持つ多項式となる。一方、多項式Ｖ（ｘ）はＪ−のエラー成分位置ｊの逆数を根として持ち、そのエラー成分のリー・メトリックｐ−ｕ（ｊ）＜ｍ＞ｅｊを根の多重度として持つ多項式となる。デコードは、最終的にこれらの多項式をシンドロームの情報のみから構成して解くことによってエラーの情報を得る過程となる。つまり、これら多項式Λ（ｘ）、Ｖ（ｘ）とシンドロームとの関係を求める必要がある。各シンドロームｕ＜ｍ＞Ｓをその次数の係数に持つ級数多項式で構成すると、数１３のように、エラー成分の位置と仮想エラー成分の値をその因子に持つ有理多項式で表わされる。
【００５３】
［数１３］
0005204186.tif 000014
【００５４】
数１３から、多項式Λ（ｘ）、Ｖ（ｘ）、シンドロームＳ（ｘ）の間には数１４に示す関係式が成立する。
【００５５】
［数１４］
0005204186.tif 000015
【００５６】
続いて、数１４に示す関係式を利用して、シンドロームＳ（ｘ）から多項式Λ（ｘ）、Ｖ（ｘ）を求める。
【００５７】
シンドロームＳ（ｘ）から、数１５に示す次数がγ−１以下の多項式Ψ（ｘ）を求める。
【００５８】
［数１５］
0005204186.tif 000016
【００５９】
多項式Ψ（ｘ）の展開式において、数１５に示す式の両辺の同次次数の係数の比較から、係数ψｊは、シンドロームｕＳ＜ｍ＞＋ｊと既に求まっている係数ψｊ−１とを用いて反復法で求めることができる。シンドロームｕＳ＜ｍ＞＋０〜ｕＳ＜ｍ＞＋εから多項式Ψ（ｘ）の係数ψ０〜ψεを求めた結果を数１６に示す。
【００６０】
［数１６］
0005204186.tif 000017
【００６１】
この多項式Ψ（ｘ）はΛ（ｘ）／Ｖ（ｘ）に等価な多項式であるが、互いに素なλ（ｘ）とｖ（ｘ）のキー条件は数１７のようになるため、Ｖ（ｘ）＝１とでき、Ψ（ｘ）をΛ（ｘ）そのものとして採用することができる。
【００６２】
［数１７］
0005204186.tif 000018
【００６３】
多項式の次数に関する条件ｄｅｇ  λ（ｘ）−ｄｅｇ  ｖ（ｘ）＝ε、ｄｅｇ  λ（ｘ）＋ｄｅｇ  ｖ（ｘ）≦εから０≦２ｄｅｇ  ｖ（ｘ）≦０なので、ｄｅｇ  ｖ（ｘ）＝０になることが分かる。即ち、Ｖ（ｘ）＝１且つΛ（ｘ）＝Ψ（ｘ）とできて、Ψ（ｘ）はこの条件を満たす。このときシンドロームから求めたΨ（ｘ）が予め決めたεとε＝ｄｅｇ  Ψ（ｘ）＝ｄｅｇ  Λ（ｘ）が成立するはずである。成立する場合、キー条件を全て満たすため、Ψ（ｘ）を用いて解を得ることができる。一方、不成立の場合、エラーがキー条件を満たさず、解無しとなる。
【００６４】
この方法は全てのエラーコード成分位置を集合Ｊ＋に集める変換をエラーに対して施せることに相当する。また、別の観点からは変換したエラーの総和がεになるように変換することによってエラー修正ができるようになる可能性があることを示す。
【００６５】
ここで、可能性と言ったのはふたつの意味があり、第１は、全てのエラー成分位置がＪ＋に集められて、シンドロームから求めたΨ（ｘ）の次数がちょうどεに等しいことが必要だからである。第２は、｜Ｓ０｜≦εでなくても計算上はエラー量を得ることができるが、誤訂正を排除するためにこの条件を加える必要があるからである。
【００６６】
解探索の方法は、Λ（ｘ）＝Ψ（ｘ）、Ｖ（ｘ）＝１とおいてＺｐの要素から方程式を満たす解を見つけ、得られた根の多重度とから、逆変換を施して真のエラーＥを得る。
【００６７】
次に、以上の原理によるシンドローム変換法に関して、エラー探索の有効な条件を考察する。
【００６８】
実際には不明な真のエラーコード語の点をＥ＝（ｅ１，ｅ２，・・・，ｅｐ−１）とすると、シンドローム変換法では、これを仮想的なエラーコード語の点＜ｍ＞Ｅ＝（ｕ（１）＜ｍ＞ｅ１，ｕ（２）＜ｍ＞ｅ２，・・・，ｕ（ｎ）＜ｍ＞ｅｐ−１）に変換している。このとき成分座標自体は不変であることに注意する。この場合、シンドロームは数１８のようになる。数１８において、ｊｉ（ｉ＝１〜ξ）は、ゼロとは異なるＥの成分座標である。ｊ１＜ｊ２＜・・・＜ｊξとなる。
【００６９】
［数１８］
0005204186.tif 000019
【００７０】
ここでξ≧２で＜ｍ＞≠＜ｍ´＞の場合、仮想エラーへの変換は全て独立になる。何故ならば、等しいものがあるとするとｊｉは変換によって不変であるので、ｕ（ｊ）＜ｍ＞＝ｕ´（ｊ）＜ｍ´＞がξ個の異なるｊに対して成り立つ必要があるためである。これは、以下に示す数１９が全てのｊｉで成立することであり、ξ＝１の場合のみ成立する。
【００７１】
［数１９］
0005204186.tif 000020
【００７２】
以上から、シンドローム変換法によれば、＜ｍ＞をスキャンすると、異なる＜ｍ＞毎に異なる仮想エラー点の多項式を構成できる。ξ＝１の場合、シンドロームのｕを掛ける変換のみで仮想エラー対応ができることに相当する。
【００７３】
また、仮想的な、エラーの１つの成分に着目すると、例えば、ｕ（ｊ）＜ｍ＞ｅｊ＝ε（Ｓ＜ｍ＞＋０）−１（ｊ）＜ｍ＞ｅｊがゼロ以外の全てのＺｐ成分を動く条件は以下の通りである。つまり、＜ｍ＞の成分のいずれかが０からｐ−２を変動させれば、
［数２０］
0005204186.tif 000021
【００７４】
がＺｐの０を除く１〜ｐ−１の成分で動くので、その逆元である（Ｓ＜ｍ＞＋０）−１（ｊ）＜ｍ＞もゼロ以外の全ての成分を取る。結局、ｕ（ｊ）＜ｍ＞ｅｊがゼロ以外の全ての成分を一回は取ることになるので、＜ｍ＞の成分のどれかを０からｐ−２へとスキャンさせれば十分条件となる。
【００７５】
シンドローム変換法では、シンドロームをｐ−１個の対角行列を導入して、これらの個々の０〜ｐ−２乗を用いて、仮想的なエラーを発生させている。そこで、次に、このような仮想的なエラーへの変換でカバーできるエラーと、シンドローム変換法の条件について説明する。
【００７６】
真のエラーコード語の点をＥ＝（ｅ１，ｅ２，・・・，ｅｐ−１）とすると、シンドローム変換法による仮想的なエラーコード語の点は、＜ｍ＞Ｅ＝｛ｕ（１）＜ｍ＞ｅ１，ｕ（２）＜ｍ＞ｅ２，・・・，ｕ（ｐ−１）＜ｍ＞ｅｐ−１｝となる。
【００７７】
ξ個のエラー成分位置があり、これらをｊｉ（ｉ＝１〜ξ、ｊ１＜ｊ２＜・・・＜ｊξ）で表し、数２１のようにおく。
【００７８】
［数２１］
0005204186.tif 000022
【００７９】
数２１では、εｉ（ｉ＝１〜ｐ−１）を変数と考え、ε１〜εｐ−１の和がεに固定されている。
【００８０】
そこで、和がεとなるξ個の成分の場合の数を計算する。
【００８１】
ξ−１個の成分については１〜ｐ−１を自由に選択できる。このξ−１の和に対して最後のξ個目の値を選択して、ξ個の成分の和がεと合同になるようにできるため、変数の選択の場合の数は（ｐ−１）ξ−１となる。
【００８２】
ただし、このままでは最後の選択に０を取らなければならない場合も含むので、この場合は排除する。ξ個の１〜ｐ−１で和がεと合同になる場合の数をｎ（ξ）とすると、最後の選択の前に和がεとなる場合を除いておかなければならないため、ｎ（ξ）＝（ｐ−１）ξ−１−ｎ（ξ−１）となる。これから、数２２のようなｎ（ξ）を得る。
【００８３】
［数２２］
0005204186.tif 000023
【００８４】
このεのξ個への分割の場合の中には成分が全て０〜ｐ／２の間にあるもの、即ちＪ＋のみに成分が属するものがある。異なる仮想的なエラーへの変換の数がこのｎ（ξ）個の場合の数以上であれば、Ｊ＋の仮想エラーを作ることができる。この場合、発生した真のエラーがリー・メトリック・コードのエラー訂正の条件を満たせばシンドローム変換法で漏れなく解けることになる。
【００８５】
続いて、真のエラーからシンドローム変換法で発生可能な異なる仮想的エラーの数を求める。前述の場合、ベクトル＜ｍ＞の次数は３である。したがって、＜ｍ＞＝（ｍ１，ｍ２，ｍ３）であり、εの分割の成分が１からｐ−１の全てを動くように、それぞれの成分を０からｐ−２に独立にスキャンする。今の具体例の場合、＜ｍ＞≠＜ｍ´＞の変換の数は（ｐ−１）３である。
【００８６】
ξ個の自由変数εｉの和がεとなる場合の数ｎ（ξ）と比較すると、
［数２３］
0005204186.tif 000024
【００８７】
が漏れのないスキャン条件となる。これから、ξ＝４がこの条件を満たし、対角行列を３つ用いる方法では、ξ＝４までなら漏れのない探索が可能となる。
【００８８】
さらに、ｊが１〜ｐ−１まで動くとき、ゼロ以外のＺｐの全ての要素である１からｐ−１までを動く関数を対角行列とする行列のｍ乗を追加すると、上記と同様に変換の数をｐ−１倍ずつ増やすことができる。
【００８９】
ζ個の行列を並べれば変換の数は、（ｐ−１）ζになり、漏れのない条件を常にξ＝ζ＋１とできる。
【００９０】
これらの関数の例は、今までに用いた、ｊ、ｐ−ｊ、ｐ−ｊ−１の他に、ａをＺｐ内のａ≠１、２であり、且つ、ある数の累乗以外の数をａとするａｊ、ｐ−ａｊがあり、十分な数の変換を作ることができる。したがって、適当にａを選んで対角行列を作れば、＜ｍ＞の次数を拡大することができ、ξはこの次数より常に１だけ大きく設定できる。そのため、リー・メトリック・コードの訂正可能条件を満たす場合の全てに対して、ユークリッド反復法を用いる代わりにシンドローム変換法を用いても漏れの無いエラーの探索が可能になる。
【００９１】
ただし、変換の場合の数はζが１増えるとｐ−１倍になるので、探索の数は指数的に大きくなる。したがって、場合によっては従来のユークリッド反復法を用いた方がシンドローム変換法より処理時間が短くなると考えられる。この場合、適用するメモリシステムに応じて、最適な選択を行う必要がある。特に、ε＝１、２等の場合、シンドローム変換法を用いた方が有利になる。  
【００９２】
＜ｐ−ａｄｉｃ・ＮＡＮＤフラッシュメモリのデータインタフェース＞
以上を踏まえ、ここでは、エラー訂正にシンドローム変換法を用いたＮＡＮＤフラッシュメモリの具体例について説明する。以下において、このＮＡＮＤフラッシュメモリを「ｐ−ａｄｉｃ・ＮＡＮＤフラッシュメモリ」と呼ぶ。また、特に断りがない場合、「メモリシステム」はｐ−ａｄｉｃ・ＮＡＮＤフラッシュメモリを指すものとする。
【００９３】
先ず、どのようなｐ−ａｄｉｃセルを選択するかの比較検討を行う。
【００９４】
図１は、第１の実施形態に係るメモリシステムのｐ−ａｄｉｃセルのレベル数毎のデータ記憶効率等の関係を示す表である。表中１列目が評価項目となる。各評価項目は以下の通りである。
【００９５】
Ｌ：  ｐ−ａｄｉｃセルの閾値レベルの区分数
ｐ：  使用する素数
ｈ：  Ｚｐをバイナリ表示するために必要な最小ビット数
ε：  エラー訂正できるエラーのリー・メトリック総量
Ｍ：  Ｍ＝ｈ（ｐ−ε−３）によって決定する値であり、ＥＣＣで一括処理を行う「ｂｉｎａｒｙ  ｗｏｒｌｄ」のバイナリのデータ量であるビット数
ここで、「ｂｉｎａｒｙ  ｗｏｒｌｄ」とは、本実施形態に係るメモリシステム外にあるＩＴ機器などバイナリでデータを取り扱う環境をいう。
【００９６】
δ：  Ｍの２ｈ進数としての桁数（δ＝Ｍ／ｈ）
Ｍ／（ｐ−１）：  １つのｐ−ａｄｉｃセルがバイナリの何ビット記憶に相当するかの指標
バイナリＭビットを、ｐ−１個のコード成分のコード語としてｐ−１個のｐ−ａｄｉｃセルに記憶する。
【００９７】
ｐ−１：  リー・メトリック・コードのコード語を記憶するのに必要なｐ−ａｄｉｃセル数
ｌｏｇ２Ｌ：  ｐ−ａｄｉｃセルをバイナリを記憶する多値セルとした場合に、ｐ−ａｄｉｃセルに記憶できるビット数
ε／（ｐ−１）：  εを用いた場合の最大訂正できるセル数の割合。又は、一つのｐ−ａｄｉｃセル内で訂正できる最大エラーレベル距離の割合
ｌｏｇ２Ｌ／｛Ｍ／（ｐ−１）｝：  メモリセルをリー・メトリック・コードを用いたＥＣＣを記憶するｐ−ａｄｉｃセルとして使用した場合の、メモリセルをバイナリ多ビットセルとして見なした場合に対する冗長度
表の点々を施した部分が、ｐ−ａｄｉｃセルのレベルやバイナリに対する冗長度の観点から実用的な場合と思われる範囲である。
【００９８】
ここでは、実用的なメモリシステムとして、図１中星印で示したＬ＝１７、ε＝４の場合であり、１６セル中４セルを訂正できる場合を例として説明する。
【００９９】
これは、実用されているＮＡＮＤフラッシュメモリの１セル当たりのレベル数が１６レベルである点を考慮している。また、εが１増えるとシンドローム変換法の処理の規模は、ほぼｐ倍で増えるので、ｐ＝１７を用いる場合、図１中二重丸で示した１６セル中２セルを訂正可能なε＝２の場合が当面実用的とも考えられるが、実施形態の理解を助けるためε＝４の場合を取り上げることとした。
【０１００】
続いて、ｐ＝１７、ε＝４の場合の具体例に対して、ＮＡＮＤフラッシュメモリシステムを構成するが、始めに、このＮＡＮＤフラッシュメモリシステムの仕様を示す。なお、ここで示す仕様は、他のｐやεを用いた場合にもその仕様の骨子（スケルトン）となるものであり、ｐやεの値よってこのスケルトンの値を対応する値に変更してやれば良い。
【０１０１】
以下が、ｐ−ａｄｉｃ・ＮＡＮＤフラッシュメモリの仕様である。
【０１０２】
（１）  データインタフェースの構成を×８の１バイト構成とする。
【０１０３】
（２）  クロックに同期して動作する。
【０１０４】
（３）  データ転送の単位としてのセクタは５１２バイトとする。
【０１０５】
（４）  バイナリからｐ進数への変換処理の単位を５０ビットとする。以下において、この５０ビットのバイナリからｐ進数への変換処理を「プロセス」と呼ぶ。なお、他の一般的な用語としての「プロセス」と区別するため「ＰＲＯＣＥＳＳ」と表記する。したがって、１セクタ分のバイナリは、８２ＰＲＯＣＥＳＳでｐ進数に変換される。
【０１０６】
（５）  ページサイズを４セクタ（２０４８バイト）とする。ブロックサイズは、特に決めないが、６４ページなどセルアレイの構成に依存した大きさとする。
【０１０７】
（６）  ページを構成する各セクタへのアクセスはランダムとする。
【０１０８】
（７）  セクタ内のアクセス方法として、種々のモードを用意する。アクセスモードは、大別して「高速モード」と「ランダムモード」の２つとする。
【０１０９】
高速モード：  セクタ内の固定されたアドレス順にアクセスするモードである。書き込み動作では、セクタアクセス開始後１０サイクル経過後に、ＰＲＯＣＥＳＳを開始して順次データを処理していく。読み出し動作では、１ＰＲＯＣＥＳＳが終了するとセクタのアクセスを可能にする。書き込み動作、読み出し動作共にセクタに対するＰＲＯＣＥＳＳと、そのセクタの対するアクセスは同時進行される。
【０１１０】
ランダムモード：  セクタへのアクセスのバースト長、バーストモード、バーストの先頭アドレスが設定可能なアクセスモードである。
【０１１１】
例えば、バースト長としては、４／８／１６／３２／２５６ビット等、バーストモードとしては、インタリーブモード／ラップアラウンドモード等に設定可能である。
【０１１２】
セクタに格納するデータに対するＰＲＯＣＥＳＳが終了した後に、セクタへのアクセスが可能になる。
【０１１３】
書き込み動作時のＰＲＯＣＥＳＳは、セクタアクセスへのデータ格納が終了してから開始する。
【０１１４】
なお、ランダムモードではセクタへのデータがまとまってからアクセスやプロセスが開始されるため、同一セクタへのアクセスとＰＲＯＣＥＳＳが同時進行することは無い。
【０１１５】
次に、上記仕様スケルトンを実現するメモリシステムの概要を説明する。このシステムは、Ｚｐの数をデータとして直接扱うシステムである。
【０１１６】
なお、前述の通り、メモリシステム外にあるＩＴ機器などバイナリでデータを取り扱う環境を「ｂｉｎａｒｙ  ｗｏｒｌｄ」と呼ぶことにする。これに対し、演算処理などバイナリのデータを取り扱う部分も含め、データをＺｐで取り扱うｐ−ａｄｉｃ  ＮＡＮＤフラッシュメモリシステム内の環境を「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」と呼ぶことにする。この場合、「ｂｉｎａｒｙ  ｗｏｒｌｄ」は、「ｐ−ａｄｉｃ  Ｚ２  ｗｏｒｌｄ」と呼ぶこともできる。
【０１１７】
図２は、メモリシステムの概念図である。このメモリシステムは、主に、データ（コード）を記憶する“ｐ−ａｄｉｃ  ＮＡＮＤ  ｃｅｌｌ”部分と、この“ｐ−ａｄｉｃ  ＮＡＮＤ  ｃｅｌｌ”部分に対する書き込みや読み出しの際のエラー処理を行う“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＆  ＥＣＣ”部分を有する。これら、“ｐ−ａｄｉｃ  ＮＡＮＤ  ｃｅｌｌ”部分や“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＆  ＥＣＣ”部分は、「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」に属する部分である。
【０１１８】
更に、このメモリシステムには、「ｂｉｎａｒｙ  ｗｏｒｌｄ」と「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」とのインタフェースとして、バイナリのデータをＺｐのデータに変換する“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部と、Ｚｐのデータをバイナリのデータに変換する“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部とを有する。
【０１１９】
メモリシステムの外部は「ｂｉｎａｒｙ  ｗｏｒｌｄ」であるので、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部によって、「ｂｉｎａｒｙ  ｗｏｒｌｄ」から入力されるバイナリデータが５０ビット毎に処理される。その後、これらデータは、ｐ−ａｄｉｃセルに記憶され、更に、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部によって５０ビット毎に「ｂｉｎａｒｙ  ｗｏｒｌｄ」に出力される。
【０１２０】
“ｐ−ａｄｉｃ  ＮＡＮＤ  ｃｅｌｌ”部分に記憶されたデータに対するＥＣＣは、リー・メトリック・コードをＺｐに適用することによって容易に行うことができる。本メモリシステムでは、“Ｌｅｅ  ｍｅｔｒｉｃ  ｃｏｄｅ  ＆  ＥＣＣ”部分を備えることで、このＥＣＣの処理も行うことができる。
【０１２１】
また、メモリシステムは、ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”部分と、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部を備えているため、ユーザは、メモリシステム内部の「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」を意識することなく、「ｂｉｎａｒｙ  ｗｏｒｌｄ」のままメモリシステムを扱うことができる。
【０１２２】
なお、“ｐ−ａｄｉｃ  ＮＡＮＤ  ｃｅｌｌ”部分に対するデータの書き込み及び読み出しはその閾値レベルとＺｐの要素を直接対応付けて扱うが、この対応付けの方法には２通りある。
【０１２３】
１つ目は、従来通りのＮＡＮＤ接続された多値記憶セル（以下、「ＮＡＮＤ  ＭＬＣ」と呼ぶ）へのデータの書き込み及び読み出しに対してインタフェースで対応する方法である。ＭＬＣが記憶するＺｐレベル（１〜ｐ−１）をＮＡＮＤ  ＭＬＣのページ等の情報として一旦変換する必要があるため、ＮＡＮＤ  ＭＬＣと周辺回路の「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」を仲介する部分にはロジック部分を持たせる必要がある。この方法の場合、ＭＬＣが記憶するＺｐの情報は複数のＮＡＮＤ  ＭＬＣのページ情報にまたがるので、データの転送に時間がかかる。
【０１２４】
２つ目は、Ｚｐレベルを物理量レベルとしてｐ−ａｄｉｃセルに直接書き込む方法である。この方法によれば、１つ目の方法に比べて、データの書き込み／読み出しの処理を高速にすることができる。
【０１２５】
本実施形態では、２つ目の方法を採用している。
【０１２６】
次に、前述したメモリシステムの仕様に適合するデータ転送と、内部のｐ−ａｄｉｃセルとの整合をとるためのインタフェース回路について説明する。
【０１２７】
本実施形態に係るメモリシステムの場合、データの処理結果は、全て、ページを構成するページレジスタ上に現れる。また、ｐ−ａｄｉｃセルは、このページレジスタとそのデータのやり取りを行う。したがって、このページレジスタをどのような構成にするかがデータ転送仕様のキーとなる。
【０１２８】
始めに、データインタフェースの仕様について、今一度確認しておく。
【０１２９】
（１）  メモリシステムのＩ／Ｏの転送速度は、１バイト／サイクルである。つまり、転送単位は１バイトとなる。
【０１３０】
（２）  ５０ビット分のバイナリデータを処理単位としてリー・メトリック・コードへの変換を行う。
【０１３１】
（３）  １セクタは、５１２バイトである。したがって、１セクタ分のバイナリデータの転送には、５１２サイクルを要する。
【０１３２】
（４）  １セクタ分のバイナリデータをリー・メトリック・コードに変換するためには８２ＰＲＯＣＥＳＳ要する。８２ＰＲＯＣＥＳＳによって処理できるバイナリデータは、８２×５０＝４１００ビットとなる。したがって、１セクタよりも４ビットだけ多く処理することになる。
【０１３３】
（５）  バイナリデータをｐ進数データに変換した場合、５０ビット当たり５５ビットに増大する。したがって、１セクタ当たり、８２×５５＝４５１０ビット分のレジスタが必要となる。
【０１３４】
（６）  ｐ進数データへの変換を経て、バイナリデータをリー・メトリック・コードに変換した場合、５０ビット当たり８０ビットに増大する。したがって、１セクタ当たり、８２×８０＝６５６０ビット（８２０バイト）分のレジスタが必要となる。
【０１３５】
続いて、上記（２）を考慮し、５０ビット毎のデータ処理を効率的に行えるようなレジスタ構成について説明する。
【０１３６】
データは、上記（１）より、１バイト／サイクルの速度で転送されるため、５０ビットのバイナリデータを転送するには、最低でも７サイクル必要になる。また、上記（６）より、５０ビットのバイナリデータをリー・メトリック・コードに変換した場合、そのサイズは８０ビットに増大する。
【０１３７】
ここで、５０ビットは５×１０ビット、８０ビットは８×１０ビットで表わすことができる。そこで、本実施形態に係るメモリシステムでは、１０×８のレジスタブロックをバイト単位の複数のレジスタで構成し、このように構成されたレジスタを用いたデータ処理を行う。これによって、メモリシステムにおける最適なレジスタ構成とデータ処理を実現することができる。なお、１０×８のレジスタブロックについては後述する。
【０１３８】
続いて、データ処理のフローについて、図３を参照しながら説明する。
【０１３９】
１レジスタブロックに対する５０ビットのバイナリデータの転送は、１０サイクルで実行される。
【０１４０】
したがって、データ転送のアドレス順が決まっている場合、１０サイクル毎に１ＰＲＯＣＥＳＳの処理が可能になる。ただし、ＰＲＯＣＥＳＳではＩ／Ｏ毎のデータがマージされて処理されるため、Ｉ／Ｏにマスクをかけて無効にした場合には、そのＩ／Ｏについては、固定されたデータがあるものとして処理される。
【０１４１】
一方、データ転送のアドレス順がランダムである場合、セクタを構成するレジスタのどこにデータが転送されるか判断できないため、１セクタ分のデータ転送の完了のコマンドを受けて、処理データの準備が完了したと判断し、ＰＲＯＣＥＳＳを開始する。
【０１４２】
ＰＲＯＣＥＳＳは、１０×８のレジスタブロックを後述する“Ｄ−ｒ”レジスタとみなし、この“Ｄ−ｒ”レジスタに対するオーバーライトを利用して処理される。
【０１４３】
始めに、“Ｄ−ｒ”レジスタに記憶された処理データをｈ＝５、δ＝１０  のバイナリデータ（第１のデータ）として、ｐ進数（第２のデータ）に変換される（図３中Ｓ１）。続いて、ｐ進数に変換されたデータは“Ｄ−ｒ”レジスタに上書きされる（図３中Ｓ２）。続いて、“Ｄ−ｒ”レジスタに記憶されているｐ進数データに対して生成行列Ｇを掛けてリー・メトリック・コード（第３のデータ）に変換する（図３中Ｓ３）。最後に、このリー・メトリック・コードを、“Ｄ−ｒ”レジスタに上書きする（図３中Ｓ４）。
【０１４４】
これによって、“Ｄ−ｒ”レジスタとしての１０×８の８０ビットのレジスタブロックのレジスタに記憶されていた１ＰＲＯＣＥＳＳ分のバイナリデータは、リー・メトリック・コードに変換された上で、同一のレジスタブロックに上書きされて記憶される。
【０１４５】
以上のＰＲＯＣＥＳＳシーケンスを繰り返しによって、５１２バイトあるセクタのデータを、８２ＰＲＯＣＥＳＳで処理する。なお、８２ＰＲＯＣＥＳＳで処理できるデータ量は、５１２バイトに対して４ビット多くなるため、４ビットの固定ダミービットを付加して処理を行うことになる。
【０１４６】
次に、レジスタブロックの構成と、バーストデータ転送の関係を説明する。
【０１４７】
図４は、セクタレジスタを構成する最初のレジスタブロックを示す図である。
【０１４８】
１個のレジスタブロックは８０個のビットレジスタからなりこのうち図４中ａで示した８×５のレジスタ群に１〜５サイクル目の転送データが保持される。
【０１４９】
６〜１０サイクル目の転送データは、８×５のレジスタ群の下側に並列に配置された図４中ｂで示したレジスタ群に保持される。６〜１０サイクル目の転送データの一部は、図４に示す最初のレジスタブロックに保持される１ＰＲＯＣＥＳＳ分のデータの一部を構成し、その他は、次のレジスタブロックに保持される１ＰＲＯＣＥＳＳ分のデータの一部を構成する。
【０１５０】
入力されるバイトデータの転送の走査は、図４中破線矢印で示すように、波状に進行する。つまり、最初の１０サイクルの転送データによって、最初のレジスタブロックのデータが確定し、その後、データ処理が可能になる。
【０１５１】
また、サイクルを跨いで転送されたバイトデータは、処理上はマージされるため、バイトデータのビット毎に用いられるサイクル数が異なることが分かる。図４の場合、バイトデータのうち、最初の２ビットは１０サイクル、残りの６ビットは５サイクル分のデータとなっている。
【０１５２】
次に、データ書き込み時のセクタレジスタにおけるデータ処理の過程について、図５を参照しながら説明する。
【０１５３】
図５は、左から順に、バイナリデータのバースト転送のセクタレジスタの様子（図５中Ｓ１）、ｐ進数変換後のセクタレジスタの様子（図５中Ｓ２）、リー・メトリック・コード変換後のセクタレジスタの様子（図５中Ｓ３）を示している。なお、図５中の破線は、８ビット毎のバイトレジスタの境界を示している。
【０１５４】
セクタレジスタは、８２０個のレジスタを８列並べた構成となっており、８２０行で１０２．５バイトのデータ転送の受け口を持つ。８列のうち、１〜５列目をデータ転送で利用し、残りの６〜８列目をデータ転送後の処理データの保持に利用する。
【０１５５】
図５中Ｓ１では、レジスタブロックに対し、５１２サイクル掛けて１ＰＲＯＣＥＳＳ分のバイナリデータが転送される。始めに、５１２サイクルで転送されるバイナリデータのうち、最初の１〜５１０サイクル目に転送されるバイナリデータは、５サイクル毎に、１〜５行目のバイトレジスタに順に格納される。５１０サイクル目に転送されるバイナリデータの格納が完了した時点では、８２０行のうち１〜８１６行のレジスタはデータが埋まる。
【０１５６】
続く、５１１、５１２サイクル目に転送されるデータは、それぞれ４ビットずつに分割された上で、図５中Ｓ１下図に示すように、それぞれ８１７〜８２０行目の１〜４列目のレジスタに保持される。なお、８１７〜８２０行目の５列目のレジスタには、４ビットの固定されたダミーデータが格納される。
【０１５７】
以上によって、セクタレジスタには、１０桁の２５進数のｈ＝５、δ＝１０に相当する５０ビットのバイナリデータが８２ＰＲＯＣＥＳＳ分格納されることになる。
【０１５８】
図５中Ｓ２では、５０ビットのバイナリデータが１１桁のｐ（＝１７）進数である５５ビットのデータに変換されセクタレジスタに上書きされる。このＰＲＯＣＥＳＳはレジスタ１０行毎に行われる。変換されたｐ進数のデータは、各１０行８列のレジスタブロックのうちの５５ビットに格納される。セクタレジスタは、８２０行８列のレジスタからなり、１ＰＲＯＣＥＳＳで１０行ずつデータが上書きされることになるため、８２ＰＲＯＣＥＳＳで全てのセクタレジスタはｐ進数データで埋められることになる。
【０１５９】
以上で、図５中Ｓ１、Ｓ２によって、１セクタにおけるバイナリデータからｐ進数データへの変換が完了する。
【０１６０】
図５中Ｓ３では、ｐ進数データをリー・メトリック・コードに変換する。
【０１６１】
リー・メトリック・コードは、ｐ−１（＝１６）個のＺｐの要素を成分とするデータとなる。１ＰＲＯＣＥＳＳ分のリー・メトリック・コードは、５５ビットのｐ進数データに対してＧ行列を掛けて得られる８０ビットのデータであり、この１ＰＲＯＣＥＳＳ分のリー・メトリック・コードは、１０行８列のレジスタブロック１つに上書き格納される。この場合、８２ＰＲＯＣＥＳＳで１セクタレジスタ全体がリー・メトリック・コードで満たされることになる。これによって、セクタレジスタには、ｐ−ａｄｉｃセル１６４バイト個に書き込むためのデータが保持される。
【０１６２】
以上、図５中Ｓ１〜Ｓ３に示す３段階の処理は、１０行８列のレジスタブロック毎に順時進行して行く。
【０１６３】
なお、セクタレジスタへのデータ転送には、前述の通り、高速モードとランダムモードがある。高速モードの場合、転送されて来たバイナリデータは、セクタレジスタの先頭から順に埋められていく。したがって、高速モードでは、１０行８列のレジスタブロックに１ＰＲＯＣＥＳＳ分のバイナリデータが格納された時点でＰＲＯＣＥＳＳをシリアルに順時実行することができる。
【０１６４】
一方、ランダムモードの場合、バースト長毎に先頭アドレスを指定してデータの格納場所を設定できると共に、インタリーブとラップアラウンドの２つのアドレッシングモードを選択することができる。この場合、レジスタブロックにはデータが格納されていない領域が飛び飛びに発生することになる。したがって、ランダムモードでは、セクタレジスタへのバイナリデータ格納完了を示すコマンドを待って、ＰＲＯＣＥＳＳを開始するなどの制御が必要となる。
【０１６５】
このように、本実施形態に係るメモリシステムでは、バイナリデータ（第１のデータ）からｐ進数データ（第２のデータ）への変換の際とｐ進数データ（第２のデータ）からリー・メトリック・コード（第３のデータ）への変換の際の２回、セクタレジスタに対するデータの上書きが実行される。
【０１６６】
因みに、従来のメモリシステムの場合、バイナリデータからｐ進数データへの変換に相当する処理がなく、バイナリデータを直接リード・ソロモン（Ｒｅｅｄ−Ｓｏｌｏｍｏｎ）等を用いたコードに変換していたため、レジスタに対する上書きはせいぜい１回となる。
【０１６７】
次に、データ読み出し時のセクタレジスタにおけるデータ処理の過程について、図６を参照しながら説明する。
【０１６８】
図６中Ｓ１では、ｐ−ａｄｉｃセルアレイの１６４バイト個のｐ−ａｄｉｃセルに記憶されたデータが、８２ＰＲＯＣＥＳＳ分の８２０バイトのセクタレジスタに読み出される。
【０１６９】
セクタレジスタに格納されたデータは、１０行８列のレジスタブロックに格納された１ＰＲＯＣＥＳＳ分のデータ毎に、セクタレジスタの端からＥＣＣによる計算処理を受け、エラーが訂正できるものは訂正され、できないものはそのままにされる。そして８２ＰＲＯＣＥＳＳによって１セクタ全てのデータに対するＥＣＣ処理が完了し、リー・メトリック・コードが復元される。
【０１７０】
図６中Ｓ２では、図６中Ｓ１において復元されたリー・メトリック・コードが順次ｐ進数データに変換される。ここでは、１セクタ分のリー・メトリック・コードは、１ＰＲＯＣＥＳＳ分の８０ビット毎に生成行列Ｇの逆変換が行われ、５ビットの１１桁で表されるｐ進数データに変換された上で、各レジスタブロックに上書きされる。
【０１７１】
図６中Ｓ３では、図６中Ｓ２において生成されたｐ進数データが２５進数のバイナリデータに変換される。「ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ」部分では、１ＰＲＯＣＥＳＳ分のｐ進数データを５ビット１０桁の５０ビットのバイナリデータへと変換した上で、このバイナリデータを１０行８列のレジスタブロックの単位で上書きしていく。
【０１７２】
その後、バイナリデータは８行５列のレジスタ群毎に、１バイト／サイクルの速度で列順に読み出され、１セクタ分のデータとして出力される。なお、セクタレジスタからの最後の２サイクル分のデータ読み出しについては、図６中Ｓ３下図に示すように、データ書き込み時と同様、４ビット２列のバイナリデータをバイトデータとして１サイクルで読み出される。
【０１７３】
なお、高速アクセスモードではセクタレジスタの先頭からデータが読み出されるため、１ＰＲＯＣＥＳＳの処理のレイテンシでセクタレジスタのデータを順次読み出すことができる。一方、ランダムモードではセクタ内のバーストの先頭が予め分かっているわけではないため、セクタレジスタに１セクタ分のバイナリデータが再現される８２ＰＲＯＣＥＳＳの終了後に初めてアクセスすることができる。
【０１７４】
このように、本実施形態に係るメモリシステムでは、ＥＣＣ処理後に実行されるリー・メトリック・コード（第３のデータ）からｐ進数データ（第２のデータ）への変換の際とｐ進数データ（第２のデータ）からバイナリデータ（第１のデータ）への変換の際の２回、セクタレジスタに対するデータの上書きが実行される。
【０１７５】
因みに、従来のメモリシステムの場合、リー・メトリック・コードからｐ進数データへの変換に相当する処理がないため、レジスタに対する上書きはせいぜい１回であった。
【０１７６】
＜ｐ−ａｄｉｃセルへのＺｐの要素の割り付け＞
次に、ｐ−ａｄｉｃセルに対してリー・メトリック・コードＣ＝（ｃ１，ｃ２，・・・，ｃ１６）の各コードｃｊを記憶する際に最適な、ｐ−ａｄｉｃセルのレベルに対するＺｐの要素の割り付けについて説明する。
【０１７７】
本実施形態では、図７に示すように、ｐ−ａｄｉｃセルの最下位レベルから、０、１、・・・、１６のようにＺｐの要素を連続的に割り付ける。この場合、エラーの量と、レベルの変化量とが比例することになる。
【０１７８】
ｐ＝１７の場合、ｐ−ａｄｉｃセルに必要なレベル数は１７であり、これら１７段階のレベルの境界（閾値）数は１６となる。
【０１７９】
また、ε＝４の場合、１セルのみでエラーが生じた場合は、図７中の太い矢印で示す範囲のレベルの誤認識に対してエラーの訂正が可能となる。但し、エラーは、隣接レベルの範囲内の誤認識によって生じることが主である。
【０１８０】
つまり、本実施形態に係るメモリシステムは、図７に示す割り付け方によって、実質的に１６セル中４セルのエラー訂正を実現する強力なエラー訂正能力を持つことができる。
【０１８１】
＜データの読み出し／書き込み＞
次に、ｐ−ａｄｉｃセルアレイに対するデータの書き込み／読み出し方法の一例を図８を参照しながら説明する。なお、ここでいう「ｐ−ａｄｉｃセルアレイ」とは、ｐ−ａｄｉｃセルとして浮遊ゲート型トランジスタを用い、複数のｐ−ａｄｉｃセルをＮＡＮＤ接続してなるセルアレイを意味している。
【０１８２】
ここで、予め、図８に示す各記号の意味について説明しておく。
【０１８３】
ｐ＝１７の場合、リー・メトリック・コードのコード成分は１６個となる。これら各コードをｃ１〜ｃ１６とする。各コードｃは、５ビットからなるバイナリｈで表わすことができる。また、バイナリｈの最下位ビットから最上位ビットの各ビットをＣｊ０〜Ｃｊ４とする。
【０１８４】
データ書き込み／読み出しの際、データ書き込み部或いはデータ読み出し部の一部として機能するロウデコーダ／ワード線ドライバ（Ｒｏｗ  Ｄｅｃ．／ＷＬＤｒｉｖｅｒ）から供給される書き込み電圧／読み出し電圧によってワード線ＷＬのレベルは１７段階に変化する。このときのワード線ＷＬのレベルを示す信号をΔ１〜Δ１７とする。また、ビットＸを反転させたものを‘／’を付加し、‘／Ｘ’で表わす。
【０１８５】
始めに、ｐ−ａｄｉｃセルに対するデータの書き込みについて説明する。
【０１８６】
ｐ−ａｄｉｃセルとなるＮＡＮＤセルの閾値は、ワード線ＷＬとビット線ＢＬ間に一定の電圧をかけて浮遊ゲートに注入される電子の量によって設定する。
【０１８７】
データ書き込みの際、ワード線ＷＬの電位は、１６段階で上昇していく。一方、ビット線ＢＬは、一定電源Ｖｓｓに接続されており、ｐ−ａｄｉｃセルが所望の閾値になった時点で、一定電圧Ｖｓｓから切り離されるフローティング状態になる。これによって、浮遊ゲートに電圧が印加されることはなく、浮遊ゲートに対する余計な電子の注入を回避することができる。
【０１８８】
本実施形態では、この方法を用いてコードを構成する成分に対応するｐ−ａｄｉｃセルに対して一括に閾値の設定を行なう。コード成分ｃ１〜ｃ１６にはＺｐの要素が対応しているので、これをバイナリで表現する。ｐ−ａｄｉｃセルのレベルとなる閾値には、最低の閾値にＺｐの要素０を割り付け、以降、低い方からＺｐの要素を昇順に割り付ける。ここで、各ＺｐのレベルＬに対応した閾値区分の上限をＬ、この閾値に対応した電子量を注入するためのワード線ＷＬのレベルをＷＶＬ、このワード線のレベルＷＶＬを発生させる信号をΔＬとする。
【０１８９】
ｐ−ａｄｉｃセルの消去状態を閾値の一番低い状態とすると、Ｚｐの成分０を書き込むべきｐ−ａｄｉｃセルの閾値は変化させる必要はないが、Ｚｐの他の成分を書き込むべきｐ−ａｄｉｃセルの閾値は変化させる必要がある。
【０１９０】
そこで、本実施形態では、ｐ−ａｄｉｃセルの閾値を変化させるために、ワード線ＷＬの電圧を低い側から順次上げていき、浮遊ゲートに電子を注入していく。その際、ワード線ＷＬの電圧がｐ−ａｄｉｃセルに設定すべき閾値に対応する電圧以上になった場合、上記の通り、そのｐ−ａｄｉｃセルに接続されるビット線ＢＬをフローティング状態にして、余計な電子注入が生じないようにする。この制御を行なうのが図８中ａで示すプログラム設定回路である。
【０１９１】
プログラム設定回路は、ビット線ＢＬを電圧Ｖｓｓに接続するためのＮＭＯＳトランジスタＱＮ１を有する。このトランジスタＱＮ１のゲートは、後述する制御信号／ｐで制御されるＮＭＯＳトランジスタＶｃｃを介して一定電圧Ｖｃｃに接続される。また、トランジスタＱＮ１のゲートは、Ｚｐの各要素に対応した並列に並ぶ１６のパスを介して電圧Ｖｓｓに接続される。これら１６のパスは、それぞれ５つのＮＭＯＳトランジスタを直列接続させた回路となっている。各パスは、／Ｃｊ０∧／Ｃｊ１∧／Ｃｊ２∧／Ｃｊ３∧／Δ１、Ｃｊ０∧／Ｃｊ１∧／Ｃｊ２∧／Ｃｊ３／Δ２、・・・、Ｃｊ０∧Ｃｊ１∧Ｃｊ２∧Ｃｊ３∧Δ１６の場合に導通するようになっている。
【０１９２】
データ書き込みの際、ワード線のレベルは、ＷＶ０からＷＶ１６へと変化するが、この際、プログラム設定回路は、ワード線のレベルに応じて、ビット線ＢＬを電圧Ｖｓｓに接続するか、電圧Ｖｓｓから切り離してフローティング状態にするかを制御する。
【０１９３】
すなわち、ワード線のレベルがＷＶＬの時、つまり信号ΔＬがアクティブになっている時、Ｌ−１を設定すべきｐ−ａｄｉｃセルに接続されたビット線ＢＬを電圧Ｖｓｓから切り離す。これによって、そのｐ−ａｄｉｃセルの閾値はＬ−１の区分に設定されることになる。ビット線ＢＬと電圧Ｖｓｓとの切り離しは、トランジスタＱＮ１で制御される。このトランジスタＱＮ１のゲートのノードｎ１は、最初、信号／ｐによって制御されるトランジスタＱＰ１を介してプリチャージされている。そして、コード成分を表すビットの情報Ｃｊ０〜Ｃｊ３とワード線のレベルを表す信号Δ１〜Δ１６によるデコード結果によって、ノードｎ１を放電する。これによって、トランジスタＱＮ１がオフし、ビット線ＢＬはフローティング状態となる。なお、Ｚｐの要素１６を書き込むべきｐ−ａｄｉｃセルに関しては、ノードｎ１を放電させる必要がなく、Ｚｐの要素０〜１５をデコードできれば良いため、Ｃｊ０〜Ｃｊ３の４ビットの情報を用いれば良い。
【０１９４】
このプログラム設定回路は、同一のワード線ＷＬに属し、コードの異なる成分に対応するｐ−ａｄｉｃセルに接続されたビット線ＢＬ毎に設けても良い。この場合、ワード線ＷＬの電圧を順次上昇させていくことによって、ｐ−ａｄｉｃセルは、コード成分のＺｐに対応する閾値レベルに設定される。
【０１９５】
また、ｐ−ａｄｉｃセルに対する正確な閾値レベルの設定のために、ワード線のレベルの変化の際に、ｐ−ａｄｉｃセルの閾値の状態を検証するベリファイ読み出し動作を入れても良い。
【０１９６】
続いて、ｐ−ａｄｉｃセルからのデータの読み出しについて説明する。
【０１９７】
データ読み出しの際に、ｐ−ａｄｉｃセルに流れる電流Ｉｃｅｌｌから、ｐ−ａｄｉｃセルのレベルを検知するのが、ビット線ＢＬの一旦に設けられたセンスアンプ部ｔ−ＳＡである。
【０１９８】
センスアンプ部ｔ−ＳＡは、参照電流Ｉｒｅｆとセル電流Ｉｃｅｌｌを比較するセンスアンプｓａ、このセンスアンプｓａによる最新の比較結果を保持するラッチＬ１、センスアンプｓａの１つ前の比較結果を保持するラッチＬ２、ラッチＬ１とラッチＬ２の結果からセンスアンプｓａの比較結果の変化を検知するＸＯＲゲートＧ１、並びに、ｐ−ａｄｉｃセルがＺｐの１６に対応した閾値に変化したかを検知するＸＯＲゲートＧ２からなる。このＸＯＲゲートＧ２の出力がセンスアンプ部ｔ−ＳＡの出力Ｚとなる。
【０１９９】
参照電流Ｉｒｅｆは、閾値レベルの区分の上限とその閾値レベルに対応するワード線ＷＬの電圧をｐ−ａｄｉｃセルに印加したときのセル電流よりも少し大きな電流に設定しておく。
【０２００】
センスアンプ部ｔ−ＳＡのセンスアンプｓａは、参照電流Ｉｒｅｆとセル電流Ｉｃｅｌｌを比較して、セル電流Ｉｃｅｌｌが大きい場合に、ラッチＬ１に対して‘１’を出力する。ワード線ＷＬの電圧は、ＷＶ１〜ＷＶ１６の範囲で順次変化させるが、ワード線のレベルがＷＶＬで‘０’、ＷＶＬ＋１で‘１’の場合にのみｐ−ａｄｉｃセルの閾値レベルは区分がＬとなっており、ｐ−ａｄｉｃセルは、Ｚｐの要素Ｌを保持していることになる。
【０２０１】
センスアンプｓａによる比較結果は、２つのラッチＬ１とＬ２に順次転送される。これらラッチＬ１及びＬ２の内容が異なる場合、センスアンプ部ｔ−ＳＡの出力はＺ＝‘１’となる。これによって、ワード線のレベルＷＶＬからｐ−ａｄｉｃセルに書き込まれた閾値の状態を判別することができる。
【０２０２】
なお、ワード線のレベルがＷＶ１の時に、既にＺ＝‘１’の場合、ｐ−ａｄｉｃセルの閾値は区分０以下であることを判別する必要がある。また、ワード線のレベルがＷＶ１６の時に、Ｚ＝‘０’ならｐ−ａｄｉｃセルの閾値は区分１６以上であることを判別する必要がある。そこで、これらの判断ができるように、ラッチＬ１、Ｌ２の初期状態を‘０’に設定し、更に信号Δ１６の後に信号Δ１７を発生させる。これによって、センスアンプ部ｔ−ＳＡの出力がＺ＝‘１’になった際の信号ΔＬからｐ−ａｄｉｃセルの閾値のレベルがＬ−１であるとの判断が可能になる。
【０２０３】
各ビット線ＢＬにぶら下がるＣｊ０〜Ｃｊ４を保持する５ビットのレジスタについて説明する。
【０２０４】
レジスタは、ビット毎に図８中ｂのような回路を有する。つまり、レジスタは、ビット毎に、２つのインバータからなるフリップフロップＦＦ、このフリップフロップＦＦの一端のノードｎ２を入力とするインバータＩＶ１、ノードｎ２の電圧を放電するための２つの直列接続されたＮＭＯＳトランジスタＱＮ２、ＱＮ３、並びに、フリップフロップＦＦの他端のノードｎ３の電圧を放電するためのトランジスタＱＮ４からなる。この構成によって、ノードｎ２は、／ｒｊ、インバータＩＶ１の出力がｒｊとなる。また、ノードｎ２は、ｊ∧Ｚ＝‘１’の場合に電圧Ｖｓｓに接続され、ノードｎ３は、ＲＳ＝‘１’の場合に電圧Ｖｓｓに接続される。
【０２０５】
図８に示す“Ｚｐ→ｈ  ｄｅｃ”回路ブロックは、信号Δ１〜Δ１７を０〜１６の５ビット表示に変換するデコーダである。
【０２０６】
図８中ｂで示すレジスタは、この“Ｚｐ→ｈ  ｄｅｃ”回路ブロックが出力するバイナリ信号Ｃｊ０〜Ｃｊ４の配線とセンスアンプ部ｔ−ＳＡの出力Ｚの配線との各交点に配置されている。これによって、センスアンプ部ｔ−ＳＡが出力するＺが５つのレジスタによって保持される。この場合、これら５つのレジスタが保持するデータは、コード成分ｃのバイナリ表示として利用することができる。
【０２０７】
また、これらのレジスタは、データ書き込み／読み出し時の制御に利用することができる。例えば、データ書き込みの際、これらのレジスタに設定するコードの成分のバイナリ表示を格納しておけば、プログラム設定回路でベリファイを行い、ビット線ＢＬをフローティング状態にするなどの制御に利用できる。
【０２０８】
続いて、ロウデコーダ／ワード線ドライバからワード線ＷＬに供給される書き込み電圧／読み出し電圧の設定について説明しておく。
【０２０９】
同時にアクセスするｐ−ａｄｉｃセルの全てについてｐ−ａｄｉｃセルのレベルとコードの値の対応付けは同時にされるため、ワード線ＷＬを、全ての電圧ＷＶ０〜ＷＶ１６についてスキャンする必要がある。
【０２１０】
図９は、ワード線ＷＬの電圧を順に上げたり下げたりするスキャンの例である。
【０２１１】
データ書き込み（Ｗｒｉｔｅ）では、ｐ−ａｄｉｃセルの閾値を順に上げるしか変化の方法がないため、ワード線の電圧は、低電圧側から高電圧側へと変化させる。一方、データ読み出し（Ｒｅａｄ）では、上記の通り、スキャン中に全てのレベルを移動すれば良い。
【０２１２】
図９の場合、スキャン１では、ワード線レベルはＷＶ０からＷＶ１６に上昇するため、上昇に先立ちコードデータＣをレジスタに設定してデータ書き込みをすることができる。また、データ読み出しの場合、スキャン１が終了した時点で、コードデータが確定しているため、データの読み出しをすることができる。
【０２１３】
スキャン１終了後に、データ書き込みをする場合は、スキャン２の点線で示すように、ワード線電圧を再びＷＶ０に戻し、ＷＶ１６まで順次上昇させていく必要がある。一方、データ読み出しをする場合は、スキャン２の点線で示すように、ワード線電圧を順次上昇させていっても、実線で示すように、スキャン１に続き、順次下降させても良い。スキャン２が終了した時点で、コードデータは確定しているため、スキャン１終了時点と同様、データの読み出しをすることができる。
【０２１４】
スキャン１とスキャン２でワード線ＷＬに属する全てのｐ−ａｄｉｃセルにアクセスする場合、これらのスキャン１及び２で異なるワード線ＷＬを選択する必要があるが、センスアンプ部ｔ−ＳＡを複数のビット線ＢＬで共用した場合など、同じワード線ＷＬに属するｐ−ａｄｉｃセルをシリアルに読み出す場合、スキャン１及び２で同じワード線ＷＬを選択することもできる。
【０２１５】
＜バイナリデータから１７進数への変換＞
次に、本実施形態に係るメモリシステムの入口と出口において必要となるバイナリとｐ進数（１７進数）との変換回路について説明する。
【０２１６】
図１０は、ｐ＝１７とした場合の「ｂｉｎａｒｙ  ｗｏｒｌｄ」のδ桁の２ｈ進数Ｄ（ｄ０，ｄ１，・・・，ｄδ−１）から「ｐ−ａｄｉｃ  Ｚｐ  ｍｏｄ  ｐ  ｗｏｒｌｄ」のδ＋１桁のｐ進数Ｄ（ａ０，ａ１，・・・，ａδ−１，ａδ）への変換計算の過程の構成を模式的に示した図である。
【０２１７】
なお、図１０に示す“５  ｒｅｓ”と示した四角は、入力されたバイナリデータを１７で割り、商と剰余を求める演算回路である。この演算回路の入力は６ビットのバイナリデータであり、出力はこのバイナリデータを１７で割った剰余となる。また、入力されたバイナリデータが１７以上の場合、商をキャリーＣとして出力する。以下、この演算回路素子を“５  ｒｅｓ”回路ブロックと呼ぶ。
【０２１８】
始めに、第０ステップ（図１０中Ｓ０）では、１０桁の２５進数のデータＤ（ｄ０，ｄ１，・・・，ｄ９）に対して最右側のｄ９側から１７の数え上げを行う。ここでは、ｄ９に対して、“５  ｒｅｓ”回路ブロックに入力された６ビットのバイナリデータの最上位ビットに０を入れてｄ９を１７で割った剰余と共に商であるキャリーＣ１４５を直接生成する。
【０２１９】
続いて、５〜１ビット目が先の“５  ｒｅｓ”回路ブロックの出力（５ビットで表現された剰余）、０ビット（最下位ビット）目がｄ８の最上位ビットＤ８４（＝Ｄ３９）である６ビットのバイナリデータを入力とする次の“５  ｒｅｓ”回路ブロックによって、入力されたバイナリデータを１７で割った剰余と共に商であるキャリーＣ１４４を作る。
【０２２０】
以降、“５  ｒｅｓ”回路ブロックに入力される６ビットのバイナリデータのうちの０ビット目がｄ０の最下位ビットＤ００（＝Ｄ０）になるまで、４６個の“５  ｒｅｓ”回路ブロックを用いてキャリーＣ１０〜Ｃ１４５を生成する。これら生成されたキャリーＣ１０〜Ｃ１４５によって表現されるバイナリデータは、データＤに含まれる１７の個数になっている。
【０２２１】
そして、ｄ０を入力とする“５  ｒｅｓ”回路ブロックの出力が、１１桁の１７進数Ｄ（ａ０，ａ１，・・・，ａ１０）のうち、ａ０のバイナリ表示になる。
【０２２２】
続いて、第１ステップ（図１０中Ｓ１）では、第０ステップで得られたデータＤに含まれる１７の個数に対して、更に１７がいくつ含まれるかを計算して１７２の個数を求め、１７進数Ｄの重み１７１の桁の係数ａ１のバイナリを求める。
【０２２３】
第１ステップでは、キャリーＣ１０〜Ｃ１４５に対して最右側のＣ１４５側から１７の数え上げを行う。キャリーＣ１４１〜Ｃ１４５に対する１７の数え上げに際しては、６ビットの入力バイナリデータの最上位ビットに０を入れて入力バイナリデータを１７で割った剰余と共にキャリーＣ２４１を直接生成する。
【０２２４】
続いて、５〜１ビット目が先の“５  ｒｅｓ”回路ブロックの出力（５ビットで表現された剰余）、０ビット（最下位ビット）目がＣ１４０である６ビットのバイナリデータを入力とする次の“５  ｒｅｓ”回路ブロックによって、入力されたバイナリデータを１７で割った剰余と共に商であるキャリーＣ２４０を生成する。
【０２２５】
以降、“５  ｒｅｓ”回路ブロックに入力される６ビットのバイナリデータのうちの０ビット目がＣ１Ｘの最下位ビットＣ１０になるまで、４１個の“５  ｒｅｓ”回路ブロックを用いてキャリーＣ２０〜Ｃ２４１を生成する。これら生成されたキャリーＣ２０〜Ｃ２４１によって表現されるバイナリデータは、データＤに含まれる素数１７２の個数になっている。
【０２２６】
そして、Ｃ１０を入力とする“５  ｒｅｓ”回路ブロックの出力が、１１桁の１７進数Ｄ（ａ０，ａ１，・・・，ａ１０）のうち、ａ１のバイナリになる。
【０２２７】
続く第２ステップ（図１０中Ｓ２）では、第１ステップで得られたデータＤに含まれる１７２の個数に対して、更に素数ｐがいくつ含まれるかを計算して１７３の個数を求め、１７進数Ｄの重み１７２の桁の係数ａ２のバイナリを求める。
【０２２８】
以降、同様にｐ進数の重み１７１０の桁の係数ａ１０のバイナリ表示を求める第１０ステップ（図１０中Ｓ１０）まで行う。
【０２２９】
なお、第１０ステップのキャリーＣ１１０〜Ｃ１１５は計算には使用しない。
【０２３０】
次に、“６  ｂｉｔ  ｍｏｄ  ｐ”回路ブロックを用いた“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部の構成について考える。ここで、“６  ｂｉｔ  ｍｏｄ  ｐ”回路ブロックとは、６ビットのバイナリデータである入力Ａと、素数１７を比較し、Ａが１７以上の場合にＰＦ０＝‘１’を出力すると共に、Ａの素数１７による剰余Ｑを出力する回路である。詳細については後述する。
【０２３１】
図１１中（Ａ）は、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部の第ｋステップの回路を、“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックを用いて構成したものである。
【０２３２】
ここでは、データを１０桁の２５進数表現にした場合の第ｊ桁目をｄｊとする。この場合、ｄｊは５ビットのバイナリで表示できるが、この表示の係数Ｄを他のｄの係数Ｄと共通に表現するために、数２４に示すようにサブインデックスを用いる。
【０２３３】
［数２４］
0005204186.tif 000025
【０２３４】
また、第ｋステップの演算の入力である前ステップ（第ｋ−１ステップ）のキャリーはＣｋ０〜Ｃｋ５（１０−ｋ）＋ｋ−１であり、サブインデックスを２の累乗の指数とする２進数としての係数となっていて、この２進数によって表現される数がデータに含まれる１７ｋの個数となる。
【０２３５】
第ｋステップでは、図１１中（Ａ）に示すように、入力は５（１０−ｋ）＋ｋ個のバイナリ（キャリーＣｋ０〜Ｃｋ５（１０−ｋ）＋ｋ−１）であり、これを５（１０−（ｋ＋１））＋ｋ＋１個の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックで受ける。
【０２３６】
１つ目の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロック＜１＞は、入力バイナリＡ０〜Ａ４、Ａ５に、それぞれＣｋ５（１０−ｋ）＋ｋ−５〜Ｃｋ５（１０−ｋ）＋ｋ−１、０を入力し、出力Ｑ０〜Ｑ４、キャリーＰＦ０から、それぞれＲ５（１０−（ｋ＋１））＋ｋ０〜Ｒ５（１０−（ｋ＋１））＋ｋ４、Ｃｋ＋１５（１０−（ｋ＋１））＋ｋを出力する。
【０２３７】
図示しない２つ目の“６  ｂｉｔ  ｍｏｄ  ｐ”回路ブロック＜２＞は、入力バイナリＡ０、及びＡ１〜Ａ５にそれぞれキャリーＣｋ５（１０−（ｋ＋１））＋ｋ−１、及び１つ目の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロック＜１＞の出力Ｒ５（１０−（ｋ＋１））＋ｋ０〜Ｒ５（（１０−（ｋ＋１））＋ｋ４を入力し、出力Ｑ０〜Ｑ４、及びキャリーＰＦ０から、それぞれＲ５（１０−（ｋ＋１））＋ｋ−１０〜Ｒ５（１０−（ｋ＋１））＋ｋ−１４、及びＣｋ＋１５（１０−（ｋ＋１））＋ｋ−１を出力する。
【０２３８】
以降、図１１中（Ａ）に示すように、同様の入出力を持つ“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックが、合計５（１０−（ｋ＋１））＋ｋ＋１個並び、各“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックから出力されるキャリーＣｋ＋１０〜Ｃｋ＋１５（１０−（ｋ＋１））＋ｋが、次のステップである第ｋ＋１ステップの入力となる。
【０２３９】
このように、バイナリからｐ進数への変換は、図１１中（Ｂ）に示す模式図のように、キャリーＣの最上位ビット側から順次実行される。
【０２４０】
図１１中（Ａ）は、第ｋステップに関係する回路構成であるが、各ステップを時分割で処理することで、図１１中（Ａ）に示す回路構成を各ステップで使い回すことができる。この場合、各“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックの入出力を単純なオン／オフによって制御可能にするために、“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックの必要数が最大となる第０ステップの回路構成に、更に、１０個の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックが付加される。
【０２４１】
この様に構成された５６個の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックからなる回路を図１２に示す。以下において、この回路を“Ｘ  ｔｏ  ｐ”回路ブロックと呼ぶ。
【０２４２】
図１３に示すように、この“Ｘ  ｔｏ  ｐ”回路ブロックの入力は、図１２中（Ａ）においてｋ＝０とした場合よりも１０個多く、Ｃ００〜Ｃ０５９の合計６０個となっている。また、出力は、５個おきの“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックから出力される１１個の５ビットのバイナリＲ００〜Ｒ０４、Ｒ５０〜Ｒ５４、・・・、Ｒ４５０〜Ｒ４５４、Ｒ５００〜Ｒ５０４と、次のステップの入力となる５５個のキャリーＣ１０〜Ｃ１５５となる。
【０２４３】
次に、図１０に示した“５  ｒｅｓ”回路ブロックである“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックについて具体的に説明する。
【０２４４】
図１４は、“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックの回路記号を示す図である。“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックは、６ビットのバイナリＡ０〜Ａ５を入力し、５ビットのバイナリＱ０〜Ｑ４及びキャリーＰＦ０を出力する。
【０２４５】
“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックは、入力バイナリＡの素数１７による剰余Ｑを出力すると共に、入力バイナリＡが１７以上の場合にＰＦ０から‘１’、１７未満の場合にＰＦ０から‘０’を出力する。
【０２４６】
ここで、ｈ＝５、ｐ＝１７の場合、バイナリＡ、バイナリＱ、素数ｐの間には、数２５に示す関係が成立する。
【０２４７】
［数２５］
0005204186.tif 000026
【０２４８】
図１５は、“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックの回路図である。
【０２４９】
“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックは、ＰＦ０生成部Ｕ１、２個の半加算器（Ｈａｌｆ  ａｄｄｅｒ）ＨＡ１、ＨＡ２、及び３個の全加算器（Ｆｕｌｌ  ａｄｄｅｒ）ＦＡ１〜ＦＡ３を有する。
【０２５０】
ＰＦ０生成部Ｕ１は、所定の電圧が供給されるＶｃｃ端子と、接地電圧が供給されるＶｓｓ端子との間に、直列に接続されたＰＭＯＳトランジスタＱＰ１〜ＱＰ５及びＮＭＯＳトランジスタＱＮ１〜ＱＮ２を有する。これらトランジスタＱＰ１、ＱＰ２、ＱＰ３、ＱＰ４、ＱＰ５、ＱＮ１、及びＱＮ２は、それぞれＡ０、Ａ１、Ａ２、Ａ３、Ａ５、Ａ０、及びＡ４で制御される。
【０２５１】
また、ＰＦ０生成部Ｕ１は、その他に、ＰＭＯＳトランジスタＱＰ６、４個のＮＭＯＳトランジスタＱＮ３〜ＱＮ６、及びインバータＩＶ１を有する。
【０２５２】
トランジスタＱＰ６は、トランジスタＱＰ１のソース及びトランジスタＱＰ４のドレイン間に並列に接続されている。トランジスタＱＮ３〜Ｎ５は、それぞれ、トランジスタＱＮ１のソース及びドレイン間に並列に接続されている。また、トランジスタＱＮ６は、トランジスタＱＮ１のソース及びトランジスタＱＮ２のドレイン（Ｖｓｓ端子）間に並列に接続されている。これらトランジスタＱＰ６、ＱＮ３、ＱＮ４、ＱＮ５、及びＱＮ６は、それぞれＡ４、Ａ２、Ａ３、及びＡ５で制御される。
【０２５３】
インバータＩＶ１は、入力がトランジスタＱＮ１、ＱＮ３〜ＱＮ６のソースに接続されている。このインバータＩＶ１の出力がキャリーＰＦ０になる。
【０２５４】
半加算器ＨＡ１は、入力がＡ０及びＰＦ０、出力がＱ０、桁上げ出力がＣ０となっている。全加算器ＦＡ１は、入力がＣ０及びＡ１、桁上げ入力がＰＦ０、出力がＱ１、桁上げ出力がＣ１となっている。全加算器ＦＡ２は、入力がＣ１及びＡ２、桁上げ入力がＰＦ０、出力がＱ２、桁上げ出力がＣ２となっている。全加算器ＦＡ３は、入力がＣ２及びＡ３、桁上げ入力がＰＦ０、出力がＱ３、桁上げ出力がＣ３となっている。半加算器ＨＡ２は、入力がＣ３及びＡ４、出力がＱ４となっている。
【０２５５】
以上の構成によって、ＰＦ０生成部Ｕ１は、“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックに入力されるバイナリＡが１７以上か否かを判断し、その結果をＰＦ０から出力する。バイナリＡが１７以上の場合、１７をバイナリＡから引くために、半加算器ＨＡ１、ＨＡ２、及び全加算器ＦＡ１〜ＦＡ３によって、６ビットバイナリの１７の補数である１５をバイナリＡに加えている。
【０２５６】
次に、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部のコア部分となる“ｐ−ａｄｉｃ”回路ブロックについて説明する。
【０２５７】
図１６は、“ｐ−ａｄｉｃ”回路ブロックの回路記号を示す図である。
【０２５８】
“ｐ−ａｄｉｃ”回路ブロックは、図１６に示すように、Ｂ０〜Ｂ１１、Ｉ０〜Ｉ５９を入力し、ｒ０〜ｒ６０を出力する。
【０２５９】
図１７は、“ｐ−ａｄｉｃ”回路ブロックのブロック図である。“ｐ−ａｄｉｃ”回路ブロックは、１ステップの回路構成を“Ｘ  ｔｏ  ｐ”回路ブロックとして、これに“Ｘ  ｔｏ  ｐ”回路ブロックの入出力を制御する制御スイッチＳＷが付加された構成となっている。
【０２６０】
具体的には、入力Ｉ０〜Ｉ４、Ｉ５〜Ｉ１９、・・・、Ｉ５４〜Ｉ５９は、それぞれ、制御スイッチＳＷ１を介してＣ００〜Ｃ０４、Ｃ０５〜Ｃ０１９、・・・Ｃ０５４〜Ｃ０５９として“Ｘ  ｔｏ  ｐ”回路ブロックに入力される。これら制御スイッチＳＷ１は、それぞれ入力Ｂ１〜Ｂ１０によって制御される。
【０２６１】
１個の制御スイッチＳＷ１は、入力ＩＮと出力ＯＵＴを接続するトランスファトランジスタＴＱと、出力ＯＵＴを接地電圧に引き下げるＮＭＯＳトランジスタＱＮを有する。トランスファトランジスタＴＱは、制御信号がＣＮＴ＝‘０’の場合にオンし、トランジスタＱＮは、制御信号がＣＮＴ＝‘１’の場合にオンする。
【０２６２】
制御スイッチＳＷ１の場合、制御信号ＣＮＴは、／Ｂ１〜／Ｂ１０となる。したがって、Ｂ＝‘１’の場合、Ｉ０〜Ｉ５９がそのままＣ００〜Ｃ０５９として出力され、Ｂ＝‘０’の場合、入力に依らず出力は‘０’となる。これは、“ｐ−ａｄｉｃ”回路ブロックへの入力Ｉ０〜Ｉ５９が不定であっても、“Ｘ  ｔｏ  ｐ”回路ブロックの入力が不定になることを回避するためである。
【０２６３】
Ｃ００〜Ｃ０５９が入力された“Ｘ  ｔｏ  ｐ”回路ブロックは、前述の通り、Ｒ００〜Ｒ５０４、Ｃ１０〜Ｃ１５５を出力する。
【０２６４】
“Ｘ  ｔｏ  ｐ”回路ブロックから出力されたＣ１０〜Ｃ１５５は、制御スイッチＳＷ２を介して“ｐ−ａｄｉｃ”回路ブロックの出力であるｒ５〜ｒ６０となる。これら制御スイッチＳＷ２は、入力Ｂ１〜Ｂ１０によって制御される。したがって、これら制御スイッチＳＷ２は、Ｂ＝‘０’の場合、Ｃ１０〜Ｃ１５５をそのままｒ５〜ｒ６０として出力する。
【０２６５】
また、“Ｘ  ｔｏ  ｐ”回路ブロックから出力されたＲ００〜Ｒ５０４は、制御スイッチＳＷ３を介して、“ｐ−ａｄｉｃ”回路ブロックの出力であるｒ０〜ｒ５４となる。これら制御スイッチＳＷ３は、それぞれＢ０∧／Ｂ１〜Ｂ１０∧／Ｂ１１で制御される。これによって、例えば、Ｒ００及びｒ０間にある制御スイッチＳＷ３は、Ｂ０＝‘１’、Ｂ１＝‘０’の場合のみ、Ｒ００をそのままｒ０として出力する。
【０２６６】
制御スイッチＳＷを制御するＢ１〜Ｂ１１は、タイミング信号であり、順次立ち上がる信号である。これに合わせて入力Ｉのパスが下位ビット側から５ビットずつ開通し、出力ｒのパスが出力Ｒのパスと切り替わる。
【０２６７】
１７進数の各桁の係数Ａに相当するＲは、次のステップの計算過程に入るまでに、そのステップの結果を出力するため、隣接するタイミング信号Ｂと論理演算した信号によってオン／オフ制御される制御スイッチＳＷ３を介して後述する外部の“Ｄ−ｒ”レジスタに出力される。
【０２６８】
次に、以上説明した回路をまとめて構成された“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部について説明する。
【０２６９】
図１８は、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部のブロック図である。“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部は、“ｐ−ａｄｉｃ”回路ブロックに“Ｄ−ｒ”レジスタが結合されて構成される。
【０２７０】
“Ｄ−ｒ”レジスタは、図１８に示すように、タイミング信号Ｂ及びクロックｃｌｋで制御されるレジスタで、入力ｒ０〜ｒ６０、Ｄ０〜Ｄ６０、出力Ｉ０〜Ｉ５９を持つ。
【０２７１】
図１９は、“Ｄ−ｒ”レジスタの回路図である。
【０２７２】
“Ｄ−ｒ”レジスタは、ビット毎に２つのインバータからなるフリップフロップＦＦを有している。このフリップフロップＦＦには、制御スイッチＳＷ１を介してＤｊ（ｊ＝０〜６０）が入力され、制御スイッチＳＷ２を介してｒｊが入力される。一方、フリップフロップＦＦの出力側には、制御スイッチＳＷ３を介してインバータＩＶ１が接続されている。このインバータＩＶ１の出力がＩｊとなる。
【０２７３】
制御スイッチＳＷ１〜ＳＷ３は、タイミング信号Ｂ０及びクロックｃｌｋによって制御される。具体的には、制御スイッチＳＷ１は／ｃｌｋ∧／Ｂ０＝‘１’の場合、制御スイッチＳＷ２は／ｃｌｋ∧Ｂ０＝‘１’の場合、制御スイッチＳＷ３はｃｌｋ＝‘１’の場合にそれぞれオンする。
【０２７４】
なお、“Ｄ−ｒ”レジスタのデータ入力にないＤ５０〜Ｄ６０は‘０’とする。
【０２７５】
“Ｄ−ｒ”レジスタの初期状態は、バイナリＤ０〜Ｄ４９が設定され、残りは‘０’で埋められた状態となっている。以後、Ｂ０が立ち上がるとｃｌｋの立ち下がりに同期してデータｒｊを取り込み、ｃｌｋの立ち上がりに同期して取り込んだｒｊをＩｊとして出力する。
【０２７６】
この“Ｄ−ｒ”レジスタは、“ｐ−ａｄｉｃ”回路ブロックと結合してタイミング信号Ｂｊ毎に計算のステップを進める。各クロックの変化の様子は図２０に示す。クロックｃｌｋからクロックｃｋが作られ、更にタイミング信号Ｂｊが作られる。
【０２７７】
各計算ステップで１７進数の各桁Ａｊが下位側から出力ｒとして得られ、これをタイミング信号Ｂｊの後半のＩｊの取り込みと同じタイミングで保持していく。
【０２７８】
全計算ステップが終了すると“Ｄ−ｒ”レジスタには、１７進数のデータＤの各桁の係数ａをバイナリに変換した場合の各桁の係数Ａｊｍが保持されている。
【０２７９】
なお、ｐ＝１７の場合、計算ステップの数は１２、“ｐ−ａｄｉｃ”回路ブロックに含まれる“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックの数は５６となる。
【０２８０】
＜１７進数から２５進数への変換＞
図２１は、「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」の１１桁の１７進数Ｄ（ａ０，ａ１，・・・，ａ９，ａ１０）から「ｂｉｎａｒｙ  ｗｏｒｌｄ」の１０桁の２５進数Ｄ（ｄ０，ｄ１，・・・，ｄ９）への変換回路の構成を模式的に示した図である。
【０２８１】
なお、図２１中“５  ａｄｄ  １７”と示した四角は、入力された５ビットのデータに対して、入力されたキャリーＣに応じて１７を加え、６ビットのバイナリを出力する演算回路である。以下、この回路を“５  ａｄｄ  １７”回路ブロックと呼ぶ。
【０２８２】
始めに、第０ステップ（図２１中Ｓ０）では、１７進数の９次の桁のバイナリ表示に対して１０次の桁のバイナリ表示をキャリーすなわち１７１０の個数のバイナリ表現として上述した計算を行う。これによって、１７９の個数としてキャリーＣ１０〜Ｃ１９の１０ビットを得る。このキャリーＣ１０〜Ｃ１９が次の第１ステップの入力となる。
【０２８３】
続いて、第１ステップ（図２１中Ｓ１）では、１７進数の８次の桁のバイナリ表示に対して、第０ステップで得られたキャリーＣ１０〜Ｃ１９を１７９の個数のバイナリ表現として前述の計算を行う。これによって、１７８の個数としてキャリーＣ２０〜Ｃ２１４の１５ビットを得る。このキャリーＣ２０〜Ｃ２１４が次の第２ステップ（図２１中Ｓ２）の入力となる。
【０２８４】
以降、第０ステップ及び第１ステップと同様のステップを重ね、第９ステップ（図２１中Ｓ９）では、１７進数表現の０次の桁のバイナリ表示に対して、前の第８ステップ（図２１中Ｓ８）で得られたキャリーＣ９０〜Ｃ９４９をｐの個数のバイナリ表現として前述の計算を行ない、１７０の個数すなわちＤの２進数表現としてキャリーＣ１００〜Ｃ１０５４の５５ビットを得る。但し、上位の５ビットはＤの１７進数と２５進数との設定からゼロとなる。これらのキャリーＣ１００〜Ｃ１０５４からＣ１０５０〜Ｃ１０５４を除いたＣ１００〜Ｃ１０４９を５ビット毎にまとめるとＤのバイナリ表現Ｄ（ｄ０，ｄ１，・・・，ｄ９）を得ることができる。
【０２８５】
次に、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部の構成について考える。
【０２８６】
図２２は、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部の第ｋステップの回路構成を、“６  ｂｉｔ  ａｄｄ  １７”回路ブロックを用いて構成したものである。ここで、“６  ｂｉｔ  ａｄｄ  １７”回路ブロックは、５ビットのバイナリデータである入力Ｂに素数１７を加えてその結果をバイナリデータＱとして出力する回路である。詳細については後述する。
【０２８７】
データを１１桁の１７進数表現のｊ次の桁の係数ａｊは、５ビットのバイナリで表現できるが、このバイナリ表現の係数Ａを他の桁の係数ａと共通の表現とするめに、数２６に示すようなサブインデックスを用いる。
【０２８８】
［数２６］
0005204186.tif 000027
【０２８９】
また、第ｋステップの演算の入力である前ステップ（第ｋ−１ステップ）のキャリーはＣｋ０〜Ｃｋ５（ｋ＋１）−１であり、サブインデックスが２の累乗の指数の２進数としての係数となっていて、この２進数が表現する数がデータに含まれる１７１０−ｋの個数となる。
【０２９０】
第ｋステップでは、図２２中（Ａ）に示すように、５（ｋ＋１）個の“６  ｂｉｔ  ａｄｄ  １７”回路ブロックで処理される。各“６  ｂｉｔ  ａｄｄ  １７”回路ブロックには、１個のキャリー（ｃａｒｒｙ）と、１７進数表現の１桁分の係数を表示する５個のバイナリが入力される。
【０２９１】
１つ目の“６  ｂｉｔ  ａｄｄ  １７”回路ブロック＜１＞は、ｃａｒｒｙ、入力Ｂ０〜Ｂ４に、それぞれＣｋ０、Ｑ−１０〜Ｑ−１４が入力され、Ｑ０、Ｑ１〜Ｑ５に、それぞれＣｋ＋１０、Ｑ００〜Ｑ０４が出力される。
【０２９２】
図示しない２つ目の“６  ｂｉｔ  ａｄｄ  １７”回路ブロック＜２＞は、ｃａｒｒｙ、入力Ｂ０〜Ｂ４に、それぞれＣｋ１、Ｑ００〜Ｑ０４が入力され、Ｑ０、Ｑ１〜Ｑ５に、それぞれＣｋ＋１１、Ｑ１０〜Ｑ１４が出力される。
【０２９３】
以降、図２２中（Ａ）に示すように、同様の入出力を持つ“６  ｂｉｔ  ａｄｄ  １７”回路ブロックが、合計５（ｋ＋１）個並び、各“６  ｂｉｔ  ａｄｄ  １７”回路ブロックから出力されるキャリーＣｋ＋１０〜Ｃｋ＋１５（ｋ＋１）−１が、次にステップである第ｋ＋１ステップの入力となる。
【０２９４】
このように、１７進数からバイナリへの変換は、図２２中（Ｂ）に示す模式図のように、キャリーＣの最下位ビット側から順次実行される。
【０２９５】
図２２中（Ａ）は、上記の通り、第ｋステップに関係する回路構成であるが、各ステップを時分割で処理することで、図２２中（Ａ）に示す回路構成を各ステップで使い回すことができる。この場合、各“６  ｂｉｔ  ａｄｄ  １７”回路ブロックの入出力を単純なオン／オフによって制御可能にするために、図２３に示すように、ｋ＝０とした場合の５個の“６  ｂｉｔ  ａｄｄ  １７”回路ブロックを最小構成の回路ブロックとする。
【０２９６】
この様に構成された５個の“６  ｂｉｔ  ａｄｄ  １７”回路ブロックからなる回路を“ａ  ｔｏ  Ｘ”回路ブロックと呼ぶ。
【０２９７】
図２４に示すように、この“ａ  ｔｏ  Ｘ”回路ブロックの入力は、Ｑ−１０〜Ｑ−１４とＣ００〜Ｃ０４の１０個となり、出力はＱ４０〜Ｑ４４とＣ１０〜Ｃ１４の１０個となる。
【０２９８】
次に、図２１に示した“５  ａｄｄ  １７”回路ブロックである“６  ｂｉｔ  ａｄｄ  １７”回路ブロックについて具体的に説明する。
【０２９９】
図２５は、“６  ｂｉｔ  ａｄｄ  １７”回路ブロックの回路記号である。“６  ｂｉｔ  ａｄｄ  １７”回路ブロックは、５ビットのバイナリＢ０〜Ｂ４と１ビットのキャリー（ｃａｒｒｙ）を入力し、６ビットのバイナリＱ０〜Ｑ５を出力する。この“６  ｂｉｔ  ａｄｄ  １７”回路ブロックは、入力Ｂに対し、ｃａｒｒｙが‘１’なら素数１７を加え、その結果をＱとして出力する。
【０３００】
ここで、ｈ＝５、ｐ＝１７の場合、バイナリＢ、バイナリＱの間には、数２７に示す関係が成立する。
【０３０１】
［数２７］
0005204186.tif 000028
【０３０２】
図２６は、“６  ｂｉｔ  ａｄｄ  １７”回路ブロックのブロック図である。
【０３０３】
“６  ｂｉｔ  ａｄｄ  １７”回路ブロックは、４個の半加算器（Ｈａｌｆ  Ａｄｄｅｒ）ＨＡ１〜ＨＡ４、及び１個の全加算器（Ｆｕｌｌ  Ａｄｄｅｒ）ＦＡ１を有する。
【０３０４】
半加算器ＨＡ１は、入力がＢ０及びｃａｒｒｙ、出力がＱ０、桁上げ出力がＣ０となっている。半加算器ＨＡ２は、入力がＣ０及びＢ１、出力がＱ１、桁上げ出力がＣ１となっている。半加算器ＨＡ３は、入力がＣ１及びＢ２、出力がＱ２、桁上げ出力がＣ２となっている。半加算器ＨＡ４は、入力がＣ２及びＢ３、出力がＱ３、桁上げ出力がＣ３となっている。全加算器ＦＡ１は、入力がＢ４及びｃａｒｒｙ、桁上げ入力がＣ３、出力がＱ４、桁上げ出力がＱ５となっている。
【０３０５】
以上の構成によって、“６  ｂｉｔ  ａｄｄ  １７”回路ブロックは、ｃａｒｒｙ＝‘１’なら、入力バイナリＢに素数１７を加える。
【０３０６】
次に、前述の“ａ  ｔｏ  Ｘ”回路ブロックを用いて、１７進数の次数を１つ下げるための１ステップ分の回路を構成する。以下では、この回路を“ｐ  ｔｏ  Ｘ”回路ブロックと呼ぶ。この“ｐ  ｔｏ  Ｘ”回路ブロックは、全計算ステップに共通に使用することができる。
【０３０７】
図２７は、“ｐ  ｔｏ  Ｘ”回路ブロックの回路記号を示す図である。“ｐ  ｔｏ  Ｘ”回路ブロックはタイミング信号Ｂ１〜Ｂ９で制御され、入力であるＱ−１０〜Ｑ４４４、Ｃ９０〜Ｃ９４９から、Ｃ１００〜Ｃ１０５４を出力する。
【０３０８】
図２８は、“ｐ  ｔｏ  Ｘ”回路ブロックのブロック図である。
【０３０９】
“ｐ  ｔｏ  Ｘ”回路ブロックは、１０個の“ａ  ｔｏ  Ｘ”回路ブロックからなる。
【０３１０】
１個目の“ａ  ｔｏ  Ｘ”回路ブロック＜１＞は、“ｐ  ｔｏ  Ｘ”回路ブロックの入力の一部であるＱ−１０〜Ｑ−１４、及びＣ９０〜Ｃ９４を入力し、Ｑ´４０〜Ｑ´４４、及び“ｐ  ｔｏ  Ｘ”回路ブロックの出力の一部であるＣ１００〜Ｃ１０４を出力する。
【０３１１】
２個目の“ａ  ｔｏ  Ｘ”回路ブロック＜２＞は、Ｑ４０〜Ｑ４４、及び“ｐ  ｔｏ  Ｘ”回路ブロックの入力の一部であるＣ９５〜Ｃ９９を入力し、Ｑ´９０〜Ｑ´９４、及び“ｐ  ｔｏ  Ｘ”回路ブロックの出力の一部であるＣ１０５〜Ｃ１０９を出力する。入力のうち、Ｑ４０〜Ｑ４４は、１個目の“ａ  ｔｏ  Ｘ”回路ブロック＜１＞の出力Ｑ´４０〜Ｑ´４４がタイミング信号Ｂ９で制御される制御スイッチＳＷ１を介して入力される信号である。
【０３１２】
３個目の“ａ  ｔｏ  Ｘ”回路ブロック＜３＞は、Ｑ９０〜Ｑ９４、及び“ｐ  ｔｏ  Ｘ”回路ブロックの入力の一部であるＣ９１０〜Ｃ９１４を入力し、Ｑ´１４０〜Ｑ´１４４、及び“ｐ  ｔｏ  Ｘ”回路ブロックの出力の一部であるＣ１０１０〜Ｃ１０１４を出力する。入力のうち、Ｑ９０〜Ｑ９４は、２個目の“ａ  ｔｏ  Ｘ”回路ブロックの出力Ｑ´９０〜Ｑ´９４がタイミング信号Ｂ８で制御される制御スイッチＳＷ２を介して入力される信号である。
【０３１３】
以降、１０個目の“ａ  ｔｏ  Ｘ”回路ブロック＜１０＞まで同様に接続される。
【０３１４】
このように、“ａ  ｔｏ  Ｘ”回路ブロックの入出力間を制御スイッチＳＷで接続するのは、計算ステップ毎に入力の接続が外部入力と内部入力で切り替わるためであり、外部入力の場合に内部回路の出力が干渉しないようにするためである。
【０３１５】
図２８の回路構成の場合、タイミング信号Ｂ０だけが‘１’のタイミングにおいて、全ての制御スイッチＳＷがオフされ、１番目の“ａ  ｔｏ  Ｘ”回路ブロックだけが活性化する。これが第０ステップに相当する。
【０３１６】
続いて、タイミング信号Ｂ１も‘１’になると、２番目の“ａ  ｔｏ  Ｘ”回路ブロック＜２＞までが活性化する。これが第１ステップに相当する。
【０３１７】
以降、タイミング信号Ｂ２〜Ｂ９が順次立ち上がっていく毎に、各ステップで必要な“ａ  ｔｏ  Ｘ”回路ブロックが活性化されていく。
【０３１８】
次に、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部のコア部分となる“ｂｉｎａｒｙ”回路ブロックについて説明する。
【０３１９】
図２９は、“ｂｉｎａｒｙ”回路ブロックの回路記号である。
【０３２０】
“ｂｉｎａｒｙ”回路ブロックは、図２９に示すように、Ｂ０〜Ｂ１０、Ｉ０〜Ｉ５４を入力し、ｒ０〜ｒ５４を出力する。
【０３２１】
図３０は、“ｂｉｎａｒｙ”回路ブロックのブロック図である。“ｂｉｎａｒｙ”回路ブロックは、１ステップの回路構成を“ｐ  ｔｏ  Ｘ”回路ブロックとして、これに“ｐ  ｔｏ  Ｘ”回路ブロックの入出力を制御する制御スイッチＳＷが付加された構成となっている。
【０３２２】
具体的には、入力Ｉ５〜Ｉ５４は、それぞれ、制御スイッチＳＷ１を介してＣ９０〜Ｃ９４９として“ｐ  ｔｏ  Ｘ”回路ブロックに入力される。これら制御スイッチＳＷ１は、それぞれタイミング信号Ｂ１〜Ｂ１０によって制御される。したがって、制御スイッチＳＷ１は、Ｂ＝‘１’の場合、Ｉ５〜Ｉ５４がそのままＣ９０〜Ｃ９４９として出力され、Ｂ＝‘０’の場合、入力に依らず出力は‘０’となる。
【０３２３】
また、入力Ｉ０〜Ｉ４９は、それぞれ、制御スイッチＳＷ２を介してＱ−１０〜Ｑ４４４として“ｐ  ｔｏ  Ｘ”回路ブロックに入力される。これら制御スイッチＳＷ２は、それぞれＢ１０∧／Ｂ９〜Ｂ１∧／Ｂ０によって制御される。したがって、例えば、Ｉ０及びＱ−１０間にある制御スイッチＳＷ２は、Ｂ１０＝‘１’、Ｂ９＝‘０’の場合のみ、Ｉ０をそのままＱ−１０として出力する。
【０３２４】
“ｐ  ｔｏ  Ｘ”回路ブロックから出力されたＣ１００〜Ｃ１０５４は、制御スイッチＳＷ３を介して、“ｂｉｎａｒｙ”回路ブロックの出力であるｒ０〜ｒ５４となる。これら制御スイッチＳＷ３は、タイミング信号Ｂ９〜Ｂ０によって制御される。したがって、制御スイッチＳＷ３は、Ｂ＝‘１’の場合、Ｃ１００〜Ｃ１０５４をそのままｒ０〜ｒ５４として出力する。
【０３２５】
以上の回路構成によって、“ｐ  ｔｏ  Ｘ”回路ブロックは、入力と出力のビット幅を５ビットずつ順次増やしながら各計算ステップに対応する。各計算ステップで１７進数の桁の数Ａを順次上位桁から取り込み、全ての計算ステップが終了したときに得られるのがデータのバイナリ表現となる。
【０３２６】
前述のように、タイミング信号Ｂ０〜Ｂ１０は、順次立ち上がる信号である。これに合わせて入力Ｉと出力ｒへのパスが上位ビット側から５ビットずつ導通していく。
【０３２７】
１７進数の各桁の数Ａは、後述する外部の“Ａ−ｒ”レジスタに初期設定されて、次の計算ステップに入るまでに、選択的にパスが切り替わるように、隣接するタイミング信号Ｂでオン／オフ制御される制御スイッチＳＷ３を介して“Ａ−ｒ”レジスタに出力される。
【０３２８】
次に、以上説明した回路をまとめて構成された“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部について説明する。
【０３２９】
図３１は、“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部のブロック図である。“ｐ−ａｄｉｃ  ｔｏ  ｂｉｎａｒｙ”変換部は、“ｂｉｎａｒｙ”回路ブロックに“Ａ−ｒ”レジスタが結合されて構成される。
【０３３０】
“Ａ−ｒ”レジスタは、図３１に示すように、タイミング信号Ｂ０及びクロックｃｌｋで制御されるレジスタで、入力ｒ０〜ｒ５４、Ａ０〜Ａ５４、出力Ｉ０〜Ｉ５４を持つ。
【０３３１】
図３２は、“Ａ−ｒ”レジスタの回路図である。
【０３３２】
“Ａ−ｒ”レジスタは、ビット毎に２つのインバータからなるフリップフロップＦＦを有している。このフリップフロップＦＦには、制御スイッチＳＷ１を介してＡｊ（ｊ＝０〜５４）が入力され、制御スイッチＳＷ２を介してｒｊが入力される。一方、フリップフロップＦＦの出力側には、制御スイッチＳＷ３を介してインバータＩＶ１が接続されている。このインバータＩＶ１の出力がＩｊとなる。
【０３３３】
制御スイッチＳＷ１〜ＳＷ３はタイミング信号Ｂ０及びクロックｃｌｋによって制御される。具体的には、制御スイッチＳＷ１は／ｃｌｋ∧／Ｂ０＝‘１’の場合、制御スイッチＳＷ２は／ｃｌｋ∧Ｂ０＝‘１’の場合、制御スイッチＳＷ３はｃｌｋ＝‘１’の場合にそれぞれオンする。
【０３３４】
“Ａ−ｒ”レジスタの初期状態は、１７進数の桁Ａ０〜Ａ５４となっている。
【０３３５】
以後、タイミング信号Ｂ０が立ち上がるとクロックｃｌｋの立ち下がりに同期して取り込んだｒｊを、クロックｃｌｋの立ち上がりに同期してＩｊとして出力する。
【０３３６】
この“Ａ−ｒ”レジスタは“ｂｉｎａｒｙ”回路ブロックと結合してタイミング信号Ｂｊ毎に計算ステップを進める。各クロックの変化の様子は、図２０と同様である。クロックｃｌｋからｃｋが作られ、更にタイミング信号Ｂｊが作られる。
【０３３７】
全計算ステップが終了すると“Ａ−ｒ”レジスタには、入力であるｐ進数Ａのバイナリ表現Ｄｊが保持される。
【０３３８】
以上で、ｐ−ａｄｉｃ・ＮＡＮＤフラッシュメモリを構成するための準備が整ったことになる。
【０３３９】
次に、本実施形態に係るメモリシステムの構成についてのデータ処理の流れにそって説明する。
【０３４０】
本実施形態に係るメモリシステムのデータ処理は、リー・メトリック・コードを用いて行われる。このデータ処理の方法には、前述のシンドローム変換法と、ユークリッド反復法がある。第１の実施形態では、シンドローム変換法を用いてデータ処理するメモリシステムについて説明する。
【０３４１】
シンドローム変換法の一般的な原理については、前述の通りである。ここでは、前述の仕様に基づいてｐ＝１７、ε＝４、δ＝１０など、具体的な数値を入れた場合について説明する。
【０３４２】
図３３は、ｐ−ａｄｉｃメモリシステムの構成を示すブロック図である。
【０３４３】
「ｂｉｎａｒｙ  ｗｏｒｌｄ」のバイナリデータとしてのデータＤは、「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」への入口として、１７進数変換部１０１によって１７進数に変換し、ＺｐでのコードとしてのデータＡに変換される。
【０３４４】
この１７進数変換部１０１は、“Ｘ  ｔｏ  ｐ”回路ブロックなど図１０〜図２０を用いて説明した回路によって構成することができる。
【０３４５】
続いて、エンコード部１０２は、１７進数変換部１０１から出力されたデータＡに生成行列Ｇを作用させる。これによって、データＡは、リー・メトリック・コードに変換されコードＣとなる。
【０３４６】
続いて、エンコード部１０２から出力されたコードＣは、ｐ−ａｄｉｃセルフラッシュメモリ１０３に記憶される。
【０３４７】
続いて、ｐ−ａｄｉｃセルフラッシュメモリ１０３からｐ−ａｄｉｃセルが保持するコードを読み出す。ここで、ｐ−ａｄｉｃセルフラッシュメモリから読み出されるコードはコードＹ（第４のデータ）である。このコードＹは、コードＣが記憶されるｐ−ａｄｉｃセルに書き込まれる際、ｐ−ａｄｉｃセルに記憶されている際、或いは、ｐ−ａｄｉｃセルから読み出される際に生じるエラーによってコードＣが変形したものである。
【０３４８】
読み出されたコードＹは、シンドローム生成部１０４に入力される。シンドローム生成部１０４では、シンドローム＜ｍ＞Ｓを転置シンドローム行列Ｈｔと、３種類の対角行列のそれぞれの累乗を用いた数２８によって計算する。
【０３４９】
［数２８］
0005204186.tif 000029
【０３５０】
そこでｍ＝０として、＜ｍ＞Ｓ＝０の場合、エラーが生じていないので、「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」における最後の処理のステップをすべくコードＹをデコード部１０９に出力する。一方、＜ｍ＞Ｓ≠０の場合、＜ｍ＞＝（０，０，０）の場合の＜ｍ＞Ｓの最初の成分Ｓ０が｜Ｓ０｜＞５なら、エラー訂正は確実には不可能なのでＮＧ信号を出力した上で、エラー込みのコードＹをデコード部１０９に出力する。その他の場合には、シンドローム＜ｍ＞Ｓを解探索多項式生成部１０５に出力する。
【０３５１】
解探索多項式生成部１０５では、このシンドローム＜ｍ＞Ｓから解探索多項式Ψ（ｘ）を求め、その４次の次数の係数がψ４≠０の場合、そのψ（ｘ）をハッセ微分多項式生成部１０６に出力する。一方、ψ４＝０の場合、＜ｍ＞を変えてシンドローム＜ｍ＞Ｓを新たに求めるステップを繰り返し再び多項式Ψ（ｘ）を求める。そして、＜ｍ＞＝（１５，１５，１５）まで繰り返してもΨ（ｘ）の４次の係数がψ４＝０なら、エラー訂正は不可能であるのでＮＧ信号を出力した上で、エラー込みのコードＹをデコード部１０９に出力する。
【０３５２】
ハッセ微分多項式生成部１０６では、入力されたΨ（ｘ）からハッセ微分多項式を求め、これらの根ｒとその根の多重度ｎを算出し、ｔ＝ｒ−１としてエラー量算出部１０７に出力する。
【０３５３】
エラー量算出部１０７では、ｔ＝ｒ−１からエラーの生じたコード語の位置座標と、ｎからエラー量ｅｔ（＝｛ｕ（ｔ）＜ｍ＞｝−１ｎ）を求めて、エラー量のリー・メトリックの総量Σ｜ｅｔ｜を求める。そしてΣ｜ｅｔ｜≦４の場合、リー・メトリック・コードのコードＣを復元すべくコード復元部１０８に処理が移る。Σ｜ｅｔ｜≧５の場合、誤訂正の可能性があるため訂正ができないものとして取り扱う。この場合、次の＜ｍ＞について、シンドローム生成部１０４からの処理を繰り返す。また、＜ｍ＞＝（１５，１５，１５）の場合、エラー訂正は不可能であるのでＮＧ信号を出力した上で、エラー込みのコードＹをデコード部１０９に出力する。
【０３５４】
コード復元部１０８では、コードＣ＝（ｃ１，ｃ２，・・・，ｃ３）をｃｔ＝ｙｔ−ｅｔによって復元する。復元されたコードＣはデコード部１０９に出力される。
【０３５５】
デコード部１０９では、コードＣに生成行列Ｇの逆変換を実行し、１７進数のコードＡを得る。このコードＡは、２５進数変換部１１０に出力される。
【０３５６】
２５進数変換部１１０では、コードＡを２５進数に変換してバイナリ表現としたものを出力する。これが復元されたバイナリデータＤとなる。
【０３５７】
この２５進数変換部１１０は、“ｐ  ｔｏ  Ｘ”回路ブロックなど図２１〜図３２を用いて説明した回路によって構成することができる。
【０３５８】
＜リー・メトリック・コードの生成、エラー訂正、リー・メトリック・コードの復元＞
次に、図３３を用いて説明したデータ処理の手順について詳細に説明する。
【０３５９】
以下では、「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」でのＥＣＣの演算について、Ｚｐデータとしてメモリシステムに入力されたデータをエンコードする手順と、メモリシステムから読み出されたコードをデコードし、データＡを得るまでの手順についてまとめる。
【０３６０】
エンコードの手順は以下のようになる。
【０３６１】
始めに、入力されたデータＤは、“ｂｉｎａｒｙ  ｔｏ  ｐ−ａｄｉｃ”変換部によって数２９に示す１７進数表現の１１桁のデータ語Ｄ（ｈ）に変換する（図３４中Ｓ１）。
【０３６２】
［数２９］
0005204186.tif 000030
【０３６３】
続いて、このデータＤに生成行列Ｇを乗じてコードＣの１６個のコード語成分ｃ１〜ｃ１６を得る（図３４中Ｓ２）。各コード語成分の値は数３０に示す通りである。
【０３６４】
［数３０］
0005204186.tif 000031
【０３６５】
最後に、このコード語成分ｃｊをメモリセルに記憶する（図３４中Ｓ３）。各コード語成分は５ビットのバイナリ表示として処理されるが、ｐ−ａｄｉｃセルに対応する閾値レベルとして、Ｚｐの数の表示のままレベルが設定される。
【０３６６】
ｐ−ａｄｉｃセルアレイから読み出されたコードＹをデコードする手順は、以下の通りである。
【０３６７】
始めに、ｐ−ａｄｉｃセルアレイから読み出されたコードＹを読み出す（図３５中Ｓ４）。コードＹは数３１に示す構成となっている。ここで、ｅｊは、コードＹの位置ｊにあるコード語シンボルのエラーのリー・メトリックを示す。
【０３６８】
［数３１］
0005204186.tif 000032
【０３６９】
続いて、コードＹからシンドロームを計算する（図３５中Ｓ５）。（ｊ）＜ｍ＞＝（ｐ−ｊ−１）ｍ３（ｐ−ｊ）ｍ２ｊｍ１とし、＜ｍ＞＝（ｍ１，ｍ２，ｍ３）とおいて、＜ｍ＞Ｙ＝｛（１）＜ｍ＞ｙ１，（２）＜ｍ＞ｙ２，（３）＜ｍ＞ｙ３，・・・，（１５）＜ｍ＞ｙｎ−１，（１６）＜ｍ＞ｙｎ  ｝、＜ｍ＞Ｓ＝＜ｍ＞ＹＨｔからシンドローム＜ｍ＞Ｓ＝（Ｓ＜ｍ＞＋０，Ｓ＜ｍ＞＋１，・・・，Ｓ＜ｍ＞＋４）を求める。
【０３７０】
続いて、＜ｍ＞＝０の場合のＳ＜０＞＋０＝Ｓ０から、｜Ｓ０｜≦４の場合、エラーのリー・メトリック総量が５以上ということはないので、以下の手順２及び手順３を開始し、｜Ｓ０｜＞４の場合、エラーのリー・メトリック総量が５以上なので訂正不可能と判断して解無しとして解の探索を終了する（図３５中Ｓ６、Ｓ７）。
【０３７１】
（手順１）  ＜ｍ＞の成分を順に変えたそれぞれに対し、数３２から、シンドローム＜ｍ＞Ｓ＝（Ｓ＜ｍ＞＋０，Ｓ＜ｍ＞＋１，・・・，Ｓ＜ｍ＞＋４）を求める（図３５中Ｓ８）。
【０３７２】
［数３２］
0005204186.tif 000033
【０３７３】
（手順２）  訂正可能なコード語成分の数の上限であるε＝４に対して、まずｕ＝４（Ｓ＜ｍ＞＋０）−１を計算し、手順１で求めたシンドロームからシンドロームｕ＜ｍ＞Ｓ＝（ｕＳ＜ｍ＞＋０，ｕＳ＜ｍ＞＋１，・・・，ｕＳ＜ｍ＞＋４）を求める（図３５中Ｓ９）。そして、このシンドロームｕ＜ｍ＞Ｓから数３３を使って解探索多項式Ψ（ｘ）の係数ψｊを順次計算する（図３５中Ｓ１０）。
【０３７４】
［数３３］
0005204186.tif 000034
【０３７５】
Ψ（ｘ）の次数が４の場合、つまり、ψ４≠０の場合、解を得るために手順３に進む（図３５中Ｓ１１）。一方、ψ４＝０の場合、＜ｍ＞を進めて（手順１）を繰り返す（図３５中Ｓ１２）。ここで、ψ４＝０の場合であって、ｍζ＝１５（ζ＝１〜３）の場合、解無しとしてエラー訂正を断念する（図３５中Ｓ１３）。
【０３７６】
（手順３）  手順２で解を得られることが分かったら、その解を求めるために手順３以降の処理を進める。
【０３７７】
手順２で求めた多項式Ψ（ｘ）の解の多重度を得るために必要なハッセ微分多項式の係数を求める（図３５中Ｓ１５）。手順２で得られた係数ψｊに対して、数３４のように、一連の二項係数ｊＣｉを掛けることによってハッセ微分多項式の係数のベクトルΨ［ｉ］＝（ｉＣｉψｉ，ｉ＋１Ｃｉψｉ＋１，・・・）が得られる。
【０３７８】
［数３４］
0005204186.tif 000035
【０３７９】
（手順４）  手順３で得られたハッセ微分多項式に対して、Ｚｐの要素１〜１６を代入して、０次微分多項式（＝Ψ（ｘ））がゼロとなる要素ｒを求める。続いて、数３５に示すように、各ｒに対してｎ−１次微分多項式はゼロであるが、ｎ次微分多項式はゼロでない次数ｎを求める（図３５中Ｓ１６）。
【０３８０】
［数３５］
0005204186.tif 000036
【０３８１】
得られたｒは、エラーが生じたコード成分の位置番号ｔの逆元であり、それに対応するｎは、生じたエラー量ｅｔから変換された量となる。この過程を要素ｒの全てに対して行う。
【０３８２】
（手順５）  手順５では、解の多重度ｎからエラー量を変換で求める（図３５中Ｓ１７）。エラーのあるコード語成分の位置番号はｔ＝ｒ−１となり、解を得るための多項式を得るために行なった変換の逆変換をｎに施すことになる。ｕ（ｔ）＜ｍ＞ｅｔ＝ｎの関係があるので、ｅｔ＝（ｕ（ｔ）＜ｍ＞）−１ｎとすればｎから本来のエラー量ｅｔを得ることができる。ここで、エラーの誤訂正の可能性を確認する。Σ｜ｅｔ｜≦４の場合、エラー量ｅｔをメモリセルから読み出したコードＹのシンボル値ｙｔから引いて、訂正されたコードＣのシンボル値ｃｔを得て、手順６に処理を移す（図３６中Ｓ１８、Ｓ２１）。一方、Σ｜ｅｔ｜＞４の場合、誤訂正の可能性があるため、次のｍξを変更して手順１から処理を繰り返す（図３６中Ｓ１９）。但し、ｍξ＝１５（ξ＝１〜３）でも手順６に処理に移せなかった場合、解無しとしてエラー訂正を断念する（図３６中Ｓ２０）。
【０３８３】
ここまでで、ｐ−ａｄｉｃセルアレイに記憶された正しいコードＣが得られたので、手順６によって、ｐ−ａｄｉｃメモリシステムに入力されたバイナリデータを求める。
【０３８４】
（手順６）  コードＣ及びコードＡと生成行列Ｇの関係ＡＧ＝Ｃなる多元連立一次方程式を介して、１１個のＺｐの要素ａ０〜ａ１０とＡ（＝ａ０，ａ１，・・・ａ１０）を求める。これによって、１１個のＺｐの要素ａ０〜ａ１０が得られたことになる。得られた要素ａ０〜ａ１０から、１１桁の１７進数のデータＡ（＝ａ０，ａ１，・・・，ａ１０））を作る（図３６中Ｓ２２）。
【０３８５】
以上で、「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」内でのデータ処理は終了したため、続いて「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」の出口においてデータＡをバイナリデータに戻す変換を行う。データＡを１１桁の１７進数表現から１０桁の２５進数表現に変換し、１０桁として各桁の数字をバイナリ表示する。これがｐ−ａｄｉｃメモリシステムに入力されたバイナリデータＤとなる。
【０３８６】
以上でデータの復元が完了する。
【０３８７】
次に、Ｚｐの積を求める計算回路について説明する。以下においてこの計算回路を“Ｘ  Ｚｐ”回路ブロックと呼ぶ。
【０３８８】
図３７は、“Ｘ  Ｚｐ”回路ブロックの回路記号を示す図、図３８中（ａ）は、“Ｘ  Ｚｐ”回路ブロックのブロック図、図３８中（ｂ）、及び（ｃ）は“Ｘ  Ｚｐ”回路ブロックによる演算処理を模式的に示した図である。
【０３８９】
“Ｘ  Ｚｐ”回路ブロックは、大別して、前半の計算ステップ群を処理する回路と、後半の計算ステップ群を処理する回路とからなる。
【０３９０】
前半の計算ステップ群を処理する回路は、ＡＮＤゲートＧ１と、４個の“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックとで構成される。
【０３９１】
ＡＮＤゲートＧ１は、掛けられる数ａの第ｉ（ｉ＝０〜４）ビットと、掛ける数ｂの第ｊ（ｊ＝０〜４）ビットとの論理積を取り、これをＭｉｊとして出力する。
【０３９２】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックは、Ｚｐの２数の１７を法としての和を求める回路である。“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックは、Ａ０〜Ａ４、及びＢ０〜Ｂ４を入力し、Ｑ０〜Ｑ４を出力する。詳細については後述する。
【０３９３】
１つ目の“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞は、Ａ０〜Ａ３、Ａ４、及びＢ０〜Ｂ４に、それぞれＭ１０〜Ｍ４０、‘０’、Ｍ０１〜Ｍ４１を入力し、Ｑ０〜Ｑ４からＱ００〜Ｑ０４を出力する。
【０３９４】
２つ目の“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜２＞は、Ａ０〜Ａ３、Ａ４、及びＢ０〜Ｂ４に、それぞれ“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞の出力であるＱ０１〜Ｑ０４、‘０’、及びＭ０２〜Ｍ４２を入力し、Ｑ０〜Ｑ４にＱ１０〜Ｑ１４を出力する。
【０３９５】
以上のように、前半の計算ステップ群を処理する回路は、“５  ｂｉｔ  ＡＤｍｏｄ  １７”回路ブロック＜１＞〜“５  ｂｉｔ  ＡＤｍｏｄ  １７”回路ブロック＜４＞の出力と入力とを順次接続して構成されている。
【０３９６】
後半の計算ステップ群を処理する回路は、４個の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックで構成されている。この“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックは図２５、図２６に示す回路である。
【０３９７】
１つ目の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロック＜１＞は、Ａ０、及びＡ１〜Ａ５に、それぞれＱ２０、及びＱ３０〜Ｑ３４を入力し、Ｑ０〜Ｑ４からＱ４０〜Ｑ４４を出力する。
【０３９８】
２つ目の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロック＜２＞は、Ａ０、及びＡ１〜Ａ５に、それぞれＱ１０、及びＱ４０〜Ｑ４４を入力し、Ｑ０〜Ｑ４からＱ５０〜Ｑ５４を出力する。
【０３９９】
以上のように、後半の計算ステップ群を処理する回路は、“６  ｂｉｔ  ｍｏｄ  １７”回路ブロック＜１＞〜“６  ｂｉｔ  ｍｏｄ  １７”回路ブロック＜４＞の出力と入力とを順次接続して構成されている。
【０４００】
全ての回路はクロック非同期で動作し、入力Ｍａｂを与えることによって出力Ｑが確定する。
【０４０１】
ここで、“Ｘ  Ｚｐ”回路ブロックの回路規模に言及する。
【０４０２】
本例のように、ｐ＝１７、ｈ＝５の場合、“Ｘ  Ｚｐ”回路ブロックは、４個の“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックと４個の“６  ｂｉｔ  ｍｏｄ  １７”回路ブロックで構成することができる。
【０４０３】
なお、“Ｘ  Ｚｐ”回路ブロックは、８個必要となる。
【０４０４】
次に、図３８に示された“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックを詳述する。
【０４０５】
図３９は、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックの回路記号である。
【０４０６】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックは、Ａ及びＢから入力される数ａ及びｂの和を求めて、得られた和の素数ｐによる剰余をＱから出力する。
【０４０７】
ｈ＝５、ｐ＝１７の場合、数ａ、ｂ、剰余のバイナリ表示Ｑの間には、数３６に示す関係が成立する。
【０４０８】
［数３６］
0005204186.tif 000037
【０４０９】
図４０は、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックの回路図である。
【０４１０】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックは、ＰＦ０生成部Ｕ１、３個の半加算器ＨＡ１〜ＨＡ３、及び７個の全加算器ＦＡ１〜ＦＡ７を有する。
【０４１１】
ＰＦ０生成部Ｕ１は、所定の電圧が供給されるＶｃｃ端子と、Ｖｓｓ端子との間に、直列に接続されたＰＭＯＳトランジスタＱＰ１〜ＱＰ４、ＮＭＯＳトランジスタＱＮ１、及びＱＮ２を有する。これらトランジスタＱＰ１、ＱＰ２、ＱＰ３、ＱＰ４、ＱＮ１、及びＱＮ２は、それぞれＳ０、Ｓ１、Ｓ２、Ｓ３、Ｓ０、及びＳ４で制御される。
【０４１２】
また、ＰＦ０生成部Ｕ１は、その他に、ＰＭＯＳトランジスタＱＰ５、３個のＮＭＯＳトランジスタＱＮ３〜ＱＮ５、及びインバータＩＶ１を有する。
【０４１３】
トランジスタＱＰ５は、トランジスタＱＰ１のソース及びトランジスタＱＰ４のドレイン間に並列に接続されている。トランジスタＱＮ３〜ＱＮ５は、それぞれ、トランジスタＱＮ１のソース及びドレイン間に並列に接続されている。これらトランジスタＱＰ５、ＰＮ３、ＱＮ４、及びＱＮ５は、それぞれＳ４、Ｓ１、Ｓ２、及びＳ３で制御される。また、インバータＩＶ１は、入力がトランジスタＱＮ１、ＱＮ３〜ＱＮ５のソースに接続されている。このインバータＩＶ１の出力がキャリーＰＦ０になる。
【０４１４】
半加算器ＨＡ１は、入力がＡ０及びＢ０、出力がＳ０、桁上げ出力がＣ０´となっている。全加算器ＦＡ１は、入力がＡ１及びＢ１、桁上げ入力がＣ０´、出力がＳ１、桁上げ出力がＣ１´となっている。全加算器ＦＡ２は、入力がＡ２及びＢ２、桁上げ入力がＣ１´、出力がＳ２、桁上げ出力がＣ２´となっている。全加算器ＦＡ３は、入力がＡ３及びＢ３、桁上げ入力がＣ２´、出力がＳ３、桁上げ出力がＣ３´となっている。全加算器ＦＡ４は、入力がＡ４及びＢ４、桁上げ入力がＣ３´、出力がＳ４、桁上げ出力がＣ４´となっている。半加算器ＨＡ２は、入力がＳ０及びＰＦ０、出力がＱ０、桁上げ出力がＣ０となっている。全加算器ＦＡ５は、入力がＳ１及びＰＦ０、桁上げ入力がＣ０、出力がＱ１、桁上げ出力がＣ１となっている。全加算器ＦＡ６は、入力がＳ２及びＰＦ０、桁上げ入力がＣ１、出力がＱ２、桁上げ出力がＣ２となっている。全加算器ＦＡ７は、入力がＳ３及びＰＦ０、桁上げ入力がＣ２、出力がＱ３、桁上げ出力がＣ３となっている。半加算器ＨＡ３は、入力がＣ３及びＳ４、出力がＱ４となっている。
【０４１５】
以上の構成によって、ＰＦ０生成部Ｕ１は、“５  ｂｉｔ  ｍｏｄ  １７”回路ブロックに入力されるバイナリＡ及びＢの和が１７以上か否かを判断し、Ａ及びＢの和が１７以上の場合、１７をＡ及びＢの和から引くために、半加算器ＨＡ１〜ＨＡ３、及び全加算器ＦＡ１〜ＦＡ７によって、５ビットバイナリの１７の補数である１５をＡ及びＢの和に加えている。
【０４１６】
ここからは、「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」の各ブロックの回路構成について具体例を示して説明する。
【０４１７】
以下において、エンコード部１０２の回路構成例を説明する。
【０４１８】
図４１中（Ａ）は、Ｚｐのコード語Ａをリー・メトリック・コードＣに変換する回路のブロック図であり、図４１中（Ｂ）は、図４１中（Ａ）に示す回路を制御する２重のクロックｃｋ及びｃｌを示す図である。
【０４１９】
図４１中（Ｂ）に示すように、クロックｃｌは、ｃｋの立ち上がりに遅れて立ち上がるパルスであり、クロックｃｋ毎にｃｌ０〜ｃｌ１０の合計１１個のクロックｃｌが順次立ち上がる。そして、ｃｌ１０が立ち上がると、これに遅れて次にクロックｃｋが立ち上がる。同様の波形がｃｋ０からｃｋ１７まで繰り返される。
【０４２０】
これらクロックｃｋ、ｃｌのうち、ｃｋは“Ｃｏｕｎｔｅｒ（１  ｔｏ  １６）”回路ブロック及び“Ｒｉ（１〜１６）”レジスタ部を制御し、ｃｌは、“Ｒｏ（０〜１６）”レジスタ部、及び“Ｒｇｓｔｒ”レジスタを制御する。
【０４２１】
“Ｃｏｕｎｔｅｒ（１  ｔｏ  １６）”回路ブロックは、初期状態が０で、クロックｃｋが立ち上がる毎に改めてクロック数を数えて出力する回路である。すなわちｃｋｊ（ｊ＝１〜１６）のうち、ｃｋｊの立ち上がりでｊを“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックに出力する。
【０４２２】
“Ｒｉ（１〜１６）”レジスタ部は、コード語Ｃの成分ｃｊを記憶するレジスタで、合計１６個の数を記憶することができる。この“Ｒｉ（１〜１６）”レジスタ部は、ｃｋの立ち上がりのタイミングに合わせて順次個々のレジスタに数を記憶していく。即ちｃｋｊ＋１の立ち上がりのタイミングで要素ｃｊとなるデータをレジスタに取り込む。ｃｋ１７の立ち上がりによって、レジスタに１６個の要素ｃｊが取り込まれる。つまり、コード語Ｃを記憶することができる。
【０４２３】
“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックは、クロックｃｌが立ち上がる度に出力に入力を乗じる回路である。“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックでは、入力されるｊを合計１１回のｃｌの立ち上がりの度に出力に乗じる。即ち、ｃｌｉ（ｉ＝０〜１０）の立ち上がりによって、“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックの出力は（ｊ）ｉ＋１となる。この出力は“Ｘ  Ｚｐ”回路ブロックに出力される。
【０４２４】
“Ｒｏ（０〜１０）”レジスタ部は、１１個の数を記憶できるレジスタであり、初期状態では、コードＡの１１個の成分ａ０〜ａ１０を記憶している。“Ｒｏ（０〜１０）”レジスタ部には、クロックｃｌが入力されており、このクロックｃｌが立ち上がる度にコードＡの成分ａ０〜ａ１０を順次出力する。即ち、ｃｌｉ（ｉ＝０〜１０）を受けてａｉを出力する。
【０４２５】
“Ｘ  Ｚｐ”回路ブロックは、入力の掛け算をＺｐで行なう回路である。“Ｘ  Ｚｐ”回路ブロックには、クロックｃｌｉ毎に“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックの出力（ｊ）ｉ＋１と“Ｒｏ（０〜１０）”レジスタ部の出力ａｉが入力され、（ｊ）ｉ＋１ａｉを出力する。この出力された数（ｊ）ｉ＋１ａｉを加算していくのが、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック及び“Ｒｇｓｔｒ”レジスタの組み合わせである。
【０４２６】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックは、２つの入力の数の和を１７を法として求める回路である。一方、“Ｒｇｓｔｒ”レジスタは、初期状態が‘０’でクロックｃｌの入力毎に、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックからの入力を遮断し、自身が保持する内容を“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックに出力するレジスタである。図４１に示すような、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック及び“Ｒｇｓｔｒ”レジスタの接続によって、クロックｃｌの入力毎に前回出力した数に新たな“Ｘ  Ｚｐ”回路ブロックから出力される数を加算していく。即ち、クロックｃｌ０〜ｃｌ１０が立ち上がると、コードＡをリー・メトリック・コードに変換した後のＣの成分ｃｊが、クロックｃｋｊのサイクルで出力される。これが次のｃｋｊ＋１のサイクルの頭で“Ｒｉ（１〜１６）”レジスタ部に保持される。これによって、コードＡから変換されたコードＣを得ることができる。
【０４２７】
図４１に示す“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックについて説明する。
【０４２８】
図４２は、“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックの回路記号を示す図であり、図４３は、“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックのブロック図である。
【０４２９】
“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックは、図４２に示すように、入力Ｘの累乗（Ｘ）ｊを算出し出力する回路であり、クロックｃｌｊ（ｊ＝１〜１６）で制御される。
【０４３０】
“Ｘ  ｋ−ｔｉｍｅｓ”回路は、図４３に示すように、“Ｘ  Ｚｐ”回路ブロックと、クロックｃｌに同期して動作する“Ｒｇｓｔｒ”レジスタ＜１＞及び“Ｒｇｓｔｒ”レジスタ＜２＞とを有する。
【０４３１】
“Ｒｇｓｔｒ”レジスタ＜１＞は、入力がＸに接続され、出力が“Ｘ  Ｚｐ”回路ブロックの一方の出力に接続されている。“Ｒｇｓｔｒ”レジスタ＜２＞は、入力に“Ｘ  ｋ−ｔｉｍｓ”回路ブロックの出力が接続され、出力に“ｋ−ｔｉｍｅｓ”回路ブロックの一方の入力が接続されている。“Ｒｇｓｔｒ”レジスタ＜２＞には初期状態として‘１’が保持されている。
【０４３２】
この回路構成によって、“Ｘ  ｋ−ｔｉｍｅｓ”回路ブロックは、自身の出力を１サイクル遅れで取り込み、これによって入力Ｘと出力（Ｘ）ｊの積を得る。
【０４３３】
クロックｃｌが入るごとに出力（Ｘ）ｊに入力Ｘを累積的に掛ける。クロックｃｌｊ（ｊ＝１〜ｋ）の立ち上がる前に“Ｒｇｓｔｒ”レジスタ＜１＞にデータＸを設定しておき、初期設定が‘１’の“Ｒｇｓｔｒ”レジスタ＜２＞を同期させることで、ｊ発目のｃｌｊで（Ｘ）ｊを得る。
【０４３４】
以下において、シンドローム生成部１０４の回路構成例を説明する。
【０４３５】
先ず、シンドローム＜ｍ＞Ｓの成分要素を求める回路について説明する。
【０４３６】
＜ｍ＞＝（ｍ１，ｍ２，ｍ３）をそれぞれの成分に対して０から１５とスキャンする。各＜ｍ＞が与えられると、これに対してシンドロームの成分を計算する。このシンドロームの成分の演算処理に必要な式を数３７に示す。
【０４３７】
［数３７］
0005204186.tif 000038
【０４３８】
始めに、計算に必要なＺｐの要素の＜ｍ＞に対応した累乗を全て求めておく。この累乗をシンドロームの和を求める際に用いる計算の方法は、まずＺｐの各要素の累乗を求めておき、Ｚｐの要素ｊを選択したときに、１７−ｊや１７−ｊ−１をデコードして対応する要素の累乗を選択することによって、積の和を計算する。
【０４３９】
そこで、Ｚｐの要素の累乗を求める計算回路について説明する。
【０４４０】
図４４中（Ａ）は、Ｚｐの要素ｊの累乗ｊｍを求める計算回路のブロック図であり、図４４中（Ｂ）は、この回路を制御するクロッｃｋ、ｃｌ、及びタイミング信号Ｂ０〜Ｂ１５のタイミングチャートである。
【０４４１】
この計算回路は、選択回路Ｕ１、“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロック、“Ｒ１（０〜１５）”レジスタ部、“Ｒ２（０〜１５）”レジスタ部（図示せず）、及び“Ｒ３（０〜１５）”レジスタ部を有する。
【０４４２】
選択回路Ｕ１は、１６個のＡＮＤゲートＧ１〜Ｇ１６を有する。ＡＮＤゲートＧ１は、Ｂ０及び／Ｂ１を入力し、信号“ｍ＝０”を出力する。ＡＮＤゲートＧ２は、Ｂ１及び／Ｂ２を入力し、信号“ｍ＝１”を出力する。以降、同様な入出力によって、ＡＮＤゲートＧ３〜Ｂ１６は、それぞれ信号“ｍ＝２”〜“ｍ＝１５”を出力する。これら、信号“ｍ＝０”〜“ｍ＝１５”は、それぞれ制御スイッチＳＷ１〜ＳＷ１６を介して、選択回路Ｕ１の出力ｒξ（ξ＝１、２、３）となる。信号“ｍ＝０”〜“ｍ＝１５”は、制御スイッチＳＷ１〜ＳＷ１６によって、それぞれ＜ｍ＞の成分ｍξの値毎にデコードされる。
【０４４３】
図４４中（Ｂ）に示すように、クロックｃｋに続けてクロックｃｌを１６サイクル発生させて、これを１５回繰り返すことによって、“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックからクロックｃｋｉ及びｃｌｊのサイクルで、（ｊ）ｉが出力される。
【０４４４】
この出力（ｊ）ｉを“Ｒ１（０〜１５）”レジスタ部、“Ｒ２（０〜１５）”レジスタ部、及び“Ｒ３（０〜１５）”レジスタ部で適当なサイクルでデータとしてラッチすることによって、Ｚｐの要素の３つの累乗が得られる。
【０４４５】
“Ｒ１（０〜１５）”レジスタ部、“Ｒ２（０〜１５）”レジスタ部、及び“Ｒ３（０〜１５）”レジスタ部にデータを取り込むタイミングを決めるために、クロックｃｋに同期して順に立ち上がる図４４中（Ｂ）に示す信号Ｂ０〜Ｂ１６を作り利用する。これらの信号Ｂ０〜Ｂ１６から、ｃｋの立ち上がりから次のｃｋの立ち上がりまでの間だけ活性化する信号ｍ＝０、ｍ＝１、・・・、ｍ＝１５を作る。
【０４４６】
選択回路Ｕ１は、これらの信号ｍ＝０、ｍ＝１、・・・、ｍ＝１５を＜ｍ＞の成分ｍζの値毎にデコード選択して、ｉ＝ｍζのｃｋｉの回でのみ有効な信号ｒξとして出力する。
【０４４７】
“Ｒ１（０〜１５）”レジスタ部、“Ｒ２（０〜１５）”レジスタ部、及び“Ｒ３（０〜１５）”レジスタ部は、それぞれ、この信号ｒξとクロックｃｌｊとの論理和を取った信号ｊでデータ取り込みの回を決める。そして、クロックｃｌに同期させてデータをラッチする。その結果、クロックサイクルの終了時には、“Ｒ１（０〜１５）”レジスタ部、“Ｒ２（０〜１５）”レジスタ部、及び“Ｒ３（０〜１５）”レジスタ部にはＺｐの要素のｍζ（ζ＝１，２，３）乗が格納されることになる。
【０４４８】
これでＺｐの要素の＜ｍ＞に対応した累乗が生成されたことになる。
【０４４９】
続いて、Ｚｐの各要素ｊについて、シンドローム変換法で変換されたエラーの成分ε＜ｍ＞＋ｌｊ（ｌ＝１、２、３、４；ｊ＝１〜１６）を計算する計算回路について説明する。エラー成分は、ε＜ｍ＞＋ｌｊ＝（１７−ｊ−１）ｍ３（１７−ｊ）ｍ２（ｊ）ｍ１＋ｌｙｊとして定義されている。
【０４５０】
図４５は、ε＜ｍ＞＋ｌｊを計算する計算回路のブロック図である。以下では、この計算回路を「エラー成分生成回路」と呼ぶ。
【０４５１】
エラー成分生成回路は、デコード部Ｕ１、及び積演算部Ｕ２を有する。
【０４５２】
デコード部Ｕ１は、“Ｃｏｕｔｅｒ（１  ｔｏ  １６）”回路ブロック、“１７−ｊ  ｄｅｃ”回路ブロック、“１７−ｊ−１”回路ブロック、“ｊ２  ｄｅｃ”回路ブロック、“ｊ３  ｄｅｃ”回路ブロック、及び“ｊ４  ｄｅｃ”回路ブロック、並びに、図４４に示したＺｐの要素のｍξ（ξ＝１、２、３）乗が格納された“Ｒ１（０〜１５）”レジスタ部、“Ｒ２（０〜１５）”レジスタ部、及び“Ｒ３（０〜１５）”レジスタ部を有する。
【０４５３】
デコード部Ｕ１は、“Ｃｏｕｎｔｅｒ（１  ｔｏ  １６）”回路ブロックはクロックｃｌｊ（ｊ＝１〜１６）のタイミングで、ｊを順次出力され発生させる。この“Ｃｏｕｎｔｅｒ（１  ｔｏ  １６）”回路ブロックから出力されたｊは、“１７−ｊ  ｄｅｃ”回路ブロック、“１７−ｊ−１”回路ブロック、“ｊ２  ｄｅｃ”回路ブロック、“ｊ３  ｄｅｃ”回路ブロック、及び“ｊ４  ｄｅｃ”回路ブロックにそれぞれ入力される。
【０４５４】
“１７−ｊ  ｄｅｃ”回路ブロックは、入力されるｊから１７−ｊをデコードして出力する。“１７−ｊ−１  ｄｅｃ”回路ブロックは、入力されるｊから１７−ｊ−１をデコードして出力する。“ｊ２  ｄｅｃ”回路ブロックは、入力されるｊからｊ２をデコードして出力する。“ｊ３  ｄｅｃ”回路ブロックは、入力されるｊからｊ３をデコードして出力する。“ｊ４  ｄｅｃ”回路ブロックは、入力されるｊからｊ４をデコードして出力する。
【０４５５】
“Ｒ１（０〜１５）”レジスタ部は、入力されるｊに基づいて（ｊ）ｍ１を出力する。“Ｒ２（０〜１５）”レジスタ部は、“１７−ｊ  ｄｅｃ”回路ブロックから出力された１７−ｊに基づいて（１７−ｊ）ｍ２を出力する。“Ｒ３（０〜１５）”レジスタ部は、“１７−ｊ−１”レジスタ部は、“１７−ｊ−１  ｄｅｃ”回路ブロックから出力された１７−ｊ−１に基づいて（１７−ｊ−１）ｍ３を出力する。
【０４５６】
以上によって、デコード部Ｕ１は、出力（ｊ）ｍ１、（１７−ｊ）ｍ２、（１７−ｊ−１）ｍ３を得る。
【０４５７】
積演算部Ｕ２は、“Ｒｏ（１〜１６）”レジスタ部、及び７つの“Ｘ  Ｚｐ”回路ブロック＜１＞〜＜７＞を有する。
【０４５８】
“Ｒｏ（１〜１６）”レジスタ部は、１６個のラッチから構成されている。これら１６個のラッチには、それぞれｐ−ａｄｉｃセルから読み出されたコードＹの１６個の成分であるＺｐの要素ｙ１〜ｙ１６が保持されている。“Ｒｏ（１〜１６）”レジスタ部は、クロックｃｌｊ（ｊ＝１〜１６）に同期してラッチに保持するｙｊを出力する。
【０４５９】
“Ｘ  Ｚｐ”回路ブロック＜１＞は、“Ｒｏ（１〜１６）”レジスタ部から出力されるｙｊと“Ｒ１（０〜１５）”レジスタ部から出力される（ｊ）ｍ１とのＺｐの積を算出し出力する。
【０４６０】
“Ｘ  Ｚｐ”回路ブロック＜２＞は、“Ｒ２（０〜１５）”レジスタ部から出力される（１７−ｊ）ｍ２と“Ｒ３（０〜１５）”レジスタ部から出力される（１７−ｊ−１）ｍ３とのＺｐの積を算出し出力する。
【０４６１】
“Ｘ  Ｚｐ”回路ブロック＜３＞は、“Ｘ  Ｚｐ”回路ブロック＜１＞の出力と“Ｘ  Ｚｐ”回路ブロック＜２＞の出力とのＺｐの積ε＜ｍ＞＋０ｊを算出し出力する。
【０４６２】
“Ｘ  Ｚｐ”回路ブロック＜４＞は、“Ｘ  Ｚｐ”回路ブロック＜３＞から出力されたε＜ｍ＞＋０ｊとｊとの積ε＜ｍ＞＋１ｊを算出し出力する。
【０４６３】
“Ｘ  Ｚｐ”回路ブロック＜５＞は、“Ｘ  Ｚｐ”回路ブロック＜３＞から出力されたε＜ｍ＞＋０ｊと“ｊ２  ｄｅｃ”回路ブロックから出力されたｊ２との積ε＜ｍ＞＋３ｊを算出し出力する。
【０４６４】
“Ｘ  Ｚｐ”回路ブロック＜６＞は、“Ｘ  Ｚｐ”回路ブロック＜３＞から出力されたε＜ｍ＞＋０ｊと“ｊ３  ｄｅｃ”回路ブロックから出力されたｊ３との積ε＜ｍ＞＋３ｊを算出し出力する。
【０４６５】
“Ｘ  Ｚｐ”回路ブロック＜７＞は、“Ｘ  Ｚｐ”回路ブロック＜３＞から出力されたε＜ｍ＞＋０ｊと“ｊ４  ｄｅｃ”回路ブロックから出力されたｊ４との積ε＜ｍ＞＋４ｊを算出し出力する。
【０４６６】
以上の構成による積演算部Ｕ２によって、クロックｃｌｊに同期して、選択して読み出されたデータＹが、Ｚｐの要素ｊに対応したε＜ｍ＞＋０ｊ、ε＜ｍ＞＋１ｊ、ε＜ｍ＞＋２ｊ、ε＜ｍ＞＋３ｊ、ε＜ｍ＞＋４ｊとして得られる。
【０４６７】
続いて、ε＜ｍ＞＋ｌｊ（ｌ＝１，２，３，４）の各ｊ＝１〜１６の和を求める計算回路について説明する。ε＜ｍ＞＋ｌｊ（ｌ＝１，２，３，４）の各ｊ＝１〜１６の和を求めることで、シンドロームＳ＜ｍ＞＋ｌが得られる。以下では、この計算回路を「シンドローム生成回路」と呼ぶ。
【０４６８】
図４６は、シンドローム生成回路のブロック図である。
【０４６９】
シンドローム生成回路は、“Ｒｇｓｔｒ”レジスタ、及び“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックを有する。
【０４７０】
シンドローム生成回路は、クロックｃｌｊ（ｊ＝１〜１６）と同期して、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック及び“Ｒｇｓｔｒ”レジスタのループによってε＜ｍ＞＋ｌｊを加算していき、シンドローム成分Ｓ＜ｍ＞＋ｌ（ｌ＝０〜４）を作る。
【０４７１】
次に、図４４で示したｊｍを求める回路に用いられていたＺｐの要素ｊのｉ乗を計算する回路ブロックを説明する。以下では、この回路ブロックを“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックと呼ぶ。
【０４７２】
図４７は、“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックの回路記号を示す図である。
【０４７３】
“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックは、クロックｃｋｉ（ｉ＝０〜１５）とｃｌｊ（ｊ＝１〜１６）で制御され、クロックｃｌｊの立ち上がるに同期して（ｊ）ｉと（ｊ）ｉ＋１を出力する。
【０４７４】
図４８は、“（ｊ）ｉ（ｊ＝１  ｔｏ  ｐ−１）”回路ブロックのブロック図である。
【０４７５】
“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックは、Ｚｐのゼロ以外の全ての要素１〜１６に対して、０〜１５乗を順次算出し、レジスタに保持する回路である。
【０４７６】
“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックは、図４８に示す通り、“Ｘ  Ｚｐ”回路ブロック、“Ｃｏｕｎｔｅｒ（１  ｔｏ  １６）”回路ブロック、及び“Ｒ（１〜１６）”レジスタ部を有する。
【０４７７】
指数を決めるクロックがｃｋｉで、何回目のクロックｃｋｉであるかで指数ｉが決まる。一方、Ｚｐの要素を１から順次指定するのがクロックｃｌで、クロックｃｌｊの回数ｊが要素数となる。
【０４７８】
“Ｃｏｕｎｔｅｒ（１  ｔｏ  １６）”回路ブロックは、“Ｘ  Ｚｐ”回路ブロックの一方の入力に接続されている。ｃｋｉをスタート信号とし、ｃｌｊの立ち上がりのタイミングで１〜１６の範囲でカウントアップする。
【０４７９】
“Ｒ（１〜１６）”レジスタ部は、１６個のレジスタからなり、ｉｎのクロック／ｃｌｊの立ち上がりで入力ｉ１〜ｉ１６を順次１〜１６番目のレジスタに格納し、ｏｕｔのクロックｃｌｊの立ち上がりで順次１〜１６番目のレジスタの内容ｉ１〜ｉ１６を出力する。
【０４８０】
図４８に示すように、“Ｃｏｕｎｔｅｒ（１  ｔｏ  １６）”回路ブロックと“Ｒ（１〜１６）”レジスタ部への入力クロックｃｋ及びｃｌを同期させ、“Ｒ（１〜１６）”レジスタ部の出力と“Ｃｏｕｎｔｅｒ（１  ｔｏ  １６）”回路ブロックの出力とを“Ｘ  Ｚｐ”回路ブロックで乗算すると、クロックｃｋｉが立ち上がった後、ｃｌｊが立ち上がる毎に“Ｒ（１〜１６）”レジスタ部から（ｊ）ｉが出力される。また、“Ｘ  Ｚｐ”回路ブロックから（ｊ）ｉ＋１が出力される。この（ｊ）ｉ＋１は、計算回路ごとに必要に応じて用いることができる。
【０４８１】
以下において、解探索多項式生成部１０５の回路構成例として、解探索多項式Ψ（ｘ）を求める演算回路について説明する。この演算回路を「解探索多項式生成回路」と呼ぶ。
【０４８２】
解探索多項式Ψ（ｘ）のｘの各次数ｊの係数ψｊを求める演算の処理に必要な処理式を数３８に示す。
【０４８３】
［数３８］
0005204186.tif 000039
【０４８４】
図４９は、解探索多項式生成回路のブロック図である。
【０４８５】
解探索多項式生成回路は、シンドロームｕ＜ｍ＞Ｓ＝（ｕＳ＜ｍ＞＋０，ｕＳ＜ｍ＞＋１，ｕＳ＜ｍ＞＋２，ｕＳ＜ｍ＞＋３，ｕＳ＜ｍ＞＋４）を用いてエラーを探索するステップで用いる回路である。
【０４８６】
解探索多項式生成回路によれば、複雑なユークリッド反復法を用いることなく、単純な巡回回路で解探索多項式Ψ（ｘ）を生成できる。
【０４８７】
解探索多項式生成回路は、数３８に示す第２式右辺のうちΣψｊ−１Ｓ＜ｍ＞＋ｉを求める第１の部分回路Ｕ１と、同じく数３８に示す第２式右辺のうちｕ（ｊ）−１を求める第２の部分回路Ｕ２とを有する。
【０４８８】
第１の部分回路Ｕ１は、４個の直列接続された“Ｒｇｓｔｒ”レジスタ＜１＞〜＜４＞と、各“Ｒｇｓｔｒ”レジスタの出力に接続された４個の“Ｘ  Ｚｐ”回路ブロック＜１＞〜＜４＞を有する。
【０４８９】
“Ｒｇｓｔｒ”レジスタ＜１＞の初期値は‘１’であり、その他の、“Ｒｇｓｔｒ”レジスタ＜２＞〜＜４＞の初期値は‘０’である。
【０４９０】
第１の部分回路Ｕ１は、各“Ｒｇｓｔｒ”レジスタに入力されるクロックｃｋで制御され、ｊ回目のクロックｃｋｊの立ち上がりで、“Ｒｇｓｔｒ”レジスタの接続点から各次数の係数ψｊ−１、ψｊ−２、ψｊ−３、ψｊ−４を出力する。係数が存在しない接続点は‘０’になるため、“Ｘ  Ｚｐ”回路ブロック＜１＞〜＜４＞によるシンドローム成分Ｓ＜ｍ＞＋１〜Ｓ＜ｍ＞＋４との積演算に寄与しない。“Ｘ  Ｚｐ”回路ブロック＜１＞〜＜４＞の出力は２つずつ“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックで和演算され、これら“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックのラダーによって最終的にΣψｊ−ｉＳ＜ｍ＞＋ｉを得る。
【０４９１】
第２の部分回路Ｕ２は、“Ｃｏｕｎｔｅｒ（１  ｔｏ  ４）”回路ブロック、“Ｘ  Ｚｐ”回路ブロック＜ａ＞、＜ｂ＞、及び“ｊ−１  ｄｅｃ”回路ブロックを有する。
【０４９２】
第２の部分回路Ｕ２は、クロックｃｋｊに応じて“Ｃｏｕｎｔｅｒ（１  ｔｏ  ４）”回路ブロックで生成されたｊとシンドローム成分Ｓ＜ｍ＞＋０から“Ｘ  Ｚｐ”回路ブロック＜ａ＞及び“ｊ−１  ｄｅｃ”回路ブロックによって（ｊＳ＜ｍ＞＋０）−１を生成する。そして、この生成された（ｊＳ＜ｍ＞＋０）−１と設定されたε＝４から“Ｘ  Ｚｐ”回路ブロック＜ｂ＞によってｕ（ｊ）−１を得る。
【０４９３】
そして、“Ｘ  Ｚｐ”回路ブロック＜ｃ＞によって、第１の部分回路Ｕ１で生成されたΣψｊ−ｉＳ＜ｍ＞＋ｉと第２の部分回路Ｕ２で生成されたｕ（ｊ）−１との乗算を行い、係数ψｊを得る。
【０４９４】
係数ψｊは、ｈビットのバイナリであり、負数の表示にするために補数表現となっている。そこで、“Ｘ  Ｚｐ”回路ブロック＜ｃ＞の出力に対し、インバータＩＶ１で反転させた上で、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックで‘１’を加算する。これによって、５ビットのバイナリの補数表現を得ることができる。
【０４９５】
なお、図４９に示す“ｊ−１  ｄｅｃ”回路ブロックは、Ｚｐの要素ｊの逆元ｊ−１を求める回路である。“ｊ−１  ｄｅｃ”回路ブロックの詳細については、後述する。
【０４９６】
以上説明した解探索多項式生成回路によれば、クロックｃｋを４回入れると各ノードにｊ＝４とした係数ψ４〜ψ０が得られる。
【０４９７】
以下において、ハッセ微分多項式生成部１０６の回路構成例を説明する。
【０４９８】
Ψ（ｘ）の次数が４に一致した場合、このΨ（ｘ）の根とその多重度を求める必要がある。そこで、次は、根の多重度を求める際に必要となるハッセ微分多項式の係数を計算する演算回路を説明する。以下では、この演算回路を「ハッセ微分多項式係数生成回路」と呼ぶ。
【０４９９】
ハッセ微分多項式の係数とその係数とΨ（ｘ）の係数との関係は、数３９のようになる。
【０５００】
［数３９］
0005204186.tif 000040
【０５０１】
つまり、数３９からも分かるように、ハッセ微分多項式係数生成回路は、Ψ（ｘ）の係数と２項係数の掛け算を行い、各微分の階数での各次数の係数をクロックｃｋ及びｃｌを用いて生成し、全ての係数をレジスタに格納する。
【０５０２】
図５０中（Ａ）は、ハッセ微分多項式係数生成回路のブロック図であり、図５０中（Ｂ）は、ハッセ微分多項式係数生成回路を制御するクロックｃｋ及びｃｌのタイミングチャートである。
【０５０３】
ハッセ微分多項式係数生成回路は、Ｚｐの各要素ｉの階乗ｉ！が記録された“ｉ！”テーブル、その逆元が記録された“（ｉ！）−１”テーブル、及び解探索多項式Ψ（ｘ）の係数ψｉが記録された“ψｉ”テーブルを有する。“ｉ！”テーブル及び“（ｉ！）−１”テーブルに関しては、本例のように、ｐ＝１７の場合、実用上十分小さい規模に抑えることができる。
【０５０４】
また、“ψｉ”テーブルに関しては、図４９で示す解探索多項式生成回路で生成されるため、これを使う。
【０５０５】
ハッセ微分多項式係数生成回路は、図５０に示すように、“ｉ！”テーブル、“（ｉ！）−１”テーブル、及び“ψｉ”テーブルと、“Ｘ  Ｚｐ”回路ブロックと、これらの接続を切り替える制御スイッチＳＷを有する。非選択のノードは、“Ｘ  Ｚｐ”回路ブロックによる積演算の結果が‘０’となるように、制御スイッチＳＷの出力側のノードを、初期状態で‘０’に放電されている。
【０５０６】
クロックｃｋのクロック数は、微分の階数に対応しており、ｃｋｉのｉは１〜４の値をとる。一方、クロックｃｌは、次数に相当し、微分の階数が上がれば不要な次数が増える。そのため、クロックｃｋに対して毎回同じ数の発生をする必要はないが、図５０の回路では毎回同じ４回だけ発生させる。したがって、格納タイミングは４２個あるが、係数を格納する“Ｒ  ｉ（０〜４）／ｊ（０〜３）”レジスタ部は、全てのクロックに対応したレジスタがある必要はなく、ほぼ半分のレジスタがあれば良い。
【０５０７】
なおｃｋ０はレジスタにΨ（ｘ）の係数、すなわちΨ［０］に相当する係数を予め格納しておくために便宜上設けたものである。
【０５０８】
図５１は、ハッセ微分多項式係数生成回路でも利用可能なｐ＝１７の場合のＺｐの各要素に対する固定した演算（逆元、階乗、累乗等）の表である。
【０５０９】
これらの数字の５ビットでのバイナリ表示を用いることでデコーダを作ることができる。なお、ｊがＺｐの全ての要素１〜１６に変化したとき、Ｚｐの全ての要素を過不足なくスキャンすることができる関数の一例は、表の通りであるが、偶数乗や階乗を除いたものが多い。例えば、ａｉはａが条件を満たせば、ｊの変化でＺｐのゼロ以外の全ての要素をスキャンすることができる。例えば、ａ＝３、５、６、７、１０の場合については、図５１に示す通りである。
【０５１０】
これらの関数を利用してシンドローム変換法の仮想エラーによる探索範囲を広げることができるわけである。
【０５１１】
次に、デコーダを構成する回路の例として、Ｚｐの要素ｊの逆元ｊ−１を求めるデコーダについて説明する。以下では、このデコーダを“ｊ−１  ｄｅｃ”回路ブロックと呼ぶ。
【０５１２】
要素ｊから逆元ｊ−１を求めるには、ｊ×ｊ−１≡１（ｍｏｄ  １７）の関係を求めておき、ｊ及びｊ−１を５ビットのバイナリ表示を数４０に示すように構成し、これの変換デコーダを作れば良い。
【０５１３】
［数４０］
0005204186.tif 000041
【０５１４】
図５２は、“ｊ−１  ｄｅｃ”回路ブロックのブロック図である。
【０５１５】
“ｊ−１  ｄｅｃ”回路ブロックは、５ビットのバイナリデータＩを５ビットの他のバイナリデータＯにデコードする一般的な回路で構成することができる。この場合、数４０に示すように、Ｉ＝ｊ、Ｏ＝ｊ−１とすれば良い。
【０５１６】
“ｊ−１  ｄｅｃ”回路ブロックは、ＮＡＮＤゲートＧ１及びＧ２によってよって、ビットＩ０〜Ｉ３を２ビットずつ部分デコードして信号／Ａ０〜／Ａ３、／Ｂ０〜／Ｂ３を生成し、更に、３入力のＮＯＲゲートＧ３によって／Ａｍ、／Ｂｍ、Ｉ４（又は／Ｉ４）からＯｍ（ｍ＝０〜４）を生成する。なお、ｊ＝０場合、ｊ−１＝０とする。
【０５１７】
次に、解探索多項式Ψ（ｘ）の根とその多重度を計算する演算回路を説明する。以下、この演算回路を「解探索多項式根／多重度演算回路」と呼ぶ。
【０５１８】
解探索多項式根／多重度演算回路は、ハッセ微分多項式の０階微分をΨ（ｘ）とみなし、Ｚｐの各要素に対してハッセ微分多項式がゼロでなければ次の要素に計算を移し、ハッセ微分多項式がゼロである間は微分の階数を上げる。各Ｚｐの要素に対して、ハッセ微分多項式がゼロでない最初のハッセ微分の階数をレジスタに残していくと、階数がゼロではない要素が根であり、その残された階数がその根の多重度になる。つまり、レジスタから内容が‘０’ではないものを選び、その保持された値がその根の多重度となる。
【０５１９】
具体的に、解探索多項式Ψ（ｘ）の根をαとし、Ψ（ｘ）のｉ階のハッセ微分多項式を［Ψ（ｘ）］［ｉ］とすると、αの多重度をｎとした場合の関係式は数４１のようになる。
【０５２０】
［数４１］
0005204186.tif 000042
【０５２１】
解探索多項式根／多重度演算回路は、この数４１を具備するｎを、Ｚｐの各要素αに対して、Ψ（ｘ）の根であるか否かに関わらず求める。ｎ＝０の場合、αが根でないことを意味する。
【０５２２】
図５３中（Ａ）は、解探索多項式根／多重度演算回路のブロック図であり、図５３中（Ｂ）は、解探索多項式根／多重度演算回路を制御するクロックｃｋ、ｃｌ、及びｃｌｋのタイミングチャートである。
【０５２３】
解探索多項式根／多重度演算回路は、クロックｃｋでＺｐの要素１〜１６についてスキャンし、クロックｃｌでハッセ微分の階数、クロックｃｌｋでその階数のハッセ微分多項式の値を求める。クロックｃｋは、計算しているハッセ微分多項式の値がゼロでなくなった場合に発生させ、次のＺｐの要素でのサイクルに入る。
【０５２４】
解探索多項式根／多重度演算回路は、図５３中（Ａ）に示すように、“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロック、“Ｒｏ  ｉ（０〜４）／ｊ（０〜４）”レジスタ部、“Ｘ  Ｚｐ”回路ブロック、“Ｒｇｓｔｒ”レジスタ＜１＞、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック、“Ｒｇｓｔｒ”レジスタ＜２＞、“ｃｌｏｃｋ  ｃｌ  ｇｅｎ．”回路ブロック、“Ｃｏｕｎｔｅｒ（０  ｔｏ  ４）”回路ブロック、“Ｌｉ（１〜１６）”レジスタ部を有する。
【０５２５】
“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックは、クロックｃｋをα回受けて要素αを選択し、クロックｃｌｋをｊ−１回受けてαのｊ乗を出力する。
【０５２６】
“Ｒｏ  ｉ（０〜４）／ｊ（０〜４）”レジスタ部は、クロックｃｌｉ及びｃｌｋｊを受けてハッセ微分多項式の係数ψ［ｉ］ｊを出力するレジスタである。
【０５２７】
“Ｘ  Ｚｐ”回路ブロックは、“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロックからの出力αｊと、“Ｒｏ  ｉ（０〜４）／ｊ（０〜４）”レジスタ部からの出力ψ［ｉ］ｊを積演算し、αｊψ［ｉ］ｊを出力する。
【０５２８】
以上、“（ｊ）ｉ（ｊ＝１  ｔｏ  １６）”回路ブロック、“Ｒｏ  ｉ（０〜４）／ｊ（０〜４）”レジスタ部、及び“Ｘ  Ｚp”回路ブロックに対し、クロックｃｌｋを５回与えてやることでハッセ微分多項式の値を得ることができる。なお、クロックｃｋ、ｃｌ、及びｃｌｋの制御を簡単にするため、この計算では存在しない０の値の項の和も計算する。したがって、本来は必要なクロックｃｌｋの総数は半分程度となる。
【０５２９】
微分多項式の値［Ψ（α）］［ｉ］は、ゼロの場合‘０’、その他の場合‘１’として“Ｒｇｓｔｒ”レジスタ＜１＞に取り込まれる。
【０５３０】
“Ｒｇｓｔｒ”レジスタ＜１＞で保持された値は、クロックｃｌｋ０のタイミングで、クロックｃｋα（α＝１〜１６）として出力される。このクロックｃｋαは、クロックｃｌｋ４でリセットされるまで保持される。
【０５３１】
“Ｒｇｓｔｒ”レジスタ＜１＞は、初期値が‘１’であるため、クロックｃｋ１は最初のｃｌｋ０で立ち上がる。クロックｃｋ２以降は、計算結果にしたがってｃｌｋのいずれかのサイクルのｃｌｋ０で立ち上がる。
【０５３２】
“ｃｌｏｃｋ  ｃｌ  ｇｅｎ．”回路ブロックは、クロックｃｌｋ０に同期してクロックｃｌｉを発生させて、クロックｃｋαが立ち上がる毎にクロックｃｌ０にリセットする。
【０５３３】
”Ｃｏｕｎｔｅｒ（０  ｔｏ  ４）”回路ブロックは、クロックｃｋαで０にリセットされ、クロックｃｌが入るたびにカウントアップし、クロックｃｌの回数−１を出力する。この出力は、“Ｌｉ（１〜１６）レジスタ部に格納される。
【０５３４】
“Ｌｉ（１〜１６）”レジスタ部は、入力をクロックｃｋαによって切り換えていくので、α番目のレジスタにはその多重度が格納されることになる。
【０５３５】
以下において、エラー量算出部１０７の回路構成例を説明する。
【０５３６】
ハッセ微分多項式の根と多重度α、［ｎ］のペアから真のエラーを求めてコード訂正する変換回路について説明する。ここでは、この変換回路を「コード訂正回路」と呼ぶ。
【０５３７】
シンドローム変換法で求められた解、仮想エラーｎ、エラーが生じた位置ｔ、及び真のエラーｅｔの関係は数４２のようになる。
【０５３８】
［数４２］
0005204186.tif 000043
【０５３９】
変換には数（ｊ）＜ｍ＞＝（１７−ｊ−１）ｍ３（１７−ｊ）ｍ２（ｊ）ｍ１を利用するが、この数は数４３に示すシンドローム成分の関係式Ｓ＜ｍ＞＋ｌと比べると、ｌ＝０でのシンドローム成分としてＹ＝（０，０，・・・，ｙｊ＝１，・・・，０，０）を用いたＳ＜ｍ＞＋０に等しい。これを利用して、Ｙのｔ成分が１で他が０ものを代入したシンドローム成分をＴ＜ｍ＞＋０と表し、回路入力として用いたものが、図５４のブロック図で示された回路である。
【０５４０】
［数４３］
0005204186.tif 000044
【０５４１】
コード訂正回路は、エラーが生じた位置ｔを求める第１の部分回路Ｕ１と、真のエラーｅｔを求める第２の部分回路Ｕ２と、真のエラーｅｔによってコード訂正をする第３の部分回路Ｕ３を有する。
【０５４２】
第１の部分回路Ｕ１は、“ｊ−１  ｄｅｃ”回路ブロック＜１＞を有する。
【０５４３】
“ｊ−１  ｄｅｃ”回路ブロック＜１＞は、根αを入力し、エラーが生じた位置ｔを出力する。
【０５４４】
第２の部分回路Ｕ２は、３つの“Ｘ  Ｚｐ”回路ブロック＜１＞〜＜３＞、及び“ｊ−１  ｄｅｃ”回路ブロック＜２＞を有する。
【０５４５】
“Ｘ  Ｚｐ”回路ブロック＜１＞は、シンドローム成分Ｓ＜ｍ＞＋０及び４−１（＝１３）を入力し、変換に出てくる数ｕの逆元であるｕ−１を出力する。
【０５４６】
“ｊ−１  ｄｅｃ”回路ブロック＜２＞は、Ｔ＜ｍ＞＋０を入力し、（ｔ）＜ｍ＞の逆元である｛（ｔ）＜ｍ＞｝−１を出力する。
【０５４７】
“Ｘ  Ｚｐ”回路ブロック＜２＞は、多重度ｎ及び“Ｘ  Ｚｐ”回路ブロック＜１＞の出力であるｕ−１を入力し、これらの積ｎｕ−１を出力する。
【０５４８】
“Ｘ  Ｚｐ”回路ブロック＜３＞は、“Ｘ  Ｚｐ”回路ブロック＜２＞が出力したｎｕ−１及び“ｊ−１  ｄｅｃ”回路ブロック＜２＞が出力した｛（ｔ）＜ｍ＞｝−１を入力し、真のエラーｅｔを出力する。
【０５４９】
第３の部分回路Ｕ３は、２つの“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞、及び＜２＞を有する。
【０５５０】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞は、／ｅｔ及び‘１’を入力し、ｅｔの補数である−ｅｔを出力する。
【０５５１】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜２＞は、ｐ−ａｄｉｃセルから読み出したコードｙｔ及び“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞が出力した−ｅｔを入力し、エラー訂正された正しいコードｃｔを出力する。
【０５５２】
以上の構成によるコード訂正回路によって、正しいコードｃｔを復元することができる。
【０５５３】
次に、エラーコード語Ｅのリー・メトリックｗ（Ｅ）＝Σ｜ｅｊ｜（ｊ＝１〜１６）を計算する演算回路について説明する。以下、この演算回路を「リー・メトリック演算回路」と呼ぶ。
【０５５４】
図５５は、リー・メトリック演算回路のブロック図である。
【０５５５】
リー・メトリック演算回路は、“Ｒｏ（０〜１６）”レジスタ部、“５  ｂｉｔ  ＬＭ  １７”回路ブロック、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック、及び“Ｒｇｓｔｒ”レジスタを有する。
【０５５６】
多項式Ψ（ｘ）から得られたエラーコード語Ｅは、“Ｒｏ（０〜１６）”レジスタ部に初期値として格納されている。“Ｒｏ（０〜１６）”レジスタ部からは、Ｅの成分ｅｊをクロックｃｋｊによって順次取り出される。
【０５５７】
“５  ｂｉｔ  ＬＭ  １７”回路ブロックは、この取り出された成分ｅｊからそのリー・メトリック｜ｅｊ｜を計算する。“５  ｂｉｔ  ＬＭ  １７”回路ブロックは、クロックｃｋｊ毎に計算された成分のリー・メトリック｜ｅｊ｜を“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックに出力する。
【０５５８】
“Ｒｇｓｔｒ”レジスタと“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックによって構成されるループで、この｜ｅｊ｜を加算していく。そして、１６回目のクロックｃｋが立ち上がった時点の“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックの出力がｗ（Ｅ）＝Σ｜ｅｊ｜となる。
【０５５９】
ｗ（Ｅ）≦４の場合、一連のエラー探索が終わり、Ｅによって、訂正を行うことができる。
【０５６０】
演算処理で求めたエラーＥについては、そのリー・メトリックがε以下であることを確認して、誤訂正とならいないことが分かってから訂正される。
【０５６１】
そこで、次は、Ｚｐの要素のリー・メトリックを計算する演算回路素子について説明する。以下において、この演算回路素子を“５  ｂｉｔ  ＬＭ  １７”回路ブロックと呼ぶ。
【０５６２】
５ビットのバイナリ表示のＺｐの要素ａについて、そのリー・メトリックＱ＝｜ａ｜は、Ｑ＝／ＰＦ０×ａ＋ＰＦ０×（１７−ａ）と表現できる。ここでＰＦ０は、ａ≧９の場合に‘１’、ａ＜９の場合に‘０’になる。したがって、ａのリー・メトリックを求めるには、ａ≧９の場合、１７からａを引く、即ち、１７にａの補数を加えれば良い。
【０５６３】
ｈ＝５、ｐ＝１７の場合のＡとＱの関係は数４４のようになる。
【０５６４】
［数４４］
0005204186.tif 000045
【０５６５】
図５６は、“５  ｂｉｔ  ＬＭ  １７”回路ブロックの回路記号であり、図５７は、“５  ｂｉｔ  ＬＭ  １７”回路ブロックのブロック図である。
【０５６６】
“５  ｂｉｔ  ＬＭ  １７”回路ブロックは、５ビットのバイナリＡ０〜Ａ４を入力し、５ビットのバイナリＱ０〜Ｑ４を出力する。
【０５６７】
“５  ｂｉｔ  ＬＭ  １７”回路ブロックは、ＰＦ０生成部Ｕ１、ＸＯＲゲートＧ１、３個の半加算器ＨＡ１〜ＨＡ３、及び２個の全加算器ＦＡ１、ＦＡ２を有する。
【０５６８】
ＰＦ０生成部Ｕ１は、Ｖｃｃ端子及びＶｓｓ端子間に、直列に接続されたＰＭＯＳトランジスタＱＰ１〜ＱＰ４、ＮＭＯＳトランジスタＱＮ１、及びＱＮ２を有する。これらトランジスタＱＰ１、ＱＰ２、ＱＰ３、ＱＰ４、ＱＮ１、及びＱＮ２は、それぞれ入力Ａ４、Ａ２、Ａ１、Ａ０、Ａ０、及びＡ３で制御される。
【０５６９】
また、ＰＦ０出力部Ｕ１は、その他に、ＰＭＯＳトランジスタＱＰ５、３個のＮＭＯＳトランジスタＱＮ３〜ＱＮ５、及びインバータＩＶ１を有する。
【０５７０】
トランジスタＱＰ５は、トランジスタＱＰ２のソース及びトランジスタＱＰ４のドレイン間に接続されている。トランジスタＱＮ３及びＱＮ４は、トランジスタＱＮ１のソース及びドレイン間に接続されている。また、トランジスタＱＮ５は、トランジスタＱＮ１のソース及びトランジスタＱＮ２のドレイン（Ｖｓｓ端子）間に接続されている。これらトランジスタＱＰ５、ＱＮ３、ＱＮ４、及びＱＮ５は、それぞれ入力Ａ３、Ａ１、Ａ２、及びＡ４で制御される。インバータＩＶ１は、入力がトランジスタＱＮ１、ＱＮ３、ＱＮ４、及びＱＮ５のソースに接続されている。このインバータＩＶ１の出力がキャリーＰＦ０になる。
【０５７１】
ＸＯＲゲートＧ１は、Ａｊ（ｊ＝０〜４）及びＰＦ０を入力し、Ｂｊを出力する。
【０５７２】
全加算器ＦＡ１は、入力がＢ０及びＰＦ０、桁上げ入力がＰＦ０、出力がＱ０、桁上げ出力がＣ０となっている。半加算器ＨＡ１は、入力がＣ０及びＢ１、出力がＱ１、桁上げ出力がＣ１となっている。半加算器ＨＡ２は、入力がＣ１及びＢ２、出力がＱ２、桁上げ出力がＣ２となっている。半加算器ＨＡ３は、入力がＣ２及びＢ３、出力がＱ３、桁上げ出力がＣ３となっている。全加算器ＦＡ２は、入力がＢ４及びＰＦ０、桁上げ入力がＣ３、出力がＱ４となっている。
【０５７３】
この具体例では入力が９以上になったらａの補数を１７に加えている。ａの補数は、ＰＦ０＝１の場合、ＸＯＲゲートＧ１でａの各ビット表示Ａｊを反転してＢｊとし、これに１を加えて生成されている。
【０５７４】
ｐ＝１７は、１７＝（１０００１）２であるので、これをＰＦ０で表し、更に、１としてＰＦ０を使い、これらとバイナリの和としてＢｊと加えている。
【０５７５】
“５  ｂｉｔ  ＬＭ  １７”回路は、クロックに非同期で動作し、入力を入れると計算されたリー・メトリックを出力する。
【０５７６】
以下において、デコード部１０９の回路構成例を説明する。
【０５７７】
エラー探索を終了し、エラーコードＥによって訂正されたリー・メトリック・コードＣが得られたら、これをＺｐのデータコードＡに戻す必要がある。この演算はＧを生成行列として、Ｃ＝ＡＧの逆演算を行うことに相当するが、行列の逆を得るのは規模の大きな演算となる。そのため、Ａの要素を逐次的にＣの要素から求めて行く。計算の過程を数４５に示す。
【０５７８】
［数４５］
0005204186.tif 000046
0005204186.tif 000047
0005204186.tif 000048
【０５７９】
数４５に示したように、ｃｊ＝Σ（ｊ）ｉ＋１ａｉの関係を順次変形して、ａ０からａ１、続いてａ１からａ２、・・・と逐次的にａｍを求めて行くことが計算の原理となる。
【０５８０】
両辺にｊの累乗の逆元を掛けてｊのＺｐの全ての元についての項として足し合わせる。このときＺｐの全ての元の和はゼロとなることを利用して変形している。
【０５８１】
数４６は、Ｃの成分とＡの成分の関係式である。
【０５８２】
［数４６］
0005204186.tif 000049
【０５８３】
次に、数４６に示した関係式を使って具体的な演算回路として実現したものを説明する。
【０５８４】
なお、ａｍ−１を得てから、ａｍを求めるときには、ｃ（ｍ−１）ｊを求めながらａｍでのｊについての和を順次計算して行くことによってクロックの並列利用を行う。
【０５８５】
始めに、数４６に示すｃ（ｍ−１）ｊ＝ｃ（ｍ−２）ｊ−（ｊ）ｍａｍ−１に基づき、リー・メトリック・コードＣの成分の変換を都度行う回路について説明する。以下において、この回路を“ｃ（ｍ−１）ｊ”回路ブロックと呼ぶ。
【０５８６】
図５８は、“ｃ（ｍ−１）ｊ”回路ブロックの回路記号を示す図であり、図５９は、“ｃ（ｍ−１）ｊ”回路ブロックのブロック図である。
【０５８７】
“ｃ（ｍ−１）ｊ”回路ブロックは、クロックｃｌｊ、／ｃｌｊに同期して動作する回路であり、（ｊ）ｍ、ａｍ−１、及びコード成分ｃ１〜ｃ１６を入力し、ｃ（ｍ−１）ｊを出力する。
【０５８８】
“ｃ（ｍ−１）ｊ”回路ブロックは、“Ｘ  Ｚｐ”回路ブロック、２つの“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞、＜２＞、及び“Ｒ（１〜１６）”レジスタ部を有する。
【０５８９】
“Ｘ  Ｚｐ”回路ブロックでは、（ｊ）ｍとａｍ−１との積を生成しインバータＩＶ１を介して“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞に出力する。
【０５９０】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞では、インバータＩＶ１を介して出力された出力（ｊ）ｍａｍ−１の補数を求め、−ｊｍａｍ−１を生成し、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜２＞に出力する。
【０５９１】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜２＞では、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜１＞から出力された−ｊｍａｍ−１と、クロックｃｌに同期して“Ｒ（１〜１６）”レジスタ部から出力されるｃｊ（＝ｃ（ｍ−２）ｊ）との和を生成する。この和が“ｃ（ｍ−１）ｊ”回路ブロックの出力であるｃ（ｍ−１）ｊとなる。この“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック＜２＞から出力されたｃ（ｍ−１）ｊは、クロックｃｌの立ち下がりに同期して“Ｒ（１〜１６）”レジスタ部の第ｊ番目のレジスタに記録される。
【０５９２】
続いて、数４６に示すａｍ＝１６−１Σ（ｊｍ＋１）−１ｃ（ｍ−１）ｊ（ｊ＝１〜１６）に基づき、ａｍを生成する回路について説明する。以下において、この回路を“ａｍ”回路ブロックと呼ぶ。
【０５９３】
図６０は、“ａｍ”回路ブロックの回路記号を示す図であり、図６１は、“ａｍ”回路ブロックのブロック図である。
【０５９４】
“ａｍ”回路ブロックは、クロックｃｌｊに同期して動作する回路であり、（ｊ）ｍ＋１、及びｃ（ｍ−１）ｊを入力し、ａｍを出力する。
【０５９５】
“ａｍ”回路ブロックは、“ｊ−１  ｄｅｃ”回路ブロック、２つの“Ｘ  Ｚｐ”回路ブロック＜１＞、＜２＞、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロック、及び“Ｒｇｓｔｒ”レジスタを有する。
【０５９６】
“ｊ−１  ｄｅｃ”回路ブロックでは、（ｊ）ｍ＋１を、その逆元（ｊ）−（ｍ＋１）に変換し、“Ｘ  Ｚｐ”回路ブロック＜１＞に出力する。
【０５９７】
“Ｘ  Ｚｐ”回路ブロック＜１＞は、“ｊ−１  ｄｅｃ”回路ブロックから入力された（ｊ）−（ｍ＋１）と、“ｃ（ｍ−１）ｊ”回路ブロックから出力されるｃｊ（＝ｃ（ｍ−１）ｊ）との積演算をし、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックに出力する。
【０５９８】
“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックから出力された積は、初期値が‘０’の“Ｒｇｓｔｒ”レジスタと“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックからなるループによって加算されて行く。この結果は、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックから“Ｘ  Ｚｐ”回路ブロック＜２＞に出力される。
【０５９９】
“Ｘ  Ｚｐ”回路ブロック＜２＞では、“５  ｂｉｔ  ＡＤ  ｍｏｄ  １７”回路ブロックから出力された和と１６−１＝１６との積を演算し、“ａｍ”回路ブロックの出力であるａｍを得る。
【０６００】
最後に、上記の“ｃ（ｍ−１）ｊ”回路ブロック及び“ａｍ”回路ブロックを用いてデータコードＡを得る計算回路について説明する。以下では、この計算回路を「逆変換回路」と呼ぶ。
【０６０１】
図６２中（Ａ）は、逆変換回路のブロック図であり、図６２中（Ｂ）は、この逆変換回路を制御するクロックｃｋ及びｃｌのタイミングチャートである。
【０６０２】
図６２中（Ｂ）に示すように、クロックｃｋ及びｃｌは、所定のクロックｃｋの立ち上がりから次のクロックｃｋの立ち上がりまでの間に、クロックｃｌが１６回立ち上がる関係となっている。
【０６０３】
逆変換回路は、逆変換のために必要なリー・メトリック・コードＣの成分の変換を都度行う第１の部分回路Ｕ１と、データコードＡの要素を一つ一つ求める第２の部分回路Ｕ２を有する。
【０６０４】
第１の部分回路Ｕ１は、“（ｊ）ｉ  （ｊ＝１  ｔｏ  １６）”回路ブロック、“Ｒｇｓｔｒ”レジスタ、及び“ｃ（ｍ−１）ｊ”回路ブロックを有する。
【０６０５】
第２の部分回路Ｕ２は、“（ｊ）ｉ  （ｊ＝１  ｔｏ  １６）”回路ブロック、“ａｍ”回路ブロック、及び“Ｌｉ（０〜１０）”レジスタ部を有する。
【０６０６】
このうち“（ｊ）ｉ  （ｊ＝１  ｔｏ  １６）”回路ブロックは、第１の回路部分Ｕ１と共有されている。“（ｊ）ｉ  （ｊ＝１  ｔｏ  １６）”回路ブロックは、“ａｍ”回路ブロックと“ｃ（ｍ−１）ｊ”回路ブロックで用いるＺｐの要素ｊのｍ＋１乗とｍ乗を発生する回路である。この回路ブロックは、クロックｃｋのサイクル数ｍ＋１及びこのサイクル回数よりも１少ない数ｍを指数とし、クロックｃｌのサイクル数をｊとして、（ｊ）ｍ＋１及び（ｊ）ｍを出力する。
【０６０７】
“（ｊ）ｉ  （ｊ＝１  ｔｏ  １６）”回路ブロックは、ｃｋの１サイクル目では、“ａｍ”回路ブロックに対してＺｐの要素そのものを出力し、“ｃ（ｍ−１）ｊ”回路ブロックに対しては‘１’を出力する。この“ｃ（ｍ−１）ｊ”回路ブロックに出力される‘１’は本来計算で利用されないものであるため、この‘１’が演算結果に影響を及ぼさないようにする工夫を施す必要がある。そこで、この‘１’の影響を無くすために、第１の部分回路Ｕ１の積演算では、クロックｃｋの最初のサイクルの際、もう一方の入力を‘０’とし、積演算の結果がゼロになるようにしている。
【０６０８】
第１の部分回路Ｕ１の“Ｒｇｓｔｒ”レジスタにはａｍが設定される。この設定されたａｍは、クロックｃｋ１以降のクロックｃｋのタイミングで“Ｒｇｓｔｒ”レジスタから出力される。即ち、“Ｒｇｓｔｒ”レジスタの出力ａｍ−１は、クロックｃｋｍのタイミングで出力される。
【０６０９】
クロックｃｋの最初のクロックサイクルｃｋ０では、“Ｒｇｓｔｒ”レジスタの出力ノードの初期値は‘０’に設定されており、上記のように計算結果に影響を与えないようになっている。
【０６１０】
“ｃ（ｍ−１）ｊ”回路ブロックは、クロックｃｋｍに同期して、“Ｒｇｓｔｒ”レジスタ及び“（ｊ）ｉ  （ｊ＝１  ｔｏ  １６）”回路ブロックからそれぞれ出力されるａｍ−１及び（ｊ）ｍが入力される。“ｃ（ｍ−１）ｊ”回路ブロックは、これらの入力ａｍ−１及び（ｊ）ｍから第１の部分回路Ｕ１の出力であるｃ（ｍ−１）ｊを得る。
【０６１１】
なお、“ｃ（ｍ−１）ｊ”回路ブロックの初期値は、復元されたコードデータＣとなっており、クロックｃｋ０での“Ｒｇｓｔｒ”レジスタの設定からｃ（−１）ｊ＝ｉｎｉｔ  Ｃである。
【０６１２】
第２の回路部分Ｕ２の“ａｍ”回路ブロックは、クロックｃｌの１６サイクル毎に、数４６に示した計算式に従ってａｍを得る。“ａｍ”回路ブロックが生成したａｍは、次の１６回のクロックｃｌのサイクルの開始タイミングとなるクロックｃｋｍ＋１によって“Ｌｉ（０〜１０）”レジスタ部の第ｍ番目のレジスタに格納される。
【０６１３】
全てのクロックサイクルが終了すると“Ｌｉ（０〜１０）”レジスタ部には、コードデータＡ設定され格納されている。
【０６１４】
＜まとめ＞
以上、第１の実施形態では、エラー訂正にシンドローム変換法を用いたｐ−ａｄｉｃ・ＮＡＮＤフラッシュメモリについて、具体的な構成を例示しながら説明した。
【０６１５】
第１の実施形態によれば、ｐ−ａｄｉｃセルに対するデータの書き込み、ｐ−ａｄｉｃセルに対するデータの読み出し等におけるレベル設定が甘い場合であっても、強力なエラー訂正能力によってデータの信頼性を確保することができる。  ［第２の実施形態］
第１の実施形態では、シンドローム変換法を「ｐ−ａｄｉｃ  Ｚｐ  ｗｏｒｌｄ」のデータ（コード）の処理に利用するメモリシステムについて説明した。この場合、メモリシステムに用いる回路の構成を単純にできる。しかし、訂正できるエラー量を増やした場合、エラー訂正に漏れのない探索をするためには探索の繰り返しが大きくなってしまい、処理時間が増大してしまう。
【０６１６】
第１の実施形態のようにエラー訂正にシンドローム変換法を用いた場合、エラー探索の際に必要となる計算の繰り返し回数は、例えば、ｐ＝１７の場合であって、訂正可能なリー・メトリックがε＝３の場合には最大で１６×１６＝２５６回、ε＝２の場合には最大で１６回で済む。一方、第１の実施形態で説明したように、訂正可能なリー・メトリックがε＝４の場合、エラーの探索の際に最大で１６×１６×１６＝４０９６回の計算処理を繰り返す必要がある。
【０６１７】
以上の点から、シンドローム変換法は、エラー量が小さいメモリシステムに搭載するエラー訂正システムに対しては有効であるが、逆に、エラー訂正可能量が大きい場合（例えば、ｐ＝１７、ε＝４）には、シンドローム変換法よりも従来のユークリッド反復法を用いた方が処理時間及び回路規模を小さくすることができる場合がある。
【０６１８】
そこで、第２の実施形態では、エラー訂正にユークリック法を用いたｐ−ａｄｉｃ・ＮＡＮＤフラッシュメモリについて説明する。
【０６１９】
図６３は、エラー訂正にユークリッド反復法を用いたメモリシステムのブロック図である。このメモリシステムは、ｐ＝１７、最大訂正可能エラー量をε＝４とした場合の構成となる。
【０６２０】
ｐ−ａｄｉｃメモリシステムは、１７進数変換部２０１、エンコード部２０２、ｐ−ａｄｉｃセルメモリ部２０３、シンドローム生成部２０４、解探索多項式生成部２０５、ユークリッド反復法処理部２０６、第１のハッセ微分多項式生成部２０７、第２のハッセ微分多項式生成部２０８、コード復元部２０９、デコード部２１０、及び２５進数変換部２１１を備える。
【０６２１】
このうち、１７進数変換部２０１、エンコード部２０２、及びｐ−ａｄｉｃセルフラッシュメモリ２０３の処理過程に関しては、図３３に示すｐ−ａｄｉｃメモリシステムにおける１７進数変換部１０１、エンコード部１０２、及びｐ−ａｄｉｃセルフラッシュメモリ１０３の処理過程と同じである。したがって、ここでは、ｐ−ａｄｉｃセルフラッシュメモリ１０３からコードＹを読み出した後の処理過程から説明する。
【０６２２】
エンコード部２０２でリー・メトリック・コード化されたコードＣは、ｐ−ａｄｉｃセルフラッシュメモリ２０３からエラーを含むコードＹとして読み出される。このコードＹは、シンドローム生成部２０４に入力される。
【０６２３】
シンドローム生成部２０４は、シンドローム行列Ｈ及びコードＹの各コード語成分を用いてＳ＝ＹＨｔからシンドロームＳの計算を行う。Ｓ＝０の場合、コードＹはエラーを含まないので、最後の処理のためにコードＹをデコード部２１０に出力する。一方、Ｓ≠０の場合であって、且つ、Ｓの最初の成分Ｓ０が｜Ｓ０｜＞５の場合、コードＹのエラーは確実に訂正できないため、ＮＧ信号を出力すると共に、最初の処理のためにエラーを含むコードＹをそのままデコード部２１０に出力する。その他の場合、シンドロームＳを解探索多項式生成部２０５に出力する。
【０６２４】
解探索多項式生成部２０５は、数４７に示す計算式より、シンドロームＳから多項式Ψ（ｘ）を求める。この多項式Ψ（ｘ）は、ユークリッド反復法処理部２０６に出力される。
【０６２５】
［数４７］
0005204186.tif 000050
【０６２６】
ユークリッド反復法処理部２０６は、ユークリッド反復法によってλ＝ｆｎ、ｖ＝ｐｎ−１の生成を試みる。λ及びｖを生成できた場合、これらの多項式λ（ｘ）及びｖ（ｘ）をそれぞれ第１及び第２のハッセ微分多項式生成部２０７及び２０８に出力する。一方、λやｖを生成できなかった場合、ＮＧ信号を出力するともに、最初の処理のためにエラーを含むコードＹをそのままエンコード部２１０に出力する。このユークリッド反復法処理部２０６の回路構成については後で詳述する。
【０６２７】
第１及び第２のハッセ微分多項式生成部２０７及び２０８は、それぞれ多項式λ（ｘ）とｖ（ｘ）からハッセ微分多項式を求め、これらの根ｒとその根の多重度ｎを求める。第１及び第２のハッセ微分多項式生成部２０７及び２０８は、得られた根ｒとその多重度ｎから、コード復元部２１０にｔ＝ｒ‐１を出力する。
【０６２８】
コード復元部２１０は、エラーの生じたコード語の位置座標ｔと、多重度ｎからエラー量ｅｔを求める。そして、ｃｔ＝ｙｔ−ｅｔからリー・メトリック・コードのコードＣ＝（ｃ１，ｃ２，・・・，ｃ１６）を復元する。
【０６２９】
以降のデコード部２１０及び２５進数変換部２１１の処理については、図３３に示すｐ−ａｄｉｃメモリシステムにおけるデコード部１０９及び２５進数変換部１１０と同じであるため省略する。
【０６３０】
以上、本実施形態に係るメモリシステムの場合、処理の反復と複雑さは全てユークリッド反復法に押し込められ、全体の処理フローは単純となる。
【０６３１】
なお、全体のシステム構成には大きく分けて２つ考えられ、図６３中ａで示す破線で囲まれたシステム構成と、図６３中ｂで示す一点鎖線で囲まれたシステム構成が考えられる。
【０６３２】
破線で囲まれたシステムは、ｐ−ａｄｉｃセルフラッシュメモリを搭載しており、これだけで１つのメモリシステムとして機能するものである。したがって、このメモリシステムの場合、第１の実施形態でも説明したｐ−ａｄｉｃセルフラッシュメモリを開発する必要がある。また、これに伴い、ｐ−ａｄｉｃセルへのレベル設定方法を、従来のＮＡＮＤ  ＭＬＣを用いるメモリシステムの場合から変更する必要がある。
【０６３３】
一点鎖線で囲まれたシステムは、メモリデバイスとして従来のＮＡＮＤ  ＭＬＣをそのまま用いるメモリコントローラとなる。したがって、このシステムは、データの書き込みの際にＺｐの要素をＭＬＣのレベルに対応させるようにデコードするＩ／Ｏを設けるだけで実現することができる。これにより、従来のＮＡＮＤ  ＭＬＣを利用してリー・メトリック・コードを用いたメモリシステムを構築することができる。但し、メモリコントローラを用いたメモリシステムの場合、ＭＬＣとＺｐとのマッピングのために多くの時間が必要となるため、高速なデータ処理システムとはならない。但し、データの信頼性を上げたデータ管理が可能であることには変わりない。
【０６３４】
ＭＬＣとＺｐのマッピングはＭＬＣのレベルのグループごとにページが異なるため、異なるページ間のデータをまとめて管理しない場合、１つのメモリセルのレベルをＺｐの要素として連続して対応付けすることができない。そこで、全てのページデータに対応するレジスタを設けて、Ｚｐの要素のバイナリ表示とのマッピングを行い、このレジスタ群の全てのページとのＮＡＮＤ  ＭＬＣメモリデバイス内の個別のページの一連のデータ転送を行なう必要がある。そのため、このマッピングに多くのロジックを要することになる。このマッピングは大きなレジスタとデコーダの集合とみなせるので詳細は記述しない。なお、ＮＡＮＤ  ＭＬＣのレベル数は２の累乗でありＺｐの要素数は素数であるから、８値セルの場合はｐ＝７、１６値セルの場合はｐ＝１３までの素数しか使えず、メモリセルの効率の観点からは、最適なシステムとはいえない。
【０６３５】
いずれのシステムを構築するかは、市場要求によるが、第１の実施形態或いは以下に示す第２の実施形態の説明によって、いずれのメモリシステムも実現することは可能である。
【０６３６】
＜ユークリッド法＞
先ず、ユークリッド反復法を用いたメモリシステムの前提として、ユークリッド法を用いる場合の一般的な関係式などをまとめて説明しておく。ここではγ＝ε＋１として説明する。
【０６３７】
ｐ−ａｄｉｃセルに記録されたコードＣのバイナリデータは、ｈビットからなるコード語シンボルがｐ−１個集まったものであり、ビット毎に様々な擾乱を受けて変化を起こす。そこで、コードＹからコードＣを復元するのがデコードである。このデコードに先立ち、始めにシンドロームを求める。
【０６３８】
シンドロームＳはシンドローム行列Ｈを利用したＳ＝ＹＨｔの演算をして数４８に示す要素Ｓ０、Ｓ１、…、Ｓγ−１として求まる。
【０６３９】
［数４８］
0005204186.tif 000051
【０６４０】
ここで、ＨｔはＨの転置行列である。生成行列Ｇとシンドローム行列Ｈの構成がＧＨｔ＝０（ｍｏｄ  ｐ）となるように構成されていることにより、Ｙ＝Ｃ＋ＥとおくとＳ＝ＥＨｔとなる。またＥ＝（ｅ１，ｅ２，・・・，ｅｐ−１）とすると、シンドロームＳ０は各コード語シンボルのエラーの総和になっていることが分かる。これらのシンドロームＳが唯一のエラーの情報であり、これらシンドロームＳを基にして以下のように、正しいコードＣの復元を行う。
【０６４１】
続いて、デコードの原理を説明する。ｎ（＝ｐ−１）個のエラーのシンボルを二つの組Ｊ＋とＪ−に、数４９のように分類する。
【０６４２】
［数４９］
0005204186.tif 000052
【０６４３】
すなわち、シンボルのエラー量がｅｊ＜ｐ／２の場合、コードシンボルｃｊの位置ｊの集まりであるＪ＋と、シンボルのエラー量がｅｊ＞ｐ／２の場合のコードシンボルｃｊの位置ｊの集まりであるＪ−とに分類される。ガロア体ＧＦ（ｐ）上の多項式Λ（ｘ）、Ｖ（ｘ）をこれらの組を基に数５０のように構成する。
【０６４４】
［数５０］
0005204186.tif 000053
【０６４５】
このように、多項式Λ（ｘ）はＪ＋のエラーコード語シンボルの位置ｊの逆数を根として持ち、そのコード語シンボルのリー・メトリックｅｊを根の多重度として持つ多項式となる。一方、多項式Ｖ（ｘ）はＪ−のエラーコード語シンボルの位置ｊの逆数を根として持ち、そのコード語シンボルのリー・メトリックｐ−ｅｊを根の多重度として持つ多項式となる。デコードは、最終的にこれらの多項式をシンドロームＳｌの情報のみから構成して解くことによってエラーの情報を得る過程となる。つまり、これら多項式Λ（ｘ）、Ｖ（ｘ）とシンドロームＳｌとの関係を求める必要がある。
【０６４６】
続いて、数５１に示すように各シンドロームＳｌをその次数の係数に持つ級数多項式で構成すると、シンボルのエラー量ｅｊ、位置ｊとその値を持つ有理多項式で表される。
【０６４７】
［数５１］
0005204186.tif 000054
【０６４８】
数５１から、多項式Λ（ｘ）、Ｖ（ｘ）、シンドロームＳ（ｘ）の間には数５２に示す関係式が成立する。
【０６４９】
［数５２］
0005204186.tif 000055
【０６５０】
続いて、数５２に示す関係式を利用して、シンドロームＳ（ｘ）から多項式Λ（ｘ）、Ｖ（ｘ）を求める。
【０６５１】
シンドロームＳ（ｘ）から、数５３に示す次数がγ−１以下の多項式Ψ（ｘ）を求める。
【０６５２】
［数５３］
0005204186.tif 000056
【０６５３】
多項式Ψ（ｘ）の展開式において、数５３に示す式の両辺の同次次数の係数の比較から、係数ψｊは、シンドロームＳｉと既に求まっている係数ψｊ−１とを用いて反復法で求めることができる。シンドロームＳ１〜Ｓγ−１から多項式Ψ（ｘ）の係数ψ０〜ψγ−１を求めた結果を数５４に示す。
【０６５４】
［数５４］
0005204186.tif 000057
【０６５５】
この多項式Ψ（ｘ）はΛ（ｘ）／Ｖ（ｘ）に等価な多項式であるが、多項式Λ（ｘ）、Ｖ（ｘ）には、数５５に示すキー条件がある。そのため、ｘγと多項式Ψ（ｘ）に対してユークリッド法で定数倍を除いて求めることができる。
【０６５６】
［数５５］
0005204186.tif 000058
【０６５７】
したがって、シンドロームＳ１〜Ｓγ−１から多項式Ψ（ｘ）が構成できれば、反復法の停止条件としてシンドロームＳ０を用いて多項式Λ（ｘ）、Ｖ（ｘ）が求まる。すなわち、反復法によって（Ｓ０，Ψ（ｘ））の組から求めた多項式Λ（ｘ）、Ｖ（ｘ）は、エラーコード語シンボルの位置ｊとエラー量ｅｊを表している。
【０６５８】
＜ユークリッド反復法によるエラー訂正＞
次に、ユークリッド反復法について説明する。ここでは、合同式ｖ（ｘ）Ψ（ｘ）≡λ（ｘ）（ｍｏｄ  ｘγ）を停止条件ｄｅｇ  λ（ｘ）−ｄｅｇ  ｖ（ｘ）≡Ｓ０（ｍｏｄ  ｐ）で求める反復法について説明する。
【０６５９】
ユークリッド反復法は、関数ｆ０、ｆ１、…、ｆｎを多項式の割り算を用いて順に求めて行く方法である。これらの量の間には数５６に示す関係がある。
【０６６０】
［数５６］
0005204186.tif 000059
0005204186.tif 000060
0005204186.tif 000061
0005204186.tif 000062
0005204186.tif 000063
0005204186.tif 000064
【０６６１】
ここで、数５７の示すように、特に割り算の過程で得られる商多項式ｋｎからｐｎやｑｎを逐次導入することによって、これらの多項式が簡単な関係を満足することから、ｆｎをｆ０、ｆ１、ｐｎ−１、及びｑｎ−１で表すことができる。そこでｆ０＝ｘγ、ｆ１＝Ψ（ｘ）とおいてｘγでの合同式を作ると、反復の停止条件はｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１≡Ｓ０（ｍｏｄ  ｐ）となる。この停止条件を満たすｎについてｄｅｇ  ｆｎ＋ｄｅｇ  ｐｎ−１＜γならλ（ｘ）＝ｆｎ、Ｖ（ｘ）＝ｐｎ−１とおくことができる。
【０６６２】
γ＝ε＋１であるので、例えば、エラー４に対する計算では反復回数も４回程度で良い。その点、ユークリッド反復法を用いた場合、演算回路の規模は増大するが、計算回数はシンドローム変換法に比べて格段に少なくできる。
【０６６３】
以下では、具体的な回路構成について、シンドローム変換法から大きく異なる点について詳述していく。
【０６６４】
＜シンドローム生成部の回路構成＞
次に、シンドローム生成部２０４の回路構成例として、シンドロームＳの成分要素を一括して求める演算回路を説明する。以下、この演算回路を「シンドローム成分要素生成回路」と呼ぶ。
【０６６５】
シンドローム成分要素生成回路は、数５７に示す関係式に基づいて構成されている。
【０６６６】
［数５７］
0005204186.tif 000065
【０６６７】
図６４中（Ａ）は、シンドローム成分要素生成回路のブロック図であり、図６４中（Ｂ）は、シンドローム成分要素生成回路を制御するクロックｃｋｉ（ｉ＝０〜ε＋１）、ｃｌｊ（ｊ＝１〜ｐ−１）のタイミングチャートである。
【０６６８】
シンドローム成分要素生成回路は、図６４中（Ａ）に示すように、“Ｒｏ（１〜ｐ−１）”レジスタ部、“（ｊ）ｉ（ｊ＝１  ｔｏ  ｐ−１）”回路ブロック、“Ｘ  Ｚｐ”回路ブロック、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック、“Ｒｇｓｔｒ”レジスタ、及び“Ｒｉ（０〜ε）”レジスタ部を有する。
【０６６９】
ｐ−ａｄｉｃセルアレイから読み出されたデータＹは“Ｒｏ（１〜ｐ−１）”レジスタに初期設定として格納される。“（ｊ）ｉ（ｊ＝１  ｔｏ  ｐ−１）”回路ブロックからは（ｊ）ｉを発生させる。これら“Ｒｏ（１〜ｐ−１）”レジスタ及び“（ｊ）ｉ（ｊ＝１  ｔｏ  ｐ−１）”回路ブロックは、クロックｃｌｉによって同期され、Ｙの成分ｙｊが出力されると同時に（ｊ）ｉが出力されるように制御される。これらの積（ｊ）ｉｙｊを“Ｘ  Ｚｐ”回路ブロックで生成し、クロックｃｌｊ（ｊ＝１〜ｐ−１）と同期して、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック及び“Ｒｇｓｔｒ”レジスタのループによって加算していき、シンドローム成分Ｓｉを作る。得られたＳｉをクロックｃｋｉ＋１で“Ｒｉ（０〜ε）”レジスタの第ｉ番目のレジスタに格納する。この過程をクロックｃｋｉのｉ＝０〜εについて処理し、全てのシンドローム成分を得て“Ｒｉ（０〜ε）”レジスタ部に格納する。
【０６７０】
以下において、ユークリッド反復法処理部２０６の回路構成例を説明する。
【０６７１】
始めに、ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２の計算のｋｎを求める回路について説明する。以下において、この回路を“ｋｎ”回路ブロックと呼ぶ。
【０６７２】
“ｋｎ”回路ブロックは、数５８に示す関係式に基づいて構成されている。
【０６７３】
［数５８］
0005204186.tif 000066
【０６７４】
“ｋｎ”回路ブロックは、数５８に示した係数間の関係を用いて既知の係数から未知の係数を求める。なお、ｋｎの多項式は１次であるとして、計算の過程では最高次の係数が０になる場合も係数を０として、計算の手順は逐次進めるようにする。このとき０の逆元は０として、係数間の関係式は常に成り立つようにする。
【０６７５】
図６５は、“ｋｎ”回路ブロックの回路記号を示す図であり、図６６は、“ｋｎ”回路ブロックのブロック図である。
【０６７６】
“ｋｎ”回路ブロックは、図６５に示すように、ａ（ｎ）ｍ−１及びａ（ｎ）ｍを入力し、ａ（ｎ＋１）ｍ−１、ａ（ｎ＋１）ｍ−２、ｂ（ｎ）１、及びｂ（ｎ）０を出力する。
【０６７７】
“ｋｎ”回路ブロックは、３つの“Ｘ  Ｚｐ”回路ブロック＜１＞、＜２＞、＜３＞、２つの“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞、＜２＞、“ｊ−１  ｄｅｃ”回路ブロック、ＸＮＯＲゲートＧ１、及びＯＲゲートＧ２を有する。
【０６７８】
“Ｘ  Ｚｐ”回路ブロック＜１＞は、ａ（ｎ＋１）ｍ−２及びｂ（ｎ）１で積演算する。この結果ｂ（ｎ）１ａ（ｎ＋１）ｍ−２は、インバータＩＶ１を介して“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞に出力される。
【０６７９】
“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞は、インバータＩＶ１の出力及び‘１’を入力し、ｂ（ｎ）１ａ（ｎ＋１）ｍ−２の補数を得る。
【０６８０】
“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞は、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞の出力及びａ（ｎ）ｍ−１を入力し、その結果ａ（ｎ）ｍ−１−ｂ（ｎ）１ａ（ｎ＋１）ｍ−２を“Ｘ  Ｚｐ”回路ブロック＜２＞に出力する。
【０６８１】
“ｊ−１  ｄｅｃ”回路ブロックは、ａ（ｎ＋１）ｍ−１を入力し、その逆元（ａ（ｎ＋１）ｍ−１）−１を“Ｘ  Ｚｐ”回路ブロック＜２＞及び＜３＞に出力する。
【０６８２】
“Ｘ  Ｚｐ”回路ブロック＜２＞は、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞の出力ａ（ｎ）ｍ−１−ｂ（ｎ）１ａ（ｎ＋１）ｍ−２及び“ｊ−１  ｄｅｃ”回路ブロックの出力（ａ（ｎ＋１）ｍ−１）−１で積演算し、その結果ｂ´（ｎ）０を得る。
【０６８３】
“Ｘ  Ｚｐ”回路ブロック＜３＞は、ａ（ｎ）ｍ及び“ｊ−１  ｄｅｃ”回路ブロックの出力（ａ（ｎ＋１）ｍ−１）−１で積演算し、“ｋｎ”回路ブロックの出力であるｂ（ｎ）１を得る。
【０６８４】
ＸＮＯＲ回路Ｇ１は、“Ｘ  Ｚｐ”回路ブロック＜２＞の出力ｂ´（ｎ）０及び“Ｘ  Ｚｐ”回路ブロック＜３＞の出力ｂ（ｎ）１を入力する。また、ＯＲ回路Ｇ２は、ＸＮＯＲ回路の出力及びｂ´（ｎ）０を入力する。この場合、ＯＲ回路Ｇの出力が“ｋｎ”回路ブロックの出力ｂ（ｎ）０になる。
【０６８５】
続いて、ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２の計算のｆｎ＋２を求める回路について説明する。以下において、この回路を“ｆｎ”回路ブロックと呼ぶ。
【０６８６】
“ｆｎ”回路ブロックは、数５９に示す関係式に基づいて構成されている。
【０６８７】
［数５９］
0005204186.tif 000067
【０６８８】
“ｆｎ”回路ブロックは、数５９に示した係数間の関係を用いて既知の係数から未知の係数を求める。なお、既に得られているｋｎの多項式の係数を利用する。
【０６８９】
図６７は、“ｆｎ”回路ブロックの回路記号を示す図であり、図６８は、“ｆｎ”回路ブロックのブロック図である。
【０６９０】
“ｆｎ”回路ブロックは、図６７に示すように、ａ（ｎ＋１）ｍ−１、ａ（ｎ＋１）ｍ、ａ（ｎ）ｍ、ｂ（ｎ）１、及びｂ（ｎ）０を入力しａ（ｎ＋２）ｍを出力する。
【０６９１】
“ｆｎ”回路ブロックは、２つの“Ｘ  Ｚｐ”回路ブロック＜１＞、＜２＞、３つの“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞、＜２＞、及び＜３＞を有する。
【０６９２】
“Ｘ  Ｚｐ”回路ブロック＜１＞は、ａ（ｎ＋１）ｍ−１及びｂ（ｎ）１で積演算し、この結果ｂ（ｎ）１ａ（ｎ＋１）ｍ−１を“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞に出力する。
【０６９３】
“Ｘ  Ｚｐ”回路ブロック＜２＞は、ａ（ｎ＋１）ｍ及びｂ（ｎ）０で積演算し、この結果ｂ（ｎ）０ａ（ｎ＋１）ｍを“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞に出力する。
【０６９４】
“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞は、“Ｘ  Ｚｐ”回路ブロック＜１＞の出力ｂ（ｎ）１ａ（ｎ＋１）ｍ−１及び“Ｘ  Ｚｐ”回路ブロック＜２＞の出力ｂ（ｎ）０ａ（ｎ＋１）ｍを入力する。この“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞の出力は、インバータＩＶ１を介して“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞に入力される。
【０６９５】
“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞は、インバータＩＶ１の出力及び‘１’を入力し、（ｂ（ｎ）０ａ（ｎ＋１）ｍ＋ｂ（ｎ）１ａ（ｎ＋１）ｍ−１）の補数を得る。
【０６９６】
“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜３＞は、ａ（ｎ）ｍ及び“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞の出力を入力し、この“ｆｎ”回路ブロックの出力であるａ（ｎ＋２）ｍを得る。
【０６９７】
続いて、ｐｎ＝ｋｎ−１ｐｎ−１＋ｐｎ−２の計算のｐｎ−２を求める回路について説明する。以下において、この回路を“ｐｎ”回路ブロックと呼ぶ。
【０６９８】
“ｐｎ”回路ブロックは、数６０に示す関係式に基づいて構成されている。
【０６９９】
［数６０］
0005204186.tif 000068
【０７００】
“ｐｎ”回路ブロックは、数６０に示した係数間の関係を用いて既知の係数から未知の係数を求める。なお、既に得られているｋｎの多項式の係数を利用する。
【０７０１】
図６９は、“ｐｎ”回路ブロックの回路記号を示す図であり、図７０は、“ｐｎ”回路ブロックのブロック図である。
【０７０２】
“ｐｎ”回路ブロックは、図６９に示すように、ａ（ｎ）ｍ−１、ａ（ｎ）ｍ、及びａ（ｎ−１）ｍを入力し、ａ（ｎ＋１）ｍを出力する。
【０７０３】
“ｐｎ”回路ブロックは、図７０に示すように、２つの“Ｘ  Ｚｐ”回路ブロック＜１＞、＜２＞、２つの“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞、及び＜２＞を有する。
【０７０４】
“Ｘ  Ｚｐ”回路ブロック＜１＞は、ａ（ｎ）ｍ−１及びｂ（ｎ）１で積演算し、この結果ｂ（ｎ）１ａ（ｎ）ｍ−１を“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞に出力する。
【０７０５】
“Ｘ  Ｚｐ”回路ブロック＜２＞は、ａ（ｎ）ｍ及びｂ（ｎ）０で積演算し、この結果ｂ（ｎ）０ａ（ｎ）ｍを“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞に出力する。
【０７０６】
“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞は、“Ｘ  Ｚｐ”回路ブロック＜１＞の出力ｂ（ｎ）１ａ（ｎ）ｍ−１及び“Ｘ  Ｚｐ”回路ブロック＜２＞の出力ｂ（ｎ）０ａ（ｎ）ｍを入力し、ｂ（ｎ）０ａ（ｎ）ｍ＋ｂ（ｎ）１ａ（ｎ）ｍ−１を“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞に出力する。
【０７０７】
“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞は、ａ（ｎ−１）ｍ及び“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞の出力ｂ（ｎ）０ａ（ｎ）ｍ＋ｂ（ｎ）１ａ（ｎ）ｍ−１を入力し、“ｐｎ”回路ブロックの出力であるａ（ｎ＋１）ｍを得る。
【０７０８】
続いて、ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２の計算回路について説明する。以下において、この回路を“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックと呼ぶ。
【０７０９】
図７１は、“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックの回路記号を示す図であり、図７２は、“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックのブロック図である。
【０７１０】
“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックは、図７１に示すように、ｆｎの係数ａ０〜ａγ、及びｆｎ＋１の係数ｂ０〜ｂγを入力し、ｆｎ＋２の係数ｃ０〜ｃγ、及びｋｎの係数β０〜β１を出力する。
【０７１１】
計算は、ｆ０＝ｘγ、ｆ１＝Ψ（ｘ）とおいて開始されるため、ｆｎの最大次数はγとなり、ｆｎ＋２の最大次数もｋｎが１の場合もあるためγとなる。このため、“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックは、図７２に示すように、γ＋１個の“ｋｎ”回路ブロック＜１＞〜＜γ＋１＞、及びγ＋１個の“ｆｎ”回路ブロック＜１＞〜＜γ＋１＞を有する。
【０７１２】
“ｋｎ”回路ブロック＜１＞は、ａ（ｎ＋１）ｍ−２、ａ（ｎ）ｍ−１、ａ（ｎ＋１）ｍ−１、及びａ（ｎ）ｍとして、それぞれ‘０’、ａ０、ｂ０、及びａ１を対応付け、ｂ（ｎ）０、及びｂ（ｎ）１として、それぞれβ（０）０、及びβ（０）１を対応付ける。
【０７１３】
“ｋｎ”回路ブロック＜２＞は、ａ（ｎ＋１）ｍ−２、ａ（ｎ）ｍ−１、ａ（ｎ＋１）ｍ−１、及びａ（ｎ）ｍとして、それぞれｂ０、ａ１、ｂ１、及びａ２を対応付け、ｂ（ｎ）０、及びｂ（ｎ）１として、それぞれβ（１）０、及びβ（１）１を対応付ける。
【０７１４】
以降、“ｋｎ”回路ブロック＜３＞〜＜γ＋１＞についても、“ｋｎ”回路ブロック＜１＞及び＜２＞と同様の入出力となっている。
【０７１５】
“ｋｎ”回路ブロック＜１＞〜＜γ＋１＞の出力β（ｍ）０及びβ（ｍ）１（ｍ＝０〜γ）は、それぞれｄｅｇ（ｂ１，ｂ２，・・・，ｂγ）＝ｍで制御される制御スイッチＳＷを介して“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックからβ０及びβ１として出力される。また、このβ０及びβ１は、“ｆｎ”回路ブロック＜１＞〜＜γ＋１＞の入力としても利用される。ここで、ｄｅｇ（）は、ｆｎ＋１の次数判別回路出力を表わす。
【０７１６】
“ｆｎ”回路ブロック＜１＞は、ａ（ｎ＋１）ｍ−１、ａ（ｎ＋１）ｍ、ａ（ｎ）ｍ、ｂ（ｎ）０、及びｂ（ｎ）１として、それぞれ‘０’、ｂ０、ａ０、β０、及びβ１を入力し、ａ（ｎ＋２）ｍとしてｃ０を出力する。
【０７１７】
“ｆｎ”回路ブロック＜２＞は、ａ（ｎ＋１）ｍ−１、ａ（ｎ＋１）ｍ、ａ（ｎ）ｍ、ｂ（ｎ）０、及びｂ（ｎ）１として、それぞれｂ０、ｂ１、ａ１、β０、及びβ１を入力し、ａ（ｎ＋２）ｍとしてｃ１を出力する。
【０７１８】
以降、“ｆｎ”回路ブロック＜３＞〜＜γ＋１＞についても、“ｆｎ”回路ブロック＜１＞及び＜２＞と同様の入出力となっている。
【０７１９】
“ｆｎ”回路ブロック＜１＞〜＜γ＋１＞の出力が、“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックの出力であるｃ０〜ｃγとなる。
【０７２０】
続いて、ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１の計算回路について説明する。以下において、この回路を“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロックと呼ぶ。
【０７２１】
図７３は、“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロックの回路記号を示す図であり、図７４は、“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロックのブロック図である。
【０７２２】
“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロックは、図７３に示すように、ｋｎの係数β０、β１、ｐｎ−１の係数ａ０〜ａγ−１、及びｐｎの係数ｂ０〜ｂγ−１を入力し、ｐｎ＋１の係数ｃ０〜ｃγ−１を出力する。
【０７２３】
計算は、ｐ−１＝０、ｐ０＝１とおいて開始し、ｍｏｄ  ｘγでｐｎ＋１を利用するため、ｐｎ＋１の最大次数はγ−１となる。このため、“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロックは、γ個の“ｐｎ”回路ブロック＜１＞〜＜γ＞を有する。
【０７２４】
“ｐｎ”回路ブロック＜１＞は、ａ（ｎ）ｍ−１、ａ（ｎ）ｍ、ａ（ｎ−１）ｍ、ｂ（ｎ）０、及びｂ（ｎ）１として、それぞれ‘０’、ｂ０、ａ０、β０、及びβ１を入力し、ａ（ｎ＋１）ｍとしてｃ０を出力する。
【０７２５】
“ｐｎ”回路ブロック＜２＞は、ａ（ｎ）ｍ−１、ａ（ｎ）ｍ、ａ（ｎ−１）ｍ、ｂ（ｎ）０、及びｂ（ｎ）１として、それぞれｂ０、ｂ１、ａ１、β０、及びβ１を入力し、ａ（ｎ＋１）ｍとしてｃ１を出力する。
【０７２６】
以降、“ｐｎ”回路ブロック＜３＞〜＜γ＞についても、“ｐｎ”回路ブロック＜１＞及び＜２＞と同様の入出力となっている。
【０７２７】
“ｐｎ”回路ブロック＜１＞〜＜γ＞の出力が、“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロックの出力であるｃ０〜ｃγ−１となる。
【０７２８】
続いて、０からｎまでの反復計算によってｆｎ及びｐｎ−１を求める計算回路について説明する。
【０７２９】
図７５は、ｆｎを求める計算回路であり、図７６は、ｐｎ−１を求める計算回路である。
【０７３０】
ｆｎを求める計算回路は、図７５に示すように、“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックの他、３つの“ｈ（γ＋１）”レジスタ部＜１＞〜＜３＞を有する。“ｈ（γ＋１）”レジスタ部＜１＞〜＜３＞は、それぞれｈビットのラッチをγ＋１個有する。“ｈ（γ＋１）”レジスタ部＜１＞〜＜３＞には、対応する入力がない場合‘０’が設定される。ｆｎの計算は、“ｆｎ＝ｋｎｆｎ＋１＋ｆｎ＋２”回路ブロックとこの周辺に設けられた３つの“ｈ（γ＋１）”レジスタ部＜１＞〜＜３＞によって、データを巡回転送して進められる。
【０７３１】
ｐｎ＋１を求める計算回路は、図７６に示すように、“ｐｎ＋１＝ｋｎｐｎ＋ｐｎ−１”回路ブロックの他、“ｈγ”レジスタ部＜１＞〜＜３＞を有する。“ｈγ”レジスタ部＜１＞〜＜３＞は、それぞれｈビットのラッチをγ個有する。“ｈγ”レジスタ部＜１＞〜＜３＞には、対応する入力がない場合‘０’が設定される。ｐｎ＋１の計算は、“ｐｎ＋１＝ｋｎｐｎ＋ｆｎ−１”回路ブロックとこの周辺に設けられた３つの“ｈγ”レジスタ部＜１＞〜＜３＞によって、データを巡回転送して進められる。
【０７３２】
ｆｎ及びｐｎ−１の計算は、クロックｃｌのサイクル毎に進行し、このクロックｃｌのサイクルを０から数えた数がユークリッド反復法のｎに対応する。最終的に、“ｈ（γ＋１）”レジスタ部＜１＞にｆｎが保持され、“ｈγ”レジスタ部＜１＞にｐｎ−１が保持される。
【０７３３】
最初のクロックサイクルｃｌ０において、“ｈ（γ＋１）”レジスタ部＜１＞〜＜３＞、及び“ｈγ”レジスタ部＜１＞〜＜３＞レジスタには、それぞれ図７５、及び図７６に示すような初期値が設定される。
【０７３４】
即ち、ｆｎを求める回路では、ｆ０＝ｘγの係数が“ｈ（γ＋１）”レジスタ部＜１＞に、ｆ１＝Ψ（ｘ）の係数が“ｈ（γ＋１）”レジスタ部＜３＞にそれぞれ設定さる。また、ｐｎ−１を求める回路では、ｐ−１＝‘０’が“ｈγ”レジスタ部＜１＞に、ｐ０＝‘１’が“ｈγ”レジスタ部＜３＞に設定される。以後、クロックサイクルを進める度に、ｃｌｎサイクルの始めにｆｎやｐｎ−１が、それぞれ対応するレジスタ部に保持される。
【０７３５】
“ｈ（γ＋１）”レジスタ部＜１＞、“ｈγ”レジスタ部＜１＞は、信号／ＩＳＴＯＰによって入力が遮断されるため、その時点で“ｈ（γ＋１）”レジスタ部＜１＞、“ｈγ”レジスタ部＜１＞のデータは確定する。ここで、信号／ＩＳＴＯＰは、後述するユークリッド反復法の停止条件を満たす場合に活性化される信号である。
【０７３６】
以上によって、“ｈ（γ＋１）”レジスタ部＜１＞、“ｈγ”レジスタ部＜１＞に、それぞれ所望の結果の多項式の係数を得ることができる。
【０７３７】
これら係数を、第１のハッセ微分多項式生成部２０７、第２のハッセ微分多項式生成部２０８に入力することで、ハッセ微分多項式の根と多重度を求めることができる。
【０７３８】
図７５及び図７６に示す信号／ＩＳＴＯＰ、即ちユークリッド反復法の停止条件を求めるためには、計算の結果の多項式の次数を判別する必要がある。そこで、得られたｆｎやｐｎ−１の係数ａｊ（ｊ＝０〜γ）から次数をバイナリ表示する回路について説明する。以下において、この回路を“ＤＥＧ”回路ブロックと呼ぶ。
【０７３９】
図７７は、“ＤＥＧ”回路ブロックの回路記号を示す図であり、図７８は、“ＤＥＧ”回路ブロックのブロック図である。
【０７４０】
“ＤＥＧ”回路ブロックは、図７７に示すように、ａ１〜ａγを入力し、次数のバイナリ表示ｂ０〜ｂｈ−１を出力する。
【０７４１】
“ＤＥＧ”回路ブロックは、図７８に示すように、“ｈ  ｂｉｔ  ｒｅｇ．”レジスタ＜１＞〜＜γ＞、ＯＲゲートＧ０＜１＞〜＜γ＞、Ｇ１＜０＞〜＜γ−１＞、及び“Ａ  ｔｏ  ｄｅｇ  ＤＥＣ．”回路ブロックを有する。
【０７４２】
“ｈ  ｂｉｔ”レジスタには、それぞれγ次の多項式の係数ａ１〜ａγを示すｈビットのバイナリデータが保持されている。これら係数ａ１〜ａγを示すｈビットのバイナリデータは、それぞれＯＲゲートＧ０＜１＞〜＜γ＞に入力される。
【０７４３】
ＯＲゲートＧ０＜ｎ＞（ｎ＝１〜γ）には、ａｎを示すｈビットのバイナリデータが入力される。ＯＲゲートＧ０＜１＞は、ａｎ＝０の場合‘０’を出力し、ａｎ≠０の場合‘１’を出力する。つまり、ＯＲゲートＧ０＜ｎ＞は、ａｎが０から０以外かを判別している。
【０７４４】
ＯＲゲートＧ１＜ｍ＞（ｍ＝１〜γ−１）には、ＯＲゲートＧ０＜ｍ＞〜＜γ＞が入力される。そして、ＯＲゲートＧ１＜１＞〜＜γ−１＞の出力がそれぞれＡ１〜Ａγ−１となる。また、ＯＲゲートＧ０＜γ＞の出力が、そのままＡγとなる。これらＡ１〜Ａγは、“Ａ  ｔｏ  ｄｅｇ  ＤＥＣ．”回路ブロックに入力される。
【０７４５】
“Ａ  ｔｏ  ｄｅｇ  ＤＥＣ．”回路ブロックは、図７８中Ｔ１で示すＡ１〜Ａγと次数のバイナリ表示との対応関係を実現するデコーダ回路である。Ａｊ（ｊ＝１〜γ）の‘１’の総和が次数のバイナリ表示に対応している。
【０７４６】
“Ａ  ｔｏ  ｄｅｇ  ＤＥＣ．”は、図７８中Ｔ１に示す対応表に基づいて、Ａ１〜Ａγから“ＤＥＣ”回路ブロックの出力であるｂ０〜ｂｈ−１を得る。なお、次数γはｐ以下であるので、ｈビットで表示することができる。
【０７４７】
最後に、ユークリッド反復法で得られたｆｎ及びｐｎ−１から、リー・メトリック・コードのキー条件を満たして反復を停止し、且つ、エラー訂正可能条件を満たしているかどうかの判定を行なう回路について説明する。
【０７４８】
図７９は、ユークリッド反復法の停止条件の判定、つまり信号／ＩＳＴＯＰを生成する回路のブロック図である。
【０７４９】
この回路は、２つの“ＤＥＧ”回路ブロック＜１＞、＜２＞、２つの“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞、＜２＞、及び複数の論理ゲートからなる部分回路Ｕ１を有する。
【０７５０】
“ＤＥＧ”回路ブロック＜１＞は、ａ１〜ａγとしてｆｎを入力し、ｂ０〜ｂｈ−１としてｆｎのバイナリ表示であるｄｅｇ  ｆｎを出力する。このｄｅｇ  ｆｎは、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞に入力される。
【０７５１】
“ＤＥＧ”回路ブロック＜２＞は、ａ１〜ａγとしてｐｎ−１を入力し、ｂ０〜ｂｈ−１としてｐｎ−１のバイナリ表示であるｄｅｇ  ｐｎ−１を出力する。このｄｅｇ  ｐｎ−１は、インバータＩＶ１を介して“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞に入力される。
【０７５２】
“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜１＞は、インバータＩＶ１を介して入力されるｄｅｇ  ｐｎ−１及び‘１’からｄｅｇ  ｐｎ−１の補数を得る。このｄｅｇ  ｐｎ−１の補数は、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞に出力される。
【０７５３】
ユークリッド反復法の停止条件は、ｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１≡Ｓ０（ｍｏｄ  ｐ）であるため、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック＜２＞にｄｅｇ  ｆｎ及びｄｅｇ  ｐｎ−１の補数を入力し、ｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１をＺｐの数として得る。この結果は、バイナリ表示のビット毎にＳ０と比較するために、部分回路Ｕ１に出力される。
【０７５４】
部分回路Ｕ１は、ｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１とＳ０とをビット毎に比較するためビット毎の排他的論理和を取る。全てのビット（ｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１）ｊ（ｊ＝０〜ｈ−１）と（Ｓ０）ｊが一致する場合、部分回路Ｕ１は、信号／ＩＳＴＯＰとして‘０’を出力する。つまり、信号／ＩＳＴＯＰは、（ｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１）０（＋）（Ｓ０）０∨・・・∨（ｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１）ｍ（＋）（Ｓ０）ｍ∨・・・∨（ｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１）ｈ−１（＋）（Ｓ０）ｈ−１となる。以上によって、部分回路Ｕ１は、ｄｅｇ  ｆｎ−ｄｅｇ  ｐｎ−１とＳ０が一致するか否かを実現している。
【０７５５】
図８０は、ユークリッド反復法の成功条件を判定する回路のブロック図である。
【０７５６】
この回路は、ＮＡＮＤゲートＧ１、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロック、後述する“ｈ  ｂｉｔ  γ≦”回路ブロック、及びＮＯＲゲートＧ２を有する。
【０７５７】
ＮＡＮＤゲートＧ１は、ユークリッド反復法が停止条件を満たさず停止しない場合に備えて設けられている。ｆｎの次数が１、ｆｎ＋１の次数が０、信号／ＩＳＴＯＰの逆論理の信号／ＩＳＴＯＰｎが１のとき、つまり、（ｄｅｇ  ｆｎ＝１）∧（ｄｅｇ  ｆｎ＋１＝０）∧（／ＩＳＴＯＰｎ＝１）を条件に、ＮＡＮＤゲートＧ１は、信号Ｉｆａｉｌとして‘１’を出力する。
【０７５８】
ユークリッド反復法の停止が行なわれた時点でエラー訂正が可能か否かは、ｄｅｇ  ｆｎ＋ｄｅｇ  ｐｎ−１＜γに基づいて判断する。
【０７５９】
そこで、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロックにｄｅｇ  ｆｎ及びｄｅｇ  ｐｎ−１を入力し、これらの和ｄｅｇ  ｆｎ＋ｄｅｇ  ｐｎ−１を求める。この和ｄｅｇ  ｆｎ＋ｄｅｇ  ｐｎ−１は、“ｈ  ｂｉｔ  γ≦”回路ブロックに出力される。
【０７６０】
“ｈ  ｂｉｔ  γ≦”回路ブロックは、入力がγ以上か否かを判定する回路である。“ｈ  ｂｉｔ  γ≦”回路ブロックは、“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロックから入力されたｄｅｇ  ｆｎ＋ｄｅｇ  ｐｎ−１がγ以上の場合、信号ｇｔγとして‘１’を出力する。
【０７６１】
なお、この“ｈ  ｂｔｉ  γ≦”回路ブロックの詳細は、省略するが、図４０に示す“ｈ  ｂｉｔ  ＡＤ  ｍｏｄ  ｐ”回路ブロックのＰＦ０生成部Ｕ１と同様に構成することができる。
【０７６２】
ＯＲゲートＧ２は、ＮＡＮＤゲートＧ１の出力Ｉｆａｉｌ又は“ｈ  ｂｉｔ  γ≦”回路ブロックの出力ｇｔγを入力し、Ｉｆａｉｌ∨ｇｔγの場合、ユークリッド反復法によるエラー訂正ができないことを意味するＮＧ信号を出力する。
【０７６３】
＜まとめ＞
以上、第２の実施形態では、エラー訂正にユークリッド反復法を用いたｐ−ａｄｉｃ・ＮＡＮＤフラッシュメモリについて、具体的な構成を例示しながら説明した。
【０７６４】
第２の実施形態によれば、第１の実施形態と同様、ｐ−ａｄｉｃセルに対するデータの書き込み、ｐ−ａｄｉｃセルに対するデータの読み出し等におけるレベル設定が甘い場合であっても、強力なエラー訂正能力によってデータの信頼性を確保することができる。また、第１の実施形態と比べ、高速なエラー訂正処理を実現することができる。
【０７６５】
［その他］
以上、発明の実施の形態を説明したが、本発明はこれらに限定されるものではなく、発明の趣旨を逸脱しない範囲内において、種々の変更、追加等が可能である。
【符号の説明】
【０７６６】
１０１、２０１・・・１７進数変換部、１０２、２０２・・・エンコード部、１０３、２０３・・・ｐ−ａｄｉｃセルフラッシュメモリ、１０４、２０４・・・シンドローム生成部、１０５、２０５・・・解探索多項式生成部、１０６、２０７、２０８・・・ハッセ微分多項式生成部、１０７・・・エラー量算出部、１０８、２０９・・・コード復元部、１０９、２１０・・・デコード部、１１０、２１１・・・２５進数変換部、２０６・・・ユークリッド反復法処理部。
【図１】
0005204186.tif 000069
【図２】
0005204186.tif 000070
【図３】
0005204186.tif 000071
【図４】
0005204186.tif 000072
【図５】
0005204186.tif 000073
【図６】
0005204186.tif 000074
【図７】
0005204186.tif 000075
【図８】
0005204186.tif 000076
【図９】
0005204186.tif 000077
【図１０】
0005204186.tif 000078
【図１１】
0005204186.tif 000079
【図１２】
0005204186.tif 000080
【図１３】
0005204186.tif 000081
【図１４】
0005204186.tif 000082
【図１５】
0005204186.tif 000083
【図１６】
0005204186.tif 000084
【図１７】
0005204186.tif 000085
【図１８】
0005204186.tif 000086
【図１９】
0005204186.tif 000087
【図２０】
0005204186.tif 000088
【図２１】
0005204186.tif 000089
【図２２】
0005204186.tif 000090
【図２３】
0005204186.tif 000091
【図２４】
0005204186.tif 000092
【図２５】
0005204186.tif 000093
【図２６】
0005204186.tif 000094
【図２７】
0005204186.tif 000095
【図２８】
0005204186.tif 000096
【図２９】
0005204186.tif 000097
【図３０】
0005204186.tif 000098
【図３１】
0005204186.tif 000099
【図３２】
0005204186.tif 000100
【図３３】
0005204186.tif 000101
【図３４】
0005204186.tif 000102
【図３５】
0005204186.tif 000103
【図３６】
0005204186.tif 000104
【図３７】
0005204186.tif 000105
【図３８】
0005204186.tif 000106
【図３９】
0005204186.tif 000107
【図４０】
0005204186.tif 000108
【図４１】
0005204186.tif 000109
【図４２】
0005204186.tif 000110
【図４３】
0005204186.tif 000111
【図４４】
0005204186.tif 000112
【図４５】
0005204186.tif 000113
【図４６】
0005204186.tif 000114
【図４７】
0005204186.tif 000115
【図４８】
0005204186.tif 000116
【図４９】
0005204186.tif 000117
【図５０】
0005204186.tif 000118
【図５１】
0005204186.tif 000119
【図５２】
0005204186.tif 000120
【図５３】
0005204186.tif 000121
【図５４】
0005204186.tif 000122
【図５５】
0005204186.tif 000123
【図５６】
0005204186.tif 000124
【図５７】
0005204186.tif 000125
【図５８】
0005204186.tif 000126
【図５９】
0005204186.tif 000127
【図６０】
0005204186.tif 000128
【図６１】
0005204186.tif 000129
【図６２】
0005204186.tif 000130
【図６３】
0005204186.tif 000131
【図６４】
0005204186.tif 000132
【図６５】
0005204186.tif 000133
【図６６】
0005204186.tif 000134
【図６７】
0005204186.tif 000135
【図６８】
0005204186.tif 000136
【図６９】
0005204186.tif 000137
【図７０】
0005204186.tif 000138
【図７１】
0005204186.tif 000139
【図７２】
0005204186.tif 000140
【図７３】
0005204186.tif 000141
【図７４】
0005204186.tif 000142
【図７５】
0005204186.tif 000143
【図７６】
0005204186.tif 000144
【図７７】
0005204186.tif 000145
【図７８】
0005204186.tif 000146
【図７９】
0005204186.tif 000147
【図８０】
0005204186.tif 000148