当前位置: 首页 > news >正文

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

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

  • 1 玄铁处理器
  • 2 下载玄铁RISC-V指令测试用例
  • 3 下载玄铁GCC交叉编译器
  • 4 编译步骤
  • 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。

sudo apt-get install csh

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

2. 配置CODE_BASE_PATH

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文件。

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路径。

修改完毕后,使其生效:

source setup/example_setup.csh

5. 编译CASE

创建输出目录:

mkdir work

赋予Srec2vmem执行权限:

chmod 777 tests/bin/Srec2vmem

编译ISA_THEAD用例

make ISA_THEAD_build 

执行此命令,就会使用riscv64-unknown-elf-gcc来编译RISC-V测试用例源码,若没有报错,则表示编译成功。
在work目录下,会生成输出文件,如下:
在这里插入图片描述

  • elf为生成的可执行文件;
  • log文件内记录了make时产生的具体报错原因,发生错误时,可查看此文件。
  • 如果报错:Syntax error: Bad fd number,可参考《Linux执行sh脚本报错: Syntax error: Bad fd number》解决。

注意:

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

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

将work/C906_THEAD_ISA_EXTENSION.elf文件,进行反汇编:

riscv64-unknown-elf-objdump -dS C906_THEAD_ISA_EXTENSION.elf > C906_THEAD_ISA_EXTENSION.dump

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

0000000000000088 <__exit>:
__exit():88:	4501                	li	a0,08a:	05a00093          	li	ra,908e:	06b00113          	li	sp,10792:	07c00193          	li	gp,12496:	004441b7          	lui	gp,0x4449a:	3331819b          	addiw	gp,gp,819 # 444333 <__kernel_stack+0x356333>9e:	01b2                	slli	gp,gp,0xca0:	22218193          	addi	gp,gp,546a4:	820e                	mv	tp,gp00000000000000a6 <__fail>:
__fail():a6:	4501                	li	a0,0a8:	02c00093          	li	ra,44ac:	03b00113          	li	sp,59b0:	004701b7          	lui	gp,0x470b4:	4691819b          	addiw	gp,gp,1129 # 470469 <__kernel_stack+0x382469>b8:	01be                	slli	gp,gp,0xfba:	72018193          	addi	gp,gp,1824

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

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

  • 当a0 == 0且ra == 90时,表示测试成功。
  • 当a0 == 0且ra == 44时,表示测试失败。

http://www.mrgr.cn/news/96775.html

相关文章:

  • EasyExcel导出导入excel工具类
  • Go+Gin实现安全多文件上传:带MD5校验的完整解决方案
  • MySQL 进阶 面经级
  • 一起学习大语言模型-常用命令及模型介绍
  • 2023第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(真题题解)(C++/Java题解)
  • 41、当你在 index.html 中引用了一个公共文件(比如 common.js),修改这个文件后,用户访问页面时仍然看到旧内容,因为浏览器缓存了旧版本
  • Kafka 4.0入门到熟练
  • 41.C++哈希6(哈希切割/分片/位图/布隆过滤器与海量数据处理场景)
  • ML 聚类算法 dbscan|| OPTICS
  • 【C++】vector常用方法总结
  • Springboot学习笔记3.28
  • JVM——模型分析、回收机制
  • 七. JAVA类和对象(二)
  • 消息中间件对比与选型指南:Kafka、ActiveMQ、RabbitMQ与RocketMQ
  • 前端界面在线excel编辑器 。node编写post接口获取文件流,使用传参替换表格内容展示、前后端一把梭。
  • LLM应用层推荐 -- 基于文档的问答tools Web UI 框架 开源向量库 -- 推荐、对比
  • 003-JMeter发起请求详解
  • Vue中将pdf文件转为图片
  • GitPython库快速应用入门
  • 【超详细】一文解决更新小米澎湃2.0后LSPose失效问题