在进行电路设计时,首先根据功耗为各条支路分配电流,然后再将MOS管偏置在饱和区。Spice的静态工作点仿真.op可以求出各支路电流和各节点电压,如果发现静态工作点不合适,就需要对MOS管的宽长比或者栅压进行调整。
为了很快地找到合适的宽长比和栅压,可以把它们设为变量(variable)进行直流扫描仿真(.dc),扫描时需要合理设置取值范围和扫描步长。扫描可以迅速找到合适的变量值,是快速调整和优化电路静态工作点的首选方法,在电路设计和仿真的初期尤为重要。
需要指出的是,.dc和.op是Spice的基本仿真控制语句,如果单独使用HSPICE进行仿真,需要手工编写这些语句,而Cadence为用户提供了一个功能强大的ADE(Analog Design Environment)用于仿真,并为Spice仿真提供了完整的图形界面,所有的Spice仿真操作都能通过图形界面完成。本节将以CS_stage为例进行直流扫描仿真,扫描PMOS管的栅极偏置电压vb,目标是将vout的工作点设置为电源电压的一半。
首先在design_smic18库里新建一个名为CS_stage_sim的cell,用它进行直流扫描以及后续的其他仿真,设计仿真电路原理图时最好例化两个CS_stage,如图3.3所示,这样将来在做后仿真时,可以把其中的一个配置成版图,前后仿真可以同时进行,很容易进行前后仿真结果的对比。
图3.3 在schematic view中例化两个CS_stage
如图3.4所示,在analogLib中再例化3个直流电压源V0、V1和V2,其中V0的DC voltage设置为1.8V,V1的DC voltage设置为1V,V2的DC voltage设置为一个变量,变量的名称为var_vb。按照图中的连接方式进行连线,然后按L键(label),弹出如图3.5所示的Add Wire Name对话框,在Names栏中输入in vb_bias vout_sch vout_layout,单击Hide,然后在原理图中添加Wire Name,注意一定要让Wire Name的小方块压在连线上。单击Check and Save,会弹出4个warning,显示在vout_sch和vout_layout的两端悬空,可以忽略。
图3.4 CS_stage_sim的schematic view
图3.5 Add Wire Name对话框
电压源V0为CS_stage提供1.8V电源,很多初学者经常会忘记这个供电电源;V1为CS_stage的输入信号,由于现在只是做工作点分析,所以暂时用1V直流电压代替;V2为CS_stage的栅极提供偏置,电压值用变量var_vb代替,本流程的目的就是通过对var_vb进行直流扫描,找到一个合适的V2电压,使vout为电源电压的一半,即0.9V。
单击原理图Tools→Analog Environment启动ADE,弹出如图3.6所示的Virtuoso Analog Design Environment对话框,单击对话框Setup→Model Libraries弹出如图3.7所示的spectre5:Model Library Setup对话框,用于添加Spice器件模型库。添加前先将Model Library File栏清空,方法是选中所有文件后单击对话框下方的Delete即可。清空后单击对话框右下角的Browse...,弹出Unix Browser对话框,找到并选中smic18mmrf的Spice model库文件ms018_v1p9_spe.lib,然后在Section(opt.)栏中填写tt后单击Add,再单击OK。这里的tt是一种工艺角,本章后面会专门讨论工艺角仿真问题。注意,Cadence 617版不用手工输入tt,库添加完成后可以通过下拉菜单添加工艺角。
图3.6 Virtuoso Analog Design Environment对话框
图3.7 spectre5:Model Library Setup对话框
Spice仿真需要加载器件的Spice模型库文件,通常在PDK中会有很多库文件,每个库文件对应一种或几种器件,其中包含MOS管的库文件是最主要的,在进行Spice仿真时必须加载,图3.7中加载的就是MOS管的库文件。如果电路中用到了电容、电阻、电感或晶体管等其他器件,也需要加载这些器件的库文件,忘记加载或者加载不全,仿真器会报错。
CS_stage中MOS管的 W 和 L 都已经确定(不是最优的),且NMOS管的栅压为1V,在电源电压为1.8V的情况下,如果要将vout的静态工作点调整为0.9V,则需要选择合适的PMOS管栅压vb,也就是扫描变量var_vb的值。由于这个电路的工作点对var_vb比较敏感,所以扫描步长设置为10mV,如果不知道大概的范围,扫描可在0~1.8V之间进行。这里需要说明一下,在实际的有源负载电路中,通常负载管的栅压由电流镜提供,本例扫描负载管栅压就是为了练习直流扫描仿真流程。
在扫描前需要将var_vb复制到ADE中,方法是单击ADE菜单Variables→Copy From Cellview,ADE中的Design Variables栏就会显示电路图中的变量,本例为var_vb,双击var_vb,弹出Editing Design Variables对话框,在Value(Expr)栏中暂时将其设置为1V,等扫描完成后再修改成优化值,设置结果如图3.8所示。
图3.8 复制变量var_vb并设置为1V
下面进行直流扫描设置,单击ADE的Analyses→Choose...弹出如图3.9所示的Choosing Analyses对话框,在Analysis栏中选择dc,即将仿真分析类型设置为直流(扫描)分析。在DC Analysis栏中选择Save DC Operating Point,勾选这个选项可以在电路图中直接标出各个节点的电压。在Sweep Variable栏中选择Design Variable,表示要进行变量扫描,单击Select Design Variable按钮,选择要扫描的变量var_vb。在Sweep Range栏中选择Start-Stop,将变量扫描范围设置为0~1.8V。将Sweep Type设置为Linear,表示进行线性的扫描,选择Step Size,将扫描步长设置为10mV,然后单击OK按钮完成扫描设置。
下面设置输出显示,单击ADE的Outputs→To Be Plotted→Select On Schematic,然后在原理图中直接单击需要显示的电压或者电流,单击连线可显示电压,单击器件引脚可显示电流,在本例中单击vout_sch和vout_layout即可。最终结果显示在Outputs栏中,如图3.10所示,如果误选了其他的输出,可以使用旁边红绿灯图标上方的橡皮图标删除。
图3.9 直流扫描分析设置
图3.10 完成设置的ADE
完成上述设置后就可以进行直流扫描仿真了,在启动仿真之前,单击Session→Save State...,在弹出的Saving State对话框的Save AS栏中填写state_dc,然后单击OK按钮。这样就可以把模型库、仿真和变量设置等状态保存在state_dc文件中,今后再进行仿真时只需要单击Session→Load State...即可调出,非常方便,希望读者养成保存仿真状态的好习惯。单击ADE中的红绿灯图标开始仿真,仿真波形如图3.11所示。
图3.11 直流扫描仿真波形图
图3.11的横坐标是变量var_vb,纵坐标是vout_sch和vout_layout,由于它们对应的电路和仿真条件完全相同,所以两条曲线重合。为了快速找到纵坐标为0.9V时所对应的var_vb值,可以按M键在曲线上产生一个Maker M0,双击Maker M0可弹出如图3.11中所示的Maker Attributes对话框,把对话框中的Position(X,Y)栏设置为by Y,然后在Y栏中填入900mV,单击Apply,M0就会自动跳到900mV处,这样就可以得到当前var_vb为0.6058V。现在可以回到ADE窗口,将窗口中的变量var_vb改为0.6058V,然后保存一下state_dc,这样直流扫描的任务就完成了。
当把var_vb设置为目标值(0.6058V)后,还需要对电路进行一下直流仿真,目的是验证一下工作点。具体方法很简单,把图3.9中Sweep Variable栏中的Design Variable选项去掉,后面与之相关的选项也会随之消失,然后单击OK按钮,ADE窗口将如图3.12所示。单击红绿灯图标开始仿真,由于只是工作点计算,所以仿真结束后没有波形显示,需要通过下面的操作观察直流工作点。
图3.12 没有扫描的直流分析设置
按Esc键退出所有的操作状态,在原理图中单击CS_stage符号并按E键,弹出如图3.13所示的Descend对话框,单击OK按钮得到如图3.14所示的CS_stage的电路图。通过操作可知,这一步的目的是通过顶层符号图进入到符号图所对应电路的内部,便于后续的观察。
图3.13 Descend对话框
图3.14 Descend之后显示的CS_stage电路图
单击ADE菜单Results→Annotate→DC Node Voltages,则原理图中将标出各个节点的电压值(如果没有显示,则可能是忘记勾选图3.9中的Save DC Operating Point选项了)。单击ADE菜单Results→Annotate→DC Operating Points,则原理图中将标出MOS管的工作点,包括栅源电压 Ⅴ GS (vgs)、漏源电压 Ⅴ DS (vds)、漏极电流 Ⅰ DS (ids)和跨导 g m (gm)等。效果如图3.15所示,如果想去掉显示,可单击Results→Annotate→Design Defaults。
图3.15 节点电压和工作点显示效果图
除了通过Annotate在原理图上直接显示直流分析结果外,还可以通过Results→Print菜单下面的DC Node Voltages和DC Operating Points选项在Results Display Window中显示结果。选择DC Node Voltages可以显示出鼠标单击的节点电压,选择DC Operating Points可以显示出鼠标单击的器件的工作点参数,这里显示的工作点参数非常详细,包括跨导gm和阈值电压vth等大家经常用到的器件参数,图3.16显示了vout节点电压约为909.95mV,PMOS管的跨导gm(倒数第2行)约为507.696μS。
按Ctrl+E键可以回到上一层电路,本节仿真结束。
如前所述,直流扫描仿真(.dc)和工作点仿真(.op)都是Spice的仿真描述语句,使用本节所介绍的图形界面可以很轻松地完成直流扫描仿真和工作点仿真,而对于那些单独使用HSPICE进行仿真的用户,则需要自己去写这些仿真分析语句。下面简单介绍一下这两条语句的语法格式,为手写仿真文件打下一定的基础。
.dc的单参数扫描语法格式为
其中var为变量名,start为扫描起始值,stop为扫描终止值,step为步长。例如,本例中的扫描可以用下面的语句:.dc var_vb 0 1.8 0.01,即扫描变量为var_vb,扫描范围为0~1.8,扫描步长为0.01。
图3.16 Results Display Window
.op的语法格式比较简单,其语法格式为
该语句输出time指定时刻所有器件的工作点,以及电源电压和电流。
语句只输出节点电压。
语句只输出支路电流。
即使不写.op语句,Spice在进行交流分析时也会先进行工作点计算,然后在工作点处计算交流特性,而当进行瞬态分析时,则先计算0时刻的工作点,并以此为边界条件按照时间进行仿真计算。