【【萌新的RiscV学习之流水线控制-9】】
萌新的RiscV学习之流水线控制-9
我们按照在之前的单周期设计加入控制单元 那么我们能够在后续的设计中提供方便 我们也在流水线中加入一个control单元
我们先按照书上的指令op码值介绍一遍基本功能
接下来我们讲述control 的 控制效果 关于这些串口判别的使用
由于控制线从 EX 阶段开始,我们可以在指令译码阶段为之后的阶段创建控制信号。传递这些控制信号最简单的方式就是扩展流水线寄存器以包含这些控制信息。
最后三个阶段的七条控制线。需要注意的是,在 EX 阶段使用了七条控制线中的两条,剩下的五条被传递到扩展的 EX/MEM 流水线寄存器中以保持控制线;在MEM 阶段中使用了三条控制线,最后两条传递到 MEM/WB 寄存器用于WB 阶段
我们在上面讲述的更多的是关于理论方面的讲解 我们接下来讲述关于具体指令的实际应用
sub x2 ,x1,x3
and x12 , x2 , x5
or x13 , x6 , x2
add x14, x2,x2
sd x15 , 100(x2)
我们会发现所有的后四条指令都采用了第一条指令中的x2值 所以我们在指令的确切使用中要注意选取合适的数据
在第五个时钟周期之前,对寄存器 x2 的读操作并不能返回 sub 指令的结果。因此,图中的 add sd 指令可以得到正确结果-20, 但是 and or 指令却会得到错误的结果 10 。在这种类型的图中,每当相关线在时间线上表示为后退时(箭头指向左上方),这个问题就会变得很明显。
在第三个时钟周期也就是 sub 指令的 EX 指令阶段结束时就可以得到想要的结果。那么在 and or 指令中是什么时候才真正需要这个数据呢?答案是and or 指令的 EX 阶段开始的时候,分别对应第四和第五个时钟周期。因此,只要可以一得到相应的数据就将其前递给等待该数据的单元,而不是等待其可以从寄存器堆中读取出来,就可以不需要停顿地执行这段指令了。
它这边的说法是我们看似是从这个寄存器内部取到数据但是 我想要寄存器编号
但是我们真正想要的是数据 我们可以在上一部分的EX阶段直接取到得到后的数据
命名流水线寄存器字段是一种更精确的表示相关关系的方法。例如, ID/EX. Register Rs I 表示一个寄存器的编号,它的值在流水线寄存器 ID.EX 中,也就是这个寄存器堆中第一个读端口的值。该名称的第一部分,也就是点号的左边,是流水线寄存器的名称;第二部分是寄存器中字段的名称。使用这种表示方法,可以得到两对冒险的条件:la. EX/MEM.Re gisterRd = ID/EX.Re gisterRsl 1 b. EX/MEM.Re gisterRd = ID/EX.Re gisterRs2 2a. MEM/WB.Re gisterRd = ID/EX.Re gisterRsl 2b. MEM/WB.Re gisterRd = ID/EX. Re gisterRs2 在本节开头的代码中,指令序列中的第一个冒险发生在寄存器 x2 上,位于 sub 指令sub x2, x l, x3 的结果和 and 指令 and xl2, x2, x5 的第一个读操作数之间。这个冒险可以在 and 指令位于 EX 阶段、 sub 指令位于 MEM 阶段时被检测到,因此这种冒险属la 类型:EX/MEM.Re gisterRd = ID/EX.Re gister Rs 1 = x2
这种一劳永逸的方法是错误的,并不是所有的指令都会写回寄存器,所以这个策略是不正确的,它有时会在不应该前递的时候也将数据前递出去。一种简单的解决方案是检查 Re Writ 信号是否是有效的:检查流水线寄存器在 EX MEM 阶段的 WB 控制字段以确定 Re Write 信号是否有效。
因此,只要流水线寄存器保存了将要被前递的数据,后续的指令就可以得到所需的数据。
各流水线寄存器之间的相关关系会随着时间向前移动,因此可以通过前递在流水线寄存器中找到的结果,以提供 and 指令或 or 指令所需的 ALU 的输入。流水线寄存器中的值表示所需的值在被写入寄存器堆之前就是可用的。我们假设寄存器堆可以前递在同一时钟周期内要被读写的数据,这样 add 指令就不需要停顿了,不过这些值来自流水线寄存器而不是寄存器堆。寄存器堆前递,即读操作获得的值是本时钟周期内写操作的结果,这就是为什么第五个时钟周期中显示寄存器 x2 在前半个周期内的值为 10 而在周期结束时的值为-20
如果我们可以从任何流水线寄存器而不仅仅是 ID/EX 中得到 ALU 的输入,那就可以前递正确的数据。通过在 ALU 的输入上添加多选器再辅以适当的控制,就可以在存在数据冒险的情况下全速运行流水线。
现在,假设需要前递的指令只有这四种形式: add sub and or 指令。下图是ALU 和流水线寄存器在添加前递之前和之后的“特写。还有一个是 ALU 多选器的控制线的值,它选择寄存器堆的值或是被前递的值中的一个。
这个前递控制将发生在 EX 阶段,因为 ALU 前递多选器在 EX 阶段。因此,我们必须ID 阶段通过 ID/EX 流水线寄存器将操作数寄存器编号传递出去,以决定是否需要前递值。在加入前递机制之前, ID/EX 流水线寄存器无须保存 rs 字段和 rs2 字段,但是因为前递机制的需要,现在要将保存 rsl rs2 所需的空间添加到 ID/EX 流水线寄存器中。
相关文章:
【【萌新的RiscV学习之流水线控制-9】】
萌新的RiscV学习之流水线控制-9 我们按照在之前的单周期设计加入控制单元 那么我们能够在后续的设计中提供方便 我们也在流水线中加入一个control单元 我们先按照书上的指令op码值介绍一遍基本功能 接下来我们讲述control 的 控制效果 关于这些串口判别的使用 由于控制线从…...
MySQL 通过存储过程高效插入100w条数据
目录 一、前言二、创建表三、编写存储过程插入数据四、高效插入数据方案4.1、插入数据时删除表中全部索引4.2、存储过程中使用统一事务插入(性能显著提升)4.3、调整MySQL系统配置(性能显著提升,适合存储过程没有使用统一事务&…...
国庆10.1
用select实现服务器并发 ser #include <myhead.h> #define ERR_MSG(msg) do{\fprintf(stderr, "__%d__", __LINE__);\perror(msg);\ }while(0)#define PORT 8888 //端口号,范围1024~49151 #define IP "192.168.1.205" //本机…...
[C++_containers]10分钟让你掌握vector
前言 在一个容器的创建或是使用之前,我们应该先明白这个容器的一些特征。 我们可以通过文档来来了解,当然我也会将重要的部分写在下面。 1. vector 是表示可变大小数组的序列容器。 2. 就像数组一样, vector 也采用的连续存储空间来存储元…...
前端与后端:程序中两个不同的领域
前端和后端是构成一个完整的计算机应用系统的两个主要部分。它们分别负责不同的功能和任务,有以下几个方面的区别: 功能:前端主要负责用户界面的呈现和交互,包括网页的设计、布局、样式、动画效果和用户输入等。后端则处理网站或应…...
vue3 +elementplus | vue2+elementui 动态地通过验证规则子新增或删除单个表单字段
效果图 点击 ‘’ 新增一行,点击‘-’ 删除一行 vue3elementplus写法 template <el-dialog v-model"dialogFormVisible" :title"title"><el-form ref"ruleFormRef" :model"form" :inline"true" lab…...
STM32之DMA
简介 • DMA ( Direct Memory Access )直接存储器存取 (可以直接访问STM32内部存储器,如SRAM、程序存储器Flash和寄存器等) •DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预&a…...
解决前端二进制流下载的文件(例如:excel)打不开的问题
1. 现在后端请求数据后,返回了一个二进制的数据,我们要把它下载下来。 这是响应的数据: 2. 这是调用接口的地方: uploadOk(){if(this.files.length 0){return this.$Message.warning("请选择上传文件!ÿ…...
动态规划算法(1)--矩阵连乘和凸多边形剖分
目录 一、动态数组 1、创建动态数组 2、添加元素 3、删除修改元素 4、访问元素 5、返回数组长度 6、for each遍历数组 二、输入多个数字 1、正则表达式 2、has.next()方法 三、矩阵连乘 1、什么是矩阵连乘? 2、动态规划思路 3、手推m和s矩阵 4、完…...
通过Nginx重新认识HTTP错误码
文章目录 概要一、HTTP错误码1.1、1xx1.2、2xx1.3、3xx1.4、4xx1.5、5xx 二、Nginx对常见错误处理三、参考资料 概要 在web开发过程中,通过HTTP错误码快速定位问题是一个非常重要的技能,同时Nginx是非常常用的一个实现HTTP协议的服务,因此本…...
某房产网站登录RSA加密分析
文章目录 1. 写在前面2. 抓包分析3. 扣加密代码4. 还原加密 1. 写在前面 今天是国庆节,首先祝福看到这篇文章的每一个人节日快乐!假期会老的这些天一直在忙事情跟日常带娃,抽不出一点时间来写东西。夜深了、娃也睡了。最近湖南开始降温了&…...
深度学习:基于长短时记忆网络LSTM实现情感分析
目录 1 LSTM网络介绍 1.1 LSTM概述 1.2 LSTM网络结构 1.3 LSTM门机制 1.4 双向LSTM 2 Pytorch LSTM输入输出 2.1 LSTM参数 2.2 LSTM输入 2.3 LSTM输出 2.4 隐藏层状态初始化 3 基于LSTM实现情感分析 3.1 情感分析介绍 3.2 数据集介绍 3.3 基于pytorch的代码实现 3…...
selenium使用已经获取的cookies登录网站报错unable to set cookie的处理方式
用selenium半手动登录github获取其登录cookies后,保存到一个文件gtb_cookies.txt中。 然后用selenium使用这个cookies文件,免登录上github。但是报错如下:selenium.common.exceptions.UnableToSetCookieException: Message: unable to set co…...
初阶数据结构(四)带头双向链表
💓博主csdn个人主页:小小unicorn ⏩专栏分类:数据结构 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 带头双向链表 链表的相关介绍初始化链表销毁链…...
2022年9月及10月
9月 1.Halcon12的HObject和Hobject halcon12 可以用HObject,也可以用Hobject,用法都一样 包括HalconCpp.h 如果附加目录中: C:\Program Files\MVTec\HALCON-12.0\include\halconcpp\ 在前面,则用 HalconCpp::HObject 如果附加目录…...
Vmware安装
title: “Vmware安装” createTime: 2021-11-22T09:53:2908:00 updateTime: 2021-11-22T09:53:2908:00 draft: false author: “name” tags: [“VMware”,“安装”,“linux”] categories: [“install”] description: “测试的” linux安装VMware Workstation16 1.安装包 …...
RSA算法
算法简介 RSA是一种非对称加密方式。发送者把明文通过公钥加密后发送出去,接受者把密文通过私钥解密得到明文。 算法过程 生成公钥和私钥 选取两个质数p和q,np*q。n的长度就是密钥长度。φ(n)(p-1)*(q-1)φ(n)为n的欧拉函数。找到1-φ(n)间与φ(n)互质的…...
计算机竞赛 深度学习手势识别 - yolo python opencv cnn 机器视觉
文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…...
Spring的Ordered
Ordered Java中的Ordered接口是Spring框架中的一个接口,用于表示对象的顺序。它定义了一个方法getOrder(),用于获取对象的顺序值,值越小的对象越先被处理。 Ordered接口是Spring框架中的一个接口,用于定义组件的加载顺序。当一个…...
前端两年半,CSDN创作一周年
文章目录 一、机缘巧合1.1、起因1.2、万事开头难1.3、 何以坚持? 二、收获三、日常四、憧憬 五、总结 一、机缘巧合 1.1、起因 最开始接触CSDN,还是因为同专业的同学,将计算机实验课的实验题,记录总结并发在了专业群里。后来正式…...
定时任务管理平台青龙 QingLong
一、关于 QingLong 1.1 QingLong 介绍 青龙面板是支持 Python3、JavaScript、Shell、Typescript 多语言的定时任务管理平台,支持在线管理脚本和日志等。其功能丰富,能够满足大部分需求场景,值得一试。 主要功能 支持多种脚本语言…...
java多线程相关介绍
1. 线程的创建和启动 在 Java 中创建线程有两种方式。一种是继承 Thread 类并重写其中的 run() 方法,另一种是实现 Runnable 接口并重写其中的 run() 方法。创建完线程对象后,调用 start() 方法可以启动线程。 2. 线程的状态 Java 的线程在不同阶段会处于…...
css复合选择器
交集选择器 紧紧挨着 <template><div><p class"btn">Click me</p><button class"btn" ref"myButton" click"handleClick">Click me</button></div> </template> <style> but…...
USART串口协议
通信接口 •通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 • 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 全双工:指通信双方能够同时进行双向通信,一般来说,全双…...
picoctf_2018_shellcode
picoctf_2018_shellcode Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments32位,啥都没开 这个看着挺大的,直接来个ROPchain,…...
Apache Derby的使用
Apache Derby是关系型数据库,可以嵌入式方式运行,也可以独立运行,当使用嵌入式方式运行时常用于单元测试,本篇我们就使用单元测试来探索Apache Derby的使用 一、使用IDEA创建Maven项目 打开IDEA创建Maven项目,这里我…...
leetcode 图相关的题
图 图相关知识有leetcode207课程表1(有环判断)以及210 课程表2(拓扑排序). 链表遍历 def dfs(n):print(n)dfs(n)二叉树遍历 def dfs(n):print(n)dfs(n.left)dfs(n.right)多叉树遍历 dfs(root) def dfs(n):for node in n.nodes:dfs(node)图遍历 visited [False] * n_node…...
程序员们,我们能工作到65岁吗?
软件开发人员的职业生涯可以持续多久?这是大多数认真考虑成为专业程序员的人不禁想知道的事情。 在谈论这样一个要求很高的职业时,这是一个非常自然的问题。没有人愿意花费数年时间学习一项技能,这些技能将在几年内不再相关,或者当…...
【洛谷 P1996】约瑟夫问题 题解(队列+模拟+循环)
约瑟夫问题 题目描述 n n n 个人围成一圈,从第一个人开始报数,数到 m m m 的人出列,再由下一个人重新从 1 1 1 开始报数,数到 m m m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。…...
字符串函数与内存函数讲解
文章目录 前言一、字符串函数1.求字符串长度strlen 2.长度不受限制的字符串函数(1)strcpy(2)strcat(3)strcmp 3.长度受限制的字符串函数(1)strncpy(2)strncat(3)strncmp 4.字符串查找(1)strstr(2)strtok 5.错误信息报告(1)strerror(2)perror 二、内存函数1.memcpy2.memmove3.me…...
asp网站合法/全网关键词搜索工具
2019独角兽企业重金招聘Python工程师标准>>> 用户配置文件和密码配置文件 # 查看用户名文件 etc / passwd # etc/passwd 文件的每一行(用户)被 “:”分隔成7段;每个字段的具体含义是: 1.用户名 2.存放的该…...
做网站制作较好的公司/成都疫情最新消息
一.简介 0. 页面的生命周期。 1. WebForm后台页面类继承于Page类,Page类实现了IHttpHandler接口。 2. 前台页面类继承于后台页面类。 3. 先调用PageLoad方法,再调用Render方法生成html代码。 二. 加密安全 互联网没有绝对的安全,登…...
网站一年的 运营费用/百度注册公司地址
var tiles L.tileLayer(http://{s}.tile.osm.org/{z}/{x}/{y}.png, {attribution: © <a href"http://osm.org/copyright">OpenStreetMap</a> contributors, }).addTo(map);...
建设020网站需要多少钱/无锡seo关键词排名
转:http://windshg.iteye.com/blog/1606981...
秀屿区建设局网站/怎么做一个网页
分页原理: 1、设置setOnScrollListener监听滑动到底部 // 设置listview的滚动监听// 设置分页lv.setOnScrollListener(new AbsListView.OnScrollListener() {Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {switch (scrollState) …...