TA的每日心情 | 开心 2019-12-3 15:20 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。
8 ~6 y. @) S0 v N0 q- _3 N 最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。% z" e/ V) K8 v3 M# q' z! w5 N
一、HSPICE基础知识+ r3 z4 y/ @2 Z8 K# H4 @4 ^7 L
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等进行仿真,以便得到精确的结果。
) V9 n, a( P) }% v) A) r2 J本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。( N2 }5 N' o* x9 u
Hspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。 F& g z2 l1 W3 Y
表1 Hspice所使用的单位/ ~& u1 p$ M' z
独立电压和电流源包括: \# F% j1 X; d! ]- d
1. 直流源(DC):
+ e7 L9 W7 T9 l# ]5 |- W电压源Vxxx n+ n- dcval
9 v4 ~/ N, J: ~4 ~电流源 Ixxx n+ n- dcval
/ d; F. T& f8 o, i2 m. A( G2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase
$ c' \+ F7 G D3 ^9 ]8 u3. 瞬态源(随时间变化):( d c2 {. S: M1 m$ v9 }
脉冲源:pulse v1 v2 td tr tf pw per w3 j1 C+ _& C# n. P
线性源:pwl t1 v1 <t2 v2 t3 v3…>
# X2 n8 u% E5 c/ `- b! K4 {" g正弦源:sin vo va freq td damping phasedelay
4 q5 ~ q, z9 }; k4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)6 }/ h4 N) {! s
二、输入网表文件. L9 P+ U" |% X. N" ^, L% M
TITLE& ]4 t) C7 y! L0 c* p, C7 P
.INCLUDE
, k; I5 M3 M9 i: R. l6 r4 I' X.LIB MACRO
. w3 u2 G0 X; a$ @' N/ m# g元件描述
Z; ^- i! L6 S- w, B" x信号源描述7 g; c" Y! [! ]. H& n# ]
分析命令+ f2 h4 r0 S# Q1 K
测量命令& Y' q; y3 g* h3 Z( w- p0 m
.ALTER! A8 @, Q0 @5 X6 ^
.END
/ e% Y z. d2 p7 [& M图1 输入网表(Netlist)文件标准格式2 @2 c* j) F, h# A6 l
二、有源器件和分析类型
X, y% l" t4 J8 H' V2 Q( v+ n有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。2 u/ }: Z# H) V) f {) y
分析的类型包括:直流、交流和瞬态分析。0 d8 R! D! n: ~4 }8 H! H" ?3 U9 q
1.直流分析:
5 |: f: X. [ V3 @9 S4 K对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。) n; I7 O% w! r! O9 `1 g
.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2+ k: L/ ]# {7 \
直流分析包含以下五种语句:6 I% t" x5 e! I1 I" ~9 R
.DC:直流扫描分析;
8 F- a9 E9 Z' T: Y.OP:直流操作点分析;
! T( ~7 z4 ^( W2 H! ]: D0 f5 D.PZ:Pole/Zero分析; H, u0 P. I) Y
.SENS:直流小信号敏感度分析;
& X4 M$ K3 ?3 }.TF:直流小信号传输函数分析。3 c+ {& B! p4 y6 |
2.交流分析:: p0 `) J. P. c
交流分析是指输出变量作为频率的函数。8 i: d# U# P% ], X5 P+ R
.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
4 v; ~2 Q1 H+ r+ @0 N A交流分析包括以下四种语句:
; M% m+ N6 ^. y' X' P.NOISE:噪声分析;5 S% z4 r- }+ a4 x5 q/ B8 m
.DISTO:失真分析;! S4 K+ [4 P! m( D6 k
.NET:网络分析;: j/ ?. _/ I0 K- O$ |
.SAMPLE:采样噪声分析。4 a3 O @* N" \5 a" G" E& J2 F
3.瞬态分析:. g P) B2 r2 x; I% R4 q& ~+ | L b
瞬态分析是指计算的电路结果作为时间的函数。/ L. Y# j# q$ u' i/ Z R
.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..
7 ^! Z0 R- X; C9 @1 e三、输出格式和子电路' a5 X8 S0 H8 Q) g* P/ T
(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。$ B) t! Y$ m8 e" z- W; I- ]+ t% F
.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32
5 c( @9 [9 S( H! Y+ \) s.PROBE ov1 ov2… ov32
' n7 [1 r/ s+ C) b" H" s0 m$ l1 n.PRINT antype ov1 ov2… ov32" l0 g* Y* |2 v9 \. D, e) Z& V+ t
有五种输出变量形式:$ s$ I! t8 n. [' Q3 c' T" @
1. 直流和瞬态分析:
7 u; @+ M( i* v% O s" n7 E用于显示单个节点电压,支路电流和器件功耗。
4 C! a* G- f, J8 d2 \+ b.print V(node) 或 .plot I(node),也可用.graph、.probe。
( y- a! k- r" p4 r2 N+ nV(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。5 M9 r3 C* }9 Z5 U( [8 g
2. 交流分析:+ {& a, v( m5 Q+ t% w
用于显示节点电压和支路电流的实部、虚部和相位。
( C& |; z# H8 _5 D+ wvi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。
6 C4 W# _- f+ M* F3. 器件模版:- `: \& ]9 m0 u
用于显示制定的器件节点的电压、支路电流和器件参数。+ \: z# O; ]( d& J, ^$ l
lv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。) d% m" i6 ~+ s& e
4. MEASURE语句:
: S4 m# d4 D% u+ G6 w. l用于显示用户自定义的变量。+ F' m" l4 Y& I+ U; ~
可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。) j, e! Z e% Q0 @- \
5. 参数语句:/ ]6 v/ {7 r3 M& x
用于显示用户自定义的节点电压等表达式。
; G% h8 _2 n% t语法格式:.print tran out_var_name=PAR(‘expression’)! h$ j$ W) ]0 l: X+ G5 G3 u% C
(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
/ u: d- U4 E" c& x(3)子电路:
" P. Q" h1 a4 H$ x# n$ p" J$ P1 u- k3 j1. 采用.GLOBAL设置全局节点:
+ Y: h X1 ~. I% S.GLOBAL node1 node2 node3…+ G4 Q# {( m+ T3 U) N7 M
2. 子电路语句.SUBCKT和.MACRO:7 Y. `4 S# v0 b8 |, }
.SUBCKT subnam n1 n2 n3… parnam=val…
7 g5 K& }6 \! S$ R ].MACRO subnam n1 n2 n3… parnam=val…
- u1 H+ N, b0 @, v& ~5 `, F/ e7 f- K子电路的调用:) h& O5 H7 Y& q m7 x( h+ I
Xyyy n1 n2 n3… sunnam parnam=val… M=val) _0 {9 J2 O6 p0 L* S4 _, @7 `5 G
四、控制语句和option语句
2 ~4 ?6 d# ]6 y; F, x ~- P" D1.OPTION语句:/ |( R6 y4 ^9 l1 ~- Y) t' d4 [
.options语句格式:.options opt1 opt2 opt3… opt=x# x3 \& l' B& z0 V: l. I
一般在每个仿真文件中设置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定义的情况。
: M- B/ Q" c5 Q2 W' i( O8 v% w2.MODEL OPTION语句:
8 q! `* P. s4 L: a# d8 gSCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。, `# U+ T$ H, ~ t; f
五、仿真控制和收敛9 o! s2 [2 s: J9 w# I, f
Hspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。
& g( C; \* _5 D* h* G! t" O4 I(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:# T" _6 L) k: N2 F$ o) h# {; ^
1.电路的拓扑结构:
5 b+ I6 K( L! k. P7 p% o电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。3 s8 d7 x4 ~; d5 e
解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
, w9 C$ A7 ] \( b2 V |! g2.仿真模型:/ [% G$ G! u8 s' |/ e& G7 h) U) c
由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。5 B, q4 K" U0 }! n5 A( W
解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。* C* k2 ~( n+ ~# `1 M5 k* Z; O
3.仿真器的options设置:
- b, c4 ~: p. {" [; W仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。- y/ _! D( Q9 S
解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。2 x9 T" O& H7 z
(2) 针对仿真分析中可能出现的不收敛情况进行分析:
* V; @4 ~7 O8 I( f7 U8 v, B1.直流工作点分析:) [ Y8 Z; B" K) t
每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。" w9 c) j' ]3 }4 L
对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使; ^+ A0 L7 F0 \; V9 {8 S, `$ B5 y# O
用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
3 V; d. O; b0 Z' @7 K2.直流扫描分析:
4 `" C) _2 n8 _# ?" ~+ I* l在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。
4 b7 @1 j% }" r( Y# E9 G( c解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。
( ~- z, _, ~+ r; E7 M3.AC频率分析:
( }8 {" F' \$ l- a8 k由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。
; L. }! P! \+ ]% ^4.瞬态分析:" R2 R o2 H* d( g1 ~5 C
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。
$ v: @) q9 Q: J9 a/ C* h, b瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
% e6 F1 L. l1 P9 U; s! c对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。
, j- o2 V3 f7 n3 l- Q3 B! K9 K六、输入语句
! ]4 u9 J+ m8 F# C; L) D对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。* t* j- ]6 O" I
对于.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>。/ v( g! `3 i# ^- L- ]
对于.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中增加分析语句。
9 E4 V# K. q, M七、统计分析仿真
1 J6 R7 ]; I& {0 t主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:1 Q; c h' G9 a) u
.param tox=agauss(200,10,1)6 m8 S. \* C4 V: f
.tran 20p 1n sweep MONTE=203 X6 B! Y6 s4 v# c! t
.model … tox=tox …4 Z! E( e; d# X
其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),
7 d( s! z- C4 e; v.param ver=agauss(nom_val,abs_variation,sigma,mult),
) e% Z0 z& K8 Z' W9 ^8 B& S( r6 _对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),2 G( c" W6 J6 P7 w$ j
.param ver=aunif(nom_val,abs_variation,mult),
% I! d" {" X" ~: G: j- ^对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。
+ g, G4 L: r+ G0 d3 N
' l) h# z5 C$ E0 \2 l; ]7 ~0 @! t+ S9 N ^; f4 m
|
|