缓存到内存映射

cache to memory mapping

最初设计缓存时,它是随机映射一些内存地址还是一开始是空的,只有在处理器加载或存储指令后才填充memory/lower级缓存数据?

我有这个问题,因为我为 L1 Cache 设计了 ​​RTL。那么我应该将它留空并等待任何处理器请求 read/write 还是只用一些内存映射数据填充它然后相应地理解 hit/miss?

首先设计?你是说第一次开机?正常的方法是从所有无效的标签开始(因此数据数组或其他任何地方的内容都无关紧要)。

如果你的缓存中的所有数据都是随机初始化的,那么很容易想象出错误,所以有些行是有效的,不脏的,并且与 RAM / ROM 中的实际内容不同,所以显然你不应该去做。例如在这个不同步的 L1 中命中引导 ROM 代码会很糟糕!


如果内存的任何部分在开机时被初始化为已知内容(如全零),理论上您可以初始化缓存标签和数据,以便它缓存该内存。

如果您将缓存初始化为对与内存中的内容不匹配的任何地方有效,则需要将其初始化为脏的,这将在逐出行以支持任何 CPU 实际需要,所以这没有意义。