
1. 从一块板子的翻车说起PCIe阻抗到底该控多少去年帮一个朋友调一块PCIe 4.0的扩展板板子打回来之后插上主机链路能识别但跑压力测试的时候随机性掉链路有时候跑半小时断一次有时候刚上电就协商不到Gen4。一开始怀疑是连接器焊接不良重新补焊了一遍问题依旧。后来把板子拿到实验室用TDR测了一下差分阻抗发现走线中段有一段阻抗掉到了78欧姆左右而整条链路的参考设计标称是85欧姆。问题就出在这里。很多刚接触PCIe硬件设计的朋友都会卡在同一个问题上PCIe的差分阻抗到底该按85欧姆控还是100欧姆控网上搜一圈有人说85有人说100还有人说“都行看芯片手册”。这种模棱两可的答案对于要投板的人来说简直是灾难因为阻抗线宽一旦算错板子打回来就是几千块钱的损失和两周的工期延误。这篇文章就是把我这些年做PCIe相关硬件设计时踩过的坑、测过的数据、以及和同行交流得到的经验整理出来。核心围绕三个关键词PCIe、阻抗控制、仿真。我会讲清楚85和100这两个数字分别对应什么场景、为什么会有这个分歧、实际设计中怎么选、仿真怎么做、TDR怎么测、以及遇到阻抗不连续时怎么排查。内容偏向硬件工程实操适合正在做PCIe板级设计、信号完整性验证、或者单纯想搞清楚这个问题的朋友。不管你是刚入行的硬件工程师还是做了几年但一直没深究过阻抗问题的老手应该都能从里面找到有用的东西。2. 85欧姆和100欧姆的来龙去脉2.1 两个数字分别是谁定的先说结论PCIe规范本身对差分阻抗的要求是85欧姆允许±15%的偏差也就是72.25到97.75欧姆之间。这个数字写在PCI Express Base Specification的电气章节里针对的是芯片到芯片的差分链路。那100欧姆是从哪来的100欧姆是很多高速差分接口的通用标准比如USB 3.0、HDMI、DisplayPort、SATA这些它们的差分阻抗都标称100欧姆。很多工程师做惯了这些接口下意识地就把PCIe也按100欧姆来控。另外一些FPGA的GT收发器手册里会写“支持100欧姆差分端接”这也容易让人混淆。这里要区分两个概念走线阻抗和端接阻抗。走线阻抗是PCB上差分对本身的特性阻抗由线宽、线距、介质厚度、铜厚、介电常数决定。端接阻抗是收发器芯片内部或者外部匹配电阻的阻值。PCIe的接收端通常有内部端接标称值是100欧姆差分但这不代表走线也要做成100欧姆。走线阻抗和端接阻抗不匹配的时候信号会在两端产生反射影响眼图质量。2.2 为什么PCIe选了85而不是100这个问题我专门查过一些资料也问过做芯片的朋友。核心原因有几个第一PCIe的链路模型和USB/HDMI不一样。PCIe是点对点或者通过Switch扩展的拓扑链路两端都是芯片驱动能力和接收灵敏度都是按85欧姆的通道特性来设计的。芯片内部的TX驱动输出阻抗和RX端接阻抗都是围绕85欧姆这个目标来优化的。第二85欧姆在PCB上更容易实现。同样的叠层结构下要做100欧姆差分线宽要么更细、要么线距更大对于高密度布线来说更困难。85欧姆允许稍微宽一点的线或者更小的间距对布线密度友好。第三功耗和噪声的折中。阻抗越低驱动同样的电压摆幅需要的电流越大功耗越高阻抗越高噪声容限越低。85欧姆是PCIe在功耗和抗噪之间的一个平衡点。注意虽然规范写的是85欧姆但实际设计中如果你控到90到95欧姆大多数情况下链路也能正常工作因为规范留了±15%的余量。但如果你的板子要过严格的兼容性测试或者链路速率到了Gen4/Gen5建议还是老老实实按85欧姆来控。2.3 不同Gen速率对阻抗的要求有区别吗有而且区别不小。Gen1和Gen2的时候信号速率相对较低2.5GT/s和5GT/s阻抗偏差对信号完整性的影响没那么致命很多人控到90多欧姆也能跑。但到了Gen38GT/s、Gen416GT/s甚至Gen532GT/s奈奎斯特频率越来越高阻抗不连续引起的反射会严重压缩眼图。我实测过一组数据同一块板子走线阻抗从85欧姆偏到95欧姆Gen3的时候眼高还有大概120mV到了Gen4眼高就掉到60mV左右了基本处于接收端灵敏度的边缘。所以如果你做的是Gen4以上的设计阻抗控制必须严格。速率等级信号速率推荐阻抗允许偏差实际设计建议Gen12.5 GT/s85Ω±15%90-95Ω也能跑Gen25.0 GT/s85Ω±15%尽量靠近85ΩGen38.0 GT/s85Ω±10%严格控85ΩGen416 GT/s85Ω±10%严格控85Ω需仿真Gen532 GT/s85Ω±8%必须仿真实测验证3. 阻抗不连续是怎么把信号搞坏的3.1 反射的基本原理要理解阻抗控制为什么重要得先搞清楚反射是怎么产生的。信号在传输线上传播的时候如果遇到阻抗变化的地方一部分能量会继续往前传另一部分会反射回来。反射系数Γ的公式是Γ (Z2 - Z1) / (Z2 Z1)Z1是当前传输线的特性阻抗Z2是变化后的阻抗。如果Z185Z278那Γ (78-85)/(7885) -0.043也就是大约4.3%的负反射。看起来不大但PCIe的链路里不止一处阻抗不连续过孔、连接器、AC耦合电容焊盘、封装引脚每一处都会产生反射这些反射叠加起来就会把眼图吃掉一大块。3.2 PCIe链路里常见的阻抗不连续点做PCIe设计的时候以下几个地方最容易出问题过孔过孔是阻抗不连续的重灾区。一个没有做阻抗优化的过孔等效阻抗可能只有60到70欧姆和85欧姆的走线差了一大截。过孔的寄生电容和寄生电感是主要原因孔径越大、板厚越厚、反焊盘越小阻抗跌落越严重。AC耦合电容PCIe的TX端通常需要AC耦合电容0402或者0201封装的电容焊盘比走线宽很多焊盘处的阻抗会明显下降。如果焊盘下面没有参考平面挖空处理阻抗跌落会更厉害。连接器金手指连接器或者板对板连接器的引脚阻抗通常和PCB走线不一致尤其是金手指区域阻抗往往偏低。封装引脚芯片封装内部的引线电感也会引入阻抗不连续但这个通常芯片厂商已经优化过了板级设计能做的就是尽量匹配。3.3 阻抗偏差对眼图的实际影响我用一块Gen4的测试板做过对比实验。同一组差分对通过调整线宽把阻抗分别控到85欧姆、90欧姆和95欧姆然后用示波器抓眼图。结果如下走线阻抗Gen4眼高Gen4眼宽误码率跑1小时85Ω135 mV0.32 UI 1E-1290Ω98 mV0.26 UI约 1E-995Ω62 mV0.18 UI约 1E-6这个数据很直观地说明了问题阻抗偏离85欧姆越多眼图张开度越小误码率越高。95欧姆的时候误码率已经到了1E-6量级虽然日常使用可能感觉不到但在数据中心或者存储场景下这种链路是不可靠的。4. 叠层设计与阻抗计算实操4.1 叠层是阻抗控制的地基很多人拿到板子之后才想起来算阻抗其实叠层设计阶段就应该把阻抗目标定下来。叠层决定了介质厚度、铜厚、介电常数这些参数而这些参数直接决定了你需要的线宽和线距。以一个典型的6层板为例PCIe差分对走在L1层参考L2层的GND平面。假设板材是FR4介电常数4.3L1到L2的介质厚度是4mil约0.1mm铜厚1oz1.4mil。用常见的阻抗计算工具比如Polar SI9000或者Saturn PCB Toolkit来算要达到85欧姆差分阻抗线宽大概需要5mil线距大概7mil。如果目标改成100欧姆线宽要缩到4mil左右线距要拉到9mil以上。目标阻抗线宽线距介质厚度铜厚85Ω5.0 mil7.0 mil4.0 mil1 oz90Ω4.6 mil7.5 mil4.0 mil1 oz100Ω4.0 mil9.0 mil4.0 mil1 oz从表里能看出来85欧姆的线宽更宽、线距更小对布线密度更友好。这也是为什么PCIe选85欧姆的一个实际原因。4.2 用Polar SI9000算阻抗的步骤Polar SI9000是行业里用得比较多的阻抗计算工具操作不复杂但有几个参数容易填错。我把我常用的步骤列一下选择模型差分对走线表面微带线选“Edge-coupled Coated Microstrip 1B”内层走线选“Edge-coupled Stripline”。填入叠层参数介质厚度H、铜厚T、介电常数Er、阻焊层厚度C1/C2。填入线宽W1/W2和线距S。点击计算看结果是否接近85欧姆。如果偏差大调整线宽或者线距迭代到目标值。注意Polar SI9000算出来的阻抗是理论值实际板厂的工艺能力会影响最终阻抗。比如蚀刻补偿、介质厚度公差、铜箔粗糙度这些因素都会让实际阻抗和计算值有偏差。所以算完之后一定要和板厂确认他们的阻抗控制能力通常板厂会给你一个调整后的线宽建议。4.3 和板厂沟通阻抗控制的技巧很多人把Gerber发给板厂就不管了结果板厂按自己的常规工艺做阻抗偏了一大截。正确的做法是在发板的时候附一份阻抗控制说明写清楚哪些层需要控阻抗目标阻抗值85欧姆差分±10%参考叠层结构允许的测试方法TDR测试或者阻抗条测试板厂收到之后会根据自己的工艺做微调然后反馈给你确认。这个来回沟通的过程不能省尤其是做Gen4以上的板子。5. 仿真验证投板前必须做的事5.1 为什么仿真不能省有人觉得阻抗算对了就行了仿真没必要。但实际链路里不只有走线还有过孔、连接器、电容焊盘这些结构用简单的阻抗公式算不出来必须用3D电磁仿真工具来提取S参数然后做通道仿真看眼图。我一般用Sigrity或者HFSS做提取然后用ADS或者HyperLynx做通道仿真。流程大致是在PCB工具里导出差分对的3D结构模型。导入电磁仿真工具设置端口和边界条件。扫频提取S参数看插入损耗和回波损耗。把S参数导入通道仿真工具加上TX/RX的IBIS-AMI模型。跑眼图看眼高、眼宽、抖动是否满足要求。5.2 过孔阻抗优化的仿真对比过孔是PCIe链路里最难处理的不连续点。我做过一组仿真对比同一个过孔结构不做任何优化和做了优化之后的S参数差异很明显。未优化的过孔反焊盘直径和焊盘一样大没有做地孔伴随TDR阻抗在过孔处掉到65欧姆左右回波损耗在8GHz的时候只有-8dB。优化后的过孔反焊盘直径比焊盘大8mil周围加了4个地孔TDR阻抗在过孔处最低到78欧姆回波损耗在8GHz改善到-15dB。过孔类型TDR最低阻抗8GHz回波损耗Gen4眼高未优化65Ω-8 dB72 mV反焊盘优化74Ω-12 dB105 mV反焊盘地孔78Ω-15 dB128 mV这个数据说明过孔优化对信号完整性的改善非常明显。如果你做的是Gen4以上的板子过孔一定要做仿真优化。5.3 AC耦合电容焊盘的仿真处理AC耦合电容的焊盘通常比走线宽阻抗会下降。常见的处理方式有两种一是把焊盘下面的参考平面挖空降低焊盘对地的寄生电容二是把焊盘做窄尽量和走线宽度匹配。我仿真过几种不同的电容焊盘处理方式结果如下处理方式焊盘处TDR阻抗Gen4眼高不做处理68Ω78 mV焊盘下方挖空76Ω112 mV挖空焊盘缩窄81Ω126 mV挖空处理的效果最好但要注意挖空区域不能太大否则会影响回流路径反而引入其他问题。一般挖空区域比焊盘每边大3到5mil就够了。6. TDR实测板子回来之后怎么验6.1 TDR测试的基本设置板子打回来之后第一件事就是测阻抗。TDR时域反射计是最直接的测试手段。我用的是Keysight的TDR模块配合差分探头。设置的时候注意几个点上升时间设为35ps到50ps模拟PCIe Gen4的信号边沿。差分探头校准要做包括开路、短路、负载校准。测试点选在走线两端和中间看整条链路的阻抗一致性。6.2 实测数据怎么看TDR测出来的是一条阻抗随位置变化的曲线。理想情况下整条走线的阻抗应该是一条平直的线在85欧姆附近。实际测出来会有波动关键看几个指标平均阻抗是否在85欧姆±10%以内。最大偏差出现在哪里是过孔、电容焊盘还是连接器。阻抗变化的斜率是否平缓突变比渐变更糟糕。我测过一块Gen4的板子走线中段有一段阻抗掉到76欧姆查了半天发现是差分对在那一区域换层了过孔没有做优化。后来重新设计加了地孔和反焊盘调整阻抗恢复到82欧姆以上链路就稳定了。6.3 没有TDR怎么办TDR设备不是每个实验室都有如果没有可以用矢量网络分析仪VNA测S参数然后通过IFFT变换得到时域阻抗。或者用阻抗条测试板厂在拼板的时候会加阻抗测试条用万用表或者专用阻抗测试仪测。提示阻抗条测试的是测试条上的阻抗不代表你实际走线的阻抗。测试条和实际走线在蚀刻补偿、线宽公差上可能有差异所以阻抗条的数据只能作为参考不能完全替代TDR实测。7. 常见问题与排查技巧7.1 链路能识别但跑压力测试掉线这是最典型的问题。链路能协商上说明基本连通性没问题但跑压力测试掉线通常是信号完整性余量不够。排查顺序先测TDR看阻抗是否偏离85欧姆太多。检查过孔和电容焊盘处是否有明显的阻抗跌落。用示波器抓眼图看眼高和眼宽是否接近接收端灵敏度。如果眼图很差检查参考平面是否完整有没有跨分割。检查AC耦合电容的容值是否正确PCIe通常用100nF。7.2 阻抗测出来偏低怎么调阻抗偏低通常是因为线宽太宽、介质太薄或者介电常数偏高。调整方向减小线宽但要注意板厂的最小线宽能力。增加线距差分阻抗对线距也敏感。增加介质厚度需要调整叠层。换低介电常数的板材成本会上升。7.3 过孔阻抗跌落太厉害怎么办过孔阻抗跌落的优化手段按效果排序增大反焊盘直径最有效但会占用布线空间。增加伴随地孔改善回流路径。减小过孔孔径降低寄生电容。使用背钻去掉多余的过孔 stub。背钻对Gen4以上的链路特别有效因为过孔 stub 会引起谐振在特定频率上产生深度凹陷。我测过一组数据没有背钻的过孔在12GHz左右有一个明显的谐振点插入损耗掉到-20dB以下背钻之后谐振点推到20GHz以上Gen4频段内就平坦多了。7.4 常见问题速查表现象可能原因排查方法解决措施链路识别但掉线阻抗偏差大TDR测阻抗调整线宽/叠层眼图闭合过孔反射仿真S参数优化过孔特定频率损耗大过孔stub谐振VNA扫频背钻阻抗测试值波动大测试点选择不当多点测试重新选测试点板厂反馈做不了85Ω叠层不合理和板厂沟通调整叠层8. 几个容易踩的坑和实操心得第一个坑是只看线宽不看叠层。有些人拿到别人的设计文件直接抄线宽结果自己的叠层和别人的不一样阻抗差了很多。线宽和叠层是绑定的换了叠层就要重新算线宽。第二个坑是忽略阻焊层的影响。阻焊层的介电常数和厚度也会影响阻抗尤其是表层走线。Polar SI9000里有阻焊层的参数填的时候不要漏掉。第三个坑是过孔不做优化直接投板。过孔是PCIe链路里最容易出问题的地方尤其是Gen4以上过孔不优化基本不可能过。建议在布局阶段就把过孔结构定下来仿真验证之后再投板。第四个坑是AC耦合电容随便放。AC耦合电容的位置和焊盘处理对阻抗影响很大。电容尽量靠近TX端焊盘下面做挖空处理焊盘宽度尽量和走线匹配。第五个坑是不跟板厂确认阻抗控制能力。不同板厂的工艺能力不一样有的板厂最小线宽只能做到4mil有的能做到3mil。如果你的设计需要3mil线宽才能达到85欧姆但板厂做不了那就得改叠层或者换板厂。我个人的经验是PCIe的阻抗控制从叠层设计阶段就要开始不要等到布线完了才想起来。叠层定好了线宽算准了过孔仿真过了板子打回来基本不会有大的问题。TDR实测是最后一道关测出来偏差在±10%以内链路通常都能稳定跑。仿真文件这块我一般会保留几个关键结构的模型差分走线、过孔、AC耦合电容焊盘。这些模型可以复用到不同的项目里省得每次重新建。如果你刚开始做PCIe设计建议先从Gen3的板子练手阻抗控到85欧姆±10%过孔做基本优化跑通了再上Gen4和Gen5。