(57)【要約】【課題】書き込みと読み出しの効率を高める。【解決手段】半導体メモリへのアクセスを制御する制御部と、書き込みデータに対して、第１の誤り訂正符号と、第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、書き込みデータを前記半導体メモリに書き込む書き込み部と、読み出し要求の読み出し先ブロックから、読み出しデータを読み出し、読み出しデータにエラーが生じた場合に第１の誤り訂正符号もしくは第２の誤り訂正符号により訂正されたデータを出力する読み出し部とを有し、制御部は、第１の誤り訂正符号による誤り訂正が失敗した場合、読み出しデータを第２の誤り訂正符号により誤り訂正されたデータを、書き換え回数が第１の基準値より少ない他のブロックに移動する、メモリコントローラ装置。【選択図】図４
2020042326.tif 000002
【特許請求の範囲】
【請求項１】
半導体メモリへのアクセスを制御する制御部と、
書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータを前記半導体メモリに書き込む書き込み部と、
読み出し要求の読み出し先ブロックから、読み出しデータを読み出し、前記読み出しデータにエラーが生じた場合に前記第１の誤り訂正符号もしくは前記第２の誤り訂正符号により訂正されたデータを出力する読み出し部とを有し、
前記制御部は、前記第１の誤り訂正符号による誤り訂正が失敗した場合、前記読み出しデータを第２の誤り訂正符号により誤り訂正されたデータを、書き換え回数が第１の基準値より少ない他のブロックに移動する、
メモリコントローラ装置。
【請求項２】
前記制御部による前記誤り訂正されたデータを前記他のブロックに移動する処理は、前記制御部が、前記書き込み部に、前記読み出し先ブロックの前記読み出しデータを前記他のブロックに書き込む要求を発行することを含む、請求項１に記載のメモリコントローラ装置。
【請求項３】
前記読み出し部は、読み出し要求に応答して、前記半導体メモリ内の前記読み出し要求の読み出し先ブロックから、読み出しデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを読み出し、前記第１の誤り訂正符号による復号が成功した場合、前記第１の誤り訂正符号により復号されたデータを出力し、前記第１の誤り訂正符号による復号が失敗した場合、前記第２の誤り訂正符号により復号されたデータを出力する、請求項１に記載のメモリコントロール装置。
【請求項４】
半導体メモリの書き込みと読み出しを制御する制御部と、
書き込み要求に応答して、
（a1）前記書き込み要求の書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを前記半導体メモリに書き込む第１の書き込み処理と、
（a2）前記第２の誤り訂正符号を生成し、前記書き込みデータと前記第２の誤り訂正符号とを前記半導体メモリに書き込む第２の書き込み処理とを実行する書き込み部と、
読み出し要求に応答して、
（b1）前記半導体メモリ内の前記読み出し要求の読み出し先ブロックから、読み出しデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを読み出し、前記第１の誤り訂正符号による復号が成功した場合、前記第１の誤り訂正符号により復号されたデータを出力し、前記第１の誤り訂正符号による復号が失敗した場合、前記第２の誤り訂正符号により復号されたデータを出力する第１の読み出し処理と、
（b2）前記読み出しデータと前記第２の誤り訂正符号とを読み出し、前記第２の誤り訂正符号により復号されたデータを出力する第２の読み出し処理とを実行する読み出し部とを有し、
前記制御部は、
（c1）前記書き込みデータの読み出し回数が第１基準値以上の場合、前記書き込み部に前記第１の書き込み処理を要求する第１の書き込み要求を発行し、
（c2）前記書き込みデータの前記読み出し回数が前記第１基準値未満の場合、前記書き込み部に前記第２の書き込み処理を要求する第２の書き込み要求を発行し、
（d1）前記読み出しデータの前記読み出し回数が前記第１基準値以上の場合、前記読み出し部に前記第１の読み出し処理を要求する第１の読み出し要求を発行し、
（d2）前記読み出しデータの前記読み出し回数が前記第１基準値未満の場合、前記読み出し部に前記第２の読み出し処理を要求する第２の読み出し要求を発行する、請求項１記載のメモリコントローラ装置。
【請求項５】
前記制御部は、
(c3)書き換え回数が第２基準値以上のデータを書き込む場合、前記書き込み部に前記半導体メモリ内の第１のブロックに書き込むことを要求し、
(c4)前記書き換え回数が前記第２基準値未満のデータを書き込む場合、前記書き込み部に前記半導体メモリの第２のブロックに書き込むことを要求する、請求項４に記載のメモリコントローラ装置。
【請求項６】
前記制御部は、書き込み要求入力に含まれる前記読み出し回数と前記書き換え回数の識別子に基づいて、前記読み出し回数が前記第１基準値以上または未満かを判定し、前記書き換え回数が前記第２基準値以上または未満を判定する、請求項５に記載のメモリコントローラ装置。
【請求項７】
前記書き込み部は、更に、
(a3)前記第１の誤り訂正符号を生成し、前記書き込みデータと前記第１の誤り訂正符号とを前記半導体メモリに書き込む第３の書き込み処理とを実行し、
前記読み出し部は、更に、
(b3)前記読み出しデータと前記第１の誤り訂正符号とを読み出し、前記第１の誤り訂正符号により復号されたデータを出力する第３の読み出し処理とを実行し、
前記制御部は、
(c5)前記書き込み要求の書き込みデータが、前記半導体メモリ以外の記憶装置に記憶されている場合、前記書き込み部に前記第３の書き込み処理を要求する第３の書き込み要求を発行し、
(d3)前記読み出し要求の読み出しデータが、前記半導体メモリ以外の記憶装置に記憶されている場合、前記読み出し部に前記第３の読み出し処理を発行する、請求項４に記載のメモリコントローラ装置。
【請求項８】
前記制御部は、前記第１の誤り訂正符号による復号が失敗した場合、前記読み出しデータを、前記半導体メモリ内の前記読み出し先ブロックよりも消去回数が少ない他のブロックに移動する、請求項４または５に記載のメモリコントローラ装置。
【請求項９】
半導体メモリと、
前記半導体メモリへのアクセスを制御するメモリコントローラを有し、
前記メモリコントローラは、
半導体メモリへのアクセスを制御する制御部と、
書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータを前記半導体メモリに書き込む書き込み部と、
読み出し要求の読み出し先ブロックから、読み出しデータを読み出し、前記読み出しデータにエラーが生じた場合に前記第１の誤り訂正符号もしくは前記第２の誤り訂正符号により訂正されたデータを出力する読み出し部とを有し、
前記制御部は、前記第１の誤り訂正符号による誤り訂正が失敗した場合、前記読み出しデータを第２の誤り訂正符号により誤り訂正されたデータを、書き換え回数が第１の基準値より少ない他のブロックに移動する、メモリ装置。
【請求項１０】
半導体メモリへのアクセスを制御する制御部を有するメモリコントローラによるメモリコントロール方法において、
書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータを前記半導体メモリに書き込む工程と、
読み出し要求の読み出し先ブロックから、読み出しデータを読み出し、前記読み出しデータにエラーが生じた場合に前記第１の誤り訂正符号もしくは前記第２の誤り訂正符号により訂正されたデータを出力する工程と、
前記第１の誤り訂正符号による誤り訂正が失敗した場合、前記読み出しデータを第２の誤り訂正符号により誤り訂正されたデータを、書き換え回数が第１の基準値より少ない他のブロックに移動する工程、を有するメモリコントロール方法。
【請求項１１】
半導体メモリの書き込みと読み出しを制御する制御部と、
書き込み要求に応答して、
（a1）前記書き込み要求の書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを前記半導体メモリに書き込む第１の書き込み処理と、
（a2）前記第２の誤り訂正符号を生成し、前記書き込みデータと前記第２の誤り訂正符号とを前記半導体メモリに書き込む第２の書き込み処理とを実行する書き込み部と、
読み出し要求に応答して、
（b1）前記半導体メモリ内の前記読み出し要求の読み出し先ブロックから、読み出しデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを読み出し、前記第１の誤り訂正符号による復号が成功した場合、前記第１の誤り訂正符号により復号されたデータを出力し、前記第１の誤り訂正符号による復号が失敗した場合、前記第２の誤り訂正符号により復号されたデータを出力する第１の読み出し処理と、
（b2）前記読み出しデータと前記第２の誤り訂正符号とを読み出し、前記第２の誤り訂正符号により復号されたデータを出力する第２の読み出し処理とを実行する読み出し部とを有し、
前記制御部は、
（c1）前記書き込みデータの読み出し回数が第１基準値以上の場合、前記書き込み部に前記第１の書き込み処理を要求する第１の書き込み要求を発行し、
（c2）前記書き込みデータの前記読み出し回数が前記第１基準値未満の場合、前記書き込み部に前記第２の書き込み処理を要求する第２の書き込み要求を発行し、
（d1）前記読み出しデータの前記読み出し回数が前記第１基準値以上の場合、前記読み出し部に前記第１の読み出し処理を要求する第１の読み出し要求を発行し、
（d2）前記読み出しデータの前記読み出し回数が前記第１基準値未満の場合、前記読み出し部に前記第２の読み出し処理を要求する第２の読み出し要求を発行する、メモリコントローラ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，メモリコントローラ装置、メモリコントローラ装置を有するメモリ装置及びメモリコントロール方法に関する。
【背景技術】
【０００２】
半導体メモリの一つであるフラッシュメモリは、不揮発性、大容量、高速読み出しが可能なソリッドステートドライブ（SSD）のメモリとしてコンピュータから携帯端末まで広く使用されている。
【０００３】
フラッシュメモリにはＮＯＲ型とＮＡＮＤ型があるが、本願ではいずれのタイプでも適用できる。ＮＡＮＤ型フラッシュメモリは、ＮＯＲ型と比較すると、大容量で書き込みと消去が高速である。
【０００４】
フラッシュメモリは、複数のブロックを有し、各ブロックは複数のページに分割されている。フラッシュメモリにおいて、書き込みとは、消去状態のページにデータをプログラムすることであり、読み出しとは、書き込み（プログラム）されたページのデータを読み出すことであり、更に、書き換えとは、書き込みされたページのデータを全て消去することである。通常、書き込みはページ単位で行われ、消去は複数の無効ページを有するブロック単位で一斉に消去することで行われる。
【０００５】
フラッシュメモリにおいて、書き込み（プログラム）は、各メモリセルに電子を注入してメモリセルの状態を変更する動作であり、読み出しは、変更された状態に対応したメモリセルの動作の違いによりデータを読み出す動作である。また、書き換え動作（消去）は、注入された電子を引き抜くことでメモリセルを注入前の状態に戻す動作である。
【０００６】
また、ＮＡＮＤ型フラッシュメモリは、１つのメモリセルに１ビットの情報を記録するシングル・レベル・セルと、１つのメモリセルに２ビット以上の情報を記録するマルチ・レベル・セルとがある。マルチ・レベル・セルは、大容量化によりビット単価が低くなるが、劣化するとレベルを判別しにくくなり、エラー訂正率を高くすることが必要である。
【０００７】
以下、フラッシュメモリにおいて、書き込みはメモリセルのプログラムを、書き換えはメモリセルの消去を意味するものとする。以下の特許文献には、フラッシュメモリについて記載がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１１−２３２７７８号公報
【特許文献２】特開２０１０−１２８６９７号公報
【特許文献３】特開２０１０−７９４８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
フラッシュメモリは、書き込みではメモリセルに書き込みデータに対応する量の電子を注入し、読み出しでは電子注入量に応じたメモリセルの動作の違いに基づき電子注入量に対応するデータを検出する。そのため、データに誤り（エラー）が発生することがあり、所定回数、例えば３０００回、の書き換え回数まで、所定のエラー訂正率でエラー訂正することが仕様で要求される。さらに、フラッシュメモリは、書き換え（消去）によるメモリセルの劣化により、エラー率が増加する。
【００１０】
エラー訂正符号、誤り訂正符号（ECC：Error Correction Code）は、エラー訂正率は低いがエラー訂正を行う復号に要する演算時間が短い第１のエラー訂正符号と、エラー訂正率は高いが復号に要する演算時間が長い第２のエラー訂正符号とが存在する。例えば、第１のエラー訂正符号は、ＢＣＨ符号であり、第２のエラー訂正符号はＬＤＰＣ（Low Density Parity Check）符号である。
【００１１】
前述のとおり、フラッシュメモリは、エラー訂正することが仕様で要求されるとともに、書き換え（消去）回数が増加するとメモリセルの劣化によりエラーが増加する。そのため、例えば、書き込みでは書き込みデータに対する第１のエラー訂正符号と第２のエラー訂正符号を生成し、両符号を書き込みデータとともにメモリに書き込み、読み出しでは、第１のエラー訂正符号に基づく復号が成功すれば復号されたデータを読み出し、失敗すれば第２のエラー訂正符号に基づく復号を行うことが有効である。
【００１２】
しかし、書き換え（消去）回数の増加により劣化したメモリセルの読み出しにおいて、常に第１の復号の失敗と第２の復号を繰り返すことになり、メモリコントローラは無駄に第１のエラー訂正符号の生成と復号を行うことになる。
【００１３】
そこで，本実施の形態の第1の側面の目的は，第１のエラー訂正符号と第２のエラー訂正符号とを最適化して書き込みと読み出しの効率を高めたメモリコントローラ装置、それを有するメモリ装置及びメモリコントロール方法を提供することにある。
【課題を解決するための手段】
【００１４】
本実施の形態の第１の側面は，半導体メモリへのアクセスを制御する制御部と、
書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータを前記半導体メモリに書き込む書き込み部と、
読み出し要求の読み出し先ブロックから、読み出しデータを読み出し、前記読み出しデータにエラーが生じた場合に前記第１の誤り訂正符号もしくは前記第２の誤り訂正符号により訂正されたデータを出力する読み出し部とを有し、
前記制御部は、前記第１の誤り訂正符号による誤り訂正が失敗した場合、前記読み出しデータを第２の誤り訂正符号により誤り訂正されたデータを、書き換え回数が第１の基準値より少ない他のブロックに移動する、メモリコントローラ装置である。
【発明の効果】
【００１５】
第１の側面によれば，書き込みと読み出しの効率を高めることができる。
【図面の簡単な説明】
【００１６】
【図１】本実施の形態におけるメモリ装置の構成例を示す図である。
【図２】フラッシュメモリの概略構成を示す図である。
【図３】フラッシュメモリの制御ユニットによる書き込みと消去の制御の概略を示すフローチャートを示す図である。
【図４】第１の実施の形態におけるメモリコントローラによるフラッシュメモリへの書き込みと読出し処理を示す図である。
【図５】本実施の形態におけるメモリコントローラの構成例を示す図である。
【図６】メモリコントローラによる書き込み処理と読出し処理のフローチャート図である。
【図７】メモリコントローラによる読出し処理後のデータ移動処理のフローチャート図である。
【図８】第２の実施の形態におけるメモリコントローラの書き込み及び読み出し処理を示す図である。
【図９】第２の実施の形態の変形例を示す図である。
【図１０】第２の実施の形態の変形例におけるフラッシュメモリのメモリコントローラの書き込み及び読み出し処理の例を示す図である。
【図１１】第２の実施の形態におけるメモリコントローラの構成例を示す図である。
【図１２】フラッシュメモリに書き込まれるデータ例を示す図である。
【図１３】第２の実施の形態（変形例を含む）におけるメモリコントローラによる書き込み処理を示すフローチャート図である。
【図１４】第２の実施の形態（変形例を含む）におけるメモリコントローラによる読み出し処理を示すフローチャート図である。
【図１５】ECC種別の識別子がBCHのECCの場合のメモリコントローラとホストコンピュータのキャッシュ制御プログラムとによる読み出し処理を示すフローチャート図である。
【図１６】メモリコントローラがデータの特徴である書換回数（合計書換回数または書換頻度）が多いか少ないかに応じて書き込み先ブロックを書換回数が多いブロックか少ないブロックかを選択する処理を示す図である。
【図１７】第３の実施の形態におけるデータの特徴とメモリコントローラの書き込み先ブロックとECCの関係を示す図である。
【図１８】データの特徴とECC種と書き込み先ブロックの関係テーブルを示す図である。
【図１９】第３の実施の形態におけるデータの特徴に対応する書き込み処理を示す図である。
【図２０】第３の実施の形態におけるデータの特徴に対応する読出処理を示す図である。
【図２１】第３の実施の形態におけるメモリコントローラの書き込み処理を示すフローチャート図である。
【発明を実施するための形態】
【００１７】
図１は、本実施の形態におけるメモリ装置の構成例を示す図である。メモリ装置１０は、ホストHOSTと接続されるメモリコントローラ２０と、メモリコントローラ２０の制御によりデータが書き込みされ（プログラム）、データが読み出され、消去されるフラッシュメモリ３０とを有する。
【００１８】
メモリコントローラ２０は、制御ユニットCNT_Uと、書き込みユニットWR_Uと、読み出しユニットRD_Uと、消去ユニットER_Uとを有する。書き込みユニットWR_Uは、制御ユニットが発行する書き込み要求WR_REQのデータに対するエラー訂正コード（以下ECCと称する。）を生成するECC生成回路ECC_GENと、書き込み要求のデータとECCとをフラッシュメモリ３０内の書き込み先アドレスに書き込みする書き込み回路２４とを有する。
【００１９】
更に、読み出しユニットRD_Uは、制御ユニットが発行する読出し要求RD_REQのアドレスのデータをフラッシュメモリ３０から読み出す読出し回路２５と、読出しデータをECCで誤り訂正するECC復号回路ECC_DECを有する。そして、消去ユニットER_Uは、制御ユニットが発行する消去要求ER_REQに基づいてフラッシュメモリ内の所定のブロックを消去する。
【００２０】
制御ユニットCNT_Uは、ホストコンピュータHOSTが発行する書き込み要求に応答して、書き込みユニットに書き込み要求WR_REQを発行し、ホストコンピュータHOSTが発行する読み出し要求に応答して、読み出しユニットに読み出し要求RD_REQを発行する。
【００２１】
図２は、フラッシュメモリの概略構成を示す図である。フラッシュメモリ３０は、複数のブロックBLK_0〜BLK_m-1、例えばM個のブロックを有する。各ブロックBLKは、複数のページPAGE_0〜PAGE_n-1、例えばN個のページを有する。各ページ内のフラッシュメモリは、例えば、NAND型フラッシュメモリであり、その回路構成は、例えば、特開２０１０−１２８６９７号公報に開示された回路と同じである。各メモリセルは、シングル・レベル・セルまたはマルチ・レベル・セルのいずれでもよい。
【００２２】
各ページ内には、例えば、Iバイトのデータが記憶され、IバイトのデータをＪバイト単位で分割したＪバイトのデータと、当該Ｊバイトのデータに対するＫバイトのECCとが、ペアでそれぞれ記憶される。
【００２３】
図３は、フラッシュメモリの制御ユニットによる書き込みと消去の制御の概略を示すフローチャートを示す図である。制御ユニットCNT_Uは、ホストHOSTから書き込み要求が発行されると（S1のYES）、消去済みページに書き込みデータを書き込みする（S2）。書き込み要求が既に書き込み済みのデータに対する場合、制御ユニットCNT_Uは、データが書き込みされていたページを無効ページとし、消去済みページに書き込みデータを書き込みする。このような書き込み要求に対する書き込み処理は、１つのブロック内の無効ページ数が閾値に達するまで（S3のNO）、繰り返される。
【００２４】
制御ユニットは、１つのブロック内の無効ページ数が閾値に達すると、有効ページを他のブロックに移動する（S4）。この処理で、無効ページが含まれるブロック内の有効ページが、他のブロックに移動される。これにより、ブロックは無効ページを含み有効ページは含まれない。そして、制御ユニットは、有効ページが移動した元のブロックの全ページを消去する（S5）。
【００２５】
上記の通り、フラッシュメモリでは、書き込み要求に対するデータは常に消去済みページ内に書き込みされ、書き込み要求が書き込み済みデータを書き換える場合、書き込み済みページではなく消去済みページ内に書き込まれ、元の書き込み済みページは無効ページとされ、読出し要求に対しては書き込み済みの有効ページからデータを読出し、有効ページが移動した元のブロック内の無効ページは、１つのブロック単位で同時に消去される。したがって、１つのページについて述べると、消去回数が書き換え回数に該当する。
【００２６】
フラッシュメモリの制御ユニットは、上記のとおり、複数のブロックの消去を実行するので、各ブロックの書き換え回数（消去回数）を記録し更新する。また、制御ユニットは、各ブロック内の複数のページが、消去済み未書き込み状態か、有効な書き込み状態か、無効ページかについても記録し更新する。
【００２７】
［フラッシュメモリのエラー特性とエラー訂正符号］
フラッシュメモリは、書き込みデータに基づいてメモリセルに電子を所定量注入し書き込みデータを記憶する。例えば、マルチ・レベル・セルでは、書き込みデータの値に基づいてメモリセルに注入する電子量が変更される。そのため、フラッシュメモリから読み出したデータにはエラーが発生する場合がある。
【００２８】
一方、フラッシュメモリは、書き込みでは消去済みページ内のメモリセルに電子を注入する書き込み処理を行うため、書き換えを行う毎に無効のページが発生する。そして、フラッシュメモリは、複数の無効のページを有するブロックを同時に消去する。消去処理では、メモリセルに注入した電子を引き抜く処理が行われる。したがって、書き換えが行われたページは、無効ページとなり、その後消去されることになり、書き換え回数は消去回数と同じになる。
【００２９】
そして、書き換え回数（消去回数）が増大すると、メモリセルの劣化が進み、記憶されたデータにエラーが発生する確率が増大する。
【００３０】
そのため、フラッシュメモリは、書き込み要求（書き換え要求を含む）に対して、データに対するエラー訂正符号を生成するエラー訂正符号の符号化を行い、データとエラー訂正符号（ECC）をメモリセルに書き込みする。更に、書き換え回数（消去回数）の増大に応じて、エラー発生率が増大するので、書き込み要求に対して、第１のECCの符号化と、エラー訂正率が第１のECCより高く復号時間が第１のECCより長い第２のECCの符号化を行い、データと第１のECC及び第２のECCをメモリセルに書き込みする。そして、フラッシュメモリは、読出し要求に対して、フラッシュメモリからデータと第１のECC及び第２のECCを読出し、第１のECCで復号してエラー訂正に成功すれば第１のECCでエラー訂正したデータを出力し、失敗すれば、第２のECCで復号してエラー訂正したデータを出力する。
【００３１】
このように、エラー訂正率が異なる２つのECCを併用することで、書き換え回数が増大しメモリセルの劣化が進む過程で、エラー発生数が少ない（エラー発生率が低い）間は第１のECCで復号できるので復号時間を短くでき、エラー発生数が多くなると第２のECCで復号できるので読出しデータのエラー訂正を行うことができる。
【００３２】
しかし、書き換え回数が増大してメモリセルの劣化が進み、読出し時に毎回、第１のECCで復号を失敗し、第２のECCで復号を繰り返すことになる。そのため、第１のECCと第２のECCの両方で符号化し復号することは、無駄な処理を生じ、アクセス処理の効率低下を招く。
【００３３】
［第１の実施の形態］
第１の実施の形態におけるメモリコントローラについて説明する。本実施の形態では、第１のECCの一例としてBCHタイプのECCを、第２のECCの一例としてLDPCタイプのECCを採用する。BCHタイプのECCは、復号処理時間が比較的短いが、エラー訂正率（所定ビット長のデータに対するエラー訂正ビット数）は比較的低い。逆に、LDPCタイプのECCは、エラー訂正率はBCHタイプのECCより高いが、復号処理時間はBCHタイプのECCより長い。
【００３４】
図４は、第１の実施の形態におけるメモリコントローラによるフラッシュメモリへの書き込みと読出し処理を示す図である。まず、書き込みWRについて説明する。メモリコントローラは、図１に示したホストが発行した書き込み要求を入力すると、制御ユニットCNT_Uが、書き込みユニットWR_Uに書き込み要求を発行する。書き込みユニットWR_Uは、書き込み要求に付加された元データ（書き込みデータ）のBCHのECCとLDPCのECCを生成し（ECC符号化）、元データに両ECCを付加した符号化データをフラッシュメモリの第１のブロックBlock_1に書き込みする。
【００３５】
次に、読出しRDについて説明する。メモリコントローラは、ホストが発行した読出要求を入力すると、制御ユニットCNT_Uが、読出ユニットRD_Uに読出要求を発行する。読出しユニットは、フラッシュメモリの第１のブロックBlock_1からデータとBCHのECCとLDPCのECCを読出し（Read）、まず、BCHのECCに基づいて読出しデータをエラー訂正する(BCH復号)。読出しデータをECCに基づいてエラー訂正することは、読出しデータの復号処理である。
【００３６】
フラッシュメモリのエラーレートが低ければ、BCHのECCに基づく復号処理でエラー訂正に成功する。しかし、エラーレートが高ければ、BCHのECCに基づく復号が失敗に終わる。そこで、読出しユニットRD_Uは、LDPCのECCに基づいて読出しデータをエラー訂正する（LDPC復号）。そして、エラー訂正された元データを出力する。LDPCのECCに基づくエラー訂正処理でエラー訂正できないと、その読出しはエラーとなる。LDPCによるエラー訂正が失敗した場合の処理は、本実施の形態の主題ではないので、その処理の説明は省略する。
【００３７】
最後に、制御ユニットCNT_Uは、読出しRDで、BCHのECCによるエラー訂正が失敗した場合、出力された元データを、読出し先のブロックBlock_1よりも書き換え回数が少ない他のブロック、第２のブロックBlock_2、に移動する移動要求を、書き込みユニットWR_Uに発行する。この要求に応答して、書き込みユニットは、上記の書き込み処理WRと同様に、出力された元データのBCHのECCとLDPCのECCを生成し（ECC符号化）、元データに両ECCを付加した符号化データをフラッシュメモリの第２のブロックBlock_2に書き込みする。
【００３８】
BCHのECCによるエラー訂正が失敗したことは、書き換え回数の増大によりメモリセルの劣化が進んでいることを意味する。従って、読み出し時と同じ第１のブロックBlock_1内にデータを記憶しておくと、次の読出し時にBCHのECCによるエラー訂正に失敗しLDPCによるエラー訂正を行う可能性が高い。そこで、BCHのECCによるエラー訂正が失敗した場合、その元データを、第１のブロックBlock_1より書き換え回数（消去回数）が少ない他のブロック、第２のブロックBlock_2に移動することで、次回の読出しでは、BCHのECCによるエラー訂正に成功する可能性が高くなる。第２のブロックBlock_2は、基準値未満の消去回数の他のブロックでもよい。
【００３９】
ここで、元データを第２のブロックBlock_2に移動する処理は、書き込みユニットが、元データを符号化してBCHのECCとLDPCのECCを付加したデータを生成し、フラッシュメモリの第２のブロックに書き込みする処理である。この結果、第１のブロック内の元データが書き込まれていたページは無効なページとなる。
【００４０】
上記の通り、読出し時、BCHのECCでエラー訂正できるエラーレートであれば、BCHのECCによる復号の処理時間でデータを応答することができる。一方、BCHのECCでエラー訂正できないエラーレートの場合は、LDPCのECCでエラー訂正してデータ応答することができる。そして、次回の読出し時、前回の読出し時にBCHのECCでエラー訂正失敗していれば、読み出しデータは書き換え回数が少ない別のブロックBlock_2に移動しているので、BCHのECCでエラー訂正できる可能性が高まる。
【００４１】
図５は、本実施の形態におけるメモリコントローラの構成例を示す図である。図５のメモリコントローラ２０は、フラッシュメモリ３０に対するアクセスを制御する。メモリコントローラ２０内の制御ユニットCNT_Uは、論理／物理アドレス変換回路２１と、書き込み・読出要求生成回路２２と、データ移動要求生成回路２３とを有する。
【００４２】
ホストが発行する書き込み入力は、書き込み先アドレスと書き込みデータを有する。また、ホストが発行する読出入力は、読出先アドレスを有する。ホストは、書き込み先アドレスと読出先アドレスを、ホストの論理アドレスで指定する。そこで、論理／物理アドレス変換回路２１は、ホストが発行した書き込み入力や読出入力の論理アドレスを、フラッシュメモリ３０の物理アドレスに変換する。そのために、論理／物理アドレス変換回路２１は、論理アドレスと物理アドレスの変換テーブルを保持する。
【００４３】
書込・読出要求生成回路２２は、ホストが発生した書込入力を受け付けると、論理／物理アドレス変換回路２１に書込入力の論理アドレスをフラッシュメモリの物理アドレスに変換させ、物理アドレスと書込データを含む書込要求WR_REQを書込ユニットWR_Uに発行する。
【００４４】
書込ユニットWR_Uは、ECC生成回路として、BCHのECCを生成するBCH_ECC生成回路ECC_GEN_1と、LDPCのECCを生成するLDPC_ECC生成回路ECC_GEN_2とを有する。更に、書込ユニットWR_U内の書込回路２４は、書込要求WR_REQに含まれるデータDATAに、BCHのECC（BCH_ECC）とLDPCのECC（LDPC_ECC）とを付加した符号化データを、書込要求WR_REQの物理アドレスに対応するフラッシュメモリ内のあるブロックのあるページに書き込みする。図４で示したとおり、ブロックBlock_1内に符号化データを書き込みするものとする。
【００４５】
次に、書込・読出要求生成回路２２は、ホストが発生した読出入力を受け付けると、論理／物理アドレス変換回路２１に読出入力の論理アドレスをフラッシュメモリの物理アドレスに変換させ、物理アドレスを含む読出要求RD_REQを読出ユニットRD_Uに発行する。
【００４６】
読出ユニットRD_Uは、読出回路２５を有する。読出回路２５は、読出要求RD_REQの物理アドレスに対応するフラッシュメモリ内のブロックBlock_1のページから、データDATAとBCHのECC（BCH_ECC）とLDPCのECC（LDPC_ECC）を読み出す。
【００４７】
その後、読出ユニット内のBCH_ECC復号回路ECC_DEC_1は、BCHのECC（BCH_ECC）に基づいてデータDATAのエラー訂正を行う。そして、BCHのECCによるエラー訂正が成功すれば、エラー訂正したデータを出力回路２６に出力する。また、BCH_ECC復号回路は、エラー訂正の結果、復号結果、を出力回路２６に出力する。復号結果は、読出ユニット内のLDPC_ECC復号回路ECC_DEC_2に出力してもよい。
【００４８】
一方、読出しユニット内のLDPC_ECC復号回路ECC_DEC_2は、LDPCのECC（LDPC_ECC）に基づいてデータDATAのエラー訂正を行う。エラー訂正結果（復号結果）が失敗の場合、エラー訂正したデータを出力回路２６に出力する。
【００４９】
出力回路２６は、エラー訂正結果（復号結果）と、エラー訂正したデータを受信し、復号結果をデータ移動要求生成回路２３に出力し、エラー訂正したデータを読み出し出力としてホストに出力する。出力回路は、上記のエラー訂正したデータとして、エラー訂正結果（復号結果）が成功の場合はBCHのECCでエラー訂正したデータを出力し、エラー訂正結果（復号結果）が失敗の場合はLDPCの場合はECCでエラー訂正したデータを出力する。
【００５０】
データ移動要求生成回路２３は、BCHのECCによるエラー訂正が失敗した場合、復号したデータを、フラッシュメモリ内のブロックBlock_1より消去回数が少ない他のブロックBlock_2に移動するデータ移動要求M_WR_REQを発行する。または、移動要求生成回路２３は、BCHのECCによるエラー訂正が失敗した場合、復号したデータを、フラッシュメモリ内の消去回数が所定の基準値より少ない他のブロックBlock_2に移動するデータ移動要求M_WR_REQを発行する。
【００５１】
このデータ移動要求に応答して、書込・読出し要求発行回路２２は、他のブロックBlock_2を決定し、そのブロック内のページに対応する物理アドレスを決定し、決定した物理アドレスに復号されたデータを書き込む書込要求WR_REQを書込ユニットWR_Uに発行する。これと共に、論理／物理アドレス変換回路２１は、内部に保持する論理／物理アドレス変換テーブルの読出先論理アドレスに対応する物理アドレスを、データの移動先の他のブロックBlock_2の物理アドレスに更新する。これにより、次回、同じ論理アドレスに対する読出または書込が発生した場合、データ移動先の他のブロックの物理アドレスに変換される。
【００５２】
そして、書込ユニットWR_Uは、データ移動要求に応じて生成された書込要求WR_REQに対応する処理を実行し、復号したデータをフラッシュメモリ内の他のブロックBlock_2内に書き込みする。また、制御ユニットは、フラッシュメモリ内の元のブロックBlock_1内のページを無効化する。データ移動要求に応じて生成された書込要求WR_REQは、元のブロック内のページを無効化する処理を伴うので、書き換え要求の一種である。
【００５３】
図５において、図１で示したメモリコントローラ内の消去ユニットER_Uは省略されている。
【００５４】
図６は、メモリコントローラによる書込処理と読出し処理のフローチャート図である。図４，５で説明したとおり、書込処理では、メモリコントローラは、第１のECCとしてBCHのECCを生成し、第２のECCとしてLDPCのECCを生成する（S10）。そして、メモリコントローラは、書込データとBCH_ECCとLDPC_ECCとをフラッシュメモリ内の書込先ブロックに書き込む（S11）。
【００５５】
一方、読出し処理では、メモリコントローラは、フラッシュメモリからデータとBCH_ECCを読出し、BCH_ECCに基づいてデータのエラー訂正（復号）を行う（S20）。この復号が成功していれば（S21のYES）、メモリコントローラは、復号データを出力する（S22）。一方、復号が失敗の場合（S21のNO）、メモリコントローラは、フラッシュメモリからLDPC_ECCを読出し、LDPC_ECCに基づいてデータのエラー訂正（復号）を行う（S23）。LDPC_ECCの読出しは、工程S20でデータとBCH_ECCと共に一緒に行い、BCH_ECCに基づくエラー訂正と並行してLDPC_ECCに基づくエラー訂正を実行するのが好ましい。それにより、LDPC_ECCに基づくエラー訂正処理が完了する時間を早めることができる。その後、この復号データを出力する（S22）。
【００５６】
図７は、メモリコントローラによる読出し処理後のデータ移動処理のフローチャート図である。図４，図５で説明したとおり、データ移動処理では、メモリコントローラは、BCH_ECCに基づく復号が失敗した場合（S30のNO）、フラッシュメモリの複数のブロックのうち消去回数が少ないブロックを選択し（S31）、選択したブロックに誤り訂正された元のデータを書き込む（S32）。さらに、メモリコントローラは、データを記憶するブロックを変更したことに伴い、論理・物理アドレス変換テーブル内の物理アドレスをデータの移動先ブロックの物理アドレスに更新する（S33）。これにより、次回、同じ論理アドレスに対する読出を要求する入力があった場合、移動先ブロックの物理アドレスに変換して、読出制御を行う。
【００５７】
［第２の実施の形態］
第２の実施の形態では、メモリコントローラは、書込対象のデータの特徴に応じて、BCHのECCとLDPCのECCを生成し、両ECCとデータを共にフラッシュメモリに書き込みする第１の書込処理をするか、LDPCのECCを生成し、BCHのECCは生成せず、LDPCのECCをデータと共にフラッシュメモリに書き込みする第２の書込処理を行う。これにより、無駄な符号化、無駄な復号処理をなくし、書込速度を高め、書き込みと読み出しの消費電力を削減する。
【００５８】
図８は、第２の実施の形態におけるメモリコントローラの書き込み及び読み出し処理を示す図である。書込処理WRで、メモリコントローラは、データの特徴、例えば、読出し頻度が基準値以上の場合、ECC符号化でBCHのECCとLDPCのECCを生成し、両ECCとデータを共にフラッシュメモリに書き込みする第１の書込処理WR_1を実行する。また、メモリコントローラは、データの読出し頻度が基準値より少ない場合、ECC符号化でLDPCのECCを生成し、BCHのECCは生成せず、LDPCのECCをデータと共にフラッシュメモリに書き込みする第２の書込処理WR_2を実行する。
【００５９】
第１の書込処理を行うか第２の書込処理を行うかは、例えば、アプリケーションプログラムがECC種別情報で指定する。従って、アプリケーションプログラムを実行するホストが発行する書込要求のデータに、このECC種別情報が付加される。メモリコントローラは、そのECC種別情報に基づいて、第１の書込処理または第２の書込処理を行う。
【００６０】
一方、読出処理RDで、メモリコントローラは、読出頻度が基準値以上のデータを読み出す場合、フラッシュメモリからデータとBCHのECC及びLDPCのECCを読み出し、BCHのECCに基づく復号（エラー訂正）を行い、BCHのECCによる復号失敗の場合はLDPCのECCに基づく復号を行い、復号（エラー訂正）した元データを出力する第１の読み出し処理を行う（RD_1）。
【００６１】
また、メモリコントローラは、読み出し頻度が基準値未満のデータを読み出す場合、フラッシュメモリからデータとLDPCのECCを読み出し、LDPCのECCに基づく復号を行い、復号（エラー訂正）した元データを出力する第２の読み出し処理を行う（RD_2）。
【００６２】
第１の読出処理を行うか第２の読出処理を行うかは、書込と同様に、メモリコントローラは、読出データに付加されるECC種別情報を読み出し、第１の読出処理または第２の読出処理のいずれかを実行する。
【００６３】
これにより、読出頻度が低いデータは読出処理の遅延の影響が小さいので、LDPCのECCに基づく誤り訂正（復号）の処理遅延を許容し、その代わりに、メモリコントローラは、書込処理でのBCHのECC生成処理を省略し、読出処理でのBCHのECCに基づく誤り訂正（復号）を省略する。これによりBCHのECCのための処理がなくなり、メモリコントローラの消費電力を削減できる。逆に、読出頻度が高いデータは読出処理の遅延の影響が大きいので、BCHのECCによる復号成功の可能性を生かして、読出処理の遅延量の期待値を短くする。
【００６４】
［第２の実施の形態の変形例］
第２の実施の形態では、更に変形例として、書込対象のデータの別の特徴、例えば、データのバックアップメモリを有するようなデータの場合、メモリコントローラは、書込処理でBCHのECCを生成し、読出処理でBCHのECCに基づいてエラー訂正（復号）を行う。LDPCのECCの生成と復号は行わない。そして、BCHのECCに基づくエラー訂正が失敗した場合、バックアップメモリからそのデータを読み出す。
【００６５】
図９は、第２の実施の形態の変形例を示す図である。ホストコンピュータのプロセッサHOSTは、磁気ディスクなどのHDD（Hard Disk Drive）に全データを記憶し、HDD内のデータの一分のデータをフラッシュメモリで構成されるSSD（Solid State Drive）に記憶する。そして、ホストコンピュータのプロセッサが、キャッシュ制御プログラムを実行して、データを読出または書き込むメモリアクセスでは、まずSSDにアクセスし、SSD内に記憶されていればそのデータを読み出し（または書き込み）、SSD内に記憶されていなければHDDからデータを読み出し、読み出したデータをSSDに記録（更に書き込み）する。キャッシュ制御プログラムには、それぞれSSDのドライバプログラムとHDDのドライバプログラムとを有する。
【００６６】
図９のSSDとHDDは、共通の筐体内に格納されたストレージ装置であってもよい。そのようなストレージ装置は、上記のキャッシュ制御プログラムを実行する制御プロセッサを内蔵し、上記と同じ読出処理及び書込処理を行う。
【００６７】
図１０は、第２の実施の形態の変形例におけるフラッシュメモリのメモリコントローラの書込及び読み出し処理の例を示す図である。図１０には、フラッシュメモリのメモリコントローラの書込処理WR_3と読出処理RD_3が示される。書込処理WR_4と読出処理RD_4は、HDDの制御装置に処理である。
【００６８】
まず、書込処理WRでは、メモリコントローラは、データの特徴が、データが図９のHDDなどのバックアップメモリに記憶される特徴の場合、ECC符号化でデータのBCHのECCを生成し、データとBCHのECCとをSSD内のフラッシュメモリに書き込みする第３の書込処理WR_3を実行する。それに加えて、ポストプロセッサはキャッシュ制御プログラムを実行し、データを、HDDなどのバックアップメモリにも書き込む（WR_4）。この場合、LDPCのECCの生成と復号は行わない。
【００６９】
データがバックアップメモリに記憶されない特徴の場合、メモリコントローラは、図８の第１の書込処理WR_1または第２の書込処理WR_2を実行する。
【００７０】
次に、読み出し処理RDでは、メモリコントローラは、SSD内のフラッシュメモリからデータとBCHのECCとを読み出し、BCHのECCでエラー訂正（復号）し、エラー訂正成功すれば復号したデータを出力する第３の読み出し処理RD_3を実行する。ホストコンピュータのプロセッサは、メモリコントローラがBCHのECCに基づくエラー訂正に失敗した場合、ポストプロセッサはキャッシュ制御プログラムを実行し、HDDからデータを読み出す（RD_4）。
【００７１】
データがバックアップメモリに記憶されない特徴の場合、メモリコントローラは、図８の第１の読み出し処理RD_1または第２の読み出し処理RD_2を実行する。
【００７２】
データがバックアップメモリに記憶される特徴か否かの情報は、例えば、アプリケーションプログラムがECC種別情報で指定する。従って、アプリケーションプログラムを実行するホストが発行する書込要求のデータに、このECC種別情報が付加される。メモリコントローラは、そのECC種別情報に基づいて、第３の書込処理WR_3を行うか、もしくは、第１の書込処理または第２の書込処理を行う。読み出し処理も、フラッシュメモリから読み出したデータに付加されたECC種別情報に基づいて、第３の読み出し処理RD_3を行うか、もしくは、第１の読み出し処理または第２の読み出し処理を行う。
【００７３】
図１１は、第２の実施の形態におけるメモリコントローラの構成例を示す図である。図１１のメモリコントローラは、図５のメモリコントローラと異なり、書込ユニットWR_UがECC種別選択回路２７を有し、更に、読み出しユニットRD_UがECC種別選択回路２８を有する。それ以外の構成は図５と同様である。
【００７４】
図１１のメモリコントローラでは、書込ユニットのECC種別選択回路２７が、書込要求WR_REQに含まれるデータに付加されたECC種別情報に基づいて、BCHのECCだけを生成するか、LDPCのECCだけを生成するか、BCHのECCとLDPCのECCの両方を生成するかを判定する。同様に、読み出しユニットのECC種別選択回路２８が、フラッシュメモリから読み出したデータに付加されたECC種別情報に基づいて、BCHのECCに基づく復号だけを行うか、LDPCのECCに基づく復号だけを行うか、BCHのECCに基づく復号とそれが失敗した場合のLDPCのECCに基づく復号を行うかを判定する。ECC種別情報は、フラッシュメモリに記憶せず、制御ユニットが記憶しても良い。
【００７５】
図１２は、フラッシュメモリに書き込まれるデータ例を示す図である。前述したとおり、ポストプロセッサからの書込要求には書込データにECC種別情報が付加される。そして、メモリコントローラの制御ユニットCNT_Uは、ECC種別情報を付加したデータと書込先アドレスを有する書込要求WR_REQを、書込ユニットWR_Uに発行する。書込ユニット内のECC種別選択回路２７は、書込要求WR_REQのデータに付加されたECC種別を示す識別子ECC_IDに基づいて、BCHのECCだけを生成するか、LDPCのECCだけを生成するか、BCHのECCとLDPCのECCの両方を生成するかを判定する。このECC種別の識別子はデータに付加されてフラッシュメモリに書き込みされる。
【００７６】
ECC種別の識別子ECC_ID1は、「１０」であり、BCHのECCを生成し、LDPCのECCは生成しないことを示す。ECC種別の識別子ECC_ID2は、「０１」であり、BCHのECCを生成せず、LDPCのECCを生成することを示す。そして、ECC種別の識別子ECC_ID3は、「１１」であり、BCHのECCとLDPCのECCの両方を生成することを示す。
【００７７】
上記のECC種別の識別子ECC_IDは、データに付加されてフラッシュメモリに書き込まれる。したがって、読み出し処理では、読み出しユニットRD_UのECC種別選択回路２８が、読み出したデータに付加されたECC種別の識別子ECC_IDに基づいて、BCHのECCに基づく復号だけを行うか、LDPCのECCに基づく復号だけを行うか、BCHのECCに基づく復号とそれが失敗した場合のLDPCのECCに基づく復号を行うかを判定する。
【００７８】
読み出したデータに付加されているECCに基づいて、どのエラー訂正（復号）を実行すべきか判定することができる場合、ECC種別の識別子ECC_IDは、必ずしもフラッシュメモリに書き込まれる必要はない。その場合、読み出しユニットのECC種別選択回路２８は、読み出したデータに付加されたECCの種別を判定して、３種類のいずれのエラー訂正（復号）を実行すべきか選択する。または、前述のとおり、制御ユニットがECC種別情報を記憶する場合、そのECC種別情報を参照して判定してもよい。
【００７９】
図１３は、第２の実施の形態（変形例を含む）におけるメモリコントローラによる書込処理を示すフローチャート図である。前述したとおり、メモリコントローラは、ホストから書込要求を入力すると、書込データに付加されたECC種別の識別子ECC_IDに基づいて、BCHのECCとLDPCのECCのうちBCHのECCか（S40）、BCHのECCとLDPCのECCのうちLDPCのECCか（S43）、BCHのECCとLDPCのECCの両方か（S40,S43）の判定を行う。
【００８０】
メモリコントローラは、ECC種別の識別子がBCHのECCの場合（S40のYES）、BCHのECCを生成し（S41）、データとBCHのECCをフラッシュメモリに書き込む（S42）。この書込処理は、図１０の書込処理WR_3に対応する。
【００８１】
メモリコントローラは、ECC種別の識別子がLDPCのECCの場合（S43のYES）、LDPCのECCを生成し（S44）、データとLDPCのECCをフラッシュメモリに書き込む（S45）。この書込処理は、図８の書込処理WR_2に対応する。
【００８２】
さらに、メモリコントローラは、ECC種別の識別子がBCHのECCとLDPCのECCの両方の場合（S40のNO,S43のNO）、BCHのECCとLDPCのECCの両方を生成し（S46）、データとBCHのECCとLDPCのECCの両方をフラッシュメモリに書き込む（S47）。この書込処理は、図８の書込処理WR_1に対応する。
【００８３】
図１４は、第２の実施の形態（変形例を含む）におけるメモリコントローラによる読み出し処理を示すフローチャート図である。前述したとおり、メモリコントローラは、ホストから読み出し要求を入力すると、フラッシュメモリから読み出し先アドレスのデータとそれに付加されたECCを読み出す（S50）。そして、メモリコントローラは、読み出したデータに付加されたECC種別の識別子ECC_IDに基づいて、BCHのECCとLDPCのECCのうちBCHのECCでエラー訂正するか（S52）、BCHのECCとLDPCのECCのうちLDPCのECCでエラー訂正するか（S56）、BCHのECCとLDPCのECCの両方でエラー訂正するか（S57,S59）の判定を行う(S51,S55)。
【００８４】
メモリコントローラは、ECC種別の識別子がBCHのECCの場合（S51のYES）、読み出しデータをBCHのECCで復号し（S52）、復号が成功すれば（S53のYES）、復号データを出力する（S60）。この読み出し処理は、図１０の読み出し処理RD_3に対応する。復号が失敗の場合（S53のNO）、メモリコントローラは、ホストに読み出し失敗通知と共にHDDへの読み出し要求を発行する（S54）。
【００８５】
メモリコントローラは、ECC種別の識別子がLDPCのECCの場合（S55のYES）、読み出しデータをLDPCのECCで復号し（S56）、復号データを出力する（S60）。この読み出し処理は、図８の読み出し処理RD_2に対応する。
【００８６】
メモリコントローラは、ECC種別の識別子がBCHのECCとLDPCのECCの場合（S51のNO、S55のNO）、まず、読み出しデータをBCHのECCで復号する（S57）。メモリコントローラは、この復号が成功すれば（S58のYES）、復号データを出力する（S60）。一方、復号が失敗すれば（S58のNO）、読み出しデータをLDPCのECCで復号し（S59）、復号データを出力する（S60）。この読み出し処理は、図８の読み出し処理RD_1に対応する。
【００８７】
図１５は、ECC種別の識別子がBCHのECCの場合のメモリコントローラとホストコンピュータのキャッシュ制御プログラムとによる読み出し処理を示すフローチャート図である。メモリコントローラは、SSD内のキャッシュデータを読み出し、BCHのECCで復号する（S70）。この復号が失敗の場合（S71のYES）、メモリコントローラはホストにHDDへの読み出し処理を要求し、それに応答してホストがHDDからデータを読み出す（S73）。HDDから読み出したデータに対するエラー訂正処理は必要に応じて行っても良い。SSDでの復号が成功の場合（S71のNO）、メモリコントローラは、BCHのECCでエラー訂正したデータを出力する（S72）。
【００８８】
［第３の実施の形態］
第３の実施の形態では、メモリコントローラは、データの特徴である読出回数（読出頻度）が多いか少ないかに応じて、BCHとLDPCのECCかLDPCのECCだけかを選択する。さらに、メモリコントローラは、データの特徴である書換回数（合計書換回数または書換頻度）が多いか少ないかに応じて、書込先ブロックに書換回数が多いブロックか少ないブロックかのいずれかを選択する。
【００８９】
上記の、メモリコントローラが、データの特徴である読出回数（読出頻度）が多いか少ないかに応じて、BCHとLDPCのECCかLDPCのECCだけかを選択することは、既に第２の実施の形態（図８）で説明したとおりである。そこで、上記の、メモリコントローラが、データの特徴である書換回数（合計書換回数または書換頻度）が多いか少ないかに応じて、書込先ブロックを書換回数が多いブロックか少ないブロックかを選択する処理について以下説明する。
【００９０】
図１６は、メモリコントローラがデータの特徴である書換回数（合計書換回数または書換頻度）が多いか少ないかに応じて書込先ブロックを書換回数が多いブロックか少ないブロックかを選択する処理を示す図である。まず、メモリコントローラは、フラッシュメモリ内の複数のブロックを第１のブロックBlock_1と第２のブロックBlock_2とに分けて管理する。そして、メモリコントローラは、データの特徴に基づいて、第１のブロックまたは第２のブロックのいずれかにデータを書き込む。
【００９１】
すなわち、書込処理WRでは、メモリコントローラは、データの特徴上、書き換え回数（または書換頻度）が基準値以上のデータを第１のブロックBlock_1に書き込む書込処理WR_aと、書き換え回数（または書換頻度）が基準値より少ないデータを第２のブロックBlock_2に書き込む書込処理WR_bとを行う。メモリコントローラは、これらの書込処理WR_a,WR_bでは、いずれも、元データをECC符号化してBCHのECCとLDPCのECCとを生成し、元データとBCHのECC及びLDPCのECCを、第１、第２のブロックBlock_1,Block_2にそれぞれ書き込みする。
【００９２】
ここで、書き換え回数とは、例えば、単位時間当たりの書き換え回数である書き換え頻度である。または、書き換え回数とは、例えば、最初にデータが生成されてから現在までのトータルの書き換え回数である。
【００９３】
一方、読出し処理RDでは、メモリコントローラは、第１のブロックBlock_1の読出要求に応答して、第１のブロックBlock_1から元データとBCHのECC及びLDPCのECCを読み出し、BCHのECCに基づく復号（エラー訂正）を行い、BCHのECCによる復号失敗の場合はLDPCのECCに基づく復号を行い、復号（エラー訂正）した元データを出力する（RD_a）。
【００９４】
また、メモリコントローラは、第２のブロックBlock_2の読出要求に応答して、第２のブロックから元データとBCHのECC及びLDPCのECCを読み出し、BCHのECCに基づく復号（エラー訂正）を行い、復号（エラー訂正）した元データを出力する（RD_b）。第２のブロックは消去回数が抑制されるので、消去回数増大によるメモリセルの劣化が抑制され、BCHのECCによる復号（エラー訂正）で成功する確率が高くなる。読出処理RD_bの場合でも、BCHのECCによる復号失敗の場合は、LDPCのECCに基づく復号を行い、復号（エラー訂正）した元データを出力する。但し、BCHのECCによる復号失敗の確率は低い。
【００９５】
このように書込処理を行うことで、データの特徴上、書き換え回数が基準値より少ないデータを第２のブロックに集約して記憶することで、第２のブロックの消去回数を少なくすることができる。その結果、第２のブロックは、消去回数が増大することによるメモリセルの劣化が抑制され、エラーレートを抑制することができる。エラーレートが抑制されれば、読出において、BCHのECCに基づくエラー訂正（復号）が成功する可能性を高くすることができ、エラー訂正（復号）処理の時間を短縮できる。
【００９６】
第３の実施の形態では、メモリコントローラは、図８に示した書込処理WR_1,WR_2及び読出処理RD_1,RD_2と、図１６に示した書込処理WR_a,WR_b及び読出処理RD_a,RD_bを組み合わせた処理を行う。
【００９７】
図１７は、第３の実施の形態におけるデータの特徴とメモリコントローラの書込先ブロックとECCの関係を示す図である。図中、４つの楕円はデータの特徴を示し、それぞれ、読出が多い、少ない、書換が多い、少ないである。それに対して、４つの矩形はデータの特徴に起因する現象等である。例えば、読出が多いデータは、読出頻度が高いため、読出での復号処理時間によるディスターブの影響が大きいが、読出が少ないデータは、読出頻度が低いため、読出での復号処理時間によるディスターブの影響は小さい。一方、書換が多いデータは、書換時の消去によるセルの劣化度が大きく、書換が少ないデータは、書換時の消去によるセルの劣化度は低い。
【００９８】
図１８は、データの特徴とECC種と書込先ブロックの関係テーブルを示す図である。図１７と図１８を参照して説明する。
【００９９】
まず、（１）データの特徴が、読み出しが多く書き換えが多い特徴１の場合、ECCはBCHとLDPCの両方で、書込先ブロックは書換が多いデータ用の第１のブロックBlock_1が好ましい。この場合、メモリコントローラは、後述する書込処理WR_1a、読出処理RD_1aを実行する。
【０１００】
（２）データの特徴が、読み出しが多く書換が少ない特徴２の場合、ECCはBCHとLDPCの両方で、書込先ブロックは書換が少ないデータ用の第２のブロックBlock_2が好ましい。この場合、書換が少ないブロックなので、BCHのECCで復号成功になる可能性が高くなる。メモリコントローラは、後述する書込処理WR_1b、読出処理RD_1bを実行する。
【０１０１】
（３）データの特徴が、読み出しが少なく書き換えが少ない特徴３の場合、ECCはLDPCだけで、書込先ブロックは第２のブロックBlock_2が好ましい。メモリコントローラは、後述する書込処理WR_2a、読出処理RD_2aを実行する。
【０１０２】
（４）データの特徴が、読み出しが少なく書き換えが多い特徴４の場合、ECCはLDPCだけで、書込先ブロックは第１のブロックBlock_1が好ましい。この場合、書換が多いのでセルの劣化が進むので、BCHのECCによる復号は失敗の蓋然性が高く、LDPCのECCだけを利用することが好ましい。メモリコントローラは、後述する書込処理WR_2b、読出処理RD_2bを実行する。
【０１０３】
図１９は、第３の実施の形態におけるデータの特徴に対応する書込処理を示す図である。また、図２０は、第３の実施の形態におけるデータの特徴に対応する読出処理を示す図である。
【０１０４】
まず、（１）データの特徴が、読み出しが多く書き換えが多い特徴１の場合、メモリコントローラは、書込処理WR_1a、読出処理RD_1aを実行する。書込処理WR_1aでは、メモリコントローラは、BCHとLDPCの両方のECCを生成し、データと両ECCを第１のブロックBlock_1に書き込みする。読出処理RD_1aでは、メモリコントローラは、第１のブロックBlock_1からデータとBCH及びLDPCのECCを読出し、BCHのECCで復号し、復号失敗すればLDPCのECCで復号する。
【０１０５】
（２）データの特徴が、読み出しが多く書き換えが少ない特徴２の場合、メモリコントローラは、書込処理WR_1b、読出処理RD_1bを実行する。書込処理WR_1bでは、メモリコントローラは、BCHとLDPCの両方のECCを生成し、データと両ECCを第２のブロックBlock_2に書き込みする。読出処理RD_1bでは、メモリコントローラは、第２のブロックBlock_2からデータとBCH及びLDPCのECCを読出し、BCHのECCで復号し、復号失敗すればLDPCのECCで復号する。書き換えが少ない第２のブロックではメモリセルの劣化が少なく、BCHのECCによる復号を成功する確率が高く、読出レイテンシが短くなることが期待できる。
【０１０６】
（３）データの特徴が、読み出しが少なく書き換えが多い特徴３の場合、メモリコントローラは、書込処理WR_2a、読出処理RD_2aを実行する。書込処理WR_2aでは、メモリコントローラは、LDPCのECCを生成し、データとLDPCのECCを第１のブロックBlock_1に書き込みする。読出処理RD_2aでは、メモリコントローラは、第１のブロックBlock_1からデータとLDPCのECCを読出し、LDPCのECCで復号する。書き換えが多い第２のブロックであるので、BCHのECCによる復号で失敗する可能性が比較的高く、LDPCのECCのみ生成し復号するので、BCHのECCの生成と復号を削減できる。
【０１０７】
（４）データの特徴が、読み出しが少なく書き換えが少ない特徴４の場合、メモリコントローラは、書込処理WR_2b、読出処理RD_2bを実行する。書込処理WR_2bでは、メモリコントローラは、LDPCのECCを生成し、データとLDPCのECCを第２のブロックBlock_2に書き込みする。読出処理RD_2bでは、メモリコントローラは、第２のブロックBlock_2からデータとLDPCのECCを読出し、LDPCのECCで復号する。
【０１０８】
図２１は、第３の実施の形態におけるメモリコントローラの書込処理を示すフローチャート図である。ホストからの書込要求には、データの特徴を示す特徴識別子が含まれる。この特徴識別子は、ホストが実行するアプリケーションプログラムによって生成、書込要求として出力される。
【０１０９】
ホストからの書込要求を受信すると、メモリコントローラは、図１８のデータ特徴テーブルを参照し、書込先ブロックとECC種とを決定する（S80）。そして、メモリコントローラは、決定した書込先ブロック内の書込アドレスを決定する（S81）。この決定は、メモリコントローラ内の制御ユニットCNT_Uにより行われる。さらに、制御ユニットは、決定したECC種に対応するECC種別識別子ECC_IDをデータに付加し、ECC_ID付きデータと決定した書込アドレスを有する書込要求を、書込ユニットWR_Uに発行する。これにより、書込ユニットは、決定したECC種のECCを生成し、データと共にフラッシュメモリに書き込む（S82）。
【０１１０】
メモリコントローラの読み出し処理も書込と同様である。即ち、ホストからの読み出し要求には、データの特徴を示す特徴識別子が含まれる。制御ユニットは、データ特徴テーブルを参照し、データの特徴に応じて、いずれの読出処理を実行するかを決定する。そして、制御ユニットは、読出ユニットに決定した読出処理を実行する読出要求を発行する。
【０１１１】
以上のとおり、本実施の形態によれば、以下のメリットがある。
【０１１２】
第１に、BCHのECCで復号失敗した場合、その復号データを書換え回数が少ないブロックに移動するので、次に読み出されるとき、BCHのECCで復号が成功する確率が向上する。
【０１１３】
第２に、データの読出頻度が高い場合、使用するECC種別をBCHとLDPCの両方のECCとすることで、BCHのECCによる復号成功によるレイテンシの期待値を短くでき、読出の遅延によるディスターブの影響を抑制できる。また、データの読出頻度が低い場合、LDPCのECCにすることで、BCHのECCの生成と、BCHのECCによる復号を省略でき、メモリコントローラの消費電力を抑制できる。
【０１１４】
第３に、書換えが多いデータと少ないデータとを別のブロックに書き込むようにすることで、書換えが少ないデータが記憶されるブロックのメモリセルの劣化を抑制し、BCHのECCによる復号が成功する確率を向上できる。
【０１１５】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１１６】
（付記１）
半導体メモリへのアクセスを制御する制御部と、
書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータを前記半導体メモリに書き込む書き込み部と、
読み出し要求の読み出し先ブロックから、読み出しデータを読み出し、前記読み出しデータにエラーが生じた場合に前記第１の誤り訂正符号もしくは前記第２の誤り訂正符号により訂正されたデータを出力する読み出し部とを有し、
前記制御部は、前記第１の誤り訂正符号による誤り訂正が失敗した場合、前記読み出しデータを第２の誤り訂正符号により誤り訂正されたデータを、書き換え回数が第１の基準値より少ない他のブロックに移動する、
メモリコントローラ装置。
【０１１７】
（付記２）
前記制御部による前記誤り訂正されたデータを前記他のブロックに移動する処理は、前記制御部が、前記書き込み部に、前記読み出し先ブロックの前記読み出しデータを前記他のブロックに書き込む要求を発行することを含む、付記１に記載のメモリコントローラ装置。
【０１１８】
（付記３）
前記読み出し部は、読み出し要求に応答して、前記半導体メモリ内の前記読み出し要求の読み出し先ブロックから、読み出しデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを読み出し、前記第１の誤り訂正符号による復号が成功した場合、前記第１の誤り訂正符号により復号されたデータを出力し、前記第１の誤り訂正符号による復号が失敗した場合、前記第２の誤り訂正符号により復号されたデータを出力する、付記１に記載のメモリコントロール装置。
【０１１９】
（付記４）
半導体メモリの書き込みと読み出しを制御する制御部と、
書き込み要求に応答して、
（a1）前記書き込み要求の書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを前記半導体メモリに書き込む第１の書き込み処理と、
（a2）前記第２の誤り訂正符号を生成し、前記書き込みデータと前記第２の誤り訂正符号とを前記半導体メモリに書き込む第２の書き込み処理とを実行する書き込み部と、
読み出し要求に応答して、
（b1）前記半導体メモリ内の前記読み出し要求の読み出し先ブロックから、読み出しデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを読み出し、前記第１の誤り訂正符号による復号が成功した場合、前記第１の誤り訂正符号により復号されたデータを出力し、前記第１の誤り訂正符号による復号が失敗した場合、前記第２の誤り訂正符号により復号されたデータを出力する第１の読み出し処理と、
（b2）前記読み出しデータと前記第２の誤り訂正符号とを読み出し、前記第２の誤り訂正符号により復号されたデータを出力する第２の読み出し処理とを実行する読み出し部とを有し、
前記制御部は、
（c1）前記書き込みデータの読み出し回数が第１基準値以上の場合、前記書き込み部に前記第１の書き込み処理を要求する第１の書き込み要求を発行し、
（c2）前記書き込みデータの前記読み出し回数が前記第１基準値未満の場合、前記書き込み部に前記第２の書き込み処理を要求する第２の書き込み要求を発行し、
（d1）前記読み出しデータの前記読み出し回数が前記第１基準値以上の場合、前記読み出し部に前記第１の読み出し処理を要求する第１の読み出し要求を発行し、
（d2）前記読み出しデータの前記読み出し回数が前記第１基準値未満の場合、前記読み出し部に前記第２の読み出し処理を要求する第２の読み出し要求を発行する、付記１記載のメモリコントローラ装置。
【０１２０】
（付記５）
前記制御部は、
(c3)書き換え回数が第２基準値以上のデータを書き込む場合、前記書き込み部に前記半導体メモリ内の第１のブロックに書き込むことを要求し、
(c4)前記書き換え回数が前記第２基準値未満のデータを書き込む場合、前記書き込み部に前記半導体メモリの第２のブロックに書き込むことを要求する、付記４に記載のメモリコントローラ装置。
【０１２１】
（付記６）
前記制御部は、書き込み要求入力に含まれる前記読み出し回数と前記書き換え回数の識別子に基づいて、前記読み出し回数が前記第１基準値以上または未満かを判定し、前記書き換え回数が前記第２基準値以上または未満を判定する、付記５に記載のメモリコントローラ装置。
【０１２２】
（付記７）
前記書き込み部は、更に、
(a3)前記第１の誤り訂正符号を生成し、前記書き込みデータと前記第１の誤り訂正符号とを前記半導体メモリに書き込む第３の書き込み処理とを実行し、
前記読み出し部は、更に、
(b3)前記読み出しデータと前記第１の誤り訂正符号とを読み出し、前記第１の誤り訂正符号により復号されたデータを出力する第３の読み出し処理とを実行し、
前記制御部は、
(c5)前記書き込み要求の書き込みデータが、前記半導体メモリ以外の記憶装置に記憶されている場合、前記書き込み部に前記第３の書き込み処理を要求する第３の書き込み要求を発行し、
(d3)前記読み出し要求の読み出しデータが、前記半導体メモリ以外の記憶装置に記憶されている場合、前記読み出し部に前記第３の読み出し処理を発行する、付記４に記載のメモリコントローラ装置。
【０１２３】
（付記８）
前記制御部は、前記第１の誤り訂正符号による復号が失敗した場合、前記読み出しデータを、前記半導体メモリ内の前記読み出し先ブロックよりも消去回数が少ない他のブロックに移動する、付記４または５に記載のメモリコントローラ装置。
【０１２４】
（付記９）
更に、前記制御部からの消去要求に応答して、書き込み済みのページを有するブロックの全ページを消去する消去部を有する、付記１に記載のメモリコントローラ装置。
【０１２５】
（付記１０）
更に、前記制御部からの消去要求に応答して、書き込み済みのページを有するブロックの全ページを消去する消去部を有する、付記５に記載のメモリコントローラ装置。
【０１２６】
（付記１１）
半導体メモリと、
前記半導体メモリへのアクセスを制御するメモリコントローラを有し、
前記メモリコントローラは、
半導体メモリへのアクセスを制御する制御部と、
書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータを前記半導体メモリに書き込む書き込み部と、
読み出し要求の読み出し先ブロックから、読み出しデータを読み出し、前記読み出しデータにエラーが生じた場合に前記第１の誤り訂正符号もしくは前記第２の誤り訂正符号により訂正されたデータを出力する読み出し部とを有し、
前記制御部は、前記第１の誤り訂正符号による誤り訂正が失敗した場合、前記読み出しデータを第２の誤り訂正符号により誤り訂正されたデータを、書き換え回数が第１の基準値より少ない他のブロックに移動する、メモリ装置。
【０１２７】
（付記１２）
半導体メモリへのアクセスを制御する制御部を有するメモリコントローラによるメモリコントロール方法において、
書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータを前記半導体メモリに書き込む工程と、
読み出し要求の読み出し先ブロックから、読み出しデータを読み出し、前記読み出しデータにエラーが生じた場合に前記第１の誤り訂正符号もしくは前記第２の誤り訂正符号により訂正されたデータを出力する工程と、
前記第１の誤り訂正符号による誤り訂正が失敗した場合、前記読み出しデータを第２の誤り訂正符号により誤り訂正されたデータを、書き換え回数が第１の基準値より少ない他のブロックに移動する工程、を有するメモリコントロール方法。
【０１２８】
（付記１３）
半導体メモリの書き込みと読み出しを制御する制御部と、
書き込み要求に応答して、
（a1）前記書き込み要求の書き込みデータに対して、第１の誤り訂正符号と、前記第１の誤り訂正符号よりエラー訂正率が高くエラー訂正を行う復号処理時間が長い第２の誤り訂正符号とを生成し、前記書き込みデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを前記半導体メモリに書き込む第１の書き込み処理と、
（a2）前記第２の誤り訂正符号を生成し、前記書き込みデータと前記第２の誤り訂正符号とを前記半導体メモリに書き込む第２の書き込み処理とを実行する書き込み部と、
読み出し要求に応答して、
（b1）前記半導体メモリ内の前記読み出し要求の読み出し先ブロックから、読み出しデータと前記第１の誤り訂正符号及び前記第２の誤り訂正符号とを読み出し、前記第１の誤り訂正符号による復号が成功した場合、前記第１の誤り訂正符号により復号されたデータを出力し、前記第１の誤り訂正符号による復号が失敗した場合、前記第２の誤り訂正符号により復号されたデータを出力する第１の読み出し処理と、
（b2）前記読み出しデータと前記第２の誤り訂正符号とを読み出し、前記第２の誤り訂正符号により復号されたデータを出力する第２の読み出し処理とを実行する読み出し部とを有し、
前記制御部は、
（c1）前記書き込みデータの読み出し回数が第１基準値以上の場合、前記書き込み部に前記第１の書き込み処理を要求する第１の書き込み要求を発行し、
（c2）前記書き込みデータの前記読み出し回数が前記第１基準値未満の場合、前記書き込み部に前記第２の書き込み処理を要求する第２の書き込み要求を発行し、
（d1）前記読み出しデータの前記読み出し回数が前記第１基準値以上の場合、前記読み出し部に前記第１の読み出し処理を要求する第１の読み出し要求を発行し、
（d2）前記読み出しデータの前記読み出し回数が前記第１基準値未満の場合、前記読み出し部に前記第２の読み出し処理を要求する第２の読み出し要求を発行する、メモリコントローラ装置。
【符号の説明】
【０１２９】
ECC_CD：ECC符号化ユニット
WR_U：書き込みユニット、書き込み回路、書き込み部
ECC_DEC：ECC復号ユニット
RD_U：読み出しユニット、読み出し回路、読み出し部
ER_U：消去ユニット、消去回路、消去部
CNT_U：制御ユニット、制御回路、制御部
１０：メモリ装置
２０：メモリコントローラ
３０：フラッシュメモリ
【図１】
2020042326.tif 000003
【図２】
2020042326.tif 000004
【図３】
2020042326.tif 000005
【図４】
2020042326.tif 000006
【図５】
2020042326.tif 000007
【図６】
2020042326.tif 000008
【図７】
2020042326.tif 000009
【図８】
2020042326.tif 000010
【図９】
2020042326.tif 000011
【図１０】
2020042326.tif 000012
【図１１】
2020042326.tif 000013
【図１２】
2020042326.tif 000014
【図１３】
2020042326.tif 000015
【図１４】
2020042326.tif 000016
【図１５】
2020042326.tif 000017
【図１６】
2020042326.tif 000018
【図１７】
2020042326.tif 000019
【図１８】
2020042326.tif 000020
【図１９】
2020042326.tif 000021
【図２０】
2020042326.tif 000022
【図２１】
2020042326.tif 000023