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_CTL 和 RX_CTL 不是简单的使能信号。它们是把使能(EN)和错误(ER)通过异或编码到一根线上,然后在接收端再解码。为什么要这么干?因为 RGMII 只有 4 根数据线,控制线能省则省。
1.3 时钟与数据的关系
这是整个 RGMII 时序评估的核心,也是多数工程师容易翻车的地方。我们先看基础:DDR 采样。
在千兆模式下,时钟 125 MHz,周期 8 ns。每个时钟沿(上升沿和下降沿)各传 4 bit 数据,合起来就是 8 bit,正好一个字节。这就是"简化"的奥秘——用 4 根线干 8 根线的活。
- v1.0:时钟边沿与数据边沿对齐。也就是说,时钟跳变的时候数据也在跳变。建立时间和保持时间几乎为零,对 PCB 走线长度极其敏感。
- v2.0/v2.5:时钟相对于数据偏移了 90 度(2 ns@125 MHz)。时钟沿落在数据的中间位置,时序裕量大大改善。
我记得有个项目,选了一款老 PHY 芯片,只支持 v1.0 规范。板子打样回来,千兆模式死活不通,示波器一看,数据建立时间只有几十皮秒。后来没办法,在 TX_CLK 走线上额外加了延迟线才搞定。所以我现在选型,第一件事就是看 PHY 是否支持 v2.0 以上的内部延迟。
来看一下接口的整体连接关系,我画了一张图帮你建立直觉:
从图上你能看到,发送通路和接收通路是独立的,各自有各自的时钟。这就意味着 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 是主流的板级互联方式。
总结一下。RGMII 用最少的引脚实现了千兆以太网的 MAC-PHY 互联,核心在于 DDR 技术和时钟相位管理。第一章先把接口定义和信号关系搞清楚,后面再聊时序裕量评估,你就会有更具体的画面感。