RGMII 接口概述
RGMII 全称 Reduced Gigabit Media Independent Interface,说白了就是简化版的千兆媒体独立接口。它把原本 GMII 的 8 位数据线砍成 4 位,靠双沿采样把速率拉回一样,这样 PCB 走线能少一半。我最早接触它是在一个通信板卡项目上,当时觉得「4 根线跑千兆挺酷的」,结果被时钟相位折腾了一周——嗯,后面再细说。
信号定义:就那么几根线
RGMII 的信号线不多,发送和接收各 6 根,一共 12 根。你记下这张表就够了:
| 信号名 | 方向 | 说明 |
|---|---|---|
| TXD[3:0] | MAC → PHY | 发送数据总线(4 bit) |
| TX_CTL | MAC → PHY | 发送控制信号(TX_EN 与 TX_ER 编码) |
| TXC | MAC → PHY | 发送时钟(125MHz,与数据存在相位关系) |
| RXD[3:0] | PHY → MAC | 接收数据总线(4 bit) |
| RX_CTL | PHY → MAC | 接收控制信号(RX_DV 与 RX_ER 编码) |
| RXC | PHY → MAC | 接收时钟(125MHz,由 PHY 产生) |
所有数据信号都是 DDR 双沿采样,除了时钟本身是单沿时钟。TX_CTL 和 RX_CTL 是两根控制线合二为一,在上升沿送使能,下降沿送错误标志。说起来简单,实际项目中很多人把 TX_CTL 和 TX_EN 搞混——我曾经见过一块板子直接把 TX_EN 连上去,结果 PHY 死活不 link up。
时钟与数据关系:相位才是命门
RGMII 标准定义了两种时钟方案:
- 内部延迟模式:MAC 侧把时钟相对于数据偏移 90°(约 2ns),这样 PHY 可以直接用上升沿采样数据。
- 外部延迟模式:MAC 输出时钟和数据同相,由 PCB 走线或 FPGA 内部的 IDELAY 来提供延迟。
你想想看,为什么要有这 90° 偏移?因为 DDR 信号在跳变沿附近最容易出现建立/保持时间违例。标准规定数据在时钟边沿切换,如果接收端直接用同一个时钟沿采样,那就等于在数据正在变化的时候抓值,赌的就是运气。偏移 90° 后,采样点落在数据稳定的中间区域,这样就稳了。
这是我在项目中画过无数次的时序关系图,今天用 SVG 重现一下:
图里标得很清楚:左边内部延迟模式的采样点正好在数据窗口中间,右边外部延迟模式因为时钟和数据同相,采样点打在数据跳变沿上——这也是为什么外部延迟模式下 PCB 必须通过蛇形走线或者 FPGA 的 IDELAY 把时钟往前推一点。我当年第一次画原理图,就想当然地把 TXC 和 TXD 走成等长,结果 PHY 侧采到全是毛刺。
信号完整性对相位的影响
说了这么多,其实影响延时校准的最根本因素是 PCB 上走线的不对称、阻抗不连续、以及过孔带来的寄生效应。我见过一个案例:某板卡 6 层板,RGMII 走线在中间层,结果差分阻抗跑到 80Ω,信号反射导致时钟抖动大了 200ps。嗯,200ps 对于一个 2ns 的偏移窗口来说,基本就是10%的误差了,丢包率开始冒头。
所以后面我们专门讲《延时校准偏差导致 RGMII 丢包排查案例》的时候,会把这些场景一一拆开。今天这章是基础,你得把信号定义和相位关系刻在脑子里,后面排查才会快。