ARTICLE DETAIL

资讯详情

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

Allegro差分对设置全攻略:从原理参数到实战排查

Allegro差分对设置全攻略:从原理参数到实战排查 前几天一个同事拿着板子来找我说USB差分对走线看起来没什么问题但设备接上去就是不稳定时好时坏。我打开Allegro看了一眼第一句话就问他你这差分对的约束规则建了吗他愣了一下说不就是两根线一起走吗这其实就是很多PCB工程师在Allegro里对差分对设置的误区——把差分对布线当成“两根线并排拉一拉”而忽略了Allegro中差分对设置背后真正在管理的那些电气和物理规则。这篇文章就围绕Allegro中差分对设置这件事从原理、参数、实操到问题排查完整过一遍。适合正在学习Cadence Allegro的初学者也适合从AD转过来的工程师以及那些已经用了很久Allegro但一直在“用个大概”的Layout工程师。我会把为什么这么设、参数怎么定、操作怎么做、坑在哪里一次讲透。1. 先把差分对这件事想明白1.1 差分信号为什么能抗干扰理解Allegro里差分对设置首先得理解差分信号本身。差分传输用两根线传送一个信号一根叫正端P一根叫负端N接收端看的是两根线上电压的差值。假设发送端输出P1.2V、N0.8V接收端看到的是0.4V这个差值反过来P0.8V、N1.2V差值就是-0.4V。电压差的正负决定了逻辑0和1。抗干扰的原理在于外部噪声比如隔壁走线串扰、电源噪声通常会同时耦合到这两根线上在两根线上形成几乎相同的电压偏移。因为是看差值这个共模噪声就被自然抵消掉了。这就是差分信号在高速接口里称王称霸的根本原因。用生活类比来解释你和你朋友一人拿一个桶抬水水位差代表信号走在坑坑洼洼的路上两个桶同时被颠簸抬高或降低但你们关心的始终是两桶之间的水位差路面颠簸不影响这个差值。所以Allegro里差分对设置的核心目标就很清楚了保证两根线在传输路径上维持这种“差值”关系具体落到设计规则上就是两条线要尽量靠近耦合长度要尽量相等等长阻抗要可控线宽线距决定避免干扰破坏差值。1.2 Allegro里差分对设置到底管什么很多工程师以为差分对设置就是“定义一个网络对”其实Allegro里差分对设置管的是一个完整规则链电气规则对内等长容差Tolerance、未耦合长度Uncoupled Length、总长上限物理规则线宽、线距、阻抗控制相关的物理参数布线行为走线时两条线联动、换层时双过孔、蛇形等长调整等在Allegro的约束管理器Constraint Manager里差分对不是简单地把两个Net组合在一起而是创建了一个新的约束对象——差分对Differential Pair。这个对象同时继承了电气约束和物理约束并且布线工具会识别它进入差分对布线模式后自动联动。1.3 差分对和普通网络的区别普通信号网络在Allegro里就是一个Net比如一根SPI时钟线约束管理器里看到的是单个对象。差分对则不然它由两个网络组成比如USB_DP和USB_DM在Allegro里先要把这两个Net“配对”成差分对。配对之后约束管理器里出现的是一个Pair对象而不是两个单独的Net。这一点直接影响后面的规则设置和布线操作。不少新手直接在布线编辑器里手动拉两根线根本不建差分对结果就是约束规则不生效、等长报告查不到、DRC也不正确。所以学Allegro差分对设置第一步就是建立“配对”的概念。2. 动手前把参数定清楚2.1 约束管理器里先认识这几个地方Allegro的约束管理器就是差分对设置的主战场。从PCB编辑器打开菜单Constraints → Constraint Manager17.4版本也支持直接在右侧面板里操作。约束管理器的工作区主要分两大部分Physical物理约束和Electrical电气约束。物理约束管线宽、线距、过孔等物理属性电气约束管等长、延迟、阻抗这些信号完整性属性。建立差分对的规则通常要同时用到这两个区域Electrical → Net → Routing → Differential Pair在这里创建差分对对象Electrical → Net → Routing → Wiring在这里设置等长容差、未耦合长度Physical → Net → All Layers在这里设置差分对线宽、线距新手最常见的误区是在Physical里设置了线宽线距但Electrical里没有设等长规则结果布完线发现两根线长度差了100milDRC一片红。其实差分对设置是一个组合拳物理和电气规则必须同时定义清楚。2.2 差分阻抗和线宽线距怎么算差分对的两个核心物理参数线宽Trace Width和线距Gap也叫对内间距。这两个参数直接决定差分阻抗而差分阻抗必须匹配接口要求——USB 2.0要求90Ω差分PCIe要求85Ω千兆以太网通常是100Ω。怎么算经验法则是差分阻抗约等于单端阻抗的两倍减去耦合修正具体公式如下微带线近似Zdiff ≈ 2 × Z0 × (1 - 0.48 × e^(-0.96 × S/H))其中Z0是单端阻抗S是线距H是介质厚度。从这个公式就能看出两个规律线距越小括号里的值越大差分阻抗越低线距增大差分阻抗趋近于2倍单端阻抗。线宽对阻抗的影响则通过Z0间接体现线宽越宽单端阻抗越低差分阻抗也越低。实际项目中几乎没人手算这个公式都用Polar Si9000或者Saturn PCB Toolkit输入叠层、线宽、线距、参考平面距离自动算出阻抗。举个例子常规4层板外层1oz铜FR4介质介电常数4.2参考平面距离4mil要实现100Ω差分阻抗Polar算出来大概是线宽5mil、线距8mil。但这只是参考值不同叠层、阻焊厚度、玻纤结构都会影响最终阻抗所以严谨的做法是让板厂根据你的叠层给出推荐值或者你在设计时就按板厂叠层参数去算。2.3 等长误差给多少合适等长误差Tolerance是差分对设置里另一个关键参数。不是所有差分对都要设成0mil也不是越严越好。USB 2.0全速/高速的等长要求相对宽松设备规范里一般允许50mil甚至100mil的误差PCIe和USB 3.x这种高速串行接口要求通常在5~10mil以内1000Base-T以太网和高速LVDS接口要求更严往往需要做到5mil以内。这个误差值怎么来的本质是时序预算Timing Budget。差分信号靠P和N两条线上的电压差值判断逻辑如果两条线长度不一致信号到达接收端的时间不一样差值建立的时间窗口就变窄setup/hold margin被压缩。同时接收端芯片内部还有片内偏移Intra-pair Skew可以做一定补偿所以最终容差是“系统总预算 - 芯片可补偿量”的结果。给新手的建议不要一上来所有差分对都设0mil。先看接口规范如果规范没写按公司设计规则来公司没规则则按10mil起步等布线空间紧张时再放宽。我一向的做法是先按5~10mil设置Space不够就局部放宽但要在评审里明说。2.4 对外间距规则同样不能漏除了P和N两根线之间的线距对内间距Allegro差分对设置还要管对外间距——差分对和周围其他网络的间距。高速差分信号容易干扰邻近的单端信号也容易被别的 aggressor 干扰。Allegro的物理约束里可以为差分对单独建立物理规则集Physical Constraint Set在里面对不同网络类别设置间距。比如差分对到其他差分对、差分对到单端信号、差分对到电源网络等。如果同层有敏感的时钟线或复位线对外间距要适当拉大。常见的做法是差分对和其他信号至少保持3倍线距以上的空间空间允许时5倍更好。3. 实操Allegro中差分对设置的完整流程3.1 第一步创建差分对对象差分对设置的第一步是把两个网络配对。最常用的方法是在约束管理器里操作打开Constraint Manager切到Electrical → Net → Routing → Differential Pair右键 → Create Differential Pair在左侧网络列表里把两个网络比如USB_DP和USB_DM选中加入到右侧配对区指定差分对名称点OK创建完成后约束管理器里会出现一个Pair对象后续的规则都是针对这个Pair来设。还有另一种做法在原理图OrCAD Capture里提前给网络添加DIFF_PAIR属性比如一个网络标为USB_DP另一个标为USB_DM导入网表后Allegro会自动识别并配对不需要在约束管理器里再手动建一次。这个方法最大的好处是原理图和PCB联动网络重命名后配对关系不会丢。17.4版本还支持在PCB编辑器里直接通过菜单Logic → Assign Differential Pair来操作但本质上都是在创建Pair对象。三种方式用哪种都行我的建议新项目从原理图开始就定义差分对属性这样后面规则导入导出都省心。3.2 第二步建立差分对约束规则配对完成后要把规则“挂”到差分对对象上。17.4里先建立约束集再把差分对关联到约束集上这样多个差分对可以复用同一套规则。电气约束部分在Electrical → Net → Routing → Wiring里右键 → Create Electrical CSet新建一个电气约束集。然后在里面设置差分对相关参数Min Line Spacing最小线距通常就是前面算出来的对内间距Tolerance等长容差按接口规范给Uncoupled Length允许的未耦合长度比如BGA扇出区域P和N必须分开走这里的长度给了限制物理约束部分在Physical → Net → All Layers里右键 → Create Physical CSet新建物理约束集。设置Min Line Width / Max Line Width线宽范围NeckBGA扇出时的细线宽度Diff Pair Gap差分对内间距Primary Gap / Secondary Gap换层区域或特殊区域的间距选项建立好ECSet和PCSet后选中差分对Pair对象在右边属性面板里分别关联到对应的ECSet和PCSet。这一步做完规则才算真正生效。3.3 第三步布线时怎么拉差分对规则建好后进入布线阶段。Allegro的交互布线命令支持差分对联动。操作步骤点击Route → PCB Route → Connect或者直接输入快捷键17.4默认是F4调出布线命令选中差分对一端的两个引脚P和N鼠标移动时Allegro会自动同时拉出两根线保持设定的线距和线宽布线过程中切换到单端模式右键 → Single Trace Mode可以让两根线暂时分开绕完障碍再切换回双线模式联动布线时要注意两个问题一是走线换层差分对换层时Allegro会成对放过孔二是拐角处差分对的两根线在拐弯时长度差会增加所以拐角尽量用45度而非直角且拐弯半径不宜过小。这些在布线选项里可以设置比如Route → PCB Route → Connect时右键勾选Corners选45 Degree。如果遇到BGA区域想先扇出再配对可以先用单端方式把每个网络的引线拉出到空旷区域后用差分对模式连接中间段。这种情况下未耦合长度参数就派上用场了——扇出区内的那一段单端铜皮长度不能超过Uncoupled Length的设定值。3.4 第四步等长调整Delay Tune等长调整是差分对设置里最花时间的环节。Allegro提供Delay Tune命令专门做这个菜单Route → PCB Route → Delay Tune或者快捷键。操作流程选中需要做等长的差分对网络在Option面板里设置蛇形线参数Amplitude振幅、Spacing间距、Target Length目标长度沿着走线路径拖动鼠标蛇形线会根据设置自动添加观察底部的实时长度数据调整到目标范围内蛇形线参数怎么定有一个基本经验蛇形线的间距至少要3倍线宽否则两根相邻线段耦合太紧引起局部阻抗突变信号质量反而变差。振幅蛇形凸出的高度不能太大一般不超过参考平面到走线层介质厚度的4倍太大的振幅会增加共模辐射风险。从实际操作看在4层板上做100Ω差分对等长我常用线宽5mil、线距8mil的规则下蛇形线间距设25mil、振幅15~20mil起调。Delay Tune的界面里有实时数据显示比如当前长度、目标长度、剩余误差。17.4的界面比16.6友好不少可以直接看到还剩多少需要补。3.5 第五步验证规则与查看报告布线完成后要验证整个差分对设置是否真正生效。第一步运行DRC菜单Display → Status查看当前DRC图形错误或者Tools → Design Rule Check重点关心Diff Pair相关的检查项。第二步用报告功能验证等长结果菜单Reports → Differential PairAllegro会生成一份差分对报告里面列出所有差分对的P/N长度、总长、差值、是否在容差范围内。这份报告就是评审和发板前的依据。第三步查看耦合状态Reports → Unconnected Nets看看有没有未布完的差分对。对于差分对等长报告要求全绿DRC不允许有红色Diff Pair Violation。4. 常见问题与排查技巧实录4.1 差分对命令灰色不可用我见过不少人卡在这里在布线时发现差分对布线命令是灰色的点不了。原因基本是同一个网络根本没有配对成差分对对象。约束管理器里没有Pair对象Allegro自然不知道你要走差分线命令当然不可用。排查看三处约束管理器 → Electrical → Net → Routing → Differential Pair确认两个网络是否已经在配对列表里原理图里是否已经定义了差分对属性DIFF_PAIR如果定义了但导入网表后没生效检查是否有重名网络或名称不一致如果用Logic → Assign Differential Pair在PCB里手动配对确认保存了.brd文件再继续操作4.2 设置了规则但布线时线宽线距不对这个坑非常典型明明在约束管理器里设置了差分对线宽5mil、线距8mil拉出来却是别的宽度。原因通常是规则优先级问题。Allegro的约束体系有层级关系Design级全局默认→ Class级网络类别→ Net级单个网络→ Pair级差分对。低级规则覆盖高级规则。也就是说如果你在Net级或Pair级明明设了规则但设计级有一个旧的默认PCSet挂在上面而新的PCSet没有正确关联到这个差分对结果是旧的默认规则生效。检查方法在物理约束里选中那个差分对看右侧的Associated PCSet是什么。如果显示的是DEFAULT说明你没有把新建的PCSet挂上去。电气规则同理。所以设置完规则后一定要核对差分对对象关联的ECSet和PCSet不要想当然认为建了约束集就自动生效。4.3 等长怎么调都超差调等长调了半天还是超差往往不是手法问题而是参数或者参考点的问题。排查思路第一检查Delay Tune的目标长度计算基准。差分对等长的比较基准是P和N两个网络从驱动端到接收端的长度参考点必须选对。如果参考点选了差分对连接器的引脚方向错误会导致目标长度计算偏掉。第二检查未耦合长度对总等长的影响。两根线在很长一段距离内没有保持耦合状态各自走线即使最终耦合段等长总长度也可能超差。这时需要回到布线阶段尽量减少未耦合长度。第三蛇形线密度不够。空间充足但怎么拉都不够长说明蛇形线振幅或者间距设置不理想放大振幅、缩小间距可以增加长度贡献但要注意不要违反3倍间距和振幅上限。第四看板子空间是否真的足够。如果空间实在紧张先做物理调整换层、改变走线路径再用蛇形线微调。很多工程师一上来就堆蛇形线结果越调越乱。正确顺序是先保证路径顺畅再谈等长精度。4.4 过孔打到焊盘上为什么不报错这个疑问经常出现。因为Allegro默认允许via-in-pad也就是过孔可以打在焊盘上DRC不会主动报错。这不是差分对设置本身的问题但和差分对换层时的过孔放置有关。如果你希望禁止过孔上焊盘很多高速设计不建议via-in-pad因为会造成贴片焊接不良和阻抗不连续需要手动在Physical约束里找到Allowed Via Under Pad选项把它改成不允许。之后DRC就会对过孔上焊盘的情况报错。对于差分对换层时Allegro会自动放置一对过孔位置会尽量靠近焊盘但通常不会直接打在焊盘中心。如果发现差分对过孔位置异常检查一下是否有via-in-pad约束没关掉。4.5 AD转Allegro的用户要特别注意什么从AD转Allegro是很多工程师都要经历的过程。AD里设置差分对相对简单PCB界面里直接选两根网络菜单Design → Differential Pair Editor就能建对规则设置也在同一个界面里。Allegro看起来复杂本质逻辑其实一样但入口更分散规则靠约束集管理。给AD转过来的工程师几个提示AD里的Rule系统是“规则直接挂网络”Allegro是“先建约束集再把约束集挂网络”多了一步但换来的是复用性和层级管理能力AD的等长调整是交互式蛇形线Allegro的Delay Tune需要先设定目标长度和参数一个差别是Allegro可以在调整过程中实时看数据AD里对差分对的“内距”和“外距”概念相对模糊Allegro分得很清楚这个要花点时间适应5. 差分对设置的一些经验之谈做差分对设置这么多年我个人的经验是规则集中管理参数命名规范流程标准化比任何技巧都重要。在Allegro项目里我习惯把同一类接口的差分对规则统一到一个ECSetPCSet组合里比如USB2_DIFF、PCIe_DIFF、ETH_DIFF命名上直接体现接口类型。这样规则评审、DRC检查、后续配合仿真都很方便。如果把每个差分对单独设一套规则几十对差分对管理起来会非常痛苦。还有一点发板前跑一次Differential Pair报告把报告导出来发到群里让硬件工程师也看一眼。很多时候硬件工程师设计阶段给的等长要求是“尽量等长”没有具体数值你按10mil设了最终板子也没问题但这份报告能让所有人都知道实际做到了多少评审时有据可依。最后分享一个小技巧Allegro的约束规则可以导出再导入同一个公司、同一类叠层的项目之间完全可以复制规则。每次新项目不用从零开始建差分对规则导入上一次项目的约束文件改一改接口参数就能用。这在公司有多个并行项目时特别省事。
返回列表