ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

高速PCB信号完整性:反射根源、阻抗不连续定位与端接方案选型

高速PCB信号完整性:反射根源、阻抗不连续定位与端接方案选型 每次看到“信号不好”的问题很多硬件工程师第一反应就是“加端接电阻”但加完发现振铃还在、眼图还是烂这时候问题往往不是端接没加对而是电路板上某一处阻抗不连续在捣乱。反射从来不挑地方发生走线拐角、过孔、连接器、桩线只要阻抗突变就会反射。这篇聊的就是传输线和反射系列里最实操的部分不连续点怎么定位、怎么量化以及端接到底该怎么选择和摆放。这篇内容适合正在做高速数字设计的硬件工程师、PCB Layout工程师也适合刚入门信号完整性分析、想搞懂反射和端接原理的伙伴们。看完之后你应该能自己判断一块板上哪些地方是“反射重灾区”并且知道针对点对点、总线、DDR等场景选择哪种端接方案才靠谱。1. 反射的本质阻抗突变是唯一原因1.1 先搞清“特征阻抗”到底是什么很多人把特征阻抗当成一个固定电阻值实际上它更像水管直径对水流的影响。一根水管直径是确定的水压和水流速度的比值就固定这就是特征阻抗Z0的概念。传输线每一段的电压和电流之比由这一段线的几何结构和介质决定信号在传播过程中“感觉”到的阻力就是特征阻抗。在PCB上50欧是信号线最常见的单端目标阻抗差分线常用100欧差分阻抗。但这不是说你拿万用表去量走线两端能得到50欧万用表量的是直流电阻和特征阻抗完全不同。特征阻抗是高频下的交流概念只有当信号上升沿足够快的时候走线的分布电感和对地电容才真正起到“传输线”的作用这时候才能谈阻抗匹配。1.2 反射系数每一处不连续都可以量化信号沿着传输线跑遇到阻抗从Z1变成Z2的地方就会有一部分能量反射回来。反射系数公式是[ \Gamma \frac{Z_2 - Z_1}{Z_2 Z_1} ]反射系数是一个比值范围从-1到1。Z2等于Z1时反射为0这就是完全匹配。Z2为0短路时反射系数是-1入射信号完全反相反射Z2无穷大开路时反射系数是1入射信号同相反射终端电压会翻倍。举个例子50欧系统里如果信号遇到一个75欧的不连续点反射系数就是(75-50)/(7550)0.2也就是20%的电压被反射回来。这20%的反射叠加在原始信号上接收端看到的就是台阶、振铃或者变缓的边沿。这里有个核心认知不连续点不是只有一个而是沿传输路径上处处都可能存在。每段走线的宽度不同、参考平面有无开槽、过孔孔径大小、连接器到芯片引脚之间的材料变化都会形成新的Z2。信号每经过一个突变就产生一次反射多次反射叠加在一起接收端波形就变成了一团乱麻。用Python写个反射系数计算的小函数方便对照调整参数def reflection_coefficient(Z1, Z2): 计算Z1到Z2交界处的反射系数 return (Z2 - Z1) / (Z2 Z1) # 例子50欧系统不连续点为75欧 print(reflection_coefficient(50, 75)) # 0.2 # 例子50欧系统不连续点为35欧 print(reflection_coefficient(50, 35)) # -0.1762. 不连续点拆解三板斧之外的“反射元凶”2.1 拐角与走线宽度变化跑高速信号时PCB走线不可能全程直线拐弯是难免的。直角拐角处有效线宽变宽等效电容增大特征阻抗会局部下降另外拐角走线长度比直线长还会引入额外的相移。对于低速信号这个影响可以忽略但信号上升沿到了亚纳秒级别一个拐角造成的反射就足以在接收端看到一个明显台阶。解决拐角的常用做法是45度斜角或者圆弧走线。45度斜角减少了直角处的电容突变圆弧走线的阻抗连续性更好代价是布板占用面积大。实际工作中DDR、PCIe这类高速总线基本要求45度拐角射频走线则常用圆弧。如果空间极度受限也可以用阻抗补偿的方式在拐角内侧切掉一点铜皮但这个操作对加工精度要求高量产后一致性很难保证我一般不建议。线宽突变也是常见问题。芯片引脚、焊盘、测试点附近的走线通常会被强迫收窄突然从8mil变到6mil阻抗就从50欧变到了42欧左右。这种突变没法完全避免只能尽量缩短窄线的长度让反射在时间上“挤在一起”布局上尽可能焊盘和引脚就近出线减少阻抗过渡段。2.2 过孔隐藏在板内的“反射炸弹”过孔是高速PCB反射的主要来源。它的结构复杂焊盘、反焊盘、孔径、过孔残桩stub、换层处的参考平面变化都会影响过孔的等效阻抗。过孔的寄生电容让阻抗偏低寄生电感让阻抗偏高两者在某个频率会形成谐振谐振点附近反射会特别明显。计算过孔寄生电容的经验公式常用[ C \frac{1.41 \varepsilon_r \cdot T \cdot D_1}{D_2 - D_1} ]其中T是板厚D1是过孔焊盘直径D2是反焊盘直径。这个公式估算出来的电容值通常在0.2pF到1pF之间看起来很小但信号上升沿为50ps的时候0.5pF的电容已经能产生明显的反射了。过孔残桩的长度影响尤其严重。当残桩长度接近四分之一信号波长时会形成接近短路的反射点信号损耗急剧增加。实际工程中Deposit残留残桩长度一般控制在走线波长的十分之一以内常见的经验法则是对于10Gbps左右的信号残桩不要超过10到15mil。处理过孔反射的常用方法高速信号换层时在换层附近加一个回流地过孔保持参考平面连续。使用背钻工艺去掉过孔残桩尤其是10Gbps以上的通道。高速走线尽量避免跨分割参考平面迫不得已时信号线和回流地线要成对换层。差分过孔要成对放置保证正负信号的等长和对称。2.3 桩线与分支反射波“原地打转”的地方桩线是高速设计中比较麻烦的不连续点。比如DDR3地址线会同时连到多颗颗粒如果用菊花链每颗颗粒的封装引脚都可能形成一个短的“旁支”信号经过分支点的时候一部分能量会进到分支线里在分支末端反射回来再叠加到主线上。判断桩线是否严重可以用四分之一波长谐振估算[ L_{\text{max}} \approx \frac{c}{10 \cdot f \cdot \sqrt{\varepsilon_r}} ]c是光速f是信号最高有效频率按信号上升沿估算εr是介质常数。比如FR4板材εr取4.2信号速率10Gbps、有效频率5GHz的时候桩线长度不要超过大约3mm。这个公式给的是“不出问题的上限”实际设计里留的余量应该更大比如取二十分之一波长。带分支拓扑时分支末端的反射会形成比较规律的“台阶”。TDR测量时能看到波形的阶跃后还有一段回跳这就是分支处的反射。处理分支的思路主要有三种去掉分支改成点对点分支长度尽量短把反射压到允许范围内在分支末端加端接吸收反射。对于DDR总线这类多负载场景现在主流做法是Fly-by拓扑配合片上端接而不是傻乎乎地每颗颗粒都去端接。2.4 连接器、测试焊盘和防焊层开窗连接器和测试探针焊盘也是容易被忽视的不连续点。连接器引脚密集引脚之间的地回流路径往往不完整加上连接器本身是机械件材料介电常数和PCB也不一致反射不可避免。高速连接器之所以贵很大程度上就是因为它在结构上优化了这些阻抗不连续的地方。测试焊盘通常是为了调试或者批量测试需要加的它会让走线局部变宽产生一个小电容。很多人为了“方便测试”在高速线上叠加很多过孔和焊盘结果就是反射让眼图闭合。如果必须加测试点尽量用探头可以夹住的尾端测试点而不是信号路径中间的焊盘或者用专用的SMA连接器做测试点虽然成本高但对信号影响小一些。防焊层开窗也会影响阻抗。走线表面的防焊层厚度变化会导致微带线特征阻抗变化几个欧姆。仿真的时候如果忽略防焊层损耗和厚度算出来的阻抗和实际量出来会有偏差。尤其是靠近连接器、焊盘处的开窗直接改变了走线局部的介质环境这一段的阻抗就会有波动。这也是为什么很多仿真实测对不上的原因之一。3. 不连续点对信号完整性的实际影响3.1 振铃、台阶和码间干扰眼图的三个“杀手”信号线上阻抗不连续反射波来回反射会产生振铃振铃幅度超阈值就可能误触发逻辑。低速时一次振铃过去就完了但高速时码元宽度变窄反射波还没衰减完下一个码元已经来了多个码元的反射叠加起来接收端采样点的电压可能完全错误这就是符号间干扰ISI。眼图是衡量信号质量的直观工具。眼高变小说明电压噪声变大眼宽变窄说明时序余量变小眼图的“上升沿”和“下降沿”变粗说明抖动增加。我见过一个案例一块板上DDR3地址线走线过孔残桩太长仿真时没有仔细建模过孔原型回来后眼图闭合到几乎没有张开最后用TDR扫描才发现残桩位置上的阻抗凹陷已经到了35欧左右。这其实说明仿真之前花时间把过孔、残桩、连接器这些“隐性器件”建模到位比后期“补救”效率高得多。3.2 回波损耗与插入损耗S参数视角在频域里不连续点会让回波损耗S11变差S11过大的频点插入损耗S21也会出现明显下跌。高速串行总线通常只看S参数比如PCIe对回波损耗有明确的频段限值要求。如果S11在某个频点超出了规范说明该频点附近有很强的反射对应到时域可能就是一个谐振结构。回波损耗和反射系数的关系是[ \text{Return Loss} -20\log_{10}(|\Gamma|) ]50欧系统里反射系数0.2回波损耗大约是14dB听起来不大但如果反射系数到0.3回损就只有约10.5dB很多高速接口规范里这个数值已经接近甚至超过限值了。实际项目里如果走线阻抗控制在±10%以内回损通常问题不大真正的坑还是来自过孔、连接器这类集总参数结构。3.3 一个完整的DDR3问题复盘之前调过一块DDR3板子地址线用菊花链连接四颗x8颗粒时钟频率跑到800MHz初始化都很正常但跑压力测试总报错。用示波器探DQS和地址线看到波形上叠加了一个明显的“小鼓包”位置正好在中间两颗颗粒后面。分析下来是中间两颗颗粒的封装引脚形成了一段比较长的支线支线末端反射回来的信号叠加到了主线上。处理方案就是重新改板把地址线的走线顺序调整让靠近主控的颗粒走最短支线同时缩短中间颗粒到主线的连接长度。另外在末端颗粒位置预留了并联端接电阻的位置实际贴了49.9欧到地的端接波形立刻干净了很多。这个例子给我们的启发是信号完整性问题往往是“组合拳”光靠端接不行还得配合拓扑和布线优化。4. 端接方案怎么选、怎么算、怎么摆4.1 源端串联端接最简单、功耗最低的方案源端串联端接是在驱动端靠近输出引脚处串一个电阻Rs让驱动端看到的“总电阻”等于传输线特征阻抗。这个方案的好处是几乎没有直流功耗因为串联端接不提供额外的直流通路信号摆幅还能基本保持满幅适合CMOS点对点传输。计算方式很简单。假设驱动端输出阻抗约20欧传输线Z0是50欧那么串联电阻取[ R_s Z_0 - Z_{out} 50 - 20 30 , \Omega ]实际选取时一般取精确值的最近标准值比如33欧。这个电阻的作用不是“吸收”反射而是把驱动端的等效输出阻抗提升到50欧让源端产生的反射被“消化”掉。第一次发出的信号到达接收端时由于接收端是高阻会发生全反射电压翻倍到满幅。反射波回到源端后被匹配好的源端吸收不会再一次反射回去。这是典型的“一次反射”逻辑。串联端接对电阻精度要求不高误差±10%都行所以成本低。缺点是信号只有半幅跳变传送接收端必须靠全反射才能获得完整摆幅因此传输线必须足够长否则反射时间太短接收端来不及翻转就出问题。4.2 末端并联端接匹配效果最好但功耗高末端并联端接是在接收端把传输线接到一个匹配电阻到地或者到电源电阻值等于Z0。这样信号到达接收端时能量被电阻吸收不会反射回来。匹配效果在所有端接方案里最彻底反射系数接近零。计算逻辑是接收端阻抗Z2等于端接电阻值RR越接近Z0反射越小。实际常用49.9欧、50欧这种标准值。对差分线来说在接收端跨接一个100欧的差分电阻等效于两根线各自对地50欧匹配效果最好。但并联端接到地会改变直流电平。如果传输线本来是高阻接收端接一个50欧到地接收端看到的直流电平会因为分压而被拉低。比如驱动端高电平是3.3V输出阻抗20欧末端50欧到地接收端的高电平就变成约3.3×50/(5020)≈2.36V有些接收端可能接近阈值边缘。为解决这个问题就有了戴维南端接。4.3 戴维南端接兼顾匹配和电平但功耗更大戴维南端接是把末端并联端接拆成两个电阻一个上拉到电源一个下拉到地等效并联值等于Z0同时提供直流工作点。比如上拉82欧到VCC下拉130欧到地两者并联等效约50欧而分压点给出了约2.1V的直流电压。一般公式是[ R_1 \parallel R_2 Z_0 ][ V_{term} V_{CC} \times \frac{R_2}{R_1 R_2} ]上拉和下拉电阻会形成持续的直流电流功耗比简单并联还大所以这个方案一般只用于低速总线或者信号电平本来就要求特定电压的接口。4.4 RC端接和AC端接用隔直电容换掉直流功耗RC端接是末端接一个电阻到串联电容再到地或者到电源电阻值取Z0电容用来隔直流让端接只在信号跳变的时候“有反应”稳态时没有直流电流。这个方案结合了匹配性能和功耗控制的优点但又引入一个新问题RC时间常数不能太大否则低频分量会被滤掉带来波形拖尾。选择电容的经验法则是让RC时间常数远大于信号周期但也要特别小心不要让电容和电阻自身产生谐振。实际使用中RC端接的参数需要根据信号速率调整升级速率而要换电容量产后维护成本高用在固定速率产品还行。4.5 端接方案对比速查表方案匹配效果直流功耗适用场景注意事项源端串联端接中等一次反射后匹配最小点对点、CMOS逻辑需要接收端高阻反射末端并联到地最好较大点对点、高频总线会拉低高电平电压戴维南端接最好最大总线、需要直流工作点功耗大发热明显RC端接较好低高频、有空间放电容RC时间常数需精细设计AC端接二极管较差无静电防护辅助通常不作为匹配手段5. 端接位置和拓扑结构放错地方不如不放5.1 源端端接要“贴住驱动端”末端端接要“贴住接收端”串联端接电阻必须紧挨着驱动芯片的引脚放中间不要有分叉否则反射会提前发生。末端端接电阻必须放在接收芯片的引脚附近最好是末端和接收端之间没有其他走线。很多人图布线方便把端接电阻放在走线中间这样端接本来就无法吸收走线末端的反射结果就是“电阻白贴、问题照旧”。端接的位置其实最好在布局阶段就想清楚而不是布线完了再补。芯片手册里推荐的端接电阻摆放位置往往不是“尽量靠近”而是“必须靠近”真实差1毫米可能波形就不同。高速总线对端接电阻和芯片之间的距离要求通常是毫米级的这个距离也是信号上升沿时间决定的上升沿越陡允许的“额外走线长度”越短。5.2 菊花链、星形和Fly-by拓扑决定端接方式点对点拓扑最简单源端串联或者末端并联都行。菊花链拓扑下信号依次经过每颗负载负载的输入电容会降低有效阻抗反射会累积所以在末端放一个并联端接效果最好。星形拓扑中信号从主控分出到多个接收端反射杂且乱最简单的思路是每根分支线都独立做源端串联端接代价是电阻数量多。DDR3/DDR4地址控制线常用Fly-by拓扑信号线从主控依次经过每一颗DRAM颗粒最后在终端用端接电阻并联到VTT。这么做的好处是每颗颗粒看到的Stub长度可以很短命令地址信号以“流水线”方式到达各颗粒配合写均衡技术解决时序偏移。Fly-by拓扑的末端端接电阻排通常放在最后一颗DRAM的后面一排八个电阻到VTT这个需要单独一个电源轨道VTT电流还不小要预留足够的电源空间。5.3 短线可以不端接什么时候不用纠结不是所有走线都需要端接。判断标准是走线长度和信号上升沿的关系。经验法则如果走线长度小于信号上升沿对应空间长度的六分之一反射波回到源端的时候源端还在切换反射会被“淹没”可以不端接。换算公式[ L_{trace} \frac{c \cdot t_r}{6 \cdot \sqrt{\varepsilon_r}} ]其中tr是信号上升沿时间c是光速εr是介质常数。举一个实际例子上升沿1nsFR4介质常数4.2那么安全走线长度大约是24mm。如果你走线只有10mm那确实不用端接但如果走线有30mm就要考虑端接了。这个计算看起来简单但很多人没意识到“上升沿”指的是信号实际边沿而不是时钟周期所以经常算错。6. 不连续点的实测诊断与仿真验证6.1 用TDR给整条链路“做B超”TDR时域反射计的原理就是发一个快沿阶跃信号然后观察反射回来的波形。因为反射系数和阻抗对应TDR可以直接把“沿线阻抗变化”画出来。看TDR波形时要掌握一个基本判读法阻抗突然变高曲线向上凸说明是感性不连续或者走线变细阻抗突然变低曲线向下凹说明是容性不连续或者走线变宽、过孔焊盘电容偏大。实际操作中TDR波形里每个“凹陷”或“突起”的位置都能对应到板上具体位置波形在起点附近下凹一般是驱动芯片封装和过孔处电容。中间有细小的上凸可能是走线换层、过孔残桩。末端大开大合说明没有端接终端开路或短路太明显。TDR还有一个实用技巧改变测量端位置。从A端打入看反射再换B端打入两次波形一对比就能分辨不连续点到底在哪一段链路。配合时间轴换算距离定位精度可以到毫米级。6.2 仿真别只跑S参数也要看时域阻抗分布仿真工具里HyperLynx、ADS、SIwave都支持把S参数变换到时域来看阻抗分布效果类似TDR。在SIwave里提取全链路S参数然后做一步干净的TDR仿真能看到每段走线的阻抗曲线。阻抗曲线里那些“尖峰”就是反射源这也是PCB改板前最重要的自检手段。仿真还有一个好处可以“把不连续点单独拎出来试”。比如把过孔模型改成理想的通孔对比有无过孔残桩的阻抗曲线就能确认改背钻到底有多大收益。这种对比在实测环境里做起来成本高但仿真就是顺手的事。6.3 常见问题速查表现象可能原因确认方法解决方向波形振铃过大走线阻抗不匹配或末端无端接TDR扫描看末端阻抗加末端端接调整走线阻抗波形有台阶桩线或分支反射TDR定位反射点缩短桩线改拓扑眼图闭合但时域波形尚可高频损耗过大S参数看S21换低损耗板材加背钻只有一块板有问题走线宽度偏差或过孔加工不良阻抗测试板对比和板厂确认工艺参数换了连接器后信号变差连接器本身不连续TDR扫带连接器的链路换高速连接器优化焊盘过渡7. 端接之后的“最后一公里”一些经验之谈每次调完一块板我都会提醒自己端接只是反射问题的一部分它永远替代不了合理的布线。先治不连续点再用端接匹配这个顺序不能反。你在一堆过孔残桩和长桩线前面摆一排精密端接电阻就像给漏水的管子包胶带外面看起来没问题里面照样漏水。另外端接参数到底选多准要看接口和成本的平衡。有的项目要求很严端接电阻要买1%精度的低温漂型号有的项目功耗和噪声要求不高5%的就够用。关键是对自己的系统要有底不能照搬别人的设计。信号完整性的魅力就在这里理论公式谁都看得到但真正拉开差距的是你能不能被自己的波形说服。最后分享一个验证技巧改完端接后不要只看接收端波形同时看驱动端波形。一个健康的系统驱动端波形应该也能明显看出“反射回来后台阶消失”的变化。如果驱动端还是很乱说明匹配还没有真正到位。这时候再回头扫一遍TDR通常会找到新的意料之外的不连续点。
返回列表