【実施例1】
【0026】
図1は、本発明の第1実施例としてのデータ入出力制御装置が搭載されたフラッシュメモリシステム10の構成の概略を示す構成図である。フラッシュメモリシステム10は、NAND型フラッシュメモリが形成されたシリコンチップが複数積層されてなるフラッシュメモリ12と、フラッシュメモリ12を制御するメモリコントローラ20と、から構成され、ホスト装置60(例えば、パーソナルコンピュータなど)と通信可能に接続されており、ホスト装置60から入力される各種制御信号に応じてホスト装置60から入力されたデータをフラッシュメモリ12に記憶したり、フラッシュメモリ12に記憶しているデータをホスト装置60に出力したりする。なお、こうしたフラッシュメモリ12とメモリコントローラ20とは、互いに異なる半導体チップ上に形成されているものとする。
【0027】
フラッシュメモリ12は、フローティングゲートへの電子注入やフローティングゲートからの電子の引き抜きにより閾値電圧が変化するフラッシュメモリセルを複数有するフラッシュメモリセルアレイ(図示せず)を備えるNAND型フラッシュメモリとして構成されており、フラッシュメモリセルアレイの他にロウデコーダ,カラムデコーダ,センスアンプなど(いずれも図示せず)を備える。フラッシュメモリ12では、ページ単位(実施例では、(512バイト+104ビット))でデータを書き込んだりデータを読み出し、複数ページからなるブロック単位(実施例では、64ページ)で記憶しているデータを消去する。フラッシュメモリセルに記憶されるデータは、実施例では、フローティングゲートに電子が注入された状態が”0”であるものとし、フローティングゲートから電子が引き抜かれて”0”の状態よりフローティングゲートの電子が少なくなっている状態が”1”であるものとする。
【0028】
メモリコントローラ20は、トランジスタ等の複数の論理素子からなる論理回路として構成されており、ホスト装置60からの各種制御信号を出力したりホスト装置60にデータを入出力するホストインターフェース回路22と、フラッシュメモリ12に各種制御信号を出力したりフラッシュメモリ12にデータを入出力するメモリインターフェース回路24と、ホストインターフェース回路22に入力されたデータを一時的に記憶するバッファ回路26と、バッファ回路26からデータを読み出して記憶されているデータに含まれる”1”のデータの数に応じてデータを反転または非反転させて非反転フラグまたは変換フラグを付加して出力するデータ反転回路28と、データ反転回路28からのデータをBCH(Bose-Chaudfuri-Hocquenghem)符号により符号化してメモリインターフェース回路24に出力したりメモリインターフェース回路24からのデータを復号してデータ反転回路28に出力するエラー訂正回路30と、メモリコントローラ20の全体の動作を制御する制御回路40と、を備える。
【0029】
データ反転回路28は、バッファ回路26からデータを4ビットずつ読み出し、読み出した4ビットのデータに含まれる”0”のデータの数が”1”のデータの数より多いときには”1”のデータを”0”に反転させると共に”0”のデータを”1”に反転させるビット反転を実行すると共にビット反転後のデータにビット反転が行われたことを示す”1”の反転フラグを付加してエラー訂正回路30に出力し、読み出した4ビットのデータに含まれる”0”のデータの数が”1”のデータの数以下であるときにはビット反転を実行せずにビット反転が実行されなかったことを示す”0”の非反転フラグを付加してエラー訂正回路30に出力する。
図2は、データ反転回路28から入力されたデータに対してデータ反転回路28からエラー訂正回路30に出力されたデータの一例を示す説明図である。また、エラー訂正回路30からのデータに対しては、5ビットずつ読み出して、読み出したデータが反転フラグを含んでいるときには反転フラグを削除すると共に残りの4ビットのデータに対してビット反転を実行してバッファ回路26に出力し、読み出したデータが非反転フラグを含んでいるときには非反転フラグを削除した4ビットのデータをバッファ回路26に出力する。こうした動作により、データ反転回路28からエラー訂正回路30に出力されるデータにおける”1”のデータの割合をより多くすることができる。こうした動作を行う理由は、以下の通りである。フラッシュメモリセルは、フローティングゲートに電子が注入されると、電子がフラッシュメモリセルのゲート絶縁膜を通過する際のストレスによりゲート絶縁膜が劣化する。したがって、”0”のデータが多くなるほど、フラッシュメモリセルに記憶しているデータにエラーが生じる確率が高くなると考えられる。また、データ保持時においては、フローティングゲートに注入されている電子が流出してエラーが生じることがあるため、”0”のデータが多いほどデータにエラーが生じる確率が高くなると考えられる。したがって、フラッシュメモリセルでは、”1”のデータを記憶させたほうが”0”のデータを記憶させることによりエラーが生じる確率が低くなると考えられるため、データ反転回路28から出力されるデータにおける”1”のデータの割合をより多くしたのである。こうしたデータ反転回路28により、フラッシュメモリ12に記憶しているデータにエラーが生じる確率をより低くすることができる。
【0030】
図3は、エラー訂正回路30の構成の概略を示す構成図である。エラー訂正回路30は、トランジスタ等の複数の論理素子からなる論理回路として構成されており、データの符号化および復号に用いるBCH符号のサイズである実行用符号長Scodeと実行用符号長ScodeのBCH符号に符号化するデータのサイズである実行用データ長Sdataとを記憶する訂正情報記憶部32と、データ反転回路28から入力されたデータを訂正情報記憶部32に記憶されている実行用符号長ScodeのBCH符号に符号化して出力する符号化部34と、フラッシュメモリ12から入力されたデータをBCH符号により復号してデータ反転回路28に出力すると共にフラッシュメモリ12から入力されたデータのうちエラーが生じているデータの数を検出する復号エラー数検出部36と、訂正情報記憶部32に記憶されている実行用符号長Scodeと実行用データ長Sdataとを変更する記憶処理部38と、から構成されている。
【0031】
符号化部34は、データ反転回路28から入力されたデータを訂正情報記憶部32に記憶されている実行用データ長Sdataずつ読み込んで、読み込んだ実行用データ長SdataのデータをBCH符号の生成多項式を用いた演算処理により実行用符号長ScodeのBCH符号に符号化するために付加すべきパリティビットを生成し、読み込んだ実行用データ長Sdataのデータに生成したパリティビットを付加したデータをメモリインターフェース回路24に出力する。
図4は、実行用データ長Sdataが512バイト、実行用符号長Scodeが(512バイト+104ビット)であるときに符号化部34から出力されるデータの構造を示す説明図である。なお、BCH符号の生成多項式を用いてデータの符号化する際の演算処理については、周知であるため、詳細な説明を省略する。
【0032】
復号エラー数検出部36は、フラッシュメモリ12からメモリインターフェース回路24を介して入力されたデータを訂正情報記憶部32に記憶されている実行用符号長Scodeずつ読み込み、読み込んだ実行用符号長Scodeのデータに対してBCH符号の生成多項式を用いたシンドローム計算処理により、読み込んだデータが符号化したときのデータと異なっているエラー(以下、「ビットエラー」という)が生じているビット位置を検出してエラー訂正を実行し、エラー訂正を実行したデータからパリティビットを削除してデータを復号してデータ反転回路28に出力する。こうした動作により、フラッシュメモリ12から入力されたデータに対してエラー訂正を行って復号して出力することができる。また、復号エラー数検出部36は、読み込んだ実行用符号長Scodeのデータに対してBCH符号の生成多項式を用いてビットエラーが生じているビット位置を検出する際に、n個(nは、1以上の整数)の実行用符号長Scodeのデータのうちビットエラーが生じているデータのビット数をエラーデータ数Nerrorとして検出する。ここで、エラーデータ数Nerrorを検出する際の実行用符号長Scodeの数である値nは、実験や解析などにより適宜設定されるものとした。なお、BCH符号の生成多項式を用いたシンドローム計算処理によりエラー訂正する際の演算処理については、周知であるため、詳細な説明を省略する。
【0033】
図5は、記憶処理部38の動作の一例を示すフローチャートである。記憶処理部38は、復号エラー数検出部36により検出されたエラーデータ数Nerrorと訂正情報記憶部32に記憶されているn個の実行用符号長ScodeのBCH符号で検出可能なデータのエラー数の上限である上限エラー数Nmaxとを比較する(ステップS100)。ここで、上限エラー数Nmaxは、データ長が実行用データSdataであり符号長が実行用符号長Scodeであるn個のBCH符号で検出可能なエラー数の上限であるものとし、例えば、512バイトのデータに104ビットのパリティビットを付加した符号長が(512バイト+104ビット)のn個のBCH符号では1個のBCH符号で検出可能なエラー数の上限が8ビットであるため上限エラー数Nmaxがn×8ビット、1Kバイトのデータに210ビットのパリティビットを付加した符号長が(1Kバイト+210ビット)のn個のBCH符号では1個のBCH符号で検出可能なエラー数の上限が15ビットであるため上限エラー数Nmaxがn×15ビットであるものとした。
【0034】
エラーデータ数Nerrorが上限エラー数Nmaxを超えているときには(ステップS100)、訂正情報記憶部32に記憶されている実行用データ長Sdataの2倍のデータ長を実行用データ長Sdataとして記憶させ、実行用データ長Sdataより長く上限エラー数Nmaxより多くのエラーを検出可能な符号長Screfを実行用符号長Scodeとして訂正情報記憶部32に記憶させ(ステップS110)、エラーデータ数Nerrorが上限エラー数Nmax以下であるときには(ステップS100)、訂正情報記憶部32に記憶されている実行用符号長Scodeと実行用データ長Sdataを変更せずに、処理を終了する。これにより、エラーデータ数Nerrorが上限エラー数Nmaxを超えているときには、訂正情報記憶部32により長い実行用データ長Sdataおよび実行用符号長Scodeが記憶されることになる。例えば、ステップS110の処理が実行される前に訂正情報記憶部32に実行用データ長Sdataとして512バイト,実行用符号長Scodeとして(512バイト+104ビット)が記憶されている場合には、ステップS110の処理を実行した後に、訂正情報記憶部32には実行用データ長Sdataとして1Kバイト,実行用符号長Scodeとして(1Kバイト+210ビット)が記憶されることになる。
【0035】
制御回路40には、ホストインターフェース回路22を介してホスト装置から各種制御信号が入力されると共にフラッシュメモリ12からメモリインターフェース回路24を介してフラッシュメモリ12の状態を示す各種信号が入力され、制御回路40からはバッファ回路26やデータ反転回路28、エラー訂正回路30,フラッシュメモリ12を制御するための制御信号が出力されている。
【0036】
こうして構成された実施例のフラッシュメモリシステム10では、ホスト装置60からフラッシュメモリ12へのデータの書き込みを要求する書き込み要求信号とフラッシュメモリ12にデータを書き込むアドレスを示すアドレス信号とがホストインターフェース回路22を介して制御回路40に入力されると、制御回路40は、ホスト装置60からのデータがホストインターフェース回路22,バッファ回路26,データ反転回路28,エラー訂正回路30を介してメモリインターフェース回路24からフラッシュメモリ12に出力されるようホストインターフェース回路22やバッファ回路26,データ反転回路28,エラー訂正回路30,メモリインターフェース回路24を制御する。バッファ回路26からデータが入力されたデータ反転回路28は、バッファ回路26からのデータを4ビットずつ読み出し、読み出した4ビットのデータに含まれる”1”のデータの数が”0”のデータの数に基づいて反転フラグまたは非反転フラグを付加し、5ビットのデータをエラー訂正回路30の符号化部34に入力する。データが入力されたエラー訂正回路30の符号化部34は、入力されたデータを実行用データ長Sdataずつ順次読み込んで実行用符号長ScodeのBCH符号に符号化してメモリインターフェース回路24に出力する。制御回路40は、このようにエラー訂正回路30を介してメモリインターフェース回路24から実行用符号長ScodeのBCH符号に符号化されたデータがページ単位でフラッシュメモリ12に記憶されるようフラッシュメモリ12を制御する。これにより、書き込み要求信号が入力されたときには、実行用符号長ScodeのBCH符号に符号化されたデータをフラッシュメモリ12に記憶させることができる。
【0037】
また、ホスト装置60からフラッシュメモリ12に記憶されているデータの読み出しを要求する読み出し要求信号とフラッシュメモリ12の読み出し先のアドレスを示すアドレス信号とがホストインターフェース回路22を介して制御回路40に入力されると、制御回路40は、フラッシュメモリ12からページ単位でデータが読み出されるようフラッシュメモリ12を制御する。そして、制御回路40は、フラッシュメモリ12から読み出したデータがメモリインターフェース回路24,エラー訂正回路30,データ反転回路28,バッファ回路26を介してホストインターフェース回路22からホスト装置60に出力されるようホストインターフェース回路22,バッファ回路26,データ反転回路28,エラー訂正回路30,メモリインターフェース回路24を制御する。データが入力されたエラー訂正回路30の復号エラー数検出部36は、入力されたデータを実行用符号長Scodeずつ読み込んでBCH符号を用いて読み込んだデータのうちビットエラーが生じているデータがあればエラー訂正を実行した後に復号した実行用データ長Sdataのデータをデータ反転回路28に入力し、読み込んだデータにビットエラーが生じていなければ読み込んだデータを復号した実行用データ長Sdataのデータをデータ反転回路28に入力する。データが入力されたデータ反転回路28は、データを5ビットずつ読み込んで、読み込んだデータが反転ビットを含んでいるときにはビット反転を実行して反転ビットを削除した4ビットのデータをバッファ回路26に出力し、読み込んだデータが非反転ビットを含んでいるときには非反転ビットを削除した4ビットのデータをバッファ回路26に出力する。これにより、読み出し要求信号が入力されたとき、フラッシュメモリ12に記憶されていたデータにビットエラーが生じているときには、エラーを訂正した上でホスト装置60に出力することができ、フラッシュメモリ12から読み出したデータにビットエラーが発生する確率を低くすることができ、フラッシュメモリシステム10の信頼性の向上を図ることができる。
【0038】
ホスト装置60からフラッシュメモリ12に記憶されているデータの消去を要求する消去要求信号と消去すべきブロックの情報を示すブロック情報信号とがホストインターフェース回路22を介して制御回路40に入力されたときには、制御回路40は、まずは、消去すべきブロックに対応するフラッシュメモリ12の領域からデータが読み出されるようフラッシュメモリ12を制御する。そして、フラッシュメモリ12から読み出したデータがメモリインターフェース回路24を介してエラー訂正回路30の復号エラー数検出部36に入力されるようエラー訂正回路30,メモリインターフェース回路24を制御し、その後、フラッシュメモリ12の消去すべきブロックに記憶されているデータが消去されるようフラッシュメモリ12を制御する。データが入力されたエラー訂正回路30の復号エラー数検出部36は、入力されたデータを実行用符号長Scodeずつ読み込んで読み込んだn個の実行用符号長Scodeのデータに対してBCH符号の生成多項式を用いて実行用符号長Scodeのデータのうちエラーが生じているデータのビット数であるエラーデータ数Nerrorを検出して記憶処理部38に出力する。記憶処理部38では、エラーデータ数Nerrorと上限エラー数Nmaxとを比較し、エラーデータ数Nerrorが上限エラー数Nmaxを超えているときには、訂正情報記憶部32に記憶されている実行用データ長Sdataの2倍のデータ長を実行用データ長Sdataとして記憶させ、実行用データ長Sdataで検出可能なエラー数の上限近傍の値より多くのエラーを検出可能な符号長を実行用符号長Scodeとして訂正情報記憶部32に記憶させる。次に、こうした処理を行う理由について説明する。
【0039】
図6は、フラッシュメモリ12に記憶されているデータにビットエラーが生じている様子の一例を示す説明図である。ここでは、説明のため、1個の実行用符号長Scodeのデータに対してエラーデータ数Nerrorを検出するものとする。図中、「×」印がビットエラーが生じているデータの位置を示している。ここでは、説明のため、最初にエラー訂正回路30の訂正情報記憶部32に実行用データ長Sdataとして512バイト,実行用符号長Scodeとして(512バイト+104ビット)が記憶されており、最初にフラッシュメモリ12から読み出した実行用符号長Scode(512バイト+104ビット)のデータに9ビットのビットエラーが生じて、次にフラッシュメモリ12から読み出した実行用符号長Scode(512バイト+104ビット)のデータに2ビットのビットエラーが生じているものとする。消去要求信号が入力されると、エラー訂正回路30の復号エラー数検出部36に実行用符号長Scode(512バイト+104ビット)のデータが入力される。このBCH符号では、8ビットのビットエラーまで訂正可能(上限エラー数Nmaxが値8)であるが、最初に読み出したデータには9ビットのビットエラーが生じているため、符号長が(512バイト+104ビット)のBCH符号では、エラー訂正回路30でエラー訂正することができない。実施例のエラー訂正回路30では、検出されたエラーデータ数Nerrorが上限エラー数Nmaxを超えているときには、訂正情報記憶部32に実行用データ長Sdataとして1Kバイト,実行用符号長Scodeとして(1Kバイト+210ビット)を記憶させるから、次に書き込み要求信号が入力されたときには、データのサイズが1Kバイト、パリティビットが210ビットの(1Kバイト+210ビット)の符号長のBCH符号がフラッシュメモリ12に記憶され、フラッシュメモリ12からデータを読み出す際には符号長が(1Kバイト+210ビット)のBCH符号としてデータが読み出される。このとき、図示するように、読み出したデータには11ビットのビットエラーが生じているが、符号長が(1Kバイト+210ビット)のBCH符号では15ビットまでのビットエラーを訂正することができるため、こうしたエラーを訂正することができるようになる。このように、検出されたエラーデータ数Nerrorが上限エラー数Nmaxを超えているときには、訂正情報記憶部32に記憶されている実行用データ長Sdataと実行用符号長Scodeとをより長くすることにより、より多くのエラーを訂正することができる。
【0040】
以上説明した第1実施例のフラッシュメモリシステム10によれば、ホスト装置60から消去要求信号が入力されたときには、フラッシュメモリ12に記憶されているデータを読み出して読み出したデータがエラー訂正回路30の復号エラー数検出部36に入力された後にフラッシュメモリ12に記憶されているデータが消去されるようメモリインターフェース回路24とエラー訂正回路30とフラッシュメモリ12とを制御する。データを入力されたエラー訂正回路30の復号エラー数検出部36は、エラーデータ数Nerrorを検出し、エラー訂正回路30の記憶処理部38は、検出されたエラーデータ数Nerrorが上限エラー数Nmaxを超えているときには上限エラー数Nmaxより多いエラーを検出可能でデータの長さが訂正情報記憶部32に記憶されている実行用データ長Sdataより長くなるデータの長さおよびBCH符号の符号長をそれぞれ実行用データ長Sdataおよび実行用符号長Scodeとして訂正情報記憶部32に記憶させるから、次に書き込み要求信号が入力されたときには、エラー訂正回路30の符号化部34は、入力されたデータをより長い実行用データ長Sdataずつ順次読み込んで該読み込んだデータをより長い実行用符号長ScodeのBCH符号に符号化して出力し、次に読み出し要求信号が入力されたときには、エラー訂正回路30の復号エラー数検出部36は、より長い実行用符号長ScodのBCH符号でデータをエラー訂正することができる。これにより、より多くのエラーを訂正することができる。また、データ反転回路28は、バッファ回路26からデータを4ビットずつ読み出し、読み出した4ビットのデータに含まれる”0”のデータの数が”1”のデータの数より多いときには”1”のデータを”0”に反転させると共に”0”のデータを”1”に反転させるビット反転を実行すると共に”1”の反転フラグを付加してエラー訂正回路30に出力し、読み出した4ビットのデータに含まれる”0”のデータの数が”1”のデータの数以下であるときにはビット反転を実行せずにビット反転が実行されなかったことを示す”0”の非反転フラグを付加してエラー訂正回路30に出力する。これにより、フラッシュメモリ12に記憶しているデータにエラーが生じる確率をより低くすることができる。
【0041】
第1実施例のフラッシュメモリシステム10では、メモリコントローラ20は、フラッシュメモリセルを複数有するフラッシュメモリセルアレイを備えるNAND型フラッシュメモリを制御するものとしたが、メモリコントローラ20で制御するメモリとしては、NAND型フラッシュメモリに限定されるものではなく、NOR型のフラッシュメモリを制御するものとしてもよい。また、メモリコントローラ20で制御するメモリとしては、こうしたフラッシュメモリに限定されるものではなく、不揮発性メモリであれば如何なるものでもよく、例えば、材料の結晶構造を変化させることでデータを記憶する相変化メモリや電子のスピンをメモリ素子として利用してデータを記憶する磁気抵抗メモリ、強誘電体のヒステリシス(履歴現象)を利用して正負の自発分極を1と0に対応させてデータを記憶する強誘電体メモリ、電圧の印加による電気抵抗の変化を利用してデータを記憶する抵抗変化型メモリなどの書き込み消去回数により記憶しているデータにエラーが生じる確率が高くなる傾向の不揮発性メモリであるものとしてもよい。
【実施例2】
【0042】
図7は、本発明の第2実施例としてのデータ入出力制御装置が搭載されたフラッシュメモリシステム110の構成の概略を示す構成図である。フラッシュメモリシステム110は、NAND型フラッシュメモリが形成されたシリコンチップが複数積層されてなるフラッシュメモリ112と、フラッシュメモリ112を制御するメモリコントローラ120と、から構成され、ホスト装置160(例えば、CPU(Centoral Processing Unit)など)から入力される各種制御信号に応じてホスト装置160から入力されたデータをフラッシュメモリ112に記憶したり、フラッシュメモリ112に記憶しているデータをホスト装置160に出力したりする。なお、こうしたフラッシュメモリ112とメモリコントローラ120とは、個別の半導体チップ上に形成されているものとする。
【0043】
フラッシュメモリ112は、フローティングゲートへの電子注入やフローティングゲートからの電子引き抜きにより閾値電圧が変化するフラッシュメモリセルを複数有するフラッシュメモリセルアレイ(図示せず)を備えるNAND型フラッシュメモリとして構成されており、フラッシュメモリセルアレイの他にロウデコーダ,カラムデコーダ,センスアンプなど(いずれも図示せず)を備える。フラッシュメモリ112では、ページ単位(実施例では、(512バイト+104ビット))でデータを書き込んだりデータを読み出し、複数ページからなるブロック単位(実施例では、64ページ)で記憶しているデータを消去する。フラッシュメモリセルに記憶されるデータは、実施例では、フローティングゲートに電子が注入された状態が”0”であるものとし、フローティングゲートから電子が引き抜かれた状態が”1”であるものとする。
【0044】
メモリコントローラ120は、トランジスタ等の複数の論理素子からなる論理回路として構成されており、ホスト装置160からの各種制御信号を出力したりホスト装置160にデータを入出力するホストインターフェース回路122と、フラッシュメモリ112に各種制御信号を出力したりフラッシュメモリ112にデータを入出力するメモリインターフェース回路124と、ホストインターフェース回路122に入力されたデータを一時的に記憶するバッファ回路126と、バッファ回路126からデータを読み出して記憶されているデータに含まれる”1”のデータの数に応じてデータを反転または非反転させて非反転フラグまたは変換フラグを付加して出力するデータ反転回路128と、フラッシュメモリ112にデータを書き込んだ回数を計数する書き込み消去回数計数回路129と、データ反転回路128からのデータをBCH(Bose-Chaudfuri-Hocquenghem)符号により符号化してメモリインターフェース回路124に出力したりメモリインターフェース回路124からのデータを復号してデータ反転回路128に出力するエラー訂正回路130と、メモリコントローラ120の全体の動作を制御する制御回路140と、を備える。
【0045】
データ反転回路128は、バッファ回路126からデータを4ビットずつ読み出し、読み出した4ビットのデータに含まれる”0”のデータの数が”1”のデータの数より多いときには”1”のデータを”0”に反転させると共に”0”のデータを”1”に反転させるビット反転を実行すると共にビット反転後のデータにビット反転が行われたことを示す”1”の反転フラグを付加してエラー訂正回路130に出力し、読み出した4ビットのデータに含まれる”0”のデータの数が”1”のデータの数以下であるときにはビット反転を実行せずにビット反転が実行されなかったことを示す”0”の非反転フラグを付加してエラー訂正回路130に出力する。
図8は、データ反転回路128から入力されたデータに対してデータ反転回路128からエラー訂正回路130に出力されたデータの一例を示す説明図である。また、エラー訂正回路130からのデータに対しては、5ビットずつ読み出して、読み出したデータが反転フラグを含んでいるときには反転フラグを削除すると共に残りの4ビットのデータに対してビット反転を実行してバッファ回路126に出力し、読み出したデータが非反転フラグを含んでいるときには非反転フラグを削除した4ビットのデータをバッファ回路126に出力する。こうした動作により、データ反転回路128からエラー訂正回路130に出力されるデータにおける”1”のデータの割合をより多くすることができる。こうした動作を行う理由は、以下の通りである。フラッシュメモリセルは、フローティングゲートに電子が注入されると、電子がフラッシュメモリセルのゲート絶縁膜を通過する際のストレスによりゲート絶縁膜が劣化する。したがって、”0”のデータが多くなるほど、フラッシュメモリセルに記憶しているデータにエラーが生じる確率が高くなると考えられる。また、データ保持時においては、フローティングゲートに注入されている電子が流出してエラーが生じることがあるため、”0”のデータが多いほどデータにエラーが生じる確率が高くなると考えられる。したがって、フラッシュメモリセルでは、”1”のデータを記憶させたほうが”0”のデータを記憶させることによりエラーが生じる確率が低くなると考えられるため、データ反転回路128から出力されるデータにおける”1”のデータの割合をより多くしたのである。こうしたデータ反転回路128により、フラッシュメモリ112に記憶しているデータにエラーが生じる確率をより低くすることができる。
【0046】
書き込み消去回数計数回路129は、フラッシュメモリ112にページ毎にデータが書き込まれる回数とデータが消去された回数との和の回数である書き込み消去回数Nwrを計数してエラー訂正回路130に出力する。ここで、フラッシュメモリ12のデータが書き込まれたページの情報やデータが消去されたブロックの情報は、制御回路40から入力されるものとした。
【0047】
図9は、エラー訂正回路130の構成の概略を示す構成図である。エラー訂正回路130は、トランジスタ等の複数の論理素子からなる論理回路として構成されており、データの符号化および復号に用いるBCH符号のサイズである実行用符号長Scodeと実行用符号長ScodeのBCH符号に符号化するデータのサイズである実行用データ長Sdataとを記憶する訂正情報記憶部132と、データ反転回路128から入力されたデータを訂正情報記憶部132に記憶されている実行用符号長ScodeのBCH符号に符号化して出力する符号化部134と、フラッシュメモリ112から入力されたデータをBCH符号により復号してデータ反転回路128に出力する復号部136と、エラー訂正回路130から入力された書き込み回数Nwrに基づいて訂正情報記憶部132に記憶されている実行用符号長Scodeと実行用データ長Sdataとを変更する記憶処理部138と、から構成されている。
【0048】
符号化部134は、データ反転回路128から入力されたデータを訂正情報記憶部132に記憶されている実行用データ長Sdataずつ読み込んで、読み込んだ実行用データ長SdataのデータをBCH符号の生成多項式を用いた演算処理により実行用符号長ScodeのBCH符号に符号化するために付加すべきパリティビットを生成し、読み込んだ実行用データ長Sdataのデータに生成したパリティビットを付加したデータをメモリインターフェース回路124に出力する。
図10は、実行用データ長Sdataが512バイト、実行用符号長Scodeが(512バイト+104ビット)であるときに符号化部134から出力されるデータの構造を示す説明図である。なお、BCH符号の生成多項式を用いてデータの符号化する際の演算処理については、周知であるため、詳細な説明を省略する。
【0049】
復号部136は、フラッシュメモリ112からメモリインターフェース回路124を介して入力されたデータを訂正情報記憶部132に記憶されている実行用符号長Scodeずつ読み込み、読み込んだ実行用符号長Scodeのデータに対してBCH符号の生成多項式によるシンドローム計算処理により、読み込んだデータが符号化したときのデータと異なっているエラー(以下、「ビットエラー」という)が生じているビット位置を検出してエラー訂正を実行し、エラー訂正を実行したデータからパリティビットを削除してデータを復号してデータ反転回路128に出力する。こうした動作により、フラッシュメモリ112から入力されたデータに対してエラー訂正を行って復号して出力することができる。なお、BCH符号の生成多項式を用いたシンドローム計算処理によりエラー訂正する際の演算処理については、周知であるため、詳細な説明を省略する。
【0050】
図11は、記憶処理部138の動作の一例を示すフローチャートである。記憶処理部138は、書き込み消去回数計数回路129から入力された書き込み消去回数Nwrと判定用閾値Nrefとを比較する(ステップS200)。判定用閾値Nrefは、フラッシュメモリ12に記憶されているn個(nは、1以上の整数)の実行用符号長ScodeのBCH符号のデータに生じるビットエラーの数であるエラー数Nerrorと書き込み消去回数Nwrとの関係を予め実験や解析等などによりマップとして求めておき、訂正情報記憶部132に記憶されているn個の実行用符号長ScodeのBCH符号で検出可能なデータのエラー数の上限である上限エラー数Nmaxをエラー数Nerrorとし、このエラー数Nerrorに対応する書き込み消去回数Nwrとして設定されるものとした。
図12は、エラー数Nerrorと書き込み消去回数Nwrとの関係を示す説明図である。エラー数Nerrorと書き込み消去回数Nwrとが図示するような関係となるのは、フラッシュメモリ12では、一般に、フラッシュメモリセルへの書き込み消去回数Nwrが多いほどフラッシュメモリセルのゲート絶縁膜が劣化するため、フラッシュメモリセルへの書き込み消去回数Nwrが多いほどエラー数Nerrorが多くなるためである。なお、上限エラー数Nmaxは、実行用符号長Scodeに基づいて定められ、512バイトのデータに104ビットのパリティビットを付加した符号長が(512バイト+104ビット)のn個のBCH符号では1個のBCH符号で検出可能なエラー数の上限が8ビットであるため上限エラー数Nmaxがn×8ビット、1Kバイトのデータに210ビットのパリティビットを付加した符号長が(1Kバイト+210ビット)のn個のBCH符号では1個のBCH符号で検出可能なエラー数の上限が15ビットであるため上限エラー数Nmaxがn×15ビットであるものとした。
【0051】
書き込み消去回数Nwrが判定用閾値Nrefを超えているときには(ステップS200)、訂正情報記憶部132に記憶されている実行用データ長Sdataの2倍のデータ長を実行用データ長Sdataとして記憶させ、実行用データ長Sdataより長く上限エラー数Nmaxより多くのエラーを検出可能な符号長Screfを実行用符号長Scodeとして訂正情報記憶部132に記憶させ(ステップS210)、書き込み消去回数Nwrが判定用閾値Nref以下であるときには(ステップS200)、訂正情報記憶部132に記憶されている実行用符号長Scodeと実行用データ長Sdataを変更せずに、処理を終了する。これにより、エラーデータ数Nerrorが上限エラー数Nmaxを超えているときには、訂正情報記憶部132により長い実行用データ長Sdataおよび実行用符号長Scodeが記憶されることになる。例えば、ステップS210の処理が実行される前に訂正情報記憶部132に実行用データ長Sdataとして512バイト,実行用符号長Scodeとして(512バイト+104ビット)が記憶されている場合には、ステップS210の処理を実行した後に、訂正情報記憶部132には実行用データ長Sdataとして1Kバイト,実行用符号長Scodeとして(1Kバイト+210ビット)が記憶されることになる。
【0052】
制御回路140には、ホストインターフェース回路122を介してホスト装置から各種制御信号が入力されると共にフラッシュメモリ112からメモリインターフェース回路124を介してフラッシュメモリ112の状態を示す各種信号が入力され、制御回路140からはフラッシュメモリ12のデータが書き込まれたページの情報やデータが消去されたブロックの情報やバッファ回路126やデータ反転回路128、エラー訂正回路130,フラッシュメモリ112を制御するための制御信号が出力されている。
【0053】
こうして構成された実施例のフラッシュメモリシステム110では、ホスト装置160からフラッシュメモリ112へのデータの書き込みを要求する書き込み要求信号とフラッシュメモリ112にデータを書き込むアドレスを示すアドレス信号とがホストインターフェース回路122を介して制御回路140に入力されると、制御回路140は、ホスト装置160からのデータがホストインターフェース回路122,バッファ回路126,データ反転回路128,エラー訂正回路130を介してメモリインターフェース回路124からフラッシュメモリ112に出力されるようホストインターフェース回路122やバッファ回路126,データ反転回路128,エラー訂正回路130,メモリインターフェース回路124を制御する。バッファ回路126からデータが入力されたデータ反転回路128は、バッファ回路126からのデータを4ビットずつ読み出し、読み出した4ビットのデータに含まれる”1”のデータの数が”0”のデータの数に基づいて反転フラグまたは非反転フラグを付加し、5ビットのデータをエラー訂正回路130の符号化部134に入力する。データが入力されたエラー訂正回路130の符号化部134は、入力されたデータを実行用データ長Sdataずつ順次読み込んで実行用符号長ScodeのBCH符号に符号化してメモリインターフェース回路124に出力する。制御回路140は、このようにエラー訂正回路130を介してメモリインターフェース回路124から実行用符号長ScodeのBCH符号に符号化されたデータがページ単位でフラッシュメモリ112に記憶されるようフラッシュメモリ112を制御する。これにより、書き込み要求信号が入力されたときには、実行用符号長ScodeのBCH符号に符号化されたデータをフラッシュメモリ112に記憶させることができる。
【0054】
また、ホスト装置160からフラッシュメモリ112に記憶されているデータの読み出しを要求する読み出し要求信号とフラッシュメモリ112の読み出し先のアドレスを示すアドレス信号とがホストインターフェース回路122を介して制御回路140に入力されると、制御回路140は、フラッシュメモリ112からページ単位でデータが読み出されるようフラッシュメモリ112を制御する。そして、制御回路140は、フラッシュメモリ112から読み出したデータがメモリインターフェース回路124,エラー訂正回路130,データ反転回路128,バッファ回路126を介してホストインターフェース回路122からホスト装置160に出力されるようホストインターフェース回路122,バッファ回路126,データ反転回路128,エラー訂正回路130,メモリインターフェース回路124を制御する。データが入力されたエラー訂正回路130の復号部136は、入力されたデータを実行用符号長Scodeずつ読み込んでBCH符号を用いて読み込んだデータのうちビットエラーが生じているデータがあればエラー訂正を実行した後に復号した実行用データ長Sdataのデータをデータ反転回路128に入力し、読み込んだデータにビットエラーが生じていなければ読み込んだデータを復号した実行用データ長Sdataのデータをデータ反転回路128に入力する。データが入力されたデータ反転回路128は、データを5ビットずつ読み込んで、読み込んだデータが反転ビットを含んでいるときにはビット反転を実行して反転ビットを削除した4ビットのデータをバッファ回路126に出力し、読み込んだデータが非反転ビットを含んでいるときには非反転ビットを削除した4ビットのデータをバッファ回路126に出力する。これにより、読み出し要求信号が入力されたとき、フラッシュメモリ112に記憶されていたデータにビットエラーが生じているときには、エラーを訂正した上でホスト装置160に出力することができ、フラッシュメモリ112から読み出したデータにビットエラーが発生する確率を低くすることができ、フラッシュメモリシステム110の信頼性の向上を図ることができる。
【0055】
さらに、ホスト装置160からフラッシュメモリ112に記憶されているデータの消去を要求する消去要求信号と消去すべきブロックの情報を示すブロック情報信号とがホストインターフェース回路122を介して制御回路140に入力されたときには、制御回路140は、消去すべきブロックに対応するフラッシュメモリ112の領域からデータが読み出されるようフラッシュメモリ112を制御する。
【0056】
こうして構成されたフラッシュメモリシステム110において、書き込み消去回数計数回路129で計数された書き込み消去回数Nwrが判定用閾値Nrefを超えると、エラー訂正回路130の記憶処理部138は、訂正情報記憶部132に記憶されている実行用データ長Sdataの2倍のデータ長を実行用データ長Sdataとして記憶させ、先に記憶されている実行用データ長Sdataより長く先に記憶されている実行用符号長ScodeのBCH符号で検出可能なエラー数の上限近傍の値より多くのエラーを検出可能な符号長を実行用符号長Scodeとして訂正情報記憶部132に記憶させる。
図13は、フラッシュメモリ112に記憶されているデータにビットエラーが生じている様子の一例を示す説明図である。ここでは、説明のため、1個の実行用符号長Scodeのデータに対してエラーデータ数Nerrorを検出するものとする。図中、「×」印がビットエラーが生じているデータの位置を示している。ここでは、説明のため、最初にエラー訂正回路130の訂正情報記憶部132に実行用データ長Sdataとして512バイト,実行用符号長Scodeとして(512バイト+104ビット)が記憶されており、最初にフラッシュメモリ112から読み出した実行用符号長Scode(512バイト+104ビット)のデータに9ビットのビットエラーが生じて、次にフラッシュメモリ112から読み出した実行用符号長Scode(512バイト+104ビット)のデータに2ビットのビットエラーが生じているものとする。読み出し要求信号が入力されたときには、最初に、エラー訂正回路130の復号部136に実行用符号長Scode(512バイト+104ビット)のデータが入力される。このBCH符号では、8ビットのビットエラーまで訂正可能(上限エラー数Nmaxが値8)であるが、最初に読み出したデータには9ビットのビットエラーが生じているため、符号長が(512バイト+104ビット)のBCH符号では、エラー訂正回路130でエラー訂正することができない。実施例のエラー訂正回路130では、書き込み消去回数計数回路129で計数された書き込み消去回数Nwrが判定用閾値Nrefを超えると、訂正情報記憶部132に実行用データ長Sdataとして1Kバイト,実行用符号長Scodeとして(1Kバイト+210ビット)を記憶させるから、次に書き込み要求信号が入力されたときには、データのサイズが1Kバイト、パリティビットが210ビットの(1Kバイト+210ビット)の符号長のBCH符号がフラッシュメモリ112に記憶され、フラッシュメモリ112からデータを読み出す際には符号長が(1Kバイト+210ビット)のBCH符号としてデータが読み出される。このとき、図示するように、読み出したデータには11ビットのビットエラーが生じているが、符号長が(1Kバイト+210ビット)のBCH符号では15ビットまでのビットエラーを訂正することができるため、こうしたエラーを訂正することができるようになる。このように、書き込み消去回数計数回路129で計数された書き込み消去回数Nwrが判定用閾値Nrefを超えたときには、訂正情報記憶部132に記憶されている実行用データ長Sdataと実行用符号長Scodeとをより長くすることにより、より多くのエラーを訂正することができる。
【0057】
以上説明した第2実施例のフラッシュメモリシステム110によれば、書き込み消去回数計数回路129で計数された書き込み消去回数Nwrが判定用閾値Nrefを超えたときには、エラー訂正回路130の記憶処理部138は、上限エラー数Nmaxより多いエラーを検出可能でデータの長さが訂正情報記憶部132に記憶されている実行用データ長Sdataより長くなるデータの長さおよびBCH符号の符号長をそれぞれ実行用データ長Sdataおよび実行用符号長Scodeとして訂正情報記憶部132に記憶させるから、次に書き込み要求信号が入力されたときには、エラー訂正回路130の符号化部134は、入力されたデータをより長い実行用データ長Sdataずつ順次読み込んで該読み込んだデータをより長い実行用符号長ScodeのBCH符号に符号化して出力し、次に読み出し要求信号が入力されたときには、エラー訂正回路130の復号部136は、より長い実行用符号長ScodのBCH符号でデータをエラー訂正することができる。これにより、より多くのエラーを訂正することができる。また、データ反転回路128は、バッファ回路126からデータを4ビットずつ読み出し、読み出した4ビットのデータに含まれる”0”のデータの数が”1”のデータの数より多いときには”1”のデータを”0”に反転させると共に”0”のデータを”1”に反転させるビット反転を実行すると共に”1”の反転フラグを付加してエラー訂正回路130に出力し、読み出した4ビットのデータに含まれる”0”のデータの数が”1”のデータの数以下であるときにはビット反転を実行せずにビット反転が実行されなかったことを示す”0”の非反転フラグを付加してエラー訂正回路130に出力する。これにより、フラッシュメモリ112に記憶しているデータにエラーが生じる確率をより低くすることができる。
【0058】
第2実施例のフラッシュメモリシステム110では、メモリコントローラ20は、フラッシュメモリセルを複数有するフラッシュメモリセルアレイを備えるNAND型フラッシュメモリを制御するものとしたが、メモリコントローラ20で制御するメモリとしては、NAND型フラッシュメモリに限定されるものではなく、NOR型のフラッシュメモリを制御するものとしてもよい。また、メモリコントローラ20で制御するメモリとしては、こうしたフラッシュメモリに限定されるものではなく、書き込み消去回数により記憶しているデータにエラーが生じる確率が高くなる傾向の不揮発性メモリであれば如何なるものでもよく、例えば、材料の結晶構造を変化させることでデータを記憶する相変化メモリや電子のスピンをメモリ素子として利用してデータを記憶する磁気抵抗メモリ、強誘電体のヒステリシス(履歴現象)を利用して正負の自発分極を1と0に対応させてデータを記憶する強誘電体メモリ、電圧の印加による電気抵抗の変化を利用してデータを記憶する抵抗変化型メモリであるものとしてもよい。
【0059】
第1,第2実施例のフラッシュメモリシステム10,110では、上限エラー数Nmaxを、データ長が実行用データSdataであり符号長が実行用符号長Scodeであるn個のBCH符号で検出可能なエラー数の上限であるものとしたが、こうしたエラー数の上限より若干小さい値であるものとしてもよい。例えば、512バイトのデータに104ビットのパリティビットを付加した符号長が(512バイト+104ビット)のn個のBCH符号では、1個のBCH符号で検出可能なエラー数の上限が8ビットであるため、上限エラー数Nmaxをn×8ビットより数ビットから10数ビット小さいものとするのが望ましく、1Kバイトのデータに210ビットのパリティビットを付加した符号長が(1Kバイト+210ビット)のn個のBCH符号では、1個のBCH符号で検出可能なエラー数の上限が15ビットであるため、上限エラー数Nmaxをn×15ビットより数ビットから10数ビット
小さいものとするのが望ましい。
【0060】
第1,第2実施例のフラッシュメモリシステム10,110では、記憶処理部38,138において訂正情報記憶部32,132に記憶されている実行用データ長Sdataより長くなるデータの長さおよびBCH符号の符号長をそれぞれ実行用データ長Sdataおよび実行用符号長Scodeとして訂正情報記憶部32,132に記憶させる際に、実行用符号長Scodeの上限である上限実行用符号長Scmax未満となるよう実行用データ長Sdataや実行用符号長Scodeを定めて訂正情報記憶部32,132に記憶させるものとしてもよい。この場合、上限実行用符号長Scmaxを、エラー訂正回路30の消費電力がエラー訂正回路30に許容される許容電力以下となる実行用符号長Scodeやホストインターフェース回路22とバッファ回路26とデータ反転回路28とエラー訂正回路30とメモリインターフェース回路24とを組み合わせた回路の消費電力がこれらを組み合わせた回路に許容される許容電力以下となる実行用符号長Scode,メモリコントローラ20の消費電力がメモリコントローラに許容される許容電力以下となる実行用符号長Scodeに設定するものしてもよい。このように設定するのは、実行用符号長Scodeが長くなるほどエラー訂正回路30の消費電力が大きくなるため、エラー訂正回路30の消費電力やホストインターフェース回路22とバッファ回路26とデータ反転回路28とエラー訂正回路30とメモリインターフェース回路24とを組み合わせた回路の消費電力,メモリコントローラ20の消費電力が大きくなる傾向であることに基づく。こうすれば、エラー訂正回路30やホストインターフェース回路22とバッファ回路26とデータ反転回路28とエラー訂正回路30とメモリインターフェース回路24とを組み合わせた回路,メモリコントローラ20の消費電力がそれぞれに許容させる許容電力を超えるのを抑制することができる。また、上限実行用符号長Scmaxを、メモリインターフェース回路24が単位時間あたりにフラッシュメモリ12からデータを読み出し可能なデータ量である読み出し速度がメモリインターフェース回路24に許容される許容読み出し速度以下となる実行用符号長Scodeに設定するものとしてもよい。このように設定するのは、実行用符号長Scodeが長くなるほどメモリインターフェース回路24における読み出し速度が遅くなる傾向であることに基づく。こうすれば、フラッシュメモリ12からのデータの読み出し速度が許容読み出し速度以下となるのを抑制することができる。また、上限実行用符号長Scmaxを、エラー訂正回路30の面積がエラー訂正回路30に許容される許容面積以下となる実行用符号長Scodeやホストインターフェース回路22とバッファ回路26とデータ反転回路28とエラー訂正回路30とメモリインターフェース回路24とを組み合わせた回路の面積がこれらを組み合わせた回路に許容される許容面積以下となる実行用符号長Scode,メモリコントローラ20の面積がメモリコントローラに許容される許容面積以下となる実行用符号長Scodeに設定するものしてもよい。このように設定するのは、実行用符号長Scodeが長くなるほどエラー訂正回路30の面積が大きくなるため、エラー訂正回路30の面積やホストインターフェース回路22とバッファ回路26とデータ反転回路28とエラー訂正回路30とメモリインターフェース回路24とを組み合わせた回路の面積,メモリコントローラ20の面積が大きくなる傾向であることに基づく。こうすれば、エラー訂正回路30やホストインターフェース回路22とバッファ回路26とデータ反転回路28とエラー訂正回路30とメモリインターフェース回路24とを組み合わせた回路,メモリコントローラ20の面積がそれぞれに許容させる許容面積を超えるのを抑制することができる。さらに、上限実行用符号長Scmaxを、上述した回路の消費電力および読み出し速度,回路の面積のうち複数を考慮して設定するものとしてもよい。
【0061】
第1,第2実施例のフラッシュメモリシステム10,110では、記憶処理部38,138を書き込み消去回数Nwrが判定用閾値Nrefを超えているときには訂正情報記憶部132に記憶されている実行用データ長Sdataの2倍のデータ長を実行用データ長Sdataとして訂正情報記憶部132記憶させるものとしたが、実行用データ長Sdataより長いデータ長を実行用データ長Sdataとして訂正情報記憶部132に記憶させればよいから、例えば、訂正情報記憶部132に記憶されている実行用データ長Sdataのm倍(mは、3以上の整数)のデータ長を実行用データ長Sdataとして訂正情報記憶部132記憶させるものとしてもよい。
【0062】
第1,第2実施例のフラッシュメモリシステム10,110では、データ反転回路28,128は、バッファ回路26,126からデータを4ビットずつ読み出し、読み出した4ビットのデータに含まれる”1”のデータの数が”0”のデータの数に基づいて1ビットの反転フラグまたは非反転フラグを付加するものとしたが、バッファ回路26,126から読み出すデータや反転フラグ,非反転フラグのサイズ(ビット数)は如何なるものとしてもよく、エラー訂正回路130からのデータに対しては、付加した反転フラグ,非反転フラグのサイズを考慮して反転フラグ,非反転フラグを削除したデータをバッファ回路26,126に出力すればよい。
【0063】
第1,第2実施例のフラッシュメモリシステム10,110では、データを符号化する際にBCH符号を用いるものとしたが、こうしたエラー訂正を行うための符号としては、BCH符号に限定されるものではなく、リード・ソロモン符号などのブロック符号やLDPC符号などの畳込み符号を用いるものとしてもよい。
【0064】
第1,第2実施例のフラッシュメモリシステム10,110では、メモリコントローラ20は、データ反転回路28,128を備えているものとしたが、メモリコントローラ20をデータ反転回路28,128を備えていないものとしてバッファ回路26,126とエラー訂正回路30,130との間でデータを入出力するものとしてもよい。
【0065】
第1,第2実施例のフラッシュメモリシステム10,110では、フラッシュメモリセルは、フローティングゲートに電子が注入された状態を”0”のデータとして記憶し、フローティングゲートから電子が引き抜かれて”0”の状態よりフローティングゲートの電子が少なくなっている状態を”1”のデータとして記憶する二値記憶の素子であるものとしたが、例えば、フローティングゲートへの電子の注入量が4段階に制御され”00”,”01”,”10”,”11”の4値を記憶可能なものなど、二値より多い多値記憶の素子とするものとしてもよい。
【0066】
第1,第2実施例のフラッシュメモリシステム10,110では、フラッシュメモリ12,112とメモリコントローラ20,120とは個別の半導体チップ上に形成されているものとしたが、同一の半導体チップ上に形成されているものとしてもよい。
【0067】
以上、本発明を実施するための形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において、種々なる形態で実施し得ることは勿論である。
【0068】
なお、本発明は、平成21年度独立行政法人科学技術振興機構の戦略的創造研究推進事業の研究課題「ディペンダブル ワイヤレス ソリッド・ステート・ドライブ」の成果である。