RGMII时序参数解读:Tsetup、Thold、Tskew

做RGMII板级验证,绕不开的就是那三个时序参数——建立时间、保持时间和时钟偏斜。说白了这个时序参数没看懂,你后面做时序收敛就是在瞎蒙。我刚开始接触RGMII的时候,也以为只要走线等长就万事大吉,结果板子调了整整两周都跑不起来。

1.1 建立时间:数据必须提前到

建立时间就是数据在时钟有效沿到来之前,需要提前准备好的最短时间。你想想看,芯片内部寄存器可不是立刻就能把数据吃进去的,它需要一点时间做内部准备。这个时间,我们就叫它Tsetup。

我个人的习惯是,先看芯片手册里列出的建立时间要求。不同的厂商、不同的速率等级,Tsetup差异很大。举个实际例子:

标准 速率 Tsetup (典型值) 说明
RGMII v1.3 125MHz 1.0ns 普遍要求的建立时间
某些FPGA 125MHz 0.8ns 可以宽松一点
高抖动环境 125MHz 1.2ns 需要留更多余量

我在项目中遇到过一件尴尬事。有个项目用了一个新款的交换机芯片,手册里写的是Tsetup 0.9ns,我照着之前FPGA的经验画了板子,结果死活出不来数据。后来仔细一查,人家手册里写的是0.9ns但附注里加了句"含20%的抖动预算"。也就是说,实际留给PCB走线的只有0.72ns!那可不就翻车了。

注意:芯片手册里的建立时间参数,一定要看清楚测试条件。是包含抖动还是不包含?是常温还是全温范围?我见过好多人栽在这个坑里。

1.2 保持时间:数据不能跑太快

保持时间跟建立时间刚好相反。它指的是时钟有效沿过后,数据还需要维持一段时间不变。芯片内部需要在这个时间里把数据稳稳锁存住。这个参数叫Thold。

保持时间违例有个特别坑的地方——它跟频率没关系!你降频到10MHz,保持时间违例照样存在。因为保持时间是相对于时钟沿的相对关系,不是周期的比例。

我给大家列几个常见的保持时间要求:

  • RGMII标准v1.3:Thold通常要求 > 0.5ns
  • 某些FPGA的IOB:Thold可以做到 > 0.2ns
  • 高速PHY芯片:Thold往往要求 > 0.8ns

保持时间违例最常见的表现是什么?就是你发现数据偶尔错一位,而且频率变了还是一样错。我有一个朋友(真的是朋友不是我),做一块板子RGMII接口老是随机丢包,查了整整一星期,最后发现是CK到DATA的保持时间只有0.3ns,芯片要求0.6ns。解决办法是什么?把时钟走线绕长一点,增加延迟。就这么简单一招,问题解决了。

一个小技巧:当你同时遇到建立时间和保持时间问题,优先搞定保持时间。因为保持时间跟频率无关,修起来更麻烦。建立时间实在不行还能降频跑,保持时间可没法降频解决。

1.3 时钟偏斜:看不见的时序杀手

时钟偏斜,就是时钟信号到达不同接收端的时间差异。在RGMII里,咱们至少涉及两个时钟路径:从PHY到MAC的接收时钟,或者从MAC到PHY的发送时钟。这两条路的延迟如果相差太大,就会吃掉你的建立时间和保持时间预算。

我习惯把Tskew分为两部分看:

  1. 走线长度差导致的偏斜:每100mil的走线差,大约产生15ps左右的延迟差。这个在PCB layout阶段就要控制好。
  2. 过孔和器件引脚导致的偏斜:不同信号层、不同过孔数量,都会贡献额外的偏斜。我记得有一次做16层板,过孔从顶层打到BGA正下方,一量发现过孔贡献了将近80ps的偏斜。
偏斜来源 典型值 如何控制
微带走线(表层) ~150ps/inch 严格控制等长
带状线(内层) ~170ps/inch 注意层间差异
过孔 30~80ps/个 尽量减少过孔,用背钻
器件焊盘 10~30ps 统一器件封装

关键点:Tskew不是单独存在的,它必须和Tsetup、Thold一起计算时序余量。公式很简单:

Setup Slack = Tperiod - Tsetup - Tskew

Hold Slack = Thold - Tskew

注意看,建立时间余量里Tskew是减去的,保持时间余量里Tskew也是减去的。也就是说,Tskew越大,两种时序余量都变小。

RGMII时序参数关系示意图 时钟周期 Tsetup 建立时间 Thold 保持时间 时钟沿 下一个时钟沿 数据有效窗口 Tskew 时钟偏斜 时序余量计算 Setup Slack = Tperiod - Tsetup - Tskew Hold Slack = Thold - Tskew 注意:Tskew同时影响建立时间和保持时间的余量

1.4 实战中的时序调试

咱们讲完了这三个参数的原理,我说说在实际板级验证时,怎么利用它们来做调试。

我的三板斧:
  • 光眼图远不够:眼图只能看出信号质量,看不出建立时间和保持时间是否满足。一定要结合示波器的时序测量功能,直接测时钟沿到数据跳变沿的时间。
  • 看两个沿:RGMII用的是DDR(双沿)采样,所以上下沿都要测Tsetup和Thold。上沿满足不代表下沿也满足。
  • 温度循环跑一跑:很多时序违例是温漂引起的。常温没事,一到高温就出事。这个我在一个5G项目里踩过坑。

还记得有一次,我在调一块8层板的RGMII接口。仿真下来时序余量有200ps,觉得稳了。结果样机回来一测,Tsetup余量只有80ps。查来查去,发现是仿真模型里少了PCB板材的介电常数公差。实际板材的介电常数比仿真值大了10%,导致走线延迟比预期多了20%。从那以后,我仿真都习惯把最差情况(WC)和最好情况(BC)都算一遍。

避坑指南:我曾经因为忽略过孔的寄生电容,导致RGMII数据的边沿变缓,建立时间被吃掉150ps。如果你的板子走线等长做得很好但时序就是差一点,去查一查过孔的规格——孔径、焊盘大小有没有选对。

最后,再说个实操层面的经验。我在做时序分析时,会把所有的时序参数整理成一张表,挨个核对:

检查项 需要关注的参数 典型目标值
时钟到数据走线等长 Tskew < 50mil长度差
过孔数量统一 Tskew 每组信号过孔数相同
时钟沿与数据沿对齐 Tsetup, Thold 中心对齐偏差 < 0.5ns
温度全范围测试 Tsetup, Thold, Tskew 余量 > 100ps

这三个参数你吃透了,RGMII时序就算入门了。接下来就是靠测量和计算去判断你的板子到底行不行。嗯,这些内容我自己平时做板级验证,每天都在用。