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の信号の初段にヒステリシス・バッファーを追加しました。回路図とレイアウトは以下のようなものです(これは私が設計しました)。
Claude君に BUFTH を SLC/SDA の入力信号に挿入してNETを作り直してもらいます。その後 iverilog で動作検証します。
配置配線
BUFTHが新たに挿入されたので、もう一度配置配線をやり直します。
- step1_tap_power_mesh: VDD/GND用のTAPパワーメッシュ(3列×5チャネル)を配置。信号配線はまだ無し。
- step2_pass0_per_row_local: RSTB1/RSTB2/addr_okなど7ネットの行ローカルトランク+スパイン配線(隣接行間を専用トラックで接続)。
- step3_pass1_high_fo_row_only_adjacent: 高ファンアウト2ネット、行内完結ネット、隣接チャネルペアネットを配線。
- step4_pass2_spanning: 複数チャネルをまたぐスパニングネット10本を配線(行クロス処理)。
- step5_pass3_force_jog_nets: FORCE_JOG_NETS(15ネット)のライブ衝突チェック付き最終配線。
- step6 トップのPINの配線を BBOX 外周まで延長して PIN をつけます。
- step7 空の配線チャネル領域をY方向に圧縮します。
LVS
DRC Clean を確認後に、NET から spice ファイルを作り LVS を通します。標準の LVS だと STDCELL のポートオーダが厳格なので、LVS runset を修正します。
GPIO
フレームにGPIOのドライブ回路を追加します。ESDデバイスをドライバーに転用し、HIZで出力を入力専用にできるように設計しました。また、OUT=VSSに固定して、HIZピンをドライブすればオープンドレインの出力(SDA用)にも使えます(これは私が設計しました)。
尚、IOH/IOL は、~15mA 程度です。
GPIO
入出力用のFRAMEを新たに作成します。
それぞれ schematic と Layout を作成して DRC/LVS クリーンにします。
TOP ブロック
Claude君に配置配線したブロックの symbol を作ってもらって、トップブロック tr_1um_i2c_slave_async.sch を作ります。
この schematic から、Top Blockの配線をしてもらいます。
配線して欲しくない領域を PTECT でカバーして Claude君に指示します。
最終確認として 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
















