(57)【要約】【課題】一部をＳＬＣバッファに使用した多値方式の不揮発性半導体記憶素子を備えるメモリシステムの性能を向上する。【解決手段】メモリシステム１は、第１領域、第２領域及び第３領域を有するＮＡＮＤフラッシュメモリ２０と、ホスト機器１００とメモリシステム１との間のデータの転送を制御するコントローラ１０を備える。コントローラ１０は、１メモリセル当たり１ビットのデータを保存する第１方式でホスト機器から送信されたデータを第１領域に書き込み、第１のタイミングで、第１領域に保存されているデータの少なくとも一部読み出して１つのユニットデータを生成し、ユニットデータを圧縮した圧縮ユニットデータを第２領域に書き込む。コントローラ１０は、第２のタイミングで、第２領域から読み出した圧縮ユニットデータを伸張し、１メモリセル当たり複数ビットのデータを保存する第２方式で伸張されたユニットデータを第３領域に書き込む。【選択図】図１
2020149195.tif 000002
【特許請求の範囲】
【請求項１】
ホスト機器と接続可能であって、
第１領域、第２領域、第３領域を有する不揮発性半導体メモリと、
１メモリセル当たり１ビットのデータを保存する第１方式で前記ホスト機器から送信されたデータを前記第１領域に書き込み、
第１のタイミングで、前記第１領域に保存されているデータの少なくとも一部を読み出して１つのユニットデータを生成し、前記ユニットデータを圧縮し、前記圧縮された圧縮ユニットデータを前記第２領域に書き込み、
第２のタイミングで、前記第２領域から前記圧縮ユニットデータを読み出し、前記読み出した圧縮ユニットデータを伸張し、１メモリセル当たり複数ビットのデータを保存する第２方式で前記伸張されたユニットデータを前記第３領域に書き込むコントローラと
を備えるメモリシステム。
【請求項２】
前記第１のタイミングは前記第１領域の空き領域に基づく請求項１に記載のメモリシステム。
【請求項３】
前記第２のタイミングは前記ホスト機器からのアクセス頻度に基づく請求項１又は２に記載のメモリシステム。
【請求項４】
前記圧縮ユニットデータを構成する前記書き込みデータの論理アドレスを登録した圧縮データアドレステーブルを更に備えることを特徴とする請求項１乃至３のいずれか１項に記載のメモリシステム。
【請求項５】
１つの前記圧縮ユニットデータが、前記第２領域の１つの物理アドレスと１つのデータサイズで指定可能な連続したシーケンシャルな領域に書き込まれることを特徴とする請求項１乃至４のいずれか１項に記載のメモリシステム。
【請求項６】
前記第１領域に書き込まれる前記書き込みデータについて個々の圧縮率に関する圧縮率情報が記憶された圧縮率情報記憶部を更に備え、
前記コントローラが、前記圧縮率情報を参照して、圧縮率の相対的に高い前記書き込みデータを優先して前記ユニットデータを生成する
ことを特徴とする請求項１乃至５のいずれか１項に記載のメモリシステム。
【請求項７】
前記第２領域に書き込まれた前記圧縮ユニットデータの圧縮率及び前記第１領域の空き領域の大きさに応じて、前記第２領域と前記第１領域のサイズを動的に変化させることを特徴とする請求項１乃至６のいずれか１項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性半導体記憶素子を含むメモリシステムに関する。
【背景技術】
【０００２】
１個のメモリセルに複数のビットを記憶する多値記憶技術を用いた（以下において「多値方式」という。）不揮発性半導体記憶素子を搭載したメモリシステムとして、ＳＳＤ（Solid State Drive）が使用されている。多値方式の不揮発性半導体記憶素子は、例えばＮＡＮＤフラッシュメモリである。ＳＳＤなどのメモリシステムでは、ホスト機器から指定される論理アドレスと不揮発性半導体記憶素子の物理アドレス（記憶位置）との対応関係を示す論物変換テーブルが使用される。
【０００３】
多値方式の不揮発性半導体記憶素子を搭載したメモリシステムの性能を向上させるために、１つのメモリセルに１ビットのデータを記憶するＳＬＣ（Single Level Cell）方式（ＳＬＣモードとも称される。）でデータを書きこむ技術を使用するメモリシステムもある。例えば、多値方式のＮＡＮＤフラッシュメモリを使用するメモリシステムにおいて、ＮＡＮＤフラッシュメモリを制御するコントローラがホスト機器から送信された書き込みデータをＮＡＮＤフラッシュメモリに保存する場合に、ＮＡＮＤフラッシュメモリの一部のブロック（若しくはブロックより細かい粒度）に対してＳＬＣ方式でデータを書きこむことにより、この一部のブロックを書き込みデータのバッファとして使用する。ＳＬＣ方式でデータが書きこまれる領域はＳＬＣバッファ領域とも称され、コントローラは、所定のタイミングで、ＳＬＣバッファ領域に書き込まれたデータを多値記憶技術でデータを記憶するための領域（以下において、「多値領域」という。）に移動する。
【０００４】
ＳＬＣバッファ領域に空き領域がある場合、ホスト機器から見た場合の書き込み性能をＳＬＣ方式でデータを書きこむ技術を用いたメモリシステムの性能と同等近くまで向上させることができる。このため、大容量化が可能な多値方式のＮＡＮＤフラッシュメモリによるコスト削減と、ＳＬＣバッファ領域を使用することによる書き込み性能の向上を両立できる。
【０００５】
一方、ＳＬＣバッファ領域の空き領域がなくなると、ＳＬＣバッファ領域を介さずにデータが多値領域に書き込まれる。このため、ホスト機器から見た書き込み性能が低下する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１８−１６００５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の実施形態が解決しようとする課題は、一部をＳＬＣバッファに使用した多値方式の不揮発性半導体記憶素子を備えるメモリシステムの性能を向上することである。
【課題を解決するための手段】
【０００８】
実施形態に係るメモリシステムは、第１領域、第２領域、第３領域を有する不揮発性半導体記憶素子と、コントローラを備える。コントローラは、１メモリセル当たり１ビットのデータを保存する第１方式でホスト機器から送信されたデータを第１領域に書き込み、第１のタイミングで、第１領域に保存されているデータの少なくとも一部を読み出して１つのユニットデータを生成し、ユニットデータを圧縮し、圧縮された圧縮ユニットデータを第２領域に書き込む。コントローラは、第２のタイミングで、第２領域から圧縮ユニットデータを読み出し、読み出した圧縮ユニットデータを伸張し、１メモリセル当たり複数ビットのデータを保存する第２方式で伸張されたユニットデータを第３領域に書き込む。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係るメモリシステムの構成例を示す模式図である。
【図２】実施形態に係るメモリシステムを構成するＮＡＮＤフラッシュメモリの構成例を示す模式図である。
【図３】実施形態に係るメモリシステムの書き込み動作を説明するための模式図である（その１）。
【図４】実施形態に係るメモリシステムの書き込み動作を説明するための模式図である（その２）。
【図５】実施形態に係るメモリシステムの論物変換テーブルと圧縮データアドレステーブルの構成例を示す模式図である。
【図６】実施形態に係るメモリシステムの書き込み動作を説明するための模式図である（その３）。
【図７】実施形態に係るメモリシステムの書き込み動作を説明するためのフローチャートである。
【図８】実施形態に係るメモリシステムの読み出し動作を説明するための模式図である（その１）。
【図９】実施形態に係るメモリシステムの読み出し動作を説明するための模式図である（その２）。
【図１０】実施形態に係るメモリシステムの読み出し動作を説明するための模式図である（その３）。
【図１１】実施形態に係るメモリシステムの読み出し動作を説明するためのフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して実施形態を説明する。図面の記載において同一部分には同一符号を付して説明を省略する。
【００１１】
実施形態に係るメモリシステム１は、図１に示すように、ホスト機器１００から接続可能なメモリシステムであって、コントローラ１０、多値方式の不揮発性半導体記憶素子であるＮＡＮＤフラッシュメモリ２０、管理情報３０が保存されるバッファメモリ３００を有する。
【００１２】
ホスト機器１００は、例えばパーソナルコンピュータなどの情報処理装置、携帯電話、撮像装置であってもよいし、タブレットコンピュータやスマートフォンなどの携帯端末であってもよい。或いは、ホスト機器１００は、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。また、ホスト機器１００は、情報処理装置、携帯電話、携帯端末、車載端末等に搭載されるマイクロプロセッサであってもよい。ホスト機器は、ホスト装置またはホストとも称される。
【００１３】
コントローラ１０は、ホスト機器１００とＮＡＮＤフラッシュメモリ２０との間のデータの転送を制御する。即ち、コントローラ１０は、ホスト機器１００からの書き込み要求に応じて行われるＮＡＮＤフラッシュメモリ２０へのデータの書き込み動作を制御する。また、コントローラ１０は、ホスト機器１００からの読み出し要求に応じて行われるＮＡＮＤフラッシュメモリ２０からのデータの読み出し動作を制御する。ＮＡＮＤフラッシュメモリ２０では、ページと呼ばれるデータ単位で、書き込みおよび読み出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。書き込み要求は、書き込みコマンドとも称される。ホスト機器１００がメモリシステム１に書き込み動作を要求する場合、ホスト機器１００は、書き込みアドレス、ユーザデータが指定された書き込みコマンドをメモリシステム１に送信する。ここで、ユーザデータは、ホスト機器１００によるメモリシステム１への書き込みデータ、つまり、ホスト機器１００からメモリシステム１に送信される書き込みコマンドで指定されたデータであり、ライトデータとも称される。また、読み出し要求は、読み出しコマンドとも称される。ホスト機器１００がメモリシステム１に読み出し動作を要求する場合、ホスト機器１００は、読み出しアドレスが指定された読み出しコマンドをメモリシステム１に送信する。
【００１４】
コントローラ１０は、データをＮＡＮＤフラッシュメモリ２０へ記憶するまでの間に一時格納するために、バッファメモリ３００を使用する。また、コントローラ１０は、ＮＡＮＤフラッシュメモリ２０から読み出したデータをホスト機器１００へ送信するまでに一時格納するために、バッファメモリ３００を使用する。バッファメモリ３００は、例えば、ＳＲＡＭ（Static  Random  Access  Memory）やＤＲＡＭ（Dynamic  Random  Access  Memory）などの汎用メモリで構成される。また、バッファメモリ３００は、コントローラ１０内部に搭載されてもよく、コントローラ１０の外にコントローラ１０とは独立して搭載されてもよい。
【００１５】
コントローラ１０は、中央処理装置（ＣＰＵ）１１、ホストインターフェース１２、ＮＡＮＤインターフェース１３、ＥＣＣ（Error Correcting Code）回路１４、圧縮器１５、伸張器１６を有する。これらの構成要素は、内部バス１７によって接続されている。
【００１６】
ホストインターフェース１２は、ホスト機器１００との間のインターフェース規格に従った処理を実行し、ホスト機器１００から受信したコマンド、ユーザデータなどを内部バス１７に出力する。また、ホストインターフェース１２は、ＮＡＮＤフラッシュメモリ２０からの読み出しデータやＣＰＵ１１からの応答などをホスト機器１００に送信する。
【００１７】
メモリシステム１の動作は、ＣＰＵ１１によって統括的に制御される。ＣＰＵ１１は、ホスト機器１００からホストインターフェース１２を経由して受信したコマンドに従ってメモリシステム１の動作を制御する。ＣＰＵ１１による制御は、ＣＰＵ１１がファームウェアを実行することにより実現される。ＣＰＵ１１による制御は、メモリシステム１が電源供給を受けたときに、図示しないＲＯＭに格納されているファームウェア（制御プログラム）をバッファメモリ３００またはコントローラ１０内の図示しないＲＡＭ上に読み出して所定の処理を実行することにより、実現される。また、メモリシステム１におけるＣＰＵ１１による制御の内容は、ＣＰＵ１１ではなく、専用のハードウェアによって実行されてもよい。
【００１８】
ＣＰＵ１１は、ホスト機器１００からホストインターフェース１２を経由して書き込みコマンドを受信した場合に、ユーザデータを符号化するようにＥＣＣ回路１４を制御する。そして、ＣＰＵ１１は、ＥＣＣ回路１４により符号化された符号語を書き込みデータとしてＮＡＮＤフラッシュメモリ２０に書き込むようにＮＡＮＤインターフェース１３を制御する。この書き込み動作に伴い、論物変換テーブル３１に登録された情報を含む管理情報３０が、ＣＰＵ１１により更新される。
【００１９】
また、ＣＰＵ１１は、ホスト機器１００からホストインターフェース１２を経由して読み出しコマンドを受信した場合に、ＮＡＮＤフラッシュメモリ２０から符号語を読み出すようにＮＡＮＤインターフェース１３を制御する。このとき、管理情報３０がＣＰＵ１１によって参照される。そして、ＣＰＵ１１は、読み出された符号語を復号するようにＥＣＣ回路１４を制御し、ＥＣＣ回路１４により復号されたデータを読み出しデータとする。ＣＰＵ１１は、読み出しデータをホスト機器１００に送信するようにホストインターフェース１２を制御する。
【００２０】
ＮＡＮＤインターフェース１３は、ＣＰＵ１１の制御により、書き込みデータや後述する圧縮ユニットデータ、管理情報３０などをＮＡＮＤフラッシュメモリ２０に書き込む処理を行う。また、ＮＡＮＤインターフェース１３は、ＣＰＵ１１の制御により、符号語や圧縮ユニットデータ、管理情報３０などをＮＡＮＤフラッシュメモリ２０から読み出す処理を行う。
【００２１】
ＥＣＣ回路１４は、ユーザデータに対して、誤り訂正の符号化処理を実行し、パリティを生成する。ＥＣＣ回路１４は、ユーザデータ及びパリティを含む符号語を書き込みデータとしてＮＡＮＤインターフェース１３に送信する。ＥＣＣ回路１４で実行する符号化にはどのような方式を用いてもよい。例えば、ＲＳ（Reed Solomon）符号化、ＢＣＨ（Bose Chaudhuri Hocquenghem）符号化、ＬＤＰＣ（Low Density Parity Check）符号化などをＥＣＣ回路１４で実行する符号化の方式に用いることができる。また、ＥＣＣ回路１４は、ＮＡＮＤインターフェース１３から送信される符号語に対して誤り訂正の復号化処理を実施し、復号されたデータを読み出しデータとしてホストインターフェース１２へ送信する。
【００２２】
圧縮器１５はＮＡＮＤフラッシュメモリ２０に保存されているデータを圧縮し、伸張器１６は圧縮されたデータを伸張する。圧縮器１５及び伸張器１６の詳細は後述する。
【００２３】
ＣＰＵ１１は、ホスト機器１００から送信されるデータ及びそのデータを管理するための管理情報３０などを、ＮＡＮＤフラッシュメモリ２０に記憶する。起動時あるいはホスト機器１００から読み込みコマンドや書き込みコマンドを受信した場合などに、ＮＡＮＤフラッシュメモリ２０に記憶されている管理情報３０の一部または全部を、バッファメモリ３００にロード（キャッシュ）する。ＣＰＵ１１は、所定のタイミングで、バッファメモリ３００にロードされた管理情報３０を、ＮＡＮＤフラッシュメモリ２０にバックアップする。
【００２４】
管理情報３０は、論物変換テーブル３１、圧縮率情報記憶部３２、圧縮データアドレステーブル３３を有する。
【００２５】
論物変換テーブル３１は、例えば、ホスト機器１００によって指定される論理アドレスと、ＮＡＮＤフラッシュメモリ２０の物理アドレスとの対応関係を示すマッピングデータである。この物理アドレスは、ユーザデータが記憶されているＮＡＮＤフラッシュメモリ２０の記憶位置を示す。論理アドレスとしては、例えば、セクタ単位で通し番号が付された論理ブロックアドレス（Logical Block Address）が採用される。ここで、セクタ単位は、ホスト機器１００によって指定される論理アドレスの最小単位である。
【００２６】
ＣＰＵ１１は、論物変換テーブル３１を管理する際、論理アドレスと物理アドレスとの変換（論物変換）をセクタ単位で管理してもよいし、論理アドレス空間上の連続したアドレスをまとめた管理単位をＮＡＮＤフラッシュメモリ２０の物理的な領域に割り当てることにより管理してもよい。当該管理単位内では、論理アドレスが連続する複数のセクタが順に配置される。管理単位のサイズは任意であるが、例えば、ＮＡＮＤフラッシュメモリ２０のページのサイズやブロックのサイズ、あるいはホスト機器１００が採用するファイルシステムのサイズ、セクタのサイズの２以上の自然数倍であるクラスタサイズ等に一致させることができる。
【００２７】
ＣＰＵ１１は、管理単位のサイズをクラスタサイズに一致させる場合、論理アドレス空間上の連続したアドレスをまとめた論理クラスタと、論理クラスタに対応するデータが保存されるＮＡＮＤフラッシュメモリ２０における物理的な領域である物理クラスタと、の対応関係を、論物変換テーブル３１を使用して管理する。
【００２８】
圧縮率情報記憶部３２には、ＮＡＮＤフラッシュメモリ２０の後述するＳＬＣバッファ領域２１に書き込まれるデータについて個々の圧縮率を含む圧縮率情報が記憶される。圧縮データアドレステーブル３３には、圧縮器１５により圧縮されたデータの論理アドレス、及び圧縮されたデータが書き込まれたＮＡＮＤフラッシュメモリ２０の先頭物理アドレス及びデータ長さが登録される。圧縮率情報記憶部３２と圧縮データアドレステーブル３３の詳細については後述する。
【００２９】
ＮＡＮＤフラッシュメモリ２０は、ＭＬＣ（Multi Level Cell）、ＴＬＣ（Triple Level Cell）、ＱＬＣ（Quadruple Level Cell）のいずれであってもよい。ＭＬＣは、１個のメモリセルに２ビット分の情報を記憶可能なＮＡＮＤフラッシュメモリであり、ＴＬＣは、１個のメモリセルに３ビット分の情報を記憶可能なＮＡＮＤフラッシュメモリである。また、ＱＬＣは、１個のメモリセルに４ビット分の情報を記憶可能なＮＡＮＤフラッシュメモリである。実施形態に係るメモリシステム１に含まれるＮＡＮＤフラッシュメモリ２０は、図２に示すように、コントローラ１０がＳＬＣ方式でデータを書き込むＳＬＣバッファ領域２１、伸張器１６が圧縮したデータが書き込まれる圧縮データ領域２２、コントローラ１０が多値記憶技術でデータを記憶する多値領域２３を備える。
【００３０】
以下に、図１に示したメモリシステム１の動作について、ＮＡＮＤフラッシュメモリ２０に対するデータの書き込み方法を示す図３、図４及び図６の模式図を参照して説明する。
【００３１】
ＳＬＣバッファ領域２１に空き領域がある場合は、図３にデータ転送経路Ｒ１として示したように、書き込みデータはＮＡＮＤフラッシュメモリ２０のＳＬＣバッファ領域２１に書き込まれる。「空き領域」は、データを消去済みの領域、または有効データが記憶されておらず消去可能な領域である。ここで「有効データ」は、論理アドレスと対応付けされているデータである。一方、ＳＬＣバッファ領域２１に空き領域がない場合は、図３に破線のデータ転送経路Ｒ２として示したように、書き込みデータはＮＡＮＤフラッシュメモリ２０の多値領域２３に書き込まれる。
【００３２】
なお、書き込みデータがＮＡＮＤフラッシュメモリ２０のＳＬＣバッファ領域２１に書き込まれる場合には、図３にデータ転送経路Ｒ３として示したように、ＳＬＣバッファ領域２１に書き込まれる書き込みデータは圧縮器１５にも送信される。そして、書き込みデータを圧縮器１５により圧縮した場合の圧縮率Ｃが算出される。算出された圧縮率Ｃは、書き込みデータと対応付けられて、圧縮率情報記憶部３２に記憶される。
【００３３】
なお、すべての書き込みデータの圧縮率を圧縮率情報記憶部３２に記憶する必要は必ずしもなく、圧縮率が相対的に高い書き込みデータの圧縮率Ｃを圧縮率情報記憶部３２に記憶するようにしてもよい。例えば、圧縮率情報記憶部３２に記憶する圧縮率Ｃの個数を、圧縮率Ｃが高い上位Ｎ個に制限してもよい（Ｎ：１以上の整数）。
【００３４】
ホスト機器１００からの書き込み要求が連続するなどした場合に、ＳＬＣバッファ領域２１の空き領域が少なくなる。ＣＰＵ１１は、ＳＬＣバッファ領域２１の空き領域が少なく、且つ、圧縮データ領域２２に空き領域がある場合は、ＳＬＣバッファ領域２１に書き込まれている複数の書き込みデータの一部又は全部をまとめて１つのユニットデータを生成する。即ち、図４にデータ転送経路Ｒ４として示したように、ユニットデータＤ１がＳＬＣバッファ領域２１から圧縮器１５に送信される。圧縮器１５は、ユニットデータＤ１を圧縮して圧縮ユニットデータＤ２を生成する。生成された圧縮ユニットデータＤ２は、ＮＡＮＤフラッシュメモリ２０の圧縮データ領域２２に書き込まれる。ＳＬＣバッファ領域２１から圧縮器１５までのユニットデータＤ１の転送、圧縮器１５から圧縮データ領域２２までの圧縮ユニットデータの転送は、ＣＰＵ１１により内部バス１７を介して行われる。
【００３５】
圧縮データ領域２２は、多値記憶技術によりデータが記憶される領域であってもよいし、ＳＬＣ方式によりデータが記憶される領域であってもよい。圧縮ユニットデータのそれぞれは、圧縮データ領域２２のシーケンシャルな領域に書き込まれる。ここで、「シーケンシャルな領域」とは、１つの物理アドレスと１つのデータサイズでＮＡＮＤフラッシュメモリ２０における記憶位置を指定可能な物理的に連続した１つの領域である。
【００３６】
上記のようにして、メモリシステム１では、ＳＬＣバッファ領域２１に書き込まれた書き込みデータの少なくとも一部であるユニットデータが圧縮されて圧縮データ領域２２に移動される。ＣＰＵ１１は、ユニットデータを構成する書き込みデータが書き込まれていたＳＬＣバッファ領域２１の領域に対して、データの無効化（invalidate）をする。これにより、ＳＬＣバッファ領域２１に新たな空き領域が確保される。
【００３７】
なお、ＳＬＣバッファ領域２１に書き込まれている書き込みデータの全てを圧縮してもよいし、一部を圧縮してもよい。また、圧縮率情報記憶部３２に記憶された圧縮率Ｃを参照して、ＣＰＵ１１がデータユニットを構成する書き込みデータを選択してもよい。例えば、ＣＰＵ１１が、圧縮率の相対的に高い書き込みデータを優先してユニットデータを生成する。一方、ＣＰＵ１１が、圧縮器１５によってもデータサイズが圧縮されない書き込みデータや圧縮率が低い書き込みデータを、データユニットを生成する書き込みデータから除外してもよい。
【００３８】
論物変換テーブル３１に登録されているＮＡＮＤフラッシュメモリ２０の物理アドレスは、ＳＬＣバッファ領域２１の物理アドレス、圧縮データ領域２２の物理アドレス、及び多値領域２３の物理アドレスのいずれかである。書き込みデータのＳＬＣバッファ領域２１又は多値領域２３への書き込み、及び、圧縮ユニットデータの圧縮データ領域２２への書き込みのたびに、ＣＰＵ１１により論物変換テーブル３１の登録内容は更新される。
【００３９】
なお、圧縮データアドレステーブル３３に、圧縮ユニットデータのそれぞれに含まれる書き込みデータの論理アドレスが登録される。このため、圧縮データ領域２２に書き込まれた圧縮ユニットデータに含まれる書き込みデータの物理アドレスについて、圧縮データアドレステーブル３３を使用して論理アドレスとの対応が保持される。
【００４０】
例えば、図５に示すように、論物変換テーブル３１には、ホスト機器１００により指定された論理アドレスに対応する、ＳＬＣバッファ領域２１または多値領域２３に記憶された物理アドレスＰＡ１、ＰＡ２、・・・、ＰＡＭ（Ｍ：自然数）と、圧縮ユニットデータが記憶された圧縮データ領域２２の情報の圧縮データアドレステーブル３３に登録された位置を指定するインデックスＩＮＤが登録されている。図５に示した論物変換テーブル３１では、矢印の向きに配列した論理アドレスについて物理アドレス又はインデックスが対応付けされている。圧縮データアドレステーブル３３には、例えば図５に示すように、圧縮データ領域２２における圧縮ユニットデータの先頭物理アドレスＡＤＤ、圧縮ユニットデータのデータ長さＤＬ、圧縮ユニットデータに含まれるデータの論理アドレスＡ、Ｂ、Ｃが記録されている。なお、図５では、圧縮ユニットデータに含まれるデータの個数は３である例を示した。上記のように、論物変換テーブル３１には、物理アドレスＰＡとインデックスＩＮＤの２種類のデータが混在する。例えば特定のビットなどを用いて、これら２種類のデータが区別される。
【００４１】
メモリシステム１では、論物変換テーブル３１及び圧縮データアドレステーブル３３を使用して、特定の論理アドレスに対応するＮＡＮＤフラッシュメモリ２０の物理的な位置を確定できる。
【００４２】
圧縮データ領域２２に書き込まれた圧縮ユニットデータは、図６にデータ転送経路Ｒ５として示したように、ＣＰＵ１１の制御により伸張器１６に送信される。伸張器１６が圧縮ユニットデータを伸張し、ユニットデータを構成していた書き込みデータは、ＣＰＵ１１の制御により、圧縮されていない状態でＮＡＮＤフラッシュメモリ２０の多値領域２３に書き込まれる。ＮＡＮＤフラッシュメモリ２０の圧縮データ領域２２から伸張器１６までの圧縮ユニットデータの転送、伸張器１６からＮＡＮＤフラッシュメモリ２０の多値領域２３までの書き込みデータの転送は、内部バス１７を介して行われる。
【００４３】
次に、書き込み動作の流れを示す図７のフローチャートを参照しながらメモリシステム１の書き込み動作を説明する。図７のステップＳ１０１でメモリシステム１がホスト機器１００から書き込み要求を受けた場合、書き込みコマンド、書き込みアドレス、ユーザデータがホストインターフェース１２からＣＰＵ１１に送信される。
【００４４】
このとき、ステップＳ１０２において、ＣＰＵ１１がＳＬＣバッファ領域２１に空き領域があるか否かを判定する。ＳＬＣバッファ領域２１に空き領域がある場合は、処理はステップＳ１０３に進む。そして、図３を参照して説明したように、ＣＰＵ１１は、書き込みデータをＮＡＮＤフラッシュメモリ２０のＳＬＣバッファ領域２１に書き込む（ステップＳ１０３）。その後、処理はステップＳ１０４に進む。一方、ＳＬＣバッファ領域２１に空き領域がない場合は、処理はステップＳ１１０に進み、ＣＰＵ１１は、書き込みデータをＮＡＮＤフラッシュメモリ２０の多値領域２３に書き込む。このとき、ステップＳ１１１において、ＣＰＵ１１が、書き込まれたデータの論理アドレスと多値領域２３の物理アドレスとを対応付けるように論物変換テーブル３１を更新する。なお、書き込みデータは、圧縮されていない状態でＳＬＣバッファ領域２１又は多値領域２３に書き込まれる。
【００４５】
図７のステップＳ１０４において、ＣＰＵ１１は、ＳＬＣバッファ領域２１の空き領域が少なく、且つ、圧縮データ領域２２に空き領域がある場合は、図４を参照して説明したようにユニットデータを生成する。そして、ステップＳ１０５において、ＣＰＵ１１は、ユニットデータを圧縮した圧縮ユニットデータを圧縮データ領域２２に書き込ませる。
【００４６】
このとき、ステップＳ１０６において、論物変換テーブル３１及び圧縮データアドレステーブル３３がＣＰＵ１１により更新される。即ち、新たに圧縮データ領域２２に書き込まれた圧縮ユニットデータの先頭物理アドレスＡＤＤ、圧縮ユニットデータのデータ長さＤＬ及び圧縮ユニットデータに含まれるデータの論理アドレスが、圧縮データアドレステーブル３３に登録される。そして、圧縮データ領域２２に書き込んだ圧縮ユニットデータに含まれるデータについて、論物変換テーブル３１に登録されていた物理アドレスが、圧縮ユニットデータが書き込まれた圧縮データ領域２２の情報を記録した圧縮データアドレステーブル３３の位置を指定するインデックスＩＮＤに更新される。
【００４７】
図７のステップＳ１０７において、伸張器１６は、図６を参照して説明したように、圧縮データ領域２２に書き込まれた圧縮ユニットデータを、伸張する。そして、ステップＳ１０８において、圧縮ユニットデータを構成していた書き込みデータは、圧縮されていない状態でＮＡＮＤフラッシュメモリ２０の多値領域２３に書き込まれる。
【００４８】
伸張された書き込みデータが多値領域２３に書き込まれる際に、すなわち、書き込みデータが圧縮されていない状態で多値領域２３に書き込まれる際に、ＣＰＵ１１は論物変換テーブル３１と圧縮データアドレステーブル３３の登録内容を更新する。即ち、ステップＳ１０９において、ＣＰＵ１１は、伸張された圧縮ユニットデータが書き込まれていた圧縮データ領域２２の情報を圧縮データアドレステーブル３３から削除する。そして、ステップＳ１１１において、ＣＰＵ１１は、ユニットデータを構成していた書き込みデータの論理アドレスと多値領域２３の物理アドレスとを対応付けるように論物変換テーブル３１を更新する。
【００４９】
書き込みデータを圧縮して圧縮データ領域２２に書き込むタイミング（以下、「第１のタイミング」）、及び、圧縮ユニットデータを伸張して書き込みデータを多値領域２３に書き込むタイミング（以下、「第２のタイミング」）は、任意に設定可能である。しかし、ＳＬＣバッファ領域２１の空き領域が不足しないように、第１のタイミングと第２のタイミングを設定することが好ましい。このため、ホスト機器１００からのユーザデータに基づくＮＡＮＤフラッシュメモリ２０のＳＬＣバッファ領域２１への書き込みデータが増大するペースよりも、ＳＬＣバッファ領域２１に新たに確保される空き領域が大きくなるペースの方が大きくなるように書き込みデータを圧縮するようにしてもよい。
【００５０】
第１のタイミングは、ＣＰＵ１１がＳＬＣバッファ領域２１の空き領域に応じて設定してもよい。即ち、ＳＬＣバッファ領域２１の空き領域の割合が設定された許容値より少なくなった場合に、ＣＰＵ１１が圧縮ユニットデータを圧縮データ領域２２に書き込ませる。例えば、ＳＬＣバッファ領域２１の空き領域の割合がＳＬＣバッファ領域２１の全体の１０％程度まで減少した場合に、ＳＬＣバッファ領域２１に書き込まれている書き込みデータの圧縮が実行される。或いは、ＣＰＵ１１がＳＬＣバッファ領域２１の空き領域がなくなったタイミングで書き込みデータの圧縮を実行してもよい。
【００５１】
ＣＰＵ１１は、ＳＬＣバッファ領域２１に書き込まれる書き込みデータの圧縮率を、書き込みデータがＳＬＣバッファ領域２１に書き込まれるタイミングで算出している。このため、ＣＰＵ１１は、ＳＬＣバッファ領域２１の空き領域に必要なサイズに応じて、書き込みデータを圧縮するタイミングの決定や圧縮する書き込みデータを選択できる。例えば、ＣＰＵ１１は、ＳＬＣバッファ領域２１に新たに確保したい空き領域のサイズに応じて、ユニットデータを構成する書き込みデータを選択できる。
【００５２】
第２のタイミングは、ＣＰＵ１１が、ホスト機器１００からのアクセス頻度などに応じて設定してもよい。ＣＰＵ１１は、例えば、ホスト機器１００からメモリシステム１へのアクセス頻度が相対的に下がった場合に、圧縮ユニットデータを伸張して書き込みデータを多値領域２３に移動する。或いは、ＣＰＵ１１は、ホスト機器１００からのアクセス頻度が所定の設定値より少なくなった場合に、圧縮ユニットデータを伸張して書き込みデータを多値領域２３に移動するようにしてもよい。
【００５３】
ＣＰＵ１１は、圧縮されずにＳＬＣバッファ領域２１に書き込まれている書き込みデータを、任意のタイミングで多値領域２３に移動する。このため、ＳＬＣバッファ領域２１の空き領域が不足してきた場合に、ＣＰＵ１１は、ＳＬＣバッファ領域２１の書き込みデータの一部又は全部を圧縮して圧縮データ領域２２に移動するようにしてもよい。
【００５４】
以上に説明したように、図１に示したメモリシステム１では、書き込みデータは、ＮＡＮＤフラッシュメモリ２０のＳＬＣバッファ領域２１、圧縮データ領域２２及び多値領域２３のいずれかに保存されている。以下に、ホスト機器１００から読み出し要求を受信した場合のコントローラ１０によるＮＡＮＤフラッシュメモリ２０のデータの読み出し動作の一例を示す図８〜図１０の模式図を参照して、メモリシステム１のデータの読み出し動作を説明する。
【００５５】
ＣＰＵ１１が読み出し要求で指定された論理アドレスを参照することで書き込みデータがＳＬＣバッファ領域２１に保存されていると判定する場合は、ＣＰＵ１１の制御により、図８にデータ転送経路Ｒ６として示したように、ＳＬＣバッファ領域２１からデータが読み出されることにより、読み出しデータがホスト機器１００に送信される。このときの読み出し動作は、ＳＬＣ方式でデータがＮＡＮＤフラッシュメモリに書きこまれたデータに対する読み出し動作と同様である。
【００５６】
ＣＰＵ１１が読み出し要求で指定された論理アドレスを参照することで書き込みデータが圧縮データ領域２２に保存されていると判定する場合は、ＣＰＵ１１の制御により、圧縮ユニットデータが圧縮データ領域２２から読み出される。ＣＰＵ１１は、論物変換テーブル３１と圧縮データアドレステーブル３３を参照して読み出し対象の圧縮ユニットデータを選択することができる。即ち、ＣＰＵ１１は、論物変換テーブル３１を参照して、読み出し要求で指定された論理アドレスに対応する圧縮データアドレステーブル３３のインデックスＩＮＤを取得する。そして、ＣＰＵ１１は、取得したインデックスＩＮＤを用いて、圧縮データアドレステーブル３３から圧縮ユニットデータの先頭物理アドレスやデータ長さを取得し、圧縮データ領域２２から圧縮ユニットデータを読み出す。
【００５７】
圧縮データ領域２２から読み出された圧縮ユニットデータは、図９にデータ転送経路Ｒ７として示したように伸張器１６に送信され、伸張器１６によって伸張される。そして、ＣＰＵ１１が、ユニットデータを構成していた複数の書き込みデータから読み出し対象のデータを選択する。ＣＰＵ１１は、選択されたデータを、ホスト機器１００に送信される。圧縮ユニットデータが圧縮データ領域２２のシーケンシャルな領域に書き込まれているため、ＣＰＵ１１が圧縮ユニットデータを伸張されて得られる複数の書き込みデータから読み出しデータを選択することができる。
【００５８】
ＣＰＵ１１が読み出し要求で指定された論理アドレスを参照することで書き込みデータが多値領域２３に保存されていると判定する場合は、ＣＰＵ１１の制御により、図１０にデータ転送経路Ｒ８として示したように、多値領域２３からデータが読み出されることにより、読み出しデータがホスト機器１００に送信される。このときの読み出し動作は、多値方式のＮＡＮＤフラッシュメモリに書き込まれたデータに対する読み出し動作と同様である。
【００５９】
次に、読み出し動作の流れを示す図１１のフローチャートを参照しながらメモリシステム１の読み出し動作を説明する。図１１のステップＳ２０１でメモリシステム１がホスト機器１００から読み出し要求を受けた場合、ステップＳ２０２において、ＣＰＵ１１は、読み出し対象のデータがＮＡＮＤフラッシュメモリ２０のどの領域に保存されているかを、論物変換テーブル３１を参照して判定する。即ち、読み出し要求で指定される論理アドレスがＳＬＣバッファ領域２１に割り当てられた物理アドレスに対応する場合は、読み出し対象のデータがＳＬＣバッファ領域２１に書き込まれていると判定される。読み出し要求で指定される論理アドレスが、圧縮データアドレステーブル３３を指定するインデックスに対応する場合は、読み出し対象のデータが圧縮データ領域２２に圧縮ユニットデータの少なくとも一部として書き込まれていると判定される。読み出し要求で指定される論理アドレスが多値領域２３に割り当てられた物理アドレスに対応する場合は、読み出し対象のデータが多値領域２３に書き込まれていると判定される。
【００６０】
読み出し対象のデータがＳＬＣバッファ領域２１に書き込まれている場合は、処理はステップＳ２０３に進み、ステップＳ２０３では、図８を参照して説明したように、ＳＬＣバッファ領域２１から読み出された読み出しデータがホスト機器１００に送信される。
【００６１】
読み出し対象のデータが圧縮ユニットデータの少なくとも一部として圧縮データ領域２２に書き込まれている場合は、処理はステップＳ２０２からステップＳ２０４に進み、ステップＳ２０４では、読み出しデータを含む圧縮ユニットデータが圧縮データ領域２２から読み出される。その後、処理はステップＳ２０５に進む。
【００６２】
ステップＳ２０５において、圧縮データ領域２２から読み出された圧縮ユニットデータは、図９を参照して説明したように、伸張器１６に送信されて伸張される。そして、ステップＳ２０６において、ユニットデータを構成していた複数の書き込みデータから読み出しデータが選択される。次いで、ステップＳ２０７において、選択された読み出しデータがホスト機器１００に送信される。
【００６３】
読み出し対象のデータが多値領域２３に書き込まれている場合は、処理はステップＳ２０２からステップＳ２０８に進み、ステップＳ２０８では、図１０を参照して説明したように、多値領域２３から読み出された読み出しデータがホスト機器１００に送信される。
【００６４】
上記のように、メモリシステム１では、ＳＬＣバッファ領域２１や多値領域２３に書き込まれたデータは、圧縮されていない状態であるから、データを伸張する処理を経ずにホスト機器１００に送信される。一方、圧縮データ領域２２に書き込まれたデータは、伸張されてからホスト機器１００に送信される。
【００６５】
例えば、圧縮データ領域２２のサイズは、ＮＡＮＤフラッシュメモリ２０全体の１０〜２０％程度である。ただし、ＳＬＣバッファ領域２１と圧縮データ領域２２のサイズを固定しなくてもよい。即ち、圧縮データ領域２２に記憶された圧縮ユニットデータの圧縮率及びＳＬＣバッファ領域の空き領域の大きさに応じて、ＳＬＣバッファ領域２１と圧縮データ領域２２のサイズのＮＡＮＤフラッシュメモリ２０全体のサイズに対する割合を動的に変化させるようにしてもよい。
【００６６】
例えば、圧縮ユニットデータの圧縮率が高く、圧縮効果が大きい場合には、コントローラ１０は圧縮データ領域２２のサイズを拡大し、ＳＬＣバッファ領域２１のサイズを縮小する。一方、圧縮効果が小さい場合には、コントローラ１０は圧縮データ領域２２のサイズを縮小し、ＳＬＣバッファ領域２１を拡大する。このように、メモリシステム１は、ＳＬＣバッファ領域２１と圧縮データ領域２２のサイズを動的に変化させることにより、書き込みデータに応じて、ホスト機器１００からのアクセスパターンに適したＮＡＮＤフラッシュメモリ２０へのデータ書き込みを実現できる。
【００６７】
以上に説明したように、実施形態に係るメモリシステム１では、ＳＬＣバッファ領域２１から多値領域２３へのデータの移動が、圧縮データ領域２２を経由して行われる。つまり、複数の書き込みデータを圧縮してまとめて圧縮データ領域２２に書き込むことにより、圧縮していない書き込みデータを多値領域２３に書き込む場合よりも、書き込みに要する時間が短い。したがって、メモリシステム１では、ＳＬＣバッファ領域２１に空き領域が生じる速度が、ＳＬＣバッファ領域２１から多値領域２３に書き込みデータを圧縮しないで移動させる場合よりも速まる。その結果、ＳＬＣバッファ領域２１の空き領域が不足する頻度が低減される。したがって、実施形態に係るメモリシステム１によれば、多値方式のＮＡＮＤフラッシュメモリの一部をＳＬＣバッファに使用し、且つ書き込み性能が向上したメモリシステムを提供できる。
【００６８】
更に、実施形態に係るメモリシステム１では、ＳＬＣバッファ領域２１に書き込みデータを書き込む際に、書き込みデータの圧縮率がそれぞれ算出される。このように、書き込みデータの圧縮率を予め算出しておくことにより、圧縮可能なデータを選択して、ＳＬＣバッファ領域２１から圧縮データ領域２２にデータを移動させることができる。これにより、圧縮データ領域２２をより効率よく使用できる。
【００６９】
ところで、実施形態に係るメモリシステム１では、ＳＬＣバッファ領域２１にデータを書き込む時はデータの圧縮を行わず、書き込みデータが非圧縮状態でＳＬＣバッファ領域２１に書き込まれる。これに対し、ＳＬＣバッファ領域に書き込む時にデータを圧縮し圧縮されたデータがＳＬＣバッファ領域に書き込まれる方式のメモリシステム（以下、「比較例のメモリシステム」という。）が考えられる。比較例のメモリシステムによれば、ＳＬＣバッファに書き込めるデータの量が増加する。このため、ＳＬＣバッファ領域の空き領域が不足する頻度を低減できるとも考えられる。
【００７０】
一方で、上記の比較例のメモリシステムでは、可変長となった書き込みデータを固定長のアドレッシング単位に配置することにより、論物変換の処理が複雑化する。圧縮を行わずにデータをＳＬＣバッファ領域に書き込む場合には、１物理クラスタあたり１論理クラスタが配置されるが、データの圧縮を行った場合には、１物理クラスタあたり２個以上の論理クラスタが配置される場合がある。これをアドレッシングするためには、論理クラスタのアドレスをより細粒度（例えば、１／２クラスタ粒度、１／４クラスタ粒度、・・・）に保持する必要がある。また、圧縮された論理クラスタが物理クラスタ境界を跨ぐ場合には、２個以上の物理クラスタを参照する必要がある。
【００７１】
これに対し、実施形態に係るメモリシステム１では、書き込みデータが圧縮されずにＳＬＣバッファ領域２１に書き込まれる。そして、メモリシステム１は、ＳＬＣバッファ領域２１の空き領域が減少したタイミングで、ＳＬＣバッファ領域２１に書き込まれたデータが圧縮されて、圧縮データ領域２２に移動される。このとき、圧縮ユニットデータは圧縮データ領域２２のシーケンシャルな領域に書き込まれる。したがって、メモリシステム１によれば、比較例のメモリシステムの上記の問題は生じない。その後、ホスト機器１００からのアクセスを可能な限り阻害しないタイミングで、圧縮データ領域２２に格納された圧縮ユニットデータが伸張されて、書き込みデータが多値領域２３に書き込まれる。
【００７２】
なお、実施形態に係るメモリシステム１では、複数の書き込みデータがまとめて圧縮されているため、読み出し要求に応じて圧縮ユニットデータのすべてを読む必要がある。このため、読み出し性能の低下を抑制するために、一度に圧縮する書き込みデータの単位をある程度小さくするようにしてもよい。或いは、ランダムアクセスが可能な圧縮データフォーマットを採用してもよい。
【００７３】
しかし、ＳＬＣバッファ領域２１で空き領域が不足するのは、読み出し要求よりも書き込み要求が優勢な状況である。このため、読み出し要求に応じて圧縮ユニットデータのすべてを読むことによる読み出し性能の低下があっても、読み出し動作が少ないため、書き込みデータの圧縮による読み出し性能への影響は小さい。また、複数の書き込みデータをまとめて圧縮した圧縮ユニットデータを圧縮データ領域２２に書き込み、圧縮ユニットデータ単位でアドレッシングすることにより、アドレッシングに要するメモリ領域が増加することを抑制できる。
【００７４】
以上、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない、これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、書き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００７５】
１…メモリシステム
１０…コントローラ
１１…ＣＰＵ
１２…ホストインターフェース
１３…ＮＡＮＤインターフェース
１４…ＥＣＣ回路
１５…圧縮器
１６…伸張器
２０…ＮＡＮＤフラッシュメモリ
２１…ＳＬＣバッファ領域
２２…圧縮データ領域
２３…多値領域
３０…管理情報
３１…論物変換テーブル
３２…圧縮率情報記憶部
３３…圧縮データアドレステーブル
１００…ホスト機器
３００…バッファメモリ
【図１】
2020149195.tif 000003
【図２】
2020149195.tif 000004
【図３】
2020149195.tif 000005
【図４】
2020149195.tif 000006
【図５】
2020149195.tif 000007
【図６】
2020149195.tif 000008
【図７】
2020149195.tif 000009
【図８】
2020149195.tif 000010
【図９】
2020149195.tif 000011
【図１０】
2020149195.tif 000012
【図１１】
2020149195.tif 000013