自己动手写CPU(MIPS)----基础知识补充及单周期CPU取指译码

2023-10-07 07:40

本文主要是介绍自己动手写CPU(MIPS)----基础知识补充及单周期CPU取指译码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本次实验开始涉及MIPS架构CPU的设计。MIPS架构的CPU的传统流程为以下五个阶段:

  1. 取指(Instruction Fetch)
  2. 译码(Decode)
  3. 执行(Execution)
  4. 访存(Memory Request)
  5. 回写(Write Back)

实验目的

上一次实验基本完成了访存的功能,这次实验主要是掌握单周期CPU控制器的工作原理及设计方法掌握取指、译码阶段数据通路、控制器的执行过程

开发环境

实验任务

在这里插入图片描述

基础知识补充

1、寄存器

处理器包含的软件可见的寄存器种类如下:

  • 32个32 位通用寄存器,r0~r31。其中有两个被赋予了特殊含义:
    r0,0 号通用寄存器,值永远为 0;
    r31,31 号通用寄存器,被 JAL,BLTZAL 和 BGEZAL 指令隐式的用作目标寄存器,存放返回地址。
  • HI/LO 寄存器。HI 寄存器存放乘法指令结果的高半部分或是除法指令结果的余数,LO 寄存器存放
    乘法指令结果的低半部分或是除法指令结果的商。
  • 程序计数器(PC)。这个寄存器软件无法直接访问。
  • 控制寄存器(CP0).一组用于中断、例外控制的寄存器。

2、指令格式

MIPS的指令长度为固定的32bit,不同于RISC-V指令集。MIPS指令集的绝大部分指令格式均为立即数型(I-Type)、跳转型(J-Type)、寄存器型(R-Type)三种之一。
op:指令码
func:功能码
三种指令如图所示:
在这里插入图片描述
R类型
具体操作由op、func结合指定,rs和rt是源寄存器的编号,rd是目的寄存器的编号。MIPS有32个通用寄存器,使用5位编码刚好可以全部表示。sa只有在移位指令中使用,用来指定移位位数。

  • 当带有3个寄存器进行操作时,可有寄存器加add、减sub、与and、或or、异或xor指令可表示为

$rd = $rs op $rt

  • 当带有2个寄存器进行操作时,可有逻辑左移sll、逻辑右移srl、算术右移sll指令可表示为

$rd = $rt shift sa

当带有1个寄存器进行操作时,可有寄存器跳转的指令jr
I类型:具体操作由op决定,低16位为立即数
面向运算的I型指令有4种不同的类型:寄存器和立即数的加addi、与andi、或ori、异或xori
要注意的是再算数加中需要对立即数进行符号拓展(看立即数的高位的符号是几再进行01拓展)!其他指令0拓展

$rt = $rs op E(imm)

还有面向访存、面向数位设置、面向条件转移(分支)的I型指令。
J类型:具体操作由op指定,一般是跳转指令,低26位是字地址,用于产生跳转的目标地址。

4、寻址方式

MIPS32架构的寻址模式有寄存器寻址、立即数寻址、寄存器相对寻址和PC相对寻址四种。

  • 其中PC相对寻址,这种寻址方式一般是转移指令会用到,将程序计数寄存器PC和(立即数左移两位后进行符号拓展)相加从而获得有效地址,
    需要注意的是左移两位相当于恢复按字节寻址
  • 寄存器相对寻址不需要左移立即数!

4、协处理器CP0

这是刚才记录寄存器提到的控制寄存器,它主要负责处理指令集的某个扩展,拥有与处理器相独立的寄存器。在MIPS32架构中提供了最多4个协处理器CP0-CP3。

CP0:用于系统控制,具体作用有配置CPU工作状态、高速缓存控制、异常控制、存储单元控制。它主要是通过配置内部的一系列寄存器来完成上述工作。

5、异常

在处理器运行过程中,会从存储器依次取出指令,然后执行,但是有一些时间会打断正常的程序执行流程,这些事件有中断、陷阱、系统调用。异常发生后,处理器会转移到一个事先定义好的地址,在那个地址有异常处理程序,这个地址称为异常处理例程入口地址,异常处理完成后,使用异常返回指令eret,返回到异常发生前的状态继续执行。
中断会在后边的学习中再进行介绍。

单周期数据通路

在这里插入图片描述
把蓝色取指译码部分单独拿出来分析:
在这里插入图片描述
主要注意一下ALU control他的输入有一个Aluop,它和低6位结合一下来进行判断,这样有助于节省资源。

信号名称信号无效时含义信号有效时含义
memtoreg写入寄存器的值来源于ALU写入寄存器的值来源于数据存储器
memwrite数据存储器写使能
memread数据存储器读使能
pcsrc顺序执行,取PC+4跳转,使用目标地址代替PC+4
alusrcALU第二个输入来源于寄存器堆的第二个输入ALU第二个输入来源于指令的低16位(目标地址的偏移量)
regdst写寄存器操作的目标寄存器号来源于指令的rt字段(20:16)写寄存器操作的目标寄存器号来源于指令的rd字段(15:11)
regwrite寄存器堆写使能
branch不是是为branch指令,且满足branch的条件
jump不是是为jump指令
alucontrolALU控制信号,代表不同的运算类型

下面给出一个参考信号表

在这里插入图片描述

参考

重庆大学计算机组成实验
自己动手写CPU

这篇关于自己动手写CPU(MIPS)----基础知识补充及单周期CPU取指译码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/156998

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

【多系统萎缩患者必看】✨维生素补充全攻略,守护你的健康每一天!

亲爱的朋友们,今天我们要聊一个既重要又容易被忽视的话题——‌多系统萎缩患者如何科学补充维生素‌!🌟 在这个快节奏的生活中,健康成为了我们最宝贵的财富,而对于多系统萎缩(MSA)的患者来说,合理的营养补充更是维护身体机能、提升生活质量的关键一步。👇 🌈 为什么多系统萎缩患者需要特别关注维生素? 多系统萎缩是一种罕见且复杂的神经系统疾病,它影响身体的多个系统,包括自主神经、锥体外系、小脑及锥

Java程序到CPU上执行 的步骤

相信很多的小伙伴在最初学习编程的时候会容易产生一个疑惑❓,那就是编写的Java代码究竟是怎么一步一步到CPU上去执行的呢?CPU又是如何执行的呢?今天跟随小编的脚步去化解开这个疑惑❓。 在学习这个过程之前,我们需要先讲解一些与本内容相关的知识点 指令 指令是指导CPU运行的命令,主要由操作码+被操作数组成。 其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

有关机械硬盘的基础知识

1,机械硬盘的品牌   目前市场中常见的笔记本电脑的机械硬盘品牌主要有希捷、西部数据、三星等。   2,机械硬盘的容量   硬盘容量,即硬盘所能存储的最大数据量。虽然笔记本电脑硬盘的容量会因单位密度的提升而增加,不过和台式电脑的大容量比起来,笔记本电脑硬盘的容量仍然落后许多。笔记本电脑的硬盘除了对磁盘有体积较小和数量较少的要求之外,对功耗、耐用程度、抗震性及成本等的考虑,也让笔记