白皮书

时间戳

概述

由于我们的FPGA产品具有高速能力,因此时间戳可能是一个挑战。BittWare提供了一系列的解决方案,包括专用的附加模块,如A10PL4定时套件(如图),基卡上的同轴输入以及对Atomic RulesTimeServo等IP的支持。

许多BittWare FPGA卡提供了两个同轴输入。一个输入是用于1 PPS时间同步信号。另一个是用于10 MHz参考时钟。这种组合使得在输入数据上附加非常精确的时间戳成为可能。BittWare还提供了一个由IEEE-1588 PTP协议控制的100 GbE以太网数据包时间戳的实施实例。BittWare的SmartNIC Shell参考设计在FPGA内使用了我们从Atomic Rules授权的时间伺服器。

两个同轴输入是许多时间戳系统配置的所有卡片用户需要的。下面的段落详细介绍了我们提供的产品和它的精确性。

时间伺服

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 PPS信号来减慢或加快FPGA的时间戳时钟。这就是时间伺服的作用。

时间伺服的实现可以使用外部硬件。BittWare的一些低矮卡的精确计时模块选项包含一个基于芯片的时间伺服。然而,BittWare通常建议用户考虑FPGA内部的Atomic Rules时间伺服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块,才能使用它。BittWare的SmartNIC参考设计中完全实现了这个DPDK API,供愿意授权使用Atomic Rules两个块的客户使用。最后,Atomic Rules有一个完整的PTP实现,可以在FPGA内运行,不需要在主机上使用以太网或DPDK。

调整正确的时钟

我们看到用户将主机上的一个以太网端口专用于PTP,然后试图将时间与FPGA板同步。如果你有一个1 PPS信号进入FPGA卡,这就可以了。否则,这样做会导致非常不准确的数值。问题是,PTP正在调整NIC ASIC内部的时间戳时钟。PTP不是直接调整主板的时钟。没有这1个PPS,就没有任何方法可以使所有三个时钟(NIC、主板、FPGA)接近同步。对于没有1 PPS的时间戳精度,PTP数据包需要流经FPGA卡。因此,用户需要FPGA的一个QSFP网络端口来对流向任何PTP实现(通过以太网驱动的主机、通过DPDK驱动的主机、或在FPGA内部运行的Atomic Rules PTP)的PTP数据包进行时间戳。

带有商品晶体的PTP

许多BittWare卡上的10MHz输入允许用户提供任何质量的定时参考信号,以满足他们的应用需求。如果没有这个信号,BittWare的FPGA卡就会使用一个潜在误差大约为20-30ppm的商品晶体振荡器(结合了稳定性、抖动和公差误差)。因此,FPGA板的时间戳时钟每秒钟可能会有20微秒的偏差,向上或向下。如果不通过外部信号(1 PPS或IEEE 1588)进行校正,误差每天可以增加到1.7秒。这意味着,如果保持(PPS信号的损失)对你的应用很重要的话,用户应该连接一个外部10MHz的定时参考。

这20-30ppm的潜在误差与温度和电压的广泛变化有关,而这些变化在计算机房中是不会出现的。一个良好的PTP时间同步协议的实施将隐藏晶体的容差和它的长期误差成分,让我们主要关注晶体的短期抖动。一些供应商声称,在计算机房中,一个良好的PTP实施,在没有补充1 PPS的情况下,使用商品晶体,可以达到+/-1微秒的同步到祖师爷上。其他人则怀疑,如果没有更多专门的硬件,这种程度的精确度是可以实现的。

不管这种组合的实际准确性如何,它很可能足以满足我们所知道的唯一的法律准确性要求。在欧洲,ESMA对由自动交易引发的金融交易的时间标记的法律要求是UTC的不确定性不超过100微秒。

GPS的准确性

如果你的应用需要与一天中的时间同步,大多数用户利用GPS卫星群中提供的原子钟。每颗卫星都包含一个铷原子钟,每年的精确度超过半纳秒。然而,在该时钟和我们的FPGA板之间有很多电路和气氛。正因为如此,在几个小时的时间内,GPS时间信号的精确度约为14纳秒。不幸的是,大气的影响给GPS信号带来了50到300纳秒的短期抖动。一个昂贵的GPS接收器可以通过将GPS信号与本地非常精确的时钟(双炉晶体或原子)混合来消除这种抖动。这样的接收器需要开启许多小时才能提供接近GPS时间信号中14纳秒的电位。

为了获得高精度,你必须在GPS接收器和FPGA板之间连接一个同步信号。对于大多数接收机来说,这是接收机的1 PPS输出。你需要一个单独的连接来接收粗略的时间-日期。这另一个连接被称为 "时间码"。最常见的时间码是一个专有的ASCII协议,通过一个老式的串行端口流动。然而,一些接收机也通过BNC连接器提供标准的时间码,并通过IRIG A、B、G或NASA36协议的调幅或直流电平移(DCLS)传输。目前的BittWare卡不提供直接接收任何时间码所需的硬件。用户必须通过板卡的主机来传输时间码。

在IEEE-1588安装中,通常只有主控器直接连接到GPS接收器上。将接收器的1PPS信号分配给所有的PTP用户是非常罕见的,将GPS的10MHz时钟分配给PTP用户更是罕见。因此,在这种风格的安装中,花很多钱买一个双炉稳定的GPS接收器并不划算。当PTP的消费者可能只在几微秒内同步时,谁还会在乎祖师爷是否将时间保持在14纳秒之内呢?

同步多个FPGA卡

在一些应用中,用户希望在一个小区域内(如设备机架)的多个FPGA板之间同步时间戳。在这种情况下,将相同的1 PPS校正信号和10 MHz时间基准分配给每个板子是很实用的。时间戳会有多近?

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时钟输入的支持是不寻常的。专门的数据包捕获卡一般没有任何10 MHz的参考输入。相反,它们包含一个更高质量的晶体振荡器。然而,当需要多板同步时,使用一个共同的参考时钟会有帮助。因此,BittWare的方法是不太准确的(较差的晶体),但可以变得更准确(使用实验室质量的参考时钟),并能更准确地在多个卡之间进行时间同步。

SmartNIC参考设计中的时间戳

BittWare的SmartNIC 100 GbE参考设计包括对时间戳的支持。它使用Atomic Rules时间伺服。它使用DPDK的PTP客户端示例应用程序来处理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垫圈。我们的版本处理所需的时间戳数学。

总结

利用许多BittWare FPGA卡上的现有功能,你可以拥有维护时间戳所需的一切,无论你的应用需要什么精度--从 "足够好 "一直到 "时间实验室参考"。我们与Atomic Rules的合作提供了你的应用所需的所有时间戳管道,使卡用户能够专注于自己公司的独特附加价值。