IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社東芝の特許一覧

<>
  • 特開-データ転送装置及び方法 図1
  • 特開-データ転送装置及び方法 図2
  • 特開-データ転送装置及び方法 図3
  • 特開-データ転送装置及び方法 図4
  • 特開-データ転送装置及び方法 図5
  • 特開-データ転送装置及び方法 図6
  • 特開-データ転送装置及び方法 図7
  • 特開-データ転送装置及び方法 図8
  • 特開-データ転送装置及び方法 図9
  • 特開-データ転送装置及び方法 図10
  • 特開-データ転送装置及び方法 図11
  • 特開-データ転送装置及び方法 図12
  • 特開-データ転送装置及び方法 図13
  • 特開-データ転送装置及び方法 図14
  • 特開-データ転送装置及び方法 図15
  • 特開-データ転送装置及び方法 図16
  • 特開-データ転送装置及び方法 図17
  • 特開-データ転送装置及び方法 図18
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025092971
(43)【公開日】2025-06-23
(54)【発明の名称】データ転送装置及び方法
(51)【国際特許分類】
   H04L 47/24 20220101AFI20250616BHJP
   H04L 47/27 20220101ALI20250616BHJP
   G06F 13/30 20060101ALI20250616BHJP
   G06F 13/362 20060101ALI20250616BHJP
【FI】
H04L47/24
H04L47/27
G06F13/30
G06F13/362 510D
【審査請求】未請求
【請求項の数】17
【出願形態】OL
(21)【出願番号】P 2023208421
(22)【出願日】2023-12-11
(71)【出願人】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】小林 優太
(72)【発明者】
【氏名】山浦 隆博
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA02
5K030KA02
5K030LA03
(57)【要約】
【課題】通信における低遅延を実現することが可能なデータ転送装置及び方法を提供することにある。
【解決手段】実施形態に係るデータ転送装置は、発行手段と、制御手段とを具備する。発行手段は、第1データを転送するための第1リクエストを第1インタフェースを介して発行する。制御手段は、第1リクエストが発行された場合、第1リクエストに対するレスポンスの入力が開始されてから当該入力が完了するまでに要する期間が経過するまでの間、第1データよりも後の第2データを転送するための第2リクエストの発行を停止する。
【選択図】図5
【特許請求の範囲】
【請求項1】
優先度が指定されているデータを順次転送するデータ転送装置において、
第1データを転送するための第1リクエストを第1インタフェースを介して発行する発行手段と、
前記第1リクエストが発行された場合、前記第1インタフェースを介した前記第1リクエストに対するレスポンスの入力が開始されてから当該入力が完了するまでに要する期間が経過するまでの間、前記第1データよりも後の第2データを転送するための第2リクエストの発行を停止する制御手段と
を具備するデータ転送装置。
【請求項2】
前記発行手段は、前記第2リクエストの発行の停止が解除された際に前記第2データよりも後の第3データを転送するための第3リクエストの発行が可能である場合、前記第2及び第3データに対して指定されている優先度に基づいて前記第2または第3リクエストを発行する請求項1記載のデータ転送装置。
【請求項3】
前記第1~第3リクエストは、前記第1~第3データを要求するリクエストである請求項2記載のデータ転送装置。
【請求項4】
前記第1~第3リクエストは、前記第1~第3データに関する情報が記述された第1~第3記述子を要求するリクエストである請求項2記載のデータ転送装置。
【請求項5】
前記制御手段は、前記第2データに対して指定されている優先度が予め定められている優先度よりも低い場合に、前記第2リクエストの発行を停止する請求項1記載のデータ転送装置。
【請求項6】
前記第1インタフェースを介して第1メモリと接続されており、
前記第1データは、前記第1インタフェースを介して前記第1メモリから入力され、前記第1インタフェースとは異なる第2インタフェースを介して前記第1メモリとは異なる第2メモリに出力される
請求項1記載のデータ転送装置。
【請求項7】
前記第2メモリに出力された第1データは、ネットワークに接続するためのネットワーク装置を介して送信される請求項6記載のデータ転送装置。
【請求項8】
優先度が指定されているデータを順次転送するデータ転送装置において、
第1データに関する情報が記述されている第1記述子を要求する第1記述子リクエストを発行する第1発行手段と、
前記第1記述子リクエストが発行されることによって入力された第1記述子に基づいて前記第1データを要求する第1データリクエストを発行する第2発行手段と、
前記第1データよりも優先度の高い第2データに関する情報が記述されている第2記述子を要求する第2記述子リクエストが発行されるタイミングでwindow値を設定し、クロックサイクルまたは時間の経過に応じて当該window値を減少させる第1制御手段と
を具備し、
前記第2発行手段は、前記第1データの入力が開始されてから当該入力が完了するまでに要する期間と前記window値とに基づいて前記第1データリクエストを発行する
データ転送装置。
【請求項9】
前記第1記述子リクエストが発行された場合、前記第1記述子の入力が開始されてから当該入力が完了するまでに要する期間が経過するまでの間、前記第2記述子リクエストの発行を停止する、または、前記第1データリクエストが発行された場合、前記第1データの入力が開始されてから当該入力が完了するまでに要する期間が経過するまでの間、前記第2データを要求する第2データリクエストの発行を停止する第2制御手段を更に具備する請求項8記載のデータ転送装置。
【請求項10】
前記第1制御手段は、前記第1データリクエストが発行された場合、前記第1データの入力が開始されてから当該入力が完了するまでに要する期間を前記window値から減算し、当該期間が経過した後に当該window値の減少を再開する請求項8記載のデータ転送装置。
【請求項11】
前記第1記述子リクエストよりも前の第3記述子リクエストが発行されてから当該第3記述子リクエストによって要求された第3記述子の入力が開始されるまでの期間または前記第1データリクエストよりも前の第3データリクエストが発行されてから当該第3データリクエストによって要求された第3データの入力が開始されるまでの期間を計測する計測手段を更に具備し、
前記window値は、前記計測結果に基づいて決定される
請求項8記載のデータ転送装置。
【請求項12】
第1インタフェースを介して第1メモリと接続されており、
前記第1データは、前記第1インタフェースを介して前記第1メモリから入力され、前記第1インタフェースとは異なる第2インタフェースを介して前記第1メモリとは異なる第2メモリに出力される
請求項11記載のデータ転送装置。
【請求項13】
前記第2メモリに出力された第1データは、ネットワークに接続するためのネットワーク装置を介して送信される請求項12記載のデータ転送装置。
【請求項14】
前記ネットワーク装置は、IEEE802.1Qbu/3brに準拠しており、
前記第2発行手段は、前記第1データが前記IEEE802.1Qbu/3brにおけるPreemptableフレームである場合にのみ、前記window値に基づいて前記第1データリクエストを発行する
請求項13記載のデータ転送装置。
【請求項15】
確認手段を更に具備し、
前記第2メモリは、複数のキューを有し、
前記ネットワーク装置は、当該ネットワーク装置から送信されるデータに対して指定されている優先度に基づいて当該データが格納される前記キューのゲートの開閉が設定されたゲート制御情報に基づいて、当該データの送信タイミングを制御する処理手段を含み、
前記確認手段は、前記ゲート制御情報、前記計測結果及び前記転送されるデータ長の最大値に基づいて、前記第2データが前記第2メモリに出力された後の期間における当該第2データが格納されるキューのゲートの開閉状態を確認し、
前記window値は、前記確認結果に基づいて設定される
請求項13記載のデータ転送装置。
【請求項16】
優先度が指定されているデータを順次転送するデータ転送装置が実行する方法において、
第1データを転送するための第1リクエストを第1インタフェースを介して発行するステップと、
前記第1リクエストが発行された場合、前記第1インタフェースを介した前記第1リクエストに対するレスポンスの入力が開始されてから当該入力が完了するまでに要する期間が経過するまでの間、前記第1データよりも後の第2データを転送するための第2リクエストの発行を停止するステップと
を具備する方法。
【請求項17】
優先度が指定されているデータを順次転送するデータ転送装置が実行する方法において、
第1データに関する情報が記述されている第1記述子を要求する第1記述子リクエストを発行するステップと、
前記第1記述子リクエストが発行されることによって入力された第1記述子に基づいて前記第1データを要求する第1データリクエストを発行するステップと、
前記第1データよりも優先度の高い第2データに関する情報が記述されている第2記述子を要求する第2記述子リクエストが発行されるタイミングでwindow値を設定し、クロックサイクルまたは時間の経過に応じて当該window値を減少させるステップと
を具備し、
前記第1データリクエストを発行するステップは、前記第1データの入力が開始されてから当該入力が完了するまでに要する期間と前記window値とに基づいて前記第1データリクエストを発行するステップを含む
方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、データ転送装置及び方法に関する。
【背景技術】
【0002】
近年、工場内の各産業用機器間を接続する産業用ネットワーク及び自動車内の制御コントローラを接続する車載ネットワーク等の分野においてイーサネット(登録商標)の利用が進んでいる。
【0003】
このような産業用ネットワーク及び車載ネットワークにおいては、高いリアルタイム性が求められるため、様々なリアルタイムイーサネット規格が提案されている。
【0004】
ところで、一般に通信システムを構成する通信装置においては例えばホスト装置からのデータがNIC(Network Interface Card)を介してネットワークに送信されるが、上記したリアルタイムイーサネット規格においては、NICとネットワークとの間の処理(ネットワーク処理)が規定されている。
【0005】
しかしながら、実際に通信システムを構築する場合には、上記したネットワーク処理以外にホスト装置とNICとの間の処理も考慮しなければ、ネットワークを介して行われる通信における高いリアルタイム性(つまり、通信における低遅延)を実現することができない可能性がある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特許第5293516号公報
【特許文献2】特開2016-082363号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
そこで、本発明が解決しようとする課題は、通信における低遅延を実現することが可能なデータ転送装置及び方法を提供することにある。
【課題を解決するための手段】
【0008】
実施形態によれば、優先度が指定されているデータを順次転送するデータ転送装置が提供される。前記データ転送装置は、発行手段と、制御手段とを具備する。前記発行手段は、第1データを転送するための第1リクエストを第1インタフェースを介して発行する。前記制御手段は、前記第1リクエストが発行された場合、前記第1インタフェースを介した前記第1リクエストに対するレスポンスの入力が開始されてから当該入力が完了するまでに要する期間が経過するまでの間、前記第1データよりも後の第2データを転送するための第2リクエストの発行を停止する。
【図面の簡単な説明】
【0009】
図1】第1実施形態の比較例における通信装置の構成の一例を示す図。
図2】本実施形態の比較例における通信装置の処理手順の一例を示すフローチャート。
図3】本実施形態の比較例に係るデータ転送装置の処理時間について説明するための図。
図4】異なる優先度の送信データを転送するための複数のリクエストが順次発行される状況において発生する遅延の一例について説明するための図。
図5】本実施形態における通信装置の構成の一例を示す図。
図6】DTC遅延制御部の動作の一例について説明するための図。
図7】本実施形態において実現される低遅延について説明するための図。
図8】第2実施形態の比較例に係るデータ転送装置の処理時間について説明するための図。
図9】異なる優先度の送信データが順次転送される状況において発生する遅延の一例について説明するための図。
図10】本実施形態における通信装置の構成の一例を示す図。
図11】window制御部に保持されるwindow値の概略について説明するための図。
図12】window制御部の動作の一例について説明するための図。
図13】本実施形態において実現される低遅延について説明するための図。
図14】DTC遅延制御部が省略された場合のwindow制御部の動作の一例について説明するための図。
図15】第3実施形態における通信装置の構成の一例を示す図。
図16】window制御部及びゲート状態確認部の動作の一例について説明するための図。
図17】window制御部及びゲート状態確認部の動作の一例について説明するための図。
図18】各実施形態における通信装置を用いたシステムの構成例を示す図。
【発明を実施するための形態】
【0010】
以下、図面を参照して、各実施形態について説明する。
(第1実施形態)
まず、第1実施形態について説明する。図1は、本実施形態の比較例における通信装置の構成の一例を示す。なお、図1に示す通信装置1は、例えばパーソナルコンピュータ(PC)、サーバ装置、専用LSI(Large-Scale Integration)またはFPGA(Field Programmable Gate Array)等の装置であることが想定されるが、他の装置であってもよい。
【0011】
図1に示すように、通信装置1は、CPU10、メモリ20、データ転送装置30及びメモリ40等を備える。
【0012】
CPU10及びメモリ20は、ホスト装置を構成する。CPU10(ホストプロセッサ)は、当該CPU10内のメモリコントローラを介してメモリ(以下、ホスト側メモリと表記)20と接続されている。CPU10は、ホスト側メモリ20にロードされた各種アプリケーションプログラムを実行する。本実施形態においては、CPU10によってアプリケーションプログラムが実行されることによって、ネットワークを介して通信装置1から外部の機器へ送信されるデータ(以下、送信データと表記)が生成されるものとする。
【0013】
なお、上記した送信データ及び当該送信データに関する情報が記述された記述子(ディスクリプタ)は、CPU10上で動作するドライバ10aによって、ホスト側メモリ20に書き込まれる。記述子は、例えば送信データのデータ長(サイズ)及び当該送信データが書き込まれたホスト側メモリ20のアドレス等を含む。
【0014】
ここで、ホスト側メモリ20は、送信データが書き込まれる領域(以下、送信データ領域と表記)20a及び記述子が書き込まれる領域(以下、記述子領域と表記)20bを含む。本実施形態においては上記したアプリケーションプログラムによって送信データに対する所定の優先度が指定されており、送信データ領域20a及び記述子領域20bは、当該優先度に対応する複数のキュー(当該優先度が割り当てられている複数のキュー)を有する。図1に示す例では、送信データ領域20a及び記述子領域20bは、キューq0~qNを有する。
【0015】
本実施形態において、ホスト側メモリ20は、例えばSRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)またはSDRAM(Synchronous Dynamic Random Access Memory)等により実現される。
【0016】
データ転送装置30は、例えばDMAC(Direct Memory Access Controller)に相当し、上記したホスト側メモリ20(送信データ領域20a)に書き込まれたデータを順次転送する機能を有する。
【0017】
図1に示すように、データ転送装置30は、ホストインタフェース31、第1インタフェース部32、記述子読み出し部33、記述子バッファ34、送信データ読み出し部35及び第2インタフェース部36を含む。
【0018】
ホストインタフェース31は、データ転送装置30をCPU10(ドライバ10a)と接続するためのインタフェースである。ホストインタフェース31は、上記した優先度に対応するキューq0~qNにアクセスするための情報を保持するためのレジスタ領域を有する。ホストインタフェース31のキューq0~qNに対応したレジスタ領域には、上記した送信データが生成された際にドライバ10aから発行される転送リクエストに基づいて、記述子情報が格納される。
【0019】
第1インタフェース部32は、データ転送装置30をホスト側メモリ20と接続するためのインタフェースであり、DMA処理を実現するために設けられている。
【0020】
記述子読み出し部33は、ホストインタフェース31が有するキューq0~qNに格納された記述子情報に基づいて、ホスト側メモリ20(記述子領域20b)から記述子を読み出すための記述子リクエスト(当該記述子を要求するリクエスト)を発行する。記述子読み出し部33によって発行された記述子リクエストは、当該記述子リクエストに基づいて読み出される記述子のアドレス及びデータ長(サイズ)等を含み、第1インタフェース部32を介してホスト側メモリ20に出力される。
【0021】
上記したようにホスト側メモリ20に出力された記述子リクエストに基づいて記述子領域20bから読み出された記述子は、第1インタフェース部32を介して、データ転送装置30に入力される。このようにデータ転送装置30に入力された記述子は、記述子バッファ34に格納される。なお、記述子バッファ34は、上記した優先度に対応するキューq0~qNを有する。
【0022】
送信データ読み出し部35は、記述子バッファ34が有するキューq0~qNに格納された記述子に基づいて、ホスト側メモリ20(送信データ領域20a)から送信データを読み出すための送信データリクエスト(当該送信データを要求するリクエスト)を発行する。送信データ読み出し部35によって発行された送信データリクエストは、当該送信データリクエストに基づいて読み出される送信データのアドレス及びデータ長(サイズ)等を含み、第1インタフェース部32を介してホスト側メモリ20に出力される。
【0023】
上記したようにホスト側メモリ20に出力された送信データリクエストに基づいて送信データ領域20aから読み出された送信データは、第1インタフェース部32を介して、データ転送装置30に入力される。このようにデータ転送装置30に入力された送信データは、第2インタフェース部36を介して、メモリ40に出力される。
【0024】
第2インタフェース部36は、データ転送装置30をメモリ40と接続するためのインタフェースである。
【0025】
メモリ40はキューQを有し、上記したようにデータ転送装置30(第2インタフェース部36)から出力された送信データは当該キューQに格納される。
【0026】
なお、図1においては省略されているが、メモリ40は通信装置1が備えるネットワーク装置によって用いられ、当該ネットワーク装置は、当該メモリ40(キューQ)に格納された送信データをネットワーク(例えば、イーサネットに基づくネットワーク)に送信する。なお、ネットワーク装置は、ネットワークに接続するための機器であり、例えばネットワークインタフェースカード(NIC:Network Interface Card)を含む。この場合、メモリ40は、例えNIC用送信メモリ(NIC側メモリ)ということができる。
【0027】
また、上記した記述子領域20bは、例えば優先度毎にリングバッファとして実現されているものとする。リングバッファは複数のデータ(記述子)を格納するように構成され、当該リングバッファ内のデータは、当該データを書き込む位置を示す書き込みポインタ(Head)及び当該データを読み出す位置を示す読み出しポインタ(Tali)を用いて管理される。なお、書き込みポインタは、リングバッファにデータが書き込まれる度に更新される。また、読み出しポインタは、リングバッファからデータが読み出される度に更新される。記述子領域20bをリングバッファで実現する場合、上記したホストインタフェース31の記述子情報には、優先度毎にリングバッファの先頭アドレスやリングバッファの長さ、書き込みポインタ(Head)、読み出しポインタ(Tail)等が格納される。リングバッファの先頭アドレスやリングバッファの長さなどは、データ転送装置30の初期化時などの記述子領域20bを確保した際に設定される。ドライバ10aはデータを送信する場合、該当優先度のHeadとTailからリングバッファに空き領域が存在するかを確認する。空き領域があれば記述子及び送信データを準備した後にHeadを進めることで、データ転送装置30に送信データが存在することを通知する。データ転送装置31は、HeadとTailからリングバッファに送信データが存在すると判定した場合、データ送信処理を実施する。一連の処理が完了した際にTailを進めることにより、ドライバ10aにデータ送信が完了したことを通知することが可能となる。本実施形態では省略しているがデータ転送装置30は割り込み信号などの機構を持ち、Tailが更新されたことは割り込みによってCPU10へ通知される。
【0028】
更に、図1に示す通信装置1に含まれるデータ転送装置30(DMAC)は2つのメモリ(ホスト側メモリ20及びNIC用送信メモリ40)間で送信データを転送する場合に用いられることを想定しているが、当該データ転送装置30は、NIC及びGPU(Graphics Processing Unit)等のメモリ以外の処理装置(機器)間で送信データを転送するような場合に用いられても構わない。
【0029】
また、図1においてはデータ転送装置30がホストインタフェース31、第1インタフェース部32、記述子読み出し部33、記述子バッファ34、送信データ読み出し部35及び第2インタフェース部36を含むものとして説明したが、当該データ転送装置30のうちの少なくとも一部は、ソフトウェアまたはハードウェアによって実現されてもよいし、ソフトウェア及びハードウェアの組み合わせによって実現されてもよい。
【0030】
更に、図1においてはNIC用送信メモリ40が1つのキューQを有するものとして説明したが、当該NIC用送信メモリ40は、上記した送信データに対して指定されている優先度毎に用意された複数のキュー(例えば、キューQ0~QN)を有していてもよい。
【0031】
また、図1においては通信装置1がCPU10、ホスト側メモリ20、データ転送装置30及びNIC用送信メモリ40を備えるものとして説明したが、当該CPU10、ホスト側メモリ20、データ転送装置30及びNIC用送信メモリ40の一部は一体として構成されていてもよい。また、例えばデータ転送装置30は、データ転送部(転送処理部)としてNIC等に組み込まれていてもよい。
【0032】
次に、図2のフローチャートを参照して、本実施形態の比較例における通信装置1の処理手順の一例について説明する。なお、本実施形態においては送信データに所定の優先度が指定されているが、以下の説明において当該優先度は、単に当該送信データの優先度と称する場合がある。また、送信データの優先度は、当該送信データに関する情報が記述された記述子(以下、送信データの記述子と表記)の優先度、当該送信データを要求する送信リクエストの優先度、または当該記述子を要求する記述子リクエストの優先度のように称する場合がある。
【0033】
まず、CPU10がアプリケーションプログラムを実行することによって送信データが生成された場合、ドライバ10aは、当該アプリケーションプログラムからの当該送信データの送信指示を受け付ける(ステップS1)。
【0034】
ステップS1において送信データの送信指示が受け付けられた場合、ドライバ10aは、当該送信データ及び当該送信データの記述子をホスト側メモリ20に書き込む(ステップS2)。
【0035】
ステップS2において、送信データは、ホスト側メモリ20に含まれる送信データ領域20aが有するキューq0~qNのうちの当該送信データの優先度に対応するキューに書き込まれる。同様に、送信データの記述子は、ホスト側メモリ20に含まれる記述子領域20bが有するキューq0~qNのうちの当該記述子の優先度(つまり、送信データの優先度)に対応するキューに書き込まれる。
【0036】
なお、例えば送信データ領域20aが有するキューq0~qNと記述子領域20bが有するキューq0~qNとは対応しており、例えば送信データの優先度がキューNに対応しているものとすると、当該送信データは送信データ領域20aが有するキューNに書き込まれ、当該送信データの記述子は記述子領域20bが有するキューNに書き込まれる。
【0037】
記述子領域20bが有するキューNに記述子が書き込まれた場合、当該キューN(リングバッファ)内のデータを管理する書き込みポインタは、次に記述子が書き込まれる位置を示すように更新される。
記述子領域20bが有するキューNについて説明したが、もし他のキューをリングバッファで構成する場合についても同様の処理となる。
【0038】
ステップS2の処理が実行されると、ドライバ10aは、データ転送装置30に対して転送リクエスト(送信データの転送要求)を発行する(ステップS3)。なお、ステップS3において発行される転送リクエストには、記述子情報が含まれる。この記述子情報は、ステップS2において記述子が書き込まれた記述子領域20b内の位置を示すポインタ(リングバッファの読み出しポインタ)等を含み、データ転送装置30に含まれるホストインタフェース31が有するキューq0~qNレジスタ領域のうちのステップS2においてホスト側メモリ20に書き込まれた送信データ及び記述子の優先度に対応するレジスタ領域に格納される。
【0039】
ここで、上記したようにホストインタフェース31が有するレジスタ領域に記述子情報が格納された場合、当該キュー(リングバッファ)内のデータを管理する書き込みポインタが更新されるが、記述子読み出し部33は、このような書き込みポインタの更新に基づいてドライバ10aからの転送リクエストを検知する。
【0040】
この場合、記述子読み出し部33は、ホストインタフェース31が有するキューq0~qNレジスタ領域に格納されている記述子情報に含まれるポインタに基づいて記述子リクエストを発行する(ステップS4)。ステップS4において発行された記述子リクエストは、記述子情報に含まれるポインタによって示される位置から記述子を読み出すためのリクエストであり、第1インタフェース部32を介してホスト側メモリ20に出力される。
【0041】
ステップS4の処理が実行されると、記述子リクエストに基づいて記述子領域20bから記述子が読み出され、当該読み出された記述子が第1インタフェース部32を介してデータ転送装置30に入力される。このように第1インタフェース部32を介してデータ転送装置30に入力された記述子は、記述子バッファ34に格納される。記述子バッファ34はキューq0~qNを有しており、データ転送装置30に入力された記述子は、当該キューq0~qNのうちの当該記述子の優先度に対応するキューに格納される。
【0042】
次に、送信データ読み出し部35は、記述子バッファ34が有するキューq0~qNに格納された記述子に基づいて送信データリクエストを発行する(ステップS5)。上記したように記述子には送信データのデータ長及び当該送信データが書き込まれている送信データ領域20aのアドレス等が含まれており、ステップS5において発行された送信データリクエストは、当該送信データ領域20aのアドレスから当該データ長の送信データを読み出すためのリクエストである。送信データリクエストは、第1インタフェース部32を介してホスト側メモリ20に出力される。
【0043】
ステップS5の処理が実行されると、送信データリクエストに基づいて送信データ領域20aから送信データが読み出され、当該読み出された送信データが第1インタフェース部32を介してデータ転送装置30に入力される。
【0044】
このように第1インタフェース部32を介してデータ転送装置30に入力された送信データは、第2インタフェース部36を介して、NIC用送信メモリ40に出力される(ステップS6)。
【0045】
本実施形態の比較例においては、上記した図2に示す処理が実行されることにより、第1インタフェース部32及び第2インタフェース部36を介して、ホスト側メモリ20からNIC用送信メモリ40に送信データを転送することができる。このようにデータ転送装置30によってホスト側メモリ20からNIC用送信メモリ40に転送された送信データは、NICを介してネットワーク(つまり、外部の機器等)に送信される。
【0046】
なお、上記した図2に示す処理においては例えばホストインタフェース31が有するキューq0~qNレジスタ領域に格納された記述子情報に含まれるポインタに基づいて記述子リクエストが発行されるが、当該記述子リクエストに基づく記述子の読み出し処理において遅延が発生する場合には、当該遅延が発生している間にホストインタフェース31が有するキューq0~qNレジスタ領域の書き込みポインタ(Head)が進み、2つ以上の優先度の記述子が記述子領域20bに格納された状態になる可能性がある。
【0047】
この場合、記述子読み出し部33は、記述子情報が格納されている2つ以上の優先度のうちの1つのキューを選択し、当該選択された優先度のレジスタ領域に格納されている記述子情報に含まれるポインタに基づいて記述子リクエストを発行するように動作する。具体的には、記述子読み出し部33は、例えばStrict Priorityに従って、記述子情報が格納されている2つ以上のレジスタ領域のうち最も高い優先度に対応するキュー(例えば、キューqN)を選択することができる。なお、キューの選択は、例えばRound-Robin方式等の他のアルゴリズムに従って行われてもよい。
【0048】
ここではホストインタフェース31が有する1つのキューを記述子読み出し部33が選択する場合について説明したが、記述子バッファ34が有するキューq0~qNのうちの2つ以上のキューに記述子が格納されている場合には、送信データ読み出し部35は、記述子読み出し部33と同様に1つのキューを選択して送信データリクエストを発行するものとする。また、記述子読み出し部33と送信データ読み出し部35が同時にリクエストを発行する場合も考えられる。この場合は、第1インタフェース部32においてリクエストを1つ選択する。この場合、記述子リクエストと送信データリクエストに優先度をつけてStrict Priorityで処理してもよいし(例えば常に送信データリクエストが優先されるような優先度設定をする)、記述子リクエストと送信データリクエストをRound-Robinで交互に発行してもよい。なお、記述子リクエストと送信データリクエストを区別せずにそれぞれに優先度を設定し、第1インタフェース部32においてリクエストを選択してもよい。
【0049】
なお、上記したホストインタフェース31が有するキューq0~qNレジスタ領域及び記述子バッファ34が有する複数のキューq0~qNは例えばキューq0、q1、…、qNの順に優先度が高くなる場合を想定しているが、当該各キューq0~qNに対応する優先度(つまり、キューq0~qNの各々と優先度との対応関係)は、例えばマッピングテーブル等において管理され、必要に応じて変更されても構わない。
【0050】
以下、図3を参照して、本実施形態の比較例に係るデータ転送装置30の処理時間について説明する。図3は、データ転送装置30におけるトリガ(Trigger)、リクエスト(Req)及びレスポンス(Res)の関係を表している。
【0051】
図3に示すトリガは、リクエストの発行の契機を示している。リクエストは、トリガに基づいて発行されるデータを転送するためのリクエストを示している。レスポンスは、リクエストに対するレスポンスであり、当該リクエストが発行されることによって第1インタフェース部32を介してデータ転送装置30に入力される(ホスト側メモリ20から読み出される)。また、図3の横軸(0~550の数値)は、データ転送装置30(DMAC)におけるクロックサイクル(クロック周期)を示している。
【0052】
ここで、本実施形態の比較例に係るデータ転送装置30において発行されるリクエストには、記述子リクエスト及び送信データリクエストが含まれる。
【0053】
図3に示すリクエストは記述子リクエスト及び送信データリクエストを区別していないが、当該リクエストが記述子リクエストである場合には、転送リクエストに含まれる記述子情報がホストインタフェース31が有するキューq0~qNレジスタ領域のうちの1つのキューに格納されたことがトリガであり、当該記述子リクエストに基づいてホスト側メモリ20から入力される記述子がレスポンスである。
【0054】
一方、リクエストが送信データリクエストである場合には、記述子が記述子バッファ34が有するキューq0~qNのうちの1つのキューに格納されたことがトリガであり、当該送信データリクエストに基づいてホスト側メモリ20から入力される送信データがレスポンスである。
【0055】
なお、図3は、優先度p1の送信データを転送するためのリクエストに関するデータ転送装置30の動作を示している。以下の説明においては、優先度p1の送信データを転送するためのリクエストをリクエストp1、当該リクエストp1の発行の契機となるトリガをトリガp1、当該リクエストp1に対するレスポンスをレスポンスp1と称する。
【0056】
まず、図3に示すように、例えば49クロックサイクル目にトリガp1が発生した場合を想定する。この場合、例えばトリガp1が発生した直後の50クロックサイクル目においてリクエストp1が発行される。
【0057】
このようにリクエストp1が発行された場合、当該リクエストp1が第1インタフェース部32を介してホスト側メモリ20に出力され、当該ホスト側メモリ20において読み出されたレスポンスp1が当該第1インタフェース部32を介してデータ転送装置30に入力される。
【0058】
データ転送装置30に入力されたレスポンスp1(記述子または送信データ)は、即座に出力先のメモリ(記述子バッファ34またはNIC用送信メモリ40)に出力される。
【0059】
なお、本実施形態の比較例においては、上記したようにリクエストp1が発行されてから実際にレスポンスp1のデータ転送装置30への入力が開始される(レスポンスp1の先頭がデータ転送装置30に入力される)までに要する期間をRTC(Round-Tripe Cycle)と定義する。RTCは、例えばクロックサイクル数によって表され、データ転送装置30(DMAC)及びホスト側メモリ20の間の経路における処理遅延に基づいて発生する。この処理遅延は、一例として、ホスト側メモリ20と接続するためのAXI4 Interconnect、PCIe等のバス及びホスト側のメモリコントローラの処理等によって発生する。このため、RTCは一定ではなく、接続されるIPコア、コントローラ、バス及びメモリの負荷等によって変動する。
【0060】
図3に示す例では、50サイクル目にリクエストp1が発行され、250サイクル目にレスポンスp1の入力が開始されているため、RTCは、200cycleである。
【0061】
また、本実施形態の比較例においては、第1インタフェース部32を介したレスポンスp1の入力が開始されてから当該入力が完了するまでに要する期間をDTC(Data Transfer Cycle)と定義する。なお、上記したようにデータ転送装置30に入力されたレスポンスp1が即座に出力先のメモリに出力されることを鑑みると、DTCは、データ転送装置30に入力されたレスポンスp1を出力先のメモリに出力(転送)するのに要する期間ということもできる。DTCは、上記したRTCと同様に、例えばクロックサイクル数によって表される。
【0062】
なお、データ転送装置30(DMAC)が遅延無しでデータを処理することができ、出力先のメモリ(FIFOメモリ等)に空きがある場合、DTCは、データ転送装置30がホスト側メモリ20に対して発行するリクエストp1に対するレスポンスp1のデータ長(転送サイズ数)とバス幅(ホスト側メモリ20のバス幅と出力先のメモリのバス幅のうちの最小値)から算出され得る。すなわち、DTCは、1つのリクエストに対するレスポンスを処理する最小クロックサイクル数に相当する。
【0063】
一例としては、例えばバス幅が32Byte(256bit)である環境において1580Byteの送信データを要求する送信データリクエストが発行された場合、DTCは、1580/32≒50cycleとなる。この場合におけるDTCは、AXI4等のバーストアクセスで要求するバースト長に該当する。
【0064】
1つのリクエストに対する処理クロックサイクル(リクエストが発行されてからレスポンスの入力が完了するまでの期間)は、RTCとDTCとを加算することによって得られ、図3に示す例においては250cycleである。なお、この処理クロックサイクルは、データ転送装置30(DMAC)の動作周波数を用いることによって処理時間に変換することができる。例えばデータ転送装置30(及びバス)が125MHzで動作しているものとすると、1クロックサイクルは8nsであり、処理時間は8×250=2000nsとなる。
【0065】
ここで、本実施形態の比較例における送信データには優先度が指定されているが、異なる優先度の送信データを転送するための複数のリクエスト(記述子リクエストまたは送信データリクエスト)を順次発行するような状況が想定される。
【0066】
以下、図4を参照して、異なる優先度の送信データを転送するための複数のリクエストが順次発行される状況において発生する遅延の一例について説明する。図4においては、図3と同様の部分についての詳しい説明を省略する。
【0067】
なお、図4は、優先度p1~p3の送信データを転送するためのリクエストに関するデータ転送装置30の動作を示している。図3においては優先度p1(の送信データ)に関するリクエスト、トリガ及びレスポンスをそれぞれリクエストp1、トリガp1及びレスポンスp1として説明したが、図4においては、優先度p1~p3(の送信データ)に関するリクエスト、トリガ及びレスポンスをそれぞれリクエストp1~p3、トリガp1~p3及びレスポンスp1~p3と称する。また、ここでは優先度p1及びp2よりも優先度p3が高い場合を想定している。
【0068】
まず、図4に示すように、トリガp1~p3が連続して発生したような場合を想定する。この場合、データ転送装置30は、当該トリガp1~p3の発生順に従って、トリガp1が発生した直後にリクエストp1を発行し、トリガp2が発生した直後にリクエストp2を発行し、トリガp3が発生した直後にリクエストp3を発行する。ここでは、リクエストp1が50クロックサイクル目に発行され、リクエストp2が70クロックサイクル目に発行され、リクエストp3が90クロックサイクル目に発行されたものとする。
【0069】
ここで、リクエストp1が発行された場合、データ転送装置30においては、上記したRTCが経過したタイミングでレスポンスp1の入力が開始され、DTCが経過したタイミングで当該レスポンスp1の入力が完了する。具体的には、上記したようにRTCが200cycle、DTCが50cycleであるものとすると、レスポンスp1の入力は、250クロックサイクル目に開始され、300クロックサイクル目に完了する。
【0070】
次に、リクエストp2が発行された場合を想定する。リクエストp1が発行されていないものとすると、レスポンスp2の入力は270クロックサイクル目に開始されると考えられる。しかしながら、図4に示すようにリクエストp1が発行されている場合、270クロックサイクル目のタイミングではレスポンスp1の入力が完了しておらず、当該270クロックサイクル目にレスポンスp2の入力を開始することはできない。このため、レスポンスp2の入力は、レスポンスp1の入力が完了する300クロックサイクル目に開始され、350クロックサイクル目に完了する。
【0071】
更に、リクエストp3が発行された場合を想定する。リクエストp1及びp2が発行されていないものとすると、レスポンスp3の入力は290クロックサイクル目に開始されると考えられる。しかしながら、図4に示すようにリクエストp1及びp2が発行されている場合、290クロックサイクル目のタイミングではレスポンスp1及びp2の入力が完了しておらず、当該290クロックサイクル目にレスポンスp3の入力を開始することはできない。このため、レスポンスp3の入力は、レスポンスp1及びp2の入力が完了する350クロックサイクル目に開始され、400クロックサイクル目に完了する。したがって、図4には、上記したリクエストp3の契機となるトリガp3が発生してからレスポンスp3の入力が完了するまでに310クロックサイクルを要することが示されている。
【0072】
すなわち、図4に示す例によれば、90クロックサイクル目にリクエストp3が発行された場合には最短で340クロックサイクル目にレスポンスp3の入力が完了するにもかかわらず、低優先度のリクエストp1及びp2が既に発行されていることによって、高優先度のリクエストp3に対するレスポンスp3の入力が完了するまでの遅延が大きくなることがわかる。
【0073】
上記した遅延は、1回のリクエストで入力(要求)することができるデータ長(バーストアクセス数)とバスの帯域との影響により生じている。例えばバスのプロトコルがAXI4 Memory Mapped Interfaceであると仮定すると、バス幅が32Byteの場合に1回のリクエストで要求可能な最大データサイズは4KBとなる。
【0074】
なお、AXI4 Memory Mapped Interfaceにおける最大バースト長は256である。この場合において、バス幅が32Byteであるものとすると、1回のリクエストで要求できるデータ長(最大要求サイズ)は8192Byte(32Byte×256)であると考えられるが、AXI-4では4KBアドレス境界を越えたバーストアクセスはできないため、実際は4096Byte(つまり、4KB)が最大値となる。
【0075】
ここで、リクエストに基づいて4KB(のデータ)を入力するために必要なクロックサイクル数は、当該4KBをバス幅である32Byteで除算した128(クロックサイクル)である。このため、トリガが発生する度に即座にリクエストを発行すると、当該リクエストに対するレスポンスの入力に必要なクロックサイクル数が積み重なり、結果として、後発のリクエスト(高優先度の送信データを転送するためのリクエスト)に対するレスポンスの遅延の要因となる。
【0076】
そこで、本実施形態においては、上記した図4において説明したような高優先度のデータを転送するためのリクエストに対するレスポンスの遅延を抑制する構成について説明する。
【0077】
図5は、本実施形態における通信装置の構成の一例を示す。なお、図5においては、上記した図1と同様の部分には同一参照符号を付してその詳しい説明を省略し、当該図1と異なる部分について主に説明する。
【0078】
図5に示すように、本実施形態における通信装置1において、データ転送装置30は、DTC遅延制御部37を含む。
【0079】
DTC遅延制御部37は、内部にカウンタを保持する。DTC遅延制御部37は、上記したリクエスト(記述子リクエストまたは送信データリクエスト)の発行時に、当該リクエストで必要となるDTC(つまり、当該リクエストに対するレスポンスの入力が開始されてから当該入力が完了するまでに要するクロックサイクル数)をカウンタに設定(セット)する。DTC遅延制御部37は、このようにカウンタに設定されたクロックサイクル数が経過するまでの間、次のリクエストの発行を停止する。
【0080】
なお、リクエストの発行の停止は、当該リクエストを発行する記述子読み出し部33または送信データ読み出し部35に対してDTC遅延制御部37が指示することによって実現される。
【0081】
また、本実施形態においてはDTC遅延制御部37の内部に保持されるカウンタにDTCが設定されるものとして説明するが、当該カウンタには、例えばDTCに対して定数を加算または減算することによって得られる値(つまり、DTCに対する所定の演算結果)が設定されても構わない。
【0082】
次に、図6を参照して、上記したDTC遅延制御部37の動作の一例について説明する。なお、DTC遅延制御部37は、例えば上記した図2に示すステップS4またはS5の処理が実行されるタイミングで動作する。
【0083】
まず、上記したトリガが発生していない場合、DTC遅延制御部37は、リクエストの発行待ちの状態にある(ステップS11)。
【0084】
ここで、トリガが発生し、当該トリガに基づいてリクエストが発行された場合を想定する。この場合、DTC遅延制御部37は、当該DTC遅延制御部37の内部に保持されているカウンタに、発行されたリクエストで必要となるDTCを設定する(ステップS12)。なお、カウンタに設定されるDTCは、リクエストに対するレスポンスのデータ長及びバス幅から算出される。
【0085】
次に、DTC遅延制御部37は、ステップS12においてDTCが設定されたカウンタ値をクロックサイクル毎に減算する(ステップS13)。なお、ステップS13の処理はカウンタ値が0になるまで繰り返し実行され、カウンタ値は、DTC(クロックサイクル数)が経過したタイミングで0になる。換言すれば、DTC遅延制御部37は、クロックサイクルに応じてカウンタ値を減少させるように動作する。
【0086】
DTC遅延制御部37は、カウンタに設定されているカウンタ値が0でない(つまり、0以外を示す)場合には、ホスト側メモリ20への次のリクエストの発行を停止(禁止)し、ステップS13の処理を繰り返す。
【0087】
一方、DTC遅延制御部37は、カウンタに設定されているカウンタ値が0である(つまり、カウンタ値が0になるまで減算された)場合には、ホスト側メモリ20への次のリクエストの発行の停止(禁止)を解除し、ステップS11に戻って処理を繰り返す。
【0088】
なお、ステップS11に戻って処理が繰り返される際に、複数のトリガが発生している場合には、当該複数のトリガの各々に基づいて発行され得る複数のリクエストのうちの高優先度のリクエストが選択され、当該選択されたリクエストが発行される(つまり、優先度が高いリクエストが優先的に発行される)。
【0089】
このようなDTC遅延制御部37の動作によれば、リクエストが発行される度に、当該リクエストで必要となるDTC(クロックサイクル数)が経過してから次のリクエストを発行することが可能となる。
【0090】
上記したように本実施形態に係るデータ転送装置30は、例えば図7に示すように、優先度pの送信データ(第1データ)を転送するためのリクエストp1(第1リクエスト)を第1インタフェース部32を介して発行する場合に、第1インタフェース部32を介した当該リクエストp1に対するレスポンスp1の入力が開始されてから当該入力が完了するまでに要する期間(つまり、当該リクエストp1で必要となるDTC)が経過するまでの間、優先度p2の送信データ(第2データ)を転送するためのリクエストp2(第2リクエスト)の発行を停止する。
【0091】
これによれば、例えばリクエストp2の発行を停止している間にトリガp3が発生することによってリクエストp3(つまり、第3データを転送するための第3リクエスト)の発行が可能になっている場合には、低優先度のリクエストp2よりも高優先度のリクエストp3を優先的に発行することができる。
【0092】
具体的には、上記した図4(本実施形態の比較例)とは異なり、本実施形態に係るデータ転送装置30は、リクエストp1が発行されたタイミングでカウンタにリクエストp1で必要となるDTC(例えば、50cycle)を設定することによって、図7に示すようにトリガp2及びp3が発生した後にリクエストp2及びp3を即座に発行しない。図7に示す例では、リクエストp1の次のリクエストの発行は、100クロックサイクル目まで停止される。
【0093】
また、図7に示す例では、カウンタ値が0になる(つまり、リクエストの発行の停止が解除される)100クロックサイクル目のタイミングで、リクエストp2及びp3の発行が可能である。この場合、例えばStrict Priorityに従って、高優先度のリクエストp3が発行される。
【0094】
これによれば、トリガp3が発生してからレスポンスp3の入力が完了するまでに要するクロックサイクル数は260cycleであり、データ転送装置30の処理時間が上記した図4において説明した310クロックサイクルよりも50クロックサイクル短くなっている(つまり、遅延が小さい)ことがわかる。
【0095】
なお、図7に示すように、レスポンスp1~p3の入力が全て完了するタイミングは400クロックサイクル目であり、上記した図4(本実施形態の比較例)と同じである。すなわち、本実施形態においては、上記したようにリクエストの発行を一時的に停止したとしても、データ転送装置30全体の処理は遅延しない。
【0096】
本実施形態においては、上記した構成により、DTC(リクエストのバースト長)を考慮することにより、低優先度のリクエストの発行が高優先度のリクエストに対するレスポンスの入力(転送)に影響を与えることを抑制し、ネットワークを介してホスト装置(アプリケーションプログラム)において生成された送信データを送信するような通信における低遅延(つまり、高いリアルタイム性)を実現することが可能となる。
【0097】
なお、本実施形態においては、記述子リクエスト及び送信データリクエストの両方の発行が停止される場合を想定しているが、当該発行が停止されるリクエストは、記述子リクエスト及び送信データリクエストの一方であってもよい。すなわち、本実施形態においては、例えば送信データリクエストが発行される場合には、当該送信データリクエストで必要となるDTC(つまり、送信データを入力するために必要なクロックサイクル数)が経過するまでの間、次の送信データリクエストの発行を停止するのに対して、記述子リクエストについてはトリガが発生したタイミングで即座に発行するような構成としてもよい。同様に、本実施形態においては、例えば記述子リクエストが発行される場合には、当該記述子リクエストで必要となるDTC(つまり、記述子を入力するために必要なクロックサイクル数)が経過するまでの間、次の記述子リクエストの発行を停止するのに対して、送信データリクエストについてはトリガが発生したタイミングで即座に発行するような構成としてもよい。このような構成であっても、少なくとも記述子及び送信データの一方の入力(読み出し)に関する遅延を改善することができるため、結果として、通信における低遅延の実現に寄与することができる。
【0098】
また、上記したように記述子リクエスト及び送信データリクエストの両方の発行が停止される場合において、記述子及び送信データが保持されるメモリが別々である場合や、当該メモリにアクセスするインタフェースが異なる場合には、記述子リクエスト及び送信データリクエスト毎にカウンタ値を個別に管理するようにしてもよい。
【0099】
なお、本実施形態に係るデータ転送装置30によれば、優先度にかかわらずリクエストの発行が停止されるが、当該発行が停止されるリクエストは、当該優先度に基づいて決定(選択)されても構わない。具体的には、本実施形態においてはカウンタ値が0以外の場合に全ての優先度のリクエストの発行を停止するものとして説明したが、本実施形態は、例えば当該優先度が閾値未満のリクエスト(つまり、予め定められている優先度よりも低い優先度のリクエスト)のみの発行を停止し、当該優先度が閾値以上のリクエストについては発行を停止しない(つまり、カウンタ値が0以外であっても即座に発行する)構成であってもよい。
【0100】
ところで、上記したように本実施形態においては例えばNICを介して送信データがイーサネットに基づくネットワークに送信されることを想定しているが、例えばイーサネット上で高いリアルタイム性を実現するTSN(Time-Sensitive Network)の規格化がIEEE 802.1 TSN Taskで進められている。TSNは、複数の規格から構成され、プロオーディオ等で用いられている低遅延性を実現するAVB(Audio/Video Bridging)を産業用ネットワークや車載ネットワークにも適用することを考えて拡張した規格である。TSNは、AVBよりも高いリアルタイム性に加えて、高信頼性の実現を目指している。
【0101】
TSN規格の1つにIEEE 802.1Qbvがある。IEEE 802.1Qbvは、優先度が異なる複数のキュー(送信キュー)を事前に設定したゲート制御情報(スケジュール情報)に基づいて制御することで、当該トラフィッククラス(優先度)毎にフレーム(データ)の送信タイミングを厳密に制御することが可能になる。各キューにはフレームの送信を許可するゲートが設けられており、ゲートがオープンである場合はフレームの送信が許可され、当該ゲートがクローズである場合はフレームの送信が禁止される。ゲート制御情報には、一周期分の各ゲートの状態(オープンまたはクローズ)が設定される。
【0102】
IEEE 802.1Qbvに対応したNIC等は、現在時刻、ゲート制御情報及びゲート制御(ゲートコントロール)の開始時刻等から、フレームを送信可能な優先度のキューを選択してフレームの送信処理を実施する。すなわち、IEEE 802.1Qbvにおいては、優先度に相当するトラフィッククラス毎にフレームの送信タイミングを制御する。
【0103】
このようなゲート制御情報に従って厳密にフレームの送信タイミングを制御することで、優先度が異なるフレーム間での送信タイミングの衝突を防ぎ、送信遅延時間や当該送信遅延時間の揺らぎを小さくすることが可能になる。
【0104】
また、別のTSN規格としてのIEEE 802.1Qbu/802.3brは、優先度の高いフレームの送信処理が発生した場合に、送信中のフレームの処理を中断して、高優先度のフレームの送信処理を割り込ませる。
【0105】
上記したTSNのようなリアルタイムイーサネットを利用することで、高いリアルタイム性が求められるデータの送信に関わるネットワーク遅延を小さくすることが可能となる。
【0106】
なお、TSN等のリアルタイムイーサネット規格が規定している範囲は、NICとネットワークとの間のネットワーク処理である。しかしながら、実際に通信システムを構築する場合には、ホスト装置とNICとの間の処理も考慮する必要がある。具体的には、本実施形態において説明したようにDMA処理によってホスト側メモリ20から入力された送信データ(フレーム)をNIC用送信メモリ40に転送する処理はTSNの送信制御のタイミングとは非同期に実行されるため、メモリやバスへのアクセスが混雑している場合、低優先度の送信データのDMA処理が高優先度の送信データのDMA処理に影響を与える可能性がある
このため、本実施形態においては、上記した観点により、異なる優先度の送信データをホスト側メモリ20からNIC用送信メモリ40(送信キュー)に転送するためのリクエストの発行タイミングを制御することにより、低優先度の送信データの転送処理が高優先度の送信データの転送処理に影響を与えることを抑制し、転送遅延を削減する。
【0107】
なお、上記したように本実施形態における通信装置1にTSNを適用することを考えると、NIC用送信メモリ40は例えば優先度(トラフィッククラス)に対応するキューQ0~QN(送信先のキュー)を有しているが、本実施形態に係るデータ転送装置30は、当該キューQ0~QN毎に属性を設定して、当該属性毎にリクエストの発行を停止するか否かを制御(判定)する構成であってもよい。
【0108】
例えばIEEE 802.1Qbu/803.3brの場合、キューの接続先のMAC(Media Access Controller)がPreemptable及びExpressという属性に分類される。この場合、比較的低遅延での送信が必要でないPreemptableに接続されるキューに格納される送信データを転送するためのリクエストの発行のみを停止することが考えられる。
【0109】
このような構成を実現するためには、上記したNIC用送信メモリ40が有するキューQ0~QNの各々の属性(PreemptableまたはExpress)を判別する必要があるが、データ転送装置30(DMAC)は、当該キューQ0~QNの各々の属性を判別するためのテーブル(以下、属性判別テーブルと表記)を内部に保持しておくものとする。この属性判別テーブル(つまり、キューQ0~QNと属性との対応関係)は、例えばCPU10等からホストインタフェース31を介して設定されればよい。
【0110】
ここで説明したキューQ0~QNの各々の属性は、本実施形態において説明した送信データの優先度とは観点が異なるものであってもよい(つまり、優先度に依存することなく設定され得る)。
【0111】
なお、本実施形態においてはRTC及びDTC等がクロックサイクル数で表されるものとして説明したが、上記したようにクロックサイクルはデータ転送装置30の動作周波数を用いて時間に変換することができることを鑑みると、当該RTC及びDTCは、時間によって表されても構わない。この場合、上記したようにDTC遅延制御部37の内部に保持されるカウンタに設定されるDTC(カウンタ値)は、時間経過とともに減少させればよい(例えば、1ns粒度のカウンタであれば、当該カウンタ値は1ns経過毎に減少する)。
【0112】
(第2実施形態)
次に、第2実施形態について説明する。本実施形態においては、前述した第1実施形態と同様の部分についての詳しい説明を省略し、当該第1実施形態と異なる部分について主に述べる。
【0113】
まず、図8を参照して、前述した第1実施形態に係るデータ転送装置30を本実施形態の比較例として、当該データ転送装置30の処理時間について説明する。なお、図8においては、前述した図3と同様の部分についての詳しい説明を省略する。
【0114】
図8は、データ転送装置30における記述子リクエスト(Req(Dsc))、送信データリクエスト(Req(Data))及び送信データ(Data)の関係を表している。
【0115】
なお、図8は、優先度p1の送信データを転送する際のデータ転送装置30の一連の動作を示している。以下の説明においては、優先度p1の送信データに関する情報が記述された記述子を記述子p1、当該記述子p1を要求する記述子リクエストを記述子リクエストp1、優先度p1の送信データを要求する送信データリクエストを送信データリクエストp1、優先度p1の送信データを送信データp1と称する。
【0116】
また、図8においては、データ転送装置30から発行される記述子リクエスト(Req(Dsc))及び送信データリクエスト(Req(Data))と当該データ転送装置30に入力される送信データ(Data)について示されているが、データ転送装置30に入力される記述子(Dsc)については省略されている。なお、以下の説明においては、記述子リクエストp1に基づいてデータ転送装置30に入力される記述子も送信データp1等と同様に記述子p1と称する。
【0117】
図8に示すように、例えば50クロックサイクル目に記述子リクエストp1が発行された場合、当該記述子リクエストp1が第1インタフェース部32を介してホスト側メモリ20に出力され、当該ホスト側メモリ20(記述子領域20b)において読み出された記述子p1が当該第1インタフェース部32を介してデータ転送装置30に入力される。なお、記述子リクエストp1が発行されてから実際に記述子p1の入力が開始されるまでに要する期間(RTC)は200cycleである。
【0118】
ここで、記述子p1の入力及び記述子バッファ34への書き込みに要する時間が十分小さいものとし、250クロックサイクル目で送信データリクエストp1が発行されたものとする。多くの場合、記述子のサイズは小さく、一度の記述子の転送に必用なDTCは1~数cycleになるためである。なお、記述子p1(送信データp1のサイズ及びアドレス等)は、当該送信データp1(フレーム)の転送に必要な情報として送信データリクエストp1の発行に用いられる。
【0119】
このように送信データリクエストp1が発行された場合、当該送信データリクエストp1が第1インタフェース部32を介してホスト側メモリ20に出力され、当該ホスト側メモリ20(送信データ領域20a)において読み出された送信データp1が当該第1インタフェース部32を介してデータ転送装置30に入力される。図8に示す例では、送信データリクエストp1が発行されてから実際に送信データp1の入力が開始されるまでに要する期間(RTC)は200cycleである。
【0120】
次に、送信データリクエストp1が発行された後にRTCが経過したタイミング(450クロックサイクル目)で送信データp1の入力が開始される。図8に示す例では、DTCは50cycleであるため、当該送信データp1の入力は500クロックサイクル目に完了する。
【0121】
図8において説明したように、送信データ(フレーム)を転送するためには、記述子と送信データとの2回のメモリ読み出しが発生する。このため、送信データの転送時間(例えば、記述子リクエストが発行されてから送信データの入力が完了するまでの期間)は、RTC*2+DTCとなる。なお、図8に示す例では、送信データの転送時間は450cycleである。なお、実際には記述子の入力及び記述子バッファへの書き込み等に数クロックサイクル要するため、その分が転送時間に加算される。
【0122】
次に、図9を参照して、異なる優先度の送信データが順次転送される状況において発生する遅延の一例について説明する。図9においては、図8と同様の部分についての詳しい説明を省略する。
【0123】
なお、図9は、優先度p1~p5の送信データを転送する際のデータ転送装置30の一連の動作を示している。図8においては優先度p1に関する記述子リクエスト、記述子、送信データリクエスト及び送信データをそれぞれ記述子リクエストp1、記述子p1、送信データリクエストp1及び送信データp1として説明したが、図9においては、優先度p1~p5関する記述子リクエスト、記述子、送信データリクエスト及び送信データをそれぞれ記述子リクエストp1~p5、記述子p1~p5、送信データリクエストp1~p5及び送信データp1~p5と称する。また、ここでは優先度p1~p4よりも優先度p5が高い場合を想定している。
【0124】
まず、図9に示すように、記述子リクエストp1~p4が連続して発行されたものとする。ここでは、記述子リクエストp1が30クロックサイクル目に発行され、記述子リクエストp2が50クロックサイクル目に発行され、記述子リクエストp3が70クロックサイクル目に発行され、記述子リクエストp4が90クロックサイクル目に発行されたものとする。
【0125】
ここで、記述子リクエストp1が発行された場合、データ転送装置30においては、上記したRTCが経過した後に記述子p1の入力が開始され、当該記述子p1の入力が完了したタイミングで送信データリクエストp1が発行される。図9に示す例において、送信データリクエストp1は、230クロックサイクル目に発行されている。
【0126】
一方、記述子リクエストp2が発行された場合、データ転送装置30においては、上記したRTCが経過した後に記述子p2の入力が開始され、当該記述子p2の入力が完了する。ここで、本実施形態の比較例においては、前述した第1実施形態において説明したように、送信データリクエストp1が発行されてからDTCが経過した後に(つまり、カウンタ値が0である場合に)、送信データリクエストp2が送信される。図9に示す例において、送信データリクエストp2は、280クロックサイクル目に発行されている。
【0127】
ここでは記述子リクエストp2(送信データリクエストp2)について説明したが、記述子リクエストp3及びp4(送信データリクエストp3及びp4)についても同様である。詳しい説明については省略するが、図9に示す例において、送信データリクエストp3は330クロックサイクル目に発行され、送信データリクエストp3は380クロックサイクル目に発行されている。
【0128】
ここで、200クロックサイクル目に高優先度の記述子リクエストp5が発行される場合を想定する。このように記述子リクエストp5が発行された場合、データ転送装置30においては、RTCが経過した後に記述子p5の入力が開始され、当該記述子p5の入力が完了すると送信データリクエストp5が発行される。なお、図9においては、上述したRTCが経過した後に記述子p5が入力が完了され、400クロックサイクル目で送信データリクエストp5が発行された場合を想定している。
【0129】
しかしながら、送信データリクエストp5が発行されたタイミングでは既に他の送信データリクエストp1~p4が発行されており、図9に示すように、送信データリクエストp5に基づいて送信データp5の入力が開始されるのは、送信データp1~p4の入力(転送)が全て完了した後である。
【0130】
具体的には、図9に示す例によれば、200クロックサイクル目に記述子リクエストp5が発行された場合には最短で650クロックサイクル目に送信データp5の入力を完了するにもかかわらず、当該送信データp5の入力が完了するのは680サイクル目となる(記述子リクエストp5が発行されてから送信データp5の入力が完了するまでに480クロックサイクルを要する)。すなわち、本実施形態の比較例においては、低優先度の送信データp1~p4の転送処理のために、高優先度の送信データp5の入力が完了するまでの遅延が大きくなる。
【0131】
上記した遅延は、各記述子の入力(読み出し)が完了した後に即座に送信データリクエストを発行していることにより生じている。具体的には、上記した送信データp5の入力は最短で600クロックサイクル目(400クロックサイクル目に送信データリクエストp5が発行されてからRTCが経過したタイミング)に開始されるが、記述子リクエストp5の発行から送信データリクエストp5の発行までの間に送信データリクエストp1~p4が発行されてしまうと、600クロックサイクル目までに送信データp1~p4の入力(転送)が完了しないことが確定する。これにより、低優先度の送信データp1~p4の転送の影響を受けて、高優先度の送信データp5の転送が遅延する。
【0132】
そこで、本実施形態においては、上記した図9において説明したような高優先度の送信データの転送の遅延を抑制する構成について説明する。
【0133】
図10は、本実施形態における通信装置の構成の一例を示す。なお、図10においては、前述した図5と同様の部分には同一参照符号を付してその詳しい説明を省略し、当該図5と異なる部分について主に説明する。
【0134】
図10に示すように、本実施形態における通信装置1において、データ転送装置30は、RTC計測部38及びwindow制御部39を含む。
【0135】
RTC計測部38は、ホスト側メモリ20に対するリクエスト(記述子リクエスト及び送信データリクエスト)を監視し、RTC(当該リクエストが発行されてから実際に記述子及び送信データのデータ転送装置30への入力が開始されるまでに要する期間)を計測する。RTC計測部38は、計測されたRTC(の情報)を内部に保持する。なお、RTC計測部38が内部に保持するRTCは、上記したようにリクエストが発行される度に計測されたRTCの最小値、最大値または平均値等である。
【0136】
window制御部39は、例えば送信データの優先度に相当するチャネル毎のカウンタ値(以下、window値と表記)を保持する。なお、window制御部39に保持されるwindow値は、上記したRTC計測部38の内部に保持されているRTC(つまり、RTC計測部38による計測結果)に基づいて設定(決定)される。window制御部39は、低優先度の送信データリクエストで必要となるDTC(つまり、当該送信データリクエストに基づいて入力される送信データのデータ長)と当該window制御部39に保持されているwindow値とに基づいて、高優先度の記述子リクエストが発行された後に当該低優先度の送信データリクエストを発行するか否かを決定する。
【0137】
ここで、図11を参照して、window制御部39に保持されるwindow値の概略について説明する。
【0138】
本実施形態において送信データに対して優先度0~Pが指定されるものとすると、window制御部39は、当該優先度0~P(に相当するチャネル)毎にM+1個のwindow値0~Mを保持する。本実施形態においては、例えば優先度0が最も低い優先度であり、優先度Pが最も高い優先度であるものとする。なお、この優先度0~P毎に保持されるwindow値0~Mは、例えば当該優先度に対応するリングバッファに格納されており、書き込みポインタ(wr_ptr)及び読み出しポインタ(rd_ptr)を用いて管理されている。
【0139】
書き込みポインタは、記述子リクエストが発行された場合にwindow値が設定される領域を示すためのポインタである。書き込みポインタは、window値が設定されたタイミングで1つ進める(つまり、次にwindow値が設定される領域を示す)ように更新される。
【0140】
読み出しポインタは、送信データリクエストの発行及び停止を制御するために読み出す(参照する)window値が設定されている領域を示すためのポインタである。上記したwindow値は後述するように高優先度の記述子リクエストが発行される際に設定されるが、読み出しポインタは、当該window値が設定された際に発行された記述子リクエストに基づいて入力された記述子に基づいて送信データリクエストが発行されたタイミングで1つ進める(つまり、次のwindow値が設定されている領域を示す)ように更新される。
【0141】
なお、図11に示す書き込みポインタ(wr_ptr)及び読み出しポインタ(rd_ptr)によれば、有効なwindow値(つまり、設定された後にまだ参照されていないwindow値)には、ハッチングが付されている。
【0142】
また、図11においては、優先度p(p=0~P)のM+1個のwindow値0~Mのうちのm(m=0~M)番目のwindow値をwin[p][m]、当該優先度pのM+1個のwindow値0~Mを管理するwr_ptr及びrd_ptrをそれぞれwr_ptr[p]及びrd_ptr[p]と表している。以下の説明においても同様である。
【0143】
以下、図12を参照して、上記したwindow制御部39の動作の一例について説明する。なお、window制御部39は、例えば前述した図2に示すステップS4及びS5の処理が実行されるタイミングで動作する。また、ここでは優先度pのm番目のwindow値(win[p][m])の更新に関するwindow制御部39の動作について主に説明する。
【0144】
まず、window制御部39は、データ転送装置30(DMAC)の起動(初期化)時に、win[p][m]としてwindow値の最大値を設定する(ステップS21)。なお、window値の最大値は、16bitの場合は16h´ffffであるが、16bitに限定されない。このようにwindow値の最大値が設定されたwin[p][m]は、無効なwindow値に相当する。
【0145】
次に、window制御部39は、優先度pよりも高い優先度の記述子リクエストが発行され、かつ、当該優先度pのリングバッファの書き込みポインタ(wr_ptr)がwin[p][m]が設定されている領域を示している場合に、当該win[p][m]としてRTC計測部38の内部に保持されているRTCを設定する(ステップS22)。ステップS22において設定されたwin[p][m]は、有効なwindow値に相当する。
【0146】
なお、ステップS22において設定されるRTCは、例えばリクエストが発行される度に計測されたRTCの最小値(RTC_min)であるが、当該RTCの最小値に対して定数が加算または減算された値であってもよい。更に、ステップS22において設定されるRTCは、例えばリクエストが発行される度に計測されたRTCの最小値からX番目のようなRTCであってもよいし、当該RTCの平均値であってもよい。また、ステップS22において設定されるRTCは、例えばリクエストが発行される度に計測されたRTCに対して所定の演算が行われることによって得られる値であってもよい。
【0147】
window制御部39は、ステップS22においてRTCが設定されたwin[p][m](有効なwindow値)をクロックサイクル毎に減算する(ステップS23)。なお、ステップS23の処理はwin[p][m]が0になるまで繰り返し実行され、当該win[p][m]は、ステップS23で設定したRTC_min(クロックサイクル数)等が経過したタイミングで0になる。換言すれば、window制御部39は、クロックサイクルに応じてwin[p][m](つまり、window値)を減少させるように動作する。なお、win[p][m]は、0より小さくなることはない。
【0148】
なお、上記したようにステップS23においてクロックサイクル毎に減算されるwin[p][m]は、リクエスト可能な送信データのDTCとして用いられる。このため、図12においては省略されているが、例えば優先度pに対応するリングバッファの読み出しポインタ(rd_ptr[p])がwin[p][m]が保持されている領域を示している場合、当該優先度pの送信データリクエストは、当該win[p][m]が当該送信データリクエストで必要となるDTCよりも大きい場合にのみ発行される。
【0149】
上記したようにステップS23の処理が繰り返し実行されている間(つまり、win[p][m]が0になるまでの間)に、上記したステップS22において当該win[p][m]が設定される際に発行された優先度pよりも高い優先度の記述子リクエストに基づいて入力された記述子に基づいて送信データリクエスト(つまり、優先度pよりも高い優先度の送信データリクエスト)が発行された場合、window制御部39は、当該win[p][m]をリセットする。この場合、window制御部39は、win[p][m]としてwindow値の最大値(例えば、16h´ffff)を設定し、win[p][m]を無効化する(ステップS24)。
【0150】
上記したステップS24の処理が実行されると、ステップS21に戻って処理が繰り返される。
【0151】
なお、上記したように優先度pよりも高い優先度の送信データリクエストが発行されることによってwin[p][m]が無効化された場合、当該優先度pに対応するリングバッファの読み出しポインタ(rd_ptr[p])を1つ進めることによって、当該リングバッファにおけるwindow値の読み出し先(参照先)が更新される。
【0152】
なお、データ転送装置30は、例えば1回の記述子リクエストで複数の記述子を要求する(読み出す)ように動作しても構わない。この場合には、1回の記述子リクエストで要求した記述子の数を保持し、当該記述子の全てに基づいて送信データリクエストが発行されたタイミングでステップS24を実行するとともに、読み出しポインタを1つ進めるようにする。
【0153】
図12においてはwin[p][m]の更新について主に説明したが、本実施形態においては、他のwindow値についても同様に更新される。換言すれば、window制御部39は、(P+1)×(M+1)個のwindow値の各々を並列に更新するように動作する。
【0154】
また、window制御部39において優先度0~P毎に保持されるwindow値0~Mの全てが無効化されている(つまり、全てのWindow値が最大値に設定されている)場合、当該window値を用いた送信データリクエストの発行の制限は行われない。
【0155】
上記したように本実施形態に係るデータ転送装置30は、例えば図13に示すように、送信データp1~p4(第1データ)に関する情報が記述されている記述子p1~p4(第1記述子)を要求する記述子リクエストp1~p4を発行し、当該記述子リクエストp1~p4が発行されることによって入力された記述子p1~p4に基づいて送信データリクエストp1~p4(第1データリクエスト)を発行する。
【0156】
また、本実施形態に係るデータ転送装置30は、記述子リクエストp1~p4が発行された後に記述子リクエストp5(第2データに関する情報が記述されている第2記述子を要求する第2記述子リクエスト)が発行されるタイミングでwindow値を設定し、クロックサイクルの経過に応じて当該window値を減少させる。
【0157】
更に、本実施形態に係るデータ転送装置30は、上記したように送信データp1~p4の優先度が送信データp5の優先度よりも低い場合、送信データp1~p4の各々の入力が開始されてから当該入力が完了するまでに要する期間(つまり、送信データリクエストp1~p4の各々で必要となるDTC)とwindow値とに基づいて送信データリクエストp1~p4の各々を発行する。
【0158】
図13を用いて具体的に説明すると、送信データp5の優先度が2であり、送信データp1~p4優先度が0または1である場合、記述子リクエストp5の発行時に優先度0及び1に対応するリングバッファの書き込みポインタによって示されている領域に設定されているwindow値(win[0][(wr_ptr[0])]、win[1][(wr_ptr[1])])にRTC計測部38の内部に保持されているRTCが設定される。
【0159】
このようにwin[0][(wr_ptr[0])]、win[1][(wr_ptr[1])]にRTCが設定された場合、当該wr_ptr[0]及びwr_ptr[1](つまり、優先度0及び1に対応するリングバッファの書き込みポインタ)をそれぞれ1つ進めることによって、当該リングバッファにおけるwindow値の書き込み先が更新される。
【0160】
なお、図13においては示されていないが、例えば送信データp5と同一の優先度(または送信データp5よりも高い優先度)の記述子リクエストが記述子リクエストp5に続いて連続して発行される可能性がある。本実施形態において、window値は、このような記述子リクエストが発行される度に設定される。このため、本実施形態においては、優先度0~P毎にM+1個のwindow値を設定可能な構成が採用されている。
【0161】
ここで、上記したwin[0][(wr_ptr[0])]、win[1][(wr_ptr[1])]にRTC=200cycleが設定されたものとする。このように200cycleが設定されたwin[0][(wr_ptr[0])]、win[1][(wr_ptr[1])]はクロックサイクルの経過に応じて減算される。
【0162】
また、上記したようにRTC=200cycleが設定されたwindow値が読み出しポインタ(rd_ptr[0]、rd_ptr[1])によって示されているものとする。この場合、図13に示す例では、送信データリクエストp1が送信される230クロックサイクル目のwindow値(win[0][(rd_ptr[0])]、win[1][(rd_ptr[1])]は200-30=170であり、送信データリクエストp1で必要となるDTCは50である。この場合、window値は送信データリクエストp1で必要となるDTCよりも大きいため、当該送信データリクエストp1の発行は停止されない(つまり、送信データリクエストp1は発行される)。
【0163】
なお、ここでは送信データリクエストp1について説明したが、送信データリクエストp2が送信される280クロックサイクル目のwindow値は170-50=120であり、当該送信データリクエストp2で必要となるDTCは50である。この場合、window値は送信データリクエストp2で必要となるDTCよりも大きいため、当該送信データリクエストp2の発行は停止されない。
【0164】
同様に、送信データリクエストp3が送信される330クロックサイクル目のwindow値は120-50=80であり、当該送信データリクエストp3で必要となるDTCは50である。この場合、window値は送信データリクエストp3で必要となるDTCよりも大きいため、当該送信データリクエストp3の発行は停止されない。
【0165】
一方、送信データリクエストp4が送信される380クロックサイクル目のwindow値は80-50=30であり、当該送信データリクエストp4で必要となるDTCは50である。この場合、window値は送信データリクエストp4で必要となるDTCよりも小さいため、当該送信データリクエストp4の発行は停止される。
【0166】
これによれば、送信データリクエストp5の発行が可能となる400クロックサイクル目で遅延なく当該送信データリクエストp5を発行した場合に、送信データp5の入力を650クロックサイクル目で完了することができるため、図9において説明した場合と比較して高優先度の送信データp5の転送における低遅延を実現することができる。
【0167】
本実施形態においては、上記したようにwindow値を管理し、低優先度の送信データリクエストが発生した場合に、当該低優先度に対応するリングバッファの読み出しポインタによって指示されている領域に保持されているwindow値(win[p][rd_ptr])よりもDTCが大きい送信データリクエストの発行を停止することで、高優先度の送信データの転送の遅延を防止することが可能となる。
【0168】
換言すれば、低優先度の送信データリクエストで必要となるDTCがwindow値を超えない範囲であれば、高優先度の送信データリクエストに基づいて送信データの入力が開始されるまでに当該低優先度の送信データの入力を完了することができるため、当該低優先度の送信データの転送が高優先度の送信データの転送に遅延を生じさせることがない。
【0169】
ところで、本実施形態に係るデータ転送装置30は、前述した第1実施形態に係るデータ転送装置30にRTC計測部38及びwindow制御部39が追加された構成であるものとして説明したが、例えば当該第1実施形態において説明したDTC遅延制御部37が省略された構成であってもよい。
【0170】
しかしながら、DTC遅延制御部37が省略される構成の場合には、前述した第1実施形態において説明した遅延が生じる可能性がある。
【0171】
このため、DTC遅延制御部37を省略する構成の場合には、window制御部39は、以下の図14に示すように動作してもよい。なお、図14においては、上記した図12と異なる部分についてのみ説明する。
【0172】
図14に示す例では、window制御部39は、上記した図12に示すステップS21~S24の処理に相当するステップS31~S34の処理を実行するが、当該処理に加えてステップS35の処理を実行する。
【0173】
具体的には、図12に示す例においてwindow制御部39は単にwin[p][m]をクロックサイクル毎に減算する(クロックサイクルに応じて減少させる)が、図14に示すステップS35においては、上記したように優先度p以下である優先度の送信データリクエストで必要となるDTC(当該送信データリクエストで要求される送信データのデータ長から算出されるDTC)よりも当該window値が大きいことによって当該送信データリクエストが発行された場合に、window制御部39は、当該window値から当該DTCを減算した上で、当該DTCに相当するクロックサイクル数が経過するまで待機してからステップS33に戻る(つまり、当該クロックサイクル数が経過した後にwindow値の減少を再開する)。なお、優先度p以下である優先度の送信データリクエストは当該送信データリクエストで必要となるDTCよりもwindow値が大きい場合に発行されるため、ステップS35の処理が実行されたとしてもwindow値が0よりも小さくなることはない。
【0174】
図14に示すwindow制御部39の動作によれば、低優先度の送信データリクエストが発行された場合に、当該送信データリクエストで必要となるDTCに基づいてwindow値を大きく消費することになるため、例えば当該DTCに相当するクロックサイクル数が経過するまでの間(つまり、window値が減少している間)に低優先度の送信データリクエストが更に発行されてしまうことを回避することができ、上記したDTC遅延制御部37を含む構成と同等の効果を得ることができる。
【0175】
上記した本実施形態に係るデータ転送装置30によれば、高優先度の記述子リクエストが発行されたタイミングで設定されるwindow値を用いて、当該高優先度の記述子リクエストよりも後の低優先度の送信データリクエストの発行を制限することにより、低優先度の送信データの転送処理が高優先度の送信データの転送処理に影響を与えることを抑制する(つまり、高優先度の送信データに対する転送遅延を削減する)ことができる。
【0176】
なお、本実施形態に係るデータ転送装置30は、前述した第1実施形態において説明したキューQ0~QN毎に属性を設定して、当該属性毎に送信データリクエストの発行を停止するか否かを制御する構成であってもよい。
【0177】
前述した第1実施形態において説明したように、例えばIEEE 802.1Qbu/803.3brの場合、キューの接続先のMACがPreemptable及びExpressという属性に分類されるため、比較的低遅延での送信が必要でないPreemptableに接続されるキューに格納される送信データを要求する送信データリクエストの発行のみを停止することが考えられる。
【0178】
なお、このような構成を実現するためには、前述した第1実施形態において説明した属性判別テーブルがデータ転送装置30の内部に保持されていればよい。
【0179】
また、本実施形態においてはwindow値としてRTC(クロックサイクル数)を設定し、当該window値をクロックサイクル毎に減算する(つまり、クロックサイクルの経過に応じて減少させる)ものとして説明したが、当該window値としてデータ長(データサイズ)が設定されてもよい。この場合、window値は、ホスト側メモリ20及びデータ転送装置30間で1クロックサイクルあたりに送信(転送)可能なデータ長(つまり、バス幅)で減算されればよい。
【0180】
なお、詳しい説明については省略するが、本実施形態におけるwindow値として、前述した第1実施形態において説明した時間が設定されてもよい。
【0181】
(第3実施形態)
次に、第3実施形態について説明する。本実施形態は、前述した第1及び第2実施形態において説明した通信装置(データ転送装置)に対してTSNが適用された場合の具体的な実装例を想定している点で、当該第1及び第2実施形態とは異なる。
【0182】
図15は、本実施形態における通信装置の構成の一例を示す。なお、図15においては、上記した図5及び図10と同様の部分には同一参照符号を付してその詳しい説明を省略し、当該図5及び図10と異なる部分について主に説明する。
【0183】
本実施形態において、a2bはデータ転送装置30を介してホスト装置から外部の機器にデータを送信する処理を表し、b2aはデータ転送装置30を介してホスト装置が外部の機器からデータを受信する処理を表す。
【0184】
なお、図15に示すホスト装置は、図5及び図10に示すCPU10及びホスト側メモリ20を備える。図15においては図示されていないが、ホスト側メモリ20には、a2bデータ領域、a2b記述子領域、b2aデータ領域及びb2a記述子領域が用意されている。a2bデータ領域及びa2b記述子領域は、前述した図5及び図10に示す送信データ領域20a及び記述子領域20bに相当する。b2aデータ領域はb2aに関するデータ(受信データ)が書き込まれる領域であり、b2a記述子領域は当該受信データに関する情報が記述された記述子が書き込まれる領域である。
【0185】
また、本実施形態においてホストインタフェース31は、記述子が書き込まれたa2b記述子領域の位置を示すポインタを含む記述子情報が格納されるa2b用キューq0~qNレジスタ領域と、記述子が書き込まれたb2a記述子領域の位置を示すポインタを含む記述子情報が格納されるb2a用キューq0~qLレジスタ領域を有する。
【0186】
a2b記述子読み出しリクエスト生成部301は、ホストインタフェース31が有するa2b用キューq0~qNレジスタ領域に格納された記述子情報を基に、ホスト側メモリ20へのアクセスに必要な記述子読み出しリクエスト(アドレス及びデータ長等を含むリクエスト)を生成する。なお、a2b記述子読み出しリクエスト生成部301は、上記した優先度(トラフィッククラス)に対応する記述子読み出しリクエスト生成部#0~#Nを有する。
【0187】
b2a記述子読み出しリクエスト生成部302は、ホストインタフェース31が有する複数のb2a用キューq0~qLレジスタ領域に格納された記述子情報を基に、ホスト側メモリ20へのアクセスに必要な記述子読み出しリクエスト(アドレス及びデータ長を含むリクエスト)を生成する。なお、b2a記述子読み出しリクエスト生成部302は、優先度(トラフィッククラス)に対応する記述子読み出しリクエスト生成部#0~#Lを有する。
【0188】
上記したa2b記述子読み出しリクエスト生成部301のようなa2bに関する機能部は優先度に対応する機能部#0~#Nを有し、b2a記述子読み出しリクエスト生成部302のようなb2aに関する機能部は優先度に対応する機能部#0~#Lを有するが、本実施形態におけるN及びLは、同じ数値であってもよいし、異なる数値であってもよい。
【0189】
a2b記述子バッファ303は、前述した第1及び第2実施形態において説明した記述子バッファ34に相当し、優先度に対応するa2b用キューq0~qNを有する。a2b用キューq0~qNには、a2b記述子読み出しリクエスト生成部301によって生成された記述子読み出しリクエストに基づいてホスト側メモリ20(a2b記述子領域)から読み出された記述子が格納される。
【0190】
a2bデータ読み出しリクエスト生成部304は、a2b記述子バッファ303に格納された記述子を基に、ホスト側メモリ20へのアクセスに必要なデータ読み出しリクエスト(アドレス及びデータ長を含むリクエスト)を生成する。なお、a2bデータ読み出しリクエスト生成部304は、上記した優先度に対応するデータ読み出しリクエスト生成部#0~#Nを有する。
【0191】
第1インタフェース読み出しリクエスト選択部305は、前述した第1及び第2実施形態において説明したDTC遅延制御部37及びwindow制御部39からの指示やStrict Priority等に従って、a2b記述子読み出しリクエスト生成部301、b2a記述子読み出しリクエスト生成部302及びa2bデータ読み出しリクエスト生成部304によって生成されたリクエストを選択し、当該選択されたリクエストを第1インタフェース読み出し処理部306に受け渡す。
【0192】
第1インタフェース読み出し処理部306は、第1インタフェース読み出しリクエスト選択部305から受け渡されたリクエストに基づいてホスト側メモリ20にアクセスし、当該リクエストに対するレスポンスを入力する。なお、第1インタフェース読み出し処理部306によるホスト側メモリ20へのアクセスは、例えばAXI4等の所定のプロトコルに従って行われる。
【0193】
第1インタフェース読み出しリクエスト選択部305から受け渡されたリクエストが例えばa2b記述子読み出しリクエスト生成部301によって生成された記述子読み出しリクエストである場合、第1インタフェース読み出し処理部306は、当該記述子読み出しリクエストに基づいてホスト側メモリ20(a2b記述子領域)から読み出された記述子を入力し、当該記述子を読み出しレスポンス振り分け部307に受け渡す。
【0194】
第1インタフェース読み出しリクエスト選択部305から受け渡されたリクエストが例えばb2a記述子読み出しリクエスト生成部302によって生成された記述子読み出しリクエストである場合、第1インタフェース読み出し処理部306は、当該記述子読み出しリクエストに基づいてホスト側メモリ20(b2a記述子領域)から読み出された記述子を入力し、当該記述子を読み出しレスポンス振り分け部307に受け渡す。
【0195】
第1インタフェース読み出しリクエスト選択部305から受け渡されたリクエストが例えばa2bデータ読み出しリクエスト生成部304によって生成されたデータ読み出しリクエストである場合、第1インタフェース読み出し処理部306は、当該データ読み出しリクエストに基づいてホスト側メモリ(a2bデータ領域)から読み出された送信データを入力し、当該送信データを読み出しレスポンス振り分け部307に受け渡す。
【0196】
読み出しレスポンス振り分け部307は、第1インタフェース読み出し処理部306によってホスト側メモリ20から入力された(読み出された)レスポンスを振り分ける。
【0197】
読み出しレスポンス振り分け部307はa2b記述子領域から入力された記述子をa2b記述子バッファ303に振り分ける。これにより、a2b記述子領域から入力された記述子は、a2b記述子バッファ303に格納される。
【0198】
読み出しレスポンス振り分け部307は、b2a記述子領域から入力された記述子をb2a記述子バッファ308に振り分ける。これにより、b2a記述子領域から入力された記述子は、b2a記述子バッファ308に格納される。なお、b2a記述子バッファ308は、優先度(トラフィッククラス)に対応するb2a用キューq0~qLを有する。
【0199】
読み出しレスポンス振り分け部307は、a2bデータ領域から入力された送信データを第2インタフェース書き込み処理部309に振り分ける。これにより、a2bデータ領域から入力された送信データは、第2インタフェース書き込み処理部309から送信キュー401に出力され、当該送信キュー401に書き込まれる。なお、第2インタフェース書き込み処理部309は、優先度(トラフィッククラス)に対応する書き込み処理部#0~#Nを有する。
【0200】
なお、読み出しレスポンス振り分け部307がホスト側メモリ20からのレスポンスを振り分けるための情報は、第1インタフェース読み出し処理部306から取得されるものとする。なお、レスポンスを振り分けるための情報としては、例えばリクエストの発行順やホスト側メモリ20にアクセスするためのプロトコル情報(レスポンスID)等が利用される。
【0201】
送信キュー401は、前述した第1及び第2実施形態のNIC用送信メモリ40に相当し、優先度(トラフィッククラス)に対応するキュー#0~#Nを有する。
【0202】
802.1Qbv処理部402は、IEEE 802.1Qbvの処理を実行する。具体的には、802.1Qbv処理部402は、IEEE 802.1Qbvのゲート制御情報を保持するとともに、ゲートドライバを含む。ゲート制御情報は、優先度(トラフィッククラス)に応じて送信データが格納される送信キュー401(キュー#0~#N)のゲートの開閉が設定された情報である。ゲートドライバは、ゲート制御情報に設定されたタイミングで送信キュー401(キュー#0~#N)のゲートの開閉処理を制御する。これにより、スケジューリングされたタイミングで各トラフィッククラスの送信タイミングを制御することが可能となる。
【0203】
通信処理部(802.1Qbu/802.13br処理部)403は、IEEE 802.1Qbu/IEEE 802.3brの処理を含むMAC(Media Access Control)処理を実行する。具体的には、送信処理の場合には通信処理部403は、pMAC(preemptable Media Access Control)403aの送信処理部が802.1Qbv処理部によってpMAC用送信キュー(図示せず)に格納された送信データ(Preemptable)を送信している間に、eMAC用送信キュー(図示せず)に送信データ(Express)が格納されると、pMAC403aの処理を停止し、eMAC(express Media Access Control)403bの送信処理を割り込ませる。通信処理部403は、eMAC403bの送信処理が終了すると、pMAC403aの送信処理を再開する。これにより、高優先度の送信データを低遅延で送信することが可能となる。
【0204】
なお、図15に示す通信装置はTSNが適用された具体的な実装例を示しているが、当該図15に示す例えば第1インタフェース読み出しリクエスト選択部305、第1インタフェース読み出し処理部306及び読み出しレスポンス振り分け部307は、図5及び図10に示す第1インタフェース部32に相当する。また、図15に示すa2b記述子読み出しリクエスト生成部301は、図5及び図10に記述子読み出し部33に相当する。つまり、a2b記述子読み出しリクエスト生成部301によって生成される記述子読み出しリクエストは、前述した第1及び第2実施形態において説明した記述子リクエストに相当する。更に、図15に示すa2b記述子バッファ303は、図5及び図10に示す記述子バッファ34に相当する。また、図15に示すa2bデータ読み出しリクエスト生成部304は、図5及び図10に示す送信データ読み出し部35に相当する。つまり、a2bデータ読み出しリクエスト生成部304によって生成されるデータ読み出しリクエストは、前述した第1及び第2実施形態において説明した送信データリクエストに相当する。更に、図15に示す第2インタフェース書き込み処理部309は、図5及び図10に示す第2インタフェース部36に相当する。また、図15に示す送信キュー401は図5及び図10に示すNIC用送信メモリ40に相当し、802.1Qbv処理部402及び通信処理部403はNICの一部として動作する。
【0205】
一方、本実施形態に係る通信装置1に備えられるデータ転送装置30は、前述した第1及び第2実施形態において説明したDTC遅延制御部37、RTC計測部38及びwindow制御部39を含むが、これらの各部37~39に加えて、ゲート状態確認部310を更に含む。
【0206】
ゲート状態確認部310は、802.1Qbv処理部402に保持されているゲート制御情報、RTC計測部38の内部に保持されているRTC(つまり、RTC計測部38による計測結果)及びデータ転送装置30によって転送されるデータ長の最大値(送信データの最大データ長)に基づいて、送信データが送信キュー401に出力された後の所定の期間における当該送信データが格納されるキューのゲートの開閉状態を確認する。
【0207】
なお、本実施形態においてDTC遅延制御部37、RTC計測部38及びwindow制御部39は前述した第1及び第2実施形態において説明したように動作するが、本実施形態におけるwindow値は、上記したゲート状態確認部310による確認結果に基づいて設定(決定)される。
【0208】
ところで、前述した第1及び第2実施形態においては主にデータの送信に関する機能部について説明したが、図15に示す通信装置1においては、データの受信に関する機能部が更に示されている。以下、データの受信に関する機能部について簡単に説明する。
【0209】
受信フレーム振り分け処理部404は、通信処理部403によって受信されたデータ(以下、受信データと表記)を受信キュー405が有するキュー#0~#Lに振り分ける。なお、受信キュー405が有する複数のキュー#0~#Lは、優先度(トラフィッククラス)に対応している。
【0210】
第2インタフェース読み出し処理部311は、受信キュー405にアクセスし、当該受信キュー405に格納されている受信データを入力する(読み出す)。なお、第2インタフェース読み出し処理部311による受信キュー405へのアクセスは、例えばAXI4等の所定のプロトコルに従って行われる。第2インタフェース読み出し処理部311は、b2a記述子バッファ308に記述子(書き込み先の記述子)が存在している場合に、ホスト側メモリ20に領域(受信バッファ)が確保されていると判定し、受信データの読み出し(入力)を行うものとする。
【0211】
b2aデータ書き込みリクエスト生成部312は、b2a記述子バッファに格納されている記述子及び第2インタフェース読み出し処理部311によって入力された受信データを基に、ホスト側メモリ20へのアクセスに必要なデータ書き込みリクエスト(アドレス及びデータ長を含むリクエスト)を生成する。なお、b2aデータ書き込みリクエスト生成部312は、優先度(トラフィッククラス)に対応するデータ書き込みリクエスト生成部#0~#Lを有する。
【0212】
a2b記述子書き込みリクエスト生成部313は、第2インタフェース書き込み処理部309から送信データが出力されたこと(つまり、送信データの送信完了)を通知するために、ホスト側メモリ20(a2b記述子領域)上の記述子を書き換える(例えば、完了フラグを設定する)ための記述子書き込みリクエスト(アドレス及びデータ長を含むリクエスト)を生成する。なお、a2b記述子書き込みリクエスト生成部313は、優先度(トラフィッククラス)に対応する複数の記述子書き込みリクエスト生成部#0~#Nを有する。
【0213】
b2a記述子書き込みリクエスト処理部314は、第2インタフェース読み出し処理部311によって受信フレームが入力されたこと(つまり、受信フレームの受信完了)を通知するために、ホスト側メモリ20(b2a記述子領域)上の記述子を書き換える(例えば、完了フラグを設定する)ための記述子書き込みリクエスト(アドレス及びデータ長を含むリクエスト)を生成する。なお、b2a記述子書き込みリクエスト処理部314は、優先度(トラフィッククラス)に対応する記述子書き込みリクエスト処理部#0~#Lを有する。
【0214】
第1インタフェース書き込みリクエスト選択部315は、例えばStrict Priority等に従って、b2aデータ書き込みリクエスト生成部312、a2b記述子書き込みリクエスト生成部313及びb2a記述子書き込みリクエスト処理部314によって生成されたリクエストを選択し、当該選択されたリクエストを第1インタフェース書き込み処理部316に受け渡す。
【0215】
第1インタフェース書き込み処理部316は、第1インタフェース書き込みリクエスト選択部315から受け渡されたリクエストに基づいてホスト側メモリ20にアクセスし、当該リクエストに基づく記述子及び受信データの書き込みを行う。なお、第1インタフェース書き込み処理部316によるホスト側メモリ20へのアクセスは、例えばAXI4等の所定のプロトコルに従って行われる。
【0216】
ここで、図16及び図17を参照して、本実施形態におけるwindow制御部39及びゲート状態確認部310の動作の一例について説明する。図16及び図17は、前述した図9及び図13と同様に、優先度p1~p5の送信データを転送する際のデータ転送装置30の一連の動作を示している。
【0217】
前述した第2実施形態において説明したように、データ転送装置30は、記述子リクエスト(記述子読み出しリクエスト)p1~p4が発行された後に記述子リクエスト(記述子読み出しリクエスト)p5が発行される場合であって、優先度p5が優先度p1~p4よりも高い場合、当該記述子リクエストp5が発行されるタイミングでwindow値を設定する。これによれば、図16に示すように、データ転送装置30への送信データp5の入力は、600クロックサイクル目に開始され、650クロックサイクル目に完了する。このようにデータ転送装置30に入力された送信データp5は、送信キュー401に格納され、ホスト側メモリ20から送信キュー401への送信データp5の転送が完了する。
【0218】
しかしながら、本実施形態においては、上記したようにゲート制御情報に設定されたタイミングで送信キュー401(キュー#0~#N)のゲートの開閉が制御される構成であるため、上記したように送信データp5の転送が完了したとしても、送信データp5の優先度(トラフィッククラス)に対応するゲート(以下、送信データp5のゲートと表記)がオープン(開放状態)でなければ、当該送信データp5を即座に送信することができない。このため、ゲートの開閉状況によっては、図13のように送信データリクエストp4の転送を遅らせたとしても、802.1Qbv処理部402による送信データp5の処理が即座に実施できず、p4の遅延処理が無駄になる。
【0219】
そこで、本実施形態においては、記述子リクエストp5が発行される際に設定されるwindow値を上記したゲート制御情報を考慮して決定する。
【0220】
具体的には、ゲート状態確認部310は、記述子リクエストp5が発行されたタイミングで、ゲート制御情報を参照して、当該記述子リクエストp5が発行されてからRTC計測部38の内部に保持されているRTC*2が経過する送信データp5の最短転送開始タイミング(つまり、送信データp5のデータ転送装置30への入力及び送信キュー401への転送が最短で開始されるタイミング)における送信データp5のゲートがオープンであるかを確認する。
【0221】
上記した送信データp5の転送開始タイミングにおける当該送信データp5のゲートがオープンである場合、ゲート状態確認部310は、当該最短転送開始タイミングから送信データp5の送信処理を完了することができる期間において当該ゲートが継続的にオープンであるかを確認する。
【0222】
ところで、上記したように記述子リクエストp5が発行されたタイミングでは送信データp5の記述子p5は入力されていないため、データ転送装置30は、当該送信データp5の正確なデータ長を把握することができない(つまり、送信データp5の送信処理に要する期間を把握することができない)。
【0223】
この場合、本実施形態においては、送信データp5の最短転送開始タイミング(図16に示す600クロックサイクル目)からDTCの最大値(DTC_max)*2の期間において当該送信データp5のゲートがオープンであれば、当該送信データp5の送信処理を完了することができると考える。なお、DTC_maxは、データ転送装置30によって転送されるデータ長の最大値及びバス幅から算出されるDTCに相当する。
【0224】
このため、ゲート状態確認部310は、上記した送信データp5の最短転送開始タイミング(図16に示す600クロックサイクル目)からDTC_max*2の期間において送信データp5のゲートがオープンであるか否かを確認する。
【0225】
これによれば、図16に示すように、最短転送開始タイミングからDTC_max*2の期間において送信データp5のゲートがオープンであることがゲート状態確認部310によって確認された場合には、600クロックサイクル目に送信データp5の転送が開始されることによって、当該送信データp5を遅延なく送信することができることがわかる。この場合、window制御部39は、前述した第2実施形態において説明したようにwindow値としてRTC計測部38の内部に保持されているRTCを設定する。
【0226】
一方、図17に示すように、最短転送開始タイミングの送信データp5のゲートがオープンでない(最短転送開始タイミングからDTC_max*2の期間において当該ゲートがオープンでない)ことがゲート状態確認部310によって確認された場合には、600クロックサイクル目に送信データp5の転送が開始されたとしても、当該送信データp5のゲートがクローズであることにより当該送信データp5を送信することができないことがわかる。この場合、ゲート状態確認部310はゲート制御情報を参照して最短転送タイミング時点から次に送信データp5のゲートがオープンになるまでの期間(クロックサイクル数)に相当するC_nextopenを確認する。window制御部39はRTC計測部38の内部に保持されているRTC、当該C_nextopen及びDTC_maxから算出した値をwindow値として設定する。具体的には、C_nextopenからDTC_maxを減算した値をwindow補正値Gとし、Gが0以上の場合はRTC+Gをwindow値とし、Gが0未満の場合はRTCをwindow値として設定する。図17には示されていないが、このようなwindow値によれば、次にゲートがオープンになるようなタイミングで送信データp5の送信が開始されるように送信データリクエスト(データ読み出しリクエスト)を発行することが可能となる。
【0227】
上記したように本実施形態に係るデータ転送装置30は、ゲート制御情報、RTC計測部38の内部に保持されているRTC(つまり、計測結果)及びDTC_max(転送されるデータ長の最大値)に基づいて、最短転送開始タイミング(第2データが第2メモリに出力される最短のタイミング)から所定の期間(例えば、DTC_max*2)におけるゲートの開閉状態を確認し、当該確認結果に基づいてwindow値を設定する。
【0228】
本実施形態においては、上記したようにゲート制御情報を考慮したwindow値を設定することにより、例えばデータ転送装置30の後段(つまり、NIC)の送信処理において遅延が発生するような高優先度の送信データのために、低優先度の送信データリクエストの発行が停止されるような事態を回避することができ、効率的な送信データの転送処理を実現することが可能となる。
【0229】
なお、本実施形態においては転送開始タイミングから所定の期間におけるゲートの開閉状態を確認する際にDTC_maxを用いるものとして説明したが、本実施形態は、送信データの送信を完了することができると推定される期間におけるゲートの開閉状態を確認する構成であればよく、DTC_max*2の期間とは異なる期間におけるゲートの開閉状態を確認してもよい。
【0230】
また、ゲート状態確認部310の別の構成として、802.1Qbv処理部402に保持されているゲート制御情報、RTC計測部38の内部に保持されているRTC(つまり、RTC計測部38による計測結果)及びデータ転送装置30によって転送されるデータ長の最大値(送信データの最大データ長。優先度毎に個別に設定してもよい。)に基づいて、優先度0~P毎のwindow補正値G0~GPを常に計算する構成でもよい。各G0~GPの計算式は上記した方法と同様である。この場合、window制御部39は、上述したwindow値の設定時に該当優先度のGp(p=0~P)とRTCを加算した値をwindow値として設定する。
【0231】
また、ゲート状態確認部310は、802.1Qbv処理部402に保持されているゲート制御情報と同等の情報を内部に保持してもよい。この場合、ゲート状態確認部310は802.1Qbv処理部402が参照している時刻よりも、常にRTC*2未来のゲートの状態を参照する。
【0232】
以上述べた少なくとも1つの実施形態によれば、通信における低遅延を実現することが可能なデータ転送装置及び方法を提供することができる。
【0233】
(システム構成例)
図18は、前述した各実施形態における通信装置1を用いたシステムの構成例を示す図である。図18は、工場またはプラントにおいて、エッジサーバ700から、5G(5th Generation)/ローカル5Gシステム500を介して現場のベルトコンベア601及びロボットアーム602a、602bを制御する例を示す。
【0234】
5G/ローカル5Gシステム500は、5Gコアネットワーク(Core Network)505、セントラルユニット(Central Unit)504、ディストリビューテッドユニット(Distributed Unit)503、リモートユニット(Remote Unit)502及びユーザイクイップメント(User Equipment)501を備える。5G/ローカル5Gシステム500は、3GPP(3rd Generation Partnership Project)(登録商標)の規格によって定められる5G通信を行う。
【0235】
各実施形態における通信装置1は、例えばエッジサーバ700及び5Gコアネットワーク505に実装することができる。これにより、エッジサーバ700及び5Gコアネットワーク505の間の通信のリアルタイム性を向上させることができる。
【0236】
また、各実施形態における通信装置1は、5G/ローカル5Gシステム500内の各部の間の通信に使用されてもよい。すなわち、リモートユニット502、ディストリビューテッドユニット503、セントラルユニット504及び5Gコアネットワーク505の間の通信を行うために、リモートユニット502、ディストリビューテッドユニット503、セントラルユニット504及び5Gコアネットワーク505の少なくとも一部に各実施形態における通信装置1が実装されてもよい。
【0237】
各実施形態における通信装置1は、ベルトコンベア601及びロボットアーム602a、602bの少なくとも一方と、ユーザイクイップメント501との間の通信、またはベルトコンベア601とロボットアーム602a、602bとの間の通信に使用されてもよい。
【0238】
各実施形態における通信装置1が適用可能なシステムはこれに限られず、どのようなシステムであってもよい。例えば5G/ローカル5Gを用いない工場またはプラントの産業用ネットワークシステムや自動車及び航空機の内部のネットワークシステム等に適用することもできる。
【0239】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0240】
1…通信装置、10…CPU、10a…ドライバ、20…メモリ、30…データ転送装置、31…ホストインタフェース、32…第1インタフェース部、33…記述子読み出し部、34…記述子バッファ、35…送信データ読み出し部、36…第2インタフェース部、37…DTC遅延制御部、38…RTC計測部、39…window制御部、40…メモリ、301…a2b記述子読出しリクエスト生成部、302…b2a記述子読み出しリクエスト生成部、303…a2b記述子バッファ、304…a2bデータ読み出しリクエスト生成部、305…第1インタフェース読み出しリクエスト選択部、306…第1インタフェース読み出し処理部、307…読み出しレスポンス振り分け部、308…b2a記述子バッファ、309…第2インタフェース書き込み処理部、310…ゲート状態確認部、311…第2インタフェース読み出し処理部、312…b2aデータ書き込みリクエスト生成部、313…a2b記述子書き込みリクエスト生成部、314…b2a記述子書き込みリクエスト処理部、315…第1インタフェース書き込みリクエスト選択部、316…第1インタフェース書き込み処理部、401…送信キュー、402…802.1Qbv処理部、403…通信処理部、404…受信フレーム振り分け処理部、405…受信キュー。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18