ARTICLE DETAIL

资讯详情

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

Allegro差分等长调整全流程:从约束设置到蛇形走线实战

Allegro差分等长调整全流程:从约束设置到蛇形走线实战 做PCB设计的人几乎没有谁没被差分对等长折腾过。尤其用Cadence Allegro画高速板卡USB、PCIe、HDMI、千兆以太网一排差分对躺在那里约束管理器里规则倒是设了一堆真正绕线的时候才发现要么绕短了要么绕过头了要么绕完DRC还在报错查半天发现是Pin Delay压根没设置。这篇文章我想把Allegro里差分等长调整的完整流程梳理一遍从约束设置的底层逻辑到蛇形走线的实际操作再到我这些年踩坑踩出来的排查经验一次性讲透。不管你是刚转高速设计的新人还是已经画过几块板子但每次做等长都心里没底的工程师这篇内容都值得你花十分钟看完遇到类似问题可以直接照着操作。1. 差分等长的本质先算清等时这笔账再动手绕线很多人一上来就问约束管理器里Delta和Tolerance怎么填蛇形走线间距设多少但这些问题其实都是表象。真正该先搞清楚的是差分等长等的是什么。1.1 等长不是目标等时才是差分对传输的是一对幅度相等、相位相反的信号接收端比较的是两根线之间的电位差。如果正负两根线的物理长度不一致信号到达接收端的时间就会有偏差这个偏差会直接转化为共模噪声。长度差越大、信号速率越高眼图恶化就越明显极端情况下EMI也会跟着超标。但注意物理长度相等不等于传播时间相等。同样一根走线走在外层和走在内层因为介质介电常数不同信号传播速度并不一样走线宽度不同等效介电常数也不一样中间还夹着过孔一个过孔的延迟通常相当于几十皮秒到上百皮秒。所以Allegro里的等长计算底层用的其实不是长度这个物理量而是传播时间。这也是为什么在高速设计中相比单纯设置物理长度更推荐使用相对传播延迟Relative Propagation Delay来做约束。Allegro会根据你的层叠结构、走线宽度、过孔模型自动把物理长度换算成传播时间再跟目标值做比较。如果层叠设置得不对或者跨层走线没有考虑过孔延迟那出来的等长结果就是假的。1.2 等长容差怎么设才靠谱等长容差没有统一答案一定是跟着芯片手册走。不同接口、不同速率要求差距非常大。USB 2.0很多芯片不硬性要求对内等长但工程上为了裕量一般控制在50mil以内。USB 3.0/3.1TX和RX差分对内部常见要求是±5mil。HDMI如果跑1080p或者4K对内等长建议控制在5mil左右。1000BASE-T千兆以太网通常要求±5mil以内。PCIe Gen3/Gen4一般也是按5mil左右的时序预算来折算。这些数值是我在实际项目中常用的参考值具体一定要以你的主控芯片手册为准。手册里给的往往不是多少mil而是时序预算比如内部差分偏移不超过5ps这时候就需要根据信号传播速度换算。在外层走线信号传播速度大约是每英寸150ps到170ps5ps对应大约0.8mil到1mil内层稍慢一些大约每英寸170ps到190ps。算下来绝大多数高速接口的差分对内等长容差都在±5mil这个量级。2. 约束设置实操把等长规则写进Constraint Manager等长调整的根基在约束管理器这一步如果没做扎实后面绕线全是在盲调。很多人的习惯是先把线走完最后再用Delay Tune一点点补长度这样效率很低而且遇到复杂的BGA封装区域往往绕来绕去就是绕不进容差范围。2.1 创建差分对两种常用路径在Allegro里创建差分对有两个入口两种本质上一样。第一种在PCB Editor中选中需要组成差分对的两个网络注意要在Find面板里把Nets勾上然后在右侧面板里右键选择Create - Differential Pair。这个办法直观适合只有三五个差分对的小工程。第二种打开约束管理器Setup - Constraints - Constraint Manager在左侧工作树中展开Electrical - Net - Routing - Differential Pair在右侧空白区域右键选择Create。在弹出的对话框里可以直接选两个网络也可以利用命名规则批量创建比如网络名带_T和_P后缀的系统会自动识别成一对。这个办法适合差分对数量多的板子一次性能把几十对全部建好。创建差分对之前最好先规范网络命名。我在项目里要求所有差分对必须按信号名_TXP和信号名_TXN这种规则命名批处理识别率会高很多后面查看规则、做等长报告时也一目了然。2.2 设置差分对的物理规则线宽、线距与阻抗差分对创建好之后要设置物理规则主要是线宽和线距。这两个参数直接决定差分阻抗。比如目标100欧差分阻抗四层板参考层到走线层的介质厚度是4mil线距8mil芯板介电常数4.2这种情况下4.5mil线宽通常能算出接近100欧。但这只是估测正规做法是用Polar Si9000或者Allegro自带的阻抗计算工具根据实际层叠结构计算。在约束管理器里差分对物理规则在Physical - All Layers - Value这个页面设置找到对应的差分对设置Line Width和Neck Width。Neck是差分对在BGA出线、过孔稀疏区域使用的收窄线宽宽度一般比正常线宽小1到1.5mil同时要保证阻抗在可接受范围内。线距通常在差分对创建的初始参数里设置也就是算阻抗时用的那个间距。实际布线中Allegro会强制保持差分对的线距不变除非你在规则里设置了可变的neck gap。这一点很关键因为差分阻抗是线宽和线距共同决定的如果蛇形绕线时把线距撑大了阻抗就会漂移。2.3 设置相对传播延迟与Pin Delay修正物理规则设置完毕接下来是电气规则这是等长约束的核心。在约束管理器工作树中展开Electrical - Net - Routing - Relative Propagation Delay右侧会列出所有网络/差分对。选中你要约束的差分对配置Delta和Tolerance。Delta表示目标延迟差通常设置0milTolerance就是前面算出来的容差比如5mil最终含义是差分对内两根线之间的传播时间差不超过5mil对应的量。这里有个非常实用的细节基准怎么选。如果两根线都已经走完了一长一短你可以把Delta设成0系统默认以较长的那根作为基准也可以手动指定基准把较长的那根设为基准网络短的那根通过绕线向它看齐。我个人习惯是把较长的那根直接作为Delay TargetDelta设成0短的那根绕线补齐这样绕线工作量是最小的。Pin Delay是很多人忽略的一块。BGA封装内部的引线、裸片到焊球的走线都有额外的延迟这部分往往比板上的等长误差还要大。Allegro提供了Show Pin Delay功能在PCB Editor里执行命令后点击器件引脚可以查看该引脚的Delay值。然后把引脚对应的Delay值填到约束管理器中——在Relative Propagation Delay页面里右键选择Properties可以看到Pin Delay列逐个填入。填完之后系统计算等长时就会自动把引脚延迟算进去这才是真正的时序等长。项目里遇到过一块PCIe板卡物理长度差了2mil怎么调都调不稳定最后发现两个连接器的Pin Delay差了接近50ps填进去之后问题立刻解决。2.4 利用比例约束设置Group等长除了差分对内等长很多场景还需要对多组差分对做等长典型的就是并行总线例如DDR的数据线DQS和DQ之间或者HDMI的多个数据通道之间。这种需求可以用Match Group实现。先在约束管理器中选中需要等长的多个差分对右键Create - Match Group然后设置组内等长容差。例如4组PCIe TX差分对可以创建一个Match Group设置所有差分对的总长度差不超过5mil。这样在走线时Delay Tune会自动把这组内所有差分对一起纳入计算状态窗口显示的就是当前被选中那对与组内最长/最短的那对的差值。需要提醒的是Match Group的基准通常是组内最长的那根差分对所以在决策绕线顺序时优先把最长的差分对走完其他对再向它看齐能够最大程度避免绕完了发现基准变了的尴尬。3. 蛇形走线实战从参数计算到Delay Tune完成等长约束设置全部完成之后终于进入最让人又爱又恨的环节——蛇形走线。这一步操作本身不难难的是参数选择、空间调度和绕完之后的检查。3.1 蛇形走线前的准备读懂等长状态窗口在开始绕线之前先确保你选中了正确的约束。Allegro中执行Route - Delay Tune或者在命令输入栏里直接敲入delay tune鼠标会变成绕线状态点击需要调整的差分对系统会自动调出等长调整的参数窗口。这个状态下底部状态栏或者Options窗口里会显示当前的等长状态。常见的信息包括Current Length当前总长度、Target Length目标长度、Delta当前与目标的差值。Delta是正数说明走线长了负数说明短了。很多新同事一上来就盯着蛇形参数调其实最该看的是这个Delta值它直接告诉你需要绕多少长度。如果整个板子上约束很多还可以借Allegro的Timing Vision功能辅助Display - Timing Vision选择Relative Propagation Delay所有差分对会以颜色标识——绿色满足约束红色不满足。这样可以在绕线前先全局看一遍决定先处理哪一对。3.2 蛇形参数的选择与计算蛇形走线并不是简单地把线拉长每一处弯折都会引入阻抗变化、电磁耦合和额外的寄生电容。参数设置是实操中最核心的技能。Allegro的Delay Tune参数面板中有几个关键项Amplitude振幅蛇形凸出的高度也就是每个波峰到走线中心线的距离。振幅越大每单位横向长度能贡献的额外长度越多越省空间但振幅过大会显著增加辐射和耦合常见工程值在20mil到40mil之间。个人经验是优先取25mil到30mil空间局限时再往下压缩。Spacing间距相邻蛇形波峰之间的间距这个概念有点像蛇形自身的节距。间距太小波峰之间的平行耦合会加剧导致局部阻抗下降。常规要求是间距不小于3倍线宽。比如线宽5mil间距就至少取15mil工程上我用20mil比较多留足裕量。Corners拐角形式Allegro支持45度拐角和圆弧拐角。高速信号建议用圆弧拐角因为45度尖角还是有微小的阻抗断续圆弧过渡更平滑。部分版本中还可以设置拐角的半径或角度如果是普通消费类产品45度已经够用。Stacked嵌套蛇形差分对绕线时可以开启嵌套模式让两根线的蛇形相互交错这样能在更小的面积内增加长度。但嵌套会显著增加两根线之间的耦合所以只建议在空间极其狭窄、必须压缩体积时使用而且要严格控制间距。实际需要绕多长可以做一个简单估算假设目标是补齐50mil的Delta振幅30mil间距20mil那么每个完整的蛇形周期来回两段大约增加60mil长度除以每个周期的横向占用约50mil等效利用率大约1.2倍。也就是说要补50mil长度至少需要约40mil的横向走线空间。这个估算不需要精确但要帮你判断板上的绕线区域够不够用以及选多少振幅和间距。3.3 Delay Tune实操步骤与走线过程以一个实际案例来说明完整操作。假设一块板子上有一对HDMI差分对约束设置为对内等长±5mil。走线基本完成此时短的那一根比长的那一根短了38mil。第一步进入Route - Delay Tune点击短的那根差分对。此时Options窗口中的Delta显示为-38mil说明需要补38mil。第二步设置蛇形参数。参考上文的估算取振幅30mil间距20mil拐角45度Tolerance按照约束设为5mil。这里要注意Tolerance是给自动绕线时系统判断何时停止的标准如果你的容差是±5mil可以直接设成5系统会在接近目标时自动停止拖拽。第三步在差分对中间段、远离连接器、远离接收端的区域找到一块空间充足的位置作为蛇形走线区域。尽量选择换层次数少、两侧没有敏感走线的地方。第四步按住鼠标左键开始拖动Allegro会自动生成蛇形。拖动过程中状态栏的Delta值会实时变化当它进入±5mil范围时系统会有一个完成状态的提示。松开鼠标蛇形走线就完成了。第五步检查差分对在蛇形区域是否保持平行。Allegro的Delay Tune会自动保持差分对间距但在蛇形两端进入普通走线的过渡段有时候会因为绕线半径不够产生局部不对称这时候需要放大检查一下。3.4 绕线中的空间调度与避让处理绕线最怕的不是绕不进去而是绕完之后跟旁边的铜皮、过孔、丝印或者结构件发生干涉。绕线区域旁边如果有大面积的静态铜皮Allegro默认会做shape避让但避让之后蛇形上方可能出现一块很小的铜皮缺口影响参考平面连续性。碰到这种情况我一般会在绕线前先给这个区域加一块Route Keepout把绕线限定在一个干净的区域内避免它跟铜皮贴得太近。空间实在紧张时可以考虑换层绕线。比如在表层绕不下可以打两个过孔到内层在内层完成蛇形绕线再回到表层继续走线。这时候一定要把过孔的延迟计入等长计算。Allegro支持设置过孔延迟在约束管理器里可以给特定过孔类型指定一个延迟值比如50ps。如果不想设置最简单的办法是把一对差分对的过孔数量做得一致让过孔延迟在两端自抵消。还有一种情况是绕线区域紧挨板框或者结构件板框修改之后蛇形区域可能被切割掉。这类问题在dynamic shape的情况下不容易察觉我的习惯是所有等长绕线完成后跑一次完整的DRC和shape检查专门看是否有安全间距报错。3.5 绕完还不算完复查等长与Timing Vision绕完之后别急着收工。第一件事是在约束管理器中刷新并查看状态确认所有差分对的相对传播延迟都满足约束。第二件事是用Timing Vision做一次全局确认尤其当你同时处理了多组差分对和Match Group时视觉检查能快速暴露哪一对还是红的。另外一个很容易被忽略的检查是差分对的相位Polarity。绕线过程中如果蛇形嵌套模式使用不当或者绕线方向控制不好可能出现两根线在局部区域交叉导致相位反转。Allegro中可以通过Display - Element来查看网络路径但更快的办法是目检蛇形区域看两根线是否存在拧麻花的现象。这个问题在高速信号中很致命因为相位一旦翻转接收端解调出来的信号就完全错了。4. 高频踩坑与排查技巧实录做等长调整这么多年遇到的问题基本可以归类成几类。我把典型场景和排查思路整理成了一份速查表供大家参考。常见现象最可能的原因排查步骤DRC报错但视觉上长度已经一致Pin Delay未设置或设置错误检查约束管理器中Pin Delay列确认两端的引脚延迟是否正确填入等长满足后DRC仍然红色约束类型设置成了Min/Max而不是Relative打开约束管理器检查相对传播延迟是否配置在Relative Propagation Delay页面而不是物理长度规则里Delay Tune状态窗口不出现目标值未正确创建差分对或约束未生效确认差分对已创建且当前层对应的物理规则中存在该差分对绕线完成后差分对内两根线不对称蛇形进入和退出位置选取不当放大查看蛇形过渡段手动调整进出线角度保持两线对称蛇形走线区域阻抗异常蛇形间距太小或振幅太大复核蛇形参数按3倍线宽以上的间距重新设置自动Gloss优化后等长被破坏Auto Gloss重排了蛇形走线对已调好的差分对加锁定或者只针对布线区域做局部Gloss4.1 等长明明满足了DRC还报错这种情况最常见的原因是系统没有把已经满足的规则刷新。Allegro中修改完走线后DRC需要重新跑一次才能更新状态可以用Display - Refresh或者直接按键盘上的DRC更新快捷键。但如果刷新之后还是红色就要检查是不是把相对传播延迟规则设成了Min/Max这两种规则在约束管理器里的位置和含义完全不同。Relative Propagation Delay计算的是相对差值Min/Max则是绝对长度限制设错了地方系统当然一直报错。还有一个坑是约束管理器里同时存在All Layers和特定层的规则如果特定层的规则里没把差分对放进去绕线时系统就不知道该用哪个规则会出现奇怪的状态。解决方法是检查规则作用域确认All Layers下规则已经正确配置。4.2 对内等长合格了对外还是一个长一个短多组差分对之间做等长通常是用Match Group实现的。如果出现对内满足对外不一致的现象首先要确认这些差分对是否真的都被加进了同一个Match Group以及Group的基准是否正确。Allegro中Match Group的基准默认是组内最长的那根当你手动调整了某一对的长度后基准会发生变化导致其他对的状态跟着变动。因此实际操作时我习惯先把组内最长的差分对确定下来再依次调整其他对并且每次都刷新一遍状态栏避免基准漂移。4.3 蛇形区域阻抗突变眼图闭合这种问题属于信号完整性范畴但根源往往在等长阶段埋下。蛇形走线本质上是在传输线上人为引入多段平行耦合结构如果间距小于3倍线宽波峰之间的耦合会显著增加导致局部阻抗下降回波损耗变大。眼图测试时表现就是眼宽变小或者眼高降低。另一个容易被忽略的点是蛇形区域与参考平面的关系。如果绕线区域跨越了参考平面的分割槽信号回流路径被打断即使等长做得再好信号质量依然会很差。这类问题需要回头检查层叠和参考平面必要时在绕线区域附近补缝合地过孔而不是一味地调整蛇形参数。4.4 工具操作层面的一些提醒使用Allegro做等长调整时有几个操作层面的小技巧值得记一下一是快捷键设置。Delay Tune这个命令用得极频繁建议把它绑定到一个顺手的位置。在Setup - User Preferences - UI - Padstack中可以做部分设置但更直接的是在ENV文件里添加一行快捷键绑定比如把F9设成delay tune能够大幅提升操作效率。二是关于Allegro铜皮只有轮廓这类显示问题。在绕线时如果发现铜皮只显示一个框不显示填充大概率是因为动态铜皮没有避让或者显示设置问题按一下重绘按键或者打开Shape Fill就能恢复。这个情况下做等长很容易被误导以为空间不够实际上铜皮避让状态其实是正常的所以遇到显示异常先别急着改线。三是很多同事习惯用Auto Gloss自动优化整板走线。我的建议是差分对绕线完成后把这些差分对全部锁定右键Lock再跑Gloss优化。Auto Gloss的优化逻辑是按最小长度和最少过孔来调整走线的它根本不懂你辛辛苦苦绕出来的蛇形是为了满足时序约束一旦它把你的蛇形拉直等长就前功尽弃了。四是导出光绘前的检查。等长调整完成之后不要直接出GERBER先做一次完整DRC同时用Allegro的Etch Length报告导出所有关键网络的长度信息跟约束管理器中的目标值做一次比对。这一步虽然多花几分钟但能防止最后一版光绘缺少了几根走线这种生产事故。结尾一点个人体会最后分享一个我自己的习惯做等长之前我会先把所有关键差分对的最短路径走通然后打开约束管理器看一下每对还差多少统一规划绕线区域再进入Delay Tune逐个击破。这个习惯看起来绕了远路但实际上能省下大量反复调整的时间尤其是遇到板上空间紧张、多个差分对扎堆的时候提前规划比边绕边找位置要高效得多。另外等长做完之后一定要记得保存一份约束规则的快照很多时候后续改版只能改走线但约束规则完全不变这个快照能让你在新版本里几秒钟恢复全部等长设置。希望这篇内容对你有帮助也欢迎在实际项目中遇到有意思的等长问题时一起交流学习。
返回列表