从零开始的RISCV架构CPU设计(1)-CPU开源资料说明

文章目录

  • 前言
  • 一、开源资料说明
  • 二、飞V软核特点
  • 三、飞V核心SOC架构
  • 四、开发环境
    • 4.1 程序烧录
    • 4.2 软核参数配置说明
  • 五、写在最后


前言

  最近学习了RISC-V架构的CPU设计,然后根据经典的五级流水线架构在Vivado上完成了一个简单的CPU,故开一个新坑记录该CPU的设计过程。
  该CPU实现了RVIM指令集,并可以搭建简单的SOC。
  这个CPU也有致命缺点,就是没有实现JTAG,无法进行调试,在后面会实现。
  目前CPU进度可搭建片上soc,已能够通过Vivado综合,各功能验证无误。
  注:此软核仅用于学习交流,若要进行商用,请务必与作者本人联系!


一、开源资料说明

  开源资料链接:https://hihii11.github.io/verilog_fly_v_cpu.html
  资料总共提供了两份工程,其一用于软核的仿真,可以观察软核内部信号的变化。
  另一份用提供了一SOC设计实例,使用者可根据自己的板卡和需求修改工程配置,进行比特流烧录。
在这里插入图片描述

  在测试例程中给出了CPU和SOC的测试例程,分别用于上述两个工程。
在这里插入图片描述

  CPU测试例程
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第1张图片  SOC测试例程
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第2张图片
  在编译器中,提供了RISC-V的RARS编译器,具体程序烧录例程参考第五章。
在这里插入图片描述


二、飞V软核特点

  • 32位 RISCV架构CPU
  • 经典五级流水线架构
  • 支持RISC-V  IM指令集
  • 可拓展AHB主机接口
  • 可编程快速MIO口,最多32个
  • 内部可编程周期计数器、Timer64计数器(定时器)
  • PLIC中断管理器,可编程中断屏蔽、优先级
  • 最多支持23个用户自定义中断(不支持中断嵌套)
  • 暂无实现JTAG

三、飞V核心SOC架构

从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第3张图片 •软核部分
  在软核中设计了能通过CSR直接进行控制的周期计数器(MYCYCLE)、可编程快速IO口(MIO)、64位计数器(Timer64)。
这些器件固定占用了PLIC中断的ID 1~9。

  CPU内嵌了PLIC中断管理器,其产生的中断直接作为外部中断进行处理,其配置也可通过CSR寄存器组实现。

  CPU内嵌了AHB主机接口,能够通过AHB总线访问挂载在AHB总线上的各种器件,其配置也可通过CSR寄存器组实现。
内存访问部分使用单独的数据总线,ROM使用了Xilinx板载ROM,但RAM使用了LUT RAM。

  这是因为使用者可以通过LUT RAM来直观的观察RAM数据的读写过程,这里也可将LUT RAM直接替换为BRAM。
•自定义IP设计
  使用者自定义的IP核将直接挂载在AHB总线上,在本设计提供的示例设计中,默认挂载了一AHB读写测试从机、I2C、GPIO、SPI_LCD(LCD专用高速驱动器)。

  使用者可根据需要自行增删改查AHB接口的IP,具体方法在资料的AHB文档中有说明。

  最多可支持的AHB器件(推荐16)为4096。所有AHB器件若需要中断处理,则将连接至PLIC中断管理器的ID (10~32)(ID:10对应软核上的IRQn0)


四、开发环境

本RV软核设计的所有开发文件均在Vivado 2018.3中完成设计和调试。

4.1 程序烧录

  软核程序的下载通过配置ROM的向量文件来实现。
  首先通过RARS完成汇编的编写
在这里插入图片描述从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第4张图片
然后通过RARS生成机器码文件。文件路径选择为dist,后缀选择为bin。
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第5张图片从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第6张图片
将生成的bin文件拖拽至RV_bin2coe.exe脚本文件上,制作可供Vivado ROM使用的coe文件。
(注意:请务必保留config.txt文件,其中包含了coe文件的基本配置。如使用者需要也可自行修改)

从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第7张图片
打开Vivado工程,如果是SOC工程,则右击fly_v_top IP核,选择edit in ip packager。
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第8张图片从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第9张图片从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第10张图片
点击ok并生成ROM实例后,在打包器中重新打包。
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第11张图片
最后返回soc工程,更新IP核即可。
如果是CPU测试文件,则只要找到if-id下的rom,按照上述步骤生成实例ROM即可。

4.2 软核参数配置说明

  在RISC-V SOC工程中,双击fly_v_top IP核。
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第12张图片  IP核参数设置中,memory address界面用于配置CPU的ROM与RAM。
  在ROM Configuration界面可以对ROM中程序指令的起始地址和ROM的大小(单位KB)进行配置。
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第13张图片
  在RAM Configuration界面可以对RAM存储数据的宽度、RAM数据深度以及RAM的地址宽度进行设置。
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第14张图片
  在MIO界面可以对快速IO口进行例化。注意:MIO 0-7 能够进行中断配置。MIO 9-31 无法进行中断配置。
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第15张图片
  在External Interrupt界面可以对自定义中断接口。用户自定义的中断ID将从10开始。

从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第16张图片
  在AHB Interface界面可以对AHB接口进行设置,Base Addr为所有AHB从机设备的起始地址;
  Data Width为AHB总线数据宽度,默认32位。
  Addr Width为AHB总线地址宽度,默认32位。
  Fifo Depth为AHB Fifo深度。
  Fifo Addr Width为AHB Fifo地址宽度。
从零开始的RISCV架构CPU设计(1)-CPU开源资料说明_第17张图片


五、写在最后

  这个CPU的设计过程也不是一帆风顺的,遇到过很多的问题,如流水线数据冒险,控制冒险,分支跳转冲突等等;故开这个系列文章来记录下设计CPU的过程,在看完整个系列文章后,大家都能进行自己的简单CPU设计。
  当然,在开始之前,希望读者可以具备以下技能:
    1.掌握Verilog语言
    2.了解汇编语言
    3.熟悉一款仿真工具或集成开发环境(modelsim、quartus、Vivado等)。
    4.不放弃
  这里再推荐大家几本参考书籍《手把手教你设计CPU——RISC-V处理器篇》、《硬件架构的艺术》

你可能感兴趣的:(RISC-V架构CPU设计,基于Vivado的硬件设计,架构,fpga开发,硬件工程,硬件架构,嵌入式硬件)