可以在硬件(RTL)中实现诸如窥探一致性之类的缓存一致性协议吗?
Can cache coherency protocols like snooping coherence be implemented in hardware(RTL)?
是否可以在硬件 (RTL) 中实现缓存一致性协议,例如窥探一致性协议和 MESI/MOESI?我正在为多核缓存环境设计一个 RTL,需要在其中实现缓存一致性协议工具,以便为所有处理器获取连贯一致的数据。这只是一个学术练习。
任何线索确实会有帮助。我有 MSI 的状态图,我应该首先尝试从中实施 FSM 吗?我正在开发可合成 verilog/systemverilog.
的代码
每个缓存块的 FSM 应该不同,所以是否有一个 mux 连接到 FSM 状态机控制器,如下所示?
Can cache coherency protocols like snooping coherence protocol and MESI/MOESI be implemented in hardware(RTL)?
是的。它们已经在 VLSI 中实施多年,正如发表评论的人所说。
should I try to implement a FSM [for Modified/Shared/Invalid (MSI) cache-coherence protocol] first?
我想是的。它当然是更容易的之一。你没有提到你是否已经实现了一个基本的缓存控制器。我觉得您应该先从 single-processor 缓存控制器开始,然后扩展它以从那里查看其他处理器的缓存。
就我个人而言,我发现 计算机组织与设计:Hardware/Software 接口第五版 对了解缓存体系结构很有帮助。我附上了关于构建缓存控制器的书中的一部分的屏幕截图。
从那时起,您可能会查看此类资源,它们深入研究具有 cache-coherency 功能的缓存控制器的架构设计。我通过基本 Google 搜索找到了这些。
is there a mux connected to the FSM state machine controller like below?
要访问缓存中的block/line,是的。但是,请记住,您的一致性控制器可能不需要访问缓存中的数据。您的一致性逻辑很可能只需要读取 and/or 修改块的状态位。这可以为您节省一些位宽。所以我可能会这样画我的图:
这只是一个想法,不是具体的"this is how you should do it"答案。
由于您使用的是 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
希望其中的一些内容对您有所帮助!干杯!
您还可以看看普林斯顿的 openPiton 项目 (openPiton)。它是一个研究框架,可让您综合和流片多核设计。
是否可以在硬件 (RTL) 中实现缓存一致性协议,例如窥探一致性协议和 MESI/MOESI?我正在为多核缓存环境设计一个 RTL,需要在其中实现缓存一致性协议工具,以便为所有处理器获取连贯一致的数据。这只是一个学术练习。
任何线索确实会有帮助。我有 MSI 的状态图,我应该首先尝试从中实施 FSM 吗?我正在开发可合成 verilog/systemverilog.
的代码每个缓存块的 FSM 应该不同,所以是否有一个 mux 连接到 FSM 状态机控制器,如下所示?
Can cache coherency protocols like snooping coherence protocol and MESI/MOESI be implemented in hardware(RTL)?
是的。它们已经在 VLSI 中实施多年,正如发表评论的人所说。
should I try to implement a FSM [for Modified/Shared/Invalid (MSI) cache-coherence protocol] first?
我想是的。它当然是更容易的之一。你没有提到你是否已经实现了一个基本的缓存控制器。我觉得您应该先从 single-processor 缓存控制器开始,然后扩展它以从那里查看其他处理器的缓存。
就我个人而言,我发现 计算机组织与设计:Hardware/Software 接口第五版 对了解缓存体系结构很有帮助。我附上了关于构建缓存控制器的书中的一部分的屏幕截图。
从那时起,您可能会查看此类资源,它们深入研究具有 cache-coherency 功能的缓存控制器的架构设计。我通过基本 Google 搜索找到了这些。
is there a mux connected to the FSM state machine controller like below?
要访问缓存中的block/line,是的。但是,请记住,您的一致性控制器可能不需要访问缓存中的数据。您的一致性逻辑很可能只需要读取 and/or 修改块的状态位。这可以为您节省一些位宽。所以我可能会这样画我的图:
这只是一个想法,不是具体的"this is how you should do it"答案。
由于您使用的是 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
希望其中的一些内容对您有所帮助!干杯!
您还可以看看普林斯顿的 openPiton 项目 (openPiton)。它是一个研究框架,可让您综合和流片多核设计。