重庆大学硬件综合设计项目。
本项目现在已经结束。本项目下的代码仅供参考,不保证任何正确性。本项目下的文档已经过时并很可能与实际情况不符。
其中,Datapath与MMU之间使用虚拟地址,MMU与Cache之间和Cache与SRAM-Like-AXI桥之间使用物理地址,以上三者均使用SRAM-Like接口。而CPU整体对外使用AXI接口,并接受硬件中断。
- 地址线:用蓝色表示,包含指令或数据的地址,可能包含该地址受否有效;
- 指令线:用紫色表示,包含解码之前或解码之后的指令;
- 数据线:用绿色表示,包含读写的数据,可能包含与之对应的使能和寄存器信息;
- 异常线:用红色表示,包含异常信息;
- 控制线:用黄色表示,包含停顿、刷新等流水线控制信号。
代号 | 含义 |
---|---|
IF.A.1 | 将要执行的指令地址 |
IF.C.1 | 控制PC寄存器的停顿、刷新信号 |
IF.C.2 | 指令总线发出的停顿请求 |
ID.A.1 | 分支指令目标地址,以及该地址的有效性 |
ID.I.1 | 解码之前的指令 |
ID.I.2 | 解码之后的指令 |
ID.D.1 | 指令中的立即数(扩展之后) |
ID.D.2 | 用于分支判断的寄存器数据(合并前推之后) |
ID.D.3 | 向ID阶段前推的数据 |
ID.D.4 | 寄存器数据(合并前推之前) |
ID.E.1 | 指令总线产生的异常 |
ID.E.2 | 译码器产生的异常 |
ID.E.3 | CP0寄存器提供的中断异常 |
EX.D.1 | 向EX阶段前推的数据 |
EX.D.2 | ALU操作数 |
EX.D.3 | ALU写CP0寄存器(特权指令mtc0) |
EX.D.4 | ALU读CP0寄存器(特权指令mfc0) |
EX.D.5 | ALU运算结果 |
EX.E.1 | ALU产生的异常 |
EX.C.1 | 多周期运算器发出的停顿请求 |
MM.A.1 | 访存地址 |
MM.A.2 | 异常处理入口地址,以及该地址的有效性 |
MM.D.1 | 访存或写回寄存器的数据 |
MM.D.2 | 异常处理写入CP0的数据 |
MM.E.1 | 数据总线产生的异常 |
MM.C.1 | 异常处理发出的刷新请求 |
MM.C.2 | 数据总线发出的停顿请求 |
WB.D.1 | 访存得到的数据 |
WB.D.2 | 写回寄存器的数据 |
注:此处列出的模块仅包含在数据通路中出现的重要模块,具体实现时可根据需要添加模块。
模块名称 | 源文件路径 | 文档路径 | 主要功能 | 负责人 |
---|---|---|---|---|
mips | src/mips/mips.v | doc/mips/mips.md | 封装MIPS整体功能 | WXY |
sram_like_to_axi | src/mips/sram_like_to_axi.v | 转换SRAM-Like至AXI | 实验环境提供 | |
mmu | src/mips/mmu.v | doc/mips/mmu.md | 实现地址映射 | ZHY/QXF |
bus | src/mips/bus.v | doc/mips/bus.md | 实现简单总线接口 | WXY |
gpr | src/mips/gpr.v | doc/mips/gpr.md | 实现通用寄存器堆 | ZHY/QXF |
cp0 | src/mips/cp0.v | doc/mips/cp0.md | 实现CP0寄存器堆 | ZHY/QXF |
模块名称 | 源文件路径 | 文档路径 | 主要功能 | 负责人 |
---|---|---|---|---|
cache | src/mips/cache/cache.v | doc/mips/cache/cache.md | 实现缓存整体 | WXY |
cache_set | src/mips/cache/cache_set.v | doc/mips/cache/cache_set.md | 实现缓存组 | WXY |
cache_line | src/mips/cache/cache_line.v | doc/mips/cache/cache_line.md | 实现缓存行 | WXY |
模块名称 | 源文件路径 | 文档路径 | 主要功能 | 负责人 |
---|---|---|---|---|
datapath | src/mips/datapath/datapath.v | doc/mips/datapath/datapath.md | 封装数据通路 | WXY |
control | src/mips/datapath/control.v | doc/mips/datapath/control.md | 实现流水线控制器 | WXY |
forward | src/mips/datapath/forward.v | doc/mips/datapath/forward.md | 实现流水线数据前推功能 | WXY |
模块名称 | 源文件路径 | 文档路径 | 主要功能 | 负责人 |
---|---|---|---|---|
if | src/mips/datapath/if/if.v | doc/mips/datapath/if/if.md | 封装取值阶段 | ZHY |
pc | src/mips/datapath/if/pc.v | doc/mips/datapath/if/pc.md | 实现PC寄存器 | ZHY |
模块名称 | 源文件路径 | 文档路径 | 主要功能 | 负责人 |
---|---|---|---|---|
id | src/mips/datapath/id/id.v | src/mips/datapath/id/id.md | 封装译码阶段 | QXF |
branch | src/mips/datapath/id/branch.v | doc/mips/datapath/id/branch.md | 处理分支指令 | WXY |
decode | src/mips/datapath/id/decode.v | doc/mips/datapath/id/decode.md | 实现指令译码 | WXY |
brcsrc | src/mips/datapath/id/brcsrc.v | doc/mips/datapath/id/brcsrc.md | 准备分支指令处理的操作数 | QXF |
模块名称 | 源文件路径 | 文档路径 | 主要功能 | 负责人 |
---|---|---|---|---|
ex | src/mips/datapath/ex/ex.v | doc/mips/datapath/ex/ex.md | 封装执行阶段 | WXY |
mulalu | src/mips/datapath/ex/mulalu.v | doc/mips/datapath/ex/mulalu.md | 实现多周期ALU | WXY |
sglalu | src/mips/datapath/ex/sglalu.v | doc/mips/datapath/ex/sglalu.md | 实现单周期ALU | ZHY/QXF |
alusrc | src/mips/datapath/ex/alusrc.v | doc/mips/datapath/ex/alusrc.md | 准备ALU的操作数 | ZHY |
模块名称 | 源文件路径 | 文档路径 | 主要功能 | 负责人 |
---|---|---|---|---|
mm | src/mips/datapath/mm/mm.v | doc/mips/datapath/mm/mm.md | 封装访存阶段 | WXY |
except | src/mips/datapath/mm/except.v | doc/mips/datapath/mm/except.md | 实现异常处理 | WXY |
memctl | src/mips/datapath/mm/memctl.v | doc/mips/datapath/mm/memctl.md | 控制访存 | ZHY |
模块名称 | 源文件路径 | 文档路径 | 主要功能 | 负责人 |
---|---|---|---|---|
wb | src/mips/datapath/wb/wb.v | doc/mips/datapath/wb/wb.md | 封装写回阶段 | QXF |
regsrc | src/mips/datapath/wb/regsrc.v | doc/mips/datapath/wb/regsrc.md | 准备写回寄存器的数据 | QXF |