认识 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 | 接收数据总线 |
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 有两大时序要求,新手最容易栽在这里:
- 时钟与数据的相位关系:RGMII 要求时钟边沿与数据边沿对齐(源同步传输)
- 延迟补偿:PCB 走线、FPGA IO 延迟都会破坏这种对齐关系
为什么需要时序偏移调整?
一句话:因为 RGMII 的时序窗口太小了。你想想看:
- 时钟频率 125MHz,DDR 模式下等效 250MHz
- 每个 bit 的宽度只有 2ns(千兆模式)
- PCB 走线每相差 10mm,延迟差约 60ps
- FPGA 内部的 IO 延迟变化范围可能达到 500ps
这些误差累积起来,很容易超过时序裕度。我做过一个统计,在普通的 4 层板设计中,如果不做任何偏移调整,大约有 60% 的板子在千兆模式下会出现不同程度的误码。
所以,我们才需要一套系统的时序偏移调整方法。这也是这门课要讲的核心内容。
RGMII 时序结构图
下面这张图展示了 RGMII 接口的完整结构和时序偏移的关键节点。看仔细了——
从上图可以看到,RGMII 的时序偏移涉及四个关键节点。每个节点的延迟控制不好,都会影响最终的数据采样。可以说,整个 RGMII 调试的过程,就是跟这些延迟做斗争的过程。
小结
这一章我们认识了 RGMII 接口的基本概念、信号组成和典型应用场景。核心就记住三点:
- 双沿采样 —— 125MHz 时钟下做到千兆速率
- 信号分两组 —— TX 路径和 RX 路径,各自独立
- 时序偏移是主要挑战 —— PCB 走线、FPGA 延迟都会破坏时序
我自己做过的项目中,凡是 RGMII 不稳定的,几乎都是时序偏移没处理好。接下来的章节,咱们会一步步深入分析这些偏移的来源,然后给出具体的调整方法。准备好了吗?