ARTICLE DETAIL

资讯详情

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

Allegro差分对等长检查实战:从约束设置到偏差修复全流程

Allegro差分对等长检查实战:从约束设置到偏差修复全流程 1. 差分对等长检查到底在查什么1.1 从信号完整性说起为什么差分对必须等长差分信号传输的核心逻辑是依靠两条走线之间的电压差来传递信息。接收端只关心正负两条线之间的差值理论上任何同时叠加在两条线上的噪声都会被抵消掉。这个机制成立的前提是两条线收到的噪声尽可能一致信号到达接收端的时间尽可能一致。一旦正负两条走线的长度出现明显偏差信号到达接收端的时间就会错开。错开的那部分时间里差分电压不再是一个干净的眼图而是出现台阶、振铃甚至误判。对于高速信号来说几毫米的长度差在时域上就是几个皮秒到几十个皮秒的偏斜速率越高容忍度越低。我在实际项目中遇到过最典型的情况一组PCIe差分对正线比负线长了大约8mil眼图测试时眼高直接掉了将近20%。后来把长度补齐眼图立刻恢复。这个教训让我在后续所有项目里都把差分对组内等长检查当成布线收尾阶段的必做动作而不是可做可不做的选项。1.2 组内等长和组间等长的区别很多人容易把这两个概念混在一起。组内等长指的是同一对差分信号内部正线和负线之间的长度匹配组间等长指的是多组差分对之间比如DDR的DQS和DQ之间、多通道SerDes的lane与lane之间的长度匹配。组内等长的容忍度通常非常小一般在5mil以内有些高速接口甚至要求2mil以内。组间等长的容忍度相对宽松一些根据接口协议不同可能在50mil到200mil之间。Allegro的约束管理器对这两类等长有不同的约束类型检查方法也不完全一样。这篇文章主要聚焦组内等长也就是差分对正负两条线之间的长度偏差检查。这是最基础、最高频、也最容易出问题的环节。1.3 Allegro 17.4在等长检查上的能力边界Allegro 17.4的约束管理器提供了相当完整的差分对长度检查功能。它能够实时显示差分对的长度信息能够在布线过程中给出动态反馈也能够在布线完成后生成详细的检查报告。但它不是万能的。约束管理器只能告诉你“当前长度是多少”“偏差是多少”它不会自动帮你修线。定位到偏差之后怎么调整、调整哪一段、调整多少仍然需要工程师自己判断。另外约束管理器的长度数据依赖于正确的约束设置和正确的差分对定义如果前期设置有问题后面查出来的数据就是错的。所以整个流程的关键不在于“会不会点那个按钮”而在于理解数据是怎么来的、怎么判断数据是否可信、以及发现问题后怎么高效处理。2. 检查前的准备工作约束设置与差分对定义2.1 差分对定义的正确姿势在Allegro里做等长检查第一步永远是确认差分对有没有被正确定义。我见过太多案例工程师在约束管理器里查了半天长度结果发现差分对根本没配对或者配错了。定义差分对有两种常见方式。一种是在原理图阶段就通过命名规则自动识别比如正线命名为TX_P、负线命名为TX_N导入网表时Allegro会自动配对。另一种是在PCB Editor里手动创建通过Logic菜单下的Assign Differential Pair功能手动指定哪两条网络是一对。手动创建时有一个细节容易被忽略差分对的命名。Allegro允许你给差分对起一个逻辑名称这个名称会出现在约束管理器里。建议命名时带上接口类型和通道编号比如PCIE_TX0、PCIE_RX0这样后面查长度时一眼就能定位到具体是哪一组。注意如果差分对是在PCB阶段手动创建的一定要确认创建后网络属性里的DiffPair信息已经更新。有时候创建完没有刷新约束管理器里看不到新配对的差分对。2.2 约束管理器里的差分对约束设置差分对定义好之后打开Constraint Manager在Physical规则或者Spacing规则里找到对应的差分对。Allegro 17.4的约束管理器左侧是规则树右侧是具体的参数表格。需要关注的核心参数有两个一个是Target Length也就是目标长度另一个是Tolerance也就是允许的偏差范围。对于组内等长通常不需要单独设置Target Length因为正负两条线本身就是互相参考的。但Tolerance必须设置否则约束管理器不会给出偏差警告。设置Tolerance时我一般会根据信号速率来定。低速信号可以放宽到10mil高速信号建议控制在5mil以内超高速信号比如25G以上最好控制在2mil以内。这个值不是拍脑袋定的而是根据信号在PCB上的传播速度换算出来的。以常见的FR4板材为例信号传播速度大约是每纳秒6英寸换算下来1mil大约对应0.17皮秒。如果接口允许的偏斜是10皮秒那么长度偏差就应该控制在60mil以内留一半余量就是30mil。2.3 层叠与传播延迟对长度数据的影响这里有一个很多人踩过的坑Allegro约束管理器里显示的长度是物理长度还是电气长度答案是默认显示的是物理长度也就是走线在PCB上的实际几何长度。但真正影响信号到达时间的是电气长度也就是传播延迟。如果正负两条线走在不同的层上即使物理长度完全一样电气长度也可能不同因为不同层的介质厚度和介电常数不一样。Allegro 17.4的约束管理器支持显示电气长度但需要提前在Cross Section里正确设置每一层的叠层参数。如果叠层设置不准确电气长度数据就不可信。我的建议是对于组内等长要求严格的差分对尽量让正负两条线走在同一层。如果因为布线空间限制必须换层换层时要确保两条线同时换到同一层并且换层过孔的延迟也要考虑进去。一个过孔的延迟大约在0.1到0.2皮秒之间对于超高速信号来说这个量级已经不能忽略了。3. 三种方法快速定位长度偏差3.1 方法一约束管理器直接查看法这是最直接的方法适合在布线完成后做整体检查。打开Constraint Manager切换到Differential Pair模式在右侧表格里找到Length这一列。Allegro会分别显示正线和负线的长度以及两者的差值。如果差值超过了之前设置的Tolerance这一行会变成红色或者黄色一眼就能看出来。这个方法的优点是快所有差分对的长度信息集中在一个表格里可以排序、可以筛选。我通常会把表格按偏差值从大到小排序优先处理偏差最大的那几组。缺点是信息比较粗只能看到总长度看不到具体是哪一段走线导致了偏差。如果一组差分对走了很长的路径中间经过了多个区域光看总长度很难判断问题出在哪里。实操心得在约束管理器里查看长度时建议同时打开Electrical Length和Physical Length两列。如果两者差异很大说明正负两条线走在不同层上需要进一步检查叠层设置。3.2 方法二PCB Editor内实时测量法这个方法适合在布线过程中或者布线刚完成时针对某一组具体的差分对做精细检查。在PCB Editor里选中差分对的正线或者负线右键选择Show Element会弹出一个信息窗口里面包含这条线的总长度、分段长度、过孔数量等信息。分别查看正线和负线手动计算差值。更高效的方式是使用Allegro的Delay Tuning功能。在Route菜单下找到Delay Tuning选中差分对后Allegro会以图形化的方式显示当前长度与目标长度的偏差。偏差部分会用不同的颜色标注出来非常直观。这个方法的优点是精度高可以看到每一段走线的长度。缺点是操作比较繁琐一组一组查效率不高适合在约束管理器里发现异常后针对性地深入排查。3.3 方法三Skill脚本批量检查法如果板子上有几百组差分对手动一组一组查是不现实的。这时候就需要用到Skill脚本。Allegro支持Skill语言进行二次开发可以编写脚本自动遍历所有差分对提取长度信息计算偏差并输出成表格。网上有不少现成的Skill脚本可以下载也可以根据自己的需求定制。一个典型的Skill脚本逻辑是这样的先获取所有差分对的列表然后遍历每一组分别获取正线和负线的长度计算差值如果差值超过阈值就记录下来最后输出一个报告文件。这个方法的优点是效率极高几百组差分对几秒钟就能查完。缺点是需要一定的Skill编程基础而且脚本的准确性依赖于差分对定义和约束设置的正确性。我个人的习惯是项目初期用约束管理器做整体扫描发现异常后用PCB Editor精确定位项目收尾阶段用Skill脚本做最终批量确认。三种方法配合使用基本不会漏掉任何一组有问题的差分对。4. 长度偏差的常见原因与调整策略4.1 偏差来源一布线路径不对称这是最常见的原因。正线和负线虽然是一对但在实际布线时由于周围有其他的走线、过孔、焊盘等障碍物两条线的路径很难做到完全对称。一条线可能需要绕一个弯另一条线走直线长度差就出来了。解决方法是使用Allegro的蛇形绕线功能在较短的那条线上增加绕线把长度补回来。绕线时要注意几个参数绕线幅度、绕线间距、绕线角度。幅度太小起不到补偿作用幅度太大占用布线空间间距太小会导致线间耦合影响阻抗角度一般用45度或者圆弧避免90度直角。4.2 偏差来源二过孔数量不一致如果正线打了两个过孔负线只打了一个长度差就会很明显。一个过孔的高度大约等于板厚对于1.6mm的板子来说一个过孔就是63mil左右的长度。两个过孔和一個过孔之间就差了一个板厚。解决方法是尽量让正负两条线的过孔数量保持一致。如果因为布线层限制必须打不同数量的过孔那就要在较短的那条线上用绕线补偿回来。4.3 偏差来源三引脚内部长度差异这个原因比较隐蔽很多人会忽略。芯片引脚内部到Die之间的键合线长度是不一样的有些芯片的Datasheet会给出引脚延迟参数有些则不会。如果芯片引脚本身就有延迟差异那么即使PCB上的走线完全等长实际到达Die的信号仍然有偏斜。对于这种情况只能在PCB走线上做预补偿。如果Datasheet给出了引脚延迟差异就按照差异值换算成PCB长度在走线上提前补掉。如果Datasheet没有给出那就只能通过实测来确定。4.4 调整策略先粗调后精调发现偏差后不要一上来就精细调整。我的习惯是分两步走先粗调把偏差从几十mil降到几mil再精调把偏差控制在1mil以内。粗调时可以用大幅度的绕线快速把长度补上来。精调时用小幅度、密集的绕线慢慢逼近目标值。Allegro的Delay Tuning功能支持实时显示当前偏差调整时可以一边绕线一边看数据非常方便。注意绕线会增加走线的寄生电容和寄生电感对阻抗有影响。绕线完成后建议用Allegro的阻抗检查功能确认一下阻抗是否还在允许范围内。5. 实操全流程从检查到修复的完整记录5.1 项目背景与检查目标前段时间做了一块通信板板上有16组PCIe Gen3差分对速率8Gbps。根据协议要求组内等长偏差需要控制在5mil以内。板子布线完成后我按照下面的流程做了一次完整的等长检查。5.2 第一步约束管理器整体扫描打开Constraint Manager切换到Differential Pair模式按Length差值排序。16组差分对里有3组偏差超过了5mil最大的一组偏差到了12mil。另外还有2组偏差在3到5mil之间属于临界状态。把偏差最大的3组标记出来分别是PCIE_TX2、PCIE_RX5和PCIE_TX7。接下来针对这3组做精细检查。5.3 第二步PCB Editor精确定位以PCIE_TX2为例在PCB Editor里选中这组差分对使用Show Element查看正线和负线的分段长度。发现正线在BGA出线区域比负线多绕了一个弯多出了大约8mil。另外正线比负线多打了一个过孔又多了大约4mil。两处加起来正好是12mil的偏差。PCIE_RX5的情况类似主要偏差来自过孔数量不一致。PCIE_TX7的偏差则主要来自绕线路径不对称。5.4 第三步针对性修复对于PCIE_TX2过孔数量不一致的问题没法改因为BGA出线层是固定的。只能在负线上做绕线补偿。在负线的空闲区域增加了一段蛇形绕线幅度15mil间距20mil绕了3段补回了大约12mil的长度。对于PCIE_RX5同样用绕线补偿。这组差分对的布线空间比较紧张绕线幅度只能做到10mil绕了5段才补够。对于PCIE_TX7偏差较小只在负线上加了两段小幅绕线就解决了。5.5 第四步修复后复检三组都调整完成后重新打开Constraint Manager查看长度数据。PCIE_TX2的偏差从12mil降到了1.2milPCIE_RX5从9mil降到了0.8milPCIE_TX7从7mil降到了0.5mil。全部满足5mil以内的要求。最后用Skill脚本做了一次全板批量检查确认所有16组差分对的组内偏差都在允许范围内。6. 常见问题与排查技巧实录6.1 约束管理器里看不到差分对怎么办这是最高频的问题。原因通常有三个一是差分对没有正确定义二是约束管理器的规则没有应用到对应的网络三是软件显示设置的问题。排查顺序先在PCB Editor里用Logic菜单下的Assign Differential Pair确认差分对是否存在然后检查Constraint Manager的规则是否已经启用最后检查Display选项里Differential Pair的显示是否打开。6.2 长度数据明显不对怎么办如果约束管理器里显示的长度和实际走线长度对不上大概率是叠层设置有问题。检查Cross Section里的层数、厚度、介电常数是否和实际板厂提供的参数一致。另外如果走线经过了不同的层电气长度和物理长度会有差异需要确认当前显示的是哪一种。6.3 绕线后阻抗变了怎么办绕线会增加走线的寄生参数导致阻抗下降。如果绕线后阻抗超出了允许范围可以适当增大绕线间距减少线间耦合。另外绕线尽量走在阻抗控制区域之外避免影响关键信号。6.4 差分对数量太多检查效率太低怎么办用Skill脚本。网上有很多开源的差分对检查脚本下载后根据自己项目的需求稍作修改就能用。如果不想用脚本也可以在Constraint Manager里用Filter功能只显示偏差超过阈值的差分对减少人工筛查的工作量。问题现象可能原因排查方法解决措施约束管理器看不到差分对差分对未定义或规则未启用检查Assign Differential Pair和规则状态重新定义差分对启用对应规则长度数据异常叠层设置错误或显示模式不对检查Cross Section参数和显示设置修正叠层参数切换显示模式绕线后阻抗超标绕线间距过小导致耦合增强用阻抗检查功能确认增大绕线间距调整绕线位置检查效率低差分对数量多手动排查慢评估是否可用脚本编写或下载Skill脚本批量检查6.5 一个容易被忽略的细节测试点的长度影响如果差分对上挂了测试点测试点的走线分支也会计入总长度。有时候正线和负线的测试点分支长度不一样就会引入额外的偏差。检查时要把测试点分支的长度也考虑进去或者在约束管理器里把测试点分支排除掉。7. 我个人的实操体会差分对组内等长检查这件事说难不难说简单也不简单。工具本身提供了足够的能力关键在于工程师对数据的判断和对细节的把控。我踩过最大的一个坑是在一个项目里完全依赖约束管理器的数据没有去检查叠层设置。结果约束管理器显示所有差分对都等长但实际测试时眼图就是不对。后来发现是叠层参数填错了电气长度算出来是错的。从那以后我每次做等长检查之前都会先花五分钟确认叠层设置和差分对定义这五分钟能省掉后面几个小时的返工。另一个体会是等长检查不要等到布线全部完成才做。最好在布线过程中就实时关注Allegro的Delay Tuning功能可以在布线时实时显示偏差边布边调效率比布完再改高得多。最后分享一个小技巧如果一组差分对的偏差怎么调都调不下来不妨检查一下是不是有隐藏的走线片段没有被统计进去。Allegro有时候会把一些很短的走线片段忽略掉但这些片段累加起来也可能造成明显的偏差。用Show Element逐段查看往往能找到问题。
返回列表