Spec2RTL论文阅读
现有工作→假设结构良好的输入并且缺乏迭代修正
Spec2RTL→在合成之前细化中间表示来提高自动化鲁棒性
三大核心挑战
- 理解与推理(Understanding & Reasoning):将复杂、无结构、多模态信息转为结构化可执行规划。
- 多模块代码生成:LLM 长序列输出能力有限,需分步生成并保证模块间一致性。
- 错误检测与纠正:多模块、多步骤下错误可能源自前序函数或初始规划,现有单模块调试方法不够。
结构
输入
原始形式的硬件规范文档,未经手动简化。这些文档通常包含大量的非结构化内容,包括图形、表格和方程
输出
功能正确的 RTL 实现,满足输入文档中指定的约束和功能要求
预期水平
自主执行大部分 RTL 开发任务,需要最少的人工干预,每次干预仅限于高层指导或解决超出模型推理能力的案例。
整体框架

采用多智能体协作,模拟人类硬件设计流程,分三阶段:理解 → 编码 → 反思。整体流程见原文 Fig. 3。
迭代理解与推理模块(Iterative Understanding and Reasoning)
将冗长规格转为简洁、结构化、LLM 友好的实现规划。三阶段:
Summarization Agent:对原文档各节生成摘要,降低后续处理负担。
Decomposer Agent:结合摘要与原文,将目标功能分解为可实现的子功能序列。
Information Augmentation:
Decomposer 把一个大功能(比如 AES 加密)拆成了若干子函数(SubBytes、ShiftRows、MixColumns、AddRoundKey……)。但此时每个子函数只是一个名字 + 一句简要说明。细节都散落在几十页的原文档里。如果 Coder 每次都回去翻原文档,既低效又容易遗漏。所以需要一个专门的环节,提前把每个子函数需要的所有信息搜集齐、整理好。
由 Description Agent + Verifier 协作,为每个子功能补全输入/输出/功能/原文引用等,形成结构化信息字典。
Description Agent—— 负责"收集整理"
输入:原文档 + 各节摘要 + 当前子函数的需求说明。
任务:回到原文档里把和这个子函数相关的所有内容捞出来——输入参数、输出结果、功能描述、操作步骤、相关公式/表格、原文章节引用等。
产出:一份结构化字典,把散乱信息归入固定字段。
Verifier—— 负责"挑错补漏"
拿到 Description Agent 整理好的字典,逐项检查:
-
字段是否完整?有没有漏掉关键输入?
-
描述是否准确?和原文档对得上吗?
-
步骤是否清晰可执行?
给出反馈,让 Description Agent 修订,迭代直到字典质量合格。
两者形成 propose-and-verify 的协作:一个负责填,一个负责查,反复几轮保证信息齐全且正确。
渐进式编码与提示优化模块(Progressive Coding & Prompt Optimization)
按规划逐个实现子功能并集成:
渐进式编码:依 LLM 对不同语言熟练度,先生成伪代码 → Python → C++,用高层代码引导低层实现;每步由 Verifier 评估并修正,测试用例取自规格或由高层代码生成,无外部用例时进行自校验。
提示优化(Prompt Optimizer Agent):避免 Coder ↔ Verifier反复循环造成的token浪费
-
收集实现日志:在当前子函数的 Coder-Verifier 循环过程中,系统记录每一轮的失败信息、错误类型、Verifier 反馈等,形成 implementation log。
-
分析与提炼:Prompt Optimizer Agent 读取这份日志,extracts learnings——也就是从多次失败中归纳出共性模式/教训。它不是简单复读错误,而是抽象出"以后该注意什么"。
-
改写 Coder 的提示:把提炼出的经验作为额外 hint 注入 Coder 的 prompt,使下一次(以及后续子函数的)生成更精准。
自适应反思模块(Adaptive Reflection)
应对子函数级测试用例稀缺、错误跨模块传播问题:
Analysis Agent:审查整体生成轨迹,汇总已完成工作并定位潜在错误源。
Reflection Agent:在四种策略中选择最合适动作:
-
指令错误 → 回到理解模块重新生成指令;
-
前序子函数错误 → 回退修正;
-
当前子函数错误 → 在编码模块内重新生成并给出针对性反馈;
-
来源不明 → 汇总情况请求人工干预。

代码优化与转换模块
由 Code Optimizer Agent 按 Stratus HLS 教程规则适配 C++ 代码(数据格式、静态内存等)。
使用 Stratus HLS 工具将优化后的 C++ 转为目标 RTL。
人类干预
两种情况需要在reflect阶段agent要求人类干预:规范文档中的描述不准确或需要更高级的调试技术
即使反射代理无法确定正确的解决方案并需要人工干预,它通常也能提供对情况的良好理解

Benchmark
从 NIST 开发的联邦信息处理标准 (FIPS) 中选择了三个标准规范文档的子集。这些文档包括高级加密标准 (AES) 、数字签名标准 (DSS) 和密钥哈希消息身份验证代码 (HMAC)
听不懂,但感觉比fifo高级不少