BPU 全局接口

本节中介绍了香山分支预测单元整体对外交互的接口的定义,包括全局分支预测结果和单流水级预测结果的呈现形式。

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)
  • 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
  • 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()
  • 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)
  • 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
最后修改 October 27, 2024: Fix typo (e95831c)