(57)【要約】【課題】  ＤＭＡ転送中にチェックサムのための演算を行う場合であっても、高スループットを実現するための技術を提供すること。【解決手段】  レジスタと、データのＤＭＡ転送を行う転送器と、ＤＭＡ転送中にデータに対するチェックサムのための演算を行う演算器とを備える。演算の結果の格納先としてレジスタが指定された場合、演算器は、演算が完了すると、該演算の結果をレジスタに格納し、転送器は、ＤＭＡ転送が完了すると、演算器による演算の完了通知を待機することなく、ＤＭＡ転送の完了通知を行う。【選択図】  図１
2015207222.tif 000002
【特許請求の範囲】
【請求項１】
レジスタと、
データのＤＭＡ転送を行う転送器と、
前記ＤＭＡ転送中に前記データに対するチェックサムのための演算を行う演算器と
を備え、
前記演算の結果の格納先として前記レジスタが指定された場合、前記演算器は、前記演算が完了すると、該演算の結果を前記レジスタに格納し、
前記転送器は、前記ＤＭＡ転送が完了すると、前記演算器による演算の完了通知を待機することなく、前記ＤＭＡ転送の完了通知を行う
ことを特徴とする情報処理装置。
【請求項２】
前記演算の結果の格納先として前記レジスタが指定された場合、前記転送器は、前記ＤＭＡ転送が完了すると、前記演算器による演算の完了通知を待機することなく、前記ＤＭＡ転送の完了通知を行うことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記演算の結果の格納先として前記情報処理装置の外部に設けられたメモリが指定された場合、
前記演算器は、前記演算が完了すると、該演算の結果を前記転送器に送出し、
前記転送器は、前記ＤＭＡ転送が完了すると、前記演算器から受けた演算の結果を前記メモリに格納してから、前記ＤＭＡ転送の完了通知を行う
ことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
データの転送元のアドレス、データの転送先のアドレス、データの転送サイズ、及び前記演算の結果の格納先を示す情報を含むディスクリプタを取得する手段を更に有し、
前記ディスクリプタに含まれる情報に基づいて、前記レジスタ若しくは前記メモリへの格納が行われることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記レジスタは、前記情報処理装置の外部に設けられたプロセッサによりアクセス可能であることを特徴とする請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記転送器は、前記完了通知を示す情報を前記レジスタに格納し、該情報は前記プロセッサに通知されることを特徴とする請求項５に記載の情報処理装置。
【請求項７】
請求項１乃至６の何れか１項に記載の情報処理装置を有するシステムであって、
送信するデータに対する前記演算器による演算の結果、受信するデータに対する前記演算器による演算の結果、のそれぞれの格納先を、前記システムにおける送信の頻度、前記システムにおける受信の頻度、に応じて設定することを特徴とするシステム。
【請求項８】
レジスタと、
データのＤＭＡ転送を行う転送器と、
前記ＤＭＡ転送中に前記データに対するチェックサムのための演算を行う演算器と
を備える情報処理装置が行う情報処理方法であって、
前記演算の結果の格納先として前記レジスタが指定された場合、前記演算器は、前記演算が完了すると、該演算の結果を前記レジスタに格納し、
前記転送器は、前記ＤＭＡ転送が完了すると、前記演算器による演算の完了通知を待機することなく、前記ＤＭＡ転送の完了通知を行う
ことを特徴とする情報処理方法。
【請求項９】
レジスタと、
データのＤＭＡ転送を行う転送器と、
前記ＤＭＡ転送中に前記データに対するチェックサムのための演算を行う演算器と
を備えるコンピュータに読み込ませて実行させることで、
前記演算の結果の格納先として前記レジスタが指定された場合、前記演算器に、前記演算が完了すると、該演算の結果を前記レジスタに格納させ、
前記転送器に、前記ＤＭＡ転送が完了すると、前記演算器による演算の完了通知を待機することなく、前記ＤＭＡ転送の完了通知を行わせる
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理技術に関するもので、特に、プロセッサの処理負荷を軽減し、高スループットを実現するデータ処理技術に関するものである。
【背景技術】
【０００２】
従来の通信処理では、チェックサム演算のためにプロセッサに負荷がかかり、そのために通信のスループットが低下するという欠点があった。その解決策として、チェックサム演算をハードウェアで且つＤＭＡ（Ｄｉｒｅｃｔ Ｍｅｍｏｒｙ Ａｃｃｅｓｓ）転送中に行い、データ転送とチェックサム演算の処理を並列化させるといった工夫がなされてきた。
【０００３】
また、ＤＭＡ転送を実施するＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ Ａｃｃｅｓｓ Ｃｏｎｔｒｏｌｌｅｒ）にも以下のものがある。まず、ＣＰＵが、ＤＭＡＣが実施すべき転送コマンドについて記述された記述子を、ＤＭＡＣ外部に配置し、該記述子の配置アドレスをＤＭＡＣに対して通知する。以後、ＤＭＡＣが記述子を読み込み、記述子の解析を実行し、解析結果に従ったＤＭＡ転送が自動で実施されるといったものがある。
【０００４】
特許文献１には、記述子による制御に従い、ＤＭＡ転送を実施し、演算対象データに対する所定の演算をアクセラレートする演算回路に関する技術についての開示がある。詳細には、ＤＭＡ転送を複数の周期的処理に分けて実行し、併せて演算の途中経過をレジスタに書込む。さらに、特許文献１には、演算途中経過と次のＤＭＡ転送データとを入力して演算を継続し、演算処理結果を外部記憶装置に書き戻す技術について開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１２９６３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＤＭＡ転送を実行しながらチェックサム演算を実施するデータ処理装置が、１回のＤＭＡ転送毎に１つのチェックサム演算結果を得るとする。このチェックサム演算結果をＣＰＵが利用する際、以下のケースがある。すなわち、ＣＰＵにおける該ＤＭＡ転送／チェックサム演算の完了の検知、及びチェックサム演算結果の利用（安全な場所への退避）にかかる処理時間に比べ、ＤＭＡ転送が高速なケースである。このとき、連続してＤＭＡ転送を実施したい場合には、その連続実行回数の分だけチェックサム演算結果を格納する場所があることが望ましい。しかし、該演算結果を格納する場所をレジスタに持つ場合、連続実行回数に応じた実装コストがかかる。
【０００７】
また、演算結果の記録を行うに当たり、レジスタを用いずにデータ処理装置外部の、例えばメモリに記憶させる場合、レジスタを使用した場合よりも実装コストに優位性がある。しかし、メモリに、例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を使用した場合、以下の問題が発生する。すなわち、レジスタと比較した際に、演算結果の書込みアクセスにかかるオーバヘッドが大きい。このことは、ＣＰＵが演算結果の使用を開始できるタイミングが遅れるということに繋がる。
【０００８】
本発明はこのような問題に鑑みてなされたものであり、ＤＭＡ転送中にチェックサムのための演算を行う場合であっても、高スループットを実現するための技術を提供する。
【課題を解決するための手段】
【０００９】
本発明の一様態は、レジスタと、データのＤＭＡ転送を行う転送器と、前記ＤＭＡ転送中に前記データに対するチェックサムのための演算を行う演算器とを備え、前記演算の結果の格納先として前記レジスタが指定された場合、前記演算器は、前記演算が完了すると、該演算の結果を前記レジスタに格納し、前記転送器は、前記ＤＭＡ転送が完了すると、前記演算器による演算の完了通知を待機することなく、前記ＤＭＡ転送の完了通知を行うことを特徴とする。
【発明の効果】
【００１０】
本発明の構成によれば、ＤＭＡ転送中にチェックサムのための演算を行う場合であっても、高スループットを実現することができる。
【図面の簡単な説明】
【００１１】
【図１】システムの構成例を示すブロック図。
【図２】転送元用記述子のフォーマット及び転送先用記述子のフォーマットを示す図。
【図３】ＤＭＡ転送及びチェックサムのための演算について説明する図。
【図４】ＤＭＡ転送及びチェックサムのための演算について説明する図。
【図５】転送器１０２の構成例を示すブロック図。
【図６】図１のシステムにおける動作を説明する図。
【図７】図１のシステムにおける動作を説明する図。
【図８】転送器１０２が行う処理のフローチャート。
【図９】演算器１０３が行う処理のフローチャート。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の１つである。
【００１３】
［第１の実施形態］
先ず、本実施形態に係るデータ処理装置（情報処理装置）１０１及びその周辺機器から成るシステムの構成例について、図１のブロック図を用いて説明する。なお、図１に示した構成は、以下に説明する各処理を実現可能な構成の一例に過ぎず、以下に説明する各処理を実現可能な構成であれば、如何なる構成を採用しても構わない。
【００１４】
本実施形態に係るデータ処理装置１０１は、データのＤＭＡ転送を行うと共に、該ＤＭＡ転送中に該データに対するチェックサムのための演算を行う装置であり、転送器１０２、演算器１０３、レジスタ部１０４、を有する。転送器１０２は、データ処理装置１０１の外部に設けられているＣＰＵ１１４（プロセッサの一例）からの指示に応じてデータのＤＭＡ転送を行い、演算器１０３は、該ＤＭＡ転送中に該データに対するチェックサムのための演算を行う。レジスタ部１０４は、ＤＭＡ転送やチェックサムのための演算を要求するＣＰＵ１１４がアクセス可能なレジスタ群を有する。
【００１５】
システムバス１１３には、上記のデータ処理装置１０１に加え、ＣＰＵ１１４、データの転送元として使用する転送元メモリ１１５、データの転送先として使用する転送先メモリ１１６、後述する記述子（ディスクリプタ）を格納する為の記述子配置メモリ１１７が接続されている。
【００１６】
次に、このような構成を有するシステムの動作の概要について説明する。データ処理装置１０１にデータのＤＭＡ転送を行わせるためには先ず、ＣＰＵ１１４は、記述子を作成する必要がある。記述子とは、データ処理装置１０１にＤＭＡ転送を行わせるための指示内容と、ＤＭＡ転送中にデータ処理装置１０１にチェックサムのための演算を行わせるための指示内容と、について記述したものである。ＣＰＵ１１４がこのような記述子を生成して記述子配置メモリ１１７にセットすると共に、記述子をセットした記述子配置メモリ１１７中のアドレスをレジスタ部１０４にセットすることで、データ処理装置１０１はＤＭＡ転送を開始する。すなわち、データ処理装置１０１は、記述子に従って転送元メモリ１１５からデータを読み出して転送先メモリ１１６にＤＭＡ転送すると共にチェックサムのための演算を行い、演算の結果を記述子に応じた格納先に格納する。
【００１７】
ここで、記述子についてより詳細に説明する。記述子は、転送元に係る記述子である転送元用記述子と、転送先に係る記述子である転送先用記述子と、の２種類から成り、ＣＰＵ１１４は、１以上の転送元用記述子と１以上の転送先用記述子とを生成することになる。
【００１８】
転送元用記述子のフォーマットを図２（Ａ）に示す。Ｄａｔａ Ｓｔａｒｔ Ａｄｄｒｅｓｓ（ＳＲＣ＿ＤＳＡ２０１）は、転送対象となるデータの（転送元メモリ１１５における）先頭アドレスである。Ｄａｔａ  Ｌｅｎｇｔｈ（ＳＲＣ＿ＤＬ２０２）は、転送対象となるデータのサイズ（転送サイズ、データ長）である。Ｎｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ｅｎａｂｌｅ（ＳＲＣ＿ＮＤＥ２０３）は、次の転送元用記述子が存在するか否かを示すフラグ値であり、ＳＲＣ＿ＮＤＥ２０３＝１の場合は存在することを示し、ＳＲＣ＿ＮＤＥ２０３＝０であれば存在しないことを示す。Ｎｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ａｄｄｒｅｓｓ（ＳＲＣ＿ＮＤＡ２０４）は、次の転送元用記述子が存在する場合（ＳＲＣ＿ＮＤＥ２０３＝１の場合）に、該次の転送元用記述子の（記述子配置メモリ１１７における）先頭アドレスである。
【００１９】
転送先用記述子のフォーマットを図２（Ｂ）に示す。Ｄａｔａ Ｓｔａｒｔ Ａｄｄｒｅｓｓ（ＤＳＴ＿ＤＳＡ２１１）は、転送先メモリ１１６において転送対象となるデータを格納するための領域（格納領域）の先頭アドレスである。Ｄａｔａ  Ｌｅｎｇｔｈ（ＤＳＴ＿ＤＬ２１２）は、格納領域のサイズである。Ｎｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ｅｎａｂｌｅ（ＤＳＴ＿ＮＤＥ２１３）は、次の転送先用記述子が存在するか否かを示すフラグ値である。ＤＳＴ＿ＮＤＥ２１３＝１の場合は存在することを示し、ＤＳＴ＿ＮＤＥ２１３＝０であれば存在しないことを示す。Ｎｅｘｔ  Ｄｅｓｃｒｉｐｔｏｒ  Ａｄｄｒｅｓｓ（ＤＳＴ＿ＮＤＡ２１４）は、次の転送先用記述子が存在する場合（ＤＳＴ＿ＮＤＥ２１３＝１の場合）に、該次の転送元用記述子の（記述子配置メモリ１１７における）先頭アドレスである。Ｃｈｅｃｋｓｕｍ  Ｍｏｄｅ（ＤＳＴ＿ＣＭ２１５）は、演算器１０３によるチェックサムのための演算の結果の出力先を指定するための値（モード値）である。ＤＳＴ＿ＣＭ２１５＝１であれば、出力先をデータ処理装置１０１外のメモリとし、ＤＳＴ＿ＣＭ２１５＝０であれば、出力先をデータ処理装置１０１内のレジスタとする。図１の場合は、ＤＳＴ＿ＣＭ２１５＝１であれば、出力先は転送先メモリ１１６となり、ＤＳＴ＿ＣＭ２１５＝０であれば、出力先はレジスタ部１０４となる。
【００２０】
このように転送元用記述子、転送先用記述子を構成することで、たとえ転送元用記述子、転送先用記述子のそれぞれを複数生成し、記述子配置メモリ１１７に格納したとしても（ＳＲＣ＿ＮＤＥ＝ＤＳＴ＿ＮＤＥ＝１）、レジスタ部１０４には、複数の転送元用記述子のうち先頭の転送元用記述子の先頭アドレス、複数の転送先用記述子のうち先頭の転送先用記述子の先頭アドレス、さえ登録しておけば良く、Ｎ（Ｎは２以上の整数）番目の転送元用記述子の先頭アドレスは、（Ｎ−１）番目の転送元用記述子のＳＲＣ＿ＮＤＡ２０４から取得することができ、Ｎ（Ｎは２以上の整数）番目の転送先用記述子の先頭アドレスは、（Ｎ−１）番目の転送先用記述子のＤＳＴ＿ＮＤＡ２１４から取得することができる。
【００２１】
なお、転送元用記述子、転送先用記述子のフォーマットはそれぞれ図２（Ａ）、（Ｂ）に示したフォーマットに限るものではない。例えば、転送元用記述子、転送先用記述子を別個にするのではなく、連結させて１つの記述子としても構わない。
【００２２】
次に、データ処理装置１０１が上記のような記述子を用いて行うＤＭＡ転送及びチェックサムのための演算について、図３，４を用いて説明する。
【００２３】
図３では、図３（Ａ）に示す如く、転送対象となる３つのデータ（Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３）が隣接して転送元メモリ１１５内に格納されており、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３をそれぞれ、転送先メモリ１１６において隣接していない領域にＤＭＡ転送すると共に、それぞれのデータに対するチェックサムの結果を転送先メモリ１１６に格納するケースについて説明する。このようなＤＭＡ転送を実現するためにＣＰＵ１１４が生成する転送元用記述子、転送先用記述子を図３（Ｂ）に示す。
【００２４】
上記の通り、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３は、転送元メモリ１１５において連続するアドレスに書き込まれている一塊のデータ群であるため、ＣＰＵ１１４は、この一塊のデータ群に対して１つの転送元用記述子を生成する。図３（Ｂ）では、この一塊のデータ群（転送元メモリ１１５に格納されているＤａｔａ１，Ｄａｔａ２，Ｄａｔａ３）に対して１つの転送元用記述子「転送元用１」を生成している。「転送元用１」におけるＳＲＣ＿ＤＳＡ２０１には、この一塊のデータ群の転送元メモリ１１５における先頭アドレス（すなわち、Ｄａｔａ１の先頭アドレス）が格納されている。また、「転送元用１」におけるＳＲＣ＿ＤＬ２０２には、この一塊のデータ群のデータサイズ（即ち、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３のそれぞれのデータサイズの合計値）が格納されている。また、転送元メモリ１１５には、この一塊のデータ群（Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３）だけが転送対象として格納されており、転送元用記述子も「転送元用１」だけとなるため、「転送元用１」におけるＳＲＣ＿ＮＤＥ２０３には「０」が格納され、ＳＲＣ＿ＮＤＡ２０４にはＮＵＬＬなどの無効値が格納されることになる。
【００２５】
また、上記の通り、転送先メモリ１１６には、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３のそれぞれを、転送先メモリ１１６において隣接していない領域に転送するため、転送先用記述子は、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３のそれぞれについて生成することになる。図３（Ｂ）では、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３のそれぞれに対する転送先用記述子として、「転送先用１」、「転送先用２」、「転送先用３」が生成されている。
【００２６】
「転送先用１」のＤＳＴ＿ＤＳＡ２１１には、転送先メモリ１１６においてＤａｔａ１を格納するための領域（格納領域）の先頭アドレスが格納されており、ＤＳＴ＿ＤＬ２１２には、転送先メモリ１１６においてＤａｔａ１を格納するための領域のサイズが格納されている。また、「転送先用１」のＤＳＴ＿ＮＤＥ２１３には、次の転送対象データであるＤａｔａ２に対する転送先用記述子（すなわち「転送先用２」）が存在するために「１」が格納され、ＤＳＴ＿ＮＤＡ２１４には、「転送先用２」の記述子配置メモリ１１７における先頭アドレスが格納されている。また、「転送先用１」のＤＳＴ＿ＣＭ２１５には、チェックサムの結果を転送先メモリ１１６に格納する（図３（Ａ）の場合は領域３０１に格納する）ことを示す値「１」が格納されている。
【００２７】
「転送先用２」のＤＳＴ＿ＤＳＡ２１１には、転送先メモリ１１６においてＤａｔａ２を格納するための領域（格納領域）の先頭アドレスが格納されており、ＤＳＴ＿ＤＬ２１２には、転送先メモリ１１６においてＤａｔａ２を格納するための領域のサイズが格納されている。また、「転送先用２」のＤＳＴ＿ＮＤＥ２１３には、次の転送対象データであるＤａｔａ３に対する転送先用記述子（すなわち「転送先用３」）が存在するために「１」が格納され、ＤＳＴ＿ＮＤＡ２１４には、「転送先用３」の記述子配置メモリ１１７における先頭アドレスが格納されている。また、「転送先用２」のＤＳＴ＿ＣＭ２１５には、チェックサムの結果を転送先メモリ１１６に格納する（図３（Ａ）の場合は領域３０２に格納する）ことを示す値「１」が格納されている。
【００２８】
「転送先用３」のＤＳＴ＿ＤＳＡ２１１には、転送先メモリ１１６においてＤａｔａ３を格納するための領域（格納領域）の先頭アドレスが格納されており、ＤＳＴ＿ＤＬ２１２には、転送先メモリ１１６においてＤａｔａ３を格納するための領域のサイズが格納されている。また、「転送先用３」のＤＳＴ＿ＮＤＥ２１３には、次の転送対象データが存在しないために「０」が格納され、ＤＳＴ＿ＮＤＡ２１４にはＮＵＬＬなどの無効値が格納されている。また、「転送先用３」のＤＳＴ＿ＣＭ２１５には、チェックサムの結果を転送先メモリ１１６に格納する（図３（Ａ）の場合は領域３０３に格納する）ことを示す値「１」が格納されている。
【００２９】
図４では、図４（Ａ）に示す如く、転送対象となる３つのデータ（Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３）が転送元メモリ１１５内で隣接していない領域に格納されており、このような３つのデータ（Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３）を転送先メモリ１１６において隣接している領域にＤＭＡ転送すると共に、それぞれのデータに対するチェックサムの結果を転送先メモリ１１６に格納するケースについて説明する。このようなＤＭＡ転送を実現するためにＣＰＵ１１４が生成する転送元用記述子、転送先用記述子を図４（Ｂ）に示す。
【００３０】
上記の通り、転送元メモリ１１５には、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３のそれぞれが隣接していない領域に格納されているため、転送元用記述子は、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３のそれぞれについて生成することになる。図４（Ｂ）では、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３のそれぞれに対する転送元用記述子として、「転送元用１」、「転送元用２」、「転送元用３」が生成されている。
【００３１】
「転送元用１」におけるＳＲＣ＿ＤＳＡ２０１には、Ｄａｔａ１の転送元メモリ１１５における先頭アドレスが格納されており、ＳＲＣ＿ＤＬ２０２には、Ｄａｔａ１のデータサイズが格納されている。また、「転送元用１」のＳＲＣ＿ＮＤＥ２０３には、次の転送対象データであるＤａｔａ２に対する転送元用記述子（すなわち「転送元用２」）が存在するために「１」が格納され、ＳＲＣ＿ＮＤＡ２０４には、「転送元用２」の記述子配置メモリ１１７における先頭アドレスが格納されている。
【００３２】
「転送元用２」におけるＳＲＣ＿ＤＳＡ２０１には、Ｄａｔａ２の転送元メモリ１１５における先頭アドレスが格納されており、ＳＲＣ＿ＤＬ２０２には、Ｄａｔａ２のデータサイズが格納されている。また、「転送元用２」のＳＲＣ＿ＮＤＥ２０３には、次の転送対象データであるＤａｔａ３に対する転送元用記述子（すなわち「転送元用３」）が存在するために「１」が格納され、ＳＲＣ＿ＮＤＡ２０４には、「転送元用３」の記述子配置メモリ１１７における先頭アドレスが格納されている。
【００３３】
「転送元用３」におけるＳＲＣ＿ＤＳＡ２０１には、Ｄａｔａ３の転送元メモリ１１５における先頭アドレスが格納されており、ＳＲＣ＿ＤＬ２０２には、Ｄａｔａ３のデータサイズが格納されている。また、「転送元用３」のＳＲＣ＿ＮＤＥ２０３には、次の転送対象データが存在しないために「０」が格納され、ＳＲＣ＿ＮＤＡ２１４にはＮＵＬＬなどの無効値が格納されている。
【００３４】
また、上記の通り、転送先メモリ１１６には、Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３を、転送先メモリ１１６において連続するアドレスに転送する（一塊のデータ群として転送先メモリ１１６に格納する）ため、ＣＰＵ１１４は、この一塊のデータ群に対して１つの転送先用記述子を生成する。図４（Ｂ）では、この一塊のデータ群（Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３）に対して１つの転送先用記述子「転送先用１」を生成している。「転送先用１」におけるＤＳＴ＿ＤＳＡ２１１には、転送先メモリ１１６において、一塊のデータ群（Ｄａｔａ１，Ｄａｔａ２，Ｄａｔａ３）を格納するための領域（格納領域）の先頭アドレス（すなわち、Ｄａｔａ１を格納するための領域の先頭アドレス）が格納されている。また、「転送先用１」におけるＤＳＴ＿ＤＬ２１２には、この格納領域のデータサイズが格納されている。また、「転送先用１」におけるＤＳＴ＿ＮＤＥ２１３には「０」が格納され、ＤＳＴ＿ＮＤＡ２１４にはＮＵＬＬなどの無効値が格納される。また、「転送先用１」のＤＳＴ＿ＣＭ２１５には、チェックサムの結果を転送先メモリ１１６に格納する（図４（Ａ）の場合は領域４０１に格納する）ことを示す値「１」が格納されている。
【００３５】
図１に戻って、次に、データ処理装置１０１の内外に設けられたインターフェースについて説明する。データ処理装置１０１が有する転送器１０２は、データリードＩ／Ｆ（インターフェース）１０５及びデータライトＩ／Ｆ１０６を介してシステムバス１１３に接続されており、レジスタ部１０４は、レジスタアクセスＩ／Ｆ１０７を介してシステムバス１１３に接続されている。
【００３６】
転送器１０２は、データリードＩ／Ｆ１０５を介して、システムバス１１３に直接的若しくは間接的に接続されている様々なメモリからデータを読み出して取得する。読み出すデータは、記述子やＤＭＡ転送の対象となるデータ（転送元データ）である。また、転送器１０２は、データライトＩ／Ｆ１０６を介して、システムバス１１３に直接的若しくは間接的に接続されている様々なメモリに対してデータを書き込む。書き込むデータは、ＤＭＡ転送の対象となるデータ（転送元データ）やチェックサムの結果（演算結果）である。なお、データ処理装置１０１のステータス（実行中、完了）を記述子に書き込むようにしても構わない。
【００３７】
ＣＰＵ１１４は、システムバス１１３に接続されている記述子配置メモリ１１７等に対してアクセスを行ったり、システムバス１１３及びレジスタアクセスＩ／Ｆ１０７を介してレジスタ部１０４に対してアクセスすることができる。
【００３８】
また、ＣＰＵ１１４は、データ処理装置１０１から送信される通知信号１０８を受けることができる。この通知信号１０８は、データ処理装置１０１が各種ステータスを通知するために使用するものであり、ＣＰＵ１１４は、この通知信号１０８を受けて解析することで、データ処理装置１０１のステータスを確認することができる。例えば、データ処理装置１０１が何らかの処理を完了させた場合には、その旨を通知信号１０８にてＣＰＵ１１４に通知する。他に、記述子やレジスタの設定値に誤りがあり、データ処理装置１０１がエラーを検出した場合にも、エラー通知を通知信号１０８としてＣＰＵ１１４に送信する。
【００３９】
次に、データ処理装置１０１についてより詳細に説明する。転送器１０２は、レジスタ部１０４に記述子のアドレスが書き込まれたことをレジスタ部１０４からレジスタ信号Ａ１０９を介して通知されると、動作を開始する。動作を開始した転送器１０２は、データリードＩ／Ｆ１０５を介して記述子配置メモリ１１７から記述子を取得して解析し、該解析の結果に従って、転送元メモリ１１５に格納されている転送対象のデータをデータリードＩ／Ｆ１０５を介して取得し、該取得したデータをデータライトＩ／Ｆ１０６を介して転送先メモリ１１６に転送する、いわゆるＤＭＡ転送を実行する。また、転送器１０２は、演算指示／結果通知信号１１１を介して演算器１０３にチェックサムのための演算の実行指示を行ったり、演算器１０３による演算の結果を演算指示／結果通知信号１１１を介して受信したりする。
【００４０】
演算器１０３は、演算指示／結果通知信号１１１を介して転送器１０２から演算の実行指示を受けると、転送器１０２によりＤＭＡ転送されるデータに対してチェックサム演算を行う。ここでいうチェックサム演算とは、１の補数和の計算であり、データライトＩ／Ｆ１０６上に現れるデータ群をスヌープＩ／Ｆ１１２を介して取得し、そのデータに対して演算を行う。
【００４１】
レジスタ部１０４は、データ処理装置１０１とＣＰＵ１１４との間におけるコミュニケーションを行うためのレジスタが格納されており、ＣＰＵ１１４からアクセス可能なレジスタである。転送器１０２がレジスタ部１０４に対して、レジスタ値の取得や、レジスタへの書込みを行う場合には、レジスタ信号Ａ１０９を介して行う。さらに、演算器１０３がレジスタ部１０４に対し、レジスタ値の取得や、レジスタへの書込みを行う場合には、レジスタ信号Ｂ１１０を介して行う。
【００４２】
次に、転送器１０２の構成例について、図５のブロック図を用いて説明する。転送器制御部５０１は、転送器１０２全体の動作制御を行う。レジスタ部１０４に記述子のアドレスが書き込まれると、その旨がレジスタ部１０４からレジスタ信号Ａ１０９を介して通知されるので、転送器制御部５０１は、レジスタ信号Ａ１０９を介してこの通知を受けると、転送器１０２を構成する各部の動作を開始させる。
【００４３】
バスアクセス処理部５０３は、転送器制御部５０１からの指示により、以下の処理を行う。
【００４４】
・  データリードＩ／Ｆ１０５を介して、記述子配置メモリ１１７に格納されている記述子を読み出し、該読み出した記述子を記述子解析部５０４に対して送出する。
【００４５】
・  データリードＩ／Ｆ１０５を介して、転送元メモリ１１５に格納されている転送対象のデータを読み出し、該読み出したデータをＰＵＳＨデータバス５０６を介してＦＩＦＯ部５０２にＰＵＳＨする。
【００４６】
・  ＦＩＦＯ部５０２に格納されているデータを、ＰＯＰデータバス５０７を介して読み出してバスアクセス処理部５０３へＰＯＰし、該データをデータライトＩ／Ｆ１０６を介して転送先メモリ１１６に転送する。
【００４７】
・  演算器Ｉ／Ｆ処理部５０５を介して、演算器１０３からの演算結果を受信し、該演算結果をデータライトＩ／Ｆ１０６を介して転送先メモリ１１６に転送する。
【００４８】
ＦＩＦＯ部５０２は、転送元メモリ１１５から転送先メモリ１１６に転送するデータを一時的に記憶するためのバッファメモリとして機能するものである。転送器１０２は、転送元メモリ１１５から読み出したデータを、転送先用記述子に記載されたサイズ（ＤＳＴ＿ＤＬ２１２）に分割若しくは結合させてから転送先メモリ１１６に転送するのであるが、ＦＩＦＯ部５０２は、該分割や該結合の為の処理で用いるバッファメモリとして機能する。
【００４９】
記述子解析部５０４は、バスアクセス処理部５０３がデータリードＩ／Ｆ１０５を介して読み出した記述子（転送元用記述子、転送先用記述子）を取得し、該取得した記述子の解析を行い、該解析の結果を転送器制御部５０１に通知する。演算器Ｉ／Ｆ処理部５０５は、以下の処理を行う。
【００５０】
・  演算器１０３に対して、チェックサムのための演算の実行指示を行う。具体的には、これから転送器１０２がＤＭＡ転送を行うデータのサイズ（記述子解析部５０４が転送器制御部５０１に通知した転送先用記述子に含まれているＤＳＴ＿ＤＬ２１２）と演算結果の出力先（記述子解析部５０４が転送器制御部５０１に通知した転送先用記述子に含まれているＤＳＴ＿ＣＭ２１５）を通知する。
【００５１】
・  演算器１０３から演算結果を受信し、該受信した演算結果をバスアクセス処理部５０３に通知する。
【００５２】
次に、図１のシステムにおいて、ＣＰＵ１１４、データ処理装置１０１、転送元メモリ１１５、転送先メモリ１１６、記述子配置メモリ１１７、のそれぞれ間で行われる処理について、図６，７を用いて説明する。
【００５３】
先ず、転送先用記述子におけるＤＳＴ＿ＣＭ２１５の値が「１」の場合、すなわち、演算器１０３による演算結果の出力先として転送先メモリ１１６が指定された場合に、ＣＰＵ１１４、データ処理装置１０１、転送元メモリ１１５、転送先メモリ１１６、記述子配置メモリ１１７、のそれぞれ間で行われる処理について、図６を用いて説明する。
【００５４】
先ず、ＣＰＵ１１４は、転送対象となるデータについて転送元用記述子、転送先用記述子（ＤＳＴ＿ＣＭ２１５＝１）を作成し（図６では転送元用記述子及び転送先用記述子が合計３つ作成されている場合を示している）、作成したそれぞれの記述子をシステムバス１１３を介して記述子配置メモリ１１７に格納する（６０１）。このとき、転送対象となるデータの総データ量と、転送先メモリ１１６において転送対象となるデータを格納するための領域のサイズが、下記の式の如く一致する必要がある。
【００５５】
【数１】
2015207222.tif 000003
【００５６】
また、ＣＰＵ１１４は、記述子配置メモリ１１７に格納した転送元用記述子のうち１番目の転送元用記述子、記述子配置メモリ１１７に格納した転送先用記述子のうち１番目の転送先用記述子、のそれぞれについて、該記述子配置メモリ１１７における格納アドレスを、システムバス１１３及びレジスタアクセスＩ／Ｆ１０７を介してレジスタ部１０４に書き込む（６０２）。
【００５７】
レジスタ部１０４は、処理６０２によって２つの識別子のアドレスの格納が完了したことを検知すると、レジスタ信号Ａ１０９を介してその旨を転送器１０２に対して通知する（６０３）ので、転送器１０２は動作を開始する。
【００５８】
動作を開始した転送器１０２は先ず、レジスタ信号Ａ１０９を介してレジスタ部１０４から、１番目の転送元用記述子のアドレス（アドレスＸ）、１番目の転送先用記述子のアドレス（アドレスＹ）を取得し、記述子配置メモリ１１７においてアドレスＸに格納されている記述子（すなわち１番目の転送元用記述子）、記述子配置メモリ１１７においてアドレスＹに格納されている記述子（すなわち１番目の転送先用記述子）を、データリードＩ／Ｆ１０５を介して取得する。２番目以降の転送元用記述子、転送先用記述子については上記の通り、それぞれ１つ先に取得した転送元用記述子、転送先用記述子のＳＲＣ＿ＮＤＡ２０４／ＤＳＴ＿ＮＤＡ２１４に格納されているアドレスを参照することで取得することができる。このような処理により、転送器１０２は、記述子配置メモリ１１７に格納されている転送元用記述子、転送先用記述子を取得することができる（６０４）。
【００５９】
次に、転送器１０２は、転送元用記述子、転送先用記述子を解析して、転送元メモリ１１５におけるどのアドレスからデータを読み出し、転送先メモリ１１６のどの領域に転送するのか、転送しているデータに対するチェックサムの結果をどの格納先に出力するのか、等を特定する（６０５）。
【００６０】
そして転送器１０２は、演算指示／結果通知信号１１１を介して演算器１０３に対して、チェックサムのための演算の実行指示を行う（６０６）。この実行指示には、上記の通り、処理６０５における解析の結果に含まれている、これから転送器１０２がＤＭＡ転送を行うデータのサイズ（ＤＳＴ＿ＤＬ２１２）と演算結果の出力先（ＤＳＴ＿ＣＭ２１５）と、が含まれている。
【００６１】
そして転送器１０２は、データリードＩ／Ｆ１０５を介して、転送元メモリ１１５に格納されているデータを転送元用記述子に従って順次読み出し、該データを分割したり結合したりしてから、転送先用記述子に従ってデータライトＩ／Ｆ１０６を介して転送先メモリ１１６に対して転送する（６０７）。
【００６２】
また、演算器１０３は、データライトＩ／Ｆ１０６に上に現れるデータ群をスヌープＩ／Ｆ１１２を介して取得し、そのデータに対して、チェックサムのための演算を行う（６０８）。なお、転送器１０２は、データ群の開始及び終了の信号がバスに無い場合は、演算対象となるデータのサイズ（ＤＳＴ＿ＤＬ２１２に相当）を事前に通知しておくので、演算器１０３は、演算済みデータ数のカウントを行い、自動で演算の終了判定ができる。また、転送器１０２は、演算器１０３に対して、演算結果の出力先（ＤＳＴ＿ＣＭ２１５に相当）も通知しておくので、演算器１０３は、演算結果を得たあと、自身でレジスタ部１０４に書き込むのか、転送器１０２に演算結果を通知するのかを決定できる。
【００６３】
そして転送器１０２は、データのＤＭＡ転送が完了すると、演算器１０３から演算指示／結果通知信号１１１を介してチェックサムの結果が通知されるまで待機する（６０９）。演算器１０３は、転送器１０２が転送した全てのデータに対するチェックサムのための演算が完了すると、該演算の結果を演算指示／結果通知信号１１１を介して転送器１０２に対して通知する（６１０）。
【００６４】
転送器１０２は、演算器１０３からチェックサムの結果を受けると、該結果を、転送先用記述子中のＤＳＴ＿ＣＭ２１５に書き込まれている値に応じた格納先、即ち、転送先メモリ１１６に対して、データライトＩ／Ｆ１０６を介して送出する（６１１）。そして転送器１０２は、レジスタ信号Ａ１０９を介してレジスタ部１０４にＤＭＡ転送処理の完了ステータスを表す値を書き込む（６１２）。レジスタ部１０４に書き込まれた値は、通知信号１０８を介してＣＰＵ１１４に通知される（６１３）ので、ＣＰＵ１１４は、データ処理装置１０１へリクエストした処理が完了したことを検知する。
【００６５】
次に、転送先用記述子におけるＤＳＴ＿ＣＭ２１５の値が「０」の場合、すなわち、演算器１０３による演算結果の出力先としてレジスタ部１０４が指定された場合に、ＣＰＵ１１４、データ処理装置１０１、転送元メモリ１１５、転送先メモリ１１６、記述子配置メモリ１１７、のそれぞれ間で行われる処理について、図７を用いて説明する。図７において、図６に示した処理と同じ処理には同じ参照番号を付しており、この処理に係る説明は省略する。
【００６６】
先ず、ＣＰＵ１１４は、転送対象となるデータについて転送元用記述子、転送先用記述子（ＤＳＴ＿ＣＭ２１５＝０）を作成し（図７では転送元用記述子及び転送先用記述子が合計３つ作成されている場合を示している）、作成したそれぞれの記述子をシステムバス１１３を介して記述子配置メモリ１１７に格納する（７０１）。
【００６７】
そして転送器１０２は、データのＤＭＡ転送が完了すると、演算器１０３から演算指示／結果通知信号１１１を介してチェックサムの結果が通知されるまで待機することなく、即座に、ＤＭＡ転送が完了したことを通知するための値を、レジスタ信号Ａ１０９を介してレジスタ部１０４に書き込む（７０２）。レジスタ部１０４に書き込まれた値は、通知信号１０８を介してＣＰＵ１１４に通知される（７０３）ので、ＣＰＵ１１４は、データ処理装置１０１へリクエストした処理が完了したことを検知する。
【００６８】
演算器１０３は、転送器１０２が転送した全てのデータに対するチェックサムのための演算が完了すると、該演算の結果を、レジスタ信号Ｂ１１０を介してレジスタ部１０４に対して送出する（７０４）。
【００６９】
ここで、完了通知（処理７０３）と演算結果の通知（処理７０４）との間のタイムラグ７０５が実装で一定の範囲内に収まっていれば、転送器１０２は、演算器１０３の完了を待つことなくＣＰＵ１１４にＤＭＡ転送が完了した旨を通知しても構わない。すなわち、レジスタ部１０４への演算結果の格納は、ＣＰＵ１１４が完了通知を検知したことに応じてレジスタ部１０４にアクセスして演算結果を確認するまで（この時間はシステムによって異なるが）に完了していればよいわけであるから、ＤＭＡ転送が完了した時点で即座に完了通知を行っても、完了通知からタイムラグ７０５の間に、レジスタ部１０４への演算結果の格納が完了していれば問題はない。
【００７０】
次に、転送器１０２が行う処理について、同処理のフローチャートを示す図８を用いて説明する。図８のフローチャートに従った処理は、上記の通り、「記述子配置メモリ１１７に格納した転送元用記述子のうち１番目の転送元用記述子、記述子配置メモリ１１７に格納した転送先用記述子のうち１番目の転送先用記述子、のそれぞれの該記述子配置メモリ１１７における格納アドレスがレジスタ部１０４に書き込まれた旨」がレジスタ信号Ａ１０９を介して通知され、転送器制御部５０１がこれを検知した場合に開始されるものである。
【００７１】
ステップＳ８０２では、転送元メモリ１１５からデータを読み出してＦＩＦＯ部５０２に取り込む処理１（ステップＳ８０４〜Ｓ８１０）と、ＦＩＦＯ部５０２に取り込んだデータを転送先メモリ１１６にＤＭＡ転送すると共に、転送するデータに対するチェックサムを演算器１０３に行わせる処理２（ステップＳ８１１〜Ｓ８２０、Ｓ８２４）と、が実行されるのであるが、処理１が処理２に先行して実行されるのであれば、処理１と処理２とは並行して実行可能である。先ず、処理１について説明する。
【００７２】
ステップＳ８０４の処理は、第１回目と２回目以降とで処理の内容が若干異なる。第１回目のステップＳ８０４では、転送器制御部５０１は、レジスタ信号Ａ１０９を介してレジスタ部１０４から取得した（転送元用記述子の）アドレスをバスアクセス処理部５０３に通知する。バスアクセス処理部５０３は、データリードＩ／Ｆ１０５を介して、記述子配置メモリ１１７中の該アドレスに格納されている転送元用記述子を読み出し、該読み出した転送元用記述子を記述子解析部５０４に対して送出するので、記述子解析部５０４は該転送元用記述子を解析する。
【００７３】
第Ｎ（Ｎは２以上の整数）回目のステップＳ８０４では、バスアクセス処理部５０３は、記述子配置メモリ１１７において、第（Ｎ−１）回目のステップＳ８０４で読み出した転送元用記述子中のＳＲＣ＿ＮＤＡ２０４が示すアドレスに格納されている転送元用記述子を、データリードＩ／Ｆ１０５を介して読み出し、該読み出した転送元用記述子を記述子解析部５０４に対して送出するので、記述子解析部５０４は該転送元用記述子を解析する。
【００７４】
ステップＳ８０５では、転送器制御部５０１は、Ｅｒｒｏｒ判定１を実行する。ここで、Ｅｒｒｏｒ判定１について説明する。ＤＭＡ転送の性質上、転送データのリード処理の前に転送データのライト処理が完了することは無い。従って、ＤＭＡ転送が正常終了した場合であっても異常終了している場合であっても、この時点でステップＳ８２０における処理が完了しているような場合には、Ｅｒｒｏｒが発生していると判断する。このようなＥｒｒｏｒが発生しているか否かの判定がＥｒｒｏｒ判定１である。このようなＥｒｒｏｒが発生している場合には、処理はステップＳ８１０に進み、発生していない場合には、処理はステップＳ８０６に進む。
【００７５】
ステップＳ８０６では、バスアクセス処理部５０３は、ＦＩＦＯ部５０２に空き容量がない（Ｆｕｌｌである）か否かを判断する。この判断の結果、Ｆｕｌｌである場合、転送中のデータが何らかの理由により、まだ転送先メモリ１１６に書かれていないため、転送元メモリ１１５からの転送データの読み込みを保留すべく、処理はステップＳ８０５に戻る。一方、Ｆｕｌｌではない場合には、処理はステップＳ８０７に進む。
【００７６】
ステップＳ８０７では、バスアクセス処理部５０３は、ステップＳ８０４で記述子配置メモリ１１７から読み出した転送元用記述子中のＳＲＣ＿ＤＳＡ２０１が示すアドレスを先頭アドレスとし、該転送元用記述子中のＳＲＣ＿ＤＬ２０２が示すデータ長ぶんのデータを、単位データ長のデータごとに分割した場合に、１つぶんの分割データをデータリードＩ／Ｆ１０５を介して読み出し、該読み出した分割データをＦＩＦＯ部５０２にＰＵＳＨする。
【００７７】
ステップＳ８０８では、バスアクセス処理部５０３は、ステップＳ８０４で記述子配置メモリ１１７から読み出した転送元用記述子中のＳＲＣ＿ＤＳＡ２０１が示すアドレスから、該転送元用記述子中のＳＲＣ＿ＤＬ２０２が示すデータ長ぶんのデータを読み出したか否か（全ての分割データを読み出したか否か）を判断する。この判断の結果、読み出した場合には、処理はステップＳ８０９に進み、まだ読み出すべき分割データが残っている場合には、処理はステップＳ８０５に戻る。
【００７８】
ステップＳ８０９では、バスアクセス処理部５０３は、ステップＳ８０４で記述子配置メモリ１１７から読み出した転送元用記述子中のＳＲＣ＿ＮＤＥ２０３の値が「１」であるのか「０」であるのかを判断する。この判断の結果、ＳＲＣ＿ＮＤＥ２０３＝１の場合には、処理はステップＳ８０４に戻り、ＳＲＣ＿ＮＤＥ２０３＝０の場合には、処理はステップＳ８１０に進む。
【００７９】
ステップＳ８１０では、バスアクセス処理部５０３は、全ての転送元用記述子に対する処理が完了した旨を転送器制御部５０１に通知するので、転送器制御部５０１は、転送元に関する処理の全てが終了した時の処理を行う。例えば、転送器制御部５０１は、データリード処理（転送元に関する処理）が完了したことを示す情報をレジスタ部１０４に格納するようにしても構わない。なお、転送器制御部５０１は、上記のＥｒｒｏｒ判定１において、Ｅｒｒｏｒが発生していると判断した場合に、その旨をレジスタ部１０４に格納するようにしても構わない。
【００８０】
次に、上記の処理２について説明する。ステップＳ８１１の処理は、第１回目と２回目以降とで処理の内容が若干異なる。第１回目のステップＳ８１１では、転送器制御部５０１は、レジスタ信号Ａ１０９を介してレジスタ部１０４から取得した（転送先用記述子の）アドレスをバスアクセス処理部５０３に通知する。バスアクセス処理部５０３は、データリードＩ／Ｆ１０５を介して、記述子配置メモリ１１７中の該アドレスに格納されている転送先用記述子を読み出し、該読み出した転送先用記述子を記述子解析部５０４に対して送出するので、記述子解析部５０４は該転送先用記述子を解析する。
【００８１】
第Ｎ（Ｎは２以上の整数）回目のステップＳ８１１では、バスアクセス処理部５０３は、記述子配置メモリ１１７において、第（Ｎ−１）回目のステップＳ８１１で読み出した転送先用記述子中のＤＳＴ＿ＮＤＡ２１４が示すアドレスに格納されている転送先用記述子を、データリードＩ／Ｆ１０５を介して読み出し、該読み出した転送先用記述子を記述子解析部５０４に対して送出するので、記述子解析部５０４は該転送先用記述子を解析する。
【００８２】
何れの回であっても、ステップＳ８１１では、演算器Ｉ／Ｆ処理部５０５は、記述子解析部５０４による転送先用記述子に対する解析結果を転送器制御部５０１を介して取得し、これから転送器１０２がＤＭＡ転送を行うデータのサイズ（ＤＳＴ＿ＤＬ２１２）と演算結果の出力先（ＤＳＴ＿ＣＭ２１５）と、が含まれている実行指示を、演算指示／結果通知信号１１１を介して演算器１０３に対して送出する。
【００８３】
次に、ステップＳ８１２では、転送器制御部５０１は、Ｅｒｒｏｒ判定２を実行する。すなわち、転送器制御部５０１は、転送先用記述子中のＤＳＴ＿ＤＬ２１２が示すデータ長ぶんのデータの転送が完了していないのに、ＦＩＦＯ部５０２が空の状態（Ｅｍｐｔｙ）であり、且つこの時点でステップＳ８１０における処理が完了している（正常終了、異常終了は問わない）ような場合には、Ｅｒｒｏｒが発生していると判断する。このようなＥｒｒｏｒが発生しているか否かの判定がＥｒｒｏｒ判定２である。このようなＥｒｒｏｒが発生している場合には、処理はステップＳ８２０に進み、発生していない場合には、処理はステップＳ８１３に進む。
【００８４】
次に、ステップＳ８１３では、転送器制御部５０１は、ＦＩＦＯ部５０２が空の状態であるか否かを判断する。ＦＩＦＯ部５０２が空の状態（Ｅｍｐｔｙ）であれば、転送中データが何らかの理由により、まだＦＩＦＯ部５０２にＰＵＳＨされていないため、ＦＩＦＯ部５０２から転送先メモリ１１６へのデータ転送を保留する。然るに、この判断の結果、ＦＩＦＯ部５０２が空の状態である場合には、処理はステップＳ８１２に戻り、空の状態ではない場合には、処理はステップＳ８１４に進む。
【００８５】
ステップＳ８１４では、バスアクセス処理部５０３は転送先用記述子に従って、ＰＯＰデータバス５０７を介してＦＩＦＯ部５０２から転送単位分のデータをＰＯＰし、該転送単位分のデータをデータライトＩ／Ｆ１０６を介して転送先メモリ１１６に転送する。
【００８６】
ステップＳ８１５では、バスアクセス処理部５０３は、転送先用記述子中のＤＳＴ＿ＤＬ２１２が示すデータ長ぶんだけのデータ転送を行ったか否かを判断する。この判断の結果、転送先用記述子中のＤＳＴ＿ＤＬ２１２が示すデータ長ぶんだけのデータ転送を行った場合には、処理はステップＳ８１６に進み、行っていない場合には、ステップＳ８１２に戻る。
【００８７】
ステップＳ８１６では、転送器制御部５０１は、記述子解析部５０４による転送先用記述子の解析により、ＤＳＴ＿ＣＭ２１５の値が「１」であるのかそれとも「０」であるのかを判断する。この判断の結果、ＤＳＴ＿ＣＭ２１５の値が「１」である場合には、処理はステップＳ８１７に進み、ＤＳＴ＿ＣＭ２１５の値が「０」である場合には、処理はステップＳ８１９に進む。
【００８８】
ステップＳ８１７では、演算器Ｉ／Ｆ処理部５０５は、演算器１０３から演算指示／結果通知信号１１１を介してチェックサムの結果を受信したか否かを判断する。この判断の結果、まだ受信していない場合には、処理はステップＳ８２４に進み、受信した場合には、処理はステップＳ８１８に進む。ステップＳ８２４では、演算器Ｉ／Ｆ処理部５０５は、演算器１０３からのチェックサムの受信を待機し、その後、処理はステップＳ８１７に戻る。
【００８９】
ステップＳ８１８では、演算器Ｉ／Ｆ処理部５０５は、演算指示／結果通知信号１１１を介して演算器１０３から受信したチェックサムの結果をバスアクセス処理部５０３に転送するので、バスアクセス処理部５０３は、この転送されたチェックサムの結果をデータライトＩ／Ｆ１０６を介して転送先メモリ１１６に転送し、転送済みのデータの末尾に該チェックサムの結果を格納する。
【００９０】
ステップＳ８１９では、転送器制御部５０１は、転送先用記述子中のＤＳＴ＿ＮＤＥ２１３の値が「１」であるのかそれとも「０」であるのかを判断する。この判断の結果、ＤＳＴ＿ＮＤＥ２１３＝１の場合には、処理はステップＳ８１１に戻り、ＤＳＴ＿ＮＤＥ２１３＝０の場合には、処理はステップＳ８２０に進む。
【００９１】
ステップＳ８２０では、バスアクセス処理部５０３は、全ての転送先用記述子に対する処理が完了した旨を転送器制御部５０１に通知するので、転送器制御部５０１は、転送先に関する処理の全てが終了した時の処理を行う。例えば、転送器制御部５０１は、データライト処理（転送先に関する処理）が完了したことを示す情報をレジスタ部１０４に格納するようにしても構わない。なお、転送器制御部５０１は、上記のＥｒｒｏｒ判定２において、Ｅｒｒｏｒが発生していると判断した場合に、その旨をレジスタ部１０４に格納するようにしても構わない。
【００９２】
特別な処理が特に必要無ければ、転送元に関する処理終了まで待ち状態となる。しかし、エラーが発生していない場合は、転送先用記述子に対する処理も完了しているはずであるので、処理はステップＳ８２１に移行することになる。
【００９３】
ステップＳ８２１では、転送器制御部５０１は、データのＤＭＡ転送が正常終了したか否かを判断する。例えば、処理１及び処理２の両方が正常終了し、且つＦＩＦＯ部５０２に残存データが無い場合（Ｅｍｐｔｙ）に、ＤＭＡ転送は正常終了したと判断する。
【００９４】
この判断の結果、ＤＭＡ転送が正常終了した場合には、処理はステップＳ８２２に進み、ＤＭＡ転送が正常終了していない場合には、処理はステップＳ８２３に進む。ステップＳ８２２では、転送器制御部５０１は、ＤＭＡ転送が正常終了したことを示す情報を、レジスタ信号Ａ１０９を介してレジスタ部１０４に書き込む。一方、ステップＳ８２３では、転送器制御部５０１は、ＤＭＡ転送が正常終了していないことを示す情報を、レジスタ信号Ａ１０９を介してレジスタ部１０４に書き込む。
【００９５】
次に、演算器１０３が行う処理について、同処理のフローチャートを示す図９を用いて説明する。ステップＳ９０１では、演算器１０３は、上記のステップＳ８１１で演算器Ｉ／Ｆ処理部５０５から演算指示／結果通知信号１１１を介して受けた実行指示を受信する。
【００９６】
ステップＳ９０２では、演算器１０３は、スヌープＩ／Ｆ１１２上におけるデータの流れを監視し、該スヌープＩ／Ｆ１１２上にデータが現れないかを判断する。この判断の結果、データが現れた場合には、処理はステップＳ９０３を介してステップＳ９０４に進み、まだ現れていない場合には、処理はステップＳ９０３を介してステップＳ９０５に進む。
【００９７】
ステップＳ９０５では、演算器１０３は、スヌープＩ／Ｆ１１２上にデータが現れるのを待機し、その後、処理はステップＳ９０３に戻る。一方、ステップＳ９０４では、演算器１０３は、スヌープＩ／Ｆ１１２上に現れたデータに対するチェックサムのための演算処理を実行する。
【００９８】
そしてステップＳ９０６では、演算器１０３は、ステップＳ９０１で受信した実行指示中のＤＳＴ＿ＤＬ２１２を参照し、ＤＳＴ＿ＤＬ２１２が表すデータ長ぶんのデータのチェックサムの為の演算処理を行ったか否かを判断する。この判断の結果、行った場合には、処理はステップＳ９０７に進み、行っていない場合には、処理はステップＳ９０３に戻る。
【００９９】
ステップＳ９０７では、演算器１０３は、ＤＳＴ＿ＤＬ２１２が表すデータ長ぶんのデータに対するチェックサムの結果の補正処理（演算結果補正処理）、必要に応じて行う。ここでいう補正処理とは、チェックサム演算であれば演算結果のビット反転や、キャリーオーバ値の加算等が挙げられる。この補正処理は、ＣＰＵ１１４が、得たい演算結果の形式に適合するように実装すればよい。
【０１００】
ステップＳ９０８では、演算器１０３は、ステップＳ９０１で受信した実行指示中のＤＳＴ＿ＣＭ２１５の値が「１」であるのかそれとも「０」であるのかを判断する。この判断の結果、ＤＳＴ＿ＣＭ２１５の値が「１」であれば、処理はステップＳ９１０に進み、「０」であれば、処理はステップＳ９０９に進む。
【０１０１】
ステップＳ９０９では、演算器１０３は、チェックサムの結果を、レジスタ信号Ｂ１１０を介してレジスタ部１０４に対して送出する。一方、ステップＳ９１０では、演算器１０３は、チェックサムの結果を、演算指示／結果通知信号１１１を介して転送器１０２に対して送出する。
【０１０２】
［第２の実施形態］
第１の実施形態では、演算器１０３がチェックサムの為の演算処理を行うために、データをデータライトＩ／Ｆ１０６からスヌープする形態について説明したが、スヌープする場所はここでなくてもよい。例えば、ＰＯＰデータバス５０７をスヌープすることによっても、転送データに対するチェックサムを実現することはできる。また、システムにより転送元から受信するデータに対してチェックサムを行いたい場合は、データリードＩ／Ｆ１０５をスヌープすればよい。その際、ＤＳＴ＿ＣＭ２１５に相当する情報を転送元用記述子に含めておくことが望ましい。
【０１０３】
また、第１の実施形態では、演算器１０３の演算処理に必要となるＤＳＴ＿ＤＬ２１２を転送器１０２から演算器１０３に対して送信する形態について説明したが、例えば、レジスタ部１０４にＤＳＴ＿ＤＬ２１２を保持するレジスタ領域があれば、該レジスタ領域にこのＤＳＴ＿ＤＬ２１２を格納し、演算器１０３は、該レジスタ領域に格納されたＤＳＴ＿ＤＬ２１２を参照して動作するようにしても良い。ただし、転送先用記述子がチェーン（ＤＳＴ＿ＮＤＥ２１３＝１）されていれば、その分だけレジスタが必要となる。
【０１０４】
また、第１の実施形態では、転送元メモリ１１５、転送先メモリ１１６、記述子配置メモリ１１７、のそれぞれは別個のメモリとして説明したが、ＣＰＵ１１４及びデータ処理装置１０１がアクセス可能なメモリであれば、それぞれのメモリはどのような形態で提供されてもよく、例えば、１つのメモリ内に、転送元メモリ１１５、転送先メモリ１１６、記述子配置メモリ１１７、のそれぞれに対応する記憶領域を設けるようにしても構わない。
【０１０５】
また、第１の実施形態では、チェックサムの結果は、転送先メモリ１１６において転送済みのデータの末尾に付与する形で格納されたが、チェックサムの結果の格納位置はこれに限るものではない。例えば、転送先用記述子に演算結果書込み用のフィールドを具備し、演算結果を該フィールドに書き込むようにしても構わない。また、レジスタ部１０４に演算結果書込み先アドレスを格納するためのレジスタを用意し、転送器１０２が該アドレスに演算結果を書き込むといった方法も実現できる。
【０１０６】
［第３の実施形態］
本実施形態では、第１，２の実施形態で説明したデータ処理装置１０１を、データ通信システムに適用した場合について説明する。このようなデータ通信システムにおいて、データ（パケット）の受信頻度よりもデータ（パケット）の送信頻度が高いとする。このような場合、データ通信システムは、送信対象のパケットに対するＤＳＴ＿ＣＭ２１５の値は「１」とし、受信対象のパケットに対するＤＳＴ＿ＣＭ２１５の値は「０」とする。このようにすることで、レジスタ部１０４に要する容量を極力小さくすることができ、且つ例えば受信したパケットが送信パケットに対する応答パケットであるときは、速やかにチェックサムの結果を得ることができる。これは、データ処理装置１０１の外部にチェックサムの結果を書き込むよりも、レジスタ部１０４に書き込む方が、レイテンシが小さいことが理由に挙げられる。例えば、ＴＣＰのＡＣＫパケット受信時、該ＡＣＫパケットのチェックサム演算が高速に行え、結果として高速なＡＣＫパケットの受信処理が可能となる。
【０１０７】
なお、第１〜３の実施形態において、ＤＳＴ＿ＣＭ２１５の値は予め定められていても良いし、ユーザが不図示の操作部を用いて適宜設定しても構わない。また、本実施形態の場合は、送信の頻度及び受信の頻度から判断して、送信パケットに対するＤＳＴ＿ＣＭ２１５の値と、受信パケットに対するＤＳＴ＿ＣＭ２１５の値と、をＣＰＵ１１４が適宜切り替えても構わない。このように、ＤＳＴ＿ＣＭ２１５の値の設定や切り替えには様々な形態が考えられ、特定の形態に限るものではない。
【０１０８】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2015207222.tif 000004
【図２】
2015207222.tif 000005
【図３】
2015207222.tif 000006
【図４】
2015207222.tif 000007
【図５】
2015207222.tif 000008
【図６】
2015207222.tif 000009
【図７】
2015207222.tif 000010
【図８】
2015207222.tif 000011
【図９】
2015207222.tif 000012