徐卓汀,商艳娟,王成群
(浙江理工大学 信息学院,杭州 310018)
随着分布式网络应用范围及应用规模的不断增大,同步系统内各分散节点时钟的一致性变得越来越重要,精确的时间同步技术在分布式系统中占据着越来越重要的地位[1]。目前,时钟同步的主要方法包括IRIG-B(Inter Range Instrumentation Group-B)码时钟同步、网络时间协议(NTP)、简单网络时钟同步(SNTP)和全球定位系统(GPS)等[2]。传统的NTP 只能提供毫秒级的时间精度,不能满足现代工业以太网的高精度时钟需求。SNTP 协议是NTP的简化版本,采用了简化的同步算法,提高了性能,但只能满足对时间精度要求不高的系统。GPS 可以提供微秒级的时间精度,但其需要GPS 接收机这样的特殊设备,不仅成本比较高,而且不易实现[3]。IEEE 1588 精密时间协议的出现一定程度上弥补了一些时钟同步方式的不足[4]。IEEE 1588 协议基于以太网,不需要建立新的时钟网络,主从时钟通过交换时钟信息来进行同步[5]。通过软件实现的IEEE 1588 协议可以提供微秒级别的时间精度[6];通过硬件实现的IEEE 1588 协议可以提供纳秒级别的时间精度[7]。同时,硬件实现的IEEE 1588 协议对资源要求低,不仅可以通过支持IEEE 1588 协议的专用芯片实现,也可以在FPGA 芯片上实现,实现成本低,适用于各种分布式系统[8]。
本文在详细分析IEEE 1588 协议基本内容的基础上,通过软硬件结合的方式,在FPGA 芯片上实现IEEE 1588 报文的检测和时间戳的捕获。实验验证结果表明该系统能够正常工作,能满足现代工业以太网的高精度时钟同步需求。
IEEE 1588 精确时间协议在同步过程中,主时钟和从时钟之间相互交换带有精确时间戳和预估时间戳的报文[9]。各个从时钟得到这些时间戳信息后,计算与主时钟的链路传输延迟和时钟偏差,进而调整从时钟,达到与主时钟同步的目的。IEEE 1588协议的主从同步过程如图1 所示[10]。
图1 IEEE 1588 协议的主从同步过程Fig.1 Master and slave synchronization process of IEEE 1588
IEEE 1588 协议的同步原理是延时响应机制,通过PTP(Precision Time Protocol)报文承载时间戳来完成,PTP 报文分为4 种:Sync 同步报文、Follow_up 跟随报文、Delay_req 延迟请求报文、Delay_resp延迟请求报文、Delay_resp 延迟请求响应报文[11]。
一次时钟同步过程:
(1)Sync 报文周期性从主时钟向从时钟以广播的形式发出,主时钟在发送结束那一刻记录Sync 报文离开主时钟的精确发送时间TM1;
(2)主时钟将精确时间戳TM1封装进Follow_up报文中,发送给从时钟;
(3)从时钟记录Sync 报文到达从时钟的精确时间点Ts2;
(4)从时钟发送Delay_req 报文,并在发送结束那一刻记录下精确发送时间TS3;
(5)主时钟记录Delay_req 报文到达主时钟的精确到达时间TM4;
(6)主时钟发送携带精确时间戳信息TM4的Delay_resp 报文到从时钟。
经过一次时钟同步后,从时钟寄存4 个精确时间戳信息。利用4 个时间戳可以计算链路延时和时钟偏移。
设报文由主时钟到从时钟的链路延迟,式(1):
此时主时钟与从时钟之间存在的时间偏差offset1,式(2):
报文由从时钟到主时钟的链路延迟,式(3):
此时从时钟与主时钟之间存在的时间偏差offset2,式(4):
因为IEEE 1588 协议假设链路延迟是对称的,式(5):
那么平均链路延迟mean_delay,式(6):
此时主从时钟偏差offset,式(7):
进一步计算得到offset,式(8):
对从时钟进行补偿来达到同步于主时钟的目的。
IEEE 1588 协议的报文在交换消息过程中包含着各时钟的信息,所以时钟信息的提取对于提高同步精度有着十分重要的作用。时间的标记位置有3种方案,如图2 所示。
图2 时间戳位置标记Fig.2 Time stamp position marking
方案A:在应用层进行时间戳的标记,虽然实现方法简单,但由于协议栈的抖动和延迟是不确定的,会导致较大误差,使用软件实现的精度只能达到毫秒级。
方案B:在介质访问控制层(MAC),避免了协议栈的抖动和延迟,提高时间戳的标记精度,能够使用软件实现,时间精度达到微秒级[12]。
方案C:在MAC 层和物理层(PHY)之间的简化媒体独立接口(RMII)处标记时间戳,通过软硬结合的方法实现。目前有两种方法,一种是使用支持IEEE 1588 协议的专用PHY 硬件芯片,如DP83640,可以在物理层检测IEEE 1588 报文,并将时间戳信息填充到IEEE 1588 报文中;第二种方法是在对原有硬件不做改变的情况下,在FPGA 芯片中识别IEEE 1588 报文以及捕获时间戳[13]。
时间戳的标记越接近于实际网络,抖动和延迟就越小,计算出的时钟偏差和链路延迟更接近于真实值,所以在本文的设计中,采用了方案C,因为方案C 的第二种方法不需要专用的PHY 芯片,而且FPGA 处理速度足够快,实现方法更简单。
系统硬件采用Altera Cyclone IV 系列中的EP4CE6E22C8 FPGA 芯片以及RTL8201CP 接口PHY 芯片,分别作为系统的主控模块以及网络通信模块。
RTL8201CP PHY 芯片采用RMII 模式下的以太网连接方式,是简化的媒体独立接口,减少了以太网通信所需的引脚数,将引脚数从16 个减少为7 个,有着更简单的连接结构。
Altera Cyclone IV 系列FPGA 芯片作为主控模块,自身能够在物理层和PHY 之间的RMII 接口处进行时间标记,相对于其他如STM32F407 系列CPU芯片只能在MAC 数据链路层标记,有着更高的时间戳精度。主控模块主要实现接受发送PTP 报文,以及时钟同步等功能。
本文系统的软件结构主要分为协议层、应用层。协议层完成报文的解析以及封装过程,应用层完成实时时钟以及精确时钟同步功能。其系统结构图如图3 所示。
图3 系统结构图Fig.3 System structure diagram
协议层分为UDP/IP 协议、EtherCAT 协议以及PTP 协议,EtherCAT 协议有两种实现方式:一种是利用标准IEEE802.3 以太网帧实现,一种是放入UDP/IP 协议中实现,本文采用第二种实现方式。系统的主时钟将PTP 报文封装在EtherCAT 中,再将EtherCAT 报文封装在UDP 报文中,最后通过网络传输到从时钟。从时钟接收到报文后,解析报文,进行时间戳的寄存和提取。
(3)政府应增加研发投入提高大豆单产水平,支持大豆产业发展。目前的补贴政策多与种植面积挂钩,对单产的刺激作用很小,而且政策的经济效率低。而当前大豆产业发展面临的重要瓶颈是单产水平过低,从而导致种植大豆的比较收益不高。
时钟同步系统上电后,通过PC 机,以UDP 协议的形式发送指令报文,初始化各主从时钟的计数器,并设定与PC 机通信的为主时钟,与主时钟通过网线相连的为从时钟。初始化各主从时钟后,PC 机周期性发送Sync 报文,进入时钟同步阶段。
如果本地时钟为主时钟状态,其主时钟流程图如图4 所示。主时钟接受来自PC 机的报文,识别并转发Sync 报文,对RMII 接口的TX_EN 信号进行锁存,当TX_EN 信号由高电平变为低电平时,寄存这个周期的时钟计数器,接着发送Follow_up 报文,Follow_up 报文的64 位精确时间戳为上一个寄存的时钟计数器的时间,发送结束后,等待接收下一条报文。接收到报文时,RMII 接口的RX_EN 信号由低变高,寄存该周期的时钟计数器,识别接受的报文,如果识别为其他报文,丢弃该时间戳,并回到等待接受Delay_req 报文状态,若为Delay_req 报文,保留该时间戳,并读取来自从时钟的端口号,接着构造Delay_resp 报文,Delay_resp 报文的64 位精确时间戳即为上一次寄存的时钟计数器。主时钟进入等待接受PC 机报文状态。
图4 主时钟流程图Fig.4 Master clock state machine process
如果本地时钟为从时钟,从时钟流程图如图5所示。时钟计数器初始化后,接受到报文时,RMII接口的RX_EN 信号由低变高,寄存器寄存该周期的时钟计数器的值,识别该报文是否是Sync 报文,若不是,则丢弃寄存的时间戳,并返回等待报文接受状态;如果是,继续接受并解析Follow_up 报文,读取报文中的时间戳,并开始构造Delay_req 报文。当发送Delay_req 报文结束时,即RMII 接口处的TX_EN 信号由高变低,寄存该时刻的时钟计数器的值,并与接受Follow_up 报文同样的过程接受Delay_resp 报文,并读取报文中的精确时间戳。从时钟得到来自物理层和PHY 之间的RMII 接口处的4 个精确时间戳,进入链路延迟以及时钟偏差计算阶段,并对从时钟进行补偿,得到同步的从时钟进入下一次时钟补偿阶段。
图5 从时钟流程图Fig.5 Slave clock state machine process
本地时钟补偿采用动态的频率补偿算法来实现,其频率补偿过程如图6 所示。
图6 频率补偿过程Fig.6 Frequency compensation process
在时钟同步过程中,当系统进行第一次时钟同步过程中时,主站记录下第一次发送Sync 同步报文的时间戳T1M1,从站记录下第一次收到同步报文的时间戳T1S2。同理,当系统进行第二次时钟同步时,记录下时间戳T2M1和T2S2。则主站的发送时间间隔MCC,式(9):
同理,从站接收到的时间间隔SCC,式(10):
主从站的时间偏差MSC,式(11):
主从之间的时间比率,式(12):
在每次时钟同步过程中,从时钟持续补偿计算出的时钟偏移量;在补偿过程中,判断偏移量的最高位是否为1,若是表示从时钟快于主时钟,偏移量的值应取反加1,补偿进从时钟中,反之,直接补偿从时钟;对于时间频率的补偿,从系统的第二次时钟同步阶段开始,判断MSC的值,若最高位为1,说明主时钟频率高于从时钟频率,则从时钟的纳秒(ns)计数器每增加γ值时减1,反之,主时钟频率低于从时钟频率,纳秒(ns)计数器每增加γ值时加1。
为了验证IEEE 1588 时钟同步系统的可行性,将IEEE 1588 协议以及本地时钟补偿算法应用于基于FPGA 的EtherCAT 协议栈中,采用低延时、高带宽、确定性的现场总线结构,该协议栈具有区分IEEE 1588 报文和普通报文的功能,主站能解析来自PC 机的报文,并将报文内容转发至从站,从站能够解析各报文命令,执行时间戳提取、初始化操作、时钟同步以及同步输出等功能。
本系统以主站的本地晶振作为授时源,通过主从站直连的方式进行时钟同步性能测试,设置的同步时间间隔为1 s,时钟同步过程分为两步:
(1)系统启动,发送初始化指令报文进行各主从站计数器清零操作;
(2)周期性发送Sync 报文,进行时钟同步。
系统初始化后周期性发送Sync 同步报文进行时钟同步,其中主从站某一次输出1 s 脉冲图如图7所示,横坐标每一格线代表20 ns,该波形表示主从站的同步输出偏差为0 ns。
图7 主从站某一次输出1 s 脉冲Fig.7 Primary and secondary station output 1 s pulse diagram at one time
200 次主从同步,其时间偏差结果如图8 所示。
图8 时间偏差结果Fig.8 Time deviation result
其中时间偏差为一个绝对值量。由图8 可知,主从时钟最大时钟偏差为80 ns,时钟偏差基本分布在±80 ns 之间,能够满足现代工业以太网对时间精度的需求。
系统初始化,进行200 次同步测试,其主从同步结果如图9 所示。
图9 主从同步结果Fig.9 Master slave synchronization result
其中,ID1 时钟表示从站1 与主站的时钟偏差,ID2 表示从站2 与主站的时钟偏差。ID1-ID2 时钟差值(LCK)为ID1 时钟与ID2 时钟的差值,ID1-ID2时钟差值(ns)为ID1-ID2 时钟差值(LCK)乘20 ns所得。
主站与从站1 的时钟偏差图和主站与从站2 的时钟偏差图如图10 和图11 所示。经过200 次测试,从站1 与主时钟的最大时钟偏差为100 ns,时钟偏差基本分布在±100 ns;从站2 与主时钟的最大偏差为100 ns,时钟偏差基本分布在±100 ns。相对一主一从的同步测试,由于其加大了链路延时的不对称性以及从站内部的处理延时,增大了时钟偏差,导致同步精度下降。
图10 主站与从站1 的时钟偏差Fig.10 Clock deviation between master station and slave station 1
图11 主站与从站2 的时钟偏差Fig.11 Clock deviation between master station and slave station 2
本文详细分析了IEEE 1588 协议,并将IEEE 1588 协议以及本地时钟补偿算法应用于分布式时钟同步系统中,在一主一从的分布式时钟同步基础上,拓展到了一主两从的分布式时钟同步系统。实验证明该方案的同步精度能够达到ns 级别,同步的时钟设备越少,时钟偏差越小。同步一个时钟设备和两个时钟设备,主从时钟偏差基本分布在±100 ns之间,能够满足现代工业以太网对高精确时钟的需求,简化了硬件电路设计,不需要专用的PHY 芯片,时钟戳提取和报文识别都在FPGA 芯片内部完成,降低开发难度和成本。