RGMII 接口基础:引脚、时序与相位关系

聊 RGMII 链路训练之前,得先把接口本身搞清楚。说白了,RGMII 就是连接 MAC 和 PHY 之间的桥梁,一共 12 根线。我最早接触这个接口时老实说挺排斥的——就那么几根线,时序却门道不少。后来被坑过几次才明白,越是简单的物理层,越容易在细节上栽跟头。

1.1 引脚定义:12 根线搞定一切

RGMII 相比传统的 GMII 接口,引脚数砍了一大半,从 24 根缩到 12 根。怎么做到的?答案很简单:数据线用 DDR 方式复用,时钟沿同时采样高低字节。

下面是标准的引脚信号表,我个人习惯把它叫「12 线公约」——项目里但凡这 12 根线的 PCB 布线出问题,后面调链路训练准保头疼。

信号名 方向 位宽 功能描述
TXC MAC → PHY 1 发送时钟,125 MHz 或 2.5/25 MHz
TXD[3:0] MAC → PHY 4 发送数据,Rising edge 驱动低 4 bit
TX_CTL MAC → PHY 1 发送控制信号,上升沿 TX_EN,下降沿 TX_ER
RXC PHY → MAC 1 接收时钟,频率与 TXC 同步
RXD[3:0] PHY → MAC 4 接收数据,Rising edge 驱动低 4 bit
RX_CTL PHY → MAC 1 接收控制信号,时隙复用 RX_DV 和 RX_ER

注意: TXC 和 RXC 是两个独立的时钟域。我在一个 10/100 Mbps 自适应项目里吃过亏,以为可以共用一个时钟源,结果链路训练死活过不去,后来发现是下降沿采样窗口不对。

1.2 时序特性:DDR + 中心对齐

RGMII 最核心的时序特点就两个:DDR 双沿采样和时钟中心对齐。

你想想看,1000BASE-T 模式下,时钟跑 125 MHz,DDR 等效数据速率就是 250 MHz。1 个时钟周期 8 ns,分成两个 4 ns 的窗口,分别传输低 4 bit 和高 4 bit。嗯,这 4 ns 窗口就是时序容差的生命线。

具体的时序参数,我用一张表概括典型值:

参数 符号 最小值 典型值 最大值 单位
TXC 时钟周期 Tclk 7.5 8.0 8.5 ns
TXD/TX_CTL 建立时间(对 TXC) Tsu 1.0 1.5 – ns
TXD/TX_CTL 保持时间 Th 1.0 1.5 – ns
RXD/RX_CTL 建立时间(对 RXC) Tsu_r 1.0 1.5 – ns
RXD/RX_CTL 保持时间 Th_r 1.0 1.5 – ns
内部延时(MAC 侧输出) Td_mac 0.5 1.0 2.0 ns

经验之谈: 我踩过最大的坑是保持时间余量。PCB 走线等长做了,但过孔不均衡导致 RXD 相对 RXC 偏移了 0.3 ns,1000BASE-T 模式下偶尔丢包。后来在 PHY 端加了个 0.5 ns 的延时补偿,链路训练一步到位。

1.3 时钟与数据的相位关系:90° 偏移是灵魂

很多新手会问:为什么 RGMII 要规定时钟和数据之间保持 90° 相位差?

原因其实很简单——DDR 双沿采样时,时钟沿要落在数据眼图的正中央。如果时钟和数据完全同相,上升沿和下降沿刚好对准数据跳变边缘,采样点正卡在建立/保持时间的临界区,换谁谁不焦虑?

RGMII 标准规定了两种模式:

  • 内部延时模式:MAC 或 PHY 自己负责加 1.5~2.0 ns 延时,保证时钟相对数据偏移 90°。这个最常用,但延时精度取决于芯片内部延时单元的一致性。
  • 外部延时模式:PCB 走线直接画蛇形线,人为插入延时。我见过老工程师直接拿 2 ns 的蛇形线做,走线长了芯片信号质量反而下降。

说白了,90° 相位关系就是为了把采样点让到数据窗口中央,留出建立和保持的余量。如果由于工艺、温度或者电压波动,这个 90° 偏移变小了,数据采样就撞到跳变沿上去了。嗯,这时候链路训练就开始发挥价值了。

核心观点: RGMII 的「好」就是靠 90° 相位差撑起来的。一旦这个偏移失准,后面所有链路训练都是白费功夫。我在调试一块定制板时深有体会,PHY 的 DLL 锁定不稳定,90° 偏移抖到只有 70°,千兆链路直接退化成百兆。

最后放一张结构图,把刚才讲的引脚、时钟域和相位关系串起来,后面几章会反复提到这些核心概念。

RGMII 接口核心结构 RGMII 接口核心结构 MAC 侧 PHY 侧 发送数据 TXD[3:0] 发送控制 TX_CTL 发送时钟 TXC 接收数据 RXD[3:0] 接收控制 RX_CTL 接收时钟 RXC TXC + TXD + TX_CTL DDR 双沿,90° 偏移 RXC + RXD + RX_CTL 独立时钟域,相位对齐 时钟与数据保持 90° 相位偏移,采样点落在眼图中心 内部延时 or 外部延时

一句话总结: RGMII 靠 12 根线实现 1 Gbps 全双工,每根线的布局、等长、延时控制都影响链路训练的效果。下一阶段我们要深入讲的就是这些延时到底从哪里来,以及怎么用链路训练把它们「算清楚、补回来」。