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

4

FENCE指令在Rocket CPU中是用来做什么的?我试着查看FPGA源代码,但是没有找到它。

另外,写缓冲区实现在哪里?我可能可以在那里找到答案 :)

1个回答

5

[Rocket的源代码](Rocket是一个5级处理器)。

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

最好的查找位置是ctrl.scala,其中包含指令及其控制信号。 (非阻塞)数据缓存的代码可以在nbdcache.scala中找到。

我认为写回单元控制着存储数据的写回,但这是一个非常复杂、高性能的缓存,支持AMO和ECC,因此不要期望它与更简单的缓存设计相匹配,在这些设计中,写缓冲区在概念上被绘制在处理器和缓存之间。

2
谢谢Chris。这个机制有没有文档记录的地方?由于Rocket是一个顺序核心,我猜测它不支持推测执行。在栅栏和原子指令上停顿似乎是保守的,因为大量的研究已经致力于减少这种开销。 - pranith
2
我建议您在这里查看Rocket的视频和幻灯片(http://riscv.org/workshop-jan2015.html)以获取概述。但是对于这种低级别的细节,目前来说代码是最好的文档。我认为没有真正的研究 - 甚至没有任何意义 - 在五级处理器中超越栅栏进行推测性加速。惩罚太小,成本太高。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接