跳转至

需要实现的功能(选做)

分支预测算法

  1. 对于 branch 指令,实现标准两位饱和计数器。BTB 的相连度,大小均可自定义

  2. (可选)对于 JAL 和 JALR 指令,可以尝试实现 RAS (返回地址栈),大小自定义

    • 当为 调用 指令时,插入当前 pc + 4,转到 BTB 中的目标地址
    • 当为 返回 指令时,弹出地址,跳转,注意不要将数据清除
    • 后端判断 mispredict 时会同时检查地址是否一致
    • mispredict 时,恢复 RAS 指针,该指针可以随指令携带

    一个例子:

    CALL 0x80100000  # top = 1
    CALL 0x80200000  # top = 2
    CALL 0x80300000  # top = 3
    CALL 0x80200000 mispredict # top = 1
    RETURN # predict to 0x80100000, top = 0
    RETURN mispredict # top = 1
    

BranchPredictBundle FrontendWithPredict::bpuFrontendUpdate

  1. 返回预测是否跳转,以及对应的跳转地址。
  2. 可以添加额外信息,该信息将进入 Instruction 供后续执行单元使用

unsigned FrontendWithPredict::calculateNextPC

  1. 根据当前 pc 计算下一周期的新 pc

void FrontendWithPredict::bpuBackendUpdate

  1. 更新饱和计数器
  2. 更新 BTB
  3. (可选)恢复 RAS

最后更新: 2023年3月30日
作者:cuibst