• 使用riscv-tests进行指令测试(二)


    使用riscv-tests进行指令测试(二)


    本文属于《 TinyEMU模拟器基础系列教程》之一,欢迎查看其它文章。

    1 测试用例命名规则

    用例名称 = TVM Name +-+ Target Environment Name +-+ “指令”
    
    • 1

    比如,rv64ui-p-add,表示在用户模式下,测试riscv 64位整型指令集中add指令,运行环境条件为:未打开虚拟内存,仅从core0启动。

    TVM NameDescription
    rv32uiRV32 user-level, integer only
    rv32siRV32 supervisor-level, integer only
    rv64uiRV64 user-level, integer only
    rv64ufRV64 user-level, integer and floating-point
    rv64uvRV64 user-level, integer, floating-point, and vector
    rv64siRV64 supervisor-level, integer only
    rv64svRV64 supervisor-level, integer and vector
    Target Environment NameDescription
    pvirtual memory is disabled, only core 0 boots up
    pmvirtual memory is disabled, all cores boot up
    ptvirtual memory is disabled, timer interrupt fires every 100 cycles
    vvirtual memory is enabled

    在riscv-tests/isa目录下,有若干TVM Name,如下:
    在这里插入图片描述
    比如,rv64ui目录下,又有若干指令的S文件,如下:
    在这里插入图片描述
    在编译时,会自动按上述命名规则,生成可执行文件名称。

    2 测试用例dump文件介绍

    我们以rv64ui-p-add.dump为例,其执行流程,如下所示:
    在这里插入图片描述

    在每个测试程序中,都包含了若干个测试点。
    gp寄存器保存了,当前测试点的编号。

    • 从入口开始执行,再跳转到位置;
    • 位置,开始做一些初始化操作,主要包括x系列寄存器、mtvec、stvec、satp、medeleg、mideleg、mstatus、mepc等寄存器;
    • 其中,mepc寄存器初始化最关键,这里将地址0x80000190,保存到mepc寄存器中,以确保mret指令执行模式返回时(M模式切到U模式),PC可直接跳转到0x80000190处,即处,我们的第一个测试点;这里切换到U模式运行,也与我们rv64ui-p-add.dump名称中的u对应上了;
    • 随后,便依次顺序执行测试点,只要发现某个测试点失败,则忽略剩余测试点,立即跳转到 < fail > 标签;除非所有测试点均成功,才跳转到 < pass > 标签;
    • 在 < fail > 和 < pass > 标签,会对a7、a0、gp寄存器进行相应设置(前面介绍过),以便模拟器依据这些寄存器值,来判断测试成功与否。

    无论进入哪个标签,最后都会执行ecall指令,陷入M模式,PC跳转到处,如下所示:

    在这里插入图片描述

    最终,在标签中,形成死循环,反复执行,模拟器也就停在这里了。

    因此,rv64ui-p-add.bin执行完后,TinyEMU打印出Test Pass,后续就是“停止”的状态,不会有其他打印信息。
    在这里插入图片描述
    其他测试用例,可类比本例,自行查看,不再赘述。

  • 相关阅读:
    Docker 启动alpine镜像中可执行程序文件遇到 not found
    Ubuntu的C++环境配置
    合宙Air724UG LuatOS-Air LVGL API控件-屏幕横屏竖屏切换(Rotation)
    MySql学习笔记01——SQL的相关术语
    Shell-条件控制语句2
    分库分表订单全局ID
    java+python+nodejs+vue音乐网站管理系统ssm
    嵌入式C语言中整形溢出问题分析
    Linux虚拟机和开发板scp命令互传文件
    Maven安装配置
  • 原文地址:https://blog.csdn.net/u011832525/article/details/138184267