平头哥玄铁 E902 编译与使用

2023-12-14 01:10:28

玄铁 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

文章来源:https://blog.csdn.net/flyingcys/article/details/134982653
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。