TA的每日心情 | 开心 2019-12-3 15:20 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。 3 A6 S: Z4 b! ]$ w
最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。
- r0 a H9 U- y9 M一、HSPICE基础知识
0 C3 e8 o4 }( F& Q! jAvant! 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等进行仿真,以便得到精确的结果。7 o1 d6 H$ ?" ~) b6 u
本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。
) q; J4 @( _1 F* W, m8 A. v0 j: JHspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。
1 {& H6 _8 e6 | O) H8 n7 O6 Z表1 Hspice所使用的单位$ O4 H' ~1 n5 l9 E) t$ [
独立电压和电流源包括:
& u$ \ o D0 _/ S7 _: C1. 直流源(DC): J0 v! C: S2 m( U- g& O9 r
电压源Vxxx n+ n- dcval
4 p0 _, o N$ L, x7 T8 h. e9 G电流源 Ixxx n+ n- dcval
7 T- n% l! S) e2 p/ }2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase+ ]0 d }) S: d
3. 瞬态源(随时间变化):, i& z: o3 r% m+ a3 ?; D
脉冲源:pulse v1 v2 td tr tf pw per
+ a4 p# R, [9 `: _9 @. e% S线性源:pwl t1 v1 <t2 v2 t3 v3…>: L8 D2 W1 y6 P3 F
正弦源:sin vo va freq td damping phasedelay! k7 T# n% ]+ ` r8 r
4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)- U# n( u; {4 _/ F
二、输入网表文件$ D' @. \1 Y g& R2 V0 b/ `
TITLE1 B8 a5 ]2 F& z* s* T: R2 P! p
.INCLUDE
( n3 u4 K$ ?6 n.LIB MACRO
/ h! l, z" A f. b6 h元件描述8 d2 g8 c: H. T9 E7 k
信号源描述- g3 s: @6 n& x- q4 } Z) F
分析命令; H4 z# T% x4 }, e
测量命令
. I( G) Y1 w8 E9 J.ALTER# @* V; l! N4 Y) D( q3 |2 r, X" z3 E
.END% B) Y- T' n1 o2 ?
图1 输入网表(Netlist)文件标准格式
: o7 h" U7 }+ V, j二、有源器件和分析类型) b( _9 j; v8 q
有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。9 e% P3 w( N# I0 g4 l. J
分析的类型包括:直流、交流和瞬态分析。; w2 r; ^2 r9 l6 G- K
1.直流分析:, {1 j$ z/ c) S E8 K0 O* A5 ^) Y
对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。
+ o! V0 J" H( N- l.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2* O5 J' Q9 [/ y0 I& X
直流分析包含以下五种语句:
9 s( ]9 p, e' v! i. E.DC:直流扫描分析;& i' t5 v) u* X* U! a4 h% J8 m
.OP:直流操作点分析;
) a1 ]0 S3 D* W3 h u9 j! d8 u/ j.PZ:Pole/Zero分析;
+ w) F* J1 p9 H3 ?( O.SENS:直流小信号敏感度分析;7 f! J% u0 X7 {: [# N3 U( _ X
.TF:直流小信号传输函数分析。
$ y' Q/ N3 C! y* z& [2.交流分析:6 c( {1 S' e: `: P% w6 h2 x) |1 ^
交流分析是指输出变量作为频率的函数。8 q' L$ A* o( H8 y; E
.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2& N4 \/ J* y% y7 r1 ~+ O. w- a: ~
交流分析包括以下四种语句:. Z& _9 O* A7 \; W' t8 A; l
.NOISE:噪声分析;
8 i- v& y2 d( r.DISTO:失真分析;
" `1 |4 }7 [1 W8 D.NET:网络分析;( i- f, [0 r6 J$ `
.SAMPLE:采样噪声分析。
' d$ A0 d; b- p7 @3.瞬态分析:
2 v& u; m+ E1 |, f# g j瞬态分析是指计算的电路结果作为时间的函数。, {$ [6 [/ E: D; }
.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..( P* T& ^% ^# p9 M$ g4 p9 E
三、输出格式和子电路
3 U! ^) J" J i1 [0 I2 [& }(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。
# ]# R. N; N/ i% ^.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32/ u& z. ^0 C) W
.PROBE ov1 ov2… ov32 d* | E1 s# T9 b1 G% u& P4 h. `
.PRINT antype ov1 ov2… ov32
N% i; C- I; q7 [/ P! ? P: L7 i有五种输出变量形式:
2 t3 Q/ m, k: [' X! U1. 直流和瞬态分析:* f! k% b$ E8 T! k
用于显示单个节点电压,支路电流和器件功耗。
& j+ F. f0 [$ _( {) n8 J" z, F.print V(node) 或 .plot I(node),也可用.graph、.probe。
* b( d* g9 u" _9 @$ J. c9 N+ S; RV(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。
9 ?" S5 j6 ?8 s2 Z# u$ s2. 交流分析:
. Z4 u3 v! O/ d3 n! M# ]3 \# a用于显示节点电压和支路电流的实部、虚部和相位。+ M5 w4 k9 h/ c& t( u8 k7 A3 z
vi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。
l4 d. {9 A1 I/ u; F7 O3. 器件模版:
- O. Z( z* {0 v) t4 t用于显示制定的器件节点的电压、支路电流和器件参数。
% r! ^; \" s% {6 glv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。
. ?( X! x7 ?4 }8 U3 f7 r4. MEASURE语句:7 |+ t. x) i6 R$ i1 ^) S
用于显示用户自定义的变量。! q( m- M; e& W' U. x% {+ v
可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。
& M$ w, ]) U- M1 J5 `' B& _6 {5. 参数语句:
5 X4 H+ u8 H/ t- W$ T7 b: B1 d用于显示用户自定义的节点电压等表达式。 C, Q \. p9 s2 b1 ?- A
语法格式:.print tran out_var_name=PAR(‘expression’)
" m6 q: O+ d4 b) k(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
* n7 T9 j4 U% w7 x2 ~2 M(3)子电路:5 x( ~' v$ v- {5 k ~
1. 采用.GLOBAL设置全局节点:, ^8 \6 Z- x3 m+ ~
.GLOBAL node1 node2 node3…
2 y. x5 e" b6 ]& l( l2. 子电路语句.SUBCKT和.MACRO:
+ @2 z( l$ W5 ]7 z.SUBCKT subnam n1 n2 n3… parnam=val…; N" M; ]9 _/ R% \1 T1 U7 c
.MACRO subnam n1 n2 n3… parnam=val…
# D9 Q8 D3 J9 Z. ]( p1 `4 c子电路的调用:
% Q/ ~' c( f* F" XXyyy n1 n2 n3… sunnam parnam=val… M=val& [( ]9 c2 ^/ `% }: z0 I
四、控制语句和option语句8 C' L% `7 l0 ?( O+ ^+ S, V7 n
1.OPTION语句:$ ^1 h7 a6 a) H ]6 g" b" ^
.options语句格式:.options opt1 opt2 opt3… opt=x" e+ q; X+ s4 U" k# 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定义的情况。
3 x* z7 A4 x. y2.MODEL OPTION语句:7 Z: z% L- G5 z, d) m! a1 |" B5 R! Q
SCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。
) z8 L5 a- I2 x! \! Q, ~五、仿真控制和收敛
9 z5 ]6 E* p/ v' C# [4 m5 o) l9 eHspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。
/ ~' S% P0 `2 i& {5 {, A: C(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:4 H% N) L8 `1 G+ D" K% x; @1 |
1.电路的拓扑结构:5 ]1 s0 h- h' K/ f" c9 B* w
电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。, q6 F) h2 K8 w: Y; X/ z) \! ?" f8 B
解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
( L& o1 g9 O. j& l* b2 d: r2.仿真模型:5 b, P6 I' F5 S$ O! h
由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。
) |' Y" U' k; q/ }- E解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。
( _& W2 I0 @) w4 h0 W, N3.仿真器的options设置:
, f% l S; \6 ]0 k" C仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。
" \1 |2 A1 `, u* F4 a解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
4 i! G/ k) h% m* o/ t! \(2) 针对仿真分析中可能出现的不收敛情况进行分析:
/ S2 E2 u- t2 E9 j. S6 l( K1.直流工作点分析:
, A, `& Y; \6 C1 X每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。
& J7 R9 ]* S1 D B对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使 y/ `" S& ^( C
用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
4 G$ E! i7 |& J, U2.直流扫描分析:
, J+ W* L- `+ h# C" B4 u. g在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。; H7 h9 c) A p0 T g! J* F3 }
解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。
& \9 B" E0 e3 d5 @3.AC频率分析:7 Y7 @5 x- }2 ~9 u
由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。# h( B& j4 I/ y& a1 ~5 M1 [
4.瞬态分析:
+ K' x% t! i K5 [/ c8 _瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。$ ?9 z' n9 P. a% J0 K' U8 o
瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
9 L6 K1 H6 d2 j# r2 a/ W7 G对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。
; O, w% D2 T2 R% g六、输入语句! C. X: B. A7 G* k0 \& f
对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。
: F7 e+ I. P Z% l# r# D对于.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>。
: L0 Z% R/ |: |$ O对于.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. j; Q5 H# c
七、统计分析仿真8 J2 b* k( [/ m2 U8 |& E9 p
主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:# H2 n9 x! X0 t" w. ~3 I6 e
.param tox=agauss(200,10,1)
, d0 S- p; I. v# N( k.tran 20p 1n sweep MONTE=206 w. S l# K6 a% o' N% g; O( v5 ~- ~
.model … tox=tox …
) j' n9 k ?5 |其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),
6 H6 M5 z& I( t* i.param ver=agauss(nom_val,abs_variation,sigma,mult),- [7 i3 F+ Y' w E0 v9 }
对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),; `) m K+ c+ ?* }3 g% P
.param ver=aunif(nom_val,abs_variation,mult),' Z- f% e3 _- ~# u
对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。9 r/ {3 m" N/ d0 v$ U! b# v
/ E1 R! D) S, z c
4 t& U+ N5 H0 \3 \+ S |
|