SPICE ネットリストの Simscape ブロックへの変換
SPICE 変換アシスタントを使用して、SPICE コンポーネントを同等の Simscape™ コンポーネントに変換できます。多くの場合、この変換は自動で行われます。しかし、SPICE は機能が豊富な言語であるため、手動による何らかの介入なしに、完全な変換ができるとは限りません。
SPICE サブサーキットを同等の Simscape コンポーネントに変換するには、次の手順に従います。
関数
subcircuit2ssc
を使用して、SPICE ネットリストのファイルから Simscape 言語のコンポーネント ファイルを生成します。オプションのsubcircuit1,…,subcircuitN
入力引数を使用して、変換するサブサーキットを指定できます。生成された Simscape コンポーネント ファイルに対して、必要な手動変換を行います。必要な手動変換を特定するには、生成された Simscape コンポーネント ファイルの冒頭のコメントを確認してください。オプションの
unsupportedCommands
出力引数を使用して、各サブサーキットでサポートされていない SPICE コマンドがリストされたstruct
配列を生成することができます。ssc_build
を使用してライブラリを構築するか、Simscape Component ブロックを使用して個々のコンポーネントをモデルに追加します。
構文と構文解釈に違いがある多くの異なった SPICE シミュレーターがあります。変換アシスタントは、Cadence® PSpice と同じ構文を使用し、違いがある箇所では PSpice に準拠します。
コマンド
SPICE 変換アシスタントは次のコマンドをサポートします。
.FUNC
— 再利用可能な関数.PARAM
— 定義可能なパラメーター.MODEL
— 再利用可能なコンポーネント パラメーターのセット.SUBCKT
— サブサーキット.LIB
— 外部ネットリストからモデルを含める命令.INC
— 外部ネットリストの内容を含める命令
変換アシスタントは、Simscape 関数を使用して、.FUNC
SPICE コマンドを実装します。これらの関数は、+
という名前の名前空間サブライブラリ内に置かれます。ここで、subcircuit_name
_simscape_functionssubcircuit_name
は変換されるサブサーキットの名前です。
抵抗、コンデンサ、インダクタの .MODEL
構文を次のように指定します。
.MODEL <model name> res(r=<value>) .MODEL <model name> cap(c=<value>) .MODEL <model name> ind(l=<value>)
r
、c
、l
の値は、コンポーネントの宣言で指定されている値のスケーリング係数です。この動作は PSpice に準拠しますが、すべてのシミュレーターで一定というわけではありません。変換アシスタントは、.IC
ステートメントを使用して指定された初期条件を自動的には変換しません。ただし、構文 IC=<value>
を使用して、コンデンサとインダクタの初期条件を指定することができます。また、生成された Simscape コンポーネント ファイルから、任意の .IC
ステートメントを手動で変換できます。
SPICE サブサーキットを Simscape ブロックに変換するのが変換アシスタントの目的であるため、.TRAN
などのシミュレーション コマンドは無視されます。
数値接尾辞
変換アシスタントは、次の SPICE 数値接尾辞をサポートします。
接尾辞 | 名前 | スケール |
---|---|---|
T | テラ | 1e12 |
G | ギガ | 1e9 |
MEG | メガ | 1e6 |
K | キロ | 1e3 |
M | ミリ | 1e-3 |
MIL | -- | 25.4e-6 |
U | マイクロ | 1e-6 |
N | ナノ | 1e-9 |
P | ピコ | 1e-12 |
F | フェムト | 1e-15 |
数学関数
変換アシスタントは、SPICE と Simscape で使用される次の基本的な数学関数をサポートしています。これらの基本的な数学関数は連続または平滑でないことから、シミュレーション中に数値的な問題を引き起こす可能性があります。これらの問題を解決するには、これらの関数を平滑化する必要がある場合があります。
関数 subcircuit2ssc
は、SPICE サブサーキットの変換時に、平滑化パラメーターを自動的にオンにします。平滑化オプションを無効にするには、生成された Simscape コンポーネント ブロックのブロック マスク内で [Specify function smoothing parameters] パラメーターを [No]
に設定します。
初等数学
名前 | SPICE 関数 | Simscape 関数 |
---|---|---|
絶対値 | abs | simscape.function.abs(x,ZC) |
最小要素 | min | simscape.function.minm(x,y,n,epsilon) |
最大要素 | max | simscape.function.maxm(x,y,n,epsilon) |
符号関数 | sgn | simscape.function.sign(x,ZC) |
三角法
名前 | SPICE 関数 | Simscape 関数 |
---|---|---|
正弦 | sin | sin |
逆正弦 | asin | simscape.function.asinm(x,warn) |
双曲線正弦 | sinh | simscape.function.sinhm(x,maxAbsX,warn) |
余弦 | cos | cos |
逆余弦 | acos | simscape.function.acosm(x,warn) |
双曲線余弦 | cosh | simscape.function.coshm(x,maxAbsX,warn) |
正接 | tan | simscape.function.tanm(x,flag,epsilon,x0,warn) |
逆正接 | atan | atan |
4 象限逆正接 | atan2 | atan2 |
双曲線正接 | tanh | tanh |
指数と対数
名前 | SPICE 関数 | Simscape 関数 |
---|---|---|
べき乗 | x**y 、pwr(x,y) または pwrs(x,y) | simscape.function.powerRational(x,y,flag,epsilon,warn) |
指数 | exp | simscape.function.expm(x,xl,xh,warn) |
自然対数 | ln または log | simscape.function.logm(x,x0,warn) |
常用対数 | log10 | simscape.function.log10m(x,x0,warn) |
平方根 | sqrt | simscape.function.sqrtm(x,flag,epsilon,warn) |
変換アシスタントは、log()
を、常用対数ではなく自然対数として解釈します。すべての SPICE シミュレーターがこれについて一貫しているわけではないため、この解釈がご使用の SPICE モデルと一致するかどうかを確認してください。
その他
さらに、変換アシスタントは次の SPICE 関数と Simscape 関数をサポートします。
名前 | SPICE 関数 | Simscape 関数 |
---|---|---|
If 条件 | if | if else |
飽和 | limit | simscape.function.limitm(x,a,b,n,epsilon) |
デバイスを通る電流 | i | i |
デバイスにかかる電圧 | v | v |
ステップ関数 | stp | if x>0, 1 else 0 end |
導関数 (制限を参照) | ddt | der |
テーブル | table | simscape.tablelookup([x1,x2,…xn],[y1,y2,…yn],x,interpolation=linear,extrapolation=nearest) |
Simscape 関数のリスト
simscape.function.hyp(x,epsilon) — 正値を出力する関数
simscape.function.abs(x,ZC) — 絶対値関数
simscape.function.expm(x,xl,xh,warn) — 指数関数
simscape.function.coshm(x,maxAbsX,warn) — 双曲線余弦関数
simscape.function.sinhm(x,maxAbsX,warn) — 双曲線正弦関数
simscape.function.acosm(x,warn) — 逆余弦関数
simscape.function.asinm(x,warn) — 逆正弦関数
simscape.function.limitm(x,a,b,n,epsilon) — 極限関数
simscape.function.logm(x,x0,warn) — 自然対数関数
simscape.function.log10m(x,x0,warn) — 常用対数関数
simscape.function.maxm(x,y,n,epsilon) — 最大値関数
simscape.function.minm(x,y,n,epsilon) — 最小値関数
simscape.function.powerRational(x,y,flag,epsilon,warn) — べき乗関数
simscape.function.sign(x,ZC) — 符号関数
記号
変換アシスタントは、次の SPICE 記号を認識します。
行頭の
+
は、行が前の行から続くことを示す行頭の
*
は、行全体がコメントであることを示す行内の
;
は、インライン コメントの開始を示す
コンポーネント
この節における SPICE コマンドの表記は、次の規則に従います。
<argument>
は、コマンド ライン内の必須項目を表す<argument>*
は、コマンド ライン内の必須項目のうち、1 回以上発生するものを表す[argument]
は、コマンド ライン内のオプション項目を表す[argument]*
は、コマンド ライン内のオプション項目のうち、ゼロ回以上発生するものを表す
次のリストは、サポートされている SPICE コンポーネントの完全なセットと、サポートされている SPICE ネットリスト表記を示しています。SPICE の既定値と異なる .MODEL
パラメーターのみを指定できます。
電源
独立電圧源
V<name> <+ node> <- node> [DC] <value> V<name> <+ node> <- node> exp(<v1> <v2> <td1> <tc1> <td2> <tc2>) V<name> <+ node> <- node> pulse(<v1> <v2> <td> <tr> <tf> <pw> <per>) V<name> <+ node> <- node> pwl(<<tj> <vj>>*) V<name> <+ node> <- node> sffm(<voff> <vampl> <fc> <mod> <fm>) V<name> <+ node> <- node> sin(<voff> <vampl> <freq> <td> <df>)
独立電流源
I<name> <+ node> <- node> [DC] <value> I<name> <+ node> <- node> exp(<i1> <i2> <td1> <tc1> <td2> <tc2>) I<name> <+ node> <- node> pulse(<i1> <i2> <td> <tr> <tf> <pw> <per>) I<name> <+ node> <- node> pwl(<<tj> <ij>>*) I<name> <+ node> <- node> sffm(<ioff> <iampl> <fc> <mod> <fm>) I<name> <+ node> <- node> sin(<ioff> <iampl> <freq> <td> <df>)
電流制御電圧源
H<name> <+ node> <- node> <voltage source name> <gain> H<name> <+ node> <- node> VALUE={<expression>} H<name> <+ node> <- node> POLY(<value>) <voltage source name>* <coefficient>* H<name> <+ node> <- node> TABLE {<expression>}=< <input value>, <output value> >* H<name> <+ node> <- node> <voltage source name> TABLE=< <input value>, <output value> >*
電圧制御電圧源
E<name> <+ node> <- node> <+ control node> <- control node> <gain> E<name> <+ node> <- node> VALUE={<expression>} E<name> <+ node> <- node> POLY(<value>) <<+ control node> <- control node>>* <coefficient>* E<name> <+ node> <- node> TABLE {<expression>}=< <input value>, <output value> >* E<name> <+ node> <- node> <+ control node> <- control node> TABLE=< <input value>, <output value> >*
電流制御電流源
F<name> <+ node> <- node> <voltage source name> <gain> F<name> <+ node> <- node> VALUE={<expression>} F<name> <+ node> <- node> POLY(<value>) <voltage source name>* <coefficient>* F<name> <+ node> <- node> TABLE {<expression>}=< <input value>, <output value> >* F<name> <+ node> <- node> <voltage source name> TABLE=< <input value>, <output value> >*
電圧制御電流源
G<name> <+ node> <- node> <+ control node> <- control node> <gain> G<name> <+ node> <- node> VALUE={<expression>} G<name> <+ node> <- node> POLY(<value>) <<+ control node> <- control node>>* <coefficient>* G<name> <+ node> <- node> TABLE {<expression>}=< <input value>, <output value> >* G<name> <+ node> <- node> <+ control node> <- control node> TABLE=< <input value>, <output value> >*
動作源 (<expression> を中かっこ {} に入れる必要はありません)
B<name> <+ node> <- node> V=<expression> B<name> <+ node> <- node> I=<expression>
受動デバイス
抵抗
R<name> <+ node> <- node> [model name] <value> .MODEL <model name> res(r=<value>)
コンデンサ
C<name> <+ node> <- node> [model name] <value> [IC=<value>] .MODEL <model name> cap(c=<value>)
インダクタ
L<name> <+ node> <- node> [model name] <value> [IC=<value>] .MODEL <model name> ind(l=<value>)
インダクタの結合
K<name> <inductor name> <inductor name>* <value>
スイッチ
電圧制御スイッチ
S<name> <+ node> <- node> <+ control node> <- control node> <model name> .MODEL <model name> sw(ron=<value>, roff=<value>, vt=<value>, vh=<value>)
電流制御スイッチ
W<name> <+ node> <- node> <voltage source name> <model name> .MODEL <model name> csw(ron=<value>, roff=<value>, it=<value>, ih=<value>)
半導体デバイス
ダイオード
D<name> <+ node> <- node> <model name> [area] .MODEL <model name> d(is=<value>, rs=<value>, n=<value>, cjo=<value>, vj=<value>, +m=<value>, fc=<value>, tt=<value>, revbrk=<value>, bv=<value>, ibv=<value>, +xti=<value>, eg=<value>)
バイポーラ接合型トランジスタ (BJT)
NPN
Q<name> <collector node> <base node> <emitter node> [substrate node] <model name> <area> .MODEL <model name> npn(bf=<value>, br=<value>, cjc=<value>, cje=<value>, cjs=<value>, +eg=<value>, fc=<value>, ikf=<value>, ikr=<value>, irb=<value>, is=<value>, isc=<value>, +ise=<value>, itf=<value>, mjc=<value>, mje=<value>, mjs=<value>, nc=<value>, ne=<value>, +nf=<value>, nr=<value>, rb=<value>, rbm=<value>, rc=<value>, re=<value>, tf=<value>, +tr=<value>, vaf=<value>, var=<value>, vjc=<value>, vje=<value>, vjs=<value>, vtf=<value>, +xcjc=<value>, xtb=<value>, xtf=<value>, xti=<value>)
PNP
Q<name> <collector node> <base node> <emitter node> [substrate node] <model name> <area> .MODEL <model name> pnp(bf=<value>, br=<value>, cjc=<value>, cje=<value>, cjs=<value>, +eg=<value>, fc=<value>, ikf=<value>, ikr=<value>, irb=<value>, is=<value>, isc=<value>, +ise=<value>, itf=<value>, mjc=<value>, mje=<value>, mjs=<value>, nc=<value>, ne=<value>, +nf=<value>, nr=<value>, rb=<value>, rbm=<value>, rc=<value>, re=<value>, tf=<value>, +tr=<value>, vaf=<value>, var=<value>, vjc=<value>, vje=<value>, vjs=<value>, vtf=<value>, +xcjc=<value>, xtb=<value>, xtf=<value>, xti=<value>)
接合型電界効果トランジスタ (JFET)
N チャネル
J<name> <drain node> <gate node> <source node> <model name> [area] .MODEL <model name> njf(beta=<value>, cgd=<value>, cgs=<value>, fc=<value>, is=<value>, +lambda=<value>, m=<value>, n=<value>, rd=<value>, rs=<value>, vto=<value>, xti=<value>)
P チャネル
J<name> <drain node> <gate node> <source node> <model name> [area] .MODEL <model name> pjf(beta=<value>, cgd=<value>, cgs=<value>, fc=<value>, is=<value>, +lambda=<value>, m=<value>, n=<value>, rd=<value>, rs=<value>, vto=<value>, xti=<value>)
金属酸化物半導体電界効果トランジスタ (MOSFET)
N チャネル (レベル 1 およびレベル 3 のみをサポート)
M<name> <drain node> <gate node> <source node> <bulk node> <model name> +[L=<value>] [W=<value>] [AD=<value>] [AS=<value>] [PD=<value>] [PS=<value>] [NRD=<value>] +[NRS=<value>] [M=<value>] .MODEL <model name> nmos(cbd=<value>, cbs=<value>, cgbo=<value>, cgdo=<value>, +cgso=<value>, cj=<value>, cjsw=<value>, delta=<value>, eta=<value>, fc=<value>, +gamma=<value>, is=<value>, js=<value>, kappa=<value>, kp=<value>, lambda=<value>, +ld=<value>, level=<value>, mj=<value>, mjsw=<value>, n=<value>, neff=<value>, nfs=<value>, +nss=<value>, nsub=<value>, nrd=<value>, nrs=<value>, pb=<value>, phi=<value>, rd=<value>, +rs=<value>, rsh=<value>, theta=<value>, tox=<value>, tpg=<value>, ucrit=<value>, +uexp=<value>, uo=<value>, vmax=<value>, vto=<value>, xj=<value>)
P チャネル (レベル 1 およびレベル 3 のみをサポート)
M<name> <drain node> <gate node> <source node> <bulk node> <model name> +[L=<value>] [W=<value>] [AD=<value>] [AS=<value>] [PD=<value>] [PS=<value>] [NRD=<value>] +[NRS=<value>] [M=<value>] .MODEL <model name> pmos(cbd=<value>, cbs=<value>, cgbo=<value>, cgdo=<value>, +cgso=<value>, cj=<value>, cjsw=<value>, delta=<value>, eta=<value>, fc=<value>, +gamma=<value>, is=<value>, js=<value>, kappa=<value>, kp=<value>, lambda=<value>, +ld=<value>, level=<value>, mj=<value>, mjsw=<value>, n=<value>, neff=<value>, nfs=<value>, +nss=<value>, nsub=<value>, nrd=<value>, nrs=<value>, pb=<value>, phi=<value>, rd=<value>, +rs=<value>, rsh=<value>, theta=<value>, tox=<value>, tpg=<value>, ucrit=<value>, +uexp=<value>, uo=<value>, vmax=<value>, vto=<value>, xj=<value>)
サブシステム
サブサーキット
X<name> [node]* <subcircuit name> [PARAMS: < <name>=<value> >*]
手動変換の実行
Simscape コンポーネント ファイルを生成した後、各ファイル ヘッダーに未サポートの SPICE コマンドに関するメッセージがないか検査します。たとえば、変換アシスタントは抵抗の温度係数の実装をサポートしません。
R1 p n 1k TC=0.01,-0.002
生成された Simscape コンポーネント ファイルには、サポートされているすべての変換が含まれ、手動変換すべき抵抗の温度係数を特定する次のヘッダーが含まれます。
component test % test % Component automatically generated from a SPICE netlist (11-Dec-2018 09:34:57). % Users should manually implement the following SPICE commands in order to % achieve a complete implementation: % R1: tc 0.01 -0.002
subcircuit2ssc
を参照してください。寄生値
コンデンサやインダクタなどの受動デバイスについて、生成した Simscape コンポーネント ファイルに寄生値を導入するには、[寄生値の指定] パラメーターを [はい] に設定します。次に、[コンデンサの寄生直列抵抗] パラメーターまたは [インダクタの寄生並列コンダクタンス] パラメーターの値を指定します。
制限
ネットリストは PSpice 形式で記述し、構文が正しくなければなりません。変換アシスタントは、PSpice 構文が適切かどうかをチェックしません。
サポートされているのは、PSpice ネットリスト言語の一部のみです。ただし、サポートされていない PSpice コマンドは、手動での変換がしやすいように、対応する Simscape コンポーネント ファイルの冒頭で特定されます。
生成された Simscape コンポーネントを Simscape ブロックに組み込むには、パラメーター値が Simscape の制約に従っていなければなりません。たとえば、基本的なコンデンサの静電容量と基本的なインダクタのインダクタンスは、非ゼロでなければなりません。
変換アシスタントは、関数呼び出し内での SPICE 導関数
ddt
の使用をサポートしません。
参考
関数
subcircuit2ssc
|ssc_build
|ee.spice.semiconductorSubcircuit2lookup
|ee.spice.diodeSubcircuit2lookup