Skip to content

2023 年学校 CPU 设计课程作业, 一个使用 Chisel 编写的简单 RV32I CPU 核心

License

Notifications You must be signed in to change notification settings

Origami404/MiniRV-Chisel

Repository files navigation

MiniRV-Chisel

为了防止实验指导书年年更新, 当年的实验指导书仓库 fork 在此

本项目为本人的 2023 年学校 CPU 设计课程 的实验, 实现了一个简单的 RV32I CPU, 功能如下:

  • 使用 Chisel 开发, 集成了 学校提供的 verilator 测试框架
  • 五级流水线: IF, ID, EX, MEM, WB
  • 简单的分支预测 (2-bit) 与前递
  • 支持 rv32i 除 ecall/ebreak 之外的所有指令
    • sub-word load/store
  • 具有适合于本校 FPGA 板子的 SoC 设备
    • 本校板子: XC7A100TFGG484-1
  • 通过答辩的形式展示了 Chisel 的优势与本项目的设计

它不合理的地方如下:

  • 假设内存访存是单周期的
    • 没有缓存
  • 不支持 ecall/ebreak, 没有任何与特权级相关的功能
    • 没有 TLB
  • 不支持 CSR 与任何形式的中断与异常

本项目仅作为分享使用, 请勿用于任何正式用途. 请注意学术诚信, 拒绝抄袭.

不过抄袭的人真会抄我这个吗

项目结构

.
|-- core        # 核心代码
|-- macro       # 一些宏定义
|-- pre         # 答辩 slides
|-- trace       # 仿真相关文件
|   |-- asm     # 测试样例汇编
|   |-- bin     # 测试样例二进制
|   |-- csrc    # verilator 仿真文件
|   |-- golden_model
|   |-- mySoC   # Chisel 生成的 verilog 文件
|   |-- vsrc    # 仿真用内存模块
|   |   |-- ram1.v
|   |   `-- ram.v
|   |-- Makefile 
|   `-- run_all_tests.py
|-- build.sbt
`-- README.md

其中核心文件如下:

core/src/main/scala/top/origami404/miniRV
|-- io
|   |-- BlackBox.scala  # 对 Vivado IP 核的包装
|   |-- Devices.scala   # SoC 上的设备
|   `-- SoC.scala       # SoC 模块 (上板 Top 模块)
|-- utils
|   |-- F.scala         # 一些常用的函数
|   `-- Main.scala      # Chisel 转换入口
|-- Components.scala    # CPU 的组件: ALU, 解码器... 
|-- Constants.scala     # 常量定义
|-- Control.scala       # 不在流水线中的模块: 分支预测, 前递...
`-- Core.scala          # CPU 核心: 流水线模块与总体模块

使用

需要自行安装 sbtverilator.

编译 Chisel

sbt "project root" "runMain top.origami404.miniRV.utils.Main"

编译后会分别生成 trace/mySoC/CPUCore.vvivado/proj_pipeline.srcs/sources_1/new/SoC.v 两个文件.

运行仿真

cd trace
make TEST=文件名

其中文件名为为 trace/bin 下的二进制文件名, 例如 make TEST=add 会运行 trace/bin/add.bin 这个二进制文件. 也可以使用如下命令运行所有测试:

make build
make run_for_python

仿真框架由学校提供, 取自 cdp-tests, 在此感谢学长的付出.

综合与下板

根据 实验指导书 进行对应 IP 核的配置与 COE 文件导入. 注意, 本项目使用了四个单 byte 的 BROM 组合成了一个 多体交叉存储器, 因此需要将 start.bin 二进制文件的每一行 32 bit 的 hex 拆分成四份, 分别导入到四个 BROM 中.

感想

Chisel 不用一条条接线真的太方便了.

About

2023 年学校 CPU 设计课程作业, 一个使用 Chisel 编写的简单 RV32I CPU 核心

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages