Rocket CPU 中的 FENCE 指令有什么作用?我尝试通过 fpga 源但找不到它。
另外,写缓冲区在哪里实现?我可能会在那里得到答案:)
【Rocket的源代码】(Rocket是一个5级处理器)。
需要fence
类似FENCE
或某些原子操作的指令将在解码阶段停止,直到缓存告诉控制逻辑fence
操作可以继续(即,缓存现在是“有序的”)。缓存通过“ordered”信号执行此操作。例如,如果数据缓存有一个未完成的缓存未命中它正在等待,则不会对数据缓存进行排序。
最好的查看位置是ctrl.scala,其中包含指令及其控制信号。(非阻塞)数据缓存的代码可以在nbdcache.scala中找到。
我相信写回单元控制存储数据的写回,但这是一个非常复杂的高性能缓存,支持 AMO 和 ECC,所以不要指望它匹配更简单的缓存设计,其中写缓冲区在概念上是画在处理器和缓存之间。