TA的每日心情 | 开心 2019-12-3 15:20 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。 ' T! Y8 ^4 ~5 R1 P8 o8 `5 c8 U! D
最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。
2 Z/ O7 g8 C4 M一、HSPICE基础知识& X- u( d" p5 f5 Z6 E
Avant! Start-Hspice(现在属于Synopsys公司)是IC设计中最常使用的电路仿真工具,是目前业界使用最为广泛的IC设计工具,甚至可以说是事实上的标准。目前,一般书籍都采用Level 2的MOS Model进行计算和估算,与Foundry经常提供的Level 49和Mos 9、EKV等Library不同,而以上Model要比Level 2的Model复杂的多,因此Designer除利用Level 2的Model进行电路的估算以外,还一定要使用电路仿真软件Hspice、Spectre等进行仿真,以便得到精确的结果。
/ u4 b+ O7 J; J# Y5 {" b& p& B, A: [本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。
; u* v# P# f+ xHspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。
# C3 M5 \9 ?/ i; W" P! V+ f0 u表1 Hspice所使用的单位
+ @* v' K) d/ x9 d4 H" h; f独立电压和电流源包括:
% C. N3 D6 X6 \8 D9 [7 C7 y! _1. 直流源(DC):; [9 g( v3 F4 o
电压源Vxxx n+ n- dcval0 k4 K" P$ h7 c8 \
电流源 Ixxx n+ n- dcval% J8 Q2 N7 Q0 a1 s( Q' U
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase
/ J6 U4 c: t X' _/ m- `. ~6 x3. 瞬态源(随时间变化):3 W" ]0 {- C& h: z2 N4 O3 X9 L- E
脉冲源:pulse v1 v2 td tr tf pw per
2 U: w0 g3 @- C: W: s- o8 K线性源:pwl t1 v1 <t2 v2 t3 v3…>! {0 Y1 i+ i0 L# ?
正弦源:sin vo va freq td damping phasedelay/ a2 O6 ?! C. z# O
4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)
9 k/ B9 O. U/ |二、输入网表文件
1 a/ D! ]) Q0 n4 O) u/ rTITLE9 {4 _% G; v: L4 [
.INCLUDE
% |- O* z; a1 s- r1 }! p( A.LIB MACRO
' j6 ?/ v- O6 b7 n5 U元件描述% F+ c9 \ l4 C8 X" s8 T
信号源描述
f/ @2 ?0 G9 s9 ]6 _分析命令# n4 w. g8 K5 K* v) ~
测量命令9 R8 i3 J( e( P5 @# ~3 I
.ALTER- ~8 }( J7 |6 o3 A4 N7 J
.END
. e* b9 ~6 j% i8 O3 D: _' X图1 输入网表(Netlist)文件标准格式7 h0 r: Z, d! j7 w
二、有源器件和分析类型$ _* ~ d4 v! D5 a7 H7 `
有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。+ t! h6 T a4 X1 ?& v% I4 C+ v/ s8 i
分析的类型包括:直流、交流和瞬态分析。% h2 C% A/ @0 Y/ L. e+ J
1.直流分析:4 w, B1 T0 ?" v- r7 l
对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。
D+ X. D- L7 V4 ~. s1 J4 X: P7 Q* r- u.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop22 i7 _9 q- b1 T1 g/ ^. h3 g; V
直流分析包含以下五种语句:
# e( G i# D; g/ b6 E) v6 n$ O.DC:直流扫描分析; B$ D5 H( H3 {+ a- U1 H
.OP:直流操作点分析;$ \3 l* _. Q3 J7 g0 C4 y# n) r( V
.PZ:Pole/Zero分析;
5 |) p# Z" z- \# U$ ~( X.SENS:直流小信号敏感度分析;3 w, x( y" u4 `; F
.TF:直流小信号传输函数分析。2 J& W. y( H* Z& z( E
2.交流分析:2 J" ?) k2 z% A+ v' [
交流分析是指输出变量作为频率的函数。& @& Q1 O! Q5 M- K1 ^8 V) V% _/ X
.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop26 j0 A# \8 x [7 U
交流分析包括以下四种语句:
# M/ {8 R! V7 Y1 a9 W0 p& [.NOISE:噪声分析;% o( p3 w$ E4 r
.DISTO:失真分析;% ]% S9 q. J1 `( H2 G2 F: j
.NET:网络分析;& ?5 z5 n+ W7 _& q
.SAMPLE:采样噪声分析。$ o3 W ^2 m1 A$ {
3.瞬态分析:
% r5 c d2 s: g, ]( l& ^) f瞬态分析是指计算的电路结果作为时间的函数。3 e" S$ d) Q+ k0 t( M {5 B! b
.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..6 Y" h5 R. Q: v: q
三、输出格式和子电路
8 Q6 e! Q+ h ^0 A(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。
( Y3 D9 w9 K; K* |$ b.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32
- ]6 }, M9 \$ I, U9 n.PROBE ov1 ov2… ov32
W% K. Q" N* z4 m: P.PRINT antype ov1 ov2… ov328 e! t; v3 F4 ^
有五种输出变量形式:# \7 z) r$ P' h3 D
1. 直流和瞬态分析:4 N. A" N4 w- d! Y! H
用于显示单个节点电压,支路电流和器件功耗。$ `7 r4 N _; l" G- p/ `7 O C
.print V(node) 或 .plot I(node),也可用.graph、.probe。
) f' N- Z1 B' z% Q4 nV(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。
# Y4 j) M# k0 ?2 L; Z% u2. 交流分析:
t; E! p' H) _; V) k用于显示节点电压和支路电流的实部、虚部和相位。* P% ~1 L1 h; G! w
vi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。
3 a" F6 y' `* v2 t s2 `3. 器件模版:
3 ?0 `( L5 A. w y3 F9 S9 L用于显示制定的器件节点的电压、支路电流和器件参数。
5 A. L, z' V: i( S' x* A. b! Blv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。
* K& @$ u: Y0 k% B- I2 z+ ]4. MEASURE语句:& P+ S c, I3 x* P) L
用于显示用户自定义的变量。8 p2 T9 G: S% Y; E! C6 Y
可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。
9 W! J) F3 L$ T4 N5. 参数语句:
0 I0 _9 r$ f3 B! f! R用于显示用户自定义的节点电压等表达式。
# Y: `' Z- S: u; [0 n语法格式:.print tran out_var_name=PAR(‘expression’)
! _) L0 e2 h! _+ E(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
0 b' W$ H+ K9 n# w(3)子电路:
E: z) O# R8 p! ~. L- a. b1. 采用.GLOBAL设置全局节点:5 n2 u z+ o3 q5 q5 l5 [4 ~
.GLOBAL node1 node2 node3…
: f% g' g3 S# a4 l2. 子电路语句.SUBCKT和.MACRO:
! J2 q1 W8 R* U% k+ R+ G.SUBCKT subnam n1 n2 n3… parnam=val…
+ G& G% v9 T& r) @ }' j* m.MACRO subnam n1 n2 n3… parnam=val…5 h3 f& J* P6 w4 B
子电路的调用:' H9 _( X7 n V1 V2 D
Xyyy n1 n2 n3… sunnam parnam=val… M=val
- e" Z V0 ?$ I* t四、控制语句和option语句" ~, {- _! ?2 k, I" ]9 O! Y
1.OPTION语句:
' }, e" U9 L$ N" O; F: \.options语句格式:.options opt1 opt2 opt3… opt=x
+ z0 e! K) [2 f一般在每个仿真文件中设置options为.options acct list post,也可以设置为.options node opts,其中.option list表示将器件网表、节点连接方式等输入到列表文件,用于debug与电路拓扑结构有关的问题,.option node表示将输出节点连接表到列表文件,用于debug与由于电路拓扑结构引起的不收敛问题,.option acct表示在列表文件中输出运行时间统计和仿真效率,.option opts在列表文件中报告所有的.option设置,.option nomod表示不输出MODEL参数,以便减小列表文件的大小,.option brief=1表示不输出网表信息,直到设置.option brief=0,.protect/.unprotect用于屏蔽网表文件中要保护的信息,.option bypass=1不计算latent器件,.option autostop表示当所有.measure语句完成时,终止仿真,.option accurate=1表示设置为最精确的仿真算法和容差,tstep表示仿真步长值,delmax表示最大允许时间步长,其中delmax=tstep*max,.option dvdt=4用于数字CMOS电路仿真(默认设置),.option dcca=1在直流扫描时强行计算随电压变化的电容,.option captab对二极管、BJT管、MOS、JFET、无源电容器,打印出信号的节点电容值,.option dcstep=val将直流模型和器件转换为电导,主要应用于“No DC Path to Ground”或有直流通路,但不符合Hspice定义的情况。
+ `# ^& T% C" t: ^ s4 y1 n! X2.MODEL OPTION语句:
: @8 h5 w+ t7 t0 VSCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。
( ^& u. }( G- k. _2 I. H3 W五、仿真控制和收敛
5 t# M1 g$ D1 F3 j# Y. lHspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。/ s9 s% |8 X: d. s
(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:
7 ~7 w: \. i9 k% p( W$ V1.电路的拓扑结构:7 \! a0 F( _2 i
电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。, C5 O$ i0 g2 u# [6 g r0 | t4 U
解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。& E; g& u7 S% H$ Q
2.仿真模型:4 B1 _* K9 N. \/ F& e, o2 o' _
由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。
$ C; w* y( K. U% ?* X解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。4 M: T+ h" l, P) V9 _9 A1 n
3.仿真器的options设置:$ }9 T2 M% h" k& O; V- V! u( ]! d6 b
仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。2 J w4 w3 j8 m7 G u- w6 a6 P& ^
解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。9 p" `" M! g& d) B! s# {
(2) 针对仿真分析中可能出现的不收敛情况进行分析:
+ S: K4 ^1 A/ v# p& e r1.直流工作点分析:( ~) G7 C2 }, K, `* P& e5 i
每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。
( H6 E: F# J9 W/ Q- t! P3 ?对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使) i8 i0 Q" [: H
用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
+ S( v1 `& b/ E. y2.直流扫描分析:
8 q6 D( H8 p+ i7 G, m在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。 q) `) b* H% D3 H+ a* o
解决的方法是:对于电压或电流变化太快,通过增加ITL2来保证收敛,.option ITL2是在直流扫描分析中在每一步允许迭代的次数,通过增加迭代次数,可以在电压或电流变化很快的点收敛。对于模型的不收敛,主要是由于MOS管线性区和饱和区之间的不连续,Newton-Raphson算法再不连续点处进行迭点计算产生震荡,可以通过增减仿真步长值或改变仿真初始值来保证收敛,如:.dc vin 0v 5v 0.1v的直流分析不收敛,可以改为.dc vin 0v 5v 0.2v增大步长值,.dc vin 0.01v 5.01v 0.1v改变仿真的范围。
" T( O& G! l9 M, |7 l1 w3 [3.AC频率分析:
0 k9 A C& r4 X$ ]0 X( h由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。( z2 a0 R8 B0 P2 d
4.瞬态分析:7 k V4 y& A1 s( x( e
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。& ^7 g8 x. F/ Y% Q
瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
, p4 z7 c; y) a2 y/ e对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。
$ u6 k. o' V4 \$ Q0 w六、输入语句
% v& Z( s) f% ^3 j, j+ U) M% N对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。3 i7 ]: O9 u! n) v8 V4 f
对于.measure语句,可以采用的模式有rise,fall,delay,average,rms,min,peak-to-peak,Find-When,微分和积分等。对Find-When语句,.measure <dc|tran|ac> result find val when out_val=val <optimization options>,对微分和积分语句,.measure <dc|tran|ac> result <deriv|integ> val <options>。
' U+ ~& |. C# a/ d. r对于.ALTER语句,可以通过改变.ALTER来改变使用不同的库,其中.ALTER语句可以包含element语句、.data、.lib、.del lib、.include、.model、.nodeset、.ic、.op、.options、.param、.temp、.tf、.dc、.ac语句,不能包含.print、.plot、.graph或其他I/O语句,同时应该避免在.ALTER中增加分析语句。7 p7 u8 a6 f& I( d" l
七、统计分析仿真5 Y! L( B$ t/ F& P
主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:
$ \. ]+ t: |3 G( K. ~5 R# b7 g0 [.param tox=agauss(200,10,1)
3 M* C/ K! Q" ]3 A& c2 v1 E.tran 20p 1n sweep MONTE=20
0 {+ k/ T0 ~% G, h" ^6 ~* j.model … tox=tox …
; a# M' D T) J3 {, ^) I/ `其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),
M' `: |- {1 q; ^! [.param ver=agauss(nom_val,abs_variation,sigma,mult),, m+ ~ @' }& \. C j
对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),
+ W. v1 I. v% w D& o" D.param ver=aunif(nom_val,abs_variation,mult),
, ^- A1 H& _' h5 f. q! {1 W) r对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。
+ L$ o/ P6 g, [# ?5 o. E6 X% a% r& E- e% N
' @5 m* F9 _9 X# B* W& t3 @! ^2 @
|
|