BPU 全局接口
本节中介绍了香山分支预测单元整体对外交互的接口的定义,包括全局分支预测结果和单流水级预测结果的呈现形式。
Categories:
BPU 模块整体对外接口 (PredirectIO)
接口定义: src/main/scala/xiangshan/frontend/BPU.scala
PredirectIO 是分支预测器整体的对外接口,它主要处理了分支预测器(BPU)与取指目标队列(FTQ)之间的交互,主要包含以下几个部分:
- bpu_to_ftq: BPU 向 FTQ 发送的信息,主要用于 BPU 向 FTQ 发送分支预测结果
- 接口类型:
BpuToFtqIO
- 信号列表:
- resp: BPU 向 FTQ 发送的全局分支预测信息
- 接口类型:
DecoupledIO(new BpuToFtqBundle())
BpuToFtqBundle
继承自BranchPredictionResp
,没有额外的信号
- 信号列表:详见 (
BranchPredictionResp
)
- 接口类型:
- resp: BPU 向 FTQ 发送的全局分支预测信息
- 接口类型:
- ftq_to_bpu: FTQ 向 BPU 发送的信息,主要用于处理重定向及更新请求
- 接口类型:
FtqToBpuIO
- 信号列表:
- redirect: FTQ 向 BPU 发送的重定向请求
- 接口类型:
Valid(new BranchPredictionRedirect)
- 接口列表:详见(
BranchPredictionRedirect
)
- 接口类型:
- update: FTQ 向 BPU 发送的更新请求
- 接口类型:
Valid(new BranchPredictionUpdate)
- 接口列表:详见(
BranchPredictionUpdate
)
- 接口类型:
- enq_ptr: FTQ发送给BPU的FTQ指针,告诉BPU下一次需要写到哪个FTQ表项
- 接口类型:
FtqPtr
- 接口类型:
- redirect: FTQ 向 BPU 发送的重定向请求
- 接口类型:
- ctrl: BPU 控制信号,主要用于控制各预测器的使能
- 接口类型:
BPUCtrl
- 接口列表:
- ubtb_enable: UBTB 预测器使能
- 接口类型:
Bool()
- 接口类型:
- btb_enable: BTB 预测器使能
- 接口类型:
Bool()
- 接口类型:
- bim_enable: BIM 预测器使能
- 接口类型:
Bool()
- 接口类型:
- tage_enable: TAGE 预测器使能
- 接口类型:
Bool()
- 接口类型:
- sc_enable: SC 预测器使能
- 接口类型:
Bool()
- 接口类型:
- ras_enable: RAS 预测器使能
- 接口类型:
Bool()
- 接口类型:
- loop_enable: LOOP 预测器使能
- 接口类型:
Bool()
- 接口类型:
- ubtb_enable: UBTB 预测器使能
- 接口类型:
- reset_vector: 重置向量,reset 时 BPU 的 pc 会被重置为该值
- 接口类型:
UInt(PAddrBits.W)
- 接口类型:
全局分支预测信息 (BranchPredictionResp)
接口定义: src/main/scala/xiangshan/frontend/FrontendBundle.scala
该接口定义了分支预测器预测的所有结果信息,包含了每一阶段的预测结果,以及最后一个流水级输出的相关信息。
- s1 s1流水级的分支预测结果
- s2 s2流水级的分支预测结果
- s3 s3流水级的分支预测结果
- 接口类型:
BranchPredictionBundle
- 信号列表:详见(
BranchPredictionBundle
)
- 接口类型:
- last_stage_meta 最后一个流水级的输出的本轮预测的预测器元数据。是一个位向量,由每个预测器输出、并由 Composer 合并为一个。
- 接口类型:
UInt(MaxMetaLength.W)
- 接口类型:
- last_stage_spec_info 最后一个流水级的输出的本轮预测的相关信息
- 接口类型:
Ftq_Redirect_SRAMEntry
- 接口列表:
- folded_hist 全局折叠历史
- 接口类型:
AllFoldedHistories(foldedGHistInfos)
- 接口类型:
- afhob 全局分支历史最老位
- 接口类型:
AllAheadFoldedHistoryOldestBits(foldedGHistInfos)
- 接口类型:
- lastBrNumOH 上次跳转位置。
- 接口类型:
UInt((numBr+1).W)
- 接口类型:
- histPtr 全局分支历史指针
- 接口类型:
CGHPtr
- 接口类型:
- ssp RAS推测栈栈顶在提交栈位置的指针
- 接口类型:
UInt(log2Up(RasSize).W)
- 接口类型:
- sctr RAS推测栈栈顶递归计数 Counter
- 接口类型:
UInt(log2Up(RasCtrSize).W)
- 接口类型:
- TOSW RAS推测栈(队列)写指针
- 接口类型:
CGHPtr
- 接口类型:
- TOSR RAS推测栈(队列)读指针
- 接口类型:
CGHPtr
- 接口类型:
- NOS RAS栈顶 Counter
- 接口类型:
CGHPtr
- 接口类型:
- topAddr RAS栈顶返回地址
- 接口类型:
UInt(VAddrBits.W)
- 接口类型:
- folded_hist 全局折叠历史
- 接口类型:
- last_stage_ftb_entry 最后一个流水级的输出的FTB表项
- 接口类型:
FtqEntry
- 接口列表:详见(
FtqEntry
)
- 接口类型:
单流水级分支预测结果 (BranchPredictionBundle)
接口定义: src/main/scala/xiangshan/frontend/FrontendBundle.scala
该接口定义了每个流水级对外输出的分支预测结果信息,
- pc 预测块的起始 pc
- 接口类型:
Vec(numDup, UInt(VAddrBits.W))
numDup仅为寄存器复制,其中信号完全相同
- 接口类型:
- valid 预测结果是否有效
- 接口类型:
Vec(numDup, Bool())
- 接口类型:
- hasRedirect 是否需要重定向
- 接口说明:只有s2, s3阶段会重定向,重定向发生时本阶段预测结果会覆盖之前流水级的结果
- 接口类型:
Vec(numDup, Bool())
- ftq_idx FTQ指针,指向该阶段对应预测信息的FTQ表项
- 接口类型:
new FtqPtr
- 接口类型:
- full_pred 完整的分支预测结果
- 接口类型:
Vec(numDup, new FullBranchPrediction)
- 接口列表:详见(
FullBranchPrediction
)
- 接口类型: