基于ZYNQ 的PTP 授时精度测量方法与实现*
2021-06-30应斌杰杨成钢郝自飞毛立振
宋 艳 ,应斌杰 ,杨成钢 ,郝自飞 ,毛立振
(1.国网浙江省电力有限公司 丽水供电公司,浙江 丽水 316021;2.杭州量泓科技有限公司,浙江 杭州 310019)
0 引言
精确时间协议(Precision Time Protocol,PTP)是一种高精度网络时间同步协议[1-2],具体内容由IEEE 1588协议定义。IEEE1588 协议目前有V1 和V2 两个版本。其支持多种形式的传输,比如UDP/IPv4、UDP/IPv6 以及IEEE 802.3 等。PTP 与网络授时协议(Network Timing Protocol,NTP)的主要区别是,PTP 是在物理层实现而NTP 是在应用层实现。因此,PTP 比NTP 具有更高的同步精度。PTP 可以达到亚微秒级授时精度,在网络的节点(交换机)支持PTP 协议的情况下,能够实现纳秒量级的授时精度[3-4]。
PTP 授时具有成本低、精度高、网络开销小等优点,因此在通信、电力、轨道交通等领域得到了较为广泛的应用[5-8]。但也正因为其授时精度高,使得对PTP 授时设备授时精度的测量就显得更为困难。PTP 授时精度从理论上来说主要受两方面的影响,一方面是打时间戳的位置,另外是软件同步的算法。打时间戳目前可以在物理层、数据链路层和应用层上进行,对应的授时精度会依次降低[9-10]。目前主流的PTP 授时设备均是基于Linux系统的,而Linux 系统为非实时操作系统,中断响应时间在微秒级以上,其无法获得精确的时间戳,即便是使用了其他算法,测量精度也在100 μs 以上[11],无法对PTP 测量[12-14]。相对Linux 系统而言,μCOS 为实时操作系统,能够获得更准确的时间,可以用μCOS 系统加LWIP协议栈来实现PTP 精度测量。
1 PTP 授时基本原理
PTP 授时有一步和两步两种模式。不管是一步还是两步模式,都包含三个关键的报文,分别是同步报文Sync,延迟请求报文Delay_req 和延迟请求响应报文Delay_resp。在两步模式下,多一个跟随报文Follow_up。图1 给出了PTP 授时的基本原理,主时钟周期性地播发Sync报文。在一步模式下,Sync 报文中除包含一个预估的时间戳tp,还包括一个校正时间tc,则准确的时间戳t1=tp-tc。从时钟接收到Sync 帧,即可获得时间戳t1;在两步模式下,当Sync 报文通过网口发送时,主时钟会通过位于底层的时标生成器获得Sync 离开主时钟的精确时刻t1,而后发送跟随报文,该跟随报文中包含了t1。从时钟从跟随报文中获取时间戳t1。两种模式对其他时间戳的获得方式是相同的。从时钟利用时标生成器可以精确测量Sync 报文到达从时钟的时刻t2,并向主时钟发送延迟请求报文,同时记录该报文离开从时钟的时刻t3。主时钟收到延迟请求报文后,记录其到达主时钟的时刻t4,并通过延迟请求响应报文反馈给从时钟。不管是主时钟还是从时钟,获取的时刻都是在接近物理层打戳的。因此,认为这种时刻是精确的。图1 中的圆圈表示同步报文的时标生成处。
图1 PTP 授时原理示意图
当报文交换完成时,从节点处理所有四个时间戳,用来计算从时钟相对于主时钟的偏移to和两节点间报文的传播时间td1和td2。
假定链路时延是对称的,即td1=td2=td,其中td为链路平均时延,则有:
从时钟得到偏移to后,将自己的本地时间减去to,就完成了一次与主时钟的同步。
2 PTP 授时精度测量方法
2.1 PTP 精度测量的基本方法
PTP 授时精度测量就是要测出主时钟相对于准确时间的偏差。文献[15]给出的方法是,将PTP 主时钟输出的PPS 信号与绝对UTC 的PPS 信号进行比对,进而得到主时钟授时精度。这种方法显然存在两个问题:一是绝对的UTC 时间无法获得,至少是极难获得;二是PTP主时钟输出的PPS 信号显然不能替代PTP 协议提供的时间。
因此,对测量设备而言,首先必须要拥有具有足够准确的时间,且根据测量需要,该时间可以在UTC 时、北京时、北斗时等时间系统之间选择。作为PTP 测量设备,其扮演了从设备的角色,只不过其不向主时钟同步时间。测量过程中,以测量设备时间为时间基准,获得主设备与测量设备之间的偏差,即为PTP 授时设备的授时误差。若认为测量设备的时间是准确的,则式(2)得到的时间偏差to,显然就是主时钟的授时精度。
由于t1和t4两个时间戳都来自于主时钟的报文,测量的问题就转化为如何获得t2和t3两个时间戳。典型的方法是利用支持IEEE1588 协议的以太网物理层收发器专用芯片,比如DP 83640 来获得时间戳。该芯片使用25 MHz 的外部时钟,在芯片内经频率综合后产生最高位125 MHz 的PTP 时钟。在使用125 MHz 的PTP 时钟时,计数器的增量值为8 ns,也就是使用该芯片最高可以获得8 ns 的分辨率。使用该芯片实现的最大特点是简单。但是也存在几个问题。一是测量的准确度与PTP 时钟的准确度和稳定度密切相关,而该时钟是由外部时钟经频率综合后产生的,该时钟的漂移和抖动都是不可控的;二是该芯片的时间戳需要通过1PPS 信号进行同步。显然,1PPS 的误差会传到给时间戳。在工程实践上,也有人使用FPGA 来对同步报文进行硬件标记,这种做法需要额外的硬件逻辑设计,增加了系统的硬件开销和开发难度[16]。
Xilinx 公司的ZYNQ 系列SOC 芯片的以太网驱动器提供了硬件PTP 时间戳记录功能(ZYNQ 7010 不具备)。使用该芯片可以以更灵活更简单的形式,实现PTP 主时钟精度测量。ZYNQ 集成了FPGA 和ARM 处理器,使用射频芯片和必要的外围芯片(DDR、Flash 等)加上ZYNQ就可以实现卫星导航系统(Global Navigation Satellite System,GNSS)信号的接收和解算,从而获得参考时间,而无需外部输入1PPS 信号。只要相关算法设计得当,在接收GPS/BDS 信号时,获得的时间与绝对UTC 的偏差可以小于10 ns。在很多情况下,这个时间就可以作为测量PTP 授时精度的时间基准了。
贤庄村片区水力主要是确定水泵型号后,管道输水能力的复核。选定水泵设计流量为192 m3/h。流量调整后管线的水头损失为14.2 m,管道地形沿程为55 m,考虑出水口剩余水头为2.0 m,确定调整流量后输水系统输水损失为71.2 m,小于水泵额定扬程73 m。
2.2 ZYNQ EMAC 时间戳获取
PTP 授时利用在物理层打时间戳实现时间传递。其时间戳包括6 字节的秒计数和4 字节的纳秒计数。其中秒计数的起点是1970-1-1 00:00:00。ZYNQ 的纳秒计数满1 s,秒计数器进位,纳秒计数器清零。为了方便起见,下文中用纳秒计数器代替这两个计数器。纳秒计数器是在PTP 时钟驱动下计数的,比如,PTP 时钟是125 MHz,则一个时钟周期为8 ns,故增量计数器为8 ns。若PTP 时钟周期不是整数纳秒,比如时钟为120 MHz,则时钟周期为8.33 ns。由于增量计数器无法设置小数,因此只能采用折中的办法,将两个8 ns 和一个9 ns,也就是三个时钟周期平均为8.33 ns。设置好增量计数器后,纳秒计数器就能与时钟周期对应起来了。
ZYNQ 接收到来自主时钟的Sync 数据包后,ZYNQ在物理层打上时间戳,并产生接收中断,应用层任务可以读取该时间戳T2。需要注意的是,考虑到响应和处理时间,无需对所有的Sync 帧都响应。接收到Sync 帧后,ZYNQ 向主时钟发送Dly_req 请求帧,该帧离开ZYNQ 网络控制时,ZYNQ 再次产生中断,并打上时间戳T3。收发中断产生后,应用层软件可以从容读取这两个时间戳。
2.3 时间初始值同步
虽然ZYNQ 可以记录并读取T2和T3两个值,但是需要注意的是,纳秒计数器反映的仅仅是时钟数与增量计数器的乘积。其含义是假定PTP 系统时钟绝对准确的情况下,从初始值时刻至测量时刻为止流逝的时间。显然,要想使时间戳尽可能与真实时间一致,必须要解决两个问题,一是计数器初始值如何与真实时间保持同步,二是如何消除频差带来的影响。
由于ZYNQ 的纳秒计数器没有提供硬件同步机制,只能通过寄存器写入的方式赋初值。一般情况下,在系统时间的整数秒将系统时间写入秒寄存器并将纳秒寄存器清零。如果写入过程中没有时延或者开销,显然很容易就能实现纳秒计数器与系统时间的同步。然而,向寄存器写入初值需要的时间波动高达微秒级,而且分布随机。因此,在整秒时刻向寄存器写初值,仅能实现纳秒寄存器的粗同步。如图2 所示,假定在整数秒时刻写入,那么秒计数器写入的是当前秒的值,纳秒计数器写入值应该为0。由于延时的存在,数值写入寄存器的真正时刻是tw,而不是0,显然纳秒计数器的值比真实时刻滞后了tw。由于tw在阴影区域内随机变化,因此无法通过提前补偿的方式消除写入时延带来的误差。tw虽然无法通过提前补偿,但可以通过事后补偿的机制来处理。如图2 所示,当ZYNQ 完成向寄存器写入初值后,可以通过硬件方式立刻拍得写入完成后的时刻tr。一般情况下,这个tr与tw之间只存在一个较为固定且很小的差值Δt,即tw=tr-Δt。将tw写入ZYNQ 的补偿寄存器,使用这种方式补偿,就实现了纳秒计数器初值与系统时间的同步。
图2 纳秒寄存器初始值同步示意图
2.4 频差补偿
虽然通过后补偿的方式能够解决初始值同步的问题,但是由于系统时钟的不准确性,随着时间的推移,误差会积累,这个误差会对测量结果带来很大影响。如图3 所示,由于参考频率不准确,使得PTP 纳秒计数器和秒计数记录的时间都并非真正的时间。假如使用标称值为10 MHz,准确度为1×10-13的高挡时钟源,则1 s 由频率偏差引入的误差To可达100 ns。因此,这个误差必须要进行消除才行。
图3 时钟源对测量结果的影响
通过接收卫星导航系统信号,可以测量出时钟源差σs:
这样就得到了真实的时间。因此,T2和T3对应的真实时刻t2、t3分别如式(7)、(8)所示。
t1、t4从来自PTP 主时钟的数据包中获取。利用式(2)就可以测量出待测PTP 主时钟的授时精度了。需要注意的是,由于频率源的不稳定性,每秒钟的偏差值To实际上是不一致的,在实际测试中,需要每秒都进行相应处理。
3 PTP 授时精度测量的实现
3.1 硬件架构
图4 给出了利用ZYNQ 进行PTP 测量的硬件组成方案。由图可见,该测量方案的硬件组成非常简单。以ZYNQ SoC 为核心,外围除了Flash、DDR 等保证系统正常运行的硬件外,主要就是频率综合器和射频通道ADC。除此之外,信号及信息的处理都在ZYNQ 中以软件的形式完成。
图4 PTP 测量框图
3.2 软件流程
PTP 测量的软件流程如图5 所示。由图可见,首先需要完成导航信号的捕获、跟踪、解算,这一个过程实质上就是传统的导航接收机信号处理及解算过程。与之不同的是,当解算完成,得出本地位置后,要进一步进行钟差和频差的计算,为准确的源差测量提供保证。当获得了准确的系统时间和频差后,就能以此进行PTP 授时精度测量了。测量的基本流程如图6 所示(以两步模式为例)。
图5 软件处理基本流程
图6 PTP 精度测量流程图
3.3 实测结果
利用本方案实现的PTP 精度测量设备,对西安同步SYN2407 主时钟授时精度进行了超过30 min 的测量,测量数据如图7 所示。测试结果表明,即使不考虑PTP 主时钟精度对测量结果的影响,该方案也能获得优于10 ns的测量精度(图7 中的标准差即为测量精度)。经第三方权威机构检测,本方案对PTP 授时设备的测量精度可达10 ns 以下(1σ)。
图7 PTP 精度测量实测数据
4 结论
随着信息设备对时间精度需求越来越高,可以预见PTP 网络授时将会应用到更多场合,对PTP 授时设备的授时精度也将提出更高的要求。一文中提出的方法能够以一种比较简单的方案实现PTP 授时精度测量,能够满足对高精度PTP 主时钟授时精度测量的需求。