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 解析)とよばれるものの結果です。
0 200m 400m 600m 800m 1 1.2 1.4 1.6 1.8 0 2m 4m 6m 8m ドレイン電流 ID [A] ドレイン電圧 VD [V] 0.6[V] 0.3[V] VG = 1.8[V] 1.5[V] 1.2[V] 0.9[V] ドレイン:D Gnd ソース:S ゲート:G ID VG VD VS=0V (0.18um プロセス VDD=1.8V) 図1 SPICE による MOSFET のドレイン電流特性 in 2/0.18 4/0.18 # VIN in 0 PULSE (0V 1.8V 1n 0.05n 0.05n 0.95n 2 # .save in out # VVDD Vdd 0 DC 1.8V # .tran 0.01n 3n # .include MOS_018.bsim3 # VGND Gnd 0 DC 0V NS-Draw Drawing nakamura@SRAM nakamura@SRAM 2002 / 11 / 12 Last Modified : 2002/11/12 12:07:33 Path: D:\Doc\kougi\2002B3\spice\inv2.nsd out Vdd Gnd 図2 CMOS インバータ回路 0 200p 400p 600p 800p 1n 1.2n 1.4n 0 0 400m 800m 1.2 1.6 2 in out time 図3 CMOS インバータ回路のシミュレーション結果 3.SPICE による LSI の回路設計 LSI の開発では、実際の LSI の内部で起こっている現象を、直接測定して確認するこ とは非常に困難です。また、LSI の試作後に不具合が発生した場合、不良箇所を断定す ることは難しく、試作コストや、試作時間等の損害も非常に大きいため、正確なシミュ
レーションを活用した設計が非常に重要です。 優秀な回路設計者は、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文字目が、.(ドット)で始まる行は制御行です。
(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 mil = 25.4-6 m = 10-3 u = 10-6 n = 10-9 p = 10-12 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+ N- N+ と N- は,それぞれ正および負のノード。正の電流の向きは,正のノードから電圧源 を通り負の端子へ流れる方向。電圧源は,回路を動作させるために使われるだけでなく,
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”は回路全体の電圧基準点なので、
ネットリスト中に必ず“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
in1
# VIN2 in2 Gnd PULSE (0V 1.8V 0n 0.05n 0.05n 4.45n 10n) INV2
2 4
# VIN1 in1 Gnd PULSE (0V 1.8V 0n 0.05n 0.05n 2.45n 5n)
# .save in1 in2 out # VVDD Vdd 0 DC 1.8V # .tran 0.01n 80n # .include MOS_018.bsim3 # VGND Gnd 0 DC 0V NS-Draw Drawing nakamura@SRAM nakamura@SRAM 2002 / 11 / 12 Last Modified : 2002/11/12 11:10:44 Path: D:\Doc\kougi\2002B3\spice\example1.nsd out in2 4 4 図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
(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 特に共通のモデルやサブサーキットなど,別ファイルにすることができます。