FENCE 在 RISC-V Rocket 处理器中的实现

Implementation of FENCE in the RISC-V Rocket processor

FENCE 指令在 Rocket CPU 中的作用是什么?我尝试通过 fpga 源代码但找不到它。

另外,写入缓冲区是在哪里实现的?我可能会在那里得到答案:)

[Rocket's source code](Rocket 是一个 5 级处理器)。

需要 fence 的指令,如 FENCE 或某些原子操作,将在解码阶段停止,直到缓存告诉控制逻辑可以进行 fence 操作(即,缓存现在是“有序的”)。缓存通过“有序”信号执行此操作。例如,如果数据缓存有一个正在等待的未命中缓存,则不会对其进行排序。

最好看的地方是ctrl.scala, which contains the instructions and their control signals. The (non-blocking) data cache's code can be found in nbdcache.scala

我相信写回单元管理存储数据的写回,但这是一个非常复杂的高性能缓存,支持 AMO 和 ECC,所以不要指望它能匹配更简单的缓存设计,其中写入-缓冲区在概念上被绘制为处理器和缓存之间。