描述机器学习在错误定位中的应用

解读

面试官想知道三件事:

  1. 你是否理解“错误定位”在IC验证中的痛点——日志爆炸、波形难复现、人工回溯慢;
  2. 你是否能把机器学习(ML)当成“辅助调试工具”而非“玄学黑盒”,讲清数据、特征、模型、闭环;
  3. 你是否具备落地视角:国内项目节奏紧、数据敏感、算力受限,如何低成本上线并量化收益。
    回答时要“技术深度 + 场景细节 + 量化结果”,避免空谈算法名词。

知识点

  1. 错误定位(Bug Localization)三阶段:失败检测 → 可疑范围压缩 → 根因语句定位。
  2. 验证数据资产:
    • 结构化:log中的时间戳、severity、UVM component路径、TLM transaction类型、assertion name、coverage bin。
    • 非结构化:波形FSDB/Saif、编译器warning文本、git diff。
  3. 常用模型与适用场景:
    • 可疑语句排序:基于Siemens’ Bayesian Suspicious Ranking改进的XGBRanker,用“失败用例是否触发该代码行”做二阶特征。
    • 日志异常检测:Isolation Forest + 滑动窗口,对UVM_ERROR序列做实时告警,减少99%冗余打印。
    • 波形模式匹配:1D-CNN把400-cycle波形切片当图像,定位AXI死锁,Precision@5>90%。
    • 跨项目迁移:对比学习(SimCLR)把“协议+模块类型”当标签,解决新模块训练样本不足。
  4. 国内落地约束:
    • 数据不出园区,只能用CPU服务器;禁止上传公网GPU云。
    • 一周迭代两次,模型训练+推理总耗时<30 min。
    • 需要可解释:设计经理要看到“哪一行RTL、哪个assertion、哪条约束”被模型标红。
  5. 评价指标:Top-10命中率、平均调试时间(MDT)、重跑次数、sign-off前ECO数量。

答案

我在海思某5nm AI加速器项目中完整落地了“基于梯度提升的RTL错误定位”流程,核心是把传统贝叶斯可疑度计算升级为“混合特征XGBRanker”,并嵌入 nightly regression 流水线。

数据准备:

  • 每晚2400次回归用例,失败约60例;解析Verilog行覆盖与VCS编译数据库,得到“行级×用例”矩阵(1表示该行被用例执行,0表示未执行)。
  • 把UVM log中的component路径、error code、时间戳拼接成文本特征,用TF-IDF降维到128维。
  • 对波形采样得到“AXI valid-ready handshake 抖动率”等8个协议相关统计量。

模型训练:

  • 标签:如果某行最终ECO被修改,则该行标1,否则0。
  • 样本极度不平衡(1:400),采用ScalePosWeight=25 的XGBoost,目标函数改为Pairwise Ranking,使可疑行尽量排在前面。
  • 训练集用过去三个月历史数据,共80万行;在32核CPU上训练12分钟,模型大小18 MB。

推理与闭环:

  • 新失败用例一旦检出,脚本1分钟内完成特征抽取+模型推理,输出Top-20可疑RTL行。
  • 同步生成SHAP值,解释“为何该行得分高”,把信号名、assertion序号高亮到Verdi波形窗口。
  • 设计师根据提示定位,平均调试时间从3.2人时降到0.7人时;项目后期Top-10命中率维持78%,减少两次本需重跑的ECO,直接节省流片风险费用约120万元。

该方案已固化成内部工具“MLBug”,现部署在自研CI平台,每日自动回归,无需人工干预。

拓展思考

  1. 小样本场景:当全新协议(如国产Chiplet互连标准)首次验证时,历史ECO极少,可用“元学习+MAML”在三天内冷启动,把相似协议(AXI、CHI)知识迁移过来,首周Top-10命中率仍可达55%。
  2. 形式验证结合:把JasperGold产生的反例轨迹也当成失败用例,反例通常极短,可显著增加正样本比例,缓解不平衡。
  3. 强化学习调试策略:把“打开哪个波形组、添加哪条断言”作为动作空间,用DQN学习最优调试顺序,进一步压缩人时;目前已在实验室原型验证,MDT再降20%。
  4. 安全合规:对设计代码做Token化哈希,确保训练数据不落地明文;与信创CPU服务器完成兼容性认证,满足国内客户私有化部署需求。