对于本文,我们将继续讨论全局时钟恢复、分布式时钟同步和事件同步的主题。
全局时钟恢复
假设在一个复杂系统中有多个代理。每一个都有自己的参考时钟,给它一种时间感。代理的时间概念由自启动以来经过的参考时钟滴答数给出。
为了同步动作和共享时钟,代理需要有一个共同的、全局的时间感。使用 USB 或 Firewire 之类的总线系统很容易做到这一点,因为总线往往带有自己的时钟。然而,对于分布式、基于数据包的互连,事情变得更加困难。IEEE 标准 1588、1588v2 和 802.1as 以及 IETF NTP 标准旨在专门解决分布式全局时钟恢复问题。
系统的第一个任务是选择一个代理作为主代理。正是这个代理的时钟将成为通用的全局时钟。IEEE 1588 及其变体使用点对点领导选举协议,试图在代理中选择最高质量的时钟。保证会选出一位,而且只有一位,master。
Once the master is elected, each agent needs to know the following information:
我的时钟是否比全球主时钟慢/快?如果是这样,多少?
根据主时钟,现在是几点钟?
使用的基本方法是定期将同步消息从主代理传输到其他代理。消息包含发送消息的全球时间。下图显示了这种情况:
从站知道主站执行的传出时间戳(Tm1、Tm2 和 Tm3),以及从站执行的入站时间戳(Ts1、Ts2 和 Ts3)。给定这些时间戳,它可以计算出主时钟与其自己的本地时钟之间的比率。例如,以下计算会测量两个时钟之间的比率:
可以过滤该值的多个测量值以平均传输时间的变化。随着时间的推移跟踪该值还将跟踪所涉及的两个时钟中的任何漂移。
为了在全球时间和本地时间之间进行完全转换,slave 还需要知道它与 master 的时间偏移量,这意味着它需要知道同步消息的传输时间。为此,主机和从机执行两种方式的消息交换:
假设传输时间是对称的:
这里需要小心,因为时间戳 Tm2 和 Tm1 参考与 Ts2 和 Ts1 不同的时钟。所以从机需要进行计算:
知道这个传输时间允许从机计算出它与主时钟的偏移量。它现在拥有在全球和本地时间之间转换所需的所有信息,反之亦然。
实际上,像 802.1as 这样的时间同步协议比这里描述的要复杂一些,但基本思想是一样的。
事件同步
一旦全局时钟同步到位。本地代理可以将全球时间转换为本地时间:
这意味着两个代理可以同步他们的动作。每个人都有一个全局时间来执行一个事件。代理将此全球时间转换为本地时间,然后安排事件在该时间发生。当然,这些事件不会同时发生。会有一些同步错误。此错误包括:
由于全局时钟恢复导致的错误
由于代理在特定本地时间触发事件的能力的可变性而导致的错误。
自上次同步以来代理的本地时钟变化导致的错误
这些错误的大小将取决于通信技术、同步协议、代理之间的消息时间戳的准确性以及代理内的本地事件同步。
在以太网通信的情况下,使用 IEEE 802.1as 作为时间同步协议,XMOS XCore 设备作为代理,同步误差可以小于 150 ns。
基于全局时钟恢复其他时钟
有时需要使用全局时间作为参考来恢复辅助时钟。IEEE AVB 1722 标准就是这种情况,需要恢复媒体时钟以将音频或视频从一个端点传输到另一个端点。
在这种情况下,使用我之前关于软件时钟的文章中描述的控制环路来恢复时钟。这种情况下的区别在于如何检测错误。
发送时钟的代理也可以发送某些时钟边沿应该出现的预期时间。当从机恢复并输出时钟时,它可以跟踪该边沿实际发生的时间,并获得预期时间和实际时间之间的差值。全局时钟的存在允许代理有一个共同的时基来计算增量。
该增量给出了馈入 PID 控制回路的误差项。然而,还有一个“陷阱”需要注意。目的是恢复时钟周期;这使得预期边缘时间和实际边缘时间之间的增量成为积分误差而不是比例误差。这意味着比例误差是增量的变化率。一旦理解了这一点,就可以以标准方式调整控制回路。
-
以太网
+关注
关注
40文章
5443浏览量
172067 -
usb
+关注
关注
60文章
7962浏览量
265133 -
时钟
+关注
关注
11文章
1736浏览量
131596
发布评论请先 登录
相关推荐
评论