XilinxのKR260というFPGAボードはTSNに対応しています。
更にTSN対応のRJ-45(LAN)コネクタが2つあります。
TSN スイッチとして、またエンドポイントとしても使えることを紹介します。
TSNスイッチとして使えるFPGAボードで遊んでみた
XilinxのKR260というFPGAボードはTSN(Time Sensitive Networking)に対応しています。
一番の特徴として、TSNに対応できるRJ-45(LAN)コネクタが2つあります。
※残り2つは普通のEthernet用のコネクタです。

内部のIPとしてもスイッチの機能も有りますので、TSNスイッチとしても使えます。
もちろんシンプルにエンドポイント(マスター・スレーブ)としても使用可能です。
実際にTSNの設定の確認、また通信テストを行っていきます。
TSN スイッチ(Switch)とは?
TSNスイッチはデータを送信・受信するだけではなく、データを受け渡しできます。
TSNの時刻同期したデータを、他のTSN機器にも中継することが可能です。
- TSN EndPoint…末端でマスター・スレーブとしてデータを送信・受信できます
 - TSN Switch …スイッチとしてデータの中継もできます
 
複数のTSNスイッチを繋げることで、時刻同期が取れたシステムが構築できます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TSN_EP===TSN_SW===TSN_SW===TSN_SW……
master > slave > slave > slave ……
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TSN EndPoint Switch(Bridged EndPoint)
今回のKR260のテストでは、TSNのエンドポイントとスイッチ両方対応しています。
IPのModeが「TSN EndPoint Switch(Bridged EndPoint)」が選択されていました。

今回テストしたKR260のFPGAの中身に関しては、個人でも確認することが可能です。

TSNスイッチにした設定を確認する
実際にTSNスイッチの通信テストが出来れば一番良いのですが、環境がありませんでした。
(筆者の環境では)KR260から先に繋げるTSNに対応したデバイスが無いためです。
KR260のLANコネクタ2つを使って、TSNのデータ中継が出来ません。

そのため、TSNスイッチとしてのセットアップした時の設定・ログを確認していきます。
通信は出来なくとも、セットアップの情報は確認できます。
TSN通信のテスト環境
TSNの通信テストと環境構築に関しては下記記事で実施・紹介しています。
TSN Ethernetの実装をFPGA(KR260)で試してみた

テストしたPTP通信がTSNに対応しているかの確認を下記記事で紹介しています。
TSNとPTPの違いは?通信テストの設定・ログから確認してみた

テスト環境は「PTP対応のLANカード(NIC)」と「TSNに対応のFPGAボード」です。
PTP対応のLANカード(NIC)の詳細については下記記事で紹介しています。
IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた

またTSNに対応のFPGAボード(KR260)に関しては下記記事で紹介しています。

TSNスイッチとしてセットアップする
通信テストする際には、TSNスイッチのMACとIPアドレスをセットします。
公式の手順だとスクリプトで隠れていますが、下記箇所になります。
| 
					 1  | 
						ubuntu@kria:~$ source /usr/bin/net_setup.sh -b2  | 
					
TSNスイッチとしてのMAC・IPアドレス
ifconfigを行うとTSNスイッチとしてのMAC・IPアドレスの変化が良く分かります。
※またセットアップのスクリプトを実際に解析してみると、更に理解が進みます。
写真イメージとしては、下記のように設定されています。

アドレスに関しては、あくまでデモプログラム一例であることをご了承ください。
TSN_IP内部のMACアドレス、TSN_スレーブとしてのIPアドレスが下記になります。
- EP="00:0a:35:00:01:20" …TSN_IP内部のEPのMACアドレス
 - EMAC0="00:0a:35:00:01:2e" …eth2のMACアドレス
 - EMAC1="00:0a:35:00:01:2f" …eth3のMACアドレス
 - SLV_IP_ADDR=111.222.0.20 …TSN_スレーブのIPアドレス
 
セットアップ前後のifconfig
実際の通信テストまでは出来ませんでしたが、TSNスイッチとしての設定を確認できました。
特にセットアップ後のIP・MAC箇所を注目してもらえれば良いかと思います。
inet 111.222.0.20 netmask 255.255.255.0 broadcast 111.222.0.255
ether 00:0a:35:00:01:20 txqueuelen 1000 (Ethernet)
ether 00:0a:35:00:01:2e txqueuelen 1000 (Ethernet)
ether 00:0a:35:00:01:2f txqueuelen 1000 (Ethernet)
確認したTSNスイッチのセットアップ前後のifconfigの一部が下記となります。
・セットアップの前
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39  | 
						ubuntu@kria:~$ ifconfig ep: flags=67<UP,BROADCAST,RUNNING>  mtu 1500         inet6 fe80::a9b5:5f36:dd0a:fe94  prefixlen 64  scopeid 0x20<link>         ether 00:0a:35:00:01:05  txqueuelen 1000  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 18  bytes 2698 (2.6 KB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500         ether 00:0a:35:0f:2c:53  txqueuelen 1000  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 0  bytes 0 (0.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0         device interrupt 37 eth1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500         ether 00:0a:35:0f:3f:16  txqueuelen 1000  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 0  bytes 0 (0.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0         device interrupt 38 eth2: flags=67<UP,BROADCAST,RUNNING>  mtu 1500         inet6 fe80::6d96:98e9:7b44:1aab  prefixlen 64  scopeid 0x20<link>         ether 00:0a:35:00:01:0e  txqueuelen 1000  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 0  bytes 0 (0.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 eth3: flags=3<UP,BROADCAST>  mtu 1500         ether 00:0a:35:00:01:0f  txqueuelen 1000  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 0  bytes 0 (0.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  | 
					
・セットアップの後
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32  | 
						ubuntu@kria:~$ ifconfig ep: flags=67<UP,BROADCAST,RUNNING>  mtu 1500         inet6 fe80::a9b5:5f36:dd0a:fe94  prefixlen 64  scopeid 0x20<link>         ether 00:0a:35:00:01:20  txqueuelen 1000  (Ethernet)         RX packets 20  bytes 3274 (3.2 KB)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 66  bytes 9594 (9.5 KB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 ep.20: flags=67<UP,BROADCAST,RUNNING>  mtu 1500         inet 111.222.0.20  netmask 255.255.255.0  broadcast 111.222.0.255         inet6 fe80::20a:35ff:fe00:120  prefixlen 64  scopeid 0x20<link>         ether 00:0a:35:00:01:20  txqueuelen 1000  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 9  bytes 746 (746.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 eth2: flags=67<UP,BROADCAST,RUNNING>  mtu 1500         inet6 fe80::6d96:98e9:7b44:1aab  prefixlen 64  scopeid 0x20<link>         ether 00:0a:35:00:01:2e  txqueuelen 1000  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 0  bytes 0 (0.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 eth3: flags=3<UP,BROADCAST>  mtu 1500         ether 00:0a:35:00:01:2f  txqueuelen 1000  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 0  bytes 0 (0.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  | 
					
TSNのエンドポイントとしての動作
KR260はTSNスイッチとしてだけでなく、エンドポイントとしても動作可能です。
(というかSwitchとして使える→EndPointとしても使える…にほぼなると思います)
エンドポイントとしての、スレーブとマスターの通信テストを確認してみました。
TSNのスレーブとしての通信テスト
KR260でのTSNのスレーブの通信テストは下記記事でまとめています。
TSN Ethernetの実装をFPGA(KR260)で試してみた

TSNのマスターとしての通信テスト
KR260でTSNのマスターとしての通信テストも同様に可能です。
途中まではスレーブで紹介した方法と同じです。下記手順から操作が変わります。

スクリプトの末尾を「-b2」→「-b1」にすることでマスターとしてセットアップできます。
IP・MACアドレスもスレーブとは違うものが割り振られます。
source /usr/bin/net_setup.sh -b1
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24  | 
						ubuntu@kria:~$ source /usr/bin/net_setup.sh -b1 Please enter the password for sudo access Cannot find device "ep.20" No previous config port-swp0 state-4 Successfully set the port state port-swp1 state-4 Successfully set the port state port-swp2 state-4 Successfully set the port state port-swp0 vlanid-20 Successfully added port-swp1 vlanid-20 Successfully added 12: ep.20@ep: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000     link/ether 00:0a:35:00:01:10 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535     vlan protocol 802.1Q id 20 <REORDER_HDR>       egress-qos-map { 0:4 } numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535     inet 111.222.0.10/24 brd 111.222.0.255 scope global ep.20        valid_lft forever preferred_lft forever     inet6 fe80::20a:35ff:fe00:110/64 scope link tentative        valid_lft forever preferred_lft forever *** Board setup for MASTER operations ***  | 
					
PTP通信のスクリプトを動かす時も、末尾を「-s」→「-m」に変更します。
source /usr/bin/start_ptp.sh -m
マスターとしてのconfigファイルを読み込んでptp通信を開始します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						ubuntu@kria:~$ source /usr/bin/start_ptp.sh -m Please enter the password for sudo access ptp4l: no process found invoking ptp4l wait till complete .......... ptp4l[167.792]: selected /dev/ptp2 as PTP clock ptp4l[167.836]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[167.836]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[173.884]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[173.885]: selected local clock 000a35.fffe.00011e as best master ptp4l[173.885]: port 1: assuming the grand master role PTP started on master, PTP continues to run in background  | 
					
KR260(マスター)としてのステートも正常に遷移出来ていることが分かります。
「INITIALIZING→LISTENING → MASTER」
- INITIALIZING…初期化された状態
 - LISTENING…ポートがPTPに参加できる状態になった最初の状態
 - MASTER…マスターの状態
 
LANカード(NIC)側のスレーブの時刻同期を確認
LANカード(NIC)側でスレーブの設定ファイルを読み込み、PTP通信を開始します。
| 
					 1  | 
						iotengineer@iotengineer-Inspiron-3650:~$ sudo ptp4l -P -2 -H -i enp4s0  -m -f ptp4l_slave.conf >& ptplog &  | 
					
出力されたログを確認すると、KR260側のマスタークロックを受け取れています。
最終的にはn(ナノ)s秒単位で時刻同期の精度が取れていることが分かります。
- ptp4l[193.662]: selected best master clock 000a35.fffe.00011e
 - ptp4l[207.419]: rms 5 max 8 freq +4451 +/- 3 delay 186 +/- 0
 
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  | 
						ptp4l[186.433]: selected /dev/ptp0 as PTP clock ptp4l[186.483]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[186.483]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[189.662]: port 1: new foreign master 000a35.fffe.00011e-1 ptp4l[193.662]: selected best master clock 000a35.fffe.00011e ptp4l[193.662]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE ptp4l[194.789]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED ptp4l[195.414]: rms 153442773471822 max 306885546943925 freq   -713 +/- 2277 delay   186 +/-   0 ptp4l[196.415]: rms  760 max 1165 freq  +2330 +/- 1035 delay   186 +/-   0 ptp4l[197.415]: rms 1271 max 1335 freq  +4651 +/- 337 delay   186 +/-   0 ptp4l[198.415]: rms  813 max 1075 freq  +5115 +/-  30 delay   186 +/-   0 ptp4l[199.416]: rms  262 max  431 freq  +4866 +/-  91 delay   186 +/-   0 ptp4l[200.416]: rms   42 max   65 freq  +4599 +/-  55 delay   186 +/-   0 ptp4l[201.417]: rms   75 max   82 freq  +4467 +/-  22 delay   186 +/-   0 ptp4l[202.417]: rms   49 max   67 freq  +4436 +/-   3 delay   186 +/-   0 ptp4l[203.418]: rms   16 max   25 freq  +4451 +/-   4 delay   186 +/-   0 ptp4l[204.417]: rms    4 max    7 freq  +4458 +/-   4 delay   186 +/-   0 ptp4l[205.418]: rms    2 max    4 freq  +4460 +/-   3 delay   186 +/-   0 ptp4l[206.419]: rms    2 max    4 freq  +4460 +/-   3 delay   186 +/-   0 ptp4l[207.419]: rms    5 max    8 freq  +4451 +/-   3 delay   186 +/-   0  | 
					
またLANカード(NIC)側でスレーブとしてのステートを正常に遷移出来ています。
「INITIALIZING→LISTENING → UNCALIBRATED→SLAVE」
- INITIALIZING…初期化された状態
 - LISTENING…ポートがPTPに参加できる状態になった最初の状態
 - UNCALIBRATED…マスタークロックを受信している状態。同期はまだ未。
 - SLAVE…マスタークロックを受信している状態。同期まで済
 
使用したスレーブの設定ファイル(ptp4l_slave.conf)は下記です。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  | 
						[global] transportSpecific       1 priority1 250 priority2 251 ptp_dst_mac             01:80:C2:00:00:0E p2p_dst_mac             01:80:C2:00:00:0E logAnnounceInterval     1 logSyncInterval         -3 follow_up_info          1 announceReceiptTimeout  3 syncReceiptTimeout      3 neighborPropDelayThresh 800 min_neighbor_prop_delay -20000000 network_transport       L2 delay_mechanism         P2P tx_timestamp_timeout	10  | 
					
まとめ
KR260をTSNのスイッチとして設定、またマスター・スレーブとしてテストできました。
TSNテストできる評価ボードは少ないので、もし興味ある方は是非試してみて下さい。
下記記事でKR260を購入して、セットアップした内容をまとめています。

下記記事でKR260にてTSNの環境構築を構築した内容をまとめています。
TSN Ethernetの実装をFPGA(KR260)で試してみた

  
  
  
  

コメント