[转]HSPICE 使用流程
HPICE软件主要用于模拟电路的仿真。模拟电路仿真工具是以电路理论、数值计算方法和计算机技术为基础实现的,由于模拟电路在性能上的复杂性和电路结构上的多样性,对仿真工具的精度、可靠性、收敛性以及速度等都有相当高的要求。HSPICE程序由于收敛性好,适于做系统及电路仿真,又有工作站版和微机版本,在国内外的用户十分广泛。
一、HSPICE可模拟的内容
- 直流分析:包括非线性电路的直流分析
- 电路的直流工作点:分析时电路中的电感全部短路,电容全部开路,得到电路的每一节点的电流和电压(相对参考点)值。
- 直流小信号传输值:传输函数的直流小信号值为直流小信号工作下的输出变量和输入变量之比值,包括电路的输入电阻和输出电阻。
- 直流转移曲线:HSPICE可在用户指定的范围内,逐步改变指定的独立电压或电流源,对每一个电源值的变化,都得到储存的输出变量。
- 灵敏度分析:求出指定输出变量对于电路参数(包括电路中所有的元件,器件参数,直流电源的输入电平)的直流小信号灵敏度。
- 交流小信号分析:将交流输出变量作为频率的函数计算出来。先计算电路的直流工作点,决定电路中所有非线性器件的线性化小信号模型参数,然后在用户所指定的频率范围内对该线性化电路进行分析。
- 频域分析:在用户规定的频率范围内完成电路的交流分析。
- 噪声分析:HSPICE可计算每个频率点上总的输出噪声电平及其等效输入噪声电平。
- 失真分析:计算电路交流小信号工作下电路的失真特性,分析时是在输入端加有一个或两个频率的信号,在用户给定的输出负载电阻时,求出在该负载上的输出失真功率。
- 瞬态分析
- 瞬态响应:是从时间为零开始,到用户规定的时间范围内进行电路的瞬态特性分析。
- 傅立叶分析:可以对输出波形进行傅立叶分析,得到在用户指定的基频及时间间隔范围的傅立叶系数。
- 电路的温度特性分析:HSPICE在用户未说明时,是在27℃的标称温度下进行各种模拟的。当用户指定电路在什么温度下工作时,HSPICE也能进行不同温度下的电路特性分析,在温度低于-273℃时不予模拟。
二、HSPICE程序可输入的元器件和电源
- 元件:包括电阻、电容、电感、耦合互感、无损耗传输线及开关等。
- 半导体器件:结型二极管、双极型晶体管、结型场效应管、MOS场效应管及MESFET等。
- 电源:独立电流源、独立电压源、线性电压控制电流源、线性电压控制电压源、线性电流控制电流源、线性电流控制电压源以及相应的非线性受控源。其中独立源除直流源外还有脉冲源、交流正弦源、分段线性源、调幅信号源、调频信号源等。
- 子电路:HSPICE允许用户用定义器件模型相似的形式自行定义一组元器件作为子电路。子电路的大小没有限制,子电路可以嵌套子电路,使用户在模拟含有较多重复单元电路的较大规模电路时更为方便。
三、HPICE软件的运行
HSPICE可以以命令行方式方式启动,类似于DOS命令交互方式,较繁琐。我们目前采用的是Windows标准输入界面,使用标准输入文件。操作步骤为:
- 启动Hspui.exe,出现Star-Hspice Launcher。
- 在Star-Hspice Launcher下,按Browse,选取网表输入文件(*.sp),然后按确定。
- 在Star-Hspice Launcher下,按Simulate,就会自动弹出Hspice窗口,并对电路进行模拟。
- 模拟结束后,Hspice窗口关闭。
- 在Star-Hspice Launcher下,按Avanwaves,查看输出波形。
- 可以用记事本来查看输出文档(*.list)。
四、电路模拟过程
用HSPICE进行电路分析时,各个程序模块之间的关系和设计流程见图1:
图1程序设计流程图
电路的模拟过程描述如下:
逆向设计的步骤是一开始便进入了电路原理图的输入。原理图是根据逆向提取的结果输入。原理图Schematics文件输入完毕并检查Check通过后,将原理图转换成网单文件。
我们首先要选择合适的工艺,并调用该工艺所提供的库文件。该库文件中应包含用该工艺制得的三极管的各个参数值,如单位漏电流,基区方块电阻,值等(详见HSPICE使用手册)。有源器件,如三极管,它们的尺寸是根据工艺的最小尺寸及电路的指标要求来设定的,如发射区、基区和集电区的面积,网单文件中的各个管子后面area、areab和areac分别标明其面积因子。这样,在模拟时,Hspice便会自动根据库文件和尺寸计算出具体各管子的参数。电阻、电容值等参数的确定则先测量它们的尺寸,然后根据所选工艺的方块电阻和面电容的值计算得出。
将网单文件和参数生成完毕以后,我们还要输入激励源和分析语句。输入信号根据实际情况用调用相应的信号。按各个功能块模拟时,前一级的输出作为后一级的输入。分析语句则根据不同的需要选用。当我们需要知道电路每一节点的电流和电压时,选用静态工作点分析.op语句;如果需要了解在指定范围内,输出变量值随某个指定的独立源变化的规律,选用.dc语句;如要知道某个电路的幅频特性和相频特性,选用交流小信号分析语句.ac;在要查看在指定的时间间隔内,输出波形的变化函数关系,选用瞬态分析语句.tran。还有其它语句,如噪声分析语句.noise、频域分析.four、和小信号传输函数分析.tf、小信号灵敏度分析.sens等,也能反映出电路性能的好坏。
Hspice具有很强的查错功能,可对输入的电路描述语句进行语法检查,以及电路连接关系的拓扑检查。一旦发现错误,将输出出错信息并停止程序的运行,这时应先检查.lis文件中是否由出错信息。
五、HSPICE的基本语法
1.概述
1.1 文件命名
Star-Hspice的输入文件类型和标准命名列出如下:
输入文件类型 文件名
输出配置文件 meta.cfg
初始化文件 hspice.ini
直流工作点初始状态文件 <design>.ic
输入网表文件 <design>.sp
库输入文件 <library_name>
模拟转换数据文件 <design>.d2a
1.2 输入网表文件(<design>.sp)
Star-Hspice 读入一个输入网表文件,并将模拟结果存在一个输出列表文件或图形数据文件中。输入文件<design.sp>包含以下内容:
●电路网表(子电路和宏、电源等)
●声明所要使用的库(可选)
●说明要进行的分析(可选)
- 说明所要求的输出(可选)
输入网表文件和库文件可以由原理图的网表生成器或文本编辑器产生。输入网表文件中的第一行必须是标题行,并且.ALTER辅助模型只能出现在文件最后的.END语句之前,除此之外,其它语句可以按任意顺序排列。
注意:如果输入文件的最后没有.END语句,将会产生错误信息。
1.2.1 输入行格式
●输入网表文件不能为压缩格式。
●输入文件名的长度、语句长度以及等式长度不超过256个字符。
●除了被引用的文件名以外,不区分所有大小写。
●一行输不完转到下一行时,下一行的第一个非数字、非空格的字符必须为"+"。
●注释("*"和"$"符号后的内容视为注释)
●当输入文件中出现了特殊的控制字符时会产生错误。由于大多数系统无法打印特殊字符,错误信息就会因为错误字符无法显示而不明确。可以采用.OPTIONS BADCHAR语句来定位这些错误。
1.2.2 名称
●名称必须以字母打头,然后可以跟上数字和下列字符:
! # $ % * + - / < > [ ] _
●定界符优于名称,并紧跟名称之后。
●名称可以长达1024个字符。
●名称不区分大小写。
1.2.3 定界符
●输入定界符有:tab、空格、逗号、等号和小括号
●一次和二次引用定界表达式和文件名
●元素的属性用冒号来定界(如"M1:beta")
●用句点来表示隶属定界,如"X1.A1.V"表示电路X1的A1子电路的V结点
1.2.4 结点
●结点标识可以长达1024个字符(包括句号和延展部分)
●结点数字开头的0被忽略
●跟在以数字开头的结点编号后的字母被忽略。如,结点1A等同结点1
●结点名可以由以下任何字符打头:# _ ! %
●结点可以用.GLOBAL语句声明为全局的
- 结点0、GND、GND!和GROUND均指的是Star-Hspice全局的地。
2. 元件输入的一般格式
2.1 基本元件(R、L、C等)输入语句
NAME node1, node2 …. nodeN <model reference> value <optional parameters>
其中,
NAME 定义元件的类型及名称。第一个字母用于指定元件的类型,例如:C表示电容、L表示电感、R表示电阻,剩下的字母则是给这个元件起的名字。
node1 ... nodeN 指明元件在电路中的连接情况
value 指明元件的标称值。比如:C1 2 0 10uF,表明在结点2和地之间接入一个10uF的电容C1。
<model reference> 当基本元件参数不能充分描述时,调用相应的模型来描述。
<optional parameters> 参数列表
2.2 二极管输入语句
Dxxx nplus nminus mname <AREA=val> <PJ=val> <WP=val> <LP=val> +<WM=val> <LM=val> <OFF> <IC=vd> <M=val> <DTEMP=val>
或
Dxxx nplus nminus mname <area_val <periphery_val>> <OFF> <IC=vd> +<M=val>
或
Dxxx nplus nminus mname <W=val> <L=val> <WP=val> <LP=val> +<WM=val> <LM=val> <OFF> <IC=vd> <M=val> <DTEMP=val>
2.3 BJT输入语句
Qxxx nc nb ne <ns> mname <aval> <OFF> <IC=vbeval,vceval> <M=val> +<DTEMP=val>
或
Qxxx nc nb ne <ns> mname <AREA=val> <AREAB=val><AREAC=val> +<OFF> <VBE=val> + <VCE=val> <M=val> <DTEMP=val>
2.4 MOS器件的输入
Mxxx nd ng ns <nb> mname <L=val> <W=val> <AD=val> <AS=val> <PD=val> <PS=val> <NRD=val> <NRS=val> <RDC=val> <RSC=val> +<OFF> <IC=vds, vgs, vbs> <M=val> <DTEMP=val> <GEO=val> +<DELVTO=val>
or
Mxxx nd ng ns <nb> mname lval wval …
or
.OPTION WL Mxxx nd ng ns <nb> mname wval lval …
3.模型语句
.MODEL mname type <VERSION=version_number> <pname1=val1 pname2=val2 ...>
其中,
mname 所定义的模型名。注意:模型名称中如果含有点(.)可能会导致某些情况下模型自动选择的失败。
type 选择模型类型。为以下类型之一:
AMP operational amplifier model
C capacitor model
CORE magnetic core model
D diode model
L magnetic core mutual inductor model
NJF n-channel JFET model
NMOS n-channel MOSFET model
NPN npn BJT model
OPT optimization model
PJF p-channel JFET model
PLOT hardcopy plot model for the .GRAPH statement
PMOS p-channel MOSFET model
PNP pnp BJT model
R resistor model
pname1 ... 参数名称。参数名称和模型要匹配,可以多行输入,新起行的第一个字符必须为"+"。
VERSION 版本号。用于识别不同版本所允许的BSIM和BSIM2的模型。(略)
4.元件库的选择输入
分立器件库(DDL)是Star-Hspice的分立器件模型的集合,由BJT、MESFET、JFET、MOSFET和二极管模型组成。可以采用X子电路调用语句和DDL元件调用,将DDL库中的元件包含进来。DDL元件语句调用实际DDL库文件中的模型名。例如,下面的语句建立了一个lN4004二极管模型的实例:
X1 2 1 DlN4004
其中,DlN4004是模型名。
Star-Hspice有如下几种方式调用DDL模型库:
- 系统在安装时的缺省设置。当输入语句中用到某个模型或者子电路时,系统自动在DDLPATH环境变量所指向的路径中搜索和模型名同名的文件,其后缀为.inc。DDLPATH变量设置在meta.cfg配置文件中。
- 在输入文件中用.OPTIONS SEARCH="<library_path>"设置搜索路径。
- 直接用.INCLUDE语句将特定模型包含进来。如
.INCLUDE <path>/T2N2211.inc
可以用.LIB语句将常用的命令、器件模型、子电路分析等放入到库文件中。(暂时略)
5. 电压/电流源语句
5.1 独立电压/电流源
某些类型的分析只能使用与之相关联的电压/电流源语句。例如,如果在同一独立源语句中定义了DC和AC源,则在进行DC分析时,AC源被将移出电路。
Vxxx n+ n- <<DC=> dcval> <tranfun> <AC=acmag, <acphase>>
或者
Iyyy n+ n- <<DC=> dcval> <tranfun> <AC=acmag, <acphase>> <M=val>
其中,
Vxxx 独立电压源的名称。必须以"V"打头,后面可以跟1023个字母数字字符。
Iyyy 独立电流源的名称。必须以"I"打头,后面可以跟1023个字母数字字符。
n+ 正结点
n- 负结点
DC 设置DC电压/电流源的值,dcval为设置的值。"tranfun"在零时刻的值将覆盖DC值(缺省为0.0)。
tranfun 电压/电流源的输出函数(AC, ACI, AM, DC, EXP, PE, PL,PU, PULSE, +PWL, R, RD, SFFM, SIN)
AC 表示该电压/电流源用于AC小信号分析
acmag AC幅度
acphase AC相位(缺省为0.0)
M 用于模拟多个并联的电流源的倍乘因子。电流值与M相乘为总电流(缺省为1.0)。
例子
VX 1 0 5V
VB 2 0 DC=VCC
VH 3 6 DC=2 AC=1,90
IG 8 7 PL(1MA 0S 5MA 25MS)
VCC 10 0 VCC PWL 0 0 10NS VCC 15NS VCC 20NS 0
VIN 13 2 0.001 AC 1 SIN (0 1 1MEG)
ISRC 23 21 AC 0.333 45.0 SFFM (0 1 10K 5 1K)
VMEAS 12 9
5.1.1 DC电压/电流源
可以采用不同的方式定义DC电压或者电流源:
V1 1 0 DC=5V
V1 1 0 5V
I1 1 0 DC=5mA
I1 1 0 5mA
前两个例子在结点1和地之间定义了一个5V的DC电压源。第三和第四个例子在结点1和地之间定义了一个5mA的DC电流源,电流流向为从结点1流向地。
5.1.2 AC电压/电流源
用AC关键词来定义AC电压/电流源的幅度和相位。
V1 1 0 AC=10V,90
VIN 1 0 AC 10V 90
上面两个例子定义了一个幅度为10V、相位为90度的AC电压源。进行AC分析时的频率扫描范围在.AC分析语句中给出。AC分析给出电路的脉冲响应。
5.1.3 瞬态电压/电流源
对于瞬态分析,可以将电源定义成时间的函数。可以采用的函数有:脉冲、指数、阻尼正弦、单频FM以及分段线性函数。
5.1.4 混合电压/电流源
混合电源的定义是为了进行多种类型的分析。例如,可以在定义DC电源时,在相同结点间同时定义AC和瞬态电源。在这种情况下,当进行特定的分析时,Star-Hspice会选择相应的DC, AC或者瞬态电源。有一个特例是零时间常数的瞬态电源,它将覆盖DC值,并被用来计算所有分析的工作点。
VIN 13 2 0.5 AC 1 SIN (0 1 1MEG)
上面的例子在结点13和2之间同时定义了一个0.5V的DC电压源、一个1V的AC电压源和一个阻尼正弦电压源。当进行DC分析时,程序对其它两个电压源采用零电压值。
5.2 独立电压/电流源函数
Star-Hspice提供以下几种电压/电流源函数:
- Pulse(脉冲函数)
- Sinusoidal(正弦函数)
- Exponential(指数函数)
- Piecewise linear(分段线性函数)
- Single-frequency FM(单频调频函数)
- Single-frequency AM(单频调幅函数)
5.2.1 PULSE(脉冲函数)
Star-Hspice采用梯型脉冲函数。在第一个上升斜坡前有一段瞬态模拟的初始过渡延迟,以后每个上升斜坡内,电压或者电流从初始值到脉冲平顶值线性变化,过了脉冲平顶值后,电压或者电流沿下降斜坡线性变化到初始值。整个脉冲再按某一周期重复变化。
PULSE <(>v1 v2 <td <tr <tf <pw <per>>>>> <)>
或者
PU <(>v1 v2 <td <tr <tf <pw <per>>>>> <)>
其中,
v1 电压或者电流的初始值。
v2 脉冲平顶值。
td 从瞬态模拟开始到第一个上升斜坡开始前的延迟(单位为秒,缺省为0.0,
并且当设置td < 0.0时,同样取td=0.0)
tr 从初始值到脉冲平顶值的上升斜坡的时间(缺省为TSTEP)
tf 从脉冲平顶值返回到初始值的下降斜坡时间(缺省为TSTEP)
pw 脉冲宽度(脉冲平顶部分的宽度)(缺省为TSTEP)
per 脉冲的重复时间(单位为秒,缺省为TSTEP)
例子:
VIN 3 0 PULSE (-1 1 2NS 2NS 2NS 50NS 100NS)
V1 99 0 PU lv hv tdlay tris tfall tpw tper
第一个例子在结点3和地之间定义了一个脉冲电压源。脉冲的输出高电压为1V,输出低电压为-1V,初始延迟为2ns,上升和下降时间均为2ns,脉冲宽度为50ns,周期为100ns。第二个例子中所用到参数值应该有相应的.PARAM语句定义。
脉冲时序表
时刻
电压或电流值
0
v1
td
v1
td + tr
v2
td + tr + pw
v2
td + tr + pw + tf
v1
tstop
v1
5.2.2 SIN(正弦函数)
Star-Hspice采用阻尼正弦电压/电流源,即电压或电流值为一衰减指数因子与一正弦波的乘积。使用时要求给出正弦波的频率、指数衰变因子、初始相位以及波形的初始时刻(详细见下面说明)。
SIN <(>vo va <freq <td <θ<φ>>>> <)>
其中,
vo 电压或者电流的直流偏移量(单位为V或者A)
va 电压或者电流的幅度(单位为V或者A)
freq 频率(单位为Hz ,缺省为1/TSTOP)
td 延迟时间(单位为秒,缺省为0.0)
θ 阻尼因子(单位为1/秒,缺省为0.0)
φ 初始相位(单位为度,缺省为0.0)
输出函数为:
例子:
VIN 3 0 SIN (0 1 100MEG 1NS 1e10)
这个例子在结点3和地之间定义了一个阻尼正弦电压源。波形峰值为1V,直流偏移量为0V,频率为100MHz,时间延迟为1ns,阻尼因子为1e10,初始相位为0。
5.2.3 EXP(指数函数)
EXP <(>v1 v2 <td1 <t1 <td2 <t2>>>> <)>
其中,
v1 初始的电压或者电流值(单位为V或A)
v2 电压或者电流的脉冲值(单位为V或A)
td1 上升延迟时间(单位为秒,缺省为0.0)
td2 下降延迟时间(单位为秒,缺省为td1+TSTEP)
t1 上升时间常数(单位为秒,缺省为TSTEP)
t2 下降时间常数(单位为秒,缺省为TSTEP)
输出函数为:
例子:
VIN 3 0 EXP (-4 -1 2NS 30NS 60NS 40NS)
5.2.4 PWL(分段线性函数)
PWL <(>t1 v1 <t2 v2 t3 v3…> <R <=repeat>> <TD=delay> <)>
或者
PL <(>v1 t1 <v2 t2 v3 t3…> <R <=repeat>> <TD=delay> <)>
其中,
v1… 定义电压或者电流值
t1… 定义时间段的值
R 设置函数循环重复
repeat 定义波形重复的起始点
TD 是定义分段线性波形在开始前有一段延迟的关键词
delay 定义分段线性波形在开始前有一段延迟的延迟量
每一对(t1, v1)定义时刻t1时的电压或电流值为v1。每两个时间点之间的电压或电流值线性变化。用参数"R"来设置函数被循环调用,可以在"R"后面加一参数用来指定函数从什么地方开始循环,但必须设置在函数的间断点处,例如,如果t1 = 1,t2 = 2,t3 = 3,t4 =4,则"repeat" 可以等于1,2,或者3。
此外,可以采用DADA语句来定义PWL:
PWL (TIME, PV)
.DATA datanam
TIME PV
t1 v1
t2 v2
t3 v3
t4 v4
……
.ENDDATA
.TRAN DATA=datanam
其中,
TIME 提供给DADA语句的时间值参数
PV 提供给DADA语句的幅值参数。p
这种输入方式可以将一个模拟的结果作为另一个模拟的输入。最后一定要加瞬态分析语句。
5.2.5 SFFM(单频调频函数)
SFFM <(> vo va <fc <mdi <fs>>> <)>
其中,
vo 输出电压或者电流的直流偏移量(V或A)
va 输出电压或者电流的幅度(V或A)
fc 载波频率(单位Hz,缺省为1/TSTOP)
mdi 调制系数(缺省为0)
fs 信号频率(单位Hz,缺省为1/TSTOP)
输出函数为:
5.2.6 AM(单频调幅函数)
AM (sa oc fm fc td)
其中,
sa 信号幅度(缺省为0)
fc 载波频率(缺省为0)
fm 调制频率(缺省为1/TSTOP)
oc 偏移量(缺省为0)
td 一开始的延迟时间(缺省为0)
输出函数为:
- 电压和电流控制源
受控源的定义相当繁琐,而且在我们工作中不大可能遇到,故略去。
(原文地址:http://hi.baidu.com/yong_delta/item/728be3427212a83810ee1e53)