4. RGMII 时序参数详解

聊到 RGMII,其实绕不开的就是那四个“T”开头的参数。我刚开始做这个接口的时候,总觉得时序参数都是数据手册里印好的数字,照着查就行。结果呢?头一次调板子,跑 1000M 模式,眼图就是睁不开。后来才明白——参数是死的,但系统里的走线、温度、电压是活的。你得真懂它们代表什么,才能做对设计。

下面我挨个拆。每个参数我都用咱硬件工程师的习惯给个“人话版”定义,再附上典型值,最后说一个我踩过的坑。

4.1 Tsetup(建立时间)

人话版:时钟沿到来之前,数据就得稳稳待在输入引脚上,不能晃。这个“提前量”就是 Tsetup。你想想看,如果你在时钟边沿的前一刻才把数据喂进去,接收端根本来不及锁存。

RGMII 里通常有两种参考模式:

  • 中心对齐模式(Source-Synchronous):数据在时钟上下沿都采样,Tsetup 一般要求 ≥ 1 ns。
  • DDR 模式(双倍数据率):每个时钟周期传两次数据,对建立时间更敏感,典型值 0.8~1.2 ns。
我的习惯:做 Layout 前,我会先算出驱动端的输出延迟,再反向推算接收端需要的 Tsetup margin。宁可多留 20%,也别卡边。

有一次我在一个四层板项目里,RGMII 走线长了快 2 英寸,结果建立时间余量几乎为负。后来查出来是因为过孔把阻抗搞崩了。嗯,这里要注意:走线长度和过孔数直接影响 Tsetup 的实际余量。

4.2 Thold(保持时间)

人话版:时钟沿过后,数据还得老老实实再待一会儿,不能立刻跑掉。这个“呆多久”就是 Thold。如果保持时间不够,接收端会锁到一个乱七八糟的“过渡态”。

典型值:RGMII 接收端 Thold 一般在 0.5~1.5 ns 之间。注意,这和 Tsetup 是一对儿——你不能光顾着缩短建立时间,而把保持时间挤没了。

我曾经踩过的坑:有一款 FPGA 的 IO 延时参数里,Thold 只有 0.3 ns。我以为够了,结果低温测试时频繁丢包。后来在 PHY 芯片的 datasheet 里翻到一个备注:当温度低于 0°C 时,Thold 会恶化 0.2 ns。从此我养成了习惯——至少留 0.5 ns 的 guard band。

4.3 Tskew(时钟与数据之间的偏斜)

人话版:时钟信号和数据信号从发送端到接收端,走的路径不一样长,到达时间就会有个差值。这个差值就叫 Tskew。RGMII 最头疼的就是它。

参数含义:

  • 内部 Tskew:芯片内部时钟树与数据路径的偏差,一般 < 100 ps。
  • 外部 Tskew:PCB 走线长短不匹配导致的偏差,这就是咱们 Layout 要管的事。

典型要求:整个链路上 Tskew 应控制在 ±500 ps 以内,否则需要在接收端用 DLL 或 PLL 做相位调整。

关键认知:Tskew 不是越小越好,而是要 已知。你只要能算准它,就可以在 FPGA 里做内部去偏差(比如 IDELAY)。怕的是 Tskew 随风飘——跟温度、电压一起变,那就没法补偿了。

我调试过一块六层板,Tskew 在室温下只有 300 ps,看起来完美。但放到 85°C 烘箱里,直接飙到 1 ns。查了半天,原来是两个 FPGA bank 的供电平面不同,高温下 IR drop 差异让输出延迟变了。所以记住:环境测试不能省。

4.4 Tvalid(数据有效时间)

人话版:发送端把数据放到总线上的时候,这个数据能在多长时间内保持稳定、可以被接收端采到。简单说就是“数据摆上桌多久才撤走”。

典型值:RGMII 驱动器的 Tvalid 通常比时钟周期的一半略短。例如在 125 MHz DDR 模式下,半个周期是 4 ns,而 Tvalid 大概只有 3~3.5 ns。这意味着有 0.5~1 ns 的“模糊区”不能用于采样。

参数 RGMII 典型值(125 MHz DDR) 人话解释
Tsetup ≥ 1.0 ns 时钟沿前数据得定住
Thold ≥ 0.8 ns 时钟沿后数据不能溜
Tskew ≤ ±500 ps 时钟和数据到达的时间差
Tvalid 3.0~3.5 ns 数据稳在总线上的窗口

你可能会问:Tvalid 怎么影响设计?举个例子,如果 FPGA 内部的输出 buffer 的 Tvalid 太短,就算时钟抖动再小,接收端也可能会采到变化的沿。我记得有一次,我为了压低功耗把 FPGA 输出驱动强度调到了最低档,结果 Tvalid 缩水了 30%,后面被迫改版。所以说,驱动强度不是随便选的。

4.5 把它们串起来看

说白了,这四个参数不是孤立的。Tsetup 和 Thold 合起来构成了接收端需要的采样窗口。Tskew 会把时钟和数据窗口错开,让实际能用的窗口变小。Tvalid 则限制了发送端能提供多大窗口。

你可以想象一个公式:

余量 = Tvalid - Tskew - (Tsetup + Thold)

余量必须大于零,且最好留 200 ps 以上。

注意:上面这个公式是个简化版。实际还要加上时钟抖动、电源噪声、串扰等因素。我一般会在公式右边再减去 100 ps 的心理安全系数。别嫌多,总比返板子强。
RGMII 时序参数关系图 时钟 CLK 数据 D 控制信号 CTRL Tsetup Thold Tskew Tvalid = 数据稳定在总线上的时间窗 接收端采样窗口 = Tsetup + Thold 需要被 Tvalid 覆盖,同时考虑 Tskew 偏移

上图把四个参数的关系画出来了。时钟和数据之间的 Tskew 把 Tvalid 窗口整体平移,接收端必须用 Tsetup + Thold 这一对“钳子”夹住有效数据。你可以把它想象成棒球手套——手套必须在球到达的位置张开,而且合上后球不能掉。Tsetup 和 Thold 就是手套的张合尺寸,Tskew 是球路偏移,Tvalid 是球的飞行轨迹长度。

总结一个口诀:
建立保持不贪心,偏斜走线要对齐;
有效窗口算仔细,余量留够才放心。

下回当你拿到 PHY 或 FPGA 的 datasheet,看到那堆 Tsetup / Thold / Tskew / Tvalid 表格时,别只瞄一眼典型值就过。拿出计算器,把你自己的走线延迟、温度系数都加进去,算一算真正的设计余量。我敢说,只要这一步做扎实,RGMII 调试里 80% 的时序问题都能提前筛掉。