时序图 分支_BOOM微架构学习(1)——取指单元与分支预测

3729d5802ed461cc69cf7fab506dd470.png

之前在RISC-V的“Demo”级项目——Rocket-chip一文中曾经简介过BOOM处理器的流水线,这次我们开始一个系列,深入学习一下BOOM的微架构,这样对于乱序执行的超标量处理器会有一个较为深入的认识。

本系列计划按照流水线的前后顺序,第一篇讲前端的取指和分支预测,第二篇讲译码和寄存器重命名,第三篇介绍ROB和指令的发射,第四篇介绍指令的执行和Bypass机制,第五篇讲BOOM的访存和存储系统, 最后从使用的角度来讲一下BOOM中的Chisel Parameter配置方式。

本文是BOOM系列的第一篇,先从取指单元以及BOOM的分支预测器入手。

BOOM的取指单元

在介绍取指单元之前先回顾两个概念方便下文讨论:一个叫前端(Front-end),指流水线中的取指和分支预测部分,这一部分将指令从I-Cache中取出;另一个叫后端(Back-end),指流水线中从派发到写回阶段的这一部分,也就是指令的执行阶段。

BOOM的前端如下图所示,它包括取指和分支预测在内共划分为5个周期(从F0到F4)。当后端发现分支预测错误,或者分支预测器预测需要改变取指的位置,就会给前端发一个请求,前端就会从新的PC开始取指令。

1709529ab5dc2f2b60b9cd14d15eecf3.png
BOOM前端架构图

BOOM并不是每次从I-Cache中取一条指令,而是一次从指令缓存中取出一个Fetch Packet的指令(就像是批发一样,一次批发一包指令进来)。之后对这些指令进行快速译码(为分支预测提供信息),并写到Fetch Buffer(Fetch Buffer是一个将前后端解耦的指令队列)中供后端使用;同时将给后端用的PC和分支预测信息则写到Fetch Target Queue中(Fetch Target Queue保存着从I-Cache取得的指令的地址以及地址对应的分支预测信息;当指令被提交后,ROB会从Fetch Target Queue中取出该指令的相应信息;当取指单元重定向时Fetch Target Queue会被更新)。

另外,BOOM必须要考

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值