这篇论文介绍了一个名为 UCAgent 的“超级智能助手”,它的任务是帮芯片工程师做一件最头疼、最耗时的工作:芯片功能验证。
为了让你轻松理解,我们可以把芯片设计比作建造一座极其复杂的摩天大楼,而“功能验证”就是在楼盖好之前,进行的各种极限压力测试(比如:电梯会不会卡死?消防通道能不能通?承重墙够不够结实?)。
1. 为什么要造这个“超级助手”?(背景与痛点)
2. UCAgent 是怎么工作的?(三大核心绝招)
UCAgent 就像是一个拥有超级大脑的“总包工头”,它不直接让 AI 去写那些难懂的芯片代码,而是用了三招“降维打击”:
第一招:换个“语言”干活(Python 验证环境)
- 比喻: 以前让 AI 写测试,是让它用“芯片专用方言”(Verilog)写,AI 经常说胡话。UCAgent 说:“别用方言了,咱们用普通话(Python) 来写测试脚本吧!”
- 做法: 它把芯片设计(DUT)包装成一个 Python 包。AI 只需要用它最擅长的 Python 语言来指挥芯片运行。这就好比让 AI 用中文写操作手册,而不是让它去学一门它不精通的外语。
第二招:把大任务拆成“小积木”(31 步精细工作流)
- 比喻: 如果让 AI 一次性“盖好整栋楼并测试”,它肯定会晕头转向,产生幻觉(胡编乱造)。UCAgent 把整个验证过程拆成了 31 个微小的步骤,像搭积木一样,一步一个脚印。
- 做法:
- 先分析需求(读懂图纸)。
- 再建测试环境(搭脚手架)。
- 然后写测试用例(制定检查清单)。
- 关键点: 每做完一步,都有一个自动检查员(Checker) 立刻验收。如果这一步没做好,AI 必须立刻修改,不能带着错误进入下一步。这就像盖楼,每砌一层砖都要检查垂直度,否则就推倒重来,绝不让错误累积。
第三招:给每个任务贴“身份证”(一致性标签机制 VCLM)
- 比喻: 在大型工程中,最怕的是“张冠李戴”。比如图纸上叫“承重墙 A",测试报告里却叫“承重墙 B",或者图纸上没要求测“防火”,结果测试报告里却测了“防火”。
- 做法: UCAgent 发明了一套标签系统(FG, FC, CK)。
- 在分析图纸时,给每个功能点贴个标签(比如
<标签 - 电梯安全>)。
- 在写测试代码时,必须原封不动地引用这个标签。
- 如果 AI 在测试代码里编造了一个图纸上没有的标签,或者漏掉了图纸上的标签,系统会立刻报警并拒绝通过。这确保了从设计图纸到最终测试报告,逻辑链条是严丝合缝的,没有断点。
3. 效果怎么样?(实验结果)
UCAgent 在几个真实的芯片模块(比如串口通信 UART、浮点运算单元 FPU)上进行了测试:
- 覆盖率极高: 它自动生成的测试代码,覆盖了 98.5% 的代码路径,甚至达到了 100% 的功能覆盖(意味着所有设计功能都被测到了)。
- 发现新 Bug: 它甚至在一个从未被验证过的模块中,自动发现了人类工程师之前没发现的隐藏 Bug。
- 效率提升: 它能在几十分钟到几小时内,独立完成原本需要人类工程师几天甚至几周才能完成的验证工作。
4. 总结:它意味着什么?
简单来说,UCAgent 就是把芯片验证从“手工作坊”升级成了“全自动流水线”。
- 它不再依赖 AI 去硬啃难懂的芯片代码,而是用 AI 擅长的 Python 语言来指挥。
- 它把复杂的任务拆解成 AI 能处理的小步骤,并加上严格的“质检员”。
- 它用“标签”锁死了逻辑,防止 AI 胡编乱造。
未来的愿景: 虽然目前还需要人类专家来配置流程(就像给机器人设定初始指令),但 UCAgent 证明了 AI 完全可以胜任芯片验证中最核心、最繁琐的工作,让工程师从“找 Bug 的苦力”变成“设计架构的专家”,大大缩短芯片上市的时间。
1. 研究背景与问题 (Problem)
核心痛点:
在现代集成电路(IC)开发中,功能验证占据了约 70% 的开发时间,是主要的瓶颈。随着设计复杂度的指数级增长,传统的验证方法(如约束随机验证、形式验证)难以跟上,且严重依赖人工,导致验证工程师短缺且成本高昂。
现有 AI 验证方法的局限性:
尽管大语言模型(LLM)在代码生成方面表现出色,但在端到端硬件验证中面临三大核心挑战:
- 代码生成准确性低: LLM 在生成硬件描述语言(Verilog/SystemVerilog)方面的训练数据远少于 Python(例如 The Stack v2 中 Verilog 数据量仅为 Python 的 1/20),导致生成的 SV 验证代码语法错误多、语义不稳定。
- 复杂任务执行困难: 验证流程涉及海量信息(规格书、代码、仿真报告),超出了 LLM 的上下文窗口。LLM 容易产生幻觉(Hallucination)、上下文遗忘(Context Rot)和指令遵循能力弱,导致错误在长流程中累积,最终结果不可靠。
- 验证一致性难以维持: 从设计规范到覆盖率模型,再到测试用例,必须保持严格的语义对应(Traceability)。LLM 容易在转换过程中改变术语(如将 "Overrun" 改为 "Overflow")或虚构不存在的场景,导致验证闭环断裂,结果不可信。
2. 方法论 (Methodology)
为了解决上述挑战,作者提出了 UCAgent,一个基于三个核心机制的端到端自动化验证智能体。
2.1 纯 Python 验证环境 (Python Verification Environment)
- 策略: 放弃让 LLM 直接生成 SystemVerilog/UVM 代码,转而构建一个纯 Python 的验证环境。
- 工具链:
- Picker: 将 RTL 设计(DUT)转换为 Python 包(PyDUT),使 LLM 能通过 Python 接口控制硬件。
- Toffee: 基于 Picker 的高层验证框架,提供时钟控制、信号封装等抽象,屏蔽了底层仿真调度(如 delta-cycles)的复杂性。
- 优势: 利用 LLM 在 Python 代码生成上的成熟能力,大幅降低语法错误率,提高验证逻辑的可靠性。
2.2 可配置的 31 阶段细粒度工作流 (Configurable 31-Stage Workflow)
- 策略: 将复杂的验证生命周期分解为 31 个细粒度的独立阶段(从需求分析、覆盖率建模、测试用例生成到缺陷分析)。
- 机制:
- 阶段隔离: 每个阶段有明确的输入、输出和交付物。
- 自动化检查器 (Checkers): 每个阶段都配备专用的自动化检查器。如果 LLM 生成的产物未通过检查(如格式错误、逻辑缺失),检查器会返回具体的错误反馈,强制 LLM 进行自我修正(Self-Correction),防止错误累积到后续阶段。
- 可配置性: 工作流是 YAML 配置的,可根据模块复杂度动态调整(例如为复杂模块插入 Mock 生成阶段)。
2.3 验证一致性标注机制 (Verification Consistency Labeling Mechanism, VCLM)
- 策略: 为了解决语义断裂问题,引入层级化的标签系统,将隐式的语义依赖转化为显式的、机器可检查的约束。
- 三级标签体系:
- FG (Function Group): 功能组(如
ARITHMETIC)。
- FC (Function Checkpoint): 功能检查点(如
VFADD 向量浮点加法)。
- CK (Check Point): 具体验证条件(如
CK-FP32 单精度验证)。
- 执行流程:
- LLM 在生成规格分析、覆盖率模型和测试用例时,必须显式标注这些标签。
- 跨阶段检查: 检查器会比对不同阶段的标签。如果覆盖率模型中出现了规格书中未定义的标签(幻觉),或测试用例未覆盖规格书定义的标签(遗漏),检查器将拒绝该阶段并报错。
- 效果: 确保了从“设计规范”到“覆盖率”再到“测试执行”的完整可追溯性。
3. 系统架构 (System Implementation)
UCAgent 系统包含四个核心模块:
- Agent Middleware (代理中间件): 基于 LangChain 和 ReAct 模式,管理 LLM 交互、上下文构建及工具调用(Tool Calling)。
- Workflow Management Module (工作流管理模块): 解析 YAML 配置,控制 31 个阶段的执行顺序,确保只有当前阶段通过检查后才进入下一阶段。
- Stage Validation Module (阶段验证模块): 集成自动化检查器和 VCLM,负责质量把关和一致性校验。
- Verification Execution Environment (验证执行环境): 基于 Python/Pytest 的运行时环境,负责编译、仿真、指标提取(代码覆盖率、功能覆盖率)及报告生成。
4. 实验结果 (Results)
作者在多个硬件模块上评估了 UCAgent,包括 UART、FPU、整数除法器(IntegerDivider)等。
- 验证覆盖率:
- 代码覆盖率 (Code Coverage): 最高达到 98.5%(在 IntegerDivider 模块上)。
- 功能覆盖率 (Functional Coverage): 在多个模块上达到 100%。
- 模型表现对比:
- Claude-Sonnet-4.5: 代码覆盖率最高,功能分解最细(平均 137 个覆盖率 Bin),但运行时间较长,测试生成阶段重试次数多。
- GPT-5: 功能覆盖率最稳定(始终 100%),各阶段失败率波动小。
- Qwen3-Coder-Plus: 执行效率最高(平均 74 分钟),但覆盖率略低,倾向于更粗粒度的分解。
- 缺陷发现能力:
- 在 LaneFAdd(未验证过的向量浮点加法模块)中,UCAgent 成功发现了 3 个 此前未被识别的边界条件缺陷(涉及 FP16 和 BF16 特殊值处理),并通过 VCLM 自动定位到具体的功能点和检查点。
- 大规模模块验证:
- 对于 15 万行代码的 PageTableWalker 模块,虽然全自动流程受阻,但通过“人机回环”(Human-in-the-Loop)策略,在 8 小时内完成了验证。
5. 核心贡献与意义 (Significance)
主要贡献:
- 范式转变: 提出了一种“纯 Python 验证 + LLM"的新范式,规避了 LLM 生成 HDL 代码的短板,显著提升了验证代码的生成质量。
- 细粒度工作流与检查机制: 设计了包含 31 个阶段的细粒度工作流,并通过自动化检查器实现了“错误即时反馈与修正”,有效解决了长流程中的错误累积问题。
- 可追溯性保障 (VCLM): 首创了验证一致性标注机制,通过机器可检查的标签系统,强制保证了从需求到测试的语义一致性,解决了 LLM 验证中最大的“幻觉”和“断链”问题。
- 端到端自动化: 实现了从规格书分析到覆盖率关闭的全流程自动化,无需人工干预即可发现真实设计缺陷。
行业意义:
- 降低验证门槛: 将验证工程师从繁琐的测试用例编写中解放出来,使其专注于架构和策略。
- 提升验证效率: 显著缩短验证周期,特别是在处理复杂模块时,自动化流程能发现人工容易遗漏的边界条件。
- 推动 EDA 智能化: 为 EDA 工具集成 AI 提供了可落地的架构参考,展示了 LLM 在硬件工程领域从“辅助生成”向“自主执行”迈进的潜力。
局限性:
- 对于超大规模工业级设计,工作流的配置和模块分解仍需人工介入。
- 验证的完整性仍受限于基础 LLM 的领域知识(如对 RISC-V 特定边缘情况的理解),未来需结合动态知识注入技术。
总结:
UCAgent 通过环境转换(HDL 转 Python)、**流程控制(细粒度工作流 + 检查器)和语义约束(VCLM 标签系统)**三大支柱,成功构建了一个高可靠、可追溯的端到端硬件验证智能体。实验证明,该方法不仅能达到极高的覆盖率,还能在实际设计中发现未知缺陷,为下一代智能 EDA 工具的发展奠定了坚实基础。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。