01signal.com

MGT 的时钟:基础讲解

本页是介绍多吉比特收发器(MGT)的系列文章中的第七篇。

简介

或许有人自然会认为,配置 FPGA MGT 的大部分工作都和数据处理以及选择正确的协议有关。因此,当人们发现要让时钟配置正确需要花费那么多时间和精力时,可能会感到意外。这些精力大多花在梳理 MGT 在其时钟资源方面提供的各种选项,以及这些选项所施加的限制上了。

由于不同 FPGA 上关于 MGT 时钟的设计规则各不相同,在这个问题上,唯一可靠且完整的资料来源就是 MGT 自己的文档。这类文档通常着眼于机制及其细节,未必会解释这些机制为什么是必需的。本页尝试通过讨论与 MGT 所用时钟相关的概念和挑战,来弥补这一不足。

PLL 与 VCO

一般而言,PLL(锁相环,Phase-Locked Loop)会将参考时钟(reference clock)的频率乘以一个常数。这个常数有时是整数,但也可以是小数,甚至小于 1。换句话说,PLL 输出的频率可以低于参考时钟的频率。这种情况在使用于 MGT 的 PLL 中很少见,但对于用于逻辑结构(logic fabric)的 PLL 来说,可能很有用。

在 FPGA 中,有专门的 PLL 用于生成 MGT 所需的时钟。逻辑结构中的 PLL 和其他时钟资源无法支持 MGT 所需的频率。尤其是,MGT 需要一个频率至少为数据速率一半的时钟;在数据速率较低时,所需频率可能更高。

例如,如果数据速率为 5 Gb/s,位时钟通常运行在 2.5 GHz。这是因为 MGT 的 SERDES 由时钟的两个边沿触发(DDR)。不过,如果数据速率相对较低,MGT PLL 的输出也可以分频到更低的频率。

几乎所有 PLL 的工作原理都一样:核心部分是一个 VCO(压控振荡器,Voltage Controlled Oscillator),它能够产生一个频率在一定范围内可变的时钟。VCO 的输出送入一个分频器,将频率除以一个常数。分频器的输出与 PLL 的参考时钟进行比较,控制机制会调整 VCO 的频率,使参考时钟和分频器输出对齐。换句话说,这两个信号具有相同的频率和相位。

回到上面 5 Gb/s 的例子,假设参考时钟的频率为 125 MHz。一种可能的 PLL 实现是让 VCO 输出进行 20 分频。分频后的信号与参考时钟进行比较并对齐。因此 VCO 的频率必须是 2500 MHz,因为 2500 MHz / 20 = 125 MHz。

这种产生时钟的方法适合发送比特:发送端 MGT 独自决定每个比特周期的起点和终点。然而,当 MGT 接收比特时,每个比特的时序由对端决定。因此,接收端需要适配到达的数据流。如本系列前面的某页所述,这种自适应机制称为时钟数据恢复(Clock Data Recovery,CDR)。CDR 的实现由一个控制回路组成,它调节 VCO 的频率,使接收端时钟与到达的数据流同步。参考时钟偶尔被用来把 VCO 设置到一个与预期频率足够接近的初始频率。一旦完成同步,参考时钟就不再被理会。

PLL 的使用

FPGA 内部用于 MGT 的 PLL 是一个很复杂的话题。每个 MGT 都可以从不止一个 PLL 获得时钟。如果一个 FPGA 工程中只有一处应用使用了 MGT,工具通常会自动选择最合适的 PLL。然而,如果项目中的 MGT 用于不同用途,就必须确保每个 MGT 都连接到最合适的 PLL。

在 FPGA 中,通常有若干个 MGT 共享的 PLL。AMD(Xilinx)称之为 QPLL,Altera 则有 fPLL 和 ATX PLL。另一方面,也有些 PLL 是某个 MGT 独有的,称为 CPLL(AMD / Xilinx)或 CMU PLL(Altera)。与共享 PLL 相比,本地 PLL 通常质量较低,功能也较少。差异可能体现在频率范围、抖动(jitter),以及相对参考时钟可选哪些倍频系数上。

每款 FPGA 都有一套复杂的规则,规定 PLL 与 MGT 之间如何互连。这些规则还规定了 PLL 可以连接到哪些 FPGA 参考时钟输入。因此,我们不能想当然地认为所有 MGT 都能连接到它们所需要的时钟。这与逻辑结构的时钟有很大不同,后者几乎没有任何限制。

因此,建议在为每个 MGT 决定选择哪个 PLL 之前仔细通读数据手册。尤其重要的是,在设计 PCB 时就要验证能否为所有 MGT 提供它们所需的时钟。验证方法可以是创建一个包含所有必需 MGT 的 FPGA 工程,并确保该工程的实现成功,且所有引脚都放置在正确的位置上。

参考时钟

FPGA 有专门的引脚用于输入面向 MGT PLL 的参考时钟。在 PCB 设计中,重要的一点是验证某个参考时钟输入是否可以用于其本来要驱动的那些 MGT。参考时钟输入、PLL 和 MGT 之间的互连并不支持所有可能组合。允许的组合在 FPGA 文档中有描述,但由于规则可能很复杂,很难得出一个板上钉钉的结论。通常更好的做法是借助 FPGA 工程来确认需求可以得到满足。

用于这一目的的时钟必须在精度和低抖动方面具有高质量。一个常见错误是连接由通用时钟芯片产生的时钟。这样做很可能会降低 MGT 的性能,并导致一些看起来像信号完整性(signal integrity)问题或数据导线上额外噪声的故障。

如果 MGT 用于某种特定协议(例如 PCIe、SuperSpeed USB 或 SATA),建议阅读 FPGA 厂商关于参考时钟要求的文档。有些标称“低抖动时钟源”的电子元件,实际上可能还不够好。

抖动是一种随机过程。抖动的大小是一个重要参数,但并不总是充分的参数。时钟抖动的随机性既可能引起时钟周期的快速变化,也可能引起缓慢变化。抖动在这方面表现如何,可以从抖动的噪声谱中推断出来。

产生时钟的元件的数据手册有时只给出抖动大小的一个数值(通常以皮秒为单位),而关于抖动噪声谱的信息往往没有。缺少这些信息并不等于该元件不适用,尤其是当抖动的绝对值本来就非常低的时候。这个问题往往没有简单的答案。

然而,参考时钟的质量对 MGT 的任何用途都很重要。成熟协议的要求可以作为很好的参考,适用于任何项目。此外,将元件与开发板上用作参考时钟的器件进行对比也很有用。

用于逻辑结构的时钟

用于 MGT 与逻辑结构之间接口的时钟来自 MGT 自己的 PLL。这是必要的,因为在 PMA 内部,SERDES 依赖于两个时钟:一个与物理信道上的比特对应,另一个随并行字一起使用。为了让 SERDES 正常工作,这两个时钟必须在 PMA 内部对齐。

另一方面,任何供逻辑结构使用的时钟都必须以能够确保低时钟偏斜(clock skew)的方式进行分配。FPGA 工具通常为此选择一个全局时钟缓冲器。从时钟缓冲器到各逻辑单元的传播延迟(propagation delay)几乎相等,因此时钟边沿会同时到达所有目的地。这是让工具能够对逻辑结构进行正确时序计算(timing calculation)的必要条件。

尽管这种传播延迟在所有走线上是均匀的,但并不一定很小。恰恰相反,FPGA 内部把时钟缓冲器连接到各目的地的走线会引入相当大的延迟。不过这通常无关紧要,因为所有这些连接之间的差异很小。

但这个延迟会使得 PMA 所用的两个时钟与逻辑结构的时钟不再对齐。利用逻辑结构的资源是不可能对齐这三个时钟的,因为其中有一个时钟的频率太高。然而,MGT 和逻辑结构必须有一个双方都能同步的时钟。唯一的解决办法是再增加一个时钟信号。

这归结为:每个方向至少需要三个时钟信号:

请注意,发送和接收通常各自有独立的时钟。下面的框图显示了 MGT 内部典型的时钟分布:

Clock domains in a typical Multi-Gigabit Transceiver

在这个框图中,每个方向有四个时钟,而不是前面所说的三个。原因下面解释。

生成用于逻辑结构的时钟

如上所述,逻辑结构与 MGT 共用的时钟必须通过逻辑结构的时钟缓冲器来分配。另一方面,这个时钟又必须源自 MGT 内部。

我们先从这两个相互矛盾要求的最简单解决方案说起:MGT 确实生成一个时钟,并通过某个输出端口提供出来。这个输出端口通常叫作 TXOUTCLK、RXOUTCLK、tx_clkout、rx_clkout 等(这就是上面框图中的第四个时钟,标记为 Tx out clock 和 Rx out clock)。这个信号进入逻辑结构时钟缓冲器的输入端。该时钟缓冲器的输出就是 MGT 与逻辑结构接口所用的时钟信号。

这种安排的结果是,逻辑结构的时钟与 MGT 所产生的时钟之间唯一的差别,就是时钟缓冲器的传播延迟。换句话说,除了相位之外,MGT 完全掌握着逻辑结构时钟的控制权。这一点在接收数据时尤其重要,尤其是当 CDR 的时钟被用作与逻辑结构接口的基础时(下面讨论这一选项)。这是因为 CDR 会不断调整这个时钟的频率,以便与到达的数据流保持同步。

前一页所讨论的,PCS 提供了一些机制来解决逻辑结构时钟与 PMA 时钟之间相位差异的问题。最简单的选择是使用 Tx 缓冲器或 Rx 缓冲器,但 PCS 也许还具备直接调整这种差异的能力。

那么,MGT 的时钟输出端口输出的是哪个时钟呢?自然的答案是 XCLK,因为它是满足逻辑结构时钟要求的最佳候选。不过,生成逻辑结构时钟还有其他几种可能性。例如,可以把 MGT 的时钟输出送入一个普通的逻辑结构 PLL,以生成不同频率的时钟。这个 PLL 与时钟缓冲器配合使用,因此得到的时钟信号能够满足用途。这样使用 PLL 会带来新的可能,例如 MGT 可以把自己的参考时钟从时钟输出端口直接透传出来。这个时钟的频率可能不适宜直接作为与 MGT 接口的时钟,但 PLL 可以按所需比例对这个时钟进行倍频。

还要注意,逻辑结构时钟的频率可以不同于 XCLK 的频率。当 PCS 内部启用了异步齿轮箱(asynchronous gearbox)时,就可能需要这样做。在这种情况下,需要用频率差来补偿 PMA 处并行字宽度与逻辑结构接口处并行字宽度之间的差异。

与此相关的规则很复杂,并且不同 FPGA 之间各不相同。MGT 的文档中往往有大量篇幅用于详细说明这些不同选项。遗憾的是,要在时钟方面做出正确决策,就必须花时间学习针对具体 FPGA 的那些规则。

接收数据时如何选择逻辑结构时钟

在为数据接收选择逻辑结构时钟的生成方式时,需要做一个根本性决定:这个时钟是源自 CDR 的时钟,还是源自某个固定的参考时钟?换句话说,逻辑结构时钟是否要与到达数据流的确切数据速率保持一致。

在大多数应用中,MGT 用于双向数据通信。到达的数据与发送的数据之间往往有密切关系。例如,发送的数据流中可能包含对到达数据流的确认应答和重传请求。在这类应用中,让所有逻辑都同步于同一个时钟(即所有逻辑都在同一个时钟域(clock domain)中)会很方便。尤其是,PIPE 接口要求所有与 MGT 的接口都同步于一个单一的时钟(标准文档中称为 PCLK)。回想前文可知,PIPE 是 MGT 与几种协议之间的标准接口:PCIe、SuperSpeed USB 和 SATA。

但这种便利是有代价的:逻辑结构时钟的频率有可能与 PMA 并行字所用的频率(即 XCLK 的频率)略有不同。由于逻辑结构接收并行字的速度比这些字到达 PMA 的速度更慢或更快,这种差异会在 PCS 内部造成数据的过剩或短缺。解决办法通常是使用 Rx 缓冲器和跳过符号,如关于 PCS 的页面所讨论的那样。

另一种办法是让逻辑结构时钟直接由 PMA 的时钟导出。使用这种方法,逻辑结构会以与数据到达完全相同的速率来消耗数据。当 MGT 只用于接收数据时,这是很自然的解决方案。对于双向链路,如果应用逻辑自己处理跨时钟域(clock domain crossing),这也是一个可行的选择。Xillyp2p 就是采用这一思路的协议,参见它的完整设计示例

AMD FPGA:来自逻辑结构的两个时钟

在 AMD FPGA(原 Xilinx)上,MGT 有两个来自逻辑结构的时钟输入端口,也就是每个方向两个端口:用于发送的 TXUSRCLK 和 TXUSRCLK2,以及用于接收的 RXUSRCLK 和 RXUSRCLK2。本设计示例给出了一个 MGT 实例化(instantiation)的例子。

几乎所有与逻辑结构的接口都同步于 TXUSRCLK2 或 RXUSRCLK2(取决于方向)。另外两个输入 TXUSRCLK 和 RXUSRCLK 只在 PCS 的某些部分内部使用。

TXUSRCLK 通常与 TXUSRCLK2 是同一个时钟信号。不过,AMD FPGA 的 MGT 有一个特性:与逻辑结构接口所用的并行字宽度可以是 PCS 内部并行字宽度的两倍。当使用这一特性时,TXUSRCLK 的频率就是 TXUSRCLK2 频率的两倍。这也是需要使用逻辑结构 PLL 的又一个原因。

同样的原则也适用于 RXUSRCLK 和 RXUSRCLK2。

总结

本页简要介绍了一些与 MGT 时钟相关的主题。不过,为了明智地决定如何使用 MGT 的时钟资源,仍然有必要了解具体 MGT 的特性和限制。希望本页的说明有助于理解 MGT 的各时钟应当如何工作以及如何相互作用。

至此,关于 MGT 的本系列第七页就结束了。下一页将讨论流量控制(flow control),并以此结束整个系列。

本页由机器从英文翻译而来。如有疑问,请参阅原文
Copyright © 2021-2026. All rights reserved. (dcc38493)