
1. 等长走线到底在解决什么问题做PCB设计的朋友大概率都遇到过这种情况板子打样回来DDR跑不起来或者HDMI花屏又或者千兆网口丢包。排查了一圈电源、阻抗、叠层都没问题最后发现是走线长度不匹配导致的时序偏差。等长走线就是专门治这个毛病的。简单说等长走线就是让一组本该同时到达的信号在PCB上走过的物理路径长度保持一致。为什么要一致因为电信号在铜箔里的传播速度虽然接近光速但终究不是瞬间到达。信号在FR-4板材中的传播速度大约是每纳秒6英寸换算下来每毫米大约0.17纳秒的延迟。如果一组数据线里某根线比其他的长了10毫米那就意味着这根线上的信号比别人晚了将近1.7纳秒到达接收端。对于DDR3-1600来说一个时钟周期才1.25纳秒1.7纳秒的偏差已经超过一个周期了数据根本采不准。所以等长走线的核心目标就一个把同一组信号的走线长度差控制在允许范围内。这个允许范围取决于信号速率和芯片的时序裕量低速信号可能允许几十mil的偏差高速信号可能只允许几个mil。在PADS里做等长走线说难不难说简单也不简单。难的是很多人不知道PADS的等长功能藏在哪里怎么配置参数怎么让软件实时告诉你还差多少。简单的是一旦配置好了剩下的就是体力活——绕线。这篇文章我打算把PADS等长走线从概念到实操完整讲一遍包括规则怎么设、网络怎么分组、绕线怎么绕、怎么验证结果。不管你是用PADS 9.5还是VX系列核心逻辑都一样界面略有差异而已。2. 动手之前先把规则理清楚2.1 哪些网络需要做等长不是所有走线都需要等长。拿到原理图之后第一件事是识别哪些网络属于等长组。常见的等长组包括DDR数据线DQ0-DQ7一组DQ8-DQ15一组以此类推。每组内部等长组与组之间通常不需要等长。DDR地址/命令线ADDR0-ADDR15加上BA、CS、RAS、CAS、WE等通常全部归为一组。差分对USB、HDMI、PCIe、SATA等差分信号对内两根线需要等长对与对之间可能需要等长。时钟线有时候时钟线需要和某一组数据线保持特定长度关系。在PADS Logic里你可以通过给网络添加“类”Class来管理这些分组。具体操作是Setup → Classes然后新建一个类把需要等长的网络加进去。这样做的好处是后面在PCB里设置规则时可以直接对整个类生效不用一根一根去设。注意PADS的Class和Net Group是两个概念。Class主要用于规则分配Net Group用于等长匹配。在VX版本里等长匹配用的是Match Length Group在9.5里叫Length Matching。别搞混了。2.2 确定目标长度和公差分组分好了接下来要确定每组的目标长度和允许公差。目标长度怎么定一般取该组内最长的那根线的长度作为基准或者取一个略大于所有线自然长度的值。公差则取决于信号速率信号类型典型速率建议公差DDR2400-800 Mbps±50 milDDR3800-1600 Mbps±25 milDDR41600-3200 Mbps±10 mil千兆以太网1 Gbps±25 milHDMI 1.43.4 Gbps±5 milUSB 3.05 Gbps±5 mil这些数值是经验参考具体还要看芯片手册里的时序要求。有些芯片会明确告诉你允许的skew是多少皮秒你需要根据传播速度换算成mil。换算公式很简单长度差mil 时间差ps× 传播速度mil/ps。FR-4的内层传播速度大约是6 mil/ps外层微带线大约是7 mil/ps。我个人的习惯是先按芯片手册的要求算出理论公差然后在此基础上留20%的裕量。比如算出来允许±10 mil那我就按±8 mil来设规则。这样即使绕线时有点误差也不会超标。2.3 在PADS中设置等长规则规则设置是等长走线的基础。在PADS Layout或者VX里的PADS Professional中打开Setup → Design Rules然后找到Length Matching这一项。不同版本的入口可能略有不同但逻辑是一样的。具体步骤在Design Rules对话框里选择Net Class或者Net Group。找到你需要设置等长的那一组网络。在Length Matching选项卡里勾选“Enable Length Matching”。设置目标长度Target Length和公差Tolerance。选择匹配方式是按组内最长线自动匹配还是手动指定一个固定值。这里有个细节值得注意PADS允许你设置“基准线”Reference Net。如果你指定了基准线那么组内其他线都会以这根线的长度为基准来匹配。如果不指定PADS会自动取组内最长的线作为基准。我一般倾向于手动指定基准线因为自动取最长线有时候会导致目标长度过大绕线空间不够。实操心得设置规则之前先把所有线大致布通看看自然长度是多少。如果组内最长线和最短线差了500 mil那你硬要把目标长度设成最长线的长度最短的那根就要绕500 mil的蛇形线占用的空间会非常大。这种情况下不如调整布局让走线长度更接近一些再设规则。3. PADS等长走线的核心操作流程3.1 网络分组与Class分配前面提到了用Class来管理等长网络这里展开说一下具体怎么操作。在PADS Layout中Setup → Classes打开类管理器。点击Add新建一个类比如叫“DDR_DQ0_7”。然后在Net列表中把DQ0到DQ7这8根网络勾选进来。为什么要用Class而不是直接选网络因为Class可以统一设置规则包括线宽、间距、过孔类型、等长要求等。如果你有4组DDR数据线每组8根那就是32根线。一根一根设规则会疯掉用Class的话建4个类就搞定了。在VX版本里还有一个更方便的功能叫“Net Group”。Net Group和Class的区别在于Net Group可以跨Class组合网络。比如你的DQ0-DQ7分布在两个不同的Class里因为线宽要求不同但等长要求是一样的这时候就可以建一个Net Group把它们合在一起做等长匹配。3.2 基准线的选择与目标长度计算基准线的选择有讲究。理想情况下基准线应该是组内走线路径最自然、最不容易绕线的那一根。通常我会选中间位置的那根线比如DQ3或DQ4因为它在物理布局上往往是最短的以它为基准的话其他线只需要适当绕线就能匹配。目标长度的计算方式如果以基准线为准目标长度 基准线实际长度如果手动指定目标长度 你设定的值必须大于等于组内最长线的自然长度在PADS里查看走线长度很简单选中一根线按CtrlQ或者右键 → Properties就能看到Length字段。也可以打开View → Spreadsheet在Net Length选项卡里看到所有网络的长度列表。我一般会先把所有线布通然后导出长度列表看看最长和最短差多少。如果差距在可接受范围内比如200 mil以内就直接以最长线为目标长度。如果差距太大就要考虑调整布局了。3.3 蛇形绕线的参数设置蛇形绕线是等长走线的主要手段。PADS提供了自动绕线和手动绕线两种方式。自动绕线在VX版本里比较好用9.5版本的自动绕线功能相对弱一些更多时候需要手动操作。手动绕线的关键参数振幅Amplitude蛇形线上下摆动的幅度。太小的话同样的长度需要更多的弯折占用更多空间太大的话可能和其他走线产生串扰。一般建议振幅不小于3倍线宽。间距Gap相邻两段蛇形线之间的距离。这个参数直接影响串扰。间距越小串扰越大。一般建议间距不小于4倍线宽。拐角角度45度还是90度高速信号建议用45度或圆弧拐角减少阻抗突变。在PADS Layout中走线时按右键选择“Add Accordion”或者“Route with Accordion”就可以进入蛇形绕线模式。然后通过快捷键调整振幅和间距。具体快捷键可以在Options → Keyboard and Mouse里自定义默认的通常是Tab键切换绕线模式/-键调整振幅[/]键调整间距注意蛇形绕线的总长度不是简单的“直线长度蛇形段长度”。每个拐角都会增加额外的长度而且拐角处的阻抗变化会影响信号质量。所以绕线完成后一定要用PADS的长度检查功能验证实际长度而不是凭感觉估算。3.4 实时长度监控与调整PADS有一个非常实用的功能实时长度显示。在走线过程中软件会在状态栏或者走线旁边显示当前网络的长度以及和目标长度的差值。这个功能在VX版本里默认开启9.5版本需要在Options → Global → General里勾选“Show Net Length”。我通常会把长度显示设置为“显示差值”模式这样走线的时候一眼就能看到还差多少mil。差值为正说明走长了差值为负说明还不够。绕线的时候盯着这个数字到了目标值附近就停止绕线非常直观。如果组内有多根线需要绕建议一根一根来绕完一根检查一根。不要同时绕多根否则容易搞混。绕线的顺序也有讲究先绕最短的线因为它需要绕的量最大占用的空间最多。如果先绕长的线可能会把空间占掉短的线就没地方绕了。4. 实操中容易踩的坑与排查方法4.1 绕线空间不够怎么办这是最常见的问题。布局阶段没考虑等长绕线的空间需求布线到一半发现线绕不开。解决办法有几个调整布局把相关器件挪一挪给绕线留出空间。这是最根本的解决办法但代价是可能要重新布线。减小振幅和间距在可接受的信号质量范围内适当减小蛇形线的振幅和间距可以在有限空间内绕出更长的线。但要注意串扰风险。换层绕线如果顶层空间不够可以打孔到内层绕线。但过孔会引入额外的长度和阻抗不连续需要重新计算目标长度。接受更大的公差如果实在绕不开和硬件工程师确认一下看看能不能放宽公差要求。有时候芯片的时序裕量比我们想象的要大。我个人的经验是在布局阶段就要预留绕线空间。一般来说等长组走线区域需要预留至少3倍线宽的额外空间用于绕线。如果板子密度很高可以考虑用“T型拓扑”或者“Fly-by拓扑”来减少等长匹配的难度。4.2 长度对了但信号还是有问题有时候长度匹配得很好但信号质量依然不达标。这时候要检查以下几个方面阻抗是否连续蛇形线的拐角、过孔、线宽变化都会导致阻抗不连续。用PADS的阻抗计算工具检查一下关键位置的阻抗。串扰是否超标蛇形线之间的间距太小会导致串扰。用PADS的串扰分析功能检查一下。参考平面是否完整走线下方的参考平面如果有裂缝或者被分割会导致回流路径不连续影响信号完整性。过孔数量是否一致同一组信号如果有的线打了过孔有的没打过孔带来的额外延迟和阻抗变化会导致时序偏差。实操心得等长走线只是信号完整性的一部分。长度匹配了不代表信号就一定好。阻抗、串扰、参考平面、过孔这些因素都要综合考虑。我见过太多人只盯着长度结果板子回来还是跑不起来。4.3 PADS版本差异导致的规则丢失PADS 9.5和VX系列在等长规则的存储方式上有差异。有时候从9.5升级到VX或者从VX导出到9.5等长规则会丢失。解决办法是在导出之前把等长规则导出为独立的规则文件.rul然后在目标版本里导入。或者在目标版本里重新设置一遍规则。虽然麻烦但最保险。另外PADS和AD之间的文件转换也经常出问题。如果你需要把PADS的PCB导入到AD里等长规则基本上带不过去需要在AD里重新设置。反过来也一样。4.4 常见问题速查表问题现象可能原因排查方法解决方案长度显示不更新实时长度功能未开启检查Options → Global → General勾选Show Net Length绕线时无法进入蛇形模式未选择正确的走线模式右键菜单查看选择Add Accordion模式目标长度设不了目标值小于最长线自然长度查看Net Length列表调整目标值或重新布局绕线后长度超标拐角长度未计算在内用Length Check验证重新绕线或调整参数规则保存后丢失版本兼容问题检查规则文件导出/导入规则文件差分对等长不生效差分对未正确设置检查Diff Pair设置重新分配差分对5. 提高效率的快捷键与脚本技巧5.1 必会的PADS快捷键PADS的快捷键体系比较独特很多操作如果不用快捷键效率会低很多。以下是我在等长走线时最常用的几个F3切换走线模式普通走线/蛇形走线CtrlQ查看选中对象的属性包括长度CtrlE移动选中对象CtrlR旋转选中对象Tab在走线过程中切换绕线参数ShiftZ取消当前走线Backspace撤销上一步走线操作这些快捷键可以在Options → Keyboard and Mouse里自定义。我建议把常用的几个改成自己顺手的键位能省不少时间。5.2 用脚本批量处理等长规则PADS支持VBScript和JavaScript脚本。如果你有很多组等长网络需要设置规则写个脚本批量处理会快很多。比如下面这个VBScript示例可以批量设置指定Class的等长规则 批量设置等长规则示例 Dim app Set app GetObject(, PADS.Application) Dim doc Set doc app.ActiveDocument 定义需要设置的Class和对应的目标长度、公差 Dim classNames(2) classNames(0) DDR_DQ0_7 classNames(1) DDR_DQ8_15 classNames(2) DDR_ADDR Dim targetLengths(2) targetLengths(0) 2500 targetLengths(1) 2500 targetLengths(2) 3200 Dim tolerances(2) tolerances(0) 25 tolerances(1) 25 tolerances(2) 50 Dim i For i 0 To 2 Dim cls Set cls doc.Classes(classNames(i)) cls.LengthMatching.Enabled True cls.LengthMatching.TargetLength targetLengths(i) cls.LengthMatching.Tolerance tolerances(i) Next MsgBox 等长规则设置完成这个脚本的逻辑很简单遍历指定的Class设置目标长度和公差。实际使用的时候你需要根据自己板子的实际情况修改Class名称和数值。注意PADS的脚本接口在不同版本里可能有差异。VX 2.x和9.5的API不完全一样。用之前先在测试文件上跑一遍确认没问题再用到正式项目里。5.3 利用Excel辅助计算长度有时候我们需要在Excel里做一些长度计算比如根据时序要求换算公差或者对比不同组的长度。PADS可以导出网络长度到文本文件然后导入Excel处理。导出方法View → Spreadsheet → Net Length然后右键 → Export保存为CSV格式。在Excel里打开后可以用公式计算差值、排序、筛选。我常用的一个公式是计算传播延迟长度/6结果单位是皮秒假设内层走线。如果是外层微带线就用长度/7。这个公式虽然粗略但对于快速估算够用了。6. 从等长走线延伸到信号完整性整体考虑等长走线只是信号完整性设计中的一个环节。实际项目中我见过太多人把等长做得漂漂亮亮结果板子回来还是各种问题。原因往往在于只关注了长度忽略了其他同样重要的因素。阻抗匹配是第一个要关注的。等长走线如果阻抗不连续信号在阻抗突变点会产生反射反射会导致波形畸变即使长度匹配了接收端也可能采到错误的数据。PADS的阻抗计算工具可以帮你检查走线阻抗但前提是叠层参数要设置正确。串扰控制是第二个要关注的。蛇形绕线天然容易产生串扰因为相邻线段之间的距离很近。控制串扰的方法包括增大线间距、减小并行长度、在蛇形线之间加地线隔离。PADS的串扰分析功能可以帮你评估串扰是否超标。参考平面完整性是第三个要关注的。高速信号的返回电流总是走阻抗最小的路径通常是走线正下方的参考平面。如果参考平面被分割或者有裂缝返回电流就要绕路导致环路面积增大辐射和串扰都会增加。在PADS里可以用平面层检查工具查看参考平面的完整性。过孔设计是第四个要关注的。过孔会引入额外的电感导致阻抗不连续。同一组信号如果过孔数量不一致还会导致延迟差异。建议同一组信号尽量保持相同的过孔数量如果做不到就要在长度计算时把过孔的延迟考虑进去。一个标准过孔的延迟大约是1-2皮秒相当于6-12 mil的走线长度。实操心得我一般会在布线完成后做一次完整的信号完整性检查包括长度、阻抗、串扰、参考平面、过孔。PADS的Verify Design功能可以自动检查大部分项目但有些细节还是需要人工确认。比如蛇形线的拐角是否平滑、差分对是否等间距、地过孔是否足够等。最后再说一个容易被忽略的点等长走线的验证。很多人绕完线就完了没有做最终的验证。PADS提供了Length Check功能可以检查所有等长组是否满足规则。但要注意这个功能检查的是走线的几何长度不包括过孔的延迟。如果你的走线经过了过孔实际延迟会比几何长度对应的延迟要大。所以验证的时候要把过孔的影响考虑进去。我个人的习惯是在PADS里做完Length Check之后再手动抽查几根线用CtrlQ查看实际长度确认和规则要求一致。如果板子上有多个等长组建议做一个检查清单逐组确认避免遗漏。等长走线这件事说到底就是细心加耐心。规则设好了剩下的就是一根一根绕、一根一根查。没有什么特别高深的技巧但每一个细节都可能影响最终结果。希望这篇内容能帮你在下次做等长走线的时候少走一些弯路。