1

第 8 章 .measure による SPICE シミュレーション結果の CSV ファイル化
ns-spice では、.measure コマンドを用いた波形データの計測が可能です。.measureでの計測結果は、CSV 形式のファイルにも出力されますので、データの解析が容易です。

図１.measure のサンプル回路図（inv1_TRAN.nsd）

図１の c:\Design\ns-tools\example\CHAPTER_8(DotMeasure)\inv1_TRAN.nsd の例では、インバータの遅延時間、１周期の平均電流値を.measure により求めています。この例では、インバータのゲート遅延時間は、立ち上がりと立下りの遅延時間をそれぞれ.measure で求め、その平均をとることで求めています。コマンドプロンプト内に表示される ns-spice によるシミュレーションの実行結果をリスト１に示します。
各.measure の結果が、数値として表示されています。
また、図１の例では、.option autostop が設定されているので、.tran 行で指定されたシミュレーションの終了時間(5nsec)より前に、すべての.measure が終了した時点(5nsec の 30.0%の時点)で、過渡解析を終了しています。
リスト１ ns-spice シミュレーションの実行結果（コマンドプロンプト）******************************************************************** NS-Spice.
Ver. Mar 18 2010 (Nanodesign Corp.) ********************************************************************>>Operationg Point(OP) Analysis Finished.
>>Transient Analysis in Progress :30.0% Auto Stopped.

2*-Result of .measure--*tdr= 2.0290709983e-011
tdf= 2.2386197167e-011
tdelay= 2.1338453575e-011
idd= -1.9822238709e-005*--------------------------------*
C:\Design\ns-tools\example\CHAPTER_8(DotMeasure)>

利用できる.measure コマンドの書式については、本章末の「.measure の書式について」を参照してください。
次に、.measure を用いてシミュレーション結果をデータ化する方法について説明します。図２に、インバータの論理しきい値電圧を求める回路例を示します。pMOSFET のW 値は、.param Wp='@{1u,3u,0.25u}'と指定されていますが、これにより、ns-spice は、Wp の値を、1u から 3u まで、0.25u
ステップで変化させ、計 9 回のシミュレーションを連続実行します。実行結果をリスト
２に示しますが、.param Wp=の行が変更されながら、各シミュレーションで.measureが実行されていることが分かります。

図２.measure のサンプル２(inv1_DC.nsd)

リスト１ ns-spice シミュレーションの連続実行結果（コマンドプロンプト）******************************************************************

3** NS-Spice.
Ver. Mar 18 2010 (Nanodesign Corp.) *********************************************************************---------------------------------------------------------**-Param SCAN Analysis :1( 1)
1/ 9 --**---------------------------------------------------------**---SCAN Parameters----*
Line:45 -> .param wp='1e-006'*--------------------------------**-Result of .measure--*vth= 0.7923449582*--------------------------------**---------------------------------------------------------**-Param SCAN Analysis :1( 2)
2/ 9 --**---------------------------------------------------------**---SCAN Parameters----*
Line:45 -> .param wp='1.25e-006'*--------------------------------**-Result of .measure--*vth= 0.8258703817*--------------------------------**---------------------------------------------------------**-Param SCAN Analysis :1( 3)
3/ 9 --**---------------------------------------------------------**---SCAN Parameters----*
Line:45 -> .param wp='1.5e-006'*--------------------------------**-Result of .measure--*vth= 0.854490207*--------------------------------*
・・・・・・（中略）・・・・・・*---------------------------------------------------------**-Param SCAN Analysis :1( 8)8/ 9 --**---------------------------------------------------------**---SCAN Parameters----*
Line:45 -> .param wp='2.75e-006'*--------------------------------**-Result of .measure--*vth= 0.9529123191*--------------------------------**---------------------------------------------------------**-Param SCAN Analysis :1( 9)9/ 9 --**---------------------------------------------------------**---SCAN Parameters----*
Line:45 -> .param wp='3e-006'*--------------------------------**-Result of .measure--*vth= 0.9670423236*--------------------------------**---------------------------------------------------------*

4*-Param SCAN Analysis : Finished--**-measured.csv is created.
--**---------------------------------------------------------*

このシミュレーションの結果出力される波形ファイルには、９回分のシミュレーション波形が含まれており、それをプロット図が図３になります。

v (o u t ): 1 e -0 0 6v (o u t ): 1 . 2 5 e -0 0 6v (o u t ): 1 . 5 e -0 0 6v (o u t ): 1 . 7 5 e -0 0 6v (o u t ): 2 e -0 0 6v (o u t ): 2 . 2 5 e -0 0 6v (o u t ): 2 . 5 e -0 0 6v (o u t ): 2 . 7 5 e -0 0 6v (o u t ): 3 e -0 0 6

1.6

1.2

800m

400m

00400m

800m

1.2

1.6sweep

図３ シミュレーション結果（波形）
このとき、.measure の測定結果は、コマンドプロンプト画面に出力されるだけでなく、同時に、カレントフォルダ内に、measured.csv とうファイル名で、CSV 形式で保存されています。CSV 形式のファイルは、一般的な表計算ソフトでそのまま開くことができます。図４に、Microsoft Excel で measured.csv を開いた例を示します。表計算ソフトのグラフ化機能を利用することで、図５に示すように直ちにデータをグラフ化することができます。

5

図４ 表計算ソフトによる CSV(measured.csv）ファイルのオープン

1

Inverter Vth [V]

0.95

0.9

vth0.850.8

0.75
0.00E+00

5.00E-07

1.00E-06

1.50E-06

2.00E-06

2.50E-06

3.00E-06

3.50E-06

Wp Size

図５

表計算ソフトによる CSV データのプロット

図６に、アンプの AC 解析の例を示します。電源電圧を変化させながら、直流利得（DCGain）とユニティゲイン周波数（UnityGainFreq)、位相余裕(PhaseAtUGF)を計測しています。シミュレーションを実行すると、measured.csvｇ生成されますが、さらに表計算ソフトで読み込んだ後、グラフ化（散布図）することで、図７のような結果が得られます。

6

図６

AC解析における.measureの例(amp1_AC.nsd)

図７ 表計算ソフトを利用したmeasured.csvデータのプロット

図８の例のように、一つのネットリスト内に、@{}指定を２つ以上設けることで、それらの全ての組み合わせのシミュレーションを実行することができます。図８の回路図
では、RL を、10K,33K,100K の３種、CL を 10p から、15p まで、1p ステップ（６回）、合計で１８回のシミュレーションを行います。その結果の measured.csv を図９に示します。

7

図８

図９

スキャンパラメータの２重化

measured.csv(図８の回路のシミュレーション結果)

8@{ }によるパラメータスキャンの書式について(1)列挙型：@{a|b|c|d|e|……}
変更するパラメータ値を@{}の中で、”|”で区切って順に列挙する。
例：.param RL=@{1K|10K|100K|1MEG|10MEG}
シミュレーションは、.param RL=1Kから、.param RL=10MEGまで、５回実行される(2)区間型1(STEP)：@{start, stop, step, STEP}
変更するパラメータ値を@{}の中で、初期値(start)、終値(stop)、ステップ値(step)での順で、カンマ”,”で区切って列挙する。４番目の文字列：STEPは省略可能。
例：CL out 0 @{10p,100p,10p}
シミュレーションは、10p,20p,30p,40p,50p,60p,70p,80p,90p,100pの１０回実行される(2)区間型2(DIV)：@{start, stop, ndiv, DIV}
変更するパラメータ値を@{}の中で、初期値(start)、終値(stop)、区間分割数(ndiv)での順で、カンマ”,”で区切って列挙し、最後に、文字列：DIVを記入する。
例：CL out 0 @{0,100p,10,DIV}
シミュレーションは、0p,10p,20p,30p,40p,50p,60p,70p,80p,90p,100pの１１回実行される(3)区間型3(LOG)：@{start, stop, ndiv, LOG}
対数軸上で、当区間となるように値を変更する。@{}の中で、初期値(start)、終値(stop)、10倍区間辺りの分割数(ndiv)での順で、カンマ”,”で区切って列挙し、最後に、文字列：LOGを記入する。
例：CL out 0 @{1p,1u,4,LOG}
シミュレーションは、1p,1.77p,3.16p,5.62p,10p,17.7p,31.6p,56.2p,100pの９回実行される

9.MEASUREの書式について
・SPICE の結果（波形）から、各種測定を行い数値出力します。
・トランジエント解析、AC 解析、DC 解析で利用可能
・測定可能項目：
１）２つの波形の間の遅延、立ち上がり・立下り時間、周期の測定等
２）波形の平均値、RMS 値、最小値、最大値、peak to peak 値
３）値の測定：Find-When：特定の出力値になる時の入力値等
４）１~３）の測定結果の演算結果
１）２つの波形の間の遅延、立ち上がり・立下り時間、周期の測定
書式：.MEASURE <TRAN | DC | AC> 出力名 TRIG 設定 TARG 設定(.MEAS と省略可)
TRIG 設定：
TRIG 変数名 VAL=trig_val <TD=time_delay> <CROSS=c | LAST>+ <RISE=r | LAST> <FALL=f | LAST>
またはTRIG AT=値 (周波数または時間)
TARG 設定：TARG 変数名 VAL=targ_val <TD=time_delay> <CROSS=c | LAST>+ <RISE=r | LAST> <FALL=f | LAST>[例 1] .measure tran tpd1 trig at=0ns targ v(out) val=0.5v cross=1（1 波形の遅延時間）out が、立ち上がりまたは立下りで、最初に 0.5V を切る点（時間）を計測し、tpd1 という名前で出力する。
[例 2] .measure tran tpd2 trig v(in) val=0.5V td=1ns rise=1 targ v(out) val=0.5v
fall=1（2 波形間の遅延時間）in が 0.5V になる最初の立ち上がりの時点から、out が 0.5V になる１回目（最初）の立下りまでの時間を計測し、tpd2 という名前で出力する。
[例 3] .measure tran tcyc trig v(out) val=0.5V rise=2 targ v(out) val=0.5v rise=1（波形の周期）out が 0.5V になる２回目の立ち上がりから、次の立ち上がりまでの時間を計測し、tcyc という名前で出力[例 4] .measure tran tr trig v(out) val='VP*0.1' rise=last targ v(out) val='VP*0.9'
rise=last（波形の立ち上がり時間）out が VP の 10%になる最後の立ち上がりから、90%になるまでの時間を計測し、tr という名前で出力

２）波形の区間平均値、RMS 値、最小値、最大値、peak to peak 値
書式：.MEASURE <DC | AC | TRAN> 出力名 <AVG | MIN | MAX | PP | RMS | INTEG> 変数名 <FROM=val><TO=val>
演算の指定
AVG：平均値、MIN：最小値
MAX：最小値

10

PP：振幅（＝最大値－最小値）
RMS：自乗平均値(root mean square)
INTEG：積分値（＝平均値＊区間長）[例 1] .measure tran idd_avg AVG i(vvdd) from=0ns to='tcyc'（波形の平均値）電圧源 vvdd の 0ns~tcyc の区間の平均電流を求め、idd_avg という名前で出力する。
[例 2] .measure tran out_pp PP v(out) from=0ns to='tcyc'（波形の Peak-to-Peak 値）out の 0ns~tcyc の区間の PP 値を求め、out_pp という名前で出力する。

３）値の測定：Find-When：特定の出力値になる時の入力値等
書式：.MEASURE <DC|TRAN| AC> 出力名 WHEN 変数名=値 <TD = val>
+ < RISE=r | LAST > < FALL=f | LAST > < CROSS=c | LAST >または、.MEASURE <DC|TRAN|AC> 出力名 WHEN 変数名 1=変数名 2 < TD=val >+ < RISE=r | LAST > < FALL=f | LAST > < CROSS=c| LAST >または、.MEASURE <DC|TRAN|AC> 出力名 FIND 変数名 1 WHEN 変数名２=値 < TD=val >+ < RISE=r | LAST > < FALL=f | LAST > < CROSS=c| LAST >または、.MEASURE <DC|TRAN|AC> 出力名 FIND 変数名１ WHEN 変数名２=変数名３+ <TD=val > < RISE=r | LAST > < FALL=f | LAST > <CROSS=c | LAST>
または、.MEASURE <DC|TRAN|AC> 出力名 FIND 変数名 AT=値

[例 1] .measure ac unity_gain when vdb(out)=0（ユニティゲイン周波数）出力 out が、0db になる周波数を unity_gain という名前で出力する。
[例 2] .measure ac phase_margin find vp(out) when vdb(out)=0（位相余裕）出力 out が、0db になる時の、位相(vp(out))を phase_margin という名前で出力する。
[例 3] .measure dc threshold find v(in) when v(out)='VP/2'（論理しきい値）出力 out が、VP の 1/2 になる時の、V(in)を threshold という名前で出力する。

４）１～３）の測定結果の演算結果
書式：.MEASURE <DC|TRAN|AC> 出力名 PARAM=’式’[例 1] .measure tran freq param='1/tcyc'（遅延時間→周波数変換）他の.measure 文で求めた tcyc から周波数を求めて、freq という名前で出力する。式の中で引用できるのは、他の.measure 文の結果と、.param 文で指定された変数