内存地址是否与缓存块中的数据分开?

时间:2014-03-06 20:37:41

标签: caching architecture hardware

我在本书中关注直接映射缓存的示例。

规格如下: 假设32位字,32位地址,1字块大小(b),8字容量(C)。 这意味着块数(B)= C / b = 8和集合数(S)= B = 8

我很困惑,因为我认为每组只包含1个字(b),因此32位。但是在这张图中,它显示数据是32位,标签是27位。这给了我们总共59位,大于out blocksize(b)。

这是否意味着地址保存在其他地方,只有数据保存在集合中?

enter image description here

1 个答案:

答案 0 :(得分:1)

如图所示,数据部分为32b(正如您所说,每组仅包含1个字)。

标记是每个集合的必需部分,它允许我们知道请求地址是否位于缓存中(“命中”)。你的图片说标签的大小是27位。

<59>“59”位(实际上是60位)只是跟踪构建此高速缓存需要多少实际SRAM(1个有效位+ 27个标记位+32个数据位)* 8个设置= 480位SRAM。

但是,不要因为认为标签是数据块的一部分而让自己感到困惑。它可以(通常是)位于芯片的其他位置,即使在概念上它与该组的数据部分耦合。

我还想添加(并且希望不会进一步混淆主题),同时可以像他们所示的那样构建一个缓存(SRAM中的标签,有效位和数据,这意味着它将是非常密集),你可能真的不想那样建立它!数据将在SRAM中,但我怀疑有效位和标签更有可能位于触发器的其他位置。访问速度快得多!您应该与您的老师讨论如何正常构建高速缓存以及在SRAM与触发器中使用标签和有效位的权衡。