(57)【特許請求の範囲】
【請求項１】
複数チャネルの不揮発性メモリにデータを書き込むライトコマンドであって、通常ライトコマンド及びリード・モディファイ・ライト（ＲＭＷ）動作を実行する場合のＲＭＷ用ライトコマンドを含む前記ライトコマンドを処理するライト処理手段と、
通常リードコマンドまたは前記ＲＭＷ動作を実行する場合のＲＭＷ用リードコマンドを処理するリード処理手段と、
前記リード処理手段及び前記ライト処理手段を制御する制御手段とを具備し、
前記制御手段は、
フラッシュコマンドを処理する場合に、前記通常リードコマンドよりも前記ＲＭＷ用リードコマンドの処理を優先的に実行するように前記リード処理手段を制御し、
前記ＲＭＷ用リードコマンド処理の完了後に移行する前記ＲＭＷ用ライトコマンドまたは前記通常ライトコマンドの処理を含むライトフラッシュ処理を前記ライト処理手段に実行させるように制御し、
前記フラッシュコマンドを処理する場合以外のライトコマンドの処理では、マルチチャネルプログラム方式のライトコマンド処理を前記ライト処理手段に実行させるように制御するデータ記憶装置。
【請求項２】
前記リード処理手段は、
前記通常リードコマンド及び前記ＲＭＷ用リードコマンドを格納するリードコマンドキュー手段を有し、
通常リード処理では、前記リードコマンドキュー手段から実行順に前記ＲＭＷ用リードコマンドまたは前記通常リードコマンドを取り出して処理し、
前記フラッシュコマンドを処理する場合には、前記リードコマンドキュー手段から前記ＲＭＷ用リードコマンドを優先的に取り出して処理するように構成されている請求項１に記載のデータ記憶装置。
【請求項３】
前記ライト処理手段は、
前記フラッシュコマンドを処理する場合に、準備完了した前記ＲＭＷ用ライトコマンドを含むライトコマンドを強制的に処理する前記ライトフラッシュ処理を実行するように構成されている請求項１または請求項２のいずれか１項に記載のデータ記憶装置。
【請求項４】
前記制御手段は、
前記ＲＭＷ用リードコマンドの中で処理完了前のコマンドを検知する手段と、
前記フラッシュコマンドを処理する場合に、検知された処理完了前の前記ＲＭＷ用リードコマンドの全てを処理完了させて、該当する全ての前記ＲＭＷ用ライトコマンドを生成する手段と
を含む請求項１から請求項３のいずれか１項に記載のデータ記憶装置。
【請求項５】
前記リード処理手段は、
前記通常リード処理では、前記リードコマンドキュー手段から実行順に前記ＲＭＷ用リードコマンドまたは前記通常リードコマンドを取り出して格納する第１のバッファ手段と、
前記フラッシュコマンドを処理する場合には、優先的に実行するために、前記リードコマンドキュー手段から前記ＲＭＷ用リードコマンドを取り出して格納する第２のバッファ手段とを有する請求項２に記載のデータ記憶装置。
【請求項６】
前記ライト処理手段は、
前記ＲＭＷ用ライトコマンド及び前記通常ライトコマンドを格納するライトコマンドキュー手段を有し、
前記フラッシュコマンドを処理する場合以外の通常ライト処理では、前記ライトコマンドキュー手段において全てのチャネル分の前記ＲＭＷ用ライトコマンドまたは前記通常ライトコマンドが準備された場合に、前記マルチチャネルプログラム方式のライトコマンド処理を実行する請求項３に記載のデータ記憶装置。
【請求項７】
前記ライト処理手段は、
前記フラッシュコマンドを処理する場合に、準備完了して前記ライトコマンドキュー手段に格納された前記ＲＭＷ用ライトコマンド又は前記通常ライトコマンドを強制的に処理する前記ライトフラッシュ処理を実行する請求項６に記載のデータ記憶装置。
【請求項８】
複数チャネルの不揮発性メモリを有するデータ記憶装置に適用するメモリ制御装置であって、
前記複数チャネルの不揮発性メモリにデータを書き込むライトコマンドであって、通常ライトコマンド及びリード・モディファイ・ライト（ＲＭＷ）動作を実行する場合のＲＭＷ用ライトコマンドを含む前記ライトコマンドを処理するライト処理手段と、
通常リードコマンドまたは前記ＲＭＷ動作を実行する場合のＲＭＷ用リードコマンドを処理するリード処理手段と、
前記リード処理手段及び前記ライト処理手段を制御する制御手段とを具備し、
前記制御手段は、
フラッシュコマンドを処理する場合に、前記通常リードコマンドよりも前記ＲＭＷ用リードコマンドの処理を優先的に実行するように前記リード処理手段を制御し、
前記ＲＭＷ用リードコマンド処理の完了後に移行する前記ＲＭＷ用ライトコマンドまたは前記通常ライトコマンドの処理を含むライトフラッシュ処理を前記ライト処理手段に実行させるように制御し、
前記フラッシュコマンドを処理する場合以外のライトコマンドの処理では、マルチチャネルプログラム方式のライトコマンド処理を前記ライト処理手段に実行させるように制御するメモリ制御装置。
【請求項９】
前記リード処理手段は、
前記通常リードコマンド及び前記ＲＭＷ用リードコマンドを格納するリードコマンドキュー手段を有し、
通常リード処理では、前記リードコマンドキュー手段から実行順に前記ＲＭＷ用リードコマンドまたは前記通常リードコマンドを取り出して処理し、
前記フラッシュコマンドを処理する場合には、前記リードコマンドキュー手段から前記ＲＭＷ用リードコマンドを優先的に取り出して処理するように構成されている請求項８に記載のメモリ制御装置。
【請求項１０】
複数チャネルの不揮発性メモリを有するデータ記憶装置に適用し、
複数チャネルの不揮発性メモリにデータを書き込むライトコマンドであって、通常ライトコマンド及びリード・モディファイ・ライト（ＲＭＷ）動作を実行する場合のＲＭＷ用ライトコマンドを含む前記ライトコマンドを処理し、
通常リードコマンド及び前記ＲＭＷ動作を実行する場合のＲＭＷ用リードコマンドを含むリードコマンドを処理し、
前記リードコマンド処理及び前記ライトコマンド処理を制御するメモリ制御方法であって、
フラッシュコマンドを処理する場合に、前記通常リードコマンドよりも前記ＲＭＷ用リードコマンドの処理を優先的に実行するように制御し、
前記ＲＭＷ用リードコマンド処理の完了後に移行する前記ＲＭＷ用ライトコマンドまたは前記通常ライトコマンドの処理を含むライトフラッシュ処理を実行させるように制御し、
前記フラッシュコマンドを処理する場合以外のライトコマンドの処理では、マルチチャネルプログラム方式のライトコマンド処理を実行させるように制御するメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを記憶媒体とするデータ記憶装置に関する。
【背景技術】
【０００２】
近年、データ記憶装置として、書き換え可能な不揮発性メモリであるNAND型フラッシュメモリ（以下、単にフラッシュメモリと表記する場合がある）を記憶媒体とするＳＳＤ（solid state drive）の開発が推進されている。
【０００３】
一般的に、ＳＳＤでは、複数のチャネル単位に設けられる各フラッシュメモリに対して、データを並列に書き込むマルチチャネルプログラム方式のライト動作が行なわれる。マルチチャネルプログラム方式のライト動作では、全チャネルに書き込むデータ（ユーザデータ）がバッファメモリに準備完了した時点で、全チャネルのフラッシュメモリに対して並列に書き込むことが可能となる。
【０００４】
換言すれば、全チャネルに書き込むデータの準備ができない場合には、並列での書き込みができないため、ライト動作が停滞する事態が発生することがある。このような状態で、例えばＳＳＤに対する主電源が遮断される場合に、バッファメモリに準備されているデータの消失を回避するために、停滞しているライト動作を強制的に実行させて、フラッシュメモリに対する書き込みを完了させる機能が要求される。このような機能を、ライトフラッシュ（Write Flush）機能と呼ぶ。また、このライトフラッシュ機能を実現するライト動作（ライトフラッシュ処理）を実行させるコマンドを、フラッシュコマンドと呼ぶ。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２１１７３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来のＳＳＤでは、マルチチャネルプログラム方式によりライト動作の処理効率化が図られて、ライトフラッシュ機能によりデータの消失を回避することが実現されている。ライトフラッシュ処理は、キャパシタなどの予備電源により実行されるため、効率的（または短時間）に処理を完了して保護すべきデータの消失を確実に回避することが必要である。
【０００７】
一方で、ＳＳＤでは、リード処理を含むリード・モディファイ・ライト（read modify write）動作と呼ばれるライト動作も、通常のライト動作と共に実行されることがある。このため、リード・モディファイ・ライト動作を含めたマルチチャネルプログラム方式でのライトフラッシュ処理を効率的に実行することにより、保護すべきデータの消失を確実に回避することが要求される。
【０００８】
本発明の目的は、マルチチャネルプログラム方式において、リード・モディファイ・ライト動作が実行される場合でも、ライトフラッシュ処理を効率的に実行できるデータ記憶装置を提供することにある。
【課題を解決するための手段】
【０００９】
実施形態によれば、データ記憶装置は、ライト処理手段と、リード処理手段と、制御手段とを具備する。前記ライト処理手段は、複数チャネルの不揮発性メモリにデータを書き込むライトコマンドであって、通常ライトコマンド及びリード・モディファイ・ライト（ＲＭＷ）動作を実行する場合のＲＭＷ用ライトコマンドを含む前記ライトコマンドを処理する。前記リード処理手段は、通常リードコマンドまたは前記ＲＭＷ動作を実行する場合のＲＭＷ用リードコマンドを処理する。前記制御手段は、フラッシュコマンドを処理する場合に、前記通常リードコマンドよりも前記ＲＭＷ用リードコマンドの処理を優先的に実行するように前記リード処理手段を制御し、前記ＲＭＷ用リードコマンド処理の完了後に移行する前記ＲＭＷ用ライトコマンドまたは前記通常ライトコマンドの処理を含むライトフラッシュ処理を前記ライト処理手段に実行させるように制御する。また、前記制御手段は、前記フラッシュコマンドを処理する場合以外のライトコマンドの処理では、マルチチャネルプログラム方式のライトコマンド処理を前記ライト処理手段に実行させるように制御する。
【図面の簡単な説明】
【００１０】
【図１】実施形態に関するデータ記憶装置の構成を説明するためのブロック図。
【図２】実施形態に関するフラッシュメモリコントローラの要部を説明するためのブロック図。
【図３】実施形態に関するコマンド処理モジュールの動作を説明するためのフローチャート。
【発明を実施するための形態】
【００１１】
以下図面を参照して、実施形態を説明する。
【００１２】
［データ記憶装置の構成］
図１に示すように、実施形態のデータ記憶装置は、NAND型フラッシュメモリ（flash memory、単にフラッシュメモリと表記する）２１を記憶媒体として使用するマルチチャネルプログラム方式のＳＳＤ（solid state drive）である。ＳＳＤは、フラッシュメモリコントローラ（以下、単にメモリコントローラと表記する場合がある）１０と、複数のフラッシュメモリ２１をチャネル毎にパッケージ化したメモリパッケージ（以下、単にチャネルと表記する）２０と、ＤＲＡＭ（dynamic random access memory）からなるバッファメモリ２２とを有する。
【００１３】
メモリコントローラ１０は、コマンド処理モジュール１１と、複数のチャネル２０に対応するNANDメモリインターフェース１２と、システム制御モジュール１３と、ＤＲＡＭインターフェース１４と、ホストインターフェース１５と、バス１６とを有する。メモリコントローラ１０は、NANDメモリインターフェース１２を介して、全チャネル２０分のライト動作の準備が完了した時点で、各チャネル２０のフラッシュメモリ２１に対してデータ（ユーザデータ）を並列に書き込みを行うマルチチャネルプログラム機能を有する。
【００１４】
システム制御モジュール１３は、NANDメモリインターフェース１２を介して、各フラッシュメモリ２１に対するデータの書き込み動作及びデータの読み出し動作を制御する。ＤＲＡＭインターフェース１４は、バッファメモリ２２とバス１６間のデータ転送を制御する。即ち、システム制御モジュール１３は、ＤＲＡＭインターフェース１４を介してバッファメモリ２２にデータを書き込み、バッファメモリ２２からデータを読み出す。ホストインターフェース１５は、ホストデバイス３０とバス１６間のデータ又はコマンドの転送を制御する。ホストデバイス３０は、例えばパーソナルコンピュータである。
【００１５】
コマンド処理モジュール１１は、ホストデバイス３０から発行される各種のコマンドを処理し、コマンド処理に応じてNANDメモリインターフェース１２に対してライトコマンド又はリードコマンドを転送する。
【００１６】
本実施形態では、ライトコマンドは、通常のライト動作を実行させる通常ライトコマンド（WRITE）以外に、後述するリード・モディファイ・ライト（read modify write）動作（以下、ＲＭＷ動作と表記する）のライト動作を実行させるＲＭＷ用ライトコマンド（RMW用WR）を含む。また、リードコマンドは、通常のリード動作を実行させる通常リードコマンド（READ）以外に、ＲＭＷ動作に含まれるリード動作を実行させるＲＭＷ用リードコマンド（RMW用RD）を含む。
【００１７】
図２に示すように、コマンド処理モジュール１１は、コマンド解釈モジュール４０と、ＲＭＷ判定モジュール４１と、クレジット（credit）カウンタ（以下、Ｃ−カウンタ）４２と、リードコマンドキュー４３と、リードコマンドバッファ４４と、ＲＭＷ用リードコマンドバッファ４５とを有する。
【００１８】
さらに、コマンド処理モジュール１１は、ライトコマンドキュー５０と、ライトコマンドカウンタ５１と、リプライ（reply）処理モジュール５２とを有する。また、コマンド処理モジュール１１は、セレクタ４６，４９、アンドゲート４７、及びオアゲート４８を含むロジック回路を有する。
【００１９】
［ライトフラッシュ処理］
以下、図２及び図３のフローチャートを参照して、コマンド処理モジュール１１の動作と共に、本実施形態のライトフラッシュ処理を説明する。
【００２０】
コマンド処理モジュール１１は、コマンド解釈モジュール４０が、ホストインターフェース１５を経由して転送されるコマンド１００を解釈し、ライトコマンド１１０、リードコマンド１１１、フラッシュ（flush）コマンド１１２のいずれかに応じたコマンド処理を実行する（ブロック３００）。ライトコマンド１１０は、前述したように、ＲＭＷ動作を実行させるＲＭＷ用ライトコマンド（RMW用WR）を含む。
【００２１】
ここで、フラッシュコマンド１１２は、ＳＳＤに供給される主電源の遮断時に、ＳＳＤのマイクロプロセッサ（ＭＰＵ）から発行される。コマンド処理モジュール１１は、フラッシュコマンド１１２に応じて、後述するライトフラッシュ処理を実行する。本実施形態では、便宜的にライトコマンド１１０またはリードコマンド１１１の実行中に、フラッシュコマンド１１２が割り込み的に発行される場合とする。
【００２２】
ＲＭＷ判定モジュール４１は、コマンド解釈モジュール４０からのライトコマンド１１０が、通常ライトコマンド（WRITE）またはＲＭＷ用ライトコマンド（RMW用WR）のいずれであるかを判定する（ブロック３０１）。ＲＭＷ判定モジュール４１は、例えば、ライトコマンドに伴う書き込みデータのサイズがフラッシュメモリ２１の通常書き込み単位（クラスタ:cluster）未満の場合には、ＲＭＷ用ライトコマンドであると判定する（ブロック３０１のＹＥＳ）。ＲＭＷ動作は、通常書き込み単位のデータの中で一部を書き換えて、残りの部分をそのまま書き戻すライト動作である。
【００２３】
ＲＭＷ判定モジュール４１により、通常ライトコマンド（WRITE）であると判定されると、当該ライトコマンド（WRITE）１２０がライトコマンドキュー５０にセット（キューイング）される（ブロック３０９）。このとき、ライトコマンドカウンタ５１は、現時点でライトコマンドキュー５０で待機状態のライトコマンド数をカウントアップする。
【００２４】
これ以降、ライトコマンド（WRITE）がライトコマンドキュー５０にキューイングされて、全チャネル分のライトコマンド（WRITE）が準備されたとする。この場合、ライトコマンドカウンタ５１は、WRITEキューFULL信号１５０を出力する（ブロック３１０のＹＥＳ）。
【００２５】
図２に示すように、セレクタ４９は、WRITEキューFULL信号１５０の出力に応じて、ライトコマンドキュー５０からのライトコマンドの出力１４０を選択する。これにより、ライトコマンドキュー５０から、各チャネルのNANDメモリインターフェース１２に対して、全チャネル分のライトコマンド（WRITE）が送信される。従って、全チャネル２０分のフラッシュメモリ２１に対してデータ（ユーザデータ）を並列に書き込むライト処理が実行される（ブロック３１２）。即ち、マルチチャネルプログラムが実行される。なお、全チャネル２０に書き込まれるデータ（ユーザデータ）は、バッファメモリ２２に格納されている。
【００２６】
以上のようなマルチチャネルプログラムが実行されると、各NANDメモリインタフェース１２は、正常にライト処理が完了したことを通知するリプライ（reply）信号１６０をリプライ処理モジュール５２に出力する。リプライ処理モジュール５２は、全チャネル２０分のライト処理が正常に完了したと判定すると、ライトコマンドカウンタ５１にリセット（reset）信号１６１を送る。
【００２７】
ライトコマンドカウンタ５１は、書き込み待機のライトコマンド（WRITE）数を管理している。従って、コマンド処理モジュール１１は、ライトコマンドカウンタ５１のリセットにより、ライトコマンドキュー５０には書き込み待機のライトコマンド（WRITE）が無いことを認識できる。
【００２８】
一方、ＲＭＷ判定モジュール４１は、コマンド１００がＲＭＷ用ライトコマンドであると判定すると、ＲＭＷ用リードコマンド（RMW用RD）１２１を生成する（ブロック３０１のＹＥＳ）。ＲＭＷ用リードコマンド（RMW用RD）１３１は、リードコマンドキュー４３にセット（キューイング）される（ブロック３０２）。このとき、Ｃ−カウンタ４２は、クレジット（credit）を１カウント分だけ消費（カウントダウン）する。コマンド処理モジュール１１は、後述するように、Ｃ−カウンタ４２の値により、実行中又は準備中の状態（fly）のＲＭＷ用リードコマンド数を認識できる。
【００２９】
ここで、コマンド解釈モジュール４０は、ホストインターフェース１５を経由して転送されるコマンド１００が通常のリードコマンド（READ）１１１であると解釈すると、リードコマンドキュー４３にキューイングする（ブロック３００，３０２）。従って、リードコマンドキュー４３には、リードコマンド（READ）とＲＭＷ用リードコマンド（RMW用RD）が到着順に格納される。
【００３０】
ここで、全チャネル分のライトコマンド（WRITE）が準備されておらず、マルチチャネルプログラムが実行できず、及び後述するフラッシュコマンド１１２も発生してない状態であるとする（ブロック３０３のＮＯ）。このような状態では、リードコマンドキュー４３から順番に、リードコマンド（READ）またはＲＭＷ用リードコマンド（RMW用RD）が該当チャネルのNANDメモリインターフェース１２に送られる。これにより、フラッシュメモリ２１からデータ（ユーザデータ）が読み出されるリード処理が実行される（ブロック３０４）。
【００３１】
具体的には、図２に示すように、リードコマンドキュー４３から順に、リードコマンド（READ）またはＲＭＷ用リードコマンド（RMW用RD）がリードコマンドバッファ４４にセットされる。リードコマンドバッファ４４にセットされたリードコマンド（READまたはRMW用RD）は、セレクタ４６，４９を経由して、各チャネルのNANDメモリインターフェース１２に送られる。但し、リードコマンドキュー４３から送信されるリードコマンド（READまたはRMW用RD）の順番は、リード要求のアドレスに応じて追い越しが発生する場合もある。
【００３２】
リプライ処理モジュール５２は、ＲＭＷ用リードコマンド（RMW用RD）のリード処理が完了すると、NANDメモリインターフェース１２からその通知であるリプライ（reply）信号１６０を受信する（ブロック３０５のＹＥＳ）。リプライ処理モジュール５２は、ＲＭＷ用ライトコマンド（RMW用WR）１６２を生成する（ブロック３０６）。
【００３３】
ＲＭＷ用ライトコマンド（RMW用WR）は、ＲＭＷ動作の第２のフェーズであるライト処理を実行するためのライトコマンドである。即ち、ＲＭＷ動作は、第１のフェーズで、書き換え対象のデータを読み出して退避する処理を実行する。この第１のフェーズでのリード処理は、ＲＭＷ用リードコマンド（RMW用RD）により実行される。第２のフェーズであるライト処理は、読み出された書き換え対象のデータの一部を書き換えた後に、書き戻す処理である。
【００３４】
Ｃ−カウンタ４２は、リプライ処理モジュール５２からのRMW用WR１６２に応じて、クレジット（credit）を１カウント分だけ回復（カウントアップ）する。さらに、ＲＭＷ用ライトコマンド（RMW用WR）は、ライトコマンドキュー５０にセット（キューイング）される（ブロック３０９）。ライトコマンドカウンタ５１は、Ｃ−カウンタ４２からのRMW用WR１３２によりライトコマンド数をカウントアップする。
【００３５】
ここで、前述したように、コマンド処理モジュール１１は、Ｃ−カウンタ４２の値により、実行中又は準備中の状態（fly）のＲＭＷ用リードコマンド数を認識できる。但し、コマンド処理モジュール１１は、Ｃ−カウンタ４２を使用しない別の方法によりＲＭＷ用リードコマンドのflyを確認してもよい。
【００３６】
Ｃ−カウンタ４２は、予めＲＭＷ用リードコマンドのfly可能な個数（例えば６４個）が設定されている。Ｃ−カウンタ４２は、ＲＭＷ用リードコマンド（RMW用RD）がリードコマンドキュー４３にセットされる度に消費（−１）される。ＲＭＷ用リードコマンドが完了してＲＭＷ用ライトコマンド（RMW用WR）が生成されると、Ｃ−カウンタ４２は回復（＋１）される。従って、Ｃ−カウンタ４２は全て回復されていれば、コマンド処理モジュール１１は、全てのRMW用RDの処理が完了して、ＲＭＷ動作のライト処理に移行していることを認識できる。
【００３７】
次に、コマンド処理モジュール１１は、コマンド解釈モジュール４０がフラッシュコマンド（Flushコマンド）１１２を受信すると、ライトフラッシュ処理を実行する（ブロック３０３のＹＥＳ）。フラッシュコマンド（Flushコマンド）は、例えばＳＳＤに供給される主電源の遮断時に発行される。フラッシュコマンド（Flushコマンド）は、ライトコマンドキュー５０に停滞しているライトコマンド（WRITEまたはRMW用WR）を強制的に実行させるライトフラッシュ（Write Flush）処理を実行させる。これにより、キャパシタなどの予備電源に切り換えて、バッファメモリ２２に準備されているデータの消失を回避することができる。
【００３８】
コマンド処理モジュール１１は、フラッシュコマンド（Flushコマンド）を受け取ると、ＲＭＷ動作のライト処理に移行する前のＲＭＷ用リードコマンド（RMW用RD）を優先的に処理する。具体的には、リードコマンドキュー４３からRMW用RDを、ＲＭＷ用リードコマンドバッファ４５にセットする（ブロック３０７）。
【００３９】
ＲＭＷ用リードコマンド（RMW用RD）は、ＲＭＷ用リードコマンドバッファ４５からセレクタ４６，４９を経由して、各チャネルのNANDメモリインターフェース１２に送られる。これにより、ＲＭＷ動作でのリード処理が実行される（ブロック３０８）。即ち、実行中又は準備中の状態（fly）のＲＭＷ用リードコマンド（RMW用RD）は、通常のリードコマンド（READ）より優先して処理される。
【００４０】
さらに、リプライ処理モジュール５２は、ＲＭＷ用リードコマンド（RMW用RD）のリード処理が完了すると、ＲＭＷ用ライトコマンド（RMW用WR）１６２を生成する（ブロック３０５，３０６）。ＲＭＷ用ライトコマンド（RMW用WR）は、ライトコマンドキュー５０にキューイングされる（ブロック３０９）。
【００４１】
コマンド処理モジュール１１は、WRITEキューFULL信号１５０が出力されていないとき、Ｃ−カウンタ４２をチェックする（ブロック３１０のＮＯ，３１１）。Ｃ−カウンタ４２の値が全て回復されていれば、実行中又は準備中の全てのＲＭＷ用リードコマンド（RMW用RD）の処理が完了し、全てのＲＭＷ用ライトコマンド（RMW用WR）がライトコマンドキュー５０にキューイングされていることを認識する（ブロック３１１のＹＥＳ）。従って、コマンド処理モジュール１１は、ライトコマンドキュー５０に格納されているライトコマンド（WRITE）及びＲＭＷ用ライトコマンド（RMW用WR）の全てを各チャネルのNANDメモリインターフェース１２に送信する。即ち、コマンド処理モジュール１１は、ライトコマンドキュー５０に停滞しているライトコマンド（WRITE及びRMW用WR）を強制的に実行させるライトフラッシュ（Write Flush）処理を実行する（ブロック３１３）。
【００４２】
具体的には、図２に示すように、セレクタ４９は、Ｃ−カウンタ４２からのクレジットフル信号１３０及びFlushコマンド１１２に応じて、ライトコマンドキュー５０からのライトコマンドの出力１４０を選択する。これにより、ライトコマンドキュー５０から、各チャネルのNANDメモリインターフェース１２に対して、ライトコマンド（WRITE及びRMW用WR）が全て送信される。なお、Ｃ−カウンタ４２は、全てのＲＭＷ用リードコマンド（RMW用RD）の処理が完了したことにより、クレジットの全てが回復したときにクレジットフル信号１３０を出力する。
【００４３】
以上のようにして本実施形態によれば、マルチチャネルプログラム方式のＳＳＤにおいて、フラッシュコマンド（Flushコマンド）が発生したときに、停滞しているライトコマンド（WRITE及びRMW用WR）を強制的に実行させるライトフラッシュ（Write Flush）処理を確実に実行することができる。従って、ＳＳＤの主電源が遮断された場合に、バッファメモリ２２内のデータが消去される事態を確実に回避することが可能となる。
【００４４】
ここで、通常ライトコマンド（WRITE）とＲＭＷ用ライトコマンド（RMW用WR）が混在している場合に、ＲＭＷ用リードコマンド（RMW用RD）の処理が完了しておらず、RMW用WRが生成されていないことがある。本実施形態は、フラッシュコマンド処理時に、ＲＭＷ用リードコマンド（RMW用RD）をＲＭＷ用バッファ４５に移動させて優先的に処理する。これにより、ＲＭＷ用ライトコマンド（RMW用WR）を効率的に準備することが可能となり、結果としてライトフラッシュ処理を高速化又は効率化を実現することができる。
【００４５】
このような効率的なライトフラッシュ処理を実現できることにより、バッファメモリ２２内のデータが消去される前に、フラッシュメモリに書き込むことにより、確実に保護することができる。また、ＳＳＤの主電源からキャパシタなどの予備電源に移行する上で、ライトフラッシュ処理を高速化により、相対的に予備電源の容量を削減することも可能となる。
【００４６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００４７】
１０…フラッシュメモリコントローラ、１１…コマンド処理モジュール、
１２…NANDメモリインターフェース、１３…システム制御モジュール、
１４…ＤＲＡＭインターフェース、１５…ホストインターフェース、１６…バス、
２０…チャネル（メモリパッケージ）、２１…NAND型フラッシュメモリ、
２２…バッファメモリ（ＤＲＡＭ）、３０…ホストデバイス、
４０…コマンド解釈モジュール、４１…ＲＭＷ判定モジュール、
４２…クレジットカウンタ（Ｃ−カウンタ）、４３…リードコマンドキュー、
４４…リードコマンドバッファ、４５…ＲＭＷ用リードコマンドバッファ、
５０…ライトコマンドキュー、５１…ライトコマンドカウンタ、
５２…リプライ（reply）処理モジュール。
【図１】
0005414656.tif 000002
【図２】
0005414656.tif 000003
【図３】
0005414656.tif 000004