学习日志之microelectronic(13)——SPICE语言

SPICE 语言是一种电路仿真语言。这种语言之下还分出了很多种小类HSPICE/ELDO/PSPICE/LTSPICE等等,这每一种小分支的不同之处在于其拥有不同的库,不同的库中元件实现的的方式不同,其参数和仿真的模型也不相同,但是他们大体的语言结构都是一样的。SPICE语言的本质是一个解方程的工具,通过对节点之间器件的描述列出方程进行求解(让我联想到了节点电压法那些电路原理中学到的东西)

其程序大致可以分为这么以下结构:

  • 标题语句:SPICE自动将第一行作为标题
  • 注释语句:*号后面的东西
  • 电路描述语句:描述电路的拓扑结构
  • 电路特性分析语句:如何对电路进行分析和测量
  • 结束语句:.end表示整个程序的结束

(有时候一行的开始会有一个+,这个是续行符号,表示其接在上一行的结尾)

电路描述语句

语句的第一个字符一定要是一个字母,其代表的是元件类型,跟在其之后的是元件的标号和参数。这里dc是代表电压源的种类,在SPICE中可用的种类还有ac, sin, cos, pwl(梯形波),这些都可以算在模型名中,模型由.model 语句定义。

首字母可用的元件以及其对应的名称如下所示:

C-电容 M-MOS场效应管
D-二极管 Q-双极型晶体管
E-压控电压源 R-电阻
F-流控电流源 S-电压控制开关
G-压控电流源 T-传输线
H-流控电压源 V-独立电压源
I-独立电流源 W-电流控制开关
J-结型场效应晶体管 X-子电路
K-互感 B-砷化镓场效应管
L-电感

在对于PWL电源的语句如下例,其后面参数都是成对的,奇数为上都是表示时间,偶数位上表示的是电压大小。

模型的定义是用.model语句其结构如下所示,在调用模型时需要参数的顺序和这里定义的时候一致,但是如果说参数太多可以用“参数名=参量”的形式进行定义。在模型定义中注意要设置好参量的缺省值:

接下来要说的是子电路(subcircuit)的调用和定义,其调用的开头字母是X,语法和元件描述是一样的。定义的时候需要用到.subuckt指令如下所示为一个子电路,第二行的.param res=0是对上面的形参res进行赋值,此时会有一个预定义的值RES=0.

对于.param指令还有其他的用法:

  • 普通赋值:
  • 参数之间赋值:
  • 表达式赋值: 这个表达式和C语言格式是一样的
  • 函数赋值:

一个函数赋值的例子,其中在paramname后面的参数pv1,pv2可以用于给函数提供参数,当然后面的函数也可以使用自己的参数。

元件库调用用.LIB指令如下所示,当前目录下的话就不需要写路径,如果说没有写文件也没有写路径,SPICE会自动填上NOM.LIB,这个库是一个默认的库。

电路特性分析语句

.measure语句可以用于DC,AC或是瞬态分析(transient)

其格式为:

.measure

SimulationType为仿真类型使用到的只有三种DC、AC、TRAN

resultName为用户定义的测量参数的名字

MeasurementType为需要测量的类型

其中trig是表示测量一个电平的跳变(trigger),跟在其后面的是需要测量的波形的名称v(out),再后面是表示这个电压到了什么值得时候做一次测量,而最后的rise是指测量的是第几次跳变,如果后面还有上升沿就一次是RISE=2,RISE=3...这个RISE是一个固定参数表示的是上升沿,而还有一个是下降沿是FALL也是一样的方法进行表示