3. RGMII时序参数详解:Tsu、Th、Tskew、Tcycle
做RGMII接口调试,最头疼的就是时序。我记得刚入行那会儿,拿到一块板子,波形看着还行,但就是偶尔丢包。查了三天,最后发现是一个参数没吃透。说白了,RGMII的时序参数就四个核心:建立时间、保持时间、时钟偏斜、周期。把它们弄明白了,排查问题就顺手多了。
3.1 建立时间(Tsu)——数据得提前到
建立时间,就是时钟有效沿到来之前,数据必须已经稳定下来的最短时间。如果数据到的太晚,寄存器可能采到不确定的值。
核心公式:Tsu_margin = Tclk_delay + Tdata_early - Tsetup_required
简化理解:数据要比时钟沿早到至少Tsu,不然就冒风险。
我在项目中遇到过一块板子,DDR走线长了50mil,Tsu就不够了。后来调整了时钟走线长度,问题解决了。经验是:在布局阶段,就尽量让数据和时钟的等长偏差控制在±20mil以内。
3.2 保持时间(Th)——数据不能跑太快
保持时间刚好相反:时钟沿到来之后,数据还得再维持一段时间不能变。如果数据变化太快,时钟刚采完,数据就变了,那也完蛋。
避坑指南:我曾经吃过一次亏——只关注了建立时间,保持时间没管。结果时钟抖动大的时候,数据保持不住,误码率飙升。后来加了保持时间检查,才发现是输出驱动过强、信号过冲导致。
保持时间的余量计算:
- Th_margin = Th_hold + Tclock_skew - Tdata_hold_time
- 通常RGMII要求的Th是1ns左右(具体看芯片手册)。
3.3 时钟偏斜(Tskew)——罪魁祸首
Tskew,说白了就是时钟到达不同接收端的时间差。RGMII是源同步接口,时钟和数据由同一端发出,但走线长度、过孔、阻抗变化都会引入偏斜。
我个人习惯:在原理图阶段,就把时钟和数据线标注好等长要求。如果PCB上能严格等长,Tskew一般可以控制在50ps以内。但要是遇到跨层、换孔、参考层不连续,偏斜可能飙到200ps以上。
Tskew的组成:
- 时钟路径的传播延迟偏差
- 数据路径的传播延迟偏差
- PCB制造公差(介电常数、线宽变化)
- 温度电压变化引起的延迟漂移
3.4 周期(Tcycle)——基频决定一切
RGMII的时钟频率通常为125MHz(千兆模式),周期就是8ns。但注意,DDR采样模式下,每个时钟沿都传一组信号,所以数据率是250Mbps/每bit。周期偏差主要来自时钟源抖动和PLL噪声。
| 参数 | 典型值(125MHz) | 说明 |
|---|---|---|
| Tcycle | 8 ns | 时钟周期 |
| Tsu | 1.0~1.5 ns | 建立时间要求 |
| Th | 1.0~1.5 ns | 保持时间要求 |
| Tskew (skew between data & clock) | ±0.5 ns | 数据和时钟间的偏斜 |
| Tskew (between data lanes) | ±0.2 ns | 数据通道间的偏斜 |
你想想看,如果Tskew到了±0.5ns,加上Tcycle只有8ns,剩下的建立/保持窗口就很窄了。再碰上PCB阻抗不连续,反射把波形弄坏,时序铁定崩。
3.5 时序余量分析流程
排查阻抗不连续导致的时序问题,我通常走这个顺序:
- 第一步:看Tcycle是否稳定(用示波器测时钟抖动)
- 第二步:测Tskew,对比芯片手册要求
- 第三步:看Tsu和Th窗口,尤其检查过孔附近有没有明显振铃
- 第四步:用TDR看阻抗突变位置,确认和Tskew异常的对应关系
注意:阻抗不连续不会直接改变Tsu、Th的定义值,但会恶化实际波形,让有效建立/保持时间变短。我曾经遇到一个案例:过孔stub太长,反射导致数据沿变缓,保持时间从1.2ns缩到了0.6ns,直接丢包。
3.6 核心知识图谱
下面这张图把四个参数的关系画清楚了。你看看就知道了。
3.7 小结一下
四个参数,每个都有它的脾气。Tsu和Th是芯片的硬性要求,Tcycle是芯片工作节奏,Tskew是PCB设计和工艺水平的体现。阻抗不连续会优先影响Tskew,然后压缩Tsu/Th的可用窗口。所以当你看到RGMII丢包、误码时,记住先查Tskew,再去看波形质量。
我个人经验:仿真时跑个眼图,看看Tsu和Th的边界在哪里。如果还有余量,就用TDR找阻抗突变点。很多时候,一个过孔的不连续就能吃掉一半的时序裕量。