Common Refclock 架构:共享参考时钟,到底怎么玩?

Common Refclock,说白了就是多个高速接口共用一颗参考时钟源。嗯,听起来很简单?实际项目里坑不少。

我记得早年做一款 25G 交换机,板子上 32 个 SerDes 通道全从一颗 156.25MHz 的 VCXO 分路出去。结果某些通道的眼图死活睁不开——后来发现是分配网络上的走线阻抗不连续导致的抖动放大。

今天我们就把它拆开了讲讲。

核心思想:一颗时钟喂饱所有接口

Common Refclock 架构还有一个更直白的名字——shared reference clock topology。它的思路是这样的:系统中所有 SerDes 通道(比如 PCIe、以太网、SATA)都从同一个参考时钟源获取基准频率。

你想想看,如果每颗 SerDes 芯片都自带独立晶振,它们之间没有频率锁定关系。做同步应用时,跨芯片的数据传输就会出现帧对齐问题。共同时钟就解决了这个痛点。

具体来说,架构包含三个要素:

  • 参考时钟源——通常是高精度压控振荡器(VCXO)或温补晶振(TCXO),频率常见 100MHz、125MHz、156.25MHz。
  • 扇出/分配网络——用时钟缓冲器(Fanout Buffer)或电阻电容分路,把一路信号等相(skew controlled)送到多个终端。
  • 终端 SerDes PHY——接收参考时钟并恢复出内部 PLL 所需的 VCO 频率。注意,每个 PHY 内部都有自己的 PLL,但参考源是同一个。

关键理解点:Common Refclock 不等于同频同相。不同 PHY 之间的输出数据相位可以不同,但频率严格同源。你需要的是频率同步,不是相位同步。

拓扑有哪些样式?

我在项目中见过三种主流做法。它们各有优劣,选型时得看具体场景。

拓扑类型拓扑描述典型应用我踩过的坑
星型分配 时钟源经一个缓冲器扇出多路,每路独立走线到 PHY PCIe 多 lane 互联、交换芯片内部 SerDes 曾经有一路走线长了 300mil,skew 超出 PLL 锁定范围
菊花链 时钟从第一颗 PHY 入、再出到下一颗 低端控制面板、背板 链尾信号过冲严重,必须加 RC 端接
混合型 主时钟缓冲器扇出到几个子缓冲器,再由子缓冲器继续扇出 大型机框、多板系统 级联抖动累加,需要严格预算

你看,星型最干净,但 PCB 走线多。菊花链省线但信号质量最差。混合型折中,但级联噪声控制要算清楚。

信号完整性的三个硬约束

Common Refclock 要想跑稳,你需要死磕三个参数:

  1. 抖动(Jitter)——参考时钟上的随机抖动和确定性抖动直接传递到恢复时钟。我习惯把参考时钟的峰峰值抖动控制在 SerDes 标准要求值的 1/3 以内。例如 PCIe Gen5 要求参考时钟 RMS 抖动 < 0.5ps rms,我的目标就是 < 0.15ps rms。
  2. 相位噪声(Phase Noise)——PLL 的带内相位噪声主要来自参考源。选择 VCXO 时,我会看 10kHz 偏移处的相噪值,一般需要低于 -140dBc/Hz。
  3. 时钟偏斜(Skew)——不同 PHY 接收到的参考时钟之间的时间偏差。如果偏差太大,PLL 可能无法锁定或者锁定后输出频率偏移过大。设计时通过等长走线控制,通常要求所有支路 skew < 50ps。

我曾经犯过的错:在一款 100G 交换板卡上,用了 3 个扇出缓冲器,每个缓冲器输出经不同层过孔到达 PHY。结果有一条路径的过孔数量多 2 个,导致 skew 达到 90ps——整个板卡在高温测试时随机丢包。后来把所有路径的过孔数统一,并在较短的路径上添加蛇形走线补偿,问题解决。

PLL 带宽与参考时钟的配合

SerDes 内部的 PLL 有一个衡量指标:环路带宽。它决定了参考时钟和 VCO 之间的相互作用。

  • 如果 PLL 环路带宽很窄(比如 < 1MHz),参考时钟的远端(> 1MHz)相位噪声可以被抑制,但近端抖动无法被衰减。
  • 如果 PLL 环路带宽很宽(比如 > 10MHz),参考时钟的抖动会被放大,但锁定时间会缩短。

所以,选择参考时钟源时,要对着 SerDes Datasheet 里的 PLL 带宽参数来匹配。一个实用的经验是:参考时钟的相位噪声拐点要落在 PLL 带宽的 1/10 以下,这样噪声能被环路有效抑制。

小技巧:当你有两种参考时钟源可选时,优先选相噪拐点更低的那一个。如果你的 PLL 带宽是 2MHz,拐点在 100kHz 的晶振比拐点在 1MHz 的晶振好得多。

一张图看懂 Common Refclock 的核心逻辑

下面这个 SVG 图把整个架构的流向画出来了。注意看时钟源、扇出、到各 PHY 的路径,以及最终 PLL 恢复出数据时钟的关系。

Common Refclock 核心架构图 参考时钟源 156.25MHz VCXO 扇出缓冲器 (Fanout Buffer) SerDes PHY #1 PLL 带宽 2MHz SerDes PHY #2 PLL 带宽 5MHz SerDes PHY #3 PLL 带宽 10MHz 恢复时钟 3.125GHz 恢复时钟 1.5625GHz 恢复时钟 3.125GHz 注意:PHY 内部 PLL 不同,恢复时钟频率不同,但参考同源。Skew 需控制在 50ps 以内 抖动、相噪、走线等长三约束缺一不可

设计检查清单

每次画一块 Common Refclock 的板子,我都会过一遍这个清单,省得后期改版麻烦。

  • ☐ 时钟源相位噪声曲线是否和目标 PHY 的 PLL 带宽匹配?
  • ☐ 扇出缓冲器的附加抖动(additive jitter)是否够低?一般选 < 50fs rms。
  • ☐ 所有 PHY 的参考时钟走线是否等长?我用 Allegro 的 Tcl 脚本直接输出长度报告。
  • ☐ 时钟网络是否使用了 AC 耦合电容?如果需要隔直,电容位置靠近接收端。
  • ☐ 终端端接是否匹配?差分时钟常用 100Ω 跨接,单端时钟按源端阻抗匹配。
  • ☐ 板上其他高频信号(如数据线、电源开关噪声)是否对参考时钟形成了串扰?注意参考时钟走线周围 3 倍线宽以内不要走高频开关信号。

我的个人习惯:在原理图阶段就把参考时钟的抖动预算表格画好,每个节点填入抖动值,最后累积一算,如果超出标准就提前换更好的缓冲器或者调整拓扑。这是最省时间的办法。

看到这里,你大概明白 Common Refclock 核心是“同源不同相”,依赖分配网络的低抖动、低偏斜。实际项目里,星型分配最安全,但多板系统里混合型也常见。关键是把三个硬约束(抖动、相噪、偏斜)在原理阶段就算清楚,别等到 PCB 回来再哭。