(57)【要約】【課題】受信フレームの欠損を検出する技術を提供する。【解決手段】通信装置１０１は、複数のデータを含むフレームを受信する受信部８１３と、複数のデータを一時的に記憶するための第１のメモリ８０６と、各データの転送ルールを記憶する第２のメモリ８１１と、各データを割り当てられる複数の第３のメモリ８０９と、各第３のメモリ８０９に関連付けられたプロセッサ８１０と、各データの転送制御をするメモリ制御部８０５とを備える。メモリ制御部８０５は、第１のメモリ８０６から、第１のデータを取得し、第２のメモリ８１１から、次に複数の第３のメモリ８０９のいずれかに転送される予定のデータのサイズを規定した第２のデータを取得し、第２のデータが最終データフラグを含む場合において、第１のデータがフレームの最終データではないか、または、第１のデータのサイズが第２のデータに規定されるサイズより大きいとき、エラーを出力する。【選択図】図８
2020170982.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータを含むフレームを受信する受信部と、
前記複数のデータを一時的に記憶するための第１のメモリと、
前記複数のデータのそれぞれの転送ルールを記憶する第２のメモリと、
前記複数のデータをそれぞれ割り当てられる複数の第３のメモリと、
前記複数の第３のメモリにそれぞれ割り当てられたデータを処理する複数のプロセッサと、
前記複数のデータのそれぞれをその先頭から順番に前記複数の第３のメモリのそれぞれに振り分けるメモリ制御部とを備え、
前記メモリ制御部は、
前記第１のメモリから、第１のデータを取得し、
前記第２のメモリから、次に前記複数の第３のメモリのいずれかに転送される予定のデータのサイズを規定した第２のデータを取得し、
前記第２のデータが最終データフラグを含む場合において、前記第１のデータが前記フレームの最終データであり、かつ、前記第１のデータのサイズが前記第２のデータに規定されるサイズ以内であるとき、前記第１のデータを前記複数の第３のメモリのいずれかに転送し、
前記第２のデータが前記最終データフラグを含む場合において、前記第１のデータが前記フレームの最終データではないか、または、前記第１のデータのサイズが前記第２のデータに規定されるサイズより大きいとき、エラーを出力する、通信装置。
【請求項２】
受信したフレームの種類を判定するフィルタをさらに備え、
前記転送ルールは、前記フレームの種類ごとに規定され、
前記メモリ制御部は、前記フィルタから取得した前記フレームの識別子に関連付けられた前記第２のメモリのアドレスを参照する、請求項１に記載の通信装置。
【請求項３】
前記メモリ制御部は、
前記第１のメモリに前記複数のデータを格納するとき、前記第１のメモリ内における、前記複数のデータの後尾の位置を判定するための判定情報を生成し、
前記判定情報を第４のメモリに格納し、
前記第１のメモリからデータを取り出すときに前記第４のメモリを参照し、前記第１のメモリから取得したデータが前記フレームの最終データであるか否かを判定する、請求項１に記載の通信装置。
【請求項４】
前記メモリ制御部は、
前記第１のメモリに前記複数のデータを格納するとき、前記第１のメモリ内における、前記複数のデータの後尾の位置を判定するための判定情報を生成し、
前記複数のデータの末尾に前記判定情報を追加して、前記第１のメモリに格納し、
前記第１のメモリから取得したデータに前記判定情報が含まれることに基づいて、前記第１のメモリから取得したデータが前記フレームの最終データであると判定する、請求項１に記載の通信装置。
【請求項５】
前記メモリ制御部は、
前記第１のメモリから取り出したデータのサイズをカウントし、
前記第１のメモリから取り出したデータが前記フレームの最終データであるとき、前記判定情報およびカウントしたサイズから、前記第１のメモリから取り出したデータのサイズを算出する、請求項４に記載の通信装置。
【請求項６】
前記メモリ制御部は、前記エラーを前記第２のメモリに格納する、請求項１に記載の通信装置。
【請求項７】
前記エラーは、エラー割り込み信号であり、
前記メモリ制御部は、前記エラー割り込み信号を発生させることで、前記複数のプロセッサの処理を中断させる、請求項１に記載の通信装置。
【請求項８】
前記第２のメモリは、複数のファイルディスクリプタのチェーンを含み、
前記第２のデータは、前記複数のファイルディスクリプタの１つである、請求項１に記載の通信装置。
【請求項９】
前記第２のメモリに前記複数のファイルディスクリプタのチェーンを格納するためのプログラムを記憶する不揮発性の第５のメモリをさらに備え、
前記複数のプロセッサのいずれかは、
前記通信装置の起動後に前記第５のメモリを参照し、
前記プログラムに基づいて、前記第２のメモリに前記複数のファイルディスクリプタのチェーンを格納する、請求項８に記載の通信装置。
【請求項１０】
複数のデータを含むフレームを受信する受信部と、
前記複数のデータを一時的に記憶するための第１のメモリと、
前記複数のデータの転送ルールを記憶する第２のメモリと、
前記複数のデータをそれぞれ割り当てられる複数の第３のメモリと、
前記複数の第３のメモリにそれぞれ割り当てられたデータを処理する複数のプロセッサと、
前記複数のデータのそれぞれをその先頭から順番に前記複数の第３のメモリのそれぞれに振り分けるメモリ制御部とを備え、
前記メモリ制御部は、
前記第２のメモリから、前記複数のデータのそれぞれのサイズおよびその転送先を規定した第１のデータを取得し、
前記第１のデータに規定された前記複数のデータのそれぞれのサイズに基づいて、順次、前記第１のメモリから取得したデータを、前記複数の第３のメモリのいずれかに転送し、
前記第１のデータに規定される次に前記複数の第３のメモリのいずれかに転送されるデータが前記フレームの最終データである場合において、次に前記第１のメモリから取得した第２のデータが前記フレームの最終データであり、かつ、前記第２のデータのサイズが前記第１のデータに規定されるサイズ以内であるとき、前記第２のデータを前記複数の第３のメモリのいずれかに転送し、
前記第１のデータに規定される次に前記複数の第３のメモリのいずれかに転送されるデータが前記フレームの最終データである場合において、前記第１のデータが前記フレームの最終データではないか、または、前記第２のデータのサイズが前記第１のデータに規定されるサイズより大きいとき、エラーを出力する、通信装置。
【請求項１１】
前記メモリ制御部は、前記第１のデータに規定される次に前記複数の第３のメモリのいずれかに転送されるデータが前記フレームの最終データではない場合において、前記第１のデータが前記フレームの最終データであるとき、エラーを出力する、請求項１０に記載の通信装置。
【請求項１２】
受信したフレームの種類を判定するフィルタをさらに備え、
前記転送ルールは、前記フレームの種類ごとに規定され、
前記メモリ制御部は、前記フィルタから取得した前記フレームの識別子に関連付けられた前記第２のメモリのアドレスを参照する、請求項１０に記載の通信装置。
【請求項１３】
前記メモリ制御部は、
前記第１のメモリに前記複数のデータを格納するとき、前記第１のメモリ内における、前記複数のデータの後尾の位置を判定するための判定情報を生成し、
前記複数のデータの末尾に前記判定情報を追加して、前記第１のメモリに格納し、
前記第１のメモリから取得したデータに前記判定情報が含まれることに基づいて、前記第１のメモリから取得したデータが前記フレームの最終データであると判定する、請求項１０に記載の通信装置。
【請求項１４】
前記メモリ制御部は、
前記第１のメモリから取り出したデータのサイズをカウントし、
前記第１のメモリから取り出したデータが前記フレームの最終データであるとき、前記判定情報およびカウントしたサイズから、前記第１のメモリから取り出したデータのサイズを算出する、請求項１３に記載の通信装置。
【請求項１５】
複数のデータを含むフレームを受信する受信部と、
前記複数のデータを一時的に記憶するための第１のメモリと、
前記複数のデータのそれぞれの転送ルールを記憶する第２のメモリと、
前記複数のデータをそれぞれ割り当てられる複数の第３のメモリと、
前記複数の第３のメモリにそれぞれ割り当てられたデータを処理する複数のプロセッサと、
前記複数のデータのそれぞれをその先頭から順番に前記複数の第３のメモリのそれぞれに振り分けるメモリ制御部とを備え、
前記メモリ制御部は、
前記第１のメモリから、第１のデータを取得し、
前記第２のメモリから、次に前記複数の第３のメモリのいずれかに転送される予定のデータのサイズおよび前記フレーム内の位置を規定した第２のデータを取得し、
前記第２のデータに規定される前記フレーム内の位置が末尾である場合において、前記第１のデータが前記フレームの最終データであり、かつ、前記第１のデータのサイズが前記第２のデータに規定されるサイズ以内であるとき、前記第１のデータを前記複数の第３のメモリのいずれかに転送し、
前記第２のデータに規定される前記フレーム内の位置が末尾である場合において、前記第１のデータが前記フレームの最終データではないか、または、前記第１のデータのサイズが前記第２のデータに規定されるサイズより大きいとき、エラーを出力する、通信装置。
【請求項１６】
前記メモリ制御部は、前記第２のデータに規定される前記フレーム内の位置が末尾ではない場合において、前記第１のデータが前記フレームの最終データであるとき、エラーを出力する、請求項１５に記載の通信装置。
【請求項１７】
前記フレームに含まれる前記複数のデータは、ヘッダコードおよびテイルコードをそれぞれ含み、
前記メモリ制御部は、
前記第１のデータの前記ヘッダコードおよび前記テイルコードを参照し、前記第１のデータの前記フレーム内での位置およびサイズを取得し、
前記第２のデータに規定される前記フレーム内の位置およびサイズと、前記第１のデータの前記フレーム内の位置およびサイズとを比較し、
比較が一致する場合において、前記第１のデータを前記複数の第３のメモリのいずれかに転送し、
比較が一致しない場合において、エラーを出力する、請求項１５に記載の通信装置。
【請求項１８】
受信した前記フレームの種類を判定するフィルタをさらに備え、
前記転送ルールは、前記フレームの種類ごとの転送ルールを含み、
前記メモリ制御部は、前記フィルタから取得した前記フレームの識別子に基づいて、参照する前記第２のメモリのアドレスを決定する、請求項１５に記載の通信装置。
【請求項１９】
前記メモリ制御部は、
前記第１のメモリに前記複数のデータを格納するとき、前記第１のメモリ内における、前記複数のデータの後尾の位置を判定するための判定情報を生成し、
前記複数のデータの末尾に前記判定情報を追加して、前記第１のメモリに格納し、
前記第１のメモリから取得したデータに前記判定情報が含まれることに基づいて、前記第１のメモリから取得したデータが前記フレームの最終データであると判定する、請求項１５に記載の通信装置。
【請求項２０】
前記メモリ制御部は、
前記第１のメモリから取り出したデータのサイズをカウントし、
前記第１のメモリから取り出したデータが前記フレームの最終データであるとき、前記判定情報およびカウントしたサイズから、前記第１のメモリから取り出したデータのサイズを算出する、請求項１９に記載の通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、通信装置に関し、例えば、車載ネットワークの通信装置に好適に利用できるものである。
【背景技術】
【０００２】
近年、自動車の自動運転技術の研究および開発が行われている。自動車に自動運転させるためには、自動車に取り付けた各種センサーやカメラにて取得した多数のフレーム（以降、ネットワーク上で送受信されるデータを「フレーム」と呼ぶ）を遅滞無く処理し、自動車全体を制御することが必要となる。
【０００３】
自動車の自動運転化に伴い、車載ネットワークに多数の機器が接続され、通信装置が処理するフレームも飛躍的に増大すると共に、通信装置が処理すべきデータ量が、通信装置のソフトウェアの処理能力を上回りつつある。そのため、通信装置は、大量のデータを処理するため、複数のメモリおよびＣＰＵ（Central Processing Unit）を備える。
【０００４】
通信装置は、各ＣＰＵに分散処理をさせるため、受信したフレームを複数のデータに分割し、それぞれのデータを各ＣＰＵに対応したメモリに送信する。その際、通信装置は、受信したフレームの種類ごとに、フレーム内のペイロードの順序およびサイズが固定であることを前提に、フレームを複数のデータに分割し、これらのデータを各メモリへ送信する。そのため、通信装置が受信したフレームが欠損していた場合、通信装置は、意図しないデータを意図しないメモリに転送してしまうことがある。通信装置のソフトウェアが、全ての意図しないデータの転送に対して、例外処理を行う場合、処理が非常に複雑になり、データ処理に遅延が発生する可能性がある。そのため、ハードウェアでデータの転送およびエラー制御をすることが望ましい。
【０００５】
データの転送に関して、例えば、特開２０１７−２０４０８３号公報（特許文献１）は、「実行されるアプリケーションプログラムが切り替えられるとき、ＤＭＡＣが、領域データを記憶するＴＣＭから、次に実行されるアプリケーションプログラムに対応する領域データを含むメモリ領域設定用データを読み出し、メモリ保護を行うＭＰＵのレジスタへ直接転送する」システムを開示している（［要約］参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１７−２０４０８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に開示された技術によると、フレームの欠損に対するエラー制御を行うことができない。そのため、フレームの欠損が発生した場合も、通信装置は、意図しないデータを意図しないメモリに転送した状態で処理を継続してしまう。このような状態を防ぐために、通信装置が備える各ＣＰＵは、ソフトウェアによる例外処理を実行する必要があり、結果として、通信装置の処理能力が低下してしまう。したがって、フレームの欠損に対するエラー制御を行う技術が必要とされている。本開示は、上記のような背景に鑑みてなされたものであって、ある局面において、フレームの欠損に対するエラー制御を行う技術を提供する。
【０００８】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
一実施の形態によれば、通信装置は、複数のデータを含むフレームを受信する受信部と、複数のデータを一時的に記憶するための第１のメモリと、複数のデータのそれぞれの転送ルールを記憶する第２のメモリと、複数のデータをそれぞれ割り当てられる複数の第３のメモリと、複数のデータのそれぞれをその先頭から順番に複数の第３のメモリのそれぞれに振り分けるメモリ制御部とを備える。メモリ制御部は、第２のデータが最終データフラグを含む場合において、第１のメモリから取得したデータがフレームの最終データではないか、または、第１のメモリから取得したデータのサイズが第２のデータに規定されるサイズより大きいとき、エラーを出力する。
【発明の効果】
【００１０】
上記の実施形態によれば、通信装置は、フレームの欠損を検出できる。
【図面の簡単な説明】
【００１１】
【図１】図１は、車載ネットワークの構成の一例を示す図である。
【図２】図２は、通信装置１０１の構成の一例を示す図である。
【図３】図３は、図２のイーサーネット２０８等の通信路を流れる信号の一例を示す図である。
【図４】図４は、フレームの種類の一例を示す図である。
【図５】図５は、通信装置１０１におけるフレーム内のデータの転送の一例を示す図である。
【図６】図６は、通信装置１０１における欠損したフレーム内のデータの転送の一例を示す図である。
【図７】図７は、通信装置１０１における最終データフラグを用いたフレーム内のデータの転送の一例を示す図である。
【図８】図８は、通信装置１０１のより詳細な構成の一例を示す図である。
【図９】図９は、通信装置１０１の通信処理の一例を示す図である。
【図１０】図１０は、ディスクリプタ１０００のフォーマットの一例を示す図である。
【図１１】図１１は、ディスクリプタ１１００のフォーマットの一例を示す図である。
【図１２】図１２は、ディスクリプタ１２００のフォーマットの一例を示す図である。
【図１３】図１３は、ディスクリプタ１３００のフォーマットの一例を示す図である。
【図１４】図１４は、フレーム１４００のフォーマットの一例を示す図である。
【図１５】図１５は、フレーム１５００のフォーマットの一例を示す図である。
【図１６】図１６は、ディスクリプタ１６００のフォーマットの一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、各実施形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰り返さない。
【００１３】
［第１の実施形態］
図１は、車載ネットワークの構成の一例を示す図である。車載ネットワークは、複数の通信装置１０１が相互に接続されることにより構成されている。各通信装置１０１には、カメラ、レーダー、ＬｉＤＡＲ（Light Detection and Ranging）、シャシーおよびパワートレイン等の多種多様な機器が接続され、各通信装置１０１は、これらの機器から受信するフレームを処理する。また、通信装置１０１は、外部のネットワークと接続され、クラウドサービスとも連携し得る。通信装置１０１は、各種データを遅滞なく処理し転送する必要があるため、複数のＣＰＵとメモリとを備える。さらに、通信装置１０１は、受信したフレームを複数のデータに分割して各メモリに割り当てるメモリ制御部を備える。次に、通信装置１０１の詳細について説明する。
【００１４】
図２は、通信装置１０１の構成の一例を示す図である。通信装置１０１は、ＣＰＵ２０１Ａ，２０１Ｂ，２０１Ｃ（以降、総称する場合は「ＣＰＵ２０１」と呼ぶ）と、メモリ２０２Ａ，２０２Ｂ，２０２Ｃ（以降、総称する場合は「メモリ２０２」と呼ぶ）と、コントローラー２０３と、バス２０４と、メモリ２０５とを備える。
【００１５】
通信装置１０１は、ゲートウェイ２０６を介して、ＣＡＮ（Controller Area Network）２０７およびイーサーネット（登録商標）２０８に接続されている。さらに、通信装置１０１は、ＣＡＮ２０７を介して、パワートレイン２０９と、シャシー２１０と、センサー２１１とに接続される。また、通信装置１０１は、イーサーネット２０８を介して、ＬｉＤＡＲ２１２に接続される。
【００１６】
なお、図２の構成は一例であり、通信装置１０１の構成はこれに限られない。ある局面において、ＣＰＵ２０１およびメモリ２０２の数は、１でも２でも４以上でもよい。また、他の局面において、パワートレイン２０９と、シャシー２１０と、センサー２１１とは、イーサーネット２０８に接続されてもよいし、ＬｉＤＡＲ２１２は、ＣＡＮ２０７に接続されてもよい。また、他の局面において、パワートレイン２０９、シャシー２１０、センサー２１１およびＬｉＤＡＲ２１２以外の任意の機器が、通信装置１０１と通信してもよい。
【００１７】
ＣＰＵ２０１は、メモリ２０２に関連付けられており、ＣＰＵ２０１Ａ，２０１Ｂ，２０１Ｃは、それぞれメモリ２０２Ａ，２０２Ｂ，２０２Ｃに格納されたデータを処理する。
【００１８】
メモリ２０２は、バス２０４を介して、コントローラー２０３から受信するデータを格納するＲＡＭ（Random Access Memory）によって実現される。ある局面において、メモリ２０２は、ＤＲＡＭ（Dynamic Random Access Memory）であってもよいし、ＳＲＡＭ（Static Random Access Memory）であってもよい。
【００１９】
コントローラー２０３は、ゲートウェイ２０６から取得したフレームを複数のデータに分割する。また、コントローラー２０３は、バス２０４を介して、これらの分割したデータを各メモリ２０２に転送する。また、コントローラー２０３は、メモリ２１３を含む。ある局面において、メモリ２１３は、コントローラー２０３の外側にあってもよい。なお、コントローラー２０３は、メモリ２１３をＦＩＦＯ（First In First Out）メモリとして使用する。
【００２０】
メモリ２０５は、各フレームに含まれるデータごとに転送先のメモリ内のアドレス等を規定した転送ルールを記憶する。コントローラー２０３は、メモリ２０５の転送ルールを参照することにより、データの転送先を決定する。ある局面において、転送ルールは、ファイルディスクリプタに含まれてもよい。また、メモリ２０５は、連続するファイルディスクリプタであるファイルディスクリプタチェーンを記憶する。
【００２１】
ゲートウェイ２０６は、各種機器からのフレームを受信して、受信したフレームを通信装置１０１に転送する。また、ゲートウェイ２０６は、通信装置１０１から受信したフレームを他の機器に送信する。
【００２２】
ある局面において、通信装置１０１は、ＳｏＣ（System-on-a-Chip）、ＦＰＧＡ（Field Programmable Gate Array）およびＡＳＩＣ（Application Specific Integrated Circuit）であってもよいし、これらの組み合わせであってもよい。
【００２３】
図３は、図２のイーサーネット２０８等の通信路を流れる信号の一例を示す図である。シグナル３０１は、同期用の信号である。シグナル３０２は、データ信号である。通信装置１０１およびゲートウェイ２０６は、シグナル３０１がＨＩＧＨの期間に検知した信号３０３をフレームの一部として取り込む。通信装置１０１およびゲートウェイ２０６は、複数回、信号３０３を取り込み、それらを１つのフレームとして処理し得る。
【００２４】
図４は、フレームの種類の一例を示す図である。テーブル４００は、図２のイーサーネット２０８を流れるイーサーネットフレームの一例を含む。各フレームには、フィルタリングコードが割り当てられている。フレームに含まれるデータの種類には、「パワートレインデータ」、「シャシーデータ」および「センサーデータ」がある。これらのデータは、フレームのペイロードに含まれ得る。
【００２５】
テーブル４００において、例えば、フィルタリングコード「ａ」のフレームは、ペイロードに、「パワートレインデータ」、「シャシーデータ」および「センサーデータ」を含む。また、フィルタリングコード「ｃ」のフレームは、ペイロードに、「パワートレインデータ」および「シャシーデータ」を含む。このように、フレームは、フィルタリングコードによって規定される種類ごとに、ペイロードに１つまたは複数のデータを含み得る。
【００２６】
なお、これらのデータは一例であり、フレームはより多くの種類のデータを含んでもよい。また、視覚的にわかりやすくするために、テーブル４００は、各カラムにブロックを記載している。通信装置１０１がテーブル４００を記憶する場合、テーブル４００は、ブロックに代えて英数字やバイナリデータを含んでもよい。
【００２７】
図５は、通信装置１０１におけるフレーム内のデータの転送の一例を示す図である。ディスクリプタチェーン５０１は、メモリ２０５に記憶される。また、メモリアドレスＸ，Ｙ，Ｚは、各メモリ２０２内のアドレスである。メモリアドレスＸ，Ｙ，Ｚに転送されたデータは、各メモリ２０２に対応するＣＰＵ２０１によって処理される。
【００２８】
ここで、コントローラー２０３が、フレーム５０３Ａ，５０３Ｂ，５０３Ｃを受信したとする。各フレームは、複数のデータを含む。例えば、フレーム５０３Ａは、ヘッダーＡ１と、ペイロードＢ１と、ペイロードＣ１とを含む。説明を簡単にするために、図５〜図７の例示において、フレームの種類は１つであるとする。
【００２９】
コントローラー２０３は、フレームに含まれる複数のデータをメモリアドレスＸ，Ｙ，Ｚに転送する。コントローラー２０３は、各データの転送先のメモリ内のアドレスを決定するために、ディスクリプタチェーン５０１を参照する。
【００３０】
コントローラー２０３は、フレームを受信すると、一旦、メモリ２１３に全て格納する。メモリ２１３内のデータは、メモリ２１３に格納された順に処理される。次に、コントローラー２０３は、ディスクリプタチェーン５０１を参照する。ディスクリプタチェーン５０１は、連続するディスクリプタを含んでおり、各ディスクリプタは、次に何バイトのデータをどのアドレスに転送するかを規定する転送ルールを含む。
【００３１】
コントローラー２０３は、ディスクリプタチェーン５０１を先頭から参照する。コントローラー２０３は、最初に先頭のディスクリプタ５０２Ａを参照する。ディスクリプタ５０２Ａは、転送ルール「２０バイトをアドレスＸへ転送」を含む。そのため、コントローラー２０３は、メモリ２１３から２０バイトのデータ「ヘッダーＡ１（２０バイト）」を取得し、メモリアドレスＸに転送する。コントローラー２０３は、転送結果をディスクリプタ５０２Ａに格納する。なお、転送結果は、エラー情報も含み得る。
【００３２】
次に、コントローラー２０３は、２番目のディスクリプタ５０２Ｂを参照する。ディスクリプタ５０２Ｂは、転送ルール「５０バイトをアドレスＹへ転送」を含む。そのため、コントローラー２０３は、メモリ２１３から５０バイトのデータ「ペイロードＢ１（５０バイト）」を取得し、メモリアドレスＹに転送する。コントローラー２０３は、転送結果をディスクリプタ５０２Ｂに格納する。
【００３３】
次に、コントローラー２０３は、３番目のディスクリプタ５０２Ｃを参照する。ディスクリプタ５０２Ｃは、転送ルール「８０バイトをアドレスＺへ転送」を含む。そのため、コントローラー２０３は、メモリ２１３から８０バイトのデータ「ペイロードＣ１（８０バイト）」を取得し、メモリアドレスＺに転送する。コントローラー２０３は、転送結果をディスクリプタ５０２Ｃに格納する。
【００３４】
以下同様に、コントローラー２０３は、順次ディスクリプタを参照し、フレーム５０３Ｂ，５０３Ｃ内のデータもメモリアドレスＸ，Ｙ，Ｚのいずれかに転送する。
【００３５】
なお、コントローラー２０３は、ディスクリプタチェーン５０１の先頭のディスクリプタから順次参照していくが、各ディスクリプタの転送結果を確認することにより、何番目のディスクリプタを参照すればよいかを判別し得る。例えば、ディスクリプタ５０２Ａが、転送結果「メモリアドレスＸへの２０バイトのデータの書き込み成功」を含み、ディスクリプタ５０２Ｂの転送結果が未入力であれば、コントローラー２０３は、ディスクリプタ５０２Ｂを参照すればよいことがわかる。
【００３６】
上記のように、コントローラー２０３は、ディスクリプタに規定される転送ルールに従い、受信したフレームに含まれるデータを各メモリ２０２に転送する。ディスクリプタを用いた転送は、ディスクリプタチェーン５０１に対応するフレームサイズが固定であることを前提にしている。そのため、コントローラー２０３が、データの欠損したフレームを受信した場合、問題が発生し得る。次に、コントローラー２０３がデータの欠損したフレームを受信した場合の問題点について説明する。
【００３７】
図６は、通信装置１０１における欠損したフレーム内のデータの転送の一例を示す図である。図５の例示と同様に、ディスクリプタチェーン５０１は、メモリ２０５に記憶される。また、メモリアドレスＸ，Ｙ，Ｚは、各メモリ２０２内のアドレスである。メモリアドレスＸ，Ｙ，Ｚに転送されたデータは、各メモリ２０２に対応するＣＰＵ２０１によって処理される。
【００３８】
コントローラー２０３は、フレーム６０３Ａ，５０３Ｂ，５０３Ｃを受信したとする。フレーム６０３Ａは、欠損しており、本来含まれるべきペイロードＣ１を含まないものとする。説明を簡単にするために、フレームの種類は１つであるとする。コントローラー２０３は、フレームを受信すると、一旦、メモリ２１３に全て格納する。次に、コントローラー２０３は、ディスクリプタチェーン５０１を参照する。
【００３９】
コントローラー２０３は、ディスクリプタチェーン５０１を先頭から参照する。コントローラー２０３は、ディスクリプタ５０２Ａを参照し、メモリ２１３から２０バイトのデータ「ヘッダーＡ１」を取得し、メモリアドレスＸに転送する。次に、コントローラー２０３は、ディスクリプタ５０２Ｂを参照し、メモリ２１３から５０バイトのデータ「ペイロードＢ１」を取得し、メモリアドレスＹに転送する。
【００４０】
次に、コントローラー２０３は、ディスクリプタ５０２Ｃを参照し、本来であれば、メモリ２１３から８０バイトのデータ「ペイロードＣ１」を取得し、メモリアドレスＺに転送する。しかし、フレーム６０３ＡのペイロードＣ１は欠損しているため、コントローラー２０３が次にメモリ２１３から取得するデータは、フレーム５０３Ｂのデータになる。
【００４１】
コントローラー２０３は、ペイロードＣ１が欠損していることを検出できない。そのため、コントローラー２０３は、ディスクリプタ５０２Ｃの転送ルール「８０バイトをアドレスＺへ転送」に従い、メモリ２１３から、８０バイトのデータとして「ヘッダーＡ２（２０バイト）」、「ペイロードＢ２（５０バイト）」および「ペイロードＣ２（１０バイト）」を取得し、メモリアドレスＺに転送する。その結果、メモリアドレスＺに、想定されていないデータが転送されることになる。コントローラー２０３は、転送したデータにずれが発生したことを検出できない。そのため、これ以降も、コントローラー２０３は、メモリ２１３から取得するデータにずれが生じたまま、各フレームのデータの転送を続けてしまう。
【００４２】
従来、ＣＰＵ２０１が実行するプログラムの例外処理が、フレームの欠損に起因して生じるデータにずれを検出し、データの復旧を行っていた。しかし、この例外処理は複雑であり、プログラムの実行速度を落とす原因となり得る。そのため、ＣＰＵ２０１が実行するプログラムを介することなく、データのずれの検出が行われることが望ましい。
【００４３】
上記の課題を解決するために、本実施の形態に従うディスクリプタは、次に転送されるデータがフレームの最終データ（末尾のデータ）であるか否かを判定可能な最終データフラグを含むことにより、コントローラー２０３によるデータのずれの検出を実現する。図７を参照して、ディスクリプタが最終データフラグを含む場合の、通信装置１０１の動作について説明する。
【００４４】
図７は、通信装置１０１における最終データフラグを用いたフレーム内のデータの転送の一例を示す図である。本実施の形態に従うディスクリプタチェーン５０１において、フレームの最後のデータに対応するディスクリプタは、「最終データフラグ７１０」を含む。図７に示す例では、ディスクリプタ５０２Ｃ，５０２Ｄ，５０２Ｅが「最終データフラグ７１０」を含む。
【００４５】
図５の例示と同様に、ディスクリプタチェーン５０１は、メモリ２０５に記憶される。また、メモリアドレスＸ，Ｙ，Ｚは、各メモリ２０２内のアドレスである。メモリアドレスＸ，Ｙ，Ｚに転送されたデータは、各メモリに対応するＣＰＵ２０１によって処理される。
【００４６】
ある局面において、コントローラー２０３は、フレーム７０３Ａ，７０３Ｂ，７０３Ｃを受信したとする。説明を簡単にするために、フレームの種類は１つであるとする。コントローラー２０３は、フレームを受信すると、一旦、メモリ２１３に全て格納する。次に、コントローラー２０３は、ディスクリプタチェーン５０１を参照する。
【００４７】
コントローラー２０３は、ディスクリプタチェーン５０１を先頭から参照していく。最初に、コントローラー２０３は、ディスクリプタ５０２Ａを参照し、ディスクリプタ５０２Ａが「最終データフラグ７１０」を含まないことを確認する。次に、コントローラー２０３は、メモリ２１３から取得する予定のデータ（以降、「次のデータ」と呼ぶ）がフレームの最終データであるか否かを判定する。
【００４８】
コントローラー２０３は、次のデータが、フレームの最終データではない場合、メモリアドレスＸに次のデータを転送し、正常な転送結果をディスクリプタ５０２Ａに格納する。コントローラー２０３は、次のデータが、フレームの最終データである場合、ディスクリプタ５０２Ａの内容と、次のデータの内容とが不一致になるため、データの転送を中断し、エラーを含む転送結果をディスクリプタ５０２Ａに格納する。
【００４９】
コントローラー２０３は、フレーム５０３の前後にフレームの先頭または末尾であることを示す判定情報を付け加えて、メモリ２１３に格納する。ある局面において、コントローラー２０３は、フレーム５０３の前後にフレームの先頭であることを示す判定情報およびフレームの末尾であることを示す判定情報の両方を付け加えて、メモリ２１３に格納してもよい。
【００５０】
さらに、コントローラー２０３は、メモリ２１３に入出力するデータのサイズをカウントする。そのため、コントローラー２０３は、次のデータの末尾に判定情報が含まれているか否かを確認することで、次のデータがフレームの最終データであるか否かを検出できる。また、コントローラー２０３は、ディスクリプタの転送ルールに規定される転送データのサイズと、次のデータのサイズとを比較することで、最終データが欠損しているか否かを判定することができる。
【００５１】
次に、コントローラー２０３は、ディスクリプタ５０２Ｂを参照し、ディスクリプタ５０２Ａが「最終データフラグ７１０」を含まないことを確認する。次に、コントローラー２０３は、次のデータがフレームの最終データであるか否かを判定する。
【００５２】
コントローラー２０３は、次のデータがフレームの最終データではない場合、メモリアドレスＹに次のデータを転送し、正常な転送結果をディスクリプタ５０２Ｂに格納する。コントローラー２０３は、次のデータがフレームの最終データである場合、データの転送を中断し、エラーを含む転送結果をディスクリプタ５０２Ｂに格納する。
【００５３】
次に、コントローラー２０３は、ディスクリプタ５０２Ｃを参照し、ディスクリプタ５０２Ａが「最終データフラグ７１０」を含むことを確認する。次に、コントローラー２０３は、次のデータがフレームの最終データであるか否かを判定する。
【００５４】
コントローラー２０３は、次のデータが、フレームの最終データである場合において、次のデータのサイズが正常であるとき、メモリアドレスＺにデータを転送し、正常な転送結果をディスクリプタ５０２Ｃに格納する。コントローラー２０３は、次のデータがフレームの最終データではないか、または、次のデータのサイズが正常ではない場合、データの転送を中断し、エラーを含む転送結果をディスクリプタ５０２Ｃに格納する。
【００５５】
最終データのサイズの判定において、コントローラー２０３は、最終データのサイズが、ディスクリプタ５０２Ｃの転送ルールに規定される転送データのサイズと一致する場合に、最終データのサイズが正常であると判定してもよい。また、コントローラー２０３は、最終データのサイズが、ディスクリプタ５０２Ｃの転送ルールに規定される転送データのサイズ以内である場合に、最終データのサイズが正常であると判定してもよい。コントローラー２０３は、メモリ２１３に入出力するデータのサイズをカウントしているため、判定情報と合せて、最終データのサイズを算出することができる。
【００５６】
図７の例示においては、フレーム５０３Ａが正常である場合、コントローラー２０３が「最終データフラグ７１０」を含むディスクリプタ５０２Ｃを参照したとき、次のデータは、判定情報を末尾に含み、かつ、次のデータのサイズは８０バイトとなる。
【００５７】
しかし、フレーム５０３Ａの一部が欠損している場合、コントローラー２０３が、ディスクリプタ５０２Ａ,５０２Ｂを参照したときに、次のデータが判定情報を含むか、または、コントローラー２０３がディスクリプタ５０２Ｃを参照したときに、次のデータのサイズが正常ではなくなるため、コントローラー２０３は、必ずフレームの欠損を検出できる。
【００５８】
本実施の例においては、コントローラー２０３は、フレームの欠損を検出した場合、ディスクリプタにエラーを格納しているが、ある局面において、コントローラー２０３は、エラー割り込み信号を発生させて、ＣＰＵ２０１の処理を中断させてもよい。また、コントローラー２０３は、これらの両方の処理を実行してもよい。
【００５９】
上記のように、フレームの最終データに対応するディスクリプタが、最終フレームフラグを持つことによって、コントローラー２０３は、必ずフレーム単位でのデータの欠損を検出することができる。その結果、通信装置１０１は、ＣＰＵ２０１のリソースをエラーの検出処理に割く必要がなくなり、通信装置１０１の処理性能が向上する。
【００６０】
図８は、通信装置１０１のより詳細な構成の一例を示す図である。通信装置１０１は、イーサーネットＰＨＹ８０１と、メディアアクセスコントローラー８０２と、フィルタ８０３と、メモリ８０４，８０６と、メモリ制御部８０５と、バス８０８と、メモリ８０９Ａ，８０９Ｂ，８０９Ｃ（以下、総称する場合は「メモリ８０９」と呼ぶ）と、ＣＰＵ８１０Ａ，８１０Ｂ，８１０Ｃ（以下、総称する場合は「ＣＰＵ８１０」と呼ぶ）と、メモリ８１１とを備える。通信装置１０１は、複数種類のフレームを送受信し、ＣＰＵ８１０にフレームに含まれるデータを分散処理させる。なお、イーサーネットＰＨＹ８０１、メディアアクセスコントローラー８０２、フィルタ８０３、メモリ８０４，８０６およびメモリ制御部８０５は、コントローラー２０３に対応する。なお、メモリ制御部８０５は、メモリ８０４，８０６をＦＩＦＯメモリとして使用する。
【００６１】
メモリ８１１は、複数のディスクリプタチェーン８１２Ａ，８１２Ｂ，８１２Ｃ，８１２Ｄ（以下、総称する場合は「ディスクリプタチェーン８１２」と呼ぶ）を含む。図５〜図７の例示と異なり、通信装置１０１は、複数種類のフレームを受信する。各ディスクリプタチェーン８１２は、それぞれの種類のフレームに対して割り当てられる。
【００６２】
イーサーネットＰＨＹ８０１は、イーサーネット上の信号を送受信する。メディアアクセスコントローラー８０２は、イーサーネットＰＨＹ８０１が受信した信号をフレームのフォーマットにして、フィルタ８０３に送信する。イーサーネットＰＨＹ８０１およびメディアアクセスコントローラー８０２は、所謂、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）のネットワークインターフェース層の信号およびデータを処理する。以降、イーサーネットＰＨＹ８０１およびメディアアクセスコントローラー８０２を合わせて通信部８１３と呼ぶ。
【００６３】
フィルタ８０３は、受信したフレームの種類を判定する。フィルタ８０３は、フレームの種類に基づいて、フィルタリングコードおよびフィルタリングコードに対応するディスクリプタチェーンのアドレスをメモリ制御部８０５に送信する。また、フィルタ８０３は、フレームをメモリ制御部８０５に送信する。なお、フィルタ８０３は、フレームおよびディスクリプタチェーンのアドレスのみをメモリ制御部８０５に送信してもよい。また、メモリ制御部８０５フィルタ８０３からフィルタリングコードを取得し、メモリ制御部８０５は当該フィルタリングコードに基づいてフィルタリングコードに対応するディスクリプタチェーンのアドレスを決定してもよい。
【００６４】
ある局面において、フィルタ８０３は、フレームのサイズ、ヘッダーおよびペイロードに含まれるデータのいずれかからフィルタリングコードを判別し得る。また、ある局面において、例えば、フィルタ８０３は、テーブル４００を記憶し、テーブル４００に基づいてフィルタの判別およびフィルタリングコードの選定をしてもよい。その場合、フィルタ８０３は、各フィルタリングコードに紐付くディスクリプタチェーン８１２のそれぞれのアドレスをテーブル４００に格納する。
【００６５】
メモリ８０６は、通信装置１０１が受信したフレームを一時的に記憶する。メモリ制御部８０５は、複数のフレームを受信すると、順次メモリ８０６に一時データ８０７として格納する。また、メモリ制御部８０５は、メモリ８０６に入出力するデータのサイズをカウントする。メモリ８０６に格納されたフレームは、メモリ制御部８０５により、複数のデータに分割され、さらに、各メモリ８０９のいずれかに割り振られる。また、メモリ８０４は、通信装置１０１が送信するフレームを一時的に格納する。
【００６６】
メモリ制御部８０５は、フレームの前後にフレームの先頭または末尾であることを示す判定情報を付け加えて、フレームをメモリ８０６に格納する。メモリ制御部８０５は、複数のフレームを受信した場合も、同様に各フレームに判定情報を付け加えて、メモリ８０６に格納する。ある局面において、メモリ制御部８０５は、メモリ８０６内でのフレームの先頭および末尾の位置を判定情報として、レジスタ（図示しない）に記憶してもよい。その場合、メモリ制御部８０５は、メモリ８０６からデータと取得する際に、レジスタの判定情報を参照することにより、メモリ８０６から取得したデータがフレームの最終データであるか否かを判定することができる。
【００６７】
次に、メモリ制御部８０５は、フィルタリングコードに対応するディスクリプタチェーンのアドレスを参照し、転送ルールを取得する。メモリ制御部８０５は、取得した転送ルールに基づいて、転送ルールに規定されたバイト数のデータをメモリ８０６から取得する。
【００６８】
次に、メモリ制御部８０５は、転送ルールに規定された転送先のメモリ８０９のいずれかに、メモリ８０６から取得したデータを転送する。最後に、メモリ制御部８０５は、参照したディスクリプタに転送結果を格納する。ある局面において、メモリ制御部８０５は、ＤＭＡＣ（Direct Memory Access Controller）であってもよい。
【００６９】
バス８０８は、メモリ制御部８０５と、メモリ８０９と、メモリ８１１とを相互に接続する。メモリ制御部８０５は、バス８０８を介して、これらのメモリ８０９，８１１と通信する。
【００７０】
メモリ８０９は、いずれもＲＡＭであり、メモリ制御部８０５から割り当てられたデータを格納する。ＣＰＵ８１０は、いずれかのメモリ８０９に割り当てられている。ＣＰＵ８１０は、メモリ８０９に格納されたデータを処理する。
【００７１】
メモリ８１１は、複数のディスクリプタチェーン８１２を格納する。ディスクリプタチェーン８１２は、それぞれのフレームフィルタリングコードに関連付けられている。例えば、テーブル４００を例に説明すると、ディスクリプタチェーン８１２Ａ，８１２Ｂ，８１２Ｃ，８１２Ｄは、それぞれ、フィルタリングコード「ａ，ｂ，ｃ，ｄ」と関連付けられる。
【００７２】
メモリ制御部８０５は、フィルタ８０３から受信したディスクリプタチェーン８１２のアドレスを参照することで、各メモリ８０９のそれぞれに、フレームを複数に分割したデータを振り分け、ＣＰＵ８１０に振り分けられたデータを分散処理させることができる。
【００７３】
ある局面において、通信装置１０１の起動時に、ＣＰＵ９１０のいずれかが、メモリ９１１にディスクリプタチェーン８１２を書き込むプログラムを実行してもよい。その場合、通信装置１０１は、そのプログラムを格納するフラッシュメモリ等のＲＯＭ（Read Only Memory）（図示しない）を備えてもよい。
【００７４】
上記のように、通信装置１０１において、フィルタ８０３がフレームの種類を判別し、メモリ制御部８０５がディスクリプタチェーン８１２を参照して各メモリ８１２にデータを割り当て、ＣＰＵ８１０が各メモリ８０９に割り当てられたデータを分散処理する。
【００７５】
図９は、通信装置１０１の通信処理の一例を示す図である。図９を参照して、複数種類のフレームを送受信する環境における、通信装置１０１のフレームの受信時の処理について説明する。
【００７６】
ステップＳ９０５において、通信部８１３は、信号を受信する。通信部８１３は、例えば、パワートレイン２０９、シャシー２１０、センサー２１１およびＬｉＤＡＲ２１２等の機器から信号を受信し得る。
【００７７】
ステップＳ９１０において、通信部８１３は、受信した信号をフレームのフォーマットに変換し、フィルタ８０３に当該フレームを送信する。ある局面において、フレームは、ＴＣＰ／ＩＰのパケットの形式でもよいし、他の任意のフォーマットに従っていてもよい。
【００７８】
ステップＳ９１５において、フィルタ８０３は、受信したフレームを解析し、フレームの種類を判別する。フレームは、フィルタリングコードと、フィルタリングコードに対応するディスクリプタチェーン８１２のアドレスとの対応テーブル（図示しない）を含んでいてもよい。例えば、対応テーブルは、テーブル４００にディスクリプタチェーン８１２のアドレスを追加したものであってもよい。フィルタ８０３は、フレームのサイズ、ヘッダーおよびペイロードに含まれるデータのいずれかからフィルタリングコードを判別し、上記の対応テーブルからディスクリプタチェーン８１２のアドレスを取得する。
【００７９】
ステップＳ９２０において、フィルタ８０３は、フレームをメモリ制御部８０５に送信する。ステップＳ９２５において、フィルタ８０３は、フレームフィルタリングコードおよび当該フィルタリングコードに対応するディスクリプタチェーン８１２のアドレスをメモリ制御部８０５に送信する。
【００８０】
ステップＳ９３０において、メモリ制御部８０５は、受信したフレームをメモリ８０６に一時的に格納する。その際、メモリ制御部８０５は、フレームの前後にフレームの先頭または末尾であることを示す判定情報を付け加え、フレームをメモリ８０６に格納する。または、メモリ制御部８０５は、メモリ８０６内でのフレームの先頭および末尾の位置を判定情報として、レジスタに記憶してもよい。
【００８１】
ステップＳ９３５において、メモリ制御部８０５は、フィルタ８０３から受信したディスクリプタチェーン８１２のアドレスを参照する。図９に示す例では、フィルタ８０３から受信したディスクリプタチェーン８１２のアドレスは、ディスクリプタチェーン８１２Ａ，８１２Ｂ，８１２Ｃ，８１２Ｄのいずれかの先頭アドレスとなる。
【００８２】
なお、ステップＳ９３５にてフィルタ８０３から受信したディスクリプタチェーン８１２のアドレスは、ディスクリプタチェーン８１２Ａの先頭アドレスであるとする。メモリ制御部８０５は、ディスクリプタチェーン８１２Ａの先頭の「ディスクリプタ１−１」の転送ルールを取得する。
【００８３】
ステップＳ９４０において、メモリ制御部８０５は、「ディスクリプタ１−１」が最終データフラグを含むか否かを判定する。また、メモリ制御部８０５は、次のデータが判定情報を含むか否かに基づいて、次のデータ（メモリ８０６から取得するデータ）が、フレームの最終データであるか否かを判定する。
【００８４】
メモリ制御部８０５は、「ディスクリプタ１−１」が最終データフラグを含まない場合において、次のデータがフレームの最終データではないとき、制御をステップＳ９４５に移す。
【００８５】
メモリ制御部８０５は、「ディスクリプタ１−１」が最終データフラグを含む場合において、次のデータがフレームの最終データであるとき、転送ルールに規定されたデータのサイズを参照し、次のデータのサイズが転送ルールに規定されたデータのサイズ以下であるか否かを判定する。メモリ制御部８０５は、次のデータのサイズが転送ルールに規定されたデータのサイズ以下である場合は、次のデータが正常な最終データであると判定し、制御をステップＳ９４５に移す。
【００８６】
メモリ制御部８０５は、次のデータのサイズが転送ルールに規定されたデータのサイズより大きい場合は、次のデータが異常であると判定し、予め定められたエラー処理を行う。なお、メモリ制御部８０５は、転送ルールに規定されたデータのサイズと、次のデータのサイズとが一致するか否かに基づいて、次のデータが正常であるか否かを判定してもよい。なお、メモリ制御部８０５は、メモリ８０６に入出力するデータのサイズをカウントしているため、メモリ制御部８０５は、次のデータの判定情報と、次のデータをメモリ８０６から取り出すときのカウント数とから、次のデータのサイズを算出し得る。
【００８７】
それ以外の場合は、メモリ制御部８０５は、エラー処理を行う。メモリ制御部８０５は、エラー処理において、エラーを含む転送結果を「ディスクリプタ１−１」に格納してもよいし、エラー割り込み信号を出力してもよいし、これら両方の処理を実行してもよい。
【００８８】
ステップＳ９４５において、メモリ制御部８０５は、「ディスクリプタ１−１」によって規定されたメモリ８０９Ａ内のアドレスに、次のデータを格納する。メモリ８０９Ａに格納された次のデータは、ＣＰＵ８１０Ａによって処理される。
【００８９】
ステップＳ９５０において、メモリ制御部８０５は、次のデータの転送結果を「ディスクリプタ１−１」に格納する。なお、次のデータがフレームの最終データであった場合は、メモリ制御部８０５は、制御をステップＳ９３０に移す。
【００９０】
ステップＳ９５５において、メモリ制御部８０５は、ディスクリプタチェーン８１２において、参照するディスクリプタを１つ進める。ステップＳ９５５にて、メモリ制御部８０５は、「ディスクリプタ１−２」の転送ルールを取得する。
【００９１】
ステップＳ９６０において、メモリ制御部８０５は、「ディスクリプタ１−２」が最終データフラグを含むか否かを判定する。また、メモリ制御部８０５は、次のデータが、フレームの最終データであるか否かを判定する。
【００９２】
メモリ制御部８０５は、「ディスクリプタ１−２」が最終データフラグを含む場合において、次のデータがフレームの最終データであるとき、転送ルールに規定されたデータのサイズを参照し、次のデータのサイズが転送ルールに規定されたデータのサイズ以下であるか否かを判定する。メモリ制御部８０５は、次のデータのサイズが転送ルールに規定されたデータのサイズ以下である場合は、次のデータが正常な最終データであると判定し、制御をステップＳ９６５に移す。
【００９３】
メモリ制御部８０５は、次のデータのサイズが転送ルールに規定されたデータのサイズより大きい場合は、次のデータが異常であると判定し、エラー処理を行う。なお、メモリ制御部８０５は、転送ルールに規定されたデータのサイズと、次のデータのサイズとが一致するか否かに基づいて、次のデータが正常であるか否かを判定してもよい。
【００９４】
それ以外の場合は、メモリ制御部８０５は、エラー処理を行う。メモリ制御部８０５は、エラー処理において、エラーを含む転送結果を「ディスクリプタ１−２」に格納してもよいし、エラー割り込み信号を出力してもよいし、これら両方の処理を実行してもよい。
【００９５】
ステップＳ９６５において、メモリ制御部８０５は、「ディスクリプタ１−２」によって規定されたメモリ８０９Ｂ内のアドレスに、次のデータを格納する。メモリ８０９Ｂに格納された次のデータは、ＣＰＵ８１０Ｂによって処理される。
【００９６】
ステップＳ９７０において、メモリ制御部８０５は、次のデータの転送結果を「ディスクリプタ１−２」に格納する。なお、次のデータがフレームの最終データであった場合は、メモリ制御部８０５は、制御をステップＳ９３０に移す。
【００９７】
ステップＳ９７５において、メモリ制御部８０５は、ディスクリプタチェーン８１２において、参照するディスクリプタを１つ進める。ステップＳ９７５にて、メモリ制御部８０５は、「ディスクリプタ１−３」の転送ルールを取得する。
【００９８】
ステップＳ９８０において、メモリ制御部８０５は、「ディスクリプタ１−３」が最終データフラグを含むか否かを判定する。また、メモリ制御部８０５は、次のデータが、フレームの最終データであるか否かを判定する。
【００９９】
メモリ制御部８０５は、「ディスクリプタ１−３」が最終データフラグを含む場合において、次のデータがフレームの最終データであるとき、転送ルールに規定されたデータのサイズを参照し、次のデータのサイズが転送ルールに規定されたデータのサイズ以下であるか否かを判定する。メモリ制御部８０５は、次のデータのサイズが転送ルールに規定されたデータのサイズ以下である場合は、次のデータが正常な最終データであると判定し、制御をステップＳ９６５に移す。
【０１００】
メモリ制御部８０５は、次のデータのサイズが転送ルールに規定されたデータのサイズより大きい場合は、次のデータが異常であると判定し、エラー処理を行う。なお、メモリ制御部８０５は、転送ルールに規定されたデータのサイズと、次のデータのサイズとが一致するか否かに基づいて、次のデータが正常であるか否かを判定してもよい。
【０１０１】
それ以外の場合は、メモリ制御部８０５は、エラー処理を行う。メモリ制御部８０５は、エラー処理において、エラーを含む転送結果を「ディスクリプタ１−３」に格納してもよいし、エラー割り込み信号を出力してもよいし、これら両方の処理を実行してもよい。
【０１０２】
ステップＳ９８５において、メモリ制御部８０５は、「ディスクリプタ１−３」によって規定されたメモリ８０９Ｃ内のアドレスに、次のデータを格納する。メモリ８０９Ｃに格納された次のデータは、ＣＰＵ８１０Ｃによって処理される。
【０１０３】
ステップＳ９９０において、メモリ制御部８０５は、次のデータの転送結果を「ディスクリプタ１−３」に格納する。なお、次のデータがフレームの最終データであった場合は、メモリ制御部８０５は、制御をステップＳ９３０に移す。
【０１０４】
仮に、フレームに含まれるデータ数が３である場合、メモリ制御部８０５は、ステップＳ９３５〜ステップＳ９９０までの処理により、フレームに含まれる全てのデータをメモリ８０９に割り当てたことになる。
【０１０５】
図９を参照して説明した処理において、メモリ制御部８０５は、ステップＳ９３５〜ステップＳ９９０の処理をフレーム単位で実行する。例えば、通信装置１０１が、「フレームＡ」および「フレームＢ」を受信したとする。フィルタ８０３は、「フレームＡ」および「フレームＢ」をメモリ８０６に送信する。さらに、フィルタ８０３は、「フレームＡ」のフィルタリングコードに基づいて「ディスクリプタチェーン８１２のアドレスＡ」をメモリ制御部８０５に送信する。また、フィルタ８０３は、「フレームＢ」のフィルタリングコードに基づいて「ディスクリプタチェーン８１２のアドレスＢ」をメモリ制御部８０５に送信する。
【０１０６】
メモリ制御部８０５は、「フレームＡ」および「フレームＢ」をメモリ８０６に格納する。そして、メモリ制御部８０５は、「ディスクリプタチェーン８１２のアドレスＡ」に基づいて、参照するディスクリプタチェーン８１２を決定する。次に、メモリ制御部８０５は、「フレームＡ」の最終データを取得するまで、ステップＳ９３５以降の処理を実行する。
【０１０７】
メモリ制御部８０５は、「フレームＡ」に含まれる全てのデータをメモリ８０９に割り当てた後に、「ディスクリプタチェーン８１２のアドレスＢ」に基づいて、参照するディスクリプタチェーン８１２を決定する。以降は同様に、メモリ制御部８０５は、「フレームＢ」の最終データを取得するまで、ステップＳ９３５以降の処理を実行する。
【０１０８】
なお、メモリ制御部８０５は、図７の例示と同様に、フレームの前後にフレームの先頭または末尾であることを示す判定情報を付け加えて、メモリ８０６に格納する。または、メモリ制御部８０５は、メモリ８０６内でのフレームの先頭および末尾の位置を判定情報として、レジスタに記憶してもよい。
【０１０９】
さらに、メモリ制御部８０５は、メモリ８０６に入出力するデータのサイズをカウントし、メモリ８０６に当該データを格納する。そのため、メモリ制御部８０５は、次のデータの末尾に判定情報が含まれているか否かを確認し、かつ、次のデータのサイズを確認することで、次のデータがフレームの正常な最終データであるか否かを判定することができる。
【０１１０】
また、図９の処理において、通信装置１０１は、随時、データを送受信し得る。例えば、メモリ制御部８０５は、ステップＳ９３０以降の処理を実行している最中でも、ステップＳ９２０およびステップＳ９２５のメッセージを受信し得る。
【０１１１】
図１０は、ディスクリプタ１０００のフォーマットの一例を示す図である。本実施の形態に従う転送ルールは、ディスクリプタ１０００で規定されるデータを含む。ディスクリプタ１０００は、ＤＴ（Descriptor Type）と、ＤＩＥ（Descriptor Interrupt Enable）と、ＭＳＣ（MAC Status Code）と、ＰＳ（Padding Selection）と、ＥＩ（Error Indication）と、ＴＲ（Truncation Indication）と、ＤＳ（Data Size）と、ＦＩＮ（Final part of Rx-frame）と、ＪＤＳ（Just Data Size）と、ＤＰＴＲ（Data Pointer）とを含む。
【０１１２】
ＤＴは、ディスクリプタ１０００で規定される処理の完了/未完了、エラー、その他の状態を表す。また、ＤＴは、処理対象のデータの種類情報を含んでもよい。ＤＩＥは、ディスクリプタ１０００で規定される転送処理での割り込みの有効/無効の設定を表わす。ＭＳＣは、メディアアクセスコントローラー８０２から受信するエラーコードを表わす。ＰＳは、規格上の最低サイズ未満のフレームを規定されているサイズにするためのデータを表わす。
【０１１３】
ＥＩは、データ転送時のエラー情報を表わす。ＴＲは、受信エラー等でフレームが破棄されたことを示す情報を表わす。ＦＩＮは、ディスクリプタ１０００が、分割されたフレームの最終データを処理するディスクリプタであることを示す情報（最終データフラグ）を表わす。
【０１１４】
ＪＤＳは、フレームの最終データのエラー判定のフラグを表わす。ＪＤＳのエラー判定のフラグは、例えば、次の２種類を含み得る。（エラー判定１）「最終データのサイズが、ＤＳに指定されたサイズ以内であれば正常であると判定し、そうでなければエラーであると判定する」。（エラー判定２）「最終データのサイズが、ＤＳに指定されたサイズと一致すれば正常であると判定し、そうでなければエラーであると判定する」。ＤＰＴＲは、データの転送先のメモリ内のアドレスを指す。メモリ制御部８０５は、ＤＰＴＲを参照し、「次のデータをＤＰＴＲで規定するメモリ内のアドレスに転送する」処理を実行する。なお、図１０に示すディスクリプタ１０００のフォーマットは一例であり、ディスクリプタ１０００で設定できる項目は、これらに限られない。
【０１１５】
以上説明したように、本実施の形態に係る通信装置１０１によれば、メモリ制御部８０５は、ディスクリプタに設定される最終データフラグを参照することにより、フレーム単位でエラーを即座に検出することができる。その結果、通信装置１０１は、ＣＰＵ８１０のリソースをエラーの検出処理に割く必要がなくなり、通信装置１０１の処理性能が向上する。
【０１１６】
［第２の実施形態］
次に、第２の実施の形態に従う通信装置１０１の処理について説明する。第２の実施の形態は、１つのディスクリプタが、フレームに含まれる複数のデータの転送ルールを含む点で、上述の第１の実施の形態と異なる。第２の実施の形態に従う通信装置１０１のハードウェア構成は、第１の実施の形態の通信装置１０１と同じである。したがって、同じ構成の説明は繰り返さない。
【０１１７】
図１１は、ディスクリプタ１１００のフォーマットの一例を示す図である。本実施の形態に従う転送ルールは、ディスクリプタ１１００により規定されるデータを含む。ディスクリプタ１１００は、フレーム内のデータの個数分、ＤＴと、ＤＩＥと、ＭＳＣと、ＰＳと、ＥＩと、ＴＲと、ＤＳと、ＤＰＴＲとを含む。図１１に示すディスクリプタ１１００は、３個のデータを含むフレームに対応する。ある局面において、ディスクリプタ１１００は、２個以上の任意の数のデータの転送ルールを含んでもよい。
【０１１８】
ディスクリプタ１１００を用いることで、メモリ制御部８０５は、ディスクリプタチェーン８１２の参照回数を減らすことができる。フレームが３個のデータを含む場合を例に説明する。
【０１１９】
ディスクリプタ１０００を用いた転送処理の場合、ディスクリプタ１０００は１個のデータの転送ルールのみを含んでいるため、メモリ制御部８０５は、フレーム内の全てのデータを転送するために、ディスクリプタチェーン８１２を３回参照する必要がある。
【０１２０】
一方で、ディスクリプタ１１００を用いた転送処理の場合、ディスクリプタ１１００は３個のデータの転送ルールを含んでいるため、メモリ制御部８０５は、フレーム内の全てのデータを転送するために、ディスクリプタチェーン８１２を１回参照するだけでよい。そのため、ディスクリプタ１１００を用いた転送処理の場合、メモリ制御部８０５は、図９の処理における、ステップＳ９５５およびステップＳ９７５を省略することができる。また、ステップＳ９５５，Ｓ９７０，Ｓ９９０において、メモリ制御部８０５は、同一のディスクリプタに転送結果を格納する。
【０１２１】
さらに、ディスクリプタ１１００を用いることで、メモリ制御部８０５は、第１の実施の形態に従うディスクリプタ１０００を使用する場合と比較して、フレームの欠損の検出を素早く行うことができる。フレームが３個のデータを含む場合を例に説明する。
【０１２２】
メモリ制御部８０５は、ディスクリプタチェーン８１２を１回参照することにより、フレームに含まれる全てのデータに対する転送ルールを取得する。メモリ制御部８０５は、転送ルールに基づいて、フレームに含まれるデータの数および、各データのサイズの情報を得ることができる。また、メモリ制御部８０５は、メモリ８０６にフレームを格納する際に、フレームに追加した判定情報を用いて、メモリ８０６から取得する次のデータが先頭データおよび最終データであるか否かを判定することができる。
【０１２３】
そのため、メモリ制御部８０５は、図９に例示するエラー判定と共に、転送ルールに規定される次に転送される予定のデータがフレームの最終データではない場合において、次のデータがフレームの最終データであるとき、データに欠損が発生したと判定し、エラーを出力することができる。
【０１２４】
メモリ制御部８０５は、エラー処理において、エラーを含む転送結果をディスクリプタ１１００に格納してもよいし、エラー割り込み信号を出力してもよいし、これら両方の処理を実行してもよい。
【０１２５】
以上説明したように、本実施の形態に係る通信装置１０１によれば、メモリ制御部８０５は、フレームに含まれる複数のデータに対する転送ルールを規定したディスクリプタを参照することで、ディスクリプタチェーンの参照回数を減らし、早期にフレームの欠損を検出することができる。
【０１２６】
［第３の実施形態］
次に、第３の実施の形態に従う通信装置１０１の処理について説明する。第３の実施の形態は、ディスクリプタが、処理対象のデータのフレーム内の位置情報を含む点で、上述の第１および第２の実施の形態と異なる。第３の実施の形態に従う通信装置１０１のハードウェア構成は、第１および第２の実施の形態の通信装置１０１と同じである。したがって、同じ構成の説明は繰り返さない。
【０１２７】
図１２は、ディスクリプタ１２００のフォーマットの一例を示す図である。本実施の形態に従う転送ルールは、ディスクリプタ１２００により規定されるデータを含む。ディスクリプタ１２００は、ＤＴと、ＤＩＥと、ＭＳＣと、ＰＳと、ＥＩと、ＴＲと、ＤＳと、ＳＭＦ（Start or Middle or Final part of Rx-frame）と、ＪＤＳと、ＤＰＴＲとを含む。
【０１２８】
ＳＭＦは、処理対象のデータのフレーム内の位置を規定する。位置「Ｓｔａｒｔ」は、処理対象のデータがフレームの先頭データであることを意味する。位置「Ｍｉｄｄｌｅ」は、処理対象のデータがフレームの先頭でも末尾でもない中間位置のデータであることを意味する。位置「Ｆｉｎａｌ」は、処理対象のデータがフレームの最終データであることを意味する。
【０１２９】
ディスクリプタ１２００を用いることで、メモリ制御部８０５は、第１の実施の形態に従うディスクリプタ１０００を使用する場合と比較して、フレームの欠損の検出を素早く行うことができる。メモリ制御部８０５は、転送ルールに含まれるＩＭＦを参照することにより、次に転送予定のデータがフレーム内の先頭データ、中間データおよび最終データのいずれであるかを判定することができる。また、メモリ制御部８０５は、メモリ８０６にフレームを格納する際に、フレームに追加した判定情報を用いて、次のデータが先頭データおよび最終データであるか否かを判定することができる。
【０１３０】
そのため、メモリ制御部８０５は、図９に例示するエラー判定と共に、転送ルールに規定される次に転送される予定のデータの位置が「Ｓｔａｒｔ」または「Ｍｉｄｄｌｅ」の場合において、次のデータがフレームの最終データであるとき、データに欠損が発生したと判定し、エラーを出力することができる。
【０１３１】
また、メモリ制御部８０５は、図９に例示するエラー判定と共に、転送ルールに規定される次に転送される予定のデータの位置が「Ｍｉｄｄｌｅ」または「Ｆｉｎａｌ」の場合において、次のデータがフレームの先頭データであるとき、データに欠損が発生したと判定し、エラーを出力することができる。
【０１３２】
メモリ制御部８０５は、エラー処理において、エラーを含む転送結果をディスクリプタに格納してもよいし、エラー割り込み信号を出力してもよいし、これら両方の処理を実行してもよい。
【０１３３】
図１３は、ディスクリプタ１３００のフォーマットの一例を示す図である。本実施の形態に従う転送ルールは、ディスクリプタ１２００に代えてディスクリプタ１３００により規定されるデータを含んでもよい。ディスクリプタ１３００は、ＤＴと、ＤＩＥと、ＭＳＣと、ＰＳと、ＥＩと、ＴＲと、ＤＳと、ＤＰＴＲとを含む。
【０１３４】
ディスクリプタ１３００は、ＤＴの値を変更して複数の種類のデータを表すことで、フレーム内の最終データと、それ以外のデータとを区別する。メモリ制御部８０５は、ディスクリプタ１３００のＤＴを参照することにより、処理対象のデータがフレーム内の最終データであるか否かを判別することができる。
【０１３５】
ディスクリプタ１３００を用いることで、メモリ制御部８０５は、図９に例示するエラー判定と共に、転送ルールのＤＴが最終データを示さない場合において、次のデータがフレームの最終データであるとき、データに欠損が発生したと判定し、エラーを出力することができる。
【０１３６】
メモリ制御部８０５は、エラー処理において、エラーを含む転送結果をディスクリプタに格納してもよいし、エラー割り込み信号を出力してもよいし、これら両方の処理を実行してもよい。
【０１３７】
以上説明したように、本実施の形態に係る通信装置１０１によれば、メモリ制御部８０５は、処理対象のデータのフレーム内での位置を規定したディスクリプタを参照することで、早期にフレームの欠損を検出することができる。
【０１３８】
［第４の実施形態］
次に、第４の実施の形態に従う通信装置１０１の処理について説明する。第４の実施の形態は、フレームが内包する各データのヘッダーコードおよびテイルコードを含む点で、上述の第１〜第３の実施の形態と異なる。第４の実施の形態に従う通信装置１０１のハードウェア構成は、第１〜第３の実施の形態の通信装置１０１と同じである。したがって、同じ構成の説明は繰り返さない。
【０１３９】
図１４は、フレーム１４００のフォーマットの一例を示す図である。フレーム１４００は、フレーム１４００に含まれる全てのペイロードの前後にヘッダーコードおよびテイルコードをそれぞれ含む。図１４の例示において、フレーム１４００は、ペイロードＢ１，Ｃ１を含み、さらに、ペイロードＢ１，Ｃ１の前後にヘッダーコードおよびテイルコードをそれぞれ含む。ヘッダーコードおよびテイルコードは、ペイロードのサイズや識別コードを含んでいてもよい。ヘッダーＡ１は、フレーム１４００のヘッダーである。
【０１４０】
メモリ制御部８０５は、フレーム１４００のヘッダーコードおよびテイルコードを参照することで、メモリ８０６から取得した次のデータのサイズおよびペイロードの識別情報を取得することができる。そのため、メモリ制御部８０５は、メモリ８０６から次のデータを取り出すときに、次のデータのサイズおよび識別情報と、転送ルールに規定されるサイズおよびＤＴ等とを比較し、データの種類やサイズが一致していない場合にエラーを出力することができる。
【０１４１】
図１５は、フレーム１５００のフォーマットの一例を示す図である。フレーム１５００は、フレーム１４００と異なり、ペイロードにヘッダーコードの代わりに要素識別コードを追加したものである。
【０１４２】
メモリ制御部８０５は、フレーム１５００の要素識別コードおよびテイルコードを参照することで、メモリ８０６から取得した次のデータのサイズおよびペイロードの識別情報を取得することができる。そのため、メモリ制御部８０５は、メモリ８０６から次のデータを取り出すときに、次のデータのサイズおよびヘッダーコードと、転送ルールに規定されるサイズおよびＤＴ等とを比較し、データの種類やサイズが一致していない場合にエラーを出力することができる。
【０１４３】
図１６は、ディスクリプタ１６００のフォーマットの一例を示す図である。本実施の形態に従う転送ルールは、ディスクリプタ１０００に代えてディスクリプタ１６００により規定されるデータを含んでもよい。ディスクリプタ１６００は、ディスクリプタ１１００にＰＥＩＤ（Packet Element Identification）を追加したものである。
【０１４４】
ＰＥＩＤは、処理対象のデータの識別コードであり、図１４のヘッダーコードおよび図１５の要素識別コードに対応する。ディスクリプタ１６００は、フレーム１４００またはフレーム１５００と共に、メモリ制御部８０５により参照される。
【０１４５】
メモリ制御部８０５は、フレーム１４００またはフレーム１５００を参照することで、メモリ８０６から次のデータを取り出すときに、次のデータのサイズおよび識別情報を取得できる。メモリ制御部８０５は、これらの次のデータのサイズおよび識別情報と、ディスクリプタ１６００の転送ルールに規定されるサイズおよびＤＴ等とを比較し、データの種類やサイズが一致していない場合にエラーを出力することができる。
【０１４６】
さらに、メモリ制御部８０５は、ディスクリプタ１６００を参照することにより、フレーム中の全てのデータのサイズおよび識別情報を取得できる。そのため、メモリ制御部８０５は、メモリ８０６から取得した次のデータの識別情報およびサイズと、ディスクリプタ１６００のＰＥＩＤおよびＤＳ等とを照合することにより、フレーム内のデータごとに正常であるか否かを判定することができる。よって、メモリ制御部８０５は、フレームの一部のデータが欠損したとしても、フレームを全て削除することなく、その他の正常なデータのみをメモリ８０９に転送することができる。
【０１４７】
以上説明したように、本実施の形態に係る通信装置１０１によれば、メモリ制御部８０５は、フレームのペイロードの前後のヘッダーコードおよびテイルコード等を参照する。また、メモリ制御部８０５は、これらのヘッダーコードおよびテイルコード等と、ディスクリプタのＤＴ、ＰＥＩＤおよびＤＳ等とを比較することにより、早期にフレームの欠損を検出することができる。
【０１４８】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【符号の説明】
【０１４９】
５０２Ａ，５０２Ｂ，５０２Ｃ，５０２Ｄ，５０２Ｅ，１０００，１１００，１２００，１３００，１６００  ディスクリプタ、
１０１  通信装置、
２０２，２０２Ａ，２０２Ｂ，２０２Ｃ，２０５，８０９，８０９Ａ，８０９Ｂ，８０９Ｃ，８１１，８１２，９１１  メモリ、
２０３  コントローラー、
２０４，８０８  バス、
２０６  ゲートウェイ、
２０８  イーサーネット、
２０９  パワートレイン、
２１０  シャシー、
２１１  センサー、
２１３，８０４，８０６  メモリ、
３０１，３０２  シグナル、
３０３  信号、
４００  テーブル、
５０１，８１２Ａ，８１２Ｂ，８１２Ｃ，８１２Ｄ  ディスクリプタチェーン、
５０３，５０３Ａ，５０３Ｂ，５０３Ｃ，６０３Ａ，７０３，７０３Ａ，７０３Ｂ，７０３Ｃ，１４００，１５００  フレーム、
７１０  最終データフラグ、
８０１  イーサーネットＰＨＹ、
８０２  メディアアクセスコントローラー、
８０３  フィルタ、
８０５  メモリ制御部、
８０７  一時データ、
８１３  通信部。
【図１】
2020170982.tif 000003
【図２】
2020170982.tif 000004
【図３】
2020170982.tif 000005
【図４】
2020170982.tif 000006
【図５】
2020170982.tif 000007
【図６】
2020170982.tif 000008
【図７】
2020170982.tif 000009
【図８】
2020170982.tif 000010
【図９】
2020170982.tif 000011
【図１０】
2020170982.tif 000012
【図１１】
2020170982.tif 000013
【図１２】
2020170982.tif 000014
【図１３】
2020170982.tif 000015
【図１４】
2020170982.tif 000016
【図１５】
2020170982.tif 000017
【図１６】
2020170982.tif 000018