Weißbuch

Zeitstempel

Übersicht

Bei den Hochgeschwindigkeitsfähigkeiten unserer FPGA-Produkte kann das Zeitstempeln eine Herausforderung darstellen. BittWare bietet eine Reihe von Lösungen, darunter spezielle Zusatzmodule wie das A10PL4 Timing Kit (Bild), koaxiale Eingänge auf der Basiskarte und Unterstützung für IP wie Atomic Rules TimeServo.

Viele BittWare FPGA-Karten verfügen über zwei koaxiale Eingänge. Ein Eingang ist für ein 1 PPS Zeitsynchronisationssignal vorgesehen. Der andere ist für einen 10-MHz-Referenztakt vorgesehen. Diese Kombination ermöglicht es, sehr genaue Zeitstempel an die Eingangsdaten anzuhängen. BittWare bietet auch eine Beispielimplementierung von Zeitstempeln für 100 GbE-Ethernet-Pakete, die durch das IEEE-1588 PTP-Protokoll gesteuert werden. Das SmartNIC Shell Referenzdesign von BittWare verwendet einen Zeitservo innerhalb des FPGAs, den wir von Atomic Rules lizenziert haben.

Die zwei koaxialen Eingänge sind alles, was Kartenbenutzer für viele Zeitstempel-Systemkonfigurationen benötigen. In den folgenden Abschnitten wird detailliert beschrieben, was wir anbieten und wie genau es sein kann.

Zeit Servos

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.

Vereinfacht gesagt, kann die Implementierung so einfach sein wie die Bereitstellung eines Zählers, der um 4 Nanosekunden inkrementiert und an einen 250-MHz-Takt angeschlossen ist. Diese Implementierung wird so genau sein wie der Quarz auf der Platine. Die Synchronisierung mit der Tageszeit wird schwierig sein. Man kann sowohl die Genauigkeit als auch die Synchronisation verbessern, indem man ein externes 1-PPS-Signal verwendet, um einige der niederwertigsten Bits des Zählers jede Sekunde zurückzusetzen.) Wenn Ihr Zähler jedoch schneller läuft als die reale Zeit, führt dies dazu, dass der Zeitstempel rückwärts läuft. Rückwärtslaufende Zeitstempel sind dafür bekannt, dass sie einige beliebte Anwendungssoftware beschädigen; daher ist die bessere Lösung, das 1-PPS-Signal irgendwie zu verwenden, um den Zeitstempeltakt des FPGAs zu verlangsamen oder zu beschleunigen. Das ist es, was ein Zeitservo tut.

Eine Zeitservo-Implementierung kann externe Hardware verwenden. Die Option Precision Timing Module für einige der Low-Profile-Karten von BittWare enthält einen chipbasierten Zeitservo. BittWare empfiehlt jedoch generell, die Atomic Rules Time Servo IP in Betracht zu ziehen, die in das FPGA integriert wird.

Die Funktionalität aller Zeitservos, ob hardware- oder softwarebasiert, wird durch die mit dem Linux-Kernel verbundenen Zeitservo-APIs definiert. Der Linux-Kernel verfügt über eine API auf Benutzerebene für die Handhabung von Zeitservos. Die API wird auf Kernel.org erklärt. Benutzer können die Zeit einstellen, die Zeit um einen bestimmten Offset verschieben oder die Taktrate nach oben oder unten verändern. Dies sind die grundlegenden Funktionen, die jeder Zeitservo unterstützen sollte. Die Linux-Implementierung von PTP verwendet diese Uhr-API. Leider verfügt das SmartNIC-Referenzdesign von BittWare nicht über einen Ethernet-Treiber und kann daher dieses Linux-Protokoll nicht aktivieren. Bitte verwenden Sie die Linux-API als Dokumentation der Funktionalität, die in jeder Zeitservo-Implementierung erwartet wird.

BittWare's SmartNIC unterstützt DPDK. DPDK verfügt über eine API auf Benutzerebene zur Manipulation von Zeitservos. Suchen Sie nach den Funktionen rte_eth_timesync_adjust_time, rte_eth_timesync_read_time und rte_eth_timesync_write_time. Atomic Rules bietet eine Implementierung dieser DPDK-API für seinen Zeitservo an. Um sie nutzen zu können, muss der Anwender jedoch auch den Atomic Rules Arkville PCIe DMA-Block erwerben. Für Kunden, die beide Atomic Rules-Blöcke lizenzieren möchten, ist diese DPDK-API vollständig im SmartNIC-Referenzdesign von BittWare implementiert. Schließlich verfügt Atomic Rules über eine vollständige PTP-Implementierung, die innerhalb des FPGAs ausgeführt werden kann, ohne dass Ethernet oder DPDK auf dem Host erforderlich sind.

Einstellen der richtigen Uhr

Wir haben gesehen, dass Benutzer einen Ethernet-Port auf dem Host-Computer für PTP reservieren und dann versuchen, diese Zeit mit der FPGA-Karte zu synchronisieren. Dies funktioniert, wenn Sie auch ein 1 PPS-Signal in die FPGA-Karte einspeisen. Andernfalls führt dies zu sehr ungenauen Werten. Das Problem besteht darin, dass PTP eine Zeitstempeluhr im NIC-ASIC anpasst. PTP stellt nicht direkt den Motherboard-Takt ein. Ohne diese 1 PPS gibt es keine Methode, mit der alle drei Taktgeber (NIC, Motherboard, FPGA) in enge Synchronisation gebracht werden können. Um die Genauigkeit der Zeitstempel ohne 1 PPS zu gewährleisten, müssen die PTP-Pakete durch die FPGA-Karte fließen. Daher benötigt der Anwender einen der QSFP-Netzwerkanschlüsse des FPGAs, um PTP-Pakete, die zu einer beliebigen PTP-Implementierung (Host über Ethernet-Treiber, Host über DPDK-Treiber oder Atomic Rules PTP im FPGA) fließen, mit einem Zeitstempel zu versehen.

PTP mit einem Warenkristall

Der 10-MHz-Eingang vieler BittWare-Karten ermöglicht es den Anwendern, ein Timing-Referenzsignal von beliebiger Qualität für ihre Anwendungen bereitzustellen. Ohne dieses Signal verwenden FPGA-Karten von BittWare einen handelsüblichen Quarzoszillator mit einem potenziellen Fehler von etwa 20-30 ppm (kombiniert Stabilität, Jitter und Toleranzfehler). Somit kann der Zeitstempeltakt der FPGA-Karte jede Sekunde um etwa 20 Mikrosekunden nach oben oder unten abweichen. Wenn dies nicht durch ein externes Signal (1 PPS oder IEEE 1588) korrigiert wird, können sich die Fehler auf 1,7 Sekunden pro Tag summieren. Das bedeutet, dass Benutzer eine externe 10-MHz-Taktreferenz anschließen sollten, wenn Hold-Over (Verlust des PPS-Signals) für ihre Anwendung wichtig ist.

Diese 20-30 ppm potenzieller Fehler sind mit großen Temperatur- und Spannungsschwankungen verbunden, die in einem Computerraum nicht auftreten. Eine gute Implementierung von PTP-Zeitsynchronisationsprotokollen verbirgt die Toleranz des Quarzes und seine längerfristigen Fehlerkomponenten, so dass wir uns hauptsächlich mit dem kurzfristigen Jitter des Quarzes beschäftigen müssen. Einige Anbieter behaupten, dass eine gute PTP-Implementierung in einem Computerraum ohne zusätzliche 1 PPS mit einem handelsüblichen Quarz eine Synchronisation von +/- 1 Mikrosekunde mit dem Grandmaster erreichen kann. Andere sind skeptisch, ob dieser Genauigkeitsgrad ohne spezielle Hardware erreicht werden kann.

Unabhängig von der tatsächlichen Genauigkeit dieser Kombination ist sie wahrscheinlich gut genug, um die einzige gesetzliche Genauigkeitsanforderung zu erfüllen, die uns bekannt ist. Die ESMA schreibt in Europa für die Zeitstempelung von Finanztransaktionen, die durch automatisierten Handel ausgelöst werden, eine UTC mit einer Unsicherheit von höchstens 100 Mikrosekunden vor.

GPS-Genauigkeit

Wenn Ihre Anwendung eine Synchronisierung mit der Tageszeit erfordert, nutzen die meisten Benutzer die Atomuhren, die in der GPS-Satellitenkonstellation angeboten werden. Jeder Satellit enthält eine Rubidium-Atomuhr mit einer Genauigkeit von mehr als einer halben Nanosekunde pro Jahr. Zwischen dieser Uhr und unserem FPGA-Board befinden sich jedoch zahlreiche Schaltkreise und Atmosphären. Aus diesem Grund sind die GPS-Zeitsignale über einen Zeitraum von mehreren Stunden auf etwa 14 Nanosekunden genau. Leider führen atmosphärische Effekte zu einem kurzfristigen Jitter im GPS-Signal, der zwischen 50 und 300 Nanosekunden liegt. Ein teurer GPS-Empfänger kann diesen Jitter eliminieren, indem er das GPS-Signal mit einer lokalen, sehr genauen Uhr (Doppelofenquarz oder Atomuhr) mischt. Ein solcher Empfänger muss viele Stunden lang eingeschaltet sein, bevor er auch nur annähernd das 14-ns-Potenzial im GPS-Zeitsignal liefern kann.

Um eine hohe Genauigkeit zu erreichen, müssen Sie ein Synchronisationssignal zwischen dem GPS-Empfänger und dem FPGA-Board anschließen. Bei den meisten Empfängern ist dies der 1 PPS-Ausgang des Empfängers. Sie benötigen eine separate Verbindung, um die ungefähre Tageszeit zu empfangen. Diese andere Verbindung wird als "Zeitcode" bezeichnet. Der gebräuchlichste Zeitcode ist ein proprietäres ASCII-Protokoll, das über eine altmodische serielle Schnittstelle läuft. Einige Empfänger bieten jedoch auch einen Standard-Timecode über einen BNC-Anschluss mit einem AM- oder DC-Level-Shift (DCLS)-Transport der Protokolle IRIG A, B, G oder NASA36. Aktuelle BittWare-Karten bieten nicht die erforderliche Hardware für den direkten Empfang von Zeitcode. Die Benutzer müssen den Zeitcode über den Host-Computer der Karte leiten.

In einer IEEE-1588-Installation ist normalerweise nur der Grandmaster direkt mit dem GPS-Empfänger verbunden. Es ist sehr selten, dass das 1-PPS-Signal dieses Empfängers an alle PTP-Verbraucher verteilt wird, und noch seltener, dass der 10-MHz-Takt des GPS an die PTP-Verbraucher verteilt wird. Daher ist es nicht kosteneffektiv, bei dieser Art von Installation viel Geld für einen doppelofenstabilisierten GPS-Empfänger auszugeben. Wen kümmert es schon, dass der Grandmaster die Zeit bis auf 14 ns genau einhält, wenn die PTP-Verbraucher sich wahrscheinlich nur auf wenige Mikrosekunden genau synchronisieren?

Synchronisierung mehrerer FPGA-Karten

Es gibt Anwendungen, bei denen der Benutzer Zeitstempel zwischen mehreren FPGA-Karten synchronisieren möchte, die sich auf engem Raum befinden, z. B. in einem Geräteträger. In diesem Fall ist es praktisch, dasselbe 1-PPS-Korrektursignal und dieselbe 10-MHz-Zeitreferenz an jede Karte zu verteilen. Wie nah werden die Zeitstempel beieinander liegen?

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.

Die Unterstützung von BittWare für einen 10-MHz-Takteingang ist ungewöhnlich. Dedizierte Paketerfassungskarten haben im Allgemeinen keinen 10-MHz-Referenzeingang. Stattdessen enthalten sie einen höherwertigen Quarzoszillator. Wenn jedoch die Synchronisierung mehrerer Karten erforderlich ist, hilft die Verwendung eines gemeinsamen Referenztakts. Der Ansatz von BittWare ist also etwas ungenauer (weniger Quarz), kann aber sehr viel genauer werden (Verwendung eines Referenztakts in Laborqualität) und die Zeit zwischen mehreren Karten sehr viel genauer synchronisieren.

Zeitstempel im SmartNIC-Referenzdesign

Das SmartNIC 100 GbE-Referenzdesign von BittWare bietet Unterstützung für Zeitstempel. Es verwendet den Zeitservo von Atomic Rules. Es verwendet die PTP-Client-Beispielanwendung von DPDK zur Verarbeitung des PTP-Protokolls und zur Steuerung des Zeitservos. https://doc.dpdk.org/guides/sample_app_ug/ptpclient.html

Es gibt einen wichtigen Filter in der SmartNIC-Pipeline, der PTP-Pakete identifiziert. Derzeit enthält dieser Filter keinen Parser und kann daher nur "Annex F, Transport of PTP over IEEE 802.3 /Ethernet" Pakete identifizieren. BittWare hat inzwischen einen Parser entwickelt, der zur Unterstützung von PTP über UDP und TCP eingesetzt werden könnte.

Für Benutzer von Zeitstempeln ist der vielleicht nützlichste Block im SmartNIC-Referenzdesign die CMAC LBus to AXI4-Streaming-Dichtung von BittWare. Unsere Version übernimmt die erforderliche Zeitstempel-Mathematik.

Schlussfolgerung

Mit den vorhandenen Funktionen auf vielen BittWare FPGA-Karten haben Sie alles, was Sie brauchen, um Zeitstempel mit der von Ihrer Anwendung geforderten Genauigkeit zu erhalten - von "gut genug" bis hin zu "Zeitlabor-Referenz". Unsere Partnerschaft mit Atomic Rules bietet alle Zeitstempel, die Ihre Anwendung benötigt, und ermöglicht es den Kartennutzern, sich auf den einzigartigen Mehrwert für ihr Unternehmen zu konzentrieren.