LongRTL:让大模型读懂长 RTL 的三步优化法
从 AST 图相似度到多代理重建,论文给长上下文硬件代码优化补上结构感
基于论文 LongRTL 整理
把一段几十行的 Verilog 交给大模型,它通常还能补全、改写、解释。可当代码变成几百行甚至上千行,多个 always 块、状态机、数据通路和存储逻辑缠在一起,问题就变了。模型看到的是一整团逻辑,窗口里装不下全局语义,局部改动又可能把时序和端口关系弄坏。
LongRTL 盯住的正是这个痛点。这篇 2026 年 6 月 8 日发布在 arXiv 的论文没有把希望单纯押在更长上下文模型上,而是让模型按硬件工程师的方式工作:先识别代码里的功能块,再分别优化,最后按逻辑依赖拼回去。支撑这个流程的核心工具,是 AST 图相似度。
一、长 RTL 为什么难交给大模型
RTL 优化的目标看起来直接:代码功能不变,延迟、面积、功耗尽量变好。对人类工程师来说,这常常意味着识别加法器、乘法器、状态机、存储控制等局部结构,再改写其中容易拖慢时序或浪费面积的部分。对大模型来说,难点不只在会不会写 Verilog,而在能不能在长代码里抓住这些结构。
论文指出,已有 LLM 辅助 RTL 优化大多处理短小、模块边界清晰的代码片段。真实工程里的 RTL 更常见的是扁平、长、耦合度高。一个信号可能跨越多个 always 块,一个状态变量可能同时影响数据通路和存储写使能,某处看似无害的重排,最后会变成功能不等价。
单靠把整段代码塞进提示词并不稳。上下文长度会限制模型看到的范围,代码结构缺少显式分层也会让模型难以判断哪些语句应该一起改,哪些语句必须留在原来的控制层级里。LongRTL 把问题拆成三个动作:分割、优化、重建。每一步都围绕 AST 图结构展开。

图 1:LongRTL 的整体流程,长 RTL 先被解析和分割,再由优化代理改写子模块,最后由重建代理恢复为等价的顶层设计。
来源:原论文 Fig. 1,裁剪自第 1 页,仅用于论文解读与学术交流。
二、先把代码变成结构,再让模型动手
LongRTL 的第一层抽象是 AST。RTL 代码里的 module、always、if、case、assign、端口声明、wire 和 reg,都能在 AST 中变成节点,父子边保留语法层级。相比直接看纯文本,AST 更接近工程师阅读代码时脑中的结构图:哪个控制块包住哪个计算块,哪个端口是输入,哪个变量参与输出。
论文还准备了一套可复用设计模板。模板库同时保存 RTL 文本和对应 AST 图,覆盖加法器、减法器、乘法器、移位器、比较器、优先编码器、译码器、锁存器、寄存器、计数器等常见功能。实验部分写明,模板库包含 55 个模板,覆盖 21 类 RTL 功能。
这些模板不是拿来机械替换原代码,而是给系统一个参照系。长 RTL 里的某棵子树如果和模板库中的乘法器、存储控制或状态机结构接近,分割代理就更有把握把它作为一个独立单元交给后续优化。模型获得的也不再是一段孤立文本,而是带有功能暗示和结构边界的代码片段。
三、图相似度不只看长得像
图相似度是 LongRTL 的关键。论文把 AST 节点分成操作节点和端口节点,用 one-hot 特征描述节点类型,再用 GCN 聚合邻域信息。这样,一个 if 节点不会只被看作单个词,它周围的赋值、条件、端口和子语句都会影响它的表示。
相似度分成两层。节点级相似度比较两张 AST 图中节点表示的平均余弦相似度,捕捉局部结构是否接近。图级相似度用注意力池化把整张 AST 压成图嵌入,判断整体功能轮廓是否一致。二者合在一起,既能看局部语法形态,也能看全局结构语义。
训练阶段采用对比学习。同一功能的 AST 图被当作正样本,不同功能的 AST 图被当作负样本,温度系数设为 0.1。训练目标会把功能一致的图拉近,把语义不同的图推远。对后面的分割和检索来说,这一步很重要,因为它让结构相似不只是图形相似,还尽量贴近硬件功能相似。

图 2:AST 图相似度的训练流程,GCN 负责节点编码,注意力池化形成图级表示,对比学习拉开不同功能结构。
来源:原论文 Fig. 2,裁剪自第 2 页,仅用于论文解读与学术交流。
四、Partition Agent:把长代码切在该切的地方
分割代理要解决一个很工程化的问题:哪里才是合适的切口。随机按行数切会破坏语义,按语法层级粗暴切又可能把一个功能块拆得太碎。LongRTL 采用 Tree-DP,在 AST 上自底向上寻找分割方案,让每个候选子树尽量匹配模板库里的已知设计模式。
论文给出的目标函数可以理解为,让所有子树对模板库的最佳相似度之和尽可能大。约束也很硬:每个子树必须连通,必须对应语法和语义上有效的 RTL 片段,所有子树合起来要刚好覆盖完整 AST,并且彼此不重叠。分割数 K 可以由用户指定,也可以按设计规模和优化预算自适应选择。实验中,K 从 5、10、15、20 中选取。
这个设计背后的直觉很朴素。工程师看一段大代码时,并不会从第一行到最后一行平均切块,而会先认出这是 ALU,那是状态机,这里是存储写逻辑。Tree-DP 试图把这种识别过程程序化。切出来的子树更像真实功能块,后续优化代理才更容易生成可综合、可验证的 RTL。
|
分割代理的价值不在于缩短提示词,而在于把长代码变成模型能理解、能改写、还能验证的结构化单元。 |
五、Optimization Agent:检索、生成、验证一起上
子树切好以后,优化代理开始工作。它的流程分为 Search、Retrieve、Generate、Refine。Search 阶段把目标子树编码成图嵌入,在模板数据库里找结构最接近的 AST。Retrieve 阶段取出这些 AST 对应的 RTL 实现,把结构和代码一起放进 RAG 示例。
Generate 阶段交给 LLM 产生候选改写。论文没有让模型只生成一个答案,而是引入 MCTS 探索多种改写路径。每个搜索节点对应一个候选 RTL 版本,候选质量由两部分衡量:生成后 AST 与原 AST 的结构相似度,以及延迟、面积、功耗归一化后的 PPA 指标。设计者还可以调整权重,让系统偏向低功耗或高速度。
Refine 阶段负责把不靠谱的候选挡住。候选 RTL 先做 Verilog 语法检查,再用基准输入做功能仿真,还会做 AST 级 diff,捕捉可能的逻辑漂移。只要出现语法错误、功能不等价或结构偏移,系统就把反馈放回搜索和提示中,继续生成修正版本。

图 3:优化代理的四阶段管线,系统先检索结构相似的 RTL 与 AST 示例,再用 MCTS 搜索优化候选并反复验证。
来源:原论文 Fig. 3,裁剪自第 4 页,仅用于论文解读与学术交流。
六、Reconstruction Agent:局部优化后不能随便拼
长 RTL 最容易出问题的地方,往往不是某个子模块内部,而是子模块之间的接口和控制依赖。一个子模块输出给谁,另一个子模块何时读取,顶层端口和内部信号怎样命名,这些细节都会影响最终等价性。LongRTL 因此单独设计了重建代理。
重建代理先按原始 AST 中的逻辑深度和连接关系排序,把优化后的子模块放回合理位置。接着构造 Graph-RAG 提示,把分割子树、对应 RTL、完整 AST 和原始长 RTL 一起提供给 LLM。模型生成的不只是若干片段的串联,而是一个 top.v 风格的顶层 RTL,包含端口、连线、实例化关系和控制流。
生成完成后,验证流程还会再跑一遍。论文中使用 iVerilog 做语法检查,Python 生成 testbench 做仿真,还引入 ABC 做 SAT 级组合等价检查,并用 egg 支持算术推理。这样的重建过程把模型的语言能力限制在结构约束内,减少信号错连和控制路径断裂。

图 4:重建代理按逻辑深度和连接关系组织子模块,再用 Graph-RAG 提示恢复完整顶层 RTL。
来源:原论文 Fig. 4,裁剪自第 4 页,仅用于论文解读与学术交流。
七、实验给出的信号很明确
论文的实验分成单模块长 RTL 和多模块长 RTL 两类。单模块测试包含 add64、mult32、comput、traffic、alu、radix、asyn、accu、fpu_pre、fpu_post、mc_sel、mc_rf、buffer、eth 等设计,平均 217 行、763 个节点、1005 根 wire。多模块测试包含 ac97、aes、crca、ecg,平均 1696 行、21485 个节点、21859 根 wire。
实现细节也比较完整。系统用 PyVerilog 解析 AST,用 Python 实现 Tree-DP,优化和重建代理基于 ChatGPT 4o API,图相似度模块使用训练好的 GCN。PPA 评估使用 Synopsys Design Compiler,在 ASAP 7nm 工艺节点下报告综合后的延迟、面积和功耗。
功能等价率是最先要看的指标。表 III 中,LongRTL 在 14 个单模块长 RTL 用例上达到 100% 功能等价。Yosys+Egg 也为 100%,但论文说明它没有做实质逻辑优化,所以 PPA 没有改善。GPT4o、Gemini、RTLCoder、RTLRewriter 的成功率分别是 42.9%、35.7%、42.9%、50.0%。这说明长上下文 RTL 上,能写代码和能稳定优化是两回事。
PPA 结果更能体现分割和重建的收益。单模块长 RTL 上,原始设计平均延迟、面积、功耗分别是 515.8 ps、92.0 平方微米、46.2 mW。LongRTL 优化后降到 373.1 ps、67.2 平方微米、35.1 mW,对应比例为 0.72、0.73、0.76。论文概括为平均约 25% 的 PPA 改善。
多模块长 RTL 上,LongRTL 同样优于原始设计。平均延迟从 151.6 ps 降到 121.3 ps,面积从 2268.3 平方微米降到 1990.1 平方微米,功耗从 22.2 mW 降到 18.3 mW。与 RTLRewriter 这个较强基线相比,论文报告最高约 5% 的 PPA 优势,相对原始设计平均约 15% 改善。

图 5:平均运行时间拆解,单模块用例总耗时约 360 秒,多模块用例总耗时约 700 秒,重建和验证占比较高。
来源:原论文 Fig. 5,裁剪自第 6 页,仅用于论文解读与学术交流。
运行时间也给了一个现实判断。单模块平均约 360 秒,多模块平均约 700 秒。论文指出,LLM 推理本身不是主要耗时,更多时间花在逻辑综合和仿真验证上。由于子模块可以并行处理,这个框架还有继续扩展的空间。
八、消融实验说明少了哪块都不稳
消融实验把三个部件拆开看。去掉图相似度分割后,系统改用随机子树拆分,功能等价率从 100% 掉到 55.6%,延迟和面积也恶化。这很好理解:切口不对,后面的模型再强,也是在破碎语义上做改写。
去掉多模态检索后,系统只给 LLM 常规 RTL 优化指令。功能等价率仍能保持,但 PPA 变差,延迟、面积、功耗比例分别来到 0.89、0.92、0.94,远弱于完整系统的 0.72、0.73、0.76。没有 AST 和 RTL 示例牵引,模型更容易生成泛化但不够贴合目标结构的改写。
去掉逻辑感知重建后,系统用朴素拼接处理子模块,功能等价率降到 88.9%。这说明重建不是收尾小事。长 RTL 优化真正危险的部分,常常是局部正确但全局接不上。Graph-RAG 提示把子树、原始 AST 和原始 RTL 放在同一上下文中,正是为了解决这个问题。

图 6:消融结果显示,图相似度分割影响功能等价,多模态检索影响 PPA,逻辑感知重建影响全局连接可靠性。
来源:原论文 Fig. 6,裁剪自第 6 页,仅用于论文解读与学术交流。
九、这篇论文真正补上的是什么
LongRTL 的价值不在于证明某个大模型突然具备了完整硬件优化能力,而在于给模型安排了一个结构化工作台。大模型负责生成和改写,图相似度负责找边界和找示例,综合与验证工具负责筛掉错误候选。每个环节都承认模型有能力,也承认模型会出错。
这种思路对 EDA 场景尤其重要。硬件代码不是普通脚本,改错一行可能带来综合失败,也可能在少数输入下才暴露功能偏差。LongRTL 把 AST、模板、RAG、MCTS、等价检查串成闭环,让 LLM 的生成能力被工程约束包住。
论文也留下了边界。模板库质量会影响分割和检索,验证覆盖度会影响错误发现能力,基于 ChatGPT 4o 的实现也意味着结果与模型版本和提示策略有关。文章中的实验已经覆盖较长的单模块和多模块设计,但真正工业部署还需要更大规模设计、更严格验证、更稳定的工具链集成。
即便如此,LongRTL 给出的方向是清楚的:让大模型优化 RTL,不该只追求更长窗口或更强模型,还要把硬件结构显式交给模型。长代码先被组织成图,图再变成可检索、可分割、可验证的工作单元。模型由此从盲目读长文,转向按结构处理设计。
结语
长上下文 RTL 优化难在两个字:结构。代码越长,功能边界越模糊,局部改写越容易伤到全局等价。LongRTL 用 AST 图相似度把结构重新显式化,再用分割、优化、重建三个代理把任务拆开处理。实验里的 100% 功能等价和持续 PPA 改善,说明这条路线比单纯提示大模型直接改写更稳。
对硬件设计自动化来说,这类工作值得关注。它没有把 LLM 当成万能优化器,而是把 LLM 放进一个由图表示、模板检索、综合评估和等价验证共同约束的流程里。未来真正可靠的 AI EDA 工具,大概率也会沿着这种方向演进:让模型生成,让结构导航,让验证把关。
参考资料
图片说明:文中部分图片裁剪自论文 LongRTL: Graph-Similarity-Guided LLM-driven Long Context RTL Optimization,仅用于论文解读与学术交流。文中方法、实验设置和数字均依据原论文整理。
更多推荐




所有评论(0)