平头哥玄铁 E902 编译与使用

2023-12-14 09:12

本文主要是介绍平头哥玄铁 E902 编译与使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

玄铁 E902 是平头哥半导体有限公司自主研发的极低功耗、极低成本嵌入式 CPU 核,以 8 位 CPU 的成本获得 32 位嵌入式 CPU 的运行效率与性能。 E902 兼容 RISC-V 指令架构,采用 16/32 位混合编码系统,指令系统与流水线硬件结构精简高效,具备极低成本、极低功耗和高代码密度等优点。 E902 主要针对智能卡、智能电网、低成本微控制器、无线传感网络等嵌入式应用。

E902 核的 RTL 代码是开源的,开源版本仓库:https://github.com/T-head-Semi/opene902。

在这里插入图片描述

1、E902架构概述

E902 处理器体系结构的主要特点如下:

  • 支持 RISC-V RV32E[M]C 指令集;
  • 16 个 32 位通用寄存器;
  • 两级顺序执行流水线;
  • 支持 RISC-V 机器模式和用户模式;
  • 支持 RISCV debug 架构,支持标准五线 jtag 调试接口,支持 cjtag 两线调试接口;
  • 可配置的单周期硬件乘法器,多周期硬件除法器;
  • 兼容 RISC-V CLIC 中断标准,支持中断嵌套,外部中断源数量最高可配置 240 个;
  • 兼容 RISC-V PMP 内存保护标准, 0/4/8/12/16 区域可配置;
  • 支持 AHB-Lite 总线协议,支持指令总线,系统总线;
  • 支持可配置的指令高速缓存,缓存行 16 字节,容量 2KiB/4KiB/8KiB 可配;
  • 支持平头哥扩展编程模型;
  • 支持复位启动地址硬件集成时可配置;
  • 支持软复位操作

在这里插入图片描述

流水线

E902 处理器采用 2 级流水线结构:取指和执行。

  • 指令取指阶段主要负责从内存中获取指令。
  • 指令执行阶段主要负责指令译码、执行和回写。

PMP

可配置的物理内存保护单元(Physical Memory Protection,PMP)负责物理地址的权限检查实现内存的保护功能,权限可划分为:不可读写/只读/可读写,可执行/不可执行。

调试

TDT 调试单元(T-Head Debug Trace)支持各种调试方式,包括软件断点、内存断点、单步和多步的指令跟踪等多种方式,可在线调试 CPU、通用寄存器(GPR)、控制寄存器(CSR)和内存。

紧耦合 IP 架构

为了提高 E902 的系统集成度,方便用户集成与开发,E902 设置内部总线用于集成紧耦合 IP(Tightly Coupled IP,TCIP)。这些紧耦合 IP 包括兼容 RISC-V 标准的 CLINT 和矢量中断控制器 CLIC。

中断控制器

矢量中断控制器的主要特征包括:

  • 支持 1-240 个外部中断源;
  • 支持中断嵌套;
  • 支持电平中断和脉冲中断;
  • 中断优先级 4/8/16/32 任意可配。

总线

E902 的系统总线接口支持 AMBA3.0 AHB-Lite 协议

性能

Dhryston:1.55 DMIPS/MHZ(O2)
CoreMark:2.69 CoreMark/MHZ(O3)

在这里插入图片描述

E902 对标的是 ARM Cortex-M0+。Cortex-M0+ 的 CoreMark 值为 2.46 CoreMark®/MHz,M0 内核的2.33 CoreMark/MHz。

2、通用寄存器

寄存器ABI 名称描述
x0zero零值
x1ra返回地址
x2sp堆栈指针
x3gp全局指针
x4tp线程指针
x5t0临时/备用链接寄存器
x6-7t1-2临时寄存器
x8s0/fp保留寄存器/帧指针
x9s1保留寄存器
x10-11a0-a1函数参数/返回值
x12-15a2-a5函数参数

3、SDK

平头哥提供了 E902 和 E902M 的 SDK,应该分别对应 RV32E 和 RV32EM,下载链接:https://www.xrvm.cn/community/download?id=658699855023046656。

SDK 编译的 elf 可以在平头哥提供的 QEMU 上直接运行。

qemu 在运行中可能会出现依赖未安装的情况,可执行以下命令:

$ sudo apt-get install -y libsnappy-dev libpixman-1-dev libpixman-1-dev libjpeg-dev libdaxctl-dev libvdeplug-dev libpmem-dev libgbm-dev libepoxy-dev libgtk-3-0 libaio1 libslirp-dev 

ubuntu 22.04 下可能还需要安装以下依赖:

$ sudo apt-get install -y libcapstone-dev libspice-server-dev libsdl2-2.0-0 libsdl2-image-2.0-0 libvirglrenderer-dev libcacard-dev libusbredirparser1 libfuse3-3 libiscsi7 librbd1
  1. 编译
$ cd SmartL_E902-R2S2-V1.7.11/projects/examples/hello_world
$ make
  1. 运行
  • E902
$ qemu-system-riscv32 -M smartl -cpu e902 -kernel out/smartl_e902_evb.elf -nographic -m 128M
Hello World!
Hello_World runs successfully!
  • E902M
$ qemu-system-riscv32 -M smartl -cpu e902m -kernel out/smartl_e902_evb.elf -nographic -m 128M

这篇关于平头哥玄铁 E902 编译与使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491946

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删