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也是一样的方法进行表示