孫佳佳,劉財坤
(中國電子科技集團公司第四十七研究所,沈陽110032)
高速緩存單元原理及設計實現
孫佳佳,劉財坤
(中國電子科技集團公司第四十七研究所,沈陽110032)
Cache是一種容量小、速度快的存儲器陣列,位于主存和CPU內核之間,保存著最近一段時間處理器涉及到的主存塊內容。為了改善系統性能,CPU盡可能從Cache中讀取數據,減小慢速存儲器給CPU內核造成的存儲器訪問瓶頸問題的影響。
高速緩存;處理器;主存
高速緩存(Cache),位于主存儲器和CPU之間,用來提高存儲系統的性能。高速緩沖存儲器是全部用硬件來實現的,不僅對應用程序員是透明的,對系統程序員也是透明的。cache與主存儲器之間以塊(cache Line)為單位進行數據交換。當CPU讀取數據或者指令時,同時將讀取到的數據或者指令保存到一個cache塊中。這樣當CPU第二次需要讀取相同的數據或指令時,可以從相應的Cache塊中得到相應的數據或指令。因為cache的速度遠遠大于主存儲器的速度,因此系統整體性能就得到很大提高。

圖1 帶cache的系統
在cache存儲系統中,把cache和主存儲器都劃分成相同大小的塊。因此,主存地址可以由塊號B和塊內地址W兩部分組成。同樣,cache的地址也可以由塊號B和塊內地址W組成。當CPU要訪問cache時,CPU送來主存地址,放到主存地址寄存器中。通過地址變換部件把主存地址中的塊號B變換成cache的塊號B,并放到cache地址寄存器中。同時將主存地址中的塊內地址W直接作為cache的塊內地址W裝入到cache地址寄存器中。如果變換成功(稱為cache命中),就用得到的cache地址去訪問cache,從cache中取出數據送到CPU中。如果變換不成功,則產生cache失效信息,并且用主存地址訪問主存儲器。從主存儲器中讀出一個字送往CPU,同時把包含被訪問字在內的一整塊都從主存儲器讀出來,裝入到cache中去。這時,如果cache已經滿了,則要采用某種cache替換策略把不常用的塊先調出到主存儲中相應的塊中,以便騰出空間來存放新調入的塊。由于程序具有局部性特點,每次塊失效時都把一塊(由多個字組成)調入到cache中,能夠提高cache的命中率。圖2為cache工作原理圖。

圖2 cache工作原理
3.1 地址映像方式設計
Cache一般多采用組相聯映像設計方式。在組相聯的地址映像和變換方式中,把主存和cache按同樣大小劃分成組(set),每一個組都由相同的塊數組成。由于主存儲器的容量比cache的容量大得多,因此,主存的組數要比cache的組數多。從主存組到cache組之間采用直接映像方式。在主存中的一組與cache中的一組之間建立了直接映像關系之后,在兩個對應的組內部采用全相聯映像方式。
3.2 替換算法設計
在把主存地址變換成cache地址的過程中,如果發現cache塊失效,則需要從主存中調入一個新塊到cache中。而來自主存中的這個新塊往往可以裝入到cache的多個塊中。當可以裝入這個新塊的幾個cache塊都已經裝滿時,就要使用cache替換算法,從那些塊中找出一個不常用的塊,把它調回到主存中原來存放它的那個地方,騰出一個塊存放從主存中調來的新塊。替換算法一般有兩種:隨機替換算法和輪轉法。
隨機替換算法通過一個偽隨機數發生器產生一個偽隨機數,用新塊將編號為該偽隨機數的cache塊替換掉。這種算法很簡單,易于實現。但是它沒有考慮程序的局部性特點,也沒有利用歷史上的塊地址流分布情況,因而效果較差。同時這種算法不易預測最壞情況下cache的性能。
輪轉法維護一個邏輯計數器,利用該計數器依次選擇將要被替換出去的cache塊。這種算法容易預測最壞情況下cache的性能。但它有一個明顯缺點,在程序發生很小變化時,可能造成cache平均性能急劇變化。
3.3 結構設計
Cache有兩個重要組成部分:Cache控制器和Cache存儲器。Cache存儲器是一個專用存儲器陣列,它由3部分組成:目錄存儲段、狀態信息段和數據項段,其訪問單元稱為Cache行,每一個Cache行都由這3部分組成。
Cache必須知道Cache存儲器中每個Cache行所對應于每個主存中的位置,Cache使用目錄存儲段來記錄每個Cache行是由主存的什么地方拷貝得來。該目錄項就是Cache標簽(tag)。同時,Cache存儲器必須存儲來自主存的信息,這些信息被存放在數據項段里。在Cache存儲器里還有記錄狀態信息的狀態位,比較常見的狀態位是有效位(valid)和臟位(dirty)。有效位用來標記當前的Cache行是活動的,即有效的;臟位用來標記Cache行中所含的內容與主存中相應的內容是否一致。Cache結構如圖3所示。

圖3 Cache的結構
圖4為以8Kb大小為例,每路cache有2Kb大小,每塊(Line)cache有8字大小,所以每片cache的塊(Line)數為64Cache。組相聯Cache存儲器的一般結構設計如圖4所示。
Cache控制器是完全由硬件實現的,將主存中的數據或者代碼自動拷貝到Cache存儲器中,這個過程自動完成,對應用軟件完全透明。
首先,讀寫存儲器的請求在被傳送到存儲器控制器之前,會被Cache控制器截獲,Cache控制器將該請求的地址信息分為3部分:標簽域、組索引域和數據索引域,控制器通過組索引域在Cache存儲器中確定可能包含所要求代碼或數據的Cache行位置,Cache行中還包含標簽和狀態位,Cache控制器就是通過他們來確定數據的實際存儲位置。
接下來,控制器檢查有效位,以確定尋址到的Cache行是否有效,并且將請求地址的標簽域值與Cache行的標簽域進行比較,如果Cache行當前有效,并且標簽域的比較結果相等,則Cache命中,否則Cache失效。在Cache失效的情況下,控制器從主存中拷貝整個Cache行到Cache存儲器中,為CPU提供相應的代碼或數據。Cache控制器的結構設計大致如圖5所示。

圖4 Cache存儲器組相聯的一般結構

圖5 Cache控制器的一般結構
對于功能驗證,采用的驗證平臺為能夠組成的最小系統,連接CPU、Flash存儲器、PSRAM存儲器和LCD等部件。驗證過程是在復位之后進入工作狀態,將Flash中的程序搬運到PSRAM中,然后執行PSRAM中的程序。在程序運行過程中,通過開關Cache來驗證Cache在系統中起到的作用。可以看到,在打開Cache之后,程序的運行速度明顯加快。圖6為驗證平臺結構圖。

圖6 驗證平臺結構框圖
通過仿真驗證,實現了cache的功能,結構合理。文中的設計思想,對帶有cache的嵌入式CPU的設計,具有非常大的實用價值。
[1]Steve Furber.ARM SoC體系結構[M].田澤,于敦山,盛世敏,譯.北京:北京航空航天大學出版社,2002.
[2]杜春雷,編著.ARM體系結構與編程[M].北京:清華大學出版社,2003.
Theory and Im plementation of Design on Cache
SUN Jia-jia,LIU Cai-kun
(The 47th Research Institute of China Electronics Technology Group Corporation,Shenyang 110032,China)
The cache,as amemory array with low capacity and high speed,is located between the main memory and CPU,which storages the latest contents of the main memory block processed by the processor.For improving the performance of storage system,CPU reads data or instructions from the corresponding Cache block to decrease the effect caused by the low speed of themain memory.
Cache;CPU;Main memory
10.3969/j.issn.1002-2279.2014.03.003
TN4
:B
:1002-2279(2014)03-0008-03
孫佳佳(1980-),女,遼寧沈陽人,工程師,主研方向:集成電路設計。
2013-12-27