32位DSP兩級cache的結(jié)構(gòu)設(shè)計
關(guān)鍵詞: cache,DSP,存儲系統(tǒng).
1引言
隨著半導(dǎo)體技術(shù)的發(fā)展,DSP性能不斷提高,被廣泛應(yīng)用在控制,通信,家電等領(lǐng)域中。
DSP內(nèi)部核心部件ALU具有極高的處理速度,而外部存儲器的速度相對較低,存儲系統(tǒng)已成為制約DSP發(fā)展的一個瓶頸。本文參照計算機存儲結(jié)構(gòu),利用虛擬存儲技術(shù),對存儲系統(tǒng)的結(jié)構(gòu)進行了改進。在DSP中引入二級Cache存儲器結(jié)構(gòu),在較小的硬件開銷下提高了DSP的工作速度。結(jié)合高性能低功耗DSP cache設(shè)計這個項目,對兩級cache的結(jié)構(gòu)和算法做了探討。
2 cache總體設(shè)計
傳統(tǒng)的存儲器主要由Dram組成,它的工作速度較慢,cache存儲器主要由SRAM組成。在DSP中,存儲系統(tǒng)可分層設(shè)計,將之分為兩部分:容量較小的cache存儲器和容量較大的主存儲器,cache中存放著和主存中一致的較常用的指令與數(shù)據(jù)。DSP執(zhí)行操作時可先向速度較快
圖1 cache的結(jié)構(gòu)及互連簡圖 |
的cache取指令或數(shù)據(jù),如果不命中則再從主存取指令或數(shù)據(jù)。通過提高cache的命中率可以大大加快DSP的整體運行速度,從而緩解由存儲系統(tǒng)引起的瓶頸問題。
基于上述原理,我們設(shè)計了DSP的cache總體結(jié)構(gòu),如圖1所示。圖中設(shè)計采用了兩級cache設(shè)計,第一級cache采用分立結(jié)構(gòu),將指令cache和數(shù)據(jù)cache分開設(shè)計,這樣CPU可以對數(shù)據(jù)和指令進行平行操作,結(jié)合DSP取址,譯碼,讀數(shù),執(zhí)行的四級流水線結(jié)構(gòu),充分提高系統(tǒng)效率。二級cache采用統(tǒng)一結(jié)構(gòu),數(shù)據(jù)和指令共用一個cache,此時可以根據(jù)程序執(zhí)行的具體情況,二級cache自動平衡指令和數(shù)據(jù)間的負載,從而提高命中率。DSP若在一級cache中未找到需要的指令和數(shù)據(jù),則可在二級cache中尋找。此結(jié)構(gòu)下,一級cache找不到的數(shù)據(jù)和指令多數(shù)可在二級cache中找到,提高了整個cache系統(tǒng)的命中率。
增加一級cache的容量可提高命中率,但隨著cache容量增大,電路結(jié)構(gòu)將變得復(fù)雜,所用的芯片面積、功耗也會加大,而且cache的訪問時間也會變長,從而影響到ALU的速度。綜合考慮速度,面積,功耗等因素,我們把一級指令cache和數(shù)據(jù)cache的容量均定為4KB。
二級cache處于一級cache和主存儲器之間,訪問時間是3到4個ALU時鐘周期,其容量一般是為一級cache的4到8倍。設(shè)計中我們將二級cache的容量為定位32KB。
3 cache的映射方式與地址結(jié)構(gòu)
cache采用的映射方式通常有直接映射、關(guān)聯(lián)映射、組關(guān)聯(lián)映射三種,直接映射命中率低,容易發(fā)生抖動,關(guān)聯(lián)映射雖然命中率較高,但電路復(fù)雜,權(quán)衡電路復(fù)雜性和命中率,我們主要采用組關(guān)聯(lián)映射方法。在組關(guān)聯(lián)映射中,可將主存空間分成塊,cache空間分為組,一組包含多行,行的大小與塊的大小相等。主存中的特定塊只能映射到cache中的特定組,但可以映射到組內(nèi)的不同行。若用j表示主存的塊號,i表示cache中的組號,m表示cache的總行數(shù),當(dāng)cache分為v個組,每組k個行時,存在以下關(guān)系(見公式1、2),
此種映射方式通常稱為k路組關(guān)聯(lián)映射。利用公式(2),我們可以根據(jù)塊的物理地址計算它能映射到的組號,塊j 能被映射到相應(yīng)組中k行的任何一行中。
設(shè)計中二級cache采用4路組相聯(lián)的結(jié)構(gòu),分為共256組,每組4行,每行8個32位單元,總?cè)萘课?2KB。cache的控制邏輯將存儲器地址簡單的分為三個域:標(biāo)記域,組號和字。為了降低系統(tǒng)的功耗,采用了標(biāo)記(tag)和數(shù)據(jù)體相分離的方案。為了加快訪問速度,把cache中行號相同的塊放在一個數(shù)據(jù)體中實現(xiàn)。這樣cache就可分為4個標(biāo)記存儲器,4個數(shù)據(jù)存儲器。每個標(biāo)記存儲器可放256個標(biāo)記,每個數(shù)據(jù)存儲體有256行數(shù)據(jù)。地址的劃分如圖2,tag的結(jié)構(gòu)見圖3。
圖2 二級 cache的地址劃分 |
圖3 L2 cache tag 的組成 |
一級指令cache和數(shù)據(jù)cache采用組關(guān)聯(lián)的結(jié)構(gòu),均分為32個組,每組4行,每行含有8個32位的單元,每個容量位4KB。一級cache的組和行與二級cache的組和行大小對應(yīng),在二級cache到指令cache和數(shù)據(jù)cache間,組之間我們采用直接映射的方式,組內(nèi)用全關(guān)聯(lián)方式。這樣我們結(jié)合了組關(guān)聯(lián)的靈活與全關(guān)聯(lián)的命中率高的優(yōu)點。
和二級cache相似,也把每組塊號相同的數(shù)據(jù)放在同一個數(shù)據(jù)體中,共分為4個標(biāo)記存儲器,四個數(shù)據(jù)體存儲器。每個標(biāo)記存儲器可放32個標(biāo)記,每個數(shù)據(jù)存儲體有32行數(shù)據(jù)。對主存地址的劃分如圖4。
圖4 一級cache的地址劃分 |
tag的結(jié)構(gòu)見圖5。
圖5 一級cache tag結(jié)構(gòu)
|
其中,P位是數(shù)據(jù)存在位, M位是數(shù)據(jù)修改的標(biāo)記位,用于寫策略的實現(xiàn)。
4 寫策略及cache替換算法
寫策略通常采用寫回或?qū)懼边_,采用寫回法時,僅當(dāng)cache中的某行數(shù)據(jù)被替換時,才更新存儲器中相應(yīng)數(shù)據(jù)。采用寫直達法時,則每次寫操作都要同時更新cache和主存儲器中的數(shù)據(jù)。
所針對的DSP處于單處理器工作模式下,考慮到整個系統(tǒng)的數(shù)據(jù)處理效率,設(shè)計時我們采用寫回法更新數(shù)據(jù)。寫回法中,如果一級cache中的數(shù)據(jù)發(fā)生改變而未立即寫回L2 cache和主存儲器,或者L2 cache中的數(shù)據(jù)發(fā)生改變,未立即寫回主存儲器,那么就會造成數(shù)據(jù)不一致而導(dǎo)致錯誤。為保證數(shù)據(jù)的一致性,在駐留于cache中的某一塊被替換之前,必須考慮它是否在cache中被修改。如果沒有修改,則cache中原來的塊就可以直接被替換掉,而不需回寫;如果修改過,則意味著對cache這一行至少執(zhí)行過一次寫操作,那么在替換之前主存儲器中的數(shù)據(jù)也必須隨之做相應(yīng)修改。為此我們在cache的tag中設(shè)置了修改位M,在執(zhí)行回寫操作前我們均對修改位進行判斷,其值為1時表示數(shù)據(jù)被修改過,需回寫,為0則表示未修改,不進行回寫。
Cache的替換算法有很多種 ,為了提高命中率,在設(shè)計時采用了優(yōu)化的LRU算法:棧鏈法[6]。棧鏈法的管理規(guī)則如下:
1) 把本次訪問的塊號與棧中保存的所有塊號進行比較。如果發(fā)現(xiàn)有相等的,則cache命中,本次訪問的塊號從棧頂壓入,棧內(nèi)各單元的塊號依次往下移,直至與本次訪問的塊號相等的那個單元為止,再往下的單元直至棧底都不改變。
2)如果相聯(lián)比較沒有發(fā)現(xiàn)相等的,則cache失效。棧底單元中的塊號就是要被替換的塊號。
實現(xiàn)時采用四個存儲單元,每個單元兩位,用來保存當(dāng)前cache組的四個塊號。首先是相聯(lián)比較,以組號為地址,從四個標(biāo)記寄存器中讀取數(shù)據(jù),和地址進行比較,然后就可以產(chǎn)生命中與否的信號,以及命中時相應(yīng)的塊號。
5 如何根據(jù)地址在cache中找到所需要的數(shù)據(jù)
圖6 I cache查找數(shù)據(jù)的過程
能夠映射到cache中某一行的數(shù)據(jù)很多,那么是怎樣在cache中找到所需要的數(shù)據(jù)呢?主要是借助于標(biāo)記。以 I cache 為例,當(dāng)CPU發(fā)出讀信號時,則首先以組號PA[7:3]為地址,從I cache的四組標(biāo)記寄存器中讀取標(biāo)記,送往對應(yīng)的比較器,和地址信號PA[31:8]進行比較,如果比較相等,且存在位有效,則表示命中。HIT1表示第1組命中,依次類推。HIT1 ,HIT2,HIT3,HIT4經(jīng)過或門以后,就是總體命中與否的輸出信號。如果HIT1有效,以PA[7:0]對cache的數(shù)據(jù)體1進行尋址,讀取相應(yīng)的數(shù)據(jù)。其它情況類似。在這個過程中,可以看出,地址和數(shù)據(jù)之間的一一對應(yīng)關(guān)系。
6 數(shù)據(jù)塊傳輸
數(shù)據(jù)塊傳輸是對存儲器的一種重要操作,根據(jù)譯碼電路的層次性,知道如果只是地址的低位發(fā)生改變,譯碼電路很快就可以達到穩(wěn)定狀態(tài),選擇對應(yīng)的單元,進行讀寫。因此對數(shù)據(jù)進行整組傳輸,有利于提高傳輸?shù)男?。在該cache中,對存儲器的訪問都是定長的,如果產(chǎn)生不命中的信號,則立即產(chǎn)生8拍定長的讀寫信號。具體實現(xiàn)時,設(shè)計了一個控制塊傳輸信號的模塊。每當(dāng)產(chǎn)生不命中的信號,則把塊傳輸?shù)某跏嫉刂纷x入到該模塊的初始地址寄存器,設(shè)置相應(yīng)的傳輸單元數(shù)為8,以及對應(yīng)的cache單元的讀寫信號。在每個時鐘的上升沿,地址寄存器增1,傳輸單元個數(shù)寄存器減1,當(dāng)傳輸單元個數(shù)寄存器的數(shù)據(jù)為0時,就結(jié)束傳輸。
由于L2 cache是個單端口的存儲器,一級cache采用哈佛結(jié)構(gòu),對數(shù)據(jù)和指令同時進行操作,當(dāng)D cache和I cache失效時,都會訪問L2 cache,這樣就有可能產(chǎn)生沖突。為了解決這個問題,在塊傳輸控制的模塊中,設(shè)置了一位busy位,用來標(biāo)志總線忙狀態(tài)。當(dāng)某個請求得到響應(yīng),其余的請求只有進入等待狀態(tài)。在設(shè)計時,制定了訪問L2 cache的優(yōu)先級協(xié)議:讀指令不命中的優(yōu)先級最高,寫數(shù)據(jù)不命中的優(yōu)先級次之,讀數(shù)據(jù)不命中的優(yōu)先級最低。當(dāng)I cache和D cache同時產(chǎn)生不命中的信號時,根據(jù)優(yōu)先級協(xié)議來訪問L2 cache。
7 結(jié)束語
在命中率方面,采用兩級cache結(jié)構(gòu)及組關(guān)聯(lián)映射方法提高了cache系統(tǒng)的命中率。在數(shù)據(jù)處理效率方面,由于一級cache采用哈佛結(jié)構(gòu),指令和數(shù)據(jù)可并行操作,顯著提高了系統(tǒng)的數(shù)據(jù)處理能力。在功耗方面,采用了數(shù)據(jù)體和標(biāo)記相分離的措施,這使得只有在cache命中的情況下,才會訪問數(shù)據(jù)體,可降低系統(tǒng)的功耗。
整個設(shè)計采用自頂向下的設(shè)計流程,用Verilog語言描述整個系統(tǒng),在synopsys工具下進行仿真和綜合。在綜合的結(jié)果中,指令cache的延遲最長,為4.3ns.整個cache系統(tǒng)的等效門數(shù)約24萬個門。
作者的創(chuàng)新點:設(shè)置busy位標(biāo)志總線忙狀態(tài),并制定優(yōu)先級協(xié)議處理多信號同時訪問總線的情況,有效解決了總線的訪問沖突問題。
參考文獻:
[1] 曲文新等.“龍騰”R2微處理器cache單元的設(shè)計與實現(xiàn).計算機工程與應(yīng)用.2006.17
[2] 謝興軍等.哈佛體系結(jié)構(gòu)的cache控制器設(shè)計. 計算機工程.2004.11
[3] Hennessy J L,Patterson.D A Computer Architecture :A Quantiative Approach. 3nd,San Mateo:Morgan Kaufmann Publishers,2002
[4] 王文彬等. P2P Web Cache模型性能可行性分析.微計算機信息,2006 6-3.
[5] 吳夢潔 Cache controller的設(shè)計與研究 2004年2月
[6] 程由猛,陳書明.高性能DSP片內(nèi)二級Cache控制器設(shè)計與優(yōu)化.第八屆計算機工程與工藝全國年會,2003.4