4. 传输线损耗分解
反射,说白了就是信号在传输路径上遇到了阻抗突变,一部分能量被弹了回来。我刚开始接触SI时,总觉得反射是个很玄乎的东西,直到有一次在实验室用示波器看到波形上那些莫名其妙的台阶和过冲,才真正意识到——这玩意儿不搞定,板子根本没法用。
这一章我们先从最简单的点对点拓扑入手,把反射的机理搞清楚,再手算一个源端串联端接的例子。你跟着我走一遍,后面再遇到复杂拓扑就不会慌了。
4.1 反射是怎么发生的?
信号在传输线上走,每时每刻都感受到一个瞬态阻抗。如果这个阻抗从头到尾都一样,信号就安安静静地传过去。一旦阻抗变了,比如从50Ω突然变成100Ω,信号就会分裂成两部分:一部分继续往前走,另一部分被反射回来。
反射系数Γ就是用来量化这个分裂比例的:
Γ = (Z_load - Z0) / (Z_load + Z0)
Z0是传输线的特性阻抗,Z_load是负载端的阻抗。Γ的范围在-1到1之间:
- Γ = 0:完美匹配,没有反射。这是我们的理想目标。
- Γ > 0:负载阻抗大于Z0,反射波与入射波同极性,产生过冲。
- Γ < 0:负载阻抗小于Z0,反射波与入射波反极性,产生下冲。
关键点:反射不是一次就结束的。反射波回到源端,如果源端也不匹配,会再次反射,来回震荡,直到能量被电阻吸收干净。这就是振铃(ringing)的根源。
我在一个DDR3项目里遇到过这种情况:地址线末端测到的波形像心电图一样,上蹿下跳。查了半天,发现是源端驱动器的输出阻抗只有22Ω,而PCB走线是50Ω,源端反射系数高达0.39。信号在源端和负载之间来回弹了七八次才稳定下来。嗯,从那以后我设计任何高速线都会先算一遍反射系数。
4.2 点对点拓扑的反射仿真
点对点拓扑是最简单的互连结构:一个驱动端,一根传输线,一个接收端。我们先用一个实际案例来仿真一下,看看反射长什么样。
4.2.1 仿真电路参数
| 参数 | 值 | 说明 |
|---|---|---|
| 驱动源内阻 Rs | 10 Ω | 典型CMOS输出阻抗 |
| 传输线特性阻抗 Z0 | 50 Ω | 常用微带线阻抗 |
| 传输线延迟 TD | 1 ns | 约15cm FR4走线 |
| 负载电容 Cload | 5 pF | 接收端输入电容 |
| 信号上升时间 Tr | 200 ps | 高速信号典型值 |
驱动源输出一个3.3V的阶跃信号。我们来看看负载端的波形会变成什么样。
4.2.2 手动计算反射过程
第一步,算源端反射系数Γ_s和负载端反射系数Γ_L:
Γ_s = (Rs - Z0) / (Rs + Z0) = (10 - 50) / (10 + 50) = -40/60 = -0.667
Γ_L = (Z_load - Z0) / (Z_load + Z0)
负载端是容性负载,在信号跳变瞬间电容相当于短路,Z_load ≈ 0Ω,所以:
Γ_L(初始) = (0 - 50) / (0 + 50) = -1
信号到达负载端时,反射系数为-1,意味着反射波与入射波完全反相,幅度相等。这会导致负载端电压瞬间跌到0V附近,然后被后续的反射波慢慢拉起来。
第二步,追踪反射波的传播过程。我习惯用反弹图(Bounce Diagram)来可视化这个过程:
我的经验:反弹图是理解反射最直观的工具。你画一条时间轴,把每次反射的幅度和极性标出来,波形怎么形成的就一目了然了。我每次做复杂拓扑分析前都会先画一张反弹图,哪怕只是草稿。
从反弹图可以看出,负载端电压在t=1ns时第一次到达,但瞬间被反射波拉低,然后经过多次反射才逐渐稳定到3.3V。这个过程在示波器上看起来就是一个带有过冲和振铃的台阶波形。
4.3 源端串联端接的设计与计算
反射的根源是阻抗不匹配。解决思路无非两种:要么让源端匹配,要么让负载端匹配。对于点对点拓扑,我个人更偏爱源端串联端接——简单、省电、不增加额外功耗。
4.3.1 原理是什么?
源端串联端接就是在驱动器的输出引脚附近串一个电阻R_s,使得驱动源的内阻加上这个串联电阻等于传输线的特性阻抗Z0:
R_s + R_driver = Z0
R_driver是驱动器的输出阻抗。这样一来,从传输线看进去,源端的等效阻抗就等于Z0,源端反射系数Γ_s = 0,第一次反射波到达源端时被完全吸收,不会产生二次反射。
注意:源端串联端接只消除了源端的二次反射,负载端的第一次反射仍然存在。但由于负载端反射波回到源端后被吸收,不会再次反弹,所以整个系统只需要一次反射就能稳定下来。这就是为什么源端串联端接能有效抑制振铃。
4.3.2 设计步骤
- 查驱动器的输出阻抗:从芯片手册里找R_driver的值。一般CMOS驱动器的输出阻抗在10Ω~30Ω之间。
- 确定传输线特性阻抗Z0:根据PCB叠层和线宽计算,通常取50Ω。
- 计算串联电阻值:R_s = Z0 - R_driver。
- 验证功耗:确保R_s的额定功率足够,P = I² × R_s。
- 仿真验证:用SPICE或IBIS模型跑一下波形,确认过冲和振铃在可接受范围内。
4.3.3 实际计算案例
我们接着用4.2节的参数来算。驱动源内阻Rs=10Ω,Z0=50Ω,那么:
R_s = 50 - 10 = 40Ω
串一个40Ω的电阻后,源端等效阻抗变成50Ω,与传输线匹配。我们来看看负载端波形会有什么变化。
负载端反射系数仍然是Γ_L = -1(初始时刻),第一次反射波幅度为:
Vr1 = V_incident × Γ_L = 2.75V × (-1) = -2.75V
这个反射波回到源端时,由于源端已经匹配(Γ_s = 0),反射波被完全吸收,不会产生二次反射。负载端电压在t=1ns时第一次到达2.75V,然后被反射波拉低到0V,但之后不会再振荡,而是直接稳定在3.3V。
我的经验:实际设计中,R_s的值不一定非要精确等于Z0 - R_driver。我一般允许±5Ω的偏差,只要过冲控制在10%以内就行。有一次在一个FPGA项目里,我算出来R_s应该是33Ω,但手头只有30Ω的电阻,试了一下波形也还行,就用了。不过如果你做的是DDR4这类对时序要求极严的接口,还是尽量精确匹配。
4.3.4 电阻放置位置
串联电阻必须紧挨着驱动器的输出引脚放置,越近越好。我曾经见过一个设计,把串联电阻放在了走线的中间位置,结果反射照样严重。为什么?因为从驱动器到电阻之间的那段走线仍然是不匹配的,信号在这段线上已经发生了反射。
| 放置位置 | 效果 | 建议 |
|---|---|---|
| 紧挨驱动器输出 | 最佳,完全消除源端反射 | 强烈推荐 |
| 距离驱动器< 5mm | 良好,寄生效应可忽略 | 可接受 |
| 距离驱动器> 10mm | 较差,中间段走线会产生反射 | 不推荐 |
| 放在负载端 | 变成并联端接,原理不同 | 属于另一种端接方式 |
4.4 源端串联端接的优缺点
没有一种端接方案是万能的。源端串联端接有它的适用场景,也有它的局限性。
- 优点:
- 不消耗直流功耗,适合低功耗设计
- 只需要一个电阻,成本低
- 不影响信号摆幅(负载端最终电压仍然是满摆幅)
- 适合点对点拓扑
- 缺点:
- 只能用于单向信号(驱动端到接收端)
- 对负载端反射不直接处理,依赖源端吸收
- 信号上升时间会被R_s和负载电容构成的RC电路拉长
- 不适合多负载拓扑(菊花链或星形拓扑效果差)
一句话总结:源端串联端接是点对点单向信号最经济实惠的反射解决方案。你只要算对电阻值、放对位置,就能用最小的代价换来干净的信号波形。