4. RGMII时序参数详解:Tclk、Tdata、Skew、Hold
说到RGMII接口,大家最先想到的肯定是那对时钟和数据线。但调来调去,发现真正要命的是几个时序参数:Tclk、Tdata、Skew 和 Hold。这四个参数如果没理清楚,你写再多的约束也是白费。我刚开始做RGMII的时候,就栽在Skew上——明明仿真都过了,一上板子就丢包。后来才明白,是没搞懂这几个参数怎么算的。
今天咱们就一个一个掰开讲,我尽量用大白话,但该有的公式和表格一个不少。你想想看,只要把这四个参数吃透了,RGMII的时钟偏移问题就能解决大半。
4.1 Tclk——时钟周期,一切的基础
Tclk 就是时钟的周期。RGMII通常跑125 MHz,对应周期8 ns。但这里有个坑:RGMII是DDR(双数据率)接口,每边沿都采样数据,所以有效数据速率是时钟频率的两倍——250 Mbps per bit。
Tclk 的公式很简单:
Tclk = 1 / f_clk
举个例子,125 MHz 时钟:
Tclk = 1 / 125e6 = 8 ns
记住,这个8 ns是你所有时序计算的起点。不管是Tdata还是Skew,最后都要归到Tclk这个参考上。
4.2 Tdata——数据有效窗口,你到底多宽?
Tdata 指数据在时钟边沿附近保持有效的窗口长度。RGMII 规范要求数据在时钟上升沿和下降沿都有效,但这个有效不是一瞬间,而是一段区间。
Tdata 通常由发送端决定。举个例子,在一个8 ns的周期里,数据可能在时钟边沿前后各维持几百皮秒的稳定。这个窗口就叫 Tdata 的“有效宽度”。窗口越窄,对Skew的容忍度就越低。
| 参数 | 符号 | 典型值(125 MHz) | 说明 |
|---|---|---|---|
| 时钟周期 | Tclk | 8 ns | 125 MHz 时钟 |
| 数据有效窗口 | Tdata | 1.5 ~ 2 ns | 取决于驱动器 |
| 建立时间 | Tsu | 0.5 ~ 1 ns | 接收端要求 |
| 保持时间 | Th | 0.5 ~ 1 ns | 接收端要求 |
为什么要注意 Tdata?因为如果你的 Skew 超出了 Tdata 的有效范围,数据就会被采样到错误的值。说白了,Tdata 就是你的“安全裕度”。
4.3 Skew——时钟与数据之间的偏移,罪魁祸首
Skew 是时钟边沿和数据边沿之间的时间差。RGMII 的 Skew 来源很多:PCB 走线长度差、管脚输出延迟差异、工艺偏差等等。我见过最头疼的情况是,同一个设计,换一批芯片,Skew 偏移了200 ps,直接导致通信失败。
Skew 可以分为两部分:
- 源端Skew:PHY 或 FPGA 内部产生的时钟与数据之间的偏移。数据手册一般会给出最大源端Skew。
- 板级Skew:PCB 上时钟线和数据线长度差导致的偏移。每英寸约150 ps(FR4材质)。
总Skew = 源端Skew + 板级Skew。这个总值必须小于 Tdata 的“有效裕度”。否则,就等着丢包吧。
4.4 Hold——保持时间,不要被Skew骗了
Hold time(保持时间) 是接收端对数据在时钟边沿之后必须保持稳定的最短时间。RGMII 的 Hold 要求通常和建立时间对称,但有一个关键点:Skew 会吃掉你的 Hold 裕度。
假设接收端要求的 Hold 时间是 0.8 ns。如果数据相对于时钟提前到达(正Skew),那么数据在时钟之后的有效保持时间会被缩短。反之,负Skew 会压缩建立时间。所以,Skew 就是一把双刃剑,既影响建立也影响保持。
实际调试中,我习惯用 FPGA 内部的 IODELAY 或 IDELAY 来调整数据相对于时钟的延迟,从而补偿 Skew。但要注意,IODELAY 的步进和范围有限,你不能无限制地补偿。
4.5 时序参数关系图——一眼看清全局
下面这张图展示了 Tclk、Tdata、Skew 和 Hold 的时序关系。蓝色是时钟,绿色是数据有效窗口,红色箭头表示 Skew,红色虚线框表示 Hold 要求。你可以看到,Skew 如果太大,就会让数据移出 Hold 或建立要求区域。
4.6 参数汇总与调试口诀
最后,我把四个参数整理成一个速查表。调试时对照这个表,至少能快速定位问题出在哪。
| 参数 | 谁决定的 | 典型范围 | 调什么 |
|---|---|---|---|
| Tclk | 时钟源 | 8 ns (125 MHz) | 保证频率稳定、抖动小 |
| Tdata | 发送端驱动器 | 1.5 ~ 2 ns | 选型、驱动能力 |
| Skew | PCB走线 + 芯片内部 | ±200 ~ ±600 ps | 等长布线、时序补偿 |
| Hold | 接收端 | 0.5 ~ 1 ns | IO延迟调整、约束检查 |
先看Tclk稳不稳,再看Skew大不大。
Tdata窗口要留够,Hold要求不能垮。
等长布线是基础,延迟链子做补偿。
时序约束写清楚,上板测试不抓瞎。
好了,这一章的内容就到这。你应该能感觉到,RGMII的时序调试其实就是围绕这四个参数展开的。下回碰到接口不通时,别急着换芯片,先拿这个框架套一套,大概率能省很多时间。