(57)【特許請求の範囲】
【請求項１】
少なくとも"1"と"0"の2値のディジタルデータを電荷蓄積層の電荷として記憶し前記電荷蓄積層の2つの電荷量の差を書き込みビットおよび消去ビットとして用いるメモリセルを備え、複数の前記メモリセルが隣接して構成されるページを一括消去する不揮発性メモリセルアレイと、
情報ビットから少なくとも1ビットの誤りデータを訂正する符号を発生し、前記ページに記録する誤り訂正符号を生成する誤り訂正符号発生回路と、
前記ページに記録されたディジタルデータより、前記誤り訂正符号から誤りを訂正し前記情報ビットを復元する誤り訂正符号復号回路と、
入力された前記情報ビットと”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号発生回路に出力する符号変換回路とを具備すること
を特徴とするデータ記憶システム。
【請求項２】
少なくとも"1"と"0"の2値のディジタルデータを電荷蓄積層の電荷として記憶し前記電荷蓄積層の2つの電荷量の差を書き込みビットおよび消去ビットとして用いるメモリセルを備え、複数の前記メモリセルが隣接して構成されるページを一括消去する不揮発性メモリセルアレイと、
情報ビットから少なくとも1ビットの誤りデータを訂正する符号を発生し、前記ページに記録する誤り訂正符号を生成する誤り訂正符号発生回路と、
前記ページに記録されたディジタルデータより、前記誤り訂正符号から誤りを訂正し前記情報ビットを復元する誤り訂正符号復号回路と、
入力した前記情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びの数を検出する第１カウンタ回路と、
入力した前記情報ビットと”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、書き込みビット/消去ビット/書き込みビットの連続ビット並びの数を検出する第２カウンタ回路と、
前記第１カウンタ回路の出力の並びの数よりも前記第２カウンタ回路の出力の並びの数が少ない場合、選択的に、入力した前記情報ビットと”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号発生回路に出力する符号変換回路とを具備すること
を特徴とするデータ記憶システム。
【請求項３】
少なくとも"1"と"0"の2値のディジタルデータを電荷蓄積層の電荷として記憶し前記電荷蓄積層の2つの電荷量の差を書き込みビットおよび消去ビットとして用いるメモリセルを備え、複数の前記メモリセルが隣接して形成されるページを一括消去する不揮発性メモリセルアレイと、
情報ビットから少なくとも1ビットの誤りデータを訂正する訂正符号を発生する誤り訂正符号発生回路と、
前記訂正符号から誤りを訂正し前記情報ビットを復元する誤り訂正符号復号回路と、
入力された前記情報ビットと”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号発生回路に出力する符号変換回路と、
前記誤り訂正符号復号回路の出力と、”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号を復号する符号逆変換回路とを具備すること
を特徴とするデータ記憶システム。
【請求項４】
少なくとも"1"と"0"の2値のディジタルデータを電荷蓄積層の電荷として記憶し前記電荷蓄積層の2つの電荷量の差を書き込みビットおよび消去ビットとして用いるメモリセルを備え、複数の前記メモリセルが隣接して形成されるページを一括消去する不揮発性メモリセルアレイと、
情報ビットから少なくとも1ビットの誤りデータを訂正する訂正符号を発生する誤り訂正符号発生回路と、
前記訂正符号から誤りを訂正し前記情報ビットを復元する誤り訂正符号復号回路と、
入力された前記情報ビットと”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号発生回路に出力する符号変換回路と、
前記ページに記録されたディジタルデータを入力し、”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号を復号する符号逆変換回路とを具備し、
前記符号変換回路は、
入力した前記情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びの数を検出する第１カウンタ回路と、
入力した前記情報ビットと”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、書き込みビット/消去ビット/書き込みビットの連続ビット並びの数を検出する第２カウンタ回路とを含み、
前記第１カウンタ回路の出力の並びの数よりも前記第２カウンタ回路の出力の並びの数が少ない場合、選択的に、入力した前記情報ビットと”書き込みビット−消去ビット” の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号発生回路に出力すること
を特徴とするデータ記憶システム。
【請求項５】
前記誤り訂正符号復号回路の出力と、”書き込みビット−消去ビット”の並びを複数個繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号を復号する符号逆変換回路を更に具備すること
を特徴とする請求項１または２に記載のデータ記憶システム。
【請求項６】
入力した1連の情報ビットを、偶数番目のビットと奇数番目のビットとに分離し、それぞれを集めることによる並べ替えを行った後で、書き込みビット/消去ビット/書き込みビットの連続ビット並びの数を検出し前記符号変換回路に出力する第１カウンタ回路を更に具備すること
を特徴とする請求項１または３に記載のデータ記憶システム。
【請求項７】
前記書き込みビット/消去ビット/書き込みビットの情報ビットの並びは、隣接する3つの前記メモリセルに物理的に対応すること
を特徴とする請求項２，４乃至６のいずれか１項に記載のデータ記憶システム。
【請求項８】
書き込みを行う第1のページに、物理的に隣接した第2のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出し、前記第２のページの情報ビットの前記並びの消去ビットの位置に隣接した前記第1のページのビットの状態の書き込みビットの数と消去ビットの数をそれぞれ検出し前記符号変換回路に出力する第３カウンタ回路と、
前記第３カウンタ回路の出力の並びの数により、選択的に、入力した前記情報ビットを反転させ、前記符号変換回路に出力する第４回路とを更に具備すること
を特徴とする請求項２，４，７のいずれか１項に記載のデータ記憶システム。
【請求項９】
書き込みを行う第1のページに、物理的に隣接した第2のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出し、前記第２のページの情報ビットの前記並びの消去ビットの位置に隣接した前記第1のページのビットの状態の書き込みビットの数、および、入力した前記情報ビットの少なくとも1ビット巡回シフトした隣接した前記第1のページのビットの状態の、書き込みビットの数をそれぞれ検出し前記符号変換回路に出力する第５カウンタ回路と、
前記第５カウンタ回路の出力の並びの数により、選択的に、入力した前記情報ビットを巡回シフトさせ、前記符号変換回路に出力する第６回路とを更に具備すること
を特徴とする請求項２，４，７のいずれか１項に記載のデータ記憶システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ記憶システムに関し、例えば、半導体記憶装置を含み、不良ビットが生じても救済可能な信頼性の高いシステムに適用され、特に、誤書き込みや隣接セルの容量干渉によるマージン低下に対する信頼性の向上を目的とする半導体記憶装置等に適用されるものである。
【背景技術】
【０００２】
半導体記憶装置によるデータ記憶システムのうち、例えば、電荷蓄積層にチャネルから絶縁膜を介してトンネル電流によって注入した電荷をディジタルビットの情報格納として用い、その電荷量に応じたMOSFETのコンダクタンス変化を測定し，情報を読み出す不揮発性半導体メモリ(EEPROM)が開発されている。中でも、メモリセルを複数個直列または並列接続しメモリセルブロックを形成したNAND型EEPROM（NAND型フラッシュメモリ）は、選択トランジスタゲートの数をメモリセルよりも大幅に減らすことができ、より高密度化することができる。また、NAND型EEPROMでは、メモリセルの形成されたウェルを共通化することにより、消去を複数のメモリセルで構成されたページにて一括で行う構造をとり、書き込みは個々のメモリセルについて行う構造をとるため、より高密度化することができる。ここで、上記不揮発性メモリでは、DRAMと異なりデータ破壊を伴わずに複数回読み出すことが可能である。
【０００３】
しかし、微細化および高密度化の更なる進行によって、隣接セルの容量結合が大きくなると、隣接セルの電荷蓄積層の電荷量によって、しきい値が変化するようになると、情報ビット間のしきい値電圧余裕が低下する。特に、NAND型フラッシュメモリでは、書き込み時のデータパターンによって、一括消去した消去ビットでも消去状態を保つべきビットが書き込みビットに変化する誤書き込みが生じ、さらなるしきい値電圧余裕が低下するという問題があった。
【０００４】
このような誤りビットの問題を緩和する一つの解として、例えば、本発明者らが開示する特許文献１のように、ＥＣＣ（Error Correcting Code）を用いて誤り訂正を用いる方法がある。しかしながら、上記消去しきい値や書き込みしきい値が、隣接メモリセルが消去しきい値から書き込みしきい値になることにより容量結合によって上昇する問題や、隣接メモリセルのパターンによって、より誤書き込みが生じる問題に対して、より特徴を捉えた、効果があるＥＣＣ構成方法については開示されていない。
【０００５】
より具体的には、ＥＣＣとしてＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号、ＲＳ(Reed-Solomon)符号を用いた場合、例えば、ＢＣＨ符号では、ｔ重誤り訂正符号として、符号長ｎはｍを自然数として、２ｍ−１で固定されており、対応する情報ビット数ｋ0はｋ0＝２ｍ−１−ｍｔに制限されている。また、ＲＳ符号では、ｔ重誤り訂正符号として、1バイトをｍビットとして、符号長ｎは２ｍ−１(バイト)であり、対応する情報バイト数ｋ1はｋ1＝２ｍ−１−２ｔに制限されている。このように、ＥＣＣとしてＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号等を用いた場合には、従来、短縮化符号などの手法に用いられ、符号長などの制限により自由度が小さい。
【０００６】
上記のように、従来のＢＣＨ短縮符号作成法やＲＳ短縮符号作成法のみでは、例えば、”010”など符号の特定の連パターンに対して誤りに強い訂正方法ではなく、ランダムな単ビット、または、ランダムな一定数のバイトに対する誤り訂正方法であった。
【０００７】
よって、上記消去しきい値や書き込みしきい値が、隣接メモリセルが消去しきい値から書き込みしきい値になることによる容量結合によって上昇する問題や、隣接メモリセルのパターンによって、より誤書き込みが生じる問題に対して、よりこの問題の特徴を捉えて解決されるものではない。従って、従来、ＢＣＨ符号やＲＳ符号と組み合わせた場合であっても、より効果がある符号化の構成方法については開示されていない。
【０００８】
上記のように、従来のデータ記憶システムは、上記消去しきい値や書き込みしきい値が容量結合によって変化し、隣接メモリセルのパターンによって誤書き込みが生じるランダマイズに対して、ランダムな単ビット、または、ランダムな一定数のバイトに対する誤り訂正する構成であった。その結果、例えば、”010”など符号の特定の連パターンに対して、より特徴を捉えた、誤りに強い訂正をすることができない、という問題があった。
【特許文献１】特開２００５−２４３１８３
【発明の開示】
【発明が解決しようとする課題】
【０００９】
この発明は、符号の特定の連パターンに対して、より特徴を捉えた、誤り訂正に有利なデータ記憶システムを提供する。
【課題を解決するための手段】
【００１０】
この発明の一態様によれば、少なくとも"1"と"0"の2値のディジタルデータを電荷蓄積層の電荷として記憶し前記電荷蓄積層の2つの電荷量の差を書き込みビットおよび消去ビットとして用いるメモリセルを備え、複数の前記メモリセルが隣接して構成されるページを一括消去する不揮発性メモリセルアレイと、情報ビットから少なくとも1ビットの誤りデータを訂正する符号を発生し、前記ページに記録する誤り訂正符号を生成する誤り訂正符号発生回路と、前記ページに記録されたディジタルデータより、前記誤り訂正符号から誤りを訂正し前記情報ビットを復元する誤り訂正符号復号回路と、入力された前記情報ビットと”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号発生回路に出力する符号変換回路とを具備するデータ記憶システムを提供できる。
【発明の効果】
【００１４】
この発明によれば、符号の特定の連パターンに対して、より特徴を捉えた、誤り訂正に有利なデータ記憶システムが得られる。
【発明を実施するための最良の形態】
【００１５】
［比較例］  
まず、以下に説明するこの発明に係る実施例１乃至実施例７に係るデータ記憶システムと比較するために、図１乃至図３を用いて、比較例に係るデータ記憶システムについて説明する。図１は、比較例に係るNAND型EEPROM半導体装置のメモリセルエレメントの回路構成を示す。
【００１６】
図１に示すように、電荷蓄積電極を有するMOSトランジスタからなる不揮発性メモリセルM0〜M31が直列に接続され、一端が選択トランジスタS1を介してBLと記してあるデータ転送線に接続されている。また他の一端は選択トランジスタS2を介してSLと記してある共通ソース線に接続されている。また、それぞれのトランジスタは、同一のp型ウェル23上に形成されている。また、それぞれのメモリセルM0〜M31の制御電極は、WL0〜WL31と記したデータ選択線（以下WLと記載する）に接続されている。また、データ転送線に沿った複数のメモリセルブロックから１つのメモリセルブロックを選択してデータ転送線に接続するため、選択トランジスタS1の制御電極はブロック選択線SSLに接続されている。さらに、選択トランジスタS2の制御電極はブロック選択線GSLに接続されており、いわゆるNAND型メモリセルブロック49（点線の領域）を形成している。ここで、本比較例では、選択ゲートの制御配線SSLおよびGSLがメモリセルエレメントの制御配線WL0〜WL31の電荷蓄積層26と同じ層の導電体によって、紙面左右方向に隣接するセルで接続されて形成されている。本比較例では、図を過剰に複雑にせず問題点を判りやすくするために、例として、3つのデータ転送線（BL1,BL2,BL3）に接続されたメモリセルアレイ構造を示して説明する。しかし、勿論、この並列数は３ではなく、もっと多数、例えば、2100個、4200個、8400個、16800個、33600個程度並列接続した構造を想定している。
【００１７】
ここで、隣接するメモリセルの容量結合によって、電荷蓄積電極の電位が変化する問題を説明するために、例えば、WL1とBL2の交点に形成されたM1a(α)セルについてのしきい値分布を、例えば、図２に示す。電荷蓄積層を有する多値メモリセルにおいては、隣接するメモリセルに負の電荷が蓄積することにより、隣接するメモリセル間の容量結合を通じて、しきい値が上昇する問題が生じる。この問題を説明するために、M1a(α)セルを例として、BL方向に隣接するメモリセルM1b(β)およびM1b’(γ)、および、WL方向のS1端子側に隣接し直列接続されたメモリセルM2a(ε)が消去状態から書き込み状態に変化した場合のしきい値変動を図２に示す。
【００１８】
図２では、（ｉ）に、隣接データ転送線側の隣接メモリセル（β、γ）、および、S1側のワード線側の隣接メモリセル（ε）がすべて消去状態のメモリセルαの消去しきい値分布を示す。また、図２には、4値の書き込み状態を考え、例えば、4値の記憶を想定して、しきい値が高い側から書き込みしきい値３、書き込みしきい値２、書き込みしきい値１の順で書き込みしきい値が設定されているとする。
【００１９】
また、（ｉｉ）に、隣接データ転送線側の隣接メモリセル1セル（γ）が書き込み状態で、反対側に隣接するメモリセル（β）、および、S1側のワード線側の隣接メモリセル（ε）が消去状態の場合のメモリセルαの消去しきい値分布を示す。この場合、隣接するメモリセル1セル（γ）が書き込み状態なので、消去状態よりも電子が蓄積された状態となっている。よって、（ｉ）に比べ、隣接メモリセルの容量結合によって、αのメモリセルのしきい値が上昇する。さらに、いわゆる誤書き込みによって（ｉ）に比べしきい値が上昇し上裾分布が発生する問題があるが、これを以下詳細に説明する。ここで、NANDフラッシュメモリでは、データ選択線に共通に接続されたメモリセルはデータ選択線であるWLの電位を、例えば15V程度以上30V程度以下の電位を印加し、かつ、電気的に接続されたデータ転送線(BL)電位を0Vとして、書き込みを選択したメモリセルのソース電極およびドレイン電極を例えば0Vとし、チャネル電位も0Vとする。一方、書き込みを選択せず、消去状態に保つメモリセル、つまり、いわゆる非選択メモリセルのソース電極、ドレイン電極、および、チャネル電位は、例えば、5Vから10Vの間に保つことにより、データ選択線とデータ転送線との電位差を小さくすることにより、書き込みを防ぐことが行われる。なお、非選択メモリセルを実現するには、電気的に接続されたBLの電位を0Vより上昇させることによって行う。さらに、NANDフラッシュメモリでは、書き込みしきい値の分布幅を小さくするために、書き込み後にベリファイ読み出しを行うことにより、書き込みの下限しきい値（書き込みベリファイしきい値）に達したメモリセルについては、BLの電位を選択的に0Vから上昇させることにより、追加書き込みが生じないようにしている。
【００２０】
ここで、WL1に接続されたメモリセルαを消去状態に保ち、WL1に接続された別のメモリセルを書き込むために、WL１の電位を15V程度以上30V程度以下の電位を印加する場合を考える。この場合、（ｉｉ）の状態の書き込み時に、書き込みを行うメモリセルγのソース電極、ドレイン電極、およびチャネル電位は0Vであり、メモリセルαのソース電極、ドレイン電極、およびチャネル電位は5V程度から10V程度に保たれる。
【００２１】
一方、（ｉ）の状態の書き込み時には、メモリセルγとメモリセルαのソース電極、ドレイン電極、およびチャネル電位は5V程度から10V程度に保たれる。よって、（ｉｉ）の状態の書き込みの場合には、メモリセルαのソース電極またはドレイン電極から、メモリセルγのソース電極またはドレイン電極へ電流が流れることにより、メモリセルαのソース電極またはドレイン電極の電位が低下する。または、隣接するメモリセルγのソース電極およびドレイン電極の電位、およびチャネル部分の電位が（ｉ）よりも（ｉｉ）の場合に低いことにより、BL方向の容量結合により、メモリセルαのチャネル部分の電圧も（ｉ）よりも（ｉｉ）の場合に低下する。これらにより、（ｉ）に比べ（ｉｉ）の場合に、メモリセルαのチャネル部分の電圧が低下するために、非選択のメモリセルに書き込みが生じる誤書き込みが生じ、メモリセルαのしきい値上昇が生じる。以上より、（ｉ）に比べ（ｉｉ）の場合に、消去状態のメモリセルαについて、しきい値がより上昇する問題が生じる。特に、書き込みおよび消去ストレスを経たメモリセルでは、トンネル絶縁膜に電荷トラップが形成され、電荷蓄積層から弱い書き込みストレスでStress Induced Leakage Current（SILC）が流れやすくなる。この場合、（ｉ）に比べ、（ｉｉ）の状態で電荷蓄積層の蓄積電荷量の差が大きく、隣接メモリセル方向に電界ストレスが加わるため、より、誤書き込みストレス時にSILCリーク電流が流れることにより、消去分布の上裾が生じやすくなる。
【００２２】
以上の消去しきい値が（ｉｉ）の場合に広がる問題は、（ｉｉ）に、隣接データ転送線側の隣接するメモリセル1セル（β）が書き込み状態で、反対側に隣接するメモリセル（γ）、および、S1側のワード線側の隣接メモリセル（ε）が消去状態の場合のメモリセルαの消去しきい値分布でも同等に生じる。
【００２３】
さらに、（ｉｉｉ）に隣接データ転送線側に隣接メモリセル2セル(β、γ）とも書き込み状態で、S1側のワード線側の隣接メモリセル（ε）が消去状態の場合のメモリセルαの消去しきい値分布を示す。（ｉｉｉ）の場合は、（ｉｉ）の場合に比べ、BL方向に隣接するメモリセル（β、γ）が２つとも書き込み状態なので、消去状態よりもより電子が蓄積された状態となっている。よって、（ｉｉ）に比べ、隣接メモリセルの容量結合によって、αのセルのしきい値が上昇する。さらに、いわゆる誤書き込みストレスによって（ｉｉ）に比べさらにしきい値が上昇し、上裾分布が発生する。
【００２４】
ここで、WL1に接続されたメモリセルαを消去状態に保ち、WL1に接続された別のメモリセルを書き込むために、WL１の電位を15V程度以上30V程度以下の電位を印加する場合を考える。この場合、（ｉｉ）の状態の書き込み時に、書き込みを行うメモリセルβ、γのソース電極、ドレイン電極、およびチャネル電位は0Vであり、メモリセルαのソース電極、ドレイン電極、およびチャネル電位は5Vから10Vに保たれる。一方、（ｉｉ）の状態の書き込み時には、メモリセルβ、メモリセルγとメモリセルαのソース電極、ドレイン電極、およびチャネル電位は5V程度から10V程度に保たれる。よって、（ｉｉｉ）の状態の書き込みの場合には、メモリセルαのソース電極、または、ドレイン電極からメモリセルγまたはメモリセルβのソース電極、または、ドレイン電極へ電流が流れることにより、メモリセルαのソース電極またはドレイン電極の電位が（ｉｉ）の場合よりも低下する。または、隣接するメモリセルβおよびメモリセルγのソース電極およびドレイン電極の電位、およびチャネル部分の電位が（ｉ）よりも（ｉｉｉ）の場合に低いことにより、BL方向の容量結合により、メモリセルαのチャネル部分の電圧も低下する。これらにより、（ｉ）に比べ（ｉｉｉ）の場合に、メモリセルαのチャネル部分の電圧が低下するために、非選択のメモリセルに書き込みが生じる誤書き込みが生じ、メモリセルαのしきい値上昇が生じる。さらに、（ｉｉ）の場合と比べても、BL方向両側に隣接するメモリセルのチャネル部分の電位が低いことにより、より（ｉｉ）よりも誤書き込みが生じやすくなる。以上より、（ｉｉ）に比べ（ｉｉｉ）の場合に、消去状態のメモリセルαについて、しきい値がより上昇する問題が生じる。
【００２５】
さらに、図２の（ｉｖ）に隣接データ転送線側に隣接メモリセル2セル（β、γ）とも書き込み状態で、S1側のワード線側の隣接メモリセル（ε）が書き込み状態の場合のメモリセルαの消去しきい値分布を示す。（ｉｖ）の場合は、（ｉｉｉ）の場合に比べ、S1側のワード線側の隣接するメモリセル（ε）が書き込み状態なので、消去状態よりもより電子が蓄積された状態となっている。よって、（ｉｉｉ）に比べ、隣接するメモリセル（ε）の容量結合によって、αのセルのしきい値が（ｉｉｉ）の場合よりもさらに上昇する。WL,BLに対して対角方向のメモリセルの容量結合の寄与は、他のBL方向、WL方向の容量結合のそれぞれの寄与に比べ40%以下1%以上と小さいので、多値メモリセルでは、この（ｉｖ）の状態で消去しきい値が（ｉ）〜（ｉｉｉ）の場合よりも高い方に分布が広がる主パターンとなる。
【００２６】
なお、多値NANDフラッシュメモリでは、従来、同じ多値レベルのデータは、SL側のセルからBL側に順に書き込む仕様となっている。このため、S1側のワード線側の隣接メモリセル（ε）はメモリセル（α）より後で同一レベルのデータ書き込みされるので、この隣接メモリセル（ε）の書き込みしきい値の影響をメモリセル（α）が受けることになる。なお、この隣接メモリセル（β、γ、ε）が書き込み状態の場合に、隣接メモリセルが消去状態と設定された場合よりもメモリセルαのしきい値分布が高い側に広がる問題は、隣接するメモリセル間の容量結合のため、メモリセルαが書き込みしきい値についても生じる問題である。すなわち、本発明の主要な問題点を明確化するために、説明や図示は省略しているが、図２の書き込みしきい値１，２，３の場合も同様に、しきい値の上昇問題が生じる。
【００２７】
一方、図２の（ｖ）に、例えば、10回から10万回のある一定値の書き込み消去（Enduranceと一般的に言う）を行った後での、例えば、85度で1年から10年間放置、いわゆる、データ保持した場合の書き込みしきい値１の分布を示す。書き込みしきい値は、Endurance後では、トンネル絶縁膜の半導体基板近傍に、トンネル電流または電界ストレスにより電子トラップが形成される。この電子トラップは、書き込み時に電子をトラップした後、長時間放置することにより、トンネル絶縁膜中にトラップされた電荷を、電荷蓄積領域に蓄積した電荷よりも放出しやすい特徴を有する。よって、（ｖ）のように、書き込み直後のしきい値より電子放出のために、しきい値が低下する問題が生じる。勿論、Endurance後では、トンネル電流または電界ストレスにより、トンネル絶縁膜中に電子または正孔トラップが形成されることにより、このトラップ準位を通じてリーク電流が流れる問題も生じる。この問題が生じると、図２の（ｖ）の下端のようにしきい値下方に裾を曳いた分布になりやすい。いずれにせよ、電荷保持後では、書き込み直後の分布に比べ、書き込みしきい値は低下し分布が広がる傾向が生じる。
【００２８】
ここで、書き込みしきい値１，２，３は、中性しきい値よりも高いしきい値と仮定するが、これは、従来のNAND型半導体記憶装置では妥当な仮定である。この場合、書き込みしきい値３が高いと、例えば、電荷保持時のトンネル絶縁膜の電界が増大するため、トンネル絶縁膜を通じたリーク電流が増加し、データ保持特性が劣化する。また、書き込みしきい値３が高いと電荷蓄積層と制御電極との間の、いわゆるインターポリ絶縁膜の書き込み時や電荷保持時の電界が増大するため、リーク電流増大や絶縁破壊を生じ、やはり、データ保持特性およびメモリセルの信頼性が悪化する。よって、書き込みしきい値は、メモリセルの信頼性を維持するための上限があり、例えば、4V程度以上8V程度以下の範囲で上限が設定される。一方、消去しきい値が低いと、電荷蓄積層と制御電極との間の、いわゆるインターポリ絶縁膜の消去時の電界が増大するため、リーク電流増大や絶縁破壊を生じ、やはり、データ保持特性およびメモリセルに信頼性が悪化する。よって、消去しきい値は、メモリセルの信頼性を維持するための下限があり、例えば、−4V程度以下−10V程度以上の範囲で下限が設定される。これらはメモリセルの信頼性悪化や絶縁破壊などを伴うため、この書き込みしきい値の上限と消去しきい値の下限の範囲内に、メモリセルの書き込みしきい値分布、および、消去しきい値分布がすべて入るよう設定する必要がある。図２のように消去しきい値の分布が、隣接メモリセル間の容量結合や誤書き込みによって高い側に変動し、書き込みしきい値の保持後の特性でしきい値低下が生じ、図２の（ｉｖ）と（ｖ）のように、しきい値分布の重なりが生じると、書き込みビットを消去ビットと誤検出や誤訂正したり、消去ビットを書き込みビットと誤検出や誤訂正する誤りビットの問題が生じる。前述のようにしきい値が設定できる上下限範囲が決まっており、書き込みしきい値分布を狭くするには、書き込みプログラム電圧ステップを狭くする必要があり、書き込みスピードの低下とのトレードオフが大きな問題となる。また、隣接メモリセル間の物理間隔が狭くなり、より隣接メモリセル間の容量結合が大きくなると、書き込みしきい値１，２についても、隣接セルの電荷蓄積層の電荷量によって、しきい値が変動し、しきい値幅が増大する問題が生じる。よって、メモリセルの微細化が進んだ高密度NANDメモリセルでは、この誤りビットの問題をしきい値分布制御のみで抑制するのは困難である。
【００２９】
このような誤りビットの問題を緩和するために、例えば、上記特許文献１（特開２００５-２４３１８３）に本発明者らが開示しているように、ＥＣＣ（Error Correcting Code）を用いて誤り訂正を用いる方法が知られている。しかしながら、上記消去しきい値や書き込みしきい値が、隣接メモリセルが消去しきい値から書き込みしきい値になることにより容量結合によって上昇する問題や、隣接メモリセルのパターンによって、より誤書き込みが生じる問題に対して、より特徴を捉え、効果があるＥＣＣの構成方法については開示されていない。
【００３０】
より具体的には、ＥＣＣとしてＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号、ＲＳ(Reed-Solomon)符号を用いた場合には、例えば、ＢＣＨ符号では、ｔ重誤り訂正符号として、符号長ｎはｍを自然数として、２ｍ−１で固定されており、対応する情報ビット数ｋ0はｋ0＝２ｍ−１−ｍｔに制限されている。また、ＲＳ符号は、ｔ重誤り訂正符号として、1バイトをｍビットとして、符号長ｎは２ｍ−１（バイト）であり、対応する情報バイト数ｋ1はｋ1＝２ｍ−１−２ｔに制限されている。ＥＣＣとしてＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号を用いた場合には、符号長などの制限より自由度が小さいため、短縮化符号などの手法を用いられてきた。
【００３１】
図3(a)に比較例に係るＢＣＨ符号に対する短縮化符号の方法を示す。  
まず、図３の(a1)に示すように、前述のk0ビットより少ないｋビットの情報ビットを準備する。次いで、（a2）に、l-bitの”0”を追加して、前述のk0ビットに相当するビット数に揃える。さらに、”0”bitを追加した情報系列をＢＣＨ符号化し、(a3)に示すように、検査ビットとなるパリティを付加したnビットの符号語を形成する。次いで、(a4)で示すように、符号化された符号語中のl-bitの”0”を取り除き、(n-l)ビットの符号語を不揮発性メモリに記憶する。このようにして、(n,k0)ＢＣＨ符号から、（(n-l),k(=k0-l))ＢＣＨ短縮符号を形成している。ここで、情報ビットはＢＣＨ符号後でもそのまま情報ビットとして、検査ビットと分離している。この特徴はＲＳ符号でも同様に存在する。
【００３２】
しかしながら、上記のようにＢＣＨ短縮符号作成法やＲＳ短縮符号作成法のみでは、”010”など符号の特定の連パターンに対して誤りに強い訂正方法ではなく、ランダムな単ビット、または、ランダムな一定数のバイトに対する誤り訂正方法である。よって、上記消去しきい値や書き込みしきい値が、隣接メモリセルが消去しきい値から書き込みしきい値になることにより容量結合によって上昇する問題や、隣接メモリセルのパターンによって、より誤書き込みが生じる問題に対して、よりこの問題の特徴を捉え、ＢＣＨ符号やＲＳ符号と組み合わせた場合に、より効果がある符号化の構成方法ではない。
【００３３】
上記のように、比較例に係るデータ記憶システムは、消去しきい値や書き込みしきい値が容量結合によって変化し、隣接メモリセルのパターンによって誤書き込みが生じるランダマイズの問題に対して、ランダムな単ビット、または、ランダムな一定数のバイトに対する誤り訂正する構成である。その結果、例えば、”010”など符号の特定の連パターンに対して、より特徴を捉えた、誤りに強い訂正をすることができない点で不利である。
【００３４】
以下、最良と思われるいくつかの実施例１乃至実施例７について説明する。尚、この説明においては、全図にわたり共通の部分には共通の参照符号を付す。
【００３５】
［実施例１］  
次に、図４乃至図９を用いて、この発明の実施例１に係るデータ記憶システムおよびその誤り訂正動作を説明する。
【００３６】
＜１．構成例＞  
まず、図４を用いて、実施例１に係るデータ記憶システムの全体構成例を説明する。図４は、実施例１に係るデータ記憶システムのブロック図のレイアウトを示す。
【００３７】
図示するように、本例に係るデータ記憶システムは、記憶装置７とメモリコントローラ５とにより構成される。
【００３８】
記憶装置７として点線で囲った部分は、例えば、NAND型フラッシュメモリとして1つの半導体基板上に形成されている。メモリコントローラ５として点線で囲った部分は、いわゆるフラッシュメモリのコントローラに相当する回路構成を示したもので、通常、記憶装置７とは別の半導体基板上に形成された回路を示しているが、勿論同じ半導体基板に形成してもよい。このように、例えば、メモリコントローラ５と記憶装置７とが同一パッケージまたはボードやカード内に形成されることにより、データ記憶システムを形成している。
【００３９】
データ入出力バッファ45は、フラッシュメモリ  コントローラ５のデータ入出力バッファ101と第1の内部I/O線により接続されている。
【００４０】
ここで、本願すべての実施例に渡って、メモリセルはデータ破壊を伴わずに複数回読み出すことができるメモリセルとする。さらに、メモリセルブロック49の具体的構成については、以下に述べる。なお、フラッシュメモリの慣例に従い、消去状態の論理値を"1"、書きこみ状態の論理値を"0"とする。また、説明を簡単にするために、以下すべての実施例において、特に記述無い場合は2値のメモリセルのしきい値について記述するが、多値メモリセルの場合にも、勿論実施例の適用が可能である。この場合、メモリセルのしきい値が高い側から低い側の順で各データ保持のビットを表すのしきい値分布を配列した場合、任意の隣接する２つのしきい値分布a,b（aがbより低いしきい値分布とする）を考え、a以下のしきい値分布を”1”、b以上のしきい値分布を”0”と読み替えればよい。なお、NAND型フラッシュメモリでは、同一のデータ制御線に接続された消去メモリセルを一括消去し、NANDセルブロック49でも一括消去する方法を取られるため、消去しきい値の分布が2V以上6V以下と、0.1V以上1V以下の書き込みしきい値の分布幅よりも広くなる。このため、図5(a)の消去しきい値から書き込みしきい値へ隣接メモリセル（β、γ、ε）のいずれかのしきい値が変化した場合の当該メモリセル（α）のしきい値変化影響が最も大きくなるため、多値メモリセルにおいて、消去状態の論理値を"1"、それ以外のいずれかの書きこみ状態の論理値を"0"として読み替えるのが望ましい。
【００４１】
次に、図５ａ，図５ｂを用いて、メモリセルアレイの平面構成例について、説明する。図５ａ，図５ｂは、それぞれ、NANDセルブロック49の等価回路および平面図である。
【００４２】
図５ｂでは、図５aのセルブロック49を３つ並列した構造を示している。特に、図５bでは、セル構造をわかりやすくするために、制御ゲート電極27よりも下の構造のみを示している。図５aでは、電荷蓄積電極26を有するMOSトランジスタからなる不揮発性メモリセルM0〜M31が直列に接続され、一端が選択トランジスタS1を介してBLと記してあるデータ転送線に接続されている。また他の一端は選択トランジスタS2を介してSLと記してある共通ソース線に接続されている。また、それぞれのトランジスタは、同一のp型ウェル23上に形成されている。また、それぞれのメモリセルM0〜M31の制御電極は、WL0〜WL31と記したデータ選択線に接続されている。また、データ転送線に沿った複数のメモリセルブロックから１つのメモリセルブロックを選択してデータ転送線に接続するため、選択トランジスタS1の制御電極はブロック選択線SSLに接続されている。さらに、選択トランジスタS2の制御電極はブロック選択線GSLに接続されており、いわゆるNAND型メモリセルブロック49（点線の領域）を形成している。ここで、本実施例では、選択ゲートの制御配線SSLおよびGSLがメモリセルエレメントの制御配線WL0〜WL31の電荷蓄積層26と同じ層の導電体によって、紙面左右方向に隣接するメモリセルで接続されて形成されている。ここで、メモリセルブロック49には、SSLおよびGSLのブロック選択線は少なくとも1本以上あればよく、データ選択線WL0〜WL31と同一方向に形成されることが、高密度化には望ましい。本実施例では、メモリセルブロック49に32=25個のメモリセルが接続されている例を示したが、データ転送線およびデータ選択線に接続するメモリセルの数は複数であればよく、割り切れる2n個もしくは、ダミーメモリセルをS2とWL0間、S1とWL31間に加えた2n+2個（nは正の整数）であることが多値メモリセルのブロックをアドレスデコードする上で望ましい。
【００４３】
次に、図６ａ，図６ｂを用いて、メモリセルアレイの断面構成例について説明する。図６a，図６bは、図５b中の矢視B-B'およびA-A'方向断面図である。B-B'方向断面図は、メモリセル部断面図に相当する。図６aおよび図６bにおいて、例えば、ボロン不純物濃度が1014cm-3から1019cm-3の間のp型シリコン領域23に、例えば、3から15nmの厚さからなるシリコン酸化膜またはオキシナイトライド膜25,25SSL,25GSLから形成されたトンネルゲート絶縁膜を介して、例えばリンまたは砒素を1018cm-3から1021cm-3添加したポリシリコンからなる電荷蓄積層26,26SSL,26GSLが10nmから500nmの厚さで形成されている。これらは、例えば、シリコン酸化膜からなる素子分離絶縁膜24が形成されていない領域上に、p型シリコン領域23と自己整合的に形成されている。これは、例えば、半導体領域23に25,26を全面堆積した後、パターニングして半導体領域23に達するまで、半導体領域23を例えば0.05〜0.5umの深さエッチングし、絶縁膜24を埋め込むことで形成することができる。このように25および26を段差のない平面に全面形成できるので、より均一性の向上した特性の揃った製膜を行うことができる。
【００４４】
この上に、例えば、厚さ5nmから30nmの間のシリコン酸化膜またはオキシナイトライド膜、またはシリコン酸化膜/シリコン窒化膜/シリコン酸化膜、または、アルミニウム、ハフニウム、ランタン、ジルコニウム元素を含む酸化膜とシリコン酸化膜,シリコン窒化膜からの積層膜からなるブロック絶縁膜50,50SSL,50GSLを介して、例えばリン、砒素、またはボロンを1017〜1021cm-3を不純物添加したポリシリコン、または、WSi（タングステンシリサイド）とポリシリコンとのスタック構造、または、Wとポリシリコンのスタック構造、または、NiSi,MoSi,TiSi,CoSiとポリシリコンのスタック構造からなる制御ゲート27が10nmから500nmの厚さで形成されている。この制御ゲート27は、図５ｂにおいて隣接するメモリセルブロックで接続されるように図５ｂにおいて紙面左右方向にブロック境界まで形成されており、データ選択線WL0〜WL31を形成している。なお、p型シリコン領域23は、n型シリコン領域22によってp型半導体基板21と独立に電圧印加できるようになっていることが、消去時の昇圧回路負荷を減らし消費電力を抑えるためには望ましい。本実施例のゲート形状では、半導体領域23の側壁が絶縁膜24で覆われているので、浮遊ゲート電極26を形成する前のエッチングで露出することがなく、ゲート電極26が半導体領域23よりも下に来ることを防ぐことができる。よって、半導体領域23と絶縁膜24との境界での、ゲート電界集中やしきい値低下した寄生トランジスタが生じにくい。さらに、電界集中に起因する書込みしきい値の低下現象、いわゆる、sidewalk現象が生じにくくなるため、より信頼性の高いトランジスタを形成することができる。
【００４５】
図６ｂに示すように、これらゲート電極の両側には、例えば5nmから200nmの厚さのシリコン窒化膜またはシリコン酸化膜からなる側壁絶縁膜43を挟んでソースまたはドレイン電極となるn型拡散層28が形成されている。これら拡散層28、電荷蓄積層26、および制御ゲート27により、電荷蓄積層26に蓄積された電荷量を情報量とする浮遊ゲート型EEPROMセルが形成されており、そのゲート長としては、0.5um以下0.01um以上とする。これらソースドレインn型拡散層28としては、例えばリンや砒素、アンチモンを表面濃度が1017cm-3から1021cm-3となるように深さ10nmから500nmの間で形成されている。さらに、これらn型拡散層28は隣接するメモリセル同士共有され、NAND接続が実現されている。また、図において、26SSL、さらに、26GSLは、それぞれSSLおよびGSLに相当するブロック選択線に接続されたゲート電極であり、前記浮遊ゲート型EEPROMの浮遊ゲート電極と同層で形成されている。ゲート電極26SSLおよび26GSLのゲート長は、メモリセルゲート電極のゲート長よりも長く、例えば、1um以下0.02um以上と形成することにより、ブロック選択時と非選択時のオンオフ比を大きく確保でき、誤書き込みや誤読み出しを防止できる。
【００４６】
また、27SSLの片側に形成されたソースまたはドレイン電極となるn型拡散層28dは、例えば、タングステンやタングステンシリサイド、チタン、チタンナイトライド、銅、またはアルミニウムからなるデータ転送線36(BL)とコンタクト31dを介して接続されている。ここで、データ転送線36(BL)は、隣接するメモリセルブロックで接続されるように図5(b)において紙面上下方向にブロック境界まで形成されている。一方、27(GSL) の片側に形成されたソースまたはドレイン電極となるn型拡散層28Sは、コンタクトコンタクト31sを介してソース線となるSLと接続されている。このソース線SLは、隣接するメモリセルブロックで接続されるように図5bにおいて紙面左右方向にブロック境界まで形成されている。勿論、n型拡散層28Sを紙面左右方向にブロック境界まで形成することにより、ソース線としてもよい。これらBLコンタクト、および、SLコンタクトとしては、例えばn型またはp型にドープされたポリシリコンやタングステン、およびタングステンシリサイド、Al、TiN、Tiなどが充填されて、導電体領域となっている。さらに、これらSLおよびBLと、前記トランジスタとの間は、例えばSiO2やSiNらなる層間膜68によって充填されている。さらに、このBL上部には、例えばSiO2、SiN、または、ポリイミドらなる絶縁膜保護層37や、図には示していないが、例えば、W,AlやCuからなる上部配線が形成されている。
【００４７】
セルアレイ1は、図５aに示すように、不揮発性メモリセルを直列または並列接続したメモリセルブロック49を配列して構成される。このメモリセルアレイ1のデータ転送線のデータをセンスし、あるいは書き込みデータを保持するためにセンスアンプ回路46がデータ転送線選択トランジスタを介して設けられている。このセンスアンプ回路はデータレジスタを兼ねており、例えばフリップフロップ回路を主体として構成される。さらに、センスアンプ回路46は、データ入出力バッファ45に接続されている。これらの接続は、アドレスバッファ47からアドレス信号を受けるカラムデコーダ48の出力によって制御され、データ入出力バッファに与えられたデータをメモリセルアレイ1に書き込み、およびデータを図4の第1の内部I/O線へ読み出し可能となっている。メモリセルアレイ1に対して、メモリセルの選択を行うため、具体的にはデータ制御線WL0〜WL31、およびブロック選択ゲートSSL,GSLの制御をするために、ロウデコーダ3が設けられている。
【００４８】
基板電位制御回路42は、セルアレイ1が形成されるp型基板21（またはp型ウェル）の電位を制御するために設けられており、特に消去時に10V以上の消去電圧に昇圧されるように形成されることが望ましい。さらに、メモリセルアレイ1の選択されたメモリセルにデータ書き込みを行う際に、電源電圧よりも昇圧された書き込み電圧Vpgmを発生するための回路41aが形成されている。このVpgm発生回路41aとは別に、データ書き込み時に非選択のメモリセルに与えられる書き込み用中間電圧Vpassを発生するための回路41b、およびデータ読み出し時に非選択のメモリセルに与えられる読み出し用中間電圧Vread発生回路41cおよび選択セルのしきい値判定電圧を与える回路Vref発生回路1(41d)が設けられている。これらは、書き込み、消去、および読み出しの各状態で、必要な電圧出力がデータ制御線ドライバ2に加えられるように、制御回路40によって制御されている。Vpgmとしては、6V以上30V以下の電圧であり、Vpassは3V以上15V以下の電圧であり、Vreadとしては1V以上9V以下の電圧で、NAND型アレイの場合、書き込みしきい値上限よりも1V程度高い電圧が読み出し電流を十分確保しRead disturbを低下させるのには望ましい。さらに、Vref発生回路41としては、メモリセルの隣接する各しきい値、例えば、"1"と"0"のしきい値分布の分離しきい値の中間に設定する。また、データ制御線ドライバ2は、ロウデコーダ3の出力に従って、前記電圧出力を、書き込みまたは読み出しが必要なメモリセルの制御ゲートWL0〜WL15,SSL,GSLに印加するようにするスイッチ回路である。
【００４９】
また、本出願のすべての実施例では、一連のシーケンスで読み出されるデータビット数が、mを自然数として、tを自然数として一連のシーケンスで読み出されるデータビット数が、[2m-1-t×(m-1)-1]より大きく（2m-t×m-1)以下である場合、少なくとも（2m-1）個以上のメモリセル49を図5(a)または図5(b)の紙面左右方向、つまりデータ選択線の延びる方向に並列に用意し、1ページとして用いる。また、本実施例の特徴上、2から6ビットの付加ビットを情報ビットに付加して効果を得るため、mとしては、少なくとも4以上であることが、本実施例によりアレイ面積増大を抑制するには必要であり、通常mはNANDフラッシュメモリでは、８以上20以下で用いられる。なお、1ページに属するメモリセルについては、例えば、１つのデータ選択線に共通に接続された複数のメモリセルとすることが、1度のデータ選択によって、複数のメモリセルを同時選択することができ望ましい。このようにメモリセルを準備することにより、例えば、Bose-Chaudhuri-Hocquenghem(BCH)符号を用いてセルアレイ1の一連のシーケンスで読み出されたtビットのビット誤りを検出し、その位置を求めることができる。RS符号の場合にも、1バイト中のデータは同時読み出しされるので、上記のようにメモリセル49を図５ａまたは図５ｂの紙面左右方向、つまりデータ選択線の延びる方向に並列に用意し、1ページとして用いる。
【００５０】
さらに、センスアンプ46の入出力は、メモリセルの読み出しや書込み、および消去を制御する制御ロジック40に接続されている。制御回路40は、例えばデータバッファに与えられたデータをコマンド入力とし、メモリセルの読み出しや書込み、および消去を制御する。また、図では単純化のため示していないが、制御回路40より、センスアンプの動作を制御する制御信号やsel1、sel2制御信号が接続されている。なお、7で示す点線で囲った部分は、例えば、NAND型フラッシュメモリとして従来1つの半導体基板上に形成された記憶装置を示している。ここで、上記各構成ついては、例えば、特開2002-150783によって公知な回路ブロックを用いればよいので詳しい説明は省略する。
【００５１】
なお、以後、わかりやすくするために、慣例に因んで、符号化前のデータ列を情報ビット、符号化後に付加されるビットを検査ビットと呼ぶことにする。BCH符号、およびRS符号とも、元の情報ビットに検査ビットが付加されることにより、符号を形成する。従来技術で示したように、通常、検査ビットはその符号及び復号化の回路構成を単純にするため、情報ビットの後ろに付加される形となっている。
【００５２】
ここで、図４中の点線５で囲った部分は、いわゆるフラッシュメモリのコントローラに相当する回路を示したもので、通常、記憶装置７とは別の半導体基板上に形成された回路を示しているが、勿論同じ半導体基板に形成してもよい。例えば、５と７とが同一パッケージまたはボードやカード内に形成されることにより、データ記憶システムを形成している。データ入出力バッファ45はフラッシュメモリ  コントローラ５のデータ入出力バッファ101と第1の内部I/O線により接続されている。
【００５３】
一方、外部入出力（I/O）は別のデータ入力バッファ111に接続され、フラッシュメモリの書き込み/消去/読み出しのアドレスおよびデータ制御情報を入力する。さらに、フラッシュメモリ  コントローラー５にはコントローラ制御回路120によって、2つのデータ入出力バッファ101,111の入出力のデータ入出力の制御を行っている。データ入出力バッファ111からは、外部I/Oを通じて入力された情報ビットが、符号出現確率平均化第一符号化回路106に入力されている。ここで、106に入力される情報ビットのビット数をk0ビットとする。この符号出現確率平均化第一符号化回路106は、例えば、入力データの”0”と”1”の出る確率をほぼ均等に分布するようにするためのものであり、無くてもよいが、有れば望ましい回路ブロックである。この106としては、例えば、周期符号発生回路や、特に、kビットより短いa1ビットの周期を持つM系列（Maximum length code）発生回路を平均化ビットマスク発生回路110に用いればよい。これにより発生したM系列符号は、M1周期で”0”と”1”のビットが分散して配置され、1周期で”0”,”1”が等しい確率で生成される特徴を有する。よって、情報ビットをa1ビットごとに順に区切り、発生したM系列のa1の各ビットと排他的論理和を取り、104回路へ出力し、かつ、例えば、WL毎やa1のブロックごとに適当な増分をもって、周期開始位置を変化させる。または周期開始位置ではなく、a2ビットの長さの第二のM系列符号を発生させ、さらに、情報ビットをa1ビットごとに順に区切り、発生したM系列のa1の各ビットと排他的論理和を取った後に、情報ビットをa2ビットごとに順に区切り、発生した第二のM系列のa2の各ビットと排他的論理和を取る。具体的例としては、2ビットの線形フィードバックレジスタ（LFSR：Linear Feedback Shift Register）の原始多項式はx+1であるから、2ビット目(x)と1ビット目(1)の排他的論理和を次の符号の1ビット目とし、2ビット目を1ビット目からシフトにより得ることにより、”10”,”01”,”11”,の22-1＝３状態を得ることができる。これに0ベクトルである” 00”を足した4状態がM系列となるから、情報ビットを2ビット毎に順に区切り、”10 01 11 00 10 01 11 00 ….”と順に各データ順に排他的論理和を取ればよい。
【００５４】
このようにすることにより、全部”0”や全部”1”の入力の情報ビットでも、WL間でも”0”や”1”が適宜分散した第一符号化された情報ビットが104に伝達される。これにより、ランダムに外部I/Oから情報データを与えた場合でも、情報ビットが”0”,”1”で等しい確率P=0.5で104に入力され、メモリセルの隣接メモリセル状態の均一化することができる。なお、勿論、平均化ビットマスク発生回路110は、復号回路107でも同じM系列回路、または第二のM系列回路を共有化することにより、復号回路と同じく発生したM系列のa1,a2の各ビットと排他的論理和を取ることにより、正しく復号化することができる。
【００５５】
さらに、104で入力された、”0”,”1”で平均化された情報ビットは、隣接メモリセルディスターブ低減第二符号変換回路104にて、隣接メモリセルによるディスターブが低減した情報ビットとフラグが付加されたビット列となり、誤り訂正符号発生回路102に入力される。ここで、102は、例えば、一般に知られているBCH符号発生回路またはRS符号発生回路を用いればよい。例えば、本発明者らが特開2005-243183にて開示したBCH符号化回路を用いれば実現できるのでここでは省略する。これにより、102より誤り訂正符号出力がデータバッファ101を通じて、不揮発性半導体記憶素子7に記憶される。
【００５６】
なお、本発明は、物理的に隣接したメモリセル間の容量干渉、または、誤書き込み問題を低減する符号化を行う発明なので、不揮発性半導体記憶装置7に与えられる隣接した時系列の情報ビットは、ウェル境界、ソースシャント領域などを除きおおむね物理的に隣接したメモリセルに書き込まれるものとする。適切な物理―論理マッピングを行えばこのような符号化が可能であることは言うまでもない。
【００５７】
一方、不揮発性メモリ７から読み出された誤りを含む可能性のある符号列は、データバッファ101を通じて、誤り訂正符号を復号する回路103に入力され、符号誤り訂正され、隣接メモリセルによるディスターブが低減した情報ビットとフラグが付加されたビット列となる。この103については、一般に知られているBCH符号復号回路またはRS符号復号回路を用いればよい。BCH復号回路については、例えば、本発明者らが特開2005-243183にて開示したBCH符号化回路を用いれば実現できるのでここでは省略する。同様にRS符号も多元、2m元（mは整数）のBCH符号の一種なので、復号回路が同様に形成できることは公知であり明らかである。
【００５８】
ついで、隣接メモリセルによるディスターブが低減した情報ビットとフラグが付加されたビット列は、隣接メモリセルディスターブ低減第二符号逆変換回路105に入力され、第二符号復号化回路105によって、第一符号を施した情報ビットに復号される。さらに、この第一符号を施した情報ビットを第一符号復号化回路107に入力することにより、元の情報ビットが復号される。この情報ビットの出力が、データ入出力バッファ111を通じて外部I/Oでデータが出力される。
【００５９】
なお、この第一符号復号化回路107は、前述のように、110で発生されたのと106回路で用いたものと同じM系列と排他的論理和をとることにより、符号化と復号化でM系列と排他的論理和を2回とることとなり、元の情報ビットが復元できることは明らかである。
【００６０】
図9に、例として、様々な情報ビットパターンでの104回路の入力、および途中シーケンスの状態、更に、出力例を示す。”．．．．“の示す箇所はその右側の4ビットのパターンを周期的に繰り返されるものとする。一般に、入力情報ビットがkビットである場合、106回路で出現確率は平均化されてはいるが、すべての情報ビットが”0”,”1”に任意に変化し取りうる全状態を考える必要がある。すなわち、106で符号化および107で復号化できる以上、ｋビットの情報ビットでは、2k個の状態が存在し、２つの隣接ワード線間で2k×2k個すべての組み合わせが存在し、その出現確率は106回路によりすべての状態でほぼ平均化されている。なお、以下すべての実施例内で、誤り訂正符号発生回路102、隣接メモリセルディスターブ低減第二符号変換回路104、符号出現確率平均化第一符号化回路106、および、誤り訂正符号復号回路103、隣接メモリセルディスターブ低減第二符号逆変換回路105、第一符号復号化回路107、平均化ビットマスク発生回路110、”01010101．．．．0101”の排他的論理和をとった後の”010”カウンタ112、”10101010．．．．1010”の排他的論理和をとった後の”010”カウンタ113、”010”シンボルカウンタ108、”101”シンボルカウンタ109、カウンタ116、カウンタ117,カウンタ118,カウンタ119、情報ビットの並べ替えを行うページバッファ114、１つソース線側のデータを記憶ページバッファ115は、ハードウェア回路で実施してもよいし、計算処理時間が問題なければいわゆるソフトウェアやファームウェアやそれらの組み合わせにて実現しても勿論良い。また、以降のすべての実施例において、簡単のため情報ビット数kビットが偶数、例えば、２で割り切れる場合や、４で割り切れる場合を示している。なお、割り切れないビット数の場合は、例えば、４の倍数となるまで”1”を付加することにより情報ビットを拡大し、割り切れるように符号化する方法を用いればよい。例えば、情報ビットが5ビットの”10101”の場合、これを8ビットの”10101111”とすれば、2でも4でも割り切れる符号となることは明白である。なお、付加する符号としては、付加符号による”010”パターンの新たな発生を防ぐために、”0”よりは”1”の方が望ましい。
【００６１】
＜２．誤り訂正符号／複号動作＞  
次に、図７乃至図９を用いて、本実施例１に係るデータ記憶システムの誤り訂正符号／復号動作について説明する。図7に104の具体的シーケンスを示す。この説明では、図７または図８のシーケンスに則して説明する。
【００６２】
第２符号変換回路104では、まず、SE1において、情報ビットの中の”010”の3bit連続したシンボルの発生数を数える”010”シンボルカウンタ108と、情報ビットの中の”101”の3bit連続したシンボルの発生数を数える”101”シンボルカウンタ109とをリセットし、符号化の状態を表すフラグ1及びフラグ2をリセットする。以後、例えば、”abc”シンボルとは、情報ビットまたは符号内で、”abc”で示される連続した3bitを示すことにする。
【００６３】
ついで、SE2において、kビットの情報ビット中の”010”の連続ビットの個数をカウントし”010”シンボルカウンタ108に記憶する。また、kビットの情報ビット中の”101”の連続ビットの個数をカウントし”101”シンボルカウンタ109に記憶する。
【００６４】
例えば、”010”検出回路は、図10のように、情報ビットの初めから、情報ビットと同期したクロックでシフトレジスタに入力し、”010”検出回路を組み合わせて、カウンタで数えることにより容易に実現することができる。図10において、208のZ-1は1ビットの１単位時間遅延素子を示し、209はインバータ、210に3入力ANDゲートを示している。また、情報ビットは情報ビット入力より一連の情報ビットを順に時系列にて入力するものとする。”010”が順に入力された単位時間において、”010”最後の”0”が入力された単位時間で、”010”出力が”L”から”H”となり、他の場合には”L”となる。よって、この”010”出力を情報ビット入力の単位時間と同期させ、例えば、前記単位時間で”010”出力の論理値が安定したところでトリガしてカウントすることにより、情報ビットの”010”の数をカウントすることができる。”101”のカウントも同様に行うことができ、例えば、図10のカウンタは一般に知られるバイナリカウンタで構成すればよいので、ここではカウンタの詳細は省略する。なお、本例の208のZ-1で表記される1ビットの１単位時間遅延素子としては、例えば、D型フリップフロップやラッチ回路を用い、特に、クロック入力が"L"（ここでは便宜的に0[V]とする）から"H"(ここでは便宜的にVccとする）に立ち上がる瞬間に出力が確定し、それ以後はクロックが"H"のままでも"L"のままでも"H"から"L"へ変化しても出力は変化しないエッジトリガー(edge trigger)型のフリップフロップとすれば容易に実現できる。
【００６５】
ついで、SE3において、108の”010”カウンタの値が第一のしきい値より大きいか判断する。ここで、第一のしきい値より大きい場合、SE4にて、情報ビットと第一ビットマスクパターン”01010101....0101”（”01”をkビット分繰り返し発生させたもの）との排他的論理和をとるシーケンスを行い、情報ビットと置き換えを行い、フラグ１をセットする。この第一ビットマスクパターンは、”10”をkビット分繰り返し発生させた、”10101010....1010”を用いても良い。また、第一のしきい値は、情報ビットの中に、図9(a1)および図9(c1)の最も”010”の多い個数の(k/2)-1個の半分を考え、k個が２か４で割り切れない場合も考慮して、{(k/4)を整数に切り上げた値}-1とするのが、”010”の符号の出現数の上限を一定値に抑制するのに望ましい。
【００６６】
さらに、SE4を実施した場合には、SE5において、情報ビットの中の”010”の3bit連続したシンボルの発生数を数える”010”シンボルカウンタ108と、情報ビットの中の”101”の3bit連続したシンボルの発生数を数える”101”シンボルカウンタ109とをリセットし、符号化の状態を表すフラグ1及びフラグ2をリセットする。さらに、SE6にて、kビットの情報ビット中の”010”の連続ビットの個数をカウントし”010”シンボルカウンタ108に記憶する。また、kビットの情報ビット中の”101”の連続ビットの個数をカウントし”101”シンボルカウンタ108に記憶する。
【００６７】
ついで、SE3のNoと判断した分岐と合流後、SE7にて、”010”シンボルカウンタ108の値と、”101”シンボルカウンタ109の値より大きいか判断を行う。ここで、”010”シンボルカウンタ108の値が”101”シンボルカウンタ109の値より大きい場合には、SE8にて、kビットの情報ビットを全部ビット反転、すなわち”0”ビットを”1”ビット、”1”ビットを”0”ビットに変化させ、フラグ2をセットする。次いで、SE7のNoと判断した分岐と合流後、SE9にて情報ビットにフラグ1およびフラグ２に相当する符号を付加する。
【００６８】
（復号化回路105のシーケンス）  
ここで、図８に第二符号の復号化回路105の具体的シーケンスを示す。105では、まず、SE10において、情報ビットに付加されたフラグ1およびフラグ２に相当する情報を、例えば、レジスタや一時メモリに記憶する。ついで、SE11にて、フラグ２がセットされているか判断後、フラグ２がセットされている場合には、SE12にて、kビットの情報ビットを全部ビット反転、すなわち”0”ビットを”1”ビット、”1”ビットを”0”ビットに変化させ、情報ビットと置き換える。ついで、SE11のNoと判断した分岐と合流後、SE13にて、フラグ１がセットされているか判断する。SE13でYes、すなわちフラグ１がセットされている場合、情報ビットと第一ビットマスクパターン”01010101....0101”（”01”をkビット分繰り返し発生させたもの）との排他的論理和をとるシーケンスを行い、情報ビットと置き換えを行う。この第一ビットマスクパターンは、104の符号化の際”10”をkビット分繰り返し発生させた、”10101010....1010”を用いた場合には、同じ”1010101010....1010”マスクビットを用いれば良い。
【００６９】
ここで、比較例の図２中の（ｉｉｉ）および（ｉｖ）で示した、隣接メモリセルのしきい値電圧上昇による消去しきい値の増大する問題が生じるパターンは、当該メモリセル（α）が消去状態、BL方向に隣接するセル（β、γ）が書き込み状態となるので、ビット列としては”010”に相当する。ここで、図９(a1)から(a4)で示すように、104のシーケンスがない比較例の構成では、”01010101....0101”のｋビットの系列では、”010”が[(k/2)-1]個含まれ、この箇所分、隣接メモリセルのしきい値電圧上昇による消去しきい値の増大する問題が大きな確率で生じる。例えば、１つのメモリセルαが図２の書き込みしきい値（ｖ）との重なりが生じたり、読み出しレベルが書き込みしきい値とする判断するしきい値が超え、消去ビットが書き込みビットと誤認識され不良する確率p0とすると、p0が十分１より小さいとして、[(k/2)-1]×p0の不良が生じたりする。なお、この図９(a1)と図９(c1)が比較例で”010”が最も生じる最悪パターンである。一方、本実施例の104のシーケンスを用いることにより、図9(a1)のように”010”の個数は104に入力されるデータパターンでは、[(k/2)-1]個存在するが、SE3のシーケンスを行うことにより、SE7の前までで”010”の個数は{(k/4)を整数に切り上げた値}-1以下に抑えることができる。なぜなら、SE3の分岐で、SE4へ進んだ場合、”010”の数は{(k/4)を整数に切り上げた値}-1より多く、最悪、”010”が最も稠密に並んだ場合においても、”01010101....01010”が(k/2)+1ビット以上連続したビットで占めることになる。よって、”010”以外のパターン、特に、”000”の存在するビット数は高々(k/2)ビットより少ない。よって、情報ビットを”01010101....0101”のマスクにて排他的論理和とった場合、"000"ビットが”010”の連続ビットに反転し”010”が増える箇所は、高々{(k/4)を整数に切り上げた値}-1以下しか増加しない。
【００７０】
一方、また、”010”は”01010101....0101”とのマスクにて排他的論理和とった場合には、”010”のビットの開始位置によって、”010”か”101”のいずれかのパターンと排他的論理和をとることになる。これらは、それぞれ、”000”、”111”と変換されるため、いずれも問題となる”010”のパターンは全体として{(k/4)を整数に切り上げた値}-1以下に減少することになる。勿論、情報ビットとのマスクとして”01”が繰り返された”01010101....0101”を用いることが、最も情報ビットの”010”のパターンを減少させるのに有効である。しかしながら、例えば、ウェルコンタクトやソースシャントコンタクト部分では、ダミーメモリセルがビット線方向に隣接して、情報記憶するメモリセルと、ウェルコンタクトやソースシャントコンタクト部分の間に、例えば１つから16つ形成されることがある。例えば、このダミーセル部分の構成について本発明者は、特開2007-221084にて詳しく述べているので、ここでは省略する。この場合、ダミーメモリセルでは、情報データに応じメモリセルの書き込みまたは消去が行われないため、ダミーメモリセルに隣接する情報記憶するセル列の端は”0”でも”1”でも、比較例で述べた隣接メモリセルによるしきい値変化の問題が生じにくい特徴を有する。よって、例えば、ウェルコンタクトやソースシャントコンタクトなどメモリセルのアレイ区切りごとに適宜”01”の繰り返しである”01010101....0101”または、“10”の繰り返しである”10101010....1010”のどちらでも切り替えて用いても勿論構わないし、メモリセルの上記アレイ区切りごとに情報ビットを区切った情報ビットの部分列とし、それぞれの部分列について”010”および”101”の個数を数えて、それぞれの部分列に対応する104に示したフラグ1,2を付して、より”010”の出現する確率を減少させても勿論良い。これは後述の実施例のどの実施例に適用してもよい。上記に示したように、”010”の個数がしきい値１より多い場合、”01010101....0101”または ”10101010....1010”で排他的論理和をとることにより、情報ビット中の”010”の個数を最悪値で比較例[(k/2)-1]の約半分である、{(k/4)を整数に切り上げた値}-1以下に減少できることは、本発明者が見出した第一の特有な特徴である。以上より、図７のシーケンスによって、情報ビット中の”010”の数を比較例の最悪値の[(k/2)-1]より、{(k/4)を整数に切り上げた値}-1以下に抑えることができる。勿論、”01010101....0101”とのビットマスクにて排他的論理和とっているので、符号化後に同じビットマスクにて排他的論理和をとることにより、元の情報を復元できる。さらに、誤り訂正シンボル数をtとすると、BCH符号やRS符号の復号化には、tのほぼ２乗以上に比例する情報処理量が増加し、復号高速化の問題となる。これにに比べ、第二符号化回路104、および第二符号復号化回路105では、高々符号化および復号化では、情報ビットが長くなっても情報ビット長の１乗程度しか増加しない情報処理量しか必要とせず、tが3以上の場合、復号化より情報処理量がはるかに少ないBCH符号やRS符号の符号化に必要なLFSRのシフトの情報処理量と同程度である。よって、例えば、1000bitより長い符号長の場合でも第二符号への変換や逆変換には十分短い時間で変換することができる。
【００７１】
図9(a1),(b1),(c1),(d1),(e1)に様々な情報ビットの入力例と、右端に”010”の個数と、”101”の個数を示す。ついで、図9(a2),(b2),(c2),(d2)に104内でSE3後の状態を示す。図9(a)、図9(c)では、”010”の数がしきい値1の{(k/4)を整数に切り上げた値}-1より大きく、SE3の分岐はYesとなり、SE4にて、フラグ１をセットし、図9(a)および図9(c)では、SE3の”010”の数がしきい値1以下となり、SE3の分岐はNoとなる。ついで、図9(a3),(b3),(c3),(d3)に104にて、SE9前の状態を示す。
【００７２】
ここで、比較例の図２の（ｉｉｉ）および（ｉｖ）で示した、隣接メモリセルのしきい値電圧上昇による消去しきい値の増大する問題が生じるパターンは、当該メモリセル（α）が消去状態、BL方向に隣接するセル（β、γ）が書き込み状態となるので、ビット列としては”010”に相当し、ビット反転した”101”では、前記比較例の問題は生じない。また、問題となる”010”となるビット列は、”101”をビット反転したものであり、SE7で”010”の個数と”101”の個数とを比較することにより、この2種類のパターンの入れ替えのみで効果的に”010”の出現個数を減らすことができる。ここで、図9(d1)から(d4)で、SE8でフラグ2がセットされる例を示す。図9(d1)で示すように、”0100”を繰り返す情報ビットのパターンでは、(k/4)個の”010”の個数と、0個の”101”の個数が存在する。よって、SE3にてNo側の分岐をした後、SE7にて、”010”の個数をカウントした108のカウンタが”101”の個数のカウントをした109のカウンタよりも多いか判断し、Yesの分岐に進む。ついで、SE8にて全ビット反転を行うことにより、0個の”010”の個数と、(k/4)個の”101”の個数になるので、結局、”010”の個数を減らすことができる。勿論、あらかじめ、SE7にて”010”の個数をカウントした108のカウンタが”101”の個数のカウントをした109のカウンタよりも多いか判定しており、Noの場合にはビット反転を行わないので、この場合には、”010”の個数が増加することはない。
【００７３】
以上のように、本実施例１の104のSE7およびSE8のシーケンスを用いることにより、SE7前で既に情報ビット中の”010”の数を{(k/4)を整数に切り上げた値}-1以下に抑えているので、SE8の前までで”010”の個数は{(k/4)を整数に切り上げた値}-1以下で、かつ、より”010”の生じる情報ビットを効果的により”010”が生じないビットに変換することができる。
【００７４】
なぜなら、SE3からSE6までのシーケンスで、各情報ビットはマスクパターンとの排他的論理和をとっているのみなので、既に106回路にて、各情報ビットの”0”が出る確率と”1”が出る確率がほぼ等しく平均化された場合、104に入力された情報ビット各情報ビットの”0”が出る確率と”1”が出る確率は等しい。よって、SE7の分岐で、情報ビットの2のｋべき乗のすべての組み合わせを考える場合、カウンタ108がカウンタ109より大きくなる確率は、カウンタ108がカウンタ109より小さくなる確率と同じとなる。よって、SE7およびSE8を行うことによりカウンタ108がカウンタ109と一致する情報ビット列、例えば、”01010111111111111....1111”のような場合を除いた、残りの半分の場合の”010”の生じる確率を低減し、より少ない”010”の生じる情報ビットを効果的に実現できる。
【００７５】
なお、フラグ1およびフラグ2を情報ビットに付加する方法として、各フラグを2ビットの連続するデータとして情報ビットに付加する方法を示した。この方法は、フラグ１，２がどの状態でも”010”の状態が生じないように選択しているが、勿論、これ以外の符号化、例えば、フラグ１を同一2ビット割り当て、フラグ２を1ビットに割り当てる方法でも良い。これは、図９にて、フラグ１，２に対応するビットがaabb（a,bはそれぞれフラグ1,2に相当する”0”,”1”の状態）となっているが、bbaa、aabやbbaなど順番を入れ替えたものをフラグに対応するビットとして付加してもよい。勿論、このフラグに相当するビットは、情報ビットの前後に付加するのではなく、例えば、情報ビットを２つに分け、bbaaのようにして情報ビットの中に埋め込んでもよい。勿論情報ビットを３つに分け、bb,aaをそれぞれ３つの情報ビットの間に入るように埋め込んでもよい。
【００７６】
また、誤り訂正符号化した後に、検査ビット（パリティ）ビットを数個に分割し、aa、bbのように2個以上の同じビットからなるフラグを検査ビットで挟むように並べ替え（インタリーブ）してもよい。このようにすれば、2個以上の同じビットからなるフラグに接するビットは”010”パターンになり得ないため、より、検査ビット部分の”010”パターンの生じる可能性を減少できる。
【００７７】
また、図9(e1)-(e4)に本実施例で”010”が生じる最悪パターン例を示す。図9(e1)に示すように、(k/2)ビットを”10”ビット繰り返したものとし、(k/2)ビットを”00”と繰り返したものとした場合、”010”パターンの個数は(k/4)-1個、”101”パターンの個数も(k/4)-1個となる。よって、この場合、図７のシーケンスでは、フラグ１はリセット、フラグ２もリセットのままではあるが、SE4、SE8、およびSE4とSE8の両方のシーケンスを仮に行った場合を図９(e2)、(e3)、(e4)で示す。この場合、いずれも、”010”パターンの個数は（k/4）個か(k/4)-1個、”101”パターンの個数も(k/4)個か(k/4)-1個となり、これより、仮にSE4またはSE8を行った場合でも、”010”パターンの選択個数は(k/4)-1となり、これがkビットの情報ビット”010”パターンの最悪パターンの1例となる。なお、この最悪パターンは、実施例3で述べる方法で、さらに改善できる。
【００７８】
尚、本実施例１は、後述する実施例２，３に比べ、カウンタ112,113の追加が必要なく、より回路規模を減少させ、小さな面積の回路で構成できる利点を有する。
【００７９】
＜３．この実施例に係る効果＞  
この実施例に係るデータ記憶システムによれば、少なくとも下記（１）乃至（２）の効果が得られる。
【００８０】
（１）例えば、”010”など符号の特定の連パターンに対して、より特徴を捉えた、誤り訂正に有利である。
【００８１】
上記のように、本実施例では、kビットの情報ビットに対して、高々3ビットから4ビット、情報としては高々2bitを付加するだけで、効果的に”010”の出現する最悪状態数を[(k/2)-1]から{(k/4)を整数に切り上げた値}-1以下、つまり約半分以下に抑制できる。
【００８２】
例えば、図２９中の矢印Ｙ１に示すように、”010”のシンボル数が100個程度の場合に、比較例と比べ、”010”の出現する最悪状態数を半分以下に抑制することができる。
【００８３】
さらに、第二符号変換回路104に入る情報ビット中の”010”出現数よりも、必ず、第二符号変換回路104の出力の情報ビット中の”010”の出現個数を等しいか減少させることができる。よって、ｋビットの情報ビットが2kの状態のどのような状態を取ろうとも、最悪パターンで誤書き込みやBL方向の隣接メモリセルの容量結合によるしきい値上昇を抑制できる。なお、フラグビットの追加に対する符号長の増加量の、情報ビット長kに対する相対増加量が、4/kに上限が抑えられるため、この方法は情報ビットが例えば4ビット以上に十分長くなる場合に、特に”010”の出現する最悪状態数を抑制する効果が大きく、かつ、情報ビット数kが増大してもその符号化および復号化は高々kビットに比例する程度しか増大しないので、高速に符号化および復号化できる。よって、隣接メモリセルの容量結合による書き込みしきい値増大を防止することができ、電荷保持時のトンネル絶縁膜の電界を減少させ、トンネル絶縁膜を通じたリーク電流を抑制し、データ保持特性を悪化する問題を緩和する問題を防止することができる。また、書き込みしきい値の増大を防止できるため、電荷蓄積層と制御電極との間の、いわゆるインターポリ絶縁膜の書き込み時や電荷保持時の電界を抑制できるため、リーク電流を抑制し絶縁破壊を防ぎ、データ保持特性およびメモリセルの信頼性を維持できる。また最悪パターンで誤書き込みやBL方向の隣接メモリセルの容量結合によるしきい値上昇を抑制できるので、消去しきい値と、隣接する書き込みしきい値との間のしきい値分離余裕を確保できる。および、例えば、図2の書き込みしきい値１および書き込みしきい値２の間や、書き込みしきい値２と書き込みしきい値３の間のしきい値分離余裕も確保できる。消去しきい値の分布が、隣接メモリセル間の容量結合や誤書き込みによって高い側に変動するビット数を抑制でき、書き込みしきい値の保持後の特性でしきい値低下が生じ、図２の（ｉｖ）と（ｖ）のように、しきい値分布の重なりが生じると、書き込みビットを消去ビットと誤検出や誤訂正したり、消去ビットを書き込みビットと誤検出や誤訂正する誤りビットの問題が生じるが、この問題を抑制できる。
【００８４】
また、消去しきい値下限と書き込みしきい値上限がインターポリ絶縁膜やトンネル絶縁膜の信頼性によって、上下限範囲が決まっており、書き込みしきい値分布を狭くするには、書き込みプログラム電圧ステップを狭くする必要があるが、本実施例を用いることにより、しきい値分布を広く確保でき、より書き込みステップを広げることができ、より、書き込みスピードを向上できる。
【００８５】
（２）高速動作に対して有利である。
【００８６】
本実施例１では誤り訂正符号として、BCH符号やRS符号を用いているが、これら符号は復号化の際に検査符号まで含んだ全符号列を読み込んで誤り符号とその発生箇所を計算して誤り訂正を行う。そのため、符号の最初部分の訂正を行ってから出力する必要から、符号訂正回路103に1符号長分、すなわち、不揮発性半導体装置7に一度に記憶する1ページ分のバッファを有しているか接続されている。このページバッファは高速で修正したデータを読み出し出力する必要から、SRAMやシフトレジスタなどの高速読み出し可能な揮発性のメモリで形成される。よって、本実施例の第二の符号化のシーケンスSE4,SE6,SE8、および復号化シーケンスSE12,SE14は前記ページレジスタ上にコピーされた情報ビットに対して行うことができるため、新たにページレジスタ回路面積を必要とせず、高速で実現することができる。
【００８７】
また、誤り訂正符号として、BCH符号やRS符号でなくとも、情報ビットと検査ビットが分離して、符号語の中に情報ビットが含まれている、いわゆる分離符号を用いれば本第二符号化の特徴は保たれる。なぜなら、本実施例は情報ビット中の”010”の最大個数を減少させる効果があり、このことは、分離符号であれば符号語においても保持される特徴であるからである。よって、例えば、BCH符号やRS符号の替わりに多数決符号、つまり、多数決論理で復号可能な巡回符号で、完全差集合上の符号を用いても勿論良い。または、いわゆる、Low-Density-parity-check（LDPC）符号の中でも、情報ビットと検査ビットが分離され符号語の中に情報ビットが含まれている分離符号であれば、本実施例を用いることができる。
【００８８】
［実施例２（カウンタ回路112,113を備える一例）］  
次に、実施例２に係るデータ記憶システムについて、図１１乃至図１４を用いて説明する。図１１に本発明の実施例２のブロック図を示す。
【００８９】
本実施例は、実施例1とほぼ同一であるが、予め”01010101．．．．0101”ビットマスクと情報ビットとの排他的論理和を取り、その結果の”010”のパターン数を数えて定量比較判断し、符号ビットの”010”の個数をより確実に減らすようにしている点が、実施例1と異なっている。なお、実施例1と同一の部分や同一の動作部分には、同一符号をつけて詳しい説明は省略する。
【００９０】
さらに、実施例１と実施例２の構成上の差異は、図１１と図４を比較すれば明らかなように、k-bitの情報ビットと”01010101．．．．0101”、すなわち”01”をkビット繰り返したものとの排他的論理和を取ったビット列中の”010”の3bit連続したシンボルの発生数を数えるシンボルカウンタ112を有していることである。さらに、k-bitの情報ビットと”10101010．．．1010”、すなわち”10”をkビット繰り返したものとの排他的論理和を取ったビット列中の”010”の3bit連続したシンボルの発生数を数えるシンボルカウンタ113を有していることである。これらにより、実施例１のSE4およびSE8の符号変換を行った4通りの場合に対して、予め各変換後の情報ビット中の”010”の数を数えておき、定量比較することにより、前述のように問題となる”010”の3bit連続したシンボルの出現確率をより減少させている。
【００９１】
＜第２符号変換回路104の誤り訂正符号のシーケンス＞  
図12に実施例２の104の具体的シーケンスを示す。  
104では、まず、SE15において、情報ビットの中の”010”の3bit連続したシンボルの発生数を数える”010”シンボルカウンタ108と、情報ビットの中の”101”の3bit連続したシンボルの発生数を数える”101”シンボルカウンタ109、シンボルカウンタ112および113とをリセットし、符号化の状態を表すフラグ1及びフラグ2をリセットする。
【００９２】
ついで、SE16において、kビットの情報ビット中の”010”の連続ビットの個数をカウントし”010”シンボルカウンタ108に記憶する。
【００９３】
また、kビットの情報ビット中の”101”の連続ビットの個数をカウントし”101”シンボルカウンタ109に記憶する。さらに、kビットの情報ビットと、”01010101．．．．0101”、すなわち”01”をkビット繰り返したものとの排他的論理和を取ったビット列中の”010”の3bit連続したシンボル数をカウントし、シンボルカウンタ112に記憶する。また、kビットの情報ビットと、”10101010．．．．1010”、すなわち”10”をkビット繰り返したものとの排他的論理和を取ったビット列中の”010”の3bit連続したシンボル数をカウントし、シンボルカウンタ113に記憶する。
【００９４】
＜カウンタ112,113の構成例＞  
例えば、本例に係るカウンタ112およびカウンタ113の構成例は、図13のように示される。図示するように、カウンタ112およびカウンタ113は、情報ビットの初めから、シフトレジスタに入力し、”000”検出回路と"111”検出回路を組み合わせて、カウンタで数えることにより実現することができる。図13において212は2入力AND回路を、214は2入力OR回路を示している。図13の上記２つのカウンタ108,109に接続された回路は、図10で述べた回路と同じなので、ここでは省略する。情報ビットは情報ビット入力より一連の情報ビットを順に時系列にて入力するものとする。図13で、カウンタ112に接続された”000”出力と記した回路では、”000”が順に入力された単位時間において、”000”出力が”L”から”H”となり、他の場合には”L”となる。この”000”は、”010”の3bit連続の情報ビットと、”01010101．．．．0101”ビットマスク中の”010”マスクで排他的論理和をとった場合に相当する。また、カウンタ112に接続された”111”出力と記した回路では、”111”が順に入力された単位時間において、”111”出力が”L”から”H”となり、他の場合には”L”となる。この”111”は、”010”の3bit連続の情報ビットと、”01010101．．．．0101”ビットマスク中の”101”マスクで排他的論理和をとった場合に相当する。ここで、情報ビットを与えるクロックを1/2分周器213で分周すると、その出力は、例えば、情報ビットのｘビット目として、xビットの偶数奇数にて”1”、”0”がそれぞれ出力される。よって、シンボルカウンタ112に電気的に接続された入力は、例えば、（”000”出力の論理が“H”で、かつ、ｘビット目が奇数の場合）と、（”111”出力の論理が”H”で、かつ、ｘビット目が偶数の場合）との論理和となり、これは、情報ビットと、”01010101．．．．0101”との排他的論理和を取ったビット列中の”010”の3bit連続したシンボルが存在する場合に3連続シンボルの最後のシンボルが入力した単位時間で”H”、そのほかの場合に“L”となる。一方、シンボルカウンタ113に電気的に接続された入力は、例えば、（”111”出力の論理が“H”で、かつ、ｘビット目が奇数の場合）と、（”000”出力の論理が”H”で、かつ、ｘビット目が偶数の場合）との論理和となる。これは、情報ビットと、”10101010．．．．1010”との排他的論理和を取ったビット列中の”010”の3bit連続したシンボルが存在する場合に3連続シンボルの最後のシンボルが入力した単位時間で”H”、そのほかの場合に“L”となる。よって、これら2入力OR回路214の出力を情報ビット入力の単位時間と同期させ、例えば、前記単位時間でOR出力の論理値が安定したところでトリガしてカウントすることにより、”01010101．．．．0101”、すなわち”01”をkビット繰り返したビット列との排他的論理和を取ったビット列中の”010”の3bit連続したシンボル数をシンボルカウンタ112でカウントでき、また、kビットの情報ビットと、”10101010．．．．1010”、すなわち”10”をkビット繰り返したビット列との排他的論理和を取ったビット列中の”010”の3bit連続したシンボル数をシンボルカウンタ113でカウントできる。例えば、図13のカウンタは一般に知られるバイナリカウンタで構成すればよいので、ここではカウンタの詳細は省略する。
【００９５】
ついで、SE17において、108カウンタと109カウンタとの最小値が、112カウンタと113カウンタとの最小値より大きいか判断する。
【００９６】
ここで、SE17にてYesの場合、SE18にて、情報ビットと第一ビットマスクパターン”01010101....0101”（”01”をkビット分繰り返し発生させたもの）との排他的論理和をとるシーケンスを行い、情報ビットと置き換えを行い、フラグ１をセットする。
【００９７】
ついで、SE19にて、シンボルカウンタ112の値と、シンボルカウンタ113の値より大きいか判断を行う。
【００９８】
ここで、シンボルカウンタ112の値がシンボルカウンタ113の値より大きい場合には、SE20にて、kビットの情報ビットを全部ビット反転、すなわち”0”ビットを”1”ビット、”1”ビットを”0”ビットに変化させ、フラグ2をセットする。
【００９９】
次いで、SE23にて情報ビットにフラグ1およびフラグ２に相当する符号を付加する。
【０１００】
一方、SE17のNoと判断した場合には、SE21にて、”010”シンボルカウンタ108の値と、”101”シンボルカウンタ109の値より大きいか判断を行う。
【０１０１】
ここで、”010”シンボルカウンタ108の値が”101”シンボルカウンタ109の値より大きい場合には、SE22にて、kビットの情報ビットを全部ビット反転、すなわち”0”ビットを”1”ビット、”1”ビットを”0”ビットに変化させ、フラグ2をセットする。
【０１０２】
次いで、SE23にて情報ビットにフラグ1およびフラグ2に相当する符号を付加する。
【０１０３】
以上のシーケンスを経ることにより、実施例１のSE4およびSE8の符号変換を行った4通りの場合に対して、予め各変換後の情報ビット中の”010”の数を数えておき、定量比較することにより、前述のように問題となる”010”の3bit連続したシンボルの出現確率をより減少させている。尚、本実施例の第二符号の復号化は実施例１で述べた方法を用いればよいのでここでは省略する。
【０１０４】
ここで、比較例の図２中の（ｉｉｉ）および（ｉｖ）で示した、隣接メモリセルのしきい値電圧上昇による消去しきい値の増大する問題が生じるパターンは、当該メモリセル（α）が消去状態、BL方向に隣接するセル（β、γ）が書き込み状態となるので、ビット列としては”010”に相当する。ここで、図9(a1)から(a4)で示すように、104のシーケンスがない比較例の構成では、”01010101....0101”のｋビットの系列では、”010”が[(k/2)-1]個含まれ、この箇所分、隣接メモリセルのしきい値電圧上昇による消去しきい値の増大する問題が大きな確率で生じる。例えば、１つのメモリセルαが図２の書き込みしきい値（ｖ）との重なりが生じたり、読み出しレベルが書き込みしきい値とする判断するしきい値が超え、消去ビットが書き込みビットと誤認識され不良する確率p0とすると、p0が十分１より小さいとして、[(k/2)-1]×p0の不良が生じる。
【０１０５】
ここで、実施例１よりも実施例２において、より”010”の3ビット列が生じる確率を小さく出来る例を図14(a)に示す。
【０１０６】
図14(a)のように、実施例2の104に入力されるデータパターンでは、”010”の連続する3ビットシンボルが生じる個数はカウンタ108に記憶され(k/4)-1個、”101”の連続する3ビットシンボルが生じる個数はカウンタ109に記憶され(k/4)-1個、”01010101．．．．0101”、すなわち”01”をkビット繰り返したものとの排他的論理和を取ったビット列中の”010”の3bit連続したシンボル数はカウンタ112に記憶され0個、”10101010．．．．1010”、すなわち”10”をkビット繰り返したビット列との排他的論理和を取ったビット列中の”010”の3bit連続したシンボル数はカウンタ113に記憶され1個となる。よって、実施例１の104のシーケンスでは、104出力で"010”の生じるシンボルの個数は(k/4)-1個のままであるが、本実施例の104のシーケンスを用いることにより、104出力で”010”の生じるシンボルの個数を0個に減少させることができる。勿論、実施例１の（１）、及び（２）の効果は本実施例でも得ることができる。
【０１０７】
また、勿論、本実施例の各カウンタの比較では、実施例１と同じマスクビットとビット反転パターンの4通りの場合について、SE3の比較よりも、より”010”の3連続シンボルの出現個数を正確に比較したものなので、例えば、図9(a)や図9(c)のように、比較例の”010”が最悪[(k/2)-1]個生じる場合でも、同じく{(k/4)を整数に切り上げた値}-1以下に抑制できることは明白である。例えば、１つのメモリセルαが図２の書き込みしきい値（ｖ）との重なりが生じたり、読み出しレベルが書き込みしきい値とする判断するしきい値が超え、消去ビットが書き込みビットと誤認識され不良する確率p0とすると、p0が十分１より小さいとして、比較例の[(k/2)-1]×p0の不良が生じる確率を、[{(k/4)を整数に切り上げた値}-1]×p0まで低下させることができる。この実施例２の場合の”010”の3連続シンボルの出現個数が最も増加する最悪パターンの1例は、図9(e)のようなビット列となる。
【０１０８】
［実施例３（ページバッファ114を更に備える一例）］  
次に、実施例３に係るデータ記憶システムについて、図１５乃至図１９を用いて説明する。まず、本発明の実施例３の全体構成例を図15に示す。
【０１０９】
この実施例３によれば、上記実施例２の実施に加えて、さらに、”010”の3bitの連続シンボルの出現個数を減らすことができる。実施例1や実施例2と同一の部分や同一の動作部分には、同一符号をつけて詳しい説明は省略する。以下、説明や図では、情報ビットのkビット中を時系列で入出力をする場合を想定し、時系列の最初から数えて偶数番目のビットを偶数ビット、奇数番目のビットを奇数ビットと簡略表現する。
【０１１０】
実施例２と実施例３の構成上の差異は、図11と図15を比較すれば明らかなように、情報ビットの偶数ビットと奇数ビットとの並べ替えを行うページバッファ114をさらに有していることである。本実施例では実施例2で第2符号化に加え、ページバッファ114を用いて、さらに、情報ビットを1番目、3番目、5番目、．．．．、(k-1)番目の奇数番目のビットと2番目、4番目、6番目、．．．．、k番目の偶数番目のビットとに分け、奇数番目の情報ビットを順に誤り訂正符号回路102に出力した後に、偶数番目の情報ビットを順に並べ替えて誤り訂正符号回路102に出力し、復号時には第二符号復号化回路105にて逆に並べ替えることにより、より”010”の3ビットの連続シンボルを減らすものである。なお、本実施例では、その特徴上、情報ビットの総数のkビットを偶数であるものと前提するが、通常のNAND入出力、図15の第一の内部I/O線でのデータ伝達は1バイト(=8ビット)ｘ整数倍の単位のデータ入出力が行われるので実用上問題はなく、奇数ビット場合は実施例1内でのべた方法で拡張符号を形成すればよい。
【０１１１】
情報ビットの上述の並べ替えを行うページバッファ114は、例えば、隣接メモリセルのディスターブを低減する第二符号変換回路104に接続され、また、隣接メモリセルのディスターブを低減する第二符号逆変換回路105に接続される。また、このページバッファ114は少なくとも情報ビット数と同じk-bitのページバッファからなり、例えば、誤り訂正復号回路103で用いられるn-bitのシフトレジスタのフリップフロップを共通で用い、回路規模を縮小することができる。勿論、回路規模を縮小する必要がない場合は、誤り訂正復号回路103で用いられるn-bitのシフトレジスタと別に形成してもよい。
【０１１２】
＜ページバッファ114の具体的な回路例＞  
図16(a)、および図16(b)は本実施例のページバッファ114の具体的な回路例である。図をわかりやすくするために、図16(a)では、情報ビットを1番目、3番目、5番目、．．．．、(k-1)番目の奇数番目のビットと2番目、4番目、6番目、．．．．、k番目の偶数番目のビットとに分離して誤り訂正符号回路102に出力する回路部分は省略し、この部分は図16(b)にて示している。
【０１１３】
なお、図16(a)のQ2,Q3となるトランジスタと配線を図16(b)の相当部分に適用することにより、全体の回路構成となるようにしている。なお、Q1からQ8としては、NMOSトランジスタを例としているが、勿論、入力を反転すればPMOSトランジスタでもよいし、後述の双方向性スイッチを用いても勿論よい。
【０１１４】
図16(a)では、誤り訂正復号回路103で用いられるn-bitのシフトレジスタの一部を想定し、k-bitのD型フリップフロップ208a,208bを、Q1を介して直列接続することにより情報ビット数と等しいk-bitシフトレジスタを形成している。ここで、208a,208bとしてはD型フリップフロップを用いたが、勿論ラッチ回路や、他のフリップフロップ回路で回路を形成してもよい。ここでは、D型フリップフロップとして、△印のクロック入力のパルス立ち上がり時に、クロック入力が"L"（ここでは便宜的に0[V]とする）から"H"(ここでは便宜的にVccとする）に立ち上がる瞬間に、Q出力がD入力に入ったデータで確定し、それ以後はクロックが"H"のままでも"L"のままでも"H"から"L"へ変化しても出力は変化しないエッジトリガー(edge trigger)型のフリップフロップとする。Q1のゲート電極は、Slと書いた入力に共通接続されている。Slを例えば0VからVccとし、遮断状態から導通状態にすることにより、iを1から(k-1)の整数として、直列接続された(i+1)ビット目の208aまたは208bの出力と、iビット目の208aまたは208b入力が接続されるようになっている。すなわち全体としてkビットのシフトレジスタとして動作するようになっている。なお、ここでは、シフトレジスタとしての動作を鑑み、先に入力してシフトするビットの添え字を小さい方に割り当てることとし、先のフリップフロップからFF1,FF2, ．．．．FF(k/2)、FF(k/2+1)、．．．．FF(k)と順に図16(a)及び図16(b)では記載する。なお、図16(b)ではFF1,FF2,．．．．FF(k/2)までとFF(k/2+1)、．．．．FF(k)とで折り返して表示しているが、図16(a)と同じフリップフロップの接続回路となっている。
【０１１５】
また、215のNMOS,216のPMOS、およびインバータ209によって、双方向性スイッチが形成されている。双方向性スイッチは、データ出力制御入力１または２が"H"の場合に、215と216の電流端子が導通状態となり、"L"の場合に遮断状態となる回路で、しきい値低下なくNMOS 215やPMOS 216の電流端子間で電圧を転送することができる特徴を有するが、例えば、しきい値による出力低下が問題ない場合には、NMOSトランジスタにて代用してもよい。ここで、Q5および双方向性スイッチ、およびビットマスク列入力との排他的論理和をとる素子217により、FF1の出力は、FF(k)の入力にフィードバックされる、いわゆる線形フィードバックシフトレジスタ（Linear Feedback Shift Resistor:LFSR）となっている。よって、このk段のシフトレジスタによって、情報ビットのkビットをFirst-In-First-Out（FIFO）で、かつ、情報をFF1,FF2、．．．．、FF(k)に保持されている情報を順にクロック入力に応じて出力することができる。図17(a)にその回路の動作を示す。まず、kビットの1連のシフトレジスタとして動作させるために、読み出しおよび記憶時に、slをVcc("H")、/sl、p1およびビットマスク列入力を0V("L")にする。
【０１１６】
D型フリップフロップにデータを記憶する場合には、まず、データ出力制御入力1,2を共に"L"とし、フリップフロップ208の出力がデータ入出力線に出力されないようにする。さらに、データ入出力(I/O)線にVcc("H")か0V("L")の第一ビットのディジタルデータを与えた後、クロック入力1,2を共に"L"から"H"にする。これにより、第一ビットのディジタルデータが図16(a)の最も左側のフリップフロップFF(k)に保持される。ついで、データ入出力(I/O)線にVcc("H")か0V("L")の第二のディジタルデータを与えた後、クロック入力φ1,φ2を共に"L"から"H"にする。これにより、第一ビットのディジタルデータが図16(a)の左から2番めのフリップフロップFF(k-1)に転送および保持され、最も左側のフリップフロップFF(k)に第二のディジタルデータが保持される。後は、順次k[bit]までデータ入出力(I/O)線にディジタルデータを与え、クロックを与えることにより、図16(a)の右のフリップフロップから順にディジタルデータが保持され、k[Bit]のデータを保持することができる。
【０１１７】
次に104からデータを読み出す際には、まず、データ出力制御入力1を"H"とし、データ出力制御入力2とビットマスク列入力を"L"とし、最も右側のフリップフロップFF1の出力をデータ入出力線に出力する。これによりデータ入出力線には第一ビットのディジタルデータのデータと同じデータが出力される。さらに、クロック入力φ1,φ2を共に"L"から"H"にする。これにより、左から右のフリップフロップに1ビットデータが転送および保持される。その結果、データ入出力線には第一ビットのディジタルデータのデータと同じデータが出力される。後は、全部で(k-1)回クロック入力φ1,φ2を共に"L"から"H"にすることにより、データ入出力(I/O)線に図16(a)の右のフリップフロップから順にデータが出力され、k[Bit]のデータを出力することができる。以上により、図16(a)の回路でk[bit]のデータをシーケンシャルに記憶し、記憶した順序で取り出せることは明らかである。
【０１１８】
一方、図16(a)において、Q2およびQ3のゲート電極は、/Slと書いた入力に共通接続されている。Q3のゲート入力の/Slを例えば0VからVccとし、遮断状態から導通状態にすることにより、Q3と記されたトランジスタによって、前記kビットのシフトレジスタの奇数番目のビットのD型フリップフロップ208bが電気的に直列接続され、(k/2)個のシフトレジスタが形成できるようになっている。具体的には、Q3を介して、例えば、iを１から（k/2）-1までの整数として、(2i+1)番目のビットの208b出力が(2i-1)番目のビットの208b入力に接続されている。さらに、Q2のゲート入力の/Slを例えば0VからVccとし、遮断状態から導通状態にすることにより、Q2と記されたトランジスタを介して、前記kビットのシフトレジスタの偶数番目のビットのD型フリップフロップ208aが電気的に直列接続され、(k/2)個のシフトレジスタが形成できるようになっている。具体的には、例えば、iを1から（k/2）-1までの整数として、(2i+2)番目のビットの208a出力が(2i)番目のビットの208a入力に接続されている。
【０１１９】
ここで、双方向性スイッチ、およびビットマスク列入力との排他的論理和をとる素子217により、FF1の出力は、FF(k-1)の入力にフィードバックされる、いわゆる線形フィードバックシフトレジスタ（Linear Feedback Shift Resistor:LFSR）となっている。さらに、Q4により、/SlがVcc（”H”）の場合に、FF（k-1）の入力はデータ入出力(I/O)と接続されるようになっている。よって、この(k/2)段のシフトレジスタによって、情報ビットの奇数ビットである（k/2）ビットをFirst-In-First-Out（FIFO）で、かつ、情報をFF1,FF3、FF5,．．．．、FF(k-1)に保持されている情報を順にクロック入力φ２に応じて出力することができる。
【０１２０】
また、Q6および双方向性スイッチ、および217のビットマスク列入力との排他的論理和をとる素子217により、FF2の出力は、FF（k）の入力にフィードバックされる、いわゆる線形フィードバックシフトレジスタ（Linear Feedback Shift Resistor:LFSR）となっている。よって、この(k/2)段のシフトレジスタによって、情報ビットの偶数ビットである（k/2）ビットをFirst-In-First-Out（FIFO）で、かつ、情報をFF2,FF4、FF6,．．．．、FF(k)に保持されている情報を順にクロック入力φ１に応じて出力することができる。これらは偶数ビットと奇数ビットでビットが混合することなく独立に情報の読み出し及び記憶が可能である。
【０１２１】
図17(b)、17(c)にその回路の読み出しおよび記憶動作を示す。まず、（k/2）ビットの1連のシフトレジスタとして動作させるために、読み出しおよび記憶時には、/slをVcc("H")、sl、p1、およびビットマスク列入力を0V("L")とする。
【０１２２】
ここで、図17(c)の書き込みから説明する。奇数ビットのデータをD型フリップフロップに記憶する場合には、まず、データ出力制御入力1,2を"L"とし、フリップフロップ208の出力がデータ入出力線に出力されないようにする。さらに、データ入出力(I/O)線にVcc("H")か0V("L")の第一ビットのディジタルデータを与えた後、クロック入力φ2を"L"から"H"にする。これにより、第一ビットのディジタルデータ（1ビット目に相当）が図16(a)の左側から2番目のフリップフロップFF(k-1)に保持される。ついで、データ入出力(I/O)線にVcc("H")か0V("L")の第二のディジタルデータ（1つ飛ばした3ビット目に相当）を与えた後、クロック入力φ2を"L"から"H"にする。これにより、第一ビットのディジタルデータが図16(a)の左から4番めのフリップフロップFF(k-3)に転送および保持され、左から2番目のフリップフロップFF(k-1)に第二のディジタルデータが保持される。後は、順次（k-1）[bit]までデータ入出力(I/O)線にディジタルデータを与え、クロックを与えることにより、図16(a)のフリップフロップで１つ飛ばしに順にディジタルデータが保持され、奇数ビットの全データ(k/2)ビット分のデータを保持することができる。
【０１２３】
また、偶数ビットのデータをD型フリップフロップにデータを記憶する場合には、まず、データ出力制御入力1,2を"L"とし、フリップフロップ208の出力がデータ入出力線に出力されないようにする。さらに、データ入出力(I/O)線にVcc("H")か0V("L")の第一ビットのディジタルデータを与えた後、クロック入力φ1を"L"から"H"にする。これにより、第一ビットのディジタルデータ（2ビット目に相当）が図16(a)の左側から1番目のフリップフロップFF(k)に保持される。ついで、データ入出力(I/O)線にVcc("H")か0V("L")の第二のディジタルデータ（1つ飛ばした4ビット目に相当）を与えた後、クロック入力φ1を"L"から"H"にする。これにより、第一ビットのディジタルデータが図16(a)の左から3番めのフリップフロップFF(k-2)に転送および保持され、最も左側のフリップフロップFF(k)に第二のディジタルデータが保持される。後は、順次k[bit]までデータ入出力(I/O)線にディジタルデータを与え、クロックを与えることにより、図16(a)のフリップフロップで１つ飛ばしに順にディジタルデータが保持され、偶数ビットの全データ(k/2)ビット分のデータを保持することができる。
【０１２４】
次に、図17(b)の読み出しを説明する。104から奇数ビットのデータを読み出す際には、まず、データ出力制御入力2を"H"とし、データ出力制御入力1を"L"とし、最も右側のフリップフロップFF1の出力をデータ入出力線に出力する。これによりデータ入出力線には、奇数ビットの第一ビットのディジタルデータと同じデータが出力される。さらに、クロック入力φ2を"L"から"H"にする。これにより、FF3の出力がFF1に転送および保持され、奇数ビットのデータが順に左から右のフリップフロップに転送および保持される。その結果、データ入出力線には奇数ビットの第二ビットのディジタルデータ（第3ビットに相当）と同じデータが出力される。後は、全部で(k/2-1)回クロック入力φ2を"L"から"H"にすることにより、データ入出力(I/O)線に図16(a)の右のフリップフロップで１つ飛ばしに順にデータが出力され、奇数ビットの全データ(k/2)ビット分のデータを1ビット目、3ビット目、5ビット目、．．．．(k-1)ビット目と出力することができる。この際、クロック入力φ1は変化させないので、偶数ビットのデータは変化せず保持される。
【０１２５】
一方、104から偶数ビットのデータを読み出す際には、まず、データ出力制御入力1を"H"とし、データ出力制御入力2を"L"とし、右側の2番目のフリップフロップFF2の出力をデータ入出力線に出力する。これによりデータ入出力線には、偶数ビットの第一ビットのディジタルデータと同じデータが出力される。さらに、クロック入力φ1を"L"から"H"にする。これにより、FF4の出力がFF2に転送および保持され、偶数ビットのデータが順に左から右のフリップフロップに転送および保持される。その結果、データ入出力線には偶数ビットの第二ビットのディジタルデータ（第4ビットに相当）のデータと同じデータが出力される。後は、全部で(k/2-1)回クロック入力φ1を"L"から"H"にすることにより、データ入出力(I/O)線に図16(a)の右のフリップフロップで１つ飛ばしに順にデータが出力され、偶数ビットの全データ(k/2)ビット分のデータを2ビット目、4ビット目、6ビット目、．．．．(k)ビット目と出力することができる。この際、クロック入力φ2は変化させないので、奇数ビットのデータは変化せず保持される。
【０１２６】
さらに、図17(d)左側に、フリップフロップ(208b)に保持されている奇数ビットデータ列と、例えば、”01010101．．．．0101”のビットマスクとの排他的論理和を取り、排他的論理和を取ったデータを出力しつつフリップフロップ(208b)に再記憶する方法を示す。この場合は、ビットマスク列入力にビットマスクとなる”01010101．．．．0101”入力パルスをクロック入力と同期して与える。
【０１２７】
まず、データ出力制御入力2を"H"とし、データ出力制御入力1を"L"とし、最も右側のフリップフロップFF1の出力を排他的論理和素子217でビットマスク列入力の最初のビット”0”との排他的論理和でデータ入出力線に出力する。これによりデータ入出力線には、奇数ビットの第一ビットのディジタルデータと同じデータが出力される。さらに、クロック入力φ2を"L"から"H"にする。これにより、FF3の出力がFF1に転送および保持され、奇数ビットのデータが順に左から右のフリップフロップに転送および保持される。その結果、排他的論理和素子217でビットマスク列入力の2番目のビット”1”との排他的論理和をとりデータ入出力線に出力する。よって、この場合には、データ入出力線には奇数ビットの第二ビットのディジタルデータ（第3ビットに相当）の反転データが出力される。後は、全部で(k/2-1)回クロック入力φ2を"L"から"H"にすることにより、データ入出力(I/O)線に図16(a)の右のフリップフロップで１つ飛ばしに順にデータが出力され、奇数ビットの全データ(k/2)ビット分のデータを1ビット目、3ビット目、5ビット目、．．．．(k-1)ビット目と、それぞれビットマスク列入力の1ビット目、２ビット目、3ビット目、．．．．(k/2)ビット目との排他的論理和が順に出力される。また、最後に(k/2)回目のクロック入力φ2を"L"から"H"にすることにより、1ビット目、3ビット目、5ビット目、．．．．(k-1)ビット目と、それぞれビットマスク列入力の1ビット目、２ビット目、3ビット目、．．．．(k/2)ビット目との排他的論理和がFF1、FF3、FF5、．．．．FF(k-1)のフリップフロップに再記憶される。この際、クロック入力φ1は変化させないので、偶数ビットのデータは変化せず保持される。なお、ここでは、ビット列マスク入力として”01010101．．．．0101”を用いたが、勿論他のパターンでもよい。例えば、”11111111．．．．1111”のビットマスクを用いることにより、図17(e)左側のように、フリップフロップ(208b)に保持されている奇数ビットデータ列をビット反転したデータを出力しつつフリップフロップ(208b)に再記憶する方法を容易に実現できる。
【０１２８】
さらに、図17(d)右側に、フリップフロップ(208a)に保持されている偶数ビットデータ列と、例えば、”01010101．．．．0101”のビットマスクとの排他的論理和を取り、排他的論理和を取ったデータを出力しつつフリップフロップ(208a)に再記憶する方法を示す。この場合は、ビットマスク列入力にビットマスクとなる”01010101．．．．0101”入力パルスをクロック入力と同期して与える。
【０１２９】
まず、データ出力制御入力1を"H"とし、データ出力制御入力2を"L"とし、最も右側から2つ目のフリップフロップFF2の出力を排他的論理和素子217でビットマスク列入力の最初のビット”0”との排他的論理和でデータ入出力線に出力する。これによりデータ入出力線には、偶数ビットの第一ビットのディジタルデータと同じデータが出力される。さらに、クロック入力φ1を"L"から"H"にする。これにより、FF4の出力がFF2に転送および保持され、偶数ビットのデータが順に左から右のフリップフロップに転送および保持される。その結果、排他的論理和素子217でビットマスク列入力の2番目のビット”1”との排他的論理和をとりデータ入出力線に出力する。よって、この場合には、データ入出力線には偶数ビットの第二ビットのディジタルデータ（第4ビットに相当）の反転データが出力される。後は、全部で(k/2-1)回クロック入力φ1を"L"から"H"にすることにより、データ入出力(I/O)線に図16(a)の右のフリップフロップで１つ飛ばしに順にデータが出力され、偶数ビットの全データ(k/2)ビット分のデータを2ビット目、4ビット目、6ビット目、．．．．(k)ビット目と、それぞれビットマスク列入力の1ビット目、２ビット目、3ビット目、．．．．(k/2)ビット目との排他的論理和が順に出力される。また、最後に(k/2)回目のクロック入力φ1を"L"から"H"にすることにより、2ビット目、4ビット目、6ビット目、．．．．(k)ビット目と、それぞれビットマスク列入力の1ビット目、２ビット目、3ビット目、．．．．(k/2)ビット目との排他的論理和がFF2、FF4、FF6、．．．．FF(k)のフリップフロップに再記憶される。この際、クロック入力φ2は変化させないので、奇数ビットのデータは変化せず保持される。なお、ここでは、ビット列マスク入力として”01010101．．．．0101”を用いたが、勿論他のパターンでもよい。例えば、”11111111．．．．1111”のビットマスクを用いることにより、図17(e)右側のように、フリップフロップ(208a)に保持されている偶数ビットデータ列をビット反転したデータを出力しつつフリップフロップ(208a)に再記憶する方法を容易に実現できる。勿論、このビットマスク列入力について、例えば、実施例１で説明したように、M系列などの平均化ビットマスク発生回路110の出力を入力することにすれば、図17で説明したシーケンスを用いて、符号出現確率平均化第一符号化回路106および、第一符号復号化回路107を実現することができる。
【０１３０】
さらに、図16(b)において、Q7のゲート電極は、p1と書いた入力に共通接続されている。Q7のゲート入力のp1を例えば0VからVccとし、遮断状態から導通状態にすることにより、Q7と記されたトランジスタによって、iを1からk/2の整数として、FF(k/2+i)の出力がFF(i)の入力に接続されている。また、iを1からk/2-1の整数として、FF(i+1)の出力がFF(k/2+i)の入力に接続されている。これにより、後で、図17(f)で示すように、隣接メモリセルディスターブ低減第二符号逆変換回路にて、符号化で偶数ビット列および奇数ビット列に分離された情報ビット列を、元の奇数-偶数-奇数-偶数．．．．ビット列に逆変換して出力することができる。
【０１３１】
図17(f)に、p1入力を”H”とすることにより、FF1、FF2、...、FF(k/2)に第二符号化前で奇数ビットだったデータが順に入力され、FF(k/2+1)、FF(k/2+2)、...FF(k)に第二符号化前で偶数ビットだったデータが順に入力されている場合に、FF1、FF(k/2+1)、FF2、FF(k/2+2)の順、すなわち、奇数偶数順でページバッファからデータを読み出すことができることを示す。
【０１３２】
ここでは、誤り訂正符号の復号化後の出力として、FF1、FF2、...、FF(k/2)に第二符号化前で奇数ビットだったデータが順に入力され、FF(k/2+1)、FF(k/2+2)、...FF(k)に第二符号化前で偶数ビットだったデータが順に隣接メモリセルディスターブ低減第二符号逆変換回路105に入力され、この符号列がページバッファ114に入力されている場合を想定している。まず、kビットの1連のシフトレジスタとして動作させるために、読み出しおよび記憶時に、p1をVcc("H")、sl、/sl、ビットマスク列入力を0V("L")とする。
【０１３３】
104から第二符号化前の奇数-偶数-奇数-偶数．．．．ビット列に逆変換して107に出力するには、以下のように行う。まず、データ出力制御入力1を"H"とし、データ出力制御入力2を"L"とし、右側の1番目のフリップフロップFF1の出力をデータ入出力線に出力する。これによりデータ入出力線には、奇数ビットの第一ビットのディジタルデータと同じデータが出力される。さらに、クロック入力φ1及びφ２を"L"から"H"にする。これにより、FF(k/2+1)の出力がFF1に転送および保持され、FF2の出力がFF(k/2+1)に転送および保持され、Q7の電流端子により電気的に接続された配線で、1ビット分フリップフロップに転送および保持される。その結果、データ入出力線には（k/2+1）番目のビットのディジタルデータと同じデータが出力される。さらに、クロック入力φ1及びφ２を"L"から"H"にする。これにより、データ入出力線には2番目のビットのディジタルデータと同じデータが出力される。
【０１３４】
後は、全部で(k-1)回クロック入力φ1を"L"から"H"にすることにより、データ入出力(I/O)線に読み出し前にFF1、FF(k/2+1)、FF2、FF(k/2+2)、．．．．、FF(k/2)、FF(k)の順でデータが出力される。これは、第二符号化により奇数ビットデータと偶数ビットデータを分離して時系列で順に並べた場合に対して、逆変換を行い、元の符号の奇数-偶数-奇数-偶数．．．．ビット列を復元して時系列で出力したことに他ならない。
【０１３５】
以上より、本実施例のページカウンタ114を用いれば、従来のシフトレジスタを用いた誤り符号復号回路に対して、高々（情報ビット−１）ｘ３＋８トランジスタと２つのインバータ、及び２つの２入力排他的論理和素子だけで、実施例3に必要な第二符号化のための情報ビットの符号変換回路が実現できることが明らかである。
【０１３６】
＜第二符号化回路104のシーケンス＞  
次に、図18を用いて、実施例3に係る第２符号化回路104の具体的シーケンスを示す。
【０１３７】
104では、まず、SE24において、フラグ１、フラグ２、および、フラグ３をリセットして、ページバッファ114より1ビット目、3ビット目、5ビット目、....(k-1)ビット目の奇数ビットの（k/2)ビット個数の情報ビットデータを読み出す。これには、奇数ビットをカウンタに出力する方法は、例えば、図17(b)左側の方法で奇数の情報ビットを出力し、図13の回路に入力すればよい。
【０１３８】
ついで、SE25において、ページバッファ114より2ビット目、4ビット目、6ビット目、....kビット目の偶数ビットの（k/2)ビット個数の情報ビットデータを読み出す。例えば、図17(b)右側の方法で奇数ビット出力後に偶数の情報ビットを出力し、図13の回路に入力すればよい。
【０１３９】
次いで、SE26にて、例えば、情報ビット内の”010”シンボルをカウンタ108にてカウントし、”101”シンボルをカウンタ109にてカウントし、kビット長さの上記奇数ビットと偶数ビットの連続したものを”01010101．．．．0101”、つまり”01”をビット始めから繰り返し並べたものと排他的論理和を取った”010”シンボルをカウンタ112にてカウントする。さらに、kビット長さの情報ビットを”10101010．．．．1010”、つまり”10”をビット始めから繰り返し並べたものと排他的論理和を取った”010”シンボルをカウンタ113にてカウントする。
【０１４０】
これには、SE24,SE25の情報ビットを図13の情報ビット入力に入力すればよい。
【０１４１】
ついで、SE27にて、シンボルカウンタ108,シンボルカウンタ109、シンボルカウンタ112,シンボルカウンタ113の値をレジスタa,b,c,dにそれぞれコピーする。
【０１４２】
ついで、SE28にて、実施例3のページバッファ114にて、ページバッファより1ビット目、2ビット目、3ビット目、....kビット目と奇遇奇遇順に、すなわち、通常の順番でkビットの情報ビットデータを読み出す。これには、図17(a)右側の方法で、情報ビットを出力すればよい。
【０１４３】
次いで、SE28にて、例えば、kビット長さの1ビット目、2ビット目、3ビット目、....kビット目と並んだ情報ビット内の”010”シンボルをカウンタ108にてカウントし、”101”シンボルをカウンタ109にてカウントし、”01010101．．．．0101”、つまり”01”をビット始めから繰り返し並べたものと排他的論理和を取った”010”シンボルをカウンタ112にてカウントする。さらに、kビット長さの情報ビットを”10101010．．．．1010”、つまり”10”をビット始めから繰り返し並べたものと排他的論理和を取った”010”シンボルをカウンタ113にてカウントする。これには、SE28の情報ビット出力を図13の情報ビット入力に入力すればよい。
【０１４４】
さらに、SE30にて、カウンタ108,109,112,113と、レジスタa,b,c,dのそれぞれ内容を比較して最小値となる内容を含むのはカウンタかレジスタかを求める。
【０１４５】
この結果、次いでSE31にて、最小値になるのは、レジスタa,b,c,d はなく、カウンタ108,109,112,113の方であるか判断する。
【０１４６】
ここで、カウンタ108,109,112,113の方に最小値となる条件がある場合、フラグ３をリセットしたまま、SE17-SE22までと同じシーケンスを行う。
【０１４７】
その後、SE23の替わりに、SE33にて、情報ビット(k-bit)にフラグ１、フラグ２、およびフラグ３に対応する符号を付加して102の誤り訂正符号発生回路に出力する。
【０１４８】
ついで、カウンタ108,109,112,113の方に最小値となる条件がない場合、SE32でフラグ３をセットする。
【０１４９】
ついで、情報ビットを奇数ビットと偶数ビットに分離して、例えば、1ビット目、3ビット目、5ビット目、．．．．(k-1)ビット目、2ビット目、4ビット目、6ビット目、．．．．kビット目と並べたものに対して情報ビットとし、SE17-SE22までと同様なシーケンスを行うものである。
【０１５０】
ここで、SE34において、レジスタａおよびレジスタｂの最小値が、レジスタcまたはレジスタｄの最小値より大きいか判断する。
【０１５１】
ここで、SE34にてYesの場合、SE35にて、フラグ１をセットし、情報ビットの奇数ビットと、第一ビットマスクパターン”01010101....0101”（”01”をビット初めから（k/2）ビット分繰り返し発生させたもの）との排他的論理和をとるシーケンスを行い、ページバッファ114に再記憶する。これには、図17(d)左側のシーケンスを行えばよい。
【０１５２】
ついで、SE36において、情報ビットの偶数ビットと、第一ビットマスクパターン”01010101....0101”（”01”をビット初めから（k/2）分繰り返し発生させたもの）との排他的論理和をとるシーケンスを行い、ページバッファ114に再記憶する。これには、図17(d)右側のシーケンスを行えばよい。
【０１５３】
ついで、SE37にて、シンボルカウンタ112の値が記憶されたレジスタcと、シンボルカウンタ113の値が記憶されたレジスタdより大きいか判断を行う。ここで、SE37にてYesの場合には、SE38にて、kビットの情報ビットを全部ビット反転、すなわち”0”ビットを”1”ビット、”1”ビットを”0”ビットに変化させ、フラグ2をセットする。これには、例えば、図17(e)のシーケンスを行えばよい。
【０１５４】
一方、SE34のNoと判断した場合には、SE39にて、”010”シンボルカウンタ108が記憶されたレジスタaの値と、”101”シンボルカウンタ109が記憶されたレジスタｂの値より大きいか判断を行う。SE39にてYesの場合には、SE40にて、kビットの情報ビットを全部ビット反転、すなわち”0”ビットを”1”ビット、”1”ビットを”0”ビットに変化させ、フラグ2をセットする。これには、例えば、図17(e)のシーケンスを行えばよい。
【０１５５】
この後、SE41で、情報ビット中の208bのフリップフロップに入った奇数データを1ビット目、3ビット目、．．．．、(k-1)ビット目を読み出し、誤り訂正符号化回路102に出力する。この情報の出力には、例えば、図17(b)左側のシーケンスで行えばよい。
【０１５６】
さらに、SE42で、情報ビット中の208aのフリップフロップに入った偶数データを2ビット目、4ビット目、．．．．、kビット目を読み出し、誤り訂正符号発生回路102に出力する。この情報の出力には、例えば、図17(b)右側のシーケンスで行えばよい。
【０１５７】
さらに、SE43にて情報ビットにフラグ1、フラグ2、およびフラグ３に相当する符号を102に出力する。
【０１５８】
なお、実施例１と同様に、フラグ1、フラグ2、およびフラグ３を情報ビットに付加する方法として、各フラグを2ビットの連続するデータとして情報ビットに付加する方法がある。この方法は、フラグ１，２がどの状態でも”010”の状態が生じないように選択しているが、勿論、これ以外の符号化、例えば、フラグ１、２，３のいずれか２つを同一2ビット割り当て、残り１つのフラグを1ビットに割り当てる方法でも良い。これは、情報ビットの前または後ろにフラグ1,2,3に対応するビットがaabbcc（a,b,cはそれぞれフラグ1,2,3に相当する”0”,”1”の状態）となっているが、ccbbaa、aabbcやccbbaなど適宜順番を入れ替えたものをフラグに対応するビットとして付加してもよい。勿論、このフラグに相当するビットは、情報ビットの前後に付加するのではなく、例えば、情報ビットを２つに分け、ccbbaaのようにして情報ビットの中に埋め込んでもよい。勿論情報ビットを4つに分け、aa,bb,ccをそれぞれ4つの情報ビットの間に入るように埋め込んでもよい。また、誤り訂正符号化した後に、検査ビット（パリティ）ビットを数個に分割し、aa、bb、ccのように2個以上の同じビットからなるフラグを検査ビットで挟むように並べ替え（インタリーブ）してもよい。このようにすれば、2個以上の同じビットからなるフラグの両側のビットは”010”パターンになり得ないため、より、検査ビット部分の”010”パターンの生じる可能性を減少できる。
【０１５９】
＜第二符号逆変換回路105の復号化のシーケンス＞  
次に、図19を用いて、本実施例３の第二符号逆変換回路105の復号化の具体的シーケンスを説明する。
【０１６０】
第二符号逆変換回路105では、まず、SE44において、情報ビットに付加されたフラグ1、フラグ２およびフラグ３に相当する情報を、例えば、レジスタや一時メモリに記憶する。
【０１６１】
ついで、SE45にて、フラグ２がセットされているか判断後、フラグ２がセットされている場合には、SE46にて、kビットの情報ビットを全部ビット反転、すなわち”0”ビットを”1”ビット、”1”ビットを”0”ビットに変化させ、情報ビットと置き換える。
【０１６２】
ついで、SE45のNoと判断した分岐と合流後、SE47にて、フラグ１がセットされているか判断する。
【０１６３】
SE47でYes、すなわちフラグ１がセットされている場合、SE48で情報ビットと第一ビットマスクパターン”01010101....0101”（”01”をkビット分繰り返し発生させたもの）との排他的論理和をとるシーケンスを行い、情報ビットと置き換えを行う。この第一ビットマスクパターンは、104の符号化の際”10”をkビット分繰り返し発生させた、”10101010....1010”を用いた場合には、同じ”10101010....1010”マスクビットを用いれば良い。
【０１６４】
ついで、SE47のNoと判断した分岐と合流後、SE49にて、フラグ3がセットされているか判断する。
【０１６５】
さらに、フラグ３がセットされている場合、SE50にて、FF1、FF2、...、FF(k/2)に第二符号化前の奇数データが順に入力され、FF(k/2+1)、FF(k/2+2)、...FF(k)に第二符号化前の偶数データが順に入力されているので、FF1、FF(k/2+1)、FF2,FF(k/2+2)の順、すなわち、第二符号化前の奇数偶数順でページバッファからデータを読み出し、第一符号復号化回路107に出力する。これには、例えば、図17(f)のシーケンスを用いればよい。
【０１６６】
フラグ３がセットされていない場合には、ページバッファ114より1ビット目、2ビット目、3ビット目、....kビット目と奇遇奇遇順に、すなわち、通常の順番でkビットの情報ビットデータを読み出し、第一符号復号化回路107に出力すればよい。
【０１６７】
以上のシーケンスを経ることにより、実施例３の符号変換を行った8通りの場合に対して、予め各変換後の情報ビット中の”010”の数を数えておき、定量比較することにより、前述のように問題となる”010”の3bit連続したシンボルの出現確率をより減少させている。
【０１６８】
ここで、実施例１，2よりも実施例3において、より”010”の3ビットシンボルの列が生じる確率を小さく出来ることを、図20(a)を例に挙げて示す。図20(a)では、実施例２の場合の”010”の3連続シンボルの出現個数が最も増加する最悪パターンの1例である図9(e)のようなビット列を入力した場合を示す。この場合、奇数ビットと偶数ビットを1ビット目、3ビット目、5ビット目、．．．．(k-1)ビット目、2ビット目、4ビット目、6ビット目、．．．．kビット目と並べかえを行うことにより、図20(a1)の(k/2)ビットの”10101010....1010”と(k/2)ビットの”00000000.... 0000”の情報ビットが、図20(a2)の(k/4)ビットの” 11111111....1111”と、(3k/4)ビットの”00000000.... 0000”の情報ビットに並べ替えがされるので、”010”が生じる個数を0まで削減できる。これにより、図20(a)に対応するデータは並べ替えされ、フラグ１、２，３がそれぞれリセット、リセット、セットとなる。この結果、誤り訂正符号発生回路102に出力される符号列例を図20(a3)に示す。このようにすることにより、フラグを含めた情報ビットで”010”の生じる個数を0まで削減できる。なお、今回は説明を簡単にするため、全ビット反転や情報ビットとの”01010101....0101”との排他的論理和を取っていない場合を示したが、図20(a)の符号に今回は全ビット反転や情報ビットとの”01010101....0101”との排他的論理和を取ったり、その両方を行った場合も、実施例3のシーケンスで同様に”010”の生じる個数を0個にできる。これは、例えば、”10101010....1010 00000000.... 0000”ではなく、”10101010....1010 11111111.... 1111”の情報ビットの場合に当てはまる。
【０１６９】
よって、一般の16ビットより多いkビットの情報ビットでは、本実施例を用いることにより、最悪の”010”の生じる数は高々{(k/6)を整数に切り上げた値}-1以下の箇所に減少することができる。なぜなら、実施例1,2の議論と同様に考えて、仮に実施例３の符号変換を施した情報ビットの中に”010”の数は{(k/6)を整数に切り上げた値}-1よりも多いと仮定する。この場合、最悪、”010”が最も稠密に並んだ場合においても、”01010101....010”が(k/3)+1ビット以上連続したビットで占めることになる。よって、”010”以外のパターンのビット数は高々(2k/3)-1ビット以下である。ここで、”01010101....010”との排他的論理和により”010”パターンが増加し、その増加数が部分符号長あたり最も大きいパターンは”00000000....0000”である。よって、情報ビットとの”01010101....010”との排他的論理和を取った場合で、最悪の”010”の生じる箇所を高々{(k/6)を整数に切り上げた値}-1の箇所と限定するための最小の部分符号パターンは、”00000000....0000”が[(k/3)-1]ビット長さあり、”01010101....010”が(k/3)+1ビット以上連続したビット（連続ビットaパターンと以後呼ぶ）となる。よって、前述の仮定を満たすには、aパターン内の端の1ビットの”0”の重なりを考えて、kビットの全情報ビットにおいて、連続ビットaパターンを除いた残りの(k/3)+1ビット以下のビット数で実施例３の第二符号化で”010”の数が{(k/6)を整数に切り上げた値}-1よりも大きい情報ビットの組み合わせが存在する必要がある。ここで、実施例２および実施例３の図20(a)の符号化の議論より、実施例３の奇数ビットと偶数ビットを1ビット目、3ビット目、5ビット目、．．．．(k-1)ビット目、2ビット目、4ビット目、6ビット目、．．．．kビット目と並べかえるシーケンスは、実施例１，２の符号のビット反転を取るシーケンス、および、”01010101....0101”のビットマスクと情報ビットとの排他的論理和を取るシーケンスと、それぞれ独立に実施することができ、フラグ１，２，３で示す全部で8通りの状態を分けていることは明らかである。さらに、図20(a)では、前記偶数奇数ビット並べ替えのみで、連続ビットaパターンは、”010”の出現する数を0まで減少させることができる。よって、前述の仮定を満たすためには、連続ビットaパターンを除いた残り(k/3)+1ビット以下のビット数で、特に、前記偶数奇数ビット並べ替えで、{(k/6)を整数に切り上げた値}-1よりも”010”の連続パターンが増えるパターンである必要がある。偶数奇数ビット並べ替えで、”010”パターンが増えるパターンは”0x1x0x”（ｘは”0”または”1”のいずれか）のパターンがあり、特に、偶数奇数ビット並べ替えで、最も”010”パターンが偶数奇数ビット並べ替えで増えるパターンは”00110011....001100”の繰り返しパターンとなる。他のバリエーションとしては、”00110011....001100”の繰り返しパターンをビット反転したものや、前記繰り返しパターンに”01010101....0101”との排他的論理和を取ったもの、および両方を適用したものを含むパターンとなる。図20(b1)の右端のビット列がそれに相当しており、図20(b2)、(b3)、(b4)の符号の後ろ側（k/3）ビットが、実施例３の第二符号処理を施した場合のパターン変化を示している。この場合、図20(b3)では、最小で(k/6)-2個の”010”しか生じない。特に、実施例２で示したビット反転と”01010101....0101”との排他的論理和との組み合わせでは、”00110011....0011”部分では”010”の3連続ビットを生じないことに注意されたい。
【０１７０】
ここで、一般には、並べ替えによって、{(k/6)を整数に切り上げた値}-1より”010”パターンが増えるには、最小でも(k/3)+4ビット以上の”00110011....001100”が必要となる。連続ビットaパターンの端の”00”の2ビットの重複を除くと、連続ビットaパターンを除いた残りは最低(k/3)+2ビット以上必要となる。よって、実施例３の符号変換を施した情報ビットの中に”010”の数は{(k/6)を整数に切り上げた値}-1よりも多いと仮定は矛盾するので、実施例３の符号変換を施した情報ビットの中に”010”の数は{(k/6)を整数に切り上げた値}-1以下になる。
【０１７１】
さらに、”00110011....0011”に第二の実施例のビット反転したものや、前記繰り返しパターンに”01010101....0101”との排他的論理和を取ったもの、および両方を適用したものも、”0011”の巡回パターン、例えば”01100110....0110”となるので、同様に高々(k/6)個-1以下の”010”しか生じない。
【０１７２】
以上より、図20(b1)が実施例3での符号変換を行った場合でも”010”の個数が多い1例である。この場合、”010”の個数は(k/6)-2個に抑えられ、最悪の”010”の生じる数は高々{(k/6)を整数に切り上げた値}-1以下の箇所に減少することができる。図20(b1)の符号に、実施例２の全ビット反転や情報ビットとの”0101010....1010”との排他的論理和を取ったり、その両方を行った場合も、同様に、第３の実施例の符号化により、”010”の生じる個数を高々{(k/6)を整数に切り上げた値}-1以下の”010”にすることができる。
【０１７３】
なお、図20（ｃ1）に、”010”のパターンを含み、かつ、全ビット反転や情報ビットとの”0101010....1010”との排他的論理和を取ったり、その両方を行った場合も、”010”のパターンほぼ等しく生じる”010”の発生頻度が高い例を示す。それぞれのレジスタa,b,c,dおよび、カウンタ108,109,112,113の値も右に示してある。このパターンは、”0100”もしくは、”0001”の4ビットの繰り返しとなっており、偶数奇数ビット並べ替えでも”010”の発生個数を減らすことができないパターンとなっている。”010”の個数は符号の時系列反転で不変量だから、時系列反転を考えた”0010”もしくは”1000”の繰り返しも同様のカウント数となることは明らかである。このパターンも、実施例３のシーケンスを行うことにより、上記同様に”010”の生じる個数を高々{(k/6)を整数に切り上げた値}-1以下、ここでは、(k/8)個以下の”010”にすることができ、前記図20(b)の方が”010”パターン個数が増えるパターンとなる。このように、”01010101....0101”、または、”10101010．．．．1010”の連続ビットでは”010”の発生頻度は(ビット長/2)-1程度生じるが、”010”のシンボルに続いて他のビットを挿入して符号を作成した場合、例えば、”01000100....0100”の連続ビットでは、”010”は最大（ビット長さ/4）程度に減少する。よって、”010”の部分情報ビットあたりの発生ビット数は、図20(c)のパターンのように”010”を分散させて配置した場合は、”01010101....0101”、または、”10101010．．．．1010”の連続ビットが実施例３の符号化により生じる場合に比較して、連続ビットの長さが16ビットより長い場合には1/2以下になる。
【０１７４】
一方、実施例1,2の”010”の生じる個数の上限値、すなわち、{(k/4)を整数に切り上げた値}-1値と、実施例３のの”010”の生じる個数の上限値、すなわち、{(k/6)を整数に切り上げた値}-1との比はｋが16ビット以上で、2倍以下である。また、kが20ビット以上では、2倍より小さくなる。よって、010”を分散させて配置した場合は”10101010．．．．1010”の連続配置した場合に比べて、kが16ビット以上では、最悪の”010”の生じる個数の上限値以下となり、ｋが20ビット以上では、より小さくなる。
【０１７５】
上記のように、本実施例３によれば、少なくとも上記（１）乃至（２）と同様の効果が得られる。
【０１７６】
さらに、以上から、本実施例３にて第二符号変換することにより、”010”パターンの生じる個数を、最悪、{(k/6)を整数に切り上げた値}-1以下に抑えることができる。よって、実施例３の操作を行うことによって、実施例１や２よりも最悪の”010”の生じる数は高々{(k/6)を整数に切り上げた値}-1の箇所まで減少させることができる。
【０１７７】
例えば、図２９中の矢印Ｙ３に示すように、”010”のシンボル数が100個程度の場合に、実施例１、２と比べ、”010”の出現する最悪状態数をさらに低減することができる。
【０１７８】
なお、図20(b4)および図20(c4)をみれば明らかなように、実施例３の偶数奇数ビットの並べ替え後のパターンは”01010101．．．．0101”、 ”10101010．．．．1010”、” 0000000．．．．0000”,”11111111．．．．1111”の部分情報ビット列の組み合わせとなっている。よって、偶数奇数ビットの並べ替えを行った情報ビット列に対して、さらに偶数奇数ビットの並べ替えを行い、その後に、全ビット反転や情報ビットとの”01010101....0101”との排他的論理和を取ったり、その両方を行うことにより、さらに”010”の生じる個数をさらに減少させることができる。この際、新たな1ビットのフラグ４とそれに対応する符号を情報ビットにフラグ３と同様に付加すればよいことは明らかなので、省略する。
【０１７９】
ここで、図２９に実施例２及び３、および、上記偶数奇数ビットの並べ替えをさらに行った場合の実例を示す。この実例では、2値16ビット、つまり符号長k=16の2^16＝65536通りのすべての情報ビット配列を想定して、その中の”010”の連続する個数を計測した。横軸は１つの16ビットの符号に含まれる”010”の個数を示し、縦軸はその”010”個数を含む情報ビットの累積数を示している。なお、各シンボルの関連をわかりやすくするために、シンボル間を線でつないで表示しているが、勿論シンボル数としては０および自然数の離散的な値のみが意味があり、1より小さい値はシンボル数が0を意味している。
【０１８０】
１つの情報ビットに含まれる”010”の最悪個数は、実施例中で説明したように、○で示す比較例では、（k/2）-1=7個含まれており、実施例2に相当する□では、{(k/4)を整数に切り上げた値}-1=3個含まれており、偶数奇数の並べ替えを1回行った実施例3に相当する□では、{(k/6)を整数に切り上げた値}-1=2個含まれており、最悪の個数を抑えるという利点は明白である。さらに、さらに偶数奇数ビットの並べ替えを1回行った後、もう一度それを情報ビットとみなして偶数奇数ビットの並べ替えを行った実施例３上記説明例をひし形および2点鎖線で示す。これは、具体的には、a,b,c,d,e,f,g,h....m,n,o,pをそれぞれ1ビットに相当するビットとし、”abcdefgh....mnop”という情報ビット列を16bitごと区切った場合に、”aceg....mo bdfh....np”という並べ替えを行い、さらに、最終的に"ae....m cg....o bf....n dh....p”という並べ替えを行った場合に相当する。この並べ替え後に、全ビット反転や情報ビットとの”01010101....0101”との排他的論理和を取ったり、その両方を行うことにより、8+4通り=12通りの場合に、”010”が含まれる数の最小の場合を抽出しプロットしたものである。このように、さらに、偶数奇数ビットの並べ替えを2回繰り返すことにより、さらに、情報ビットに含まれる”010”の個数を、この実例では1以下に低減することができ、”010”の含まれる個数が1個の情報ビットの場合数も比較例より減少させることができる。勿論、これら第二符号化において、情報ビットには、全ビット反転か排他的論理和か並べ替えしか行っていないので、符号化による情報の損失はなく、逆変換が容易にできることは明らかである。
【０１８１】
勿論、上記の実施例において、偶数奇数の並べ替えは奇数ビットを前に偶数ビットを後にしたが、適宜、これは偶数ビットを前に、および奇数ビットを後にしても構わない。また、今回は偶数奇数ビットの並べ替えを2回行った例を示したが、情報ビット長が長い場合には、さらに3回、4回と繰り返し用いても構わない。
【０１８２】
本実施例３では、勿論、実施例2の作用・効果、および、実施例１の（１）、及び（２）の特徴は本実施例でも存在する。さらに、本実施例では、実施例２に比べ、フラグ３という情報として1ビット、物理ビットとして2ビットを情報ビットに付加することで、実施例２の”010”の生じる個数上限である{(k/4)を整数に切り上げた値}-1以下より、{(k/6)を整数に切り上げた値}-1以下まで低下することができる。例えば、１つのメモリセルαが図２の書き込みしきい値（ｖ）との重なりが生じたり、読み出しレベルが書き込みしきい値とする判断するしきい値が超え、消去ビットが書き込みビットと誤認識され不良する確率p0とすると、p0が十分１より小さいとして、比較例の[(k/2)-1]×p0の不良が生じる確率を、[{(k/6)を整数に切り上げた値}-1]×p0まで低下させることができる。
【０１８３】
なお、本出願の実施例1,2,3,の顕著な特徴は、繰り返しになるが、各実施例で”010”の生じる個数上限の数値を明確に与えていることにある。これにより、後述の実施例４のSE59に述べられるように、”010”の生じる個数上限を一定以下に抑えたまま、他の改善手法を併用することができる。
【０１８４】
［実施例４］  
次に、実施例４に係るデータ記憶システムについて、図２１乃至図２３を用いて説明する。図２１は、実施例４に係るデータ記憶システムの全体構成例を示している。
【０１８５】
本実施例４は、上記実施例１から３の実施、特に実施例３の実施に加えて、さらに、図1の”010”シンボルが生じた部分の真中の”1”ビットM1a(α)と、WL方向に物理的に隣接するビットM2a(ε)が書き込みビット”0”である組み合わせを減らすことにより、より隣接メモリセルの容量結合によるしきい値増加問題を減らすことができる。なお、本実施例は、実施例１から３と独立に行うこともできるが、実施例１から３と同じ効果、つまり、隣接メモリセルの容量干渉の影響を緩和する効果があるので、組み合わせて用いるのが最も望ましい。実施例1や実施例2、実施例３と同一の部分や同一の動作部分には、同一符号をつけて詳しい説明は省略する。本実施例は実施例１から３のどの実施でも適用することができるが、ここでは、最も効果が高い実施例３についての適用例を説明する。
【０１８６】
実施例３までと実施例４の構成上の差異は、図15と図21を比較すれば明らかなように、書き込みを行うメモリセルに対してWL方向に隣接したメモリセル、特に、既に書き込んだメモリセルを含むワード線（データ選択線）の情報ビットのしきい値を記憶するページバッファ115をさらに有していることである。
【０１８７】
多値NANDフラッシュメモリでは、同じレベルの多値データはソース線に近い側から順に書き込まれる。よって、このページバッファ115としては、ソース線側の隣接ワード線に形成されたメモリセルのデータを記憶するバッファとなることが望ましい。以後では、書き込みを行うメモリセルを含むワード線（データ選択線）をWLnとし、WLnに物理的に隣接し、既に書き込んだメモリセルを含むワード線（データ選択線）をWLn-1またはWL(n-1)と簡略表現する。
【０１８８】
なお、このページバッファ115は、誤り訂正符号復号回路103に接続され、フラッシュメモリ7から既に書き込んだメモリセルを含むワード線（データ選択線）の情報ビットを記憶する。ここで、ページバッファ115に記憶されたデータは、しきい値により”0”,”1”判断を行ったデータを記憶するようになっていた方が、誤りビットが少なく望ましい。ただし、誤り訂正の時間および回路規模が増大する場合には、データ入出力バッファ101から直接に、誤り訂正前の符号の情報ビット部分をWLn-1の情報ビットとして用いても構わない。なぜなら、本実施例での誤り訂正符号は、情報ビットと検査ビットが分離し、誤り訂正符号内に情報ビットがそのまま入っている分離符号であり、本実施例の読み出し方法は実施例1から実施例3までと同様、書き込み時と異なりWLn-1の読み出しの必要がなく、読み出し時のWLn-1のビット誤りによって、直接ビット誤りすることがないためである。また、例えば、実施例３の構成に本実施例を適用する場合には、書き込み時のデータの符号化に対して、WLn-1のデータの複数回の読み出しが必要となる。よって、情報ビットの不揮発性メモリ７よりの読み出しが十分早く処理時間が問題ない場合には、ページバッファ115を省略し、その115の代わりに、不揮発性メモリ７を順にデータを読み出す方法で代用しても構わない。ページバッファ115の具体的な構成はページバッファ114と同様に構成すれば回路構成できるので省略する。
【０１８９】
実施例１から３までと実施例４の構成上のさらなる差異は、書き込みが既にされ、”010”の連続シンボルが生じたWLn-1部分の真中の”1”ビットM1a(α)と、これから書き込みをするWLn内に形成された隣接するビットのM2a(ε)が書き込みビット”0”である組み合わせをカウントするシンボルカウンタ116,117,118,119回路をさらに設けたところにある。なお、WLｎに対して実施例3で用いられる8通りの符号変換の組み合わせに対して、WLn-1内のメモリセルの情報列の中の”010”と、予め各変換後のWLｎの”x0x”（ｘは”0”,”1”の任意のビット）の数を数えておき定量比較することにより、実施例１−３で説明した図２中の（ｉｉｉ）の場合より問題となる図２の（ｉｖ）で示した状態の出現確率をより減少させている。
【０１９０】
＜シンボルカウンタ116〜119の回路構成例＞  
図22に実施例４のシンボルカウンタ116,117,118,119の回路構成例を示す。  
例えば、カウンタ116およびカウンタ117は、図22のように、WLnの情報ビットの初めから、一連の情報ビットを順に時系列にて208からなる一単位時間遅延回路に入力し、WLn-1で”010”連続する3ビットのシンボルの真中のビットがWLnで"1”になる数を検出する回路と”0”になる数を検出回路する回路とを組み合わせて、”H”となったときの単位時間数をカウンタで数えることにより容易に実現することができる。図22で、カウンタ116に接続された入力では、WLn-1が”010”が順に入力された単位時間において、WLn-1が”010”になり、かつ、WLnが”x0x”となった場合、WLn-1の”010”最後の”0”が入力された単位時間で、出力が一単位時間”L”から”H”となり、他の場合には”L”となる。また、図22で、カウンタ117に接続された入力では、”010”が順に入力された単位時間において、WLn-1が”010”なり、かつ、WLnが”x1x”となった場合、WLn-1の”010”最後の”0”が入力された単位時間で、出力が一単位時間”L”から”H”となり、他の場合には”L”となる。なお、前記"1"検出回路と”0”検出回路は、WLn-1で”010”連続する3ビットのシンボルとなるのを検出する回路（図22の左下部に相当）との論理積をカウンタで数えることで実現される。ここで、WLn-1の情報ビットが入ったページバッファ115から、上記WLnの情報ビット入力と同期させて情報ビットの初めから一連の情報ビットを順に時系列にて入力させるものとする。
【０１９１】
一方、WLn-1が”010”というシンボルで、かつ、WLnは”01010101．．．．0101”のビットマスクと排他的論理和を取った後で”x0x”となる場合を検出する回路は図13の回路説明と同様に、図22の回路にて実現できる。ここで、情報ビットを与えるクロックを1/2分周器213で分周すると、その出力は、例えば、情報ビットのyビット目として、yビットの偶数奇数にてそれぞれ”1”、”0”が出力される。よって、シンボルカウンタ118に電気的に接続された入力は、例えば、WLn-1が”010”というシンボルで、かつ、（WLnが”x1x”で、かつ、yビット目が偶数の場合）または、（WLnが”x0x”で、かつ、yビット目が奇数の場合）との論理和となり、これは、WL(n-1)が”010”というシンボルでかつ、WLnの情報ビットと、”01010101．．．．0101”との排他的論理和を取ったビット列中の”x0x”の3bit連続したシンボルが存在する場合に、WLn-1の”010”最後の”0”が入力された単位時間で、1単位時間”H”、そのほかの場合に“L”となる。一方、シンボルカウンタ119に電気的に接続された入力は、例えば、WL(n-1)が”010”というシンボルでかつ、（WLnが”x1x”で、かつ、yビット目が奇数の場合）または、（WLnが”x0x”で、かつ、yビット目が偶数の場合）との論理和となり、これは、WL(n-1)が”010”というシンボルでかつ、WLnの情報ビットと、”10101010．．．．1010”との排他的論理和を取ったビット列中の”x0x”の3bit連続したシンボルが存在する場合にWLn-1の”010”最後の”0”が入力された単位時間で、1単位時間”H”、そのほかの場合に“L”となる。よって、これら2入力OR回路214の出力を情報ビット入力の単位時間と同期させ、例えば、前記単位時間でOR出力の論理値が安定したところでトリガしてカウントすることにより、カウンタ118およびカウンタ119でカウントすることができる。例えば、図22のカウンタは一般に知られるバイナリカウンタで構成すればよいので、ここではカウンタの詳細は省略する。
【０１９２】
＜実施例４に係る第二符号変換回路104の具体的シーケンス＞  
図23に実施例4の104の具体的シーケンスを示す。
【０１９３】
104では、まず、S51において、フラグ１、フラグ２、および、フラグ３をリセットして、ページバッファ114より書き込みを行うWLｎの1ビット目、3ビット目、5ビット目、....(k-1)ビット目の奇数ビットの（k/2)ビット個数の情報ビットデータを読み出す。さらに、不揮発性メモリ回路７またはページバッファ115から、WLｎと隣接する書き込みがされたWLn-1の1ビット目、2ビット目、3ビット目、....(k/2)ビット目の（k/2)ビット個数の情報ビットデータを読み出す。奇数ビットをカウンタに出力する方法は、例えば、図17(b)左側の方法で奇数の情報ビットを出力すればよい。
【０１９４】
ついで、SE52において、ページバッファ114より書き込みを行うWLｎの2ビット目、4ビット目、6ビット目、....kビット目の偶数ビットの（k/2)ビット個数の情報ビットデータを読み出す。さらに、ページバッファ115から、WLｎと隣接する書き込みがされたWLn-1の(k/2)+1ビット目、(k/2)+2ビット目、(k/2)+3ビット目、....kビット目の（k/2)ビット個数の情報ビットデータを読み出す。例えば、図17(b)右側の方法で奇数ビット出力後に偶数の情報ビットを出力する。
【０１９５】
次いで、SE53にて、例えば、WLnの情報ビット内の”010”シンボルをカウンタ108にてカウントし、”101”シンボルをカウンタ109にてカウントし、kビット長さの上記奇数ビットと偶数ビットの連続したものを”01010101．．．．0101”、つまり”01”をビット始めから繰り返し並べたものと排他的論理和を取った”010”シンボルをカウンタ112にてカウントする。さらに、kビット長さの情報ビットを”10101010．．．．1010”、つまり”10”をビット始めから繰り返し並べたものと排他的論理和を取った”010”シンボルをカウンタ113にてカウントする。これには、SE51,SE52の情報ビットを、例えば、図13の情報ビット入力に入力すればよい。
【０１９６】
次いで、SE54にて、例えば、WLn-1内の情報ビット中の"010"シンボルと第二符号変換後の隣接WLnの”x0x”ビットを検出する。このシンボル検出には、例えば図22で示した回路を用いればよい。このシンボル検出した条件で以下を行う。まず、WLnの情報ビット(k-bit)中の"x0x"(2ビット目が書き込み)のビットの個数をシンボルカウンタ116にてカウントする。および、WLnの情報ビット(k-bit)中の"x1x"(2ビット目が消去)のビットの個数をシンボルカウンタ117にてカウントする。および、WLnの情報ビット(k-bit)と"01010101....0101"との排他的論理和を取ったビット列の"x0x"の連続ビットの個数をシンボルカウンタ118にてカウントする。および、WLnの情報ビット(k-bit)と"10101010....1010"との排他的論理和を取ったビット列の"x0x"の連続ビットの個数をシンボルカウンタ119にてカウントする。これらは、SE51,SE52のWLn、WLn-1の情報ビットを図22の情報ビット入力に入力すればよい。
【０１９７】
ついで、SE55にて、シンボルカウンタ108,シンボルカウンタ109、シンボルカウンタ112,シンボルカウンタ113、シンボルカウンタ116,シンボルカウンタ117、シンボルカウンタ118,シンボルカウンタ119の値をレジスタa,b,c,d,e,f,g,hにそれぞれコピーする。
【０１９８】
ついで、SE56にて、実施例3のページバッファ114にて、書き込みを行うWLｎのページバッファより1ビット目、2ビット目、3ビット目、....kビット目と奇遇奇遇順、つまり、通常のビット出力順にkビットの情報ビットデータを読み出す。これには、図17(a)右側の方法で、情報ビットを出力すればよい。さらに、不揮発性メモリ回路７またはページバッファ115から、WLｎと隣接する既に書き込みがされたWLn-1の1ビット目、2ビット目、3ビット目、....kビット目の（k)ビット個数の情報ビットデータを読み出す。この際、、SE51,SE52とSE56のWLn-1のデータに対する出力順序および内容は同じなので、ページバッファ115の方が通常不揮発性メモリ7よりも読み出しを速く行うことができる。よって、SE51で不揮発性メモリ７よりページバッファ115にデータを書き込み、SE56でページバッファ115からデータを読み出すことで高速処理を実現できる。
【０１９９】
次いで、SE57にて、例えば、WLnの情報ビット内の”010”シンボルをカウンタ108にてカウントし、”101”シンボルをカウンタ109にてカウントし、kビット長さの奇遇奇遇順、つまり、通常のビット出力順の連続した情報ビットを”01010101．．．．0101”、つまり”01”をビット始めから繰り返し並べたものと排他的論理和を取った”010”シンボルをカウンタ112にてカウントする。さらに、kビット長さの情報ビットを”10101010．．．．1010”、つまり”10”をビット始めから繰り返し並べたものと排他的論理和を取った”010”シンボルをカウンタ113にてカウントする。これには、SE56の情報ビットを、例えば、図13の情報ビット入力に入力すればよい。
【０２００】
次いで、SE58にて、WLn-1内の情報ビット中の"010"シンボルと第二符号変換後の隣接WLnの”x0x”ビットを検出する。このシンボル検出には、例えば図22で示した回路を用いればよい。このシンボル検出した条件で以下を行う。まず、WLnの情報ビット(k-bit)中の"x0x"(2ビット目が書き込み)のビットの個数をシンボルカウンタ116にてカウントする。および、WLnの情報ビット(k-bit)中の"x1x"(2ビット目が消去)のビットの個数をシンボルカウンタ117にてカウントする。および、WLnの情報ビット(k-bit)と"01010101....0101"との排他的論理和を取ったビット列の"x0x"の連続ビットの個数をシンボルカウンタ118にてカウントする。および、WLnの情報ビット(k-bit)と"10101010....1010"との排他的論理和を取ったビット列の"x0x"の連続ビットの個数をシンボルカウンタ119にてカウントする。これらは、SE56のWLn、WLn-1の情報ビットを図22の情報ビット入力に入力すればよい。
【０２０１】
ついで、SE59にて、カウンタ１０８、カウンタ１０９、カウンタ１１２,カウンタ１１３、レジスタa,レジスタｂ、レジスタｃ、レジスタｄのそれぞれの値を比較して、値が、予め決めたしきい値２以下になるカウンタおよびレジスタをすべて選択する。これを選択aとする。この予め決められたしきい値2としては、実施例３を同時に用いた場合には、{(k/6)を整数に切り上げた値}-1とし、実施例１または実施例２を同時に用いた場合には、{(k/4)を整数に切り上げた値}-1とするのが良い。これら値の根拠は、”010”の生じる個数上限となっており、詳しい説明は実施例1,2,3に詳述されているので、ここでは省略する。実施例1,2,3より、kビットの、2k個のどのような情報ビットの組み合わせを用いても、”010”の連続するシンボル列の数を予め決められたしきい値2以下に符号化できることが明確になっているので、本実施例4の符号は、同時に用いた実施例のしきい値2以下の”010”の連続するシンボル列を満足する符号となっている。
【０２０２】
ここで、SE59およびSE60において、カウンタ116が選択された場合には、同じ符号化処理をWLｎに行うのに相当するカウンタ108も選択することにする。また、カウンタ117が選択された場合には、同じ符号化処理をWLｎに行うのに相当するカウンタ109も選択することにする。また、カウンタ118が選択された場合には、同じ符号化処理をWLｎに行うのに相当するカウンタ112も選択することにする。また、カウンタ119が選択された場合には、同じ符号化処理をWLｎに行うのに相当するカウンタ113も選択することにする。
【０２０３】
さらに、ここで、レジスタeが選択された場合には、同じ符号化処理をWLｎに行うのに相当するレジスタaも選択することにする。また、レジスタfが選択された場合には、同じ符号化処理をWLｎに行うのに相当するレジスタbも選択することにする。また、レジスタgが選択された場合には、同じ符号化処理をWLｎに行うのに相当するレジスタcも選択することにする。また、レジスタhが選択された場合には、同じ符号化処理をWLｎに行うのに相当するレジスタdも選択することにする。
【０２０４】
ついで、SE60にて、選択aを行ったレジスタおよびカウンタの中で、カウンタ116,117,118,119と、レジスタe,f,g,hのそれぞれ内容を比較して最小値となる内容を含むのはカウンタかレジスタかを求める。この結果、SE61にて、最小値になるのは、レジスタa,b,c,d はなく、カウンタ108,109,112,113の方であるか判断する。
【０２０５】
ここで、カウンタ108,109,112,113の方に最小値となる条件がある場合、フラグ３をリセットしたまま、図23（ｃ）のシーケンスを行う。SE63からSE69は図18(b)で説明したものと条件分岐SE63,SE65,SE67の条件が異なるだけで他は同じなので、説明は省略する。SE63の分岐は、図18(b)のSE17の分岐を置き換えたものであり、SE17において、カウンタ108の値とカウンタ109の値との小さい方の値がカウンタ112の値とカウンタ113の値との小さい方の値より大きいか判断するが、SE63ではカウンタ116の値とカウンタ117の値との小さい方がカウンタ118の値とカウンタ119の値の小さい方よりも大きいか判断している。SE17では、WLnのそれぞれの第二符号変換後の”010”シンボルの数を比較しているが、SE63では、WLn-1が”010”というシンボルが生じた部分の真中の”1”ビットM1a(α)と、WL方向に隣接するWLn中のビットM2a(ε)が書き込みビット”0”である組み合わせの数を、それぞれのWLnに書き込む情報ビットを第二符号変換した後で比較することに置き換えている。
【０２０６】
なお、レジスタの置き換えは、SE59で説明したレジスタ同士の対応関係で変換するものとする。SE65、SE67も図18(b)のSE19,SE21をそれぞれ上記規則で置き換えたものとなっているので説明は省略する。
【０２０７】
その後、SE69にて、情報ビット(k-bit)にフラグ１、フラグ２、およびフラグ３に対応する符号を付加して102の誤り訂正符号発生回路に出力する。
【０２０８】
ついで、SE61でカウンタ116,117,118,119の方に最小値となる条件がない場合、SE62でフラグ３をセットし、図23(d)のシーケンスを行う。
【０２０９】
SE70からSE79は図18(c)で説明したものと条件分岐SE70,SE73,SE75の条件が異なるだけで他は同様なので、他の説明は省略する。また、SE70、SE73、SE75も図18(c)のSE34,SE37,SE39をそれぞれ図23（ｃ）で説明した規則で置き換えたものとなっており、説明は省略する。
【０２１０】
このようにすることにより、第二符号変換後で、WLnは同時に用いた実施例のしきい値2以下の”010”の連続するシンボル列を満足する符号であり、かつ、WLn-1が”010”というシンボルが生じた部分の真中の”1”ビットM1a(α)と、WL方向に隣接するWLn中のビットM2a(ε)が書き込みビット”0”である組み合わせを最小にすることができる。
【０２１１】
以上のシーケンスを経ることにより、実施例３の符号変換を行った8通りの場合に対して、予め各変換後の情報ビット中の”010”の数を数えておき、定量比較することにより、前述のように問題となる”010”の3bit連続したシンボルの出現確率を一定のしきい値２以下を保ちつつ、図２の（ｉｖ）のWL方向のメモリセルの容量干渉の影響も比較例よりも減少させることができる。
【０２１２】
なお、第二符号の復号化105については、フラグ１，２，３の設定と第二符号化の方法が実施例３と同じく対応しているので、実施例３に説明したのと同じ復号化回路またはシーケンス105を用いればよい。
【０２１３】
例えば、図20(b)で示す、実施例３の最悪入力パターンにWLn-1がなり、WLnの入力パターンがその(k/3)ビットごとの入れ替えとなっているどの場合においても、実施例３のWLn-1の最悪”010”箇所に対して、実施例４の適用によって、半分のWLnの箇所を”0”でなく”1”とすることができ、WLn方向の容量結合によるしきい値上昇を減少させることができる。これは、例えば、WLn-1の符号列を(k/3)ビットの”10101010．．．．1010”、(k/3)ビットの”00000000．．．．0000”、(k/3)ビットの”00110011．．．．0011”として、WLnの符号列を(k/3)ビットの”00110011．．．．0011”、(k/3)ビットの”10101010．．．．1010”、(k/3)ビット”00000000．．．．0000”とする。この場合、WLn-1が”010”でかつ、WLnの”x0x”となる箇所個数と、WLn-1が”010”でかつ、WLnの”x1x”となる箇所個数が等しくなり、WLn-1が”010”の個数の半分は図２の(iv)の最悪パターンから逃れることができる。これは、全ビット反転で、WLnの”010”の箇所の数が変化しない場合、実施例２の説明と同様に、WLn-1の最悪”010”箇所に対して、最悪でも半分のWLnの箇所を”0”でなく”1”とすることができることによる。なお、実施例３のWLｎの変換を適用すると、偶数奇数ビット変換をすることにより、WLnの符号列は(k/6)ビットの”01010101．．．．0101”、(k/6)ビットの”11111111．．．．1111”、(k/6)ビットの”00000000．．．．0000”、(k/6)ビットの”01010101．．．．0101”、(k/3)ビットの”00000000．．．．0000”のビット列とすることができるので、本実施例のシーケンスにより、WLn-1が”010”でかつ、WLnの”x0x”となる箇所個数は0個まで削減できる。
【０２１４】
なお、本実施例の変形例として、さらに、例えば、情報ビットであるkビットを1ビット以上巡回シフトさせ、シフト無しの場合も合わせた状態で、WLn-1が”010”でかつ、WLnの”x0x”となる箇所の個数(=α)の比較を行い、WLnの”010”の数がしきい値２以下の条件でαの最小値を求める変形例がある。
【０２１５】
WLn-1が”010”でかつ、WLnの”x0x”となる箇所の最悪の個数を削減する場合には、具体的には、特にシフトなし、1ビット巡回シフト、2ビット巡回シフト、3ビット巡回シフト、4ビット巡回シフト、…、qビット巡回シフトとすればよい。qとしては以下の議論から15ビット以上であることが望ましい。
【０２１６】
なお、ここで巡回シフトとは、例えば、図16(a)のページバッファにおいて、1ビット巡回シフトの場合には、2ビット目のフリップフロップFF2の出力データを1ビット目のフリップフロップFF1のデータとして入力保持し、3ビット目のフリップフロップFF3の出力データを2ビット目のフリップフロップFF2のデータのデータとして入力保持し、．．．．kビット目のフリップフロップFF(k)の出力データを（k-1）ビット目のフリップフロップFF(k-1)のデータのデータとして入力保持し、また、1ビット目のフリップフロップの出力データをkビット目のフリップフロップのデータのデータとして入力保持することを示す。これは、図17(a)左図で、クロックφ１およびクロックφ２に１つだけ0V⇒Vcc⇒0Vのパルスを入力したDout2の出力状態で実現することができる。また、実施例４で説明した図２２のシンボルカウンタに情報ビットとして、この１つだけパルスを入力した後のページバッファ114出力からk  bit入力すれば、1ビット巡回シフトしたWLｎの情報ビットで、WLn-1が”010”でかつ、WLnの”x0x”となる箇所個数をカウントできる。勿論、パルスをクロックφ１およびクロックφ２にp回0V⇒Vcc⇒0Vのパルスを予め入力すれば、pビットの巡回シフトした状態も容易に得られることは明らかである。さらに、pビット巡回シフトした状態からシフトしない状態の情報ビットを復元するには、情報ビット長さをｋとして、(k-p)ビット巡回シフトをすればよいことは明らかで、巡回シフトという符号化および復号化は容易に実施例４の構成で実現できる。なお、この巡回を経た符号と、巡回前の符号では、”010”の含まれる個数は、1ビット目とkビット目の端の最大１ビットの影響しか受けず、実施例３の符号変換と組み合わせて用いても、巡回したビット数を記録しておけば、情報を失うことがない。
【０２１７】
この変形例では、例えば、巡回シフトとしてシフトしない場合も含めてq通り行うとして、8×q条件でのαの最小値を求めることになる。この場合、巡回シフトでは、端に存在する高々1ビットが”010”の増加または減少に寄与するので、”010”が巡回シフトで増加しても高々1箇所である。一方、WLn-1が”010”でかつ、WLnの”x0x”となる箇所は、最低2ビット互いに離れた箇所になる。なぜなら、”010”シンボルの1ビットシフト箇所は”10x”もしくは”x01”（ｘは”0”,”1”の任意のビット）となり、これは”010”となり得ないからである。よって、実施例4の最悪値として、WLn-1が”010”でかつ”x0x”となる箇所が、しきい値２と等しい数すべてなっている場合で、かつ、ビットシフトおよび2ビットシフト、3ビットシフト、4ビットシフト、…qビットシフトによって、最悪状態数が減少しない場合を仮定する。0ビットシフトから(0+2)ビットシフトまでで共に最悪状態数が減少しないので、WLn-1の”010”の箇所に対応したWLnビットの1ビットシフトパターンが”000”となる必要がある。さらに、1ビットシフトから(1+2)ビットシフトまでで共に最悪状態数が減少しないので、WLn-1の”010”の箇所に対応したWLnビットの2ビットシフトパターンが”000”となる必要がある。しきい値２を実施例３の{(k/6)を整数に切り上げた値}-1とした場合、”01010101．．．．01010”が(k/3)-1が最小値なので、最悪状態数で”WLn”の”010”に対向した部分のパターンは、”00000000．．．．0000”の(k/3)-1＋(q-2)ビットの連続パターンになる。よって、実施例1の変換を行う議論と同様に考察すれば、q>=[(k/6)を切り上げた整数+8]とすれば、(k/2)+5ビット以上が”00000000．．．．0000”となり、残りビットで”010”,”101”の含まれる数は、いずれも、最大{(k/4)を整数に切り上げた値}-3以下になる。よって、実施例２のしきい値を用いた場合には、WLnの情報ビットの全ビット反転をしても、その中の”010”シンボルは最大{(k/4)を整数に切り上げた値}-3以下に抑えることが出来ることに加えて、WLn-1の”010”の箇所に対応したWLnをビット反転により”0”から”1”にすることができるので、端状態による”010”の1状態増加があったとしても上記仮定と矛盾する。つまり、qビットシフトをq>=[(k/6)を切り上げた整数+8]とすれば、WLn-1が”010”でかつ、WLnの”x0x”となる上限箇所をシフトしない場合よりも抑制することができる。なお、実施例３の変換の場合には、少なくともq>=15とすれば、最悪状態数で”WLn”の”010”に対向した部分のパターンは、”00000000．．．．0000”の(k/3)-1＋(q-2)>=(k/3)+12とすることができ、実施例３の議論と同様に行えば、WLn-1が”010”でかつ、WLnの”x0x”となる上限箇所をシフトしない場合の最悪上限値よりも抑制することができる。
【０２１８】
勿論、上記のように、WLn-1にて”010”が連続して”0101010”のように配置されている場合よりも、”010”が分散して離れて配置された場合の方が、ｑ以下のビットのシフトにて、WLnの”x0x”となる上限箇所を減少させることができる。
【０２１９】
以上より、本実施例４の符号変換（偶数奇数ビット変換）を行う前に、本変形例において、先に巡回シフトをqビット行い、WLn-1が”010”でかつ、WLnの”x0x”となる最小個数を求めて条件となるシフト数を決め、データを巡回シフトしておくことにより、WLn-1が”010”でかつ、WLnの”x0x”となる上限箇所を減少させることができる。また、これに対して、実施例３と同様に情報ビットにシフト数qとして、[log2(q+1)を切り上げた整数]のフラグに相当するビットを付加して符号化すればよい。復元は、SE44でフラグビットを分離する際、同様に巡回シフト数ｑを符号から分離して、SE50にて、図17(f)で、(k-q)ビット分クロックφ１、φ２に予め先に0V⇒Vcc⇒0Vのパルスを入力しておくことで、容易に復元することができる。
【０２２０】
勿論本変形例でも、WLnの復元の際にはWLn-1の読み出しの必要がなく、読み出し時のWLn-1のビット誤りによって、直接ビット誤りすることがなく、高速読み出しを実現できる。
【０２２１】
［実施例５（MONOS型に適用した場合の一例）］  
次に、実施例５に係るデータ記憶システムについて、図２４ａ，図２４ｂを用いて説明する。この実施例５は、実施例1から実施例４までの浮遊型ゲートを用いたNANDセルアレイブロック49をMONOS型ゲートを用いたNANDセルアレイブロックに変更したものである。この説明において、上記実施例と重複する部分の詳細な説明を省略する。
【０２２２】
図24(a),(b)はそれぞれ、図6(a),(b)に対応するNANDセルアレイブロックのB-B'、およびA-A'に対応する断面図である。なお、平面図は、図5(b)と同一なので、省略する。
【０２２３】
図24は例えば、SiNやSiONを電荷蓄積電極26としたMOSトランジスタからなる不揮発性メモリセルM0〜M31が直列に接続され、一端が選択トランジスタS1を介してBLと記してあるデータ転送線に接続されている。また他の一端は選択トランジスタS2を介してSLと記してある共通ソース線に接続されている。また、それぞれのトランジスタは、同一のウェル上に形成されている。図24において、例えばボロン不純物濃度が1014cm-3から1019cm-3の間のp型シリコン領域23に、例えば、1から10nmの厚さからなるシリコン酸化膜またはオキシナイトライド膜からなるトンネルゲート絶縁膜を介して、例えばSiN、SiONからなる電荷蓄積層26が3nmから50nmの厚さで形成されている。この上に、例えば、厚さ2nmから20nmの間のシリコン酸化膜や、Al2O3、HfSiO、ZrSiO、HfSiON、またはZrSiONからなる層間絶縁膜50を介して、例えばポリシリコンやWSi（タングステンシリサイド）とポリシリコンとのスタック構造、または、NiSi,MoSi,TiSi,CoSiとポリシリコンのスタック構造、TaN、TiNのバリアメタルおよび積層構造からなる制御ゲート27が10nmから500nmの厚さで形成されている。この制御ゲート27は、図5(b)において隣接するメモリセルブロックで接続されるように紙面左右方向にブロック境界まで形成されており、データ選択線WL0〜WL31および、選択ゲート制御線SSL,GSLを形成している。なお、p型シリコン領域23は、n型シリコン領域22によってp型半導体基板21と独立に電圧印加できるようになっていることが、消去時の昇圧回路負荷を減らし消費電力を抑えるためには望ましい。本実施例のゲート形状では、半導体領域23の側壁が絶縁膜24で覆われているので、電荷蓄積層26を形成する前のエッチングで露出することがなく、電荷蓄積層26が半導体領域23よりも下に来ることを防ぐことができる。よって、半導体領域23と絶縁膜24との境界での、ゲート電界集中やしきい値低下した寄生トランジスタが生じにくい。さらに、電界集中に起因する書込みしきい値の低下現象、いわゆる、sidewalk現象が生じにくくなるため、より信頼性の高いトランジスタを形成することができる。
【０２２４】
これらゲート電極の両側には、例えば5nmから200nmの厚さのシリコン窒化膜またはシリコン酸化膜からなる絶縁膜43を挟んでソースまたはドレイン電極となるn型拡散層28が形成されている。これら拡散層28と電荷蓄積層26、制御ゲート27により、M-ONO-S型不揮発性EEPROMセルが形成されており、電荷蓄積層のゲート長としては、0.5um以下0.01um以上とする。これらソースドレインn型拡散層28としては、例えばリンや砒素、アンチモンを表面濃度が1017cm-3から1021cm-3となるように深さ10nmから500nmの間で形成されている。さらに、これらn型拡散層28はメモリセル同士で直列に接続され、NAND接続が実現されている。また、図において、27SSL、さらに、27GSLは、それぞれSSLおよびGSLに相当するブロック選択線に接続されたゲート電極であり、前記MONOS型EEPROMの制御電極と同層で形成されている。これらゲート電極は、例えば3から15nmの厚さのシリコン酸化膜またはオキシナイトライド膜からなるゲート絶縁膜25SSLおよび25GSLを介してp型ウェル23と対向し、MOSトランジスタを形成している。ここで、ゲート電極27SSLおよび27GSLのゲート長は、メモリセルゲート電極のゲート長よりも長く、例えば、1um以下0.02um以上と形成することにより、ブロック選択時と非選択時のオンオフ比を大きく確保でき、誤書き込みや誤読み出しを防止できる。
【０２２５】
また、27SSLの片側に形成されたソースまたはドレイン電極となるn型拡散層28dは、例えば、タングステンやタングステンシリサイド、チタン、チタンナイトライド、またはアルミニウムからなるデータ転送線36(BL)とコンタクト31dを介して接続されている。ここで、データ転送線36(BL)は、隣接するメモリセルブロックで接続されるように図5(b)の紙面上下方向にブロック境界まで形成されている。一方、27GSLの片側に形成されたソースまたはドレイン電極となるn型拡散層28Sは、コンタクトコンタクト31sを介してソース線となるSLと接続されている。このソース線SLは、隣接するメモリセルブロックで接続されるように図5(b)の紙面左右方向にブロック境界まで形成されている。勿論、n型拡散層28Sを紙面左右方向にブロック境界まで形成することにより、ソース線としてもよい。これらBLコンタクト、および、SLコンタクトとしては、例えばn型またはp型にドープされたポリシリコンやタングステン、およびタングステンシリサイド、Al、TiN、Ｔiなどが充填されて、導電体領域となっている。さらに、これらSLおよびBLと、前記トランジスタとの間は、例えばSiO2やSiNらなる層間膜28によって充填されている。さらに、このBL上部には、例えばSiO2、SiN、または、ポリイミドらなる絶縁膜保護層37や、図には示していないが、例えば、W,AlやCuからなる上部配線が形成されている。
【０２２６】
本実施例では、実施例1,2,3,4の効果に加え、MONOS型セルを用いているため、実施例1,2,3,4の浮遊ゲート型EEPROMセルよりも書き込み電圧および消去電圧を低電圧化することができ、素子分離間隔を狭めゲート絶縁膜厚を薄膜化しても耐圧を維持することができる。よって、高電圧が印加される回路の面積を小さくでき、よりチップ面積を縮小することができる。
【０２２７】
さらに、実施例1,2,3,4と比較して、電荷蓄積層26の厚さを20nm以下に小さくでき、よりゲート形成時のアスペクトを低減でき、ゲート電極の加工形状を向上させ、層間絶縁膜28のゲート間の埋め込みも向上させることができ、より耐圧を向上させることができる。また、浮遊ゲート電極を形成するためのプロセスやスリット作成プロセスが不要であり、よりプロセス工程を短くすることができる。
【０２２８】
また、電荷蓄積層26が絶縁体で、１つ１つの電荷トラップに電荷が捕獲されているので、放射線に対して電荷が抜けにくく強い耐性を持たせることができる。さらに、電荷蓄積層26の側壁絶縁膜43が薄膜化しても、電荷蓄積層26に捕獲された電荷がすべて抜けてしまうことなく良好な保持特性を維持できる。さらに、電荷畜積層26が半導体領域23と合わせずれなく形成することができ、より均一な電荷蓄積層と半導体領域23との容量を実現できる。これにより、メモリセルの容量ばらつきやメモリセル間の容量ばらつきを低減することができる。
【０２２９】
［実施例６（NOR型に適用した場合の一例）］  
次に、実施例６に係るデータ記憶システムについて、図２５を用いて説明する。この実施例６は、実施例1から5のNANDセルアレイブロック49をNORセルアレイブロックに変更したものである。この説明において、実施例1から実施例5と同一の部分には、同一符号をつけて詳しい説明は省略する。また、実施例1から実施例5において、実施例の限定無く詳述している同一の効果については、説明は省略する。
【０２３０】
図25(a)、(b)、(c)、(d)はそれぞれ、NORセルアレイブロックの回路図、平面図、ロウ方向メモリセル部断面図、およびカラム方向メモリセル断面図である。図25(a)は電荷蓄積層電極を有するMOSトランジスタからなる複数の不揮発性メモリセルM0〜M2が電流端子を並列に接続され、一端がBLと記してあるデータ転送線に接続されている。また他の一端は共通ソース線SLに接続されている。NORメモリセルでは１つのトランジスタによってメモリセルブロック49が形成されている。また、それぞれのトランジスタは、同一のウェル上に形成されている。それぞれのメモリセルM0〜M1の制御電極は、WL0〜WL1と記したデータ選択線に接続されている。さらに、図25(b)、図25(c)、図25(d)は、メモリセルブロック49の平面図、矢視B-B'方向断面図、矢視A-A'方向断面図である。特に、図25(b)では、セル構造をわかりやすくするために、ゲート電極27よりも下の構造のみを示している。図25(c)、図25(d)において、例えば、3から15nmの厚さからなるシリコン酸化膜またはオキシナイトライド膜25から形成されたトンネルゲート絶縁膜を介して、例えばリンまたは砒素を1018cm-3から1021cm-3添加したポリシリコンからなる電荷蓄積層26が10nmから500nmの厚さで形成されている。これらは、例えば、シリコン酸化膜からなる素子分離絶縁膜24が形成されていない領域上に、p型シリコン領域23上に形成されている。
【０２３１】
この上に、例えば、厚さ5nmから30nmの間のシリコン酸化膜またはオキシナイトライド膜、またはシリコン酸化膜/シリコン窒化膜/シリコン酸化膜からなるブロック絶縁膜50が形成されている。これらは、例えば、シリコン酸化膜からなる素子分離絶縁膜24が形成されていない領域に、p型シリコン領域23上に形成されている。
【０２３２】
さらに、ポリシリコン、または、WSi（タングステンシリサイド）とポリシリコンとのスタック構造、または、CoSiとポリシリコンのスタック構造からなる制御ゲート27が10nmから500nmの厚さで形成されている。この制御ゲート27は、図25(b)において隣接するメモリセルブロックで接続されるように紙面左右方向にブロック境界まで形成されており、データ選択線WL0〜WL2を形成している。なお、p型シリコン領域23は、n型シリコン領域22によってp型半導体基板21と独立に電圧印加できるようになっていることが、消去時の昇圧回路負荷を減らし消費電力を抑えるためには望ましい。
【０２３３】
図25(d)に示すように、メモリセルに相当するA-A'断面においてこれらゲート電極の下には、例えば5nmから200nmの厚さのシリコン酸化膜またはオキシナイトライド膜からなる層間絶縁膜56を挟んでソースまたはドレイン電極となるn型拡散層28が形成されている。これら拡散層28、電荷蓄積層26、および制御ゲート27により、電荷蓄積層に蓄積された電荷量を情報量とする浮遊ゲート型EEPROMセルが形成されており、そのゲート長としては、0.5um以下0.01um以上とする。図25(b)および図25(d)のように、BLと接続されたn型拡散層28dと対となるｎ型拡散層28は、図25(b)の紙面左右方向に伸びて隣接するメモリセルを接続するソース線SLとなっている。このようなNOR型セルでも、SLを挟んでデータ転送線方向や、データ選択線方向に隣接するメモリセルの電荷蓄積層間が絶縁膜で形成されているため、電荷蓄積層間の容量結合によるしきい値変動が生じる。よって、例えば、図25(a)のM1aとM2aのように、ソース線を挟んだ２つの隣接するセルについて、それぞれのビットごと書き込みを行い、1連の情報ビット列として記憶または読み出しを行う場合には、実施例１から4までに説明した実施例を、書き込みおよび読み出した情報ビット列に適用することによって、電荷蓄積層間の容量結合によるしきい値変動を抑えることができる。
【０２３４】
また、図25(a)に示すように、M1aとM1bと、またはM1aとM1b’のように、ロウ方向に隣接する２つのメモリセル間も絶縁膜によって埋め込まれているので、電荷蓄積層間の容量結合によるしきい値変動が生じる。よって、例えば、図25(a)のM1aとM1bと、またはM1aとM1b’のように、ロウ方向に隣接する２つの隣接するメモリセルについて、それぞれのビットごと書き込みを行い、1連の情報ビット列として記憶または読み出しを行う場合には、実施例１から4までに説明した実施例を、書き込みおよび読み出した情報ビット列に適用することによって、電荷蓄積層間の容量結合によるしきい値変動を抑えることができる。
【０２３５】
［実施例７（Virtual Ground(仮想接地）のMONOS型に適用した場合の一例）］  
次に、実施例７に係るデータ記憶システムについて、図２６、図２７、図２８を用いて説明する。この実施例７は、実施例1から5までのNANDセルアレイブロック49をMONOS構造で形成されたVirtual Ground(仮想接地）セルアレイブロック49に変更したものである。この説明において、実施例1から実施例6と同一の部分には、同一符号をつけて詳しい説明は省略する。また、実施例1から実施例6において、実施例の限定無く詳述している同一の効果については、説明は省略する。
【０２３６】
図26(a)にNANDセルアレイのマトリックス1と、図26(b)にNROMセルアレイのマトリックス１の配線関係を示す。図26(b)に示すように、不揮発性メモリセルを並列接続したメモリセルブロック49を配列して構成される。このメモリセルアレイ1のデータ転送線のデータをセンスし、あるいは書き込みデータを保持するためにセンスアンプ回路46がたとえば、データ転送線選択トランジスタQ1a、Q2a...Q1k,Q2kを介して設けられている。このセンスアンプ回路は、例えばフリップフロップ回路を主体として構成される。さらに、センスアンプ回路46は、データ入出力バッファ45に接続されている。これらの接続は、アドレスバッファ47からアドレス信号を受けるカラムデコーダ48の出力によって制御され、データ入出力バッファに与えられたデータをメモリセルアレイ1に書き込み、およびデータを第2の内部I/O線へ読み出し可能となっている。メモリセルアレイ1に対して、メモリセルの選択を行うため、具体的にはデータ制御線WL0〜WL2、およびデータ転送線選択トランジスタsel1,sel2の制御をするために、ロウデコーダ3が設けられている。
【０２３７】
図27および図28はそれぞれVirtual Groundアレイブロックのロウ方向、およびカラム方向のメモリセル部断面図で、それぞれ２つのメモリセルが接続された構造を示している。図27は実施例7のMONOSメモリの断面図で、制御電極でゲート電極8が接続された2つのメモリセルについて示している。また、図28は、ゲート電極を通る図27と直交した断面での断面構造を示している。
【０２３８】
本実施例では、ゲート電極8に接続されるデータ制御線(11や8'に相当）の形成方向とチャネルの形成方向が一致している。さらに、本実施例では、メモリセルのそれぞれのソースおよびドレイン電極近傍に電荷を蓄積させ、1セルあたり少なくとも2bitの情報を記憶するように形成されている。このような構造で、ソース電極およびドレイン電極の電圧の方向により、例えば、米国特許6,201,282で公知な方法で、それぞれのビットを読み出すことができる。この場合、情報を読み出さない側のビットと情報を読み出すビットの電流端子は直列接続されていることと等価なので、情報を読み出さない側のビットはNAND型メモリセルと同様なread disturbストレスが印加される。よって、情報を読み出さない側のビットは、読み出しを繰り返すことにより消去状態から書きこみ状態に変化する。
【０２３９】
この構造でも、データ転送線方向およびデータ選択線方向に絶縁膜を解して電荷蓄積領域26が隣接して形成されているので、複数の隣接するメモリセルに同時に情報を書き込む場合には、隣接メモリセルによる容量結合によりしきい値変動が生じる。実施例１から実施例４までの第二の符号化の効果を得ることができる。図27および図28において、例えば、ボロンまたはインジウム不純物濃度が1014cm-3から1019cm-3の間のp型シリコン半導体領域23に、例えば、0.5nmから10nmの厚さからなるシリコン酸化膜またはオキシナイトライド膜からなる第一の絶縁膜25が形成されている。さらに、第一のゲート絶縁膜の上部には、例えばシリコン窒化膜からなる電荷蓄積層26が3nmから50nmの厚さで形成されている。この上に、例えば、厚さ5nm以上で、30nm以下の厚さでシリコン酸化膜またはオキシナイトライド膜、Al2O3、ZrSiO、HfSiO、ZrSiONまたはHfSiONからなるブロック絶縁膜（第二の絶縁膜）50を介して、例えば、ボロンまたはリン、砒素が1x1019cm-3から1x1021cm-3の範囲で不純物添加されたポリシリコン層51および27が10nmから500nmの厚さで形成されている。ここで、ポリシリコン層51および27のボロン,リン、または砒素の濃度は1x1019cm-3以上とすることが、制御電極の空乏化によって、ONO積層膜にかかる電界が小さくなり、消去時間または書きこみ時間が増大するのを防ぐのに望ましい。
【０２４０】
さらに、例えば、このポリシリコン27上に、または、WSi（タングステンシリサイド）または、NiSi,MoSi,TiSi,CoSi、W、Al,AlCuからなる制御ゲートの金属裏打ち層27'が10nmから500nmの厚さで形成されていても良い。これらポリシリコン層51が制御電極を形成し、金属裏打ち層27'が制御電極を低抵抗化している。
【０２４１】
また、この金属裏打ち層の上には、例えば、シリコン窒化膜やシリコン酸化膜からなる絶縁膜60が5から500nmの厚さで形成されていてもよい。これは、ゲート電極加工時のマスクとなる絶縁膜として機能する。さらに、これらゲート電極の両側には、シリコン酸化膜またはシリコン酸窒化膜からなる側壁絶縁膜19が形成されている。この側壁絶縁膜19の少なくともゲート電極51に接する側面は、堆積膜で形成した絶縁膜よりも電荷トラップ密度を小さく、絶縁耐圧(dielectric breakdown voltage)を高く、かつゲート電極51と絶縁膜19との間の界面準位密度を低くするために、シリコンを含むゲート電極51の酸化または酸窒化によって形成されている。このように、ゲート側壁に堆積膜よりも品質の高い熱酸化膜を用いることが可能である。
【０２４２】
図27において、ソース領域およびドレイン領域28上で電荷蓄積膜26が一部取り除かれ、例えばシリコン酸化膜からなる素子分離絶縁膜12が形成されている例が挙げられているが、電荷蓄積層26が絶縁体で形成されているために、ソース領域およびドレイン領域28上で電荷蓄積膜26を取り除く必要は必ずしもなく、連続的に形成されていても構わない。
【０２４３】
図27の形状は、例えば次のような手順で形成することができる。例えば、金属裏打ち層27'を形成せずに、シリコンを含むゲート電極材51を積層し、第一の絶縁膜25に達するまで紙面表裏方向が長手となるような線状にパターンニングし異方性エッチングを行い、ゲート電極材51、第二の絶縁膜50、電荷蓄積層26、第一の絶縁膜25を取り除く。この後、側壁絶縁膜19をゲート電極51の酸化または酸窒化により形成し、ソース領域およびドレイン領域となるn型層28を、例えばリンや砒素、アンチモンを表面濃度が1017cm-3から1021cm-3となるように深さ10nmから500nmの間でイオン注入して形成する。この後、全面に絶縁膜68となるシリコン酸化膜、シリケートガラス、または無機ガラスを10nmから1000nmの厚さの範囲で堆積した後、例えばCMP（Chemical Mechanical Polishing)によって絶縁膜68を平坦化し、さらに、ゲート電極51の上部表面を例えばフッ化アンモニウム溶液などのウェットエッチングによって露出させる。この後、制御電極となる例えばポリシリコンやSiGe混晶からなる第二のゲート電極材27を10nmから300nmの範囲で堆積し、さらに、金属裏打ち層27',さらに、マスク絶縁膜60を全面堆積する。ここで、第二のゲート電極材27のボロン,リン、または砒素の濃度は1x1019cm-3以上とすることが、制御電極の空乏化によって、ONO積層膜にかかる電界が小さくなり、消去時間または書きこみ時間が増大するのを防ぐのに望ましい。ついで、メモリセルにおいて、図27のパターンと直交する方向に線状にパターニングし、異方性エッチングを行い、マスク絶縁膜60、金属裏打ち層27'、第二のゲート電極材27,およびゲート電極材51、第二の絶縁膜50までエッチングを行う。この後、図28で示した２つのゲート電極51で示されるメモリセルのチャネル間の漏れ電流を少なくするために、例えば、ボロンかBF2、インジウムを表面濃度が1016cm-3から1018cm-3となるように深さ10nmから500nmの間になるようにイオン注入して、p型層18を形成しても良い。さらに、全面に、シリコン窒化膜かシリコン酸窒化膜、またはアルミナ膜からなる絶縁膜61を例えば、厚さ5nmから200nmの範囲で形成する。
【０２４４】
この絶縁膜61は、例えばCVD(Chemical Vapor Deposition)法やスパッタ法で形成された堆積絶縁膜である。また、メモリセルに対して全面堆積されていることが、絶縁膜61より上方に形成された膜からのガスまたはラジカル、イオンがメモリセルに悪影響を及ぼすのを防ぐことができ望ましい。
【０２４５】
さらに、絶縁膜61の上方には、例えば、ボロンまたはリンを1x1020cm-3以上含むBPSG,PSG、BSGといったシリケートガラスからなる層間絶縁膜62が10nmから1000nmの厚さの範囲で形成されている。このシリケートガラスはアルカリイオンをゲッタリングする機能があり、メモリセル上方全面に形成されることがアルカリイオンによる汚染を防ぐためには望ましい。図27,28では、層間絶縁膜62は絶縁膜61に直接接して形成されているが、必ずしも接して形成される必要はなく、例えば配線層間の絶縁膜や配線層上の絶縁膜として形成しても、前記ゲッタリングの効果はあるので構わない。
【０２４６】
また、シリケートガラスは一般的に堆積直後の埋め込み性が悪いので、堆積後に、例えば750℃から1000℃の間で2分から120分の範囲でアニールすることにより粘性流動させ平坦化させる。このアニールの際にシリケートガラスに含まれる水分またはヒドロニウムイオンが遊離するが、絶縁膜61を形成することにより、この水分によりメモリセルのゲート端が酸化されてしまいゲート電極51端のブロック酸化膜が厚膜化し、形状が変化してしまうのを防ぐことができる。
【０２４７】
また、層間絶縁膜62としては、例えば、シクロペンタシランまたはポリシラザンから形成された無機ガラスを用いてもよい。この場合、シクロペンタシランまたはポリシラザンを無機ガラスに転換するためには酸化工程が必要であるが、この酸化剤がメモリセルのゲートエッジ部分を酸化してまうためにゲート電極8端のブロック酸化膜が厚膜化し形状が変化してしまう問題を、膜61を形成することによって防ぐことができる。なお、膜62は例えばTEOSやHDPによって形成したシリコン酸化膜やHSQなどの他の層間膜との積層構造を用いてもよい。
【０２４８】
さらに、層間絶縁膜62の上方には、例えば、W,Al、AlCuやCuからなる上部配線36が形成されている。本例では、特許の構成要件として重要でないので配線層として1層のみを示したが、勿論、多層配線構造を積層してもよい。さらに、その上には、例えば、TEOSやHDPによって形成したシリコン酸化膜やHSQという層間絶縁膜37を介してプラズマ化学気相成長法で堆積したシリコン窒化膜層37'が20nmから1umの範囲で全面堆積されている。このシリコン窒化膜層は、チップ外部（上面）から拡散してくる水分をブロックする機能がある。
【０２４９】
本実施例では、実施例1-4の効果に加え、さらに少なくとも以下の効果（３）乃至（４）が得られる。
【０２５０】
（３）ソース領域およびドレイン領域28が形成される方向（図27では紙面表裏方向)と直交して制御電極27(図27では紙面左右方向）が形成されており、隣接するメモリセルのソース電極およびドレイン電極を並列接続する構造、例えば、Virtual  Ground  Array型を実現している。
【０２５１】
そのため、メモリセルブロックの直列抵抗を小さく一定とすることができ、多値化した場合のしきい値を安定させるのに向いている。
【０２５２】
また、素子分離膜12とソース領域およびドレイン領域28、および電荷蓄積層26を自己整合的に形成することができるので、それらの層間での合わせずれの余裕を確保する必要がなく、より高密度なメモリセルが実現できる。これらアレイ構成や効果については、例えば、当発明者らによる先行出願である特願2001-264754に記載されているので、ここでは省略する。
【０２５３】
（４）本実施例では、実施例1,2の特長に加え、MONOS型セルを用いているため、実施例1,2の浮遊ゲート型EEPROMセルよりも書き込み電圧および消去電圧を低電圧化することができ、素子分離間隔を狭めゲート絶縁膜厚を薄膜化しても耐圧を維持することができる。よって、高電圧が印加される回路の面積を小さくでき、よりチップ面積を縮小することができる。さらに、実施例1,2と比較して、電荷蓄積層26の厚さを20nm以下に小さくでき、よりゲート形成時のアスペクトを低減でき、ゲート電極の加工形状を向上させ、層間絶縁膜62のゲート間の埋め込みも向上させることができ、より耐圧を向上させることができる。また、浮遊ゲート電極を形成するためのプロセスやスリット作成プロセスが不要であり、よりプロセス工程を短くすることができる。また、電荷蓄積層26が絶縁体で、１つ１つの電荷トラップに電荷が捕獲されているので、放射線に対して電荷が抜けにくく強い耐性を持たせることができる。
【０２５４】
［実施例８］  
本発明の実施例８は、実施例４よりもさらに、”010”の連続シンボルが生じたWL（n-1）部分の真中の”1”ビットM1a(α)と、これから書き込みをするWLn内に形成された隣接するビットのM2a(ε)が書き込みビット”0”であることを、例えば、個数0まで大幅に減少させることができる一例に関するものである。なお、本実施例は、実施例1から3と独立に行うこともできるが、実施例１から３と同じ効果、つまり、隣接メモリセルの容量干渉の影響を緩和する効果があるので、組み合わせて用いるのが最も望ましい。実施例1や実施例2、実施例３と同一の部分や同一の動作部分には、同一符号をつけて詳しい説明は省略する。本実施例は実施例１から３のどの実施でも適用することができるが、ここでは、最も効果が高い実施例３についての適用例を説明する。
【０２５５】
＜構成例＞
全体構成例  
まず、本例に係る全体構成例として、図３０に実施例のデータ記憶システムのブロック図を示す。この実施例では実施例4の図21と同様に、書き込みを行うメモリセルに対してWL方向に隣接したメモリセル、特に、既に書き込んだメモリセルを含むワード線（データ選択線）の情報ビットのしきい値を記憶するページバッファ115をさらに有している。また、ページバッファ114としては、本実施例では、情報ビットの並べ替えを行うページバッファとする。これは、ページバッファ114に記録されたビットを消去ビットに変更できれば良く、図16で説明したページバッファで容易に実現することができる。さらに、ページバッファ115および114としては、実施例４よりも、情報ビットに加えて、セルの容量干渉の影響を緩和するための符号ビットを追加することが異なっている。これは、例えば実施例3では情報ビットと合わせて1+1/(6-1)倍の符号長を準備すればよい。また、実施例1および実施例2では、情報ビットと合わせて、1+1/(4-1)倍の符号長と準備すればよい。
【０２５６】
図示するように、符号変換回路は、書き込みを行う第1のページに、物理的に隣接した第2のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出し、この第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内にある、消去ビットに隣接する第1ページのビットを出力する第5の回路を有する。この第5の回路が書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出した場合に、この第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内の消去ビットに隣接する第1のページのビットを消去ビットと置き換え、符号化した情報ビットを生成する。また、第5の回路の1連の第1ページの出力を第2の符号とし、この第２の符号を第2のページの符号化した情報ビットに付加して、第二の情報ビットを生成する符号発生手段と、第二の情報ビットを入力として、物理的に隣接した第2のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出した場合に、この第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内の消去ビットに隣接する第1ページのビットを、第二の符号の一連のビットと置き換える復号手段を有する。
【０２５７】
本実施例の図３０では、さらに、隣接メモリセルディスターブ低減第二符号変換回路104に書き込みを行う第1のページに、物理的に隣接した第2のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出し、この第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内にある、消去ビットに隣接する第1ページのビットを出力する第5の回路が含まれているものである。
【０２５８】
第５の回路の構成例  
図３１を用いて、本例に係る第５の回路の構成例を示す。図示するように、基本的に図22のシンボルカウンタ116,117への出力する回路の構成要素を、第５の回路例の出力する回路として用いていており、同じ機能の部分は同じ符号をつけて説明を省略する。第５の回路は、例えば、WL（n-1)="010"でWLn="x1x"となる出力、および、WL（n-1)="010"でWLn="x0x"となる出力は、図３１のように、WLnの情報ビットの初めから、一連の情報ビットを順に時系列にて208からなる一単位時間遅延回路に入力し、WLn-1で”010”連続する3ビットのシンボルの真中のビットがWLnで"1”になる数を検出する回路と、”0”になる数を検出回路する回路とを組み合わせることにより、容易に実現することができる。
【０２５９】
図中の出力２では、WLn-1が”010”が順に入力された単位時間において、WLn-1が”010”になり、かつ、WLnが”x0x”となった場合、WLn-1の”010”最後の”0”が入力された単位時間で、出力が一単位時間”L”から”H”となり、他の場合には”L”となる。また、図中の出力１では、”010”が順に入力された単位時間において、WLn-1が”010”なり、かつ、WLnが”x1x”となった場合、WLn-1の”010”最後の”0”が入力された単位時間で、出力が一単位時間”L”から”H”となり、他の場合には”L”となる。ここで、WLn-1の情報ビットが入ったページバッファ115から、上記WLnの情報ビット入力と同期させて情報ビットの初めから一連の情報ビットを順に時系列にて入力させるものとする。
【０２６０】
さらに、図中の出力３として、書き込みを行う第1のWLnのページに、物理的に隣接した第2のWL(n-1)のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出し、前記第2のWL(n-1)のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内にある、消去ビットに隣接する第1のWLnページのビットを出力する。この出力３を出力する回路では、”010”が順に入力された単位時間において、WLn-1が”010”なり、WLn-1の中央の消去”1”ビットに対応する、WLnビットが出力される。これには、図示するように、インバータ209、および、NMOSトランジスタ215、PMOSトランジスタ216で形成されたバイラテラルゲートを用いれば、容易に形成できる。
【０２６１】
さらに、図３１の出力４は、”010”が順に入力された単位時間において、WLn-1が”010”なった場合、WLn-1の”010”最後の”0”が入力された単位時間で、出力が一単位時間”L”から”H”となり、他の場合には”L”となる。
【０２６２】
さらに、上記図３０では、この第五の回路から出力されたビットを第二の符号の並びとし、第２の符号を記憶するバッファ188を有する。この出力４をトリガとして、出力３を順にバッファ188に保持することによって、第二の符号を保持することができる。
【０２６３】
なお、ここで第5の回路を含む隣接メモリセルディスターブ低減第二符号変換回路104は、ブロック図としては、実施例4の図21の隣接メモリセルディスターブ低減第二符号変換回路と同じブロック図ではあるが、上記のような第五の回路を含むことを特徴とする。
【０２６４】
ページバッファメモリの構成および動作例  
さらに、図３２（ａ）、（ｂ）を用いて、ページバッファメモリの回路および動作例を示す。図３２（ａ）に示すように、aaビット長の第二の符号ビットを一時記憶するページバッファ11の例を示している。本例ではD型フリップフロップ208を直列にｋ段接続し、最終段の出力を、n型トランジスタ215とp型トランジスタ216、およびインバータ209からなる双方向スイッチ回路（bi-lateral switching circuit)によって、接続している。なお、本例のD型フリップフロップ208としては、クロック入力が"L"（ここでは便宜的に0[V]とする）から"H"(ここでは便宜的にVccとする）に立ち上がる瞬間に出力が確定し、それ以後はクロックが"H"のままでも"L"のままでも"H"から"L"へ変化しても出力は変化しないエッジトリガー(edge trigger)型のフリップフロップとする。さらに、この双方向スイッチ回路は、データ出力制御入力が"H"の場合に、215と216の電流端子が導通状態となり、"L"の場合に遮断状態となる回路である。
【０２６５】
続いて、図３２（ｂ）にその回路の動作を示す。図示するように、D型フリップフロップにデータを記憶する場合には、まず、データ出力制御入力を"L"とし、フリップフロップ208の出力がデータ入出力線に出力されないようにする。さらに、データ入出力(I/O)線にVcc("H")か0V("L")のディジタルデータDin1を与えた後、クロックを"L"から"H"にする。これにより、Din1のデータが図３２(a)の最も左側のフリップフロップ208に保持される。ついで、データ入出力(I/O)線にVcc("H")か0V("L")のディジタルデータDin2を与えた後、クロックを"L"から"H"にする。これにより、Din1のデータが図３２(a)の左から2番めのフリップフロップ201に転送および保持され、最も左側のフリップフロップ208にDin2が保持される。後は、順次aa[bit]までデータ入出力(I/O)線にディジタルデータを与え、クロックを与えることにより、図３２(a)の右のフリップフロップから順にDin1,Din2...Dinaaのデータが保持され、aa[Bit]のデータを保持することができる。
【０２６６】
次に、本ページバッファ1からデータを読み出す動作を説明する。まず、データ出力制御入力を"H"とし、最も右側のフリップフロップ208の出力をデータ入出力線に出力する。これによりデータ入出力線にはDin1のデータと同じデータ（ここではDout1とする）が出力される。さらに、クロック入力をクロック"L"から"H"にする。これにより、左から右のフリップフロップに1ビットデータが転送および保持される。その結果、データ入出力線にはDin2のデータと同じデータ（ここではDout2とする）が出力される。後は、全部で(aa-1)回クロック入力をクロック"L"から"H"にすることにより、データ入出力(I/O)線に図３２(a)の右のフリップフロップから順にDin1,Din2...Dinaaのデータが出力され、aa[Bit]のデータを出力することができる。
【０２６７】
＜符号形成フロー＞  
次に、図３３を用いて、本実施例８に係る符号を形成する動作フローを説明する。なお、以下のWL(n-1),WL(n)は少なくとも1ビットの書き込みにビットを順にWL(n-1)、WL(n)と書き込むことし、nを自然数として順に書き込みを行うことにする。また、実施例３で説明したように、例えば、すでにWLｎの情報ビット中の書き込みビット/消去ビット/書き込みビットの連続並びを減らすための実施を行っていた方が、より、書き込みビット/消去ビット/書き込みビットの連続並びの上限を減らせるため望ましい。
【０２６８】
まず、SE201にて、第1の情報ビット内のビット位置を示すカウンタkkを1とする。さらに、チェックサム記録カウンタcsを0とする。また、バッファ188をあらかじめ”L”にリセットしておく。次いで、SE202にて、第一の情報ビットのkkの位置で、書き込みビット/消去ビット/書き込みビットの連続並びがあるか調べる。これには、図３１に示した第五の回路の出力４が”H”か”L”かを検出すればよい。
【０２６９】
次いで、SE203にて、書き込みビット/消去ビット/書き込みビットの連続並びが有るか判断を行い、無しの場合には、SE207にてカウンタkkの値を1増やす。次いで、SE208でカウンタkkの値に2加えた値が第一の情報ビットより大きいか判断する。ここで、SE208でNoの場合には、SE202に戻り、第一の情報ビットの次のビットについて書き込みビット/消去ビット/書き込みビットの連続並びが有るか調べる。
【０２７０】
一方、SE203にて、Yesの分岐の場合には、SE204にて、第一の情報ビットのWL(n-1)の書き込みビット/消去ビット/書き込みビットの連続ビット並びの消去ビットに隣接するWLnのビットを第五の回路の出力３から出力する。これを、SE205にてバッファ188に順に記憶することにより第二の符号を形成する。この際、さらに、チェックサムのカウンタcsに（kk+1)の値を加える。これは、WL(n-1)の書き込みビット/消去ビット/書き込みビット並びの消去ビットの位置を表す値、つまり、アドレスの値をcsに加えることを意味している。
【０２７１】
さらに、SE206にて、第1の情報ビットのWL(n-1)の書き込みビット/消去ビット/書き込みビットの連続ビット並びの消去ビットに隣接するWLnのビットを消去ビットに置き換える。これにより、WL(n-1)の書き込みビット/消去ビット/書き込みビットの並びの消去ビットに隣接するWLnのビットが書き込みビットとならない。この置き換えを行った後の符号を第一の符号とする。これにより、メモリセル容量干渉の大きなビットパターンの発生を防止することが出来る。この後、SE207のシーケンスに合流する。
【０２７２】
一方、SE208でYesの分岐の場合には、SE209で、バッファ188に記録された第2の符号について、第２の符号の長さを求める。これは、第二の符号を記憶するバッファの出力の”H”の数を数えることにより、第二の符号の長さを求められるのは明白である。
【０２７３】
さらに、チェックサムカウンタcsの値をチェックサムとして求めておく。ついで、前記第一の符号に、第二の符号、および前記チェックサムcs、および、第二の符号の長さの情報を加えたものを、第二の情報ビットとして作成する。これには、例えば、情報ビットの並べ替えを行うページバッファ114に第一の符号を記録しておき、第二の符号を記録するバッファ188の出力、前記チェックサムｃｓ、および第二の符号の長さの情報ビットを、ページバッファ114に第一の符号の後に記録されるように入力することにより作成することができる。
【０２７４】
ここで、例えば、すでにWLｎの情報ビット中の書き込みビット/消去ビット/書き込みビットの連続並びを減らすための実施を行っている場合には、図３４のように、第一の情報ビットにフラグ１相当情報、およびフラグ２相当情報が追加されたものに、第二の符号、および前記チェックサムcs、および、第二の符号の長さの情報を加えたものを、第二の情報ビットとして作成すればよい。なお、第二の符号、および前記チェックサムcs、および、第二の符号の長さの情報を加えたものを第二の追加符号と呼ぶことにする。
【０２７５】
本実施例では、まず、実施例4のように、WL(n-1)の”010”部分に隣接したWLnの情報ビットを500_1,500_2,500_3,....,500_c-2,500_c-1,500_cとする。この500_1,500_2,500_3,…., 500_c-2,500_c-1,500_cの総数は、実施例３では、{(k/6)を整数に切り上げた値}-1以下であり、実施例１または実施例２を同時に用いた場合には、{(k/4)を整数に切り上げた値}-1となる。
【０２７６】
ここで、500_1,500_2,500_3, ...., 500_c-2,500_c-1,500_cの情報ビットは、例えば、第一の情報ビットの左側から右側に順に並べてあるものとする。これは、右から左に順に並べてもよい。ついで、500_1,500_2,500_3, ...., 500_c-2,500_c-1,500_cの情報ビットを抽出し、500a_1,500a_2,500a_3,…., 500a_c-2,500a_c-1,500a_cとしてフラグ２相当情報の右側に第二の追加符号の1部として順に並べる。第一の情報ビットの左側から右側に順に並べるのが簡便で良いが、これは、右から左に順に並べてもよいし、500_1,500_2,500_3, ...., 500_c-2,500_c-1,500_cのｃ個の符号を1度ずつ巡回するような巡回符号を用いた一定の取り決めで並べ替えを行っても良い。
【０２７７】
さらに、上記で述べたように、第二の追加符号のこの部分の長さは、実施例３では、{(k/6)を整数に切り上げた値}-1以下であり、実施例１または実施例２を同時に用いた場合には、{(k/4)を整数に切り上げた値}-1となる。さらに、WLnの、500_1,500_2,500_3, ...., 500_c-2,500_c-1,500_cの情報ビット相当部分には、消去ビットである”1”で置き換える。これは、図３４で示す500b_1,500b_2,500b_3,…., 500b_c-2,500b_c-1,500b_cとする。これにより、第一の情報ビット中の、WL(n-1)の”010”部分に隣接したWLnの情報ビットを、すべて”1”とすることができる。よって、図２(iv)のような最悪の”010”に隣接する書き込みビット”0”の状態を、図３４のk-bitの第一の情報ビットの中では0個にすることができる。
【０２７８】
ここで、第二の追加符号では、第一の符号のWL(n-1)の”010”の符号列の”1”に対向した箇所の情報並びに対して、順に500a_1,500a_2,500a_3, ...., 500a_c-2,500a_c-1,500a_cと並べている。よって、復号には、WL(n-1)の第一の情報ビットの”010”の”1”の部分に対向したWLnの情報ビットを、例えば、左から数えて500a_1,500a_2,500a_3, ...., 500a_c-2,500a_c-1,500a_cで置換することにより復号できることは明らかである。
【０２７９】
ここで、本符号の形成法は、500_1,500_2,500_3, ...., 500_c-2,500_c-1,500_cのすべてのアドレスを記録するよりも符号長を短縮できるが、WL(n-1)の”010”の発生箇所が1つ消失、または、誤って発生した場合には、その復号化方法から、第二の追加符号のこの部分の長さだけ誤りが生じてしまう可能性がある。よって、特に、500_1,500_2,500_3, ...., 500_c-2,500_c-1,500_cに対抗するWL(n-1)の”010”箇所ついては誤り訂正ができることが望ましい。
【０２８０】
そこで、図３４に示すように、例えば、500_1,500_2,500_3, 500_4,…., 500_c-2,500_c-1,500_cの情報ビット相当部分の、例えば、情報ビットの左端から数えたアドレス、つまり何ビット目かを求め、そのアドレスの和を求めたもの、いわゆるチェックサム501を、第二の追加符号に追加してある。さらに、この500_1,500_2,500_3, 500_4, ...., 500_c-2,500_c-1,500_cの情報ビットの個数502を第二の追加符号に追加してある。
【０２８１】
例えば、図３４では、500_1は左端から数えて3ビット目、500_2は左端から数えて5ビット目、500_3は左端から数えて7ビット目に相当しており、これらのチェックサム501としては、3+5+7+．．．．＋(500_c-1の第一の情報ビットの左端からの位置)+（500_cの第一の情報ビットの左端からの位置）とすれば良い。また、第一の情報ビットのWL(n-1)の”010”の個数がｃ個の場合、情報ビットの個数502としては、ｃを用いれば良い。
【０２８２】
複合化シーケンス  
これらチェックサムと情報ビットの個数により、例えば、500_1,500_2,500_3, 500_4, ．．．．, 500_c-2,500_c-1,500_cの対向するWL(n-1)の”010”符号列の中で1ビット誤りが生じても、誤り訂正ができる。上記1ビット誤りを含む可能性の有る符号の復号化方法については、図３５のSE101からSE107によって示されるシーケンスによって、復号化される。
【０２８３】
ここで、例えば、まず、WL(n)の500_3が隣接する、WL(n-1)の”010”符号列が”011”や"000"、または”110”に1ビット誤りが生じたとする。ここでは、話を簡単に説明するために1ビット誤りを例に出したが、”010”の3連ビットを1ワードとし、”010”符号列が”111”など違うワードに変換された場合でも正しく復元ができる。
【０２８４】
上記”010”符号列に1ビット誤りが生じた場合、まず、第一の情報ビットのWL(n-1)の”010”パターンの個数の和から情報ビットの個数502の差を求める。例えば、この差を差Ａとする。差Ａが１か-1でない場合には、符号誤りがないかと判定し、前記第一の情報ビットのWL(n-1)の”010”の”1”の部分に対向したWLnの情報ビットを、例えば、左から数えて500a_1,500a_2,500a_3,…., 500a_c-2,500a_c-1,500a_cで置換することにより復号できる(SE107)。これは、勿論、符号化の時行った並べ方順にしたがって、元の情報ビットが復号できる順番に並べればよい。これら情報ビットの並べ方については、以下本実施例の変形例にも同様に用いることができる。
【０２８５】
また、差Ａが-1となる場合は、SE101でYesの分岐となり、500_1,500_2,500_4, ．．．．, 500_c-2,500_c-1,500_cの対向するWL(n-1)の”010”符号列内で1ワード誤りが生じ、WL(n-1)内の”010”符号列が１つ消失していることを示している。このSE101でのYesの分岐の場合、つまり、（チェックサム501）−｛WL(n-1)の”010”の符号列中の”1”の情報ビットの左端からの位置の和｝を取ることにより、WL(n-1)の”010”の符号列中の”1”の情報ビットの位置、つまり、この場合、500_3の情報ビットの位置を求めることができる(SE102)。よって、500_2の情報ビットと500_4の情報ビットと間の、500_3の情報ビットの位置にWL(n-1)の”010”の符号列に隣接する情報ビットが存在することが判るので、復号には、WL(n-1)の”010”の”1”部分に隣接したWLnの情報ビットに、500_3の情報ビットの位置を加えることにより、例えば、500b_1,500b_2,500b_3, ....．, 500b_c-2,500b_c-1,500b_cを左から数えて500a_1,500a_2,500a_3, ．．．．, 500a_c-2,500a_c-1,500a_cで置換することにより、正しく復号できる(SE103)。
【０２８６】
一方、例えば、WL(n-1)の”010”符号列以外の符号列が”010”というワードに変化する誤りが生じたとする。例としては、500_4の位置と500_5の位置の間のWL(n-1)の符号が”011”から”010”に変化したとする。
【０２８７】
上記”010”符号列以外の符号列に1ビット誤りが生じた場合、まず、情報ビットの中のWL(n-1)の”010”の符号列の個数の和から情報ビットの個数502の差を求めると、差Ａが1となる。この差Ａが1となる場合、つまり、SE104でYesの分岐の場合には、500_1,500_2,500_3,…., 500_c-2,500_c-1,500_cの対向する第一の情報ビットのWL(n-1)の符号列内で誤りが生じ、WL(n-1)内の”010”符号列が誤って１つ増大していることを示している。この増大した場合、｛WL(n-1)の”010”の符号列中の”1”の情報ビットの左端からの位置の和｝−（チェックサム501）を取ることにより、誤りを生じたWL(n-1)の”010”の符号列中の”1”の情報ビットの位置aを求めることができる(SE105)。よって、前記情報ビットの位置aに相当するWLnのビットは変更しないようにしてスキップする、つまり、この前記情報ビットの位置aに相当するWLnのビットを、WL(n-1)の"010"の符号列中の"1"に対向したWLnの情報ビット列から差し引くことにより、情報ビットを正しく復号できる。本例では、例えば、500_4の情報ビットと500_5の情報ビットと間の位置に第一の情報ビットのWL(n-1)符号が誤って”010”となったことが判るので、復号には、WL(n-1)の”010”の”1”対向したWLnの情報ビット500b_1,500b_2,500b_3, ．．．．, 500b_c-2,500b_c-1,500b_cを、例えば、左から数えて500a_1,500a_2,500a_3,…., 500a_c-2,500a_c-1,500a_cで置換することにより、正しく、復号できる(SE106)。
【０２８８】
これら説明した1ビットの誤りを修正するの復号方法は、上記のように、図３５に示すフローチャートに従い1ビット修正することができる。
【０２８９】
［実施例８に係る変形例］  
次に、図３６（ａ）、（ｂ）乃至図４０を用いて、上記実施例８に係る種々の変形例について説明する。この説明においては、上記実施例８と実質的に重複する部分の説明は省略する。
【０２９０】
まず、例えば、図３６（ａ）、（ｂ）では、WL(n-1)の中の”010”符号列が2箇所1ビット誤りを生じている場合に修正できる符号の構成法を示している。例えば、500_1,500_2,500_3,500_4,…., 500_c-2,500_c-1,500_cの情報ビット相当部分の、例えば、情報ビットの左端から数えたアドレス、つまり何ビット目かを求め、そのアドレスの和を求めたもの、いわゆるチェックサム501を、第二の追加符号に追加してある。
【０２９１】
さらに、この500_1,500_2,500_3, 500_4,…., 500_c-2,500_c-1,500_cの情報ビットの個数502を第二の追加符号に追加してある。さらに、例えば、情報ビットの左端から数えたアドレス、つまり何ビット目かを求め、そのアドレスの積を求めたもの、いわゆるチェック積503を、第二の追加符号に追加してある。
【０２９２】
さらに、図３６（ａ）、（ｂ）では、例えば、500_1は左端から数えて3ビット目、500_2は左端から数えて5ビット目、500_3は左端から数えて7ビット目に相当しており、これらのチェック積503としては、3x5x7x．．．．x(500_c-1の第一の情報ビットの左端からの位置)x（500_cの第一の情報ビットの左端からの位置）とすれば良い。また、500_1,500_2,500_3, 500_4, ．．．．, 500_c-2,500_c-1,500_cの情報ビットの場合、情報ビットの個数502としては、ｃを用いれば良い。
【０２９３】
これらチェックサムとチェック積、情報ビットの個数により、例えば、500_1,500_2,500_3, 500_4, ．．．．, 500_c-2,500_c-1,500_cの対向するWL(n-1)の”010”符号列の中で2ワード誤りが生じても、誤り訂正ができる。
【０２９４】
１ワードおよび２ワード誤り対向位置のビットを修正するシーケンス  
次に、本２ワード誤りを含む可能性の有る符号について、図３７および図３８のSE100からSE124によって示されるシーケンスによって復号するシーケンスを用いて説明する。ここで、例えば、”010”符号列が1ビット誤り生じたとする。この場合、実施例８と同様に図３５のSE100からSE106のシーケンスを用いれば、1ビット誤りを修正できる。
【０２９５】
次いで、WL(n-1)の中の”010”符号列が2箇所1ワード誤りを生じている場合で、2箇所でWL(n-1)の”010”符号列が”010”でない符号列に情報誤りで変化している場合を示す。この場合、まず、最悪のWL(n-1)の”010”パターンに対抗する情報ビットの個数の和から情報ビットの個数502の差を求めることにより、差Ａが-2となる。差Ａが-2となる場合は、図３８のSE108でYesの分岐となり、500_1,500_2,500_4, ．．．．, 500_c-2,500_c-1,500_cの対向するWL(n-1)の”010”符号列内で2ワード誤りが生じ、WL(n-1)内の”010”符号列が2ワード消失していることを示している。このSE108でのYesの分岐の場合、つまり、（チェックサム501）−｛WL(n-1)の”010”の符号列中の”1”の情報ビットの左端からの位置の和｝を取ることにより、誤りが生じた、WL(n-1)の”010”の符号列中の”1”の第一の情報ビットの位置の和、つまり、この場合、WL(n-1)の第一の情報ビット内で2ワードの誤りが生じ、WL(n-1)内の”010”符号列が2ワード消失した情報ビットの位置の和aaを求めることができる(SE109)。次いで、（チェック積503）／｛WL(n-1)の”010”の符号列中の”1”の情報ビットの左端からの位置の積｝を取ることにより、”010”ワード部分に誤りが生じた、WL(n-1)の”010”の符号列中の”1”の情報ビットの位置の積、つまり、この場合、WL(n-1)の”010”符号列内で2ワードの誤りが生じ、WL(n-1)内の”010”符号列が2ワード消失した情報ビットの積bbを求めることができる(SE110)。次いで、ｘを変数として、x*x-aa*x+bb=0の方程式を解くことにより、”010”誤りが生じた、WL(n-1)の”010”の符号列中の”1”の情報ビットの位置を2箇所、誤り位置1,2を求めることができる(SE111)。次いで、WL(n-1)の"010"の符号列中の"1"に対向したWLnの情報ビットの位置に、前記2箇所誤り位置1,2を加えたものを用い、復号には、WL(n-1)の”010”の”1”対向したWLnの情報ビット500b_1,500b_2,500b_3, ．．．．, 500b_c-2,500
b_c-1,500b_cを、例えば、左から数えて500a_1,500a_2,500a_3, ．．．．, 500a_c-2,500a_c-1,500a_cで置換することにより、正しく復号できる(SE112)。
【０２９６】
次いで、WL(n-1)の中の”010”符号列が2箇所1ビット誤りを生じている場合で、2箇所でWL(n-1)の”010”でない符号列が”010”符号列に情報誤りで変化している場合を示す。この場合、まず、最悪のWL(n-1)の”010”パターンに隣接する情報ビットの個数の和から情報ビットの個数502の差を求めることにより、差Ａは2となる。差Ａが2となる場合は、図３８のSE113でYesの分岐となり、500_1,500_2,500_4, ．．．．, 500_c-2,500_c-1,500_cの対向するWL(n-1)の”010”符号列内で2ビット誤りが生じ、WL(n-1)内の”010”符号列が2つ増大していることを示している。このSE113でのYesの分岐の場合、つまり、｛WL(n-1)の”010”の符号列中の”1”の情報ビットの左端からの位置の和｝―（チェックサム501）を取ることにより、誤りが生じた、WL(n-1)の”010”の符号列中の”1”の情報ビットの位置の和、つまり、この場合、WL(n-1)の符号列内で2ワード誤りが生じ、WL(n-1)内の”010”符号列が2ワード増大した情報ビットの位置の和aaを求めることができる(SE114)。次いで、｛WL(n-1)の”010”の符号列中の”1”の情報ビットの左端からの位置の積｝／（チェック積503）を取ることにより、”010”への誤りが生じた、WL(n-1)の”010”の符号列中の”1”の情報ビットの位置の積、つまり、この場合、WL(n-1)の”010”符号列内で2ワード誤りが生じ、WL(n-1)内の”010”符号列が2ワード増大した情報ビットの積bbを求めることができる(SE115)。次いで、ｘを変数として、x*x-aa*x+bb=0の方程式を解くことにより、”010”符号でない符号列から”010”への誤りが生じた、WL(n-1)の”010”の符号列中の”1”の情報ビットの位置を2箇所、誤り位置1,2を求めることができる(SE111)。次いで、WL(n-1)の"010"の符号列中の"1"に対向したWLnの情報ビットと、情報ビットの位置を2箇所、すなわち、誤り位置1,2を差し引いたものを用い、復号には、WL(n-1)の”010”の”1”対向したWLnの第一の情報ビット500b_1,500b_2,500b_3, ．．．．
, 500b_c-2,500b_c-1,500b_cを、例えば、左から数えて500a_1,500a_2,500a_3, ．．．．, 500a_c-2,500a_c-1,500a_cで置換することにより、正しく復号できる(SE117)。
【０２９７】
さらに、WL(n-1)の中の”010”符号列が2箇所1ワード誤りを生じている場合で、1箇所でWL(n-1)の”010”でない符号列が”010”符号列に情報誤りで変化しており、さらに、一箇所で、WL(n-1)の”010”の符号列が、”010”でない符号列に情報誤りで変化している場合を示す。
【０２９８】
この場合、まず、最悪のWL(n-1)の”010”パターンに対抗する情報ビットの個数の和から情報ビットの個数502の差を求めることにより、差Ａは0となる。差Ａが-2、-1,0,1、および2以外となる場合は、図３８のSE118でNoの分岐となり、情報ビットの復元不可能として、例えば、WL(n-1)の"010"の符号列中の"1"に対向したWLnの情報ビット500b_1,500b_2,500b_3, ．．．．, 500b_c-2,500b_c-1,500b_cを、500a_1,500a_2,500a_3,…., 500a_c-2,500a_c-1,500a_cで順に置き換える(SE124)。図３８のSE118でYesの分岐とした場合、（チェック積）が{WL(n-1)の"010"の符号列中の"1"の情報ビットの左端からの位置の積｝と比較し等しい場合、つまりSE119でNoの分岐の場合には、情報ビットに誤りが無いとして、WL(n-1)の"010"の符号列中の"1"に対向したWLnの第一の情報ビット500b_1,500b_2,500b_3, ．．．．, 500b_c-2,500b_c-1,500b_cを、500a_1,500a_2,500a_3,…., 500a_c-2,500a_c-1,500a_cで順に置き換える(SE124)。
【０２９９】
さらに、SE119で、Yesの分岐の場合は、1箇所でWL(n-1)の”010”でない符号列が”010”符号列に情報誤りで変化しており、さらに、一箇所で、WL(n-1)の”010”の符号列が、”010”でない符号列に情報誤りで変化していることを示す。この場合、（チェックサムが記録された501−｛WL(n-1)の"010"の符号列中の"1"の情報ビットの左端からの位置の和｝=aaを求める(SE120)。aaは、（消失したWL(n-1)の情報ビットの”010”ワード内の”1”の位置)−（誤り増加したWL(n-1)情報ビットの”010”ワード内の”1”の位置）に相当する。次いで、（チェック積が記録された503)／｛WL(n-1)の"010"の符号列中の"1"の情報ビットの左端からの位置の積｝=bbを求める(SE121)。bbは、消失したWL(n-1)の情報ビットの”010”ワード内の”1”の位置)／（誤り増加したWL(n-1)情報ビットの”010”ワード内の”1”の位置）に相当する。これらから、誤り位置１、つまり、消失したWL(n-1)の情報ビットの”010”ワード内の”0”の位置をaa/(bb-1）にて求める。また、誤り位置2、つまり、誤り増加したWL(n-1)の情報ビットの”010”ワード内の”1”の位置をaa*bb/(bb-1)にて求める(SE122)。ついで、WL(n-1)の"010"の符号列中の"1"に対向したWLnの情報ビットから、誤り位置1,2の位置のWLnの情報ビットを追加、および差し引きした第一の情報ビット500b_1,500b_2,500b_3, ...., 500b_c-2,500b_c-1,500b_cを、500a_1,500a_2,500a_3, ...., 500a_c-2,500a_c-1,500a_cで順に置き換える(SE123)。
【０３００】
以上から、上記フローチャートに従いWL(n-1)の中の”010”符号列が2箇所、ワード誤りをした場合でも修正することができる。
【０３０１】
上記実施例では、情報ビットの個数502としては、実施例３の場合には、α＝{(k/6)を整数に切り上げた値}-1、および、実施例１，２の場合には、α＝{(k/4)を整数に切り上げた値}-1とした場合、log 2 {α}を整数に切り上げた値だけのビット数を準備すればよい。さらに、チェックサム501としては、log 2 {k（k+1)/2}を整数に切り上げた値だけのビット数を準備すれば和を情報欠損なく記憶できる。さらに、チェック積503としては、αｘlog 2 {k}を整数に切り上げた値だけのビット数を準備すれば積を情報欠損なく記憶できる。
【０３０２】
ここで、チェックサム501としては、上記のように2ワードまでを修正する場合には、kビット内の2ワードを指定すればよい。また、ワード誤り位置のアドレスの和は2kを越えることは無いので、チェックサム501は最低、log 2 {2k}を整数に切り上げた値だけのビット数を準備すればよい。また、準備したビット数を超えるアドレスの和の部分については、無視して一致すると考えて比較しても正しく復号ができる。
【０３０３】
また、チェック積503としては、2ワードまでを修正する場合には、kビット内の2ビットを指定すればよい。また、ワード誤り位置の積はk*kを越えることは無いので、チェック積503は最低、2log 2 {k}を整数に切り上げた値だけのビット数を準備すればよい。また、準備したビット数を超えるアドレスの積の部分については、無視しても一致すると考えて比較しても正しく復号ができる。
【０３０４】
以上より、第二の符号の中の500a_1,500a_2,500a_3,…., 500a_c-2,500a_c-1,500a_cの符号長さは、kとほぼ比例するα程度である。よって、kを1kbit=2^10bitとすると、501は、log 2 {2k}を整数に切り上げた値〜11bit程度、情報ビットの個数502は高々log 2 {α}を整数に切り上げた値〜10bit以下、503は高々、2log 2 {k}を整数に切り上げた値〜20bit準備すればよく、これらの和は、高々、41bitである。よって、これはαの{(k/6)を整数に切り上げた値}-1〜170bitに比べ25%より少なく、2ビットの誤り訂正をする場合でも誤り訂正をしない場合に比べて、25%だけ第二の追加符号の符号長が伸びる程度で抑えることができる。
【０３０５】
勿論、例えば、kが1kbitよりも多いと、さらに、チェックサム501, 情報ビットの個数502, チェック積503に必要な符号長はlog2(k)に比例する程度しか増加せず、kに比べて増加しないので、αに対する比は小さくなる。よって、チェックサム501, 情報ビットの個数502, チェック積503の符号長に対する増加割合を少なくても、誤り訂正することができる。
【０３０６】
例えば、64kbit=2^16bitとすると、チェックサム501は、log 2 {2k}を整数に切り上げた値〜17bit程度、情報ビットの個数502は高々log 2 {α}を整数に切り上げた値〜16bit以下、503は高々、2log 2 {k}を整数に切り上げた値〜32bit準備すればよく、これらの和は、65bitである。よって、これはαの{(k/6)を整数に切り上げた値}-1〜10922bitに比べ0.6%より少ない。よって、2ワードの誤り訂正をする場合でも誤り訂正をしない場合に比べて、0.6%だけ第二の追加符号の符号長が伸びる程度で抑えることができる。
【０３０７】
以上に述べたように、kビットを有する第一の情報ビットから、第二の追加符号を形成する符号化を用いることにより、500a_1,500a_2,500a_3, ...., 500a_c-2,500a_c-1,500a_cの長さはαあれば十分である。よって、kが1024bit以上の場合、第二の追加符号長は、上記チェックサム501, 情報ビットの個数502, チェック積503の追加があっても、高々αに対して25%符号長が伸びる程度で211bit以内となり、第一の情報ビットのkbitよりも大幅に符号長を短縮することができる。また、上記で説明した、WL(n-1)の”010”部分に隣接したWLnの情報ビットが”0”である個数は第二の追加符号長の半分を整数に切り上げた値以下に抑えられる。
【０３０８】
WL(n)の第二の追加符号に対して、実施例１から３に係る符号化を適用する例  
次に、図３９ａ（ａ）、（ｂ）および図３９ｂ（ａ）、（ｂ）を用いて、本実施例で、WL(n)の第二の追加符号に対して、実施例１から３までで説明した符号化を適用する構成を示す。図３９ａ（ａ）、（ｂ）および図３９ｂ（ａ）、（ｂ）は、その方法の一例である。図３９（ａ）は、上記で説明した第二の追加符号に対して、さらに実施例１から３までの、WL(n-1)の”010”部分に隣接したWLnの情報ビットが”0”である個数を減少させる方法を用いている。
【０３０９】
図示するように、上記図３０乃至図３８において説明した第二の追加符号とWL(n-1)とWL(n)との関係を示している。また、WL(n-1)との第二の追加符号のフラグ１相当情報、および第二の追加符号のフラグ２の情報、および第三の追加符号、および、第三の追加符号のフラグ１相当情報、および第三の追加符号のフラグ２の情報が付加されている。これらフラグ１およびフラグ２は、”010”の個数を減らすため、それぞれ第一の情報ビットと、第二の追加符号、第三の追加符号に実施例１から実施例３を適用したものであり、詳しい説明は省略する。
【０３１０】
ここで、図３９ａ（ｂ）のように、第二の追加符号に対して実施例１から３までを適用して、第二の追加符号のフラグ１相当情報、および第二の追加符号のフラグ２相当情報を追加することによって、WL(n)に含まれる第二の追加符号に含まれる”010”の符号列を減少させることができる。これは、第二の追加符号長をk2とすると、実施例３の場合には、{(k2/6)を整数に切り上げた値}-1、および、実施例１，２の場合には、{(k2/4)を整数に切り上げた値}-1に、WL(n)の”010”の符号列である個数を減少させることができる。これにより、WL(n) の”010”部分に隣接したWL（n+1）の情報ビットの”0”の数を減少させることができる。
【０３１１】
また、あらかじめWL(n-1)についても上記符号変換を同様に用いることにより、実施例３の場合には、{(k2/6)を整数に切り上げた値}-1、および、実施例１，２の場合には、{(k2/4)を整数に切り上げた値}-1に、WL(n-1)の”010”の符号列の含まれる個数を減少させることができる。
【０３１２】
さらに、図３９ｂ（ａ）のように、図示するWL(n)の第二の追加符号を第一の情報ビットと読替え、第二の追加符号を第三の追加符号と読替えることにより、第二の追加符号のWL(n-1)の”010”部分に隣接したWLnの情報ビットを抽出し、WL(n)の第三の符号を形成する。例えば、上記のkが1024bit以上の場合、第二の追加符号長は、211bit以内で大幅に符号長を短縮することができ、k2を211bitとすることができる。さらに、図３９ｂ（ａ）の適用では、WL(n-1)の”010”部分に隣接したWLnの情報ビットが”0”である個数を{(k2/6)を整数に切り上げた値}-1〜35bitと減らすことができる。
【０３１３】
さらに、図３９ｂ（ｂ）のように、実施例１から３までと同様に、第三の追加符号のフラグ１相当情報、および第三の追加符号のフラグ２を追加することによって、WL(n)に含まれる第三の追加符号に含まれる”010”の符号列を減少させることができる。これは、第三の追加符号長をk3とすると、実施例３の場合には、{(k3/6)を整数に切り上げた値}-1、および、実施例１，２の場合には、{(k3/4)を整数に切り上げた値}-1に、WL(n)の”010”の符号列である個数を減少させることができる。これにより、WL(n) の”010”部分に隣接したWL（n+1）の情報ビットの”0”の数を減少させることができる。
【０３１４】
また、あらかじめWL(n-1)についても上記符号変換を同様に用いることにより、実施例３の場合には、{(k2/6)を整数に切り上げた値}-1、および、実施例１，２の場合には、{(k2/4)を整数に切り上げた値}-1に、WL(n-1)の”010”の符号列の個数を減少させることができる。
【０３１５】
また、図では示していないが、この例の第二の追加符号から第三の追加符号を形成する符号変換をさらに繰り返すことにより、WL(n-1)の”010”部分に隣接したWLnの“0”の個数を十分少なくできることは明らかである。また、この符号変換を複数回繰り返して、WL(n-1)の”010”部分に隣接したWLnの“0”の個数を、例えば10個以下になった場合、符号長を10bit以上増やさずに0個にすることは容易である。これには、実施例１から３までのフラグの説明で述べたように、フラグ１，２を2ビットずつに割り当てる方法を、WL(n-1)の”010”部分に隣接したWLnの“0”の個数に用いればよい。具体的には、WL(n-1)の”010”部分を”0110”とし、”010部分に隣接したWLnのビットが”0”の場合、”00”を、”1”の場合”11”を割り当てることにより実施することができる。
【０３１６】
一方、本符号を復号化するには、まず、WL(n-1)の"010"の符号列中の"1"に対向したWLnの第二の追加符号列を、第三の追加符号で順に置き換える。勿論この際に、上記で示したチェックサム、符号の個数、チェック積を用いた情報誤り訂正を行ってWL(n-1)の"010"の符号列に対する情報誤りをさらに低減してもよい。
【０３１７】
さらに、WL(n-1)の"010"の符号列中の"1"に対向したWLnの情報ビットの符号列を、第二の追加符号で順に置き換える。これにより、第一の情報を復号ができる。これら方法を再帰的に繰り返すことにより、第三の追加符号から第４の追加符号を形成した場合でも復号できることは明らかである。
【０３１８】
なお、この説明では2ワードの誤りを修正するのに、和と積の符号を用いることを示したが、勿論、いわゆる、例えば、多数決符号を用いることにより、さらに複数の誤り位置に対する訂正をすることができる。
【０３１９】
また、本実施例では、実施例１から３の実施例と組み合わせた例を示したが、例えば、8kbit以上の符号に対して符号出現確率平均回路１０６を用いた符号では、実施例１から３の実施例と組み合わせた例を用いなくても、効果が得られる本実施形態の変形例も構成できる。ここで、WL(n-1)の”010”連ビット部分”の符号出現頻度は、符号長が長くなると大数の法則より、（符号長）ｘ(1/2)^3-1＝（符号長）/8-1を中心として極めて狭い範囲に分布する。
【０３２０】
”０１０”出現個数の頻度の分布幅  
次に、図４０を用いて、本発明者らが計算にて求めた”０１０”出現個数の頻度の分布幅を説明する。図４０に示すように、符号長が8kbit(=8192bit)の場合に含まれる”010”連ビットの個数を横軸に、縦軸にその個数に対する符号の発生頻度の10を底とした対数（ここではγとする）を取ったものである。
【０３２１】
本例では、（8kbit）/8-1＝1023bitに相当するビットが最も”010”が発生する頻度となり、γはほぼ正規分布形状に分布することを発見した。また、8bit以上の符号長では、1023bit±20%の符号長を超えた範囲では、最頻値の符号の出現頻度のγ-10以下、つまり符号発生頻度としては、10-10以下しか発生しないことを発見した。さらに、8kbit以上の符号に対して符号化確率平均回路１０６を用いた符号では、WL(n-1)のビットと隣接するWL(n)のビットに対しても”0”と”1”の出現確率を平均化することが可能である。
【０３２２】
ここで、これを適用すると、WL(n-1)の”010”部分に隣接したWLnの“0”の最も頻度の高い個数は、[（符号長）ｘ(1/2)^3-1]/2を整数に切り上げた数＝[（符号長）/8-1]/2を整数に切り上げた数まで減少させることができる。よって、第一から第三の実施例の組み合わせを併用しない場合でも、例えば、8kbit以上の符号に対して符号化確率平均回路１０６を用いれば、例えば、第二の符号化のαを{(k/16を整数に切り上げた値}*1.2倍とすることにより、WL(n-1)の情報ビット”010”部分に隣接したWLnの情報ビット“0”の個数がα以下の個数の符号は、図３９ａ，図３９ｂで説明した符号化を再帰的に繰り返すことにより、WL(n-1)の”010”部分に隣接したWLnの“0”の個数を0まで削減できる。
【０３２３】
また、WL(n-1)の情報ビット”010”部分に隣接したWLnの情報ビット“0”の個数がαより多い個数の符号は、WL(n-1)の”010”部分に隣接したWLnの“0”の個数を0までは削減できないが、α分は低減することはできる。すなわち、全符号中で1ppm以下の符号数に十分減少させることができる。よって、WL(n-1)の”010”部分に隣接したWLnの“0”の個数生じる符号誤りをあるしきい値で許容する場合には、さらに、短い第二符号を形成できる。
【０３２４】
さらに、例えば、符号長ka,kbの符号のすべての組み合わせで（ka+kb)の符号長の符号が構成されることを考えると、符号長kaの符号のすべての組み合わせと、kbの符号のすべての組み合わせの積で（ka+kb)の符号長の符号が構成される。よって、その符号の出現頻度の状態数について対数を取ると、対数によって、積は和に変換されるので、大数の法則が成立する。
【０３２５】
以上から、8kbitより長い符号については、大数の法則より、WL(n-1)”010”の発生頻度の（ばらつき)/（平均値）はさらに小さくできるので、より、WL(n-1)の”010”部分に隣接したWLnの“0”の個数を全符号中で、8kbitの場合よりもさらに減少させることができる。
【０３２６】
さらに、第二の符号化のαを{(k/16を整数に切り上げた値}*1.2倍としたが、例えば、この1.2倍を増大および減少させることにより、γはほぼ正規分布形状に分布することを用いて、全符号中のWL(n-1)の情報ビット”010”部分に隣接したWLnの情報ビット“0”の個数の出現確率を設定値以下できることは、明らかである。例えば、8Kbitの符号では、正規分布関数をN(平均、標準偏差)として、符号発生頻度の10を底とした対数の値は、”010”の数が800から1200の間では、N（1023,2100）に比例する分布関数でよく近似できるので、これより符号の出現確率、およびα以上の符号の累積出現確率を計算するのは容易である。
【０３２７】
また、本実施例の変形例で、勿論、本実施例で説明したように、上記で示したチェックサム、符号の個数、チェック積を用いた情報誤り訂正を組み合わせて、WL(n-1)の"010"の符号列に対する情報誤りをさらに低減してもよい。
【０３２８】
ここで、本実施例の変形例では、実施例4の図21と同じく、入力ビットの符号出現確率を平均し、情報ビットを出力する第一符号化回路106と、情報ビットを入力し、前記入力ビットを復号する第一復号回路107を有する点で、構成上相違する。
【０３２９】
この発明は上記実施例に限られない。  
即ち、実施例１から実施例４までは、高々４ビットか6ビットの情報のフラグビットを追加することで、誤書き込みや隣接メモリセルによる容量結合によるしきい値上昇ビット数を1/2から1/3以下に減少させる効果がある。よって、これら誤書き込みや隣接メモリセルによる容量結合によるしきい値上昇起因で誤りビットがiビット生じ、符号長がf(i)ビット伸びる場合、上記実施例を用いることにより、f(i)>f(i/2)+4[bit]を満たす場合、実施例1,2がNANDメモリアレイセルの面積を縮小できる効果を有する。実施例３では、f(i)>f(i/3)+6[bit]を満たす場合、NANDメモリアレイセルの面積を縮小できる効果を有する。ここで、BCH符号では、情報ビット長をmとして、BCH符号化した後の符号が、誤りビットをiビット訂正するにはf(i)＝i×（log2m＋１を切り捨てて整数としたもの）分符号長が伸びる。よって、BCH符号を用いる場合には、上記不等式が成り立つ範囲をf(i)を代入して用いれば、効果がある。例えば、iとして2を用いると、mとしては16ビット以上あれば、実施例１，２の条件を十分に満たし、512ビット以上あれば十分実施例３、４の条件を満たすことができる。
【０３３０】
さらに、RS符号では、情報ビットを2jの1バイトからなる符号として、誤りビットをiバイト訂正するには、ix2バイト＝ix2xjビット符号長が伸びる。よって、RS符号を用いる場合には、上記不等式が成り立つ範囲をf(i)に代入して用いれば、効果がある。例えば、iとして2を用いると、2jとしては８ビット以上あれば十分実施例１から４までの条件を満たすことができる。
【０３３１】
なお、本実施例でも実施例１から実施例３までと同様に、第二符号化や第二符号の復号化に情報ビット長さに比例する程度の計算量しか必要とせず、誤りビット数に依存しない符号化なっている。一方、RS符号やBCH符号など誤り訂正符号誤り訂正ビット数が増えると103の復号化の時間が誤り訂正ビットの2乗以上に増大する。よって、本実施例１から４までの第二符号化を102の誤り訂正符号化や103の誤り訂正符号の復号化に併用して適用した場合には、誤書き込みや隣接メモリセルによる容量結合によるしきい値上昇起因で誤りビットを減らすことができ、誤り訂正に必要な符号を短く出来ると共に、復号化に必要な全計算量や回路を縮小することができる。
【０３３２】
さらに、実施例1,2で述べたカウンタ108,109、112、113、実施例3で述べたレジスタa,b,c,d、および実施例４で述べたカウンタ116、117、118、119、およびレジスタe,f,g,hで必要なビット数は、情報ビット数をmとして、それぞれ高々（log2m＋１を切り捨てて整数としたもの）程度のカウンタおよびレジスタビット数で十分であり、誤り訂正箇所の位置を示すポインタと同等の小さい回路規模で実現できる。
【０３３３】
また、上記実施例１、2で述べたカウンタ108,109、112、113、実施例3で述べたレジスタa,b,c,d、および実施例４で述べたカウンタ116、117、118、119、およびレジスタe,f,g,hの間のカウント数を比較してSEの分岐をする例を示したが、例えば、比較するカウンタまたはレジスタのカウント数が等しい場合には、YES側に分岐しても良いし、No側に分岐しても良い。
【０３３４】
例えば、SE7では108カウンタ＞109カウンタの場合、YESへ分岐することになっているが、108カウンタ≧１０９カウンタの場合にYESへ分岐することにしても良い。また、分岐しなくても良い。同様に、SE17において、108カウンタと109カウンタの最小値が、112カウンタと113カウンタの最小値よりも大の場合、YES側へ分岐することになっているが、108カウンタと109カウンタの最小値が、112カウンタと113カウンタの最小値以上の場合、YES側へ分岐することしてもよい。また、SE19において、112カウンタ＞113カウンタの場合、YESへ分岐することになっているが、112カウンタ≧113カウンタの場合にYESへ分岐することにしても良い。また、SE21において、108カウンタ＞109カウンタの場合、YESへ分岐することになっているが、108カウンタ≧109カウンタの場合にYESへ分岐することにしても良い。
【０３３５】
同様に、SE34において、レジスタaとレジスタbの最小値が、レジスタｃとレジスタｄの最小値よりも大の場合、YES側へ分岐することになっているが、レジスタaとレジスタbの最小値が、レジスタcとレジスタdの最小値以上の場合、YES側へ分岐することしてもよい。また、SE37において、レジスタcの値がレジスタdの値より大の場合、YESへ分岐することになっているが、レジスタcの値がレジスタdの値以上の場合にYESへ分岐することにしても良い。また、SE39において、レジスタaの値がレジスタbの値より大の場合、YESへ分岐することになっているが、レジスタaの値がレジスタbの値以上の場合にYESへ分岐することにしても良い。
【０３３６】
同様に、SE63において、116カウンタと117カウンタの最小値が、118カウンタと119カウンタの最小値よりも大の場合、YES側へ分岐することになっているが、116カウンタと117カウンタの最小値が、118カウンタと119カウンタの最小値以上の場合、YES側へ分岐することしてもよい。また、SE65において、118カウンタ＞119カウンタの場合、YESへ分岐することになっているが、108カウンタ≧109カウンタの場合にYESへ分岐することにしても良い。また、SE67において、116カウンタ＞117カウンタの場合、YESへ分岐することになっているが、116カウンタ≧117カウンタの場合にYESへ分岐することにしても良い。
【０３３７】
同様に、SE70において、レジスタeとレジスタfの最小値が、レジスタgとレジスタhの最小値よりも大の場合、YES側へ分岐することになっているが、レジスタeとレジスタfの最小値が、レジスタgとレジスタhの最小値以上の場合、YES側へ分岐することしてもよい。また、SE75において、レジスタeの値がレジスタfの値より大の場合、YESへ分岐することになっているが、レジスタeの値がレジスタfの値以上の場合にYESへ分岐することにしても良い。また、SE73において、レジスタgの値がレジスタhの値より大の場合、YESへ分岐することになっているが、レジスタgの値がレジスタhの値以上の場合にYESへ分岐することにしても良い。
【０３３８】
また、実施例では誤り訂正符号前に第二符号化をする方法を示したが、誤り訂正符号を形成してから検査ビットも含めて第二符号化する方法として、104と102の順番、および105と103の順番を入れ替えても構わない。この際フラグビットに相当する符号は、3ビットで１つのaビットの情報をあらわすaaaのような多数決符号にするなど行って追加すればよい。勿論、フラグビットについて別に誤り訂正符号を作成して変換しても構わない。
【０３３９】
また、上記104と102の順番、および105と103の順番を入れ替えた場合には、誤り訂正符号全体に対して、情報ビットを誤り訂正符号と読み替えて実施例１から４の第二符号化方法を適用しても良いし、誤り訂正符号に含まれる情報ビットを抽出して、この部分の第二符号化を行っても良い。前者誤り訂正符号全体に対して第二符号化を行った方が、検査ビットを含めた”010”発生個数や隣接するワード線のを減らすことができ、より望ましい。
【０３４０】
さらに、実施例すべてにおいて、素子分離膜や層間絶縁膜の絶縁膜形成法自身は、シリコンをシリコン酸化膜やシリコン窒化膜に変換するこれら以外の方法、例えば酸素イオンを堆積したシリコンに注入する方法や、堆積したシリコンを酸化する方法を用いてもかまわない。また、電荷蓄積層26は、TiO2やAl2O3、あるいは、タンタル酸化膜、チタン酸ストロンチウムやチタン酸バリウム、チタン酸ジルコニウム鉛や、それら積層膜を用いてよい。実施例としては、半導体基板1および1'としてp型Si基板を想定したが、代わりにn型Si基板やSOI基板のSOIシリコン層、またはSiGe混晶、SiGeC混晶など、シリコンを含む単結晶半導体基板であればよい。さらに、p型半導体層23上のn型MONOS-FETの形成について述べたが、n型半導体層23上のp型MONOS-FETの形成に置き換えてもよく、その場合、上述の実施例のソースドレイン電極および半導体領域に対するn型をp型、p型をn型と読み替え、さらに、ドーピング不純物種のAs、P、SbをIn、Bのいずれかと読み替えればよい。また、ゲート電極8および8'はSi半導体、SiGe混晶、SiGeC混晶を用いることができ、多結晶であってもよいし、これらの積層構造にしてもよい。また、アモルファスSi、 アモルファスSiGe混晶、または アモルファスSiGeC混晶を用いることができ、これらの積層構造にしてもよい。ただし、半導体であること、特に、Siを含んだ半導体であることが、良好な側壁絶縁膜19をゲート電極51の酸化または酸窒化によって形成することができ望ましい。さらに、電荷蓄積層5はソースドレイン間で分離されていたり、ドット状に形成されていても構わず、本方法が適用できることは言うまでもない。また、本実施例ではゲート電極8または8'上に堆積法によって形成した金属裏打ち層27'の断面を示したが、例えば、TiやCo,Ni、Mo、Pd、Ptといった金属とゲート電極27とを反応させシリサイドを形成し金属裏打ち層11を形成してもよい。
【０３４１】
また本願の実施例では、説明を判りやすくするため”0”,”1”の2値の半導体メモリセルトランジスタの実施例を示したが、2値以上の多値を記憶する半導体メモリセルトランジスタを用いる場合の方が、より前記複数のしきい値間の間隔が狭く、隣接メモリセルとの容量結合によるしきい値増加や、誤書き込みが問題となるので、より大きな効果を得ることができることは明白である。ここで、1つのメモリセルに記憶するしきい値としては、2n値となることが、情報データのデコードが簡略化され望ましい。
【０３４２】
また、上記実施例は、以下の態様を含む。  
（１）少なくとも"1"と"0"の2値のディジタルデータを電荷蓄積層の電荷として記憶し前記電荷蓄積層の2つの電荷量の差を書き込みビットおよび消去ビットとして用いるメモリセルを備え、複数の前記メモリセルが隣接して形成されるページを一括消去する不揮発性メモリセルアレイ(図５中の49)と；第二の情報ビットから少なくとも1ビットの誤りデータを訂正する訂正符号を発生する誤り訂正符号発生回路(図30中の104)と；前記訂正符号から誤りを訂正し前記第二の情報ビットを復元する誤り訂正符号復号回路(図30中の105)と；前記誤り訂正符号発生回路に出力する符号変換回路;前記符号変換回路(図30中の104)は、書き込みを行う第1のページに、物理的に隣接した第2のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出し、前記第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内にある、消去ビットに隣接する第1ページのビットを出力する前記第５の回路(図30中の105)を有し、；前記第５の回路が書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出した場合に、前記第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内の消去ビットに隣接する第1のページのビットを消去ビットと置き換え、符号化した情報ビットを生成し、前記第５の回路の1連の第1ページの出力を第2の符号とし、前記第2のページの符号化した情報ビットに付加して、第二の情報ビットを生成する符号発生手段;前記第二の情報ビットを入力として、物理的に隣接した第2のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出した場合に、前記第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内の消去ビットに隣接する第1ページのビットを、前記第2の符号の一連のビットと置き換える復号手段とを具備するデータ記憶システム。
【０３４３】
（２）  （１）のデータ記憶システムにおいて、入力した前記情報ビットの、書き込みビット/消去ビット/書き込みビットの連続ビット並びの数を検出する第１カウンタ回路(図31中のWL(n-1)となる場合に”H”となる出力回路)と；入力した前記情報ビットと、”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、書き込みビット/消去ビット/書き込みビットの連続ビット並びの数を検出する第２カウンタ回路と；前記第１カウンタ回路の出力の並びの数よりも前記２カウンタ回路の出力の並びの数が少ない場合、選択的に、入力した前記情報ビットと、”書き込みビット−消去ビット”の並びを複数回繰り返した複数ビットとの排他的論理和をとり、前記誤り訂正符号発生回路に出力する符号変換回路とを更に具備する。
【０３４４】
（３）  （１）のデータ記憶システムにおいて、前記第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並びのアドレスの和の情報と、前記第2のページの書き込みビット/消去ビット/書き込みビットの連続ビットの個数の情報とを、第二の情報ビットに付加する(図34に記載)。
【０３４５】
（４）  （１）のデータ記憶システムにおいて、前記第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並びのアドレスの積の情報を、第二の情報ビットに付加する(図34に記載)。
【０３４６】
（５）  （１）のデータ記憶システムにおいて、第２の符号を入力とし前記第５の回路により書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出した場合に、前記第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内の消去ビットに隣接する第1のページのビットを消去ビットと置き換え、符号化した第2の符号を生成し、前記第５の回路の1連の第1ページの出力を第3の符号とし、前記第2のページの符号化した第２の符号に付加して、第三の情報ビットを生成する符号発生手段と;前記第三の情報ビットを入力として、物理的に隣接した第2のページの情報ビットの書き込みビット/消去ビット/書き込みビットの連続ビット並びを検出した場合に、前記第2のページの書き込みビット/消去ビット/書き込みビットの連続ビット並び内の消去ビットに隣接する第1ページの第2の符号を、前記第3の符号の一連のビットと置き換える復号手段と、を更に具備する(図39a,図39bに記載)。
【０３４７】
（６）  （１）のデータ記憶システムにおいて、入力ビットの符号出現確率を平均し、情報ビットを出力する第一符号化回路（図４中の106）と；情報ビットを入力し、前記入力ビットを復号する第一復号回路（図４中の107）とを更に具備する。
【０３４８】
その他、本発明の要旨を逸脱しない範囲で、様々に変形して実施することができる。
【０３４９】
即ち、以上、上記比較例および実施例１乃至８を用いて本発明の説明を行ったが、この発明は上記比較例および各実施例に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上記比較例および各実施例には種々の段階の発明が含まれており、開示される複数の構成要件の適宜な組み合わせにより種々の発明が抽出され得る。例えば上記比較例および各実施例に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題の少なくとも１つが解決でき、発明の効果の欄で述べられている効果の少なくとも１つが得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【図面の簡単な説明】
【０３５０】
【図１】この発明の比較例に係るNANDセルアレイ構造と隣接セルの容量干渉問題を説明する図。
【図２】比較例に係るNANDセルのしきい値分布とマージン低下を説明する図。
【図３】比較例BCH符号の短縮化符号作成法を説明する図。
【図４】この発明の実施例１に係るデータ記憶システムのブロック図。
【図５ａ】実施例１に係るメモリセル構造を示す図。
【図５ｂ】実施例１に係るメモリセル構造を示す図。
【図６ａ】実施例１に係るメモリセルの断面を示す図。
【図６ｂ】実施例１に係るメモリセルの構造を示す図。
【図７】実施例１に係る第二符号変換を説明するためのフロー図。
【図８】実施例１に係る第二符号逆変換を説明するためのフロー図。
【図９ａ】実施例１に係る第二符号変換の一実例を説明するための図。
【図９ｂ】実施例１に係る第二符号変換の一実例を説明するための図。
【図９ｃ】実施例１に係る第二符号変換の一実例を説明するための図。
【図９ｄ】実施例１に係る第二符号変換の一実例を説明するための図。
【図９ｅ】実施例１に係る第二符号変換の一実例を説明するための図。
【図１０】実施例１に係るシンボルカウンタの構成例を示す等価回路図。
【図１１】この発明の実施例２に係るデータ記憶システムのブロック図。
【図１２】実施例２に係る第二符号変換を説明するためのフロー図。
【図１３】実施例２に係るシンボルカウンタの構成例を示す等価回路図。
【図１４】実施例２に係る第二符号変換の一実例を説明するための図。
【図１５】この発明の実施例３に係るデータ記憶システムのブロック図。
【図１６ａ】実施例３に係るページバッファの構成例を示す等価回路図。
【図１６ｂ】実施例３に係るページバッファの構成例を示す等価回路図。
【図１７ａ】実施例３に係るページバッファの形成例を示すタイミングチャート図。
【図１７ｂ】実施例３に係るページバッファの形成例を示すタイミングチャート図。
【図１７ｃ】実施例３に係るページバッファの形成例を示すタイミングチャート図。
【図１７ｄ】実施例３に係るページバッファの形成例を示すタイミングチャート図。
【図１７ｅ】実施例３に係るページバッファの形成例を示すタイミングチャート図。
【図１７ｆ】実施例３に係るページバッファの形成例を示すタイミングチャート図。
【図１８ａ】実施例３に係る第二符合変換を説明するためのフロー図。
【図１８ｂ】実施例３に係る第二符合変換を説明するためのフロー図。
【図１８ｃ】実施例３に係る第二符合変換を説明するためのフロー図。
【図１９】実施例３に係る第二符合逆変換を説明するためのフロー図。
【図２０ａ】実施例３に係る第二符合変換の一実例を説明するための図。
【図２０ｂ】実施例３に係る第二符合変換の一実例を説明するための図。
【図２０ｃ】実施例３に係る第二符合変換の一実例を説明するための図。
【図２１】この発明の実施例４に係るデータ記憶システムのブロック図。
【図２２】実施例４に係るシンボルカウンタの構成例を示す等価回路図。
【図２３ａ】実施例４に係る第二符合変換を説明するためのフロー図。
【図２３ｂ】実施例４に係る第二符合変換を説明するためのフロー図。
【図２３ｃ】実施例４に係る第二符合変換を説明するためのフロー図。
【図２３ｄ】実施例４に係る第二符合変換を説明するためのフロー図。
【図２４ａ】この発明の実施例５に係るメモリセルアレイの断面図。
【図２４ｂ】実施例５に係るメモリセルアレイの断面図。
【図２５ａ】この発明の実施例６に係るメモリセルアレイの等価回路図。
【図２５ｂ】実施例６に係るメモリセルアレイの平面図。
【図２５ｃ】実施例６に係るメモリセルアレイの断面図。
【図２５ｄ】実施例６に係るメモリセルアレイの断面図。
【図２６ａ】実施例６に係るNAND型メモリセルアレイのレイアウト図。
【図２６ｂ】実施例６に係るNROM型メモリセルアレイのレイアウト図。
【図２７】この発明の実施例７に係るNROM型メモリセルアレイの断面図。
【図２８】実施例７に係るNROM型メモリセルアレイの断面図。
【図２９】実施例１乃至３に係る並び替えの一効果実例を示す図。
【図３０】実施例８に係るデータ記憶システムのブロック図。
【図３１】図３０中の第５の回路の構成例を示す回路図。
【図３２】実施例８に係るページバッファの構成例を示す回路図。
【図３３】実施例８に係る符号形成のフロー図。
【図３４】実施例８に係る第２符号の実例を説明するための図。
【図３５】実施例８に係る１ワード誤りの対応位置を修正するシーケンス図。
【図３６】実施例８に係る第２の追加符号の一例を説明するための図。
【図３７】実施例８に係る１ワード誤りの対応位置を修正するシーケンス図。
【図３８】実施例８に係る２ワード誤りの対応位置を修正するシーケンス図。。
【図３９ａ】（ａ），（ｂ）は、実施例８に係る隣接メモリディターブ低減符号変換を再帰的に用いる一例を説明する図。
【図３９ｂ】（ａ），（ｂ）は、実施例８に係る隣接メモリディターブ低減符号変換を再帰的に用いる一例を説明する図。
【図４０】実施例８に係る符号出現の頻度の分布を示す図。
【符号の説明】
【０３５１】
７…不揮発性メモリセルアレイ、１０２…誤り訂正符号発生回路、１０３…誤り訂正符号復号回路、１０４…符号変換回路。
【図１】
0005214422.tif 000002
【図２】
0005214422.tif 000003
【図３】
0005214422.tif 000004
【図４】
0005214422.tif 000005
【図５ａ】
0005214422.tif 000006
【図５ｂ】
0005214422.tif 000007
【図６ａ】
0005214422.tif 000008
【図６ｂ】
0005214422.tif 000009
【図７】
0005214422.tif 000010
【図８】
0005214422.tif 000011
【図９ａ】
0005214422.tif 000012
【図９ｂ】
0005214422.tif 000013
【図９ｃ】
0005214422.tif 000014
【図９ｄ】
0005214422.tif 000015
【図９ｅ】
0005214422.tif 000016
【図１０】
0005214422.tif 000017
【図１１】
0005214422.tif 000018
【図１２】
0005214422.tif 000019
【図１３】
0005214422.tif 000020
【図１４】
0005214422.tif 000021
【図１５】
0005214422.tif 000022
【図１６ａ】
0005214422.tif 000023
【図１６ｂ】
0005214422.tif 000024
【図１７ａ】
0005214422.tif 000025
【図１７ｂ】
0005214422.tif 000026
【図１７ｃ】
0005214422.tif 000027
【図１７ｄ】
0005214422.tif 000028
【図１７ｅ】
0005214422.tif 000029
【図１７ｆ】
0005214422.tif 000030
【図１８ａ】
0005214422.tif 000031
【図１８ｂ】
0005214422.tif 000032
【図１８ｃ】
0005214422.tif 000033
【図１９】
0005214422.tif 000034
【図２０ａ】
0005214422.tif 000035
【図２０ｂ】
0005214422.tif 000036
【図２０ｃ】
0005214422.tif 000037
【図２１】
0005214422.tif 000038
【図２２】
0005214422.tif 000039
【図２３ａ】
0005214422.tif 000040
【図２３ｂ】
0005214422.tif 000041
【図２３ｃ】
0005214422.tif 000042
【図２３ｄ】
0005214422.tif 000043
【図２４ａ】
0005214422.tif 000044
【図２４ｂ】
0005214422.tif 000045
【図２５ａ】
0005214422.tif 000046
【図２５ｂ】
0005214422.tif 000047
【図２５ｃ】
0005214422.tif 000048
【図２５ｄ】
0005214422.tif 000049
【図２６ａ】
0005214422.tif 000050
【図２６ｂ】
0005214422.tif 000051
【図２７】
0005214422.tif 000052
【図２８】
0005214422.tif 000053
【図２９】
0005214422.tif 000054
【図３０】
0005214422.tif 000055
【図３１】
0005214422.tif 000056
【図３２】
0005214422.tif 000057
【図３３】
0005214422.tif 000058
【図３４】
0005214422.tif 000059
【図３５】
0005214422.tif 000060
【図３６】
0005214422.tif 000061
【図３７】
0005214422.tif 000062
【図３８】
0005214422.tif 000063
【図３９ａ】
0005214422.tif 000064
【図３９ｂ】
0005214422.tif 000065
【図４０】
0005214422.tif 000066