2. RGMII 延时校准原理:为何需要延时调整

做 RGMII 接口设计,第一关就是搞懂延时。很多新手拿到参考设计,看着 PCB 走线等长就以为万事大吉,结果一上板子就丢包。我以前也犯过这个错,后来才明白:等长只是基础,真正的门槛是延时校准。

2.1 为什么 RGMII 天生就需要延时?

RGMII 是源同步接口。时钟由发送端随数据一起发出,边沿对齐。但接收端要做的事是:用时钟的边沿去捕获数据。

  • 时钟和数据边沿对齐——发送端为了满足时序,通常把时钟边沿对准数据切换点。
  • 双沿采样——每个时钟周期要采两个比特(上升沿和下降沿),数据眼图只有半个周期宽。
  • 接收端的麻烦——如果时钟边沿正好落在数据跳变区,建立/保持时间全挂。

说白了,你收到的数据和时钟在物理上同时到达,但采样需要时钟边沿落在数据稳定的中间区。这就强迫你去做延时调整,把时钟往数据眼图中心推。

我的一点经验: 刚开始我总觉得芯片内部会自动处理。后来用示波器一测,发现时钟跳变正好卡在数据跳变上——眼图根本没睁开。从那以后,我每块板子都会先检查时钟和数据的相对相位。

2.2 延时不一致的来源

你以为走线等长就一样了?还差得远。延时偏差来自好几个地方:

来源 典型范围 影响程度
PCB 走线长度差异 ±50 ps(严格等长可减小) 关键,但可控
芯片内部走线差异 ±150 ps 甚至更大 不可预见,致命
温度漂移 约 -0.1%/°C 中,需动态调整
电压变化 约 -0.3%/100mV 中,大波动时显著
制造工艺角 ±200 ps 以上 批次间差异很大

这些偏差叠加起来,很可能超过一个数据位的有效窗口。我遇到过一批板子,常温下跑 1000M 没问题,一进温箱到 -40°C 就疯狂丢包——就是温度导致内部延时链变了。

2.3 延时调整的核心目标

简单说,就是让时钟采样边沿落在数据眼图的中心。

眼图中心 = 数据稳定区最大开口处
采样裕量 = min(建立时间裕量,保持时间裕量)
目标:建立时间裕量 ≈ 保持时间裕量

更专业一点,我们需要满足:

  • Tskew(时钟与数据之间的相对偏移)控制在数据有效窗口的 1/2 以内。
  • 典型的 RGMII 要求 Tskew < 1/4 Tbit,对于千兆以太网,Tbit ≈ 2 ns,Tskew 应小于 500 ps。
  • IDELAY 步进 通常为 78 ps(7 位控制)或 156 ps(5 位控制),要能覆盖 ±Tbit/2 的范围。

注意: 有些芯片只支持固定延时档位,并且步进很大。如果实际偏差落在两步之间,你会陷入“调小一点丢包,调大一点也丢包”的困境。我之前调一个 FPGA 加 PHY 的方案,卡了整整一天,最后发现是 IDELAY 步进太大,不得不改 PCB 长度来配合。

2.4 常用延时实现方式

实际工程中,我们不只靠一种手段。下面是常见的四种方案:

  1. PCB 等长布线——打好基础,减少固定偏差。但无法补偿芯片内部和温漂。
  2. 芯片内部可编程延时链(IDELAY)——最灵活,FPGA 和高端 PHY 都支持。可以软件动态调整。
  3. 时钟相位调整(PLL/DLL)——调整时钟相位来对齐数据。比如把时钟延迟 90° 或 90° 再加微调。
  4. RGMII ID 引脚(可选)——部分 PHY 提供内置 90° 延时,但精度有限。

我个人偏好IDELAY + 自动校准的方案。启动时先做一次眼图扫描,找到最佳延时点,然后锁定。运行时再根据误码率微调。

核心思想: 延时调整不是把时钟和数据画一条等长线就完事。它是在每个接收端、每个通道、每个温度点上,动态地把采样点推到数据眼图的正中央。

RGMII 延时调整原理——时钟与数据相位关系 发送端(TX) 时钟与数据边沿对齐 走线 PCB 走线 等长但存在偏差 接收端(RX) 需要延时调整 IDELAY 延时 1.5ns 时钟 数据(TX) 发送端状态 时钟跳变与数据跳变重合 接收端无法直接采样 时钟 数据(延时后) 延时偏移(Tskew补偿) 接收端理想状态 时钟跳变落在数据眼图中心 建立/保持裕量最大化 延时调整 眼图(未调整) 眼图(调整后) 眼图打开,采样裕量充足

回到这张图。左侧是发送端的情况——时钟和数据边沿对齐,信号经过 PCB 走线后到达接收端。如果什么都不做,时钟跳变仍然落在数据跳变附近,采样肯定出问题。右侧是我们想要的结果:通过 IDELAY 或其他方式,把数据(或时钟)的相位平移,让时钟边沿稳稳地落在数据眼图的中间。

嗯,到这里你应该能理解:延时调整不是锦上添花,而是 RGMII 正常工作的必要前提。没有它,千兆以太网根本跑不起来。