RGMII 接口概述与标准
各位工程师朋友,咱们今天聊聊 RGMII。说白了,它就是 GMII 的“瘦身版”。
GMII 接口需要 24 根信号线,对于高速设计来说,PCB 布线简直是一场噩梦。RGMII 用了一个很聪明的办法——在时钟的上升沿和下降沿各采一次数据,这样就把数据线数量砍掉了一半,只需要 12 根信号线。这个想法我第一次看到的时候觉得挺妙的,但真的上手做项目时,就被时序 skew 折磨得不行。后面我会详细讲怎么补偿,但先得把它的底子摸清楚。
什么是 RGMII?从 DDR 到四线高效传输
RGMII 全称是 Reduced Gigabit Media Independent Interface。它最核心的改进,就是用了 DDR (Double Data Rate) 技术。时钟频率还是 125 MHz,但上升沿和下降沿各采一次 4 位数据,合起来就是 8 位,正好匹配 GMII 的 8 位数据宽度。这样一来,数据线从 8 根减到 4 根(TX 和 RX 各一组),控制线也合并了,总共只需要 12 根。
你们可能会问:为什么不用更高的时钟频率?嗯,原因很简单——125 MHz 是吉比特以太网的基准时钟,再往上升,信号完整性和时序难度都会暴涨。DDR 是一个平衡之道。
个人经验:我最早做 RGMII 项目时,以为只要把线连上就能跑。结果调试了整整一周,发现数据总是随机出错。后来才意识到,RGMII 的时序窗口非常窄,PCB 走线哪怕差个 0.5 ns,整个链路就崩了。从那以后,我对 RGMII 的时序格外小心。
信号定义——每根线都是干嘛的?
咱们把 RGMII 的信号分成两组:发送方向(MAC→PHY)和接收方向(PHY→MAC)。具体如下表:
| 信号名 | 方向 | 描述 | 备注 |
|---|---|---|---|
| TXD[3:0] | MAC → PHY | 发送数据总线(4 位) | DDR 方式,时钟双沿采样 |
| TX_CTL | MAC → PHY | 发送控制信号 | 上升沿指示数据有效,下降沿指示帧结束/错误 |
| TXC | MAC → PHY | 发送参考时钟(125 MHz) | 由 MAC 输出,通常是源同步 |
| RXD[3:0] | PHY → MAC | 接收数据总线(4 位) | 同样 DDR 采样 |
| RX_CTL | PHY → MAC | 接收控制信号 | 含义与 TX_CTL 类似 |
| RXC | PHY → MAC | 接收参考时钟(125 MHz) | 由 PHY 输出,需与数据同步 |
关于 TX_CTL 和 RX_CTL:这两个信号在 RGMII v1.0 里是单独的两根线(TX_EN 和 TX_ER)。到了 v2.0 标准,为了进一步减少引脚,把这两个控制信息合并到一根 CTL 线上。具体编码规则是:上升沿采到高电平表示数据有效(类似 TX_EN),下降沿采到高电平表示传输错误(类似 TX_ER)。实际项目中,很多 PHY 芯片仍然支持分开的控制模式,但我个人建议用合并模式,省引脚就是省成本。
电气特性——电压、阻抗、时序基本要求
RGMII 的电气接口有几个关键参数:
- 工作电压:常见有 3.3V 和 1.8V 两种。3.3V 用于传统 CMOS 电平,1.8V 用于 HSTL (High-Speed Transceiver Logic) 或 SSTL (Stub Series Terminated Logic)。如果你用的是 FPGA 做 MAC,大概率会走 1.8V HSTL。
- 阻抗要求:单端线阻抗通常控制在 50Ω ±10%,差分线如果需要走差分 RGMII(有些 PHY 支持)则要求 100Ω 差分阻抗。我一般要求 PCB 厂家保证走线阻抗在 50Ω ±5%。
- 时序预算:RGMII 标准规定数据相对于时钟的 建立时间 (Tsetup) 和 保持时间 (Thold) 各为 1 ns。你没看错——只有 1 ns 的窗口!125 MHz 的时钟周期是 8 ns,这 1 ns 的可容偏差非常紧张。
布线提示:发送方向的数据组(TXD + TX_CTL)与 TXC 的走线长度差应控制在 ±100 mil(约 2.5 mm)以内。接收方向同理。我曾经在一个四层板项目里因为忽略了等长控制,导致时序违例,后来不得不割线飞线重做。
说到电气特性,还有一个很容易踩的坑:参考时钟的抖动 (Jitter)。MAC 输出的 TXC 时钟如果抖动超过 ±200 ps,就会直接吃掉时序裕量。所以,我会在 FPGA 内部用 PLL 产生 TXC 时,额外加一个抖动滤波器。
警告:千万不要把 RXC 和 TXC 的相位关系想当然。RGMII v2.0 强制要求 MAC 发送的 TXC 相对于 TXD/TX_CTL 有 90° 相移(中心对齐),而 PHY 发送的 RXC 相对于 RXD/RX_CTL 也有 90° 相移。这一点后续章节会详细讲如何补偿,但你必须记住:默认情况下的相位关系不是边沿对齐,很多初学者在这里翻车。
典型应用场景
RGMII 现在几乎是千兆以太网的事实标准。常见的应用场景有:
- SoC 与 PHY 直连:绝大多数 ARM/MIPS SoC 内置了 RGMII MAC,外接一颗千兆 PHY(如 RTL8211、YT8512)。这是路由器、交换机的主板方案。
- FPGA 作为 MAC 控制器:当你的网络协议需要定制化时,FPGA 是最灵活的方案。我在 Xilinx 和 Intel FPGA 上都用过 RGMII,需要例化内部的 I/O 延迟单元来补偿 skew。
- 光纤到以太网转换:通过 SFP 模块接光纤,然后 PHY 转 RGMII 给 MAC。这种场景下,RXC 的相位稳定性尤为重要,光模块的时钟恢复电路可能会引入额外的抖动。
- 背板通信:在高性能计算或者通信设备中,RGMII 也经常用于板间连接。不过这时要注意信号完整性,走线长度往往较长,需要加缓冲器。
我遇到过最头疼的一个项目,是把 RGMII 通过 10 cm 长的 PCB 走线连接到另一块子板。子板上的 PHY 芯片对相位特别敏感,最后靠加入可编程延迟线才解决问题。所以说,RGMII 虽然接口“瘦”了,但对 PCB 设计和时序补偿的要求反而更高了。
好了,这章的内容就到这儿。记住 RGMII 的三大核心:DDR 采样、12 线信号、1 ns 时序窗口。后面我们会一步步把 skew 补偿的方法吃透。