設計に使う5本のツールと sky130A を、自分のパソコンで動く状態にします。判断点はありません。ここで作った環境を第3章から第7章まで使い続けます。
2.4節(Windows)は、Windows 11 + Docker Desktop の実機で①から⑫まで通して確認しました。掲載している画面は、その実行結果です。ただし初回のダウンロード表示だけは、すでに取得済みの環境で確認したため実物と異なります。
2.5節(Linux・macOS)は、コンテナの起動とデスクトップ画面の表示までを確認しました。画面の解像度、パネルの構成、キー割り当ては、IIC-OSIC-TOOLS のビルド定義(
_build/images/base/)を読み取った値です。記載と異なる結果になった場合、読者の誤りではなく本講座の記述が合っていない可能性があります。第0章に検証の範囲を書いています。
2.1 この章の作業
パソコンに入れるソフトは Docker Desktop の1本だけです。あとは、決まったコマンドを順に打つだけで環境が揃います。
所要時間は、ダウンロードを含めて30分から2時間です。回線速度で変わります。ダウンロードするデータは約3.4GBあります。この取得は最初の一度だけで、2回目以降は発生しません。
本講座で使う5本のツール(xschem、ngspice、magic、netgen、klayout)と、SkyWater社の130nmプロセスの設計データ sky130A を、動く状態にまとめたものです。オーストリアのヨハネス・ケプラー大学 集積回路・量子計算研究所が公開しています。
ツールを1本ずつ入れる必要はありません。ツール同士のバージョンの組み合わせも、設計データの置き場所も、設定済みの状態で配布されています。
ツールを1本ずつ入れない理由
5本のうち、xschem、ngspice、netgen、klayout は Ubuntu の標準の配布物に含まれており、1行で導入できます。magic は含まれてはいるものの、バージョンが 8.3.105 です。sky130A の設計規則ファイルは 8.3.411 以上を要求するため、読み込みに失敗します。
Ubuntu 24.04 の標準配布物にある magic で sky130A を読んだ場合
Error: Magic version 8.3.411 is required by this techfile,
but this version of magic is 8.3.105.
Segmentation fault
IIC-OSIC-TOOLS には適合するバージョンが入っています。5本のバージョンの組み合わせも確認済みのものが入っているため、どれを入れるかを読者が判断する作業は発生しません。
2.2 Docker Desktop の導入
この節で入れるソフトは1本だけです。Docker Desktop を 公式サイト から取得し、画面の指示に従って導入します。OSごとに取得するファイルが異なります。
| OS | 取得するもの | 注意 |
|---|---|---|
| Windows 10 / 11 | Docker Desktop for Windows | 導入時にWSL2の有効化を求められた場合は指示に従う |
| macOS(M1以降) | Docker Desktop for Mac (Apple Silicon) | — |
| macOS(Intel) | Docker Desktop for Mac (Intel Chip) | — |
| Linux | Docker Engine | 下記の設定を行う |
この設定をせずに
sudo を付けて起動すると、作成されるファイルの持ち主が root になり、あとから自分で編集できなくなります。sudo usermod -aG docker $USER を実行し、いったんログアウトして入り直します。WindowsとmacOSでは、この作業は不要です。
2.3 起動のしかたは2つある
IIC-OSIC-TOOLS には起動のしかたが複数あります。本講座で使うのは次の2つです。どちらを選んでも、入っているツールと設計データは同じものです。
| 呼び方 | 操作する場所 | この講座で使うOS | 該当節 |
|---|---|---|---|
| シェル方式 | いま使っているターミナルが、そのままコンテナの中に切り替わる | Windows | 2.4 |
| ブラウザ方式 | ブラウザの中に表示されるデスクトップ画面 | Linux・macOS | 2.5 |
Windows の方は 2.4節だけを読んでください。2.5節は読まなくて構いません。逆に、Linux と macOS の方は 2.5節だけを読んでください。
Windows のシェル方式の起動スクリプトには、Windows側の画面表示のしくみ(WSLg)をコンテナに渡す記述があります。このため xschem や magic が、ブラウザの中ではなく Windows のウィンドウとして開きます。文字の大きさもコピー&ペーストも、いつも使っている PowerShell のままです。
Linux と macOS のシェル方式にはこの記述がなく、また作成するファイルの持ち主が
root になります。このためブラウザ方式を使います。
2.4 Windows の手順
①から⑭まで、順に実行します。途中で他の節に移動する必要はありません。
スタートメニューから Docker Desktop を起動します。
画面右下(通知領域)のクジラのアイコンが動いている間は準備中です。動きが止まるまで待ちます。ここで待たずに次へ進むと、⑥で失敗します。
スタートボタンを右クリックし、「ターミナル」または「Windows PowerShell」を選びます。
次のような表示が出ます。
PS C:\Users\user>
user の部分はご自身のユーザー名です。本講座では user として説明します。このあとの操作は、どのフォルダにいても構いません。本講座では、いま出ているこの位置のまま進めます。
コマンドをコピーしたあと、PowerShell の黒い画面の上で右クリックすると貼り付けられます。Ctrl+V でも貼り付けられます。
貼り付けたあと、Enter を押すと実行されます。
docker run --rm hello-worldこう出れば成功です
Hello from Docker! This message shows that your installation appears to be working correctly.Docker が動いていることの確認です。ここで失敗した場合、そのまま先へ進んでも原因が分からなくなります。次の「うまくいかないとき」を見てください。
Cannot connect to the Docker daemon と出た場合は、Docker Desktop が起動していません。①に戻り、クジラのアイコンが止まるまで待ってから、もう一度③を実行します。用語 'docker' は…認識されません と出た場合は、Docker Desktop を導入したあとに PowerShell を開き直していません。PowerShell をいったん閉じ、②からやり直します。
git clone --depth=1 https://github.com/iic-jku/iic-osic-tools.gitこう出れば成功です
Cloning into 'iic-osic-tools'... Receiving objects: 100% (552/552), 379.25 KiB | 2.00 MiB/s, done. Resolving deltas: 100% (117/117), done.起動用のファイル一式を取得しています。380KB程度で、すぐ終わります。ツール本体(約3.4GB)は⑥で取得します。
数字は取得した時期によって変わります。一致している必要はありません。
用語 'git' は…認識されません と出た場合は、Git が入っていません。Git for Windows を導入し、PowerShell を開き直してから④をやり直します。destination path 'iic-osic-tools' already exists と出た場合は、すでに取得済みです。④を飛ばして⑤へ進んでください。
cd iic-osic-toolsこう出れば成功です
PS C:\Users\user\iic-osic-tools>表示されている場所が
\iic-osic-tools で終わっていることを確認してください。取得したファイルのある場所へ移動しました。
C:\Users\user\iic-osic-tools\iic-osic-tools のように同じ名前が2回出た場合は、④を2回実行しています。次の1行で1つ上に戻ってください。
cd ..
.\start_shell.bat先頭の
.\ は省略できません。PowerShell は、いまいる場所にあるファイルを名前だけでは実行しない決まりになっているためです。初回はここで約3.4GBの取得が始まります。回線の速さによって、10分から2時間かかります。進み具合の数字が止まって見える時間がありますが、取得した内容を展開している時間です。そのまま待ちます。 こう出れば成功です
Using/creating designs directory: C:\Users\user\eda\designs
Using container engine docker
Container does not exist, pulling docker.io/hpretl/iic-osic-tools:latest and creating iic-osic-tools_shell ...
latest: Pulling from hpretl/iic-osic-tools
(初回はここに取得の進み具合が表示されます)
Status: Downloaded newer image for hpretl/iic-osic-tools:latest
docker.io/hpretl/iic-osic-tools:latest
What's next:
View a summary of image vulnerabilities and recommendations → docker scout quickview docker.io/hpretl/iic-osic-tools:latest
[INFO] USER_ID: 0, GROUP_ID: 0
[INFO] Final PATH variable: /headless/.local/bin:/foss/tools/bin:/foss/tools/sak: ...
[INFO] Final PYTHONPATH variable: /headless/.local/lib/python3.12/site-packages: ...
[INFO] SKIPPING UI STARTUP
[INFO] Executing command: '/bin/bash'
/foss/designs >
PATH と PYTHONPATH の行は実際には非常に長く、画面の何行分にもわたります。読む必要はありません。SKIPPING UI STARTUP は、デスクトップ画面を立ち上げない、という意味です。シェル方式では正常な表示です。
いちばん下の行が、次の形に変わっています。
/foss/designs >
PS C:\…> ではなくなりました。これがコンテナの中の表示です。ここから先に打つコマンドは、Windows ではなくコンテナの中で実行されます。見分け方は先頭です。
/foss で始まっていればコンテナの中、PS C:\ で始まっていれば Windows 側です。文字が小さい場合は、Ctrl を押しながらマウスホイールを回すと大きくなります。PowerShell の機能がそのまま使えます。
用語 '.\start_shell.bat' は…認識されません と出た場合は、⑤の移動ができていません。⑤に戻ります。ERROR: No container engine found と出た場合は、Docker Desktop が起動していません。①に戻ります。Container iic-osic-tools_shell exists. と出た場合は、すでにコンテナが作られています。2.7節の再開の手順を使ってください。
ngspice -v xschem --version magic --version netgen -batch quit klayout -v5本のツールが入っているかの確認です。表示される量はかなり多く、画面が一気に流れます。異常ではありません。 こう出れば成功です
****** ** ngspice-46 : Circuit level simulation program ** Compiled with KLU Direct Linear Solver ** The U. C. Berkeley CAD Group ** Copyright 1985-1994, Regents of the University of California. ** Copyright 2001-2025, The ngspice team. (以下、参照先の案内が数行) ****** XSCHEM V3.4.8RC Copyright (C) 1998-2026 Stefan Schippers (以下、ライセンスの表示と設定ファイルの読み込み経過が10行以上) Netlist mode: <default> Sourced library init file /foss/tools/xschem/share/doc/xschem/analyses/lib_init.tcl 8.3.678 Netgen 1.5.323 compiled on Mon Jul 27 09:16:59 AM CEST 2026 Warning: netgen command 'format' use fully-qualified name '::netgen::format' Warning: netgen command 'global' use fully-qualified name '::netgen::global' KLayout 0.30.9読み方
5本すべてでバージョン番号が表示されれば揃っています。番号は取得した時期によって変わります。上の数字と一致している必要はありません。
表示の形式はツールごとに大きく異なります。ngspice と xschem は著作権表示を含む長い出力を返し、magic は
8.3.678 という数字だけを返します。netgen の
Warning: の2行は、正常に動いている場合にも表示されます。対処は不要です。
xschem の出力の中に、次のような行が混じります。
MODELS_NGSPICE: /foss/pdks/ihp-sg13g2/libs.tech/ngspice/models
ihp-sg13g2 は、本講座で使う sky130A とは別の設計データ(ドイツIHP社の130nmプロセス)です。コンテナには複数の設計データが同梱されており、初期状態ではそちらが選ばれています。次の⑨で
sky130A に切り替えます。
echo $PDK_ROOT echo $PDKPATH設計データの置き場所の確認です。 こう出ます
/foss/pdks /foss/pdks/ihp-sg13g22行目が
ihp-sg13g2 になっています。本講座で使うのは sky130A です。次の⑩で切り替えます。すでに
/foss/pdks/sky130A と表示されている場合は、⑩を飛ばして⑪へ進んでください。
ls /foss/pdks/ を実行すると、次のように表示されます。
ciel gf180mcuD ihp-sg13cmos5l ihp-sg13g2 sky130A versions.txtどれを初期値にするかはコンテナの版によって変わります。本講座は
sky130A を使うので、明示的に切り替えます。切り替えは環境変数の設定だけで済み、コンテナを作り直す必要はありません。
echo 'export PDK=sky130A' >> /headless/.bashrc echo 'export PDKPATH=$PDK_ROOT/$PDK' >> /headless/.bashrc tail -3 /headless/.bashrc設定ファイルに2行を書き足しています。この方法にすると、次回コンテナを起動したときにも設定が残ります。 こう出れば成功です
export PS1='\[\033[0;32m\]\w >\[\033[0;38m\] ' export PDK=sky130A export PDKPATH=$PDK_ROOT/$PDK下の2行が、いま書き足した内容です。1行目は元から入っている設定で、プロンプトを
/foss/designs > の形にしているものです。
export PDK=sky130A export PDKPATH=$PDK_ROOT/$PDK echo $PDKPATH⑩で書き足した設定は、次回の起動から効きます。いま開いている画面にも反映させるため、同じ2行をその場でも実行します。 こう出れば成功です
/foss/pdks/sky130Aここが
sky130A になっていない状態で先へ進まないでください。第3章で回路図を開いても、sky130 の部品が一覧に出てきません。
mkdir -p /foss/designs/inverter cd /foss/designs/inverter pwd作業用のフォルダを作って、そこへ移動します。 こう出れば成功です
/foss/designs/inverter第3章から第7章までの作業は、すべてこのフォルダで行います。
xschem &ツールの画面が出るかの確認です。ターミナルには次のような1行が返ります。
[1] 28この表示は成功の合図ではありません。バックグラウンドで起動を始めた、という意味だけです。
Windows の画面に xschem のウィンドウが開いたかどうかで判断してください。ブラウザの中ではなく、通常のウィンドウとして開けば成功です。大きさも自由に変えられます。
末尾の
& は、ツールを起動したままコマンドの入力を続けるための指定です。これがないと、ツールを閉じるまで次のコマンドを打てません。
まず
jobs を実行します。Running であれば起動しており表示だけが届いていない状態、Exit で終わっていれば異常終了しています。異常終了の場合は
& を外して xschem だけを実行し、表示されるメッセージを確認します。cannot open display と出れば、原因は次のとおりです。Windows側の画面表示のしくみ(WSLg)が使える状態になっていません。Docker Desktop の設定画面(歯車のアイコン)で、General の「Use the WSL 2 based engine」に印が付いているかを確認します。
印を付けて Docker Desktop を再起動したあと、2.7節の手順でコンテナを削除し、⑥からやり直します。
それでも開かない場合は、2.5節のブラウザ方式に切り替えてください。ブラウザ方式はこのしくみを使いません。
ウィンドウ右上の × で閉じます。ターミナルに次の表示が出ます。
[1]+ Done xschem確認は以上です。
確定したこと
5本のツールが使える状態になった。設計データは
sky130A に切り替えた。作業場所は /foss/designs/inverter。ツールは Windows のウィンドウとして開く。第3章に進める。
取得した約3.4GBは、パソコンに残り続けます。作られたコンテナも、削除しない限り残ります。講座を再開するたびに導入し直す作業は発生しません。
⑩で設定ファイルに書き足したため、
sky130A への切り替えも次回から自動で効きます。⑪を打ち直す必要はありません。2回目以降の起動のしかたは2.7節にあります。
2.5 Linux・macOS の手順
git clone --depth=1 https://github.com/iic-jku/iic-osic-tools.git cd iic-osic-tools ./start_vnc.sh初回は約3.4GBの取得が始まります。 こう出れば成功です
[INFO] Design directory auto-set to /home/user/eda/designs.
[INFO] Container engine auto-set to docker.
[INFO] Container does not exist, creating iic-osic-tools_xvnc_uid_1000 ...
[INFO] To access the VNC session, open a browser and navigate to
http://localhost:80/?password=abc123
http://localhost:80/?password=abc123パスワードがURLに含まれているため、入力を求められません。
こう出れば成功です
濃紺の背景にロゴが表示された画面が出ます。これがコンテナの中のデスクトップです。
最も多い原因は、パソコンのポート80が別のソフトに使われていることです。ウェブサーバ(nginx、Apacheなど)を動かしている場合に起こります。
その場合は、番号を指定して起動し直します。
WEBSERVER_PORT=8080 ./start_vnc.sh接続先は
http://localhost:8080/?password=abc123 になります。8080も使われている場合は、8081、8082と番号を変えます。番号の指定はコンテナを作るときにしか効きません。すでにコンテナが作られている場合は、2.7節の手順で削除してから作り直します。
デスクトップにアイコンはありません。ツールはターミナルから起動します。画面の左下に細いパネルがあり、その3番目のアイコンがターミナルです。デスクトップの何もないところを右クリックしてもメニューが出ます。
| 位置 | 内容 |
|---|---|
| 1番目 | アプリケーションメニュー |
| 2番目 | ファイルマネージャ |
| 3番目 | ターミナル |
| 4番目 | 開いているウィンドウの一覧 |
| 右端 | 時計と、ログアウトなどのメニュー |
画面の解像度が 1680×1050 に固定されており、これをブラウザの窓に縮小して表示しているためです。
ターミナルの文字だけを大きくするには、ターミナルの中で Ctrl と + を押します。設定として残すには、ターミナルの中で F10 を押してメニューバーを出し、Edit → Preferences → Appearance の Font を変更します。メニューバーは初期状態では隠れています。
画面全体を大きくするには、解像度そのものを変えます。2.7節の手順でコンテナを削除し、作り直すときに指定します。
DOCKER_EXTRA_PARAMS="-e VNC_RESOLUTION=1280x800" ./start_vnc.sh
この画面は、パソコン側のクリップボードと直接つながっていません。既定で表示されるのは簡易版の画面で、受け渡しの操作パネルが付いていません。
操作パネルの付いた画面を開きます。
http://localhost/vnc.html?password=abc123画面の左端に細いつまみが出るので、これをクリックするとパネルが開きます。中のクリップボードの欄に文字を貼り付けると、コンテナ側に渡ります。ターミナルに貼るときは Ctrl と Shift と V を同時に押します。ターミナルでは Ctrl と V は効きません。
手順が多いので、長い入力は2.6節のファイル経由の方法を使うほうが確実です。
ngspice -v xschem --version magic --version netgen -batch quit klayout -v echo $PDK_ROOT echo 'export PDK=sky130A' >> /headless/.bashrc echo 'export PDKPATH=$PDK_ROOT/$PDK' >> /headless/.bashrc export PDK=sky130A export PDKPATH=$PDK_ROOT/$PDK echo $PDKPATH mkdir -p /foss/designs/inverter cd /foss/designs/inverter pwd確認する内容は2.4節の⑧から⑫と同じです。
echo $PDKPATH が /foss/pdks/sky130A を返し、最後に /foss/designs/inverter が表示されれば完了です。確定したこと
5本のツールと sky130A が使える状態になった。作業場所は
/foss/designs/inverter。第3章に進める。
2.6 ファイルの受け渡し
コンテナの中の
/foss/designs は、パソコン側の次の場所と同じものです。片方で作ったファイルは、もう片方からも見えます。
Windows C:\Users\user\eda\designs Linux・macOS /home/user/eda/designsこのため、コンテナを停止してもここに置いたファイルは消えません。逆に、この外(たとえば
/tmp や /root)に置いたファイルは、コンテナを削除すると消えます。作成するファイルは必ず /foss/designs の下に置きます。
パソコン側のエディタで書く
共有されているので、パソコン側の使い慣れたエディタでファイルを作り、コンテナ側から実行できます。第3章以降で入力が長くなったときに使えます。ブラウザ方式でコピー&ペーストの手順が煩雑な場合も、この方法で回避できます。
Windows の場合、
C:\Users\user\eda\designs\check.sh という名前で、次の内容のファイルを作ります。
ngspice -v echo $PDK_ROOT② コンテナの中で次の1行を実行します
bash /foss/designs/check.shパソコン側で書いた内容が、コンテナの中で実行されます。打ち込むのは1行だけです。
Windows のエディタは、初期状態で改行コードを CRLF にすることがあります。この形式のファイルをコンテナで実行すると、行末に余分な文字が付いた状態で解釈され、次のように返ります。
$'\r': command not foundVisual Studio Code の場合、画面右下に
CRLF と表示されていればクリックして LF に切り替えます。メモ帳の場合は、保存時に改行コードを LF に指定します。この誤りは第3章以降でも同じ形で現れます。ファイルを作ったのに動かない場合は、まず改行コードを確認します。
2.7 停止と再開
コンテナは、明示的に削除しない限り残り続けます。約3.4GBの取得は最初の一度だけです。講座を再開するたびに導入し直す必要はありません。
作業をやめるとき exit docker stop iic-osic-tools_shell 次回に再開するとき docker start -ai iic-osic-tools_shellまず
exit でコンテナの中から抜けます。表示が PS C:\…> に戻ります。再開の
-ai は、起動したうえでその中につなぎ直す指定です。これがないと、起動はするものの表示が戻ってきません。
作業をやめるとき docker stop iic-osic-tools_xvnc_uid_1000 次回に再開するとき docker start iic-osic-tools_xvnc_uid_1000末尾の数字はユーザーIDです。
id -u で確認できます。多くの環境では 1000 です。再開したあと、ブラウザで
http://localhost:80/?password=abc123 を開き直します。
2回目以降に
.\start_shell.bat や ./start_vnc.sh を実行しても、コンテナは起動しません。スクリプトは、同じ名前のコンテナが既にあることを検出して、次のようなメッセージを返して終わります。
Container iic-osic-tools_shell exists. Restart with "docker start iic-osic-tools_shell" or remove with "docker rm iic-osic-tools_shell" if required.Linux・macOS版のスクリプトは、ここで
s(起動)か r(削除)のキー入力を求めます。Windows版はメッセージを出すだけで、何も実行しません。再開には
docker start を使います。
画面の解像度や接続ポートを変える場合、いったんコンテナを削除して作り直します。これらはコンテナを作るときにしか決まらないためです。
Windows の場合は次のとおりです。名前の部分は、使っている方式に合わせて読み替えます。
docker stop iic-osic-tools_shell docker rm iic-osic-tools_shell削除されるのはコンテナだけです。約3.4GBのツール本体と、
eda\designs の中身は残ります。再取得は発生しません。ただし、コンテナの中で変えた設定(ターミナルのフォントなど)は消えます。作業用のファイルを
/foss/designs の外に置いていた場合、それも消えます。コンテナの一覧は
docker ps -a で確認できます。
2.8 環境エラーの切り分け
第3章以降でエラーが出た場合、原因が環境にあるのか作業内容にあるのかを判別します。判断の材料を表にまとめます。
| 症状 | まず確認すること | 該当節 |
|---|---|---|
'.' は、内部コマンドまたは外部コマンド… | コマンドプロンプトで ./ を使っている。Windowsでは .\ | 2.4 ⑥ |
| スクリプトがエディタで開かれる | PowerShell で .sh を実行している。Windowsでは .bat | 2.4 ⑥ |
用語 '…' は…認識されません | 先頭に .\ が付いているか。いる場所が合っているか | 2.4 ⑤⑥ |
| 2回目の起動でコンテナが立ち上がらない | 起動スクリプトではなく docker start を使う | 2.7 |
| ツールのウィンドウが開かない(Windows) | Docker Desktop で WSL 2 が有効か。[1] 28 は成功の合図ではない | 2.4 ⑬ |
| ブラウザに何も表示されない | ポート80が別のソフトに使われていないか | 2.5 ② |
| 文字が小さすぎる | ブラウザ方式は解像度が固定。ターミナルの文字だけなら Ctrl++ | 2.5 |
| コピー&ペーストができない | vnc.html を開くか、ファイル経由に切り替える | 2.5 / 2.6 |
そのようなファイルやディレクトリはありません | パソコン側で実行している。表示が /foss で始まっているかを確認 | 2.4 ⑦ |
$'\r': command not found | ファイルの改行コードが CRLF になっている | 2.6 |
$PDKPATH が sky130A でない | 初期値は ihp-sg13g2。切り替えたか | 2.4 ⑩⑪ |
| 作ったファイルが消えた | /foss/designs の下に置いたか | 2.6 |
| ファイルを編集できない(Linux) | sudo で起動していないか | 2.2 |
| ダウンロードが途中で止まる | ディスクの空きが20GB以上あるか | 2.4 ⑥ |
第3章で部品一覧に sky130_fd_pr が出ない | $PDKPATH が sky130A を指しているか | 2.4 ⑪ |
| magic で設計規則が効かない | 起動時にテックファイルを指定しているか | 第6章 |
・パソコンに入れたソフトは Docker Desktop の1本のみ
・IIC-OSIC-TOOLS には5本のツールと sky130A が設定済みで入っている
・Windows は
.\start_shell.bat。ツールは Windows のウィンドウとして開く・Linux・macOS は
./start_vnc.sh。接続は http://localhost:80/?password=abc123・2回目以降の起動は
docker start。起動スクリプトでは立ち上がらない・設計データの初期値は
ihp-sg13g2。.bashrc に2行足して sky130A に切り替える・作業場所は
/foss/designs/inverter。この外に置いたファイルは消える・長い入力は、パソコン側でファイルを作ってコンテナから実行する。改行コードは LF
・
$PDK_ROOT は /foss/pdks。第3章以降のコマンドで使う