【北航计组】P3 单周期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

例如:

三、电路图及详解


总结

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值