2026/7/1 8:21:56

RIDECORE学习记录之二

RIDECORE学习记录之二 一、总体架构分为六个阶段二、fetch阶段这是取指阶段。看上图IMEM存储指令。PC模块根据Gsahre分支预测结果发出要取的指令地址。功能好理解就是取指令。不过加了个分支预测。三、看实现细节首先看PCPC是32位的其中的高28位给了IMEM从IMEM中一次取出4条指令一条指令是32bit4个字节那么一次性从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 分支预测器组成BHRBranch History Register分支历史寄存器记录最近一段时间分支“跳/不跳”的历史。PHTPattern History Table模式历史表表中每个项是2-bit 饱和计数器用来给出 Taken / Not Taken 预测。PC取当前分支指令地址中的一部分位与 BHR 一起生成索引。BTBBranch Target Buffer存放分支源地址和目标地址用来在预测跳转时给出预测目标地址。用一话总结Gshare BHR PHT PC异或索引 BTB。九、Gshare 的工作方式就是先用PC XOR BHR查 PHT 做方向预测再在预测为 Taken 时用 BTB 给出目标地址之后由执行结果来校正 PC、恢复/确认 BHR并更新 PHT 和 BTB。