
1. 约束管理器到底在管什么1.1 从一次改板返工说起画过四层板以上的人大概都经历过这种场景板子发出去打样回来一测DDR跑不起来眼图一塌糊涂最后定位到某几根数据线等长差了将近200mil。回头翻设计文件发现当初布线时压根没设等长规则全靠手工拉线时目测。这种返工一次少则三五天多则两周打样费倒是小事项目节点耽误不起。Allegro的Constraint Manager就是干这个的。它不是一个“画图工具”而是一套贯穿原理图到PCB的规则引擎。你在里面定义的线宽、间距、等长、差分对、阻抗、过孔类型会直接约束布线器Router和自动检查DRC的行为。换句话说它决定了你的板子“能怎么画”和“画完合不合格”。很多人对Constraint Manager的理解停留在“设个线宽间距就完了”这其实只用了它两成功能。真正高效的用法是把电气规则、物理规则、间距规则分层管理让不同网络自动套用不同约束而不是一根根线去手动改。这篇内容适合已经能独立画简单板子、但一遇到高速信号或密集BGA就头疼的Layout工程师也适合想从AD转Allegro、被规则系统绕晕的朋友。1.2 规则分层别把所有约束塞进一个抽屉Constraint Manager的规则体系大致分几层Electrical电气规则、Physical物理规则、Spacing间距规则、Same Net Spacing同网络间距、Properties属性。每一层下面又按网络类Net Class、差分对Diff Pair、总线Bus、XNet等维度细分。我见过不少新手把所有规则都往Default里塞结果就是电源线想加宽得单独选网络改差分对想设等长又得重新建一套。正确的做法是先分类再套规则。比如把电源网络归到PWR类把DDR数据线归到DDR_DATA类把差分对归到DIFF类然后针对每个类设一套规则。这样后续加网络时只要把它归到对应的类规则自动生效不用重复劳动。提示Net Class的划分建议在原理图阶段就规划好通过OrCAD的Net Class属性传递到Allegro比在PCB里手动归类省事得多。1.3 为什么不用默认规则凑合Default规则是给“没有特殊要求的网络”兜底的。如果你把高速信号也扔进Default那等长、阻抗、差分间距这些约束就没法单独设。更麻烦的是Default的间距规则通常是全局最小的比如6mil。但BGA区域可能需要4mil才能出线而板边又需要8mil以上保证加工良率。如果全用Default要么布不通要么加工超差。所以Constraint Manager的核心思路是默认规则保底类规则覆盖个别网络再单独微调。这个优先级顺序是单个网络/对 Net Class Default。理解了这个优先级后面设规则就不会乱。2. 物理规则与间距规则的实操设置2.1 线宽规则从电流和阻抗两个维度倒推线宽不是拍脑袋定的。它受两个因素约束载流能力和特征阻抗。载流方面常用的经验公式是IPC-2221的曲线但实际工程中我习惯用简化估算1oz铜厚外层1mm线宽大约走1A内层减半。比如3A的电源线外层至少3mm约118mil内层至少6mm。当然这是保守值实际还要看温升要求。如果空间紧张可以并排走多根细线或者用铜皮Shape代替走线。阻抗方面单端50ohm、差分100ohm是常见目标。线宽和层叠结构直接相关。比如四层板常见的层叠是Top-GND-PWR-Bottom介质厚度约0.2mmEr约4.3。用Allegro自带的阻抗计算器在Cross Section里可以反推线宽。我实测下来这种层叠下Top层50ohm单端线宽大约6mil差分对间距6mil线宽约5mil。但不同板厂工艺不同最好让板厂提供他们的层叠参数再算。在Constraint Manager里设线宽路径是Physical规则 → 选中Net Class → 在Line Width栏填Min/Default/Max。这里有个细节Min是布线器允许的最小值Default是默认走线宽度Max是最大值。如果你希望某类网络必须走特定宽度把三个值设成一样即可。注意Neck模式颈缩的线宽在Physical规则里单独设。BGA出线时经常需要颈缩比如从6mil缩到4mil这段颈缩长度也要限制否则阻抗突变太严重。2.2 间距规则别只盯着全局最小值Spacing规则里Default的间距通常设6mil或8mil。但实际设计中不同网络之间需要不同间距。比如普通信号对普通信号6mil信号对电源8mil电源对电源10mil高压区域根据安规要求可能20mil以上在Constraint Manager里Spacing规则是一个二维矩阵行是网络类列也是网络类交叉点就是间距值。你可以为每个类单独设。比如PWR类对SIG类的间距设8milPWR对PWR设10mil。这里有个容易踩的坑Same Net Spacing。同网络的不同段之间比如过孔和走线、焊盘和走线也需要间距。如果设得太小DRC会报错设得太大又布不通。一般同网络间距设4mil左右BGA区域可以放宽到3mil。2.3 过孔规则别让过孔成为瓶颈过孔在Physical规则里设。常见参数过孔直径Via Diameter、钻孔直径Drill Diameter、过孔类型Through/Blind/Buried。我一般会建几种过孔普通信号过孔如8/16mil、电源过孔如12/24mil、BGA区域微孔如6/12mil。然后在Physical规则里针对不同Net Class指定允许的过孔列表。比如PWR类只允许用12/24和8/16SIG类可以用8/16和6/12。提示过孔列表在Physical规则的Via List里设置。如果某个网络没有指定过孔布线器会用Default里的过孔。所以Default里最好放最通用的那种。2.4 差分对规则等长、间距、阻抗三件套差分对在Electrical规则里设。主要参数Primary Gap差分对两根线之间的间距通常等于线宽如5mil。Primary Width线宽。Neck Gap/Width颈缩时的间距和宽度。Tolerance允许的间距误差一般设10%或20%。Min/Max Length最小和最大长度。Max Uncoupled Length最大未耦合长度这个很关键。差分对在出BGA或经过过孔时两根线会分开这段未耦合长度不能太长否则共模噪声会变大。一般设50mil到100mil。等长规则在Electrical规则的Relative Propagation Delay里设。选中差分对设一个目标长度比如2000mil然后设Tolerance比如50mil。布线时Allegro会实时显示长度差超了会变红。3. 从零搭建一套可复用的规则模板3.1 准备工作层叠与网络分类在打开Constraint Manager之前先把两件事做了层叠设置和网络分类。层叠在Cross Section里设。四层板典型层叠层类型厚度材料Top信号0.035mm铜Dielectric介质0.2mmFR4GND平面0.035mm铜Dielectric介质0.2mmFR4PWR平面0.035mm铜Dielectric介质0.2mmFR4Bottom信号0.035mm铜这个层叠下Top和Bottom的50ohm线宽大约6mil差分100ohm约5mil/6mil间距。具体数值用Allegro的Impedance Calculator算一下。网络分类在Constraint Manager的Net Class里做。我一般建这几个类PWR所有电源网络如VCC、VDD、3V3、5V等。GND地网络通常不需要特殊规则但可以单独设间距。CLK时钟信号如晶振输出、时钟芯片输出。DDR_DATADDR数据线。DDR_ADDRDDR地址线。DIFF所有差分对。SIG普通信号。分类时可以用通配符比如“VCC*”匹配所有以VCC开头的网络。这样后续加网络时只要命名规范自动归入对应类。3.2 物理规则模板线宽与过孔在Physical规则里为每个类设线宽和过孔Net ClassMin WidthDefault WidthMax WidthVia ListPWR10mil20mil50mil12/24, 8/16SIG4mil6mil20mil8/16, 6/12CLK5mil6mil6mil8/16DDR_DATA4mil5mil5mil8/16, 6/12DDR_ADDR4mil5mil5mil8/16, 6/12DIFF4mil5mil5mil8/16, 6/12这里PWR的Max设50mil是为了允许用粗线走大电流。CLK的MinDefaultMax6mil强制时钟线必须走6mil避免阻抗变化。3.3 间距规则模板矩阵式管理Spacing规则里建一个矩阵PWRSIGCLKDDRDIFFPWR10mil8mil8mil8mil8milSIG8mil6mil6mil6mil6milCLK8mil6mil6mil6mil6milDDR8mil6mil6mil5mil5milDIFF8mil6mil6mil5mil5milDDR和DIFF之间设5mil是为了在密集区域能布通。但要注意5mil间距对大多数板厂来说是常规工艺良率没问题。如果板厂工艺能力有限可以放宽到6mil。3.4 电气规则模板等长与差分Electrical规则里主要设三块差分对在Diff Pair里为DIFF类设Primary Gap5milPrimary Width5milNeck Gap4milNeck Width4milTolerance10%Max Uncoupled Length100mil。等长在Relative Propagation Delay里为DDR_DATA设目标长度2000milTolerance50mil。为DDR_ADDR设目标长度2200milTolerance100mil。为CLK设目标长度1500milTolerance20mil。时序如果有DDR还需要在Electrical规则的Total Etch Length或Pin Delay里设时序约束。这部分比较复杂建议参考芯片手册的时序要求结合PCB走线延迟约180ps/inch来算。注意等长规则里的目标长度不是随便填的。它应该基于最长的那个网络来定或者基于时序要求反推。如果目标长度设得太短布线器会强行绕线反而增加寄生参数。4. 规则调试与常见问题排查4.1 DRC报错太多怎么办设完规则一跑DRC满屏红叉这是新手最崩溃的时刻。别急先分类看报错类型。间距报错最常见。先看是哪个网络对哪个网络然后检查Spacing矩阵里对应的值是不是设得太小。如果是BGA区域可以单独为BGA区域设一个Region规则放宽间距。线宽报错通常是Min Width设得比实际走线宽。比如你设了Min6mil但BGA里走了4mil。解决办法是在Physical规则里为BGA区域设一个Region允许4mil。等长报错看是超长还是超短。超长的话检查是不是绕线太多超短的话可能是目标长度设得太长或者网络没走完。差分对报错常见的是Uncoupled Length超限。检查差分对在出BGA时是不是分开太远或者过孔处两根线长度差太大。4.2 规则优先级冲突前面说过优先级是单个网络 Net Class Default。但实际中还有Region规则和Room规则。Region是在PCB上画一个区域里面的规则可以覆盖全局规则。比如BGA区域可以设一个Region里面线宽4mil、间距4mil。Region规则的优先级高于Net Class规则。所以如果你在BGA Region里设了4mil但Net Class里设了6milBGA里会按4mil走。这个特性很有用但也要小心如果Region画得太大把不该放宽的地方也放宽了就会出问题。4.3 规则导入导出与复用Constraint Manager的规则可以导出成.dcf文件下次新项目直接导入。但导入时要注意网络名可能不一样。比如旧项目叫VCC_3V3新项目叫3V3导入后规则不会自动匹配。解决办法是用通配符或者在导入后手动重新归类。我一般会建一个“模板板”里面把所有规则都设好网络类也用通配符。新项目开始时先把模板板的.brd文件复制一份删掉里面的走线和器件保留规则和层叠。这样比从头设规则快得多。4.4 常见问题速查表问题可能原因解决办法DRC报间距错误Spacing矩阵值太小检查对应网络类的间距BGA区域用Region放宽线宽不够Min Width设太大为BGA区域设Region允许更小线宽差分对等长超差目标长度不合理重新计算目标长度或放宽Tolerance过孔不被允许Via List没包含该过孔在Physical规则里把过孔加入对应类的Via List规则导入后不生效网络名不匹配用通配符重新归类或手动调整铜皮被DRC报错Same Net Spacing太小增大同网络间距或调整铜皮避让等长绕线太多目标长度设太短基于最长网络重设目标长度差分对阻抗不对线宽/间距与层叠不匹配用Impedance Calculator重新计算5. 高效操作的几个私房技巧5.1 用Skill脚本批量改规则Allegro支持Skill脚本可以批量修改规则。比如把所有PWR类的线宽从20mil改成25mil用脚本几秒钟搞定手动改得点半天。网上有不少现成的Skill脚本比如批量改线宽、批量加过孔、批量设等长。我常用的一个脚本是axlDBChangeDesignRules可以按类批量改规则。如果你不会写Skill也可以用Allegro自带的“Find and Replace”功能在Constraint Manager里批量替换数值。但要注意替换前先备份.brd文件。5.2 实时DRC与Online DRCAllegro的Online DRC可以在布线时实时检查规则。开启方法在Setup → Constraints → Mode里把Online DRC打开。这样你走线时如果违反规则线会变红不用等跑完DRC才发现。但Online DRC会拖慢布线速度尤其是大板子。我的做法是布局阶段关掉布线阶段打开最后再跑一次完整DRC。5.3 规则模板的版本管理规则模板也要版本管理。我一般用Git管理.dcf文件和.brd模板。每次改规则提交一次写清楚改了什么、为什么改。这样如果新规则导致问题可以快速回滚。提示.dcf文件是文本格式可以用Git diff看具体改了哪些规则。比二进制文件方便得多。5.4 与板厂沟通工艺能力规则设得再漂亮板厂做不出来也是白搭。发板前把线宽、间距、过孔、层叠这些参数发给板厂确认。特别是最小线宽/间距、最小过孔、阻抗控制要求。板厂会回复他们的工艺能力比如最小线宽4mil、最小间距4mil、最小过孔6/12mil。如果设计超出了要么改设计要么换板厂。我一般会在Constraint Manager里设一个“工艺底线”规则比如Min Width4milMin Spacing4mil。这样即使某个区域放宽了也不会低于板厂能力。5.5 规则检查清单发板前按这个清单过一遍[ ] 所有电源网络是否归入PWR类线宽是否满足载流要求[ ] 差分对是否设了等长、间距、阻抗[ ] DDR数据线是否设了等长Tolerance是否合理[ ] 时钟线是否设了线宽和间距是否包地[ ] BGA区域是否设了Region规则线宽间距是否放宽[ ] 过孔列表是否包含所有需要的过孔类型[ ] Same Net Spacing是否设了铜皮避让是否正常[ ] Online DRC是否跑过有没有遗漏的报错[ ] 规则是否导出备份版本是否记录这套流程走下来基本能避免大部分规则相关的返工。Constraint Manager刚开始用会觉得繁琐但一旦模板建好后面新项目就是复制粘贴的事。我现在的做法是新项目先复制模板板改层叠和网络名跑一遍DRC然后开始布局。规则的事基本不用再操心了。