(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-11
(45)【発行日】2023-12-19
(54)【発明の名称】メモリコントローラ及びフラッシュメモリシステム
(51)【国際特許分類】
G06F 11/10 20060101AFI20231212BHJP
【FI】
G06F11/10 668
(21)【出願番号】P 2020019673
(22)【出願日】2020-02-07
【審査請求日】2022-05-31
(73)【特許権者】
【識別番号】000003067
【氏名又は名称】TDK株式会社
(74)【代理人】
【識別番号】100095407
【氏名又は名称】木村 満
(74)【代理人】
【識別番号】100132883
【氏名又は名称】森川 泰司
(74)【代理人】
【識別番号】100148149
【氏名又は名称】渡邉 幸男
(74)【代理人】
【識別番号】100181618
【氏名又は名称】宮脇 良平
(74)【代理人】
【識別番号】100209794
【氏名又は名称】三瓶 真弘
(72)【発明者】
【氏名】田窪 謙一
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2005-293557(JP,A)
【文献】特開2005-135572(JP,A)
【文献】特開2010-182087(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/10
(57)【特許請求の範囲】
【請求項1】
フラッシュメモリ内の複数の物理ブロックでグループを構成し、前記グループを構成する前記複数の物理ブロックをデータブロックと冗長ブロックとに割り当てるグループ管理手段と、
保存すべきデータを前記データブロックに書き込み、前記保存すべきデータに基づく冗長データを前記データブロックと同一のグループに属する前記冗長ブロックに書き込む書き込み手段と、
を備え、
前記グループ管理手段はさらに、前記データブロックに前記保存すべきデータが全て正常に書き込まれたとき、前記データブロックと同一のグループに属する少なくとも1つの
、前記冗長データが書き込まれた前記冗長ブロックを該グループから離脱させ
て空きブロックとする、
メモリコントローラ。
【請求項2】
前記保存すべきデータが正常に書き込まれていない前記データブロックであるエラーブロックがあるとき、前記エラーブロックが属するグループを構成
し少なくとも1の前記冗長ブロックを含む前記複数の物理ブロックに正常に書き込まれたデータに基づいて前記エラーブロックに正常に書き込まれるべきデータを復旧する復旧手段をさらに備え、
前記グループ管理手段はさらに、前記エラーブロックを前記エラーブロックが属するグループから離脱させ、新たな物理ブロックを該グループに追加し、前記新たな物理ブロックを前記データブロックに割り当て、
前記書き込み手段はさらに、前記復旧手段が復旧したデータを前記新たな物理ブロックに書き込む、
請求項1に記載のメモリコントローラ。
【請求項3】
前記グループ管理手段は、2以上の物理ブロックを前記データブロックに割り当て、
前記冗長データは、前記データブロックに割り当てられた前記2以上の物理ブロックのそれぞれに書き込まれるデータをまたいでパリティを求めることにより作成されるパリティデータであり、
前記復旧手段は、前記データブロックに正常に書き込まれたデータと前記冗長ブロックに正常に書き込まれたパリティデータとに基づいて、前記エラーブロックに正常に書き込まれるべきデータを復旧する、
請求項2に記載のメモリコントローラ。
【請求項4】
前記冗長データは、前記データブロックに書き込まれるデータと同一のデータであり、
前記グループ管理手段はさらに、前記保存すべきデータが正常に書き込まれていない前記データブロックであるエラーブロックがあるとき、前記エラーブロックを前記データブロックが属するグループから離脱させ、前記エラーブロックに正常に書き込まれるべきデータと同一の前記冗長データが書き込まれた前記冗長ブロックを前記データブロックに割り当てる、
請求項1に記載のメモリコントローラ。
【請求項5】
前記グループを管理するグループ管理テーブルを格納する記憶手段をさらに備え、
前記グループ管理手段はさらに、前記グループと前記複数の物理ブロックとの対応関係を示す情報と、前記データブロックの割り当てと前記冗長ブロックの割り当てとを示す情報とを前記グループ管理テーブルに書き込み、
前記書き込み手段は、前記グループ管理テーブルを参照して、書き込み対象となる前記データブロックと前記冗長ブロックとを特定する、
請求項1から4のいずれか1項に記載のメモリコントローラ。
【請求項6】
請求項1から5のいずれか1項に記載のメモリコントローラと前記フラッシュメモリとを備えるフラッシュメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリコントローラ及びフラッシュメモリシステムに関する。
【背景技術】
【0002】
フラッシュメモリにデータを書き込むとき、データが正常に書き込まれず誤りを含むデータが書き込まれることがある。また、書き込み時点では正常にデータが書き込まれたものの、その後のデータの読み出し、時間経過などを原因として、書き込まれたデータに誤りが生じてしまうこともある。特に、多数回の読み書き及び消去がされたセルにデータを書き込むとき、当該セルのトンネル酸化膜が劣化しているため、これらの問題が生じやすい。
【0003】
上記の問題に対応するために、データ書き込み時に、誤りを訂正するための誤り訂正符号(ECC:Error-Correcting Code)を併せて書き込むことが一般的に行われている。しかし、誤り訂正符号の誤り訂正能力を超えてデータに誤りが生じることもある。
【0004】
特許文献1には、複数のブロックに書き込まれるユーザデータに基づいて作成されるパリティデータをパリティブロックに書き込み、誤り訂正符号による訂正ができないユーザデータがあるとき、パリティブロックからパリティデータを読み出してユーザデータの誤り訂正を行う技術が開示されている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
ここで、データ書き込み時に誤りが生じる可能性は、データ書き込み後のデータの読み出し、時間経過などにより誤りが生じる可能性よりも高い。そのため、データ書き込み時に生じる誤りを訂正するためにはパリティブロックが必要であっても、書き込み後にはパリティブロックが不要となる。そのため、書き込み後においては、パリティブロックが不必要にフラッシュメモリの容量を圧迫する。つまり、特許文献1の技術は、誤り訂正能力は高いものの、容量効率が低いという問題がある。
【0007】
本発明の目的は、上記の事情に鑑み、容量効率がよく誤り訂正能力が高いメモリコントローラ等を提供することにある。
【課題を解決するための手段】
【0008】
上記の目的を達成するため、本発明の第1の観点に係るメモリコントローラは、
フラッシュメモリ内の複数の物理ブロックでグループを構成し、前記グループを構成する前記複数の物理ブロックをデータブロックと冗長ブロックとに割り当てるグループ管理手段と、
保存すべきデータを前記データブロックに書き込み、前記保存すべきデータに基づく冗長データを前記データブロックと同一のグループに属する前記冗長ブロックに書き込む書き込み手段と、
を備え、
前記グループ管理手段はさらに、前記データブロックに前記保存すべきデータが全て正常に書き込まれたとき、前記データブロックと同一のグループに属する少なくとも1つの、前記冗長データが書き込まれた前記冗長ブロックを該グループから離脱させて空きブロックとする。
【0009】
前記メモリコントローラは、
前記保存すべきデータが正常に書き込まれていない前記データブロックであるエラーブロックがあるとき、前記エラーブロックが属するグループを構成し少なくとも1の前記冗長ブロックを含む前記複数の物理ブロックに正常に書き込まれたデータに基づいて前記エラーブロックに正常に書き込まれるべきデータを復旧する復旧手段をさらに備え、
前記グループ管理手段はさらに、前記エラーブロックを前記エラーブロックが属するグループから離脱させ、新たな物理ブロックを該グループに追加し、前記新たな物理ブロックを前記データブロックに割り当て、
前記書き込み手段はさらに、前記復旧手段が復旧したデータを前記新たな物理ブロックに書き込む、
ものであってもよい。
【0010】
前記メモリコントローラは、
前記グループ管理手段は、2以上の物理ブロックを前記データブロックに割り当て、
前記冗長データは、前記データブロックに割り当てられた前記2以上の物理ブロックのそれぞれに書き込まれるデータをまたいでパリティを求めることにより作成されるパリティデータであり、
前記復旧手段は、前記データブロックに正常に書き込まれたデータと前記冗長ブロックに正常に書き込まれたパリティデータとに基づいて、前記エラーブロックに正常に書き込まれるべきデータを復旧する、
ものであってもよい。
【0011】
前記メモリコントローラは、
前記冗長データは、前記データブロックに書き込まれるデータと同一のデータであり、
前記グループ管理手段はさらに、前記保存すべきデータが正常に書き込まれていない前記データブロックであるエラーブロックがあるとき、前記エラーブロックを前記データブロックが属するグループから離脱させ、前記エラーブロックに正常に書き込まれるべきデータと同一の前記冗長データが書き込まれた前記冗長ブロックを前記データブロックに割り当てる、
ものであってもよい。
【0012】
前記メモリコントローラは、
前記グループを管理するグループ管理テーブルを格納する記憶手段をさらに備え、
前記グループ管理手段はさらに、前記グループと前記複数の物理ブロックとの対応関係を示す情報と、前記データブロックの割り当てと前記冗長ブロックの割り当てとを示す情報とを前記グループ管理テーブルに書き込み、
前記書き込み手段は、前記グループ管理テーブルを参照して、書き込み対象となる前記データブロックと前記冗長ブロックとを特定する、
ものであってもよい。
【0013】
上記の目的を達成するため、本発明の第2の観点に係るフラッシュメモリシステムは、前記メモリコントローラと前記フラッシュメモリとを備える。
【発明の効果】
【0014】
本発明によれば、容量効率がよく誤り訂正能力が高いメモリコントローラ等を提供できる。
【図面の簡単な説明】
【0015】
【
図1】本発明の実施の形態に係るフラッシュメモリシステムの構成を示すブロック図である。
【
図2】本発明の実施の形態に係るフラッシュメモリのブロック構成の一例を示す図である。
【
図3】本発明の実施の形態1に係るメモリコントローラにより構成されるグループの一例を示す図である。
【
図4】本発明の実施の形態1に係るメモリコントローラによるデータ書き込みの概要を示す図である。
【
図5】本発明の実施の形態1に係るメモリコントローラによるデータ復旧の概要を示す図である。
【
図6】本発明の実施の形態1に係るメモリコントローラによる冗長ブロック離脱の概要を示す図である。
【
図7】本発明の実施の形態1に係るメモリコントローラの制御回路の機能的構成を示すブロック図である。
【
図8】本発明の実施の形態1に係るグループ管理テーブルの一例を示す図である。
【
図9】本発明の実施の形態1に係るメモリコントローラによるデータ保存の動作の一例を示すフローチャートである。
【
図10】本発明の実施の形態2に係るメモリコントローラにより構成されるグループの一例を示す図である。
【
図11】本発明の実施の形態2に係るメモリコントローラによるパリティデータ作成の概要を示す図である。
【
図12】本発明の実施の形態2に係るメモリコントローラによる冗長ブロック離脱の概要を示す図である。
【
図13】本発明の実施の形態3に係るメモリコントローラの制御回路の機能的構成を示すブロック図である。
【
図14】本発明の実施の形態3に係るメモリコントローラにより構成されるグループの一例を示す図である。
【
図15】本発明の実施の形態3に係るメモリコントローラによるデータ書き込みの概要を示す図である。
【
図16】本発明の実施の形態3に係るメモリコントローラによる冗長ブロックからデータブロックへの再割り当ての概要を示す図である。
【
図17】本発明の実施の形態3に係るメモリコントローラによる再割り当てにより生じるグループ管理テーブルの変化の一例を示す図である。
【
図18】本発明の実施の形態3に係るメモリコントローラによるデータ保存の動作の一例を示すフローチャートである。
【発明を実施するための形態】
【0016】
以下、図面を参照しながら、本発明の実施の形態に係るメモリコントローラ及びフラッシュメモリシステムを説明する。各図面においては、同一又は同等の部分に同一の符号を付す。
【0017】
(実施の形態1)
図1を参照しながら、実施の形態1に係るフラッシュメモリシステム1を説明する。
【0018】
フラッシュメモリシステム1は、フラッシュメモリ2とメモリコントローラ10とを備える。フラッシュメモリシステム1は、ホストシステム3に接続されている。フラッシュメモリシステム1は、例えばSSD(Solid State Drive)、eMMC(embedded Multi Media Card)などである。フラッシュメモリシステム1は、ホストシステム3の二次記憶装置として使用される。フラッシュメモリシステム1は、本発明に係るフラッシュメモリシステムの一例である。
【0019】
フラッシュメモリ2は、1以上のフラッシュメモリチップから構成される。フラッシュメモリ2は、実施の形態1においてはNAND型フラッシュメモリである。NAND型のフラッシュメモリ2は、ページ単位でデータの書き込み及び読み出しを行い、複数ページにて構成されるブロック単位でデータの消去を行う。フラッシュメモリ2は、本発明に係るフラッシュメモリの一例である。
【0020】
図2を参照しながら、フラッシュメモリ2のブロック構成の一例を説明する。
図2では、1つのブロックが64ページにて構成される。1ページは、4セクタ(2048バイト)のデータ領域ADと64バイトの冗長領域ARとから構成される。データ領域ADにはデータが書き込まれ、冗長領域ARにはページの管理に関する情報が書き込まれる。特に、冗長領域ARには、データ領域ADに書き込まれたデータに生じる誤りを訂正するための誤り訂正符号が書き込まれる。誤り訂正符号は、例えばリードソロモン符号、低密度パリティ検査符号(LDPC符号:Low-Density Parity-Check code)などである。ただし、フラッシュメモリ2に生じる誤りは、データ書き込み時に特に発生しやすく、誤り訂正符号による訂正ができないほどに誤りが生じることも想定される。なお、各ページの記憶領域に、1セクタ(512バイト)のデータ領域ADと16バイトの冗長領域ARが、データ領域AD、冗長領域AR、データ領域AD、冗長領域AR・・・という順番で交互に割り当てられる場合もある。
【0021】
なお、一般に、フラッシュメモリのページとブロックは、それぞれ物理ページ、物理ブロックとも呼ばれる。これは、ホストシステムがデータを取り扱うときの単位である論理ページ及び論理ブロックと区別するためである。但し、以下の説明では、フラッシュメモリ2の物理ページ又は物理ブロックに対するデータの書き込み、読み出し又は消去において、物理ページ及び物理ブロックをそれぞれページ及びブロックと表現することがある。
【0022】
再び
図1を参照する。メモリコントローラ10は、ホストシステム3と通信し、フラッシュメモリ2を制御する。メモリコントローラ10は、ホストシステム3から書き込み要求があったとき、ホストシステム3から受信したデータをフラッシュメモリ2に書き込み、ホストシステム3から読み出し要求があったとき、データをフラッシュメモリ2から読み出してホストシステム3に送信する。詳細は後述するが、メモリコントローラ10により高い誤り訂正能力を容量効率よく実現できる。メモリコントローラ10の構成の詳細については後述する。メモリコントローラ10は、本発明に係るメモリコントローラの一例である。
【0023】
ホストシステム3は、フラッシュメモリシステム1を二次記憶装置として使用するホストシステムである。ホストシステム3は、例えばパーソナルコンピュータ、スマートフォンなどである。
【0024】
次に、理解を容易にするため、
図3~
図5を参照して具体例を示しながら、メモリコントローラ10によるフラッシュメモリ制御方法を概略的に説明する。
【0025】
まず、
図3に示すように、メモリコントローラ10は、フラッシュメモリ2の複数のブロックでグループを構成する。
図3では、4つのブロックでグループG1が構成されている。また、メモリコントローラ10は、グループを構成する複数のブロックを、データブロックと冗長ブロックとに割り当てる。データブロックは、保存すべきデータが書き込まれるブロックである。冗長ブロックは、データブロックに生じる誤りを訂正するための冗長データが書き込まれるブロックである。
図3では、グループG1の各ブロックのうち3つのブロックがデータブロックBD1,BD2及びBD3に割り当てられ、1つのブロックが冗長ブロックBR1に割り当てられている。実施の形態1では、
図3に示すように、1つのグループにデータブロックが3つ、冗長ブロックが1つ割り当てられる場合について説明する。
【0026】
次に、
図4を参照しながら、メモリコントローラ10によるデータ書き込みの概要を説明する。まず、
図4の(1)に示すように、メモリコントローラ10は、保存すべきデータであるデータD1,D2及びD3をページ単位で準備し、ページ単位でパリティデータP1を作成する。保存すべきデータとは、基本的にはホストシステム3から書き込み要求がされたデータであるが、そのほかにフラッシュメモリ2の管理の都合により保存すべきデータも生じうる。データD1,D2及びD3は、それぞれデータブロックBD1,BD2及びBD3に書き込まれるページ単位のデータであり、パリティデータP1は冗長ブロックBR1に書き込まれるページ単位のデータである。メモリコントローラ10は、データD1,D2及びD3に基づいてパリティを算出してパリティデータP1を作成する。データD1,D2及びD3の3ページ分のデータに基づいて算出されるパリティは、例えば、データD1の各ビット列とデータD2の各ビット列とデータD3の各ビット列との排他的論理和(XOR)を算出することにより得られる水平パリティである。つまり、パリティは、データブロックBD1,BD2及びBD3内のそれぞれのページに書き込まれるデータをまたいで排他的論理和を算出することにより求められる。
【0027】
次に、
図4の(2)に示すように、メモリコントローラ10は、ページ単位のデータであるデータD1,D2及びD3をデータブロックBD1,BD2及びBD3内のページにそれぞれ書き込み、3ページ分のデータに基づいて算出されたパリティデータP1を冗長ブロックBR1内のページに書き込む。このとき、各ブロックの各ページには、当該ページに書き込まれるデータに対応する誤り訂正符号も書き込まれる。データD1,D2及びD3並びにそれらのデータに基づいて算出されたパリティデータP1は、データブロックBD1,BD2及びBD3並びに冗長ブロックBR1内の同一番号のページに書き込まれる。つまり、データブロックBD1,BD2及びBD3内のページ1にそれぞれ書き込まれる3ページ分のデータに基づいたパリティデータは冗長ブロックBR1内のページ1に書き込まれる。同様に、3個のデータブロック内のページ2にそれぞれ書き込まれる3ページ分のデータに基づいたパリティデータは冗長ブロック内のページ2に書き込まれ、以下同様の組み合わせでデータとパリティデータが書き込まれる。
【0028】
この後、メモリコントローラ10は、データブロックBD1,BD2及びBD3のそれぞれに正常にデータが書き込まれたか否かを判定する。具体的には、メモリコントローラ10は、まず、各データブロックの各ページに書き込まれたデータ及び対応する誤り訂正符号を読み込む。そして、メモリコントローラ10は、各データブロックについて、当該データブロックの全てのページについてデータに誤りがないとき又はデータに誤りはあるが誤り訂正符号により誤りを訂正できるときは、当該データブロックに正常にデータが書き込まれたと判定し、少なくとも1つのページについてデータに誤りがあり且つ誤り訂正符号による訂正ができないとき(つまり、誤り訂正符号の誤り訂正能力を超える誤りが生じているとき)は、当該データブロックには正常にデータが書き込まれていないと判定する。
【0029】
図5を参照しながら、いずれかのデータブロックに正常にデータが書き込まれていない場合のメモリコントローラ10の動作の概要を説明する。
図5では、データブロックBD2には正常にデータが書き込まれておらず、データブロックBD1,BD3及び冗長ブロックBR1には正常にデータが書き込まれている。正常にデータが書き込まれていないデータブロックを、以下ではエラーブロックという。まず、
図5の(1)に示すように、メモリコントローラ10は、エラーブロックであるデータブロックBD2をグループG1から離脱させる。
【0030】
次に、
図5の(2)に示すように、メモリコントローラ10は、新たなブロックをグループG1に追加し、データブロックに割り当てる(このブロックをデータブロックBD4とする)。
【0031】
次に、
図5の(3)に示すように、メモリコントローラ10は、正常にデータが書き込まれたデータブロックBD1,BD3及び冗長ブロックBR1からデータを読み出し、エラーブロックであるデータブロックBD2に本来書き込まれるべきデータを復旧する。具体的には、冗長ブロックBR1に書き込まれたパリティデータが水平パリティである場合、データブロックBD1,BD3及び冗長ブロックBR1のそれぞれから読み出した3ページ分のデータの排他的論理和を算出することにより、エラーブロックであるデータブロックBD2に本来書き込まれるべき1ページ分のデータを復旧できる。つまり、データブロックBD2へのデータ書き込み時に誤り訂正符号の誤り訂正能力を超える誤りが発生しても、冗長ブロックBR1を利用して誤り訂正をすることができる。
【0032】
メモリコントローラ10は、新たなデータブロックBD4に復旧したデータをページ単位で書き込む。また、メモリコントローラ10は、データブロックBD2内の各ページに書き込まれたデータのうち、正常に書き込まれたデータについては、そのままのデータをページ単位で新たなデータブロックBD4に書き込む。そしてメモリコントローラ10は、データブロックBD4に正常にデータが書き込まれたか否かを判定する。データブロックBD4にも正常にデータが書き込まれなかった場合、メモリコントローラ10は、再度
図5に示す動作を繰り返す。データブロックBD4に正常にデータが書き込まれた場合、メモリコントローラ10は、次に述べる
図6に示す動作を行う。
【0033】
図6を参照しながら、全てのデータブロックに正常にデータが書き込まれた場合のメモリコントローラ10の動作の概要を説明する。このとき、
図6に示すように、メモリコントローラ10は、冗長ブロックBR1をグループG1から離脱させる。グループG1から離脱した冗長ブロックBR1は、データ保存のために使用されていない空きブロックとなる。
【0034】
以上、メモリコントローラ10によるフラッシュメモリ制御方法を概略的に説明した。メモリコントローラ10によれば、保存すべきデータの書き込み時に生じる誤りが誤り訂正符号の誤り訂正能力を超えても、冗長ブロックを利用して誤り訂正をすることができるので、高い誤り訂正能力を実現できる。また、保存すべきデータが全て正常に書き込まれたときには、冗長ブロックをグループから離脱させるので、フラッシュメモリ2の空き容量を確保でき、容量効率がよい。
【0035】
なお、1グループあたりのデータブロックの数及び冗長ブロックの数は、データの復旧能力と容量効率とのバランスを考慮して定められる。例えば、冗長ブロックの数が1であるとき、1グループあたりのデータブロックの数が多いほど容量効率はよくなる。しかし、1グループあたりのデータブロックの数が多いほど、1グループあたりのエラーブロックの発生率が高くなるので、データの復旧能力は低くなる。冗長ブロックの数より多くのエラーブロックが発生すると、データの復旧ができなくなるからである。なお、データの復旧はページ単位で行われるため、組み合わせられているページにおいて、正常にデータが書き込まれていないページの数が冗長ブロックの数より多くなければ、データを復旧することができる。
【0036】
再び
図1を参照し、メモリコントローラ10の構成を説明する。メモリコントローラ10は、メモリインタフェース11と制御回路12とRAM13とROM14とホストインタフェース15とを備える。
【0037】
メモリインタフェース11は、フラッシュメモリ2と通信するためのインタフェースである。メモリインタフェース11は、例えばONFI(Open NAND Flash Interface)規格に準拠したメモリインタフェースである。
【0038】
制御回路12は、ホストインタフェース15を介してホストシステム3とデータの送受信をし、メモリインタフェース11を介してフラッシュメモリ2を制御する。制御回路12は、CPU(Central Processing Unit:中央演算装置)と周辺回路とを備える。CPUがROM14に格納された制御プログラムを読み込んで実行することにより、後述の各機能部の機能が実現される。
【0039】
RAM13は、前述の制御プログラムをCPUが実行するために必要な作業用データ、ホストシステム3から受信したデータ、フラッシュメモリ2から読み込んだデータなどを一時的に格納する。つまり、RAM13はバッファメモリとして機能する。RAM13は特に、後述のグループ管理テーブルを格納する。RAM13は例えば、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)などの、高速にアクセス可能な揮発性メモリである。RAM13は、本発明に係る記憶手段の一例である。
【0040】
ROM14は、前述の制御プログラムを格納する。ROM14は、例えばPROM(Programmable Read-Only Memory)、EEPROM(Electrically Erasable Programmable Read-Only Memory)などである。
【0041】
ホストインタフェース15は、ホストシステム3と通信するためのインタフェースである。ホストインタフェース15は、例えばSATA(Serial Advanced Technology Attachment)規格に準拠したインタフェース、又はNVMe(Non-Volatile Memory Express)規格に準拠したインタフェースなどである。
【0042】
図7を参照しながら、制御回路12のCPUがROM14に格納された制御プログラムを読み込んで実行することにより実現される制御回路12の各機能部を説明する。制御回路12は、機能的構成として、データ準備部121とグループ管理部122と冗長データ作成部123と書き込み部124とリードチェック部125と復旧部126とを備える。
【0043】
データ準備部121は、前述の
図4に示すように、各ブロックに保存すべきデータをページ単位で準備する。そして、ブロック内の各ページにページ単位のデータが後述の書き込み部124により順次書き込まれる。例えば、データ準備部121は、ホストシステム3から書き込み要求があったデータ(ホストシステム3から受信したデータ)を、ページ単位で区切ってRAM13に格納することにより、保存すべきデータをページ単位で準備する。そのほか、ホストシステム3からのデータではないものの、管理の都合上新たにフラッシュメモリ2に書き込むべきデータが生じた場合には、当該データをページ単位で準備する。
【0044】
グループ管理部122は、フラッシュメモリ2内の複数のブロックでグループを構成し、グループを構成する複数のブロックをデータブロックと冗長ブロックとに割り当てる。具体的には、前述の
図3に示すように、グループ管理部122は、フラッシュメモリ2内の4つのブロックで1つのグループを構成し、グループを構成する4つのブロックを3つのデータブロックと1つの冗長ブロックとに割り当てる。また、グループ管理部122は、前述の
図6に示すように、グループ内の全てのデータブロックに正常にデータが書き込めたとき、当該グループに属する冗長ブロックをグループから離脱させる。また、グループ管理部122は、前述の
図5に示すように、グループ内のデータブロックにエラーブロックがあるとき、当該エラーブロックをグループから離脱させ、新たなブロックをグループに追加してデータブロックに割り当てる。グループ管理部122は、本発明に係るグループ管理手段の一例である。
【0045】
また、グループ管理部122は、RAM13に格納されたグループ管理テーブルに、グループとブロックとの対応関係を示す情報と、データブロック及び冗長ブロックの割り当てを示す情報とを書き込む。グループ管理テーブルは、例えば
図8に示すものとなる。
図8に示す各行がそれぞれのグループを示す。例えば、
図8に示すグループ管理テーブルから、ブロックa,b,f及びdが1つのグループを構成していることがわかり、ブロックa,b及びfがデータブロックに割り当てられ、ブロックdが冗長ブロックに割り当てられていることがわかる。グループ管理部122は、このような形式でグループ管理テーブルに書き込むことにより、グループとブロックとの対応関係を示す情報と、データブロック及び冗長ブロックの割り当てを示す情報とをグループ管理テーブルに書き込む。
【0046】
冗長データ作成部123は、前述の
図4に示すように、各データブロック内のページに書き込まれるデータをまたいでパリティを求め、冗長データであるパリティデータを作成する。前述のとおり、例えば、冗長データ作成部123は、各データブロック内のページに書き込まれるデータの排他的論理和を算出して得られる水平パリティをパリティデータとする。各データブロック内のページに書き込まれるデータは、データ準備部121がページ単位で準備した保存すべきデータであるので、冗長データ作成部123は、保存すべきページ単位のデータに基づいてページ単位のパリティデータ(冗長データ)を作成する、といえる。
【0047】
書き込み部124は、前述の
図4に示すように、データ準備部121がページ単位で準備したデータを同一のグループに属する各データブロック内のページに書き込み、冗長データ作成部123が作成したパリティデータを上記のグループに属する冗長ブロック内のページに書き込む。また、書き込み部124は、前述の
図5に示すように、後述の復旧部126が復旧したデータを、グループ管理部122が新たに上記のグループに割り当てたデータブロック内のページに書き込む。また、書き込み部124は、RAM13に格納されたグループ管理テーブルを参照して、データの書き込み対象となるデータブロックと冗長ブロックとを特定する。書き込み部124は、本発明に係る書き込み手段の一例である。
【0048】
リードチェック部125は、書き込み部124によりデータが書き込まれたブロックについて、正常にデータが書き込まれたか否かを判定する。具体的には、まず、リードチェック部125は、ブロックからページ単位でデータ及び対応する誤り訂正符号を読み込む。そして、リードチェック部125は、全てのページについてデータに誤りがないとき又はデータに誤りはあるが誤り訂正符号により誤りを訂正できるときは、当該ブロックに正常にデータが書き込まれたと判定し、データに誤りがあり且つ誤り訂正符号による訂正ができないときは、当該ブロックには正常にデータが書き込まれていないと判定する。以下、リードチェック部125がブロックからデータを読み込んで正常にデータが書き込まれたか否かを判定することを、「リードチェックする」という。
【0049】
復旧部126は、前述の
図5に示すように、エラーブロックと同一のグループに属する他のデータブロックに正常に書き込まれたデータと、当該グループに属する冗長ブロックに正常に書き込まれたパリティデータとに基づいて、エラーブロックに正常に書き込まれるべきデータをページ単位で復旧する。つまり、復旧部126は、エラーブロックが属するグループを構成する複数のブロックに正常に書き込まれたデータに基づいて、エラーブロックに正常に書き込まれるべきデータをページ単位で復旧する、といえる。復旧部126は、本発明に係る復旧手段の一例である。
【0050】
次に、
図9を参照しながら、メモリコントローラ10によるデータ保存の動作の一例を説明する。
図9に示す動作は、例えば制御回路12のCPUがROM14に格納された制御プログラムを読み込んで実行し、起動時に行われるべき処理が終了した後に開始される。なお、実際のデータ保存の動作は、ホストシステム3から書き込み要求があったときに(ホストシステム3から書き込みコマンドを受け取ったときに)開始される。
【0051】
メモリコントローラ10の制御回路12のグループ管理部122は、フラッシュメモリ2内の複数のブロックでグループを構成し、グループを構成する複数のブロックをデータブロックと冗長ブロックとに割り当てる(ステップS101)。また、このとき、グループ管理部122は、グループ管理テーブルに、グループとブロックとの対応関係を示す情報と、データブロック及び冗長ブロックの割り当てを示す情報とを書き込む。
【0052】
制御回路12のデータ準備部121は、保存すべきデータを準備する(ステップS102)。前述のとおり、データ準備部121は、各ブロックに保存すべきデータをページ単位で準備する。
【0053】
制御回路12の冗長データ作成部123は、ステップS102にて準備したページ単位のデータをまたいでパリティを算出し、冗長データであるパリティデータを作成する(ステップS103)。
【0054】
制御回路12の書き込み部124は、ステップS102にてページ単位で準備したデータを各データブロック内のページに書き込み、ステップS103にて作成したパリティデータを冗長ブロック内のページに書き込むことにより、グループ内の各ブロック内のページにデータを書き込む(ステップS104)。
【0055】
制御回路12は、各ブロック内の全てのページにデータが書き込まれるまで(ステップS105:No)、ステップS102~ステップS104の動作を繰り返す。
【0056】
各ブロック内の全てのページにデータが書き込まれると(ステップS105:Yes)、制御回路12のリードチェック部125は、ステップS104にてデータが書き込まれたデータブロックについてリードチェックを行い、データブロックにエラーブロックがあるか否かを判定する(ステップS106)。
【0057】
エラーブロックがあるとき(ステップS106:Yes)、グループ管理部122は、当該エラーブロックをグループから離脱させる(ステップS107)。
【0058】
グループ管理部122は、新たなブロックをグループに追加してデータブロックに割り当てる(ステップS108)。
【0059】
なお、ステップS107及びステップS108において、グループ管理部122は、上記の離脱及び追加に対応してグループ管理テーブルを更新する。
【0060】
制御回路12の復旧部126は、他のデータブロックに正常に書き込まれたデータと、冗長ブロックに正常に書き込まれたパリティデータとに基づいて、エラーブロックに正常に書き込まれるべきデータをページ単位で復旧する(ステップS109)。
【0061】
書き込み部124は、エラーブロック内の各ページに書き込まれたデータのうち、正常に書き込まれたデータについては、そのままのデータを、正常に書き込まれていないデータについては、ステップS109にて復旧したデータを、ステップS108にてグループに追加されデータブロックに割り当てられた新たなブロック内のページに書き込む(ステップS110)。
【0062】
制御回路12は、新たなブロック内の全てのページにデータが書き込まれるまで(ステップS111:No)、ステップS109及びステップS110の動作を繰り返す。
【0063】
新たなブロック内の全てのページにデータが書き込まれると(ステップS111:Yes)、ステップS106に戻り、リードチェック部125はステップS110にてデータが書き込まれた新たなブロックをリードチェックし、エラーブロックがあるか否か判定する(つまり、当該新たなブロックがエラーブロックであるか否か判定する)。
【0064】
エラーブロックがないとき(ステップS106:No)、グループ管理部122は、冗長ブロックをグループから離脱させる(ステップS112)。そして制御回路12は、ステップS101からの動作を繰り返す。
【0065】
なお、上記の説明は、正常にデータが書き込まれていないページが組み合わせられたページ内に2以上存在しないことを前提としている。正常にデータが書き込まれていないページが組み合わせられたページ内に2以上存在する場合は、データを復旧することができないので、制御回路12は、例えば、致命的なエラーが生じたことを示す情報をホストシステム3に通知する。
【0066】
以上、実施の形態1に係るフラッシュメモリシステム1を説明した。実施の形態1に係るフラッシュメモリシステム1によれば、フラッシュメモリ内の複数のブロックでグループを構成し、グループを構成する複数のブロックをデータブロックと冗長ブロックとに割り当て、データブロック内のページにデータを書き込むときに、併せてパリティデータ(冗長データ)を冗長ブロック内のページに書き込む。そのため、ページ単位でパリティデータ(冗長データ)を利用した誤り訂正をすることができるので、高い誤り訂正能力を実現できる。さらに、データが正常に書き込めたときには、冗長ブロックをグループから離脱させることにより、フラッシュメモリ2の空き容量を確保することができる。したがって、実施の形態1に係るフラッシュメモリシステム1によれば、容量効率よく高い誤り訂正能力を実現できる。
【0067】
なお、上記の説明では、ページ単位でパリティデータ(冗長データ)を作成し、そのパリティデータ(冗長データ)によりページ単位でデータ復旧を行ったが、そのパリティデータ(冗長データ)の作成とデータ復旧は、誤り訂正符号による誤り訂正が行われるデータサイズ単位で行われてもよい。なお、誤り訂正符号の生成及び誤り訂正符号による誤り訂正は、512バイト(1セクタ)単位、1024バイト(2セクタ)単位又は、2048バイト(4セクタ)単位等で行われてもよい。例えば、1ページに8セクタのデータが書き込まれるフラッシュメモリにおいて、2セクタ単位で誤り訂正符号の生成及び誤り訂正符号による誤り訂正を行う場合、パリティデータ(冗長データ)の作成とデータ復旧も2セクタ単位で行われる。つまり、データブロック内の各ページに書き込まれるデータを4分割したデータサイズで、パリティデータ(冗長データ)の作成とデータ復旧が行われる。
【0068】
(実施の形態1の変形例)
実施の形態1では、1つのグループにつきデータブロックを3つ割り当てるものとしたが、割り当てるデータブロックの数は2以上であればいずれでもよい。グループに割り当てるデータブロックの数によらず、パリティデータは、各データブロックに書き込むべきデータをまたいでパリティを求めることにより作成される。
【0069】
(実施の形態2)
実施の形態1に係るフラッシュメモリシステム1では、1つのグループにつき冗長ブロックを1つ割り当てるものとした。一方、以下に説明する実施の形態2に係るフラッシュメモリシステム1は、1つのグループにつき冗長ブロックを2つ割り当てる点が実施の形態1と異なる。実施の形態2に係るフラッシュメモリシステム1は、例えば、冗長ブロックが1つのみでは書き込み時に生じる誤りについての誤り訂正能力が不足するほどに誤りが発生しやすい特性を有するフラッシュメモリ2を制御する場合に好適である。
【0070】
実施の形態2に係るフラッシュメモリシステム1の各構成は、
図1及び
図7に示すものと同様であるため、詳細な説明を省略する。動作についても実施の形態1と概ね同様であるため説明を省略する。以下では、実施の形態1と異なる点の概要を説明する。
【0071】
図10に示すように、グループ管理部122は、1つのグループに3つのデータブロックと2つの冗長ブロックとを割り当てる。
図10に示す例では、グループG1の各ブロックのうち3つのブロックがデータブロックBD1,BD2及びBD3に割り当てられ、2つのブロックが冗長ブロックBR1及びBR2に割り当てられている。
【0072】
図11に示すように、冗長データ作成部123は、各データブロックに書き込むべきデータをまたいで2種類のパリティを算出することにより、2種類のパリティデータを作成する。
図11に示す例では、データブロックBD1,BD2及びBD3に書き込むべきデータD1,D2及びD3をまたいで水平パリティ及びガロアパリティを算出することにより、パリティデータP1及びP2を作成する。水平パリティは、実施の形態1でも述べたとおり、各データをまたいだ排他的論理和により算出される。ガロアパリティは、ガロア体におけるガロア演算を、各データをまたいで適用することにより算出される。パリティデータP1及びP2は、書き込み部124により、それぞれ冗長ブロックBR1及びBR2に書き込まれる。
【0073】
書き込み後のデータブロックにエラーブロックがあるときの再割り当て及びデータの復旧については、概ね実施の形態1と同様である。ただし、実施の形態2では、2つの冗長ブロックに2種類のパリティデータが書き込まれているため、データブロックのうち2つがエラーブロックであっても、復旧部126は、他のデータブロックに書き込まれたデータと2種類のパリティデータとに基づいてデータを復旧できる。
【0074】
書き込み後のデータブロックにエラーブロックがないとき、
図12に示すように、グループ管理部122は、2つの冗長ブロックのうち一方をグループから離脱させる。書き込み後にも冗長ブロックを1つグループに残すことにより、のちにデータブロックがエラーブロックとなってしまった場合にもデータを復旧することが可能となる。
図12に示す例では、グループ管理部122は、ガロアパリティが書き込まれた冗長ブロックBR2をグループG1から離脱させている。ガロアパリティを使用したデータの復旧は、水平パリティを使用したデータの復旧と比べて処理負担が大きいため、ガロアパリティが書き込まれた冗長ブロックを優先的に離脱させることが好ましい。
【0075】
以上、実施の形態2に係るフラッシュメモリシステム1を説明した。実施の形態2に係るフラッシュメモリシステム1によれば、実施の形態1の場合と同様に、高い誤り訂正能力を実現できる。また、実施の形態1の場合と異なり、書き込み後にも冗長ブロックをグループに1つ残すので、のちにデータブロックがエラーブロックとなってしまった場合にもデータを復旧することが可能となる。また、書き込み後には冗長ブロックを1つ離脱させるので、フラッシュメモリ2の空き容量を確保することができる。したがって、実施の形態2に係るフラッシュメモリシステム1によれば、実施の形態1の場合と同様に、容量効率よく高い誤り訂正能力を実現できる。特に、実施の形態2に係るフラッシュメモリシステム1は、誤りが発生しやすい特性を有するフラッシュメモリ2を制御する場合において好適である。
【0076】
(実施の形態2の変形例)
実施の形態2では、書き込み後に冗長ブロックを1つグループに残すものとしたが、全ての冗長ブロックをグループから離脱させてもよい。この変形例は、例えば、フラッシュメモリ2の特性が、書き込み時に生じる誤りについては冗長ブロック1つでは誤り訂正能力が不足するものの、書き込みののちに生じる誤りについては冗長ブロックがなくとも誤り訂正符号のみで誤り訂正能力が足りるような特性である場合に好適である。
【0077】
実施の形態2では、割り当てる冗長ブロックの数を2としたが、3以上であってもよい。このとき、3種類以上のパリティデータが必要となるが、例えば、ガロア演算の方法を複数用意することにより複数種類のガロアパリティを算出できるので、3種類以上のパリティデータを作成することができる。
【0078】
また、実施の形態1の変形例と同様、実施の形態2においても、割り当てるデータブロックの数は2以上であればいずれでもよい。
【0079】
(実施の形態3)
実施の形態1及び2においては、冗長データは、データブロックに書き込まれる各データをまたいでパリティを算出することにより作成されるパリティデータであった。一方、以下に説明する実施の形態3においては、冗長データはパリティデータではなく、データブロックに書き込まれるデータと同一のデータである。
【0080】
実施の形態3においては、
図14に示すように、1つのグループには1つのデータブロックと1以上の冗長ブロックとが割り当てられる。
図14では、1つのグループG1に1つのデータブロックBD1と2つの冗長ブロックBR1及びBR2とが割り当てられている。1つのグループに割り当てられる冗長ブロックの数は1以上であればいずれでもよいが、書き込み時に生じる誤りについての誤り訂正能力が十分となることが好ましい。したがって、割り当てられる冗長ブロックの数は、例えばフラッシュメモリ2の特性に基づいて定められる。
【0081】
実施の形態3に係るフラッシュメモリシステム1の構成は、概ね
図1に示すものと同様であるが、
図13に示すように、制御回路12の機能的構成が実施の形態1と異なる。実施の形態3に係る制御回路12は、冗長データ作成部123及び復旧部126を備えず、グループ管理部122に代えてグループ管理部122Aを備え、書き込み部124に代えて書き込み部124Aを備える点が実施の形態1と異なる。
【0082】
書き込み部124Aは、
図15に示すように、冗長ブロックに冗長データを書き込むとき、データ準備部121が準備したデータをそのまま冗長ブロックに書き込む点が実施の形態1と異なる。したがって、冗長ブロックには、データブロックに書き込まれるデータと同一のデータが冗長データとして書き込まれる。
図15に示す例では、データブロックBD1と冗長ブロックBR1及びBR2とに同一のデータD1が書き込まれている。
【0083】
グループ管理部122Aは、
図16に示すように、データブロックにエラーブロックがあるとき、当該エラーブロックをグループから離脱させ、正常にデータが書き込まれた冗長ブロックの1つをデータブロックに再割り当てする。つまり、グループ管理部122Aは、新たなブロックをグループに追加してデータブロックに割り当てるのではなく、冗長ブロックの1つをデータブロックに再割り当てする点が実施の形態1と異なる。
図16に示す例では、冗長ブロックBR1がデータブロックに再割り当てされている。エラーブロックに正常に書き込まれるべきデータと同一のデータが冗長データとして冗長ブロックに書き込まれているため、実施の形態1と異なり、データを復旧して新たなブロックに書き込む必要がない。
【0084】
グループ管理部122Aが上記の離脱及び再割り当てに応じてグループ管理テーブルを更新することにより、グループ管理テーブルは例えば
図17に示すように変化する。
図17の上段に示すように、最初は、1つのグループにデータブロックであるブロックaと、冗長ブロックであるブロックb及びfとが割り当てられている。ブロックaがエラーブロックであるとき、グループ管理部122Aは、ブロックaをグループから離脱させ、冗長ブロックであるブロックbをデータブロックに再割り当てするので、グループ管理テーブルは
図17の下段に示すものとなる。
【0085】
図18を参照しながら、実施の形態3に係るメモリコントローラ10によるデータ保存の動作の一例について、
図9にて示される実施の形態1における動作と異なる点を説明する。
【0086】
図18に示す各ステップの動作のうち、ステップS201,S202,S204,S205及びS206の動作は、
図9に示すステップS101,S102,S105,S106及びS107の動作と同様であるため説明を省略する。
【0087】
ステップS203にて、書き込み部124Aは、ステップS201にて準備したデータをページ単位でデータブロックと冗長ブロックとに書き込む。同一のデータが書き込まれる点が、
図9に示すステップS104と異なる。
【0088】
ステップS207にて、グループ管理部122Aは、冗長ブロックの1つをデータブロックに再割り当てする。そして制御回路12は、ステップS201からの動作を繰り返す。
【0089】
エラーブロックがない場合(ステップS205:No)、ステップS208にて、グループ管理部122Aは、冗長ブロックを1つグループから離脱させる。そして制御回路12は、ステップS201からの動作を繰り返す。
【0090】
ステップS207及びステップS208の動作により、エラーブロックがある場合(ステップS205:Yes)、ない場合(ステップS205:No)のいずれについても、最終的に1つのグループに割り当てられるブロックは、1つのデータブロックと1つの冗長ブロックとなる。
【0091】
以上、実施の形態3に係るフラッシュメモリシステム1を説明した。実施の形態3に係るフラッシュメモリシステム1によれば、実施の形態1の場合と同様に、高い誤り訂正能力を実現できる。また、書き込み後には冗長ブロックを1つ離脱させるので、フラッシュメモリ2の空き容量を確保することができる。したがって、実施の形態3に係るフラッシュメモリシステム1によれば、実施の形態1の場合と同様に、容量効率よく高い誤り訂正能力を実現できる。
【0092】
また、エラーブロックがあるとき、実施の形態1と異なり、エラーブロックに正常に書き込まれるべきデータと同一のデータが書き込まれた冗長ブロックをデータブロックに再割り当てするので、再度のデータ書き込みが不要となる。また、実施の形態1と異なり、パリティを算出する必要がないので、演算負荷が少ない。
【0093】
(実施の形態3の変形例)
実施の形態3では、データが正常に書き込まれた後、冗長ブロックを1つ離脱させるものとしたが、2以上の冗長ブロックを離脱させてもよい。例えば、実施の形態3と同様に1つのグループに1つのデータブロックと2つの冗長ブロックとが割り当てられる場合に、全ての冗長ブロックを離脱させてもよい。この変形例は、例えば、フラッシュメモリ2の特性が、書き込み時に生じる誤りについては冗長ブロック1つでは誤り訂正能力が不足するものの、書き込みののちに生じる誤りについては冗長ブロックがなくとも誤り訂正符号のみで誤り訂正能力が足りるような特性である場合に好適である。
【0094】
(その他の変形例)
実施の形態1及び2では、パリティデータを冗長データとしたが、実施の形態3のように、データブロックに書き込まれるデータと同一のデータを冗長データとしてもよい。このとき、1のグループには1のデータブロックと1以上の冗長ブロックとを割り当てるようにする。この場合、実施の形態3と異なり、冗長ブロックをデータブロックに再割り当てしないので、データ復旧の際に再度のデータ書き込みが必要となるが、パリティを算出する必要がないので、実施の形態1及び2よりも演算負荷が少ない。
【0095】
上述の各実施の形態では、フラッシュメモリ2はNAND型フラッシュメモリであるものとしたが、NOR型フラッシュメモリであってもよい。NOR型フラッシュメモリは、NAND型フラッシュメモリと比べて誤りは発生しにくい特性があるものの、微細化、大容量化に伴い誤り発生率が高くなる傾向にあり、誤り訂正能力が求められているからである。
【0096】
上述の各実施の形態では、制御回路12に設けられたCPUが制御プログラムを実行することにより制御回路12の各機能部が実現されるものとした。しかし、制御回路12は、CPUに代えてASIC(Application Specific Integrated Circuit:特定用途向け集積回路)を備え、当該ASICにより制御回路12の各機能部を実現してもよい。あるいは、制御回路12はCPUとASICとを備え、制御回路12の一部の機能を当該ASICにより実現してもよい。例えば、誤り訂正符号の算出、誤り訂正符号による誤り訂正、ガロアパリティの算出、ガロアパリティを使用したデータ復旧などの処理は負荷が高い処理であるため、当該処理に特化したASICを制御回路12に設け、当該ASICがこれらの処理を実行してもよい。
【符号の説明】
【0097】
1 フラッシュメモリシステム
10 メモリコントローラ
11 メモリインタフェース
12 制御回路
121 データ準備部
122,122A グループ管理部
123 冗長データ作成部
124,124A 書き込み部
125 リードチェック部
126 復旧部
13 RAM
14 ROM
15 ホストインタフェース
2 フラッシュメモリ
3 ホストシステム
AD データ領域
AR 冗長領域
BD1,BD2,BD3,BD4 データブロック
BR1,BR2 冗長ブロック
D1,D2,D3 データ
G1 グループ
P1,P2 パリティデータ