【发布时间】:2016-10-22 05:24:53
【问题描述】:
第一次设计缓存时,它是随机映射到一些内存地址还是一开始是空的,只有在处理器的加载或存储指令后才填充内存/较低级别的缓存数据?
我有这个问题,因为我已经为 L1 缓存设计了 RTL。那么我应该将其留空并等待任何处理器请求读/写,还是只用一些内存映射数据填充它,然后相应地理解命中/未命中?
【问题讨论】:
第一次设计缓存时,它是随机映射到一些内存地址还是一开始是空的,只有在处理器的加载或存储指令后才填充内存/较低级别的缓存数据?
我有这个问题,因为我已经为 L1 缓存设计了 RTL。那么我应该将其留空并等待任何处理器请求读/写,还是只用一些内存映射数据填充它,然后相应地理解命中/未命中?
【问题讨论】:
第一次设计?你的意思是先开机?正常的方法是从所有无效的标签开始(因此数据数组或其他任何地方的内容都无关紧要)。
如果缓存中的所有数据都是随机初始化的,很容易想象会出现错误,因此有些行是有效的、不脏的,并且内容与 RAM / ROM 中的实际内容不同,所以显然你不应该这样做.例如在这个不同步的 L1 中命中引导 ROM 代码会很糟糕!
如果内存的任何部分在开机时被初始化为已知内容(如全零),理论上您可以初始化缓存标签和数据,以便缓存该内存。
如果您将缓存初始化为对与内存中的内容不匹配的任何位置有效,则需要将其初始化为脏,这将在行被逐出以支持 CPU 实际需要的任何内容时触发写回,所以这没有任何意义。
【讨论】: