ホワイトペーパー

タイムスタンプ

概要

FPGA製品の高速性能では、タイムスタンプが課題となることがあります。BittWare 、A10PL4タイミングキット(写真)などの専用アドオンモジュール、ベースカードの同軸入力、Atomic RulesTimeServoなどのIPへの対応など、さまざまなソリューションを提供しています。

多くのBittWare FPGA カードでは、2 つの同軸入力を備えています。1つの入力は、1PPSの時間同期信号用である。もう1つは10MHzの基準クロック用です。この組み合わせにより、入力データに非常に正確なタイムスタンプを付けることができます。BittWare 、IEEE-1588 PTPプロトコルで制御する100 GbEイーサネットパケットのタイムスタンプの実装例も提供しています。BittWare's SmartNIC Shellリファレンス・デザインでは、Atomic Rulesからライセンスを受けたFPGA内部のタイム・サーボを使用しています。

2つの同軸入力は、多くのタイムスタンプシステム構成に必要なすべてのカードユーザーです。この後の段落では、私たちが提供するものとその精度の高さについて詳しく説明します。

タイムサーボ

AMD’s Ethernet MACs can apply timestamps. However, the AMD IP expects users to provide an accurate timestamp which the MAC then associates with each packet that flows through. The creation and maintenance of accurate timestamps is the responsibility of user supplied IP.

単純に考えれば、250MHzのクロックに4ナノ秒単位でインクリメントするカウンターを用意すればよいことになります。この実装は、ボード上の水晶と同程度の精度になります。しかし、時刻との同期を取るのは難しい。外部からの1PPS信号でカウンターの最下位ビットを1秒ごとにリセットすることで、精度と同期の両方を向上させることができます)。しかし、カウンターの動作が現実の時間よりも速い場合、タイムスタンプが逆流することになります。したがって、1PPS信号を使ってFPGAのタイムスタンプクロックを遅くしたり速くしたりするのがよい解決策です。これがタイムサーボの役割です。

タイムサーボの実装には、外部ハードウェアを使用することができます。BittWareの一部のロープロファイルカードの Precision Timing Module オプションは、チップベースのタイムサーボを含んでいます。しかし、BittWare 、FPGAに内蔵されるAtomic Rules Time Servo IPを検討することを一般的に推奨しています。

ハードウェア、ソフトウェアにかかわらず、すべてのタイムサーボの機能は、Linuxカーネルに関連するタイムサーボAPIによって定義されます。Linuxカーネルには、タイムサーボを操作するためのユーザーレベルのAPIがあります。このAPIはKernel.orgで説明されています。ユーザーは、時刻を設定したり、設定したオフセット分だけ時刻をずらしたり、クロックレートを上下に調整したりすることができます。これらは、タイムサーボがサポートすべき基本的な機能である。PTPのLinux実装は、このクロックAPIを使用しています。残念ながら、BittWareの SmartNIC リファレンスデザインには、イーサネットドライバがないため、この Linux プロトコルを有効にすることはできません。Linux API は、タイムサーボの実装で期待される機能のドキュメントとしてお使いください。

BittWareのSmartNICはDPDKをサポートしています。DPDKにはタイムサーボを操作するためのユーザーレベルのAPIがあります。rte_eth_timesync_adjust_time、rte_eth_timesync_read_time、rte_eth_timesync_write_timeという関数を探してみてください。Atomic Rulesは、このDPDK APIの実装をタイムサーボに提供しています。ただし、これを使用するには、Atomic Rules社のArkville PCIe DMAブロックを入手する必要があります。このDPDK APIは、BittWareのSmartNICリファレンスデザインに完全に実装されており、Atomic Rulesの両ブロックのライセンスを取得することができます。最後に、Atomic Rulesは、ホスト上でイーサネットやDPDKを必要とせず、FPGA内で実行可能なPTPの完全な実装を備えています。

正しい時計に合わせる

ホストコンピュータのイーサネットポートをPTP専用にし、その時刻をFPGAボードと同期させようとするユーザーを見たことがあります。この方法は、FPGAカードに1PPSの信号が入力されている場合に有効です。そうでない場合、この方法は非常に不正確な値をもたらします。問題は、PTPがNIC ASIC内のタイムスタンプクロックを調整していることです。PTPはマザーボードのクロックを直接調整するわけではありません。この1PPSがなければ、3つのクロック(NIC、マザーボード、FPGA)すべてを密接に同期させる方法はない。1PPSなしでタイムスタンプの精度を高めるには、PTPパケットをFPGAカードに流す必要があります。したがって、PTP実装(Ethernetドライバ経由のホスト、DPDKドライバ経由のホスト、FPGA内部で動作するAtomic Rules PTP)に流れるPTPパケットをタイムスタンプするためには、FPGAのQSFPネットワークポートの1つが必要です。

商品クリスタルでPTP

多くのBittWare カードに搭載されている 10MHz 入力により、ユーザーはアプリケーションに必要な品質のタイミング基準信号を供給することができます。この信号がない場合、BittWare の FPGA カードでは、およそ 20~30 ppm の潜在的な誤差(安定性、ジッター、許容誤差を含む)を持つ汎用水晶発振器が使用されます。そのため、FPGAボードのタイムスタンプクロックは、毎秒、上下20マイクロ秒ずつずれる可能性があります。外部信号(1PPSまたはIEEE 1588)で補正せずに放置すると、1日あたり1.7秒の誤差が生じる可能性があります。つまり、ホールドオーバー(PPS信号の損失)が重要なアプリケーションでは、外部10MHzタイミングリファレンスを接続する必要があります。

この20-30ppmの潜在的な誤差は、コンピュータルームでは経験しないような温度や電圧の大きな変化に関連しています。PTP時間同期プロトコルの優れた実装は、水晶振動子の耐性と長期的な誤差成分を隠し、水晶振動子の短期的なジッターにほとんど関心を持たせることになります。一部のベンダーは、コンピュータルームで1PPSの補足なしに、汎用水晶振動子を用いて優れたPTPを実装すれば、グランドマスターと±1マイクロ秒の同期を達成できると主張しています。また、より特殊なハードウェアでなければ、この程度の精度を達成することはできないと懐疑的な意見もあります。

この組み合わせの実際の精度がどうであれ、私たちが認識している唯一の法的精度要件を満たすには十分であると思われます。欧州のESMAが定める自動売買による金融取引のタイムスタンプに関する法的要件は、100マイクロ秒を超えない不確実性でUTCすることです。

GPSの精度

アプリケーションで時刻の同期が必要な場合、多くのユーザーはGPS衛星に搭載された原子時計を利用しています。各衛星には、1年に1/2ナノ秒以上の精度を持つルビジウム原子時計が搭載されています。しかし、その時計とFPGAボードの間には、たくさんの回路や雰囲気があります。そのため、GPSの時刻信号は、数時間で約14ナノ秒の精度になります。しかし、大気の影響により、GPS信号には50~300ナノ秒の短期的なジッターが発生します。高価なGPS受信機では、GPS信号とローカルで非常に正確な時計(ダブルオーブン水晶または原子時計)を混ぜることで、このジッターを除去することができます。このような受信機は、GPS時間信号の14ナノ秒の電位に近いものを提供するために、何時間も電源を入れる必要があります。

高精度を得るためには、GPS受信機とFPGAボードの間に同期信号を接続する必要があります。ほとんどの受信機では、これは受信機の1PPS出力です。大まかな時刻を受信するためには、別の接続が必要です。この別の接続は「タイムコード」と呼ばれます。最も一般的なタイムコードは、昔ながらのシリアルポートで流れる独自のASCIIプロトコルです。しかし、一部の受信機では、プロトコル IRIG A、B、G、NASA36 の AM または DC レベルシフト(DCLS)トランスポートで、BNC コネクタを介して標準タイムコードも提供します。現在のBittWare カードには、タイムコードを直接受信するために必要なハードウェアはありません。ユーザーは、ボードのホストコンピューターを通じてタイムコードを流す必要があります。

IEEE-1588の設置では、通常、グランドマスターのみがGPSレシーバーに直接接続されています。その受信機の1PPS信号をすべてのPTPコンシューマーに分配することは非常にまれであり、GPSの10MHzクロックをPTPコンシューマーに分配することはさらにまれである。したがって、このスタイルのインストールでダブルオーブン安定化GPSレシーバーに多くのお金を費やすことは費用対効果ではありません。PTPの消費者が数マイクロ秒単位で同期している可能性が高いのに、グランドマスターが14ナノ秒以内で時間を刻むことを誰が気にしますか?

複数のFPGAカードを同期させる

機器ラックのような狭い場所に設置された複数のFPGAボード間でタイムスタンプを同期させるアプリケーションがある。この場合、同じ1PPSの補正信号と10MHzのタイムリファレンスを各ボードに配布することが現実的です。タイムスタンプはどこまで近づけることができるのか?

Let us assume we are using the Atomic Rules time servo that is nominally clocked at 400 MHz. That means each clock tick is roughly 2.5 ns long. However, at 100 GbE, the time servo feeds its output asynchronously into the AMD CMAC which runs at roughly 322 MHz (3.1 ns). How those asynchronous signals mix isn’t well documented. However, we have run experiments and discovered that timestamps values in this configuration tend to fall within 3-4 ns between cards.

BittWareの10MHzクロック入力のサポートは珍しい。パケットキャプチャ専用カードは、一般的に10MHzの基準入力は持っていません。その代わり、より高品質な水晶発振器が搭載されています。しかし、マルチボードの同期が必要な場合、共通の基準クロックを使用することが有効です。つまり、BittWare のアプローチは、少し精度が落ちますが(水晶が少ない)、より精度を上げることができ(ラボ品質の基準クロックを使用)、複数のカード間の時間をより正確に同期させることができます。

SmartNICリファレンスデザインにおけるタイムスタンプについて

BittWareのSmartNIC 100 GbEリファレンスデザインは、タイムスタンプをサポートしています。これは、Atomic Rulesのタイムサーボを使用しています。PTPプロトコルの処理とタイムサーボの制御には、DPDKのPTPクライアントサンプルアプリケーションを使用しています。https://doc.dpdk.org/guides/sample_app_ug/ptpclient.html

SmartNICのパイプラインには、PTPパケットを識別するキーフィルタがあります。現在、このフィルタにはパーサーが含まれていないため、「Annex F, Transport of PTP over IEEE 802.3 /Ethernet」パケットしか識別できません。BittWare 、UDPおよびTCP上のPTPをサポートするために展開できるパーサーを作成しました。

タイムスタンプを使用するユーザーにとって、SmartNICリファレンス・デザインで最も有用なブロックは、BittWareのCMAC LBus to AXI4-Streaming gasketです。私たちのバージョンは、必要なタイムスタンプの計算を処理します。

結論

多くのBittWare FPGA カードに搭載されている既存の機能により、アプリケーションに必要な精度でタイムスタンプを維持するために必要なものはすべて揃っています。「十分な精度」から「時間実験室の基準」まで、あらゆる精度でタイムスタンプを維持できます。Atomic Rules社とのパートナーシップにより、アプリケーションに必要なタイムスタンプの配管をすべて提供し、カードユーザーは自社独自の付加価値に集中することができます。