RGMII时钟方案:125MHz还是25MHz?抖动到底多重要?
时钟是RGMII接口的“心跳”,这个说法你可能听过好多次了。但我敢说,很多板子调不通,根因就出在时钟上。RGMII对时钟的要求,其实比大多数人想象的要严苛得多。
4.1 参考时钟频率:125MHz vs 25MHz vs 50MHz
先说最直观的——频率。RGMII接口工作时,数据在时钟的上升沿和下降沿各采样一次,也就是DDR模式。这意味着,对于1Gbps的RGMII,你需要的时钟频率是125MHz,而不是许多初学者以为的1GHz。
但为什么很多参考设计里,我还会看到25MHz或50MHz的晶振?
这就涉及到芯片内部的PLL配置了。你想想看,SoC或交换芯片内部,通常有一个时钟管理单元。你可以给它喂一个外部低频时钟(比如25MHz),然后通过PLL倍频到125MHz。
| 模式 | 外部晶振频率 | 内部PLL倍频 | 最终RGMII时钟 | 典型场景 |
|---|---|---|---|---|
| 直接125MHz | 125MHz | 无(或1x) | 125MHz | PHY提供时钟,SoC作为从模式 |
| 25MHz倍频 | 25MHz | 5x | 125MHz | SoC或PHY内部集成PLL,节省高频晶振成本 |
| 50MHz倍频 | 50MHz | 2.5x | 125MHz | 部分FPGA或PHY的特定参考设计 |
我记得以前做一个项目,芯片手册里写着“支持25MHz/50MHz/125MHz外部时钟”。我心想,那就随便焊个25MHz晶振吧,便宜。结果板子回来,上电后死活不通。最后查了两个小时,才发现是内部PLL的锁定时间太长,导致PHY在初始化时错过了时钟参考。从那以后,我对参考时钟的频率选择就很谨慎了。
4.2 时钟抖动要求:别让抖动毁了你的眼图
频率选对了,只是第一步。真正让人头疼的,是抖动。
RGMII的时序窗口非常窄。大家知道吗?对于1Gbps RGMII,数据是DDR采样的,每个比特的窗口只有800ps。算上PCB走线的板级误差、芯片内部的setup/hold时间,你留给时钟抖动的预算,可能只有100ps甚至更少。
抖动分为两类:
- 随机抖动(RJ): 由热噪声、散弹噪声等引起。服从高斯分布,无法完全消除,只能通过设计控制。
- 确定性抖动(DJ): 由串扰、电源噪声、EMI等引起。有规律可循,可以通过布局布线和滤波优化。
对于RGMII时钟,我更关注的是周期抖动(Period Jitter)和相位抖动(Phase Jitter)。特别是TCCS(Total Clock Cycle Shift)——这个词你可能在PHY的datasheet里见过。
对于125MHz的RGMII时钟,推荐的最低要求是:
- TCCS(周期抖动RMS): 小于50ps
- 相位抖动(12kHz-20MHz): 小于3ps RMS
- 占空比:45%-55%
你可以用频谱分析仪测时钟的近端相位噪声,然后积分到相位抖动。如果你没有专用的抖动仪,也可以用示波器的直方图统计功能,测量时钟过零点的时间漂移。
4.3 时钟源选择与分配:源端到负载的每一步都得小心
时钟源选择,说白了就是选晶振还是选振荡器。这是成本和性能的经典权衡。
- 晶体(Crystal): 需要外部匹配电容和负载电容,启动时间长,频率精度一般,但很便宜。适用于对成本敏感、时钟要求不高的场景(比如25MHz倍频后给SoC内部用)。
- 振荡器(Oscillator): 集成在内部,输出已经是CMOS或LVPECL电平,启动快,频率精度高,抖动低。贵一点,但省心。我个人建议,直连PHY的125MHz时钟,一定要用振荡器,不要用晶体。
- 时钟缓冲器/分配器: 当系统有多个RGMII口(比如1个SoC带4个PHY)时,一个振荡器不够用。这时候,你需要时钟缓冲器(如:一个输入,差分输出或LVCMOS输出)。
时钟分配时,要注意的细节更多:
- 星形拓扑 vs 菊花链: RGMII时钟强烈推荐星形拓扑。即每个时钟负载都有独立的走线,从源端拉出来。不要试图在一条线上挂多个PHY,那是给自己找麻烦。
- 端接匹配: 对于125MHz的时钟,如果走线长度超过2英寸,建议在接收端做串联源端匹配。如果是差分时钟,一定要保持等长,差分对内误差控制在5mil以内。
- 参考平面: 时钟走线必须紧贴完整的地平面。千万不要跨分割!切地一刀,时钟抖动直接翻倍。
最后说一个分配中的真实案例。有一个项目,时钟用了1分4的扇出缓冲器,Pin设完全按照手册来。结果实测时发现,4个PHY没一个能稳定建链。查了三天,最后发现是缓冲器的输出电源滤波没做好。我给每个输出通道单独加了一颗0.1μF的陶瓷电容,紧贴电源脚,问题立刻解决。