[原创]Hspice实战手册

[复制链接]
4471|1
 楼主| judie 发表于 2007-4-2 22:32 | 显示全部楼层 |阅读模式
<br />Perface&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;最初写作本文的目的是希望提供一份中文版的Hspice手册从而方便初学者的使用,本文的缘起是几位曾经一起工作过的同事分别进入不同的新公司,而公司主要是使用Hspice,对于已经熟悉了Cadence的GUI界面的使用者转而面对Hspice的文本格式,其难度是不言而喻的,而Hspice冗长的manual(长达2000页以上)更让人在短时间内理不出头绪。鉴于我曾经使用过相当一段时间的Hspice,于是我向他们提供了一份简单而明了的handbook来帮助他们学习,本来是准备借助一个具体运放的设计例子,逐步完善成为一份case&nbsp;by&nbsp;case的教程,但由于工作比较浩大,加之时间的关系,一直难以完成,愈拖愈久,在几个朋友的劝说下,与其等其日臻完善后再发布,不如先行发布在逐步完善,以便可以让更多的朋友及早使用收益。本文虽通过网络发表,但作者保留全部的著作权,转载时务请通知本人。由于水平的有限,讨论范围的局限及错误不可避免,恳请读者指正。联系方式为e-mail:&nbsp;nkchenliy@126.com(<a href="mailto:nkchenliy@126.com">nkchenliy@126.com</a>)。<br />一、HSPICE基础知识<br />Avant!&nbsp;Start-Hspice(现在属于Synopsys公司)是IC设计中最常使用的电路仿真工具,是目前业界使用最为广泛的IC设计工具,甚至可以说是事实上的标准。目前,一般书籍都采用Level&nbsp;2的MOS&nbsp;Model进行计算和估算,与Foundry经常提供的Level&nbsp;49和Mos&nbsp;9、EKV等Library不同,而以上Model要比Level&nbsp;2的Model复杂的多,因此Designer除利用Level&nbsp;2的Model进行电路的估算以外,还一定要使用电路仿真软件Hspice、Spectre等进行仿真,以便得到精确的结果。<br />本文将从最基本的设计和使用开始,逐步带领读者熟悉Hspice的使用,并对仿真结果加以讨论,并以一个运算放大器为例,以便建立IC设计的基本概念。在**的最后还将对Hspice的收敛性做深入细致的讨论。<br />Hspice输入网表文件为.sp文件,模型和库文件为.inc和.lib,Hspice输出文件有运行状态文件.st0、输出列表文件.lis、瞬态分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、测量输出文件.m*#等。其中,所有的分析数据文件均可作为AvanWaves的输入文件用来显示波形。<br />表1&nbsp;Hspice所使用的单位<br />独立电压和电流源包括:<br />1.&nbsp;直流源(DC):<br />电压源Vxxx&nbsp;n+&nbsp;n-&nbsp;dcval<br />电流源&nbsp;Ixxx&nbsp;n+&nbsp;n-&nbsp;dcval<br />2.&nbsp;交流源(AC):Vxxx&nbsp;n+&nbsp;n-&nbsp;AC=acmag,acphase<br />3.&nbsp;瞬态源(随时间变化):<br />脉冲源:pulse&nbsp;v1&nbsp;v2&nbsp;td&nbsp;tr&nbsp;tf&nbsp;pw&nbsp;per<br />线性源:pwl&nbsp;t1&nbsp;v1&nbsp;&ltt2&nbsp;v2&nbsp;t3&nbsp;v3…&gt<br />正弦源:sin&nbsp;vo&nbsp;va&nbsp;freq&nbsp;td&nbsp;damping&nbsp;phasedelay<br />4.&nbsp;混合源:可以包括以上所有的形式,如:VIN&nbsp;13&nbsp;2&nbsp;0.001&nbsp;AC&nbsp;1&nbsp;SIN(0&nbsp;1&nbsp;1Meg)<br />二、输入网表文件<br />TITLE<br />.INCLUDE<br />.LIB&nbsp;MACRO<br />元件描述<br />信号源描述<br />分析命令<br />测量命令<br />.ALTER<br />.END<br />图1&nbsp;输入网表(Netlist)文件标准格式<br />二、有源器件和分析类型<br />有源器件包括二极管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子电路(X)和宏、Behavioral器件(E,G)、传输线(T,U,W)等。这里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。<br />分析的类型包括:直流、交流和瞬态分析。<br />1.直流分析:<br />对DC、AC和TRAN分析将自动进行直流操作点(DC&nbsp;OP)的计算,但.TRAN&nbsp;UIC将直接设置初始条件,不进行DC&nbsp;OP的计算。<br />.DC&nbsp;var1&nbsp;start1&nbsp;stop1&nbsp;inc1&nbsp;sweep&nbsp;var2&nbsp;type&nbsp;np&nbsp;start2&nbsp;stop2<br />直流分析包含以下五种语句:<br />.DC:直流扫描分析;<br />.OP:直流操作点分析;<br />.PZ:Pole/Zero分析;<br />.SENS:直流小信号敏感度分析;<br />.TF:直流小信号传输函数分析。<br />2.交流分析:<br />交流分析是指输出变量作为频率的函数。<br />.AC&nbsp;var1&nbsp;start1&nbsp;stop1&nbsp;inc1&nbsp;sweep&nbsp;var2&nbsp;type&nbsp;np&nbsp;start2&nbsp;stop2<br />交流分析包括以下四种语句:<br />.NOISE:噪声分析;<br />.DISTO:失真分析;<br />.NET:网络分析;<br />.SAMPLE:采样噪声分析。<br />3.瞬态分析:<br />瞬态分析是指计算的电路结果作为时间的函数。<br />.TRAN&nbsp;tinc1&nbsp;tstop1&nbsp;tinc2&nbsp;tstop2…&nbsp;START=..&nbsp;UIC&nbsp;SWEEP..<br />三、输出格式和子电路<br />(1)&nbsp;输出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。<br />.PLOT&nbsp;antype&nbsp;ov1&nbsp;ov2…&nbsp;plo1,phhi1…plo32,phi32<br />.PROBE&nbsp;ov1&nbsp;ov2…&nbsp;ov32<br />.PRINT&nbsp;antype&nbsp;ov1&nbsp;ov2…&nbsp;ov32<br />有五种输出变量形式:<br />1.&nbsp;直流和瞬态分析:<br />用于显示单个节点电压,支路电流和器件功耗。<br />.print&nbsp;V(node)&nbsp;或&nbsp;.plot&nbsp;I(node),也可用.graph、.probe。<br />V(node)表示节点电压,I(node)表示节点电流,p(rload)表示在负载rload上的分析点的功耗。<br />2.&nbsp;交流分析:<br />用于显示节点电压和支路电流的实部、虚部和相位。<br />vi(node)表示节点电压的虚部,ip(node)表示节点电流的相位,vp(4,6)表示节点4,6间的相位角。<br />3.&nbsp;器件模版:<br />用于显示制定的器件节点的电压、支路电流和器件参数。<br />lv16(m3)表示MOS管m3的漏电流,其他表示方式见手册。<br />4.&nbsp;MEASURE语句:<br />用于显示用户自定义的变量。<br />可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。<br />5.&nbsp;参数语句:<br />用于显示用户自定义的节点电压等表达式。<br />语法格式:.print&nbsp;tran&nbsp;out_var_name=PAR(‘expression’)<br />(2)还可以采用AvanWave进行波形输出,启动AvanWave的命令为:awaves&nbsp;&ltfilename&gt&nbsp;&<br />(3)子电路:<br />1.&nbsp;采用.GLOBAL设置全局节点:<br />.GLOBAL&nbsp;node1&nbsp;node2&nbsp;node3…<br />2.&nbsp;子电路语句.SUBCKT和.MACRO:<br />.SUBCKT&nbsp;subnam&nbsp;n1&nbsp;n2&nbsp;n3…&nbsp;parnam=val…<br />.MACRO&nbsp;subnam&nbsp;n1&nbsp;n2&nbsp;n3…&nbsp;parnam=val…<br />子电路的调用:<br />Xyyy&nbsp;n1&nbsp;n2&nbsp;n3…&nbsp;sunnam&nbsp;parnam=val…&nbsp;M=val<br />四、控制语句和option语句<br />1.OPTION语句:<br />.options语句格式:.options&nbsp;opt1&nbsp;opt2&nbsp;opt3…&nbsp;opt=x<br />一般在每个仿真文件中设置options为.options&nbsp;acct&nbsp;list&nbsp;post,也可以设置为.options&nbsp;node&nbsp;opts,其中.option&nbsp;list表示将器件网表、节点连接方式等输入到列表文件,用于debug与电路拓扑结构有关的问题,.option&nbsp;node表示将输出节点连接表到列表文件,用于debug与由于电路拓扑结构引起的不收敛问题,.option&nbsp;acct表示在列表文件中输出运行时间统计和仿真效率,.option&nbsp;opts在列表文件中报告所有的.option设置,.option&nbsp;nomod表示不输出MODEL参数,以便减小列表文件的大小,.option&nbsp;brief=1表示不输出网表信息,直到设置.option&nbsp;brief=0,.protect/.unprotect用于屏蔽网表文件中要保护的信息,.option&nbsp;bypass=1不计算latent器件,.option&nbsp;autostop表示当所有.measure语句完成时,终止仿真,.option&nbsp;accurate=1表示设置为最精确的仿真算法和容差,tstep表示仿真步长值,delmax表示最大允许时间步长,其中delmax=tstep*max,.option&nbsp;dvdt=4用于数字CMOS电路仿真(默认设置),.option&nbsp;dcca=1在直流扫描时强行计算随电压变化的电容,.option&nbsp;captab对二极管、BJT管、MOS、JFET、无源电容器,打印出信号的节点电容值,.option&nbsp;dcstep=val将直流模型和器件转换为电导,主要应用于“No&nbsp;DC&nbsp;Path&nbsp;to&nbsp;Ground”或有直流通路,但不符合Hspice定义的情况。<br />2.MODEL&nbsp;OPTION语句:<br />SCALE影响器件参数,如:L、W、area,SCALM影响model参数,如:tox、vto、tnom。<br />五、仿真控制和收敛<br />Hspice仿真过程采用Newton-Raphson算法通过迭代解矩阵方程,使节点电压和支路电流满足Kirchoff定律。迭代算法计算不成功的节点,主要是因为计算时超过了Hspice限制的每种仿真迭代的总次数从而超过了迭代的限制,或是时间步长值小于Hspice允许的最小值。<br />(1)&nbsp;造成Hspice仿真不收敛主要有“No&nbsp;Convergence&nbsp;in&nbsp;DC&nbsp;Solution”和“Timestep&nbsp;too&nbsp;Small”,其可能的原因是:<br />1.电路的拓扑结构:<br />电路拓扑结构造成仿真不收敛主要有:电路连线错误,scale、scalm和param语句错误,其他错误可以通过查找列表文件中的warning和errors发现。<br />解决的方法是:将电路分成不同的小模块,分别进行仿真;简化输入源;调整二极管的寄生电阻;调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。<br />2.仿真模型:<br />由于所有的半导体器件模型都可能包含电感为零的区域,因此可能引起迭代的不收敛。<br />解决的方法是:在PN结或MOS的漏与源之间跨接一个小电阻;将.option中默认的GMINDC、GMIN增大。<br />3.仿真器的options设置:<br />仿真错误容差决定了仿真的精度和速度,要了解你所能接受的容差是多少。<br />解决的方法是:调整错误容差,重新设置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。<br />(2)&nbsp;针对仿真分析中可能出现的不收敛情况进行分析:<br />1.直流工作点分析:<br />每种分析方式都以直流操作点分析开始,由于Hspice有很少的关于偏置点的信息,所以进行DC&nbsp;OP分析是很困难的,分析结果将输出到.ic文件中。<br />对DC&nbsp;OP分析不收敛的情况,解决方法是:删除.option语句中除acct,list,node,post之外的所有设置,采用默认设置,查找.lis文件中关于不收敛的原因;使<br />用.nodeset和.ic语句自行设置部分工作点的偏置;DC&nbsp;OP不收敛还有可能是由于model引起的,如在亚阈值区模型出现电导为负的情况。<br />2.直流扫描分析:<br />在开始直流扫描分析之前,Hspice先做DC&nbsp;OP计算,引起直流扫描分析不收敛的原因可能是快速的电压或电流变化,模型的不连续。<br />解决的方法是:对于电压或电流变化太快,通过增加ITL2来保证收敛,.option&nbsp;ITL2是在直流扫描分析中在每一步允许迭代的次数,通过增加迭代次数,可以在电压或电流变化很快的点收敛。对于模型的不收敛,主要是由于MOS管线性区和饱和区之间的不连续,Newton-Raphson算法再不连续点处进行迭点计算产生震荡,可以通过增减仿真步长值或改变仿真初始值来保证收敛,如:.dc&nbsp;vin&nbsp;0v&nbsp;5v&nbsp;0.1v的直流分析不收敛,可以改为.dc&nbsp;vin&nbsp;0v&nbsp;5v&nbsp;0.2v增大步长值,.dc&nbsp;vin&nbsp;0.01v&nbsp;5.01v&nbsp;0.1v改变仿真的范围。<br />3.AC频率分析:<br />由于AC扫描是进行频率分析,一旦有了DC&nbsp;OP,AC分析一般都会收敛,造成不收敛的原因主要是DC&nbsp;OP分析不收敛,解决的方法可以参看前面关于DC&nbsp;OP的分析。<br />4.瞬态分析:<br />瞬态分析先进行直流工作点的计算,将计算结果作为瞬态分析在T0时刻的初始值,再通过Newton-Raphson算法进行迭代计算,在迭代计算过程中时间步长值是动态变化的,.tran&nbsp;tstep中的步长值并不是仿真的步长值,只是打印输出仿真结果的时间间隔的值,可以通过调整.options&nbsp;lvltim&nbsp;imax&nbsp;imin来调整步长值。<br />瞬态分析不收敛主要是由于快速的电压变化和模型的不连续,对于快速的电压变化可以通过改变分析的步长值来保证收敛。对模型的不连续,可以通过设置CAPOP和ACM电容,对于给定的直流模型一般选择CAPOP=4,ACM=3,对于level&nbsp;49,ACM=0。<br />对瞬态分析,默认采用Trapezoidal算法,精度比较高,但容易产生寄生振荡,采用GEAR算法作为滤波器可以滤去由于算法产生的振荡,具有更高的稳定性。<br />六、输入语句<br />对于.param语句,.param&nbsp;PARHIER=GLOBAL是默认的,使得参数可以按照Top-Down变化,.param&nbsp;PARHIER=LOCAL,可以是参数只在局部有效。<br />对于.measure语句,可以采用的模式有rise,fall,delay,average,rms,min,peak-to-peak,Find-When,微分和积分等。对Find-When语句,.measure&nbsp;&ltdc|tran|ac&gt&nbsp;result&nbsp;find&nbsp;val&nbsp;when&nbsp;out_val=val&nbsp;&ltoptimization&nbsp;options&gt,对微分和积分语句,.measure&nbsp;&ltdc|tran|ac&gt&nbsp;result&nbsp;&ltderiv|integ&gt&nbsp;val&nbsp;&ltoptions&gt。<br />对于.ALTER语句,可以通过改变.ALTER来改变使用不同的库,其中.ALTER语句可以包含element语句、.data、.lib、.del&nbsp;lib、.include、.model、.nodeset、.ic、.op、.options、.param、.temp、.tf、.dc、.ac语句,不能包含.print、.plot、.graph或其他I/O语句,同时应该避免在.ALTER中增加分析语句。<br />七、统计分析仿真<br />主要是对器件和模型进行Monte&nbsp;Carlo分析,随机数的产生主要依赖Gaussian、Uniform、Limit分析,通过.param设置分布类型,将dc、ac、tran设置为Monte&nbsp;Carlo分析,用.measure输出分析结果,如:<br />.param&nbsp;tox=agauss(200,10,1)<br />.tran&nbsp;20p&nbsp;1n&nbsp;sweep&nbsp;MONTE=20<br />.model&nbsp;…&nbsp;tox=tox&nbsp;…<br />其中,对Gaussian分析.param&nbsp;ver=gauss(nom_val,rel_variation,sigma,mult),<br />.param&nbsp;ver=agauss(nom_val,abs_variation,sigma,mult),<br />对Uniform分析,.param&nbsp;ver=unif(nom_val,rel_variation,mult),<br />.param&nbsp;ver=aunif(nom_val,abs_variation,mult),<br />对Limit分析,.param&nbsp;ver=limit(nom_val,abs_variation),如果你拼错Gauss或Uniform、Limit,不会产生警告,但不将产生分布。<br />参&nbsp;考&nbsp;文&nbsp;献<br />1.&nbsp;K.&nbsp;S.&nbsp;Kundert,&nbsp;The&nbsp;Designer’s&nbsp;Guide&nbsp;to&nbsp;Spice&nbsp;&&nbsp;Spectre;<br />2.&nbsp;Synopsys,&nbsp;HSPICETM&nbsp;Simulation&nbsp;and&nbsp;Analysis&nbsp;User&nbsp;Guide;<br /><b><BIG>查看全文</BIG></b><br />&nbsp;<br /><B></B><B></B>&nbsp;<br />[url=http://bbs.**/ShowTopic.aspx?id=12339][/url]&nbsp;<br /> 相关链接:<a href='http://bbs.**/ShowTopic.aspx?id=12339'>http://bbs.**/ShowTopic.aspx?id=12339</a>
sunshinyzy 发表于 2011-8-22 16:14 | 显示全部楼层
值得学习!赞一个!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

34

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部