SPICE簡易マニュアル

1
SPICE による回路シミュレーション
NS-tools(NS-Draw、ns-spice、VS32)を利用したアナログ回路設計演習
目次
1.はじめに
2.特徴
3.SPICE による LSI の回路設計
4.SPICE 記述
5.スケールファクタ
6.SPICE における素子(一部)
7.ノード“0”
8.モデルパラメータ
9.サブサーキット
10.その他
1.はじめに
SPICE:スパイス(Simulation Program with Integrated Circuit Emphasis:集積回路に重きを
おいたシミュレーションプログラム)は,汎用回路シミュレーションプログラムです。
抵抗,コンデンサ,インダクタ,相互インダクタ,独立電圧源,独立電流源,従属電源,
無損失・有損失伝送線路,スイッチ,一様分布 RC 線,半導体素子(ダイオード,バイ
ポーラ接合型トランジスタ(BJT),JFET, MESFET, MOSFET)等により構成された回路を
解析可能です。
SPICE は、1970年代にカリフォルニア大学バークレー校で開発され、以後現在ま
で、集積回路のアナログ回路シミュレータの主役座を占めています。SPICE には、Fortran
言語により作成された初期の SPICE2、C 言語により書き直された新しい SPICE3 があ
り、これらのソースコードが公開されていることから、多くの市販ソフト(HSPICE,
PSPICE 等)や、フリーソフト(ngspice 等)が派生しています。
2.特徴
SPICE は、電圧波形をそのまま扱えるアナログシミュレータです。たとえば、図1の
ように、MOSFET のドレイン電流(ID-VD)特性をそのまま表現できます。LSI 用のシ
ミュレーションプログラムの中には、トランジスタを単なるスイッチや、抵抗付スイッ
チとしてモデル化したものもありますが、SPICE はそれらに比べて動作速度は遅くなり
ますが、計算精度は非常に高くなります。図2、図3に CMOS インバータ回路のシミ
ュレーション結果を示します。SPICE では、図3のように、時間刻みにより、電圧値を
逐次計算して、実際に出力される電圧波形をオシロスコープで観測するようにシミュレ
ーションすることができます。これは、SPICE のもつ解析方法のうち、最もよく用いら
れる過渡解析(トランジェント解析)と呼ばれるものです。なお、図1のシミュレーシ
ョン結果は、入力電圧の変化に追随する出力電圧値の変化を観測する SPICE の直流解
析(DC 解析)とよばれるものの結果です。
2
VD
ドレイン:D
ゲート:G
ID
VG
(0.18um プロセス VDD=1.8V)
8m
Gnd
1.5[V]
6m
ドレイン電流
ID [A]
ソース:S
VS=0V
VG = 1.8[V]
1.2[V]
4m
0.9[V]
2m
0
0.6[V]
0.3[V]
0
200m
400m
600m
800m
1
1.2
1.4
1.6
1.8
ドレイン電圧 VD [V]
図1
SPICE による MOSFET のドレイン電流特性
nakamura@SRAM
NS-Draw Drawing
Path: D:\Doc\kougi\2002B3\spice\inv2.nsd
Last Modified : 2002/11/12 12:07:33
2002 / 11 / 12
nakamura@SRAM
Vdd
4/0.18
# VVDD Vdd 0 DC 1.8V
# VGND Gnd 0 DC 0V
# VIN in 0 PULSE (0V 1.8V 1n 0.05n 0.05n 0.95n 2
in
out
# .include MOS_018.bsim3
# .save in out
2/0.18
# .tran 0.01n 3n
Gnd
図2
in
out
CMOS インバータ回路
2
1.6
1.2
800m
400m
0
0
200p
400p
600p
800p
1n
1.2n
1.4n
time
図3
CMOS インバータ回路のシミュレーション結果
3.SPICE による LSI の回路設計
LSI の開発では、実際の LSI の内部で起こっている現象を、直接測定して確認するこ
とは非常に困難です。また、LSI の試作後に不具合が発生した場合、不良箇所を断定す
ることは難しく、試作コストや、試作時間等の損害も非常に大きいため、正確なシミュ
3
レーションを活用した設計が非常に重要です。
優秀な回路設計者は、SPICE を十分に使いこなすことができます。また SPICE の結
果(波形等)から、回路の不具合や修正すべき箇所を見つけることができます。SPICE
の結果は正確で、信頼性が非常に高いのですが、たとえば、設計者が配線の負荷容量等
の見積りを間違えると、当然正しい結果は得られません。配線容量等寄生成分の見積り
のためには、レイアウトのイメージ等がもてないとできませんが、これが設計者のノウ
ハウの一部であり、このためには、数度の LSI 設計・試作・評価の経験が必要です。
4.SPICE 記述
SPICE 記述(ネットリスト)は、素子を定義する素子行と、実行の制御を定義する制御行
で記述します。
リスト1
SPICE 記述のサンプル
(図2の回路に相当)
**********************************************************************
*
* Top Level Schematic File: D:¥Doc¥kougi¥2002B3¥spice¥inv2.nsd
*
**********************************************************************
**********************************************************************
*
Circuit : inv2
File Path : D:¥Doc¥kougi¥2002B3¥spice¥inv2.nsd
**********************************************************************
*.SUBCKT inv2 Vdd Gnd in out
M0 Vdd in out Vdd P1 W=4U L=0.18U
AD=1.6P AS=1.6P PD=8.8U PS=8.8U
M1 out in Gnd Gnd N1 W=2U L=0.18U
AD=1.6P AS=1.6P PD=8.8U PS=8.8U
VVDD Vdd 0 DC 1.8V
VGND Gnd 0 DC 0V
VIN in 0 PWL (0n 0V 0.5n 0V 0.55n 1.8V
+ 1n 1.8V 1.05n 0V 1.5n 0V)
.include MOS_018.bsim3
.save in out
.tran 0.1n 1.5n
*.ENDS
.END
(1)入力ファイルの最初の行はタイトルであり,何を記述しても無視されます。
(2)最後の行は``.END''でなければなりません。
(3) SPICE 記述では、基本的に1行の長さは72文字以下でなければなりません。それ
よりも文字数が多い場合は、次の行の 1 桁目を`+'で始めること継続行とすることができま
す。
(4)大文字、小文字の区別はありません。
(5)第1文字目が、*(アスタリスク)で始まる行はコメント行です。
(6)第1文字目が、.
(ドット)で始まる行は制御行です。
4
(7)第1文字目が、X で始まる行は、サブサーキットの呼び出しです。
(8)それ以外の英字で始まる行が素子行です。例えば,抵抗の名前は,文字 R で始まる
1 文字以上の文字列です。
5.スケールファクタ
容量値や抵抗値、MOSFET のゲート幅(W)、ゲート長(L)のような数値の表現につい
ては、整数(12, -44),浮動小数点数(3.14159),整数または浮動小数点数のあとに整数の指数
表記が続くもの(1e-14, 2.65e3)に加えて、下記のスケールファクタが利用できます。
T = 1012
G = 109
Meg = 106
K = 103
m = 10-3
u = 10-6
n = 10-9
p = 10-12
mil = 25.4-6
f = 10-15
数値の直後に続くスケールファクタでない文字は無視されます.スケールファクタの直
後に続く文字も無視されます.したがって,10, 10V, 10Volts, 10Hz は,すべて同じ数値にな
り,M, MA, MSec, MMhos は,すべて同じスケールファクタになります. 1000, 1000.0,
1000Hz, 1e3, 1.0e3, 1KHz, 1K は,すべて同じ数値になります。
6.SPICE における素子(一部)
(1)抵抗
RXXXXXXX N1 N2 VALUE
N1 と N2 は,要素のノード(端子)です. VALUE は抵抗値。
例: R1 1 2 100
RC1 12 17 1K
(2)コンデンサ
CXXXXXXX N+ N- VALUE
N+ と N- は,それぞれ正と負のノード、VALUE はファラド単位の静電容量。
例: CBYP 13 0 1UF
COSC 17 23 10U IC=3V
(3)インダクタ
LYYYYYYY N+ N- VALUE
N+ と N- は,それぞれ正と負のノード、 VALUE はヘンリー単位のインダクタンス。
例: LLINK 42 69 1UH
LSHUNT 23 51 10U IC=15.7MA
(4)電圧源
(A)定電圧源:VXXXXXXX N+ N- DC VALUE
(B)周期パルス電圧源:VXXXXXXX N+ N- PULSE(V1 V2 TD TR TF PW PER)
(C)折れ線電圧源:VXXXXXXX N+ NN+ と N- は,それぞれ正および負のノード。正の電流の向きは,正のノードから電圧源
を通り負の端子へ流れる方向。電圧源は,回路を動作させるために使われるだけでなく,
5
Spice の「電流計」としても使われます。すなわち,電流を測定するには値を 0 にした電圧
源を回路に挿入します。そのようにしても,電圧源は回路をショートしていると見なされ
るため,回路の動作にまったく影響しません.
(A)時間により変化しない電源(定電圧源)の例:
VVDD VDD 0 DC 5V
過渡解析用に,時刻に依存する値を電源に指定することができます。ここでは、パルス
と、折れ線(PWL)の表現を示します。
(B) パルス
PULSE(V1 V2 TD TR TF PW PER)
例:VIN 3 0 PULSE(-1 1 2NS 2NS 2NS 50NS 100NS)
パラメータ
V1 (初期電圧値)
V2 (パルス時の振幅電圧値)
TD (遅延時間)
TR (立ち上がり時間)
TF (立ち下がり時間)
PW (パルスの幅)
PER (周期)
(C)折れ線
PWL(T1 V1 T2 V2 T3 V3 T4 V4 ...)
例: VCLOCK 7 5 PWL(0 -7 10NS -7 11NS -3 17NS -3 18NS -7 50NS -7)
値の組 (Ti, Vi) は, 時刻 Ti における電源の値を Vi と指定します.中間の時刻にお
ける値は,入力された値を線形補間したものになります.
(5)MOSFET
MXXXXXXX ND NG NS NB ModelName L=VAL W=VAL AD=VAL AS=VAL
+ PD=VAL PS=VAL
例: M1 2 9 3 0 MOD1 L=10U W=5U AD=100P AS=100P PD=40U PS=40U
ND, NG, NS, NB は,それぞれドレイン,ゲート,ソース,バルク(サブストレート)ノー
ドです。 ModelName はモデルの名前です. L, W は,チャネルの長さと幅です(単位 m).
AD および AS は,ドレインとソースの拡散領域の面積です(単位 m2)。PD および PS は,
ドレインとソースの接合の周囲の長さです(単位 m)。AD,AS,PD, PS の省略時の値は 0.0 で
す。
7.ノード“0”
ノード(素子間の接点)の名前は,任意の文字列ですが、ノード名“0”は、基準(グラ
ウンド)ノードとしての予約ノード名です。ノード“0”は回路全体の電圧基準点なので、
6
ネットリスト中に必ず“0”は一回以上出てこなければなりません。グランドノードとし
て“0”を直接ネットリスト中に利用してもいいですが、リスト1のように、
> VGND Gnd 0 DC V
と、ノード“0”と電位差が0V であるノード“Gnd”を 1 度定義して、それを用いる方法
も一般的です。
8.モデルパラメータ
.MODEL で始まる行は、非線形素子(特に MOSFET 等の半導体関連素子)用のモデルパ
ラメータ記述です。非線形動作を表現するために、数多くのパラメータ値を必要とします。
一般形は: .MODEL MNAME TYPE(PNAME1=PVAL1 PNAME2=PVAL2 ...)
例: .MODEL MOD1 NPN (BF=50 IS=1E-13 VBF=50)
上記の MNAME は、各素子行で参照されるモデル名で, TYPE は、素子の種類によっ
て下記のとおりとなります。
NMOS :N チャネル MOSFET モデル、PMOS :P チャネル MOSFET モデル、D :ダイオ
ードモデル 、NPN :NPN BJT モデル 、PNP :PNP BJT モデル
この MODEL パラメータを利用する素子行では、たとえば MOSFET の場合:
>M0 Vdd in out Vdd P1 W=4U L=0.18U
AD=1.6P AS=1.6P PD=8.8U PS=8.8U
のように、素子名,素子がつながるノード(MOSFET では、4ノード),素子のモデル名、
それ以降の個別パラメータ指定(L,W 等)からなります。
9.サブサーキット
プログラムにおけるサブルーチンのように、サブサーキットと呼ばれる Spice 記述の集ま
りを定義して,参照利用できます。サブサーキットは階層的に構成することもできます。
定義は、回路記述を制御行:.SUBCKT と.ENDS ではさんで行います。
.SUBCKT SubCircuitName Node1 Node2 Node3 ...
(SPICE ネットリスト記述)
.ENDS SubCircuitName
回路の定義は,.SUBCKT 行で始まります. SubCircuitName,、はサブサーキットの名前で,
Node1, Node2, ...は外部接続用のノード名です。サブサーキットの定義の最後の行は .ENDS
行です.
サブサーキットの呼び出し側は、 X で始まる素子行です。
Xyyyy Node1 Node2 Node3 ... SubCircuitName
7
nakamura@SRAM
NS-Draw Drawing
Path: D:\Doc\kougi\2002B3\spice\example1.nsd
Last Modified : 2002/11/12 11:10:44
in1
4
4
INV2
in2
2002 / 11 / 12
nakamura@SRAM
4
out
2
# VIN1 in1 Gnd PULSE (0V 1.8V 0n 0.05n 0.05n 2.45n 5n)
# VIN2 in2 Gnd PULSE (0V 1.8V 0n 0.05n 0.05n 4.45n 10n)
# VVDD Vdd 0 DC 1.8V
# VGND Gnd 0 DC 0V
# .include MOS_018.bsim3
# .save in1 in2 out
# .tran 0.01n 80n
図4
サブサーキット記述のサンプル回路図
リスト2.サブサーキット記述による表現
**********************************************************************
* Circuit : example1 File Path :
*+ D:¥Doc¥kougi¥2002B3¥spice¥example1.nsd
**********************************************************************
*.SUBCKT example1 Vdd Gnd in1 in2 out
X0 Vdd Gnd in1 in2 net_1 2nand4
X1 Vdd Gnd net_1 out inv2
VVDD Vdd 0 DC 1.8V
VGND Gnd 0 DC 0V
VIN1 in1 Gnd PULSE (0V 1.8V 0n 0.05n 0.05n 2.45n 5n)
VIN2 in2 Gnd PULSE (0V 1.8V 0n 0.05n 0.05n 4.45n 10n)
.include MOS_018.bsim3
.save in1 in2 out
.tran 0.01n 80n
*.ENDS
**********************************************************************
* Circuit : 2nand4 File Path : D:¥Doc¥kougi¥2002B3¥spice¥2nand4.nsd
**********************************************************************
.SUBCKT 2nand4 Vdd Gnd in1 in2 out
M0 out in1 Vdd Vdd P1 W=4U L=0.18U AD=1.6P AS=1.6P PD=8.8U PS=8.8U
M1 out in2 Vdd Vdd P1 W=4U L=0.18U AD=1.6P AS=1.6P PD=8.8U PS=8.8U
M2 out in1 net_1 Gnd N1 W=4U L=0.18U AD=1.6P AS=1.6P PD=8.8U PS=8.8U
M3 net_1 in2 Gnd Gnd N1 W=4U L=0.18U AD=1.6P AS=1.6P PD=8.8U PS=8.8U
.ENDS
**********************************************************************
* Circuit : inv2 File Path : D:¥Doc¥kougi¥2002B3¥spice¥inv2.nsd
**********************************************************************
.SUBCKT inv2 Vdd Gnd in out
M0 Vdd in out Vdd P1 W=4U L=0.18U AD=1.6P AS=1.6P PD=8.8U PS=8.8U
M1 out in Gnd Gnd N1 W=4U L=0.18U AD=1.6P AS=1.6P PD=8.8U PS=8.8U
.ENDS
.END
10.解析の種類
8
(1)直流(DC)解析
Spice の直流解析部は,インダクタを短絡し,コンデンサを開放して,回路の直流動作点
を決定します.直流解析は、制御行 .DC で設定します.直流解析は,直流伝達特性を描く
のに使えます.つまり,指定された独立電源をユーザが指定した範囲に渡って変化させ,
電源の一連の値に対する出力変数の値を出力します.
一般形:.DC SRCNAM VSTART VSTOP VINCR
例: .DC VIN 0.25 5.0 0.25
.DC 行は,直流伝達特性の電源と,その掃引の範囲を定義します(コンデンサは開放され,
インダクタは短絡されます). SRCNAM は独立電圧源または電流源の名前です. VSTART,
VSTOP, VINCR は,それぞれ開始値,最終値,増分です.例では,電圧源 VIN の値が,0.25V
から 5V まで,0.25V きざみで増えていきます.
(2)過渡(トランジェント)解析
Spice の過渡解析は,出力変数の過渡現象を,ユーザが指定した時間間隔について,時間の
関数として計算します.初期状態は,直流解析によって自動的に決定されます.時間に依
存しないすべての電圧・電流源(たとえば電源)は,それらの DC 値に設定されます.過渡
解析の時間間隔は,制御行 .TRAN で設定します.
一般形: .TRAN TSTEP TSTOP <TSTART TMAX>
例: .TRAN 0.1NS 10NS
TSTEP は,.save 出力のための増分です。SPICEの内部で使用される時間刻みとは異
なります。TSTOP はシミュレーションの終了時刻で,TSTART は.save 出力を始める最初の
時刻です。TMAX は,Spice が用いる最大のステップの大きさです。
その他、SPICEの解析には、(3)交流小信号(AC)解析 、(4)極・ゼロ解析 、
(5)小信号歪み解析 、(6)感応度解析、(7)ノイズ解析等があります。
11.その他
(1).save Node1 Node2 Vsource#branch
波形として出力されるノード名を指定します。多くのノードを指定したければ、.save 行
を複数設けることが可能。ノードを流れる電流を出力したい場合は、電圧値0Vの定電流
源を挿入して、その電源名+#branch で指定する。
(2).include
ファイルを挿入する: .INCLUDE 行があります。
>.INCLUDE /users/spice/common/wattmeter.cir
特に共通のモデルやサブサーキットなど,別ファイルにすることができます。