RGMII 接口概述与标准

各位工程师朋友,咱们今天聊聊 RGMII。说白了,它就是 GMII 的“瘦身版”。

GMII 接口需要 24 根信号线,对于高速设计来说,PCB 布线简直是一场噩梦。RGMII 用了一个很聪明的办法——在时钟的上升沿和下降沿各采一次数据,这样就把数据线数量砍掉了一半,只需要 12 根信号线。这个想法我第一次看到的时候觉得挺妙的,但真的上手做项目时,就被时序 skew 折磨得不行。后面我会详细讲怎么补偿,但先得把它的底子摸清楚。

RGMII 接口知识体系 RGMII 接口 协议标准 IEEE 802.3 / RGMII v2.0 信号定义 TXD/RXD/CTL/CLK 电气特性 1.8V/3.3V HSTL/SSTL 时序要求 Tsetup/Thold/Skew 应用场景 Switch/SoC/FPGA 核心概念:DDR 双沿采样 时钟上升沿与下降沿各传输一组数据,线数减半

什么是 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_CTLMAC → PHY发送控制信号上升沿指示数据有效,下降沿指示帧结束/错误
TXCMAC → PHY发送参考时钟(125 MHz)由 MAC 输出,通常是源同步
RXD[3:0]PHY → MAC接收数据总线(4 位)同样 DDR 采样
RX_CTLPHY → MAC接收控制信号含义与 TX_CTL 类似
RXCPHY → 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 现在几乎是千兆以太网的事实标准。常见的应用场景有:

  1. SoC 与 PHY 直连:绝大多数 ARM/MIPS SoC 内置了 RGMII MAC,外接一颗千兆 PHY(如 RTL8211、YT8512)。这是路由器、交换机的主板方案。
  2. FPGA 作为 MAC 控制器:当你的网络协议需要定制化时,FPGA 是最灵活的方案。我在 Xilinx 和 Intel FPGA 上都用过 RGMII,需要例化内部的 I/O 延迟单元来补偿 skew。
  3. 光纤到以太网转换:通过 SFP 模块接光纤,然后 PHY 转 RGMII 给 MAC。这种场景下,RXC 的相位稳定性尤为重要,光模块的时钟恢复电路可能会引入额外的抖动。
  4. 背板通信:在高性能计算或者通信设备中,RGMII 也经常用于板间连接。不过这时要注意信号完整性,走线长度往往较长,需要加缓冲器。

我遇到过最头疼的一个项目,是把 RGMII 通过 10 cm 长的 PCB 走线连接到另一块子板。子板上的 PHY 芯片对相位特别敏感,最后靠加入可编程延迟线才解决问题。所以说,RGMII 虽然接口“瘦”了,但对 PCB 设计和时序补偿的要求反而更高了。

好了,这章的内容就到这儿。记住 RGMII 的三大核心:DDR 采样、12 线信号、1 ns 时序窗口。后面我们会一步步把 skew 补偿的方法吃透。