TSN Ethernetの実装をFPGA(KR260)で試してみた

本サイトはアフィリエイト広告を利用しています。
FPGA

TSN(Time Sensitive Networking)のイーサネット環境を作ってみました。

KR260というTSN対応のFPGAボードを使ってテストしています。

TSNの環境構築から実装・通信テストまで一連の流れを紹介します。

 

スポンサーリンク

TSN Ethernetの実装をFPGA(KR260)で試してみた

TSN(Time Sensitive Networking)のイーサネット環境を構築してみました。

KR260(XilinxのFPGAが搭載された評価ボード)をTSNスイッチとしてます。

 

TSNのテスト環境を構築をして、まずは最初のPTP通信を行いました。

KR260がTSNスイッチとして、マスタークロックと同期するところまで確認しています。

 

TSNが使えるKR260(FPGAの評価ボード)

TSN対応の開発・評価ボードは2022/8時点ではかなり限られています。

その中でTSNが使えるKR260は、個人レベルで購入できるFPGAの評価ボードです。

※4つのLAN(RJ-45)コネクタを持ち、その内2つがTSNとして対応できます。

 

KR260の購入から最初のOSを入れるまでを下記記事にて紹介しています。

KR260を購入してUbuntuを動かすまでのメモ

KR260を購入してUbuntuを動かすまでのメモ
XilinxのKria KR260のロボティクス スターター キットを買ってみました。 Digi-Keyから個人で購入しています。 Ubuntuを動かすまでの流れを紹介します。

 

TSN通信の接続先はLANカード(NIC)で対応

KR260でTSNで通信テストさせるためには、接続先のデバイスが必要になります。

IEEE-1588/PTP対応の安いLANカード(NIC)を購入して、接続先(マスター)にしています。

※本当はKR260が2台あれば一番良いのですが、1台約$400するので2台目は諦めました。

LANカードならば数千円程度で購入できます。

PTP対応LANカードの通信方法・詳細に関しては下記記事で紹介しています。

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた
IEEE-1588/PTP対応のLANカード(NIC)を購入してみました。 実際にPCにカードを取り付けて、PTPの動作確認まで実施しています LANカード(NIC)の選定から、PTP通信までの内容を紹介します。

 

Xilinxの公式ページ

今回の記事の手順に関しては、基本的に公式ページのTSNのデモ実装方法です。

同様にテストする方は公式ページも参考お願いします。

 https://xilinx.github.io/kria-apps-docs/kr260/build/html/docs/ros2_multinode_communication_via_tsn/docs/app_deployment.html

 

KR260でTSN通信テストする準備

KR260でTSN通信のテストする準備を進めていきます。

KR260を購入してUbuntuを動かすまでのメモ

上記記事のKR260のセットアップした前提で、下記以降の手順を実施しています。

 

アップデートやダウンロードも多くあり、有線LANの接続が必要です。

4つあるLANコネクタの右上(PS側)に繋げます。

 

Timezoneとlocaleの設定

Timezoneとlocaleの設定をしておきます。

公式の手順通り、ここではアメリカの時刻設定をしています。

 

ただ筆者の環境では、KR260接続先のLinuxのPCは日本の時刻設定で実施しています。

KR260側も日本の時刻設定で動作できるのかは未確認です。

 

ファームウェアのVerを2022.1以上に

ファームウェアのVerは2022.1以上が必要ということです。

ただ筆者が2022年8月時点でKR260を入手しましたが、その時点で2022.1でした。

ほとんどの人が影響ないと思います。

 

細かいファームウェアのアップデート情報などは下記の公式Wikiにあります。

必要ならばアップデートファイル入手して対応をお願いします。

 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+K26+SOM#Boot-Firmware-Updates

 

TSNのデモ用アプリケーションをインストール

Xilinxのプログラムなどをダウンロード・アップデートします。

アップグレード後はrebootを推奨されていたので、rebootしときます。

 

KR260用のパッケージを確認します。

今回は「pmod-rs485-test」というTSNのデモアプリケーションを使います。

また「mv-defect-detect」というカメラと10G SFP+を使った別のデモもありました。

 

今回使うTSNデモのファームウェアをインストールをします。

 

公式の手順で下記サービスを再スタート推奨していたので実施しておきます。

(今後修正予定ということです)

 

また他インストールに関しても、必要なとこはy(es)押して進めていきます。

 

パスも繋げておきます。もしこれ以降に電源OFFした場合は再実施した方が良さそうです

(公式にも必要ならば~/.bashrcに記載推奨の旨が書かれていました)

 

ROS2をインストール

KR260へROS2環境もインストールしておきます。

(今回の通信テストでは不要かもしれませんが、公式に従いインストールしました)

※本来はKR260を複数接続してROS2+TSNで繋ぐデモのためだと思われます。

 

xmutilの操作

(KRIAシリーズの)KR260の操作ではxmutilというコマンドをよく使います。

公式のWikiに使用方法が記載されています。

 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1641152513/Kria+K26+SOM#On-Target-Utilities

 

まずは利用可能なプラットフォーム(Accelerator)を確認します。

初期状態では「kr260-tsn-rs485pmod」がまだActive slotが「-1」で使用できない状況です。

 

一度unloadして、使いたいプラットフォームを再loadします。

再load後は使いたい「kr260-tsn-rs485pmod」のActive slotが「0」となっています。

 

TSN環境のセットアップ

今までの操作でKR260でTSN環境のプラットフォームが使える状況になりました。

実際にTSNを使えるようにセットアップのスクリプトを走らせます。

TSN用のep.20というポートが追加されます。

 

この時点でifconfigをするとTSNのep.20が確認できます。

IPアドレス含めて割り振られています。後でマスター側の設定に使うためメモしときます。

「inet 111.222.0.20 netmask 255.255.255.0 broadcast 111.222.0.255」

 

この時点でTSNの接続先と繋げば、KR260のTSN用のコネクタが点灯するはずです。

4つあるLANコネクタの左上(PL側)に接続しています。

 

マスター側でTSNの通信テストする準備

KR260とは別に、接続先のマスター側のLANカード(NIC)の準備をします。

今回のテストではLANカード側がマスタークロックとなって、KR260が同期する形です。

PTP対応のLANカード(NIC)をLinuxのPCに装着します。

LANカードを取り付けられる(PCIEコネクタを持つ)LinuxのPCならOKです。

 

LANカードの選定、LinuxのPCでの動作確認に関して下記記事で紹介しています。

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた

IEEE-1588/PTP対応のLANカード(NIC)を動かしてみた
IEEE-1588/PTP対応のLANカード(NIC)を購入してみました。 実際にPCにカードを取り付けて、PTPの動作確認まで実施しています LANカード(NIC)の選定から、PTP通信までの内容を紹介します。

 

linuxptpをインストール

PTP通信に必要なパッケージ(linuxptp)をインストールします。

またethtoolは使用するLANカードがPTP通信可能か確認するために使います。

 

TSNと通信可能なLANカード(NIC)かを確認する

搭載したLANカード(NIC)がPTP通信可能かを確認していきます。

まずifconfigでインターフェース名を確認します。(筆者の場合はenp4s0でした)

 

ethtoolでインターフェースの状況を調べることができます。

LANカードのPTPの情報を確認すると、ハードウェアクロックに対応していました。

「PTP Hardware Clock: 0」 ←が無いとTSNと通信が出来ません。

 

スレーブ側とIPアドレスを合わせておく

念のためにKR260のスレーブ(TSNスイッチ)側とIPアドレスを合わせておきます。

スレーブが下記アドレスだったため、マスター側はずらして111.222.0.100としています。

「inet 111.222.0.20 netmask 255.255.255.0 broadcast 111.222.0.255」

 

(実際にIPアドレス合わせずにテストもしてみましたが、PTP通信が出来ませんでした)

 

ptp4lの設定ファイルを作成する

Xilinxの公式の手順に従い、ptp通信(ptp4l)に使うマスター側の設定ファイルを作成します。

テキストエディタなら何でもいいので、「ptp4l_master.conf」の設定ファイルを作ります。

 

マスター側からPTP通信を開始する

LANカードが搭載されたPC(マスター側)から先にPTP通信を開始します。

(テストでは通信開始したら、特に気にすることなく放っておけばOKです)

下記のptp4lを実行すると、ログ(ptptlog)ファイルが作成が作成されます。

 

使用しているオプションに関しては下記内容です。詳細はptp4lのマニュアルを参照ください。

 https://linux.die.net/man/8/ptp4l

  • -P…P2P(Peer-to-Peer)メカニズムの使用
  • -2…(IEEE 802.3) イーサネットを使用
  • -H…ハードウェアタイムスタンプを使用
  • -i …interfaceの指定先 ※enp4s0を指定
  • -m…ログ出力 ※ptplogファイルに出力
  • -f…configファイル読み込み ※ptp4l_master.confを読み込み

 

PTP通信のマスター側のログを確認する

ptp通信のログを見てみます。開始からイベントがある毎に記録されています。

 

ステートの遷移

正常にマスターとして通信出来た場合では、ステートが下記のように遷移出来ています。

「INITIALIZING→LISTENING → MASTER」

  • INITIALIZING…初期化された状態
  • LISTENING…ポートがPTPに参加できる状態になった最初の状態
  • MASTER…マスターの状態

 

マスタークロック

マスタークロックが(KR260側ではなく)LANカード(NIC)のものが選ばれています。

赤箇所と青箇所がifconfigのetherの情報と一致します。

  • ptpのログ…「selected local clock 6cb311.fffe.529d82 as best master」
  • ifconfig…「ether 6c:b3:11:52:9d:82

 

KR260のTSN環境でPTP通信テスト

マスター側からPTP通信開始しましたので、KR260側のスレーブ側でも通信を開始します。

結果は無事、KR260でTSN環境でPTP通信が繋がりました。同期も取れています。

 

スレーブとしてPTP通信を行う

既にセットアップは済んでいるので、「start_ptp.sh」のスクリプトを動かすだけです。

「-s」を付けることでスレーブの設定ファイルを読み込みます。

下記結果となりました。スレーブではマスタークロックと同期オフセットの各値も出力されます。

 

スクリプトは30秒程度で止まりますが、~/.local/log/ptplogにログファイルが保存されています。

また下記コマンドで、ログファイルを順次出力することができます。

 

PTP通信のスレーブ側のログを確認する

スクリプトでPTP通信を実行していましたが、中身はマスター側と同じくptp4lです。

同様にログの中身を確認・考察していきます。

 

n(ナノ)秒単位で時刻同期の精度

ptp4lの履歴でオフセットのrms値に注目します。※単位はn(ナノ)秒です。

PTP通信開始始めはオフセット値が莫大な値となっていますが、徐々に収束しています。

最後は一桁のn(ナノ)秒単位で時刻同期の精度が取れていることが分かります。

  • ptp4l[478.059]: rms 6 max 11 freq -4173 +/- 8 delay 182 +/- 0

 

ステートの遷移

正常にスレーブとして通信出来た場合では、ステートが下記のように遷移出来ています。

「INITIALIZING→LISTENING → UNCALIBRATED→SLAVE」

  • INITIALIZING…初期化された状態
  • LISTENING…ポートがPTPに参加できる状態になった最初の状態
  • UNCALIBRATED…マスタークロックを受信している状態。同期はまだ未。
  • SLAVE…マスタークロックを受信している状態。同期まで済

 

マスタークロック

スレーブ側で使用するクロックは、マスター側のLANカード(NIC)のものを選択できています。

マスター側で確認したethernetの情報と一致しています

  • port 1: new foreign master 6cb311.fffe.529d82-1
  • selected best master clock 6cb311.fffe.529d82

 

スレーブの設定ファイル

KR260で動作しているスレーブの設定ファイル(ptp4l_slave.conf)も確認します。

マスターとスレーブで差分があるのは「priority1,priority2」のみでした。

priorityの値が小さい方がマスタークロックとなります。(マスター側の方が小さいです。)

  • マスター(ptp4l_master.conf)…priority1 248 priority2 249
  • スレーブ(ptp4l_slave.conf)…priority1 250 priority2 251

 

マスターとしてPTP通信を行う

今回の記事とは別になりますが、KR260をTSNをマスターとして通信することが可能です。

下記記事で紹介しています。是非一緒にご覧ください。(リンク先はこちら)

TSNスイッチとして使えるFPGAの評価ボード(KR260)

TSNスイッチとして使えるFPGAの評価ボード(KR260)
XilinxのKR260というFPGAボードはTSNに対応しています。 更にTSN対応のRJ-45(LAN)コネクタが2つあります。 TSN スイッチとして、またエンドポイントとしても使えることを紹介します。

 

参考記事

今回TSNとPTP通信をテストしていく上で、多くの記事を参考にさせていただきました。

この場を借りてお礼申し上げます。

 

  • PTPのステートなど詳細に記載されていた記事

 https://www.cisco.com/c/ja_jp/support/docs/ios-nx-os-software/ios-xr-software/217579-configure-ptp-and-synce-basics-with-cisc.html

  • LinuxでのPTP利用方法に関して丁寧に記載されていた記事

 https://network.oreda.net/knowledge/ptp-linux

  • ptp4lの出力結果について詳細に記載されていた記事

 https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/sec-verifying_time_synchronization

  • PTPマスターの選出方法に関して丁寧に記載されていた記事

 https://www.netone.co.jp/knowledge-center/blog-column/knowledge_takumi_223/

 

まとめ

TSN(Time Sensitive Networking)のイーサネット環境を作ることができました。

KR260というTSN対応のFPGAボードを使うことで個人でもテスト出来ています。

是非皆さまもLANカード(NIC)とKR260でTSNを試してみて下さい。

 

次の記事では今回のPTP通信がTSNの規格に適応したものかを解析しています。

よろしければ一緒にご覧ください。(リンク先はこちら)

TSNとPTPの違いは?通信テストの設定・ログから確認してみた

TSNとPTPの違いは?通信テストの設定・ログから確認してみた
TSNの環境構築して、PTPの通信テストを行いました。 そしてテストしたPTPの設定が、TSNの規格に適応しているのか確認してみました。 設定・ログを見直しながら、PTPとTSNの違いを確認した内容を紹介します。

コメント