认识 RGMII 接口

各位工程师朋友,咱们今天开始聊 RGMII。这个接口在千兆以太网里太常见了,几乎是 MAC 和 PHY 之间的标配连接方式。我个人最早接触它的时候,觉得挺简单的——不就是 12 根线嘛。后来调试起来才发现,时序偏移才是真正的大坑。

RGMII 到底是什么?

RGMII,全称是 Reduced Gigabit Media Independent Interface。翻译过来就是「精简的千兆介质无关接口」。它用来连接 MAC 控制器和 PHY 收发器。为什么叫「精简」?因为相比以前的 GMII,它把数据线从 8 位降到了 4 位,引脚数少了一半。

说白了,你手里的 FPGA 要跑千兆以太网,基本都得通过 RGMII 和 PHY 芯片打交道。我做过好几个项目,从 Xilinx 到 Altera(现在叫 Intel 了),RGMII 都是最常用的选择。

信号组一览

RGMII 的信号组一共六组,全部是单端信号。我整理了一个表格,方便你对照着看:

信号名 位宽 方向 说明
TX_CLK 1 MAC → PHY 发送时钟,频率 125MHz(千兆)
TX_CTL 1 MAC → PHY 发送控制信号,包含 TX_EN 和 TX_ER
TXD[3:0] 4 MAC → PHY 发送数据总线
RX_CLK 1 PHY → MAC 接收时钟,由 PHY 恢复提供
RX_CTL 1 PHY → MAC 接收控制信号,包含 RX_DV 和 RX_ER
RXD[3:0] 4 PHY → MAC 接收数据总线

小提示: TX_CTL 和 RX_CTL 是复合信号。它们在时钟上升沿传输使能位,下降沿传输错误位。这种方法叫双沿采样(DDR),也是 RGMII 能省引脚的关键。

RGMII 的核心特点——双沿采样

为什么 RGMII 能用 4 根数据线做到千兆?因为它在时钟的上升沿和下降沿各传一次数据。举个例子:

时钟周期:   __    __    __    __    __
           |  |__|  |__|  |__|  |__|
           ↑     ↑     ↑     ↑     ↑
           |     |     |     |     |
          上升沿传低4位  下降沿传高4位

这样,125MHz 的时钟每个周期其实传了 8 位数据。4 根线 × 2 次/周期 × 125MHz = 1000Mbps。这不就出来了?

我第一次画 RGMII 的 PCB 时,没太在意走线等长。结果板子回来后,千兆模式根本不通。用示波器一看,TX_CLK 和 TXD 之间的偏移已经快到 2ns 了——这就是 RGMII 时序偏移的噩梦起点。

应用场景——MAC 到 PHY 的桥梁

RGMII 主要用在千兆以太网系统中,连接 MAC 和 PHY。典型的拓扑结构是这样的:

  • FPGA/SoC 内部集成 MAC,通过 RGMII 连接到外部的 PHY 芯片
  • PHY 再连接 RJ45(网口) 或 SFP 模块(光纤)
  • 工作模式:千兆(1000Mbps)和百兆(100Mbps)、十兆(10Mbps)

你想想看,要是没有 RGMII,用传统的 GMII 接口,数据线就得 8 根,再加控制线,FPGA 的引脚很快就用完了。我记得有个项目,板上同时要跑 4 路千兆以太网,每路省 4 根数据线,总共省了 16 个引脚——这可不是小数目。

时序偏移——RGMII 的核心挑战

RGMII 有两大时序要求,新手最容易栽在这里:

  1. 时钟与数据的相位关系:RGMII 要求时钟边沿与数据边沿对齐(源同步传输)
  2. 延迟补偿:PCB 走线、FPGA IO 延迟都会破坏这种对齐关系

警告: 千万不要以为 RGMII 的时序只要是「大概对齐」就行。千兆模式下,数据窗口只有约 4ns(250MHz DDR),留给你的裕度非常小。我见过有人因为走线长了 1cm 导致系统不稳定,掉包率高达 30%。

为什么需要时序偏移调整?

一句话:因为 RGMII 的时序窗口太小了。你想想看:

  • 时钟频率 125MHz,DDR 模式下等效 250MHz
  • 每个 bit 的宽度只有 2ns(千兆模式)
  • PCB 走线每相差 10mm,延迟差约 60ps
  • FPGA 内部的 IO 延迟变化范围可能达到 500ps

这些误差累积起来,很容易超过时序裕度。我做过一个统计,在普通的 4 层板设计中,如果不做任何偏移调整,大约有 60% 的板子在千兆模式下会出现不同程度的误码。

所以,我们才需要一套系统的时序偏移调整方法。这也是这门课要讲的核心内容。

RGMII 时序结构图

下面这张图展示了 RGMII 接口的完整结构和时序偏移的关键节点。看仔细了——

RGMII 接口结构与时序偏移关键节点 MAC 控制器 (FPGA / SoC) PHY 芯片 (外部收发器) TX 路径 (MAC → PHY) TX_CLK TX_CTL TXD[3:0] RX 路径 (PHY → MAC) RX_CLK RX_CTL RXD[3:0] 时序偏移调整关键节点 ① TX 时钟产生 FPGA PLL / MMCM ② PCB 走线延迟 等长误差 & 过孔 ③ IO 延迟 输出 / 输入延迟 ④ 采样窗口 建立 / 保持时间 链路上任何一个节点的延迟偏差,都会累积到采样窗口, 最终影响 RGMII 接口的稳定性和吞吐量。

从上图可以看到,RGMII 的时序偏移涉及四个关键节点。每个节点的延迟控制不好,都会影响最终的数据采样。可以说,整个 RGMII 调试的过程,就是跟这些延迟做斗争的过程。

小结

这一章我们认识了 RGMII 接口的基本概念、信号组成和典型应用场景。核心就记住三点:

  • 双沿采样 —— 125MHz 时钟下做到千兆速率
  • 信号分两组 —— TX 路径和 RX 路径,各自独立
  • 时序偏移是主要挑战 —— PCB 走线、FPGA 延迟都会破坏时序

我自己做过的项目中,凡是 RGMII 不稳定的,几乎都是时序偏移没处理好。接下来的章节,咱们会一步步深入分析这些偏移的来源,然后给出具体的调整方法。准备好了吗?