メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

SPICE ネットリストの Simscape ブロックへの変換

R2026a

SPICE 変換アシスタントを使用して、SPICE コンポーネントを同等の Simscape™ コンポーネントに変換できます。多くの場合、この変換は自動で行われます。しかし、SPICE は機能が豊富な言語であるため、手動による何らかの介入なしに、完全な変換ができるとは限りません。

SPICE サブサーキットを同等の Simscape コンポーネントに変換するには、次の手順に従います。

  1. 関数 subcircuit2ssc を使用して、SPICE ネットリストのファイルから Simscape 言語のコンポーネント ファイルを生成します。オプションの subcircuit1,…,subcircuitN 入力引数を使用して、変換するサブサーキットを指定できます。

  2. 生成された Simscape コンポーネント ファイルに対して、必要な手動変換を行います。必要な手動変換を特定するには、生成された Simscape コンポーネント ファイルの冒頭のコメントを確認してください。オプションの unsupportedCommands 出力引数を使用して、各サブサーキットでサポートされていない SPICE コマンドがリストされた struct 配列を生成することができます。

  3. sscbuild を使用してライブラリを構築するか、Simscape Component ブロックを使用して個々のコンポーネントをモデルに追加します。

構文と構文解釈に違いがある多くの異なった SPICE シミュレーターがあります。変換アシスタントは、Cadence® PSpice® と同じ構文を使用し、違いがある箇所では PSpice に準拠します。

コマンド

SPICE 変換アシスタントは次のコマンドをサポートします。

  • .FUNC — 再利用可能な関数

  • .PARAM — 定義可能なパラメーター

  • .MODEL — 再利用可能なコンポーネント パラメーターのセット

  • .SUBCKT — サブサーキット

  • .LIB — 外部ネットリストからモデルを含める命令

  • .INC — 外部ネットリストの内容を含める命令

変換アシスタントは、Simscape 関数を使用して、.FUNC SPICE コマンドを実装します。これらの関数は、+subcircuit_name_simscape_functions という名前の名前空間サブライブラリ内に置かれます。ここで、subcircuit_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 関数
絶対値abssimscape.function.abs(x,ZC)
最小minsimscape.function.minm(x,y,n,epsilon)
最大maxsimscape.function.maxm(x,y,n,epsilon)
符号sgnsimscape.function.sign(x,ZC)

三角法

名前SPICE 関数Simscape 関数
正弦sinsin
逆正弦asinsimscape.function.asinm(x,warn)
双曲線正弦sinhsimscape.function.sinhm(x,maxAbsX,warn)

逆双曲線正弦 (R2025a 以降)

asinhsimscape.function.asinhm(x,maxAbsX,warn)
余弦coscos
逆余弦acossimscape.function.acosm(x,warn)
双曲線余弦coshsimscape.function.coshm(x,maxAbsX,warn)

逆双曲線余弦 (R2025a 以降)

acoshsimscape.function.acoshm(x,maxX,warn)
正接tansimscape.function.tanm(x,flag,epsilon,x0,warn)
逆正接atanatan
4 象限逆正接atan2atan2
双曲線正接tanhtanh

逆双曲線正接 (R2025a 以降)

atanhsimscape.function.atanhm(x,maxAbsX,warn)

指数と対数

名前SPICE 関数Simscape 関数
べき乗x**y、pwr(x,y) または pwrs(x,y)simscape.function.powerRational(x,y,flag,epsilon,warn)
指数expsimscape.function.expm(x,xl,xh,warn)
自然対数ln または logsimscape.function.logm(x,x0,warn)
常用対数log10simscape.function.log10m(x,x0,warn)
平方根sqrtsimscape.function.sqrtm(x,flag,epsilon,warn)

変換アシスタントは、log() を、常用対数ではなく自然対数として解釈します。すべての SPICE シミュレーターがこれについて一貫しているわけではないため、この解釈がご使用の SPICE モデルと一致するかどうかを確認してください。

その他

さらに、変換アシスタントは次の SPICE 関数と Simscape 関数をサポートします。

名前SPICE 関数Simscape 関数
If 条件ifif else
極限limitsimscape.function.limitm(x,a,b,n,epsilon)
デバイスを通る電流ii
デバイスにかかる電圧vv
ステップ関数stpif x>0, 1 else 0 end
導関数 (制限を参照)ddtder
テーブルtabletablelookup

Simscape 関数のリスト

この関数は入力引数 x の絶対値を返します。

入力引数 ZC を [true] または [false] のいずれかに設定して、ゼロクロッシングを有効または無効にすることができます。

この関数は最小の引数 x または y を返します。入力引数 n は、平滑化関数の次数を設定します。

引数 epsilon は遷移の開始値を決定し、これは x が y に等しいときにおける関数の絶対誤差です。

この関数は最大の引数 x または y を返します。入力引数 n は、平滑化関数の次数を設定します。

引数 epsilon は遷移の開始値を決定し、これは x が y に等しいときにおける関数の絶対誤差です。

この関数は入力引数 x の符号を返します。

入力引数 ZC を [true] または [false] のいずれかに設定して、ゼロクロッシングを有効または無効にすることができます。

この関数は、-1 ≤ x ≤ 1 のときに x の逆正弦 asin(x) を返し、x>1 のときに 0 を返し、x < -1 のときに π を返します。

この関数を使用して、小さい数値が asin(x) の無効な入力範囲に入ることを防止します。

この関数は、x が -maxAbsX と maxAbsX の間にある場合に、x の双曲線正弦 sinh(x) を返します。それ以外の場合、関数は勾配が境界と一致する線形外挿を使用します。

この関数を使用して、入力引数が大きい負値また正値である場合に sinh(x) に関連して発生する数値的問題を回避します。

この関数は、x が -maxAbsX と maxAbsX の間にある場合に、x の逆双曲線正弦 asinh(x) を返します。それ以外の場合、関数は勾配が境界と一致する線形外挿を使用します。

この関数を使用して、入力引数が大きい負値また正値である場合に asinh(x) に関連して発生する数値的問題を回避します。

この関数は、-1 ≤ x ≤ 1 のときに x の逆余弦 acos(x) を返し、x>1 のときに 0 を返し、x < -1 のときに π を返します。

この関数を使用して、小さい数値が acos(x) の無効な入力範囲に入ることを防止します。

この関数は、x が -maxAbsX と maxAbsX の間にある場合に、x の双曲線余弦 cosh(x) を返します。それ以外の場合、関数は勾配が境界と一致する線形外挿を使用します。

この関数を使用して、入力引数が大きい負値また正値である場合に cosh(x) に関連して発生する数値的問題を回避します。

この関数は、x が 1 と maxX の間にある場合に、x の逆双曲線余弦 acosh(x) を返します。x が 1 より小さいとき、関数は 0 を返します。x が maxX より大きい場合、関数は勾配が境界と一致する線形外挿を使用します。

この関数を使用して、1 より小さい入力引数の複素数出力を回避し、入力引数が大きい正値である場合に acosh(x) に関連して発生する数値的問題を回避します。

この関数は入力引数保護付きの正接関数を表します。

引数 flag が 0 の場合、この関数は x が 2π または -π/2 に等しいときに x の正接 tan(x) を返します。引数 epsilon は、それらの点における遷移の滑らかさを決定します。

引数 flag が 1 の場合、この関数は x が -x0 と x0 の間にあるときに x の正接 tan(x) を返します。それ以外の場合、関数は勾配が境界と一致する線形外挿を使用します。

1/epsilon は出力引数 y の最大値です。

この関数は、x が -maxAbsX ≤ x ≤ maxAbs および -1 ≤ x ≤ 1 を満たす場合に、x の逆双曲線正接 atanh(x) を返します。x の大きさが maxAbsX より大きく 1 より小さい場合、関数は勾配が境界と一致する線形外挿を使用します。x が -maxAbsX 以下でかつ -1 以下のとき、関数は atanh(eps-1) を返します。x が maxAbsX 以上でかつ 1 以上のとき、関数は atanh(1-eps) を返します。

この関数を使用して、大きさが 1 より大きい入力引数の複素数出力を回避し、大きさが 1 に近い入力引数の atanh(x) に関連して発生する数値的問題を回避します。

この関数はべき乗関数 x^y を表します。ここで y は有理数であり、負の x に対する入力引数保護が付いています。

引数 flag が 0 の場合、関数は x≥0 のときに x^y を返し、x < 0 のときに -(-x)^y を返します。引数 flag が 1 の場合、この関数はべき乗関数を simscape.function.hyp(x,epsilon) に適用します。

SPICE 変換アシスタントは、SPICE 関数 pwr(x,y) を simscape.function.powerRational(x,y,1,0,warn) に変換します。

SPICE 変換アシスタントは、SPICE 関数 pwrs(x,y) を simscape.function.powerRational(x,y,0,0,warn) に変換します。

この関数は、x が xl と xh の間にある場合に、x の指数 exp(x) を返します。それ以外の場合、関数は勾配が境界と一致する線形外挿を使用します。

この関数を使用して、入力引数が非常に小さいか非常に大きい場合に exp(x) に関連して発生する数値的問題を回避します。

この関数は、x が x0 より大きい場合に x の自然対数 log(x) を返します。それ以外の場合、関数は勾配が境界と一致する線形外挿を使用します。

シミュレーション中に x が 0 近傍の値に達する場合に、この関数を使用します。x0 を 0 と 1 の間に設定します。

この関数は、x が x0 より大きい場合に x の常用対数 log10(x) を返します。それ以外の場合、関数は勾配が境界と一致する線形外挿を使用します。

シミュレーション中に x が 0 近傍の値に達する場合に、この関数を使用します。x0 を 0 と 1 の間に設定します。

この関数は入力引数保護付きの平方根関数を表します。

引数 flag が 0 の場合、この関数は x が正のときに sqrt(x)、x が負のときに -sqrt(-x) を返します。引数 flag が 1 の場合、この関数は simscape.function.hyp(x,epsilon) の平方根を返します。

この関数は、a と b の範囲に制限された x を返します。入力引数 n は、平滑化関数の次数を設定します。

引数 epsilon は遷移の開始値を決定し、これは x が a または b に等しいときにおける関数の絶対誤差です。

記号

変換アシスタントは、次の 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
変換を完了するには、Simscape コンポーネント ファイルを変更して、欠落しているコンポーネントを実装します。手動変換の実行と、この特定のシナリオの詳細については、subcircuit2ssc を参照してください。

寄生値

コンデンサやインダクタなどの受動デバイスについて、生成した Simscape コンポーネント ファイルに寄生値を導入するには、[寄生値の指定] パラメーターを [はい] に設定します。次に、[コンデンサの寄生直列抵抗] パラメーターまたは [インダクタの寄生並列コンダクタンス] パラメーターの値を指定します。

制限

  • ネットリストは PSpice 形式で記述し、構文が正しくなければなりません。変換アシスタントは、PSpice 構文が適切かどうかをチェックしません。

  • サポートされているのは、PSpice ネットリスト言語の一部のみです。ただし、サポートされていない PSpice コマンドは、手動での変換がしやすいように、対応する Simscape コンポーネント ファイルの冒頭で特定されます。

  • 生成された Simscape コンポーネントを Simscape ブロックに組み込むには、パラメーター値が Simscape の制約に従っていなければなりません。たとえば、基本的なコンデンサの静電容量と基本的なインダクタのインダクタンスは、非ゼロでなければなりません。

  • 変換アシスタントは、関数呼び出し内での SPICE 導関数 ddt の使用をサポートしません。

参考

関数

参考

トピック