RGMII 接口概述:定义、信号线、时序要求与数据速率
什么是 RGMII?
RGMII 的全称是 Reduced Gigabit Media Independent Interface,也就是精简千兆媒体独立接口。说白了,它是一套连接 MAC(媒体访问控制器)和 PHY(物理层收发器)的芯片间通信协议。
我刚开始做硬件的时候,GMII 还在用十多根信号线,布线密度大不说,PCB Layout 走线还容易串扰。后来 RGMII 出来了,靠一句话就把信号线砍掉一半——数据与时钟沿对齐的调整,全部交由收发双方的内部延时逻辑来处理。你想想看,这对我们硬件工程师来说,省了多少走线空间和 BOM 成本。
我在项目中遇到过几次 RGMII 的时序问题,简单说,它的核心思想就是:用双沿采样(DDR)来提升数据速率,然后通过增加一个固定的 Skew 来保证采样窗口。听起来抽象?别急,我们一步步拆开看。
信号线定义
RGMII 的信号线总共就 12 根(如果算上管理接口 MDIO 的话是 14 根,但 MDIO 不是必须的)。我把它们分成三组:
| 分组 | 信号名 | 方向 | 说明 |
|---|---|---|---|
| 发送 | TXD[3:0] | MAC→PHY | 发送数据总线,双沿采样,共 4 位 |
| TX_CTL | MAC→PHY | 发送控制信号(结合 TX_EN 和 TX_ER) | |
| GTX_CLK | MAC→PHY | 125 MHz 参考时钟(千兆模式) | |
| 接收 | RXD[3:0] | PHY→MAC | 接收数据总线,双沿采样 |
| RX_CTL | PHY→MAC | 接收控制信号 | |
| RX_CLK | PHY→MAC | 从 PHY 恢复的接收时钟,125 MHz | |
| 管理 | MDC | MAC→PHY | 管理接口时钟,最大 2.5 MHz |
| MDIO | 双向 | 管理数据线 |
嗯,这里要注意:GTX_CLK 和 RX_CLK 的频率。在 1000 Mbps 模式下,GTX_CLK 跑 125 MHz,数据在上升沿和下降沿各采样一次,等效数据速率就是 125 MHz × 2 = 250 MHz × 4 位 = 1000 Mbps。明白了吧?
时序要求——关键的数字游戏
RGMII 最令人头疼的地方在于它的时序规范。IEEE 802.3 标准规定:
- 时钟到数据的 Skew(偏移) 应该在 1.0 ns 到 2.8 ns 之间(有些 PHY 厂商会放宽到 0.7 ns 到 2.8 ns)。
- 数据与时钟的 建立时间(tSU) 和 保持时间(tH) 通常为 1.0 ns。
为什么要规定 1.0 ns 以上的 Skew?因为数据是在时钟的两个边沿采样的,如果时钟沿和数据沿完全对齐,接收端根本分不清该采哪个边沿。所以 RGMII 故意引入了一个固定的相位偏移——让数据比时钟早一点点或者晚一点点到达。
数据速率与工作模式
RGMII 支持三种速率模式,对应的时钟频率和采样方式如下表:
| 速率模式 | GTX_CLK / RX_CLK | 采样方式 | 数据总线宽度 | 线速率 |
|---|---|---|---|---|
| 10 Mbps | 2.5 MHz | 上升沿采样 | 4 bit | 10 Mbps |
| 100 Mbps | 25 MHz | 上升沿采样 | 4 bit | 100 Mbps |
| 1000 Mbps | 125 MHz | 双沿采样 (DDR) | 4 bit | 1000 Mbps |
注意,10/100 模式下其实只用了上升沿,相当于 4 位并行 × 2.5/25 MHz = 10/100 Mbps。而千兆模式必须用双沿才能把速率拉上去。我见过有人把 1000 Mbps 模式的 PCB 当成了 100 Mbps 来布,时钟线走得很长也不管等长,结果千兆根本不通——这就是忽略了 DDR 对信号质量的严苛要求。
RGMII 时序结构图
下面我用一张图把 RGMII 的核心架构和时序关系画清楚。注意看数据相对于时钟的相位偏移:
为什么要关注 Skew 补偿?
RGMII 本身只定义了信号和时序,但实际 PCB 上的走线长度差异、芯片工艺偏差、温度漂移都会改变 Skew。如果 Skew 超出标准范围,接收端采样就会出错,轻则丢包,重则通信完全不通。
我曾经在一个 10 层板的设计里,由于 MAC 和 PHY 分属两块板卡通过 FPC 连接,导致 TX_CLK 的走线长度比数据线长了 2 英寸,Skew 直接跑到 4 ns。当时 PHY 端死活不 Link Up,排查两天才发现是 Skew 超标。后来在 FPGA 侧加了动态相位调整,才算解决问题。
本章核心要点
- RGMII 信号线少——12 根信号线,适合高密度布线。
- 双沿采样——千兆模式下 125 MHz 时钟配合 DDR 达到 1 Gbps。
- Skew 是故意的——数据与时钟之间必须保持 1.0~2.8 ns 的相位偏移。
- 补偿是必须的——PCB 走线、芯片工艺、温度都会破坏这个偏移,需要用延时单元(ODELAY/IDELAY)来纠正。