0

我只是在做一个项目“设计一个基于 RISC-V ISA 的双核处理器,没有管道,没有私有或共享缓存,并且 2 个内核共享一个数据存储器”。我设计了 RISC V 单核处理器并且它工作正常。有一点我不明白:

1)当数据存储器在同一个地址收到 2 个写请求时,它会做什么?(我如下图所示阅读书籍 => 所以 2 个内核必须一起竞争才能获得访问权限?我的设计是否安全(因为我认为当我预先合成和模拟时很难验证))还有更好的吗? 计算机体系结构:定量方法,第 6 - 第 382 页

2)我提到的大多数多核处理器参考都是应用缓存并使用一些协议(MESI,MSI,MOSI ...)来保持一致性,为什么这些协议的 FSM 我只看到 1 个事件像 R/W 请求一样发生同时来自处理器或总线,我没有看到它们如何同时执行 2 条存储指令或加载和存储指令(相同的地址)?

抱歉问了太多问题,但我真的很想知道。

4

2 回答 2

0

你需要某种仲裁。将有另一个设备 - 内存控制器,或者只是仲裁器 - 将决定哪个 cpu 将控制内存接口。

仲裁器将授予对获胜 cpu 的访问权限,或向仲裁失败的 cpu 断言等待请求信号。丢失的 cpu 将不得不停止,直到内存接口再次可用 - 等待请求信号被取消断言,或“授权访问”信号被断言,具体取决于您的内存总线架构。

于 2019-11-25T17:25:15.303 回答
0

您引用的许多材料都是专门关于处理并非由所有内核共享的缓存(您站点的书页、有关 MESI 的信息等);与处理缓存相比,处理对内存的共享访问具有不同(通常更容易)的挑战。但是,您特别注意到该项目不涉及缓存,因此您应该小心地将有关缓存的信息与有关内存的信息混为一谈。

  1. 通常,对同一地址的写访问将由总线和实际内存元素之间的内存控制器串行化;因此,如果两次写入是对同一地址的内存问题,则只有一次写入适用。根据您的内存,如果它只有一个端口,您可能必须对所有访问进行序列化,因为内存本身一次只能进行一次访问。通常,您似乎正在实施的基本核心将停止,直到内存访问完成,因此如果发生同时访问,一个核心将停止更长的时间,而第一个核心的访问完成,然后它自己的访问完成。对于许多 FPGA 中常见的片上存储器双核存储器,您需要查看制造商发布的关于多次写入同一地址的文档。查看英特尔(Altera)的文档,如果在同一周期中写入相同的地址,您可能会导致内存损坏;因此,如果两个写入在同一个周期中使用附加逻辑到达同一个地址,则需要添加一个仲裁器来序列化访问。
  2. 通常,您看到的示例都经过简化,以确保您了解用于维护高速缓存一致性的高级技术。对于这些 FSM 中的任何一个,如何处理同时访问在某种程度上取决于实现。通常,某种仲裁最终处理访问总线,因此写入访问最终被序列化,因此,对于相同地址的写入,一个核心将再次“获胜”并在另一个核心之后立即应用其写入,因此内存将采用其中一个值而不是另一个值。如果实现允许在同一时钟内进行多个总线访问,则需要额外的逻辑来管理多个高速缓存尝试同时向同一地址发出写入的情况。
于 2019-11-25T17:54:43.937 回答