1. IC617 这个经典版本到底特殊在哪,以及装完后最先要处理的几件事
说起 Cadence Virtuoso IC 617,很多在校学生和模拟 IC 工程师都不陌生。这么多年过去,各大高校的实验室、版图外包团队、甚至不少中小型设计公司还在用这个版本。虽然 Cadence 后来陆续推出了 IC 618、IC 23.1 等新版本,但 IC617 因为工艺库兼容性好、PDK 支持完善、操作习惯深入人心,依然是很多人的主力工具。在开始聊使用技巧之前,我先把这代工具给我的整体感觉放在前面:IC617 的稳定性其实挺吃安装环境和启动方式,很多所谓"软件崩溃""仿真莫名失败"的案例,根源都不在 Cadence 本身,而是环境变量、库路径和 license 配置出了问题。
我刚接触 IC617 那会儿犯过不少低级错误,比如在.cshrc里把CDS_LOAD_ENV和CDS_INST_DIR配串了,结果 Virtuoso 启动后找不到任何基础库,所有工艺库都显示为空白。实际上,IC617 的启动依赖的环境变量并不复杂,核心就是下面这几个:
CDS_INST_DIR:指向 Cadence 的安装根目录,比如/opt/cadence/IC617CDS_LIC_FILE或LM_LICENSE_FILE:指定 license 文件路径PATH:把安装目录下的tools/bin、tools/dfII/bin加进去CDS_LOAD_ENV:控制启动时是否加载用户自定义环境配置文件
说个很常见的坑:很多人在 shell 里直接敲virtuoso &启动,然后在 Terminal 里看到一串 CCL 报错,或者 Virtuoso 图形界面能打开但 Library Manager 里看不到任何库。这种情况九成是因为启动时的工作目录不对,或者cds.lib文件没有正确指向工艺库路径。我在实际使用中养成了一个习惯:为每个项目单独建一个工作目录,目录下放一份独立的cds.lib,用绝对路径把基础库和工艺库都列清楚。这样不管从哪个路径启动,只要在项目目录下敲命令,就不会出现"库丢失"的怪问题。
还有一个被非常多的人忽略的地方:IC617 在启动时默认会调用$HOME/.cdsenv和$HOME/.cdsinit这两个隐藏文件,如果你从网上拷贝过别人的配置文件,或者之前装过其他版本的工具,这两个文件里的设置可能会互相干扰。最典型的症状是:CIW(Command Interpreter Window)窗口会弹出一堆 warning,好一点的还能用,严重的就直接把菜单布局、显示颜色、默认仿真器路径全部搞乱。遇到这种情况别急着重装,先把这两个隐藏文件备份一下,然后用最干净的默认配置启动试一次,大部分问题都能定位到根因。
2. 原理图编辑阶段那些能省半小时的快捷键和操作习惯
进了 Virtuoso Schematic Editor 之后,很多人的操作还停留在"菜单点来点去"的阶段。上一代工程师流传下来的那些快捷键,在 IC617 里基本全都保留着,而且配上鼠标操作,效率能翻倍。我强烈建议新人在开始画原理图之前,先花半小时把下面这组快捷键练熟。
最常用的一组:
I:添加器件实例(Instance),点击后弹出 Add Instance 窗口,可以直接输入器件名,比如nch、pch、res、capW:画连线(Wire)P:打引脚(Pin),常用于层次化设计中外接端口C:复制,鼠标点一下基准点,再点目标位置,按Esc退出M:移动K:先按 K 再按两个点,可以画一条测量标尺线,辅助对齐器件U:撤销,Shift+U是重做Ctrl+D:取消当前操作F:放大到适合整个原理图的视图S:保存X:下钻进子模块,在层次化设计中特别常用
你可能觉得这些快捷键都写在菜单后面、看菜单就能知道,但实际画起来差距很大。比如你想把一个已经连接好的器件挪个位置,如果用菜单操作,至少要点击四五次;如果用M键加鼠标拖动,一秒就完成了。再比如层次化设计查连接关系,X键下钻比双击 symbol 进入子图要顺手得多,而且Shift+X还能上跳回父图,来回检查非常方便。
关于连线的几个细节:连线的时候,默认是按 90 度直角走线。如果你想画斜线或者任意角度走线,可以在连线状态下按住Shift键。这个操作很多人不知道,但碰到要画 45 度对齐的走线时就很有用。另外,连线时如果鼠标恰好停在某个已经存在的 pin 或线上,Virtuoso 会显示一个小的 "x" 标记,表示电气连接点已捕捉到,这个视觉提示一定要养成看习惯,否则很容易出现"看起来连上了、实际上没连上"的假连接。
我再分享一个层次化设计时很实用的操作:在原理图中选中一个 instance,然后按Shift+E,可以直接在下拉菜单里看到这个器件的 CDF 参数,包括模型名称model、宽度w、长度l、指叉数fingers等。对于模拟电路设计来说,改器件参数是日常操作,如果每次都双击器件再在弹窗里改,效率会低不少。而Shift+E可以直接调出编辑窗口,参数改完回车就生效。
还有一个很容易被忽视的批量修改技巧:在原理图窗口里框选多个器件,然后按Q键,会弹出批量编辑属性窗口。你可以一次性把选中的电容都改成同一个值,或者把一排电阻的宽度统一。这个方法在你做批量替换或参数扫描准备时特别有用,不用一个一个器件点过去。
连线颜色与高亮问题:默认情况下,同一网络(net)在原理图中会以同一个颜色显示。如果你看着颜色分不清网络,在菜单Display->Highlight->Net里可以直接选中网络高亮。这个操作在排查连接错误时很有用,比如两个看似不相连的 pin 其实属于同一网络,高亮后一眼就能看出来。
3. ADEL 仿真里设置工艺角、导入 PWL、排查器件未定义的实际经验
原理图画好,紧接着就是进 ADEL(Analog Design Environment)做仿真。IC617 自带的 ADEL 虽然界面看上去有点复古,但功能一点也不过时。很多初学者第一关就卡在"仿真时器件未定义"这个报错上,其实这个问题八成不是器件本身没定义,而是model library 没有加载。
具体来说,仿真之前需要把工艺库提供的模型文件加进去。在 ADEL 窗口里选择Setup->Simulation Files,在Model Libraries里添加工艺库的模型文件路径,比如xxx.lib。添加完之后,还要注意Section这一栏,很多工艺库在同一个.lib文件里按工艺角分了多个 section,比如tt(typical typical)、ss(slow slow)、ff(fast fast),只有在 Section 里填对了名字,仿真器才会采用对应的工艺角参数。
如果你想对比不同工艺角下的电路性能,一个非常高效的办法是直接编辑 model 文件路径中的 section 名称,然后连续跑几次仿真。更正规的做法是使用 ADEL 的Variables->Edit功能,把工艺角定义成一个变量,配合仿真器自带的参数扫描功能自动跑多个 corner。这里我强烈建议新手学会用 ADEL 的corner 配置:在 ADEL 的Setup->Corners里可以添加多个工艺角,然后一次仿真把所有 corner 全跑完,结果统一显示在波形窗口。这样你就不用反复改 section 名、反复跑仿真了。
关于瞬态仿真不收敛的处理,我在实际项目里遇到过太多次。最常见的几个诱因按发生概率排序:
- 电路存在没有初始条件的节点,尤其是电容、电感这类储能元件。解决办法是在 ADEL 的
Simulation->Convergence Aids里设置节点初始电压,或者用ic=语句给某些关键节点一个合理的预估电压。 - 电源上电过程太陡。如果电路中有带反馈的结构,电源瞬间从 0 跳到 VDD 很容易引起振荡发散。可以在激励源上设置一个上升时间,比如
pulse(0 VDD 0 1us 1us ...),让电源缓慢爬升。 - 仿真步长设置不合理。瞬态仿真有一个最大步长(
maxstep),如果设得太大,仿真器可能会错过电路的真实变化过程,导致收敛判断失败。我会习惯性地把 maxstep 设置为信号最小周期的 1/20 左右,比如电路工作在 10MHz,就把 maxstep 设为 5ns 甚至更小。 - 模型本身收敛性差。这种一般出现在某些非官方提取的模型上,没有太好的办法,只能换一个更稳定的仿真器,或者在模型里增加一些寄生电阻电容来帮助收敛。
另外,ADEL 的Options->Analog Simulation里有很多仿真器参数,比如reltol、abstol、vntol,这几个值控制着电压和电流的绝对/相对收敛精度。如果仿真老是"not converge",一个直接的思路是把reltol从默认的 1e-3 改大到 1e-2,把vntol从 1e-6 改大到 1e-5,牺牲一点精度换取收敛。但我不建议一上来就放宽精度,这在某些高精度比较器或 ADC 电路里会导致仿真结果失真。更好的做法是先检查电路结构和激励设置,把所有明显问题排除后,再通过合理调整容差来辅助收敛。
PWL 波形文件导入也是搜索热词里频繁出现的问题。很多数模混合电路的输入信号是数字仿真或者测试仪器导出的时域数据,格式通常是两列:第一列是时间,第二列是电压。在 ADEL 中,给电压源选PWL类型之后,需要一个文件路径。你可以在激励源属性窗口里直接填文件名,更稳妥的做法是把 PWL 文件放在仿真目录下,或者写绝对路径。
PWL 文件的格式细节要注意:Virtuoso 对纯文本格式要求不算苛刻,但空行、首行注释、列分隔符这些地方容易出问题。我一般用这样的格式:
0 0 5n 0 5.1n 1.8 100n 1.8 100.1n 0 200n 0时间单位默认是秒,如果你在文件里写5n也能识别,但为了规避格式歧义,建议全部写成标准科学计数法:5e-9 0。另外文件里不允许出现类似V、s这样的带单位字符,只用纯数字。
我还踩过这样一个坑:PWL 文件的电压值超出电源电压范围,导致仿真器在某些节点产生非物理值。后来我养成了习惯,在导入前先用 Python 或文本编辑器检查一下数据范围,把异常的毛刺点滤掉再导入。
关于仿真器类型的选择:IC617 自带spectre和ams(混合信号)等仿真器。绝大多数模拟前端仿真用 spectre 就够了。spectre 在高精度、强非线性和振荡器电路上表现很稳,而且收敛性比老一代的spice仿真器好不少。如果你做得是比较器、LDO、PLL、ADC 这类模块,把仿真器默认设为 spectre 基本不会错。只有在你需要兼容老工艺库、而工艺库只提供了spice模型的时候,才需要考虑用 spice 仿真器。
4. ADEL 与波形窗口的高阶操作:批量改参数、对比多个仿真结果、生成工作报告
ADEL 的另一个爽点在于参数扫描和设计变量管理。对于一个运放,你往往要扫描尾电流源的宽度、负载管的长度、补偿电容的值等参数,来观察增益、带宽、相位裕度的变化趋势。这时用 ADEL 的Tools->Parametric Analysis就可以让一个参数在指定范围内自动变化,然后跑出一组曲线。这里有个小技巧:在Parametric Analysis窗口里,通过Add Sweep可以同时扫描两个参数,比如 x 轴扫宽度、y 轴扫负载电容,这样就能得到一个二维参数网格的仿真结果。因为每个点都是一次完整仿真,二维网格的耗时是指数级上升的,我建议先粗扫一遍找趋势,再在关键区域细扫。
多个仿真结果对比:在Waveform Window中,你可以通过菜单Trace->Add或者直接打开多个仿真产生的波形文件来叠加曲线。对比不同 corner、不同温度下的输出摆幅或者增益曲线时,这个操作特别直观。更进阶的做法是在 ADEL 中启用"仿真结果数据库",每次仿真产生的波形都自动保存,之后可以通过Results->Direct Plot直接调出某一次历史仿真的曲线,不需要重新仿真。
我还喜欢用 ADEL 的Calculator配合Outputs来定义一些量化的性能指标,比如增益dB20(VF("/vout") / VF("/vin")),或者相位裕度phaseMargin(VF("/vout"))。这些表达式可以在 Calculator 里敲进去,然后作为输出添加,这样每次仿真结束,直接看输出结果表格就能得到性能指标,不用肉眼从波形上去读数。
报告生成:如果你需要把仿真结果整理到工作汇报或者设计文档中,ADEL 的Print功能可以直接把输入输出波形的数值打印成文本,配合图表工具画出增益/相位曲线。我习惯在每个项目目录下建一个report文件夹,把每次仿真的截图、输出表达式、关键性能表都整理进去。IC617 的波形窗口支持直接导出图片,在波形窗口菜单File->Save Image里可以选格式,支持.png、.jpg、.ps等,分辨率可以调高一些以方便写文档。
5. 版图编辑阶段容易被忽略但极其关键的视图设置与对齐技巧
从原理图进入版图,是很多电路新手最不愿意面对的一步。实际上,IC617 的版图编辑器(Layout Editor)虽然功能繁重,但只要把几个基础操作和视图设置搞清楚,画版图没那么痛苦。
Layer 设置是第一步。版图里每个层次都有特定含义,比如DIFF(扩散区)、POLY(多晶硅)、METAL1(金属一层)、CONT(接触孔)、VIA(通孔)等。这些层的显示颜色、填充图案、是否可编辑,都配置在technology file里。如果你从网上找到一个自带显示配置的.tf文件,可以直接在 CIW 里用Load命令加载。对于工艺库自带的显示映射,一般不用改,但如果发现某些层在高亮/选中时颜色不清晰,可以在Display->Layer里手动调整。
网格与对齐:版图绘制最讲究的就是"对齐"。IC617 默认的网格单位通常是 0.005 或 0.01 微米(由工艺库定义)。我强烈建议把移动步长snap spacing设为网格的整数倍,比如 0.01 或者 0.05。这样无论是画矩形、放器件、走金属线,都能保证边界落在网格上,后续做 DRC 检查时不会出现"物体边缘不在格点上"的本可避免的报错。
用r键快速画矩形:在版图编辑器中,按r键进入画矩形模式,在起点点一下,再拖动到终点,就能画出一个矩形。配合x和y键还可以在画矩形过程中精确定位。画完后如果想调整尺寸,按s键可以拉伸边缘(stretch),按m键整体移动。
走线层次的选择:不同金属层的电阻、电容特性不一样,高频信号线尽量走高层金属,一是因为离衬底远、寄生电容小,二是因为高层金属电阻率通常更低。电源和地线(VDD/VSS)要用宽金属,低电阻;敏感模拟信号线走短走直,避免与数字信号线长距离平行。
版图中的快捷键补充:
Ctrl+R:旋转选中的对象 90 度Ctrl+M:左右镜像o:打接触孔/通孔(Via),选中后可以选择孔的类型和阵列大小p:添加引脚(Pin),用于 LVS 连接n:在选中对象上创建新的层次化单元引用
很多人在版图里改走线时,喜欢先删掉再重新画。实际上用s(stretch)键拖拽金属端点就能改变走线路径,效率高很多。这个操作的核心机制是:s会连点带线一起拉伸,而不是只移动某个孤立的顶点。
关于 PEX 后仿,这里简单说一下流程,后面单独展开。PEX 全称是 Parasitic Extraction,它会在版图完成后提取寄生的电阻、电容,再反标回网表,用来做后仿真。IC617 里跑 PEX 通常需要借助工艺库或第三方工具(比如 Calibre、Assura),不过 IC617 自带的 Assura 其实也能完成整个流程,只是配置相对繁琐。PEX 结果文件往往很大,仿真时间远超前仿,我一般是先确保 DRC/LVS 干净了才跑 PEX,避免在"还没画对"的版图上浪费时间。
6. PEX 后仿全网表反标与 R+C 提取参数选择的个人经验
PEX 后仿是模拟版图工程师最关心也最头疼的一个环节。很多人前仿性能非常好,画完版图一跑后仿,增益掉了、带宽缩了、相位裕度变小了,甚至振荡器完全不振荡。这些现象背后基本都是寄生参数在起作用。IC617 里如果你用 Assura 做后仿,有个优势是不用额外切换工具,在同一个 Virtuoso 环境里完成 DRC、LVS、PEX 三大步骤,流程上更顺。
R+C 提取的模式选择:PEX 时你会遇到提取模式的选择,常见的有R+C、C only和R+C+CC。C only只提取对地电容,速度快,适合刚跑通流程时快速验证;R+C提取电阻和对地电容;R+C+CC额外提取耦合电容(即线间电容)。对高频电路或者敏感模拟信号链,R+C+CC最接近真实情况,但提取和仿真耗时也最大。我一般先用C only确认版图连接没问题,再跑 R+C+CC 做最终后仿。
反标之后的网表:PEX 完成后,工具会生成一个带寄生参数的新网表。在 ADEL 里通过Setup->Environment切换到"后仿"模式,选择刚才生成的网表文件,原来的设计文件和激励可以保持不变。你会发现仿真时的器件模型不变,只是每个金属走线和晶体管周围多了很多寄生电阻电容。如果后仿结果和前仿差距很大,可以通过查看反标网表中的关键寄生值,定位是哪个节点上的寄生影响了性能。
提高后仿效率的小技巧:在 PEX 选项里,通常可以设置"只提取某一段走线的寄生",或者把某些不影响性能的信号网络的寄生提取关闭,比如数字控制信号。这样能显著减少网表体积和仿真时间。如果电路块很大,建议先做小块的后仿验证,确认每个子模块的后仿都达标后,再做顶层集成,这样一旦出现某个参数不达标,定位问题的范围会小很多。
后仿不过的排查思路:我自己排查后仿性能衰减时,习惯按下面的顺序来:
- 看 DC 工作点有没有发生明显偏移。寄生电阻如果落在电源到晶体管漏极之间的路径上,会产生 IR drop,导致实际加在管子上的电压不是设计的 VDD。这种情况下需要加宽电源走线或者加多通孔。
- 看关键节点的大寄生电容值。比如运放输出端挂了一个 1pF 的寄生电容,带宽必然下降,此时可以通过调整补偿网络来匹配,或者优化版图布局缩短高阻节点的走线长度。
- 查耦合电容是否导致串扰。如果一条快速翻转的数字信号线与运放的参考电压线平行走线很长,翻转时的耦合会让参考电压出现毛刺,这种情况下必须修改版图布局绕线,或者加屏蔽地线。
7. 与 PCB 环节的数据交互:BOM 导出、封装导入和文件格式转换注意点
Cadence 这个大家族里,除了 Virtuoso 这种 IC 设计工具,还有 Allegro 这样的 PCB 设计工具。很多芯片或者模块项目其实是从 IC 设计到封装再到 PCB 全流程的,所以"Virtuoso 怎么和 PCB 数据对接"也成了一个高频问题。
关于 BOM 导出:如果你是在 Virtuoso 原理图里完成了一张系统级原理图,需要输出 BOM 给采购或者贴片,通常的做法是利用Tools->Export或者直接通过CDL网表转换。IC617 没有像 Allegro 那样内置一个强力的 BOM 报表工具,所以我在实际项目里更习惯先把原理图导出成标准网表或者.csv格式,然后在 Excel 里整理。不过 Virtuoso 的元件属性能完整保留元器件位号、型号、封装信息,这一点在导数据时很省心。
从 Virtuoso 到 Allegro:涉及芯片封装(package)时,通常要做的操作是把 Virtuoso 里画好的版图或者封装图形导入到 Allegro 中。比较常用的路径是先把 Virtuoso 版图导出成.DXF或.GDS格式,再用 Allegro 的导入功能转换。这里要注意层映射关系:Virtuoso 和 Allegro 的层名完全不同,导入后必须逐层核对,否则金属层全部乱套。
封装导入 PCB(热词中反复出现):封装导入 PCB 的核心不在于"能不能导"而在于"导得准不准"。我踩过最大的坑是单位不一致:Virtuoso 默认单位可能是微米,而 PCB 工具常用 mil(密尔)或者毫米,导入时一旦单位没设置对,整个封装尺寸就缩放了 1000 倍或更多。建议在导出前先明确目标工具的尺寸单位,导出时勾选好单位选项,导入后再用测量工具验证一个已知距离(比如引脚间距),确认缩放准确再做后续布线。
8. 高频杂症排查:ODBC 配置、HDL 库报错、进程异常退出的应对方案
这一节专门整理几个经常在社区里被反复问到的"疑难杂症",给出的都是我自己验证过或者从可靠渠道确认过的处理思路。
ODBC 数据源配置:Cadence 在某些模块(比如设计中需要访问外部数据库)里会用到 ODBC 数据源。IC617 里打开相关功能时提示找不到数据源,多半是系统里没有为其配置 ODBC 驱动。解决思路是:在操作系统(通常是 Linux,也有 Windows 下使用的情况)里配置一个 ODBC 数据源名称,然后在 Cadence 的配置环境里把对应的连接参数填进去。我个人不太建议在 IC617 里去折腾 ODBC,因为 Virtuoso 的主要应用场景是与工艺库、PDK 交互,很少真的需要连接外部关系型数据库,如果只是用到某一小功能,先确认功能是否必需再动手配置,免得白忙一场。
HDL 库报错:如果你在做数模混合设计,原理图里用到了 Verilog-AMS 或者 Verilog 模块,仿真时可能会报"找不到 HDL 库"或者 "Cannot compile Verilog" 之类的错误。这个问题的关键路径有两条:一是检查cds.lib里是否定义了相关 hdl 库,二是检查编译环境(比如 LD_LIBRARY_PATH)是否有对应的编译器路径。IC617 在启动时如果没把INCISIVE或XCELIUM的路径加入环境变量,HDL 模块就无法编译。最可靠的办法是确认你安装的 Cadence 套件带不带相应的 HDL 仿真器,不带的话只能换用纯模拟模型或者用模拟行为级建模(比如 Verilog-A 的模拟描述代替数字模块)。
"This application has quit unexpectedly"这类进程崩溃:这个问题在搜索热词里出现了完整句子,可见很多人遇到过。IC617 崩溃的原因五花八门,最常见的是以下几种:
- 启动时图形界面尺寸设置不合理,导致显示驱动崩溃。解决办法是删除
~/.cadence目录下的部分缓存文件,或者把DISPLAY指向一个更稳定的 X server。 - 打开某些异常大的验证文件时内存不足。Linux 下可以临时增大 swap 空间,或者在启动 Virtuoso 前关闭其他占用内存的程序。
- 与其他 EDA 工具(比如 Synopsys 的工具)环境变量冲突。这是最隐蔽的一种情况,如果你电脑里同时装了多个 EDA 厂商的工具,它们的
PATH、LD_LIBRARY_PATH会互相覆盖。我自己的做法是把不同工具的启动脚本分离,每次只 source 一个工具的配置,避免全局混用。
关于cadence 17.2 导出 swp 文件、17.4 下载这类热词:这里要提醒一句,IC617 和 Allegro 17.x 是两套不同的软件产品线,IC617 主要用于芯片前端/版图设计,Allegro 17.2/17.4 用于 PCB 设计。如果你搜索"17.4下载"是因为要做 PCB,那么你需要的其实是 Allegro 而不是 Virtuoso。两个工具可以安装在同一台机器上,但环境变量配置一定要隔离。我之前见过有同学把 Allegro 的PATH加到全局变量里,结果 Virtuoso 启动时调到了 Allegro 的动态库,界面直接崩溃。正确的做法是用独立的启动脚本,每个脚本单独配置各自的PATH、LD_LIBRARY_PATH和CDS_INST_DIR。
关于"共源级放大电路 cadence"这类具体电路仿真:共源级放大器是模拟 IC 设计入门第一课,在 Virtuoso 里搭共源级时,只需要一个 N 管、一个电阻或者 PMOS 作负载、输入 ac 源、输出负载电容,再加一个 VDD 和 GND 就能跑起来。很多新手卡在"电容两端必须都接上节点"这个问题上,比如输出接电容到地,电容的负极也要有地网络,否则在网表中会出现悬空节点。这个小细节在做任何电路的 DC/AC 仿真时都要注意。
9. 让 Virtuoso 真正好用的几个环境配置和日常习惯
最后聊点"润物细无声"的东西,这些不太会出现在官方教程里,但实际用起来能让你每天少生很多气。
第一,启动 Virtuoso 前先定义好搜索路径。CDS_AUTO_EXIT、CDS_LOG_PATH这些变量如果设好了,日志文件会自动归档,遇到仿真异常时可以快速查日志定位。特别是CDS_LOG_PATH,如果留空,日志会散落在各个仿真目录下,找起来非常痛苦。
第二,用文本编辑器管理.cdsenv文件。IC617 的很多默认配置可以通过在 CIW 里改动后自动写进.cdsenv,但手工编辑这个文件能实现更多精细控制。比如你可以设置"默认的仿真器类型"、"波形窗口背景色"、"保存时是否自动备份"等。注意手工编辑前一定要备份原文件,因为格式只要写错一行,Virtuoso 可能连启动都会失败。
第三,学会用save和restore菜单保存整个设计状态。IC617 的 CIW 中File->Save State可以把当前打开的 library/cell/view、仿真环境、变量配置都保存下来,下次用Restore State一键恢复。接手别人项目的时候,如果对方给了一份.sdb或.state文件,导入后能省去大量重新配置的时间。
第四,善用.cdsinit里的初始化代码。这个文件本质上是 Skill 脚本,你可以在里面写一些自动执行的命令,比如启动后自动加载某个工艺库、自动打开某个单元的版图、设置默认的网格步长等。以前我带新人的时候,会在.cdsinit里把所有团队的公共设置写好,新人拷过去后马上能进入统一的工作状态,不会因为各人显示习惯不同导致检查和协作出问题。
第五,版本管理习惯。Virtuoso 的 cellview 是二进制或者半文本格式存储,如果直接用 Git/SVN 管理整个 library 目录,经常会出现冲突和损坏。我个人的做法是:用 Cadence 自带的export功能导出关键的网表文件、CDF 参数文件、仿真状态文件,把这些文本格式文件纳入版本管理;版图则定期导出 GDS 存档。这样既保留了设计历史,又避免了二进制文件合并冲突的麻烦。
关于 IC617 和 IC618 等新版本的选择,我再说两句。如果你是学生或者刚入门,老师实验室用的是哪个版本就用哪个版本,避免因为版本差异浪费调试时间。如果你是自己部署环境、冲着做项目去的,IC617 在大多数成熟工艺库里依然是兼容性最好的选择之一,很多老 PDK 甚至只支持到 IC617。但如果工艺库比较新(比如一些先进工艺节点),建议确认一下 PDK 是否支持 IC617,否则画版图时可能会出现层设置不对、DRC runset 无法加载这类问题。不要盲目追求最新版,EDA 工具链的兼容性和稳定压倒一切,这比界面是不是更现代重要得多。
要说我在 IC617 上踩过最深的坑,其实不是哪条命令不会用,而是在同一个环境变量配置里同时塞了太多工具的路径。Cadence 启动对动态库的依赖很敏感,哪怕某一个库文件被另外工具的同名文件覆盖,都可能引发各种离奇崩溃。后来我把每个 EDA 工具的配置独立成 script,需要哪个就 source 哪个,这个问题再没出现过。
最后留一个实操小技巧给刚接触 Virtuoso 的朋友:在原理图编辑窗口里,鼠标中键默认是"立即复制"。很多人只习惯用左键选择菜单,浪费了中键这个高频操作。你把鼠标移到某个器件上,按中键拖动,松手就会复制出一个新器件,这样搭重复结构(比如多路相同负载)时效率极高。组合键Ctrl+Z撤销、Ctrl+Y重做,在 Virtuoso 里同样生效。版本虽老,工具还是那个工具,把细节摸透了,它就是你手上最顺手的兵器。