ngspice でDC伝達特性と過渡応答を測定し、トランジスタの寸法を決定します。工程2です。判断点は D02「幅の比」と D03「チャネル長」。
5.1 シミュレーションの実行
第3章で作成したテストベンチを実行し、回路が動作することを確認する。
前提
tb_inverter.spice が作業ディレクトリにある。.spiceinit も同じディレクトリにある(第3章3.2節)。
入力
cd /foss/designs/inverter ngspice -b tb_inverter.spice画面
Note: Compatibility modes selected: hs a option SCALE: Scale is set to 1e-06 for instance and model parameters Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 Using KLU as Direct Linear Solver No. of Data Rows : 901 vsp = 8.38983e-01読み方
Compatibility modes selected: hs a と Using KLU の2行は、.spiceinit が読まれたことを示します。この2行が出ない場合、.spiceinit が作業ディレクトリにありません。option SCALE: Scale is set to 1e-06 は、寸法の単位がマイクロメートルとして扱われることを示します。第3章で W=1 と書いた値が1µmとして解釈されています。この行は複数回表示されます。No. of Data Rows : 901 は計算した点の数です。0Vから1.8Vを0.002V刻みで掃引したため901点になります。最後の
vsp が測定値です。8.38983e-01 は 0.839V を意味します。確定したこと
モデルが読み込まれ、計算が収束した。判断点 D01 の選択は成立している。
code_shown の .lib の行が $::SKYWATER_MODELS のままになっています。第3章3.8節のとおり、絶対パスに書き換えます。これは xschem 内部の変数であり、ngspice には引き渡されません。
vsp = 1.80000e+00回路が動作していません。
VSS が接地されていないことが原因です。第3章3.8節の VSSSRC(0Vの電圧源)が入っているかを確認します。この場合、エラーは表示されません。値そのものが異常であることで判別します。電源電圧と同じ値が出たら、この症状を疑います。
入力電圧と出力電圧が一致する点の電圧です。
この値が電源電圧の半分(1.8Vなら0.9V)のとき、H側とL側のノイズ余裕が等しくなります。判断点 D02 はこの値を0.9Vに近づける作業です。
【図4-1】DC伝達特性
OUT
1.8 ┤────────────┐
│ │
0.9 ┤ │
│ │
0.0 ┤ └────────────
└──────┬──────┬──────┬────── IN
0.6 0.9 1.2
入力が低い間は出力はVDD付近を保つ(PMOSがON)。
ある電圧で出力が反転する。
入力が高くなると出力はGND付近を保つ(NMOSがON)。
波形を目で確認する場合は、code_shown の quit を削除して ngspice tb_inverter.spice を実行し、プロンプトで plot v(OUT) v(IN) を実行します。第5章の自動化では quit が必要になるため、確認後は戻します。
ここまで正常に実行できたため、判断点 D01(標準トランジスタ、電源1.8V)の選択は妥当だったことになります。
| 番号 | 決定内容 | 検証結果 | 判定 |
|---|---|---|---|
| D01 | 標準トランジスタ、電源1.8V | 計算が収束し、伝達特性が得られた | ◯ |
5.2 【判断点 D02】PMOSとNMOSの幅の比
NMOSとPMOSの幅はいずれも W=1 ですが、スイッチング閾値は 0.839V で、0.9V より低い値になりました。
これは、同じ寸法でもNMOSのほうが多くの電流を流すためです。NMOSで電流を運ぶ電子と、PMOSで運ぶ正孔とでは移動度が異なります。結果としてNMOS側が強く、出力を引き下げる力が勝ちます。
移動度の差が生じる理由は本講座では扱いません(第1章1.8節)。差の大きさは sky130 のモデルに含まれており、シミュレーション結果として得られます。
決めること
PMOSの幅の倍率。大きくするとスイッチング閾値が0.9Vに近づくが、面積と入力容量が増加する。
材料
・W比1:1でのスイッチング閾値 0.839V(4.1節の実測値)
・目標値:0.9V(電源電圧の半分)
・PDK:sky130A、デバイス
nfet_01v8 / pfet_01v8・L=0.15µm、負荷容量10fF、コーナー tt、27℃
相談
渡したもの:上記の材料(PDK名、寸法、実測値)。
質問:
「CMOSインバータのスイッチング閾値を電源電圧の半分に近づけます。PMOSの幅の倍率の候補を3つ、それぞれ何を犠牲にするかとともに挙げてください。あわせて、その倍率が妥当かを確認する測定方法も記載してください。」
返答
1. 2倍。閾値は目標よりやや低い。面積と入力容量は小さい
2. 2.5〜3倍。閾値が0.9Vに近づく。sky130で一般的な範囲。面積は増加する
3. 4倍以上。閾値が0.9Vを超える場合がある。入力容量が増加し、前段の負荷になる
確認方法:各倍率で
.dc を実行し、meas dc vsp の値を比較する。過渡解析で立ち上がりと立ち下がりの時間が一致するかも確認する決定
3.5倍(PMOSの W=3.5µm)。
理由:4.3節の測定の結果、返答の候補2(2.5〜3倍)では 0.9V に届かなかった。
検証
Wp/Wn = 3.5 で
vsp = 0.9002V。立ち上がりと立ち下がりの差は 2.0%。いずれも目標を満たす。判定:△ AIの返答にあった候補の範囲(2〜3倍)では目標に届かず、範囲の外の値を採用した。
5.3 倍率の測定
候補の倍率を実際に測定し、0.9V に最も近い値を決める。
入力
xschem で PMOS の
W を変更して保存し、ネットリストを出力して実行します。倍率ごとにこれを繰り返します。
xschem -n -q -x tb_inverter.sch ngspice -b tb_inverter.spice画面
vsp = 8.73288e-01(PMOSの W=2 の場合)
| Wp/Wn | PMOSのW(µm) | Vsp(V) | 目標との差(V) |
|---|---|---|---|
| 1.0 | 1.0 | 0.8390 | −0.0610 |
| 2.0 | 2.0 | 0.8733 | −0.0267 |
| 2.5 | 2.5 | 0.8844 | −0.0156 |
| 3.0 | 3.0 | 0.8936 | −0.0064 |
| 3.5 | 3.5 | 0.9002 | +0.0002 |
| 4.0 | 4.0 | 0.9060 | +0.0060 |
倍率を上げるとスイッチング閾値が上がります。0.9V に最も近いのは 3.5倍です。
一般に紹介されることの多い「PMOSはNMOSの2倍」では 0.8733V にとどまり、0.027V 低い状態になります。
確定したこと
Wp/Wn = 3.5 を採用する。PMOSの W を 3.5 に変更して保存する。
sky130 のモデルは、W と L の値によって複数のビンに分割されています。ビンの境界をまたぐと、係数が切り替わります。
このため、倍率を細かく変えると閾値が逆転する箇所が現れることがあります。
倍率を二分探索で自動的に求める処理を書く場合、単調に変化することを前提にすると収束しない可能性があります。表4-2のように、値を並べて確認する方法が確実です。
5.4 過渡応答の測定
DC特性からは速度が得られません。時間軸での測定を行います。
出力の立ち上がりと立ち下がりに要する時間を測定する。
入力
code_shown の記述に過渡解析を追加します。
.lib /foss/pdks/sky130A/libs.tech/combined/sky130.lib.spice tt .temp 27 .control dc VIN 0 1.8 0.002 meas dc vsp when v(OUT)=v(IN) reset tran 1p 20n meas tran t_rise TRIG v(OUT) VAL=0.18 RISE=1 TARG v(OUT) VAL=1.62 RISE=1 meas tran t_fall TRIG v(OUT) VAL=1.62 FALL=1 TARG v(OUT) VAL=0.18 FALL=1 quit .endc .end入力信号源
VIN の value をパルスに変更します。
PULSE(0 1.8 1n 50p 50p 5n 10n)
dc と tran を続けて実行する場合、間に reset を入れます。入れない場合、直前の解析の状態が残り、2つ目の測定が失敗するか、誤った値を返します。
| 引数 | 値 | 内容 |
|---|---|---|
| V1 | 0 | 初期電圧 |
| V2 | 1.8 | パルス電圧 |
| TD | 1n | 開始までの遅延 |
| TR | 50p | 入力の立ち上がり時間 |
| TF | 50p | 入力の立ち下がり時間 |
| PW | 5n | パルス幅 |
| PER | 10n | 周期 |
vsp = 9.00227e-01 t_rise = 4.90678e-11 targ= 6.14212e-09 trig= 6.09306e-09 t_fall = 5.00484e-11 targ= 1.09737e-09 trig= 1.04732e-09読み方
4.90678e-11 は 49.07ps です。targ と trig は測定に使った2点の時刻で、その差が測定値です。TRIG が計測の開始条件、TARG が終了条件です。VAL=0.18 は電源電圧の10%、VAL=1.62 は90%です。10%から90%までの時間を測定するのが一般的な方法です。RISE=1 は「1回目の立ち上がり」を指します。パルスが繰り返すため、何回目かを指定します。確定したこと
Wp/Wn=3.5 で立ち上がり 49.07ps、立ち下がり 50.05ps。
Error: measure t_rise trig(TRIG) : out of interval出力が 0.18V から 1.62V まで振れていません。4.1節の
vsp が 1.8V になっていないかを確認します。VSSの接地漏れが原因です。
差の計算方法
立ち上がりと立ち下がりの差は、大きいほうの値を分母として計算します。
差 [%] = |tr − tf| ÷ max(tr, tf) × 100
第5章の合格基準も、この定義で判定します。
| Wp/Wn | 立ち下がり tf(ps) | 立ち上がり tr(ps) | 差(%) |
|---|---|---|---|
| 1.0 | 49.4 | 141.7 | 65.1 |
| 2.0 | 49.6 | 75.8 | 34.5 |
| 2.5 | 49.7 | 63.3 | 21.5 |
| 3.0 | 49.9 | 55.2 | 9.7 |
| 3.5 | 50.0 | 49.1 | 2.0 |
| 4.0 | 50.3 | 44.6 | 11.2 |
t_rise は出力を引き上げる速度でPMOSの駆動能力に、t_fall は引き下げる速度でNMOSの駆動能力に対応します。この2つが一致することと、スイッチング閾値が0.9Vになることは同じ状態を示します。2通りの方法で確認することで、判定の確度が上がります。
表4-2と表4-4は、いずれも Wp/Wn = 3.5 で最良になりました。2つの測定が同じ結論を示しています。
第3章3.7節で述べたとおり、xschem はトランジスタの
ad、as、pd、ps(拡散領域の面積と周囲長)を W と L から自動で計算し、ネットリストに付けます。これらは出力ノードに付く容量として働くため、遷移時間に影響します。本講座で測定したところ、これらを取り除いた場合と比べて遷移時間は約20%短くなりました。
手書きしたネットリストで測定した値と、xschem が生成したネットリストで測定した値が一致しない場合、この差が原因です。
本章の表4-4は、xschem が生成したネットリストによる値です。
5.5 【判断点 D03】チャネル長
| 項目 | 最小(0.15µm) | 大きくする(0.5µm など) |
|---|---|---|
| 速度 | 速い | 遅い |
| 面積 | 小さい | 大きい |
| ばらつき | 大きい | 小さい |
| レイアウトの設計規則 | 厳しい | 緩い |
決めること
L=0.15µm(最小)のままにするか、大きくするか。
材料
・目的:学習用。速度性能は要求されない
・後続工程:第6章で手作業によるレイアウト、第7章でDRCとLVS
・表4-5の比較
相談
質問:
「学習目的でCMOSインバータを設計し、この後 magic で手作業によるレイアウトとDRCを行います。チャネル長の候補を3つ、それぞれ何を犠牲にするかとともに挙げてください。レイアウト作業への影響も記載してください。」
返答
1. L=0.15µm(最小)。速度と面積で有利。DRCの規則が最も厳しく、手作業では難度が高い
2. L=0.5µm。図形が大きくなり手作業が容易。速度は低下するが学習には影響しない
3. L=1µm以上。さらに容易だが、最小寸法での作業を経験できない
決定
1(L=0.15µm、最小のまま)。
理由:本講座の目的は最小寸法のプロセスでレイアウトを行うことにある。寸法を緩めると設計規則の制約を経験できない。第6章の難度が上がることは前提とする。
検証
第6章で、最小寸法のままDRCに合格できるかで判定します。
読者の作業:第7章7.7節で
TOTAL=0 になれば ◯、L を大きくして描き直した場合は × として記録します。本講座で確認した範囲では、L=0.15µm のままDRCに合格しました(第7章7.6節)。
5.6 手作業の工数
| 作業 | 1候補あたり | 6候補 |
|---|---|---|
| xschemでWを変更し保存 | 4 | 24 |
| ネットリスト出力 | 1 | 6 |
| ngspice実行 | 1 | 6 |
| 結果の記録 | 3 | 18 |
| 合計 | 9 | 54 |
表4-2と表4-4では6つの倍率を測定したため、54操作を要しました。これは tt コーナー、温度27℃のみの場合です。
コーナー5種と温度3種を実行する場合は15倍の810操作になります。操作数が増えると、変更の反映漏れ、実行の失敗、誤った結果の記録といった誤りが混入します。第5章では、この手順を自動化します。
・【D01検証】◯ 計算が収束し、伝達特性が得られた
・W比1:1でのスイッチング閾値は 0.839V。目標の0.9Vより低い
・【D02】Wp/Wn = 3.5 を採用。Vsp = 0.9002V、遷移時間の差 2.0%
・一般に紹介される「2倍」では Vsp = 0.8733V、遷移時間の差 34.5%
・【D02判定】△ AIの返答にあった範囲(2〜3倍)の外の値を採用した
・差の定義は
|tr − tf| ÷ max(tr, tf) × 100。第5章の基準もこの定義・【D03】チャネル長は最小の0.15µmのまま。第6章で判定する
・vsp が 1.8V になったら VSS の接地漏れを疑う
・xschem は拡散容量(
ad、as)を自動で付ける。遷移時間に影響する・D02の決定に54操作を要した。コーナーと温度を含めると810操作になる