ARTICLE DETAIL

资讯详情

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

高速PCB设计核心:差分线走线与等长处理全解析

高速PCB设计核心:差分线走线与等长处理全解析 做了这么多年高速PCB差分线是我最常跟人聊起的话题。不管是USB、PCIe、HDMI还是以太网凡是跑高速信号的板子都离不开差分线。而差分线设计里最让人头疼的就是走线布局和等长处理这两件事。很多人最初觉得“差分线不就是两根线一起走嘛”可真到了板子上对内间距该卡多少、等长误差该压到多少、蛇形线绕在哪个位置才不影响阻抗全是细节。这篇文章我就把差分线走线和等长处理这些事从原理到实操完整拆开讲一遍希望能帮你少走几趟弯路。这篇文章适合正在画高速板、被差分等长折腾过的硬件工程师也适合刚入门PCB设计、想搞清楚差分线底层逻辑的朋友。我会先讲差分线和等长的核心原理再讲具体走线规则和工具操作最后放一些我实际踩过的坑和排查思路。内容偏实践但关键地方的“为什么”我也会讲透这样你改起线来心里有数而不是只会机械地绕蛇形线。1. 差分线的核心概念与整体设计思路1.1 什么是差分信号为什么要用差分线差分信号就是用两根线来传一路信号这两根线上的电压幅度相同、极性相反。接收端真正关心的是两根线的电压差而不是某根线对地的绝对电压。这里有一个很直观的生活类比两个人抬一桶水如果路面颠簸两个人身体会同时晃动但桶里的水不太会洒出来因为两个人在相同方向上的晃动被抵消了。差分信号抗干扰也是这个道理外界噪声通常会同时耦合到两根线上由于接收端看的是两根线的差值这种共模噪声就被自然地消除掉了。用差分线的好处不只是抗干扰。差分信号的摆幅可以做得比较小比如USB 3.0的差分摆幅只有几百毫伏这样功耗更低、速率也能跑得更高。此外差分线产生的电磁干扰EMI也更小因为两根线上的电流方向相反它们在空间里产生的磁场会相互抵消对外辐射自然就小了。这也是为什么高速接口几乎清一色采用差分信号的原因。不过差分信号要发挥这些优势前提是两根线必须尽量保持一致。这里的“一致”包括走线长度一致、走线宽度一致、与参考平面的距离一致还包括走线之间的间距一致。一旦两根线出现明显差异共模噪声的抑制能力就会下降时序上也会出问题。这个“一致”就是等长处理和差分规则约束的由来。1.2 差分阻抗才是整个设计的“锚”很多人画差分线时第一反应是“线宽多少、间距多少”但这个问题的标准答案只有一个先去看叠层算阻抗。差分线的核心设计目标不是某根线的单端阻抗而是差分阻抗。以USB 2.0为例其特征差分阻抗要求是90欧姆而PCIe、HDMI、千兆以太网等接口的差分阻抗通常是100欧姆。也就是说不同接口的差分阻抗标准不一样你必须根据接口要求和板厂提供的叠层参数来反推线宽和线距。这里顺带解释一个常见的误解很多人以为差分阻抗就是两根单端线特性阻抗的串联即 Zdiff Z0 Z0但这是不准确的。实际上当两根线靠得比较近时它们之间会产生耦合差分阻抗会比简单的串联关系要低一些近似公式可以写成 Zdiff ≈ 2 × Z0 × (1 - k)其中k是耦合系数。也就是说线距越近耦合越强k越大差分阻抗越低。反过来两根线拉得越开耦合越弱差分阻抗就越接近2倍单端阻抗。这对布线实践的指导意义非常直接当你调整对内间距时不仅影响耦合还直接影响差分阻抗的数值。很多初学者在调等长时把蛇形线绕得太靠近中间导致局部间距突变、阻抗突变结果眼图反而变差。记住一个原则等长绕线时蛇形线的线宽和线距必须和原差分线保持一致不能为了凑长度而随意改变线距。1.3 等长处理到底在解决什么问题等长处理解决的是“时序偏差”skew问题。差分信号是两根线同时传输的接收端通过比较两根线的差值来判断逻辑电平。如果两根线长度不同那么信号到达接收端的时间就不同这个时间差会直接转化为相位偏移。相位偏移严重时接收端的采样窗口会变窄眼图闭合误码率上升。等长还有一个容易被忽略的作用减少差模到共模的转换。差分线之所以抗干扰前提是两根线上耦合的噪声相同这样可以用差分方式抵消。但如果两根线不等长耦合到两根线上的噪声大小和时间就会有差异一部分差模噪声就会转换成共模噪声。共模噪声对接收端的影响很大还会带来额外的EMI辐射。所以等长处理不仅是为了时序还直接影响信号完整性和电磁兼容。实际工程中对等长精度的要求取决于接口速率。低速I2C这类信号差个几百密尔也无所谓USB 2.0通常要求对内误差在5到10密尔以内就问题不大但到了USB 3.0、PCIe Gen3这类高速差分对内误差常常要压到5密尔甚至更小。这里还特别提醒一点有些芯片封装内部的引线长度本身就是有差异的如果你发现外部PCB已经把长度做得非常严格但测试仍然不合格可以考虑去芯片手册里确认一下封装内部的走线差异必要时在PCB上做反向补偿。2. 差分线走线的关键规则与细节把控2.1 线宽线距怎么定对内间距、对间间距的区别差分线的线宽线距设计起点一定是阻抗计算。我一般会先向板厂要一份叠层参数然后告诉他们我需要多少欧姆的差分阻抗让他们给出建议的线宽线距。不过板厂的建议值通常比较宽泛真正画板时还是要自己心里有数知道调整哪个参数会影响什么。对内间距指的是同一对差分线中P线和N线之间的距离。这个间距决定了耦合强度也影响着差分阻抗的大小。间距太小阻抗会掉加工难度也大间距太大两根线几乎失去耦合那就不叫差分线了抗干扰能力会大打折扣。常见的设计中表层差分线的对内间距通常会控制在一个线宽到两个线宽左右的距离。比如线宽5密尔时对内间距常见6到8密尔。但这只是一般经验具体多少必须算过阻抗之后才能定。对间间距指的是不同差分对之间的间距。这个间距同样有讲究太近了会产生串扰。按照3W原则来理解对间间距至少要达到3倍线宽也就是中心到中心的距离不小于3倍线宽。在高速接口中对间间距还需要结合串扰仿真来确定。比如PCIe这对信号和另一对信号靠得很近时串扰可能会影响信号质量这时就得拉开距离或者在中间加地孔隔离。这里还要专门提一下“共面波导”的情况。热词里有“共面波导表层走线跟GND间距”这个问题很多表层射频或者高速信号会采用共面波导结构也就是在差分线两侧包地铜皮。这种情况下差分线到GND铜皮的距离也是要计算的它会影响单端阻抗和差分阻抗。通常这个距离也是通过阻抗计算软件来确定不能随手拉一根地铜皮就完事。地铜皮如果离得太近线的阻抗会被压低反而得不偿失。2.2 参考平面与回流路径差分线最容易被忽视的“地基”差分线虽然看起来是两根线之间形成回路但实际上高频信号的回流路径主要还是参考平面。一个常见的误区是觉得“差分信号不需要参考平面”这其实不对。耦合确实让两根线之间的回流增加但在走线换层、过孔附近和走线末端参考平面仍然承担着主要的回流职责。所以差分线下方必须有完整的地平面或电源平面尽量不能跨分割。我之前做过一块板子USB 2.0的差分对走线跨越了一条被分割的地平面缝隙结果USB设备老是断连。后来查了很久发现就是回流路径被切断了信号完整性严重恶化。把走线改到完整平面上之后问题当场消失。所以差分线走线前的第一件事就是确认整条路径下方有没有完整参考平面。如果实在避不开分割哪怕多打过孔绕远一点也别让差分线横跨那个缝隙。关于“开尔文走线”这在电源采样中很常见和高速差分线的原理是相通的。开尔文连接的核心是让采样回路不流经大电流路径从而消除导线电阻上的压降影响。在PCB设计中很多高精度电流检测芯片的走线要求使用开尔文连接方式采样线单独走一对细线到负载端不给它经过大电流焊盘。这和差分信号强调的“回流不受干扰”有异曲同工之处。2.3 过孔、换层与拐角细节里的魔鬼差分线走线不可能永远在同一个层面换层几乎无可避免。但换层就意味着走过孔而过孔会带来阻抗不连续。过孔本身有寄生电容和寄生电感它会像一个突变的节点让信号在这里产生反射。为了减少过孔带来的影响我一般会采取几个措施一是尽量少换层能一层走完的不要换二是换层时在过孔旁边加接地过孔给回流提供近距离的换层路径三是过孔的尺寸要尽量小减少寄生参数。换层之后的等长补偿也需要特别注意。很多EDA工具会允许你设置过孔长度对整个走线长度的影响因为信号实际经过的路径是包括过孔的。如果你只算平面走线长度而漏掉了过孔长度等长就会存在偏差。在Allegro里有个参数叫“Via Length”计算总走线长度时可以把过孔长度加进去这在做高速差分等长时非常实用。拐角设计也是差分线走线的关键点。传统观念是“不能用90度直角走线”原因在于直角处线宽突变会产生阻抗变化和EMI问题。现实中我更推荐45度角走线加工方便信号质量也好。如果空间允许Allegro还支持圆弧走线圆弧走线的信号质量是最好的因为没有任何角度突变阻抗过渡最平滑。热词里提到“Allegro圆弧走线”和“Allegro 90°走线检查”说明不少人已经在关注这些细节了。Allegro里切换圆弧走线的方式很简单布线时按ShiftR切换走线模式或者在Options面板里选择Arc模式设置好圆弧半径即可。而90度走线检查可以用Allegro的“DBDoctor”或者写一个SKILL脚本来查本质上就是在查找走线拐角处角度接近90度的线段。2.4 不同接口的差分设计参考不同速率和不同协议的差分信号对走线要求的严格程度差别挺大。我做了个简单的整理方便大家参考对比接口类型典型差分阻抗对内等长误差要求走线特点USB 2.090Ω5~10 mil相对宽松但要注意参考平面完整USB 3.x85~90Ω5 mil速率高对内误差严格对间串扰敏感HDMI100Ω5~10 mil有多对差分信号对间等长也有要求PCIe85~100Ω取决于版本5 mil高速串行对内和对外等长都要严格千兆以太网100Ω10 mil 左右有极性要求注意差分对的极性交换MIPI100Ω小于5 mil移动设备常见等长要求很严格表格只是一个粗略参考具体数值一定要以对应接口规范为准。还有一点要单独强调就是在布局阶段就要考虑到差分线的走向不能等到布线时才发现某个BGA区域出线困难。差分对出线时尽量从BGA外围引脚相邻位置一起出来保持间距和长度的一致性不要一根线绕了一大圈另一根线直着走。这个在画BGA封装时就要提前规划好扇出方向。3. 差分线等长处理的实操方法与工具操作3.1 等长处理的基本思路先走通再对齐等长处理不是上来就绕蛇形线。我的常规流程是先把差分对按规则正常走通在走通的基础上再看长度差有多少哪里需要补偿然后在这个位置上做等长调节。也就是说等长是“修正”手段不是“主路径”设计。如果一对差分线一开始就绕得乱七八糟即使长度对齐了信号质量也不会好因为你引入了太多不必要的过孔和突变。等长补偿的常见方式有两种蛇形线Accordion和套筒式Trombone。蛇形线是最常见的方式就是把走线绕成连续的S形或U形来增加长度。套筒式则是通过几段平行的短线来回折返像手风琴的褶皱一样。这两种方式各有适用场景蛇形线在直行段上比较好用套筒式更适合在走线末端空间充足的地方使用。不管用哪种方式关键在于补偿段的线宽、线距必须和原有差分线保持一致而且补偿段不宜过长否则会产生不必要的耦合。等长误差到底要控制到多少我的建议是以接口规范为基准以芯片手册为辅。有的芯片手册会明确写“对内Skew必须小于XX密尔”那这个就是硬指标。如果没有明确指标可以参考我上面表格里的经验值。总之宁严勿松尤其是在布线空间允许的情况下我会尽量把对内误差控制在5密尔以内这样能给测试和量产留出余量。3.2 ADAltium Designer中的差分走线与等长调节在AD里做差分走线第一步是定义差分对。在原理图中你可以在放置差分对符号时给网络命名加后缀比如“USB_P”和“USB_N”AD会自动识别“_P”和“_N”后缀并建立差分对。也可以直接在PCB界面打开“Differential Pairs”面板手动添加网络对。布线时使用快捷键“P”“I”会进入交互式差分对布线模式选择已经定义好的差分对沿着需要的路径拖拽即可。差分对走线时AD会依据你在规则里设定好的差分阻抗和线宽线距自动约束两根线的间距。当然前提是你要在PCB规则编辑器中正确配置差分对规则打开“Design”菜单里的“Rules”找到“Differential Pairs Routing”设定“Min Width”、“Preferred Width”、“Max Width”以及“Min Gap”、“Preferred Gap”、“Max Gap”这几个关键参数。等长调节在AD里也很方便。选中要走等长的差分对然后用快捷键“T”“R”进入“Interactive Length Tuning”模式点击要走等长的目标走线AD会自动出现一个长度调节的对话框你可以在这里看到当前总长度和目标长度。接下来可以调整振幅、间距等参数AD会以蛇形线的方式帮你补足长度。实际操作时注意蛇形线的振幅不能超过线距的3倍否则会产生很大的耦合噪声蛇形线之间的间距也不能小于线距的规范值这需要你在调节时观察DRC标记。3.3 Allegro中的差分走线与等长设置Allegro是很多大型项目中使用的工具它的差分等长功能非常强大但相对的学习曲线也比较陡。在Allegro中做差分核心是配置约束管理器Constraint Manager。在CM中创建差分对时要设置好“Physical”和“Spacing”两个方面的约束Physical里管线宽、线距Spacing里管不同网络间的间距规则。差分线宽线距修改到现有走线上时CM会实时显示哪些走线违反了新规则这一点非常实用。Allegro中手动布差分线的路径是Routing工具下选择“Differential Pair”或者快捷键“P”并在Options面板里选择差分对然后开始布线。布线的过程中Allegro会自动按照CM中的约束保持线距。这里提一下热词里有人问“在AD16里怎么手动布差分线”其实Allegro也有类似的手动模式你需要先设置好规则再使用差分对布线命令两根线会同时被拉出不会出现只走一根的情况。Allegro的等长调节工具是Route菜单下的“Delay Tune”选择“Delay Tune”之后点击要调等长的走线然后在Options面板里选择绕线方式Accordion或Trombone设定振幅、间距、目标长度等参数。这里的参数和AD里类似振幅不宜太大绕线间距必须满足你设置的间距规则。等长绕完以后用“Display”菜单下的“Element”或者直接看状态栏的长度报告就能看到当前的走线总长度和对内误差。这里补充一个热词相关的问题“Allegro用Sub Drawing导入走线过孔不成功”。这个问题我在项目里也遇到过。Sub Drawing是Allegro在不同板子之间复制对象的方法但走线和过孔导入不成功往往是以下几个原因一是两个文件的层命名不一致导入时找不到对应的层二是没有勾选导入走线和过孔的选项三是两个版本号差异太大导致兼容问题。解决方案是在导入时先确认层映射表把源文件和目标文件的层一一对应另外导入前先运行一下“Update Symbols”和“Database Check”把数据库修一遍再导入。3.4 等长绕线的几种具体方式与参数选择等长绕线的绕线方式要结合走线所处的空间来定。如果是在一段比较长的直行段中间补偿蛇形线是首选。蛇形线的关键参数有三个振幅、节距和绕线长度。振幅太大会让两根线之间的耦合距离变长影响差分阻抗节距太小会导致蛇形线相邻线段之间产生不必要的耦合绕线长度则必须精确计算确保补足的长度刚刚好。实际操作中我建议的蛇形线参数是振幅不超过线距的3倍蛇形线相邻平行段之间的间距不小于原有对内间距的2倍。举个例子如果线宽5密尔、对内间距6密尔那蛇形线的振幅不要超过18密尔平行段之间的间距不要小于12密尔。这些数值只是一个经验参考但通常经过DRC检查后都能满足信号质量要求。如果你在走线末端空间比较充足的地方做补偿套筒式Trombone绕线会更合适。套筒式的优点是走线集中在同一方向回字形折叠占用横向空间较小而且每一段之间的距离可以通过CM规则严格控制。缺点是不适合在弯曲的路径上做因为它要求有一段比较规整的走线区域。还有一些细节要注意不要在做等长调节时反复覆盖已经调好的区域否则会造成局部耦合过多不要在靠近BGA器件出线的位置做等长因为那里的走线密度高、串扰风险大更不要在过孔附近做蛇形线补偿因为过孔本身就是一个阻抗不连续点再加上蛇形线的耦合信号质量会雪上加霜。尽量在整条差分线的中间段或者走线比较舒展的地方做补偿。4. 常见问题与排查技巧实录4.1 等长做了但测试仍然不过问题出在哪这是我在实际项目中遇到最多的一类问题明明软件报告显示长度已对齐对内误差只有几密尔但高速信号测试眼图仍然不理想。排查思路我总结为以下几步第一步确认软件报告的长度是否包含了所有路径段。比如过孔长度有没有加进去换层处的线段有没有被软件漏算。第二步检查等长绕线区域的线距和线宽是否有突变很多EDA工具在绕蛇形线时如果设置不当会让蛇形线拐角处出现比原线距更窄的缝隙这个局部阻抗变化在原理图上根本看不出来只能通过3D视图或制造输出中检查。第三步检查参考平面是否完整这一条前面讲过但还是要重点强调。还有一种情况容易被忽略就是对内等长做好了但对间等长没有做。部分接口规范不仅要求一对差分线内部等长还要求同一组的所有差分对之间长度要一致。比如HDMI就有多个差分对它们之间的长度差也会影响整个链路的时序。如果只做了对内等长而没做对间等长信号一样可能出问题。4.2 对内间距到底卡多少才合适热词里有“对内间距是多少”这个问题。坦率说没有统一答案间距必须配合线宽、叠层、目标阻抗来综合确定。我给你们一个可以做参考的推导路径先根据目标差分阻抗和叠层参数使用Si9000或者Polar等阻抗计算工具输入线宽、介质厚度、介电常数、铜厚等参数仿真得到推荐的间距范围。这个范围内选择一个能保证加工良率的常规值即可。不要一味追求小间距来增强耦合因为加工时线距太近可能会导致腐蚀不足或阻抗不均。对内间距对差分阻抗的敏感性我可以用一组大致数据来说明同样叠层和线宽条件下把对内间距从8密尔改到6密尔差分阻抗可能下降3到5欧姆。看似不多但如果目标阻抗是100欧姆这个变化已经接近5%了再加上板厂生产时的阻抗公差±10%有可能直接超标。所以确定对内间距之前务必要用软件仿真验证而不是拍脑袋估。4.3 换层位置的等长补偿与过孔处理差分线换层时如果换层位置附近做等长补偿一定要格外小心。过孔本身带来的寄生电感和电容会让信号在换层处产生反射而蛇形线绕在过孔旁边相当于在反射点附近又增加了一个容性负载两者叠加会让信号质量明显恶化。我通常的做法是在换层前先保证差分线是直的等穿过孔完成换层之后再在新一层上用蛇形线做补偿。如果空间不够必须要在过孔旁边绕那至少保证蛇形线离过孔有一定距离不要紧贴着过孔绕。换层还会带来一个“回流路径”问题。差分线从表层换到内层参考平面也变了信号的回流路径需要借助过孔跳转。所以在换层过孔旁边最好放一个地过孔给回流信号提供近距离的桥接路径。地过孔与信号过孔的距离建议控制在信号过孔间距的2倍以内太远了回流路径变长换层处的阻抗不连续会更严重。4.4 用仿真验证差分线的信号质量有条件的情况下等长做完后做一轮仿真验证是很有必要的。ADS是常用的射频和高速仿真工具可以用它建立差分线的S参数模型观察差分回波损耗和插入损耗在频域上判断阻抗连续性是否有问题。另外也可以把PCB导出的模型导入到HyperLynx或者SIwave里做眼图仿真通过眼图的高度和宽度来评估信号质量是否达标。仿真这一块不需要做得很复杂。对于大多数板级设计用软件跑一下“时域反射”TDR曲线就能看到阻抗不连续点在哪里。TDR曲线上的每个凸起或凹陷往往就是过孔、换层、走线宽度变化或者蛇形线绕线间距不当导致的问题。看到TDR曲线上有明显的阻抗跳变点再回到PCB中去找对应位置的走线调整起来就很有针对性了。4.5 一个鲜为人知的小技巧利用约束管理器做“动态”等长检查不管是AD还是Allegro等长检查都不是一次性的。在走线过程中规则管理器是动态更新的。Allegro的Constraint Manager会实时显示每一条差分线的长度和对内误差AD的PCB面板也会显示网络长度信息。我在布线时习惯把约束管理器面板固定在屏幕一侧每次绕完一段线就看一眼长度差这样不会等到最后统一调等长时一次性改动太大。另一个实用技巧是在Allegro中可以把等长约束添加到一个“Match Group”里面然后把误差范围设为0。这个“0”会让工具强制把所有差分对长度做成完全一致虽然实际很难做到但这样设置会让工具在布线时尽量去对齐长度比等到后期再统一处理要高效很多。等绕线基本定型后再把误差调整到规范允许的范围内。这个方法我屡试不爽推荐给在大项目中布线带宽很多的工程师。5. 写在最后我的几点实操体会我刚开始画差分线的时候也曾经为了等长而纠结到半夜。后来做多了才明白等长只是手段真正的目标是保证差分阻抗的连续性和时序的一致性。如果你在绕蛇形线时发现绕得很别扭那很可能是前期的布局和扇出规划就没有给差分线留出充足的空间。这时候与其硬绕不如回到布局阶段重新调整一下器件位置可能效果更好。我个人还有一个实践习惯每画完一组差分线都会用三维视图转一圈重点看一下蛇形线的间距和过孔附近的情况。很多时候软件的状态报告不会告诉你蛇形线那一段的间距其实变了只有亲眼看到走线形态才能发现那些细小的隐患。差分线的学问其实很深但只要你把基础原理理解透把设计规则严格执行到位再配合工具和仿真验证画出一组合格的差分线并不难。希望这篇文章能把一些关键点讲清楚对你实际的布板工作有点帮助。后面如果遇到具体问题也欢迎随时交流我们一起把坑填平。
返回列表