白皮书

时间戳

A10PL4 计时套件特写

概述

由于我们的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 的以太网 MAC 可以应用时间戳。不过,AMD IP 希望用户提供准确的时间戳,然后由 MAC 将其与流经的每个数据包关联起来。创建和维护准确的时间戳是用户提供 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时间基准分配给每个板子是很实用的。时间戳会有多近?

假设我们使用的是 Atomic Rules 时间伺服器,其标称时钟频率为 400 MHz。这意味着每个时钟刻度约为 2.5 毫微秒。然而,在 100 GbE 的情况下,时间伺服器会将其输出以异步方式送入 AMD CMAC,而 AMD CMAC 的运行频率大约为 322 MHz(3.1 ns)。这些异步信号是如何混合的,目前还没有很好的记录。不过,我们通过实验发现,在这种配置下,各卡之间的时间戳值往往在 3-4 毫微秒之内。

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的合作提供了你的应用所需的所有时间戳管道,使卡用户能够专注于自己公司的独特附加价值。