(57)【要約】【課題】リフレッシュの回数を削減し、不揮発性半導体メモリの長寿命化を図る。【解決手段】複数の通常の物理ブロックと少なくとも１つの不良物理ブロックまたはダミーの物理ブロックである非通常物理ブロックによって論理ブロックを構築し、書き換え回数が所定値より少ないリードオンリーデータを前記構築した論理ブロックの非通常物理ブロックに書き込み、前記リードオンリーデータ以外の通常データと、前記リードオンリーデータおよび前記通常データの符号化結果とを前記論理ブロックの前記複数の通常の物理ブロックに書き込み、前記論理ブロック内のデータを読み出す際、前記通常データおよび前記符号化結果を用いて前記リードオンリーデータを復元する。【選択図】  図１
2014052978.tif 000002
【特許請求の範囲】
【請求項１】
データ消去の単位である物理ブロックを複数個有する不揮発性半導体メモリの制御方法において、
複数の通常の物理ブロックと少なくとも１つの不良物理ブロックまたはダミーの物理ブロックである非通常物理ブロックによって論理ブロックを構築する第１ステップと、
書き換え回数が所定値より少ないリードオンリーデータを前記構築した論理ブロックの非通常物理ブロックに書き込み、前記リードオンリーデータ以外の通常データと、前記リードオンリーデータおよび前記通常データの符号化結果とを前記論理ブロックの前記複数の通常の物理ブロックに書き込む第２ステップと、
前記論理ブロック内のデータを読み出す際、前記通常データおよび前記符号化結果を用いて前記リードオンリーデータを復元する第３ステップと、
を備えることを特徴とする不揮発性半導体メモリの制御方法。
【請求項２】
前記第１ステップによって構築される論理ブロックの個数は、前記リードオンリーデータの個数に対応することを特徴とする請求項１に記載の不揮発性半導体メモリの制御方法。
【請求項３】
前記第２ステップでは、前記符号化結果を、チャネル間に跨った前記リードオンリーデータおよび前記通常データを用いて符号化結果を導出するか、チップ間に跨った前記リードオンリーデータおよび前記通常データを用いて符号化結果を導出することを特徴とする請求項１に記載の不揮発性半導体メモリの制御方法。
【請求項４】
前記第２のステップでは、複数の論理ブロックの各非通常物理ブロックに同じリードオンリーデータを書き込み、通常データと前記符号化結果を前記複数の論理ブロックの各複数の正常な物理ブロックに書き込む、多重化書き込みを行うことを特徴とする請求項１に記載の不揮発性半導体メモリの制御方法。
【請求項５】
第１ステップで作成された論理ブロック間でデータの移動を行う際は、移動元の非通常物理ブロックのデータが移動先の非通常物理ブロックに書き込まれるようにデータの移動を行うことを特徴とする請求項１に記載の不揮発性半導体メモリの制御方法。
【請求項６】
データ消去の単位である物理ブロックを複数個有する不揮発性半導体メモリと、
前記不揮発性半導体メモリに対し、データの書き込みおよび読み出し制御を行うコントローラとを備えるメモリシステムにおいて、
複数の通常の物理ブロックと少なくとも１つの不良物理ブロックまたはダミーの物理ブロックである非通常物理ブロックによって論理ブロックを構築する論理ブロック構築部と、
データの符号化処理および復号化処理を実行する誤り訂正処理部と、
書き換え回数が所定値より少ないリードオンリーデータを前記構築した論理ブロックの非通常物理ブロックに書き込み、前記リードオンリーデータ以外の通常データと、前記リードオンリーデータおよび前記通常データの前記誤り訂正処理部での符号化結果とを前記論理ブロックの前記複数の通常の物理ブロックに書き込む書き込み制御部と、
前記論理ブロック内のデータを読み出す際、前記誤り訂正処理部で前記通常データおよび前記符号化結果を用いて前記リードオンリーデータを復号化して復元し、この復元されたリードオンリーデータを前記通常データとともに読み出す読み出し制御部と、
備えることを特徴とするメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性半導体メモリの制御方法及びメモリシステムに関する。
【背景技術】
【０００２】
不揮発性半導体メモリの一つであるフラッシュメモリには以下の特徴がある。
１．データの上書きができない
２．ブロックに対しデータを消去して書き直すことを書き込み可能回数以上繰り返すと、そのブロックは正常な記録ができなくなる可能性が上昇する
３．書き換えずに繰り返し読み出されるデータは、読み出す際にデータの誤り量が増加しやすくなる。
【０００３】
誤り量が増加したデータについては、データの誤り量が閾値を超えた時点で、別のブロックに書き直すリフレッシュ処理を行うことで、誤り量を抑制することができるが、フラッシュメモリにとっては書き換え回数が少ないほうが望ましいので、リフレッシュ処理による書き換えについても回数を抑えられることが望ましい。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−８６１０６号公報
【特許文献２】特開２００９−１９９２４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の一つの実施形態は、リフレッシュの回数を削減し、不揮発性半導体メモリの長寿命化を図る不揮発性半導体メモリの制御方法及びメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一つの実施形態によれば、データ消去の単位である物理ブロックを複数個有する不揮発性半導体メモリの制御方法において、複数の通常の物理ブロックと少なくとも１つの不良物理ブロックまたはダミーの物理ブロックである非通常物理ブロックによって論理ブロックを構築する。書き換え回数が所定値より少ないリードオンリーデータを前記構築した論理ブロックの非通常物理ブロックに書き込み、前記リードオンリーデータ以外の通常データと、前記リードオンリーデータおよび前記通常データの符号化結果とを前記論理ブロックの前記複数の通常の物理ブロックに書き込む。前記論理ブロック内のデータを読み出す際、前記通常データおよび前記符号化結果を用いて前記リードオンリーデータを復元する。
【図面の簡単な説明】
【０００７】
【図１】図１は、ＳＳＤの内部構成例を示すブロック図である。
【図２】図２は、ＥＣＣ処理の符号化処理を説明する図である。
【図３】図３は、ＥＣＣ処理の復号化処理を説明する図である。
【図４】図４は、ＮＡＮＤフラッシュに２つの記憶エリアを定義した場合の構成例を示すブロック図である。
【図５】図５は、フル論理ブロック、欠損論理ブロックの一例を示す図である。
【図６】図６は、欠損論理ブロックへのデータの記憶の仕方を示す図である。
【図７】図７は、複数の欠損論理ブロックへのデータの記憶の仕方を示す図である。
【図８】図８は、アドレス変換テーブルを示す図である。
【図９】図９は、論理ブロック管理テーブルを示す図である。
【図１０】図１０は、バッドブロックテーブルを示す図である。
【図１１】図１１は、ＮＡＮＤフラッシュ１０のブロックを概念的に示す図である。
【図１２】図１２は、欠損論理ブロックへのリードオンリーデータ（システムデータ）の書き込みの動作手順を示すフローチャートである。
【図１３】図１３は、欠損論理ブロックへのリードオンリーデータ（ユーザデータ）の書き込みの動作手順を示すフローチャートである。
【図１４】図１４は、欠損論理ブロックでのデータの移動を概念的に示す図である。
【図１５】図１５は、欠損論理ブロックへリードオンリーデータの多重化を概念的に示す図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかる不揮発性半導体メモリの制御方法及びメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【０００９】
（第１の実施形態）
図１は、実施形態にかかるメモリシステムの構成を示すブロック図である。ここでは、メモリシステムの一例としてＳＳＤ（Solid  State  Drive）１００を例に挙げて説明するが、本実施の形態の適用対象はＳＳＤに限定しない。例えば、不揮発にデータを記憶する半導体メモリ及びコントローラを搭載したメモリカード等の補助記憶装置に対しても、本実施の形態を適用することが可能である。
【００１０】
ＳＳＤ１００は、パーソナルコンピュータなどのホスト装置１とホストインタフェース（ホストＩ／Ｆ）１５０で接続され、ホスト装置１の外部記憶装置として機能する。ＳＳＤ１００は、ホストＩ／Ｆ１５０と、ホスト装置１からリード／ライトされるデータを記憶する不揮発性半導体メモリであるＮＡＮＤ型フラシュメモリ（以下、ＮＡＮＤフラッシュと略す）１０（１０−０〜１０−４）と、ＳＳＤ１００とホスト装置１とのデータ転送制御にかかる各種制御を実行するコントローラ２０と、コントローラ２０がデータ転送のための転送データを一次格納するために使用され、例えばＤＲＡＭなどの揮発性メモリで構成されるＲＡＭ３０と、ＲＡＭ３０に対する書き込みおよび読み出し制御を実行するＲＡＭコントローラ（ＲＡＭＣ）３５と、ＮＡＮＤフラッシュ１０−０〜１０−４とＲＡＭ３０との間のデータ転送制御をＲＡＭＣ３５と協働して実行するＮＡＮＤコントローラ（ＮＡＮＤＣ）４０（４０−０〜４０−４）と、複数のＮＡＮＤフラッシュ１０−０〜１０−４に跨って分散記憶されたデータのＥＣＣ処理（誤り訂正符号化／復号化）を実行するＥＣＣ処理部５０とを備える。
【００１１】
ホスト装置１から送信されてきたデータは、コントローラ２０の制御の基に、ホストＩ／Ｆ１５０、ＲＡＭＣ３５を経由してＲＡＭ３０に一旦格納され、その後、ＲＡＭ３０から読み出されて、ＲＡＭＣ３５、ＮＡＮＤＣ４０を経由してＮＡＮＤフラッシュ１０に書き込まれる。ＮＡＮＤフラッシュ１０から読み出されたデータは、ＮＡＮＤＣ４０、ＲＡＭＣ３５を経由してＲＡＭ３０に一旦格納され、その後、ＲＡＭ３０から読み出されて、ＲＡＭＣ３５、ホストＩ／Ｆ１５０を経由してホスト装置１に転送される。
【００１２】
ＮＡＮＤフラッシュ１０は、ホスト１によって指定されたユーザデータを記憶したり、管理情報をバックアップ用に記憶したりする。ＮＡＮＤフラッシュ１０は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。ＮＡＮＤフラッシュ１０−０〜１０−４は、夫々１〜複数のメモリチップによって構成されている。各メモリチップは、データ消去の単位である物理ブロックを複数配列して構成される。また、ＮＡＮＤフラッシュ１０では、物理ページごとにデータの書き込み及びデータの読み出しが行われる。物理ブロックは、複数の物理ページによって構成されている。
【００１３】
本実施形態では、ＮＡＮＤフラッシュ１０は、並列動作可能な５個のチャネルを介してＮＡＮＤＣ４０に接続されている。すなわち、ＮＡＮＤフラッシュ１０−０〜１０−４に対して各々１つのチャネル（ｃｈ０〜ｃｈ４）を割り当て、このうち１つのチャネル（ｃｈ４とする）を、ＥＣＣ処理部５０で作成した冗長情報を書き込むためのチャネルとして割り当てて、残りのチャネル（ｃｈ０〜ｃｈ３）を、ホスト装置１から書き込みが要求されたデータを書き込むためのチャネルとして割り当てて、チャネルｃｈ０〜ｃｈ４の各ページを１つの組として誤り訂正符号を構成する。すなわち、ＮＡＮＤフラッシュ１０−０〜１０−３がデータ記憶用であり、ＮＡＮＤフラッシュ１０−４が誤り訂正符号用である。誤り訂正符号を構成するチャネルｃｈ０〜ｃｈ４の５つの物理ブロックの組を論理ブロックということとする。ＮＡＮＤフラッシュ１０−０〜１０−４は、各別のチャネルｃｈ０〜ｃｈ４を介してＮＡＮＤコントローラ（ＮＡＮＤＣ）４０−０〜４０−４に接続されており、ＮＡＮＤフラッシュ１０−０〜１０−４は、独立して並列動作することが可能である。
【００１４】
ホストＩ／Ｆ１５０は、例えばＡＴＡ（Advanced  Technology  Attachment）規格などの通信インタフェースを有し、コントローラ２０の制御にしたがってＳＳＤ１００とホスト装置１との通信を制御する。ホストＩ／Ｆ１５０は、ホスト装置１から送信されたコマンドを受信し、当該コマンドによって論理アドレス（ＬＢＡ：Logical Block Addressing）が指定されたデータの書き込みが要求されている場合、当該コマンド（ライトコマンド）をコントローラ２０に送る。また、ホストＩ／Ｆ１５０は、書き込み要求されたデータをＲＡＭ３０に送る。
【００１５】
ＲＡＭ３０は、データ転送用の一時記憶部として使用される。すなわち、ホスト装置１から書込み要求があったデータをＮＡＮＤフラッシュ１０に書込む前に一時的に保存したり、ホスト装置１から読出し要求があったデータをＮＡＮＤフラッシュ１０から読出して一時的に保存したりするために使用される。また、ＲＡＭ３０は、アドレス変換テーブル３１、論理ブロック管理テーブル３２、バッドブロックテーブル３３などの管理情報を記憶、更新するための記憶領域と、ＮＡＮＤフラッシュ１０からリードされたデータを一時記憶するなどのための作業領域を有する。アドレス変換テーブル３１、論理ブロック管理テーブル３２、バッドブロックテーブル３３などの管理情報は、ＮＡＮＤフラッシュ１０に記憶されている不揮発管理テーブルが起動時などに展開されたものである。
【００１６】
ＮＡＮＤＣ４０−０〜４０−４は、ＮＡＮＤフラッシュ１０−０〜１０−４とＲＡＭ３０との間のデータ転送制御を実行するものであり、ＤＭＡコントローラと、ＮＡＮＤインタフェース（Ｉ／Ｆ）などを備える。ＤＭＡコントローラは、ＲＡＭ３０とＮＡＮＤＩ／Ｆとの間のデータ転送制御をＤＭＡ（Direct  Memory  Access）方式に従って行う。
【００１７】
ＥＣＣ処理部５０は、ＲＡＭ３０に一時記憶されたライトデータに対し、誤り訂正符号化処理を実行し、ライトデータをＮＡＮＤＣ４０−０〜４０−３に出力し、誤り訂正符号をＮＡＮＤＣ４０−４に出力する。ＮＡＮＤＣ４０−０〜４０−４は、入力されたデータ、誤り訂正符号をＮＡＮＤフラッシュ１０−０〜１０−４にライトする。また、ＥＣＣ処理部５０は、ＮＡＮＤＣ４０−０〜４０−４を介してＮＡＮＤフラッシュ１０−０〜１０−４からリードされたデータ、誤り訂正符号を用いて誤り訂正復号化処理を実行し、リードデータをＲＡＭ３０に出力する。
【００１８】
誤り訂正符号化処理の一例を、図２に示す。誤り訂正符号化処理においては、独立動作可能な複数のＮＡＮＤフラッシュ１０−０〜１０−３に分散記憶されるデータ、別言すれば複数のメモリチップに分散記憶されるデータを用いて誤り訂正符号を作成する。図２では、ＥＣＣ処理部５０は、チャネルｃｈ０〜ｃｈ３への各書き込み対象のページサイズのデータに対して、オフセットが等しい位置の例えばバイト同士で誤り訂正符号を計算する。この計算結果は冗長情報として、ＥＣＣ処理部５０からチャネルｃｈ４のＮＡＮＤＣ４０−４に転送され、チャネルｃｈ４のＮＡＮＤＣ４０−４によってＮＡＮＤフラッシュ１０−４の上述のオフセットが等しい位置に書き込まれる。即ち、チャネルｃｈ０〜ｃｈ４において、ページ内のオフセットが等しい位置のバイト同士によって誤り訂正符号が構成される。
【００１９】
このような誤り訂正符号化の際に、各チャネルｃｈ０〜ｃｈ３からそれぞれ１つの物理ブロックを選択し、選択した各物理ブロックから１つのページを選択し、選択した各ページのオフセットが等しい位置の例えばバイト同士（同一カラム）から誤り訂正符号を計算するようにしてもよいし、各チャネルｃｈ０〜ｃｈ３からそれぞれ複数個の物理ブロックを選択し、選択した各物理ブロックから１つのページを選択し、選択した各ページのオフセットが等しい位置の例えばバイト同士（同一カラム）から誤り訂正符号を計算するようにしてもよい。
【００２０】
誤り訂正復号化処理の一例を、図３に示す。図３は、チャネルｃｈ３のＮＡＮＤフラッシュ１０−３に発生した故障により異常の発生したデータを復元する様子を示す図である。図３に示した復元の様子は、符号化方式としてパリティが採用された場合を示している。具体的には、訂正できない誤りの生じたデータと同一の誤り訂正符号に関連付けられたデータであって、訂正できない誤りの生じたデータに対応するチャネル以外のチャネルのＮＡＮＤフラッシュに書き込まれたデータと冗長情報（ここでは、チャネルｃｈ０、ｃｈ１、ｃｈ２に書き込まれた各データ及びチャネルｃｈ４に書き込まれた冗長情報）を読み出す。そして、ＥＣＣ処理部５０は、当該各データ及び冗長情報における同じオフセットのバイトデータを用いてチャネルｃｈ３におけるデータを復元する。なお、符号化方式としては、訂正できない誤りの生じたデータに対応するチャネル以外のチャネルのＮＡＮＤフラッシュに書き込まれたデータと冗長情報とを用いて訂正できない誤りの生じたデータを復元できるものであれば、パリティに限らず、他の任意の符号化方式を採用することにしてもよい。
【００２１】
なお、ＥＣＣ処理部５０で行う誤り訂正処理は、チャネル間を跨ったデータに限らず、チップ間を跨ったデータ、あるいは物理ブロック間を跨ったデータに対しも、誤り訂正符号を形成するようにしてもよい。すなわち、複数のブロック内のデータから誤り訂正符号を形成し、形成した誤り訂正符号を別のブロックに書き込むようにすればよい。
【００２２】
図１において、コントローラ２０は、ＮＡＮＤフラッシュ１０に記憶されたシステムプログラム（ファームウエア）と、このファームウェアを実行するプロセッサによってその機能が実現される。コントローラ２０は、論理ブロック構築部２１、リフレッシュ制御部２２、データアクセス制御部２３、ブロック管理部２４を備える。論理ブロック構築部２１、リフレッシュ制御部２２は、後述するようにして、論理ブロックの構築処理、リフレッシュ処理を実行する。
【００２３】
データアクセス制御部２３は、ＲＡＭ３０を介したＮＡＮＤフラッシュ１０へのライト処理、ＮＡＮＤフラッシュ１０からのリード処理、ＮＡＮＤフラッシュ１０でのデータ整理（コンパクション）などを実行する。コンパクション処理は、論理ブロック内の有効データを集めて別の論理ブロックに書き直すことで、新たなフリーブロック（用途未割り当ての論理ブロック）を生成する処理である。
【００２４】
ブロック管理部２４は、ブロックの使用状態（使用中であるアクティブブロックであるか未使用であるフリーブロックであるか）を管理するとともに、エラーが多いなど記憶領域として使用できないバッドブロックを識別管理する。ブロック管理部２４は、データアクセス制御部２３に対して、使用すべきフリーブロックまたはアクティブブロックを通知する。
【００２５】
ＳＳＤ１００においては、複数の物理ブロックをまとめて管理する単位として、前述した論理ブロックという仮想的なブロックを定義する。この実施の形態では、論理ブロックは、チャネル並列を行えるように物理ブロックを組み合わせる。すなわち、論理ブロックは、チャネル数の物理ブロックで構成される。図１に示したように、チャネル数＝５であれば、論理ブロックは、最大５個の物理ブロックで構成される。そして、論理ブロックに含まれる物理ページの集合（各チャネルの物理ページの集合）である論理ページ単位でデータの書き込み、読み出しを行う。
【００２６】
書き込みを行う際に、論理ブロックの組となった複数の物理ブロックのうち少なくとも１個のブロックについては、前述したように、他のブロックのデータが読めなかった場合に備え、他のブロックのデータから該当のブロックのデータを復元するための訂正符号を書き込んでおく。これにより、初期不良、または後天的不良によって物理ブロックが読み書き不能の不良ブロック（バッドブロック）になってしまった場合でも、読み出し時には論理ページの他のデータと訂正符号を利用して対象のデータを復元し、あたかも不良ブロックから通常通りデータを仮想的に読み出すことができる。
【００２７】
一方で、ＳＳＤ１００では、書き換えずに繰り返しデータを読み出すと、そのデータの誤り量が増加してしまうため、特に書き換えの必要がなくとも、誤り量の増えたデータについては別の場所に書き込みなおすリフレッシュを実行する。リフレッシュはリフレッシュ制御部２２によって行われる。リフレッシュでは、
・データリードが発生した際に、読み出せたがデータの誤り量が所定値より多いデータについてはリフレッシュ対象として、いずれ別のブロックに書き直す
・定期的にＮＡＮＤフラッシュの物理ブロックを巡回して読み出しを行い、読み出せたがデータの誤り量が多いブロックをリフレッシュ対象とする
等の処理が行われる。なお、不良ブロック上のデータはデータが壊れており、使われていないため、当然リフレッシュの対象にならない。
【００２８】
ここで、ＮＡＮＤフラッシュ１０に書かれるデータの中には、読み出しは発生するが書き換え頻度が少ないかまたは書き換えられないデータ群(以下、リードオンリーデータ群という)が存在する。リードオンリーデータ群は、例えば、次のようなデータを含む。
（１）ＳＳＤのシステム内部で管理されるシステムデータ（ファームウェア、システム情報、パスワードなど）
（２）書き換えが少ないと統計的に認識できるユーザデータ
【００２９】
統計的に書き換えが少ないと認識できるユーザデータは、例えば、各ユーザデータの書き換え回数をカウントし、カウントした書き換え回数が所定の閾値以下のユーザデータを書き換えが少ないユーザデータと認識するようにしてもよい。
【００３０】
また、図４に示すように、ＮＡＮＤフラッシュ１０に、ＮＡＮＤバッファ領域１０ａ、メインストレージ領域１０ｂから成る２つのユーザデータ記憶領域を定義し、ＮＡＮＤバッファ領域１０ａの途中で無効にされることなくメインストレージ領域１０ｂに移動されたユーザデータを書き換えが少ないユーザデータと認識するようにしてもよい。ＮＡＮＤフラッシュ１０に書き込まれるユーザデータは、先ず、ＮＡＮＤバッファ領域１０ａに書き込まれ、ＮＡＮＤバッファ領域１０ａを通過した後、メインストレージ領域１０ｂに移動される。ＮＡＮＤバッファ領域１０ａは、データの書き込み順序（ＬＲＵ：Least Recently Used）でブロックが管理されるＦＩＦＯ構造となっている。ＮＡＮＤバッファ領域１０ａに存在するデータと同一ＬＢＡのデータがＮＡＮＤバッファ領域１０ａに入力された場合、ＮＡＮＤバッファ領域１０ａ内のデータを無効化し、書き換え動作を行わない。
【００３１】
ＮＡＮＤバッファ領域１０ａに入力されたデータと同一ＬＢＡのデータについては、ブロック内で無効化し、ブロック内の全データが無効になったブロックはフリーブロックとして解放する。ＮＡＮＤバッファ領域１０ａのＦＩＦＯ管理構造の最後まで到達したブロックは、ホスト１から再書き込みされる可能性の低いデータとみなし、メインストレージ領域１０ｂの管理下に移動する。更新頻度の高いデータはＮＡＮＤバッファ領域１０ａを通過している最中に無効化され、更新頻度の低いデータだけがＮＡＮＤバッファ領域１０ａから溢れていくため、更新頻度の高いデータと低いデータとをＮＡＮＤバッファ領域１０ａで選り分けることができる。したがって、ＦＩＦＯ管理構造の最後まで到達して、メインストレージ領域１０ｂに移動されるブロック内のデータを書き換えが所定値より少ないユーザデータと認識するようにしてもよい。
【００３２】
この実施形態では、図５に示すように、正常な複数の物理ブロックのみで構成されるフル論理ブロックと、正常な複数の物理ブロックと１つの不良物理ブロックで構成される欠損論理ブロックとの二種類の論理ブロックを構築する。このような論理ブロックの構築処理は、論理ブロック構築部２１によって行われる。不良ブロックとは、エラーが多いなど記憶領域として使用できないブロックのことである。なお、欠損論理ブロックを構築する際に、不良ブロックを用いるのではなく、ダミーの物理ブロック（仮想不良ブロック）を用いるようにしてもよい。ダミーの物理ブロックを用いるとは、実際に物理ブロックを割り当てないことを意味する。
【００３３】
そして、欠損論理ブロックにデータを書き込む際は、図６に示すように、リードオンリーデータを不良ブロックに書き込み、リードオンリーデータ以外の通常データおよび訂正符号を正常な複数の物理ブロックに書き込むようにする。実際の書き込み動作としては、実際に不良ブロックに書き込みに行こうことにしてエラーを発生させてもよいし、書き込みに行くふりだけする（実際の書き込み動作は行わない）ようにしてもよく、いずれを選択してもよい。
【００３４】
リードオンリーデータを読み出す際は、論理ブロック内の他のデータおよび訂正符号を用いてリードオンリーデータの復元処理を行って読み出すことになる。不良ブロックはリフレッシュ対象ではないので、仮想的に不良ブロック位置に書き込まれたデータは、リフレッシュ対象となることはない。よって、不良ブロックに対し書き換えの発生しにくいリードオンリーデータを書き込むことで、リードオンリーデータを正常な物理ブロック上に書き込む場合に比べ、リフレッシュによるデータの書き換え頻度が低くなる。
【００３５】
なお、欠損論理ブロックにおいて、不良ブロックに組み合わせる複数の物理ブロックは、より信頼性の高い、別言すれば誤り訂正数の少ない物理ブロックを選択するほうが好ましい。
【００３６】
図７は、複数のリードオンリーデータを複数の欠損論理ブロックの不良ブロックまたは仮想不良ブロックに配置して、複数の論理ブロックを構築することを示すものである。すなわち、リードオンリーデータの総量を判別し、これらの全てのリードオンリーデータを不良物理ブロック位置に配置することを前提とすれば、予め論理ブロックを構築する際に、リードオンリーの総量分だけ不良物理ブロック（またはダミー物理ブロック）を用意して論理ブロックに含めるようにする。これにより、不良物理ブロックの位置を分散させれば、全てフル論理ブロックによって論理ブロックを構成するのに比べ、論理ブロックの数は多くなる。そして、この不良論理ブロックにリードオンリーのデータを書き込むようにすることで、リフレッシュの頻度を下げつつ全体の論理ブロック容量を見かけ上多くすることができる。
【００３７】
図８は、ＲＡＭ３０で管理されるアドレス変換テーブル３１を示すものである。アドレス変換テーブル３１には、リードオンリーのシステムデータの種類（sys1、sys2、…）を識別するためのシステムデータ識別情報、ホスト装置１から指定される論理アドレスとしてのＬＢＡまたはリードオンリーのシステムデータ識別情報に対応するデータが記憶されているＮＡＮＤフラッシュ１０上の記憶位置であるＰＢＡ（physical block address：例えば、データが記憶されている論理ブロック番号と論理ブロック内記憶位置）と、当該データが有効か無効かを示す有効／無効フラグと、当該ＬＢＡに対応するデータまたはリードオンリーのシステムデータ識別情報に対応するデータがリードオンリーデータであるか否かを示すリードオンリーデータフラグと、当該ＬＢＡに対応するデータがリードオンリーデータと組み合わされて論理ブロックを構築しているか否かを示すリードオンリー組み合わせ情報を含んでいる。
【００３８】
リードオンリーデータに関しては、ＬＢＡ「３」、「ｓｙｓ１」、「ｓｙｓ２」に示すように、ＰＢＡには、ヌルまたは不良ブロックのＰＢＡが登録される。すなわち、リードオンリーデータを不良物理ブロックに書き込む場合は、不良ブロックのＰＢＡが登録され、リードオンリーデータをダミーの物理ブロック（仮想不良物理ブロック）に書き込む場合は、ヌルが登録される。リードオンリーデータフラグは、統計的に書き換えが少ないユーザデータとして認識されたユーザデータを識別するためのフラグであり、書き換えが少ないリードオンリーのユーザデータに対応するＬＢＡの欄は、「１」となっている。リードオンリーのシステムデータについても、リードオンリーデータフラグが「１」となっている。リードオンリー組み合わせ情報については、リードオンリーのユーザデータまたはリードオンリーのシステムデータと組み合わされて論理ブロックが構築される通常データの欄が「１」となっている。
【００３９】
図９は、ＲＡＭ３０で管理される論理ブロック管理テーブル３２を示すものである。論理ブロック管理テーブル３２へのデータの登録は、主に論理ブロック構築部２１によって実行される。論理ブロック管理テーブル３２には、論理ブロック番号と、この論理ブロックを構成する複数の物理ブロックの識別情報（この実施形態では５個）を示すブロック構成情報と、論理ブロック内に配置されるデータを識別するためのブロック内データ情報と、欠損情報と、使用／未使用情報とが登録されている。ブロック構成情報には、論理ブロックを構成する５個の物理ブロックの番号が登録されている。
【００４０】
ブロック内構成情報は、論理ブロック内の５つの物理ブロック内に配置されるデータの情報（ＬＢＡ、システムデータ識別情報ｓｙｓ１，ｓｙｓ２，…、誤り訂正符号）を含む。
【００４１】
欠損情報は、欠損フラグＦｋと、欠損チャネルｃｈｋとを含む。欠損フラグＦｋは、５個の物理ブロックが全て揃っているか否か、すなわち不良物理ブロック（または仮想不良物理ブロック）が存在するか否かを識別する。欠損フラグＦｋによって論理ブロックがフル論理ブロックであるか欠損論理ブロックであるかを識別することができる。欠損チャネルｃｈｋは、不良物理ブロック（または仮想不良物理ブロック）が位置するチャネル番号を示す。
【００４２】
使用／未使用情報は、各論理ブロックが使用中であるか否か、すなわち各論理ブロックがフリーブロックであるかアクティブブロックであるかを識別する。この使用／未使用情報を使用して、ＮＡＮＤフラッシュ１０に対する書き込みの際に使用するフリーブロックを選択可能である。なお、フリーブロックは、今まで一度も書き込みが行われなかったブロック及び一旦書き込みが行われたがその後全てのデータが無効データとなったブロックの両方を含む。フリーブロックはアクティブブロックとして利用される前の所定のタイミングで消去される。
【００４３】
ＳＳＤ１００では、論理アドレス（ＬＢＡ）と物理アドレス（ＮＡＮＤフラッシュ１０の記憶位置）との関係は予め静的に決定されておらず、データの書込み時に動的に関係付けられる論物動的変換方式が採用されている。例えば、同じＬＢＡのデータを上書きする場合は、つぎのような処理が行われる。論理アドレスＡ１にブロックサイズの有効なデータが保存されており、記憶領域としてはブロックＢ１が使用されていたとする。ホスト１から論理アドレスＡ１のブロックサイズの更新データを上書きするコマンドを受信した場合、フリーブロック（ブロックＢ２とする）を１個確保し、そのフリーブロックにホスト１から受信したデータを書き込む。その後、論理アドレスＡ１とブロックＢ２を関係付ける。その結果、ブロックＢ２はアクティブブロックになり、ブロックＢ１に保存されたデータは無効になるためブロックＢ１はフリーブロックとなる。
【００４４】
図１０は、ＲＡＭ２０で管理されるバッドブロックテーブル３３を示すものである。バッドブロックテーブル３３には、製造段階からのバッドブロックである先天性バッドブロックおよび使用中にバッドブロックとなった後天性バッドブロックが登録される。バッドブロックテーブル３３には、例えば、バッドブロックを示す物理ブロック番号が登録される。なお、先天性バッドブロックは、バッドブロックテーブル３３に登録しないように管理してもよい。
【００４５】
図１１は、ＮＡＮＤフラッシュ１０内のブロックを概念的に示すものである。ＮＡＮＤフラッシュ１０内の論理ブロックには、前述したように、用途が割り当てられた論理ブロックであるアクティブブロックと、内部に有効データを含まない、用途未割り当ての論理ブロックであるフリーブロックが含まれる。フリーブロックは、正常な複数の物理ブロックのみで構成されるフルフリーブロックと、正常な複数の物理ブロックと１つの不良物理ブロック（または仮想不良物理ブロック）で構成される欠損フリーブロックからなる。フルフリーブロックは、フルフリーブロックプールＦＢＰ１にプールされ、欠損フリーブロックはフリーブロックプールＦＢＰ２にプールされる。
【００４６】
図１２は、ＳＳＤ１００の初期使用段階における書き込み動作を示すフローチャートである。リードオンリーデータとして設定されたシステムデータは、ＳＳＤ１００の出荷当初は、ＮＡＮＤフラッシュ１０の所定の管理領域に書き込まれている。
【００４７】
コントローラ２０のデータアクセス制御部２３は、書き込み命令をホスト１から受信すると（ステップＳ１００）、ホスト１から受信した書き込みデータをホストI／Ｆ１５０、ＲＡＭＣ３５を介してＲＡＭ３０に一旦記憶する。その後、データアクセス制御部２３は、データをＲＡＭ３０から読み出してＲＡＭＣ３５を介してＥＣＣ処理部５０に入力する。
【００４８】
データアクセス制御部２３は、管理領域に記憶されているシステムデータ（リードオンリーデータ）のなかに欠損論理ブロックへの再配置が行われていないシステムデータが存在するか否かを判定する（ステップＳ１１０）。ブロック管理部２４は、再配置が行われていないシステムデータが存在すると判定された場合は、フリーブロックプールＦＢＰ２に欠損フリーブロックが存在するか否かを判定し（ステップＳ１２０）、フリーブロックプールＦＢＰ２に欠損フリーブロックが存在する場合は、欠損フリーブロックをフリーブロックプールＦＢＰ２から取得し（ステップＳ１５０）、取得した欠損フリーブロックをデータアクセス制御部２３に通知する。
【００４９】
また、データアクセス制御部２３は、再配置が行われていないシステムデータ（リードオンリーデータ）をＮＡＮＤフラッシュ１０の管理領域から読み出して、ＮＡＮＤＣ４０を介してＥＣＣ処理部５０に入力する。ＥＣＣ処理部５０は、ＲＡＭ３０から入力された通常データと、システムデータ（リードオンリーデータ）に基づいて誤り訂正符号を形成する。また、データアクセス制御部２３は、取得した欠損フリーブロックの情報を論理ブロック管理テーブル３２から取得し、システムデータ（リードオンリーデータ）が欠損フリーブロックの不良物理ブロック（仮想不良物理ブロック）に配置され、通常データが欠損フリーブロックの不良物理ブロック（仮想不良物理ブロック）に配置されるように、ＥＣＣ処理部５０に対し、通常データおよびシステムデータとチャネル番号との対応関係を通知する。ＥＣＣ処理部５０は、通知された対応関係に基づいて、通常データおよびシステムデータを、通知された各所定のチャネルに対応するＮＡＮＤＣ４０−０〜４０−３に出力し、形成した誤り訂正符号をｃｈ４のＮＡＮＤＣ４０−４に出力する。これにより、図６に示すように、リードオンリーのシステムデータが欠損フリーブロックの不良ブロックに書き込まれ、通常データおよび誤り訂正符号が欠損フリーブロックの正常ブロックに書き込まれる（ステップＳ１６０）。この書き込み後、データアクセス制御部２３は、アドレス変換テーブル３１、論理ブロック管理テーブル３２を更新する。
【００５０】
データアクセス制御部２３は、ステップＳ１１０において、管理領域に記憶されているシステムデータ（リードオンリーデータ）のなかに欠損論理ブロックへの再配置が行われていないシステムデータが存在しないと判定された場合（ステップＳ１１０：Ｎｏ）、またはステップＳ１２０において、フリーブロックプールＦＢＰ２に欠損フリーブロックが存在しないと判定された場合は（ステップＳ１２０：Ｎｏ）、フルフリーブロックをフリーブロックプールＦＢＰ１から取得し（ステップＳ１３０）、取得したフルフリーブロックをデータアクセス制御部２３に通知する。また、ＥＣＣ処理部５０は、ＲＡＭ３０から入力された通常データに基づいて誤り訂正符号を形成する。ＥＣＣ処理部５０は、通常データを、各所定のチャネルＣｈ０〜Ｃｈ３に対応するＮＡＮＤＣ４０−０〜４０−３に出力し、形成した誤り訂正符号をｃｈ４のＮＡＮＤＣ４０−４に出力する。これにより、通常データおよび誤り訂正符号がフルフリーブロックの正常ブロックに書き込まれる（ステップＳ１４０）。この書き込み後、データアクセス制御部２３は、アドレス変換テーブル３１、論理ブロック管理テーブル３２を更新する。
【００５１】
このような処理を繰り返すことにより、ＮＡＮＤフラッシュ１０の所定の管理領域に書き込まれているシステムデータ（リードオンリーデータ）を、欠損論理ブロックの不良物理ブロック（仮想不良物理ブロック）に再配置する。
【００５２】
図１３は、統計的に書き換えが少ないユーザデータを識別して分類した後の、書き込み動作を示すフローチャートである。アドレス変換テーブル３１において、統計的に書き換えが少ないユーザデータに対応するＬＢＡについては、リードオンリーデータフラグが１となっている。コントローラ２０のデータアクセス制御部２３は、書き込み命令をホスト１から受信すると、ホスト１から受信した書き込みデータをホストI／Ｆ１５０、ＲＡＭＣ３５を介してＲＡＭ３０に一旦記憶する。その後、データアクセス制御部２３は、データをＲＡＭ３０から読み出してＲＡＭＣ３５を介してＥＣＣ処理部５０に入力する。ＥＣＣ処理部５０は、入力されたデータに基づいて誤り訂正符号を形成する。コントローラ２０は、書き込み命令に含まれるＬＢＡに基づき、アドレス変換テーブル３１のリードオンリーデータフラグを検索し、今回の書き込みデータにリードオンリーデータが含まれているか否かを判定し（ステップＳ２２０）、リードオンリーデータが含まれない場合は、フルフリーブロックをフリーブロックプールＦＢＰ１から取得し（ステップＳ２５０）、取得したフルフリーブロックに書き込みデータを書き込む（ステップＳ２６０）。
【００５３】
一方、コントローラ２０は、今回の書き込みデータにリードオンリーデータが含まれると判定した場合は（ステップＳ２２０：Ｙｅｓ）、フリーブロックプールＦＢＰ２に欠損フリーブロックが存在するか否かを判定し（ステップＳ２３０）、フリーブロックプールＦＢＰ２に欠損フリーブロックが存在する場合は、欠損フリーブロックをフリーブロックプールＦＢＰ２から取得し（ステップＳ２４０）、取得した欠損フリーブロックに書き込みデータを書き込む（ステップＳ２６０）。しかし、ステップＳ２３０において、コントローラ２０は、フリーブロックプールＦＢＰ２に欠損フリーブロックが存在しないと判定した場合は、フルフリーブロックをフリーブロックプールＦＢＰ１から取得し（ステップＳ２５０）、取得したフルフリーブロックに書き込みデータを書き込む（ステップＳ２６０）。この書き込み後、データアクセス制御部２３は、アドレス変換テーブル３１、論理ブロック管理テーブル３２を更新する。
【００５４】
また、上述したリフレッシュ処理やコンパクション処理の際に、欠損論理ブロック間でデータの移動が行われる際には、図１４に示すように、移動元と移動先の不良ブロック位置が異なる場合があるので、その際には、移動元の不良ブロック位置のデータが移動先の不良ブロック位置に書き込まれるようにデータの再配置を行う。これにより、常にリードオンリーデータが不良ブロック位置上に置かれるようになり、データの移動に関わらず、リフレッシュによる書き換え発生の頻度が低い状態を保つことができる。
【００５５】
また、システムデータのようにリードオンリーデータが重要なデータである場合は、図１５に示すように、必要な信頼性が得られるまで複数の欠損論理ブロックの各不良ブロックにリードオンリーデータを書き込む、多重化を行うようにしてもよい。
【００５６】
このようにこの実施形態では、全て正常な複数の物理ブロックのみで構成されるフル論理ブロックと、正常な複数の物理ブロックと１つの不良物理ブロック（またはダミー物理ブロック）で構成される欠損論理ブロックとの二種類の論理ブロックを構築し、読み出しは発生するが書き換え頻度が低いまたは書き換わらないリードオンリーデータを選別し、選別したリードオンリデータを欠損論理ブロックの不良物理ブロック（またはダミー物理ブロック）に書き込み、通常データを欠損論理ブロックの正常物理ブロックに書き込む。また、リードオンリデータと通常データとの誤り訂正の符号化結果を欠損論理ブロックに含まれる別の正常な物理ブロックに書き込む。そして、論理ブロック内のデータを読み出す際、通常データおよび符号化結果を用いてリードオンリーデータを復号化して復元し、この復元されたリードオンリーデータを通常データとともに読み出すようにする。
【００５７】
これによりこの実施形態では、リフレッシュの回数を削減し、不揮発性半導体メモリの長寿命化を図ることが可能となる。また、論理ブロックの容量を見かけ上増大させることが可能となる。
【００５８】
なお、上記実施形態では、欠損論理ブロックは、欠損が１個のみを採用したが、誤り訂正によって復元が可能であれば、欠損が２個以上の論理ブロックを採用するようにしてもよい。また、論理ブロックは、チャネル並列動作のみならず、バンクインターリーブ、プレーン倍速動作が行えるように物理ブロックを組み合わせてもよい。
【００５９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６０】
１  ホスト装置、１０  ＮＡＮＤフラッシュ、２０  コントローラ、２１  論理ブロック構築部、２２  リフレッシュ制御部、２３  データアクセス制御部、２４  ブロック管理部、３１  アドレス変換テーブル、３２  論理ブロック管理テーブル、３３  バッドブロックテーブル、５０  ＥＣＣ処理部。
【図１】
2014052978.tif 000003
【図２】
2014052978.tif 000004
【図３】
2014052978.tif 000005
【図４】
2014052978.tif 000006
【図５】
2014052978.tif 000007
【図６】
2014052978.tif 000008
【図７】
2014052978.tif 000009
【図８】
2014052978.tif 000010
【図９】
2014052978.tif 000011
【図１０】
2014052978.tif 000012
【図１１】
2014052978.tif 000013
【図１２】
2014052978.tif 000014
【図１３】
2014052978.tif 000015
【図１４】
2014052978.tif 000016
【図１５】
2014052978.tif 000017