ARTICLE DETAIL

资讯详情

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

Cadence Virtuoso中VCVS全解析:原理、参数设置与工程实践

Cadence Virtuoso中VCVS全解析:原理、参数设置与工程实践 从大二第一次用Cadence Virtuoso跑运放仿真到现在我已经记不清自己往原理图里放过多少个vcvs了。这个躺在analogLib库角落里的小元件长得不起眼名字也拗口但它在模拟IC设计流程里的出场率比很多同学想象中高得多。尤其是做运算放大器开环增益测试、反馈环路稳定性验证、以及行为级建模的时候VCVS几乎是绕不开的万能工具。很多刚接触Virtuoso的人会有这样的困惑在PDK工艺库里翻遍了电阻电容和晶体管也没找到“电压控制电压源”到底在哪。实际上它不在PDK里它藏在Cadence自带的analogLib通用模拟库里而且symbol和用法都很简单——一个理想压控电压源输出电压等于输入差分电压乘以增益。但简单归简单真放到原理图里容易翻车的地方并不少引脚接错、增益没填、输出悬空、仿真器报浮空节点……这篇文章我就把VCVS从原理到实操彻彻底底讲一遍包含它在原理图库中的位置、参数设置、典型测试电路搭建还有我这些年踩过的各种坑。这篇文章适合正在用Cadence Virtuoso做模拟电路仿真、尤其是运放和反馈系统相关内容的读者。不管你是刚装好软件还没跑通第一个仿真还是已经能用ADE L做AC分析但总感觉受控源用得不顺手这篇内容都能帮上忙。1. VCVS在Virtuoso原理图库里的定位与原理1.1 从SPICE的E元素说起VCVS到底是个什么元件VCVS全程叫Voltage-Controlled Voltage Source中文一般叫压控电压源。它的行为特征就一句话输出电压与输入电压之差成正比输出 增益 ×正输入 − 负输入。输入端口不吸取电流相当于理想电压表输出端口是一个理想的电压源输出阻抗为零不管外边接什么负载它都能死死维持住规定的电压。如果你接触过老牌SPICE仿真器可能知道一个传统叫法——E元素。PSpice、Hspice这些工具里电压控制电压源在网表中通常以“E”开头的元件来写例如“E1 OUT 0 IN 0 10”就表示把IN节点对地电压放大10倍后输出到OUT节点。Cadence Virtuoso的Spectre仿真器天生兼容这种理想受控源只是把它做成了一个标准库单元在analogLib里叫“vcvs”。所以在Virtuoso原理图里拖一个vcvs本质上就是在网表里声明了一个理想线性受控源不涉及任何工艺参数不需要额外模型文件跑起来又快又准确。很多人第一次看到VCVS时容易把它和“运算放大器宏模型”搞混。其实VCVS比运放宏模型更底层、更理想。运放宏模型还有输入失调、有限增益带宽、输出摆幅限制、共模范围这些非理想因素而VCVS除了一个增益参数其他什么都没有。它的好处是“纯”——当你想研究外围电路的逻辑关系不被放大器的非理想因素干扰时VCVS是最干净的替身。1.2 在analogLib中如何找到VCVS并看懂它的SymbolVirtuoso安装完成之后自带的通用库通常包括analogLib、basic、functional等。VCVS就放在analogLib这个库里。找它的方法很简单在原理图编辑器里按快捷键“i”调出Add Instance窗口Library下拉框选analogLibCell一栏输入“vcvs”下面会自动出symbol视图。有一点需要特别提醒VCVS不是元器件厂商PDK里的东西所以别花时间在你的工艺库路径里翻。AnalogLib由Cadence安装目录自带的CDS库文件提供它是通用的、跨工艺的任何设计库都能直接调用。如果你的Add Instance窗口里搜不到vcvs大概率是analogLib这个库没有被加载到你的库路径列表中需要去Library Path Editor里确认路径。VCVS的symbol在不同版本里画法略有差异但关键引脚通常有四个正输入P、负输入N、正输出Pout、负输出Nout。注意Virtuoso的vcvs还有可能在symbol上额外显示一些辅助引脚例如作为“理想的电压表输入端”和“理想的电压源输出端”。不同版本、不同工艺库附带的analogLib版本之间引脚命名可能出现差异这是正常现象以你自己版本里看到的具体pin名为准。另外VCVS没有电源引脚它不需要VDD和VSS这是理想元件的特权。但也正是这个特性导致很多人犯迷糊为什么我把它放上去输出端没有任何“自举”的电压摆幅因为它的输出完全由输入决定输入没有直流工作点输出自然就是零。1.3 核心参数全讲解gain、vref和输出电压范围限制VCVS的属性参数在Add Instance窗口或属性编辑框里可以看到不同版本可能略有差异但核心参数基本固定。gain电压增益单位是V/V无量纲。默认值可能是1也可能为空。如果设为10表示输出是输入差分的10倍。这个参数在AC仿真、DC仿真、瞬态仿真中都是有效的。vref参考电压。某些版本的vcvs模型允许设置一个输出参考电平输出电压会在增益计算结果的基础上叠加这个直流偏置。如果你的版本中这个参数不可用也可以通过把负输入端接到一个直流电压源来实现同样的效果。输出限幅参数一些较新的analogLib版本提供了输出高、低电平限制选项例如vmax/vmin。基本作用是让VCVS的输出电压不超过设定范围更像一个真实放大器。这样可以在瞬态大信号仿真里防止输出冲到几十万伏导致后续电路出现离谱的工作状态。这里我特别强调一下VCVS毕竟是一个理想模型默认情况下没有输出摆幅限制。你给输入端加一个1V的差模信号、增益设成100输出就是100V。这在真实电路中根本不可能发生但仿真器不会觉得有问题。如果你后级接到晶体管电路这个100V会把器件推到完全脱离正常工作的状态导致DC工作点计算不收敛或者瞬态仿真出现奇怪的波形。所以如果你知道自己的信号幅度范围建议提前在参数里把输出限幅设好或者在后级加保护网络。2. 原理图调用与配置操作全流程2.1 新建Cellview并进入原理图编辑界面用VCVS的第一步当然是有一个可以放元件的原理图。我习惯的做法是在启动Virtuoso之后先在CIW窗口里用File——New——Library创建一个自己的工作库然后在这个库里新建一个Cellview。具体步骤是CIW里选择File——New——CellviewLibrary选你的工作库Cell填一个名字比如vcvs_testView默认就是schematicTool选Composer-Schematic或Virtuoso Schematic Editor。然后确定进入原理图编辑界面。如果你已经有一个设计库直接在里面新建cellview也行。需要注意的一点是新建的原理图默认会依附在某个工艺库上对于纯VCVS测试电路来说即便不attach工艺PDK也照样能仿真因为VCVS不需要任何工艺模型。但如果你要在同一张图里放真正的MOS管、电阻这些工艺相关器件那就必须确保设计库attach到对应的PDK上。2.2 调库、放VCVS、连线的具体操作在原理图画布上点击Add——Instance快捷键i这时弹出的窗口里要做两件事第一检查库路径。Library选analogLib这时候Cell列表里应该能搜到vcvs。如果你发现自己库里怎么都找不到先检查Library Path Editor里是否包含analogLib路径通常它在Cadence安装目录下的tools/dfII/etc/cdslib/artist/analogLib。第二设置参数。选中vcvs后窗口下半部分会出现参数栏把gain改成你需要的值。如果不需要输出直流偏置vref保持0。放好后用鼠标在原理图上合适的位置单击放下。放好VCVS之后就是连线。按快捷键“w”进入连线模式把输入信号源接到VCVS的正、负输入端把输出端接到后续负载。这里要特别提示VCVS的输出如果什么都不接只让输出悬空仿真器会报警告或错误。对于理想电压源来说输出悬空并不像真实电路那样“没问题”在Spectre里它会提示节点只有一个连接建议你至少给输出端挂一个接地电阻哪怕这个电阻根本不消耗电流也能让网表更健康。2.3 让VCVS工作起来从ADEL到仿真结果原理图画好之后启动仿真界面。以经典流程为例在原理图窗口点Launch——ADE L打开模拟设计环境。在ADE L里设置仿真类型。如果只是看电压传递特性可以做DC扫描想看频响就做AC分析想看大信号行为就做tran瞬态分析。这里有一个新手容易忽略的点AC分析必须在输入端有一个交流激励源而且这个源的DC值也决定了电路工作点。很多人做AC仿真拿到一条零线检查半天发现输入信号源的AC Amplitude没填或者填了但连接端口的网络名对不上。仿真运行之后去Results——Direct Plot——Main Form里选择要看的输出节点。如果你在原理图里用net名标了输出节点可以直接输入节点名然后把波形画出来。VCVS的仿真结果通常非常“教科书”——增益曲线笔直、没有带宽滚降、没有相位延迟这正是理想元件的特征而不是出错了。3. VCVS的典型工程应用场景拆解3.1 运放开环增益与频率特性仿真用VCVS隔离后级负载很多人在学校做运放设计时第一个要测的指标就是开环增益和单位增益带宽。真实运放的开环增益通常很大而且在闭环状态下没法直接测。标准做法是做一个开环测试电路把输入信号直接加在运放正负输入端输出直接送出去看。听起来简单但实际操作中有一个棘手问题开环状态下运放的输出直流工作点很难稳定稍有失调电压输出就会往电源轨或地轨偏。这时候VCVS就有了用武之地。一个常见的思路是在运放输出端和测试负载之间插入一个VCVS让VCVS去复制运放输出端的电压信号然后用它驱动测试负载。这样原本会被负载电阻分压、拉低直流工作点的运放可以在空载或非常轻的负载下工作而VCVS承担了给后级提供电荷的任务。因为VCVS输入阻抗无穷大它不会对运放输出产生负载效应又因为它的输出阻抗为零后级想拉多少电流都不影响采样点电压。实际搭这个测试bench时你把VCVS的gain设成1正输入端接运放输出负输入端接gnd输出端接你要观察的负载电阻和测试电容。这样测出来的幅频响应曲线基本就反映了运放本身的增益特性而不包含负载效应。这个“隔离观察”的思想在后面做反馈系统分析时也会反复用到。3.2 闭环回路断开与环路稳定性测试VCVS当“直流保持器”另一个很经典的应用是反馈环路稳定性测量。通常我们想测一个闭环运放电路的环路增益T如果直接打断反馈环路原来的直流偏置点就没了整个电路会落到一个莫名其妙的工作点。传统做法是在断开点插入一个很大的电感比如1000H让直流从原路径流过而交流信号被电感挡住从而在交流上实现开环。这个方法有效但大电感本身可能会引入低频极点影响测量结果。VCVS可以提供一个更干净的做法。你可以在反馈环路的断开处插入一个VCVS输入侧接环路的输出即被控量输出侧接回原来断开的支路同时把VCVS的gain设成1。这样从直流到交流信号都被忠实地传回环路而且由于VCVS输入是理想的不会改变原环路的工作点。关键是你得到了一个“看得见但摸不着”的信号复现可以在VCVS输出端外加测试激励来做环路分析。不过这里要坦白地提醒一句如果你想做的是标准环路增益测量Cadence的stb分析使用iprobe是官方推荐的方式它自动完成断环、保持工作点、提取环路增益的全部工作不需要手动搭VCVS。VCVS手动断环路的做法更适合你需要在AC分析中手动看环路增益、或者你想彻底理解环路断开原理的场景。用它练手有助于理解stb分析的实质但不要在产品级仿真流程里舍近求远。3.3 行为级建模用VCVS快速搭理想运放、缓冲器和电平移位电路大型电路的顶层仿真中如果每一个模块都用晶体管级电路仿真速度会非常慢。这时候就该行为级模型上场了。VCVS能帮助你搭建各种理想功能块而不必引入复杂的Verilog-A模型。典型例子是搭一个理想缓冲器gain设成1输出等于输入。再复杂一点的例子是搭增益可调放大器把gain设成10倍、100倍输入端差分接你想放大的信号。如果你想搭一个带直流偏置的传感器信号调理电路还可以把vref设成1.65V对于3.3V电源是中间电平这样输出的交流信号就叠加在1.65V直流偏置上。更高阶一点的玩法是搭理想比较器把VCVS的gain设成一个很大的值比如1e6输出限幅设成电源电压和地这样只要输入有微小的正负差异输出就会瞬间打到高电平或低电平。这就是一个可用的理想比较器行为模型用来验证数字后台逻辑的时序完全够用。用VCVS做行为级建模的好处是仿真资源消耗极小不需要额外写代码改参数就能调整增益和偏置。缺点和所有的理想模型一样——不含噪声、不含非线性、不含带宽限制所以做系统级验证时它偏乐观。真到流片前的最终验证还是要用晶体管级电路。4. 四类受控源选型对比什么时候不能用VCVS4.1 一张表看清VCCS、CCVS、CCCS的区别Virtuoso的analogLib里受控源其实有四个VCVS压控电压源、VCCS压控电流源Voltage-Controlled Current Source、CCVS电流控电压源Current-Controlled Voltage Source、CCCS电流控电流源Current-Controlled Current Source。它们的符号很相似新手容易拿错所以我把它们放在一起对比一下。受控源中文名控制量输出量Spectre对应关系Hspice传统称呼vcvs压控电压源电压电压vcvsE元素vccs压控电流源电压电流vccsG元素ccvs电流控电压源电流电压ccvsH元素cccs电流控电流源电流电流cccsF元素这个表格最好记成“第一个字母代表控制量第二个字母代表输出量”。V开头就是电压控制C开头就是电流控制第二个字母同理V结尾出电压C结尾出电流。我当年经常搞混后来就靠这个“前控后出”的规律来记很少再拿错元件。4.2 VCVS与VCCS的关键差异以及接口阻抗的坑VCVS和VCCS看起来只差一个字母实际用法天差地别。VCVS输出的是电压输出阻抗为零VCCS输出的是电流输出阻抗为无穷大。这个阻抗差异直接决定了你在搭建测试电路时能不能把它们直接并到某个节点上。举个例子假设你想模拟一个跨导放大器它的本质是输入电压控制输出电流那就应该用VCCS而不是VCVS。反过来如果你想模拟的是电压放大比如传感器信号放大、电压缓冲那就该用VCVS。拿VCVS硬搭一个跨导特性电路需要额外串联一个电阻把电压转成电流拿VCCS硬搭电压放大器必须在输出端并联一个负载电阻来把电流转成电压而且负载电阻的大小会直接影响增益。实操中最常见的坑是“理想电压源直接并联”。VCVS的输出是理想电压源如果你把一个vdc电压源直接并联在VCVS的输出端两个理想电压源会在网表层面打架仿真器报错说“电路中存在不兼容的电压源连接”。这时候你需要给其中一个源串联一个很小但不为零的电阻把它们解耦。4.3 实际操作中的选型建议和注意事项我的个人经验是先想清楚你要模拟的功能块输出特性是“硬”低阻抗电压源还是“软”高阻抗电流源再决定选哪个受控源。在运放和反馈系统里绝大多数情况下需要的是电压输出所以VCVS用得最多在跨导放大器、电流镜这类电流模式电路里VCCS更合适。还有一个选型建议是如果你的目标是代替一个具体的有源器件做行为验证除了受控源本身还要在外部补上该有源器件的端口特性。比如VCVS输出阻抗为零但真实运放输出阻抗可能有几十到几百欧那你就在VCVS输出端串一个等效电阻真实运放输入偏置电流不是零那你就在输入端并一个高阻电阻。理想的受控源加上非理想的外围修饰才能得到和真实电路更接近的行为级模型。另外在做噪声分析时务必记住VCVS本身不产生任何噪声热噪声、闪烁噪声一概没有。如果你把整个电路的放大器替换成VCVS噪声仿真出来的结果会非常乐观。这种乐观只能用于验证传输函数不能用于评估输出噪声和动态范围。5. 从零到一完整实战用VCVS搭一个理想运放测开环增益5.1 测试电路设计思路与推导我直接讲一个自己反复用的实战案例用VPULSE脉冲电压源作为激励、用VCVS搭建理想运放然后测它的开环增益。电路结构如下input source接一个vdc信号源输出正端接一个电阻分压网络分压点反馈到VCVS负输入端VCVS正输入端接输入信号。VCVS的gain先设成1000模拟一个开环增益为60dB的运放。同时在输出端接一个1kΩ负载电阻到地。用这个简单电路你可以做DC扫描输入从-1mV扫到1mV观察输出电压变化。因为增益是1000输入在±1mV范围内输出应该在±1V范围内线性变化。如果你把输入范围扩大太多比如±10V输出就会达到±10000V看起来像“失真”其实不是失真只是理想模型没有限幅而已。5.2 参数设置与仿真配置在原理图里放好VCVS之后双击它的symbol在属性窗口里把gain设成1000vref保持0。输入源用analogLib里的vdcin或直接放一个vdc把DC电压设成0V然后做DC扫描。打开ADE L在Analyses——Choose里选dc然后在Sweep Variable里选第二个模式“Source”在Source Name里选中输入信号源Sweep Range从-1m到1mSweep Type设置线性步长可以设成0.01m或者让它自动。运行仿真之后在Results——Direct Plot里选DC Operating Point或DC Sweep都行把输出节点和输入节点同时画出来。你可以看输出波形是否在输入跨零附近呈现线性区并且输出电压幅度是否符合增益为1000的预期。如果你把纵坐标设置为dB还能用这个曲线评估不同工作点下的增益平整度。5.3 结果解读从开环曲线看单位增益带宽和相位裕度DC扫完以后顺手把仿真类型改成AC在输入源里把AC Amplitude填成1这是个幅度任意只要别太大就行因为AC分析本来就是线性化的DC置零然后跑一个1Hz到1GHz的对数扫描。看输出节点的AC幅频特性曲线。因为VCVS理想而无极点你拿到的曲线理论上是一条平行于横轴的直线电压增益始终为1000没有任何滚降。这个结果在真实运放里不可能出现但它恰好印证了VCVS排除非理想因素的效果——你看到的就是纯增益没有带宽限制。如果你想用VCVS搭一个带有带宽限制的模型可以外接RC低通滤波器或者在后级串一个理想RC网络。比如在输出端接一个1kΩ电阻和1nF电容到地就会在约159kHz处形成一个极点这时你再看AC曲线就能看到一个-20dB/dec的滚降趋势。这一步练习能帮你建立“增益带宽积”的直觉非常值得自己亲手搭一遍。6. 进阶避坑VCVS使用中的常见问题与故障排查6.1 我的VCVS“没反应”输出一直是零怎么办这是VCVS相关问题中最高频的一条。排查顺序我先讲清楚第一看输入信号源有没有设置DC值或实际激励如果输入为零输出自然为零第二检查VCVS的正负输入有没有接反如果正负都接在同一个网络上差分电压为零输出就为零第三打开仿真日志看有没有“floating node”或者“unconnected pin”的警告输出悬空时很多仿真器会把它当作无效节点处理。一个非常隐蔽的原因是你在原理图里连接输入或输出时没有真正把它们连到同一个net。原理图编辑器里看起来连上了但放大后可能发现电线只是搭在pin的边缘没有完全重合。Check and Save时如果没有报错并不代表连线一定生效务必用“mark net”或网络高亮功能确认节点名。6.2 仿真报错、不收敛增益过大、节点悬空与浮地问题Spectre仿真不收敛很多时候并不是模型的问题而是测试电路本身给了一个不可能收敛的条件。VCVS增益设得太大比如1e12同时输入又有微小噪声输出直接变成巨大的数字很容易让DC工作点求解器找不到解。遇到这种情况先降低增益到合理范围比如先设100看能不能跑通跑通后再逐步增加增益。另一个常见问题是输入负端完全悬空。VCVS要求正负输入端都必须是有效节点如果你只把正输入端接信号、负输入端悬空Spectre会认为你定义了一个不完整的差分输入可能导致节点电压无法确定。我的习惯是即使只用单端输入也会把负输入端接到gnd或者一个vdc提供的参考电平上绝不悬空。如果输出端只接了纯电容负载也有可能导致瞬态仿真出现高阻抗节点问题。建议在输出到地之间至少放一个很大的电阻比如1GΩ给仿真器一个确定性的直流路径很多“不收敛”问题能直接消失。6.3 版本差异和Netlist级细节为什么网表中看不到VCVS还有一个很多学生问过的问题我在原理图里明明放了一个vcvs但在Netlist和LVS阶段却“看不到它”。先说结论在Spectre的网表里VCVS会以“vcvs”或“e”的形式出现但如果你打开的是CDF网表而没有选择适合仿真的视图它可能不会直接出现在某些导出文件里。更常见的情况是你做了LVS验证发现VCVS不在最终版图网表里。这是完全正常的因为VCVS是仿真用的理想元件没有对应的物理版图实现正常的流片流程里根本不允许它进入最终版图。它只存在于仿真bench中属于“测试辅助器件”。另外提醒一下不同版本Virtuoso的VCVS参数名可能有差异。IC618里的CDF参数和IC5141时代不完全一样。如果你的CDF表单里找不到gain去Help文档里搜一下这个cell的组件说明或者直接看模型网表文件。遇到参数名对不上的情况千万别硬猜用Spectre模型文本里支持的参数来设置更稳妥。还有一类报错是“This application has quit unexpectedly”这种Virtuoso软件本身的崩溃提示和VCVS本身关系不大一般是环境变量、库路径冲突或者图形界面驱动问题。遇到这种崩溃别慌检查一下是不是最近改过库路径或者跑仿真时同时开了太多窗口导致资源耗尽。关于VCVS使用我最后再分享一个非常实用的习惯每次搭完测试bench不要急着按绿色运行键先花30秒做一次“DC工作点自查”——用ADE L里Calculator或Results——Print——DC Operating Point看几个关键节点的电压。如果VCVS输入端的直流电压不符合预期那大概率是外部偏置电路的问题如果输出端的直流电压异常高或异常低那就要检查限幅参数和增益设置了。这个自查流程看起来不起眼但能帮你省掉至少一半的“仿真结果看着怪怪的”排查时间。
返回列表