引言
SPICE(Simulation program with Integrated Circuit Emphasis)做为电路级模拟程序,是许多仿真软件的核心,好比Tanner Tools、Cadence。html
本文旨在向初学者介绍SPICE的概况、原理以及应用,帮助初学者对SPICE创建一个基础的概念。算法
目录
一、简介
二、原理
三、SPICE模型
四、应用
工具
简介
SPICE是1972年伯克利大学开发的一个电路分析工具,但实际上它只是一个内核,提供核心算法SPICE。要使用各类各样的功能,须要跟它的各类壳(如PSPICE、HSPICE等)进行对话。
性能
SPICE发展至今,已经由许多公司开发出了各自的仿真器,好比HSPICE、PSPICE、smart-SPICE、TSPICE、spectre等,其中最出名的当属HSPICE。固然其余的仿真器也具备各自的特点,好比spectre就是由Cadence公司开发的,它的运算速度更快,而且收敛性会更好。ui
具体的历史能够参见这篇文章,写的妙不可言,SPICE简史。spa
原理
SPICE实际上是一个解非线性常微分方程的工具,里面内嵌了器件、电路的数学公式。好比下方的关于MOSFET的公式
.net
咱们输入的网表文件,暗含了各个元器件的链接关系,就构成了一个个方程组,靠着计算机强大的算力,将这些方程组解出来,咱们就能得到咱们想要的信息,好比某个节点的电压,某条支线的电流。设计
这里提到一个概念叫作网表文件,网表文件是一个描述电路元件之间相互链接关系的代码,和咱们想要仿真的电路是对应的。好比下图就是M1晶体管分别与out in vdd vdd四个电极相连
3d
所以,咱们能够把SPICE理解为一个输入是网表文件,输出是电路参数的盒子。可是,不一样仿真器的输入文件在格式上有所差异,有些差异较小,好比TSPICE和HSPICE,只须要改一些细节就能够将一个仿真器的输入文件做为另外一个仿真器的输入。但也有些差异较大,好比HSPICE的语法和spectre的语法就有较大的差异,二者之间的转换须要复杂的操做,过程能够参考这个连接。htm
除了输入文件不一样,不一样仿真器的输出结果也会有所差别,好比仿真一个晶体管的Id-Vg曲线,不一样仿真器的结果会略有差别。所以,对于对器件性能要求比较高的仿真,应当观察哪一个仿真器的结果和实际最为接近。
计算机在解方程的时候,实际上会不断迭代,向真正的解靠近,一旦迭代次数超过最大迭代次数,或者解是发散的,就可能会出现仿真结果不收敛的状况,这种状况,除了修改仿真器的内部算法,更可能的缘由是电路设计上存在缺陷。
事实上,有意思的一点是,咱们只要掌握了SPICE中的那些数学公式,咱们甚至能利用MATLAB来进行仿真,固然,这只针对单个器件或者简单电路以及收敛性要求不高的状况下。咱们曾经用matlab来仿真一个晶体管的Id-Vg曲线,其结果和HSPICE的仿真结果基本同样。这在一些特殊的领域,好比SPICE模型去和实际模型拟合时,具备重要的意义
SPICE模型
SPICE模型就是上文所说的一组表征器件物理性能的方程,其中包含具备物理意义的模型参数。可是对于一种特定的器件,其电学性能,遵循的电学公式每每是不同的,好比MOSFET和TFT(薄膜晶体管),他们对阈值电压的处理,就有所不一样。
所以,针对特定的器件,每每由具体的SPICE模型,对于一些经常使用的器件,好比NMOS,咱们用一些自带的模型每每已经足够,可是对于一些特殊的器件,它的性能参数与它的生产工艺有关,它的模型每每由生产它的公司提供。
下面以HSPICE的模型为例,解释说明模型中的语句内涵
图片转载自https://wenku.baidu.com/view/c066b15f561252d380eb6ec1.html
mod1:模型名称,也就是网表文件中具体元器件调用的名称
nmos:元器件类型
VTO等其余参数:这些参数表现了这个元器件的特性,能够经过修改这些参数来修改元器件的特性,这些参数的集合被称为模型卡。
注:在SPICE模型文件中,每每还有一个LEVEL参数,用来指定哪种模型,不一样LEVEL之间的模型,其参数会有差异,固然也有为了模拟其余类型器件而创建的LEVEL好比LEVEL=62就是LTPS(低温多晶硅)TFT的模型。
每每这些参数在模型文件中已经有了一个缺省时的默认值(能够参见HSPICE的模型手册)
SPICE的这些参数有些具备实际的物理意义,有些是单纯的数学参数,有些参数甚至是根据实际的经验公式来制定的,具体的含义能够查阅模型手册。
LEVEL 58的部分模型参数
应用
知道了原理,那咱们怎么对一个电路用SPICE进行仿真呢。就像咱们以前说的,咱们须要与一个仿真器进行对话,这里咱们采用HSPICE来做为例子。
HSPICE对一个TFT进行Id-Vg曲线仿真
-
本身手写一个或者从其余软件导出这个电路的网表文件。对于不复杂的电路,能够直接手写,可是对于庞大复杂的电路,建议先用其余软件画出电路图,再导出这个电路图的网表文件。手写的话能够参照HSPICE的相关语法。
-
调用所用到的器件的模型,如今仿真器通常支持的模型库都比较全面,通常的模型文件都能识别。完整网表以下
-
进行仿真,根据电路的规模和复杂程度,仿真时间也会有所差异。这里可能会出现仿真结果不收敛的状况,这时候你须要检查下你的电路是否在一些点发生了冲突,或者能够换个仿真器进行尝试,或者修改仿真器的算法机制(更改迭代数、收敛的偏差范围之类的)。