0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude に非同期 I2C 回路を実装させてみる(コンプリート編)

0
Last updated at Posted at 2026-08-26

AIで半導体回路設計・第二弾(コンプリート編)

夏休みの宿題「AIで回路設計・第二弾」として、Open-Source TR-1um を使った OpenSUSI-MPW サービスでも実装できそうなロジック回路として、非同期 I2C 回路を Claude に実装させてみました。

仕様書からVerilogシミュレーションまで進めたが、配置配線でスタセルの改良が必要で敗退した白旗編、 TR-1um のスタセルを作り直すことで P&R を収束させたリベンジ編に続くシリーズ第3弾です。

今回は、仕様書>Verilog>NET>配置配線>トップブロック配線まで完成させてみます。また、並行して NET>SPICE file を作成してLVSでの物理検証も Claude君と試します。何処までできますか。。。

See https://github.com/jun1okamura/TR-1um_Async_I2C

すべての試行錯誤は、GitHub に記録されています。ご参考まで。

ヒステリシス・バッファーの追加

I2C は、2線のインターフェースで、抵抗PULLアップされたデータラインを使って、Slave/Master間で半二重通信をします。この為にデータ線の容量をインピーダンスが割と高い(〜KΩ)PULLアップ抵抗でドライブすることから、信号がなまります。これにノイズが乗るとご動作を起こすことから、SCL及びSDAの信号の初段にヒステリシス・バッファーを追加しました。回路図とレイアウトは以下のようなものです(これは私が設計しました)。

Screenshot 2026-08-26 at 10.09.04.png
Screenshot 2026-08-26 at 10.09.25.png

Claude君に BUFTH を SLC/SDA の入力信号に挿入してNETを作り直してもらいます。その後 iverilog で動作検証します。

配置配線

BUFTHが新たに挿入されたので、もう一度配置配線をやり直します。

  • step1_tap_power_mesh: VDD/GND用のTAPパワーメッシュ(3列×5チャネル)を配置。信号配線はまだ無し。

Screenshot 2026-08-24 at 10.23.43.png

  • step2_pass0_per_row_local: RSTB1/RSTB2/addr_okなど7ネットの行ローカルトランク+スパイン配線(隣接行間を専用トラックで接続)。

Screenshot 2026-08-24 at 10.24.04.png

  • step3_pass1_high_fo_row_only_adjacent: 高ファンアウト2ネット、行内完結ネット、隣接チャネルペアネットを配線。

Screenshot 2026-08-24 at 10.24.23.png

  • step4_pass2_spanning: 複数チャネルをまたぐスパニングネット10本を配線(行クロス処理)。

Screenshot 2026-08-24 at 10.25.02.png

  • step5_pass3_force_jog_nets: FORCE_JOG_NETS(15ネット)のライブ衝突チェック付き最終配線。

Screenshot 2026-08-24 at 10.24.43.png

  • step6 トップのPINの配線を BBOX 外周まで延長して PIN をつけます。

Screenshot 2026-08-24 at 10.25.17.png

  • step7 空の配線チャネル領域をY方向に圧縮します。

Screenshot 2026-08-24 at 10.25.36.png

LVS

DRC Clean を確認後に、NET から spice ファイルを作り LVS を通します。標準の LVS だと STDCELL のポートオーダが厳格なので、LVS runset を修正します。

Screenshot 2026-08-26 at 10.47.32.png

GPIO

フレームにGPIOのドライブ回路を追加します。ESDデバイスをドライバーに転用し、HIZで出力を入力専用にできるように設計しました。また、OUT=VSSに固定して、HIZピンをドライブすればオープンドレインの出力(SDA用)にも使えます(これは私が設計しました)。

Screenshot 2026-08-26 at 10.29.14.png

Screenshot 2026-08-26 at 10.30.00.png

尚、IOH/IOL は、~15mA 程度です。

GPIO

入出力用のFRAMEを新たに作成します。

Screenshot 2026-08-26 at 10.43.25.png

Screenshot 2026-08-26 at 10.43.42.png

それぞれ schematic と Layout を作成して DRC/LVS クリーンにします。

TOP ブロック

Claude君に配置配線したブロックの symbol を作ってもらって、トップブロック tr_1um_i2c_slave_async.sch を作ります。

Screenshot 2026-08-26 at 13.27.40.png

この schematic から、Top Blockの配線をしてもらいます。

Screenshot 2026-08-26 at 11.16.40.png

配線して欲しくない領域を PTECT でカバーして Claude君に指示します。

Screenshot 2026-08-26 at 11.16.29.png

最終確認として DRC/LVS を通します。

因みに、LVS の原因究明にも Claude君は使えます。ERROR.lvsdb を解析してくれます。

最終 DRC/LVS

 % klayout src/tr_1um_i2c_slave_async_routed.gds
Loaded TR-1um PCells.
Setting running mode => deep
Starting TR-1um LVS Comparison in strict port mode
flag_missing_ports enabled: missing/mislabeled top-level ports are treated as errors
==========================================
INFO : Congratulations! Netlists match.
==========================================

おめでとう!トップブロックのDRC/LVSクリーンです!

まとめと感想

今回、本格的に Claude を使ってデジタル回路設計>配置配線>物理検証を試してみました。想定以上に使えることがわかりました。もちろん、Claude君に指示するための技術的な背景の知識は必須ですが、レイアウト作業や検証ベンチなどはすべてお任せしています。方針として Klayout と xschem だけで自動配置配線することを目指しましたが、見事に目標達成が出来ています。

このようなことが可能な背景として、オープンソースの Klayout の Python API が Claude のサンドボックス内で大活躍できること、Verilog や Xscheme の *.sch/sym がすべてテキストベースであり、Claude君にとって容易に編集できる点が本質的です。やはりオープンソース環境はAIの要諦ですね。

Referece

すべての試行錯誤の過程を含む情報はGitHubにて公開していますので、参考にして皆さんも AIでの配置配線に挑戦ください。

全体構成:README.md

スクリプト:SCRIPTS.md

CELLマッピング:logic_cells_mapping.md

試行錯誤:design_nodes.md

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?