如何应用机器学习优化验证空间探索?

解读

面试官问的是“怎么用机器学习把验证空间‘榨干’”,而不是泛泛地谈AI。国内一线公司(海思、平头哥、展锐、壁仞、地平线)的验证团队已经把ML写进24年OKR,目标很明确:在有限的Regression Budget里找到最难触发的bug,同时把覆盖率收敛周期从“周”压到“天”。因此,回答要落地到“数据从哪来、模型怎么训、结果怎么回注到UVM环境、谁来做决策”这四个环节,缺一环就会被判“纸上谈兵”。

知识点

  1. 验证空间三要素:输入空间(constraint)、状态空间(RTL寄存器+内存)、覆盖率空间(covergroup、assertion、toggle)。
  2. 适合ML的三类验证数据:
    a) 仿真日志(UVM printer、FSDB波形压缩后转成的向量);
    b) Coverage Database(Synopsys UCIS、Cadence IMC格式);
    c) 静态特征(RTL网表节点数、FSM深度、CDC路径数)。
  3. 常用模型与场景:
    • 强化学习(PPO、DQN)→ 智能stimulus generator,替代人工调constraint。
    • 贝叶斯优化(Gaussian Process)→ 在“覆盖率-仿真耗时”Pareto前沿上自动挑下一轮Regression的种子。
    • 异常检测(Isolation Forest、AutoEncoder)→ 从海量log里捞“可能是bug”的波形。
  4. 工程落地关键:
    • 数据管道:每日凌晨用Verdi FSDB2CSV + 自研Python脚本把前一夜2 TByte波形抽成20 GByte特征,写进公司统一Hive表。
    • 模型轻量:训练在GPU服务器,推理用C++写成UVM DPI-C函数,仿真器里直接call,单核开销<5%。
    • 闭环流程:模型输出新的constraint → 自动merge到下一版test_pkg → Jenkins触发Regression → 覆盖率回写MySQL → 模型增量训练,全程无人值守。
  5. 国内流片sign-off红线:ML发现的corner必须再跑一次“定向用例+形式验证”,否则后端不会签收。

答案

“我们在XX项目7 nm AI芯片里把机器学习嵌进了验证闭环,分三步走:
第一步,数据准备。把每天回归产生的8 k次仿真日志、UCIS覆盖率以及RTL静态特征统一落库,清洗后得到{输入向量, 覆盖率增量, 是否触发bug}三列样本,约30万条。
第二步,模型训练与选择。

  • 对于stimulus生成,用强化学习:把constraint solver当成Environment,Agent每次动作是调整权重数组,奖励函数=新覆盖率/仿真时间。训练4小时后,模型在ResNet50 DMA模块上把covergroup从92 %拉到99 %,耗时下降42 %。
  • 对于Regression排序,用贝叶斯优化:以“覆盖率提升概率/CPU小时”做采集函数,每轮只跑模型推荐的200用例,相比全量1 k用例,等价覆盖率提前1.8天达到sign-off阈值。
    第三步,闭环部署。模型推理代码用C++ DPI-C封装,仿真器运行到randomize()前调用,动态改写constraint权重;同时把异常检测模型挂到log server,一旦波形特征偏离正常分布即自动开case给设计部。最终该模块在TO前最后两周又挖出3个CDC corner bug,避免了一次metal layer改版,节省费用约120万美元。整个流程已固化成公司模板,可在下一个5 nm项目直接复用。”

拓展思考

  1. 小芯片or IP级验证数据不足时,可用迁移学习:把同系列大芯片的模型做fine-tune,只需1/5数据即可收敛。
  2. 把形式验证的“反例轨迹”也喂给异常检测模型,让ML学会“什么特征一定出bug”,实现静态+动态联合搜索。
  3. 国内趋势:中芯国际、长鑫存储等产线开始把验证ML模型和工艺缺陷数据打通,未来可能出现“设计-验证-良率”一体化AI平台,验证工程师需同时懂yield learning,职业天花板会更高。