第2章 RGMII接口基础:信号定义与时序规范

RGMII的全称是Reduced Gigabit Media Independent Interface。说白了,就是把原来GMII的24根信号线压缩到12~14根。我第一次看这个接口时,心里直犯嘀咕:“线少了这么多,时序还能稳吗?”后来调了几年,发现这玩意儿的成败全藏在时钟和数据的关系里。

2.1 信号定义

RGMII的信号分两组:发送(T开头)和接收(R开头)。最关键的几个我列在下面:

信号名 方向 描述
TXD[3:0] MAC → PHY 发送数据总线,DDR模式下双沿各送4 bit
TX_CLK MAC → PHY(或共享) 发送参考时钟,125 MHz(千兆)
TX_CTL MAC → PHY 发送控制信号,编码TX_EN和TX_ER
RXD[3:0] PHY → MAC 接收数据总线,同样DDR
RX_CLK PHY → MAC 接收时钟,来自PHY
RX_CTL PHY → MAC 接收控制信号,编码RX_DV和RX_ER

我的个人习惯:设计PCB时,TX_CLK和RX_CLK的走线必须严格等长。曾经一次项目因为忽略了这点,导致TX_CLK到PHY的延迟比数据线多出200 ps,整批板子千兆不通。后来把所有时钟走线都绕成蛇形,问题才解决。

注意,TX_CTL和RX_CTL信号是编码过的。上升沿代表TX_EN(或RX_DV),下降沿代表TX_ER(或RX_ER)。这种二合一的设计,省了两根线,但也让时序分析更烧脑。

2.2 时序规范核心

RGMII用的是双数据率(DDR),在每个时钟沿都采样。这意味着时钟频率虽然是125 MHz,但数据速率跑到250 Mbps/bit。你要面对的时序窗口只有时钟周期的一半——4 ns。

嗯,实际标准里还有更严格的约束。我翻出RGMII规范v2.0,把最重要的几个参数提炼出来:

参数 最小值 最大值 说明
tSKEW(时钟到数据偏移) -500 ps +500 ps 时钟沿与数据有效中心之间的时间差
tHOLD(保持时间) 1.0 ns — 数据沿之后数据必须保持稳定
tSETUP(建立时间) 1.0 ns — 时钟沿之前数据必须有效
tJITTER(时钟抖动) — ±40 ps 时钟边沿的短期不确定性

我曾经踩过的大坑:方案上看到的tSKEW要求±500 ps,以为很宽松。实际测试发现,当温度升高20°C,板上走线延迟漂移了70 ps,再加上PHY内部PLL抖动,整个时序余量只剩不到100 ps。所以要留够裕量,至少多给30%的余量。

2.3 时序关系图解

为了让你更直观地理解时钟和数据怎么对齐,我画了一张RGMII的时序结构图。这张图里你能看到发送端和接收端的信号关系,以及那关键的tSKEW窗口。

RGMII信号与时钟时序结构 RGMII 发送端时钟与数据相位示意 TX_CLK DDR 0ns 1.6ns 3.2ns 4.8ns TXD[3:0] D0 D1 D2 D3 D4 D5 D6 TX_CTL EN ER EN ER EN ER EN 关键时序说明 RGMII 要求时钟沿与数据有效中心偏差 ≤±500 ps(tSKEW) TX_CTL 在上升沿代表使能(EN),下降沿代表错误(ER)

这张图画的是典型的“中心对齐”模式——时钟沿落在数据窗口正中间。你想想看,如果时钟沿往左偏移300 ps,建立时间就只剩700 ps,那就危险了。我建议在FPGA内部用IODELAY做精细调节,保证tSKEW在±200 ps以内。

2.4 避坑清单

做RGMII时序调校,下面几点是我用真金白银换来的教训:

  • 走线等长误差必须≤10 mil。别看PCB工艺标称50 mil等长没问题,实际介电常数波动就能让你多出几十皮秒。
  • 参考时钟源不要共用。发送端用MAC的时钟、接收端用PHY恢复的时钟,两者之间的抖动会直接吃掉时序余量。
  • 上电初始化后先校准IDELAY。很多MAC/IP核都支持动态tap调整,我习惯在link up后跑一次眼图扫描,把tap值写到最佳位置。
  • 留够仿真裕量。实际PCB上过孔、拐角、阻焊都会引入额外电容,仿真时把寄生参数加上去再跑一次,你会发现余量比理想情况少20%以上。

归纳一下:RGMII的6根数据线、2根时钟、2根控制信号,所有奥秘都藏在时钟与数据之间的相对偏移里。只要你守住了tSKEW窗口,剩下的就是PCB工艺和IC内部延迟的一致性了。我自己每次画RGMII Layout前,都会把这几条硬性要求打印出来贴在电脑上——没错,吃过亏才长记性。