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,所以不要指望它能匹配更简单的缓存设计,其中写入-缓冲区在概念上被绘制为处理器和缓存之间。
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,所以不要指望它能匹配更简单的缓存设计,其中写入-缓冲区在概念上被绘制为处理器和缓存之间。