コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「SPICE (ソフトウェア)」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
Cewbot (会話 | 投稿記録)
m Cewbot: ウィキ文法修正 26: HTMLの<b>タグの使用
7行目: 7行目:
== 回路、動作記述 ==
== 回路、動作記述 ==
=== 概略 ===
=== 概略 ===
シミュレータへの入力となる回路や動作、制御文などは[[テキスト]]で記述する。各項目の基本は行単位であるが複数行にまたがる記述も可能であり、その場合には次の行の先頭を <code><b>+</b></code> にする。コマンドの記述は終止符 (<code><b>.</b></code>) から始まる。
シミュレータへの入力となる回路や動作、制御文などは[[テキスト]]で記述する。各項目の基本は行単位であるが複数行にまたがる記述も可能であり、その場合には次の行の先頭を <code>'''+'''</code> にする。コマンドの記述は終止符 (<code>'''.'''</code>) から始まる。


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


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


行頭が <code>*</code> である行は人間のための注釈である。
行頭が <code>*</code> である行は人間のための注釈である。
18行目: 18行目:


CR circuit
CR circuit
<b>*</b> 0---R1---1---C1---2
'''*''' 0---R1---1---C1---2
<b>R</b>1 0 1 10
'''R'''1 0 1 10
<b>C</b>1 1 2 20
'''C'''1 1 2 20
<b>.END</b>
'''.END'''


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


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


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


CR circuit+power
CR circuit+power
<b>*</b> 0---R1---1---C1---2---V1---0
'''*''' 0---R1---1---C1---2---V1---0
<b>R</b>1 0 1 10
'''R'''1 0 1 10
<b>C</b>1 1 2 20
'''C'''1 1 2 20
<b>V</b>1 2 0 5
'''V'''1 2 0 5
<b>.END</b>
'''.END'''


この例では前述の回路の両端(+側がノード <code>2</code> で-側がノード <code>0</code> )に<math>5V</math>の電圧を加えたことになる。電源には直流のほか[[正弦波]]やパルス波形、[[定電流源]]なども指定できる。電源も形式的には素子との位置づけであり他の素子同様、回路記述内に含める。ノード <code>0</code> (グランド)は、必ず含まれていなくてはならない。各部の電圧とは、指定した場所の電位とノード <code>0</code> との電位差として定義されている。
この例では前述の回路の両端(+側がノード <code>2</code> で-側がノード <code>0</code> )に<math>5V</math>の電圧を加えたことになる。電源には直流のほか[[正弦波]]やパルス波形、[[定電流源]]なども指定できる。電源も形式的には素子との位置づけであり他の素子同様、回路記述内に含める。ノード <code>0</code> (グランド)は、必ず含まれていなくてはならない。各部の電圧とは、指定した場所の電位とノード <code>0</code> との電位差として定義されている。
43行目: 43行目:


CR circuit+power+transient
CR circuit+power+transient
<b>.TRAN</b> 1 10
'''.TRAN''' 1 10
<b>*</b> 0---R1---1---C1---2---V1---0
'''*''' 0---R1---1---C1---2---V1---0
<b>R</b>1 0 1 10
'''R'''1 0 1 10
<b>C</b>1 1 2 20
'''C'''1 1 2 20
<b>V</b>1 2 0 5
'''V'''1 2 0 5
<b>.END</b>
'''.END'''


<code><b>.TRAN</b></code> 文は <math>1sec</math> きざみで <math>10sec</math> まで経過させることを意味する(過渡解析)。なおピリオドに始まる語は各種制御文を意味する。
<code>'''.TRAN'''</code> 文は <math>1sec</math> きざみで <math>10sec</math> まで経過させることを意味する(過渡解析)。なおピリオドに始まる語は各種制御文を意味する。


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


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


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


期待するような、コンデンサに充電されていくようなシミュレーション結果はこのままだと出てこない。これはSPICEは過渡解析を行う前に自動的にDC解析により初期条件の電位を決定し、この際コンデンサはショート状態として扱われるため{{要出典|date=2013年2月|title=コンデンサの初期状態は短絡(ショート)ではなく開放ではないでしょうか}}、コンデンサに充電された状態でシミュレーションが開始してしまうためである。充電されていない状態でシミュレーションを開始するためには、<code><b>.IC</b></code> 文を使用して初期条件における電位を明示的に指定する。
期待するような、コンデンサに充電されていくようなシミュレーション結果はこのままだと出てこない。これはSPICEは過渡解析を行う前に自動的にDC解析により初期条件の電位を決定し、この際コンデンサはショート状態として扱われるため{{要出典|date=2013年2月|title=コンデンサの初期状態は短絡(ショート)ではなく開放ではないでしょうか}}、コンデンサに充電された状態でシミュレーションが開始してしまうためである。充電されていない状態でシミュレーションを開始するためには、<code>'''.IC'''</code> 文を使用して初期条件における電位を明示的に指定する。


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


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


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


なお先頭行と<code><b>.END</b></code>の間の記述順序は任意である。
なお先頭行と<code>'''.END'''</code>の間の記述順序は任意である。


SPICEはテキストによる記述を基本としているが、商用版ソフトウェアなどでは回路図CADと統合化してグラフィカルな記述も可能となり、より使いやすくなっている。
SPICEはテキストによる記述を基本としているが、商用版ソフトウェアなどでは回路図CADと統合化してグラフィカルな記述も可能となり、より使いやすくなっている。
91行目: 91行目:
以下に主要な素子を列挙する。(細かいオプションは略)
以下に主要な素子を列挙する。(細かいオプションは略)
====抵抗(<code>R</code>)====
====抵抗(<code>R</code>)====
<b>R</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>値</var>
'''R'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>値</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
121行目: 121行目:


====キャパシタ(<code>C</code>)====
====キャパシタ(<code>C</code>)====
<b>C</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>値</var>
'''C'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>値</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
151行目: 151行目:


====インダクタ(<code>L</code>)====
====インダクタ(<code>L</code>)====
<b>L</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>値</var>
'''L'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>値</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
181行目: 181行目:


====相互インダクタ(<code>K</code>)====
====相互インダクタ(<code>K</code>)====
<b>K</b><var>インスタンス名</var> <b>L</b><var>インスタンス名<sub>1次</sub></var> <b>L</b><var>インスタンス名<sub>2次</sub></var> <var>M<sub>結合</sub></var>
'''K'''<var>インスタンス名</var> '''L'''<var>インスタンス名<sub>1次</sub></var> '''L'''<var>インスタンス名<sub>2次</sub></var> <var>M<sub>結合</sub></var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
187行目: 187行目:
|<code><var>インスタンス名</var></code>||必須||インスタンス名。
|<code><var>インスタンス名</var></code>||必須||インスタンス名。
|-
|-
|<code><b>L</b><var>インスタンス名<sub>1次</sub></var></code>||必須||1次側のインダクタの体識別名。
|<code>'''L'''<var>インスタンス名<sub>1次</sub></var></code>||必須||1次側のインダクタの体識別名。
|-
|-
|<code><b>L</b><var>インスタンス名<sub>2次</sub></var></code>||必須||2次側のインダクタの体識別名。
|<code>'''L'''<var>インスタンス名<sub>2次</sub></var></code>||必須||2次側のインダクタの体識別名。
|-
|-
|<var>M<sub>結合</sub></var>||必須||結合係数。
|<var>M<sub>結合</sub></var>||必須||結合係数。
195行目: 195行目:


====独立電圧源(<code>V</code>)====
====独立電圧源(<code>V</code>)====
<b>V</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> [<var>オプション</var> <var>&hellip;</var>]
'''V'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
209行目: 209行目:


====独立電流源(<code>I</code>)====
====独立電流源(<code>I</code>)====
<b>I</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> [<var>オプション</var> <var>&hellip;</var>]
'''I'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
223行目: 223行目:


====電圧制御電流源(<code>G</code>)====
====電圧制御電流源(<code>G</code>)====
<b>G</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>N<sub>制御+</sub></var> <var>N<sub>制御-</sub></var> <var>値</var>
'''G'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>N<sub>制御+</sub></var> <var>N<sub>制御-</sub></var> <var>値</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
241行目: 241行目:


====電圧制御電圧源(<code>E</code>)====
====電圧制御電圧源(<code>E</code>)====
<b>E</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>N<sub>制御+</sub></var> <var>N<sub>制御-</sub></var> <var>値</var>
'''E'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>N<sub>制御+</sub></var> <var>N<sub>制御-</sub></var> <var>値</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
259行目: 259行目:


====電流制御電流源(<code>F</code>)====
====電流制御電流源(<code>F</code>)====
<b>F</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>N<sub>制御</sub></var> <var>値</var>
'''F'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>N<sub>制御</sub></var> <var>値</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
275行目: 275行目:


====電流制御電圧源(<code>H</code>)====
====電流制御電圧源(<code>H</code>)====
<b>H</b><var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>N<sub>制御</sub></var> <var>値</var>
'''H'''<var>インスタンス名</var> <var>N<sub>+</sub></var> <var>N<sub>-</sub></var> <var>N<sub>制御</sub></var> <var>値</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
291行目: 291行目:


====ダイオード(<code>D</code>)====
====ダイオード(<code>D</code>)====
<b>D</b><var>インスタンス名</var> <var>N<sub>A</sub></var> <var>N<sub>K</sub></var> <var>モデル名</var> [<var>オプション</var> <var>&hellip;</var>]
'''D'''<var>インスタンス名</var> <var>N<sub>A</sub></var> <var>N<sub>K</sub></var> <var>モデル名</var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
307行目: 307行目:


====バイポーラトランジスタ(<code>Q</code>)====
====バイポーラトランジスタ(<code>Q</code>)====
<b>Q</b><var>インスタンス名</var> <var>N<sub>C</sub></var> <var>N<sub>B</sub></var> <var>N<sub>E</sub></var> <var>モデル名</var> [<var>オプション</var> <var>&hellip;</var>]
'''Q'''<var>インスタンス名</var> <var>N<sub>C</sub></var> <var>N<sub>B</sub></var> <var>N<sub>E</sub></var> <var>モデル名</var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
325行目: 325行目:


====接合形電界効果トランジスタ(<code>J</code>)====
====接合形電界効果トランジスタ(<code>J</code>)====
<b>J</b><var>インスタンス名</var> <var>N<sub>D</sub></var> <var>N<sub>G</sub></var> <var>N<sub>S</sub></var> [<var>N<sub>B</sub></var>] <var>モデル名</var> [<var>オプション</var> <var>&hellip;</var>]
'''J'''<var>インスタンス名</var> <var>N<sub>D</sub></var> <var>N<sub>G</sub></var> <var>N<sub>S</sub></var> [<var>N<sub>B</sub></var>] <var>モデル名</var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
345行目: 345行目:


====MOS形電界効果トランジスタ(<code>M</code>)====
====MOS形電界効果トランジスタ(<code>M</code>)====
<b>M</b><var>インスタンス名</var> <var>N<sub>D</sub></var> <var>N<sub>G</sub></var> <var>N<sub>S</sub></var> [<var>N<sub>B</sub></var>] <var>モデル名</var> [<var>オプション</var> <var>&hellip;</var>]
'''M'''<var>インスタンス名</var> <var>N<sub>D</sub></var> <var>N<sub>G</sub></var> <var>N<sub>S</sub></var> [<var>N<sub>B</sub></var>] <var>モデル名</var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
365行目: 365行目:


====無損失伝送線路(<code>T</code>)====
====無損失伝送線路(<code>T</code>)====
<b>T</b><var>インスタンス名</var> <var>N<sub>1+</sub></var> <var>N<sub>1-</sub></var> <var>N<sub>2+</sub></var> <var>N<sub>2-</sub></var> <b>Z0=</b><var>値</var>
'''T'''<var>インスタンス名</var> <var>N<sub>1+</sub></var> <var>N<sub>1-</sub></var> <var>N<sub>2+</sub></var> <var>N<sub>2-</sub></var> '''Z0='''<var>値</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
383行目: 383行目:


====有損失伝送線路(<code>O</code>)====
====有損失伝送線路(<code>O</code>)====
<b>O</b><var>インスタンス名</var> <var>N<sub>1+</sub></var> <var>N<sub>1-</sub></var> <var>N<sub>2+</sub></var> <var>N<sub>2-</sub></var> <var>モデル名</var>
'''O'''<var>インスタンス名</var> <var>N<sub>1+</sub></var> <var>N<sub>1-</sub></var> <var>N<sub>2+</sub></var> <var>N<sub>2-</sub></var> <var>モデル名</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
401行目: 401行目:


====一様分布RC線路(<code>U</code>)====
====一様分布RC線路(<code>U</code>)====
<b>U</b><var>インスタンス名</var> <var>N<sub>1</sub></var> <var>N<sub>2</sub></var> <var>N<sub>3</sub></var> <var>モデル名</var> <b>L=</b><var>length</var> [<var>オプション</var> <var>&hellip;</var>]
'''U'''<var>インスタンス名</var> <var>N<sub>1</sub></var> <var>N<sub>2</sub></var> <var>N<sub>3</sub></var> <var>モデル名</var> '''L='''<var>length</var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!任意性||指定するべきもの
!項目!!任意性||指定するべきもの
420行目: 420行目:
====サブサーキット====
====サブサーキット====
=====定義の仕方=====
=====定義の仕方=====
<b>.SUBCKT</b> <var>回路名</var> <var>N<sub>1</sub></var> <var>N<sub>2</sub></var> <var>&hellip;</var>
'''.SUBCKT''' <var>回路名</var> <var>N<sub>1</sub></var> <var>N<sub>2</sub></var> <var>&hellip;</var>
<var>回路記述</var>
<var>回路記述</var>
<b>.ENDS</b>
'''.ENDS'''
素子ではないが同一の回路ブロックを複数使用する場合、それを階層化するために用いる。<code><var>N<sub>1</sub></var></code>、<code><var>N<sub>2</sub></var></code>、<code><var>&hellip;</var></code> は端子名。
素子ではないが同一の回路ブロックを複数使用する場合、それを階層化するために用いる。<code><var>N<sub>1</sub></var></code>、<code><var>N<sub>2</sub></var></code>、<code><var>&hellip;</var></code> は端子名。


=====利用の仕方=====
=====利用の仕方=====
この回路の利用するには、
この回路の利用するには、
<b>X</b><var>インスタンス名</var> <var>回路名</var> <var>N<sub>1</sub>端子に接続するネット名</var> <var>N<sub>2</sub>端子に接続するネット名</var> <var>&hellip;</var>
'''X'''<var>インスタンス名</var> <var>回路名</var> <var>N<sub>1</sub>端子に接続するネット名</var> <var>N<sub>2</sub>端子に接続するネット名</var> <var>&hellip;</var>
と記述する。
と記述する。


=== 制御文詳細 ===
=== 制御文詳細 ===
====過渡解析初期設定(<code>.IC</code>)====
====過渡解析初期設定(<code>.IC</code>)====
<b>.IC</b> <b>V</b><var>インスタンス名<sub>1</sub></var>=<var>初期値<sub>1</sub></var> [<b>V</b><var>ネット名<sub>2</sub></var>=<var>初期値<sub>2</sub></var> <var>&hellip;</var>]
'''.IC''' '''V'''<var>インスタンス名<sub>1</sub></var>=<var>初期値<sub>1</sub></var> ['''V'''<var>ネット名<sub>2</sub></var>=<var>初期値<sub>2</sub></var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!指定すべき値
!項目!!指定すべき値
|-
|-
|<code><b>V</b><var>インスタンス名<sub>n</sub></var></code>||初期値を指定したいノードの名前。
|<code>'''V'''<var>インスタンス名<sub>n</sub></var></code>||初期値を指定したいノードの名前。
|-
|-
|<code><var>初期値<sub>n</sub></var></code>||<code><b>V</b><var>インスタンス名<sub>n</sub></var></code>で指定したノードの初期値。
|<code><var>初期値<sub>n</sub></var></code>||<code>'''V'''<var>インスタンス名<sub>n</sub></var></code>で指定したノードの初期値。
|}
|}


====過渡解析指定(<code>.TRAN</code>)====
====過渡解析指定(<code>.TRAN</code>)====
<b>.TRAN</b> <var>ステップ</var> <var>最終時刻</var> [<var>オプション</var> <var>&hellip;</var>]
'''.TRAN''' <var>ステップ</var> <var>最終時刻</var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!指定すべき値
!項目!!指定すべき値
|-
|-
|<code><var>ステップ</var></code>||<code><b>.PRINT</b></code> または <code><b>.PLOT</b></code> の区切り時間。
|<code><var>ステップ</var></code>||<code>'''.PRINT'''</code> または <code>'''.PLOT'''</code> の区切り時間。
|-
|-
|<code><var>最終時刻</var></code>||<code><b>.PRINT</b></code> または <code><b>.PLOT</b></code> の最終時刻。
|<code><var>最終時刻</var></code>||<code>'''.PRINT'''</code> または <code>'''.PLOT'''</code> の最終時刻。
|-
|-
|<code><var>オプション</var> <var>&hellip;</var></code>||オプション
|<code><var>オプション</var> <var>&hellip;</var></code>||オプション
454行目: 454行目:


====直流解析指定(<code>.DC</code>)====
====直流解析指定(<code>.DC</code>)====
<b>.DC</b> <var>対象のインスタンス名</var> <var>開始値</var> <var>終了値<var> <var>増分値</var> [<var>オプション</var> <var>&hellip;</var>]
'''.DC''' <var>対象のインスタンス名</var> <var>開始値</var> <var>終了値<var> <var>増分値</var> [<var>オプション</var> <var>&hellip;</var>]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!指定すべき値
!項目!!指定すべき値
470行目: 470行目:


====温度指定(<code>.TEMP</code>)====
====温度指定(<code>.TEMP</code>)====
<b>.TEMP</b> <var>温度</var>
'''.TEMP''' <var>温度</var>
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!指定すべき値
!項目!!指定すべき値
478行目: 478行目:


====オプション(<code>.OPTIONS</code>)====
====オプション(<code>.OPTIONS</code>)====
<b>.OPTIONS</b> <var>オプション<sub>1</sub></var> [<var>オプション<sub>2</sub></var> &hellip;]
'''.OPTIONS''' <var>オプション<sub>1</sub></var> [<var>オプション<sub>2</sub></var> &hellip;]
{|class=wikitable style="font-size:small"
{|class=wikitable style="font-size:small"
!項目!!指定すべき値
!項目!!指定すべき値

2022年9月11日 (日) 01:09時点における版

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 の行の最後はを示す。012 はそれぞれの端子のノードを示す。結果として抵抗とキャパシタが直列につながった回路となる。

これだけでは回路記述のみであり電気回路として動作しない。回路として動作させるためには、例えば次のように電圧源(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

素子ではないが同一の回路ブロックを複数使用する場合、それを階層化するために用いる。N1N2 は端子名。

利用の仕方

この回路の利用するには、

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 …]
項目 指定すべき値
オプションn オプション。

歴史

初期のバージョンはFORTRANで書かれておりフリーウェアとして公開されている。後にはC言語に移植された(バージョン3)。

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

派生したSPICEソフトウェア

名前の由来

SPICE という名前は、英語の「simulation program with integrated circuit emphasis」に由来する。

外部リンク