(57)【要約】【課題】情報ビット数に対する検査ビット数を削減してチップの集積度を向上させる。【解決手段】Ｉ／Ｏ端子１０４0〜１０４7とページバッファ１０２0〜１０２7との間に、複数のメモリセルエリア１０１0〜１０１7に書き込むデータに対して誤り訂正用の検査ビットＥＣＣを生成して付加する符号化器及び生成された検査ビットＥＣＣを使用してメモリセルエリア１０１0〜１０１7から読み出されたデータに対して誤り訂正処理を行う復号器を備えたＥＣＣ回路１０３とを備える。ＥＣＣ回路１０３は、１つのメモリセルエリア１０１ｊに対する書き込み及び読み出しの単位となる５２８ビットの８倍の４２２４ビットを情報ビット長として１つの４０ビットの検査ビットＥＣＣを割り当て、符号化処理及び復号処理を８ビットで並列に実行する。【選択図】図７
2006209969.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリセルがマトリクス配列されたａ個のメモリセルエリアと、
前記複数のメモリセルエリアに書き込むデータに対して誤り訂正用の検査ビットを生成して付加する符号化器及び前記生成された検査ビットを使用して前記複数のメモリセルエリアから読み出されたデータに対して誤り訂正処理を行う復号器を備えた誤り訂正回路と
を備えた半導体装置において、
前記誤り訂正回路は、ｋ＝ｂ×ａビット（ｂは自然数）を情報ビット長として、その情報ビット長に対し１つのｈビットの検査ビットを生成し、（ｋ＋ｈ）ビットのデータを同時に書き込み及び読出しを行う単位とする
ことを特徴とする半導体装置。
【請求項２】
前記復号器は、前記情報ビットと検査ビットとを入力してシンドロームを計算するシンドローム計算回路と、
前記計算されたシンドロームから誤り位置多項式の項を計算する第１の演算部及び計算された誤り多項式の項から誤り位置多項式を算出して誤り位置を検出する第２の演算部からなる誤り位置検出回路と、
前記メモリセルエリアから読み出されたデータに対して前記検出された誤り位置でデータ反転処理を施すデータ反転回路と
を備えた
ことを特徴とする請求項１記載の半導体装置。
【請求項３】
前記符号化器、シンドローム計算回路及び第１の演算部は、演算用ロジック回路を構成するレジスタと演算回路とを切り替えて構成されるものであることを特徴とする請求項２記載の半導体装置。
【請求項４】
前記シンドローム又は誤り位置多項式の項を計算する際に使用されるガロア演算回路を更に含むことを特徴とする請求項２記載の半導体装置。
【請求項５】
データに対して誤り訂正用の検査ビットを生成して付加する符号化器を含む誤り訂正回路を備えた半導体装置において、
前記符号化器は、ｋ＝ｂ×ａビット（ｂは自然数）の情報ビットのデータに対し１つのｈビットの検査ビットを付加すると共に、前記符号化器には、前記データがａビットずつ入力される
ことを特徴とする半導体装置。
【請求項６】
検査ビットを使用してデータに対して誤り訂正処理を行う復号器を含む誤り訂正回路を備えた半導体装置において、
前記復号器は、
ｋ＝ｂ×ａビット（ｂは自然数）の情報ビットのデータに対し１つのｈビットの検査ビットが付加された（ｋ＋ｈ）ビットのデータをａビットずつ入力されシンドロームを計算するシンドローム計算回路と、
前記計算されたシンドロームから誤り位置多項式の項を計算する第１の演算部及び計算された誤り多項式の項から誤り位置多項式を算出して誤り位置を検出する第２の演算部からなる誤り位置検出回路と、
前記データに対して前記検出された誤り位置でデータ反転処理を施すデータ反転回路と
を備えることを特徴とする半導体装置。
【請求項７】
前記第２の演算部は、複数個のローケータと、前記ローケータ間に繋がる複数個の演算器により構成され、
前記第１の演算部は、前記第２の演算部と複数本のバスにより接続されている
ことを特徴とする請求項２または６記載の半導体装置。
【請求項８】
前記第２の演算部は、前記第１の演算部の両側に分割して配置されることを特徴とする請求項２または６記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＮＡＮＤ型フラッシュメモリ等の半導体装置に係り、特に、チップ内に誤り訂正機能を持たせた半導体装置に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリは、書き換えを繰り返すとセルの特性が劣化すること、及び長時間放置するとデータ化けすることが知られている。したがって、この種のＮＡＮＤ型フラッシュメモリの信頼性を上げるため、従来より、チップ内に誤り検出訂正用のＥＣＣ（Error Correcting Code）回路を搭載した半導体メモリが提案されている（例えば特開平２０００−３４８４９７号、特開平２００１−１４８８８号等）。
【０００３】
図２１は、ＥＣＣ回路を搭載した従来のＮＡＮＤ型フラッシュメモリの構成を簡略的に示すブロック図である。
【０００４】
このメモリは、８つのメモリセルエリア１0，１1，…，１7から構成されている。各メモリセルエリア１0〜１7は、マトリクス状に配列された図示しない複数のメモリセルからなり、共通のワード線に接続された５２８個のメモリセルに対して５２８本のビット線を介して５２８ビットのデータ（＝１ページ）を一括して書き込み及び読み出しができるようになっている。各メモリセルエリア１0〜１7には、５２８ビットの書き込みデータ及び読み出しデータを保持するページバッファ２0〜２7が接続されている。ページバッファ２0〜２7と、各メモリセルエリア１0〜１7毎に設けられたＩ／Ｏ端子４0〜４7との間には、各メモリセルエリア１0〜１7毎にＥＣＣ回路３0〜３7がそれぞれ設けられている。
【０００５】
各ＥＣＣ回路３0〜３7は、各メモリセルエリア１0〜１7に記憶される１ページ分（５２８ビット）の情報ビットに対し、所定ビット数の検査ビット（ＥＣＣ）を付加する符号化機能と、検査ビットが付加された情報ビットから所定ビット数の誤り検出及び誤り訂正を行う復号機能とを備えたもので、誤り訂正符号として、例えば比較的少ない回路規模で複数ビットの誤り訂正が可能なＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号が使用されている。外部とメモリとの間は、例えばメモリセル数に対応する８ビット単位でデータがリード・ライトされる。従って、各ＥＣＣ回路３0〜３7には、１ビットずつデータが入力され、内部の巡回型シフトレジスタを１ビットずつ巡回し、１ビットずつ出力することで、符号化処理及び復号処理が実行される。
【０００６】
次に、ＢＣＨ符号を利用した従来のＥＣＣ回路３0〜３7の符号化及び復号動作ついて説明する。
【０００７】
なお、情報ビット数５２８ビットで、２ビット誤り訂正３ビット誤り検出を行うＢＣＨ符号の検査ビット数は２１ビットになるが、ここでは説明を簡単にするため、情報ビット数ｋ＝７、符号長ｎ＝１５、訂正ビット数ｔ＝２の２ビット誤り訂正３ビット誤り検出が可能なＢＣＨ符号を用いた誤り検出・訂正方式を例にとり説明する。
【０００８】
この場合の符号化、復号化に必要な生成多項式は以下のようになることが一般に知られている。
【０００９】
［数１］
原始多項式     ：  Ｆ（Ｘ） ＝Ｘ4＋Ｘ＋１
αの最小多項式 ：  Ｍ1（ｘ）＝Ｘ4＋Ｘ＋１
α3の最小多項式：  Ｍ3（ｘ）＝Ｘ4＋Ｘ3＋Ｘ2＋Ｘ＋１
生成多項式     ：  Ｇ（ｘ） ＝Ｍ1Ｍ3＝Ｘ8＋Ｘ7＋Ｘ6＋Ｘ4＋１
（１）符号化回路
図２２は、従来のＥＣＣ回路３ｉ（ｉ＝０，１，…，又は７）の内部に機能的に構成される符号化回路１０を示すブロック図である。この符号化回路１０は、レジスタＤ7，Ｄ6，Ｄ5，Ｄ4，Ｄ3，Ｄ2，Ｄ1，Ｄ0からなるシフトレジスタ１１と、モジュロ２の演算を行うＸＯＲ回路１２1，１２2，１２3，１２4と、切替スイッチＳＷ１，ＳＷ２とから構成されている。
【００１０】
シフトレジスタ１１を１回動かす動作は、シフトレジスタ１１の値をそれぞれＸ倍することに相当する。いま、シフトレジスタ１１に格納されたデータの値を、次のように表す。
【００１１】
［数２］
ａ0Ｘ0＋ａ1Ｘ1＋ａ2Ｘ2＋ａ3Ｘ3＋ａ4Ｘ4＋ａ5Ｘ5＋ａ6Ｘ6＋ａ7Ｘ7
［但しａiはレジスタＤiに格納された値でａi＝０又は１（ｉ＝０〜７）］
これを１回シフトすることにより、
［数３］
ａ0Ｘ1＋ａ1Ｘ2＋ａ2Ｘ3＋ａ3Ｘ4＋ａ4Ｘ5＋ａ5Ｘ6＋ａ6Ｘ7＋ａ7Ｘ8
となる。数１の生成多項式Ｇ（ｘ）よりＸ8＝Ｘ7＋Ｘ6＋Ｘ4＋１の関係があるため、数３は、
［数４］
ａ7Ｘ0＋ａ0Ｘ1＋ａ1Ｘ2＋ａ2Ｘ3＋（ａ3＋ａ7）Ｘ4＋ａ4Ｘ5＋（ａ5＋ａ7）Ｘ6＋（ａ6＋ａ7）Ｘ7
のように表せる。これは各ビットをシフトさせた際に、レジスタＤ7の値ａ7をレジスタＤ0に格納し、レジスタＤ3，Ｄ7の値ａ3，ａ7をＸＯＲ回路１２1で足し込んでレジスタＤ4に格納し、レジスタＤ5，Ｄ7の値ａ5＋ａ7をＸＯＲ回路１２2で足し込んでレジスタＤ6に格納し、レジスタＤ6，Ｄ7の値ａ6＋ａ7をＸＯＲ回路１２3で足し込んでレジスタＤ7に格納することに相当する。
【００１２】
符号化時には、まず、スイッチＳＷ１，ＳＷ２がＯＮ側に接続され、Ｉ／Ｏ端子４ｉを介して外部から入力データ（情報ビット）Ｉ0，Ｉ1，Ｉ2，Ｉ3，Ｉ4，Ｉ5，Ｉ6（Ｉ0〜Ｉ6＝０又は１）が１ビットずつ入力される。入力データＩ0〜Ｉ6が１ビット入力される毎に、シフトレジスタ１１が１回動作する。データＩ0〜Ｉ6が入力されている間はスイッチＳＷ１はＯＮであるため、これらのデータがそのまま１ビットずつページバッファ２ｉに出力される。同時に、データＩ0〜Ｉ6は、ＸＯＲ回路１２1でレジスタＤ7の値ａ7と足し込まれ、順次シフトレジスタ１１に格納されていく。データＩ0〜Ｉ6のページバッファ２ｉへの入力が終了すると、シフトレジスタ１１のレジスタＤ7，Ｄ6，Ｄ5，Ｄ4，Ｄ3，Ｄ2，Ｄ1，Ｄ0の内部には検査ビットＩ7，Ｉ8，Ｉ9，Ｉ10，Ｉ11，Ｉ12，Ｉ13，Ｉ14がそれぞれ格納された状態となる。その後、スイッチＳＷ１，ＳＷ２は共にＯＦＦ側に接続され、シフトレジスタ１１が動作する毎に、スイッチＳＷ１を介して、検査ビットＩ7〜Ｉ14がページバッファ２ｉにシリアルに出力される。そして、ページバッファ２ｉに格納された情報ビットと検査ビットとがメモリセルエリア１ｉに記憶される。同時に、シフトレジスタ１１の値はリセットされる。
【００１３】
（２）復号回路
次に、復号回路について説明する。復号回路は、シンドローム計算回路と、誤り位置検出回路とから構成される。２ビット誤り訂正の場合、復号に際して２つのシンドロームＳ1，Ｓ3が必要であり、これらは最小多項式Ｍ1（ｘ）＝Ｘ4＋Ｘ＋１により求められることが知られている。図２３（ａ）は、従来のＳ1シンドローム計算回路２０を具体的に表した図、同図（ｂ）は、従来のＳ3シンドローム計算回路３０を示す図である。
【００１４】
同図（ａ）のＳ1シンドローム計算回路２０は、最小多項式Ｍ1（ｘ）に基づき、レジスタＤ3，Ｄ2，Ｄ1，Ｄ0からなるシフトレジスタ２１とＸＯＲ回路２２1，２２2とにより構成されている。ここでシフトレジスタ２１を１回動かす動作はシフトレジスタ２１の値をＸ倍することに相当する。いま、シフトレジスタ２１に格納された値を、次のように表す。
【００１５】
［数５］
ａ0Ｘ0＋ａ1Ｘ1＋ａ2Ｘ2＋ａ3Ｘ3
［但しａiはレジスタＤiに格納された値でａi＝０又は１（ｉ＝０〜３）］
これを１回シフトすることにより
［数６］
ａ0Ｘ1＋ａ1Ｘ2＋ａ2Ｘ3＋ａ3Ｘ4
となるが、αの最小多項式Ｍ1（ｘ）よりＸ4＝Ｘ＋１の関係があるため、
［数７］
ａ3Ｘ0＋（ａ0＋ａ3）Ｘ1＋ａ1Ｘ2＋ａ2Ｘ3
となる。これは、各ビットをシフトさせた際に、レジスタＤ3の値ａ3をレジスタＤ0に格納し、レジスタＤ0，Ｄ3の値ａ0，ａ3をＸＯＲ回路１２2で足し込んでレジスタＤ1に格納することに相当する。メモリセルに記憶された情報ビットＩ0〜Ｉ6と検査ビットＩ7〜Ｉ14とは、この順にＳ1シンドローム計算回路２０に１ビットずつ入力され、１ビット入力される毎に、シフトレジスタ２１が１回動作する。全てのビットＩ0〜Ｉ14が入力されたらシフトレジスタ２１（Ｄ0〜Ｄ3）にシンドロームＳ1が生成される。
【００１６】
図２３（ｂ）のＳ3シンドローム計算回路３０も、Ｓ1シンドローム計算回路２０と同様にＤ3，Ｄ2，Ｄ1，Ｄ0からなるシフトレジスタ３１及びＸＯＲ回路３２1，３２2，３２3，３２4からなり、最小多項式Ｍ1（ｘ）のＸ3回路により構成されている。Ｓ3シンドローム計算回路３０では、シフトレジスタ３１を１回動かす動作はシフトレジスタ３１の値をＸ3倍することに相当する。いま、シフトレジスタ３１に格納された値を数５のように表し、これをＸ3すると、
［数８］
ａ0Ｘ3＋ａ1Ｘ4＋ａ2Ｘ5＋ａ3Ｘ6
となるが、αの最小多項式Ｍ1（ｘ）よりＸ4＝Ｘ＋１の関係があるため、
［数９］
ａ1Ｘ0＋（ａ1＋ａ2）Ｘ1＋（ａ2＋ａ3）Ｘ2＋（ａ0＋ａ3）Ｘ3
となる。これは、各ビットをシフトさせた際に、レジスタＤ1の値ａ1をレジスタＤ0に格納し、レジスタＤ1，Ｄ2の値ａ1，ａ2をＸＯＲ回路３２2で足し込んでレジスタＤ1に格納し、レジスタＤ2，Ｄ3の値ａ2，ａ3をＸＯＲ回路３２3で足し込んでレジスタＤ2に格納し、レジスタＤ0，Ｄ3の値ａ0，ａ3をＸＯＲ回路３２4で足し込んでレジスタＤ3に格納することに相当する。このＳ3シンドローム回路３０にも、メモリセルに記憶された情報ビットＩ0〜Ｉ6と検査ビットＩ7〜Ｉ14とが、この順に１ビットずつ入力され、１ビット入力される毎に、シフトレジスタ３１が１回動作する。全てのビットＩ0〜Ｉ14が入力されたらシフトレジスタ３１（Ｄ0〜Ｄ3）にシンドロームＳ3が生成される。
【００１７】
図２４は、復号処理のアルゴリズムを示すフローチャートである。まず、Ｓ1，Ｓ2シンドローム計算回路２０，３０で、メモリセルエリア１ｉから読み出された情報ビットと検査ビットからシンドロームＳ1，Ｓ3を計算する（ステップＳ１）。シンドロームＳ1，Ｓ3が、Ｓ1＝Ｓ3＝０の場合、エラー無しとして読み出された情報ビットがそのまま出力される（ステップＳ２，Ｓ３，Ｓ４）。シンドロームＳ1，Ｓ3のうち、いずれか一方のみが０のときには、訂正不能としてデータがそのまま出力される（ステップＳ２，Ｓ３，Ｓ５，Ｓ６，Ｓ７）。Ｓ1≠０，Ｓ3≠０場合、計算を行い、σ1＝Ｓ12、σ2＝Ｓ13＋Ｓ3を求める（ステップＳ２，Ｓ６，Ｓ８）。ここでσ2＝０の場合（ステップＳ９）、１ビットエラーがあることが分かるので、１ビット訂正して出力する（ステップＳ１０）。σ2≠０の場合（ステップＳ９）、２ビットエラーがあることが分かるので、２ビット訂正して出力する（ステップＳ１１）。
【００１８】
誤りビットの位置は、数１０に示す誤り位置多項式σ（Ｚ）にＺ＝αI（Ｉ＝０，１，２，３，４，５，６）を順次代入することによって求められることが一般に知られている。σ（αI）＝０となったｉが誤りの位置である。
【００１９】
［数１０］
σ（Ｚ）＝Ｓ1＋σ1×Ｚ＋σ2×Ｚ2
このような点に基づき構成された誤り位置検出回路の構成を図２５及び図２６に示す。図２５は、Ｓ1、σ1及びσ2を計算すると共に格納する第１の演算部４０ａを示し、図２６は、第１の演算部４０ａの演算結果に基づいて数１０の演算を行ってデータの誤り位置を示す検出信号を出力する第２の演算部４０ｂを示している。第１の演算部４０ａは、図２５に示すようにシフトレジスタ４１、Ｘ演算回路４２及びＸ2演算回路４３により構成されている。シフトレジスタ４１ａには、シンドロームＳ1が格納され、シフトレジスタ４２ａ，４３ａにはσ1＝Ｓ12、σ2＝Ｓ13＋Ｓ3の演算結果が格納される。ここでシフトレジスタ４２ａの値を、
［数１１］
ａ0Ｘ0＋ａ1Ｘ1＋ａ2Ｘ2＋ａ3Ｘ3
［但しａiはレジスタＤiに格納された値でａi＝０又は１（ｉ＝０〜３）］
とすると、Ｘ演算回路４２は、これをＸ倍するので、シフトレジスタ４２ａの値は、
［数１２］
ａ0Ｘ1＋ａ1Ｘ2＋ａ2Ｘ3＋ａ3Ｘ4
となるが、αの最小多項式Ｍ1（ｘ）よりＸ4＝Ｘ＋１の関係があるため、数１２は、
［数１３］
ａ3Ｘ0＋（ａ0＋ａ3）Ｘ1＋ａ1Ｘ2＋ａ2Ｘ3
となる。これは、各ビットをシフトさせた際に、レジスタＤ3の値ａ3をレジスタＤ0に格納し、レジスタＤ0，Ｄ3の値ａ0，ａ3をＸＯＲ回路４２ｂで足し込んでレジスタＤ1に格納することに相当する。
【００２０】
また、Ｘ2演算回路４３は、シフトレジスタ４３ａの値をＸ2倍するので、シフトレジスタ４３ａの値に数１１で示す値が格納されているとすると、これをＸ2倍することにより、シフトレジスタ４３ａの値は、
［数１４］
ａ0Ｘ2＋ａ1Ｘ3＋ａ2Ｘ4＋ａ3Ｘ5
となるが、αの最小多項式Ｍ1（ｘ）よりＸ4＝Ｘ＋１の関係があるため、数１４は、
［数１５］
ａ2Ｘ0＋（ａ2＋ａ3）Ｘ1＋（ａ0＋ａ3）Ｘ2＋ａ1Ｘ3
となる。これは、各ビットをシフトさせた際に、レジスタＥ2の値ａ2をレジスタＥ0に格納し、レジスタＥ1の値ａ1をレジスタＥ3に格納し、レジスタＥ2，Ｅ3の値ａ2，ａ3をＸＯＲ回路４３ｂ1で足し込んでレジスタＥ1に格納し、レジスタＥ0，Ｅ3の値ａ0，ａ3をＸＯＲ回路４３ｂ2で足し込んでレジスタＥ2に格納することに相当する。
【００２１】
１ビットのデータＩ0〜Ｉ6の出力時、シフトレジスタ４１ａ，４２ａ，４３ａを１回動作させることにより、Ｘ演算回路４２では、σ1の項がＺ倍され、Ｘ2演算回路４３では、σ2の項がＺ2倍ずつされる。ＮＡＮＤ型フラッシュメモリでは、メモリセルに記憶された情報ビットをチップの外部に出力する際のトグル信号に同期させてシフトレジスタ４１ａ，４２ａ，４３ａを動かす。これにより、第２の演算部４０ｂでは、ＸＯＲ回路４４とＮＯＲゲート４５とで演算された結果の出力が、誤り位置となったところで１となり、この出力で対応するデータＩｉを反転させることにより誤り検出訂正が行われる。
【００２２】
このように、ＢＣＨ符号を用いた従来のＥＣＣ回路では、１ビットの入力に対し１回のシフト及び計算が基本動作となる。ＮＡＮＤ型フラッシュメモリでは、１つのアドレスに対して８ＩＯ又は１６ＩＯ等の単位で外部よりデータが並列に入力されるため、各ＩＯ毎に誤り訂正させるか、この一度の入力の間に８又は１６回の計算を行なわなくてはならない。しかし、一度の入力の間に８又は１６回の計算行なうことは、この部分のみ高速で動作させることを意味し、特別なプロセスなどが必要なため、現実には行なえない。
【００２３】
そこで従来は、各メモリセルエリア１ｉ（各Ｉ／Ｏ）毎にＥＣＣ回路３ｉを設けて各メモリセルエリア１ｉ単位で誤り訂正を行うようにしている。この場合、ＮＡＮＤ型フラッシュメモリでは、１ページ（５２８バイト）単位でデータをリードしたり、プログラムしたりするので、各Ｉ／Ｏ毎に２ビット誤り訂正３ビット誤り検出をすると、情報ビット数は５２８ビット、検査ビット数は２１ビットとなり、チップ全体で合計２１×８＝１６８ビットの余分な検査ビットが必要になる。これがチップの集積度を高める際の阻害要因となっていた。
【発明の開示】
【発明が解決しようとする課題】
【００２４】
本発明は、このような問題点に鑑みなされたもので、情報ビット数に対する検査ビット数を削減してチップの集積度を向上させることができる半導体装置を提供することを目的とする。
【課題を解決するための手段】
【００２５】
本発明は、複数のメモリセルがマトリクス配列されたａ個のメモリセルエリアと、前記複数のメモリセルエリアに書き込むデータに対して誤り訂正用の検査ビットを生成して付加する符号化器及び前記生成された検査ビットを使用して前記複数のメモリセルエリアから読み出されたデータに対して誤り訂正処理を行う復号器を備えた誤り訂正回路とを備えた半導体装置において、前記誤り訂正回路は、ｋ＝ｂ×ａビット（ｂは自然数）を情報ビット長として、その情報ビット長に対し１つのｈビットの検査ビットを生成し、（ｋ＋ｈ）ビットのデータを同時に書き込み及び読出しを行う単位とすることを特徴とする。
【００２６】
本発明はまた、データに対して誤り訂正用の検査ビットを生成して付加する符号化器を含む誤り訂正回路を備えた半導体装置において、前記符号化器は、ｋ＝ｂ×ａビット（ｂは自然数）の情報ビットのデータに対し１つのｈビットの検査ビットを付加すると共に、前記符号化器には、前記データがａビットずつ入力されることを特徴とする。
【００２７】
本発明はまた、検査ビットを使用してデータに対して誤り訂正処理を行う復号器を含む誤り訂正回路を備えた半導体装置において、前記復号器は、ｋ＝ｂ×ａビット（ｂは自然数）の情報ビットのデータに対し１つのｈビットの検査ビットが付加された（ｋ＋ｈ）ビットのデータをａビットずつ入力されシンドロームを計算するシンドローム計算回路と、前記計算されたシンドロームから誤り位置多項式の項を計算する第１の演算部及び計算された誤り多項式の項から誤り位置多項式を算出して誤り位置を検出する第２の演算部からなる誤り位置検出回路と、前記データに対して前記検出された誤り位置でデータ反転処理を施すデータ反転回路とを備えることを特徴とする。
【００２８】
本発明は、複数のメモリセルがマトリクス配列された複数のメモリセルエリアと、各メモリセルエリアのデータ入出力部に設けられて前記メモリセルエリアへの書き込みデータ及び前記メモリセルエリアからの読み出しデータを一時格納する複数のバッファと、前記各メモリセルエリアへの書き込み用のデータを外部から入力すると共に前記各メモリセルエリアから読み出されたデータを外部に出力する複数の入出力端子と、前記複数の入出力端子と前記複数のバッファとの間に設けられて前記複数のメモリセルエリアに書き込むデータに対して誤り訂正用の検査ビットを生成して付加する符号化器及び前記生成された検査ビットを使用して前記複数のメモリセルエリアから読み出されたデータに対して誤り訂正処理を行う復号器を備えた誤り訂正回路とを備えた半導体記憶装置において、前記誤り訂正回路は、１つの前記メモリセルエリアに対する書き込み及び読み出しの単位となるデータのビット数をＭとしたとき、Ｍ×Ｎビット（Ｎは２以上の整数）を情報ビット長として１つの検査ビットを割り当て、符号化処理及び復号処理の少なくとも一方をＮビットのデータを並列に処理して実行するものであることを特徴とすることを特徴とする。
【００２９】
本発明によれば、従来、各メモリセルエリアに対するアクセスの単位であるＭビット毎に情報ビットを生成していたのに対し、Ｎビットの並列処理が可能になったことにより、Ｍ×Ｎビットに対して１つの検査ビットを割り当てることが可能になり、トータル的な情報ビットに対する検査ビット数を削減することができる。これにより、誤り訂正回路を搭載しつつチップの集積度を向上させることができる。
【００３０】
一例を挙げると、ｔビット訂正（ｔ＋１）ビット誤り検出ＢＣＨ符号では、
［数１６］
符号長        ｎ＝２m−１
情報ビット数  ｋ≦２m−１−ｍ×ｔ
検査ビット数  ｍｔ＋１≦ｎ−ｋ
訂正ビット数  ｔ
の関係があるため、ｍの数を大きくすると、符号長及び情報ビット数は指数関数的に増加するが、検査ビット数はそれほど増加しない。このため、情報ビット数は、２m−１−ｍ×ｔを超えない限度で大きい方が情報ビット数に対する検査ビット数の割合が小さくなる。従って、できるだけ大きな情報ビット数に対し、検査ビットを設けた方が有利である。
【００３１】
例えば、ＮＡＮＤ型フラッシュメモリは、１ページ（５２８バイト）でリードしたり、プログラムするが、各ＩＯ毎（メモリセルエリア毎）に２ビット誤り訂正３ビット誤り検出をすると、情報ビット数はｋ＝５２８ビット、検査ビット数は２１ビットとなるため、合計２１×８＝１６８ビットの余分な検査ビットが必要である。
【００３２】
しかし、１ページを１つの単位で、２ビット誤り訂正３ビット誤り検出をすると、情報ビット数が４２２４ビットのとき、検査ビット数は２７ビットで良い。３ビット誤り訂正４ビット誤り検出としても、情報ビット数が４２２４ビットのとき、検査ビット数は４０ビットで足りる。
【００３３】
本発明の一つの実施形態においては、前記メモリセルエリアは、Ｎ個設けられている。符号化器は、例えば情報ビット長ｋ＝Ｍ×Ｎ、符号長ｎ、訂正ビット長ｔで定められる生成多項式Ｇ（Ｘ）から導かれる巡回符号を検査ビットとして生成するシフトレジスタ及び演算回路からなり、前記シフトレジスタが、次数を順番に異ならせたＮビットのデータを並列に入力し、１回のシフト動作で各データをＸN倍し、Ｍ回のシフト動作で内部に前記検査ビットを生成するものである。
【００３４】
また、復号器は、例えば前記情報ビットと検査ビットとを入力してシンドロームを計算するシンドローム計算回路と、前記計算されたシンドロームから誤り位置多項式の項を計算する第１の演算部及び計算された誤り多項式の項から誤り位置多項式を算出して誤り位置を検出する第２の演算部からなる誤り位置検出回路と、前記メモリセルエリアからバッファを介して読み出されたデータに対して前記検出された誤り位置でデータ反転処理を施すデータ反転回路とを備え、前記シンドローム計算回路が、情報ビット長ｋ＝Ｍ×Ｎ、符号長ｎ、訂正ビット長ｔで定められるα演算子の最小多項式Ｍ（Ｘ）に基づく巡回符号をシンドロームとして生成するシフトレジスタ及び演算回路からなり、前記シフトレジスタが、次数を順番に異ならせたＮビットのデータを並列に入力し、１回のシフト動作で各データをＸKN（Ｋは整数）倍し、全ての前記情報ビット及び検査ビットが入力されることにより内部にシンドロームを生成するものである。
【００３５】
また、誤り位置検出回路は、前記第２の演算部が、情報ビット長ｋ＝Ｍ×Ｎ、符号長ｎ、訂正ビット長ｔで定められるα演算子の最小多項式Ｍ（Ｘ）に基づく巡回符号を誤り位置多項式の項として生成するシフトレジスタ及び演算回路からなり、前記シフトレジスタが、前記メモリエリアからのデータ出力に同期してシフト動作をし、各データをＸK（Ｋは整数）倍し、順次、誤り訂正位置を検出するものである。
【００３６】
前記符号化器、シンドローム計算回路及び第１の演算部は、演算用ロジック回路を構成するレジスタと演算回路とを切り替えて構成されるようにしても良い。また、復号器は、シンドローム又は誤り位置多項式の項を計算する際に使用されるガロア演算回路を更に含むようにしても良い。更に、前記第２の演算部は、例えば前記Ｎビットのデータに対してそれぞれ設けられたＮ個のローケータと、隣接するローケータ間に介挿されて隣接するローケータへのデータをＸL倍するＸL演算回路（Ｌは整数）とを備えたものである。
【発明を実施するための最良の形態】
【００３７】
以下、図面を参照しながら、本発明の実施形態について説明する。
（１）第１の実施形態
まず、本発明を理解するため、第１の実施形態として、情報ビット数ｋ＝７、符号長ｎ＝１５、訂正ビット数ｔ＝２の２ビット誤り訂正の例について説明する。
（１−１）符号化回路
図２２に示した従来の符号化回路１０に入力データＩ0が符号化回路１０に入力されると、この入力データＩ0は、ＸＯＲ回路１２4によって符号化回路のＸ7の項に足しこまれ、その後Ｘ倍される。初期状態では符号化回路１０の各レジスタ１１の値は０であるため、この値を（０）とすると
［数１７］
（０＋Ｉ0Ｘ7）Ｘ
となる。次に入力データＩ1が符号化回路１０に入力されると、この入力データＩ1は、符号化回路１０のＸ7の項に足しこまれ、この後Ｘ倍されているので、
［数１８］
((０＋Ｉ0Ｘ7)Ｘ＋Ｉ1Ｘ7)Ｘ
となる。
【００３８】
次に入力データＩ2が符号化回路１０に入力されると、この入力データＩ2は、符号化回路１０のＸ7の項に足しこまれ、この後Ｘ倍されているので、
［数１９］
(((０＋Ｉ0Ｘ7)Ｘ＋Ｉ1Ｘ7)Ｘ＋Ｉ2Ｘ7)Ｘ
となる。
【００３９】
同様に、入力データＩ6まで符号化回路１０に入力されると、
［数２０］
(((((((０＋Ｉ0Ｘ7)Ｘ＋Ｉ1Ｘ7)Ｘ＋Ｉ2Ｘ7)Ｘ＋Ｉ3  Ｘ7)Ｘ＋Ｉ4Ｘ7)Ｘ
＋Ｉ5Ｘ7)Ｘ＋Ｉ6Ｘ7)Ｘ
となる。この式を変形すると
［数２１］
((((０＋Ｉ0Ｘ7＋Ｉ1Ｘ6)Ｘ2＋Ｉ2Ｘ7＋Ｉ3Ｘ6)Ｘ2＋Ｉ4Ｘ7＋Ｉ5Ｘ6)Ｘ2＋Ｉ6Ｘ7)Ｘ
となり、これは、入力データＩ0，Ｉ1がそれぞれ符号化回路１０のＸ7，Ｘ6の項に足しこまれ、この後Ｘ2倍され、次に入力データＩ2，Ｉ3がそれぞれが符号化回路１０のＸ7，Ｘ6の項に足しこまれ、この後Ｘ2倍され、次に入力データＩ4，Ｉ5がそれぞれが符号化回路１０のＸ7，Ｘ6の項に足しこまれ、この後Ｘ2倍されることを意味する。つまり２ビットの入力の後、１回のシフトレジスタ１１の動作でデータがＸ2倍される。但し、最後のＩ6は従来通り１ビットの入力で、Ｘ倍されることになる。
【００４０】
ここで、シフトレジスタ１１の値を、数２で示した値として、これをＸ2倍すると、
［数２２］
ａ0Ｘ2＋ａ1Ｘ3＋ａ2Ｘ4＋ａ3Ｘ5＋ａ4Ｘ6＋ａ5Ｘ7＋ａ6Ｘ8＋ａ7Ｘ9
となるが、数１の生成多項式Ｇ（ｘ）よりＸ8＝Ｘ7＋Ｘ6＋Ｘ4＋１の関係があるため、数２１は、
［数２３］
（ａ6＋ａ7）Ｘ0＋ａ7Ｘ1＋ａ0Ｘ2＋ａ1Ｘ3＋（ａ2＋ａ6＋ａ7）Ｘ4＋（ａ3＋ａ7）Ｘ5＋（ａ4＋ａ6＋ａ7）Ｘ6＋（ａ5＋ａ6）Ｘ7
となる。
【００４１】
図１は数２３を具体的に回路で構成した本実施形態に係る符号化回路５０の構成を示すブロック図である。
【００４２】
この符号化回路５０は、レジスタＤ7，Ｄ6，Ｄ5，Ｄ4，Ｄ3，Ｄ2，Ｄ1，Ｄ0からなるシフトレジスタ５１と、ＸＯＲ回路５２1，５２2，５２3，５２4，５２5，５２6，５２7と、入力データ及び出力データを切り換えるための４つのスイッチＳＷ１１，ＳＷ１２，ＳＷ２１，ＳＷ２２とから構成されている。シフトレジスタ５１は、図２に示すように、リセット信号ＲＳＴｎによりデータの内容がリセットされ、クロック信号ＣＬＫに同期して入力端子ＩＮから出力端子ＯＵＴへと１ビットのデータを転送する４段のトランスファーゲート５１ａと、必要なゲート回路５１ｂとから構成されている。ＸＯＲ回路５２は、図３に示すように、入力端子ＩＮ１，ＩＮ２に入力されたデータにモジュロ２の演算を施して出力端子ＯＵＴから出力する。
【００４３】
この符号化回路５０は、数２３に基づき、１回のシフト動作で、レジスタＤ6，Ｄ7の値ａ6，ａ7をＸＯＲゲート５２6で足し込んでレジスタＤ0に格納し、レジスタＤ7の値ａ7をレジスタＤ1に格納し、レジスタＤ0の値ａ0をレジスタＤ2に格納し、レジスタＤ1の値ａ1をレジスタＤ3に格納し、レジスタＤ2，Ｄ6，Ｄ7の値ａ2，ａ6，ａ7をＸＯＲ回路５２1，５２6で足し込んでレジスタＤ4に格納し、レジスタＤ3，Ｄ7の値ａ3，ａ7をＸＯＲ回路５２2で足し込んでレジスタＤ5に格納し、レジスタＤ4，Ｄ6，Ｄ7の値ａ4，ａ6，ａ7をＸＯＲ回路５２3，５２6で足し込んでレジスタＤ6に格納し、レジスタＤ5，Ｄ6の値ａ5，ａ6をＸＯＲ回路５２5で足し込んでレジスタＤ7に格納する。
【００４４】
メモリに書き込まれるため外部から入力された入力データ（情報ビット）Ｉ0，Ｉ1，Ｉ2，Ｉ3，Ｉ4，Ｉ5，Ｉ6は、入力データＩ0，Ｉ2，Ｉ4と、入力データＩ1，Ｉ3，Ｉ5の２つに分割され、入力データＩ0，Ｉ2，Ｉ4がスイッチＳＷ１１，ＳＷ２１のＯＮ側の端子に入力され、入力データＩ1，Ｉ3，Ｉ5がスイッチＳＷ１２，ＳＷ２２のＯＮ側の端子に入力されている。つまり入力データは、２ビットづつ（Ｉ0，Ｉ1），（Ｉ2，Ｉ3），（Ｉ4，Ｉ5）の順で並列に入力され、入力後にシフトレジスタ５１が１回動作する。但し、シフトレジスタ５１は、１つおきに結線されているので、１回のシフト動作でデータがＸ2倍される。データ（Ｉ0，Ｉ1），（Ｉ2，Ｉ3），（Ｉ4，Ｉ5）が入力されている間は、スイッチＳＷ１１，ＳＷ２１，ＳＷ１２，ＳＷ２２は全てＯＮであり、これらのデータがそのまま２ビットずつ並列に出力される。同時に、データＩ0，Ｉ2，Ｉ4は、ＸＯＲ回路５２7でレジスタＤ7の値ａ7と足し込まれ、順次シフトレジスタ５１に格納され、データＩ1，Ｉ3，Ｉ5は、ＸＯＲ回路５２4でレジスタＤ7の値ａ7と足し込まれ、順次シフトレジスタ５１に格納されていく。但し、入力データの最後のＩ6は１ビットの入力であるため、図２２に示した従来の符号化回路１０と同じ結線状態に切り替わるようにする。このような切替を行うのは、情報ビット数としてｋ＝７を選択したためである。データＩ0，Ｉ1，Ｉ2，Ｉ3，Ｉ4，Ｉ5，Ｉ6の入力が終了すると、シフトレジスタ５１のレジスタＤ7，Ｄ6，Ｄ5，Ｄ4，Ｄ3，Ｄ2，Ｄ1，Ｄ0の内部には検査ビットＩ7，Ｉ8，Ｉ9，Ｉ10，Ｉ11，Ｉ12，Ｉ13，Ｉ14がそれぞれ格納された状態となる。その後、スイッチＳＷ１１，ＳＷ２１，ＳＷ１２，ＳＷ２２は全てＯＦＦ側に接続され、シフトレジスタ５１を動作させる毎に、ＳＷ１１の出力に検査ビットＩ7，Ｉ9，Ｉ11，Ｉ13が出力され、ＳＷ１２の出力に検査ビットＩ8，Ｉ10，Ｉ12，Ｉ14が出力される。同時に、シフトレジスタ５１の値はリセットされる。これにより、２ビット入力の並列処理による検査ビットの生成が可能になる。
（１−２）復号回路
（１−２−１）Ｓ1シンドローム計算回路
図２３（ａ）の従来のＳ1シンドローム計算回路２０では、まず、Ｓ1シンドローム計算回路２０内の値がＸ倍された後、ＸＯＲ回路２２1によりＸ0の項に入力データＩ0が足しこまれる。初期状態ではＳ1シンドローム計算回路２０のシフトレジスタ２１の値は０であるため、この値を（０）とすると、
［数２４］
０×Ｘ＋Ｉ0
となる。次にＳ1シンドローム計算回路２０内の値がＸ倍された後、Ｘ0の項に入力データＩ1が足しこまれるので、
［数２５］
（０×Ｘ＋Ｉ0）Ｘ＋Ｉ1
となる。続いてＳ1シンドローム計算回路２０内の値がＸ倍された後、Ｘ0の項に入力データＩ2が足しこまれるので、
［数２６］
((０×Ｘ＋Ｉ0)Ｘ＋Ｉ1)Ｘ＋Ｉ2
となる。このようにして入力データＩ14までがＳ1シンドローム計算回路２０に入力されると、
［数２７］
(((((((((((((０×Ｘ＋Ｉ0)Ｘ＋Ｉ1)Ｘ＋Ｉ2)Ｘ＋Ｉ3)Ｘ＋Ｉ4)Ｘ＋Ｉ5)Ｘ
＋  Ｉ6)Ｘ＋Ｉ7)Ｘ＋Ｉ8)Ｘ＋Ｉ9)Ｘ＋Ｉ10)Ｘ＋Ｉ11)Ｘ＋Ｉ12)Ｘ＋Ｉ13)Ｘ＋Ｉ14
となる。この式を変形すると、
［数２８］
(((((((０×Ｘ2＋Ｉ0Ｘ＋Ｉ1)Ｘ2＋Ｉ2Ｘ＋Ｉ3)Ｘ2＋Ｉ4Ｘ＋Ｉ5)Ｘ2＋Ｉ6Ｘ＋Ｉ7)Ｘ2＋Ｉ8Ｘ＋Ｉ9)Ｘ2＋Ｉ10Ｘ＋Ｉ11)Ｘ2＋Ｉ12Ｘ＋Ｉ13)Ｘ＋Ｉ14
になり、これは、Ｓ1シンドローム計算回路２０内の値をＸ2倍した後、入力データＩ0，がＸ1の項、入力データＩ1がＸ0の項にそれぞれ足しこまれ、次に、Ｓ1シンドローム計算回路２０内の値をＸ2倍した後、入力データＩ2，がＸ1の項、入力データＩ3がＸ0の項にそれぞれ足しこまれ、次に、Ｓ1シンドローム計算回路２０内の値をＸ2倍した後、入力データＩ4がＸ1の項、入力データＩ5がＸ0の項にそれぞれ足しこまれることを意味する。つまり１回のシフトレジスタの動作でデータがＸ2倍され、その後、２ビットのデータを入力している。但し、最後はＳ1シンドローム計算回路２０内の値をＸ倍した後、１ビットの入力で入力データＩ14がＸ0の項に足しこまれている。
【００４５】
ここで、シフトレジスタ２１の値を、数５で示した値として、これをＸ2倍すると、
［数２９］
ａ0Ｘ2＋ａ1Ｘ3＋ａ2Ｘ4＋ａ3Ｘ5
となるが、αの最小多項式Ｍ1（ｘ）より、Ｘ4＝Ｘ＋１の関係があるため、
［数３０］
ａ2Ｘ0＋（ａ2＋ａ3）Ｘ1＋（ａ0＋ａ3）Ｘ2＋ａ1Ｘ3
となる。
【００４６】
図４（ａ）は数３０を具体的に回路で構成した本実施形態に係るＳ1シンドローム計算回路６０の構成を示すブロック図である。
【００４７】
このＳ1シンドローム計算回路６０は、レジスタＤ0，Ｄ1，Ｄ2，Ｄ3からなるシフトレジスタ６１と、ＸＯＲ回路６２1，６２2，６２3，６２4とから構成されている。
【００４８】
このＳ1シンドローム計算回路６０は、数３０に基づき、１回のシフト動作で、レジスタＤ2の値ａ2をレジスタＤ0に格納し、レジスタＤ2，Ｄ3の値ａ2，ａ3をＸＯＲ回路６２2で足し込んでレジスタＤ1に格納し、レジスタＤ0，Ｄ3の値ａ0，ａ3をＸＯＲ回路６２4で足し込んでレジスタＤ2に格納し、レジスタＤ1の値ａ1をレジスタＤ3に格納する。
【００４９】
図示しないメモリセルエリアから読み出された情報ビットＩ0，Ｉ1，Ｉ2，Ｉ3，Ｉ4，Ｉ5，Ｉ6と、検査ビットＩ7，Ｉ8，Ｉ9，Ｉ10，Ｉ11，Ｉ12，Ｉ13，Ｉ14とは、Ｉ0，Ｉ2，Ｉ4，Ｉ6，Ｉ8，Ｉ10，Ｉ12，Ｉ14と、Ｉ1，Ｉ3，Ｉ5，Ｉ7，Ｉ9，Ｉ11，Ｉ13とに分割され、Ｓ1シンドローム計算回路６０に２ビットづつ（Ｉ0，Ｉ1），（Ｉ2，Ｉ3），（Ｉ4，Ｉ5），…の順で並列に入力され、入力後にシフトレジスタ６１が１回動作する。但し、シフトレジスタ６１は、１つおきに結線されているので、１回のシフト動作でデータがＸ2倍される。データＩ0，Ｉ2，Ｉ4，…，Ｉ14は、ＸＯＲ回路６２3でＸＯＲ回路６２2の出力ａ2＋ａ3と足し込まれ、レジスタＤ1に格納され、データＩ1，Ｉ3，Ｉ5，…，Ｉ13は、ＸＯＲ回路６２1でレジスタＤ2の値ａ2と足し込まれ、レジスタＤ0に格納される。但し、情報ビットの最後のＩ6は１ビットの入力であるため、図２３の回路と同じ配線に切り替わる。又は、Ｉ15＝０を、Ｓ1シンドローム計算回路６０に入力させ、シフト動作させた後、シフトレジスタにＸ-1を掛ける。これにより、２ビット入力の並列処理が可能になる。
（１−２−２）Ｓ3シンドローム計算回路
次に、図４（ｂ）のＳ3シンドローム計算回路７０について説明する。図２３（ｂ）の従来のＳ3シンドローム計算回路３０では、まず、Ｓ3シンドローム計算回路３０内の値がＸ3倍された後、ＸＯＲ回路３２1によりＸ0の項に入力データＩ0が足しこまれる。初期状態では、Ｓ3シンドローム計算回路３０のシフトレジスタ３１の値は０であるため、この値を（０）とすると
［数３１］
０×Ｘ3＋Ｉ0
となる。次にＳ3シンドローム計算回路３０内の値がＸ3倍された後、Ｘ0の項に入力データＩ1が足しこまれるので、
［数３２］
（０×Ｘ3＋Ｉ0）Ｘ3＋Ｉ1
となる。続いてＳ3シンドローム計算回路３０内の値がＸ3倍された後、Ｘ0の項に入力データＩ2が足しこまれるので、
［数３３］
((０×Ｘ3＋Ｉ0)Ｘ3＋Ｉ1)Ｘ3＋Ｉ2
となる。このようにして、入力データＩ14までがＳ3シンドローム計算回路３０に入力されると、
［数３４］
(((((０Ｘ3＋Ｉ0)Ｘ3＋Ｉ1)Ｘ3＋Ｉ2)Ｘ3＋Ｉ3)Ｘ3＋Ｉ4)Ｘ3＋Ｉ5)Ｘ3＋Ｉ6)Ｘ3＋Ｉ7)Ｘ3＋Ｉ8)Ｘ3＋Ｉ9)Ｘ3＋Ｉ10)Ｘ3＋Ｉ11)Ｘ3＋Ｉ12)Ｘ3＋Ｉ13)Ｘ3＋Ｉ14
となる。この式を変形すると、
［数３５］
(((((０×Ｘ6＋Ｉ0Ｘ3＋Ｉ1)Ｘ6＋Ｉ2Ｘ3＋Ｉ3)Ｘ6＋Ｉ4Ｘ3＋Ｉ5)Ｘ6＋Ｉ6Ｘ3＋Ｉ7)Ｘ6＋Ｉ8Ｘ3＋Ｉ9)Ｘ6＋Ｉ10Ｘ3＋Ｉ11)Ｘ6＋Ｉ12Ｘ3＋Ｉ13）Ｘ3＋Ｉ14
になり、これは、Ｓ3シンドローム計算回路３０内の値をＸ6倍した後、入力データＩ0がＸ3の項、入力データＩ1がＸ0の項にそれぞれ足しこまれ、次に、Ｓ3シンドローム計算回路３０内の値をＸ6倍した後、入力データＩ2がＸ3の項、入力データＩ3がＸ0の項にそれぞれ足しこまれ、次にＳ3シンドローム計算回路３０内の値をＸ6倍した後、入力データＩ4がＸ3の項、入力データＩ5がＸ0の項にそれぞれ足しこまれることを意味している。つまり１回のシフトレジスタの動作でデータがＸ6倍され、その後、２ビットのデータを入力している。但し、最後はＳ3シンドローム計算回路３０内の値をＸ3倍した後、１ビットの入力で入力データＩ14がＸ0の項に足しこまれている。
【００５０】
ここで、シフトレジスタ３１の値を数５で示した値として、これをＸ6倍すると、
［数３６］
ａ0Ｘ6＋ａ1Ｘ7＋ａ2Ｘ8＋ａ3Ｘ9
となるが、αの最小多項式Ｍ1（ｘ）よりＸ4＝Ｘ＋１の関係があるため、
［数３７］
(ａ1＋ａ2)Ｘ0＋(ａ1＋ａ3)Ｘ1＋(ａ0＋ａ2)Ｘ2＋(ａ0＋ａ1＋ａ3)Ｘ3
となる。
【００５１】
図４（ｂ）は数３７を具体的に回路で構成した本実施例に係るＳ3シンドローム計算回路７０の構成を示すブロック図である。このＳ3シンドローム計算回路７０は、レジスタＤ0，Ｄ1，Ｄ2，Ｄ3からなるシフトレジスタ７１と、ＸＯＲ回路７２1，７２2，７２3，７２4，７２5，７２6とから構成されている。
【００５２】
このＳ3シンドローム計算回路７０は、数３７に基づき、１回のシフト動作で、レジスタＤ1，Ｄ2の値ａ1，ａ2をＸＯＲ回路７２1で足し込んでレジスタＤ0に格納し、レジスタＤ1，Ｄ3の値ａ1，ａ3をＸＯＲ回路７２6で足し込んでレジスタＤ1に格納し、レジスタＤ0，Ｄ2の値ａ0，ａ2をＸＯＲ回路７２4で足し込んでレジスタＤ2に格納し、レジスタＤ0，Ｄ1，Ｄ3の値ａ0，ａ1，ａ3をＸＯＲ回路７２5，７２6で足し込んでレジスタＤ3に格納する。
【００５３】
図示しないメモリセルエリアから読み出された情報ビットＩ0，Ｉ1，Ｉ2，Ｉ3，Ｉ4，Ｉ5，Ｉ6と、検査ビットＩ7，Ｉ8，Ｉ9，Ｉ10，Ｉ11，Ｉ12，Ｉ13，Ｉ14とは、Ｉ0，Ｉ2，Ｉ4，Ｉ6，Ｉ8，Ｉ10，Ｉ12，Ｉ14と、Ｉ1，Ｉ3，Ｉ5，Ｉ7，Ｉ9，Ｉ11，Ｉ13とに分割され、Ｓ3シンドローム計算回路７０に２ビットづつ（Ｉ0，Ｉ1），（Ｉ2，Ｉ3），（Ｉ4，Ｉ5），…の順で並列に入力され、入力後シフトレジスタ７１が１回動作する。データＩ0，Ｉ2，Ｉ4，…，Ｉ14は、ＸＯＲ回路７２3でＸＯＲ回路７２6の出力ａ1＋ａ3と足し込まれ、レジスタＤ1に格納され、データＩ1，Ｉ3，Ｉ5，…，Ｉ13は、ＸＯＲ回路７２2でＸＯＲ回路７２1の出力ａ1＋ａ2と足し込まれ、レジスタＤ0に格納される。但し、情報ビットの最後のＩ6は１ビットの入力であるため、図２３のＳ3シンドローム計算回路３０と同じ配線に切り替わる。又は、Ｉ15＝０を、Ｓ3シンドローム計算回路７０に入力させ、シフト動作させた後、シフトレジスタにＸ-3を掛ける。これにより、２ビット入力の並列処理が可能になる。
【００５４】
（１−２−３）誤り位置検出回路
次に誤り位置検出回路について説明する。本実施形態の誤り位置検出回路では、Ｓ1，Ｓ3シンドローム計算回路６０，７０が１回のシフト動作で従来の２回分のシフト動作を行うものであるから、誤り位置検出回路も、従来の２回分のシフト動作に相当する演算を行う。いま、数１０の誤り位置多項式を、
［数３８］
σ（Ｚ）＝Ｓ1＋σ1×Ｚ2＋σ2×Ｚ4
とする。
【００５５】
図５及び図６は、数３８に基づいて構成された誤り位置検出回路の構成を示す図である。この誤り位置検出回路８０は、Ｓ1、σ1及びσ2を計算すると共に格納する第１の演算部８０ａ（図５）と、数３８に基づいてデータの誤り位置を検出して検出信号を出力する第２の演算部８０ｂとから構成されている。第１の演算部８０ａは、図５に示すようにシフトレジスタ８１、Ｘ2演算回路８２及びＸ4演算回路８３により構成されている。シフトレジスタ８１ａには、初期状態としてシンドロームＳ1が格納され、シフトレジスタ８２ａ，８３ａには初期状態としてσ1＝Ｓ12、σ2＝Ｓ13＋Ｓ3の演算結果が格納される。この誤り位置検出回路８０では、出力データＩ0，Ｉ1，Ｉ2，Ｉ3，Ｉ4，Ｉ5，Ｉ6のうち１つおきの出力データＩ0，Ｉ2，Ｉ4，Ｉ6、に同期して、誤り検出が行なわれ、シフトレジスタ８１ａ，８２ａ，８３ａを１回動作させることにより、Ｘ2演算回路８２ではσ1の項がＺ2倍、Ｘ4演算回路８３では、σ2の項がＺ4倍ずつされる。エラーがあるとσ＝０となる。
【００５６】
ここで、Ｘ2演算回路８２は、図２５のＸ2演算回路４３と同一構成であり、シフトレジスタ４３ａとシフトレジスタ８２ａとが対応し、ＸＯＲ回路４３ｂ1，４３ｂ2とＸＯＲ回路８２ｂ1，８２ｂ2とが対応するので、詳細な構成説明は割愛する。
【００５７】
Ｘ4演算回路８３は、数１１に示すシフトレジスタ８３ａの値をＸ4倍するので、シフトレジスタ８３ａの値は、
［数３９］
ａ0Ｘ4＋ａ1Ｘ5＋ａ2Ｘ6＋ａ3Ｘ7
となるが、αの最小多項式Ｍ1（ｘ）よりＸ4＝Ｘ＋１の関係があるため、
［数４０］
（ａ0＋ａ3）Ｘ0＋（ａ0＋ａ1＋ａ3）Ｘ1＋（ａ1＋ａ2）Ｘ2＋（ａ2＋ａ3）Ｘ3
となる。これは、このＸ４演算回路８３は、数４０に基づき、１回のシフト動作で、レジスタＥ0，Ｅ3の値ａ0，ａ3をＸＯＲ回路８３ｂ1で足し込んでレジスタＥ0に格納し、レジスタＥ0，Ｅ1，Ｅ3の値ａ0，ａ1，ａ3をＸＯＲ回路８３ｂ1，８３ｂ2で足し込んでレジスタＥ1に格納し、レジスタＥ1，Ｅ2の値ａ1，ａ2をＸＯＲ回路８３ｂ3で足し込んでレジスタＥ2に格納し、レジスタＥ2，Ｅ3の値ａ2，ａ3をＸＯＲ回路８３ｂ4で足し込んでレジスタＥ3に格納する。
【００５８】
図６の第２の演算部８０ｂは、出力データＩ0，Ｉ2，Ｉ4，Ｉ6の誤り位置を検出する第１検出部８４と、データＩ1，Ｉ3，Ｉ5の誤り位置を検出する第２検出部８５と、データＩ1，Ｉ3，Ｉ5に関してσ1の項をＺ倍するＸ演算回路８６と、データＩ1，Ｉ3，Ｉ5に関してσ2の項をＺ2倍するＸ2演算回路８７とからなる。各検出部８４，８５のＸＯＲ回路８８とＮＯＲゲート８９とで演算された結果の出力が、誤り位置となったところで１となり、この出力で対応するデータＩｉを反転させることにより、１回のシフト動作で２ビット同時の並列的な誤り位置検出が可能になる。なお、Ｘ演算回路８６、Ｘ2演算回路８７の構成は図２５及び図２６に示した従来回路と同じであるが、データを記憶するためのレジスタは必要ない。
（２）第２の実施形態
図７は、チップ上にＥＣＣ回路を搭載した第２の実施形態に係るＮＡＮＤ型フラッシュメモリのブロック図である。
【００５９】
このメモリは、８つのメモリセルエリア１０１0，１０１1，…，１０１7を備えている。これらメモリセルエリア１０１0〜１０１7に対してメモリセルエリア１０１0〜１０１7への書き込みデータ（Ｄ０〜Ｄ７）及びメモリセルエリア１０１0〜１０１7からの読み出しデータ（Ｄ０〜Ｄ７）を一時格納する８つのページバッファ１０２0，１０２1，…，１０２７が設けられている。ページバッファ１０２0〜１０２7と、Ｉ／Ｏ端子１０４0，１０４1，…，１０４7との間には、書き込みデータに対する誤り訂正の検査ビットＥＣＣを生成すると共に、検査ビット（ＥＣＣ）を使用して読み出しデータの誤り訂正を行うＥＣＣ回路１０３が設けられている。このＥＣＣ回路１０３は、従来のものとは異なり、全メモリセルエリア１０１0〜１０１7に対して１回にリード・ライトされる５２８ビット×８Ｉ／Ｏ＝４２２４ビット分（Ｍ＝５２８，Ｎ＝８）のデータを情報ビットとし、これに共通の４０ビットの検査ビットを付加して誤り検出訂正を行う。
【００６０】
Ｉ／Ｏ端子１０５から入力されるアドレス及び制御信号は、それぞれ制御信号動作回路１０６及びアドレスデコーダ１０７に供給されている。制御信号動作回路１０６は、各種制御信号ＡＬＥ，ＣＬＥ，ＣＥ，ＷＥ，ＲＥ，ＷＰ等を入力して各部に供給する制御電圧を発生すると共に、外部回路にＲＥＡＤＹ／ＢＵＳＹ信号を出力する。アドレスデコーダ１０７は、外部からＩ／Ｏ端子１０５を介して入力されたアドレスを、一時的に記憶し、カラムデコーダ１０８及びブロック選択回路１０９を駆動する。カラムデコーダ１０８は、ページバッファ１０２0〜１０２1の各１つのカラムを活性化する。ブロック選択回路１０９は、メモリセルエリア１０１0〜１０１1中のワード線に読み出し、書き込み又は消去に必要な電圧を与える。
【００６１】
各メモリセルエリア１０１ｊ（但し、ｊ＝０〜７）は、図８に示すように、電気的書換え可能な不揮発性メモリセルＭＣをマトリクス状に配列して構成されている。この例では、１６個のメモリセルＭＣが１つの単位として直列に接続され、一方の端のメモリセルＭＣのドレインは、選択ゲートトランジスタＳＧ１を介してビット線ＢＬに接続され、他方の端のメモリセルＭＣのソースは、選択ゲートトランジスタＳＧ２を介して共通ソース線ＳＬに接続されている。ロウ方向のメモリセルＭＣの制御ゲートは、共通のワード線ＷＬに接続され、ロウ方向の選択ゲートトランジスタＳＧ１，ＳＧ２のゲート電極は、共通の選択ゲート線ＳＧＬ１，ＳＧＬ２に接続されている。この実施形態の場合、制御ゲート線に沿った１０５６個のメモリセルＭＣのうち、奇数番目と偶数番目にそれぞれ配置されたメモリセルＭＣに記憶される５２８ビットのデータが１回の書き込み及び読み出しの単位である１ページとなる。また、この例ではカラム方向に隣接する１６ページ分のデータが１回の消去の単位である１ブロックとなる。但し、メモリセルエリア１０１7には、ワード線ＷＬに沿った１０５６（５２８×２）個の情報ビット記憶用のメモリセルＭＣの他、誤り訂正用の検出ビットを８０（４０×２）ビット分記憶するためのメモリセルＭＣが設けられている。
【００６２】
各ページバッファ１０２ｊは、図８に示すように、５２８個のデータ記憶回路１２１を備え、各データ記憶回路１２１は、それぞれ２本のビット線ＢＬｉ，ＢＬｉ＋１に接続され、アドレスによって選択されたいずれか一方のビット線ＢＬを介してメモリセルエリア１０１ｊ中のメモリセルＭＣのデータを読み出したり、ビット線ＢＬを介してメモリセルエリアＭＣ中のメモリセルの状態を検出したり、ビット線ＢＬを介してメモリセルエリア１０１ｊ中のメモリセルＭＣに書き込み制御電圧を印加してメモリセルＭＣに書き込みを行う。５２８個のデータ記憶回路１２１のうち、いずれか１つのデータ記憶回路１２１がカラムデコーダ１０８によって選択され、選択されたデータ記憶回路１２１だけがＥＣＣ回路１０３と接続される。
【００６３】
従って、メモリ全体では、カラムデコーダ１０８により同一カラムアドレスを示す８ビット分（８ＩＯ分）のデータ記憶回路１２１とＥＣＣ回路１０３とが接続される。読み出し動作のときは、図８の点線で示す１ページ分のメモリセルＭＣが選択され、５２８×８ビットのデータが一時に全てのデータ記憶回路１２１に記憶される。カラムデコーダ１０８は、外部より入力されるリードイネーブル（ＲＥ）信号に同期してカラムアドレスを１つずつインクリメントする。これにより、メモリセルエリア１０１0〜１０１7の各１つ、計８つのデータ記憶回路１２１が次々と選択され、順次８ビット分（８ＩＯ分）のデータがＥＣＣ回路１０３に出力されることになる。書き込み動作のときも同様に、外部よりＩ／Ｏ端子１０４0〜１０４7を介して８ビット分（８ＩＯ分）のデータが順次ＥＣＣ回路１０３に入力され、ＥＣＣ回路１０３から順次８ビット分のデータが出力される。カラムデコーダ１０８は、外部より入力されるライトイネーブル（ＷＥ）信号に同期してカラムアドレスを、１づつインクリメントする。これにより、メモリセルエリア１０１0〜１０１7の各１つ、計８つのデータ記憶回路１２１が次々と選択され、ＥＣＣ回路１０３からの８ビット分のデータが、選択された記憶回路１２１に入力されていく。
【００６４】
次にＥＣＣ回路１０３について詳細に説明する。
【００６５】
図９は、ＥＣＣ回路１０３の詳細を示すブロック図である。ＥＣＣ回路１０３は、複数段のレジスタ、ＸＯＲ回路、スイッチ等から構成される演算用ロジック回路１３１と、シンドローム計算等に用いるガロア演算回路１３２と、復号時に動作する誤り位置検出回路１３３（主として第２の演算部）及びデータ反転回路１３４とを備えて構成されている。演算用ロジック回路１３１は、ＥＣＣ回路１０３が符号化回路として機能するときには、検査ビット生成回路を構成し、ＥＣＣ回路１０３が復号器として機能する場合には、シンドローム演算回路及び誤り位置検出回路の主として第１の演算部を構成する。
（２−１）符号化回路
このＥＣＣ回路１０３では、データを８ビット（Ｄ０〜Ｄ７）ずつ入力し、５２８×８＝４２２４ビットのデータを単位として誤り検出訂正をおこなう。例えば、３ビット訂正４ビット誤り検出のＢＣＨ符号について考えると、情報ビットｋ＝４２２４、符号長ｎ＝８１９１、訂正ビットｔ＝３、ｍ＝１３となり符号化及び復号に必要な生成多項式は以下のようになる。
【００６６】
［数４１］
原始多項式     ：  Ｆ（Ｘ） ＝Ｘ13＋Ｘ4＋Ｘ3＋Ｘ＋１
パリティ多項式 ：  Ｍ0（ｘ）＝Ｘ＋１
αの最小多項式 ：  Ｍ1（ｘ）＝Ｘ13＋Ｘ4＋Ｘ3＋  Ｘ＋１
α3の最小多項式：  Ｍ3（ｘ）＝Ｘ13＋Ｘ10＋Ｘ9＋Ｘ7＋Ｘ5＋Ｘ4＋１
α5の最小多項式：  Ｍ5（ｘ）＝Ｘ13＋Ｘ11＋Ｘ8＋Ｘ7＋Ｘ4＋Ｘ1＋１
生成多項式     ：  Ｇ（ｘ）＝Ｍ0Ｍ1Ｍ3Ｍ5
＝Ｘ40＋Ｘ39＋Ｘ38＋Ｘ35＋Ｘ34＋Ｘ33
＋Ｘ32＋Ｘ28＋Ｘ27＋Ｘ26＋Ｘ25＋Ｘ23＋Ｘ22
＋Ｘ20＋Ｘ18＋Ｘ17＋Ｘ16＋Ｘ15＋Ｘ14＋Ｘ10
＋Ｘ9＋Ｘ5＋Ｘ4＋Ｘ2＋Ｘ1＋１
先の第１の実施形態と同様に、数４２を変形し、数４３を求める。
【００６７】
［数４２］
(((((０＋Ｉ0Ｘ39)Ｘ＋Ｉ1Ｘ39)Ｘ＋Ｉ2Ｘ39)Ｘ＋Ｉ3Ｘ39)………
)Ｘ＋Ｉ527Ｘ39)Ｘ
［数４３］
(((((０＋Ｉ0Ｘ39＋Ｉ1Ｘ38＋Ｉ2Ｘ37……Ｉ7Ｘ32)Ｘ8＋(Ｉ8Ｘ39……
Ｉ15Ｘ32))Ｘ8………(Ｉ520Ｘ39＋Ｉ521Ｘ38……Ｉ527Ｘ32)Ｘ8
数４３の意味するところは次の通りである。まず、一回のＷＥ信号のクロックに対し入力される８ビットのデータＤ０〜Ｄ７＝Ｉ0，Ｉ1，Ｉ2，…，Ｉ7のそれぞれにＸ39，Ｘ38，Ｘ37，…，Ｘ32を掛け、内部のレジスタ値に足しこみ、その後、レジスタの値をＸ8する。続いて、次のＷＥ信号のクロックに対し入力される８ビットのデータＤ０〜Ｄ７＝Ｉ8，Ｉ9，Ｉ10，…，Ｉ15のそれぞれにＸ39，Ｘ38，Ｘ37，…，Ｘ32を掛け、内部のレジスタ値に足しこみ、その後、レジスタの値をＸ8する。これを、最後の８ビットのデータＤ０〜Ｄ７＝Ｉ4216，Ｉ4217，Ｉ4218，…，Ｉ4223まで５２８回繰り返す。
【００６８】
図１０は、演算用ロジック回路１３１に備えられた４０段のレジスタＲＥＧ０，ＲＥＧ１，…，ＲＥＧ３９を示す。これらは符号化回路の巡回シフトレジスタを構成する。これらレジスタＲＥＧ０〜ＲＥＧ３９の入力をＢ０，Ｂ１，…，Ｂ３９、出力をＡ０，Ａ１，…，Ａ３９とする。演算用ロジック回路１３１は、上記数４１の生成多項式と数４３とに基づき、１回のデータ入力で下記数４５及び数４６に示すＸＯＲ演算を実行する。ここで使用されるＸＯＲ演算は数４４に示される。レジスタＲＥＧ３２〜ＲＥＧ３９は、出力Ａ３２〜Ａ３９を出力する前に、数４５で示すように、外部より入力される８ビットのデータＤ０〜Ｄ７がレジスタ値にＸＯＲ演算により足しこまれた結果である出力ＡＡ３２〜ＡＡ３９を出力する。出力Ａ０〜３１、ＡＡ３２〜ＡＡ３９はＸＯＲ回路に繋がり、数４６で示すＸＯＲ演算の結果Ｂ０〜３９は、レジスタＲＥＧ０〜ＲＥＧ３９の入力に繋がり、シフトレジスタのクロックに同期し、取りこまれる。この演算を５２８回繰り返すと、演算ロジック回路１３１レジスタＲＥＧ０〜ＲＥＧ３９には、４０ビットの検査ビットＩ4224，Ｉ4225，Ｉ4226，…，Ｉ4264が生成される。
【００６９】
【数４４】
2006209969.tif 000003
【００７０】
【数４５】
2006209969.tif 000004
【００７１】
【数４６】
2006209969.tif 000005
【００７２】
図１１は、このＥＣＣ回路１０３の符号化処理を示すフローチャート、図１２は、同じく符号化処理のタイミングチャートである。
【００７３】
まず外部からデータ入力コマンド（８０ｈ）を入力すると（Ｓ２１）、演算用ロジック回路１３１の内部のレジスタＲＥＧ０〜４０がリセットされ（Ｓ２２）、次にアドレス（Ａｄｄ）が与えられる。続いてＷＥ（ライトイネーブル）信号が外部から入力され、これに同期してデータが８ビットずつページバッファ１０２ｊにロードされる（Ｓ２３，Ｓ２４，Ｓ２５）。これと同時にデータが演算用ロジック回路１３１に送りこまれ、検査ビットＥＣＣが計算される。カラムアドレスが最終の５２８に達したら（Ｓ２５）、データロードを終了する。続いて外部よりプログラムコマンド（１０ｈ）が入力され、これによりメモリセルＭＣへのデータ書き込みのための図示しないチャージポンプによる昇圧動作が開始される。これと同時に、書込み動作を行なう前に、図示しない内部オシレータ等により４０ビットのＲＥＧ０〜ＲＥＧ３９から順次５バイトずつ検査ビットが出力され、ページバッファ１０２7のデータ記憶回路１２１に格納される。この後、データ記憶回路１２１に格納されたデータが、外部アドレスＡｄｄにより選択された１ページ（図８の点線で示す）のメモリセルＭＣに記憶される。
（２−２）複号回路
（２−２−１）シンドローム計算回路
３ビット誤り訂正、４ビット誤り検出のためには４つのシンドロームＳ0，Ｓ1，Ｓ3，Ｓ5が必要であることが知られている。シンドロームＳ0は最小多項式Ｍ0（ｘ）＝ｘ＋１により求められる。最小多項式Ｍ1（ｘ）＝ｘ10＋ｘ3＋１により求められるｘ10＝ｘ3＋１をα演算子とすると、シンドロームＳ1はα演算子より、シンドロームＳ3はα3演算子より、シンドロームＳ5はα5演算子より求められる。従来の復号回路では、一回のＷＥ信号のクロックに対し１ビットしか入力できなかったが、第１の実施形態の数２７から数２８に、また数３４から数３５に変形されたときと同様に変形し、一回のＷＥ信号のクロックに対し８ビットのデータを取り込めるようにする。したがって、シンドロームＳ1はα8演算子より、シンドロームＳ3はα24演算子より、シンドロームＳ5はα40演算子より求められる。
【００７４】
図１３は、演算用ロジック回路１３１に備えられた４０段のレジスタＲＥＧ０〜ＲＥＧ３９を示す。レジスタＲＥＧ０はＳ0シンドローム計算回路の巡回シフトレジスタを構成し、レジスタＲＥＧ１〜１３はＳ1シンドローム計算回路の巡回シフトレジスタを構成し、レジスタＲＥＧ１４〜２６はＳ3シンドローム計算回路の巡回シフトレジスタを構成し、レジスタＲＥＧ２７〜３９はＳ5シンドローム計算回路の巡回シフトレジスタを構成する。ここで、レジスタＲＥＧ０の入力をＰＰ０、出力をＰ０、レジスタＲＥＧ１〜１３の入力をＡＡ０，ＡＡ１，…，ＡＡ１２、出力をＡ０，Ａ１，…，Ａ１２、レジスタＲＥＧ１４〜２６の入力をＢＢ０，ＢＢ１，…，ＢＢ１２、出力をＢ０，Ｂ１，…，Ｂ１２、レジスタＲＥＧ２７〜３９の入力をＣＣ０，ＣＣ１，…，ＣＣ１２、出力をＣ０，Ｃ１，…，Ｃ１２とする。演算ロジック回路１３１は、１回のデータ入力で下記数４７，数４８，数４９及び数５０の演算を実行する。データ記憶回路１２１から読み出された、８ビットのデータＤ０〜Ｄ７と、それぞれのレジスタＲＥＧ０〜ＲＥＧ３９の出力Ｐ０、Ａ０〜１３、Ｂ０〜１３、Ｃ０〜１３とはＸＯＲ回路により足しこまれ、ＸＯＲ回路の出力ＰＰ０、ＡＡ０〜１３、ＢＢ０〜１３、ＣＣ０〜１３となり、レジスタＲＥＧ０〜ＲＥＧ３９の入力に繋がり、シフトレジスタのクロックに同期し、取りこまれる。レジスタＲＥＧ１〜１３に繋がるＸＯＲ回路はα8演算回路で、データＤ０〜Ｄ７の入力が加わっている。レジスタＲＥＧ１４〜ＲＥＧ２６に繋がるＸＯＲ回路はα24演算回路で、データＤ０〜Ｄ７の入力が加わっている。レジスタＲＥＧ２７〜３９に繋がるＸＯＲ回路はα40演算回路で、データＤ０〜Ｄ７の入力が加わっている。しかし、α40演算回路は回路規模が大きいため、図９に示したガロア演算回路１３２の片方の入力にα40を入力し、その出力とデータＤ０〜Ｄ７とをＸＯＲ回路で適宜演算して求めることも出来る。
【００７５】
【数４７】
2006209969.tif 000006
【００７６】
【数４８】
2006209969.tif 000007
【００７７】
【数４９】
2006209969.tif 000008
【００７８】
【数５０】
2006209969.tif 000009
【００７９】
（２−２−２）誤り位置検出回路（第１の演算部）
図１４は、このＥＣＣ回路１０３の復号処理を示すフローチャートである。
【００８０】
外部よりデータリードコマンド（００ｈ）を入力した後、読み出すアドレス（Ａｄｄ）を入力することにより、リード動作が開始される（Ｓ３１）。まず、アドレスにより選択された、１ページ（５２８バイト）分のメモリセルＭＣのデータをページバッファ１０２0〜１０２7に読み出す（Ｓ３２）。この後、内部オシレータにより発振される信号に同期し、データＤ０〜Ｄ７が１バイトずつＥＣＣ回路１０３に入力され、シンドロームを計算する（Ｓ３３）。図２７に示すように、シンドロームＳ0，Ｓ1，Ｓ3，Ｓ5を計算した後、Ｓ1＝Ｓ3＝Ｓ5＝０  の場合（Ｓ３４）で、Ｓ0＝０だと（Ｓ３５）エラー無し（正常出力：Ｓ３６）となる。Ｓ0≠０（Ｓ３５）では、訂正不能となる（Ｓ３７）。Ｓ1＝Ｓ3＝Ｓ5＝０でない場合（Ｓ３４）、σ2＝Ｓ12Ｓ3＋Ｓ5  とσ0＝Ｓ13＋Ｓ3を計算する（Ｓ３８）。σ0＝０の場合（Ｓ３９）で、σ2＝０かつＳ0＝０の場合（Ｓ４０）、１ビットエラーがあるので１ビット訂正のアルゴリズムに移行する（Ｓ４１）。σ2＝０かつＳ0＝０でない場合（Ｓ４０）、訂正不能となる（Ｓ４２）。σ0≠０の場合（Ｓ３９）、σ1＝Ｓ1（Ｓ13＋Ｓ3）  とσ3＝（Ｓ13＋Ｓ3）2＋Ｓ1（Ｓ12  Ｓ3＋Ｓ5）を計算する（Ｓ４３）。σ3＝０の場合（Ｓ４４）で、σ2≠０かつＳ0＝０の場合（Ｓ４５）、２ビットエラーがあるので２ビット訂正するアルゴリズムに移行する（Ｓ４６）。σ2≠０かつＳ0＝０でない場合、訂正不能となる（Ｓ４７）。σ3≠０の場合（Ｓ４４）で、Ｓ0＝１だと（Ｓ４８）３ビットエラーがあるので３ビット訂正するアルゴリズムに移行する（Ｓ４９）。但し、２ビット訂正と３ビット訂正のアルゴリズムは同じである。Ｓ0≠１だと（Ｓ４８）訂正不能となる（Ｓ５０）。
【００８１】
図１５に、これらの計算を行う誤り位置回路を示す。この誤り位置検出回路は、演算用ロジック回路１３１に内蔵された各１３ビットの４つのレジスタＲ，Ａ，Ｂ，Ｃ及び図示しないＸＯＲ回路により構成される第１の演算部と、ガロア演算回路１３２と、８つのローケータ１４１及びこれらローケータ１４１の間に挿入された×α，×α2，×α3の演算を行う演算回路１４２からなる第２の演算部１３３と、これらの間を接続する１３ビットのバスＢＵＳＲ，ＢＵＳＡ，ＢＵＳＢ，ＢＵＳＣとを備えて構成されている。ガロア演算回路１３２の出力はレジスタＲに接続されている。
【００８２】
図１６は、誤り位置多項式の項であるσ0，σ1，σ3，σ2を算出するアルゴリズムを示している。レジスタＡ，Ｂ，ＣにシンドロームＳ1，Ｓ3，Ｓ5がそれぞれ格納されており、これらが全て０であればエラー無しなので、この演算は実行しない（Ｓ６１）。そうでない場合、σ2＝Ｓ12Ｓ3＋Ｓ5の演算を行い、レジスタＲに順次演算結果が格納されていき、最後に得られた演算結果がレジスタＲからレジスタＣに転送される（Ｓ６２）。次に、σ0＝Ｓ13＋Ｓ3の演算を行い、レジスタＲに順次演算結果が格納されていき、最後に得られた演算結果がレジスタＲからレジスタＢに転送される（Ｓ６３）。レジスタＢ，Ｃに求められた演算結果が共に０であれば、１ビットエラーとして（Ｓ６４）、１をレジスタＲに格納し（Ｓ６５）、そうでない場合には、σ1＝Ｓ1（Ｓ13＋Ｓ3）とσ3＝（Ｓ13＋Ｓ3）2＋Ｓ1（Ｓ12  Ｓ3＋Ｓ5）の演算を行う（Ｓ６６，Ｓ６７，Ｓ６８）。
【００８３】
一方、本実施形態では、符号長ｎ＝８１９１のうち情報ビットｋ＝４２２４（５２８×８ビット）を誤り訂正するようにしているが、符号長ｎ＝８１９１の符号では、本来、情報ビットとして検査ビット４０ビットを除いた８１５１ビットを持つことができる。このため、誤り位置は、８１５１−４２２４＋１＝３９２８ビット分だけずれていることになり、カラムアドレス０番地から読み出す場合、σ1にα3928、σ2にα7856(=3928×2)、σ3にα3593(=3928×3-8191)を掛ける計算を行なう（Ｓ６９，Ｓ７０，Ｓ７１）。同様に、カラムアドレスｉ番地から読み出す場合、σ1にα3928+i、σ2にα7858(=(3928+i)×2)、σ3にα3596(=(3928+i)×3-8191)を掛ける計算を行なう。α3928+i等の係数は例えばＲＯＭに書きこんでおく。これらの係数はカラムアドレスｉによるため、図７のカラムデコーダ１０８により選択されるカラムデータ記憶付近に、もしくはメモリセルエリア１０１内に格納する。又は、カラムアドレス０番地の係数のみ記憶し、他のアドレスがアクセスした場合は、誤り位置検出の動作をダミーで動かし係数を合わせるようにしても良い。
【００８４】
図１７は、ガロア演算回路１３２の詳細を示すブロック図である。
【００８５】
いま、同図（ａ）に示す１３ビットの入力Ａ，Ｂをそれぞれ、次のように示す。
【００８６】
［数５１］
Ａ＝ａ0Ｘ0＋ａ1Ｘ1＋ａ2Ｘ2＋  …  ＋ａ12Ｘ12
Ｂ＝ｂ0Ｘ0＋ｂ1Ｘ1＋ｂ2Ｘ2＋  …  ＋ｂ12Ｘ12
この場合、Ａ×Ｂは、数５２のようになる。
【００８７】
［数５２］
Ａ×Ｂ＝Ａ（ｂ0Ｘ0＋ｂ1Ｘ1＋ｂ2Ｘ2＋  …  ＋ｂ12Ｘ12）
＝Ａｂ0＋Ｘ（Ａｂ1＋Ｘ（Ａｂ2＋Ｘ（Ａｂ3＋  …
… ＋Ｘ（Ａｂ12））））））））））））
これを回路を表すと、図１７（ｂ）の構成となる。ＡとｂｉとがＡＮＤ回路１５１でＡＮＤ演算され、その演算結果をＸ乗算回路１５２でＸ倍して、ＸＯＲ回路１５３で次のＡとｂｉ＋１とのＡＮＤ演算結果とＸＯＲ演算する。ここで、Ｘ乗算回路１５２は、同図（ｃ）に示すように、数４１のαの最小多項式Ｍ1（Ｘ）より、Ｘ13＝Ｘ4＋Ｘ3＋Ｘ＋１の関係があるので、Ｘ12の項がＸ0の項にシフトすると共に、ＸＯＲ回路１５４により、Ｘ3，Ｘ1，Ｘ0の項に足し込まれ、それぞれＸ4，Ｘ3，Ｘ1の項に格納されるという演算を行う。
【００８８】
以上の演算の結果、１３ビットのレジスタＡ，Ｂ，Ｃ，Ｒにはそれぞれ、σ1、σ3、σ2、σ0が初期値として与えられる。
【００８９】
（２−２−３）誤り位置検出回路（第２の演算部）
誤りビットの位置の検出は、３ビット訂正と４ビット訂正の場合、下記数５３の誤り位置多項式に従うことが知られている。
【００９０】
［数５３］
σ（Ｚ）＝Ｓ1＋σ1×Ｚ＋σ2×Ｚ2＋σ3×Ｚ3
この数５３にＺ＝αI（Ｉ＝０，１，２，３・・・…）を順次代入してσ（αＩ）＝  ０となったｉが誤りの位置となる。本実施形態では、一回のＷＥのクロックに対し８ビットのデータを出力するため、第１の実施形態で数１０を数３８に変形したように、数５３を、次の数５４のように変形する。
【００９１】
［数５４］
σ（Ｚ）＝σ0＋σ1×Ｚ8＋σ2×Ｚ16＋σ3×Ｚ24
これにより、８ビットおきに８ビットずつ同時に誤り検出を行う。つまり８Ｉ／Ｏ分の出力データのうちＩ／Ｏ０に対して、誤り検出を行い、誤りがあるとσ＝０となる。図１６の演算の結果、１３ビットのシフトレジスタＡ，Ｂ，Ｃ，Ｒにはそれぞれ、σ1、σ3、σ2、σ0が初期値として与えられている、演算用ロジック回路１３１のシフトレジスタＡに繋がるＸＯＲ回路はα8演算回路、シフトレジスタＢに繋がるＸＯＲはα24演算回路、シフトレジスタＣに繋がるＸＯＲはα16演算回路を構成する。レジスタＡの入力をＡＡ０，ＡＡ１，…，ＡＡ１２、出力をＡ０，Ａ１，…，Ａ１２、レジスタＢの入力をＢＢ０，ＢＢ１，…，ＢＢ１２、出力をＢ０，Ｂ１，…，Ｂ１２、レジスタＣの入力をＣＣ０，ＣＣ１，…，ＣＣ１２、出力をＣ０，Ｃ１，…，Ｃ１２とすると、これらのα8，α16，α24演算回路では、それぞれ数５５，数５６及び数５７の演算を行う。
【００９２】
【数５５】
2006209969.tif 000010
【００９３】
【数５６】
2006209969.tif 000011
【００９４】
【数５７】
2006209969.tif 000012
【００９５】
図１８は、ローケータ１４１の具体的な構成を示す回路図である。ローケータ１４１は、ＸＯＲ回路数１６１とＮＯＲ回路１６２とからなり、σ（Ｚ）を計算し、Ｉ／Ｏ０（ｊ＝０〜７）にエラーがある（σ＝０）とＨを出力する。これにより、図９のデータ反転回路１３４で、このときのページバッファ１０２0のデータ記憶回路１２１のデータが反転されて出力される。
【００９６】
一方、Ｉ／Ｏ１のデータに関しては、σ（Ｚ）のσ1の項がＺ倍、σ2の項がＺ2倍、σ3の項がＺ3倍された値なので、図１５に示すように、σ1の項×Ｘを、σ2の項に×Ｘ2、σ3の項に×Ｘ3を演算する演算回路１４２1を搭載させ、その出力を、誤り位置多項式を解くためにローケータ１４１1に供給する。誤りが検出される（σ＝  ０）と、出力がＨとなる。これらのＸ演算回路、Ｘ2演算回路、Ｘ3演算回路の入力をＸ０〜Ｘ１２、出力Ｙ０〜Ｙ１２とすると、これら演算回路は、次のような演算を実行する。これら演算回路には、データを記憶するためのレジスタは必要はない。
【００９７】
【数５８】
2006209969.tif 000013
【００９８】
【数５９】
2006209969.tif 000014
【００９９】
【数６０】
2006209969.tif 000015
【０１００】
次に、Ｉ／Ｏ２のデータに関しては、σ（Ｚ）のσ1の項がＺ2倍、σ2の項がＺ4倍、σ3の項がＺ6倍された値であるが、Ｉ／Ｏ０を基準としてσ1の項×Ｘ2を、σ2の項に×Ｘ4、σ3の項に×Ｘ6を演算する演算回路を搭載させると、Ｘ6など大きな倍数の演算回路の回路規模が大きくなってしまう。このため、この実施形態では、演算回路１４２1の出力を再度、×Ｘ、×Ｘ2、×Ｘ3させる演算回路１４１1を設ける。以下、同様にしてＩ／Ｏ７のデータまで演算回路１４２7を配置する。
【０１０１】
もし、Ｉ／Ｏ７までの信号伝搬遅延時間が問題となる場合には、図１９に示すように、誤り位置検出回路（第２の演算部）１３３を構成する８つのローケータ１４１を演算用ロジック回路１３１の両側に４つずつ分割して配置することにより、ローケータ１４１までの信号伝搬路を１／２にすれば良い。
【０１０２】
図２０は、このＥＣＣ回路１０３の復号時のタイミングチャートである。同図（ａ）は、誤り位置多項式の項を全て計算してからデータの読み出しと誤り訂正とを行う場合を示している。
【０１０３】
外部よりデータリードコマンド（００ｈ）を入力した後、読み出すアドレス（Ａｄｄ）を入力することにより、ＲＥＡＤＹ／ＢＵＳＹ信号がアクティブになり、リード動作が開始される。まず、アドレスにより選択された、１ページ（５２８バイト）分のメモリセルＭＣのデータがページバッファ１０２0〜１０２7に読み出される。続いて、内部オシレータにより発振される信号に同期し、データＤ０〜Ｄ７が１バイトずつＥＣＣ回路１０３に入力され、シンドロームが計算され、算出されたシンドロームＳ0，Ｓ1，Ｓ3，Ｓ5を用いて誤り位置多項式の項を演算する。その後、ライトイネーブル（ＲＥ）信号に同期してデータが読み出されると同時に、誤り訂正処理が実行される。この場合、ＥＣＣ回路１０３がない場合に比べ、トータルのビジー時間の追加分は、シンドローム計算と誤り訂正用の演算子の計算時間分となり、１回のシンドローム計算に５０ｎｓ、演算子の演算時間に３．６μｓとすると、５２８×５０ｎｓ＋３．６μｓ＝３０μｓとなる。
【０１０４】
同図（ｂ）は、データの読み出しと同時にシンドロームＳ0，Ｓ1，Ｓ3，Ｓ5を計算するようにした例で、上記と同様にリード動作が開始され、１ページ（５２８バイト）分のメモリセルＭＣのデータがページバッファ１０２0〜１０２7に読み出されると、ＲＥ信号に同期してページバッファ１０２0〜１０２7からデータＤ０〜Ｄ７が１バイトずつ出力されると共にＥＣＣ回路１０３でシンドローム計算が実行される。もし、シンドローム計算の結果、エラーが検出された場合には、ステータス・フェイルコマンド（７０ｈ）がアクティブになるので、誤り訂正用の演算子が計算され、その後、再度データを出力して誤り訂正を行う。この場合、エラーが無い場合、トータルのビジー時間の追加は０となる。
【０１０５】
ところで、情報ビットを５２８ビットとしたときと、情報ビットを４２２４ビットとしたときとでは、２ビット誤り訂正３ビット誤り検出をした場合、許容されるランダム不良数（デバイス不良確率が１ｐｐｍとなるときのランダム不良数）は、当然情報ビットを５２８ビットとしたときの方がよい。これを２５６Ｍビットの記憶容量のＮＡＮＤ型フラッシュメモリに適用した場合が表１となる。表１は、左側より、デバイス不良確率が1ppmとなる時の256Mヒ゛ット中のランダム不良数、１ページ当たり必要コード長、及び不良数を示している。
【０１０６】
表１より、情報ビット数が５２８ビットの２ビット訂正ＢＣＨ符号では、許されるランダム不良数は１００ビットであり、情報ビット数を４２２４ビットとすると３０ビットしか許されなくなるが、３ビット訂正ＢＣＨ符号で情報ビット数４２２４ビットでは、３００ビットまでランダム不良を許し、また必要コードも４０ビットと短い。更に、４ビット訂正ＢＣＨ符号で情報ビット数４２２４ビットでは、１０００ビットまでランダム不良が許容され、必要コードも５３ビットと短いという効果がある。
【０１０７】
［表１］
2ヒ゛ット訂正BCH符号(情報ヒ゛ット数528ヒ゛ット)  21×8=168ヒ゛ット    100ヒ゛ット
2ヒ゛ット訂正BCH符号(情報ヒ゛ット数4224ヒ゛ット)        27ヒ゛ット    30ヒ゛ット
3ヒ゛ツト訂正BCH符号(情報ヒ゛ット数4224ヒ゛ット)        40ヒ゛ット    300ヒ゛ット
4ヒ゛ット訂正BCH符号(情報ヒ゛ット数4224ヒ゛ット)        53ヒ゛ット    1000ヒ゛ット
ここで、１２８Ｍビットと５１２ＭビットのＮＡＮＤ型フラッシュメモリにＥＣＣ回路を搭載しない場合、２ビット訂正の従来構成のＥＣＣを搭載した場合、２ビット訂正の本実施形態のＥＣＣ回路を搭載した場合について、チップサイズで比較してみると、下記表２のようになる。
【０１０８】
［表２］            128M(0.16μm)            512M(0.16μm)
ＥＣＣ回路無し        41.88mm2(100.0%)      136.99mm2(100.0%)
従来ＥＣＣ回路        44.72mm2(106.8%)      143.96mm2(105.1%)
本実施形態ＥＣＣ回路  43.21mm2(103.2%)      140.42mm2(102.5%)
このように、本実施形態に係るＥＣＣ回路を搭載したフラッシュメモリでは、従来型のＥＣＣ回路搭載メモリがそれぞれ６．８％（１２８Ｍ），５．１％（５１２Ｍ）のチップサイズの増加があったのに対し、本実施形態のＥＣＣ回路搭載メモリは、チップサイズの増加がその半分の３．２％（１２８Ｍ），２．５％（５１２Ｍ）であった。
【図面の簡単な説明】
【０１０９】
【図１】本発明の第１の実施形態に係るフラッシュメモリに搭載されるＥＣＣ回路に使用される符号化器の構成を示すブロック図である。
【図２】同符号化器に使用されるシフトレジスタの構成を示すブロック図である。
【図３】同符号化器に使用されるＸＯＲ回路の真理値表である。
【図４】同ＥＣＣ回路に使用される復号器におけるシンドローム計算回路を示すブロック図である。
【図５】同復号器に使用される誤り位置検出回路を構成する第１の演算部を示すブロック図である。
【図６】同位置検出回路を構成する第２の演算部を示すブロック図である。
【図７】本発明の第２の実施形態に係るＮＡＮＤ型フラッシュメモリのブロック図である。
【図８】同フラッシュメモリのメモリセルエリアの構成を示す回路図である。
【図９】同フラッシュメモリのＥＣＣ回路を示すブロック図である。
【図１０】同ＥＣＣ回路における符号化時の演算用ロジック回路を構成するレジスタを示す図である。
【図１１】同符号化回路の符号化処理を示すフローチャートである。
【図１２】同符号化処理のタイミングチャートである。
【図１３】同ＥＣＣ回路における復号時の演算ロジック回路を構成するレジスタを示す図である。
【図１４】同復号処理を示すフローチャートである。
【図１５】同ＥＣＣ回路における誤り位置検出回路のブロック図である。
【図１６】同誤り位置検出回路における誤り位置多項式の各項の算出アルゴリズムを示すフローチャートである。
【図１７】同ＥＣＣ回路におけるガロア演算回路のブロック図である。
【図１８】同誤り位置検出回路の第２の演算部を示す図である。
【図１９】同ＥＣＣ回路における誤り位置検出回路の他の例を示すブロック図である。
【図２０】同ＥＣＣ回路における復号処理のタイミングチャートである。
【図２１】従来のＥＣＣ回路を搭載したＮＡＮＤ型フラッシュメモリの構成を示すブロック図である。
【図２２】従来のＥＣＣ回路における符号化器の構成を示すブロック図である。
【図２３】従来のＥＣＣ回路の復号器におけるシンドローム計算回路を示すブロック図である。
【図２４】従来のＥＣＣ回路の復号アルゴリズムを示すフローチャートである。
【図２５】従来のＥＣＣ回路の誤り位置検出回路の第１の演算部を示すブロック図である。
【図２６】従来のＥＣＣ回路の誤り位置検出回路の第２の演算部を示すブロック図である。
【符号の説明】
【０１１０】
１0〜１7，１０１0〜１０１7・・・メモリセルエリア
２0〜２7，１０２0〜１０２7ページバッファ
３0〜３7，１０３…ＥＣＣ回路
４0〜４7，１０４0〜１０４7，１０５…Ｉ／Ｏ端子
１０，５０…符号化器
２０，６０…Ｓ1シンドローム計算回路
３０，７０…Ｓ3シンドローム計算回路
４０，８０，１３３…誤り位置検出回路
４０ａ，８０ａ…第１の演算部
４０ｂ，８０ｂ…第２の演算部
１３１…演算用ロジック回路、
１３２…ガロア演算回路
１３４…データ反転回路
【図１】
2006209969.tif 000016
【図２】
2006209969.tif 000017
【図３】
2006209969.tif 000018
【図４】
2006209969.tif 000019
【図５】
2006209969.tif 000020
【図６】
2006209969.tif 000021
【図７】
2006209969.tif 000022
【図８】
2006209969.tif 000023
【図９】
2006209969.tif 000024
【図１０】
2006209969.tif 000025
【図１１】
2006209969.tif 000026
【図１２】
2006209969.tif 000027
【図１３】
2006209969.tif 000028
【図１４】
2006209969.tif 000029
【図１５】
2006209969.tif 000030
【図１６】
2006209969.tif 000031
【図１７】
2006209969.tif 000032
【図１８】
2006209969.tif 000033
【図１９】
2006209969.tif 000034
【図２０】
2006209969.tif 000035
【図２１】
2006209969.tif 000036
【図２２】
2006209969.tif 000037
【図２３】
2006209969.tif 000038
【図２４】
2006209969.tif 000039
【図２５】
2006209969.tif 000040
【図２６】
2006209969.tif 000041