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