TA的每日心情 | 开心 2019-12-3 15:20 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。 / ^ u$ l! I* D2 O
最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。
5 L7 p8 y. [4 \1 E6 N一、HSPICE基础知识1 _' G$ U6 b5 u8 H9 d
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 `- \/ x% [; p2 o! t1 Y( s8 b k* K
本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。' F, ]1 {$ |. x3 R) z* T) R
Hspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。
5 V7 z' F/ ^ s+ l& Q; X9 _3 c表1 Hspice所使用的单位7 c) Q( ~) T: e% T* W
独立电压和电流源包括:
/ @9 s# a1 m8 _) q1. 直流源(DC):
f" s$ Z# ~: G+ s电压源Vxxx n+ n- dcval
1 i# s5 i8 P! E电流源 Ixxx n+ n- dcval; O" Q9 O" C2 h4 U' M, i% {0 T
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase3 h. C. g: [! n4 k* C- S* e
3. 瞬态源(随时间变化):
/ o4 g) h: f9 p) ?8 f1 T脉冲源:pulse v1 v2 td tr tf pw per$ f5 @$ I+ X5 D6 \" C
线性源:pwl t1 v1 <t2 v2 t3 v3…>
8 ?2 m8 i: f; s7 f5 d正弦源:sin vo va freq td damping phasedelay- U: t4 a" C, Y; t
4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)
$ ^+ @6 N( F$ ~2 l- Q# J9 W二、输入网表文件7 b$ J; R5 u& F0 f7 x: `
TITLE2 t6 P7 a( ?) l# z
.INCLUDE9 S+ v4 v9 H5 g% M: R# a
.LIB MACRO1 r( h8 ^ |; W' O4 j! l2 h
元件描述" Z7 ^& G( M. v
信号源描述
- h$ y9 V1 G* M$ Y1 {* L2 y2 }: V9 }分析命令
5 d% i/ {0 B5 ?' k" b n J测量命令
1 ]: P; I7 f( w! o5 ]6 f.ALTER4 ?8 A; W, }, k. D) k6 j* \- W3 h d
.END; q. y4 t/ V0 r- K, g
图1 输入网表(Netlist)文件标准格式) q% I* B4 b' A i( c% v
二、有源器件和分析类型% U' \ ?4 w, K) F8 z
有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。5 }7 {5 S* {; g9 E
分析的类型包括:直流、交流和瞬态分析。2 b0 B" S2 u+ u* k0 b
1.直流分析:
, R6 t8 F1 E" b2 w: _. @2 o5 M对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。' [( B: _$ y8 [3 Q# [, J6 z4 @$ h
.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
0 s* c. ` m; I" N+ Z' ]8 F8 V" Z* U5 g直流分析包含以下五种语句:. I7 j3 G6 J8 I
.DC:直流扫描分析;0 ?6 ~& Y! }" e- M! c
.OP:直流操作点分析;) d2 {, _6 p5 ^$ l: y
.PZ:Pole/Zero分析;
% G- S7 @$ z0 F9 i.SENS:直流小信号敏感度分析;% Z3 f/ U5 z& Y7 h$ V0 e
.TF:直流小信号传输函数分析。
' Y4 f0 i, x% L# a1 ?; [& Z" w1 ~' \2.交流分析:
9 F+ H$ _: F: ^: D交流分析是指输出变量作为频率的函数。
' u2 F \) ?9 y& E/ n U: x.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
4 L8 {; h) ~& W$ Y0 k9 [交流分析包括以下四种语句:& r7 O& Y! d0 |
.NOISE:噪声分析;
- R6 C3 B( P9 E, i9 `.DISTO:失真分析;9 V D+ `3 I+ M- B5 m* g& g
.NET:网络分析;" ]) t4 y, o0 j% f5 [: X
.SAMPLE:采样噪声分析。
/ m% D4 ?! X9 h M/ \3.瞬态分析:
' T; ]1 D" E- B) F; D瞬态分析是指计算的电路结果作为时间的函数。/ y4 [# e" C0 F; b, G/ @4 _3 { z
.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP.., B$ u6 P( n% h4 w7 p
三、输出格式和子电路7 V+ H v( c6 k
(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。; q* p& r7 B" z1 b5 v6 ^
.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32: c% D5 S4 G( f5 v5 Z% E K
.PROBE ov1 ov2… ov323 ]& Z& p r3 ^0 R$ y
.PRINT antype ov1 ov2… ov32
1 D& P7 Z1 `! X% l% J有五种输出变量形式:
( f( a9 R! n% l" A& z/ _1. 直流和瞬态分析:& ?2 n& `. z+ m5 {( f$ z6 J- A; T
用于显示单个节点电压,支路电流和器件功耗。
0 \- e( o% r* T, b0 e0 @1 p.print V(node) 或 .plot I(node),也可用.graph、.probe。
: Y/ S* ~& c. R; i' O8 IV(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。
' @$ B) `4 a C2. 交流分析:# Y6 z# k, o4 J0 @- B0 n
用于显示节点电压和支路电流的实部、虚部和相位。6 e L/ D# N; E4 L; k3 o
vi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。 u7 d5 g" q; L) l0 j
3. 器件模版:
; Z) w! D/ |0 Z% w! r0 C用于显示制定的器件节点的电压、支路电流和器件参数。
6 h D$ G: \/ a3 \) w; `8 X8 Llv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。4 }) z! Q+ q+ u/ j, ^' m5 d
4. MEASURE语句:
' H# r8 D$ X. U: F用于显示用户自定义的变量。9 U0 u2 o0 F, C0 t( J2 G3 S) b: _
可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。
% y: @2 T* Z9 i3 J* H. u3 {5. 参数语句:
1 e' R$ | t7 ]# p用于显示用户自定义的节点电压等表达式。; b/ e7 e# p+ R# s
语法格式:.print tran out_var_name=PAR(‘expression’)
5 f; S4 @. M N& ~% n$ o7 }(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &3 o* y9 ]2 b' L6 y
(3)子电路:4 J. x- h8 G+ N4 a
1. 采用.GLOBAL设置全局节点:
0 p4 n; I1 t+ h, K* b.GLOBAL node1 node2 node3…
0 X# x5 h" f# [$ x* c7 g# z2. 子电路语句.SUBCKT和.MACRO:0 e9 m) }7 ? }: R1 J
.SUBCKT subnam n1 n2 n3… parnam=val…
0 ?6 F7 R* a4 w1 w3 v+ e.MACRO subnam n1 n2 n3… parnam=val…' q8 _- k" t- M' f% W
子电路的调用:
8 Y; F3 F9 M3 r% V6 a: d6 R8 CXyyy n1 n2 n3… sunnam parnam=val… M=val4 o) I: N* y" O( g/ q$ t
四、控制语句和option语句; F0 R% j4 y9 O6 b. G# p
1.OPTION语句:
2 v2 C; N; R( e.options语句格式:.options opt1 opt2 opt3… opt=x1 a. m1 ^+ F p, i& @2 J
一般在每个仿真文件中设置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定义的情况。
' V' t6 ^, V' {0 M3 [2.MODEL OPTION语句:
) N2 D; E; U" ]6 p8 Y# C: L* K0 |SCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。
( ?0 i- [! ?/ s2 [: u五、仿真控制和收敛
$ U7 P" x4 K( [6 ?& X, G {Hspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。
7 c6 j# M; N4 j$ z2 D4 A E C% A(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:
. h/ B% D; \% r' g+ D; z; N, R, R1.电路的拓扑结构:4 t( C2 R) H6 P% R8 W
电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。
& R0 B; M: z H6 m& e解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。( \- L! L, V+ V) N1 Q) U* F7 l; K3 L
2.仿真模型:7 C( O) V" Y- T H
由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。; B0 K0 \9 l+ d) y! P0 J
解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。$ B8 _7 ^1 X- {6 r1 h8 `# C
3.仿真器的options设置:
2 @# h( ?0 v0 q: D" I c仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。8 E; I C) R9 I" A+ S
解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。" P3 U; M& h: s8 n9 o
(2) 针对仿真分析中可能出现的不收敛情况进行分析:
6 l# s* S0 E/ X+ {1.直流工作点分析:) A8 \* i& K V6 m1 U$ @5 {
每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。
" ]# A1 F; O, g; q/ o对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使 N `+ h0 n+ l8 g' K$ e
用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
! Z0 n- Q, a" {4 y$ [* }# W- O2.直流扫描分析:' E9 X) k4 u9 b2 \
在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。
* b# _) Y2 B' A' n' D9 p" V0 \0 J$ {解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。5 W6 h' x0 Q- Y: w
3.AC频率分析: M" a+ q. w. T8 n' i# v
由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。
i: N `* b1 I2 A G7 b! U: t+ D4.瞬态分析:7 E1 Z7 [$ K7 n5 R3 P
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。
5 w* x! Y# }' x1 k1 j% c瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
% {: S8 ^' T4 l) q$ \! }' [对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。
l c. s6 G9 C+ O! L9 L六、输入语句
( U ]* ]0 s+ R9 D对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。5 h. V( f, x/ J+ E) l$ U
对于.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>。
5 \# B* ?" j5 \0 a2 E2 k1 T$ 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中增加分析语句。
( B) ]: }. Q# v) T: o7 H七、统计分析仿真/ u7 |2 ?% ?4 C$ u6 N
主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:0 q% n6 @ T+ Y% y
.param tox=agauss(200,10,1)
/ |9 E! r* ]6 P! ^1 g.tran 20p 1n sweep MONTE=202 k2 t1 w/ \- h2 u3 z0 D+ Y7 h
.model … tox=tox …. `* u" G& k; {5 L
其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),
6 D) a# j2 q6 d$ j.param ver=agauss(nom_val,abs_variation,sigma,mult),
- k0 i$ @4 u- b' b对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),
& Y2 ~3 ^; }, Y1 N3 B. ~3 W.param ver=aunif(nom_val,abs_variation,mult),
! H& C8 _5 {" P1 I( y对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。. \; t/ c4 g; p5 p2 ?; x
6 z K6 w8 f1 J0 G1 |& h4 j9 o1 }, h+ t' v6 |
|
|