xiangshan分支预测单元结构及时序介绍
- 1.1 子预测器接口信号
- 1 in
- 2 out
- 3 流水线控制信号
- 4 update更新请求
- 5 redirect重定向请求
- 1.2 预测器接口连接
- 1.3 分支预测单元时序介绍
- 1.3.1 一周期无空泡预测
- 1.3.2 预测结果重定向
- 1.4 相关使能信号
本节主要介绍xiangshan BPU内部是如何整合子预测器的;
xiangshan BPU内部所有子预测器都被包在composer的结构中,且composer和内部所有子预测器具有相同的接口。因此BPU top层只需要关注和composer交互;
要是有时间的话,可以考虑简单学习一下chisel,就会发现子预测器和composer都是继承的相同base类;
BPU 顶层会为流水线提供预测所需要的信息。首先是 PC 和分支历史记录(包括全局历史和全局折叠历史),BPU_top 会和 Composer 之间连接一些流水线控制信号,最后 BPU 将外部输入的重定向请求接口和更新接口直接连接至 Composer。
1.1 子预测器接口信号
简单子预测器接口的定义:
1 in
- s1,s2,s3这三个通道(即各自对应每个clk)的预测信息输入
redirect_
update_ - s0_pc需要预测的PC
- ghist全局历史
- folded_hist全局历史
2 out
- s1,s2,s3预测信息输出
3 流水线控制信号
- s0_fire, s1_fire, s2_fire,s3_fire相应流水级的控制信号,是由ready和valid;
- s2_redirect,s3_redirect后续流水级发现预测错误时重定向信号
- s1_ready,s2_ready,s3_ready子预测器相应流水级是否就绪;
4 update更新请求
update更新相关信号;
5 redirect重定向请求
redirect重定向信号;
1.2 预测器接口连接
对于子预测器来说,预测器结果的连接方式是:预测结果输出是下一个预测器的输入。
注意的是:这种连接是组合电路的连接,而没有时序的影响
这个图我没太看懂,以s1通道为例,从输入到最后一个预测器输出,中间全都是组合电路,不受时序影响。寄存器只在S1,S2和S3通道之间存在。
1.3 分支预测单元时序介绍
1.3.1 一周期无空泡预测
uFTB是香山BPU子预测器中只需要一个周期便可以产生预测结果的预测器。
s0_pc在顶层送入,s1周期生效时,s1_pc保存上一周期的s0_pc;
在s1周期生效时,uFTB会接收到本周期传来的s1_fire控制使能信号,并根据s1_pc值,在本周期内生成预测结果,在预测结果中产生心的PC值;
由上图可知,BPU Top顶层拿到uFTB产生的下一个PC的值即(即target),然后送到npc_Gen(即新PC生成器)中,用于产生下一个周期的s0_pc.
因此,下一周期,uFTB获取到新的PC值,并开始新PC值预测块–target的产生。
1.3.2 预测结果重定向
BPU Top将s2的预测结果与上周期S1的预测结果进行比较;若s2与上一周期s1的的预测结果不同,会采信s2的结果,npc_gen将使用s2所提供的target作为新的s0_pc。
Diff 比较器通过获取 s1 周期的预测结果,与 s1 周期的预测结果进行对比产生 diff 信号,指导 npc_Gen 进行下一条 pc 的生成。与此同时,diff信号指示了 s1 阶段的预测结果发生错误,可直接用于 BPU 发往 FTQ 的预测结果中 s2 通道的预测结果重定向通道,指导 FTQ 覆盖之前的预测结果。
Diff信号还会通过 s2_redirect 接口送往每个子预测器,指导子预测器进行状态的更新。除此之外,当 s2 预测结果重定向发生时,说明 s1 通道预测结果已经发生错误,s2 阶段不能继续进行预测,需及时将子预测器流水线控制信号 s2_fire 置为无效,并等待纠正后的预测结果流入。
S3预测结果的重定向和这样类似。
只有当三个阶段的预测信息都错误时,才会产生有外部重定向请求发生,此时 npc_Gen 会接收到来自重定向请求中的 pc 地址。由于当重定向请求发生时,我们认为三阶段均预测错误,因此需要将三个阶段的 fire 信号全部置为无效,然后 npc_Gen 采用重定向请求中需要恢复的 PC,重新开始预测。
1.4 相关使能信号
由上面的diff信号比较等,可以得到以下一些信号:
- s0_fire, s1_fire, s2_fire, s3_fire 指示每个流水级是否工作
- s2_redirect, s3_redirect 指示是否有预测结果重定向发生
- s1_ready, s2_ready, s3_ready 子预测器发给BPU顶层,表示相应流水级是否就绪
以上是BPU Top顶层控制信号及与内子预测器的信号联系;