(57)【要約】【課題】複数のデータの転送に係る処理時間を低減し、通信処理を高速化する。【解決手段】通信装置は、転送手段によるＤＭＡ転送が、複数の第１のデータの転送であるか、第１のデータおよび第２のデータの転送であるかに関する情報を取得し、ＤＭＡ転送が複数の第１のデータの転送である場合、転送手段が第１のデータを転送するためのディスクリプタから、転送手段が異なる第１のデータを転送するためのディスクリプタへチェーンするように、ディスクリプタを生成し、ＤＭＡ転送が第１のデータおよび第２のデータの転送である場合、転送手段が第１のデータを転送するためのディスクリプタから、転送手段が第２のデータを転送するためのディスクリプタへ、またはその逆にチェーンするように、ディスクリプタを生成し、生成されたディスクリプタに基づいて転送手段によるＤＭＡ転送を実行することにより生成された複数の通信パケットを送信する。【選択図】      図３
2019139638.tif 000002
【特許請求の範囲】
【請求項１】
ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を実行する転送手段と、
前記転送手段によるＤＭＡ転送が、複数の第１のデータの転送であるか、前記第１のデータおよび第２のデータの転送であるかに関する情報を取得する取得手段と、
前記取得手段により取得された情報が、前記ＤＭＡ転送が前記複数の第１のデータの転送であることを示す情報である場合、前記転送手段が前記第１のデータを転送するためのディスクリプタから、前記転送手段が異なる前記第１のデータを転送するためのディスクリプタへチェーンするように、前記ディスクリプタを生成し、
前記取得手段により取得された情報が、前記ＤＭＡ転送が前記第１のデータおよび前記第２のデータの転送であることを示す情報である場合、前記転送手段が前記第１のデータを転送するためのディスクリプタから、前記転送手段が前記第２のデータを転送するためのディスクリプタへ、またはその逆にチェーンするように、前記ディスクリプタを生成する生成手段と、
前記生成手段により生成された前記ディスクリプタに基づいて前記転送手段によるＤＭＡ転送を実行することにより生成された複数の通信パケットを送信する送信手段と、
を備えることを特徴とする通信装置。
【請求項２】
前記ＤＭＡ転送が、前記転送手段がデータを入力するリード転送である場合、
前記第１のデータは通信ヘッダであり、前記第２のデータはペイロードであることを特徴とする請求項１に記載の通信装置。
【請求項３】
前記ＤＭＡ転送が、前記転送手段がデータを出力するライト転送である場合、
前記第１のデータは、前記転送手段が入力したデータに対して実行した演算の演算結果であり、前記第２のデータは、前記通信ヘッダを前記ペイロードに付加した通信パケットであることを特徴とする請求項２に記載の通信装置。
【請求項４】
前記取得手段は、
前記転送手段が出力するデータの種別に基づいて、前記リード転送が、複数の前記通信ヘッダの転送であるか、前記通信ヘッダと前記ペイロードとの転送であるかを判定することを特徴とする請求項３に記載の通信装置。
【請求項５】
前記取得手段は、前記転送手段が出力するデータの種別として前記演算の種別を取得し、
前記演算の種別がインターネットチェックサムの演算である場合、前記リード転送が、複数の前記通信ヘッダの転送であると判定し、
前記演算の種別が前記インターネットチェックサムとペイロードサムとの演算である場合、前記リード転送が、前記通信ヘッダと前記ペイロードとの転送であると判定することを特徴とする請求項３または４に記載の通信装置。
【請求項６】
前記取得手段は、
前記転送手段が出力するデータの種別に基づいて、前記転送手段が出力するデータに前記通信パケットが含まれると判定した場合、前記リード転送が、前記通信ヘッダと前記ペイロードとの転送であると判定することを特徴とする請求項３から５のいずれか１項に記載の通信装置。
【請求項７】
前記ディスクリプタの生成に必要な設定情報として、前記通信パケットの種別、前記通信パケットを記憶するアドレス情報、生成すべき前記通信パケットの数、前記転送手段が入力するデータの転送元のアドレス情報およびサイズ情報の少なくとも１つを取得する第２の取得手段をさらに備え、
前記生成手段は、
前記第２の取得手段により取得された設定情報に基づいて、前記ディスクリプタに記述する情報を計算し、前記ディスクリプタを生成することを特徴とする請求項３から６のいずれか１項に記載の通信装置。
【請求項８】
前記生成手段は、
前記第２の取得手段により取得された設定情報に基づいて、前記ディスクリプタに記述する情報として、チェーン先のディスクリプタのアドレス情報、前記転送手段が転送するデータのアドレス情報およびサイズ情報を計算することを特徴とする請求項７に記載の通信装置。
【請求項９】
チェーンさせる複数の前記ディスクリプタを連続する領域に記憶する第１のメモリをさらに備え、
前記生成手段は、
前記生成すべき通信パケットの数と、前記第１のメモリにおける前記複数のディスクリプタの先頭アドレスと、前記ディスクリプタのサイズとに基づいて、前記チェーン先のディスクリプタのアドレスを計算し、前記ディスクリプタに記述することを特徴とする請求項８に記載の通信装置。
【請求項１０】
送信すべきデータを記憶する第２のメモリをさらに備え、
前記生成すべき通信パケットの数は、送信すべきデータを所定のサイズで分割した前記ペイロードの数であり、
前記生成手段は、
前記生成すべき通信パケットの数と、前記第２のメモリにおける前記送信すべきデータの先頭アドレスと、前記所定のサイズとに基づいて、前記転送するデータのアドレス情報として、前記ペイロードの転送元のアドレスを計算し、前記ペイロードをリード転送するための前記ディスクリプタに記述することを特徴とする請求項８または９に記載の通信装置。
【請求項１１】
前記通信ヘッダを記憶する第３のメモリをさらに備え、
前記生成手段は、
前記生成すべき通信パケットの数と、前記第３のメモリにおける前記通信ヘッダの先頭アドレスと、前記通信ヘッダのサイズとに基づいて、前記転送するデータのアドレス情報として、前記演算結果の転送先のアドレスを計算し、前記演算結果をライト転送するための前記ディスクリプタに記述することを特徴とする請求項８から１０のいずれか１項に記載の通信装置。
【請求項１２】
前記生成手段により生成された前記ディスクリプタが記憶されているアドレスを前記転送手段に設定することで、前記転送手段に前記ＤＭＡ転送の開始を指示する制御手段をさらに備えることを特徴とする請求項１から１１のいずれか１項に記載の通信装置。
【請求項１３】
使用される通信プロトコルが、ＩＰｖ４またはＩＰｖ６、もしくはＴＣＰまたはＵＤＰであることを特徴とする請求項１から１２のいずれか１項に記載の通信装置。
【請求項１４】
ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を実行するステップと、
前記ＤＭＡ転送が、複数の第１のデータの転送であるか、前記第１のデータおよび第２のデータの転送であるかに関する情報を取得するステップと、
取得された前記情報が、前記ＤＭＡ転送が前記複数の第１のデータの転送であることを示す情報である場合、前記ＤＭＡ転送により前記第１のデータを転送するためのディスクリプタから、前記ＤＭＡ転送により異なる前記第１のデータを転送するためのディスクリプタへチェーンするように、前記ディスクリプタを生成し、
取得された前記情報が、前記ＤＭＡ転送が前記第１のデータおよび前記第２のデータの転送であることを示す情報である場合、前記ＤＭＡ転送により前記第１のデータを転送するためのディスクリプタから、前記ＤＭＡ転送により前記第２のデータを転送するためのディスクリプタへ、またはその逆にチェーンするように、前記ディスクリプタを生成するステップと、
生成された前記ディスクリプタに基づいて前記ＤＭＡ転送を実行することにより生成された複数の通信パケットを送信するステップと、を含むことを特徴とする通信方法。
【請求項１５】
コンピュータを、請求項１から１３のいずれか１項に記載された通信装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信方法およびプログラムに関する。
【背景技術】
【０００２】
近年、急速に増加しているスマートデバイスと呼ばれる多機能端末では、ネットワーク経由で配信される高解像度動画（８Ｋ／４Ｋ）の閲覧が可能である。こうした高解像度動画を閲覧するニーズの増加に伴って、動画配信のためのデータトラフィックが増大している。また、Ｅｔｈｅｒｎｅｔ（登録商標）による１０Ｇｂｐｓ通信、移動体通信の５Ｇ通信などのネットワークの高速化に伴って、ＴＣＰ／ＵＤＰ／ＩＰなどの通信プロトコル処理のＣＰＵにかかる負荷が大きくなっている。こうした通信プロトコルを用いた高速データ通信を実現するために、多機能端末内におけるデータ転送の制御により高速に通信パケットを生成する技術が提案されている。
【０００３】
高速に通信パケットを生成する技術として、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）方式を活用した技術がある。ＤＭＡ方式では、ＤＭＡコントローラと呼ばれるデータ転送専用のコントローラを用いて、ＣＰＵを介さずにデータを転送することができる。
特許文献１には、ＤＭＡコントローラを用いた通信パケットの生成方法が開示されている。まず、ＣＰＵは、ソフトウェア処理により通信ヘッダとディスクリプタとをそれぞれ１つずつ生成する。次にＣＰＵは、ＤＭＡコントローラ付のＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）を起動し、ＭＡＣは、ディスクリプタに従って通信ヘッダとペイロードとを取得する。そして、ＭＡＣは、ペイロードに通信ヘッダを付加して１つの通信パケットを生成し、ネットワークに転送する。この通信パケットの生成方法を用いて複数の通信パケットをネットワークに転送する場合、上記のディススクリプタの生成とＤＭＡコントローラの制御とを含む一連の処理を繰り返し実行する必要がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１１６３８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献１の通信パケットの生成方法では、複数の通信パケットをネットワークに転送する場合、１パケットごとにＤＭＡコントローラを制御しなければならない。
ＤＭＡコントローラの制御には、以下の３つの処理時間が必要である。（１）ディスクリプタに記述する情報を準備する時間、（２）準備した情報をディスクリプタに記述する時間、（３）１パケットごとにＤＭＡコントローラを起動する時間、である。通信処理の高速化のためには、上記の処理時間の短縮が必要である。
そこで、本発明は、複数のデータの転送に係る処理時間を低減し、通信処理を高速化することを目的としている。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明に係る通信装置の一態様は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を実行する転送手段と、前記転送手段によるＤＭＡ転送が、複数の第１のデータの転送であるか、前記第１のデータおよび第２のデータの転送であるかに関する情報を取得する取得手段と、前記取得手段により取得された情報が、前記ＤＭＡ転送が前記複数の第１のデータの転送であることを示す情報である場合、前記転送手段が前記第１のデータを転送するためのディスクリプタから、前記転送手段が異なる前記第１のデータを転送するためのディスクリプタへチェーンするように、前記ディスクリプタを生成し、前記取得手段により取得された情報が、前記ＤＭＡ転送が前記第１のデータおよび前記第２のデータの転送であることを示す情報である場合、前記転送手段が前記第１のデータを転送するためのディスクリプタから、前記転送手段が前記第２のデータを転送するためのディスクリプタへ、またはその逆にチェーンするように、前記ディスクリプタを生成する生成手段と、前記生成手段により生成された前記ディスクリプタに基づいて前記転送手段によるＤＭＡ転送を実行することにより生成された複数の通信パケットを送信する送信手段と、を備える。
【発明の効果】
【０００７】
本発明によれば、複数のデータの転送に係る処理時間を低減し、通信処理を高速化することができる。
【図面の簡単な説明】
【０００８】
【図１】本実施形態に係る通信装置の構成例を示すブロック図である。
【図２】通信装置の送信動作を説明するフローチャートである。
【図３】通信プロトコル処理を示すフローチャートである。
【図４】ディスクリプタ処理部の入出力情報を示す図である。
【図５】転送元アドレスからデータを転送するディスクリプタチェーンの仕組み。
【図６】転送先アドレスへデータを転送するディスクリプタチェーンの仕組み。
【発明を実施するための形態】
【０００９】
以下、添付図面を参照して、本発明を実施するための形態について詳細に説明する。なお、以下に説明する実施の形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正または変更されるべきものであり、本発明は以下の実施の形態に限定されるものではない。
【００１０】
本実施形態における通信装置は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）方式を活用して通信パケットを生成し、外部機器に対してネットワーク経由で送信すべきデータ（以下、「送信データ」という。）を転送する。ＤＭＡ方式では、ＤＭＡコントローラと呼ばれるデータ転送専用のコントローラを用いて、ＣＰＵを介さずにデータを転送することができる。ＤＭＡコントローラは、ディスクリプタに記述されている内容に従ってデータを入力（リード）および出力（ライト）することで、転送元装置と転送先装置との間、例えば通信装置内のメモリ間において直接データを転送することができる。ディスクリプタは、ソフトウェアにより生成される。
本実施形態における通信装置は、ＤＭＡコントローラが、ディスクリプタを連続して読み込み、連続してＤＭＡ転送を実行するように、チェーン先アドレスを含むディスクリプタを生成する。ここで、チェーン先アドレスとは、ＤＭＡコントローラが次にリードするディスクリプタのアドレスである。これにより、通信装置が外部機器に対してネットワーク経由で送信データを複数の通信パケットにより転送する場合、ＤＭＡコントローラを一度起動させるだけで、複数の通信パケットを生成することができる。つまり、ＤＭＡコントローラの制御にかかる処理時間を低減することができる。
【００１１】
図１は、本実施形態に係る通信装置１００のハードウェア構成および機能構成の一例を示す図である。
通信装置１００の各機能モジュールのうち、ソフトウェアにより実現される機能については、各機能モジュールの機能を提供するためのプログラムがＲＯＭ等のメモリに記憶され、ＲＡＭに読み出してＣＰＵが実行することにより実現される。ハードウェアにより実現される機能については、例えば、所定のコンパイラを用いることで、各機能モジュールの機能を実現するためのプログラムからＦＰＧＡ上に自動的に専用回路を生成すればよい。ＦＰＧＡとは、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略である。また、ＦＰＧＡと同様にしてＧａｔｅ  Ａｒｒａｙ回路を形成し、ハードウェアとして実現するようにしてもよい。また、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）により実現するようにしてもよい。
なお、図１に示した機能ブロックの構成は一例であり、複数の機能ブロックが１つの機能ブロックを構成するようにしてもよいし、いずれかの機能ブロックが複数の機能を行うブロックに分かれてもよい。
【００１２】
通信装置１００は、メインＣＰＵ１０と、メインメモリ２０と、サブシステム３０と、を備える。サブシステム３０は、通信プロトコル処理を実行する。メインＣＰＵ１０、メインメモリ２０およりサブシステム３０は、システムバス４０を介して相互に接続されている。
メインＣＰＵ１０は、通信装置１００上で稼働するアプリケーションソフトウェアを実行するとともに、通信装置１００全体の制御を実行する。具体的には、メインＣＰＵ１０は、アプリケーションソフトウェアを実行する上で必要となるデータやプログラムなどをメインメモリ２０の内部に記憶し、必要に応じてシステムバス４０を介して読み出しや書き込みを行う。
メインメモリ２０は、システムバス４０を介して、通信装置１００内の各機能ブロックが共有して利用可能なメモリであり、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリにより構成することができる。メインメモリ２０内部の領域は、プログラムを格納する領域やアプリケーションソフトウェアが使用するアプリケーションバッファ領域などに分けられる。
【００１３】
サブシステム３０は、サブＣＰＵ３１と、ローカルメモリ３２と、通信インタフェース（通信Ｉ／Ｆ）３３と、ＤＭＡコントローラ３４と、ディスクリプタ処理部３５と、を備える。サブＣＰＵ３１、ローカルメモリ３２、通信Ｉ／Ｆ３３、ＤＭＡコントローラ３４およびディスクリプタ処理部３５は、ローカルバス３６を介して相互に接続されている。
サブシステム３０は、上述したように、通信装置１００における通信プロトコル処理を実行するシステムであり、特に、サブシステム３０は、ＴＣＰ／ＩＰプロトコル等の通信プロトコル処理に特化して外部機器とネットワークを介したデータ転送処理を担う。本実施形態において、サブシステム３０は、通信プロトコル処理専用のハードウェア（ハードウェアアクセラレータ）を搭載して、通信プロトコル処理の一部をメインＣＰＵ１０に替えて高速で実行する。なお、ＴＣＰ／ＩＰプロトコルは、説明を行うために示す一例であり、サブシステム３０は、その他の通信プロトコルの通信プロトコル処理を実行することができる。
【００１４】
サブＣＰＵ３１は、サブシステム３０による通信プロトコル処理全体の実行を制御する。具体的には、サブＣＰＵ３１は、ＩＰｖ４（ＩＰバージョン４）、ＩＰｖ６（ＩＰバージョン６）、ＴＣＰ、ＵＤＰ等の各通信プロトコル処理を実行する。サブＣＰＵ３１が実行する通信プロトコル処理は、送信シーケンス制御、輻輳制御、通信エラー制御等を含む。なお、サブＣＰＵ３１は、１つのプロセッサとして構成してもよいし、複数のプロセッサによるマルチプロセッサ構成としてもよい。さらに、サブＣＰＵ３１は、プロセッサと一部の機能をアクセラレートするハードウェア（ハードウェアアクセラレータ）とで構成してもよい。
ローカルメモリ３２は、サブシステム３０のサブＣＰＵ３１が利用可能なメモリであり、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリにより構成することができる。また、ローカルメモリ３２は、メインＣＰＵ１０からもシステムバス４０およびローカルバス３６を介してアクセス可能である。
【００１５】
通信Ｉ／Ｆ３３は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等により構成されるネットワーク３７とのインタフェースであり、外部装置との通信における物理層（ＰＨＹ層）とデータリンク層（ＭＡＣ層）の通信制御を担っている。
通信Ｉ／Ｆ３３は、内部に送受信データを一時的に蓄積するバッファメモリを装備し、ＤＭＡコントローラ３４のＤＭＡ転送によって、送受信データの入出力が行われる。なお、図１のＤＭＡコントローラ３４とは別に、通信Ｉ／Ｆ３３がＤＭＡコントローラを内蔵して、その内蔵ＤＭＡコントローラを用いてＤＭＡ転送による送受信データの入出力を行ってもよい。
【００１６】
ＤＭＡコントローラ３４は、転送レジスタ部３４１と、リード転送部３４２と、ライト転送部３４３と、演算部３４４と、を備える。
ＤＭＡコントローラ３４は、ディスクリプタに記述された内容に従ってソース側からディスティネーション側へデータ転送（ＤＭＡ転送）を実行する。このディスクリプタには、データ転送元となるソース側のメモリ等のアドレス情報、データ転送先となるディスティネーション側のメモリ等のアドレス情報、およびデータ転送の転送サイズ等の情報が記述される。また、ＤＭＡコントローラ３４は、ＤＭＡ転送が完了すると、完了通知をディスクリプタ処理部３５へ出力する機能を有する。
【００１７】
転送レジスタ部３４１は、リード転送部３４２、ライト転送部３４３および演算部３４４を制御するための設定情報の入力機能を有する。ここで、転送レジスタ部３４１が入力する設定情報は、ディスクリプタが記憶されているメモリ等のアドレス情報や、演算部３４４の動作モードを決定する情報を含む。また、転送レジスタ部３４１は、リード転送部３４２およびライト転送部３４３のステータス情報を表示する出力機能を有する。
リード転送部３４２は、転送レジスタ部３４１にセットされた設定情報をもとにディスクリプタを読み込む。そして、リード転送部３４２は、読み込んだディスクリプタに記述された内容に従って、メインメモリ２０、あるいはローカルメモリ３２、あるいは後述する内部メモリ３５２からデータをリードすることができる。
【００１８】
ライト転送部３４３は、転送レジスタ部３４１にセットされた設定情報をもとにディスクリプタを読み込む。そして、ライト転送部３４３は、読み込んだディスクリプタに記述された内容に従って、データをローカルメモリ３２や内部メモリ３５２へライトすることができる。さらに、ライト転送部３４３は、データを通信Ｉ／Ｆ３３が装備するバッファメモリへライトすることもできる。
演算部３４４は、転送レジスタ部３４１にセットされた設定情報に従って、リード転送部３４２から受け取ったデータに対する演算を実行する。具体的には、演算部３４４は、インターネットチェックサム演算やペイロードサム演算を行う。ここで、インターネットチェックサムとは、ＴＣＰ／ＵＤＰ／ＩＰ通信パケット内のチェックサム値を指し、１６ビット毎の１の補数和を取り、さらにそれの１の補数を取ることで計算できる。また、ペイロードサムとは、ペイロードの総和であり、１６ビットワード毎の１の補数和である。
なお、演算部３４４は、演算をスルーする動作モードで動作することもできる。この場合、ＤＭＡコントローラ３４は、演算を実施せず単純なメモリ間のデータコピーとして使用することができる。
【００１９】
ディスクリプタ処理部３５は、ＤＭＡコントローラ３４がＤＭＡ転送するためのディスクリプタを生成する。
ディスクリプタ処理部３５は、生成レジスタ部３５１と、内部メモリ３５２と、コア部３５３と、を備える。ディスクリプタ処理部３５は、サブＣＰＵ３１が実行する通信プロトコル処理を担っており、具体的には、通信プロトコル処理の中のディスクリプタ生成処理と、ＤＭＡコントローラ３４の制御処理を肩代わりして実行する。
【００２０】
生成レジスタ部３５１は、コア部３５を制御するための設定情報の入力機能と、コア部３５３の状態を確認するためのステータス情報を表示する出力機能と、を有する。ここで、生成レジスタ部３５１が入力する設定情報は、ディスクリプタの生成に必要な情報であり、生成するディスクリプタの数やＤＭＡ転送するデータの通信プロトコル種別などを判断する情報等を含む。この設定情報については、後で詳述する。
内部メモリ３５２は、コア部３５３やサブＣＰＵ３１が利用可能なメモリであり、ＳＲＡＭ等の半導体メモリにより構成することができる。内部メモリ３５２は、コア部３５３によって生成されたディスクリプタを記憶する領域を持つ。
【００２１】
コア部３５３は、コア制御部３５３ａと、ディスクリプタ生成部３５３ｂと、ＤＭＡコントローラ制御部３５３ｃと、を備える。
コア部３５３は、生成レジスタ部３５１にセットされた設定情報によりディスクリプタ生成処理を実行し、内部メモリ３５２にディスクリプタを保存する。さらに、コア部３５３は、内部メモリ３５２へのディスクリプタの保存を完了すると、ＤＭＡ転送要求をＤＭＡコントローラ３４へ出力する機能を有する。
コア制御部３５３ａは、生成レジスタ部３５１にセットされた設定情報に従って、ディスクリプタ生成部３５３ｂとＤＭＡコントローラ制御部３５３ｃとを制御する。具体的には、コア制御部３５３ａは、ディスクリプタ生成部３５３ｂに対してディスクリプタ生成を要求したり、ＤＭＡコントローラ制御部３５３ｂに対してディスクリプタ生成の完了通知を出力したりする。
【００２２】
ディスクリプタ生成部３５３ｂは、コア制御部３５３ａからのディスクリプタ生成の要求を受け取ると、生成レジスタ部３５１にセットされた設定情報をもとにディスクリプタに記述する情報を計算して、ディスクリプタを生成する。
ディスクリプタ生成部３５３ｂが生成するディスクリプタのサイズは、固定値である。ディスクリプタ生成部３５３ｂは、生成したディスクリプタを内部メモリ３５２に保存する。また、ディスクリプタ生成部３５３ｂは、生成したディスクリプタを内部メモリ３５２に書き込んだ数をカウントする機能も有する。
【００２３】
ＤＭＡコントローラ制御部３５３ｃは、コア制御部３５３ａからのディスクリプタ生成の完了通知を受け取ると、リード転送部３４２、ライト転送部３４３および演算部３４４の設定情報をそれぞれ転送レジスタ部３４１にセットする。これにより、ＤＭＡコントローラ制御部３５３ｃは、ＤＭＡコントローラ３４に対してＤＭＡ転送を実行するように要求する。つまり、ＤＭＡコントローラ制御部３５３ｃは、転送レジスタ部３４１に、ディスクリプタが記憶されている内部メモリ３５２のアドレスを設定することで、ＤＭＡコントローラ３４に対してＤＭＡ転送の開始を指示する。そして、ＤＭＡコントローラ制御部３５３ｃは、ＤＭＡコントローラ３４からＤＭＡ転送の完了通知を受け取ると、生成レジスタ部３５１に通知情報をセットする。
なお、ＤＭＡ転送の完了通知は、ＤＭＡコントローラ３４がディスクリプタ処理部３５に対して割り込み信号で通知する方法がある。もしくは、ＤＭＡコントローラ制御部３５３ｃが転送レジスタ部３４１をポーリングすることで、ＤＭＡ転送の完了通知を受け取る方法もある。
【００２４】
次に、通信装置１００がネットワーク３７を介して外部機器へ通信パケットを送信する際の通信装置１００の送信動作について説明する。
図２は、通信装置１００が実行する通信パケット送信処理の一例を示すフローチャートである。この図２に示す処理は、例えば、通信装置１００の通信機能が起動され、通信装置１００がネットワーク３７を介して外部機器と通信状態となったことを契機に開始される。ただし、図２に示す処理の開始タイミングは上記に限定されない。
以下では、通信装置１００が外部機器との間でデータ転送する際に使用する通信プロトコルとして、ＴＣＰ／ＩＰプロトコルを使用する例を説明する。なお、通信プロトコルは、ＴＣＰ／ＩＰプロトコル以外の通信プロトコルであってもよい。
【００２５】
まずＳ１において、メインＣＰＵ１０で実行されるアプリケーションソフトウェアは、外部機器へ送信すべき送信データを、メインメモリ２０に設けられたアプリケーションバッファ領域に準備する。そして、アプリケーションバッファ領域に送信データが所定の量まで蓄積されると、メインＣＰＵ１０で実行されるアプリケーションソフトウェアは、サブＣＰＵ３１に対して、外部機器へ送信する送信データの準備が完了したことを通知する。
ここで、サブＣＰＵ３１に対して発行される通知には、現在の通信状態を示す情報が含まれる。現在の通信状態を示す情報は、例えば、ＴＣＰプロトコルを使用した通信の接続を開始することを示す情報、ＴＣＰプロトコルを使用したデータ転送を開始することを示す情報、ＴＣＰプロトコルを使用した通信の切断を開始する情報等を含む。
【００２６】
次にＳ２において、サブＣＰＵ３１は、メインＣＰＵ１０で実行されるアプリケーションソフトウェアが外部機器へ送信すべき送信データの準備を完了したか否かを判定する。具体的には、サブＣＰＵ３１は、Ｓ１において発行された通知を受け取ったか否かを判定し、当該通知を受け取っている場合、送信データの準備が完了したと判定する。そして、サブＣＰＵ３１は、送信データの準備が完了したと判定した場合はＳ３に移行し、送信データの準備が完了していないと判定した場合はＳ１へ戻る。
【００２７】
Ｓ３では、サブＣＰＵ３１は、外部機器へ通信プロトコルに従った通信パケットの送信を実行するために、送信データをメインメモリ２０からサブシステム３０の内部バッファであるローカルメモリ３２へ移動する。このＳ３では、サブＣＰＵ３１は、ＤＭＡコントローラ３４に、メインメモリ２０からローカルメモリ３２へ送信データを移動するＤＭＡ転送を実行させる。
ＤＭＡ転送の設定では、まず、サブＣＰＵ３１がＤＭＡ転送の内容を記述したディスクリプタを生成してローカルメモリ３２に保存する。次に、サブＣＰＵ３１は、このディスクリプタを保存したローカルメモリ３２のアドレス情報をＤＭＡコントローラ３４にセットする。このようにして、サブＣＰＵ３１は、ＤＭＡコントローラ３４にＤＭＡ転送を実行させる。このＤＭＡ転送の完了をもって、サブＣＰＵ３１による通信プロトコルに従った送信処理の準備が完了したことになる。
【００２８】
Ｓ４では、サブＣＰＵ３１は、Ｓ３においてローカルメモリ３２に保存された送信データを所定のサイズに分割し、複数の通信パケットのペイロード部分を確定させ、通信パケットの数に対応した通信ヘッダを内部メモリ３５２に生成する。また、ＤＭＡコントローラ３４は、通信ヘッダを完成させるために必要となるチェックサム値を演算し、その演算結果を内部メモリ３５２に生成された通信ヘッダの所定の位置に書き込むことで通信ヘッダを完成させる。または、ＤＭＡコントローラ３４は、ローカルメモリ３２に通信パケットを書き込み、当該通信パケットの通信ヘッダの所定の位置に上記演算結果を書き込むことで通信パケットを完成させる。このＳ４における通信プロトコル処理の詳細については後述する。
【００２９】
Ｓ５では、サブＣＰＵ３１は、Ｓ４において確定されたペイロードに、Ｓ４において内部メモリ３５２に完成された通信ヘッダを付加して通信パケットを生成し、通信Ｉ／Ｆ３３を介して外部機器へ送信する処理を行う。あるいは、サブＣＰＵ３１は、Ｓ４においてＤＭＡコントローラ３４がローカルメモリ３２に完成させた通信パケットを、通信Ｉ／Ｆ３３を介して外部機器へ送信する処理を行う。
前者の場合、まず、サブＣＰＵ３１は、ローカルメモリ３２内の送信データをペイロード単位で切り出し、内部メモリ３５２内の通信ヘッダと結合して１つの通信パケットとして通信Ｉ／Ｆ３３に転送するＤＭＡ転送設定を実施する。後者の場合、まず、サブＣＰＵ３１は、ローカルメモリ３２に書き込まれた通信パケットを通信Ｉ／Ｆ３３に転送するＤＭＡ転送設定を実施する。次に、サブＣＰＵ３１は、ＤＭＡコントローラ３４を起動し、上記のＤＭＡ転送設定に従って、通信ヘッダとペイロード、あるいは通信パケットを通信Ｉ／Ｆ３３へＤＭＡ転送させる。これにより、通信Ｉ／Ｆ３３は、データリンク層（ＭＡＣ層）や物理層（ＰＨＹ層）の通信処理を行った後、ネットワーク３７を介して外部機器へ通信パケットを送信する。
【００３０】
Ｓ６では、サブＣＰＵ３１は、通信装置１００と外部機器との通信を終了させる事象が発生したか否かを判定する。そして、サブＣＰＵ３１は、外部機器との通信を終了させる事象が発生したと判定した場合はＳ７に移行し、外部機器との通信を終了させる事象が発生していないと判定した場合はＳ１に戻る。
例えば、メインＣＰＵ１０で実行しているアプリケーションソフトウェアが、ユーザからの操作などで通信装置１００と外部機器との接続を終了させる指示を検知した場合、外部機器との通信を終了させる事象となる。また、ユーザがネットワークケーブルを通信装置１００から抜くなどして通信回線が断絶したことを通信Ｉ／Ｆ３３が検知した場合も、外部機器との通信を終了させる事象となる。さらに、通信相手である外部機器から通信回線を切断する旨の通知を含んだ通信パケットを受信した場合も、同様に外部機器との通信を終了させる事象となる。
【００３１】
Ｓ７では、サブＣＰＵ３１は、通信装置１００と外部機器の通信を終了させる処理を実行する。具体的には、サブＣＰＵ３１が担っている通信プロトコル処理に従って、外部機器との通信回線を正常に切断する。そして、サブＣＰＵ３１は、ローカルメモリ３２やディスクリプタ処理部３５内の内部メモリ３５２に一時的に保存している関連情報を削除する。
その後、サブＣＰＵ３１からメインＣＰＵ２０へ、通信回線の切断完了の通知が伝達されると、アプリケーションソフトウェアで通信回線が切断したことをユーザなどへ示す表示を行うことができる。なお、このとき、ディスクリプタ生成部３５３ｂが持つ後述するカウンタの値も“０”にクリアされる。
【００３２】
次に、Ｓ４において実行される通信プロトコル処理の詳細について説明する。
図３は、Ｓ４において実行される通信プロトコル処理を示すフローチャートである。以下、主にディスクリプタ生成部３５３ｂによるディスクリプタに記述する情報の計算処理について説明する。
まずＳ４１において、サブＣＰＵ３１は、ディスクリプタ生成情報として、ディスクリプタ生成に必要な設定情報を準備する。また、このＳ４１では、サブＣＰＵ３１は、通信パケットの通信ヘッダを生成し、ディスクリプタ処理部３５内の生成レジスタ部３５１にディスクリプタ生成に必要な設定情報をセットする処理を実行する。ここで、上記設定情報は、図４の「生成レジスタ部へセットする情報」に示す設定情報４０１〜４０６である。これらの情報４０１〜４０６の内容について、以下に説明する。
【００３３】
設定情報４０１は、生成する通信パケットの種別であり、生成する通信パケットに使用される通信プロトコルがＴＣＰ、ＵＤＰのどちらであるかを判断するための情報である。設定情報４０１は、使用する通信プロトコルの通信ヘッダのサイズを示す情報であってもよい。ここで、通信ヘッダのサイズとは、ＭＡＣヘッダ長、ＩＰｖ４／ｖ６ヘッダ長、ＴＣＰ／ＵＤＰヘッダ長の各ヘッダ長のことである。
設定情報４０２は、転送元情報に対して実行される演算種別である。ここで転送元情報は、ＤＭＡコントローラ３４が転送元から入力するデータ（リード転送するデータ）である。この設定情報４０２は、リード転送部３４２がリードするデータに対して演算部３４４が実行する演算種別が、インターネットチェックサムであるか、インターネットチェックサムとペイロードサムとであるかを判断する情報である。
設定情報４０３は、生成する通信パケットの数であり、ディスクリプタ生成部３５３ｂが内部メモリ３５２に生成するディスクリプタの数を決定するための情報である。つまり、この設定情報４０３は、ディスクリプタチェーンするかを判断するための情報である。
【００３４】
設定情報４０４は、転送元アドレスであり、内部メモリ３５２に配置されている通信ヘッダの位置、もしくはローカルメモリ３２に配置されているペイロードの位置を特定するための情報である。ここで、設定情報４０４には、通信ヘッダが配置されているアドレスとしては、先頭アドレスのみ、ペイロードが配置されているアドレスとしては、全てのアドレスがセットされている。
設定情報４０５は、転送元情報のサイズであり、ローカルメモリ３２に配置されているペイロードのサイズを特定するための情報である。なお、内部メモリ３５２に配置されている通信ヘッダのサイズは、設定情報４０１の各ヘッダ長より計算することができるため、設定情報４０５には含まれない。
設定情報４０６は、最終的に生成する通信パケットを記憶するアドレスであり、ライト転送部３４３が、内部メモリ３５２、もしくはローカルメモリ３２、もしくは通信Ｉ／Ｆ３３のバッファメモリに転送するデータの種別を判断するための情報である。ここで、転送する情報は、チェックサム値の演算結果もしくは通信パケットである。この設定情報４０６のアドレスは、演算結果もしくは通信パケットをＤＭＡ転送するための情報でもある。
【００３５】
図３に戻って、Ｓ４１では、サブＣＰＵ３１は、ローカルメモリ３２に移動された送信データを所定のサイズに分割し、生成する通信パケットの数と各通信パケットのペイロードサイズとを決定する。例えば、サブＣＰＵ３１は、送信データをＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）単位で分割する。ここで、ＭＳＳは、ＴＣＰ／ＵＤＰにおける１セグメントで転送可能なデータ長である。
次に、サブＣＰＵ３１は、生成する通信パケットの数と同数の通信ヘッダをディスクリプタ処理部３５内の内部メモリ３５２に生成する。ここで、サブＣＰＵ３１は、内部メモリ３５２の連続した領域に複数の通信ヘッダを生成する。サブＣＰＵ３１は、通信ヘッダを生成した後、図４に示すディスクリプタ生成に必要な設定情報をディスクリプタ処理部３５内の生成レジスタ部３５１にセットする。
なお、通信ヘッダを完成させるために必要なチェックサム値は、ＤＭＡコントローラ３４の演算部３４４がＤＭＡ転送と同時に演算する。そのため、このＳ４１では、サブＣＰＵ３１はチェックサム値の演算を行わない。つまり、サブＣＰＵ３１は、チェックサム値の演算結果を除く通信ヘッダを生成する。
【００３６】
Ｓ４２では、サブＣＰＵ３１は、内部メモリ３５２に通信ヘッダを生成して、生成レジスタ部３５１に設定情報を準備したか否かを判定する。そして、サブＣＰＵ３１は、生成レジスタ部３５１に全ての設定情報が準備されたと判定すると、Ｓ４３に移行し、通信ヘッダの生成が完了していない、または全ての設定情報が準備されていないと判定するとＳ４１に戻る。
Ｓ４３では、サブＣＰＵ３１は、ディスクリプタ生成要求をディスクリプタ処理部３５内の生成レジスタ部３５１にセットすることで、ディスクリプタ処理部３５を起動する。
Ｓ４４以降の処理では、ディスクリプタ生成部３５３ｂは、図４に示す設定情報４０１〜４０６をもとに、ディスクリプタに記述する情報として、図４に示す出力情報４１１〜４１５を計算する。
【００３７】
出力情報４１１は、ＤＭＡコントローラ３４が連続してディスクリプタをリードする場合の、現在リードしているディスクリプタの次にリードするディスクリプタのアドレス情報である。本実施形態では、ディスクリプタは、内部メモリ３５２に記憶される。したがって、出力情報４１１は、内部メモリ３５２内のディスクリプタが記憶されている位置を示す情報となる。
出力情報４１２は、転送元情報のアドレスを示す転送元アドレスである。転送元情報は、通信ヘッダのみの場合と、通信ヘッダとペイロードの両方である場合とがある。したがって、出力情報４１２は、通信ヘッダが配置されているアドレス情報、あるいは通信ヘッダとペイロードとが配置されているアドレス情報となる。このアドレス情報は、通信ヘッダとペイロードとのそれぞれに対して、設定情報４０３に示される生成する通信パケットの数だけ用意される。
出力情報４１３は、転送元情報のサイズであり、通信ヘッダ、あるいは通信ヘッダとペイロードとのサイズ情報である。このサイズ情報は、通信ヘッダとペイロードとのそれぞれに対して、設定情報４０３に示される生成する通信パケットの数だけ用意される。
【００３８】
出力情報４１４は、転送先へ転送する情報のアドレスを示す転送先アドレスである。転送先へ転送する情報は、ＤＭＡコントローラ３４が転送先へ出力するデータ（ライト転送するデータ）であり、チェックサム値の演算結果のみの場合と、演算結果と通信パケットの両方である場合とがある。したがって、出力情報４１４は、演算結果を保存するアドレス情報、あるいは通信パケットと演算結果とを保存するアドレス情報となる。このアドレス情報は、内部メモリ３５２、ローカルメモリ３２、通信Ｉ／Ｆ３３のバッファメモリのいずれかのアドレスである。
出力情報４１５は、転送先へ転送する情報のサイズであり、通信パケットのサイズ情報である。ここで、出力情報４１５は、チェックサム値の演算結果のサイズ情報は含まない。演算結果は、常に２バイトの固定値であり、計算の必要がないためである。
【００３９】
図３に戻って、Ｓ４４では、ディスクリプタ生成部３５３ｂは、ＤＭＡコントローラ３４のリード転送部３４２およびライト転送部３４３がディスクリプタを連続して使用するか否か、つまり、ディスクリプタをチェーンするか否かを判定する。
具体的には、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、通信パケットを複数生成すると判定した場合、ディスクリプタをチェーンすると判定してＳ４５に移行する。一方、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、通信パケットを１つのみ生成すると判定した場合、Ｓ４６に移行する。このＳ４４では、ディスクリプタ生成部３５３ｂは、図４の設定情報４０３をもとにディスクリプタをチェーンするか否かを判定する。
【００４０】
Ｓ４５では、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、ＤＭＡコントローラ３４が次に読み込むディスクリプタのアドレスであるチェーン先アドレスを計算する。このＳ４５において計算されるチェーン先アドレスは、図４の「ディスクリプタ生成部が出力する情報」に含まれる出力情報４１１である。なお、チェーン先アドレス（出力情報４１１）の計算方法については、後述する。
Ｓ４６では、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、ＤＭＡコントローラ３４のリード転送部３４２が読み込む通信ヘッダの転送元アドレスと転送サイズとを計算する。このＳ４６において計算される転送元アドレスは、図４の出力情報４１２であり、転送サイズは、図４の出力情報４１３である。なお、転送元アドレス（出力情報４１２）および転送サイズ（出力情報４１３）の計算方法については、後述する。
【００４１】
Ｓ４７では、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、演算部３４４が演算する演算種別がインターネットチェックサムとペイロードサムとであるか否かを判定する。そして、ディスクリプタ生成部３５３ｂは、演算種別がインターネットチェックサムとペイロードサムとであると判定すると、Ｓ４８に移行し、そうでない場合はＳ４９へ移行する。このＳ４７では、ディスクリプタ生成部３５３ｂは、図４の設定情報４０２をもとに演算種別を判定する。
Ｓ４８では、ディスクリプタ生成部３５３ｂは、ＤＭＡコントローラ３４のリード転送部３４２が転送するペイロードの転送元アドレスと転送サイズとを計算する。このＳ４８において計算される転送元アドレスは、図４の出力情報４１２であり、転送サイズは、図４の出力情報４１３である。なお、転送元アドレス（出力情報４１２）および転送サイズ（出力情報４１３）の計算方法については、後述する。
【００４２】
Ｓ４９では、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、ライト転送部３４３が転送先へ転送する情報の種別を判定し、ライト転送部３４３がローカルメモリ３２に通信パケットを出力するか否かを判定する。このＳ４９では、ディスクリプタ生成部３５３ｂは、図４の設定情報４０６をもとにライト転送部３４３が出力するデータの種別を判定する。そして、ディスクリプタ生成部３５３ｂは、ライト転送部３４３が出力するデータに通信パケットが含まれると判定した場合はＳ５０に移行し、そうでない場合はＳ５２に移行する。
Ｓ５０では、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、ライト転送部３４３がローカルメモリ３２に転送する通信パケットの転送先アドレスと、当該通信パケットの転送サイズとを計算する。このＳ５０において計算される転送先アドレスは、図４の出力情報４１４であり、転送サイズは、図４の出力情報４１５である。なお、転送先アドレス（出力情報４１４）および転送サイズ（出力情報４１５）の計算方法については、後述する。
【００４３】
Ｓ５１では、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、演算部３４４がローカルメモリ３２に出力する演算結果の転送先アドレスを計算する。このＳ５１において計算される転送先アドレスは、図４の出力情報４１４であり、その計算方法については後述する。
Ｓ５２では、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報をもとに、演算部３４４が内部メモリ３５２に出力する演算結果の転送先アドレスを計算する。このＳ５２において計算される転送先アドレスは、図４の出力情報４１４であり、その計算方法については後述する。
【００４４】
Ｓ５３では、ディスクリプタ生成部３５３ｂは、上記の処理により計算された計算結果をディスクリプタに記述して内部メモリ３５２に記憶する。なお、ディスクリプタ生成部３５３ｂは、複数のディスクリプタを内部メモリ３５２に連続するように書き込む。
Ｓ５４では、ディスクリプタ生成部３５３ｂは、最小単位のカウントアップのみを実行し、Ｓ５５に移行する。例えば、ディスクリプタ生成部３５３ｂは、Ｓ５３から移行したときに最初のカウントアップを実行してカウンタ値を「１」とする。その後、ディスクリプタ生成部３５３ｂは、Ｓ５３から移行する度にカウントアップを実施して、カウンタ値を「２」、「３」、…のようにカウントアップする。このカウントアップ処理は、ディスクリプタ生成部３５３ｂが内部メモリ３５２に書き込んだディスクリプタの個数をカウントする意味をもっている。
【００４５】
Ｓ５５では、ディスクリプタ生成部３５３ｂは、Ｓ５４においてカウントアップされたカウンタ値、つまり生成されたディスクリプタの総数が、生成レジスタ部３５１にセットされた値と合致しているか否かを判定する。カウンタ値がセットされた値と合致している場合にはＳ５６に移行し、合致していない場合はＳ４４に戻る。なお、カウンタ値とディスクリプタの総数との対応付けは、予めサブＣＰＵ３１によって設定されている。
Ｓ５６では、コア部３５３のＤＭＡコントローラ制御部３５３ｃは、ＤＭＡコントローラ３４に対してＤＭＡ転送を要求する。これにより、ＤＭＡコントローラ３４は、ディスクリプタに従ってＤＭＡ転送を実行する。
【００４６】
具体的には、Ｓ５６においてＤＭＡコントローラ制御部３５３ｃは、Ｓ５５までの処理において生成されたディスクリプタが配置されているアドレスをセットする。これにより、ＤＭＡコントローラ制御部３５３ｃは、ＤＭＡコントローラ３４に対してＤＭＡ転送を要求する。ＤＭＡコントローラ３４は、ＤＭＡコントローラ制御部３５３ｃからＤＭＡ転送要求を受け取ることで起動され、セットされたディスクリプタの配置アドレスをもとにディスクリプタをリードする。そして、ＤＭＡコントローラ３４は、リードしたディスクリプタの内容に従って、ＤＭＡ転送を実行する。
次に、演算部３４４は、リード転送部３４２によって連続してリードされた通信ヘッダ、あるいは通信ヘッダとペイロードとに対して、転送レジスタ部３４１にセットされた設定情報に従って、インターネットチェックサム演算やペイロードサム演算を実行する。演算部３４４が演算を完了すると、ＤＭＡコントローラ３４は、演算結果を内部メモリ３５２に保存されている通信ヘッダの所定の位置に書き込み、演算結果を含む通信ヘッダを完成させる。あるいは、ＤＭＡコントローラ３４は、通信ヘッダをペイロードに結合した通信パケットをローカルメモリ３２に書き込み、さらに演算結果を当該通信パケットの通信ヘッダの所定の位置に書き込むことで、通信パケットを完成させる。このように、ＤＭＡコントローラ３４は、ディスクリプタに従ってＤＭＡ転送を実行し、内部メモリ３５２に通信ヘッダを完成させるか、もしくはローカルメモリ３２に通信パケットを完成させる。
通信ヘッダもしくは通信パケットが完成すると、図３の処理を終了し、図２のＳ５へ移行する。
【００４７】
以下、上記の出力情報４１１〜４１５を計算するアルゴリズムについて、詳細に説明する。
（出力情報４１１の計算アルゴリズム）
まず、出力情報４１１であるチェーン先アドレスを計算するアルゴリズムについて説明する。出力情報４１１は、設定情報４０２、４０３および４０６に基づいて計算することができる。この出力情報４１１は、図３のＳ４５において計算される。
出力情報４１１の計算の中の、転送元アドレスから転送元情報を転送するディスクリプタ、つまりリード用ディスクリプタのチェーン先アドレスの計算アルゴリズムは、以下のとおりである。
ディスクリプタ生成部３５３ｂは、設定情報４０２をもとに、転送元情報が通信ヘッダであるか、通信ヘッダとペイロードとであるかを判断し、生成するディスクリプタの種別を決定する。ここで、生成するディスクリプタの種別は、通信ヘッダをＤＭＡ転送するためのディスクリプタ、もしくは通信ヘッダとペイロードとをＤＭＡ転送するためのディスクリプタである。
【００４８】
ディスクリプタ生成部３５３ｂは、ディスクリプタの種別を通信ヘッダと決定すると、設定情報４０３と、ディスクリプタの先頭アドレスと、ディスクリプタのサイズとをもとに、通信ヘッダ用ディスクリプタのチェーン先アドレスを計算する。ここで、ディスクリプタの先頭アドレスは、内部メモリ３５２内のディスクリプタを保存する領域の先頭アドレスを指す。また、ディスクリプタのサイズは、固定値である。
出力情報４１１のチェーン先アドレスの計算式は、次式により表される。
（通信ヘッダ用ディスクリプタのチェーン先アドレス［Ｎ］）＝（通信ヘッダ用ディスクリプタの先頭アドレス）＋（ディスクリプタのサイズ）×（Ｎ＋１）  ………（１）
なお、上記Ｎは、カウント値であり、０から（生成する通信パケットの数（設定情報４０３）−１）の範囲の値である。ディスクリプタ生成部３５３ｂは、Ｎ＝０から１、２、３・・・とカウントアップし、チェーン先アドレスを計算する。以降のカウント値Ｎについても同様である。
このように、転送元情報が通信ヘッダのみの場合、通信ヘッダを転送するための通信ヘッダ用ディスクリプタには、次にリードする通信ヘッダ用ディスクリプタのアドレスがチェーン先アドレスとして記述される。つまり、通信ヘッダ用ディスクリプタから通信ヘッダ用ディスクリプタへチェーンするようにディスクリプタが生成されることになる。
【００４９】
一方、ディスクリプタ生成部３５３ｂは、ディスクリプタの種別を通信ヘッダとペイロードと決定すると、設定情報４０３と、ディスクリプタの先頭アドレスと、ディスクリプタのサイズとをもとに、チェーン先アドレスを計算する。このとき、ディスクリプタ生成部３５３ｂは、通信ヘッダ用ディスクリプタのチェーン先アドレスと、ペイロード用ディスクリプタのチェーン先アドレスとを計算する。計算式は以下のとおりである。
（通信ヘッダ用ディスクリプタのチェーン先アドレス［Ｎ］）＝（ペイロード用ディスクリプタの先頭アドレス）＋（ディスクリプタのサイズ）×Ｎ  ………（２）
（ペイロード用ディスクリプタのチェーン先アドレス［Ｎ］）＝（通信ヘッダ用ディスクリプタの先頭アドレス）＋（ディスクリプタのサイズ）×（Ｎ＋１）  ………（３）
このように、転送元情報が通信ヘッダとペイロードとである場合、通信ヘッダ用ディスクリプタには、次にリードするペイロード用ディスクリプタのアドレスがチェーン先アドレスとして記述される。また、ペイロード用ディスクリプタには、次にリードする通信ヘッダ用ディスクリプタのアドレスがチェーン先アドレスとして記述される。つまり、通信ヘッダ用ディスクリプタからペイロード用ディスクリプタへチェーンし、さらにペイロード用ディスクリプタから通信ヘッダ用ディスクリプタへチェーンするようにディスクリプタが生成されることになる。
【００５０】
次に、出力情報４１１の計算の中の、転送先アドレスへデータを転送するディスクリプタ、つまりライト用ディスクリプタのチェーン先アドレスの計算アルゴリズムについて説明する。
まず、ディスクリプタ生成部３５３ｂは、設定情報４０６をもとに、出力情報４１４の転送先アドレスへ転送するデータが、演算結果であるか、通信パケットと演算結果とであるかを判断し、生成するディスクリプタの種別を決定する。ここで、生成するディスクリプタの種別は、演算結果をＤＭＡ転送するためのディスクリプタ、もしくは通信パケットと演算結果とをＤＭＡ転送するためのディスクリプタである。
【００５１】
ディスクリプタ生成部３５３ｂは、生成するディスクリプタの種別を演算結果と決定すると、設定情報４０３と、ディスクリプタの先頭アドレスと、ディスクリプタのサイズとをもとに、演算結果用ディスクリプタのチェーン先アドレスを計算する。計算式は以下のとおりである。
（演算結果用ディスクリプタのチェーン先アドレス［Ｎ］）＝（演算結果用ディスクリプタの先頭アドレス）＋（ディスクリプタのサイズ）×（Ｎ＋１）  ………（４）
このように、転送先アドレスへ転送するデータが演算結果のみの場合、演算結果を転送するための演算結果用ディスクリプタには、次にリードする演算結果用ディスクリプタのアドレスがチェーン先アドレスとして記述される。つまり、演算結果用ディスクリプタから演算結果用ディスクリプタへチェーンするようにディスクリプタが生成されることになる。
【００５２】
一方、ディスクリプタ生成部３５３ｂは、生成するディスクリプタの種別を通信パケットと演算結果と決定すると、設定情報４０３と、ディスクリプタの先頭アドレスと、ディスクリプタのサイズともとに、チェーン先アドレスを計算する。ここで、ディスクリプタ生成部３５３ｂは、通信パケット用ディスクリプタのチェーン先アドレスと、演算結果用ディスクリプタのチェーン先アドレスとを計算する。計算式は以下のとおりである。
（通信パケット用ディスクリプタのチェーン先アドレス［Ｎ］）＝（演算結果用ディスクリプタの先頭アドレス）＋（ディスクリプタのサイズ）×Ｎ  ………（５）
（演算結果用ディスクリプタのチェーン先アドレス［Ｎ］）＝（通信パケット用ディスクリプタの先頭アドレス）＋（ディスクリプタのサイズ）×（Ｎ＋１）  ………（６）
このように、転送先アドレスへ転送するデータが通信パケットと演算結果とである場合、通信パケット用ディスクリプタには、次にリードする演算結果用ディスクリプタのアドレスがチェーン先アドレスとして記述される。また、演算結果用ディスクリプタには、次にリードする通信パケット用ディスクリプタのアドレスがチェーン先アドレスとして記述される。つまり、通信パケット用ディスクリプタから演算結果用ディスクリプタへチェーンし、さらに演算結果用ディスクリプタから通信パケット用ディスクリプタへチェーンするようにディスクリプタが生成されることになる。
【００５３】
（出力情報４１２、４１３の計算アルゴリズム）
次に、出力情報４１２および出力情報４１３の計算アルゴリズムについて説明する。
出力情報４１２の転送元アドレスは、設定情報４０３と、設定情報４０４とをもとに計算することができる。ここで、設定情報４０４は、連続する領域の先頭に配置されている通信ヘッダのアドレス、または転送する各ペイロードが配置されている全てのアドレスを指している。この出力情報４１２は、図３のＳ４６、Ｓ４８において計算される。
また、出力情報４１３の転送元情報のサイズは、設定情報４０１と、設定情報４０３と、設定情報４０５とから計算することができる。ここで、設定情報４０５は、転送する各ペイロードのサイズを指している。この出力情報４１３は、出力情報４１２と同様に、図３のＳ４６、Ｓ４８において計算される。
【００５４】
以下、出力情報４１２と出力情報４１３との計算の中の、通信ヘッダの転送元アドレスと、通信ヘッダの転送サイズとの計算アルゴリズムについて詳細に説明する。
通信ヘッダは、ディスクリプタ処理部３５の内部メモリ３５２の連続する領域に記憶されている。ディスクリプタ生成部３５３ｂは、設定情報４０１をもとに、使用する通信プロトコルのヘッダを判断し、各ヘッダ長から通信ヘッダのサイズを計算する。ここで、各ヘッダ長とは、ＭＡＣヘッダ、ＩＰｖ４／ｖ６ヘッダ、ＴＣＰ／ＵＤＰヘッダの長さを指す。通信ヘッダのサイズの計算式は以下のとおりである。次式により計算される通信ヘッダのサイズが出力情報４１３となる。
（通信ヘッダのサイズ）＝（ＭＡＣヘッダ長）＋（ＩＰｖ４／ｖ６ヘッダ長）＋（ＴＣＰ／ＵＤＰヘッダ長）  ………（７）
【００５５】
また、ディスクリプタ生成部３５３ｂは、設定情報４０３、４０４および出力情報４１３をもとに、通信ヘッダの転送元アドレスを計算する。ここで、転送元アドレスは、通信ヘッダが配置されている先頭アドレスを指す。通信ヘッダの転送元アドレスの計算式は、以下のとおりである。次式により計算される通信ヘッダの転送元アドレスが出力情報４１２となる。
（通信ヘッダの転送元アドレス［Ｎ］）＝（転送元アドレス）＋（通信ヘッダのサイズ）×Ｎ  ………（８）
【００５６】
例えば、上記（７）式により通信ヘッダのサイズが５４ｂｙｔｅ（０ｘ３６）、生成レジスタ部３５１にセットされた設定情報４０４の転送元アドレスが０ｘ０、設定情報４０３の生成する通信パケットの数が３とする。
この場合、一つ目の通信ヘッダの転送元アドレスは、
（通信ヘッダの転送元アドレス［０］）＝０ｘ０＋０ｘ３６×０＝０ｘ０
と計算できる。また、二つ目の通信ヘッダの転送元アドレスは、
（通信ヘッダの転送元アドレス［１］）＝０ｘ０＋０ｘ３６×１＝０ｘ３６
と計算できる。さらに、三つ目の通信ヘッダの転送元アドレスは、
（通信ヘッダの転送元アドレス［２］）＝０ｘ０＋０ｘ３６×２＝０ｘ６Ｃ
と計算できる。
【００５７】
次に、出力情報４１２と出力情報４１３の計算の中の、ペイロードの転送元アドレスと、ペイロードの転送サイズの計算アルゴリズムについて説明する。
ディスクリプタ生成部３５３ｂは、設定情報４０３と、設定情報４０４と、設定情報４０５と、ＭＳＳとにより、ペイロードの転送元アドレスを計算する。ここで、ＭＳＳは、ＴＣＰ／ＵＤＰにおける１セグメントで転送可能なデータ長である。また、設定情報４０４は、各ペイロードが配置されているアドレスを指し、設定情報４０５は、各ペイロードの転送サイズを指す。
【００５８】
そして、ディスクリプタ生成部３５３ｂは、設定情報４０５のサイズがＭＳＳより大きい場合、つまりペイロードのサイズがＭＳＳより大きい場合、ペイロードをＭＳＳ単位で分割して転送するためのディスクリプタを生成する。このため、ペイロードの転送サイズはＭＳＳであり、ペイロードサイズとＭＳＳの剰余が最後のペイロードサイズとなる。ペイロードの転送元アドレスと、最後のペイロードの転送サイズとの計算式は、以下のとおりである
（ペイロードの転送元アドレス［Ｎ］）＝（ペイロードの先頭アドレス）＋ＭＳＳ×Ｎ  ………（９）
（最後のペイロードの転送サイズ）＝（セットされたペイロードの転送サイズ）−ＭＳＳ×（生成する通信パケットの数−１）  ………（１０）
【００５９】
例えば、設定情報４０３の生成する通信パケットの数が３、設定情報４０４の転送元アドレスが０ｘ０、設定情報４０５の転送元情報のサイズが４０００ｂｙｔｅ（０ｘＦＡ０）、ＭＳＳが１４６０ｂｙｔｅ（０ｘ５Ｂ４）であるとする。この場合、転送元情報のサイズはＭＳＳよりも大きいため、上記（９）式によりペイロードの転送元アドレスを計算する。
一つ目のペイロードの転送元アドレスは、
（ペイロードの転送元アドレス［０］）＝０ｘ０＋０ｘ５Ｂ４×０＝０ｘ０
と計算できる。また、二つ目のペイロードの転送元アドレスは、
（ペイロードの転送元アドレス［１］）＝０ｘ０＋０ｘ５Ｂ４×１＝０ｘ５Ｂ４
と計算できる。さらに、三つ目のペイロードの転送元アドレスは、
（ペイロードの転送元アドレス［２］）＝０ｘ０＋０ｘ５Ｂ４×２＝０ｘＢ６８
と計算できる。
さらに、ペイロードの転送サイズは、ＭＳＳ単位で分割されるため、一つ目、二つ目のペイロードの転送サイズは、それぞれ０ｘ５Ｂ４（１４６０ｂｙｔｅ）となる。そして、三つ目のペイロードの転送サイズは、上記（１０）式により、
（最後のペイロードの転送サイズ）＝０ｘＦＡ０−０ｘ５Ｂ４×（３−１）＝０ｘ４３８（１０８０ｂｙｔｅ）
と計算できる。
【００６０】
一方、設定情報４０５の転送元情報のサイズがＭＳＳ以下である場合、つまりペイロードの転送サイズがＭＳＳ以下である場合、ディスクリプタ生成部３５３ｂは、以下のとおりペイロードの転送元アドレスと転送サイズとを計算する。つまり、ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報４０３、４０３および４０５をもとに、ペイロードの転送元アドレスと転送サイズとを計算する。ここで、設定情報４０４と設定情報４０５とは、設定情報４０４の生成する通信パケットの数だけ用意される。ペイロードの転送元アドレスと転送サイズの計算式は、以下のとおりである。
（ペイロードの転送元アドレス［Ｎ］）＝（セットされた転送元アドレス［Ｎ］）  ………（１１）
（ペイロードの転送サイズ［Ｎ］）＝（セットされたペイロードの転送サイズ［Ｎ］）  ………（１２）
【００６１】
（出力情報４１４、４１５の計算アルゴリズム）
次に、出力情報４１４および出力情報４１５の計算アルゴリズムについて説明する。
出力情報４１４の転送先アドレスは、設定情報４０３と、設定情報４０４と、設定情報４０６とから計算することができる。この出力情報４１４は、図３のＳ５０、Ｓ５１、Ｓ５２において計算される。
また、出力情報４１５の転送先へ転送する情報のサイズは、設定情報４０１と、設定情報４０３と、設定情報４０５とから計算することができる。この出力情報４１５は、図３のＳ５０において計算される。
ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報４０１をもとに、どのように通信パケットを生成するかを判断し、転送先へ転送する情報の種別を決定する。ここで、転送先へ転送する情報の種別は、チェックサム値の演算結果、または通信パケットと演算結果である。
【００６２】
ディスクリプタ生成部３５３ｂは、転送先へ転送する情報の種別を通信パケットと演算結果と決定すると、通信パケットと演算結果のそれぞれについて、転送先アドレスと情報のサイズとを計算する。
まず、ディスクリプタ生成部３５３ｂは、通信パケットの転送先アドレスを計算する。ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報４０６を、出力情報４１４の転送先アドレスとする。ここで、設定情報４０６は、設定情報４０３の生成する通信パケットの数だけ用意される。
（転送先アドレス［Ｎ］）＝（最終的に生成する通信パケットを記憶するアドレス［Ｎ］）  ………（１３）
【００６３】
次に、ディスクリプタ生成部３５３ｂは、設定情報４０１と、設定情報４０３と、設定情報４０５と、ＭＳＳとにより、通信パケットのサイズを計算する。具体的には、ディスクリプタ生成部３５３ｂは、設定情報４０１をもとに、使用する通信プロトコルを判断し、各ヘッダ長から通信ヘッダのサイズを計算する。これは、前述した出力情報４１３の計算と同様である。
そして、設定情報４０５のサイズがＭＳＳより大きい、つまりＭＳＳよりもペイロードのサイズが大きい場合、ディスクリプタ生成部３５３ｂは、通信パケットのサイズを以下の通り計算する。
（通信パケットのサイズ［Ｎ］）＝（通信ヘッダのサイズ）＋ＭＳＳ  ………（１４）
（最後の通信パケットのサイズ）＝（通信ヘッダのサイズ）＋（セットされたペイロードのサイズ）−ＭＳＳ×（生成する通信パケットの数−１）  ……..（１５）
【００６４】
例えば、設定情報４０３の生成する通信パケットの数が３、設定情報４０５の転送元情報のサイズが４０００ｂｙｔｅ（０ｘＦＡ０）、ＭＳＳが１４６０ｂｙｔｅ（０ｘ５Ｂ４）とする。また、通信ヘッダのサイズを５４ｂｙｔｅ（０ｘ３６）とする。この場合、設定情報４０５の転送元情報のサイズがＭＳＳよりも大きいため、ディスクリプタ生成部３５３ｂは、上記（１４）式により通信パケットのサイズを計算する。一つ目、二つ目の通信パケットのサイズは、
（通信パケットのサイズ）＝０ｘ３６＋０ｘ５Ｂ４＝０ｘ５ＥＡ
と計算できる。そして、三つ目の通信パケットのサイズは、上記（１５）式により、
（最後の通信パケットのサイズ）＝０ｘ３６＋０ｘＦＡ０−０ｘ５Ｂ４×（３−１）＝０ｘ４６Ｅ（１１３４ｂｙｔｅ）
と計算できる。
【００６５】
一方、設定情報４０５の転送元情報のサイズがＭＳＳ以下である場合、つまりペイロードの転送サイズがＭＳＳ以下である場合、ディスクリプタ生成部３５３ｂは、以下のとおり通信パケットのサイズを計算する。
（通信パケットのサイズ［Ｎ］）＝（通信ヘッダのサイズ）＋（セットされたペイロードのサイズ［Ｎ］）  ………（１６）
【００６６】
例えば、設定情報４０３の生成する通信パケットの数が３、設定情報４０５の転送元情報のサイズが２５６ｂｙｔｅ（０ｘ１００）、５１２ｂｙｔｅ（０ｘ２００）、１０２４ｂｙｔｅ（０ｘ４００）とする。また、通信ヘッダのサイズが５４ｂｙｔｅ（０ｘ３６）、ＭＳＳが１４６０ｂｙｔｅとする。この場合、設定情報４０５の転送元情報のサイズがＭＳＳ以下であるため、ディスクリプタ生成部３５３ｂは、上記（１６）式により通信パケットのサイズを計算する。一つ目の通信パケットのサイズは、
（通信パケットのサイズ［０］）＝０ｘ３６＋０ｘ１００＝０ｘ１３６（３１０ｂｙｔｅ）
と計算できる。また、二つ目の通信パケットのサイズは、
（通信パケットのサイズ［１］）＝０ｘ３６＋０ｘ２００＝０ｘ２３６（５６６ｂｙｔｅ）
と計算できる。さらに、三つ目の通信パケットのサイズは、
（通信パケットのサイズ［２］）＝０ｘ３６＋０ｘ４００＝０ｘ４３６（１０７８ｂｙｔｅ）
と計算できる。
【００６７】
次に、演算結果の転送先アドレスの計算アルゴリズムについて説明する。ここで説明する転送先アドレスの計算は、図３のＳ５１において実行される。なお、演算結果のサイズは、２バイトの固定値であるため、演算結果のサイズの計算は実施する必要がない。
ディスクリプタ生成部３５３ｂは、設定情報４０１と、設定情報４０３と、設定情報４０６とをもとに、以下のとおり演算結果の転送先アドレスを計算する。ここで、設定情報４０１の生成する通信パケットの種別は、ＭＡＣヘッダ長、ＩＰｖ４／ｖ６ヘッダ長を指し、設定情報４０６の最終的に生成する通信パケットを記憶するアドレスは、ローカルメモリ３２内の通信パケットの先頭アドレスを指す。
（転送先アドレス［Ｎ］）＝（最終的に生成する通信パケットを記憶するアドレス［Ｎ］）＋（ＭＡＣヘッダ長）＋（ＩＰｖ４／ｖ６ヘッダ長）＋（ＴＣＰ／ＵＤＰオフセット）  ………（１７）
ここで、ＴＣＰ／ＵＤＰオフセットは、ＴＣＰ／ＵＤＰヘッダの先頭アドレスから演算結果を挿入するアドレスまでのオフセット値である。具体的には、ＴＣＰオフセットは０ｘ１０、ＵＤＰオフセットは０ｘ６である。
【００６８】
例えば、設定情報４０３の生成する通信パケットの数が３、設定情報４０６の最終的に生成する通信パケットを記憶するアドレスが０ｘ１００、０ｘ４００、０ｘ８００とする。また、設定情報４０１の生成する通信パケットの種別より、ＭＡＣヘッダ長は１４ｂｙｔｅ（０ｘＥ）、ＩＰｖ４ヘッダ長は２０ｂｙｔｅ（０ｘ１４）として、ＴＣＰヘッダを使用するものとする。これらの場合、一つ目の演算結果の転送先アドレスは、
（転送先アドレス［０］）＝０ｘ１００＋０ｘＥ＋０ｘ１４＋０ｘ１０＝０ｘ１３２
と計算できる。また、二つ目の演算結果の転送先アドレスは、
（転送先アドレス［１］）＝０ｘ４００＋０ｘＥ＋０ｘ１４＋０ｘ１０＝０ｘ４３２
と計算できる。さらに、三つ目の演算結果の転送先アドレスは、
（転送先アドレス［２］）＝０ｘ８００＋０ｘＥ＋０ｘ１４＋０ｘ１０＝０ｘ８３２
と計算できる。
【００６９】
一方、ディスクリプタ生成部３５３ｂは、転送先へ転送する情報の種別を演算結果と決定すると、以下のとおり演算結果の転送先アドレスを計算する。ここで説明する転送先アドレスの計算は、図３のＳ５２において実行される。なお、演算結果のサイズは、２バイトの固定値であるため、当該演算結果のサイズの計算は実施する必要がない。
ディスクリプタ生成部３５３ｂは、生成レジスタ部３５１にセットされた設定情報４０３と、設定情報４０４とにより、演算結果の転送先アドレスを計算する。ここで、設定情報４０４の転送元アドレスは、内部メモリ３５２内の通信ヘッダの先頭アドレスを指す。演算結果の転送先アドレスの計算式は、以下のとおりである。
（転送先アドレス［Ｎ］）＝（通信ヘッダの先頭アドレス［Ｎ］）＋（ＭＡＣヘッダ長）＋（ＩＰｖ４／ｖ６ヘッダ長）＋（ＴＣＰ／ＵＤＰオフセット）  ………（１８）
【００７０】
例えば、設定情報４０３の生成する通信パケットの数が３、設定情報４０４の通信ヘッダの先頭アドレスが０ｘ０、０ｘ０ｘ８０、０ｘ１００、ＴＣＰオフセットが０ｘ１０とする。また、設定情報４０１の生成する通信パケットの種別より、ＭＡＣヘッダ長は１４ｂｙｔｅ（０ｘＥ）、ＩＰｖ４ヘッダ長は２０ｂｙｔｅとして（０ｘ１４）、ＴＣＰヘッダを使用するものとする。これらの場合、一つ目の演算結果の転送先アドレスは、
（転送先アドレス［０］）＝０ｘ０＋０ｘＥ＋０ｘ１４＋０ｘ１０＝０ｘ３２
と計算できる。また、二つ目の演算結果の転送先アドレスは、
（転送先アドレス［１］）＝０ｘ８０＋０ｘＥ＋０ｘ１４＋０ｘ１０＝０ｘＢ２
と計算できる。さらに、三つ目の演算結果の転送先アドレスは、
（転送先アドレス［２］）＝０ｘ１００＋０ｘＥ＋０ｘ１４＋０ｘ１０＝０ｘ１９６
と計算できる。
【００７１】
図５は、転送元アドレスから転送元情報を転送するディスクリプタチェーンの仕組みを示す図である。この図５では、ＤＭＡコントローラ３４が３つの通信パケットを転送する場合で、演算部３４４がインターネットチェックサムとペイロードサムとを演算する場合のディスクリプタチェーンの仕組みについて示している。
この場合、リード転送部３４２は、３つの通信ヘッダ５０１、５０３および５０５と、３つのペイロード５０２、５０４および５０６とを転送元アドレスから転送する。なお、図５では一例として、通信ヘッダは、ＭＡＣヘッダ、ＩＰｖ４ヘッダ、ＴＣＰヘッダにより構成されているが、ＩＰｖ６ヘッダ、ＵＤＰヘッダにより構成されていてもよい。
【００７２】
ディスクリプタ生成部３５３ｂは、リード転送部３４２によるリード転送を制御するために、通信ヘッダ用ディスクリプタ５１１、５１２および５１３と、ペイロード用ディスクリプタ５１４、５１５および５１６とを生成する。リード転送部３４２がデータを転送する順番は、１ｓｔ Ｐａｃｋｅｔの通信ヘッダ５０１、ペイロード５０２、２ｎｄ Ｐａｃｋｅｔの通信ヘッダ５０３、ペイロード５０４、３ｒｄ Ｐａｃｋｅｔの通信ヘッダ５０５、ペイロード５０６の順である。
図５において、通信ヘッダ用ディスクリプタ１（５１１）は、通信ヘッダ５０１をリードするためのディスクリプタであり、通信ヘッダ用ディスクリプタ２（５１２）は、通信ヘッダ５０３をリードするためのディスクリプタである。通信ヘッダ用ディスクリプタ３（５１３）は、通信ヘッダ５０５をリードするためのディスクリプタである。また、ペイロード用ディスクリプタ１（５１４）は、ペイロード５０２をリードするためのディスクリプタであり、ペイロード用ディスクリプタ２（５１５）は、ペイロード５０４をリードするためのディスクリプタである。ペイロード用ディスクリプタ３（５１６）は、ペイロード５０６をリードするためのディスクリプタである。
【００７３】
リード転送部３４２が上記の順番で通信ヘッダおよびペイロードをＤＭＡ転送するためには、リード転送部３４２は、図５の矢印で示す順に各ディスクリプタ５１１〜５１６を読み込む必要がある。したがって、各ディスクリプタに記述されるチェーン先アドレス（出力情報４１１）は、以下のとおりとなる。
通信ヘッダ用ディスクリプタ１（５１１）には、チェーン先アドレスとして、ペイロード用ディスクリプタ１（５１４）のアドレスが記述される。ペイロード用ディスクリプタ１（５１４）には、チェーン先アドレスとして、通信ヘッダ用ディスクリプタ２（５１２）のアドレスが記述される。そして、通信ヘッダ用ディスクリプタ２（５１２）には、チェーン先アドレスとして、ペイロード用ディスクリプタ２（５１５）のアドレスが記述される。以下同様に、ペイロード用ディスクリプタ２（５１５）には、通信ヘッダ用ディスクリプタ３（５１３）のアドレス、通信ヘッダ用ディスクリプタ３（５１３）には、ペイロード用ディスクリプタ３（５１６）のアドレスが記述される。そして、ディスクリプタチェーンの最後であるペイロード用ディスクリプタ３（５１６）については、チェーン先アドレスの記述は行われない。各ディスクリプタに記述されるチェーン先アドレスは、前述した計算式（２）（３）により計算される。
【００７４】
これにより、ＤＭＡコントローラ３４に対する一度の起動命令によって、ＤＭＡコントローラ３４は通信ヘッダおよびペイロードを連続してリードすることができる。
なお、リード転送部３４２が通信ヘッダ５０１、５０３および５０５のみをＤＭＡ転送する場合には、ディスクリプタ生成部３５３ｂは、通信ヘッダ用ディスクリプタのみを生成する。この場合、通信ヘッダ用ディスクリプタ１（５１１）には、チェーン先アドレスとして、通信ヘッダ用ディスクリプタ２（５１２）のアドレスが記述される。また、通信ヘッダ用ディスクリプタ２（５１２）には、チェーン先アドレスとして、通信ヘッダ用ディスクリプタ３（５１３）のアドレスが記述され、通信ヘッダ用ディスクリプタ３（５１３）には、チェーン先アドレスの記述は行われない。つまり、リード転送部３４２は、図５の破線の矢印で示す順に各ディスクリプタ５１１〜５１３を読み込むことになる。
【００７５】
図６は、転送先アドレスへデータを転送するディスクリプタチェーンの仕組みを示す図である。この図６では、ＤＭＡコントローラ３４のライト転送部３４３が３つの通信パケットを転送する場合のディスクリプタチェーンの仕組みについて示している。
この場合、ライト転送部３４３は、通信ヘッダとペイロードとで構成された３つの通信パケット６０１、６０３および６０５と、３つの演算結果６０２、６０４および６０６とを転送先アドレスへ転送する。なお、図６では一例として、通信パケット６０１、６０３および６０５に含まれる通信ヘッダは、ＭＡＣヘッダ、ＩＰｖ４ヘッダ、ＴＣＰヘッダにより構成されているが、ＩＰｖ６ヘッダ、ＵＤＰヘッダにより構成されていてもよい。
【００７６】
このとき、ディスクリプタ生成部３５３ｂは、ライト転送部３４３のライト転送を制御するために、通信パケット用ディスクリプタ６１１、６１２および６１３と、演算結果用ディスクリプタ６１４、６１５および６１６とを生成する。ライト転送部３４３がデータを転送する順番は、１ｓｔ Ｐａｃｋｅｔの通信パケット６０１、演算結果６０２、２ｎｄ Ｐａｃｋｅｔの通信パケット６０３、演算結果６０４、３ｒｄ Ｐａｃｋｅｔの通信パケット６０５、演算結果６０６の順である。
図６において、通信パケット用ディスクリプタ１（６１１）は、通信パケット６０１をリードするためのディスクリプタであり、通信パケット用ディスクリプタ２（６１２）は、通信パケット６０３をリードするためのディスクリプタである。通信パケット用ディスクリプタ３（６１３）は、通信パケット６０５をリードするためのディスクリプタである。また、演算結果用ディスクリプタ１（６１４）は、演算結果６０２をリードするためのディスクリプタであり、演算結果用ディスクリプタ２（６１５）は、演算結果６０４をリードするためのディスクリプタである。演算結果用ディスクリプタ３（６１６）は、演算結果６０６をリードするためのディスクリプタである。
【００７７】
ライト転送部３４３が上記の順番で通信パケットおよび演算結果をＤＭＡ転送するためには、ライト転送部３４３は、図６の矢印で示す順に各ディスクリプタ６１１〜６１６を読み込む必要がある。したがって、各ディスクリプタに記述されるチェーン先アドレス（出力情報４１１）は、以下のとおりとなる。
通信パケット用ディスクリプタ１（６１１）には、チェーン先アドレス（出力情報４１１）として、演算結果用ディスクリプタ１（６１４）のアドレスが記述される。演算結果用ディスクリプタ１（６１４）には、チェーン先アドレス（出力情報４１１）として、通信パケット用ディスクリプタ２（６１２）のアドレスが記述される。そして、通信パケット用ディスクリプタ２（６１２）には、チェーン先アドレス（出力情報４１１）として、演算結果用ディスクリプタ２（６１５）のアドレスが記述される。以下同様に、演算結果用ディスクリプタ２（６１５）には、通信パケット用ディスクリプタ３（６１３）のアドレス、通信パケット用ディスクリプタ３（６１３）には、演算結果用ディスクリプタ３（６１６）のアドレスが記述される。そして、ディスクリプタチェーンの最後である演算結果用ディスクリプタ３（６１６）については、チェーン先アドレス（出力情報４１１）の記述は行われない。各ディスクリプタに記述するチェーン先アドレス（出力情報４１１）は、前述した計算式（５）（６）により計算される。
【００７８】
これにより、ＤＭＡコントローラ３４に対する一度の起動命令によって、ＤＭＡコントローラ３４は通信パケットおよび演算結果を連続してライトすることができる。
なお、ライト転送部３４３が演算結果６０２、６０４および６０６のみをＤＭＡ転送する場合には、ディスクリプタ生成部３５３ｂは、演算結果用ディスクリプタのみを生成する。この場合、演算結果用ディスクリプタ１（６１４）には、チェーン先アドレスとして、演算結果用ディスクリプタ２（６１５）のアドレスが記述される。また、演算結果用ディスクリプタ２（６１５）には、チェーン先アドレスとして、演算結果用ディスクリプタ３（６１６）のアドレスが記述され、演算結果用ディスクリプタ３（６１６）には、チェーン先アドレスの記述は行われない。つまり、ライト転送部３４３は、図６の破線の矢印で示す順に各ディスクリプタ６１４〜６１５を読み込むことになる。
【００７９】
以上説明したように、通信装置１００は、ＤＭＡコントローラ３４と、ディスクリプタ処理部３５と、を備える。ディスクリプタ処理部３５は、ＤＭＡコントローラ３４のＤＭＡ転送を制御するためのディスクリプタを生成する。
本実施形態では、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４がデータを入力するデータ転送（リード転送）が、複数の通信ヘッダの転送であるか、通信ヘッダとペイロードとの転送であるかに関する情報を取得する。そして、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４が通信ヘッダのみをデータ転送する場合、通信ヘッダ用ディスクリプタから通信ヘッダ用ディスクリプタへチェーンするように、ディスクリプタを生成する。一方、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４が通信ヘッダとペイロードとをデータ転送する場合は、通信ヘッダ用ディスクリプタからペイロード用ディスクリプタへチェーンするように、ディスクリプタを生成する。
【００８０】
また、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４がデータを出力するデータ転送（ライト転送）が、複数の演算結果の転送であるか、演算結果と通信パケットとの転送であるかに関する情報を取得する。そして、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４が演算結果のみをデータ転送する場合、演算結果用ディスクリプタから演算結果用ディスクリプタへチェーンするように、ディスクリプタを生成する。一方、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４が演算結果と通信パケットとをデータ転送する場合は、通信パケット用ディスクリプタから演算結果用ディスクリプタへチェーンするように、ディスクリプタを生成する。
【００８１】
そして、ディスクリプタ処理部３５は、生成されたディスクリプタが記憶されている内部メモリ３５２のアドレスをＤＭＡコントローラ３４に設定することで、ＤＭＡコントローラ３４にデータ転送の開始を指示する。これにより、ＤＭＡコントローラ３４は起動され、ＤＭＡコントローラ３４は、ディスクリプタ処理部３５によって生成されたディスクリプタに従ってデータ転送（ＤＭＡ転送）を実行する。
【００８２】
このように、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４がＤＭＡ転送する情報の種別を判定し、連続する複数のディスクリプタを生成する。これにより、ＤＭＡコントローラ３４は、一度起動されると、ディスクリプタを連続して読み込み、連続してＤＭＡ転送を実行することになる。具体的には、ＤＭＡコントローラ３４は、通信ヘッダ、もしくは通信ヘッダとペイロードとを入力し、入力した上記データに対して実行した演算の演算結果、もしくは通信パケットと演算結果とを出力するＤＭＡ転送を実行する。
したがって、通信装置１００が外部機器に対してネットワーク経由で送信データを複数の通信パケットにより転送する場合、ＤＭＡコントローラ３４を一度起動させるだけで、複数の通信パケットを生成することができる。つまり、ＤＭＡコントローラ３４の制御にかかる処理時間を低減し、通信装置１００の送信処理能力を向上させることができる。
【００８３】
また、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４が出力するデータの種別に基づいて、ＤＭＡコントローラ３４がデータを入力するリード転送が、通信ヘッダのみの転送であるか、通信ヘッダとペイロードとの転送であるかを判定する。
例えば、ＤＭＡコントローラ３４が出力するデータがチェックサム値の演算結果である場合、演算の種別がインターネットチェックサムの演算である場合、ディスクリプタ処理部３５は、リード転送が複数の通信ヘッダの転送であると判定する。そして、演算の種別がインターネットチェックサムとペイロードサムとの演算である場合には、ディスクリプタ処理部３５は、リード転送が通信ヘッダとペイロードとの転送であると判定する。
このように、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４が出力するデータの種別に基づいて、リード転送の種別を適切に判定することができる。したがって、ＤＭＡコントローラ３４が複数のデータを適切に入力するためのディスクリプタを適切に生成することができる。
【００８４】
さらに、ディスクリプタ処理部３５は、ディスクリプタの生成に際し、ディスクリプタの生成に必要な設定情報を取得し、取得された設定情報に基づいてディスクリプタに記述する情報を計算する。ここで、設定情報は、生成する通信パケットの種別、最終的に生成する通信パケットを記憶するアドレス、生成する通信パケットの数、ＤＭＡコントローラ３４が入力するデータの転送元アドレスおよび転送元情報のサイズの少なくとも１つを含む。そして、ディスクリプタ処理部３５は、上記設定情報に基づいて、ディスクリプタに記述する情報として、チェーン先のディスクリプタのアドレスであるチェーン先アドレス、ＤＭＡコントローラ３４が転送するデータのアドレス情報およびサイズ情報を計算する。
【００８５】
チェーン先アドレスは、生成すべき通信パケットの数と、内部メモリ３５２における複数のディスクリプタの先頭アドレスと、ディスクリプタのサイズとに基づいて計算することができる。ここで、内部メモリ３５２は、チェーンさせる複数のディスクリプタを連続する領域に記憶する。
このように、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４が次にリードするディスクリプタのアドレスであるチェーン先アドレスを適切に計算し、チェーン先アドレスが記述されたディスクリプタを生成することができる。したがって、ＤＭＡコントローラ３４は、複数のデータを適切な順番で転送元から連続して入力することができる。
【００８６】
また、ＤＭＡコントローラ３４が入力するペイロードの転送元のアドレスは、生成すべき通信パケットの数と、ローカルメモリ３２における送信すべきデータの先頭アドレスと、所定のサイズ（本実施形態では、ＭＳＳ）とに基づいて計算することができる。ここで、生成すべき通信パケットの数は、送信すべきデータを上記所定のサイズで分割したペイロードの数である。
このように、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４がリードするペイロードの転送元のアドレスを適切に計算し、当該アドレスを、ペイロードをリード転送するためのディスクリプタに記述することができる。したがって、ＤＭＡコントローラ３４は、ＭＳＳよりも大きなデータを転送する場合、所定のサイズで分割された複数のペイロードを適切な順番で転送元から連続して入力することができる。
【００８７】
さらに、ＤＭＡコントローラ３４が出力する演算結果の転送先のアドレスは、生成すべき通信パケットの数と、内部メモリ３５２もしくはローカルメモリ３２における複数の通信ヘッダの先頭アドレスと、通信ヘッダのサイズとに基づいて計算することができる。ここで、内部メモリ３５２は、複数のペイロードにそれぞれ対応する複数の通信ヘッダを連続する領域に記憶する。
このように、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４がライトする演算結果の転送先のアドレスを適切に計算し、当該アドレスを、演算結果をライト転送するためのディスクリプタに記述することができる。したがって、ＤＭＡコントローラ３４は、演算結果を通信ヘッダの適切な位置に書き込むことができる。
【００８８】
なお、上記実施形態においては、ディスクリプタ処理部３５は、図３のＳ４７において、チェックサム値の演算の種別にペイロードサムの演算が含まれるか否かを判定し、その判定結果をもとにリード転送の種別を判定する場合について説明した。しかしながら、ディスクリプタ処理部３５は、ＤＭＡコントローラ３４が出力するデータに通信パケットが含まれると判定した場合、リード転送が通信ヘッダとペイロードとの転送であると判定してもよい。つまり、上記の演算の種別にペイロードサムの演算が含まれない場合であっても、ＤＭＡコントローラ３４が通信パケットを出力する場合には、リード転送が通信ヘッダとペイロードとの転送であると判定するようにしてもよい。
【００８９】
また、上記実施形態においては、ＤＭＡコントローラ３４が入力する転送元情報が通信ヘッダとペイロードである場合について説明したが、転送元情報は上記に限定されない。また、ＤＭＡコントローラ３４が転送先へ転送する情報も、演算結果と通信パケットに限定されない。ディスクリプタ処理部３５は、ＤＭＡコントローラ３４によるＤＭＡ転送が第１のデータのみの転送であるか、第１のデータと第２のデータとの転送であるかを判定し、ＤＭＡ転送の種別に応じてディスクリプタチェーンを生成するようにしてもよい。
【００９０】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記録媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９１】
１０…メインＣＰＵ、２０…メインメモリ、３０…サブシステム、３１…サブＣＰＵ、３２…ローカルメモリ、３３…通信Ｉ／Ｆ、３４…ＤＭＡコントローラ、３５…ディスクリプタ処理部、１００…通信装置
【図１】
2019139638.tif 000003
【図２】
2019139638.tif 000004
【図３】
2019139638.tif 000005
【図４】
2019139638.tif 000006
【図５】
2019139638.tif 000007
【図６】
2019139638.tif 000008