(57)【要約】【課題】エラー訂正処理時間の短縮、消費電力の削減、およびエラー訂正用データの削減を図る。【解決手段】メモリインターフェイスと、ホストからのコマンドに従ってメモリインターフェイスを制御する制御部と、を具備し、メモリインターフェイスは、メモリへの書き込みが２値書き込みの場合、データに対してｉビットの第１エラー訂正ビット数を設定し、多値書き込みの場合、データに対してｊビット（ｉ＜ｊ）の第２エラー訂正ビット数を設定するエラー訂正ビット数設定部１６１と、エラー訂正ビット数設定部により、第１エラー訂正ビット数が設定された場合、ｋバイトの第１エラー訂正コードを生成してデータに付加し、第２エラー訂正ビット数が設定された場合、ｌ（ｋ＜ｌ）バイトの第２エラー訂正コードを生成してデータに付加するエラー訂正コード生成付加部１６２と、を備える。【選択図】      図４
2012164072.tif 000002
【特許請求の範囲】
【請求項１】
ホストからのコマンドに従って２値または多値での書き込み、読み出し、および消去可能な複数のメモリセルを有するメモリを制御するメモリコントローラであって、
前記ホストとの間でコマンドおよびデータをアクセスするホストインターフェイスと、
前記メモリとの間でコマンドおよびデータをアクセスするメモリインターフェイスと、
前記ホストインターフェイスを介して前記ホストからのコマンドに従って前記メモリインターフェイスを制御する制御部と、
を具備し、
前記メモリインターフェイスは、
前記ホストからのデータを前記メモリに書きこむ際、前記メモリへの書き込みが２値書き込みの場合、前記ホストからのデータに対してｉビットの第１エラー訂正ビット数を設定し、前記メモリへの書き込みが多値書き込みの場合、前記ホストからのデータに対してｊビット（ｉ＜ｊ）の第２エラー訂正ビット数を設定するエラー訂正ビット数設定部《１６１》と、
前記エラー訂正ビット数設定部により、前記第１エラー訂正ビット数が設定された場合、ｋバイトの第１エラー訂正コードを生成して前記ホストからのデータに付加し、前記第２エラー訂正ビット数が設定された場合、ｌ（ｋ＜ｌ）バイトの第２エラー訂正コードを生成して前記ホストからのデータに付加するエラー訂正コード生成付加部と、
を備えることを特徴とするメモリコントローラ。
【請求項２】
前記ホストからのデータを前記メモリに２値で書き込むか多値で書き込むかの判断は、前記ホストから入力される論理アドレスに応じて行われることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
ホストからのコマンドに従って書き込み、読み出し、および消去可能な複数のメモリセルを有するメモリを制御するメモリコントローラであって、
ホストとの間でコマンドおよびデータをアクセスするホストインターフェイスと、
前記メモリとの間でコマンドおよびデータをアクセスするメモリインターフェイスと、
前記ホストインターフェイスを介して前記ホストからのコマンドに従って前記メモリインターフェイスを制御する制御部と、
を具備し、
前記メモリインターフェイスは、
前記ホストからのデータを前記メモリに書きこむ際、前記ホストからのデータが前記ホストからのコマンドによって通知されたデータである場合、前記ホストからのデータに対してｍビットの第１エラー訂正ビット数を設定し、前記ホストからのデータが前記ホストからのコマンドによって通知されていないデータである場合、前記ホストからのデータに対してｎビット（ｍ＜ｎ）の第２エラー訂正ビット数を設定するエラー訂正ビット数設定部と、
前記エラー訂正ビット数設定部により、前記第１エラー訂正ビット数が設定された場合、ｋバイトの第１エラー訂正コードを生成して前記ホストからのデータに付加し、前記第２エラー訂正ビット数が設定された場合、ｌ（ｋ＜ｌ）バイトの第２エラー訂正コードを生成して前記ホストからのデータに付加するエラー訂正コード生成付加部と、
を備えることを特徴とするメモリコントローラ。
【請求項４】
ホストからのコマンドに従って書き込み、読み出し、および消去可能な複数のメモリセルを有するメモリを制御するメモリコントローラであって、
ホストとの間でコマンドおよびデータをアクセスするホストインターフェイスと、
前記メモリとの間でコマンドおよびデータをアクセスするメモリインターフェイスと、
前記ホストインターフェイスを介して前記ホストからのコマンドに従って前記メモリインターフェイスを制御する制御部と、
を具備し、
前記メモリインターフェイスは、
前記ホストからのデータを前記メモリに書きこむ際、前記メモリの消去回数が閾値より少ない場合、前記ホストからのデータに対してｍビットの第１エラー訂正ビット数を設定し、前記メモリの消去回数が閾値以上である場合、前記ホストからのデータに対してｎビット（ｍ＜ｎ）の第２エラー訂正ビット数を設定するエラー訂正ビット数設定部と、
前記エラー訂正ビット数設定部により、前記第１エラー訂正ビット数が設定された場合、ｋバイトの第１エラー訂正コードを生成して前記ホストからのデータに付加し、前記第２エラー訂正ビット数が設定された場合、ｌ（ｋ＜ｌ）バイトの第２エラー訂正コードを生成して前記ホストからのデータに付加するエラー訂正コード生成付加部と、
を備えることを特徴とするメモリコントローラ。
【請求項５】
前記メモリは前記複数のメモリセルのうちの所定個のメモリセルで構成される複数のブロックを有し、前記メモリの消去回数は前記メモリ内の前記ブロック毎に異なることを特徴とする請求項４に記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリコントローラに関する。
【背景技術】
【０００２】
近年、ＮＡＮＤ型フラッシュメモリは、メモリセルに多値技術を適用することで記憶容量を増加させている。このようなＮＡＮＤ型フラッシュメモリにおける信頼性の向上を図るため、ホストおよびＮＡＮＤ型フラッシュメモリに接続可能でＮＡＮＤ型フラッシュメモリを管理するメモリコントローラにおいて、エラー検査・訂正（ＥＣＣ：Error Checking and Correction）を行うＥＣＣ回路技術が提案されている。
【０００３】
通常、ＥＣＣを行うメモリコントローラは、エラー訂正ビット数を固定にしている。このため、フラッシュメモリの信頼性によってはエラー訂正ビット数が過剰となる。その結果、エラー訂正処理時間および消費電力が必要以上に掛かってしまう。また、エラー訂正用のデータも余分に必要になる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２５９１１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
エラー訂正処理時間の短縮、消費電力の削減、およびエラー訂正用データの削減を図るメモリコントローラを提供する。
【課題を解決するための手段】
【０００６】
本実施形態によるメモリコントローラは、ホストからのコマンドに従って２値または多値での書き込み、読み出し、および消去可能な複数のメモリセルを有するメモリを制御するメモリコントローラであって、前記ホストとの間でコマンドおよびデータをアクセスするホストインターフェイスと、前記メモリとの間でコマンドおよびデータをアクセスするメモリインターフェイスと、前記ホストインターフェイスを介して前記ホストからのコマンドに従って前記メモリインターフェイスを制御する制御部と、を具備し、前記メモリインターフェイスは、前記ホストからのデータを前記メモリに書きこむ際、前記メモリへの書き込みが２値書き込みの場合、前記ホストからのデータに対してｉビットの第１エラー訂正ビット数を設定し、前記メモリへの書き込みが多値書き込みの場合、前記ホストからのデータに対してｊビット（ｉ＜ｊ）の第２エラー訂正ビット数を設定するエラー訂正ビット数設定部と、前記エラー訂正ビット数設定部により、前記第１エラー訂正ビット数が設定された場合、ｋバイトの第１エラー訂正コードを生成して前記ホストからのデータに付加し、前記第２エラー訂正ビット数が設定された場合、ｌ（ｋ＜ｌ）バイトの第２エラー訂正コードを生成して前記ホストからのデータに付加するエラー訂正コード生成付加部と、を備える。
【図面の簡単な説明】
【０００７】
【図１】本実施形態におけるメモリコントローラの構成例を示すブロック図。
【図２】本実施形態におけるフラッシュメモリの構成例を示すブロック図。
【図３】本実施形態におけるフラッシュメモリの２値モードおよび多値モードについて説明するための図。
【図４】本実施形態におけるＥＣＣ回路の構成例を示すブロック図。
【図５】図５（ａ）は、本実施形態におけるフラッシュメモリに書き込まれるデータ構成の比較例を示すブロック図であり、図５（ｂ）は、本実施形態におけるフラッシュメモリ３００に書き込まれるデータ構成を示すブロック図。
【図６】本実施形態における書き込み動作のフローチャート。
【図７】本実施形態におけるエラー訂正ビット数設定動作のフローチャート。
【発明を実施するための形態】
【０００８】
本実施形態を以下に図面を参照して説明する。図面において、同一部分には同一の参照符号を付す。
【０００９】
＜構成例＞
以下に、図１乃至図５を用いて、本実施形態におけるメモリコントローラ１００の構成について説明する。図１は、本実施形態におけるメモリコントローラ１００の構成例を示すブロック図である。
【００１０】
図１に示すように、メモリコントローラ１００は、ホスト２００およびＮＡＮＤ型フラッシュメモリ（以下、単にフラッシュメモリと称す）３００に接続可能である。このメモリコントローラ１００は、ホスト２００に接続されたとき、電源が供給されて動作し、ホスト２００からのアクセスに応じた処理を行う。例えば、メモリコントローラ１００は、フラッシュメモリ３００に対するデータの書き込み、データの読み出し、およびデータの消去等のアクセスにおいて、フラッシュメモリ３００を管理し、制御する。
【００１１】
ホスト２００は、接続されるフラッシュメモリ３００にアクセスするためのハードウェアおよびソフトウェア（システム）を備えている。このホスト２００は、メモリコントローラ１００を介してフラッシュメモリ３００に対して、データの書き込み、データの読み出し、およびデータの消去等のアクセスを行う。
【００１２】
メモリコントローラ１００は、ホストインターフェイス１１０、ＭＰＵ（Micro Processing Unit）１２０、データバッファ１３０、およびフラッシュメモリインターフェイス１４０を有している。
【００１３】
ホストインターフェイス１１０は、メモリコントローラ１００とホスト２００との間のコマンドやデータ等のアクセスを行うために設けられ、これらの間のインターフェイス処理を行う。
【００１４】
データバッファ１３０は、ホスト２００から送られてくるデータをフラッシュメモリ３００へ書き込む際に、ＭＰＵからのコマンドに従い、一定量（例えば、１ページ分）のデータを一時的に記憶する。また、データバッファ１３０は、フラッシュメモリ３００から読み出されるデータをホスト２００へ送り出す際に、ＭＰＵからのコマンドに従い、一定量のデータを一時的に記憶したりする。
【００１５】
ＭＰＵ１２０は、メモリコントローラ１００全体の動作を制御する。このＭＰＵ１２０は、例えばメモリコントローラ１００に電源が供給された場合、ＭＰＵ１２０に格納されているファームウェア（制御プログラム）に従って処理を開始する。すなわち、ＭＰＵ１２０は、処理に必要な各種テーブル（管理データ）を作成したり、ホスト２００からの書き込みコマンド、読み出しコマンド、および消去コマンド等を受信してフラッシュメモリ３００上の該当領域をアクセスしたりする。また、ＭＰＵ１２０は、フラッシュメモリ３００をアクセスするにあたってホスト２００からの論理アドレスと物理アドレスとを変換したり、データバッファ１３０を介してデータ転送処理を制御したりする。なお、以下において、ホスト２００から与えられるメモリコントローラ１００のアドレスを論理アドレスと称し、フラッシュメモリ３００内における実際のアドレスを物理アドレスと称す。
【００１６】
フラッシュメモリインターフェイス１４０は、メモリコントローラ１００とフラッシュメモリ３００との間でコマンドやデータ等の送受信を行うために設けられ、これらの間のインターフェイス処理を行う。また、フラッシュメモリインターフェイス１４０は、ＥＣＣを行うＥＣＣ回路１５０を有している。ＥＣＣ回路１５０の詳細については後述する。
【００１７】
図２は、図１におけるフラッシュメモリ３００の構成例を示すブロック図である。
【００１８】
図２に示すように、フラッシュメモリ３００は、メモリセルアレイ３１０、ページバッファ３２０を有している。
【００１９】
メモリセルアレイ３１０は、複数のメモリブロックＢＬＫ０〜ＢＬＫｎ（ｎは自然数）を含んでいる。また、各メモリブロックＢＬＫは、複数のメモリセルトランジスタを備えている。本例のメモリセルアレイ３１０は、１つのメモリセルトランジスタに多ビットのデータを記録することが可能な多値ＮＡＮＤ型フラッシュメモリである場合を一例として説明する。なお、以下の説明において、メモリブロックＢＬＫ０〜ＢＬＫｎを単にメモリブロックＢＬＫと称することがある。
【００２０】
ここで、メモリセルトランジスタに多ビットのデータを書き込むモードを多値モード、メモリセルトランジスタに１ビットのデータを書き込むモードを２値モードと称する。この際、２値モードでデータが書き込まれたメモリセルトランジスタを多値モードで再度書きこむことが可能である。
【００２１】
データの消去は、メモリブロックＢＬＫ単位で行われる。すなわち、同一メモリブロックＢＬＫ内のデータは一括して消去される。各メモリブロックＢＬＫは、複数のメモリセルトランジスタを備えている。また、メモリブロックＢＬＫ内には、複数のワード線ＷＬ０、ＷＬ１、…（以下、ワード線ＷＬと称する）と、ワード線ＷＬに直交するビット線ＢＬ０、ＢＬ１、…（以下、ビット線ＢＬと称する）とが設けられている。そして、同一行にあるメモリセルトランジスタは、同一のワード線に共通接続されている。また、同一列にあるメモリセルトランジスタは、複数のメモリセルトランジスタ単位でビット線ＢＬに共通接続されている。
【００２２】
データの書き込みおよび読み出しは、複数のメモリセルトランジスタの集合毎に行われ、このメモリセルトランジスタの集合を１ページと呼ぶ。なお、読み出し時および書き込み時において、ロウアドレスによっていずれかのワード線ＷＬが選択され、カラムアドレスによっていずれかのビット線ＢＬが選択される。
【００２３】
ページバッファ３２０は、メモリセルアレイ３１０へのデータ入出力を行い、データを一時的に保持する。ページバッファ３２０が保持可能なデータサイズは、各メモリブロックＢＬＫのページサイズと同じである。データ書き込みなどの際、ページバッファ３２０は、メモリセルアレイ３１０に対するデータ入出力処理を、自身の記憶容量に相当する１ページ分の単位で実行する。
【００２４】
ここで、本実施形態におけるフラッシュメモリ３００へのデータの書き込みにおいて、ブロック単位のデータ書き込みを行う場合、全てが空いているブロックＢＬＫを確保してそのブロックＢＬＫの先端ページから書き込みを行う。一方、ページ単位のデータ書き込みを行う場合、全てが空いているブロックＢＬＫを確保してそのブロックＢＬＫの先端ページから書き込みを行う、または、一部の領域が空いているブロックＢＬＫを確保してそのブロックＢＬＫの空いている領域の先端ページから書き込みを行う。
【００２５】
また、メモリコントローラ１００は、フラッシュメモリ３００のブロックＢＬＫそれぞれの消去回数を記憶して管理し、ホスト２００からのデータをブロックＢＬＫに書き込む時において、その書き込みブロックＢＬＫの消去回数データをフラッシュメモリ３００に記憶する。さらに、メモリコントローラ１００は、一部の領域が空いているブロックＢＬＫそれぞれの読み出し回数を記憶して管理し、ホスト２００からのデータの書き込み時において、その書き込みブロックＢＬＫの読み出し回数データをフラッシュメモリ３００に記憶する。この際、フラッシュメモリ３００は、ブロックＢＬＫの空いている領域の先端ページのアドレス情報も記憶する。
【００２６】
図３は、フラッシュメモリ３００の２値（ＳＬＣ：Single Level Cell）モードおよび多値（ＭＬＣ：Multi Level Cell）モードについて説明するための図である。なお、本例では、多値モードのうち、４値モードを一例に挙げて説明する。また、図３において、横軸が閾値電圧Ｖthを示し、縦軸がメモリセルの存在確率を示している。
【００２７】
まず、４値モードについて説明する。図３に示すように、メモリセルトランジスタは、閾値電圧Ｖthの低い順に“１１”、“０１”、“１０”、“００”の４つのデータを保持できる。“１１”データを保持するメモリセルトランジスタの閾値電圧Ｖthは、Ｖth＜０Ｖである。“０１”データを保持するメモリセルトランジスタの閾値電圧Ｖthは、０Ｖ＜Ｖth＜Ｖth１である。“１０”データを保持するメモリセルトランジスタの閾値電圧Ｖthは、Ｖth１＜Ｖth＜Ｖth２である。“００”データを保持するメモリセルトランジスタの閾値電圧Ｖthは、Ｖth２＜Ｖth＜Ｖth３である。
【００２８】
次に、２値モードについて説明する。図示するようにメモリセルトランジスタは、閾値電圧Ｖthの低い順に“１”、“０”の２つのデータを保持できる。“１”データを保持するメモリセルトランジスタの閾値電圧Ｖthは、Ｖth＜０Ｖである。“０”データを保持するメモリセルトランジスタの閾値電圧Ｖthは、Ｖth１＜Ｖth＜Ｖth２である。すなわち、“１”データは４値モードにおける“１１”データに等しく、“０”データは４値モードにおける“１０”データに等しい閾値電圧を有する。
【００２９】
すなわち、言い換えると、２値モードとは、４値モードにおける２ビットデータのうち、下位ページのみを用いた動作モードと言うことができる。より具体的には、２ビットデータの下位ビットには下位ページアドレスが割り当てられ、上位ビットには上位ページアドレスが割り当てられる。メモリセルトランジスタに対して２値モードでデータを書き込む場合、メモリコントローラ１００は、これらのページアドレスのうち下位ページアドレスのみを使用してフラッシュメモリ３００にデータを書き込む。メモリセルトランジスタに対して多値モードでデータを書き込む場合、メモリコントローラ１００は、上位ページアドレスと下位ページアドレスの両方を使用してフラッシュメモリ３００にデータを書き込む。
【００３０】
データの書き込みは、まず下位ページから行われる。消去状態を“１１”（“−−”、−は不定の意味）とすると、まず下位ページが書き込まれることにより、メモリセルトランジスタは“１１”（“−１”）、または“１０”（“−０”）を保持する。２値モードの場合には、以上で書き込みは終了である。４値モードで書き込む場合には、次に上位ページが書き込まれる。その結果、“１１”（“−１”）を保持するメモリセルトランジスタは、“１１”または“０１”を保持し、“１０”（“−０”）を保持するメモリセルトランジスタは“１０”または“００”を保持する。その他の８値モード、１６値モード等についても同様である。以下、フラッシュメモリ３００のメモリ領域のうち、メモリコントローラ１００が２値モードでデータを書き込む領域をＳＬＣ領域と称し、メモリコントローラ１００が多値モードでデータを書き込む領域をＭＬＣ領域と称する。
【００３１】
メモリセルトランジスタに対して２値モードでデータを書き込むか、または４値モードでデータを書き込むかについては、メモリコントローラ１００が制御する。例えば、ホスト２００から与えられるメモリコントローラ１００の論理アドレスに応じて、メモリコントローラ１００はその論理アドレスに対応するフラッシュメモリ３００の物理アドレスに２値モードで書き込むか４値モードで書き込むかを判断する。
【００３２】
図４は、図１におけるＥＣＣ回路１５０の構成例を示すブロック図である。
【００３３】
図４に示すように、ＥＣＣ回路１５０は、書き込み回路１６０および読み出し回路１７０を有している。書き込み回路１６０は、ホスト２００からフラッシュメモリ３００にデータの書き込みを行う際に動作し、エラー訂正ビット数設定部１６１およびエラー訂正コード生成付加部１６２を有している。読み出し回路１７０は、フラッシュメモリ３００からホスト２００にデータの読み出しを行う際に動作し、エラー訂正部１７１を有している。
【００３４】
エラー訂正ビット数設定部１６１は、ホスト２００からフラッシュメモリ３００にデータの書き込みを行う際、そのデータに対するエラー訂正ビット数を必要に応じて変更して設定する。より具体的には、エラー訂正ビット数設定部１６１は、ＭＰＵ１２０からのコマンドに従い、書き込まれるフラッシュメモリ３００の信頼性や書き込まれるデータの重要性に応じて、エラー訂正ビット数を設定する。ここで、エラー訂正ビット数とは、データに付加されるエラー訂正コードを用いて訂正可能なデータ中のエラービット数である。すなわち、本実施形態において、エラー訂正ビット数は、可変であり、種々の条件によって設定される。例えば、エラー訂正ビット数は、書き込まれるフラッシュメモリ３００の領域がＳＬＣ領域かＭＬＣ領域か、書き込まれるフラッシュメモリ３００のブロックＢＬＫの消去回数が閾値以上か否か、または書き込まれるデータが重要なデータであるか否か等、によって設定される。
【００３５】
エラー訂正コード生成付加部１６２は、ホスト２００からフラッシュメモリ３００にデータの書き込みを行う際、エラー訂正ビット数設定部１６１で設定されたエラー訂正ビット数に応じたエラー訂正コード（エラー訂正用データ）を作成し、フラッシュメモリ３００に書き込まれるデータに付加する。このエラー訂正コードのデータ量は、エラー訂正ビット数に応じて変更する。より具体的には、エラー訂正コードのデータ量は、エラー訂正ビット数が減少すれば減少し、エラー訂正ビット数が増加すれば増加する。
【００３６】
エラー訂正部１７１は、フラッシュメモリ３００からホスト２００にデータを読み出す際、エラー訂正コード生成付加部１６２で生成付加されたエラー訂正コードに基づいて、データのエラー訂正を行う。
【００３７】
図５（ａ）は、本実施形態におけるフラッシュメモリ３００に書き込まれるデータ構成の比較例を示すブロック図であり、図５（ｂ）は、本実施形態におけるフラッシュメモリ３００に書き込まれるデータ構成を示すブロック図である。
【００３８】
図５（ａ）および（ｂ）に示すように、フラッシュメモリ３００に書き込まれるデータは、データ４００，５００、データ以外に必要な情報（例えば、管理データ）４１０，５１０、およびエラー訂正用データ４２０，５２０で構成されている。
【００３９】
比較例において、データ４００はｘバイト（例えば、５１２バイト）、データ以外に必要な情報４１０はｙバイト（例えば、８バイト）、エラー訂正用データ４２０はｚバイト（例えば、２２バイト）である。これに対し、本実施形態において、データ５００はｘバイト、データ以外に必要な情報５１０はｙ＋ｎバイト、エラー訂正用データ５２０はｚ−ｎバイトである。すなわち、比較例に対して、エラー訂正用データ５２０がｎバイト削減され、データ以外に必要な情報５１０がｎバイト増加することができる。これは、上述したように、エラー訂正ビット数を減少させることにより、エラー訂正用データ５２０が減少するためである。
【００４０】
＜書き込み動作＞
以下に、図６および図７を用いて、本実施形態における書き込み動作について説明する。図６は、本実施形態における書き込み動作のフローチャートである。
【００４１】
図６に示すように、まず、ステップＳ１１において、メモリコントローラ１００は、ホスト２００から入力されたデータをホストインターフェイス１１０を介して受信し、データバッファ１３０に記憶する。
【００４２】
次に、ステップＳ１２において、メモリコントローラ１００は、ホスト２００から入力されたパラメータ設定コマンドをホストインターフェイス１１０を介して受信し、ＭＰＵ１２０に記憶する。このパラメータ設定コマンドは、データバッファ１３０に記憶されたデータが重要であるか否かを通知するものである。パラメータ設定コマンドは、例えば、ホスト２００から入力されたデータの有効ビット数、データの数、およびデータの圧縮方法等のパラメータが設定されたコマンドである。ＭＰＵ１２０は、パラメータ設定コマンドを受信することにより、データが重要であるか否かを判断する。
【００４３】
次に、ステップＳ１３において、メモリコントローラ１００は、ホスト２００から入力されたメモリコントローラ１００の書き込み論理アドレスをホストインターフェイス１１０を介して受信し、ＭＰＵ１２０に記憶する。ＭＰＵ１２０は、この論理アドレスに基づいて、データバッファ１３０に記憶されたデータをＳＬＣとして書き込むか、ＭＬＣとして書き込むかを判断する。その後、ＭＰＵ１２０は、論理アドレスを書き込まれるフラッシュメモリ３００の物理アドレスに変換する。
【００４４】
次に、ステップＳ１４において、メモリコントローラ１００は、ホスト２００から入力された書き込みコマンドをホストインターフェイス１１０を介して受信する。その後、ＭＰＵ１２０は、データバッファ１３０に記憶されたデータをフラッシュメモリインターフェイス１４０へと転送していく。
【００４５】
次に、ステップＳ１５において、エラー訂正ビット数設定部１６１は、データバッファ１３０から転送されたデータのエラー訂正ビット数を設定する。ステップＳ１５の詳細については、図７を用いて後述する。
【００４６】
次に、ステップＳ１６において、エラー訂正コード生成付加部１６２は、エラー訂正ビット数設定部１６１により設定されたエラー訂正ビット数に基づいて、エラー訂正コードを生成する。このエラー訂正コードのデータ量は、エラー訂正ビット数が大きければ大きくなり、エラー訂正ビット数が小さければ小さくなる。その後、エラー訂正コード生成付加部１６２は、エラー訂正コードをデータバッファ１３０から転送されたデータに付加する。
【００４７】
次に、ステップＳ１７において、エラー訂正コードが付加されたデータが指定されたフラッシュメモリ３００の物理アドレスに書き込まれる。このようにして、ホスト２００からフラッシュメモリ３００への書き込み動作が行われる。
【００４８】
図７は、図６におけるステップＳ１５における動作の詳細を示すフローチャートである。
【００４９】
図７に示すように、エラー訂正ビット数を設定する際、まず、ステップＳ２１において、最大エラー訂正ビット数を設定する。この最大エラー訂正ビット数は、書き込まれるデータに対してエラー訂正され得る最大のビット数である。ここでは、一例として、最大エラー訂正ビット数を１６ビットとする。
【００５０】
次に、ステップＳ２２において、アクセスするメモリ領域がＭＬＣ領域であるかＳＬＣ領域であるかを判断する。ＭＬＣ領域であるかＳＬＣ領域であるかの判断は、図６におけるステップＳ１３において受信された論理アドレスに基づいて行われる。
【００５１】
ステップＳ２２においてアクセスするメモリ領域がＳＬＣ領域であると判断された場合（ステップＳ２２のＮｏ）、次に、ステップＳ２３において設定されたエラー訂正ビット数を減少する。これは、フラッシュメモリ３００においてＳＬＣ領域は、ＭＬＣ領域よりも信頼性が高い領域であり、エラービット数が少なく済むためである。
【００５２】
なお、図２および図３において説明したように、フラッシュメモリ３００においてメモリセルアレイ３１０内でＳＬＣ領域とＭＬＣ領域とは分かれておらず、各メモリセルをＳＬＣまたはＭＬＣとして機能させることができる。
【００５３】
次に、ステップＳ２４において、書き込まれるデータが重要なデータであるか否かを判断する。重要なデータであるか否かの判断は、図６におけるステップＳ１２において受信されたパラメータ設定コマンドに基づいて行われる。なお、重要なデータとは、メモリコントローラ１００がホスト２００からパラメータ設定コマンドによって重要であると通知されたデータに限らず、メモリコントローラ１００が内部で管理するデータ等も含まれる。
【００５４】
ステップＳ２４において書き込まれるデータが重要なデータではないと判断された場合（ステップＳ２４のＮｏ）、次に、ステップＳ２５において設定されたエラー訂正ビット数を減少する。
【００５５】
次に、ステップＳ２６において、書き込まれるフラッシュメモリ３００の消去回数が閾値を越えているか否かを判断する。フラッシュメモリ３００において消去動作はブロックＢＬＫ毎に行われるため、消去回数はブロックＢＬＫ毎に異なっている。このブロックＢＬＫ毎の消去回数は、フラッシュメモリ３００内に記憶されている。すなわち、フラッシュメモリ３００の消去回数が閾値を越えているか否かの判断は、メモリコントローラ１００が、ホスト２００から受信した論理アドレスを物理アドレスに変換して、その物理アドレスのブロックＢＬＫの消去回数データをフラッシュメモリ３００から受信し、閾値と比較することにより行われる。なお、予めＭＰＵ１２０内に、消去回数の閾値として適当な値が記憶されている。
【００５６】
ステップＳ２７において消去回数が閾値を越えていないと判断された場合（ステップＳ２６のＮｏ）、次に、ステップＳ２７において設定されたエラー訂正ビット数を減少する。これは、消去回数の少ないブロックＢＬＫのほうが高い信頼性を有するためである。言い換えると、フラッシュメモリ３００において消去回数が多くなると信頼性が低くなり、エラービット数が増加する。すなわち、消去回数に応じてブロックＢＬＫ毎にエラー訂正ビット数を可変にする。
【００５７】
以上の工程により、フラッシュメモリ３００に書き込まれるエラー訂正ビット数が設定される。例えば、ステップＳ２３、ステップＳ２５、およびステップＳ２７のいずれか１つの工程が行われた場合、エラー訂正ビット数はステップＳ２１で設定された１６ビットから１２ビットに減少される。また、例えば、いずれか２つの工程が行われた場合、エラー訂正ビット数は１６ビットから８ビットに減少される。さらに、例えば、全ての工程が行われた場合、エラー訂正ビット数は１６ビットから４ビットに減少される。このように、種々の条件に応じて、エラー訂正ビット数設定部１６１によりエラー訂正ビット数を可変にすることができる。なお、上記エラー訂正ビット数は、一例であり、フラッシュメモリ３００の規格等によって種々の値が設定され得る。また、ステップＳ２２、ステップＳ２４、およびステップＳ２６の工程の順番はそれぞれ、入れ替えることも可能である。
【００５８】
また、エラー訂正ビット数を可変にする条件は、ステップＳ２２、ステップＳ２４、およびステップＳ２６の工程による判断に限らない。
【００５９】
例えば、書き込まれるフラッシュメモリ３００の読み出し回数が閾値を越えているか否かによってもエラー訂正ビット数を可変にしてよい。ページ単位のデータをフラッシュメモリ３００に書き込む際、一部の領域が空いているブロックＢＬＫにページ単位のデータが書き込まれる。この一部の領域が空いているブロックＢＬＫの信頼性は、そのブロックＢＬＫに記憶されているデータの読み出し回数に応じて変更する。このブロックＢＬＫの読み出し回数は、フラッシュメモリ３００内に記憶されている。すなわち、フラッシュメモリ３００の読み出し回数が閾値を越えているか否かの判断は、メモリコントローラ１００がホスト２００から受信した論理アドレスを物理アドレスに変換して、その物理アドレスのブロックＢＬＫの読み出し回数データをフラッシュメモリ３００から受信し、閾値と比較することにより行われる。
【００６０】
その後、読み出し回数が閾値を越えていると判断された場合、ブロックＢＬＫに既に書き込まれているデータに付加されたエラー訂正コードのエラー訂正ビット数に対して、エラー訂正ビット数の多いエラー訂正コードが付加されたデータをブロックＢＬＫの空いている領域に書き込む。これは、フラッシュメモリ３００において読み出し回数が多くなると信頼性が低くなり、エラービット数が増加するためである。すなわち、ブロックＢＬＫ毎にエラー訂正ビット数を可変にする。
【００６１】
なお、ページ単位のデータを書き込む際、ブロックＢＬＫ内のページ毎のエラー訂正ビット数をフラッシュメモリ３００内に記憶することにより、ブロックＢＬＫ毎ではなくブロックＢＬＫ内のページ毎にエラー訂正ビット数を可変にすることも可能である。
【００６２】
＜読み出し動作＞
以下に、本実施形態における読み出し動作について説明する。
【００６３】
読み出し動作では、まず、メモリコントローラ１００は、ホスト２００から入力されたメモリコントローラ１００の読み出し論理アドレスをホストインターフェイス１１０を介して受信し、ＭＰＵ１２０に記憶する。その後、ＭＰＵ１２０は、論理アドレスを読み出されるフラッシュメモリ３００の物理アドレスに変換する。
【００６４】
次に、メモリコントローラ１００は、ホスト２００から入力された読み出しコマンドをホストインターフェイス１１０を介して受信する。その後、ＭＰＵ１２０は、フラッシュメモリ３００の指定された物理アドレスに記憶されたデータをフラッシュメモリインターフェイス１４０へと読み出していく。
【００６５】
次に、エラー訂正部１７１は、データバッファ１３０から読み出されたデータのエラー訂正を行う。このエラー訂正は、データバッファ１３０から読み出されたデータに付加されたエラー訂正コードに基づいて行われ、エラー訂正ビット数設定部１６１により設定されたビット数分行われる。すなわち、このエラー訂正において、エラー訂正ビット数およびエラー訂正コードのデータ量が少ないほど、エラー訂正処理時間の短縮および消費電力の削減を図ることできる。なお、データのエラー訂正の詳細については公知であるため省略する。エラー訂正が終了するとデータからエラー訂正コードが除去される。
【００６６】
その後、エラー訂正されたデータは、データバッファ１３０に一時的に記憶され、ホストインターフェイス１１０を介してホスト２００に読み出される。
【００６７】
＜効果＞
上記実施形態によれば、ホスト２００およびフラッシュメモリ３００に接続可能なメモリコントローラ１００は、ホスト２００からフラッシュメモリ３００にデータを書き込む際、種々の条件に応じてエラー訂正ビット数を変更させる。そして、その設定されたエラー訂正ビット数に基づいてエラー訂正コードを作成し、データに付加させてフラッシュメモリ３００に書き込む。すなわち、信頼性が高い領域に書き込む場合やデータの重要度が低い場合に、エラー訂正ビット数を減少させることができる。これにより、余分なエラー訂正コードのデータ量を削減することができ、その分管理用データの容量を大きくすることができる。また、フラッシュメモリ３００からホスト２００へのデータ読み出しの際、エラー訂正の処理時間を短縮でき、これに伴い消費電力の削減を図ることができる。
【００６８】
その他、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で、種々に変形することが可能である。さらに、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【符号の説明】
【００６９】
１００…メモリコントローラ、１１０…ホストインターフェイス、１２０…ＭＰＵ（制御部）、１６１…エラー訂正ビット数設定部、１６２…エラー訂正コード生成付加部、２００…ホスト、３００…フラッシュメモリ（メモリ）。
【図１】
2012164072.tif 000003
【図２】
2012164072.tif 000004
【図３】
2012164072.tif 000005
【図４】
2012164072.tif 000006
【図５】
2012164072.tif 000007
【図６】
2012164072.tif 000008
【図７】
2012164072.tif 000009