張文波,苑凌嬌,譚小波,付立冬
(沈陽理工大學(xué)信息科學(xué)與工程學(xué)院,遼寧沈陽110159)
在目前的單處理器系統(tǒng)中,多線程處理通常使用軟件實現(xiàn),即需依靠運行操作系統(tǒng)完成對線程調(diào)度的管理。這種設(shè)計方法繼承了軟件解決方法的很多優(yōu)點,如線程調(diào)度機制靈活以及最大并發(fā)線程數(shù)量調(diào)整容易等,同時也存在很多不足。首先,依靠操作系統(tǒng)軟件實現(xiàn)多線程操作會占用大量處理器時間,而且操作系統(tǒng)本身管理線程的運行、線程的切換操作以及線程工作現(xiàn)場的保護均需要指令代碼來實現(xiàn),在實現(xiàn)一次線程切換操作時,需要消耗大量的時間才能完成[1],這使得處理器執(zhí)行用戶線程的效率較低;其次,現(xiàn)今的大多數(shù)處理器結(jié)構(gòu)是為單線程處理設(shè)計的,沒有多線程環(huán)境下的硬件保護機制,因而僅依靠上層操作系統(tǒng)的調(diào)度實現(xiàn)多線程的運行,會存在安全漏洞;另外,用戶對于多線程編程開發(fā),也將存在需要依賴系統(tǒng)函數(shù)等實現(xiàn)較復(fù)雜的問題[2]。
特別是軟硬件資源嚴(yán)重受限的嵌入式系統(tǒng)環(huán)境下,利用硬件設(shè)計一個嵌入式多線程調(diào)度處理器具有重要的現(xiàn)實意義,而執(zhí)行控制單元的設(shè)計對整個處理器性能的影響又是至關(guān)重要的。為此,本文重點論述了多線程調(diào)度處理器執(zhí)行控制單元的設(shè)計,該設(shè)計已經(jīng)應(yīng)用于一個通過FPGA實現(xiàn)的處理器中。
在這個處理器的流水線設(shè)計上,采用了二級流水線機制,因而在設(shè)計指令執(zhí)行節(jié)拍控制電路時需要同時考慮兩個因素:當(dāng)前指令執(zhí)行節(jié)拍的控制和流水線的控制[3-4]。
解決處理器指令執(zhí)行節(jié)拍控制的一種很好的方法是采用有限狀態(tài)機(Finite State Machine)。有限狀態(tài)機是指由寄存器和組合邏輯構(gòu)成的,能夠根據(jù)時序進行狀態(tài)轉(zhuǎn)移間的硬件時序電路,是協(xié)調(diào)相關(guān)信號完成特定操作的控制中心。有限狀態(tài)機由三個部分組成:當(dāng)前狀態(tài)(Current State,簡稱CS)、下一個狀態(tài)(Next State,簡稱NS)和輸出邏輯(Output State,簡稱OS)。在有限狀態(tài)機的設(shè)計中,通常,當(dāng)前狀態(tài)通過對一個N位觸發(fā)器進行賦值實現(xiàn),其輸入信號是下一狀態(tài)的輸出,其輸出將作為輸出邏輯的輸入;輸出邏輯是狀態(tài)機的外部輸出信號,由外部輸入和當(dāng)前狀態(tài)決定。結(jié)合有限狀態(tài)機的這些特點,為了實現(xiàn)對譯碼電路及依靠時序控制的邏輯單元的控制,有限狀態(tài)機成了最佳選擇。
為此,在設(shè)計中采用摩爾型有限狀態(tài)機,并結(jié)合VHDL語言對多線程處理器進行了描述。在此設(shè)計中,所有狀態(tài)均使用VHDL語言來實現(xiàn)。由于VHDL[5-6]語句描述的是 FPGA 芯片中的實際邏輯通路,為了獲得可綜合的、高效的VHDL狀態(tài)機描述,通常使用枚舉類數(shù)據(jù)類型定義狀態(tài)機的狀態(tài),并結(jié)合多進程方式描述狀態(tài)機的內(nèi)部邏輯,指令執(zhí)行的狀態(tài)機如圖1所示。
圖1 指令執(zhí)行的狀態(tài)機
每一個狀態(tài)的躍遷在時間上均是在處理器主時鐘脈沖的上升或下降沿處發(fā)生[7]。由于處理器的外部存儲器芯片的操作速度可能遠(yuǎn)慢于處理器的執(zhí)行速度[8],因而在該狀態(tài)機中,設(shè)有“取指令準(zhǔn)備狀態(tài)(IFdelay)”與“存儲器訪問準(zhǔn)備狀態(tài)(MEMdelay)”。
處理器在上電后首先執(zhí)行一次復(fù)位操作。復(fù)位操作結(jié)束后,處理器進入正常的執(zhí)行過程,進入取指準(zhǔn)備狀態(tài)(IFdelay),而后在主時鐘的上升沿進入取指(IF)和譯碼(DI)狀態(tài),在處理器的譯碼過程中,將會判斷所執(zhí)行的指令是否需要進行外存儲器訪問操作,如果需要訪問外存,即memos信號為“1”,狀態(tài)機的下一個狀態(tài)將會進入存儲器訪問準(zhǔn)備狀態(tài)(MEMdelay),然后在主時鐘的上升沿進入存儲器訪問狀態(tài)(MEM)。若當(dāng)前指令不包含訪問外存的需求,處理器在譯碼后將直接進入執(zhí)行操作狀態(tài)(EX)和寫回操作狀態(tài)(WB)。在EX狀態(tài)下,主要完成邏輯操作、數(shù)學(xué)運算操作、條件判斷及跳轉(zhuǎn)語句的地址運算等工作;而在WB狀態(tài)下,運算的結(jié)果被寫回處理器的通用寄存器中。
因為本文所實現(xiàn)的處理器的工作頻率為20MHz,速度遠(yuǎn)高于系統(tǒng)所使用的靜態(tài)隨機存儲器,所以在進行訪存操作如MEM和IF前需要增加一定的延時。在實現(xiàn)中,分別添加了訪存準(zhǔn)備節(jié)拍MEMdelay和IFdelay。這兩個訪存準(zhǔn)備節(jié)拍會讓處理器延遲三個晶振周期。其中,處理器執(zhí)行每條指令都要經(jīng)過一個IFdelay操作,這是因為本處理器的指令空間在片外的這個靜態(tài)存儲器中。由此可見,這種方法也在處理器的正常執(zhí)行時形成一個了瓶頸。
因而,在設(shè)計處理器的流水節(jié)拍時,除了考慮流水路徑的設(shè)計以外,還分析了如何可以更好協(xié)調(diào)處理器內(nèi)部指令的流水執(zhí)行以及訪問存儲器操作的同步問題。針對這個問題,提出了“多周期流水線設(shè)計”的流水設(shè)計模型。在傳統(tǒng)的處理器流水線設(shè)計中,通常是將取指、譯碼、執(zhí)行、寫回等每一個節(jié)拍操作定義為流水線的一級。而在實現(xiàn)過程中,考慮到以上瓶頸問題,將處理器的流水線分為兩級,每一級為四個晶振周期:第一級流水線包括取指準(zhǔn)備IFdelay和取指IF操作,第二級流水線包括譯碼DI、執(zhí)行EX和寫回WB操作。
在硬件結(jié)構(gòu)上,依據(jù)本文所實現(xiàn)的處理器只擁有一個處理器核心,它是按單位時間片(一個指令周期)依次調(diào)度多個線程的方式執(zhí)行多線程。在每一個指令周期,處理器需要按順序完成“恢復(fù)工作空間”、“執(zhí)行當(dāng)前空間中的指令”、“保護當(dāng)前的工作空間”這三個步驟。
首先,每個線程的工作空間如指針寄存器及通用寄存器組等的保護,可以通過在處理器內(nèi)部重復(fù)設(shè)置多組相同的資源,并劃分為多個資源頁實現(xiàn),如圖2中所示的GPR1、GPR2等。當(dāng)處理器需要切換線程時,處理器將會以換頁的方式對這些資源進行切換。這些資源的分頁號,則是依靠處理器內(nèi)的線程選擇器所產(chǎn)生的線程號來控制。在實現(xiàn)過程中,需要重點考慮如何連貫地將這三個操作過程在最短的時間內(nèi)順序完成。
其次,在處理器執(zhí)行過程中,某些內(nèi)部資源并非一直需要使用,例如,通用寄存器只有在處理器的EX和WB節(jié)拍里才會使用。據(jù)此,可以通過適當(dāng)排列操作順序,以及在硬件結(jié)構(gòu)上設(shè)置一些緩沖寄存器,來達(dá)到處理器中當(dāng)前線程的執(zhí)行、保護以及與下一線程工作空間的恢復(fù)操作并行執(zhí)行的目的。
圖2 硬件多線程處理器結(jié)構(gòu)框圖
本文所實現(xiàn)的處理器,每一個硬件線程都有唯一的線程號標(biāo)識,在處理器內(nèi)部,依靠這些線程號區(qū)分硬件線程。當(dāng)前執(zhí)行的線程號可以通過查詢線程控制寄存器的最高三位來獲得。
在多線程執(zhí)行時,線程的執(zhí)行順序由線程選擇器控制,它的結(jié)構(gòu)原理圖,如圖3所示。
圖3 線程選擇器結(jié)構(gòu)原理圖
在這個選擇器中包含一個線程選擇列陣。列陣輸出端輸出的是下一個指令周期處理器將要執(zhí)行的線程號。列陣的輸入激勵由兩部分組成,分別為:線程控制寄存器中當(dāng)前激活的線程標(biāo)識和線程基數(shù)計數(shù)器的輸出。
在多線程下,處理器工作空間的保護實際就是對處理器內(nèi)部各個公用的工作空間的保護。本文所實現(xiàn)的處理器中,線程切換時需要保護的部分如下:指針寄存器PC、堆棧指針寄存器SP、數(shù)據(jù)段指針寄存器DS、代碼段指針寄存器CS、通用寄存器組、處理器狀態(tài)字寄存器、內(nèi)部私有存儲器空間。
在具體實現(xiàn)上有兩種方法:一種是頁面管理法,另外一種是資源快速切換法。
圖4 處理器工作空間的保護、恢復(fù)時序邏輯圖
前一種方法是建立多個重復(fù)的需要保護的寄存器或存儲器資源,處理器的硬件線程切換管理電路將這些寄存器、存儲器按頁分為單位管理,而每個線程只能訪問某個特定頁分中的資源。這種方法的特點在于,由于被保護的資源通過頁面管理實現(xiàn)切換,不需要搬動被保護的寄存器或存儲器中的數(shù)據(jù),因而在執(zhí)行時速度較快,同時控制電路也比較簡單,但在設(shè)計中需要消耗掉大量的寄存器或存儲器資源,在FPGA中進行底層布線實現(xiàn)時會影響布線的效果,使得處理器的工作主頻降低。后一種方法是在處理器中額外設(shè)置一塊高速靜態(tài)存儲器,當(dāng)處理器需要切換資源時,利用硬件電路將要保護的寄存器中的內(nèi)容存放到高速存儲器當(dāng)中。在這樣的設(shè)計中,高速存儲器可以放到存儲器中的任何地方,而不一定是在被保護寄存器、存儲器的模塊中,這樣在被保護的寄存器、存儲器本身規(guī)模比較大的時候,有助于削減模塊的規(guī)模,以達(dá)到較高的處理器執(zhí)行頻率;同時,最重要的是由于保護空間與被保護的資源在空間上分開,可以對被保護的寄存器、存儲器添加特殊屬性端口,而不需要將這些特性設(shè)計到高速存儲器上。但這種設(shè)計方法也有它自身的缺點,如控制電路復(fù)雜,保護過程消耗時間較長等。
至于具體使用哪種方法,應(yīng)根據(jù)在具體環(huán)境中實現(xiàn)的難易程度和所需要的切換速度來選擇。在設(shè)計中,考慮到最大化地利用FPGA自身的結(jié)構(gòu)特點,以及具體實現(xiàn)的方便,對通用寄存器、私有存儲器空間采用第一種方法實現(xiàn)對其保護,而對PC、SP、CS、DS以及處理器狀態(tài)字寄存器的保護采用第二種方法。圖4給出了多線程的運行環(huán)境下,這些工作空間的保護以及恢復(fù)的操作時序。
在測試過程中,使用如下三種系統(tǒng):
(1)硬件多線程處理器系統(tǒng):此系統(tǒng)是根據(jù)上面論述的方法設(shè)計的,處理器的工作主頻為20MHz,配置有64Kbytes的程序存儲器空間,最大支持8個硬件線程。
(2)WebitX操作系統(tǒng):此系統(tǒng)最大支持8個任務(wù)。使用ATMEL公司AT90S8515 RISC單片機處理器,處理器工作頻率 8MHz,系統(tǒng)配置有4Kbytes程序存儲器空間。
(3)RMX51操作系統(tǒng):此系統(tǒng)處理器為Intel公司的i8051處理器,工作頻率12MHz。系統(tǒng)配置12Kbytes程序存儲器空間。
由于上述三套系統(tǒng)的處理器的機器指令碼、指令執(zhí)行所需時鐘周期數(shù)以及處理速度各不相同,所以直接比較絕對的處理時間并不準(zhǔn)確。而采用用戶線程執(zhí)行比率的方法可以客觀和準(zhǔn)確地比較處理時間,消除絕對處理時間對處理器效率的影響。因而本文采用比較用戶線程執(zhí)行比率的辦法。執(zhí)行比率定義如下:
執(zhí)行比率=多線程執(zhí)行總時間/單個線程執(zhí)行總時間;
執(zhí)行效率=系統(tǒng)支持最大線程數(shù)/執(zhí)行比率;
首先讓三套測試系統(tǒng)都只運行一個線程,雖然測試程序代碼各不相同,但功能是一樣的:連續(xù)執(zhí)行加1操作100次,分別測出各系統(tǒng)完成操作需要的時間。然后,讓三套測試系統(tǒng)同時各執(zhí)行8個線程,且每套系統(tǒng)中的所有線程執(zhí)行的程序相同,不同系統(tǒng)的程序功能又是一樣的,仍然是連續(xù)執(zhí)行加1操作100次。
測試中,分別使用這三個系統(tǒng)的通用I/O端口作為測試程序執(zhí)行狀態(tài)的指示標(biāo)志位。通過事先編寫的程序,定義通用I/O口在系統(tǒng)初始化后為低,第一條代碼運行前,將I/O置高,測試程序完全運行結(jié)束后,又將通用I/O置低。用邏輯分析儀抓取通用I/O口處于高電平的時間,可以得到測試程序的運行時間。
表1 系統(tǒng)測試結(jié)果
從表1中可以看出,對于硬件多線程處理器系統(tǒng),由于線程的切換交由處理器硬件完成,并不需要執(zhí)行線程切換程序指令,因而在8個線程同時執(zhí)行的情況下,執(zhí)行效率較高,總運行時間基本等于一個線程運行時間的8倍,各個線程能夠各自獨立地完成任務(wù),并且得到了預(yù)期的結(jié)果。而對于操作系統(tǒng)軟件實現(xiàn)的線程調(diào)度,雖然各個線程也能并發(fā)執(zhí)行并得到正確的計算結(jié)果,但是,由于需要執(zhí)行線程切換調(diào)度保護處理程序,在實際運行中將額外消耗較多的處理器時間,因此執(zhí)行效率遠(yuǎn)小于1。通過以上分析可以看出,本設(shè)計所實現(xiàn)的硬件多線程處理器中執(zhí)行控制機制在多線程條件下的執(zhí)行效率較高,證明該設(shè)計是合理的。
采用硬件實現(xiàn)線程的調(diào)度、資源的保護等功能,提高了系統(tǒng)多線程處理的效率及安全性,并降低了在多線程環(huán)境下程序開發(fā)的復(fù)雜性。隨著對多線程處理能力需求的增長,在很多處理系統(tǒng)尤其是在自身處理能力較弱的嵌入式系統(tǒng)中,本文所提出的執(zhí)行控制機制將在硬件多線程處理器的設(shè)計和實現(xiàn)中有著廣泛應(yīng)用。
[1]方建,石永山.數(shù)字電路的VHDL語言設(shè)計方法[J].光電技術(shù)應(yīng)用,2006,3(21):38 -42.
[2]趙海,陳飛鳴.嵌入式Internet的體系結(jié)構(gòu)及其ONDC模型的實現(xiàn)[J].東北大學(xué)學(xué)報(自然科學(xué)版),1999,20(3):257-260.
[3]張晨曦.計算機系統(tǒng)結(jié)構(gòu)[M].北京:高等教育出版社,2008:47-192.
[4]喻之斌,金海,鄒南海.計算機體系結(jié)構(gòu)軟件模擬技術(shù)[J].軟件學(xué)報,2008,4(19):1052 -1068.
[5]宋紅.計算機組成原理[M].北京:中國鐵道出版社,2008:34-153.
[6]張慧,孫立香.VHDL程序設(shè)計的教學(xué)研究[J].科教導(dǎo)刊,2011(10):144-179.
[7]曾光裕,李清寶,王煒.計算機系統(tǒng)結(jié)構(gòu)課程群建設(shè)[J].中國電子教育,2011(2):55 -59.
[8]張朝福,徐惠興,樓銘達(dá),等.基于AVR高速嵌入式單片機的ATSE控制器[J].智能電器及計算機應(yīng)用,2009,13(3):18 -19.