需要实现的功能(选做)
分支预测算法
-
对于 branch 指令,实现标准两位饱和计数器。BTB 的相连度,大小均可自定义
-
(可选)对于 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
- 返回预测是否跳转,以及对应的跳转地址。
- 可以添加额外信息,该信息将进入 Instruction 供后续执行单元使用
unsigned FrontendWithPredict::calculateNextPC
- 根据当前 pc 计算下一周期的新 pc
void FrontendWithPredict::bpuBackendUpdate
- 更新饱和计数器
- 更新 BTB
- (可选)恢复 RAS
最后更新:
2023年3月30日
作者: