屈凌翔,袁 瀟,王 澧
(中國(guó)電子科技集團(tuán)公司第58研究所,江蘇 無錫 214035)
近年來,DSP處理器發(fā)展速度極快,存儲(chǔ)器系統(tǒng)的發(fā)展也不慢,但存儲(chǔ)器主要在存儲(chǔ)空間上提升,其存取速度的提高有限。例如主存儲(chǔ)器,其存儲(chǔ)空間從最早的KB數(shù)量級(jí)提高到現(xiàn)在的GB數(shù)量級(jí),基本三年就會(huì)更新一代,但是主存的訪問速度這方面的性能每年只有7%的提升[1]。這就導(dǎo)致中央處理器處理能力的提升速度遠(yuǎn)遠(yuǎn)高于存儲(chǔ)器存取性能的提升速度,兩者之間的差距越來越大。如今存儲(chǔ)器已成為制約系統(tǒng)性能的主要瓶頸,必須提高存儲(chǔ)器的效率才能更有效地提高系統(tǒng)的整體性能。
因此,Cache應(yīng)運(yùn)而生。Cache介于中央處理器和主存之間,其存取所需時(shí)間極少,只有0.25 ns到0.5 ns,大概是主存存取時(shí)間的1%[2]。Cache的出現(xiàn)有效地解決了主存和處理器速度不匹配的難題。
在較短時(shí)間間隔內(nèi),由于程序而產(chǎn)生的地址通常集中在存儲(chǔ)地址空間很小的范圍內(nèi)。這種對(duì)局部范圍的地址頻繁訪問而對(duì)該范圍以外的地址訪問極少的現(xiàn)象,稱之為程序訪問的局部性。
由于這種時(shí)間和空間的局部性[3],可以在主存和處理器寄存器之間放置一個(gè)小容量的高速存儲(chǔ)器,將最近一段時(shí)間需要的指令或數(shù)據(jù)放入其中,供處理器快速調(diào)用。這個(gè)介于主存和處理器之間的小容量高速存儲(chǔ)空間我們稱為Cache(高速緩沖處理器)。
Cache主要由Cache Tag、Cache存儲(chǔ)體、Cache控制模塊組成。Cache Tag主要用來記錄Cache存儲(chǔ)體中數(shù)據(jù)的位置和判斷Cache內(nèi)數(shù)據(jù)是否命中;Cache存儲(chǔ)體主要用來存儲(chǔ)片外數(shù)據(jù),方便處理器直接調(diào)用;而Cache控制模塊則控制整個(gè)Cache的具體工作,它決定了Cache的工作效率。
本文設(shè)計(jì)的數(shù)據(jù)Cache根據(jù)具體功能實(shí)現(xiàn)分為了四個(gè)模塊:Cache控制模塊、Cache數(shù)據(jù)通路模塊、Cache Tag模塊、Line Buffer模塊。
圖1 Cache架構(gòu)框圖
Cache控制器是數(shù)據(jù)Cache的主控制模塊,主要用來產(chǎn)生訪存控制信號(hào)來控制對(duì)DMEM的訪問,生成并發(fā)送給處理器異常、陷阱、訪存完成等應(yīng)答信號(hào),以及數(shù)據(jù)Cache和總線之間交互的信號(hào),控制整個(gè)Cache的工作流程,確保各個(gè)情況下Cache都能工作或進(jìn)入陷阱調(diào)試。Cache數(shù)據(jù)通路模塊是傳輸數(shù)據(jù)Cache的數(shù)據(jù)信息的路徑,表明處理器、DMEM、總線之間的數(shù)據(jù)流方向,以及不同類型數(shù)據(jù)間的轉(zhuǎn)換等。Cache標(biāo)簽為Dcache的標(biāo)簽存儲(chǔ)體,與Cache存儲(chǔ)體的每個(gè)Cache Line一一對(duì)應(yīng),對(duì)Cache是否命中進(jìn)行判斷,并對(duì)Dcache的特殊有效位進(jìn)行維護(hù)等。Line Buffer為數(shù)據(jù)Cache中處理器和總線直接的緩存體,它的作用是作為重裝的流Buffer,進(jìn)行數(shù)據(jù)重裝的工作,用以提高Cache工作效率,減少處理器等待時(shí)間,降低功耗。
數(shù)據(jù)Cache主要完成處理器對(duì)內(nèi)部DMEM的讀寫訪存操作,具體的操作包含處理器對(duì)Dcache的讀寫、Dcache缺失時(shí)進(jìn)行的重裝和寫回、以及總線對(duì)DMEM的讀和寫。主要有處理器的讀數(shù)據(jù)通路、處理器的寫數(shù)據(jù)通路、Dcache的寫回?cái)?shù)據(jù)通路、Dcache的重裝數(shù)據(jù)通路,通路之間相互連通。
而數(shù)據(jù)Cache根據(jù)數(shù)據(jù)通路的狀態(tài)選擇數(shù)據(jù):選擇RAM和AHB送往處理器的數(shù)據(jù),或把組合起來的數(shù)據(jù)送往內(nèi)部其他模塊進(jìn)行轉(zhuǎn)換對(duì)齊等操作。數(shù)據(jù)Cache與外部主存之間,有存儲(chǔ)緩存隊(duì)列信號(hào),其作用是通過字節(jié)操作拼接成半字,進(jìn)行數(shù)據(jù)的移位對(duì)齊調(diào)整,產(chǎn)生RAM0到RAM3相關(guān)的存儲(chǔ)信號(hào)。
寫入RAM的數(shù)據(jù)首先會(huì)被放入隊(duì)列queue中,若隊(duì)列中已有數(shù)據(jù),則替換已有數(shù)據(jù)。當(dāng)前實(shí)際寫入隊(duì)列的數(shù)據(jù)實(shí)際上是其最頂層的那個(gè)數(shù)據(jù)。
圖2 queue模塊框圖
本數(shù)據(jù)Cache配置大小最大為4 kB,一共有128個(gè)Cache Line,每個(gè)Line有256位,因此,每個(gè)Tag中的Index需要7位,對(duì)應(yīng)每個(gè)Cache Line中的128個(gè)Line。Tag與數(shù)據(jù)Cache的Cache Line相對(duì)應(yīng),也是128行,每行一共46位,其中低44位是由兩路每路22位的Tag組成的,而高兩位分別是兩路Tag的有效位,用來判斷哪路Cache Line有效。
數(shù)據(jù)Cache Tag主要進(jìn)行判定Cache是否命中,從而產(chǎn)生命中信號(hào)。為了加快Tag的比較速度,Cache Tag采用的是并行組織結(jié)構(gòu)。其具體工作流程詳見數(shù)據(jù)Cache命中邏輯流程設(shè)計(jì)部分。
Line Buffer是數(shù)據(jù)Cache中一塊極其重要的組成部分,它是數(shù)據(jù)通路的一部分,在系統(tǒng)Dcache配置有效時(shí),Line Buffer起到數(shù)據(jù)暫存等輔助作用,相當(dāng)于一個(gè)流Buffer,當(dāng)Dcache未進(jìn)行配置時(shí),Line Buffer則就默認(rèn)成為一級(jí)Nano Cache。當(dāng)Line Buffer作為Streaming Buffer使用時(shí),主要作用是加快數(shù)據(jù)Cache向處理器輸送數(shù)據(jù)的速度。若出現(xiàn)重裝操作,處理器會(huì)把總線上的數(shù)據(jù)分別送至Dcache和Line Buffer,在Line Buffer中的數(shù)據(jù)會(huì)進(jìn)行數(shù)據(jù)對(duì)齊操作并被送至處理器,而不需要等到數(shù)據(jù)進(jìn)入Dcache后再送入處理器,減少了處理器等待時(shí)間,提高了整個(gè)系統(tǒng)的運(yùn)行效率。當(dāng)Dcache未配置時(shí),Line Buffer就作為最基礎(chǔ)的一級(jí)Cache使用。
Line Buffer存儲(chǔ)的數(shù)據(jù)有兩種,一種是重裝操作時(shí)總線送來的AHB數(shù)據(jù),Line Buffer作為Buffer和Nano Cache時(shí)都有;另一種是Line Buffer作為Nano Cache時(shí),CPU送來的存儲(chǔ)數(shù)據(jù)。讀出Line Buffer的數(shù)據(jù)也有兩種,一種是作為Buffer或Nano Cache時(shí)送往處理器的讀出數(shù)據(jù);另一種是作為Nano Cache時(shí)寫回的數(shù)據(jù)。
圖3 數(shù)據(jù)Cache Tag組織結(jié)構(gòu)圖
圖4 取址信號(hào)、數(shù)據(jù)Cache Tag和Cache RAM的組織形式
Line Buffer送往處理器的數(shù)據(jù)需要進(jìn)行對(duì)齊操作,將128位的輸出結(jié)果拆分組合為256位數(shù)據(jù),最終選取出64位送往中央處理器。
數(shù)據(jù)Cache主要實(shí)現(xiàn)處理器對(duì)外部數(shù)據(jù)主存的讀寫操作,而Cache控制模塊掌控著處理器讀寫操作的具體執(zhí)行。通過其中的Cache控制模塊進(jìn)行讀寫操作的具體控制,其主要的控制方面有Cache命中的控制、Cache重裝和寫回的控制以及總線訪問的控制。并且根據(jù)讀寫操作的完成情況生成數(shù)據(jù)Cache對(duì)處理器的反饋信號(hào)。
數(shù)據(jù)Cache命中的控制通過生成Cache命中信號(hào)的方式來實(shí)現(xiàn),其中Dcache的命中信號(hào)在Cache Tag模塊中產(chǎn)生,Line Buffer的命中信號(hào)在數(shù)據(jù)Cache控制模塊中產(chǎn)生。當(dāng)系統(tǒng)獲得Cache命中信號(hào)后,若Cache命中,則依照命中信息產(chǎn)生訪問Cache或Line Buffer的控制信息,選擇正確的數(shù)據(jù)通路;若出現(xiàn)Cache缺失,則會(huì)訪問總線,進(jìn)行重裝的操作。Cache的重裝和寫回操作分別由兩個(gè)不同的狀態(tài)機(jī)實(shí)現(xiàn),而對(duì)于總線訪問的控制,則是依據(jù)總線協(xié)議生成的相關(guān)信號(hào),由總線相關(guān)的狀態(tài)機(jī)控制實(shí)現(xiàn)。在Cache控制模塊中,系統(tǒng)根據(jù)各個(gè)狀態(tài)機(jī)的當(dāng)前狀態(tài),生成模塊相應(yīng)的控制信號(hào)。
在數(shù)據(jù)Cache產(chǎn)生命中的情況中,數(shù)據(jù)Cache首先會(huì)在控制模塊中確認(rèn)Cache Line中的數(shù)據(jù)是否有效,如果有效,那么則將Cache Tag與處理器發(fā)出的取址信號(hào)中的Tag段進(jìn)行對(duì)比。在這過程中,Cache控制模塊會(huì)做以下幾件事情,檢查Cache是否處于有效狀態(tài),另外Cache Line中數(shù)據(jù)是否有效。
如圖5所示,處理器正在進(jìn)行對(duì)外部存儲(chǔ)器的訪問操作。該情況下Cache產(chǎn)生了命中。仿真得出,從Cache命中到將數(shù)據(jù)發(fā)送給處理器,中間只需要一個(gè)周期,極大提高了系統(tǒng)效率。
Cache缺失一般會(huì)在兩種情況下產(chǎn)生,一種是當(dāng)前的Cache Line中數(shù)據(jù)無效;另一種是取址信號(hào)中的Tag值和兩路Cache Tag都不匹配,這兩種情況下系統(tǒng)會(huì)認(rèn)為Cache產(chǎn)生缺失。圖6所示為仿真過程中處理器第一次對(duì)外部主存進(jìn)行讀取數(shù)據(jù)時(shí)一定會(huì)產(chǎn)生的強(qiáng)制缺失。
圖5 Cache命中仿真圖
圖6 Cache強(qiáng)制缺失仿真圖
還有一種缺失是Cache Line數(shù)據(jù)無效的情況,如圖7。同時(shí),仿真測(cè)試發(fā)現(xiàn),從Cache發(fā)生缺失到重裝完成,將數(shù)據(jù)發(fā)送到處理器一共花了19個(gè)周期,滿足不超過20個(gè)周期的設(shè)計(jì)要求。
在Cache發(fā)生缺失的時(shí)候,會(huì)同時(shí)啟動(dòng)重裝操作。如圖8所示,此時(shí)處理器在向數(shù)據(jù)Cache讀取數(shù)據(jù)的時(shí)候,Cache發(fā)生了缺失。此時(shí)Line Buffer中請(qǐng)求信號(hào)收到請(qǐng)求,開始工作。在重裝過程中,Line Buffer的工作狀態(tài)為:首先判定Line Buffer數(shù)據(jù)是否有效,然后判定兩路Line Buffer輸入數(shù)據(jù)哪路有效,需要被發(fā)送給處理器,最后將需要的數(shù)據(jù)輸入CPU。
本設(shè)計(jì)中,綜合時(shí)使用的E D A工具是SYNOPSYS公司的Design Compiler。本綜合所使用的工藝庫是TSMC的65 nm低功耗工藝庫。本設(shè)計(jì)中Cache的工作頻率設(shè)定為500 MHz。綜合后最常路徑延時(shí)為1.49 ns,滿足了約束條件。
圖7 數(shù)據(jù)無效缺失仿真圖
圖8 重裝操作仿真圖
表1 綜合結(jié)果
表2 功耗分析表
表2所示為125 ℃下、電壓為0.9 V時(shí)的環(huán)境下,DSP芯片運(yùn)行幾種常用程序時(shí)的功耗分析。從表中看出,本設(shè)計(jì)中DSP處理器運(yùn)行這些程序,功耗都在250 mW以內(nèi),遠(yuǎn)低于峰值功耗750 mW。DSP整體功耗保持在0.5 mW/MIPS以內(nèi)。
利用VCS軟件對(duì)數(shù)據(jù)Cache完成功能仿真,并通過Design Complier軟件進(jìn)行邏輯綜合,使得最長(zhǎng)路徑延時(shí)降低到1.49 ns;并通過基準(zhǔn)程序測(cè)試,通過功耗分析得出,本設(shè)計(jì)數(shù)據(jù)Cache滿足項(xiàng)目低功耗需要。
[1] Petrov P, Orailoglu A. Low-power Branch Target Buffer for Application-Speci fi c Embedded Processors [J]. IEEE Proceedings-Computers and Digital Techniques, 2005,152(4):482-488.
[2] Patterson D A, Hennessy J L. 計(jì)算機(jī)組成與設(shè)計(jì)-硬件與軟件接口[M]. 北京:機(jī)械工業(yè)出版社,2008.
[3] Hennessy J L, Patterson D A. 計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)-量化研究方法[M]. 北京:電子工業(yè)出版社,2004.