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 章会详述。