查看原文
其他

一个从零开始写的RISC-V处理器——tinyriscv

wcc149 电子电路开发学习 2023-06-07
最近两年,RISC-V这个词开始频繁的出现在各大网站和技术论坛,从芯来蜂鸟E203阿里平头哥玄铁910NXP织女星RV32M1、再到兆易创新GD32VF103、沁恒CH32V103等等,国内外涌现出了一大批RISC-V处理器。今天分享一位大佬从零开始写的极简、非常易懂的RISC-V处理器核,从一个FPGA小白的角度,来学习如何实现一个RISC-V处理器。

开源地址

该项目的Gitee开源地址:
https://gitee.com/liangkangnan/tinyriscv

(长按前往项目地址)

这个项目是Gitee码云智能硬件板块Star排名第二的项目。
该项目的作者是一名FPGA小白,为了对RISC-V从CPU实现到应用级程序开发有一个全面的了解,从零开始自学FPGA和Verilog HDL,最终用简单易懂的方式写了一个RISC-V处理器,并开源出来,于是tinyriscv在2019年12月诞生了。tinyriscv详细的开发笔记,可以到项目作者的个人博客查看,还在持续更新中:
https://liangkangnan.gitee.io/2020/04/29/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%86%99RISC-V%E5%A4%84%E7%90%86%E5%99%A8/

tinyriscv的特点

本项目实现的是一个单核32位的小型RISC-V处理器核(tinyriscv),采用verilog语言编写。设计目标是对标ARM Cortex-M3系列处理器。
tinyriscv有以下特点:
  1. 支持RV32IM指令集,通过RISC-V指令兼容性测试;
  2. 采用三级流水线,即取指,译码,执行;
  3. 可以运行C语言程序;
  4. 支持JTAG,可以通过openocd读写内存(在线更新程序);
  5. 支持中断;
  6. 支持总线;
  7. 支持FreeRTOS;
  8. 支持通过串口更新程序;
  9. 容易移植到任何FPGA平台(如果资源足够的话);
tinyriscv的整体框架如下:
tinyriscv目前外挂了6个外设,每个外设的空间大小为256MB,地址空间分配如下图所示:

CoreMark性能测试

目前tinyriscv在Xilinx Artix-7 35T FPGA平台(时钟50MHz)上运行CoreMark跑分程序的结果如下图所示:
可知,tinyriscv的跑分成绩为2.4。对比几款其他MCU的跑分结果如下图所示:
更多MCU的跑分结果,可以到coremark官网(www.eembc.org/coremark/scores.php)查询。

PC端如何进行仿真运行

FPGA代码可以使用开源的iverilog进行仿真和编译,波形查看工具使用的GTKwave,支持Windows、Linux和Mac平台。C程序编译使用的是开源的gnu-mcu-eclipse-riscv-none-gcc-8.2.0-2.2-20190521-0004-win64编译工具链,还需要安装make和Python3工具。

如何在FPGA开发板上实现

作者使用的是Xilinx  Artix-7 35T FPGA平台,开发环境vivado 2018.1,只要FPGA的资源足够,理论上可以移植到任何的FPGA平台。
从官方Gitee仓库下载完整的tinyriscv RTL代码,导入RTL源文件,添加约束文件,生成Bitstream,导出mcs固化到FPGA外部SPI Flash中,下载完成之后,就可以把这块FPGA芯片当做一个RISC-V内核的MCU来使用,使用C语言来写应用代码,生成目标bin文件,可以使用openocd工具配合CMSIS-DAP仿真器的方式进行程序下载,当然也指出串口UART方式下载。

总结

有兴趣了解RISC-V架构和FPGA实现软核处理器的朋友,可以到项目作者的开源仓库查看,
https://gitee.com/liangkangnan/tinyriscv

(长按前往项目地址)

如果想了解详细的实现过程,可以去项目作者的个人博客文章查看:
https://liangkangnan.gitee.io/2020/04/29/从零开始写RISC-V处理器/
大家多多支持国产开源处理器项目,赶紧去Star & Fork吧。
点击阅读原文↓,查看博客文章

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存