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(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
文もありグラフ化することができる。
期待するような、コンデンサに充電されていくようなシミュレーション結果はこのままだと出てこない。これはSPICEは過渡解析を行う前に自動的にDC解析により初期条件の電位を決定し、この際コンデンサはショート状態として扱われるため[要出典]、コンデンサに充電された状態でシミュレーションが開始してしまうためである。充電されていない状態でシミュレーションを開始するためには、.IC
文を使用して初期条件における電位を明示的に指定する。
簡単な例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
この例では、コンデンサC1
の抵抗R1
側のノードの初期電位をに設定する。これはV1
の電圧と等しいため、コンデンサが充電されていない状態からシミュレーションが行われる。
なお先頭行と.END
の間の記述順序は任意である。
SPICEはテキストによる記述を基本としているが、商用版ソフトウェアなどでは回路図CADと統合化してグラフィカルな記述も可能となり、より使いやすくなっている。
素子詳細
素子の記述は一般に頭が種別を示すインスタンス名、それに続くノード名の列挙、必要に応じてパラメータなどの値の列挙が続く形式となっている。ノード名は初期は数値が基本であるがSPICEの種類、バージョンにより英数字での単語も可能となっている。
以下に主要な素子を列挙する。(細かいオプションは略)
抵抗(R
)
Rインスタンス名 N+ N- 値
項目 |
任意性 |
指定するべきもの
|
インスタンス名 |
必須 |
インスタンス名。
|
N+ |
必須 |
プラス端子に接続するネット名。
|
N- |
必須 |
マイナス端子に接続するネット名。
|
値 |
必須 |
抵抗値。単位はオーム。単位は記述しないが、接辞は使える。
接辞
文字列 |
大きさ
|
meg |
|
k |
|
m |
|
u |
|
n |
|
p |
|
|
キャパシタ(C
)
Cインスタンス名 N+ N- 値
項目 |
任意性 |
指定するべきもの
|
インスタンス名 |
必須 |
インスタンス名。
|
N+ |
必須 |
プラス端子に接続するネット名。
|
N- |
必須 |
マイナス端子に接続するネット名。
|
値 |
必須 |
容量値。単位はファラド。単位は記述しないが、接辞は使える。
接辞
文字列 |
大きさ
|
meg |
|
k |
|
m |
|
u |
|
n |
|
p |
|
|
インダクタ(L
)
Lインスタンス名 N+ N- 値
項目 |
任意性 |
指定するべきもの
|
インスタンス名 |
必須 |
インスタンス名。
|
N+ |
必須 |
プラス端子に接続するネット名。
|
N- |
必須 |
マイナス端子に接続するネット名。
|
値 |
必須 |
インダクタンス値。単位はヘンリー。単位は記述しないが、接辞は使える。
接辞
文字列 |
大きさ
|
meg |
|
k |
|
m |
|
u |
|
n |
|
p |
|
|
相互インダクタ(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 |
初期値を指定したいノードの名前。
|
初期値n |
Vインスタンス名n で指定したノードの初期値。
|
過渡解析指定(.TRAN
)
.TRAN ステップ 最終時刻 [オプション …]
項目 |
指定すべき値
|
ステップ |
.PRINT または .PLOT の区切り時間。
|
最終時刻 |
.PRINT または .PLOT の最終時刻。
|
オプション … |
オプション
|
直流解析指定(.DC
)
.DC 対象のインスタンス名 開始値 終了値 増分値 [オプション …]
項目 |
指定すべき値
|
対象のインスタンス名 |
対象の独立電圧源または電流源のインスタンス名。
|
開始値 |
開始値。
|
終了値 |
終了値。
|
増分 |
増分。
|
オプション … |
オプション。
|
温度指定(.TEMP
)
.TEMP 温度
オプション(.OPTIONS
)
.OPTIONS オプション1 [オプション2 …]
歴史
初期のバージョンはFORTRANで書かれておりフリーウェアとして公開されている。後にはC言語に移植された(バージョン3)。
1980年代 商用版各種登場(HSPICE、PSPICEなど)
派生したSPICEソフトウェア
- spice3f (バークレイによる最終版)
- ngspice (オープンソース版SPICEのひとつ)
- Qucs (オープンソース版SPICEのひとつ入手ページ)
- HSPICE (meta software社開発、現シノプシス)
- PSpice (MicroSim社開発、現ケイデンス・デザイン・システムズ)
- SmartSpice (シルバコ社 入手ページ)
- LTSpice (アナログ・デバイセズ社配布 入手ページ)
- TINA-TI (テキサス・インスツルメンツ社配布 入手ページ)
名前の由来
SPICE という名前は、英語の「simulation program with integrated circuit emphasis」に由来する。
外部リンク