SPICE (ソフトウェア)
SPICE (Simulation Program with Integrated Circuit Emphasis, スパイス) は電子回路のアナログ動作をシミュレーションするソフトウェアである。 カリフォルニア大学バークレー校で1973年に開発された。 集積回路に使用する電子回路の設計主眼として開発されたが、次第にプリント基板などの電子回路の検証にも普及した。
シミュレーション対象となる回路は一般的な受動素子(抵抗、コンデンサーなど)と能動素子(ダイオード、トランジスタなど)と伝送線路、各種電源を組み合わせたものである。 解析手法としては過渡解析、直流解析、小信号交流解析、雑音解析などが可能である。
現在使われている回路シミュレータの多くはこのバークレー校のものを元に改良、機能付加したものである。名称にSPICEの語を含む場合も多く、それらを含めてSPICEと呼ばれることもある。
回路、動作記述
概略
シミュレータへの入力となる回路や動作、制御文などはテキストで記述する。各項目の基本は行単位であるが複数行にまたがる記述も可能であり、その場合には次の行の先頭に+
を付ける。
コマンドの記述はドット (.
) から始まる。
最初の行は表題となり、次の行以降に回路や制御文を記述する。
回路網はSPICE書式のネットリスト にて表現する。
最後の行は.END
で終了する。
.END
と記述した次の行は新たな回路記述として認識され、複数回路のシミュレーションが可能。
回路記述は1行1素子で記述する。 各行の行頭は素子のインスタンス名(固有の名前)を示し最初の一文字が素子種別を表す。抵抗ならRxxx、インダクタンスならLyyyといった名前となる。 続けて、素子の各端子が接続されるノード名を記述し、最後に素子の特性値などを記述する。インスタンス名、ノード名などの区切りには空白文字を使用する。
行頭に *
のある行はコメントである。
簡単な例1:CR回路
CR circuit * 0---R1---1---C1---2 R1 0 1 10 C1 1 2 20 .END
ここでR1の行の最後は10Ω、C1の行の最後は20Fを示す。0,1 あるいは 1,2 はそれぞれの端子のノードを示す。 結果として 0---R1---1---C1---2 と抵抗とキャパシタが直列につながった回路となる。
これだけでは回路記述のみであり電気回路として動作しない。 回路として動作させるためには、例えば次のように電圧源(Vで始まる素子)を付加する。
簡単な例2:CR回路 + 直流電源
CR circuit+power * 0---R1---1---C1---2---V1---0 R1 0 1 10 C1 1 2 20 V1 2 0 5 .END
この例では前述の回路の両端(+側がノード 2 で-側がノード 0 )に 5V の電圧を加えたことになる。 電源には直流のほか正弦波やパルス波形、定電流源なども指定できる。 電源も形式的には素子との位置づけであり他の素子同様、回路記述内に含める。 ノード 0 (グランド)は、必ず含まれていなくてはならない。 各部の電圧とは、指定した場所の電位とノード 0 との電位差として定義されている。
これを実際に動作させるには解析内容を指定する。
簡単な例3:CR回路 + 直流電源 + 過渡解析
CR circuit+power+transient .TRAN 1 10 * 0---R1---1---C1---2---V1---0 R1 0 1 10 C1 1 2 20 V1 2 0 5 .END
.TRAN文は1秒きざみで10秒まで経過させることを意味する(過渡解析)。 なおピリオドに始まる語は各種制御文を意味する。
シミュレータとしては動作した結果の観測も可能でなければならない。 次の指定で表示ができる。
簡単な例4:CR回路 + 直流電源 + 過渡解析 + 表示
CR circuit+power+transient+print .TRAN 1 10 .PRINT TRAN V(1) I(V1) * 0---R1---1---C1---2---V1---0 R1 0 1 10 C1 1 2 20 V1 2 0 5 .END
.PRINT文でノード1の電圧と電源V1の電流を一覧として出力する。 ほかに.PLOT文もありグラフ化することができる。
(Note: 期待するような、コンデンサに充電されていくようなシミュレーション結果はこのままだと出てこない。ノート:SPICE (ソフトウェア)で議論中です)
なお先頭行と.ENDの間の記述順序は任意である。
素子詳細
素子の記述は一般に頭が種別を示すインスタンス名、それに続くノード名の列挙、必要に応じてパラメータなどの値の列挙が続く形式となっている。ノード名は初期は数値が基本であるがSPICEの種類、バージョンにより英数字での単語も可能となっている。 以下に主要な素子を列挙する。(細かいオプションは略)
- 抵抗(R)
Rxxx N1 N2 value
- N1、N2はノード名、valueは抵抗値で単位はオーム
- なお、単位接頭辞としてm(ミリ)、u(マイクロ、μの代用)、n(ナノ)、p(ピコ)、k(キロ)などが使用できる。SPICEでは大文字と小文字は区別されないため、メガはMではなくmegと表記する。すなわち1メガは「1meg」1ミリは「1m」と表す。また、単位(Ω)は通常省略する。(以下すべてに共通)
- キャパシタ(C)
Cxxx N+ N- value
- N+、N-は正負のノード、valueは容量値で単位はファラド
- インダクタ(L)
Lxxx N+ N- value
- N+、N-は正負のノード、valueはインダクタンスで単位はヘンリー
- 相互インダクタ(K)
Kxxx Lyyy Lzzz value
- Lyyy、Lzzzは結合したインダクタの名前でvalueは結合係数である。
- 独立電圧源(V)
Vxxx N+ N- <option>
- N+、N-は正負のノード、optionに交流(AC)、直流(DC)の区分、形式、電圧値などを記述する。
- 独立電流源(I)
Ixxx N+ N- <option>
- N+、N-は正負のノード、optionに交流(AC)、直流(DC)の区分、形式、電圧値などを記述する。
- 電圧制御電流源(G)
Gxxx N+ N- NC+ NC- value
- N+、N-は正負のノード、NC+、NC-は正負の制御ノード、valueは相互コンダクタンス。
- 電圧制御電圧源(E)
Exxx N+ N- NC+ NC- value
- N+、N-は正負のノード、NC+、NC-は正負の制御ノード、valueは電圧増幅率。
- 電流制御電流源(F)
Fxxx N+ N- vname value
- N+、N-は正負のノード、vnameは制御電流が流れている電圧源N、valueは電流増幅率。
- 電流制御電圧源(H)
Hxxx N+ N- vname value
- N+、N-は正負のノード、vnameは制御電流が流れている電圧源N、valueは相互抵抗。
- ダイオード(D)
Dxxx N+ N- model <option>
- N+、N-は正負のノード、modelにモデルを指定する。
- バイポーラトランジスタ(Q)
Qxxx NC NB NE model <option>
- NCはコレクタ、NBはベース、NEはエミッタの各ノード、modelにモデルを指定する。
- 接合形電界効果トランジスタ(J)
Jxxx ND NG NS <NB> model <option>
- NDはドレイン、NGはゲート、NSはソース(NBはバルクでオプションの一部)の各ノード、modelにモデルを指定する。
- MOS形電界効果トランジスタ(M)
Mxxx ND NG NS <NB> model <option>
- NDはドレイン、NGはゲート、NSはソース(NBはバルクでオプションの一部)の各ノード、modelにモデルを指定する。
- 無損失伝送線路(T)
Txxx N1 N2 N3 N4 Z0=value
- N1、N2はポート1のノード、N3、N4はポート2のノード、Z0は特性インピーダンス。
- 有損失伝送線路(O)
Oxxx N1 N2 N3 N4 model
- N1、N2はポート1のノード、N3、N4はポート2のノード、MODELはモデル。
- 一様分布RC線路(U)
Uxxx N1 N2 N3 model L=LEN <option>
- N1、N2はRC伝送線路が結ぶノード、N3はキャパシタがつながるノード、MODELはモデル、LENはRC伝送線路の長さ。
- サブサーキット
.SUBCKT name N1 <N2 ...> 回路記述 .ENDS
- 素子ではないが同一の回路ブロックを複数使用する場合、それを階層化するために用いる。nameがサブサーキット名、N1、N2..は端子名。呼び出し時は素子Xとして呼び出す。
制御文詳細
- 過渡解析初期設定(.IC)
.IC V(ノード1)=value1 <V(ノード2)=value1 ... >
- ノード1にvalue1を与える。以降必要数繰り返す。
- 過渡解析指定(.TRAN)
.TRAN step stop <option>
- stepはPRINTまたはPLOTの時間の区切り。stopは最終時間。
- 直流解析指定(.DC)
.DC src start stop step <option>
- srcは独立電圧源または電流源、startは開始値、stopは終了値、stepは増分値。
- 温度指定(.TEMP)
.TEMP temp
- tempで温度を指定する。
- オプション(.OPTIONS)
.OPTIONS opt1 <opt2 ...>
- 各種オプション指定。
以上のとおり見てきたように、SPICEはテキストによる記述を基本としているが、商用版ソフトウェアなどでは回路図CADと統合化してグラフィカルな記述も可能となり、より使いやすくなっている。
歴史
初期のバージョンはFORTRANで書かれておりフリーウェアとして公開されている。後にはC言語に移植された(バージョン3)。
1980年代 商用版各種登場(HSPICE、PSPICEなど)
派生したSPICEソフトウェア
- spice3f (バークレイによる最終版)
- ngspice (オープンソース版SPICEのひとつ)
- HSPICE (meta software社開発、現シノプシス)
- PSpice (MicroSim社開発、現ケイデンス・デザイン・システムズ)
- LTSpice (リニアテクノロジ社配布 入手ページ)