3. 反射与端接:信号完整性的基本功
反射这东西,说白了就是信号在传输路径上遇到了“阻抗突变”,一部分能量弹了回来。我刚开始做硬件那会儿,总觉得反射是理论派才操心的事——直到有一次调试一块高速板,时钟线上出现了莫名其妙的过冲,直接把接收端的IO口打坏了。嗯,从那以后我再也不敢小看反射了。
这一节咱们就把反射的机理和几种常见的端接方案掰开揉碎讲清楚。你想想看,搞懂了反射怎么来的,端接怎么选的,很多SI问题其实就能在原理图阶段提前规避掉。
3.1 反射产生的机理
信号在传输线上传播时,每时每刻都在“看”前方的阻抗。如果阻抗连续,信号就乖乖往前走;如果阻抗突然变了,一部分能量继续前进,另一部分就反射回来。
反射系数Γ(Gamma)就是用来量化这个比例的:
Γ = (Z_load - Z0) / (Z_load + Z0)
其中Z0是传输线的特性阻抗,Z_load是负载端的阻抗。Γ的范围在-1到1之间:
- Γ = 0:完美匹配,无反射(理想情况)
- Γ = 1:开路,全反射(信号翻倍)
- Γ = -1:短路,全反射(信号反相)
- 0 < |Γ| < 1:部分反射
关键点:反射不仅发生在接收端,驱动端、过孔、连接器、分支线——任何阻抗不连续的地方都会产生反射。多个反射叠加起来,就会形成振铃、过冲、下冲这些我们最头疼的SI问题。
我在项目中遇到过一块DDR3的板子,地址线在末端测出了超过VDD 40%的过冲。查了半天,发现是走线经过一个过孔时阻抗从50Ω跳到了75Ω。就这一个不连续点,反射来回弹了三次才稳定下来。
3.2 源端端接(串联端接)
源端端接是最常用、也最省事的方案。做法很简单:在驱动端串一个电阻,让驱动器的输出阻抗加上这个电阻等于传输线的特性阻抗。
比如驱动器的输出阻抗是10Ω,传输线特性阻抗是50Ω,那就串一个33Ω或39Ω的电阻(留点余量)。
我的习惯:源端端接的电阻尽量靠近驱动器的输出引脚放,走线越短越好。我曾经见过有人把电阻放在走线中间,结果反射照样严重——因为不连续点还是在驱动端和电阻之间。
源端端接的优缺点:
| 优点 | 缺点 |
|---|---|
| 只用一个电阻,成本低 | 信号幅度减半,对接收端灵敏度要求高 |
| 不增加直流功耗 | 只适用于点对点拓扑 |
| 抑制过冲效果好 | 对走线长度敏感,长线效果变差 |
| 不影响信号上升时间 | 多负载时匹配困难 |
3.3 并联端接
并联端接是在接收端把信号拉到地或电源,通过一个电阻来匹配传输线的特性阻抗。最常见的做法是下拉到地:
R_term = Z0 // 比如50Ω走线就接50Ω到地
并联端接的好处是信号幅度不会衰减,适合长距离传输。但代价也很明显——直流功耗大。50Ω拉到地,3.3V的信号就有66mA的静态电流,这在低功耗设计中根本扛不住。
避坑指南:我曾经在一个多负载的时钟树上用了并联端接,结果每个接收端都接了一个50Ω下拉电阻,总功耗直接飙到了1W以上。后来改成了AC端接才解决问题。所以并联端接一定要算功耗,别等到板子发热了才后悔。
3.4 AC端接
AC端接是并联端接的改良版——在电阻后面串一个电容,阻断直流路径,只对交流信号起作用。
典型电路:
信号线 —— R_term(=Z0) —— C_term(0.1μF左右) —— GND
电容的取值要保证时间常数远大于信号的周期:
R_term × C_term > 10 × T_signal
比如信号频率100MHz(周期10ns),R_term=50Ω,那么C_term至少要2nF。我一般取0.1μF,留足余量。
AC端接的适用场景:
- 需要匹配但功耗受限的设计
- 差分信号(每根线各接一个RC到地)
- 时钟信号(对直流偏置敏感)
小技巧:AC端接的电容要用高频特性好的MLCC,别用普通电解电容。我习惯用0402或0603封装的X7R或C0G材质,ESR低、自谐振频率高。
3.5 戴维南端接
戴维南端接是用两个电阻组成分压器,一个上拉到电源,一个下拉到地,等效阻抗等于传输线的特性阻抗。
计算公式:
R1 || R2 = Z0
V_term = VDD × R2 / (R1 + R2) // 通常设为VDD/2左右
比如Z0=50Ω,VDD=3.3V,想让等效阻抗50Ω、偏置电压1.65V:
R1 = R2 = 100Ω // 100Ω || 100Ω = 50Ω,分压1.65V
戴维南端接的优点:
- 同时提供匹配和直流偏置
- 适合HSTL、SSTL等需要参考电压的接口
- 对信号幅度影响小
缺点也很明显:两个电阻始终有直流电流流过,功耗比并联端接还大。还是上面的例子,3.3V下两个100Ω电阻的静态电流是33mA,功耗约109mW——这还只是一个信号线。
| 端接类型 | 匹配位置 | 直流功耗 | 信号幅度 | 适用拓扑 |
|---|---|---|---|---|
| 源端串联 | 驱动端 | 低 | 减半 | 点对点 |
| 并联 | 接收端 | 高 | 不变 | 点对点/多负载 |
| AC | 接收端 | 极低 | 不变 | 点对点/多负载 |
| 戴维南 | 接收端 | 高 | 不变 | 点对点/多负载 |
3.6 端接方案的选择思路
说实话,没有一种端接方案是万能的。我个人的选择逻辑是这样的:
- 点对点、低速(<50MHz):源端串联,简单可靠
- 点对点、高速(>50MHz):并联或AC端接,看功耗预算
- 多负载、同相:AC端接优先,功耗可控
- 多负载、需要参考电压:戴维南端接,比如DDR的地址/控制线
- 差分信号:在接收端跨接一个电阻(等于差分阻抗),或者用AC端接
核心原则:端接的目的是消除反射,不是“加个电阻就完事”。选方案之前,先搞清楚你的拓扑结构、信号速率、功耗预算和接口标准。我见过太多人随便加个端接,结果反射没消除,反而引入了新的问题。
下面这张图把反射和端接的整个知识体系串起来了,你可以对照着看:
反射和端接这部分内容,说白了就是信号完整性最基础也最实用的功夫。你把这些机理和方案吃透了,调试时看到波形异常,脑子里就能快速定位——是阻抗不匹配?还是端接选错了?还是布局有问题?