关键时序参数:Tsu、Th、Tskew、Tdelay详解
做RGMII接口调试,说白了就是跟这四个参数死磕。我刚开始接触这个的时候,总觉得时序分析是理论派搞的事情,直到一块板子在量产线上突然大批量丢包……嗯,那次教训让我老老实实把每个参数都啃透了。
咱们一个一个说清楚。
建立时间(Tsu)与保持时间(Th)
这俩是成对出现的,就像一对搭档。一个是敲门,一个是堵门。
建立时间(Tsu),数据必须在时钟有效沿到来之前,提前到达并稳定下来的最短时间。说白了,就是数据得提前站好位,等时钟来读。
保持时间(Th),时钟有效沿过去之后,数据还必须保持稳定的最短时间。时钟读完了,数据不能马上跑,得再待一会儿。
我个人习惯把这两个时间想象成一个“窗口”。时钟沿是这个窗口的中间线,Tsu是窗口打开的时间,Th是窗口关闭的时间。数据只有在这个窗口内稳稳当当的,才能被正确采样。
采样窗口 = Tsu + Th
实际可用窗口 = 时钟周期 - Tsu - Th
我在项目中遇到过一种情况:外部存储器的Th要求只有0.5ns,看着很宽松对吧?但PCB走线稍微长了一点,加上输出延迟,实际测出来Th只剩0.1ns了。差一点就翻车。你想想看,0.5ns的裕量,在1.2V的IO电平下,一丁点噪声就可能把它吃掉。
看datasheet时,我习惯先把Tsu和Th这两个值圈出来,然后直接减掉20%当设计目标。别问为什么,吃过亏就知道了。
时钟偏斜(Tskew)
Tskew,就是同一个时钟源到达不同芯片的时间差。理论上时钟应该同时到达所有地方,但现实是走线有长有短,温度有高有低,电压有起有伏。
我举个例子你就明白了:时钟从FPGA出来,跑到PHY那里用了1ns,跑到MAC那里用了1.3ns。那这0.3ns的差值,就是Tskew。它会直接吃掉你的时序裕量。
| Tskew来源 | 典型影响 | 我见过的坑 |
|---|---|---|
| PCB走线不等长 | 5-20 ps/inch | 同一组时钟线差900mil,直接丢包 |
| 温度变化 | 每10°C约1-2%延迟变化 | 高温老化箱里时序裕量缩了一半 |
| 电源噪声 | 0.1-0.5 ns | 电源纹波大时,眼图都闭上了 |
| 芯片工艺偏差 | 批次之间差几十ps | 换了一颗同型号芯片,时序违例 |
怎么对付Tskew?我建议三条路:
- 等长走线——RGMII时钟和数据线控制在±50mil以内,这是我给自己定的死规矩
- 减少负载——一个时钟输出只驱动一个负载,多点fanout用时钟缓冲器
- 留足裕量——设计时至少留30%的Tskew裕量,别卡着极限算
我曾经为了省一层,让时钟线绕了三个过孔才到目标芯片。结果Tskew直接超了200ps,整个RGMII链路全崩。后来老老实实加层,一个过孔都不给时钟线走。
传输延迟(Tdelay)
Tdelay,就是信号从发送端飞到接收端花的时间。包括芯片内部的输出延迟、PCB走线延迟、以及接收端芯片的输入延迟。
说实话,很多工程师只盯着走线延迟,忽略了芯片内部延迟。我踩过这个坑——FPGA数据输出延迟典型值1.2ns,最大值2.0ns。我按典型值算的,结果高温下延迟飘到1.9ns,时序直接炸了。
计算Tdelay时,我通常这样算:
Tdelay_total = Tco + Tpcb + Tinput
其中:
Tco = 芯片内部输出延迟(看datasheet的最大值,别用典型值)
Tpcb = PCB走线延迟(约170 ps/inch,FR4材质)
Tinput = 接收端输入延迟(一般几十ps到几百ps)
所有延迟都按最大值算。没错,就是最悲观的那种。虽然看起来裕量小,但至少量产时不会出幺蛾子。我宁愿设计时多花点心思,也不愿意在产线上一批一批退货。
四个参数的关系
这四个参数不是孤立的。它们共同决定了一个RGMII链路能不能正常工作。我总结了一个简单的判断逻辑:
- Tsu违例——数据到得太晚,追不上时钟沿
- Th违例——数据跑得太快,时钟沿还没读完就跑了
- Tskew太大——时钟和数据之间的相对关系被破坏,直接导致Tsu/Th违例
- Tdelay太长——整个时序窗口被往后推,可能同时触犯Tsu和Th
你看,Tskew和Tdelay本质上都在“偷”你的采样窗口。窗口本来就那么大,被偷一点就少一点。
这张图我每次做RGMII设计都会在脑子里过一遍。时钟源分两路,一路到发送端,一路到接收端。数据从发送端出发,经过Tdelay飞到接收端。接收端用自己的时钟沿去采数据——问题就出在这里:接收端采数据的时钟,和发送端送数据的时钟,不是同一个时刻到达的。中间的Tskew,加上数据的Tdelay,共同决定了你的采样到底在窗口的哪个位置。
我在项目里最怕看到的一种情况,就是Tskew方向和Tdelay方向是叠加的。比如Tskew让接收时钟变晚,Tdelay又让数据变晚,两个晚加在一起,数据很可能直接错过Tsu窗口。反过来,如果Tskew是负的,可能会让Th出问题。这两种情况我都遇到过,都不是什么愉快的回忆。
先算Tcycle,减去Tsu和Th,再扣Tskew和Tdelay,剩的就是你的底气。
做RGMII时序调校,说到底就是在跟时间赛跑。这四个参数,一个比一个能偷你的时间。我建议你拿到一块板子后,先把这四个参数的测量值或估算值列出来,算一下总裕量。如果小于200ps,那这事就得认真对待了。如果小于100ps,我劝你别急着投板,先把问题找到再说。
嗯,关于这四个参数的详解,就这么多。下一次你看到示波器上RGMII的眼图有点不对劲的时候,不妨先检查一下,是哪个参数在捣乱。