一、HSPICE基礎知識
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等進行仿真,以便得到精確的結果。
本文將從最基本的設計和使用開始,逐步帶領讀者熟悉Hspice的使用,並對仿真結果加以討論,並以一個運算放大器為例,以便建立IC設計的基本概念。在文章的最后還將對Hspice的收斂性做深入細致的討論。
Hspice輸入網表文件為.sp文件,模型和庫文件為.inc和.lib,Hspice輸出文件有運行狀態文件.st0、輸出列表文件.lis、瞬態分析文件.tr#、直流分析文件.sw#、交流分析文件.ac#、測量輸出文件.m*#等。其中,所有的分析數據文件均可作為AvanWaves的輸入文件用來顯示波形。
表1 Hspice所使用的單位
獨立電壓和電流源包括:
1. 直流源(DC):
電壓源Vxxx n+ n- dcval
電流源 Ixxx n+ n- dcval
2. 交流源(AC):Vxxx n+ n- AC=acmag,acphase
3. 瞬態源(隨時間變化):
脈沖源:pulse v1 v2 td tr tf pw per
線性源:pwl t1 v1 <t2 v2 t3 v3…>
正弦源:sin vo va freq td damping phasedelay
4. 混合源:可以包括以上所有的形式,如:VIN 13 2 0.001 AC 1 SIN(0 1 1Meg)
二、輸入網表文件
TITLE
.INCLUDE
.LIB MACRO
元件描述
信號源描述
分析命令
測量命令
.ALTER
.END
圖1 輸入網表(Netlist)文件標准格式
二、有源器件和分析類型
有源器件包括二極管(D)、MOS管(M)、BJT管(Q)、JFET和MESFET(J)、子電路(X)和宏、Behavioral器件(E,G)、傳輸線(T,U,W)等。這里值得注意的是MOS、JFET和MESFET的L和W的scale是m,而不是um。
分析的類型包括:直流、交流和瞬態分析。
1.直流分析:
對DC、AC和TRAN分析將自動進行直流操作點(DC OP)的計算,但.TRAN UIC將直接設置初始條件,不進行DC OP的計算。
.DC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
直流分析包含以下五種語句:
.DC:直流掃描分析;
.OP:直流操作點分析;
.PZ:Pole/Zero分析;
.SENS:直流小信號敏感度分析;
.TF:直流小信號傳輸函數分析。
2.交流分析:
交流分析是指輸出變量作為頻率的函數。
.AC var1 start1 stop1 inc1 sweep var2 type np start2 stop2
交流分析包括以下四種語句:
.NOISE:噪聲分析;
.DISTO:失真分析;
.NET:網絡分析;
.SAMPLE:采樣噪聲分析。
3.瞬態分析:
瞬態分析是指計算的電路結果作為時間的函數。
.TRAN tinc1 tstop1 tinc2 tstop2… START=.. UIC SWEEP..
三、輸出格式和子電路
(1) 輸出命令包括:.PRINT、.PLOT、GRAPH、.PROBE和.MEASURE。
.PLOT antype ov1 ov2… plo1,phhi1…plo32,phi32
.PROBE ov1 ov2… ov32
.PRINT antype ov1 ov2… ov32
有五種輸出變量形式:
1. 直流和瞬態分析:
用於顯示單個節點電壓,支路電流和器件功耗。
.print V(node) 或 .plot I(node),也可用.graph、.probe。
V(node)表示節點電壓,I(node)表示節點電流,p(rload)表示在負載rload上的分析點的功耗。
2. 交流分析:
用於顯示節點電壓和支路電流的實部、虛部和相位。
vi(node)表示節點電壓的虛部,ip(node)表示節點電流的相位,vp(4,6)表示節點4,6間的相位角。
3. 器件模版:
用於顯示制定的器件節點的電壓、支路電流和器件參數。
lv16(m3)表示MOS管m3的漏電流,其他表示方式見手冊。
4. MEASURE語句:
用於顯示用戶自定義的變量。
可以采用的句法包括:raise,fall,delay,average,RMS,min,max,p-p等。
5. 參數語句:
用於顯示用戶自定義的節點電壓等表達式。
語法格式:.print tran out_var_name=PAR(‘expression’)
(2)還可以采用AvanWave進行波形輸出,啟動AvanWave的命令為:awaves <filename> &
(3)子電路:
1. 采用.GLOBAL設置全局節點:
.GLOBAL node1 node2 node3…
2. 子電路語句.SUBCKT和.MACRO:
.SUBCKT subnam n1 n2 n3… parnam=val…
.MACRO subnam n1 n2 n3… parnam=val…
子電路的調用:
Xyyy n1 n2 n3… sunnam parnam=val… M=val
四、控制語句和option語句
1.OPTION語句:
.options語句格式:.options opt1 opt2 opt3… opt=x
一般在每個仿真文件中設置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語句完成時,終止仿真,.optionaccurate=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定義的情況。
2.MODEL OPTION語句:
SCALE影響器件參數,如:L、W、area,SCALM影響model參數,如:tox、vto、tnom。
五、仿真控制和收斂
Hspice仿真過程采用Newton-Raphson算法通過迭代解矩陣方程,使節點電壓和支路電流滿足Kirchoff定律。迭代算法計算不成功的節點,主要是因為計算時超過了Hspice限制的每種仿真迭代的總次數從而超過了迭代的限制,或是時間步長值小於Hspice允許的最小值。
(1) 造成Hspice仿真不收斂主要有“No Convergence in DC Solution”和“Timestep too Small”,其可能的原因是:
1.電路的拓撲結構:
電路拓撲結構造成仿真不收斂主要有:電路連線錯誤,scale、scalm和param語句錯誤,其他錯誤可以通過查找列表文件中的warning和errors發現。
解決的方法是:將電路分成不同的小模塊,分別進行仿真;簡化輸入源;調整二極管的寄生電阻;調整錯誤容差,重新設置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
2.仿真模型:
由於所有的半導體器件模型都可能包含電感為零的區域,因此可能引起迭代的不收斂。
解決的方法是:在PN結或MOS的漏與源之間跨接一個小電阻;將.option中默認的GMINDC、GMIN增大。
3.仿真器的options設置:
仿真錯誤容差決定了仿真的精度和速度,要了解你所能接受的容差是多少。
解決的方法是:調整錯誤容差,重新設置RELV,ABSV,RELI,ABSI,RELMOS,ABSMOS等。
(2) 針對仿真分析中可能出現的不收斂情況進行分析:
1.直流工作點分析:
每種分析方式都以直流操作點分析開始,由於Hspice有很少的關於偏置點的信息,所以進行DC OP分析是很困難的,分析結果將輸出到.ic文件中。
對DC OP分析不收斂的情況,解決方法是:刪除.option語句中除acct,list,node,post之外的所有設置,采用默認設置,查找.lis文件中關於不收斂的原因;使
用.nodeset和.ic語句自行設置部分工作點的偏置;DC OP不收斂還有可能是由於model引起的,如在亞閾值區模型出現電導為負的情況。
2.直流掃描分析:
在開始直流掃描分析之前,Hspice先做DC OP計算,引起直流掃描分析不收斂的原因可能是快速的電壓或電流變化,模型的不連續。
解決的方法是:對於電壓或電流變化太快,通過增加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改變仿真的范圍。
3.AC頻率分析:
由於AC掃描是進行頻率分析,一旦有了DC OP,AC分析一般都會收斂,造成不收斂的原因主要是DC OP分析不收斂,解決的方法可以參看前面關於DC OP的分析。
4.瞬態分析:
瞬態分析先進行直流工作點的計算,將計算結果作為瞬態分析在T0時刻的初始值,再通過Newton-Raphson算法進行迭代計算,在迭代計算過程中時間步長值是動態變化的,.tran tstep中的步長值並不是仿真的步長值,只是打印輸出仿真結果的時間間隔的值,可以通過調整.options lvltim imax imin來調整步長值。
瞬態分析不收斂主要是由於快速的電壓變化和模型的不連續,對於快速的電壓變化可以通過改變分析的步長值來保證收斂。對模型的不連續,可以通過設置CAPOP和ACM電容,對於給定的直流模型一般選擇CAPOP=4,ACM=3,對於level 49,ACM=0。
對瞬態分析,默認采用Trapezoidal算法,精度比較高,但容易產生寄生振盪,采用GEAR算法作為濾波器可以濾去由於算法產生的振盪,具有更高的穩定性。
六、輸入語句
對於.param語句,.param PARHIER=GLOBAL是默認的,使得參數可以按照Top-Down變化,.param PARHIER=LOCAL,可以是參數只在局部有效。
對於.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>。
對於.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中增加分析語句。
七、統計分析仿真
主要是對器件和模型進行Monte Carlo分析,隨機數的產生主要依賴Gaussian、Uniform、Limit分析,通過.param設置分布類型,將dc、ac、tran設置為Monte Carlo分析,用.measure輸出分析結果,如:
.param tox=agauss(200,10,1)
.tran 20p 1n sweep MONTE=20
.model … tox=tox …
其中,對Gaussian分析.param ver=gauss(nom_val,rel_variation,sigma,mult),
.param ver=agauss(nom_val,abs_variation,sigma,mult),
對Uniform分析,.param ver=unif(nom_val,rel_variation,mult),
.param ver=aunif(nom_val,abs_variation,mult),
對Limit分析,.param ver=limit(nom_val,abs_variation),如果你拼錯Gauss或Uniform、Limit,不會產生警告,但不將產生分布。
參 考 文 獻
1. K. S. Kundert, The Designer’s Guide to Spice & Spectre;
