简介

一个非常经典且现在都在使用的流水线前端架构。它的特点是将分支预测放在流水线的最前端,和取指进行了结构。将ICache移出了关键路径。

结构

部件介绍:

  • FTQ: 用来缓存分支预测器提供的预测地址,分支预测器会不停的预测并提交地址给FTQ,然后Icache从FTQ中获得取指地址并进行取指
  • FTB(fetch target buffer): 包括分支预测器,btb等

FTB

FTB是该设计的核心部件,他可以保存分支跳转指令的跳转地址,并对条件分支进行预测。它的结构如下图所示。

它的主体是一个表,使用pc进行查表,查表方式和cache类似。每个表项表示一个fetch blcok,每个fetch block的起始地址为分支跳转到目的地址,中止地址(fall through)为经常发生跳转(biased taken or unbiased)的分支。查表时是通过起始地址进行查表的。

FTB每次生成下一个fetch block的起始地址和中止地址,以及用于下次预测的pc。

每个表项包含如下内容:

  • tag: 地址的高位,参照cache的tag项
  • carry, partial fall thru: 两个项组成了中止地址。如果carry为0,则由pc高位和fall thru进行拼接,否则pc高位+1和fall thru进行拼接
  • target: 跳转地址
  • over-size: 表示一个fetch block是否跨越了一个cache block。

FTB更新:

当FTB缺失时,将顺序获取下一个cache block。在译码阶段发现未预测的跳转指令,或者在写回阶段发现预测失败的分支指令,或分支预测跳转的指令,都会对FTB进行更新。