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 常用延时实现方式
实际工程中,我们不只靠一种手段。下面是常见的四种方案:
- PCB 等长布线——打好基础,减少固定偏差。但无法补偿芯片内部和温漂。
- 芯片内部可编程延时链(IDELAY)——最灵活,FPGA 和高端 PHY 都支持。可以软件动态调整。
- 时钟相位调整(PLL/DLL)——调整时钟相位来对齐数据。比如把时钟延迟 90° 或 90° 再加微调。
- RGMII ID 引脚(可选)——部分 PHY 提供内置 90° 延时,但精度有限。
我个人偏好IDELAY + 自动校准的方案。启动时先做一次眼图扫描,找到最佳延时点,然后锁定。运行时再根据误码率微调。
核心思想: 延时调整不是把时钟和数据画一条等长线就完事。它是在每个接收端、每个通道、每个温度点上,动态地把采样点推到数据眼图的正中央。
回到这张图。左侧是发送端的情况——时钟和数据边沿对齐,信号经过 PCB 走线后到达接收端。如果什么都不做,时钟跳变仍然落在数据跳变附近,采样肯定出问题。右侧是我们想要的结果:通过 IDELAY 或其他方式,把数据(或时钟)的相位平移,让时钟边沿稳稳地落在数据眼图的中间。
嗯,到这里你应该能理解:延时调整不是锦上添花,而是 RGMII 正常工作的必要前提。没有它,千兆以太网根本跑不起来。