我可以在两阶段流水线RISC架构中实现分支目标缓冲区吗?



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

谢谢。

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

BTBEntry be = BTB[curAddr & BTBBitMask];
nextFetch = be.addr;

它实现为电子设备,获取较低的curAddr位并将它们馈入BTB存储器并获取下一个地址。

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

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

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

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

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

因此,如果BTB足够小并且使用的总时间少于指令提取,则可以这样做。但效果可能没有您想要的那么大。

相关内容

  • 没有找到相关文章

最新更新