平头哥玄铁 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

相关文章

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.