CN117422026A - 一种基于risc-v架构的处理器验证系统 - Google Patents

一种基于risc-v架构的处理器验证系统 Download PDF

Info

Publication number
CN117422026A
CN117422026A CN202311733460.0A CN202311733460A CN117422026A CN 117422026 A CN117422026 A CN 117422026A CN 202311733460 A CN202311733460 A CN 202311733460A CN 117422026 A CN117422026 A CN 117422026A
Authority
CN
China
Prior art keywords
test
interrupt
simulation
instruction
verification
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202311733460.0A
Other languages
English (en)
Other versions
CN117422026B (zh
Inventor
彭轶群
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qingdao Benyuan Microelectronics Co ltd
Original Assignee
Qingdao Benyuan Microelectronics Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qingdao Benyuan Microelectronics Co ltd filed Critical Qingdao Benyuan Microelectronics Co ltd
Priority to CN202311733460.0A priority Critical patent/CN117422026B/zh
Publication of CN117422026A publication Critical patent/CN117422026A/zh
Application granted granted Critical
Publication of CN117422026B publication Critical patent/CN117422026B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/18Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Optimization (AREA)
  • Software Systems (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Evolutionary Biology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Evolutionary Computation (AREA)
  • Operations Research (AREA)
  • Geometry (AREA)
  • Algebra (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于RISC‑V架构的处理器验证系统,将指令生成模块、程序编译模块、模拟器模块、仿真验证模块、比对检查模块和回归管理模块联系起来,通过统一的接口和交互提高验证环境的整体效率、自动化程度和可靠性;对开源指令生成器进行改造设计出适应不同功能场景的指令生成模块,确保生成的随机指令流覆盖各种场景和特殊情况;对被测对象和子系统的行为级功能进行模拟,实现全面准确的验证;利用RTL仿真日志文件与模拟器输出日志文件进行比对的方式减少验证系统对参考模型的依赖;通过并行回归多个用例、充分利用硬件资源以及优化操作流程和结果呈现的方式解决仿真效率低的问题,同时保证回归结果的正确性。

Description

一种基于RISC-V架构的处理器验证系统
技术领域
本发明属于处理器核验证技术领域,具体地说,是涉及一种基于RISC-V架构的处理器验证系统。
背景技术
在现有技术中,存在针对RISC-V的验证系统,但验证功能不够全面,无法满足对处理器所有功能点的要求。这是因为指令集里的指令有很多,同时包含一些扩展指令,不同指令间顺序的相关性和指令寄存器间数据的相关性很复杂。同时,除了指令复杂,处理器以及其子系统的行为级功能也错综复杂,很多功能场景难以进行激励的模拟。再者,现有的验证系统比较依赖一套完善的参考模型,或者依赖固定的模拟器,导致只有参考模型和模拟器支持的功能点才会被验到。
如果借助指令生成器RISCV-DV来生成随机指令,在指令生成的过程中会遇到许多困难:例如,64位指令的生成约束和指令流处理会比较复杂;例如,一些特殊的定向指令流不方便插入到随机指令流中;例如,后增访存类指令会比较特殊;例如,浮点指令对于输入输出特殊值的能力差;例如,循环取址指令流不能按处理器规格书要求生成等。
现有的验证系统对参考模型(如模拟器)的依赖较高,比较依赖一套完善的参考模型,或者依赖固定的模拟器,导致只有参考模型和模拟器支持的功能点才会被验到;有些无法进行中断、调试和异常的比对;有些不支持复位、安全域、低功耗、外部存储读写等;有些可能打乱指令执行顺序的功能,也无法支持比对。
现有的验证系统由于处理器核内空间有限,无法支持大规模指令的随机仿真,从而无法完成高质量和高随机化的回归测试。同时,当程序指令较多或回归用例过多时,现有验证系统会面临效率问题和抢占共享资源的问题,影响验证进度和验证正确性。此外,现有系统对用户不够友好,环境复杂,操作繁琐,结果不够直观,缺乏自动化。
而且,现有的RISC-V架构系统中缺乏完善的构建系统,无法有效地将验证环境的各个组件联系起来,缺乏自动化和规范化的管理构建系统。
发明内容
本发明提供一种基于RISC-V架构的处理器验证系统,可以验证RISC-V架构被测对象包括非特权功能和特权功能的全部功能点的系统,能够有效应对指令集复杂性、指令相关性和数据相关性等挑战;同时通过设计适应不同功能场景的指令生成模块,以及针对被测对象和子系统的行为级功能进行模拟,实现全面而准确的验证。
本发明采用以下技术方案予以实现:
提出一种基于RISC-V架构的处理器验证系统,包括:
指令生成模块,为程序生成部分,生成包含随机指令流的汇编程序;其中,当验证特权功能时,在随机指令中加入以若干条存储指令结束的握手数据,以实现基于存储指令将握手数据存储到指定的签名地址;
程序编译模块,包括汇编程序所用到的编译器、连接器和反汇编器、编译所生成的结果文件资源库、以及验证系统的编译工具调用脚本;
模拟器模块,包括模拟器和模拟器输出日志文件的参考模型资源库,以及模拟器调用脚本;
仿真验证模块,包括UVM测试环境、被测对象和UVM_TEST,以及用于构建、控制和管理仿真的主脚本、项目管理脚本和Makefile;所述UVM测试环境由UVM代理和虚拟序列器构成;所述UVM_TEST调用虚拟序列器动态生成用以描述不同测试场景和测试用例的随机激励;所述UVM代理包括内核输出代理,所述内核输出代理包括内核输出监测器,用于:监测被测对象实时信号变化,并将关键信号的变化信息输出到被测对象信号监视输出的RTL仿真日志文件中,以及,监测签名地址的写入操作,将写入操作的相关信息传输到UVM测试环境,以使UVM测试环境接收到签名地址上的相关信息后,执行对应特权功能的测试事务或比对操作;
比对检查模块,用于对处理器的RTL仿真日志文件与模拟器输出日志文件进行比对来检查仿真验证结果的正确性;
回归管理模块,用于在处理器修改或添加新功能后重新运行测试用例,通过回归管理脚本进行大规模随机并行回归,并将回归结果进行可视化展示。
与现有技术相比,本发明的优点和积极效果是:本发明提出的基于RISC-V架构的处理器验证系统,首先设计了一种完善的构建系统,将验证环境的激励生成、编译、仿真、比对和回归等组件联系起来,实现自动化和规范化的管理,通过统一的模块接口和交互流程,提高验证环境的整体效率、自动化程度和可靠性;通过对开源指令生成器进行改造,设计出适应不同功能场景的指令生成模块,确保生成的随机指令流覆盖各种场景和特殊情况;针对被测对象和子系统的行为级功能进行模拟,实现全面而准确的验证;利用输出RTL仿真日志文件与模拟器输出日志文件进行比对的方式来减少验证系统对参考模型的依赖;通过并行回归多个用例、充分利用硬件资源以及优化操作流程和结果呈现的方式解决仿真效率低的问题,同时保证回归结果的正确性,回归过程规范化和自动化。
第二方面的,现有的对于诸如中断调试的特权功能验证完全依赖于模拟器,而本发明中,不需要依赖模拟器,采用生成随机指令时插入握手数据段的方式,在特权功能测试时向签名地址写入握手数据,以使UVM测试环境获知在哪个点进行特权功能验证,从哪个点进行比对等,结合内核输出监视器在验证期间对被测对象实时信号变化进行监测,并将关键信号输出到RTL仿真日志文件中,这种方式下,当模拟器不支持诸如中断调试等的特权功能验证时,可以通过验证平台自我检查实现特权功能的验证,无需依赖特权模拟器的支持,从而解决特权功能验证必须模拟器支持的难题,实现验证平台与非特权模拟器的协同工作。
第三方面的,因为本发明的设计,对于中断、复位、低功耗、安全域和外部存储读写等测试,采用UVM_TEST就可以实现,模拟器可以不支持这些特权功能的设计,降低了对模拟器设计的要求。
第四方面的,基于本发明的验证系统,不需要像现有验证方式一样进行实时比对,只需在验证最后对RTL仿真日志文件和模拟器日志文件进行比对,除了比对最终结果,在日志文件中还以数据结构记录写寄存器的行为(写的什么、写到哪、用哪条指令写的寄存器等),通过数据结构的记录,可以快速定位验证发生问题的位置和原因。
结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。
附图说明
图1为本发明提出的基于RISC-V架构的处理器验证系统的系统架构示意;
图2为本发明提出的UVM测试环境的结构示意。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步详细的说明。
本发明提出的基于RISC-V架构的处理器验证系统,旨在解决现有处理器验证中存在的如下问题:
问题1.现有针对RISC-V的验证系统的验证功能不够全面,无法满足对处理器所有功能点的要求,原因在于:(1)指令复杂:指令集里的指令有很多,同时包含一些扩展指令,不同指令间顺序的相关性和指令寄存器间数据的相关性复杂。(2)激励模拟难度大:处理器以及其子系统的行为级功能错综复杂,很多功能场景难以进行激励的模拟。(3)现有验证系统依赖一套完善的参考模型,或者依赖固定的模拟器,导致只有参考模型和模拟器支持的功能点才会被验到。
本发明的解决方案:提供一种全面验证处理器功能点的系统,有效应对指令集复杂性、指令相关性和数据相关性,通过设计不同功能场景(基础指令、中断、调试、异常、复位、安全域、低功耗、外部存储读写等)的激励生成模块(覆盖指令生成模块和仿真验证模块中的UVM_TEST),以及针对处理器内核和子系统的行为级功能进行模拟,实现全面而准确的验证。
问题2. 如果借助指令生成器RISCV-DV来生成随机指令,在指令生成的过程中会遇到诸如以下所述的困难:64位指令的生成约束和指令流处理会比较复杂;一些特殊的定向指令流不方便插入到随机指令流中;后增访存类指令会比较特殊;浮点指令对于输入输出特殊值的能力差;循环取址指令流不能按处理器规格书要求生成等。
本发明的解决方案:对开源指令生成器RISV-DV进行改造,确保生成的随机指令流覆盖各种场景和特殊场景,例如,克服64位指令、后增访存指令、在不同场景下指令生成和生成序列的复杂性,例如,通过将特殊的定向指令流插入到随机指令流中来保证特殊序列和场景的生成,例如,解决浮点指令输入输出特殊值的能力差的问题,例如,循环取址指令流不能按处理器规格书要求生成等。
问题3.现有的RISC-V架构系统中缺乏完善的构建系统,无法有效地将验证环境的各个组件联系起来,包括激励生成、编译、仿真、比对和回归等,因此缺乏自动化和规范化的管理构建系统。
本发明的解决方案:设计一种完善的构建系统,能够有效地将验证环境的各个组件(包括激励生成、编译、仿真、比对和回归等)联系起来,并实现自动化和规范化的管理。通过统一的模块接口和交互流程,提高验证环境的整体效率、自动化程度和可靠性。
问题4.现有的验证系统对参考模型(如模拟器)的依赖较高,比较依赖一套完善的参考模型,或者依赖固定的模拟器,导致只有参考模型和模拟器支持的功能点才会被验证到。例如,有些无法进行中断、调试和异常的比对,有些不支持复位、安全域、低功耗、外部存储读写等,有些可能打乱指令执行顺序的功能也无法支持比对。
本发明的解决方案:设计一种验证系统,减少对参考模型(如模拟器)的依赖,无论是周期精确的模拟器,还是功能全面的模拟器,还是功能不完整的模拟,都可以通过适当修改,并利用一套完善的日志输出和比对方案,来适配本系统。
问题5.现有的验证系统由于处理器核内空间有限,无法支持大规模指令的随机仿真,从而无法完成高质量和高随机化的回归测试。同时,当程序指令较多或回归用例过多时,现有验证系统会面临效率问题和抢占共享资源的问题,影响验证进度和验证正确性。此外,现有系统对用户不够友好,环境复杂,操作繁琐,结果不够直观,缺乏自动化。
本发明的解决方案:支持大规模指令随机仿真解决指令随机程度低的问题,支持多用例并行回归解决仿真效率低的问题,同时保证回归结果正确性,回归过程规范化和自动化;设计一种验证系统,解决处理器核内存储空间有限的问题,以支持大规模指令的随机仿真和高质量的回归测试。通过并行回归多个用例、充分利用硬件资源以及优化操作流程和结果呈现方式,提高验证效率。通过资源的隔离,保证并行回归时资源相互独立,保证验证结果正确性。同时,实现了回归结果可视化,回归过程一键自动化。
在详述本发明创造之前,还要对RISC-V处理器的特权和非特权功能进行简要说明。
对非特权功能的验证包括:对基本指令集执行正确性的验证、对内存访问和管理的验证和对异常处理的验证;其中,对基本指令集执行正确性的验证是验证处理器对RISC-V的基本指令集的执行是否符合规范,包括算术运算、逻辑运算等;对内存访问和管理的验证是确保处理器能够正确地执行内存读写操作;对异常处理的验证是验证处理器在面临非法指令、非法内存访问等异常情况下的正确行为,确保能够生成正确的异常向量。
对特权功能的验证包括:中断处理、调试功能、低功耗、复位和安全保护域测试;其中,中断处理是验证处理器在面临中断请求时的正确响应,包括中断相关控制状态寄存器的变化正确、中断处理程序的正确进入和退出、中断现场的保护和恢复、不同中断的优先级仲裁、中断的屏蔽和嵌套等;调试功能确保处理能够正确进入调试只读程序,调试相关控制状态寄存器的变化正确、支持断点、单步执行等调试功能;低功耗确保处理器正确进入和退出低功耗状态,中断可以成功唤醒低功耗模式等;复位确保处理器能够正确响应复位信号,包括在复位后正确初始化寄存器、清除状态,确保复位后处理器可以从复位向量所指向地址开始重新执行程序等;安全保护域测试执行特点程序,用于访问安全保护域地址,如只读程序段地址、flash地址、one-time programming(OTP)地址等,观察全保护域相关地址是否按照预期访存或禁止访问。
现有技术中,验证特权功能依赖于模拟器,原因在于:随机指令生成器的设计初衷通常是通过生成具有一定随机性的指令序列来增加测试用例的多样性,从而提高测试的覆盖率;然而,对于验证特权功能,因为这些功能通常涉及到处理器内部状态的复杂变化,如控制寄存器的写入、特权级别的切换、中断/异常的触发、安全区域内存访问权限、处理器低功耗模式切换等,这些情况的覆盖需要更为精确和细致的控制,而随机指令生成器无法在测试中充分模拟这些场景。
现有技术中,有通过一个硬件tracer作为一个执行部件,把每个周期的寄存器信息都输出为Log用于验证后比对的方式能够降低实时进行验证比对的难度的方案,但这种验证比对方式当需要进行特权相关寄存器的比对时,依然依赖于与其保持一致的支持特权功能的模拟器。且tracer将每个周期的寄存器数据都输出为Log,导致输出的数据量非常大,一旦芯片生成后,其tracer的功能和Log的格式也会固化不可修改,是这种验证比对方式局限性比较大。
综合上述要解决的问题和解决思路,本发明提出一种基于RISC-V架构的处理器验证系统,在给出一种将验证环境的激励生成、编译、仿真、比对和回归等组件联系起来的完善系统同时,结合对随机激励生成器的改造和加入握手机制,通过状态传递由验证平台自身进行特权功能点检查,不依赖特权模拟器的支持,解决特权功能验证的难题。
首先,本发明充分考虑特权模拟器的有限性,通过在验证平台中引入握手机制和验证平台的自我检查,实现验证平台与非特权模拟器的协同工作,这种协同工作允许在验证平台上引入灵活的、更全面的验证方法,以弥补模拟器的不足。
第二,通过在随机指令生成过程中加入握手用的程序段,本发明实现了处理器状态的实时传递,使得验证平台能够在运行时监测和比对处理器内部状态。比如,是否进入退出中断模式,中断相关控制状态寄存器的变化是否正确等。
第三,通过动态生成随机的特权功能相关的激励,验证平台能够更灵活地驱动特权功能。这种动态激励生成方法有助于覆盖更多的特权操作场景,从而提高验证的全面性。同时,不影响随机指令的运行和比对,可以和非特权模拟器协同工作。
第四,使用UVM监视器来进行tracer功能,但是并不是通过硬件每一个周期都去跟踪所有寄存器的变化,而是通过验证环境,只有当处理器有写寄存器行为时,才会检查并记录修改的寄存器的值(如果硬件去做这个功能,需要在流水线的不同阶段做更多的逻辑,占用更多的硬件资源和面积),这样可以减少Log的大小,并且由于使用验证平台来trace,所以trace的内容和Log的格式都是可以根据情况修改的,这样可以适配不同的模拟器,使之更灵活。
第五,通过带有时间戳的历史队列,记录不同指令写同一寄存器时的执行先后顺序和是否已经写回的状态,保证被写回的寄存器中值的变化顺序正确且写回寄存器的时间和行为按预期顺序进行比对,从而与模拟的比对顺序保持一致。之所以这样做是因为,如果几条不同的指令先后写回相同的寄存器,且有时写回的值需要跟原始寄存器中的值做比较后才能决定,那么这将依赖于指令写回寄存器的时间先后顺序,和寄存器中值的变化顺序。对于非时间精确的模拟器,这几条指令都是执行后直接出结果(先执行的指令先写回寄存器), 因此无须考虑由于执行和写回顺序不一致导致的问题。然而,处理器上执行的指令往往在执行后,需要多个周期才能出结果(这几条指令有可能后执行的指令先写回寄存器,并影响后执行指令比对的结果)。所以通过这个历史队列,可以使处理器核模拟器都按照指令写回寄存器的顺序进行对比。
基于上述,如图1和图2所示,本发明提出的处理器验证系统包括指令生成模块1、程序编译模块2、模拟器模块3、仿真验证模块4、比对检查模块5、和回归管理模块6,下面对各模块进行详细说明。
指令生成模块1,通过对RISCV-DV进行扩展和改造实现,作为验证系统的程序生成部分,负责包含随机指令流的汇编程序的生成。
为了确保处理器在收到外部激励,如中断或调试请求时,能够正确更新内部状态,同时检测所处状态和相关寄存器的正确性,本发明使用握手机制,在随机指令中加入以若干条存储指令结束的握手数据,以实现基于存储指令将握手数据存储到指定的签名地址,从而通过握手协议将信息传递给验证系统的仿真环境;在UVM测试环境中,持续监控签名地址的写入操作,表明被验证的测试对象正在执行特定的握手汇编序列,并将一些信息传输到验证系统进行进一步的分析;验证系统接收到签名地址上的信息后,执行一系列的测试事务或比对操作,从而帮助验证和比对的过程。
握手机制包括:握手数据(握手代码段)使用一小段RISC-V汇编代码生成,以一条或多条存储(store)指令结束,这些指令将握手数据存储到指定的内存地址,即签名地址(signature address)。在验证系统的UVM检测环境中,持续监控签名地址的写入操作,这将表明被验证的测试对象(DUT)正在执行特定的握手汇编序列,并将一些信息传输到验证系统以进行进一步的分析。验证系统接收到签名地址上的信息后,执行一系列的测试事务或比对操作。具体签名地址上数据的格式和含义的定义参考RISC-V DV(DesignVerification)工具。
在本发明中,引入握手数据枚举类型;首先,定义signature_type_t枚举类型,用于表示握手数据中的签名类型,包括以下几种类型:CORE_STATUS,用于向UVM测试环境传递与当前状态相关的处理器信息;TEST_RESULT,用于向UVM测试环境传递UVM仿真结果的信息;WRITE_GPR,用于向UVM测试环境发送GPR(General Purpose Register)的转储指令,随后将跟随32个写入操作,用于将寄存器x0-x31的值传递给UVM测试环境;WRITE_CSR,用于向UVM测试环境发送CSR(Control and Status Register)的写入指令,数据字的位[19:8]将作为CSR地址,紧接着的第二个写入操作将写入实际的CSR数据。
另外,还定义了core_status_t枚举类型,用于表示处理器核心的不同状态。这些状态包括已初始化(INITIALIZED)、处于调试模式(IN_DEBUG_MODE)、处于机器模式(IN_MACHINE_MODE)、处于监管模式(IN_SUPERVISOR_MODE)、处于用户模式(IN_USER_MODE)、正在处理中断请求(HANDLING_IRQ)、已完成中断处理(FINISHED_IRQ)、正在处理异常(HANDLING_EXCEPTION)、指令故障异常(INSTR_FAULT_EXCEPTION)、非法指令异常(ILLEGAL_INSTR_EXCEPTION)、加载故障异常(LOAD_FAULT_EXCEPTION)、存储故障异常(STORE_FAULT_EXCEPTION)和EBREAK异常(EBREAK_EXCEPTION)等。
本发明通过上述握手机制,能够有效地将信息从被测对象(DUT)传递到UVM测试环境,并在验证过程中进行进一步的分析和比对操作。这种握手机制的使用方式能够提高验证的可靠性和全面性,确保处理器在面对外部激励时的正确行为。
在本发明申请中,指令生成模块1是对RISCV-DV进行改造得到的,用以确保生成的随机指令流覆盖各种场景和特殊情况。例如,克服64位指令、后增访存指令、在不同场景下指令生成和生成序列的复杂性问题;例如,通过将特殊的定向指令流插入到随机指令流中的方法来保证特殊序列和场景的生成;例如,解决浮点指令输入输出特殊值的能力差的问题;循环取址指令流不能按处理器规格书要求生成等。
为了生成复杂特殊指令,对RISCV-DV随机指令生成器进行一系列约束,包括:
(1)对于64位随机指令,RISC-V处理器体系结构通常遵循跨越两个连续寄存器数据的设计,因此要求64位指令总是使用偶数编号的寄存器。在随机指令流中,RISCV-DV已经约束了一些预留寄存器,以防止一般指令使用这些寄存器。然而,对于预留寄存器中的奇数编号,由于指令字符串构造时只使用了偶数寄存器,造成原有的约束规则对于这些奇数寄存器不再适用。为了解决这个问题,本发明对RISCV-DV进行改进,引入一个新的预留寄存器列表,当64位指令中包含对奇数寄存器的约束时,将该奇数寄存器的前一个偶数寄存器存储在一个队列中,以满足特殊预留奇数寄存器的完整约束,通过这种方式,能够生成复杂特殊的64位指令,并确保对所有预留寄存器的约束都得到满足。另外,对于随机访存指令流,其存储基地址往往通过一个预留寄存器来存储,该预留寄存器不应该在这一随机访存指令流中被再次使用,此时,如果该预留寄存器为奇数编号并且该随机访存指令流包含一些64位的指令,这些64位的指令如果只被约束为不能使用上述奇数编号的预留寄存器是不足够的,还应约束其不能使用上述奇数编号的预留寄存器的前一个偶数编号寄存器,才能满足随机访存指令流基地址固定的要求。为了解决这个问题,本发明对RISCV-DV进行改进,在生成随机访存指令流时,在确定了存储基地址的奇数编号寄存器后,将奇数编号和其前一个偶数编号寄存器都加入到预留列表中,通过这种方式,能够生成含有64位特殊指令的随机访存指令流,并确保对所有预留寄存器的约束都得到满足。
在RISCV-DV中,对于随机访存指令流,存储基地址的寄存器通常被限制为固定地址,以控制访存指令的作用范围。然而,对于一些特殊的后增访存类指令(其执行后会直接修改存储基地址的寄存器中的值),通常用于在访存操作后对基地址进行更新或调整,从而改变了原本被约束为不变的基地址。为了解决这个问题,本系统在执行后增访存指令后,在接下来的访存指令执行之前还原被修改的寄存器中的基地址值。通过这样的改造,能够确保随机访存指令流中的访存地址作用域不会受到随意的改变,保持了约束的稳定性。这样可以有效地控制特殊后增访存指令对存储基地址的影响,确保指令生成的正确性和一致性。
在不同的场景下,指令生成和生成序列可能变得复杂。在RISCV-DV中,尽管可以随机生成寄存器编号和立即数的值,但无法直接随机生成指令寄存器中操作数的值,这限制了对浮点指令输入输出特殊值的能力。为了解决这个问题,本系统通过在随机指令流中插入定向指令流的方式,当即将执行浮点指令流时,随机的插入定向指令流以初始化浮点寄存器的特殊值。这样,在生成的随机指令流中,通过定向指令流可以定制浮点寄存器的特殊值,以满足特定的测试需求。除了浮点指令流,定向指令流的方法也适用于其他场景,例如,针对特定指令集扩展或特殊的处理器功能,插入定向指令流来定制寄存器或内存的特殊值,以测试功能的正确性。这可以包括输入边界条件、异常处理、数据相关性和寄存器相关性的测试等。
本发明通过改进指令生成工具,引入定向指令流的方法,可以在生成指令序列时更灵活地控制和定制各种场景下的测试需求,以实现更全面和准确的测试目标。
程序编译模块2,包含了汇编程序所用到的编译器、连接器和反汇编器,同时包含了编译所生成文件的结果文件资源库,以及该系统设计的编译工具调用脚本,该脚本使用SHELL(UNIX操作系统的命令语言)语言编写。
本发明还设计一套完善的构建系统,能够有效地将验证环境的各个组件联系起来,包括激励生成、编译、仿真、比对和回归,并实现自动化和规范化的管理,通过统一的模块接口和交互流程,提高验证环境的整体效率、自动化程度和可靠性。
首先,整个构建系统的核心是仿真验证模块中的脚本,包括主脚本、项目管理脚本和Makefile。
主脚本(Main Script):是整个验证流程的控制中心,它首先定义了一些关键的路径,用于指定各种文件的位置和目录结构。然后,通过定义宏(Define)来传递参数给仿真环境和测试平台,以配置不同的功能和选项。这些选项包含VCS编译和仿真的选项,以及一些必要的配置选项比如:批量回归测试还是单个用例、测试测试用例名、是否进行VCS编译、使用何种波形文件格式、是否使用模拟器对比、随机种子的大小、是否收集覆盖率等。接下来,主脚本会删除上次仿真留下的临时文件和目录,然后调用一个项目管理脚本(ProjectManagement Script)并传入测试用例的名称。项目管理脚本负责根据测试用例的分类执行相应的操作,比如编译和模拟器调用等。最后,主脚本会对仿真日志文件进行统计和打印,提取其中的通过和失败信息。
项目管理脚本(Project Management Script):用于配置临时参数,并根据传入的测试用例名称执行不同的任务。它可以检查编译和仿真是否成功,并根据测试用例的分类执行不同的操作。例如,如果需要使用编译器,项目管理脚本会调用编译脚本来建立临时的编译环境,并将编译生成的结果文件保存在指定目录中,以避免不同测试用例之间的资源冲突。如果需要使用模拟器,它会调用模拟器的执行脚本。最后,项目管理脚本会管理仿真产生的覆盖率文件数据,并将它们保存在固定的目录中,以方便进行覆盖率的综合分析。
Makefile:是一个用于构建和管理工程的文件,它主要用于定义 VCS 编译所需的路径,如 RTL 代码文件(Filelist 路径),以及定义 VCS 编译和仿真选项。它还定义了一系列规则,如 VCS 编译规则、VCS 仿真规则、覆盖率融合规则、查看波形规则(如 Verdi)等。通过 Makefile,可以方便地进行编译、仿真和其他相关操作。
其次,程序编译和模拟器模块也有各自的脚本:编译脚本和模拟器脚本。
编译脚本(Compile Script):主要用于配置环境变量,并根据不同的程序类型(汇编、C等)调用相应的编译命令。它会生成反汇编文件,并将编译生成的 ELF 文件转换成二进制文件,再将二进制文件转换成十六进制(HEX)文件。同时,编译脚本会保存和打印编译结果的信息,包括错误信息等。
模拟器脚本(Simulator Script):主要用于配置环境,并根据传入的测试用例名称执行模拟器命令。它会根据预先协商好的标签解析出程序的起始比对地址和结束比对地址,然后执行模拟器,并保存和打印模拟器执行结果的信息,包括错误信息等。
再者,还有RISCV-DV指令生成器的调用脚本和回归管理脚本。
RISCV-DV指令生成器的调用脚本主要用于随机指令生成的配置参数和脚本调用。
回归脚本,为一种可以利用一键定时并行回归的脚本,用来自动化多进程回归测试流程,该脚本可以完成多个测试用例的并行回归测试,并将每个测试用例的仿真结果进行分析和汇总,生成一个日志文件,然后,将日志文件转换成可视化表格的形式,用于统计回归测试的情况,包括哪些测试用例被回归了,哪些测试用例失败,失败的原因是什么,单个测试用例的随机种子和仿真命令是什么等。通过这样的表格,可以方便地还原测试用例的现场,并进行高效的调试和分析。
另外还有RTL设计和参考模型日志文件进行比对的脚本,用于比对RTL硬件电路行为和参考模型模拟器行为是否一致。
模拟器模块3,包含模拟器系统,和模拟器输出日志文件的参考模型资源库,以及模拟器调用脚本,该脚本使用SHELL语言编写。
项目管理脚本在需要使用模拟器时调用模拟器的执行脚本;模拟器脚本配置环境,根据传入的测试用例名称执行模拟器命令,它会根据预先协商好的标签解析出程序的起始比对地址和结束比对地址,然后执行模拟器,并保存和打印模拟器执行结果的信息,包括错误信息等。
仿真验证模块4,基于UVM(Universal Verification Methodology,通用的验证方法学) 框架构建,其各个子模块组件的也是继承于UVM的不同组件来实现。各个组件在UVM的UVM_ENV容器中进行连接和集成。UVM_ENV容器外还有不同的UVM_TEST,用于调用虚拟序列器动态生成用以描述不同的测试场景和测试用例的随机激励。如上面所述,仿真验证模块还包含一些脚本,用于构建控制管理整个仿真系统。其中,包括一个主脚本,整个验证流程的控制中心;一个项目管理脚本,用于配置临时参数,并根据传入的测试用例名称执行不同的任务;一个Makefile(一个用于构建和管理工程的文件),用于管理和自动化编译和运行仿真相关的任务和流程。
本发明中,仿真验证模块4由DUT(被测对象,也即处理器内核)和将围绕DUT的所有验证组件集合在一起的UVM测试环境组成,UVM测试环境集成了各个UVM_AGENT(代理)和VIRTUAL_SEQUENCER(虚拟序列器)等组件,在UVM测试环境外还有用于创建和驱动测试用例UVM_TEST。
UVM_AGENT(代理)包括:
内核输出代理,用于接收和检测被测对象的信号变化和覆盖率的收集。包括:
(1)内核输出监测器,用于检测被测对象实时信号变化,并将关键信号的变化信息输出到被测对象信号监视输出的RTL仿真日志文件中,用于后续与模拟器输出日志文件进行比对。
(2)覆盖率监视器,用于检测模块级 DUT 的关键功能信号变化,并通过功能覆盖率组进行各种覆盖点的统计,从而完成功能覆盖率统计;主要实现方法是通过SystemVerilog语言定义一些Covergroup,描述要收集的覆盖率类型和属性;然后,声明Coverpoint,定义要收集的信号或属性的覆盖率信息;在仿真过程中,使用Covergroup实例收集覆盖率数据,监控Coverpoint所依赖信号的取值变化。
(3)性能检测器,用于检测被测对象中指令从执行级到写回级的周期数,以及指令流水线冲突时流水线停顿的类型和周期数,并将相关周期数信息输出到RTL仿真日志中,用于性能的分析。
中断代理,负责中断激励的生成和中断序列的产生。包括:
(1)中断接口(interrupt interfance),用于连接被测对象的各个中断信号接口和UVM测试环境。
(2)事务(transaction)对象,用于随机生成中断激励,例如软件中断、定时器中断、外部中断、不可屏蔽中断、调试中断、异常中断等。
(3)中断序列器(sequencer),用于生成中断测试序列流,管理中断测试序列流的执行顺序并传递给中断驱动器以进行驱动;不同类型的中断可以有不同的序列,也可以将多种中断组成在一起生成复杂的随机中断序列。
(4)中断驱动器(driver),用于向被测对象接口按照一定时序逻辑发送实时中断序列,这些中断序列由中断序列器进行控制并送往中断驱动器。
存储器代理,用于对关键存储器访问的读写进行检测,还负责与被测对象的存储器进行交互,发送读写请求并检查响应。在内核验证中,其主要功能之一是对握手协议中的签名地址(signature address)进行检测,通过签名地址完成内核与UVM测试环境的握手(handshake)交互,从而对内核的状态信息进行监测。
还有其他不同类型的代理(AGENT),如总线 AGENT、JTAG(Joint Test ActionGroup,是一种用于测试和调试集成电路的标准接口)AGENT等。这些不同的AGENT负责连接和监控对应的接口,并生成相应的事务。在实现上,主要以继承第三方库提供的类来构建环境,具体需要参考相应的 VIP(Verification IP,是指在硬件设计验证过程中使用的模块化验证组件)库官方文档进行构建的编写。
虚拟序列器(VIRTUAL_SEQUENCER)将面向不同序列器(例如中断序列器)的序列群挂接到不同序列器上,用于控制测试序列的生成。它协调多个virtual sequence (虚拟序列)的执行顺序和时机,以确保测试序列按照预期顺序执行。因此,虚拟序列器可以根据测试计划和测试需求生成特定的测试序列,从而实现对验证环境的全面测试。
虚拟序列器预定义了一系列的虚拟序列(sequence),例如中断序列,用于承载不同目标序列器的序列群落,挂载到虚拟序列器上。每个测试用例(test case)都可以包含一个或多个虚拟序列,并调用其中的函数来启动和管理控制测试序列的发生。通过调用虚拟序列中的函数,测试用例可以精确地控制测试序列的生成和执行,从而验证被测设备的不同功能和场景。
UVM_TEST,在UVM测试环境外部,用于创建和驱动测试用例(test case),通过模拟被测对象的各种场景来验证被测对象的行为。UVM_TEST首先设置测试环境的初始状态,然后启动和控制一个或多个虚拟序列来模拟特定的场景。它调用虚拟序列器的特定测试序列,测试序列是一系列事务的集合,通过驱动器组件向DUT发送对应的事务,通过监视器组件捕获和分析从DUT接收到的信息,将信息转换为事务传递再给测试序列进行验证。这些组件在UVM_TEST的启动和管理下共同工作,确保了在不同操作序列下,DUT 的功能能够被全面验证。
在本发明的验证系统中,使用基础测试类(BASE_TEST)来构建、连接和执行基础、共性的测试用例。该类包含一个运行阶段(run_phase)函数,用于测试用例的主要执行过程。此外,还有一些特定功能的函数,如发送刺激信号(send_test_stimulus)函数用于向被测对象发送测试刺激信号,等待存储器事务(wait_for_memory_transaction )函数用于等待被测对象的存储器事务,等待CSR写操作(wait_for_csr_write_operation )函数用于等待被测对象的CSR写操作,等待核心状态(wait_core_status)函数用于等待被测对象的状态,检查下一个核心状态(check_core_next_status)函数用于检查被测对象的下一个状态是否符合预期,最终阶段(final_phase)函数用于测试结束后的清理工作等。通过使用这些函数和基础测试类,可以方便地构建和执行测试用例,并对被测对象进行全面的验证。
除此之外,还有一个测试库(TEST_LIB),它继承扩展了 BASE_TEST测试库类,根据验证计划中的功能点进行更具体的测试函数定义。每个测试用例都可以继承这个测试库类,从而实现不同测试程序与测试环境的联动。
基于上述验证系统,执行指令测试时,TEST_LIB中的“加载程序”函数初始化处理器内核指令存储器,将二进制文件加载到指定的内存地址中,其中,对于不同的内存模型,需要使用不同的加载方法进行处理,具体方法根据具体情况进行分析;然后,内核取值译码执行程序来完成指令的测试;最后,调用"等待程序执行完成"函数,通过握手(handshake)来通知验证系统全部指令执行结束。同时, UVM TEST会执行其他测试事务,两者同时进行,完成整个验证的全部过程。
UVM_TEST有很多,本发明实施例中的UVM_TEST包括:
1.基本指令测试;包括:
等待全面内存空间和寄存器初始化;
加载二进制文件,写入到处理器内核的指定内存地址上;
等待全部指令在被测对象中被执行;
等待过程中,每一时钟周期(每一固定单位时间)通过调用“测试完成监测事件”,来监测某一特定内存地址上是否写入了标致着仿真结束的数据信息如:0x1234567f;
如果监测到该特定内存地址上被写入了0x1234567f,则结束UVM测试环境;
2.中断调试测试,一个基本的调试中断测试函数。用于验证调试和中断处理功能的基本正确性,模拟调试事件的发生和处理过程。包括:
(1)初始化UVM测试环境并设置相关的寄存器和变量。
(2)通过调用"发送中断调试激励信号"函数发送来自虚拟序列中的中断调试激励信号,触发中断调试事件。
(3)调用"等待中断调试事件"函数等待调试事件的处理完成,确保处理器内核正确进入了中断调试模式。
(4)调用"检查中断调试事件"函数检查调试事件处理状态,验证调试事件是否被正确处理,并检查相关寄存器和变量的值是否符合预期。这里是自我检测中断事件是否正确有效的关键。
在确认调试事件处理完毕后,(5)调用"结束中断调试刺激信号的发送"函数结束调试刺激信号的发送,并等待调试事件被清除。
(6)恢复UVM测试环境,包括相关的寄存器和变量,并清理测试环境,以准备下一轮测试。
最后,(7)调用基本测试中的" check_core_next_status "函数检测处理器是否退出中断调试状态,并确保内核恢复到正常运行模式。
通过执行这些步骤,"调试中断测试"函数可以验证系统在调试事件发生时的正确响应和处理能力,以及中断调试模式的进入和退出过程是否符合预期。
3.适应不同功能场景(复位、安全域、低功耗、外部存储读写等)的库函数。包括:
(1)复位测试,该函数用于执行复位测试。首先,通过调用虚拟序列里的函数启动复位相关序列。然后,对复位次数进行随机化,比如要求复位次数大于10次。接下来,在一个循环中,根据随机化后的复位次数,模拟多次复位事件的发生和处理过程。在每次复位前,通过随机延时,模拟复位的发生时间,并在时钟上升沿时将被测对象接口上的复位信号置为低电平,再次延时后将其置为高电平。通过多次执行循环中的步骤,可以模拟多次复位事件的发生和处理过程。
(2)低功耗测试,包含了一个名为"中断等待闲置测试"的任务。该任务通过检查特定条件来执行中断等待闲置测试。在一个无限循环中,首先等待中断等待闲置使能信号条件为真,表示等待闲置状态发生。然后等待处理器内核向外部系统发送内核闲置状态使能信号。当外部系统接收到这个信号时,在时钟上升沿时,将时钟屏蔽置为低电平,模拟一定延时后再将其置为高电平,从而模拟时钟关停的场景。接着,等待系统进入低功耗状态条件为真,表示系统处于低功耗状态。之后,在时钟上升沿时,激励处理器内核唤醒使能信号为高电平,再次上升沿时将其置为低电平,用来模拟外部系统将内核从低功耗状态中唤醒。最后,在时钟上升沿时调用虚拟序列中的中断发生函数发送中断激励信号,使处理器内核结束待机状态,进入中断。通过执行这些步骤,可以模拟中断等待闲置的情况,并验证系统在接收中断信号后的处理过程和低功耗状态的切换。
(3)安全域测试,通过握手机制和签名地址的交互协议,来检测处理器内核是否将要执行安全域访存指令,然后拉高接口上的安全域加密信号,使处理器内核进入安全保护模式。另外,还可以随机拉低拉高安全域加密信号,来模拟随机指令执行时,验证系统对于随机指令执行时的安全域保护能力。
(4)外部存储读写测试,外部存储读写测试需要使用一些第三方工具,例如AMBA总线的VIP(Verification IP),来生成外部写请求和写外部地址,并将这些地址初始化为0。被测对象可以通过VIP的写请求序列来初始化外部地址,但是VIP不能初始化模拟器外部地址空间,因此可以通过让模拟器加载已经将外部地址初始化为0的程序来实现参考模型外部地址的初始化。在VIP初始化被测对象外部存储期间,可以对处理器内核进行复位,直到被测对象初始化完成,这样可以让被测对象外部地址初始化过程中不去执行其他程序。然后,处理器内核开始执行取值和执行指令,这些指令是一些访问外部存储地址的读写指令,以实现对外部地址的比对验证。通过这种方式,可以进行外部存储读写测试,并验证处理器内核与参考模型之间的一致性。在整个过程中,控制VIP写外部存储的序列和内核的复位控制等操作,通过测试库(TEST LIB)中提供的相应函数来实现。
比对检查模块5,主要用于对处理器设计RTL(Register Transfer Level,寄存器转换级电路)仿真日志文件,与模拟器输出日志文件进行加载和比对,检查仿真验证结果的正确性。
该系统可以让模拟器执行完毕后生成固定格式的模拟器输出日志。这些日志主要记录每条指令执行后写回到 RISC-V 寄存器的情况,或者寄存器的变化序列。可以根据设计的需求选择适当的输出格式。同时,在仿真环境中也生成与模拟器一致的日志文件,最后将模拟器日志文件和处理器设计 RTL(Register Transfer Level,寄存器转换级电路) 仿真日志文件进行自动比对,以验证设计的正确性。当模拟器不支持特权功能的验证时,验证系统可通过在RTL仿真日志的对应位置插特权调试开始和特权调试结束的标签;在比对的过程中,如果模拟器不支持特权功能,在比对时忽略特权调试开始和特权调试结束标签之间的全部指令PC的比对即可,不影响非特权功能的验证比对。
基于这种RTL仿真日志与模拟器输入日志的对比方式,本发明的验证系统可以减少对参考模型(如模拟器)的依赖,无论是周期精确的模拟器,还是功能全面的模拟器,还是功能不完整(例如不支持中断调试比对)的模拟,都可以通过本发明提出的修改,并利用一套完善的日志输出和比对方案来适配本系统。
回归管理模块6,在处理器修改或添加新功能后重新运行一系列测试用例,以确保修改不会对已验证通过的功能产生负面影响。主要通过回归管理脚本进行大规模随机并行回归,并将回归结果进行可视化展示。
本系统支持回归验证,当RTL代码进行修改后,进行全面的功能验证,保证修改的正确性。支持大规模指令随机仿真解决回归时指令随机程度低的问题,支持多用例并行回归解决仿真效率低的问题,同时将仿真资源独立化保证回归结果正确性,回归过程规范化。最后,使用了第三方开源工具Jenkins和可视化工具Grafana,以及mysql数据库,实现了整个回归过程的自动化和可视化。
首先,为了提高回归测试的质量,扩大单次回归的指令条数,增加测试的随机性,以覆盖更全面的测试场景。一方面利用处理器的外部存储空间,将大规模指令放在外部,并通过处理器从外部存储中获取指令执行,以实现单次仿真执行大规模指令,这样做可以增加测试的随机性和覆盖度。与此同时,结合使用指令生成器来生成大规模程序,进一步增加测试的随机性和多样性。另一方面,用RISCV-DV批量生成多个程序,从而增加仿真次数来增加测试的随机化效果。
当每个测试用例的指令数量变得非常大,且测试程序和仿真次数增多时,会面临回归测试效率的问题。为了解决这个问题,本发明充分利用仿真环境所在系统或服务器的硬件资源,实现并行执行多个测试用例的回归测试。基本思路是通过一次编译生成simv仿真文件,并利用这个仿真文件进行多次并行的回归仿真,以最大限度地节省编译和仿真时间,并充分利用硬件资源。在进行多进程的并行仿真时,需要确保构建系统能够将单次仿真的结果文件(如程序、hex文件、比对文件、日志文件等)相互隔离开,以保证多进程仿真过程中验证的正确性。
最后,为了使回归测试过程流程化和规范化,并减少重复工作,本发明利用一键定时并行回归的脚本来自动化多进程回归测试流程。该脚本可以完成多个测试用例的并行回归测试,并将每个测试用例的仿真结果进行分析和汇总,生成一个日志文件。然后,可以将日志文件转换成可视化表格的形式,用于统计回归测试的情况,包括哪些测试用例被回归了,哪些测试用例失败,失败的原因是什么,单个测试用例的随机种子和仿真命令是什么等。通过这样的表格,可以方便地还原测试用例的现场,并进行高效的调试和分析。
此外,通过 Jenkins工具以及Pipline插件来支持回归测试管理的自动化和持续集成。Jenkins提供了自动化构建、测试和部署回归流程的功能。通过配置JenkinsPipeline,可以定义和管理回归测试的整个流程。在Pipeline中,可以包含各种阶段,如构建、测试、部署等。通过编写Pipeline脚本,可以将回归测试的各个步骤自动化执行,并与版本控制系统(如Git)集成,以便在代码提交后自动触发回归测试流程。同时,使用grafana这样的可视化工具,可以将回归测试结果以图表形式展示,使得回归测试的数据更加可视化和易于理解。grafana可以与Jenkins集成,以实时更新并展示回归测试的结果和趋势。此外,为了保存回归测试的结果和相关数据,可以使用MySQL数据库或其他适合的数据库。通过将回归测试结果存储在数据库中,可以进行历史记录和数据分析,以及与其他团队成员共享和访问。
本发明上述提出的基于RISC-V架构的处理器验证系统,按照如下步骤实施验证:
步骤1:整个系统的启动开始于指令生成模块,通过激励生成脚本或者回归管理脚本,启动指令生成模块的运作。之后,激励生成脚本或者回归管理脚本的配置参数会传递到RISCV-DV的指令生成脚本中,从而根据仿真测试用例名、指令生成测试用例名、随机种子、生成汇编程序数量、每个汇编程序中指令的条数等一系列参数来生成一个或多个汇编程序。
步骤2:汇编程序生成后放置在程序编译模块的资源库中,仿真验证模块中的主脚本、项目管理脚本解析传入的参数和测试用例名称,并开始一系列构建工作,之后调用程序编译模块中的编译脚本执行编译器,对汇编文件进行编译、链接、反汇编、转二进制文件等一系列操作,最后将结果保存在独立的编译模块结果资源库中。
步骤3:编译结果资源库中的二进制文件,被模拟器模块中的脚本和仿真验证模块中的脚本同时调用,传入各自的模块中。模拟器在模拟器脚本的作用下开始模拟器的仿真,并输出模拟器输出日志文件;同时,仿真验证模块的Makefile也开始构建,并开始执行VCS编译和仿真命令;当仿真开始后,UVM测试环境外的UVM_TEST根据不同的测试用例调用不同的测试函数;对于指令的测试,先调用二进制文件加载函数,将二进制文件写入到处理器内核的指定内存地址上,同时将没有程序存放的地址和寄存器进行初始化,防止处理器运行时读取到没有初始化的不定态数据。
步骤4:在处理器内核仿真过程中,UVM_TEST直接作用于UVM测试环境中的各个组件,从而完成不同类型的功能测试。UVM测试环境实时与处理器内核进行交互,进行仿真验证,以及实时监测内核关键寄存器的信号变化,并记录成日志导出。同时,VCS编译仿真的日志文件,也会随之输出。在此过程中,如果使用回归管理脚本,进行回归验证,会批量进行测试用例的仿真和执行,并输出对应的仿真日志。
仿真的过程和实施方案将结合图2在下面的内容中详述。
步骤5:比对模块中的比对脚本加载模拟器输出日志和处理器的RTL仿真日志,然后进行比对,最后输出报告。该报告决定了仿真验证结果的成功与否。如果是回归验证,该报告中的关键信息被保存在数据库中。
如图2所示,在UVM测试环境中,首先会根据不同的UVM_TEST执行不同的测试或生成不同的测试序列。以中断测试为例,中断测试TEST会启动UVM测试环境中虚拟序列器中的序列生成任务,使中断代理中的中断序列器生成相关的随机序列,这些随机序列会在虚拟序列器中先被虚拟任务处理,然后被送到中断代理中的中断驱动器里被相关的任务所驱动,从而将随机序列直接作用于被测对象的中断信号接口上,从而完成处理器中断的随机生成。
处理器中的相关模块收到接口上的中断请求后开始进行中断相关处理,此时,内核输出代理中的监视器开始对处理器的行为(比如中断控制寄存器)的变化进行实时监控并将变化序列保存在相关序列中,直到仿真结束,再把队列中的变化序列转换成日志格式化文件输出,用于比对模块的比对。与此同时,内核输出代理中的覆盖率监视器开始收集内核仿真的覆盖率信息。
在内核仿真过程中,UVM_TEST库中的仿真结束检测任务会一直监视用于存储仿真结束状态的签名地址。一旦监测到内核进入仿真结束状态,整个仿真验证将强制结束。此时,会输出UVM仿真的日志文件、监视器用于比对的日志文件以及含有覆盖率信息的数据库文件。
应该指出的是,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的普通技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。

Claims (9)

1.一种基于RISC-V架构的处理器验证系统,其特征在于,包括:
指令生成模块,为程序生成部分,生成包含随机指令流的汇编程序;其中,当验证特权功能时,在随机指令中加入以若干条存储指令结束的握手数据,以实现基于存储指令将握手数据存储到指定的签名地址;
程序编译模块,包括汇编程序所用到的编译器、连接器和反汇编器、编译所生成的结果文件资源库、以及验证系统的编译工具调用脚本;
模拟器模块,包括模拟器和模拟器输出日志文件的参考模型资源库,以及模拟器调用脚本;
仿真验证模块,包括UVM测试环境、被测对象和UVM_TEST,以及用于构建、控制和管理仿真的主脚本、项目管理脚本和Makefile;所述UVM测试环境由UVM代理和虚拟序列器构成;所述UVM_TEST调用虚拟序列器动态生成用以描述不同测试场景和测试用例的随机激励;所述UVM代理包括内核输出代理,所述内核输出代理包括内核输出监测器,用于:监测被测对象实时信号变化,并将关键信号的变化信息输出到被测对象信号监视输出的RTL仿真日志文件中,以及,监测签名地址的写入操作,将写入操作的相关信息传输到UVM测试环境,以使UVM测试环境接收到签名地址上的相关信息后,执行对应特权功能的测试事务或比对操作;
比对检查模块,用于对处理器的RTL仿真日志文件与模拟器输出日志文件进行比对来检查仿真验证结果的正确性;
回归管理模块,用于在处理器修改或添加新功能后重新运行测试用例,通过回归管理脚本进行大规模随机并行回归,并将回归结果进行可视化展示。
2.根据权利要求1所述的基于RISC-V架构的处理器验证系统,其特征在于,所述系统在指令生成模块中引入握手数据枚举类型,包括:
定义signature_type_t枚举类型,用于表示握手数据中的签名类型,包括:CORE_STATUS,用于向UVM测试环境传递与当前状态相关的处理器信息;TEST_RESULT,用于向UVM测试环境传递UVM仿真结果的信息;WRITE_GPR,用于向UVM测试环境发送GPR的转储指令,随后将跟随32个写入操作,用于将寄存器x0-x31的值传递给UVM测试环境;WRITE_CSR,用于向UVM测试环境发送CSR的写入指令,数据字的位[19:8]作为CSR地址,紧接着的第二个写入操作将写入实际的CSR数据;
定义了core_status_t枚举类型,用于表示处理器核心的不同状态;所述不同状态包括已初始化、处于调试模式、处于机器模式、处于监管模式、处于用户模式、正在处理中断请求、已完成中断处理、正在处理异常、指令故障异常、非法指令异常、加载故障异常、存储故障异常和EBREAK异常。
3.根据权利要求1所述的基于RISC-V架构的处理器验证系统,其特征在于,所述内核输出代理还包括:
覆盖率监视器,用于检测模块级被测对象的关键功能信号变化,并通过功能覆盖率组进行各种覆盖点的统计;
性能检测器,用于检测被测对象中指令从执行级到写回级的周期数,以及指令流水线冲突时流水线停顿的类型和周期数,并将相关周期数信息输出到所述RTL仿真日志文件中。
4.根据权利要求1所述的基于RISC-V架构的处理器验证系统,其特征在于,UVM代理还包括:
中断代理,用于中断激励的生成和中断序列的产生;包括事务对象、中断接口、中断序列器和中断驱动器;其中,所述事务对象用于随机生成中断激励;所述中断接口用于连接被测对象的各个中断信号接口和UVM测试环境;所述中断序列器用于生成中断测试序列流,管理中断测试序列流的执行顺序并传递给中断驱动器以进行驱动;所述中断驱动器用于向被测对象接口按照设定时序逻辑发送所述中断序列流;
存储器代理,用于对关键存储器访问的读写进行监测,以及用于与被测对象的存储器进行交互,发送读写请求并检查响应;
总线代理,用于连接总线互联模块的指定接口;
JTAG代理,用于监控JTAG模块的指定接口。
5.根据权利要求1所述的基于RISC-V架构的处理器验证系统,其特征在于,所述UVM_TEST使用基础测试类和设定功能函数来构建、连接和执行测试用例;
所述仿真验证模块还包括一个继承扩展了所述基础测试类的测试库,用于根据验证计划中的功能点进行测试函数定义;每个测试用例继承所述测试库以实现不同测试程序与测试环境的联动。
6.根据权利要求1所述的基于RISC-V架构的处理器验证系统,其特征在于,所述UVM_TEST包括基本指令测试、中断调试测试、复位测试、低功耗测试、安全域测试和外部存储读写测试;
所述基本指令测试包括:
等待全面内存空间和寄存器初始化;
加载二进制文件,写入到处理器内核的指定内存地址上;
等待全部指令在被测对象中被执行;
等待过程中,每一时钟周期通过调用测试完成监测事件来监测某一特定内存地址上是否写入了标志着仿真结束的数据信息;
如果监测到该特定内存地址上被写入了标志着仿真结束的数据信息,则结束UVM测试环境;
所述中断调试测试包括:
初始化UVM测试环境并设置相关的寄存器、配置参数和变量;
通过调用发送中断调试激励信号函数调度虚拟序列中的中断序列,来发送各类中断或调试激励信号,触发中断或调试事件;
调用等待中断调试事件函数等待中断或调试事件的处理完成,确保处理器内核正确进入了中断或调试模式;
调用检查中断调试事件函数检查中断或调试事件的处理状态,验证中断或调试事件是否被正确处理,并检查相关寄存器和变量的值是否符合预期的变化;
在确认中断或调试事件处理完毕后,调用结束中断调试激励信号的发送函数结束中断或调试激励信号的发送,并等待中断或调试事件被清除;
最后,恢复UVM测试环境,并检查处理器内核返回中断或调试前的正常模式,同时检查相关的寄存器和变量是否符合预期变化,并清理测试环境,之后继续保持指令在被测对象中被执行,以准备下一轮测试;
所述复位测试,用于执行复位测试,包括:通过调用虚拟序列里的函数启动复位相关序列;然后,对复位次数进行随机化;接下来,在一个循环中,根据随机化后的复位次数,模拟多次复位事件的发生和处理过程;其中,在每次复位前,通过随机延时,模拟复位的发生时间,并在时钟上升沿时将被测对象接口上的复位信号置为低电平,再次延时后将其置为高电平;以及,通过多次执行循环中的步骤来模拟多次复位事件的发生和处理过程;
所述低功耗测试,包含了一个名为中断等待闲置测试的任务;所述任务通过检查特定条件来执行中断等待闲置测试;在一个无限循环中,首先等待中断等待闲置使能信号条件为真,表示等待闲置状态发生;然后等待处理器内核向外部系统发送内核闲置状态使能信号,当外部系统接收到这个信号时,在时钟上升沿时将时钟屏蔽置为低电平,模拟一定延时后再将其置为高电平,从而模拟时钟关停一定时间后重启的场景;接着,等待验证系统进入低功耗状态条件为真,表示系统处于低功耗状态;之后,在时钟上升沿时,激励处理器内核唤醒使能信号为高电平,再次上升沿时将其置为低电平,用来模拟外部系统将内核从低功耗状态中唤醒;最后,在时钟上升沿时调用虚拟序列中的中断序列,发送中断激励信号,使处理器内核结束待机状态,进入中断;
所述安全域测试,通过握手机制和签名地址的交互协议来检测处理器内核是否将要执行安全域访存指令,然后拉高接口上的安全域加密信号,使处理器内核进入安全保护模式;以及,通过随机拉低拉高安全域加密信号,来模拟随机访存指令执行时验证系统对于随机访存指令执行时的安全域地址保护能力;
所述外部存储读写测试,生成外部写请求和写外部地址,并将地址初始化为0;通过加载已经将外部地址初始化为0的程序来实现参考模型外部地址的初始化;在初始化外部存储期间,对处理器内核进行复位,直到初始化完成;然后,处理器内核执行取值和执行指令。
7.根据权利要求1所述的基于RISC-V架构的处理器验证系统,其特征在于,所述指令生成模块为对开源指令生成器RISCV-DV实施改造得到,包括:
创建一个预留寄存器列表,当指令流中包含对奇数寄存器的约束时,将所述奇数寄存器的前一个偶数寄存器存储在所述预留寄存器列表中;
在执行后增访存指令后,在接下来的访存指令执行之前还原被修改的寄存器中的基地址值;
当即将执行浮点指令流时,随机插入定向指令流以初始化浮点寄存器的特殊值;
在主程序中,随机插入循环取址指令流子程序,在循环体开始前插入循环初始化程序,用于初始化循环次数和循环体长度,约束循环体内的其他随机指令流,最后将循环体作为一个整体,不允许其他指令流打乱其顺序。
8.根据权利要求1所述的基于RISC-V架构的处理器验证系统,其特征在于,所述回归管理模块,具体用于:
利用处理器的外部存储空间存储大规模指令,并通过处理器从外部存储空间获取指令执行,以实现单次仿真执行大规模指令;
通过所述指令生成模块生成大规模程序来增加仿真次数;
通过一次编译生成仿真文件,利用生成的仿真文件进行多次并行的回归仿真;在进行多进程的并行仿真时,将单次仿真的结果文件相互隔离;
利用一键定时回归的脚本来自动化多进程回归测试。
9.一种基于RISC-V架构的处理器验证方法,应用于如权利要求1-8任一项权利要求所述的基于RISC-V架构的处理器验证系统中,其特征在于,包括:
步骤1,通过激励生成脚本或回归管理脚本启动所述指令生成模块,配置参数被传递到所述指令生成模块的指令生成脚本中,根据仿真测试用例名、指令生成测试用例名、随机种子、生成汇编程序数量、每个汇编程序中指令的条数生成一个或多个汇编程序;
步骤2,将生成的汇编程序放置在所述程序编译模块的资源库中;所述仿真验证模块中的主脚本、项目管理脚本解析开始构建工作,之后调用所述程序编译模块中的编译工具调用脚本执行编译器,对汇编文件进行编译、连接、反汇编和二进制文件转换;将结果保存在独立的结果文件资源库中;
步骤3,所述模拟器调用脚本和所述仿真验证模块中的脚本同时调用所述结果文件资源库中的二进制文件,所述模拟器在所述模拟器脚本的作用下开始模拟器的仿真并输出模拟器输出日志文件,同时,所述仿真验证模块中的Makefile开始构建并执行VCS编译和仿真命令;当仿真开始后,所述仿真验证模块中的UVM_TEST根据不同的测试用例调用不同的测试函数;其中,对于指令测试,先调用二进制文件加载函数,将二进制文件写入到处理器内核的指定内存地址上,同时将没有程序存放的地址和寄存器进行初始化;
步骤4,在被测对象仿真过程中,所述UVM测试环境实时与被测对象交互进行仿真验证,以及实时监测被测对象关键寄存器的信号变化,记录生成日志并输出;同时,输出VCS编译仿真的日志文件;期间,若进行回归验证,批量进行测试用例的仿真和执行并输出对应的仿真日志;
步骤5,所述比对检查模块中的比对脚本加载模拟器输出日志文件和处理器的RTL仿真日志文件,进行比对并输出比对报告;若执行回归验证,比对报告中的关键信息被保存在数据库中。
CN202311733460.0A 2023-12-18 2023-12-18 一种基于risc-v架构的处理器验证系统 Active CN117422026B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311733460.0A CN117422026B (zh) 2023-12-18 2023-12-18 一种基于risc-v架构的处理器验证系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311733460.0A CN117422026B (zh) 2023-12-18 2023-12-18 一种基于risc-v架构的处理器验证系统

Publications (2)

Publication Number Publication Date
CN117422026A true CN117422026A (zh) 2024-01-19
CN117422026B CN117422026B (zh) 2024-03-26

Family

ID=89528681

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311733460.0A Active CN117422026B (zh) 2023-12-18 2023-12-18 一种基于risc-v架构的处理器验证系统

Country Status (1)

Country Link
CN (1) CN117422026B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117851268A (zh) * 2024-03-07 2024-04-09 广东省新一代通信与网络创新研究院 基于fpga的原型验证平台的高频差分系统

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10312311A (ja) * 1997-05-13 1998-11-24 Mitsubishi Electric Corp 論理シミュレーション方法及び論理シミュレーション方法を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
US20050209840A1 (en) * 2004-01-09 2005-09-22 Mikhail Baklashov Method and apparatus for functional language temporal extensions, dynamic modeling, and verification in a system-level simulation environment
US20050278576A1 (en) * 2004-06-09 2005-12-15 International Business Machines Corporation Methods, Systems, and media for management of functional verification
CN103838899A (zh) * 2012-11-27 2014-06-04 上海华虹集成电路有限责任公司 针对硬核mcu的中断控制器的仿真验证系统及方法
US20150310159A1 (en) * 2014-03-05 2015-10-29 Vayavya Labs Private. Limited Computer-implemented verification system for performing a functional verification of an integrated circuit
US20180060453A1 (en) * 2016-08-24 2018-03-01 Raytheon Company Universal verification methodology (uvm) register abstraction layer (ral) painter
US20180300431A1 (en) * 2017-04-18 2018-10-18 Raytheon Company Universal verification methodology (uvm) register abstraction layer (ral) traffic predictor
WO2019167081A1 (en) * 2018-03-02 2019-09-06 Apasangi Akash System and method for emulation and simulation of rtl (design under test) using fpga
US10878153B1 (en) * 2018-10-09 2020-12-29 Synopsys, Inc. Apparatuses and methods for accurate and efficient clock domain and reset domain verification with register transfer level memory inference
CN115658414A (zh) * 2022-12-29 2023-01-31 中科亿海微电子科技(苏州)有限公司 基于risc-v架构处理器核的功能验证方法及平台
CN115841089A (zh) * 2023-02-27 2023-03-24 合肥六角形半导体有限公司 一种基于uvm的系统级芯片验证平台及验证方法
CN116205174A (zh) * 2023-02-28 2023-06-02 中山大学 一种基于uvm的异步微处理器验证方法及系统
CN116992804A (zh) * 2023-09-26 2023-11-03 深圳鲲云信息科技有限公司 芯片验证的方法及计算设备
CN117075969A (zh) * 2023-08-28 2023-11-17 中国科学院软件研究所 面向risc-v处理器特权指令集一致性的形式验证方法及装置

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10312311A (ja) * 1997-05-13 1998-11-24 Mitsubishi Electric Corp 論理シミュレーション方法及び論理シミュレーション方法を実現させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
US20050209840A1 (en) * 2004-01-09 2005-09-22 Mikhail Baklashov Method and apparatus for functional language temporal extensions, dynamic modeling, and verification in a system-level simulation environment
US20050278576A1 (en) * 2004-06-09 2005-12-15 International Business Machines Corporation Methods, Systems, and media for management of functional verification
CN103838899A (zh) * 2012-11-27 2014-06-04 上海华虹集成电路有限责任公司 针对硬核mcu的中断控制器的仿真验证系统及方法
US20150310159A1 (en) * 2014-03-05 2015-10-29 Vayavya Labs Private. Limited Computer-implemented verification system for performing a functional verification of an integrated circuit
US20180060453A1 (en) * 2016-08-24 2018-03-01 Raytheon Company Universal verification methodology (uvm) register abstraction layer (ral) painter
US20180300431A1 (en) * 2017-04-18 2018-10-18 Raytheon Company Universal verification methodology (uvm) register abstraction layer (ral) traffic predictor
WO2019167081A1 (en) * 2018-03-02 2019-09-06 Apasangi Akash System and method for emulation and simulation of rtl (design under test) using fpga
US10878153B1 (en) * 2018-10-09 2020-12-29 Synopsys, Inc. Apparatuses and methods for accurate and efficient clock domain and reset domain verification with register transfer level memory inference
CN115658414A (zh) * 2022-12-29 2023-01-31 中科亿海微电子科技(苏州)有限公司 基于risc-v架构处理器核的功能验证方法及平台
CN115841089A (zh) * 2023-02-27 2023-03-24 合肥六角形半导体有限公司 一种基于uvm的系统级芯片验证平台及验证方法
CN116205174A (zh) * 2023-02-28 2023-06-02 中山大学 一种基于uvm的异步微处理器验证方法及系统
CN117075969A (zh) * 2023-08-28 2023-11-17 中国科学院软件研究所 面向risc-v处理器特权指令集一致性的形式验证方法及装置
CN116992804A (zh) * 2023-09-26 2023-11-03 深圳鲲云信息科技有限公司 芯片验证的方法及计算设备

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
JIARONG CHEN等: "Design and verification of RISC-V CPU based on HLS and UVM", 2021 IEEE INTERNATIONAL CONFERENCE ON COMPUTER SCIENCE, ELECTRONIC INFORMATION ENGINEERING AND INTELLIGENT CONTROL TECHNOLOGY (CEI), 31 December 2021 (2021-12-31) *
姚小姣: "基于精简指令集内核的验证参考模型设计与UVM验证", 中国优秀硕士学位论文全文数据库 信息科技辑, 15 September 2022 (2022-09-15) *
杨坤;徐金甫;李伟;: "基于SystemVerilog-UVM的Mickey 2.0 RTL级验证", 计算机工程与设计, no. 10, 16 October 2016 (2016-10-16) *
王旭;李丽斯;赵烁;何虎;: "基于RISC-V指令集的超标量处理器设计", 中国集成电路, no. 09, 5 September 2020 (2020-09-05) *
谈笑;王小力;: "一种基于UVM的模块级可重用随机化验证平台构建方法", 微电子学与计算机, no. 03, 5 March 2015 (2015-03-05) *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117851268A (zh) * 2024-03-07 2024-04-09 广东省新一代通信与网络创新研究院 基于fpga的原型验证平台的高频差分系统

Also Published As

Publication number Publication date
CN117422026B (zh) 2024-03-26

Similar Documents

Publication Publication Date Title
US8180620B2 (en) Apparatus and method for performing hardware and software co-verification testing
US6587995B1 (en) Enhanced programmable core model with integrated graphical debugging functionality
US8930912B2 (en) Method and system for performing software verification
Aarno et al. Software and system development using virtual platforms: full-system simulation with wind river simics
CN117422026B (zh) 一种基于risc-v架构的处理器验证系统
Higashi et al. An effective method to control interrupt handler for data race detection
Archer et al. Interface contracts for tinyos
Ceng et al. A high-level virtual platform for early MPSoC software development
CN117422025B (zh) 一种基于risc-v架构的随机中断调试验证系统
CN111400997B (zh) 一种基于同步执行的处理器核验证方法、系统及介质
CN115686655B (zh) 用于gpu ip验证的联合仿真系统
Kantrowitz et al. Functional Verification of a Multiple-issue, Pipelined, Superscalar Alpha Processor - the Alpha 21164 CPU Chip
de Oliveira et al. Automata-based modeling of interrupts in the Linux PREEMPT RT kernel
Krishnamurthy et al. A design methodology for software fault injection in embedded systems
JP2828590B2 (ja) マイクロプログラム検証方法
CN117892661A (zh) 一种基于risc-v处理器验证的模拟器比对系统
Willems et al. Virtual prototypes for software-dominated communication system designs
Cong Post-silicon functional validation with virtual prototypes
Ryzhyk et al. Improved device driver reliability through hardware verification reuse
JP3424548B2 (ja) 組み込み機器用ソフトウエア論理シミュレータ
Devins SoC Verification Software–Test Operating System
Lebedev et al. Test environment for verification of multi-processor interrupt system with virtualization support
Koerner et al. IBM System z10 firmware simulation
Zhezlov et al. Automation of Test Environment Creation Aimed at IP-cores and SoC Development, Verification and Performance Analysis
US20180011956A1 (en) Data Injection In Emulation Without Rebooting

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant