3. 时序偏移(Skew)的物理成因

聊RGMII时序,绕不开“偏移”这两个字。说白了,就是数据和时钟本该在同一个时间窗口握手,结果它们迟到了、早到了,甚至串位了。我入行那会儿,第一次调RGMII接口,愣是对着示波器折腾了两天——后来才发现,根本问题不在代码,而在PCB上那几根走线。

到底哪些物理因素会把时序搞乱?下面这四条,是我这几年被坑出来的总结。

3.1 PCB走线不等长

嗯,这个最直观。你想想看,RGMII的时钟和数据线,理论上要等长——但实际画板子时,绕来绕去总能差出几毫米。

每1英寸(约25.4mm)的FR4走线,延迟大概是140~170ps。RGMII在DDR模式下,时钟周期只有2ns,哪怕差个5mm,延迟偏差就超过30ps。对于setup/hold余量本就很紧张的千兆以太网,这已经相当致命了。

我的经验:我在一个4层板项目中,TXD[3:0]和TX_CLK走线长度差到400mil(约10mm)。结果跑1Gbps时,眼图完全闭合。后来手工补蛇形线把差值缩到50mil以内,问题消失。所以,我建议无论什么EDA工具,最后一定自己对一遍走线长度,别只靠DRC。

还有一点:蛇形线不是你想绕就能绕的。绕得太密,串扰和阻抗突变会引入额外偏移。常见的做法是保持蛇形线间距≥3倍线宽,且每段长度≥5mm,避免耦合。

3.2 过孔阻抗不连续

PCB走线经过过孔时,阻抗会骤然下降。一个典型的通孔,其寄生电容约0.5~1pF,寄生电感约0.5~2nH。信号过孔时发生反射和时延抖动,而且不同信号层的过孔数量不一时,偏移量差异很大。

我见过一个项目:时钟线走了两层,打了两个过孔;数据线走了同一层,一个过孔都没打。结果两个过孔带来的额外延迟约50ps,直接吃掉了setup余量。

避坑指南:我曾经因为省事,把RGMII的时钟线和数据线分别布在不同层(因为空间不够)。调试时发现眼图塌陷。后来强制所有RGMII信号走同一层,或至少保证过孔数量相同,再用等长约束——总算救回来了。说白了一句:过孔数要相等,阻抗要连续。

怎么量化?初步估算:一个过孔≈10ps~20ps延迟,具体取决于板厚、孔径和反焊盘设计。我习惯在约束中给每个过孔预留15ps的延迟预算。

3.3 温度梯度

温度变化会让走线的介电常数(Dk)和导体电阻漂移,进而改变传输延迟。FR4板材的Dk随温度升高而降低(温度系数约-400~-600 ppm/°C),但更麻烦的是,板子不同区域温度不同——比如靠近电源芯片的位置比边缘高15°C以上。

温差每10°C,FR4的延迟变化约1~2%。看着不多,但在2ns周期的RGMII里,100°C温差能带来近百ps的偏移。

温差(°C)FR4延迟变化对RGMII的等效偏移(ps)
10~0.15%~3
30~0.45%~9
60~0.9%~18
100~1.5%~30

我记得有次做高低温实验:常温下眼图开心得很,-40°C时也没事,但到85°C高温箱里,数据突然开始丢包。查了三天,最后发现是靠近DDR颗粒的一条时钟走线被烤热了,跟另一侧的冷走线形成了温差偏斜。解决办法?把所有关键信号走线布局在板子中心,周围留出散热铜皮,别贴着发热元件。

3.4 供电噪声

这个容易被忽略。RGMII输出的时钟和数据,其延迟受驱动器电源电压影响。如果VDDIO(通常是3.3V或1.8V)上有50mV的纹波,输出级晶体管的导通电阻变化会导致上升/下降时间不一致,进而引入时序偏移。

供电噪声对延迟的干扰是耦合的——纹波频率越快,影响越明显。比如高频DC-DC开关噪声(几百kHz~几MHz)会周期性地调制边沿位置,让抖动变得很“脏”。

关键指标:我实测过一组数据——VDDIO纹波从20mV增加到100mV,RGMII的Tco(时钟到输出延迟)的峰峰值从20ps膨胀到超过80ps。所以,我个人的硬性要求:RGMII供电纹波≤30mVpp,最好在10mV以内。供电回路单独用LC滤波,别跟大电流数字共用LDO。

还有一点:地弹(Ground Bounce)同样会导致偏移。如果IC的多个输出同时翻转,瞬态电流在封装电感上产生压降,不同输出的参考地电位瞬间不同——偏移就出来了。对策无非是加去耦电容、减少同时翻转数量、或者外扩扇出缓冲器。

知识关联图

下面这张图把四个成因的关联和典型影响画出来了,便于你记忆和排查。

时序偏移(Skew)物理成因架构 时序偏移物理成因 PCB走线不等长 过孔阻抗不连续 温度梯度 供电噪声 蛇形线串扰 几何长度差 寄生电容/电感 Dk温度漂移 局部温差 Tco调制抖动 排查建议: ①先查走线等长(蛇形线规则) → ②再看过孔数量一致 → ③热区走线居中处理 → ④最后测供电纹波及加滤波。

这四种成因不是孤立的——它们会叠加:比如走线长差20ps + 过孔差15ps + 温漂20ps + 电源噪声30ps = 85ps。RGMII在1Gbps下的有效时序窗口(不算Jitter)通常只有800ps左右,85ps虽然看着不大,但再加上收发器的PVT变化和片内抖动,很容易凑出几百ps的盈余消耗。所以,我个人习惯在layout阶段就把每种成因的预算写进约束文档,最后汇总取最悲观值来评估风险。