ALU & BRU
标量 ALU 与 BRU 由于相对较为简单,直接复用了 NutShell 的 ALU 进行实现。ALU 内部包含乘法器和移位器,BPU 则额外增加了分支预测的配套功能。
Polaris 目前分支预测机制与 NutShell 一致:前端对跳转类指令的目标 pc 进行预测,并按照预测的 pc 进行取指,将预测结果随跳转指令的译码信息一起传 入后端。后端在执行指令后比较目标 pc 的计算结果和预测结果,如果不一致,则 BPU 发出 PC 重定向的请求,后端母模块判断该请求有效(该指令之前的指令都 已被提交或即将被提交且没有发出 PC 重定向请求)后发出流水线冲刷信号并向 前端发送重定向的 PC 地址。
后端默认实现两个 ALU,可以选择是否启用独立 BRU。独立 BRU 实测会对 性能产生约为 5% 的提升效果。在不启用独立 BRU 时,编号为 0 的 ALU 将被启 用分支运算部分的逻辑,分支指令的通路将复用该 ALU 的指令通路。