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