ARTICLE DETAIL

资讯详情

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

Cadence Virtuoso IC617 入门实战:环境配置到仿真版图验证

Cadence Virtuoso IC617 入门实战:环境配置到仿真版图验证 Cadence Virtuoso 这套工具我算是从完全看不懂日志的状态一路啃过来的。IC617也就是 IC6.1.7在模拟集成电路设计这个圈子里至今仍然是装机率最高的版本之一——学校课程用它很多公司的老项目也还在用它甚至一些 PDK 的官方支持列表里IC617 永远排在最前面。但它的门槛也是真的高第一次打开 virtuoso 那个灰扑扑的界面CIW 窗口刷着看不懂的日志新建一个库能弹出三四个报错跑个瞬态仿真卡在trying to converge上一整晚。这篇笔记就是把这两年踩过的坑、整理过的配置和验证过能跑通的流程完整写出来主要面向微电子、集成电路相关专业的同学刚进课题组需要自己跑仿真画版图的研一新生以及从数字方向转过来想补模拟设计流程的工程师。我不假设你有任何 Virtuoso 基础但我假设你愿意看日志、愿意动手改环境变量。1. 先搞清楚IC617这套工具到底由什么组成1.1 一个平台五个必须认识的组件很多人以为 Virtuoso 就是一个软件装完就完了实际上 IC617 是一整套工具链的集合安装目录下 tools 里躺着十几个可执行程序。真正干活的时候你会反复打交道的主要是下面这几个。第一个是CIWCommand Interpreter Window中文一般叫命令解释窗口。它是整个环境的入口你敲virtuoso 之后弹出来的那个小窗口就是它。别小看它所有工具的启动、所有库的定义、所有报错的源头日志都在这里。我刚开始学的时候完全无视这个窗口直到有一次仿真跑不起来折腾两小时才发现 CIW 里早就用红字提示了库路径不存在。第二个是Virtuoso Schematic Editor原理图编辑器也就是 L 版和 XL 版。画电路、调器件、连线的活儿全在这儿。第三个是ADEAnalog Design Environment仿真环境分 ADE L、ADE XL 和 Assembler 三个层次L 是最基础的XL 支持多工艺角并行扫描。第四个是Spectre仿真引擎本身它有 Spectre、Spectre APS、Spectre X 几个变体速度和精度不一样对应不同的 license。第五个是Virtuoso Layout Suite版图套件画物理版图用的。除了这五个实际项目里还会碰到Library Manager库管理器管所有 cellview 的、PVS 或 Assura物理验证跑 DRC/LVS 的。把这些组件的分工理清是避免我到底该点哪个菜单这类迷茫的第一步。1.2 为什么新手依然推荐从IC617入手市面上已经有 IC618、IC231 这些更新的版本了为什么还推荐从 IC617 开始我的理由有三条都是从实际经历里得出来的。第一资料密度最高。你在任何技术社区搜Virtuoso 怎么设置工艺角十篇回答里有八篇截图界面是 IC617 的样子。菜单在哪、按钮叫什么你能找到现成的答案。换成新版本你得自己摸索菜单位置的迁移。第二PDK 兼容性最广。很多高校和中小设计公司拿到手的工艺库release 时间比较早测试基准就是 IC617。你用一个更新的 Virtuoso 去装很可能遇到 techfile 版本不匹配、CDF 参数解析失败这类问题对新手来说排查成本极高。第三操作逻辑向后兼容。IC617 里的快捷键体系、库管理逻辑、ADE 的仿真流程到了 IC618 基本原封不动。也就是说你现在花在 IC617 上的学习成本不会白费将来公司换成新版你只需要适应菜单位置不需要重学概念。1.3 我建议的学习路线排布不要一上来就想着画一个完整的运放。我见过太多人第一步就去啃两级运放然后在偏置电路上卡了两周就放弃了。合理的顺序是这样阶段目标核心工具大致投入第一阶段把一个反相器从原理图跑到瞬态波形Schematic ADE L3 到 5 天第二阶段加上 AC 分析看增益和相位裕度ADE L 的 ac 分析2 到 3 天第三阶段加上工艺角扫描理解 PVTADE L Corners / ADE XL3 到 5 天第四阶段把反相器画成版图跑通 DRC/LVSLayout Suite PVS7 到 10 天第五阶段换一个真实模块比如电流镜或差分对全流程持续第一阶段的目标不是设计出什么而是跑通流程。你要的是让波形出来哪怕参数是随便填的。流程通了后面换电路只是换器件的事。2. 环境变量与库管理所有坑的源头2.1 安装目录结构和那几个必须写对的变量IC617 的安装目录结构是这样组织的顶层是IC617里面是tools和share两个大目录。tools下面是bin、dfII、spectre等等子目录。关键点在于Virtuoso 不会自己去猜这些东西在哪全靠环境变量告诉它。我踩过最典型的坑是PATH里加了路径但顺序写错了结果系统调用的是另一个版本的工具界面能打开但一跑仿真就报找不到 spectre。原因是 PATH 是从前往后找的你的新版本必须写在旧版本前面。在~/.bashrc或者项目自己的环境脚本里一般要写这么几行# 安装根目录 export CDS_INST_DIR/opt/cadence/IC617 export CDS_ROOT$CDS_INST_DIR # 可执行文件路径注意顺序 export PATH$CDS_INST_DIR/tools/bin:$PATH export PATH$CDS_INST_DIR/tools/dfII/bin:$PATH export PATH$CDS_INST_DIR/tools/spectre/bin:$PATH # 仿真器单独装的情况 export MMSIM_INST_DIR/opt/cadence/MMSIM151 export PATH$MMSIM_INST_DIR/tools/bin:$PATH # 授权相关按你所在环境提供的地址填写 export LM_LICENSE_FILE5280your-license-host export CDS_LIC_FILE$LM_LICENSE_FILE # 网表输出模式模拟设计几乎都要设成 Analog export CDS_Netlisting_ModeAnalog这里面有几个点值得展开说。CDS_Netlisting_Mode这个变量我强烈建议一开始就设成Analog。默认情况下 Virtuoso 出来的网表是数字风格的很多模拟器件的参数会被简化掉你明明在原理图上标了电阻值网表里却看不到。设成 Analog 之后网表里会保留完整的参数出问题时对着网表查比对着原理图猜要快得多。LM_LICENSE_FILE和CDS_LIC_FILE最好都设指向同一个地方。Virtuoso 不同组件读取授权变量的优先级不完全一致有些老工具只认CDS_LIC_FILE你只设一个的话会出现原理图能开、ADE 打不开这种诡异现象。注意环境变量改完之后要在同一终端里source一下或者重开终端。直接在新窗口里试是没用的因为子进程继承的是父进程的环境。2.2 cds.lib 与 lib.defs库到底去哪儿找环境变量解决的是程序在哪cds.lib解决的是库在哪。这个文件通常放在你的工作目录下内容是若干条库定义DEFINE analogLib $CDS_INST_DIR/tools/dfII/etc/cdslib/artist/analogLib DEFINE basic $CDS_INST_DIR/tools/dfII/etc/cdslib/basic DEFINE mydesign ./mydesign INCLUDE /opt/pdk/yourpdk/cds.lib四种语句的差别我建议你记住DEFINE是硬定义路径写死SOFTINCLUDE是如果有就加载没有也不报错INCLUDE是必须有缺了就报错ASSIGN用来给库改名或者做别名。新手阶段最常见的问题是把DEFINE的路径写成了别人的绝对路径比如复制了同学的cds.lib里面一堆/home/xxx/...你自己跑当然全部报错找不到库。一个好习惯是cds.lib里只写相对路径和$CDS_INST_DIR这类变量路径PDK 的部分用INCLUDE引 PDK 自带的那个cds.lib。这样将来换机器或者换账号路径不用大改。lib.defs是另一套机制主要给 DFII 相关工具用功能上和cds.lib有重叠。IC617 时代cds.lib是主流lib.defs主要是历史遗留。如果你在别人的工程里看到了lib.defs不需要惊慌两者同时存在也不会冲突但优先保证cds.lib是对的。2.3 工艺库导入与 Library Manager 的实际操作把 PDK 引入自己的设计环境标准流程是这样的打开 CIW点Tools → Library Manager你会看到一个树状的库列表。新建自己的设计库点File → New → Library填库名然后它会问你Attach to an existing techfile?这里选 PDK 提供的技术文件。这一步叫 Attach Tech Library是很多人忽略的关键动作。如果不 attach你的库里就没有工艺层信息画版图的时候 LSW层选择窗口里空空如也一个矩形都画不出来。然后把自己的库和 PDK 提供的器件库关联起来。PDK 一般会提供一个cds.lib片段你把它INCLUDE进来PDK 的器件库名字可能是pdk_devices、tsmc18之类就会出现在 Library Manager 里。提示Attach 的技术文件一定要和 PDK 版本对得上。曾经有一次我 attach 了错误的 techfile结果 DRC 跑出来一片层都没有排查了半天才发现是 attach 错了改回来 DRV 结果瞬间正常。Attach 之后可以打开库的属性看一眼确认 techfile 路径。3. 原理图设计从调用器件到符号封装3.1 原理图编辑器的高频快捷键Virtuoso 的快捷键设计和一般 EDA 工具不太一样它走的是按一个字母就进对应命令的路子不用按 Ctrl。这些键用熟了效率会高非常多我列一下最常用的按键功能备注i添加器件实例最常用w画连线支持宽窄线切换p添加引脚 Pin记得设方向l添加标签 Label网络命名q编辑属性选中器件后按c复制m移动r旋转s拉伸调整器件尺寸f全图适配视图操作e进入子单元看层次内部Ctrle返回父单元Shifte原地编辑打开新窗口编辑x保存并检查出网表前的动作Shiftx仅保存不检查这里最关键的是x和Shiftx的区别。Shiftx只存盘不检查x会触发完整的设计规则检查包含引脚一致性、命名冲突、悬空等。很多人习惯性按Shiftx结果仿真报pin mismatch才发现问题其实x早就提示了。我的建议是养成按x的习惯哪怕它多花两秒。另外i添加器件之后弹出的 Component Browser 里可以按库过滤。如果你是第一次用选analogLib里面res、cap、ind、nmos4、pmos4、vdc、vsin这些是必用的。analogLib里的器件是理想器件不带工艺参数做原理验证够用了一旦要跑真实工艺仿真就得换成 PDK 库里的器件。3.2 器件属性显示电阻不显示阻值到底怎么办这是一个极高概率会遇到的问题我专门拿出来讲。现象是你在原理图上放了一个res属性里明明填了r 1k但图上干干净净什么数字都不显示。原因通常有三个按出现频率排序第一个是 Display Levels 过滤。Virtuoso 有一套显示级别机制去Options → Display → Display Levels能看到两个数字比如 0 和 20。级别数值越低显示的信息越少级别越高连器件内部的引脚名都会显示出来。有时候你从别人那儿拿来的cdsenv配置文件把上限调得太低所有 label 都被过滤掉了。把上限调到 20 试试如果数值出现了那就是这个问题。第二个是器件的 Label 设置。选中器件按q弹出的属性窗口里有一个Label字段它决定了这个器件在图上显示什么。空白就是什么都不显示填了表达式才会显示。对于analogLib的res标准设置是显示r的值。如果这个字段被人清空了你按q把它填回去就行。要注意q改的是这一个实例如果要改整类器件的默认行为得去改 CDF 参数定义通过Tools → CDF → Edit那个操作影响面比较大新手不建议乱动。第三个是自定义 Symbol 的 label 表达式写错了。如果你用的是自己画的器件符号那 symbol 里的 label 需要绑定到个 CDF 参数上。实际操作是在符号编辑器里加一个 label在它的属性里把Label设为类似r或者带 eval 的表达式。表达式不匹配的话显示出来就是个空白。一个更省事的排查办法用Edit → Component Display这个命令。选一个器件它会把当前所有能显示的属性和它们的显示状态列出来你可以直接勾选Value。这算是官方给的一个快速开关我碰到显示问题时第一反应就是用它。3.3 层次化设计与 Symbol 生成画到一定规模你就必须把一个模块封装成一个符号然后在更高层调用这就是层次化设计。Virtuoso 里生成符号的操作是Create → Cellview → From Cellview它会基于你当前原理图里的引脚自动生成一个方框符号。这里有几个模板参数要留意。符号的引脚位置分 L左、R右、B下、T上默认生成会按引脚名字母排序摆放。如果引脚很多自动摆出来的符号会很难看需要你自己拖动调整。更重要的是引脚方向的匹配原理图里p出来的引脚有 direction 属性input、output、inputOutput 三种。符号里的引脚也必须是一致的否则x检查的时候会报错或者网表出来是断的。我踩过的一个坑是先画了符号后来在原理图里加了一个新引脚但忘了更新符号。这时候顶层调用这个模块新引脚在外面根本看不见连线断在那儿跑 LVS 的时候才会暴露出来而且报错信息相当隐晦。所以每次改完原理图的引脚一定要重新生成一次符号或者手动进符号编辑补上。这个动作不花时间但能省掉一堆莫名其妙的排查。4. 仿真环境ADE L工艺角、PWL波形与收敛性4.1 ADE L的完整仿真链路从原理图进 ADE L 的方式是在原理图窗口的菜单栏点Launch → ADE L或者在 CIW 里选Tools → ADE L。前者会自动带上当前的 cellview 信息后者需要你手动 Setup。ADE L 跑一次完整仿真的步骤我按顺序列出来这个顺序其实是有逻辑的Setup → Design指定要仿真的 cellview。这一步告诉 ADE 我仿的是哪个电路。Setup → Simulator/Directory/Host选仿真器。默认可能是 spectre确认一下同时设置工作目录。这个目录很关键所有中间文件网表、波形、日志都在这里建议按项目分目录别全堆在 home 下。Setup → Model Libraries加载工艺模型文件。这是最容易出问题的一步见 4.2。Setup → Temperature设置仿真温度默认 27 度。Variables → Copy From Cellview把原理图里用到的变量比如w、l、r拉到 ADE 里方便统一改参数。Analyses → Choose选分析类型tran、dc、ac、noise 等等。Outputs → To Be Plotted / To Be Saved指定看哪些节点的波形。Simulation → Netlist and Run开始。这里面第 3 步是重灾区。PDK 的模型文件通常是.scsSpectre 格式或者.m老式格式而且里面用section把不同工艺角tt、ss、ff 等分成了不同的段。你在 Model Libraries 里必须指定 section否则仿真器找不到任何模型会直接报器件未定义。4.2 工艺角设置ADE L的Corners与ADE XL工艺角这个概念通俗讲就是芯片做出来的时候同一批次的器件参数会因为制造波动有偏差快的一批叫 ff慢的一批叫 ss典型的叫 tt。再加上温度和电压的变化共同构成了 PVT 条件。一个能用的设计必须在所有角上都满足指标。在 IC617 的 ADE L 里Corner 的入口在Tools菜单下不同小版本位置略有差异有的在Tools → Corners有的整合在仿真设置面板里。一个典型的 corner 配置要填三个东西model section、温度、供电电压。Corner 名Model Section温度供电以1.8V为例含义TTtt271.8典型条件SS_HOTss1251.62慢器件高温低压最悲观FF_COLDff-401.98快器件低温高压SFsf271.8NMOS慢/PMOS快FSfs271.8NMOS快/PMOS慢温度为什么选 -40 和 125因为大部分商用芯片的工业级温标就是这两个端点。电压为什么是 ±10%这是供电容差的常见约定。当然具体项目要按 spec 来我这里给的是通用做法。ADE L 的 Corner 功能比较基础跑起来是一个角一个角顺序执行看结果要来回切。如果角比较多强烈建议直接上 ADE XL 或者 Assembler它们支持一次提交多个角并行跑结果用一个表格汇总哪个角挂了、哪个指标超了一目了然。我一开始图省事一直用 ADE L后来做一个 5 个角的电路手动跑了半小时换 ADE XL 之后三分钟出结果体验差距非常大。4.3 PWL波形文件导入的三种做法做电源、做上电时序、做瞬态激励的时候你会需要用一个任意形状的波形去驱动电路这就是 PWLpiecewise linear分段线性。第一种直接用vpwl器件。analogLib里有vpwl属性里有一栏PWL file name你指向一个文本文件就行。文件格式很简单两列0 0 1n 0 2n 1.8 10n 1.8 11n 0第一列是时间第二列是电压。注意单位问题如果只写数字Virtuoso 会按默认单位解释时间默认秒你写1n这种带单位的写法最保险。另外vpwl器件本身有一个 timeScale 参数如果你的文件是纳秒量级的数字但不想每条都写单位就把 timeScale 设成1n。第二种用vpwl_file。和vpwl的区别是它更直接地读文件适合文件很大、点数很多的情况。比如你用 Python 或者 MATLAB 算出一段复杂的激励波形导出成两列文本用vpwl_file直接喂进去。第三种在 ADE 的器件属性里导入。如果你的源用的是vsource在 ADE 的Edit → ... → Edit Object Properties里可以把源的类型设成 pwl然后手动填点或者用界面上的导入按钮加载文件。这种方式适合点数很少、手填就够的情况。我自己用下来点数超过 20 个就用文件20 个以内就手填。手填的好处是所有参数都在原理图里看得见别人接手你的设计不用去找文件文件的好处是可复用、可脚本生成。注意PWL 文件里的时间点必须严格递增出现重复时间点或者倒序仿真器会直接报错。另外文件路径用相对路径时是相对于仿真工作目录不是原理图所在目录这一点经常搞混。4.4 瞬态仿真不收敛的系统排查思路Trying to converge这个提示是每个 Virtuoso 用户都见过的老朋友。它的本质是仿真器在用迭代法求解电路方程某一时刻的节点电压一直收敛不到容差范围内于是不断缩小时间步长重试超过上限就报错退出。排查要有顺序我按我实际的排查习惯列一下。第一步先看日志。仿真目录下会有spectre.out或者类似的日志文件里面会告诉你哪个节点、哪个器件不收敛甚至会说DC analysis did not converge还是transient。如果是 DC 不收敛那瞬态肯定也不行因为瞬态的第一步就是要算 DC 工作点。这个信息能把你从盲猜里救出来。第二步检查悬空节点。这是最高频的原因。原理图上某个节点的所有连接都断开了或者某个器件的一端没接方程就无解。一个排查技巧是在可疑节点上挂一个大电阻比如 1G到地如果仿真突然能跑通了说明就是浮空问题。第三步换积分方法。Spectre 默认用的是 trap梯形法它精度高但容易振荡。可以在仿真选项里改成gear2methodgear2在 ADE 里的设置位置是Simulation → Options → Analog或者直接在仿真设置里找到method参数。改成 gear2 之后大部分振荡问题会消失代价是精度略微下降。第四步调容差和加电容。把reltol从默认的 1e-3 放宽到 1e-2或者加上cmin比如 1f也就是在各个节点对地加一个极小电容。cmin的作用是给所有节点一个最小的对地电容避免出现纯电阻网络导致的奇异矩阵。第五步给定初值。用nodeset或者ic给关键节点指定一个初始电压让迭代从一个好的起点出发。比如一个锁存结构两边对称的时候迭代器可能一直在两个解之间跳给一个轻微的不对称初值就能解决。第六步用 initial condition 跳过 DC。如果 DC 工作点本身就很难算你可以让瞬态仿真直接从ic指定状态开始跳过 DC 求解设置方式是瞬态分析里的icnodevalue参数。我的经验这六步能解决大概 90% 的不收敛问题。剩下 10% 通常是电路本身有拓扑问题比如正反馈环路没有明确的稳定点那就不是仿真设置能救的了得回去改电路。5. 版图设计与物理验证从Layout到GDS5.1 Layout Editor的基础操作与器件调用从原理图进版图标准动作是在原理图里选Launch → Layout XL前提是这个 cell 已经有对应的 layout cellview。第一次进的时候它会问你要不要 create new layout选是它就会根据原理图里用到的器件从 PDK 的版图库里调出对应的版图实例。版图的快捷键和原理图完全不一样得重新记一遍按键功能p画路径Pathr画矩形l加标签m移动c复制s拉伸k放标尺f全图适配Shiftf含实例内部的全图适配a全选 / 对齐工具画版图绕不开 LSWLayer Selection Window那个小窗口。所有可用的工艺层都列在里面你要画哪个层先在 LSW 里点亮它。新手最容易犯的错误是忘了切层画了半天才发现画到了错误的层上结果 DRC 一片红。我的习惯是每次画之前先确认 LSW 里亮的是哪一层养成肌肉记忆。器件调用用i和原理图一样选 PDK 的 layout 库。调用出来的器件是封装好的 unit device尺寸靠参数控制不要手动去画晶体管。手动画晶体管只存在于极特殊的情况日常设计都是用 PDK 提供的版图器件。5.2 DRC与LVS的跑法及常见失败原因物理验证分两块DRC 检查版图是否符合工艺的设计规则最小线宽、最小间距、密度等LVS 检查版图连接关系是否和原理图一致。跑的方式在 IC617 里主流是 PVSPhysical Verification System老一些的项目可能还在用 Assura。两者的操作路径不同但思路一致选择一个规则文件rule file扩展名通常是.rsf或者.rul由 PDK 提供选择要验证的 cell点运行。结果会在一个专门的窗口里显示DRC 的每一条 violation 都能点进去定位到版图上的具体位置。LVS 失败的常见原因我整理了三个最典型的第一个端口标签缺失。LVS 需要知道哪些网络是外部端口。如果版图上没打标签或者标签打在了错误的层上LVS 会认为这个网络是内部的导致和原理图对不上。打标签必须用工艺规定的 pin 层不是随便画个 text 就行。第二个器件识别问题。比如原理图里是一个 M4 的晶体管版图上放了四个单独的管子LVS 可能识别成四个独立器件数量对不上。解决办法是在版图上正确使用阵列或者 multi-finger 结构让识别规则能匹配上。第三个衬底连接。每个 NMOS 的衬底要接 VSSPMOS 要接 VDD如果版图上漏了或者接错了LVS 直接报 device mismatch。这个错误在有大量晶体管的电路里很难肉眼找得靠 LVS 的 netlist 对比功能它会列出两边不一致的节点。提示LVS 之前一定要先跑 DRC。DRC 没过的版图LVS 结果也不可信因为短路、断路的几何问题会直接导致连接关系错乱。顺序搞反了就是白费时间。6. 常见报错速查与踩坑心得6.1 典型报错速查表报错或现象大概率原因处理方式This application has quit unexpectedly显示环境冲突、临时文件损坏、库版本不匹配看cds.log删掉工作目录下的临时文件试virtuoso -nograph判断是否显示问题仿真器件未定义Model Library 没加载或 section 指定错误Setup → Model Libraries检查路径和 sectionTransient 不收敛悬空节点、积分方法、容差按 4.4 的六步排查电阻不显示阻值Display Level 过滤或 Label 未设置Edit → Component Display或调 Display LevelsNetlisting error / pin mismatch原理图引脚和符号引脚不一致重新生成 Symbol或进符号编辑补齐引脚库打不开 / 找不到 cellcds.lib路径错误检查是否有绝对路径指向别人的目录DRC 一片红画到了错误的层或器件间距不够检查 LSW 当前层逐条看 violation6.2 几条花钱也买不到的经验把.cdsinit和.cdsenv当成代码来管理。这两个文件决定了你的环境行为比如默认显示级别、默认保存格式、启动时加载哪些脚本。很多人改着改着就改乱了出了问题不知道是哪次改动导致的。我的做法是给它们建一个 git 仓库每次改动都有记录出问题直接回滚。同时保留一份干净版本怀疑是配置问题时换回去试一下能快速定位。仿真目录按项目分不要共用。Spectre 会在工作目录下生成一大堆中间文件如果两个项目共用一个目录波形文件互相覆盖网表也可能串。更糟的是某个项目的残留文件可能影响另一个项目的运行结果。我的目录结构是~/sim/项目名/模块名/日期/每次仿真都是干净目录。学会看 spectre.out而不是只看图形界面。图形界面只给你结果日志给你原因。绝大多数报错在日志里的描述都比界面详细得多包括具体节点名、具体器件名、尝试了多少次迭代。看日志这个习惯是我从卡住就重启变成卡住能定位的分水岭。用好 ocean script 做批量。如果同一个电路要跑几十组参数手动在 ADE 里改太慢了。ocean 是 Cadence 的脚本语言可以把整个仿真流程写成脚本批量执行、自动收集结果。入门门槛不高把 ADE 里做过的操作对着 ocean 手册翻译一遍就行。我当年做一个偏置电路扫描手动跑了两个小时写成脚本之后五分钟跑完。定期保存并且理解x和Shiftx的区别。这不是废话。Virtuoso 的崩溃不算罕见尤其是在切换工具、加载大库的时候。我曾经有一次画了两小时的版图没存工具崩了从头再来。现在我的习惯是每完成一个小模块就按一次Shiftx做完一个阶段再按x做完整检查。遇到问题先怀疑环境再怀疑电路。这个思路能省大量时间。新手常见的情况是仿真跑不出来第一反应是我的电路设计错了然后开始改参数、改拓扑折腾半天。实际上很多时候是环境变量、Model Library 或者库路径的问题。先拿一个最简单的已知能跑通的例子比如 PDK 自带的示例电路跑一遍如果它也跑不通那肯定是环境问题跟你的电路没关系。我个人在实际操作中的体会是Cadence Virtuoso 这套工具的难点从来不在它有多复杂而在于它把大量信息藏在了日志和配置文件里你不主动去看就永远不知道发生了什么。IC617 作为一个成熟的版本它的行为其实是高度可预测的环境对了库对了仿真设置对了它就一定给你结果。剩下的事情就是把这几个对了逐个确认到位。
返回列表