CPU系统级验证——测试激励——imperas公司riscvOVPsimPlus文件分析
本分析重点关注该repo向量扩展部分。
1. repo简介
该repo是指令集验证的仿真环境包括,大部分是指令集的测试用例,也包含了一些模拟器,如riscvOVPsimPlus。
主要介绍的是riscvOVPsimPlus指令集模拟器,riscvOVPsimPlus(下面统称ISS)是imperas公司在riscvOVPsim基础上扩充了向量扩展的指令集模拟器,该repo于今年9月份部分开源
- riscvOVPsim和riscvOVPsimPlus的区别
riscvOVPsim:
- 主要用于运行测试用例,特别是兼容性测试,即确保core的RTL代码兼容RISCV官方spec
- 支持variant selection, semi-hosting,功能覆盖率分析,compliance suite signature dump
- 支持32/64bit ,支持IMAFDCNSUE指令扩展,imperas认为rvv0.9/0.8等均处于实验状态,并不开源在已公开发布的riscvOVPsim中
- 完全可配置的指令跟踪
- GDB/Eclipse调试支持
- 内存配置选项
- 完整的标准CLIC功能、Debug模块/模式、Hypervisor "H "仿真
官方spec的最新支持情况:
riscvOVPsimPlus:
- 包含riscvOVPsim所有的特性,
- ISA支持增加了V扩展(0.8/0.9/1.0版本)和B扩展
- 支持指令 trace
- 支持GDB/Eclipse debug,且支持模式切换debug,单module的debug
- 支持存储器可配置,CLIC, multi-hart, H-hypervisor simulation
- 支持更加定制化的开发
官方spec的最新支持情况:
- 什么叫部分开源呢?
- 首先该repo必须在imperas官网注册下载,而且必须是企业用户;
- 其次ISS的运行所需的license必须联网才能使用(这是最骚的);
- 向量测试激励只提供了RVV0.8版本32位的V扩展激励,其他版本的需要向imperas定制。
综上,该riscvOVPsimPlus毕竟是商业化的工具,imperas开源的部分也只是“鱼饵”,完成的可配置工程还是要走商业流程
官网的license:Welcome Page | Open Virtual Platforms
Apache 2.0:大多数OVP model的支持license
- 工程目录
- riscv-ovpsim-plus
ISS的可执行文件(linux核windows),也包含了编译测试激励用到的gcc工具配置信息 - riscv-target
激励测试对象激励的编译命令脚本,包括一些core和ISS - riscv-test-env
测试激励需要用到的一些头文件,以及verify脚本和覆盖率分析脚本 - riscv-test-suite
测试用例集
2. repo配置信息
- 向量测试激励的配置
VLEN=256, SLEN=256, ELEN=32
- 工程案例
- LowRISCIbex
- OpenHW
openhw开源的CV32e40P核,只提供了一个测试用例
该核信息详情参见:CPU系统级验证——验证环境——OpenHW core-v验证环境及文件分析_KGback的博客-CSDN博客 - riscvOVPsimPlus
- saik-riscv-c
指令集形式化验证的一种工具
该工程只提供了rv32i、rv32ic、rv32m、rv64i、rv64ic、rv64m六组测试用例
3. 向量测试激励构建方案
1.激励概况
imperas编写激励的方式和riscv-test类似,但主要偏向于兼容性测试,并不会关注硬件corner,因此更类似于riscv-compilance(也是他们家开源的)。
激励组成根据32位/64位、基本指令/特权指令/向量扩展指令、整数计算指令/分为rv32i、rv32ic、rv32im、rv32vi等。
2.几个宏文件
相关的头文件总共有5个。
- riscv_test_macros.h
定义了TEST_CASE等功能性的宏,扩充了基本指令浮点运算、压缩指令的相关宏,类似riscv-tests工程中的test_macro.h,因此基本指令测试会调用的宏该工程均可以调用 - compilance_test.h
定义了一些初始化的宏,包括工作模式初始化、自陷处理、中断处理等,是riscv_test.h的补充,只支持裸机状态(P模式) - compilance_io.h
定义了与IO交互的一些宏,这些宏可以打印信息,对通用寄存器、浮点运算寄存器处理。 - encoding.h
定义了一些寄存器的地址和一些特殊值 - riscv_test.h
详细定义了裸机状态下的初始化的宏,包括工作模式初始化、自陷处理、中断处理等。
3. 激励文件结构
该repo内的测试激励均为自测试用例,即激励程序自己对参考值和真实结果做对比,并产生标志位,testbench通过读取该标志位的值判断测试是否成功。
该测试用例中数据段和代码段是分离的。
- 定义裸机状态的初始化
采用宏:RV_COMPLIANCE_RV32、RV_COMPLIANCE_RV64等
- IO口初始化
初始化ISS和DUT的IO口,并通过检测x0寄存器是否为0判断是否初始化成功;然后打印相关信息
采用宏:RVTEST_IO_INIT、RVTEST_IO_ASSERT_GPR_EQ、RVTEST_IO_WRITE_STR等
- 数据输入,开始测试
在一个激励文件中,总共8个group,每个group里4次测试,共32次测试
设置x1保存结果的地址,x2保存测试源数据的地址
开始单次测试:
- 通过vsetvli配置将源向量寄存器长度设为最长(存疑),通过x2寄存器不断偏移 (VLEN*LMUL/8)位依次将数据段数据读到vs1和vs2中,同时vd也赋一个初始值
- 后再次通过vsetvli将向量寄存器长度及元素长度,配置成目标指令的特征值
- 目标指令执行
- 再次通过vsetvli配置将源向量寄存器长度设为最长,将vd值保存到x1值(地址)开始的结果数据段
- 从x1段依次取出XLEN长度的值,依次与参考值做对比
若相同,则进行下一次对比;若不同,则打印错误信息,并跳转到RVTEST_FAIL(该宏会将x3的最低位置1,testbench读取他的最低位从而识别到测试是否失败) - 进行VLEN/XLEN次的对比后,若全都正确则开始下一次测试
采用宏:RVTEST_IO_ASSERT_GPR_EQ等
4. 激励测试corner
每个激励文件中的32次测试,vs和vd的值均遍历。vs1: v31-v0 vs2: v15-v0-v31-v16 vd: v0-v31
测试激励并无特别。
CPU系统级验证——测试激励——imperas公司riscvOVPsimPlus文件分析相关推荐
- CPU系统级验证——概览索引
1. RISC-V CPU核指令集验证分析 1 wujian100 (1)SoC核分析 无剑100实际上是一款低功耗SoC,采用的CPU核是E902. core通过AHB总线与Icache相连 (2) ...
- CPU系统级验证——验证环境——OpenHW core-v验证环境及文件分析
本文记录的相关源工程和文件为: core-v RISCV核功能验证工程:https://github.com/openhwgroup/core-v-verif core-v 验证策略:https:// ...
- Android系统中APP安装到手机后的文件分析
一. Android系统APP安装格式 1.1 CAB格式 直接将文件copy到手机里,都可以在手机上执行该CAB文件即可安装. 1.2 EXE格式 EXE格式的程序可分为手机上直接运行(即绿色软件的 ...
- 【原创】MIPS中断系统的板级验证及实例测试
"五一"假期前后这约五天时间,终于将MIPS中断系统进行了板级验证及实例测试.因为老师给的交叉编译工具不会用,所以测试代码完全用MIPS汇编编写.使用MARS而没有用QtSpim, ...
- 百度广告产品系统级测试技术演进
背景 根据典型的测试金字塔结构,一个产品的测试可分为三个层级.第一层是单元测试,主要对程序函数进行测试.第二层是集成测试,在百度内部是大家常理解的模块测试.第三层是系统级测试,对产品整体进行的测试.这 ...
- android cpu 压力测试,两个古董级压力测试工具 leakyapp.exe 和 cpustre.exe
两个古董级压力测试工具 leakyapp.exe 和 cpustre.exe,应该是在NT的 Windows Resource Kit Tools里面--连2000的里面都没有. Leakyapp.e ...
- 【操作细则】如何实现TSN系统级测试?
汽车行业正不断向着数字化.自动化.网联化发展,汽车与周围环境及车身电子元件中的交互也日益复杂,大量来自雷达.传感器的数据需要传输处理,这必然会在网络延迟.可靠性方面造成影响.因此,实时网络变得不可或缺 ...
- 特权级概述(哥子就想知道CPU是如何验证特权级的)GATE+TSS
[0]README text description from orange's implemention of a os . [1]特权级概述 当当前代码段试图访问一个段或者门时,目标段的DPL将会 ...
- linux系统下常用或有用的系统级命令
本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会 ...
最新文章
- ccf 交通规划(迪杰斯特拉优先队列模板)
- sed修炼系列(四):sed中的疑难杂症
- idea的setting界面怎么进_WMA转MP3怎么转?学会这招,WMA视频随便看!
- 常见数学符号:等号、不等号、算术运算符号、几何符号、三角函数、指数、对数、微分、积分符号、集合符号、逻辑符号
- 首届Apache Hadoop技术社区中国Meetup在京举办(附PPT)
- halcon使用直线标定板,标定相机内参代码
- 如何在 ASP.Net Core 使用 内存缓存
- 请移步到我的新浪博客
- 自定义shell脚本
- Spring Boot整合Swagger3
- bootstrap-table动态合并相同行和列的方法
- OpenStack还是OpenStack,云已不是那朵云!
- MySQL查询不同年份母亲节_日期习俗大不同 走近七个国家的母亲节
- 中国父母常犯的十大错误(转载)
- Java零基础学习全套视频笔记
- mysql建表实例 删除记录_python基础_mysql建表、编辑、删除、查询、更新
- 微信 服务器 台,2W台服务器的微信过载控制系统.docx
- Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'
- Linux 的nameserver-域名服务器
- 【Android -- 学习笔记】ListView 详解