TA的每日心情 | 开心 2019-12-3 15:20 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。
- X+ Q! ]7 E$ {; w 最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。 O/ K B0 c# c7 j" R- a
一、HSPICE基础知识
$ A' M2 ]& R A9 S6 R' MAvant! 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等进行仿真,以便得到精确的结果。5 p5 }) b) g, ?3 Z0 S4 T
本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。
# |1 n7 _% P5 g) K8 A/ i7 kHspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。
3 F; y# r* B5 L- C3 b6 `2 `) T表1 Hspice所使用的单位
P# L6 _4 ^& L6 X独立电压和电流源包括:
+ k1 C" ?# T0 |# I8 l+ E3 L R" |1. 直流源(DC):
q+ I# @* z. v* w9 v5 R电压源Vxxx n+ n- dcval
5 ^. o* p ^4 ]7 @% w3 a( ]# E0 O电流源 Ixxx n+ n- dcval/ Z$ P- i2 @" n: m; w# r
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase# X, I8 g9 l$ U
3. 瞬态源(随时间变化):0 Y. y/ C) n' r/ @9 h+ [' S
脉冲源:pulse v1 v2 td tr tf pw per
1 H8 B4 H, U8 H% ~# R$ t线性源:pwl t1 v1 <t2 v2 t3 v3…>& `7 {" E; Y7 j
正弦源:sin vo va freq td damping phasedelay
7 ]5 J/ A) d4 P) Z+ U4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)
1 {+ R; x$ i5 U二、输入网表文件
9 r3 K/ y6 \- y2 WTITLE
+ M9 p& B* u6 Z* R+ M+ B- Q.INCLUDE8 g. o3 R! c8 [
.LIB MACRO, q: Q) c& i0 Q5 `+ [
元件描述) g l6 z! S( c2 _5 e+ Q
信号源描述
$ [2 i$ j. q: p& I分析命令
% \* m! C9 b6 u: K测量命令0 U% w/ i: ?' @, w2 N
.ALTER
8 K7 ~/ I( H+ z; ?( q" @.END* h v& i6 _( D S8 K) j
图1 输入网表(Netlist)文件标准格式2 V& Q$ a( F6 G& o' C
二、有源器件和分析类型
$ @0 x9 `' @, l% v有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。( P6 f) r4 `, u$ ?2 s3 ^
分析的类型包括:直流、交流和瞬态分析。) ]6 ~6 y8 g# \$ ~1 n; R
1.直流分析:2 y4 M0 e7 W+ j, @) J" M) J
对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。2 Y# ?+ G- a6 w5 ?/ o
.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
0 G+ b! N! v( V2 {直流分析包含以下五种语句:
1 ^8 a! w2 |3 B4 O' W.DC:直流扫描分析;
! R% Y9 c+ p" y/ y `5 ~2 e) P.OP:直流操作点分析;
2 c8 r) b A) d" b! Y.PZ:Pole/Zero分析;
- Q: W" N! m0 m" y; Q.SENS:直流小信号敏感度分析;; Y! A2 ?8 m/ z' d5 w! p
.TF:直流小信号传输函数分析。
: |; x8 ~4 c+ E2.交流分析:
& |4 I) \# e. x7 ]% }交流分析是指输出变量作为频率的函数。
4 {1 `' { u/ c) t/ C2 E. G! n( B.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
' h7 p4 V8 D% s6 M$ v, i交流分析包括以下四种语句:
$ U& { T x' Q G" H.NOISE:噪声分析;' @; t8 s4 h6 C
.DISTO:失真分析;
/ s" t6 I; U2 q8 h% \.NET:网络分析;" E' B4 s$ {$ i
.SAMPLE:采样噪声分析。& G# c$ x0 j0 w1 l
3.瞬态分析:6 @+ L. J- X* |0 ?" x
瞬态分析是指计算的电路结果作为时间的函数。! t9 ~5 f1 R F/ K# T5 c" p
.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..
4 L3 O9 V$ f3 ]3 V8 i& m三、输出格式和子电路
& ^3 b# n9 W [0 E' s, }' Z1 I(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。
9 K1 Q# W0 R! D- h6 C! [8 J.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi327 J/ X5 k& A3 r3 Q' X2 l
.PROBE ov1 ov2… ov32
1 c1 F* J) A% t0 P/ r.PRINT antype ov1 ov2… ov327 ]. ]# W6 ~- C* X: c, M0 r
有五种输出变量形式:- _0 p9 ^" X# H+ G6 Y' S
1. 直流和瞬态分析: I7 h: f2 v2 n7 v4 S
用于显示单个节点电压,支路电流和器件功耗。
: ]* J! s9 D) H" e, m& Q, O5 D; {0 d6 m.print V(node) 或 .plot I(node),也可用.graph、.probe。" B/ B% B$ [' c( t' t5 t9 p& I, S
V(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。
6 o9 S% G' t4 d! y7 |4 O8 m2. 交流分析: {1 ?. s8 m" b' o
用于显示节点电压和支路电流的实部、虚部和相位。& h4 w1 I3 k% [9 @3 N, y
vi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。+ d/ v+ o& y# {- X) S9 U
3. 器件模版:
' _( C3 M8 L: I, |- E用于显示制定的器件节点的电压、支路电流和器件参数。+ d) I" @( J1 C X- Z( [7 c6 u
lv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。
' g0 B7 X8 Y% m& W4. MEASURE语句:' L3 \: c1 v4 c5 o% p, a/ V
用于显示用户自定义的变量。
: S* f* y% {% Z9 \" ]; o可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。
) B4 t+ H+ ` w9 R" [7 y5. 参数语句:
! Y9 i ~, T7 P2 C用于显示用户自定义的节点电压等表达式。
9 {* `' j1 O. e0 Y5 I$ y语法格式:.print tran out_var_name=PAR(‘expression’)
2 ]; k k# f: s' f8 D& E) b(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
) x3 Z+ R2 q* W" S(3)子电路:
$ z. x. k9 |: i* g3 |1. 采用.GLOBAL设置全局节点:& C/ J. `3 A# k
.GLOBAL node1 node2 node3…
" \4 F5 w0 d! m( A3 D2. 子电路语句.SUBCKT和.MACRO:) h9 x& o+ c$ a' V E7 v
.SUBCKT subnam n1 n2 n3… parnam=val…8 t/ Y4 M. s5 i7 W' [" A
.MACRO subnam n1 n2 n3… parnam=val…" {& ^' H. ?$ a+ P* x" H
子电路的调用:6 o6 Z/ A0 A" ], {: e5 {* @
Xyyy n1 n2 n3… sunnam parnam=val… M=val W2 s9 K: l2 X0 W7 G6 X
四、控制语句和option语句: y# P* e* S/ M. B% _" S$ A
1.OPTION语句:* `9 `& y l5 ?+ _
.options语句格式:.options opt1 opt2 opt3… opt=x Y' Q( h- y" Y3 o, T, |8 d
一般在每个仿真文件中设置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定义的情况。! B8 ^& H- p6 W- b" I
2.MODEL OPTION语句:
. M+ N! U5 ? A2 T) K7 B2 E- BSCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。% W( T# U7 c& S, S9 N) _- p, @& Z
五、仿真控制和收敛; c0 A$ R% S7 Y! Z- ^
Hspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。
/ i" N7 I; j3 e4 g(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:
* ] v b1 j2 K: p2 _; V7 X8 I1.电路的拓扑结构:
1 I# w" K! k: `# P$ V电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。' t7 z8 f7 A" W7 N% Q' y0 {
解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。( U5 R& @3 S' Y, H4 I, ^
2.仿真模型:
& b& ~: U, [* [5 a) j由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。4 ]2 z k) x, }+ D7 p) W% A7 T
解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。
. p7 |$ @0 Z& A, E8 |7 _9 i3.仿真器的options设置:
' A# c0 a" O( O |, f" g2 I, `仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。
8 l! h' \+ J$ f& P0 x' ^2 B- J% n解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。2 {. C, Y8 b" X' R) l
(2) 针对仿真分析中可能出现的不收敛情况进行分析:
) ^/ b" o L! y1.直流工作点分析:, t* }9 h: A5 O; N2 v2 L/ _
每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。3 ?2 D. ^' `# a
对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使5 z) D: ^8 ~' V) C4 }( E' T
用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
$ K0 n9 V O I. d2.直流扫描分析:9 E& \. r c& y4 C& }
在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。
1 B0 u% u- N+ P+ _) Z* q解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。" g) e7 V, [9 a; [5 S% J7 V6 V h4 `; s
3.AC频率分析:
" L% r* |3 `& c' W由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。9 l6 J" P1 L* k9 R c/ Q1 @
4.瞬态分析:. u( f- S1 }$ `' \6 K" j0 H2 b
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。
, _, d5 G' c8 \瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
, }: ~( J& Z) g) g9 U* z: S6 H% \对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。
1 z3 h; Q3 M' {6 t% P7 F六、输入语句# L1 ]$ I! @ R$ z! F
对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。, d: [; J) S! N* r) T6 f6 h9 L
对于.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>。
' W" S2 e0 u$ G, _6 x对于.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中增加分析语句。
0 t. Q5 K! L% m8 z七、统计分析仿真
# V% d" F# P) B; H主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:' _$ R2 N, k/ ?& r k& T
.param tox=agauss(200,10,1)
( T8 w2 |, X8 D8 n: ]" J5 p# i.tran 20p 1n sweep MONTE=208 o; I- o R0 {8 [$ \
.model … tox=tox …
2 D. B/ `$ r5 X9 a: T' P其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),; V6 k7 @0 g* R+ `8 t
.param ver=agauss(nom_val,abs_variation,sigma,mult),& w1 `* E o$ o, e
对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),1 f. G# Y# [- k- P
.param ver=aunif(nom_val,abs_variation,mult),1 f" T9 M' P+ t3 X
对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。) Y9 Q% A" M" h. V9 m
1 V1 F) @3 k# k
% e$ f# C) p3 A/ Z
|
|