这是在知乎上看到的一个问题,底下的回复中,有个答案提到了这篇论文:
在 FPGA 的群里,经常会有人讨论以后 Verilog 会如何发展?HLS 和 DLS 谁会胜出?用 Python 来写更快还是现在用的相对多一些的 Chisel 和 SpinalHDL?
自从 ChatGPT 横空出世,笔者就一直有个观点,随着 AI 的发展,未来肯定是 prompt 来直接生成 Verilog,而不是用其他高级语言来生成。我们这篇文中要讲的论文,正是如何针对大模型来优化 Verilog 代码的理解(从代码生成自然语言描述)和生成(从自然语言生成代码)。
在文章最后,我们附上了论文的下载链接。
论文正文
1. 引言
这篇论文提出了一个名为 DeepRTL 的新型统一表示模型,旨在同时提升 Verilog 代码的理解和生成能力。研究团队来自香港中文大学和国家 EDA 技术创新中心,他们指出当前大型语言模型在硬件描述语言任务中存在明显不足,特别是现有方法过于侧重代码生成而忽视代码理解,且自然语言与 Verilog 代码之间的语义对齐较弱,导致生成的代码质量不佳。
为解决这些问题,研究人员构建了一个高质量的多层次数据集,包含超过 6 万个开源 Verilog 模块和 200 多个专有 IP 模块。数据集采用创新的标注方法:开源部分利用 GPT-4 结合思维链技术生成多级描述,经人工验证准确率达 90%;专有部分则由专业硬件工程师进行精细标注。这种多层次的标注方式(涵盖行级、块级和模块级)显著提升了数据质量。
在模型设计方面,研究团队基于 CodeT5+架构,采用课程学习策略分阶段训练模型,从简单的行级任务逐步过渡到复杂的模块级任务。为准确评估模型性能,他们建立了首个 Verilog 理解基准,并创新性地引入嵌入相似度和 GPT Score 等语义评估指标,突破了传统 BLEU/ROUGE 指标的局限性。
实验结果表明,DeepRTL 在 Verilog 理解任务上显著优于 GPT-4 等大型模型,即使参数规模较小的 220M 版本也展现出优异性能。在代码生成任务中,其表现与 OpenAI 最新的 o1-preview 模型相当,某些复杂设计案例甚至达到 100%的生成成功率。研究还证实,排除过长代码片段和采用课程学习策略对提升模型性能具有关键作用。
这项工作的主要贡献在于:首次实现 Verilog 理解与生成任务的统一优化,构建高质量多层次数据集,开发更精准的语义评估方法,以及展示出超越现有大型模型的性能。尽管在输入长度和专有数据规模方面仍存在局限,但该研究为硬件设计自动化开辟了新途径。团队已公开相关代码和数据集,为后续研究提供了重要基础。未来工作将探索扩展模型上下文窗口,并尝试将 DeepRTL 应用于更广泛的 EDA 任务场景。
2. 目前这方面的研究工作
2.1 EDA 中的寄存器传输级(RTL)
RTL 是电子设计自动化(EDA)的核心抽象层,用于描述寄存器间的数据流动及逻辑操作,通常通过硬件描述语言(HDL)实现。Verilog 作为主流 HDL,在本研究中与 HDL 术语互换使用。传统硬件设计流程依赖人工将自然语言规范转化为 HDL 代码(Blocklove 等,2023),但这一过程易引入错误且效率低下。自动化转换能显著提升设计可靠性,而 AI 技术的进步(尤其是端到端代码生成能力)为此提供了可能。Verilog 的详细说明见附录 A。
2.2 LLM 在 EDA 中的革新
大型语言模型(LLM)正重塑硬件设计范式(Chen 等,2024)。研究表明,LLM 在 Verilog 代码生成(Thakur 等,2023;Liu 等,2023b)、RTL 设计(Blocklove 等,2023)及 EDA 脚本编写(Wu 等,2024)中展现出潜力,可降低专业门槛并加速开发(Fu 等,2023)。然而,现有公开数据集存在规模小(如 Thakur 等(2023)仅 200 样本)、复杂度不足(Liu 等,2023b)或标注质量存疑(Zhang 等,2024)等问题,制约了模型性能。
2.3 面向 Verilog 生成的 LLM 优化
尽管 GPT-4 等通用 LLM 具备代码生成能力(Achiam 等,2023),但其硬件设计输出仍不完善(Fu 等,2023)。近期研究通过微调开源 LLM(如基于 AST 模板的方法(Chang 等,2024b))提升了 Verilog 生成质量,但现有方法多局限于行级代码或缺乏语义关联。为此,我们构建了首个多层级(行/块/模块)对齐的自然语言-Verilog 数据集,结合开源与专有代码,同时覆盖生成与理解任务,为开发统一模型 DeepRTL 奠定基础。
2.4 课程学习的应用
受人类学习机制启发,课程学习通过渐进式训练提升模型性能(Bengio 等,2009),已在 NLP(Xu 等,2020)和代码生成(Na 等,2024)中验证有效性。本研究利用多粒度数据集,采用课程学习策略训练 DeepRTL,显著提升了其在复杂 Verilog 任务中的表现。
3. 数据集与理解基准
在本节中,我们介绍了为增强 Verilog 理解和生成而设计的数据集,该数据集通过行级、块级和模块级的详细及高层描述,将自然语言与 Verilog 代码对齐。通过整合开源和专有代码,该数据集提供了涵盖广泛硬件设计复杂性的多样化、高质量集合。我们采用 GPT-4 结合思维链(CoT)方法进行标注,人工评估显示其准确率约为 90%,验证了数据集的高质量和可靠性。此外,我们还首次引入了 Verilog 理解的基准,为评估 LLM 在解释 Verilog 代码方面的能力设立了新标准。
3.1 数据来源
我们的数据集包含开源和专有 Verilog 代码。开源部分通过 GitHub 关键词“Verilog”收集.v 文件,并将其分割为独立模块(每个模块代表 Verilog 设计中的一个功能单元)。由于当前 LLM 的上下文长度有限,这种分割对后续标注和微调的高效性和准确性至关重要。我们使用 MinHash 和 Jaccard 相似度指标进行去重,并排除主要由注释组成或缺少完整 module 和 endmodule 结构的模块。最终,我们获得了 61,755 个独特的 Verilog 模块。专有部分包含一组采购的知识产权(IP),增强了数据集的多样性和功能覆盖。这部分包含 213 个高质量、符合行业标准的 Verilog 模块,不仅提供了高级功能,还补充了开源数据中未涵盖的独特设计细节。
3.2 数据集标注
我们对开源和专有代码采用不同的标注策略。对于开源代码,我们使用当前最先进的 LLM GPT-4 结合 CoT 方法,提供多级标注。如上图所示,我们首先从原始 Verilog 代码中移除所有注释(得到精炼代码),以避免错误或误导性注释对训练的干扰。如果完整模块的 token 数超过 CodeT5+的最大上下文长度 2048,则使用 GPT-4 将其分割为更小的可管理块(如 always 块)。如果分割后的块仍超过 2048 token,则将其丢弃。对于 token 数低于 2048 的模块和块(合格代码),我们使用 GPT-4 添加信息性注释,生成带注释的代码(步骤 1)。从这些带注释的代码中,我们可以提取行级描述(单行代码与自然语言描述的配对)。为确保行内注释的准确性和相关性,我们使用 GPT-4-mini 严格检查每条注释,确保其严格限定在对应行的上下文中,不引入无关信息。例如,对于代码行 O = I1;,若标注为“当 S 为高电平时,将 I1 的值赋给输出 O”,由于无法从单行代码推断 O 是输出或 S 相关,此类描述将被视为不准确并从数据集中排除,以保证训练效果。
在步骤 2 中,我们使用 GPT-4 为步骤 1 的带注释代码生成详细规范,包括两部分:代码功能的总结(做什么)和实现过程的全面解释(如何实现)。最后,在步骤 3 中,我们将步骤 1 的合格代码与步骤 2 生成的详细规范结合,创建高层功能描述。为确保精确性,我们指导 GPT-4 专注于合格代码,仅将详细规范作为参考。最终的高层描述简洁总结了代码功能(做什么)并概述实现过程(如何实现)。这一标注阶段最为关键且具有挑战性,因为它要求模型深刻理解 Verilog,捕捉代码的高层语义。在当前基准和实际应用中,用户通常向模型提供高层功能描述而非详细实现细节,否则需投入大量精力编写详尽说明,耗时且需要专业知识。
考虑到专有代码的工业级质量,我们聘请专业硬件工程师进行标注,确保符合严格的行业标准。这些专家标注不仅精确,还捕捉了设计细节,显著提升了数据集的价值。与 GPT 生成的标注不同,人工标注额外包含中等详细程度的块级描述。
表 1 展示了标注结果的总体统计。此外,图 2 展示了一个完整 Verilog 模块的多级标注示例。值得注意的是,涵盖多级、多粒度描述的数据集将用于训练。类似的工作是 Zhang 等(2024)提出的 MG-Verilog 数据集,包含 11,000 个 Verilog 代码样本及多级自然语言描述。但其存在以下局限性:
规模较小且缺少专有 Verilog 代码,降低了多样性和适用性;
采用直接标注而非 CoT 方法,而我们的实验证明 CoT 能提升标注准确性(见 3.3 节);
我们的标注更全面,覆盖行、块、模块级及详细/高层描述,确保自然语言与 Verilog 代码的强对齐;
MG-Verilog 依赖开源 LLM LLaMA2-70B-Chat 标注,而我们使用最先进的 GPT-4。第 4.4 节将展示 LLaMA2-70B-Chat 对 Verilog 的理解较差,导致 MG-Verilog 标注质量较低。
3.3 数据集评估
为确保数据集质量,我们评估了 CoT 流程生成的标注。随机抽取 200 个 Verilog 模块,由 4 位专业 Verilog 设计师评估各级标注的准确性。结果显示:高层功能描述的准确率为 91%,详细规范的准确率为 88%,行级标注的准确率为 98%。此外,我们对比了 CoT 与直接标注方法(直接从原始代码生成标注),后者准确率仅为 67%,凸显了 CoT 流程的显著优势。
自然语言处理(NLP)领域的最新研究表明,用合成指令数据微调的 LLM 能更好地理解自然语言指令,并与任务更对齐。需注意的是,我们的工作也使用语言模型生成的数据(包括各级标注)进行微调。尽管并非所有标注都完全准确,但我们实现了约 90%的准确率。我们将不准确部分视为数据噪声,微调模型仍能从该数据集中显著受益。
3.4 理解基准
作为首个考虑 Verilog 理解任务的工作,我们引入了开创性基准,用于评估 LLM 解释 Verilog 代码的能力。该基准包含 100 个高质量 Verilog 模块,覆盖多样硬件功能,确保对不同类型硬件设计的全面评估。我们聘请 4 位经验丰富的硬件工程师为每个模块提供精确的功能和实现细节标注,并由另外 3 位工程师交叉验证,确保准确性,为未来模型评估设立高标准。该基准填补了评估 LLM 解释 Verilog 代码能力的空白,后续将公开发布。基准中的详细示例见附录 E。
4. 模型与评估
在本节中,我们将介绍 DeepRTL,并详细阐述我们的指令微调数据集的构建方式,以及如何采用课程学习策略进行训练。此外,我们还将详细介绍用于评估模型在 Verilog 理解和生成任务中性能的基准和指标。为了准确评估生成描述在语义上的精确性,我们首次采用嵌入相似度(embedding similarity)和 GPT 评分(GPT score)进行评估,这两种方法旨在定量衡量模型输出与真实标注之间的语义相似性。
4.1 模型
在本研究中,我们选择对CodeT5+进行微调,这是一个基于编码器-解码器架构的代码基础大模型(LLM),适用于广泛的代码理解和生成任务。CodeT5+采用“浅编码器+深解码器”架构,其中编码器和解码器均从预训练检查点初始化,并通过交叉注意力层连接。我们选择 CodeT5+进行微调,是因为它已在大量软件代码上进行了广泛的预训练,我们希望通过微调将其学到的知识迁移到硬件代码任务中。此外,该模型的灵活架构允许针对特定下游应用进行定制化训练任务。
CodeT5+采用了一种高效的微调策略,其中深解码器被冻结,仅训练浅编码器和交叉注意力层,从而显著减少可训练参数的数量。具体来说,我们微调了两个版本的 CodeT5+:codet5p-220m-bimodal(CodeT5+-220m)和 instructcodet5p-16b(CodeT5+-16b),分别得到 DeepRTL-220m 和 DeepRTL-16b。
4.2 指令微调数据集
在微调过程中,我们采用指令微调(instruction tuning)策略来增强 LLM 对不同类型数据和任务的适应性。由于我们的数据集包含多层次的描述,并且模型需要同时支持 Verilog 理解和生成任务,因此数据和任务的多样性较高。为了适应这种多样性,我们针对每种场景精心设计了特定的指令,以确保模型的输出能够符合预期的指令要求。图 3 展示了我们如何结合不同的设置(如任务类型、描述粒度和注释级别)来构建针对特定场景的定制化指令,从而优化微调效果。
4.3 基于课程学习的 DeepRTL 训练
我们采用课程学习(curriculum learning)策略进行微调,充分利用我们结构化数据集中不同层次、不同细节的描述。模型首先在行级和块级数据上进行微调,然后逐步过渡到模块级数据。在每个层级中,我们首先将代码与详细规范对齐,然后再学习高层功能描述。此外,在每个注释粒度上,微调通常从 GPT 标注的数据开始,然后使用人工标注的数据进行进一步优化。图 3 展示了这一过程的示意图。
我们采用这种策略,是因为将 Verilog 模块与其高层功能描述对齐是最具挑战性且最具实际应用价值的任务。这种课程学习策略使模型能够从简单到复杂逐步构建知识。因此,模型在 Verilog 理解和生成基准测试中均表现出色。需要注意的是,我们排除了基准测试中的案例,确保它们不会出现在训练数据中。
在微调过程中,我们主要遵循 CodeT5+的指令微调脚本,但将输入上下文的最大长度扩展至 2048 个 token。我们使用分布式框架 DeepSpeed,在配备 8 块 80GB 显存的 NVIDIA A800 GPU 集群上高效微调模型。在推理阶段,我们将温度参数(temperature)调整为 0.8(理解任务)和 0.5(生成任务),其他超参数保持默认值以确保最佳性能。
4.4 理解任务评估
为了评估 LLM 在 Verilog 理解任务中的能力,我们使用第 3.4 节介绍的基准测试。该评估衡量生成描述与真实摘要之间的相似性。以往的研究通常使用 BLEU 和 ROUGE 分数进行评估。BLEU 通过计算生成文本中 n-gram(即连续的 n 个词)在参考文本中的出现比例(侧重精确率),而 ROUGE 则统计参考文本中的 n-gram 在生成文本中的出现比例(侧重召回率)。然而,这两种指标主要衡量词汇重叠而非语义相似性,可能无法全面反映生成描述的准确性。
为了解决这一局限性,我们首次采用嵌入相似度和 GPT 评分进行评估。嵌入相似度通过计算生成描述和真实描述的向量表示之间的余弦相似度来衡量语义对齐,其中向量表示由 OpenAI 的 text-embedding-3-large 模型生成。GPT 评分则利用 GPT-4 对描述之间的语义一致性进行量化,评分范围为 0 到 1(1 表示完全语义对齐)。这些指标通过捕捉描述的语义本质,提供了比传统方法更准确的评估方式。。
4.5 生成任务评估
为了评估 LLM 在 Verilog 生成任务中的能力,我们采用 Chang 等人提出的最新基准测试,该基准基于先前成熟的 RTLLM 基准进行了扩展。Chang 等人的基准测试涵盖了三大类别的广泛复杂度:算术运算、数字电路逻辑和高级硬件设计。与以往研究相比,该基准测试纳入了更多具有挑战性和实用性的 Verilog 设计,从而更全面地评估模型的代码生成能力。
评估重点关注两个关键方面:语法正确性和功能准确性。我们使用开源模拟器 iverilog 来评估 LLM 生成的 Verilog 代码的语法和功能正确性。在评估指标方面,我们采用广泛使用的 Pass@k 指标,即如果生成的 k 个代码样本中有任何一个通过编译或功能测试,则认为问题已解决。在本研究中,我们设置 k=1 和 k=5,更高的 Pass@k 分数表示模型性能更好。
为了进一步区分模型的能力,我们统计 5 次生成样本中通过测试的比例,并计算平均成功率。对于语法正确性,该成功率衡量的是成功编译的代码比例;对于功能准确性,则衡量通过单元测试的比例。
5 实验结果
5.1 基线模型
作为基线模型,我们选择了 OpenAI 的 GPT-4-turbo(GPT-4)和 GPT-3.5-turbo(GPT-3.5),以及 o1-preview 模型(OpenAI 最新的推理模型,旨在解决包括编程在内的复杂问题)。这些模型是目前最先进的通用大语言模型(LLM),在 Verilog 生成任务中表现出色。
5.2 Verilog 理解
如表 2 所示,DeepRTL 在所有评估指标上均显著优于 GPT-4。传统的 BLEU 和 ROUGE 等指标由于无法准确捕捉语义相似性,评估结果不一致:例如,DeepRTL-16b 在 BLEU-4 和 ROUGE-L 上表现最佳,而 DeepRTL-220m 在 ROUGE-1 和 ROUGE-2 上领先。相比之下,嵌入相似度(Embedding Similarity)和 GPT Score 能更准确地评估模型对 Verilog 代码的理解能力。
与 CodeT5+相比,未经课程学习直接训练的 DeepRTL-direct(DeepRTL-220m-direct 和 DeepRTL-16b-direct)的表现凸显了我们数据集的有效性。而采用课程学习策略后,模型性能进一步提升,证明了该方法的优势。此外,LLaMA2-70B-Chat 的较差表现也印证了 Zhang et al.(2024)的 MG-Verilog 数据集标注质量不可靠。
为进一步验证模型性能,我们进行了人工评估,结果显示 DeepRTL-220m、GPT-4 和 o1-preview 的准确率分别为 78%、72%和 67%。这些结果与嵌入相似度和 GPT Score 的评估趋势一致,进一步证明了这些评估方法的有效性。我们发现,DeepRTL-220m 优于 DeepRTL-16b,这可能是因为 CodeT5+-220m 在大量成对的软件代码和自然语言数据上进行了预训练,从而实现了更好的代码-语言对齐。相比之下,CodeT5+-16b 主要在软件代码数据上预训练,并在合成指令数据上微调,缺乏稳健的代码-语言对齐能力。此外,尽管 DeepRTL-220m 规模较小,但其性能超越了许多数十亿参数规模的模型,这归功于我们数据集的高质量和课程学习策略的有效性。
5.3 Verilog 生成
鉴于 CodeT5+和 DeepRTL-direct 在 Verilog 理解任务中表现不佳,我们的比较主要聚焦于 GPT 系列模型。如表 3 所示,OpenAI 的 o1-preview(专为复杂编程任务设计的最新模型)在所有指标上均表现最佳。尽管如此,我们的 DeepRTL 模型在多项指标上与 o1-preview 表现相当,并在语法正确性、Pass@1 功能准确率和整体功能成功率上显著超越 GPT-4。值得注意的是,DeepRTL 在成功案例中生成的代码准确率极高,通常能在 5 个生成样本中达到 100%通过率,这证明了其在实践中的可靠性。此外,考虑到 OpenAI 的模型得益于庞大的参数量和多样化的预训练数据,我们规模更小的 DeepRTL 模型的表现尤为突出。
6. 总结
在本研究中,我们提出了 DeepRTL,这是一种新颖的统一表示模型,能够同时实现 Verilog 代码理解(从代码生成自然语言描述)和代码生成(从自然语言生成 Verilog 代码)。该模型基于精心构建的多层次数据集进行微调,该数据集包含行级、块级和模块级的 Verilog 代码描述,既有详细实现说明,也有高层功能描述。
DeepRTL 不仅弥补了以往方法仅关注 Verilog 代码生成的不足,还确保了 Verilog 代码与自然语言之间的强语义对齐。此外,我们建立了首个评估大语言模型(LLM)Verilog 理解能力的基准。为了克服传统指标(如 BLEU 和 ROUGE)仅能衡量词汇重叠的局限性,我们采用嵌入相似度(Embedding Similarity)和 GPT 评分(GPT Score)来评估模型的理解能力。这些指标能更准确地衡量描述的语义相似性,从而更好地反映生成描述的精确度。
通过采用课程学习(Curriculum Learning)策略,DeepRTL 在 Verilog 理解和生成任务上均表现出卓越性能。具体而言:
- 在 Verilog 理解任务中,它在所有评估指标上均超越当前最先进的 LLM(如 GPT-4);
- 在 Verilog 生成任务中,其语法正确性和功能准确性与 OpenAI 的 o1-preview 模型相当。
论文下载:
链接: https://pan.baidu.com/s/1fPiC...
提取码: u6un
END
原文:OpenFPGA
相关文章推荐
- VHDL 语法学习笔记:一文掌握 VHDL 语法
- 使用国产 FPGA 实现开源 10Gbps NIC Corundum
- 一周掌握 FPGA Verilog HDL 语法 day 4
- 一周掌握 FPGA Verilog HDL 语法 day 3
- FPGA 助力智能机器人应用
更多 FPGA 干货请关注FPGA 的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。