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

news2024/11/29 21:24:53

作此篇的原因是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.coloradmin.cn/o/1256127.html

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

相关文章

RC-MVSNet:无监督的多视角立体视觉与神经渲染--论文笔记(2022年)

RC-MVSNet&#xff1a;无监督的多视角立体视觉与神经渲染--论文笔记&#xff08;2022年&#xff09; 摘要1 引言2 相关工作2.1 基于监督的MVS2.2 无监督和自监督MVS2.3 多视图神经渲染 3 实现方法3.1 无监督的MVS网络 Chang, D. et al. (2022). RC-MVSNet: Unsupervised Multi-…

领域驱动设计总结——如何构造领域模型

领域驱动设计总结——如何构造领域模型 本文为领域驱动设计系列总结的第三篇&#xff0c;主要对领域驱动设计概念做个介绍&#xff0c;本系列领域驱动设计总结主要是在Eric Evans 所编写的《领域驱动设计》 一书的基础上进行归纳和总结。本文主要介绍在领域驱动设计中如何构造…

【数据中台】开源项目(2)-Dbus系统架构

大体来说&#xff0c;Dbus支持两类数据源&#xff1a; RDBMS数据源 日志类数据源 1 RMDBMS类数据源的实现 以mysql为例子. 分为三个部分&#xff1a; 日志抽取模块(最新版DBus已经废弃该模块&#xff0c;使用canal直接输出到kafka) 增量转换模块 全量拉取模块 1.1 日志抽…

紫光展锐 展讯芯片 展讯处理器解锁BL 各分区结构 ROM 分区列表代表什么 bin img 表示什么意思

是展锐 Android 10.0、Android 9.0 平台 ROM 空间划分情况以及分区格式、分区大小和分区功能的 初步描述。 prodnv 开机后系统中的 productinfo 分区&#xff0c;保 存 adc 校准参数、eng.db 数据库。 Miscdata 保存 ota、recovery 时的一些数据 recovery 存放 recovery.i…

【深度学习实验】图像处理(二):PIL 和 PyTorch(transforms)中的图像处理与随机图片增强

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入需要的工具包1. PIL图像处理a. 生成绿色和蓝色图像b. 缩放和合成图像c 在合成图像上添加文字d. 展示并保存图像 2. PIL随机图像增强a. 定义随机图像增强函数b. 实验结果展示 3. PyTorch&…

【Amazon】通过代理连接的方式导入 AWS EKS集群至KubeSphere主容器平台

文章目录 一、设置主集群方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 二、在主集群中设置代理服务地址方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 三、登录控制台验证四、准备成员集群方式一&#xff1a;使用 Web 控制台…

P17C++析构函数

目录 前言 01 什么是析构函数 1.1 举个栗子 02 为什么要写析构函数 前言 今天我们要讨论一下它的“孪生兄弟”&#xff0c;析构函数&#xff0c;它们在某些方面非常相似。 与构造函数相反&#xff0c;当对象结束其生命周期&#xff0c;如对象所在的函数已调用完毕时&…

[LaTex]arXiv投稿攻略——jpg/png转pdf

一、将图片复制进ppt&#xff0c;右键单击图片选择设置图片格式&#xff0c;获取图片高度和宽度 二、选择“设计-幻灯片大小-自定义幻灯片大小” 三、设置幻灯片大小为图片大小 四、 选择“最大化” 五、 检查幻灯片大小是否与图像大小一致 六、导出为PDF

web前端之vue和echarts的堆叠柱状图顶部显示总数、鼠标悬浮工具提示、设置图例的显示与隐藏、label、legend、tooltip

MENU 效果图htmlJavaScripstyle解析 效果图 html <template><div><div><div id"idStackedColumnChart" style"width: 100%; height: 680px"></div></div></div> </template>JavaScrip export default {…

单细胞seurat入门—— 从原始数据到表达矩阵

根据所使用的建库方法&#xff0c;单细胞的RNA序列&#xff08;也称为读取&#xff08;reads&#xff09;或标签&#xff08;tags&#xff09;&#xff09;将从转录本的3端&#xff08;或5端&#xff09;&#xff08;10X Genomics&#xff0c;CEL-seq2&#xff0c;Drop-seq&…

Django(十一、auth认证模块)

文章目录 一、auth介绍auth认证相关模块及操作扩展auth_user表 一、auth介绍 Django自带一个admin路由&#xff0c;但是需要我们提供管理员账户和密码&#xff0c;如果想要使用admin后台管理&#xff0c;需要先创建表&#xff0c;然后创建管理员账户。 直接执行数据类迁移命令…

Redis:持久化RDB和AOF

目录 概述RDB持久化流程指定备份文件的名称指定备份文件存放的目录触发RDB备份redis.conf 其他一些配置rdb的备份和恢复优缺点停止RDB AOF持久化流程AOF启动/修复/恢复AOF同步频率设置rewrite压缩原理触发机制重写流程no-appendfsync-on-rewrite 优缺点 如何选择 概述 Redis是…

Kotlin应用——使用kt进行web开发 使用h2database进行初始化数据库 mybatis-plus使用

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 kt入门的合集文章如下&#xff1a; Kotlin学习——kt入门合集博客 &…

Node——Node.js基础

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;它能够让JavaScript脚本运行在服务端&#xff0c;这使得JavaScript成为与PHP、Python等服务端语言平起平坐的脚本语言。 1、认识Node.js Node.js是当今网站开发中非常流行的一种技术&#xff0c;它以简单易…

Less 安装教程

文章目录 前言LESS的系统要求安装LESS例子输出Less编译css工具后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板…

一文从Vue2过渡到Vue3

文章目录 Vue3简介创建Vue3.0工程使用 vue-cli 创建使用 vite 创建Vue3工程结构变化 常用 Composition API拉开序幕的setupref函数reactive函数Vue3.0中的响应式原理vue2.x的响应式Vue3.0的响应式 reactive对比refsetup的两个注意点计算属性与监视computed函数watch函数watchEf…

强制删除文件

DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 强制删除文件,新建一个文本文件,将以上代码复制到文档中,保存,将文档重命名为delete.bat 如果弹窗提示修改后缀名可能导致文件不可用,也点击确认修改文件名称. 将需要强制删除的文件拖拽到这个delete.bat文件上,显示使用delete.bat打…

MetaObject-BeanWrapper-MetaClass-Reflector的关系

MetaObject、BeanWrapper、MetaClass、Reflector之间是通过装饰器模式逐层进行装饰的。其中MetaObject、BeanWrapper是操作对象&#xff1b;MetaClass、Reflector是操作Class ObjectWrapper类结构图 BaseWrapper是对BeanWrapper、MapWrapper公共方法的提取及类图的优化&#…

Jmeter接口测试快速入门 以飞致云平台为例

接口测试快速入门 以飞致云平台为例-CSDN博客 飞致云电商平台可以做接口测试练习。快速了解如何测试接口&#xff0c;如何做关联 系统基地址&#xff1a;https://gz.fit2cloud.com/ 接口测试快速入门 以飞致云平台为例-CSDN博客 博文中介绍了如何在swagger页面上进行接口测试。…

开发知识点-ArkTS-鸿蒙开发-Typescript

Typescript IED IED https://developer.harmonyos.com/cn/develop/deveco-studio/#download