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