可以在硬件(RTL)中实现缓存一致性协议(如窥探一致性)吗?

时间:2016-10-22 22:00:20

标签: caching architecture verilog processor

可以在硬件(RTL)中实现缓存一致性协议,如侦听一致性协议和MESI / MOESI吗?我正在设计一个用于多核缓存环境的RTL,并且需要实现缓存一致性protool,以便为所有处理器获得连贯一致的数据。这只是一次学术练习。

任何线索确实会有所帮助。我有MSI的状态图,我应该先尝试实现FSM吗?我正在为可合成的verilog / systemverilog开发代码。

每个缓存块的FSM应该不同,那么是否有一个多路复用器连接到FSM状态机控制器,如下所示?

enter image description here

2 个答案:

答案 0 :(得分:2)

  

可以在硬件(RTL)中实现缓存一致性协议,如侦听一致性协议和MESI / MOESI吗?

是。它们已经在VLSI中实施了多年,正如已经评论过的人已经说过。

  

我应该首先尝试实施FSM [for Modified/Shared/Invalid (MSI) cache-coherence protocol]吗?

我猜是这样的。这当然是比较容易的一个。您没有提到您是否已经实现了基本缓存控制器。我觉得你应该先从一个单处理器缓存控制器开始,然后再展开它以窥视其他处理器的缓存。

就个人而言,我发现计算机组织和设计:硬件/软件接口第五版在进入缓存架构时非常有用。我附上了一本关于构建缓存控制器的书的屏幕截图。

Using a finite state machine to control a simple cache

从那时起,您可能会看到这些资源,这些资源将深入探讨具有缓存一致性功能的缓存控制器的架构设计。我通过谷歌的基本搜索来提升它们。

  

是否有一个多路复用器连接到FSM状态机控制器,如下所示?

要访问缓存中的块/行,是的。但是,请记住,您的一致性控制器可能不需要访问缓存中的数据。您的一致性逻辑很可能只需要读取和/或修改块的状态位。这可以节省一些位宽。所以我可能会像这样绘制我的图表:

enter image description here

这只是一个想法,而不是一个具体的“这就是你应该这样做”的答案。

由于您正在使用MSI,因此您实际上只需要2位来表示这三种状态。获取和输出仅2位应该比使用其相关控制器的数据获得整个块更有效。

// Note this code has not been tested. It is simply for illustrative purposes only.
module <cache name> (

input [X:0] address,
output logic [1:0] block_state

);

    // Cache memory blocks (32-bits of data. 2 bits of "state" info)
    logic [33:0] cache_mem [0:N];

    // Give index bits of address a name
    wire [Y:0] address_index;
    assign address_index[Y:0] = address[A:B];

    // Output the state bits of the selected cache block.
    assign block_state[1:0] = cache_mem[33:32][address_index];

endmodule

希望其中一些对您有所帮助!干杯!

答案 1 :(得分:0)

您还可以查看普林斯顿(openPiton)的openPiton项目。它是一个研究框架,允许您合成和录制多核设计。