連漢麗, 陳亞南, 焦繼業(yè), 雷水艷
(1.西安郵電大學(xué) 理學(xué)院, 陜西 西安 710121; 2.西安郵電大學(xué) 電子工程學(xué)院, 陜西 西安 710121)
近年來(lái),隨“智能社會(huì)”相關(guān)技術(shù)發(fā)展需求,微控制器倍受關(guān)注[1-2]。穿戴類(lèi)、汽車(chē)類(lèi)等消費(fèi)類(lèi)電子產(chǎn)品需要微控制器以微小電量長(zhǎng)時(shí)間運(yùn)作,因此,降低微控制器功耗十分必要。嵌入式Flash(eFlash)是一種和傳統(tǒng)CMOS工藝相兼容,內(nèi)嵌于芯片內(nèi)部的非易失性存儲(chǔ)器[3]。eFlash以低成本、高安全性等特點(diǎn),在微控制器中得以廣泛應(yīng)用。然而,F(xiàn)lash讀取會(huì)產(chǎn)生較大功耗,嚴(yán)重影響產(chǎn)品的續(xù)航能力。針對(duì)該問(wèn)題,在Flash控制器中引入Cache機(jī)制有助于降低功耗。此外,Cache復(fù)用了控制器內(nèi)部邏輯,節(jié)約資源的同時(shí)便于工具綜合優(yōu)化。
目前,通過(guò)優(yōu)化Cache降低嵌入式微處理器功耗的方法較多,如用位寬較小的標(biāo)志編碼存儲(chǔ)器取代傳統(tǒng)的標(biāo)志編碼存儲(chǔ)器[4],減小Cache的面積,從而降低每次訪問(wèn)指令Cache的功耗;結(jié)合分支預(yù)測(cè)技術(shù)與Cache預(yù)訪問(wèn)技術(shù)來(lái)降低功耗[5-6];采用動(dòng)態(tài)可重構(gòu)技術(shù)降低功耗[7-8];通過(guò)使本地?cái)?shù)據(jù)不參與Cache一致性過(guò)程來(lái)提高訪問(wèn)Cache效率,降低功耗[9]。
本文探討了一種基于Cache機(jī)制的低功耗Flash控制器設(shè)計(jì),在eFlash控制器中引入Cache機(jī)制,采用控制變量法,詳細(xì)分析了Cache命中率、微控制器功耗與Cache容量、關(guān)聯(lián)度、行長(zhǎng)映射之間的關(guān)系。
Flash控制器的整體架構(gòu)如圖1所示,采用哈佛結(jié)構(gòu)的處理器通過(guò)AHB-lite接口將需要的地址信息傳到Cache中,其中Clocks和Reset模塊為Cache提供異步時(shí)鐘和復(fù)位信號(hào),Reset有效時(shí),Cache復(fù)位,變?yōu)槌跏贾?;通過(guò)Req Ack模塊產(chǎn)生請(qǐng)求和應(yīng)答信號(hào),Req信號(hào)置1,說(shuō)明CPU對(duì)Cache發(fā)出數(shù)據(jù)請(qǐng)求信號(hào);Ack信號(hào)置1,表明Cache命中,且數(shù)據(jù)準(zhǔn)備發(fā)出;經(jīng)過(guò)Statistics模塊,將Cache的命中和不命中信息反饋給CPU;Tag SRAM和Cache SRAM模塊為存儲(chǔ)Tag信息和Cache數(shù)據(jù)的存儲(chǔ)器;最后通過(guò)AHB-lite接口將Cache和Flash控制器連接。
圖1 Flash 控制器整體架構(gòu)圖
Cache工作流程圖如圖2所示,Code Bus發(fā)起讀操作,根據(jù)Code Bus地址Index段選中某一組,然后將該組所有路的Tag與Code Bus的Tag段進(jìn)行匹配,確定Cache命中或缺失。當(dāng)命中某路,用地址Offset段選通數(shù)據(jù)中的某個(gè)32位數(shù)據(jù)輸出。如果均未命中,則掛起總線(xiàn),進(jìn)行Flash讀操作,讀取的數(shù)據(jù)按替換算法寫(xiě)入某路輸出。
圖2 Cache工作流程圖
內(nèi)嵌Cache命中率采用EEMBC Coremark算法[10],運(yùn)用控制變量的方法,即改變?nèi)萘俊⑿虚L(zhǎng)、關(guān)聯(lián)度三個(gè)變量中一個(gè)變量其余變量參數(shù)不變的方法,對(duì)不同容量、不同關(guān)聯(lián)度、不同行長(zhǎng)進(jìn)行分析。Cache命中率與容量、關(guān)聯(lián)度、行長(zhǎng)的關(guān)系如圖3所示。
圖3 Cache命中率與容量、關(guān)聯(lián)度及行長(zhǎng)的關(guān)系
當(dāng)關(guān)聯(lián)度和行長(zhǎng)不變時(shí),Cache命中率隨著其容量的增大而提高。當(dāng)容量小于1024字節(jié)時(shí)命中率隨容量增大大幅提高,當(dāng)容量大于1024字節(jié)時(shí)命中率增長(zhǎng)幅度變緩。固定關(guān)聯(lián)度的大小,改變行長(zhǎng),當(dāng)容量小于1024字節(jié)時(shí),行長(zhǎng)較大的Cache命中率更高;當(dāng)Cache容量大于1024字節(jié)時(shí),行長(zhǎng)較小的Cache具有較高的命中率。行長(zhǎng)不變,關(guān)聯(lián)度越高,Cache命中率也越高。圖3表明Cache容量為1024字節(jié)時(shí),關(guān)聯(lián)度和行長(zhǎng)的變化對(duì)命中率影響并不明顯,且此時(shí)具備較高的命中率??紤]到嵌入式應(yīng)用程序的循環(huán)體大多介于200字節(jié)至800字節(jié)之間,根據(jù)程序局部性原則[11-12],當(dāng)其他參數(shù)不變,Cache容量可裝載程序最大循環(huán)體時(shí),Cache效率最高,確定內(nèi)嵌Cache容量為1024字節(jié)。
設(shè)計(jì)基于Cortex-M0架構(gòu),引入Cache機(jī)制,借助Synopsys公司的Design Compiler工具完成對(duì)設(shè)計(jì)的邏輯綜合,得到電路面積,運(yùn)用Power Compiler工具分析Tag和Cache功耗,估算出整體的功耗。
選擇Cache容量為1024字節(jié),F(xiàn)lash使用率為30%、50%、70%時(shí)測(cè)試Flash功耗和總體功耗,結(jié)果如圖4所示。圖4(a)為Flash功耗隨使用率變化的關(guān)系圖,圖4(b)為預(yù)估的總體功耗與Flash使用率的關(guān)系圖。由圖4(a)可知,F(xiàn)lash功耗隨著其使用率的增加而增長(zhǎng),尤其當(dāng)使用率超過(guò)50%,功耗急劇增長(zhǎng)。不改變Flash的使用率,行長(zhǎng)不變,關(guān)聯(lián)度增加,功耗降低;關(guān)聯(lián)度不變,行長(zhǎng)增加,功耗降低。與未引進(jìn)Cache機(jī)制相比,F(xiàn)lash功耗大幅度降低。由圖4(b)可知,加入Cache機(jī)制的微控制器總功耗大幅降低,特別是在Flash使用率為50%以后,降幅更為明顯,并且行長(zhǎng)、關(guān)聯(lián)度的變化對(duì)總功耗的影響不大。由圖4(a)、4(b)可知,在相同F(xiàn)lash利用率情況下無(wú)引入Cache機(jī)制的Flash功耗和總功耗都遠(yuǎn)高于引入Cache后的功耗,因?yàn)橐隒ache后,讀Flash次數(shù)降低,雖然增加了Cache和Tag功耗,但每次取指令的功耗降低,所以總功耗也降低。
(a) Flash功耗
(b) 預(yù)估的總體功耗
引入Cache機(jī)制后,系統(tǒng)增加了Cache和Tag功耗。Tag功耗與關(guān)聯(lián)度、行長(zhǎng)的關(guān)系如表1表示。對(duì)于Tag存儲(chǔ)器來(lái)說(shuō),當(dāng)Cache行長(zhǎng)和關(guān)聯(lián)度增加,功耗也會(huì)增加,因?yàn)樵赥ag存儲(chǔ)器字節(jié)寬度增加時(shí),控制回路變得非常復(fù)雜。對(duì)于Cache來(lái)說(shuō),雖然每路4字的Cache字節(jié)寬度要大于每路1字的字節(jié)寬度,但是訪問(wèn)每路4字的Cache功耗并沒(méi)有比訪問(wèn)每路1字Cache的功耗增加很多。結(jié)合實(shí)際,關(guān)聯(lián)度增加,控制回路變得復(fù)雜,導(dǎo)致電路面積增加,功耗變大;行長(zhǎng)增大,每次讀取數(shù)據(jù)位寬變大,效率變高,然而Cache功耗并沒(méi)有明顯變化,說(shuō)明內(nèi)嵌Cache選每路4字/1路比選擇每路4字/4路功耗低,且內(nèi)部結(jié)構(gòu)簡(jiǎn)單。
表1 Tag功耗與關(guān)聯(lián)度、行長(zhǎng)關(guān)系表
總功耗與Cache容量、關(guān)聯(lián)度、行長(zhǎng)關(guān)系如圖5所示??偣碾S著Cache容量增加不斷降低,當(dāng)容量大于1024字節(jié)后,下降幅度趨于平緩。Cache容量為128字節(jié)時(shí),每路1字/1路的Cache功耗比不引進(jìn)Cache機(jī)制的功耗高,這是因?yàn)镃ache命中率非常低導(dǎo)致功耗削減非常小,反而增加了Cache和Tag功耗。此外,相比于低容量Cache(512字節(jié)或更低),每路4字Cache降低功耗的效果更為明顯。然而當(dāng)Cache容量大于1024字節(jié)時(shí),每路1字Cache在削減功耗上更為有效。
圖5 總功耗與Cache容量、關(guān)聯(lián)度及行長(zhǎng)關(guān)系
綜上所述,Cache容量為1024字節(jié)時(shí),隨著Flash使用率的增加,Cache降低功耗的效果越明顯,總功耗優(yōu)化效果越明顯,并且Cache關(guān)聯(lián)度、行長(zhǎng)的變化對(duì)Cache功耗的影響并不大。所以,內(nèi)嵌Cache容量選擇為1024字節(jié)。關(guān)聯(lián)度增加,控制回路變得復(fù)雜,導(dǎo)致功耗增大;行長(zhǎng)增大,每次讀取數(shù)據(jù)位寬變大,效率變高,所以關(guān)聯(lián)度選擇1路,行長(zhǎng)選擇4字。
設(shè)計(jì)了一種基于Cache機(jī)制的Flash控制器,內(nèi)嵌Cache設(shè)計(jì)以“容量”、“關(guān)聯(lián)度”、“行長(zhǎng)”為參數(shù),運(yùn)用控制變量的方法,研究了Cache的命中率、Flash功耗和微控制器功耗與三個(gè)參數(shù)的變化關(guān)系。研究結(jié)果表明,容量選擇1024字節(jié)、關(guān)聯(lián)度和行長(zhǎng)選擇4字/1路模式,Cache具有較高命中率,微控制器功耗的優(yōu)化效果顯著。與Cache和控制器分離的設(shè)計(jì)相比,內(nèi)嵌Cache設(shè)計(jì)的結(jié)構(gòu)更加緊湊,利于綜合工具優(yōu)化。