RGMII 接口概述

做硬件这些年,我一直觉得接口协议这东西,看手册是一回事,真正上板子调又是另一回事。RGMII 就是个典型——它看着简单,但信号时序和布局稍不注意就容易翻车。今天咱们先把这个接口的来龙去脉理清楚。

一句话总结:RGMII 就是把 GMII 的 8 位并行数据线压缩到 4 位,同时用 DDR(双沿采样)节省一半的引脚,是今天板上最常见的以太网 MAC-PHY 接口。

RGMII 标准介绍

RGMII 全称是 Reduced Gigabit Media Independent Interface,由惠普和思科在 2001 年左右推动。它把 GMII 的 24 根信号线砍到了 12 根(不含 MDIO/MDC),代价是时钟频率从 125 MHz 翻到 250 MHz 并在上下边沿都传数据。我个人习惯叫它“缩水版吉比特接口”——但别小看这个缩水,它让 PCB 布局从 8 对差分+若干单端变成了 4 对单端,走线难度降了很多。

标准定义了这些信号组:

  • 发送数据:TXD[3:0],TX_CLK,TX_CTL
  • 接收数据:RXD[3:0],RX_CLK,RX_CTL
  • 管理接口:MDC,MDIO(与接口速率无关)

有个细节容易忽略——RGMII v2.0 里对 TX_CTL 和 RX_CTL 的编码做了调整,早期版本得靠外部延时,后来直接集成了内部 DLL。我曾在一个项目里没注意版本差异,导致 PHY 和 MAC 的延时策略冲突,找了两天才发现是版本问题……嗯,这里提醒一句:看 PHY 手册时一定要先确认它支持哪个版本的 RGMII。

与 GMII / MII 的区别

拿最常见的 1000BASE-T 来说,GMII 需要 8 位 TXD、8 位 RXD,加上时钟和控制线,一共 24 根。RGMII 只用了 12 根。MII 更老,只到 100 Mbps,数据位宽只有 4 位。下面这个表能看清差异:

特性 MII GMII RGMII
支持速率 10/100 Mbps 10/100/1000 Mbps 10/100/1000 Mbps
数据位宽 4 bit 8 bit 4 bit(DDR)
时钟频率 25/2.5 MHz 125/25/2.5 MHz 125/25/2.5 MHz(DDR)
信号线数量 16 24 12
布局复杂度 容易 高(8 对等长) 中等(4 对等长)
BOM 成本 低 高(管脚多) 中
个人经验:做 8 层以下 PCB 时,GMII 的 24 根线经常把通道塞满,被迫用更宽的板层。换成 RGMII 后,布局就宽松很多——你想想看,省了 12 根线,就差出 6 对差分线的空间,够再放一组 SerDes 了。

应用场景

RGMII 现在的应用范围很广,从消费级路由器到工业控制板都在用。具体来说:

  • 以太网交换机 / 路由器:CPU 和 PHY 之间的连接,低成本下跑满千兆
  • FPGA + 外部 PHY:很多 FPGA 自带 RGMII I/O,省了 GMII 的引脚资源
  • 嵌入式 SoC(比如 i.MX、STM32MP):这些芯片的 EMAC 模块基本都支持 RGMII
  • 工业相机 / 机器视觉:千兆网口需要 RGMII 来降低接口密度,减少连接器引脚数

不过要注意:RGMII 只适用于芯片之间的短距离传输(通常不超过 10 厘米),没办法像 MDI 那样走长线。我曾经在一个项目里看到有人试图把 RGMII 走过背板……结果眼图全塌了,最后不得不换成 SGMII。

优势

  1. 引脚数少——这是最直接的收益,芯片封装小了,PCB 布线通道也省了
  2. 成本低——不需要额外的串行器,PHY 和 MAC 都很容易实现
  3. 兼容性好——向下兼容 MII 的 10/100 Mbps 速率,系统升级时不用改 MAC 侧的 RTL
  4. 时序简单——没有复杂的边带握手,信号相对规整(除非你遇到内部 DLL 的坑)
避坑指南:我曾经在做一块 4 层板时,RGMII 信号从 FPGA 到 PHY 之间串了 2 个过孔,结果 TX_CLK 的上升沿和下降沿延时差了 200 ps 以上,1000 Mbps 下直接报 CRC 错。后来把过孔去掉并等长走线,问题才解决。RGMII 的时序窗很小(只有 2 ns 左右),等长和参考层回流通路不能马虎。
RGMII 接口信号结构与 GMII 对比 GMII(24 根信号) TXD[7:0] + TX_CLK + TX_EN RXD[7:0] + RX_CLK + RX_DV CRS + COL + GTX_CLK MDC + MDIO(管理) 信号复用 DDR 合并 4 位→8 位 RGMII(12 根信号) TXD[3:0] + TX_CLK + TX_CTL RXD[3:0] + RX_CLK + RX_CTL MDC + MDIO(管理) (无 CRS/COL) 左侧 GMII 的 8 位数据线+独立控制信号, 通过 DDR 合并为右侧 RGMII 的 4 位数据线+复用的控制信号。 时钟关系 GMII: 125 MHz 单边沿 RGMII: 125 MHz DDR 实际采样率相同 应用优势 减少 50% 引脚数 降低 PCB 布局难度 兼容现有 MAC 逻辑

说白了,RGMII 就是用一个巧妙的 DDR 技巧,用引脚数量换取了布局灵活性。你想想看,12 根信号线在 4 层板上短距离走线,等长控制起来比 GMII 的 24 根轻松太多。但代价是时钟频率翻倍、时序预算缩窄——这是我们在后续章节里要解决的核心矛盾。

给新手的建议:选 PHY 的时候先确认它是否支持 RGMII v2.0 内部延时。如果只能用 v1.3 且外部加延时线,PCB 上一定要预留 RC 网络位置。我当年就是没留,后来只能飞线改板,狼狈得很。