刚进模拟集成电路这一行,第一台真正意义上的"生产工具"往往就是 Cadence Virtuoso。很多人第一次看到 IC617 这个版本号是在师兄给的虚拟机镜像里,点开图标跳出一个灰扑扑的 CIW 窗口,然后整个人就懵了——这玩意儿没有菜单搜索,没有新手引导,连"新建工程"四个字都找不到在哪儿。这篇笔记就围绕Cadence Virtuoso(IC617)的实际使用展开,把我从"能打开软件"到"能独立跑完一次带工艺角的瞬态仿真并出图"这个过程里踩过的东西完整记下来。内容主要面向三类人:刚进课题组、要接手模拟电路设计任务的研究生;从其他 EDA 工具转过来的工程师;以及已经把原理图丢了好几个月、想重新捡起来的半吊子用户。前提假设是你手上已经有一套能跑起来的 IC617 环境(含 PDK),至于安装和许可这部分,只讲我实际会去动的那几个配置点。
1. 先搞清楚 IC617 是什么,和网上搜到的其他 Cadence 有啥区别
1.1 Virtuoso 只是 Cadence 产品线里的一条,别搜错方向
初学者最容易犯的错误,是拿"cadence 怎么用"去搜,结果搜出来一堆 PCB 布线、封装导入、BOM 导出、Sigrity 信号完整性分析的教程,看完更晕。Cadence 这家公司的产品线铺得很宽,Virtuoso 是面向芯片级(IC)设计的平台,核心场景是全定制模拟/混合信号电路设计,围绕它展开的是原理图、仿真、版图、物理验证这一整条链路。而你搜到的"cadence 导出 BOM""cadence 封装导入 pcb""cadence pcb 设置线宽"这类问题,基本都属于 Allegro / OrCAD 那条 PCB 线;"cadence 17.2 导出 swp 文件""cadence 添加 intersheet references 报错"也多是 OrCAD Capture 的场景。搞混产品线以后,你会发现教程里的菜单跟自己的界面对不上,浪费时间。
IC617 的完整含义是 IC6.1.7,这是 Virtuoso 平台的一个大版本号;早些年课题组里流传的 IC5141 对应的是 IC5.1.41,界面和脚本兼容性差别不小,很多老教程里的截图放到 IC617 上,菜单位置已经变了。我自己的建议是:搜资料时把版本号带上,或者至少确认对方截图里的窗口标题写的是 IC6.1.7 还是 IC6.1.8。另外,Virtuoso 内部还有几个子模块需要区分:原理图和版图编辑器的核心叫 Design Framework II(DFII),仿真引擎主推 Spectre,物理验证常见的是 Assura 和 PVS,寄生提取是 Quantus QRC。名字记不住没关系,但至少要知道"仿真不收敛"和"DRC 报错"是两个完全不同的环节,排查手段毫无交集。
1.2 它的工作方式:库、单元视图,三层结构
Virtuoso 的数据组织方式和大多数人的直觉不一样。它没有"工程文件"这个概念,取而代之的是三级结构:Library(库)→ Cell(单元)→ View(视图)。一个反相器可以被组织成myLib / inv / schematic,同一个inv下面还可以挂symbol、layout、extracted、spectre(网表视图)等一堆视图。所有操作基本都围绕这个寻址方式展开,脚本里写路径也是这个格式,比如dbOpenCellViewByType("myLib" "inv" "schematic")。
理解这个结构的意义在于:库是共享边界,视图是数据形态。工艺厂给你的 PDK 是一个独立的库(通常叫tsmc18、gpdk180之类),你自己的设计放在另一个库里,两者通过"attach 技术库"建立关联。一旦关联断了,原理图里所有晶体管就会变成带问号的方框,仿真直接提示器件未定义。我见过太多人因为这个现象重装软件,其实只需要在 Library Manager 里把技术库重新 attach 一下,十秒钟的事。
1.3 学习顺序:别一上来就啃版图
我给自己的学习路径排了个序,后来也推荐给过几个师弟师妹,反馈还行:先把原理图编辑器玩熟(画图、连线、打标签、建 symbol、跑通一个 DC 工作点),再进 ADE 环境把 tran 和 ac 跑顺,然后是工艺角与参数扫描,最后才是版图与 DRC/LVS。原因很实在:版图阶段暴露的问题,八成能在原理图和仿真阶段提前发现。如果你连自己电路的静态工作点都没确认过,直接去画版图,等于闭着眼睛走迷宫,LVS 报出一百个不匹配你也不知道是哪里出的错。
提示:如果时间紧张,至少要把"原理图 → symbol → ADE 仿真 → 出波形"这条最小闭环走通一遍,再考虑扩展。这条闭环里包含了 Virtuoso 百分之七十的日常操作。
2. 启动环境与配置:那些看着吓人其实只有几个的文件
2.1 环境变量:真正要改的就那么几个
IC617 在 Linux 下运行,启动前必须把环境变量铺好。厂商或者实验室给的安装包里通常有一个setup.sh或者sourceme脚本,但知道里面到底设了什么很有必要,出问题的时候你能自己判断。核心就这几类:
export CDSHOME=/opt/cadence/IC617 # 安装根目录,也有写成 CDS_INST_DIR 的 export PATH=$CDSHOME/tools/bin:$CDSHOME/tools/dfII/bin:$PATH export CDS_LIC_FILE=5280@lic_server # 许可服务器,也常用 LM_LICENSE_FILE export CDS_Netlisting_Mode=Analog # 网表模式,模拟设计必须设 export CDS_LOG_PATH=$HOME/cds_log # 可选,集中放日志 export MGC_HOME=/opt/cadence/assura # 若用 Assura 做验证CDS_Netlisting_Mode这个变量容易被忽略,但如果它没设成 Analog,网表生成阶段可能走另一条分支,出来的东西跟预期不一致。还有一点,路径顺序很重要:把 Cadence 的工具目录放在系统默认路径前面,否则系统自带的同名命令会抢先执行。我遇到过一台机器上which virtuoso指向了一个完全无关的脚本,查了半小时才发现是 PATH 里另一个目录排在前面。
2.2 cds.lib、.cdsinit、.cdsenv:三个文件各管一摊
启动目录下的cds.lib是库的"电话簿",决定 Virtuoso 能看见哪些库。常见写法有几种:
DEFINE myLib ./myLib # 定义库名与物理路径的映射 INCLUDE /path/to/pdk/cds.lib # 把 PDK 自带的库定义文件包含进来 ASSIGN myLib hspiceLib ./hspice # 给库额外指定某种格式的视图目录 SOFTINCLUDE ./local.lib # 文件不存在也不报错,适合团队协作INCLUDE和SOFTINCLUDE的区别值得记一下:前者找不到文件会报错,后者找不到就跳过。团队里如果有人本地路径不统一,用SOFTINCLUDE能避免"别人一启动就报一堆错"的尴尬,代价是出错时不容易发现。
.cdsinit是启动时执行的 SKILL 脚本,管界面和默认行为。我自己的.cdsinit里长期放着这么几行:
hiSetFont("text" ?name "Fixed" ?size 12) hiSetFont("label" ?name "Fixed" ?size 12) envSetVal("auCore.misc" "labelType" 'cyclic "both") envSetVal("schematic" "autosaveInterval" 'int 10)第一、二行改字体,纯粹是因为默认字体在高分屏上糊成一片;第三行让器件标签同时显示名字和参数值(这就是"电阻不显示阻值"最常见的解法,后面细说);第四行是自动保存间隔。.cdsenv则是图形界面里Options → Save Defaults写出来的持久化配置,一般不用手改,但知道它存在,能解释"为什么我改了设置,重开又变回去了"——那是因为你改的是临时状态,没写进.cdsenv。
2.3 工艺库导入与 attach:一次做对,后面省事
PDK 的接入流程通常是:在 CIW 里执行File → Import → ...或者直接把 PDK 自带的库定义文件用INCLUDE挂进cds.lib。之后打开 Library Manager,会看到一串工艺库。接下来是 attach:File → New → Library,在弹窗里勾选 "Attach to an existing technology library",选中工艺库。新建的设计库如果不 attach,画原理图时器件能放上去,但一生成网表就各种错。
这里有个实操细节:attach 之后不要再随手改设计库的技术库选项,尤其是已经画了版图的库。技术库决定了图层定义、器件默认参数、网格设置,切换会导致已有版图的图层对不上号。真要换工艺,建议新建一个库重新开始,别在原库上折腾。
2.4 启动慢、卡顿、闪退的常见原因
启动 Virtuoso 慢,多半是cds.lib里挂了太多库,尤其是通过 NFS 挂载的网络盘。启动过程中它要扫描每个库里有哪些 cell,几千个 cell 的 PDK 加上网络延迟,等一两分钟很正常。可以做的优化是把不用的库注释掉,或者把常用库的路径放到本地磁盘。至于this application has quit unexpectedly这类弹窗,先别急着重装:看看终端里打出来的报错栈,八成是某个 SKILL 脚本加载失败或者许可被占用。如果.cdsinit里 load 了一个不存在的文件,也会造成启动异常,逐一注释掉试探即可。
注意:不要在生产设计库上做"清理旧文件"这类操作。Virtuoso 的 cell 目录里除了视图文件,还有
master.tag、*_*.oa这类元数据,删错了会导致整个 cell 打不开。
3. 原理图阶段:把图画对,比画得快重要
3.1 Library Manager 里的目录习惯
工作几年下来,我发现设计库里最值钱的不是电路,而是命名规范。一个能长期维护的库大概是这样组织的:
| 层级 | 命名示例 | 说明 |
|---|---|---|
| 顶层库 | proj_adc_top | 对应一个具体项目,不含通用模块 |
| 模块 cell | ota_2stage | 功能名 + 结构特征,别用test1 |
| 子模块 | bias_gen、cmfb | 可复用单元,单独建库更好 |
| 视图 | schematic/symbol/layout/spectre | 不要手工建 spectre 视图 |
我特别建议把可复用模块单独放一个common_lib,项目库只放连接关系。这样下一个项目开始时,直接 INCLUDE 那个库就行,不用从旧项目里"复制粘贴"。另外,cell 名别用中文、空格和纯数字,脚本处理时会出问题,这个坑我踩过一次,后面所有脚本都要加转义,烦得很。
3.2 画原理图的高频操作与快捷键
真正画图的时候,鼠标点菜单的效率极低,必须形成肌肉记忆。下面这些是每天都要用几十次的:
i:添加器件实例(Instance),弹出的窗口里可以按库名筛选w:连导线(Wire),宽线窄线看场景,原理图里无所谓,重点是连接关系l:加标签(Label),网络命名靠它,别指望软件自动生成有意义的网名p:加引脚(Pin),从子模块往上走的时候必须有q:编辑对象属性,改参数、改实例名都靠它c/m/Ctrl+c:复制、移动、取消Shift+X:进入下一层(Descend),配合Shift+B返回上层F8或Check and Save:检查并保存,这一步千万别跳
关于F8,我见过的最常见的坏习惯就是一路画到底不检查,等仿真报错才回头找。Check and Save会提示悬空引脚、重复实例名、未连接的网络等问题,早发现一分钟,后面省一小时。
3.3 从 schematic 生成 symbol,以及 CDF 参数怎么配
原理图画完,下一步是造 symbol。菜单路径是Create → Cellview → From Cellview,跟着向导走,引脚会自动映射过来。生成的 symbol 默认是方框加引脚,能看能用,但不太好看。我一般会手动调整一下形状、把引脚按信号流向排列,同时在 symbol 上把关键参数显示出来,比如宽长比、器件倍数,方便回看。
真正影响使用的是 CDF(Component Description Format)参数。Tools → CDF → Edit进去以后,能看到每个参数的名称、默认值、提示信息,以及"回调"(callback)。回调是 Virtuoso 比较精髓的东西:你可以写一段 SKILL,让某个参数改变时自动重算别的参数。举个小例子,如果一个子电路的偏置电流由外部电阻决定,你希望输入电阻值时自动算出对应的电流并显示出来,就可以在电阻参数的 callback 里做这个换算。刚上手不用急着写回调,但知道它在那儿,遇到"我要的参数界面上没有"这类需求时就知道该往哪个方向找。
3.4 "电阻不显示阻值怎么办"这类显示问题
这是被问得最多的问题之一:明明器件属性里填了1k,图上却只剩一个R或者什么都没有。原因通常有三个层面。
第一层是.cdsenv里的标签显示策略。前面提到的envSetVal("auCore.misc" "labelType" 'cyclic "both")就是控制"显示名称、显示值、都显示、都不显示"这个循环的。在界面上对应的是Options → Display或者按快捷键循环切换。
第二层是器件本身的标签是否被删掉了。用q打开属性窗口,切到 Display 标签页,看看有没有被设成off;有时候是从别人那里复制来的图,人家手动关掉了标签,你跟着一起关。
第三层比较隐蔽:器件用的 symbol 本身没定义参数标签。如果 symbol 是自己画的,或者来自某个简化过的 PDK,标签文本可能写成了固定字符串而不是变量。这时候就要打开 symbol 编辑,找到标签对象,把它的文本改成对应的 CDF 参数名(比如@value)。改完存回,原理图刷新一下就能显示。
3.5 "怎么选中同一个网络"与跨图追踪
设计稍大一点,网络满天飞,追踪一根关键线就成了刚需。原理图里可以按网络高亮:选中一根线,用Edit → Net Highlighting或者点工具栏里的高亮按钮,输入网络名,所有同名网络会一起变色。版图阶段对应的是 Layout XL 里的 connectivity 高亮,能一路追到物理连线。这个功能在做匹配、查寄生敏感节点的时候特别有用。
跨层追踪则依赖Shift+X和Shift+B。有个小技巧:进出层级之前先确认当前是不是处在"编辑模式"(Edit in Place),否则你会不小心改到子模块。团队协作时,改子模块前最好在群里吱一声,不然别人的仿真结果可能莫名其妙变了。
4. ADE 仿真环境:从能跑到跑对
4.1 ADE L 的标准流程,顺序别乱
ADE L 是模拟设计环境的基础版本,日常单点仿真够用。流程我固定成这个顺序,乱一步就容易出玄学问题:
Launch → ADE L,让它和当前原理图绑定Setup → Design,确认是哪个库、哪个 cell、哪个 viewSetup → Model Libraries,挂模型文件,指定 sectionSetup → Simulation Directory,指定仿真运行目录Analyses → Choose,选分析类型(dc / ac / tran / noise 等)并填参数Outputs → To Be Plotted → Select on Schematic,在图上点节点或电流支路- 保存 state(
Session → Save State),再点运行
第 3 步和第 4 步是新手最容易漏的。模型库没挂,仿真会直接报器件未定义;仿真目录没设,所有输出文件会堆在启动目录,几百个文件混在一起,想找波形都找不到。我现在习惯每个项目在启动目录下建sim/子目录,state 和结果都往里面放。
4.2 工艺角设置:从手动改 section 到用 Corner 工具
"工艺角"(corner)是模拟仿真里绕不开的一环,指的是把器件模型换成慢速、快速、典型等不同工艺偏差组合,看看电路还能不能正常工作。最原始的做法是手动改 Model Libraries 里的 section 名字,跑一次改一次,效率极低。
正路子是用Tools → Corners(ADE L 里)或者直接上 ADE XL / Assembler。在 Corner 设置里,你可以为不同的模型文件分别指定 section,然后组合成tt、ff、ss、fs、sf这些典型角,还可以叠加温度和电源电压,做成完整的 PVT 矩阵。这里有个必须理解的细节:section 的名字由 PDK 决定,不是你随便起的。打开模型文件(通常是.scs或.lib),搜索section关键字,看看里面定义了哪些组,名字拼写要以它为准。写错一个字母,仿真要么报错,要么悄无声息地用了默认角,结果看起来正常但是错的,这个最坑。
| 工艺角 | NMOS | PMOS | 常见用途 |
|---|---|---|---|
| tt | typical | typical | 功能验证、初步调参 |
| ff | fast | fast | 速度上限、功耗上限 |
| ss | slow | slow | 速度下限、建立时间余量 |
| fs | fast | slow | 上下拉能力失衡、占空比检查 |
| sf | slow | fast | 同上,方向相反 |
温度和电压一般叠加在这五个角上跑,比如ss_125C_1.62V这种组合。跑完一批以后,用 ADE XL 的详情视图横向对比关键指标,比自己抄数据到 Excel 里靠谱得多。
4.3 PWL 波形文件怎么导入
做电源、时钟、激励相关的仿真,经常需要喂一段实测波形或者自定义波形,这时候就要用 PWL(Piece-Wise Linear)源。Virtuoso 里有两种玩法。
一种是直接在原理图的源器件属性里写点对。比如一个理想电压源,属性里填pwl (0 0 1n 1.8 100n 1.8 101n 0),含义是"0 时刻电压 0,1ns 跳到 1.8V,保持到 100ns,101ns 回零"。点对数量少的时候这样最快。
另一种是从文件读。把波形存成文本文件,在源的属性里指定文件名。文件格式要求不严但有讲究:
; 第一列是时间(秒),后面是值 ; 以分号或星号开头的行是注释 0 0 1e-9 1.8 100e-9 1.8 101e-9 0两个坑需要注意:时间列必须是严格递增的,有重复时间点会导致插值异常;单位是秒,不是纳秒,填成纳秒的话仿真时间会变得极长,看起来像卡死了,其实是在慢慢算。另外文件路径建议用绝对路径,相对路径是相对于仿真运行目录的,ADE 换个目录跑就找不到了。
4.4 瞬态仿真不收敛:一套可复用的排查顺序
"tran 不收敛"是模拟仿真的日常。报错信息通常长得像ERROR (SPECTRE-16080): No DC solution found,或者提示某个节点电压超出了限制。我总结的排查顺序是这样的,从便宜的手段往贵的手段走:
第一步,跑一次 DC 分析看看静态工作点能不能解出来。很多时候瞬态不收敛的根子在静态点上,比如某个管子没导通、某个节点没有直流通路。DC 都解不出来,tran 必然失败。
第二步,检查有没有浮空节点。理想电容两端都没到地、或者运放输入悬空,在数学上节点电压是不定的,求解器自然没辙。加一个极大电阻(比如 1G)到地,问题往往就消失了。
第三步,收一收收敛参数。在Simulation → Options → Analog里,可以调整reltol(相对误差,默认 1e-3)、abstol(电流绝对误差)、vntol(电压绝对误差,默认 1e-6)、gmin(最小并联电导)。把reltol从 1e-3 放宽到 1e-4 反而更严,要注意方向:数值越小越严格,越严格越难收敛。一般调试时把reltol放宽到 1e-2 先跑通,确认电路逻辑对了再收紧。
第四步,换积分方法。默认可能是trap(梯形法),遇到振荡较重的电路,改成gear2会稳很多,代价是数值阻尼更大,可能掩盖真实的振荡。
第五步,给节点加初始条件。用ic或nodeset语句指定某些节点的起始电压,帮助求解器找到正确的解分支。运放、比较器、带正反馈的电路经常需要这一步。
第六步,设最大时间步长。加一个maxstep,比如开关电路的周期除以 1000,能避免求解器在大跳变处丢掉细节。
提示:改收敛参数之前,先用默认设置跑一次并保存日志。后面调通了再关掉那些放宽的参数重跑,确认不是靠"作弊"才收敛的。
5. 版图与验证:把设计变成可制造的图形
5.1 Layout XL 与原理图驱动版图
版图编辑器的入口是Layout XL(或者较老的Layout)。我强烈建议从原理图启动:在原理图窗口里Launch → Layout XL,让它自动创建一个与原理图关联的 layout 视图。这样做的最大好处是 connectivity 是打通的——你能在版图里高亮某个网络,看到它应当连接的所有器件端口,还能用Generate → All from Source一键把原理图里所有器件和引脚按初始位置摆进版图,省去手工摆放的功夫。
摆放时注意两点。一是Generate出来的器件通常是网格状平铺的,必须重新规划版图结构,别偷懒直接连线,那会得到一堆寄生和一堆 DRC 错误。二是随时按Shift+F或 connectivity 检查,看看有没有漏连的网络。Layout XL 会用飞线(flight line)提示未完成的连接,跟着飞线走效率很高。
5.2 DRC 与 LVS:报错定位的通用套路
DRC 检查设计规则,LVS 检查版图与原理图是否一致。工具可能是 Assura,也可能是 PVS 或者 Calibre,但排查思路是通用的。
DRC 报错的第一件事是看坐标。报错通常会给出一个坐标范围,在版图窗口里用Zoom to Coordinates跳过去,配合错误图层高亮,一眼就能看到问题。常见的类型有间距(spacing)、宽度(width)、包围(enclosure)、密度(density)。间距和宽度是局部问题,改一根线就行;密度问题往往要在芯片空白区域填 dummy 图形,属于全局性的,早做规划省事。
LVS 报错的第一件事是看它说哪不匹配。常见表述有三种:器件数量不一致、网络不匹配、器件参数不匹配。数量不一致通常是版图里多画或少画了一个管子,或者某个器件被识别成了别的类型;网络不匹配多半是连线短路、漏连,或者标签(label)打错了位置——LVS 认标签,不认你的直觉,网络名一定要用Create → Label打在正确的金属层上,且拼写和原理图完全一致。参数不匹配则是宽长比、倍数(m)对不上,这类反而最好修。
| 现象 | 高频原因 | 处理思路 |
|---|---|---|
| 器件数量不符 | 多/少画器件,或器件被识别错误 | 用 LVS 报告里的坐标定位,逐个核对 |
| 网络不匹配 | 短路、漏连、label 打错层 | 检查飞线,确认 label 所在图层正确 |
| 参数不匹配 | W/L、m、fingers 不一致 | 对比原理图与版图属性 |
| 无源器件报错 | 电阻/电容的识别层不对 | 确认 PDK 要求的识别层已覆盖 |
5.3 寄生提取与后仿真
DRC、LVS 都干净了,下一步是提取寄生参数做后仿。这一步会显著改变仿真结果,尤其是高频和精密模拟电路。工具方面,PVS 或 Quantus QRC 都常见。提取出来的视图通常叫av_extracted或calibre,然后在 ADE 里把设计视图从schematic切换成提取视图,重跑一遍。
后仿的性能通常会比前仿差,这是正常的。关键在于对比差异:如果增益掉了 20dB,那多半是某条关键线寄生太大,需要加宽走线或调整布局;如果只是相位裕度掉了几度,属于可接受范围。我一般会把前后仿结果放在同一个波形窗口里叠加,视觉效果最直观。
6. 常见问题速查与几条实战心得
6.1 高频报错与对应处理
| 报错/现象 | 大致原因 | 我的处理方式 |
|---|---|---|
| 器件未定义 / model not found | 模型库未挂或 section 名写错 | 检查 Model Libraries,打开模型文件核对 section |
| 仿真跑不出波形 | 输出未加入 plot 列表 | 用Outputs → To Be Plotted重新选 |
| 启动报库找不到 | cds.lib路径错或库被移动 | 核对路径,用绝对路径更稳 |
| 原理图器件变方框 | 技术库未 attach | Library Manager 里重新 attach |
| 波形文件找不到 | 仿真目录未设或用了相对路径 | 设 Simulation Directory,路径写绝对 |
| 图形界面字体糊 | 高分屏默认字体不匹配 | 在.cdsinit里hiSetFont |
6.2 数据管理:别等丢了才想起备份
Virtuoso 的库目录是纯文件结构,可以直接用版本管理工具托管,但有几个细节要注意。一是*.cdslck锁文件不要提交,那是运行时产生的;二是每次仿真会产生大量输出目录(psf、raw),这些不该进版本库,用.gitignore排掉;三是同一个库不要两个人同时编辑,Virtuoso 的文件锁在网络盘上并不可靠,出现冲突时很难恢复。团队里比较稳妥的做法是各人用各自的设计库,公共模块走"导出 GDS 或 OA 库"的方式共享。
6.3 几条只有真跑过才知道的经验
第一条:保存 state 是个好习惯,但要理解 state 保存了什么。ADE 的 state 存的是设置,不是结果,所以换机器跑的时候只要路径对得上就能复现。但 state 里的路径(模型文件、仿真目录)是绝对路径,换机器前记得改。
第二条:别在 CIW 里乱敲 SKILL。CIW 的输入框会直接执行 SKILL 表达式,一次误操作可能删掉一个 cell。想练手就新建一个临时库,别在真实项目上试。
第三条:网表是最后的真相。当界面上显示的和仿真结果对不上时,打开生成的网表文件(通常是netlist或input.scs),看看器件参数、连接关系到底是什么,比在界面上反复点强得多。我做电源类电路时,好几次都是靠翻网表发现某个参数没传下去。
第四条:快捷键是可以自定义的。在.cdsinit里用hiSetBindKey可以给常用功能绑键,比如把"检查并保存"绑到一个顺手的组合上。积累到十几个自定义键以后,画图速度会有明显提升。
第五条:每次改完电路都重新Check and Save,再重跑仿真。Virtuoso 不会自动感知原理图的改动,你不保存,ADE 跑的还是旧网表,然后你会对着"为什么改了没效果"发呆。
第六条:遇到想不通的现象,先看日志。仿真目录下的spectre.out、DRC/LVS 的日志文件,几乎总是把真正的原因写在里面。界面上的弹窗往往只给一个笼统的结论。我现在的习惯是仿真一启动就开着终端tail -f日志,出问题当场就能看到线索,不用等跑完再回头翻。
第七条:不要迷信"一次成功"。模拟电路本来就是迭代出来的,第一版能跑就已经不错了。把每次的 state 和结果按版本号归档,比如v1_tt_27c、v2_ss_125c,过两周回头看,你会庆幸自己当时记了。这个习惯比任何技巧都值钱。