简介
IEEE 1588标准诞生于2002年,主要定义网络分布式时钟的同步协议。测试与测量、电信和多媒体流处理等许多不同应用,都开始首选这种时钟同步方法。这种标准化时钟同步法成本效益高,支持异构系统,并可提供纳秒级同步精度。
本文介绍原版IEEE 1588-2002标准以及更新版本IEEE 1588-2008中的改进内容。由于IEEE 1588在一些目标应用中越来越重要,因此ADSP-BF5181Blackfin®嵌入式处理器中也集成专用硬件来支持IEEE 1588。本文将概要介绍其功能,并通过一个示例来展示利用ADSP-BF518处理器解决方案获得的时钟同步性能结果。
现在几点了?
大多数系统都需要利用本振来维护自己的时间概念。图1显示硬件和软件如何组合,在系统内产生时间信息。
图1. 本地计时
系统内的硬件和软件资源均可使用此时间信息。对于硬件,振荡器时钟会产生一个或多个物理时钟信号(时钟输出),并可利用这些时钟信号驱动或触发系统的其它部分。软件中维护的时间通常称为“系统时间”。系统时间可以用时钟脉冲数或秒/纳秒的形式表示。系统软件利用振荡器时钟脉冲数及其频率信息得出时间,并提供“应用程序编程接口”(API)函数,软件的其它部分可以使用这些函数检索并设置时间。如果需要绝对时间,则所提供的时间将与预定义时间点,即基准时间点相关联。
时钟同步
许多应用要求两台独立的设备以同步方式工作。如果每台设备仅依靠自己的振荡器,则各振荡器的特性与工作条件差异将会限制时钟同步工作的能力。一些简单可行的解决方案可以克服这些限制,包括:
所有设备共用一个物理振荡器。这种方法仅对距离很近的分布式系统可行;高频时钟信号无法实现长距离可靠传输。 所有设备均使用特性几乎完全相同的振荡器。由于很难获得几乎完全一样的振荡器,并确保性能不随时间飘移,因此这种方法不可行。更重要的是,各振荡器的工作条件并不相同。 如果所有设备均通过一个通信网络(例如以太网)互连,则这些设备可以通过网络交换时间消息,根据单个“主”时钟动态调整各自的时钟。利用传统的时间同步协议——“网络时间协议”(NTP),系统中的每台设备根据它从NTP时间服务器获取的时间信息调整其时钟。然而,该协议只能实现毫秒级同步精度。 IEEE 1588定义了一个新协议,能够实现纳秒级同步精度。下面讨论该标准如何实现这种水平的时钟同步。
IEEE 1588有何作用
IEEE 1588标准定义了一种时间同步协议,适用于地理位置分散但通过某种通信技术(例如以太网)互连的设备。设备之间通过交换时序消息,从而保持相同的绝对系统时间(用秒和纳秒表示)。
要实现此目标,一个直观的方法是将一台具有“最佳”(最精确)时钟的设备指定为“主时钟”设备,让它向其它设备广播其时间。其它设备将会调整各自的时间,与主时钟所发送的时间保持一致。不过,这种解决方案也有几点不足:
主时钟设备无法以极短的间隔广播时间,因此“从”时钟设备必须使用自己独立的“低劣”振荡器,在主时钟设备的两次广播之间插入时间点。这将导致主时钟更新周期之间的同步精度下降。 广播路径难免存在延迟,延迟幅度取决于通信技术,例如物理信号沿导线从一台设备传输至另一台设备所需的时间。这种延迟会进一步扩大主时钟与各从时钟之间的失调。 主时钟设备与各从时钟设备之间的广播路径存在差异,这会进一步降低各从时钟设备之间的同步精度。 IEEE 1588要求通过测量路径延迟,解决第二个和第三个问题。它还要求待调整的从时钟与主时钟保持步调一致,从而减轻第一个问题。如果可能,使用更小的广播间隔和更高质量的振荡器,可以进一步减轻第一个问题。
IEEE 1588如何测量通信延迟
IEEE 1588-20022 定义了四种消息Sync、Followup、DelayReq和DelayResp,用来测量前向(主时钟至从时钟)和后向(从时钟至主时钟)路径的通信延迟。更新版本IEEE 1588-2008,3还提供其它机制,新增三种消息:PdelayReq、PdelayResp和 PdelayRespFollowup来测量“点对点延迟”。
这些消息中,Sync、DelayReq、PdelayReq和PdelayResp是所谓“事件”消息,在离开和到达一台设备时必须加上“时间戳”(记录本地时间)。给分组加上时间戳的方法有两种:
1. 消息由软件处理时出现软件时间戳。通常出现在消息的接收/发送“中断服务程序”(ISR)中,该时间戳为系统时间的当前值。
2. 消息实际到达或离开设备时出现硬件时间戳。该时间戳操作由硬件执行,硬件会维护自己的连续时间信息。
两种时间戳方法均为IEEE 1588所接受,但硬件时间戳的精度明显更高,如下文所述。
主时钟设备到从时钟设备的延迟
消息Sync和Followup由主时钟设备发送,从时钟设备负责接收这些消息,并计算主时钟设备到从时钟设备的通信路径延迟。
图2中,在时间点Tm1,主时钟设备软件读取当前本地系统时间(Tm1,软件时间戳),将其插入Sync消息中,并送出该消息。该消息在稍后的时间点Tm1'离开主时钟设备,该时间点为硬件时间戳。该消息在时间点Ts1'(从时钟设备本地时间)到达从时钟硬件,从时钟设备软件在稍后的时间点Ts1收到该消息。该软件将读取硬件时间戳以获得Ts1'。如果没有通信延迟,Ts1'应等于(Tm1' + Tms),其中Tms为主时钟与从时钟之间的时间差。该协议的最终目标是补偿此时间差。
图2. 测量主时钟设备与从时钟设备之间的通信延迟
发送Sync消息之后,主时钟设备软件通过时间戳单元读取Sync消息的离开时间Tm1',将其插入Followup消息中,然后在时间点Tm2发送该消息。从时钟设备软件在时间点Ts2收到此消息。此时,从时钟设备软件有两个时间:Ts1'(Sync到达时间)和Tm1'(Sync离开时间)。主从路径延迟Tmsd由公式1确定。
(1)
从时钟设备到主时钟设备的延迟
从时钟设备发送DelayReq消息,主时钟设备予以响应发送DelayResp消息。利用这些消息,从时钟设备可以计算从时钟设备到主时钟设备的通信路径延迟。
在时间点Ts3(图3),从时钟设备软件读取当前本地系统时间(Ts3),将其插入DelayReq消息中,并送出该消息。
图3. 测量从主通信延迟
DelayReq消息在稍后的时间点Tm3'到达主时钟设备,由主时钟设备软件在时间点Tm3处理。然后,该软件读取时间戳以获取到达时间Tm3',将其插入DelayResp消息中,并在时间点Tm4发送至从时钟设备。当从时钟设备软件在时间点Ts4收到DelayResp消息时,它可以提取时间Tm3',并通过公式2计算从主通信延迟Tsmd。
; (2)
公式1和公式2中均有一个未知变量,即主从时间差Tms,因此无法单独求得Tmsd或Tsmd。但是,如果我们合理地假设通信路径是对称的,即
(3)
——这是IEEE 1588成立的关键假设——那么,将公式1与公式2相加可以得出:
(4)
由于从时钟设备寻求与主时钟设备同步,因此所有这些计算均由这些设备执行。从时钟设备从主时钟设备的Followup消息获得Tm1',从其Rx(接收)时间戳获得Ts1',从其Tx(发送)时间戳获得Ts3',并通过主时钟设备的DelayResp消息获得Tm3'。
如何计算从时钟与主时钟的时间差
一旦获得通信路径延迟Td,便可利用公式1或公式2轻松计算从时钟与主时钟的时间差,如公式5和公式6所示。
(5) (6)
如何调整从时钟设备的时间
知道与主时钟的时间差之后,各从时钟需要调整自己的本地时间,与主时钟保持一致。该任务包括两方面。第一,从时钟设备需要加上时间差以调整绝对时间,使其时间在此刻与主时钟时间完全一致。第二,从时钟设备需要调整各自的时钟频率,与主时钟的频率保持一致。我们不能单靠绝对时间,因为时间差仅在一定期间内应用,可能是正值,也可能是负值;调整的结果是从时钟时间向前跳跃或向后倒退。因此,在实际操作中,调整分两步执行:
1. 如果时间差过大,例如1秒以上,则应用绝对时间调整。 2. 如果时间差较小,则使从时钟的频率改变某一百分比。
一般而言,该系统会变成一个控制环路,其中主时钟时间是参考命令,而从时钟时间是跟踪主时钟时间的输出,二者之差驱动可调整时钟。可以使用PID控制来实现特定跟踪性能,这是许多IEEE 1588实施方案常用的方法。图4显示了这种控制环路。
图4. IEEE 1588控制环路
点对点延迟
修订版IEEE 1588-2008引入了新的机制来测量路径延迟,称为“点对点”(P2P)延迟。与之相比,上文讨论的主从机制则是“端对端”(E2E)延迟。在支持IEEE 1588-2008的网络中,主时钟设备可以与从时钟设备直接相连,或者隔几个中继站(级)相连。E2E延迟实际上是主时钟设备到从时钟设备的“总”延迟,包括其间的所有中继站在内。但是,P2P延迟则仅限于两个直接相连的设备。通信路径的总延迟等于所有中继站的P2P延迟之和。从确保路径对称性的角度看,P2P机制可提供更高的精度。
如上文所述,IEEE 1588-2008新增了PdelayReq、PdelayResp和PdelayRespFollowup三种消息来测量P2P延迟。这些消息的工作方式与上文所述方式相似,详情请看参考文献3。
影响同步性能的因素
精心设计的IEEE 1588设备能够实现高度精确的时钟同步,但也必须了解直接影响同步性能的主要因素,其中包括:
1. 路径延迟:如上文所述,IEEE 1588的路径延迟测量假设通信路径延迟是对称的,即前向路径的传输延迟与后向传输延迟相同。此外,在延迟测量期间,延迟不应变化。测量期间延迟变化会导致不对称和延迟抖动,这将直接影响同步精度。虽然无法在IEEE 1588设备的边界之外控制延迟对称性和抖动,但如果测量基于硬件时间戳,则可在设备内改善路径对称性和抖动。由于中断延时、环境切换和线程调度,软件时间戳会导致明显的抖动,而硬件时间戳则不存在这一问题。 2. 时钟的漂移和抖动特性:主时钟的频率和相位代表跟踪控制系统的输入,从时钟则是控制对象。主时钟的任何时变行为都会扰动该控制系统,导致稳态和瞬态两种误差。因此,时钟的漂移和抖动越低,则同步精度越高。 3. 控制法则:从时钟调整如何校正从时钟设备的时间误差取决于控制方法。控制法则参数包括建立时间、过冲和稳态误差,都将直接影响时钟同步性能。 4. 时钟分辨率:如图1所示,本地时间的分辨率由时钟频率决定;最小时间增量为时钟信号的一个周期。IEEE 1588-2002支持1 ns的时间分辨率,IEEE 1588-2008则支持2–16 ns的时间分辨率。216 (!) GHz(甚至1 GHz)的时钟是不现实的。本地时钟的量化会影响本地时间测量和控制的精度。 5. Sync消息的发送周期:从时钟的更新频率最终会影响同步精度。因为时间误差是从时钟频率误差的整体累积值,所以发送周期越长,下一个Sync所观察到的时间误差一般会越大。 6. 延迟测量的频率:以预期相邻采样点之间延迟没有明显变化的间隔时间,定期执行延迟测量。如果IEEE 1588网络的延迟变化较大,则增加延迟测量频率可以改善时钟同步性能。
哪个是主时钟?
在考虑如何精确确定主时钟设备与从时钟设备之间的时间差之后,下一个相关问题是:在成百上千台互连设备中,如何确定哪一台设备充当主时钟。
EEE 1588定义了一种称为“最佳主时钟”(BMC)算法的方法,用于选择主时钟设备。这种方法要求IEEE 1588网络的每台设备均提供一个数据集,描述其本地时钟的性质、质量、稳定性、唯一识别符和首选设置。当一台设备加入IEEE 1588网络时,它会广播其时钟的数据集,并接收所有其它设备的数据集。利用所有参与设备的数据集,每台设备均运行同一BMC算法,以确定主时钟及其自己的未来状态(主时钟或从时钟)。由于所有设备均采用同样的数据独立执行同一算法,因此结论将会相同,设备之间不需要进行任何协商。有关BMC算法的更多详细信息,请看参考文献2和3。
ADSP-BF518处理器支持IEEE 1588
ADI公司Blackfin DSP系列最近新增一款产品:ADSP-BF518处理器。像前款产品ADSP-BF537,4一样,该处理器内置“以太网媒体访问控制器”(EMAC)模块。它还具有TSYNC模块,进一步扩展了支持IEEE 1588标准EMAC功能的能力;还提供其它额外特性,可支持以太网的各种IEEE 1588应用。图5显示了TSYNC模块的框图。 ADSP-BF51x Blackfin处理器硬件参考提供了更多信息。5
图5. ADSP-BF518处理器TSYNC模块的框图
分组检测
ADSP-BF518处理器可以检测IEEE 1588的所有事件消息,包括送入和送出的分组,并为其提供硬件时间戳。因为事件消息时间戳的精度及其提取位置会影响路径延迟的对称性和稳定性要求,所以IEEE 1588系统的精度在很大程度上取决于这二者。ADSP-BF518的TSYNC模块持续监控MAC控制器与以太网“物理接口收发器”(PHY)之间的硬件接口,即“媒体独立接口”(MII),并且只要检测到事件消息,就会产生硬件时间戳,这一功能可提高ADSP-BF518的同步精度。
事件消息检测功能是可编程的,基本配置有两种:支持IEEE 1588-2002(默认状态)或支持IEEE 1588-2008。此外,这种可编程能力还支持将来版本的IEEE 1588,以及其它要求时间戳的一般协议,包括配置为给进出处理器的每个以太网分组加上时间戳。
灵活的时钟源
本地时钟的属性对于IEEE 1588系统的性能很重要。为了满足各种不同应用的要求,ADSP-BF518处理器可提供三种本地时钟源选项:系统时钟、外部时钟或以太网时钟。如果应用具有特定时钟要求,则可以选择“外部时钟”,并提供定制时钟源。如果主时钟设备与从时钟设备“背靠背”连接,由于“以太网时钟”来自以太网线路,而且两台设备采用同一时钟工作,因此该时钟选项可以提供良好的精度。一般应用可以选择处理器的“系统时钟”作为时钟源。
所选源时钟也由TSYNC模块驱动,通过特定引脚Clockout作为处理器输出,系统的其它部分可利用该输出提供本地时间信息。
PPS输出
“每秒脉冲”(PPS)信号是时间信息的物理表示。它名义上是一个1-Hz信号,在每个1秒转换时间发出一个脉冲。它可用来控制本地设备,或者在发生网络故障时提供辅助时间通道。它也可以用于测试。两台设备的PPS信号之间的相位差是二者时间偏移的物理量度。
ADSP-BF518处理器提供灵活的PPS输出。它利用可编程“开始时间”(PPS_ST)和周期(PPS_P)产生一个在时间(PPS_ST + n × PPS_P)发出脉冲的信号,其中n = 1, 2, 3…。基本用法是将PPS_P设置为1秒,并将PPS_ST设置为用秒数表示的将来任一时刻,从而产生PPS信号。参考基本用法,可以利用这种PPS输出功能产生具有可编程频率和开始时间的周期性信号。
辅助快照
一些应用可能需要按照标志信号切换指示,给某一事件加上时间戳。ADSP-BF518的TSYNC模块通过辅助“快照”功能,使用一个专用引脚来接收外部标志,以便实现这种请求。切换标志将触发该模块捕捉时间戳寄存器中的当前本地时间,供软件访问。
报警
如果应用需在特定时间执行一项任务,则可以用TSYNC模块的“报警”功能。这项功能可以设置本地绝对时间,到达该时间时,就会触发处理器中断。然后,软件便可利用中断执行任务。
可调时钟
TSYNC模块的可调时钟是一种“基于加数”的时钟。如图6所示,它获得一个固定输入时钟信号,并输出该输入的“盗取脉冲”版本信号:对于每个输入时钟,“加数”的值增加到累加器中,并且每次累加器溢出时,进位位就会驱动“本地时间计数器”,从而产生以脉冲计数值表示的本地时间。更改加数可以调整本地时钟的频率,因为加数决定累加器溢出的频率,从而决定本地时间计数器递增的频率。如果输入时钟的频率为Fin,且加数的值为A,则本地时钟频率为:
(7)
图6. 基于加数的可调时钟
采用ADSP-BF518处理器的IEEE 1588实施方案
ADSP-BF518处理器上构建了一个完整的IEEE 1588-2008兼容系统,如图7所示。
图7. 采用ADSP-BF518的IEEE 1588实施方案
处理器的TSYNC模块检测送入和送出的IEEE 1588消息,并通过硬件给事件消息加上时间戳。由IXXAT (IXXAT Automation GmbH)提供的IEEE 1588协议栈软件可实现标准所要求的消息交换协议。它利用TSYNC驱动程序读取、写入并调整TSYNC时钟,并使用MAC控制器驱动程序在以太网MAC层(开放系统互连模型的第二层)发送和接收消息。它还可实现P2P延迟测量的控制法则和过滤。以太网PHY选择具有低抖动延迟特性的National Semiconductor DP838486 。为简明起见,TSYNC模块时钟源选择处理器的系统时钟(80 MHz)。
图8. ADSP-BF518上IEEE 1588系统的从时钟误差直方图
图8是两个完全相同的ADSP-BF518 IEEE 1588系统之间的测量误差直方图,由此可看出该器件的时钟同步性能。在约1700秒的时间内共进行了6938次测量。最终平均误差为0.015 ns,标准差为12.96 ns。该测试所用的Sync消息间隔为0.25秒。
结论
IEEE 1588标准提供了一种高精度、低成本的分布式时钟同步方法。虽然IEEE 1588并未明文要求硬件支持,但硬件辅助消息检测和时间戳对于实现极高同步精度至关重要。ADSP-BF518为IEEE 1588-2002和IEEE 1588-2008提供硬件支持,包括各种应用的支持功能。利用ADSP-BF518处理器和IXXAT IEEE 1588-2008协议软件实施IEEE 1588技术,已证明可以实现高精度时钟同步。 |