GTY 收发器时钟结构:从参考时钟到 TX/RX 时钟
时钟,说白了就是高速收发器的心脏。GTY 再厉害,没有干净的时钟也是白搭。我刚开始接触 GTY 时被一堆 PLL 和时钟选项绕晕过,后来花了整整两周才理清楚。这一章咱们就把参考时钟、QPLL、CPLL,以及最后的 TX/RX 时钟捋一遍。你想想看,信号要从板子进来,经过 PLL 倍频,再送到串化器和解串器,每一步都有讲究。
参考时钟:一切从这里开始
参考时钟是整个 GTY 时钟树的源头。它可以是差分对、单端,也能从内部其他时钟资源引来。我个人习惯尽量用差分时钟输入,噪声抑制好很多。
| 参考时钟源 | 说明 | 注意事项 |
|---|---|---|
| 差分外部时钟 | 通过专用差分引脚输入 | 推荐用于高频场景,抗干扰强 |
| 单端外部时钟 | 通过单端引脚输入 | 避免超过 200MHz,容易受噪声影响 |
| 内部时钟资源 | 由 MMCM/PLL 生成后引入 | 注意抖动累积,我曾在这里踩过坑 |
QPLL 和 CPLL:两个 PLL 怎么选?
GTY 收发器里有两种 PLL:QPLL(Quarter PLL)和 CPLL(Channel PLL)。它们负责把参考时钟倍频到线速率所需的时钟。说白了,QPLL 是“大力士”,CPLL 是“灵活派”。
QPLL(共享型 PLL)
每个 QPLL 可以同时驱动相邻的 4 个通道(一个 Quad)。它支持的线速率范围更宽,抖动更小。我一般在高线速率场景(比如 25Gbps 以上)用 QPLL。但是要注意,一个 Quad 内所有通道必须用相同的线速率——这是它的硬限制。
CPLL(通道专用 PLL)
每个通道有一个独立的 CPLL。它只能驱动自己的通道,但好处是每个通道可以跑不同的速率。适合多速率混用的设计,比如一个 Quad 里既有 PCIe Gen3 又有 10G Ethernet。
| 特性 | QPLL | CPLL |
|---|---|---|
| 共享范围 | Quad 内 4 个通道 | 仅 1 个通道 |
| 线速率上限 | 最高 32.75Gbps | 最高 16.3Gbps |
| 通道速率独立性 | 必须一致 | 每个通道可不同 |
| 推荐场景 | 单一高速率协议 | 多速率混合设计 |
TX/RX 时钟:数据从哪来,到哪去?
经过 PLL 倍频后得到的是高速串行时钟,但收发器内部还需要并行时钟才能和 FPGA 逻辑交互。这里涉及两组时钟域:TXUSRCLK 和 RXUSRCLK。它们分别对应发送和接收的并行数据接口。
TX 时钟域
TXUSRCLK 是发送侧并行数据时钟。它的频率 = 线速率 / 数据位宽。比如线速率 10.3125Gbps,使用 64B/66B 编码(实际数据位宽 64),那么 TXUSRCLK = 10.3125 / 64 ≈ 161.1MHz。FPGA 逻辑在这个时钟下把并行数据推给收发器,再由 TX_PLL 把它串化出去。
RX 时钟域
RXUSRCLK 是接收侧并行数据时钟。注意,它和 TXUSRCLK 频率可以不同——因为收发器内部有弹性缓冲(elastic buffer)。但实际工程中我建议 RX 和 TX 用同一个时钟源,除非你有明确的异步需求。否则跨时钟域处理要小心,我会在后面的章节详述。
时钟选型的实际建议
- 先确定线速率和协议——然后反推参考时钟和 PLL 选择。
- 尽量使用 QPLL,除非你需要混合速率。QPLL 的抖动表现通常优于 CPLL。
- 参考时钟的抖动指标:RMS 相位抖动最好小于 0.6ps(12kHz–20MHz 积分区)。我自己会留 0.4ps 的余量。
- 时钟分配网络:使用 IBUFDS_GTE4 原语来缓冲差分参考时钟,并加上 BUFG_GT 驱动 TXUSRCLK/RXUSRCLK。
- 跨通道共享:如果你想在一个 Quad 内所有通道用同一个 TXUSRCLK,得确认共用 QPLL——否则每个 CPLL 会生成不同频率的并行时钟,没法直接共享。
嗯,关于时钟结构的内容就这些。理解了参考时钟怎么进、PLL 怎么分、TX/RX 时钟怎么出,你就能自己规划整个时钟树了。下一部分我们聊聊收发器的发送和接收通道,看看数据是怎么一步一步串化和解串的。