(57)【要約】【課題】少なくとも一部でハードウエアを使用する通信プロトコル処理において、通信パケットを効率的に生成することができる通信装置を提供する。【解決手段】通信装置は、通信ヘッダを生成し、生成された通信ヘッダを送信すべきデータに付加して通信パケットを生成する生成手段と、生成手段による通信ヘッダの生成に連続して生成手段に通信パケットを生成させる第１の動作モードと、生成手段による通信ヘッダの生成の後生成手段を停止させ、その後生成手段を起動して通信パケットを生成させる第２の動作モードとのいずれかを選択し、生成手段を選択されたいずれかの動作モードで動作させるよう制御する制御手段とを備える。【選択図】  図２
2019103101.tif 000002
【特許請求の範囲】
【請求項１】
通信ヘッダを生成し、生成された前記通信ヘッダを送信すべきデータに付加して通信パケットを生成する生成手段と、
前記生成手段による前記通信ヘッダの生成に連続して前記生成手段に前記通信パケットを生成させる第１の動作モードと、前記生成手段による前記通信ヘッダの生成の後、前記生成手段を停止させ、その後、前記生成手段を起動して前記通信パケットを生成させる第２の動作モードとのいずれかを選択し、前記生成手段を選択されたいずれかの動作モードで動作させるよう制御する制御手段と、
を備えることを特徴とする通信装置。
【請求項２】
前記送信すべきデータを記憶して前記生成手段へ供給する第１のメモリをさらに備え、
前記制御手段は、前記生成手段により前記通信ヘッダを生成する際に、前記第１のメモリへ前記送信すべきデータを取り込み可能である場合に前記第１の動作モードを選択し、前記メモリへ前記送信すべきデータを取り込み可能でない場合に前記第２の動作モードを選択する、
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記生成手段はレジスタを備え、
前記制御手段は、選択された動作モードを前記レジスタに設定することにより、前記生成手段を選択されたいずれかの動作モードで動作させる、
ことを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記第２の動作モードにおいて、前記生成手段は、前記制御手段へ割り込み信号を通知することにより、前記生成手段を停止したことを通知する、
ことを特徴とする請求項１から３のいずれか１項に記載の通信装置。
【請求項５】
前記生成手段により生成される前記通信ヘッダを記憶する第２のメモリをさらに備え、
前記生成手段は、前記制御手段により通知される生成すべき通信パケットの数に基づいて、ひな形となる通信ヘッダを複製し、複製した通信ヘッダを編集することにより、複数の通信ヘッダを生成し、生成された複数の通信ヘッダを前記第２のメモリに記憶する、
ことを特徴とする請求項１から４のいずれか１項に記載の通信装置。
【請求項６】
前記生成手段は、前記制御手段により通知される各通信パケットのペイロードのサイズに基づいて、前記送信すべきデータを分割して複数のペイロードを取得し、前記複数のペイロードのそれぞれに前記通信ヘッダを付加して、複数の通信パケットを生成する、
ことを特徴とする請求項１から５のいずれか１項に記載の通信装置。
【請求項７】
前記第１のメモリと前記生成手段との間のデータ転送は、ＤＭＡ（Ｄｉｒｅｃｔ Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送により実行される、
ことを特徴とする請求項１から６のいずれか１項に記載の通信装置。
【請求項８】
前記通信ヘッダのチェックサム値を演算する演算器をさらに備え、
前記生成手段は、前記演算器により演算された前記チェックサム値を対応する通信ヘッダに書き込む、
ことを特徴とする請求項１から７のいずれか１項に記載の通信装置。
【請求項９】
前記生成手段は、ハードウエアアクセラレータにより構成される、
ことを特徴とする請求項１から８のいずれか１項に記載の通信装置。
【請求項１０】
前記生成手段により生成された前記通信パケットを送信する送信手段をさらに備え、
前記制御手段は、前記生成手段により前記通信ヘッダを生成する際に、前記送信手段の送信バッファに空きがある場合に前記第１の動作モードを選択し、前記送信バッファに空きがない場合に前記第２の動作モードを選択する、
ことを特徴とする請求項１から９のいずれか１項に記載の通信装置。
【請求項１１】
前記第１の動作モードと前記第２の動作モードの間の選択条件を設定する設定手段をさらに備え、
前記制御手段は、前記設定手段により設定された前記選択条件に基づいて、前記第１の動作モードと前記第２の動作モードとのいずれかを選択する、
ことを特徴とする請求項１から１０のいずれか１項に記載の通信装置。
【請求項１２】
前記設定手段は、前記第２の動作モードでの前記通信パケットの送信タイミングをさらに設定し、
前記制御手段は、前記設定手段により設定された前記送信タイミングに基づいて、前記生成手段に前記通信パケットを生成させる、
ことを特徴とする請求項１１に記載の通信装置。
【請求項１３】
前記制御手段は、前記通信パケットがＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）パケットである場合に、前記第２の動作モードを選択する、
ことを特徴とする請求項１から１２のいずれか１項に記載の通信装置。
【請求項１４】
前記第２の動作モードにおいて、前記生成手段は、前記制御手段から、前記通信ヘッダ生成を継続させる指示を通知された場合、前記通信ヘッダを生成し、前記通信ヘッダ生成を継続させる指示を通知されない場合、前記生成手段をリセットする、
ことを特徴とする請求項１から１３のいずれか１項に記載の通信装置。
【請求項１５】
通信パケットを送信する通信装置の制御方法であって、
通信ヘッダを生成手段に生成させるステップと、
前記生成手段に生成された前記通信ヘッダを送信すべきデータに付加して通信パケットを生成させるステップと、
前記通信ヘッダの生成に連続して前記通信パケットを生成させる第１の動作モードと、前記通信ヘッダの生成の後、前記生成手段を停止させ、その後、前記生成手段を起動して前記通信パケットを生成させる第２の動作モードとのいずれかを選択し、前記生成手段を選択されたいずれかの動作モードで動作させるよう制御するステップと、
を備えることを特徴とする通信装置の制御方法。
【請求項１６】
コンピュータを、請求項１から１４のいずれか１項に記載の通信装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信装置の制御方法およびプログラムに関する。
【背景技術】
【０００２】
近年急速に増加しているいわゆるスマートデバイス等の多機能端末上では、ネットワーク経由で配信される高解像度動画（８Ｋ／４Ｋ）をリアルタイムで閲覧することができる。こうした高解像度動画を閲覧するニーズの増加に伴って、動画配信のためのデータトラフィックが増大している。
一方、Ｅｔｈｅｒｎｅｔ（登録商標）による１０Ｇｂｐｓ通信、移動体通信の５Ｇ通信等、データトラフィックの増大に対応すべくネットワークの高速化が進展している。こうしたネットワークの高速化に伴って、各通信プロトコルで規定された処理である通信プロトコル処理の効率化が要請されている。こうした通信プロトコルにはＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）やＵＤＰ（Ｕｓｅｒ Ｄａｔａｇｒａｍ Ｐｒｏｔｏｃｏｌ）等がある。
【０００３】
通信プロトコル処理においてデータを送信するためには、まず通信ヘッダや通信フッタを生成し、生成された通信ヘッダや通信フッタを送信すべきデータに付加して通信パケットを生成する必要がある。このため、高速データ通信を実現するためには、通信プロトコル処理における通信パケットを生成する処理の効率化は欠かせないものとなる。しかしながら、通信パケット生成を高速で実行しなければならないＣＰＵへの負荷はそれだけ高まることになる。
【０００４】
そこでこのようなＣＰＵによる通信プロトコル処理負荷を低減させる手法が提案されている。
例えば、特許文献１は、通信プロトコル処理における通信パケットを生成する処理で発生するメモリへのコピー回数を低減してスループットを向上させる技術を開示する。
具体的には、特許文献１の技術によれば、パケット処理装置は、送信するデータを記憶装置に記憶する際に、所定のデータ長毎に分割する。そして、パケット処理装置は、複数の分割データを、第一のブランク領域と第二のブランク領域がそれぞれ確保されるよう、記憶装置に離間配置する。第一のブランク領域にはプロトコルヘッダが、第二のブランク領域にはプロトコルフッタがそれぞれ格納されて、通信パケットが生成される。
【０００５】
これにより、プロトコルヘッダ等を付加する際に、これらを含むデータごと記憶装置にその都度コピーすることが不要となるためスループットが向上する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−１６７９６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に記載した通信パケット生成処理は、ＣＰＵがソフトウエアを実行することで通信プロトコル処理が実行されることを前提とするものであり、高解像度動画等の高速データ通信における高負荷に十分に対応できない場合がある。
一方、ハードウエアアクセラレータ等の専用ハードウエアによって、通信プロトコル処理の一部となる通信ヘッダや通信フッタの生成、またチェックサム演算等を実行して、より高速に通信パケットを生成する手法も提案されている。この場合、専用ハードウエアは通信プロトコル処理の一部を実行するに過ぎないため、通信プロトコル処理全体において、こうした専用ハードウエアの各機能をどのようなタイミングで実行するかを制御する必要がある。
【０００８】
具体的には、例えば、送信すべきデータの準備、ネットワークを介した通信パケットの送出等は、通信パケットを生成する専用ハードウエア外のアプリケーションソフトウエアや各機能モジュールにより実行される。このため、専用ハードウエア自体は、それぞれの機能モジュールの様々な状態を把握することができない。したがって、それぞれの機能モジュールの状態によっては専用ハードウエアにアイドルタイム（処理待ち時間）が発生してしまい、通信パケットの生成が遅延してしまう。
例えば、通信パケットを送信する際、送信すべきデータの準備が完了していなければ、専用ハードウエアは通信パケットを生成することができないためアイドルタイムが発生してしまい、効率的な通信パケットの生成および送信が妨げられてしまう。ここで、上記の特許文献１では、通信プロトコル処理の一部の処理をハードウエアで実行するものではないため、通信装置内の各機能モジュールの状態に応じてハードウエアの各機能をどのタイミングで実行するかを適切に制御することは想定していない。
【０００９】
本発明は、上述の課題に鑑みてなされたものであり、少なくとも一部でハードウエアを使用する通信プロトコル処理において、通信パケットを効率的に生成することが可能な通信装置、通信装置の制御方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明に係る通信装置のある態様によれば、通信ヘッダを生成し、生成された前記通信ヘッダを送信すべきデータに付加して通信パケットを生成する生成手段と、前記生成手段による前記通信ヘッダの生成に連続して前記生成手段に前記通信パケットを生成させる第１の動作モードと、前記生成手段による前記通信ヘッダの生成の後前記生成手段を停止させ、その後前記生成手段を起動して前記通信パケットを生成させる第２の動作モードとのいずれかを選択し、前記生成手段を選択されたいずれかの動作モードで動作させるよう制御する制御手段と、を備える通信装置が提供される。
【発明の効果】
【００１１】
本発明によれば、少なくとも一部でハードウエアを使用する通信プロトコル処理において、通信パケットを効率的に生成することができる。
【図面の簡単な説明】
【００１２】
【図１】本実施形態に係る通信装置１のハードウエアおよび機能構成の一例を示すブロック図
【図２】実施形態１において通信装置１が実行する通信パケット生成および送信処理の処理手順の一例を示すフローチャート
【図３】実施形態２において通信装置１が実行する通信パケット生成および送信処理の処理手順の一例を示すフローチャート
【図４】各実施形態における第１の動作モードおよび第２の動作モード、並びに動作モード切替がない場合の通信パケット生成および送信動作を示すタイミングチャート
【図５】実施形態３において通信装置１が実行する通信パケット生成および送信処理の処理手順の一例を示すフローチャート
【図６】実施形態４において通信装置１が実行する通信パケット生成および送信処理の処理手順の一例を示すフローチャート
【図７】実施形態５において通信装置１が実行する通信パケット生成および送信処理の処理手順の一例を示すフローチャート
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して、本発明を実施するための実施形態について詳細に説明する。なお、以下に説明する実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されるべきものであり、本発明は以下の実施形態に必ずしも限定されるものではない。また、本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成については、同じ符号を付して説明する。
【００１４】
（実施形態１）
本実施形態においては、ハードウエアにより通信プロトコル処理の一部を実行する通信装置において、通信装置の内部処理や通信プロトコル処理の状態に応じて、複数の動作モードから適切な動作モードを選択して通信プロトコル処理の一部を実行する。
ここで、通信装置のハードウエアが実行する通信プロトコル処理の一部は、例えば、送信すべきデータに付加される通信ヘッダおよび通信フッタを生成する処理、送信すべきデータを通信パケットのペイロードに分割する処理を含む。さらに、ハードウエアが実行する通信プロトコル処理の一部は、分割されたペイロードに通信ヘッダおよび通信フッタをそれぞれ付加して通信パケットを生成する処理を含む。
【００１５】
以下、別段の定義がない限り、「通信ヘッダ」は、「通信ヘッダ」および「通信フッタ」の双方を含むものとする。また、ペイロードに通信ヘッダを「付加」するとは、ペイロードに通信ヘッダを付け加える場合の他、論理的に対応付ける場合を含む。
具体的には、本実施形態において、通信装置は、第１の動作モードおよび第２のモードを切り替えて動作する。第１の動作モードでは、通信装置のハードウエアは、通信ヘッダを生成するとともに、連続して、送信すべきデータをペイロード分割し、分割されたペイロードに通信ヘッダを付加して通信パケットを生成する。一方、第２の動作モードでは、通信装置のハードウエアは、通信ヘッダを生成した後一旦停止し、通信パケットを生成可能な状態となったことを契機に送信すべきデータをペイロード分割し、分割されたペイロードに通信ヘッダを付加して通信パケットを生成する。
【００１６】
本実施形態では、通信装置は、送信すべきデータの準備が完了したか否かを判定し、送信すべきデータの準備が完了している場合は第１の動作モードで、完了していない場合は第２の動作モードで動作するよう制御される。
これにより、送信すべきデータの準備が完了していない場合であっても、通信ヘッダを先行して投機的に生成することで、通信パケットをより高速、効率的に生成することができる。
【００１７】
＜本実施形態のハードウエアおよび機能構成＞
図１は、本実施形態に係る通信装置のハードウエア構成および機能構成の一例を示す図である。
【００１８】
通信装置１の各機能モジュールのうち、ソフトウエアにより実現される機能については、各機能モジュールの機能を提供するためのプログラムがＲＯＭ等のメモリに記憶され、ＲＡＭに読み出してＣＰＵが実行することにより実現される。ハードウエアにより実現される機能については、例えば、所定のコンパイラを用いることで、各機能モジュールの機能を実現するためのプログラムからＦＰＧＡ上に自動的に専用回路を生成すればよい。ＦＰＧＡとは、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略である。また、ＦＰＧＡと同様にしてＧａｔｅ  Ａｒｒａｙ回路を形成し、ハードウエアとして実現するようにしてもよい。また、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）により実現するようにしてもよい。なお、図１に示した機能ブロックの構成は一例であり、複数の機能ブロックが１つの機能ブロックを構成するようにしてもよいし、いずれかの機能ブロックが複数の機能を行うブロックに分かれてもよい。
【００１９】
通信装置１は、サブシステム２と、メインＣＰＵ３と、メインメモリ４とを備える。サブシステム２は、各通信プロトコルで規定された処理である通信プロトコル処理を実行する。サブシステム２、メインＣＰＵ３、およびメインメモリ４は、システムバス５を介して相互に接続されている。
メインＣＰＵ３は、通信装置１上で稼働するアプリケーションソフトウエアを実行するとともに、通信装置１全体の制御を実行する。具体的には、メインＣＰＵ３は、アプリケーションソフトウエアを実行する上で必要となるデータやプログラムなどをメインメモリ４の内部に記憶し、必要に応じてシステムバス５を介して読み出しや書き込みを行う。
【００２０】
メインメモリ４は、システムバス５を介して、通信装置１内の各機能ブロックが共有して利用可能なメモリであり、例えば主としてＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリで構成されてよい。メインメモリ４内部の領域は、プログラムを格納する領域やアプリケーションソフトウエアが使用するアプリケーションバッファ領域などに分けられる。
サブシステム２は、サブＣＰＵ２１と、ローカルメモリ２２と、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ２３と、通信Ｉ／Ｆ２４と、ヘッダ処理部２５とを備える。サブＣＰＵ２１、ローカルメモリ２２、ＤＭＡコントローラ２３、通信Ｉ／Ｆ２４、およびヘッダ処理部２５は、ローカルバス２６を介して相互に接続されている。
【００２１】
サブシステム２は、通信装置１における通信プロトコル処理を実行するサブシステムであり、特に、サブシステム２は、ＴＣＰ／ＩＰプロトコル等の通信プロトコル処理に特化して外部機器とネットワークを介したデータ転送処理を担う。本実施形態において、サブシステム２は、通信プロトコル処理専用のハードウエア（ハードウエアアクセラレータ）を搭載して、通信プロトコル処理の一部をメインＣＰＵ３に替えて高速で実行する。
なお、ＴＣＰ／ＩＰプロトコルは説明を行うために示す一例であり、サブシステム２は、その他の通信プロトコルの通信プロトコル処理を実行することができる。以下、ＴＣＰ／ＩＰプロトコルは、別段の定義のない限り、ＵＤＰプロトコルを含むものとして説明する。
【００２２】
サブＣＰＵ２１は、サブシステム２による通信プロトコル処理全体の実行を制御する。具体的には、サブＣＰＵ２１は、ＩＰｖ４（ＩＰバージョン４）、ＩＰｖ６（ＩＰバージョン６）、ＵＤＰ、ＴＣＰ等の各通信プロトコル処理を実行する。サブＣＰＵ２１が実行する通信プロトコル処理は、送信シーケンス制御、輻輳制御、通信エラー制御等を含む。
なお、サブＣＰＵ２１は、１つのプロセッサとして構成してもよいし、複数のプロセッサによるマルチプロセッサ構成としてもよい。さらに、サブＣＰＵ２１は、プロセッサと一部の機能をアクセラレートするハードウエア（ハードウエアアクセラレータ）とで構成してもよい。
【００２３】
ローカルメモリ２２は、サブシステム２のサブＣＰＵ２１が利用可能なメモリであり、例えば、主としてＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリで構成されてよい。
また、ローカルメモリ２２は、メインＣＰＵ３からもシステムバス５およびローカルバス２６を介してアクセス可能である。ローカルメモリ２２は、通信プロトコル処理を実行する上で必要となる送受信データや各種の設定情報などを内部に記憶し、必要に応じてサブシステム２の各機能モジュールがローカルバス２６を介して読み出しや書き込みを実行する。図１では、アプリケーションソフトウエアにより準備され、メインメモリ４から転送された送信データ２２１がローカルメモリ２２に記憶されている。
【００２４】
ＤＭＡコントローラ２３は、サブＣＰＵ２１およびヘッダ処理部２５双方から直接制御可能であり、ローカルメモリ２２へのアクセスを提供し、ＤＭＡ転送処理を実行する。ＤＭＡコントローラ２３は、ＤＭＡ転送部２３１およびチェックサム演算器２３２を備える。
ＤＭＡコントローラ２３は、ディスクリプタに記述された内容に従ってソース側からディスティネーション側へデータ転送を実行する。このディスクリプタには、データ転送元となるソース側のメモリ等のアドレス情報、データ転送先となるディスティネーション側のメモリ等のアドレス情報、およびデータ転送の転送サイズ等の情報が記述される。
【００２５】
具体的には、サブＣＰＵ２１等の、ローカルバス２６に対してマスターとなる機能を持つ機能ブロックが、ローカルメモリ２２にデスクリプタを書き込み、その後ＤＭＡコントローラ２３に対してＤＭＡ転送開始指示を通知する。ＤＭＡ転送開始指示を通知するには、例えばデスクリプタを保存しているローカルメモリ２２のアドレス情報を設定すればよい。
【００２６】
このＤＭＡ転送開始指示の通知を受けたＤＭＡコントローラ２３は、メインメモリ４とローカルメモリ２２との間、内部メモリ２５２とローカルメモリ２２との間のＤＭＡ転送処理を実行する。さらにＤＭＡコントローラ２３は、内部メモリ２５２と通信Ｉ／Ｆとの間、ローカルメモリ２２と通信Ｉ／Ｆとの間のＤＭＡ転送処理も実行する。これらのＤＭＡ転送処理は、ＤＭＡコントローラ２３に備えられるＤＭＡ転送部２３１が実行する。
【００２７】
ＤＭＡコントローラ２３のチェックサム演算器２３２は、転送されるデータについて１６ｂｉｔ単位で１の補数和を計算する演算機能を装備する。チェックサム演算器２３２はまた、演算結果を転送されるデータの末尾に付加して転送する機能、あるいは演算結果だけを出力する機能を装備する。
通信Ｉ／Ｆ２４は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等で構成されるネットワーク２７とのインターフェースであり、外部装置との通信における物理層（ＰＨＹ層）とデータリンク層（ＭＡＣ層）の通信制御を担っている。
【００２８】
通信Ｉ／Ｆ２４は、内部に送受信データを一時的に蓄積するバッファメモリを装備し、ＤＭＡコントローラ２３のＤＭＡ転送によって、送受信データの入出力が行われる。なお、図１の構成に替えて、通信Ｉ／Ｆ２４がＤＭＡコントローラ２３を内蔵して、この内蔵ＤＭＡコントローラ２３を使用してもよい。
ヘッダ処理部２５は、コア部２５１と、内部メモリ２５２とを備える。このヘッダ処理部２５は、通信プロトコル処理における通信ヘッダの生成、送信すべきデータのペイロード分割、および分割されたペイロードへ通信ヘッダを付加して通信パケットを生成する各処理を実行する処理部である。
【００２９】
本実施形態において、ヘッダ処理部２５は、サブＣＰＵ２１が実行する通信プロトコル処理のうち、その一部である上記各処理を肩代わりして実行する機能ブロックである。
コア部２５１の通信ヘッダ生成部２５１ａは、レジスタ部２５１ｂに入力されたひな形となるヘッダ情報（以下、「ひな形ヘッダ」という。）および通信ヘッダ生成のための編集情報に従って、複数の通信ヘッダ２５２ａを生成して内部メモリ２５２に記憶する。すなわち、通信ヘッダ生成部２５１ａは、生成すべき通信パケットの数に基づいてひな形ヘッダを複製し、複製した通信ヘッダを編集情報に基づいて編集することにより、複数の通信ヘッダ２５２ａを生成する。
【００３０】
コア部２５１のレジスタ部２５１ｂは、ヘッダ処理部２５を制御するための設定情報を入力する機能と、ヘッダ処理部２５内の状態を確認するためのステータス情報を表示等で出力する機能とを有する。レジスタ部２５１ｂはまた、レジスタ部２５１ｂでステータス情報を表示するだけでなく、外部へ割込み信号を使用して通知する機能も装備する。
内部メモリ２５２は、ヘッダ処理部２５内に設けられ、コア部２５およびサブＣＰＵ２１からアクセス可能なメモリであり、例えば主としてＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリで構成されている。内部メモリ２５２は、コア部２５１により生成された通信ヘッダ２５２ａを記憶する。
【００３１】
さらに、ヘッダ処理部２５は、サブＣＰＵ２１と同様、ローカルバス２６に対してマスターとなる機能を持ち、ＤＭＡコントローラ２３を制御することが可能である。ＤＭＡ転送の設定をするには、まず、ヘッダ処理部２５がＤＭＡ転送の内容を記載したディスクリプタを生成してローカルメモリ２２に保存する。そして、このディスクリプタを保存したローカルメモリ２２のアドレス情報をＤＭＡコントローラ２３に設定することでＤＭＡ転送が実行することができる。
【００３２】
本実施形態において、サブＣＰＵ２１が実行する、第１の動作モードと第２の動作モードを切り替えてヘッダ処理部２５を動作させる機能は、サブＣＰＵ２１がコア部２５１のレジスタ部２５１ｂへいずれかの動作モードを設定することで実現することができる。この第１の動作モードと第２の動作モードの間での切替動作の詳細は図２を参照して後述する。
【００３３】
＜本実施形態における通信ヘッダ生成および通信パケット生成処理の処理フロー＞
図２は、本実施形態に係る通信装置１が実行する通信ヘッダ生成および通信パケット生成処理の一例を示すフローチャートである。
図２に示す処理は、例えば、通信装置１の通信機能が起動され、通信装置１がネットワークを介して外部機器と通信状態となったことを契機に開始されてよい。ただし、図２に示す処理の開始タイミングは上記に限定されない。
以下では、通信装置１が外部機器との間でデータ転送する際に使用する通信プロトコルとしてＴＣＰ／ＩＰプロトコルを使用する例を説明するが、本実施形態はＴＣＰ／ＩＰプロトコル以外の通信プロトコルも使用することができる。
【００３４】
通信装置１は、サブＣＰＵ２１が必要なプログラムをメインメモリ４またはローカルメモリ２２から読み出して実行することにより、ハードウエアであるヘッダ処理部２５の動作を制御して図２に示す処理を実行することができる。
図２を参照して、Ｓ２０１で、サブシステム２のサブＣＰＵ２１は、サブＣＰＵ２１が実行する通信プロトコル処理において外部機器へ送信する通信パケットの生成準備が整ったか否かを条件として分岐を行う。すなわち、外部機器へ送信する通信パケットの生成準備が整った場合（Ｓ２０１：Ｙ）はＳ２０２へ移行し、一方、外部機器へ送信する通信パケットの生成準備が整っていない場合（Ｓ２０１：Ｎ）はＳ２０１へ戻って現在の状態を維持する。
【００３５】
具体的には、例えば、サブＣＰＵ２１は、メインＣＰＵ３で実行されるアプリケーションソフトウエアから外部機器へ通信パケットを送信する指示をサブＣＰＵ２１が受け取った場合、外部機器へ送信する通信パケットの生成準備が整ったと判断してよい。
また、通信機器１が使用する通信プロトコルがＴＣＰ／ＩＰプロトコルであれば、サブＣＰＵ２１が先に外部機器へ送信した通信パケットに対する応答パケットを受信した場合も同様に、外部機器へ送信する通信パケットの生成準備が整ったと判断してよい。
【００３６】
Ｓ２０２で、サブＣＰＵ２１は、メインＣＰＵ３で実行されるアプリケーションソフトウエアが外部機器へ送信すべき送信データの準備が完了したか否かを条件として分岐を行う。すなわち、メインメモリ３のアプリケーションバッファ領域に外部機器へ送信すべき送信データの蓄積が完了している場合（Ｓ２０２：Ｙ）はＳ２０３へ移行し、一方、送信データの蓄積が完了していない場合はＳ２０５（Ｓ２０２：Ｎ）へ移行する。
【００３７】
具体的には、メインＣＰＵ３で実行されるアプリケーションソフトウエアは、外部機器へ送信すべき送信データをメインメモリ４のアプリケーションバッファ領域に準備する。そして、メインＣＰＵ３は、アプリケーションバッファ領域に送信データが所定の量まで蓄積されると、サブＣＰＵ２１に対して外部機器へ送信する送信データの準備が完了したことを通知する。この通知をサブＣＰＵ２１が受け取ったことで、サブＣＰＵ２１は、送信データの準備が完了したと判断することができる。すなわち、この時点で、サブＣＰＵ２１は、メインメモリ４のアプリケーションバッファ領域からローカルメモリ２２の内部バッファへ送信データを取り込み可能となる。
【００３８】
Ｓ２０２で送信データの準備が完了したと判定された場合、Ｓ２０３で、サブＣＰＵ２１は、外部機器へ通信プロトコルに従った通信パケットの送信を実行するため、送信データをメインメモリ４からサブシステム２内のローカルメモリ２２へ移動する。
具体的には、サブＣＰＵ２１は、Ｓ２０２でメインＣＰＵ３から受け取った通知に基づいて、メインメモリ４からローカルメモリ２２（内部バッファ）へ送信データを移動するＤＭＡ転送を行う。このＤＭＡ転送の設定では、まず、サブＣＰＵ２１がＤＭＡ転送の内容を記載したディスクリプタを生成してローカルメモリ２２に保存する。次に、サブＣＰＵ２１がこのディスクリプタを保存したローカルメモリ２２のアドレス情報をＤＭＡコントローラ２３に設定することでＤＭＡ転送が実行される。このＤＭＡ転送の完了をもってサブＣＰＵ２１による通信プロトコルに従った送信処理の準備が完了したことになる。
【００３９】
Ｓ２０４で、ヘッダ処理部２５は、第１の動作モードで複数の通信ヘッダを生成すると共にＳ２０３で受け取った送信データを分割して複数の分割ペイロードを取得し、取得された分割ペイロードのそれぞれに通信ヘッダを付加して複数の通信パケットを生成する。
Ｓ２０４では、Ｓ２０３で送信データの準備が完了したと判定されているため、サブＣＰＵ２１は、ヘッダ処理部２５の動作モードを第１の動作モードに決定する。ここで第１の動作モードとは、ヘッダ処理部２５が、通信ヘッダを生成した後、連続してＤＭＡコントローラ２３を制御して通信パケットを完成させる動作モードである。
【００４０】
具体的には、サブＣＰＵ２１は、まず、ローカルメモリ２２に移動した送信データを分割して生成する通信パケットの数と各通信パケットのペイロードのサイズを決定する。そして、サブＣＰＵ２１は、ヘッダ処理部２５に対して通信パケットの通信ヘッダ部分を生成するために必要となる情報と、決定した動作モード（Ｓ２０４では第１の動作モード）とを、ヘッダ処理部２５のレジスタ部２５１ｂに設定する。
通信ヘッダを生成するため必要な情報をレジスタ部２５１ｂを介して取得すると、コア部２５１の通信ヘッダ生成部２５１ａは、サブＣＰＵ２１により決定された通信パケットの数と同数である複数の通信ヘッダ２５２ａを内部メモリ２５２に生成する。
【００４１】
次に、ヘッダ処理部２５のコア部２５１は、通信ヘッダを完成させるために必要となるチェックサム値を取得する。このチェックサム値は、ＤＭＡコントローラ２３の１６ｂｉｔ毎に１の補数和を計算するチェックサム演算器２３２を使用して取得することができる。
すなわち、ヘッダ処理部２３のコア部２５１は、ＤＭＡコントローラ２３のチェックサム演算器２３２に通信パケットの通信ヘッダ部分と通信パケットのペイロード部分を連続して読み込ませ、１６ｂｉｔ毎に１の補数和を計算させてチェックサム値を算出させる。その後、コア部２５１が、元の通信パケットの通信ヘッダの所定の場所に算出したチェックサム値を書き込むことで通信ヘッダが完成する。
【００４２】
ここで、通信パケットの通信ヘッダ部分とは、内部メモリ２５２に生成された複数の通信ヘッダ２５２ａのそれぞれを示す。また、通信パケットのペイロード部分とは、ローカルメモリ２２に移動された送信データを通信パケット毎に分割して生成されたペイロードのそれぞれを示す。
【００４３】
コア部２５１は、１つの通信パケットを形成すべき通信ヘッダとペイロードとをＤＭＡコントローラ２３に読み込ませることで、チェックサム値をチェックサム演算器２３２に算出させている。算出したチェックサム値は、内部メモリ２５２内のチェックサム値の算出に使用した元の通信ヘッダの所定の場所に上書きされる。
コア部２５１は、内部メモリ２５２内に生成された複数の通信ヘッダ２５２ａのそれぞれに対してチェックサム値の書き込み処理を実行する。
なお、ＤＭＡコントローラ２３に１の補数和を計算させる方法としては、まず、ヘッダ処理部２５のコア部２５１が１の補数和を計算させる内容を記載したディスクリプタを生成してローカルメモリ２２に保存する。そして、コア部２５１がこのディスクリプタを保存したローカルメモリ２２のアドレス情報をＤＭＡコントローラ２３に設定することで、１の補数和の計算を実行することができる。
【００４４】
ヘッダ処理部２５が上記の一連の処理を実行することで、外部機器に送信される各通信パケットのペイロード部分（図１の送信データ２２１）がローカルメモリ２２に、通信ヘッダ部分が内部メモリ２５２に、それぞれ複数完成する。それぞれの通信パケットにおいて、ローカルメモリ２２のペイロード部分と内部メモリ２５２の通信ヘッダ部分（通信ヘッダおよび通信フッタ）は論理的に対応付けられている。
【００４５】
一方、Ｓ２０２に戻り、Ｓ２０２で送信データの準備が完了していないと判定された場合、Ｓ２０５からＳ２０８で、ヘッダ処理部２５は、第２の動作モードで複数の通信ヘッダを生成するとともに、複数の通信パケットを生成する。
Ｓ２０５では、Ｓ２０２で送信データの準備が完了していないと判定されているため、サブＣＰＵ２１は、ヘッダ処理部２５の動作モードを第２の動作モードに決定する。ここで第２の動作モードとは、ヘッダ処理部２５が、通信ヘッダを生成した後、一旦動作を停止してサブＣＰＵ２１に割込み通知を送出する。その後、サブＣＰＵ２１から通信パケットを完成させる通知（動作停止の解除を指示する通知）を受け取ったタイミングで、ヘッダ処理部２５がＤＭＡコントローラ２３を制御して通信パケットを完成させる動作モードである。
【００４６】
具体的には、Ｓ２０４と同様、サブＣＰＵ２１は、まず、ローカルメモリ２２に移動した送信データを分割して生成する通信パケットの数と各通信パケットのペイロードのサイズを決定する。そして、サブＣＰＵ２１は、ヘッダ処理部２５に対して通信パケットの通信ヘッダ部分を生成するために必要となる情報と、決定した動作モード（Ｓ２０５では第２の動作モード）とを、ヘッダ処理部２５のレジスタ部２５１ｂに設定する。
【００４７】
通信ヘッダを生成するため必要な情報をレジスタ部２５１ｂを介して取得すると、コア部２５１の通信ヘッダ生成部２５１ａは、サブＣＰＵ２１により決定された通信パケットの数と同数の通信ヘッダ２５２ａを内部メモリ２５２に生成する。
なお、第２の動作モードにおいて、サブＣＰＵ２１は、過去にローカルメモリ２２に移動した送信データの履歴情報等を適宜参照して、通信ヘッダを生成するために必要となる情報をレジスタ部２５１ｂに設定することができる。通信ヘッダ生成部２５１ａは、レジスタ部２５１ｂに設定された情報を参照することにより、ステップＳ２０６に先立って投機的に通信パケットを生成することができる。
【００４８】
その後、第２の動作モードにおいて、ヘッダ処理部２５は、その処理を一旦停止し、サブＣＰＵ２１へ割込み信号によって一時的に停止したことを通知する。
Ｓ２０６で、サブＣＰＵ２１は、Ｓ２０２と同様、メインＣＰＵ３で実行されるアプリケーションソフトウエアが外部機器へ送信すべき送信データの準備が完了したか否かを条件として分岐を行う。すなわち、メインメモリ３のアプリケーションバッファ領域に外部機器へ送信すべき送信データの蓄積が完了している場合はＳ２０７へ移行し、一方、送信データの蓄積が完了していない場合はＳ２０６へ戻って現在の状態を維持する。
【００４９】
具体的には、メインＣＰＵ３で実行されるアプリケーションソフトウエアは、外部機器へ送信すべき送信データをメインメモリ４のアプリケーションバッファ領域に準備する。そして、メインＣＰＵ３は、アプリケーションバッファ領域に送信データが所定の量まで蓄積されると、サブＣＰＵ２１に対して外部機器へ送信する送信データの準備が完了したことを通知する。この通知をサブＣＰＵ２１が受け取ったことで、サブＣＰＵ２１は、送信エータの準備が完了したと判断することができる。
【００５０】
Ｓ２０６で送信データの準備が完了したと判定された場合、Ｓ２０７で、サブＣＰＵ２１は、外部機器へ通信プロトコルに従った通信パケットの送信を実行するため、送信データをメインメモリ４からサブシステム２内のローカルメモリ２２へ移動する。
具体的には、サブＣＰＵ２１は、Ｓ２０６でメインＣＰＵ３から受け取った通知に基づいて、メインメモリ４からローカルメモリ２２へ送信データを移動するＤＭＡ転送を行う。このＤＭＡ転送の設定では、まず、サブＣＰＵ２１がＤＭＡ転送の内容を記載したディスクリプタを生成してローカルメモリ２２に保存する。次に、サブＣＰＵ２１がこのディスクリプタを保存したローカルメモリ２２のアドレス情報をＤＭＡコントローラ２３に設定することでＤＭＡ転送が実行される。このＤＭＡ転送の完了をもってサブＣＰＵ２１による通信プロトコルに従った送信処理の準備が完了したことになる。
【００５１】
Ｓ２０８で、ヘッダ処理部２５は、第２の動作モードで、Ｓ２０７で受け取った送信データを分割して複数の分割ペイロードを取得し、取得された分割ペイロードのそれぞれに、Ｓ２０５で生成された通信ヘッダを付加して複数の通信パケットを生成する。  
具体的には、第２の動作モードで、まず、サブＣＰＵ２１は、一時停止していたヘッダ処理部２５に対して通信パケット生成処理の再開するために必要となる情報をヘッダ処理部２５のレジスタ部２５１ｂに設定して、ヘッダ処理部２５のコア部２５１を起動する。
【００５２】
次に、ヘッダ処理部２５のコア部２５１は、Ｓ２０４と同様、通信ヘッダを完成させるために必要となるチェックサム値を取得する。このチェックサム値は、ＤＭＡコントローラ２３の１６ｂｉｔ毎に１の補数和を計算するチェックサム演算器２３２を使用して取得することができる。
すなわち、ヘッダ処理部２３のコア部２５１は、ＤＭＡコントローラ２３のチェックサム演算器２３２に通信パケットの通信ヘッダ部分と通信パケットのペイロード部分を連続して読み込ませ、１６ｂｉｔ毎に１の補数和を計算させてチェックサム値を算出させる。その後、コア部２５１が、元の通信パケットの通信ヘッダの所定の場所に算出したチェックサム値を書き込むことで通信ヘッダが完成する。
【００５３】
コア部２５１は、１つの通信パケットを形成すべき通信ヘッダとペイロードとをＤＭＡコントローラ２３に読み込ませることで、チェックサム値をチェックサム演算器２３２に算出させている。算出したチェックサム値は、内部メモリ２５２内のチェックサム値の算出に使用した元の通信ヘッダの所定の場所に上書きされる。
コア部２５１は、内部メモリ２５２内に生成された複数の通信ヘッダ２５２ａのそれぞれに対してチェックサム値の書き込み処理を実行する。
【００５４】
ヘッダ処理部２５が上記の一連の処理を実行することで、外部機器に送信される各通信パケットのペイロード部分（図１の送信データ２２１）がローカルメモリ２２に、通信ヘッダ部分が内部メモリ２５２に、それぞれ完成する。
Ｓ２０９で、サブＣＰＵ２１は、完成した通信パケットを、外部機器へ通信Ｉ／Ｆ２４を介して送信する。
【００５５】
具体的には、まず、サブＣＰＵ２１は、ローカルメモリ２２から供給される通信パケットのペイロード（図１の送信データ２２１）に内部メモリ２５２に生成した通信ヘッダ２５２ａを結合して１つの通信パケットとして転送するＤＭＡ転送制御を実行する。このＤＭＡ転送は、ＤＭＡコントローラ２３によって実行され、サブＣＰＵ２１によってＤＭＡ転送が起動されると、通信パケットが通信Ｉ／Ｆ２４へ転送される。
【００５６】
通信Ｉ／Ｆ２４においてデータリンク層（ＭＡＣ層）や物理層（ＰＨＹ層）の通信処理が実行された後、ネットワークを介して外部機器へ生成された通信パケットが送信される。
Ｓ２１０で、サブＣＰＵ２１は、通信装置１と外部機器の通信を終了させる事象が発生したかどうかを条件として分岐を行う。外部機器との通信を終了させる事象が発生した場合（Ｓ２１０：Ｙ）はＳ２１１へ移行し、外部機器との通信を終了させる事象が発生していない場合（Ｓ２１０：Ｎ）はＳ２０２へ戻る。
【００５７】
例えば、メインＣＰＵ３で実行しているアプリケーションソフトウエアが、ユーザからの操作などで通信装置１と外部機器の接続を終了させる指示を検知した場合は、外部機器との通信を終了させる事象となる。また、ユーザがネットワークケーブルを通信装置１から抜くなどして通信回線が断絶したことを通信Ｉ／Ｆ２４が検知した場合も、外部機器との通信を終了させる事象となる。さらに、通信相手である外部機器から通信回線を切断する旨の通知を含んだ通信パケットを受信した場合も、同様に外部機器との通信を終了させる事象となる。
【００５８】
Ｓ２１１で、通信装置１は、通信装置１と外部機器の通信を終了させる処理を実行する。具体的には、サブＣＰＵ２１が担っている通信プロトコル処理に従って、外部機器との通信回線を正常に切断する。そして、サブＣＰＵ２１は、ローカルメモリ２２やヘッダ処理部２５の内部メモリ２５２に一時的に保存している関連情報を削除する。
その後、サブＣＰＵ２１からメインＣＰＵ３へ、通信回線の切断完了の通知が伝達されると、アプリケーションソフトウエアで通信回線が切断したことをユーザなどへ示す表示を行うことができる。
【００５９】
以上説明したように、本実施形態では、通信装置１は、第１の動作モードおよび第２のモードを切り替えて動作する。具体的には、本実施形態では、通信装置１のサブＣＰＵ２１は、送信すべきデータの準備が完了したか否かを判定し、送信すべきデータの準備が完了している場合は、ヘッダ処理部２５を第１の動作モードで動作するよう制御する。
一方、送信すべきデータの準備が完了していない場合は、通信装置１のサブＣＰＵ２１は、ヘッダ処理部２５を第２の動作モードで動作するよう制御する。第２のモードでは、ヘッダ処理部２５は、送信データの準備待ちとなった状態で、通信ヘッダを先行して投機的に生成する。
これにより、送信すべきデータの準備が完了していない場合であっても、通信ヘッダを先行して投機的に生成することで、通信パケットをより高速、効率的に生成することができる。
【００６０】
（実施形態２）
以下、実施形態２を、図３および図４を参照して、上記の実施形態１と異なる点についてのみ詳細に説明する。本実施形態は、第１の動作モードと第２の動作モードとのいずれかを選択する際に、通信装置１の通信相手である外部機器との通信を行う通信Ｉ／Ｆ２４が通信パケットを送信する準備が完了しているか否かを判定する。すなわち、通信装置１のサブＣＰＵ２１は、通信ヘッダの生成のタイミングで、通信Ｉ／Ｆ２４の送信準備が完了していれば第１の動作モードで、通信Ｉ／Ｆ２４の送信準備が完了していなければ第２の動作モードで、ヘッダ処理部２５を動作させるよう制御する。
これにより、外部機器に対する通信パケットの送信準備ができていない場合であっても、通信ヘッダを先行して投機的に生成することで、通信パケットをより高速、効率的に生成することができる。
【００６１】
本実施形態に係る通信装置１の構成は図１に示す実施形態１と同様である。
図３は、実施形態２に係る通信装置１が実行する通信ヘッダ生成および通信パケット生成処理の一例を示すフローチャートである。
【００６２】
図３を参照して、Ｓ３０１で、メインＣＰＵ３で実行されるアプリケーションソフトウエアは、外部機器へ送信すべき送信データを、メインメモリ４に設けられたアプリケーションバッファ領域に準備する。そして、アプリケーションバッファ領域に送信データが所定の量まで蓄積されると、メインＣＰＵ３で実行されるアプリケーションソフトウエアは、サブＣＰＵ２１に対して、外部機器へ送信する送信データの準備が完了したことを通知する。
なお、Ｓ３０１でサブＣＰＵ２１に対して発行される通知には、現在の通信状態を示す情報が含まれる。この現在の通信状態を示す情報は、例えば、ＴＣＰプロトコルを使用した通信の接続を開始することを示す情報、ＴＣＰプロトコルを使用したデータ転送を開始することを示す情報、ＴＣＰプロトコルを使用した通信の切断を開始する情報等を含む。
【００６３】
Ｓ３０２で、サブＣＰＵ２１は、メインＣＰＵ３で実行されるアプリケーションソフトウエアが外部機器へ送信すべき送信データの準備を完了したか否かを条件として分岐を行う。すなわち、メインメモリ３のアプリケーションバッファ領域に外部機器へ送信すべき送信データの蓄積が完了している場合はＳ３０３へ移行し、一方、送信データの蓄積が完了していない場合はＳ３０１へ戻る。
【００６４】
Ｓ３０２では、Ｓ３０１でサブＣＰＵ２１に発行された通知をサブＣＰＵ２１が受け取ったことで、サブＣＰＵ２１は、送信データの準備が完了したと判断することができる。
Ｓ３０２で送信データの準備が完了したと判定された場合、Ｓ３０３で、サブＣＰＵ２１は、外部機器へ通信プロトコルに従った通信パケットの送信を実行するため、送信データをメインメモリ４からサブシステム２内のローカルメモリ２２へ移動する。
具体的には、サブＣＰＵ２１は、図２のＳ２０３と同様、ＤＭＡコントローラ２３に、メインメモリ４からローカルメモリ２２（内部バッファ）へ送信データを移動するＤＭＡ転送を実行させる。
【００６５】
Ｓ３０４で、サブＣＰＵ２１は、通信Ｉ／Ｆ２４がネットワーク２７へ送信すべき通信パケットを受け取る準備ができたか否かを条件として分岐を行う。すなわち、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了している場合はＳ３０５へ移行し、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了していない場合はＳ３０６へ移行する。
具体的には、サブＣＰＵ２１は、通信Ｉ／Ｆ２４内部に設けられた通信パケットを一時的に蓄積するバッファメモリ（送信バッファ）に空きがある場合に、通信Ｉ／Ｆ２４がネットワーク２７へ送信すべき通信パケットの受取準備が完了していると判断する。一方、通信Ｉ／Ｆ２４内部のバッファメモリに空きがない場合、サブＣＰＵ２１は、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了していないと判断する。
【００６６】
Ｓ３０４で通信Ｉ／Ｆ２４で通信パケットの受取準備が完了していると判断された場合、Ｓ３０５で、ヘッダ処理部２５は、第１の動作モードで複数の通信パケットを生成する。すなわち、ヘッダ処理部２５は、第１の動作モードで、複数の通信ヘッダを生成するとともに、Ｓ３０３で受け取った送信データを分割して複数の分割ペイロードを取得し、取得された分割ペイロードのそれぞれに通信ヘッダを付加して複数の通信パケットを生成する。
Ｓ３０５の処理の詳細は、図２のＳ２０４を参照して上記で説明したものと同様である。
【００６７】
一方、Ｓ３０４に戻り、Ｓ３０４で通信Ｉ／Ｆ２４で通信パケットの受取準備が完了していないと判定された場合、Ｓ３０６からＳ３０８で、ヘッダ処理部２５は、第２の動作モードで複数の通信ヘッダを生成するとともに、複数の通信パケットを生成する。
Ｓ３０８からＳ３０８の処理の詳細は、図２のＳ２０５、Ｓ２０６およびＳ２０８を参照して上記で説明したものと同様である。
Ｓ３０９からＳ３１１の処理の詳細は、図２のＳ２０９からＳ２１１を参照して上記で説明したものと同様である。
【００６８】
＜各動作モードによる通信パケット生成処理タイミング＞
次に、図３の通信パケット送信の動作フローに基づき、通信装置１の動作状況とヘッダ処理部２５の動作モードによって、通信パケット生成処理にかかる時間が変化することを、図４のタイミングチャートを参照して説明する。
【００６９】
図４は、第１の動作モードおよび第２の動作モード、並びに動作モード切替がない場合それぞれでの通信パケット生成および送信動作を示すタイミングチャートである。
図４において、横軸は時間経過を示し、縦軸に通信装置１の動作状況の３つのパターンを示す。
パターン４１は、ヘッダ処理部２５が第１の動作モードで動作し、かつ、図３のＳ３０４において、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了している場合（Ｓ３０４：Ｙ）を示す。通信パケットの受取準備が完了している場合とは、例えば、ヘッダ処理部２５の通信パケット生成処理能力よりも、通信Ｉ／Ｆ２４が受け取った通信パケットをネットワーク２７へ送出する能力が高い場合などが該当する。
【００７０】
図４において、図３のＳ３０３でローカルメモリ２２に送信データ２２１の移動が完了した時刻をｔ０とする。パターン４１では、Ｓ３０４で通信Ｉ／Ｆ２４での通信パケットの受取準備が完了しているので、ヘッダ処理部２５には第１の動作モードが設定され、続けてＳ３０５で、通信ヘッダの生成および通信パケットの完成が連続して実行される。その後、Ｓ３０９で、外部機器へ通信パケットが送信される。
【００７１】
このように、パターン４１に示す通信装置１動作状況の場合、通信パケットが外部機器へ送出完了した時刻はｔ１となる。
パターン４２は、ヘッダ処理部２５が第２の動作モードで動作し、かつ、図３のＳ３０４において、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了していない場合（Ｓ３０４：Ｎ）を示す。通信パケットの受取準備が完了していない場合とは、例えば、ヘッダ処理部２５の通信パケット生成処理能力よりも、通信Ｉ／Ｆ２４が受け取った通信パケットをネットワーク２７へ送出する能力が低い場合などが該当する。
【００７２】
図４において、パターン４１と同様、Ｓ３０３でローカルメモリ２２に送信データの移動が完了した時刻をｔ０とする。パターン４２では、Ｓ３０４で通信Ｉ／Ｆ２４での通信パケットの受取準備が完了していないので、ヘッダ処理部２５には第２の動作モードが設定され、続けてＳ３０６で、通信パケットの通信ヘッダを先に生成する。
その後、パターン４２では、Ｓ３０７で、ヘッダ処理部２５は、通信Ｉ／Ｆ２４で受取準備が完了する時刻ｔ３まで待機する（待機時間：ｗ１）。
さらにその後、通信Ｉ／Ｆ２４での通信パケットの受取準備が完了する時刻ｔ３が到来してから、Ｓ３０８で通信パケットを完成させる。その後、Ｓ３０９で、外部機器へ通信パケットが送信される。
このように、パターン４２に示す通信装置１の動作状況の場合、通信パケットが外部機器へ送出完了した時刻はｔ２となる。
【００７３】
一方、パターン４３は、ヘッダ処理部２５が第１の動作モードしか装備していない場合を仮定する。すなわち、図３のＳ３０４において、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了している場合（Ｓ３０４：Ｙ）、ヘッダ処理部２５には第１の動作モードが設定され、続けてＳ３０５で、通信ヘッダの生成および通信パケットの完成が連続して実行される。
一方、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了していない場合（Ｓ３０５：Ｎ）、ヘッダ処理部２５は第１の動作モードしか装備していないため、Ｓ３０５に進むことができず、現在の状態を維持して待機することになる。すなわち、パターン４３では、パターン４２と同時刻であるｔ３まで待機するものと仮定する。
【００７４】
図４において、パターン４１と同様、Ｓ３０３でローカルメモリ２２に送信データの移動が完了した時刻をｔ０とする。パターン４３では、ヘッダ処理部２５は第１の動作モードで動作し、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了していないので、通信Ｉ／Ｆ２４で受取準備が完了する時刻ｔ３が到来するまで待機する（待機時間：ｗ２）。
その後、通信Ｉ／Ｆ２４での通信パケットの受取準備が完了する時刻ｔ３が到来してから、Ｓ３０５で、通信ヘッダを生成するとともに通信パケットを完成させる。その後、Ｓ３０９で、外部機器へ通信パケットが送信される。
このように、パターン４３に示す通信装置１の動作状況の場合、通信パケットが外部機器へ送出完了した時刻はｔ４となる。
【００７５】
上記のパターン４１およびパターン４２を比較すると、時刻ｔ１とｔ２の時間差４４だけ、第１の動作モードで通信パケットを生成したパターン４１の方が、通信パケットを外部機器へより早く送出完了していることが分かる。
図４の時間差４４は、２つの要因による。１つの要因は、パターン４２では、パターン４１と異なり、Ｓ３０７による待機時間（ｗ１）が発生したためである。もう１つの要因は、パターン４２の第２の動作モードにおける通信ヘッダ生成（Ｓ３０６）と通信パケット完成（Ｓ３０８）の合計期間が、パターン４１の第１の動作モードにおけるＳ３０５の期間よりも長いためである。なぜなら、第２の動作モードでは、Ｓ３０６で、ヘッダ処理部２５がサブＣＰＵ２１へ割込み通知する処理と、Ｓ３０８で、サブＣＰＵ２１がヘッダ処理部２５を起動して通信パケット生成を再開する処理のオーバーヘッドが生じるからである。
【００７６】
一方、上記のパターン４２およびパターン４３を比較すると、時刻ｔ２とｔ４の時間差４５だけ、第２の動作モードで通信パケットを生成したパターン４２の方が、通信パケットを外部機器へより早く送出完了していることが分かる。
図４の時間差４５の要因は、次のとおりである。すなわち、パターン４２では、通信Ｉ／Ｆ２４で通信パケットの受取準備が完了待ちをしている期間（ｔ０からｔ３の間）に、Ｓ３０６で通信ヘッダの生成を先に実行している。このため、時刻ｔ３以降の処理が、Ｓ３０８の処理、すなわちすでに生成された通信ヘッダを分割ペイロードに付加して通信パケットを完成させる処理の処理時間で済む。
【００７７】
これに対し、パターン４３では、時刻ｔ３以降の処理が、Ｓ３０５の処理、すなわち、通信ヘッダを生成し、連続して通信パケットを完成させる処理であるため、Ｓ３０８よりも長く処理時間を必要とする。このため、パターン４２の方が、時刻ｔ２とｔ４の時間差４５だけ、通信パケットを外部機器へ早く送出完了することになる。
上記のように、パターン４１およびパターン４２の比較においては、ヘッダ処理部２５が第１の動作モードで動作する方が、第２の動作モードで動作するより、より早く（時間差４４）通信パケットを外部機器へ送出完了する。
【００７８】
これに対して、通信Ｉ／Ｆ２４での通信パケットの受取準備の完了を待機しなければならないパターン４２とパターン４３の比較においては、ヘッダ処理部２５が第２の動作モードで動作することで、より早く通信パケットを外部機器へ送出完了することができる。
なお、上記で説明したタイミングチャートは、実施形態１についても、時刻ｔ３をアプリケーションソフトウエアによる送信データの準備完了（図２のＳ２０２、Ｓ２０６）の時刻に置き換えることで同様に適用することができる。
【００７９】
以上説明したように、本実施形態によれば、第１の動作モードと第２の動作モードとのいずれかを選択する際に、通信装置１の通信相手との通信を行う通信Ｉ／Ｆ２４が通信パケットを送信する準備が完了しているか否かの動作状況を判定する。すなわち、通信装置１のサブＣＰＵ２１は、通信ヘッダの生成のタイミングで、通信Ｉ／Ｆ２４の送信準備が完了していれば第１の動作モードで、通信Ｉ／Ｆ２４の送信準備が完了していなければ第２の動作モードで、ヘッダ処理部２５を動作させるよう制御する。
【００８０】
これにより、外部機器に対する通信パケットの送信準備ができていない場合であっても、通信ヘッダを先行して投機的に生成することで、通信パケットをより高速、効率的に生成することができる。
【００８１】
（実施形態３）
以下、実施形態３を、図５を参照して、上記の実施形態２と異なる点についてのみ詳細に説明する。
【００８２】
実施形態２では、第１の動作モードと第２の動作モードとのいずれかを選択する際に、通信Ｉ／Ｆ２４が通信パケットを送信する準備が完了しているか否かで動作モードを決定した。
本実施形態では、第１の動作モードと第２の動作モードとのいずれかを選択する際に、設定された動作状況となったか否かを判定する。すなわち、通信装置１のサブＣＰＵ２１は、通信ヘッダの生成のタイミングで、サブシステム２に設定された動作状況に応じて、ヘッダ処理部２５を第１の動作モードまたは第２の動作モードのいずれかで動作させるよう制御する。
【００８３】
これにより、通信パケットの送信の態様や送信周期に応じて、通信パケットをより高速、効率的に生成することができる。
本実施形態に係る通信装置１の構成は図１に示す実施形態１と同様である。
図５は、実施形態３に係る通信装置１が実行する通信ヘッダ生成および通信パケット生成処理の一例を示すフローチャートである。実施形態２に係る図３のフローチャートにおいて、Ｓ３０１の前にＳ５０１が追加されるとともに、Ｓ３０４をＳ５０２で、Ｓ３０７をＳ５０３で、それぞれ置き換えており、その他の処理は図３と同様である。
【００８４】
Ｓ５０１で、サブＣＰＵ２１は、Ｓ５０２で動作モードをどのように選択するかの動作モードの選択条件とＳ５０３で選択される動作条件とを設定する。Ｓ５０２で選択される動作モードとは、ヘッダ処理部２５を動作させる第１の動作モードまたは第２の動作モードのいずれである。また、Ｓ５０３で選択される動作条件とは、選択条件に一致するモードにおいてＳ３０８へ移行する条件、例えば通信パケットの送信タイミング、である。
例えば、通信装置１が外部機器に対して映像のストリーミング転送のように、周期的に通信パケットを送出するような動作状況を想定する。この場合、Ｓ５０１では、Ｓ５０２の分岐で、ストリーミング転送の通信パケットを送信する場合は第２の動作モードで、そうでない場合は第１の動作モードで、ヘッダ処理部２５が動作するよう動作モードの選択条件を設定する。また、Ｓ５０３の分岐で、ストリーミング転送に要求される送信周期の所定のタイミングになったか否かを動作条件として設定する。
【００８５】
Ｓ３０１からＳ３０３の処理は、図３のＳ３０１からＳ３０３と同様である。
Ｓ５０２で、サブＣＰＵ２１は、Ｓ５０１で設定された動作モードの選択条件に従って、動作モードの選択条件に一致するか否かで分岐を行う。すなわち、Ｓ５０１で設定した動作モードの選択条件に一致しない場合はＳ３０５へ移行し、Ｓ５０１で設定した動作モードの選択条件に一致する場合はＳ３０６へ移行する。
例えば、上記のように通信装置１が外部機器に対して映像のストリーミング転送のように、周期的に通信パケットを送出するような動作状況を想定する。この場合、Ｓ３０３で準備完了された送信データがストリーミング転送に使用される送信データであれば、Ｓ５０１で設定した動作モードの選択条件に一致するため、第２の動作モードを選択してＳ３０６へ移行する。一方、ストリーミング転送に使用する送信データでなければ、Ｓ５０１で設定した動作モードの選択条件に一致しないため、第１の動作モードを選択してＳ３０５へ移行する。
【００８６】
Ｓ３０５およびＳ３０６の処理は、図３のＳ３０５およびＳ３０６とそれぞれ同様である。
Ｓ５０３で、サブＣＰＵ２１は、Ｓ５０１で設定された動作条件に一致するか否かで分岐を行う。すなわち、Ｓ５０１で設定された動作条件に一致する場合は、Ｓ３０８へ移行し、Ｓ５０１で設定された動作条件に一致しない場合は、Ｓ５０３に戻って現在の状態を維持する。
例えば、上記のように通信装置１が外部機器に対して映像のストリーミング転送のように周期的に通信パケットを送出するような動作状況を想定する。この場合、ストリーミング転送に要求される送信周期の所定のタイミングになった場合は、Ｓ３０８へ移行する。一方、ストリーミング転送に要求される送信周期の所定のタイミング以外の場合は、Ｓ５０３に戻り、現在の状態を維持して所定のタイミングになるまで待機する。
【００８７】
以上説明したように、本実施形態によれば、第１の動作モードと第２の動作モードとのいずれかを選択する際に、設定された動作状況となったか否かを判定する。すなわち、通信装置１のサブＣＰＵ２１は、通信ヘッダの生成のタイミングで、サブシステム２に設定された動作状況に応じて、ヘッダ処理部２５を第１の動作モードまたは第２の動作モードのいずれかで動作させるよう制御する。
【００８８】
これにより、通信パケットの送信の態様や送信周期に応じて、通信パケットをより高速、効率的に生成することができる。例えば、映像ストリーミング転送時に、通信装置１を図５に示すように制御することで、要求される送信タイミングの周期で、通信パケットをより高速、効率的に生成することができる。
【００８９】
（実施形態４）
以下、実施形態４を、図６を参照して、上記の実施形態１と異なる点についてのみ詳細に説明する。
【００９０】
実施形態１では、第１の動作モードと第２の動作モードとのいずれかを選択する際に、外部機器へ通信パケットとして送信すべき送信データの準備が完了しているか否かで動作モードを決定した。
本実施形態では、第１の動作モードと第２の動作モードとのいずれかを選択する際に、通信パケットを生成および送信する通信プロトコルの種別を判定する。すなわち、通信装置１のサブＣＰＵ２１は、通信ヘッダの生成のタイミングで、通信パケットを生成および送信する通信プロトコルに応じて、ヘッダ処理部２５を第１の動作モードまたは第２の動作モードのいずれかで動作させるよう制御する。
【００９１】
これにより、通信パケットの通信プロトコルに応じて、通信パケットをより高速、効率的に生成することができる。
本実施形態に係る通信装置１の構成は図１に示す実施形態１と同様である。
図６は、実施形態４に係る通信装置１が実行する通信ヘッダ生成および通信パケット生成処理の一例を示すフローチャートである。実施形態１に係る図２のフローチャートにおいて、図２のＳ２０２に替えて、Ｓ６０１およびＳ６０２を追加しておりその他の処理は図２と同様である。
【００９２】
Ｓ６０１で、サブＣＰＵ２１は、メインＣＰＵ３で実行されるアプリケーションソフトウエアが、外部機器へＵＤＰパケットで送信するか否かを条件として経路選択を行う。具体的には、サブＣＰＵ２１は、メインメモリ４のアプリケーションバッファ領域に記憶された外部機器へ送信すべき送信データをＵＤＰパケットで送信する場合はＳ２０５へ移行する。一方、送信データをＵＤＰ以外の通信プロトコルで送信する場合、例えば、送信データをＴＣＰパケットで送信する場合等はＳ６０２へ移行する。
【００９３】
Ｓ６０１で、送信データをＵＤＰ以外の通信プロトコルで送信する場合、Ｓ６０２で、サブＣＰＵ２１は、メインＣＰＵ３で実行されるアプリケーションソフトウエアが外部機器へ送信するための送信データの準備が完了したか否かを条件として分岐を行う。具体的には、サブＣＰＵ２１は、メインメモリ４のアプリケーションバッファ領域に外部機器へ送信するための送信データが蓄積完了している場合はＳ２０３へ移行し、送信データが蓄積完了していない場合はＳ６０２に戻り、現在の状態を維持する。
【００９４】
具体的には、まず、メインＣＰＵ３で実行されるアプリケーションソフトウエアが外部機器へ送信するための送信データをメインメモリ４のアプリケーションバッファ領域に準備する。そして、アプリケーションバッファ領域に送信データが所定の量まで蓄積されると、メインＣＰＵ３で実行されるアプリケーションソフトウエアは、サブＣＰＵ２１に対して外部機器へ送信すべき送信データの準備が完了したことを通知する。サブＣＰＵ２１は、この通知を受け取ったことで、外部機器へ送信すべき送信データの準備が完了したことを判断することができる。
【００９５】
Ｓ２０３からＳ２１１の処理は、図２のＳ２０３からＳ２１１と同様である。
以上説明したように、本実施形態によれば、第１の動作モードと第２の動作モードとのいずれかを選択する際に、通信パケットを生成および送信する通信プロトコルの種別を判定する。具体的には、通信装置１のサブＣＰＵ２１は、通信ヘッダの生成のタイミングで、通信パケットを生成および送信する通信プロトコルに応じて、例えば通信パケットがＵＤＰパケットである場合には、ヘッダ処理部２５を第２の動作モードで動作させるよう制御する。
【００９６】
ＵＤＰプロトコルはコネクションレス型であり、ＴＣＰプロトコル等と比較して高速かつリアルタイム性に優れる。このため、図６に示す制御を行うことで、ＵＤＰパケットを送信する場合は、第２の動作モードで、送信データの準備完了の判断を経ることなく、先行して投機的に通信ヘッダを生成しておくことが可能となる。
これにより、ＵＤＰパケットをより高速、効率的に生成することができ、例えば映像のストリーミング転送やマルチキャスト、ブロードキャスト送信において、リアルタイム性をより高めることができる。
【００９７】
（実施形態５）
以下、実施形態５を、図７を参照して、上記の実施形態１と異なる点についてのみ詳細に説明する。
【００９８】
実施形態１では、第１の動作モードと第２の動作モードとのいずれかを選択する際に、外部機器へ通信パケットとして送信すべき送信データの準備が完了しているか否かで動作モードを決定した。
本実施形態では、これに加えて、ヘッダ処理部２５が第２の動作モードで動作する際に、通信ヘッダ生成後、サブＣＰＵ２１からヘッダ処理部２５への応答を待ち受ける。そして、サブＣＰＵ２１から処理継続の指示がなかった場合に、サブＣＰＵ２１は、ヘッダ処理部２５をリセットする。
【００９９】
これにより、通信パケットの生成処理が不要となった場合に、ヘッダ処理部２５に通信ヘッダの生成のみを投機的に実行させつつ、負荷の高い通信パケットの生成処理を無駄に実行してリソースを使用することを回避することができる。
本実施形態に係る通信装置１の構成は図１に示す実施形態１と同様である。
図７は、実施形態５に係る通信装置１が実行する通信ヘッダ生成および通信パケット生成処理の一例を示すフローチャートである。実施形態１に係る図２のフローチャートにおいて、Ｓ７０１からＳ７０３を追加しておりその他の処理は図２と同様である。
【０１００】
Ｓ２０１からＳ２０５、Ｓ２０６からＳ２１１の処理は図２に示すＳ２０１からＳ２１１と同様である。
Ｓ７０１で、サブＣＰＵ２１は、サブＣＰＵ２１からヘッダ処理部２５に対して応答があったか否かを条件として分岐を行う。具体的には、サブＣＰＵ２１からヘッダ処理部２５に応答があった場合はＳ７０２へ移行し、応答がなければＳ７０１に戻って現在の状態を維持する。
【０１０１】
Ｓ７０１で、サブＣＰＵ２１からヘッダ処理部２５へ応答があった場合、Ｓ７０２で、サブＣＰＵ２１は、サブＣＰＵ２１からヘッダ処理部２５に対して処理を継続する指示であったか否かを条件として分岐を行う。具体的には、サブＣＰＵ２１からヘッダ処理部２５に対して処理を継続する指示であればＳ２０６へ移行し、そうでなければＳ７０３へ移行する。
Ｓ７０２で、サブＣＰＵ２１からヘッダ処理部２５の応答が処理を継続する指示でなかった場合、Ｓ７０３で、サブＣＰＵ２１は、ヘッダ処理部２５をリセットして初期状態にする。すなわち、Ｓ２０５において通信ヘッダを生成したもののＳ２０７へは移行せず、送信データをローカルメモリ２２へ移動する処理、送信データをペイロード分割する処理、および通信パケットを生成する処理に進むことなく、ヘッダ処理部２５を初期状態に戻す。
【０１０２】
以上説明したように、本実施形態によれば、ヘッダ処理部２５が第２の動作モードで動作する際に、通信ヘッダ生成後、サブＣＰＵ２１からヘッダ処理部２５へのに応答を待ち受ける。そして、サブＣＰＵ２１から処理継続の指示がなかった場合に、サブＣＰＵ２１は、ヘッダ処理部２５をリセットする。
これにより、通信パケットの生成処理が不要となった場合に、ヘッダ処理部２５に通信ヘッダの生成のみを投機的に実行させ、負荷の高い通信パケットの生成処理を無駄に実行してリソースを使用することを回避することができる。
【０１０３】
＜他の実施形態＞
なお、上述した各実施形態は、その複数を組み合わせて実現することが可能である。
また、本発明は、上述の実施形態の一部または１以上の機能を実現するプログラムによっても実現可能である。すなわち、そのプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータ（またはＣＰＵやＭＰＵ等）における１つ以上のプロセッサがプログラムを読出し実行する処理により実現可能である。また、そのプログラムをコンピュータ可読な記録媒体に記録して提供してもよい。
【０１０４】
また、コンピュータが読みだしたプログラムを実行することにより、実施形態の機能が実現されるものに限定されない。例えば、プログラムの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって上記した実施形態の機能が実現されてもよい。
【符号の説明】
【０１０５】
１…通信装置、２…サブシステム、３…メインＣＰＵ、４…メインメモリ、５…システムバス、２１…サブＣＰＵ、２２…ローカルメモリ、２３…ＤＭＡコントローラ、２４…通信Ｉ／Ｆ、２５…ヘッダ処理部、２６…ローカルバス、２７…ネットワーク、２２１…送信データ、２３１…ＤＭＡ転送部、２３２…チェックサム演算器、２５１…コア部、２５１ａ…通信ヘッダ生成部、２５１ｂ…レジスタ部、２５２…内部メモリ、２５２ａ…通信ヘッダ
【図１】
2019103101.tif 000003
【図２】
2019103101.tif 000004
【図３】
2019103101.tif 000005
【図４】
2019103101.tif 000006
【図５】
2019103101.tif 000007
【図６】
2019103101.tif 000008
【図７】
2019103101.tif 000009