2023年注定是 AI 时代开启的元年,ChatGPT 为各行各业都带来了新的发展驱动力,芯片验证领域也没有落后;这一年来,AI 技术的进步引发了很多人的思考,AI 如何引入到各个行业内部,成为了每个领域都在探讨的问题。但是其实,AI (机器学习 MachineLearning, 后称为ML),在芯片验证领域的探索,已经有很多前人的探索了。
首先说,统计学支撑起了AI发展的基础,它的技术发展需要大量数据的支持,而 DV 在仿真过程中会产生大量的数据,这使得二者成为天作之合,DV 急需 AI 的自动化提升其生产效率。那我们就来看看 AI 在芯片验证领域的发展如何呢?
本文译自于:DVCov US 2023:A Survey of Machine Learning Applications in Functional Verification.
目录
0 前言
现代硬件设计的功能要求不断增加,这意味着传统的功能验证过程在满足设计上市时间目标方面变得效率低下。 大量的事实证明,机器学习 (ML) 模型对于流程主要部分的自动化非常有价值,而这些部分通常占用了工程师的精力; 使他们不再需要添加新的覆盖率指标来使设计更加稳健。
其实最早的 ML(Machine Learning) 在 Functional Verification (功能验证,后面简称FV)中应用的探索可以追溯到2000年前后[1],具体大家可以参考 “Coverage Directed Test Generation automated by Machine Learning – A Review”。
而目前许多ML算法已经在功能验证的不同领域进行了尝试,并取得了不错的效果。ML在功能验证中的应用主要分为:需求工程、静态代码分析、验证加速、覆盖率收集和BUG的检测及定位。
1 需求工程
需求工程(Requirement Engineering)一般指定义、文档化和维护验证需求的过程,这也是保证最终的设计符合spec的重要一环。
1.1 需求定义
需求定义(Requirement definition)将自然语言(NL)的验证目标转化为标准化的验证规范。传统的验证flow需要多次手动校对以确保质量,借助机器学习,目前有两种经典的方法进行自动化翻译。
第一种方法是引入约束自然语言(CNL)进行描述需求,然后使用基于模板的翻译引擎进行翻译。只要CNL配套的工具足够强大,CNL可以描述FV中遇到的大多数需求。但这需要开发人员学习新的语言,具有一定的门槛。
第二种方法是使用经典的自然语言处理(NLP)来解析自然语言(NL)的需求,提取出关键要素。
随着大模型的训练和演进,后续可以直接将自然语言的需求翻译为SystemVerilog、Assertions (SVA)、Property Specification Language (PSL)或其他语言。目前已经有一些端到端的翻译尝试,但离大规模使用还有比较大的gap,主要的障碍在于训练数据集的稀缺。
1.2 代码总结和翻译
Code summarization and translation to NL,与需求定义相反,将代码翻译成自然语言。可以帮助开发人员理解一些复杂的逻辑代码,提升代码的可维护性和可读性。
但目前,IC设计验证领域的Code summarization几乎没有尝试。不过跨语言模型的发展或许有助于将其他编程语言的实践经验转移至IC设计。需要注意的是,IC设计和验证的code存在语义的并发,如fork,module等,这在其他语言中并不常见。
1.3 特性挖掘
特性挖掘(Specification mining)在软件工程领域比较常见,Dallmeier、Valentin等人以及Wenchao、Forin和Seshia等人都曾对进行研究。Specification mining从待测试设计(DUT)的执行中提取规范的方法,用于替代手写spec的方法。机器学习可以从仿真中挖掘到某些重复的模式,可能是DUT的预期行为。此外很少出现的事件模式可以视为异常,也可用于debug和调试。
Azeem等人提出了一种通用的软件工程方法,利用机器学习来寻找spec,并找到可能存在问题的协议实现。
2 代码分析
芯片开发中的错误修复成本呈现一种指数级增长的规律,越是靠后的开发阶段,其错误修复成本越高。因此静态代码分析(Static code analysis)可以作为设计开发早期阶段的一种有效手段,用来改进代码质量和可维护性。
2.1 代码质量评价
Code smell detection and quality assessment.
Code smell指那些功能正确,但是维护性以及可读性差,违反一些规范或者最佳实践。典型的例子就是在多处重复编写相同功能的代码。
常见的code smell检测,依赖于定义好的规则来识别源代码中的问题。而机器学习的方法是,在大量可用的源代码上进行训练,以识别出code smell的模式,而不是手动编写这些规则或指标。Fontana等和Aniche等所述的研究表明,使用机器学习的方法可以显著减少模式实现的工作量,并帮助开发人员持续改进产品质量。此外,基于机器学习的代码重构可以为改善code smell提供有用的提示,甚至进一步提供更改方案。
遗憾的是,这方面的应用在FV中还不太明显,而且缺乏大规模的训练数据集也是其重要的阻碍因素。
2.2 辅助代码
简单的代码补全或者提示是集成开发环境(IDE)的标准功能,开发人员的效率也可以得到提升。而深度学习则提出了更高级的技术,并且正在快速迭代成熟。现在可以从许多大规模开源代码库中训练具有数十亿个参数的人工神经网络(ANN),并给出开发人员实现意图或基于上下文的合理代码片段的建议。
ML也有可能帮助IC开发人员通过语义代码来进行搜索,通过自然语言查询来检索相关代码。虽然理论上,应用于其他编程语言的相同ML技术可以应用于IC设计,但目前还没有相关的研究。
3 验证加速
Verification Acceleration包括Formal和Simulation-based两种。
3.1 Formal verification
Formal使用形式化数学算法来证明设计的正确性。作为一种统计方法,机器学习虽然不能直接解决Formal验证的复杂度问题,但是在资源调度方面很有帮助。通过预测计算资源和解决问题的概率,然后以最佳方式利用这些资源来缩短验证时间 ,即先调度具有更低计算资源消耗、可求解成功的任务。基于Ada-boost决策树的分类器可以将成功解决的比例从95%提高到97%,平均加速1.85倍。另一个实验能够预测Formal验证的资源需求,平均误差为32%。
3.2 Simulation-based verification
和Formal验证不同,simulation通过对DUT添加随机或固定模式的激励,把DUT输出和参考输出进行比较,以验证设计行为的正确性。基于simulation的功能验证也是芯片开发流程中耗时较长的一步。
机器学习在该领域的一个可能思路是对复杂系统的行为进行建模和预测。多层感知器(MLP)(一种至少具有一个隐藏层的前馈人工神经网络)可以以任意精度逼近任何连续函数。而标准化循环神经网络(RNNs)(一种特殊形式的人工神经网络)则可以逼近任何具有存储器的动态系统。先进的机器学习可以使人工神经网络可以对一些IC设计模块的行为进行建模,以加速其仿真。根据人工智能加速器的能力和机器学习模型的复杂性,可能会实现显著的加速。
4 测试激励产生和覆盖率收集
由于覆盖率收敛的“长尾”性质,即使是微小的效率改进也很容易导致仿真时间显着减少。所以绝大部分关于 ML 在 功能验证中的应用的研究都集中在这个领域。这也将是 AIDV 的收益最大的领域。
一些研究表明引入机器学习,可以获取比随机测试更有效的case。大多数研究也都是基于“黑盒模型”,假设DUT是一个黑盒,其输入有测试激励控制,并监测输出。其重点是从历史输入/输出/观测数据中学习,进而调整随机测试生成器或减少不必要的测试上,而不是试图学习DUT的行为。
在另一研究中,使用基于强化学习(RL)的模型来从DUT的输出中学习并预测缓存控制器的最有效的case。当ML模型给出的反馈是FIFO深度时,模型能够从历史结果中学习,并在几次迭代中达到FIFO深度的全覆盖,明显优于基于随机测试的方法。但文中没有进一步实验证明在更复杂的设计中的表现,在较为复杂的设计中,反馈不容易定义。
另一项研究引入了一个更精细的ML架构,对每个覆盖点都训练一个ML模型。还采用了三进制分类器:是否应模拟测试、丢弃或用于进一步训练模型。使用支持向量机(SVM)、随机森林和深度神经网络对CPU设计进行了实验,结果表明,达到100%的覆盖率时,模型能够减少67% ~ 80%的case数量。对存在状态机设计的结果表明,与定向序列生成相比,减少了69%和72%。
[1] 中对基于 ML 的覆盖定向测试生成 (CDG) 进行了更全面的回顾,概述了几种 ML 模型及其实验结果。贝叶斯网络遗传算法和遗传编程方法、马尔可夫模型、数据挖掘和归纳逻辑编程都是取得不同程度成功的实验。在讨论的所有方法中,机器学习模型可以根据从其收集的历史数据中学习来进行预测,但预测未来的能力很小,即哪种测试可能是实现未覆盖的测试目标的更有希望的选择。由于尚无法获得此类信息,他们最多只能选择与历史测试最不相关的测试。
另一项研究中进行的一项有前途的实验探索了一种不同的方法,其中 DUT 被视为白盒,代码被分析并转换为控制/数据流图(CDFG)。在经过训练的图神经网络(GNN)上进行基于梯度的搜索,用于为预定义的测试目标生成测试。当使用 50% 覆盖点进行训练时,IBEX v1、v2 和 TPU 上的实验在覆盖预测方面分别达到了 74%、73% 和 90% 的准确率。几个额外的实验也证实了所采用的梯度搜索方法对 GNN 架构不敏感。
但是,上面的这些研究都仅针对自有的设计进行,其模型的训练结果无法作为先验知识,被其他模型使用。其原因也是模型的训练数据不可用。
5 Bug analysis
Bug analysis是指找出潜在的bug,定位包含bug的代码块,并提供修改建议。机器学习已用于帮助开发人员识别设计中的bug,并更快地修复bug。
Bug analysis需要解决三个问题:通过其根本原因进行bug聚类、分类根本原因和提供修改建议。大部分的研究集中在前两个问题上,还没有第三个问题的研究结果。
在研究中的方法,使用半结构化的模拟日志文件。它从日志文件中提取元数据和消息行的616个不同特征。机器学习可以预测哪些提交最有可能包含bug,可以显着减少手动bug-hunting的时间。但是,由于采用的ML技术一般相对简单,无法兼顾代码中多样化的语义,以及无法从历史bug修复中学习。因此,这些模型一般也无法解释bug发生的原因和方式,无法自动或半自动地修复bug。
6 ML前沿技术及其在FV中的应用
近年来,机器学习技术、模型和算法方面取得了重大突破。如果将这些新兴技术引入到FV中,则有希望可以解决FV面临的诸多难题。基于大量文本语料库训练出的具有数十亿参数的自然语言处理模型,表现出接近或超过人类水平的性能,例如问答、机器翻译、文本分类、概括性总结等。
在代码分析中应用这些研究成果,也展示了这些模型的优势。这些模型可以吸收大量的训练数据,将所学习的知识进行结构化,并提供易于访问的方式。这种能力在静态代码分析、需求工程和代码辅助工具中是非常重要。
图形神经网络(GNN)的进展为FV带来了新的机遇。其研究将设计转换成一种代码/数据流图,然后进一步使用GNN来帮助预测case的覆盖率。这种白盒方法可以洞悉设计中的控制和数据流,从而生成针对性的测试。图形可以表示在验证过程中遇到的复杂多样化的关系、结构和语义信息。进而通过在图上训练机器学习模型,可以为许多FV问题提供解决方案,例如bug analysis和coverage closure。
7 大规模开源验证数据现状
尽管在 FV 中应用机器学习取得了一些不错的研究成果,但要实现成熟和大规模的应用,还必须解决许多难题。其中最大的挑战是缺乏训练数据集。
由于缺乏大型数据集,许多研究只能采用相对原始的机器学习技术,这些技术只需要数百个样本的小型训练数据集。这种情况不利于高级机器学习技术和算法的应用。IC设计一直以来是私有化的,设计及其关联的验证数据(包括验证计划、仿真设置、断言、回归结果、仿真日志、覆盖数据、跟踪文件、修订和提交)都是其公司内部的商业秘密数据。一项调查显示,典型的机器学习项目会花费团队高达70%的时间用于数据准备。包括数据清理、报告和可视化。
缺乏高质量的训练数据和高成本的数据准备是研究 FV 的机器学习面临的重大障碍。目前很少有研究人员愿意公开分享他们的数据、代码或机器学习模型,因此其研究结果难以被其他研究人员重复或验证。
在2022年5月在GitHub、RISC-V和OpenCores上的搜索结果,在开源可用的设计数据有限,验证数据更少。
共约1000万行代码和注释,这个规模几乎无法与其他流行编程语言中的数百万个项目和数十亿行源代码相比。更重要的是,与验证相关的数据非常稀缺。即使可以从源代码集中生成验证数据,但也必须投入巨大的人力来进行仿真验证,以提取有效数据。
8 业界观察
如果机器学习能在FV中的成功应用,除了数据的稀缺性问题外,还有几个问题需要解决。
模型泛化是许多机器学习研究结果中最常见的挑战之一。泛化能力衡量了将训练出来的模型应用于新问题时的易用性。在特定类型的设计、编码风格、某些特定项目或某些小众数据的数据集上训练出的模型,可能无法很好地适用于其他领域。如果模型无法做到很好的泛化能力,其工业应用价值非常有限。
模型的可扩展性是另一个挑战。一个模型可能在相对简单的设计中表现得很好。然而,无法保证它在应用于数十亿个RTL门的大型设计,以及来自多个开发团队的代码时能够同样有效。模型压缩投入、额外的计算资源,都是引入机器学习需要考虑的成本。
第三个挑战与机器学习应用中的数据管理有关。在实际应用中,用于训练机器学习模型的数据集所有者、FV工具开发者和工具用户可能属于不同的组织。结合计算能力的分布和 MLOps 专业知识的可用性,他们共同决定了选择哪些机器学习模型。例如,数据私有化,而且没有机器学习基础设施的组织,可能无法使用需要大量计算的机器学习模型。
9 总结
FV本质上是一个数据分析问题,尽管使用了不同的机器学习技术,但研究大多仍采用原始的机器学习技术,并受到训练数据规模的限制。目前的机器学习应用还没有完全利用许多语义、关系和结构信息,开源和高质量的训练数据可能是目前遇到的最大问题。机器学习在FV领域的应用是非常有希望的,前途是光明的,不过目前距离大规模的应用,还须更多努力。
10 参考文献:
[1] Ioannides, Charalambos, and Kerstin I. Eder. “Coverage-directed test generation automated by machine learning–a review.” ACM Transactions on Design Automation of Electronic Systems (TODAES) 17.1 (2012): 1-21.
[2] Harry Foster, “2022 Functional Verification Study,” Wilson Research Group and Siemens EDA, https://blogs.sw.siemens.com/verificationhorizons/2022/10/10/prologue-the-2022-wilson-research-group-functional-verification-study/, retrieved on Nov. 18, 2022
[3] James, Gareth, et al. An introduction to statistical learning. Vol. 112. New York: Springer, 2013.
[4] Qiu, Junfei, et al. “A survey of machine learning for big data processing.” EURASIP Journal on Advances in Signal Processing 2016.1 (2016): 1-16.
[5] Das, Kajaree, and Rabi Narayan Behera. “A survey on machine learning: concept, algorithms and applications.” International Journal of Innovative Research in Computer and Communication Engineering 5.2 (2017): 1301-1309.
[6] Huang, Guyue, et al. “Machine learning for electronic design automation: A survey.” ACM Transactions on Design Automation of Electronic Systems (TODAES) 26.5 (2021): 1-46.
[7] Ismail, Khaled A., and Mohamed A. Abd El Ghany. “Survey on Machine Learning Algorithms Enhancing the Functional Verification Process.” Electronics 10.21 (2021): 2688.
[8] Cristescu, Mihai-Corneliu. “Machine Learning Techniques for Improving the Performance Metrics of Functional Verification.” Sci. Technol 24 (2021): 99-116.
[9] Zhao, Junchen, and Ian G. Harris. “Automatic assertion generation from natural language specifications using subtree analysis.” 2019 Design, Automation & Test in Europe Conference & Exhibition (DATE). IEEE, 2019.
[10] S. Ghosh, D. Elenius, W. Li, P. Lincoln, N. Shankar, and W. Steiner, “ARSENAL: automatic requirements specification extraction from natural language,” in NASA Formal Methods Symposium. Springer, 2016, pp. 41–46.
[11] Kansas State University CIS Department, Laboratory for Specification, Analysis, and Transformation of Software (SAnToS Laboratory), Property Pattern Mappings for LTL. Accessed: April 2019. URL: http://patterns.projects.cs.ksu.edu/.
[12] Allamanis, Miltiadis, et al. “A survey of machine learning for big code and naturalness.” ACM Computing Surveys (CSUR) 51.4 (2018): 1- 37.
[13] Zhang, Chunyan, et al. “A Survey of Automatic Source Code Summarization.” Symmetry 14.3 (2022): 471.
[14] Lemieux, Caroline, Dennis Park, and Ivan Beschastnikh. “General LTL specification mining (T).” 2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE, 2015.
[15] Dallmeier, Valentin, et al. “Generating test cases for specification mining.” Proceedings of the 19th international symposium on Software testing and analysis. 2010.
[16] Li, Wenchao, Alessandro Forin, and Sanjit A. Seshia. “Scalable specification mining for verification and diagnosis.” Design Automation Conference. IEEE, 2010.
[17] Ammons, Glenn, Rastislav Bodik, and James R. Larus. “Mining specifications.” ACM Sigplan Notices 37.1 (2002): 4-16.
[18] Azeem, Muhammad Ilyas, et al. “Machine learning techniques for code smell detection: A systematic literature review and metaanalysis.” Information and Software Technology 108 (2019): 115-138.
[19] Fontana, Francesca Arcelli, et al. “Code smell detection: Towards a machine learning-based approach.” 2013 IEEE international conference on software maintenance. IEEE, 2013.
[20] Aniche, Mauricio, et al. “The effectiveness of supervised machine learning algorithms in predicting software refactoring.” IEEE Transactions on Software Engineering (2020).
版权归原作者 Wr__ 所有, 如有侵权,请联系我们删除。