第4章 源同步接口的时序分析

RGMII 本质上是一种源同步接口。什么意思呢?就是发送端自己产生时钟,和数据一起送出去。接收端直接用这个时钟去采数据。听起来比全局时钟简单,对吧?但实际做起来,坑一点不少。

我早年做第一个百兆项目时,觉得 RGMII 不就是四根线嘛,PCB 走线等长不就行了?结果板子回来,偶尔丢包。查了三天,最后发现是时钟和数据之间有个很小的相位偏移,导致建立时间不够。嗯,从那以后,我每次画 RGMII 布局前,都要仔细算一遍时序裕量。

4.1 源同步接口的时序要素

要理解时序分析,先得说清楚几个关键参数。你想想看,接收端看到的数据和时钟是什么关系?

  • Tcycle:时钟周期。千兆 RGMII 是 125 MHz,周期 8 ns。
  • Tco:发送端从时钟边沿到数据输出的延迟。通常芯片手册会给出最小值/最大值。
  • Tskew:时钟与数据之间的偏斜。RGMII 要求时钟边沿对齐数据中间,理想偏斜是 0,但实际有误差。
  • Tsetup:接收端需要的建立时间。
  • Thold:接收端需要的保持时间。

说白了,时序分析就是算一笔账:数据从发送端出来,经过 PCB 走线,到达接收端,比时钟早到多久?晚到多久?这笔账算不清楚,板子就不可能稳定工作。

小贴士:我习惯把 Tskew 拆成两部分看——发送端内部的抖动和 PCB 走线长度差。内部抖动手册会给出,PCB 部分则靠 layout 规矩去控制。

4.2 时序裕度计算公式

RGMII 的接收时序分析,核心是两个不等式。用文字说就是:

  1. 建立时间裕度 = (数据到达时间 - 时钟到达时间) - Tsetup
  2. 保持时间裕度 = (时钟到达时间 - 数据到达时间) - Thold

把具体参数带进去,比如一个典型千兆 PHY 芯片:Tco(min)=0.5 ns,Tco(max)=2.0 ns,PCB 走线延迟按 150 ps/inch 估算,假设你的走线长度差控制在 0.5 inch 以内。那么:

参数最小值 (ns)最大值 (ns)
Tco0.52.0
PCB 走线延迟差00.3
总偏斜 Tskew0.52.3
接收端 Tsetup1.0
接收端 Thold0.5

你看,在最差情况下,数据相对时钟只提前 0.5 ns 到达。而接收端需要 1.0 ns 的建立时间。这显然不满足!所以必须加内部延时,比如在 FPGA 里用 IDELAY 把数据往后推 1.5 ns,或者用 PLL 把时钟相位移 90°。

注意:千万不要以为芯片手册的典型值就是你的实际值。我曾经一个案子,手册写 Tco max = 2.0 ns,但有一批芯片到了 2.5 ns,直接导致高温下时序崩塌。所以计算时一定用最大值和最小值,别省事。

4.3 我的实战避坑清单

  • 走线等长≠时序满足:等长只是减少 PCB 延迟差,但芯片内部的 Tco 差异才是大头。所以每个 RGMII 通道都要单独做延时校准。
  • 别信仿真数据:板厂给的 PCB 延迟模型往往偏理想。我吃过亏:仿真通过,量产 10% 的板子不稳定。后来干脆在 FPGA 里加自动校准逻辑,跑一次调一次。
  • 双沿采样是重点:RGMII 在时钟上升沿和下降沿都传数据。如果上升沿没问题,下降沿出问题,别急着怀疑芯片,先去查占空比。
核心结论:源同步接口的时序分析,说到底就是“把数据窗口对准时钟采样沿”。你不需要做到理论上的 0 偏斜,只要保证裕量大于 0 就行。但工程上,我建议留出至少 0.5 ns 的裕量。

4.4 时序分析流程框架

下面这张图,是我做 RGMII 调试时脑子里一直挂着的流程。每一步都对应一个检查点,回头翻也方便。

RGMII 时序分析流程 1. 收集芯片时序参数 2. 计算 PCB 走线延迟差 3. 计算数据-时钟总偏斜 4. 建立/保持时间裕量检查 5. 如果裕量不足 → 添加内部延时校准 注意:内部延时校准通常使用 IDELAY、ODELAY 或 PLL 相移 调试时建议从 0.5ns 步进开始,逐步逼近最佳点。

这套流程我用了好几年,每次新项目都会走一遍。平时 PCB 阶段就提前估算,等样板回来再用示波器实测数据与时钟边沿位置,对比手册给的范围。如果实测偏小,就在软件里把 FPGA 的 IDELAY 往上调一两档。

避坑提醒:我曾经在一个四层板项目上,省了走线等长约束,企图靠内部延时全部补回来。结果四路 RGMII 每个通道需要的延时都不一样,调整量覆盖了整个 IDELAY 范围。从那以后我老老实实画等长,内部延时只用来补偿芯片离散性,不背 PCB 的债。

最后总结一句话:源同步接口的时序分析不是单纯的理论计算,而是“理论+实测+迭代”的过程。你只要把流程走通了,后续调延时就会变得很机械——上示波器、读芯片状态、调 IDELAY、确认眼图,重复三次就好了。