设计:cmp和地址计算放在ID级

Flush和Stall

Flush产生的结果是:向上传递一条空指令,寄存器值被维持。

Stall产生的结果是:不向上传递指令,寄存器的值被维持。

对于A->B, 如果A Flush, 那么B得到了一条空指令,流水线在A级停顿,在B级继续。

如果A stall, 那么B的值也不会被更新,流水线在B级也停顿下来。

Hazard检测与解决

对于需要我们解决的Hazard一共有6种,解决方法如下:

冲突位置 冲突原因 解决方法
ID和EXE EXE级rd被ALU修改 使用EXE级ALU结果修改ID级寄存器
ID和EXE EXE级rd被LW修改,此时ID不是SW IF 级Stall, ID级Flush
EXE和MEM MEM级rd被LW修改,此时EXE是SW MEM级读出的值修改EXE级寄存器
ID和MEM MEM级rd被ALU修改 使用MEM级ALU结果修改ID级寄存器
ID和MEM MEM级rd被LW修改 使用MEM级MEM结果修改ID级寄存器
IF 跳转 IF flush

Forwarding

Forwarding 一共有4条路线

具体来说,ID级rs1和rs2的修正有3种选则:

  • EXE级ALU的输出
  • MEM级ALU的输出
  • MEM级mem的输出

对于LW和SW的情况,有一种选择,

  • 从MEM的输入口直接接到输入口。
    (注意: 这种情况也满足EXE级是LW, ID级修改了reg的条件,因此stall时必须区分出ID是不是sw, 如果不是才stall)

信号含义解释

信号 含义
RegWrite 是否写寄存器,用来区别指令是否是LW或者ALU结果修改
DatatoReg/MemRead 是否读mem,用来区别是否是lw指令

Pipline 中的Hazard, Forwarding, Stall, Flush和其他相关推荐

  1. java中outputstream以及其子类 flush有什么作用呢

    面试题:close()和flush()的区别? A:close()关闭流对象,但是(也会)先刷新一次缓冲区,关闭之后,流对象不可以继续再使用了. B:flush()仅仅是刷新缓冲区(一般写字符时要用, ...

  2. pipline中替换tag变量

    实验架构:192.168.0.96 gitlab192.168.0.97 jenkins192.168.0.98 harbor.docker集群说明:下面代码编译镜像那一步的代码必须靠左,目的是不要有 ...

  3. python中f点flush是什么函数_Python文件操作及内置函数flush原理解析

    1.打开文件得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 示例文件 '你好呀' 我是于超 嗯 再见 文件操作基本流程 f=open('chenli',encoding='ut ...

  4. java的flush方法_Java中的BufferedWriter flush()方法及示例

    Java中buffered writer类的flush()方法用于刷新缓冲的writer流中的字符.语法:公共void flush()指定者:此方法由Flushable接口的flush()方法指定.重 ...

  5. Scrapy中的item和pipline

    Item Item文档 创建item 在items.py中创建item,示例如下: import scrapyclass Product(scrapy.Item):name = scrapy.Fiel ...

  6. mysql中flush用法,flush 的常规用法:

    flush 的常规用法: flush  logs : 刷新二进制日志文件 flush  PRIVILEGES:刷新权限,修改权限或密码后,需要使用到该命令 flush tables:关闭所有表,并清空 ...

  7. qt有关tcpserver中读取数据时是否使用flush时的研究

    tcpserver的读取槽函数如下: recBuffer.append(tcpSocket->readAll());///>缓存接收的数据 tcpSocket->flush(); 我 ...

  8. Ceph cache tier 中 flush 和 evict 机制源码分析

    存储系统:ceph-14.2.22 操作系统:ubuntu-server-16.04.07 OSDService::agent_entry [ 文件路径 ] ceph/src/osd/OSD.cc O ...

  9. HBase源代码分析之MemStore的flush发起时机、推断条件等详情(二)

    在<HBase源代码分析之MemStore的flush发起时机.推断条件等详情>一文中,我们具体介绍了MemStore flush的发起时机.推断条件等详情.主要是两类操作.一是会引起Me ...

  10. (018)java后台开发之语法输出流flush()方法

    参考: http://blog.csdn.net/lsx991947534/article/details/45065773 在java开发中,有时我们会进行流的操作,所以可能会经常遇到这样一段代码 ...

最新文章

  1. TeamViewer介绍:远程控制计算机
  2. 神经拟态芯片拉近AI与人脑距离
  3. chrome打不开12306
  4. ios开发Base64编码以及加密相关学习
  5. 判断某个点是否在不规则图形内
  6. java回调如何理解_如何理解java中的回调
  7. leetcode328 奇偶链表
  8. 用NAnt 将StarTeam中的文件CheckOut回本地计算机
  9. Why String is Immutable or Final in Java
  10. Spring中事务管理的几种配法
  11. 医疗健康APP的开发和设计
  12. PS可以快速批量修改图片尺寸吗?
  13. 基于MATLAB的双重积分的数值求解
  14. linux 下进入root
  15. dva 配置antd
  16. 苹果Swift语言入门教程
  17. 8051单片机的存储器结构
  18. 学习AspectJ框架(一):AspectJ开发环境搭建与Hello World
  19. 使用RT-Thread Studio DIY 迷你桌面时钟(三)| 获取NTP时间(at_device软件包 + netutils软件包)
  20. h5分享微信 QQ——Hbuilder app

热门文章

  1. HDU - 6438 Buy and Resell (贪心 + 优先队列)
  2. Acwing-873. 欧拉函数
  3. mysql修改frm,MySQL 修改.frm文件来更新字段
  4. mac ruby 环境变量_Ruby环境设置| 在Mac和Windows操作系统上安装Ruby
  5. Kindle PaperWhite 2越狱教程
  6. 【sv】enum赋值
  7. 冰山理论(理解笔记)
  8. 使用 *号在分别在控制台输出一个平行四边形、等腰三角形、菱形
  9. 饥荒服务器文档,建立饥荒服务器
  10. 开通了个人微信公众号:slbGTD,准备把GTD相关的内容写成一本书