4. 反射与端接:信号完整性的第一道防线

反射这东西,说白了就是信号在传输路径上遇到了“阻抗突变”,一部分能量弹了回来。我刚开始做高速设计时,总觉得反射是理论问题,直到有一次调试一块DDR3板子,眼图惨不忍睹,才发现罪魁祸首就是一根没做端接的地址线。嗯,从那以后我再也不敢小看反射了。

4.1 反射是怎么产生的?

信号在传输线上走,就像水在管道里流。管道粗细均匀,水流就平稳。突然管道变细或变粗,水就会反弹回来。电信号也一样——当它遇到阻抗不连续的点,一部分能量继续向前,另一部分就反射回来了。

反射系数 Γ 决定了反射波有多大:

Γ = (Z_load - Z0) / (Z_load + Z0)

其中 Z0 是传输线的特性阻抗,Z_load 是负载端的输入阻抗。

我给大家几个典型场景:

  • 开路(Z_load = ∞):Γ = 1,信号全反射,电压翻倍
  • 短路(Z_load = 0):Γ = -1,信号全反射,电压反相
  • 匹配(Z_load = Z0):Γ = 0,没有反射,完美

关键认知:反射不是“有或无”的问题,而是“多与少”的问题。只要阻抗不完全匹配,就一定存在反射。我们的目标是把反射控制在可接受范围内。

反射带来的直接后果就是过冲、下冲和振铃。过冲严重时可能击穿芯片的输入保护二极管,振铃则会造成逻辑误判。我在一个项目中遇到过,一根时钟线的振铃幅度达到了1.2V,直接导致接收端多触发了一次时钟沿——那真是让人头疼的bug。

4.2 端接电阻怎么算?

端接的目的就是吸收反射能量,让信号“有去无回”。常用的端接方式有四种,每种都有自己的脾气。

4.2.1 串联端接

串联端接是在驱动端串一个电阻 Rs,让驱动器的输出阻抗加上 Rs 等于传输线的特性阻抗 Z0。

Rs = Z0 - R_driver

R_driver 是驱动器的输出阻抗,一般在 10Ω~30Ω 之间。举个例子,如果 Z0 = 50Ω,R_driver = 20Ω,那么 Rs = 30Ω。

我个人习惯用串联端接处理点对点的时钟信号。它不消耗直流功耗,而且只吸收一次反射,适合信号频率不太高的场景。但要注意,串联端接会让信号幅度减半——因为驱动端和传输线构成了分压。

实战技巧:串联电阻要尽量靠近驱动端放置,越近越好。我曾经见过有人把电阻放在走线中间,结果反射照样严重,因为驱动端到电阻之间的那段线已经产生了反射。

4.2.2 并联端接

并联端接是在接收端对地(或对电源)接一个电阻 Rp,让 Rp 等于 Z0。这样信号到达接收端时,能量被电阻吸收,不会反射回来。

Rp = Z0

并联端接效果好,但有个致命缺点——直流功耗大。50Ω 对地接一个 3.3V 的电源,静态电流就有 66mA,这在低功耗设计中根本没法接受。

4.2.3 AC 端接

AC 端接是在并联端接的基础上串一个电容,阻断直流路径,只对交流信号起作用。

R = Z0
C = 3 * Tr / R  (经验公式,Tr 是信号上升时间)

举个例子,如果 Tr = 1ns,R = 50Ω,那么 C ≈ 60pF。这个电容要选 NP0/C0G 材质的,温度稳定性好。

AC 端接是我比较喜欢的一种方式,它既解决了反射问题,又避免了直流功耗。但要注意,电容的谐振频率要远高于信号频率,否则会引入新的问题。

4.2.4 戴维南端接

戴维南端接是用两个电阻分压,一个接到电源,一个接到地,等效阻抗等于 Z0。

R1 || R2 = Z0
V_center = VCC * R2 / (R1 + R2) = 阈值电压

通常取 R1 = R2 = 2 * Z0,这样等效阻抗就是 Z0,分压点电压是 VCC/2。这种端接适合总线信号,比如 DDR 的地址/控制线。但功耗比并联端接还大——两个电阻都在耗电。

端接方式 优点 缺点 适用场景
串联 低功耗,简单 信号幅度减半 点对点时钟
并联 效果好 直流功耗大 高频信号
AC 无直流功耗 需要电容,有谐振风险 高速串行信号
戴维南 匹配精度高 功耗最大 总线信号

4.3 Stub 与分支处理

Stub 就是走线上伸出去的一段“盲肠”。信号经过 Stub 时,会在 Stub 的末端反射,然后回到主线上,造成信号质量恶化。

Stub 的长度决定了它影响多大频率的信号:

L_stub_max = Tr / (6 * Tpd)

其中 Tr 是信号上升时间,Tpd 是传输线的传播延迟(约 150~180 ps/inch)。举个例子,如果 Tr = 1ns,Tpd = 160 ps/inch,那么 L_stub_max ≈ 1.04 inch。超过这个长度,Stub 的影响就不能忽略了。

避坑指南:我曾经在一个项目中,为了调试方便,在一条高速信号线上加了一个测试点(相当于一个 Stub)。结果测试点没焊探头时,信号质量完全正常;一焊上探头,眼图就塌了。后来一量,那个测试点的 Stub 长度超过了 0.5 inch,正好在信号的三次谐波上产生了谐振。

处理 Stub 和分支,我总结了几条原则:

  • 能不分支就不分支:点对点走线永远是最好的
  • 必须分支时用菊花链:从驱动端到最远的接收端,中间经过其他接收端,每个接收端的 Stub 尽量短
  • 星形拓扑要加端接:每个分支末端都要端接,否则反射会互相干扰
  • 测试点要“断得开”:用 0Ω 电阻或焊盘做测试点,调试完可以断开

你想想看,为什么 DDR 走线要求地址/控制线走菊花链,而数据线走点对点?就是因为地址/控制线是多负载,菊花链能最小化 Stub 长度;数据线是单负载,点对点最干净。

4.4 知识体系总览

下面这张图把反射与端接的核心逻辑串起来了,大家可以对照着看:

反射与端接知识体系 信号反射问题 阻抗不连续 Stub / 分支 过孔 / 连接器 串联端接 并联端接 AC 端接 戴维南端接 菊花链拓扑 星形拓扑 + 端接 Stub 长度控制 目标:阻抗匹配 → 消除反射 → 信号完整性 过冲 < 10% | 振铃 < 5% | 眼图裕量 > 20% 💡 设计原则: • 优先点对点拓扑,避免不必要的分支 • 端接电阻靠近源端或负载端放置,误差控制在 ±5% 以内

4.5 实战建议

说了这么多理论,最后给大家几条实在的建议:

  • 先仿真再投板:用 HyperLynx 或 ADS 跑一下反射仿真,比凭经验估算靠谱得多
  • 预留端接位置:PCB 上先预留 0402 或 0603 的端接电阻位置,调试时再决定焊不焊
  • 注意电阻精度:端接电阻用 1% 精度的,别用 5% 的——5% 的误差可能让匹配效果大打折扣
  • Stub 能短就短:所有分支、测试点、过孔,Stub 长度控制在 200 mil 以内

我的习惯:每次画完 PCB,我都会把高速信号线过一遍,检查有没有 Stub 超过 300 mil 的。如果有,要么改走线,要么加端接。这个习惯帮我避免了好几次改板。

反射和端接是信号完整性的基本功。你把这些搞透了,高速设计就算入门了。剩下的就是多实践、多踩坑、多总结——嗯,经验就是这么攒出来的。