FPGA 经典五级流水线产生的冒险和和解决方案

冒险产生的原因
典型的五级流水线分为5个阶段:IF, ID, EX,MEM, WB。

典型的五级流水线.png

了实现cpu的高效率利用,有了流水线,并将5个流水线级重叠使用。流水线处理中因为硬件资源的竞争,和各个阶段的依赖关系,可能会发生操作无法执行,产生冒险。

冒险可分为3类:构造冒险,数据冒险,控制冒险。

构造冒险:

  • 构造冒险产生的原因:硬件资源的竞争。Eg:IF阶段和MEM阶段都要访问内存,由于访问内存的总线时共享的,无法同时操作,需要等一方执行完操作后,另一方在执行。(数据和指令共享同一总线为冯诺依曼架构)。本质:硬件资源不够多。
  • 解决办法:
    采用哈弗架构,即在物理上将指令和数据所用的内存和访问通道分开。
    缺点:指令的和数据相同编号的地址指向的是不同的内存空间,会引起软件设计的问题。
    本质:增加硬件资源。
    加缓存,即cpu访问指令和数据的时候,直接面对的是各自的缓存,缓存面对内存。内存还是指令和数据公用一个。

数据冒险:

  • 数据冒险产生的原因:各个阶段之间存在依赖关系,即某即将执行的数据还需要未准备好的数据。
  • 解决办法:
  1. 直通:在数据确定的EX阶段,将数据直接传递给下一条指令。
  2. 直通无法解决的Load冒险:load指令访问内存要在MEM阶段,但此时下一条指令已经到了EX阶段。此时只能阻塞流水线,暂停一个周期,等到数据确定。
  3. 避免load冒险要靠调度算法来避免。

控制冒险:

  • 控制冒险产生的原因:无法确定下一条指令出现的冒险。分支指令执行结果出来之前,无法执行下一条指令。
  • 解决办法:
  • 延迟间隙:在执行分支指令后并不立刻跳转到分支结果指向的指令,而是执行完下一条指令在跳转。
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2019-04-27 08:21:35 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它