この章の学習のねらい
第4章で54操作を要した手順を、コマンド1つで実行できるようにします。コーナー5種と温度3種の計15条件を一括実行し、合否を出力します。判断点は D04「合格の基準」。
第4章で54操作を要した手順を、コマンド1つで実行できるようにします。コーナー5種と温度3種の計15条件を一括実行し、合否を出力します。判断点は D04「合格の基準」。
本章は工程の実行方法を変更するもので、図1-1の7工程には含まれません。
本章に掲載する数値は、第0章に記載した環境(ngspice 46、open_pdks f6eeac7d、2026年8月8日確認)で、Wp/Wn = 3.5、CL = 10fF の条件で実行して得たものです。
6.1 自動化の対象
| 作業 | 担当 | 本章での扱い |
|---|---|---|
| 寸法の決定 | 人 | 変更しない |
| ネットリストの出力 | 機械 | 自動化 |
| シミュレータの起動 | 機械 | 自動化 |
| コーナーと温度の変更 | 機械 | 自動化 |
| 結果と基準の比較 | 機械 | 自動化 |
| 基準を満たさない場合の対処の決定 | 人 | 変更しない |
自動化するのは、答えが一意に決まる処理のみです。
Makefile を使用する理由
コンテナに導入済みで、追加インストールが不要です。
外部サービスやAPIキーへの依存がありません。
人が実行しても、スクリプトが実行しても、AIのエージェントが実行しても、同じ結果が返ります。
コンテナに導入済みで、追加インストールが不要です。
外部サービスやAPIキーへの依存がありません。
人が実行しても、スクリプトが実行しても、AIのエージェントが実行しても、同じ結果が返ります。
6.2 コーナーと温度を差し替え可能にする
目的
1つのネットリストから、条件を変えた15本のネットリストを作れるようにする。
入力
2行が目印として残っていれば正しく出力できています。この2箇所を
確定したこと
条件を外部から差し替えられるようになった。
1つのネットリストから、条件を変えた15本のネットリストを作れるようにする。
入力
code_shown の先頭2行を、置き換え用の目印に変更します。
.lib /foss/pdks/sky130A/libs.tech/combined/sky130.lib.spice {CORNER}
.temp {TEMP}
xschem でネットリストを出力します。
xschem -n -q -x tb_inverter.sch
grep -n "{CORNER}\|{TEMP}" tb_inverter.spice
画面
13:.lib /foss/pdks/sky130A/libs.tech/combined/sky130.lib.spice {CORNER}
14:.temp {TEMP}
読み方2行が目印として残っていれば正しく出力できています。この2箇所を
sed で置き換えることで、条件を変えたネットリストを作ります。確定したこと
条件を外部から差し替えられるようになった。
6.3 実行するコーナーの選択
| コーナー | NMOS | PMOS | インバータへの影響 |
|---|---|---|---|
tt | 標準 | 標準 | 中央 |
ss | 遅い | 遅い | 両方遅い。釣り合いは崩れない |
ff | 速い | 速い | 両方速い。釣り合いは崩れない |
sf | 遅い | 速い | PMOS側が強くなる。閾値が下がる |
fs | 速い | 遅い | NMOS側が強くなる。閾値が上がる |
tt / ss / ff の3種では釣り合いの崩れを測定できない
インバータの特性は、NMOSとPMOSの釣り合いで決まります。
釣り合いが最も崩れるのは
本章では5コーナーすべてを実行します。5コーナー×3温度で15条件です。
インバータの特性は、NMOSとPMOSの釣り合いで決まります。
ss と ff は両方が同じ方向にずれるため、釣り合いはあまり崩れません。釣り合いが最も崩れるのは
sf と fs です。本講座の実測では、スイッチング閾値の最小値(0.786V)は sf の −40℃ で、最大値(1.034V)は fs の 125℃ で得られました。どちらも tt / ss / ff には現れません。本章では5コーナーすべてを実行します。5コーナー×3温度で15条件です。
6.4 Makefile の作成
目的
ネットリストの出力からシミュレーションまでを1コマンドにする。
入力
作業ディレクトリに
ネットリストの出力からシミュレーションまでを1コマンドにする。
入力
作業ディレクトリに
Makefile を作成します。
PDK_ROOT ?= /foss/pdks
TOP = tb_inverter
CORNERS = tt ss ff sf fs
TEMPS = -40 27 125
.PHONY: all sim corners check clean
all: sim
$(TOP).spice: $(TOP).sch
xschem -n -q -x $(TOP).sch
sim: $(TOP).spice
sed -e "s/{CORNER}/tt/" -e "s/{TEMP}/27/" $(TOP).spice > run.spice
ngspice -b run.spice
clean:
rm -f $(TOP).spice run.spice results.txt *.raw *.log
コマンド行の行頭はタブ文字
スペースでは動作しません。コピー時にスペースへ変換される場合があります。
確認は
スペースでは動作しません。コピー時にスペースへ変換される場合があります。
Makefile:8: *** missing separator. Stop. というエラーはこれが原因です。確認は
cat -A Makefile で行います。タブは ^I と表示されます。
xschem のオプション
本講座では xschem 3.4.8 で、この4つのオプションが定義されていることを確認しています。
-n はネットリストを出力する指定、-q は処理後に終了する指定、-x は X を使わない指定です。-r というオプションもありますが、これは --no_readline(入力補完を使わない)であり、画面を開かない指定ではありません。Makefile から呼ぶ場合は -x を使います。本講座では xschem 3.4.8 で、この4つのオプションが定義されていることを確認しています。
入力
実行されたコマンドが表示され、続いて結果が出ます。
2回目以降、回路図を変更していない場合は
確定したこと
make画面
xschem -n -q -x tb_inverter.sch
sed -e "s/{CORNER}/tt/" -e "s/{TEMP}/27/" tb_inverter.spice > run.spice
ngspice -b run.spice
vsp = 9.00227e-01
t_rise = 4.90678e-11
t_fall = 5.00484e-11
読み方実行されたコマンドが表示され、続いて結果が出ます。
2回目以降、回路図を変更していない場合は
xschem の行が表示されません。make はファイルの更新時刻を比較し、必要な処理のみを実行します。確定したこと
make の1操作で、tt・27℃の測定値が得られる。
6.5 15条件の一括実行
目的
15条件を自動で実行し、結果を1つのファイルにまとめる。
入力
Makefile に追加します。
15条件を自動で実行し、結果を1つのファイルにまとめる。
入力
Makefile に追加します。
corners: $(TOP).spice
@echo "corner temp vsp t_fall t_rise" > results.txt
@for c in $(CORNERS); do \
for t in $(TEMPS); do \
sed -e "s/{CORNER}/$$c/" -e "s/{TEMP}/$$t/" \
$(TOP).spice > run.spice ; \
echo -n "$$c $$t " >> results.txt ; \
ngspice -b run.spice 2>&1 \
| grep -E "^vsp|^t_fall|^t_rise" \
| awk '{printf "%s ", $$3}' >> results.txt ; \
echo "" >> results.txt ; \
done \
done
@cat results.txt
実行します。
make corners
| コーナー | 温度 | Vsp(V) | tf(ps) | tr(ps) | 差(%) |
|---|---|---|---|---|---|
| tt | −40 | 0.8530 | 44.6 | 49.3 | 9.4 |
| tt | 27 | 0.9002 | 50.0 | 49.1 | 2.0 |
| tt | 125 | 0.9709 | 58.5 | 49.5 | 15.4 |
| ss | −40 | 0.8426 | 50.5 | 54.9 | 8.1 |
| ss | 27 | 0.8884 | 57.4 | 54.0 | 5.9 |
| ss | 125 | 0.9580 | 68.2 | 53.6 | 21.4 |
| ff | −40 | 0.8688 | 39.9 | 45.3 | 12.0 |
| ff | 27 | 0.9158 | 44.0 | 45.7 | 3.8 |
| ff | 125 | 0.9850 | 50.5 | 46.9 | 7.1 |
| sf | −40 | 0.7861 | 42.1 | 55.2 | 23.7 |
| sf | 27 | 0.8347 | 47.0 | 53.6 | 12.2 |
| sf | 125 | 0.9072 | 54.8 | 52.6 | 3.9 |
| fs | −40 | 0.9195 | 47.7 | 45.0 | 5.8 |
| fs | 27 | 0.9652 | 53.7 | 45.7 | 14.9 |
| fs | 125 | 1.0340 | 63.1 | 47.1 | 25.3 |
読み方
スイッチング閾値の範囲は 0.786V から 1.034V です。最小は
遷移時間の差の最大は
温度の影響も読み取れます。
確定したこと
15条件の測定値が得られた。合否の基準はまだ決めていない。
スイッチング閾値の範囲は 0.786V から 1.034V です。最小は
sf の −40℃、最大は fs の 125℃ で、いずれも釣り合いが崩れるコーナーです。遷移時間の差の最大は
fs の 125℃ で 25.3% です。温度の影響も読み取れます。
tt では −40℃ で 0.8530V、125℃ で 0.9709V と、0.118V 動きます。高温ほど閾値が上がります。確定したこと
15条件の測定値が得られた。合否の基準はまだ決めていない。
6.6 【判断点 D04】合格の基準
測定値が得られるようになりましたが、どの値であれば合格とするかは決まっていません。これは人が決定します。
【判断点 D04】何をもって合格とするか
決めること
判定に使用する項目と、合格とする範囲。範囲を狭くすると設計の精度は上がるが、条件によっては合格しなくなる。
材料
・測定可能な値:スイッチング閾値、立ち上がり時間、立ち下がり時間
・対象:学習用のCMOSインバータ
・表5-3の15条件の実測値
・差の定義:
相談
渡したもの:上記の材料と表5-3の全データ。
質問:
「学習用のCMOSインバータについて、合否判定に使用する項目と範囲の案を3通り、範囲の狭い順に挙げてください。それぞれについて、添付した15条件の実測値で何件が不合格になるかも記載してください。」
返答
決定
中間の案。スイッチング閾値 0.9V ± 0.15V(0.75〜1.05V)、立ち上がりと立ち下がりの差 30%以内。
理由:狭い案では実測で9条件が不合格になり、設計の問題か基準の問題かを切り分けられない。広い案では全条件が大きな余裕をもって合格し、判定として機能しない。
検証
中間の案で15条件すべてが合格した。最も余裕が小さいのは
判定:◯ 基準として機能している。ただし余裕は小さい。
決めること
判定に使用する項目と、合格とする範囲。範囲を狭くすると設計の精度は上がるが、条件によっては合格しなくなる。
材料
・測定可能な値:スイッチング閾値、立ち上がり時間、立ち下がり時間
・対象:学習用のCMOSインバータ
・表5-3の15条件の実測値
・差の定義:
|tr − tf| ÷ max(tr, tf) × 100(第5章5.4節)相談
渡したもの:上記の材料と表5-3の全データ。
質問:
「学習用のCMOSインバータについて、合否判定に使用する項目と範囲の案を3通り、範囲の狭い順に挙げてください。それぞれについて、添付した15条件の実測値で何件が不合格になるかも記載してください。」
返答
| 案 | スイッチング閾値 | 立上・立下の差 |
|---|---|---|
| 狭い | 0.9V ± 0.05V | 10%以内 |
| 中間 | 0.9V ± 0.15V | 30%以内 |
| 広い | 0.7〜1.1V | 50%以内 |
中間の案。スイッチング閾値 0.9V ± 0.15V(0.75〜1.05V)、立ち上がりと立ち下がりの差 30%以内。
理由:狭い案では実測で9条件が不合格になり、設計の問題か基準の問題かを切り分けられない。広い案では全条件が大きな余裕をもって合格し、判定として機能しない。
検証
中間の案で15条件すべてが合格した。最も余裕が小さいのは
sf の −40℃ で、Vsp が下限(0.75V)に対して 0.036V の余裕。次いで fs の 125℃ で、上限(1.05V)に対して 0.016V の余裕。判定:◯ 基準として機能している。ただし余裕は小さい。
基準の広さを実測で確かめる
3つの案のうちどれを選ぶかは、実際に判定してみれば分かります。本講座では、狭い案(0.9V±0.05V、差10%以内)でも判定を実行しました。結果は15条件中9条件が不合格でした。
不合格の内訳は、
これは設計に問題があるのではなく、基準が狭すぎることを示します。基準を決める前に、両方の案で判定してみる方法が有効です。
3つの案のうちどれを選ぶかは、実際に判定してみれば分かります。本講座では、狭い案(0.9V±0.05V、差10%以内)でも判定を実行しました。結果は15条件中9条件が不合格でした。
不合格の内訳は、
tt の125℃、ss の−40℃と125℃、ff の−40℃と125℃、sf の−40℃と27℃、fs の27℃と125℃です。tt の27℃を含む6条件だけが合格します。これは設計に問題があるのではなく、基準が狭すぎることを示します。基準を決める前に、両方の案で判定してみる方法が有効です。
6.7 合否判定の自動化
目的
D04で決定した基準をコードに書き、人が表を読まなくても合否が出るようにする。
入力
D04で決定した基準をコードに書き、人が表を読まなくても合否が出るようにする。
入力
check.py を作成します。
import sys
VSP_MIN, VSP_MAX = 0.75, 1.05 # 0.9V +- 0.15V
DIFF_MAX = 0.30 # rise/fall difference
ng = 0
total = 0
for line in open('results.txt').readlines()[1:]:
f = line.split()
if len(f) < 5:
continue
total += 1
corner, temp = f[0], f[1]
vsp, tf, tr = float(f[2]), float(f[3]), float(f[4])
msg = []
if not (VSP_MIN <= vsp <= VSP_MAX):
msg.append('vsp=%.4f' % vsp)
if max(tr, tf) > 0 and abs(tr - tf) / max(tr, tf) > DIFF_MAX:
msg.append('diff=%.1f%%' % (abs(tr - tf) / max(tr, tf) * 100))
if msg:
print('NG %-3s %5s %s' % (corner, temp, ', '.join(msg)))
ng += 1
else:
print('OK %-3s %5s' % (corner, temp))
print('---')
print('NG: %d / %d' % (ng, total))
sys.exit(1 if ng else 0)
Makefile に追加します。
check: corners python3 check.py
入力
不合格がある場合、その行に、どの値が基準を外れたかが表示されます。表示の形式は次のとおりです。
確定したこと
合否を機械が判定できるようになった。第1章1.5節の「短時間で機械的に確認できるか」に対する手段が
make check画面
OK tt -40 OK tt 27 OK tt 125 OK ss -40 OK ss 27 OK ss 125 OK ff -40 OK ff 27 OK ff 125 OK sf -40 OK sf 27 OK sf 125 OK fs -40 OK fs 27 OK fs 125 --- NG: 0 / 15読み方
NG: 0 / 15 であれば全条件が合格です。不合格がある場合、その行に、どの値が基準を外れたかが表示されます。表示の形式は次のとおりです。
NG fs 125 vsp=1.0340, diff=25.3%また、不合格があると
check.py は終了コード1を返し、make は Error 1 を表示して停止します。これは異常ではなく、不合格を make に伝えるための動作です。確定したこと
合否を機械が判定できるようになった。第1章1.5節の「短時間で機械的に確認できるか」に対する手段が
make check である。
| コマンド | 内容 |
|---|---|
make / make sim | tt・27℃で1回実行する |
make corners | 15条件を実行し results.txt を作成する |
make check | 15条件を実行し合否を出力する |
make clean | 生成ファイルを削除する |
回帰(レグレッション)
定めた条件をすべて自動で実行し、合否を判定する仕組みです。デジタル設計では標準的な手法で、基礎02「FPGA入門」のテストベンチも同じ考え方です。
第7章では、レイアウトから抽出した寄生成分を含むネットリストに対して、同じ
定めた条件をすべて自動で実行し、合否を判定する仕組みです。デジタル設計では標準的な手法で、基礎02「FPGA入門」のテストベンチも同じ考え方です。
第7章では、レイアウトから抽出した寄生成分を含むネットリストに対して、同じ
make check を実行します。
6.8 不合格が出た場合の対処
本講座の条件では15条件すべてが合格しました。読者の環境で不合格が出た場合の手順を示します。
AIに渡す情報
1. 合否判定の基準(D04で決定した内容と差の定義)
2.
3.
4. 現在のトランジスタ寸法(NMOS/PMOSそれぞれの W, L, nf, m)
5. PDK名とバージョン、ngspiceのバージョン
質問:
「この結果で不合格となっている条件について、原因の候補を3つ、可能性の高い順に挙げてください。それぞれについて、どのパラメータをどちらの方向に変更すればよいかと、変更により悪化する可能性のある項目を記載してください。」
1. 合否判定の基準(D04で決定した内容と差の定義)
2.
results.txt の全文(合格した行を含む)3.
make check の出力4. 現在のトランジスタ寸法(NMOS/PMOSそれぞれの W, L, nf, m)
5. PDK名とバージョン、ngspiceのバージョン
質問:
「この結果で不合格となっている条件について、原因の候補を3つ、可能性の高い順に挙げてください。それぞれについて、どのパラメータをどちらの方向に変更すればよいかと、変更により悪化する可能性のある項目を記載してください。」
合格した行も渡す
15条件のうちどれが合格しどれが不合格かの分布に、原因が現れます。
15条件のうちどれが合格しどれが不合格かの分布に、原因が現れます。
fs 側だけが不合格であれば、NMOSが強すぎる方向です。PMOSの幅を増やす対処が考えられます。sf と fs の両方で不合格であれば、片方が強すぎるのではなく、両方向のばらつきに対して余裕が足りない状態です。幅の比を動かしても片方が改善して片方が悪化します。この場合はチャネル長を大きくする(D03の変更)か、基準を見直すことになります。
この章のまとめ
・【D04】スイッチング閾値 0.9V ± 0.15V、立上と立下の差30%以内を合格基準とした
・【D04判定】◯ 15条件すべてが合格。基準として機能している
・狭い案(0.9V±0.05V、差10%以内)では9条件が不合格になることを実測で確認した
・コーナーは5種を実行する。閾値の最小・最大は
・実測の閾値の範囲は 0.786V(sf、−40℃)から 1.034V(fs、125℃)
・最も余裕が小さいのは
・条件は
・Makefile から xschem を呼ぶ場合は
・
・自動化の対象は答えが一意に決まる処理のみ。判断は人が行う
・【D04】スイッチング閾値 0.9V ± 0.15V、立上と立下の差30%以内を合格基準とした
・【D04判定】◯ 15条件すべてが合格。基準として機能している
・狭い案(0.9V±0.05V、差10%以内)では9条件が不合格になることを実測で確認した
・コーナーは5種を実行する。閾値の最小・最大は
sf と fs に現れ、tt/ss/ff には現れない・実測の閾値の範囲は 0.786V(sf、−40℃)から 1.034V(fs、125℃)
・最も余裕が小さいのは
sf の −40℃ で 0.036V・条件は
{CORNER} と {TEMP} の目印を sed で置き換える・Makefile から xschem を呼ぶ場合は
-x を付ける。-r は画面を開かない指定ではない・
make check で15条件の合否が得られる・自動化の対象は答えが一意に決まる処理のみ。判断は人が行う