RGMII 接口概述与时序要求
RGMII(Reduced Gigabit Media Independent Interface)是千兆以太网里用得最多的接口之一。它把 MAC 和 PHY 连起来,信号线一共就 12 根——相比 GMII 少了一大半。我当年第一次画 RGMII 布局时,心想“线这么少,肯定好走”。结果板子调了三天,千兆死活 link 不上,抓波形才发现数据采样窗口偏移了将近 1.2 ns。说白了,RGMII 的时序容限很窄,PCB 上一丁点偏差都会导致数据出错。
1.1 信号分组与双沿采样
RGMII 把原来的 8 位数据总线压缩成 4 位,利用时钟的上升沿和下降沿各传 4 bit,这样就把 TXD[3:0] 和 RXD[3:0] 两根总线用了起来。再加上 TXC(发送时钟)、RXC(接收时钟)、TX_CTL、RX_CTL,一共 12 个信号。我习惯把 RGMII 信号分成三组:
- 时钟组:TXC、RXC。频率 125 MHz,周期 8 ns。由 MAC 或 PHY 提供,取决于具体实现。
- 数据组:TXD[3:0]、RXD[3:0]。上升沿传低 4 bit,下降沿传高 4 bit。
- 控制组:TX_CTL、RX_CTL。组合了 GMII 中的 TX_EN、TX_ER 等信号,同样在双沿采样。
1.2 时序参数与容限
RGMII 的时序核心在于:数据必须在时钟边沿附近保持稳定,且 skew(数据与时钟之间的相对延迟)不能超过规定值。IEEE 802.3 对 RGMII 的时序要求如下(我常用的一组典型值):
| 参数 | 符号 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|---|
| 时钟周期(125 MHz) | Ttcyc | 7.98 | 8.0 | 8.02 | ns |
| 数据与时钟 skew | Tskew | -1.0 | 0 | +1.0 | ns |
| 建立时间(接收端) | Tsetup | 1.0 | — | — | ns |
| 保持时间(接收端) | Thold | 1.0 | — | — | ns |
| 输出延迟(发送端) | Tod | 0.5 | 0.8 | 1.2 | ns |
你仔细看这个表,skew 范围只有 ±1 ns。而一个 125 MHz 周期是 8 ns,建立/保持要求各 1 ns,意味着实际有效窗口只有 6 ns 左右。如果 PCB 走线长度不一致,造成数据与时钟的延迟差超过 1 ns,时序就崩了。
1.3 内部延迟 vs PCB 等长
为了补偿 PCB 走线造成的 skew,很多 MAC 和 PHY 内部都集成了可编程延迟(IDELAY / ODELAY)。我一般在 RGMII 数据线上串联 0 Ω 电阻,调试时先用内部延迟,若不够再调整 PCB 长度。下面这张图示意了 RGMII 信号在 PCB 上的典型连接关系:
1.4 PCB 布局对 skew 的直接影响
为什么说 RGMII 的时序偏差根源在 PCB 布局?我直接说结论:走线长度差是 skew 的主要来源。FR4 板材上信号传播速度大约为 170 ps/inch(约 6.7 ps/mm)。如果同一组中最长与最短的走线差了 150 mil,skew 就差了将近 1 ns,正好凑到极限值。所以:
- 等长布线:同一组内所有信号(时钟 + 数据 + 控制)走线长度差控制在 ±50 mil 以内。我自己的设计规则是 ±25 mil。
- 参考连续地平面:信号必须有完整的参考层,否则阻抗不连续会产生额外的延迟抖动。
- 远离高频干扰:时钟线尽量不与其它高速线平行走超过 500 mil。
1.5 典型时序偏差源总结
下面这个表格列出了我调试 RGMII 时序时验出来的常见偏差源,以及它们的量级:
| 偏差源 | 典型量级 | 应对策略 |
|---|---|---|
| PCB 走线长度差(100 mil) | ~0.7 ns | 手动等长,蛇形线补偿 |
| 过孔数量差异(每多 1 个过孔) | ~30 ps | 同类信号使用相同过孔数 |
| 封装引脚差异(BGA vs QFN) | 50~200 ps | 芯片选型时检查封装延时数据 |
| 内部 IDELAY 量化步长 | 50~100 ps/step | 调试阶段预留配置寄存器接口 |
| 温度漂移(-40°C~+85°C) | ~150 ps | 留出足够设计余量,至少 300 ps |
这些偏差单个看都不大,但叠加起来就容易超过 ±1 ns 的容限。我通常把 PCB 走线引入的 skew 控制在 ±0.4 ns 以内,这样即使温度变化和芯片离散性加起来,总 skew 也能保持在 0.9 ns 以下,留出 0.1 ns 的安全边。