ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

从Capture到Allegro:网络表导出与导入全流程解析

从Capture到Allegro:网络表导出与导入全流程解析 1. 写在前面网络表就是Capture与Allegro之间的那座桥我到现在还记得第一次用Cadence从Capture走向Allegro时的状态原理图画了一整天觉得特别顺畅然后导出网络表这步直接卡了一个下午。各种报错弹出来的时候我甚至都不知道该查哪里。后来用多了才明白Cadence这套流程里Capture负责把你脑子里的电路画出来Allegro负责把它变成物理PCB而中间负责传递所有连接关系的那张快递单就叫网络表Netlist。这篇内容我把从原理符号设计、属性检查、网表导出到Allegro端导入的完整链路拆开讲一遍。重点不是教你怎么画封装而是讲清楚这中间每一步到底发生了什么、为什么这样设计、出错了怎么排查。适合刚接触Cadence、卡在Capture和Allegro之间连接环节的朋友也适合画过几块板子但从没仔细研究过网表机制的人。2. 整体思路拆解为什么必须靠网表来传话2.1 Capture和Allegro各自干了什么活很多人第一次接触Cadence套件时都会有一个困惑既然Capture和Allegro是一个公司的产品为什么不能直接在Capture里把PCB画出来非要导来导去这要从这两个工具的定位说起。Capture即OrCAD Capture的核心职责是逻辑设计——你只需要告诉软件这个电路的连接关系是什么至于电阻长什么样、引脚在物理上怎么排列Capture并不关心。而Allegro的核心职责是物理实现——它需要知道每一个元件用哪个封装、焊盘怎么排布、走线怎么连接。这两个工具的思维模型完全不同。Capture工作在逻辑层面Allegro工作在物理层面。中间需要一个翻译官把逻辑连接关系翻译成物理实现所需要的信息这个翻译官就是网络表。网络表本质上是一个文本文件里面没有任何图形信息只有关于元件、引脚、网络连接关系的结构化描述。我见过有人为了省事直接在Capture里用扁平式设计把所有元件全画在一张纸上不划分层次也不建库最后导出网表时一堆问题。根本原因就是没理解Capture的原理图不仅仅是画出来好看的它是一份需要被解析的数据源。元件属性、引脚编号、连接关系不完整或不规范后续网络表必然出问题。2.2 网络表到底在传递哪些信息从数据角度来说网络表传递的信息可以分为三类元件信息Component Info元件的位号RefDes、取值Value、PCB封装Footprint、是否允许替换等属性。连接信息Net Info每个网络叫什么名字哪些元件的哪些引脚连在这个网络上。逻辑与物理的映射Mapping原理图符号上的引脚编号如何对接到PCB封装上的焊盘编号。这里面最容易忽略的是第三类。很多新手以为网络表就是把线传过去Allegro那边就自动把线连接好了。实际上网络表只告诉你U1的第3脚连接到了R2的第1脚至于U1的3脚对应封装上的哪个焊盘靠的是Pin Number的匹配。如果你的原理图符号引脚编号是A、B、C而封装焊盘是1、2、3那网络表导入Allegro后要么报错要么网络关系全部错乱。这一点我后面会专门展开因为它是整个流程中最容易埋雷的环节。2.3 为什么不是原理图直接转PCB再延伸一点。有人会问为什么Cadence不能像某些工具那样原理图和PCB在一个工程里实时同步其实Cadence有一个附加模块叫Design Sync可以实现Capture和Allegro之间的工程同步但常规的、最稳定的流程依然是网表搬运。原因是在大型项目里一个PCB可能需要多个人分工画原理图的不同部分如果实时同步任何一个改动都可能触发全局刷新反而拖慢效率。网表是一个快照它把某个时间点的连接关系固化成文件Allegro端在任何时间导入都对得上。隔离了两端也便于团队协作和版本管理。所以不要嫌导网表这一步麻烦。它是Cadence体系里经过大量实践验证的稳定方案理解它的存在逻辑后面遇到了很多奇怪的报错你才能顺着这个逻辑去排查。3. 原理符号设计网络表质量的源头控制3.1 建原理符号时必须写清楚的几个属性说到原理符号很多人觉得就是在Capture里画个方块、放几个引脚不对这里面有几个属性是必须在符号创建阶段就写好的否则后面导入Allegro时九死一生。Reference Designator位号符号模板里通常写成U?、R?这类带问号的形式放置到原理图后Capture会自动分配具体编号U1、R3等。注意同一个工程里不能出现重复位号否则网表导出时会报Duplicate Reference。Value值这个属性是给BOM和仿真用的但导出网表时也会带入。如果你用的是CIS库中心元件库Value通常从数据库读取如果是手工建库千万不要漏填。PCB Footprint封装这是Capture和Allegro之间最关键的接头暗号。Capture本身不认识PCB封装它只是在元件属性里记录一个字符串比如0805、SOT23-5实际含义要到Allegro端通过封装路径去解析。如果原理图中漏填了这个属性或者填了一个Allegro库里根本不存在的名字导入时必然报Footprint not found。Pin Number引脚编号符号引脚必须有一个编号且这个编号要和PCB封装的焊盘编号一致。这一点太重要了我后面单独开一节说。还有一个不太起眼但很实用的属性叫PCB Footprint L替代封装适用于一个元件有多个可选封装的情况。比如同一个电容既能贴0805也能贴0603你就可以在Footprint里写主封装在替代属性里写备用封装。画板时有很大的灵活性不用改原理图。3.2 引脚的编号必须和焊盘编号对得上我在2.2节提到了Pin Number和Pad Number的映射这里展开细说。原理图符号里的Pin Number是逻辑编号它代表了这个引脚在功能上是第几脚。PCB封装里的Pad Number是物理编号它代表了焊盘在物理上是第几个。网络表要做的就是让逻辑编号和物理编号一一对应。给大家一个我实际踩过的坑。以前我做一枚运放的小板子原理图符号里运放输入引脚我习惯性地命名为IN、IN-Pin Number分别是1、2但在画封装的时候封装焊盘编号突然看花眼写反了——1脚焊盘放到了2脚的位置。导入网表后没有报错因为Pin Number在数量上是一致的1对12对2只是物理位置反了。结果就是画出来的板子运放的正反相输入被对调了。这种错是深埋在PCB里的逻辑错误电气检查都查不出来只能等板子回来实测时才发现。所以无论是从芯片Datasheet建符号还是建封装第一步永远是核对引脚图。把符号引脚编号和封装焊盘编号逐个对照别偷懒。3.3 用CIS库管理设计数据减少低级错误如果你还在手工一个个地给元件填属性效率低不说还容易出错。CISComponent Information System是Capture的一个重要功能它可以把你公司里所有元件的电气参数、PCB封装、BOM信息、Datasheet链接统一存到一个中心库里画原理图时直接从库里调用元件。这里有个隐藏的工程经验CIS库的配置依赖ODBC数据源。热词里有人搜Cadence怎么设置ODBC数据源就是在这个背景下出现的问题。CIS可以通过ODBC连接Access、Oracle、SQL Server等数据库但你做ODBC配置时要特别注意数据源名称DSN不能是中文也不要有空格否则Capture的CIS管理器和数据库的连接经常时断时续。从网表质量的角度CIS带来的最大价值是强制约束你从库里调出来的元件自带Footprint属性、Value值不需要输错的机会。但对个人用户来说配置CIS库确实需要花点时间如果只是画简单的板子可以考虑先用本地库Capture Library做好模板手动确保属性完整。3.4 关于Off-Page Connector和跨页引用如果原理图分成多页设计跨页的网络连接靠的是Off-Page Connector跨页连接符。这里有个很容易踩的坑Capture要求同名的Off-Page Connector在连接方向上必须一致。比如A页叫做VCC_5V的端口如果是出方向B页的VCC_5V就必须是入方向。如果方向不一致导出网表时会报错。另外热词里提到的Cadence添加Intersheet References报错也是在这附近。Intersheet References是在每一页原理图的连接符旁边自动标出目标页号的引用信息它能大大方便阅读原理图。但当你的Off-Page Connector网络名不规范比如带空格、带特殊字符时生成交叉引用就很容易报错。我的建议是所有跨页网络名一律使用字母开头只包含字母、数字和下划线能避开绝大多数奇奇怪怪的报错。4. 网络表导出的实操细节从Capture到Allegro的关键一跳4.1 导出前先做一次设计规则检查不要急着点Create Netlist先养成习惯对设计做一次DRCDesign Rules Check扫描。在Capture里选择Tools → Design Rules Check重点检查以下几项Single Node Nets单端网络Unconnected Pins未连接引脚Duplicate Reference重复位号Power Pins not Connected电源引脚未连接很多人直接跳过这步到Allegro导入网络表时才发现成堆的警告比如Net has only one pin网络只有一个引脚之类。虽然很多警告是可忽略的比如某些测试点就是故意单端网络但你要能区分哪些是故意的哪些是忘记连的。在Capture侧发现并修正成本远比在Allegro侧低得多。4.2 为什么要选Allegro.dll网表格式在Capture里执行Tools → Create Netlist弹出的对话框会让你选择网表格式。选项里有Allegro、OrCAD PCB Designer、Mentor、PADS、Altium等等。这里要明确一点如果你最终要去Allegro做PCB那就要选择Allegro格式。它的本质是一个名为allegro.dll的转换器插件由Cadence随安装包附带。你选择这个格式后Capture会调起该插件将原理图数据翻译成Allegro能识别的中间文件。为什么不选其他格式因为每种网表格式的语法和文件组织方式完全不同。比如PADS网表生成的是.asc文件Altium生成的是.net文件Allegro生成的则是三个以pst开头的数据文件。选错了格式导入时必然认不出来。4.3 实操创建网表的关键配置点击Create Netlist后在弹出的对话框中如果看不到Allegro.dll选项很可能是你安装时没有选择Allegro Design Entry HDL或OrCAD PCB Designer相关组件也可能是路径设置问题。正常情况下在Netlist标签页的Format下拉框里直接选Allegro即可。一个容易被忽视的选项是**Create Netlist的存放目录**。Capture默认会把网表文件输出到以设计文件命名的子目录下的allegro文件夹里比如xxx/allegro。我建议不要改这个默认路径因为Allegro端导入时默认搜索的就是这个目录。如果自己手改过路径后面记岔了找不到文件又跑来跑去找纯属给自己添堵。真需要自定路径的话请保持路径全英文、无空格这个黄金规则。4.4 生成出来的三个pst文件分别是什么导出完成以后你去allegro目录下看会发现三个文件pstxprt.dat、pstxnet.dat、pstchip.dat。很多人在这里就走懵了不知道这些文件是干嘛的。我简单解释一下它们的分工pstxprt.datPart文件记录每个元件的位号、Value、Footprint、逻辑封装Gate等元件属性信息。相当于元件清单。pstxnet.datNet文件记录所有网络连接关系。每个网络名下面列出了所有连到该网络的引脚对比如U1.3 R2.1 C5.2。这是Allegro用来建立连接关系的最核心数据。pstchip.datChip文件记录每个逻辑封装内部的结构比如一个IC符号内部有几个Gate、每个Gate对应哪些引脚。它帮助Allegro理解包与引脚之间的从属关系。这三个文件的逻辑关系是pstxprt.dat是总纲领定义了有哪些元件pstchip.dat定义了每个元件的引脚结构pstxnet.dat定义引脚之间的连接。三者缺一不可。4.5 顺便导出BOM一箭双雕在导出网表的同时我强烈建议顺手导一份BOM物料清单。Capture的Tools → Bill of Materials功能它和网表其实共用同一套属性数据源。导BOM时如果发现元件缺失Value或FootprintBOM表格里就会留空。这其实是比网表报错更早暴露属性问题的手段。在导出BOM时有一个容易被忽略的设置Open in Excel。默认勾选后导出的是Excel格式这个功能会调用你机器上的ODBC或COM组件。如果系统装了WPS而不是正版Office有时这里会报COM组件错误。这不是Cadence的问题是注册表里Excel组件映射异常重新安装或修复Office版本即能解决。5. Allegro端导入网表从文件到板上的变现过程5.1 导入前必做检查封装库路径Allegro收到网表文件之后并不能凭空找到元件封装。它需要去指定路径下搜索封装库文件和焊盘文件。如果你没有提前设置好库路径导入网表时会报一堆封装找不到的错误。设置方法是Allegro的Setup → User Preferences在Design Paths栏下搜索psmpath封装库路径和padpath焊盘路径。务必把这两个路径指向封装库实际存放的目录。注意路径中的环境变量可以用系统变量也可以用Allegro自带的变量比如$LOCAL_SITE或$GLOBAL_SITE。但自定义库路径我建议直接用绝对路径最简单也最不容易出错。5.2 实操Import Logic的前前后后在Allegro中导入网表的入口是File → Import → Logic。在弹出的对话框中Logic Type选择OpenNetlist这是针对Capture生成的pst文件的导入方式如果你用的是HDL设计另一种方式是Design Entry HDL。然后在Netlist路径中指向包含pstxprt.dat文件的allegro目录。点导入后Allegro会在命令行窗口打印导入进度最后显示Successfully等字样。如果失败会弹出错误报告文件或输出日志。这块容易踩的坑是导入前必须保证Allegro处于无Placement状态或者说当前设计是空白PCB。如果当前设计已经有一部分元件摆了位置导入新网表时Allegro会以网表数据去刷新设计位号对得上则保留对不上就会新增。这在某些情况下有用但对新手而言更容易产生数据混淆建议一开始就用空白板导入。5.3 导入后第一件事Quickplace看全局导入完成后元件并不会自动出现在PCB绘图区。它们现在只是逻辑上存在于设计数据库中你还得通过Place → Quickplace把它们临时摆放到板框附近。Quickplace对话框里可以按页面Place by page、按元件所在面Top/Bottom等条件放置。我习惯先全部放到Top面后续再做分层和布局。这个操作本身不复杂但它有一个重要作用——通过观察未放置元件的数量判断网表是否完整导入。如果Quickplace后某些元件图标是暗的、灰色的说明这些元件在网表中存在但在你的封装库里没有找到对应的封装Allegro把它们标记为无法放置状态。这时候要回去检查这个元件在Capture里的Footprint属性名字和Allegro封装库里的封装名是否完全一致包括字母大小写。5.4 网络表是活的如何从网表反向追踪网络很多时候我们需要从PCB上的一根线回溯到原理图里它是哪个网络或者反过来从原理图的一个网络看看它在PCB上连到了哪些引脚。Allegro的Logic → Net Schedule网表调度功能能够以表格形式列出所有网络和引脚连接它直接读取的就是当前设计里已导入的网表数据。另外热词里有人问Cadence怎么选中同一个网络在Allegro里你可以使用Highlight命令选中任意一条走线或焊盘同网络的其它元素都会高亮在Capture里可以用Select Entire Net选项选择某根连线整条网络也会被选中。这两者的底层机制其实都是基于网表数据构建的网络关系图——只要你理解了网表里Net这个概念的实质一坨相互连通的引脚集合你就知道为什么高亮是按整个网络来算的而不是按线段来算的。6. 常见问题排查导出网络表报错怎么办6.1 报错逐条看Footprint not found现象Allegro导入网表后日志里出现大量Footprint ... not found。原因原理图中元件没有Footprint属性或属性填写的封装名与库中封装不匹配注意大小写、空格、通配符。处理回Capture查看元件属性列表确认PCB Footprint是否已填写且拼写正确再到Allegro里用Tools → Report → Library Report查看库中有哪些可用封装逐一核对。6.2 引脚数量对不上太常见了现象导入时报Component has N pins in the schematic, but M pins in the footprint。原因原理图符号引脚数与PCB封装焊盘数不一致。常见的成因是原理图中某个引脚没画比如有的数据手册把NC脚省略或者封装焊盘比原理图多。处理回到原理图符号把遗漏的引脚补上或者检查封装是否用错。特别提醒一句NCNot Connected脚也要在原理图中体现出来哪怕它什么也不连否则网表统计时引脚数就对不上。6.3 引脚类型冲突人和人之间要讲规则引脚和引脚之间也要现象导入时报Pin type conflict或类似错误。原因Capture的引脚有三种类型——Input、Output、Bidirectional还有Power、Passive等。如果两个Output类型的引脚直接短接或者两个Power引脚连到了一个普通网络上Capture DRC和Allegro导入都会提出异议因为在真实世界里这可能导致电平冲突或者电源短路。处理检查引脚类型是否设置合理。比如一个网络名是VCC_5V的网络连接的引脚应该都是Power类型的如果一个普通信号的引脚类型误设成了Power这里也会报警。养成给引脚正确分类的习惯网络表报错会少一大半。6.4 路径问题中文目录是千古罪人现象网表导出正常但Allegro导入时文件路径指向那一步就出错。原因Cadence这个体系对中文路径的支持一直不怎么样。无论Capture还是Allegro工程文件、库文件、网表目录务必全部使用英文路径。处理把工程复制到纯英文目录下重新生成网表再导入。6.5 明明改了原理图为什么导入后PCB没有变化现象在Capture里改了一个网络连接重新导出网表并导入Allegro但板上还是原来的连接关系。原因大概率是你没有真正生成新的网表或者生成到了别的目录。Allegro导入的是pst文件如果pst文件生成时间还是旧的Allegro读到的自然就是旧数据。处理在Capture里做任何修改后必须重新执行Create Netlist并确认allegro目录下pst文件的时间戳确实更新了。在这个问题上我自己有一个习惯动作进入allegro目录先把pst文件全部删除再重新生成网表。这样能确保Allegro导入的一定是新文件。6.6 瞬态仿真不收敛和网表有什么关系热词里有一个cadence瞬态仿真不收敛看到这个搜索词很多从Capture走到网表的人会误以为这也和导入Allegro有关。这里明确划分一下故障边界瞬态仿真不收敛属于PSpice仿真层面的问题跟Capture到Allegro的网表导入是两套流程。PSpice用的是另一套网表语言Circuit Netlist后缀为.net走的是Capture → PSpice的仿真路径不是Capture → Allegro的PCB路径。如果在仿真中报不收敛通常要检查仿真参数设置、模型精度、初始条件而不是去动PCB封装。把问题边界划清楚排查速度能快一半。6.7 网表导入常见问题速查表为了方便各位日后排查我整理一个速查表现象可能原因处理方向Footprint not found封装属性未填/封装名拼写错误/库路径未设置检查原理图属性、核对封装名、设置psmpath/padpathComponent pin mismatch原理图引脚数与焊盘数不一致补齐NC引脚或更换封装Pin type conflict引脚类型设置冲突检查引脚Input/Output/Power类型Duplicate reference位号重复重新编号检查历史遗留Illegal character in net name网络名包含非法字符空格、括号等统一改为字母数字下划线path not found文件路径含中文或空格迁移至全英文路径pst files not updated忘记重新生成网表删除旧pst文件重新Create Netlist7. 一点个人心得把这套流程变成肌肉记忆说了这么多最后分享一个我自己工作多年养成的习惯。每次流程走到导出网表之前我会固定做三件事第一跑一遍DRC把单端网络和未连接引脚全部过一遍眼第二检查所有新加的元件是否正确分配了位号有没有重号第三刷新CIS库连接确保最近用的元件都是最新版本属性。这三步加起来不会超过五分钟但能把后面90%的网表问题挡在源头。还有一个小技巧当你遇到一个报错完全看不懂时别急着搜关键字先去看报警日志的具体行号再回到原理图里找到对应元件或网络。绝大多数报错都是原理图画得不够规范导致的而不是软件坏了。理解这一点你的Cadence水平就能超过身边大多数人。这整个流程——从Capture原理符号导出到Allegro网络表导入——说穿了就是Cadence当中最核心的一条数据流。把它吃透了后面的布局、布线、仿真其实都是在同一个逻辑框架下的延伸。而这条数据流里所有的坑最本质的根源其实就是逻辑世界和物理世界的一次又一次对齐。每一次对齐都值得认真对待。
返回列表