RIDECORE学习记录之二

一、总体架构分为六个阶段

在这里插入图片描述

二、fetch阶段

这是取指阶段。

看上图,IMEM存储指令。PC模块根据Gsahre分支预测结果发出要取的指令地址。

功能好理解,就是取指令。不过,加了个分支预测。

三、看实现细节

在这里插入图片描述
首先看PC,PC是32位的,其中的高28位给了IMEM,从IMEM中一次取出4条指令,一条指令是32bit,4个字节,那么一次性从IMEM也就是取出16个字节。

然后,由select logic负责从中挑选出两条指令,其实质是个选择器,控制信号是PC[3:2]这两位。

四、再来看select logic的实现细节,也就是4选2的规则是什么?

在这里插入图片描述
首先看到4条指令分别进入了两个选择器,选择器是4选1的,也就是输入4个指令输出一条指令。

然后分别看两个选择器的控制逻辑。

左边的选择器的控制信号是select 2bit,也就是上边的PC[3:2];

而右边的选择器的控制信号是select 2bit + 1,也就是PC[3:2}+1

所以,

当PC[3:2] = 00时,左边输出4条指令中第0个;右边输出4条指令中第1个。

当PC[3:2] = 01时,左边输出4条指令中第1个;右边输出4条指令中第2个

当PC[3:2] = 10时,左边输出4条指令中第2个;右边输出4条指令中第3个

当PC[3:2] = 11时,左边输出4条指令中第3个;右边输出4条指令中第0个(回滚)

五、输出的两条指令中第二条是不是有效?需要判断

最明显的情况就是:

当PC[3:2] = 11时,左边输出4条指令中第3个;右边输出4条指令中第0个(回滚)

第0个指令已经执行过了,显然此时输出的insn 2是无效的

还有一种情况就是:

当PC[3:2] = 01时,左边输出4条指令中第1个;右边输出4条指令中第2个。

这种情况下输出的insn 2也是无效的。

所以,当PC[3:2] = 2’b*1时,有invalid insn2,见中的图的下半部分

六、到这里思路还是清晰的,总结下就是取指,不过是取四个选两个

七、下面学习fetch阶段的重点–Gshare分支预测

八、Gshare 分支预测器组成

  1. BHR(Branch History Register,分支历史寄存器)
    记录最近一段时间分支“跳/不跳”的历史。

  2. PHT(Pattern History Table,模式历史表)
    表中每个项是 2-bit 饱和计数器,用来给出 Taken / Not Taken 预测。

  3. PC
    取当前分支指令地址中的一部分位,与 BHR 一起生成索引。

  4. BTB(Branch Target Buffer)
    存放分支源地址和目标地址,用来在预测跳转时给出预测目标地址。

用一话总结:Gshare = BHR + PHT + PC异或索引 + BTB。

九、Gshare 的工作方式就是:先用 PC XOR BHR 查 PHT 做方向预测,再在预测为 Taken 时用 BTB 给出目标地址;之后由执行结果来校正 PC、恢复/确认 BHR,并更新 PHT 和 BTB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值