SPICE (ソフトウェア)

は、電子回路シミュレータである。カリフォルニア大学バークレー校で1970年代前半頃に開発が始まり、以後何回かバージョンアップされた。集積回路の設計に利用可能なように開発されたため、長さや幅などといったパラメータによりトランジスタであれば特性や駆動能力を、配線であればインピーダンスと過渡特性といったものまでシミュレーションする能力まで持つが、単純にディスクリートの素子を定義し、配線は全て等電位とするといったようにして簡単に電子工作のシミュレーションを行う、といった用途にも問題なく使える。
シミュレーション対象となる回路は一般的な受動素子（抵抗、コンデンサなど）と能動素子（ダイオード、トランジスタ、真空管など）と伝送線路、各種電源を組み合わせたものである。解析手法としては過渡解析、直流解析、小信号交流解析、雑音解析などが可能である。
現在使われている、名称にSPICEの語を含むシミュレータは、このバークレー校のものを元に改良、機能付加したものである。それらを含めた総称としてSPICEと呼ばれることもある。
回路、動作記述.
概略.
シミュレータへの入力となる回路や動作、制御文などはテキストで記述する。各項目の基本は行単位であるが複数行にまたがる記述も可能であり、その場合には次の行の先頭を codice_1 にする。コマンドの記述は終止符 (codice_2) から始まる。
最初の行は表題となり、次の行以降に回路や制御文を記述する。回路網はSPICE書式のネットリスト にて表現する。最後の行は codice_3 で終了する。codice_3と記述した次の行は新たな回路記述として認識され、複数回路のシミュレーションが可能。
回路記述は1行1素子で記述する。各行の行頭は素子のインスタンス名（固有の名前）を示し最初の一文字が素子種別を表す。抵抗ならcodice_5、インダクタンスなら codice_6 といった名前となる。続けて、素子の各端子が接続されるノード名を記述し、最後に素子の特性値などを記述する。インスタンス名、ノード名などの区切りには空白文字を使用する。
行頭が codice_7 である行は人間のための注釈である。
簡単な例1：CR回路
 CR circuit
 * 0---R1---1---C1---2
 R1 0 1 10
 C1 1 2 20
 .END
ここでR1の行の最後はformula_1、codice_8 の行の最後はformula_2を示す。codice_9、codice_10、codice_11 はそれぞれの端子のノードを示す。結果として抵抗とキャパシタが直列につながった回路となる。
これだけでは回路記述のみであり電気回路として動作しない。回路として動作させるためには、例えば次のように電圧源（codice_12 で始まる素子）を付加する。
簡単な例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
この例では前述の回路の両端（+側がノード codice_11 で-側がノード codice_9 ）にformula_3の電圧を加えたことになる。電源には直流のほか正弦波やパルス波形、定電流源なども指定できる。電源も形式的には素子との位置づけであり他の素子同様、回路記述内に含める。ノード codice_9 （グランド）は、必ず含まれていなくてはならない。各部の電圧とは、指定した場所の電位とノード codice_9 との電位差として定義されている。
これを実際に動作させるには解析内容を指定する。
簡単な例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
codice_17 文は formula_4 きざみで formula_5 まで経過させることを意味する（過渡解析）。なおピリオドに始まる語は各種制御文を意味する。
シミュレータとしては動作した結果の観測も可能でなければならない。次の指定で表示ができる。
簡単な例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
codice_18 文でノード1の電圧と電源codice_19の電流を一覧として出力する。ほかに codice_20 文もありグラフ化することができる。
期待するような、コンデンサに充電されていくようなシミュレーション結果はこのままだと出てこない。これはSPICEは過渡解析を行う前に自動的にDC解析により初期条件の電位を決定し、この際コンデンサはショート状態として扱われるため、コンデンサに充電された状態でシミュレーションが開始してしまうためである。充電されていない状態でシミュレーションを開始するためには、codice_21 文を使用して初期条件における電位を明示的に指定する。
簡単な例5：CR回路 + 直流電源 + 過渡解析 + 初期条件 + 表示
 CR circuit+power+transient+ic+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
 .IC V(1) = 2
 .END
この例では、コンデンサcodice_8の抵抗codice_23側のノードの初期電位をformula_6に設定する。これはcodice_19の電圧と等しいため、コンデンサが充電されていない状態からシミュレーションが行われる。
なお先頭行とcodice_3の間の記述順序は任意である。
SPICEはテキストによる記述を基本としているが、商用版ソフトウェアなどでは回路図CADと統合化してグラフィカルな記述も可能となり、より使いやすくなっている。
素子詳細.
素子の記述は一般に頭が種別を示すインスタンス名、それに続くノード名の列挙、必要に応じてパラメータなどの値の列挙が続く形式となっている。ノード名は初期は数値が基本であるがSPICEの種類、バージョンにより英数字での単語も可能となっている。
以下に主要な素子を列挙する。（細かいオプションは略）
抵抗(codice_26).
 Rインスタンス名 N+ N- 値
キャパシタ(codice_27).
 Cインスタンス名 N+ N- 値
インダクタ(codice_28).
 Lインスタンス名 N+ N- 値
相互インダクタ(codice_29).
 Kインスタンス名 Lインスタンス名1次 Lインスタンス名2次 M結合
独立電圧源(codice_12).
 Vインスタンス名 N+ N- [オプション …]
独立電流源(codice_31).
 Iインスタンス名 N+ N- [オプション …]
電圧制御電流源(codice_32).
 Gインスタンス名 N+ N- N制御+ N制御- 値
電圧制御電圧源(codice_33).
 Eインスタンス名 N+ N- N制御+ N制御- 値
電流制御電流源(codice_34).
 Fインスタンス名 N+ N- N制御 値
電流制御電圧源(codice_35).
 Hインスタンス名 N+ N- N制御 値
ダイオード(codice_36).
 Dインスタンス名 NA NK モデル名 [オプション …]
バイポーラトランジスタ(codice_37).
 Qインスタンス名 NC NB NE モデル名 [オプション …]
接合形電界効果トランジスタ(codice_38).
 Jインスタンス名 ND NG NS [NB] モデル名 [オプション …]
MOS形電界効果トランジスタ(codice_39).
 Mインスタンス名 ND NG NS [NB] モデル名 [オプション …]
無損失伝送線路(codice_40).
 Tインスタンス名 N1+ N1- N2+ N2- Z0=値
有損失伝送線路(codice_41).
 Oインスタンス名 N1+ N1- N2+ N2- モデル名
一様分布RC線路(codice_42).
 Uインスタンス名 N1 N2 N3 モデル名 L=length [オプション …]
サブサーキット.
定義の仕方.
 .SUBCKT 回路名 N1 N2 …
 回路記述
 .ENDS
素子ではないが同一の回路ブロックを複数使用する場合、それを階層化するために用いる。codice_43、codice_44、codice_45 は端子名。
利用の仕方.
この回路の利用するには、
 Xインスタンス名 回路名 N1端子に接続するネット名 N2端子に接続するネット名 …
と記述する。
制御文詳細.
過渡解析初期設定(codice_21).
 .IC Vインスタンス名1=初期値1 [Vネット名2=初期値2 …]
過渡解析指定(codice_17).
 .TRAN ステップ 最終時刻 [オプション …]
直流解析指定(codice_48).
 .DC 対象のインスタンス名 開始値 終了値 増分値 [オプション …]
温度指定(codice_49).
 .TEMP 温度
オプション(codice_50).
 .OPTIONS オプション1 [オプション2 …]
歴史.
初期のバージョンはFORTRANで書かれておりフリーウェアとして公開されている。後にはC言語に移植された（バージョン3）。
1980年代　商用版各種登場(HSPICE、PSPICEなど)
名前の由来.
 という名前は、英語の「」に由来する。