
差分等长线是高速数字设计里绕不开的一道坎。很多刚接触 Allegro 17.4 的朋友原理图画得挺顺一到 PCB 阶段就卡壳差分对怎么建、规则怎么设、等长怎么绕、绕完怎么验证每一步都像在拆盲盒。我这些年带过不少新人发现大家卡住的地方高度重合不是软件不会用而是不清楚为什么要这么做。这篇内容就把从原理图到 PCB 的完整链路拆开讲重点放在差分对的创建逻辑、约束管理器的配置思路、以及等长绕线的实操细节上。不管你是刚上手 Allegro 17.4 的layout新手还是从其他 EDA 工具转过来的老手都能从中找到可以直接复用的操作路径和判断依据。1. 差分信号在原理图阶段就要埋好的伏笔1.1 差分对不是PCB阶段才存在的东西很多人以为差分对是到了 PCB 阶段才需要处理的事情原理图随便连一连就行。这个认知偏差会导致后面大量返工。差分对的本质是两条走线在电气特性上保持对称而这种对称性从原理图阶段就应该被标识出来。Allegro 17.4 的约束管理器之所以能自动识别差分对靠的就是原理图阶段传递过来的网络命名规则或者差分对属性。具体来说在 OrCAD Capture 里画原理图时差分信号通常有两种命名习惯。一种是后缀法比如USB_DP和USB_DN或者CLK_P和CLK_N另一种是前缀法比如TX和TX-。这两种命名方式本身没有优劣之分关键是整个项目要统一。我见过一个项目里前半部分用_P/_N后半部分用/-结果约束管理器里差分对识别得乱七八糟手动补建差分对花了大半天。在 Capture 里你可以通过给网络添加DIFF_PAIR属性来显式声明差分对。操作路径是选中两条网络右键选择 Edit Properties在属性编辑器里添加一个名为DIFF_PAIR的属性值可以填差分对的名称。这样做的好处是即使网络命名不太规范约束管理器也能通过这个属性准确识别。不过说实话大多数团队还是靠命名规则来识别因为这样最省事不需要额外维护属性。提示如果你的项目里差分对数量超过二十对强烈建议在原理图阶段就用统一的命名规则并且在项目启动文档里写清楚。后期靠人工在约束管理器里补建差分对出错概率会随着数量增加而急剧上升。1.2 原理图封装与引脚映射的对称性检查差分信号对引脚映射的对称性有要求这一点在原理图阶段就要检查。举个例子一个差分接收器芯片它的正端和负端在封装上的位置可能并不对称如果原理图符号的引脚定义和实际封装的引脚功能对不上到了 PCB 阶段就会发现差分对的两条线要跨很远才能连到芯片上这时候再想等长就非常困难了。我的习惯是在原理图阶段就把差分对相关的芯片引脚单独拉出来做一个检查清单。具体做法是在 Capture 里选中差分对相关的元件查看其引脚属性确认正负端引脚的电气类型和实际器件手册一致。特别是那些差分对数量多的芯片比如 HDMI 接收器或者 PCIe 控制器一个芯片上可能有十几对差分信号引脚映射错一个后面就要飞线。另外原理图符号的引脚排列也会影响 PCB 布局的便利性。如果原理图符号把差分对的引脚画得东一个西一个PCB 工程师在布局时就要花更多精力去理清对应关系。我通常会在建库阶段就把差分对引脚在符号上相邻放置这样布局时一眼就能看出哪些引脚是成对的。1.3 从原理图到PCB的网络传递验证原理图设计完成后导出网表到 Allegro 之前有一个步骤经常被忽略网络传递验证。具体来说就是在 Capture 里执行 Design Rules Check确保没有未连接的网络、没有重复的网络名、没有悬空的差分对引脚。这些检查看起来基础但实际项目中因为这些问题导致网表导入失败的情况并不少见。网表导入 Allegro 之后第一件事不是急着布局而是打开约束管理器查看差分对是否被正确识别。在 Allegro 17.4 里约束管理器的路径是 Setup Constraints Constraint Manager。在 Physical 或者 Spacing 工作表下展开 Net 分组看看有没有出现 Differential Pair 的层级。如果差分对没有被识别需要回到原理图检查命名规则或者属性设置。我个人的经验是在网表导入后立即做一次差分对识别检查比等到布局完成后再发现要省事得多。因为一旦开始布局再回头改原理图整个流程就要重来一遍。这个检查花不了五分钟但能避免后面几个小时的返工。2. 约束管理器里差分对的创建与规则配置2.1 差分对的两种创建方式及其适用场景在 Allegro 17.4 的约束管理器里创建差分对有两种方式自动识别和手动创建。自动识别依赖于网络命名规则在 Constraint Manager 的 Physical 工作表下选择 Objects Create Differential Pair然后选择 Auto Generate软件会根据你设定的命名规则自动匹配差分对。手动创建则是选中两条网络直接指定它们为一对差分信号。自动识别适合差分对数量多、命名规范的项目。比如一个 DDR4 接口可能有几十对差分信号手动创建效率太低。但自动识别的前提是命名规则要统一而且要在约束管理器的设置里正确配置命名规则。在 Allegro 17.4 里命名规则的配置路径是 Setup Constraints Constraint Manager然后在 Tools Options 里设置差分对的前缀和后缀规则。手动创建适合差分对数量少、或者命名不太规范的项目。比如一个小的转接板只有两三对差分信号手动创建反而更快。手动创建的操作是在约束管理器里选中两条网络右键选择 Create Differential Pair然后给差分对命名。这种方式的好处是灵活不受命名规则限制缺点是数量多了容易出错。我通常的做法是项目开始时先用自动识别把能识别的都识别出来剩下的用手动补建。这样既保证了效率又不会遗漏。补建完成后我会在约束管理器里导出差分对列表和原理图里的差分对清单做一次交叉核对确保没有遗漏。2.2 差分对的电气约束参数怎么定差分对的约束参数主要分两类物理约束和间距约束。物理约束包括线宽、线间距、过孔类型等间距约束包括差分对内间距、差分对间间距、与其他网络的间距等。这些参数的设定不是拍脑袋决定的而是要根据叠层结构、阻抗要求和制造能力来综合确定。先说线宽和线间距。差分对的特性阻抗通常是 90 欧姆或者 100 欧姆具体取决于接口标准。比如 USB 2.0 的差分阻抗是 90 欧姆PCIe 是 85 欧姆HDMI 是 100 欧姆。在确定了目标阻抗之后需要根据叠层结构来计算线宽和线间距。Allegro 17.4 自带的阻抗计算工具在 Setup Cross-section 里你可以输入叠层参数然后调整线宽和间距直到计算出的阻抗接近目标值。这里有一个常见的误区很多人以为差分对的线宽和间距是固定的其实不然。不同的叠层结构、不同的铜厚、不同的介质材料对应的线宽和间距都不一样。我见过一个项目PCB 工程师直接照搬了上一个项目的线宽参数结果因为叠层变了阻抗偏了十几欧姆信号完整性测试直接不过。再说差分对内间距。这个参数决定了差分对两条线之间的耦合程度。间距越小耦合越强差分阻抗越低。但间距太小会增加制造难度而且可能导致串扰问题。通常的做法是在满足阻抗要求的前提下尽量保持适中的间距。具体的数值需要和 PCB 制造商确认他们的最小线间距能力。差分对间间距也是一个需要关注的参数。如果两个差分对靠得太近相互之间的串扰会影响信号质量。通常建议差分对间的间距至少是差分对内间距的三倍以上。这个规则在约束管理器里可以通过 Spacing 工作表来设置。2.3 等长规则的目标值与公差设定等长规则是差分对约束里最核心的部分。等长分为两种差分对内部等长和差分对之间的等长。差分对内部等长是指正负两条线的长度差要控制在一定范围内差分对之间的等长是指同一组差分信号之间的长度差要控制在一定范围内。差分对内部等长的目标值通常是 5 mil 到 10 mil具体取决于信号速率。速率越高允许的长度差越小。比如 USB 2.0 的差分对内部等长通常控制在 5 mil 以内而 PCIe Gen3 可能要求控制在 2 mil 以内。这个公差在约束管理器的 Relative Propagation Delay 工作表里设置。差分对之间的等长规则稍微复杂一些。以 DDR4 为例数据组和地址组之间的等长要求不同同一组内的不同字节通道之间也有等长要求。这些规则需要在约束管理器里建立 Match Group然后把相关的差分对或者网络加入到同一个组里设置目标值和公差。这里有一个实操中的坑等长规则的目标值不是随便定的而是要以某个基准网络为参考。比如 DDR4 的数据组通常以时钟信号或者某个特定的数据线为基准其他信号相对于这个基准做等长。如果基准选错了整个组的等长都会出问题。我的习惯是在设置等长规则之前先和硬件工程师确认基准信号是哪一个然后在约束管理器里明确指定。注意等长规则设置完成后一定要在约束管理器里执行一次规则检查确保没有冲突或者遗漏。Allegro 17.4 的约束管理器有 Analysis Analysis Mode 功能可以快速检查规则的一致性。3. 布局阶段差分对的摆放策略3.1 差分对布局的基本原则布局阶段对差分对的影响非常大甚至可以说布局决定了等长绕线的难度。差分对布局的核心原则是尽量让正负两条线从源端到接收端的路径保持对称避免出现一条线绕大弯、另一条线走直线的情况。具体来说在摆放差分对相关的元件时要尽量让差分对的源端和接收端靠近减少走线长度。如果源端和接收端距离很远等长绕线的空间就会很紧张。我见过一个项目USB 连接器放在板子的一角而 USB 控制器放在对角差分对要走将近 10 厘米等长绕线绕得密密麻麻最后阻抗一致性很差。另外差分对的过孔也要尽量对称。如果正端打了一个过孔负端也要在相近的位置打一个过孔避免一条线走顶层、另一条线走底层的情况。过孔的不对称会引入额外的寄生参数影响差分信号的完整性。在 Allegro 17.4 里布局阶段可以使用 Placement Edit 模式下的对齐和等间距功能快速把差分对相关的元件摆放整齐。具体操作是选中需要对齐的元件右键选择 Align Components然后选择对齐方式。这个功能在摆放多个差分对通道时特别有用比如 HDMI 的四个 TMDS 通道可以快速对齐。3.2 差分对与连接器的扇出处理连接器附近的扇出是差分对布局的一个难点。连接器的引脚间距通常比较小差分对从连接器扇出时很容易出现一条线要绕到另一条线外面的情况。这时候需要根据连接器的引脚排列选择合适的扇出方式。常见的扇出方式有两种直接扇出和交叉扇出。直接扇出是指正负两条线直接从引脚引出不交叉交叉扇出是指正负两条线在扇出时交换位置。选择哪种方式取决于连接器的引脚定义和 PCB 的布局方向。如果连接器的正负引脚是相邻的而且走线方向一致直接扇出就可以如果正负引脚之间隔了其他信号或者走线方向需要调整可能就需要交叉扇出。在 Allegro 17.4 里扇出操作可以通过 Fanout by Pick 或者 Interactive Fanout 来完成。我通常会用 Interactive Fanout因为可以手动控制扇出的方向和过孔的位置。扇出完成后要检查差分对的两条线是否保持了对称过孔是否成对出现。这里有一个经验连接器附近的扇出区域尽量留出足够的空间给等长绕线。如果扇出区域太拥挤后面等长绕线就没有空间了。我的做法是在布局阶段就把连接器附近的区域预留出来不要放其他元件给差分对留出足够的走线通道。3.3 电源和地平面在差分对布局中的处理差分对布局时电源和地平面的处理也很关键。差分信号通常需要参考平面参考平面的完整性直接影响差分阻抗的稳定性。如果差分对走线下方的参考平面被分割或者有空洞差分阻抗就会发生变化导致信号反射。在布局阶段要确保差分对走线区域下方的参考平面是完整的。具体来说如果差分对走在顶层那么它下方的第二层应该是完整的地平面如果差分对走在内层那么它相邻的上下两层都应该是完整的平面。在 Allegro 17.4 里可以通过 Setup Cross-section 查看叠层结构确认参考平面的位置。另外差分对的过孔也会影响参考平面的完整性。过孔会在参考平面上形成反焊盘如果反焊盘太大会破坏参考平面的连续性。在 Allegro 17.4 里可以通过约束管理器设置过孔的反焊盘尺寸尽量减小对参考平面的影响。我个人的经验是在布局阶段就把差分对走线区域的平面分割规划好不要等到布线阶段再调整。因为平面分割一旦确定后面改起来很麻烦而且容易引入新的问题。4. 布线阶段差分对的走线与等长绕制4.1 差分对走线的基本操作与注意事项在 Allegro 17.4 里差分对走线有两种方式一种是使用 Differential Pair Routing 命令另一种是分别走两条线然后手动调整。推荐使用 Differential Pair Routing因为这样可以保证两条线始终成对走线间距保持一致。Differential Pair Routing 的操作路径是Route Differential Pair Routing然后在 Options 面板里设置线宽、间距、过孔等参数。走线时Allegro 会自动保持两条线的间距并且在转弯时自动调整两条线的长度尽量保持等长。走线过程中有几个注意事项。第一尽量避免在差分对上打过孔因为过孔会引入阻抗不连续。如果必须打过孔要确保正负两条线在同一位置打过孔而且过孔的类型和尺寸要一致。第二差分对的转弯要尽量平滑避免直角转弯。直角转弯会导致阻抗突变影响信号质量。通常建议使用 45 度角或者圆弧转弯。第三差分对走线要尽量短走线越长损耗越大等长绕线的难度也越大。在 Allegro 17.4 里差分对走线的间距可以通过 Options 面板实时调整。如果发现某段走线的间距不合适可以在走线过程中按快捷键调整。我通常会把常用的线宽和间距设置成快捷键这样走线时切换比较方便。4.2 等长绕线的时机与绕线方式选择等长绕线是差分对布线的最后一步也是最考验耐心的一步。绕线的时机很关键太早绕线后面布局调整可能导致绕线白做太晚绕线空间可能不够。我的经验是在布局基本确定、差分对走线完成百分之八十左右的时候开始绕线这样既有足够的空间又不会因为布局调整而返工。等长绕线的方式主要有三种蛇形绕线、波浪绕线和螺旋绕线。蛇形绕线是最常用的方式适合在直线段上绕线波浪绕线适合在曲线段上绕线螺旋绕线适合在空间非常紧张的区域使用。在 Allegro 17.4 里蛇形绕线可以通过 Delay Tune 命令来实现操作路径是 Route Delay Tune。蛇形绕线的参数包括绕线幅度、绕线间距和绕线角度。绕线幅度是指蛇形线凸起的高度绕线间距是指相邻两段蛇形线之间的距离绕线角度是指蛇形线的转折角度。这些参数需要根据实际空间和信号要求来调整。一般来说绕线幅度越大单位长度内增加的延迟越多绕线间距越小占用的空间越少但串扰风险越大。这里有一个实操中的技巧在绕线之前先用 Allegro 的 Show Element 命令查看差分对两条线的当前长度计算出需要补偿的长度差。然后在绕线时通过 Delay Tune 的实时长度显示控制绕线量。Allegro 17.4 的 Delay Tune 命令会在走线时实时显示当前长度和目标长度非常方便。4.3 等长绕线的常见问题与修正方法等长绕线过程中最常见的问题是绕线后阻抗不连续。蛇形绕线会增加走线的寄生电容和电感导致阻抗下降。如果绕线过于密集阻抗下降会很明显影响信号完整性。解决方法是控制绕线的密度尽量保持绕线间距大于三倍的线宽。另一个常见问题是绕线区域串扰。如果蛇形绕线和其他信号靠得太近相互之间的串扰会影响信号质量。解决方法是保持绕线区域和其他信号的安全距离或者在绕线区域周围增加地过孔进行隔离。还有一个问题是绕线后长度不准确。有时候绕线完成后发现长度差还是超标需要反复调整。这种情况通常是因为绕线时没有考虑到过孔的长度或者绕线区域的长度计算有误。解决方法是在绕线前把所有过孔的长度也计入总长度并且在绕线后重新测量一次实际长度。在 Allegro 17.4 里可以通过 Constraint Manager 的 Relative Propagation Delay 工作表实时查看等长状态。如果某个差分对的长度差超标工作表里会显示红色标记。我通常会在绕线完成后打开这个工作表做一次全面检查确保所有差分对都满足等长要求。提示等长绕线完成后建议做一次信号完整性仿真验证绕线后的阻抗和串扰是否满足要求。Allegro 17.4 可以导出走线参数到仿真工具或者使用内置的 Sigrity 工具进行快速检查。5. 后处理与验证确保差分对真正达标5.1 DRC检查中的差分对相关规则布线完成后DRC 检查是必不可少的一步。Allegro 17.4 的 DRC 检查可以针对差分对设置专门的规则比如差分对内间距检查、差分对间间距检查、等长检查等。在 Constraint Manager 里设置好这些规则后执行 Tools Quick Reports DRC Report就可以生成 DRC 报告。差分对相关的 DRC 错误通常有几类间距违规、等长违规、过孔违规。间距违规是指差分对与其他网络或者差分对之间的距离小于设定值等长违规是指差分对的长度差超过了设定值过孔违规是指差分对的过孔不符合规则比如过孔数量不一致或者过孔类型不匹配。处理 DRC 错误时要区分哪些是必须修的哪些是可以忽略的。比如等长违规通常必须修因为直接影响信号质量而某些间距违规如果是在非敏感区域可能可以忽略。我的习惯是先把所有 DRC 错误分类然后按照严重程度逐个处理。5.2 差分对长度与阻抗的最终验证DRC 检查通过后还需要对差分对的长度和阻抗做最终验证。长度验证可以通过 Constraint Manager 的 Relative Propagation Delay 工作表来完成查看每个差分对的实际长度和目标长度是否一致。阻抗验证则需要通过阻抗计算工具或者仿真工具来完成。在 Allegro 17.4 里可以通过 Tools Reports Differential Pair Report 生成差分对报告里面包含了每个差分对的长度、间距、过孔数量等信息。这个报告可以用来做最终的设计归档也可以用来和 PCB 制造商沟通。阻抗验证方面如果项目要求严格建议做一次 TDR 仿真验证差分对的阻抗是否在目标范围内。Allegro 17.4 可以导出走线参数到 Sigrity 或者其他的仿真工具进行 TDR 仿真。如果项目要求不那么严格也可以通过阻抗计算工具做一次理论验证。5.3 输出制造文件时的差分对注意事项输出制造文件时差分对相关的信息需要特别注意。首先在输出 Gerber 文件时要确保差分对的走线层和阻焊层正确输出。其次在输出钻孔文件时要确保差分对的过孔信息完整。最后在输出阻抗报告时要把差分对的阻抗要求明确标注出来方便 PCB 制造商控制阻抗。在 Allegro 17.4 里输出 Gerber 文件的路径是 Manufacture Artwork输出钻孔文件的路径是 Manufacture NC Drill Tape。输出之前建议先做一次 Artwork 预览检查差分对的走线是否完整有没有缺失或者多余的部分。另外和 PCB 制造商沟通时要把差分对的阻抗要求、线宽间距要求、叠层结构等信息明确告知。我通常会在制造文件里附一份阻抗控制说明把每个差分对的阻抗要求、参考层、线宽间距都列出来避免制造商理解偏差。6. 几个容易踩坑的细节与个人经验6.1 差分对命名规则不统一导致的识别失败前面提到过命名规则的重要性这里再展开说一下。我遇到过最典型的情况是原理图里差分对的命名用了_P/_N后缀但约束管理器里设置的识别规则是/-后缀结果自动识别完全失效。更麻烦的是有些网络名里包含了_P但不是差分对比如VCC_P自动识别时会被误判。解决方法是在设置自动识别规则时尽量使用更精确的匹配模式。Allegro 17.4 的约束管理器支持正则表达式可以用正则表达式来精确匹配差分对的命名。比如用.*_P$来匹配所有以_P结尾的网络用.*_N$来匹配所有以_N结尾的网络。这样可以避免误判。另外如果项目里差分对的命名规则确实不统一建议在原理图阶段就统一改过来而不是在约束管理器里手动补建。因为手动补建不仅效率低而且容易遗漏。6.2 等长绕线时忽略过孔长度导致的误差过孔长度是等长绕线时最容易忽略的因素之一。一个过孔的长度通常在 1 到 2 毫米之间对于高速信号来说这个长度对应的延迟是不可忽略的。如果差分对的一条线打了两个过孔另一条线只打了一个过孔那么两条线的实际长度差就会包含过孔长度的差异。解决方法是在计算等长目标值时把过孔长度也计入总长度。Allegro 17.4 的约束管理器可以设置过孔的长度参数在计算等长时会自动把过孔长度计入。具体设置路径是 Setup Constraints Constraint Manager在 Physical 工作表下设置过孔的 Z-axis Delay。我个人的习惯是在布局阶段就尽量让差分对的过孔数量保持一致避免因为过孔数量不同导致长度差异。如果确实无法避免就在等长绕线时把过孔长度的差异补偿进去。6.3 绕线区域空间不足时的处理策略绕线区域空间不足是 layout 工程师经常遇到的问题。有时候差分对走线到了最后发现剩余空间不够绕线长度差怎么也补不回来。这时候有几个处理策略。第一个策略是调整布局把差分对的源端和接收端拉近一些减少走线长度。这个策略最有效但可能需要重新布局工作量较大。第二个策略是改变绕线方式比如从蛇形绕线改为螺旋绕线螺旋绕线在相同空间内可以增加更多的长度。第三个策略是调整叠层把差分对走到内层利用内层的空间绕线。第四个策略是和硬件工程师沟通看能否放宽等长公差。我通常优先考虑第一个策略因为布局调整虽然麻烦但效果最好。如果布局实在无法调整再考虑其他策略。这里要提醒的是不要为了绕线而绕线把绕线区域搞得过于密集那样反而会影响信号质量。6.4 差分对与单端信号的混合布线处理实际项目中差分对往往不是孤立存在的周围还有很多单端信号。差分对和单端信号混合布线时需要注意几点。第一差分对和单端信号之间要保持足够的间距避免串扰。第二差分对的参考平面要完整不要被单端信号的走线分割。第三差分对的过孔不要和单端信号的过孔靠得太近避免相互干扰。在 Allegro 17.4 里可以通过约束管理器设置差分对和单端信号之间的间距规则。具体路径是 Setup Constraints Constraint Manager在 Spacing 工作表下设置不同网络类之间的间距。我通常会把差分对单独设为一个网络类然后设置它和其他网络类之间的间距规则。另外在布局阶段就要考虑差分对和单端信号的相对位置尽量把差分对走在干扰较小的区域。如果差分对必须经过噪声较大的区域可以考虑在差分对周围增加地过孔进行屏蔽。6.5 从Allegro 17.4升级到更高版本时的差分对迁移虽然这篇内容主要讲 Allegro 17.4但很多朋友可能会遇到从 17.4 升级到更高版本的情况。差分对相关的设置在版本迁移时需要注意几点。第一约束管理器的规则文件格式可能不同需要重新导入或者转换。第二差分对的自动识别规则可能需要重新配置。第三等长绕线的算法可能有变化绕线效果可能不同。我的建议是在升级之前先把 17.4 的约束管理器规则导出为文本文件然后在更高版本里重新导入。导入后做一次全面的 DRC 检查确保差分对的规则没有丢失或者错乱。另外升级后建议先做一个小的测试项目验证差分对的识别、走线、等长绕线等功能是否正常再迁移正式项目。7. 写在最后的几点实操体会差分等长线的处理说到底是一个对称性的问题。从原理图的命名到布局的摆放到布线的走线再到等长绕线每一步都在追求正负两条线的对称。理解了这一点很多操作上的选择就变得清晰了。我在实际项目中最大的体会是差分对的问题往往不是出在布线阶段而是出在更早的阶段。原理图命名不规范、布局不合理、约束设置不完整这些问题到了布线阶段就会集中爆发。所以与其在布线阶段花大量时间绕线不如在前期把基础打好。另外工具只是工具Allegro 17.4 的功能再强大也需要使用者理解背后的原理。比如等长绕线软件可以自动帮你绕但绕得好不好、会不会影响信号质量还是要靠人来判断。多做一些仿真验证多和硬件工程师沟通比单纯依赖软件检查要靠谱得多。最后分享一个小技巧在 Allegro 17.4 里可以把常用的差分对约束设置保存为模板下次新建项目时直接导入。这样不仅省时间还能保证不同项目的约束设置保持一致。模板的保存路径是 Constraint Manager 的 File Export Constraints导入时选择 File Import Constraints 即可。