SPICE (ソフトウェア)

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

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

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

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

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

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

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

簡単な例1：CR回路

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

ここでR1の行の最後は10\Omega、`C1` の行の最後は20Fを示す。`0`、`1`、`2` はそれぞれの端子のノードを示す。結果として抵抗とキャパシタが直列につながった回路となる。

これだけでは回路記述のみであり電気回路として動作しない。回路として動作させるためには、例えば次のように電圧源（`'''V'''` で始まる素子）を付加する。

簡単な例2：CR回路 + 直流電源

 CR circuit+power
 ***** 0---R1---1---C1---2---V1---0
 **R**1 0 1 10
 **C**1 1 2 20
 **V**1 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
 **R**1 0 1 10
 **C**1 1 2 20
 **V**1 2 0 5
 **.END**

`'''.TRAN'''` 文は 1sec きざみで 10sec まで経過させることを意味する（過渡解析）。なおピリオドに始まる語は各種制御文を意味する。

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

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

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

`'''.PRINT'''` 文でノード1の電圧と電源`'''V'''1`の電流を一覧として出力する。ほかに `'''.PLOT'''` 文もありグラフ化することができる。

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

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

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

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

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

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

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

#### キャパシタ(<code>C</code>)
 **C**インスタンス名 N+ N- 値

#### インダクタ(<code>L</code>)
 **L**インスタンス名 N+ N- 値

#### 相互インダクタ(<code>K</code>)
 **K**インスタンス名 **L**インスタンス名1次 **L**インスタンス名2次 M結合

#### 独立電圧源(<code>V</code>)
 **V**インスタンス名 N+ N- [オプション &hellip;]

#### 独立電流源(<code>I</code>)
 **I**インスタンス名 N+ N- [オプション &hellip;]

#### 電圧制御電流源(<code>G</code>)
 **G**インスタンス名 N+ N- N制御+ N制御- 値

#### 電圧制御電圧源(<code>E</code>)
 **E**インスタンス名 N+ N- N制御+ N制御- 値

#### 電流制御電流源(<code>F</code>)
 **F**インスタンス名 N+ N- N制御 値

#### 電流制御電圧源(<code>H</code>)
 **H**インスタンス名 N+ N- N制御 値

#### ダイオード(<code>D</code>)
 **D**インスタンス名 NA NK モデル名 [オプション &hellip;]

#### バイポーラトランジスタ(<code>Q</code>)
 **Q**インスタンス名 NC NB NE モデル名 [オプション &hellip;]

#### 接合形電界効果トランジスタ(<code>J</code>)
 **J**インスタンス名 ND NG NS [NB] モデル名 [オプション &hellip;]

#### MOS形電界効果トランジスタ(<code>M</code>)
 **M**インスタンス名 ND NG NS [NB] モデル名 [オプション &hellip;]

#### 無損失伝送線路(<code>T</code>)
 **T**インスタンス名 N1+ N1- N2+ N2- **Z0=**値

#### 有損失伝送線路(<code>O</code>)
 **O**インスタンス名 N1+ N1- N2+ N2- モデル名

#### 一様分布RC線路(<code>U</code>)
 **U**インスタンス名 N1 N2 N3 モデル名 **L=**length [オプション &hellip;]

#### サブサーキット
##### 定義の仕方
 **.SUBCKT** 回路名 N1 N2 &hellip;
 回路記述
 **.ENDS**
素子ではないが同一の回路ブロックを複数使用する場合、それを階層化するために用いる。`<var>N<sub>1</sub></var>`、`<var>N<sub>2</sub></var>`、`<var>&hellip;</var>` は端子名。

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

### 制御文詳細
#### 過渡解析初期設定(<code>.IC</code>)
 **.IC** **V**インスタンス名1=初期値1 [**V**ネット名2=初期値2 &hellip;]

#### 過渡解析指定(<code>.TRAN</code>)
 **.TRAN** ステップ 最終時刻 [オプション &hellip;]

#### 直流解析指定(<code>.DC</code>)
 **.DC** 対象のインスタンス名 開始値 終了値 増分値 [オプション &hellip;]

#### 温度指定(<code>.TEMP</code>)
 **.TEMP** 温度

#### オプション(<code>.OPTIONS</code>)
 **.OPTIONS** オプション1 [オプション2 &hellip;]

## 歴史
初期のバージョンは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 (テキサス・インスツルメンツ社配布 入手ページ)

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

## 外部リンク
* カリフォルニア大学バークレー校によるSPICE解説
* A BRIEF HISTORY OF SPICE
* Spice 3f5マニュアル 日本語訳 (HTML版) | (PDF版)