← 講義ポータルへ戻る 第3回演習:環境構築・Smoke Test

第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 tinytapeouttt harden という単独コマンドは現在のフローには存在しません。本章の手順は、公式ガイド Hardening Tiny Tapeout Projects Locally に対応しています。

2.0 はじめに ― この章の歩き方と準備

環境構築は、本講座の中で最もつまずきやすい場所だと、本講座は考えています。ツールが多く、待ち時間も長く、エラーメッセージも英語で出ます。そこで本節では、手を動かす前に「どこまでを本章で扱うか」「詰まったときにどう動くか」「自分のPCで足りるか」を先に整理しておきます。ここを読んでおくと、このあとの作業で迷子になりにくくなります。

A1. この章で扱うこと・扱わないこと(スコープ)

本章の目的は、「LibreLaneで実際にチップ設計データ(GDS)をまず作れる環境」を整えることです。LinuxやDockerそのものの詳しい使い方(コマンド体系やコンテナの仕組み)は、それだけで一冊の本になる広い分野なので、本章では必要最小限のコマンドだけを、その都度示します。LinuxやDockerを基礎から学びたい場合は、別途の入門教材を併用することを本講座はおすすめします。本章は「全部を理解してから進む」のではなく「まず動かして、必要なところだけ後から深掘りする」という進め方を採ります。

A2. 困ったときの歩き方(エラーが出たら、ここに戻る)

環境構築では、ほぼ必ずどこかでエラーが出ます。エラーは失敗ではなく、次の一手を教えてくれる手がかりだと考えてください。詰まったときは、次の順番で動くと立て直しやすいです。

  1. エラーの「一行目」と「最後の数行」をまず読む。 長い英語のログでも、原因は最初と最後に出ていることが多いです。途中の大量の行は、いったん飛ばして構いません。
  2. その画面(エラー文)を、そのままAIに貼って聞く。 「このエラーの原因と対処を教えて」と尋ねれば、当たりをつけられます。エラー文は省略せず、出たまま貼るのがコツです。
  3. AIの答えは、公式ドキュメントと照らし合わせてから実行する。 AIの回答は便利ですが、古い手順や別バージョンの話が混じることがあります。AIによっても、回答精度にばらつきがあります。コマンドを実行する前に、公式ガイドの記述と見比べて、食い違っていないか確認してから動かすのが安全です。
  4. 環境は、多くの場合フォルダを消せばやり直せる。 本章で作るものの大半は「ホームディレクトリの下のフォルダ」と「やり直せる設定」です。壊しても作り直せるので、怖がりすぎる必要はありません(消す前に、自分で書いたファイルだけは退避しておくと安心です)。

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環境の土台を作ります。

  1. Windowsのスタートメニューを右クリックし、「ターミナル(管理者)」または「PowerShell(管理者)」を選択して起動します。一般ユーザー権限では仮想化機能の有効化ができません。
  2. 起動した画面に、以下のコマンドを正確に入力してEnterキーを押します。
    wsl --install -d Ubuntu-24.04

    ※ Ubuntu 22.04でも動作しますが、現行手順は Python 3.11以降 が前提です。24.04 LTSなら標準のPythonが3.12なので確実です。22.04を使う場合はPythonのバージョンに注意してください(python3 --versionで確認)。

  3. 画面に進捗が表示され、100%になるまで待ちます。完了したらPCを必ず再起動してください。再起動を行わないと、WSL2の仮想化機能が有効化されません。
  4. 再起動後、自動的に黒いウィンドウ(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を使います。まず確実に動かすことを優先し、他の方式は興味が出てから各自で試せば十分です。

  1. Docker公式ページからインストーラーをダウンロードして実行します。インストール時のオプション画面で、「Use the WSL 2 based engine (recommended)」に必ずチェックが入っていることを確認してください。
  2. インストールが完了したらDocker Desktopを起動し、右上にある歯車アイコン(Settings)をクリックします。
  3. 左メニューから [Resources][WSL integration] を選択します。
  4. 「Enable integration with my default WSL distro」にチェックを入れ、その下にある 「Ubuntu-24.04」のトグルスイッチを「ON」 にして、右下の [Apply & restart] を押します。

【補足】Ubuntuターミナルの開き方とコピペ のやり方

手順書には「Ubuntuのターミナルで次を実行」と書かれていても、そもそもどの黒い画面を開けばいいのか、コピーした手順をどう貼り付けるのかが分からず止まってしまう ― これは初学者にとても多いつまずきだと、本講座は考えています。技術的には些細に見えても、ここで止まると先に進めないので、丁寧に確認しておきます。

(1) 正しいUbuntuのターミナルを開く

(2) いま開いているのがUbuntuか、PowerShellかを見分ける

同じような黒い画面でも、中身が違うことがあります。プロンプト(入力位置の手前に出ている文字)で見分けられます。

  student@PC-NAME:~$            ← 末尾が :~$  → Ubuntu(これが正解。ここで作業する)

  PS C:\Users\you>             ← 先頭が PS、C:\... → PowerShell(場所違い。ここでは作業しない)

手順書のコマンドを打っているのに「コマンドが見つからない」と言われるときは、そもそもPowerShell側に打ち込んでしまっていることがよくあります。まずプロンプトを見て、自分が今どちらにいるかを確認してください。

(3) コピーした手順を貼り付ける

(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「作業の中断と再開」)にチェックリストとしてまとめてあるので、そちらを使ってください。

※バージョンについて: PDKLIBRELANE_TAG の最新の推奨値は将来変わる可能性があります。最新値は公式の tt-gds-action の action.ymllibrelane-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 -htotal に余裕があれば、.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/ 直下の連番フォルダは「フローの足跡」

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) 安全な止め方

(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点がそろっていれば、たいていの「なぜか動かない」は未然に防げます。