"データを記憶する不揮発性メモリと、前記不揮発性メモリを制御する複数のモジュールを含み、前記各モジュール間のコマンドフロー制御を実行するメモリ制御手段とを有し、前記メモリ制御手段は、前記各モジュールの中で第1のモジュールが実行するコマンドをキューイングするコマンドキュー手段と、前記第1のモジュールからのコマンドの送信先である第2のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理するクレジット制御手段と、前記第1のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第2のモジュールに新たなコマンドとして転送する転送手段とを具備するデータ記憶装置。前記メモリ制御手段は、前記各モジュールの中で前記第1のモジュールへのコマンドの送信元である第3のモジュールから、前記第1のモジュールに対するコマンド空き情報に基づいたコマンド数のコマンドを受信し、前記コマンドキュー手段にライトするライト制御手段を、さらに含む請求項1に記載のデータ記憶装置。前記メモリ制御手段は、前記ライト制御手段により前記コマンドキュー手段にライトされたコマンドのコマンド数を格納するコマンド数記憶手段を、さらに含む請求項2に記載のデータ記憶装置。前記メモリ制御手段は、前記コマンド空き情報を格納するクレジット記憶手段を含み、前記クレジット制御手段は、前記第2のモジュールから送信されるコマンドの空き数の増減を指示する指示信号に応じて前記クレジット記憶手段のコマンド空き情報を更新する請求項1から請求項3のいずれか1項に記載のデータ記憶装置。前記第1のモジュールからの実行要求に応じて、前記コマンドキュー手段からコマンドをリードし、前記第1のモジュールに転送するリード制御手段を、さらに含む請求項1から請求項4のいずれか1項に記載のデータ記憶装置。前記メモリ制御手段は、前記各モジュールのパイプライン処理に必要な前記コマンドフロー制御を実行する請求項1から請求項5のいずれか1項に記載のデータ記憶装置。不揮発性メモリを制御する複数のモジュールと、前記各モジュール間のコマンドフロー制御を実行するコマンドフロー制御手段とを有し、前記コマンドフロー制御手段は、前記各モジュールの中で第1のモジュールが実行するコマンドをキューイングするコマンドキュー手段と、前記第1のモジュールからのコマンドの送信先である第2のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理するクレジット制御手段と、前記第1のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第2のモジュールに新たなコマンドとして転送する転送手段とを具備するメモリ制御装置。前記コマンドフロー制御手段は、前記各モジュールの中で前記第1のモジュールへのコマンドの送信元である第3のモジュールから、前記第1のモジュールに対するコマンド空き情報に基づいたコマンド数のコマンドを受信し、前記コマンドキュー手段にライトするライト制御手段を、さらに含む請求項7に記載のメモリ制御装置。前記コマンドフロー制御手段は、前記ライト制御手段により前記コマンドキュー手段にライトされたコマンドのコマンド数を格納するコマンド数記憶手段を、さらに含む請求項8に記載のメモリ制御装置。前記コマンドフロー制御手段は、前記コマンド空き情報を格納するクレジット記憶手段を含み、前記クレジット制御手段は、前記第2のモジュールから送信されるコマンドの空き数の増減を指示する指示信号に応じて前記クレジット記憶手段のコマンド空き情報を更新する請求項7から請求項9のいずれか1項に記載のメモリ制御装置。前記第1のモジュールからの実行要求に応じて、前記コマンドキュー手段からコマンドをリードし、前記第1のモジュールに転送するリード制御手段を、さらに含む請求項7から請求項10のいずれか1項に記載のメモリ制御装置。前記コマンドフロー制御手段は、前記各モジュールに対応するコマンド入出力手段と前記各コマンド入出力手段間を接続するバスコネクタとを有し、前記各コマンド入出力手段は、前記コマンドキュー手段と、前記クレジット制御手段と、前記バスコネクタを介して前記コマンドキュー手段からリードされたコマンドを前記第2のモジュールに転送する転送手段とを含む請求項7から請求項11のいずれか1項に記載のメモリ制御装置。不揮発性メモリを制御する複数のモジュールを含み、前記各モジュール間のコマンドフロー制御を実行するメモリ制御装置に適用するメモリ制御方法であって、前記各モジュールの中で第1のモジュールが実行するコマンドをコマンドキュー手段にキューイングし、前記第1のモジュールからのコマンドの送信先である第2のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理し、前記第1のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第2のモジュールに新たなコマンドとして転送するメモリ制御方法。各モジュール間のコマンドフロー制御の高速化かつ処理の効率化を実現する。実施形態によれば、データ記憶装置は、データを記憶する不揮発性メモリと、前記不揮発性メモリを制御する複数のモジュールを含み、前記各モジュール間のコマンドフロー制御を実行するメモリ制御手段とを有する。前記メモリ制御手段は、前記各モジュールの中で第1のモジュールが実行するコマンドをキューイングするコマンドキュー手段と、前記第1のモジュールからのコマンドの送信先である第2のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理するクレジット制御手段と、前記第1のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第2のモジュールに新たなコマンドとして転送する転送手段とを具備する。従来のSSDコントローラは、CPUが各モジュール間のコマンドフロー制御を実行することで、各モジュールの連携動作を実現している。ここで、CPUによるコマンドフロー制御では、CPUの制御に移行するまでの待ち時間などが影響して高速化に伴う要求速度に適応できない。そこで、CPUの介在なしに、各モジュールが処理状況に応じてコマンドフロー制御を実行することで高速化を図ることが考えられる。しかし、各モジュールが他のモジュールと同期をとりながら動作をするには、今までCPUが実行していたステータスチェックを各モジュールが行う必要があるなど、各モジュール間のコマンドフロー制御に伴う処理の効率化を図ることが課題である。以下図面を参照して、実施形態を説明する。[データ記憶装置の構成]図1に示すように、実施形態のデータ記憶装置はSSDsolidstatedriveであり、SSDコントローラ10と、DRAMdynamicrandomaccessmemoryからなるバッファメモリ15と、NAND型フラッシュメモリフラッシュメモリ16とを有する。なお、バッファメモリは必ずしもDRAMでなくても良く、SRAMなど他の種類の揮発性ランダムアクセスメモリを採用しても良いし、MRAMmagnetoresistiverandomaccessmemory、FeRAMferroelectricrandomaccessmemoryなどの不揮発性ランダムアクセスメモリを採用しても良い。SSDコントローラ10は、フラッシュメモリコントローラ11と、バッファマネージャモジュール12と、ホストインターフェースコントローラ13と、コマンドフロー制御モジュール14と、図示しないメインプロセッサメインCPUとを有する。フラッシュメモリコントローラ11は、フラッシュメモリ16のリード/ライト動作の制御及びデータ転送制御を実行する。バッファマネージャモジュール12は、バッファメモリ15を制御し、バッファメモリとのデータ転送を制御する。バッファメモリ15は、フラッシュメモリ16に対してライトするデータまたはリードされたデータを一時的に格納する。ホストインターフェースコントローラ13は、ホストデバイス17とSSDとのインターフェースであり、データやコマンドの転送を制御する。ホストデバイス17は、例えばパーソナルコンピュータに含まれるSATASerialATA規格などのインターフェースコントローラである。メインCPUは、SSDコントローラ10の全体的制御を実行する。[コマンドフロー制御モジュールの構成]図2に示すように、コマンドフロー制御モジュール14は大別して、モジュールA~C毎のコマンド入出力回路20及び各コマンド入出力回路20を接続するバスコネクタ21から構成される。ここで、モジュールA~Cはそれぞれ、例えばフラッシュメモリコントローラ11、バッファマネージャモジュール12、ホストインターフェースコントローラ13に対応する。バスコネクタ21は、SSDコントローラ10のシステムバス22に接続している。システムバス22は、バッファメモリ15やメインCPUなどが接続している。またバスコネクタ21は、後述するグローバルバス図面中の実線及び破線矢印を介してモジュールA~C毎のコマンド入出力回路20間を接続し、モジュールA~C間のコマンドフロー処理を実行する。図4に示すように、コマンド入出力回路20は、リードコントローラ40と、コマンドキューレジスタ41と、コマンド数レジスタ42と、クレジットレジスタ43と、リードポインタRp及びライトポインタWpコントローラ以下、Rp/Wpコントローラ44と、クレジットコントローラ45と、ライトコントローラ46と、アドレスデコーダ47,48と、グローバルバスインターフェース49とを有する。[コマンドフロー制御処理]以下、図2から図4、及び図5のフローチャートを参照して、本実施形態のコマンドフロー制御処理を説明する。先ず、図3に示すように、SSDコントローラ10は、例えばフラッシュメモリコントローラ11、バッファマネージャモジュール12、ホストインターフェースコントローラ13に対応するモジュールA~Cは、例えばプロセスP1~P6からなるパイプライン処理を実行することにより連携動作を実現する。具体例では、モジュールAM-Aは、プロセスP1~P3でリードコマンドの受付処理RCAReadCommandAcceptを実行する。モジュールBM-Bは、プロセスP2~P4でアドレス解決処理ARAddressResolutionを実行する。ここで、アドレス解決処理とは、ホストデバイスから指定されたアドレス論理アドレスをフラッシュメモリ上のアドレス物理アドレスに変換する処理を意味する。モジュールCM-Cは、プロセスP3~P5でリードコマンドを実行するRCEReadCommandExecuting。モジュールAM-Aは、プロセスP4~P6でホストへの応答送信処理SRTHSendReplyToHostを実行する。即ち、モジュールAM-Aは、ホストデバイスにリードコマンドにより指定されたリードデータを転送する。コマンドフロー制御モジュール14は、図3に示すようなモジュールA~C間の連携動作を実現するためのコマンドフロー制御処理を実行する。即ち、図2に示すように、コマンドフロー制御モジュール14は、概略的には、モジュールA~C毎のコマンド入出力回路20及びバスコネクタ21により、モジュールA~C間のコマンドcommandの送受信を制御する。コマンド入出力回路20は主として、コマンドキューレジスタ41とクレジットレジスタ43とを含み、他のモジュールから送信されたコマンドをコマンドキューレジスタ41にキューイングライトし、コマンドキューレジスタ41からリードしたコマンドの実行結果を新たなコマンドとして他のモジュールに転送する。コマンド入出力回路20は、クレジットレジスタ43により、送信先のモジュールのコマンドバッファコマンドキューレジスタの空き情報に基づいて、送信したいコマンド数が予約されたコマンド数以下であることを確認してから送信する。即ち、クレジットレジスタ43は、送信先のモジュールのコマンド空き情報creditを管理するためのレジスタである。これにより、送信先のモジュールが具備するコマンドバッファのオーバーフローが発生しないことを確認してから、コマンドを送信することが可能となる。以下さらに、図4のブロック図及び図5のフローチャートを参照して、主としてコマンド入出力回路20の処理を説明する。図4に示すように、例えばモジュールCに対応するコマンド入出力回路20は、例えばモジュールB12から送信されるコマンドを受信すると、コマンドキューレジスタ41にライトキューイングするライト処理を実行するブロック500のライト。具体的には、アドレスデコーダ47は、モジュールB12からのライトデータコマンド100とライトイネーブル信号WE101を受信すると、所定のアドレスデコード処理後にライトコントローラ46に出力する。ライトコントローラ46は、ライトデータコマンド100をコマンドキューレジスタ41にライトキューイングするブロック501。この場合、Rp/Wpコントローラ44は、コマンドキューレジスタ41のライトポインタを制御し、コマンド数レジスタ42に保持されているコマンド数を更新するブロック502。一方、コマンド入出力回路20は、モジュールC11からコマンドの実行要求を受けると、コマンドキューレジスタ41からコマンドをリードするリード処理を実行するブロック500のリード。具体的には、アドレスデコーダ48は、モジュールC11からのリードイネーブル信号RE103を受信すると、所定のアドレスデコード処理後にリードコントローラ40に出力する。リードコントローラ40は、コマンドキューレジスタ41からコマンドをリードするリード処理を実行するブロック503。即ち、リードコントローラ40は、コマンド数レジスタ42を参照して、コマンドキューレジスタ41に格納されているコマンド数107を確認するブロック504。コマンドキューレジスタ41にコマンドが無い場合には、リードコントローラ40は、コマンドのリード処理を終了するブロック504のNO。一方、例えばモジュールC11へのコマンド送信元が複数のモジュールである場合には、モジュールC11は、リードコントローラ40を通じて、複数モジュールによる複数要求の中から、適切な優先順位に応じて最も優先度の高いものを選択し、判定するブロック505,506。なお、この判定処理は、先の例のようにコマンド送信元モジュールが単一である場合は、省略してもよい。リードコントローラ40は、コマンドキューレジスタ41から選定されたコマンドをリードするリード処理を開始するブロック507。モジュールC11は、リードコントローラ40によりリードされたコマンドリードデータ102を実行する。例えば、モジュールC11が図1に示すフラッシュメモリコントローラである場合、フラッシュメモリ16からのリード動作を実行する。なお、リード処理終了と同時に、Rp/Wpコントローラ44はリードポインタを制御する。リードポインタはインクリメントされ、次のコマンドの位置を指す。ここで、モジュールC11は、リードコントローラ40を通じてクレジットレジスタ43をリードし、コマンド実行結果の送信先である例えばモジュールA13のクレジットを確認する。ブロック508,509。このクレジット106は、例えばモジュールAにおいて予約されたコマンドバッファコマンドキューレジスタの空き情報である。即ち、送信先モジュールにおいて受信可能なコマンドバッファコマンドキューレジスタのコマンド空き数residualである。クレジットの数が、モジュールC11が送信したいコマンド数以上である場合ブロック509のYES、モジュールC11は、モジュールAのコマンドバッファを上書きすることはないと判断し、モジュールA13へ新たなコマンドを送信するブロック510。一方、クレジットの数が、モジュールC11が送信したいコマンド数未満である場合、モジュールA13からのクレジット回復動作により、クレジットが送信したいコマンド数以上になるまで待機するブロック509のNO。クレジット回復動作は、モジュールA13においてコマンドバッファに積まれたコマンドの実行終了後、コマンド送信元ここではモジュールC11に対して、自身のコマンドバッファに空きが生じたことを、グローバルバスを通じて通知することで実現される。モジュールC11は、グローバルバスインタフェース49を介してグローバルバスに接続されることで、他のモジュールと通信可能に構成されている。またモジュールCは、自身のコマンドバッファに空きが生じたことを、グローバルバスを通じてモジュールB12に通知する。モジュールB12は、送信先であるモジュールC11のコマンドバッファに空きが生じたと解釈し、クレジット回復動作を行うブロック511。以上のように本実施形態によれば、コマンドフロー制御モジュール14により、モジュール間の連携動作を実現するためのコマンドフロー制御処理を実行することができる。この場合、コマンドキューレジスタ41とクレジットレジスタコマンド空き情報レジスタ43とを有するコマンド入出力回路20及びバスコネクタ21からなる構成により、メインCPUの介在なしに、各モジュール間のコマンドフロー制御を実現できる。従って、コマンドフロー制御の高速化を図ることが可能であるため、SSDコントローラに対する高速化に伴う要求速度にも適応することが可能となる。さらに、各モジュール間のステータスチェックや専用のプロトコルを定義する必要もないため、各モジュール間で同期動作を伴う処理の効率化を実現することが可能となる。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"