第6章:物理検証とテープアウト・実ボード展開(サインオフと実証)
本章は設計プロセスの最終防衛線です。LibreLaneが出力した完成データ(GDSII)が、工場の物理ルールを満たしているかを検証する「サインオフ(承認)」を行います。さらに、GitHubと連携したテープアウトの手順、そして実チップが届いた後のWiFi周辺機器拡張プランまでを解説します。
※本章は現行版(ttsky25b / LibreLane 3.0.3)に準拠して改訂しています。 成果物パスは runs/wokwi/final/... です。
6.1 【前提】DRC・LVSはLibreLaneフロー内で自動実行される
LibreLane(OpenLane 2系)のフローは、配置配線のあとにサインオフDRC(Magic/KLayout)とLVS(Netgen)を自動で実行します。つまり、ハードニングが最後まで完走した時点で、これらの物理検証はフローの一部として済んでいます。本節では、その結果を「自分の目で確認する」方法を学びます。
6.2 【Step 1】MagicツールによるGDSIIレイアウトの目視確認
自動配置配線が成功したレイアウトデータを、半導体業界標準のエディタであるMagicで開いて眺めてみます。Tiny TapeoutのツールにはGUIを開くショートカットが用意されています。WSLでGUIが開かない場合は、先に xhost +local:docker を実行してください。
# Tiny Tapeoutのツール経由でKLayout/OpenROAD GUIを開く(推奨) ./tt/tt_tool.py --open-in-klayout # または ./tt/tt_tool.py --open-in-openroad
Magicを直接使ってGDSを開く場合は、最終GDSのパスを指定します。現行フローでは最終GDSは runs/wokwi/final/gds/ に出力されます(ファイル名はトップモジュール名)。
# 最終GDSをMagicで開く例(PDK_ROOT が設定済みであること)
magic -T $PDK_ROOT/sky130A/libs.tech/magic/sky130A.tech \
runs/wokwi/final/gds/tt_um_riscv_soc.gds
※旧版の runs/tt_top/final/gds/... というパスは現行版には存在しません。runs/wokwi/final/gds/ が正しい場所です。また magic -T sky130A ... のようにtechを名前だけで渡す書き方は環境依存なので、上記のようにPDK内のtechファイルをフルパスで指定するのが確実です。GUIで眺めるだけなら --open-in-klayout が最も手軽です。
6.3 【Step 2】DRC(デザインルールチェック)結果の確認
DRC(Design Rule Check)は、配線幅・間隔・層の重なりなどが工場の製造ルールを守っているかの検査です。LibreLaneフローが完走していれば、サインオフDRCは実行済みです。違反があればフローが警告・停止するため、最後まで完走した=DRCを通過したと考えてよいですが、念のためレポートを確認します。
# DRC関連レポートを探す例 find runs/wokwi -iname "*drc*"
DRCレポートに違反件数 0(またはエラーなし)と記録されていれば、製造ルール上の問題はクリアです。
6.4 【Step 3】NetgenによるLVS(回路図対レイアウト一致検証)
LVS(Layout Versus Schematic)は電気的な接続のチェックです。「合成で作られたネットリスト(あるべき回路)」と「レイアウトから抽出した接続(実際にできた回路)」を比較し、一致するかを検証します。これもフロー内で自動実行されます。
# LVS関連レポートを探す例 find runs/wokwi -iname "*lvs*"
LVSレポートの最終行に、両者が一致した旨のメッセージ(例:Circuits match uniquely.)が記録されていることを確認します。
※具体的なメッセージ文言はNetgen/LibreLaneのバージョンで異なります。「ミスマッチ0」「uniquely matched」といった一致を示す結論行を確認してください。これが確認できれば物理検証のサインオフは完了です。
6.5 【Step 4】GitHub Actions CIを用いたテープアウト提出
Tiny Tapeoutの大きな利点は、製造データの提出が「GitHubリポジトリへのプッシュ → CIによる自動ハードニング」で完結する点です。ローカルで設計を固めたら、それを自分のGitHubリポジトリに反映します。
- 新規プロジェクトは、現行シャトル用のテンプレート
ttsky-verilog-templateを「Use this template」から自分のリポジトリとして作成し、そこに設計(src/のVerilogとinfo.yaml)を入れるのが基本です。※旧版にあった
tt09-verilog-templateは世代が古いため、新規提出には使いません。提出先シャトル(例:ttsky26aなど)に対応した最新テンプレートを使ってください。締め切りや対象シャトルは公式サイトで要確認です。 - 作成・編集したファイルをコミットします。
git add src/ info.yaml git commit -m "Complete RISC-V SoC design (local DRC/LVS clean)"
- 自分のリモートリポジトリ(GitHub)へプッシュします。
git push origin main
- ブラウザで自分のGitHubリポジトリを開き、[Actions] タブをクリックします。クラウド上のCI(
tt-gds-action、内部でLibreLaneを使用)が自動的に起動し、論理合成・配置配線・物理検証(DRC/LVS)を再実行します。 - すべてのジョブが緑のチェック(成功)になり、GDSが生成されれば、ローカルと同じ結果がCIで再現できたことになります。あとは公式サイトの案内に従い、対象シャトルへ提出します(提出フォーム/登録手順はシャトルごとに公式ページで確認)。
※「プッシュするだけで自動的にシャトルへマージされる」わけではありません。CIでGDSが正しく生成されることを確認したうえで、公式の提出手続き(対象シャトルへのサブミット)を行う必要があります。
6.6 【Step 5】実チップの到着と外部WiFiドングル(ESP32)拡張計画
提出・製造を経て数ヶ月後、自分のRISC-V CPUが刻まれたシリコンダイが評価用ボードに載った状態で届きます。
- デモボードでの基本Lチカ検証: ボードをPCとUSBで接続し、リセット(
rst_n)を解除します。SoC内のRISC-Vコアが動き出し、アドレス0x4000_0000のレジスタを叩いて、ボード上の物理LEDが点滅することを確認します。 - WiFiモジュールによるIoT拡張: 双方向ピン(
uio)のうち数ビットをSPI通信ポートとして再定義し、外部の安価なWiFiモジュール(ESP32マイコンボードなど)の通信ピンへ接続します。自作RISC-V CPUからSPI経由で通信要求を送り、ESP32に無線LANの処理を肩代わりさせることで、インターネットから受信したデータでLEDの点滅パターンを変えるといった、「インターネット接続型オリジナルRISC-V IoTボード」へと発展させられます。
※Tiny TapeoutのGPIO(ui_in/uo_out/uio)の電気的仕様(電圧・駆動能力・タイミング)には制約があります。外部モジュールと接続する際は、公式の GPIO仕様 とレベル変換の要否を必ず確認してください。