(57)【要約】【課題】データ量にかかわらず効率よくデータ転送できること。【解決手段】データ転送装置１００は、ＣＰＵ１０１と、メモリ１０２と、ＤＭＡによりデータを転送する受信の転送制御部１０３とを有する。受信の転送制御部１０３は、装置外部からの受信順にデータをメモリ１０２を介してＣＰＵ１０１に転送する。また、転送制御部１０３は、受信したデータのデータ量が所定の閾値未満の複数のデータを一つのディスクリプタにまとめてＣＰＵ１０１に転送する。【選択図】図１
2018085039.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置において、
前記転送制御部は、前記データの入力順に前記メモリを介したＤＭＡにより転送し、
前記データのデータ量が所定の閾値未満の複数の前記データを一つのディスクリプタを用いて転送する、
ことを特徴とするデータ転送装置。
【請求項２】
ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置において、
前記転送制御部は、装置外部からの受信順に前記データを前記メモリを介して前記ＣＰＵに転送し、
前記データのデータ量が所定の閾値未満の複数の前記データを一つのディスクリプタを用いて転送する、
ことを特徴とするデータ転送装置。
【請求項３】
前記転送制御部は、
前記データを受信する受信部と、
受信した前記データのデータ量を所定の閾値を用いて解析する解析部と、
前記閾値以上の大きいデータ量の前記データを一つのディスクリプタを用いてＤＭＡ転送し、前記閾値未満の小さいデータ量の複数の前記データを一つのディスクリプタにまとめてＤＭＡ転送するＤＭＡコントローラと、
を有することを特徴とする請求項２に記載のデータ転送装置。
【請求項４】
前記転送制御部は、
前記データを受信する受信部と、
受信した前記データのデータ量を所定の閾値を用いて解析する解析部と、
前記解析結果に基づき、前記受信部が受信した前記データの方路を切り替える選択部と、
前記選択部の切替先に設けられるＤＭＡコントローラと、
前記ＤＭＡコントローラ内の前記切り替え先の一方に設けられ、前記閾値以上の大きいデータ量の前記データを保持する第１のバッファと、
前記ＤＭＡコントローラ内の前記切替先の他方に設けられ、前記閾値未満の小さいデータ量の複数の前記データを一つのディスクリプタにまとめて保持する第２のバッファと、を有し、
前記選択部は、前記データのデータ量が前記閾値以上であれば当該データを前記第１のバッファ側の出力に切り替え、連続して受信した前記データの各データ量がいずれも前記閾値未満であれば当該複数のデータを前記第２のバッファ側の出力に切り替えることを特徴とする請求項２に記載のデータ転送装置。
【請求項５】
前記データ量は、受信した前記データのヘッダーに設定され、
前記解析部は、前記閾値に基づき、受信した前記データのデータ量を解析することを特徴とする請求項３または４に記載のデータ転送装置。
【請求項６】
前記データ量が前記閾値未満である場合の当該小さいデータ量の前記データを連続して受信した場合の連続受信回数の閾値を設定する設定部を有し、
前記選択部は、連続して受信した前記データの各データ量がいずれも前記閾値未満であり、かつ前記連続受信回数で制限した複数の前記データを前記第２のバッファ側に出力する、
ことを特徴とする請求項４または５に記載のデータ転送装置。
【請求項７】
前記ＤＭＡコントローラが有する前記第１および第２のバッファの使用量を監視し、一方のバッファ使用量が増大した場合、前記データを他方のバッファ側に切り替えるよう前記選択部に要求を行うバッファ量監視部を有する、
ことを特徴とする請求項４〜６のいずれか一つに記載のデータ転送装置。
【請求項８】
ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置において、
前記ＣＰＵは、装置外部への送信順に前記データを前記メモリを介してＤＭＡにより前記転送制御部に転送し、
前記データのデータ量が所定の閾値未満の複数の前記データを一つのディスクリプタを用いて前記転送制御部に転送する、
ことを特徴とするデータ転送装置。
【請求項９】
ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置のデータ転送方法において、
前記データの入力順に前記メモリを介したＤＭＡにより転送し、
前記データのデータ量が所定の閾値未満の場合、一つのディスクリプタを用いて転送する、
ことを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送を制御するデータ転送装置およびデータ転送方法に関する。
【背景技術】
【０００２】
データ転送装置は、外部装置と装置内部のデバイスとの間でのデータ転送を制御する。データ転送装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＤＩＭＭ（Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）等のメモリと、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）等を含む。
【０００３】
外部装置に対するデータ送信時には、ＣＰＵがメモリへディスクリプタと送信データを転送する。ＣＰＵは、送信ＤＭＡＣを起動した後、メモリ内のディスクリプタ領域よりディスクリプタをフェッチし、メモリ内のデータバッファからＤＭＡＣのデータバッファへ送信データを転送する。この後、所定の送信タイミングでＤＭＡＣのデータバッファから外部装置へデータを送信する。
【０００４】
外部装置からのデータ受信時には、ＣＰＵが受信ＤＭＡＣを起動した後、メモリ内のディスクリプタ領域よりディスクリプタをフェッチする。そして、ＣＰＵは、外部装置からのデータ受信後、受信データを受信ＤＭＡＣのデータバッファからメモリ内データバッファへ転送し、ＣＰＵがメモリ内のデータバッファから受信データを刈り取る。
【０００５】
従来、データ転送に関し、メモリ領域にパケットデータの優先クラスに応じたバンク割り当てを行いスケジューラによる読み出し制御を行う技術がある（例えば、下記特許文献１参照。）。また、データバス幅より小さいデータをキャッシュを介して利用することで、バス幅相当のデータとして読み出す技術がある（例えば、下記特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−０７７４０１号公報
【特許文献２】特開２００５−３３９３４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記従来の技術では、転送するデータとディスクリプタを１対１のセットとして扱っており、データ転送の都度、ＣＰＵによるディスクリプタ制御を実行し、ＣＰＵとメモリとデバイス間でディスクリプタ（ディスクリプト・データ）の転送を行うことになる。このため、例えば、データ量の小さいデータを連続転送する場合には、転送するデータよりもディスクリプタのデータ量の方が大きくなることがあり、この場合、ＣＰＵのディスクリプタ制御の負荷が増加し、また、転送バス帯域への負荷が増加する。さらには、ＤＭＡＣ転送以外の周辺デバイス間のデータ転送や、他デバイスのＣＰＵ割り込み制御等にも影響を与える可能性が生じる。
【０００８】
一つの側面では、本発明は、データ量にかかわらず効率よくデータ転送できることを目的とする。
【課題を解決するための手段】
【０００９】
一つの案では、ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置において、前記転送制御部は、前記データの入力順に前記メモリを介したＤＭＡにより転送し、前記データのデータ量が所定の閾値未満の複数の前記データを一つのディスクリプタを用いて転送する、ことを要件とする。
【発明の効果】
【００１０】
一つの実施形態によれば、データ量にかかわらず効率よくデータ転送できるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施の形態にかかるデータ転送装置の受信側の構成例を示すブロック図である。
【図２Ａ】図２Ａは、実施の形態にかかるデータ転送装置の送信側の構成例を示すブロック図である。
【図２Ｂ】図２Ｂは、実施の形態にかかるデータ転送装置の送信側のＣＰＵの内部機能を示すブロック図である。
【図２Ｃ】図２Ｃは、実施の形態にかかるデータ転送装置の送信側における送信データ量に対応したデータ転送を説明する図である。(その１)
【図２Ｄ】図２Ｄは、実施の形態にかかるデータ転送装置の送信側における送信データ量に対応したデータ転送を説明する図である。(その２)
【図３】図３は、受信データの転送に用いるディスクリプタの構成例を示す図表である。
【図４】図４は、送信データの転送に用いるディスクリプタの構成例を示す図である。
【図５】図５は、データ受信時のディスクリプタを用いた転送処理内容を示すフローチャートである。
【図６】図６は、データ送信時のディスクリプタを用いた転送処理内容を示すフローチャートである。
【図７Ａ】図７Ａは、大データ受信時の転送処理の手順を示すタイミングチャートである。（その１）
【図７Ｂ】図７Ｂは、大データ受信時の転送処理の手順を示すタイミングチャートである。（その２）
【図７Ｃ】図７Ｃは、大データ受信時の転送処理の手順を示すタイミングチャートである。（その３）
【図７Ｄ】図７Ｄは、大データ受信時の転送処理の手順を示すタイミングチャートである。（その４）
【図８】図８は、小データ受信時の転送処理の手順を示すタイミングチャートである。
【図９Ａ】図９Ａは、大小データ受信時の転送処理の手順を示すタイミングチャートである。（その１）
【図９Ｂ】図９Ｂは、大小データ受信時の転送処理の手順を示すタイミングチャートである。（その２）
【図９Ｃ】図９Ｃは、大小データ受信時の転送処理の手順を示すタイミングチャートである。（その３）
【図９Ｄ】図９Ｄは、大小データ受信時の転送処理の手順を示すタイミングチャートである。（その４）
【図１０Ａ】図１０Ａは、送信データの転送処理の手順を示すタイミングチャートである。（その１）
【図１０Ｂ】図１０Ｂは、送信データの転送処理の手順を示すタイミングチャートである。（その２）
【図１１】図１１は、実施の形態にかかるデータ転送装置の受信側の他の構成例を示すブロック図である。
【発明を実施するための形態】
【００１２】
（実施の形態）
（受信データの転送にかかる構成例）
実施の形態では、受信データについて、小さいデータを複数まとめて一つのディスクリプタでＤＭＡ転送し、また、大きいデータは、既存（通常）通り一つのディスクリプタでＤＭＡ転送する。
【００１３】
図１は、実施の形態にかかるデータ転送装置の受信側の構成例を示すブロック図である。データ転送装置１００は、ＣＰＵ１０１と、メモリ１０２と、受信の転送制御部１０３と、デバイス１０４と、バス１０５と、を含む。受信の転送制御部１０３は、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）等で構成することができる。
【００１４】
ＣＰＵ１０１は、データ転送装置１００全体の制御を司る。ＣＰＵ１０１は、外部装置からＬＡＮ等の伝送路を介して受信データを受信したときには、受信の転送制御部１０３に対する制御を行い、受信の転送制御部１０３が受信した受信データをバス１０５を介してデバイス１０４に転送する制御を行う。この際、受信の転送制御部１０３は、ＤＭＡ転送により受信データをデバイス１０４に転送する。
【００１５】
メモリ１０２は、例えばＤＩＭＭ等を用いることができる。このメモリ１０２には、受信データのＤＭＡ転送に用いるディスクリプタ１０６の領域を有する。
【００１６】
メモリ１０２には、データ（受信データ）のデータバッファ（ＤａｔａＢｕｆｆ）１０７の領域を有する。受信のディスクリプタ１０６は、一般にＰＭＣ（Ｐａｔｔｅｒｎ  Ｍａｔｃｈ  Ｃｈｅｃｋ）と、ＲＥＣ（Ｒｅｃｅｉｖｅ）と、ＲＥＣＳＴ（ＲＥＣｉｅｖｅ  ＳＴａｔｕｓ）、を組みにして構成される。ＲＥＣが有するデータバッファ１０７に受信データを保持する。
【００１７】
データバッファ１０７は、受信した複数の小データをそれぞれ格納する複数のデータバッファ（ＤａｔａＢｕｆｆ１〜ｎ）１０７ａと、受信した大データを格納する一つのデータバッファ１０７ｂの領域を有している。
【００１８】
受信の転送制御部１０３は、受信データ制御部１１１と、ＤＭＡコントローラ（ＤＭＡＣ）１１２と、バスインタフェース（Ｂｕｓ−ＩＮＦ）１１４と、設定部１１５と、を含む。
【００１９】
ＤＭＡＣ１１２は、メモリ１０２から転送されたディスクリプタ１０６を保持するディスクリプタ１１６の領域と、小データ用のデータバッファ１１７ａ、大データ用のデータバッファ１１７ｂの領域を有する。
【００２０】
受信データ制御部１１１は、受信部１２１（外部インタフェース：ＩＮＦ）と、受信データの転送方路を選択する転送方路選択部１２２と、受信データのヘッダーを解析するヘッダー解析部１２３と、バッファ（Ｂｕｆｆ）量監視部１２４と、を含む。
【００２１】
受信部１２１は、外部機器からの受信データを終端処理し、転送方路選択部１２２とヘッダー解析部１２３に出力する。ヘッダー解析部１２３は、終端した受信データのヘッダー解析を行い受信データのデータ量を判別する。
【００２２】
転送方路選択部１２２は、ヘッダー解析部１２３が判別した受信データのデータ量に基づき、ＤＭＡＣ１１２のデータバッファ１１７ａ，１１７ｂのいずれかを選択し、選択側に受信データを転送する。図示の例では、データバッファ１１７ｂ側は、データ量が大きいデータを一つのディスクリプタでＤＭＡ転送を行う（通常のディスクリプタを用いた制御）。また、データバッファ１１７ａ側は、データ量が小さいデータを、複数まとめて一つのディスクリプタでＤＭＡ転送する。
【００２３】
バッファ量監視部１２４は、ＤＭＡＣ１１２のデータバッファ１１７ａ，１１７ｂのバッファ量（データ格納量）を監視する。
【００２４】
設定部１１５は、データ転送装置１００に対する予めのレジスタ設定（ＲＥＧ設定）として、例えば、受信データのデータ量を判断するためのデータ量（例えば１０バイト）閾値や、データの連続受信回数（例えば、１０回）の閾値等が設定される。
【００２５】
転送方路選択部１２２は、受信データをＤＭＡＣ１１２のデータバッファ１１７ａあるいはデータバッファ１１７ｂに出力する方路を切り替える。転送方路選択部１２２は、ヘッダー解析部１２３の判別結果、設定部１１５で設定されたデータ量の閾値を超えた通常のデータ量（上記例では、１０バイト以上の大きなデータ量）のデータ（大データ）受信時には、データバッファ１１７ｂ側に受信データを転送する。一方、設定部１１５に設定されたデータ量の閾値に満たない小さなデータ量（１０バイト未満）のデータ（小データ）受信時には、データバッファ１１７ａ側に受信データを転送する。
【００２６】
そして、ＤＭＡＣ１１２は、受信データのデータ量が小さい複数の小データを一つのディスクリプタ１１６にまとめて転送する。この際、ＤＭＡＣ１１２は、受信した小データをデータバッファ１１７ａの各領域にまとめる。なお、ＤＭＡＣ１１２に記載したデータバッファ１１７ａは、便宜上１個だけ記載してあり、メモリ１０２に配置したデータバッファ１０７ａと同じ構造で複数の小データをそれぞれ保持する複数ｎ個からなる。バスインタフェース１１４は、バス１０５との間でデータ（受信データおよびディスクリプタ等）を送受信する。
【００２７】
また、バッファ量監視部１２４は、ＤＭＡＣ１１２のデータバッファ１１７ａ，１１７ｂのバッファの使用量を監視し、転送方路選択部１２２にバッファの使用量を出力する。これにより、一方のデータバッファ１１７ａがＦｕｌｌ（残量無し）に近づいたことを検出したとき、転送方路選択部１２２は、他方のデータバッファ１１７ｂに方路を切り替える。同様に、他方のデータバッファ１１７ｂがＦｕｌｌに近づいたことを検出したとき、転送方路選択部１２２は、一方のデータバッファ１１７ａに方路を切り替える。これにより、受信データの廃棄を回避する。
【００２８】
このように、受信の転送制御部１０３は、受信データのデータ量と、ＤＭＡＣ１１２のデータバッファ量を判断することにより、受信データの転送方路が最適となる側を選択する。
【００２９】
図１を用いて、データ転送装置１００内での受信データの転送処理の概要を説明する。ＣＰＵ１０１は、受信データのデータ量について大小の閾値、受信データの連続受信回数のレジスタ設定を設定部１１５に行っておく（図中ａの経路）。
【００３０】
この後、ＣＰＵ１０１は、メモリ１０２へ受信ディスクリプタを転送する（図中ｂの経路）。
【００３１】
そして、受信データが小データの場合、ＤＭＡＣ１１２により複数の受信データを一つのディスクリプタ１１６のデータバッファ１１７ａのデータをまとめてメモリ１０２に転送する（図中ｃの経路）。この際、複数の受信データを合計したデータ量が一つのディスクリプタ１１６でデータバッファ１１７ａのサイズに収まるようにする。また、受信データの連続受信回数の閾値（１０回）に基づいて、一つのディスクリプタ１１６あたり、まとめる小データのデータ個数を制限する。その後、ＣＰＵ１０１は、メモリ１０２上のデータを刈り取る。
【００３２】
また、受信データが大データの場合、ＤＭＡＣ１１２により、一つのディスクリプタ１１６でデータバッファ１１７ｂの受信データをメモリ１０２に転送する（図中ｄの経路）。その後、ＣＰＵ１０１は、メモリ１０２上のデータを刈り取る。
【００３３】
上記小データ（経路ｃ）の転送と、大データ（経路ｄ）の転送の動作は、排他動作であり、同時実行されない（詳細は図５を用いて後述する）。
【００３４】
（送信データの転送にかかる構成例）
図２Ａは、実施の形態にかかるデータ転送装置の送信側の構成例を示すブロック図である。図２Ａに示すデータ転送装置１００において、ＣＰＵ１０１、メモリ１０２、デバイス１０４、バス１０５の各構成は、図１と同じ構成部である。送信側の構成としては、図２Ａに示す送信の転送制御部２０１が加えられることになる。
【００３５】
送信の転送制御部２０１についてもＦＰＧＡ等で構成することができる。送信の転送制御部２０１は、バスインタフェース（Ｂｕｓ−ＩＮＦ）２１１と、ＤＭＡコントローラ（ＤＭＡＣ）２１２と、送信部（外部インタフェース：ＩＮＦ）２１５と、を含む。
【００３６】
メモリ１０２には、ディスクリプタ２０６の領域を有する。送信のディスクリプタ２０６は、一般にＳＥＮＤのディスクリプタのみを有し、データ（送信データ）のデータバッファ（ＤａｔａＢｕｆｆ）２０７の領域を有する。データバッファ２０７は、小データを複数まとめて転送するためのｎ個（ＤａｔａＢｕｆｆ−１〜ｎ）が用意される。小データの転送時には、送信する複数のデータがそれぞれ異なるデータバッファ２０７に格納される。大データの転送時には、１個のデータバッファ（ＤａｔａＢｕｆｆ−１）２０７に格納される。
【００３７】
ＤＭＡＣ２１２は、メモリ１０２から転送されたディスクリプタ２０６を保持するディスクリプタ２１６の領域と、データバッファ２１７の領域を有する。送信部２１５は、ＤＭＡＣ２１２から出力された送信データを外部機器に対し送信する。
【００３８】
図２Ｂは、実施の形態にかかるデータ転送装置の送信側のＣＰＵの内部機能を示すブロック図である。図２Ａに示すＣＰＵ１０１内部の機能ブロックを示す。ＣＰＵ１０１は、送信データ量判断部２２１、設定部２２２、バッファ格納部２２３、送信ディスクリプタ付加部２２４、データ転送部２２５を含む。
【００３９】
送信データ量判断部２２１は、１回の送信データのデータ量を設定部２２２に設定してあるデータ量判定用の閾値（例えば、ｂｙｔｅ数）と比較し、閾値未満であれば小データ、閾値以上であれば大データと判断する。
【００４０】
バッファ格納部２２３は、送信データが小データであれば、メモリ１０２の複数のデータバッファ（ＤａｔａＢｕｆｆ１〜ｎ）２０７にこれら小データを格納する。また、送信データが大データであればメモリ１０２の一つのデータバッファ（ＤａｔａＢｕｆｆ−１）２０７にこの大データを格納する。
【００４１】
送信ディスクリプタ付加部２２４は、ＤＭＡ転送ごとのディスクリプタ２０６を付加する。小データについては、複数の小データで用いる複数のデータバッファ（ＤａｔａＢｕｆｆ−１〜ｎ）２０７あたり一つのディスクリプタ２０６を付加し、大データについては一つの大データで用いる一つのデータバッファ（ＤａｔａＢｕｆｆ−１）２０７あたり一つのディスクリプタ２０６を付加する。
【００４２】
データ転送部２２５は、ＣＰＵ１０１からメモリ１０２へのデータ転送およびメモリ１０２から転送制御部２０１へのデータ転送、をそれぞれ制御する。
【００４３】
ＣＰＵ１０１は、ＲＯＭ（不図示）等に格納されたプログラムを読み出して実行し、この際、ＲＡＭ（メモリ１０２）の一部を作業領域に用いることで、図２Ｂに記載の各機能を実現することができる。
【００４４】
次に、図２Ａを用いて、データ転送装置１００内での送信データの転送処理の概要を説明する。ＣＰＵ１０１は、デバイス１０４から外部に送信する送信データについて、送信データ量が小さい小データは、一つのディスクリプタ２０６にまとめて転送するために、送信する複数の小データとディスクリプタ２０６をメモリ１０２に転送する。また、ＣＰＵ１０１は、送信データ量が大きい大データについて、一つのディスクリプタ２０６と大データとをメモリ１０２に転送する（図２Ａ中ａの経路）。
【００４５】
この後、ＣＰＵ１０１は、メモリ１０２から転送制御部２０１へのデータ転送について、小データはまとめて転送するため、データバッファ（ＤａｔａＢｕｆｆ−１〜ｎ）２０７に格納されたデータを一つのディスクリプタ２０６でメモリ１０２からＤＭＡＣ２１２に転送させる。一方、大データは、データバッファ（ＤａｔａＢｕｆｆ−１）２０７に格納された大データを一つのディスクリプタ２０６を用い、メモリ１０２からＤＭＡＣ２１２に転送させる（図２Ａ中ｂの経路）。
【００４６】
上述したデータの送信側の構成については、ＣＰＵ１０１が送信するデータが小データであるか大データであるかを転送前に判断できるため、一つのディスクリプタ２０６を用いて、大データおよび小データをいずれも転送することができる。
【００４７】
図２Ｃ、図２Ｄは、実施の形態にかかるデータ転送装置の送信側における送信データ量に対応したデータ転送を説明する図である。図２Ｃには、送信データのデータ量が変化した場合のメモリ１０２上のデータ格納状態を示し、図２Ｄは、図２Ｃに対応した送信データの送信順序を示すシーケンス図である。
【００４８】
ＣＰＵ１０１は、１回の送信データごとにデータ量を判断して、１回の転送ごとにディスクリプタ２０６を付加する。ＣＰＵ１０１が処理するデータの送信順が送信データ１〜８まであったとする。ここで、送信データ１〜３，５〜７が閾値未満の小データであり、送信データ４，８が閾値以上の大データであったとする。
【００４９】
この場合、ＣＰＵ１０１は、送信データ１〜３までの小データをデータバッファ２０７にまとめて格納し（経路１ａ）、送信データ１〜３に一つのディスクリプタ２０６を付加してＤＭＡＣ２１２に転送する（経路１ｂ）。この後、ＣＰＵ１０１は、大データである送信データ４をデータバッファ２０７に格納し（経路２ａ）、送信データ４に一つのディスクリプタ２０６を付加してＤＭＡＣ２１２に転送する(経路２ｂ)。
【００５０】
この後、ＣＰＵ１０１は、送信データ５〜７までの小データをデータバッファ２０７にまとめて格納し（経路３ａ）、送信データ５〜７に一つのディスクリプタ２０６を付加してＤＭＡＣ２１２に転送する（経路３ｂ）。この後、ＣＰＵ１０１は、大データである送信データ８をデータバッファ２０７に格納し（経路４ａ）、送信データ８に一つのディスクリプタ２０６を付加してＤＭＡＣ２１２に転送する(経路４ｂ)。図２Ｃの例では、メモリ１０２上で時期ごとに異なる領域Ａ〜Ｄを用いる構成としているが、ある領域のデータをＤＭＡＣ２０２に転送するまでの間、異なる領域を使用することで領域数は増大しない。
【００５１】
図３は、受信データの転送に用いるディスクリプタの構成例を示す図表である。図３には、小データ用のディスクリプタ１０６ｂの構成例を示し、（ａ）はＰＭＣ３０１、（ｂ）はＲＥＣ＿ＣＯＮＴ（Ｃｏｎｔｉｎｕｅ）３０２、（ｃ）はＲＥＣＳＴ＿ＣＯＮＴ３０３の各内容である。それぞれ、ディスクリプタ領域（ディスクリプタ１０６）と、データバッファ領域（データバッファ１０７）とを有する。なお、大データ用のディスクリプタ１０６ａは、汎用のＰＭＣ、ＲＥＣ、ＲＥＣＳＴを用いて転送を行う。
【００５２】
（ａ）に示すＰＭＣ３０１は、汎用のＰＭＣと同様の構成である。ＰＭＣ３０１は、ＴａｓｋＣｏｄｅ「ＰＭＣ」、割り込み有無のＩＮＴ、チェーン有無のＣｈａｉｎ、転送先容量の空チェックのリトライ回数を示すＴｉｍｅと、リトライ間隔を示すＷａｉｔと、を含む。また、転送領域からチェック読み出しアドレスを示すＳｏｕｒｃｅ  Ｓｔａｒｔ  Ａｄｄｒｅｓｓ、比較データ＝ＡＬＬ’０’のＣｏｍｐａｒａｔｉｖｅ  Ｄａｔａ、ＲＥＣ＿ＣＯＮＴ３０２のディスクリプタ・アドレスを示すＮｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ａｄｄｒｅｓｓを含む。ＰＭＣ３０１ではデータバッファ領域に受信データを格納せず不使用（Ｄｏｎ’ｔ  ｃａｒｅ）とする。
【００５３】
（ｂ）に示すＲＥＣ＿ＣＯＮＴ３０２について、汎用のＲＥＣと同じ構成は、ＩＮＴ、Ｃｈａｉｎ、Ｎｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ａｄｄｒｅｓｓ、データバッファ領域（データバッファ１０７）である。データバッファ領域に受信データを保持する。
【００５４】
そして、ＰＭＣ３０１で新たに規定した部分は、ＴａｓｋＣｏｄｅに小データの連続受信時、ＲＥＣ＿ＣＯＮＴ３０２を示す所定のコードを割り当てる。また、汎用のＰＭＣでは不使用（Ｄｏｎ’ｔ  ｃａｒｅ）の領域に、連続転送する受信バイト数を設定するＳｉｚｅと、連続回数（連続受信回数）を指定するためのＣｏｕｎｔを設定する。Ｓｉｚｅは、設定ｂｙｔｅ数以下を対象とする設定値である。
【００５５】
（ｃ）に示すＲＥＣＳＴ＿ＣＯＮＴ３０３について、汎用のＲＥＣＳＴと同じ構成であるＴａｓｋＣｏｄｅ、ＩＮＴ、Ｃｈａｉｎ、転送領域塞がり書き込みアドレスを示すＤｅｓｔｉｎａｔｉｏｎ  Ａｄｄｒｅｓｓを含む。また、Ｎｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ａｄｄｒｅｓｓ、ＲＥＣ＿ＣＯＮＴ３０２のディスクリプタ・アドレスを示すＮｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ａｄｄｒｅｓｓ、バッファ状態を示すＢｕｆｆ  Ｓｔａｔｕｓを含む。
【００５６】
そして、ＲＥＣＳＴ＿ＣＯＮＴ３０３で新たに規定した部分は、ＴａｓｋＣｏｄｅに小データの連続受信時、ＲＥＣＳＴ＿ＣＯＮＴ３０３を示す所定コードを割り当てる。また、データバッファ領域（データバッファ１０７）に、受信データ回数を示すＣｏｕｎｔと、受信データ（ｎ回目）の受信バイト数を示すＳｉｚｅ（ｎ）を設定する。図示の例では、Ｓｉｚｅを４個としたが、受信データの個数ｎが多い場合、データバッファ領域内でＳｉｚｅの各領域の個数を拡張して対応する。
【００５７】
図４は、送信データの転送に用いるディスクリプタの構成例を示す図である。送信用のディスクリプタであるＳＥＮＤ＿Ｃｏｎｔｉｎｕｅ４０１について、汎用のＳＥＮＤと同じく、割り込み有無のＩＮＴ、チェーン有無のＣｈａｉｎ、送信するデータ（ソースデータ）の開始アドレスを示すＳｏｕｒｃｅ  Ｓｔａｒｔ  Ａｄｄｒｅｓｓを含む。また、比較データ＝ＡＬＬ’０’のＣｏｍｐａｒａｔｉｖｅ  Ｄａｔａ、ＳＥＮＤ＿Ｃｏｎｔｉｎｕｅ４０１のディスクリプタ・アドレスを示すＮｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ａｄｄｒｅｓｓを有する。また、送信データはＳｏｕｒｃｅ  Ｄａｔａに格納される。
【００５８】
そして、ＳＥＮＤ＿Ｃｏｎｔｉｎｕｅ４０１で新たに規定した部分は、ＴａｓｋＣｏｄｅに対し、連続送信時はＳＥＮＤ＿Ｃｏｎｔｉｎｕｅ４０１を示す所定のコードを割り当てる。また、汎用のＳＥＮＤのＳｉｚｅの領域には、送信データ回数を指定するＣｏｕｎｔを割り当てる。また、ＳＥＮＤでは不使用（Ｄｏｎ’ｔ  ｃａｒｅ）の領域に送信データ（ｎ回目）の送信バイト数を示すＳｉｚｅ（ｎ）を設定する。図示の例では、Ｓｉｚｅを４個としたが、送信データの個数ｎが多い場合、データバッファ領域内でＳｉｚｅの各領域の個数を拡張して対応する。
【００５９】
図５は、データ受信時のディスクリプタを用いた転送処理内容を示すフローチャートである。受信データの転送時のＣＰＵ１０１およびＤＭＡＣ１１２が行う処理内容を示す。
【００６０】
はじめに、ＣＰＵ１０１は、メモリ１０２にディスクリプタ（ＰＭＣ３０１、ＲＥＣ＿ＣＯＮＴ３０２、ＲＥＣＳＴ＿ＣＯＮＴ３０３）をセットする（ステップＳ５０１）。つぎに、ＣＰＵ１０１は、ＤＭＡＣ１１２のスタートアドレスをセットし、ＤＭＡ起動レジスタをＯＮ（セット）する（ステップＳ５０２）。
【００６１】
これにより、ＤＭＡＣ１１２がメモリ１０２よりＰＭＣ３０１のディスクリプタをフェッチする（ステップＳ５０３）。また、ＤＭＡＣ１１２は、メモリ１０２上のバッファ塞がりをチェックする（ステップＳ５０４）。バッファがチェーンを有する場合、チェーンバッファの塞がりをチェックする。
【００６２】
つぎに、ＤＭＡＣ１１２は、メモリ１０２よりＲＥＣ＿ＣＯＮＴ３０２のディスクリプタをフェッチする（ステップＳ５０５）。次に、受信データのデータ量の大小を判断する（ステップＳ５０６）。受信データがデータ量の閾値を超える所定バイト数（１０バイト）以上の大データであれば（ステップＳ５０６：大データ）、以降、大データの転送の処理（ステップＳ５０７〜ステップＳ５１１）を行う。ステップＳ５０７では、大データを大データ用のバッファ１１７ｂへ格納する（動作Ｃ：ステップＳ５０７）。
【００６３】
そして、ＤＭＡＣ１１２は、メモリ１０２上に受信データをチェーン有で転送する（動作Ｄ：ステップＳ５０８）。つぎに、ＤＭＡＣ１１２は、メモリ１０２よりＲＥＣＳＴ＿ＣＯＮＴ３０３のディスクリプタをフェッチする（ステップＳ５０９）。
【００６４】
この後、ＤＭＡＣ１１２は、メモリ１０２上に転送バイト数とバッファ塞がりをチェーン有で転送し、転送完了後、ＤＭＡＣ１１２は、ＣＰＵ１０１に転送完了の割り込み通知を行う（ステップＳ５１０）。ここで、チェーン有の場合、ステップＳ５０３の処理に戻る。
【００６５】
この後、ＣＰＵ１０１は、メモリ１０２上のデータを刈り取り、バッファ塞がりをクリアする（ステップＳ５１１）。以上により１回の大データの転送処理を行う。
【００６６】
一方、ステップＳ５０６の判断により、受信データのデータ量が閾値の所定バイト数（１０バイト）未満の小データであれば（ステップＳ５０６：小データ）、以降、ＤＭＡＣ１１２は小データの転送の処理（ステップＳ５１２〜ステップＳ５１６）を行う。
【００６７】
小データの転送においては、受信データが閾値の所定バイト数未満の小データ、かつ連続受信回数未満を継続して受信している間は（ステップＳ５０６：小データ）、受信データを小データ用のバッファ１１７ａへ順次格納する（ステップＳ５１２）動作を繰り返し実行する（動作Ａの繰り返し）そして、ＤＭＡＣ１１２は、それまでにバッファ１１７ａに格納した小データをメモリ１０２に転送する（動作Ｂ：ステップＳ５１３）。
【００６８】
この後、ＤＭＡＣ１１２は、メモリ１０２よりＲＥＣＳＴ＿ＣＯＮＴ３０２のディスクリプタをフェッチする（ステップＳ５１４）。この後、ＤＭＡＣ１１２は、メモリ１０２に転送バイト数とバッファ塞がりをチェーン有で転送し、転送完了後、ＤＭＡＣ１１２は、ＣＰＵ１０１に転送完了の割り込み通知を行う（ステップＳ５１５）。ここで、チェーン有の場合、ステップＳ５０３の処理に戻る。
【００６９】
この後、ＣＰＵ１０１は、メモリ１０２上のデータを刈り取り、バッファ塞がりをクリアする（ステップＳ５１６）。以上により小データを一つのディスクリプタにまとめた転送処理を行う。
【００７０】
また、ステップＳ５１２の実行後、つぎに受信した受信データが所定バイト数以上の大データ、または所定回数（連続受信回数）以上の場合には、動作Ｃ（ステップＳ５０６：大データ）の判断により、大データを大データ用のバッファ１１７ｂに格納すると同時に、それまでにバッファ１１７ａに格納した小データをメモリ１０２に転送する（動作Ｂ：ステップＳ５１３）。その後、動作Ｃにて格納した大データを動作Ｄによりメモリ１０２に転送する。
【００７１】
図６は、データ送信時のディスクリプタを用いた転送処理内容を示すフローチャートである。送信データの転送時のＣＰＵ１０１およびＤＭＡＣ２１２が行う処理内容を示す。
【００７２】
はじめに、ＣＰＵ１０１は、メモリ１０２にＳＥＮＤ＿Ｃｏｎｔｉｎｕｅ４０１のディスクリプタと送信データをセットする（ステップＳ６０１）。ここでは、送信回数分のデータをセットする。つぎに、ＣＰＵ１０１は、ＤＭＡＣ２１２のスタートアドレスをセットし、ＤＭＡ起動レジスタをＯＮ（セット）する（ステップＳ６０２）。ＣＰＵ１０１は、１回の転送が完了する度に、ＤＭＡＣ２１２を起動させる。
【００７３】
これにより、ＤＭＡＣ２１２がメモリ１０２よりＳＥＮＤ＿Ｃｏｎｔｉｎｕｅ４０１のディスクリプタをフェッチする（ステップＳ６０３）。また、ＤＭＡＣ２１２は、メモリ１０２より送信データをチェーン無しで転送する（ステップＳ６０４）。ここでは、送信回数分のデータを転送する。
【００７４】
以降、ＣＰＵ１０１およびＤＭＡＣ２１２は、送信データごとにステップＳ６０１〜Ｓ６０４の処理を継続して実行する。
【００７５】
（受信データの転送処理の詳細（その１））
図７Ａ〜図７Ｄは、それぞれ大データ受信時の転送処理の手順を示すタイミングチャートである。データ転送装置１００の受信側の構成（図１参照）を用いて受信データの装置内での大データを一つのディスクリプタで受信する場合の転送の手順について順に説明する。この図７Ａ〜図７Ｄの処理は、既存のＤＭＡ転送の受信処理に相当する。以下、外部装置から３つの大データ（データ１〜３）を順に受信した例について説明する。なお、以下の説明では、実施の形態で用いたディスクリプタ名について、便宜上、ＲＥＣ＿ＣＯＮＴをＲＥＣと記載し、ＲＥＣＳＴ＿ＣＯＮＴをＲＥＣＳＴと記載してある。
【００７６】
図７Ａ〜図７Ｄの各図の横軸には、大データの受信にかかる受信部１２１、ＤＭＡＣ１１２、メモリ（ＤＩＭＭ）１０２、ＣＰＵ１０１を示している。なお、便宜上、受信部１２１の受信バッファは図１のＤＭＡＣ１１２のデータバッファ１１７を指すものとする。
【００７７】
データ受信にあたり、ＣＰＵ１０１は、メモリ１０２に対し、ディスクリプト・データを転送し（ステップＳ７０１）、メモリ１０２にディスクリプタ（ＰＭＣ，ＲＥＣ，ＲＥＣＳＴ）１０６の領域を確保する（ステップＳ７０２）。また、ＣＰＵ１０１は、ＤＭＡＣ１１２にディスクリプタ・アドレスを転送し（ステップＳ７０３）、ＤＭＡＣ１１２は、ＰＭＣのディスクリプタ・アドレスを保持する（ステップＳ７０４）。
【００７８】
この後、ＣＰＵ１０１は、ＤＭＡＣ１１２に起動コマンドを送信し（ステップＳ７０５）、ＤＭＡＣ１１２が起動する（ステップＳ７０６）。ＤＭＡＣ１１２は、メモリ１０２にディスクリプタ・アドレスを発行し（ステップＳ７０７）、ＰＭＣのディスクリプト・データフェッチを行い（ステップＳ７０８）、ＤＭＡＣ１１２はＰＭＣ（ディスクリプタ１１６）を保持する（ステップＳ７０９）。
【００７９】
つぎに、ＤＭＡＣ１１２は、ＰＭＣを実行し（ステップＳ７１０）、メモリ１０２の転送先領域の空チェックを確認する（ステップＳ７１１）。ＤＭＡＣ１１２は、メモリ１０２に空きがあるか判断し（ステップＳ７１２）、メモリ１０２に容量がなければ（ステップＳ７１２：Ｎｏ）、ステップＳ７１０のＰＭＣを再実行する。メモリ１０２に空きがあれば（ステップＳ７１２：Ｙｅｓ）、メモリ１０２にディスクリプタ・アドレスを発行し（ステップＳ７１３）、ＲＥＣのディスクリプト・データフェッチを行う（ステップＳ７１４）。そして、ＤＭＡＣ１１２はＲＥＣ（ディスクリプタ１１６）を保持する（ステップＳ７１５）。
【００８０】
つぎに、ＤＭＡＣ１１２は、ＲＥＣを実行し（ステップＳ７１６）、受信部１２１からの受信完了通知を待つ状態となる（ステップＳ７１７）。
【００８１】
受信部１２１が外部装置からデータ１を受信すると、受信部１２１は受信したデータ１を受信バッファ＃１（図１のデータバッファ１１７）に格納する（ステップＳ７１８）。そして、データ１を受信完了するまで（ステップＳ７１９：Ｎｏ）、受信したデータ１を継続して受信バッファに格納していく。そして、データ１を受信完了すると（ステップＳ７１９：Ｙｅｓ）、受信完了の通知をバイト数とともにＤＭＡＣ１１２に通知する（ステップＳ７２０）。
【００８２】
この後、ＤＭＡＣ１１２は、受信バッファ＃１に対し読み出しアドレスを発行する（ステップＳ７２１）。データ１は受信バッファ＃１に保持されており、受信バッファ＃１は、メモリ１０２にＤＭＡによりデータ１を転送することを繰り返す（ステップＳ７２２）。メモリ１０２は、データ１をデータバッファ１０７（ＲＥＣの受信バッファ＃１）に保持する（ステップＳ７２３）。
【００８３】
そして、データ１の転送が完了すると（ステップＳ７２４）、ＤＭＡＣ１１２は、メモリ１０２に対しディスクリプタ・アドレスを発行し（ステップＳ７２５）、ＲＥＣＳＴのディスクリプト・データフェッチを行う（ステップＳ７２６）。そして、ＤＭＡＣ１１２はＲＥＣＳＴ（ディスクリプタ１１６）を保持する（ステップＳ７２７）。
【００８４】
つぎに、ＤＭＡＣ１１２は、ＲＥＣＳＴを実行し（ステップＳ７２８）、メモリ１０２に転送バイトと転送領域塞がり書き込みの転送を行う（ステップＳ７２９）。また、ＤＭＡＣ１１２は、ＣＰＵ１０１にデータ１の受信完了の割り込み通知を行う（ステップＳ７３０）。
【００８５】
ＣＰＵ１０１は、データ１の割り込みを受信すると（ステップＳ７３１）、メモリ１０２に読み出しアドレスを発行し（ステップＳ７３２）、メモリ１０２からデータ１を刈り取る（ステップＳ７３３）ことを繰り返す。そして、ＣＰＵ１０１はデータ１の受信刈り取りを完了する（ステップＳ７３４）。
【００８６】
この後、データ２を受信した場合についてもデータ１と同様の転送処理を行う。データ２についてデータ１と同様の転送処理には同じ符号とし符号末尾にａを付してある。データ３を受信した場合についてもデータ１と同様の転送処理を行う。データ３についてデータ１と同様の転送処理には同じ符号とし符号末尾にｂを付してある。なお、受信部１２１は受信したデータ２を受信バッファ＃２（データバッファ１１７）に格納し、受信したデータ３を受信バッファ＃１に格納する状態を示している。
【００８７】
データ３については、データ２のＤＭＡ転送中でありＣＰＵ１０１の刈り取り前に受信開始した状態であり、このデータ３のＤＭＡ転送は、データ２の刈り取り後に転送を行う。
【００８８】
上記処理のように、受信部１２１がいずれも大データをデータ１，２，３の順で受信した場合、既存のＤＭＡ転送により受信順で内部転送を行い、ＣＰＵ１０１は、受信順にしたがってデータ１，２，３の順で刈り取る。
【００８９】
（受信データの転送処理の詳細（その２））
図８は、小データ受信時の転送処理の手順を示すタイミングチャートである。データ転送装置１００の受信側の構成（図１参照）を用いて受信データの装置内での小データを一つのディスクリプタで受信する場合の転送の手順について順に説明する。
【００９０】
以下、例えば、図７Ａ〜図７Ｄに示した大データの受信後に、外部装置から小データ（データ量１０バイト未満）を連続受信回数未満の２つのデータ（データ１，２）を連続して受信した例について説明する。
【００９１】
図８の各図の横軸には、小データの受信にかかる受信部１２１、ＤＭＡＣ１１２、メモリ（ＤＩＭＭ）１０２、ＣＰＵ１０１を示している。なお、便宜上、受信部１２１の受信バッファは図１のＤＭＡＣ１１２のデータバッファ１１７ａを指すものとする。
【００９２】
受信部１２１が外部装置からデータ１を受信すると、受信部１２１は受信したデータ１を受信バッファ＃１（図１のデータバッファ１１７ａ）に格納する（ステップＳ８０１）。そして、データ１を受信完了するまで（ステップＳ８０２：Ｎｏ）、受信したデータ１を継続して受信バッファに格納していく。そして、データ１を受信完了すると（ステップＳ８０２：Ｙｅｓ）、受信完了の通知をバイト数とともにＤＭＡＣ１１２に通知する（ステップＳ８０３）。
【００９３】
続けて、受信部１２１が外部装置からデータ２を受信すると、受信部１２１は受信したデータ１を受信バッファ＃２（図１のデータバッファ１１７）に格納する（ステップＳ８０４）。そして、データ２を受信完了するまで（ステップＳ８０５：Ｎｏ）、受信したデータ２を継続して受信バッファに格納していく。そして、データ２を受信完了すると（ステップＳ８０５：Ｙｅｓ）、受信完了の通知をバイト数とともにＤＭＡＣ１１２に通知する（ステップＳ８０６）。
【００９４】
この後、ＤＭＡＣ１１２は、受信バッファ＃１に対し読み出しアドレスを発行する（ステップＳ８０７）。データ１は受信バッファ＃１に保持されており、受信バッファ＃１は、メモリ１０２にＤＭＡによりデータ１を転送することを繰り返す（ステップＳ８０８）。メモリ１０２は、データ１をデータバッファ１０７（受信バッファ＃１）に保持する（ステップＳ８０９）。
【００９５】
また、ＤＭＡＣ１１２は、受信バッファ＃２に対し読み出しアドレスを発行する（ステップＳ８１０）。データ２は受信バッファ＃２に保持されており、受信バッファ＃２は、メモリ１０２にＤＭＡによりデータ２を転送することを繰り返す（ステップＳ８１１）。メモリ１０２は、データ２をデータバッファ１０７（受信バッファ＃２）に保持する（ステップＳ８１２）。
【００９６】
そして、データ１，２の転送が完了すると（ステップＳ８１３）、ＤＭＡＣ１１２は、メモリ１０２に対しディスクリプタ・アドレスを発行し（ステップＳ８１４）、ＲＥＣＳＴのディスクリプト・データフェッチを行う（ステップＳ８１５）。そして、ＤＭＡＣ１１２はＲＥＣＳＴ（ディスクリプタ１１６）を保持する（ステップＳ８１６）。
【００９７】
つぎに、ＤＭＡＣ１１２は、ＲＥＣＳＴを実行し（ステップＳ８１７）、メモリ１０２に転送バイトと転送領域塞がり書き込みの転送を行う（ステップＳ８１８）。また、ＤＭＡＣ１１２は、ＣＰＵ１０１にデータ１，２の受信完了の割り込み通知を行う（ステップＳ８１９）。
【００９８】
ＣＰＵ１０１は、データ１，２の割り込みを受信すると（ステップＳ８２０）、メモリ１０２に読み出しアドレスを発行し（ステップＳ８２１）、メモリ１０２からデータ１を刈り取る（ステップＳ８２２）ことを繰り返す。そして、ＣＰＵ１０１はデータ１の受信刈り取りを完了する（ステップＳ８２３）。
【００９９】
この後、データ２についても、データ１と同様に、メモリ１０２に読み出しアドレスを発行し（ステップＳ８２４）、メモリ１０２からデータ２を刈り取る（ステップＳ８２５）ことを繰り返す。そして、ＣＰＵ１０１はデータ２の受信刈り取りを完了する（ステップＳ８２６）。
【０１００】
以上の転送処理により、２つの小データであるデータ１、データ２は、一つのディスクリプタ（ＰＭＣ，ＲＥＣ，ＲＥＣＳＴ）を用いてＤＭＡ転送できる。
【０１０１】
（受信データの転送処理の詳細（その３））
図９Ａ〜図９Ｄは、それぞれ大小データ受信時の転送処理の手順を示すタイミングチャートである。データ転送装置１００の受信側の構成（図１参照）を用いて受信データの装置内での複数の小データを一つのディスクリプタにまとめ、大データについても一つのディスクリプタを用いる場合の転送の手順について順に説明する。
【０１０２】
以下、外部装置から２つの小データ（データ１，２）を連続受信し、その後、大データを受信した例について説明する。
【０１０３】
図９の各図の横軸には、大データの受信にかかる受信部１２１、ＤＭＡＣ１１２メモリ（ＤＩＭＭ）１０２、ＣＰＵ１０１を示している。なお、便宜上、ＤＭＡＣ１１２は便宜上１か所にまとめてある。また、受信部１２１の受信バッファは図１のＤＭＡＣ１１２のデータバッファ１１７を指すものとする。
【０１０４】
図９のステップＳ９０１〜ステップＳ９１７の処理は、図７ＡのステップＳ７０１〜ステップＳ７１７の処理と同じである。データ受信にあたり、ＣＰＵ１０１は、メモリ１０２に対し、ディスクリプト・データを転送し（ステップＳ９０１）、メモリ１０２にディスクリプタ（ＰＭＣ，ＲＥＣ，ＲＥＣＳＴ）１０６の領域を確保する（ステップＳ９０２）。また、ＣＰＵ１０１は、ＤＭＡＣ１１２にディスクリプタ・アドレスを転送し（ステップＳ９０３）、ＤＭＡＣ１１２は、ＰＭＣのディスクリプタ・アドレスを保持する（ステップＳ９０４）。
【０１０５】
この後、ＣＰＵ１０１は、ＤＭＡＣ１１２に起動コマンドを送信し（ステップＳ９０５）、ＤＭＡＣ１１２が起動する（ステップＳ９０６）。ＤＭＡＣ１１２は、メモリ１０２にディスクリプタ・アドレスを発行し（ステップＳ９０７）、ＰＭＣのディスクリプト・データフェッチを行う（ステップＳ９０８）。ＤＭＡＣ１１２はＰＭＣ（ディスクリプタ１１６）を保持する（ステップＳ９０９）。
【０１０６】
つぎに、ＤＭＡＣ１１２は、ＰＭＣを実行し（ステップＳ９１０）、メモリ１０２の転送先領域の空チェックを確認する（ステップＳ９１１）。ＤＭＡＣ１１２は、メモリ１０２に空きがあるか判断し（ステップＳ９１２）、メモリ１０２に容量がなければ（ステップＳ９１２：Ｎｏ）、ステップＳ９１０のＰＭＣを再実行する。メモリ１０２に空きがあれば（ステップＳ９１２：Ｙｅｓ）、メモリ１０２にディスクリプタ・アドレスを発行し（ステップＳ９１３）、ＲＥＣのディスクリプト・データフェッチを行う（ステップＳ９１４）。そして、ＤＭＡＣ１１２はＲＥＣ（ディスクリプタ１１６）を保持する（ステップＳ９１５）。
【０１０７】
つぎに、ＤＭＡＣ１１２は、ＲＥＣを実行し（ステップＳ９１６）、受信部１２１からの受信完了通知を待つ状態となる（ステップＳ９１７）。
【０１０８】
そして、受信部１２１が外部装置からデータ１（小データ）を受信すると、受信部１２１は受信したデータ１を受信バッファ＃１（図１のデータバッファ１１７）に格納する（ステップＳ９１８）。そして、データ１を受信完了するまで（ステップＳ９１９：Ｎｏ）、受信したデータ１を継続して受信バッファに格納していく。そして、データ１を受信完了すると（ステップＳ９１９：Ｙｅｓ）、受信完了の通知をバイト数とともにＤＭＡＣ１１２に通知する（ステップＳ９２０）。
【０１０９】
続けて、受信部１２１が外部装置からデータ２（小データ）を受信すると、受信部１２１は受信したデータ２を受信バッファ＃２（図１のデータバッファ１１７）に格納する（ステップＳ９２１）。そして、データ２を受信完了するまで（ステップＳ９２２：Ｎｏ）、受信したデータ２を継続して受信バッファに格納していく。そして、データ２を受信完了すると（ステップＳ９２２：Ｙｅｓ）、受信完了の通知をバイト数とともにＤＭＡＣ１１２に通知する（ステップＳ９２３）。
【０１１０】
この後、ＤＭＡＣ１１２は、受信バッファ＃１に対し読み出しアドレスを発行する（ステップＳ９２４）。データ１は受信バッファ＃１に保持されており、受信バッファ＃１は、メモリ１０２にＤＭＡによりデータ１を転送することを繰り返す（ステップＳ９２５）。メモリ１０２は、データ１をデータバッファ１０７（受信バッファ＃１）に保持する（ステップＳ９２６）。
【０１１１】
また、ＤＭＡＣ１１２は、受信バッファ＃２に対し読み出しアドレスを発行する（ステップＳ９２７）。データ２は受信バッファ＃２に保持されており、受信バッファ＃２は、メモリ１０２にＤＭＡによりデータ２を転送することを繰り返す（ステップＳ９２８）。メモリ１０２は、データ２をデータバッファ１０７（受信バッファ＃２）に保持する（ステップＳ９２９）。
【０１１２】
そして、データ１，２の転送が完了すると（ステップＳ９３０）、ＤＭＡＣ１１２は、メモリ１０２に対しディスクリプタ・アドレスを発行し（ステップＳ９３１）、ＲＥＣＳＴのディスクリプト・データフェッチを行う（ステップＳ９３２）。そして、ＤＭＡＣ１１２はＲＥＣＳＴ（ディスクリプタ１１６）を保持する（ステップＳ９３３）。
【０１１３】
つぎに、ＤＭＡＣ１１２は、ＲＥＣＳＴを実行し（ステップＳ９３４）、メモリ１０２に転送バイトと転送領域塞がり書き込みの転送を行う（ステップＳ９３５）。また、ＤＭＡＣ１１２は、ＣＰＵ１０１にデータ１，２の受信完了の割り込み通知を行う（ステップＳ９３６）。
【０１１４】
ＣＰＵ１０１は、データ１，２の割り込みを受信すると（ステップＳ９３７）、メモリ１０２に読み出しアドレスを発行し（ステップＳ９３８）、メモリ１０２からデータ１を刈り取る（ステップＳ９３９）ことを繰り返す。そして、ＣＰＵ１０１はデータ１の受信刈り取りを完了する（ステップＳ９４０）。
【０１１５】
この後、データ２についても、データ１と同様に、メモリ１０２に読み出しアドレスを発行し（ステップＳ９４１）、メモリ１０２からデータ２を刈り取る（ステップＳ９４２）ことを繰り返す。そして、ＣＰＵ１０１はデータ２の受信刈り取りを完了する（ステップＳ９４３）。
【０１１６】
ここまでの転送処理により、２つの小データであるデータ１とデータ２は、一つのディスクリプタ（ＰＭＣ，ＲＥＣ，ＲＥＣＳＴ）を用いてＤＭＡ転送できる。
【０１１７】
つぎに、受信部１２１が外部装置からデータ３（大データ）を受信すると、受信部１２１は受信したデータ３を受信バッファ＃１（図１のデータバッファ１１７）に格納する（ステップＳ９４５）。そして、データ３を受信完了するまで（ステップＳ９４６：Ｎｏ）、受信したデータ３を継続して受信バッファ＃１に格納していく。そして、データ３を受信完了すると（ステップＳ９４６：Ｙｅｓ）、受信完了の通知をバイト数とともにＤＭＡＣ１１２に通知する（ステップＳ９４７）。
【０１１８】
そして、ＤＭＡＣ１１２は、メモリ１０２にディスクリプタ・アドレスを発行し（ステップＳ９４８）、ＰＭＣのディスクリプト・データフェッチを行い（ステップＳ９４９）、ＤＭＡＣ１１２はＰＭＣ（ディスクリプタ１１６）を保持する（ステップＳ９５０）。
【０１１９】
つぎに、ＤＭＡＣ１１２は、ＰＭＣを実行し（ステップＳ９５１）、メモリ１０２の転送先領域の空チェックを確認する（ステップＳ９５２）。ＤＭＡＣ１１２は、メモリ１０２に空きがあるか判断し（ステップＳ９５３）、メモリ１０２に容量がなければ（ステップＳ９５３：Ｎｏ）、ステップＳ９５１のＰＭＣを再実行する。メモリ１０２に空きがあれば（ステップＳ９５３：Ｙｅｓ）、メモリ１０２にディスクリプタ・アドレスを発行し（ステップＳ９５４）、ＲＥＣのディスクリプト・データフェッチを行う（ステップＳ９５５）。そして、ＤＭＡＣ１１２はＲＥＣ（ディスクリプタ１１６）を保持する（ステップＳ９５６）。
【０１２０】
つぎに、ＤＭＡＣ１１２は、ＲＥＣを実行し（ステップＳ９５７）、受信部１２１からの受信完了通知を待つ状態となる（ステップＳ９５８）。
【０１２１】
そして、受信部１２１は、ステップＳ９４７にてＤＭＡＣ１１２に受信完了を通知済みであるため、ＤＭＡＣ１１２は、受信バッファ＃１に対し読み出しアドレスを発行する（ステップＳ９６０）。データ３は受信バッファ＃１に保持されており、受信バッファ＃１は、メモリ１０２にＤＭＡによりデータ３を転送することを繰り返す（ステップＳ９６１）。メモリ１０２は、データ３をデータバッファ１０７（ＲＥＣの受信バッファ＃１）に保持する（ステップＳ９６２）。
【０１２２】
そして、データ３の転送が完了すると（ステップＳ９６３）、ＤＭＡＣ１１２は、メモリ１０２に対しディスクリプタ・アドレスを発行し（ステップＳ９６４）、ＲＥＣＳＴのディスクリプト・データフェッチを行う（ステップＳ９６５）。そして、ＤＭＡＣ１１２はＲＥＣＳＴ（ディスクリプタ１１６）を保持する（ステップＳ９６６）。
【０１２３】
つぎに、ＤＭＡＣ１１２は、ＲＥＣＳＴを実行し（ステップＳ９６７）、メモリ１０２に転送バイトと転送領域塞がり書き込みの転送を行う（ステップＳ９６８）。また、ＤＭＡＣ１１２は、ＣＰＵ１０１にデータ３の受信完了の割り込み通知を行う（ステップＳ９６９）。
【０１２４】
ＣＰＵ１０１は、データ３の割り込みを受信すると（ステップＳ９７０）、メモリ１０２に読み出しアドレスを発行し（ステップＳ９７１）、メモリ１０２からデータ３を刈り取る（ステップＳ９７２）ことを繰り返す。そして、ＣＰＵ１０１はデータ１の受信刈り取りを完了する（ステップＳ９７３）。
【０１２５】
以上の処理によれば、受信部１２１が閾値のデータ量（１０バイト）未満の小データを連続受信回数の閾値未満で複数回（２回）受信した場合、小データ用のＤＭＡＣ１１２は、データ１，２受信後に、メモリ１０２への転送を実施する。そして、連続受信回数とデータ１，２の転送バイト数をＲＥＣＳＴのディスクリプタ実行により一つのディスクリプタにまとめてメモリ１０２に転送して、ＣＰＵ１０１がこれらデータ１、データ２を個別に刈り取る。この後、閾値のデータ量以上の大データであるデータ３を受信した場合は、大データ用のＤＭＡＣ１１２が一つのディスクリプタでデータ３を転送処理する。
【０１２６】
小データを一つのディスクリプタにまとめて転送することにより、ＣＰＵ１０１の処理負荷を低減でき、また、転送に用いるバス１０５の使用効率を向上できるようになる。
【０１２７】
（送信データの転送処理の詳細）
図１０Ａ，図１０Ｂは、それぞれ送信データの転送処理の手順を示すタイミングチャートである。図２Ａ，図２Ｂに示したデータ転送装置１００の送信側の構成を用いて送信データの装置内での転送の手順について順に説明する。
【０１２８】
以下の例では、外部装置に対し３つのデータ（データ１〜３）を順に送信し、データ１，２が小データであり、データ３が大データである例について説明する。
【０１２９】
図１０Ａ，図１０Ｂの各図の横軸には、データ送信にかかる送信部２１５、ＤＭＡＣ２１２、メモリ（ＤＩＭＭ）１０２、ＣＰＵ１０１を示している。なお、便宜上、送信部２１５の送信バッファは図２ＡのＤＭＡＣ２１２のデータバッファ２１７を指すものとする。
【０１３０】
データ転送装置１００内部のデバイス１０４から受信したデータ１（小データ）に対し、ＣＰＵ１０１が転送を開始すると（ステップＳ１００１）、ＣＰＵ１０１は、メモリ１０２にデータ１を転送する（ステップＳ１００２）。メモリ１０２は転送されたデータ１を送信バッファ（データバッファ２０７）に保持する（ステップＳ１００３）。
【０１３１】
データ１に続くデータ２（小データ）についても、ＣＰＵ１０１が転送を開始すると（ステップＳ１００４）、ＣＰＵ１０１は、メモリ１０２にデータ２を転送する（ステップＳ１００５）。メモリ１０２は転送されたデータ２を送信バッファ（データバッファ２０７）に保持する（ステップＳ１００６）。
【０１３２】
つぎに、ＣＰＵ１０１は、ＳＥＮＤのディスクリプト・データをメモリ１０２に転送し（ステップＳ１００７）、メモリ１０２はＳＥＮＤのディスクリプタ２０６を保持する（ステップＳ１００８）。また、ＣＰＵ１０１は、ＤＭＡＣ２１２に対し、ディスクリプタ・アドレスを転送し（ステップＳ１００９）、ＤＭＡＣ２１２は、ＳＥＮＤのディスクリプタ・アドレスを保持する（ステップＳ１０１０）。この後、ＣＰＵ１０１は、ＤＭＡＣ起動コマンドをＤＭＡＣ２１２に送信し（ステップＳ１０１１）、ＤＭＡＣ２１２が起動する（ステップＳ１０１２）。
【０１３３】
起動したＤＭＡＣ２１２は、メモリ１０２に対し、ディスクリプタ・アドレスを発行し（ステップＳ１０１３）、メモリ１０２はディスクリプト・データをフェッチしＤＭＡＣ１１２に転送する（ステップＳ１０１４）。ＤＭＡＣ１１２は、ＳＥＮＤのディスクリプタ２１６を保持する（ステップＳ１０１５）。
【０１３４】
そして、ＤＭＡＣ２１２は、メモリ１０２に対し読み出しアドレスを発行し（ステップＳ１０１６）、メモリ１０２が送信バッファ（データバッファ）２０７からデータ１を送信部２１５に転送する（ステップＳ１０１７）、ことを繰り返す。送信部２１５は、データ１を送信バッファ（データバッファ２１７）に保持する（ステップＳ１０１８）。
【０１３５】
そして、ＤＭＡＣ２１２は、データ１の転送が完了するのを待ち（ステップＳ１０１９：Ｎｏのループ）、データ１の転送が完了すると（ステップＳ１０１９：Ｙｅｓ）、転送完了の通知をバイト数とともに送信部２１５に通知する（ステップＳ１０２０）。これにより、送信部２１５は、データバッファ２１７のデータ１を外部装置に送信する（ステップＳ１０２１）。
【０１３６】
続いて、ＤＭＡＣ２１２は、メモリ１０２に対し読み出しアドレスを発行し（ステップＳ１０２２）、メモリ１０２が送信バッファ（データバッファ）２０７からデータ２を送信部２１５に転送する（ステップＳ１０２３）、ことを繰り返す。送信部２１５は、データ２を送信バッファ（データバッファ２１７）に保持する（ステップＳ１０２４）。
【０１３７】
そして、ＤＭＡＣ２１２は、データ２の転送が完了するのを待ち（ステップＳ１０２５：Ｎｏのループ）、データ２の転送が完了すると（ステップＳ１０２５：Ｙｅｓ）、転送完了の通知をバイト数とともに送信部２１５に通知する（ステップＳ１０２６）。これにより、送信部２１５は、データバッファ２１７のデータ２を外部装置に送信する（ステップＳ１０２７）。また、ＤＭＡＣ１１２は、ＣＰＵ１０１にデータ１，２転送完了の割り込み通知を行い（ステップＳ１０２８）、ＣＰＵ１０１はデータ１，２の転送完了を判断する（ステップＳ１０２９）。
【０１３８】
続いて、ＣＰＵ１０１は、データ３（大データ）の転送を開始し（ステップＳ１０３０）、メモリ１０２にデータ３を転送する（ステップＳ１０３１）。メモリ１０２は転送されたデータ３を送信バッファ（データバッファ２０７）に保持する（ステップＳ１０３２）。
【０１３９】
つぎに、ＣＰＵ１０１は、ＳＥＮＤのディスクリプト・データをメモリ１０２に転送し（ステップＳ１０３３）、メモリ１０２はＳＥＮＤのディスクリプタ２０６を保持する（ステップＳ１０３４）。また、ＣＰＵ１０１は、ＤＭＡＣ２１２に対し、ディスクリプタ・アドレスを転送し（ステップＳ１０３５）、ＤＭＡＣ２１２は、ＳＥＮＤのディスクリプタ・アドレスを保持する（ステップＳ１０３６）。この後、ＣＰＵ１０１は、ＤＭＡＣ起動コマンドをＤＭＡＣ２１２に送信し（ステップＳ１０３７）、ＤＭＡＣ２１２が起動する（ステップＳ１０３８）。
【０１４０】
起動したＤＭＡＣ２１２は、メモリ１０２に対し、ディスクリプタ・アドレスを発行し（ステップＳ１０３９）、メモリ１０２はディスクリプト・データをフェッチしＤＭＡＣ１１２に転送する（ステップＳ１０４０）。ＤＭＡＣ１１２は、ＳＥＮＤのディスクリプタ２１６を保持する（ステップＳ１０４１）。
【０１４１】
そして、ＤＭＡＣ２１２は、メモリ１０２に対し読み出しアドレスを発行し（ステップＳ１０４２）、メモリ１０２が送信バッファ（データバッファ）２０７からデータ３を送信部２１５に転送する（ステップＳ１０４３）、ことを繰り返す。送信部２１５は、データ３を送信バッファ（データバッファ２１７）に保持する（ステップＳ１０４４）。
【０１４２】
そして、ＤＭＡＣ２１２は、データ２の転送が完了するのを待ち（ステップＳ１０４５：Ｎｏのループ）、データ３の転送が完了すると（ステップＳ１０４５：Ｙｅｓ）、転送完了の通知をバイト数とともに送信部２１５に通知する（ステップＳ１０４６）。これにより、送信部２１５は、データバッファ２１７のデータ３を外部装置に送信する（ステップＳ１０４７）。また、ＤＭＡＣ１１２は、ＣＰＵ１０１にデータ３の転送完了の割り込み通知を行い（ステップＳ１０４８）、ＣＰＵ１０１はデータ３の転送完了を判断する（ステップＳ１０４９）。
【０１４３】
図１１は、実施の形態にかかるデータ転送装置の受信側の他の構成例を示すブロック図である。上述した実施の形態（図１）では、受信の転送制御部１０３は、ＤＭＡＣ１１２内に小データ用のデータバッファ１１７ａと、大データ用のデータバッファ１１７ｂとを設ける構成とした。これに限らず、図１１に示すように、受信の転送制御部１０３は、一つのＤＭＡＣ１１２内に一つのデータバッファ１１７を設けた構成とすることもできる。図１１の構成では、ＤＭＡＣ１１２が一つのディスクリプタ１１６とデータバッファ１１７とを有する。このため、受信データは受信部１２１を介して直接、ＤＭＡＣ１１２に出力され、図１に比して簡単な構成にできる。
【０１４４】
ＤＭＡＣ１１２は、連続して受信した複数の小データをまとめて一つのディスクリプタを用いた転送制御を行うとともに、受信した大きいデータについても既存の技術同様に、一つのディスクリプタを用いて転送制御する。この場合でも、図３に示した各ディスクリプタ（ＰＭＣ３０１，ＲＥＣ＿ＣＯＮＴ３０２，ＲＥＣＳＴ＿ＣＯＮＴ３０３）を用いて同様に転送制御できる。ＤＭＡＣ１１２のデータバッファ１１７は、メモリ１０２上のデータバッファ１０７に示した構造と同じとした複数ｎ個を有し、小データを異なる領域に格納すればよい。
【０１４５】
データの受信時には、図１１に示すように、ＣＰＵ１０１は、ディスクリプタ１０６内にデータ量の閾値と連続受信回数を設定してメモリ１０２にセットする（図中ａの経路）。そして、受信データが連続してデータ量の閾値未満の小データの場合には、ＤＭＡＣ１１２は、この小データをメモリ１０２上のｎ個のデータバッファ１０７へ転送する（図中ｂの経路）。その後、ＣＰＵ１０１がメモリ１０２上の小データを順次刈り取る。受信データがデータ量の閾値以上の大データの場合には、ＤＭＡＣ１１２は、既存の処理同様に、大データをメモリ１０２のデータバッファ１０７に転送し、その後、ＣＰＵ１０１がメモリ１０２上の大データを刈り取る。
【０１４６】
以上説明したように、実施の形態によれば、送受信する際の装置内部でのデータ転送について、データ量が少なければ複数の小データをまとめて一つのディスクリプタを用いて転送する。これにより、小データを連続して送受信する場合のディスクリプタの個数を減らすことができ、小データの転送のためのディスクリプタの転送回数を減らすことができ、ＣＰＵの負荷低減および転送時のバス帯域の圧迫を低減できるようになる。例えば、小データを２回連続して転送する場合、用いるディスクリプタの個数を２個から１個に半減できる。仮に、小データを５回連続して転送する場合には、ディスクリプタの個数を５個から１個にでき１／５に減らすことができ、転送処理の効率化を図ることができる。
【０１４７】
また、連続受信回数に閾値を設けることで、連続して受信した小データを一つのディスクリプタにまとめることができるようになる。仮に、無限に小データを連続受信した場合でも、小データの受信回数が閾値以上となったときまでの複数の小データを一つのディスクリプタにまとめて転送処理できるようになる。なお、データの送信側の構成については、ＣＰＵが送信するデータが小データであるか大データであるかを転送前に判断できるため、一つのディスクリプタを用いて、大データおよび小データをいずれも転送することができる。
【０１４８】
また、受信側の構成において、小データ転送用のＤＭＡＣと大データ転送用のＤＭＡＣの２つを設けた場合、一方のＤＭＡＣによる転送が増加し、転送を継続すると受信データの廃棄が生じる場合がある。これに対応してバッファ量監視部を設けることで、受信データの転送経路を切り替えることで受信データの破棄を回避できるようになる。
【０１４９】
なお、本実施の形態で説明したデータ転送方法は、あらかじめ用意された制御プログラムを対象機器（上記データ転送装置）等のコンピュータ（ＣＰＵ等）が実行することにより実現することができる。例えば、実施の形態で説明したＦＰＧＡの機能をＣＰＵが実行する構成とすることもできる。本制御プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１５０】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１５１】
（付記１）ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置において、
前記転送制御部は、前記データの入力順に前記メモリを介したＤＭＡにより転送し、
前記データのデータ量が所定の閾値未満の複数の前記データを一つのディスクリプタを用いて転送する、
ことを特徴とするデータ転送装置。
【０１５２】
（付記２）ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置において、
前記転送制御部は、装置外部からの受信順に前記データを前記メモリを介して前記ＣＰＵに転送し、
前記データのデータ量が所定の閾値未満の複数の前記データを一つのディスクリプタを用いて転送する、
ことを特徴とするデータ転送装置。
【０１５３】
（付記３）前記転送制御部は、
前記データを受信する受信部と、
受信した前記データのデータ量を所定の閾値を用いて解析する解析部と、
前記閾値以上の大きいデータ量の前記データを一つのディスクリプタを用いてＤＭＡ転送し、前記閾値未満の小さいデータ量の複数の前記データを一つのディスクリプタにまとめてＤＭＡ転送するＤＭＡコントローラと、
を有することを特徴とする付記２に記載のデータ転送装置。
【０１５４】
（付記４）前記転送制御部は、
前記データを受信する受信部と、
受信した前記データのデータ量を所定の閾値を用いて解析する解析部と、
前記解析結果に基づき、前記受信部が受信した前記データの方路を切り替える選択部と、
前記選択部の切替先に設けられるＤＭＡコントローラと、
前記ＤＭＡコントローラ内の前記切り替え先の一方に設けられ、前記閾値以上の大きいデータ量の前記データを保持する第１のバッファと、
前記ＤＭＡコントローラ内の前記切替先の他方に設けられ、前記閾値未満の小さいデータ量の複数の前記データを一つのディスクリプタにまとめて保持する第２のバッファと、を有し、
前記選択部は、前記データのデータ量が前記閾値以上であれば当該データを前記第１のバッファ側の出力に切り替え、連続して受信した前記データの各データ量がいずれも前記閾値未満であれば当該複数のデータを前記第２のバッファ側の出力に切り替えることを特徴とする付記２に記載のデータ転送装置。
【０１５５】
（付記５）前記データ量は、受信した前記データのヘッダーに設定され、
前記解析部は、前記閾値に基づき、受信した前記データのデータ量を解析することを特徴とする付記３または４に記載のデータ転送装置。
【０１５６】
（付記６）前記ＤＭＡコントローラは、連続して受信した前記データの各データ量がいずれも前記所定の閾値未満であり、かつ連続受信回数で制限した複数の前記データを一つのディスクリプタにまとめてＤＭＡ転送する、
ことを特徴とする付記３または５に記載のデータ転送装置。
【０１５７】
（付記７）前記データ量が前記閾値未満である場合の当該小さいデータ量の前記データを連続して受信した場合の連続受信回数の閾値を設定する設定部を有し、
前記選択部は、連続して受信した前記データの各データ量がいずれも前記閾値未満であり、かつ前記連続受信回数で制限した複数の前記データを前記第２のバッファ側に出力する、
ことを特徴とする付記４または５に記載のデータ転送装置。
【０１５８】
（付記８）前記ＤＭＡコントローラが有する前記第１および第２のバッファの使用量を監視し、一方のバッファ使用量が増大した場合、前記データを他方のバッファ側に切り替えるよう前記選択部に要求を行うバッファ量監視部を有する、
ことを特徴とする付記４、５、７のいずれか一つに記載のデータ転送装置。
【０１５９】
（付記９）ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置において、
前記ＣＰＵは、装置外部への送信順に前記データを前記メモリを介してＤＭＡにより前記転送制御部に転送し、
前記データのデータ量が所定の閾値未満の複数の前記データを一つのディスクリプタを用いて前記転送制御部に転送する、
ことを特徴とするデータ転送装置。
【０１６０】
（付記１０）ＣＰＵと、メモリと、ＤＭＡによりデータを転送する転送制御部とを有するデータ転送装置のデータ転送方法において、
前記データの入力順に前記メモリを介したＤＭＡにより転送し、
前記データのデータ量が所定の閾値未満の場合、一つのディスクリプタを用いて転送する、
ことを特徴とするデータ転送方法。
【符号の説明】
【０１６１】
１００  データ転送装置
１０１  ＣＰＵ
１０２  メモリ
１０３  転送制御部（受信）
１０４  デバイス
１０５  バス
１０６，１１６，２０６，２１６  ディスクリプタ
１０７，１１７，２１７  データバッファ
１１１  受信データ制御部
１１２，２１２  ＤＭＡコントローラ
１１４，２１１  バスインタフェース
１１５  設定部
１２１  受信部
１２２  転送方路選択部
１２３  ヘッダー解析部
１２４  バッファ量監視部
２０１  転送制御部（送信）
２１５  送信部
【図１】
2018085039.tif 000003
【図２Ａ】
2018085039.tif 000004
【図２Ｂ】
2018085039.tif 000005
【図２Ｃ】
2018085039.tif 000006
【図２Ｄ】
2018085039.tif 000007
【図３】
2018085039.tif 000008
【図４】
2018085039.tif 000009
【図５】
2018085039.tif 000010
【図６】
2018085039.tif 000011
【図７Ａ】
2018085039.tif 000012
【図７Ｂ】
2018085039.tif 000013
【図７Ｃ】
2018085039.tif 000014
【図７Ｄ】
2018085039.tif 000015
【図８】
2018085039.tif 000016
【図９Ａ】
2018085039.tif 000017
【図９Ｂ】
2018085039.tif 000018
【図９Ｃ】
2018085039.tif 000019
【図９Ｄ】
2018085039.tif 000020
【図１０Ａ】
2018085039.tif 000021
【図１０Ｂ】
2018085039.tif 000022
【図１１】
2018085039.tif 000023