CPU 速通系列 0-0:概览
说明
本系列教程旨在利用 ChatGPT 速通《自己动手写 CPU》。看书太慢了,果然还是直接从代码上手最爽。 关于 Verilog/SV 的基础知识,跳过,可以自己找地方学。有个网站可以交互式学习,忘了叫什么了,有空补上。
模块
下面基本上是照搬书上的,是理解全书的基础。学芯片设计的老哥们最好背下来,面试肯定会问的。
取指阶段
-
PC 模块 作用:提供指令地址 文件:pc_reg.v
-
IF/ID 模块 作用:一个中间模块,链接取指与译码。其内部是一个寄存器,能够将取指阶段的结果(取得的指令、指令地址等信息)在下一个时钟传递到译码阶段。 文件:iid.v
译码阶段
-
ID 模块 作用:对指令进行译码,译码结果包括运算类型、运算所需的源操作数、要写入的目的寄存器地址等,生成相应的控制信号。 文件:id.v
-
Regfile 模块 实现了 32 个 32 位通用整数寄存器,可以同时进行两个寄存器的读操作和一个寄存器的写操作。 文件:regfile.v
-
ID/EX 模块 实现译码与执行阶段之间的寄存器,将译码阶段的结果在下一个时钟周期传递到执行阶段。 文件:idex.v
执行阶段
-
EX 模块 依据译码阶段的结果,进行指定的运算,给出运算结果。对应 文件。 文件:ex.v
-
DIV 模块 进行除法运算的模块。 文件:div.v
-
EX/MEM 模块 实现执行与访存阶段之间的寄存器,将执行阶段的结果在下一个时钟周期传递到访存阶段。 文件:exmem.v
访存阶段
-
MEM 模块 如果是加载、存储指令,那么会对数据存储器进行访问。此外,还会在该模块进行异常判断。对应 文件。 文件:mem.v
-
MEM/WB 模块 实现访存与回写阶段之问的寄存器,将访存阶段的结果在下一个时钟周期传递到回写阶段。 文件:mem_wb.v
回写阶段
-
CPO 模块 对应 MIPS 架构中的协处理器 CPO。
-
LLbit 模块 实现寄存器 LLbit,在链接加载指令 1、条件存储指令 sc 的处理过程中会使用到该寄存器,第 9 章会详述。
-
HILO 模块 实现寄存器 H、LO,在乘法、除法指令的处理过程中会使用到这两个奇存器,第 7 章会详述。