ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

一套Cadence视频教程工程,让Allegro PCB设计全流程跑通

一套Cadence视频教程工程,让Allegro PCB设计全流程跑通

简介:于争博士Cadence视频教程配套工程文件,面向电子设计自动化学习者与PCB设计入门和进阶人群,围绕Cadence Allegro与OrCAD工具链,提供从原理图设计、元器件库搭建到布局布线的完整实操案例,也适合希望巩固流程的电子工程师。压缩包共399个文件,约3.97MB,内含Allegro工程目录下常见的板级文件、封装符号、焊盘、封装、元器件库、光绘输出以及大量配置说明,覆盖设计输入到生产输出的关键环节。已有443人学习下载,适合对照视频边看边练,借助真实工程理解封装、焊盘、光绘层等核心概念,还能厘清各文件在整个设计流程中的具体作用。通过这套工程,读者可获得可直接打开、修改和仿真的Cadence练习环境,快速熟悉PCB设计标准流程与文件管理方式,提升从原理图绘制到制板前各阶段的实际操作能力。

1. 一套Cadence视频教程工程,能帮你把工具链真正跑通

做硬件和嵌入式开发的人电脑里多少都存过几套 Cadence 教程,但真正拉开差距的其实不是视频时长,而是有没有一套能反复打开的配套工程。这套 Cadence 视频教程工程,就是以 Allegro 为主线、把原理图、封装库、网表、约束规则和 PCB 板级文件打包成闭环的一份配套资源。下载它不是为了“看”,而是为了“改”——打开工程跟着教程改线路、调约束、走完整个设计链路。从刚转 PCB 方向的新手,到被流程细节卡住的老工程师,都能在这里找到对应自己那一段的参考。

2. 打开工程包之前:先看目录、版本与库路径

很多人拿到压缩包就双击 .brd,结果要么黑屏,要么一大堆封装显示成方框。其实这些问题在打开文件之前,通过目录和版本核对就能避掉大半。

2.1 先看懂工程目录:文件类型与用途对照

视频教程的配套工程,一般不会把所有文件堆在一个文件夹里,而是分成原理图、封装库、PCB 和输出几个子目录。拿到手之后,我建议先把目录结构当说明书读一遍,搞清楚每个文件的角色,后面遇到问题才能快速定位。下面是一份典型的 Cadence 教程工程目录对照,我按自己的使用习惯整理了主要文件的用途与打开方式。

目录 / 文件作用打开方式
xxx.opj / xxx.dsnOrCAD Capture 工程,保存原理图设计Capture CIS
xxx.net网表文件,由原理图生成、供 Allegro 导入文本,Allegro 导入
symbols / xxx.dra封装绘图文件Symbol Editor
pads / xxx.pad焊盘文件,包含焊盘尺寸与钻孔参数Padstack Editor
xxx.brdAllegro PCB 板级文件PCB Editor
constraints.dcf约束规则文件,线宽线距等规则Constraint Manager
gerber / art制造输出文件,验证用的最后产物可复查

以这套教程工程为例,目录里通常会有一个叫“Library”的文件夹,里面拆成 symbols 和 pads 两个子目录。视频里老师反复强调的其实就一句话:Allegro 打开 .brd 时不会把封装焊盘打包进板文件里,而是通过搜索路径去外部找。换一台电脑打开工程,第一件事就是检查 Setup > User Preferences 里的 padpath 与 psmpath,把解压出来的 pads 目录和 symbols 目录加进去,否则就会出现“板子打开但元件全部变框”的现象。

提示:如果打开板子后元件显示异常,多数不是 .brd 坏了,而是库路径没配好。

2.2 版本匹配:为什么高版本反而打不开低版本文件

Cadence 工具链的版本体系有一个容易踩的坑:不同大版本之间的数据库格式并不完全兼容。很多人习惯性地以为高版本软件能打开所有低版本文件,但在 Allegro 里情况要复杂一些。17.4 版本的 PCB Editor 打开 16.6 的 .brd,很多时候能正常打开;反过来,16.6 版本打开 17.4 的 .brd,会直接提示数据库版本太新。同一个工程包里,如果原理图是 17.4 保存、PCB 是 16.6 保存,就会出现两台电脑表现完全不一样的情况。

我拿这套工程做复现时,一般会先检查 .brd 的数据库版本。在 Allegro 的 Command 窗口输入 version 命令,可以看到当前板文件的格式信息。如果版本差了一个大版本,优先让高版本导出为低版本格式。Allegro 里对应的功能是 File > Export > Downrev Design,下拉框里会列出可导出的版本,比如 17.2、16.6。Downrev 会生成独立文件,不会覆盖原文件,算是给迁移路径留了一颗后悔药。需要注意的是,导出后要重新检查一下封装属性,极少数情况下较新的属性字段会在降版本过程里丢失。

代码实现方面,可以用命令行快速判断文件版本,避免反复打开试错:

# 用 strings 提取 brd 文件头部版本信息(Windows 下可用 findstr 替代) strings D:/cadence_tutorial/project/xxx.brd | grep -i "Release" | head -5

这段命令把 .brd 二进制文件里包含的版本字符串过滤出来,帮助在打开前确认数据库格式。逻辑上其实很简单:Allegro 的 .brd 虽然大部分是二进制存储,但文件头里通常保留了可读的版本标识;grep 抓出 Release 关键字后,再看是 16.6、17.2 还是 17.4,就能决定要不要先让对方降版本。参数说明里,head -5 限制输出行数,避免因为匹配到多处造成刷屏;如果系统没有 strings 工具,直接靠 version 命令、或者 File > Properties 里查看数据库版本也是等效做法。

2.3 库路径配置:psmpath 和 padpath 决定封装能否显示

版本没问题之后,再处理库路径。Allegro 的封装搜索路径主要由两个环境变量控制:psmpath 负责找封装符号,padpath 负责找焊盘。打开 Setup > User Preferences,在 Design Paths 这一页能看到 Pad Path 和 PSMPath(Package Symbol Path)两个列表,里面按顺序排列着工具依次查找的目录。

教程工程在你电脑上出现封装丢失,本质上就是这两个 path 没指到对应目录。我一般会把工程统一放在纯英文路径下,比如 D:/cadence_tutorial/project,然后把 symbols 和 pads 的绝对路径追加到列表最前面。路径里不能有中文,也不能带空格,否则某些 16.x 版本在加载库时会出现识别失败的问题。这个习惯是从一次工程集体翻车的经历里总结出来的:当时整个团队把工程放在带空格的目录里,结果只有一个人能正常打开,其他人倒腾了半个下午才发现是路径空格搞的鬼。

# 在 Windows 环境准备标准目录结构 mkdir -p D:/cadence_tutorial/project/symbols mkdir -p D:/cadence_tutorial/project/pads mkdir -p D:/cadence_tutorial/project/drc # 把教程包里的封装和焊盘复制到统一目录 xcopy /E /Y D:/cadence_tutorial/工程包/library/symbols D:/cadence_tutorial/project/symbols xcopy /E /Y D:/cadence_tutorial/工程包/library/pads D:/cadence_tutorial/project/pads

上面这段命令解决的是“文件散落各处、Allegro 找不到库”的底层问题。逻辑说明:第一步用 mkdir -p 建立标准工作目录,保证路径深度一致;第二步用 xcopy 把不同来源的库文件统一收拢,/E 表示包含空目录的递归复制,/Y 表示覆盖时不询问。参数说明:这里把“工程包”这个含中文的路径作为源路径,恰好可以验证前面提到的中文路径问题——如果你在 xcopy 阶段就发现中文路径读取异常,那后面 Allegro 里大概率也会出问题,最好先把工程包改名再复制。

配置好目录后,还要在 Allegro 界面的 User Preferences 中把两个路径添加到列表顶部。这一步的操作路径因版本略有差别:17.x 在 Setup > User Preferences > Design Paths > Pad Path 与 PSMPath 下编辑;16.6 则在 File > User Preferences 里。添加后不需要重启软件,重新打开板子就能看到封装恢复。

3. 把演示工程变成自己的设计:从原理图到 PCB 的完整主线

目录和库路径整理好后,这套工程就变成了一块可以反复练习的“练习板”。这一章沿着原理图修正、网表导入、约束加载、布局布线四个节点走一遍实际操作。

3.1 从 OrCAD Capture 开始:原理图预检要查什么

视频教程里经常出现一种情况:老师把原理图打开,直接就开始讲操作,很多初学者跟着做却没有发现问题。实际上不少教程工程会故意保留一些“半成品状态”,比如某个元件没填 PCB Footprint、某个网络的命名和 PCB 里对不上。如果在原理图阶段不检查,到 Allegro 里导入网表时就会看到一堆报错。

我先说检查的重点。打开 xxx.opj 后,先进入 Edit > Property Editor,把当前页所有元件列出来,筛选 Property 为“PCB Footprint”的列。这一步是看每个元件是否都有对应封装名。下面是原理图预检的几个关键项目。

校验项位置常见问题
元件位号是否重复Property Editor重复位号导入后覆盖
PCB Footprint 是否为空Property Editor网表导入后封装不匹配
Value 属性是否缺失Property EditorBOM 和仿真阶段会乱
引脚名与封装焊盘名原理图 symbol 引脚名称导入后网络短接

遇到 PCB Footprint 为空的元件,要对照教程视频里对应的封装名称补上。这里有个细节值得注意:封装名必须和 Allegro 库里的符号名完全一致,大小写、下划线都不能差。以前我见过一个电容封装写成“C0603”和“c0603”混用的情况,结果导入后另一批器件的封装全部找不到,排查了很久才发现是大小写问题。

补完属性后,在 Capture 里跑一次 Design Rules Check。Tools > Design Rules Check 对话框里,至少勾选 Single node nets 和 Off-page connections 这两项。前者查孤立网络,后者查跨页连接符号。这一步不是追求原理图零警告,而是为了确保这套演示工程本身自洽。如果 DRC 报出几百条警告,先看有没有“F”开头的严重错误,再决定要不要继续往下走。

3.2 生成网表并导入 Allegro:参数选项与顺序

原理图预检通过后,进入网表环节。在 Capture 中点击 Tools > Create Netlist,弹出的对话框里有多个选项卡,做 PCB 设计时选 Allegro 选项卡。我不建议在这里乱动高级选项,保持默认的 Create Netlist 即可,最多需要确认输出路径和文件名。生成之后,会得到一个 .net 文件,这就是 Allegro 读取的网表。

打开 Allegro PCB Editor,执行 File > Import > Logic。在对话框里把 Logic type 选为 Netlist,然后加载刚才生成的 .net 文件。下面几个选项的取舍,新手比较容易搞混:

  • Replace changed netlist:用新网表覆盖旧网表,适合反复修改设计时迭代使用。
  • Ignore mismatched footprint:遇到封装不匹配时忽略,建议不要勾选,让错误直接暴露出来。
  • Allow undefined packages:允许未定义封装,通常也不勾选,否则导入时看不出问题,布局时才发现器件根本摆不出来。

导入的时候,Allegro 命令行窗口会实时输出结果。看到 ERROR 开头的行,不要慌,切回 Capture 修改原理图,再重新生成网表,再回到 Allegro 导入即可。这个过程不需要关闭工程,Allegro 支持热更新网表。很多新手在这里翻车是因为每改一次原理图就重开一次软件,浪费大量时间在工程加载上。

在正式导入前,可以用文本工具快速扫一遍网表,确认封装名是否和库里的名称对得上:

# 查看 netlist 中所有封装引用 grep -i "package" D:/cadence_tutorial/project/netlist/xxx.net | head -30

逻辑说明:网表文件里每一行基本都带有封装信息关键字,grep 把这些行抓出来,方便在导入前做一次肉眼验收。参数说明:-i 参数忽略大小写,避免因为“Package”和“package”的差异漏掉内容;head -30 只显示前面 30 行,防止 netlist 很长时刷屏。实际使用中,我最常用的是先统计封装种类,比如grep -o "C0[0-9]{4}" 网表文件 | sort | uniq -c,这样能快速看出有哪些容值、哪些封装占大头,和 BOM 对照时非常有效率。

3.3 约束规则加载:没有 DCF 的 DRC 毫无意义

很多教程工程里都带一个 constraints.dcf 文件,这就是 Allegro 里面所有间距、线宽、过孔规则的载体。打开方式为 Setup > Constraints > Constraint Manager。初次打开时,如果 Allegro 提示当前 design 里没有约束,需要用 File > Open 加载工程自带的 dcf 文件,或者从另一个 .brd 里复制规则。

为什么要这么强调 DCF?因为 Allegro 本身有默认约束值,但默认值通常很宽松,比如最小线距可能只有 0.15mm。教程工程里模拟的是实际产品设计,线距、线宽、过孔都是按某个特定叠层计算的。如果不加载 DCF 直接布线,Allegro 布线时不会报错,因为默认规则都能满足;等到后面 Update DRC,你会发现几万个错误喷涌而出。其实不是板子画错了,而是加载的规则不对,相当于拿错了尺子去量长度。

我建议在布线之前就把约束管理器里的规则过一遍。下表是这类教程工程里常见的一组约束底线,可以作为参考:

规则类别常见默认值说明
走线宽度0.2 / 0.3 / 0.5 mmMin / Default / Max
常规间距0.35 mm信号之间最小间距
孔到孔距离0.5 mm避免钻孔重叠
默认过孔孔径 0.25mm,外径 0.55mm单板尽量统一过孔
差分对目标阻抗100Ω ± 10%需要结合叠层计算

每一行参数都不是拍脑袋定的。走线宽度 0.2mm 的底线,对应的通常是有 1oz 表层铜厚的常规四层板;间距 0.35mm 则是绝大多数板厂默认工艺能力,不用额外加钱;差分对阻抗 100Ω 是 USB 这类接口的常用值,具体线宽线距要先用层叠参数算,工程自带的约束值如果和你的叠层不同,不能直接照抄。

在 Constraint Manager 的 Physical 页面里,可以给不同网络类别设置不同线宽规则。比如电源网络可以用比其他信号更宽的线,比如 0.8mm;时钟网络可以单独设。Best 的入门技巧是:先不建太多规则,只给三个网络类——DEFAULT、POWER、CLOCK——把 DEFAULT 的线宽拉到 0.3mm,POWER 拉到 0.6mm,CLOCK 用 0.3mm 但间距放大到 0.5mm。等把教程里的板子重画一遍,再回头增加详细约束,这样既不会一上来被规则管理器的复杂度压垮,又能保证布线全程覆盖 DRC 检查。

3.4 布局与布线:层叠设置、扇孔与关键参数

约束管理器搞定后,下一步是布局。绝大多数视频教程工程会用一个四层板结构:Top 和 Bottom 走信号,中间两层分别做完整地平面和电源平面。打开 Setup > Cross-section 可以看到叠层参数。如果工程自带的叠层被改动过,我这里提供一个常规参考:总厚度 1.6mm,表层铜厚 1oz,内层 0.5oz,FR4 介质介电常数取 4.2 到 4.5 之间。

布局阶段最重要的不是把元件摆得漂亮,而是先把结构件和接口定死。所有连接器、螺丝孔、指示灯、按键,必须先落在板框和结构图上。视频里老师通常先用 Quickplace 把所有元件抛到板框附近,再手动一个个拖到合适位置。这个操作在 Allegro 里是 Place > Quick Place,然后选择 By symbol 或 By room。如果工程自带 Room 属性,就用 By room,让元件依照设定的区域自动摆放,效率会高很多。

放完结构件和主要芯片后,开始扇孔。Route > Fanout 是给 BGA、LQFP 这类引脚密集器件做引出用的。这里有两个参数值得反复强调:一是 Fanout direction,优先设置成 Out,从器件中心向外引出;二是 Via switching 必须选择约束管理器里定义好的那个过孔,否则 Allegro 自动扇出时会生成一堆未知孔径的过孔,后面对比 Gerber 时完全对不上。

扇完孔就是布线。布线阶段我建议跟着工程原作者的思路走一遍:先走电源和时钟等关键网络,再走普通信号;优先把短网络布完,再去处理较长的绕线。这个顺序在视频里看着理所当然,但实际操作时很容易被“哪里能走就走哪里”带偏,导致后面电源回流路径被切断。我一般的习惯是先把所有电源网络设为高亮,再开始布信号线,这样在视觉上能时刻看到电源通道有没有被挤掉。

4. 复现这套工程时的四条踩坑记录与排查方法

教程工程的复现过程中,有几个问题是反复出现的。每次有同行发来同样的问题截图,我都能看出来毛病出在哪个环节。这里整理成现象、原因、解决的格式,方便对照。

4.1 坑一:打开 .brd 后界面黑屏或直接闪退

现象:双击 .brd 文件,Allegro 窗口启动后一片漆黑,鼠标转圈几秒后程序退出。

原因:大多出在图形加速模块上。Allegro 默认启用 OpenGL 加速,但部分集成显卡或双显卡笔记本对老式 OpenGL 调用的兼容性很差,轻则黑屏,重则闪退。这和工程文件本身无关,换一个文件大概率也会出现同样问题。

解决:启动 Allegro 时按住 Ctrl 键再打开文件,程序会弹出一个是否启用 OpenGL 的提示,选择 No。如果每次启动都闪退,也可以打开 Setup > User Preferences,在 Display 分类下把 Opengl 相关选项关闭。用这种方式打开板子后,元件显示速度和性能会有一点下降,但至少能看到东西,后面布线和检查都能正常进行。

4.2 坑二:封装变紫色或显示为方框

现象:板子能打开,但很多元件没有显示成实际封装外形,而是紫色高亮块或简单的灰色方框。

原因:Allegro 找不到对应的封装符号。.brd 文件里记录的是封装名称,真正的封装外形要从 psmpath 指向的目录里加载。换电脑后没有配置库路径,工具只能用默认的空 symbol 替代,于是显示成方框。

解决:在 Setup > User Preferences > Design Paths 下,把工程包的 symbols 目录加到 PSMPath 里,把 pads 目录加到 Pad Path 里。添加后不重启也能生效,重新打开文件即可。如果路径已经配置但仍然显示方框,检查封装名称是否和网表里的一致,比如在 Allegro 里执行 Tools > Symbols 查看有哪些符号被成功加载,对比网表里的封装名,能快速定位是拼写问题还是文件缺失问题。

4.3 坑三:导入网表后所有元件堆在原点附近

现象:网表导入过程没有报错,但 Allegro 画布上所有元件全部挤在坐标原点附近,根本没法继续布局。

原因:网表里没有携带放置坐标信息。Allegro 导入新网表时,默认把所有元件放在原点。如果工程里没有放置文件(placement file),也没有设置 Room 属性,就会看到密密麻麻的重叠。

解决:用 Edit > Move 命令,框选全部元件,把它们挪到板框上方空白区域,然后再执行 Place > Quick Place,选择按 Room 或按元件类别自动摆放。如果不想用自动布局,也可以配合 Align 指令按页脚器件排序放置。这个坑本身不是错误,是流程问题,只要意识到“网表只管连接关系,不管位置”这个底层逻辑,就不会在导入时期待元件自动摆好。

4.4 坑四:DRC 报告全是间距和线宽错误

现象:布线完成后执行 Update DRC,报告里显示几千个错误,几乎每一行都是 Spacing 或 Physical 约束问题。

原因:常见原因是约束规则根本没有加载。很多人导入网表后就直接布线,没有加载 DCF 文件,于是 Allegro 用的是系统默认规则。默认规则往往很粗,比如间距只有 0.15mm,教程工程的规则可能是 0.35mm,所以按新规则看,大量走线都属于违规。

解决:先在 Constraint Manager 里加载工程自带的 constraints.dcf,再执行 Update DRC。如果你已经手工改过部分规则,注意检查“Active”区域是否选择了正确的网络类,比如 DEFAULT 类里是否还有局部覆盖的规则。加载完规则后重新跑 DRC,就会发现错误数量从几千掉到几十。剩下的错误大部分是真实问题,比如跨分割走线、过孔落进禁止区域、丝印压焊盘等,这时候再逐条去看才会有意义。

5. 进阶:拿起这套工程练 DRC 自动化与规则吃透

工程文件本身最好的用途,就是拿来验证你对规则的理解。我的建议是别急着重新画一块板,而是把教程工程当成“测试夹具”:在约束管理器里修改某个参数,然后观察 DRC、布线结果和制造输出三者的联动变化。比如把 DEFAULT 线距从 0.35mm 改到 0.3mm,重新跑 DRC,记录哪些错误消失了、哪些还在;再把差分对目标阻抗从 100Ω 改成 90Ω,看层叠参数怎么联动调整。这种“改一个参数看一次结果”的练习,比从头画十遍板子更能帮你吃透 Cadence 的规则体系。

自动生成 DRC 报告并做统计分析,是这套工程里我最常用的进阶操作。Allegro 本身支持通过命令脚本批量执行检查,用 SKILL 脚本可以省去大量手动点击:

; 打开板子并执行 DRC 更新 axlOpenDesign("D:/cadence_tutorial/project/xxx.brd" "r") axlUpdateDrc() axlExecuteReport("drc.rpt") axlCloseDesign(nil)

这段脚本的作用是把三件事串起来:打开板子、触发 DRC 更新、把检查报告导出为 drc.rpt。逻辑说明:axlOpenDesign 的第二个参数填"r"表示只读模式,避免脚本运行过程中误改文件;axlUpdateDrc() 会按照当前约束管理器里的规则重新计算所有违例;axlExecuteReport 把结果写到指定文件。参数说明里最重要的是报告路径,一定要用绝对路径,而且目录要先存在,否则脚本会静默失败。

拿到报告后,可以再用脚本处理一下,把错误分类统计出来,重点观察哪一类问题占比最高。这里提供一个 Python 脚本示例:

import re from collections import Counter with open("drc.rpt", "r", encoding="latin-1") as f: text = f.read() codes = re.findall(r"(Spacing|Samenet|Soldermask|Placement|LineWidth)", text, re.I) print(Counter(codes).most_common(8))

逻辑说明:这段脚本把 DRC 报告里的错误关键字按类别计数,输出占比最高的前八类错误。参数说明:re.I 让匹配不区分大小写;most_common(8) 控制输出数量。实际使用中,我会重点看 Spacing 和 LineWidth 这两类:如果 Spacing 类占比太高,大概率是约束规则加载得不对,而不是板子画得不好;如果 Soldermask 类突然变多,通常是在改规则时动了阻焊层相关参数。

进阶的验证方法很简单:把教程工程里原有的规则改坏,再重新加载原始 DCF 文件夹,看工程能不能恢复到初始状态。能恢复,说明你已经理解了规则加载和覆盖的关系;不能,就回去把第 3 章 DCF 加载部分再走一遍。从那以后我每次拿到新的 Cadence 工程,都会强制先配好路径、核对版本、加载 DCF 再打开板子。这套检查流程让我避开了至少十次封装丢失和 DRC 误报的问题。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进