基于FAST的TSN交换(6)基于FPGA的PTP时间同步实现

基于FAST的TSN交换(6)基于FPGA的PTP时间同步实现

    时间同步是TSN交换实现的前提。802.1AS规范定义了TSN网络同步的方法,其基本思路还是利用IEEE 1588v2定义的PTP协议,将网络中所有的时间从设备与时间主设备的时间进行同步。在基于FAST流水线的TSN实现中,与PTP协议相关的逻辑主要有接收控制逻辑(RXC),PTP-UDA模块以及PTP-UDO模块。这三个模块密切协同实现PTP时间同步而不需要软件参与。

一、FAST-TSN-04的PTP实现模型

    在FAST-TSN-04的PTP协议实现模型如下图所示,主要由RxC、PTP-UDA和PTP-UDO模块组成。其中RxC模块位于FPGA OS内部,是FAST平台固有的逻辑,而PTP-UDA和PTP-UDO是FAST扩展的流水线模块,只有需要支持PTP协议的流水线才需要嵌入这两个模块。

基于FAST的TSN交换(6)基于FPGA的PTP时间同步实现
(1)主要功能模块
    每个从接口接收的分组首先进入RxC模块。RxC模块首先不加区分的为每个分组打上48比特接收时间戳。接收时间戳被填写在分组的元数据中,随着分组一同进入FAST流水线处理。由于接口时钟频率为125MHz,因此时间戳的精度为8ns。RxC模块位于输入缓存之前,因此输出缓存的拥塞和调度机制不影响接收时间戳标记的准确度。
    PTP-UDA模块位于FAST流水线的开始,负责PTP协议的处理。根据软件配置,PTP-UDA可以工作在时间主模式或是时间从模式。
    PTP-UDA内部的状态机控制整个时间同步过程,由于时间同步完全由硬件实现,因此同步过程中不需要followup消息,主从之间只交换sync、delay_req和delay-resp三类消息,关于PTP消息详细的交互流程以及offset的计算已有大量文章介绍,本文不再赘述。
    若PTP-UDA工作在时间从模式,则每次同步都会产生一个本地时钟与主时钟的偏差offset,该offset用于修正本地的全局时间。
    PTP-UDO模块位于输出缓存之后,PTP-UDO模块根据输出分组元数据中协议标准类型(PST)来判断该分组是否为PTP的sync/delay-req/delay-resp分组。
    如果输出分组是上述PTP分组,则该分组在PTP协议头中会携带透明时钟(Transparent Clock)字段TC,PTP-UDO模块会根据分组头部携带的时间戳信息,当前时间信息计算分组从PTP-UDA发出经交换缓存和输出缓存的延时,将该延时累计到透明时钟字段中。如果分组不是上述PTP分组,则PTP-UDO模块将该分组发出而不做任何修改。
(2)多时钟域时钟同步
    在基于FPGA的FAST千兆交换实现过程中,FPGA内部最多有2N+1个时钟域,其中N为接口数目。其中每个千兆接口都有一个独立的接收时钟,该时钟频率与通信对端的发送时钟一致。每个接口都有一个发送时钟,负责将数据通过GMII/RGMII接口发送给PHY芯片。同时还有一个独立于接收和发送接口时钟的核心时钟,作为FAST流水线的工作时钟。
    虽然FAST-TSN-04的接口时钟和核心时钟都额定为125MHz,但可能存在细微的差别。例如两个20ppm的125MHz晶振,设基于这两个晶振的时间每秒偏差为D,则:Dmax=8ns*(125M*(1+20ppm)-125M*(1-20ppm))=40us
    因此FPGA内部不同时钟域的时间信息之间也需要同步,片上跨时钟域的时间同步有单信号同步和多信号同步等方式,这里不再赘述。
二、PTP协议同步实现
(1)时间信息的标记和处理
    基于RxC、PTP-UDA和PTP-UDO模块的FAST-TSN-04的PTP时间同步实现原理如下图所示。每个sync/delay_req/delay-resp的协议分组都由PTP-UDA发出和接收。FAST-TSN-04需要发送PTP分组时, PTP-UDA产生PTP分组,并将分组从PTP-UDA离开的时间t0填写到分组的元数据中,假设该分组到达PTP-UDO时间为t1,则该分组在交换机内部的延时将会填写到分组的透明时钟域TC中,随分组从网络接口发出。

基于FAST的TSN交换(6)基于FPGA的PTP时间同步实现

PTP协议分组处理流程

    FAST-TSN-04接收PTP分组时首先将接收时间戳t2填写到分组元数据中,然后送到FAST流水线的PTP-UDA模块,设PTP-UDA模块收到分组的时间为t3。后续的PTP分组处理有两种情况。
    一是分组的目的MAC是本地接口MAC地址,则该分组会送到本地PTP-UDA处理。本地PTP-UDA首先对分组的透明时钟域进行修正,增加值为该分组进入FPGA后的延时t3-t2,然后再对分组数进行解析,根据PTP协议要求进行后续处理。
    二是分组目的不是本地MAC,即该分组需要被TSN交换机转发。PTP-UDA不处理该分组,直接将分组送FAST流水线进行后续交换处理。设分组到达输出接口的PTP-UDO时间为t4,则分组在交换机中的延时t4-t2将被累加到TC域中。
(2)同步计算关键时间点的获取
    基于PTP的时间同步原理如下图所示,时间从设备通过与时间主设备的三种类型分组的交互获取四个关键的时间点信息,T1,T2,T3和T4,并根据这些关键时间点信息计算自己时间与时间主设备时间的偏差offset,并根据这个偏差调整自己的时间计数器。

基于FAST的TSN交换(6)基于FPGA的PTP时间同步实现
    时间从设备与时间主设备的交互并获取四个关键时间点的详细方法如下表所示,时间点标记参见图1。

步骤 操作 时间点获取
1 主设备PTP-UDA向从设备发送sync分组,PTP-UDA标记发送时间pkt.TS=t0;
从设备接口t2时刻接收分组,分组在t3时刻到达 PTP-UDA模块
1=t0;
T2=Pkt.tc+t3-t2
2 从设备PTP-UDA在t0时向主设备发送delay-req分组;
主设备在t2时接收分组,分组在t3时刻到达 PTP-UDA模块。
T3=t0;
T4= Pkt.tc+t3-t2
3 主设备PTP-UDA将T3封装在delay-resp分组中,向从设备发送;
从设备PTP-UDA接收delay-resp分组,获得T3。

(3)全局时间的表示与修正
    PTP主和PTP从设备的全局时间计数器time_cnt均在PTP-UDA内部维护,长度为48比特。每隔8ns加1,因此计数器计数的时长超过200天,这对于TSN交换原型系统来说已经足够。
    TSN交换系统复位时,time_cnt置为全0,并随时钟*增加。从设备在第一次接收到sync同步帧时,将自己的time_cnt设置为T1,后续同步过程使用offset修正自己的time_cnt计数器。此外,在每个时钟同步周期内,每个TSN设备的time_cnt要与外围时钟域的时间进行一次同步。
三、进一步讨论
(1)端系统PTP处理的实现
    在TSN网络中,时间主设备可以是TSN交换机,也可以是具有高精度时间的终端设备。由于FAST架构的核心就是基于软硬件协同的方式进行分组处理,FPGA OS内部已经嵌入DMA通道,实现与CPU软件进行通信,因此基于FAST扩展流水线的PTP协议处理可方便的在网卡上实现,而且不需要任何软件参与。
(2)PTP同步频率
    由于所有的PTP同步逻辑由FPGA硬件实现,不会给软件增加开销,因此在规模有限的TSN网络中,可以增加同步的频度。根据上述分析,当两个节点的晶振精度都为20ppm时,每秒时间偏差可达40us。若将同步间隔缩小到1ms,则同步误差可缩小到40us左右,可以满足绝大多数TSN场景的需求。