RGMII时序参数详解

做RGMII接口设计,说白了就是在跟时间赛跑。你想想看,数据在时钟的上升沿和下降沿都要采样,留给你的时间窗口其实非常窄。

我刚开始接触这个接口时,总觉得不就几个时序参数嘛,查查数据手册就行了。结果第一次调板子,死活跑不上125Mbps,眼图都裂了。

从那以后,我就老老实实把这些时序参数一个个吃透了。这章咱们就掰开揉碎,把Tsu、Th、Tskew这几个关键参数讲明白。

建立时间 Tsu 与保持时间 Th

Tsu,建立时间,指的是数据在时钟有效边沿到来之前必须稳定存在的时间。Th,保持时间,指的是时钟有效边沿到来之后数据必须继续保持稳定的时间。

这两个参数是所有同步时序电路的基础。RGMII也不例外。

为什么RGMII对Tsu和Th要求更严格?

因为它是双沿采样。时钟频率本身是125MHz,但数据速率是250Mbps。每个时钟周期内,你要在上升沿和下降沿各送一笔数据。时间窗口被压缩了一半。

我见过不少新手设计师,只盯着时钟频率算时序裕量。这样做出来的板子,大概率会出问题。

注意: 数据手册中标称的Tsu和Th,通常是芯片内部寄存器的要求。PCB上的走线延迟、过孔延迟、驱动强度差异,都会把这些时序窗口进一步压缩。别只看典型值,要考虑最差情况。

举个例子,某款FPGA的RGMII接收端要求Tsu ≥ 1.2ns,Th ≥ 0.8ns。如果PCB走线引入的skew达到200ps,留给你的有效时序窗口就从2ns缩水到1.6ns。

我曾经在一个项目中,使用了一款PHY芯片,数据手册写的是Tsu=1.0ns, Th=0.5ns。我本以为裕量很充足,结果板子打样回来发现,有一个通道在高温下就是偶尔丢包。查到最后,发现是那个通道的PCB走线长了500mil,导致实际Tsu被压缩到了临界值。

所以我的建议是:在你自己的设计中,始终把PCB走线引入的延迟skew算进去。你想想看,好钢要用在刀刃上,时序裕量也是。

时钟抖动与Tskew

Tskew,时钟偏斜,指的是时钟信号到达不同接收端时,时间上的差异。在RGMII中,这个概念要稍微拓宽一点——它还包括数据信号与时钟信号之间的相对偏移。

Tskew的来源有哪些?

  • PCB走线不等长:我是最直接的。数据组内一根线比别的长了50mil,skew就出来了。
  • 过孔差异:不同信号因过孔数量不同,延迟也会不一样。我曾遇到过一个设计,数据线走了两个过孔,时钟线走了三个,结果skew大了不少。
  • 温度与电压变化:芯片内部路径的延迟会随温度和电压漂移。这在理论上是不可控的,但我们得给裕量。
  • 时钟抖动:时钟周期的随机变化。虽然RGMII对抖动的容忍度相对高一些,但如果抖动太大,还是会吃掉你的时序裕量。
我的经验:处理RGMII的Tskew,核心思路就是「等长」。不光是走线长度等长,还要尽量保证每路信号的返回路径(参考地平面)一致。这样做的好处是,skew被控制在最低水平,你才有余量去应对芯片本身的时序要求。

时序裕量计算

弄清楚Tsu、Th、Tskew之后,我们来看一个实际问题:我的设计到底能不能跑?

通常,我们会用下面这个公式来估算时序裕量:

有效的采样窗口 = 时钟周期 × 2 - (Tsetup_max + Thold_max + Tskew_max)
其中,时钟周期(125MHz) = 8000ps
这里 Tsetup_max 和 Thold_max 是芯片手册中的最大要求值
Tskew_max 是所有PCB和工艺偏差的总和

说白了,就是用最差情况下的可用时间,减去最坏情况下的要求时间。剩下的,就是你的裕量。

我建议在设计初期,就给自己的PCB走线预算一个200ps~300ps的skew。这个数字对于四层板来说,是可以通过常规布局走线做到的。

下面这张图,把我刚才讲的关键时序参数之间的关系串了起来:

RGMII时序参数关系图 时钟信号 时钟周期 8ns (125MHz) 数据信号 上升沿数据 下降沿数据 Tsu Th Tskew来源 走线不等长 过孔差异 温度漂移 压缩时序裕量

关键参数汇总

为了让大家查阅方便,我把RGMII常用时序参数整理成了下面的表格:

参数符号 定义 典型值(125MHz) 我的经验值
Tcyc 时钟周期 8.0 ns 以数据手册为准
Tsu 建立时间 1.0~1.5 ns 留足1.5ns裕量
Th 保持时间 0.5~1.0 ns 千万别小于0.8ns
Tskew 时钟与数据的相对偏斜 ≤ 300 ps (PCB层面) 尽量做到200ps以内
Tjitter 时钟抖动 ≤ 50 ps 用好的时钟源

怎么用这些参数?

我的习惯是:拿到芯片数据手册后,先把最差情况下的Tsu和Th记下来。然后根据我的PCB叠层和走线长度,估算出一个保守的Tskew。最后用我前面给的公式算一下。

如果算出来的裕量为正,且不小于500ps,我就认为这个设计是稳健的。如果裕量很小,比如只有200ps,那我就会回去优化PCB走线,或者换一个时序要求更宽松的芯片。

要点总结: 建立时间和保持时间是RGMII的硬约束。Tskew则是我们工程师可以主动去优化的变量。你把Tskew压得越低,留给系统级的裕量就越充足。这块板子好不好调,很大程度看这里。