RGMII时序规范:时钟与数据相位关系

做RGMII接口设计,最头疼的问题是什么?

我个人的答案是:时序。尤其是时钟和数据的相位关系。你想想看,RGMII在DDR模式下,每个时钟沿都要采样数据,TX和RX两边的时钟还不一定是同一个源。这中间要是差了那么零点几纳秒,整条链路就会崩掉。

我在项目中遇到过好几次这样的情况:板子拿来,链路能通,但跑百兆包偶尔丢一两个。用示波器一抓,发现数据在时钟沿附近跳变——典型的建立/保持时间违例。

这一章咱们就把RGMII的时序规范掰开揉碎,看看时钟和数据之间到底是什么关系。

RGMII是什么?两句话讲清楚

RGMII的全称是Reduced Gigabit Media Independent Interface。说白了,就是GMII的简化版。

  • 引脚数量少:从GMII的24根线,砍到只有12根。
  • 时钟频率高:千兆模式下时钟125MHz,但因为是DDR(Double Data Rate),所以数据率是250Mbps每根线。
  • 复用技术:TX_CLK、TX_CTL、TXD[3:0]这6根线搞定发送;RX侧同理。

你想想看,原来GMII需要8根数据线,现在只要4根。代价是什么?代价就是时序窗口变窄了。原来一个时钟周期可以摆数据的时间,现在要摆两个bit,眼图收缩得很厉害。

核心时序参数:Tskew、Tsetup、Thold

RGMII规范里最关键的三个参数,我建议你背下来:

参数 全称 典型值(千兆) 说明
Tskew Clock-to-Data Skew ±500ps 时钟沿与数据有效边沿之间的偏差
Tsetup Setup Time ≥1ns(接收端) 数据必须在时钟沿之前多久稳定
Thold Hold Time ≥1ns(接收端) 数据必须在时钟沿之后保持多久稳定

嗯,这里要注意:规范里写的Tsetup和Thold一般是针对接收端(MAC或PHY)的内部触发器的要求。真正让工程师头疼的,不是这两个值本身,而是它们跟Tskew之间的组合关系。

时钟与数据的相位关系图

RGMII的数据跟时钟是边沿对齐还是中心对齐?这是一个关键区别。

  • 源同步时钟:数据在时钟的上升沿和下降沿都采样。
  • 发送端(PHY或MAC):数据通常与时钟沿对齐送出。规范建议有±500ps的skew。
  • 接收端(MAC或PHY):期望数据在时钟沿的中间稳定,才能满足建立保持时间。

问题就出在这里:发送端是边沿对齐,接收端想要中心对齐。这中间的偏移怎么解决?

说白了,要么靠PCB走线等长保证,要么靠PHY寄存器里的延时调整——也就是咱们这门课的核心内容。

下面这张图把时钟与数据的相位关系画出来了:

RGMII时钟与数据相位关系(DDR模式) 时钟 TX_CLK 数据 TXD[3:0] 发送端边沿对齐 接收端期望中心稳定 Tsetup ≥ 1ns Thold ≥ 1ns Tskew ±500ps ⚠ 关键点:发送端将数据与时钟边沿对齐送出(±500ps skew),接收端需要数据在时钟沿中心稳定(Tsetup/Thold窗口)。 这就是为什么需要PHY寄存器做延时补偿——把数据从边沿对齐移到中心对齐。

DDR模式下的数据眼图与建立保持时间

千兆以太网里,时钟频率是125MHz,周期8ns。但因为DDR,每个时钟沿传一个数据,所以数据有效窗口只有4ns。去掉Tsetup和Thold各1ns,你能动的余量只有2ns。

2ns听起来很多?我跟你讲,实际板上走线、封装、温度变化,随便一个因素就能吃掉大几百皮秒。再加上Tskew的±500ps,留给你的延时调整空间其实不大。

从业余到专业的分水岭

区分一个工程师水位的标志之一,就是他知不知道Tskew在哪个方向上算对齐、在哪个方向上算串扰。我见过有人把TX_CLK和TXD之间调反了相位,链路反而更差。

实际项目中的时序挑战

我曾经在一个FPGA接PHY的项目里,遇到了一个诡异的丢包问题。跑100Mbps完全正常,一切到千兆模式就偶发CRC错误。用示波器一量,发现TX_CLK和TXD[3:0]之间的相位差达到了差一点儿800ps。

  1. 排查PCB走线:TX_CLK和TXD[3:0]的等长控制做到了±50mil,按理说没问题。
  2. 排查PHY数据手册:发现PHY内部有TX延时调整寄存器,默认值是0。
  3. 调整寄存器:把发送延时调到约1.5ns,让数据在时钟沿中间稳定。
  4. 结果:CRC错误消失,链路口袋完美。

这个故事说明什么?PCB走线只是基础,PHY寄存器配置才是真正的救命稻草。很多工程师只做硬件走线等长,却忘了PHY内部的延时可调,最后花了大量时间查板子。

避坑指南:建立保持时间检查清单

每当我接手一个新的RGMII设计,我都会按照这个清单检查一遍:

  • PCB走线延时:TX_CLK和TXD之间、RX_CLK和RXD之间的等长误差控制在±100mil内。
  • PHY默认配置:多数PHY上电时TX和RX延时寄存器都是0。需要读一下数据手册确认。
  • FPGA内部逻辑:如果MAC在FPGA里,IOB内部的ODDR/IDDR模块可能会有额外的延时。
  • 示波器实测:用高带宽示波器抓时钟和数据沿,看数据窗口是否覆盖时钟沿的前后各至少500ps。
  • 量产余量:别忘了,不同PCB加工批次、不同温度下的延时会有变化。留出至少200ps的余量。

⚠ 我曾经踩过的坑

我曾经在低温-20℃时发现一批板子千兆不通,常温正常。排查后发现PHY的TX延时在低温下漂了约400ps。从那以后,我每次做时序验证都把温度循环测试加上,绝不在常温一测就放行。

小结

RGMII的时序核心,就是处理好时钟和数据的相位关系。发送端边沿对齐、接收端中心对齐。建立时间和保持时间窗口是设计的生命线,Tskew则是你需要用PHY寄存器去补偿的目标。