一种IEEE 1588硬件的设计和实现
网址:http://www.dzsc.com/data/html/2011-7-16/91036.html
以太网技术由于其开放性好、价格低廉和使用方便等特点,已经广泛应用于电信级别的网络中,以太网的数据传输速度也从早期的10M提高到100M,GE,10GE.40GE,100GE正式产品也将于2009年推出。
以太网技术是"即插即用"的,也就是将以太网终端接到IP网络上就可以随时使用其提供的业务。但是,只有"同步的"的IP网络才是一个真正的电信级网络,才能够为IP网络传送各种实时业务与数据业务的多重播放业务提供保障。目前,电信级网络对时间同步要求十分严格,对于一个全国范围的IP网络来说,骨干网络时延一般要求控制在50ms之内,现行的互联网网络时间协议NTP(Network Time Protocol),简单网络时间协议SNTP(Simple Network Time Protocol)等不能达到所要求的同步精度或收敛速度。基于以太网的时分复用通道仿真技术(TDM over Ethernet)作为一种过渡技术,具有一定的以太网时钟同步概念,可以部分解决现有终端设备用于以太网的无缝连接问题。IEEE 1588标准则特别适合于以太网,可以在一个地域分散的IP网络中实现微秒级高精度的时钟同步。
1 IEEE 1588实现原理
IEEE1588的全称是"网络测量和控制系统的精密时钟同步协议标准",IEEE1588标准的草案基础来自惠普公司的1990至1998年的有关成果,换句语说,安捷伦科技对IEEE1588标准作出重要贡献。安捷伦实验室的资深研究员John Eidson被网络业界视为专家,他的"IEEE1588在测试和测量系统的应用",以及"IEEE1588:在测控和通信的应用"两篇论文对IEEE1588协议有精辟和全面的介绍。IEEE1588协议是通用的提升网络系统定时同步能力的规范,在起草过程中主要参考以太网来编制,使分布式通信网络能够具有严格的定时同步,并且应用于工业自动化系统。网络时间协议的工作原理说明如下:
(1)现场设备A发送一个PTP包给现场设备B,并记录下数据包离开A的时间,该时间戳为t1.
(2)当此PTP包到达现场设备B时,现场设备B加上自己接收到该数据包的时间戳,该时间戳为TS1.
(3)现场设备A发送一个Follow Up消息给现场设备B,通知B时间t1.
(4)当此PTP包离开现场设备B时,并记录下数据包离开B的时间t2.
(5)当现场设备A接收到该响应包时,加上一个新的时间戳,该时间戳为Tm2,整个同步过程如图1所示。
(6)现场设备A再发送Follow Up消息给现场设备B,通知B时间Tm2.
至此,现场设备B己拥有足够的信息来计算2个重要的参数:一是PTP数据包来回一个周期的时延,二是现场设备A和现场设备B的时钟差。于是现场设备B能够设定自己的时钟与现场设备A同步。
可以根据下面公式算出现场设备A与现场设备B之间的时间差和延时:
2 系统硬件电路设计
2.1 支持PTP协议嵌入式接口板设计
根据PTP协议框架,支持PTP协议的嵌入式接口板硬件框图如图2所示。
DP83640高精度PHYTER收发器芯片内置高精度IEEE 1588时钟,并设有由硬件执行的时间标记功能,可为接收及发送的信息包印上时间标记。DP83640最大的特色在于将IEEE 1588高精度时间协议(PTP)功能设于芯片的物理层之内,因此可以在最靠近网线的位置记录时间标记,而且分辨度达8 ns,不但可为系统提供最准确的高精度控制功能,也确保采集回来的数据出现最少的抖动。
DP83640预载4个时钟更新算法,用户可以利用任何一个算法调节电路板上的PTP时钟,而且偏差率保证不超过10亿分之一(即1ppb[8]的准确度)。
DP83640也可与部分符合IEEE 1588规定的处理器搭配一起使用,为测试及测量仪表等设备提供更准确的时钟同步功能。其系统连接后时钟关系图如图3所示。
2.2 具体电路设计
系统实际设计电路主要包含如下部分:核心处理器ARM9200;存储电路,其中包含了SDRAM和ROM两部分的电路设计;网络接口电路,其中使用DP83640通过RMII接口总线与ARM9处理器相连,把PTP报文的时间戳信息和当前时钟读数发送给ARM9处理器,同时接收来自ARM9处理器的时钟调整值来调整本地时钟。DP83640通过RMII总线来获取以太网报文比特流而不是直接从物理层获取,从而实现10 Mb/s和100 Mb/s两种速率的自适应处理。
3 系统软件设计
系统软件结构如图4所示。
3.1 PTP协议状态机模块
PTP协议状态机主要负责管理设备上电时的初始化状态、出现异常情况下的故障状态、通常情况下的侦听状态、主时钟状态、从时钟状态和未校准状态,以及各状态之间的转化。
3.2 最佳主时钟选择模块
最佳主时钟算法模块主要用于选择本地网络中的最佳时钟作为主时钟,同时决定本地时钟应处的状态。
实现最佳主时钟的方法包括两个步骤:(1)从本地时钟系统通信端口中选出一个质量最好的同步报文;(2)根据上述结果,比较此时的主时钟和本地时钟属性,决定本地设备PTP协议引擎所处的状态。步骤(1)采用数据集比较算法模块来实现,步骤(2)采用状态决断算法模块来实现。该模块定义了STATE_DECISION_ALGORITHM()函数来进行状态的决断和数据集的更新。在缺省数据集的层数是1或2的前提下,调用DATASET_COMPARISON_ALGORITHM模块来判定本地时钟缺省数据集D0和较好时钟Erbest的数据集哪个更好。
通过比较,如果是缺省数据集D0更好,则根据状态决断代码M1,调用函数CreateMasterClock()根据缺省数据集D0的属性值来构建主时钟,并且将D0状态更改为PTP_MASTER,这代表D0是目前最好的主时钟;否则,调用函数CreateSlaveClock(),根据Erbest的属性来构建从时钟,Erbest的状态则是PTP_SLAVE.
在主时钟的层数大于2的情况下,调用DATASET_COMPARISON_ALGORITHM模块,以对本地时钟缺省数据集D0和最好时钟Ebest进行判定。通过比较,如果是缺省数据集D0更好,则调用CreateMasterClock(),根据状态决断代码M2,根据缺省数据集D0的属性值来构建主时钟,并且更改D0状态为PTP_MASTER;否则,将调用DATASET_COMPARISON_ALGORITHM模块将Ebest与Erbest进行比较,如果比较结果相同,根据状态决断代码S1,根据Ebest的属性来构建从时钟,更改Ebest状态成PTP_SLAVE.如果经过比较Ebest有更好的属性值,则根据状态决断代码M3,根据Erbest的属性来构建从时钟,并设置它的状态为PTP_SLAVE;否则,根据状态决断代码P2,根据Ebest的属性来构建主时钟,改变它的状态为PTP_MASTER.
最佳主时钟选择模块示意图如图5所示。
3.3 时钟调整模块
本地时钟同步算法是PTP协议中十分关键的部分,主要用来调整本地时间,与主时钟的基准时间保持一致性。主时钟被选择出来后,就开始调用同步报文发送函数PTP_Send_PTP_SYNC_MESSAGE(),构造同步报文并对报文初始化,记录发送出去的时间戳,再调用udp_send()将报文打包并加入发送缓冲区进行发送。
调用跟随报文发送函数PTP_Send_PTP_FOLLOW_MESSAGE(),构造跟随报文并对报文初始化,记录发送出去的时间戳,然后调用udp_send()将报文打包并加入发送缓冲区进行发送。
从时钟udp_rcve()设置接收缓冲区分别先后接收了同步报文和跟随报文,记录下接收的时间打上时间戳,再调用函数PTP_RECV_PROCESS()判断接收的是哪种报文,如果是同步报文,则调用函数PTP_RECV_SYNC(),然后对报文解包,取出报文从主时钟发送过来的时间。如果是跟随报文,则调用函数PTP_RECV_FOLLOWUP()对报文解包,取出报文从主时钟发送过来的时间。
在这个函数最后,调用了PTP_Send_Delay_Req()函数,它构造延迟请求报文并对报文初始化,记录发送出去的时间戳,然后调用udp_send()将报文打包并加入发送缓冲区进行发送;而主时钟的缓冲区一旦有报文,则主时钟立即调用udp_rcve()记录下接收的时间打上时间戳,再调用函数PTP_RECV_PROCESS()判断接收的是哪种报文,如果是延迟请求报文,则函数PTP_RECV_DELAY_REQ()立即调用PTP_Send_PTP_REQ_RESP(),从时钟根据收到的4个报文收发时间,计算出主从偏差,对自己的时间进行校正。
整个程序流程如图6所示。
4 系统测试结果与结论
系统测试将两片DP83640连接到1 Hz信号输出,利用DP83640捕获上升沿时间戳实现,在Linux系统中,利用MII总线读取DP83640时间戳寄存器,数据结果如表1所示。
实验结果,表明利用DP83640达到了10 ns级别的同步精度,完成了系统的设计目标。
IEEE 1588提供的时间同步在理想条件下(网络完全对称),能够达到极高的同步精度,为通信系统同步建设提供了更完美的解决方案。