(57)【要約】【課題】  簡易な回路構成または手順によりＮＡＮＤ型フラッシュメモリの誤り訂正の精度を向上させる。【解決手段】０と１とからなるデジタルデータストリングの一定のセクションの中で、０と１のそれぞれの数のうち、エラーが出やすい方の数があるパーセント値以下になるように変換する変換ステップ（Ｓ１０５）と、変換されたデータをＮＡＮＤ型フラッシュメモリに保存する保存ステップ（Ｓ１０６）と、該ＮＡＮＤ型フラッシュメモリから保存されたデータを読み出す読み出しステップと、読み出されたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換ステップとを含んでなるＮＡＮＤ型フラッシュメモリの入出力制御方法とそれを利用した入出力制御装置を提供する。【選択図】  図２
2011141914.tif 000002
【特許請求の範囲】
【請求項１】
０と１とからなるデジタルデータストリングの一定のセクションの中で、０と１のそれぞれの数のうち、エラーが出やすい方の数があるパーセント値以下になるように変換する変換ステップと、
変換されたデータをＮＡＮＤ型フラッシュメモリに保存する保存ステップと、
該ＮＡＮＤ型フラッシュメモリから保存されたデータを読み出す読み出しステップと、
読み出されたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換ステップと
を含んでなるＮＡＮＤ型フラッシュメモリの入出力制御方法。
【請求項２】
前記パーセント値が７０パーセントである、請求項1に記載の入出力制御方法。
【請求項３】
前記変換ステップを1セクション内の元のデータとそれを変換したデータとを対応づける変換テーブルを利用して実行し、前記逆変換ステップをこの変換テーブルを逆向きに適用して実行する、請求項１に記載の入出力制御方法。
【請求項４】
前記変換ステップを行う必要があるか否かを判断するために，エラーが出やすい方の数が当該セクションの中に過半を占めているかを判断する判断ステップを前記変換ステップの前に行い、前記変換ステップが、エラーが出やすい方の数が当該セクションの過半を占めている場合に、当該セクションの全てのビットを反転するものであり、過半を占めていない場合には、反転を行わないものであって、反転の有無を示す変換制御ビットをデジタルデータストリングに付加するものである、請求項１に記載の入出力制御方法。
【請求項５】
０と１とからなるデジタルデータストリングの一定のセクションの中で、０の数が５０＋Ｘパーセントから５０−Ｙパーセントの範囲（ここで、ＸおよびＹは０より大きく５０未満の定数）になるように変換する変換ステップと、
変換されたデータをＮＡＮＤ型フラッシュメモリに保存する保存ステップと、
該ＮＡＮＤ型フラッシュメモリから保存されたデータを読み出す読み出しステップと、
読み出されたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換ステップと
を含んでなるＮＡＮＤ型フラッシュメモリの入出力制御方法。
【請求項６】
前記変換ステップをＤＣフリー符号を作成することにより実施する、請求項１に記載の入出力制御方法。
【請求項７】
０と１とからなるデジタルデータストリングの一定のセクションの中で、０と１のそれぞれの数のうち、エラーが出やすい方の数があるパーセント値以下になるように変換する変換部と、
ＮＡＮＤ型フラッシュメモリに保存するために、変換されたデータを誤り訂正符号にするＥＣＣエンコーダと、
ＮＡＮＤ型フラッシュメモリから出力された誤り訂正符号をデコードするＥＣＣデコーダと、
デコードされたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換部と
を備えたＮＡＮＤ型フラッシュメモリの入出力制御装置。
【請求項８】
前記変換部による変換が必要であるか否かを判断するために，エラーが出やすい方の数が当該セクションの中に過半を占めているかを判断するカウンタをさらに備え、前記変換部が、エラーが出やすい方の数が当該セクションの過半を占めている場合に、当該セクションの全てのビットを反転するものであり、過半を占めていない場合には、反転を行わないものであって、反転の有無を示す変換制御ビットをデジタルデータストリングに付加するものである、請求項７に記載の入出力制御装置。
【請求項９】
０と１とからなるデジタルデータストリングの一定のセクションの中で、０の数が５０＋Ｘパーセントから５０−Ｙパーセントの範囲（ここで、ＸおよびＹは０より大きく５０未満の定数）になるように変換する変換部と、
ＮＡＮＤ型フラッシュメモリに保存するために、変換されたデータを誤り訂正符号にするＥＣＣエンコーダと、
該ＮＡＮＤ型フラッシュメモリから出力された誤り訂正符号をデコードするＥＣＣデコーダと、
デコードされたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換部と
を備えるＮＡＮＤ型フラッシュメモリの入出力制御装置。
【請求項１０】
前記変換部においてＤＣフリー符号を作成するものである請求項９に記載の入出力制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＮＡＮＤ型フラッシュメモリから読み出したデータの誤りを減少させるデータの入出力方法と装置に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを搭載した不揮発性記憶装置は、デジタルカメラや携帯電話のメモリカード、ハードディスクの代替となるソリッドステートディスク（SSD）として市場を拡大している。ここで最も広く用いられているのは、ＮＡＮＤ型のフラッシュメモリである。
【０００３】
このＮＡＮＤ型フラッシュメモリは、集積率に劣るＮＯＲ型のフラッシュメモリに比べて書き込み時のエラービットの発生が多い。ＮＡＮＤ型フラッシュメモリのエラーは、書き込み時に過剰な電子がフローティングゲート内に注入されることにより、読み出し時にセルからの出力電圧に異常が発生することや、多数回の書き換えに伴うトンネル酸化膜の劣化による電子の漏れに起因する。そのために記録すべきデータに誤り訂正符号（error correcting code）（以下、ＥＣＣという）の冗長データを付加してフラッシュメモリに書込むと共に、読出し時には誤り訂正符号の冗長データを基にしてデータの訂正を行うことで、エラーが発生したときのデータの補償を行っている。
【０００４】
基本的なＮＡＮＤ型フラッシュメモリ（２値フラッシュメモリ）の場合、通常、メモリセルの電圧の高い状態を１（電子がフローティングゲートにない状態）、メモリセルの電圧の低い状態を０（電子がフローティンゲートに注入されている状態）に対応させているが、０と１の逆の設定もあり得る。
【０００５】
また、多値技術を用いたフラッシュメモリ（マルチレベルセルのフラッシュメモリ）の場合、メモリセルの電圧を３以上の複数の状態に設定する。たとえば、４値を記憶すること ができるフラッシュメモリでは、メモリセルの電圧を４つの状態を取り得るようにして、順に、“１１”（電圧が最も高い状態）、“１０”、“０１”、“００”（電圧が最も低い状態）に対応させる。これにより、１つのメモリセルに２ビットのデータを記憶することができる。現在では、1つのメモリセルに４ビット以上のデータを記憶するものも存在する。メモリセルの物理的な状態と論理的なデータとの対応は、２値フラッシュメモリと同様、任意に定めることができる。
【０００６】
このようなフラッシュメモリにおいて、エラーはある一定の非対称性あるいは方向性を持って発生することが多い。例えば、電子の漏れに起因するエラーが頻繁に発生するフラッシュメモリを考えると、２値フラッシュメモリの場合には、０を書き込んだとき（電子をフローティングゲートに注入したとき）にそれを誤って１と読みだすエラーが、逆の場合よりも多くなる。つまり、１を書き込み読み出す方が０を書き込み読み出す場合よりエラーが少ない。また、マルチレベルセルのフラッシュメモリの場合には、回路の設計に応じて、読み出しと書き込みの単位であるページ毎にエラーの出現の傾向が異なることが多い。さらに、シングルレベルセルとマルチレベルセルに共通であるが、エラー発生のメカニズムによっては、同じページであっても、両方のエラーが発生する場合もある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−３１６６６１号公報
【図面の簡単な説明】
【０００８】
【図１】ＮＡＮＤ型フラッシュメモリにおける典型的なページとそれに加えた反転制御ビットの様子を示すダイアグラムである。
【図２】本発明の第１実施形態にかかる方法の手順を示すフローチャートである。
【図３】本発明の第１実施形態にかかる装置の構成を示すブロックダイアグラムである。
【図４】本発明の第３実施形態にかかる装置の構成を示すブロックダイアグラムである。
【図５】第１のシミュレーション結果を示すグラフである。
【図６】第２のシミュレーション結果を示すグラフである。
【図７】第３のシミュレーション結果を示すグラフである。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明は、このようなＮＡＮＤ型フラッシュメモリにおいてある非対称性を持って発生するデータのエラーを訂正する技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、０と１とからなるデジタルデータストリングの一定のセクションの中で、０と１のそれぞれの数のうち、エラーが出やすい方の数があるパーセント値以下になるように変換する変換ステップと、変換されたデータをＮＡＮＤ型フラッシュメモリに保存する保存ステップと、該ＮＡＮＤ型フラッシュメモリから読み出す読み出しステップと、読み出されたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換ステップとを含んでなるＮＡＮＤ型フラッシュメモリの入出力制御方法を提供する。
【００１１】
ここで、前記パーセント値としては、７０パーセントあるいは８０パーセントを考えることができる。例えば、７０パーセントは、特定の条件下においてエラーレートが一桁変わるものであることがシミュレーションの結果判明している。８０パーセントであれば、その効果は若干弱まるが、画像データなど０または１の数が極端に偏ることがあり得るデータについては実用上のメリットは十分ある。また、６０パーセントあるいは５０パーセントといった基準も考えることができる。例えば、下記の例に示すように、エラーが出やすい方の値を半分以下にコントロールすることは可能である。また、前記の一定のセクションは、ＮＡＮＤ型フラッシュメモリのページ自体、あるいは1ページを整数個の区間に区切ったものの一つに対応するものである。
【００１２】
また、前記変換ステップは、1セクション内の元のデータとそれを変換したデータとを対応づける変換テーブルを利用して実行することができ、前記逆変換ステップはこの返還テーブルを逆向きに適用して実行することができる。
【００１３】
また、前記のＮＡＮＤ型フラッシュメモリの入出力制御方法においては、前記変換ステップを行う必要があるか否かを判断するために，エラーが出やすい方の数が当該セクションの中に過半を占めているかを判断する判断ステップを前記変換ステップの前に行い、前記変換ステップが、エラーが出やすい方の数が当該セクションの過半を占めている場合に、当該セクションの全てのビットを反転するものであり、過半を占めていない場合には、反転を行わないものであって、反転の有無を示す変換制御ビットをデジタルデータストリングに付加することができる。ここで、前記判断ステップは、カウンタによって０の数と1の数とを数え上げることによって実行することができる。
【００１４】
本発明は、また、０と１とからなるデジタルデータストリングの一定のセクションの中で、０の数が５０＋Ｘパーセントから５０−Ｙパーセントの範囲（ここで、ＸおよびＹは０より大きく５０未満の定数）になるように変換する変換ステップと、変換されたデータをＮＡＮＤ型フラッシュメモリに保存する保存ステップと、該ＮＡＮＤ型フラッシュメモリから出力されたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換ステップとを含んでなるＮＡＮＤ型フラッシュメモリの入出力制御方法を提供する。ここで、ＸおよびＹの値は１０パーセントから３０パーセント程度が現実的である。ＸおよびＹの値が０に近づくと拘束条件として厳しくなり、１セクション内のビット数が大きい場合には実現可能であるが、１セクション内のビット数の数が小さい場合には、実現できない場合も生じる。また、３０パーセントを超えると、変換の効果が少なくなってしまうことが多い。しかしながら、採用する具体的な変換手法と目的とによってＸおよびＹの値の取り得る範囲は一般的に広く、その中で適当な値を具体的な状況に応じて選択できるものである。
【００１５】
本発明によれば、前記変換ステップをＤＣフリー符号を作成することにより実施することができる。
【００１６】
そして、本発明は、０と１とからなるデジタルデータストリングの一定のセクションの中で、０と１のそれぞれの数のうち、エラーが出やすい方の数があるパーセント値以下になるように変換する変換部と、ＮＡＮＤ型フラッシュメモリに保存するために、変換されたデータを誤り訂正符号にするＥＣＣエンコーダと、ＮＡＮＤ型フラッシュメモリから出力された誤り訂正符号をデコードするＥＣＣデコーダと、デコードされたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換部とを備えたＮＡＮＤ型フラッシュメモリの入出力制御装置を提供する。
【００１７】
前記のＮＡＮＤ型フラッシュメモリの入出力制御装置においては、前記変換部による変換が必要であるか否かを判断するために，エラーが出やすい方の数が当該セクションの中に過半を占めているかを判断するカウンタをさらに備え、前記変換部が、エラーが出やすい方の数が当該セクションの過半を占めている場合に、当該セクションの全てのビットを反転するものであり、過半を占めていない場合には、反転を行わないものであって、反転の有無を示す変換制御ビットをデジタルデータストリングに付加することができる。ここで、前記カウンタは、０の数と1の数とを数え上げる。
【００１８】
本発明は、また、０と１とからなるデジタルデータストリングの一定のセクションの中で、０の数が５０＋Ｘパーセントから５０−Ｙパーセントの範囲（ここで、ＸおよびＹは０より大きく５０未満の定数）になるように変換する変換部と、ＮＡＮＤ型フラッシュメモリに保存するために、変換されたデータを誤り訂正符号にするＥＣＣエンコーダと、該ＮＡＮＤ型フラッシュメモリから出力された誤り訂正符号をデコードするＥＣＣデコーダと、デコードされたデータを元のデジタルデータストリングに戻すための逆変換操作を行う逆変換部とを備えるＮＡＮＤ型フラッシュメモリの入出力制御装置を提供する。      
【００１９】
本発明によれば、前記変換部においてＤＣフリー符号を作成するようにすることができる。
【発明の効果】
【００２０】
本発明によれば、簡単な回路構成または手順によりＮＡＮＤ型フラッシュメモリのための誤り訂正機能を強化することができる。
【発明を実施するための最良の形態】
【００２１】
本発明の１実施形態をシングルレベルセルのＮＡＮＤ型フラッシュメモリの場合を例に説明する。上述のようにシングルレベルセルのＮＡＮＤ型フラッシュメモリの場合には、０と１の定義にもよるが、上に説明した定義によれば、１を書き込んで読み出す場合の方が０を書き込んで読み出す場合よりエラーが少ないことが多い。したがって、ある一連のデータにおいて０が多い場合には、そのデータ全体の論理否定を求めて、１が多いデータに変換して、それをフラッシュメモリに保存すれば、エラーの確率は少なくなる。論理否定をとったか否かを記録するには１ビットのフラグがあれば足りる。
【００２２】
ＮＡＮＤ型フラッシュメモリの書き込みと読み出しの単位はページと呼ばれる。この１ページは、典型的には、３２，７６８ビット（４ｋＢｙｔｅ）である。また、消去操作の１単位であるブロックは、このページが、例えば、６４個（２５６ｋＢｙｔｅ）集まって構成される。１ＧＢのメモリチップであれば、２５６，０００個のページと、４０００個のブロックがあることになる。そこで、１ページに含まれるべき３２，７６８ビットのデータをチェックして、０と１のどちらが多いかを判断する。０が多い場合には、データを反転して（論理否定をとって）、反転を示すフラグを１にする。このフラグビットを先頭に含めて１ページ分の３２，７６９ビットのデータとする。１が多ければ、反転制御ビットを０にして、この反転制御ビットを先頭にして、３２，７６８ビットの反転などの操作を行っていないそのままのデータを１ページとする。このようなページの構成を図１（Ａ）に模式的に示す。なお、ページサイズにはいろいろあり、２ｋＢｙｔｅや８ｋＢｙｔｅのものもある。また、ここでいうページあるいはブロックのサイズは、判定制御ビットやＥＣＣ化による冗長データを除いたデータ部分のサイズであり、ＮＡＮＤ型フラッシュメモリには、ＥＣＣ化のための領域があらかじめ用意されている。つまり、ページサイズは４ＫＢちょうどではなく４ｋＢ＋αになる。
【００２３】
なお、上記の第１実施形態において、１ページ内の０と１の数のどちらが多いかを見出すためには、いくつかの方法がある。上述のように、カウンタを使って、入力されて来るデジタルデータストリング中の０と１の数を数え上げることができるほか、例えば、ＲＤＳ(running digital sum)を計算することにより、０と１のどちらが多いかを判断することも可能である。ＲＤＳは、０と１からなるデジタルデータストリングについて、各ビットの値が０であれば＋１を、１であれば−１を積算し、この積算をビットの並びに順次繰り返していって得られる値である。これを計算すれば、最終的な値が正であれば０が多く、負であれば１が多いと判断することができる。したがって、各セクション内でＲＤＳを計算し、これが正であるか負であるかにより、反転するべきか否かを判断することができる。
【００２４】
また、上記第1実施形態では、デジタルデータを反転させることとしたが、０が多い場合に、反転ではなく、１が多くなるような適当な変換を行ってもよい。そのような変換方法としては、パターンマッチングまたはテーブルを利用したものがある。
【００２５】
ここで、パターンマッチングの手法の一例を示しておく。ここでは簡単のため、１セクションが４ビットの場合に、１を多くする手法ついて例を示す。言うまでもないが、１セクション内のビット数は任意である。まず、表１に利用できる元のデータと変換後のデータの一例を示す。
【００２６】
【表１】
2011141914.tif 000003
【００２７】
４ビットのデータ（元のデータ）を５ビットのデータ（変換後のデータ）に変換することにより、セクション内で１の数が０の数よりも多いことを保証できる。これは、テーブルを利用して、一定のパターンを別のパターンに変換するものである。
【００２８】
この表１はよく見てみると、結果として得られる変換は、前述のカウンタを利用して反転した上で、変換制御ビットを付加する方法と何ら変わらない。結局のところ、４ビットのデータ中で０の数が２個以上の場合は反転して先頭に制御ビットとして１を付加し、１個以下の場合は反転せずに先頭に制御ビットとして０を付加しているのと同じである。パターンマッチング（テーブルを利用した変換）の場合と、カウンタを用いる場合とでは手順としては異なるものの、得られた変換データとしては、同じ結果が得られる。
【００２９】
また、別の例として、次の表２に示すような元のデータと変換後のデータのテーブルを利用したパターンマッチングによる変換を考えることができる。
【００３０】
【表２】
2011141914.tif 000004
【００３１】
表１の場合と同様に、４ビットのデータ（元のデータ）を５ビットのデータ（変換後のデータ）に変換することにより、セクション内で１の数が０の数よりも多いことを保証できる。表１の例と違うのは、ここでは元のデータの反転もしていなければ、制御ビットという概念もない。単に、制約条件（ここでは１の方が多いこと）を満たす５ビットの系列を小さい値順に並べただけのテーブルである。表１のような単純なテーブルを変換と逆変換に利用することによっても、本発明の目的を達成することができる。
【００３２】
このように反転または変換そして出力データの再反転と逆変換の方法には、種々の手順があり、本願発明は、いずれか一つに拘束されるものではない。
【００３３】
ここで０と１といっているのは、入れ替え可能であり、１のエラーが多くなるようなＮＡＮＤ型のフラッシュメモリ素子があった場合には、１が多い場合に、反転を行ったり、０の方が多くなるような変換を行うことができる。
【００３４】
データを読み出す場合には、読み出されたデータの反転制御ビットをまず認識して、フラグが１であれば、それに続く３２，７６８ビットのデータを反転して、もとのデータを得ることができる。フラグが０であれば、それに続く３２，７６８ビットのデータをそのまま出力値とする。
【００３５】
また、１ページを適当な数に区切って、そのセクション毎に０または１のカウントを行い、０が多ければ反転操作を行うこととしてもよい。例えば、図１（Ｂ）に示すように、３２，７６８ビットの１ページを８個に区切って、４０９６ビットを一単位として、４０９６個のバイナリデータのうちで０と１の数を数えて、もし０が多ければ、このデータを反転して、１が多ければそのまま、１ビットの反転フラグをつけた形で、フラッシュメモリへの保存を行うことができる。最も極端な例は、このセクションを反転フラグ用の１ビットと保存データ用の１ビットの２ビットの構成にすることであるが、保存できるデータがフラッシュメモリの容量の半分になってしまうので、冗長度が高くなりすぎ、現実的ではない。したがって、実際の応用に際しては、図１（Ａ）に示したような反転制御ビットを１ページ分のデータに付加する場合から、セクションが反転制御ビットと１データビットの例の間のどこかに最適解を求めることとなる。すなわち、１ページを、２個、４個、８個、１６個、３２個、６４個などに区切ることが考えられる。
【００３６】
以上が本願発明の１実施形態の原理であるが、現実的には、このように反転制御ビットを付加したデータをそのままフラッシュメモリに保存するのではなく、通常の誤り訂正符号（ＥＣＣ）の符号化を行うのが好ましい。その上で、そのほかのＮＡＮＤ型フラッシュメモリに一般的な、ウェアレベリングや、不良ブロック管理、フラッシュメモリの動作特性に合わせた書き込みと読み取りの操作を行って、フラッシュメモリにデータを保存することになる。反転制御ビットを付加した後にＥＣＣの符号化を行うのは、反転制御ビットがエラーになると１ページ又はその中のセクションの１つの中の全てのデータがエラーとなってしまうので、反転制御ビットにも誤り訂正を掛けたいからである。
【００３７】
図２にこのような本発明の1実施形態による方法のフローを示す。デジタルデータを受けた後（Ｓ１０１）、一定のセクション内の０または１をカウントする（Ｓ１０２）。そして、０または１のエラーが出やすい方の数が多いかどうかを判断する（Ｓ１０３）。このとき、エラーが出やすい方とは、フラッシュメモリの状態に対する値の定義にもよるが、典型的には、シングルレベルセルの場合には、０が多い方がエラーが発生しやすい。エラーが出やすい方の数値が多ければ、データを反転した上で、反転の事実を示すフラグに対応する値の反転制御ビットをデータに付加し（Ｓ１０５）、そうでなければ、データを反転せずに、反転していない状態を示すフラグに対応する値の反転制御ビットを付加する（Ｓ１０４）。その後、フラッシュメモリにデータを保存する（Ｓ１０６）が、その際には、上述のように、ＥＣＣへの符号化、ウェアレベリング、不良ブロック管理などの操作が行われる。次の区画がなければ、終了し、まだデータが残っていれば、次の区画について、一連の操作を行う（Ｓ１０７、Ｓ１０８）。ここで、ＥＣＣ符号化としては、一般的な、ＢＣＨ符号（例えば、非特許文献１を参照。）を用いることができる。
【非特許文献１】阪田省二郎ほか訳「誤り訂正符号入門」、森北出版株式会社２００５年１０月１１日発行、
【非特許文献２】Jorn Justesen and Tom Hoholdt, “A Course In Error-Correcting Codes,” European Mathematical Society 2004（非特許文献１の原著）
【００３８】
これを実行するための機能的ブロックダイアグラムを図３に示す。まず、ＮＡＮＤ型フラッシュメモリに保存されるべきデータが入力されると、カウンタ１０１によりそのデータ内の０と１の数を数える。その上で、バッファとして機能するＲＡＭ１０２にデータを保存する。その後第１反転操作部１０３により、もしカウンタ１０１が数えた０の数が１の数を上回れば、保存すべきデータを反転（論理否定）した上で、例えば１の値の反転制御ビットを付加して、ＥＣＣ(誤り訂正符号)への符号化のためのＥＣＣエンコーダ１０４にデータを送り込む。このとき、ＲＡＭ１０２と第１反転操作部１０３の順序は入れ替えることができる。ここで、０と１のどちらかが多いかを判断するためには、図３に示すようなカウンタ１０１を用いて数え上げる手法のほか、上述のようにＲＤＳを利用した手法も利用可能である。この場合には、カウンタ１０１は、ＲＤＳ計算部となる。そして、フラッシュメモリコントローラ（ウェアレベリングや不良管理ブロック管理の機能を含む）を介してデータがフラッシュメモリ１０５に保存される。このフラッシュメモリコントローラは図示しないが、フラッシュメモリ１０５自体に含まれていると考えることもできる。
【００３９】
フラッシュメモリ１０５からデータを読み出す際には、ＥＣＣデコーダ１０６により、誤り訂正処理を行い、さらに、第２反転操作部（１０７）により、反転制御ビットの値に応じて、読み出されたデータを反転しあるいは反転せずに、バッファとなるＲＡＭ（１０８）に出力する。
【００４０】
以上、シングルレベルセルの場合をとって、本発明の第１実施形態を説明したが、これは単に例示に過ぎず、例えば、カウンタ１０１とＲＡＭ１０２のデータのフローにおける順序を反転させるなど、種々の変更がシステムの構成やフラッシュメモリの特性に応じて可能である。また、上記のように、カウンタ１０１は、ＲＤＳを利用したＲＤＳ計算部であってもよい。さらに、カウンタ１０１あるいはＲＤＳ計算部を省略することも可能である。そして、反転操作の代わりにテーブルを利用する、パターンマッチングを利用するなどの種々の手法により元のデータを変換することも可能である。このとき、第１反転操作部１０３と第２反転操作部１０７は、それぞれ第１変換部と第２変換部と呼ばれるべきものとなる。本発明は特定の変換手法に限定されるものではないことに留意されたい。
【００４１】
次に、本発明の第２実施形態として、同じページ内において、０を誤りやすいエラーと１を誤りやすいエラーの両方が生じる場合に対応する方法を説明する。すなわち、同じページであっても、０の誤りが多く発生する場合、１の誤りが多く発生する場合、両方のエラーが同程度に発生する場合がある。このような場合には、０や１の数に偏りを持たせるのではなく、０と１の数を同程度にするという変換を行うことが好ましい。このような変換は、例えばＤＣフリー符号を用いて実現することができる。ＤＣフリーとは、データストリングに含まれる０と１の比率が等しいか近似していることを意味する。ＤＣフリー符号の一例として、ＲＤＳを用いた符号化方法について説明する。
【００４２】
ＤＣフリー符号への簡単な変換例を次に示す。すなわち、まず、第１の実施形態と同様に、１ページをＫ個のセクションに区切る（セクションの数Ｋは２以上の整数）。そのページの先頭で、前述のＲＤＳ(running digital sum)の初期値を０とする。ＲＤＳは、０と１からなるデジタルデータストリングについて各ビットの値が０であれば＋１を、１であれば−１を積算し、この積算をビットの並びに順次繰り返していって得られる値である。まず、この積算を第１のセクションの最初のビットから最後のビットまで行って、ＲＤＳを計算し、その結果をＲＤＳ１とする。そして、次の第２のセクションについて、同様にして、初期値をゼロにして、最初のビットから最後のビットまでに渡るＲＤＳを計算してその結果をＲＤＳ２とする。そして、ＲＤＳ１とＲＤＳ２を比較して、両方とも０以上またはマイナスの値のいずれかで共通している場合には、第２のセクションの全ビットの値を反転し、変換制御ビットの値を１にして、第２のセクションの先頭に付加する。ＲＤＳ１とＲＤＳ２の値の一方がマイナスで、他方が０以上であれば、第２のセクションのビット値を反転せずにそのまま置き、第２のセクションの先頭に、０の値の変換制御ビットを付加しておく。その後、ＲＤＳ１とＲＤＳ２との和を計算しておく。次に、第３のセクションについても同様に、ＲＤＳ３を計算する。そして、ＲＤＳ１とＲＤＳ２の和（以下にこの和を順次積算していくのでこれを「ＲＤＳの積算値」と定義する）とＲＤＳ３の値を比較して、両方とも０以上またはマイナスの値のいずれかで共通している場合には、第３のセクションの全ビットの値を反転し、変換制御ビットの値を１にして、第３のセクションの先頭に付加する。ＲＤＳの積算値とＲＤＳ３の値のどちらかがマイナスで、どちらかが０以上であれば、第３のセクションのビット値を反転せずにそのまま置き、第３のセクションの先頭に、０の値の変換制御ビットを付加する。これを、順次、ページの最後まで繰り返す。言い換えれば、第ｋ−１のセクションまでのＲＤＳ積算値と第ｋのセクションのＲＤＳ値（ＲＤＳｋ）を比較して、両方とも０以上またはマイナスであれば、第ｋセクションの全てのビット値を反転し、１の値の変換制御ビットを付加し、一方が０以上で、他方がマイナスであれば、反転を行わずに、０の値の変換制御ビットを付加することを繰り返す（ｋは２以上Ｋ以下の整数）。その結果、ＤＣフリー符号が得られる。
【００４３】
このようなＤＣフリーの符号を得るための変換方法には幾通りものやり方があり、上記の手順は一例にしか過ぎないことに留意されたい。その他の方法としては、特願２００９−１９６０３７号に示したトレリス線図を利用した方法を利用することも可能である。
【００４４】
この実施形態によると、０が多いデータストリングがあるとき、０が誤りやすいエラーが発生すると当然エラーの可能性が大きくなる。また、１が多いデータストリングがあるとき、１が誤りやすいエラーが発生すると当然エラーの可能性が大きくなる。このようなときには、データストリング中の０と１の数を同程度になるように変換しておけば、エラー発生の可能性を減らすことができる。
【００４５】
なお、第１の実施形態と第２の実施形態は、例えば、個々のページについて選択的に利用することができるものである。すなわち、あるページについては、０の値に誤りが多く発生する傾向があり、次のページについては、０も１も同程度に誤りやすいということがあり得る。そこで、予め各ページのエラーの出やすさの傾向を測定しておいて、その結果に基づいて、ページ毎あるいはその他の適当な単位で、第１実施形態の処理と第２実施形態の処理を切り替えて、ページ毎あるいはその他の適当な単位で、最適な処理を行うことができる。
【００４６】
次に、マルチレベルセルのＮＡＮＤ型フラッシュメモリの場合を、本発明の第３実施形態に基づいて説明する。マルチレベルセルの場合には、０か１のいずれかでエラーが多く発生するという固定された傾向があるのではなく、多くの場合、ブロック内にあるページ毎にエラー特性が異なる。このエラー特性は、通常、フラッシュメモリチップの設計に依存して決まるので、ページ毎のエラー特性データをベンダーから得るか、あるいは、自らテストして見出すことができる。そして、そのようなデータに基づいて、ページ番号毎に、反転制御を切り替えることができる。具体的には、次の４つのモードの間で切り替えることが好ましい。すなわち、（１）反転操作をしない、（２）０が多くなるように反転操作をする、（３）１が多くなるように反転操作をする、（４）０と１の数が同程度になるように反転操作をする、の４モードである。フラッシュメモリチップのエラー特性に応じて、４つのモードうち１つあるいは複数を省略することもできる。この場合でも、反転制御ビットは、反転したかどうかを示すだけなので、1ビットで足りる。このようなモードのページ毎の設定は、予め、特定のフラッシュメモリ素子に対応して、決定し、記憶しておくことができる。
【００４７】
また、図４に、本発明の第４実施形態として、マルチチャンネルのＮＡＮＤ型フラッシュメモリの制御の場合の、図３に対応する構成例を示す。ＮＡＮＤ型フラッシュメモリは、書き込みと読み取りの速度がＤＲＡＭなどに比べると遅いという問題点がある。特に書き込みは遅い。そのため、書き込みと読み取りの高速化のために複数のチャンネルを使って読み込みと書き込みを行うことが行われている。チャンネルの数は、８，１０，１６が、現在典型的である。このようなマルチチャンネルのＮＡＮＤ型フラッシュメモリの制御の場合には、通常、カウンタ２０１は十分高速であるので１つで対応できるが、その下流にあるＲＡＭ２０２，反転操作部２０３、ＥＣＣエンコーダ２０４は、チャンネルの数だけ設けることが設計上の単純さから言っても好ましい。出力は、ＮＡＮＤフラッシュメモリ２０５の読み取り動作が速ければ、マルチチャネル化する必要はないが、より高速の動作のためには、入力と同様にマルチチャンネル化することが好ましい。
【００４８】
（シミュレーション例）
以下に、一定の条件下で、本発明がどのような効果を発揮するかをシミュレーションした結果を説明する。前提となるエラー発生の非対称性は、０を１に誤るエラーの発生確率を９５％、１を０に誤るエラーの発生確率５％と仮定した。図５に示す結果は、生のデータ（フラッシュメモリに記憶されるべきデータ）中に０が５０％、１が５０％ある場合の本発明の第１実施形態による誤り防止の効果を示す。図中、ＷＣＣとあるのは、Weight Control Codeの略で、本発明の第１実施形態を意味し、それを使用した場合（実線）と使用しなかった場合（破線）の結果を、生データのビットエラー率（フラッシュメモリから出力されたデータにあるエラーの率であり、ＥＣＣによる誤り訂正は含めていない）の関数として示してある。左軸は、ＥＣＣにより誤り訂正不能なページエラーの発生の割合を示しており、このようなエラーが発生するブロックは使用不可能になってしまう。図６に示す結果は、同様に、データ中に０が５６％、１が４４％含まれている場合のシミュレーション結果を示す。図７には、同様に、０が７０％、１が３０％含まれている場合のシミュレーション結果を示す。このようなデータ内の０と１の出現の非対称性または偏りは、画像データなどにはよく見られる。本発明は、デジタルデータの０と１の出現率の非対称性が大きい場合に非常に大きな効果があり、簡単な回路構成で、ＥＣＣの誤り訂正機能を補完する効果がある。
【符号の説明】
【００４９】
１０１  カウンタ
１０２  ＲＡＭ
１０３  第１反転操作部(変換部)
１０４  ＥＣＣエンコーダ
１０５  フラッシュメモリ
１０６  ＥＣＣデコーダ
１０７  第２反転操作部（逆変換部）
１０８  ＲＡＭ
【図１】
2011141914.tif 000005
【図２】
2011141914.tif 000006
【図３】
2011141914.tif 000007
【図４】
2011141914.tif 000008
【図５】
2011141914.tif 000009
【図６】
2011141914.tif 000010
【図７】
2011141914.tif 000011