【【萌新的RISCV学习之流水线通路的控制-8】】

news2024/12/1 10:35:26

萌新的RISCV学习之流水线通路的控制-8

我们在之前学习了整个单周期的模块工作流程
在这里插入图片描述

我们按照整体的思路分段
将数据通路划分为5个阶段
IF : 取地址
ID :指令译码和读存储器堆
EX :执行或计算地址
MEM : 数据存储器访问
WB : 写回
在这里插入图片描述

单周期数据通路(与图 4-17 类似)。指令执行的每一步都从左至右地映射到数据通路中。唯一的例外是 PC 更新与写回的步骤(在图中用灰色表示),以上步骤发送 ALU 运算结果或存储中的数据到左侧,写入寄存器堆中(通常我们使用灰线表示控制,但在这里表示数据通路)
这五个部分与图中数据通路的绘制方式是对应的,指令和数据通常随着执行过程从左到右依次通过这五个阶段。再回到我们的洗衣类比,在通过工作线路时衣服依次被清洁、烘干和整理,同时永远不会逆向移动。然而,在从左到右的指令流动过程中存在两个特殊情况:·在写回阶段,它将结果写回位于数据通路中段的寄存器堆中。·在选择下- PC 值时,在自增 PC 值与 MEM 阶段的分支地址之间进行选择。从右到左的数据流向不会对当前的指令造成影响,这种反向的数据流动只会影响流水线中的后续指令。需要注意的是,第一种特殊情况会导致数据冒险,第二种会导致控制冒险。

在这里插入图片描述

IM 表示指令寄存器和取值阶段的 PC
Reg表示指令译码/寄存器读取阶段 (ID) 的寄存器堆和符号扩展单元,等等。
为了保持正确的时序,这种形式化的数据通路将寄存器堆划分成两个逻辑部分:寄存器读取阶段 (ID) 的寄存器读和写回 (WB) 阶段的寄存器写。这种复用被表示为:在 ID 阶段,当寄存器堆没有被写入时,使用虚线绘制未被着色的寄存器堆的左半部分;在 WB 阶段,当寄存器堆没有被读取时,使用虚线绘制未被着色的寄存器堆的右半部分。与前文一致,我们假设寄存器堆是在时钟周期的前半部分写入的,在时钟周期的后半部分被读取。
明三条指令需要三条数据通路,但事实上,我们可以通过引入寄存器保存数据的方式,使得部分数据通路可以在指令执行的过程中被共享。
指令存储器只在指令的五个阶段中的一个阶段被使用,而在其他四个阶段中允许被其他指令共享。为了保留在其他四个阶段中的指令的值,必须把从指令存储器中读取的数据保存在寄存器中。类似的理由适用于每个流水线阶段,所以我们必须将寄存器放置在图 中每个阶段之间的分隔线上。再回到洗衣例子中,我们会在每两个步骤之间放置一个篮子,用于存放为下一步所准备的衣服。
在这里插入图片描述

在图中用灰色表示的流水线寄存器将流水线的各阶段分开。它们被标记为被它们所分开的阶段,例如,第一个流水线寄存器被标记IF/ID, 因为它将取值和指令译码阶段分开。寄存器的位宽必须足够大以存储通过它们的所有数据。例如, IF/ID 寄存器的位宽必须为 96 位,因为它需要同时存储从存储器中提取出的 32 位指令以及自增的 64 PC 地址。我们将在本章中逐渐增加这些寄存器的位宽,不过目前,其他三个流水线寄存器的位宽分别为 256 位、193 位和 128位
需要注意的是,在写回阶段的最后没有流水线寄存器。所有的指令都必须更新处理器中的某些状态,如寄存器堆、存储器或 PC 等,因此,单独的流水线寄存器对于已经被更新的状态来说是多余的。例如,加载指令将它的结果放入 32 个寄存器中的一个,此后任何需要该数据的指令只需要简单地读取相应的寄存器即可。当然,每条指令都会更新 PC, 无论是通过自增还是通过将其设置为分支目标地址。 PC可以被看作一个流水线寄存器:它给流水线的 IF 阶段提供数据。不同于图 中被标记阴影的流水线寄存器, PC 是可见体系结构状态的一部分,在发生例外时, PC 中的内容必须被保存,而流水线寄存器中的内容则可以被丢弃。在洗衣的例子中,你可以将 PC 看作在清洗步骤之前盛放脏衣服的篮子。

为了详细展示流水线的主要功能运作方式 我们选取了一条使用5个阶段的指令
我们选择加载指令的load行为
当寄存器或存储器被读取时,我们高亮显示它们的右半部分;当它们被写入时,我们高亮显示它们的左半部分。
在这里插入图片描述

在这里插入图片描述

我们现在先来看可以表示的前两个阶段IF ID
在这里插入图片描述

IF表示取指令
ID表示指令译码/读寄存器堆
。尽管在阶段二中加载指令只需要寄存器 中的值,但是处理器此时并不知道当前是哪一条指令正在被译码,因此处理器将符号扩展后的 16 位常撮以及两个寄存器中的值都存入 ID/EX 流水线寄存器中。我们并不一定需要全部的这三个操作数,但是保留全部三个操作数可以简化控制

下面是整个的步骤介绍

我们讲述一下整体的流程设计
在这里插入图片描述

第一部分: 取指令
顶端电路描绘了使用 PC 中的地址从存储器中读取指令,然后将指令放入IF/ID 流水线寄存器中。 PC 中的地址自增 4, 然后写回 PC, 以为下一时钟周期做准备。这个PC 值也保存在 IF/ID 流水线寄存器中,以备后续的指令使用(例如 be q)。计算机并不知道当前正在提取的是哪一种指令,因此它必须为任何一种指令做好准备,并且将所有可能有用的信息沿流水线传递出去。
第二部分 : 指令译码和读寄存器堆
底部显示了 IF/ID 流水线寄存器的指令部分,该指令提供一个 64 位符号扩展的立即数字段,以及两个将要读取的寄存器编号。所有这三个值都与 PC 地址一起存储在 ID/EX 流水线寄存器中。在这里我们再次向右传递在之后的时钟周期里指令可能用到的所有信息。
在这里插入图片描述

第三部分 : 执行或地址计算
显示了加载指令从 ID/EX 流水线寄存器中读取一个寄存器的值和一个符号扩展的立即数,并且使用 ALU 部件将它们相加,它们的和被存储在 EX/MEM 流水线寄存器中。
在这里插入图片描述

第四部分 : 存储器访问
部显示了加载指令使用来自 EX/MEM 流水线寄存器中的地址读取数据存储器,并将数据存入 MEM/WB 流水线寄存器中。
在这里插入图片描述

第五部分 : 写回
从 MEM/WB 流水线寄存器中读取数据,并将它写入图中间的寄存器堆中。

在这里插入图片描述

在介绍完加载指令之后 我们开始研究
存储指令的过程
1.取指 :使用 PC 中的地址从存储器中读取指令,然后将其放入 IF/ID 流水线寄存器中。该阶段发生在指令被识别之前,因此上述电路同时适用于加载和存储指令。
2.指令译码和读寄存器 : IF/ID 流水线寄存器中的指令提供了用于读取寄存器的两个寄存器编号以及一个符号扩展的立即数。这三个 64 位的值都存储在 ID/EX 流水线寄存器中。因为此时还不知道指令的类型,所以所有的指令都会执行这两个阶段.
3.指令执行和地址计算 : 有效地址被存放在EX/MEM流水线寄存器中
在这里插入图片描述

4 . 存储器访问:顶端显示了正在被写入存储器的数据。需要注意,包含要被存储的数据的寄存器在较早的流水线阶段就已经被读取并存储在 ID/EX 流水线寄存器中。在MEM 阶段获得这个数据的唯一方法就是在 EX 阶段中将该数据放入 EX/MEM 流水线寄存器中,就像我们将有效地址存储在 EX/MEM 中那样。
5.写回 :底端显示了存储指令的最后一步。对存储指令来说,在写回阶段不会发生任何事情。由于存储指令之后的每一条指令都已经进入流水线中,所以我们无法加速这些指令。因此,任何指令都要经过流水线中的每一个阶段,即使它在这个阶段没有任何事情要做,因为后续指令已经按照最大速率在流水线中进行处理了。
存储指令再次说明了如果要将相关信息从之前的流水线阶段传递到后续的流水线阶段,就必须将它们放置在流水线寄存器中。否则,当下一条指令进入流水线时,该信息就会丢失。对于存储指令来说,我们需要将在 ID 阶段读取的寄存器信息传递到 MEM 阶段,然后写入存储器中。这些数据最初放置在 ID/EX 流水线寄存器中,之后被传送到 EX/MEM 流水线寄存器中。其次,加载和存储指令还说明了第二个关键点:在流水线数据通路设计中的每一个逻辑部件(例如指令存储器、寄存器读端口、 ALU 、数据存储器、寄存器写端口等)只能在单个流水线阶段中被使用,否则就会发生结构冒险。因此,这些部件以及对它们的控制只能与一个流水线阶段相关联。
在这里插入图片描述

大体的整个流水线结构

在这里插入图片描述

流水线的图形化的分析
两种基本的流水线图
多时钟周期流水线图 稍微简单 和 单时钟周期流水线分析
我们以5条指令 为基础 组成序列
ld x10, 40(x1)
sub x11, x2, x3
add x12, x3, x4
ld x13, 48(x1)
add x14, x5, x6
下图是整个多周期的概念图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Three.js加载360全景图片/视频

Three.js加载360全景图片/视频 效果 原理 将全景图片/视频作为texture引入到three.js场景中将贴图与球形网格模型融合,将球模型当做成环境容器使用处理视频时需要以dom为载体,加载与控制视频动作每次渲染时更新当前texture,以达到视频播放效…

强化学习到底是什么?它是怎么运维的

https://mp.weixin.qq.com/s/LL3HfU2iNlmSqaTX_3J7fQ 强化学习是一种行为学习模型,由算法提供数据分析反馈,引导用户逐步获取最佳结果。 来源丨Towards Data Science 作者丨Jair Ribeiro 编译丨科技行者 强化学习属于机器学习中的一个子集,它使代理能够理解在特定环境中…

TensorFlow入门(四、数据流向机制)

session与"图"工作过程中存在的两种数据的流向机制,即:注入机制和取回机制 注入机制(feed):即通过占位符向模式中传入数据 取回机制(fetch):指在执行计算图时,可以同时获取多个操作节点的计算结果 实例代码如下: import tensorflow.compat.v1 as tftf…

【Java】建筑工地智慧管理系统源码

智慧工地系统运用物联网信息技术,致力于推动建筑工程行业的建设发展,做到全自动、信息化,智能化的全方位智慧工地,实现工程施工可视化智能管理以提高工程管理信息化水平。 智慧工地平台拥有一整套完善的智慧工地解决方案&#xff…

C语言入门Day_27 开发环境

前言: 在线编译环境涉及到联网,如果在没有网的情况下,我们就不能写代码了,这一章节,我们将会给大家介绍一下如何搭建一个本地的C语言编译环境。 如果想要设置 C 语言环境,需要确保电脑上有以下两款可用的…

Hive【Hive(三)查询语句】

前言 今天是中秋节,早上七点就醒了,干啥呢,大一开学后空教室紧缺,还不趁着假期来学校等啥呢。顺便偷偷许个愿吧,希望在明年的这个时候,秋招不知道赶不赶得上,我希望拿几个国奖,蓝桥杯…

基于微信小程序的宠物寄养平台小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

Spark SQL案例【电商购买数据分析】

数据说明 Spark 数据分析 (Scala) import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, SparkSession} import org.apache.spark.{SparkConf, SparkContext}import java.io.{File, PrintWriter}object Taobao {case class Info(u…

26270-2010 数字电视接收设备标准测试信号

声明 本文是学习GB-T 26270-2010 数字电视接收设备标准测试信号. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了数字电视接收设备测试用的标准测试信号。 本标准适用于我国地面、有线和卫星数字电视广播接收设备测试。数字电视…

【小余送书第二期】《MLOps工程实践:工具、技术与企业级应用》参与活动,即有机会中奖哦!!!祝各位铁铁们双节快乐!

目录 1、背景介绍 2、内容简介 3、读者对象 4、专家推荐 5、书籍目录 目  录 作者简介 前言 第1章 全面了解MLOps1 1.1 人工智能的趋势和现状 1 1.1.1 趋势1:人工智能在企业中加速落地,彰显更多业务价值 1 1.1.2 趋势2:人…

每日一博 - 闲聊 Java 中的中断

文章目录 概述常见的中断问题中断一个处于运行状态的线程中断一个正在 sleep 的线程中断一个由于获取 ReentrantLock 锁而被阻塞的线程 如何正确地使用线程的中断标识JDK 的线程池 ThreadPoolExecutor 内部是如何运用中断实现功能的小结 概述 在 Java 中,中断是一种…

提升工作效率!如何巧用 Ansible 实现自动化运维?

Ansible 是一种开源的自动化运维工具,它基于 YAML 语言编写 playbook,可以用来自动化服务器的配置、部署和管理。 Ansible 使用 SSH 协议进行通信,可以在大量服务器上进行批量操作,无需在目标服务器上安装任何客户端软件。它支持…

ip的标准分类---分类的Ip

分类的 IP 即将 IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成。 其中第一个字段是网络号(net-id),它标志主机或路由器所连接的网络。一个网络号在整个因特网内必须是唯一的。 第二个字段是主机号&#xf…

Microsoft Office无法重装报错30015-44(3) 0-2031(17004)

1.问题描述 由于迁移文件夹导致Microsoft office软件无法使用,于是准备卸载重装,但是点击OfficeSetup.exe出现报错30015-44(3) 关闭后出现以下报错0-2031(17004) 2. 尝试的解决方式 重启后仍然无法解决问题 2.1 参考官网解决办法 手动从控制面板&…

Flutter笔记 - ListTile组件及其应用

Flutter笔记 ListTile组件及其应用 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/133411883 目 录 1. …

王道考研计算机网络——传输层

一、传输层概述 复用:发送方不同的应用进程都可以使用同一个传输层的协议来传送数据 分用:接收方的传输层在去除报文段的首部之后能把数据交给正确的应用进程 熟知端口号就是知名端口号0-1023 客户端使用的端口号是动态变化的,不是唯一确定…

禾观科技采用亚马逊云科技的数据湖,实现数据化驱动运营的核心

如今,随着本土业务发展渐趋成熟,越来越多的中国企业开始依托跨境电商实现产品出口外销,大力拓展海外布局。在这一背景下,众多潜在机遇涌现,成为跨境电商“蓝海”的必争之地。 杭州禾观科技有限公司是面向全球新兴快时尚…

【JavaEE基础学习打卡08】JSP之初次认识say hello!

目录 前言一、JSP技术初识1.动态页面2.JSP是什么3.JSP特点有哪些 二、JSP运行环境配置1.JDK安装2.Tomcat安装 三、编写JSP1.我的第一个JSP2.JSP执行过程3.在IDEA中开发JSP 总结 前言 📜 本系列教程适用于JavaWeb初学者、爱好者,小白白。我们的天赋并不高…

排序:最佳归并树(优化外部排序中对磁盘的读写次数)

1.归并树的性质 每个初始归并段对应一个叶子结点,把归并段的块数作为叶子的权值归并树的WPL树中所有叶结点的带权路径长度之和归并过程中的磁盘I/O次数归并树的WPL*2 如下图: 每个初始归并段看作一个叶子结点,归并段的长度作为结点权值&a…

源码编译安装zstd

目录 1 下载源码https://github.com/facebook/zstd 2 解压 3 在解压后的目录里输入make 4 sudo make install 安装完毕 5 输入whereis zstd 检查安装结果 1 下载源码https://github.com/facebook/zstd 2 解压 3 在解压后的目录里输入make 4 sudo make install 安装完毕…