ARTICLE DETAIL

资讯详情

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

Allegro 17.4约束管理器实战:一般走线与差分走线规则设置全解析

Allegro 17.4约束管理器实战:一般走线与差分走线规则设置全解析 很多人第一次打开Cadence Allegro 17.4的Constraint Manager都会被那一排排表格搞得头皮发麻Physical是什么、Spacing是什么、Class to Class又是干嘛的和Altium Designer完全不是一个思路更别说差分走线那一堆Neck Gap、Primary Gap的参数了。我自己这些年用Allegro做过从DDR4到PCIe接口的高速板也在项目里带过不少新人最大的感受是规则设置最考验的不是软件操作而是你对整个PCB布线流程的理解。这篇实战总结就把一般走线和差分走线的规则设置整个链路拆开讲清楚哪些设置是必须做的、哪些坑提前避开能省下大把返工时间。内容主要围绕PCB布线中的规则设置展开适合正在学17.4、或者准备从Altium Designer转过来的工程师参考。1. 规则体系先理清Cadence、Allegro和约束管理器的关系1.1 Cadence和Allegro到底有什么区别这个问题被问过太多次了放在开头说清楚。Cadence是一家EDA公司的名字它的产品线很多包括OrCAD Capture原理图工具、Allegro PCB Editor、Sigrity仿真工具等等。所以“Cadence Allegro”这个叫法指的是Cadence公司出品的PCB设计软件Allegro。别人问“你用什么画板”你说“用Cadence”其实不严谨严格来说应该是“用Allegro”。还要注意OrCAD和Allegro的关系很多公司是OrCAD Capture画原理图Allegro画PCB这套流程在行业内非常常见。而17.4指的是Cadence SPB 17.4这个大版本下Allegro PCB Editor的版本号网上常说的“Allegro 17.4”就是指这个。新手下载完软件看到开始菜单里一堆工具很容易懵但只要你只做PCB设计记住核心就是PCB Editor加Constraint Manager就够了。这个误区之所以值得单独说是因为你搜资料的时候Cadence、OrCAD、Allegro几个词混着来搜出来的东西方向完全不一样。先把概念理清楚后面学习路径才不会歪。1.2 17.4的Constraint Manager规则管理的核心Allegro的规则管理不像AD那样都在一个Design Rules面板里而是集中在一个叫Constraint Manager的约束管理器中很多工程师直接叫它CM。打开方式也很简单在PCB Editor里走菜单Setup Constraints Constraint Manager或者在命令栏输入约束管理器相关的命令也行。Constraint Manager把规则分成三大类Physical物理规则线宽、线距、过孔类型、差分对线宽等。Spacing间距规则两个对象之间的最小间距比如走线到走线、走线到过孔、过孔到焊盘。Electrical电气规则长度、等长、相位、延迟这类和时序相关的约束。第一次用的人最容易犯的错是在Physical页面里翻来翻去找间距设置发现找不到因为间距根本不在这个页面。Allegro的逻辑是把“线宽线距能走多粗”和“对象之间隔多远”分开管理然后再通过“约束集Constraint Set”这个概念统一应用。你先把这种“先建模板、再应用到网络类”的思路理解了后面看所有界面都会顺畅很多。1.3 布局布线思路规则应该在走线之前定好很多新人觉得规则设置就是走过场先随便拉线最后统一调间距。这个想法在简单双层板上也许能混过去但凡是有点信号完整性的板子这么干绝对会出事。我常说的“布局布线思路”不是一句空话而是要求你在开始走线之前先想清楚三件事第一层叠结构和参考平面是什么。表层走线和内层走线的阻抗特性完全不同线宽线距都要跟着调整。第二哪些网络是高速信号、差分信号、敏感模拟信号哪些是普通信号这决定了你要建几个网络类每类用哪套约束。第三电源网络的载流能力粗略估算1A电流在1oz铜厚下大概需要1mm左右的铜宽但还要看允许温升电源类网络应该走覆铜而不是走线。为什么这么强调先定规则我亲眼见过一个项目布局花了两天走线走了一周结果因为QFN底部散热焊盘的间距规则没有提前设导致散热焊盘附近的走线全部要重推相当于返工一天。规则设置不是事后检查它是布线启动前的第一道工序。在Allegro里规则先行还有一个实打实的好处你的走线过程中DRC是实时报错的走到哪里错到哪里而不是最后一次性给你几百个错误那个排查成本是几何级增长的。2. 一般走线的规则设置从线宽、线距到区域规则2.1 物理规则Physical怎么设才合理先打开Constraint Manager找到Physical页面。这里关键列有Min Line Width最小线宽、Default Line Width默认线宽、Max Line Width最大线宽还有一个Allowed Vias列表用来限制这类网络允许使用哪些过孔。新建一个Physical Constraint Set很简单在表格空白处右键选择Create Physical Constraint Set然后命名比如PCS_SIG_5MIL。名字里最好带线宽信息这样后续应用时一眼就知道这个CSet是给什么网络用的。以常规四层板为例给你一个我惯用的参考值网络类Min线宽Default线宽Max线宽适用场景普通单端信号4mil5mil10mil内层走线用4mil表层推荐5milBGA扇出信号3.5mil4mil6milBGA焊盘间距小必须用细线电源网络10mil15mil100mil电源尽量用覆铜线宽只做补充地网络10mil15mil100mil地同理大电流不能只靠走线强调一下这些数值只是常规工艺下的经验值不是标准答案。每个板厂的工艺能力不一样最稳的做法是拿到板厂的“设计规则表”上面写了最小线宽、最小间距、最小孔径、最小环宽等信息直接把这些数值落到你的规则里。否则你设置了3mil线宽板厂做不了最后还得一条一条改。设置步骤其实很简单但藏了一个很重要的习惯不要所有网络都塞进同一个Physical Constraint Set。如果所有网络都用一个CSet后面你想单独给BGA区域用细线宽就只能靠Region规则区分一旦网络类本身没分好区域规则也会一团乱。所以按照功能把网络分成普通信号、DDR信号、差分信号、电源地这几个Net Class是玩Allegro最值得养成的习惯。2.2 间距规则Spacing与Class to Class的坑间距规则负责的是“对象之间隔多远”。打开Spacing页面默认有一条Basic规则里面按对象对对象给出了最小间距Line to Line、Line to Via、Via to Pin、Pin to Pin等。你需要新建几个Spacing Constraint Set比如SCS_SIG_5MIL、SCS_PWR_15MIL然后在Net Class页面把网络类指派过去。这里有一个新手必踩的坑就是Class to Class交叉表。Allegro并不会自动取两个网络类中较大的间距值而是通过间距规则里的Class to Class表格来确定A类和B类之间用哪套SCS。如果这个交叉点没有手工确认系统可能会用一个很松的Basic规则导致你在DDR区域和普通信号区域之间的间距设置完全失效。我在一个项目里就吃过这个亏两个网络类的间距交叉点没设DRC刷出来几百个Line to Line报错当时真的一头雾水。所以在设完各自网络类的Spacing之后一定要去Class to Class表格里把所有交叉位置都过一遍。比如普通信号对普通信号SCS_SIG_5MILDDR信号对普通信号SCS_SIG_8MIL信号对电源SCS_SIG_PWR_10MIL还有一个默认不检查的项目叫Same Net Spacing。Allegro默认不检查同一个网络内部对象之间的距离比如你给电源网络铺了铜皮又拉了一根走线这两个对象靠得很近甚至重叠DRC可能完全不报。这在做电源平面时尤其坑。如果你需要检查同网络间距就得到Spacing属性里把Same Net Spacing选项打开。我个人的习惯是对电源网络的铜皮检查一定打开对信号网络的反而不太开因为信号网络同网络间距的DRC噪声太多。2.3 区域规则Region在什么场景下才用得上还有一种常见布线场景就是BGA区域的扇出。BGA焊盘密度很高5mil线宽/5mil间距在BGA内部很多时候塞不进去这时候就需要区域规则在BGA区域内部用更细的线和更紧的间距区域外面恢复正常。Allegro里的做法是画一块Constraint Region区域然后在Constraint Manager中为这个区域指定单独的Physical Constraint Set和Spacing Constraint Set。具体操作是在PCB Editor里走菜单Setup Areas Constraint Region画一个闭合区域命名比如REG_BGA然后在CM的Region表格里给这个区域指派专用的CSet。这个功能很强大但有几个注意点画Constraint Region的时候区域必须闭合而且不要有自交叉否则DRC会报警。BGA扇出区域不要和Route Keepin区域产生奇怪的缝隙否则会出现“部分走线不在区域内”的错觉线宽切换点处理不好外观很难看。还有一点BGA扇出用细线宽逃逸之后要尽快转换到正常线宽转换点不要刚好压在焊盘上留一小段过渡避免阻抗跳变。这个习惯对高速信号尤为重要。区域规则不是万能的别满板子建一堆Region那样规则覆盖关系会很乱。一般只有BGA、连接器区域、板边高压区这些有明确特殊要求的地方才需要。其他地方尽量保持全板统一规则后续维护省心得多。2.4 17.4快捷键设置给走线环节提速聊完规则顺手把Allegro 17.4的快捷键设置说一下因为走线和规则切换的效率很大程度取决于快捷键。Allegro的快捷键不在菜单里改而是写在一个ENV文件中。文件路径通常在用户目录下的pcbenv\env比如C:\Users\你的用户名\pcbenv\env。如果这个文件不存在可以手动创建。另外一个路径是软件安装目录下的share\pcb\text\env但强烈不建议改系统文件因为软件升级或者重装会被覆盖到时候你辛辛苦苦配的快捷键全没了。ENV文件里常用两种写法alias和funckeyalias F2 done alias F3 oops alias F4 cancel funckey 1 add connect funckey v add via funckey Space donealias和funckey的区别在于alias相当于在命令行敲命令的简写适合带参数的场景funckey是按下立刻执行命令优先级更高更适合单词命令。我自己最常用的一套配置给你参考按键命令用途F2done完成走线F3oops撤销上一步F4cancel取消当前命令CtrlRangle 90走线时旋转90度F5add connect切到走线命令F6add via放置过孔CtrlZzoom fit全屏适配注意Allegro 17.4默认自带一些快捷键比如F6默认可能是next改之前先确认不会覆盖掉自己需要的原功能。另外如果你的系统是中文的ENV文件保存时用ANSI编码最保险UTF-8编码有时会导致Allegro读取异常。快捷键设好之后走线速度是真的能明显提升尤其是add connect和done这两个放在最顺手的位置效率翻倍。3. 差分走线从数值设定到拉线的完整闭环3.1 差分对为什么不能简单理解成“两根线一起走”差分信号的核心是两根线携带等大反向的信号电流在路径上形成紧密耦合对外辐射相互抵消同时对外部干扰也有很好的抑制能力。所以差分走线不是简单地把两根线并排走而是要保证从发送端到接收端两根线的耦合尽量保持一致这样差分阻抗才稳定。因此差分对的规则有几个专有参数Min Line Spacing差分对内间距也就是Primary Gap它直接影响耦合强度和差分阻抗。Primary Width正常段的线宽。Neck Gap和Neck Width在BGA扇出、过孔等狭窄区域允许临时切换到更细的线宽和更紧的间距。Uncoupled Length允许两根线中间脱离耦合的最大长度这个参数很关键。参数趋势上有个简单的规律在固定线宽下内间距越大耦合越弱差分阻抗越高在固定间距下线宽越宽阻抗越低。但实际数值必须通过阻抗计算工具或板厂提供的叠层来计算不能拍脑袋。很多新手误以为把差分对内间距拉大可以减少串扰实际上这是破坏耦合导致差分阻抗跑偏EMI反而变差。差分对的两根线是一个整体不是两个独立的信号。3.2 差分规则数值怎么定一个可参考的实例差分规则的数值设定一定要结合层叠结构。举个例子四层板、1.6mm板厚、表层微带线USB 2.0差分90欧常见设计参数可能是5mil线宽/8mil对内间距但同样的叠层换到内层走线线宽和间距要重新计算。这里给出一个示意性的参考表注意是示意不是放之四海而皆准接口差分阻抗层线宽对内间距Neck线宽/间距对内容差USB 2.090Ω表层5mil8mil4mil/6mil≤5milPCIe85Ω内层4mil8mil3.5mil/6mil按协议要求LVDS100Ω表层4.5mil8mil4mil/6mil≤5mil再次强调这些参数必须根据你的实际叠层用阻抗计算软件确认。我通常的做法是先和板厂要叠层结构然后用Polar Si9000或者Allegro自带的阻抗工具计算把计算得出的线宽间距填进规则再把填好参数的规则发给板厂审核。整套流程走下来板厂DFM通过率会高很多也不会出现“你画完了板厂说阻抗做不出来”的尴尬情况。3.3 差分对规则设置与拉线实操差分对规则设置的完整实操流程分几步走第一步在PCB Editor里走菜单Logic Assign Differential Pair把两根网络识别为差分对。Allegro默认能自动识别以_P和_N结尾的网络对如果不是这种命名可以手动选择。第二步打开Constraint Manager找到Electrical页面里的Differential Pair表格对每个差分对设置线宽、间距、等长容差。差分对的线宽和间距也可以直接在Physical页面里通过CSet指派。第三步设置Neck参数。在BGA扇出时切换到Neck逃逸出BGA后再回到Primary这样既能绕过密集焊盘又能保证阻抗基本稳定。Neck Length不要设得太长否则整条差分线长时间以细线宽走阻抗就完全偏离了。第四步用Route Differential Pair命令走线。点击一对焊盘中的一个另一根会自动跟上来在Options面板里可以切换Primary和Neck模式。走线过程中要留意差分对是否始终保持着设定的间距不要在某个拐角处两根线突然分开。第五步等长调整。走完差分线后看CM里Differential Pair的Skew列如果超了容差用Route Delay Tune做蛇形等长。蛇形线的间距建议至少3倍线宽否则蛇形相邻段之间会产生寄生耦合相位补偿变成了干扰源。实操中还有几个经验值得记下来换层时差分对的两个过孔尽量靠近放置并且最好在旁边加一个回流地孔这样参考平面切换时回流路径不会出现大的不连续。差分线远离其他信号线至少要3H以上H是介质厚度尤其不能和时钟线平行长距离走。差分对内不要出现T点分叉任何stub对高速信号都是灾难。检查等长时不要用眼睛看直接看软件里的数值对内Skew尽量控制在±5mil以内高频接口可能会要求±2mil。4. DRC检查与问题排查把隐患挡在制板之前4.1 常见DRC错误类型与定位方法在Allegro里DRC错误会以标志形式显示在错误位置附近最常见的是一个小圆圈或者菱形标记。你可以通过菜单Display Status查看DRC总体数量也可以在Find面板里勾选DRC markers来批量选中错误。常见错误速查表DRC错误类型常见原因处理思路Line to Line spacing两根不同网络走线间距过近检查是否属于不同Net Class查看Class to Class交叉规则Line to Pin spacing走线离焊盘太近调整走线走向或调整对应Spacing CSetMin Line Width线宽小于规则设定检查是否走在Neck区域没切回来BGA扇出后要恢复主宽度Differential Pair Gap差分对内间距超出规则检查Primary/Neck设置走线过程中是否被拉开Unequal Length等长超差做蛇形等长调整折线位置Stub信号线上有分支残留删除短支线严重时重新走线定位错误时直接点击DRC标记然后Display Highlight高亮相关网络再右键跳转到错误坐标效率比较高。我个人的习惯是先跑一遍完整DRC然后按错误类型过滤一类一类清。不要看到一个点一个点去处理那样容易遗漏而且效率极低。4.2 从AD转Allegro最容易犯迷糊的几个点很多从Altium Designer转过来的工程师对AD里“Design Rules”的设置有肌肉记忆转到Allegro之后最大的障碍是概念映射不上。这里给一张对照表AD概念Allegro概念说明Design Rules ClearanceSpacing Constraint SetAD直接填间距Allegro要先建CSet再应用Design Rules WidthPhysical Constraint Set线宽和过孔类型归到PhysicalDifferential Pairs RoutingDifferential Pair Electrical规则差分对参数在CM的Electrical里管理Rule PriorityClass to Class交叉表优先级逻辑不存在改成矩阵方式另外AD里你可以直接选中某根走线改WidthAllegro里如果你直接改线宽很可能会被DRC打回。更规范的做法是给网络分配合适的CSet让线宽跟着规则走而不是手动一条一条改。从AD转过来还有一个习惯要改AD的规则优先级通过拖拽顺序来控制Allegro则是靠“目标对象”精确匹配。一开始可能觉得不如AD方便但网络数量一多这种“模板化”的模式反而更好维护因为规则本身是全局统一的而不是靠优先级列表堆出来的。5. 常见问题速查与实用经验补充5.1 规则设置时我亲测踩过的坑第一条把所有网络都塞进同一个Net Class。刚开始图省事后面想用区域规则的时候发现Class里乱成一锅粥只好回头拆分重做白白浪费半天。第二条不设Class to Class交叉规则。以为两边的Spacing CSet会自动取较大值实际上Allegro不会自动合并必须手动确认交叉点才能生效。第三条差分对Neck Length设得太长。整条差分线一直以细线宽走阻抗偏了不知道最后仿真才发现问题。第四条Same Net Spacing默认关闭。电源平面内部同网络间距问题查不出来板厂DFM阶段反馈才发现来回折腾好几天。第五条走完线不跑DRC就导出生产文件。到板厂那边反馈间距不够一来一回浪费时间。Allegro里可以在Display Status里更新DRC或者执行Update DRC确保规则修改之后及时刷新。5.2 辅助工具与版本兼容问题Allegro 17.4是SPB 17.4这个大版本网上有很多第三方Skill脚本和辅助布线工具比如前阵子有人问的“电路精灵”这类插件能不能用在17.4上。这类工具的本质是调用Allegro的Skill接口能不能用取决于插件是否适配17.4这个版本以及Skill API是否兼容。我的观点是可以试但不要依赖。辅助工具能帮你自动化一部分机械操作但它不可能替你理解每个CSet在整板规则体系中扮演的角色。如果规则本身没理清楚插件越强大返工的时候越痛苦。先把原生Constraint Manager用熟再用辅助工具提升效率这个顺序一定不要反。5.3 规则模板的长期价值如果你所在的公司或者你个人有多块板子要做最值得做的一件事就是把当前项目验证过的规则导出保存为模板。Allegro支持在Constraint Manager里导出约束文件下次新项目直接导入再根据新叠层和接口需求微调即可。这样做有三个好处避免每次从零配置Physical和Spacing节省大量重复劳动团队内部规则口径统一评审时沟通成本低经过验证的规则模板板厂DFM审核通过率也会明显提高。导入导出的时候注意核对一遍Net Class信息因为新项目网络名和旧项目不同需要重新映射网络到对应类。我记得刚开始用Allegro 17.4的时候光是理解Physical和Spacing的区别就花了不少时间后来真正带项目才明白规则设置的本质是“先把约束想清楚再让工具帮你守住约束”。每次新项目启动第一件事就是花半天时间把Net Class、CSet和层叠关系整理干净后面布线真的会顺畅很多。这里的参数和步骤都来自我自己的工程实践不同叠层、不同工厂能力下数值肯定有差异但思路是可以直接套用的。最后补一句刚开始接触差分走线的话别急着追求花哨操作找一对USB或者一对LVDS从规则建立到实物拉通完整走一遍收获比看十篇教程都大。
返回列表