ARTICLE DETAIL

资讯详情

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

PCIe差分对布线实战:阻抗匹配、等长控制与信号完整性设计指南

PCIe差分对布线实战:阻抗匹配、等长控制与信号完整性设计指南 PCIe差分对布线这件事说简单也简单无非就是一对线一正一反把信号送过去但说复杂也真的复杂尤其是到了PCIe Gen4、Gen5甚至Gen6这个阶段速率翻倍往上涨时序裕量和损耗预算被压得越来越薄走线稍微处理不到位轻则链路降速重训重则直接枚举不到设备。我这些年接触过不少相关项目从最开始的PCIe Gen2转接卡到后面的NVMe SSD、视频采集卡、WiFi网卡调试可以说大部分信号完整性问题的根源最后追来追去都落在差分对走线设计上。这篇文章我就把自己总结下来的规范、经验和踩过的坑一次性讲清楚给正在做或者准备做PCIe板卡的朋友一个可以直接参考的实操清单。这篇内容适合谁看呢主要面向硬件工程师、PCB Layout工程师以及做FPGA或嵌入式方案、需要自研PCIe板卡的开发者。文章会从PCIe差分对的底层逻辑讲起逐步拆解阻抗设计、长度匹配、过孔处理、参考平面完整性等关键规范中间穿插大量项目里的真实场景和排查方法最后给出一套常见问题的速查表。看完之后哪怕你是第一次画PCIe板卡也能少走不少弯路。1. 先把底层逻辑理清楚差分信号和PCIe的基本账1.1 为什么PCIe一定要用差分对而不是单端信号很多人刚接触PCIe时会有个疑问为什么偏偏要用差分信号单端信号比如UART、I2C不也跑得好好的吗关键区别在于速率和抗干扰能力。PCIe从Gen1的2.5GT/s一路走到Gen5的32GT/s、Gen6的64GT/s信号上升沿越来越陡频谱越来越高对噪声、串扰、地弹的敏感程度也呈指数级上升。单端信号的地是回流的公共参考点一旦地平面有波动接收端判断高低电平的基准就会跟着抖这在高速场景下基本不可用。差分信号天生就解决这个问题。正负两条线传送的是一对极性相反的电平接收端看的是两条线之间的差值。共模噪声、地噪声会同时耦合到两条线上做减法时直接被抵消掉这就是所谓的共模抑制。另外差分对每条线都有自己的回流路径不像单端信号那样对地平面完整度要求极其苛刻。有一个行业里常说的类比单端信号好比独木桥上走人桥面一抖人跟着晃差分对好比两个人抬轿子两边脚步一致地面晃了轿子依然稳。PCIe选择差分传输还有一个实际原因差分对的电磁辐射也相对更低。两条极性相反的线靠得足够近时彼此的电磁场会互相抵消对外的EMI辐射比单端信号小得多。这对于要通过FCC、CE认证的整机产品来说意义非常大。1.2 阻抗、损耗和带宽这三笔账必须要会算既然理解了差分对的优势接下来就要学会算账。PCIe差分走线设计最核心的三个指标差分阻抗、插入损耗、通道带宽。先看差分阻抗。PCIe规范对差分阻抗的要求是85Ω±15%这个跟USB、以太网常用的90Ω、100Ω不一样。很多人第一次画PCIe时沿用100Ω差分规则结果链路余量不够实际上根源就是阻抗不匹配。这个85Ω的来由跟PCIe的电气特性、功耗目标、以及历史兼容性都有关系业界公认的结论是PCIe系统按85Ω差分阻抗设计整条链路的回损和抖动指标最佳。再看插入损耗。简单讲就是信号从发送端传到接收端沿途被介质、过孔、连接器吃掉多少能量。PCIe规范给了一条参考通道的损耗预算Gen3要求在PCB介质上的总损耗不超过某个阈值具体数值和板卡长度有关。实际操作里我们一般用每英寸多少dB来衡量走线损耗。普通FR4在4GHz附近Gen3的奈奎斯特频率损耗大概是0.5dB/inch左右到了Gen4的8GHzFR4就到了0.9-1.2dB/inch这时就需要考虑改用中损耗或低损耗板材了。最后是带宽。高速信号的频谱不是单一频率而是以奈奎斯特频率为主的一大片范围。PCIe Gen4单通道数据率16GT/s奈奎斯特频率就是8GHz。如果PCB走线的带宽不够高次谐波被衰减眼图就会闭合接收端的时钟数据恢复电路很容易误判。这三点是要联合起来考虑的阻抗决定了反射有多大损耗决定了信号到终点还剩多少带宽决定了信号的波形能不能保持完整。设计的时候叠层、线宽、线距、板材、链路长度都是围绕这三笔账来算的。2. PCIe差分对走线的设计规范拆解2.1 阻抗匹配设计85Ω目标从叠层反推线宽和线距做阻抗设计的第一步不是直接拍脑袋定线宽而是先确定叠层结构。叠层结构决定了差分线的参考平面距离、介质厚度和介电常数这几个参数直接决定了阻抗。典型的PCIe板卡叠层是四层或六层板。四层板结构通常是Top层走信号第二层是完整地平面第三层是电源平面第四层走信号。六层板则在Top和第二层之间多压了一层介质走线可以根据需要调整参考平面灵活度更高。阻抗计算可以用Polar SI9000这类工具也可以直接用IPC-2141公式做粗算。以常见的四层板为例如果Top层到第二层地平面的介质厚度是4milFR4的介电常数约4.2那么要做出85Ω差分阻抗常见做法是线宽5mil、线距8mil边缘到边缘3mil这个组合在阻抗计算软件里算出来通常在84-87Ω之间。当然不同板材、不同半固化片厚度下数值会变最终要以板厂的阻抗测试报告为准。这里有一个关键细节差分阻抗和单端阻抗不是独立存在的。PCIe差分对的两条线除了彼此之间的耦合还与参考平面之间有寄生电容。如果只关心线对之间的间距而忽略到地平面的距离阻抗就很容易偏。在Layout阶段我习惯把差分对的阻抗控制要求直接写进PCB加工说明书中指定“差分阻抗85Ω±10%”并注明需要板厂做阻抗条测试。好的板厂会按你的叠层出阻抗报告实际生产线的波动范围也能控制在±5%左右。2.2 长度匹配与等长容差对内等长和对外等长都不能丢PCIe等长这个话题看起来简单但其实有坑。对内等长是指差分对里面P和N两条线要等长。如果两条线长度差太大接收端做减法时正负信号到达时间不同步差分信号会失真共模成分增加。这个在高速PCIe里是致命的。PCIe Gen3及以上对内等长建议控制在5mil以内最好做到3mil以内。实际操作中我们在两个信号换层、绕过电感、经过AC耦合电容附近时最容易出现长度差这需要对每一段都做精确的蛇形补偿。对外等长是指同一组通道内比如PCIe x4的4组差分对或者x16的16组差分对它们之间的长度差不能太大。PCIe规范里关于组间等长给出了一个参考范围但不同代际要求差别很大。Gen2时代因为时序预算相对宽裕组间差50-100mil问题不大到Gen4时代Strobe信号和Data信号之间的偏差更敏感个人经验是组间差控制在20mil以内并且统一以最长的那对为基准来补齐。这里要特别提醒蛇形绕线不能盲目绕。蛇形线本身就是引入额外串扰和延迟失真的来源。两条蛇形线要尽可能错开相邻蛇形段的间距要满足3W原则以上绕线幅度不要超过线距的4倍避免过大耦合导致信号质量下降。我在一些项目里见过为了凑长度把蛇形绕得密密麻麻结果链路的抖动比不绕还差。2.3 差分对间距与串扰控制不是距离越近越好很多人觉得差分对嘛两条线要贴得越紧越好耦合越强抗干扰越好。这个说法在低频、低速场景下有一定道理但在PCIe这种高速下要打个问号。耦合过强的问题是阻抗会被拉低。两条差分线靠得太近线间电容电感增大差分阻抗会下降。要在相同叠层下保持85Ω线距小了就得加大线宽这会增加对空间的占用也让布线难度上升。所以线距不是越小越好而是要按照阻抗计算结果来定。另外一个被忽视的点是差分对与差分对之间的距离。两组差分对如果走得太近线间的串扰会让眼图变差。行业里普遍的经验是差分对与差分对之间的间距保持5W以上也就是线宽的5倍或者至少20mil。如果空间紧张至少也要保证15mil以上。这个距离不足特别是两组差分对平行长距离走线时串扰非常致命。除了差分对之间的间距差分对与其他信号之间的距离也要特别小心。尤其是PCIe时钟信号和复位信号不要沿着差分对并行太远否则强时钟边沿耦合进差分对会造成确定性抖动。经验值是保持至少30mil空间如果实在避不开就用地线隔离或加大走线间距。2.4 参考平面与过孔处理链路完整性的胜负手参考平面是高速信号回流的主要通道。PCIe差分对下方的地平面如果被切断回流信号就要绕道环路面积变大产生共模噪声和辐射信号质量也会大打折扣。在实际项目里最常见的参考平面被破坏的操作有两个一个是相邻信号层走线重叠但参考层不一致另一个是电源层被分割成多个电压区块差分对经过分割边界时参考平面失去连续性。处理原则很简单保证差分对全程有一个完整的地平面作参考。如果走线必须换层最好切换到离新参考平面更近的一层并在换层过孔旁边放地过孔提供回流路径。这个地过孔不是随便放的它要尽量靠近信号过孔建议距离小于过孔中心距的2倍。过孔对PCIe信号的影响分为几个方面过孔的寄生电容、寄生电感、以及过孔残桩。Gen3以下速率过孔的影响相对可控用标准的10mil钻孔、20mil焊盘的过孔基本没问题。到了Gen4以上过孔的残桩效应就非常突出。残桩越长对高频信号的反射越严重。解决办法是使用背钻工艺把残桩钻掉或者采用激光盲孔设计。另外一个细节是过孔的反焊盘anti-pad尺寸。反焊盘太小过孔和参考平面之间的寄生电容偏大会造成阻抗跌落。Gen4设计中信号过孔附近的反焊盘建议做到过孔直径16mil以上。这个在PCB封装库中就要规划好后期想改很麻烦。3. 实战流程从一个PCIe板卡项目看走线落地3.1 叠层规划和阻抗计算动手之前先定框架我最近经手的一块PCIe Gen4 x4转接板项目正好可以把整个流程串起来。这块板子功能不复杂就是把CPU的PCIe Gen4 x4信号转接出去给客户接NVMe硬盘用。板子尺寸很小六层板。第一步先定叠层。六层板顺序是Top-GND-Signal-Power-GND-Bottom。把PCIe差分对分配在Top层和Bottom层参考平面分别用第二层和第五层的完整地平面。中间信号层给低速信号和辅助信号使用不跑高速串行信号。第二步算阻抗。Top层到第二层介质厚度取4milFR4板材线宽5mil、线距8mil用Polar算出来差分阻抗约85.4Ω符合预期。Bottom层到第五层GND介质厚度因为叠层对称是5mil线宽需要调整到4.8mil线距同样8mil算出来约85.1Ω。这里体现了叠层不对称带来的差异好在通过调线宽可以弥补。第三步确定等长规则。对外等长按20mil容差来做对内等长3mil。对高速通道来说这个规则不算严格但配合优质板材和较短的链路长度实测下来完全没有问题。3.2 布线优先级和通道规划先走高速再走低速Layout阶段最大的原则是高速信号优先。先规划出PCIe差分对的通道确保它们以最短距离、最少换层、最完整参考平面来布线然后再安排低速信号。PCIe通道在板上的走向尽量保持直线不要绕大弯。迫不得已要拐弯时用45度角或弧形转角避免90度直角。虽然不同文献对90度转角的影响争议很多但在高速信号上完全没有必要去测试这个禁忌直接按照45度处理最稳妥。通道与通道之间的隔离我习惯在差分对两侧各留出至少10mil的空间不放任何其他信号关键区域甚至加一圈地孔做隔离。地孔不是摆设它们在高速信号之间形成了法拉第笼效应能有效抑制侧向串扰。做布线时还有一个小技巧差分对不要跨越电源块分割线。哪怕有完整的底层地平面但相邻电源平面的分割会在回流上造成轻微的不连续。PCIe信号线换电源层平面时系统中其他电源区块和地平面之间也会形成耦合路径。最稳妥的做法是高速信号全程走参考完整地平面的层不要参考电源平面。3.3 AC耦合电容的放置与处理位置和走线都不能含糊PCIe差分信号在发送端一般需要串接AC耦合电容用来隔直通交让收发两端的共模电压可以独立设置。Gen1到Gen4通常每通道一对AC耦合电容位置规范在发送端附近具体要求要看芯片厂商的参考设计。AC耦合电容的焊盘和封装对高速信号有影响。首选是0402封装相比0603拥有更小的寄生参数。如果信号速率高且裕量紧张还可以考虑0201封装但这种封装对焊接工艺要求更高小板厂容易出问题。电容两侧的走线要特别注意。我见过不少板子电容焊盘跟走线之间没有做阻抗补偿结果电容位置的阻抗突变明显。处理方法一般有两种一是让走线到电容焊盘的过渡尽量短并且把焊盘下方的参考平面掏空一点以补偿寄生电容二是使用厂商提供的带反焊盘优化的封装库。我自己的习惯是如果空间允许就在电容两侧各做一小段渐变线宽的补偿走线让阻抗过渡更平滑。AC耦合电容的位置离发送端越近越好。太长的话发送端看到的通道上会有反射叠加眼图闭合概率明显增大。3.4 金手指、连接器和BGA扇出区域的特殊处理PCIe板卡如果是金手指形态比如标准的PCIe x1/x4/x16显卡或扩展卡金手指区域的设计就直接影响到链路能否建链。金手指的焊盘到差分过孔的长度要尽量短而且差分对内两条线在焊盘处也要保持对称。金手指部分的参考平面在很多设计里会被掏空因为金手指上方有外壳接地弹片、卡槽边沿等结构。这时要在金手指焊盘附近尽快把信号引导到有完整地平面的内层换层过孔旁边配合地过孔。连接器场景也是一样比如从主板PCIe插槽到M.2 Key M接口中间那段走线要格外小心M.2连接器处的焊盘和过孔区域。M.2金手指区域空间狭小差分对焊盘之间的间距往往比走线段更大这会引入一定的阻抗突变。处理办法是让焊盘区域的伴地过孔和回流地孔尽量完整同时把走线在焊盘前一点点收窄平滑过渡。BGA扇出是另一个高频翻车点。主控芯片或FPGA的BGA封装里PCIe差分对往往在内部两层走线通过过孔扇出到表层。扇出区域的过孔密度大参考平面被过孔反焊盘掏得千疮百孔回流路径很容易断裂。此类场景的通用做法是信号层和参考层间隔控制在3.5mil以内缩小过孔反焊盘尺寸信号过孔旁边尽量多地铺地过孔。4. 踩过的坑与排查实录4.1 链路建不起来先别怀疑芯片看看布线PCIe建链的过程涉及LTSSM状态机的多个阶段。很多工程师遇到设备无法枚举时第一反应是怀疑芯片配置错了或者供电不对。但根据我的经验相当一部分情况其实是差分对布线问题导致接收端无法锁定信号。有一个真实案例一块转接板PCIe Gen3 x1信号走线穿过了一个地址区域因为绕线空间不够我在差分对中间塞了一条排针信号线。结果上板后设备能够完成链路训练但速度始终锁定在Gen1Gen2和Gen3都训练不上去。用示波器测量时发现接收端眼图的确定抖动明显偏大。把那条排针信号线移走后Gen3正常锁定。这个案例说明了串扰对高速链路速度协商的直接破坏力。如果你遇到类似问题排查路径建议如下先用主板BIOS或系统工具查看PCIe链路协商到的速率和链路宽度再用示波器在测试点测量眼图关注眼宽和眼高是否满足规范最后用TDR测试差分对的阻抗曲线看是否有异常跌落或凸起。后两种方法需要一定仪器支持如果手头没有也可以靠软件侧的信息做初步判断。比如在Linux系统下用lspci的带宽字段可以读取PCIe链接速度和宽度Windows下用GPU-Z也能看到显卡运行的PCIe速率。如果速率被压到最低档往往就是物理层信号质量问题。4.2 测试中出现的降速、中断、重传问题现在很多WiFi网卡或高速网卡都走PCIe通道经常有用户反映测速过程中连接中断。这种问题如果排除驱动和散热因素物理层的诱因基本逃不开这几个走线过长导致损耗超标、差分对换层没做过孔回流优化、AC耦合电容位置不对导致反射过大。我处理过一个Realtek RTL8852BE WiFi 6网卡在PCIe接口下测速断连的案例。板卡本身是给笔记本ODM用的PCIe Gen1 x1走线从CPU到M.2座子总长约3inch叠层是四层板差分线走底层参考平面是第三层电源平面但这块电源平面被分割成了多个电压块。网卡在低速数据传输时正常一旦跑满带宽链路就频繁重训和中断。排查过程很有趣用示波器测量差分波形时发现信号眼图本身还行但低频抖动明显偏大这跟电源平面的分割产生的回流绕行特征符合。处理方案是把PCIe差分对换层到Top层参考第二层完整地平面同时将走线长度缩短到2.2inch替换了部分板材为低损耗材料。改版后问题彻底消失。这个案例的教训是参考平面的完整性比走线长度更优先。很多人只关注等长和阻抗却忽略了回流路径造成了所谓“看得见的都对了看不见的全错了”。4.3 参考平面被破坏的几个真实教训第一个教训来自一块PCIe x16转接板。因为散热器安装孔的位置影响有一组差分对被迫在电源层下方穿过而那里正好有一个大面积的电源分割间隙。结果系统能点亮但运行高负载任务时偶尔蓝屏查了很久才定位到是这组差分对的信号质量劣化。第二个教训是过孔残桩。一块Gen4 SSD转接板因为设计时没有跟板厂确认背钻工艺默认做了普通通孔过孔导致残桩长度约35mil。SSD连续读写时会偶发I/O错误SMART信息里重分配扇区数增加。改用背钻工艺后问题消失。这个案例特别适合做Gen4以上设计的朋友参考背钻不是可选项是必选项。第三个教训是AC耦合电容的走线方式。有一块FPGA板卡PCIe差分对在电容两端的走线间距不一致一边是8mil一边是14mil。TDR测试发现电容位置的阻抗凸起接近15Ω链路的回损指标远超规范。把两边线距统一后问题解决。这种小细节通常不被人注意但高速信号设计很多时候就是拼细节。一条链路由发射端、封装、PCB、连接器、接收端多段组成每一段的微小失配累积起来最后都会体现在抖动和眼图余量上。4.4 常见问题速查表按症状找原因我把这些年PCIe差分对布线调试遇到的问题整理成一张速查表方便大家按症状快速定位方向症状可能原因排查与验证方法解决方向链路协商速率低始终停在Gen1差分对串扰过大、阻抗严重不匹配、损耗超标示波器测眼图TDR测阻抗曲线加大差分对间距优化阻抗缩短走线设备无法枚举LTSSM卡在Polling或Configuration信号幅度不足、接收端无法锁定时钟、链路训练失败检查AC耦合电容值、发送端摆幅配置调整电容位置检查差分走线连续性确认参考平面完整高负载运行时降速或链路重训电源完整性差、地弹干扰、温度升高导致损耗增大测试各电压纹波观察温度曲线优化电源去耦加强散热增加信号裕量测速瞬间中断过一会儿恢复信号质量临界偶发误码触发链路重训检查PCIe错误寄存器统计CRC错误优化走线退换低损耗板材缩短链路长度传输正确但EMI辐射超标差分对回流路径不完整共模电流过大近场探头扫描差分对走线区域保证参考平面完整增加地过孔密度阻抗测试值偏低线宽偏大、介质厚度偏小、线距偏小与板厂确认叠层实测结果按实际叠层参数重新计算线宽线距阻抗测试值偏高线宽偏小、介质厚度偏大、线距偏大同上同上这张表不可能覆盖全部状况但足以应对绝大多数中低速项目里出现的布线问题。如果遇到表中没列到的现象建链失败先查物理层这是最朴素也最正确的逻辑。4.5 关于“PCIe为何还需要单独供电”的题外话最后说一个经常跟差分对走线一起被问到的问题PCIe信号本身是高速差分传输为什么板卡还需要额外的12V/3.3V供电难道差分线不能输电吗答案很明确差分对是用来传信息的不是用来传能量的。差分信号线的铜箔很细载流能力有限如果用它来给板卡上的主控芯片、SSD、WiFi网卡供电电压降和损耗都会大得不可接受。PCIe插槽上的板卡尤其是高功耗显卡需要独立的电源连接器来满足几十瓦到几百瓦的功耗需求。辅助供电的回路如果布线不当地电位偏移也会反过来影响差分信号的共模电平和接收端判断所以电源和信号在系统设计层面是强耦合的。做差分对走线设计时电源完整性一定不能忽略。5. 写在最后这套经验是可以复用的PCIe差分对走线设计本质上不是在处理“一对线”而是在处理“一条通道”的整体行为。从芯片引脚到连接器焊盘发送端的共模电压设定、AC耦合电容、过孔残桩、参考平面回流、线对间的耦合、线对外的隔离乃至板材的介电常数和损耗角每一个环节都在为最终眼图的张开关联。掌握这套思路之后你会发现它不只适用于PCIeUSB、SATA、以太网、SFP这些高速差分信号的设计与调试方法也是相通的。我个人在实际操作中的体会是很多人容易陷进“参数达标”的思维里觉得阻抗控制在85Ω±10%就万事大吉。但真正决定产品可靠性的往往是链路裕量也就是实测眼图距离模板边界还有多少距离。而裕量就是靠细节堆出来的少换一次层、多放几个地过孔、线距多拉开2mil、板材选低一档的损耗等级这些看似不起眼的决定最后都会体现在高速场景下的稳定性上。最后再分享一个实用小技巧在布局阶段就提前规划好PCIe差分对的测试点比如在过孔旁边的表层加一对测试焊盘或者预留一个串行探头接口。这样在后期调测时既不用为了测波形扒开散热器也不会因为飞线破坏信号路径。一颗螺丝钉的成本能省下一个周末的排查时间这笔账非常划算。
返回列表