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