Spice可以进行工作点分析、直流扫描分析、瞬态分析、交流分析、温度分析、噪声分析、傅里叶分析、S参数分析和功耗分析等。在进行电路仿真前,要根据电路结构和特性规划仿真类型,添加相应的仿真激励信号,合理设置仿真时间长度和频率范围等。下面用一个简单电路举例说明Spice的基本语法结构,使读者对Spice语法建立一些感性认识。
图3.1所示是一个有源负载共源极放大器电路图及其对应的Spice网表,电路中NMOS管(Mn)连接成共源极放大器结构,PMOS管(Mp)为有源负载管(与第2章中的有源负载共源极放大器电路结构相同),R1和C1为低通滤波器,V1是正弦电压激励源,V2是Mp的栅极偏置直流电压源,V3是直流供电电源,下面对它的Spice网表进行逐句分析和解释。
图3.1 NMOS管共源极放大器电路图和Spice网表
第1行:打星号“*”表示注释,Spice语法规定网表文件第一行无论是否打星号,都不作为电路描述语句,它只是标题语句用于仿真界面显示。
第2行:注释语句,说明下面将描述电路元器件连接关系。
第3行:描述NMOS管Mn的连接关系,Mn是NMOS管的编号,MOS管的编号必须以M开头。Spice语法严格规定各类元器件编号的首字母规则,见表3.1。
表3.1 Spice网表常用元器件和激励源首字母表
编号之后是元器件的端口连接关系,MOS管的4个端口在网表中的顺序是D、G、S和B(衬底),本例中Mn的引脚连接依次为a、Vin、GND和GND,其中用0或GND表示接地。nv是器件的Spice模型名称,该模型必须在Spice模型库文件中有定义,即第15行的模型库文件demo_lib.lib中有定义。
模型名称之后列出模型的关键参数,参数采用国际单位制,而那些没有列出的参数将使用默认值。对于MOS器件来说,参数 L (沟道长度)和 W (沟道宽度)必须给出,本例为 L =2μ, W =5μ。注意,初学者最容易犯的错误之一是写成 L =2,它表示一个MOS管沟道长度为2m,对MOS管来说这将是一个巨大的天文数字。
Spice采用国际单位制,其后缀(Suffix)见表3.2。这里需要特别提醒注意的是关于兆(10 6 )的表示方法,虽然人们已经习惯了用M表示,但在Spice中最好用meg表示,因为m表示10 -3 ,大小写很容易弄错。例如,大家经常用100MHz表示100兆赫频率,但它在Spice中可能被理解成100Hz×0.001=0.1Hz,为了防止出现类似错误,最好直接写出6个0。另外,早期版本的Spice不区分大小写,但很多商业Spice工具可能是遵循了UNIX的shell规则,区分大小写,为了尽量不出错误,建议大家还是用meg表示兆。
表3.2 Spice后缀表
第4行:描述PMOS管Mp的连接关系,本例中把连接在节点a的端口看作漏极D,按照D、G、S、B的顺序依次为a、Vb、VDD、VDD,PMOS管的模型名称为pv,栅长 L =5μ和栅宽 W =10μ。
第5行:描述一个电阻,其编号(首字母R)为R1,连接关系为一端接a,另一端接out,其电阻值为5kΩ。
第6行:描述一个电容,其编号(首字母C)为C1,连接关系为一端接out,另一端接GND,其电容值为10pF。
第7行:注释行,说明下面将描述电路的激励源。
第8行:描述一个正弦电压源,其编号(首字母为V)为V1,连接关系为正端接Vin,负端接GND,sin表示正弦波,括号里是正弦波的属性参数,0.7、10m和1000表示正弦波的中心值为0.7V,幅度为10mV,频率为1000Hz,括号中的其他参数将在后面的瞬态信号源部分详细介绍。
第9行:描述一个直流电压源,其编号为V2,连接关系为正端接Vb,负端接GND,4V直流电压,它为PMOS管提供偏置。
第10行:描述一个直流电压源,其编号为V3,连接关系为正端接VDD,负端接GND,为整个电路提供5V直流电源。
第11行:注释行,说明下面将要进行仿真设置。
第12行:.tran表示进行瞬态仿真,1μ表示仿真步长为1μs,20m表示仿真时间长度为20ms,3m表示从3ms开始打印或记录输出结果。
除了.tran的瞬态仿真,作为Spice仿真的初学者,还应该掌握静态工作点仿真(.op)、直流扫描仿真(.dc)、交流仿真(.ac)、蒙特卡罗仿真(sweep monte)和噪声分析仿真(.noise)等几种主要类型的仿真方法,它们在电路设计中经常用到,后面的内容将对它们进行具体介绍。
第13行:注释行,说明仿真将要输出的变量。
第14行:.plot为输出控制,v(out)表示打印out的电压曲线。
第15行:.lib用于Spice模型库文件加载控制,双引号内为库文件的路径和文件名,本例为当前目录里的demo_lib.lib,后面的tt表示用库文件中的tt库,即典型库(typical),关于这个内容还将在工艺角仿真部分进行介绍。
第16行:Spice文件结束标志,无论后面有没有语句,编译器见到.end将认为文件结束。
Spice也支持子电路描述,图3.2所示为反相器电路图和子电路网表。子电路用.subckt语句描述,inv为子电路名称,A、Y、VDD和GND为子电路端口,Mn和Mp为反相器内部的NMOS管和PMOS管,.ends为子电路结束语句,它比Spice总文件的.end多了个字母s,初学者很容易写错,如果少了这个s,那么Spice编译器见到它就会结束编译,并报出大量的错误。
图3.2 反相器电路图和子电路网表
子电路调用语句以X开头,本例为X1、X2和X3,跟在它们后面的in b VDD GND、b c VDD GND和c out VDD GND分别描述反相器在总电路中的连接关系,每条X语句最后为子电路名称,本例为inv。