本講座で使う5本のツールが、それぞれ何を受け取り何を出すかを把握します。ツールの操作方法はここでは扱いません。5本の関係が分かっていれば、第3章以降でエラーが出たとき、どのツールの問題かを切り分けられます。判断点はありません。
本講座に掲載する数値、コマンド、画面出力は、AIが構築した検証環境で実行して得たものです。執筆者が IIC-OSIC-TOOLS のコンテナを起動し、第2章から第7章までを人の手で通した確認は行っていません。
検証環境のツールは、コンテナと同一のバージョンをソースから個別に導入したものです(下記)。したがって、ツールの挙動としては同じ結果になると考えられます。ただし、コンテナ固有の事情(起動手順、パス、ポート、初回のダウンロード、画面の見え方)については確認されていません。
読者の皆さんに確認していただきたいこと
実際に手を動かし、掲載どおりに進むかを確かめてください。掲載値と異なる結果が出た場合、それは読者の誤りではなく、本講座の記述が読者の環境に合っていない可能性があります。
特に次の3点が通れば、以降は検証済みの経路と同じになります。
・第3章3.5節 部品の一覧に
sky130_fd_pr が表示されるか・第3章3.7節
xschem -n -q -x で作業ディレクトリに .spice が出力されるか・第4章4.1節
ngspice -b が vsp を返すか(1.8V ではなく 0.8V 台)記述の誤りに気づかれた場合は、ご連絡ください。
確認日は2026年8月8日から9日です。
magic 8.3.678 / ngspice 46 / netgen 1.5.323 / xschem 3.4.8(コミット b69f793f)/ klayout 0.28.16 / open_pdks f6eeac7d(sky130A)
このうち magic、ngspice、netgen、xschem、open_pdks の5つは、第2章で導入する IIC-OSIC-TOOLS の 2026.07 版と同一のバージョンです。klayout のみ、コンテナは 0.30.9 で、確認に使用したものより新しくなっています。
コンテナのバージョンが更新されると、出力の書式や数値が変わる場合があります。掲載値と一致しない場合は、本講座の値ではなく読者の環境で得られた値を採用します。
画面(GUI)については、仮想ディスプレイ上で xschem と magic を起動し、画面構成、メニュー構成、起動時に表示される確認画面、属性編集画面を確認しています。掲載する画面構成の図はこれに基づきます。
magic については、マウスによる範囲指定、S による選択、Z による拡大、
undo による取り消し、矢印キーの動作も確認しました。確認していない項目は、該当箇所に「未確認」と明記します。
0.1 道具が5本に分かれている理由
本講座では次の5本を使います。
| 名前 | 読み | 担当 |
|---|---|---|
| xschem | エックススケム | 回路図を描く |
| ngspice | エヌジースパイス | 回路の動作を計算する |
| magic | マジック | シリコン上の図形を描く/検査する/取り出す |
| netgen | ネットジェン | 2つの回路が同じかを照合する |
| klayout | ケーレイアウト | 出力した製造データを表示する |
プリント基板の設計ソフトである KiCad は、回路図エディタ、基板エディタ、部品ライブラリが1つのアプリケーションにまとまっています。本講座の5本は、そうなっていません。別々のプログラムであり、開発元も異なります。
| 名前 | 主な開発者・組織 |
|---|---|
| xschem | Stefan Schippers(個人) |
| ngspice | ngspice team(SPICE3f5から派生) |
| magic | カリフォルニア大学バークレー校で開発。現在は Tim Edwards が保守 |
| netgen | Tim Edwards |
| klayout | Matthias Köfferlein(個人) |
統合されていないのは、これらが1つの計画のもとで作られたのではなく、別々の場所で別々の目的のために作られ、あとから組み合わせて使われるようになったためです。
5本をつなぐのはファイルです。あるツールが出力したファイルを、次のツールが読み込みます。ツール同士が直接やり取りする仕組みはありません。
このため、途中でツールを別のものに入れ替えることができます。ngspice の代わりに Xyce を使う、magic の代わりに KLayout でレイアウトを描く、といった構成が実際に存在します。統合されていないことは、この講座の範囲では手間になりますが、そもそもの設計思想です。
0.2 それぞれが受け取るものと出すもの
| 工程 | ツール | 受け取るもの | 出すもの | 章 |
|---|---|---|---|---|
| 1 | xschem | 人の操作(部品の配置と配線) | 回路図 .schネットリスト .spice | 第3章 |
| 2 | ngspice | ネットリスト .spice | 数値(画面出力) | 第4章 第5章 |
| 3 | magic | 人の操作(図形の描画) | レイアウト .mag | 第6章 |
| 4 | magic | レイアウト .mag | 違反の件数と箇所 | 第6章 |
| 5 | magic | レイアウト .mag | 抽出結果 .extネットリスト .spice | 第7章 |
| 6 | netgen | ネットリスト2つ (回路図側とレイアウト側) | 照合結果 comp.out | 第7章 |
| 7 | magic | レイアウト .mag | 製造データ .gds | 第7章 |
| — | klayout | 製造データ .gds | 画面表示 | 第7章 |
magic が4つの工程を担当しています。図形を描き、検査し、そこから回路を取り出し、製造データを書き出します。5本のうち magic だけを覚えるのであれば、この4つが magic の仕事です。
klayout は工程に含まれません。magic が出力した .gds を別のソフトで開いて確認するために使います。同じソフトで書いて同じソフトで読むと、書き出しの誤りに気づけないためです。
0.3 ファイルの流れ
【図0-1】ファイルの流れ
人の操作
│
├─→ xschem ──→ inverter.sch 回路図
│ │
│ ↓ ネットリスト出力
│ inverter.spice ──→ ngspice ──→ 数値
│ │ (閾値、遷移時間)
│ │
│ └──────────────┐
│ │
└─→ magic ───→ inverter.mag │ 回路図側
│ │
┌───────────┼───────┐ │
↓ ↓ ↓ │
DRC 抽出 GDS出力 │
│ │ │ │
違反の件数 inverter.ext │ │
│ │ │
↓ ↓ │
inverter.spice inverter.gds
(レイアウト側) │
│ └─→ klayout ──→ 画面表示
│
└───→ netgen ←─┘
│
↓
comp.out 照合結果
中央から左右に分かれ、最後に netgen で合流します。左が回路図から出たネットリスト、右がレイアウトから取り出したネットリストです。この2つが一致すれば、描いた図形が意図した回路になっていることになります。第7章の作業です。
0.4 途中のファイルはすべて読める
やり取りされるファイルは、.gds を除いてすべてテキストです。テキストエディタで開いて中身を確認できます。
| ファイル | 内容 | 形式 | 大きさ |
|---|---|---|---|
inverter.sch | 回路図 | テキスト | 950バイト |
inverter.spice | ネットリスト(レイアウト側) | テキスト | 281バイト |
inverter.mag | レイアウト | テキスト | 2,063バイト |
inverter.ext | 抽出結果 | テキスト | 1,437バイト |
comp.out | 照合結果 | テキスト | 3,494バイト |
inverter.gds | 製造データ | バイナリ | 3,824バイト |
いずれも、本講座の手順で作成したインバータ1個での実測値です。読者が作るものも同じ程度になります。
レイアウトのファイルは、次のような内容です。
インバータのレイアウト(inverter.mag)の冒頭 magic tech sky130A magscale 1 2 timestamp 1786228265 << nwell >> rect -420 320 240 1300 << nmos >> rect -15 -100 15 100
層の名前と長方形の座標が並んでいます。<< nwell >> の次の行が、nwell という層に置かれた長方形1個です。数字4つは、左下のX、左下のY、右上のX、右上のYです。
座標の単位は magic の内部単位で、sky130A では1単位が 0.005µm です。<< nmos >> の rect -15 -100 15 100 は、横幅が 15−(−15) = 30単位 = 0.15µm、縦が 100−(−100) = 200単位 = 1.0µm を意味します。この 0.15µm がゲート長、1.0µm がチャネル幅です。第4章で決める数値が、そのまま図形の寸法になります。
ネットリストは次のような内容です。
レイアウトから取り出したネットリスト(inverter.spice) .subckt inverter VSS VDD OUT IN X0 OUT IN VSS VSS sky130_fd_pr__nfet_01v8 w=1 l=0.15 X1 OUT IN VDD VDD sky130_fd_pr__pfet_01v8 w=3.5 l=0.15 .ends
トランジスタ2個と、その接続先が書かれています。X0 の行が NMOS、X1 の行が PMOS です。w と l は幅と長さで、単位はマイクロメートルです。
この2行は、図形から計算された値です。読者が描いた長方形の寸法が、そのままここに現れます。第7章では、この値が回路図に書いた値と一致するかを照合します。
作業の途中でエラーが出たとき、ファイルを開いて中身を見れば、どこまでできているかが分かります。
差分を取れば、直前の操作で何が変わったかが分かります。
AIに相談するとき、ファイルの中身をそのまま示せます。画面の写真を撮る必要がありません。
本講座で AI に相談する場面(第1章1.5節)は、この性質の上に成り立っています。
0.5 章とツールの対応
| 章 | xschem | ngspice | magic | netgen | klayout |
|---|---|---|---|---|---|
| 第2章 環境の構築 | 5本すべての導入を確認する | ||||
| 第3章 回路図の作成 | ○ | — | — | — | — |
| 第4章 特性の測定 | ○ | ○ | — | — | — |
| 第5章 実行手順の自動化 | ○ | ○ | — | — | — |
| 第6章 レイアウトとDRC | — | — | ○ | — | — |
| 第7章 抽出・LVS照合・GDS出力 | ○ | ○ | ○ | ○ | ○ |
第6章を除き、各章は1本か2本のツールで完結します。第3章でエラーが出た場合、原因は xschem か、その設定ファイルか、読者の操作のいずれかです。magic や netgen は関係しません。切り分けの範囲がこれで決まります。
第7章では5本すべてを使います。工程が3つ(抽出、照合、出力)あり、それぞれ担当が異なるためです。
0.6 GUIとコマンドの使い分け
5本のうち、xschem と magic と klayout は画面を持ちます。ngspice と netgen は画面を持たず、コマンドで実行します。
| ツール | 画面 | コマンド | 本講座での使い方 |
|---|---|---|---|
| xschem | あり | あり | 画面で描く。第5章でコマンドからも実行する |
| ngspice | — | あり | コマンドのみ |
| magic | あり | あり | 画面で描く。検査と出力はコマンドでも実行する |
| netgen | — | あり | コマンドのみ |
| klayout | あり | あり | 画面のみ |
xschem と magic は、画面での操作と、コマンドでの操作の両方ができます。同じ作業をどちらでも実行できます。
第3章と第6章では画面で描きます。図形の位置を目で見ながら決めるためです。第5章では、同じ作業をコマンドで実行する形に置き換えます。条件を変えて何度も繰り返す作業になるためです。この置き換えが可能なのは、両方の入口が用意されているためです。
・使うツールは5本。開発元の異なる別々のプログラム
・5本をつなぐのはファイル。ツール同士が直接やり取りする仕組みはない
・magic が4つの工程(描画、DRC、抽出、GDS出力)を担当する
・klayout は工程に含まれない。書き出した結果を別のソフトで確認するために使う
・やり取りするファイルは
.gds を除きすべてテキスト。中身を読める・レイアウトの座標は magic の内部単位。sky130A では1単位が 0.005µm
・第6章を除き、各章は1本か2本のツールで完結する。エラーの切り分けの範囲がこれで決まる
・xschem と magic は画面とコマンドの両方から操作できる。第5章の自動化はこの性質を使う