今天又研读了一下BOOM核的代码, 确认了BOOM没做某些CSR读写的优化, 每次读写任意的CSR都是刷一遍流水线。具体而言, BOOM是在CSR读写指令执行时, 执行前等流水线清空, 执行后刷一遍流水线。非常恐怖。不过, 这样方便了CSR模块的实现, 由于此前流水线已经清空, 前面的指令不会再产生新的异常, 其只需要在ALU阶段直接读写即可, 不需要CSR寄存器重命名、数据转发等。
事实上, cyy此前的调研也发现, 其他的一些开源RISC-V核, 如平头哥、香山等, 也都是会刷一遍流水线。
发表评论