RGMII接口概述:电气特性、信号定义、时序要求简介

做硬件这么多年,RGMII是我打交道最多的接口之一。它把GMII的24根线压缩到12根,既省板面积又保吞吐,但代价嘛——时序窗口窄得跟刀刃似的。这一章我带大家把RGMII的底细摸清楚,后面排查阻抗不连续引起的问题才有的放矢。

1.1 什么是RGMII

Reduced Gigabit Media Independent Interface,简称RGMII。说白了就是MAC到PHY之间的数据通道。它用双沿采样(DDR)在单根数据线上完成一个时钟周期内的两次传输,这样原来的8位数据线能砍一半。

举个例子:千兆模式下,时钟125 MHz,每个时钟沿(上升沿+下降沿)送4位,合起来就是8位,正好一个字节。我在一个项目里第一次看到DDR波形时吓了一跳——边沿那么密,稍微有点抖动就抓错数据。

核心特点:
  • 12条信号线(TX_CTRL, TXD[3:0], TX_CLK, RX_CTRL, RXD[3:0], RX_CLK)
  • 时钟频率125 MHz(千兆)/ 25 MHz(百兆)/ 2.5 MHz(十兆)
  • 双沿采样,建立时间+保持时间合计仅约1 ns
  • 源同步时钟——发射端同时送出时钟和数据

1.2 信号定义速览

别被12根线吓到,其实分组很简单:发送组(T)、接收组(R)、各自带一个时钟和控制信号。我习惯把它们看成四对差分对,虽然实际上都是单端信号。

信号名 方向 说明
TXD[3:0] MAC → PHY 发送数据,DDR模式。上升沿送低4位,下降沿送高4位
TX_CTRL MAC → PHY 发送控制。上升沿表示TX_EN,下降沿表示TX_ER(通常接地不用)
TX_CLK MAC → PHY 发送参考时钟,由MAC产生
RXD[3:0] PHY → MAC 接收数据,DDR模式,同样分高低半字节
RX_CTRL PHY → MAC 接收控制。上升沿表示RX_DV,下降沿表示RX_ER
RX_CLK PHY → MAC 接收时钟,由PHY恢复并发送给MAC
避坑提示: 我见过不少设计把TX_CTRL直接拉高或拉低,认为控制信号不重要。结果PHY一直认为有错误,吞吐率骤降。务必按规范处理TX_CTRL和RX_CTRL。

1.3 电气特性关键参数

RGMII是3.3V或1.8V/2.5V的CMOS接口,具体电压看芯片。我这里主要讲高速设计关心的东西——阻抗、压摆率、端接。

阻抗要求

RGMII信号线一般是50 Ω单端阻抗。但注意,PHY和MAC的I/O可能不是标准的50 Ω驱动。我碰到过一个案例,PHY的驱动强度可调,默认是强驱动(约20 Ω输出阻抗),结果信号过冲严重,时序全乱。后来调成弱驱动(约40 Ω)才稳定。

压摆率

RGMII速率高,信号边沿太陡会产生振铃和串扰,太缓又会增加时序不确定性。很多芯片会提供压摆率控制寄存器。我的建议是:在满足时序裕量的前提下,尽量选较缓的压摆率,能减少EMI。

端接策略

短走线(< 2英寸)可以不端接,让接收端自身的输入电容自然吸收反射。长走线我一般在接收端加串联电阻或RC端接。具体阻值要对照IBIS仿真,别照着别人图纸抄——不同芯片的驱动特性差异很大。

注意: RGMII不是差分信号,不能用差分对规则来画等长。我曾经遇到一个PCB工程师把RGMII四根数据线按100 Ω差分对来控制,阻抗直接翻倍,信号反射得一塌糊涂。

1.4 时序要求简介

这才是RGMII最让人头大的部分。它要求数据相对于时钟的相位关系非常严格。先说标准情况:

  • 千兆模式: 时钟125 MHz,周期8 ns。数据在上升沿和下降沿各采样一次。因此数据有效窗口(建立+保持)总共约1 ns,实际上很多PHY只给0.5 ns~0.8 ns。
  • 百兆模式: 时钟25 MHz,周期40 ns。数据只在上升沿采样(注意:百兆不要求DDR!)。但很多控制器在百兆下也用DDR模式传输,实际时序约束要查对应手册。
  • 时钟偏移(Skew): TX_CLK与TXD之间的偏移必须控制在±0.5 ns以内。接收端一样。

为什么会这么严格?因为DDR采样对时钟和数据之间的相对偏斜极为敏感。你想想看,8 ns的时钟周期里要放两个数据采样点,每个点的有效窗口只有几百皮秒。一旦PCB走线阻抗不连续造成反射,信号边沿变形,那个小小的窗口就很容易被吃掉。

我调试过一块板子,PHY连续报CRC错误。示波器一看,RXD的下降沿跟RX_CLK的下降沿几乎重合,保持时间为负值。罪魁祸首是RXD走线经过一个过孔,过孔阻抗比50 Ω低了将近15 Ω,信号反射回来把边沿拉偏了300 ps。后来把过孔填上、走线改短,再测OK。

RGMII时序关键指标(千兆典型值):
  • Tsetup: 0.5 ns(数据在时钟沿前有效)
  • Thold: 0.5 ns(数据在时钟沿后保持)
  • Tskew: ±0.5 ns(时钟与数据线之间的走线长度差)
  • Tcycle: 8 ns(125 MHz)
注意:不同芯片的规格有差异,一定要以对应datasheet为准。

1.5 本章知识结构

下面这张图把RGMII的整体框架串起来,帮大家脑子里搭个地图。后面每一章都会落在这些节点上展开。

RGMII 知识体系总览 RGMII 接口定义 电气特性 3.3V/1.8V CMOS 50Ω单端阻抗 信号定义 TX/RX 数据+控制+时钟 DDR 双沿采样 时序要求 Tsetup/Thold 各0.5ns Tskew ≤ ±0.5ns 阻抗不连续 过孔 / 走线变宽 / 换层 时序违例 建立/保持时间不足 误码/CRC错误 丢包 / 链路不稳定 排查指南:TDR → 仿真 → 调整 → 验证

1.6 消化本章的关键

学RGMII,别只盯着原理图连线。你要在心里建立画面:时钟和数据在PCB上奔跑,每遇到一个阻抗突变——过孔、换层、走线变粗——信号的一部分就会反弹回来,跟后续的波叠加,把边沿形状搞得面目全非。

后面我们会拿TDR实际测阻抗不连续,拿眼图看时序恶化,再一步步定位到具体哪段走线出了状况。但前提是你得先知道正常长什么样。本章的电气特性、信号定义、时序窗口,就是那个“正常”的基准线。

我的学习建议: 找一块已经量产的高速板(比如开发板),对照本章知识拿万用表量一下端接电阻,用示波器看一下时钟和数据波形。纸上得来终觉浅——亲手摸过RGMII的信号,回头看理论才亲切。