RISC-V MCU中文社区

【分享】 分支预测器分享

发表于 开源蜂鸟E203 2023-05-30 14:18:09
0
1289
1

一、队伍介绍
报名编号:CICC2623
团队名称:吾开天工

二、RAS栈返回地址缓冲器设计
call指令每次调用子程序(如某个函数)是固定的,因此对应目标pc固定可用BTB进行预测。但对于子程序可能很多地方都需要调用它,故返回的地方会发生变化,但是return指令的目标地址总是最近一次执行call指令的下一条指令,如图8所示。在E203中并没有因此可设计一个后进先出存储器(LIFO)保存最近执行call指令的下一条指令地址,该存储器和堆栈的工作原理一样,称为返回地址堆栈(RAS)。现代处理器中BTB和RAS几乎是必须要使用的。在本设计中RAS的大小为16项,可以支持16层函数调用,足以支持大多数嵌入式领域的应用场景。
在遇到call指令时需要能够将call指令的下一条地址放入RAS中,在RISC-V手册中定义了如下规则识别call和return指令。其判断标准手册[4]如图9所示:
但由于分支预测器工作于流水线的前端所以并不能够在预测时得到其源操作数寄存器,所以在实际工作时要利用BTB来辅助RAS工作,利用之前提到的在BTB设计中的BrType位可以用起作为标志位将地址压入栈中,并通过BrType的Return标记位将其从RAS中读出。如图10所示:
最终设计的基于Gshare+BTB+RAS的分支预测器能够利用Gshare来对分支指令是否跳转做出预测,如果Gshare判定当前指令跳转则BTB与RAS根据当前PC是否有在自己的查找表中命中来确定指令跳转的目标地址,如上图5所示。
当该分支预测器在内核中工作时,会不断根据分支指令的提交结果来判断Gshare是否预测正确,以及BTB与RAS预测的跳转目标地址是否正确。如果预测错误在内核刷新流水线的同时也会将分支预测器回滚到未预测错的状态,并且根据当前的指令提交结果修正Gshare中的ghr参数以及更新BTB与RAS查找表中的信息。这使得该动态分支预测器具有学习的能力,利用历史数据为未来做预测。

喜欢1
用户评论
Gift

Gift 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板