计算机组成原理|【北航计组】P3 单周期CPU(施工中……)

系列文章目录 【北航计组】P3 单周期CPU

文章目录

  • 系列文章目录
  • 前置技能
  • 一、CPU基本结构
    • 1. 取指模块
      • 1.1 指令
      • 1.2 取指令
    • 2. 控制器
    • 3. 寄存器堆
    • 4. 运算模块
    • 5. 内存
  • 二、CPU运行原理
    • 对于运算类指令
    • 对于分支指令
    • 对于跳转指令
    • 对于内存相关指令
  • 三、电路图及详解
  • 总结
【计算机组成原理|【北航计组】P3 单周期CPU(施工中……)】
前置技能
  1. 利用logisim绘制状态机
  2. 利用verilog编写状态机
  3. 利用MARS编写递归程序
一、CPU基本结构 单周期CPU基本结构如下所示:
上图CPU分为:取指模块、控制器、寄存器堆、运算模块、内存五个部分。
1. 取指模块 1.1 指令
??在32位机中,每一条指令都由一个32位二进制数表示,占用4个字节。
??例如 add $2, $0, $1 这条指令,意思是将寄存器0和寄存器1的值相加,结果存入寄存器2中。MARS会将它翻译成:其中31-26位和5-0位分别是,表示这条指令是加法指令;25-21,20-16,15-11位分别表示要操作的寄存器编号;对于加法指令,10-6位是空缺的,填充0。
??其他指令也会按照类似的规则转化成32位二进制码,存在指令寄存器中。
详见 【北航计组】P3 pre 指令详解

1.2 取指令
??当程序执行时,由程序计数器记录当前运行到第几条指令,然后从指令寄存器中取出对应的指令(一个32位数),传递给其他模块。
2. 控制器 ??控制器的功能是识别指令,并对其他模块发出信号。控制器通常要读取OpCode、Function部分,有时也需要rs、rt、rd、shamat部分。当OpCode(和Function等其他部分)的组合符合某一条指令时,控制器识别到这条指令,并发出各个模块执行这条指令所需要的信号。
??例如,当OpCode = ,Function = 时,控制器识别到加法指令,然后发出RegWrite(写寄存器信号)给寄存器堆,add(加法指令信号)给运算模块,同时还要给需要用到的选择器发送信号,例如选择写入寄存器地址的选择器。

3. 寄存器堆 ??存储32个寄存器的值,在MIPS-C寄存器中,0号寄存器永远是0,无法被写入;31号寄存器是跳转地址寄存器,在jal指令时,存入指令地址。
??寄存器堆有两个数据输出端、一个数据输入端。A1、A2、A3分别对应这三个端口的寄存器编号。
详见【北航计组】P3 pre 寄存器堆

4. 运算模块 ??支持加、减、移位等运算。读入两个数据,根据控制器的信号,做出对应的运算就可以了。
5. 内存 ??存储数据,支持内存与寄存器堆之间的读写。
二、CPU运行原理 最初,程序计数器内值为0x3000,即从这一条指令开始执行。
对于运算类指令
  1. 读取对应指令
  2. 在控制器译码
  3. 从寄存器堆取出所需数据
  4. 将数据送入运算模块执行对应运算
  5. 将结果写入寄存器堆
  6. 程序计数器+4(下一条指令的位置),返回1
例如:
对于分支指令
  1. 读取对应指令
  2. 在控制器译码
  3. 从寄存器堆取出所需数据
  4. 将数据送入运算模块执行对应运算
  5. 判断分支条件是否成立,若成立,程序计数器跳转到指定位置,否则程序计数器+4(下一条指令的位置),返回1
例如:
对于跳转指令
  1. 读取对应指令
  2. 在控制器译码
  3. 从寄存器堆取出所需数据
  4. 如果有写寄存器操作,需要将对应地址写入寄存器堆。
  5. 程序计数器跳转到指定位置,返回1
例如:
对于内存相关指令
  1. 读取对应指令
  2. 在控制器译码
  3. 从寄存器堆取出所需数据
  4. 将数据送入运算模块执行对应运算
  5. 读取或写入内存对应位置。如果是读内存指令,需要将读取的结果写入寄存器
  6. 程序计数器+4(下一条指令的位置),返回1
例如:
三、电路图及详解 总结

    推荐阅读