2

我试图弄清楚当我使用 RoCCIO 时如何在 RISCV 中读取和写入内存。但我无法清楚地了解发生了什么。尤其是我如何处理内存或者我应该如何使用内存tag。是否有任何资源可以找到如何在 Rocket 核心和我的加速器之间传输数据?

他们在uncore/src/main/scala/consts.scala路径中提到了不同类型的内存cmd。但还有什么?

例如,我想将数组的起始地址和计划提取的元素数量传递到加速器中,然后开始提取它们。我应该使用什么信号?

谢谢

4

1 回答 1

2

在 RoCC 接口中,该mem字段是到 L1 缓存的连接。该dmem字段是到 L2 缓存的连接。您要使用哪一个取决于您的加速器的内存带宽要求。

Rocket 和 RoCC 加速器可以通过缓存共享数据(记得在 Rocket 内核上使用指令,这样内存排序是正确的),也可以通过RoCCIO 中fence的字段直接给 Rocket 数据。resp

L1 缓存的 IO 可以在 Rocket 的(https://github.com/ucb-bar/rocket/blob/master/src/main/scala/nbdcache.scala)中找到,而 L2 IO 可以在 uncore 的(https ://github.com/ucb-bar/uncore/blob/master/src/main/scala/tilelink.scala)。

虽然我不知道tag您指的是哪个内存,但通常情况下tag它会通过内存系统并返回给您,并且响应不会受到影响(如果您有多个请求正在进行,这个返回标签可以帮助您识别哪个是哪个)。

我怀疑如果您想获取一组数据,您将需要一个状态机来请求加速器中的每个单独的地址。除非您通过 L2 缓存接口,在这种情况下,我相信它来自缓存行大小。

于 2015-06-12T03:25:17.243 回答