TA的每日心情 | 开心 2019-12-3 15:20 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。 - }+ f; t% |9 H: C7 i
最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。
2 H! L2 u% ^* [4 [% ]一、HSPICE基础知识- k+ H4 Y: f! Q8 f3 ~: o# S
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等进行仿真,以便得到精确的结果。, W. _4 E5 D: D* { Y7 o5 ~7 I# B
本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。
" R* Y( ]5 Q: p4 wHspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。
- v m0 w7 B- v6 l( ] @表1 Hspice所使用的单位
; d# F c" U Z" A独立电压和电流源包括:0 G- l/ b" }) D1 M
1. 直流源(DC):9 O8 q1 N6 L! [3 @9 I! f! m6 V" E
电压源Vxxx n+ n- dcval
' ~ W( C" Z& A& ?电流源 Ixxx n+ n- dcval: G; \8 ]$ W+ \- x5 g, A$ P! }
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase
) j" K$ f1 z( i T: A5 d3. 瞬态源(随时间变化):
0 A* P7 t# F& l; U) g; l8 N脉冲源:pulse v1 v2 td tr tf pw per7 ^3 O3 a4 T+ \* c* Q
线性源:pwl t1 v1 <t2 v2 t3 v3…>- N/ B+ x) A$ Y
正弦源:sin vo va freq td damping phasedelay% N- u3 {! D2 Z. V: S) I
4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)
: S4 _1 v: Z. _7 }+ e& Z二、输入网表文件
N6 s& e; v! i7 n- @TITLE
" W) v# ]& ?8 D* n# B' `.INCLUDE
7 l3 V" _: k4 \1 D% U* {6 c) m. }) c.LIB MACRO: Q* h# v( t( ~( w0 F+ j% }% Q' H
元件描述. \, i3 b* L% A& D- D" ^7 s
信号源描述
+ i9 P9 Z0 u9 \# n分析命令
3 j, J% ~( x8 a' H& | ?测量命令
, d2 i4 [# X; V1 E.ALTER; a' H! a. T* w* g$ X+ {
.END0 K; e/ B8 |; L) D; G
图1 输入网表(Netlist)文件标准格式! w% O% p6 r# s
二、有源器件和分析类型- ~4 [! N4 ^2 C! u4 I# s. P7 E* k
有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。
" Z2 K# I" N9 q& H" o, P分析的类型包括:直流、交流和瞬态分析。' ~) l4 d9 Q5 }5 M! A- k
1.直流分析:: J3 Y2 h" O5 n w' H' r
对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。
" P6 M2 B* v- ]8 Y' H3 D9 i( ^( u.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
0 a5 F1 Z- M+ y+ v+ @直流分析包含以下五种语句:& d# x! C- `: D
.DC:直流扫描分析;5 g6 c6 W7 j! o; j# i) b5 ~
.OP:直流操作点分析;4 f. Z4 ~: n; R0 {! U8 b$ o
.PZ:Pole/Zero分析; h0 u, A7 n% ` p5 l b5 @2 f; ?
.SENS:直流小信号敏感度分析;
: O/ X' a4 i8 P0 @9 n.TF:直流小信号传输函数分析。
8 y9 o0 M5 z4 g) e2.交流分析:5 h! i8 \4 {- R8 H' n& Q
交流分析是指输出变量作为频率的函数。
9 l% P8 c1 f5 I0 U( s* o' v: ?, W.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
y" O% P+ `) F: q0 j交流分析包括以下四种语句:0 i [5 r: V2 I* L9 w$ n* b- Q `
.NOISE:噪声分析;
) q6 M3 m* B$ n& u8 H( J.DISTO:失真分析;
* S3 e; ~* s s: F2 U, ^.NET:网络分析;
/ Q! ^2 n/ }- h7 k.SAMPLE:采样噪声分析。
8 p! M& Q+ h0 d0 m% C6 H6 J: E% E3.瞬态分析:" y" E. ~4 l0 D& B M/ K
瞬态分析是指计算的电路结果作为时间的函数。
% ]0 V( q7 x( X4 H.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..
' r5 V( W7 \& Y三、输出格式和子电路
8 t" `" w) I8 E9 R(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。7 [. s* v5 ?, b" b i
.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32
' g2 V" R( a, q1 U1 J.PROBE ov1 ov2… ov32
1 B$ ]1 U) }. u) R5 R7 Q( i9 R, t/ ^.PRINT antype ov1 ov2… ov32
( }0 L# ^3 s8 n. v有五种输出变量形式:8 @/ w4 V+ Z3 h
1. 直流和瞬态分析:0 \7 A J4 K3 K/ E* c
用于显示单个节点电压,支路电流和器件功耗。
0 O H. f" x5 q8 j) M.print V(node) 或 .plot I(node),也可用.graph、.probe。3 ~3 ^. o% ^5 X/ v/ l5 F! H
V(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。8 O+ u* u4 h* e' r" R" s* @
2. 交流分析:3 {3 x% l. Q" F8 i' U# g$ y6 [
用于显示节点电压和支路电流的实部、虚部和相位。, l( e3 W# i. [' ^ T
vi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。
$ m& r- ?$ l/ }4 T1 r3. 器件模版:
) M" q0 F- R! x4 r8 \7 P用于显示制定的器件节点的电压、支路电流和器件参数。
" W8 ^' H e4 f0 x R' Tlv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。
0 B8 v& p7 S* e# V4. MEASURE语句:) q/ c1 Q1 i& b2 I
用于显示用户自定义的变量。6 |; @3 w; P4 C$ t& Y* |, J
可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。
, \ |' q7 W$ \ Y. ]5. 参数语句:
7 n- L3 j( [( z, Y用于显示用户自定义的节点电压等表达式。- x5 n$ p+ o- d! n/ [5 n1 s
语法格式:.print tran out_var_name=PAR(‘expression’)* X# G: F# r% ~7 u6 b% I. `
(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
$ d9 T' m3 h* f; M9 }5 n9 y(3)子电路:
. {% r0 s. s% D+ L5 B1. 采用.GLOBAL设置全局节点:) o/ P. t( A0 i. }# A
.GLOBAL node1 node2 node3…
5 f( L# O# o! _- h2. 子电路语句.SUBCKT和.MACRO:
/ e& J# o- Q. E4 A, W: z! R4 c" }! a.SUBCKT subnam n1 n2 n3… parnam=val…7 `* O3 T. H6 ^0 U9 ^& J# L8 b
.MACRO subnam n1 n2 n3… parnam=val…
. v. ] j! B' ?& t子电路的调用:6 [! h* D; m5 z2 x) z! b
Xyyy n1 n2 n3… sunnam parnam=val… M=val D. y3 W, y7 I) H- R) @, _
四、控制语句和option语句
& U+ `* p o8 {: {6 _6 j2 |1.OPTION语句:
, ~4 @3 P8 o: Q& c+ G6 K A5 G.options语句格式:.options opt1 opt2 opt3… opt=x' g6 R3 H2 N3 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定义的情况。
1 T8 q& Q0 I4 i4 |5 x2 b3 P6 `2.MODEL OPTION语句:$ T1 M1 U5 {+ W6 g6 x
SCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。' q: d) W" y Q- W! o2 A
五、仿真控制和收敛! D( S2 U" R) n5 a1 t
Hspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。) R$ G9 r( a7 z* v
(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:
) e! Y1 x7 h# l9 a1.电路的拓扑结构:
" Y+ G8 a# T0 f$ E. D/ Y6 t/ R% I电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。% i; U" t0 x7 s5 G) x. ?" ]
解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
& ?6 v8 y# _2 ?6 R2.仿真模型:
- C- _. j2 c" n& J3 x由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。2 X: F' J) n! i+ {4 c; E) Q6 @. l
解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。
& ^! q" R9 U0 H% F( m2 R3.仿真器的options设置:
4 b! W; H0 u9 `. q, @' \仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。
5 q9 w9 x- I) v' n* h. b解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。( y% C, D# _$ W3 R$ x/ z1 d
(2) 针对仿真分析中可能出现的不收敛情况进行分析:
% Q8 J* g0 V! L; }) Y1.直流工作点分析:
- @) ^# Y( L9 z. [每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。
6 z! k9 r% \& K `8 o) P对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使
6 q6 b& H- ]: _用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
: T4 h# _" g6 b2.直流扫描分析:% g7 g+ P+ h/ k+ _# k
在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。$ D! R2 e* d5 |4 J; x5 c. 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改变仿真的范围。
' Y% K; X0 O! _( {# \$ ^8 }3.AC频率分析:
2 K4 V6 ^6 W+ T5 t7 x2 E* O* U由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。* A8 x, }$ W- K) S, F- J }
4.瞬态分析:
0 E/ N- I* h& `3 f1 W- m, S瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。" S7 m: ^* p0 z9 u. _0 `6 h
瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
( X! W3 r4 S+ O1 ?9 F, M9 S, b; J m对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。 Y! \( _1 a( J+ n" [; v
六、输入语句6 N( o H1 w! J6 ~9 H8 u/ X- l; I
对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。/ i* ?5 |$ P# ~/ Z! d( A" r0 v
对于.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>。8 F& l; Y( T" \+ C( |5 T
对于.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中增加分析语句。- x) Q! M) H! ~ _
七、统计分析仿真- ]* [1 ^& o: P# c3 U4 R
主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:
: W' o1 C' K+ i" J0 l.param tox=agauss(200,10,1)
6 P9 x3 F8 _" _! c( P3 w.tran 20p 1n sweep MONTE=20; c" ]6 W2 |* Y6 U3 r& m @
.model … tox=tox …3 _/ j' X8 [3 P; ~7 v
其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),% J5 o) d$ M- U5 r
.param ver=agauss(nom_val,abs_variation,sigma,mult),3 }0 H" Q& U) B4 p0 |
对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),1 I: D6 T7 e i y" F
.param ver=aunif(nom_val,abs_variation,mult),
" b0 O4 ?8 X( ^8 G6 [- C2 C对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。
' Z4 a. M) }& j8 Y2 T" V
/ H8 W* ]4 W8 K c V) t3 r j. y) w2 }
|
|