Main Content

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

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

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

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

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

  3. ssc_build を使用してライブラリを構築するか、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>)
ここで、rcl の値は、コンポーネントの宣言で指定されている値のスケーリング係数です。この動作は 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)
余弦coscos
逆余弦acossimscape.function.acosm(x,warn)
双曲線余弦coshsimscape.function.coshm(x,maxAbsX,warn)
正接tansimscape.function.tanm(x,flag,epsilon,x0,warn)
逆正接atanatan
4 象限逆正接atan2atan2
双曲線正接tanhtanh

指数と対数

名前SPICE 関数Simscape 関数
べき乗x**ypwr(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
テーブルtablesimscape.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) — 符号関数

 simscape.function.sqrtm(x,flag,epsilon,warn) — 平方根関数

 simscape.function.tanm(x,flag,epsilon,x0,warn) — 正接関数

記号

変換アシスタントは、次の 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 の使用をサポートしません。

参考

関数

関連するトピック