(57)【要約】【課題】ＣＰＵからの１コマンドでコンパクション動作が実行される半導体記憶装置。【課題を解決するための手段】半導体記憶装置は、不揮発性メモリのコマンドをキューイングするキューイングバッファ（２６）と、不揮発性メモリのリードコマンドを発行するリード手段（＃１０２）と、リード手段により前記不揮発性メモリから読み出されたデータをユーザデータと管理データとに分離する分離手段（＃１０４）と、不揮発性メモリのライトアドレスを管理するライトポインタ情報により示されるアドレスを分離手段により得られた管理データに対して加えてライトコマンドを発行し、キューイングバッファへ自動的にキューイングするライトコマンド発行手段（＃１１０）と、ライトコマンド発行手段により発行されたライトコマンドを不揮発性メモリに与え、データを不揮発性メモリに書き込むライト手段（＃１１４）とを具備する。【選択図】図４
2011175632.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリのコマンドをキューイングするキューイングバッファと、
前記不揮発性メモリのリードコマンドを発行するリード手段と、
前記リード手段により前記不揮発性メモリから読み出されたデータをユーザデータと管理データとに分離する分離手段と、
前記不揮発性メモリのライトアドレスを管理するライトポインタ情報により示されるアドレスを前記分離手段により得られた管理データに対して加えてライトコマンドを発行し、前記キューイングバッファへ自動的にキューイングするライトコマンド発行手段と、
前記ライトコマンド発行手段により発行されたライトコマンドを前記不揮発性メモリに与え、データを前記不揮発性メモリに書き込むライト手段と、
を具備する半導体記憶装置。
【請求項２】
前記ライト手段による書き込み処理の開始時に、前記リード手段により前記不揮発性メモリから読み出されたデータが有効か無効かを判定する判定手段をさらに具備し、
前記ライト手段は、前記判定手段が読み出されたデータが無効であると判定すると、無効なデータを前記不揮発性メモリに書き込む請求項１記載の半導体記憶装置。
【請求項３】
前記ライト手段による書き込み処理の開始時に、前記リード手段により前記不揮発性メモリから読み出されたデータが有効か無効かを判定する判定手段をさらに具備し、
前記ライト手段は、前記判定手段が読み出されたデータが無効であることを判定すると、書き込み処理を中止する請求項１記載の半導体記憶装置。
【請求項４】
前記ライト手段による書き込み処理後、正引きテーブルを更新する手段をさらに具備する請求項１記載の半導体記憶装置。
【請求項５】
前記不揮発性メモリは所定のバイト毎に１ページを構成し、所定のページが１ブロックを構成し、ページ単位でアクセスされ、データは全てのページが無効であるフリーブロックの先頭ページから書き込まれ、前記ライトポインタ情報は１ページの書き込みに応じてインクリメントされる請求項１記載の半導体記憶装置。
【請求項６】
不揮発性メモリを含む半導体記憶装置の制御方法であって、
前記不揮発性メモリのリードコマンドを発行することと、
前記リードコマンドに応じて前記不揮発性メモリから読み出されたデータをユーザデータと管理データとに分離することと、
前記不揮発性メモリのライトアドレスを管理するライトポインタ情報により示されるアドレスを前記分離することにより得られた管理データに対して加えてライトコマンドを発行することと、
前記ライトコマンドを前記不揮発性メモリに与え、データを前記不揮発性メモリに書き込むことと、
を具備する制御方法。
【請求項７】
前記書き込み処理の開始時に、前記不揮発性メモリから読み出されたデータが有効か無効かを判定することをさらに具備し、
前記書き込むことは、前記不揮発性メモリから読み出されたデータが無効であることを判定すると、無効なデータを前記不揮発性メモリに書き込む請求項６記載の制御方法。
【請求項８】
前記書き込み処理の開始時に、前記不揮発性メモリから読み出されたデータが有効か無効かを判定することをさらに具備し、
前記不揮発性メモリから読み出されたデータが無効であることを判定すると、前記書き込むことは中止される請求項６記載の制御方法。
【請求項９】
前記書き込み処理後、正引きテーブルを更新することをさらに具備する請求項６記載の制御方法。
【請求項１０】
前記書き込み処理後、前記不揮発性メモリのページ毎のデータの有効、無効を示すデータを示す有効ページ管理テーブルを更新することをさらに具備する請求項６記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＮＡＮＤ型フラッシュメモリ等の不揮発性メモリを含む半導体記憶装置及び半導体記憶装置の制御方法に関する。
【背景技術】
【０００２】
一般に不揮発性メモリ、例えばフラッシュメモリはデータの書き込みの際に上書きができないので、データの書き込みや削除を繰り返すと、分断された不要な領域が削除されずに残る。この不要な領域を消去し、使用している領域を連続した領域に纏める処理はコンパクションと呼ばれる。従来の半導体記憶装置のコンパクション処理は例えば特許文献１に記載されている。
【０００３】
特許文献１記載の記憶装置は、内部において、３２ビットのメモリバスに１６ビットの入出力を持つ２チップの８ギガビットのＮＡＮＤ型フラッシュメモリが並列に接続される。２つのチップは読み出しや書き込みにおいて同時並列にアクセスされる。すなわち、メモリバスは１６ビットバスを２チャンネル備えた構成となっている。各フラッシュメモリは書き込みや読み出しのアクセスを例えば４キロバイトのページ単位で行う。従って、実ページサイズとしては８キロバイトが一括アクセスされることになる。
【０００４】
記憶装置に内蔵されたＲＡＭには、プログラムを実行するためのコードエリアやワーキングエリアが設けられており、さらにページ単位の仮想アドレスを管理するアドレス変換テーブル、正常な空きブロックを検索する検索テーブル、各ブロックの無効ページ数を管理するカウンタテーブル、ライトポインタ、無効ページ総数のカウンタ、未使用ページカウンタ等が構築されている。
【０００５】
データの更新（書き込み）動作は追記型書き込みが行われる。追記型書き込みが行われると、更新前のデータが格納されている物理ページアドレス、例えば“０ｘ００６０Ｂ０”に相当するページ領域はアドレス変換テーブルの物理アドレスフィールドから削除され、外からアクセスできなくなる。即ち、無効化される。
【０００６】
しかし、それらにはデータが書き込まれており、そのままでは空き領域として使用することもできない。このような書き込みを何度も繰り返すと、多くの無効ページ領域が発生する。それらは再度空き領域として使用できるよう、消去して回復させる必要がある（コンパクションに相当）。また、その場合、消去ブロック“０ｘ００６０”に残された他の有効データは退避させる必要がある。
【０００７】
この回復処理は、例えばまず対象ブロック内の有効データを、更新の際と同様に一旦ページバッファに読み出してから、他のブロックの空き領域に追記で書き込んでいき、それによって実質的な退避を行えばよい。すなわち、有効ページを仮更新することで、その元領域を全て無効化する。その後、対象ブロックを消去することによって、回復処理が実施される。
【０００８】
この回復処理は記憶装置の待機時やシステムのアイドル時に自動的に実施することができる。しかし、多くの未使用領域が残っており僅かな無効ページしか存在しない状態で無理に回復処理を実行しても、殆ど効果は得られない。一方、いつまでも回復処理をせぬまま放置すると、未使用領域が不足し、アクセスレイテンシィとなる。そのため、本当に回復処理を実行すべきか否かを判定し、かつ回復処理の対象ブロックを選定する機能がシステムのどこかに必要になる。
【０００９】
そこで、上記回復処理と、それを実行するか否かの判定、及び回復対象ブロックの選択をひとまとまりの作業グループとみなして回復シーケンスとし、記憶装置に実装しておく。そして、ホストシステムからの回復処理実行コマンドに応じて、あるいは記憶装置が待機状態に入った際に自動的に回復シーケンスを実行する。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００８−１４６２５３号公報（段落００５０、００５１、００６６、００６７、００７２−００７５）
【発明の概要】
【発明が解決しようとする課題】
【００１１】
このように特許文献１記載の装置は、回復処理と、それを実行するか否かの判定、及び回復対象ブロックの選択をひとまとまりの回復シーケンスとして記憶装置に実装しておき、システムからの回復処理実行コマンドに応じて回復シーケンスを実行するようにしている。フラッシュメモリにおける無効ページの回復作業によってフラッシュメモリの使用効率を向上させることができる。
【００１２】
しかしながら、この装置では回復シーケンスはＣＰＵのソフトウェアとして実行されている為、１つの回復シーケンスを実行するにもＣＰＵは複数の処理を行う必要がある。回復処理の実行中にソフトウェアの介入が複数はいることによりＣＰＵの処理性能が劣化し、システム全体でのパフォーマンス低下が生じるという課題がある。
【課題を解決するための手段】
【００１３】
本発明の一態様による半導体記憶装置は、
不揮発性メモリのコマンドをキューイングするキューイングバッファと、
前記不揮発性メモリのリードコマンドを発行するリード手段と、
前記リード手段により前記不揮発性メモリから読み出されたデータをユーザデータと管理データとに分離する分離手段と、
前記不揮発性メモリのライトアドレスを管理するライトポインタ情報により示されるアドレスを前記分離手段により得られた管理データに対して加えてライトコマンドを発行するライトコマンド発行手段と、
前記ライトコマンド発行手段により発行し、キューイングバッファへ自動でキューイングし、キューから取り出されたライトコマンドを前記不揮発性メモリに与え、データを前記不揮発性メモリに書き込むライト手段と、を具備する。
【発明の効果】
【００１４】
本発明の一態様によれば、ＣＰＵからの１コマンドでコンパクション動作が実行されるので、ＣＰＵの処理負荷の低減が可能になるとともに、途中でソフトウェア処理が介入せず、システム全体の処理能力が高くなる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態に係るフラッシュメモリコントローラおよびその周辺システムでの位置づけを示すブロック図。
【図２】フラッシュメモリコントローラ内のフラッシュメモリ制御部、データフロー制御回路の詳細なブロック図である。
【図３】コンパクション動作時のＮＡＮＤフラッシュメモリコントローラのデータの流れを示す図。
【図４】ＮＡＮＤフラッシュメモリコントローラのコンパクション動作を示すフローチャート。
【図５】メインメモリに設けられる有効ページ管理テーブルを示す図。
【図６】ＮＡＮＤフラッシュメモリコントローラのコンパクション動作に関する追記ポインタの動作と正引きテーブルの更新を示す図。
【発明を実施するための形態】
【００１６】
以下、図面を参照して本発明の実施の形態について詳細に説明する。
【００１７】
図１は一実施形態の構成を示すブロック図である。本実施形態は複数の不揮発性メモリ、例えばＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎを含む。ＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎは例えば半導体ドライブ(Solid State Drive: ＳＳＤ)の記憶部を構成する。ＮＡＮＤ型フラッシュメモリ８１、８２…８ｎの各々は例えば２〜１６個のメモリチップからなる。ＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎはフラッシュメモリコントローラ１に接続される。フラッシュメモリコントローラ１は内部バス２ｂに接続されたＣＰＵ２と、メインメモリ３と、フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６と、データフロー制御回路７と、ホストＩ／Ｆ４とを具備する。
【００１８】
フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６はＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎに接続され、ＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎへのアクセスを制御する。具体的には、フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６はＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎに対してアドレスやデータ制御を行う。フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６はＣＰＵ２からのコマンドを受理し、ＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎとメインメモリ３間のデータ転送を実施する。フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６は内部で論理ブロックアドレス（Logical Block Address: ＬＢＡ）情報や各種属性（フラグ）情報を保持する。
【００１９】
ホストＩ／Ｆ４はプロトコルＳＡＳやＳＡＴＡによりホストシステム１０に接続され、データフロー制御回路７を介して、ホスト・ＮＡＮＤ型フラッシュメモリ間でやりとりされるデータのフロー制御を行う。ホストＩ／Ｆ４はホストシステム１０からはLBAでアクセスされる。メインメモリ３は例えばＤＲＡＭが使用され、退避データや正引きテーブル、論物変換テーブルを格納する。
【００２０】
フラッシュメモリコントローラ１の内部バス２ｂには外付けのブートＲＯＭ９も接続される。ブートＲＯＭ９は一例としてフラッシュメモリが使用され、ファームウェアを含む。ファームウェアはＣＰＵ２を使用し、フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６内部へのＩ／ＯコマンドアクセスによりＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎへのリードコマンド、ライトコマンドの発行を行う。ファームウェアはＲＯＭ９にプログラムされた内容が、システム電源起動時に、ＣＰＵ２内部の一時記憶部もしくはメインメモリ３に転送されて動作するものとする。
【００２１】
図２はフラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６、データフロー制御回路７の詳細なブロック図である。フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６はＩ／Ｏバッファ２４を介してＮＡＮＤ型フラッシュメモリ８へアクセスする。内部バス２ｂからのライトデータはデータバッファ３８、データ処理回路３２を介してＩ／Ｏバッファ２４に供給され、Ｉ／Ｏバッファ２４からのリードデータはデータ処理回路３２、データバッファ３８を介して内部バス２ｂに供給される。
【００２２】
ＣＰＵ２からのリードコマンド、ライトコマンドは内部バス２ｂを介してコマンドキュー２６に書き込まれる（コマンド投入）。ここでのコマンドフォーマットはフラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６が処理しやすいフォーマットであればよく、ハードウェア実装に依存している。本特許の要ではないためここでは特に言及しないコマンドキュー２６にコマンドが投入されると、コマンド処理回路２８はエントリされたコマンドをコマンドキュー２６から取り出し、コマンドシーケンサ３０にコマンドを発行して起動をかける。
【００２３】
ＣＰＵ２からコンパクションコマンドが発行されると、コマンドキュー２６にはリードコマンドとして投入される。コマンド処理回路２８はコマンドキュー２６からリードコマンドを取り出して、コマンドシーケンサ３０にコマンド発行をして起動をかけ、その後、Ｉ／Ｏバッファ２４を介して、ＮＡＮＤフラッシュメモリ８の該当ブロックからデータをリードする。ＮＡＮＤフラッシュメモリ８内の各ブロックの各ページのデータが有効であるか無効であるかはメインメモリ３内の有効ページ管理テーブル（後述）により管理されており、ＣＰＵ２は有効なデータを含むページに対してのみリードアドレスを与え、有効なデータのみリードする。
【００２４】
コマンドシーケンサ３０は複数のＮＡＮＤ型フラッシュメモリからいずれかの選択と、ＮＡＮＤ型フラッシュメモリ８へのアクセスコマンド発行を行う。コマンドシーケンサ３０はＮＡＮＤ型フラッシュメモリ８のアクセスの際、データ処理回路３２に対してメインメモリ３へのデータ転送リクエスト（ＬＢＡ／属性を伴う場合と、伴わない場合がある）を実施し、データ処理回路３２はデータ転送が完了するとコマンドシーケンサ３０に終了レスポンス（ＬＢＡ／属性を伴う）を返す。コマンドシーケンサ３０は終了コマンドをコマンド処理回路２８に通知すると、コマンド処理回路２８はテーブル更新回路３４に対して終了コマンドを送付する。この時、データ処理回路３２はＮＡＮＤ型フラッシュメモリ８からリードした有効なページのデータをユーザデータとＬＢＡ情報、その他後続のライト（コマンドキュー２６内のリードコマンドに後続するライトコマンド）を行うために必要な属性データとに分離し、ＬＢＡ／属性データをコマンド処理回路２８に終了レスポンスと共に渡す。属性データの一例としては、データにエラー訂正符号化（ＥＣＣ）によるデータのチェックを行うか否かを示す情報やデータ長、暗号の有無などがある。
【００２５】
コマンドキュー２６内の全てのリードコマンド終了後に、コマンドキュー２６内のライト処理(後続のライト処理と称する)へ移る。この詳細は図３を参照して後述する。コマンド処理回路２８はコマンドキュー２６内のライトコマンドを取り出して、コマンドシーケンサ３０にコマンド発行をして起動をかける。その後、コマンド処理回路２８はＩ／Ｏバッファ２４を介してＮＡＮＤフラッシュメモリ８へのデータのライトを行う。この時、コマンドシーケンサ３０は、データ処理回路３２に対してメインメモリ３からのデータ転送要求を実施し、ＬＢＡ／属性データ、ライトアドレスを用いて、データライト処理を行う。ライトアドレスはフラッシュメモリコントローラ１内で生成する。具体的には、ホスト１０から供給されたＬＢＡに基づいて後述の論物変換テーブルから物理アドレスが計算される。ここでは、ライトアドレスは追記型アルゴリズムに従い生成される。追記型アルゴリズムは、１回のライト時に順次ポインタを順次進める制御をするため、ライトアドレスは容易に生成できる。
【００２６】
データ処理回路３２はデータ転送が完了すると、コマンドシーケンサ３０に終了レスポンスを返す。その後、コマンド処理回路２８は終了通知と正引きテーブル更新に必要な情報をテーブル更新回路３４へ渡し、メインメモリ３上のデータを更新する。テーブル更新回路３４は終了したコマンドに係るメインメモリ３上のテーブル更新を実施するモジュールであり、ライト終了時の有効ページ管理ビットマップテーブルの更新処理及び、その他の管理テーブルの更新処理を実施する。更新処理の詳細は後述する。テーブル更新回路３４はすべての処理を終了後、レスポンスキュー３６に終了コマンドとステータスを送信してハードウェアとしてのコマンド処理が完了する。ＣＰＵ２はレスポンスキュー３６をリードすることによってコマンド実行結果を確認することができる。
【００２７】
図３はこのように構成されたフラッシュメモリコントローラ１（特に、フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部６とデータフロー制御回路７）によるコンパクション動作の際のデータの流れの概要を示す図であり、図４は図３の動作を実現するためのフラッシュメモリコントローラ１のフローチャートである。図４は左側の２つのブロック（ブロック＃１０、＃２０）がＣＰＵ１０の処理であり、残りのブロック（ブロック＃１０２〜＃１１８）がフラッシュメモリコントローラ１（ハードウェア）の処理である。
【００２８】
ＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎは所定のバイト、例えば２１１２バイト毎に１ページを構成し、所定のページ、例えば６４ページが１ブロックを構成する。各ブロックには有効なページと無効なページが混在する。有効なページとは、当該ページ内に書き込まれたデータが存在し、そのデータは有効であることを示している。無効なページとは、当該ページ内に何も書き込まれていないか、もしくは当該ページ内に以前書き込まれていたデータが無効になった場合を示している。このＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎの各ページが有効（Valid）か無効（Invalid）かを示すための有効ページ管理テーブル５２がメインメモリ３内に設けられる。このテーブル５２は図５に示すようにブロック毎の各ページの有効／無効を示すビットマップテーブルである。ＮＡＮＤ型フラッシュメモリ８１、８２、…８ｎへの書き込みが正常に終了し、コマンドステータスをCPUに返す前に、有効ページ管理テーブル５２の有効／無効状態が更新される。メインメモリ３には論理アドレスと物理アドレスの変換のための論物テーブル５４、論理アドレスの順に有効ブロックの物理アドレスを並べた正引きテーブル５６が設けられる。
【００２９】
先ず、ＣＰＵ２からＮＡＮＤ型フラッシュメモリ８の物理アドレスを指定してコンパクションコマンドを発行する（図４のブロック＃１０）。この後、ＣＰＵ１０はコンパクション処理が終了するまで、待機状態となる。実際の実施例として、コンパクション処理中にホストからのデータアクセス(ユーザーデータリードまたはライト)が発生することが想定されるため、コンパクションの処理は割り込みによる検知を行っている。また、コンパクション処理の最中にコンパクション対象領域のデータが無効になるケースも存在し、その場合の処理を考慮している。
【００３０】
メモリコントローラ１はＮＡＮＤ型フラッシュメモリ８の指定された物理アドレスのブロックの有効ページからデータを読み出す（ブロック＃１０２）。読み出されたデータはデータ処理回路３２によりユーザデータと管理データ（ＬＢＡ／属性データ）とに分離される（ブロック＃１０４）。ユーザデータはメインメモリ３のユーザデータ領域に転送される（ブロック＃１０８）。
【００３１】
一方、追記ポインタ５８（図２のコマンドシーケンサ３０に含まれる）によりライトアドレスが算出される（ブロック＃１０６）。コマンド処理回路２８はライトアドレスとＬＢＡ／属性データとからライトコマンドを生成し（ブロック＃１１０）、ライトコマンドをコマンドキュー２６に投入する（ブロック＃１１２）。
【００３２】
コマンドキュー２６から読み出されたライトコマンドにより、メインメモリ３から転送されたユーザデータがＮＡＮＤ型フラッシュメモリ８の指定されたアドレスにライトされる（ブロック＃１１４）。ブロック＃１１４のように、ブロック＃１０２で実行したリードコマンドに後続してコマンドキュー２６に配置されているライトコマンドの実行（後続のライト）時には、読み出したリードデータが、ライトを行う直前の時点で有効か無効かを再度判断する必要がある。これは、リード時は有効であったデータがコンパクション処理中に無効に変化する可能性があり、それに対応するためである。例えば、ホスト１０によりユーザデータを上書きした場合は、ＮＡＮＤフラッシュメモリ８上では以前にユーザデータが書かれていた物理アドレスとは別の物理アドレスにデータが書き込みされ、以前にユーザデータが書かれていたＮＡＮＤフラッシュメモリ８の物理アドレスにそれまでに存在していたデータ（リードデータ）は無効となる。このため、読み出したリードデータが無効になっている時は、無効なデータ(オール“０”)が書き込まれる（“０”パディング）。これは、今回の書き込みは無効であるので、書き込み動作自体を中止しても良いが、コマンドキュー２６からライトコマンドが取り出された後に中止するのはハードウェア的に困難な場合があるので、書き込むデータを意味の無いものにして実質的に書き込みを中止し、ハードウェアの処理を簡単にするためである。
【００３３】
ブロック＃１１６でテーブル更新回路３４はメインメモリ３内の正引きテーブル５６を更新する。その後、ブロック＃１１８でテーブル更新回路３４はレスポンスキュー３６に終了コマンドとステータスを送信してハードウェアとしてのコマンド処理が完了する。
【００３４】
ＣＰＵ２はレスポンスキュー３６をリードすることによってコマンド実行ステータスを確認する（ブロック＃２０）。
【００３５】
図６は追記ポインタ５８の動作と正引きテーブル５６の更新の様子を示す図である。ある時刻において、ＮＡＮＤフラッシュメモリ８の有効／無効ページの状態と正引きテーブル５６の状態は図６の左側の状態（更新前）であるとする。追記ポインタ５８の指す位置はブロック＃５のページ＃３とする。この状態において、コンパクション対象としてブロック＃０が選ばれたとする。コンパクション対象は有効ページ管理テーブル５２の情報に基づいて、有効ページを含み最も数が小さいブロックが選ばれる。有効ページ管理テーブル５２は２次元のビットマップ状に配置されているので、コンパクション対象候補のブロックの列挙を容易に行える。ブロック＃０の有効ページはページ＃１のみである。
【００３６】
コンパクションのためには、最初にフリーブロック（全てのページが無効）＃６を取得して、そのブロックの先頭ページから順番に有効ページのデータをコピーする。ブロック＃０のページ＃１のデータをブロック＃６のページ＃０にコピーした状態を図６の右側に示す。次に、コピーしたデータ（ブロック＃０のページ＃１）のＬＢＡの位置がコピー先の位置（ブロック＃６のページ＃０）を示すように正引きテーブル５６を更新する。さらに、有効ページがなくなったブロック＃０をフリーブロック扱いにするために有効ページ管理テーブル５２を更新（ブロック＃０のページ＃１を無効化）する。ブロック＃０のページ＃１のデータをブロック＃６のページ＃０にコピーしたことにより、追記ポインタ５８はブロック＃６のページ＃１に移る。このように、ブロック＃５のページ＃３が無効から有効に変わったのは、コンパクション処理と平行して動作したユーザーWrite処理によるものである。本特許の本質でない為、詳細は割愛するが、追記ポインタの１加算、それまで追記ポインタが指していた位置へのデータ書き込み、正引きテーブルの更新(blk#5-page#3)された様子も示されている。図では、かつLBA重複があったため、そのLBA(blk#1-page#0)が無効にされた様子も示されている。
【００３７】
以上説明したように、第１の実施の形態によれば、ＮＡＮＤフラッシュメモリ８のコンパクション処理を行う場合、ＣＰＵ２は物理ブロックアドレスを指定してコンパクションコマンドを発生するだけでよい。フラッシュメモリコントローラ１はこのコマンドを受けると、当該ブロックから有効ページのデータをリードし、リードデータから分離した管理データ（ＬＢＡ／属性データ）に対して追記ポインタにより発生したライトアドレスを追加してライトコマンドを発生する。このライトコマンドに対してメインメモリからのユーザデータを付加・結合してＮＡＮＤフラッシュメモリ８の指定アドレスへページ単位で書き込む。書き込み後、データがリードされたブロックが無効化され、正引きテーブルが更新される。これにより、ＣＰＵ２からの１コマンドでコンパクション動作（リード処理、後続のライト処理、正引きテーブルの更新処理）を行うことができＣＰＵ処理負荷の低減が可能となるとともに、途中でソフトウェ処理が入らないため、システム全体の処理能力が速くなる。
【００３８】
書き込みの直前にリードデータが無効となっているか否かを確認し、無効となっているときは、書き込みを中止する、あるいは無効なデータを書き込むことにより、コンパクションの最中にリードデータが無効になった場合にも対処できる。
【００３９】
なお、この発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。例えば、本発明はホスト１０により制御される半導体ドライブ(Solid State Drive: ＳＳＤ)を例に説明したが、これに限らず、シリコンオーディオ機器、メモリメディアカードなどに適用することもできる。
【００４０】
また、本発明は、コンピュータに所定の手段を実行させるため、コンピュータを所定の手段として機能させるため、コンピュータに所定の機能を実現させるため、あるいはプログラムを記録したコンピュータ読取り可能な記録媒体としても実施することもできる。
【００４１】
また、コンパクションに限らず、不揮発性メモリの特性である一定期間毎のデータ移動(定期リフレッシュ)への応用や、ＲＭＷ(リード・モディファイ・ライト)への応用も可能である。
【符号の説明】
【００４２】
１…フラッシュメモリコントローラ、２…ＣＰＵ、３…メインメモリ、４…ホストＩ／Ｆ、６…フラッシュメモリ制御部及びＮＡＮＤフラッシュメモリＩ／Ｆ部、７…データフロー制御回路、８…ＮＡＮＤ型フラッシュメモリ、９…ブートＲＯＭ、２６…コマンドキュー、２８…コマンド処理回路、３０…コマンドシーケンサ、３２…データ処理回路、３４…テーブル更新回路。
【図１】
2011175632.tif 000003
【図２】
2011175632.tif 000004
【図３】
2011175632.tif 000005
【図４】
2011175632.tif 000006
【図５】
2011175632.tif 000007
【図６】
2011175632.tif 000008