我可以在两级流水线RISC架构中实现Branch目标缓冲区吗?

时间:2018-05-30 06:04:05

标签: branch branch-prediction pipelining branching-strategy risc

我正在尝试在PIC16等低级微控制器中实现BTB。我不知道是否可行。所以想要你的建议。

感谢。

1 个答案:

答案 0 :(得分:0)

基本的BTB相当简单,相当于

BTBEntry be = BTB[curAddr & BTBBitMask];
nextFetch = be.addr;
实现为电子设备的

采用较低的curAddr位并将它们送入BTB存储器并获取下一个地址。

当分支被解析后,结果将被写回BTB。

查找可以与内存提取并行完成,并且必须更快,因为必须执行其他步骤。

struct BTBEntry {
  int addr;
  int curAddr; // upper address bits.
}

由于存储的addr与curAddr不对应,不仅仅是在程序中随机跳转,我们还需要检查我们正在查找的地址是否是正确的分支。

if ((curAddr & ~BTBBitMask) == be.curAddr)
  nextFetch = be.addr; // found in the BTB
else
  nextFetch = curAddr + instrutionSize; // not found, take next instruction

所以可以这样做,如果BTB足够小并且使用的总时间少于取指令。但效果可能不会像你想要的那么大。