博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
五段流水线 多周期 mips 代码_微处理器流水线技术简介
阅读量:5011 次
发布时间:2019-06-12

本文共 1073 字,大约阅读时间需要 3 分钟。

4ae979b66e534441838dbd851d508d57.png

1. 流水线实现多周期指令简图

fccd27e056439f9c6da2f4613e134353.png

2. MIPS流水线基本流程

1. 取指令;

2. 读寄存器和译码;

3. 执行ALU和地址计算;

4. 存储器访问;

5. 写结果到寄存器。

3. 非流水与流水的对比:

ae424ffd10aae016d8bcee085334d73e.png
  1. 非流水的执行时间

– 3条指令共需3×800=2400ps。

2. 流水线的执行时间

– 3条指令共需1000+200×2=1400ps。

3. 当有数百万条指令时:

– 对每一条指令来说,非流水线仍然是800ps,流水线则是200ps ;

– 流水线/非流水线=(800*n)/(1000+200*(n-1))=4 倍。

4. 理想的情况下,流水线的级数就是比非流水线的性能提高的倍数。

5. 事实上,流水线总是存在一些额外的开销,因此流水线执行时间比流水各段的执行时间要大。

6. 流水线通过提高吞吐率改善性能,并没有减少单条指令的执行时间。

4. 适合于流水线的MIPS指令特点

  • MIPS的指令都是等长的(32位);
  • 访存指令不存在两次访问存储器的可能。

5. 流水线冒险

流水线冒险(pipeline hazards): 下一条指令不能在流水线中的下一个周期执行。称为流水线冒险。主要有以下三种流水线冒险:

– 结构冒险(structural hazards)

由于硬件资源的局限,不能在同一个周期执行一些指令的组合。

  • 例如:

若在指令流水线中,硬件资源中仅有一个独立的存储器,而不是两个分离的独立存储器,就会造成因资源不够而使流水线发生停顿。

– 数据冒险(data hazards)

流水线中指令的执行在适当的周期内的得不到可用的数据,而引起流水线停顿,称之为数据冒险。

  • 数据冒险是由数据的相关性造成的。
  • 硬件的解决方案是:

旁路(bypass)或称向前传递(Forwarding)

– 控制冒险(control hazards)

流水线中的下一条指令要不要执行,需要等待转移指令的结果后,才能确定。

• 解决的方法

加入停顿,等待决策的指令执行完。这种方法效率低,但可用。

6. 流水线的数据通路

流水线的5个阶段:

1. 取指令;

2. 译码和读寄存器;

3. 执⾏ALU和地址计算;

4. 存储器访问;

5. 写回结果。

五级流水线数据通路如图所示:

38cd563b13dd0a72566e960e3108f0a7.png

7. 流水线控制通路的设计

需要注意以下五个阶段的控制信号的产生。

  • 取指令阶段:

– 读寄存器;

– 总是写PC;

– 无特殊的控制信号;

  • 译码阶段的控制信号:

– 所有的都读,无附加的控制信号;

  • EX阶段:ALU计算的控制信号;
  • 存储器访问的控制信号;
  • 写回的控制信号。

转载地址:http://boggp.baihongyu.com/

你可能感兴趣的文章
JAVA遇见HTML——Servlet篇:Servlet基础
查看>>
第二章 Vue快速入门--20 品牌案例-完成品牌列表的添加功能+ 21 品牌案例-根据Id完成品牌的删除...
查看>>
Java单例模式
查看>>
重温WCF之消息契约(MessageContract)(六)
查看>>
Excel2007制作直方图和正态分布曲线图
查看>>
android adb常用指令
查看>>
Android框架之路——GreenDao3.2.2的使用
查看>>
类方法WCF学习笔记-KnowTypeAttribute用法
查看>>
平台程序微信平台开发应用的签名
查看>>
程序卡OK6410裸板更新程序_update
查看>>
MYSQL用户名:root
查看>>
JavaScript 开发规范要求
查看>>
Devstack 安装OpenStack Pike版本(单机环境)
查看>>
Javascript 函数初探
查看>>
类的定义、声明使用
查看>>
转载,gini系数代码对应的公式
查看>>
编译安装mysql-5.6.40
查看>>
年终总结
查看>>
初创互联网公司技术架构变迁之路
查看>>
【BZOJ 3676】 3676: [Apio2014]回文串 (SAM+Manacher+倍增)
查看>>