3. RGMII时序参数:Tsu/Th/Tco/Tsetup详解——建立时间与保持时间窗口

各位好,我是老周。今天咱们聊RGMII接口最核心,也是最容易踩坑的一块——时序。

很多新手工程师,甚至干了两三年的,拿到RGMII原理图开始Layout,照着参考设计一通画,结果板子打回来,跑100Mbps没问题,一到1000Mbps就疯狂丢包。板子一测,眼图一塌糊涂。

为什么?时序没算明白。

说白了,RGMII是源同步DDR接口。数据在时钟的双沿采样,频率又高(125MHz DDR,等效250Mbps每对线)。你的PCB走线延时,哪怕多出来100ps,信号沿就可能跑出采样窗口,直接抓错数据。

所以在动手铺线之前,必须把下面这几个参数嚼烂了。

3.1 建立时间(Tsu)——数据必须提前到

建立时间,英文叫Setup Time,缩写Tsu。

定义很简单:在时钟有效沿到来之前,数据信号必须提前稳定并保持住的最短时间。换句话说,数据不能在时钟沿马上要来了才变,得提前站好位置。

用公式理解:

T_data_arrival + Tsu ≤ T_clock_arrival + T_period

这个不等式一旦被违反,寄存器采到的就是不确定的状态,可能是0,可能是1,甚至可能是亚稳态。亚稳态一旦传播到后续逻辑,整个系统行为就不可预测了。

我在项目中遇到过一例:一个百兆/千兆自适应交换机,千兆模式下偶尔出现CRC错误,频率不高,但很顽固。最后定位到是FPGA到PHY之间的RGMII TX路径上,有个过孔产生了多余寄生电感,导致数据路径延时变大,setup margin被吃掉了。

Tip: 所以画PCB时,确保时钟走线和数据走线等长,不是简单的“等长即可”,而是要考虑过孔、绕线弯曲、玻纤效应带来的额外延时差异。我个人习惯对时钟路径额外加50-100ps的延时裕量(通过蛇形走线或加长10-15mil)。

3.2 保持时间(Th)——数据不能跑太快

保持时间,Hold Time,缩写Th。

它跟建立时间对称:在时钟有效沿到来之后,数据信号必须继续稳定保持的最短时间。

建立时间要求数据“早点到”,保持时间要求数据“别急着走”。

公式同样简单:

T_clock_arrival + Th ≤ T_data_hold_end

违反保持时间通常更隐蔽,因为它往往是由信号完整性过度优化造成的:

  • 数据信号上升/下降沿太陡
  • 或者PCB走线太短、阻抗不连续导致反射叠加

保持时间违规的表现是:数据在时钟沿之后快速弹跳或衰减,导致接收端在保持窗口内看到错误电平。我接手过一个板卡,运行几小时就死机。换不同批次的PHY芯片,表现还不一样。查到最后是保持时间不够,不同芯片的IO驱动强度差异刚好把margin用光了。

Warning: 千万别一味追求“等长”把数据走线缩得很短。过短的走线+过驱动,保留的保持时间margin可能为负。RGMII信号在PCB上的最短长度,我个人建议至少不低于500mil(约12.7mm)。这是从实际SI仿真和测试中总结的。你想想看,如果走线长度差太多,边沿反射会吃掉保持窗口。

3.3 Tco——输出延迟

Tco,Clock-to-Output Delay。它定义的是:从时钟沿到达发送器(FPGA或PHY)内部,到数据信号出现在发送器输出引脚所经历的时间。

不同厂家、不同工艺,Tco的标称值和最大值会差很多。FPGA通常比ASIC或PHY芯片的Tco更可控,但也会受内部逻辑路径、IOB配置、温度电压的影响。

所以数据到位的总延时 = PCB走线延时 + 发送器内部Tco。你需要把这个总延时和时钟到达接收器的时间做比较。

我曾经碰过一个案例:某FPGA厂家更新了芯片走带,Tco变了50ps,但他们的datasheet更新不及时。我们沿用老版本的时序预算,结果新版芯片总是setup违规。最后还是我跟FAE反复沟通确认,才拿了内部测试数据手工修正了时序模型。

你看,即使大厂也可能在Tco参数上出错,别迷信datasheet。

3.4 Tsetup——仔细区分Receiver与Transmitter的setup含义

这里要特别提一下Tsetup这个记号在资料中的歧义:

  • 在接收器(Receiver)的datasheet中,Tsetup延续前面的定义——数据必须在时钟沿前稳定。
  • 在发送器(Transmitter,如FPGA)的datasheet中,有时候会把“时钟沿从发送器内部发出到数据可被采样所需的时间”也叫做Tsetup,这个和保持时间有重叠,容易搞混。我建议统一叫“输出建立时间”或“发送端建立时间”。

实际工作中,我更关注的是接收端的Setup/Hold窗口。只要你的走线延时、Tco、Tskew能把数据送入接收器要求的窗口内,就不会出错。

3.5 建立时间与保持时间窗口——一次看懂

下面这张图涵盖了整个时序计算的核心逻辑:

RGMII 建立时间与保持时间窗口示意图 RGMII 建立时间与保持时间窗口示意图 发送器 FPGA / PHY / MAC 接收器 PHY / FPGA / MAC 源同步时钟 + 数据 时钟路径(PCB走线延时 + Tco_clock) 数据路径(PCB走线延时 + Tco_data) Tco 接收器内部采样窗口 建立时间(Tsu) + 保持时间(Th) 数据到达 关键判断: 数据到达时间 在 时钟沿+Tsu 之前 → 满足建立时间 数据离开时间 在 时钟沿+Th 之后 → 满足保持时间

图中四个核心要素:

  1. 发送器:产生时钟和数据,各自有Tco。
  2. PCB走线:时钟路径和数据路径的差分阻抗、长度、介质损耗共同带来额外延时。
  3. 接收器:要求数据在某个时间窗口内稳定——即建立时间窗口和保持时间窗口。
  4. 最终的时序预算:把Tco、PCB延时、时钟歪斜(skew)全部加起来,看数据落入窗口的位置。

嗯,这里要注意,时序窗口不是无限宽的,数据必须落在窗口中间。如果太靠前(setup margin小)或太靠后(hold margin小),都会出问题。

3.6 时序参数对比一览

为了方便之后Layout约束和对标,我整理成了一张表:

参数缩写定义对PCB的影响典型值(RGMII)
建立时间 Tsu 时钟沿前数据必须稳定的最短时间 数据走线不能太长(增大延时) 0.8~1.5 ns
保持时间 Th 时钟沿后数据必须稳定的最长时间 数据走线不能太短(减小延时) 0.2~0.8 ns
输出延迟 Tco 时钟沿到数据出现在输出引脚的时间 厂家datasheet为准,不同IO/温度下差异大 1.5~5.0 ns
采样窗口 Tsetup+Th 接收器要求数据稳定区间 直接决定等长约束的margin 1.0~2.5 ns

你看,保持时间Th窗口比较窄(0.2~0.8ns),这就是为什么它对PCB寄生电感、过孔、驱动强度特别敏感。建立时间窗口稍宽(0.8~1.5ns),但同样不能掉以轻心。

3.7 避坑指南:时序分析中的常见错误

上面讲完了概念和表格,我再说几个实际踩过的坑,你们在Layout前可以对照自查:

  • 坑1:只算等长,不按时序预算。 我见过不少工程师上来就说“RGMII走线要等长,误差不超过50mil”。等长是手段,不是目的。重点是你算出来的数据路径延时和时钟路径延时之差,要落在接收器的窗口内。等长只是实现手段之一。
  • 坑2:忽略过孔和脚趾。 每个过孔大约增加15~25ps的走线延时。如果时钟路径有3个过孔、数据路径只有1个,两者延时差可能达30~50ps。别以为“等长”仅指走线长度,要算上过孔、绕线、脚趾的总等效长度。
  • 坑3:温度电压变化。 Tco会随温度升高而变慢(大约0.2%/℃),随电压降低而变慢。如果你的板子在常温下勉强满足setup,批量组装或高温下大概率翻车。
  • 坑4:不考虑信号上升/下降时间。 即使你的走线等长完全满足,如果上升/下降沿太陡,反射和过冲可能让数据在保持窗口内来回跳动,等同保持时间被压缩。SI仿真不是可有可无。
关键要点回顾:
  1. 建立时间(Tsu)决定数据最晚何时到,保持时间(Th)决定数据最早何时走。
  2. Tco(发送器输出延迟)必须计入总延时成本。
  3. Layout前做一次完整的时序预算(用Excel或工具算一遍),而不是只盯着“等长”两个字。
  4. 仿真和实测能提前暴露margin不足的问题,别等到回板再去调。

总结一句话:时序窗口是死的,但你在PCB上走出的每一段线,都在改写这个窗口的位置。