1. RGMII 协议简介

1.1 什么是 RGMII

RGMII,全称 Reduced Gigabit Media Independent Interface,中文叫简化千兆媒体独立接口。说白了,它就是用来连接以太网 MAC 和 PHY 的一根“数据桥”。

我最早接触 RGMII 是在一个千兆交换机项目上。当时芯片手册密密麻麻,但看懂 RGMII 之后,整个链路就豁然开朗了。它最大的特点是——用 DDR 技术,在时钟的上升沿和下降沿都传数据。这样数据线从 8 根减到 4 根,引脚数直接砍半。

RGMII 主要用于千兆以太网(1000 Mbps),同时也向下兼容 100 Mbps 和 10 Mbps 模式。你想想看,一个接口搞定三种速率,设计起来省事不少。

核心特点:
  • 4 位数据总线(DDR 双沿采样)
  • 时钟频率 125 MHz(千兆模式)
  • 信号总数仅 6~7 根,PCB 布线压力小
  • 兼容 10/100/1000 Mbps 三种速率

1.2 信号列表与定义

先上一张完整的信号表,这是我每次设计 RGMII 接口时必查的清单。

信号名 方向 位宽 功能描述
TX_CLK MAC → PHY 1 发送时钟,千兆时 125 MHz,百兆时 25 MHz,十兆时 2.5 MHz
TX_CTL MAC → PHY 1 发送控制信号,由 TX_EN 和 TX_ER 异或得到
TXD[3:0] MAC → PHY 4 发送数据总线,DDR 方式在上下沿各传 4 bit
RX_CLK PHY → MAC 1 接收时钟,由 PHY 恢复产生,频率与速率匹配
RX_CTL PHY → MAC 1 接收控制信号,由 RX_DV 和 RX_ER 异或得到
RXD[3:0] PHY → MAC 4 接收数据总线,DDR 方式在上下沿各传 4 bit
GTX_CLK MAC → PHY 1 千兆模式下专用发送时钟,125 MHz(部分实现使用)
个人习惯: 我建议在设计原理图时,把 TX_CLK 和 GTX_CLK 的引脚关系先搞清楚。有些 PHY 芯片在千兆模式下用 GTX_CLK,百兆/十兆模式下用 TX_CLK,接反了信号就乱了。

这里有个很容易踩的坑——TX_CTL 和 RX_CTL 不是简单的使能信号。它们是把使能(EN)和错误(ER)通过异或编码到一根线上,然后在接收端再解码。为什么要这么干?因为 RGMII 只有 4 根数据线,控制线能省则省。

1.3 时钟与数据的关系

这是整个 RGMII 时序评估的核心,也是多数工程师容易翻车的地方。我们先看基础:DDR 采样。

在千兆模式下,时钟 125 MHz,周期 8 ns。每个时钟沿(上升沿和下降沿)各传 4 bit 数据,合起来就是 8 bit,正好一个字节。这就是"简化"的奥秘——用 4 根线干 8 根线的活。

注意! RGMII 有两个版本,时序要求完全不一样:
  • v1.0:时钟边沿与数据边沿对齐。也就是说,时钟跳变的时候数据也在跳变。建立时间和保持时间几乎为零,对 PCB 走线长度极其敏感。
  • v2.0/v2.5:时钟相对于数据偏移了 90 度(2 ns@125 MHz)。时钟沿落在数据的中间位置,时序裕量大大改善。

我记得有个项目,选了一款老 PHY 芯片,只支持 v1.0 规范。板子打样回来,千兆模式死活不通,示波器一看,数据建立时间只有几十皮秒。后来没办法,在 TX_CLK 走线上额外加了延迟线才搞定。所以我现在选型,第一件事就是看 PHY 是否支持 v2.0 以上的内部延迟。

来看一下接口的整体连接关系,我画了一张图帮你建立直觉:

RGMII 接口连接与信号结构 MAC 控制器 发送通道 (TX) 接收通道 (RX) 时钟管理 PHY 芯片 接收通道 (RX) 发送通道 (TX) 时钟恢复 TX_CLK TX_CTL TXD[3:0] RX_CLK RX_CTL RXD[3:0] GTX_CLK(千兆模式专用) DDR 传输:时钟上升沿传低 4 bit,下降沿传高 4 bit,合成一个字节 v2.0+ 时钟偏移 90°(2 ns@125 MHz),数据沿对齐时钟沿中间,时序裕量最大

从图上你能看到,发送通路和接收通路是独立的,各自有各自的时钟。这就意味着 TX 和 RX 的时序要分别评估,不能混着算。

关于相位偏移,再多说一句。v2.0 的 90 度偏移可以在 MAC 内部做,也可以在 PHY 内部做,还可以在 PCB 走线上做。我个人习惯是在 PHY 侧开启内部延迟(通过寄存器配置),这样 PCB 走线可以等长,调试起来也灵活。我曾经遇到过一块板子,MAC 和 PHY 都声称支持 v2.0,但两边都没开延迟,结果实际测出来还是边沿对齐——白忙活一场。

1.4 常见应用场景

RGMII 在现在的网络设备里几乎无处不在。我简单列几个典型的:

  • 千兆交换机:交换芯片和 PHY 芯片之间用 RGMII 连接,一台 24 口交换机可能会用到 6~8 路 RGMII。
  • 路由器/网关:CPU 或 SoC 的 MAC 通过 RGMII 接外置 PHY,实现千兆以太网口。
  • FPGA 开发板:很多 FPGA 开发板上的千兆以太网接口就是 RGMII,FPGA 内部实现 MAC,外接一个 PHY 芯片。
  • 工业通信模块:需要高速以太网的工控板卡,RGMII 是主流的板级互联方式。
选型建议:我在做 FPGA 方案时,特别喜欢 RGMII 的简洁性——FPGA 只需 6 个 IO 加上一个 125 MHz 时钟源就能跑千兆。但要注意,FPGA 的 IO 时序可能不如 ASIC 那么强,建议优先选支持 v2.5 可调延迟的 PHY,给调试留点余地。

总结一下。RGMII 用最少的引脚实现了千兆以太网的 MAC-PHY 互联,核心在于 DDR 技术和时钟相位管理。第一章先把接口定义和信号关系搞清楚,后面再聊时序裕量评估,你就会有更具体的画面感。