背景
模拟电路 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.md5 步接入新电路)+ CLI 子命令(run / check / report)+ 自动报告生成
下一步
- 把约束 GP 在 objective 与 constraint 弱相关的 task 上重新评估(当前默认关闭,因为强相关场景下会把搜索拉进违反域)
- 接入 RTL signoff oracle,做 hybrid analog/digital 联合 sizing,覆盖混合信号 SoC 中的 PHY 块
- 完善 gm/Id prior 的 I_target 自动标定流程,避免用户配错支路电流导致维度退化
- 开源 release 与英文文档