第三章 约束设计环境搭建:常用EDA工具与约束管理器入门

做PCB约束设计,第一件事不是画线,而是把环境搭好。我见过不少新手直接打开软件就开始拉线,结果后面约束加不进去,改得想哭。

你想想看,约束作为一种设计意图,必须依附在EDA工具里才能生效。所以这一章,我们先把主流工具的约束环境摸一遍。我自己用过Allegro、Altium、PADS,每种工具的约束管理器长得都不一样,但核心逻辑是通的。

约束设计环境搭建流程图 选择EDA工具 安装与配置 打开约束管理器 创建约束规则 验证与调整 不满足需求时回退修改 💡 工具选择取决于公司标准、团队协同、信号速率。 同一套约束数据可以导入不同EDA,但需要适配

3.1 主流EDA工具概览

市面上能用来做PCB约束设计的工具有不少,但真正在高速设计中站得住脚的,主要还是Cadence Allegro、Altium Designer和Mentor PADS。我最早是从Altium入门的,后来做高速差分线才切换到Allegro,这中间的差别还是蛮大的。

工具厂商约束管理方式适用场景学习曲线
AllegroCadenceConstraint Manager (CM) 独立窗口高速数字、射频、多层板陡峭,但上限高
Altium DesignerAltiumPCB Rules and Constraints Editor 集成于PCB中低速、小团队、快速原型较平缓
PADSMentor (Siemens)PADS Router 中的约束规则中等复杂度、消费电子中等

说白了,选哪个工具要看你的项目类型。如果你天天做DDR4、PCIE Gen4,那Allegro基本是绕不开的。但要是简单两层板,Altium完全够用,而且上手快。

3.2 Allegro约束管理器初探

Allegro的约束管理器(CM)是独立于PCB Editor的窗口,很多人第一次打开会懵。怎么打开?很简单,在Allegro PCB Editor里选择 Setup → Constraints → Constraint Manager,或者直接快捷键 Ctrl+Shift+C。

界面分为三个主要区域:

  • 对象树(左侧):用于选择网络、差分对、XNet、总线等。
  • 工作区(右侧表格):显示选中对象的约束属性,比如线宽、线距、拓扑规则等。
  • 电子表格视图:可以直接在表格里修改数值,有点像Excel。

我记得第一次用CM时,找了半天不知道在哪里设差分对的间距公差。后来发现要切换到 Electrical 选项卡下的 DiffPair 工作表。嗯,这里要注意,Allegro的约束是分“电规则”和“物理规则”两层的,物理规则管线宽线距,电规则管延时、阻抗、串扰等。

核心概念:Allegro CM 中的约束以 Constraint Set(约束集)为单位。你可以先定义一组约束集,然后把它分配给多个网络,这样改一处就能同步更新所有网络。

举个实际例子,我经常这样新建一个差分对约束集:

1. 切换到 Physical 选项卡 → All Layers
2. 右键 → Create → Constraint Set
3. 输入名称(比如 DIFF_100OHM)
4. 设置 Line Width = 5mil, Line Space = 8mil
5. 切换到 DiffPair 工作表
6. 为刚才的约束集设置 Phase Tolerance = 0.5mil
7. 回到 Object Tree 选中差分对网络,右键 Assign → 选择 DIFF_100OHM

我个人习惯:把常用的约束集存成 .dcf 文件(Design Constraints File)。新建项目时直接导入,省得每次重新输入。路径在 File → Export → Constraints…

3.3 Altium的约束设计方式

Altium的规则编辑器在 Design → Rules 里,它是一个列表式的界面,左侧按类别展开如 Routing、SMT、Plane等。你选择一条规则,右边就会显示该规则的具体参数和范围,还有优先级排序。

这里有个坑:Altium的规则应用范围是靠 Where The Object Matches 条件来筛选的,比如 InNet('CLK') 或者 InClass('DIFF')。我第一次用的时候,把两条规则都设置成适用整个板子,结果优先级没调好,规则互相打架。

警告:Altium的规则优先级从下往上递增(列表最底部的规则优先级最高)。如果你发现约束没生效,先检查规则的顺序,再检查匹配条件是否精确。

另外,Altium的差分对约束需要在 Design → Classes 里先创建差分对类,然后在 Routing 规则里选择“Differential Pairs Routing”。我个人觉得Altium的约束粒度比Allegro粗,做低速板完全够用,但做两片以上DDR3就有点吃力了。

3.4 PADS的约束设计方式

PADS的约束体系跟前面两家不同。它有两个主要编辑器:PADS Logic(原理图)和 PADS Router(布线器)。约束通常是在Router里设置的,通过 Setup → Design Rules 打开对话框。

PADS的规则分为四层:

  • Default Rules:全局默认规则
  • Class Rules:按网络类别设置
  • Net Rules:针对单个网络
  • Conditional Rules:条件规则,比如“当这个网络与另一个网络相邻时,间距加倍”

我在一个消费电子项目里用过PADS,它的条件规则挺灵活,但界面有点老,没有Allegro那么直观。如果你想快速修改一两个网络的线宽,直接在Net Rules里改就行,比覆盖全局规则要安全。

特性Allegro CMAltium RulesPADS Router
约束与编辑分离独立窗口集成在PCB中集成在Router中
差分对支持原生,可设相位误差通过差分对类需单独定义
拓扑约束(如T点)强大,支持XNet建模有限有限
导入导出能力DCF/EXCELRULE文件ASC文件

3.5 约束管理器通用操作技巧

不管用哪个工具,有些操作习惯是通用的。我总结了几条,你可以直接用到实际工作中。

  1. 命名规范:约束集的名字最好能反映功能,比如 DDR3_ADDR_GROUP、USB_DP_DM,别用 CSet1、CSet2 这种,不然同事看不懂。
  2. 分组与批量分配:把同类型的网络(比如所有地址线)建一个网络类或总线,然后一次性分配约束集。我见过有人一条一条网络手动分配,又慢又容易漏。
  3. 版本管理:约束文件(如Allegro的DCF、Altium的规则文件)应该纳入版本控制。我曾经在项目快结束时发现约束被误改了,还好有SVN历史记录可以回滚。

避坑指南:我曾经把一个Altium项目的规则文件直接导入到Allegro里,结果线宽单位不一致(公制 vs 英制),导致所有走线都变细了。嗯,这里要注意,跨工具迁移约束时,一定要先确认单位设置。