TA的每日心情 | 开心 2019-12-3 15:20 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。
1 e' ?' G8 p; b 最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。$ Z/ S. H; P( B1 d
一、HSPICE基础知识
2 @6 r8 R! Y$ r2 w( e$ P0 n* nAvant! 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等进行仿真,以便得到精确的结果。
6 V" G% M! G1 F- q8 }# w1 L0 D本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。
9 ~' t7 J3 X+ |% M- H! THspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。
! D2 @7 m s$ ?: x1 j表1 Hspice所使用的单位6 O/ T8 k6 _2 t) x6 S# `: S8 f6 A
独立电压和电流源包括:
4 \' z- ?2 T& W& @% z, I8 x- w1. 直流源(DC):
K5 ?! I0 k0 @2 L c电压源Vxxx n+ n- dcval
K, I ?. n5 p' q' y" I7 E电流源 Ixxx n+ n- dcval F7 x2 N0 [$ y% b A/ ^( [" r4 a* x
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase- \0 K2 q! r! O3 L
3. 瞬态源(随时间变化):# }$ }& i; p9 B5 o0 X
脉冲源:pulse v1 v2 td tr tf pw per7 c, z( L9 b! j. Y, r+ h
线性源:pwl t1 v1 <t2 v2 t3 v3…>" d9 ~& w, c$ j" ?. t; L0 Z
正弦源:sin vo va freq td damping phasedelay8 Y; w; t1 ~/ o, f( \
4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)' z$ I @6 P5 |, i, \8 M
二、输入网表文件
, u$ k- L% T6 GTITLE' H' W. `, l- _* m8 q
.INCLUDE7 |0 d& `# E2 i: S ]" t
.LIB MACRO5 c& E& X; ?, ]- ^
元件描述, o2 ]8 p2 O4 ~$ i. ^- j9 e4 r
信号源描述
' Y; E; u( a8 [% Q d; U分析命令
$ x5 d0 ]- E. p5 X) o3 R测量命令/ j+ N* O' f) I4 m
.ALTER6 ^7 a7 ~3 `& Q q7 _
.END
: B6 r: T# Z; a& V9 g图1 输入网表(Netlist)文件标准格式
: ~4 c! P! r: @& G4 z( ?二、有源器件和分析类型
! x0 y' @9 x2 c8 \有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。
F) p7 ?9 E; I& u+ s3 [( u分析的类型包括:直流、交流和瞬态分析。
- _* N+ D" ^8 ]* a" V. |1.直流分析:4 E! x1 Q+ b' i K. @" D
对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。
9 S( ^4 s6 K" T2 P+ b6 ].DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
$ P8 l& ~" Q4 ~* o直流分析包含以下五种语句:% W0 H7 V9 B6 Q8 t9 Z
.DC:直流扫描分析;
" {: j: x, a7 H) j ~+ L.OP:直流操作点分析;
$ j5 L3 c1 [# Q! d7 ]2 I+ S0 ?.PZ:Pole/Zero分析;" X! U( y/ @' ^! I: ~
.SENS:直流小信号敏感度分析;
, A9 _0 U2 `4 E( |" W& J.TF:直流小信号传输函数分析。
5 ^5 v2 z, H9 Z2.交流分析:
: g, f# |6 [' f; o交流分析是指输出变量作为频率的函数。, S* `/ L' b9 L7 x
.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
3 U Y( p+ |/ v4 U! A( K交流分析包括以下四种语句:
2 D F0 o, e4 U( {2 j7 g.NOISE:噪声分析;
- H! z7 v, l+ s.DISTO:失真分析;2 H: y6 n9 x+ d. N0 @
.NET:网络分析;' y; r" k# s( O# n) j9 c
.SAMPLE:采样噪声分析。
+ [* W, [+ q3 v# u5 M# Y5 A3.瞬态分析:0 P5 P" u# I# g* d
瞬态分析是指计算的电路结果作为时间的函数。
/ N3 v1 `* |/ J9 ~! f.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..
( ?2 E$ O% B* ~三、输出格式和子电路6 a8 t( |% Q1 }, `
(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。& O( Z" k2 \. V5 M5 o3 A
.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32) M9 o" F, i1 N% J' i8 ~
.PROBE ov1 ov2… ov32
- N* {4 M$ _4 Q i3 ~7 P+ T5 V1 C; x.PRINT antype ov1 ov2… ov32( k9 S' c9 z) } u7 R5 Z" X
有五种输出变量形式:2 X( D. ] ?: u- ^/ I8 P
1. 直流和瞬态分析:) n4 b5 t. Z. l. t$ s
用于显示单个节点电压,支路电流和器件功耗。
9 t1 m S" k5 k8 l% t.print V(node) 或 .plot I(node),也可用.graph、.probe。4 s; P$ @% l6 ~; J
V(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。- u5 A/ N9 r: e3 A* o L" G
2. 交流分析:
4 K! u" E* B& M+ s4 d1 ]用于显示节点电压和支路电流的实部、虚部和相位。
: ]4 x/ |1 R7 y6 J4 k- ^6 Cvi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。
$ _ n) t M0 H& G, g, s& y, E; d3. 器件模版:/ p! A- E& p3 U1 N3 C2 r( `- C& a
用于显示制定的器件节点的电压、支路电流和器件参数。
" E5 `8 Z7 s6 K" Z* Llv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。
# c5 S* T" [. S8 f4. MEASURE语句:
C* a0 G- {4 ?; L用于显示用户自定义的变量。
+ G" P6 ~2 S8 ]可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。
, n% ^2 F# b- G$ Z; [4 g5. 参数语句:. x# n- Q) f% H; n( }- e
用于显示用户自定义的节点电压等表达式。8 D1 a7 O, U4 @5 i
语法格式:.print tran out_var_name=PAR(‘expression’)
2 W# W$ r2 ^: ]% H(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
T2 z0 I5 \: F0 Q(3)子电路:# Q0 p2 W$ c- `' K+ A4 Q1 }# p
1. 采用.GLOBAL设置全局节点:. I6 N# j5 ^( H1 [0 t, v# a
.GLOBAL node1 node2 node3…+ \2 L( p4 g. V! j+ M/ |& w
2. 子电路语句.SUBCKT和.MACRO:
9 `/ D) A) D7 G.SUBCKT subnam n1 n2 n3… parnam=val…$ [0 p: M% c5 \/ S; j) D' b
.MACRO subnam n1 n2 n3… parnam=val…
7 _0 ?9 w# h& e6 m' O6 T子电路的调用:
+ p1 B- T; T( c% fXyyy n1 n2 n3… sunnam parnam=val… M=val
, U, ?7 {) o. s5 d四、控制语句和option语句' O3 Q! N* R* D( }0 I3 ]. G, e
1.OPTION语句:
1 y8 F: Y$ H0 z4 j+ M2 }! Z.options语句格式:.options opt1 opt2 opt3… opt=x
, z* x9 R4 u- F5 d/ K一般在每个仿真文件中设置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定义的情况。: ]" d$ X- |+ P7 `7 ?# m( {& l
2.MODEL OPTION语句:( {$ V- f- v! h/ W0 M9 t8 e% O
SCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。
' K/ u t; \- v$ H4 O五、仿真控制和收敛4 W* E3 u3 }4 A$ ?' |3 A8 S4 @
Hspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。- T' S1 C) X. V$ [( ^1 t% T
(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:
5 J6 u0 ?6 F; H5 r* A$ P% O1.电路的拓扑结构:' L) ~, a( u7 X0 [- Z R
电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。/ q$ `- F# q8 b# g5 a0 w, k
解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。2 k+ h0 c7 n1 ]1 L& d" M
2.仿真模型:
2 q; H7 O2 N( g2 ~1 r由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。! N8 B, G* d, H% Q* k6 ~* B, C
解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。- x( D6 j; }. S; [ y) T
3.仿真器的options设置:6 @$ Z2 k- R3 B' n a$ F0 b
仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。" C5 T8 C2 d' g- F' ]/ {
解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
3 a G' [" C% s4 Q+ K(2) 针对仿真分析中可能出现的不收敛情况进行分析:$ W8 e+ Q! z6 u
1.直流工作点分析:
# k, ]* @/ I8 m( h1 H& K4 Y2 z每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。
& l* N, S" I' M) o对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使
" [5 O2 A! m0 _0 n- N用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。1 I" {' Y+ H' l I. r. H8 k
2.直流扫描分析:! y" @* W$ T# N" F% i# T
在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。
& R2 V( T2 f* [解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。
3 c2 V" U" c7 ?% `5 v) Y. [3.AC频率分析:
: D+ O# x, P0 I2 e6 x X H由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。: I1 Y2 ^7 h, Q4 k2 G1 V
4.瞬态分析: ~+ H3 e+ j6 m9 B7 f0 S
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。' p4 l7 R( ~, G* x4 r6 `- t
瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。! R; M( d. K6 j0 [% V: U; {* n& h! g
对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。( ?: @9 `1 T# G9 |; N
六、输入语句
" ^" |4 b. z: P+ S! X2 D对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。4 \6 O; W9 N: x g
对于.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>。, J, I5 x8 @' m E2 \ D0 q
对于.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中增加分析语句。) r' v& G+ G+ l' ?
七、统计分析仿真: P& T, \0 L) J" R$ N5 b& Q
主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:
- l. a% p% ]0 k4 S6 A+ B.param tox=agauss(200,10,1)
+ Z: z& l, z- z& w% u! |.tran 20p 1n sweep MONTE=209 R' X; ^' j: q( r* {, D) \
.model … tox=tox …% ^: \4 Z4 b6 [8 v7 v
其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),
' e4 @) T3 k8 k. Z$ D# ?/ r7 i.param ver=agauss(nom_val,abs_variation,sigma,mult),3 O, J' |0 R' A- o
对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),
! e/ P0 }4 B( i.param ver=aunif(nom_val,abs_variation,mult),
- C+ \0 o- Y! X对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。+ G. R/ O& c- ]# w1 o4 L
: C) {# A) _/ d! X2 s
4 Q& ~2 F8 E, |- \/ t |
|