(57)【特許請求の範囲】
【請求項１】
処理部から入力したデータをメモリに転送するデータ転送装置であって、
前記処理部から入力した転送要求と、前記処理部から入力した複数の転送要求に対応する複数のデータが連続したデータであるか否かを示す第１判定結果と、前記複数のデータを結合した後のサイズが前記メモリのカラムサイズ以下である第１バースト長を超えているか否かを示す第２判定結果とを保持する第１コマンドキューを有し、前記第１判定結果及び前記第２判定結果に基づいてライトアドレスを出力するコマンド転送部と、
前記第１バースト長以上のサイズを有する第１ラインバッファを複数個有し、前記ライトアドレスに従って前記処理部から入力したデータを前記第１ラインバッファに保持するバッファ部と、
前記第１ラインバッファと同数の第２ラインバッファを有して前記各第１ラインバッファに保持された前記データに対応する転送要求を結合するための結合情報を保持する保持部を有するバッファ管理部と、
前記保持部に保持された前記結合情報に基づいて、前記複数の転送要求を結合し、データサイズが前記第１バースト長以下であって、前記第１バースト長に基づく開始アドレスを有する結合後の転送要求を生成し、前記結合後の転送要求を出力する結合コマンド転送部と、を有し、
前記バッファ管理部は、前記結合後の転送要求を特定する第１番号を管理し、前記各第２ラインバッファに前記第１番号を保持し、
前記コマンド転送部は、前記転送要求と併せて、該転送要求に対応するデータを書き込む前記第１ラインバッファのライン番号と、前記第１判定結果と、前記第２判定結果と、前記第１番号とを前記第１コマンドキューに保持し、前記第１コマンドキューに保持された前記第１番号が保持される第１応答キューを有し、
前記結合コマンド転送部は、前記結合後の転送要求と併せて、前記第１番号が保持される第２コマンドキューと、前記第２コマンドキューに保持された前記第１番号が保持される第２応答キューとを有し、前記結合後の転送要求に対するライト完了通知を受信したときに、前記第２応答キューに保持された前記第１番号を前記コマンド転送部に出力し、
前記コマンド転送部は、前記結合コマンド転送部から受信した前記第１番号と前記第１応答キューに保持された前記第１番号とに基づいて、転送要求元の処理部にライト完了通知を出力するデータ転送装置。
【請求項２】
前記コマンド転送部は、
前記第２判定結果に基づいて、前記各第１ラインバッファにおいて該第１ラインバッファの１ライン分のデータの結合が完了したか否かを示す第１フラグを生成し、該第１フラグを前記保持部に保持し、
前記第１判定結果及び前記第２判定結果に基づいて、前記各第１ラインバッファにおいて該第１ラインバッファの１ライン未満でデータの結合が中断したか否かを示す第２フラグを生成し、該第２フラグを前記保持部に保持することを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
前記各第２ラインバッファには、同じ前記第１ラインバッファに保持されたデータに対応する転送要求のうち最後に受信した転送要求と、前記第１フラグと、前記第２フラグとが保持されることを特徴とする請求項２に記載のデータ転送装置。
【請求項４】
複数の前記処理部から出力される転送要求を調停するライト調停部を有し、
前記第１コマンドキューと前記第１応答キューと前記保持部と前記第２コマンドキューと前記第２応答キューには、前記第１番号と併せて、転送要求元の処理部を特定する第２番号が保持されることを特徴とする請求項３に記載のデータ転送装置。
【請求項５】
前記コマンド転送部は、
前記処理部から入力した転送要求のアドレスと、前記保持部に保持された転送要求のうち、前記処理部から入力した転送要求と要求元の処理部が一致する転送要求のアドレスと、が連続するか否かに応じて、前記第１判定結果を生成し、
前記処理部から入力した転送要求のアドレスのうち、前記第１ラインバッファの１ライン分のアドレス範囲のアドレスに、前記処理部から入力した転送要求のサイズを加算した加算値と、前記第１バースト長との比較結果に応じて、前記第２判定結果を生成し、
前記結合コマンド転送部は、前記第２ラインバッファに保持された転送要求のアドレス及びサイズと前記第１フラグと前記第２フラグとに基づいて、前記結合後の転送要求に対応する結合後アドレス及び結合後サイズを算出することを特徴とする請求項３又は４に記載のデータ転送装置。
【請求項６】
前記各第２ラインバッファには、同じ前記第１ラインバッファに保持されたデータに対応する転送要求のうち、最初に受信した転送要求のアドレスが結合開始アドレスとして保持され、
前記結合コマンド転送部は、前記結合後の転送要求の開始アドレスを、前記結合開始アドレスに基づくアドレスに変換することを特徴とする請求項３〜５の何れか一項に記載のデータ転送装置。
【請求項７】
前記第１バースト長は、前記メモリのカラムサイズの約数となるサイズであることを特徴とする請求項１〜６のいずれか一項に記載のデータ転送装置。
【請求項８】
前記コマンド転送部を第１コマンド転送部としたときに、
前記転送要求の結合が可能か否かを示す結合可否信号に基づいて、前記処理部から入力した前記転送要求を、前記第１コマンド転送部と第２コマンド転送部との何れか一方に出力するコマンド選択回路と、
前記コマンド選択回路から入力した転送要求を保持する第３コマンドキューを有し、前記第３コマンドキューに保持された転送要求を前記結合コマンド転送部に出力する前記第２コマンド転送部と、
前記バッファ管理部及び前記第３コマンドキューの状態に基づき生成される選択信号に基づいて、前記バッファ部に保持された結合後のデータと、前記第２コマンド転送部に出力される転送要求に対応する非結合のデータとの何れか一方を出力するデータ選択回路と、を有することを特徴とする請求項１に記載のデータ転送装置。
【請求項９】
処理部から入力したデータをメモリに転送するデータ転送方法であって、
コマンド転送部が、前記処理部から入力した転送要求を順次保持し、前記処理部から入力した複数の転送要求に対応する複数のデータが連続したデータであるか否かを示す第１判定結果と、前記複数のデータを結合した後のサイズが前記メモリのカラムサイズ以下である第１バースト長を超えているか否かを示す第２判定結果とに基づいて、ライトアドレスを生成し、
前記第１バースト長以上のサイズを有する第１ラインバッファを複数個有するバッファ部に対し、前記ライトアドレスに従って前記処理部から入力したデータを格納し、
結合コマンド転送部が、前記各第１ラインバッファに保持された前記データに対応する複数の転送要求を結合し、データサイズが前記第１バースト長以下であって、前記第１バースト長に基づく開始アドレスを有する結合後の転送要求を生成し、前記結合後の転送要求を出力し、
前記第１ラインバッファと同数の第２ラインバッファを有するバッファ管理部が、前記結合後の転送要求を特定する第１番号を管理し、前記各第２ラインバッファに前記第１番号を保持し、
前記コマンド転送部が、前記転送要求と併せて、該転送要求に対応するデータを書き込む前記第１ラインバッファのライン番号と、前記第１判定結果と、前記第２判定結果と、前記第１番号とを第１コマンドキューに保持し、前記第１コマンドキューに保持された前記第１番号を第１応答キューに保持し、
前記結合コマンド転送部が、前記結合後の転送要求と併せて、前記第１番号を第２コマンドキューに保持し、前記第２コマンドキューに保持された前記第１番号を第２応答キューに保持し、前記結合後の転送要求に対するライト完了通知を受信したときに、前記第２応答キューに保持された前記第１番号を前記コマンド転送部に出力し、
前記コマンド転送部が、前記結合コマンド転送部から受信した前記第１番号と前記第１応答キューに保持された前記第１番号とに基づいて、転送要求元の処理部にライト完了通知を出力することを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置及びデータ転送方法に関するものである。
【背景技術】
【０００２】
従来、データを扱う電子機器は、データを格納するメモリを有している。例えば、画像データを扱う機器の一つであるデジタルカメラは、撮像素子により得た画像データをメモリに格納する。そして、デジタルカメラは、メモリから読み出した画像データに対して復号処理等の画像処理を行い、処理後のデータをメモリに格納する。また、デジタルカメラは、メモリに格納された画像データを表示部に表示する。
【０００３】
なお、上記従来技術に関連する先行技術として、特許文献１，２が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１７１２０９号公報
【特許文献２】特開平１１−２４２６４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上記電子機器に含まれる各種の処理回路は、メモリに対してアクセス、すなわちデータの書き込みやデータの読み出しを行う。このとき、バースト長の短い処理回路が含まれていると、この処理回路によるメモリアクセスによって、複数の処理回路が動作するシステム全体におけるメモリ帯域の使用効率が低下するという問題がある。
【課題を解決するための手段】
【０００６】
本発明の一観点によれば、処理部から入力したデータをメモリに転送するデータ転送装置であって、前記処理部から入力した転送要求と、前記処理部から入力した複数の転送要求に対応する複数のデータが連続したデータであるか否かを示す第１判定結果と、前記複数のデータを結合した後のサイズが前記メモリのカラムサイズ以下である第１バースト長を超えているか否かを示す第２判定結果とを保持する第１コマンドキューを有し、前記第１判定結果及び前記第２判定結果に基づいてライトアドレスを出力するコマンド転送部と、前記第１バースト長以上のサイズを有する第１ラインバッファを複数個有し、前記ライトアドレスに従って前記処理部から入力したデータを前記第１ラインバッファに保持するバッファ部と、前記第１ラインバッファと同数の第２ラインバッファを有して前記各第１ラインバッファに保持された前記データに対応する転送要求を結合するための結合情報を保持する保持部を有するバッファ管理部と、前記保持部に保持された前記結合情報に基づいて、前記複数の転送要求を結合し、データサイズが前記第１バースト長以下であって、前記第１バースト長に基づく開始アドレスを有する結合後の転送要求を生成し、前記結合後の転送要求を出力する結合コマンド転送部と、を有し、前記バッファ管理部は、前記結合後の転送要求を特定する第１番号を管理し、前記各第２ラインバッファに前記第１番号を保持し、前記コマンド転送部は、前記転送要求と併せて、該転送要求に対応するデータを書き込む前記第１ラインバッファのライン番号と、前記第１判定結果と、前記第２判定結果と、前記第１番号とを前記第１コマンドキューに保持し、前記第１コマンドキューに保持された前記第１番号が保持される第１応答キューを有し、前記結合コマンド転送部は、前記結合後の転送要求と併せて、前記第１番号が保持される第２コマンドキューと、前記第２コマンドキューに保持された前記第１番号が保持される第２応答キューとを有し、前記結合後の転送要求に対するライト完了通知を受信したときに、前記第２応答キューに保持された前記第１番号を前記コマンド転送部に出力し、前記コマンド転送部は、前記結合コマンド転送部から受信した前記第１番号と前記第１応答キューに保持された前記第１番号とに基づいて、転送要求元の処理部にライト完了通知を出力する。
【発明の効果】
【０００７】
本発明の一観点によれば、メモリ帯域の使用効率を向上させることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】一実施形態の撮像装置を示すブロック図。
【図２】一実施形態の画像処理装置の内部構成例を示すブロック図。
【図３】一実施形態のデータ結合部の内部構成例を示すブロック図。
【図４】（ａ）は、コマンドキューを示す説明図、（ｂ）は、応答キューを示す説明図。
【図５】保持部を示す説明図。
【図６】（ａ）は、コマンドキューを示す説明図、（ｂ）は、応答キューを示す説明図。
【図７】（ａ）は、データ保持部を示す説明図、（ｂ）は、データイネーブル保持部を示す説明図。
【図８】メモリを示す説明図。
【図９】（ａ）〜（ｃ）は、第１の具体例における動作を示す説明図。
【図１０】コマンド転送要求の受信処理を示すフローチャート。
【図１１】コマンド転送要求の受信処理を示す説明図。
【図１２】（ａ），（ｂ）は、コマンド転送要求の受信処理を示す説明図。
【図１３】（ａ），（ｂ）は、コマンド転送要求の受信処理を示す説明図。
【図１４】コマンド転送要求の受信処理を示す説明図。
【図１５】データ転送要求の受信処理を示すフローチャート。
【図１６】データ転送要求の受信処理を示す説明図。
【図１７】データ転送要求の受信処理を示す説明図。
【図１８】データ転送要求の受信処理を示す説明図。
【図１９】結合後のコマンド転送要求の生成処理を示すフローチャート。
【図２０】結合後のコマンド転送要求の生成処理を示す説明図。
【図２１】結合後のデータ転送処理を示すフローチャート。
【図２２】結合後のデータ転送処理を示す説明図。
【図２３】結合コマンド転送部によるライト完了通知の受信処理を示すフローチャート。
【図２４】バスマスタに対するライト完了通知の送信処理を示すフローチャート。
【図２５】バスマスタに対するライト完了通知の送信処理を示す説明図。
【図２６】（ａ）〜（ｆ）は、第２の具体例における動作を示す説明図。
【図２７】（ａ）〜（ｆ）は、第３の具体例における動作を示す説明図。
【図２８】（ａ），（ｂ）は、従来のデータ転送を示す説明図、（ｃ），（ｄ）は、一実施形態のデータ転送を示す説明図。
【図２９】変形例の保持部におけるラインバッファを示す説明図。
【図３０】変形例のデータ結合部の内部構成例を示すブロック図。
【発明を実施するための形態】
【０００９】
（第１実施形態）
以下、図１〜図２８に従って第１実施形態を説明する。
図１に示す撮像装置１０は、例えば、デジタルスチルカメラである。撮像装置１０は、撮像部１１と、画像処理装置１２と、入力装置１３と、メモリ１４と、メモリカード１５と、表示部１６とを有している。
【００１０】
撮像部１１は、例えば、撮像光学系と撮像素子を有している。撮像光学系は、被写体からの光を集光するレンズ（フォーカスレンズなど）や、レンズを通過した光の量を調整する絞り等を有している。撮像素子は、例えば、ＣＣＤ（Charge Coupled Device）イメージセンサやＣＭＯＳ（Complementary Metal Oxide Semiconductor）イメージセンサである。撮像素子は、入射する光を電気信号に変換して１フレームの画像データを生成する。撮像部１１は、撮像素子から出力されるアナログの画像データをデジタル化し、そのデジタル化した画像データＧＤを出力する。
【００１１】
画像処理装置１２は、撮像部１１から出力される画像データＧＤ（例えば、ＲＧＢ形式の画像データ（ベイヤデータ））を取り込む。画像処理装置１２は、受信した画像データに対して各種画像処理を施す。例えば、画像処理装置１２は、所定の処理段階で画像データをメモリ１４に一時的に格納する。メモリ１４は、例えば、同期式半導体メモリ（ＳＤＲＡＭ：Synchronous Dynamic Random Access Memory）などの書き換え可能なメモリである。また、画像処理装置１２は、メモリ１４に格納された各種画像処理後の画像データをメモリカード１５に格納したり、表示部１６に表示したりする。
【００１２】
入力装置１３は、ユーザにより操作されるシャッタボタン、メニューボタンやタッチパネル等の各種スイッチを有している。この各種スイッチは、例えば、写真撮影、撮影条件の設定や表示方式の設定を行うために使用される。画像処理装置１２は、入力装置１３に対する操作に応じて、撮影モードや各処理において必要な情報等の設定値を記憶する。
【００１３】
メモリカード１５は、例えば、コンパクトフラッシュ（登録商標）やＳＤメモリカード（登録商標）などの携帯型メモリカードである。
表示部１６としては、例えば、液晶表示装置（ＬＣＤ：Liquid Crystal Display）や有機ＥＬ（Electronic Luminescence）を用いることができる。また、表示部１６としては、例えば、電子ビューファインダ（ＥＶＦ：Electronic View Finder）や、外部接続のためのインターフェース（例えば、ＨＤＭＩ（登録商標）：High-Definition Multimedia Interface）を用いることもできる。表示部１６は、撮影する画像の確認、撮影された画像の表示、当該撮像装置１０における各種情報（例えば、駆動源であるバッテリの残量、撮影モード）の表示に用いられる。
【００１４】
次に、画像処理装置１２の内部構成例について説明する。
図２に示すように、画像処理装置１２は、センサインタフェース（Ｉ／Ｆ）２１と、色処理部２２と、補正部２３と、リサイズ部２４と、圧縮伸長部２５と、メモリカードＩ／Ｆ２６と、表示Ｉ／Ｆ２７と、調停部２８と、メモリＩ／Ｆ２９と、データ結合部３０とを有している。
【００１５】
センサＩ／Ｆ２１は、撮像部１１から出力される画像データＧＤを取り込み、その画像データをメモリ１４に格納する。色処理部２２は、メモリ１４から読み出した画像データに対して色空間変換処理を行って、変換処理後の画像データをメモリ１４に格納する。補正部２３は、メモリ１４から読み出した画像データに対して補正処理を施し、補正後の画像データをメモリ１４に格納する。補正処理は、例えば、明るさやコントラストを調整するガンマ補正処理、光学系による画像の歪みを補正する歪補正処理である。
【００１６】
リサイズ部２４は、メモリ１４から読み出したデータに対して、画素データの間引き、データ補間などの処理を行って画像サイズを変更し、処理後のデータをメモリ１４に格納する。圧縮伸長部２５は、所定の方式（例えば、ＪＰＥＧ（Joint Photographic Experts Group）方式）により圧縮データを生成する。圧縮伸長部２５は、圧縮データを伸長した画像データを生成する。圧縮伸長部２５は、生成したデータをメモリ１４に格納する。
【００１７】
メモリカードＩ／Ｆ２６は、メモリ１４に格納されたデータ（例えば、圧縮された画像データ）を、図１に示したメモリカード１５に格納する。
表示Ｉ／Ｆ２７は、メモリ１４に格納された画像データを読み出し、その画像データに基づいて生成した表示データを表示部１６に出力する。
【００１８】
センサＩ／Ｆ２１、色処理部２２、補正部２３、リサイズ部２４、圧縮伸長部２５、メモリカードＩ／Ｆ２６、表示Ｉ／Ｆ２７は、処理部の一例である。以下の説明において、それぞれの処理を区別する必要がない場合には、処理部２１〜２７と称して説明する。なお、画像処理装置１２に含まれる処理部２１〜２７及び各処理部２１〜２７の処理内容は一例を示すものであり、画像処理装置１２が含む処理部の種類や処理内容は、適宜変更してもよい。
【００１９】
処理部２１〜２７は、それぞれの処理タイミングに応じてメモリ１４をアクセスするための要求を含む各種信号を出力する。調停部２８は、処理部２１〜２７の要求を調停し、調停結果に応じて１つの処理部に対してアクセス許可を与える。
【００２０】
調停部２８は、ライト調停部２８Ａと、リード調停部２８Ｂとを有している。ライト調停部２８Ａは、処理部２１〜２６から出力され競合する書き込み要求（ライトリクエスト）を、例えば、各処理部２１〜２６に対応して設定された優先度に従って調停し、１つの処理部に対するライトアクセスを許可する。ライトアクセスが許可された処理部は、メモリ１４に対するライトアクセスのための制御信号（コマンド転送要求、データ転送要求、アドレス、データ、データイネーブル等）をライト調停部２８Ａに出力する。ライト調停部２８Ａは、調停結果に応じた書き込み要求と、上記ライトアクセスが許可された処理部からの制御信号とを、データ結合部３０を介してメモリＩ／Ｆ２９に出力する。
【００２１】
一方、リード調停部２８Ｂは、処理部２２〜２７から出力され競合する読み出し要求（リードリクエスト）を、例えば、各処理部２２〜２７に対応して設定された優先度に従って調停し、１つの処理部に対するリードアクセスを許可する。リードアクセスが許可された処理部は、メモリ１４に対するリードアクセスのための制御信号（各種コマンド、アドレス、データ等）をリード調停部２８Ｂに出力する。リード調停部２８Ｂは、調停結果に応じた１つの読み出し要求と、上記リードアクセスが許可された処理部からの制御信号をメモリＩ／Ｆ２９に出力する。
【００２２】
データ結合部３０は、ライト調停部２８Ａからの制御信号（例えば、コマンド転送要求ＣＲ）等に基づいて、複数のコマンド転送要求ＣＲを結合してバースト長の長い転送要求に変換する。さらに、データ結合部３０は、任意のデータサイズ（例えば、任意のバースト長（第１バースト長）に対応するデータサイズ）に基づく開始アドレスを有する結合後のコマンド転送要求ＣＲａに変換する。具体的には、データ結合部３０は、任意のバースト長（例えば、２５６バイト）のアライメント単位を開始アドレスとする結合後のコマンド転送要求ＣＲａに変換する。ここで、任意のデータサイズのアライメント単位とは、任意のデータサイズごとに区切られたアドレスの範囲を示す。例えば、任意のデータサイズが２５６バイトの場合は、アドレスの下位７ビット〜０ビットが"０"(ＡＤｘ［７：０］＝０ｂ００００００００)になる範囲であり、開始アドレスは、０ｘ００００００００→０ｘ０００００１００→０ｘ０００００２００と進む。データ結合部３０は、結合される複数のコマンド転送要求ＣＲに対応する転送データを結合して保持する。そして、データ結合部３０は、結合後のコマンド転送要求ＣＲａと、結合後の転送データ及びデータイネーブルとをメモリＩ／Ｆ２９に出力する。このとき、上記任意のバースト長は、メモリ１４のカラムアドレスの範囲内のサイズに設定される。例えば、任意のバースト長は、メモリ１４のカラムサイズの約数に対応するサイズに設定される。例えば、メモリ１４のカラムサイズが５１２バイトである場合には、任意のバースト長を、１２８バイトや２５６バイト（本例では、２５６バイト）に設定することができる。ここで、１つのバーストサイクルで転送されるデータサイズ（バーストサイズ）は、バス幅によって決まる。すなわち、バス幅が６４ビット（８バイト）である場合には、１つのバーストサイクルで転送されるデータサイズは８バイトとなる。このとき、上記任意のバースト長が２５６バイトであると、その任意のバースト長のデータは３２個のバーストサイクルによって転送される。
【００２３】
メモリＩ／Ｆ２９は、例えば、データ結合部３０からのコマンド転送要求ＣＲａ及びデータ転送要求ＤＲａ（図３参照）と、データ結合部３０で結合されたデータをメモリ１４に出力し、メモリ１４はそのデータを記憶する。また、メモリＩ／Ｆ２９は、読み出し要求の場合、処理部からの制御信号に応じてメモリ１４からデータを読み出し、その読み出したデータを要求元の処理部に出力する。
【００２４】
なお、以下の説明では、ライト調停部２８Ａに対して、処理部２１〜２６をバスマスタとも称する。
次に、データ結合部３０の内部構成例について説明する。
【００２５】
図３に示すように、データ結合部３０は、コマンド転送部３１と、バッファ管理部３４と、バッファ部３７と、結合コマンド転送部４０とを有している。
コマンド転送部３１は、ライト調停部２８Ａによって選択されたコマンド転送要求ＣＲ（以下、単に「転送要求ＣＲ」と称する場合もある。）を順次蓄積するコマンドキュー３２と、バスマスタに対する応答要求を順次蓄積する応答キュー３３とを有している。コマンド転送部３１は、ライト調停部２８Ａから入力するコマンド転送要求ＣＲ及びデータ転送要求ＤＲに基づいて、バッファ部３７に対するデータＤＡ及びデータイネーブルＥＮの書き込みを制御するライト制御信号ＷＥを生成する。コマンド転送要求ＣＲには、そのコマンド転送要求ＣＲに対応する転送データのアドレスＡＤ及びサイズＳｉが含まれている。なお、コマンド転送部３１は、コマンド転送要求ＣＲ及びデータ転送要求ＤＲを受信すると、それらの転送要求にそれぞれ対応する応答コマンドをライト調停部２８Ａに出力する。
【００２６】
ここで、バッファ部３７は、ライト調停部２８Ａから供給されるデータＤＡを保持するデータ保持部３８と、ライト調停部２８Ａから供給されるデータイネーブルＥＮを保持するデータイネーブル保持部３９とを有している。
【００２７】
図７（ａ）に示すように、データ保持部３８は、上記任意のバースト長のデータＤＡ（ここでは、２５６バイトのデータＤＡ）を保持可能なラインバッファＬｆを複数個（ここでは、１６個）有している。すなわち、データ保持部３８は、上記任意のバースト長以上のサイズを有するラインバッファＬｆを複数個有している。
【００２８】
図７（ｂ）に示すように、データイネーブル保持部３９は、上記任意のバースト長のデータイネーブルＥＮ（例えば、２５６バイトのデータイネーブルＥＮ）を保持可能なラインバッファＬｇを複数個（ここでは、１６個）有している。すなわち、データイネーブル保持部３９は、上記任意のバースト長以上のサイズを有するラインバッファＬｇを複数個有している。なお、以下の説明では、データ保持部３８とデータイネーブル保持部３９を総称する場合には「バッファ部３７」と称し、ラインバッファＬｆとラインバッファＬｇを総称する場合には「ラインバッファＬｆｇ」と称し、データＤＡとデータイネーブルＥＮを総称する場合には「転送データＤＡＥ」と称する。
【００２９】
コマンド転送部３１は、ライト調停部２８Ａから転送情報（例えば、転送要求元のバスマスタ番号ＮＢ）を受信する。コマンド転送部３１は、バスマスタ番号ＮＢに基づいて、受信したコマンド転送要求ＣＲが、バッファ管理部３４に保持している転送要求ＣＲと同じバスマスタによる転送要求であるか否かを判定する。また、コマンド転送部３１は、上記受信したコマンド転送要求ＣＲのアドレスＡＤと、バッファ管理部３４に保持している転送要求ＣＲのアドレスとが連続しているか、つまり２つの転送要求ＣＲに対応するデータが結合可能か否かを判定する。さらに、コマンド転送部３１は、結合後のデータサイズがバッファ部３７のラインバッファＬｆｇの１ライン分のサイズを超えるか否か、つまり結合後の転送要求ＣＲが上記任意のバースト長を超えるか否かを判定する。そして、コマンド転送部３１は、それら判定結果等をコマンド転送要求ＣＲと併せてコマンドキュー３２に保持する。
【００３０】
図４（ａ）に示すように、コマンドキュー３２は、複数個（ここでは、ｎ＋１個）のラインＬａを有している。各ラインＬａには、コマンド転送要求ＣＲの要求元のバスマスタ番号ＮＢａと、転送要求ＣＲに対応するアドレスＡＤａ及びサイズＳａとが保持される。このアドレスＡＤａは、例えば、転送要求ＣＲのアドレスＡＤのうち、バッファ部３７のラインバッファＬｆｇの１ライン分のアドレス範囲に相当するアドレスである。例えば、各ラインバッファＬｆｇが２５６バイトである場合には、転送要求ＣＲのアドレスＡＤの下位８ビットのアドレスＡＤ［７：０］がアドレスＡＤａとなる。サイズＳａは、ライト調停部２８Ａから供給されるサイズＳｉであり、バス幅（例えば、８バイト）にバーストサイクル数を乗算することにより求めることができる。また、各ラインＬａには、転送要求ＣＲに対応する転送データＤＡＥを書き込むバッファ部３７のライン番号ＮＬｃと、その転送要求がバッファ部３７の１ライン分のサイズを超えた場合に、続いて転送データＤＡＥを書き込むバッファ部３７のライン番号ＮＬｎとが保持される。コマンドキュー３２には、転送要求ＣＲのアドレスＡＤが、先にバッファ管理部３４に保持された同じバスマスタによる転送要求ＣＲのアドレスと連続しているか否かを示す判定結果Ｈ１が保持される。コマンドキュー３２には、結合後のデータサイズがバッファ部３７のラインバッファＬｆｇの１ライン分のサイズを超えるか否かを示す判定結果Ｈ２が保持される。コマンドキュー３２には、バッファ管理部３４から出力されるトランザクション番号ＮＴがトランザクション番号ＮＴａとして保持される。ここで、トランザクション番号ＮＴは、結合後のコマンド転送要求を示す（特定する）番号である。また、トランザクション番号ＮＴは、バッファ管理部３４により付与される番号であり、０〜Ｎ（Ｎは例えばバッファ部３７のライン数）までの循環的な数字である。
【００３１】
また、コマンドキュー３２は、ライトポインタＷＰが示すラインＬａ（図示の例では、ライン番号「１」のラインＬａ）にアドレスＡＤａ等を格納し、ライトポインタＷＰを更新する。また、コマンドキュー３２は、リードポインタＲＰが示すラインＬａ（図示の例では、ライン番号「０」のラインＬａ）からアドレスＡＤａ等を読み出し、リードポインタＲＰを更新する。ここで、ライトポインタＷＰ及びリードポインタＲＰの更新は、次のデータを書き込む位置又は読み出すラインＬａを示す値に変更することである。
【００３２】
図３に示すように、コマンド転送部３１は、上記受信したコマンド転送要求ＣＲに対応するデータ転送要求ＤＲに基づいて、コマンドキュー３２に保持されたアドレスＡＤａとライン番号ＮＬｃとに応じたライトアドレスＷＡをバッファ部３７に出力する。このライトアドレスＷＡが示すバッファ部３７のアドレスに、ライト調停部２８Ａから出力されるデータＤＡ及びデータイネーブルＥＮが書き込まれる。
【００３３】
また、コマンド転送部３１は、バッファ部３７の１ライン分のデータ結合が完了したか否かを判定する。コマンド転送部３１は、処理対象のデータの後に結合可能な転送要求ＣＲがコマンドキュー３２内に存在するか否かを判定する。そして、コマンド転送部３１は、データ転送要求ＤＲに対応する判定結果を、バッファ管理部３４内の保持部３５に格納する。また、コマンド転送部３１は、コマンドキュー３２に保持されたバスマスタ番号ＮＢａとトランザクション番号ＮＴａとを応答キュー３３に移す。
【００３４】
図４（ｂ）に示すように、応答キュー３３は、複数個（ここでは、ｍ＋１個）のラインＬｂを有している。各ラインＬｂには、コマンドキュー３２からのバスマスタ番号ＮＢａが転送要求のバスマスタ番号ＮＢｂとして保持され、コマンドキュー３２からのトランザクション番号ＮＴａがトランザクション番号ＮＴｂとして保持される。
【００３５】
バッファ管理部３４は、結合後のコマンド転送要求ＣＲａを生成するためのバッファ情報（結合情報）を保持する保持部３５と、トランザクション番号ＮＴを管理する番号付与部３６とを有している。番号付与部３６は、バッファ部３７の１ライン分の転送要求ＣＲに対応する上記トランザクション番号ＮＴを管理する。例えば、番号付与部３６は、コマンドキュー３２に対して新たなトランザクション番号ＮＴを生成する一方で、転送完了後の転送要求ＣＲに対応するトランザクション番号ＮＴを解放する。そして、番号付与部３６は、生成したトランザクション番号ＮＴを、保持部３５及びコマンドキュー３２に出力する。
【００３６】
図５に示すように、保持部３５は、バッファ部３７のライン数分のバッファ情報を保持することができる。具体的には、保持部３５は、バッファ部３７の１ラインに対応するバッファ情報を格納可能なラインバッファＬｃを、バッファ部３７のライン数分（ここでは、１６個）有している。例えば、バッファ部３７のライン番号「１」に保持されたデータに対応するバッファ情報は、ライン番号ＮＬが「１」のラインバッファＬｃに格納される。各ラインバッファＬｃには、結合する複数の転送要求ＣＲにおける最終の転送要求ＣＲの情報が格納される。
【００３７】
詳述すると、保持部３５には、ライト調停部２８Ａからのバスマスタ番号ＮＢが結合対象のバスマスタ番号ＮＢｃとして保持される。保持部３５には、同じバスマスタ、且つバッファ部３７の同じラインバッファＬｆｇにデータを書き込むための転送要求ＣＲであって、コマンドキュー３２に蓄積された転送要求ＣＲのうちの最後のアドレスＡＤｃ及びサイズＳｃが保持される。保持部３５には、コマンド転送部３１によるバッファ部３７へのデータ転送によって、バッファ部３７の１ライン分（例えば、２５６バイト）のデータ結合が完了したことを示すフラグＦ１が保持される。保持部３５には、バッファ部３７の１ライン分よりも小さいデータサイズでデータ結合処理が中断したことを示すフラグＦ２が保持される。すなわち、保持部３５には、コマンド転送部３１から出力される、データ転送要求ＤＲに対応する判定結果がフラグＦ１，Ｆ２として保持される。さらに、保持部３５には、番号付与部３６からのトランザクション番号ＮＴがトランザクション番号ＮＴｃとして保持される。
【００３８】
図３に示すように、結合コマンド転送部４０は、結合後のコマンド転送要求ＣＲａを順次蓄積するコマンドキュー４１と、バスマスタに対する応答要求を順次蓄積する応答キュー４２とを有している。
【００３９】
結合コマンド転送部４０は、保持部３５に保持されたバッファ情報に基づいて、結合後のコマンド転送要求ＣＲａを生成し、その結合後のコマンド転送要求ＣＲａをコマンドキュー４１に格納する。
【００４０】
図６（ａ）に示すように、コマンドキュー４１は、複数個（ここでは、ｐ＋１個）のラインＬｄを有している。各ラインＬｄには、保持部３５から出力されるバスマスタ番号ＮＢｃが結合後の転送要求元のバスマスタ番号ＮＢｄとして保持される。各ラインＬｄには、保持部３５から出力されるアドレスＡＤｃ及びサイズＳｃに基づいて算出された、結合後アドレスＡＤｄ及び結合後サイズＳｄが保持される。各ラインＬｄには、保持部３５から出力されるトランザクション番号ＮＴｃがトランザクション番号ＮＴｄとして保持される。
【００４１】
図３に示した結合コマンド転送部４０は、結合後のコマンド転送要求ＣＲａ及びデータ転送要求ＤＲａをメモリＩ／Ｆ２９に発行し、バッファ部３７の各ラインバッファＬｆｇから転送データＤＡＥを読み出すためのリード制御信号ＲＥ及びリードアドレスＲＡをバッファ部３７に出力する。バッファ部３７は、リード制御信号ＲＥに基づいて、リードアドレスＲＡで指定されるバッファ部３７のアドレスに格納されたデータＤＡ及びデータイネーブルＥＮをメモリＩ／Ｆ２９に出力する。結合コマンド転送部４０は、メモリＩ／Ｆ２９に転送したデータに対応する転送要求情報（例えば、転送要求元のバスマスタ番号ＮＢｄ）とトランザクション番号ＮＴｄとをコマンドキュー４１から応答キュー４２に移す。
【００４２】
図６（ｂ）に示すように、応答キュー４２は、複数個（ここでは、ｋ＋１個）のラインＬｅを有している。各ラインＬｅには、コマンドキュー４１からのバスマスタ番号ＮＢｄが転送要求元のバスマスタ番号ＮＢｅとして保持され、コマンドキュー４１からのトランザクション番号ＮＴｄがトランザクション番号ＮＴｅとして保持される。
【００４３】
図３に示した結合コマンド転送部４０では、メモリ１４に対してデータの書き込みが完了したことを示すライト完了通知ＷＣ１がメモリＩ／Ｆ２９から入力されると、応答キュー４２から応答キュー３３にライト完了通知ＷＣ２が出力される。具体的には、応答キュー４２は、応答キュー３３に保持された応答要求のうち、当該応答キュー４２が保持するトランザクション番号ＮＴｅと同一のトランザクション番号ＮＴｂを持つ応答要求に対してライト完了通知ＷＣ２を出力する。このとき、応答キュー３３は、ライト完了通知ＷＣ２に基づいて、同じトランザクション番号ＮＴｂを持つ全ての応答要求に対するライト完了通知ＷＣ３をライト調停部２８Ａに出力し、上記トランザクション番号ＮＴｂをバッファ管理部３４に出力する。バッファ管理部３４では、応答キュー３３から入力したトランザクション番号ＮＴを解放し、そのトランザクション番号ＮＴを以降の処理で再度使用する。なお、結合コマンド転送部４０は、メモリＩ／Ｆ２９からライト完了通知ＷＣ１を受信すると、そのライト完了通知ＷＣ１に対する応答コマンドをメモリＩ／Ｆ２９に出力する。また、メモリＩ／Ｆ２９は、結合コマンド転送部４０からコマンド転送要求ＣＲａ及びデータ転送要求ＤＲａを受信すると、それらの転送要求にそれぞれ対応する応答コマンドを結合コマンド転送部４０に出力する。
【００４４】
本実施形態において、ライト調停部２８Ａ及びデータ結合部３０はデータ転送装置の一例、コマンドキュー３２は第１コマンドキューの一例、応答キュー３３は第１応答キューの一例、コマンドキュー４１は第２コマンドキューの一例、応答キュー４２は第２応答キューの一例である。また、ラインバッファＬｆ，Ｌｇは第１ラインバッファの一例、ラインバッファＬｃは第２ラインバッファの一例、判定結果Ｈ１は第１判定結果の一例、判定結果Ｈ２は第２判定結果の一例、フラグＦ１は第１フラグの一例、フラグＦ２は第２フラグの一例である。また、トランザクション番号ＮＴ，ＮＴａ〜ＮＴｅは第１番号の一例、バスマスタ番号ＮＢ，ＮＢａ〜ＮＢｅは第２番号の一例である。
【００４５】
次に、図８〜図２７に従って、データ結合部３０の動作について説明する。ここでは、複数の具体例を挙げつつ、データ結合部３０の動作について説明する。なお、以下の説明では、下記の条件（１）〜（６）におけるデータ結合部３０の動作について説明する。
【００４６】
（１）バスプロトコルは、コマンドとデータが分離された仕様（例えば、ＡＸＩ仕様）である。
（２）バス幅は、６４ビット（８バイト）である。
【００４７】
（３）任意のバースト長（つまり、バッファ部３７の各ラインバッファＬｆｇのサイズ）は、２５６バイトである。
（４）保持部３５及びバッファ部３７のライン数は、１６個である。
【００４８】
（５）メモリ１４（ＳＤＲＡＭ）は、図８に示すように、複数のバンクを有し、カラムサイズが５１２バイトである。
（６）バスマスタ（ライト調停部２８Ａ）からデータ結合部３０に出力されるアドレスＡＤは３２ビットの信号である。
【００４９】
まず、図９（ａ）〜（ｃ）に示した第１の具体例に沿って、ライト調停部２８Ａからコマンド転送要求ＣＲを受信する際のデータ結合部３０の動作について説明する。
図９（ａ）に示すように、まず、データ結合部３０は、所定のバスマスタからライト調停部２８Ａを介して、開始アドレスが「０ｘ００００００２０」であり、サイズが６４バイトであるデータＤＡＴＡ１を受信する。続いて、データ結合部３０は、同じバスマスタから、開始アドレスが「０ｘ００００００６０」であり、サイズが１２８バイトであるデータＤＡＴＡ２を受信する。次いで、データ結合部３０は、同じバスマスタから、開始アドレスが「０ｘ００００００Ｅ０」であり、サイズが６４バイトであるデータＤＡＴＡ３を受信する。そして、これらデータＤＡＴＡ１〜ＤＡＴＡ３を受信後、同じバスマスタからの転送要求が終了する。なお、周知ではあるが、「０ｘ００００００２０」等における「０ｘ」はその値が１６進数であることを示す。
【００５０】
まず、転送処理開始に先立って、バッファ部３７を任意の値（例えば、「０」）に初期化する。ここでは、データイネーブル保持部３９は「０」に初期化する必要があるが、データ保持部３８は不定値であっても構わない。また、転送処理開始に先立って、コマンドキュー３２，４１と、応答キュー３３，４２と、保持部３５と、トランザクション番号ＮＴと、ライトポインタＷＰ及びリードポインタＲＰを含む各種ポインタとを初期化する。
【００５１】
続いて、図１０及び図１１を併せ参照して、上記データＤＡＴＡ１に対応する転送要求ＣＲを受信する際のデータ結合部３０の動作について説明する。
次に、図１０に示すステップＳ１において、コマンド転送部３１は、後述するコマンド受信待ち信号が「０」であるか否かを判定する。このとき、コマンド受信待ち信号が「０」になった場合には、ステップＳ２に移行する。一方、コマンド受信待ち信号が「１」の場合には、コマンド受信待ち信号が「０」になるまで、ステップＳ１が繰り返し実行される。
【００５２】
続いて、コマンド転送部３１は、ライト調停部２８Ａからコマンド転送要求ＣＲを受信したか否かを判定し（ステップＳ２）、コマンド転送要求ＣＲを受信するまでステップＳ１及びステップＳ２を繰り返し実行する。その後、データＤＡＴＡ１に対応するコマンド転送要求ＣＲを受信すると、ステップＳ３に移行する。
【００５３】
次いで、ステップＳ３において、受信した転送要求ＣＲ、つまりライト調停部２８Ａによって選択されたバスマスタからの転送要求ＣＲをコマンドキュー３２に格納する際に、同じバスマスタからの転送要求ＣＲが保持部３５内に格納されているか否かが判定される。具体的には、ライト調停部２８Ａから出力されるバスマスタ番号ＮＢ（ここでは、「１」）に基づいて、そのバスマスタ番号ＮＢと同一のバスマスタ番号が保持部３５内に格納されているか否かが判定される。ここでは、ライト調停部２８Ａから出力される「１」のバスマスタ番号ＮＢと同一のバスマスタ番号が保持部３５に格納されていないため、ステップＳ４に移行する。
【００５４】
次に、図１１に示すように、コマンド転送部３１は、同じバスマスタによる転送要求ＣＲが保持部３５内に存在しないため、連続アドレスでないことを示す「０」を、ライトポインタＷＰ（ここでは、「０」）が示すコマンドキュー３２の判定結果Ｈ１に保持する（ステップＳ４）。コマンド転送部３１は、データＤＡ及びデータイネーブルＥＮが格納されていないバッファ部３７の空ライン番号（ここでは、「０」のライン番号）を取得し、その空ライン番号「０」を、ライトポインタＷＰが示すコマンドキュー３２のライン番号ＮＬｃに保持する。コマンド転送部３１は、ライト調停部２８Ａから出力される転送要求元のバスマスタ番号ＮＢ（ここでは、「１」）を、ライトポインタＷＰが示すコマンドキュー３２のバスマスタ番号ＮＢａに保持する。コマンド転送部３１は、ライト調停部２８Ａから出力されるアドレスＡＤの下位８ビットのアドレスＡＤ［７：０］（ここでは、「０ｘ２０」）を、ライトポインタＷＰが示すコマンドキュー３２のアドレスＡＤａに保持する。コマンド転送部３１は、ライト調停部２８Ａから出力されるサイズＳｉ（ここでは、６４バイト）を、ライトポインタＷＰが示すコマンドキュー３２のサイズＳａに保持する。番号付与部３６は、「０」のトランザクション番号ＮＴを自身に登録するとともに、そのトランザクション番号ＮＴを、ライトポインタＷＰが示すコマンドキュー３２のトランザクション番号ＮＴａに保持する。番号付与部３６は、「０」のトランザクション番号ＮＴを、コマンドキュー３２のライン番号ＮＬｃに保持した空ライン番号「０」と同一のライン番号ＮＬを持つ保持部３５（ラインバッファＬｃ）におけるトランザクション番号ＮＴｃに保持する。また、バッファ管理部３４は、「０」のライン番号ＮＬを持つラインバッファＬｃに、転送要求元のバスマスタ番号ＮＢ（ここでは、「１」）と、転送要求ＣＲのアドレスＡＤ（ここでは、「０ｘ００００００２０」）と、サイズＳｉ（ここでは、６４バイト）とを保持する。
【００５５】
以上説明したステップＳ４の処理を実施すると、続くステップＳ５において、コマンド転送部３１は、コマンドキュー３２に保持されたアドレスＡＤａにサイズＳａを加算した加算値と、任意のバースト長（ここでは、２５６バイト）との判定結果に応じて、コマンドキュー３２の判定結果Ｈ２を設定する。例えば、コマンド転送部３１は、加算値が２５６バイトよりも小さい場合には、判定結果Ｈ２を「０ｂ００」に設定する。この場合には、コマンドキュー３２に保持された転送要求ＣＲに対応する転送データのサイズがバッファ部３７の１ラインのデータサイズよりも小さく、バッファ部３７に空きが存在する。また、コマンド転送部３１は、加算値が２５６バイトと等しい場合には、判定結果Ｈ２を「０ｂ１０」に設定する。この場合には、コマンドキュー３２に保持された転送要求ＣＲに対応する転送データのサイズがバッファ部３７の１ライン分のデータサイズと等しく、バッファ部３７に空きが存在しない。また、コマンド転送部３１は、加算値が２５６バイトよりも大きい場合には、判定結果Ｈ２を「０ｂ１１」に設定する。この場合には、コマンドキュー３２に保持された転送要求ＣＲに対応する転送データのサイズがバッファ部３７の１ライン分のデータサイズよりも大きくなるため、新たなライン番号のバッファ部３７が必要となる。ここでは、ライトポインタＷＰ（ここでは、「０」）が示すコマンドキュー３２に保持されたアドレスＡＤａ（＝０ｘ２０）にサイズＳａ（＝６４バイト）を加算すると、上記加算値は９６バイトとなる。このため、コマンド転送部３１は、ライトポインタＷＰが示すコマンドキュー３２の判定結果Ｈ２を「０ｂ００」に設定する。なお、周知ではあるが、「０ｂ００」、「０ｂ１０」、「０ｂ１１」等における「０ｂ」はその値が２進数であることを示す。
【００５６】
次に、ステップＳ６において、コマンド転送部３１は、判定結果Ｈ２が「０ｂ１１」であるか否かを判定する。ここでは、判定結果Ｈ２が「０ｂ００」であるため、ステップＳ１に戻る。なお、ステップＳ１に戻る際に、ライトポインタＷＰが「０」から「１」に更新される。
【００５７】
続いて、図１０及び図１２を併せ参照して、データＤＡＴＡ２に対応する転送要求ＣＲを受信する際のデータ結合部３０の動作について説明する。
ステップＳ１に戻った後、ライト調停部２８ＡからデータＤＡＴＡ２に対応する転送要求ＣＲを受信すると、ステップＳ３に移行する。このステップＳ３では、図１２（ａ）に示すように、ライト調停部２８Ａから出力されるバスマスタ番号ＮＢ（ここでは、「１」）と同一のバスマスタ番号ＮＢｃが保持部３５に格納されているため、ステップＳ７に移行する。
【００５８】
次いで、ステップＳ７において、バッファ管理部３４は、番号付与部３６が保持するトランザクション番号ＮＴ（ここでは、「０」）から降順に保持部３５内のトランザクション番号ＮＴｃを検索する。そして、バッファ管理部３４は、上記検索結果に基づいて、最新のトランザクション番号ＮＴ（ここでは、「０」）を保持する保持部３５のライン番号ＮＬ（ここでは、「０」）を選択する。
【００５９】
次いで、コマンド転送部３１は、選択したライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ及びサイズＳｃから算出されるアドレス値と、上記受信した転送要求ＣＲ（ここでは、データＤＡＴＡ２に対応する転送要求ＣＲ）のアドレスＡＤとを比較する（ステップＳ８）。
【００６０】
ここでは、図１２（ａ）に示すように、「０」のライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ（＝０ｘ００００００２０）にサイズＳｃ（＝０ｘ００００００４０）を加算してアドレス値（＝０ｘ００００００６０）が算出される。そして、算出したアドレス値と、ライト調停部２８Ａから出力されるアドレスＡＤ（ここでは、「０ｘ００００００６０」）とが比較される。このとき、２つのアドレスが一致する、つまり２つのアドレス値が連続するアドレスであるため、ステップＳ９に移行する。なお、２つのアドレスが一致しない場合、つまり２つのアドレス値が連続しないアドレスである場合には、上述したステップＳ４に移行する。
【００６１】
次に、ステップＳ９において、コマンド転送部３１は、アドレスＡＤ［７：０］が「０ｘ００」であるか否かを判定する。すなわち、コマンド転送部３１は、アドレスＡＤ［７：０］が上記任意のバースト長の先頭アドレス（つまり、バッファ部３７の各ラインバッファＬｆｇの先頭アドレス）となるか否かを判定する。アドレスＡＤ［７：０］が「０ｘ００」でない場合には、ステップＳ７で選択されたライン番号ＮＬ（ここでは、「０」）を持つラインバッファＬｃに対して、コマンドキュー３２に保持される転送要求ＣＲ（ここでは、データＤＡＴＡ２に対応する転送要求ＣＲ）を結合することができる。この場合には、ステップＳ１０に移行する。一方、アドレスＡＤ［７：０］が「０ｘ００」である場合には、ステップＳ７で選択されたライン番号ＮＬを持つラインバッファＬｃに対して上記転送要求ＣＲを結合できないため、新たなライン番号ＮＬの保持部３５に上記転送要求ＣＲを保持する必要がある。この場合には、ステップＳ１２に移行する。ここでは、データＤＡＴＡ２に対応する転送要求ＣＲのアドレスＡＤ［７：０］が「０ｘ６０」であり、「０ｘ００」ではないため、ステップＳ１０に移行する。
【００６２】
続いて、図１２（ａ）に示すように、コマンド転送部３１は、ステップＳ８における判定結果に応じて、連続アドレスであることを示す「１」を、ライトポインタＷＰ（ここでは、「１」）が示す判定結果Ｈ１に保持する（ステップＳ１０）。コマンド転送部３１は、ステップＳ７で選択されたライン番号ＮＬ（ここでは、「０」）を、ライトポインタＷＰが示すライン番号ＮＬｃに保持する。バッファ管理部３４は、「０」のライン番号ＮＬを持つラインバッファＬｃに保持されたトランザクション番号ＮＴｃ（ここでは、「０」）を、ライトポインタＷＰが示すトランザクション番号ＮＴａに保持する。また、図１２（ｂ）に示すように、コマンド転送部３１は、ライト調停部２８Ａからのバスマスタ番号ＮＢ（ここでは、「１」）を、ライトポインタＷＰ（ここでは、「１」）が示すバスマスタ番号ＮＢａに保持する。コマンド転送部３１は、ライト調停部２８ＡからのアドレスＡＤ［７：０］及びサイズＳｉを、ライトポインタＷＰが示すアドレスＡＤａ及びサイズＳａにそれぞれ保持する。また、バッファ管理部３４は、「０」のライン番号ＮＬを持つラインバッファＬｃにおけるアドレスＡＤｃ及びサイズＳｃを、アドレスＡＤと同じ「０ｘ００００００６０」、及びサイズＳｉと同じ「１２８バイト」にそれぞれ更新する。
【００６３】
以上説明したステップＳ１０の処理を実施すると、続くステップＳ５において、ライトポインタＷＰが示すアドレスＡＤａ（ここでは、「０ｘ６０」）にサイズＳａ（ここでは、１２８バイト）を加算して加算値（＝２２４バイト）が算出される。このとき、加算値が２５６バイトよりも小さくなるため、コマンド転送部３１は、ライトポインタＷＰが示す判定結果Ｈ２を「０ｂ００」に設定する。このため、判定結果Ｈ２が「０ｂ１１」ではないため（ステップＳ７でＮＯ）、ライトポインタＷＰを「１」から「２」に更新してステップＳ１に戻る。
【００６４】
次いで、図１０及び図１３を併せ参照して、データＤＡＴＡ３に対応する転送要求ＣＲを受信する際のデータ結合部３０の動作について説明する。
ステップＳ１に戻った後、ライト調停部２８ＡからデータＤＡＴＡ３に対応する転送要求ＣＲを受信すると、ステップＳ３に移行する。このステップＳ３では、図１３（ａ）に示すように、ライト調停部２８Ａから出力されるバスマスタ番号ＮＢ（ここでは、「１」）と同一のバスマスタ番号ＮＢｃが保持部３５に格納されているため、ステップＳ７に移行する。続いて、バッファ管理部３４は、最新のトランザクション番号ＮＴ（ここでは、「０」）を保持する保持部３５のライン番号ＮＬ（ここでは、「０」）を選択する（ステップＳ７）。
【００６５】
次いで、図１３（ａ）に示すように、「０」のライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ（＝０ｘ００００００６０）にサイズＳｃ（＝１２８バイト）を加算してアドレス値（＝０ｘ００００００Ｅ０）が算出される（ステップＳ８）。このとき、算出したアドレス値と、ライト調停部２８Ａから出力されるアドレスＡＤ（ここでは、「０ｘ００００００Ｅ０」）とが一致するため、ステップＳ９に移行する。ここでは、アドレスＡＤ［７：０］が「０ｘ００」ではないため（ステップＳ９でＹＥＳ）、ステップＳ１０に移行する。
【００６６】
次に、コマンド転送部３１は、ステップＳ８における判定結果に応じて、ライトポインタＷＰ（ここでは、「２」）が示す判定結果Ｈ１に「１」を保持する（ステップＳ１０）。コマンド転送部３１は、ステップＳ７で選択されたライン番号ＮＬ（ここでは、「０」）を、ライトポインタＷＰが示すライン番号ＮＬｃに保持する。バッファ管理部３４は、「０」のライン番号ＮＬを持つラインバッファＬｃに保持されたトランザクション番号ＮＴｃ（ここでは、「０」）を、ライトポインタＷＰが示すトランザクション番号ＮＴａに保持する。また、図１３（ｂ）に示すように、コマンド転送部３１は、ライト調停部２８Ａからのバスマスタ番号ＮＢ（ここでは、「１」）を、ライトポインタＷＰ（ここでは、「２」）が示すバスマスタ番号ＮＢａに保持する。コマンド転送部３１は、ライト調停部２８ＡからのアドレスＡＤ［７：０］及びサイズＳｉを、ライトポインタＷＰが示すアドレスＡＤａ及びサイズＳａにそれぞれ保持する。また、バッファ管理部３４は、「０」のライン番号ＮＬを持つラインバッファＬｃにおけるアドレスＡＤｃ及びサイズＳｃを、アドレスＡＤと同じ「０ｘ００００００Ｅ０」、及びサイズＳｉと同じ「６４バイト」にそれぞれ更新する。
【００６７】
以上説明したステップＳ１０の処理を実施すると、続くステップＳ５において、ライトポインタＷＰが示すアドレスＡＤａ（ここでは、「０ｘＥ０」）にサイズＳａ（ここでは、６４バイト）を加算して加算値（＝２８８バイト）が算出される。このとき、加算値が２５６バイトよりも大きくなるため、コマンド転送部３１は、ライトポインタＷＰが示す判定結果Ｈ２を「０ｂ１１」に設定する。このため、判定結果Ｈ２が「０ｂ１１」と等しくなるため（ステップＳ６でＹＥＳ）、ステップＳ１１に移行する。
【００６８】
次に、図１４に示すように、コマンド転送部３１は、バッファ部３７の空ライン番号（ここでは、「１」のライン番号）を取得し、その空ライン番号「１」を、ライトポインタＷＰ（ここでは、「２」）が示すライン番号ＮＬｎに保持する（ステップＳ１１）。すなわち、ライトポインタ「２」が示すライン番号ＮＬｎを、「０」から「１」に更新する。バッファ管理部３４は、「０」のライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ及びサイズＳｃから、バッファ部３７の１ライン（２５６バイト）を超えた分のアドレスＡＤｃｃとサイズＳｃｃを算出する。例えば、バッファ管理部３４は、「０」のライン番号ＮＬを持つラインバッファＬｃに保持された元のアドレスＡＤｃ［８］を反転させてアドレスＡＤｃｃ［８］を算出するとともに、アドレスＡＤｃｃ［７：０］を「０ｘ００」に設定する。また、アドレスＡＤｃｃ［３１：９］は、元のアドレスＡＤｃ［３１：９］をそのまま維持する。これらにより、２５６バイトを超えた分のアドレスＡＤｃｃ［３１：０］が算出される。さらに、２５６バイトを超えた分のサイズＳｃｃは、元のアドレスＡＤｃ［７：０］に対して、「０」のライン番号ＮＬを持つラインバッファＬｃに保持された元のサイズＳｃを加算し、さらに加算値から２５６バイトを減算することにより算出される。本例では、元のアドレスＡＤｃ［３１：０］が「０ｘ００００００Ｅ０」であるため、アドレスＡＤｃｃ［３１：０］が「０ｘ０００００１００」となる。また、本例では、元のアドレスＡＤｃ［７：０］が「０ｘＥ０」、元のサイズＳｃが６４バイトであるため、サイズＳｃｃは３２（＝２８８−２５６）となる。そして、バッファ管理部３４は、算出したアドレスＡＤｃｃ及びサイズＳｃｃを、ライトポインタＷＰ（ここでは、「２」）が示すライン番号ＮＬｎに保持された空ライン番号「１」と同一のライン番号ＮＬにおけるアドレスＡＤｃ及びサイズＳｃに保持する。また、番号付与部３６は、新たなトランザクション番号ＮＴ（ここでは、「１」）を生成する。そして、番号付与部３６は、「１」のトランザクション番号ＮＴを、ライトポインタＷＰが示すトランザクション番号ＮＴａと、「１」のライン番号ＮＬにおけるトランザクション番号ＮＴｃとに保持する。これにより、ライトポインタＷＰが示すトランザクション番号ＮＴａが「０」から「１」に更新される。
【００６９】
以上説明したステップＳ１１の処理が終了すると、データＤＡＴＡ１〜ＤＡＴＡ３に対応する３つの転送要求ＣＲがコマンド転送部３１に受信され、保持部３５に３つの転送要求ＣＲを結合するためのバッファ情報が保持される。
【００７０】
なお、図９に示した具体例では発生しなかったが、ステップＳ９において、アドレスＡＤ［７：０］が「０ｘ００」となった場合には（ステップＳ９でＮＯ）、ステップＳ１２に移行する。このステップＳ１２では、コマンド転送部３１は、ステップＳ８における判定結果に応じて、ライトポインタＷＰが示す判定結果Ｈ１に「１」を保持する。コマンド転送部３１は、バッファ部３７の空ライン番号を取得し、その空ライン番号を、ライトポインタＷＰが示すライン番号ＮＬｃに保持する。番号付与部３６は、新たなトランザクション番号ＮＴを生成し、そのトランザクション番号ＮＴをコマンドキュー３２及び保持部３５に保持する。コマンド転送部３１は、ライト調停部２８Ａから出力されるバスマスタ番号ＮＢ、アドレスＡＤ［７：０］及びサイズＳｉを、ライトポインタＷＰが示すコマンドキュー３２に保持する。また、バッファ管理部３４は、ライト調停部２８Ａから出力されるバスマスタ番号ＮＢ、アドレスＡＤ及びサイズＳｉを、ライン番号ＮＬｃに保持した空ライン番号と同一のライン番号ＮＬを持つラインバッファＬｃに保持する。以上説明したステップＳ１２が実施された後、上記ステップＳ５が実行される。
【００７１】
次に、図１５〜図１８を併せ参照して、ライト調停部２８Ａからデータ転送要求ＤＲを受信する際のデータ結合部３０の動作について説明する。まず、図１５及び図１６を併せ参照して、上記データＤＡＴＡ１に対応するデータ転送要求ＤＲを受信する際のデータ結合部３０の動作について説明する。
【００７２】
図１５に示すステップＳ２１において、コマンド転送部３１は、コマンド受信待ち信号を「０」に設定する。
次に、コマンド転送部３１は、ライト調停部２８Ａからデータ転送要求ＤＲを受信したか否かを判定し（ステップＳ２２）、データ転送要求ＤＲを受信するまでステップＳ２１及びステップＳ２２を繰り返し実行する。その後、上記データＤＡＴＡ１に対応するデータ転送要求ＤＲを受信すると、ステップＳ２３に移行する。
【００７３】
続いて、ステップＳ２３において、コマンド転送部３１は、バッファ部３７に対するデータＤＡ及びデータイネーブルＥＮの書き込みを許可するライト制御信号ＷＥを生成する。また、コマンド転送部３１は、コマンドキュー３２に保持されたライン番号ＮＬｃとアドレスＡＤａとに基づいて、ライトアドレスＷＡを生成する。ここでは、図１６に示すように、リードポインタＲＰ（ここでは、「０」）が示すコマンドキュー３２に保持されたライン番号ＮＬｃ（ここでは、「０」）とアドレスＡＤａ（ここでは、「０ｘ２０」）とからライトアドレスＷＡを生成する。そして、ライトアドレスＷＡ（ここでは、「０ｘ０２０」）を開始アドレスとして、バッファ部３７に６４バイトのデータＤＡＴＡ１（データＤＡ及びデータイネーブルＥＮ）が書き込まれる。このとき、図９（ｃ）に示すように、ライン番号「０」のデータイネーブル保持部３９のアドレス「０ｘ００」からアドレス「０ｘ１Ｆ」までは、初期値である「０」が格納された状態となる。これにより、ライン番号「０」のデータ保持部３８のアドレス「０ｘ００」からアドレス「０ｘ１Ｆ」までに保持されているデータＤＡ（ここでは、初期値である「０」）は「ｉｎｖａｌｉｄ（無効化）」される。
【００７４】
上述したように６４バイトのデータＤＡＴＡ１がライン番号「０」のラインバッファＬｆｇに順次書き込まれ、６４バイトのデータＤＡＴＡ１の最後のデータを書き込む最終のバーストサイクルになると（ステップＳ２４でＹＥＳ）、コマンド転送部３１は、コマンド受信待ち信号を「１」に設定する（ステップＳ２５）。すると、図１０に示したステップＳ１〜Ｓ１２の処理ではコマンド受信待ち信号が「０」になるまで上記ステップＳ１が繰り返し実行されることになるため、ステップＳ２〜Ｓ１２の処理が中断される。すなわち、コマンド受信待ち信号が「１」に設定されることにより、コマンドキュー３２及び保持部３５の更新が中断される。具体的には、バッファ部３７へのデータ転送の最終サイクルでは結合完了の判定を行うためにコマンドキュー３２及び保持部３５に対する操作を行うため、最終サイクルになった場合には、コマンドキュー３２及び保持部３５の更新を中断するようにしている。そして、データ結合部３０は、コマンドキュー３２及び保持部３５の更新を中断した状態で、以下に説明するステップＳ２６〜Ｓ３７の処理を実行する。なお、最終のバーストサイクル以外のデータ転送サイクルでは、ステップＳ２〜Ｓ１２の処理は継続して実行されている。
【００７５】
次に、コマンド転送部３１は、コマンドキュー３２のアドレスＡＤａと、コマンドキュー３２のライン番号ＮＬｃと同一のライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ［７：０］とが一致するか否かを判定する（ステップＳ２６）。ここでは、リードポインタＲＰ（ここでは、「０」）が示すアドレスＡＤａ（ここでは、「０ｘ２０」）と、リードポインタＲＰが示すライン番号ＮＬｃ（ここでは、「０」）と同一のライン番号ＮＬを持つラインバッファＬｃのアドレスＡＤｃ［７：０］（ここでは、「０ｘＥ０」）とが一致しない。不一致の場合には、コマンドキュー３２内に後続の連続アドレスのコマンド転送要求ＣＲが存在していることを示している。この場合には、リードポインタＲＰが示すバスマスタ番号ＮＢａ（ここでは、「１」）とトランザクション番号ＮＴａ（ここでは、「０」）とが、ポインタ「０」が示す応答キュー３３に移動される（ステップＳ２７）。その後、コマンドキュー３２のリードポインタＲＰを「０」から「１」に進めて（ステップＳ２８）、ステップＳ２１に戻る。
【００７６】
続いて、図１５及び図１７を併せ参照して、上記データＤＡＴＡ２に対応するデータ転送要求ＤＲを受信する際のデータ結合部３０の動作について説明する。
ステップＳ２８からステップＳ２１に戻った後、上述したようにコマンド受信待ち信号が「０」に設定される。これにより、図１０に示したステップＳ２〜Ｓ１２の処理が再開される。その後、コマンド転送部３１は、データＤＡＴＡ２に対応するデータ転送要求ＤＲを受信すると、ステップＳ２３を実行する。これにより、図１７に示すように、リードポインタＲＰ（ここでは、「１」）が示すライン番号ＮＬｃ（ここでは、「０」）及びアドレスＡＤａ（ここでは、「０ｘ６０」）を開始アドレス（ここでは、「０ｘ０６０」）として、バッファ部３７に１２８バイトのデータＤＡＴＡ２が書き込まれる。この結果、バッファ部３７の連続したアドレスに、２つの転送要求に対応するデータＤＡＴＡ１，ＤＡＴＡ２が連続して保持される。換言すると、バッファ部３７内において、２つの転送要求ＣＲに対応するデータＤＡＴＡ１，ＤＡＴＡ２が結合される。
【００７７】
続いて、バッファ部３７へのデータ転送の最終サイクルになると、コマンド受信待ち信号が「１」に設定され（ステップＳ２５）、ステップＳ２６が実行される。ここでは、リードポインタＲＰが示すアドレスＡＤａ（ここでは、「０ｘ６０」）と、リードポインタＲＰが示すライン番号ＮＬｃ（ここでは、「０」）と同一のライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ［７：０］（ここでは、「０ｘＥ０」）とが一致しない。このため、リードポインタＲＰが示すバスマスタ番号ＮＢａ（ここでは、「１」）とトランザクション番号ＮＴａ（ここでは、「０」）とが、ポインタ「１」が示す応答キュー３３に移動される（ステップＳ２７）。その後、リードポインタＲＰを「１」から「２」に進めて（ステップＳ２８）、ステップＳ２１に戻る。
【００７８】
次いで、図１５及び図１８を併せ参照して、上記データＤＡＴＡ３に対応するデータ転送要求ＤＲを受信する際のデータ結合部３０の動作について説明する。
ステップＳ２８からステップＳ２１に戻った後、上述したようにコマンド受信待ち信号が「０」に設定される。その後、コマンド転送部３１は、データＤＡＴＡ２に対応するデータ転送要求ＤＲを受信すると、ステップＳ２３を実行する。これにより、図１８に示すように、リードポインタＲＰ（ここでは、「２」）が示すライン番号ＮＬｃ（ここでは、「０」）及びアドレスＡＤａ（ここでは、「０ｘＥ０」）を開始アドレス（ここでは、「０ｘ０Ｅ０」）として、バッファ部３７に６４バイトのデータＤＡＴＡ３が書き込まれる。このとき、判定結果Ｈ２が「０ｂ１１」であることから、ライン番号「０」のラインバッファＬｆｇに対してデータＤＡＴＡ３を書き終えた後（つまり、３２バイト分のデータＤＡＴＡ３を書き終えた後）、続けてライン番号「１」のラインバッファＬｆｇに対して残りの３２バイト分のデータＤＡＴＡ３を書き込む。なお、上記残りの３２バイト分のデータＤＡＴＡ３は、ライン番号「１」のラインバッファＬｆｇのアドレス「０ｘ００」を開始アドレスとして書き込まれる。
【００７９】
続いて、バッファ部３７へのデータ転送の最終サイクルになると、コマンド受信待ち信号が「１」に設定され（ステップＳ２５）、ステップＳ２６が実行される。ここでは、リードポインタＲＰ（ここでは、「２」）が示すアドレスＡＤａ（ここでは、「０ｘＥ０」）と、リードポインタＲＰが示すライン番号ＮＬｃ（ここでは、「０」）と同一のライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ［７：０］（ここでは、「０ｘＥ０」）とが一致する。一致の場合には、コマンドキュー３２内に後続の連続アドレスのコマンド転送要求ＣＲが存在しないことを示している。そこで、この場合には、ステップＳ２９に移行する。
【００８０】
次に、ステップＳ２９において、コマンド転送部３１は、判定結果Ｈ２が「０ｂ１１」であるか否かを判定する。ここでは、リードポインタＲＰが示す判定結果Ｈ２が「０ｂ１１」であるため、ステップＳ３０に移行する。
【００８１】
続いて、ステップＳ３０において、コマンド転送部３１は、リードポインタＲＰ（ここでは、「２」）が示すライン番号ＮＬｃ（ここでは、「０」）と同一のライン番号ＮＬを持つラインバッファＬｃのフラグＦ１に、バッファ部３７の１ライン分のデータ結合処理が完了したことを示す「１」を保持する。また、ステップＳ３０において、コマンド転送部３１は、リードポインタＲＰが示すバスマスタ番号ＮＢａ（ここでは、「１」）とトランザクション番号ＮＴａ（ここでは、「１」）とを、ポインタ「２」が示す応答キュー３３に移動する。ここで、応答キュー３３にトランザクション番号ＮＴｂを保持する理由は、メモリＩ／Ｆ２９からバスマスタに対してライト完了通知ＷＣ１を返す際に、最終サイクルのデータが含まれる結合後のコマンド転送要求ＣＲａへのライト完了通知で返す必要があるためである。詳述すると、複数の転送要求ＣＲが１つの転送要求ＣＲａに結合された場合には、その結合後の１つの転送要求ＣＲａに対してライト完了通知ＷＣ１がメモリＩ／Ｆ２９から出力される。このため、１つのライト完了通知ＷＣ１を、結合前の複数の転送要求ＣＲに対応付けるために、応答キュー３３にトランザクション番号ＮＴｂを保持している。
【００８２】
次いで、ステップＳ３１において、コマンド転送部３１は、コマンドキュー３２のリードポインタＲＰを昇順にチェックして同じバスマスタ番号ＮＢａが保持されたラインの判定結果Ｈ１が「１」であるか否かを判定する。また、ステップＳ３１において、コマンド転送部３１は、ライン番号ＮＬｎと同一のライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ［７：０］が「０ｘ００」であるか否かを判定する。このとき、判定結果Ｈ１が「０」である場合、又はアドレスＡＤｃ［７：０］が「０ｘ００」である場合には（ステップＳ３１でＮＯ）、ステップＳ３２に移行する。一方、ステップＳ３１において、判定結果Ｈ１が「１」である場合、又はアドレスＡＤｃ［７：０］が「０ｘ００」でない場合には、リードポインタＲＰを進めて（ステップＳ２８）、ステップＳ２１に戻る。
【００８３】
続いて、ステップＳ３２において、コマンド転送部３１は、ライン番号ＮＬｎと同一のライン番号ＮＬを持つラインバッファＬｃのフラグＦ２に、該当のバスマスタのデータ結合処理がバッファ部３７の１ライン未満のサイズで中断したことを示す「１」を保持する。
【００８４】
本例では、図１８に示すように、ステップＳ３１において、リードポインタＲＰ（ここでは、「２」）が示す判定結果Ｈ２が「０ｂ１１」であり、ライン番号ＮＬｎ（ここでは、「１」）と同一のライン番号ＮＬを持つラインバッファＬｃのアドレスＡＤｃ［７：０］が「０ｘ００」から更新されていない。これは、コマンドキュー３２内に後続の連続アドレスのコマンド転送要求ＣＲが存在しないことを示している。このため、コマンド転送部３１は、「１」のライン番号ＮＬを持つラインバッファのフラグＦ２を「１」に設定する（ステップＳ３２）。このように、ステップＳ３１におけるコマンド転送部３１は、コマンドキュー３２内に後続の連続アドレスの転送要求ＣＲが存在するか否かを判定している。そして、コマンド転送部３１は、後続の連続アドレスの転送要求ＣＲが存在しない場合に、保持部３５内のフラグＦ２を「１」に設定する。
【００８５】
その後、リードポインタＲＰを進めて（ステップＳ２８）、ステップＳ２１に戻る。
一方、上述したステップＳ２９において判定結果Ｈ２が「０ｂ１１」でない場合には、コマンド転送部３１は、判定結果Ｈ２が「０ｂ１０」であるか否かを判定する（ステップＳ３３）。例えば、判定結果Ｈ２が「０ｂ１０」である場合、つまり任意のバースト長（結合後のデータサイズがバッファ部３７の１ライン分のデータサイズ）と等しい場合には、ステップＳ３４に移行する。
【００８６】
続いて、ステップＳ３４において、コマンド転送部３１は、保持部３５のフラグＦ１を「１」に設定する。また、ステップＳ３４において、コマンド転送部３１は、リードポインタＲＰが示すバスマスタ番号ＮＢａとトランザクション番号ＮＴａとを、応答キュー３３に移動する。
【００８７】
次いで、ステップＳ３５において、コマンド転送部３１は、リードポインタＲＰを昇順にチェックして同じバスマスタ番号ＮＢａが保持されたラインＬａの判定結果Ｈ１が「１」であるか否かを判定する。このとき、判定結果Ｈ１が「１」である場合には、リードポインタＲＰを進めて（ステップＳ２８）、ステップＳ２１に戻る。一方、判定結果Ｈ１が「０」である場合には、コマンドキュー３２に後続の連続アドレスのコマンド転送要求ＣＲが存在しないことを示す。そこで、この場合には、ライン番号ＮＬｃと同一のライン番号ＮＬを持つラインバッファＬｃのフラグＦ２を「１」に設定する（ステップＳ３６）。このフラグＦ２により、該当のバスマスタのデータ結合処理を中断したことが示される。なお、フラグＦ２の設定後、リードポインタＲＰを進めて（ステップＳ２８）、ステップＳ２１に戻る。
【００８８】
一方、上述したステップＳ３３において判定結果Ｈ２が「０ｂ００」である場合、つまり結合後のデータサイズが任意のバースト長（バッファ部３７の１ライン分のデータサイズ）よりも小さい場合には、ステップＳ３７に移行する。判定結果Ｈ２が「０ｂ００」である場合には、コマンドキュー３２に後続の連続アドレスのコマンド転送要求ＣＲが存在しないことを示しているため、ライン番号ＮＬｃと同一のライン番号ＮＬを持つラインバッファＬｃのフラグＦ２を「１」に設定する（ステップＳ３７）。このフラグＦ２により、該当のバスマスタのデータ結合処理を中断したことが示される。また、ステップＳ３７において、コマンド転送部３１は、リードポインタＲＰが示すバスマスタ番号ＮＢａとトランザクション番号ＮＴａとを、応答キュー３３に移動する。その後、リードポインタＲＰを進めて（ステップＳ２８）、ステップＳ２１に戻る。
【００８９】
次に、図１９〜図２５に従って、バッファ部３７内でデータを結合した後のデータ結合部３０の動作について説明する。
まず、ステップＳ４０において、結合コマンド転送部４０は、保持部３５内のフラグＦ１，Ｆ２を監視し、フラグＦ１が「１」であるか否か、又はフラグＦ２が「１」であるか否かを判定する。フラグＦ１，Ｆ２のいずれか一方が「１」になるまでステップＳ４０が繰り返し実行される。
【００９０】
図２０に示すように、ライン番号ＮＬが「０」のラインバッファＬｃにおけるフラグＦ１が「１」になると（ステップＳ４０，Ｓ４１でＹＥＳ）、結合コマンド転送部４０は、「０」のライン番号ＮＬにおけるアドレスＡＤｃ及びサイズＳｃに基づいて、結合後アドレスＡＤｄ及び結合後サイズＳｄを生成する（ステップＳ４２）。詳述すると、フラグＦ１＝１は、バッファ部３７の１ライン分のデータを結合したことを示している。そこで、結合コマンド転送部４０は、結合後サイズＳｄを、任意のバースト長（ここでは、２５６バイト）と等しいデータサイズに設定する。また、結合コマンド転送部４０は、結合後アドレスＡＤｄに対して、「０」のライン番号ＮＬにおけるアドレスＡＤｃ（ここでは、０ｘ００００００Ｅ０）を保持した後、その下位８ビットを０値化して結合後アドレスＡＤｄを生成する。換言すると、結合コマンド転送部４０は、結合後アドレスＡＤｄの下位８ビットを０値化し、結合後アドレスＡＤｄの上位２４ビットに、「０」のライン番号ＮＬにおけるアドレスＡＤｃの上位２４ビットを保持する。このため、「０」のライン番号ＮＬにおける結合後アドレスＡＤｄは、「０ｘ００００００００」となる。これにより、データサイズが任意のバースト長（ここでは、２５６バイト）であって、任意のバースト長のアライメント単位を開始アドレスとするコマンド転送要求、つまり結合後のコマンド転送要求が生成される。
【００９１】
続いて、ステップＳ４３において、結合コマンド転送部４０は、上記算出した結合後アドレスＡＤｄ及び結合後サイズＳｄと、「０」のライン番号ＮＬにおけるラインバッファＬｃに保持されたバスマスタ番号ＮＢｃ及びトランザクション番号ＮＴｃとをコマンドキュー４１に保持する。ここでは、ポインタ「０」が示すコマンドキュー４１のラインＬｄには、バスマスタ番号ＮＢｄとして「１」、結合後アドレスＡＤｄとして「０ｘ００００００００」、結合後サイズＳｄとして「２５６バイト」、トランザクション番号ＮＴｄとして「０」がそれぞれ保持される。これにより、ポインタ「０」が示すコマンドキュー４１内に、ライン番号「０」のラインバッファＬｆｇに格納されたデータに対応する結合後のコマンド転送要求ＣＲａが保持される。
【００９２】
以上説明したステップＳ４３の処理が終了すると、結合コマンド転送部４０は、コマンドキュー４１内に保持された結合後のコマンド転送要求ＣＲａ及びデータ転送要求ＤＲａをメモリＩ／Ｆ２９に発行する（ステップＳ４４）。すなわち、結合後アドレスＡＤｄ（ここでは、「０ｘ００００００００」）と結合後サイズＳｄ（ここでは、２５６バイト）とを有するコマンド転送要求ＣＲａ及びデータ転送要求ＤＲａをメモリＩ／Ｆ２９に発行する。その後、結合後のコマンド転送要求ＣＲａの生成処理としてはステップＳ４０に戻る。
【００９３】
次に、図２１に示すステップＳ５０において、上記発行したコマンド転送要求ＣＲａ及びデータ転送要求ＤＲａに対する応答コマンドがメモリＩ／Ｆ２９から結合コマンド転送部４０に入力されるまで待つ。応答コマンドを受信すると、結合コマンド転送部４０は、ライン番号「０」のラインバッファＬｆ，Ｌｇに保持された、結合後の１ライン分のデータＤＡａ及びデータイネーブルＥＮａをメモリＩ／Ｆ２９を介してメモリ１４に転送する（ステップＳ５１）。例えば、結合コマンド転送部４０は、結合後のコマンド転送要求ＣＲａ及びデータ転送要求ＤＲａが受け付けられると、データＤＡａ及びデータイネーブルＥＮａの読み出しを許可するリード制御信号ＲＥを生成する。また、結合コマンド転送部４０は、コマンドキュー４１に保持された結合後アドレスＡＤｄのうち下位１２ビットのアドレスＡＤｄ［１１：０］をリードアドレスＲＡとする。そして、リードアドレス（ここでは、「０ｘ０００」）を開始アドレスとして、ライン番号「０」のバッファ部３７から２５６バイトのデータＤＡａ及びデータイネーブルＥＮａが読み出され、その読み出されたデータＤＡａ及びデータイネーブルＥＮａがメモリＩ／Ｆ２９を介してメモリ１４に転送される。
【００９４】
その後、上記２５６バイトのデータ転送が完了すると（ステップＳ５２でＹＥＳ）、ライン番号「０」のバッファ部３７（データ保持部３８及びデータイネーブル保持部３９）を初期化する（ステップＳ５３）。このようにバッファ部３７（特に、データイネーブル保持部３９）を初期化することにより、上述したステップＳ２２〜Ｓ２４においてバスマスタからの転送データＤＡＥをバッファ部３７に書き込む際に、バスマスタからのデータＤＡが存在する部分のみに「１」のデータイネーブルＥＮが書き込まれることになる。これにより、結合前の転送要求の開始アドレス（ここでは、「０ｘ００００００２０」）を、任意バースト長のアライメント単位を開始アドレス（ここでは、「０ｘ００００００００」）に変換しても、不要なライトアクセスが実施されることを防止できる。
【００９５】
続いて、図２２に示すように、結合コマンド転送部４０は、ポインタ「０」が示すコマンドキュー４１のバスマスタ番号ＮＢｄ（ここでは、「１」）及びトランザクション番号ＮＴｄ（ここでは、「０」）を、ポインタ「０」が示す応答キュー４２に移動する（ステップＳ５４）。なお、ステップＳ５４の後、結合データの転送処理としてはステップＳ５０に戻る。
【００９６】
次いで、図２３に示すステップＳ６０において、結合コマンド転送部４０は、バッファ部３７から読み出したデータＤＡａがメモリ１４に書き込まれたことを示すライト完了通知ＷＣ１が入力されるまで待つ。結合コマンド転送部４０は、ライト完了通知ＷＣ１を受信すると（ステップＳ６０でＹＥＳ）、応答キュー３３にライト完了通知ＷＣ２を送信する。具体的には、ポインタ「０」が示す応答キュー４２に保持されたトランザクション番号ＮＴｅがライト完了通知ＷＣ２として応答キュー３３に通知される（ステップＳ６１）。なお、ステップＳ６１の後、メモリＩ／Ｆ２９からのライト完了通知ＷＣ１の受信処理としてはステップＳ６０に戻る。
【００９７】
次に、図２４に示すステップＳ７０において、応答キュー３３は、応答キュー４２からのライト完了通知ＷＣ２（トランザクション番号ＮＴｅ）を受信するまで待つ。応答キュー３３は、トランザクション番号ＮＴｅを受信すると、そのトランザクション番号ＮＴｅ（ここでは、「０」）と同じトランザクション番号ＮＴｂの転送要求ＣＲの転送元であるバスマスタに対してライト完了通知ＷＣ３を送信する（ステップＳ７１）。このライト完了通知ＷＣ３は、同じトランザクション番号ＮＴｅを持つ全ての応答要求に対して送信が完了するまで継続される。ここでは、図２５に示すように、ポインタ「０」が示す応答キュー３３のトランザクション番号ＮＴｂが「０」であるため、バスマスタ番号ＮＢが「１」のバスマスタに対してライト完了通知ＷＣ３が送信される。続いて、ポインタ「１」が示す応答キュー３３のトランザクション番号ＮＴｂも「０」であるため、バスマスタ番号ＮＢが「１」のバスマスタに対してライト完了通知ＷＣ３が送信される。次いで、ポインタ「２」が示す応答キュー３３のトランザクション番号ＮＴｂは「１」であるため（ステップＳ７２でＹＥＳ）、ステップＳ７０に戻る。
【００９８】
続いて、図２０に示すように、ライン番号ＮＬが「１」のラインバッファＬｃのフラグＦ２が「１」になると（ステップＳ４１でＮＯ）、結合コマンド転送部４０は、「１」のライン番号ＮＬにおけるアドレスＡＤｃ及びサイズＳｃに基づいて、結合後アドレスＡＤｄ及び結合後サイズＳｄを生成する（ステップＳ４５）。詳述すると、フラグＦ２＝１は、バッファ部３７の１ライン分未満のサイズでデータ結合が中断したことを示している。そこで、結合コマンド転送部４０は、「１」のライン番号ＮＬにおけるアドレスＡＤｃ［７：０］（ここでは、「０ｘ００」）にサイズＳｃ（ここでは、３２バイト）を加算して結合後サイズＳｄ（ここでは、３２バイト）を生成する。また、結合コマンド転送部４０は、結合後アドレスＡＤｄにアドレスＡＤｃ（ここでは、「０ｘ０００００１００」）を保持した後、その下位８ビットを０値化して結合後アドレスＡＤｄ（ここでは、「０ｘ０００００１００」）を生成する。これにより、任意のバースト長（ここでは、２５６バイト）よりも小さいデータサイズ（ここでは、３２バイト）であって、任意のバースト長のアライメント単位を開始アドレス（ここでは、「０ｘ０００００１００」）とする、結合後のコマンド転送要求が生成される。
【００９９】
続いて、ステップＳ４３では、ポインタ「１」が示すコマンドキュー４１に、バスマスタ番号ＮＢｄとして「１」、結合後アドレスＡＤｄとして「０ｘ０００００１００」、結合後サイズＳｄとして「３２バイト」、トランザクション番号ＮＴｄとして「１」がそれぞれ保持される。これにより、ポインタ「１」が示すコマンドキュー４１内に、ライン番号「１」のラインバッファＬｆｇに格納されたデータに対応する結合後のコマンド転送要求ＣＲａが保持される。
【０１００】
そして、結合コマンド転送部４０は、ポインタ「１」が示すコマンドキュー４１に保持された結合後アドレスＡＤｄ（ここでは、「０ｘ０００００１００」）と結合後サイズＳｄ（ここでは、３２バイト）とを有するコマンド転送要求ＣＲａをメモリＩ／Ｆ２９に発行する（ステップＳ４４）。その後、図２１のステップＳ５０〜Ｓ５４、図２３のステップＳ６０，Ｓ６１及び図２４のステップＳ７０〜Ｓ７２が順に実施される。
【０１０１】
次に、図２６に示した第２の具体例に沿って、データ結合部３０の動作について説明する。
本例では、まず、図２６（ａ）に示すように、データ結合部３０は、所定のバスマスタからライト調停部２８Ａを介して、開始アドレスが「０ｘ００００００２０」であり、サイズが６４バイトであるデータＤＡＴＡ１を受信する。続いて、データ結合部３０は、同じバスマスタから、開始アドレスが「０ｘ００００００６０」であり、サイズが１２８バイトであるデータＤＡＴＡ２を受信する。次いで、データ結合部３０は、同じバスマスタから、開始アドレスが「０ｘ００００００Ｅ０」であり、サイズが３２バイトであるデータＤＡＴＡ３を受信する。そして、これらデータＤＡＴＡ１〜ＤＡＴＡ３を受信後、同じバスマスタからの転送要求が終了する。
【０１０２】
はじめに、データＤＡＴＡ１〜ＤＡＴＡ３に対応するコマンド転送要求ＣＲを受信する処理について説明するが、データＤＡＴＡ１，ＤＡＴＡ２に対応するコマンド転送要求ＣＲを受信する処理は、上述した第１の具体例と同様であるため、ここでは説明を省略する。そこで、データＤＡＴＡ３に対応する転送要求ＣＲを受信した際の処理から説明する。
【０１０３】
図２６（ｄ）に示すように、転送要求ＣＲを受信すると、ライト調停部２８Ａからのバスマスタ番号ＮＢ（ここでは、「１」）と同一のバスマスタ番号が保持部３５に格納されているため、最新のトランザクション番号ＮＴ（ここでは、「０」）を保持する保持部３５のライン番号（ここでは、「０」）を選択する。続いて、「０」のライン番号ＮＬを持つラインバッファＬｃに保持されたアドレスＡＤｃ（＝０ｘ００００００６０）にサイズＳｃ（＝１２８バイト）を加算してアドレス値（＝０ｘ００００００Ｅ０）が算出される。このアドレス値とライト調停部２８Ａから出力されるアドレスＡＤ（ここでは、「０ｘ００００００Ｅ０」）とが一致するため、以下の処理が行われる。すなわち、コマンド転送部３１は、ライトポインタＷＰ（ここでは、「２」）が示すバスマスタ番号ＮＢａ、アドレスＡＤａ、サイズＳａ、ライン番号ＮＬｃ、判定結果Ｈ１、トランザクション番号ＮＴａに、「１」、「０ｘＥ０」、「３２バイト」、「０」、「０」を保持する。また、バッファ管理部３４は、「０」のライン番号ＮＬを持つラインバッファＬｃにおけるアドレスＡＤｃ及びサイズＳｃを、アドレスＡＤと同じ「０ｘ００００００Ｅ０」、及びサイズＳｉと同じ「３２バイト」にそれぞれ更新する。
【０１０４】
次いで、ライトポインタＷＰが示すアドレスＡＤａ（ここでは、「０ｘＥ０」）にサイズＳａ（ここでは、３２バイト）を加算して加算値（＝２５６バイト）が算出される。このとき、加算値が２５６バイトと等しくなるため、コマンド転送部３１は、ライトポインタＷＰが示す判定結果Ｈ２を「０ｂ１０」に設定する。
【０１０５】
次に、データＤＡＴＡ１〜ＤＡＴＡ３に対応するデータ転送要求ＤＲを受信する処理について説明するが、データＤＡＴＡ１，ＤＡＴＡ２に対応するデータ転送要求ＤＲを受信する処理は、上述した第１の具体例と同様に実施される。すなわち、図２６（ｂ）及び図２６（ｃ）に示すように、データ保持部３８及びデータイネーブル保持部３９に、ライン番号「０」のアドレス「０ｘ２０」から６４バイトのデータＤＡＴＡ１が書き込まれ、続くアドレス「０ｘ６０」から１２８バイトのデータＤＡＴＡ２が書き込まれる。
【０１０６】
続いて、図２６（ｅ）に示すように、コマンド転送部３１は、データＤＡＴＡ３に対応するデータ転送要求ＤＲを受信すると、リードポインタＲＰ（ここでは、「２」）が示すライン番号ＮＬｃ（ここでは、「０」）及びアドレスＡＤａ（ここでは、「０ｘＥ０」）を開始アドレスとして、バッファ部３７に３２バイトのデータＤＡＴＡ３が書き込まれる。
【０１０７】
次いで、バッファ部３７へのデータ転送の最終サイクルになると、コマンド受信待ち信号が「１」に設定される。次いで、リードポインタＲＰ（ここでは、「２」）が示すアドレスＡＤａ（ここでは、「０ｘＥ０」）と、ライン番号ＮＬが「０」のラインバッファＬｃに保持されたアドレスＡＤｃ［７：０］（ここでは、「０ｘＥ０」）とが比較される。このとき、アドレスＡＤａとアドレスＡＤｃとが一致し、さらにリードポインタＲＰが示す判定結果Ｈ２が「０ｂ１０」であることから、コマンド転送部３１は、保持部３５のフラグＦ１を「１」に設定する（ステップＳ３４）。また、ステップＳ３４において、コマンド転送部３１は、リードポインタＲＰが示すバスマスタ番号ＮＢａ（ここでは、「１」）とトランザクション番号ＮＴａ（ここでは、「０」）とを、応答キュー３３に移動する。さらに、判定結果Ｈ２が「０ｂ１０」であり、コマンドキュー３２内に後続の連続アドレスの転送要求ＣＲが存在しないため、ライン番号ＮＬが「０」の保持部３５のフラグＦ２が「１」に設定される。
【０１０８】
次に、ライン番号ＮＬが「０」のラインバッファＬｃにおけるフラグＦ１が「１」であるため、結合コマンド転送部４０は、結合後サイズＳｄを「２５６」に設定する。また、結合コマンド転送部４０は、結合後アドレスＡＤｄに対して、「０」のライン番号ＮＬにおけるアドレスＡＤｃ（ここでは、０ｘ００００００Ｅ０）を保持した後、その下位８ビットを０値化して結合後アドレスＡＤｄ（ここでは、０ｘ００００００００）を生成する。続いて、図２６（ｆ）に示すように、結合コマンド転送部４０は、上記算出した結合後アドレスＡＤｄ及び結合後サイズＳｄと、「０」のライン番号ＮＬにおけるラインバッファＬｃに保持されたバスマスタ番号ＮＢｃ（ここでは、「１」）及びトランザクション番号ＮＴｃ（ここでは、「０」）とをコマンドキュー４１に保持する。これにより、データサイズが任意のバースト長（ここでは、２５６バイト）であって、任意のバースト長のアライメント単位を開始アドレスとするコマンド転送要求ＣＲａがコマンドキュー４１に保持される。
【０１０９】
次いで、結合コマンド転送部４０は、コマンドキュー４１に保持された結合後アドレスＡＤｄ（ここでは、「０ｘ００００００００」）と結合後サイズＳｄ（ここでは、２５６バイト）とを有するコマンド転送要求ＣＲａをメモリＩ／Ｆ２９に発行する。そして、ライン番号「０」のバッファ部３７（データ保持部３８及びデータイネーブル保持部３９）に保持された結合後のデータＤＡａ及びデータイネーブルＥＮａがメモリＩ／Ｆ２９を介してメモリ１４に転送される。
【０１１０】
次に、図２７に示した第３の具体例に沿って、データ結合部３０の動作について説明する。
本例では、図２７（ａ）に示すように、データ結合部３０は、所定のバスマスタからライト調停部２８Ａを介して、開始アドレスが「０ｘ００００００２０」であり、サイズが６４バイトであるデータＤＡＴＡ１を受信する。このデータＤＡＴＡ１を受信後、同じバスマスタからの転送要求が終了する。
【０１１１】
図２７（ｄ）に示すように、まず、コマンド転送部３１は、転送要求ＣＲを受信すると、ライト調停部２８Ａからのバスマスタ番号ＮＢ（ここでは、「１」）と同一のバスマスタ番号が保持部３５に格納されていないため、ステップＳ４を実行する。詳述すると、コマンド転送部３１は、バッファ部３７の空ライン番号（ここでは、「０」）を取得する。コマンド転送部３１は、ライトポインタＷＰ（ここでは、「０」）が示すコマンドキュー３２のバスマスタ番号ＮＢａ、アドレスＡＤａ及びサイズＳａに、バスマスタ番号ＮＢである「１」、アドレスＡＤ［７：０］である「０ｘ２０」、サイズＳｉである「６４バイト」をそれぞれ保持する。コマンド転送部３１は、ライトポインタＷＰ（ここでは、「０」）が示すライン番号ＮＬｃ、判定結果Ｈ１及びトランザクション番号ＮＴａに、空ライン番号である「０」、「０」、番号付与部３６により付与される「０」をそれぞれ保持する。また、バッファ管理部３４は、空ライン番号「０」と同一のライン番号ＮＬを持つラインバッファＬｃにおけるアドレスＡＤｃ及びサイズＳｃに、アドレスＡＤである「０ｘ００００００２０」、サイズＳｉである「６４バイト」をそれぞれ保持する。
【０１１２】
次いで、ライトポインタＷＰが示すアドレスＡＤａ（ここでは、「０ｘ２０」）にサイズＳａ（ここでは、６４バイト）を加算して加算値（＝９６バイト）が算出される。このとき、加算値が２５６バイトよりも小さくなるため、コマンド転送部３１は、ライトポインタＷＰが示す判定結果Ｈ２を「０ｂ００」に設定する。
【０１１３】
次に、図２７（ｅ）に示すように、コマンド転送部３１は、データＤＡＴＡ１に対応するデータ転送要求ＤＲを受信すると、リードポインタＲＰ（ここでは、「０」）が示すライン番号ＮＬｃ（ここでは、「０」）及びアドレスＡＤａ（ここでは、「０ｘ２０」）を開始アドレスとして、バッファ部３７に６４バイトのデータＤＡＴＡ１が書き込まれる。すなわち、図２７（ｂ）及び図２７（ｃ）に示すように、データ保持部３８及びデータイネーブル保持部３９に、ライン番号「０」のアドレス「０ｘ２０」から６４バイトのデータＤＡＴＡ１が書き込まれる。
【０１１４】
次いで、バッファ部３７へのデータ転送の最終サイクルになると、コマンド受信待ち信号が「１」に設定される。次いで、図２７（ｅ）に示すように、リードポインタＲＰ（ここでは、「０」）が示すアドレスＡＤａ（ここでは、「０ｘ２０」）と、ライン番号ＮＬが「０」のラインバッファＬｃに保持されたアドレスＡＤｃ［７：０］（ここでは、「０ｘＥ０」）とが比較される。このとき、アドレスＡＤａとアドレスＡＤｃとが一致し、さらにリードポインタＲＰが示す判定結果Ｈ２が「０ｂ００」であることから、コマンドキュー３２内に後続の連続アドレスの転送要求ＣＲが存在しない。このため、コマンド転送部３１は、ライン番号ＮＬが「０」の保持部３５のフラグＦ２を「１」に設定する（ステップＳ３７）。また、ステップＳ３７において、コマンド転送部３１は、リードポインタＲＰが示すバスマスタ番号ＮＢａ（ここでは、「１」）とトランザクション番号ＮＴａ（ここでは、「０」）とを、応答キュー３３に移動する。
【０１１５】
次に、ライン番号ＮＬが「０」のラインバッファＬｃにおけるフラグＦ２が「１」であるため、結合コマンド転送部４０は、そのラインバッファＬｃに保持されたアドレスＡＤｃ及びサイズＳｃに基づいて、結合後アドレスＡＤｄ及び結合後サイズＳｄが生成される。詳述すると、結合コマンド転送部４０は、「０」のライン番号ＮＬにおけるアドレスＡＤｃ［７：０］（ここでは、「０ｘ２０」）にサイズＳｃ（ここでは、６５バイト）を加算して結合後サイズＳｄ（ここでは、９６バイト）を生成する。また、結合コマンド転送部４０は、結合後アドレスＡＤｄにアドレスＡＤｃ（ここでは、「０ｘ００００００２０」）を保持した後、その下位８ビットを０値化して結合後アドレスＡＤｄ（ここでは、「０ｘ００００００００」）を生成する。続いて、図２７（ｆ）に示すように、結合コマンド転送部４０は、上記算出した結合後アドレスＡＤｄ及び結合後サイズＳｄと、「０」のライン番号ＮＬにおける保持部３５に保持されたバスマスタ番号ＮＢｃ（ここでは、「１」）及びトランザクション番号ＮＴｃ（ここでは、「０」）とをコマンドキュー４１に保持する。これにより、任意のバースト長よりも小さいデータサイズ（ここでは、９６バイト）であって、任意のバースト長のアライメント単位を開始アドレス（ここでは、「０ｘ００００００００」）とするコマンド転送要求ＣＲａがコマンドキュー４１に保持される。
【０１１６】
次いで、結合コマンド転送部４０は、コマンドキュー４１に保持された結合後アドレスＡＤｄ（ここでは、「０ｘ００００００００」）と結合後サイズＳｄ（ここでは、９６バイト）とを有するコマンド転送要求ＣＲａをメモリＩ／Ｆ２９に発行する。そして、ライン番号「０」のバッファ部３７（データ保持部３８及びデータイネーブル保持部３９）に保持された結合後のデータＤＡａ及びデータイネーブルＥＮａがメモリＩ／Ｆ２９を介してメモリ１４に転送される。
【０１１７】
以上説明したデータ結合部３０の動作により、バースト長の短い複数の転送要求ＣＲを結合してバースト長が長く（任意のバースト長と同じ又は任意のバースト長よりも短く）、且つ任意のバースト長のアライメント単位を開始アドレスとする転送要求ＣＲａが生成される。すなわち、任意のバースト長が２５６バイトである場合には、下位８ビットが「０ｘ００」となるアドレスを開始アドレスとする転送要求ＣＲａが生成される。これにより、メモリ１４の使用効率を向上させることができる。この点について以下に詳述する。
【０１１８】
まず、図２８（ａ）に示すように、従来のデータ転送方法により、データ「１」〜「７」を転送する場合について説明する。
従来は、バースト長の短い（データサイズの小さい）転送データを転送する場合にも１つの転送要求が発行される。このため、図２８（ｂ）に示すように、バースト長の短いデータ「１」〜「７」に対してそれぞれ転送要求が発行される。さらに、バスマスタから出力されるコマンド転送要求ＣＲのアドレスＡＤは、メモリ１４上の任意のアドレスを指定するため、１つのバーストアクセスが複数のバンクや複数のロウアドレスをまたぐことが発生しやすい。例えば、図２８（ａ）に示した例では、データ「４」を転送するためのバーストアクセスでは、２つのバンク１，２をまたぐことになる。すなわち、データ「４」の一部のデータ「４−１」がバンク１に書き込まれ、データ「４」の残りのデータ「４−２」が別のバンク２に書き込まれる。この場合には、図２８（ｂ）に示すように、データ「４−１」に対して転送要求が発行され、さらにデータ「４−２」に対しても転送要求が発行されることになる。このように、従来のデータ転送方法では、多くの転送要求（コマンド）が発行されるため、その分だけメモリ１４のメモリ帯域が圧迫される。
【０１１９】
これに対し、本例では、図２８（ａ）及び図２８（ｃ）に示すように、データ「１」とデータ「２」の一部を結合してデータ「（１）」を生成し、それらデータ「１」，「２」に対応する転送要求ＣＲを結合して、データサイズが任意のバースト長であって、且つ任意のバースト長のアライメント単位を開始アドレスとする転送要求「（１）」を生成する。具体的には、転送要求「（１）」の開始アドレスの下位９ビット、つまりメモリ１４のカラムアドレスに対応するアドレスは「０ｘ０００」となる。続いて、データ「２」の残りの一部とデータ「３」とデータ「４−１」とを結合してデータ「（２）」を生成し、それら３つのデータ「２」，「３」，「４−１」に対応する転送要求ＣＲを結合して、データサイズが任意のバースト長である転送要求「（２）」を生成する。この転送要求「（２）」の開始アドレスの下位９ビットのアドレスは「０ｘ１００」となる。次いで、データ「４−２」とデータ「５」とデータ「６」の一部を結合してデータ「（３）」を生成し、それら３つのデータ「４−２」，「５」，「６」に対応する転送要求ＣＲを結合して、データサイズが任意のバースト長となる転送要求「（３）」を生成する。この転送要求「（３）」の開始アドレスの下位９ビットのアドレスは「０ｘ０００」となる。そして、データ「６」の残りの一部とデータ「７」とを結合してデータ「（４）」を生成し、それら２つのデータ「６」，「７」に対応する転送要求ＣＲを結合して、データサイズが任意のバースト長よりも小さい転送要求「（４）」を生成する。この転送要求「（４）」の開始アドレスの下位９ビットのアドレス「０ｘ１００」となる。
【０１２０】
以上説明した動作により、バースト長の短い転送要求ＣＲを結合してバースト長の長い転送要求に変換することができるため、図２８（ｄ）に示すように、転送要求の発行を減らすことができる。但し、単に複数の転送要求ＣＲを結合するだけでは、結合前の転送要求ＣＲのアドレスＡＤがメモリ１４上の任意のアドレスを指定することに起因して、１つのバーストアクセスが複数のバンクや複数のロウアドレスをまたぎやすいという問題は残る。これに対し、本例で生成される結合後の転送要求ＣＲａでは、任意のバースト長のアライメント単位を開始アドレスとし、データサイズを任意のバースト長以下のサイズとしている。このため、結合前の転送要求ＣＲのアドレスＡＤがメモリ１４上の任意のアドレスを指定する場合であっても、１つのバーストアクセスが複数のバンクや複数のロウアドレスをまたぐという問題の発生を好適に抑制できる。これによっても、転送要求の発行を減らすことができる。例えば、図２８（ｃ），（ｄ）に示した例では、従来では８つ必要であった転送要求の発行（図２８（ｂ）参照）を、４つに減らすことができる。これにより、メモリ１４のメモリ帯域の使用効率を向上させることができる。
【０１２１】
以上説明した本実施形態によれば、以下の効果を奏することができる。
（１）複数の転送要求ＣＲを結合し、データサイズが任意のバースト長以下であって、任意のバースト長のアライメント単位を開始アドレスとする転送要求を生成するようにした。これにより、メモリ１４のメモリ帯域の使用効率を向上させることができる。
【０１２２】
（２）ライト調停部２８Ａでは、優先順位の高いバスマスタが選択される。このため、コマンドキュー３２には、優先度の高いバスマスタからの転送要求ＣＲが多数保持される。これにより、優先度の高いバスマスタによる転送要求ＣＲの結合が頻繁に行われることになるため、優先度の高いバスマスタがアクセスする際のメモリ１４のメモリ帯域の使用効率を特に向上させることができる。
【０１２３】
（３）ライト調停部２８ＡとメモリＩ／Ｆ２９との間に、バスマスタから出力されるデータＤＡ及びデータイネーブルＥＮを一時的に保持するバッファ部３７を設けるようにした。これにより、１つのバッファ部３７を複数のバスマスタで共有することができる。このため、バスマスタ毎にデータＤＡ及びデータイネーブルＥＮを一時的に保持するバッファ部を設ける場合に比べて、画像処理装置１２における回路規模の増大を抑制できる。
【０１２４】
（４）結合後の転送要求ＣＲａを特定するトランザクション番号ＮＴを、結合前の転送要求ＣＲに対応付けて保持するようにした。これにより、結合後の転送要求ＣＲａに対するライト完了通知ＷＣ１に基づいて、結合前の転送要求ＣＲに対応するライト完了通知ＷＣ３をバスマスタに確実に送信することができる。
【０１２５】
（５）コマンドキュー３２，４１、応答キュー３３，４２及び保持部３５における各情報を、バスマスタ番号ＮＢと対応付けて保持するようにした。これにより、複数のバスマスタが活性化する場合であっても、複数のバスマスタからの転送要求が並存した状態でそれぞれの転送要求に対する処理を実行することができる。
【０１２６】
（６）ところで、本例のようにコマンド転送要求ＣＲを発行するコマンド転送バスと、データＤＡ等を転送するデータ転送バスとが分離したバスにおいては、データ転送が１〜３２バーストサイクルで転送完了するのに対し、転送要求は基本的に１バーストサイクルで転送が完了する。ここでのバーストサイクル数は、バス幅が８バイトであって、データ転送におけるデータサイズが８〜２５６バイトの場合のバーストサイクル数である。このため、例えば６４バイトのデータ転送の場合には、そのデータ転送の最終バーストサイクル（ステップＳ２４参照）で転送要求ＣＲのコマンドキュー３２への蓄積を中断しても（ステップＳ２５）、最終バーストサイクル以外のバーストサイクルで取り込まれた最大で７つの転送要求ＣＲがコマンドキュー３２に蓄積されることになる。したがって、コマンドキュー３２への転送要求ＣＲの蓄積を中断した場合であっても、コマンドキュー３２に蓄積された転送要求ＣＲが少ないことに起因して結合処理が中断されるといった問題の発生を抑制することができる。
【０１２７】
（他の実施形態）
なお、上記実施形態は、これを適宜変更した以下の態様にて実施することもできる。
・図２９に示すように、保持部３５の各ラインバッファＬｃに、アドレスＡＤｃやフラグＦ１，Ｆ２等と併せて、結合開始アドレスＡＤｓを保持するようにしてもよい。この結合開始アドレスＡＤｓは、結合する複数の転送要求ＣＲにおける最初の転送要求ＣＲに対応するアドレスＡＤの下位８ビットである。例えば、図９に示した例では、データＤＡＴＡ１〜ＤＡＴＡ３に対応する３つの転送要求ＣＲのうち、データＤＡＴＡ１に対応する転送要求ＣＲのアドレスＡＤ（ここでは、「０ｘ００００００２０」）の下位８ビット（ここでは、「０ｘ２０」）が結合開始アドレスＡＤｓとしてラインバッファＬｃに保持される。なお、判定結果Ｈ２＝０ｂ１１によりライン番号ＮＬｎを取得した場合には、結合開始アドレスＡＤｓとして「０ｘ００」がラインバッファＬｃに保持される。
【０１２８】
そして、本変形例において、図１９に示したステップＳ４２，Ｓ４５における結合後アドレスＡＤｄ及び結合後サイズＳｄの算出方法を以下のように変更してもよい。すなわち、フラグＦ１＝１の場合（ステップＳ４２）には、結合後サイズＳｄを、任意のバースト長（２５６バイト）から結合開始アドレスＡＤｓを減算して算出する。また、結合開始アドレスＡＤｓを結合後アドレスＡＤｄの下位８ビットに保持し、さらにアドレスＡＤｃの上位２４ビットを結合後アドレスＡＤｄの上位２４ビットに保持することにより、結合後アドレスＡＤｄを算出する。例えば、第１の具体例（図２０参照）では、「０」のライン番号ＮＬにおける結合後サイズＳｄが、結合開始アドレスＡＤｓが「０ｘ２０（３２）」となるため、２２４（＝２５６−３２）バイトとなる。また、「０」のライン番号ＮＬにおける結合後アドレスＡＤｄは、結合開始アドレスＡＤｓ（ここでは、「０ｘ２０」）とラインバッファＬｃに保持されたアドレスＡＤｃ（ここでは、「０ｘ００００００Ｅ０」）とに基づいて、「０ｘ００００００２０」となる。
【０１２９】
一方、フラグＦ１＝０、且つフラグＦ２＝１の場合（ステップＳ４５）には、結合後サイズＳｄを、（アドレスＡＤｃ［７：０］＋サイズＳｃ［７：０］−結合開始アドレスＡＤｓ）という式により算出する。また、結合開始アドレスＡＤｓを結合後アドレスＡＤｄの下位８ビットに保持し、さらにアドレスＡＤｃの上位２４ビットを結合後アドレスＡＤｄの上位２４ビットに保持することにより、結合後アドレスＡＤｄを算出する。例えば、第１の具体例（図２０参照）では、「１」のライン番号ＮＬにおけるアドレスＡＤｃ［７：０］、サイズＳｃ［７：０］、結合開始アドレスＡＤｓがそれぞれ「０ｘ００」、「３２バイト」、「０ｘ００」となるため、「１」のライン番号ＮＬにおける結合後サイズＳｄが「３２バイト」となる。また、「１」のライン番号ＮＬにおける結合後アドレスＡＤｄは、結合開始アドレスＡＤｓ（ここでは、「０ｘ００」）とラインバッファＬｃに保持されたアドレスＡＤｃ（ここでは、「０ｘ０００００１００」）とに基づいて、「０ｘ００００００００」となる。
【０１３０】
換言すると、本変形例では、上記実施形態で生成された結合後の転送要求ＣＲａの開始アドレスを、結合開始アドレスＡＤｓに基づくアドレスに変換している。
本変形例の構成によれば、バスマスタから出力される有効なデータではない冗長なデータ（例えば、図９（ｂ）のデータ保持部３８におけるアドレス［７：０］の「０ｘ００」〜「０ｘ１Ｆ」に保持された「初期値」）の転送が行われない。これにより、冗長なデータ転送を削減することができるため、メモリ１４のメモリ帯域の使用効率をより向上させることができる。
【０１３１】
・図３０に示すように、図３に示したデータ結合部３０に対して、コマンド選択回路５０と、コマンド転送部５１と、データ選択回路５３とを追加するようにしてもよい。コマンド選択回路５０には、ライト調停部２８Ａからのコマンド転送要求ＣＲと、バスマスタ毎に与えられる結合可否信号ＳＰとが入力される。結合可否信号ＳＰは、転送要求ＣＲの結合（データの結合）が可能か否かを示す信号である。コマンド選択回路５０は、結合可否信号ＳＰが転送要求ＣＲの結合が可能であることを示す場合には、受信したコマンド転送要求ＣＲをコマンド転送要求ＣＲ１としてコマンド転送部３１に出力する。コマンド転送部３１に出力されたコマンド転送要求ＣＲ１は、上記実施形態と同様に処理される。なお、転送要求ＣＲの結合が可能なバスマスタとしては、例えば、センサＩ／Ｆ２１や色処理部２２（図２参照）が挙げられる。一方、コマンド選択回路５０は、結合可否信号ＳＰが転送要求ＣＲの結合が不可であることを示す場合には、受信したコマンド転送要求ＣＲをコマンド転送要求ＣＲ２として、コマンド転送部３１を介さない別の経路に設けられたコマンド転送部５１に出力する。すなわち、コマンド選択回路５０は、結合可否信号ＳＰに基づいて、コマンド転送部３１，５１にコマンド転送要求ＣＲを振り分ける。
【０１３２】
コマンド転送部５１は、コマンド転送要求ＣＲ２を順次蓄積するコマンドキュー５２を有する。コマンドキュー５２は、複数（ここでは、ｈ＋１）のラインを有している。コマンド転送部５１には、転送情報（転送要求元のバスマスタ番号ＮＢ等）と、データ転送要求ＤＲ２とが入力される。コマンド転送部５１は、バスマスタ番号ＮＢ及びデータ転送要求ＤＲ２に基づいて、コマンドキュー５２に保持されたコマンド転送要求ＣＲ２を結合コマンド転送部４０に出力する。結合コマンド転送部４０は、バッファ管理部３４に保持された情報に基づいて生成された結合後の転送要求ＣＲａと、コマンド転送部５１からのコマンド転送要求ＣＲ２とを選択的にコマンドキュー４１に保持する。
【０１３３】
ライト調停部２８Ａ内に設けられたライトデータ選択部２８Ｃは、コマンド転送要求ＣＲ１に対応するデータＤＡ及びデータイネーブルＥＮをバッファ部３７に出力する。これらデータＤＡ及びデータイネーブルＥＮは、上記実施形態と同様に、バッファ部３７内において結合される。そして、結合後のデータＤＡａ及びデータイネーブルＥＮａは、バッファ部３７からデータ選択回路５３に出力される。一方、ライトデータ選択部２８Ｃは、コマンド転送要求ＣＲ２に対応するデータＤＡ２及びデータイネーブルＥＮ２を、バッファ部３７を介さずにデータ選択回路５３に直接出力する。
【０１３４】
結合コマンド転送部４０は、バッファ管理部３４及びコマンドキュー５２の状態に基づいて、選択信号ＳＳを生成し、その選択信号ＳＳをデータ選択回路５３に出力する。データ選択回路５３は、選択信号ＳＳに基づいて、結合後のデータＤＡａ及びデータイネーブルＥＮａと、データＤＡ２及びデータイネーブルＥＮ２との何れか一方を選択し、選択したデータ及びデータイネーブルをデータＤＡｂ及びデータイネーブルＥＮｂとしてメモリＩ／Ｆ２９に出力する。
【０１３５】
本変形例の構成によれば、例えば、結合後のデータＤＡ等が生成できていない期間に、コマンド転送部３１によるバッファ部３７へのデータ転送処理と並行して、非結合のデータＤＡ２及びデータイネーブルＥＮ２をメモリＩ／Ｆ２９を介してメモリ１４に転送することができる。
【０１３６】
なお、本変形例において、コマンド転送部３１は第１コマンド転送部の一例、コマンド転送部５１は第２コマンド転送部の一例、コマンドキュー５２は第３コマンドキューの一例である。
【０１３７】
・上記実施形態におけるコマンドキュー３２，４１、応答キュー３３，４２、保持部３５及びバッファ部３７（データ保持部３８及びデータイネーブル保持部３９）のライン数は特に限定されない。なお、これらコマンドキュー３２，４１、応答キュー３３，４２、保持部３５及びバッファ部３７（データ保持部３８及びデータイネーブル保持部３９）のライン数は、シミュレーション等によって予め最適化した数に設定することが好ましい。
【符号の説明】
【０１３８】
１０  撮像装置
１２  画像処理装置
１４  メモリ
２１  センサＩ／Ｆ
２２  色処理部
２３  補正部
２４  リサイズ部
２５  圧縮伸長部
２６  メモリカードＩ／Ｆ
２８Ａ  ライト調停部
２９  メモリＩ／Ｆ
３０  データ結合部
３１  コマンド転送部
３２  コマンドキュー
３３  応答キュー
３４  バッファ管理部
３５  保持部
３６  番号付与部
３７  バッファ部
３８  データ保持部
３９  データイネーブル保持部
４０  結合コマンド転送部
４１  コマンドキュー
４２  応答キュー
５０  コマンド選択回路
５１  コマンド転送部
５２  コマンドキュー
５３  データ選択回路
ＡＤ  アドレス
ＡＤｄ  結合後アドレス
ＡＤｓ  結合開始アドレス
ＣＲ  コマンド転送要求
ＣＲａ  結合後のコマンド転送要求
ＤＡ  データ
ＥＮ  データイネーブル
ＤＡａ  結合後のデータ
ＥＮａ  結合後のデータイネーブル
Ｌｆ，Ｌｇ  ラインバッファ
Ｌｃ  ラインバッファ
ＮＢ，ＮＢａ〜ＮＢｅ  バスマスタ番号
ＮＴ，ＮＴａ〜ＮＴｅ  トランザクション番号
ＮＬ，ＮＬｃ，ＮＬｎ  ライン番号
Ｓｄ  結合後サイズ
Ｓｉ，Ｓａ，Ｓｃ  サイズ
ＳＰ  結合可否信号
ＳＳ  選択信号
ＷＡ  ライトアドレス
ＷＣ１〜ＷＣ３  ライト完了通知
【図１】
0006387711.tif 000002
【図２】
0006387711.tif 000003
【図３】
0006387711.tif 000004
【図４】
0006387711.tif 000005
【図５】
0006387711.tif 000006
【図６】
0006387711.tif 000007
【図７】
0006387711.tif 000008
【図８】
0006387711.tif 000009
【図９】
0006387711.tif 000010
【図１０】
0006387711.tif 000011
【図１１】
0006387711.tif 000012
【図１２】
0006387711.tif 000013
【図１３】
0006387711.tif 000014
【図１４】
0006387711.tif 000015
【図１５】
0006387711.tif 000016
【図１６】
0006387711.tif 000017
【図１７】
0006387711.tif 000018
【図１８】
0006387711.tif 000019
【図１９】
0006387711.tif 000020
【図２０】
0006387711.tif 000021
【図２１】
0006387711.tif 000022
【図２２】
0006387711.tif 000023
【図２３】
0006387711.tif 000024
【図２４】
0006387711.tif 000025
【図２５】
0006387711.tif 000026
【図２６】
0006387711.tif 000027
【図２７】
0006387711.tif 000028
【図２８】
0006387711.tif 000029
【図２９】
0006387711.tif 000030
【図３０】
0006387711.tif 000031