CPU系统级验证

您所在的位置:网站首页 arch系统架构检测app CPU系统级验证

CPU系统级验证

2024-02-18 19:11| 来源: 网络整理| 查看: 265

riscv-tests是一种指令集自测试集,能够自我检测指令集运行成功还是失败的测试程序。这些程序基本由汇编语言编写。 内包含banchmark、isa、programs测试。 github链接:GitHub - riscv-software-src/riscv-tests

1. benchmark测试

benchmark内包含一些业内公认C代码测试集

该部分代码在编译链接时需要加入crt0.s,原因时crt.s文件是运行C代码的最基本的裸机配置,如果是运行汇编代码则无需将该文件链接在内。

2. ISA测试

在riscv-tests/isa中,内含测试集均为定向指令测试,包含机器/用户/监督者模式下I/A/C/D/F/M类型的指令的测试。此处以64位的指令集环境为例:

1. P/V运行环境

根据运行环境是否为裸机状态可以分为P/V环境,P为裸机状态下测试,即虚拟内存未启动;V状态测试环境中虚拟内存已启动(通常引导了操作系统)。下文以裸机状态下各功能指令为例介绍测试集相关的头文件、宏、内嵌函数等。

P环境

机器模式下:包括自陷检测处理、失能多核运行、物理地址保护配置、自陷配置、切换到USER模式等

V环境

虚拟地址情况下

2. M/S/U工作模式

根据RISCV用户指令集和特权指令集spec,某些指令只允许在特定的工作模式下才有权限执行。 三种工作模式:RISCV——指令集spec阅读笔记——特权级_KGback的博客-CSDN博客

M模式

运行特权指令集spec下的指令。

S模式U模式

运行I/A/F/D/M/C相关指令,以及自定义的扩展指令。

3. 汇编宏——构成激励源文件的组件

在测试激励源文件中,

不仅有与测试激励相关的宏,还有一些公用宏——这些宏定义了一些初始化配置,程序段处理和数据段处理,以及一些组成汇编程序的工具类宏。 这些宏均由test_macros.h、riscv_test.h和encoding.h组成。

寄存器编号 x1 一般用作源寄存器,特殊情况下用作目的寄存器x2 一般用作源寄存器,特殊情况下用作目的寄存器x3 用作目的寄存器,存储测试激励pass/fail的标志x4 用作计数器(某些测试下指令要循环执行多次)x5 用作计数的目标值(一般执行两次,x5=2)x6 用作旁路测试中nop指令后目的寄存器,会用作与参考值比较的结果值x29 存储待测指令的结果参考值x30 一般用作待测指令的目的寄存器,会用作与参考值比较的结果值 相关功能宏 TEST_CASE 该宏将测试案例代码code执行完后,将案例原本的正确值加载到x29寄存器,并与保存代码结果的寄存器testreg内的值作对比,若不相等则跳转到fail位置;若相等则继续执行。 #define TEST_CASE( testnum, testreg, correctval, code...)                 test_ ## testnum:                           code;     \                       li x29, MASK_XLEN(correctval);        \                       li TESTNUM, testnum;          \                       bne testreg, x29, fail;TEST_PASSFAIL 该宏定义了pass和fail的入口,实际结果和理论结果相等则跳到pass,若不相等则执行fail。RVTEST_PASS 测试通过,将x3的值设为1,并通过环境调用异常将PC值写入到mepc寄存器。RVTEST_FAIL 测试不通过,判断x3是否等于0,若不等于0,则将x3寄存器值左移一位并将最低位置1,后同样通过环境调用异常将PC值写入到mepc寄存器。 4. 各类型指令验证corner 整数计算指令

整数计算指令可以分为R-I指令(寄存器-立即数)和R-R指令(寄存器-寄存器)。 对于R-I指令测试有操作数激励测试、寄存器激励测试、旁路设计测试、测试0号寄存器、特殊立即数格式测试。 对于R-R指令测试有操作数激励测试、寄存器激励测试、旁路设计测试、测试0号寄存器

操作数激励测试 改变操作数的值,验证实际结果和理论结果是否一致 相关宏:TEST_IMM_OP(...)、TEST_RR_OP(...)等,均调用TEST_CASE寄存器激励测试 改变源寄存器和操作寄存器,验证实际结果和理论结果是否一致 相关宏:TEST_IMM_SRC1_EQ_DEST(...)、TEST_RR_SRC1_EQ_DEST(...)等,均调用TEST_CASE旁路设计测试 对于DEST_BYPASS情形,通过在待测指令和数据相关的运算指令间插入0~2条NOP指令来实现,并循环执行两次(通过x4和x5判断) 相关宏:TEST_IMM_DEST_BYPASS(...)、TEST_RR_DEST_BYPASS(...)等,均调用TEST_CASE测试0号寄存器 将x0寄存器作为原寄存器或目的寄存器,验证x0寄存器在整数计算中是否为只读寄存器且内容始终为0 相关宏:TEST_IMM_ZEROSRC1(...)、TEST_RR_ZEROSRC1(...)等,均调用TEST_CASE特殊立即数格式测试 在R-I指令测试中,由LUI指令和AUIPC指令采用U型格式的立即数 存储器访问指令

存储器访存指令分为load指令和store指令。

load/store指令基本测试 测试方案为分别采用正常地址类型(即基址和偏移值皆为正数);偏移量为负数;基址负数,将基址读到寄存器,然后减少32得到新的基址,测试基址偏移32的读出结果;非对齐地址,将基址读到寄存器,然后减少3得到新的基址,测试基址偏移7的读出结果旁路设计测试 类似于整数计算指令的旁路测试数据相关性测试 主要针对load指令WRW冒险测试 控制转移指令

控制转移指令分为无条件跳转指令和条件跳转指令

条件分支跳转指令基本测试 相关宏:TEST_BR2_OP_TAKEN、TEST_BR2_OP_NOTAKEN等 测试分别在操作数相同和不相同情况下,指令执行跳转的状况,若没有正常跳转则跳转到fail标签处,且被测指令执行两次。旁路设计测试 相关宏:TEST_BR2_SRC12_BYPASS、TEST_BR2_SRC21_BYPASS 类似于整数计算指令的旁路测试。 控制和状态寄存器指令

该类指令包括CSR指令测试和环境调用相关指令测试

CSR指令测试 分为指令操作测试用例(即以mepc寄存器为操作对象分别测试CSRRRW、CSRRS、CSRRC三类指令),CSR寄存器读写测试环境调用相关测试 ECALL、EBREAK


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3