☰
用AI打通从RTL到ATE测试的芯片设计闭环,实现fail自动回溯
2026/10/19 5:34:43 网站建设 项目流程

芯片回来后测试不过,RTL工程师的第一反应永远是:是不是测试那边的问题?这句话听起来像个段子,但我在芯片公司干了这些年,见的真不少。等大家冷静下来,开始拿ATE(自动测试机台)的fail log去对波形,才发现问题的根源早就埋在RTL的某个状态机里,只是没人有耐心从网表一路追回去。我们团队去年专做的一件事,就是把"从RTL到测试"这条链路用AI接成一个闭环,让测试端的每一个fail都能自动回溯到设计端。

这个项目后来在GACS 2026行业论坛上做了一次分享,主题就是"从RTL到测试,用AI构建芯片设计闭环"。当时台下问得最多的问题就是:你用了什么模型、模型多大、流程怎么改、值不值得做。我一直想找个机会把这些问题一次性讲清楚,正好这篇复盘就是干这件事的。如果你也是做数字前端、验证、DFT或者测试开发的人,这篇文章应该能给你一个完整的地图。

1. 芯片设计流程里的"最后一公里":测试反馈为什么总到不了RTL

1.1 传统流程像接力赛,但接力棒是断的

标准的数字芯片设计流程,很多人背都能背出来:规格定义、架构设计、RTL编码、功能验证、逻辑综合、DFT插入、布局布线、时序签核、流片、ATE测试。听起来是一条完整的流水线,但实际上每一棒交接时,交接物都在"退化"。

RTL端拿出一份SystemVerilog源码,仿真波形在验证环境里跑得漂漂亮亮;到了综合阶段,源码变成门级网表,网表里的逻辑门已经看不出原来的"if else"长什么样了;再到DFT,网表里插进扫描链、BIST(内建自测试)逻辑,又混入一大片测试结构;最后流片回来,ATE测到的只是一堆pass/fail的bin信息。每一个环节的信息,都在往下游传递时被抽象、被压缩,等到测试工程师手里,原本RTL级的丰富语义,就只剩下"哪个测试点挂了"。

更要命的是,这中间的组织边界也是断裂的。RTL工程师一般不看ATE日志,测试工程师也不会主动去翻前端代码。一旦回片fail,两边先互相怀疑一轮,然后才有人做"翻译"——把网表节点映射回RTL的行号,再结合仿真波形去做根因猜测。这件事极其依赖老师傅的直觉,既不可复制,也容易漏。

这种断裂不是一天两天了,之前只是芯片成本高、流片次数少,大家都咬咬牙忍了。现在的问题在于,AI时代的芯片项目,迭代频率上来了——从模块级的小芯片到系统级的大芯片,动不动就几个月一轮MPW(多项目晶圆)。如果每次fail的定位还是要靠人工去"考古",项目的节奏就完全跟不上。

1.2 一次回片后的典型噩梦:耗时在"猜"上

我记得很清楚的第一个案例,是一个串行接口模块的fail。样片回来后,ATE那边报告某个bin挂了,电压和频率的shmoo图显示在低速低电压下表现异常。测试工程师的初步判断是"测试台接触不好",建议重测;重测之后还是挂,就怀疑"是不是DFT扫描链有问题";DFT同事查了一轮扫描链输出,说链路没问题;最后才请前端介入。

前端拿到网表和波形开始追,发现是一个跨时钟域的握手信号在极端环境下出现了亚稳态。这个bug在仿真时几乎不可能被触发,因为测试环境从没在低电压低频率场景下模拟过那组异步信号的极端延迟。整个过程花了将近三周。其中真正"查"的时间并不多,大量时间耗在部门间来回确认、等待重测、转换数据格式这些运维性事务上。

这件事给我的震动很大。因为那个模块的RTL只有几百行,根因可能就藏在两三个信号的时序关系里。如果有一个系统能把ATE的fail位置、电压频率条件、网表里的逻辑锥,以及RTL源码全部串起来,再配合AI做一次自动的"线索交叉比对",那么定位时间应该不是三周,而是几小时。

这就是我们做AI闭环的起点:不是想做多炫酷的模型,而是想把这一条断掉的链路重新接起来。

2. AI在RTL、验证、DFT、测试四个环节各自干了什么

2.1 RTL侧:把"人写代码"变成"人审代码"

很多人一听到"AI加芯片设计",第一反应就是"AI自动写RTL"。我们确实也做了这层,但做法比较务实。我们不是让AI直接交付一整个模块,而是让AI根据一段模块级spec,生成第一版RTL代码和对应的断言(assertion),然后由工程师做代码走查和修改。

实际用下来的效果是:AI生成的代码,在接口对齐和基础逻辑上可以做到七八成靠谱,但一旦涉及复杂的跨时钟域处理和低功耗信号隔离,AI生成的代码经常会在边界case上出问题。所以我们采用的是"AI初稿、人工定稿"的方式,把AI当做一个"写得飞快但需要审查的实习生",而不是"权威设计师"。

下面是我们内部给AI用的一个RTL生成提示模板,供参考:

你是资深芯片前端工程师。根据以下模块规格,编写SystemVerilog RTL。 要求: 1. 同步复位,时钟域为clk_200m。 2. 输出寄存器全部使用非阻塞赋值。 3. AMBA-Lite接口,寄存器位宽与我方定义一致。 4. 针对FIFO满、跨时钟域握手,生成五个关键断言。 5. 代码风格遵循我们团队的lint规则,禁止组合逻辑环。 模块规格: 输入:... 输出:... 功能需求:...

这个模板看起来简单,但真正有价值的是第3到第5条。如果只写"生成一个FIFO",AI会给出一堆通用代码,回到公司代码库里抄一版都差不多。而把这些边界约束、风格约束写清楚之后,AI生成的结果才是真正可用的初稿。

另外我们还会让AI做反向工作:给定一段RTL代码,自动识别内部可能存在亚稳态风险、功能覆盖缺口、死代码,以及未受约束的输入信号。这个"代码体检"能力,比"生成代码"更让团队受益,因为它把本来要靠资深工程师经验才能发现的隐藏问题,变成了例行扫描的结果。

2.2 验证侧:不再等覆盖率报告,而是让AI主动找空白

传统验证流程里,功能覆盖率是一个"事后指标"——跑完一轮回归测试,发现某个功能覆盖点没达到90%,才去补用例。这个流程最吃亏的地方在于:它不知道没覆盖的到底是什么,只能靠人工去猜,又花时间又不系统。

我们在这里接入了一个基于历史回归数据的覆盖预测模型。做法是:把项目里过去几轮回归测试的激励序列、功能覆盖点、代码覆盖率绑定起来,训练一个简单的梯度提升模型,用来预测"当前激励集继续跑下去,哪些覆盖点的增长已经饱和,哪些还是低洼地带"。

这个模型不需要特别复杂,真正有效的部分是它的特征设计。我们用的特征包括:功能覆盖点的分组hash、最近五轮回归的覆盖增量、激励序列长度、涉及到的寄存器地址区间、仿真seed等。训练完之后,系统会在每轮回归结束后自动输出一张"空白覆盖点清单",并按预估收益排序。

负责验证的同事再照着清单去补定向用例,效果立竿见影。举个具体数字:某模块的FSM状态覆盖,之前手工补了三轮才到92%,换了这个推荐机制后,补了一轮用例就涨到了94%,而且这轮用例数量还少了20%。因为AI给出的不是"多跑点随机激励",而是精准命中那几个从未进入的状态转移路径。

2.3 DFT侧:扫描链与BIST的自动决策

DFT其实是个看起来很"规则"、实际变量很多的环节。扫描链怎么分组、压缩器(compactor)怎么配置、哪些逻辑用BIST覆盖、哪些用外部扫描链覆盖,这些决策直接影响测试时间、测试功耗、故障覆盖率三者之间的平衡。传统EDA工具给了你选项,但最终参数靠的是DFT工程师的经验。

我们做的第一版,其实不是AI,是一个把"设计特征"和"测试指标"联系起来的自动化搜索。我们用已有的RTL结构特征(比如逻辑深度分布、状态寄存器数量、时钟域数量)作为输入,尝试让一个启发式算法自动调节扫描链分组参数,目标函数是"测试功耗不超过约束的前提下,故障覆盖率最高、测试向量数量最少"。

跑了三个模块的测试数据之后,结论是:启发式算法的效果比默认参数好,略逊于资深DFT工程师的手调,但远胜于新人工程师的试探性配置。之后我们把专家的历史决策记录放进去,用监督学习拟合出"什么样的设计特征对应什么样的DFT参数组合",效果就更稳定了。至少我们团队的新同事,现在可以用这个模型在项目初期就选出一版靠谱的DFT配置,不用每次都拉着老工程师开半天会。

2.4 测试侧:fail日志的自动聚类与根因映射

ATE测试产生的数据量是惊人的。一次量产测试,一台测试机跑一个lot(批次),出来的fail记录可能有数十万条,每条包含测试项、站点、电压温度条件、测量值等。人工去看这些日志,基本只能看到"哪个bin多了",根本看不出fail之间的内在规律。

我们做的自动聚类系统,第一步是把每条fail记录转成结构化字段,包括fail测试项、器件位置(wafer map上的坐标)、电压温度bucket、测量偏移值。第二步,用一个无监督聚类模型把这些记录分成若干组,每组内共享相似的"失效指纹"。第三步才是核心:对每个聚类组,自动回查逻辑网表和RTL,生成一组"可疑信号线索"。

这一步背后是一套逻辑锥分析工具。简单说,每一条测试fail,最终都可以追溯到某个或某几个scan cell(扫描单元)捕获到了错误值。分析工具从这些单元出发,反向追踪组合逻辑锥,一路找回到触发器输入,再映射回RTL源码的行号和信号名。AI在这里的角色,是自动判断"哪些可疑信号之间的相关性最高",并给出根因排序。

做过芯片失效分析的都知道,拿到一个fail清单之后,最费时间的工作是从几十个可疑信号中找到那个真正的元凶。AI排序的价值就是让工程师从第1条开始看,而不是从第30条开始猜。

3. 从一条ATE fail数据回溯到一行RTL:闭环是怎么跑通的

3.1 设计同一种数据语言

要让整个链路通起来,第一个基本功是数据格式。我们做了一套统一的事件结构,把RTL编译信息、网表、DFT插入信息、ATE测试结果全部抽到一起。事件的schema大致如下:

{ "event_id": "DUT_X_00012345", "fail_signature": { "test_item": "scan_shift_out_chain_7", "voltage_bucket": "0.72V", "temperature": "85C", "measure_offset": 1.4 }, "design_ref": { "netlist_name": "chip_top_x_v2p1", "rtl_revision": "d4039fa", "scan_cells": ["u_uart/u_fifo/stage_3/q_reg"], "logic_cone_depth": 8 }, "verified_by": { "clustered_id": 17, "ai_root_cause_candidates": ["u_uart/u_fifo/rx_ack_sync", "u_uart/u_fifo/fifo_full"] } }

这个JSON只是示意,但字段背后对应的是我们内部统一的ETL(抽取、转换、加载)流程。管线会把不同阶段的数据切片按照"netlist版本+测试批次"这两个维度关联起来。这件事看起来不复杂,实际做起来远比想象中烦琐——因为公司的数据库和EDA环境各有各的版本清单,连不上是常态。

3.2 链路拆解:从fail记录到根因报告要过五道关

整个回溯流程分五步。第一步fail聚类,把散乱的数据归并成几个失效模式;第二步映射扫描链,找出每个失效模式对应的具体scan cell;第三步逻辑锥反推,把这些scan cell的输入锥还原成一组网表信号;第四步对回RTL,把网表信号翻译成RTL模块/行号/信号名;第五步AI排嫌疑,根据信号关联性和历史缺陷库给根因排序。

这个过程在传统企业里也有,但是一步一个工具、一步一个脚本,还常常断档——网表信号到RTL的映射在某个版本之后就对不上了,或者ATE数据和仿真波形用的是两套时钟定义。我们做的闭环,就是把这五步固化成一个自动流水线,中间所有断点都用AI辅助去填补。AI在每一阶段输出的不是一个"最终结论",而是一组"带置信度的候选",留给工程师做判断。

这个设计理念很重要:闭环不是让AI替人做决策,而是让AI把需要人做决策的环节缩到最小。我们把这种模式叫"人在回路上"(human in the loop),而不是"人在回路外"。

3.3 实战案例:一个FIFO满信号的"无声腐败"

用前面那个串行接口模块的案例来走一遍闭环流程。当时的ATE fail数据经过聚类后,呈现出一个很有意思的规律——所有fail都集中在scan chain 7上,而且只在85度、低电压条件下出现。自动排障系统把链上捕获出错的扫描单元锁定在FIFO写数据通路的尾部,再反向追逻辑锥,出来的可疑信号列表里,第二行就是fifo_full这个信号。

系统同时调用了同一个模块历史上的一条缺陷记录:八个月前曾有一次"fifo_full在复位释放后的第一拍没有正确拉高"的bug。AI根据逻辑锥结构、历史bug相似度、仿真波形里的触发条件,把fifo_full排在第一位,并给出理由:"该信号未被断言约束覆盖;在低电压仿真库下,其输入路径上存在一条组合延迟路径超限的可能。"

工程师顺着这条线在RTL里复查,果然发现那个fifo_full信号是通过两级组合逻辑计算出来的,在跨电压条件下延迟比仿真库模型预估的要大,导致捕获沿到来时数据还没稳定。这个bug在普通仿真中没有问题,因为仿真库的延迟模型是统一的;只有在ATE那种真实硅片环境、低电压条件下才会暴露。

整个定位过程,从拿到fail数据到生成根因报告,系统花了四十多分钟,工程师复核后修改RTL和约束,又花了半天。而同样的问题,在上一代项目里花了三周。这就是闭环真正的价值——它不是让你不思考,而是把你从无穷无尽的"翻日志、对网表、猜原因"里解脱出来,把精力留给真正需要判断的事。

4. 搭这套AI闭环前,先准备好四个底座

4.1 数据底座:宁可每天多花一小时清洗,也不要带着脏数据上线

我必须强调,任何AI闭环的成败,八成在数据。芯片设计领域的数据特点,是"每个环节都有自己的一套记账方式":RTL工具的日志和EDA数据库的版本不一定同步,DFT插入后网表里加的cell,在RTL源码里根本没有对应物,ATE测试日志用的又是测试机厂商自己的格式。这些数据如果不能在第一天统一好,AI模型做得再漂亮也喂不进真实的项目。

我们的做法是:在项目一开始就投入大量的工程工时,写了一套数据清洗和关联脚本,专门把各环节的数据切片按照"设计版本+测试批次"的键值对齐。初期这批脚本占了整个项目将近四成的开发量,但后来模型训练、离线验证、线上推理全都受益于此。有人问这四成投入是不是浪费了,我的答案是:如果把数据比作食材,那这四成是在把带泥的蔬菜洗干净、切好码齐,至于后面是炒是炖,那是算法部分的事。

4.2 知识底座:历史缺陷库是AI最重要的"教材"

模型训练的时候,我们很快发现:通用的预训练模型对芯片设计领域的专有概念(比如scan cell、逻辑锥、覆盖点这些)并没有太多先验知识。真正让模型在根因排序上表现不错的关键,是公司内部历年积累的那几千条缺陷记录。

我们把历史缺陷记录做了结构化整理:每条记录包括现象描述、涉及模块、根因信号、仿真验证方法、修复方案五部分。然后再用这些记录去微调本地的大模型,让它学会"症状-根因"之间的概率关联。这么做之后,模型给出的根因候选质量立刻上了一个台阶。

这里有个经验:缺陷库的整理不要追求完美,能让AI读得懂、检索得到就够了。我们用的是半自动方式,先让AI做字段抽取,再由工程师抽查修正。几千条记录大概用了一两周的时间,换来的是后面每次回溯都能引用历史案例,这个性价比非常高。

4.3 可信底座:每一步结论都带证据链

芯片工程师对AI有一种天然的怀疑:你把根因排序结果给我,我怎么知道它为什么这么排?我们的做法是,AI输出的每一个结论都必须附带证据链,否则视为无效输出。

比如,AI说"fifo_full是首要怀疑对象",就必须要给出三条依据:逻辑锥内该信号的出现频次、与历史缺陷库中某条记录的相似度分数、仿真波形中该信号是否曾被断言覆盖。工程师可以一键展开这些证据,甚至可以手动修正模型的权重——比如某一个工程师觉得"本次测试温度较高,历史相似案例的温度区间也应该加权",这个反馈会回流到模型训练里,形成持续优化。

这套机制看起来简单,但直接解决了"AI是个黑盒所以我不信"的信任问题。我们项目能顺利落地,很大程度上靠的就是这种透明化、可干预的设计。

4.4 流程底座:不是让AI替代人,而是把人放到"审核员"的位置

最后一条,也是最有争议的一条:流程上,AI永远没有最终决定权。AI可以生成RTL初稿,但必须有人签核才能合入代码库;AI可以给出根因候选,但只有工程师确认之后才能进入改版流程。我们甚至在系统里加了审计日志,每次AI的推荐和人的最终决策都会被记录、对比,方便回头复盘谁对谁错。

有人觉得这样降低了效率,但我恰恰认为这才是效率的来源。因为一旦给AI开了"自动修改RTL"的口子,出现误判时追责成本会急剧上升,反而会让项目推进变得保守。保持"AI建议、人来拍板"的模式,既保证了速度,也保证了安全,也让工程师愿意参与迭代。

5. 落地三个月里踩过的坑和我的应对办法

5.1 数据版本错位的坑:旧pattern撞上新网表

第一个大坑发生在数据拼接阶段。某次的ATE fail记录,系统在追溯逻辑锥时指向了一个不存在的网表节点。查到最后发现,测试机台还在用上一版网表生成的pattern跑测量,而我们的AI回溯链路用的是最新版网表,两者之间自然对不上。

这个问题的本质是"数据版本一致性"没有被当成一等公民。我们的解决办法,是在统一事件结构里把design_ref的两个关键字段(netlist_name和rtl_revision)设为强校验,任何数据只要这两个字段对不上就直接拒绝入库,宁可少一条数据,也不能要错一条数据。

5.2 别把AI当RTL专家的坑:AI生成的代码需要大量code review

前两三个月,团队里有人尝试直接用AI生成整个模块的RTL。生成的结果确实能综合,仿真也能过,但到了代码评审环节大家都皱眉头:缺少模块级注释、命名风格不一致、某些时序约束被写死而不是可配置。改这些比从零写还累。

后来我们调整了用法:AI只生成"第一版骨架+关键断言",详细设计决策和风格统一由工程师完成,同时让AI跟着历史代码风格做二次改写。这个折中方案既保住了AI的启动效率,又保住了代码的可维护性。

5.3 组织协同的坑:测试团队怕被替代,前端团队怕担责

技术问题都还容易解决,最难的是组织上的信任。测试工程师担心这个系统上线后自己的经验变得不重要;前端工程师担心AI推荐的根因如果最终被证明是错的,锅算谁的。这两类焦虑,如果不解决,再好的系统也没人用。

我们的做法是分三步。第一步,在所有汇报里强调系统的定位是"提高排查效率的第一道加速器",不是"做决定的领导者";第二步,把AI的根因推荐指标(准确率、反馈采纳率)体现在团队的季度目标里,让大家看到这个系统的改进也会让每个人受益;第三步,试点期间明确"所有AI结论仅供参考,人的判断永远优先",出了问题不追责AI,只复盘流程。这些做法听起来很软性,实际上比任何技术优化都管用。

5.4 从试点到推广:一个小模块跑通后,再复制到全流程

最后说说路线图。我们起步时选择了一个规模适中、历史缺陷记录丰富的模块做试点,跑通之后再逐步推广到其他模块,最后才覆盖整个设计流程。这样做的逻辑是:如果试点模块本身数据干净、问题模式清晰,闭环系统能更快地积累正向案例,也更容易让团队建立信心。

实测下来,一个模块从数据准备到初步看到效果大约需要六周。如果想要覆盖完整的前端到测试链路,并且效果稳定可复用,我建议做好三到四个月的预算。不要贪多,先把一条有代表性的链路走顺,比铺开一大片但每一条都半吊子要强得多。

这个项目做完之后,我对"AI改变芯片设计"的理解已经从"生成代码"变成"连接数据"。芯片设计流程的各个节点手里其实都有大量数据,只是它们长期散落在不同的工具和部门里。AI真正的价值,是把这些数据重新编织起来,让信息在流程中流转而不是断档。后面我们还在试的方向,是把同样的闭环思路用回到验证用例推荐和低功耗验证上。

如果你也在做类似的事情,我的建议就一句话:别先想模型选型,先把你手上每个环节的数据格式对齐,让它们能连起来。数据通了,AI的价值会自己浮现出来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询