(57)【要約】【課題】各モジュール間のコマンドフロー制御の高速化かつ処理の効率化を実現することにある。【解決手段】実施形態によれば、データ記憶装置は、データを記憶する不揮発性メモリと、前記不揮発性メモリを制御する複数のモジュールを含み、前記各モジュール間のコマンドフロー制御を実行するメモリコントローラとを有する。前記メモリコントローラは、前記各モジュールの中で第１のモジュールが実行するコマンドをキューイングするコマンドキューレジスタと、前記第１のモジュールからのコマンドの送信先である第２のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理するクレジットコントローラと、前記第１のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第２のモジュールに新たなコマンドとして転送するバスコネクタとを具備する。【選択図】図１
2013137624.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する不揮発性メモリと、
前記不揮発性メモリを制御する複数のモジュールを含み、前記各モジュール間のコマンドフロー制御を実行するメモリ制御手段とを有し、
前記メモリ制御手段は、
前記各モジュールの中で第１のモジュールが実行するコマンドをキューイングするコマンドキュー手段と、
前記第１のモジュールからのコマンドの送信先である第２のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理するクレジット制御手段と、
前記第１のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第２のモジュールに新たなコマンドとして転送する転送手段と
を具備するデータ記憶装置。
【請求項２】
前記メモリ制御手段は、
前記各モジュールの中で前記第１のモジュールへのコマンドの送信元である第３のモジュールから、前記第１のモジュールに対するコマンド空き情報に基づいたコマンド数のコマンドを受信し、前記コマンドキュー手段にライトするライト制御手段を、さらに含む請求項１に記載のデータ記憶装置。
【請求項３】
前記メモリ制御手段は、
前記ライト制御手段により前記コマンドキュー手段にライトされたコマンドのコマンド数を格納するコマンド数記憶手段を、さらに含む請求項２に記載のデータ記憶装置。
【請求項４】
前記メモリ制御手段は、前記コマンド空き情報を格納するクレジット記憶手段を含み、
前記クレジット制御手段は、
前記第２のモジュールから送信されるコマンドの空き数の増減を指示する指示信号に応じて前記クレジット記憶手段のコマンド空き情報を更新する請求項１から請求項３のいずれか１項に記載のデータ記憶装置。
【請求項５】
前記第１のモジュールからの実行要求に応じて、前記コマンドキュー手段からコマンドをリードし、前記第１のモジュールに転送するリード制御手段を、さらに含む請求項１から請求項４のいずれか１項に記載のデータ記憶装置。
【請求項６】
前記メモリ制御手段は、
前記各モジュールのパイプライン処理に必要な前記コマンドフロー制御を実行する請求項１から請求項５のいずれか１項に記載のデータ記憶装置。
【請求項７】
不揮発性メモリを制御する複数のモジュールと、
前記各モジュール間のコマンドフロー制御を実行するコマンドフロー制御手段とを有し、
前記コマンドフロー制御手段は、
前記各モジュールの中で第１のモジュールが実行するコマンドをキューイングするコマンドキュー手段と、
前記第１のモジュールからのコマンドの送信先である第２のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理するクレジット制御手段と、
前記第１のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第２のモジュールに新たなコマンドとして転送する転送手段と
を具備するメモリ制御装置。
【請求項８】
前記コマンドフロー制御手段は、
前記各モジュールの中で前記第１のモジュールへのコマンドの送信元である第３のモジュールから、前記第１のモジュールに対するコマンド空き情報に基づいたコマンド数のコマンドを受信し、前記コマンドキュー手段にライトするライト制御手段を、さらに含む請求項７に記載のメモリ制御装置。
【請求項９】
前記コマンドフロー制御手段は、
前記ライト制御手段により前記コマンドキュー手段にライトされたコマンドのコマンド数を格納するコマンド数記憶手段を、さらに含む請求項８に記載のメモリ制御装置。
【請求項１０】
前記コマンドフロー制御手段は、前記コマンド空き情報を格納するクレジット記憶手段を含み、
前記クレジット制御手段は、
前記第２のモジュールから送信されるコマンドの空き数の増減を指示する指示信号に応じて前記クレジット記憶手段のコマンド空き情報を更新する請求項７から請求項９のいずれか１項に記載のメモリ制御装置。
【請求項１１】
前記第１のモジュールからの実行要求に応じて、前記コマンドキュー手段からコマンドをリードし、前記第１のモジュールに転送するリード制御手段を、さらに含む請求項７から請求項１０のいずれか１項に記載のメモリ制御装置。
【請求項１２】
前記コマンドフロー制御手段は、
前記各モジュールに対応するコマンド入出力手段と前記各コマンド入出力手段間を接続するバスコネクタとを有し、
前記各コマンド入出力手段は、
前記コマンドキュー手段と、
前記クレジット制御手段と、
前記バスコネクタを介して前記コマンドキュー手段からリードされたコマンドを前記第２のモジュールに転送する転送手段と
を含む請求項７から請求項１１のいずれか１項に記載のメモリ制御装置。
【請求項１３】
不揮発性メモリを制御する複数のモジュールを含み、前記各モジュール間のコマンドフロー制御を実行するメモリ制御装置に適用するメモリ制御方法であって、
前記各モジュールの中で第１のモジュールが実行するコマンドをコマンドキュー手段にキューイングし、
前記第１のモジュールからのコマンドの送信先である第２のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理し、
前記第１のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第２のモジュールに新たなコマンドとして転送するメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを使用するデータ記憶装置、メモリ制御装置及び方法に関する。
【背景技術】
【０００２】
近年、ストレージデバイス（データ記憶装置）として、書き換え可能な不揮発性メモリであるNAND型フラッシュメモリ（以下、単にフラッシュメモリと表記する場合がある）を記憶媒体とするＳＳＤ（solid state drive）が注目されている。
【０００３】
ＳＳＤは大別して、フラッシュメモリとそれを制御するコントローラとから構成されている。コントローラは、複数のモジュールを連携して制御するマイクロプロセッサ（以下単にＣＰＵと表記する場合がある）を有する。ＣＰＵは、各モジュール間のコマンドフロー制御を実行することで、各モジュールが他のモジュールと同期をとりながら動作する連携動作を実現している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第６８０１９７２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
各モジュール間のコマンドフロー制御の高速化かつ処理の効率化を実現する。
【課題を解決するための手段】
【０００６】
実施形態によれば、データ記憶装置は、データを記憶する不揮発性メモリと、前記不揮発性メモリを制御する複数のモジュールを含み、前記各モジュール間のコマンドフロー制御を実行するメモリ制御手段とを有する。前記メモリ制御手段は、前記各モジュールの中で第１のモジュールが実行するコマンドをキューイングするコマンドキュー手段と、前記第１のモジュールからのコマンドの送信先である第２のモジュールに対するコマンドキューイング可能なコマンド空き情報を管理するクレジット制御手段と、前記第１のモジュールが前記コマンドキュー手段からリードされたコマンドを実行した実行結果を、前記コマンド空き情報に基づいて前記第２のモジュールに新たなコマンドとして転送する転送手段とを具備する。
【図面の簡単な説明】
【０００７】
【図１】実施形態に関するＳＳＤの構成を説明するためのブロック図。
【図２】実施形態に関するコマンドフロー制御を説明するための図。
【図３】実施形態に関するＳＳＤコントローラのパイプライン動作を説明するための図。
【図４】実施形態に関するコマンドフロー制御モジュールの構成を説明するためのブロック図。
【図５】実施形態に関するコマンドフロー制御モジュールの動作を説明するためのフローチャート。
【発明を実施するための形態】
【０００８】
従来のＳＳＤコントローラは、ＣＰＵが各モジュール間のコマンドフロー制御を実行することで、各モジュールの連携動作を実現している。ここで、ＣＰＵによるコマンドフロー制御では、ＣＰＵの制御に移行するまでの待ち時間などが影響して高速化に伴う要求速度に適応できない。そこで、ＣＰＵの介在なしに、各モジュールが処理状況に応じてコマンドフロー制御を実行することで高速化を図ることが考えられる。しかし、各モジュールが他のモジュールと同期をとりながら動作をするには、今までＣＰＵが実行していたステータスチェックを各モジュールが行う必要があるなど、各モジュール間のコマンドフロー制御に伴う処理の効率化を図ることが課題である。
【０００９】
以下図面を参照して、実施形態を説明する。
【００１０】
［データ記憶装置の構成］
図１に示すように、実施形態のデータ記憶装置はＳＳＤ（solid state drive）であり、ＳＳＤコントローラ１０と、ＤＲＡＭ（dynamic random access memory）からなるバッファメモリ１５と、NAND型フラッシュメモリ（フラッシュメモリ）１６とを有する。なお、バッファメモリは必ずしもＤＲＡＭでなくても良く、ＳＲＡＭなど他の種類の揮発性ランダムアクセスメモリを採用しても良いし、ＭＲＡＭ（magnetoresistive random access memory）、ＦｅＲＡＭ（ferroelectric random access memory）などの不揮発性ランダムアクセスメモリを採用しても良い。
【００１１】
ＳＳＤコントローラ１０は、フラッシュメモリコントローラ１１と、バッファマネージャモジュール１２と、ホストインターフェースコントローラ１３と、コマンドフロー制御モジュール１４と、図示しないメインプロセッサ（メインＣＰＵ）とを有する。
【００１２】
フラッシュメモリコントローラ１１は、フラッシュメモリ１６のリード／ライト動作の制御及びデータ転送制御を実行する。バッファマネージャモジュール１２は、バッファメモリ１５を制御し、バッファメモリとのデータ転送を制御する。バッファメモリ１５は、フラッシュメモリ１６に対してライトするデータまたはリードされたデータを一時的に格納する。ホストインターフェースコントローラ１３は、ホストデバイス１７とＳＳＤとのインターフェースであり、データやコマンドの転送を制御する。ホストデバイス１７は、例えばパーソナルコンピュータに含まれるＳＡＴＡ（Serial ATA）規格などのインターフェースコントローラである。メインＣＰＵは、ＳＳＤコントローラ１０の全体的制御を実行する。
【００１３】
［コマンドフロー制御モジュールの構成］
図２に示すように、コマンドフロー制御モジュール１４は大別して、モジュールＡ〜Ｃ毎のコマンド入出力回路２０及び各コマンド入出力回路２０を接続するバスコネクタ２１から構成される。ここで、モジュールＡ〜Ｃはそれぞれ、例えばフラッシュメモリコントローラ１１、バッファマネージャモジュール１２、ホストインターフェースコントローラ１３に対応する。
【００１４】
バスコネクタ２１は、ＳＳＤコントローラ１０のシステムバス２２に接続している。システムバス２２は、バッファメモリ１５やメインＣＰＵなどが接続している。またバスコネクタ２１は、後述するグローバルバス（図面中の実線及び破線矢印）を介してモジュールＡ〜Ｃ毎のコマンド入出力回路２０間を接続し、モジュールＡ〜Ｃ間のコマンドフロー処理を実行する。
【００１５】
図４に示すように、コマンド入出力回路２０は、リードコントローラ４０と、コマンドキューレジスタ４１と、コマンド数レジスタ４２と、クレジットレジスタ４３と、リードポインタ（Ｒｐ）及びライトポインタ（Ｗｐ）コントローラ（以下、Ｒｐ／Ｗｐコントローラ）４４と、クレジットコントローラ４５と、ライトコントローラ４６と、アドレスデコーダ４７，４８と、グローバル・バス・インターフェース４９とを有する。
【００１６】
［コマンドフロー制御処理］
以下、図２から図４、及び図５のフローチャートを参照して、本実施形態のコマンドフロー制御処理を説明する。
【００１７】
先ず、図３に示すように、ＳＳＤコントローラ１０は、例えばフラッシュメモリコントローラ１１、バッファマネージャモジュール１２、ホストインターフェースコントローラ１３に対応するモジュールＡ〜Ｃは、例えばプロセスＰ１〜Ｐ６からなるパイプライン処理を実行することにより連携動作を実現する。
【００１８】
具体例では、モジュールＡ（Ｍ−Ａ）は、プロセスＰ１〜Ｐ３でリードコマンドの受付処理（ＲＣＡ:Read Command Accept）を実行する。モジュールＢ（Ｍ−Ｂ）は、プロセスＰ２〜Ｐ４でアドレス解決処理（ＡＲ:Address Resolution）を実行する。ここで、アドレス解決処理とは、ホストデバイスから指定されたアドレス（論理アドレス）をフラッシュメモリ上のアドレス（物理アドレス）に変換する処理を意味する。モジュールＣ（Ｍ−Ｃ）は、プロセスＰ３〜Ｐ５でリードコマンドを実行する（ＲＣＥ:Read-Command Executing）。モジュールＡ（Ｍ−Ａ）は、プロセスＰ４〜Ｐ６でホストへの応答送信処理（ＳＲＴＨ:Send Reply To Host）を実行する。即ち、モジュールＡ（Ｍ−Ａ）は、ホストデバイスにリードコマンドにより指定されたリードデータを転送する。
【００１９】
コマンドフロー制御モジュール１４は、図３に示すようなモジュールＡ〜Ｃ間の連携動作を実現するためのコマンドフロー制御処理を実行する。即ち、図２に示すように、コマンドフロー制御モジュール１４は、概略的には、モジュールＡ〜Ｃ毎のコマンド入出力回路２０及びバスコネクタ２１により、モジュールＡ〜Ｃ間のコマンド（command）の送受信を制御する。
【００２０】
コマンド入出力回路２０は主として、コマンドキューレジスタ４１とクレジットレジスタ４３とを含み、他のモジュールから送信されたコマンドをコマンドキューレジスタ４１にキューイング（ライト）し、コマンドキューレジスタ４１からリードしたコマンドの実行結果を新たなコマンドとして他のモジュールに転送する。コマンド入出力回路２０は、クレジットレジスタ４３により、送信先のモジュールのコマンドバッファ（コマンドキューレジスタ）の空き情報に基づいて、送信したいコマンド数が予約されたコマンド数以下であることを確認してから送信する。即ち、クレジットレジスタ４３は、送信先のモジュールのコマンド空き情報（credit）を管理するためのレジスタである。これにより、送信先のモジュールが具備するコマンドバッファのオーバーフローが発生しないことを確認してから、コマンドを送信することが可能となる。
【００２１】
以下さらに、図４のブロック図及び図５のフローチャートを参照して、主としてコマンド入出力回路２０の処理を説明する。
【００２２】
図４に示すように、例えばモジュールＣに対応するコマンド入出力回路２０は、例えばモジュールＢ（１２）から送信されるコマンドを受信すると、コマンドキューレジスタ４１にライト（キューイング）するライト処理を実行する（ブロック５００のライト）。具体的には、アドレスデコーダ４７は、モジュールＢ（１２）からのライトデータ（コマンド）１００とライトイネーブル信号（ＷＥ）１０１を受信すると、所定のアドレスデコード処理後にライトコントローラ４６に出力する。
【００２３】
ライトコントローラ４６は、ライトデータ（コマンド）１００をコマンドキューレジスタ４１にライト（キューイング）する（ブロック５０１）。この場合、Ｒｐ／Ｗｐコントローラ４４は、コマンドキューレジスタ４１のライトポインタを制御し、コマンド数レジスタ４２に保持されているコマンド数を更新する（ブロック５０２）。
【００２４】
一方、コマンド入出力回路２０は、モジュールＣ（１１）からコマンドの実行要求を受けると、コマンドキューレジスタ４１からコマンドをリードするリード処理を実行する（ブロック５００のリード）。具体的には、アドレスデコーダ４８は、モジュールＣ（１１）からのリードイネーブル信号（ＲＥ）１０３を受信すると、所定のアドレスデコード処理後にリードコントローラ４０に出力する。
【００２５】
リードコントローラ４０は、コマンドキューレジスタ４１からコマンドをリードするリード処理を実行する（ブロック５０３）。即ち、リードコントローラ４０は、コマンド数レジスタ４２を参照して、コマンドキューレジスタ４１に格納されているコマンド数１０７を確認する（ブロック５０４）。コマンドキューレジスタ４１にコマンドが無い場合には、リードコントローラ４０は、コマンドのリード処理を終了する（ブロック５０４のＮＯ）。
【００２６】
一方、例えばモジュールＣ（１１）へのコマンド送信元が複数のモジュールである場合には、モジュールＣ（１１）は、リードコントローラ４０を通じて、複数モジュールによる複数要求の中から、適切な優先順位に応じて最も優先度の高いものを選択し、判定する（ブロック５０５，５０６）。なお、この判定処理は、先の例のようにコマンド送信元モジュールが単一である場合は、省略してもよい。リードコントローラ４０は、コマンドキューレジスタ４１から選定されたコマンドをリードするリード処理を開始する（ブロック５０７）。
【００２７】
モジュールＣ（１１）は、リードコントローラ４０によりリードされたコマンド（リードデータ）１０２を実行する。例えば、モジュールＣ（１１）が図１に示すフラッシュメモリコントローラである場合、フラッシュメモリ１６からのリード動作を実行する。なお、リード処理終了と同時に、Ｒｐ／Ｗｐコントローラ４４はリードポインタを制御する。リードポインタはインクリメントされ、次のコマンドの位置を指す。
【００２８】
ここで、モジュールＣ（１１）は、リードコントローラ４０を通じてクレジットレジスタ４３をリードし、コマンド実行結果の送信先である例えばモジュールＡ（１３）のクレジットを確認する。（ブロック５０８，５０９）。このクレジット１０６は、例えばモジュールＡにおいて予約されたコマンドバッファ（コマンドキューレジスタ）の空き情報である。即ち、送信先モジュールにおいて受信可能なコマンドバッファ（コマンドキューレジスタ）のコマンド空き数（residual）である。
【００２９】
クレジットの数が、モジュールＣ（１１）が送信したいコマンド数以上である場合（ブロック５０９のＹＥＳ）、モジュールＣ（１１）は、モジュールＡのコマンドバッファを上書きすることはないと判断し、モジュールＡ（１３）へ新たなコマンドを送信する（ブロック５１０）。一方、クレジットの数が、モジュールＣ（１１）が送信したいコマンド数未満である場合、モジュールＡ（１３）からのクレジット回復動作により、クレジットが送信したいコマンド数以上になるまで待機する（ブロック５０９のＮＯ）。
【００３０】
クレジット回復動作は、モジュールＡ（１３）においてコマンドバッファに積まれたコマンドの実行終了後、コマンド送信元（ここではモジュールＣ（１１））に対して、自身のコマンドバッファに空きが生じたことを、グローバルバスを通じて通知することで実現される。モジュールＣ（１１）は、グローバル・バス・インタフェース４９を介してグローバルバスに接続されることで、他のモジュールと通信可能に構成されている。またモジュールＣは、自身のコマンドバッファに空きが生じたことを、グローバルバスを通じてモジュールＢ（１２）に通知する。モジュールＢ（１２）は、送信先であるモジュールＣ（１１）のコマンドバッファに空きが生じたと解釈し、クレジット回復動作を行う（ブロック５１１）。
【００３１】
以上のように本実施形態によれば、コマンドフロー制御モジュール１４により、モジュール間の連携動作を実現するためのコマンドフロー制御処理を実行することができる。この場合、コマンドキューレジスタ４１とクレジットレジスタ（コマンド空き情報レジスタ）４３とを有するコマンド入出力回路２０及びバスコネクタ２１からなる構成により、メインＣＰＵの介在なしに、各モジュール間のコマンドフロー制御を実現できる。従って、コマンドフロー制御の高速化を図ることが可能であるため、ＳＳＤコントローラに対する高速化に伴う要求速度にも適応することが可能となる。さらに、各モジュール間のステータスチェックや専用のプロトコルを定義する必要もないため、各モジュール間で同期動作を伴う処理の効率化を実現することが可能となる。
【００３２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００３３】
１０…ＳＳＤコントローラ、１１…フラッシュメモリコントローラ、
１２…バッファマネージャモジュール、１３…ホストインターフェースコントローラ、
１４…コマンドフロー制御モジュール、１５…バッファメモリ、
１６…NAND型フラッシュメモリ（フラッシュメモリ）、１７…ホストデバイス、
２０…コマンド入出力回路、２１…バスコネクタ、２２…システムバス、
４０…リードコントローラ、４１…コマンドキューレジスタ、
４２…コマンド数レジスタ、４３…クレジットレジスタ、
４４…Ｒｐ／Ｗｐコントローラ、４５…クレジットコントローラ、
４６…ライトコントローラ、４７，４８…アドレスデコーダ、
４９…グローバル・バス・インターフェース。
【図１】
2013137624.tif 000003
【図２】
2013137624.tif 000004
【図３】
2013137624.tif 000005
【図４】
2013137624.tif 000006
【図５】
2013137624.tif 000007