RGMII时序参数详解
做RGMII接口设计,说白了就是在跟时间赛跑。你想想看,数据在时钟的上升沿和下降沿都要采样,留给你的时间窗口其实非常窄。
我刚开始接触这个接口时,总觉得不就几个时序参数嘛,查查数据手册就行了。结果第一次调板子,死活跑不上125Mbps,眼图都裂了。
从那以后,我就老老实实把这些时序参数一个个吃透了。这章咱们就掰开揉碎,把Tsu、Th、Tskew这几个关键参数讲明白。
建立时间 Tsu 与保持时间 Th
Tsu,建立时间,指的是数据在时钟有效边沿到来之前必须稳定存在的时间。Th,保持时间,指的是时钟有效边沿到来之后数据必须继续保持稳定的时间。
这两个参数是所有同步时序电路的基础。RGMII也不例外。
为什么RGMII对Tsu和Th要求更严格?
因为它是双沿采样。时钟频率本身是125MHz,但数据速率是250Mbps。每个时钟周期内,你要在上升沿和下降沿各送一笔数据。时间窗口被压缩了一半。
我见过不少新手设计师,只盯着时钟频率算时序裕量。这样做出来的板子,大概率会出问题。
举个例子,某款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对抖动的容忍度相对高一些,但如果抖动太大,还是会吃掉你的时序裕量。
时序裕量计算
弄清楚Tsu、Th、Tskew之后,我们来看一个实际问题:我的设计到底能不能跑?
通常,我们会用下面这个公式来估算时序裕量:
有效的采样窗口 = 时钟周期 × 2 - (Tsetup_max + Thold_max + Tskew_max)
其中,时钟周期(125MHz) = 8000ps
这里 Tsetup_max 和 Thold_max 是芯片手册中的最大要求值
Tskew_max 是所有PCB和工艺偏差的总和
说白了,就是用最差情况下的可用时间,减去最坏情况下的要求时间。剩下的,就是你的裕量。
我建议在设计初期,就给自己的PCB走线预算一个200ps~300ps的skew。这个数字对于四层板来说,是可以通过常规布局走线做到的。
下面这张图,把我刚才讲的关键时序参数之间的关系串了起来:
关键参数汇总
为了让大家查阅方便,我把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走线,或者换一个时序要求更宽松的芯片。