2016-10-22 63 views
1

當第一次設計緩存時,它是隨機映射一些內存地址,還是在開始時是空的,並且只有在來自處理器的加載或存儲指令之後才使用內存/較低級緩存數據填充?緩存到內存的映射

我有這個問題,因爲我設計了L1緩存的RTL。那麼我應該把它留空,等待任何處理器請求讀/寫,或者只是填充一些內存映射數據,然後相應地理解命中/失敗?

回答

1

首先設計?你的意思是先打開電源?正常的方法是從所有標籤開始無效(因此數據數組或其他地方的內容無關緊要)。

很容易想象如果緩存中的所有數據都是隨機初始化的,所以有些行可能是有效的,非髒的,並且與RAM/ROM中的內容不同,所以顯然你不應該這麼做那。例如在引導ROM代碼的這個不同步的L1中的命中將是不好的!


如果內存任何部分上電已知的內容進行初始化(像所有的3/0),理論上你可以初始化緩存標籤和數據,因此它的緩存內存。

如果你初始化你的緩存在任何與內存不匹配的地方都有效,你需要將它初始化爲骯髒的,這會在線路被驅逐時支持任何CPU實際需要時觸發回寫,所以沒有任何意義。

+0

這意味着只有在處理器請求讀取/寫入之後纔會分配寫入緩存這也意味着地址請求應始終存在強制性錯失? –

+0

@ShankhadeepMukerji:是的。您沒有關於預取的信息,因爲尚未進行任何訪問。如果您想要硬編碼CPU重新啓動時使用的某個默認地址,每次重新啓動都可以節省幾個週期,但我相當確信不值得花費任何晶體管。當然,確保所有標籤開始無效是很容易的。任何數據必須以某種方式從內存中加載,無論是預取它還是在運行初始指令時是否爲強制性未命中。優化重啓幾個週期似乎瘋了似的。 –

+0

謝謝@Peter Cordes –