编译玄铁处理器RISC-V指令测试用例

编译玄铁处理器RISC-V指令测试用例

  • [1 玄铁处理器](#1 玄铁处理器)
  • [2 下载玄铁RISC-V指令测试用例](#2 下载玄铁RISC-V指令测试用例)
  • [3 下载玄铁GCC交叉编译器](#3 下载玄铁GCC交叉编译器)
  • [4 编译步骤](#4 编译步骤)
  • [5 如何判断一个用例执行结果](#5 如何判断一个用例执行结果)

1 玄铁处理器

XuanTie玄铁,是阿里巴巴达摩院旗下品牌。依托阿里巴巴在云计算、人工智能和大数据领域的领先地位及优势,团队持续深耕 RISC-V 架构的前沿技术创新及开源生态建设,致力于为数字化时代提供强大、智能、安全、开放的新型计算架构和安全可靠的IP。

玄铁C906 处理器,是嵌入式领域的RISC-V 兼容的高能效低成本的64 位处理器。(openc906)采用RV64GC 指令集架构,主要面向视频监控、智能终端、扫脸支付等领域。

2 下载玄铁RISC-V指令测试用例

玄铁C906 处理器开源仓库:https://github.com/XUANTIE-RV/openc906,包含RTL代码和RISC-V指令测试用例。

若无法打开,可从这里下载:https://download.csdn.net/download/u011832525/90557596

3 下载玄铁GCC交叉编译器

从玄铁官网下载:Xuantie-900-gcc-elf-newlib-x86_64-V2.0.3-20210806.tar.gz

4 编译步骤

1. 安装csh

由于配置文件和make时,默认使用csh,而不是bash,因此需要安装这个csh。

cpp 复制代码
sudo apt-get install csh

安装好后,咱们输入命令:csh,进入到csh模式下,后续所有操作都要在csh下进行。

2. 配置CODE_BASE_PATH

cpp 复制代码
cd C906_RTL_FACTORY
source setup/setup.csh
cd ../smart_run

如下所示:
3. 修改smart_cfg.mk

将setup/example_setup.csh文件中,所有**_build标签下(如ISA_THEAD_build、ISA_INT_build等)的第一行命令后,添加/ -r,如下图中所示。

4. 配置TOOL_EXTENSION

按如下描述修改setup/example_setup.csh文件。

cpp 复制代码
vim setup/example_setup.csh
  • 将文件头部的版权声明信息,用#注释掉。
  • 将TOOL_EXTENSION,配置为RISC-V GCC编译器目录。

解压Xuantie-900-gcc-elf-newlib-x86_64-V2.0.3-20210806.tar.gz后,编译器位于Xuantie-900-gcc-elf-newlib-x86_64-V2.0.3\bin\riscv64-unknown-elf-gcc路径。

修改完毕后,使其生效:

cpp 复制代码
source setup/example_setup.csh

5. 编译CASE

创建输出目录:

cpp 复制代码
mkdir work

赋予Srec2vmem执行权限:

cpp 复制代码
chmod 777 tests/bin/Srec2vmem

编译ISA_THEAD用例

cpp 复制代码
make ISA_THEAD_build 

执行此命令,就会使用riscv64-unknown-elf-gcc来编译RISC-V测试用例源码,若没有报错,则表示编译成功。

在work目录下,会生成输出文件,如下:

注意:

  • make help可查看帮助,make showcase可查看当前所有有效的case,其他可自行了解。
  • 在编译完毕一个case后,需要先make clean后,才能重新编译下一个。

5 如何判断一个用例执行结果

我们可以看到,用例的反汇编文件中,有如下代码:

cpp 复制代码
0000000000000088 <__exit>:
__exit():
      88:	4501                	li	a0,0
      8a:	05a00093          	li	ra,90
      8e:	06b00113          	li	sp,107
      92:	07c00193          	li	gp,124
      96:	004441b7          	lui	gp,0x444
      9a:	3331819b          	addiw	gp,gp,819 # 444333 <__kernel_stack+0x356333>
      9e:	01b2                	slli	gp,gp,0xc
      a0:	22218193          	addi	gp,gp,546
      a4:	820e                	mv	tp,gp

00000000000000a6 <__fail>:
__fail():
      a6:	4501                	li	a0,0
      a8:	02c00093          	li	ra,44
      ac:	03b00113          	li	sp,59
      b0:	004701b7          	lui	gp,0x470
      b4:	4691819b          	addiw	gp,gp,1129 # 470469 <__kernel_stack+0x382469>
      b8:	01be                	slli	gp,gp,0xf
      ba:	72018193          	addi	gp,gp,1824

当测试成功时,会调用__exit()函数;

当测试失败时,会调用__fail()函数。

因此,可以通过如下寄存器值,来判断执行结果:

  • 当a0 == 0且ra == 90时,测试成功。
  • 当a0 == 0且ra == 44时,测试失败。
相关推荐
天才测试猿2 小时前
软件测试之功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
测试工程喵20 小时前
如何高效定位Bug:测试工程师的问题诊断艺术
功能测试·测试用例·bug·模块测试·缺陷管理·bug定位
车载测试工程师1 天前
车载功能测试-车载域控/BCM控制器测试用例开发流程【用例导出方法+优先级划分原则】
功能测试·安全·车载系统·测试用例·测试覆盖率
YHPsophie1 天前
面向高可靠场景的RISC-V低功耗MCU硬件安全设计
单片机·嵌入式硬件·risc-v
oahrzvq1 天前
【CPU】结合RISC-V CPU架构回答中断系统的7个问题(个人草稿)
架构·risc-v·中断·plic
程序员三藏1 天前
Python+Selenium的自动化测试框架详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
小突突突3 天前
总结设计测试用例的万能公式
测试用例
TARDIS_20203 天前
OpenHarmony-Risc-V上运行openBLAS中的benchmark
risc-v·openharmony
岁月_流沙3 天前
BR_初始载波频率容限(RF/TRM/CA/BV-08-C [Initial Carrier Frequency Tolerance])
测试用例·模块测试
测试工程喵3 天前
测试用例书写规范详解:构建高效测试体系的基础
功能测试·测试用例·模块测试·测试覆盖率·用例规范