2、信号完整性基础:传输线效应、反射与串扰对时序的影响
做 DDR4 设计的人,迟早要跟信号完整性打交道。
在我刚入行那会儿,总觉得时序问题就是走线长度没算准。后来有一次板子调不通,查了三天,最后发现是反射把数据眼图给压没了。从那以后我就明白——信号在传输线上怎么跑,比走线长几毫米重要得多。
2.1 传输线效应——高速信号的本质
DDR4 的数据速率起步就是 1600 MT/s,信号边沿快到纳秒级。这时候 PCB 走线不再是一条导线,而是一根传输线。
传输线的核心特征就是特征阻抗 Z0。常见单端走线 Z0 控制在 50Ω 左右,差分对 100Ω。如果走线的瞬时阻抗在整个路径上不连续,信号就会在阻抗突变点发生反射。
我在一个 DDR4 项目里就吃过这个亏。顶层走线换层到内层,过孔阻抗没控制好,结果接收端看到的信号像过山车一样。换了更小的过孔,并在换层点附近加了个地过孔,才压下来。
2.2 反射机制——从原理到波形畸变
反射系数公式大家都熟:Γ = (ZL – Z0) / (ZL + Z0)。
当负载阻抗 ZL 与传输线 Z0 不匹配时,反射波就会往回跑。源端看到的就是入射波 + 反射波的叠加结果。
DDR4 常见的反射问题集中在三个地方:
- 驱动端输出阻抗与走线不匹配——源端反射造成过冲或振铃。
- 末端端接电阻开路或值偏差——DDR4 地址命令信号常用 On-Die Termination (ODT),ODT 设置错或精度不够,就会在接收端形成二次反射。
- Stub(分支)过长的走线——比如 Fly-by 拓扑中的分支线,长 stub 会产生谐振,把时序窗口吃干净。
我曾经在一个 8 层板的设计中,发现 CK 时钟走线的过冲超过 500mV,导致 PLL 输入受干扰,数据窗移位了 50ps。后来串了个 33Ω 的源端电阻,并在 VTT 端用精确的 50Ω 端接,波形才恢复正常。
2.3 串扰——相邻信号之间的“悄悄话”
串扰说白了就是一根线上的能量耦合到旁边的线上。DDR4 布线密集,DQ 和 DQS 之间、地址线和控制线之间,串扰非常常见。
串扰分两种:
- 近端串扰(NEXT)——攻击信号在源端附近耦合到受害线上,形成一个和攻击信号同向的噪声尖峰。
- 远端串扰(FEXT)——在接收端附近耦合,波形与攻击信号的微分相关,脉冲更窄但幅度可能更高。
| 特性 | NEXT | FEXT |
|---|---|---|
| 出现位置 | 与攻击源同侧 | 与攻击接收端同侧 |
| 脉冲宽度 | 约等于攻击信号的上升时间 | 更窄,与耦合长度和距离差有关 |
| 对时序影响 | 可能使受害信号触发提前 | 可能引起误触发或建立时间不足 |
| 控制手段 | 加大间距、加屏蔽走线 | 控制平行长度、3W 规则 |
在实际工程中,我通常用 3W 规则(走线中心距 ≥ 3 倍线宽)来抑制串扰。如果空间不够,就在两条敏感线之间塞一条地线。DDR4 的时钟和 strobe 线是最敏感的,必须优先保护。
举个真实的例子:有一版 DDR4 板卡,DQ0 ~ DQ7 和 DQS0 走得非常近,间距只有 1.5W。结果在读取时,DQS 的上升沿被 DQ 翻转的串扰耦合出一个毛刺,导致选通时刻偏差了 30ps。我把间距拉开到 3W 之后,眼图张开了 15%。
2.4 反射和串扰对时序的综合影响
实际芯片接收端看到的信号,是反射、串扰、损耗三者叠加的结果。它们合力改变信号的阈值穿越点,从而影响 tSU 和 tH。
我习惯用“信号裕度”这个指标来衡量:
- 电压裕度:信号幅度必须满足 VIH(AC) 和 VIL(AC) 要求,反射会导致过冲降低有效摆幅。
- 时间裕度:由于反射 + 串扰造成的抖动,可能吃掉几十皮秒到上百皮秒的时序预算。
DDR4 的时序预算本来就很紧,2600 MT/s 时一个 UI 才 384ps,建立时间和保持时间各占一半。如果反射和串扰造成了 50ps 的边际损失,那留给芯片内部采样的余量几乎为零。
2.5 实际工程中怎么控
讲理论是为了落地。我个人的经验是:
- 先做预布局仿真——用 IBIS 模型跑几根典型线,看反射系数和串扰幅度。目标是把单端反射系数控制在 0.1 以下,串扰耦合系数控制在 0.05 以下。
- 端接检查——DDR4 的 ODT 值一般设为 RZQ/4(≈60Ω)或 RZQ/2(≈120Ω),必须和走线 Z0 匹配。我曾经遇到过 ODT 引脚虚焊,导致反射直接超标。
- 间距规则严格执行——时钟和 DQS 信号与其他信号间距不低于 20mil,DQ 组之间 15mil,必要时包地处理。
- 避免长 Stub——Fly-by 拓扑的支线长度建议小于 500mil。
讲到这里你可能会问:把这些问题都解决了,时序就没问题了吗?