SPICE (ソフトウェア)

は、電子回路シミュレータである。カリフォルニア大学バークレー校で1970年代前半頃に開発が始まり、以後何回かバージョンアップされた。集積回路の設計に利用可能なように開発されたため、長さや幅などといったパラメータによりトランジスタであれば特性や駆動能力を、配線であればインピーダンスと過渡特性といったものまでシミュレーションする能力まで持つが、単純にディスクリートの素子を定義し、配線は全て等電位とするといったようにして簡単に電子工作のシミュレーションを行う、といった用途にも問題なく使える。

シミュレーション対象となる回路は一般的な受動素子（抵抗、コンデンサなど）と能動素子（ダイオード、トランジスタ、真空管など）と伝送線路、各種電源を組み合わせたものである。解析手法としては過渡解析、直流解析、小信号交流解析、雑音解析などが可能である。

現在使われている、名称にSPICEの語を含むシミュレータは、このバークレー校のものを元に改良、機能付加したものである。それらを含めた総称としてSPICEと呼ばれることもある。

 回路、動作記述 

 概略 
シミュレータへの入力となる回路や動作、制御文などはテキストで記述する。各項目の基本は行単位であるが複数行にまたがる記述も可能であり、その場合には次の行の先頭を + にする。コマンドの記述は終止符 (.) から始まる。

最初の行は表題となり、次の行以降に回路や制御文を記述する。回路網はSPICE書式のネットリスト にて表現する。最後の行は .END で終了する。.ENDと記述した次の行は新たな回路記述として認識され、複数回路のシミュレーションが可能。

回路記述は1行1素子で記述する。各行の行頭は素子のインスタンス名（固有の名前）を示し最初の一文字が素子種別を表す。抵抗ならRインスタンス名、インダクタンスなら Lインスタンス名 といった名前となる。続けて、素子の各端子が接続されるノード名を記述し、最後に素子の特性値などを記述する。インスタンス名、ノード名などの区切りには空白文字を使用する。

行頭が * である行は人間のための注釈である。

簡単な例1：CR回路

 CR circuit
 * 0---R1---1---C1---2
 R1 0 1 10
 C1 1 2 20
 .END

ここでR1の行の最後は、C1 の行の最後はを示す。0、1、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 ）にの電圧を加えたことになる。電源には直流のほか正弦波やパルス波形、定電流源なども指定できる。電源も形式的には素子との位置づけであり他の素子同様、回路記述内に含める。ノード 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 文は きざみで まで経過させることを意味する（過渡解析）。なおピリオドに始まる語は各種制御文を意味する。

シミュレータとしては動作した結果の観測も可能でなければならない。次の指定で表示ができる。

簡単な例4：CR回路 + 直流電源 + 過渡解析 + 表示

 CR circuit+power+transient+print
 .TRAN 1 10
 .PRINT TRAN V 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 文もありグラフ化することができる。

期待するような、コンデンサに充電されていくようなシミュレーション結果はこのままだと出てこない。これはSPICEは過渡解析を行う前に自動的にDC解析により初期条件の電位を決定し、この際コンデンサはショート状態として扱われるため、コンデンサに充電された状態でシミュレーションが開始してしまうためである。充電されていない状態でシミュレーションを開始するためには、.IC 文を使用して初期条件における電位を明示的に指定する。

簡単な例5：CR回路 + 直流電源 + 過渡解析 + 初期条件 + 表示

 CR circuit+power+transient+ic+print
 .TRAN 1 10
 .PRINT TRAN V I(V1)
 * 0---R1---1---C1---2---V1---0
 R1 0 1 10
 C1 1 2 20
 V1 2 0 5
 .IC V = 2
 .END

この例では、コンデンサC1の抵抗R1側のノードの初期電位をに設定する。これはV1の電圧と等しいため、コンデンサが充電されていない状態からシミュレーションが行われる。

なお先頭行と.ENDの間の記述順序は任意である。

SPICEはテキストによる記述を基本としているが、商用版ソフトウェアなどでは回路図CADと統合化してグラフィカルな記述も可能となり、より使いやすくなっている。

 素子詳細 
素子の記述は一般に頭が種別を示すインスタンス名、それに続くノード名の列挙、必要に応じてパラメータなどの値の列挙が続く形式となっている。ノード名は初期は数値が基本であるがSPICEの種類、バージョンにより英数字での単語も可能となっている。
以下に主要な素子を列挙する。（細かいオプションは略）

抵抗(R)
 Rインスタンス名 N+ N- 値
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。値必須抵抗値。単位はオーム。単位は記述しないが、接辞は使える。
+接辞文字列大きさmegkmunp

キャパシタ(C)
 Cインスタンス名 N+ N- 値
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。値必須容量値。単位はファラド。単位は記述しないが、接辞は使える。
+接辞文字列大きさmegkmunp

インダクタ(L)
 Lインスタンス名 N+ N- 値
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。値必須インダクタンス値。単位はヘンリー。単位は記述しないが、接辞は使える。
+接辞文字列大きさmegkmunp

相互インダクタ(K)
 Kインスタンス名 Lインスタンス名1次 Lインスタンス名2次 M結合
項目任意性指定するべきものインスタンス名必須インスタンス名。Lインスタンス名1次必須1次側のインダクタの体識別名。Lインスタンス名2次必須2次側のインダクタの体識別名。M結合必須結合係数。

独立電圧源(V)
 Vインスタンス名 N+ N- [オプション …]
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。オプション …任意オプション。交流・直流の区別や形式や電圧値など。

独立電流源(I)
 Iインスタンス名 N+ N- [オプション …]
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。オプション …任意オプション。交流・直流の区別や電圧値など。

電圧制御電流源(G)
 Gインスタンス名 N+ N- N制御+ N制御- 値
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。N制御+必須制御電圧プラス端子に接続するネット名。。N制御-必須制御電圧マイナス端子に接続するネット名。値必須相互コンダクタンス値。

電圧制御電圧源(E)
 Eインスタンス名 N+ N- N制御+ N制御- 値
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。N制御+必須制御電圧プラス端子に接続するネット名。。N制御-必須制御電圧マイナス端子に接続するネット名。値必須電圧増幅率。

電流制御電流源(F)
 Fインスタンス名 N+ N- N制御 値
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。N制御必須制御電流がある電圧源のノード名。値必須電流増幅率。

電流制御電圧源(H)
 Hインスタンス名 N+ N- N制御 値
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須プラス端子に接続するネット名。N-必須マイナス端子に接続するネット名。N制御必須制御電流がある電圧源のノード名。値必須相互抵抗値。

ダイオード(D)
 Dインスタンス名 NA NK モデル名 [オプション …]
項目任意性指定するべきものインスタンス名必須インスタンス名。NA必須アノード端子に接続するネット名。NK必須カソード端子に接続するネット名。モデル名必須モデル名。オプション …任意オプション

バイポーラトランジスタ(Q)
 Qインスタンス名 NC NB NE モデル名 [オプション …]
項目任意性指定するべきものインスタンス名必須インスタンス名。NC必須コレクタ端子に接続するネット名。NB必須ベース端子に接続するネット名。NE必須エミッタ端子に接続するネット名。モデル名必須モデル名。オプション …任意オプション

接合形電界効果トランジスタ(J)
 Jインスタンス名 ND NG NS [NB] モデル名 [オプション …]
項目任意性指定するべきものインスタンス名必須インスタンス名。ND必須ドレイン端子に接続するネット名。NG必須ゲート端子に接続するネット名。NS必須ソース端子に接続するネット名。NB任意バルク端子（バックゲート端子）に接続するネット名。モデル名必須モデル名。オプション …任意オプション

MOS形電界効果トランジスタ(M)
 Mインスタンス名 ND NG NS [NB] モデル名 [オプション …]
項目任意性指定するべきものインスタンス名必須インスタンス名。ND必須ドレイン端子に接続するネット名。NG必須ゲート端子に接続するネット名。NS必須ソース端子に接続するネット名。NB任意バルク端子（バックゲート端子）に接続するネット名。モデル名必須モデル名。オプション …任意オプション

無損失伝送線路(T)
 Tインスタンス名 N1+ N1- N2+ N2- Z0=値
項目任意性指定するべきものインスタンス名必須インスタンス名。N1+必須1次側の+端子に接続するネット名。N1-必須1次側の-端子に接続するネット名。N1+必須2次側の+端子に接続するネット名。N1-必須2次側の-端子に接続するネット名。値必須特性インピーダンス値。

有損失伝送線路(O)
 Oインスタンス名 N1+ N1- N2+ N2- モデル名
項目任意性指定するべきものインスタンス名必須インスタンス名。N1+必須1次側の+端子に接続するネット名。N1-必須1次側の-端子に接続するネット名。N1+必須2次側の+端子に接続するネット名。N1-必須2次側の-端子に接続するネット名。モデル名必須モデル名。

一様分布RC線路(U)
 Uインスタンス名 N1 N2 N3 モデル名 L=length [オプション …]
項目任意性指定するべきものインスタンス名必須インスタンス名。N+必須RC伝送線路が結ぶノードのネット名。N-必須RC伝送線路が結ぶノードのネット名。N+ の反対側。NC必須キャパシタがつながるネット名。length必須RC伝送線路の長さ。オプション …任意オプション

サブサーキット

定義の仕方
 .SUBCKT 回路名 N1 N2 …
 回路記述
 .ENDS
素子ではないが同一の回路ブロックを複数使用する場合、それを階層化するために用いる。N1、N2、… は端子名。

利用の仕方
この回路の利用するには、
 Xインスタンス名 回路名 N1端子に接続するネット名 N2端子に接続するネット名 …
と記述する。

 制御文詳細 

過渡解析初期設定(.IC)
 .IC Vインスタンス名1=初期値1 [Vネット名2=初期値2 …]
項目指定すべき値Vインスタンス名n初期値を指定したいノードの名前。初期値nVインスタンス名nで指定したノードの初期値。

過渡解析指定(.TRAN)
 .TRAN ステップ 最終時刻 [オプション …]
項目指定すべき値ステップ.PRINT または .PLOT の区切り時間。最終時刻.PRINT または .PLOT の最終時刻。オプション …オプション

直流解析指定(.DC)
 .DC 対象のインスタンス名 開始値 <var>終了値<var> 増分値 [オプション …]
項目指定すべき値対象のインスタンス名対象の独立電圧源または電流源のインスタンス名。開始値開始値。終了値終了値。増分増分。オプション …オプション。

温度指定(.TEMP)
 .TEMP 温度
項目指定すべき値温度温度。

オプション(.OPTIONS)
 .OPTIONS オプション1 [オプション2 …]
項目指定すべき値オプションnオプション。

 歴史 
初期のバージョンはFORTRANで書かれておりフリーウェアとして公開されている。後にはC言語に移植された（バージョン3）。
1973年 SPICE
1975年 SPICE2
1981年 SPICE2G.6　主要商用版の元
1985年 SPICE3 この版よりC言語化

1980年代　商用版各種登場(HSPICE、PSPICEなど)

 派生したSPICEソフトウェア 
spice3f (バークレイによる最終版)
ngspice (オープンソース版SPICEのひとつ)
Qucs (オープンソース版SPICEのひとつ入手ページ)
HSPICE (meta software社開発、現シノプシス)
PSpice (MicroSim社開発、現ケイデンス・デザイン・システムズ)
SmartSpice (シルバコ社 入手ページ)
LTSpice (アナログ･デバイセズ社配布 入手ページ)
TINA-TI (テキサス・インスツルメンツ社配布 入手ページ)

名前の由来
 という名前は、英語の「」に由来する。