Cadence这套工具链,圈内人一般把它拆成两半来看:OrCAD Capture负责画原理图,Allegro负责做PCB。很多人装完Cadence,第一件事是打开Capture画原理图,画完图就卡在原地——不知道接下来怎么把原理图变成能导入Allegro布局布线的东西。这个过程中,网络表(Netlist)就是连接两个世界的桥梁,也是无数新手第一个崩溃点。
我在Cadence这套流程上跑了快十年,带过不少新人,也收拾过不少烂摊子。今天这篇不写大而全的教程,就聚焦一条主线:从Capture原理符号的处理,到最终导出能被Allegro识别的网络表,一步步走通,并补齐中间所有关键细节。包括符号规范、导出前检查、Create Netlist配置、下游Allegro导入、日志解读,以及一堆只有实际焊过板子、跑过产线才会知道的坑。适合正从Altium Designer或立创EDA迁到Cadence的工程师,也适合装完软件想快速跑通第一个流程的人。
1. 认识这条链路:Capture和Allegro是怎么分工协作的
1.1 为什么网络表是绕不开的枢纽
先明确一个概念:Capture产生的原理图数据(.dsn文件)和Allegro使用的板级数据(.brd文件)是两个完全不同的内部格式。Capture记录的是一种“逻辑连接关系”,Allegro需要的是“物理封装信息和网络连接清单”。两者之间不存在一个按钮就能无缝转换的通道,必须通过一个中间文件来对接,这个中间文件就是网络表。
网络表到底是什么?本质上它就是一个纯文本文件。打开它,里面记录的内容大概分两类:
- 元件清单:每个元件的位号(Reference)、封装名(Footprint)、属性值(Value)等。
- 网络连接关系:每个网络(Net)下面挂着哪些元件的哪个引脚(Pin)。
你可以把它理解成一张“菜谱流水单”。原理图是厨师画的成品效果图,PCB是最终端上桌的菜,而网络表就是中间那张写明了“哪个配菜进哪个盘”的工序单。如果没有这张单子,Allegro拿到一堆图形符号却不知道哪个引脚要连到哪个引脚,布局布线根本无从谈起。
这也是Cadence跟Altium Designer这类一体化EDA工具最大的理念差异。AD把原理图和PCB当成一个工程里的两个视图,底层数据天然互通;Cadence则采用松耦合设计,原理图和PCB各走各的格式,通过网络表交换数据。代价是多了一步操作,好处是整个流程更开放、可拆解、适合多人协作分工,这也是很多大型硬件团队选择Cadence的原因。
1.2 这条链路里最容易翻车的三个环节
我这些年接触到的网表导出问题,粗略统计下来,90%都集中在三个地方。
第一个是Footprint封装名不匹配。Capture里元件属性写的封装名,在Allegro封装库里找不到对应文件。这是最高频的报错,原因往往是拼写不一致、大小写不一致,或者封装库路径没配置好。
第二个是元件属性缺失或字段错误。比如Value为空、Reference重复、Device属性名不合法,这些问题在原理图里看着无关紧要,但到了网表导入阶段就是一个个炸药包。
第三个是网络命名和电源地符号的混用。有人习惯用一根Wire连接电源网络,有人把不同名称的电源符号当成同一个网络用,结果网表导出后出现单节点网络、无连接引脚,或者多个“看起来应该是同一个网络”的网络被拆成了好几个。
这三个问题,其实都可以在导出网表之前通过规范操作和DRC检查提前发现。后面我会每个都展开讲。
1.3 了解网表逻辑比背操作菜单更重要
不少人学Cadence喜欢背菜单:点这里、点那里、选这个选项。这种学法不是不行,但一旦报错就抓瞎,因为报错信息不会按菜单顺序告诉你哪里错了,只会告诉你哪个网络、哪个元件出了问题。
如果理解了网络表的本质,你拿到任何一段报错日志,都能顺着“网络表记录了什么”这条线去定位。比如Allegro报“Footprint not found”,你立刻就该想到去查网表文件里元件的Footprint字段写的是什么,再回Allegro封装库对照文件名。这种定位思维是可以举一反三的,也是我觉得比记住具体按钮更有价值的东西。
2. 原理符号规范化:把错误挡在网表生成之前
2.1 引脚编号与引脚类型:影响的不只是能不能导入
原理图符号上有两类引脚信息,直接决定网表质量:Pin Number(引脚编号)和Pin Type(引脚类型)。
Pin Number必须跟封装焊盘编号一一对应。你画一个SOT-23封装,引脚编号是1、2、3,那原理图符号里也必须用1、2、3,不能写成A、B、C。Allegro导入网表后,就是靠这个编号把引脚和焊盘对应的。我曾见过一个新人画三极管,原理图符号引脚编号跟封装焊盘编号对不上,结果网表导入没报错,但PCB上焊盘网络全乱了,直到打样回来上电才发现。
Pin Type则是一个更隐蔽的坑。Allegro在做电气规则检查(DRC)时,会根据引脚类型判断网络连接是否合理。比如一个Output引脚直接接另一个Output引脚,Allegro会认为可能存在驱动冲突,给出错误提示。问题是很多人在建库或画原理图时把电源引脚画成了Input,结果PCB阶段疯狂报错,排查半天才发现是符号库引脚类型不标准。
我的建议是:电源引脚用Power类型,普通信号引脚用Passive类型,时钟、驱动类引脚严格按照方向标注。这个习惯一旦养成,后期DRC报错会少一大半。
2.2 元件属性字段:网表内容的主角
在Capture里,每个元件符号背后都挂着一堆属性。网表导出时真正会用到的主要是这几个:
- Reference(位号):如R1、C3、U2。这个必须唯一,重复位号是网表检查的重点。
- Value(值):如10K、100nF、STM32F103。这个主要用于BOM和可读性,一般不影响网表导入。
- Footprint(PCB封装名):如R0603、C0805、LQFP48。这是Allegro导入时匹配库文件的关键字段,必须和封装库里的名字完全一致。
- Device(器件类型):有些网表格式会用到,尤其是需要生成Device文件时。
这里最容易被忽略的是Footprint字段里的空格和大小写。我在实际项目中见过无数报错,就是因为在Capture里封装名写成了“R 0603”多一个空格,而封装库文件名是“R0603”,Allegro就死活找不到。还有人是封装名大小写不一致,Windows下文件名不区分大小写,但Allegro的库匹配在某些配置下是区分大小写的,所以最好全链路统一大写。
属性编辑的操作很简单:双击元件符号,打开Property Editor,直接在表格里改。批量修改时可以先选中多个元件,再右键Edit Properties,用表格方式统一维护。
2.3 符号库的结构与跨工程复用
Capture的符号库文件后缀是.olb。一个.olb文件里可以放很多个Part(原理图符号)。在实际工作中,我强烈不建议每个工程师在自己电脑上各建各的库,那样十个项目下来就会产生十套不统一的符号和封装名。
更合理的玩法是建中心库:用一台服务器做文件共享,把封装库(.dra/.psm)、焊盘库(.pad)、符号库(.olb)都放在固定路径下统一管理。所有工程师通过配好的环境变量或路径设置引用同一套库。这样每个人画的图里,同一个0805电阻的符号和封装名都是统一的,网表导出导入基本不会因为命名问题报错。
自建符号时,还有一个容易忽略的细节:绘图栅格对齐。在Capture里画符号,最好把栅格设置为1(即1个格点=0.1英寸的一部分),引脚端点落在栅格上,后续画原理图拖线时才不会出现“导线明明连上了但其实差一点点没碰到”的玄学问题。这种问题在原理图DRC阶段不一定查得出来,但导出的网表里就可能出现孤立的引脚网络。
3. 导出前必须做的检查:省下最痛苦的三小时
3.1 Design Rules Check:网表导出前的体检报告
很多新手画完原理图,恨不得立刻导网表去Allegro里摆元件。我劝你先花两分钟做一次DRC。Capture的DRC菜单在Tools > Design Rules Check,打开后里面有几个跟网表直接相关的检查项,我的习惯是全部勾上。
重点看这几个:
- Single node net:检查只有一个引脚连接的网络。这种网络通常意味着某个引脚没连好,或者网络名打错了。
- Unconnected pin:检查未连接引脚。有些引脚是悬空设计,需要放No Connect符号(X标记),否则DRC会报错。
- Duplicate reference:检查重复位号。复制粘贴元件后经常发生,重新Annotate即可解决。
- Illegal character:检查网络名或元件名里的非法字符。比如网络名带了斜杠、空格、括号,Allegro对这类字符支持不好,最好统一用字母、数字、下划线。
DRC报告会生成一个.drc文件,双击里面的条目可以直接跳转到原理图中问题位置。我见过太多人跳过这一步,结果在Allegro导入时报出一大串错误,再回头一个个查,反而浪费了更多时间。
3.2 跨页连接与Off-page Connector的规范
多页原理图里,同一网络在不同页面之间靠Off-page Connector(跨页连接符)保持连接。这里最容易出的问题就是:同一网络在不同页用了不同的连接符名称。比如第2页叫“SPI_CLK”,第3页写成了“SPI_CLK_”,看起来差不多,但网表会把它们当成两个完全独立的网络。
这个问题DRC不一定每次都抓得出来,所以我的习惯是养成命名规范:所有跨页网络名统一从数据手册里复制,不手动敲;写完一页后,用Capture的“Netlist”功能或网络高亮工具,把同名网络全工程高亮一遍,肉眼确认。
Off-page Connector还有个方向属性,分为Input/Output(或Left/Right)。这个属性对网表本身没有影响,但对原理图可读性有很大帮助。推荐做法是信号流从左往右,左端用Output方向连接符,右端用Input方向连接符。团队评审原理图时,大家一眼就能看懂信号流向,也能减少理解偏差导致的连接错误。
3.3 电源和地的规范化:最容易被忽视的“隐形网络”
这里要讲一个Capture的重要特性:Power符号(电源符号)只要名称相同,就被默认视为同一网络相连接,无论它们分布在图纸的哪一页、哪个角落。正因如此,电源网络命名必须全工程统一,否则就会出现“明明是同一个5V电源,却分成了5V和+5V两个网络”的尴尬局面。
实际项目里,电源和地的问题通常有几种表现:
- 有人用普通Wire连线代替电源符号,导致网络名和电源符号名称对不上。
- 有人一部分用VCC符号,另一部分直接用文字网络标签+5V,两个名字混用。
- 地符号混用情况更常见,AGND、GND、DGND三个名称同时出现,但实际电路可能需要的是同一块地。
解决办法很朴素:在项目启动前就定好命名规范,比如模拟地用AGND,数字地用GND,特殊电源用VCC_3V3、VCC_5V这种带具体电压值的名字。画图时严格使用电源符号,不图省事用普通网络标签替代。检查阶段,用Capture的Power Symbol功能把所有电源网络过一遍,确保名称唯一且统一。
4. 完整实操:从Capture导出网络表的每一步
4.1 导出前的准备和菜单入口
在点击导出按钮之前,有两件事值得先做。
第一,确认原理图已经保存,并且当前激活的是根设计(Root Schematic)。如果你在子图纸页面点导出,Capture会提示或只导出当前页,很容易漏掉其他页面。
第二,建议在工程目录下新建一个专门的输出文件夹,比如叫“Netlist_Output”。网表生成后会附带着日志文件,散落在工程根目录会让你后续归档时很头疼。养成固定输出目录的习惯,找问题、做版本管理都方便。
正式操作路径是:菜单栏 Tools > Create Netlist。这个命令弹出的对话框,就是整个导出环节的核心控制台。
4.2 Create Netlist对话框关键选项详解
Create Netlist对话框里有好几个页签。我们只关心跟Allegro相关的设置,核心在“Allegro”这个页签下面。
先看输出格式。如果你用的是Cadence全流程,这里应该选Allegro,而不是Other或PCB Editor。选Other的话,通常意味着你要用第三方网表格式,比如给其他PCB工具用,不在今天讨论范围内。
再看几个核心选项:
- Create PCB Editor Netlist:这是必选项。勾选后,Capture会生成Allegro能识别的网表文件。
- Output File:这里可以指定网表文件名和输出目录。默认会命名为工程名,后续在文件名里加上日期或版本号,比如“DMA_Board_20250125.net”,方便归档追溯。
- Create or Update Allegro PCB Editor Board:这个选项会在导出网表的同时,直接生成或更新一个.brd文件。如果你是第一次从原理图出发新建PCB,可以勾选。如果已经有排好版的PCB,只是改动了原理图,想增量更新,也建议勾选并指定到原有.brd文件,Allegro会自动做增量ECO更新。
- Include Unconnected Pins:如果原理图里有未连接的引脚(放了No Connect标记的),导出的网表里仍然保留这些引脚信息,但不会分配网络。推荐勾选,这样Allegro侧能看到完整的引脚信息,方便后续检查。
设置完毕后,点“确定”或“Create”,Capture就开始生成网表和日志。整个过程一般几秒到几十秒,跟原理图规模有关。
4.3 网表文件与日志:成功还是失败,看这里就知道
导出完成后,到输出目录找两个关键文件。
第一个是网表文件本身,后缀通常是.net(也有少数版本是.txt)。用记事本或VS Code打开,你可以看到前面说的元件信息和网络信息。比如这样:
R1 R0603 10K 1 NET_VCC_5V 2 NET_GPIOA0含义是:位号R1,封装R0603,阻值10K,1脚接NET_VCC_5V,2脚接NET_GPIOA0。这个文件是后面Allegro导入的直接数据来源。
第二个文件是日志,Capture在导出时会在输出目录生成一个类似“netrev.lst”或“drc.rpt”的日志文件。这里面记录了导出的整个过程,包括:
- 总共有多少个元件被导出
- 有多少个网络被创建
- 有多少个警告(Warning)和错误(Error)
- 具体的错误信息,比如某个元件缺少Footprint属性
新手最容易犯的错是“日志看也不看就关掉”。实际上,网表导出时Capture并不会在中途弹窗告诉你“这里错了”,所有问题都安静地躺在日志里。等Allegro导入时报错,你才回头翻日志,往往能直接找到根因。我的习惯是每次导出后,哪怕没有报错弹窗,也扫一眼日志尾部,看有没有Warning级别以上的信息。
5. 下游接力:把网络表导入Allegro的实操细节
5.1 新建PCB工程和路径配置
Allegro端的第一步是新建一个Board文件。操作是File > New,Drawing Type选择Board(也就是Circuit Board),然后指定保存路径。这一步最简单。
但紧接着就是一个大坑:路径配置。Allegro要能从网表里的Footprint名称找到对应的封装文件,必须先把封装库和焊盘库的路径告诉它。配置路径的入口在Setup > User Preferences > Design Paths,重点设置两个变量:
- padpath:焊盘库路径,指向存放.pad文件的目录。
- psmpath:封装符号库路径,指向存放.psm文件的目录。
如果你用中心库,这里直接指向服务器上的共享目录即可。如果路径没配好,Allegro导入网表时就会报一堆“Cannot find padstack”或“Footprint not found”的错误,但其实你的库里明明有这个封装。这种问题跟原理图本身没关系,纯粹是路径配置问题,查起来却很容易让人怀疑人生。
5.2 导入Netlist的标准步骤
路径配好之后,导入网表就是一套固定动作:
- 菜单File > Import > Logic。
- Logic type选择Allegro。
- 在Netlist文件栏,选中刚才导出的.net文件。
- 点击Import。
导入过程中,Allegro的命令行窗口会滚动显示信息。重点关注两类:
- “Loading ... component”相关提示,说明元件正在被加载。
- “ERROR”开头的行,以及最终统计信息,比如“Total number of components loaded: xxx”。
如果一切顺利,能在“Placement List”面板里看到所有元件位号,同时“Net”面板里能看到所有网络名称。到这一步,原理图的逻辑信息就正式进入了PCB环境。
5.3 封装匹配与Device文件的那些事
前面提到Footprint字段要跟封装库文件名一致,但Allegro导入时还涉及另一个概念:Device文件。
Device文件后缀通常是.txt,描述的是元件引脚功能、引脚类型等额外信息。Allegro的库结构里,每个封装符号(.psm)可以配一个对应的Device文件(.txt),用于网表导入时校验引脚数量、引脚名称等。
实际项目中,很多公司只维护封装库和焊盘库,Device文件是缺失的。这种情况下Allegro导入网表时会报“Device not found”,解决办法一般是两种:
- 在Capture的网表文件里去掉对Device的引用,或使用精简网表格式。
- 在Allegro中生成缺失的Device文件(菜单Tools > Generate Device File),然后重新导入。
这里我不建议新手一遇到Device报错就想着改网表格式,最好先问一下公司的库管理员或资深同事,确认库体系里Device文件是不是必需的。盲目改格式,可能在后续别的项目里引发新的问题。
6. 实际项目里的高频问题与排查方法
6.1 三分钟定位法:从日志反推根因
网表相关的问题看似五花八门,但80%都可以用同一个套路快速定位:先看Capture的DRC报告,再看网表导出日志,最后看Allegro导入日志。
- 如果Capture的DRC报告里有Unconnected pin或Single node net问题,回原理图改连接。
- 如果Create Netlist的日志里提示缺少Footprint属性,回Capture补属性。
- 如果Allegro导入时报Footprint not found,检查网表文件里Footprint字段和psmpath路径。
- 如果Allegro报Padstack not found,检查padpath路径和焊盘文件是否存在。
我把这套逻辑整理成一个速查表,贴在我工位旁边已经好几年了:
| 报错类型 | 根因方向 | 排查入口 |
|---|---|---|
| Single node net | 原理图连接遗漏或网络名拼写不一致 | Capture DRC报告,原理图高亮对应网络 |
| Unconnected pin | 引脚未连线且未放No Connect标记 | Capture DRC报告,原理图定位引脚 |
| Duplicate reference | 位号重复,复制粘贴后未重新标注 | Capture DRC报告,Annotate后解决 |
| Footprint not found | 封装名与库文件名不一致,或psmpath路径错误 | 网表文件检查Footprint字段,Allegro路径配置 |
| Padstack not found | 焊盘库路径错误,或封装引用的焊盘缺失 | padpath路径配置,封装库完整性检查 |
| Device not found | 库中缺少Device文件 | Allegro Generate Device File或网表精简格式 |
6.2 那些绕不开的经典坑
除了上面的速查表,还有几个高频问题值得单独讲。
第一个是位号重复。这种问题往往出现在复制粘贴模块时。比如一个电源模块,你复制了一份,但右侧新元件的位号还是原来的R1、C2,跟原模块完全重复。导出时Capture一般会警告,但有时你手快直接忽略了。等到Allegro导入时,两个R1指向两个不同的位置,布线规则全部乱套。解决方法是每次完成复制粘贴后,立刻用Tools > Annotate进行全局位号重排。
第二个是网络名里的非法字符。有个项目里,原理图上一个信号叫“ADC_IN/1”,Allegro导入时直接报错。后来查下来,就是斜杠这个字符在Allegro网络命名规则里是保留符号,不能使用。我的建议是网络名只允许字母、数字和下划线,其他符号一律不用。
第三个是Pin Type设置不对导致的“无中生有”的DRC报错。比如某芯片的某引脚实际上是开漏输出,你在Capture里画成了普通Output,Allegro里就会报两个Output引脚短接的错误。这种问题的排查方向不在网表流程,而在符号库属性,需要回到Capture改Pin Type,然后重新导出导入。
第四个是电源和地符号混用导致的网络孤岛。比如原理图里有两处5V供电,一处用的是“5V”电源符号,另一处用的是“+5V”文字网络标签,导出后就是两个网络。看似PCB上飞线都能连上,但其实是两个孤岛,电源分配和铜皮连接都会出问题。解决办法就是老老实实统一命名。
6.3 快速核对原理图和PCB一致性的实用技巧
网表导入Allegro后,怎么确认一字不差?我常用的笨办法是导出两边的BOM来比对。
Capture这边,Tools > Bill of Materials可以导出一份包含位号、Value、Footprint的元器件清单。Allegro这边,菜单Reports > Bill of Materials Report(或类似入口)也能导出一份BOM。两份BOM一比对,位号数量和封装名一目了然。如果有差异,基本上是网表没更新或者导入过程漏了东西。
另外一个更快的检查办法是看Allegro里Placement List的元件数量和Capture里的元件总数是否一致。如果不一致,说明网络表丢失了部分元件,优先回到Capture确认整个设计是否都在根设计下面。
最后提一个我个人的习惯:每次完成网表导入后,在Allegro里用Display > Highlight高亮几个关键网络,比如电源网络和时钟网络,然后在原理图里用同样的方式高亮对应网络。两边对照一下,确认引脚归属一致,再开始布局。这个动作只需要五分钟,但能帮你提前发现相当一部分连接错误。
6.4 给新手的几条保命建议
带过太多新人,有些话我反复讲,今天也写在这里。
第一次走通全流程时,不要直接用复杂的原板原理图。拿一个几十个元件的小板子,比如一个最小系统板,从画符号、做封装、导出网表到导入Allegro,完整跑一遍。全流程跑通的那种成就感,比看十篇教程都管用。
每次改动原理图,无论改动多小,都要重新生成网表并重新导入Allegro。不要打补丁式地在PCB里手动改连接,那样原理图和PCB的一致性很快就会被破坏,后面ECM审查、信号完整性仿真都会建立在错误的数据上。
注意归档。网表文件、日志文件、封装的.err报告,这些都是追溯问题的证据。出问题的时候,你翻半天旧版本找不到,比什么都焦虑。我个人的习惯是每个版本一个文件夹,日期+版本号命名,里面同时放着原理图、网表、BOM和导出日志。
7. 写在最后一点心里话
想起第一次用Cadence做完整流程的时候,我自己也被网络表折腾得够呛。那时候没什么教程可看,对着英文Help啃了一下午,才勉强搞明白Create Netlist里那些选项是什么意思。后来做过的项目多了,才慢慢体会到,Cadence这套工具真正难的地方不在操作,而在理解它“松散解耦”的设计哲学——每个环节都有自己的文件格式和职责边界,网表只是其中一条纽带。
我最想给刚入行的朋友说的一句话是:不要怕那堆看起来吓人的报错日志。网络表相关的报错,80%都是几个固定原因,排查一遍就会有印象,第二次遇到基本不用看日志就能猜到问题出在哪。
如果你也想在Cadence这条路上走得更顺,我建议下一步把精力放在两件事上:一是搭一套自己的中心库,符号、封装、焊盘全部规范化管理;二是把网络表这个流程吃透之后,再去研究Capture的CIS数据库配置、团队的协同设计流程。这些才是让你从“会画板子”迈向“管好板子”的分水岭。
祝你的第一块板子,从原理图到PCB一路绿灯。如果中途卡在哪一步,不妨回头翻翻这篇,大概率能帮你少走几公里弯路。