A Scalable Front-End Architecture for Fast Instruction Delivery
简介
一个非常经典且现在都在使用的流水线前端架构。它的特点是将分支预测放在流水线的最前端,和取指进行了结构。将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进行更新。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment