TA的每日心情 | 开心 2019-12-3 15:20 |
|---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。
8 A* F# v0 C6 A* s) Y Y- |& k 最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。
# [* s3 l! w9 o2 [& S) c& f0 H一、HSPICE基础知识
7 J* C. @7 O( M/ \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等进行仿真,以便得到精确的结果。
. ~' q# f* T+ u. C N/ Y+ ?本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。 s: _, _( n7 _9 D d9 e* L7 E2 u2 E
Hspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。. i: v. K8 K; h; C( D& O% u1 x; b
表1 Hspice所使用的单位5 w2 |: i' ~% C$ K. y& M
独立电压和电流源包括:
$ T% l3 n& \& A; M G, A1. 直流源(DC):
* f# K2 i4 `* B5 H+ ^+ y: e电压源Vxxx n+ n- dcval
) t) v: M+ o8 ?! B1 ^' k% U% D8 d电流源 Ixxx n+ n- dcval
$ z, ~ Z# ^& p- E3 e' h0 d: }8 j2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase
+ P( ?$ D" w X3. 瞬态源(随时间变化):
+ I5 U/ l: p0 G4 T% _+ B7 d脉冲源:pulse v1 v2 td tr tf pw per+ V; ^, e$ b4 d, @3 a
线性源:pwl t1 v1 <t2 v2 t3 v3…>
/ B4 f/ Y0 V5 t3 H3 R, j正弦源:sin vo va freq td damping phasedelay
! O7 u& M' j, L+ Z6 C7 C; d4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)# K0 Y0 P, K7 ]" X6 {) t ^; Z0 D
二、输入网表文件% g p' V. b, A4 \! T$ u6 u7 O
TITLE
; o, n0 D8 F9 }/ v2 N9 F.INCLUDE
. T2 m$ D' x1 V( c.LIB MACRO6 h( o( j; H# b
元件描述/ ]& m+ s% i+ g* K5 _' N
信号源描述
! I( l: D& ]' e9 t0 K/ O, N分析命令
- G1 h+ Z/ m( M! n8 r$ N: Y# W测量命令
9 Z* d9 D( r* D+ G4 r/ h% v.ALTER
9 V: |) h; R, X7 l- X, k.END
- n$ }+ R( s! J' f7 [$ l2 R8 _图1 输入网表(Netlist)文件标准格式5 g9 d4 ]0 I& g% {
二、有源器件和分析类型% u& v( f- V' E3 R( u' u$ z
有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。
3 _, N/ l6 B3 Z$ k分析的类型包括:直流、交流和瞬态分析。" J- d2 G& W3 a3 i; g- S
1.直流分析:
7 f ?/ u( q. F" C Q1 N对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。$ i+ {) M. i' J4 X8 J
.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
2 ~1 M2 k. x5 F) L1 p直流分析包含以下五种语句:1 j+ ]* I M6 \, }& R5 f
.DC:直流扫描分析;- {* B/ Q$ r& H1 L; k' R
.OP:直流操作点分析;
$ {: \. E* x. Y.PZ:Pole/Zero分析;
. h. G( D$ P' `; N2 ?. T6 R.SENS:直流小信号敏感度分析;
L0 x. N: N, y.TF:直流小信号传输函数分析。% e; l2 `! J3 g9 L2 E; P
2.交流分析:
( o5 u( N4 p1 m# s7 j& a0 }- I交流分析是指输出变量作为频率的函数。
. F; Q+ [; |& \# \9 b.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
' A* V n6 K$ m" C9 m交流分析包括以下四种语句:. j& M8 R' n J% e( _! m
.NOISE:噪声分析;, i$ V) q4 C& v5 F% U( P
.DISTO:失真分析;
* L- G, w0 g6 y0 [.NET:网络分析;, O3 [5 @" N& m5 Y
.SAMPLE:采样噪声分析。
+ O" Y7 _! q: n6 S7 T4 @$ [3.瞬态分析:
* f# A: @" V& I0 i瞬态分析是指计算的电路结果作为时间的函数。
% i; B5 \5 g$ C% z' s6 c/ V.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..: d6 {6 p! i. W& l8 ?: k0 }- N
三、输出格式和子电路5 |) [0 N; u, `) }4 a
(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。. n& m7 X# p- t( K9 v
.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32
) r2 b2 y* N# d2 Q.PROBE ov1 ov2… ov32
# K; A7 [% }* U- Z.PRINT antype ov1 ov2… ov32
" p% c9 G" L- H' I/ k8 D" Y8 h有五种输出变量形式:3 s. P/ Z/ o" D( i6 [0 ]: ~1 J5 p& u
1. 直流和瞬态分析:
) B" u$ x, n$ ^6 j! {8 O- d用于显示单个节点电压,支路电流和器件功耗。
0 w' ~1 Z" {5 ^: F9 f.print V(node) 或 .plot I(node),也可用.graph、.probe。
/ ~( c# }$ `; @( E# _V(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。% a) L. X1 I& ~* l5 \3 ~. Y
2. 交流分析:
& E" M( C$ Y6 Z: ^4 R用于显示节点电压和支路电流的实部、虚部和相位。: n" `% A. V8 v. k
vi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。
$ i: T" v9 j. O+ N" [( i3. 器件模版:
4 G+ M$ n' Z+ H3 Q2 _ B用于显示制定的器件节点的电压、支路电流和器件参数。; M$ W8 z2 _* D7 ^: R$ V l% v, s
lv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。 c2 n$ R/ A4 Y ?! a1 i
4. MEASURE语句:
3 O" l- Z4 d8 x+ X用于显示用户自定义的变量。
. d/ |5 v* p3 N J( O( U6 q可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。" a& O% O) ?2 v7 L: w6 Z9 r: u
5. 参数语句:
9 O- _9 s/ @9 _/ i# k* j用于显示用户自定义的节点电压等表达式。
' I% X6 c/ k. [6 ^6 t语法格式:.print tran out_var_name=PAR(‘expression’)
, o8 ^/ h" o/ u7 _( u(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &) C, s/ u6 t; a. Y
(3)子电路:
1 b& F* `" @( o/ a8 _' f/ w1. 采用.GLOBAL设置全局节点:0 w2 _+ A5 r% g
.GLOBAL node1 node2 node3…, q6 e' r, o; M% q7 c& `" W
2. 子电路语句.SUBCKT和.MACRO:2 D/ z3 e4 t* E+ X6 }1 Y( f& i" v
.SUBCKT subnam n1 n2 n3… parnam=val…( d* m- q8 W7 w0 ^
.MACRO subnam n1 n2 n3… parnam=val…
$ s) U3 ^* E* j子电路的调用:
( O) F+ r- \. ?! o) v5 U7 ^! lXyyy n1 n2 n3… sunnam parnam=val… M=val
, j0 O l3 N' @ o四、控制语句和option语句
v4 U! n0 V4 u3 |0 E1.OPTION语句:3 N# V6 X3 x9 j
.options语句格式:.options opt1 opt2 opt3… opt=x
# A4 ^) `+ g$ ^4 {9 t一般在每个仿真文件中设置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定义的情况。
4 W, S3 z1 _2 |6 e2.MODEL OPTION语句:2 W1 n. D* t9 P
SCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。
& D7 I6 k" t |0 u/ v9 K五、仿真控制和收敛
7 n8 Z2 B. v6 y5 }$ CHspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。
! x& J% |& b7 X& b9 u+ a0 }! ?# a(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:) u2 Y1 Z* q1 V+ c% ]
1.电路的拓扑结构:/ c5 A5 b4 U# ?0 W' n, \
电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。
6 s8 U/ G3 }" O- x+ S# K6 i解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。8 e( @1 L: d8 E/ O7 n/ ^
2.仿真模型: V% k+ s4 j% ]2 m, w8 z
由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。$ g1 A# ]* }% N. x& Q, M
解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。
" n2 ^8 [( l) J- z: {* Y: `3.仿真器的options设置:: W- f: k* h; q
仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。6 f& v& A; e7 F- _' y9 T8 ~
解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
4 W9 a) Z! |* m1 p( r0 c: K/ w(2) 针对仿真分析中可能出现的不收敛情况进行分析:% a- A# s/ p/ H i3 O: \! R! k" F3 }
1.直流工作点分析:
4 a( q( t# B0 N. F- b3 U每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。
8 C( J6 o: W, D9 l% m: p, S对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使
& d- |+ t. t! l用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
. y* @: n0 N; Z) j7 [2.直流扫描分析:( g( X9 R h: @+ g
在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。
0 |* T! Z: |3 o* Q8 N" G) ?9 i解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。# V% i5 Q8 b* f
3.AC频率分析:
8 ^) l! ^) w. |由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。" \) [' G3 q. y# X0 y
4.瞬态分析:- ]& [7 S. x* U, g9 Y/ c
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。
: F2 b9 b: A6 S8 q- {. P6 L瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
& S! W- j# Z% [9 i对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。
! J% x& E, [) O0 b- e# g9 U六、输入语句* U/ G8 y3 F! E- F2 i% Z
对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。& V' }" k7 Z* K% |4 ~/ t9 Z
对于.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 C- S% P- B; ]; G ^
对于.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中增加分析语句。
& D$ q8 D3 _ K# W/ s, r w" k; u七、统计分析仿真# Y7 V; N5 Y; j1 X
主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:
2 l1 z& d2 E0 Y/ D! O; {' S# ?.param tox=agauss(200,10,1)& \8 P9 V* h: e% N5 r) k( R( X
.tran 20p 1n sweep MONTE=20
, n/ U! c5 w) D3 k.model … tox=tox …
6 Y% \' ^8 w8 ^; J其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),
" V0 Q$ l4 a/ o6 G1 g( J. @% X! Y8 R.param ver=agauss(nom_val,abs_variation,sigma,mult),
" B, ]: D& v2 C- |对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),
1 p! }8 z9 W p: |, D.param ver=aunif(nom_val,abs_variation,mult),+ {: u# Q7 B! P- ?4 e. B
对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。
( b' A( C' ~2 v9 ~) Z* y
7 L" k+ d9 N0 `! Q0 D) {; x8 k5 F2 p& R9 Y" O; G3 N( z' ~7 {
|
|