第三章 反射与端接仿真
反射这东西,说白了就是信号在传输路径上遇到了阻抗突变,一部分能量被弹了回来。我刚开始做SI那会儿,总觉得反射是个很玄乎的概念,直到有一次在实验室亲眼看到波形上的台阶和振铃,才真正理解——嗯,这玩意儿不处理好,系统根本没法稳定工作。
3.1 反射产生的机理
反射的本质是什么?我习惯用一个比喻来解释:信号就像一列火车在轨道上跑,轨道宽度突然变了,火车能不颠簸吗?
反射系数公式很简单:
Γ = (Z_load - Z_0) / (Z_load + Z_0)
其中Z_0是传输线的特性阻抗,Z_load是负载阻抗。当Z_load等于Z_0时,Γ=0,没有反射。当Z_load开路(无穷大),Γ=1,信号全反射。当Z_load短路(0),Γ=-1,信号反相反射。
我在项目中遇到过最典型的案例:一块DDR3板卡,时钟信号上出现了明显的过冲。查了半天,发现是走线阻抗控制出了问题,实际阻抗只有42Ω,而驱动端输出阻抗是35Ω,接收端是50Ω。这一路下来,每个接口都在反射,波形能好看才怪。
关键点:反射的严重程度取决于阻抗不匹配的程度和不匹配点的数量。多个反射点会叠加,形成复杂的振铃波形。
3.2 源端端接与末端端接
端接策略的选择,其实取决于你的信号流向和拓扑结构。我一般这样区分:
- 源端端接:在驱动端串联一个电阻,吸收反射回来的能量
- 末端端接:在接收端并联一个电阻到地或电源,消除反射
源端端接的好处是功耗低,适合点对点拓扑。末端端接效果好,但功耗大,适合多点负载。
我记得有一次做PCIe Gen3的仿真,源端端接怎么调都过不了眼图模板。后来换成末端端接,眼图一下就打开了。你想想看,高速信号对端接位置其实很敏感,选错了位置,再好的电阻值也白搭。
3.3 串联端接与并联端接
这两种是最基础的端接方式,我分别说说:
串联端接
在驱动端串一个电阻,阻值等于Z_0减去驱动端输出阻抗。比如驱动端输出阻抗是20Ω,传输线Z_0是50Ω,那串联电阻就是30Ω。
串联端接的原理是:驱动端输出的电压被分压,只有一半的电压传到接收端。反射回来的信号在源端被吸收,不会再次反射。说白了,就是用一次反射来消除后续的多次反射。
我的经验:串联端接的电阻要尽量靠近驱动端管脚放置,走线越短越好。我曾经因为电阻放远了5mm,结果反射波形多了一个台阶,调试了两天才发现。
并联端接
在接收端并联一个电阻到地,阻值等于Z_0。这种方式最直接,阻抗匹配了,反射自然消失。但代价是静态功耗大,信号摆幅也会降低。
并联端接有两种变体:
- 上拉到VTT(通常是VDD/2)
- 下拉到GND
具体选哪种,要看你的信号标准和驱动能力。HSTL标准常用上拉到VTT,SSTL标准则常用戴维南端接。
3.4 AC端接与戴维南端接
这两种端接方式,我是在做DDR3仿真时才真正搞明白的。
AC端接
在接收端串联一个电容再并联电阻到地。电容的作用是隔直流通交流,只对高频信号进行匹配。
AC端接的好处是几乎没有静态功耗,适合低频或占空比变化的信号。但缺点也很明显:电容会引入额外的RC延时,影响信号时序。
注意:AC端接的电容值要选对。太小了,低频分量过不去,波形会失真。太大了,又失去了隔直的效果。我一般从10pF开始试,根据仿真结果调整。
戴维南端接
用两个电阻组成分压网络,一个上拉到VTT,一个下拉到GND。等效阻抗等于两个电阻的并联值,偏置电压由分压比决定。
戴维南端接在DDR3/DDR4中非常常见。VTT通常是VDDQ/2,两个电阻都取2*Z_0,这样并联后正好等于Z_0。
举个例子:DDR3的VDDQ是1.5V,Z_0是50Ω,那VTT就是0.75V,两个电阻都取100Ω。这样并联后是50Ω,完美匹配。
| 端接类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 串联端接 | 功耗低,简单 | 只能点对点 | 时钟、单端信号 |
| 并联端接 | 匹配效果好 | 功耗大 | 高速并行总线 |
| AC端接 | 无静态功耗 | 有RC延时 | 低频/差分信号 |
| 戴维南端接 | 匹配+偏置 | 两个电阻,占面积 | DDR存储器接口 |
3.5 使用ADS进行反射仿真
好了,理论说完了,咱们来点实战。ADS(Advanced Design System)是我最常用的仿真工具之一,反射仿真在ADS里做起来非常直观。
搭建仿真原理图
第一步,新建一个原理图。我习惯用TLIN(理想传输线)来模拟走线,用Term(终端)来模拟源端和负载。
具体步骤:
- 从元件库拖一个S-PARAMETERS控件,设置频率范围
- 拖一个TLIN,设置Z_0=50Ω,电长度对应走线延时
- 源端用TermG(带内阻的终端),设置R=20Ω(驱动端输出阻抗)
- 负载端用Term,设置Z=50Ω(接收端输入阻抗)
仿真设置:
S-PARAMETERS
S_Param
SP1
Start=0 Hz
Stop=10 GHz
Step=1 MHz
观察时域反射
频域仿真做完后,我一般会用IDT(逆离散傅里叶变换)把S参数转成时域。这样就能看到TDR(时域反射计)波形了。
操作路径:
- 在数据显示窗口插入TDR/TDT模板
- 选择要观察的端口
- 设置上升时间(比如35ps对应10Gbps的信号)
TDR波形上,平坦的部分说明阻抗匹配,有起伏的地方就是阻抗突变点。我曾在TDR波形上看到一个明显的凹陷,排查后发现是过孔stub太长导致的。去掉stub后,波形就平了。
对比不同端接的效果
我习惯在同一个原理图上做参数扫描,对比不同端接的效果。比如:
- 无端接:波形上全是振铃,过冲超过30%
- 串联端接:振铃明显减小,但上升沿变缓
- 并联端接:波形干净,但摆幅降低
- 戴维南端接:波形干净,摆幅适中
有一次给客户做方案评审,我直接拿出ADS仿真的对比图,客户一看就明白了——无端接的波形像心电图,端接后的波形像教科书。嗯,这就是仿真的力量。
避坑指南:我曾经在仿真时忘了设置传输线的损耗参数,结果仿真结果和实测差了20%。后来才意识到,高频下趋肤效应和介质损耗是不能忽略的。在ADS里用MLIN(微带线模型)代替TLIN,结果就准多了。
实战建议
做反射仿真时,我建议你按这个顺序来:
- 先做无端接的基线仿真,看看反射有多严重
- 尝试串联端接,调整电阻值
- 如果不行,换并联端接
- 最后考虑戴维南或AC端接
- 用TDR波形验证阻抗连续性
记住,仿真不是目的,解决问题才是。我见过太多人花了一周调仿真参数,结果板子做回来发现根本不需要那么复杂的端接。所以,先想清楚你的信号速率、走线长度和拓扑结构,再决定用哪种端接。
好了,反射与端接这部分就讲到这里。下一章咱们聊聊串扰仿真,那又是一个让人头疼的话题。