介绍一款轻量级的RISC-V解释型模拟器

描述

一、简介

XEMU 是一款轻量级的 RISC-V 解释型模拟器,基于 C 语言实现,支持 RV32IM 指令集,支持简单外设模拟

解释型模拟器:取指、译指、执行、更新 PC,例如 Spick、XEMU

翻译型模拟器:取值、译指、生成本机指令序列、更新 PC,例如 QEMU

二、功能介绍

  1. 环境介绍
    软件编译器:GNU MCU Eclipse RISC-V Embedded GCC, 64-bit (gcc version 8.2.0)
  2. 地址分配

C语言

实际使用的空间大小详见 link.lds 文件。

三、使用说明

  1. 指令集测试
    在源代码中关闭宏 ENABLE_UART

执行 ./autotest.bat 或者 ./autotest.sh,自动测试所有指令

模拟器退出条件:x26=1,x27=0/1

  1. 处理器功能模拟
    进入 ./sim 文件夹下,选择测试用例并进入,执行 make build

在根目录下执行 make build && make run

模拟器退出条件:

通过 UART1 发送字节序列 0x1b 0x04

键盘输入 Ctrl + b

四、示例

运行 rt-thread-nano 3.15

修改 Makefile,路径 ./sim/config.mk

ifeq ($(shell uname), Linux)
EMBTOOLPATH = /home/crazy/Tools/compiler/xuantie/v8.4.0/riscv64-elf-x86_64-20210307
EMBTOOLPREFIX = ${EMBTOOLPATH}/bin/riscv64-unknown-elf
CC = ${EMBTOOLPREFIX}-gcc
OBJDUMP = ${EMBTOOLPREFIX}-objdump
OBJCOPY = ${EMBTOOLPREFIX}-objcopy
else
EMBTOOLPATH = C:/riscv-none-embed
EMBTOOLPREFIX = ${EMBTOOLPATH}/bin/riscv-none-embed
CC = ${EMBTOOLPREFIX}-gcc.exe
OBJDUMP = ${EMBTOOLPREFIX}-objdump.exe
OBJCOPY = ${EMBTOOLPREFIX}-objcopy.exe
endif

进入测试用例目录,编译目标程序

cd sim/rtthread-nano
make build

编译模拟器并运行

make build && make run

运行结果

C语言

退出运行,Ctrl + b

五、写在最后

可以在 vcs 上直接仿真,环境都配置好了,直接用 dve/verdi 看波形和 log,在 Makefile 中修改 risc-v gcc 编译器路径即可

提供了 fpga 的实现,可以一键生成 xilinx 工程,提供了 coe 文件生成,可以一起下载到 fpga 中。工程中提供了 bootloader 的 demo,可以通过串口烧写程序(烧写到 bram 中,掉电丢失)

国产的 gowin fpga 也做了适配,使用 sispeed 的 Tang 9K 开发板。和 xilinx 的 fpga 操作类似

最后就是这几天写的 xemu,只适配了 rt-thread nano 3.1.5,完整的 rt-thread 没有去移植.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分