アナログIC設計入門

CMOSインバータを1個、回路図からGDSまで自分の手で描く

← 講義ポータルへ戻る
この章の学習のねらい
ngspice でDC伝達特性と過渡応答を測定し、トランジスタの寸法を決定します。工程2です。判断点は D02「幅の比」と D03「チャネル長」。
設計の工程 回路図、シミュレーション、レイアウト、DRC、抽出、LVS照合、GDS出力の7工程と、各工程で使用するツールを示した流れ図。 【図1-1】設計の工程 / 本章は [2] [1] 回路図 xschem [2] シミュレーション ngspice [3] レイアウト magic [4] DRC magic [5] 抽出 magic [6] LVS照合 netgen [7] GDS出力 magic 準備 5本 + sky130A
本章に掲載する数値は、第0章に記載した環境(ngspice 46、open_pdks f6eeac7d、2026年8月8日確認)で、本講座の手順どおりに実行して得たものです。読者の環境で異なる値が出た場合は、読者の値を採用します。

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 aUsing 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 の選択は成立している。
「Cannot read environmental variable ::SKYWATER_MODELS」で異常終了する場合
code_shown.lib の行が $::SKYWATER_MODELS のままになっています。第3章3.8節のとおり、絶対パスに書き換えます。
これは xschem 内部の変数であり、ngspice には引き渡されません。
vsp が 1.8 になる場合
vsp                 =  1.80000e+00
回路が動作していません。VSS が接地されていないことが原因です。第3章3.8節の VSSSRC(0Vの電圧源)が入っているかを確認します。
この場合、エラーは表示されません。値そのものが異常であることで判別します。電源電圧と同じ値が出たら、この症状を疑います。
スイッチング閾値(Vsp)
入力電圧と出力電圧が一致する点の電圧です。
この値が電源電圧の半分(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_shownquit を削除して ngspice tb_inverter.spice を実行し、プロンプトで plot v(OUT) v(IN) を実行します。第5章の自動化では quit が必要になるため、確認後は戻します。

ここまで正常に実行できたため、判断点 D01(標準トランジスタ、電源1.8V)の選択は妥当だったことになります。

表4-1 判断点の記録
番号決定内容検証結果判定
D01標準トランジスタ、電源1.8V計算が収束し、伝達特性が得られた

5.2 【判断点 D02】PMOSとNMOSの幅の比

NMOSとPMOSの幅はいずれも W=1 ですが、スイッチング閾値は 0.839V で、0.9V より低い値になりました。

これは、同じ寸法でもNMOSのほうが多くの電流を流すためです。NMOSで電流を運ぶ電子と、PMOSで運ぶ正孔とでは移動度が異なります。結果としてNMOS側が強く、出力を引き下げる力が勝ちます。

移動度の差が生じる理由は本講座では扱いません(第1章1.8節)。差の大きさは sky130 のモデルに含まれており、シミュレーション結果として得られます。

【判断点 D02】PMOSの幅をNMOSの何倍にするか

決めること
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 の場合)
表4-2 倍率とスイッチング閾値の実測値(tt、27℃)
Wp/WnPMOSのW(µm)Vsp(V)目標との差(V)
1.01.00.8390−0.0610
2.02.00.8733−0.0267
2.52.50.8844−0.0156
3.03.00.8936−0.0064
3.53.50.9002+0.0002
4.04.00.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
入力信号源 VINvalue をパルスに変更します。
PULSE(0 1.8 1n 50p 50p 5n 10n)
reset を入れる
dctran を続けて実行する場合、間に reset を入れます。入れない場合、直前の解析の状態が残り、2つ目の測定が失敗するか、誤った値を返します。
表4-3 PULSEの引数
引数内容
V10初期電圧
V21.8パルス電圧
TD1n開始までの遅延
TR50p入力の立ち上がり時間
TF50p入力の立ち下がり時間
PW5nパルス幅
PER10n周期
画面
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 です。targtrig は測定に使った2点の時刻で、その差が測定値です。
TRIG が計測の開始条件、TARG が終了条件です。VAL=0.18 は電源電圧の10%、VAL=1.62 は90%です。10%から90%までの時間を測定するのが一般的な方法です。
RISE=1 は「1回目の立ち上がり」を指します。パルスが繰り返すため、何回目かを指定します。

確定したこと
Wp/Wn=3.5 で立ち上がり 49.07ps、立ち下がり 50.05ps。
「out of interval」で測定が失敗する場合
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章の合格基準も、この定義で判定します。

表4-4 倍率と遷移時間の実測値(tt、27℃、CL=10fF)
Wp/Wn立ち下がり tf(ps)立ち上がり tr(ps)差(%)
1.049.4141.765.1
2.049.675.834.5
2.549.763.321.5
3.049.955.29.7
3.550.049.12.0
4.050.344.611.2

t_rise は出力を引き上げる速度でPMOSの駆動能力に、t_fall は引き下げる速度でNMOSの駆動能力に対応します。この2つが一致することと、スイッチング閾値が0.9Vになることは同じ状態を示します。2通りの方法で確認することで、判定の確度が上がります。

表4-2と表4-4は、いずれも Wp/Wn = 3.5 で最良になりました。2つの測定が同じ結論を示しています。

拡散容量が含まれている
第3章3.7節で述べたとおり、xschem はトランジスタの adaspdps(拡散領域の面積と周囲長)を W と L から自動で計算し、ネットリストに付けます。
これらは出力ノードに付く容量として働くため、遷移時間に影響します。本講座で測定したところ、これらを取り除いた場合と比べて遷移時間は約20%短くなりました。
手書きしたネットリストで測定した値と、xschem が生成したネットリストで測定した値が一致しない場合、この差が原因です。
本章の表4-4は、xschem が生成したネットリストによる値です。

5.5 【判断点 D03】チャネル長

表4-5 チャネル長による違い
項目最小(0.15µm)大きくする(0.5µm など)
速度速い遅い
面積小さい大きい
ばらつき大きい小さい
レイアウトの設計規則厳しい緩い
【判断点 D03】チャネル長を最小にするか、大きくするか

決めること
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 手作業の工数

表4-6 D02の決定に要した操作数
作業1候補あたり6候補
xschemでWを変更し保存424
ネットリスト出力16
ngspice実行16
結果の記録318
合計954

表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 は拡散容量(adas)を自動で付ける。遷移時間に影響する
・D02の決定に54操作を要した。コーナーと温度を含めると810操作になる