(57)【要約】【課題】書き込み性能を劣化させずに、バッファ総容量を減らす。【解決手段】実施形態の半導体記憶装置は記憶部とコントローラを有し、コントローラは、ホストインターフェース部と、そこから出力される書込みデータを格納する第１領域と記憶部から読み出したデータを格納する第２領域とを有するバッファ部と、第１および第２領域の容量を制御するバッファ制御部と、第１領域に格納された書込みデータを記憶部に書き込むように制御する書き込み／読み出し制御部と、それを制御して記憶部に格納された有効データを第２領域に読み出して記憶部に書き込むコンパクションを実行するコンパクション制御部と、を有する。実施形態の半導体記憶装置は、書き込み／読み出し制御部が第１領域に格納された書込みデータを記憶部に書き込んだ後、バッファ制御部は第１領域の少なくとも一部を第２領域に割り当て、その後にコンパクション制御部はコンパクションを行う。【選択図】図１
2013137665.tif 000002
【特許請求の範囲】
【請求項１】
半導体記憶部とメモリコントローラを有する半導体記憶装置であって、
前記メモリコントローラは、
ホストインターフェース部と、
前記ホストインターフェース部から出力される書込みデータを格納する第１バッファ領域と、前記半導体記憶部から読み出した読出しデータを格納する第２バッファ領域と、を有するバッファ部と、
前記第１バッファ領域および前記第２バッファ領域の容量を制御するバッファ制御部と、
前記第１バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込むように制御する書き込み／読み出し制御部と、
前記書き込み／読み出し制御部を制御して、前記半導体記憶部に格納された有効データを前記第２バッファ領域に読み出し、前記第２バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込むコンパクション処理を実行するコンパクション制御部と、を有し、
前記書き込み／読み出し制御部が前記第１バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込んだ後、前記バッファ制御部は前記第１バッファ領域の少なくとも一部を前記第２バッファ領域に割り当てる割り当て処理を実行し、当該割り当て処理の後に、前記コンパクション制御部はコンパクション処理を行う
ことを特徴とする半導体記憶装置。
【請求項２】
前記割り当て処理の前において、前記第１バッファ領域の容量は前記第２バッファ領域の容量より大きい
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記コンパクション処理部が前記コンパクション処理を複数回実行した後、前記書き込み／読出し制御部が、前記割り当てを変更せずに、前記第１バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込む
ことを特徴とする請求項１または２に記載の半導体記憶装置。
【請求項４】
前記書き込み／読出し制御部は、前記第１バッファ領域に格納された前記書込みデータを第１のデータサイズ単位で前記半導体記憶部に書き込み、前記第１バッファ領域の容量は第１のデータサイズの２倍以上である
ことを特徴とする請求項１乃至３いずれか１項に記載の半導体記憶装置。
【請求項５】
前記コンパクション制御部は、前記第２バッファ領域に読み出された前記有効データを第２のデータサイズ単位で前記半導体記憶部に書き込み、第２のデータサイズは第１のデータサイズの２倍である
ことを特徴とする請求項４に記載の半導体記憶装置。
【請求項６】
前記メモリコントローラは、前記コンパクション処理において、前記第２バッファ領域に読み出された前記有効データと共に前記第１バッファ領域に格納された前記書込みデータも前記半導体記憶部に書き込む
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項７】
前記バッファ制御部は、前記コンパクション処理の終了後に、前記第２バッファ領域を全て前記第１バッファ領域に割り当てる
ことを特徴とする請求項１乃至６のいずれか１項に記載の半導体記憶装置。
【請求項８】
半導体記憶部と、ホストインターフェース部と、前記ホストインターフェース部から出力される書込みデータを格納する第１バッファ領域と、前記半導体記憶部から読み出した読み出しデータを格納する第２バッファ領域と、を有するバッファ部と、前記第１バッファ領域および前記第２バッファ領域の容量を制御するバッファ制御部と、を備える半導体記憶装置の制御方法であって、
前記書込みデータを前記半導体記憶部に書き込み、
前記書き込みの後に、前記第１バッファ領域の少なくとも一部を前記第２バッファ領域に割り当て、
前記割り当ての後に、前記半導体記憶部に格納された有効データを前記第２バッファ領域に読み出し、前記第２バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込むコンパクション処理を行う、
ことを特徴とする半導体記憶装置の制御方法。
【請求項９】
前記割り当ての前において、前記第１バッファ領域の容量は前記第２バッファ領域の容量より大きい
ことを特徴とする請求項８に記載の半導体記憶装置の制御方法。
【請求項１０】
前記コンパクション処理を複数回実行した後、前記割り当てを変更せずに前記第１バッファ領域に格納された前記書き込みデータを前記半導体記憶部に書き込む
ことを特徴とする請求項８または９に記載の半導体記憶装置の制御方法。
【請求項１１】
前記第１バッファ領域の容量の半分以下の第１のデータサイズ単位で、前記書込みデータを前記半導体記憶部に書き込む、
ことを特徴とする請求項８乃至１０のいずれか１項に記載の半導体記憶装置の制御方法。
【請求項１２】
第１のデータサイズ単位の２倍の第２のデータサイズ単位で、前記第２バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込む、
ことを特徴とする請求項１１に記載の半導体記憶装置の制御方法。
【請求項１３】
前記コンパクション処理において、前記第２バッファ領域に読み出された前記有効データと共に前記第１バッファ領域に格納された前記書き込みデータも前記半導体記憶部に書き込む
ことを特徴とする請求項８に記載の半導体記憶装置の制御方法。
【請求項１４】
前記コンパクション処理の終了後に、前記第２バッファ領域を全て前記第１バッファ領域に割り当てる
ことを特徴とする請求項８乃至１３のいずれか１項に記載の半導体記憶装置の制御方法。
【請求項１５】
半導体記憶部に接続され、前記半導体記憶を制御するメモリコントローラであって、
ホストインターフェース部と、
前記ホストインターフェース部から出力される書込みデータを格納する第１バッファ領域と、前記半導体記憶部から読み出した読出しデータを格納する第２バッファ領域と、を有するバッファ部と、
前記第１バッファ領域および前記第２バッファ領域の容量を制御するバッファ制御部と、
前記第１バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込むように制御する書き込み／読み出し制御部と、
前記書き込み／読み出し制御部を制御して、前記半導体記憶部に格納された有効データを前記第２バッファ領域に読み出し、前記第２バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込むコンパクション処理を実行するコンパクション制御部と、を有し、
前記書き込み／読み出し制御部が前記第１バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込んだ後、前記バッファ制御部は前記第１バッファ領域の少なくとも一部を前記第２バッファ領域に割り当てる割り当て処理を実行し、当該割り当て処理の後に、前記コンパクション制御部はコンパクション処理を行う
ことを特徴とするメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、半導体記憶装置、半導体記憶装置の制御方法、およびメモリコントローラに関する。
【背景技術】
【０００２】
不揮発性メモリ、例えばＮＡＮＤフラッシュメモリでは、物理的な消去単位（以降消去ブロックと称する）が、ホストからの最小のアクセス可能なデータサイズに対して非常に大きいため、ホストから同一の論理アドレスへの上書きや、既に書かれたデータの消去の要求が来ても、物理的なデータ消去は行わず、不揮発性メモリの異なる物理アドレス領域に新しいデータを追記していく書き込み制御方式が採られている。このような方式で、書き込み消去を繰り返して使用していると、無効なデータを含んだブロックが増え、新たにデータを書き込むための領域が減っていってしまう。そのため、複数のブロックから有効なデータだけを集め、他のブロックにコピーした上で、新たな書き込みを行えるよう、古いブロックの内容を消去する処理が必要であり、この処理をコンパクション（ガベージコレクションとも）と呼ぶ。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−１６５０６３号公報
【特許文献２】特開２００９−２１１２１９号公報
【特許文献３】特開２０１１−１９７９４５号公報
【特許文献４】特開２０１１−１９２２６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このコンパクション処理において、不揮発性メモリのブロック間のデータ移動の際には、データを不揮発性メモリから一旦読み出し、不揮発性メモリの別のブロックへ書き込むまでデータを保持しておくためのコンパクション用バッファが必要である。
【０００５】
しかしながら、コンパクション用バッファ領域、ユーザデータ書き込み用バッファ領域を、性能を出すのに必要なだけ独立に備えているとバッファの総容量が大きくなってしまい、装置のコストを押し上げる要因となってしまう。
【０００６】
本発明の一つの実施形態は、書き込み性能を劣化させることなく、バッファの総容量を減らすことが出来る半導体記憶装置、半導体記憶装置の制御方法、およびメモリコントローラを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一つの実施形態の半導体記憶装置は、半導体記憶部とメモリコントローラを有する半導体記憶装置であって、前記メモリコントローラは、ホストインターフェース部と、前記ホストインターフェース部から出力される書込みデータを格納する第１バッファ領域と、前記半導体記憶部から読み出した読出しデータを格納する第２バッファ領域と、を有するバッファ部と、前記第１バッファ領域および前記第２バッファ領域の容量を制御するバッファ制御部と、前記第１バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込むように制御する書き込み／読み出し制御部と、前記書き込み／読み出し制御部を制御して、前記半導体記憶部に格納された有効データを前記第２バッファ領域に読み出し、前記第２バッファ領域に読み出された前記有効データを前記半導体記憶部に書き込むコンパクション処理を実行するコンパクション制御部と、を有する。実施形態の半導体記憶装置は、前記書き込み／読み出し制御部が前記第１バッファ領域に格納された前記書込みデータを前記半導体記憶部に書き込んだ後、前記バッファ制御部は前記第１バッファ領域の少なくとも一部を前記第２バッファ領域に割り当てる割り当て処理を実行し、当該割り当て処理の後に、前記コンパクション制御部はコンパクション処理を行う。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施形態において書き込み処理およびコンパクション処理を実行するＳＳＤの構成を示す図である。
【図２】図２は、実施形態におけるバッファコントローラにおけるユーザデータの論理アドレスとデータバッファ上でユーザデータを格納したアドレスとを対応付ける管理の様子の一例を示した図である。
【図３】図３は、第１の実施形態におけるデータ書き込み処理実行時とコンパクション処理実行時におけるデータバッファ３の容量配分の様子を示す図である。
【図４】図４は、実施形態の書き込みバッファ（ＷＢ）領域におけるダブルバッファリングの手順を示した図である。
【図５】図５は、第１の実施形態にかかるコンパクション処理実行時のデータ書き込みの様子を示した図である。
【図６】図６は、第１の実施形態のユーザデータ書き込み処理およびコンパクション処理の様子を説明するフローチャートである。
【図７】図７は、第２の実施形態におけるデータ書き込み処理実行時とコンパクション処理実行時におけるデータバッファ３の容量配分の様子を示す図である。
【図８】図８は、第２の実施形態にかかるコンパクション処理実行時のデータ書き込みの様子を示した図である。
【図９】図９は、第２の実施形態のユーザデータ書き込み処理およびコンパクション処理の様子を説明するフローチャートである。
【発明を実施するための形態】
【０００９】
高速なホストインターフェースを備えるＳＳＤ(Solid State Drive)では、複数の不揮発性メモリに並列に書き込みを行うことで、スループットを高めている。そのため、ホストから転送されるユーザデータは一旦バッファに格納され、複数の不揮発性メモリへの並列書き込みに十分な量のデータが溜まってから、不揮発性メモリへの書き込みを行っている。不揮発性メモリへの書き込みが完了すると、書き込み用バッファは解放され、新たにホストから転送されるユーザデータを格納することができるようになる。不揮発性メモリへの書き込み中にバッファが枯渇すると、ホストからのユーザデータ転送を止めざるを得なくなりスループットが低下してしまう。そのため、ユーザデータ書き込み用バッファは、ホストからのデータ転送のスループットを維持するのに十分な容量を持っている必要がある。ここで、コンパクション処理をする場合には、さらにコンパクション用バッファが必要となる。しかしながら、コンパクション用バッファ領域、ユーザデータ書き込み用バッファ領域を、性能を出すのに必要なだけ独立に備えているとバッファの総容量が大きくなってしまい、装置のコストを押し上げる要因となってしまう。
【００１０】
以下に添付図面を参照して、実施形態にかかる半導体記憶装置、半導体記憶装置の制御方法、およびメモリコントローラを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【００１１】
（第１の実施形態）
図１は、実施形態における書き込み処理およびコンパクション処理にかかるＳＳＤ１の構成を示す図である。ＳＳＤ１は、ホストインターフェース部２、データバッファ３、制御部４、ＮＡＮＤコントローラ５０〜５７（チャネル制御部）、ＮＡＮＤフラッシュメモリ１００〜１３１（不揮発性メモリ）を備える。データバッファ３は、書き込みバッファ（ＷＢ）領域３１およびコンパクションバッファ（ＣＢ）領域３２を備える。制御部４は、書き込み／読み出しコントローラ４１、バッファコントローラ４２、コンパクションコントローラ４３を備える。ＮＡＮＤコントローラ５０〜５７のそれぞれにはチャネル０（Ｃｈ．０）〜チャネル７（Ｃｈ．７）が接続されている。各チャネルには異なるバンク（例えば４つのバンク、バンク０（Ｂａｎｋ０）〜バンク３（Ｂａｎｋ３））に所属するＮＡＮＤフラッシュメモリが接続されている。たとえば、チャネル０（Ｃｈ．０）にはＮＡＮＤフラッシュメモリ１００（ＮＡＮＤ＃０）、ＮＡＮＤフラッシュメモリ１０８（ＮＡＮＤ＃８）、ＮＡＮＤフラッシュメモリ１１５（ＮＡＮＤ＃１５）、ＮＡＮＤフラッシュメモリ１２２（ＮＡＮＤ＃２２）が接続されている。チャネル１（Ｃｈ．１）〜チャネル７（Ｃｈ．７）も同様である。バンク０（Ｂａｎｋ０）には、チャネル０（Ｃｈ．０）からチャネル７（Ｃｈ．７）に接続されたＮＡＮＤフラッシュメモリ１００（ＮＡＮＤ＃０）、ＮＡＮＤフラッシュメモリ１０１（ＮＡＮＤ＃１）、・・・、ＮＡＮＤフラッシュメモリ１０７（ＮＡＮＤ＃７）の８つのＮＡＮＤフラッシュメモリが所属している。バンク１（Ｂａｎｋ１）〜バンク３（Ｂａｎｋ３）も同様である。各ＮＡＮＤフラッシュメモリ１００〜１３１はそれぞれＮＡＮＤチップに対応している場合もあるが、同一チャネルに接続された隣接するバンクに所属するＮＡＮＤフラッシュメモリ、例えばＮＡＮＤフラッシュメモリ１００（ＮＡＮＤ＃０）およびＮＡＮＤフラッシュメモリ１０８（ＮＡＮＤ＃８）とで１つのＮＡＮＤチップを構成している場合もある。また上記ではチャネル数８、チャネル毎のバンク数４の例を示したが、チャネル数およびバンク数はこれに限定されるものではない。
【００１２】
図１において、ＳＳＤ１がホストから書き込みコマンドを受領すると、ホストインターフェース部２は、データバッファ３の空き容量を確認し、ユーザデータをデータバッファ３内の書き込みバッファ（ＷＢ）領域３１に転送する。ＮＡＮＤコントローラ５０〜５７は、書き込み／読み出しコントローラ４１の指示に従い、書き込みバッファ（ＷＢ）領域３１からユーザデータを複数のチャネルおよびバンクに分散して書き込む。
【００１３】
バッファコントローラ４２は、ホストから受け取ったユーザデータの論理アドレスと、データバッファ３上でユーザデータを格納したアドレスとを対応付けて管理する。図２は、バッファコントローラ４２におけるユーザデータの論理アドレスとデータバッファ３上でユーザデータを格納したアドレスとを対応付ける管理の様子の一例を示した図である。図２に示すように、連続した論理セクタアドレスに対応する幾つかのセクタ分（例えば８セクタ分）のデータを一つのクラスタデータとし、セクタを格納したバッファアドレスをクラスタサイズ分だけ並べたリスト（図２のＳｅｃｔｏｒ＿Ａｄｄｒ０〜Ｓｅｃｔｏｒ＿Ａｄｄｒ７）とクラスタ単位の論理クラスタアドレス（ＬＣＡＸＸ、ＬＣＡＹＹ）を一つのエントリとして管理する。バッファアドレスとは、データバッファ３上のデータのアドレスである。
【００１４】
バッファコントローラ４２は、少なくともクラスタ単位の論理アドレス（ＬＣＡＸＸ、ＬＣＡＹＹ）のリストの先頭を示すポインタ（図２のＷＢＥ＃０、ＷＢＥ＃１）を保持していれば、データバッファ３の書き込みバッファ（ＷＢ）領域３１の管理が可能である。バッファコントローラ４２は、コンパクションバッファ（ＣＢ）領域３２の管理も同様にポインタで行う。すなわち、バッファコントローラ４２は、ホストインターフェース部２にポインタを渡すことにより、書き込みバッファ（ＷＢ）領域３１の容量を制御することができる。同様に、バッファコントローラ４２は、ＮＡＮＤコントローラ５０〜５７にポインタを渡すことにより、コンパクションバッファ（ＣＢ）領域３２の容量を制御することができる。従って、バッファコントローラ４２は、データバッファ３に直接アクセスする必要がない。また、クラスタという単位は、書き込み／読み出しコントローラ４１で、ホストが扱う論理アドレスと、ＮＡＮＤフラッシュメモリ１００〜１３１の物理アドレスとを対応付ける最小単位であるとする。また、書き込み／読み出しコントローラ４１の機能としては上記論理アドレスと物理アドレスとの変換処理を含むものとする。なお、データバッファ３はリングバッファで実装してもよい。即ち、データバッファ３内のデータ管理構造において、ユーザデータの書き込みバッファ（ＷＢ）領域３１に該当する基本単位（クラスタ単位）の集合を一つのリングバッファ構造で管理し、コンパクションバッファ（ＣＢ）領域３２に該当する基本単位（クラスタ単位）の集合も一つのリングバッファ構造で管理する。ユーザデータが書き込まれた領域は、ホストからデータを受け取った順に書き込み／読み出しコントローラ４１にデータバッファ３上のアドレス提示し、書き込みが完了して無効化された順に再利用する。コンパクションバッファ（ＣＢ）領域３２もまた、コンパクションコントローラ４３から読み出し要求が出された順に書き込み／読み出しコントローラ４１にデータバッファ３上のアドレスを提示し、書き込みが完了して無効化された順に再利用する。割り当ての切り替えは、リングバッファの論理的な接続切り替えによって行う。これにより領域割り当て処理が容易になる。
【００１５】
バッファコントローラ４２は、クラスタサイズ分（例えば８セクタ分）溜まったエントリを、書き込み／読み出しコントローラ４１に通知する。これは、書き込み／読み出しコントローラ４１に、ＮＡＮＤフラッシュメモリ１００〜１３１に書き込んでも良いユーザデータのデータバッファ３上での位置を通知したことに相当する。
【００１６】
書き込み／読み出しコントローラ４１は、ＮＡＮＤフラッシュメモリ１００〜１３１に書き込んでも良いユーザデータの量が、メディア（ＮＡＮＤフラッシュメモリ１００〜１３１）にとって都合の良い量に達したときに、ＮＡＮＤコントローラ５０〜５７に対して、データバッファ３上にあるデータのＮＡＮＤフラッシュメモリ１００〜１３１への書き込みを指示する。書き込みアルゴリズムは追記型とし、同一の論理アドレスへの上書きがあったとしても、物理的な消去をするのではなく、新しい領域を割り当てて、論理アドレスと物理アドレスの対応関係を更新していく。
【００１７】
ここでのメディアにとって都合の良い量とは、単一のＮＡＮＤフラッシュメモリにとっては、ページサイズであり、メディア書き込みを、複数チャネル並列に行う場合は、ページサイズの自然数倍になる。ここでは、図１に示した全チャネル数８の半分のチャネル数である４チャネル（例えば、チャネル０（Ｃｈ．０）〜チャネル３（Ｃｈ．３）、或いはチャネル４（Ｃｈ．４）〜チャネル７（Ｃｈ．７））を１回の並列書き込みに使用するとする。１回の並列書き込みにおいて１つのチャネルに対して３２クラスタ分のデータが書き込めるとすると、４チャネル分の書き込みに要するクラスタ数Ｘは１２８となる（Ｘ＝１２８）。１論理ページは２５６（＝２Ｘ）クラスタであるので、１回の並列書き込みで１／２論理ページを書き込むとする。以下、書き込みバッファ（ＷＢ）領域３１上にあるデータのＮＡＮＤフラッシュメモリ１００〜１３１への１回の並列書き込みによる書き込みデータ量を１２８（＝Ｘ）クラスタとして説明するが、１回の並列書き込みが可能なデータ量はこれに限定されるわけではない。
【００１８】
チャネル０（Ｃｈ．０）〜チャネル３（Ｃｈ．３）、或いはチャネル４（Ｃｈ．４）〜チャネル７（Ｃｈ．７）にそれぞれ接続されたＮＡＮＤフラッシュメモリへの１２８クラスタ分のデータの書き込みが完了するまでの期間、書き込みバッファ（ＷＢ）領域３１のユーザデータが格納されている領域は解放することが出来ない。そのため、ホストからのデータ転送速度を維持するためには、ＮＡＮＤフラッシュメモリへの１２８（＝Ｘ）クラスタ分のデータ書き込みが完了し、書き込みバッファ（ＷＢ）領域３１の当該領域が再利用できるようになるまでの期間に、ホストインターフェース部２を介してホストから受け取るデータ量を格納できるだけの書き込みバッファ（ＷＢ）領域３１がさらに必要である。
【００１９】
書き込みバッファ（ＷＢ）領域３１に溜まった１２８（＝Ｘ）クラスタ分のデータをＮＡＮＤフラッシュメモリに書き込む時間がホストから１２８（＝Ｘ）クラスタ分のデータを受ける時間より短い場合、ホストからのデータ転送速度を維持しつつ、ＮＡＮＤフラッシュメモリに書き込みを続けるには２５６（＝２Ｘ）クラスタ分の書き込みバッファ（ＷＢ）領域３１を備えていれば十分である。即ち、後で詳述するダブルバッファリングを実行して書き込みを行うことなどを考慮すると、書き込みバッファ（ＷＢ）領域３１の容量は、書き込みバッファ（ＷＢ）領域３１からＮＡＮＤフラッシュメモリに１回で書き込む書き込みデータのデータ単位の２倍以上の容量があればよい。
【００２０】
このような書き込み処理を続けていくとＮＡＮＤフラッシュメモリ１００〜１３１上で無効なデータを保持している領域が増えてしまう。これを回避するために無効なデータを含むブロックから別のブロックへ有効なデータのみコピーして集め、コピー元のブロックを消去し、新たなユーザデータ書き込みに再利用できるようにする処理を行う。この処理をコンパクション処理と呼ぶ。
【００２１】
ユーザデータ書き込み先と、コンパクションデータ書き込み先が別のブロックであり、同一ページに混ざらないようなコンパクションアルゴリズムの概要は以下のようになる。
【００２２】
書き込みバッファ（ＷＢ）領域３１とコンパクションバッファ（ＣＢ）領域３２を合わせたバッファ容量の総量としては３８４（＝３Ｘ）クラスタ分の容量を用意する。図３は、データ書き込み処理実行時とコンパクション処理実行時におけるデータバッファ３の容量配分の一例を示す図である。図３に示すように、コンパクション処理を行っていないユーザデータのデータ書き込み処理実行時は、２Ｘ（＝２５６）クラスタ分のバッファ容量をユーザデータの書き込みバッファ（ＷＢ）領域３１として用いる。ＮＡＮＤフラッシュメモリ１００〜１３１への１回の並列書き込みで書き込まれるユーザデータ量は１２８（＝Ｘ）クラスタなので、ホストからのユーザデータの書き込みバッファ（ＷＢ）領域３１への転送、および書き込みバッファ（ＷＢ）領域３１からＮＡＮＤフラッシュメモリ１００〜１３１への書き込み（プログラム）は以下に説明するダブルバッファリングで実行することができる。
【００２３】
図４は、実施形態の書き込みバッファ（ＷＢ）領域におけるダブルバッファリングの手順を示した図である。図４の上には、ホスト（ホストインターフェース部２）から書き込みバッファ（ＷＢ）領域３１へのユーザデータの転送、および書き込みバッファ（ＷＢ）領域３１からＮＡＮＤフラッシュメモリ１００〜１３１への書き込み（プログラム）のタイムチャートが示されており、図４の（ａ）、（ｂ）、（ｃ）、および（ｄ）は時系列に沿った書き込みバッファ（ＷＢ）領域３１の状態を示す。
【００２４】
まず、ホスト（ホストインターフェース部２）から書き込みバッファ（ＷＢ）領域３１へＸクラスタ分のデータＡが転送される。このときの書き込みバッファ（ＷＢ）領域３１の状態が（ａ）であり、２Ｘ（＝２５６）クラスタ分のバッファ容量を有する書き込みバッファ（ＷＢ）領域３１の半分にデータＡが保持される。
【００２５】
次のタイミングで、ホスト（ホストインターフェース部２）から書き込みバッファ（ＷＢ）領域３１へＸクラスタ分のデータＢが転送される。このときの書き込みバッファ（ＷＢ）領域３１の状態が（ｂ）であり、書き込みバッファ（ＷＢ）領域３１の残りの半分のＸクラスタ分の領域にデータＢが保持される。そしてこのタイミングで、書き込みバッファ（ＷＢ）領域３１に保持されたデータＡはＮＡＮＤフラッシュメモリ１００〜１３１へ書き込まれる（プログラム）。
【００２６】
これにより、書き込みバッファ（ＷＢ）領域３１のデータＡを保持していた領域は解放される（（ｃ））。
【００２７】
さらに次のタイミングで、ホスト（ホストインターフェース部２）から書き込みバッファ（ＷＢ）領域３１の（ｃ）で解放された領域へＸクラスタ分のデータＣが転送される。このときの書き込みバッファ（ＷＢ）領域３１の状態が（ｄ）であり、このタイミングで、書き込みバッファ（ＷＢ）領域３１に保持されたデータＢはＮＡＮＤフラッシュメモリ１００〜１３１へ書き込まれる（プログラム）。
【００２８】
コンパクション処理実行時は、バッファコントローラ４２は、ＮＡＮＤフラッシュメモリ１００〜１３１への書き込みが完了し解放された書き込みバッファ（ＷＢ）領域３１のＸクラスタ分を、新たなユーザデータの書き込み用バッファ（ＷＢ）領域３１としてではなく、コンパクションバッファ（ＣＢ）領域３２として割り当てる。図４を用いて説明すると、（ｄ）のタイミングになる前にコンパクションの開始が決定されると、図４の（ｃ）に下に記載したように、解放された書き込みバッファ（ＷＢ）領域３１のＸクラスタ分がコンパクションバッファ（ＣＢ）領域３２として割り当てられることになる。この結果、コンパクション処理実行時は、書き込み用バッファ（ＷＢ）領域３１のバッファ容量はＸクラスタ分、コンパクションバッファ（ＣＢ）領域３２のバッファ容量は２Ｘクラスタ分になる。
【００２９】
コンパクション先ブロックはチャネル（チャネル０（Ｃｈ．０）〜チャネル７（Ｃｈ．７））毎に用意し、全チャネルのＮＡＮＤコントローラ５０〜５７への書き込み指示を出し、コンパクション元ブロックから読み出した有効データを２Ｘクラスタ分（１論理ページ分）並列に書き込むものとする（図５）。このとき、コンパクションバッファ（ＣＢ）領域３２として、２５６（＝２Ｘ）クラスタ分のデータ領域があれば、コンパクション元ブロックからの有効データを全てコンパクションバッファ（ＣＢ）領域３２上に読み出し、全てのチャネル（チャネル０（Ｃｈ．０）〜チャネル７（Ｃｈ．７））を介して１論理ページ分のデータを並列に書き込みを行うことができる。
【００３０】
コンパクションの手順としては、コンパクションコントローラ４３から通知される有効クラスタデータの論理アドレスを元に、書き込み／読み出しコントローラ４１に対して、メディア上の有効なデータをコンパクションバッファ（ＣＢ）領域３２へ読み出すよう指示する。書き込み／読み出しコントローラ４１から指示を受けたＮＡＮＤコントローラ５０〜５７はこの時点で有効なデータを選択するので無効なデータは読み出さない。コンパクションバッファ（ＣＢ）領域３２上でクラスタ単位のデータが溜まると、バッファコントローラ４２は当該エントリを書き込み／読み出しコントローラ４１に通知する。書き込み／読み出しコントローラ４１は２Ｘクラスタ分（１論理ページ分）の有効データが溜まったら、ＮＡＮＤコントローラ５０〜５７に対して、コンパクションバッファ（ＣＢ）領域３２上に溜まった有効データを全てのチャネル（チャネル０（Ｃｈ．０）〜チャネル７（Ｃｈ．７））を介してＮＡＮＤフラッシュメモリ１００〜１３１へ書き込ませる。
【００３１】
２Ｘクラスタ分の有効データのコンパクション処理が行われている間、ユーザデータ書き込み用として利用できる書き込みバッファ（ＷＢ）領域３１の容量はＸクラスタ分である。チャネル（チャネル０（Ｃｈ．０）〜チャネル７（Ｃｈ．７））はコンパクションされた有効データの書き込みで占有されているため、書き込みバッファ（ＷＢ）領域３１からＮＡＮＤフラッシュメモリ１００〜１３１への書き込みは行えないが、ホストからのデータ転送は残りＸクラスタ分の書き込みバッファ（ＷＢ）領域３１にユーザデータが溜まりきるまで維持することができる。この間、書き込み可能になったクラスタ単位のデータは、書き込み／読み出しコントローラ４１に通知しておくことができ、コンパクションされた２Ｘクラスタ分の有効データのＮＡＮＤフラッシュメモリ１００〜１３１への書き込みが終わると、Ｘクラスタ分のユーザデータをＮＡＮＤフラッシュメモリ１００〜１３１へ書き込むことができる。コンパクション処理中は、この２種類の書き込みを交互に繰り返す。
【００３２】
コンパクション処理が完了すると、バッファコントローラ４２は、コンパクションバッファ（ＣＢ）領域３２のうちＸクラスタ分を解放し、新たなユーザデータの書き込みバッファ（ＷＢ）領域３１として割り当てる。すなわち、データ書き込み処理実行状態に戻り、ユーザデータの書き込みバッファ（ＷＢ）領域３１のバッファ容量は２Ｘクラスタ分に戻る。
【００３３】
以上に述べた、ユーザデータ書き込み処理およびコンパクション処理の様子を図６のフローチャートを用いて詳細に説明する。
【００３４】
（ユーザデータ書き込み処理）
まず、ユーザデータ書き込み処理実行時には、ユーザデータの書き込みバッファ（ＷＢ）領域３１は２Ｘ（＝２５６）クラスタ分、コンパクションバッファ（ＣＢ）領域３２はＸ（＝１２８）クラスタ分のバッファ容量を確保する（図６：ステップＳ１０１）。なお、コンパクション処理に入る前の初期設定としては、書き込みバッファ（ＷＢ）領域３１のバッファ容量は少なくともコンパクションバッファ（ＣＢ）領域３２のバッファ容量より大きくなるように確保しておく。ステップＳ１０２にて、ホストから転送されたユーザデータが書き込みバッファ（ＷＢ）領域３１にＸ（＝１２８）クラスタ分溜まったか否か（ステップＳ１０２：Ｎｏ）が判定され、Ｘ（＝１２８）クラスタ分溜まった（ステップＳ１０２：Ｙｅｓ）場合は、Ｘ（＝１２８）クラスタ分のユーザデータをＮＡＮＤフラッシュメモリ１００〜１３１へ書き込む（プログラム）（ステップＳ１０３）。その後、書き込みバッファ（ＷＢ）領域３１の書き込みが済んだＸ（＝１２８）クラスタ分の領域を解放する（ステップＳ１０４）。なお、書き込みが済んだ領域は一旦全て解放し、次のステップＳ１０５の判定にかかわらずコンパクションバッファ（ＣＢ）領域３２に渡す必要がない領域がある場合は、書き込みバッファ（ＷＢ）領域３１として再利用してもよい。そして、ステップＳ１０５にて、コンパクション処理開始の要件が判定される。コンパクション処理開始の要件はＮＡＮＤフラッシュメモリ１００〜１３１上のフリーブロックの数が足りない、即ち所定の数以下となっているかどうかであり、フリーブロックの数が所定の数以下の場合コンパクション処理が開始される（ステップＳ１０５：Ｙｅｓ）。要件を満たさない場合（ステップＳ１０５：Ｎｏ）は、ステップＳ１０１に戻る。
【００３５】
（コンパクション処理）
ステップＳ１０５において、コンパクション処理開始の要件が満たされる（ステップＳ１０５：Ｙｅｓ）と、書き込みバッファ（ＷＢ）領域３１のＸ（＝１２８）クラスタ分がコンパクションバッファ（ＣＢ）領域３２として割り当てられる（ステップＳ１０６）。なお、ステップＳ１０４で解放した書き込みバッファ（ＷＢ）領域３１の一部を書き込みバッファ（ＷＢ）領域３１として再利用する場合は、Ｘクラスタ分の領域から再利用する分を除いた領域をコンパクションバッファ（ＣＢ）領域３２として割り当てればよい。ここでは、説明を簡単にするため、書き込みバッファ（ＷＢ）領域３１のＸ（＝１２８）クラスタ分がコンパクションバッファ（ＣＢ）領域３２として追加的に割り当てられたとして、以下説明する。従って、書き込みバッファ（ＷＢ）領域３１はＸ（＝１２８）クラスタ分、コンパクションバッファ（ＣＢ）領域３２は２Ｘ（＝２５６）クラスタ分のバッファ容量を確保することになる（ステップＳ１０６）。そして、ＮＡＮＤフラッシュメモリ１００〜１３１のコンパクション元ブロックから有効データをコンパクションバッファ（ＣＢ）領域３２上に読み出し（ステップＳ１０７）、コンパクションバッファ（ＣＢ）領域３２上で纏められて２Ｘクラスタ分（１論理ページ分）のデータ量に達した有効データは、再びＮＡＮＤフラッシュメモリ１００〜１３１に書き込まれる（プログラム）（ステップＳ１０８）。このコンパクション処理（ステップＳ１０７およびＳ１０８）をＮ回繰り返すまで（ステップＳ１０９：Ｎｏ）実行し、Ｎ回実行すると（ステップＳ１０９：Ｙｅｓ）、ステップＳ１１０にてコンパクション処理を終了するか否かが判定される。コンパクション処理の終了は、コンパクション処理によって十分な数のフリーブロックが得られたとき、即ち、予め定めた一定数のフリーブロックが得られた場合に判定される。従って、Ｎ回のコンパクション処理で一定数のフリーブロックが得られた場合はコンパクション処理を終了して（ステップＳ１１０：Ｙｅｓ）、ステップＳ１０１に戻ってユーザデータ書き込み処理を再開する。一方、一定数のフリーブロックが得られなかった場合（ステップＳ１１０：Ｎｏ）は、ステップＳ１１１に進む。ステップＳ１１１では、フリーブロックの有無が判定される。
【００３６】
コンパクション処理によって十分な数のフリーブロックが得られはしなかったものの、フリーブロックが存在する場合（ステップＳ１１１：Ｙｅｓ）は、ステップＳ１１２に進んでユーザデータ書き込みを行う。これは、コンパクション処理実行時においてもユーザデータ書き込みが全くできない期間をなるべく作らないようにするためである。ステップＳ１１２にて、ホストから転送されたユーザデータが書き込みバッファ（ＷＢ）領域３１にＸ（＝１２８）クラスタ分溜まったか否（ステップＳ１１２：Ｎｏ）が判定され、Ｘ（＝１２８）クラスタ分溜まった（ステップＳ１１２：Ｙｅｓ）場合は、Ｘ（＝１２８）クラスタ分のユーザデータをＮＡＮＤフラッシュメモリ１００〜１３１へ書き込む（プログラム）（ステップＳ１１３）。その後、書き込みバッファ（ＷＢ）領域３１の書き込みが済んだＸ（＝１２８）クラスタ分の領域を解放し（ステップＳ１１４）、再び、書き込みバッファ（ＷＢ）領域３１として１２８クラスタ分、コンパクションバッファ（ＣＢ）領域３２として２５６クラスタ分のバッファ容量がそれぞれ確保される（ステップＳ１０６）。このとき、書き込みバッファ（ＷＢ）領域３１は空になっていることをホストインターフェース部２は知ることになるので、その後ホストから転送されたユーザデータが書き込みバッファ（ＷＢ）領域３１に蓄えられることになる。さらにステップＳ１０７に進み、再びコンパクション処理を行う。一方、例外的なケースであるが、ステップＳ１１１において、フリーブロックが全く存在しない場合（ステップＳ１１１：Ｎｏ）は、ステップＳ１０７に戻りフリーブロックを確保するまでコンパクション処理を繰り返す。以上で図６のフローチャートの説明を終わる。
【００３７】
コンパクション処理実行時にも、ユーザデータのＮＡＮＤフラッシュメモリ１００〜１３１への書き込みは、１回の並列書き込みによってＸクラスタ分ずつしか行えない。すなわち、コンパクションにより２Ｘクラスタ分の有効データをコンパクションバッファ（ＣＢ）領域３２にコピーしているときであっても、ホストからのユーザデータのＮＡＮＤフラッシュメモリ１００〜１３１への書き込みは１回の並列書き込みによってＸクラスタ分ずつしか行えない。従って、本実施形態のデータバッファ３の構成におけるコンパクション処理実行時の書き込み性能は、書き込みバッファ（ＷＢ）領域３１およびコンパクションバッファ（ＣＢ）領域３２それぞれに２Ｘクラスタ分ずつのバッファ容量を常時固定的に割り当てた合計４Ｘクラスタ分のバッファ容量を使用した場合と遜色無い。すなわち、ユーザデータの書き込みバッファ（ＷＢ）領域３１とコンパクションバッファ（ＣＢ）領域３２とが一部のバッファ領域を共用する制御を行うことで、それぞれの処理を効率よく実施するのに必要なバッファ量を独立に確保した場合よりもデータバッファ３のトータルのバッファ容量を削減することができ、装置のコストを下げることができる。このことは、データバッファ３を、容量に余裕があるＤＲＡＭではなく容量に制限があるＳＲＡＭで構成した場合などに特に有利である。すなわち、ＳＲＡＭの面積を節約することが可能となる。
【００３８】
以上説明したように、不揮発性メモリを用いた半導体記憶装置において、ユーザデータ書き込み用バッファとコンパクション用バッファとがバッファの一部を共用する制御を行うことで、トータルのバッファ容量を削減することが可能である。コンパクション処理を行う必要があるときには、ユーザデータ書き込み用バッファの一部をコンパクション用バッファとして振り分け、コンパクション処理が終われば、コンパクション用に振り分けられていたリソースをユーザデータ書き込み用に戻す、という制御を行う。このようなバッファ制御を行うことで、コンパクションが起きていないときには、ユーザデータ書き込みを効率よく行うために必要なバッファ容量、即ち、フロントエンドとＮＡＮＤフラッシュメモリの両方のスループットをそろえて最高性能を出すために必要なバッファ容量を確保することができる。また、コンパクションを行っているときには、コンパクションを効率よく行うために必要なバッファ容量を確保でき、かつユーザデータ書き込み性能の極端な低下を抑えることができる。
【００３９】
（第２の実施形態）
本実施形態においては、図１に示したＳＳＤ１の構成において、コンパクションデータ書き込み先と、ユーザデータ書き込み先が同一ページ、もしくは少なくとも同一ブロックに混在するような場合におけるコンパクション処理が行われる。
【００４０】
書き込みバッファ（ＷＢ）領域３１とコンパクションバッファ（ＣＢ）領域３２を合わせたバッファ容量の総量としては２５６（＝２Ｘ）クラスタ分の容量を用意する。図７は、データ書き込み処理実行時とコンパクション処理実行時におけるデータバッファ３の容量配分の一例を示す図である。このとき例えば、図７に示すように、データ書き込み処理実行時には書き込みバッファ（ＷＢ）領域３１に最大２Ｘクラスタ、コンパクション処理実行時には書き込みバッファ（ＷＢ）領域３１にＹクラスタ、コンパクションバッファ（ＣＢ）領域３２にＺクラスタ割り当てる。Ｙ＋Ｚ＝２Ｘとして、バッファの総量が２Ｘクラスタになるようにデータバッファ３のバッファ領域を設定する。コンパクション処理実行時にはコンパクションバッファ（ＣＢ）領域３２に最大２Ｘクラスタを割り当てることができる。
【００４１】
コンパクション処理が発生せず、ユーザデータの書き込みだけを行っているときには、書き込みバッファ（ＷＢ）領域３１に２Ｘ（２５６）クラスタを割り当てることができ、第１の実施形態と同じ構成で、同様にダブルバッファリングを行ってホストインターフェース部２からのデータ転送速度を維持した書き込み性能が出せる。
【００４２】
コンパクション処理が発生すると、ユーザデータ書き込み完了によって解放された書き込みバッファ（ＷＢ）領域３１のＸクラスタの全部または一部であるＹクラスタ分をコンパクションバッファ（ＣＢ）領域３２として割り当てる。バッファコントローラ４２は、コンパクションコントローラ４３から通知される有効クラスタデータの論理アドレスを元に、書き込み／読み出しコントローラ４１に対して、メディア上の有効なデータをコンパクションバッファ（ＣＢ）領域３２へ読み出すよう指示する。コンパクションバッファ（ＣＢ）領域３２上でクラスタ単位のデータが溜まると、バッファコントローラ４２は当該クラスタデータに対応するエントリを書き込み／読み出しコントローラ４１に通知する。書き込み／読み出しコントローラ４１は、書き込みバッファ（ＷＢ）領域３１上のユーザデータと、コンパクションバッファ（ＣＢ）領域３２上のコンパクションデータ、合わせて２Ｘクラスタ分（１論理ページ分）のデータが溜まったら、ＮＡＮＤコントローラ５０〜５７へ書き込みを行う（図８）。コンパクション処理を行う期間は、このように書き込みバッファ（ＷＢ）領域３１からとコンパクションバッファ（ＣＢ）領域３２からとの２種類の書き込みを、同時に混在させてもよい。
【００４３】
コンパクション処理が完了すると、バッファコントローラ４２は、コンパクションに用いていたＺクラスタ分の領域を解放し、新たなユーザデータの書き込み用バッファ、即ち書き込みバッファ（ＷＢ）領域３１として再び割り当てる（図７）。
【００４４】
以上に述べた、ユーザデータ書き込み処理およびコンパクション処理の様子を図９のフローチャートを用いて詳細に説明する。
【００４５】
（ユーザデータ書き込み処理）
まず、ユーザデータ書き込み処理実行時には、ユーザデータの書き込みバッファ（ＷＢ）領域３１は２Ｘ（＝２５６）クラスタ分のみのバッファ容量を確保する（図９：ステップＳ２０１）。コンパクションバッファ（ＣＢ）領域３２は確保せずバッファ容量の合計は、２Ｘ（＝２５６）クラスタ分である。ステップＳ２０２にて、ホストから転送されたユーザデータが書き込みバッファ（ＷＢ）領域３１にＸ（＝１２８）クラスタ分溜まったか否か（ステップＳ２０２：Ｎｏ）が判定され、Ｘ（＝１２８）クラスタ分溜まった（ステップＳ２０２：Ｙｅｓ）場合は、Ｘ（＝１２８）クラスタ分のユーザデータをＮＡＮＤフラッシュメモリ１００〜１３１へ書き込む（プログラム）（ステップＳ２０３）。その後、書き込みバッファ（ＷＢ）領域３１の書き込みが済んだＸ（＝１２８）クラスタ分の領域を解放する（ステップＳ２０４）。そして、ステップＳ２０５にて、コンパクション処理開始の要件が判定される。コンパクション処理開始の要件はＮＡＮＤフラッシュメモリ１００〜１３１上のフリーブロックの数が足りない、即ち所定の数以下となっているかどうかであり、フリーブロックの数が所定の数以下の場合コンパクション処理が開始される（ステップＳ２０５：Ｙｅｓ）。要件を満たさない場合（ステップＳ２０５：Ｎｏ）は、ステップＳ２０１に戻る。
【００４６】
（コンパクション処理）
ステップＳ２０５において、コンパクション処理開始の要件が満たされる（ステップＳ２０５：Ｙｅｓ）と、書き込みバッファ（ＷＢ）領域３１のＸ（＝１２８）クラスタ分がコンパクションバッファ（ＣＢ）領域３２として割り当てられる（ステップＳ２０６）。すなわち、このときは図７のＹ＝Ｚ＝Ｘ（＝１２８）である。ステップＳ２０７にて、ホストから転送されたユーザデータが書き込みバッファ（ＷＢ）領域３１にＸ（＝１２８）クラスタ分溜まったか否か（ステップＳ２０７：Ｎｏ）が判定され、Ｘクラスタ分溜まった（ステップＳ２０７：Ｙｅｓ）場合は、Ｘクラスタ分のユーザデータをＮＡＮＤフラッシュメモリ１００〜１３１へ書き込む（プログラム）（ステップＳ２０８）。その後、書き込みバッファ（ＷＢ）領域３１の書き込みが済んだＸクラスタ分の領域を解放する（ステップＳ２０９）。さらに、ステップＳ２１０でフリーブロックの有無が判定される。
【００４７】
ステップＳ２１０でフリーブロックが存在する場合（ステップＳ２１０：Ｙｅｓ）は、書き込みバッファ（ＷＢ）領域３１を例えば３２クラスタ分残して、残りをコンパクションバッファ（ＣＢ）領域３２に割り当て、コンパクションバッファ（ＣＢ）領域３２には２２４クラスタ分の容量が確保される（ステップＳ２１１）。このときは図７のＹ＝３２、Ｚ＝２２４である。書き込みバッファ（ＷＢ）領域３１を３２クラスタ分残すのは一例であり、コンパクションバッファ（ＣＢ）領域３２の容量が書き込みバッファ（ＷＢ）領域３１に残った容量より多ければよく、書き込みバッファ（ＷＢ）領域３１とコンパクションバッファ（ＣＢ）領域３２の容量比はこれに限定されない。そして、ＮＡＮＤフラッシュメモリ１００〜１３１のコンパクション元ブロックから有効データをコンパクションバッファ（ＣＢ）領域３２上にコンパクションバッファ（ＣＢ）領域３２の容量分読み出す（ステップＳ２１２）。ステップＳ２１３にて、ホストから転送されたユーザデータが書き込みバッファ（ＷＢ）領域３１に３２クラスタ分溜まったか否か（ステップＳ２１３：Ｎｏ）が判定される。書き込みバッファ（ＷＢ）領域３１に３２クラスタ分溜まった（ステップＳ２１３：Ｙｅｓ）場合は、図８に示すように、書き込みバッファ（ＷＢ）領域３１の３２クラスタ分とコンパクションバッファ（ＣＢ）領域３２の２２４クラスタ分との合わせて２Ｘクラスタ分（１論理ページ分）のデータをＮＡＮＤフラッシュメモリ１００〜１３１へ書き込む（プログラム）（ステップＳ２１４）。その後、ステップＳ２１５にて、コンパクション処理を終了するか否かが判定される。コンパクション処理の終了は、コンパクション処理によって十分な数のフリーブロックが得られたとき、即ち、予め定めた一定数のフリーブロックが得られた場合に判定される。従って、上記コンパクション処理で一定数のフリーブロックが得られた場合はコンパクション処理を終了して（ステップＳ２１５：Ｙｅｓ）、ステップＳ２０１に戻ってユーザデータ書き込み処理を再開する。一方、一定数のフリーブロックが得られなかった場合（ステップＳ２１５：Ｎｏ）は、ステップＳ２１０に進んで、再度フリーブロックの有無が判定される。
【００４８】
例外的なケースであるが、ステップＳ２１０においてフリーブロックが存在しない場合（ステップＳ２１０：Ｎｏ）は、書き込みバッファ（ＷＢ）領域３１に割り当てていた容量を全てコンパクションバッファ（ＣＢ）領域３２に割り当てて、コンパクションバッファ（ＣＢ）領域３２の容量を２Ｘ（＝２５６）クラスタ分として（ステップＳ２１６）、コンパクション処理のみを繰り返す。具体的には、ＮＡＮＤフラッシュメモリ１００〜１３１のコンパクション元ブロックから有効データをコンパクションバッファ（ＣＢ）領域３２上に読み出し（ステップＳ２１７）、コンパクションバッファ（ＣＢ）領域３２上で纏められて２Ｘクラスタ分（１論理ページ分）のデータ量に達した有効データは、再びＮＡＮＤフラッシュメモリ１００〜１３１に書き込まれる（プログラム）（ステップＳ２１８）。ステップＳ２１８の後、ステップＳ２１５と同様にコンパクション処理を終了するか否かが判定される（ステップＳ２１９）。一定数のフリーブロックが得られた場合はコンパクション処理を終了して（ステップＳ２１９：Ｙｅｓ）、ステップＳ２０１に戻ってユーザデータ書き込み処理を再開する。一方、一定数のフリーブロックが得られなかった場合（ステップＳ２１９：Ｎｏ）は、ステップＳ２１６にもどってコンパクション処理を再度行う。
【００４９】
以上説明したように、コンパクションデータ書き込み先と、ユーザデータ書き込み先が同一ページ、もしくは少なくとも同一ブロックに混在するような場合においても、不揮発性メモリを用いた半導体記憶装置において、ユーザデータ書き込み用バッファと、コンパクション用バッファの一部を共用し制御を行うことで、トータルのバッファ容量を削減することが可能である。このようなバッファ制御を行うことで、コンパクションが起きていないときには、ユーザデータ書き込みを効率よく行うために必要なバッファ容量、即ち、フロントエンドとＮＡＮＤフラッシュメモリの両方のスループットをそろえて最高性能を出すために必要なバッファ容量を確保することができる。また、コンパクションを行っているときには、コンパクションを効率よく行うために必要なバッファ容量を確保でき、かつユーザデータ書き込み性能の極端な低下を抑えることができる。
【００５０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５１】
１  ＳＳＤ、２  ホストインターフェース部、３  データバッファ、４  制御部、５０〜５７  ＮＡＮＤコントローラ、１００〜１３１  ＮＡＮＤフラッシュメモリ。
【図１】
2013137665.tif 000003
【図２】
2013137665.tif 000004
【図３】
2013137665.tif 000005
【図４】
2013137665.tif 000006
【図５】
2013137665.tif 000007
【図６】
2013137665.tif 000008
【図７】
2013137665.tif 000009
【図８】
2013137665.tif 000010
【図９】
2013137665.tif 000011