第2章:環境構築と動作確認(WSL2 + Dockerベース完全自習ガイド)
本章では、Windows 11 PC上に世界標準のオープンソース半導体設計ラボを構築します。WSL2(Windows Subsystem for Linux)とDocker Desktopを組み合わせた環境を構築します。コマンドを1行ずつ手作業で打ち込みながら進めましょう。
※本章は現行版(2025年シャトル ttsky25b / LibreLane 3.0.3)に準拠して全面改訂しています。 Tiny Tapeoutのローカル・ハードニング手順は2024年以降に大きく変わり、旧来の pip install tinytapeout や tt harden という単独コマンドは現在のフローには存在しません。本章の手順は、公式ガイド Hardening Tiny Tapeout Projects Locally に対応しています。
2.0 はじめに ― この章の歩き方と準備
環境構築は、本講座の中で最もつまずきやすい場所だと、本講座は考えています。ツールが多く、待ち時間も長く、エラーメッセージも英語で出ます。そこで本節では、手を動かす前に「どこまでを本章で扱うか」「詰まったときにどう動くか」「自分のPCで足りるか」を先に整理しておきます。ここを読んでおくと、このあとの作業で迷子になりにくくなります。
A1. この章で扱うこと・扱わないこと(スコープ)
本章の目的は、「LibreLaneで実際にチップ設計データ(GDS)をまず作れる環境」を整えることです。LinuxやDockerそのものの詳しい使い方(コマンド体系やコンテナの仕組み)は、それだけで一冊の本になる広い分野なので、本章では必要最小限のコマンドだけを、その都度示します。LinuxやDockerを基礎から学びたい場合は、別途の入門教材を併用することを本講座はおすすめします。本章は「全部を理解してから進む」のではなく「まず動かして、必要なところだけ後から深掘りする」という進め方を採ります。
A2. 困ったときの歩き方(エラーが出たら、ここに戻る)
環境構築では、ほぼ必ずどこかでエラーが出ます。エラーは失敗ではなく、次の一手を教えてくれる手がかりだと考えてください。詰まったときは、次の順番で動くと立て直しやすいです。
- エラーの「一行目」と「最後の数行」をまず読む。 長い英語のログでも、原因は最初と最後に出ていることが多いです。途中の大量の行は、いったん飛ばして構いません。
- その画面(エラー文)を、そのままAIに貼って聞く。 「このエラーの原因と対処を教えて」と尋ねれば、当たりをつけられます。エラー文は省略せず、出たまま貼るのがコツです。
- AIの答えは、公式ドキュメントと照らし合わせてから実行する。 AIの回答は便利ですが、古い手順や別バージョンの話が混じることがあります。AIによっても、回答精度にばらつきがあります。コマンドを実行する前に、公式ガイドの記述と見比べて、食い違っていないか確認してから動かすのが安全です。
- 環境は、多くの場合フォルダを消せばやり直せる。 本章で作るものの大半は「ホームディレクトリの下のフォルダ」と「やり直せる設定」です。壊しても作り直せるので、怖がりすぎる必要はありません(消す前に、自分で書いたファイルだけは退避しておくと安心です)。
A3. 推奨マシンスペックと、足りないときの逃げ道
半導体の物理設計はそれなりに計算資源を使います。目安としては以下のスペックを本講座は推奨します。あくまで目安であり、これを下回ると絶対に動かないという意味ではありません。
- メモリ: 最低8GB、推奨16GB以上。
- ストレージ空き: 20GB以上(Dockerイメージ・PDK・成果物で意外と使います)。
- CPU: 4コア以上推奨。
- OS: Windows 11 + WSL2、またはネイティブのLinux。
自分のメモリ量は、次のコマンドで確認できます。
# Ubuntu(WSL2)側で、使えるメモリの合計を見る free -h # Windowsの物理メモリ総量を見る(PowerShellで実行。GB単位で表示) (Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB
スペックが足りないと感じても、あきらめる必要はありません。 本講座には、次のような正規の逃げ道が用意されています。
- 小さい設計から試す: 本章で扱うサンプルや、第3章のLチカ程度であれば、要求は軽めです。いきなり大きなCPU(第5章)を載せず、小さな設計で環境を固めるのが安全です。
- WSL2に渡すメモリを調整する:
.wslconfigという設定ファイルで、WSL2が使えるメモリ量を増減できます(具体的な手順は 2.7 で扱います)。 - クラウドでハーデンする: どうしても手元のPCが非力な場合でも、第6章で扱うクラウドCI(GitHub Actions)を使えば、自分のPCではなくGitHub側のサーバーでハーデン(設計データ生成)を実行できます。これは逃げ道であると同時に、最終提出の正規ルートでもあります。
A4. キーワード予告:「ハーデン(harden)」とは何か
本章の後半(2.7)で、「ハーデン」という言葉が何度も出てきます。先にここで意味をつかんでおきましょう。
素の定義: ハーデンとは、自分が書いた設計の記述(RTL)を、工場に出せる最終データ(GDS)へ、ソフトウェアが全自動で変換する処理のことです。途中の検証(ルール違反がないか等)も自動で行われ、問題があれば止まります。実際にチップを製造するのは工場の仕事であって、ハーデンは「製造に出せるデータを作り上げるところまで」を指します。
たとえるなら: 焼き物でいえば、ハーデンは「粘土(設計の記述)から、窯に出せる図面・型紙(GDS)を一気に仕上げる工程」にあたります。実際に窯で焼いて器にするのは、別の工程(工場)です。3Dプリンタを知っている人向けに言えば、ハーデンは「STLファイルを書き出すところまで」で、印刷(製造)はその先です(この対応は 2.7 で詳しく扱います)。
ポイントは、ハーデンは「自分が手作業で配線を引く設計作業」ではなく、「データを渡して全自動変換を起動する、1つのコマンド」だということです。難しそうな響きですが、やること自体はコマンドを1つ打って待つだけです。
2.1 【Step 1】WSL2およびUbuntu 24.04 LTSの完全導入
まずはWindows側にLinux環境の土台を作ります。
- Windowsのスタートメニューを右クリックし、「ターミナル(管理者)」または「PowerShell(管理者)」を選択して起動します。一般ユーザー権限では仮想化機能の有効化ができません。
- 起動した画面に、以下のコマンドを正確に入力してEnterキーを押します。
wsl --install -d Ubuntu-24.04
※ Ubuntu 22.04でも動作しますが、現行手順は Python 3.11以降 が前提です。24.04 LTSなら標準のPythonが3.12なので確実です。22.04を使う場合はPythonのバージョンに注意してください(
python3 --versionで確認)。 - 画面に進捗が表示され、100%になるまで待ちます。完了したらPCを必ず再起動してください。再起動を行わないと、WSL2の仮想化機能が有効化されません。
- 再起動後、自動的に黒いウィンドウ(Ubuntuのセットアップ画面)が立ち上がります。指示に従ってユーザー名(例:
student)とパスワードを設定します。文字を入力しても画面には表示されませんが、内部では入力されています。
※なぜ最新の26.04ではなく、24.04 LTSを使うのか
本章の執筆時点で、Ubuntuの新しい長期サポート版である 26.04 LTS がすでにリリースされています。それでも本講座が 24.04 LTSを推奨するのには理由があります。26.04では、システムの土台部分に大きな変更が入っており、たとえば sudo や coreutils(基本コマンド群)が、従来のC言語実装からRust実装(sudo-rs / uutils)へ置き換えられているとされます。こうした基盤の入れ替えにより、半導体EDAツール群との相性は、現時点では各自で確認が必要な状況だとされています。また、24.04から26.04への直接アップグレードが正式に解禁されるのは、26.04.1 のリリース以降になる見込みです。
初学者向けの講座では、「最新版を追いかけること」よりも「実績があり、確実に動くこと」を優先したい、と本講座は考えています。半導体EDAツールでの動作実績が豊富な24.04 LTSを土台にすることで、ツール側ではなく自分の設計に集中できます。新しい環境への移行は、ひととおり通してから挑戦するのでも遅くありません。
※「管理者で開く」必要があるのは、最初のインストールのときだけ
ここで一度、混乱しやすい「権限」の話を整理しておきます。Windowsでウィンドウを「管理者として」開く必要があるのは、最初のインストール作業(この wsl --install や、次節のDocker導入)のときだけです。これ以降に出てくる apt / git / docker といったコマンドは、普通にUbuntuのターミナルを開いて実行すれば十分です。
このあと頻繁に出てくる sudo は、「Linuxの内部で、その1コマンドだけ一時的に管理者権限を借りる」仕組みです。これは Windows側でウィンドウ自体を「管理者として開く」こととは別物です。「sudo を打つこと」と「ウィンドウを管理者で開くこと」を混同しないようにすると、権限まわりで迷いにくくなります。
2.2 【Step 2】Docker Desktop for Windows の完全連携設定
次に、ツールの実行エンジンとなるDockerをWindows側に入れます。LibreLaneは内部でコンテナを起動して各EDAツールを実行するため、Dockerは必須です。
※なぜDockerを使うのか ― 「同じ道具箱」を全員に配るため
LibreLaneは、Yosys(論理合成)やOpenROAD(配置配線)など十数個のEDAツールを束ねて動かす司令塔です。これらは、それぞれ決まったバージョンの組み合わせで噛み合って、はじめて正しく動きます。もしこれらのツールを一つずつ自分でそろえようとすると、バージョンのずれやビルドの失敗が起きやすく、「先生のPCでは動くのに、自分のPCでは動かない」という状態に陥りがちです。
Dockerは、これらのツールが正しいバージョンで全部入った「封をした道具箱」(イメージ)を、そのまま全員に配る仕組みです。各自のPCで道具をそろえ直す必要がなく、誰の環境でも中身が同じになります。結果として環境固有のエラーに悩まされにくくなり、ツールの用意ではなく自分の設計に集中できます。
※入れ方は他にもあります: LibreLaneの導入方法は、公式にもいくつか用意されています(Nix、AppImageなど)。本講座では、その中でWindows 11環境でいちばん手早く動かせるDockerを使います。まず確実に動かすことを優先し、他の方式は興味が出てから各自で試せば十分です。
- Docker公式ページからインストーラーをダウンロードして実行します。インストール時のオプション画面で、「Use the WSL 2 based engine (recommended)」に必ずチェックが入っていることを確認してください。
- インストールが完了したらDocker Desktopを起動し、右上にある歯車アイコン(Settings)をクリックします。
- 左メニューから [Resources] ➔ [WSL integration] を選択します。
- 「Enable integration with my default WSL distro」にチェックを入れ、その下にある 「Ubuntu-24.04」のトグルスイッチを「ON」 にして、右下の [Apply & restart] を押します。
【補足】Ubuntuターミナルの開き方とコピペ のやり方
手順書には「Ubuntuのターミナルで次を実行」と書かれていても、そもそもどの黒い画面を開けばいいのか、コピーした手順をどう貼り付けるのかが分からず止まってしまう ― これは初学者にとても多いつまずきだと、本講座は考えています。技術的には些細に見えても、ここで止まると先に進めないので、丁寧に確認しておきます。
(1) 正しいUbuntuのターミナルを開く
- 方法A(おすすめ): スタートメニューから「ターミナル」を起動し、上部のタブの横にある下向き「∨」をクリックして、一覧から 「Ubuntu-24.04」 を選びます。
- 方法B: スタートメニューで「Ubuntu 24.04 LTS」を直接探して起動します。
(2) いま開いているのがUbuntuか、PowerShellかを見分ける
同じような黒い画面でも、中身が違うことがあります。プロンプト(入力位置の手前に出ている文字)で見分けられます。
student@PC-NAME:~$ ← 末尾が :~$ → Ubuntu(これが正解。ここで作業する) PS C:\Users\you> ← 先頭が PS、C:\... → PowerShell(場所違い。ここでは作業しない)
手順書のコマンドを打っているのに「コマンドが見つからない」と言われるときは、そもそもPowerShell側に打ち込んでしまっていることがよくあります。まずプロンプトを見て、自分が今どちらにいるかを確認してください。
(3) コピーした手順を貼り付ける
- 新しいWindows Terminal(方法A)では、貼り付けは
Ctrl + Shift + V、または右クリックです。普段のCtrl + Vとは少し違う点に注意してください。 - 旧式の黒いウィンドウ(コンソール)でうまく貼れない場合は、ウィンドウ左上のアイコンを右クリック → 「プロパティ」 → 「簡易編集モード」をオンにすると、右クリックで貼り付けられるようになります。
(4) 手順書の # で始まる行は、打ち込まなくてよい
本章のコマンド例には # で始まる行が出てきます。これは人間向けの「コメント(説明)」で、コンピュータへの命令ではありません。コピーして一緒に貼り付けても無視されますが、意味を理解する手がかりとして読んでおくと、何をしているかが分かります。
(5) 作業を始める時は、まずDocker Desktopの起動から
前節の [Apply & restart] の後、「次に何をすればいいの?」と迷いやすい場所です。結論としては、作業を始める際は、Ubuntuのターミナルを開くより先に、まずWindows側でDocker Desktopを起動しておくのが安全です。LibreLaneはDockerの上で動くため、Dockerが起きていないと後の工程で止まります。起動して少し待ち、次のコマンドで疎通を確認できます。
# Dockerがちゃんと動いているか確認(成功すれば歓迎メッセージが出る) docker run hello-world
2.3 【Step 3】WSL2内部での依存パッケージ一括導入
ここからの作業は、すべてWSL2(Ubuntu)のターミナル画面で行います。以下のコマンドを1行ずつ実行してください。
# 1. パッケージリストを更新し、古いコンポーネントを一括アップデート sudo apt update && sudo apt upgrade -y # 2. 設計管理に必須のGit、Python3、仮想環境生成パッケージ、ビルド用基本ツール、 # およびハーデンのPNG出力で必要になる cairo ライブラリを導入 sudo apt install -y git python3 python3-pip python3-venv build-essential libcairo2 libcairo2-dev # 3. WSL2内のLinuxユーザーが、管理者権限なしでDockerを操作できるように権限を付与 sudo usermod -aG docker $USER # 4. 上記の権限変更をシステムに反映させるため、一度セッションを閉じます exit
※最重要:libcairo2 を必ず入れておく(後でハーデンが止まるのを防ぐ)
上の手順2に libcairo2(および libcairo2-dev)を加えてあります。これは執筆者が実際に詰まった箇所への対策です。ハーデンの途中で、できあがったレイアウトをPNG画像として書き出す処理があり、そこで libcairo.so.2 というライブラリが必要になります。これが入っていないと、ハーデンの終盤で次のようなエラーが出て止まってしまいます。
OSError: no library called "cairo-2" was found
環境構築の段階でここを入れておけば、2.7のハーデンでこのエラーに遭わずに済みます。先回りの一手として、必ず含めておくことを本講座はおすすめします。
※「実行するとこうなる」 ― 画面の見え方と完了の合図
- 所要時間:
apt update && upgradeは、回線やマシンによって数分〜十数分かかります。文字がどんどん流れている間は正常に進行中で、固まっているわけではありません。 - 途中で紫色の画面が出たら: サービスの再起動や設定ファイルの差し替えを確認する画面です。特にこだわりがなければ、既定の選択のまま Enter で進めて問題ありません。
- 完了の合図: 文字の流れが止まり、プロンプトが
...:~$に戻ってカーソルが点滅したら、そのコマンドは完了です。 exitでウィンドウが閉じるのは正常: 手順4のexitでウィンドウが閉じるのは、そういう手順だからです。閉じたら、もう一度「Ubuntu 24.04 LTS」を開き直してください(次に説明します)。
※注意: ウィンドウが一度閉じますので、もう一度スタートメニューから「Ubuntu 24.04 LTS」を起動して新しいウィンドウを開いてください。
新しく開いたUbuntuの画面で、まずPythonのバージョンとDockerの動作を確認します。
# いま自分がどこにいるか(カレントディレクトリ)を確認 pwd # Pythonが3.11以降であることを確認(現行フローの前提条件) python3 --version # Dockerの動作テスト docker run hello-world
Dockerのテストで画面に Hello from Docker! ... と出力されれば成功です。
※「いま、どこにいる?」が分からなくなったら pwd
作業中に「自分がどのフォルダにいるのか」が分からなくなったら、pwd(print working directory)と打てば、現在地が表示されます。また、プロンプトの $ の直前に出ている文字(例:~ はホームフォルダ)も、今いる場所を表しています。場所を間違えるとコマンドが意図通りに動かないので、迷ったら pwd で確認する習慣をつけると安心です。
※ sudo のパスワードは、打っても画面に表示されない
sudo を使うとパスワードを求められますが、入力しても画面には何も表示されません(* すら出ません)。これは故障ではなく、セキュリティ上わざとそうなっています。見えなくても入力はされているので、そのまま打って Enter を押してください。また、途中で [Y/n] と聞かれたら、基本は y と入力して Enter で進めます。
2.4 【Step 4】公式プロジェクトテンプレートの取得と tt-support-tools の配置
現行フローでは、(1) プロジェクトのテンプレートを取得し、(2) その中に「Tiny Tapeoutのビルドツール群(tt-support-tools)」を tt/ というサブディレクトリとしてクローンします。本章では、公式ガイドが採用しているサンプル(ttsky25b-factory-test)をそのまま使って環境を検証します。
※テンプレートについて: 自分で新しいプロジェクトを始める場合は ttsky-verilog-template を使います(第3章以降で扱います)。本章ではまず「確実に通る既知のサンプル」で環境を固めるため、公式ガイドと同じ factory-test を使います。なお、旧版で使われていた tt09-verilog-template は世代が古いため、新規設計には現行シャトル ttsky25b 系を使ってください。
# 1. 公式ガイドのサンプルプロジェクトをホームディレクトリにクローン git clone https://github.com/TinyTapeout/ttsky25b-factory-test ~/factory-test # 2. プロジェクト内に入り、ビルドツール tt-support-tools を tt/ ディレクトリとしてクローン cd ~/factory-test git clone https://github.com/TinyTapeout/tt-support-tools tt
※ mkdir は不要 ― git clone がフォルダ作成も兼ねている
上のコマンド1の末尾にある ~/factory-test は、「クローンしたものを置く先のフォルダ名」です。git clone は、このフォルダを自動で新規作成してから中身を取得します。あらかじめ mkdir ~/factory-test でフォルダを作っておく必要はありません(むしろ先に作って中身があると、エラーになることがあります)。「フォルダ作成」と「取得」が1コマンドで同時に行われている、と捉えてください。
※「サンプル」と「テンプレート」は何が違うのか(たとえ話)
ここで2つの似た言葉が出てきます。混同しやすいので、焼き物にたとえて整理します。
factory-test(本章で使うサンプル)=「焼く前の完成模型(動作確認用の見本)」。 すでに正しく作られていて、確実に最後まで通ることが分かっている見本です。本章では、これを実際に焼いて(ハーデンして)、自分の窯(環境)がちゃんと動くかを確かめます。中身を自分で作るのではなく、「確実に通るもので、環境そのものを検証する」のが目的です。ttsky-verilog-template(第3章以降で使う雛形)=「新規設計用の、空の成形台」。 こちらは中身が空っぽで、これから自分の設計(Verilog)を流し込むための土台です。自分のチップを作り始めるのは、この上で行います(第3章以降)。
つまり本章は「空の成形台に自分の作品を作る」前に、「確実に通る見本で窯の火入れを確かめる」段階です。まず見本で環境を固め、それから自分の設計へ進む、という順番だと考えてください。
2.5 【Step 5】Python仮想環境の作成と依存パッケージの導入
専用の隔離されたPython仮想環境(venv)を作り、ビルドツールが要求するパッケージ群を導入します。
# 1. 仮想環境専用のディレクトリを作成して初期化 mkdir ~/ttsetup python3 -m venv ~/ttsetup/venv # 2. 仮想環境を有効化(成功するとプロンプトの左端に (venv) と表示されます) source ~/ttsetup/venv/bin/activate # 3. tt-support-tools が要求する依存パッケージを一括インストール pip install -r ~/factory-test/tt/requirements.txt
※ pip install の前に、必ず左端の (venv) を確認する
仮想環境(venv)は、このプロジェクト専用の「隔離された作業部屋」です。これを有効にしないまま pip install を実行すると、パッケージがシステム全体の方に入ってしまい、あとで他の作業と衝突するなど、やっかいなことになりがちです。
有効になっているかどうかは、プロンプトの左端に (venv) と表示されているかで見分けます。
(venv) student@PC:~/factory-test$ ← 左端に (venv) あり → 正しい(この状態で pip する) student@PC:~/factory-test$ ← (venv) なし → 無効。先に下のコマンドで戻す
もし (venv) が消えていたら(ウィンドウを開き直したときなど)、次のコマンドでもう一度有効化してから pip を実行してください。
source ~/ttsetup/venv/bin/activate
2.6 【Step 6】環境変数の設定とLibreLaneのインストール
使用するPDK(プロセス設計キット)とLibreLane本体のバージョンを環境変数で指定し、LibreLaneをインストールします。本講座ではSkyWater 130nm(sky130A)を使います。
# 1. PDKの格納先・種類・LibreLaneのバージョンを指定(SkyWater 130nm の場合) export PDK_ROOT=~/ttsetup/pdk export PDK=sky130A export LIBRELANE_TAG=3.0.3 # 2. 指定したバージョンのLibreLane本体をインストール pip install librelane==$LIBRELANE_TAG
※「LibreLane」とは: 旧称 OpenLane 2 がリネームされたもので、Yosys(論理合成)・OpenROAD(配置配線)・Magic/Netgen(物理検証)といったオープンソースEDAツール群を1本のフローとして束ねる司令塔です。Pythonモジュールとして提供され、内部でDockerコンテナを起動して各ツールを実行します。
※ どうして tt ばかり打って、librelane を打たないのか ― 親子関係の整理
このあと作業を進めると、コマンドはほとんど ./tt/tt_tool.py ... ばかりで、librelane という文字を直接打つ場面が出てきません。「さっきインストールしたLibreLaneは、いつ使うの?」と疑問に思うかもしれません。これは執筆者自身が抱いた疑問でもあります。答えは、両者が「本体エンジン」と「運転席」の親子関係になっているからです。
あなたが打つコマンド
│
▼
┌──────────────────────────┐
│ tt(tt-support-tools) │ ← 運転席。TinyTapeout用に呼びやすくした窓口
│ ./tt/tt_tool.py --harden│
└────────────┬─────────────┘
│ 内部で呼び出す
▼
┌──────────────────────────┐
│ librelane(本体エンジン)│ ← 物理設計を実際に動かす中身(pipで入れたもの)
│ Yosys / OpenROAD / ... │
└──────────────────────────┘
librelane= 物理設計を実際に実行するエンジン本体。これが各EDAツール(Yosysなど)を動かします。tt(tt-support-tools) = そのエンジンを、Tiny Tapeout用に呼びやすくした運転席。あなたは./tt/tt_tool.py ...という運転席のコマンドを打ち、その裏でlibrelaneが動きます。
つまり、「librelane」という文字を直接入力するのは、この pip install の一回だけです。以降は運転席(tt)を通して操作するので、librelane と打たないのが正常です。
※ export した設定は、ウィンドウを閉じると消える
手順1の export で設定した3つの環境変数(PDK_ROOT / PDK / LIBRELANE_TAG)は、そのウィンドウを閉じると消えてしまいます。そのため、日をまたいで作業を再開するときは、もう一度 export を打ち直す必要があります。これは仕様であって故障ではありません。再開時に何を打ち直せばよいかは、本章の最後(2.9「作業の中断と再開」)にチェックリストとしてまとめてあるので、そちらを使ってください。
※バージョンについて: PDK や LIBRELANE_TAG の最新の推奨値は将来変わる可能性があります。最新値は公式の tt-gds-action の action.yml(librelane-version の default 値)で確認できます。
2.7 【Step 7】サンプル設計のハードニング(Smoke Test)
環境構築の最終仕上げとして、サンプル設計を実際にハードニング(RTL→GDSII変換)します。必ず (venv) が表示され、かつ 2.6 の環境変数が設定済みの状態で、プロジェクトのルートに移動してから実行してください。
※もう一度「ハーデン」とは ― 取り違えやすい一線を確認する
2.0のA4で予告したとおり、ハーデンとは「自分が書いた設計の記述(RTL)を、工場に出せる最終データ(GDS)へ、ソフトウェアが全自動で変換する処理」です。変換の途中で検証も自動で行われ、ルール違反があれば止まります。実際の製造(シリコンに焼く工程)は工場の仕事であり、ハーデンが受け持つのは「製造に出せるデータを作り上げるところまで」です。
比喩で取り違えやすい一線があるので、表で整理します。
実体 焼き物 3Dプリンタ ─────────────────────────────────────────────────────────── RTL(Verilog) やわらかい粘土 作りたい物のアイデア サンプル設計 焼く前の完成模型 完成済みCADモデル LibreLane+PDK 窯 + 窯の規格 CAD/スライサ + プリンタ仕様 ★ハーデン 図面を仕上げる処理 ★STLを書き出すまでの全自動処理 ★GDS(最終データ) 器を作る型紙/図面 ★STLファイル 製造(工場) 実際に焼いて器に 実際に積層印刷して物体化
※3Dプリンタ経験者は、ここで誤解しやすいので注意: 半導体のハーデンは、3Dプリンタでいう「STLファイルを書き出すところまで(スライスより前)」に相当します。スライスや実際の印刷(=製造)は、工場側の工程です。「ハーデン=印刷」ではない点に気をつけてください。
比喩がしっくりこない場合は、素の定義だけ覚えれば十分です ― ハーデンは「データを渡して全自動変換を起動する1コマンド」であって、自分が手で配線を引く作業ではない、ということです。
# プロジェクトのルートに移動 cd ~/factory-test # 1. LibreLane用の設定ファイルを生成 ./tt/tt_tool.py --create-user-config # 2. ローカルでハードニングを実行(Dockerが起動している必要があります) ./tt/tt_tool.py --harden # 3. 合成・クロックに関する警告がないかをチェック(推奨) ./tt/tt_tool.py --print-warnings
※コマンドの順番には意味がある ― --create-user-config を先に
手順1の --create-user-config は、ハーデンに必要な設定ファイル(src/user_config.json)を生成するステップです。これを飛ばして、いきなり手順2の --harden を実行すると、設定ファイルが見つからず、次のようなエラーで止まります。
ConfigFileError: Could not find configuration file src/user_config.{json}
必ず「設定ファイルを作る(手順1)→ ハーデンする(手順2)」の順で実行してください。設定を作り直したいときも、まず手順1からやり直します。
※「実行の合図」 ― 待ち時間と、やってはいけないこと
- 初回は時間がかかる: 最初のハーデンでは、必要なDockerイメージのダウンロード(サイズが大きい)が走るため、数分〜十数分かかることがあります。2回目以降はキャッシュされるので、このダウンロードは不要になり、速くなります。
- 流れていれば正常:
[INFO]から始まるログが次々に流れている間は、正常に処理中です。止まっているわけではありません。 - やってはいけないこと: 完了するまで、
Ctrl + Cで止めない/Docker Desktopを終了しない/ターミナルのウィンドウを閉じないでください。途中で中断すると、最初からやり直しになります。 - 完了の合図:
Flow completeのような完了表示が出て、プロンプトが戻ってくれば成功です。成果物はruns/wokwi/...以下に生成されます。
コンテナが自動起動し、内部でフローの各ステップ(論理合成→フロアプラン→配置→クロックツリー合成→配線→物理検証)が順に進みます。最終的にエラーなく完了し、runs/ 以下に成果物が生成されれば成功です。
[INFO] Synthesis (Yosys) ... <-- RTLを論理ゲートへ変換 [INFO] Floorplan (OpenROAD) ... <-- チップ外形・電源格子を配置 [INFO] Placement (OpenROAD) ... <-- 標準セルを自動敷き詰め [INFO] Clock Tree Synthesis (OpenROAD) ... <-- クロック遅延を均等化 [INFO] Routing (OpenROAD) ... <-- 金属層で自動3次元配線 [INFO] Sign-off: DRC (Magic) / LVS (Netgen) ... <-- 物理検証 [INFO] Flow complete.
※上記は流れを示す模式的な表示です。実際のログの文言・ステップ名・順序は、LibreLaneやtt-support-toolsのバージョンによって異なります。実物のログをそのまま正としてください。
もしメモリ不足で止まったら ― WSL2でのメモリの増やし方
大きな設計(とくに第5章のRISC-Vコア)では、ハーデン中のメモリ消費が増え、途中で止まることがあります。ここで注意したいのは、WSL2を使う本構成では、メモリの調整は「Docker Desktopの設定」ではなく「WSL2側の設定(.wslconfig)」で行うという点です。
※よくある誤解: 「Docker Desktopの設定画面にメモリのスライダーが出てこない/動かしても効かない」という声がありますが、WSL2バックエンドではスライダーが出ない・効かないのが正常です。Dockerが使えるメモリは、WSL2に割り当てられたメモリで決まるためです。
手順は次のとおりです。まず、いま使えるメモリ量を確認します。
# Ubuntu(WSL2)側で、使えるメモリの合計を確認(Mem: 行の total を見る) free -h
total が十分(たとえば16GiB前後以上)あるなら、この調整は不要です。4GiB未満など明らかに少ないときだけ、次の調整を行います。Windowsのユーザーフォルダ(%UserProfile%、たとえば C:\Users\あなたの名前)に .wslconfig というファイルを作り、次の内容を書きます。
[wsl2] memory=8GB processors=4
保存したら、PowerShell(管理者でなくてよい)で一度WSL2を停止し、Ubuntuを開き直して反映を確認します。
# PowerShellでWSL2をいったん停止(次にUbuntuを開くと新しい設定で起動する) wsl --shutdown
# Ubuntuを開き直して、割り当てが反映されたか確認 free -h
Windowsの物理メモリ総量そのものを確認したいときは、PowerShellで次を使うのが確実です。
# 物理メモリ総量をGB単位で表示(確実に動く方法) (Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB
※日本語版Windowsでは、systeminfo | findstr /C:"Total Physical Memory" は項目名が日本語のため空になることがあります。findstr /C:"物理メモリ" も版によっては空になる場合があるため、上記の Get-CimInstance を使うのが確実です。
※「十分積んでいれば、この調整は不要」: 参考までに、執筆者の環境では物理メモリ96GB・WSL2への割り当て46GBで、メモリ対策は不要でした。free -h で total に余裕があれば、.wslconfig はそもそも作らなくて構いません。逆に言えば、困ったときだけ開く逃げ道として覚えておけば十分です。
2.8 【演習】生成された成果物構造の探検
ハードニングが完了すると、成果物は runs/<RUN_TAG>/ 以下に生成されます。Tiny Tapeoutのフローでは、この RUN_TAG は既定で wokwi です(プロジェクトの由来に関係なくこの名前が使われます)。中身を確認してみましょう。
# 実行結果のルートを確認 ls -la ./runs/wokwi/ # 最終GDS(製造に送られる最終形状データ)を確認 ls -la ./runs/wokwi/final/gds/ # ゲートレベル・ネットリスト(電源ピン付き)を確認 ls -la ./runs/wokwi/final/pnl/
runs/wokwi/final/gds/: 本物のシリコンに焼き付けるための最終形状データ(.gds完成品)が格納されています。runs/wokwi/final/pnl/: 電源ピン付きゲートレベル・ネットリスト(*.pnl.v)。ゲートレベル・シミュレーションで使います。runs/wokwi/<各ステップのサブフォルダ>/: タイミング解析や面積などのレポートは、各フローステップごとのサブフォルダ(例:STA関連のステップ)に分散して出力されます。レポートの正確な所在は第4章で扱います。
※ runs/wokwi/ 直下の連番フォルダは「フローの足跡」
runs/wokwi/ の直下を覗くと、01-... 02-... 05-... のように番号の付いたフォルダがたくさん(おおむね70〜80個ほど)並んでいます。これはフローが順番に実行した、各ステップの作業記録(足跡)です。順調に通ったときに「中で何が起きていたのか」を、ここで一度見ておくと、自分の設計でつまずいたときの「正常な状態との比較対象」になります。
runs/wokwi/
├─ 01-verilator-lint/ ← Verilogの文法チェックの記録
├─ 02-checker-.../ ← 各種チェックの記録
├─ 05-yosys-.../ ← 論理合成(Yosys)の記録
├─ ...(合成→配置→CTS→配線→検証 と続く)...
└─ final/ ← 最終成果物(gds / pnl)
├─ gds/ → 製造用の最終データ(.gds)
└─ pnl/ → 電源ピン付きネットリスト(.pnl.v)
※「工程 → 転ぶときの症状 → 直し方」の早見表(自分の設計を直すための地図)
本章のサンプルはエラーなく通りますが、第3章以降で自分の設計を流すと、どこかの工程で止まることがあります。そのとき、どの工程で止まったかが分かれば、原因の見当がつきます。詳しい対処は第4章・第7章で扱いますが、地図として先に俯瞰しておきます。
工程(止まる場所) 転ぶときの典型的な症状 直し方の方向 ────────────────────────────────────────────────────────────────────────── lint(Verilator) 文法の書き間違い Verilog記述を直す yosys(論理合成) 回路として成立しない論理 記述の論理を見直す Placement / Congestion 配置が密すぎて配線できない 密度を下げる(PL_TARGET_DENSITY_PCT) STA / slack クロックに間に合わない クロック周期を緩める DRC・LVS ルール違反/接続の不一致 該当箇所を修正する 全工程パス (成功) final/gds/ にGDSが出る
※旧版からの主な変更点(要点): 旧 runs/tt_top/results/final/gds/ という固定パスは現行版には存在しません。現行では runs/wokwi/final/... 配下に成果物がまとまります。レポートも reports/ 直下ではなく各ステップフォルダに分かれます。
※GUIで眺めるときの注意: KLayoutなどのGUIを起動すると、初回は表示までに1〜2分かかることがあります。無反応に見えても Ctrl + C で止めないでください(止めてもGDS自体には影響しませんが、起動し直しになります)。WSLでGUIが開かない場合の補足(WSLgや xhost +local:docker)は、第4章・第6章で扱います。
2.9 作業の中断と再開 ― 続きをやるときの「3点おまじない」
環境構築やハーデンは時間がかかるため、「今日はここまで」と中断したり、別の日に再開したりすることが必ずあります。ここでつまずく人が多いので、安全な止め方と、再開のやり方を独立した節としてまとめておきます。
(1) 安全な止め方
- 基本は、完走を待つ。 ハーデンが走っている最中は、できるだけ最後まで待つのが安全です。
- どうしても止めたいときだけ
Ctrl + C。 中途半端なrunsが残ることがありますが、もう一度ハーデンし直せば上書きされるので、致命的ではありません。
(2) 一日の終わり方
作業を終えるときは、ウィンドウを閉じる/PCを落とすだけで構いません。作成済みのGDS(runs/wokwi/...)は、ディスク上に残っているので消えません。安心して終了してください。
(3) 再開チェックリスト(毎回これをやる)
別の日に再開するときは、次の5つを順に行います。venvと export はウィンドウを閉じると消えるため、毎回これが必要になります。
# ① まずWindows側でDocker Desktopを起動しておく(最初に) # ② プロジェクトのフォルダへ移動 cd ~/factory-test # ③ 仮想環境を有効化(左端に (venv) が出ることを確認) source ~/ttsetup/venv/bin/activate # ④ 環境変数3行を再投入(export はウィンドウを閉じると消えるため) export PDK_ROOT=~/ttsetup/pdk export PDK=sky130A export LIBRELANE_TAG=3.0.3 # ⑤ Dockerが動いているか疎通確認 docker run hello-world
※なぜ毎回必要なのか: 仮想環境(venv)と export した環境変数は、ウィンドウを閉じると消える性質があるためです。毎回打ち直すのが面倒なら、~/.bashrc に書いておけば自動で読み込ませることもできます(任意・上級者向け。慣れてからで構いません)。
※各章共通の「入口チェック」3点おまじない
本章にかぎらず、作業を始める前に次の3つを確認しておくと、迷子になりにくくなります。執筆者自身が「毎回これを確認するのが必須」と感じた、いわば入口の合言葉です。
pwd # ① 今どこにいる?(場所の確認)
# ② → (venv) が左端に出ているか?(仮想環境の確認)
echo $LIBRELANE_TAG # ③ 3.0.3 と表示されるか?(環境変数の確認)
① 場所、② 仮想環境、③ 環境変数 ― この3点がそろっていれば、たいていの「なぜか動かない」は未然に防げます。