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 ゲート :G VG VD ドレイン :D ID 8m (0.18um プロセス VDD=1.8V) VG = 1.8[V] ソース :S VS=0V ドレイン電流 ID [A] 6m 4m 1.5[V] 1.2[V] Gnd 2m 0 0 200m 400m 600m 800m 1 1.2 1.4 1.6 1.8 ドレイン電圧 VD [V] 0.9[V] 0.6[V] 0.3[V] 図 1 SPICE による MOSFET のドレイン電流特性 NS-Draw Drawing nakamura@sram 2002 / 11 / 12 Path: D:\Doc\kougi\2002B3\spice\inv2.nsd Last Modified : 2002/11/12 12:07:33 nakamura@sram Vdd 4/0.18 # VVDD Vdd 0 DC 1.8V in out # VGND Gnd 0 DC 0V # VIN in 0 PULSE (0V 1.8V 1n 0.05n 0.05n 0.95n 2 #.include MOS_018.bsim3 2/0.18 #.save in out #.tran 0.01n 3n Gnd 図 2 CMOS インバータ回路 in out 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 = 10 12 G = 10 9 Meg = 10 6 K = 10 3 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- は, それぞれ正および負のノード 正の電流の向きは, 正のノードから電圧源を通り負の端子へ流れる方向 電圧源は, 回路を動作させるために使われるだけでなく,
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 NS-Draw Drawing nakamura@sram 2002 / 11 / 12 Path: D:\Doc\kougi\2002B3\spice\example1.nsd Last Modified : 2002/11/12 11:10:44 nakamura@sram in1 in2 4 4 INV2 4 2 out # 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 特に共通のモデルやサブサーキットなど, 別ファイルにすることができます