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

萌新的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.rhkb.cn/news/142755.html

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

相关文章

飞书与企业微信的异同

云文档 飞书的云文档会自动用游览器打开,不会直接在PC应用中打开(移动端能在应用中打开)。 飞书云文档能够插入视频、流程图、问卷等等 聊天消息交互 钉钉也有类似的功能,可以针对消息进行点赞等回复 钉钉的消息回复还有【收到…

5.外部中断

中断初始化配置步骤: IO口初始化配置 开启中断总允许EA 打开某个IO口的中断允许 打开IO口的某一位的中断允许 配置该位的中断触发方式 中断函数: #pragma vector PxINT_VECTOR __interrupt void 函数名(void){}#pragma vector PxINT_VECTOR __int…

【pytest】 标记冒烟用例 @pytest.mark.smoke

1. 使用 pytest.mark.smoke 标记用例 import pytest class Test_Smoke:def test_01(self):assert 112pytest.mark.smokedef test_02(self):assert 121pytest.mark.smokedef test_03(self):assert 1 2 3 2.配置文件pytest.ini [pytest] markers smoke 3. 运行指定标签 运…

网络安全复习大纲wcf

单选10判断10填空30简答25分析25 选择 (1)计算机网络安全是指利用计算机网络管理控制和技术措施,保证在网络环境中数据的( )、完整性、网络服务可用性和可审查性受到保护。 A、保密性 B、抗攻击性 C、网络服务管理性 …

Unity之NetCode多人网络游戏联机对战教程(2)--简单实现联机

文章目录 1.添加基本组件2.创建NetworkManager组件3.创建Player4.创建地面5.创建GameManager6.编译运行7. 测试联机后话 1.添加基本组件 NetworkManagerPlayerScene 2.创建NetworkManager组件 创建一个空物体,命名为NetworkManager 选择刚刚创建的NetworkManager…

VS2022 编译protobuf , qt 使用

一、下载源码 protobuf: 同步 https://github.com/protocolbuffers/protobuf (gitee.com) 下载如v3.11.2 版本 二、下载CMake 三、编译 1、在1处选择源码目录下的cmake 目录;在2处选择一处空目录(自己随便建) 2、点击config,选择…

【面试八股】IP协议八股

IP协议八股 子网掩码的作用为什么IP协议需要分片IP协议什么时候需要分片IP协议是怎么进行分片的那么IP协议是如果进行标识属于同一个分片呢?TCP协议和UDP协议将数据交给IP协议之后,是否需要分片传输? 子网掩码的作用 用来标识网络号和主机号…

新媒体运营的未来:ChatGPT的智能助手

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 新媒体运营是数字时代的…

【李沐深度学习笔记】线性回归的从零开始实现

课程地址和说明 线性回归的从零开始实现p3 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 线性回归的从零开始实现 不使用任何深度学习框架提供的计算功能,只使用PyTorch提供的Tensor来实现线性回归…

合肥对新通过(CMMI)五级、四级、三级认证的软件企业,对新通过信息技术服务标准(ITSS)认证的软件企业,给予最高50万奖励

合肥市加快软件产业发展 推进软件名城创建若干政策实施细则 为贯彻落实《合肥市人民政府办公室关于印发合肥市加快软件产业发展推进软件名城创建若干政策的通知》(合政办〔2023〕9号)文件精神,规范政策资金管理,制定本实施细则。…

linux内网渗透

一、信息收集 主机发现: nmap -sP 192.168.16.0/24 端口探测 masscan -p 1-65535 192.168.16.168 --rate1000 开放端口如下 nmap端口详细信息获取 nmap -sC -p 8888,3306,888,21,80 -A 192.168.16.168 -oA ddd4-port目录扫描 gobuster dir…

同创永益CNBR平台——云原生时代下的系统稳定器

随着各行业数字化的快速发展,企业的业务运作、经营管理越来越依赖于云原生系统的可靠运行。信息系统服务的连续性, 业务数据的完整性、正确性、有效性会直接关系到企业的生产、经营与决策活动。一旦因自然灾害、设备故障或人为因素等引起信息数据丢失和云原生业务处…

TextSniper for Mac: 革新您的文本识别体验

你是否曾经需要从图片或扫描文档中提取文本,却苦于没有合适的工具?那么,TextSniper for Mac将是你的完美解决方案。这款文本识别工具将彻底改变你处理图像和扫描文件的方式,让你更快速、更高效地完成任务。 TextSniper for Mac 是…

Apache Hive安装部署详细图文教程

目录 一、Apache Hive 元数据 1.1 Hive Metadata 1.2 Hive Metastore 二、Metastore 三种配置方式 ​2.1 内嵌模式 ​2.2 本地模式 ​2.3 远程模式 ​三、Hive 部署实战 3.1 安装前准备 3.2 Hadoop 与 Hive 整合 3.3 远程模式安装 3.3.1 安装 MySQL 3.3.2 …

基于Matlab求解2023华为杯研究生数学建模竞赛E题——出血性脑卒中临床智能诊疗建模实现步骤(附上源码+数据)

文章目录,源码见文末下载 背景介绍准备工作:处理数据第一题:血肿扩张风险相关因素探索建模a)问题b)问题 第二题: 血肿周围水肿的发生及进展建模,并探索治疗干预和水肿进展的关联关系a&#xff0…

【yolox训练过程中遇到的问题集合】

这里写目录标题 深度学习遇到的一系列bugVScode无法激活conda1.vscode加载web 视图报错2.CUDA out of memory3.voc2007数据集中的txt文件4.object has no attribute ‘cache‘5.KeyError:model6.No module named loguru7.Python AttributeError: module ‘distutils‘ has no a…

TensorFlow入门(五、指定GPU运算)

一般情况下,下载的TensorFlow版本如果是GPU版本,在运行过程中TensorFlow能自动检测。如果检测到GPU,TensorFlow会默认利用找到的第一个GPU来执行操作。如果机器上有超过一个可用的GPU,除第一个之外的其他GPU默认是不参与计算的。如果想让TensorFlow使用这些GPU执行操作,需要将运…

R语言学习笔记

R语言学习笔记 一.准备环境二.认识控制台三.R包四.数据结构1.向量Vector1.1创建向量1.2访问向量中的数据1.3向量的循环补齐 2.矩阵matrix2.1创建矩阵2.2访问矩阵中的数据 3数组Array3.1创建数组3.2访问数组中的数据 4.数据框Dataframe4.1创建数据框4.2访问数据框中的数据 5因子…

大数据Flink(八十六):DML:Group 聚合和Over 聚合

文章目录 DML:Group 聚合和Over 聚合 一、DML:Group 聚合

【Git】Deepin提示git remote: HTTP Basic: Access denied 错误解决办法

git remote: HTTP Basic: Access denied 错误解决办法 1.提交代码的时候提示2. 原因3.解决方案 1.提交代码的时候提示 git remote: HTTP Basic: Access denied 错误解决办法 2. 原因 本地git配置的用户名、密码与gitlabs上注册的用户名、密码不一致。 3.解决方案 如果账号…