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

2024-04-26 08:12

本文主要是介绍使用riscv-tests进行指令测试(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  • 1 测试用例命名规则
  • 2 测试用例dump文件介绍

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

1 测试用例命名规则

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

比如,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寄存器保存了,当前测试点的编号。

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

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

在这里插入图片描述

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

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

这篇关于使用riscv-tests进行指令测试(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/937041

相关文章

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解