计组复习(三):流水化的数据通路,流水线冒险检测与处理

本文详细介绍了MIPS处理器流水线的设计思想,包括加速比、流水化的数据通路、数据冒险的检测与处理。通过实例解析了 lw 指令的流水线执行过程,阐述了1类和2类数据冒险的检测方法,以及如何处理取数-使用冒险。同时讨论了分支冒险和中断异常对流水线的影响。
摘要由CSDN通过智能技术生成

前言

昨天复(yu)习了单周期的 mips 流水线数据通路,知晓了硬件结构如何通过一系列的控制信号,完成不同指令的区别处理。

然而单周期的数据通路是一种理想化的情况,因为整个指令执行的过程,占用了全部的硬件。事实上,为了效率,流水化的硬件结构在同一时刻最多被 5 个指令分享(对应 mips 的 5 个阶段),这就带来了数据一致性的问题。

流水化的数据通路通过中间缓存的方式,避免了数据冲突,并且巧妙地将 5 个阶段的硬件使用,按照逻辑分隔,真正实现了流水化执行指令。


墙裂推荐先阅读:

流水线思想

从逻辑上将一条指令分为 5 个阶段,分别是:

  1. 取指令(IF)
  2. 译码(ID)
  3. 执行(EX)
  4. 内存访问(MEM)
  5. 写回(WB)

因为任何一条指令都需要 5 个步骤,于是从硬件层面可以划分出 5 个不同的阶段。

在这里插入图片描述
按照这种方式划分,只要某个部件完成了它的工作,马上就可以执行下一条指令的对应部分,这使得流水化得以实现,大大提高效率:

在这里插入图片描述
注:用的是我 之前博客 的图,以洗衣服为例(懒得画新图了

加速比

如上图,假设流水线各个级所花费的时间一致(假设都为 1 个时钟周期),并且没有什么冒险的情况(理想化),那么:

  • 串行执行 n 条指令,需要 5n 个周期
  • 流水化执行 n 条指令,需要 n+2 个周期(看上文的图就懂了为啥+2)
  • 加速比为 5n÷(n+2)=5

如果每个指令花费的时间不等,并且指令序列不是无限长,那么加速比会进一步下降。(因为吞吐率减少,同时不能忽略+2)

流水化的数据通路

流水化意味着每个部件独立,可是事与愿违。同一条指令,下一个阶段的部件总需要依赖上一个部件的结果。

以 ID 和 EX 阶段为例,EX 阶段需要 ID 阶段给出的控制信号和寄存器数据,才能放进 ALU 中进行运算。

举个例子:流水化执行指令1,2。目前执行到指令 1 的 EX 阶段了,需要指令 1 ID 阶段的数据。但是因为只有一套硬件,此时 ID 部件已经填充了指令 2 的数据,再进行存取就会出错:

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值