体系结构 | 五段流水线 | 流水线技术

体系结构 | 五段流水线 | 流水线技术一条经典的 5 段流水线 一条指令的执行过程分为以下 5 个周期 取指令周期 IF 指令译码 读寄存器周期 ID 执行 有效地址计算周期 EX 存储器访问 分支完成周期 MEM 写回周期 WB 一条经典的 5 段流水线介绍一条经典的 5 段 RISC 流水线每一个周期作为一个流水段 在各段之间加上锁存器 流水寄存器 一条指令的执行过程分为以下 5 个周期 取指令周期 IF 以程序计数器 PC 中的内容作为地址 从存储器中取出指令并放入指令寄存器 IR 同时 PC 值加 4

目录

一条经典的5段流水线

一条指令的执行过程分为以下5个周期:

取指令周期(IF)

指令译码/读寄存器周期(ID)

执行/有效地址计算周期(EX)

存储器访问/分支完成周期(MEM)

写回周期(WB)


流水线冲突和相关的链接:

体系结构 | 流水线 | 流水线相关 | 流水线冲突

一条经典的5段流水线

  • 介绍一条经典的5RISC流水线
  • 每一个周期作为一个流水段;
  • 在各段之间加上锁存器(流水寄存器)。 体系结构 | 五段流水线 | 流水线技术

一条指令的执行过程分为以下5个周期:

  • 取指令周期IF

以程序计数器PC中的内容作为地址,从存储器中取出指令并放入指令寄存器IR

同时PC值加4(假设每条指令占4个字节),指向顺序的下一条指令。  

  • 指令译码/读寄存器周期ID

对指令进行译码,并用IR中的寄存器地址去访问通用寄存器组,读出所需的操作数。

  • 执行/有效地址计算周期EX

不同指令所进行的操作不同:

loadstore指令ALU把指令中所指定的寄存器的内容与偏移量相加,形成访存有效地址。

寄存器-寄存器ALU指令ALU按照操作码指定的操作对从通用寄存器组中读出的数据进行运算。

寄存器-立即数ALU指令ALU按照操作码指定的操作对从通用寄存器组中读出的操作数和指令中给出的立即数进行运算。

分支指令ALU把指令中给出的偏移量与PC值相加,形成转移目标的地址。同时,对在前一个周期读出的操作数进行判断,确定分支是否成功。

  • 存储器访问/分支完成周期MEM

该周期处理的指令只有loadstore和分支指令。

其它类型的指令在此周期不做任何操作。

  • loadstore指令

load指令:用上一个周期计算出的有效地址从存储器中读出相应的数据;

store指令:把指定的数据写入这个有效地址所指出的存储器单元。

  • 分支指令

分支“成功”,就把转移目标地址送入PC

分支指令执行完成。

  • 写回周期WB

ALU运算指令和load指令在这个周期把结果数据写入通用寄存器组。

ALU运算指令:结果数据来自ALU

load指令:结果数据来自存储器。

  • 在这个实现方案中:

分支指令需要4个时钟周期(如果把分支指令的执行    提前到ID周期,则只需要2周期);

store指令需要4周期;

其它指令需要5周期才能完成。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213067.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:38
下一篇 2026年3月18日 下午6:38


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号