Skip to content

lightbreezz/miniRV_CPU

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

miniRV CPU

一个基于RISC-V指令集架构的CPU设计项目,包含单周期和流水线两种实现。

特别感谢:xuanhao44 的项目包含的单周期cpu数据通路图以及流水线cpu数据通路图。

单周期cpu数据通路

流水线cpu数据通路

项目概述

本项目实现了一个简化的RISC-V CPU,支持基本的RISC-V指令集。项目包含两个主要版本:

  • 单周期版本 (single/): 简单的单周期CPU实现
  • 流水线版本 (pipeline/): 五级流水线CPU实现,包含数据前递和冒险检测,控制冒险使用简单的流水线暂停

项目结构

miniRV_CPU/
├── readme.md
├── single/                 # 单周期CPU实现
│   ├── ALU.v              # 算术逻辑单元
│   ├── Bridge.v           # 总线桥接模块
│   ├── CONTROL.v          # 控制单元
│   ├── defines.vh         # 宏定义文件
│   ├── DIG.v              # 数码管显示模块
│   ├── EX.v               # 执行阶段模块
│   ├── ID.v               # 译码阶段模块
│   ├── IF.v               # 取指阶段模块
│   ├── LED.v              # LED控制模块
│   ├── miniRV_SoC.v       # 顶层模块
│   ├── myCPU.v            # CPU顶层模块
│   ├── NPC.v              # 下一PC计算模块
│   ├── PC.v               # 程序计数器
│   ├── RF.v               # 寄存器堆
│   ├── SEXT.v             # 符号扩展模块
│   └── timer.v            # 定时器模块
└── pipeline/              # 流水线CPU实现
    ├── ALU_MUX_A.v        # ALU A输入多路选择器
    ├── ALU_MUX.v          # ALU B多路选择器
    ├── ALU.v              # 算术逻辑单元
    ├── Bridge.v           # 总线桥接模块
    ├── CONTROL.v          # 控制单元
    ├── defines.vh         # 宏定义文件
    ├── DIG.v              # 数码管显示模块
    ├── DRAM_MUX.v         # 内存数据多路选择器
    ├── EX.v               # 执行阶段模块(不需要)
    ├── HAZARD.v           # 冒险检测单元
    ├── ID.v               # 译码阶段模块(不需要)
    ├── IF.v               # 取指阶段模块(不需要)
    ├── LED.v              # LED控制模块
    ├── miniRV_SoC.v       # 顶层模块
    ├── myCPU.v            # CPU顶层模块
    ├── NPC_JUMP.v         # 跳转NPC计算模块
    ├── NPC.v              # 下一PC计算模块
    ├── PC.v               # 程序计数器
    ├── REG_EX_MEM.v       # EX/MEM流水线寄存器
    ├── REG_ID_EX.v        # ID/EX流水线寄存器
    ├── REG_IF_ID.v        # IF/ID流水线寄存器
    ├── REG_MEM_WB.v       # MEM/WB流水线寄存器
    ├── RF_MUX.v           # 寄存器堆写回多路选择器
    ├── RF.v               # 寄存器堆
    ├── SEXT.v             # 符号扩展模块
    └── timer.v            # 定时器模块

主要特性

支持的指令类型

  • 算术运算指令: ADD, ADDI, SUB, LUI, AUIPC
  • 逻辑运算指令: AND, ANDI, OR, ORI, XOR, XORI
  • 移位运算指令: SLL, SLLI, SRL, SRLI, SRA, SRAI
  • 加载存储指令: LW, SW
  • 分支跳转指令: BEQ, BNE, BLT, BGE, BLTU, BGEU, JAL, JALR
  • 比较指令: SLT, SLTI, SLTU, SLTIU

外设支持

  • 数码管显示 (DIG)
  • LED控制 (LED)
  • 开关和按钮输入
  • 定时器 (timer)

流水线特性 (pipeline版本)

  • 五级流水线:IF → ID → EX → MEM → WB
  • 数据前递机制
  • 冒险检测和处理 (HAZARD)
  • 流水线寄存器同步

核心模块说明

CPU核心

  • myCPU: CPU顶层模块
  • CONTROL: 指令译码和控制信号生成
  • ALU: 算术逻辑运算单元
  • RF: 32个32位寄存器堆

内存和I/O

  • Bridge: 连接CPU和外设的总线桥
  • miniRV_SoC: chip 系统,集成CPU、内存和外设

流水线专用模块

  • HAZARD: 检测和处理数据冒险
  • REG_*: 流水线级间寄存器
  • *_MUX: 各种多路选择器

设计特点

  1. 模块化设计: 清晰的模块划分,便于理解和维护
  2. 完整的外设支持: 包含常用的I/O外设接口
  3. 调试接口: 支持RUN_TRACE模式进行调试
  4. 可配置性: 通过宏定义支持不同配置

使用说明

编译和仿真

使用Vivado或其他Verilog仿真工具:

  1. 选择对应版本(single或pipeline)
  2. 将所有.v文件添加到项目中
  3. 设置顶层模块为 miniRV_SoC
  4. 进行综合和实现

调试模式

defines.vh 中定义 RUN_TRACE 宏以启用调试功能:

`define RUN_TRACE

内存映射

  • 指令存储器 (IROM): 程序代码存储
  • 数据存储器 (DRAM): 数据存储
  • 外设地址空间:
    • 数码管: 0xFFFF_F000
    • LED: 0xFFFF_F060
    • 开关: 0xFFFF_F070
    • 按钮: 0xFFFF_F078
    • 定时器: 0xFFFF_F020

参考链接

项目仓库: https://github.com/xuanhao44/HITSZ-miniRVCPU

许可证

本项目遵循 GPL 开源许可证。

About

My miniRV_CPU implement.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published