1. RGMII接口概述
RGMII,全称Reduced Gigabit Media Independent Interface,是吉比特以太网中MAC与PHY之间的标准数字接口。说白了,它就是把传统GMII的24根信号线压缩到12根,同时还能跑千兆速率。我在做第一个千兆交换机项目时,就被这个接口折腾得不轻——信号眼图怎么调都过不了,后来才发现是时序理解出了问题。
1.1 信号定义
RGMII接口的信号线数量不多,但每根都承担着双重任务。比如数据线,上升沿和下降沿各采一个比特,这样用DDR技术实现了速率翻倍。
| 信号名 | 方向 | 宽度 | 描述 |
|---|---|---|---|
| TXD[3:0] | MAC→PHY | 4 | 发送数据总线,DDR模式,上升沿送低4位,下降沿送高4位 |
| RXD[3:0] | PHY→MAC | 4 | 接收数据总线,同样DDR |
| TX_CLK | MAC→PHY | 1 | 发送参考时钟,频率125MHz(千兆)/ 25MHz(百兆)/ 2.5MHz(十兆) |
| RX_CLK | PHY→MAC | 1 | 接收参考时钟,由PHY从接收数据恢复 |
| TX_CTL | MAC→PHY | 1 | 发送控制信号,上升沿表示TX_EN,下降沿表示TX_ER |
| RX_CTL | PHY→MAC | 1 | 接收控制信号,定义同TX_CTL |
经验之谈: 我曾经在layout时把TXD和RXD两组信号放得太近,结果串扰导致误码率飙升。所以建议数据线之间至少留3倍线宽间距,并且每组线等长控制在±50mil以内。
1.2 关键时序参数
RGMII的时序要求很严格,尤其是发送侧,MAC必须在时钟边沿前后保持数据和控制信号的有效窗口。我见过不少新手工程师上来就照着数据手册抄延时值,结果板子一跑就挂。咱们得搞明白根源。
1.2.1 建立时间与保持时间
以TX_CLK为例,MAC输出的数据相对于TX_CLK的上升沿和下降沿,必须满足Tsu(建立时间)和Th(保持时间)。通常Tsu要求≥1ns,Th要求≥1ns。但实际上,由于PCB走线和芯片内部路径延迟,这个窗口会缩小。
1.2.2 时钟到数据输出延时
Tco是指时钟边沿到数据输出有效的延时。MAC器件手册会给出最小值和最大值。这个参数直接影响板级时序裕量。我习惯在仿真时把Tco的min和max都跑一遍,看最差情况是否仍然满足PHY的输入窗口。
1.2.3 时钟走线延时与数据走线延时的匹配
RGMII对时钟和数据间的相对延时非常敏感。千兆速率下,一个UI(单位间隔)只有2ns,而时钟占空比抖动、走线长度差都会吃掉裕量。我当年做一个项目,因为TX_CLK比TXD长了10mm,导致眼图闭合,后来加了一段蛇形线才救回来。
避坑指南: 千万不要以为参考时钟和数据线等长就万事大吉。芯片内部封装引线长度不同、输出驱动强度差异,都会引入skew。我建议在做时序预算时,至少预留300ps的margin。
1.3 常见应用场景
RGMII接口几乎统治了中低端以太网设备。你随便打开一个路由器、交换机或开发板,上面多半都能找到RGMII。
- 家用路由器 / 企业交换芯片: 比如MT7621、RTL8367这类芯片,内部都是RGMII连接MAC和PHY。成本低、走线少,适合多层板。
- FPGA + PHY组合: 很多FPGA开发板(如Xilinx Zynq、Intel Cyclone V)用RGMII连接外部PHY(如RTL8211、KSZ9031)。我做过一个视频采集卡,就用Zynq + RGMII搞定千兆网口。
- SoC内部互联: 一些片上系统把MAC和PHY集成在同一个封装内,但接口仍然采用RGMII标准,因为IP核复用方便。
为什么大家都爱用RGMII?
- 引脚少:12根线就能跑千兆,GMII需要24根;
- 频率适中:125MHz的DDR信号,PCB设计难度适中;
- 标准统一:只要遵守RGMII v2.0规范,不同厂商的MAC和PHY可以互连。
但也要注意它的局限。当器件间距超过4英寸时,信号质量会急剧下降。所以远距离互联时,我宁愿换SGMII或者SerDes。
核心逻辑: RGMII的本质是用DDR技术换取引脚数量和PCB面积,代价是更苛刻的时序约束。做设计时,时序预算就是你的生命线。
下面这张图概括了RGMII系统的典型结构,我画的时候把最重要的信号和延时关系标了出来,方便你对照理解。
你看这张图,发送方向数据(TXD)和时钟(TX_CLK)都是从MAC流向PHY,而接收方向相反。实际调试时,我经常用示波器量TX_CLK和TXD[0]的相对相位,判断是否需要调节内部延时。对,很多MAC芯片内部有可编程延时调整寄存器,比如加0.5ns或1ns,这个后面几章会详细讲。
小技巧: 如果你手头没有高端示波器,可以先用示波器看TX_CLK的占空比,再配合网络分析仪的TDR模式看走线阻抗连续性。我记得有一次做板级调试,就是靠TDR发现了一段阻抗不连续,修正后时序问题就解决了——其实问题根本不在芯片,而在PCB工艺。
好了,这一章先帮你把RGMII的底子打牢。信号定义搞清楚了,时序参数心里有数了,应用场景也了解了,我们后面才能拿网络分析仪去动手校准。记住一句话:RGMII的成败,九成在时序预算,剩下的一成是layout细节。