3. 信号完整性基础:传输线理论、阻抗控制、反射
3.1 为什么信号完整性要从传输线说起?
很多刚入行的工程师觉得信号完整性是玄学。其实它没那么玄。说白了,就是信号在 PCB 走线上跑的时候,会碰到什么问题。
我刚开始做 DDR 调试时,有个项目总是读数据偶尔出错。查了几天,最后发现是走线太长,信号跑得慢,时钟和数据在采样点没对齐。那会儿我才真正意识到——PCB 上的每一根走线,都是一条传输线。
什么是传输线?就是两条导体,一条送信号,一条回流。在低速电路里,我们可以忽略它的长度;但在 DDR 这种高速场景下,信号波长和走线长度在一个量级时,走线就不再是“一根短线”,而是一个有分布电感和分布电容的传输通道。
高频信号在PCB上的行为:信号并不是瞬间到达另一端,而是以电磁波的形式向前传播。传播速度取决于介电常数,典型 FR4 板材下,信号在走线上的传播速度大约是 15 cm/ns(光速的一半)。
我个人习惯在 DDR 设计中,先把所有走线长度都列出来,算出每个信号的传播时延。你可以用这个公式:
t_pd = L / v
其中:
t_pd —— 走线时延(ns)
L —— 走线长度(cm)
v —— 传播速度(cm/ns),约 15 cm/ns(FR4)
哦,注意了。这个速度会受铜厚、阻焊层影响,但不深究时,用 15 cm/ns 足够了。
3.2 特性阻抗——PCB 上那根看不见的电阻
为什么走线要控制阻抗?因为信号在传输线上每一点看到的“电阻”都是特性阻抗 Z₀。如果这个值突变,信号就会反射。
特性阻抗由什么决定?四个因素:线宽、介质厚度(H)、铜厚(T)、介电常数(εᵣ)。
| 参数 | 变化 | 阻抗变化 |
|---|---|---|
| 线宽 (W) | 增大 | 减小 |
| 介质厚度 (H) | 增大 | 增大 |
| 铜厚 (T) | 增大 | 减小 |
| 介电常数 (εᵣ) | 增大 | 减小 |
你想想看,FR4 的 εᵣ 大约在 4.2~4.5 之间,但不同厂家、不同玻纤布层间会有差异。我记得有一次仿真出来的阻抗是 50Ω,实际打样回来一测是 47Ω,就因为板厂用的 prepreg 型号变了。从那以后,我每次下单都会指定阻抗要求,并让板厂提供测试报告。
对于 DDR 来说,单端信号通常控制 50Ω,差分信号控制 100Ω 比较常见。但这不是的,根据芯片手册来调。
小技巧:使用 Polar SI9000 或 HyperLynx 做阻抗计算时,不要只看一个目标值,要留出 ±10% 的裕量。另外,仿真模型里的“目标阻抗”和实际 PCB 工艺的“控制中心”数值可能不一样,最好和板厂确认工艺偏差。
3.3 阻抗控制:设计时怎么保证?
阻抗控制不是玄学,是叠层设计和走线几何尺寸的结果。我总结了一个实用流程:
- 定叠层——先确定 PCB 层数和铜厚。
- 定参考平面——每层走线必须有紧邻的完整参考平面(GND 或 PWR)。
- 收窄阻抗窗口——在 50Ω 左右,线宽误差 ±0.05mm 都会让阻抗跳好几欧姆。
- 耦合效应——相邻走线间距太近,耦合电容会降低阻抗,导致串扰和阻抗偏移。
- 阻焊层影响——阻焊层介电常数通常在 3.5 左右,会略微降低微带线的阻抗。
我习惯在布局阶段就把所有关键信号的高速走线区域圈定出来,不经过 BGA 扇出区的时候尽量走同层。记得有一次,一个工程师为了把信号线布密一点,把走线间距压到了 3W,结果仿真出来的差分阻抗只有 85Ω,根本不达标。嗯,这就是典型的“太密了”。
注意:不要让高速信号在跨分割的参考平面上走。信号回流的电流会在分割处绕路,造成严重的阻抗不连续和辐射。如果你非跨不可,至少加一个去耦电容或缝合过孔。
3.4 反射——信号完整性最大的坑
反射是怎么来的?阻抗不匹配。信号从 A 点到 B 点,如果路上碰到的阻抗变了,一部分能量就会反弹回来,形成反射波。
反射系数 Γ 为:
Γ = (Z_load - Z₀) / (Z_load + Z₀)
Z_load —— 负载端的阻抗
Z₀ —— 传输线的特性阻抗
当负载开路(Z_load → ∞),Γ ≈ 1,反射全正,信号翻倍。当负载短路(Z_load → 0),Γ ≈ -1,反射全负,信号抵消成 0。当负载匹配(Z_load = Z₀),Γ = 0,完美,没反射。
反射带来的直接后果就是过冲、下冲、振铃。
- 过冲:信号升得太高,可能超过芯片的耐压。
- 振铃:反射来回振荡,导致采样点误判。
- 台阶:慢档斜率让输入缓冲器翻转不稳定。
我曾经在一个 DDR3 项目上遇到过振铃严重导致读写失败。示波器一打,过冲达到了 1.5V(DDR3 的 VDD 才 1.5V),波形像波浪一样。后来在靠近控制器端串联了一个 22Ω 的电阻,马上就好了。这就是典型的源端端接。
| 端接方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 源端串联(系列端接) | 点对点、时钟信号 | 功耗低,简单 | 信号幅度会降一半 |
| 输出端并联(上拉到VTT或下拉到GND) | 多负载总线(如数据线) | 消除反射彻底 | 静态功耗大 |
| 戴维宁端接 | 差分信号 | 同时匹配共模 | 需要两个电阻 |
| RC端接 | 高速DDR时钟 | 低频损耗小 | R和C值需要精确计算 |
在 DDR 设计中,通常地址/控制/时钟用源端串联(比如 22Ω),数据线/数据选通线用片上端接(ODT)或者外部并联。我建议你优先用芯片内部的 ODT,因为外部电阻不好控制走线分支。
避坑:我曾经以为端接都可以在仿真里调出来,结果有一次没做后仿真就直接投板了。回来一测,DDR 颗粒居然不能正常读/写。后来加了个调试位,放上匹配电阻才解决。嗯,从那以后我一定会在原理图上保留端接电阻的焊盘位置,就算不焊接,也算是 backup。
3.5 信号完整性三大基础的关系
传输线是载体,阻抗控制是手段,反射问题是结果。三者环环相扣。下面这张图可以帮助你快速建立它们之间的逻辑关系。
从图里你可以看到:传输线理论给出基础参数(Z₀、时延),阻抗控制是设计师的工程实现,而反射则是阻抗不匹配引起的具体现象。要解决反射,就得靠端接策略反过来补偿阻抗。
我个人觉得,这个三角关系就是 DDR 信号完整性的基本功。把这三块吃透了,后面的时序、串扰、电源完整性,都会容易很多。
嗯,本章的内容就到这里。记住一句话:阻抗连续,万事大吉。如果碰到了抖动、毛刺、误码,先拿示波器测一下信号波形,看看有没有反射。