4、物理约束基础:物理约束的概念、线宽线距约束、区域规则约束
好,咱们今天聊聊物理约束。说实话,很多刚接触Allegro的朋友,一打开约束管理器就头大——密密麻麻的表格,各种参数,不知道从哪下手。我当年也是这样,看着Physical Constraint Set那一堆选项,心里直犯嘀咕:这玩意儿到底管什么用?
其实说白了,物理约束就是告诉软件:你的PCB走线应该长什么样。线多宽、间距多大、过孔用哪种,这些都是物理约束管的。它不像电气约束那样关心信号质量,它更关心的是——你能不能把板子做出来,做出来能不能稳定工作。
4.1 物理约束到底是什么?
我个人的理解是这样的:物理约束就是给PCB的每一根走线定规矩。你想想看,一块板子上几百上千条走线,要是没个规矩,那不乱套了?
物理约束主要管三件事:
- 线宽:走线该多粗?信号线、电源线、地线,要求都不一样
- 线距:线与线之间隔多远?太近了容易串扰,太远了板子又做不大
- 过孔:用什么尺寸的过孔?焊盘多大?孔径多少?
嗯,这里要注意一点:物理约束和电气约束是两码事。电气约束管的是时序、阻抗这些信号完整性的事儿;物理约束管的是几何尺寸、制造工艺这些实实在在的东西。两者相辅相成,缺一不可。
核心要点:物理约束是PCB设计的「交通规则」。没有它,你的走线就像没有红绿灯的十字路口——早晚得出事。
4.2 线宽线距约束——最常用的基本功
线宽线距,这是物理约束里最基础、最常用的内容。我在项目中遇到过不少新手,上来就问:「线宽设多少合适?」这个问题其实没有标准答案,得看你的板子是什么类型。
一般来说,常规数字信号走线,我习惯设4-6mil的线宽。为什么是这个范围?因为大多数PCB工厂都能做,成本也低。但如果你做的是高速板,比如DDR、PCIe这些,那就得按阻抗要求来算了——50欧姆单端、100欧姆差分,线宽可能要到5-8mil甚至更宽。
线距这块,我有个经验值:3W原则。什么意思?就是线间距至少是线宽的3倍。比如你走5mil的线,间距至少15mil。这样做能有效减少串扰。当然,实际项目中很难完全做到,尤其是BGA出线的地方,能保证1.5倍就不错了。
咱们看看Allegro里怎么设:
// 在约束管理器中创建物理约束集
// 路径:Setup -> Constraints -> Constraint Manager
// 选择 Physical -> All Layers
// 新建一个约束集,比如叫 "SIGNAL_4MIL"
// 设置如下参数:
// Line Width: Min=4, Max=8, Preferred=5
// Line to Line: Min=5, Preferred=6
// Line to Pad: Min=5, Preferred=6
// Pad to Pad: Min=6, Preferred=8
你看,这里有个Min、Max、Preferred三个值。Min是最小值,工厂能做但良率低;Preferred是推荐值,设计时尽量用这个;Max是最大值,一般不用管,除非你有特殊要求。
我的小技巧:做BGA扇出的时候,线宽线距往往要压缩。我一般会单独建一个约束集,比如叫 "BGA_FANOUT",线宽设3.5mil,线距设4mil。这样BGA区域能走通,其他地方还是用常规值。别怕设多个约束集,Allegro支持得很好的。
4.3 区域规则约束——让不同区域各守各的规矩
区域规则,英文叫Region Rules,或者Area Rules。这个功能太实用了,我几乎每个项目都会用到。
为什么要用区域规则?你想想看,一块板子上不可能所有地方都用一样的线宽线距。BGA下面空间紧张,得用细线;电源模块电流大,得用粗线;射频区域要严格控制阻抗,线宽线距都得特殊处理。这时候,区域规则就派上用场了。
在Allegro里,区域规则的设置分两步:
- 画区域:用Shape或者Route Keepin工具,在板子上画一个闭合区域
- 绑规则:把这个区域关联到一个物理约束集上
具体操作是这样的:
// 第一步:画区域
// 菜单栏 -> Shape -> Polygon
// 在需要特殊约束的地方画一个多边形
// 第二步:绑定规则
// 选中画好的区域,右键 -> Properties
// 在属性对话框里找到 "Physical Constraint Set"
// 选择你提前建好的约束集,比如 "POWER_20MIL"
我曾经在一个项目中遇到过这样的问题:板子上有个DC-DC模块,电流高达5A。如果用常规的6mil线宽,铜皮根本扛不住。我就在DC-DC周围画了个区域,绑了一个叫 "POWER_THICK" 的约束集,线宽设到20mil,线距也相应加大。这样一来,电源走线粗壮有力,信号线还是细的,互不影响。
注意:区域规则是有优先级的。如果一条走线同时落在多个区域内,Allegro会按优先级最高的那个来执行。优先级顺序是:最内层区域 > 外层区域 > 全局规则。这个逻辑要搞清楚,不然容易出bug。
4.4 物理约束的层级关系
说到优先级,我顺便把物理约束的层级关系捋一捋。Allegro的约束体系是分层的,从高到低大概是这样的:
| 层级 | 说明 | 示例 |
|---|---|---|
| 区域规则 | 最高优先级,只对特定区域生效 | BGA区域、电源区域 |
| 网络规则 | 针对特定网络或网络组 | CLK信号、DDR数据线 |
| 约束集规则 | 通用的约束模板 | SIGNAL_4MIL、POWER_20MIL |
| 全局规则 | 最低优先级,全板生效 | 默认的线宽线距 |
这个层级关系很重要。我见过有人设了全局规则,又设了网络规则,结果发现走线还是按全局的来——后来一查,原来是网络规则没设对优先级。嗯,这种坑我踩过,所以提醒大家注意。
4.5 实战建议:怎么规划物理约束?
讲了这么多,最后给点实战建议。我个人做项目的习惯是这样的:
- 先建模板:把常用的约束集提前建好,比如信号线、电源线、地线、差分线,各建一套。这样新项目来了直接导入,省事。
- 再画区域:根据板子的布局,把需要特殊处理的地方圈出来,比如BGA、DDR、电源模块、射频区域。
- 最后调优:走线过程中发现哪里走不通,再微调约束值。别一开始就把约束设得太死,给自己留点余地。
我曾经有个项目,一开始把线距设得特别大,结果BGA扇出死活走不通。后来把BGA区域的线距从6mil降到4mil,问题就解决了。所以啊,约束是死的,人是活的,该灵活的时候要灵活。
总结一下:物理约束是PCB设计的基石。线宽线距管的是「能不能做」,区域规则管的是「怎么做更好」。把这两样玩透了,你的PCB设计水平就上了一个台阶。
好,这一章就到这儿。下一章咱们聊聊差分对的物理约束,那个更有意思。差分线怎么设线宽、怎么控制间距、怎么保证等长……到时候细说。