(57)【要約】【課題】回路規模の縮小された誤り探索方程式一括処理回路（誤り位置検索回路）、誤り検出訂正回路、及びメモリ装置を提供することにある。【解決手段】ガロア体ＧＦ（２ｍ）上（ｍは整数、以下同じ）のｍビットによりベクトル表現される（２ｍ−１）個の元を誤り位置探索式へ代入し、各元に対応したデータ列のビットに誤りが有るか否かを示すエラー検出信号を生成する誤り位置検索回路であって、誤り位置探索式の次数毎に元を代入する複数の位置検索回路（ＳＲＣ３３＿１、３３＿２、３３＿３、３３＿４）を含んで構成され、１ビットのみが１となる規定値の固定ベクトルにより表した元（ｘ）を、複数の位置検索回路各々に代入し、代入して得られた各位置検索回路の結果ｉ０，・・・，ｉ５１０，ｊ０，・・・，ｊ５１０，ｋ０，・・・，ｋ５１０，ｌ０，・・・，ｌ５１０を元毎に排他的論理和を演算してエラー検出信号ｂｃｈ［５１０：０］とする。【選択図】図７
2014068058.tif 000002
【特許請求の範囲】
【請求項１】
ガロア体ＧＦ（２ｍ）上（ｍは整数、以下同じ）のｍビットによりベクトル表現される（２ｍ−１）個の元を誤り位置探索式へ代入し、各元に対応したデータ列のビットに誤りが有るか否かを示すエラー検出信号を生成する誤り位置検索回路であって、
前記誤り位置探索式の次数毎に前記元を代入する複数の位置検索回路を含んで構成され、
１ビットのみが１となる規定値の固定ベクトルにより表した前記元を、前記複数の位置検索回路各々に代入し、代入して得られた各位置検索回路の結果を前記元毎に排他的論理和を演算して前記エラー検出信号とすることを特徴とする誤り位置検索回路。
【請求項２】
前記位置検索回路は、
前記誤り位置探索式の係数であるｍビットの係数ベクトルと、１ビットのみが１となるｍビットの前記元を表す固定ベクトルとから、ｍ個の第１ベクトルを生成する第１ベクトル生成回路と、
前記第１ベクトルのうち複数個のベクトルの和で表される（２ｍ−ｍ−１）個の第２ベクトルを生成する第２ベクトル生成回路と、
を備え、
前記第１ベクトル生成回路は、前記固定ベクトルのうち１となるビットに応じて、前記係数ベクトルの各ビットとまたは各ビットの組み合わせのうちから前記第１ベクトルの決定を並列に行うｍ個のビット決定部を有し、
前記第２ベクトル生成回路は、前記第１ベクトル、及び前記第２ベクトルのうち２つのベクトルの和により前記第２ベクトルを演算する排他的論理和回路を有することを特徴とする請求項１に記載の誤り位置検索回路。
【請求項３】
データ列を格納するデータ格納部と、
前記データ列からシンドロームを計算するシンドローム計算部と、
前記シンドロームから前記誤り位置探索方程式の係数を算出する誤り係数計算部と、
前記データ列のデータのビットの位置を示す前記元と、前記係数との乗算結果の排他的論理和を前記元毎に演算する排他的論理和演算部を有する請求項１または請求項２に記載の誤り位置検索回路と、
前記エラー検出信号により前記データ列におけるビットのデータの誤りを訂正して出力する誤り訂正部と、を備えることを特徴とする誤り検出訂正回路。
【請求項４】
請求項３に記載の誤り検出訂正回路を備えたメモリ装置であって、
前記データ格納部は記憶素子から読み出したデータ列を格納する回路であり、
前記元は前記記憶素子のメモリにおける列の位置を示すカラムアドレスであることを特徴とするメモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、誤り位置検索回路、誤り検出訂正回路、及びメモリ装置に関する。
【背景技術】
【０００２】
電気的書き換え可能な不揮発性半導体記憶装置（ＥＥＰＲＯＭ；Electrically  Erasable  and  Programmable  Read  Only  Memory）の一つとして、ＮＡＮＤ型フラッシュメモリが知られている。ＮＡＮＤ型フラッシュメモリは、複数のメモリセルを直列接続したＮＡＮＤセルユニット（ＮＡＮＤストリング）を用いることにより、小さいチップ面積での大容量記憶を可能としている。
【０００３】
ＮＡＮＤ型フラッシュメモリでは、多数回の書き換えに伴うトンネル酸化膜の劣化等に起因して、データ保持中に記憶素子（メモリセル）の保持特性が失われ、エラービットの発生率（エラー率）が大きくなる傾向がある。特に、ＮＡＮＤ型フラッシュメモリでは、メモリセルの大容量化、すなわち製造プロセスにおける微細化が進むとエラー率は上昇してしまう傾向にある。そのため、記憶すべきデータに誤り訂正符号（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）の冗長データを付加してデータ列としてフラッシュメモリに書込むと共に、読出し時には誤り訂正符号の冗長データを基にしてデータの訂正を行うことで、エラービットが発生したときのデータの補償を行っている。
【０００４】
例えば、特許文献１には、誤り検出訂正回路（ＥＣＣ回路）を備えたＮＡＮＤ型フラッシュメモリが開示されている。特許文献１記載の誤り検出訂正回路では、チェン探索部において、受信情報（データ列）のうちのビットの位置をエラー位置探索方程式に代入し、当該ビットに誤りがあるか否かを検出する。データ列の出力時には、チェン探索部にアドレスを最下位から最上位まで全て代入する。そして、誤り訂正回路（誤り訂正部）では、各ビットに誤りがある場合はビットのデータを訂正して訂正後のデータを出力し、誤りがない場合は訂正しないでビットのデータをそのまま出力する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１００３６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した特許文献１に記載された構成では、データ列のうち任意のアドレスのビットを読み出そうとする場合、誤り訂正回路の出力するビットを一端バッファメモリ等に記憶させ、その後、読み出すべきビットのアドレスをバッファメモリに対して供給しなければならない。つまり、従来においては、誤り検出訂正回路において、読み出すべきビットが含まれるデータ列の全てのビットに対するエラービットのデータの訂正処理が終了するまで、誤り訂正後のデータを高速に読み出すことができないという問題があった。
【０００７】
誤り訂正後のデータを外部に高速に出力するためには、読み出すべきビットが含まれるデータ列の全てのビットに対するエラービットのデータの訂正処理を高速に行う方策が考えられる。この方策として、チェン探索部にアドレスを最下位から最上位まで全て同時に一括して代入することが考えられる。しかしながら、誤り検出訂正回路のチェン探索部において、エラー位置探索方程式へアドレスを代入する回路（位置検索回路；ＳＲＣ回路とも言う）をビット毎に対応して設ける必要がある。この点について、図面を参照して説明する。
【０００８】
図９は、従来のチェン探索部３３９の構成を示す図である。なお、ここでは、ＧＦ（２９）のガロア体を利用し、４ビットの誤りが訂正可能なＢＣＨ符号を用いた誤り検出訂正回路を例にとって説明する。ＧＦ（２９）のガロア体では、５１１ビットの中で４ｂｉｔの誤りを訂正することができる。ＧＦ（２９）のガロア体では、エラー位置探索方程式は下記の式で表わされる。
Λ(x)＝ｅ４ｘ４＋ｅ３ｘ３＋ｅ２ｘ２＋ｅ１ｘ＋ｅ０・・・（１）
【０００９】
データの高速な訂正処理を目的に、５１１ビットに対して一括して訂正処理を行う場合、図９に示すように、位置検索回路３３９＿１〜位置検索回路３３９＿５１０各々において、エラー位置探索方程式の係数（ｅ４、ｅ３、ｅ２、ｅ１）とｘ（ビットのアドレス）のべき乗との乗算を行い、乗算結果の和を求める演算を行う。各位置検索回路３３９＿ｉ（ｉ＝０〜５１０）では、この演算結果が０である場合、例えばＨ（ハイ）レベルのエラー検出信号ｂｃｈ［ｉ］を出力し、演算結果が１の場合、Ｌ（ロウ）レベルのエラー検出信号ｂｃｈ［ｉ］を出力する。誤り検出訂正回路では、このエラー検出信号の論理レベルに応じて、任意のアドレスのビットのデータの誤り訂正処理を行う。
【００１０】
位置検索回路各々は、式（１）を演算するため４個の乗算器を有する。そして、この乗算器において、各項（係数とべき乗の積）を求めた後に排他的論理和回路（ＥＸＯＲ回路）により各項の足し算を演算処理を行う。係数（ｅ４、ｅ３、ｅ２、ｅ１）とｘ（ビットのアドレス）とは、ベクトル表現すると、それぞれ９ビットのベクトルであり、ＧＦ（２９）のガロア体の異なる値の乗算（９ビット×９ビット）は、論理積回路（アンド回路）とＥＸＯＲ回路の組み合わせ回路（１６４個の論理ゲート）により演算できる。
【００１１】
例えば、ビット０用の誤りエラー位置探索方程式にビットの位置を代入する位置検索回路３３９＿０では、１６４×４（１６４論理ゲート×乗算器の個数)＋９×４(各項９ビットの足し算４か所)＝６９２個の論理ゲートが必要となる。
誤り探索方程式一括処理回路（チェン探索部）では、総計６９２×５１１＝３５３６１２個の論理ゲートが必要となる。
このように、チェン探索部３３９を構成する論理ゲートの個数が莫大な個数となり、誤り検出訂正回路を半導体回路に搭載することがチップサイズの観点から困難となる。
【００１２】
そこで本発明が解決しようとする課題は、位置検索回路の回路規模を縮小し、回路規模の縮小された誤り探索方程式一括処理回路（誤り位置検索回路）、誤り検出訂正回路、及びメモリ装置を提供することにある。
【課題を解決するための手段】
【００１３】
本発明の誤り位置検索回路は、ガロア体ＧＦ（２ｍ）上（ｍは整数、以下同じ）のｍビットによりベクトル表現される（２ｍ−１）個の元を誤り位置探索式へ代入し、各元に対応したデータ列のビットに誤りが有るか否かを示すエラー検出信号を生成する誤り位置検索回路であって、前記誤り位置探索式の次数毎に前記元を代入する複数の位置検索回路を含んで構成され、１ビットのみが１となる規定値の固定ベクトルにより表した前記元を、前記複数の位置検索回路各々に代入し、代入して得られた各位置検索回路の結果を前記元毎に排他的論理和を演算して前記エラー検出信号とすることを特徴とする。
【００１４】
また、本発明の誤り位置検索回路は、前記位置検索回路が、前記誤り位置探索式の係数であるｍビットの係数ベクトルと、１ビットのみが１となるｍビットの前記元を表す固定ベクトルとから、ｍ個の第１ベクトルを生成する第１ベクトル生成回路と、前記第１ベクトルのうち複数個のベクトルの和で表される（２ｍ−ｍ−１）個の第２ベクトルを生成する第２ベクトル生成回路と、を備え、前記第１ベクトル生成回路は、前記固定ベクトルのうち１となるビットに応じて、前記係数ベクトルの各ビットとまたは各ビットの組み合わせのうちから前記第１ベクトルの決定を並列に行うｍ個のビット決定部を有し、前記第２ベクトル生成回路は、前記第１ベクトル、及び前記第２ベクトルのうち２つのベクトルの和により前記第２ベクトルを演算する排他的論理和回路を有することを特徴とする。
【００１５】
また、本発明の誤り検出訂正回路は、データ列を格納するデータ格納部と、前記データ列からシンドロームを計算するシンドローム計算部と、前記シンドロームから前記誤り位置探索方程式の係数を算出する誤り係数計算部と、前記データ列のデータのビットの位置を示す前記元と、前記係数との乗算結果の排他的論理和を前記元毎に演算する排他的論理和演算部を有する上記誤り位置検索回路と、前記エラー検出信号により前記データ列におけるビットのデータの誤りを訂正して出力する誤り訂正部と、を備えることを特徴とする。
【００１６】
また、本発明のメモリ装置は、上記誤り検出訂正回路を備えたメモリ装置であって、前記データ格納部は記憶素子から読み出したデータ列を格納する回路であり、前記元は前記記憶素子のメモリにおける列の位置を示すカラムアドレスであることを特徴とする。
【発明の効果】
【００１７】
本発明の誤り位置検索回路では、（２ｍ−１）個の元を１ビットのみが１となる規定値により表わし、複数の位置検索回路各々に代入する。この（２ｍ−１）個の元のうち、（２ｍ−ｍ−１）個については、ｍ個の規定値のうち複数個の和で表すことができるため、元を求めるために、ガロア体の異なる値の乗算（ｍビット×ｍビット）の乗算を行なう論理積回路とＥＸＯＲ回路の組み合わせ回路（乗算器）が不要となる。
【００１８】
この位置検索回路では、誤り位置探索式の係数であるｍビットの係数ベクトルと、１ビットのみが１となるｍビットの固定ベクトルとから、ｍ個の第１ベクトルを生成する第１ベクトル生成回路と、第１ベクトルのうち複数個のベクトルの和で表される（２ｍ−ｍ−１）個の第２ベクトルを生成する第２ベクトル生成回路と、を備える。また、第１ベクトル生成回路は、固定ベクトルのうち１となるビットに応じて、係数ベクトルの各ビットとまたは各ビットの組み合わせのうちから第１ベクトルの決定を並列に行うｍ個のビット決定部を有する。また、第２ベクトル生成回路は、第１ベクトル、及び第２ベクトルのうち２つのベクトルの和により第２ベクトルを演算する排他的論理和回路を有する。
【００１９】
ガロア体ＧＦ（２ｍ）においてｍ＝９の場合を考えると、第１ベクトル生成回路において、各ビットの組み合わせを生成する回路（係数ベクトルを演算する回路）には、ＥＸＯＲ回路が８個必要となる。また、この係数ベクトルと固定ベクトルとからｍ個の第１ベクトルを生成する第１ベクトル生成回路は、固定ベクトルのうち１となるビットに応じて、係数ベクトルの各ビットとまたは各ビットの組み合わせのうちから第１ベクトルの決定を行なうため、アンド回路やＥＸＯＲ回路といった論理ゲートが不要となる。一方、第１ベクトルのうち複数個のベクトルの和により表される第２ベクトルを演算する第２ベクトル生成回路には、（２９−９−１）×９（元の個数×９ビット）＝４５１８個のＥＸＯＲ回路が必要となる（詳細後述）。
【００２０】
つまり、次数毎に設けられた位置検索回路では、論理ゲートの個数が、８＋４５１８＝４５２６個必要となる。４ビットの誤りが訂正可能なＢＣＨ符号を用いた誤り検出訂正回路を例にとる場合、チェン探索部における位置検索回路は４個であるので、４個の位置検索回路では、論理ゲートが４５２６×４＝１８１０４個必要となる。
また、この４個の位置検索回路各々の出力（９ビット×５１１個）の和をとって、エラー検出信号を生成するため、４×９×５１１＝１８３９６個のＥＸＯＲ回路を必要とする。
【００２１】
従って、チェン探索部では、１８４２８＋１８３９６＝３６８２４個の論理ゲートが必要となるが、上述の従来のチェン探索部が３５３６１２の論理ゲートを必要とすることに対して、論理ゲートの個数を約１／１０にまで、大幅に削減することができる。
よって、本発明によれば、位置検索回路の回路規模を縮小し、回路規模の縮小された誤り探索方程式一括処理回路（誤り位置検索回路）、誤り検出訂正回路、及びメモリ装置を提供することができる。
【図面の簡単な説明】
【００２２】
【図１】不揮発性半導体記憶装置１０であるＮＡＮＤ型フラッシュメモリの構成例を示す概略ブロック図である。
【図２】誤り検出訂正回路１３の詳細な構成例を示す図である。
【図３】原始多項式として、Ｘ９＋Ｘ４＋１を採用した場合のガロア体ＧＦ（２９）の元を示した図である。
【図４】Ｘ［８：０］とＹ［８：０］との乗算によりＺ［８：０］を出力するときの条件を示した図である。
【図５】ｙ［０］〜ｙ［８］の組合せから、ｐ［０］〜ｐ［８］を求める際の論理式、及び論理演算を行うｐ生成回路２０を示す図である。
【図６】規定元を用いてＸ［８：０］＝（１、０、１、０、１、０、１、０、１）と係数ベクトルｅ１との積を求める場合の論理式を示す。
【図７】チェン探索部３３の構成の一例を示す図である。
【図８】位置検索回路ＳＲＣ３３＿１、ＳＲＣ３３＿２、ＳＲＣ３３＿３、ＳＲＣ３３＿４の構成を示すブロック図である。
【図９】従来のチェン探索部３３９の構成を示す図である。
【図１０】Ｚ［８：０］のベクトル成分を示した図である。
【発明を実施するための形態】
【００２３】
以下、図面を参照して、本発明の実施の形態について説明する。
［概要］
まず、情報データ長２５６ビットを訂正単位とし、その中の４ビットの誤りが訂正可能なＢＣＨ符号で使われるガロア体ＧＦ（２９）のシステムでの乗算について説明する。ここで、ガロア体ＧＦ（２９）において、２つのベクトルＸ［８：０］、Ｙ［８：０］の乗算を行ない、乗算結果Ｚ［８：０］を求める場合について考える。
まず、２つのベクトルＸ［８：０］、Ｙ［８：０］を、以下のようにベクトル表示する。
Ｘ［８：０］＝（ｘ８，ｘ７，ｘ６，ｘ５，ｘ４，ｘ３，ｘ２，ｘ１，ｘ０）
Ｙ［８：０］＝（ｙ８，ｙ７，ｙ６，ｙ５，ｙ４，ｙ３，ｙ２，ｙ１，ｙ０）
これにより、２つのベクトルを、多項式表現する場合、以下の様に表すことができる。
Ｘ［８：０］＝ｘ８×Ｘ８＋ｘ７×Ｘ７＋ｘ６×Ｘ６＋ｘ５×Ｘ５＋ｘ４×Ｘ４＋ｘ３×Ｘ３＋ｘ２×Ｘ２＋ｘ１×Ｘ１＋ｘ０
Ｙ［８：０］＝ｙ８×Ｘ８＋ｙ７×Ｘ７＋ｙ６×Ｘ６＋ｙ５×Ｘ５＋ｙ４×Ｘ４＋ｙ３×Ｘ３＋ｙ２×Ｘ２＋ｙ１×Ｘ１＋ｙ０
なお、上記Ｘ、ｘ０〜ｘ８、ｙ０〜ｙ８は、それぞれ０または１である。
【００２４】
Ｘ［８：０］とＹ［８：０］との乗算結果、すなわちＺ［８：０］は下記の様になる。なお、各元の成分の乗算において、乗算記号「×」は省略して示すものとする。
Ｚ［８：０］＝（ｘ８ｙ８）×Ｘ１６
＋（ｘ８ｙ７＋ｘ７ｙ８）×Ｘ１５
＋（ｘ８ｙ６＋ｘ７ｙ７＋ｘ７ｙ８）×Ｘ１４
＋（ｘ８ｙ５＋ｘ７ｙ６＋ｘ６ｙ７＋ｘ５ｙ８）×Ｘ１３
＋（ｘ８ｙ４＋ｘ７ｙ５＋ｘ６ｙ６＋ｘ５ｙ７＋ｘ４ｙ８）×Ｘ１２
＋（ｘ８ｙ３＋ｘ７ｙ４＋ｘ６ｙ５＋ｘ５ｙ６＋ｘ４ｙ７＋ｘ３ｙ８）×Ｘ１１
＋（ｘ８ｙ２＋ｘ７ｙ３＋ｘ６ｙ４＋ｘ５ｙ５＋ｘ４ｙ６＋ｘ３ｙ７＋ｘ２ｙ８）×Ｘ１０
＋（ｘ８ｙ１＋ｘ７ｙ２＋ｘ６ｙ３＋ｘ５ｙ４＋ｘ４ｙ５＋ｘ３ｙ６＋ｘ２ｙ７＋ｘ１ｙ８）×Ｘ９
＋（ｘ８ｙ０＋ｘ７ｙ１＋ｘ６ｙ２＋ｘ５ｙ３＋ｘ４ｙ４＋ｘ３ｙ５＋ｘ２ｙ６＋ｘ１ｙ７＋ｘ０ｙ８）×Ｘ８
＋（ｘ７ｙ０＋ｘ６ｙ１＋ｘ５ｙ２＋ｘ４ｙ３＋ｘ３ｙ４＋ｘ２ｙ５＋ｘ１ｙ６＋ｘ０ｙ７）×Ｘ７
＋（ｘ６ｙ０＋ｘ５ｙ１＋ｘ４ｙ２＋ｘ３ｙ３＋ｘ２ｙ４＋ｘ１ｙ５＋ｘ０ｙ６）×Ｘ６
＋（ｘ５ｙ０＋ｘ４ｙ１＋ｘ３ｙ２＋ｘ２ｙ３＋ｘ１ｙ４＋ｘ０ｙ５）×Ｘ５
＋（ｘ４ｙ０＋ｘ３ｙ１＋ｘ２ｙ２＋ｘ１ｙ３＋ｘ０ｙ４）×Ｘ４
＋（ｘ３ｙ０＋ｘ２ｙ１＋ｘ１ｙ２＋ｘ０ｙ３）×Ｘ３
＋（ｘ２ｙ０＋ｘ１ｙ１＋ｘ０ｙ２）×Ｘ２
＋（ｘ１ｙ０＋ｘ０ｙ１）×Ｘ１
＋（ｘ０ｙ０）
【００２５】
図１０は、Ｚ［８：０］のベクトル成分を示した図である。図１０（ａ）は、Ｘ［８：０］のベクトル成分とＹ［８：０］のベクトル成分との積を示す。また、図１０（ｂ）は、乗算結果Ｚ［８：０］の各ビットを、ＥＸＯＲ回路を用いてａ０〜ａ１４から演算する場合の論理式を示す。
図１０（ａ）において、Ｘ［８：０］のベクトル成分とＹ［８：０］のベクトル成分と各積を図１０（ａ）の縦方向に足し合わせた論理和が、上記多項式表現における各次数の係数となっている。
ここで、Ｚ［８：０］の多項式表現における各次数の係数を、図１０（ａ）に示すように、Ｘ１６〜Ｘ０各々に対応してａ１６〜ａ０とする。すなわち、以下の各式が成り立つ。
ａ１６＝ｘ８ｙ８、
ａ１５＝ｘ８ｙ７＋ｘ７ｙ８、
ａ１４＝ｘ８ｙ６＋ｘ７ｙ７＋ｘ７ｙ８、
ａ１３＝ｘ８ｙ５＋ｘ７ｙ６＋ｘ６ｙ７＋ｘ５ｙ８、
ａ１２＝ｘ８ｙ４＋ｘ７ｙ５＋ｘ６ｙ６＋ｘ５ｙ７＋ｘ４ｙ８、
ａ１１＝ｘ８ｙ３＋ｘ７ｙ４＋ｘ６ｙ５＋ｘ５ｙ６＋ｘ４ｙ７＋ｘ３ｙ８、
ａ１０＝ｘ８ｙ２＋ｘ７ｙ３＋ｘ６ｙ４＋ｘ５ｙ５＋ｘ４ｙ６＋ｘ３ｙ７＋ｘ２ｙ８、
ａ９＝ｘ８ｙ１＋ｘ７ｙ２＋ｘ６ｙ３＋ｘ５ｙ４＋ｘ４ｙ５＋ｘ３ｙ６＋ｘ２ｙ７＋ｘ１ｙ８、
ａ８＝ｘ８ｙ０＋ｘ７ｙ１＋ｘ６ｙ２＋ｘ５ｙ３＋ｘ４ｙ４＋ｘ３ｙ５＋ｘ２ｙ６＋ｘ１ｙ７＋ｘ０ｙ８、
ａ７＝ｘ７ｙ０＋ｘ６ｙ１＋ｘ５ｙ２＋ｘ４ｙ３＋ｘ３ｙ４＋ｘ２ｙ５＋ｘ１ｙ６＋ｘ０ｙ７、
ａ６＝ｘ６ｙ０＋ｘ５ｙ１＋ｘ４ｙ２＋ｘ３ｙ３＋ｘ２ｙ４＋ｘ１ｙ５＋ｘ０ｙ６、
ａ５＝ｘ５ｙ０＋ｘ４ｙ１＋ｘ３ｙ２＋ｘ２ｙ３＋ｘ１ｙ４＋ｘ０ｙ５、
ａ４＝ｘ４ｙ０＋ｘ３ｙ１＋ｘ２ｙ２＋ｘ１ｙ３＋ｘ０ｙ４、
ａ３＝ｘ３ｙ０＋ｘ２ｙ１＋ｘ１ｙ２＋ｘ０ｙ３、
ａ２＝ｘ２ｙ０＋ｘ１ｙ１＋ｘ０ｙ２、
ａ１＝ｘ１ｙ０＋ｘ０ｙ１、
ａ０＝ｘ０ｙ０
【００２６】
つまり、Ｚ［８：０］を、ａ１６〜ａ０を用いて多項式表現すると、以下の式が得られる。
Ｚ［８：０］＝ａ１６×Ｘ１６＋ａ１５×Ｘ１５＋ａ１４×Ｘ１４＋ａ１３×Ｘ１３＋ａ１２×Ｘ１２＋ａ１１×Ｘ１１＋ａ１０×Ｘ１０＋ａ９×Ｘ９＋ａ８×Ｘ８＋ａ７×Ｘ７＋ａ６×Ｘ６＋ａ５×Ｘ５＋ａ４×Ｘ４＋ａ３×Ｘ３＋ａ２×Ｘ２＋ａ１×Ｘ１＋ａ０・・・（２）
【００２７】
ここで、ガロア体ＧＦ（２９）の既約多項式（原始多項式）として、Ｘ９＋Ｘ４＋１を採用した場合、Ｘ９以上の高次の次数は、下記のようにＸ８以下の低次の次数によって表わすことができる。
Ｘ９＝Ｘ４＋１、
Ｘ１０＝Ｘ×Ｘ９＝Ｘ５＋Ｘ、
Ｘ１１＝Ｘ×Ｘ１０＝Ｘ６＋Ｘ２、
Ｘ１２＝Ｘ×Ｘ１１＝Ｘ７＋Ｘ３、
Ｘ１３＝Ｘ×Ｘ１２＝Ｘ８＋Ｘ４、
Ｘ１４＝Ｘ×Ｘ１３＝Ｘ９＋Ｘ５＝Ｘ５＋Ｘ４＋１、
Ｘ１５＝Ｘ×Ｘ１４＝Ｘ６＋Ｘ５＋Ｘ、
Ｘ１６＝Ｘ×Ｘ１５＝Ｘ７＋Ｘ６＋Ｘ２である。
【００２８】
これらの、高次の次数を、上記式（２）に代入し、次数毎にまとめると、すなわち同じＸのべき乗の項を纏めると、Ｚ［８：０］は、以下のように多項式表現される。
Ｚ［８：０］＝（ａ８＋ａ１３）×Ｘ８
＋（ａ７＋ａ１２＋ａ１６）×Ｘ７
＋（ａ６＋ａ１１＋ａ１５＋ａ１６）×Ｘ６
＋（ａ５＋ａ１０＋ａ１４＋ａ１５）×Ｘ５
＋（ａ４＋ａ９＋ａ１３＋ａ１４）×Ｘ４
＋（ａ３＋ａ１２）×Ｘ３
＋（ａ２＋ａ１１＋ａ１６）×Ｘ２
＋（ａ１＋ａ１０＋ａ１５）×Ｘ１
＋（ａ０＋ａ９＋ａ１４）・・・（３）
【００２９】
ここで、本実施形態において、Ｚ［８：０］をベクトル表現する場合、以下の様に表現する。
Ｚ［８：０］＝（ｚ８，ｚ７，ｚ６，ｚ５，ｚ４，ｚ３，ｚ２，ｚ１，ｚ０）これにより、Ｚ［８：０］を、多項式表現する場合、以下の様になる。
Ｚ［８：０］＝ｚ８×Ｘ８＋ｚ７×Ｘ７＋ｚ６×Ｘ６＋ｚ５×Ｘ５＋ｚ４×Ｘ４＋ｚ３×Ｘ３＋ｚ２×Ｘ２＋ｚ１×Ｘ１＋ｚ０
【００３０】
これにより、上記式（３）から、Ｚ［８：０］の各ビットＺ［８］〜Ｚ［０］は、それぞれ下記の様に表される。
ｚ８＝ａ８＋ａ１３、
ｚ７＝ａ７＋ａ１２＋ａ１６、
ｚ６＝ａ６＋ａ１１＋ａ１５＋ａ１６、
ｚ５＝ａ５＋ａ１０＋ａ１４＋ａ１５、
ｚ４＝ａ４＋ａ９＋ａ１３＋ａ１４、
ｚ３＝ａ３＋ａ１２、
ｚ２＝ａ２＋ａ１１＋ａ１６、
ｚ１＝ａ１＋ａ１０＋ａ１５、
ｚ０＝ａ０＋ａ９＋ａ１４・・・（４）
【００３１】
つまり、２つのベクトルの乗算を行う際、乗算結果のうちの下位８（＝ｍ）ビット以外の上位ビットの要素についてそれぞれ排他的論理和演算して求め、その演算結果を予め与えられる原始多項式により、下位ｍビットのベクトル表現に変換する。また、変換後のｍビットの各要素を、乗算結果のうちの下位ｍビットの要素についてそれぞれ排他的論理和演算して求めた演算結果の各要素と排他的論理和演算する。
【００３２】
このようにして、乗算結果Ｚ［８：０］の各ビットＺ［０］〜Ｚ［８］は、Ｘ［８：０］の各ビットとＹ［８：０］の各ビットとの乗算結果の和（ａ０〜ａ１４のいずれか）を組み合わせ、これらの組み合せの和を求めた結果で表される。
Ｘ［８：０］の各ビットとＹ［８：０］の各ビットとの乗算を行うには、９×９＝８１個のアンド回路が必要になる。
また、Ｘ［８：０］の各ビットとＹ［８：０］の各ビットとの乗算結果の和（ａ０〜ａ１４のいずれか）を求めるためには、ＥＸＯＲ回路が用いられる。ａ０〜ａ１６を全て求めるには、上記それぞれ上記（アンド回路の個数−１７）＝６４個のＥＸＯＲ回路が必要になる。
また、ａ０〜ａ１４のいずれかを組み合わせて乗算結果Ｚ［８：０］の各ビットを求めるために、ＥＸＯＲ回路が用いられる。すなわち、上記（４）を求めるために、１９個のＥＸＯＲ回路が必要になる。
【００３３】
図１０（ｂ）は、乗算結果Ｚ［８：０］の各ビットを、ＥＸＯＲ回路を用いてａ０〜ａ１４から演算する場合の論理式を示す。なお、図１０（ｂ）において、符号「＾」は排他的論理和演算を示し、Ｚ［８：０］の各ビットをＺ［０］〜Ｚ［８］で、Ｚ［８：０］の各次数の係数に用いるａ０〜ａ１６をａ［０］〜ａ［１６］で示している。
【００３４】
以上より、乗算結果Ｚ［８：０］の各ビットは、Ｘ［８：０］の各ビットとＹ［８：０］の各ビットとの乗算結果を求めるためのアンド回路（８１個）、乗算結果の和（ａ０〜ａ１４のいずれか）を求めるＥＸＯＲ回路（６４個）、図１０（ｂ）に示す排他的論理和演算を行うＥＸＯＲ回路（１９個）、合計１６４個の論理ゲートにより演算される。
【００３５】
ところで、データの高速な訂正処理を目的に、５１１ビットに対して一括して訂正処理を行う場合、図９に示すように、位置検索回路３３９＿１〜位置検索回路３３９＿５１０各々において、エラー位置探索方程式の係数（ｅ４、ｅ３、ｅ２、ｅ１）とｘ（ビットのアドレス）のべき乗との乗算を行い、乗算結果の和を求める演算を行う。
位置検索回路各々は、上述の通り、１６４個の論理ゲートにより演算できる。そのため、誤り探索方程式一括処理回路（誤り位置検索回路）では、総計６９２×５１１＝３５３６１２個の論理ゲートが必要となる。
このように、チェン探索部３３９を構成する論理ゲートの個数が莫大な個数となり、誤り検出訂正回路を半導体回路に搭載することがチップサイズの観点から困難となる。
【００３６】
そこで、本実施形態では、誤り位置検索回路を、誤り位置探索式の次数毎に元を代入する複数の位置検索回路を含み、１ビットのみが１となる規定値により表した元を、複数の位置検索回路各々に代入し、代入して得られた各位置検索回路の結果を元毎に排他的論理和を演算する構成とする。
【００３７】
ここで、ＧＦ（２９）のガロア体を利用し、４ビットの誤りが訂正可能なＢＣＨ符号を用いる場合の、ガロア体の元（上述のＸ［８：０］）について、図面を参照して説明する。図３は、原始多項式として、Ｘ９＋Ｘ４＋１を採用した場合のガロア体ＧＦ（２９）の元を示した図である。図３において、Ｐｏｗｅｒはガロア体の元を、Ｐｏｌｙｎｏｍｉｎａｌは元の多項式表現を、Ｖｅｃｔｏｒはベクトル表現をそれぞれ示している。
図３に示すように、９（＝ｍ）個の元α０〜α８が、１ビットのみが１となる規定値（規定元）である。つまり、規定元α０〜α８は、ベクトル表示、及びバイナリ表示により下記の様に表される。
α０＝（０、０、０、０、０、０、０、０、１）＝９’ｂ００００００００１、
α１＝（０、０、０、０、０、０、０、１、０）＝９’ｂ０００００００１０、
α２＝（０、０、０、０、０、０、１、０、０）＝９’ｂ００００００１００、
α３＝（０、０、０、０、０、１、０、０、０）＝９’ｂ０００００１０００、
α４＝（０、０、０、０、１、０、０、０、０）＝９’ｂ００００１００００、
α５＝（０、０、０、１、０、０、０、０、０）＝９’ｂ０００１０００００、
α６＝（０、０、１、０、０、０、０、０、０）＝９’ｂ００１００００００、
α７＝（０、１、０、０、０、０、０、０、０）＝９’ｂ０１０００００００、
α８＝（１、０、０、０、０、０、０、０、０）＝９’ｂ１００００００００
である。これらの規定元は、互いに他の規定元を用いて表すことのできない（線形独立な）元である。
【００３８】
一方、図３に示す残りの５０２（＝５１２−９−１）個の元α９〜α５１０は、原始多項式によりα９＝α４＋１であることを用いて、各元を多項式表示すると、下記の様になる。
α９＝α４＋１、
α１０＝α９α１＝（α４＋１）α＝α５＋α、
α１１＝α１０α１＝（α５＋α）α＝α６＋α２、
α１２＝α１１α１＝（α６＋α２）α＝α７＋α３、
α１３＝α１２α１＝（α７＋α３）α＝α８＋α４、
α１３＝α１２α１＝（α７＋α３）α＝α８＋α４、
α１４＝α１３α１＝（α８＋α４）α＝α９＋α５＝α５＋α４＋１、
α１５＝α１４α１＝（α５＋α４＋１）α＝α６＋α５＋α、
α１６＝α１５α１＝（α６＋α５＋α）α＝α７＋α６＋α２、
α１７＝α１６α１＝（α７＋α６＋α２）α＝α８＋α７＋α３、
α１８＝α１７α１＝（α８＋α７＋α３）α＝α９＋α８＋α４
＝α４＋１＋α８＋α４
＝α８＋１、
α１９＝α１８α１＝（α８＋１）α＝α９＋α
＝α４＋α＋１
・・・
α５１０＝α５０９α１＝（α７＋α２）α＝α８＋α３
である。
このように、規定元α０〜α８を除く残りの５０２個の元α９〜α５１０は、規定元α０〜α８のうちの複数個の和で表すことができる。
【００３９】
従って、誤り位置探索式の次数毎に元を代入する複数の位置検索回路を用意し、１ビットのみが１となる規定値により表した元（係数と元との積）を、複数の位置検索回路各々に代入し、代入して得られた各位置検索回路の結果を元毎に排他的論理和を演算する構成とすれば、位置検索回路の回路規模を小さくすることができる。
【００４０】
続いて、１ビットのみが１となる規定値により表した元（係数と元との積）の生成方法について、引き続いて説明する。上述のベクトルＸ［８：０］とベクトルＹ［８：０］との乗算によりベクトルＺ［８：０］を求める乗算方法が、係数と元との積を求める際に用いられる方法である。ベクトルＸ［８：０］が上述の元（α０〜α５１０）であり、ベクトルＹ［８：０］が、各位置検索回路での誤り位置探索式の係数（次数に応じてｅ１、ｅ２、ｅ３、ｅ４のいずれか）であり、乗算結果のベクトルＺ［８：０］が（係数と元との積、次数に応じてｅ１ｘ、ｅ２ｘ２、ｅ３ｘ３、ｅ４ｘ４）である。ここでは、係数と元との積として、ｅ１ｘを求める場合について説明する。
【００４１】
ベクトルＺ［８：０］のうちＺ［０］は、上述の通り、Ｚ［０］＝ａ０＋ａ９＋ａ１４と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［０］は以下の様に表される。
Ｚ［０］＝ｙ０ｘ０＋ｙ８ｘ１＋ｙ７ｘ２＋ｙ６ｘ３＋ｙ５ｘ４＋ｙ４ｘ５＋（ｙ３＋ｙ８）ｘ６＋（ｙ２＋ｙ７）ｘ７＋（ｙ１＋ｙ６）ｘ８
ここで、ｙ３＋ｙ８＝ｐ０、ｙ２＋ｙ７＝ｐ１、ｙ１＋ｙ６＝ｐ２とすれば、Ｚ［０］は、更に、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビット、Ｙ［８：０］のビットの組合せを用いて下記の様に表される。
Ｚ［０］＝ｙ０ｘ０＋ｙ８ｘ１＋ｙ７ｘ２＋ｙ６ｘ３＋ｙ５ｘ４＋ｙ４ｘ５＋ｐ０ｘ６＋ｐ１ｘ７＋ｐ２ｘ８
【００４２】
次に、Ｚ［８：０］のうちＺ［１］は、Ｚ［１］＝ａ１＋ａ１０＋ａ１５と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［１］は以下の様に表される。
Ｚ［１］＝ｙ１ｘ０＋ｙ０ｘ１＋ｙ８ｘ２＋ｙ７ｘ３＋ｙ６ｘ４＋ｙ５ｘ５＋ｙ４ｘ６＋（ｙ３＋ｙ８）ｘ７＋（ｙ２＋ｙ７）ｘ８
ここで、上述のZ［０］と同様に、ｙ３＋ｙ８＝ｐ０、ｙ２＋ｙ７＝ｐ１とすれば、Ｚ［１］は、更に、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビット、Ｙ［８：０］のビットの組合せを用いて下記の様に表される。
Ｚ［１］＝ｙ１ｘ０＋ｙ０ｘ１＋ｙ８ｘ２＋ｙ７ｘ３＋ｙ６ｘ４＋ｙ５ｘ５＋ｙ４ｘ６＋ｐ０ｘ７＋ｐ１ｘ８
【００４３】
次に、Ｚ［８：０］のうちＺ［２］は、Ｚ［２］＝ａ２＋ａ１１＋ａ１６と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［２］は以下の様に表される。
Ｚ［２］＝ｙ２ｘ０＋ｙ１ｘ１＋ｙ０ｘ２＋ｙ８ｘ３＋ｙ７ｘ４＋ｙ６ｘ５＋ｙ５ｘ６＋ｙ４ｘ７＋（ｙ３＋ｙ８）ｘ８
ここで、上述のZ［０］、Z［１］と同様に、ｙ３＋ｙ８＝ｐ０とすれば、Ｚ［２］は、更に、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビット、Ｙ［８：０］のビットの組合せを用いて下記の様に表される。
Ｚ［２］＝ｙ２ｘ０＋ｙ１ｘ１＋ｙ０ｘ２＋ｙ８ｘ３＋ｙ７ｘ４＋ｙ６ｘ５＋ｙ５ｘ６＋ｙ４ｘ７＋ｐ０ｘ８
【００４４】
次に、Ｚ［８：０］のうちＺ［３］は、Ｚ［３］＝ａ３＋ａ１２と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［３］は以下の様に表される。
Ｚ［３］＝ｙ３ｘ０＋ｙ２ｘ１＋ｙ１ｘ２＋ｙ０ｘ３＋ｙ８ｘ４＋ｙ７ｘ５＋ｙ６ｘ６＋ｙ５ｘ７＋ｙ４ｘ８
このように、Ｚ［２］は、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビットを用いて下記の様に表される。
Ｚ［３］＝ｙ３ｘ０＋ｙ２ｘ１＋ｙ１ｘ２＋ｙ０ｘ３＋ｙ８ｘ４＋ｙ７ｘ５＋ｙ６ｘ６＋ｙ５ｘ７＋ｙ４ｘ８
【００４５】
次に、Ｚ［８：０］のうちＺ［４］は、Ｚ［４］＝ａ４＋ａ９＋ａ１３＋a１４と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［４］は以下の様に表される。
Ｚ［４］＝ｙ４ｘ０＋（ｙ３＋ｙ８）ｘ１＋（ｙ２＋ｙ７）ｘ２＋（ｙ１＋ｙ６）ｘ３＋（ｙ０＋ｙ５）ｘ４＋（ｙ４＋ｙ８）ｘ５＋（ｙ３＋ｙ７＋ｙ８）ｘ６＋（ｙ２＋ｙ６＋ｙ７）ｘ７＋（ｙ１＋ｙ５＋ｙ６）ｘ８
ここで、上述のZ［０］と同様に、ｙ３＋ｙ８＝ｐ０、ｙ２＋ｙ７＝ｐ１、ｙ１＋ｙ６＝ｐ２とし、また、ｙ０＋ｙ５＝ｐ３、ｙ４＋ｙ８＝ｐ４、ｙ３＋ｙ７＋ｙ８＝ｐ５、ｙ２＋ｙ６＋ｙ７＝ｐ６、ｙ１＋ｙ５＋ｙ６＝ｐ７とすれば、Ｚ［４］は、更に、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビット、Ｙ［８：０］のビットの組合せを用いて下記の様に表される。
Ｚ［４］＝ｙ４ｘ０＋ｐ０ｘ１＋ｐ１ｘ２＋ｐ２ｘ３＋ｐ３ｘ４＋ｐ４ｘ５＋ｐ５ｘ６＋ｐ６ｘ７＋ｐ７ｘ８
【００４６】
次に、Ｚ［８：０］のうちＺ［５］は、Ｚ［５］＝ａ５＋ａ１０＋ａ１４＋a１５と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［５］は以下の様に表される。
Ｚ［５］＝ｙ５ｘ０＋ｙ４ｘ１＋（ｙ３＋ｙ８）ｘ２＋（ｙ２＋ｙ７）ｘ３＋（ｙ１＋ｙ６）ｘ４＋（ｙ０＋ｙ５）ｘ５＋（ｙ４＋ｙ８）ｘ６＋（ｙ３＋ｙ７＋ｙ８）ｘ７＋（ｙ２＋ｙ６＋ｙ７）ｘ８
ここで、上述のZ［４］と同様に、ｙ３＋ｙ８＝ｐ０、ｙ２＋ｙ７＝ｐ１、ｙ１＋ｙ６＝ｐ２、ｙ０＋ｙ５＝ｐ３、ｙ４＋ｙ８＝ｐ４、ｙ３＋ｙ７＋ｙ８＝ｐ５、ｙ２＋ｙ６＋ｙ７＝ｐ６とすれば、Ｚ［５］は、更に、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビット、Ｙ［８：０］のビットの組合せを用いて下記の様に表される。
Ｚ［５］＝ｙ５ｘ０＋ｙ４ｘ１＋ｐ０ｘ２＋ｐ１ｘ３＋ｐ２ｘ４＋ｐ３ｘ５＋ｐ４ｘ６＋ｐ５ｘ７＋ｐ６ｘ８
【００４７】
次に、Ｚ［８：０］のうちＺ［６］は、Ｚ［６］＝ａ６＋ａ１１＋ａ１５＋a１６と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［６］は以下の様に表される。
Ｚ［６］＝ｙ６ｘ０＋ｙ５ｘ１＋ｙ４ｘ２＋（ｙ３＋ｙ８）ｘ３＋（ｙ２＋ｙ７）ｘ４＋（ｙ１＋ｙ６）ｘ５＋（ｙ０＋ｙ５）ｘ６＋（ｙ４＋ｙ８）ｘ７＋（ｙ３＋ｙ７＋ｙ８）ｘ８
ここで、上述のＺ［４］、Z［５］と同様に、ｙ３＋ｙ８＝ｐ０、ｙ２＋ｙ７＝ｐ１、ｙ１＋ｙ６＝ｐ２、ｙ０＋ｙ５＝ｐ３、ｙ４＋ｙ８＝ｐ４、ｙ３＋ｙ７＋ｙ８＝ｐ５とすれば、Ｚ［６］は、更に、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビット、Ｙ［８：０］のビットの組合せを用いて下記の様に表される。
Ｚ［６］＝ｙ６ｘ０＋ｙ５ｘ１＋ｙ４ｘ２＋ｐ０ｘ３＋ｐ１ｘ４＋ｐ２ｘ５＋ｐ３ｘ６＋ｐ４ｘ７＋ｐ５ｘ８
【００４８】
次に、Ｚ［８：０］のうちＺ［７］は、Ｚ［７］＝ａ７＋ａ１２＋a１６と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［７］は以下の様に表される。
Ｚ［７］＝ｙ７ｘ０＋ｙ６ｘ１＋ｙ５ｘ２＋ｙ４ｘ３＋（ｙ３＋ｙ８）ｘ４＋（ｙ２＋ｙ７）ｘ５＋（ｙ１＋ｙ６）ｘ６＋（ｙ０＋ｙ５）ｘ７＋（ｙ４＋ｙ８）ｘ８
ここで、上述のＺ［４］、Z［５］、Ｚ［６］と同様に、ｙ３＋ｙ８＝ｐ０、ｙ２＋ｙ７＝ｐ１、ｙ１＋ｙ６＝ｐ２、ｙ０＋ｙ５＝ｐ３、ｙ４＋ｙ８＝ｐ４とすれば、Ｚ［７］は、更に、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビット、Ｙ［８：０］のビットの組合せを用いて下記の様に表される。
Ｚ［７］＝ｙ７ｘ０＋ｙ６ｘ１＋ｙ５ｘ２＋ｙ４ｘ３＋ｐ０ｘ４＋ｐ１ｘ５＋ｐ２ｘ６＋ｐ３ｘ７＋ｐ４ｘ８
【００４９】
次に、Ｚ［８：０］のうちＺ［８］は、Ｚ［８］＝ａ８＋ａ１３と表されるが（図１０（ｂ）参照）、これを、Ｘ［８：０］、及びＹ［８：０］の成分（要素）を用い、更にＸ［８：０］の成分毎に、すなわちｘ０〜ｘ８毎にまとめると、Ｚ［８］は以下の様に表される。
Ｚ［８］＝ｙ８ｘ０＋ｙ７ｘ１＋ｙ６ｘ２＋ｙ５ｘ３＋ｙ４ｘ４＋（ｙ３＋ｙ８）ｘ５＋（ｙ２＋ｙ７）ｘ６＋（ｙ１＋ｙ６）ｘ７＋（ｙ０＋ｙ５）ｘ８
ここで、上述のＺ［４］、Z［５］、Ｚ［６］、Ｚ［７］と同様に、ｙ３＋ｙ８＝ｐ０、ｙ２＋ｙ７＝ｐ１、ｙ１＋ｙ６＝ｐ２、ｙ０＋ｙ５＝ｐ３とすれば、Ｚ［８］は、更に、Ｘ［８：０］の各ビット、Ｙ［８：０］の各ビット、Ｙ［８：０］のビットの組合せを用いて下記の様に表される。
Ｚ［８］＝ｙ８ｘ０＋ｙ７ｘ１＋ｙ６ｘ２＋ｙ５ｘ３＋ｙ４ｘ４＋ｐ０ｘ５＋ｐ１ｘ６＋ｐ２ｘ７＋ｐ３ｘ８
【００５０】
このように、Ｙ［８：０］（他方の元）のビットのうちＸ［８：０］（一方の元）のビットを同一とするビットＹ［８］〜Ｙ［０］を排他的論理和演算してＹ［８：０］の各ビットの組み合わせを求める。
これにより、Ｚ［８：０］のうちの各ビットＺ［０］〜Ｚ［８］は、２つのベクトルのうちＸ［８：０］（元）の各ビットと、Ｙ［８：０］（係数）の各ビットとまたは各ビットの組み合わせとの論理積演算を行い、この論理積演算の演算結果を排他的論理和演算することにより得られることになる。この演算の乗算方法をまとめた図が、図４、及び図５である。図４は、Ｘ［８：０］とＹ［８：０］との乗算によりＺ［８：０］を出力するときの条件を示した図である。また、図５は、ｙ［０］〜ｙ［８］の組合せから、ｐ［０］〜ｐ［８］を求める際の論理式、及び論理演算を行うｐ生成回路２０を示す図である。
【００５１】
ｐ生成回路２０は、ＥＸＯＲ回路２０＿０、ＥＸＯＲ回路２０＿１、ＥＸＯＲ回路２０＿２、ＥＸＯＲ回路２０＿３、ＥＸＯＲ回路２０＿４、ＥＸＯＲ回路２０＿５、ＥＸＯＲ回路２０＿６、ＥＸＯＲ回路２０＿７から構成される。
ＥＸＯＲ回路２０＿０は、第１入力にＹ［８：０］のうちの１ビットＹ［３］が入力され、第２入力にＹ［８：０］のうちの１ビットＹ［８］が入力され、入力される２信号の排他的論理和演算を行い、ｐ０（＝ｙ３＋ｙ８）を出力する。
ＥＸＯＲ回路２０＿１は、第１入力にＹ［８：０］のうちの１ビットＹ［２］が入力され、第２入力にＹ［８：０］のうちの１ビットＹ［７］が入力され、入力される２信号の排他的論理和演算を行い、ｐ１（＝ｙ２＋ｙ７）を出力する。
ＥＸＯＲ回路２０＿２は、第１入力にＹ［８：０］のうちの１ビットＹ［１］が入力され、第２入力にＹ［８：０］のうちの１ビットＹ［６］が入力され、入力される２信号の排他的論理和演算を行い、ｐ３（＝ｙ１＋ｙ６）を出力する。
ＥＸＯＲ回路２０＿３は、第１入力にＹ［８：０］のうちの１ビットＹ［０］が入力され、第２入力にＹ［８：０］のうちの１ビットＹ［５］が入力され、入力される２信号の排他的論理和演算を行い、ｐ４（＝ｙ０＋ｙ５）を出力する。
ＥＸＯＲ回路２０＿４は、第１入力にＹ［８：０］のうちの１ビットＹ［４］が入力され、第２入力にＹ［８：０］のうちの１ビットＹ［８］が入力され、入力される２信号の排他的論理和演算を行い、ｐ５（＝ｙ４＋ｙ８）を出力する。
ＥＸＯＲ回路２０＿５は、第１入力にＥＸＯＲ回路２０＿０の出力信号であるｐ０（＝ｙ３＋ｙ８）が入力され、第２入力にＹ［８：０］のうちの１ビットＹ［７］が入力され、入力される２信号の排他的論理和演算を行い、ｐ５（＝ｙ３＋ｙ７＋ｙ８）を出力する。
ＥＸＯＲ回路２０＿６は、第１入力にＥＸＯＲ回路２０＿１の出力信号であるｐ１（＝ｙ２＋ｙ７）が入力され、第２入力にＹ［８：０］のうちの１ビットＹ［６］が入力され、入力される２信号の排他的論理和演算を行い、ｐ６（＝ｙ２＋ｙ６＋ｙ７）を出力する。
ＥＸＯＲ回路２０＿７は、第１入力にＥＸＯＲ回路２０＿２の出力信号であるｐ２（＝ｙ１＋ｙ６）が入力され、第２入力にＹ［８：０］のうちの１ビットＹ［５］が入力され、入力される２信号の排他的論理和演算を行い、ｐ７（＝ｙ１＋ｙ５＋ｙ６）を出力する。
ｐ生成回路２０は、Ｙ［８：０］のうちのＹ［０］〜Ｙ［８］の組合せから、ｐ［０］〜ｐ［８］を演算する。
【００５２】
これにより、図４に示すように、Ｚ［８：０］のうちの各ビットは、Ｘ［８：０］の各ビットｘ［０］〜ｘ［８］と、Ｙ［８：０］の各ビットｙ［０］〜ｙ［８］またはｐ［０］〜ｐ［８］（ｙ［０］〜ｙ［８］の組合せ）により求めることができる。つまり、Ｘ［８：０］とＹ［８：０］との乗算によりＺ［８：０］を求める際、ベクトルＸ［８：０］は９ビットになる。また、ベクトルＹ［８：０］は、Ｙ［８：０］の９ビットのうちの複数ビットと、９ビットのうちいくつかを組合せた複数ビットとの併せて９ビットになる。
【００５３】
ここで、Ｘ［８：０］を、規定元（α０〜α８）とすれば、８ビットのベクトルで表されるＸ［８：０］（元α０〜α８）各々と、同じく８ビットのベクトルで表されるＹ［８：０］（以下、係数ベクトルｅ１＝（ｅ１８、ｅ１７、ｅ１６、ｅ１５、ｅ１４、ｅ１３、ｅ１２、ｅ１１、ｅ１０）とする）との積は、図４、及び図５を参照して、それぞれ以下の様に表される。
ｅ１α０＝（ｅ１８、ｅ１７、ｅ１６、ｅ１５、ｅ１４、ｅ１３、ｅ１２、ｅ１１、ｅ１０）
ｅ１α１＝（ｅ１７、ｅ１６、ｅ１５、ｅ１４、（ｅ１３＋ｅ１８）、ｅ１２、ｅ１１、ｅ１０、ｅ１８）
ｅ１α２＝（ｅ１６、ｅ１５、ｅ１４、（ｅ１３＋ｅ１８）、（ｅ１２＋ｅ１７）、ｅ１１、ｅ１０、ｅ１８、ｅ１７）
ｅ１α３＝（ｅ１５、ｅ１４、（ｅ１３＋ｅ１８）、（ｅ１２＋ｅ１７）、（ｅ１１＋ｅ１６）、ｅ１０、ｅ１８、ｅ１７、ｅ１６）
ｅ１α４＝（ｅ１４、（ｅ１３＋ｅ１８）、（ｅ１２＋ｅ１７）、（ｅ１１＋ｅ１６）、（ｅ１０＋ｅ１５）、ｅ１８、ｅ１７、ｅ１６、ｅ１５）
ｅ１α５＝（（ｅ１３＋ｅ１８）、（ｅ１２＋ｅ１７）、（ｅ１１＋ｅ１６）、（ｅ１０＋ｅ１５）、（ｅ１４＋ｅ１８）、ｅ１７、ｅ１６、ｅ１５、ｅ１４）
ｅ１α６＝（（ｅ１２＋ｅ１７）、（ｅ１１＋ｅ１６）、（ｅ１０＋ｅ１５）、（ｅ１４＋ｅ１８）、（ｅ１３＋ｅ１７＋ｅ１８）、ｅ１６、ｅ１５、ｅ１４、（ｅ１３＋ｅ１８））
ｅ１α７＝（（ｅ１１＋ｅ１６）、（ｅ１０＋ｅ１５）、（ｅ１４＋ｅ１８）、（ｅ１３＋ｅ１７＋ｅ１８）、（ｅ１２＋ｅ１６＋ｅ１７）、ｅ１５、ｅ１４、（ｅ１３＋ｅ１８）、（ｅ１２＋ｅ１７））
ｅ１α８＝（（ｅ１０＋ｅ１５）、（ｅ１４＋ｅ１８）、（ｅ１３＋ｅ１７＋ｅ１８）、（ｅ１２＋ｅ１６＋ｅ１７）、（ｅ１１＋ｅ１５＋ｅ１６）、ｅ１４、（ｅ１３＋ｅ１８）、（ｅ１２＋ｅ１７）、（ｅ１１＋ｅ１６））
【００５４】
従って、規定元と係数ｅ１との積は、係数ベクトルｅ１の各ビットまたは各ビットの組合せの和により計算できる。なお、係数ベクトルの各ビットは、後述する誤り係数計算部３２により演算される。そのため、次数ｘに対応して設けられる位置検索回路（ＳＲＣ）では、係数ベクトルｅ１の各ビットの組合せを演算する論理ゲート（ＥＸＯＲ回路）により構成される回路（図５（ａ）に示す演算を行う図５（ｂ）に示すｐ生成回路２０）が必要となる。なお、ｐ生成回路２０は、上述のように８個のＥＸＯＲ回路で構成することができる。
【００５５】
以上、ｅ１ｘを求める場合の規定元（α０〜α８）各々と係数ｅ１との積について説明したが、残りの５０２個の元（α９〜α５１０）各々と係数ｅ１との積については、以下のように位置検索回路（ＳＲＣ）において演算される。
図６は、規定元を用いてＸ［８：０］＝（１、０、１、０、１、０、１、０、１）と係数ベクトルｅ１との積を求める場合の論理式を示す。
図３に示すように、Ｘ［８：０］＝（１、０、１、０、１、０、１、０、１）は、規定元を用いて（α８＋α６＋α４＋α２＋α０）と表すことができる。従って、Ｘ［８：０］＝（１、０、１、０、１、０、１、０、１）と係数ｅ１との積は、規定元（α０〜α８）と係数ｅ１を用いて、図６に示す論理式に示すように表すことができる。
Ｘ［８：０］×ｅ１＝（１、０、１、０、１、０、１、０、１）×ｅ１
＝ｅ１α０＋ｅ１α２＋ｅ１α４＋ｅ１α６＋ｅ１α８
＝（ｅ１８＋ｅ１６＋ｅ１４＋（ｅ１２＋ｅ１７）＋（ｅ１０＋ｅ１５）、
ｅ１７＋ｅ１５＋（ｅ１３＋ｅ１８）＋（ｅ１１＋ｅ１６）＋（ｅ１４＋ｅ１８）、
ｅ１６＋ｅ１４＋（ｅ１２＋ｅ１７）＋（ｅ１０＋ｅ１５）＋（ｅ１３＋ｅ１７＋ｅ１８）、
ｅ１５＋（ｅ１３＋ｅ１８）＋（ｅ１１＋ｅ１６）＋（ｅ１４＋ｅ１８）＋（ｅ１２＋ｅ１６＋ｅ１７）、
ｅ１４＋（ｅ１２＋ｅ１７）＋（ｅ１０＋ｅ１５）＋（ｅ１３＋ｅ１７＋ｅ１８）＋（ｅ１１＋ｅ１５＋ｅ１６）、
ｅ１３＋ｅ１１＋ｅ１８＋ｅ１６＋ｅ１４、
ｅ１２＋ｅ１０＋ｅ１７＋ｅ１５＋（ｅ１３＋ｅ１８）、
ｅ１１＋ｅ１８＋ｅ１６＋ｅ１４＋（ｅ１２＋ｅ１７）、
ｅ１０＋ｅ１７＋ｅ１５＋（ｅ１３＋ｅ１８）＋（ｅ１１＋ｅ１６））
【００５６】
このように、５０２個の元（α９〜α５１０）各々についても、位置検索回路（ＳＲＣ）において、規定元（α０〜α８）と係数ｅ１を用いて表すことができることから、これらの元についても、係数ベクトルｅ１の各ビットまたは各ビットの組合せの和により表すことができる。
【００５７】
なお、上記Ｘ［８：０］×ｅ１を生成するため、すなわち、規定元（α０〜α８）と係数ｅ１との積の５つの和を演算するため、ＥＸＯＲ回路が４つ必要であるように見える。しかし、実際は、３ビットが１の元（α９〜α５１０のいずれか）と２ビットが１の元（α９〜α５１０のいずれか）との和を演算するか、あるいは、１ビットが１の規定元と４ビットが１の元（α９〜α５１０のいずれか）との和を演算すれば求められるため、位置検索回路（ＳＲＣ）におけるＥＸＯＲ回路の個数としては９個で足りる。
例えば、図３に示す元のうち３ビットが１である元α１４、α１５、α１６各々とｅ１との積ｅ１α１４、ｅ１α１５、ｅ１α１６は、それぞれ以下のように表される。
ｅ１α１４＝ｅ１（α５＋α４＋１）＝ｅ１（α５＋α９）
ｅ１α１５＝ｅ１（α６＋α５＋α）＝ｅ１（α６＋α１０）
ｅ１α１６＝ｅ１（α７＋α６＋α２）＝ｅ１（α７＋α１１）
これらの各積を演算するには、規定元を含む５１１個の元のいずれかの元と係数ｅ１との積と、規定元を含む５１１個の元のいずれかの元と係数ｅ１との積との和を求めればよいので、演算回路としてはそれぞれ９ビットの和をとる９個のＥＸＯＲ回路があれば演算できる。
【００５８】
その他の元についても、各元と係数ｅ１との積は、規定元を含む５１１個の元のうちの２つの元に対してそれぞれ係数ｅ１を乗じた９ビットの値の和をとることにより演算できるので、演算回路としてはそれぞれＥＸＯＲ回路が９個あれば演算できる。
【００５９】
まとめると、９個の規定元と係数ｅ１との積は、８個のＥＸＯＲ回路で構成することができ、５０２個の規定元と係数ｅ１との積は、９×５０２個のＥＸＯＲ回路で構成することができ、併せて（８＋９×５０２）＝４５２６個のＥＸＯＲ回路で構成することができる。
他の係数ｅ２、ｅ３、ｅ４と規定元を含む５１０個の元各々との積を求めるＳＲＣ３３＿２、ＳＲＣ３３＿３、ＳＲＣ３３＿４についても、ＳＲＣ３３＿１と同様に４５２６個のＥＸＯＲ回路で構成することができる。つまり、４個の位置検索回路では、論理ゲートを４５２６×４＝１８１０４個で構成することができる。
また、チェン探索部では、この４個の位置検索回路各々の出力（９ビット×５１１個）の和をとって、エラー検出信号を生成するため、４×９×５１１＝１８３９６個のＥＸＯＲ回路を必要とする。
従って、チェン探索部では、１８４２８＋１８３９６＝３６８２４個の論理ゲートが必要となるが、従来のチェン探索部が３５３６１２の論理ゲートを必要とすることに対して、論理ゲートの個数を約１／１０にまで、大幅に削減することができる。
【００６０】
［メモリ装置の構成］
以下、図面を参照して、本発明の実施の形態について説明する。図１は、不揮発性半導体記憶装置１０であるＮＡＮＤ型フラッシュメモリの構成例を示す概略ブロック図である。
不揮発性半導体記憶装置１０は、メモリセルアレイ１１、ページバッファ１２、誤り検出訂正回路１３、バッファ１４、Ｉ／Ｏパッド１５、制御回路１６、アドレスデコーダ１７、及びロウ及びブロックデコーダ１８を含んで構成される。
【００６１】
メモリセルアレイ１１は、複数のスタックゲート構造のトランジスタ、すなわち電気的書き換え可能な不揮発性メモリセル（記憶素子）をカラム方向（列方向）に直列接続して、ビット線毎に設けられたＮＡＮＤセルストリングを、行方向（ビット線の配列方向）に複数個配置したブロックから構成される。このブロックは、ビット線の配線方向に複数個配置される。また、このブロックは、メモリセルのデータの消去単位で設けられている。各ブロックにおいては、同一行に配置された不揮発性メモリ各々のゲートには、ビット線に直行したワード線が接続される。
１本のワード線により選択される不揮発性メモリセルの範囲がプログラム及び読み出しの単位となる１ページである。
【００６２】
ページバッファ１２は、ページ単位のデータのプログラム及び読み出しを行うため、ビット線毎に設けられたページバッファ回路から構成されている。このページバッファ１２におけるページバッファ回路各々は、それぞれのビット線に接続され、接続されたビット線の電位を増幅して判定するセンスアンプ回路として用いるラッチ回路を有する。
ページバッファ１２（データ格納部）は、不揮発性半導体記憶装置１０のデータ読み出し動作において、メモリセルアレイ１１の１ページ分のメモリセルが記憶するデータ（データ列）からなるセルデータＣｅｌｌ  Ｄａｔａが入力され、このデータを増幅して誤り検出訂正回路１３に対して出力する。一方、ページバッファ１２は、不揮発性半導体記憶装置１０のデータ書込み（プログラム）動作において、誤り検出訂正回路１３から供給されるデータを内部のラッチ回路に格納し、ベリファイ動作を行いつつ、全てのデータを符号データＣｏｄｅ  Ｄａｔａとして１ページ内のメモリセルに書き込む。
【００６３】
この符号データＣｏｄｅ  Ｄａｔａには、誤り検出訂正回路１３が生成するパリティデータＰａｒｉｔｙが含まれる。なお、本実施形態において、例えば情報長３２Ｂｙｔｅ （バイト）に対しＢＣＨ符号を用いて４Ｂｉｔ（ビット）訂正を行う誤り訂正システムを例に取るとき、１ページは、２Ｋ（＝２０４８）バイト、すなわち、１６ｋ（＝１６３８４）ビットの通常データを各々記憶するメモリセルと、２３０４ビットのパリティデータを各々記憶するメモリセルから構成される。すなわち、セルデータＣｅｌｌ  Ｄａｔａ、及び符号データＣｏｄｅ  Ｄａｔａは、（１６ｋ＋２３０４）ビットから構成される。また、１ページは、誤り検出訂正回路１３の訂正の単位として、例えば６４個のセクタに分割されている。つまり、１セクタに対応するデータは、３２バイト（＝２５６ビット）の通常データ、３６ビットのパリティデータから構成される。
また、本実施形態において、メモリ外部よりのアクセスは、通常メモリに対して対応するカラムアドレスＹ［１３：０］を入力することにより行われる。パリティデータは、通常データの訂正用に付加される内部データであり、外部からは直接アクセスされることはない。
【００６４】
誤り検出訂正回路１３は、詳細については後述するが、不揮発性半導体記憶装置１０のデータ読み出し動作において、ページバッファ１２から読み出されたデータを、セクタ毎に処理して、エラー位置探索方程式の係数を算出し、内部のラッチに保持する。また、誤り検出訂正回路１３は、読み出し動作において、カラムアドレスにより位置が示されるビットのデータの誤りを訂正し、バッファ１４に書き込む。このバッファ１４に書き込まれた訂正後のデータは、書き込み後において再びバッファ１４をアクセスすることにより、Ｉ／Ｏパッド１５を介して訂正済データＣｏｒｒｅｃｔｅｄ  Ｄａｔａとして外部へ出力される。なお、Ｉ／Ｏパッド１５と誤り検出訂正回路１３との間に入出力回路を設けて、この入出力回路を介して外部へデータを出力してもよい。
【００６５】
また、誤り検出訂正回路１３は、不揮発性半導体記憶装置１０のデータ書き込み動作において、Ｉ／Ｏパッド１５から入力される情報データＩｎｆｏｒｍａｔｉｏｎ  Ｄａｔａを、バッファ１４を介して受け取る。誤り検出訂正回路１３は、受け取った情報データＩｎｆｏｒｍａｔｉｏｎ  ＤａｔａからパリティデータＰａｒｉｔｙを生成するとともに、受け取った情報データＩｎｆｏｒｍａｔｉｏｎ  Ｄａｔａ、及びパリティデータＰａｒｉｔｙをページバッファ１２に対して出力する。ページバッファ１２は、これらのデータを符号データＣｏｄｅ  Ｄａｔａとして、選択されているページに接続されるメモリセルに書き込む。
【００６６】
制御回路１６は、各種制御信号が入力され、不揮発性メモリセルに対するデータのプログラム、読み出し、消去などの動作、及びベリファイの動作の制御を行う。
例えば、制御信号は、外部クロック信号、チップイネーブル信号／ＣＥ、読み出しイネーブル信号／ＲＥ、プログラムイネーブル信号／ＷＥ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、ライトプロテクト信号／ＷＰなどである。制御回路１６は、これらの制御信号と、Ｉ／Ｏパッド１５から入力されるコマンドデータとが示す動作モードに応じて、各回路に対して内部制御信号を出力する。
例えば、制御回路１６は、プログラムイネーブル信号／ＷＥの立ち上がり時にコマンドラッチイネーブル信号ＣＬＥがロウ（Ｌ）レベルからハイ（Ｈ）レベルになることにより、Ｉ／Ｏパッド１５からコマンドデータを取り込み、内部のレジスタに保持する。
【００６７】
アドレスデコーダ１７は、Ｉ／Ｏパッド１５から入力されるアドレス（ロウアドレス、ブロックアドレス、カラムアドレス）を制御回路１６からの内部制御信号に基づいて保持する。また、アドレスデコーダ１７は、保持したアドレスを、制御回路１６からの内部制御信号に基づいて、ロウ及びブロックデコーダ１８、ページバッファ１２、及び誤り検出訂正回路１３へ出力する。
例えば、制御回路１６は、プログラムイネーブル信号／ＷＥの立ち上がり時にアドレスラッチイネーブル信号ＡＬＥがロウ（Ｌ）レベルからハイ（Ｈ）レベルになることにより、Ｉ／Ｏパッド１５からアドレスを取り込み、アドレスデコーダ１７の内部レジスタに保持する。
【００６８】
ロウ及びブロックデコーダ１８は、アドレスデコーダ１７が保持し、出力するロウアドレス、及びブロックアドレスに応じて、メモリセルアレイ１１のブロック、及びワード線の選択を行い、１ページ上のメモリセルを選択する。
また、アドレスデコーダ１７は、内部に保持するカラムアドレスに応じて、メモリセルアレイ１１のビット線及びページバッファ１２の選択を行う。
【００６９】
本実施形態において、データ読み出し動作においては、ページバッファ１２内のセルデータＣｅｌｌ  Ｄａｔａが誤り検出訂正回路１３に読み出され、エラー位置探索方程式の係数がセクタ毎に計算される。そして、セクタ毎に計算された係数とカラムアドレスとに応じて、カラムアドレスにより位置が示されるビットのデータ、すなわちメモリセルのデータ（１６ｋビット）に誤りがあるか否かが検出され、誤りがある場合は訂正されて、バッファ１４に書き込まれる。このバッファ１４に書き込まれた訂正後のデータは、書き込み後において再びバッファ１４をアクセスすることにより、訂正済データＣｏｒｒｅｃｔｅｄ  ＤａｔａとしてＩ／Ｏパッド１５から出力される。
【００７０】
また、データ書き込み動作においては、バッファ１４にいったんページバッファ１２内に格納されたセルデータＣｅｌｌ  Ｄａｔａが読み出される。バッファ１４は、例えばＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）により構成される。
バッファ１４では、セルデータＣｅｌｌ  Ｄａｔａのうち、入力されるカラムアドレスに対応する部分のデータが、Ｉ／Ｏパッド１５からのデータＩｎｆｏｒｍａｔｉｏｎ  Ｄａｔａに書き換えられる。また、誤り検出訂正回路１３では、バッファ１４の書き換え後のデータを含む１セクタ分のデータに対応したパリティデータが算出される。そして、これらのパリティデータを含む６４セクタ分のデータが、符号データＣｏｄｅ  Ｄａｔａとして、ページバッファ１２を介して選択されているページに書き込まれる。
【００７１】
次に、図２は、誤り検出訂正回路１３の詳細な構成例を示す図である。
本実施形態においては、誤り検出訂正回路（以下、ＥＣＣ回路とも称する）１３として、ＢＣＨ符号（Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ  Ｈｏｃｑｕｅｎｇｈｅｍ ｃｏｄｅ）を用いたＥＣＣ回路を例にとって説明する。ＥＣＣ回路は、ＢＣＨ符号で代表されるガロア体演算を利用したブロック符号である。なお、ＢＣＨ符号の替りに、例えばＨａｍｍｉｎｇ符号（Ｈａｍｍｉｎｇ  ｃｏｄｅ）、リードソロモン符号（Ｒｅｅｄ−Ｓｏｌｏｍｏｎ  ｃｏｄｅ）を用いることも可能である。なお、以下の説明では、情報データ長３２バイト（＝２５６ビット）を訂正単位、すなわち１ページの１／６４のセルのデータを訂正の単位とし、それぞれの訂正単位のうちの４ビットのデータの訂正が可能なＢＣＨ符号を用いたＥＣＣ回路について説明する。
【００７２】
誤り検出訂正回路１３は、データの復号を司るデコーダ部３０と、訂正用パリティデータＰａｒｉｔｙを生成し、訂正用パリティデータＰａｒｉｔｙをセルへの書き込みデータに付加するエンコーダ部４０とを含んで構成される。
このうち、エンコーダ部４０は、パリティ生成回路４１を有する。パリティ生成回路４１は、バッファ１４に書き込まれた情報データＩｎｆｏｒｍａｔｉｏｎ  Ｄａｔａを生成多項式で除算して得られるパリティデータＰａｒｉｔｙを生成する。また、パリティ生成回路４１は、情報データＩｎｆｏｒｍａｔｉｏｎ  Ｄａｔａに、生成したパリティデータＰａｒｉｔｙを付加して、ページバッファ１２に対して出力する。これらのデータは、不揮発性半導体記憶装置１０のデータ書き込み時において、選択された１ページに書き込まれる符号データＣｏｄｅ  Ｄａｔａとなる。なお、本実施形態では、不揮発性半導体記憶装置１０からのデータ読み出し時において、誤り検出訂正回路１３が高速にデータ訂正処理を行うことに特徴を有するものであり、以下ではデコーダ部３０について詳細に説明する。
【００７３】
デコーダ部３０は、シンドローム計算部３１、誤り係数計算部３２、チェン探索部３３、及び誤り訂正部３４を含んで構成される。
シンドローム計算部３１は、不揮発性半導体記憶装置１０のデータ読み出し時に、ページバッファ１２に読み出されたセルデータＣｅｌｌ  Ｄａｔａが、符号データとしてセクタ毎に入力され、この符号データを独立な最小多項式で除算することによりシンドロームを計算する。４ビットのデータの誤り訂正が可能なＢＣＨ符号で使用される独立な最小多項式は、４つである。シンドローム計算部３１は、これら４つの最小多項式に対応して、４つのシンドローム算出回路３１＿１〜３１＿４を備えている。これらのシンドローム算出回路３１＿１〜３１＿４は、それぞれシンドロームＳ１、Ｓ３、Ｓ５、Ｓ７を計算する。
【００７４】
誤り係数計算部３２は、これらのシンドロームＳ１、Ｓ３、Ｓ５、Ｓ７を使用して、セクタ毎のエラー位置探索方程式の係数ｅ４、ｅ３、ｅ２、ｅ１、及びｅ０を計算する。係数ｅ４、ｅ３、ｅ２、ｅ１、及びｅ０は、エラー位置探索方程式Λ（ｘ）＝ｅ４ｘ４＋ｅ３ｘ３＋ｅ２ｘ２＋ｅ１ｘ１＋ｅ０の係数である。エラー位置探索方程式Λ（ｘ）は、ページバッファ１２からセクタ毎に読み出されたビットに誤りがあるか否かを探索する際にチェン探索部３３において用いられる。
【００７５】
次に、チェン探索部３３の構成、及び動作について説明する。図７は、チェン探索部３３の構成の一例を示す図である。
チェン探索部３３は、４個の位置検索回路、及び排他的論理和演算部３３＿１１を含んで構成される。
図７に示すように、４個の位置検索回路は、ＳＲＣ（Ｃａｌｃｕｌａｔｉｏｎ  ｏｆ  ｅｖｅｒｙ  ｂｉｔ  ｆｏｒ  ｅ１ｘ）３３＿１、ＳＲＣ（Ｃａｌｃｕｌａｔｉｏｎ  ｏｆ  ｅｖｅｒｙ  ｂｉｔ  ｆｏｒ  ｅ２ｘ２）３３＿２、ＳＲＣ（Ｃａｌｃｕｌａｔｉｏｎ  ｏｆ  ｅｖｅｒｙ  ｂｉｔ  ｆｏｒ  ｅ３ｘ３）３３＿３、ＳＲＣ（Ｃａｌｃｕｌａｔｉｏｎ  ｏｆ  ｅｖｅｒｙ  ｂｉｔ  ｆｏｒ  ｅ４ｘ４）３３＿４である。以下、これらを、それぞれ位置検索回路ＳＲＣ３３＿１、ＳＲＣ３３＿２、ＳＲＣ３３＿３、ＳＲＣ３３＿４と言う。
【００７６】
位置検索回路ＳＲＣ３３＿１、ＳＲＣ３３＿２、ＳＲＣ３３＿３、ＳＲＣ３３＿４がそれぞれ演算するｅ１ｘ、ｅ２ｘ２、ｅ３ｘ３、ｅ４ｘ４におけるｘは、符号データ、つまりページバッファに格納されたセルデータＣｅｌｌ  Ｄａｔａの位置を示す値（図３に示す５１１個の９ビットの元αｓ；ｓ＝０〜５１０）である。また、係数ｅ１、ｅ２、ｅ３、ｅ４は、それぞれ誤り係数計算部３２から入力される９ビットのベクトルである。
【００７７】
位置検索回路ＳＲＣ３３＿１は、係数ｅ１を取り込み、元α０〜α５１０各々に係数ｅ１を乗じて、ｉ０〜ｉ５１０を演算する。
位置検索回路ＳＲＣ３３＿２は、係数ｅ２を取り込み、元α０〜α５１０各々に係数ｅ２を乗じて、ｊ０〜ｊ５１０を演算する。
位置検索回路ＳＲＣ３３＿３は、係数ｅ３を取り込み、元α０〜α５１０各々に係数ｅ３を乗じて、ｋ０〜ｋ５１０を演算する。
位置検索回路ＳＲＣ３３＿４は、係数ｅ４を取り込み、元α０〜α５１０各々に係数ｅ４を乗じて、ｌ０〜ｌ５１０を演算する。
【００７８】
排他的論理和演算部３３＿１１は、係数ｅ０と、位置検索回路ＳＲＣ３３＿１、ＳＲＣ３３＿２、ＳＲＣ３３＿３、ＳＲＣ３３＿４の演算結果各々の排他的論理和を各元αｓ毎に演算し、例えば元α０であれば（ｉ０＋ｊ０＋ｋ０＋ｅ０）を演算し、エラー検出信号ｂｃｈ［５１０：０］を、誤り訂正部３４に対して出力する。排他的論理和演算部３３＿１１における演算は、エラー位置探索方程式Λ（ｘ）＝ｅ４ｘ４＋ｅ３ｘ３＋ｅ２ｘ２＋ｅ１ｘ１＋ｅ０に対して、ｘ＝αｓ（ｓ＝０〜５１０）をそれぞれ代入する演算であり、Λ（ｘ）の値が０である場合、エラー検出信号ｂｃｈ［ｘ］はＨレベルとなる。一方、Λ（ｘ）の値が０でない場合、エラー検出信号ｂｃｈ［ｘ］はＬレベルとなる。
【００７９】
誤り訂正部３４は、本実施形態において、５１１個のＥＸＯＲ回路３４＿ｓ（図２参照、ｓ＝０〜５１０）により構成される。ＥＸＯＲ回路３４＿ｓは、エラー検出信号ｂｃｈ［ｓ］がＨレベルであれば、元αｓによりビット線の位置が示されるビットのデータの論理（０または１）を反転して、バッファ１４に対して書き込む。この訂正済データは、バッファ１４をアクセスすることにより、Ｃｏｒｒｅｃｔｅｄ  Ｄａｔａの１ビットとして出力される。一方、ＥＸＯＲ回路３４＿ｓは、エラー検出信号ｂｃｈ［ｓ］がＬレベルであれば、元αｓによりビット線の位置が示されるビットのデータの論理をそのまま、バッファ１４に対して書き込む。この訂正されないデータは、バッファ１４をアクセスすることにより、Ｃｏｒｒｅｃｔｅｄ  Ｄａｔａの１ビットとして出力される。
【００８０】
図８は、位置検索回路ＳＲＣ３３＿１、ＳＲＣ３３＿２、ＳＲＣ３３＿３、ＳＲＣ３３＿４の構成を示すブロック図である。
図８に示すように、位置検索回路ＳＲＣ３３＿ｉ（ｉ＝１、２、３、４）は、係数ｅｉと規定元α０〜α８各々との積を演算する第１ベクトル生成回路３３ａと、係数ｅｉと規定元α９〜α５１０各々との積を演算する第２ベクトル生成回路３３ｂとから構成される。
第１ベクトル生成回路３３ａは、図５（ｂ）に示すｐ生成回路２０と、８個の選択回路（選択回路８０＿０〜８０＿８）とから構成される。
【００８１】
ｐ生成回路２０は、誤り係数計算部３２から入力される係数ベクトルｅｉ＝（ｅｉ８、ｅｉ７、ｅｉ６、ｅｉ５、ｅｉ４、ｅｉ３、ｅｉ２、ｅｉ１、ｅｉ０）から、ｐ０〜ｐ７を生成する。ｐ０〜ｐ７は、図５（ａ）に示す論理式においてｙ［０］〜ｙ［８］を用いて求められる値である。ここで、ｙ［０］〜ｙ［８］の各々は、それぞれｅｉ０〜ｅｉ８である。ｐ生成回路２０は、入力されるｅｉ０〜ｅｉ８と生成したｐ０〜ｐ７とを、選択回路８０＿０〜選択回路８０＿８に対して出力する。
【００８２】
選択回路８０＿０〜選択回路８０＿８は、予め設定された固定値である９’ｂ００００００００１、９’ｂ０００００００１０、９’ｂ００００００１００、９’ｂ０００００１０００、９’ｂ００００１００００、９’ｂ０００１０００００、９’ｂ００１００００００、９’ｂ０１０００００００、９’ｂ１００００００００に応じて、ｅｉ０〜ｅｉ８とｐ０〜ｐ７とのうちから、９個を選択して、ｅｉα０〜ｅｉα８を出力する。
このｅｉα０〜ｅｉα８は、図４に示す論理式においてｙ［０］〜ｙ［８］の各々を、それぞれｅｉ０〜ｅｉ８と置き換えたときのＺ［８：０］である。
【００８３】
なお、これらの選択回路８０＿０〜選択回路８０＿８は、誤り係数計算部３２が求めるｅｉ０〜ｅｉ８とｐ生成回路２０が生成したｐ０〜ｐ７とから、９個の値を固定値に応じて選択するだけの回路であるので、ＥＸＯＲ回路などの論理ゲートを必要としない。また、それぞれ９ビットのｅｉα０〜ｅｉα８の出力先が排他的論理和演算部３３＿１１のＥＸＯＲ回路の入力と第２ベクトル生成回路３３ｂのＥＸＯＲ回路の入力とに決まっている。そのため、選択回路を用いず、ｐ生成回路２０の出力信号である係数ｅの組合せと、誤り係数計算部３２の出力信号である係数との出力先を、既に決められたＥＸＯＲ回路の入力先に、配線接続部を設けて接続してもよい。従って、選択回路８０＿０〜選択回路８０＿８または配線接続部を、規定元と係数との積を演算する決定部（第１ベクトル生成回路）と言うものとする。
【００８４】
第２ベクトル生成回路３３ｂは、係数ｅｉと規定元α９〜α５１０各々との積を演算する回路である。この回路は、ＥＸＯＲ回路８１＿ｉ（図８（ｂ）に示す）を（５１１−９）＝５０２個備えている。ＥＸＯＲ回路８１＿ｉは、規定元を含む５１１個の元各々と係数ｅｉとの積（５１１個の乗算結果）のうち２つの乗算結果であるｅｉαｐと乗算結果ｅｉαｑ（それぞれ９ビットの値）との和を演算する。
【００８５】
例えば、係数ｅ２とα０〜α５１０との積の演算結果は、以下の様になる（図３参照）。
ｅ２（α０）＾２＝ｅ２（α０）、
ｅ２（α１）＾２＝ｅ２（α２）、
ｅ２（α２）＾２＝ｅ２（α４）、
ｅ２（α３）＾２＝ｅ２（α６）、
ｅ２（α４）＾２＝ｅ２（α８）、
ｅ２（α５）＾２＝ｅ２（α１０）＝ｅ２（α５＋α）、
ｅ２（α６）＾２＝ｅ２（α１２）＝ｅ２（α７＋α３）、
ｅ２（α７）＾２＝ｅ２（α１４）＝ｅ２（α５＋α４＋１）＝ｅ２（α５＋α９）、
ｅ２（α８）＾２＝ｅ２（α１６）＝ｅ２（α７＋α６＋α２）＝ｅ２（α７＋α１１）、・・・
これらの演算は、第１ベクトル生成回路３３ａ、または第２ベクトル生成回路３３ｂにおいて行われる。上記演算結果のうち、ｅ２（α０）＾２、ｅ２（α１）＾２、ｅ２（α２）＾２、ｅ２（α３）＾２、ｅ２（α４）＾２については、第１ベクトル生成回路３３ａにおいて演算され、第１ベクトル生成回路３３ａは、これらを第２ベクトル生成部３３ａ、及び排他的論理和演算部３３＿１１に対して出力する。排他的論理和演算部３３＿１１では、これらを、それぞれｊ０、ｊ１、ｊ２、ｊ３、ｊ４として排他的論理和演算に用いる。
また、ｅ２（α５）＾２、ｅ２（α６）＾２、ｅ２（α７）＾２、ｅ２（α８）＾２については、第２ベクトル生成回路３３ｂにおいて演算され、第２ベクトル生成回路３３ａは、これらを第２ベクトル生成部３３ａ、及び排他的論理和演算部３３＿１１に対して出力する。排他的論理和演算部３３＿１１は、これらを、それぞれｊ５、ｊ６、ｊ７、ｊ８として排他的論理和演算に用いる。
なお、第２ベクトル生成回路３３ｂは、ｅ２（α５）＾２、ｅ２（α６）＾２、ｅ２（α７）＾２、ｅ２（α８）＾２の演算を、図８（ｂ）に示すＥＸＯＲ回路により、５１１個のうちの１つの元にｅ２を乗算した値（９ビット）と５１１個のうちの１つの元にｅ２を乗算した値（９ビット）との和を求める演算をする。上記例では、ｅ２（α５）＾２＝ｅ２α５＋ｅ２α、ｅ２（α６）＾２＝ｅ２α７＋ｅ２α３、ｅ２（α７）＾２＝ｅ２α５＋ｅ２α９、ｅ２（α８）＾２＝ｅ２α７＋ｅ２α１１、・・・の様に、２つの入力で和を演算する。
【００８６】
つまり、第２ベクトル生成回路３３ｂにおける各回路は、図３に示す規定元のうち複数元の和に対して係数ｅｉを乗じた値（９ビット）を出力する回路である。しかし、規定元以外の元５０２個各々に係数ｅｉを乗じた値は、規定元を含む元５１１個各々に係数ｅｉを乗じた値（計５１１個）のうちの２つの値の和により求めることができるので、第２ベクトル生成部ではＥＸＯＲ回路が４５１８個（＝５０２個×９ビット分）あれば演算を行なうことができる。
【００８７】
このように、本発明は、ガロア体ＧＦ（２ｍ）上（ｍは整数、以下同じ）のｍビットによりベクトル表現される（２ｍ−１）個の元を誤り位置探索式へ代入し、各元に対応したデータ列のビットに誤りが有るか否かを示すエラー検出信号を生成する誤り位置検索回路（チェン探索部３３）であって、誤り位置探索式の次数毎に元を代入する複数の位置検索回路（位置検索回路ＳＲＣ３３＿１〜３３＿４）を含んで構成され、１ビットのみが１となる規定値の固定ベクトル（α０〜α８）により表した元を、複数の位置検索回路各々に代入し、代入して得られた各位置検索回路の結果（ｉ０〜ｉ５１０、ｊ０〜ｊ５１０、ｋ０〜ｋ５１０、ｌ０〜ｌ５１０、を元毎に排他的論理和を演算してエラー検出信号ｂｃｈ［５１０：０］とする。
【００８８】
また、位置検索回路は、誤り位置探索式の係数であるｍビットの係数ベクトル（ｅ１〜ｅ４）と、１ビットのみが１となるｍビットの元を表す固定ベクトル（９’ｂ００００００００１〜９’ｂ１００００００００）とから、ｍ個の第１ベクトル（規定元と係数との積）を生成する第１ベクトル生成回路３３ａと、第１ベクトルのうち複数個のベクトルの和で表される（２ｍ−ｍ−１）個の第２ベクトルを生成する第２ベクトル生成回路３３ｂと、を備え、第１ベクトル生成回路３３ａは、固定ベクトルのうち１となるビットに応じて、係数ベクトルの各ビットとまたは各ビットの組み合わせのうちから第１ベクトルの決定を並列に行うｍ個のビット決定部（選択回路８０＿０〜８０＿８または配線接続部）を有し、第２ベクトル生成回路３３ｂは、第１ベクトル、及び第２ベクトルのうち２つのベクトルの和により第２ベクトルを演算する排他的論理和回路（３３＿ｉ）を有する。
【００８９】
本発明によれば、９個の規定元と係数（係数ベクトル）との積は、第１ベクトル生成回路３３ａにおいて８個のＥＸＯＲ回路で構成することができる。また、５０２個の規定元と係数との積は、第２ベクトル生成回路３３ｂにおいて９×５０２個のＥＸＯＲ回路で構成することができる。つまり、位置検索回路ＳＲＣ３３＿１〜３３＿４各々を、（８＋９×５０２）＝４５２６個のＥＸＯＲ回路で構成することができる。
従って、４個の位置検索回路では、合計で論理ゲ  ートを４５２６×４＝１８１０４個で構成することができる。
また、チェン探索部３３における排他的論理和演算部３３＿１１では、この４個の位置検索回路各々の出力（９ビット×５１１個）の和をとって、エラー検出信号を生成するため、４×９×５１１＝１８３９６個のＥＸＯＲ回路を必要とする。
従って、チェン探索部３３では、１８４２８＋１８３９６＝３６８２４個の論理ゲートが必要となるが、上述の従来のチェン探索部３３９が３５３６１２の論理ゲートを必要とすることに対して、論理ゲートの個数を約１／１０にまで、大幅に削減することができる。
よって、本発明によれば、位置検索回路の回路規模を縮小し、回路規模の縮小された誤り探索方程式一括処理回路（誤り位置検索回路）、誤り検出訂正回路、及びメモリ装置を提供することができる。
【００９０】
以上、この発明の実施形態を、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００９１】
１０…不揮発性半導体記憶装置、１１…メモリセルアレイ、１２…ページバッファ、１３…誤り検出訂正回路、１４…バッファ、１５…Ｉ／Ｏパッド、１６…制御回路、１７…アドレスデコーダ、１８…ロウ及びブロックデコーダ、２０…ｐ生成回路、３０…デコーダ部、３１…シンドローム計算部、３１＿１，３１＿２，３１＿３，３１＿４…シンドローム算出回路、３２…誤り係数計算部、３３，３３９…チェン探索部、３３ａ…第１ベクトル生成回路、３３ｂ…第２ベクトル生成回路、３４…誤り訂正部、３４＿ｓ，２０＿０，２０＿１，２０＿２，２０＿３，２０＿４，２０＿５，２０＿６，２０＿７，８１＿ｉ…排他的論理和回路（ＥＸＯＲ回路）、４０…エンコーダ部、４１…パリティ生成回路、８０＿０，８１＿１，８０＿８…選択回路、ＳＲＣ３３＿１，ＳＲＣ３３＿２，ＳＲＣ３３＿３，ＳＲＣ３３＿４，３３９＿０，３３９＿１，３３９＿５１０…位置検索回路、３３＿１１…排他的論理和演算部
【図１】
2014068058.tif 000003
【図２】
2014068058.tif 000004
【図３】
2014068058.tif 000005
【図４】
2014068058.tif 000006
【図５】
2014068058.tif 000007
【図６】
2014068058.tif 000008
【図７】
2014068058.tif 000009
【図８】
2014068058.tif 000010
【図９】
2014068058.tif 000011
【図１０】
2014068058.tif 000012