1. RGMII 接口概述

RGMII——Reduced Gigabit Media Independent Interface,直译过来就是“简化吉比特介质无关接口”。说白了,它是把原来的 25 根线(GMII)一刀砍到 12~13 根,省引脚、省 PCB 走线空间。我个人最早接触 RGMII 是在一个 4 端口交换机项目上,那时候对时序还不太敏感,结果样板一测,千兆死活不通。嗯,从那以后我就老老实实把 RGMII 的“定时关系”琢磨透了。

1.1 标准定义

RGMII 由 HP 公司与 Cisco 公司在 2000 年左右共同提出,后来被 IEEE 802.3 附件收录。它保留 GMII 的数据通道宽度(4-bit),但把时钟频率从 125 MHz 降为 125 MHz 双沿采样(DDR),实际上每位数据只用了半个时钟周期。在千兆模式下,芯片在时钟上升沿发送低 4 位,下降沿发送高 4 位。这样一根时钟线就能搞定 8-bit 数据的同步。

我建议大家把 RGMII 视为一个“简化版 DDR 接口”——它的核心就是源同步双沿传输。你想想看,一根时钟线要承载两倍数据速率,对时钟占空比、skew 的要求自然就高了。

项目GMIIRGMII
信号线数24(含独立收发时钟)12~13(收发共用时钟或独立)
数据宽度8-bit 单沿4-bit 双沿(DDR)
时钟频率(千兆)125 MHz125 MHz(双沿等效 250 MT/s)
典型封装LQFP 多引脚BGA 少引脚

1.2 信号分类

RGMII 分成两大组:发送组和接收组。每组里就几根线——数据、时钟、控制。

  • TXD[3:0] — 发送数据,4-bit 双沿。我曾经在某款 PHY 上踩过坑:TXD 布线等长没做好,导致上升沿和下降沿采样到的数据错位。后来强制约束每根 TXD 与 TX_CLK 的时延差在 ±50 ps 以内才算过关。
  • TX_CLK — 发送时钟,由 MAC 或 PHY 提供(取决于工作模式)。频率 125 MHz(千兆)或 25 MHz(百兆)。注意:百兆模式下是单沿采样。
  • TX_CTL — 发送控制信号,编码帧首/错误等信息。在 RGMII 里不仅做使能,还带“编码”功能。
  • RXD[3:0] — 接收数据,同样双沿。
  • RX_CLK — 接收时钟,由 PHY 恢复给 MAC。
  • RX_CTL — 接收控制信号。

重点:RGMII 没有独立的数据有效信号,而是把 TX_EN 和 TX_ER 编码进 TX_CTL 里。在上升沿采样 TX_EN,下降沿采样 TX_ER。设计 PCB 时必须保证 TX_CTL 与 TX_CLK 的时序一致。

1.3 电气特性(VOH/VOL/阈值)

RGMII 的电气标准基于 LVCMOS 1.8V 或 3.3V,具体取决于芯片 I/O 电压。多数现代芯片用 1.8V 以降低功耗。关键参数如下:

参数最小值典型值最大值单位
VOH(输出高)VDDIO - 0.4—VDDIOV
VOL(输出低)0—0.4V
VIH(输入高阈值)0.65 × VDDIO—VDDIO+0.3V
VIL(输入低阈值)−0.3—0.35 × VDDIOV

个人习惯:在原理图阶段就给 RGMII 信号加上串联电阻(22Ω~33Ω),靠近源端放置。这样能抑制过冲,改善信号完整性。我曾在一个项目里没加电阻,结果眼图测试发现过冲高到 2.4V(1.8V 电平),差点把 PHY 烧了。

1.4 典型应用场景

RGMII 几乎统治了交换机、路由器、FPGA 开发板、SoC 与 PHY 之间的互联。具体场景:

  • 家用路由器:CPU 内部 MAC 通过 RGMII 连接外部千兆 PHY,成本敏感但性能足够。
  • 工业以太网:需要 ESD 隔离,RGMII 信号通常经过磁性变压器或 RJ45 模块,但接口本身还是 RGMII。
  • FPGA 高速通信:Xilinx Zynq / Altera SoC 的硬核 MAC 往往引出 RGMII,FPGA 内部做协议栈或硬件加速。
  • 背板互联:短距离板对板用 RGMII 可省大量走线,我曾见过一块背板上 8 路 RGMII 跑满千兆无串扰。

1.5 RGMII 接口知识体系

下面这张图把 RGMII 的整体知识结构画出来了,大家可以对照着理解各知识点的关联。

RGMII 接口知识体系 RGMII 接口知识体系 RGMII 接口 标准定义 信号分类 电气特性 应用场景 IEEE 802.3 DDR 传输 TXD/TX_CLK RX_CTL 编码 双沿采样 LVCMOS 1.8V 阈值 VIH/VIL 交换机/路由器 FPGA 开发板 工业以太网 核心:双沿采样 + 源同步时钟 + LVCMOS 电气

注意:RGMII 的时序窗口非常窄——千兆模式下数据有效窗口只有约 1 ns。我曾经调试过一块 6 层板,因为 FPGA 内部 PLL 相位没配好,导致 RX_CLK 和 RXD 之间差了 500 ps,整个链路丢包率高达 30%。后来在约束文件里加了 -500 ps 的 set_output_delay 才解决。

1.6 小结

RGMII 看似简单——就十几根线,但它的双沿 125 MHz 传输对 PCB 布局、时序约束和信号完整性都提出了不低的要求。记住几个关键点:

  1. 时钟和数据必须等长,组内偏差尽量 < 50 ps。
  2. 串阻不能省,1.8V 接口用 22Ω 附近值,具体根据仿真调整。
  3. 控制信号(TX_CTL / RX_CTL)编码规则:上升沿是 TX_EN,下降沿是 TX_ER,别搞反。
  4. 百兆模式兼容:时钟 25 MHz 单沿,但信号线复用同一组,注意 PHY 配置。

我自己在设计 RGMII 时,会先把 PHY Data Sheet 里的时序图打印出来,拿荧光笔标出 setup/hold 时间,然后用 FPGA 的 IDELAY / ODELAY 微调相位。这种方法虽然土,但很稳——因为你永远不知道下一颗芯片的 PVT 会偏移多少。