Xschem の使い方 その3:解析・計測・出力
**** 執筆中,暫定公開.****
1.基本的な解析
基本的な解析は3つ.直流解析 (DC解析),小信号解析 (AC解析),過渡解析 (Transient解析) です.
1.1 DC解析
DC解析は直流の信号が与えられたときに回路がどう動くかという解析です.直流なので回路中のすべての容量は開放,インダクタンスは短絡されます.DC特性は「静特性」と呼ばれたり,入出力の関係の場合は「I/O curve」と呼んだりします.回路動作の基本なので,まずはDC解析をしましょう.
下のような回路を用意します.MOSトランジスタは標準Vth の nFET (nfet_01v8),分かりやすいように2つの電圧源の名前を Vds,Vgs に変えています.また,ドレイン電流を測るのでドレインに ammeter をつないでいます.モデルパラメータ TT_MODELS も忘れずにコピーしましょう.回路の上に置かれている "DC analysis" (code_shown) がDC解析の指示です.
"DC analysis" の中身は下のようになっています.
value のところで,".dc" が DC解析であること,"Vds" が値を変える電圧源の名前,"0 1.8 0.01" は「0 から 1.8 まで 0.01 刻み」という意味です.これを解析して Vmeas に流れる電流をプロットします (plot i(Vmeas)).下のような結果が得られます.
DC解析では複数の電圧源の値を変化させることもできます.下のように .dc の後ろに別の電圧源を指定します.
こう書くと,「まず Vgs を 0 V にして Vds を 0 V から 1.8 V まで解析,次にVgs を 0.2 V にして…」というように,複数の Vgs の値について Ids-Vds特性を取ることができます.これで解析してプロットすると,下のようになります.
1.2 AC解析
AC解析は周波数特性の解析です.AC解析は小信号解析,つまりすべての素子は動作点において線形近似されます.小信号解析とは何ぞや,という話は長くなるのでここでは書かないことにします.下のような回路を用意します.ソース接地増幅回路です.
重要なのは Vgs の指定が「DC 0.9 AC 1」という指定になっているところです.これは「直流成分 0.9 V で,ACの振幅が1 V」ということです.振幅は1 Vもいらない,と思うかもしれませんがAC解析は線形解析なので振幅は動作に影響しません.なので入力の振幅を1 V にしておけば,出力の振幅がそのまま回路の利得になるので楽というわけです.
解析条件として,code_shown を追加 (AC analysis) しています.".ac" がAC解析の指定,"dec 20" は周波数スイープの点をどのように取るかも指定で,"dec 20" は「周波数10倍あたり20点 (対数軸で等間隔に)」という意味です.他に "oct" (周波数2倍あたり),"lin" (等間隔) なども指定できます.周波数特性はだいたい周波数軸を対数で取るので,たいてい指定は dec です."100k 100Meg" は周波数の始点と終点です.100 kHz から 100 MHz です.
AC解析をするときも,まずは直流特性を見ておきたいので DC解析の設定も残しています.解析はしなくていいので,先頭に"*" を付けてコメントアウトしています.
これを解析してDC解析と同じように plot v(out) でプロットすると,下の図のようになります.出力電圧が -4.5 V? 何か間違っているのか? と思うかも知れませんがこれで正常です.AC解析は線形近似しての解析なので,電源電圧を超える電圧も平気で出力されます.マイナスになっているのはソース接地増幅回路が反転増幅だからです.
AC解析で欲しいのは普通は利得と位相なので,利得をプロットしましょう.plot vdb(out) でプロットすると,利得のデシベル値がプロットされます.
位相は plot ph(out) でプロットできますが,デフォルトでは位相が rad で表示されるので角度で表示したい場合は set units=degree しておきます.
1.3 Tran解析
Tran解析 (過渡解析) は時間応答の解析です.AC解析と異なり,素子の非線形特性を考慮した非線形解析です.そのため,AC解析の小信号解析に対して大信号解析と呼んだりします.
2.補助的な解析
SPICEにおける基本的な解析は DC,AC,TRAN の3つですが,その他に補助的な解析がいろいろあります.
2.1 動作点解析
この節のタイトルは「補助的」などと書いていますが,動作点解析はアナログ回路では超重要な解析です.動作点解析をせずにアナログ回路を設計するのは不可能です.ngspice ではデバイスの動作点を表示するのは show コマンドを使います.HSPICE的には ".op" 書いておけば表示してくれるだろう,と思ってしまいますが,ngspice では ".op" では結果を表示してはくれません.
show コマンドは後ろに与えた文字列にマッチするデバイスの動作点をすべて表示します.MOS を見たければ show m です.
show r で抵抗,show v で電源の状態を見ることができます.流れる電流と消費される電力が表示されるので,電力の計算に便利.
抵抗や電源はいいですが,MOSの動作点は大量のパラメータが表示されます.この中で必要なものだけを表示するには,コロンの後ろに必要なパラメータを列挙します.このとき,コロンの前後にスペースが必要です.スペースがないと解釈が変わって思い通りに動作しません.
自動実行
解析したら自動で実行して欲しい,というときは .control 構文を使います.要するに,インタープリタに入力するコマンドを .control ~ .endc の間に書けます.AC解析のところを以下のように変えます.
ac解析の指示が ".ac" ではなく "ac" に変わったことに注意してください.この状態で実行すると,下のように自動で動作点が表示されます.
print などで扱いたい場合
ちょっと面倒ですが動作点をプロットしたりすることもできます.plot や print では "@device[parameter]" という構文で device の parameter にアクセスできます.sky130A では MOSのシンボルはサブサーキットになっているのでデバイスの指定がちょっと面倒です.まず,"listing e"コマンドでデバイスを列挙します.
モデルパラメータが表示されるのでかなりの量が表示されますが,重要なのは "m.xm2.msky130_fd_pr__nfet_01v8" のところで,これがデバイス名です.xm2 の m2 の部分が回路図で表示される素子名です.x はサブサーキットを表す文字.これで,このデバイスの動作点にアクセスできます.例えば vth を表示したければ "print @print @m.xm2.msky130_fd_pr__nfet_01v8[vth]" です.
3.計測
4.回路図の階層化
DC解析,AC解析,TRAN解析,.param,サブサーキットの作り方,Vdd の使い方,電力の計測 .measure