项目 · Python + BoTorch + Spectre

analog-sizing-ml

基于 BoTorch qEHVI 多目标贝叶斯优化的开源模拟电路 sizing 工具,支持 gm/Id 物理先验热启动,YAML 描述无侵入接入既有 Spectre 仿真链。

角色 主开发
周期 2025 – 至今
工艺 Python + BoTorch + Spectre

背景

模拟电路 sizing 在工程上几乎是 NP-hard 的体力活:一个普通的 bandgap + bias 组合就涉及十几维连续参数,每一维都在 PVT、工艺角与 Monte Carlo 之间互相耦合,靠工程师手调既慢又难以复现。商业 EDA 工具(如 Cadence Cerebrus、Synopsys / MunEDA WiCkeD、Solido Design Automation)确实能解决一部分问题,但许可证集中在大厂的全流程合约里,对学生和小团队而言并不可及。

analog-sizing-ml 是为这一空白做的开源尝试:把 BoTorch 的贝叶斯优化与 gm/Id 物理先验组合起来,做成一个能在普通服务器上跑 Spectre 远程仿真、用 YAML 描述设计意图的轻量工具。目标是让一个研究生在自己的项目里几个小时就能接入,而不是花几个月去搭流水线。

方法

工具由三层组成。最底层是基于 BoTorch 的 qExpectedHypervolumeImprovement 多目标采样器,支持在仿真预算约束下做 Pareto 探索;用户只需把 objective 写成向量(如 vref_dev、spread、power),不再需要事先决定权重。中间层是 gm/Id prior 模块(gmid_prior.py):给定每条支路的 (gm/Id, I_target, L_target),用本机 TSMC55 gm/Id 查找表反查出 W 的可行区间,把 BO 的初始点直接撒在物理合理域内,相比纯 LHS 命中率提升一倍多。

最上层是 YAML schema 与 CLI。所有 spec、变量边界、objective / constraint、warm-start 模式都在配置文件里声明,仿真器走既有的 Spectre 黑箱:netlist 的 .param 替换 + PSF 解析。并发管线复用 server_capacity.probe(),根据服务器空闲度自适应决定 ThreadPool 大小与 spectre +mt,空闲时打满 16 核,繁忙时自动退避。报告生成、决策树、Pareto 图都是 python -m sizing_opt run 一键产物。

当前进展

  • v0.2.0 发布,覆盖 BoTorch qEHVI 多目标 + gm/Id prior + CSV warm-start 三种启动模式
  • 在 BackScatter BGR55 + TopBias55 联合 demo 上,命中率从老 baseline 的 17%(sklearn ParEGO)提升到 48%(CLI 80 evals)
  • 三向对比实测(vanilla qEHVI / gm/Id prior / penalty 改进版):v2c penalty 版把 best vref_dev 从 2.66 mV 压到 1.51 mV,下降 43%,同时保持 48% in-spec
  • gm/Id prior 让 BO 起步就停在可行域,in_spec 比纯 LHS 高 20 个百分点(53% vs 33%),在分钟级慢仿真场景下直接节省 30%+ wall-time
  • 文档(docs/how_to_use.md 5 步接入新电路)+ CLI 子命令(run / check / report)+ 自动报告生成

下一步

  • 把约束 GP 在 objective 与 constraint 弱相关的 task 上重新评估(当前默认关闭,因为强相关场景下会把搜索拉进违反域)
  • 接入 RTL signoff oracle,做 hybrid analog/digital 联合 sizing,覆盖混合信号 SoC 中的 PHY 块
  • 完善 gm/Id prior 的 I_target 自动标定流程,避免用户配错支路电流导致维度退化
  • 开源 release 与英文文档
← 所有项目