现代电子技术
Modern Electronics Technique
Aug.2023Vol.46No.16
2023年8月15日第46卷第16期
0引言
RISCV 是一种开放指令集架构(Instruction Set
Architecture,ISA ),RISCV 设计规模不断扩大,使得开发人员能够使用各种自定义指令和扩展[1⁃3],这不仅扩大了
系统架构师开发新优化设计的自由度,还扩大了验证团
队的工作范围。对于一个工业级别的处理器核来说,往往设计工作只占很小一部分,而验证工作及其方法论则占了很大的比重。由此可见,RISCV 处理器验证的完善性与正确性已经成为影响芯片产品的研发周期和一次性流片成功的关键因素。随着越来越多的SoC 设计团队采用RISCV ,SoC 设计验证团队因此也需要调整已建立的方法,解决处理器验证的复杂度。
UVM (University Verification Methodology )方法学是
DOI :10.16652/j.issn.1004⁃373x.2023.16.006
引用格式:胡小刚,孙维东,唐屹晨,等.一种可重用RISCV 验证平台的设计与实现[J].现代电子技术,2023,46(16):39⁃43.
一种可重用RISCV 验证平台的设计与实现
胡小刚,孙维东,唐屹晨,毛晓炜
(中国电子科技集团公司第五十八研究所,江苏无锡
214072)
要:随着全球芯片技术的飞速发展,处理器的性能逐渐成为了制约各公司前进的短板。而RISCV 开源处理器是
一种新的精简指令集架构,与其他处理器最大的不同之处在于:它采用模块化的指令集,更易于扩展
和组装。然而,目前可重用RISCV 的验证平台还不成熟,这可能会造成验证不够充分且效率低等问题。为此,文中设计一种基于通用验证方法学(UVM )的可重用RISCV 验证平台。该平台使用UVM 搭建一整套RISCV 验证环境,包括随机汇编指令自动生成平台、GNU 编译器套件(GCC )对汇编指令的编译、C++参考模型的运行、RISCV 处理器的运行和结果监测、Python 脚本对最终结果的比较以及代码和功能覆盖率的收集等。同时,利用VCS 和Verdi 等EDA 工具对RISCV 处理器进行仿真功能测试。结果表明,所搭建的验证环境能够快速、有效地验证RISCV 设计的正确性,且可重用程度高,可以更加全面快速地完成RISCV 处理器的验证工作。
关键词:RISCV 处理器;UVM ;RISCV 验证环境;随机指令生成;C++参考模型;Python 脚本;功能覆盖率;可重用中图分类号:TN402⁃34
文献标识码:A
文章编号:1004⁃373X (2023)16⁃0039⁃05
Design and implementation of reusable RISCV verification platform
HU Xiaogang,SUN Weidong,TANG Yicheng,MAO Xiaowei
(No.58Research Institute of China Electronics Technology Group Corporation,Wuxi 214072,China)
Abstract :With the rapid development of global chip technology,the performance of processors has gradually become a short board that restricts the progress of various companies.The RISCV open⁃source processor is a new reduced instruction set architecture.The biggest difference between RISCV open ⁃source processor and other processors is that it applies modular instruction sets,which is easier to expand and assemble.However,the current reusable RISCV verification platform is immature,which may lead to insufficient verification and low verification efficiency.A reusable RISCV verification platform based on the university verification methodology (UVM)is introduced.On the platform,UVM is used to build a whole set of RISCV
verification environment,including an automatic generation platform for random assembly instructions,compilation of assembly instructions by the GNU compiler collection (GCC),operation of C++reference models,RISCV processor operation and result
monitoring,comparison of final results by Python scripts,and collection of code and functional coverage.EDA tools such as VCS and Verdi are used to perform simulation function tests on RISCV processors.The results show that the built verification environment can quickly and effectively verify the correctness of RISCV design and has a high degree of reusability,which can
complete the verification work of RISCV processors more comprehensively and quickly.Keywords :RISCV processor;UVM;RISCV verification environment;random instruction generation;C++reference model;
Python scripts;functional coverage;reusable
收稿日期:2022⁃11⁃10
修回日期:2023⁃01⁃03
39
现代电子技术
2023年第46卷
基于System Verilog 开发的验证环境开发库,UVM 类库
(Class Library )提供System Verilog 语言编写的内建组件,可快速开发具有良好架构和可重用的验证组件和验证环境。UVM 验证平台为分层次的事务级验证平台,具有随机分布控制等特性,在较高的抽象层次上设计验证用例,减少验证人员设计不同验证用例的时间,从而提高验证效率。
基于以上背景,本文提出一种可重用RISCV 验证平台,用于快速验证RISCV 的所有指令功能。
1验证总体架构
目前对RISCV 的验证是基于UVM 验证方法学搭建
的验证平台,验证环境总体架构如图1所示,包含随机汇编指令生成(UVM random instruction gen )、GCC (GNU Compiler Collection )编译器(RISCV Toolchain )、link 文件、C++参考模型(Reference Model )、监视器
(riscv mon )、比较脚本(Compare )、hex 存放模型(Memory Model )、待测设计(riscv core )等组件[4⁃8]
。图1验证环境总体架构
图1中,UVM random instruction gen 生成的asm 汇编文件与link 文件由GCC 编译器编译生成riscv elf 二进制文件以及十六进制hex 文件。将elf 文件输入到参考模型运行并生成sim Log 文件,将hex 文件输入到riscv core 运行。riscv mon 监视器对riscv core 数据接口的输出进行监测,并将数据传输到RTL sim Log 中,最后由比较脚本进行两个文件的对比并得到结果。
2随机汇编激励生成
随机汇编激励由约束随机指令生成平台生成。首
先对RISCV 处理器核内激励需求进行研究并构建指令模板,再利用UVM 设计一个约束随机指令生成平台。实验结果表明,生成的汇编指令能够遍历处理器支持的所有指令类,且高度灵活、可配置[9⁃10]。
约束随机指令生成平台如图2所示。平台的主要部分由生成器、外围配置逻辑、指令模板及不同测试类
构成。
1)cfg 模块用于配置生成汇编激励时的配置,比如测试的功能选择、生成指令的条数、工作的模式等。2)riscv_instr_base_test 是UVM 环境的顶层test ,会例化下面所用的模块、调用run_phase 等。
3)asm_gen 是生成汇编的模块,当生成配置的各个选项配置完成后,在此模块中打印生成汇编激励。
4)direct_stream 用于选择测试的功能,如mem 的读写、跳转、中断等,并将指针指向各个测试功能模块。
5)load_store_instr 、amo_instr 、jump_instr 、long_branch_instr 、interupt_instr 是各个功能测试模块,会由cfg 模块选择其中一个或多个。
6)page_table_list 、page_table 、page_table_entry 三个类是用来实现虚拟地址到物理地址映射功能的。7)privil_reg 、riscv_reg 用于约束各个通用寄存器,控制寄存器。
8)data_page_gen 用于生成存放在mem 中各个初始化的随机数据段。9)rand_instr 用于将cfg 中的配置数据写入随机指令的约束中。
10)instr_sequence 用于封装生成的指令序列集,并进行一些后期的处理,比如去掉某些指令等。
11)cov_item 、cov_group 用于覆盖率的收集。12)instr_list 、instr_pkg 分别为底层指令格式的定
义、
全局的宏定义等。
图2约束随机指令生成平台
约束随机指令生成平台根据需要的寄存器等格式不同将指令划分为22类,如表1所示,每一类指令对应一大类指令模板。在一大类指令模板下还存在其内部的指令模板细分[11]。
40
第16期
表1RISCV指令生成时指令分类表
指令集
基础整形
(I类)
浮点指令集
(F.D类)
乘除指令集
(M类)
原子指令集(A类)非法指令
基础类
整形立即数
整形寄存器
位移立即数
位移寄存器
读取立即数
无条件跳转
分支条子
访存操作
特殊指令
CSR读写指令
浮点计算
浮点转换
浮点乘加
浮点转移
浮点比较
浮点符号注入
浮点判别
浮点访存
乘法
除法
原子操作
产生对应的异常
操作码
ADDI、SLTI等
ADD、SUB等
SLLI、SRLI等
SLL、SRL等
LUI、AUIPC
JAL、JALR
BEQ、BNE等
LD、LW等
FENCE、FENCEI
CSRSC等
FADD.S、FSUB.S等
FCVT.W.S、FCVT.D.W等
FMADD.S、FNMADD.S等
FMV.S.X、FMV.X.S等
FLT.S、FLE.D等
FSGNJ.S、FSGNJ.D等
FCLASS、FCLASS.D等
FLW、FSD等
MUL、MULH等
DIV、REM等
AMOADD.D、LR等
错误地址读写等
对于各种测试场景来说,每种指令出现的比例是十分重要的,比如在测cache替换的时候,load和store指令出现的比例相对高,因此需要对每种指令类型进行分配。是否生成每个指令都与权重有关,如果存在权重为
0,则就表示不生成任何特定类型的指令,比如hint_instrs_ratio=0表示不生成hint指令。在指令生成平台之外,设置了单独的指令配置的标准文档,通过管理文档中每种指令的权重配比来管理生成的指令情况,每次生成随机指令,都通过导入此文件来进行约束。
3C++参考模型的运行及结果生成
C++参考模型的实现基于RISCV指令集参考模型spike,该模型是为了测试RISCV处理器而构建的,由C++语言编写,支持所有RISCV指令的模拟运行,在本文中为RISCV设计的正确性起到了关键的作用。由于本文待测设计是基于RISCV架构并进行指令扩展的处理器,所以需在spike参考模型的基础上加以扩展。模型通过指令生成器生成并由GCC编译器编译转换得到二进制elf文件,可以检测生成指令的正确性并打印出程序运行的结果,如运行过程的PC、指令、通用寄存器、控制寄存器、浮点寄存器、存储器的值变化等所需要的详细log信息,如图3所示。当pc值为0x80000000时,指令代码为0x004001b7,解析出的指令为lui gp、0x400,执行的结果为通用寄存器x3的值变为0x400000。这个log可以作为标准的参考模型输出,对dut运行的结果进
行校验。
图3C++参考模型运行log
4RISCV核运行及数据监测
RISCV核的运行环境基于UVM验证平台。所设计的RISCV处理器运行及监视平台如图4所示。顶层Top 封装了Test类以及待测设计DUT模块,配置它们之间的连接,并通过环境调用特定的Hex文件到待测设计的Memory Model存储单元。虚拟接口是环境与外部DUT 之间进行信号交换和通信的通道之一,它通过一种config_db
连接机制发送到平台的所有级别。
图4RISCV处理器运行及监视平台
胡小刚,等:一种可重用RISCV验证平台的设计与实现41
现代电子技术
2023年第46卷
环境类组件Env 封装了事务Agent 组件,事务
Agent 组件只封装了Monitor 组件,由于RISCV 处理器的驱动由Hex 程序的执行,因此本文并不需要Driver 组件。当Hex 程序执行时,DUT 上产生的数据通过各个不同的接口传递给Env 中的Monitor 监视器,监视器将收集到的数据经过处理后按照期望的格式输出到riscv_pc_instr_gpr.info 、riscv_cache_st_seq.info 、riscv_to_axi_mem.info 三个文件,供后续结果分析[12⁃15]。
5结果分析
将随机产生的随机汇编激励放入DUT 中Memory
Model ,并将DUT 的输出与参考模型的输出进行比较,验证汇编指令执行后的pc 值、指令、寄存器的数据是否与参考模型的输出一致。比较脚本将参考模型运行得到的log 与DUT 运行得到的log 进行对比后输出比较结果,如果比较一致则为pass ,否则为fail 。
1)pc 、指令、寄存器比较如图5所示。左边为参考
模型运行的结果,右边为Monitor 监视到的RISCV 处理
器输出的结果。log 中的第1列为pc 值,第2列为指令,第3列为通用寄存器或者控制寄存器的标识,第4列为寄存器的值。由图可见,
结果比较一致。
图5pc_instr_gpr 结果比较
2)cache 数据校验如图6所示。cache 校验是为了
验证仿存输入是否正确,将输入进cache 的地址数据逐一打印到log 中,左边为参考模型运行的结果,右边为Monitor 监视到的RISCV 处理器输出的结果。其中第1列为仿存的地址,第2
列为数据值。
图6cache 数据校验
3)cache 替换策略校验如图7所示。cache 替换策
略校验是为了验证RISCV 处理器中cache 的替换是否正确,左边是参考模型的输出,右边为Monitor 监视到的RISCV 处理器输出的结果。图中第2列代表cache 被替换出去的仿存地址,第4列代表被替换地址所对应的数
据。由于一条cache line 是64B ,所以每次被替换的数据大小为64B ,图中每个mem_data 的数据[16]是16B
图7cache 替换策略校验
6覆盖率分析
经过测试不同的功能,以及添加许多无法直接生成
的定向用例,指令解码模块代码覆盖率信息如图8所示,指令功能覆盖率信息如图9所示。由图可见,指令解码模块代码行覆盖率达到86.85%,每条指令的功能覆盖率达到100%,代码覆盖率和功能覆盖率均达到了要求,且由于指令的随机性很大,很容易检测到设计师容易忽略的边带信号错误,
提高了验证的充分性。
图8
代码覆盖率
图9功能覆盖率
7结语
本文针对传统RISCV 验证平台中存在的可重用性低、代码缺乏组织性、维护困难、随机性验证无法实现、验证效率低等问题,利用通用验证方法学(UVM ),构建了一个集随机化汇编激励生成平台、GCC 编译、C++参考模型、监视器、结果比对机制、代码与功能覆盖率收集
为一体的可重用RISCV 验证平台。并使用所搭建的验
42
第16期
证环境,根据制定的要求,实现了符合RISCV指令规范的随机指令功能验证,以及覆盖率数据分析统计,以仿真的波形、自动化比对的形式得出验证的结果。
本文UVM验证平台可继承性高,可用于RISCV处理器的SoC级验证;且随机汇编激励可自动生成,结果自动比较,验证工作量与之前传统Verilog验证平台相比大大减少,验证效率能得到大幅提升。另外,功能覆盖率收集模块的结果分析可以更加全面快速地完成
RISCV处理器的功能验证工作。
参考文献
[1]王莹.中国工程院院士、中国开放指令生态(RISC⁃V)联盟理
事长倪光南谈,未来RISC⁃V有望成为世界主流CPU之一[J].
电子产品世界,2019,26(2):1⁃2.
[2]潘树朋,刘有耀.RISC⁃V微处理器以及商业IP的综述[J].单片
机与嵌入式系统应用,2020,20(6):5⁃8.
[3]WHEELER B.SiFive raises RISC⁃V performance[J]. Microprocessor report,2018,32(11):1.
[4]周文强.基于UVM的MIPI DSI系统级可重用验证平台[J].电
子与封装,2022,22(8):44⁃51.
[5]郭少成.面向MC⁃SoC的验证方法研究与实现[D].成都:电子
科技大学,2019.
[6]王灿.可信芯片验证平台的设计与实现[D].北京:北方工业大
学,2018.
[7]陈琳娜,孟建熠,林志涛.面向串行总线的层次化UVM验证平
台设计[J].传感器与微系统,2018,37(9):84⁃86.[8]刘春锐,张宏奎,黄旭东,等.一种高效率可重构的CPU验证平
台[J].电子与封装,2021,21(11):28⁃33.
[9]巨鹏锦,张晓冬,李辉.基于模型和库的处理器伪随机激励生
成器设计与实现[J].计算机工程与科学,2018,40(1):1⁃9. [10]刘涛.RISC⁃V处理器约束随机指令生成平台的设计[D].西
汇编table指令什么意思安:西安电子科技大学,2019.
[11]ANDREW Waterman,DAVID Patterson.RISC⁃V手册—一本
开源指令集的指南[EB/OL].[2021⁃10⁃14].staff.ustc.edu. cn/~xhzhou/reference/RISC⁃V⁃Reader⁃Chinese⁃v2p1.pdf. [12]MUNIR A,MAGDY M,AHMED S,et al.Fast reliable verification methodology for RISC⁃V without a reference model[C]//201819th International Workshop on Microprocessor and MCU Test and Verification.Austin,TX, USA:IEEE,2018:12⁃17.
[13]OLEKSIAK A,CIEŚLAK S,MARCINEK K,et al.Design and verification environment for RISC⁃V processor cores[C]// 2019MIXDES⁃26th International Conference Mixed Design of Integrated Circuits and Systems.Rzeszow,Poland:IEEE, 2019:206⁃209.
[14]KAMIREDDY L S,LAKHAN S K.UVM based reusable verification IP for wishbone compliant SPI master core[J]. International journal of VLSI design and communication systems,2018,9(5):21⁃29.
[15]王慧丽,郭阳.一种基于参考模型的GPDSP指令流控自动验
证方法[J].计算机工程与科学,2021,43(4):652⁃661. [16]张迅珍,梁青,李涛.RV32I控制单元设计与实现[J].微电子学
与计算机,2018,35(3):74⁃78.
作者简介:胡小刚(1988—),男,江苏南京人,硕士,中级工程师,主要从事SoC芯片验证工作。
胡小刚,等:一种可重用RISCV验证平台的设计与实现43

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。