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 特に共通のモデルやサブサーキットなど,別ファイルにすることができます。
© Copyright 2026 Paperzz