摘要:針對嵌入式處理器微內核的結構特點,結合32位微處理器“龍騰C1”,提出了一種微內核的低功耗設計方法#65377;在體系結構層次上,分別從微操作ROM#65380;微堆棧和微操作編碼幾個不同角度出發,對嵌入式處理器的微內核進行了功耗優化設計#65377;在幾乎不影響速度和面積的前提下,微內核的功耗有19%的降低#65377;
關鍵詞:微內核;微操作;微堆棧;低功耗
中圖分類號:TP368.1文獻標志碼:A
文章編號:1001-3695(2007)04-0265-03
0引言
嵌入式處理器的應用已日趨普及,而在它眾多的應用領域中有不少地方是對嵌入式處理器的功率消耗有嚴格要求的#65377;許多嵌入式系統,或因為電池可供給的電能有限,或因為長期連續工作積累的電能消耗不菲,減少系統的電能消耗成為系統的重要性能指標之一#65377;而微內核是嵌入式處理器的核心部件,因此嵌入式處理器的微內核的低功耗設計是系統綠色化設計的重要環節#65377;許多嵌入式處理器的微內核都是基于微操作來完成機器指令的執行,這意味著增加一條機器指令只需改變譯碼電路和增加一段新的微操作即可,具有規整性#65380;靈活性#65380;可維護性等一系列優點#65377;
數字系統的低功耗設計方法可以分為若干層次#65377;按照抽象層次的不同,可以分為系統級(System)#65380;結構級(Architecture)#65380;寄存器傳輸級(Register Transfer)#65380;邏輯門級(Gate/Logic)#65380;版圖級(Layout)和電路級(Circuit)#65377;每個級別可以達到的低功耗設計效果也完全不同,在體系結構級可降低電路40%~70%的功耗,而在電路級功耗只能降低5%~10%,所以在體系結構級對微內核進行低功耗設計更有優勢#65377;
“龍騰C1”是西北工業大學航空微電子中心自行研究設計的32位嵌入式處理器,目前,已經采用0.18μmCMOS工藝流片成功#65377;
1微內核的結構設計
微內核的基本思想就是把操作控制信號編成所謂的微操作,存放到一個只讀存儲器里,依次讀出這些微操作,從而完成整個處理器所需要的各種控制信號,使相應的部件執行所規定的操作#65377;一個微操作一般由操作控制和順序控制兩大部分組成#65377;操作控制部分用來發出處理器中各個部件的操作控制信號;順序控制部分用來決定產生下一條微操作的地址#65377;圖1是“龍騰C1”的微內核的結構圖#65377;
微內核主要由存放微操作的微操作ROM#65380;微操作寄存器和微地址產生邏輯三部分構成#65377;微操作ROM用來存放實現全部指令系統的所有微操作,微地址寄存器決定將要訪問的下一條微操作的地址#65377;微操作寄存器用來存放由控制存儲器讀出的一條微操作信息,而微命令寄存器則保存一條微操作的操作控制字段和判別測試字段信息#65377;微地址產生轉移邏輯負責產生訪問微操作ROM的微地址#65377;“龍騰C1”處理器的微內核還加入了微操作預取邏輯,提高了微操作流水線的效率#65377;
2微操作控制器的功耗優化設計
在數字CMOS電路中,動態功耗占整個功耗的80%~90%#65377;在無法改變電壓的情況下,設計者只能通過降低電路的跳變次數和頻率來達到降低功耗的目的#65377;
在“龍騰C1”處理器微內核的設計過程中,考慮到微操作ROM和微堆棧包含大量的存儲單元,如果能減少這些存儲單元工作時的跳變次數,將大大降低功耗#65377;另外,在一段微操作中,通過合理的微操作編碼也能降低微操作寄存器的翻轉率,從而達到降低功耗的目的#65377;所以主要應該從微操作ROM#65380;微堆棧#65380;微操作編碼幾個方面來進行功耗優化設計#65377;
2.1微操作ROM的分區設計
在“龍騰C1”中由一個44 bits×8 KB的片上ROM來存放微操作#65377;每個ROM字分為兩部分:27 bits為微操作內容,剩余的17 bits中有4 bits是控制下地址轉移邏輯的工作命令字和供轉移的13 bits下地址#65377;“龍騰C1”的微操作共分為三大類,即存儲管理部件的微操作#65380;整數執行單元的微操作#65380;浮點部件類微操作#65377;微操作格式是根據數據通路的具體控制要求設計的#65377;其中存儲管理部件的微操作用于控制MMU計算存儲操作的地址及向Cache發出訪存請求,整數執行單元的微操作主要控制整數單元進行算術#65380;邏輯運算,保護測試和對各種內部寄存器的操作,浮點部件類微操作控制FPU進行運算#65377;微操作ROM工作在同步方式,輸出的微操作完全由輸入的地址決定#65377;
如果采用整塊ROM存放微操作,只讀存儲器的輸入地址將有13 bits,在每次訪問中,一個13 bits輸入8 192輸出的譯碼電路均將工作,這將會產生很大的功耗,在這里可以考慮分區訪問ROM的工作方式#65377;
根據SPEC程序的測試,整數指令有39%使用存儲器操作數,浮點指令中有72%使用存儲器操作數#65377;在整個微操作系統中,存儲管理部件的微操作所占的地址空間小于1 024,也就是整個ROM空間的12.5%,但它占了所有ROM訪問的33%左右#65377;浮點部件類微操作所占的地址空間也小于1 024,筆者設計時將微操作ROM分為八塊44 bits×1 024的分區,將存儲管理部件的微操作放在一個分區中,將浮點部件類微操作放在一個分區中,將整數執行單元的微操作放在其余六個分區中#65377;在訪存期間其他七個分區均處于完全不工作狀態,即使在整數部件執行期間,也只有一個分區處于活動狀態#65377;采用這種結構后,每個分區的地址位將下降到10 bits,可以降低分區譯碼器消耗的功耗,同時因為存儲器深度的減小,ROM中數據位線所串聯存儲單元的數目也將減小為原來的1/8,該連線的負載電容將大幅縮小,因此ROM本身的功耗也會降低#65377;將被經常訪問的微操作存放在同一個分區中,可以降低數據輸出端選擇電路選擇信號的翻轉頻率,因為這是一個44 bits的八選一電路,所以這種措施對選擇器功耗的降低還是較為有效的#65377;
13 bits地址的最高3 bits作為片選和數據輸出選擇信號,低10 bits作為段內地址#65377;這種方案通過將ROM分區降低了每次訪問時只讀存儲器的功耗,雖然前端增加了一個三八譯碼器,后端增加了44 bits的八選一電路,但電路整體的功耗還是有明顯下降的#65377;
2.2下地址轉移邏輯中微堆棧的優化設計
下地址產生邏輯是微內核的核心部分,主要用來產生下一條微操作的地址,從而決定微操作序列的執行#65377;在每個時鐘周期,它都要產生一個訪問微操作ROM的地址,因此降低這部分電路的功耗對于降低整個微內核的功耗具有重要意義#65377;微堆棧就位于下地址轉移邏輯中#65377;
微堆棧是為了實現在微操作級調用和返回設置的結構,它模擬指令系統中的堆棧結構#65377;如果當前執行的微操作是調用微操作,則將μIP寄存器中的值壓入堆棧中,實現保存下一條微操作地址#65377;如果當前指令的微操作是返回微操作,則彈棧讀出以前保存微操作地址,實現返回調用處繼續微操作執行#65377;只要電路能實現后進先出的數據結構就可以達到要求,因此可以采用以下兩種不同的實現方式:
(1)采用指針的變化來完成數據的后進先出#65377;在這種結構中需要用一個計數器作為寫入指針,使用寫指針減1作為讀指針,空滿信號利用讀寫指針產生,構成堆棧的寄存器組無需進行移位操作,各組寄存器之間沒有連線,但這種結構寫入時需要譯碼,讀出時需要選擇電路#65377;
(2)輸出的出口和入口均在堆棧頂端,當發生壓棧#65380;出棧操作時構成堆棧的寄存器組進行移位操作#65377;這種結構也需要一個計數器來標記堆棧的空滿狀態,它的優點在于堆棧的寫入讀出不需要多選電路#65377;
針對兩種不同的電路筆者都作了具體實驗,當采用第二種結構時,下地址轉移邏輯中堆棧所占的功耗大約占到整個下地址轉移邏輯的46%,因此降低這部分電路的功耗具有重要意義#65377;在這種固定讀寫入口的方案中,對堆棧進行的任何一次操作均會導致整個堆棧中所有的寄存器進行一次移位,并且其中的許多寄存器均會產生翻轉,這將消耗大量的功耗#65377;如果采用指針進行讀寫控制,只有進行寫操作時,才會對其中一組寄存器進行更新,實際翻轉的寄存器更少,雖然讀出的選擇電路增加了部分功耗,但總體功耗具有明顯下降#65377;所以,應該選用指針讀寫控制的微堆棧結構來進行功耗優化#65377;
2.3微操作編碼的優化設計
基于微內核的嵌入式處理器每拍都是由微操作來控制的,微操作ROM總是處在被讀取的狀態,微操作寄存器幾乎每拍都要被更新,因此合理的安排微操作編碼將有效地降低微操作寄存器和微操作總線的翻轉頻率并最終降低它們的功耗;同時合理的編碼也可以降低每次讀取微操作ROM時的功耗#65377;
如前所述,“龍騰C1”微處理器的微操作分為三大類,即存儲管理部件微操作#65380;整數部件微操作和浮點部件微操作#65377;它們的基本結構如表1所示#65377;
表1列出了所有微操作的格式,TYPE#65380;Next Address和CONTROL意義分別是當前微操作的類型#65380;下地址和控制轉移字段#65377;A和B字段表示源操作數和目的操作數,LINKO#65380;LINKB和LINKA分別為相應字段的譯碼器拼接指示位#65377;WB表示運算結果是否寫回B#65377;三類微操作的不同之處在于USERDEF字段可以根據不同類型微操作的不同控制方式來定義#65377;
只讀存儲器單元存儲信息的方式是通過在數據線與地址之間是否存在充放電通路決定的#65377;“龍騰C1”所使用微操作ROM的數據線連接在VCC上,那么所有存儲的數據缺省為1,如果設計者希望在該位存儲信息為0時,那么就需要在該數據線與地址之間存在一條放電通路,當地址線選中該地址時,數據線和地址之間存在一條通路,數據線的輸出被拉低,輸出數據為0#65377;所以,當“龍騰C1”的微操作ROM要輸出一個0時,就必然存在一次放電過程,因此在相同條件下,一條微操作中包含的0位越多,ROM在完成這次讀出操作時需要的功耗也就越大#65377;在確定“龍騰C1”的微操作編碼時,本文遵循了兩個原則來進行功耗的優化:①每條微操作中應該盡量多地包含1的個數;②在執行時,相鄰輸出的兩條微操作應該盡量保證具有較多的相同位,這樣可以降低微操作寄存器和微操作總線的翻轉頻率#65377;
在三類微操作中,整數部件類微操作和存儲管理部件類微操作被執行的頻率要高于浮點部件類微操作,因此對于TYPE字段可以規定如表2所示#65377;
根據仿真,整數部件類微操作占總微操作ROM訪問量的60%,存儲管理部件類微操作占33%,而浮點類微操作只占訪問量的7%#65377;兩類最常用的微操作占到了總訪問量的93%,而TYPE字段只有一位翻轉,這種方式很好地滿足了編碼的兩個原則#65377;
對控制轉移字段的編碼根據各種轉移方式的使用頻率來確定,同時考慮一些經常會連續執行指令之間的關系,控制轉移字段的部分編碼結果如表3所示#65377;
對操作數字段的編碼也是根據該寄存器或者內部數據端口使用頻率的高低來確定的#65377;根據X86的指令系統,寄存器AX是使用頻率最高的一個寄存器,將它編碼為1111111,另外BX#65380;CX#65380;DX#65380;AL#65380;BL#65380;FLAG#65380;IP的使用頻率也較高#65377;操作數字段部分編碼結果如表4所示#65377;
微操作的下地址字段采用分段格雷碼,也就是高3 btis的分區地址采用二進制編碼,10 bits的段內地址采用格雷碼,這樣當兩條微操作切換時,13 bits的下地址最多只有2 bits翻轉,同類微操作切換時只有1 bit翻轉#65377;
操作碼字段用來控制功能單元的工作,應按照各種操作使用頻率的高低來進行編碼#65377;對于微操作中其他的控制字段,也應按照上面兩個原則進行編碼#65377;
3優化結果
使用SYNOPSYS綜合工具DESGIN_COMPILER在0.18μmCMOS工藝庫下對優化前后的微內核設計分別進行綜合,全局電壓1.5 V#65377;優化結果如表5所示#65377;
4結束語
本文結合嵌入式處理器微內核的結構特點和“龍騰C1”處理器微內核設計,從微操作ROM#65380;微堆棧和微操作編碼三方面入手進行功耗優化設計#65377;使用綜合工具分別對優化前后設計的速度#65380;面積和功耗進行了考察#65377;結果證明經過功耗優化設計的微內核在性能基本不變的前提下比原來的設計節省了大約19%的功耗#65377;這些優化的設計方法已經在“龍騰C1”處理器中成功實現,為低功耗微內核的設計積累了經驗#65377;
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。