3. 系统时钟与数据的关系

讲RGMII的延时校准,绕不开时钟与数据的相爱相杀。你可能看过不少文档,上来就是Tsu、Th、Tskew一堆公式。其实啊,把这件事想透了,后面调起参数来特别顺手。我个人习惯先掰扯清楚时钟到底怎么管数据的,然后再看延时怎么补偿。

3.1 为什么时钟是RGMII的灵魂?

RGMII用的是DDR(双数据率)采样,也就是说时钟的上升沿和下降沿都要锁存数据。一根时钟线,两个边沿,各管一套4bit数据。你想想看,两个沿之间只差半个时钟周期,数据窗口天然就窄。

举个例子,125MHz的时钟周期是8ns。上升沿到下降沿只有4ns。数据必须在这4ns内稳定下来,而且还不能碰到下一个沿的建立、保持时间。我在做一款千兆交换机的时候,第一次没注意时钟占空比,结果下降沿老丢包——其实就是占空比偏了0.5ns,数据的有效窗口被挤没了。

所以理解时钟,就是理解两个边沿的“分工”和“临界条件”。

3.2 时钟与数据的相对相位

说白了,MAC发给PHY的RGMII数据,是以时钟为参考的。发送端在时钟边沿附近把数据推出来,接收端要在同一个边沿附近把它抓进去。但物理走线总有延时,PCB上的走线长度、封装寄生参数都会让时钟和数据到达接收端的时间差发生变化。

个人经验:有一次我在调试一块四层板,RGMII走线没等长,数据线和时钟线差了差不多200mil。算下来延时差约27ps,虽然看起来不大,但在125MHz下已经能吃掉了将近0.7ns的建立时间余量。最后不得不在FPGA内部加idelay才补回来。所以layout阶段对等长的要求真不是闹着玩的。

这里引入两个关键参数:

  • 建立时间(Tsu)——数据必须在时钟有效边沿之前稳定,并保持这个稳定状态一段最短时间。
  • 保持时间(Th)——数据必须在时钟有效边沿之后继续稳定一段时间。

标准RGMII接口要求接收端内部对时钟进行相移(通常移90°或240°),让时钟的采样点在数据窗口的正中间。这样做的好处是抗干扰能力强,坏处是如果时钟的占空比或抖动超标,这个“中间位置”就会漂。

3.3 内部延时 vs 外部延时

RGMII规范里允许两种延时方式:

  1. 内部延时(internal delay)——在PHY或MAC芯片内部,通过PLL或delay cell把时钟或数据路径上的信号延迟一个固定量。常见的是2ns(大约90°相移)。
  2. 外部延时——在PCB上通过蛇形走线或串阻、RC网络来调。现在已经很少这么干了,因为精度差、温度漂移大。

我个人更喜欢用内部延时,因为可控、稳定。不过要注意:不同厂家的芯片内部延时基准不一样,有的叫“TX delay”,有的叫“RX clock skew”。看数据手册时别搞混。

重要提醒:内部延时不是越大越好。你加多了,数据可能跑到下一个时钟边沿的窗口里,反而产生建立时间违规。我见过一个项目,工程师看到眼图不好就疯狂加delay,结果从2ns加到4ns,眼图更差了——因为时钟相位已经超出数据稳定区域了。

3.4 时序关系图解

下面这张图把时钟、数据以及内部延时后的采样时钟画在一起。你可以清楚看到:

  • 原始时钟(CLK)
  • 发送数据(TXD)在CLK边沿变化
  • 接收端经过内部延时后的采样时钟(CLK_delayed)
  • 数据稳定窗口和建立/保持时间边界
RGMII时钟与数据时序关系 CLK 上升沿 下降沿 TXD 数据有效 数据切换 数据有效 CLK_delayed 采样点(移90°) 采样点 Th Tsu Th Tsu 稳定窗口 稳定窗口 ✕ ✕ 图例说明 • 红色:原始时钟CLK • 蓝色:数据TXD • 绿色:延时后的采样时钟 • 黄色:建立/保持时间窗口 • 橙色虚线:数据稳定区间 内部延时后的采样点(绿色) 通常落在数据稳定区间中央

3.5 延时校准的核心逻辑

综上,系统时钟与数据的关系可以总结成一句话:让采样时钟的边沿正好落到数据窗口的中间。怎么实现?靠idelay或ocdelay。但具体调多少,取决于三样东西:

  • PCB走线延时差
  • 芯片内部PLL的初始相位
  • 温度电压变化导致的漂移

实战建议:在第一个原型板上,先用示波器抓一下时钟和数据的相对相位。如果眼图中央离时钟边沿差得远,别急着改软件,先检查PCB等长、参考平面是否完整。我遇到过两次,都是layout没做回流地过孔导致的假性相位偏移。

所以下一遍硬件投板之前,最好在RGMII时钟路径上预留RC或0Ω电阻,以备外部粗调。不过现在主流方案都走内部数字延时了,调起来就是写寄存器的事。嗯,但数字延时也有坑——延迟步长不准、非线性,这些我们后面几章会专门展开。

参数 SDR采样 DDR采样(RGMII)
每个时钟周期采几次 1次(边沿) 2次(上升+下降)
数据窗口宽度(125MHz) ~8ns ~4ns
对占空比敏感度 低 高
典型延时需求 可忽略或简单匹配 需要精细的内/外部延时

3.6 避坑指南

  • 别只看时钟频率,要看数据率。125MHz的时钟,数据率是250Mbps/线。眼图裕量计算时按4ns窗口来。
  • 内部延时的寄存器值不等于实际延迟量。很多PHY的tap步长是50ps左右,但温度和电压下可能偏差±20%。最好做一下回环测试验证。
  • 如果芯片支持的话,优先调时钟延时而不是数据延时。因为时钟只走一根线,调起来简单。数据延时需要调8根线(RGMII数据线加控制信号),工作量大。

这一章把时钟与数据的底层关系讲清楚了。你有了这个基础,后面学idelay配置、眼图扫描、自动校准算法的时候,就不会觉得那是一堆黑盒子操作了。别急,我们一章一章来。