TA的每日心情 | 开心 2019-12-3 15:20 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。
) K& f+ O" G% a 最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。
3 g ?; S& e: X' P, n一、HSPICE基础知识( N+ a% R ^) O6 j, i$ b
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等进行仿真,以便得到精确的结果。
5 A G# T. T! N# P2 {. T9 B本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。& J" h6 a2 q, F; f
Hspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。9 Q* I5 T8 J! T
表1 Hspice所使用的单位4 l! o) ?0 u$ g" V
独立电压和电流源包括:# ~4 }( ]8 O/ l" z6 k2 D5 Q- h
1. 直流源(DC):
2 U5 Z9 o1 A4 | f: F电压源Vxxx n+ n- dcval: G( i+ J W5 x; L7 N
电流源 Ixxx n+ n- dcval- k! c0 G1 {3 r2 m( {" [: O( i! J
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase$ b4 P' }% p% G0 F, J$ \0 p
3. 瞬态源(随时间变化):
+ m& Q. t' E( {6 k3 q8 T+ H( P脉冲源:pulse v1 v2 td tr tf pw per, ~7 Z0 ]6 |- ~- q) k; v
线性源:pwl t1 v1 <t2 v2 t3 v3…>8 b0 b! G! `' G7 U$ G
正弦源:sin vo va freq td damping phasedelay- Z* {, |8 T- ]" V' t% O$ Q
4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)
3 p# p" ]9 E) K: ?3 y5 g5 F二、输入网表文件
' S6 x; V/ t- e9 e: y0 QTITLE% H) ^2 p. a/ j9 N/ W" g8 ^- ^
.INCLUDE
1 X% d! y( a" O1 T( i% E5 j.LIB MACRO
0 L( V' s- E( P( ^元件描述- H7 c3 o; j: t5 K0 Q9 q
信号源描述
7 ]+ \! o0 n8 Z$ P+ q分析命令* G# t1 ^* R& I5 q/ h
测量命令8 e( d" w$ Q& y& c2 K! G
.ALTER
3 y6 h* x( R4 {+ N' `.END7 l& M$ R# _8 Z& L$ d# C
图1 输入网表(Netlist)文件标准格式
4 ~# ~: x, n2 X8 p" _二、有源器件和分析类型
( z! p' A$ t8 W! D6 X有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。5 X$ ^9 d; a3 l( @% S0 V: ^- K; ^
分析的类型包括:直流、交流和瞬态分析。% l) p: o4 O. w2 m! ?2 w# ~2 C) @* a
1.直流分析:( M: P1 r& M2 W5 ~# } E
对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。' c. C$ V/ c. [6 w; P
.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
7 t2 O) o, L$ Y6 q5 O8 X直流分析包含以下五种语句:
% b" x. R1 D- v" Y% Y# e.DC:直流扫描分析;, ?. W& W2 M' i1 K
.OP:直流操作点分析;
9 U% Q3 S8 w1 D( w# [.PZ:Pole/Zero分析;7 B. H$ ?1 k& a% h v, s
.SENS:直流小信号敏感度分析;
8 V) d$ k/ D# n5 c3 }4 l* ~: h" A* l+ L.TF:直流小信号传输函数分析。
# z. ?1 |: v& N( z! Z$ H2.交流分析:
. f `2 X! ~# V/ x% z+ Z4 K交流分析是指输出变量作为频率的函数。
/ z- _& [- T& O8 a.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
; |0 @: N, G" h. K! E+ [& ]- A交流分析包括以下四种语句:0 D, I* t8 Z2 A1 |% g0 B
.NOISE:噪声分析;
" S. D7 O- n. o. j# M9 `.DISTO:失真分析;
: U9 e4 _6 ^" _4 c.NET:网络分析; H+ z$ D S, W8 B" ?' C: T9 h
.SAMPLE:采样噪声分析。
- |0 J2 k3 G' D6 L( @; W3.瞬态分析:
4 c' V& D7 N. J4 A瞬态分析是指计算的电路结果作为时间的函数。
& Y' T" J& u9 `.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..
# ~& k6 @) _5 h" _$ V1 X5 ~三、输出格式和子电路 X5 T; e* ^$ X6 I7 X! c
(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。
3 e/ Y* K+ c3 K- o.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32
! ~ K U) p( |1 Q.PROBE ov1 ov2… ov32
; g; x7 X# K: I# J5 ]3 Z5 c3 D5 \0 y.PRINT antype ov1 ov2… ov327 V8 J& q' U# F7 q' X% a
有五种输出变量形式:
4 I [7 y, ^: p9 p: q$ z1. 直流和瞬态分析:7 G( C7 P+ u* ]& `/ ^+ F6 L( I
用于显示单个节点电压,支路电流和器件功耗。; P; v$ z' Z9 @$ t4 `0 [
.print V(node) 或 .plot I(node),也可用.graph、.probe。
4 F+ U6 p3 q: g/ M, ZV(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。8 _1 g1 z0 V& S3 L! u. U
2. 交流分析: h6 x) `: J; r* E4 V5 ?
用于显示节点电压和支路电流的实部、虚部和相位。
' Y( h% m" u2 i) N; W) evi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。" D3 e' i$ a& |, A$ m; l* x
3. 器件模版:
7 P( P) a9 W0 q; _: i/ x* k用于显示制定的器件节点的电压、支路电流和器件参数。6 o+ e. W7 l4 J* ]6 w3 g+ A$ u* Z
lv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。( R) K5 s& R2 K% }1 }
4. MEASURE语句:8 Z# m+ J4 Y* S4 w
用于显示用户自定义的变量。
0 f2 u8 q3 V; w$ H7 o- O可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。
, d3 t; j$ {& E" Y' [5. 参数语句:
" C3 b6 U) m! p( m用于显示用户自定义的节点电压等表达式。
3 a' o; ~) d, H语法格式:.print tran out_var_name=PAR(‘expression’)
]* g# w2 ^" v! D* |2 u4 D- l(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
& n9 P0 a& X, j) w2 ^ [- f5 t(3)子电路:
/ i- O M- W7 {1. 采用.GLOBAL设置全局节点:
" j6 s' D. Q" O. T.GLOBAL node1 node2 node3…9 N) q8 c& \! u3 ?5 `! x0 a
2. 子电路语句.SUBCKT和.MACRO:6 e* i4 Y$ g( c6 C8 \* N3 \' z
.SUBCKT subnam n1 n2 n3… parnam=val…1 l( L3 @+ [* s7 C" s* ^) _ R
.MACRO subnam n1 n2 n3… parnam=val…8 V( y/ N' U/ D
子电路的调用:, }' L0 s4 K4 k1 j! Z
Xyyy n1 n2 n3… sunnam parnam=val… M=val
& S- z1 v5 R0 h' h, b四、控制语句和option语句
! t w1 X, G8 N3 ^1.OPTION语句:0 b: l( M0 f' O5 |# M
.options语句格式:.options opt1 opt2 opt3… opt=x& U* C( d4 m3 w: d3 k3 H7 c6 Q5 L
一般在每个仿真文件中设置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定义的情况。' ]* J& t( c/ p6 ^4 C
2.MODEL OPTION语句:
$ e0 i1 e# Y0 R: VSCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。7 ~8 U5 {/ X4 V' w4 o0 c
五、仿真控制和收敛
0 J7 J+ X$ T5 }8 YHspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。- p) `" e* I4 w0 B t3 q5 }, Z
(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:5 r' t5 m' f3 U |) H' D
1.电路的拓扑结构:+ Q1 p- ~' q& p7 S4 k4 S
电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。 H( ?5 l- V) H
解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。 g+ s X; S V! T- ~1 ~
2.仿真模型:
3 q }' g; U2 M; w* t* _/ \由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。
* c b" ^( R$ C" {9 H解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。, t: M$ _: O: U/ \; G8 N3 Q
3.仿真器的options设置:! R" h6 s1 D( a* q
仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。: E; `, B0 C7 _) `. K5 H
解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。$ z3 A( i& K/ N! k) z( P0 Y! q
(2) 针对仿真分析中可能出现的不收敛情况进行分析:
: C v1 u1 e; B" c3 r. p G# B4 a- z1.直流工作点分析:, b6 W# p8 ^$ S6 h) M1 w$ K R
每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。
: e/ C/ W" r8 X/ Q% G$ w; E对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使
) \, @$ q* {9 V9 n" w用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。* c D; ]3 B; s+ [
2.直流扫描分析:
) N( E$ }: P3 C在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。! G5 \, o5 V7 a1 N: w! i
解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。8 A! O4 H! q* H; y; ?1 q5 H; s1 M
3.AC频率分析:+ e+ }0 p9 C$ ^
由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。
0 ]: C6 N6 c7 {5 Z# X H, q4.瞬态分析:1 M& r( c# o" g- X" Y
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。
3 D! m; T3 m! G6 [: D, T瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
, Y/ D& q# ~4 z5 G对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。
( J7 a! C$ ], o. w六、输入语句$ B) T, J2 v" |
对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。, P7 O7 t/ P8 Y% _
对于.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>。# }, L0 `+ S2 j0 J
对于.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中增加分析语句。
) Q4 y! C/ o5 o% Y% @七、统计分析仿真
4 u+ W1 a# [, d+ [5 W8 t. ]主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:( X/ k% s: ]2 I( t# `
.param tox=agauss(200,10,1)
2 c" e( G, c# R6 x7 w.tran 20p 1n sweep MONTE=204 K0 d% E# O* K
.model … tox=tox …0 w3 i5 u# z- @4 [7 Y# @8 k6 b
其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),- X' c0 z- m2 d
.param ver=agauss(nom_val,abs_variation,sigma,mult),
- [* S3 N8 k4 u" W, `对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),
9 s1 K* v+ Q# W( w6 f# ^+ w* X.param ver=aunif(nom_val,abs_variation,mult),
3 o4 @; v) ?! V5 G* ?7 D) t4 F对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。: N# f1 P" X0 ^7 |0 X& F1 d
7 H: ~4 f6 H( W. K9 {) J" R i) b2 q$ h+ F" g
|
|