常见指令的数据通路和执行过程

作此篇的原因是17年19题:
请添加图片描述
本题选A,做的时候总感觉不够通透,因此把这题涉及到的内容全部看了一遍,顿时没有那种朦胧感了

零、五段式流水线:

请添加图片描述
以下均为MIPS设定:指令长度为32位,主存按字节编址(所以指令地址总是4的倍数,即最后两位是00),因此PC中只需存放前32位地址,即PC<31:2>(0,1,2,…,31中的2~31)
取下条指令=整个地址+4=PC<31:2>+1

一、运算类指令

  1. 运算类指令类型:
    • 加法指令(两个寄存器相加):add rd, rs, rt:R[rs]+R[rt]->R[rd]
    • 加法指令(寄存器与立即数相加):addiu rt, rs, imm16:R[rs]+SEXT(imm16)->R[rt]
    • 算数左移指令:SHL Rd:(Rd)<<<2->Rd
  2. R型指令(即类型1)的执行过程
    • IF阶段:根据PC从指令Cache取指令到IF段的寄存器
    • ID阶段:取出操作数至ID段寄存器
    • EX阶段:运算,将结果存入EX段寄存器
    • M阶段:空段
    • WB:将运算结果写回指定寄存器
  3. R型指令的数据通路:R[rs]+R[rt]->R[rd]
    请添加图片描述
    • Rs和Rt是两个源操作数寄存器编号,Rd是目的寄存器编号。因此寄存器堆的两个读地址端Ra和Rb分别与Rs与Rt相连,写地址端Rw与Rd相连。
    • ALU运算结果连到寄存器堆的写数据端busW
    • 控制信号RegWr为“写使能”信号,只有在RegWr信号为1且不溢出的情况下,运算结果才写入寄存器堆,显然R型指令执行时,RegWr信号应该为1
  4. I型指令的数据通路(即类型2)R[rs]+SEXT(imm16)->R[rt],在R型指令数据通路的基础上,改动如下:
    • 因为R型指令和I型指令的目的寄存器不同,所以在寄存器堆的写地址端Rw处,增加了一个多路选择器,由控制信号RegDst控制选择Rd为目的寄存器还是Rt为目的寄存器
    • 因为I型指令的立即数只有16位,需要对其扩展为32位才能送到32位ALU运算。对于按位逻辑运算,应采用零扩展,对于算术运算,应采用符号扩展。因此在数据通路中应增加一个扩展器,由控制信号ExtOp控制进行符号扩展还是零扩展
    • 因为R型指令和I型指令在ALU的B口的操作数来源不同,所以在ALU的B输入端增加了一个多路选择器,由控制信号ALUSrc控制选择busB还是扩展器输出作为ALU的B口操作数
      请添加图片描述

二、LOAD指令

lw rt, rs, imm16:R[rs]+SEXT(imm16)->Addr;M[Addr]->R[rt]

  1. 执行过程:
    • IF阶段:根据PC从指令Cache取指令到IF段的寄存器
    • ID阶段:将基址寄存器的值放到寄存器A,将偏移量的值放到Imm
    • EX阶段:运算得到有效地址,将结果存入EX段寄存器
    • M阶段:从数据Cache种取数并放入寄存器
    • WB:将取出的数写回指定寄存器

三、STORE指令

sw rt, rs, imm16:R[rs]+SEXT(imm16)->Addr;R[rt]->M[Addr]

  1. 执行过程:
    • IF阶段:根据PC从指令Cache取指令到IF段的寄存器
    • ID阶段:将基址寄存器的值放到寄存器A,将偏移量的值放到Imm,将要存的数放到B
    • EX阶段:运算得到有效地址,将地址存入EX段寄存器,并将寄存器B的内容放到寄存器Store
    • M阶段:写入数据Cache
    • WB:空段
  2. 数据通路:
    • 流程:load指令和store指令的地址计算过程一样,都要先对立即数进行符号扩展,然后和基址寄存器的内容相加,得到访存地址。load指令是从该地址中读取一个数送到寄存器,store指令则相反
    • 支持load/store指令功能的数据通路图:
      请添加图片描述
      在I型指令数据通路的基础上,改动如下:
      • 因为运算类指令和load指令写入目的寄存器的结果的来源不同,所以在寄存器堆的写数据端busW处增加了一个多路选择器,由控制信号MemtoReg控制选择将ALU结果还是存储器读出数据写入目的寄存器
      • 因为load/store指令需要读写数据存储器,故增加了数据存储器。访存地址在ALU中计算,因此数据存储器的地址端Adr连到ALU的输出。store指令将Rt内容送存储器,所以直接将busB连到数据存储器的DataIn输入端,而将输出端连到busW端的多路选择器上。控制信号MemWr用作“写使能”信号。load/store指令的地址运算对立即数进行符号扩展,ALUctr输入端的操作类型是不判溢出的加法addu

四、分支指令(条件转移指令)

beq rs, rt, imm16:R[rs]-R[rt]->Cond;if (Cond eq 0) PC+(SEXT(imm16)x4)->PC

  1. 执行过程:
    • IF阶段:根据PC从指令Cache取指令到IF段的寄存器
    • ID阶段:将进行比较的两个数放入寄存器A、B,偏移量放入Imm
    • EX阶段:运算,比较两个数
    • M阶段:将目标PC值写回PC(很多教材把写回PC的功能段称为“WrPC段”,因其耗时比M段更短,因此可安排在M段时间内完成)
    • WB:空段
  2. 取指令部件的设计:
    请添加图片描述
    • 指令专门存放在指令存储器中,只有读操作。只需给出指令地址,经过一定的“取数时间”后,指令被送出。因为讨论的前提是单周期处理器(一个时钟周期完成一条指令),所以每来一个时钟,PC的值都会被更新一次,因而PC无需“写使能”信号控制
    • 指令的地址来自PC,有专门的下地址逻辑来计算下条指令的地址,然后送PC。下地址逻辑中,要区分是顺序执行还是转移执行:若是顺序执行,则执行PC+4,若是转移执行,则要根据当前指令是分支指令还是跳转指令来计算转移目标地址
      • 顺序执行时:PC<31:2>+1->PC<31:2>
      • 跳转执行时:PC<31:2>+1+SEXT[imm16]->PC<31:2>
      • 取指令时:指令地址=PC<31:2>||00
  3. 数据通路:
    请添加图片描述
    在load/store型指令数据通路的基础上,增加beq指令功能:
    • (与图5.11相比)主要增加了取指令部件,转移目标地址的计算在下地址逻辑中实现,在ALU中执行的是不判溢出的减法操作subu
    • 下地址逻辑的输出是下条指令地址,4个输入是PC、Zero标志、立即数imm16、控制信号Branch
      • Zero标志:在ALU中对R[Rs]和R[Rt]做减法得到一个Zero标志,根据Zero标志可判断是否转移
      • 目标地址的计算:先对立即数imm16进行符号扩展再乘4,然后和基准地址PC+4相加
      • 控制信号Branch:表示当前指令是否是分支指令,也应送到下地址逻辑,以决定是否按分支指令方式计算下条指令地址
    • 下图是分支指令的下地址逻辑设计,可看出,每来一个时钟CLK,当前PC作为指令地址被送到指令存储器去取指令的同时,下地址逻辑计算下条指令地址并送PC的输入端,在下个时钟到来后写入PC
      请添加图片描述

五、无条件转移指令(J型指令)

j target:PC<31:28>||target<25:0>->PC<31:2>
这类指令寻址方式只有直接寻址。将当前PC的高4位拼接26位直接地址最后再补充两个0就是跳转的目标地址(因为MIPS是32位定长指令字,所以指令地址一定是4的倍数,即地址最后两位总是0,无需在指令中显式给出)

  1. 执行过程:
    • IF阶段:根据PC从指令Cache取指令到IF段的寄存器
    • ID阶段:偏移量放入Imm
    • EX阶段:将目标PC值写回PC(很多教材把写回PC的功能段称为“WrPC段”,因其耗时比EX段更短,因此可安排在EX段时间内完成)
    • M阶段:
    • WB:空段
  2. 完整的取指令部件(在图5.13分支指令下地址逻辑的基础上)
    请添加图片描述
    • 跳转目标地址的计算方法:PC<31:28>||target<25:0>->PC<31:2>
    • 取指令阶段开始时,新指令还未被取出和译码,因此取指令部件中的控制信号的值还是上条指令产生的旧值,此外新指令还未被执行,因而标志(Zero)也为旧值。不过由这些旧控制信号值确定的地址只被送到PC输入端,并不会写入PC,因此不会影响取指令功能。只要保证在下个时钟CLK到来之前能产生正确的下条指令地址即可
    • 取指令部件的输出是指令,输入是标志Zero、控制信号Branch和Jump。下地址逻辑中的立即数imm16和目标地址target<25:0>都直接来自取出的指令。

六、综合上述指令的完整数据通路

综合考虑上述所有数据通路的结构,可得到如下图所示的完整单周期数据通路。图中所有加下划线的都是控制信号,用虚线表示。指令执行结果总是在下个时钟到来时开始保存在寄存器、数据存储器或PC中
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/172722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Echarts 最简单创建柱状图

设置容器 <div ref"myChart" style"width: 500px; height: 500px;"> </div>mounted() {//document渲染完成this.draw()}draw() {const myChart this.$echarts.init(this.$refs.myChart)//初始化对象myChart.setOption({ //参数配置项title: …

探索接口测试:SOAP、RestFul规则、JMeter及市面上的接口测试工具

引言 在当今软件开发领域&#xff0c;接口测试扮演着至关重要的角色。随着系统变得日益复杂和互联&#xff0c;对于内部和外部接口的测试变得愈发关键。接口测试不仅仅是验证接口的正确性&#xff0c;更是确保系统的稳定性、安全性和性能优越性的关键一环。 本篇博客将带您深入…

[Linux]进程等待

文章目录 3.进程等待3.1什么是进程等待3.2为什么要进程等待3.3如何进行进程等待?1.wait2.waitpid2.1函数的讲解2.2status的理解2.3代码理解 3.4学后而思1.直接用全局变量获取子进程退出码可以吗?如下2.进程具有独立性 退出码是子进程的数据 父进程是如何拿到退出码的3.对内存…

云匣子 FastJson反序列化RCE漏洞复现

0x01 产品简介 云匣子是租户连接云资源的安全管理工具&#xff0c;帮助云租户更加安全、精细的管理云上的虚拟机、数据库等资源。 云安宝结合多年的运维和安全实践&#xff0c;将云上的运维和安全有机结合&#xff0c;实现对运维过程的事前规划、事中控制和 事后审计。在此之上…

nodejs微信小程序+python+PHP-婚纱摄影预约系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Linuxfork,写时拷贝

1.prinf隐藏的缓冲区 1.思考:为什么会有缓冲区的存在? 2.演示及思考? 1).演示缓存区没有存在感 那为什么我们感觉不到缓冲区的存在呢?我们要打印东西直接就打印了呢? 我们用代码演示一下: 比如打开一个main.c,输入内容如下: #include <stdio.h> int main() { …

LLaMA 2:开源的预训练和微调语言模型推理引擎 | 开源日报 No.86

facebookresearch/llama Stars: 36.0k License: NOASSERTION LLaMA 2 是一个开源项目&#xff0c;用于加载 LLaMA 模型并进行推理。 该项目的主要功能是提供预训练和微调后的 LLaMA 语言模型的权重和起始代码。这些模型参数范围从 7B 到 70B 不等。 以下是该项目的关键特性…

kubernetes架构及核心组件简单介绍

目录 整体架构控制面kube-apiserver访问控制通知 kube-scheduler概述默认调度策略 kube-controller-manageretcd架构Raft协议日志复制 数据面kubeletkube-proxy 整体架构 集群架构图 控制面 控制面是kubernetes的核心组件&#xff0c;负责管理和控制集群的整体行为&#xf…

jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对博主首页也很感兴趣o (ˉ▽ˉ&#xff1b;) 学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程 目录 1、下载jdk17 2、安装jdk17 3、配置环境变量 -> 电脑无其他jdk 4、…

Echarts title标题配置项的使用 更改颜色 副标题

title配置项主要是对图表的标题进行配置 title配置项所有属性文档 title&#xff1a; { ...... }设置标题 副标题 text: 简单创建柱形图,//图表标题 subtext: 副标题,如果想对副标题设置 超链接 边框 颜色 宽度…等 比如&#xff1a;设置超链接 sublink:‘…’, 设置标题位置…

10_7iic整体框架流程

在内核中 这边把iic整个流程分成了 4层 iic_dtiver at24_iic_eeprom 也就是我们的自己的驱动 i2c-core.c 核心层 i2c/busses/i2c-s3c2410.c 控制器层 平台总线驱动层,或者也是图中的设备树 硬件描述 我们假设 板子上有三个iic控制器 0 1 2 这里在控制器0 上挂载了gt24c02的eep…

STK Components 二次开发-创建地面站

1.地面站只需要知道地面站的经纬高。 // Define the location of the facility using cartographic coordinates.var location new Cartographic(Trig.DegreesToRadians(-75.596766667), Trig.DegreesToRadians(40.0388333333), 0.0); 2.创建地面站 创建方式和卫星一样生成对…

如何使用JMeter测试导入接口/导出接口

今天一上班&#xff0c;被开发问了一个问题&#xff1a;JMeter调试接口&#xff0c;文件导入接口怎么老是不通&#xff1f;还有导出文件接口&#xff0c;不知道文件导到哪里去了&#xff1f; 我一听&#xff0c;这不是JMeter做接口测试经常遇到的嘛&#xff0c;但是一时半会又…

解决视口动画插件jquery.aniview.js使用animate.css时无效的问题(最新版本网页视口动画插件的使用及没作用、没反应)

当网站页面元素进入视口时自动应用过渡效果。CSS过渡效果可以为网页添加动画效果&#xff0c;并提供了一种平滑的转换方式&#xff0c;使元素的变化更加流畅和生动。而通过jQuery插件来获取页面滚动位置决定合适调用动画效果。 一、官网 animate.css官网 一款强大的预设css3动…

Linux的基本指令(四)

目录 前言 时间相关的指令 date指令 时间戳 日志 时间戳转化为具体的时间 cal指令 find指令&#xff08;十分重要&#xff09; grep指令&#xff08;行文本过滤工具&#xff09; 学前补充 什么是打包和压缩&#xff1f; 为什么要打包和压缩&#xff1f; 怎么打包和…

【数据结构】二叉树oj题

在处理oj题之前我们需要先处理一下之前遗留的问题 在二叉树中寻找为x的节点 BTNode* BinaryTreeFind(BTNode* root, int x) {if (root NULL)return NULL;if (root->data x)return root;BTNode* ret1 BinaryTreeFind(root->left, x);BTNode* ret2 BinaryTreeFind(ro…

Windows系统下更新后自带的画图软件出现马赛克bug

一.bug的样子&#x1f357; 在使用橡皮后&#xff0c;原来写的内容会变成马赛克。而我们希望它是纯白色的。 二.解决方法&#x1f357; 第一步 第二步 第三步 三. 解决后的效果&#x1f357; 用橡皮擦随便擦都不会出现马赛克了。 更新过后&#xff0c;想用win自带的画图软件会出…

【前沿技术了解】web图形Canvas、svg、WebGL、数据可视化引擎的技术选型

目录 Canvas&#xff1a;HTML5新增 Canvas标签&#xff08;画布&#xff09; 渲染上下文canvas.getContext(contextType[, contextAttributes]) 上下文类型&#xff08;contextType&#xff09; 上下文属性 (contextAttributes) 示例 动画 setInterval(function, delay)…

2023/11/26总结

一些学习记录&#xff1a; 在对数据库进行一系列操作的时候&#xff0c;遇到一个问题&#xff0c;在插入数据的时候&#xff0c;我数据库对应的是自增id&#xff0c;但是插入后想获取到这个id去使用。我以为是不可以马上获取的&#xff0c;然后看到 项目进度 购物车&#xff…

[pyqt5]PyQt5之如何设置QWidget窗口背景图片问题

目录 PyQt5设置QWidget窗口背景图片 QWidget 添加背景图片问题QSS 背景图样式区别PyQt设置窗口背景图像&#xff0c;以及图像自适应窗口大小变化 总结 PyQt5设置QWidget窗口背景图片 QWidget 添加背景图片问题 QWidget 创建的窗口有时并不能直接用 setStyleSheet 设置窗口部分…