☰
Cadence Virtuoso两级运放仿真全流程:从原理图到工艺角扫描
2026/9/28 21:30:32 网站建设 项目流程

做模拟IC设计,Cadence Virtuoso这套工具基本绕不开。两年前我第一次完整跑通两级运放从原理图到工艺角仿真时,才真正明白“工具只是载体,核心是流程”,那之后我再看到群里有人问Cadence怎么仿运放,我都会劝他们别急着点按钮,先把整条链路该怎么走想清楚。

这篇文章就按我实际操作的顺序来,从环境准备、原理图搭建、DC/AC/瞬态仿真,到最后的工艺角扫描,中间遇到的问题和排查思路也会一起写出来。适合刚接触Cadence的在校学生,也适合从其他EDA平台转过来的工程师照着做一遍。两级运放这个例子选得特别好:它结构不复杂,但覆盖了模拟仿真里最常见的AC、瞬态、PVT分析,跑通一次,后面换别的电路基本就是举一反三。

1. 两级运放仿真要准备什么

1.1 先搞清Cadence工具链里谁干什么

模拟IC设计日常提到的Cadence,指的主要是Virtuoso平台那几个核心组件。原理图输入用的是Virtuoso Schematic Editor,符号和版图则在Virtuoso Layout Editor里完成;仿真的前端操作界面是ADE(Analog Design Environment),现在新版本里常见的是ADE L和ADE XL;真正的仿真内核通常是Spectre或者APS,前者是经典SPICE级仿真器,后者是加速版的并行求解器。

刚开始不用把所有组件都吃透,推荐先把一条最小链路跑顺:Schematic Editor画电路,在ADE L中设置模型库和仿真类型,调用Spectre跑DC和AC,再用Calculator和Waveform窗口分析曲线。等到需要跑多组工艺角或蒙特卡洛时,再上手ADE XL,因为ADE XL有集成的工艺角表格和结果对比面板,效率会高很多。

我个人的经验是,第一遍千万别直接在ADE XL里折腾复杂设置,先老老实实把ADE L的每个选项过一遍。ADE L虽然界面老,但信息非常直白——模型库加载在哪、设计变量有几组、输出表达式怎么填,都是一目了然的,对理解仿真原理特别有帮助。

1.2 工艺库和模型库的配置

仿真前需要让Cadence知道你的晶体管模型放在哪里。工厂会提供PDK,里面包含器件模型、参数和参数化单元(pcell)。如果是学校的实验环境或者公开PDK,通常也会给你一个或多个.scs格式的模型文件。

最基础的做法,是在电路库所在目录下,配置好lib.defs或cds.lib文件,然后在ADE窗口的Setup -> Model Libraries里把模型文件和工艺角设置好。很多初学者一上来就画电路,结果仿真器报“模型未定义”或“器件未找到”,90%都是因为模型库没有加载,或者加载的模型与原理图器件名字对不上。

注意:添加模型库时,不光要指定文件路径,还要确认corner那一栏没有选错。如果工艺文件里有tt、ss、ff、sf、fs几组工艺角,先选tt(典型)做第一轮调试,后面做工艺角分析时再切换或扫描。

1.3 先把设计指标写清楚

没有目标的仿真就是瞎点按钮。做两级运放之前,我建议先写下一组明确的指标,哪怕它们只是初步估计值。比如一个典型的例子:

指标目标值说明
电源电压 VDD1.8V0.18um工艺常见
开环增益>= 60dB约1000倍
单位增益带宽 GBW10MHz小信号频响交叉点
相位裕度>= 60°保证稳定性
负载电容 CL2pF输出端负载与寄生假设
功耗<= 0.5mW由总偏置电流决定
压摆率 SR由电流和CL决定可用SR=Ibias/CL估算

这些指标不要求一开始就是最终值。仿真的意义就在于验证设计猜想,然后通过调整尺寸和偏置来逼近目标。但定了指标,你就知道第一个AC曲线出来时应不应该去调电流,而不是看着曲线发呆。

2. 原理图设计与尺寸推导

2.1 选择经典拓扑

我这次采用最经典的两级结构:PMOS输入差分对加NMOS电流镜负载做第一级,再级联一个PMOS共源放大管做第二级,中间用米勒电容Cc和调零电阻Rz做频率补偿。之所以大部分教材都拿它做例子,是因为它能直观反映增益分配和极点分离的思想。第一级把差分信号变成单端信号并给足够高的输出阻抗,第二级负责提供主要的电压摆幅,Cc把主极点往低频推、同时通过Rz抵消右半平面零点的影响。

输入管选PMOS还是NMOS,主要看共模输入范围。PMOS输入对可以让输入共模电压接近地,NMOS输入对适合接近电源电压。在1.8V电源下我习惯用PMOS输入对,这样偏置电路简单,而且PMOS的闪烁噪声通常比NMOS小,在小信号放大场景里更友好。

2.2 尺寸参数从哪儿来

晶体管尺寸不是拍脑袋定的。可以先做手工估算,再回到Cadence里修正。假设偏置电流源Ibias=20uA,输入差分对的尾电流也取20uA,那么每条支路的电流就是10uA。第一级增益大约等于输入管跨导与输出阻抗的乘积,而输出阻抗主要由输入管、负载管的沟道长度调制决定,所以如果想提高增益,就加大L,而不是一味加大W。

第二级电流可以取50uA左右,输出管摆幅和压摆率都依赖于这一级的电流。单位增益带宽的近似计算公式是GBW = gm_in / (2π * Cc)。如果目标GBW是10MHz,Cc取1pF,反推gm_in大约需要2π * 10MHz * 1pF,也就是62.8uA/V左右。再结合每条支路电流10uA,过驱动电压Vov大约在0.32V附近,对应的(W/L)可以从gm = 2*Id/Vov来估算,再根据工艺参数折算出具体宽度。调零电阻Rz一般取1/gm_second或略大一点,用来把右半平面零点移到左半平面或推到高频去。

我这里不会给出一个看似万能的固定尺寸表,因为不同工艺模型差异太大。更合理的方法是:把上面这几个手算值当初始点,仿真后根据工作点和频率曲线再迭代W、L、偏置电流。很多人喜欢一步到位调出一个漂亮曲线,但那样往往不知道每个参数在扮演什么角色。我建议每改一个参数就记录一次变化,这样你对电路的理解会扎实得多。

2.3 在Schematic Editor里把管子放上去

打开Virtuoso Schematic Editor后,从analogLib库里调用nmos4、pmos4这种四端管子,也可以直接放PDK提供的模型符号。注意区分schematic符号和layout用的pcell,仿真阶段只需要schematic符号。

摆放管子时,建议把差分输入对的两个PMOS管子左右对称放置,电流镜负载两个NMOS也对称,第二级独立拉出来,偏置电流源单独放在底部。电路层次清晰,后期检查工作点和改连线会省很多事。连线尽量用总线方式处理电源和地,避免一堆细线在图上绕来绕去。端口用输入、输出、电源、地几种类型,命名成Vinp、Vinn、Vout、VDD、VSS。

画完原理图后,可以给整个运放建一个symbol,方便在顶层测试电路里统一调用。右键原理图界面选Create Symbol,Cadence会自动根据端口生成方形符号,也可以把线条调整得更像经典三角形运放符号。这个操作不复杂,但值得花几分钟做,后面测试bench会清爽很多。

2.4 偏置电路别偷懒

两级运放工作点不理想,十次有八次是偏置的问题。我习惯在原理图里直接用理想电流源(analogLib里的isource)先代替偏置电路,把核心运放工作点调对,再在后续工程化时替换成实际的电流镜偏置。这样有两个好处:一是初始仿真阶段少一个变量,定位问题更快;二是等核心拓扑稳定后,再考虑偏置电路自身的电源抑制和温漂,逻辑更清晰。

用理想电流源时要注意,节点在瞬态仿真中可能因为没有直流通路而不收敛,所以电流源两端一定要有到地的直流通路。这里说的直流通路,指电流有地方流走。如果某个高阻节点只有电容连接,没有电阻或晶体管构成直流泄放路径,DC仿真会直接报不收敛。

3. 仿真设置与第一轮调试

3.1 DC工作点检查

画完原理图,第一次跑仿真建议就做DC Operating Point。在ADE L里,Analysis选择dc,勾选Save DC Operating Point,然后运行。一般几十毫秒就能跑完。重点是打开Result -> Print -> DC Operating Points,在原理图上直接查看每个节点的电压和每个管子上的工作状态。

对饱和区的判断标准我一直这么记:NMOS要Vds > Vgs - Vth,PMOS要保证源漏压差满足饱和条件,原理图注释时表现为管子旁边出现绿色状态标志。如果看到红色,说明管子进入线性区或者截止,那就要查偏置和尺寸了。第一次跑完,我通常会先看输出节点是不是稳定在预期的共模电平。如果偏离太远,可能是电流镜比例不对或者负载影响了静态点。

3.2 AC小信号分析怎么设

AC分析要先在原理图里给输入加一个交流小信号源。常见做法是在输入端口接一个vdc,设置AC magnitude为1,这样输出幅度在数值上等于电压增益,读取曲线最直观。然后在ADE里Analysis选ac,扫描范围从1Hz到100MHz或1GHz,用对数扫描。

跑完以后打开频率响应曲线,找到单位增益频率(幅频曲线穿过0dB的点)和相位裕度(0dB处对应的相位减去-180度)。我习惯在Calculator里直接写表达式,取增益的dB值等于0时的频率点。这样就不用肉眼去曲线上找交叉点了。

如果第一轮跑出来相位裕度不足,一般先加大Cc,同时确认Rz是否已经能和第二级跨导匹配。如果GBW不达标,优先增大输入管的gm,也就是增大尾电流或加大输入管的W/L。注意,加W/L会同时增加寄生电容,进而改变极点位置,所以这一步要配合看相位曲线。

3.3 瞬态仿真看大信号

AC分析只管小信号,运放真实建立过程还得靠瞬态。在顶层测试电路里,把运放接成单位增益或反相放大结构,输入给一个阶跃信号,然后跑tran。规模上,第一遍可以先跑1us到5us,步长用默认的automatic,等确认大概波形后再细分。

瞬态波形主要看三件事:输出是否会跟着输入建立到目标值,建立过程中有没有明显过冲或振铃,以及上升沿和下降沿的斜率能不能满足压摆率要求。压摆率的实测方法很简单,给大阶跃输入,在输出斜坡段取最大斜率,单位V/us。如果压摆率偏低,就提高第二级电流或减小输出节点上的等效电容。

瞬态仿真不收敛是另一个高频话题,后面我会单开一节细说。先提醒一句:如果仿真器报时步太小或者无法收敛,最先检查的不是算法参数,而是电路里有没有节点只有电容连接,或电流源悬空了。

3.4 把功耗和共模范围也纳入第一轮验证

很多人只盯着增益和带宽,功耗和输入共模范围完全不在仿真列表里。我建议在原理图里给电源串联一个电流源符号,或者在Calculator里用表达式计算VDD支路的平均电流,再乘以电源电压就得到功耗。这是一个非常简单但容易被忽略的指标。

输入共模范围可以用DC扫描来测:固定差分输入为零,扫描共模电压,观察输出增益或工作点什么时候发生突变。这组数据在你后期设计输入接口或系统集成时特别重要,不要省。

4. 工艺角分析的完整流程

4.1 工艺角到底模拟的是什么

晶圆制造过程中,MOS管的阈值电压、栅氧厚度、沟道有效长度都会随着光刻、掺杂、温度等条件波动。工艺角就是把这些波动打包成几种极端情况:TT指典型NMOS和典型PMOS,SS指慢NMOS慢PMOS,FF指快NMOS快PMOS,还有SF和FS这种交错组合。温度则一般取-40°C、25°C、85°C或125°C,电源电压再叠加±10%的偏差。

做工艺角分析,不是为了证明它在某个条件下能工作,而是要确认它在所有定义的极端组合下都能保住关键指标。尤其是相位裕度,在FF角下所有管子都快,高频极点位置变化很大,特别容易翻车。

4.2 在Cadence里跑工艺角的几种做法

最直观的方式是在模型库设置界面把corner列出来,然后逐个手动跑。缺点是费时且容易漏项。更好用的是ADE XL的工艺角表格,或者利用Cadence的corner特性,将corner定义为一个设计变量,在参数分析里自动遍历。

如果用的是ADE L,可以在仿真前把model library设置里的corner域改成一个变量名,比如cornername,然后在ADE L的Design Variables里把cornername赋值为tt,再用Parametric Analysis去扫描这个变量,把ss、ff、sf、fs一起扫一遍。每次仿真结果会被拆到不同曲线里,然后在同一个波形窗口里对比不同工艺角下的增益和相位,一眼就能看出哪些指标处于临界边缘。

如果项目要求更严格,建议升级到ADE XL。ADE XL里可以建一个完整的corner表,每行定义一组工艺角加温度、电压的组合。跑完后直接从Results面板里导出汇总表格,百分比良率相关的Monte Carlo也能在同一个环境里衔接,效率会高很多。

实操心得:第一次跑多工艺角时,别让每颗管子上的所有参数都随着工艺角变化。先只打开MOS模型的主corner参数,关掉电阻、电容的corner变化,这样定位性能差异来源时思路更清楚。等全链路仿真时再把所有器件corner都打开。

4.3 结果怎么看

假设我们用0.18um工艺,1.8V电源,负载2pF,手调后的两级运放工艺角仿真结果大致应该长下面这样:

工艺角温度开环增益GBW相位裕度功耗
TT25°C68 dB11.2 MHz63°0.38 mW
SS-40°C65 dB8.1 MHz58°0.31 mW
FF125°C71 dB14.6 MHz55°0.49 mW
SF25°C66 dB10.3 MHz61°0.36 mW
FS25°C67 dB9.4 MHz60°0.39 mW

这组数字是示意性的,但规律有普遍性:SS工艺角下晶体管的gm变小,GBW往往偏低,输出摆率也会下降;FF工艺角下载流子迁移率变大,GBW升高,但内部寄生电容变化快,相位裕度容易变差。如果你的仿真里相位裕度在FF角掉到50°以下,线性度会变差、瞬态容易过冲,那就要考虑增大补偿电容或优化调零电阻Rz。

还有一个容易忽视的点:速度快的工艺角不一定功耗是最高,因为功耗还跟偏置电流镜的Vth变化有关。所以做工艺角分析时,功耗曲线要用瞬态或DC扫描的平均电流去看,不能只看手算。

4.4 温度和电压怎么和工艺角组合

单独的工艺角还不够,业界更常见的做法是PVT组合:工艺角(Process)、电源电压(Voltage)、温度(Temperature)。我给自己的习惯是至少跑9组:TT/SS/FF三个工艺角,每个工艺角再取低温加高电源、常温标称电源、高温低电源三种组合。别嫌多,一些公司内部的设计文档中甚至要求跑几十组。

具体在Cadence里,除了把corner定义成变量,还可以把电源电压VDD也设成设计变量。比如VDD的标称值是1.8V,那么可以设三个值:1.62V、1.8V、1.98V,然后在参数分析里同时扫描VDD和工艺角。如果你担心结果太多没法看,就先扫工艺角和温度,把关键的GBW、PM、功耗提取出来,再单独跑一次电压最恶劣的组合。

还有一点经验:温度扫描可以用sweep功能直接在分析里做,不需要把温度写成变量反复跑。选温度扫描时,模型会自动计算对应温度下的器件参数,这样能显著减少手动配置的错误。

5. 常见问题与排查技巧

5.1 瞬态仿真不收敛怎么处理

“瞬态仿真不收敛”可能是Cadence仿真里出现频率最高的一条报错。常见的内部原因有三个:电路存在高阻抗节点没有直流路径、初始条件设置不合理、仿真器最小步长下探得过小。处理顺序我一般是:先用DC仿真查看各个节点电压是否合理,如果DC都不收敛,那就是电路结构的问题;如果DC能过而瞬态挂了,就去改初始条件,或者在Analysis里把skipDc设成no,确保瞬态起始点是从DC工作点开始的。

还可以在仿真器选项里把gmin和cmin设成一个很小的值,比如gmin=1e-15,cmin=1e-18,给每个节点加一点数值上的导通能力。再有就是把迭代次数上限调大,从默认的1000调到5000甚至更多。这些不是万能药,但能解决大部分数值抖动问题。

避坑:千万不要为了强行收敛而把精度参数调到离谱,比如reltol设成0.1,那样跑出来的波形根本没参考价值。先解决电路问题,再考虑数值参数。

5.2 器件一直报未定义或找不到模型

我碰过最多的情况是模型文件加载了,但原理图里的器件符号是从analogLib拉的,而模型名和PDK里的Model名字不同。解决方法是先看仿真输出日志里的error信息,指出哪颗管子缺模型,再去原理图里确认它的model name属性。如果用的是PDK自带符号,通常不会有这种问题。

如果日志里说的是cannot open file,那就是模型路径放错了。检查模型文件的相对路径是否和当前工作目录匹配。一个很土但很有效的方法是把所有模型文件复制到仿真工作目录下,把路径写死成相对路径,避免每次换目录都报路径错。

5.3 原理图纸上警告提示怎么看

Cadence原理图检查时,如果器件的引脚类型和连接网络类型不匹配,会冒出一堆警告。比如电源引脚被连到了普通的信号网络,或者输出端口类型设成了input,这样仿真时经常会出现奇怪的问题。解决方式是双击器件属性,把pin type统一成input、output、inputOutput、power这几种规范类型。

另一个常见警告是有节点未连接,这时要检查原理图里是不是有悬空引脚。模拟电路里,悬空的高阻输入是灾难,通常先接一个高阻到地或到合适电位,不要放任不管。

5.4 波形看起来对,但数据对不上

有时候波形形态很漂亮,但读出来的增益、带宽和手算差很多。这种时候我会去验证AC分析时输入信号源的AC幅值是否设成1。如果AC幅值是0.5,那读取的增益就要再乘2,很多人会在这里吃亏。另外,单位增益带宽的提取要确保是从幅频曲线0dB点去读,而不是从直流增益下降3dB的截止频率去读,这两个是完全不同的概念。

再有就是相位裕度的读取。一定要在增益为0dB的那个频率点上看相位,不能随便抓一个频点。我见过有人把低频相位或者是高频相位拿出来算PM,结果数字完全没意义。稳妥的办法是在Calculator里直接调用phaseMargin函数,或者用bandwidth和phaseAt0dB这种探索函数,自动定位。

5.5 常见问题速查表

现象可能原因排查方向
DC仿真不收敛高阻节点无直流通路、电流源悬空检查节点连接,给泄流通路
瞬态不收敛初始条件不对、步长过小从DC工作点启动,调gmin/cmin
增益远低于手算管子不在饱和区,AC幅值不是1查看工作点,检查输入源设置
相位裕度为负补偿不够、零点位置不对增大Cc,重算Rz
换工艺角后性能崩掉偏置没有跟着调、补偿不足做完整PVT组合分析
模型未定义库加载错误或名字不匹配检查模型库路径与器件Model name

6. 一些属于我的操作习惯

过程中有几点操作习惯,我认为对提升效率很有用,分享出来。

我习惯在每次修改原理图前,先把上一轮的仿真结果存一个快照,或者在ADE里导出CSV。这样当一次大改后性能反而变差时,能快速定位是哪次改动引入的问题。在实际项目中,这种版本控制思维比任何技巧都重要。

第二点,调尺寸时不要一次只改一颗管子。把有相关性的管子成组看,比如差分输入对的两管永远同步改,电流镜负载的两管也同步改。否则你在波形上看到一个变化,很难判断到底是哪边引起的。

第三点,尽量用变量定义晶体管的W和L,而不是直接在原理图里写死。比如在Design Variables里定义W1、L1、W2、L2,原理图器件的width和length属性填成变量名。这样在Parametric Analysis里扫描尺寸时,就不用手动一次次去改原理图了。我后来做Monte Carlo和优化时,这套变量体系帮了大忙。

最后再分享一个小技巧:做工艺角分析时,可以把多个corner的AC曲线叠加在同一窗口里,然后把目标指标用标尺标出来,比如0dB和-180度这两条参考线。这样你一眼就能看到哪个角最靠近悬崖边缘,不用对着表格一个个比对。

两级运放的Cadence仿真流程并不神秘,难的是把每一步都做得可重复、可解释。当你把原理图、工作点、频响、瞬态和工艺角结果整合成一套自己的检查清单,再复杂的模拟模块也就变成流水线上的标准动作了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询