CPU系统级验证 您所在的位置:网站首页 英特尔验证 CPU系统级验证

CPU系统级验证

2024-07-16 23:05| 来源: 网络整理| 查看: 265

本分析重点关注该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和ISSriscv-test-env 测试激励需要用到的一些头文件,以及verify脚本和覆盖率分析脚本riscv-test-suite 测试用例集 2. repo配置信息 向量测试激励的配置

VLEN=256, SLEN=256, ELEN=32

工程案例 LowRISCIbexOpenHW openhw开源的CV32e40P核,只提供了一个测试用例 该核信息详情参见:CPU系统级验证——验证环境——OpenHW core-v验证环境及文件分析_KGback的博客-CSDN博客riscvOVPsimPlussaik-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

测试激励并无特别。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有