TA的每日心情 | 开心 2019-12-3 15:20 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。 ! U8 u+ e9 z! W$ g+ K
最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。0 o5 j0 J# Q; m2 R
一、HSPICE基础知识
9 m( C( V& J3 b9 YAvant! 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等进行仿真,以便得到精确的结果。
" T* H9 Y" \4 f8 N) k, O" C# T3 h本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。- Q# }5 @3 Z+ X$ X2 r% v" N& Y
Hspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。
- f) D. Q. N$ e! D; M& [# p* z3 D表1 Hspice所使用的单位
1 ^6 y, q% j0 B( B独立电压和电流源包括:/ P7 X, Q. O. Z2 G' ~: p" E; S
1. 直流源(DC):
4 G j; O. P& f( w: N电压源Vxxx n+ n- dcval: }% _1 A) F8 m* C" `
电流源 Ixxx n+ n- dcval+ M$ A, p( L6 A! H
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase1 \. h6 {9 p6 v6 ~, [" {, |
3. 瞬态源(随时间变化):
% h7 R+ ~! g$ j! a/ K) U! ?$ \脉冲源:pulse v1 v2 td tr tf pw per
4 L! _4 Q( s! s6 p- S$ {7 o线性源:pwl t1 v1 <t2 v2 t3 v3…>
4 U+ F% q, _! f# r7 s( I- I正弦源:sin vo va freq td damping phasedelay
& a, i$ T) Z5 @! G2 I- }. _4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)! `3 `. o- L) \( F
二、输入网表文件
8 Q# g. Y$ x: d. _$ cTITLE
" |/ G! r% y8 a' g. R.INCLUDE
& y* ]5 M: ]3 f" E+ P/ ~.LIB MACRO* P- L" {* T; Q0 |! B
元件描述
; u; w0 i s4 c/ ]* F/ z信号源描述
5 g7 n! K* ?& g( s/ e/ E) S" M分析命令
7 L" E3 C+ I$ R测量命令" P& A" c+ O" \9 c
.ALTER
9 ~* J0 l* j! J: h) H7 ~! n; ~" H.END
3 E" X. a/ K. p% e( q, R z* J图1 输入网表(Netlist)文件标准格式
8 o& i( J9 K/ D, y二、有源器件和分析类型
9 O6 l4 [1 _% A" G8 {2 g, `. z有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。% b. O6 M* [9 _2 ?2 K6 Q" _5 f
分析的类型包括:直流、交流和瞬态分析。
, b+ z: [; ~; k6 E V1.直流分析:
, g" ]( P+ t+ C4 q% C: o2 T对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。3 A+ w* C: b2 X. \* b
.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2+ w0 C5 W* v, z( x$ E
直流分析包含以下五种语句:# J6 U- v5 B$ ?/ k5 h5 D
.DC:直流扫描分析;8 \2 i$ Y* s; Q) N1 [/ o2 ]) c
.OP:直流操作点分析;' T. N. S/ d# f( ^( ^+ }2 a
.PZ:Pole/Zero分析;5 e( R! l: _, ] m9 \
.SENS:直流小信号敏感度分析;& z. l# k+ V" K
.TF:直流小信号传输函数分析。" T% M+ I% I4 q8 m5 P" X* h
2.交流分析:# j/ L$ z+ n2 D% ^! E) \
交流分析是指输出变量作为频率的函数。
G9 t# x* t; u) e' z( w( ]5 [.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
0 e: p! v \4 j# r; W交流分析包括以下四种语句:9 s" b) A# P: Z& W. H) m
.NOISE:噪声分析;
! [; E( L6 H2 G* p. y.DISTO:失真分析;4 H' t! t5 S: O( B4 q( k
.NET:网络分析;( E+ E% H3 L( l7 k F0 A
.SAMPLE:采样噪声分析。/ |$ ]' B- N2 Y8 }) Y- o* I
3.瞬态分析:
( S/ A2 F9 L$ ]2 v( K! ]瞬态分析是指计算的电路结果作为时间的函数。) ?0 b4 m* ~9 z0 m8 D; P6 L
.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP.." N! z/ ]: O. p5 d0 a+ W
三、输出格式和子电路
- Z9 ^) z. \+ z(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。0 _3 {) m1 J3 ]0 C3 G' ^" o- T
.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32
" t5 c5 k/ t b: [.PROBE ov1 ov2… ov32) O; ?5 `5 h1 i3 `9 [/ o" r0 T
.PRINT antype ov1 ov2… ov32
`- E2 z6 {) g( \1 N b8 f) ?有五种输出变量形式:
$ R8 {. P* M4 R/ Q# |1. 直流和瞬态分析:- J/ _$ m* s& {& R# l0 T5 P0 N- w! {4 M
用于显示单个节点电压,支路电流和器件功耗。% ^8 n5 Z' A6 f! w' g4 r/ j5 ]
.print V(node) 或 .plot I(node),也可用.graph、.probe。
+ t# W5 Q5 b$ Q; C1 \V(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。
6 Z C5 O/ Y" |8 u0 ]# u2. 交流分析:1 E( T& ?* U' M' N3 C. K4 [
用于显示节点电压和支路电流的实部、虚部和相位。
' g0 J, D& p2 b- x: Kvi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。
7 N8 V& Z2 R# m, B, }- i2 k3. 器件模版:
% o9 q* {7 B7 I1 H用于显示制定的器件节点的电压、支路电流和器件参数。5 D% p" S W5 u! x0 s
lv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。, r. Z6 ~, Z% h6 a$ i0 y' m: a
4. MEASURE语句:
7 |! E7 p* G! c$ E, e4 o% H) P# D用于显示用户自定义的变量。
. P3 P& O- C; L/ g) {可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。) P2 W# O: t% B# c$ D# ?1 T. v
5. 参数语句:
9 {, ]5 o( D7 k: d! a4 L- L2 [* N# }用于显示用户自定义的节点电压等表达式。
B; T7 n9 s7 ^4 C6 y语法格式:.print tran out_var_name=PAR(‘expression’)! n5 X' g H4 d
(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
/ d3 p( A. Y7 e( `(3)子电路:
% l0 e4 V7 ~# u( M1. 采用.GLOBAL设置全局节点:, _9 q D5 M. s4 x& I/ `! C
.GLOBAL node1 node2 node3…) q- A ], R2 ?' S7 k8 n Y( B
2. 子电路语句.SUBCKT和.MACRO:
3 l& s+ o, p: ~. @8 j! A) \# h.SUBCKT subnam n1 n2 n3… parnam=val…
; u( D7 o0 t2 v. B.MACRO subnam n1 n2 n3… parnam=val…2 @1 b6 d7 b# o S [/ D7 V
子电路的调用:" Y7 U9 Z6 e' b3 P
Xyyy n1 n2 n3… sunnam parnam=val… M=val
" u; E/ h. s" Y7 U7 O+ x H' e \* p四、控制语句和option语句) z- n0 z. ^) {' c7 B9 e+ Z) j j! j
1.OPTION语句:" `# C6 b8 `- o2 ^, |2 Y) E
.options语句格式:.options opt1 opt2 opt3… opt=x
7 C( {( S/ l) T8 }' h一般在每个仿真文件中设置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定义的情况。8 M( G- G2 o6 i: C2 D0 g6 }8 o
2.MODEL OPTION语句:3 N4 a% J, M! _; `
SCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。
) R8 T% C! R2 L: r- j8 q五、仿真控制和收敛7 W& |& I$ z% p1 w
Hspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。
% q' Z9 q8 \! K- z(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:1 E; ]$ f" K, \; S0 ?' [
1.电路的拓扑结构:. e: _* s( h1 h/ U
电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。
$ R( X6 s% g+ y" X+ w/ O; n$ N. W解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
% g) [, i! ]5 P2.仿真模型:
) n# @4 l6 u5 ~. w由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。
( I& I) U& ^6 X C: P解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。. }( V' ^- }+ W) l) {- I
3.仿真器的options设置:; {2 I C" r, z$ G6 B) x
仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。/ W1 d4 }7 q% g0 ~5 j" e& p
解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
9 X! e4 o5 Y2 s7 M(2) 针对仿真分析中可能出现的不收敛情况进行分析:
a7 Z' U; r9 [- q4 X4 r, ~. R6 [1.直流工作点分析:
% `+ `% ^) n' w! b6 W c每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。8 `# C U: @' K9 Q* H$ n2 J
对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使4 Z! k3 `+ G- M# E4 l5 E; }4 j h
用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
" i" D0 x7 R6 G5 H3 ]( [, x2.直流扫描分析:
! p. @: p: u6 ~/ K; f# |在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。
8 f. z- O9 z6 o( K3 Y- N& K解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。
n% A$ P t8 n# e3.AC频率分析:$ J/ h- `8 ], H% C/ p8 R4 C q
由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。
; N8 F% m) R0 I0 K3 s4.瞬态分析:3 B |6 \, l" @. F8 H
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。9 ^$ n- F1 Y& S2 F2 Y+ k
瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。8 r1 L. y8 t0 S
对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。7 Y' @ U# { L: q2 [/ M u& O- K
六、输入语句
3 K- u, p- e) ^7 b5 u对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。
" I% C& _% t* I) o) {. t对于.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>。' T) f2 |8 j% ^0 C
对于.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中增加分析语句。
^) |1 {; A( N! F: m4 A* f七、统计分析仿真
* u/ m) f0 S7 P主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:" L# ?0 }0 q4 }" o
.param tox=agauss(200,10,1)- k! J9 u; j* Z# ]* Q& ]6 s" o7 S+ v
.tran 20p 1n sweep MONTE=20
0 }" }: {' ^5 v% E: `& e& t7 r8 e.model … tox=tox …) D+ _5 t$ J$ M; E7 @
其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),
/ e& O" Q o( y8 _) i.param ver=agauss(nom_val,abs_variation,sigma,mult),
6 k% W! M; H' r对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),
, n; x: D7 G L9 N8 i.param ver=aunif(nom_val,abs_variation,mult),6 D, c1 b6 R# B/ M6 A! t2 H
对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。
2 G$ [$ ], i$ b! Y5 P3 I5 [& C. l5 u. N
7 c( }( o$ n; i) ~/ b |
|