Algo-Goer / RISC-V_CPU

计算机组成体系结构课程项目

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RISC-V_CPU

计算机组成体系结构课程项目,本课程项目测试基于助教给出的测试框架,System Verilog源代码在vsrc文件夹中。

项目结构

RISC-V_CPU
│── build:仿真测试时才会生成的目录
│── difftest:仿真测试框架
│── project-info:每次lab更新信息与实验文档
│ ├── lab1-info:lab1相关文档
│ ├── lab2-info:lab2相关文档
│ ├── lab3-info:lab3相关文档
│ └── lab4-info:lab4相关文档
│── ready-to-run:仿真测试文件目录
│ ├── lab1:包含lab1相关的测试文件,需要关注其中的 .S 汇编文件
│ ├── lab2:包含lab2相关的测试文件,需要关注其中的 .S 汇编文件
│ ├── lab3:包含lab3相关的测试文件,需要关注其中的 .S 汇编文件
│ └── lab4:包含lab4相关的测试文件,需要关注其中的 .S 汇编文件
│── vivado
│ └── src:vivado项目源文件
│ ├── test1
│ └── project1:vivado项目工程目录
│ ├── test2
│ └── project2:vivado项目工程目录
│ ├── test3
│ └── project3:vivado项目工程目录
│ └── test4
│ └── project4:vivado项目工程目录
│── vsrc:需要写的CPU代码所在目录
│ ├── include:头文件目录
│ ├── cache:缓存实现目录
│ ├── pipeline
│ ├── fetch:取指流水段目录
│ ├── decode:译码流水段目录
│ ├── execute:执行流水段目录
│ ├── memory:访存流水段目录
│ ├── writeback:写回流水段目录
│ ├── regfile:寄存器文件目录
│ ├── registers:流水段寄存器目录
│ ├── hazard:流水段冲突处理目录
│ └── core.sv:五级流水线主体代码
│ ├── ram:内存控制相关目录
│ ├── util:访存接口相关目录
│ ├── add_sources.tcl
│ ├── mycpu_top_nodelay.sv:以下是项目头文件
│ ├── mycpu_top.sv
│ ├── SimTop.sv
│ ├── VCacheTop.sv
│ └── VTop.sv
│── xpm_memory:Xilinx的内存IP
│── Makefile:仿真测试的命令汇总
└── README.md: 此文件

lab1 RISC-V基本五级流水线

需要实现指令:addi xori ori andi lui jal beq ld sd add sub and or xor auipc jalr

利用转发和阻塞处理流水线导致的数据冒险与控制冒险。

lab2 引入访存延迟与握手总线

1、需要在原有的基础上实现更多的指令

跳转指令:bne blt bge bltu bgeu

移位与比较指令:slti sltiu slli srli srai sll slt sltu srl sra

对字的操作指令:addiw slliw srliw sraiw addw subw sllw srlw sraw

2、添加握手总线,实现访存延迟下的流水线正常运转

3、支持不同粒度的内存读写

内存读:lb(1字节)lh(2字节)lw(4字节)ld(8字节)lbu(无符号1字节)lhu(无符号2字节)lwu(无符号4字节)

内存写:sb(1字节)sh(2字节)sw(4字节)sd(8字节)

lab3 实现高速缓存cache

1、需要在原有基础上实现乘除法指令;

2、添加缓存机制,降低访存导致的延迟;

lab4 实现异常与中断机制

1、需要支持的异常类型:

  • 指令地址不对齐
  • 数据地址不对齐(读、写)
  • 非法指令
  • ecall

2、需要支持的中断类型:

  • 时钟中断
  • 软件中断

About

计算机组成体系结构课程项目


Languages

Language:Assembly 76.3%Language:SystemVerilog 13.8%Language:C++ 4.0%Language:Verilog 1.3%Language:C 1.2%Language:Shell 1.0%Language:HTML 0.6%Language:JavaScript 0.5%Language:Tcl 0.4%Language:Makefile 0.3%Language:VHDL 0.3%Language:Scala 0.1%Language:Stata 0.1%Language:Batchfile 0.1%Language:Forth 0.0%Language:Pascal 0.0%