TA的每日心情 | 开心 2019-12-3 15:20 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
完整版本请见附件。 2 \9 s' d C2 y9 X! x7 Y
最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case by case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。
: l% m% N* |/ p8 J7 {7 Z9 [: i一、HSPICE基础知识5 B! O/ L( t* t2 e$ v
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等进行仿真,以便得到精确的结果。* s8 a$ B% O: n4 s7 K- e1 F; P
本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在文章的最后还将对Hspice的收敛性做深入细致的讨论。
' N3 S: m- }7 N: _Hspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。
9 T9 n! K* ?, c- D" H: i2 O/ i表1 Hspice所使用的单位. D* u# r8 H- a8 {1 T; P
独立电压和电流源包括:
# J' l: y6 \5 k- H9 {8 N1. 直流源(DC):4 W( @5 {1 H' @
电压源Vxxx n+ n- dcval, H7 \' T: K8 q- p
电流源 Ixxx n+ n- dcval" X% D3 _7 p# k9 _1 S
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase
& a7 k4 N3 h: k% H- }& ]2 E( a# o/ z2 _3. 瞬态源(随时间变化):
, p. w0 _7 ?; u% S& H# {* ]" @脉冲源:pulse v1 v2 td tr tf pw per
' w7 {" m& L2 o线性源:pwl t1 v1 <t2 v2 t3 v3…>
; M; A4 [" X) i+ B正弦源:sin vo va freq td damping phasedelay
6 R, o4 R5 p; S7 Z, ^. P ]5 H4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)# {- N7 N* G$ D0 l
二、输入网表文件
( r- Z5 {+ s: b, TTITLE
9 ~. o S7 t# [' X' ~.INCLUDE7 b- w7 u$ f) Z3 ]; \- B' b
.LIB MACRO4 ]; a/ Y" z# p$ A' M. D8 |$ o% W
元件描述
$ Z* o4 F( |+ C信号源描述
: r7 v2 J- A# `2 Y w分析命令
4 _# y5 }) Q( i M9 c7 k& N+ Z测量命令
7 y2 j: i( H, T.ALTER
3 d5 N2 \0 A; Z- C" h- v8 l( b.END* d( w `2 G0 h. F# ^0 b
图1 输入网表(Netlist)文件标准格式
; ~/ g- Y/ w! A6 \/ R二、有源器件和分析类型1 o3 v1 `4 } d9 }& b/ N2 {& p
有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。
4 X; m) ]' ]! A& v" R1 i+ b分析的类型包括:直流、交流和瞬态分析。
; }! C1 J# C7 u1.直流分析:7 E1 o$ n9 e6 }+ e: o; s$ h8 C
对DC、AC和TRAN分析将自动进行直流操作点(DC OP)的计算,但.TRAN UIC将直接设置初始条件,不进行DC OP的计算。
o/ k& c2 H" u k: Q.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
2 X+ \7 L& P7 Y Z! H直流分析包含以下五种语句:1 O+ P* Z1 t+ L( V" e- t" e
.DC:直流扫描分析;
5 t! m8 l i1 X) @# p.OP:直流操作点分析;
. J [1 a# h' _.PZ:Pole/Zero分析;0 A6 u- U3 F8 A; C
.SENS:直流小信号敏感度分析;
6 m3 y9 q8 g% ]2 N" e7 v) m& `. w.TF:直流小信号传输函数分析。
: j( s0 a: u4 ~3 `4 E; K, l" z! t2.交流分析:
* j' i/ W' i: m交流分析是指输出变量作为频率的函数。
! x& t; v1 _" x9 n' ~4 b0 q.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2* m X! e2 U; g, Q
交流分析包括以下四种语句:- U. {+ W* h7 B6 h4 |# G0 I3 b
.NOISE:噪声分析;
" {7 q3 S% Y: n7 n: h: A- R.DISTO:失真分析;9 p: O# @6 [" f) I/ E1 Y
.NET:网络分析;
# g& \8 W6 a/ d6 T- Q/ `: C k.SAMPLE:采样噪声分析。& l8 q g0 m$ S: P
3.瞬态分析:
+ I$ h! x. Z' {: N5 l( [& O+ L瞬态分析是指计算的电路结果作为时间的函数。
( t$ @0 L8 q& |% W; B.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..5 o. z0 ]! n9 x9 d% \
三、输出格式和子电路
/ I6 k2 l: X+ r7 ~9 `; l9 f( T- Q(1) 输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。
, u' Q _& F6 a8 j.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32
; R- h$ o0 y, b0 A.PROBE ov1 ov2… ov32
( W: u" ^/ X. h5 v# q8 D: O4 ?1 H.PRINT antype ov1 ov2… ov32
1 b6 F, V5 J; B有五种输出变量形式:
8 F! Y! C/ d+ `" V1 d1. 直流和瞬态分析:
( o3 d/ g; r/ K6 F( m& F3 v用于显示单个节点电压,支路电流和器件功耗。5 Y# d0 G0 G; A2 X3 F
.print V(node) 或 .plot I(node),也可用.graph、.probe。
+ c! K- {& D! f; \: H$ aV(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。
3 C5 Y6 D# }2 {, i2. 交流分析:
* u K) [" {* {) ]5 A( |' ^& u用于显示节点电压和支路电流的实部、虚部和相位。
" M: Q, q; E: H% e5 Hvi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。
# }' \/ O" z7 T$ m1 P0 u- }* P& s* X3. 器件模版:
: K5 B% G, r3 g6 f- A O9 V用于显示制定的器件节点的电压、支路电流和器件参数。$ s' \+ A, k7 y# L, j+ L) F( e
lv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。
( u$ l. X9 ^2 X- L, ~8 y- S$ G0 T4. MEASURE语句:
& N* e9 i" g; l用于显示用户自定义的变量。
& f% \* j% I$ u- ~可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。- N& B; L' y* J! _. \
5. 参数语句:
6 y# u5 P/ i+ F! v k" x用于显示用户自定义的节点电压等表达式。
6 ~6 J' P) _0 D1 V: Q语法格式:.print tran out_var_name=PAR(‘expression’)* T Z6 ]' L0 j V
(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves <filename> &
, O3 `2 C c8 J(3)子电路:; C6 h! Q) k* r" X" v' |+ q
1. 采用.GLOBAL设置全局节点:( `5 u9 m' A8 Y4 _2 \4 f
.GLOBAL node1 node2 node3…
7 v, D3 V) R1 l! |9 D2. 子电路语句.SUBCKT和.MACRO:
. E" |9 V9 W4 R! J6 y4 J1 E.SUBCKT subnam n1 n2 n3… parnam=val…
5 \9 Q5 S. y, { n.MACRO subnam n1 n2 n3… parnam=val…
' |+ `) E3 C" b" Z子电路的调用:
# M: ], v& k8 O$ c# l- SXyyy n1 n2 n3… sunnam parnam=val… M=val8 _! L- I6 U$ ~) y' R0 j r6 k
四、控制语句和option语句7 g2 j3 _+ d- O
1.OPTION语句:
" F: o8 R5 N+ U7 W& d" t.options语句格式:.options opt1 opt2 opt3… opt=x3 Z: j7 `# |6 J) L/ S; g4 |
一般在每个仿真文件中设置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定义的情况。
: \" [- G" \6 Y8 f) ^" n) U! W2.MODEL OPTION语句:- s5 n' a( S0 L! j9 n9 i' J
SCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。# l) [2 @9 Z3 I( a' ?" q
五、仿真控制和收敛
' u; D4 a8 n& j: F! o" ]. |' w% XHspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。
/ l0 p& D3 i$ A; d(1) 造成Hspice仿真不收敛主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:
$ B+ h3 f2 Q8 i& \+ m( Z2 k1.电路的拓扑结构:
+ k' w5 Z* R8 I6 i& W8 g电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。# t9 @1 d$ u# l# Z8 J' T, [
解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
y7 ^9 ^- D. d' q" E& R @/ ~2.仿真模型:
( }+ |) r( a4 S$ Q. m. H# \由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。7 u. {) h3 \3 s4 g7 u
解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。- `4 Y& O. ~0 s$ [0 c5 k
3.仿真器的options设置: J; T( o7 W( l' [# o
仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。
$ D+ z8 x% m* t8 f解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
3 r# l3 k4 J( N(2) 针对仿真分析中可能出现的不收敛情况进行分析:
' D+ h1 Z# ]3 B0 i6 ]1.直流工作点分析:
* R5 J9 `, M. F0 s) i* W u每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC OP分析是很困难的,分析结果将输出到.ic文件中。
6 F% R! _2 h7 P0 R对DC OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使
% h% H$ X- d4 f3 E5 }$ h用.nodeset和.ic语句自行设置部分工作点的偏置;DC OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。
8 i5 E& n( n0 z7 l5 t2.直流扫描分析:
8 y i, a) i4 I$ ]6 L在开始直流扫描分析之前,Hspice先做DC OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。! {6 N4 o1 Y! y8 Z& \3 O+ F2 ]
解决的方法是:对于电压或电流变化太快,通过增加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改变仿真的范围。8 [5 `% C- x' c6 y( Z3 Y
3.AC频率分析:
" X# p+ y% I2 M8 x( g, j由于AC扫描是进行频率分析,一旦有了DC OP,AC分析一般都会收敛,造成不收敛的原因主要是DC OP分析不收敛,解决的方法可以参看前面关于DC OP的分析。
[6 n7 D7 _- e' q4 s4.瞬态分析:) d' b b. Z `2 g3 ? |6 S
瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options lvltim imax imin来调整步长值。! n/ [* g# h5 f A1 h
瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level 49,ACM=0。
6 ~& V* i& U" S' W1 q w9 v: U对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。9 B8 a' v2 O/ s; N2 m4 c
六、输入语句! H' J* o7 D% [8 X/ D2 E
对于.param语句,.param PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param PARHIER=LOCAL,可以是参数只在局部有效。8 W( O. _# a) ^# X8 U! _' K- s" c
对于.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>。. f. b) A7 ~4 Y4 P2 A( _
对于.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中增加分析语句。
7 O) c8 \9 h. o# t七、统计分析仿真9 V( J5 c+ d+ v/ A |$ a( G
主要是对器件和模型进行Monte Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte Carlo分析,用.measure输出分析结果,如:
7 ^0 s( A2 U* b. a& [9 D' q1 T.param tox=agauss(200,10,1), r% a4 H; c6 g. H* t
.tran 20p 1n sweep MONTE=20# F4 J! @3 @. L- X c+ `; z! @
.model … tox=tox …
* l: O7 f: O7 c/ C2 z9 M2 E# u- h其中,对Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),: c, b; c. L: e7 B4 D* U
.param ver=agauss(nom_val,abs_variation,sigma,mult),& f5 C- @% j3 p6 S
对Uniform分析,.param ver=unif(nom_val,rel_variation,mult),, Z4 _5 z6 p6 v# c) P- y
.param ver=aunif(nom_val,abs_variation,mult),
8 l% I! d# M! z2 S1 `* A对Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。: a0 c( C( y$ e3 o% Z/ w
; h j: x$ f/ L: v; K# z8 ^# R# X+ b1 e
5 |# `% i: F+ V4 q5 w7 R
|
|