RGMII 接口概述
做硬件这些年,我一直觉得接口协议这东西,看手册是一回事,真正上板子调又是另一回事。RGMII 就是个典型——它看着简单,但信号时序和布局稍不注意就容易翻车。今天咱们先把这个接口的来龙去脉理清楚。
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 成本 | 低 | 高(管脚多) | 中 |
应用场景
RGMII 现在的应用范围很广,从消费级路由器到工业控制板都在用。具体来说:
- 以太网交换机 / 路由器:CPU 和 PHY 之间的连接,低成本下跑满千兆
- FPGA + 外部 PHY:很多 FPGA 自带 RGMII I/O,省了 GMII 的引脚资源
- 嵌入式 SoC(比如 i.MX、STM32MP):这些芯片的 EMAC 模块基本都支持 RGMII
- 工业相机 / 机器视觉:千兆网口需要 RGMII 来降低接口密度,减少连接器引脚数
不过要注意:RGMII 只适用于芯片之间的短距离传输(通常不超过 10 厘米),没办法像 MDI 那样走长线。我曾经在一个项目里看到有人试图把 RGMII 走过背板……结果眼图全塌了,最后不得不换成 SGMII。
优势
- 引脚数少——这是最直接的收益,芯片封装小了,PCB 布线通道也省了
- 成本低——不需要额外的串行器,PHY 和 MAC 都很容易实现
- 兼容性好——向下兼容 MII 的 10/100 Mbps 速率,系统升级时不用改 MAC 侧的 RTL
- 时序简单——没有复杂的边带握手,信号相对规整(除非你遇到内部 DLL 的坑)
说白了,RGMII 就是用一个巧妙的 DDR 技巧,用引脚数量换取了布局灵活性。你想想看,12 根信号线在 4 层板上短距离走线,等长控制起来比 GMII 的 24 根轻松太多。但代价是时钟频率翻倍、时序预算缩窄——这是我们在后续章节里要解决的核心矛盾。