(57)【要約】【課題】コマンドの実行が滞ってもバッファ転送効率が低下するのを防止する。【解決手段】実施形態によれば、中間ＦＩＦＯは、送信ＦＩＦＯまたは受信ＦＩＦＯとバッファとの間で転送されるデータを格納する、テーブルは、ホストからのデータ転送コマンド毎に、当該コマンドで指定された、送信ＦＩＦＯまたは受信ＦＩＦＯとバッファとの間のデータ転送を管理するためのバッファ転送情報を保持する。第１のシーケンサは、テーブルに保持されているバッファ転送情報に基づいて、対応するコマンドで指定されたデータ転送のためのバッファ転送を、少なくとも１つのフレームを単位に起動する。第２のシーケンサは、バッファ転送の起動に応じて、送信ＦＩＦＯまたは受信ＦＩＦＯと中間ＦＩＦＯとの間でフレーム単位でデータを転送する。第３のシーケンサは、バッファ転送の起動に応じて、中間ＦＩＦＯとバッファとの間でセクタ単位にデータを転送する。【選択図】      図２
2012032962.tif 000002
【特許請求の範囲】
【請求項１】
ホストへフレーム単位で転送されるべきデータを格納する送信ＦＩＦＯ及び前記ホストからフレーム単位で転送されたデータを格納する受信ＦＩＦＯと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理装置において、
前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間で転送されるデータを格納する中間ＦＩＦＯと、
前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間の、前記中間ＦＩＦＯを介してのデータ転送を管理するためのバッファ転送情報を保持するテーブルと、
前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間ＦＩＦＯとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも１つのフレームを単位に起動する第１のシーケンサと、
前記バッファ転送の起動に応じて、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記中間ＦＩＦＯとの間でフレーム単位でデータを転送する第２のシーケンサと、
前記バッファ転送の起動に応じて、前記中間ＦＩＦＯと前記バッファとの間でセクタ単位にデータを転送する第３のシーケンサと
を具備するバッファ管理装置。
【請求項２】
前記バッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている対応するバッファ転送情報を、次のフレームの転送のために更新する更新制御手段を更に具備する請求項１記載のバッファ管理装置。
【請求項３】
前記バッファ転送情報は、ＣＲＣデータ及びセクタポインタを含み、
前記第２のシーケンサは、前記第３のシーケンサによって前記バッファから前記中間ＦＩＦＯにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でＣＲＣデータを生成し、生成されたＣＲＣデータと対応するセクタデータに付加されているＣＲＣデータとを比較することによって当該セクタデータのエラーをチェックし、
前記更新制御手段は、第１のフレームの転送の完了時には、当該第１のフレームの終端に対応する第１のセクタ内の位置までの第１のデータに基づいて生成されたＣＲＣデータとその時点のセクタポインタとに、前記テーブルに保持されている対応する前記バッファ転送情報のＣＲＣデータ及びセクタポインタを更新する
請求項２記載のバッファ管理装置。
【請求項４】
前記第３のシーケンサは、前記第１のフレームの終端が前記第１のセクタの終端に一致せず、且つ前記第１のフレームの次の第２のフレームのためのバッファ転送が前記第１のシーケンサによって起動された場合、前記第１のフレームの終端に対応する前記第１のセクタ内の位置から前記第１のセクタの終端までの第２のデータを前記バッファから前記中間ＦＩＦＯに転送し、
前記第２のシーケンサは、前記第１のセクタの前記第２のデータが前記中間バッファに転送された場合、前記第２のデータと、前記テーブルに保持されている対応する前記バッファ転送情報中のＣＲＣデータとに基づいて、前記ＣＲＣデータ生成を再開する
請求項３記載のバッファ管理装置。
【請求項５】
前記第３のシーケンサは、前記第１のフレームのためのバッファ転送において、前記第１のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送し、
前記第２のシーケンサは、前記中間ＦＩＦＯに転送される前記第１のセクタのデータに基づいて前記ＣＲＣを生成して、前記第１のセクタのデータのエラーをチェックし、しかる後に前記第１のセクタの前記第２のデータを破棄する
請求項４記載のバッファ管理装置。
【請求項６】
前記更新制御手段は、前記セクタデータのエラーが検出された場合、前記テーブルに保持されている対応するバッファ転送情報を、当該セクタデータに対応するフレームの転送が開始された際の状態に戻す
請求項３記載のバッファ管理装置。
【請求項７】
前記第１のシーケンサは第１のデータ転送コマンドに対応する第１のバッファ転送の起動後、前記第１のデータ転送コマンドとは別の第２のデータ転送コマンドに対応するバッファ転送情報に基づいて、当該第２のデータ転送コマンドで指定されたデータ転送のための第２のバッファ転送を、少なくとも１つのフレームを単位に起動する請求項１記載のバッファ管理装置。
【請求項８】
前記第１のバッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている、前記第１のデータ転送コマンドに対応するバッファ転送情報を、次のフレームの転送のために更新し、前記第２のバッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている、前記第２のデータ転送コマンドに対応するバッファ転送情報を、次のフレームの転送のために更新する更新制御手段を更に具備する請求項７記載のバッファ管理装置。
【請求項９】
前記第１のシーケンサは、前記バッファ転送を、複数のフレームを単位に起動する請求項１記載のバッファ管理装置。
【請求項１０】
ホストへフレーム単位で転送されるべきデータを格納する送信ＦＩＦＯと、
前記ホストからフレーム単位で転送されたデータを格納する受信ＦＩＦＯと、
記憶部と、
前記記憶部からセクタ単位で読み出されるデータ及び前記記憶部にセクタ単位で書き込まれるデータを格納するバッファと、
前記送信ＦＩＦＯ及び前記受信ＦＩＦＯと前記バッファとの間のデータ転送を管理するバッファ管理装置とを具備し、
前記バッファ管理装置は、
前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間で転送されるデータを格納する中間ＦＩＦＯと、
前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間の、前記中間ＦＩＦＯを介してのデータ転送を管理するためのバッファ転送情報を保持するテーブルと、
前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間ＦＩＦＯとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも１つのフレームを単位に起動する第１のシーケンサと、
前記バッファ転送の起動に応じて、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記中間ＦＩＦＯとの間でフレーム単位でデータを転送する第２のシーケンサと、
前記バッファ転送の起動に応じて、前記中間ＦＩＦＯと前記バッファとの間でセクタ単位にデータを転送する第３のシーケンサとを具備する
記憶装置。
【請求項１１】
テーブル及び中間ＦＩＦＯを備えたバッファ管理装置において、ホストへフレーム単位で転送されるべきデータを格納する送信ＦＩＦＯ及び前記ホストからフレーム単位で転送されたデータを格納する受信ＦＩＦＯと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理方法であって、
前記テーブルに前記ホストからのデータ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間ＦＩＦＯとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも１つのフレームを単位に起動し、
前記バッファ転送の起動に応じて、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記中間ＦＩＦＯとの間でフレーム単位でデータを転送し、
前記バッファ転送の起動に応じて、前記中間ＦＩＦＯと前記バッファとの間でセクタ単位にデータを転送する
バッファ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、バッファ転送を管理するバッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法に関する。
【背景技術】
【０００２】
磁気ディスクドライブ（ＨＤＤ）、或いはソリッドステートドライブ（ＳＳＤ）のような記憶装置は、一般にホストインタフェース部を備えている。ホストインタフェース部は、ホストと記憶部との間のデータ転送を制御する。ホストインタフェース部と記憶部との間には、ホストと記憶部との間で転送されるデータを一時格納するバッファが備えられている。ホストインタフェース部とバッファとの間のデータ転送は、バッファ転送と呼ばれる。一方、ホストとホストインタフェース部との間のデータ転送は、フレームを用いて行われることから、フレーム転送と呼ばれる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１７１３６２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来技術において、ホストから記憶装置に与えられたデータ転送コマンド、例えばリードコマンドで指定されたデータが、当該記憶装置の記憶部から読み出されて、バッファを介して転送されるものとする。つまり、ホストからのデータ転送コマンドに対応するバッファ転送が起動されるものとする。従来技術では、このように、或る１つのデータ転送コマンドに対応するバッファ転送が起動されると、そのデータ転送コマンドの実行が終了するまで、他のデータ転送コマンドに対応するバッファ転送を差し込むことは、想定されていない。
【０００５】
このため従来技術では、データ転送コマンドの実行が滞った場合、他のデータ転送コマンドに対応するバッファ転送は待たされる。この場合、バッファ転送効率の低下を招く。
【０００６】
本発明の目的は、起動されたバッファ転送に対応するデータ転送コマンドの実行が滞ってもバッファ転送効率が低下するのを防止できるバッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法を提供することにある。
【課題を解決するための手段】
【０００７】
実施形態によれば、ホストへフレーム単位で転送されるべきデータを格納する送信ＦＩＦＯ及び前記ホストからフレーム単位で転送されたデータを格納する受信ＦＩＦＯと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理装置が提供される。このバッファ管理装置は、中間ＦＩＦＯと、テーブルと、第１のシーケンサと、第２のシーケンサと、第３のシーケンサとを具備する。中間ＦＩＦＯは、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間で転送されるデータを格納する。テーブルは、前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間の、前記中間ＦＩＦＯを介してのデータ転送を管理するためのバッファ転送情報を保持する。第１のシーケンサは、前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間ＦＩＦＯとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも１つのフレームを単位に起動する。第２のシーケンサは、前記バッファ転送の起動に応じて、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記中間ＦＩＦＯとの間でフレーム単位でデータを転送する。第３のシーケンサは、前記バッファ転送の起動に応じて、前記中間ＦＩＦＯと前記バッファとの間でセクタ単位にデータを転送する。
【図面の簡単な説明】
【０００８】
【図１】一つの実施形態に係るバッファマネージャを備えたホストインタフェース部の構成を示すブロック図。
【図２】同実施形態におけるバッファマネージャの詳細な構成を示すブロック図。
【図３】同実施形態におけるリードデータ転送を説明するための図。
【図４】同実施形態におけるリードデータ転送の例Ｒ１を示すタイミングチャート。
【図５】同実施形態におけるリードデータ転送の例Ｒ２を示すタイミングチャート。
【図６】同実施形態におけるリードデータ転送の例Ｒ３を示すタイミングチャート。
【図７】同実施形態におけるリードデータ転送の例Ｒ４を示すタイミングチャート。
【図８】同実施形態におけるライトデータ転送を説明するための図。
【図９】同実施形態におけるライトデータ転送の例Ｗ１を示すタイミングチャート。
【図１０】同実施形態におけるライトデータ転送の例Ｗ２を示すタイミングチャート。
【図１１】同実施形態におけるライトデータ転送の例Ｗ３を示すタイミングチャート。
【図１２】同実施形態におけるライトデータ転送の例Ｗ４を示すタイミングチャート。
【図１３】同実施形態におけるバッファマネージャのバッファ転送情報管理機能を中心とする構成を示すブロック図。
【図１４】同実施形態におけるリードデータ転送の例Ｒ１を、バッファ転送情報の転送と関連付けて示すタイミングチャート。
【図１５】同実施形態におけるリードデータ転送の例Ｒ２を、バッファ転送情報の転送と関連付けて示すタイミングチャート。
【図１６】同実施形態におけるリードデータ転送の例Ｒ３を、バッファ転送情報の転送と関連付けて示すタイミングチャート。
【図１７】同実施形態におけるリードデータ転送の例Ｒ４を、バッファ転送情報の転送と関連付けて示すタイミングチャート。
【図１８】同実施形態におけるライトデータ転送の例Ｗ１を、バッファ転送情報の転送と関連付けて示すタイミングチャート。
【図１９】同実施形態におけるライトデータ転送の例Ｗ２を、バッファ転送情報の転送と関連付けて示すタイミングチャート。
【図２０】同実施形態におけるライトデータ転送の例Ｗ３を、バッファ転送情報の転送と関連付けて示すタイミングチャート。
【図２１】同実施形態におけるライトデータ転送の例Ｗ４を、バッファ転送情報の転送と関連付けて示すタイミングチャート。
【図２２】同実施形態におけるリードデータ転送及びライトデータ転送の切り替えを、バッファ転送情報の転送と関連付けて示すタイミングチャート
【発明を実施するための形態】
【０００９】
以下、実施の形態につき図面を参照して説明する。  
図１は一つの実施形態に係るバッファ管理装置（以下、バッファマネージャと称する）を備えたホストインタフェース部の構成を示すブロック図である。
【００１０】
本実施形態において、図１に示すバッファマネージャ１は、磁気ディスクドライブ、或いはソリッドステートドライブのような記憶装置のホストインタフェース部２に備えられている。記憶装置は、ホストインタフェース部２の他に、バッファ３を備えている。
【００１１】
バッファ３は、図示しないホスト（Host）と記憶部との間で転送されるコマンド及びデータを一時格納する。バッファ３は、ＤＤＲ（Double Data Rate） ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）のような書き換え可能なメモリから構成される。ホストは、ＳＡＳ（Serial Attached SCSI）を介して記憶装置との間でシリアルデータ転送（送受信）を行う。このシリアルデータ転送には、例えばフレーム（Frame）が用いられる。記憶部は、記憶装置が磁気ディスクドライブであれば、記憶（記録）メディアとして磁気記録メディアを含み、記憶装置がソリッドステートドライブであれば、記憶メディアとして書き換え可能な不揮発性メモリを含む。なお、ホストが、ＳＡＴＡ（シリアルＡＴＡ）、またはＦＣ（ファイバーチャンネル）インタフェースを介して記憶装置との間でシリアルデータ転送を行ってもよい。
【００１２】
ホストインタフェース部２は、ＳＡＳモジュール２１と、ホスト−データパスモジュール２２と、アービタ２３とを備えている。  
ＳＡＳモジュール２１は、物理層モジュール２１１と、リンク層モジュール２１２と、ポート層モジュール２１３と、受信ＦＩＦＯ（以下、ＲｘＦＩＦＯと称する）２１４と、送信ＦＩＦＯ（以下、ＴｘＦＩＦＯと称する）２１５と、トランスポート層モジュール２１６とを備えている。
【００１３】
物理層モジュール２１１は、所定のＳＡＳポート（SAS Port）を介してホストとの間でフレーム（Frame）を用いてシリアルデータ転送（送受信）を行う。本実施形態において、所定のＳＡＳポートのポート番号（＃）は０（＃０）であるものとする。以下、この所定のＳＡＳポートを、ＳＡＳポート＃０と称する。物理層モジュール２１１は、シリアルの受信データ（受信フレーム）をパラレルの受信データ（受信フレーム）に変換し、パラレルの送信データ（送信フレーム）をシリアルの送信データ（送信フレーム）に変換する。
【００１４】
リンク層モジュール２１２は、物理層モジュール２１１から転送されるパラレルの受信フレームを、ＲｘＦＩＦＯ２１４を介してトランスポート層モジュール２１６に転送する。リンク層モジュール２１２はまた、トランスポート層モジュール２１６からＴｘＦＩＦＯ２１５を介して転送されるパラレルの送信フレームを物理層モジュール２１１に転送する。  
ポート層モジュール２１３は、リンク層モジュール２１２とトランスポート層モジュール２１６とのコネクション（Connection）を制御する。
【００１５】
ＲｘＦＩＦＯ２１４は、リンク層モジュール２１２から転送された受信フレームを一時格納し、その格納順にトランスポート層モジュール２１６に出力するための先入れ先出し（ＦＩＦＯ）バッファである。ＴｘＦＩＦＯ２１５は、トランスポート層モジュール２１６から転送された送信フレームを一時格納し、その格納順にリンク層モジュール２１２に出力するための先入れ先出しバッファである。
【００１６】
トランスポート層モジュール２１６は、受信フレームをホスト−データパスモジュール２２に転送する。トランスポート層モジュール２１６はまた、ホスト−データパスモジュール２２から転送される送信フレームを、ＴｘＦＩＦＯ２１５を介してリンク層モジュール２１２に転送する。トランスポート層モジュール２１６はまた、受信フレームを解釈し、当該受信フレームが、リードコマンドまたはライトコマンドのようなコマンド（Command）を含む場合、当該コマンドをアプリケーション層モジュール４に転送する。  
トランスポート層モジュール２１６は、後述するエクスチェンジテーブル２１６ａを備えている。
【００１７】
ホスト−データパスモジュール２２は、中間ＦＩＦＯ（以下、ＡＦＩＦＯと称する）２２１を備えている。ＡＦＩＦＯ２２１は、ＲｘＦＩＦＯ２１４及びＲｘＦＩＦＯ２１４と、バッファ３との中間に存在する。ＡＦＩＦＯ２２１は、受信フレームを順次格納し、その格納順にセクタ単位で出力するための先入れ先出しバッファである。セクタは、周知のように、記憶メディアへのアクセスの最小単位である。ＡＦＩＦＯ２２１はまた、送信セクタを順次格納し、その格納順にフレーム単位で出力するための先入れ先出しバッファでもある。つまり、ＡＦＩＦＯ２２１は、フレームデータからセクタデータへの変換及びセクタデータからフレームデータへの変換に用いられる中間バッファである。
【００１８】
アービタ２３は、ホスト−データパスモジュール２２（より詳細には、ホスト−データパスモジュール２２内のＡＦＩＦＯ２２１）、メディアポート２４、またはＣＰＵポート２５と、バッファ３との間のデータ転送を調停する。この転送をバッファ転送と称する。メディアポート２４は、記憶メディア（Media）に対応するポートであり、ＣＰＵポート２５はＣＰＵに対応するポートである。ＣＰＵは、記憶装置の主コントローラとして機能する。
【００１９】
本実施形態において、バッファマネージャ１は、トランスポート層モジュール２１６（ＳＡＳモジュール２１内のトランスポート層モジュール２１６）と、ホスト−データパスモジュール２２と、アービタ２３とから構成されている。
【００２０】
図２は、バッファマネージャ１の詳細な構成を示すブロック図である。
【００２１】
バッファマネージャ１のトランスポート層モジュール２１６は、図１に示したエクスチェンジ（Exchange）テーブル２１６ａに加えて、エクスチェンジシーケンサ２１６ｂを備えている。
【００２２】
エクスチェンジテーブル２１６ａは、ホストからのコマンドに基づくＲｘＦＩＦＯ２１４及びＴｘＦＩＦＯ２１５とバッファ３との間のデータ転送（バッファ転送）を管理するために、コマンド毎に当該コマンドに対応付けて管理情報（以下、バッファ転送情報と称する）を保持する。以下の説明では、リードコマンドまたはライトコマンドのような、データ転送を伴うコマンドを、データ転送コマンドと称する。
【００２３】
エクスチェンジテーブル２１６ａに保持されるバッファ転送情報は、バッファアドレス（Buffer Address）、セクタカウント（Sector Count）、バイトカウント（Byte Count）、ＬＢＡ、巡回冗長検査データ（以下、ＢＣＲＣと称する）、エラー訂正符号（以下、ＢＥＣＣと称する）を含む。
【００２４】
バッファアドレスは、バッファ転送（より詳細には、対応するデータ転送コマンドで指定されるバッファ転送）におけるバッファ３のアドレスを示し、当該バッファ転送の進行に応じて更新される。  
セクタカウントは、バッファ転送における転送されるべき最初のセクタのセクタ位置を示し、当該バッファ転送の進行に応じて更新される。このセクタカウントは、次に開始すべきセクタ転送における相対的なセクタ位置をも示しており、セクタポインタとして用いられる。
【００２５】
バイトカウントは、バッファ転送における転送されるべき総バイト数を示し、当該バッファ転送の進行状況に応じて更新される。ＬＢＡは、バッファ転送における転送されるべきデータの論理アドレス（論理ブロックアドレス）を示し、当該バッファ転送の進行に応じて更新される。バイトカウント及びＬＢＡの初期値は、対応するデータ転送コマンドによって指定される。また、上記セクタカウントの初期値は、対応するデータ転送コマンドの指定するバイトカウント及びセクタ当たりのバイト数に基づいて算出される。  
ＢＣＲＣはバッファ転送で転送されたセクタデータに付されているＣＲＣデータ（ＣＲＣ値）を示し、ＢＥＣＣは、当該セクタデータに含まれているＥＣＣを示す。
【００２６】
このように、データ転送コマンド毎にエクスチェンジテーブル２１６ａに保持（登録）されるバッファ転送情報は、対応するデータ転送コマンドで初期値が指定されるバイトカウント及びＬＢＡに加えて、バッファアドレス、セクタカウント、ＢＣＲＣ及びＢＥＣＣを含む。
【００２７】
エクスチェンジシーケンサ２１６ｂは、データ転送コマンド毎に、対応する転送データをフレームに分割してフレーム順にバッファ転送（つまり、シーケンシャルなフレーム転送）を行うために、例えばフレーム単位でバッファ転送を起動する。
【００２８】
エクスチェンジシーケンサ２１６ｂはまた、バッファ転送の方向（つまりバッファ３に対するリード／ライトの別）に左右されることなく、現在実行中のデータ転送コマンドとは別のデータ転送コマンドに対応するバッファ転送を差し込む。
【００２９】
ホスト−データパスモジュール２２は、ＡＦＩＦＯ２２１に加えて、ＳＡＳインタフェースシーケンサ（以下、ＳＡＳＩＦシーケンサと称する）２２２と、バッファインタフェースシーケンサ（以下、バッファＩＦシーケンサと称する）２２３と、レジスタファイル２２４，２２５及び２２６と、更新制御モジュール２２７とを備えている。
【００３０】
ＳＡＳＩＦシーケンサ２２２は、ＡＦＩＦＯ２２１からＴｘＦＩＦＯ２１５へ、ホストからのリードコマンドで指定されたリードデータを、後述する内部制御用のバッファ転送情報に基づいてフレーム単位で転送する。ＳＡＳＩＦシーケンサ２２２はまた、ＲｘＦＩＦＯ２１４からＡＦＩＦＯ２２１へ、ホストからのライトコマンドで指定されたライトデータを、内部制御用のバッファ転送情報に基づいてフレーム単位で転送する。
【００３１】
バッファＩＦシーケンサ２２３は、バッファ３からＡＦＩＦＯ２２１へ、ホストからのリードコマンドで指定されたリードデータを、内部制御用のバッファ転送情報に基づいてセクタ単位で転送する。バッファＩＦシーケンサ２２３はまた、ＡＦＩＦＯ２２１からバッファ３へ、ホストからのライトコマンドで指定されたライトデータを、内部制御用のバッファ転送情報に基づいてセクタ単位で転送する。
【００３２】
内部制御用のバッファ転送情報は、フレーム単位のデータ転送（フレーム転送）及びセクタ単位のデータ転送（セクタ転送）の進行に応じて動的に更新される。ホスト−データパスモジュール２２は、内部制御用のバッファ転送情報に加えて、後述する現（current）バッファ転送情報及び前（previous）バッファ転送情報も保持・管理する。以下の説明では、現バッファ転送情報及び前バッファ転送情報を、それぞれ現情報及び前情報と称する。
【００３３】
内部制御用のバッファ転送情報、現情報及び前バッファ管理情報は、それぞれ後述するレジスタファイル２２４，２２５及び２２６に保持される。つまりレジスタファイル２２４，２２５及び２２６には、データ転送コマンドに対応するバッファ転送の起動時に、当該データ転送コマンドに対応付けてエクスチェンジテーブル２１６ａに登録されているバッファ転送情報が初期設定される。エクスチェンジシーケンサ２１６ｂからホスト−データパスモジュール２２に対して後述するフレーム完了が通知された場合、現情報は内部制御用のバッファ転送情報に、前情報は現情報に、それぞれ更新される。これにより、フレーム完了通知時点における内部制御用のバッファ転送情報及び現情報が、それぞれ、新たな現情報及び前情報として用いられる。
【００３４】
更新制御モジュール２２７は、起動されたバッファ転送の完了時に、その時点における現情報を次のバッファ転送のためのバッファ転送情報の初期値として、エクスチェンジテーブル２１６ａにフィードバックする。但し、ＳＡＳＩＦシーケンサ２２２による後述するＣＲＣチェックでエラーが検出された場合は、更新制御モジュール２２７は、現情報に代えて前情報をフィードバックする。これにより、エクスチェンジテーブル２１６ａは、現フレームのバッファ転送が開始された時点の状態に更新され（戻され）、ＣＰＵによるファームウェア（ＦＷ）に従う処理（ＦＷ処理）を必要とすることなしに、バッファ転送をリトライできる。
【００３５】
ホスト−データパスモジュール２２は、レジスタファイル２２４，２２５及び２２６と、更新制御モジュール２２７とを更に備えている。これらのレジスタファイル２２４，２２５及び２２６と、更新制御モジュール２２７とについては、図１３を参照して後述する。
【００３６】
次に、本実施形態におけるリード時のデータ転送（リードデータ転送）について、図３の動作説明図を参照して説明する。  
今、ホストからホストインタフェース部２にリードコマンドを含むフレームが転送されたものとする。このリードコマンドを含むフレームは、ＳＡＳモジュール２１で受信される。ＳＡＳモジュール２１内のトランスポート層モジュール２１６は、受信されたフレームから当該受信されたフレームに含まれているリードコマンド（つまりホストからのリードコマンド）を取り出す。
【００３７】
ＣＰＵは、ホストからのリードコマンドによって指定されるＬＢＡ（開始論理ブロックアドレス）及びバイトカウントを含むバッファ転送情報を、所定のＦＷに従って、当該リードコマンドに対応付けてエクスチェンジテーブル２１６ａに登録する。このことは、ＣＰＵが、ホストからのリードコマンドを、ＦＷに従ってトランスポート層モジュール２１６内のエクスチェンジテーブル２１６ａに登録したことと等価である。但し、エクスチェンジテーブル２１６ａに登録されるバッファ転送情報は、ホストからのデータ転送コマンド（ここではリードコマンド）によって指定されない、バッファアドレス、セクタカウント、ＢＣＲＣ及びＢＥＣＣを含む。本実施形態において、バッファアドレス、ＢＣＲＣ及びＢＥＣＣの初期値には、デフォルト値が用いられる。
【００３８】
またＣＰＵ（ＦＷ）は、リードコマンドで指定されたデータを記憶部からセクタ単位に読み出してバッファ３に一時格納するための制御を開始する。なお、この制御を開始した後に、ＣＰＵ（ＦＷ）が、リードコマンドに対応したバッファ転送情報をエクスチェンジテーブル２１６ａに登録してもよい。この場合、ＣＰＵ（ＦＷ）は、バッファ転送情報中のバッファアドレスの初期値（初期バッファアドレス）として、上記制御の開始時に実際に先頭のセクタデータが格納されるバッファ３のアドレスを用いる。
【００３９】
その後ＣＰＵは、バッファマネージャ１のエクスチェンジシーケンサ２１６ｂに対して、リードコマンドのコミットを要求する（ステップ３０１）。この要求に応じて、エクスチェンジシーケンサ２１６ｂは、リードコマンドで指定されたデータの転送（バッファ転送）の制御のために、ホスト−データパスモジュール２２に対して例えばフレーム単位でバッファ転送の起動を指示する（ステップ３０２）。
【００４０】
このとき、リードコマンドに対応付けてエクスチェンジテーブル２１６ａに登録されているバッファ転送情報が、ホスト−データパスモジュール２２内のレジスタファイル２２４，２２５及び２２６に初期設定される。レジスタファイル２２４に設定されたバッファ転送情報が、ホスト−データパスモジュール２２内のＳＡＳＩＦシーケンサ２２２及びバッファＩＦシーケンサ２２３によるデータ転送制御に用いられる。このＳＡＳＩＦシーケンサ２２２及びバッファＩＦシーケンサ２２３によるデータ転送制御を内部制御と称する。
【００４１】
さて、ホスト−データパスモジュール２２は、エクスチェンジシーケンサ２１６ｂからバッファ転送の起動が指示されると、レジスタファイル２２４に設定されたバッファ転送情報、即ちリードコマンドに対応する内部制御用のバッファ転送情報に基づき、当該リードコマンドで指定されたデータ（リードデータ）をバッファ３からＴｘＦＩＦＯ２１５に、ＡＦＩＦＯ２２１を介して転送する。以下、このバッファ３からＴｘＦＩＦＯ２１５へのリードデータの転送について詳述する。
【００４２】
ホスト−データパスモジュール２２のバッファＩＦシーケンサ２２３は、上述のリードコマンドに対応する内部制御用のバッファ転送情報中のバッファアドレス及びセクタカウントに基づき、バッファ３からＡＦＩＦＯ２２１へ、リードデータをセクタ単位で転送する（ステップ３０３）。このセクタ単位でバッファ３から取り出されるデータ（セクタデータ）には、ＣＲＣデータ（より詳細にはＣＲＣデータ及びＥＣＣ）が付加されている。
【００４３】
バッファＩＦシーケンサ２２３は、このセクタ単位のデータ転送に応じて、バッファアドレス及びセクタカウントを更新する。本実施形態において、セクタカウントは、セクタ単位のデータ転送に応じてディクリメントされる。
【００４４】
バッファＩＦシーケンサ２２３は、セクタ単位のデータ転送を、セクタカウントが「０」になるまで実行する。つまりバッファＩＦシーケンサ２２３は、セクタ単位のデータ転送を、内部制御用のバッファ転送情報中のバイトカウントを意識することなく実行する。
【００４５】
これにより、リードコマンドで指定されたバイトカウント（初期バイトカウント）の示すバイト数のデータの転送（或いは１フレーム分のデータの転送）が終了しても、セクタの境界（終端）に達しない場合には、バッファＩＦシーケンサ２２３は、当該セクタの最後までバッファ３からデータを取り出して、ＡＦＩＦＯ２２１に転送することになる。バッファＩＦシーケンサ２２３は、このようなデータ転送により、ＳＡＳＩＦシーケンサ２２２によるＣＲＣチェック（ＣＲＣ演算）を完結させることができる。つまりバッファＩＦシーケンサ２２３は、セクタ単位でバッファ３からＡＦＩＦＯ２２１に、ＣＲＣチェックに必要なＣＲＣデータ（より詳細にはＣＲＣデータ及びＥＣＣ）が付加されたデータ（セクタデータ）を転送することができる。これにより、以下に述べるように、バッファ転送で生成されるフレーム全体のエラーチェックが保証される。
【００４６】
ＳＡＳＩＦシーケンサ２２２は、ＡＦＩＦＯ２２１からＴｘＦＩＦＯ２１５へ、ホストからのリードコマンドで指定されたリードデータを、内部制御用のバッファ転送情報中のバイトカウントに基づいてフレーム単位で転送する（ステップ３０４）。
【００４７】
ＳＡＳＩＦシーケンサ２２２は、このフレーム単位のデータ転送に応じて、セクタカウント、バイトカウント及びＬＢＡを更新する。本実施形態において、バイトカウントは、フレーム単位のデータ転送に応じてディクリメントされる。
【００４８】
ＳＡＳＩＦシーケンサ２２２はフレーム単位の転送において、転送されるフレームを構成するセクタデータ（つまりバッファ３からＡＦＩＦＯ２２１にセクタ単位で転送されたセクタデータ）に基づいてＣＲＣデータ（ＣＲＣデータ及びＥＣＣ）を生成するためのＣＲＣ演算を行う。そしてＳＡＳＩＦシーケンサ２２２は、ＣＲＣ演算結果（生成されたＣＲＣデータ）と対応するセクタデータ中のＣＲＣデータ（ＣＲＣデータ及びＥＣＣ）とに基づいて、当該セクタデータのエラーをチェックする（３０５）。このエラーチェックが、ＣＲＣチェックである。
【００４９】
本実施形態では、バイトカウントが０になっても、セクタの終端に達しない場合、その時点のセクタカウントをバッファ転送情報として記憶し、ＳＡＳＩＦシーケンサ２２２は、バイトカウントが０となった位置から当該セクタの終端までのデータ、つまりＣＲＣチェック（ＣＲＣ演算）を完結させるために余分に転送されたデータを破棄する。なお、ＣＲＣチェックが、ＡＦＩＦＯ２２１からＴｘＦＩＦＯ２１５へのフレーム単位の転送時に行われる必要はない。例えば、バッファ３からセクタ単位に転送されたデータがＡＦＩＦＯ２２１に一時格納される際に、ＣＲＣチェックが行われてもよい。
【００５０】
ＳＡＳＩＦシーケンサ２２２は、ＣＲＣチェックでエラーが検出されたならば、エクスチェンジシーケンサ２１６ｂにエラーを通知する（ステップ３０６）。これに対し、ＣＲＣチェックでエラーが検出されず、且つフレーム単位でのバッファ転送の起動（ステップ３０２）に対応した１フレームのＡＦＩＦＯ２２１からＴｘＦＩＦＯ２１５への転送が完了したならば、ＳＡＳＩＦシーケンサ２２２はエクスチェンジシーケンサ２１６ｂにバッファ転送の完了を通知する（ステップ３０７）。
【００５１】
エクスチェンジシーケンサ２１６ｂは、ＳＡＳＩＦシーケンサ２２２からのバッファ転送完了の通知により１フレームの転送が確定したことを認識すると、ホスト−データパスモジュール２２に対してフレーム完了を通知する。
【００５２】
ホスト−データパスモジュール２２内の更新制御モジュール２２７は、このフレーム完了通知の後の、セクタ転送完了通知に応じて、現時点における更新されたバッファ転送情報（現情報）をエクスチェンジテーブル２１６ａにフィードバックする。即ち更新制御モジュール２２７は、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報を、次のフレーム転送（バッファ転送）のために、現情報に更新する。更新されたバッファ転送情報は、次のフレーム転送（バッファ転送）の管理に用いられる。現情報のフィードバックの詳細については、図１３を参照して後述する。
【００５３】
もし、ＳＡＳＩＦシーケンサ２２２からフィードバックされたバッファ転送情報（更新されたバッファ転送情報）をエクスチェンジテーブル２１６ａが更新後、バイトカウントが０になっていないならば、エクスチェンジシーケンサ２１６ｂは、ホスト−データパスモジュール２２に対して、再びフレーム単位でバッファ転送の起動を指示する（ステップ３０２）。
【００５４】
一方、リードコマンドで指定されたバイト数のリードデータのうち、先頭のフレームのデータのＡＦＩＦＯ２２１からＴｘＦＩＦＯ２１５への転送が完了すると、ＴｘＦＩＦＯ２１５からホストへの例えばコマンド単位のデータ転送（フレーム転送）がＳＡＳモジュール２１によって開始される。
【００５５】
図４は、上述のリードデータ転送の例Ｒ１を示すタイミングチャートである。  
例Ｒ１は、フレームの終端がセクタの終端に一致し、１セクタの長さが５１２Ｂ（バイト）、１フレームの長さが最長で１０２４Ｂの場合である。ここでは、フレーム単位でバッファ転送が起動され、３つのフレーム＃０乃至＃２が転送されるものとする。
【００５６】
例Ｒ１では、リードコマンドで指定されたリードデータをバッファ３からホストに転送するためのバッファ転送が、フレーム単位で起動される。このため、各フレーム転送の間に、他のリードコマンドまたはライトコマンドで指定されたデータを転送するためのバッファ転送（以下、他のリード／ライトのためのバッファ転送と称する）を挿入することができる。これにより、例えばリードデータ転送を伴うリードコマンドの実行が滞っても、バッファ転送効率が低下するのを防止できる。この効果は、各フレーム転送、例えばリードデータ転送のための各フレーム転送の間に、ライトコマンドで指定されたデータを転送するためのバッファ転送を優先的に挿入する場合に特に大きくなる。その理由は、リードデータの転送はバッファ３におけるデータ格納状況によって途中で途切れる可能性があるのに対し、ライトデータの転送はホストから要求があれば可能なことが保証されているためである。つまりライトデータ優先でバッファ３の領域を利用する方がバッファ転送効率を向上することができる。
【００５７】
図５は、上述のリードデータ転送の例Ｒ２を示すタイミングチャートである。  
例Ｒ２は、例Ｒ１と同様にフレームの終端がセクタの終端に一致し、１セクタの長さが５１２Ｂ（バイト）、１フレームの長さが最長で１０２４Ｂの場合である。但し例Ｒ２では、３フレーム一括でバッファ転送が起動されるものとする。
【００５８】
このように例Ｒ２では、リードコマンドで指定されたリードデータをバッファ３からホストに転送するためのバッファ転送が、３フレーム一括で起動される。この場合、他のリード／ライトのためのバッファ転送を、３フレームの転送終了後に行うことができる。また例Ｒ２では、１フレーム単位にバッファ転送を起動するよりも、起動回数が少なくなるため、効率のよいバッファ転送が可能となる。
【００５９】
なお、バッファ転送は、必ずしも、例Ｒ１のようにフレーム（１フレーム）単位で、或いは例２のように３フレーム一括で、起動される必要はない。例えば、バッファ転送が、２フレーム単位で、或いは４以上のフレームの単位で、起動されても構わない。つまり、バッファ転送は、少なくとも１つのフレームを単位に起動されればよい。
【００６０】
図６は、上述のリードデータ転送の例Ｒ３を示すタイミングチャートである。  
例Ｒ３は、フレームの終端がセクタの終端に一致せず、１セクタの長さが５２８Ｂ、１フレームの長さが最長で１０２４Ｂの場合である。ここでは、例Ｒ１と同様に、フレーム単位でバッファ転送が起動される。但し、例Ｒ３では、５つのセクタ＃０乃至＃４の転送により、対応するデータが３つのフレーム＃０乃至＃２に分けられて転送される。
【００６１】
例Ｒ３では、図６から明らかなように、先頭のセクタ＃０のデータ（５２８Ｂ）と、次のセクタ＃１の始端から４９６Ｂとから先頭のフレーム＃０が構成される。しかし、バッファＩＦシーケンサ２２３は、フレーム＃０の転送のために、セクタ＃０のデータと、セクタ＃１のデータとを、バッファ３からＡＦＩＦＯ２２１にセクタ単位で順次転送する。ＳＡＳＩＦシーケンサ２２２は、フレーム＃０のＴｘＦＩＦＯ２１５への転送を、バッファ３からＡＦＩＦＯ２２１へのセクタ＃０の転送に応じて開始する。
【００６２】
フレーム＃０は、セクタ＃１の始端から４９６Ｂの位置で終了する。しかしバッファＩＦシーケンサ２２３は、フレーム＃０の転送が完了してもセクタ＃１の転送が完了していない場合、セクタ＃１の残りの３２Ｂもバッファ３からリードしてＡＦＩＦＯ２２１に転送する。つまりバッファＩＦシーケンサ２２３は、フレーム＃０に対応する、セクタ＃０のデータ（５２８Ｂ）と次のセクタ＃１の始端から４９６Ｂ（第１のデータ）とを、バッファ３からＡＦＩＦＯ２２１へ転送し終えても、セクタ＃１の残りの３２Ｂ（第２のデータ）も続けてバッファ３からリードしてＡＦＩＦＯ２２１へ転送する。その理由は、ＳＡＳＩＦシーケンサ２２２によるセクタ＃１のデータを対象とするＣＲＣチェック（ＣＲＣ演算）を完結させるためである。このように、ＣＲＣチェックのためにセクタの残りのデータをバッファ３からリードすることを、ダミーリードと称する。
【００６３】
ＳＡＳＩＦシーケンサ２２２は、バッファＩＦシーケンサ２２３による上述のセクタ単位のデータ転送に応じて、ＡＦＩＦＯ２２１からセクタ＃０のデータをリードすることにより、フレーム＃０のＴｘＦＩＦＯ２１５への転送を開始する。ＳＡＳＩＦシーケンサ２２２はまた、セクタ＃０のデータをＡＦＩＦＯ２２１からリードした場合、当該セクタ＃０のＣＲＣチェックのためのＣＲＣ演算を実行する。そしてＳＡＳＩＦシーケンサ２２２は、ＣＲＣ演算の結果とセクタ＃０に含まれているＣＲＣデータ及びＥＣＣとに基づいて、当該セクタ＃０のＣＲＣチェックを実行する。
【００６４】
もし、セクタ＃０のＣＲＣチェックでエラーが検出されないならば、ＳＡＳＩＦシーケンサ２２２はフレーム＃０の転送を継続するために、セクタ＃１の始端から４９６Ｂをリードする。このときＳＡＳＩＦシーケンサ２２２は、セクタ＃１のＣＲＣチェックのためのＣＲＣ演算を開始する。ＳＡＳＩＦシーケンサ２２２がセクタ＃１の始端から４９６Ｂをリードした時点で、フレーム＃０のＴｘＦＩＦＯ２１５への転送は完了する。このように、フレーム＃０の転送が完了すると、詳細を後述するように、エクスチェンジシーケンサ２１６ｂからホスト−データパスモジュール２２に対してフレーム完了が通知され、現情報は内部制御用のバッファ転送情報に、前情報は現情報に、それぞれ更新される。
【００６５】
一方、ＳＡＳＩＦシーケンサ２２２はフレーム＃０の転送を完了しても、ＣＲＣ演算を完結させるために、セクタ＃１の残りの３２ＢをＡＦＩＦＯ２２１からリードする。ここで、セクタ＃１の始端から４９６ＢまでのＣＲＣ演算の途中結果、つまり演算途中のＣＲＣ値及びＥＣＣ（以下、ＣＲＣ中間データ及びＥＣＣ中間データと称する）は、それぞれ内部制御用のバッファ転送情報中の更新されたＢＣＲＣ及びＢＥＣＣとして用いられる。
【００６６】
ＣＲＣ演算がセクタ＃１の残りの３２Ｂまで完了すると、つまりＣＲＣ演算が確定すると、ＳＡＳＩＦシーケンサ２２２はＣＲＣチェックを実行する。即ちＳＡＳＩＦシーケンサ２２２は、ＣＲＣ演算で生成されたＣＲＣデータ及びＥＣＣと、セクタ＃１に含まれているＣＲＣデータ及びＥＣＣとに基づいて、当該セクタ＃１のＣＲＣチェックを実行する。
【００６７】
もし、ＣＲＣチェックでエラーが検出されなかった場合、ＳＡＳＩＦシーケンサ２２２はセクタ転送完了通知を発行する。すると更新制御モジュール２２７は、更新されたバッファ転送情報（現情報）を、次のフレーム＃１の転送のために、エクスチェンジテーブル２１６ａにフィードバックする。これにより、フレーム＃０の終端がセクタ＃１の終端に一致しないバッファ転送時でも、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報を、次のフレーム＃１の転送のためにＣＰＵがＦＷに従って更新する必要がなくなる。
【００６８】
エクスチェンジテーブル２１６ａにフィードバックされるバッファ転送情報は、ダミーリードを含めない時点の情報となる。例えば、バッファ転送情報中のバイトカウントは、セクタ＃１の残りの３２Ｂの先頭位置に対応し、バッファ転送情報中のＢＣＲＣ及びＢＥＣＣ、つまり更新されたＢＣＲＣ及びＢＥＣＣは、それぞれ、上述のＣＲＣ中間データ及びＥＣＣ中間データである。
【００６９】
一方、ＳＡＳＩＦシーケンサ２２２は、エクスチェンジシーケンサ２１６ｂにバッファ転送完了通知を返す。するとエクスチェンジシーケンサ２１６ｂは、更新制御モジュール２２７からエクスチェンジテーブル２１６ａにフィードバックされたバッファ転送情報（つまりセクタ＃１の残りの３２Ｂがリードされる直前の状態を示すバッファ転送情報）に基づいて、次のフレーム＃１の転送のために、ホスト−データパスモジュール２２に対してバッファ転送の起動を指示する。するとホスト−データパスモジュール２２のバッファＩＦシーケンサ２２３は、バッファ転送情報のバイトカウントに基づき、セクタ＃１の残り３２Ｂをバッファ３からＡＦＩＦＯ２２１に再度転送する。バッファＩＦシーケンサ２２３は更に、後続のセクタ＃２及びセクタ＃３を、バッファ３からＡＦＩＦＯ２２１に転送する。
【００７０】
ＳＡＳＩＦシーケンサ２２２は、セクタ＃１の残り３２Ｂと、セクタ＃２と、セクタ＃３の始端から４６４Ｂとから構成されるフレーム＃１を、ＡＦＩＦＯ２２１からＴｘＦＩＦＯ２１５に転送する。フレーム＃１の転送時に、ＳＡＳＩＦシーケンサ２２２は、バッファ転送情報中のＢＣＲＣ及びＢＥＣＣ（つまりセクタ＃１の始端から４９６ＢまでのＣＲＣ演算の途中結果）と、セクタ＃１の残り３２Ｂとに基づいて、セクタ＃１のデータのＣＲＣ演算を再開する。これによりＳＡＳＩＦシーケンサ２２２は、セクタ＃１の途中からのデータ転送（バッファ転送の起動）であっても、セクタ＃１全体を再度リードすることなく、またＣＲＣ演算を最初から実行することなく、当該セクタ＃１のＣＲＣチェックのためのＣＲＣ演算を正しく継続して完結することができる。
【００７１】
ＳＡＳＩＦシーケンサ２２２は、セクタ＃２及びセクタ＃３についても、ＣＲＣ演算を行って、そのＣＲＣ演算結果に基づいてＣＲＣチェックを行う。これらのＣＲＣチェックでエラーが検出されずに、ＴｘＦＩＦＯ２１５へのフレーム＃１の転送が完了したならば、ＳＡＳＩＦシーケンサ２２２は、エクスチェンジシーケンサ２１６ｂにバッファ転送完了通知を返す。
【００７２】
フレーム＃１に後続するフレーム＃２の生成・転送についても、当該フレーム＃１と同様に行われる。但し、フレーム＃１の終端は、セクタ＃４の終端に一致する。本実施形態において、フレームの長さは１０２４Ｂである必要はなく、１０２４Ｂを超えない範囲で任意の長さに設定可能である。
【００７３】
例Ｒ３においても、リードコマンドで指定されたリードデータをバッファ３からホストに転送するためのバッファ転送が、フレーム単位で起動される。このため、各フレーム転送の間に、他のリード／ライトのためのバッファ転送を挿入することができる。しかも、例えばフレーム＃０の転送とフレーム＃１の転送との間に、他のリード／ライトのためのバッファ転送を挿入しても、フレーム＃１の転送を、対応するバッファ転送情報中のバイトカウント、ＢＣＲＣ及びＢＥＣＣに基づいて効率的に行うことができる。
【００７４】
図７は、上述のリードデータ転送の例Ｒ４を示すタイミングチャートである。  
例Ｒ４は、例Ｒ３と同様に、フレームの終端がセクタの終端に一致せず、１セクタの長さが５２８Ｂ、１フレームの長さが最長で１０２４Ｂの場合である。ここでは、例Ｒ２と同様に、３フレーム一括でバッファ転送が起動され、例Ｒ３と同様に、５つのセクタ＃０乃至＃４の転送により、対応するデータが３つのフレーム＃０乃至＃２に分けられて転送される。
【００７５】
例Ｒ４では、例Ｒ３と同様に、先頭のセクタ＃０のデータ（５２８Ｂ）と、次のセクタ＃１の始端から４９６Ｂとで、先頭のフレーム＃０が構成される。つまりフレーム＃０はセクタ＃１のバッファ転送が完了しなければ確定しない。  
ＳＡＳＩＦシーケンサ２２２は、セクタ＃１のバッファ転送が完了すると、その旨をエクスチェンジシーケンサ２１６ｂに通知する。これによりエクスチェンジシーケンサ２１６ｂは、フレーム＃０が確定したとして、ホスト−データパスモジュール２２に対してフレーム完了を通知する。
【００７６】
またＳＡＳＩＦシーケンサ２２２は、バッファＩＦシーケンサ２２３によるバッファ３からＡＦＩＦＯ２２１へのセクタ単位のデータ転送（セクタ転送）の完了毎に、セクタ転送完了通知を発行する。例えば、フレーム＃０から除外される、セクタ＃１の残りの３２Ｂが、フレーム＃１の転送のためにバッファ３からＡＦＩＦＯ２２１に転送された場合、ＳＡＳＩＦシーケンサ２２２は、セクタ転送完了通知を発行する。
【００７７】
エクスチェンジシーケンサ２１６ｂは、フレーム完了をホスト−データパスモジュール２２に通知した場合、ＳＡＳＩＦシーケンサ２２２からセクタ転送完了通知が発行されるのを待って、対応するフレーム（ここではフレーム＃０）がＣＲＣ値を含めて確定したと判断する。またエクスチェンジシーケンサ２１６ｂは、フレーム＃２の転送のためにセクタ＃４がバッファ３からＡＦＩＦＯ２２１に転送された結果、ＳＡＳＩＦシーケンサ２２２からバッファ転送完了通知を受け取った場合には、全てのフレームが確定していると判断する。  
例Ｒ４においても、例Ｒ２と同様に、他のリード／ライトのためのバッファ転送を、フレーム＃０乃至＃２の３フレームの転送終了後に行うことができる。
【００７８】
次に、本実施形態におけるライト時のデータ転送（ライトデータ転送）について、図８の動作説明図を参照して説明する。  
今、ホストからホストインタフェース部２にライトコマンドを含むフレームが転送されたものとする。このライトコマンドを含むフレームは、ＳＡＳモジュール２１で受信される。またライトコマンドで指定されるライトデータは、ＲｘＦＩＦＯ２１４に格納される。
【００７９】
ＣＰＵ（ＦＷ）は、ＳＡＳモジュール２１で受信されたフレームに含まれているライトコマンド（つまりホストからのライトコマンド）によって指定されるＬＢＡ及びバイトカウントを含むバッファ転送情報を、当該リードコマンドに対応付けてエクスチェンジテーブル２１６ａに登録する。その後ＣＰＵは、バッファマネージャ１のエクスチェンジシーケンサ２１６ｂに対して、ライトコマンドのコミットを要求する（ステップ８０１）。この要求に応じて、エクスチェンジシーケンサ２１６ｂは、ライトコマンドで指定されたデータの転送（バッファ転送）の制御のために、ホスト−データパスモジュール２２に対して例えばフレーム単位でバッファ転送の起動を指示する（ステップ８０２）。
【００８０】
このとき、ライトコマンドに対応付けてエクスチェンジテーブル２１６ａに登録されているバッファ転送情報が、ホスト−データパスモジュール２２内のレジスタファイル２２４，２２５及び２２６に初期設定される。ホスト−データパスモジュール２２は、レジスタファイル２２４に設定されている、ライトコマンドに対応するバッファ転送情報（内部制御用のバッファ転送情報）に基づき、当該ライトコマンドで指定されたデータ（ライトデータ）をＲｘＦＩＦＯ２１４からバッファ３に、ＡＦＩＦＯ２２１を介して転送する。以下、このＲｘＦＩＦＯ２１４からバッファ３へのライトデータの転送について詳述する。なお、前述したリードデータの転送の場合と等価な点については、説明を省略する。
【００８１】
ＳＡＳＩＦシーケンサ２２２は、ＲｘＦＩＦＯ２１４からＡＦＩＦＯ２２１へ、ホストからのライトコマンドで指定されたライトデータを、バッファ転送情報中のバイトカウントに基づいてフレーム単位で転送する（ステップ８０３）。このときＳＡＳＩＦシーケンサ２２２は、ＲｘＦＩＦＯ２１４からＡＦＩＦＯ２２１にフレーム単位で転送されるデータに基づいて、セクタ単位でＣＲＣデータ及びＥＣＣを生成するためのＣＲＣ演算を行う（ステップ８０４）。このＣＲＣ演算の進行に応じて、レジスタファイル２２４に保持されているＢＣＲＣ及びＢＥＣＣが更新される。フレーム単位でＡＦＩＦＯ２２１に転送されるデータ（つまりＡＦＩＦＯ２２１に一時格納されるデータ）には、セクタ単位で生成されたＣＲＣデータ及びＥＣＣが付加される（ステップ８０５）。
【００８２】
一方、バッファＩＦシーケンサ２２３は、バッファ転送情報中のバッファアドレス及びセクタカウントに基づき、ＡＦＩＦＯ２２１からバッファ３へ、ライトデータをセクタ単位で転送する（ステップ８０６）。バッファＩＦシーケンサ２２３は、セクタ単位のデータ転送において、ライトコマンドで指定されたバイトカウント（初期バイトカウント）の示すバイト数のデータの転送が終了した場合には、たとえセクタの終端に達していなくても、その時点でセクタ単位の転送を完了する。
【００８３】
図９は、上述のライトデータ転送の例Ｗ１を示すタイミングチャートである。  
例Ｗ１は、フレームの終端がセクタの終端に一致し、１セクタの長さが５１２Ｂ（バイト）、１フレームの長さが最長で１０２４Ｂの場合である。ここでは、フレーム単位でバッファ転送が起動され、３フレームが転送されるものとする。
【００８４】
例Ｗ１では、ホストからのライトコマンドで指定されたホストからのライトデータを、バッファ３に転送するためのバッファ転送が、フレーム単位で起動される。このため、各フレーム転送の間に、他のリード／ライトのためのバッファ転送を挿入することができる。
【００８５】
図１０は、上述のライトデータ転送の例Ｗ２を示すタイミングチャートである。  
例Ｗ２は、例Ｗ１と同様にフレームの終端がセクタの終端に一致し、１セクタの長さが５１２Ｂ（バイト）、１フレームの長さが最長で１０２４Ｂの場合である。但し例Ｗ２では、例Ｒ２と同様に、３フレーム一括でバッファ転送が起動されるものとする。
【００８６】
このように例Ｗ２では、ライトコマンドで指定されたホストからのライトデータを、バッファ３に転送するためのバッファ転送が、３フレーム一括で起動される。この場合、他のリード／ライトのためのバッファ転送を、３フレームの転送終了後に行うことができる。
【００８７】
図１１は、上述のライトデータ転送の例３Ｗを示すタイミングチャートである。  
例Ｗ３は、フレームの終端がセクタの終端に一致せず、１セクタの長さが５２８Ｂ、１フレームの長さが最長で１０２４Ｂの場合である。ここでは、例Ｗ１と同様に、フレーム単位でバッファ転送が起動される。但し、例Ｗ３では、３つのフレーム＃０乃至＃２の転送により、対応するデータが５つのセクタ＃０乃至＃４に分散されて転送される。
【００８８】
例Ｗ３では、フレーム＃０は、セクタ＃０及びセクタ＃１に分けられる。但し、セクタ＃１は４９６Ｂであり、５２８Ｂに対して３２Ｂ少ない。つまり、セクタ＃１の途中でフレーム＃０が終了する。そのため、バッファＩＦシーケンサ２２３は、ＡＦＩＦＯ２２１からバッファ３へのセクタ単位のバッファ転送を、セクタ＃１の始端から４９６Ｂを転送した時点で完了する。このとき更新制御モジュール２２７によってエクスチェンジテーブル２１６ａにフィードバックされるバッファ転送情報は、セクタ＃１の始端から４９６Ｂを転送した時点の内部制御情報に更新された現情報、つまりセクタ＃１の残り３２Ｂが転送されない状態の内部制御情報に更新された現情報である。
【００８９】
そこで、エクスチェンジシーケンサ２１６ｂは、更新制御モジュール２２７によってエクスチェンジテーブル２１６ａにフィードバックされたバッファ転送情報に基づいて、次のフレーム＃１のためのバッファ転送の起動をホスト−データパスモジュール２２に対して指示する。これによりホスト−データパスモジュール２２のバッファＩＦシーケンサ２２３は、ＡＦＩＦＯ２２１からバッファ３へのセクタ単位のバッファ転送を、セクタ＃１の残り３２Ｂから再開する。
【００９０】
例Ｗ３では、ライトコマンドで指定されたライトデータを構成する３つのフレーム＃０乃至＃２の最後のフレーム＃２の終端はセクタ＃４の終端に一致する。前述したように、本実施形態において、フレームの長さは１０２４Ｂである必要はなく、１０２４Ｂを超えない範囲で任意の長さに設定可能である。  
例Ｗ３においても、例Ｗ１と同様に、各フレーム転送の間に、他のリード／ライトのためのバッファ転送を挿入することができる。
【００９１】
図１２は、上述のライトデータ転送の例Ｗ４を示すタイミングチャートである。  
例Ｗ４は、例Ｗ３と同様に、フレームの終端がセクタの終端に一致せず、１セクタの長さが５２８Ｂ、１フレームの長さが最長で１０２４Ｂの場合である。ここでは、例Ｗ２と同様に、３フレーム一括でバッファ転送が起動され、例Ｗ３と同様に、３つのフレーム＃０乃至＃２の転送により、対応するデータが５つのセクタ＃０乃至＃４に分散されて転送される。
【００９２】
例Ｗ４では、ＳＡＳＩＦシーケンサ２２２は、全てのフレーム＃０乃至＃２をＲｘＦＩＦＯ２１４からＡＦＩＦＯ２２１にシーケンシャルに転送する。一方、バッファＩＦシーケンサ２２３は、ＡＦＩＦＯ２２１に格納された全てのフレーム＃０乃至＃２をセクタ単位にシーケンシャルに転送する。
【００９３】
更新制御モジュール２２７は、バッファ転送完了後に、その時点におけるバッファ転送情報（つまり更新されたバッファ転送情報）をエクスチェンジテーブル２１６ａにフィードバックする。
【００９４】
フレーム＃０乃至＃２（つまり複数のフレーム）のシーケンシャル転送であっても、各フレームの終端が対応するセクタの終端に一致するとは限らない。このような場合、更新されたバッファ転送情報中の、例えばＣＲＣデータ（ＢＣＲＣ／ＢＥＣＣ）及びセクタカウントが有益となる。  
例Ｗ４においても、例Ｗ２と同様に、他のリード／ライトのためのバッファ転送を、３フレームの転送終了後に行うことができる。
【００９５】
図１３は、バッファマネージャ１のバッファ転送情報管理機能を中心とする構成を示すブロック図である。  
トランスポート層モジュール２１６は、前述したように、バッファ転送情報を保持するエクスチェンジテーブル２１６ａを備えている。このエクスチェンジテーブル２１６ａに保持されるバッファ転送情報は、バッファ転送の起動に用いられる。
【００９６】
一方、ホスト−データパスモジュール２２は、前述したように、レジスタファイル２２４，２２５及び２２６と、更新制御モジュール２２７とを備えている。レジスタファイル２２４，２２５及び２２６は、バッファ転送の起動時に、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報に初期化される。
【００９７】
レジスタファイル２２４に保持されているバッファ転送情報は、ホスト−データパスモジュール２２における転送シーケンスの制御（つまりホスト−データパスモジュール２２内部の制御）に用いられる。そこで、レジスタファイル２２４に保持されているバッファ転送情報を、内部制御用のバッファ転送情報と称する。
【００９８】
レジスタファイル２２５に保持されているバッファ転送情報は、現在転送中のフレーム（現フレーム）に関する情報であり、転送の進行に応じて動的に更新される。レジスタファイル２２５に保持されているバッファ転送情報は、前述のフィードバックに用いられる。レジスタファイル２２５に保持されているバッファ転送情報を、現（current）情報と称することもある。
【００９９】
レジスタファイル２２５に保持されているバッファ転送情報（現情報）は、エクスチェンジシーケンサ２１６ｂからのフレーム完了通知に応じて、レジスタファイル２２４に保持されているバッファ転送情報（内部制御用のバッファ転送情報）に更新される。この更新後の現情報は、次のフレーム転送（バッファ転送）のためのバッファ転送情報を示す。
【０１００】
レジスタファイル２２６に保持されているバッファ転送情報（前情報）は、前回転送されたフレーム（前フレーム）に関する情報である。レジスタファイル２２６に保持されているバッファ転送情報（前情報）は、エクスチェンジシーケンサ２１６ｂからのフレーム完了通知に応じて、レジスタファイル２２５に保持されているバッファ転送情報（現情報）に更新される。なお、レジスタファイル２２６に保持されているバッファ転送情報（前情報）は、ライト動作時には用いられない。
【０１０１】
更新制御モジュール２２７は、レジスタファイル２２５または２２６に保持されているバッファ転送情報（現情報または前情報）を選択して、当該選択されたバッファ転送情報でエクスチェンジテーブル２１６ａに保持されているバッファ転送情報を更新する。即ち更新制御モジュール２２７は、レジスタファイル２２５または２２６に保持されているバッファ転送情報をエクスチェンジテーブル２１６ａにフィードバックする。
【０１０２】
本実施形態において更新制御モジュール２２７は、通常はレジスタファイル２２５に保持されているバッファ転送情報、つまり現情報を選択する。更新制御モジュール２２７はまた、エクスチェンジシーケンサ２１６ｂからのフレーム完了通知に応じて、レジスタファイル２２６に保持されているバッファ転送情報、つまり前情報を選択し、当該フレーム完了通知後のセクタ転送完了通知に応じて、現情報の選択に戻る。
【０１０３】
本実施形態では、ＳＡＳＩＦシーケンサ２２２によるＣＲＣチェックでエラーが検出された場合、セクタ転送完了通知は発行されない。この場合、更新制御モジュール２２７は、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報を前情報に更新する。これにより、ＣＲＣチェックでエラーが検出された結果、リトライ処理が実行される場合に、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報を、ＣＰＵがＦＷに従って更新する必要がなくなる。
【０１０４】
図１４は、前述したリードデータ転送の例Ｒ１を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。  
例Ｒ１では、前述したように、フレームの終端がセクタの終端に一致しており、フレーム単位でバッファ転送が起動される。このような例Ｒ１では、レジスタファイル２２５に保持されているバッファ転送情報（現情報）が、更新制御モジュール２２７によって常に選択される。
【０１０５】
ここで、例えばフレーム＃０の転送が完了した際に、レジスタファイル２２４に保持されている内部制御用のバッファ転送情報（フレーム＃０情報）は、次のフレーム＃１の転送のためのバッファ転送情報（フレーム＃１情報）に更新されている点に注意すべきである。また、フレーム＃０の転送の完了に対応する、エクスチェンジシーケンサ２１６ｂからホスト−データパスモジュール２２へのフレーム完了通知に応じて、レジスタファイル２２５に保持されている現情報が、内部制御用のバッファ転送情報（フレーム＃１情報）に更新され、レジスタファイル２２６に保持されている前情報が現情報（フレーム＃０情報）に、それぞれ更新される点にも注意すべきである。更に、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報が、更新された現情報（フレーム＃１情報）に更新される点にも注意すべきである。
【０１０６】
図１５は、前述したリードデータ転送の例Ｒ２を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。  
例Ｒ２では、前述したように、フレームの終端がセクタの終端に一致しており、３フレーム一括でバッファ転送が起動される。このような例Ｒ２では、レジスタファイル２２５に保持されているバッファ転送情報（現情報）が、更新制御モジュール２２７によって常に選択される。
【０１０７】
図１６は、前述したリードデータ転送の例Ｒ３を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。  
例Ｒ３は、前述したように、フレームの終端がセクタの終端に一致せず、１セクタの長さが５２８Ｂ、１フレームの長さが最長で１０２４Ｂの場合である。また例Ｒ３では、フレーム単位でバッファ転送が起動され、５つのセクタ＃０乃至＃４の転送により、対応するデータが３つのフレーム＃０乃至＃２に分けられて転送される。
【０１０８】
例Ｒ３では、図１６から明らかなように、エクスチェンジシーケンサ２１６ｂからのフレーム完了通知に応じて、レジスタファイル２２５及び２２６に保持されているバッファ転送情報が、それぞれレジスタファイル２２４及び２２５に保持されているバッファ転送情報に更新される。つまり、現情報及び前情報が、それぞれフレーム完了通知時点の内部制御用のバッファ転送情報及び現情報に更新される。
【０１０９】
更新制御モジュール２２７は、フレーム完了通知に応じて、前情報（レジスタファイル２２６に保持されているバッファ転送情報）を選択する。更新制御モジュール２２７は、フレーム完了通知後のセクタ転送完了通知またはバッファ転送完了通知に応じて、現情報の選択に戻る。これによりセクタ転送完了通知またはバッファ転送完了通知時には、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報は、現情報に更新される。
【０１１０】
例Ｒ３では、最終フレーム＃２の場合、当該最終フレーム＃２に対応するフレーム完了通知の直後にバッファ転送完了が通知される。このため、更新制御モジュール２２７が前情報を選択するのは一瞬である。
【０１１１】
例Ｒ３では、フレーム＃ｉ（ｉ＝０，１，２）のバッファ転送時のＣＲＣチェックでエラーが検出された場合、セクタ転送完了通知は発行されない。この場合、更新制御モジュール２２７は現情報の選択に戻さない（切り替えない）。つまり、ＣＲＣチェックでエラーが検出された結果、リトライ処理が実行される場合に、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報は現情報に更新されない。これにより、エラーが検出されたフレーム＃ｉの転送のリトライ（つまりフレーム＃ｉのリトライ転送）を、ＣＰＵ（ＦＷ）によるバッファ転送情報の更新を必要とせずに実現できる。
【０１１２】
図１７は、前述したリードデータ転送の例Ｒ４を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。  
例Ｒ４は、前述したように、フレームの終端がセクタの終端に一致せず、１セクタの長さが５２８Ｂ、１フレームの長さが最長で１０２４Ｂの場合である。ここでは、３フレーム一括でバッファ転送が起動され、５つのセクタ＃０乃至＃４の転送により、対応するデータが３つのフレーム＃０乃至＃２に分けられて転送される。
【０１１３】
例Ｒ４では、図１７から明らかなように、エクスチェンジシーケンサ２１６ｂからのフレーム完了通知に応じて、レジスタファイル２２５及び２２６に保持されているバッファ転送情報（現情報及び前情報）が、それぞれレジスタファイル２２４及び２２５に保持されているバッファ転送情報に更新される。
【０１１４】
更新制御モジュール２２７は、フレーム完了通知に応じて、前情報（レジスタファイル２２６に保持されているバッファ転送情報）を選択する。更新制御モジュール２２７は、フレーム完了通知後のセクタ転送完了通知またはバッファ転送完了通知に応じて、現情報の選択に戻る。これによりセクタ転送完了通知またはバッファ転送完了通知時には、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報は、現情報に更新される。
【０１１５】
例Ｒ４では、最終フレーム＃２の場合、当該最終フレーム＃２に対応するフレーム完了通知の直後にバッファ転送完了が通知される。このため、更新制御モジュール２２７が前情報を選択するのは一瞬である。
【０１１６】
例Ｒ４においても、フレーム＃ｉ（ｉ＝０，１，２）のバッファ転送時のＣＲＣチェックでエラーが検出された場合、例Ｒ３と同様にセクタ転送完了通知は発行されない。この場合、更新制御モジュール２２７は現情報の選択に戻さない。つまり、ＣＲＣチェックでエラーが検出された結果、リトライ処理が実行される場合に、エクスチェンジテーブル２１６ａに保持されているバッファ転送情報は現情報に戻されない。これにより、フレーム＃ｉのリトライ転送を、ＣＰＵ（ＦＷ）によるバッファ転送情報の更新を必要とせずに実現できる。
【０１１７】
図１８は、前述したライトデータ転送の例Ｗ１を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。  
例Ｗ１では、前述したように、フレームの終端がセクタの終端に一致しており、フレーム単位でバッファ転送が起動される。このような例Ｗ１では、レジスタファイル２２５に保持されているバッファ転送情報（現情報）が、更新制御モジュール２２７によって常に選択される。
【０１１８】
図１９は、前述したライトデータ転送の例Ｗ２を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。  
例Ｗ２では、前述したように、フレームの終端がセクタの終端に一致しており、３フレーム一括でバッファ転送が起動される。例Ｗ２においても、レジスタファイル２２５に保持されているバッファ転送情報（現情報）が、更新制御モジュール２２７によって常に選択される。
【０１１９】
図２０は、前述したライトデータ転送の例Ｗ３を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。  
例Ｗ３では、前述したように、フレームの終端がセクタの終端に一致せず、フレーム単位でバッファ転送が起動される。例Ｗ３においても、レジスタファイル２２５に保持されているバッファ転送情報（現情報）が、更新制御モジュール２２７によって常に選択される。
【０１２０】
図２１は、前述したライトデータ転送の例Ｗ４を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。  
例Ｗ４では、前述したように、フレームの終端がセクタの終端に一致せず、３フレーム一括でバッファ転送が起動される。例Ｗ３においても、レジスタファイル２２５に保持されているバッファ転送情報（現情報）が、更新制御モジュール２２７によって常に選択される。  
このように、本実施形態におけるライトデータ転送では、レジスタファイル２２５に保持されているバッファ転送情報（現情報）が常に選択される。
【０１２１】
次に、本実施形態におけるリードコマンド＃ＲＣによって指定されたリードデータ転送及びライトコマンド＃ＷＣによって指定されたライトデータ転送の切り替えについて、図２２を参照して説明する。図２２は、リードデータ転送及びライトデータ転送の切り替えを、バッファ転送情報の転送と関連付けて示すタイミングチャートである。図２２の例では、フレーム単位でバッファ転送が起動され、且つリードデータ転送及びライトデータ転送が１フレーム毎に切り替えられる。
【０１２２】
図２２示すように、リードデータ転送では、フレーム＃ｒｄ０及び＃ｒｄ１がＡＦＩＦＯ２２１からＴｘＦＩＦＯ２１５に逐次転送される。また、ライトデータ転送では、フレーム＃ｗｒ０及び＃ｗｒ１がＲｘＦＩＦＯ２１４からＡＦＩＦＯ２２１に逐次転送される。
【０１２３】
より詳細に述べるならば、図２２の例では、リードデータ転送によるフレーム＃ｒｄ０の転送の後、ライトデータ転送によるフレーム＃ｗｒ０の転送に切り替えられる。また、このフレーム＃ｗｒ０の転送の後、リードデータ転送によるフレーム＃ｒｄ１の転送に切り替えられ、このフレーム＃ｒｄ１の転送の後、ライトデータ転送によるフレーム＃ｗｒ１の転送に切り替えられる。
【０１２４】
さて、例えばフレーム＃ｒｄ０の転送が完了した場合、ホスト−データパスモジュール２２（レジスタファイル２２５及び２２６）によって保持・管理されている現情報及び前情報は、エクスチェンジシーケンサ２１６ｂからのフレーム完了通知に応じて、その時点における内部制御用のバッファ転送情報及び現情報に、それぞれ更新される。更新後の現情報及び前情報は、それぞれフレーム＃ｒｄ１及びフレーム＃ｒｄ０の転送のためのバッファ転送情報（フレーム＃ｒｄ１情報及びフレーム＃ｒｄ０情報）である。この場合、更新制御モジュール２２７は、更新後の現情報（フレーム＃ｒｄ１情報）をエクスチェンジテーブル２１６ａにフィードバックする。
【０１２５】
これにより、エクスチェンジテーブル２１６ａに保持されている、リードコマンド＃ＲＣに対応するバッファ転送情報は、フレーム＃ｒｄ０情報からフレーム＃ｒｄ１情報に更新される。
【０１２６】
その後、ＣＰＵは、フレーム＃ｒｄ０のリードデータ転送からフレーム＃ｗｒ０のライトデータ転送に切り替えるために、ライトコマンド＃ＷＣに対応するバッファ転送情報（フレーム＃ｗｒ０情報）をエクスチェンジテーブル２１６ａに初期登録する。これにより、次のバッファ転送起動時には、ホスト−データパスモジュール２２（レジスタファイル２２４，２２５及び２２６）によって保持・管理されている内部制御用のバッファ転送情報、現情報及び前情報が、その時点においてライトコマンド＃ＷＣに対応付けてエクスチェンジテーブル２１６ａに保持されているバッファ転送情報（フレーム＃ｗｒ０情報）に更新される。すると、フレーム＃ｗｒ０情報に基づき、フレーム＃ｗｒ０の転送が行われる。
【０１２７】
フレーム＃ｗｒ０の転送が完了すると、ホスト−データパスモジュール２２（レジスタファイル２２５及び２２６）によって保持・管理されている現情報及び前情報は、エクスチェンジシーケンサ２１６ｂからのフレーム完了通知に応じて、その時点における内部制御用のバッファ転送情報及び現情報に、それぞれ更新される。更新後の現情報及び前情報は、それぞれフレーム＃ｗｒ１及びフレーム＃ｗｒ０のためのバッファ転送情報（フレーム＃ｗｒ１情報及びフレーム＃ｗｒ０情報）である。この場合、更新制御モジュール２２７は、更新後の現情報（フレーム＃ｗｒ１情報）をエクスチェンジテーブル２１６ａにフィードバックする。
【０１２８】
これにより、エクスチェンジテーブル２１６ａに保持されている、ライトコマンド＃ＷＣに対応するバッファ転送情報は、フレーム＃ｗｒ０情報からフレーム＃ｗｒ１情報に更新される。
【０１２９】
次のバッファ転送起動時には、ホスト−データパスモジュール２２（レジスタファイル２２４，２２５及び２２６）によって保持・管理されている内部制御用のバッファ転送情報、現情報及び前情報が、今度は、その時点においてリードコマンド＃ＲＣに対応付けてエクスチェンジテーブル２１６ａに保持されているバッファ転送情報（フレーム＃ｒｄ１情報）に更新される。すると、フレーム＃ｒｄ１情報に基づき、フレーム＃ｒｄ１の転送が行われる。以降の動作も同様である。
【０１３０】
これにより、リードコマンド＃ＲＣによって指定されたリードデータ転送及びライトコマンド＃ＷＣによって指定されたライトデータ転送のためのバッファ転送を、リードコマンド＃ＲＣ及びライトコマンド＃ＷＣのそれぞれについて、交互に１フレーム単位で切り替えて起動できる。
【０１３１】
以上説明した少なくとも１つの実施形態によれば、起動されたバッファ転送に対応するデータ転送コマンドの実行が滞ってもバッファ転送効率が低下するのを防止できるバッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法を提供することができる。
【０１３２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３３】
１…バッファマネージャ（バッファ管理装置）、２…ホストインタフェース部、３…バッファ、２１…ＳＡＳモジュール、２２…ホスト−データパスモジュール、２３…アービタ、２１４…ＲｘＦＩＦＯ（受信ＦＩＦＯ）、２１５…ＴｘＦＩＦＯ（送信ＦＩＦＯ）、２１６…トランスポート層モジュール、２１６ａ…エクスチェンジテーブル、２１６ｂ…エクスチェンジシーケンサ（第１のシーケンサ）、２２１…ＡＦＩＦＯ（中間ＦＩＦＯ）、２２２…ＳＡＳＩＦシーケンサ（第２のシーケンサ）、２２３…バッファＩＦシーケンサ（第３のシーケンサ）、２２４，２２５，２２６…レジスタファイル、２２７…更新制御モジュール。
【図１】
2012032962.tif 000003
【図２】
2012032962.tif 000004
【図３】
2012032962.tif 000005
【図４】
2012032962.tif 000006
【図５】
2012032962.tif 000007
【図６】
2012032962.tif 000008
【図７】
2012032962.tif 000009
【図８】
2012032962.tif 000010
【図９】
2012032962.tif 000011
【図１０】
2012032962.tif 000012
【図１１】
2012032962.tif 000013
【図１２】
2012032962.tif 000014
【図１３】
2012032962.tif 000015
【図１４】
2012032962.tif 000016
【図１５】
2012032962.tif 000017
【図１６】
2012032962.tif 000018
【図１７】
2012032962.tif 000019
【図１８】
2012032962.tif 000020
【図１９】
2012032962.tif 000021
【図２０】
2012032962.tif 000022
【図２１】
2012032962.tif 000023
【図２２】
2012032962.tif 000024
【手続補正書】
【提出日】平成23年10月7日(2011.10.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ホストへフレーム単位で転送されるべきデータを格納する送信ＦＩＦＯ及び前記ホストからフレーム単位で転送されたデータを格納する受信ＦＩＦＯと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理装置において、
前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間で転送されるデータを格納する中間ＦＩＦＯと、
前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間の、前記中間ＦＩＦＯを介してのデータ転送を管理するためのバッファ転送情報を保持するテーブルと、
前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間ＦＩＦＯとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも１つのフレームを単位に起動する第１のシーケンサと、
前記バッファ転送の起動に応じて、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記中間ＦＩＦＯとの間でフレーム単位でデータを転送し、前記バッファから前記中間ＦＩＦＯにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でＣＲＣデータを生成し、生成されたＣＲＣデータと対応するセクタデータに付加されているＣＲＣデータとを比較することによって当該セクタデータのエラーをチェックする第２のシーケンサと、
前記バッファ転送の起動に応じて、前記中間ＦＩＦＯと前記バッファとの間でセクタ単位にデータを転送し、第１のフレームのためのバッファ転送において、前記第１のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送し、前記第１のフレームの終端が前記第１のセクタの終端に一致せず、且つ前記第１のフレームの次の第２のフレームのためのバッファ転送が前記第１のシーケンサによって起動された場合、前記第１のセクタの始端から前記第１のフレームの終端に対応する前記第１のセクタ内の位置までの第１のデータに後続する、前記第１のセクタ内の前記位置から前記第１のセクタの終端までの第２のデータを、前記バッファから前記中間ＦＩＦＯに再度転送し、しかる後に前記第１のセクタに後続する第２のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送する第３のシーケンサとを具備し、
前記第２のシーケンサは、前記第１のフレームの終端が前記第１のセクタの終端に一致しない場合、前記第１のフレームの転送の完了後も、前記第１のデータに続いて転送される前記第２のデータに基づいて前記ＣＲＣデータの生成を継続し、前記ＣＲＣデータの生成の完了後に、前記第１のデータに続いて転送される前記第２のデータを破棄する
バッファ管理装置。
【請求項２】
前記バッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている対応するバッファ転送情報を、次のフレームの転送のために更新する更新制御手段を更に具備する請求項１記載のバッファ管理装置。
【請求項３】
前記第１のシーケンサは、前記第２のフレームのためのバッファ転送を、前記第１のフレームの転送が完了した場合に更新された前記テーブルに保持されている前記対応するバッファ転送情報に基づいて起動する請求項２記載のバッファ管理装置。
【請求項４】
前記更新制御手段は、前記セクタデータのエラーが検出された場合、前記テーブルに保持されている対応するバッファ転送情報を、当該セクタデータに対応するフレームの転送が開始された際の状態に戻す
請求項３記載のバッファ管理装置。
【請求項５】
前記第１のシーケンサは第１のデータ転送コマンドに対応する第１のバッファ転送の起動後、前記第１のデータ転送コマンドとは別の第２のデータ転送コマンドに対応するバッファ転送情報に基づいて、当該第２のデータ転送コマンドで指定されたデータ転送のための第２のバッファ転送を、少なくとも１つのフレームを単位に起動する請求項１記載のバッファ管理装置。
【請求項６】
前記第１のバッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている、前記第１のデータ転送コマンドに対応するバッファ転送情報を、次のフレームの転送のために更新し、前記第２のバッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている、前記第２のデータ転送コマンドに対応するバッファ転送情報を、次のフレームの転送のために更新する更新制御手段を更に具備する請求項５記載のバッファ管理装置。
【請求項７】
前記第１のシーケンサは、前記バッファ転送を、複数のフレームを単位に起動する請求項１記載のバッファ管理装置。
【請求項８】
ホストへフレーム単位で転送されるべきデータを格納する送信ＦＩＦＯと、
前記ホストからフレーム単位で転送されたデータを格納する受信ＦＩＦＯと、
記憶部と、
前記記憶部からセクタ単位で読み出されるデータ及び前記記憶部にセクタ単位で書き込まれるデータを格納するバッファと、
前記送信ＦＩＦＯ及び前記受信ＦＩＦＯと前記バッファとの間のデータ転送を管理するバッファ管理装置とを具備し、
前記バッファ管理装置は、
前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間で転送されるデータを格納する中間ＦＩＦＯと、
前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間の、前記中間ＦＩＦＯを介してのデータ転送を管理するためのバッファ転送情報を保持するテーブルと、
前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間ＦＩＦＯとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも１つのフレームを単位に起動する第１のシーケンサと、
前記バッファ転送の起動に応じて、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記中間ＦＩＦＯとの間でフレーム単位でデータを転送し、前記バッファから前記中間ＦＩＦＯにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でＣＲＣデータを生成し、生成されたＣＲＣデータと対応するセクタデータに付加されているＣＲＣデータとを比較することによって当該セクタデータのエラーをチェックする第２のシーケンサと、
前記バッファ転送の起動に応じて、前記中間ＦＩＦＯと前記バッファとの間でセクタ単位にデータを転送し、第１のフレームのためのバッファ転送において、前記第１のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送し、前記第１のフレームの終端が前記第１のセクタの終端に一致せず、且つ前記第１のフレームの次の第２のフレームのためのバッファ転送が前記第１のシーケンサによって起動された場合、前記第１のセクタの始端から前記第１のフレームの終端に対応する前記第１のセクタ内の位置までの第１のデータに後続する、前記第１のセクタ内の前記位置から前記第１のセクタの終端までの第２のデータを、前記バッファから前記中間ＦＩＦＯに再度転送し、しかる後に前記第１のセクタに後続する第２のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送する第３のシーケンサとを具備し、
前記第２のシーケンサは、前記第１のフレームの終端が前記第１のセクタの終端に一致しない場合、前記第１のフレームの転送の完了後も、前記第１のデータに続いて転送される前記第２のデータに基づいて前記ＣＲＣデータの生成を継続し、前記ＣＲＣデータの生成の完了後に、前記第１のデータに続いて転送される前記第２のデータを破棄する
記憶装置。
【請求項９】
テーブル及び中間ＦＩＦＯを備えたバッファ管理装置において、ホストへフレーム単位で転送されるべきデータを格納する送信ＦＩＦＯ及び前記ホストからフレーム単位で転送されたデータを格納する受信ＦＩＦＯと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理方法であって、
前記テーブルに前記ホストからのデータ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間ＦＩＦＯとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも１つのフレームを単位に起動し、
前記バッファ転送の起動に応じて、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記中間ＦＩＦＯとの間でフレーム単位でデータを転送し、
前記バッファから前記中間ＦＩＦＯにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でＣＲＣデータを生成し、生成されたＣＲＣデータと対応するセクタデータに付加されているＣＲＣデータとを比較することによって当該セクタデータのエラーをチェックし、
第１のフレームのためのバッファ転送において、前記第１のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送し、
前記第１のフレームの終端が前記第１のセクタの終端に一致しない場合、前記第１のフレームの転送の完了後も、前記第１のセクタの始端から前記第１のフレームの終端に対応する前記第１のセクタ内の位置までの第１のデータに続いて転送される、前記第１のセクタ内の前記位置から前記第１のセクタの終端までの第２のデータに基づいて前記ＣＲＣデータの生成を継続し、
前記ＣＲＣデータの生成の完了後に、前記第１のデータに続いて転送される前記第２のデータを破棄し、
前記第１のフレームの終端が前記第１のセクタの終端に一致せず、且つ前記第１のフレームの次の第２のフレームのためのバッファ転送が前記第１のシーケンサによって起動された場合、前記第２のデータを前記バッファから前記中間ＦＩＦＯに再度転送し、
前記第２のデータを再度転送した後に前記第１のセクタに後続する第２のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送する
バッファ管理方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
実施形態によれば、ホストへフレーム単位で転送されるべきデータを格納する送信ＦＩＦＯ及び前記ホストからフレーム単位で転送されたデータを格納する受信ＦＩＦＯと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理装置が提供される。このバッファ管理装置は、中間ＦＩＦＯと、テーブルと、第１のシーケンサと、第２のシーケンサと、第３のシーケンサとを具備する。中間ＦＩＦＯは、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間で転送されるデータを格納する。テーブルは、前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記バッファとの間の、前記中間ＦＩＦＯを介してのデータ転送を管理するためのバッファ転送情報を保持する。第１のシーケンサは、前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間ＦＩＦＯとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも１つのフレームを単位に起動する。第２のシーケンサは、前記バッファ転送の起動に応じて、前記送信ＦＩＦＯまたは前記受信ＦＩＦＯと前記中間ＦＩＦＯとの間でフレーム単位でデータを転送し、前記バッファから前記中間ＦＩＦＯにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でＣＲＣデータを生成し、生成されたＣＲＣデータと対応するセクタデータに付加されているＣＲＣデータとを比較することによって当該セクタデータのエラーをチェックする。第３のシーケンサは、前記バッファ転送の起動に応じて、前記中間ＦＩＦＯと前記バッファとの間でセクタ単位にデータを転送し、第１のフレームのためのバッファ転送において、前記第１のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送し、前記第１のフレームの終端が前記第１のセクタの終端に一致せず、且つ前記第１のフレームの次の第２のフレームのためのバッファ転送が前記第１のシーケンサによって起動された場合、前記第１のセクタの始端から前記第１のフレームの終端に対応する前記第１のセクタ内の位置までの第１のデータに後続する、前記第１のセクタ内の前記位置から前記第１のセクタの終端までの第２のデータを、前記バッファから前記中間ＦＩＦＯに再度転送し、しかる後に前記第１のセクタに後続する第２のセクタの始端から終端までのデータを前記バッファから前記中間ＦＩＦＯに転送する。前記第２のシーケンサは、前記第１のフレームの終端が前記第１のセクタの終端に一致しない場合、前記第１のフレームの転送の完了後も、前記第１のデータに続いて転送される前記第２のデータに基づいて前記ＣＲＣデータの生成を継続し、前記ＣＲＣデータの生成の完了後に、前記第１のデータに続いて転送される前記第２のデータを破棄する。