隋宇暉++范延濱++楊厚俊
摘 要:為了滿足嵌入式操作系統(tǒng)對實時性的要求,提出了基于FPGA的硬件加速模塊的實現(xiàn),將?C/OS-II操作系統(tǒng)中原有的調(diào)度器與定時器部分進(jìn)行合理的硬件化實現(xiàn)。整個設(shè)計采用Verilog硬件描述語言,通過Quartus II 13.1軟件進(jìn)行時序仿真驗證,通過仿真,得出此方法可以提高系統(tǒng)的實時性,降低系統(tǒng)的額外開銷。
關(guān)鍵詞:實時性;FPGA;調(diào)度器;定時器
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2015)05-00-02
0 引 言
嵌入式實時操作系統(tǒng)[1]是一種實時的、支持嵌入式系統(tǒng)應(yīng)用的操作系統(tǒng)軟件,它是嵌入式系統(tǒng)的重要組成部分。與通用操作系統(tǒng)相比,嵌入式操作系統(tǒng)在系統(tǒng)實時高效性、硬件的相關(guān)依賴性、軟件固態(tài)化以及應(yīng)用的專用性等方面有較為突出的特點。嵌入式實時操作系統(tǒng)?C/OS-II[2]是一種基于優(yōu)先級的搶占式操作系統(tǒng),具有很強(qiáng)的實時性。但是,航空航天、工業(yè)控制和核電站建設(shè)等領(lǐng)域的發(fā)展,對嵌入式操作系統(tǒng)的實時性提出了越來越高的要求。隨著FPGA[3]的集成度和速度的不斷提高,使嵌入式操作系統(tǒng)的硬件化實現(xiàn)成為可能[4]。我們提出將?C/OS-II的調(diào)度器[5]與定時器[6]進(jìn)行硬件化實現(xiàn),來提高嵌入式系統(tǒng)的實時性。
1 ?C/OS-II的任務(wù)調(diào)度器和時鐘
1.1 ?C/OS-II中的調(diào)度器
在?C/OS-II中,任務(wù)調(diào)度由任務(wù)調(diào)度器來完成。任務(wù)調(diào)度器的主要工作有兩項:一是在任務(wù)就緒表中查找具有最高優(yōu)先級別的就緒任務(wù);二是實現(xiàn)任務(wù)的切換。
?C/OS-II調(diào)度器用于獲取優(yōu)先級別最高的就緒任務(wù)的代碼,如下[7]所示:
y = OSUnMapTbl[OSRdyGrp];
x = OSUnMapTbl[OSRdyTbl[y]];
prio = ( y << 3 ) + x;
其中,OSRdyTbl[]是就緒任務(wù)登記表,登記了系統(tǒng)中所有處于就緒狀態(tài)的任務(wù)。它本質(zhì)上是一個類型為INT8U的數(shù)組,它的每一個二進(jìn)制位對應(yīng)一個任務(wù),每一位的1/0表示對應(yīng)的任務(wù)處于就緒/非就緒狀態(tài)。OSRdyGrp是一個數(shù)據(jù)類型為INT8U的變量,每一位都對應(yīng)OSRdyTbl[]的一個任務(wù)組。OSUnMapTbl[]是?C/OS-II為提高查找速度定義的一個數(shù)組,共有256個元素。
任務(wù)切換的工作是靠OSCtxSW()來完成,中止正在運行的任務(wù),轉(zhuǎn)而去運行就緒任務(wù)中優(yōu)先級別最高的任務(wù)。
由于任務(wù)切換時需要對CPU的寄存器進(jìn)行操作,所以我們只是對查找最高優(yōu)先級任務(wù)這一部分進(jìn)行硬件化實現(xiàn)。如圖1所示。
1.2 ?C/OS-II中的時鐘
?C/OS-II與大多數(shù)計算機(jī)系統(tǒng)一樣,用定時器產(chǎn)生一個周期為毫秒(ms)級的周期性中斷來實現(xiàn)系統(tǒng)時鐘。定時器以時鐘節(jié)拍為周期定時的產(chǎn)生中斷,該中斷的中斷服務(wù)程序叫做OSTickISR()。中斷服務(wù)程序通過調(diào)用時鐘節(jié)拍服務(wù)函數(shù)OSTimeTick()來完成系統(tǒng)在每個時鐘節(jié)拍時需要做的工作。
每次響應(yīng)定時中斷時,?C/OS-II調(diào)用OSTimeTick()進(jìn)行如下操作:一是給計數(shù)器OSTime加1;二是遍歷任務(wù)控制塊鏈表中的所有任務(wù)控制塊,把各個任務(wù)控制塊中用來存放任務(wù)延時時限的OSTCBDly變量減1,并使該項為0,同時又不使被掛起的任務(wù)進(jìn)入就緒狀態(tài)。簡單的說,函數(shù)OSTimeTick()的任務(wù)就是在每個時鐘節(jié)拍了解每個任務(wù)的延時狀態(tài),使其中已經(jīng)到了延時時限的非掛起任務(wù)進(jìn)入就緒狀態(tài)。
定時器相關(guān)函數(shù)的順序執(zhí)行使實時操作系統(tǒng)的實時性受到影響。因此,我們提出將定時器硬件化,以改善操作系統(tǒng)的實時性。
2 調(diào)度器的硬件化設(shè)計與實現(xiàn)
任務(wù)調(diào)度器實現(xiàn)任務(wù)控制塊TCB(Task Control Block)隊列(簡稱任務(wù)隊列)的操作與管理。所有未執(zhí)行任務(wù)放在等待隊列和就緒隊列中,等待隊列中的任務(wù)在條件(如定時到、事件到達(dá)、中斷到達(dá)等)滿足時將變?yōu)榫途w任務(wù),等待任務(wù)調(diào)度。任務(wù)調(diào)度器在每個調(diào)度時鐘內(nèi)計算出優(yōu)先級最高的就緒任務(wù),調(diào)度器采用搶占式調(diào)度機(jī)制,每個調(diào)度時鐘輸出優(yōu)先級最高的就緒任務(wù),通過中斷方式向處理器提出任務(wù)服務(wù),轉(zhuǎn)向執(zhí)行任務(wù)代碼。
圖1 任務(wù)調(diào)度器結(jié)構(gòu)
在?C/OS-II中,系統(tǒng)內(nèi)核基本工作是任務(wù)調(diào)度,系統(tǒng)運行中,將會有一定的資源消耗在調(diào)度上,大約占用CPU資源的2%~5%[8]。在硬件完成系統(tǒng)調(diào)度器中查找最高優(yōu)先級任務(wù)這一部分,釋放調(diào)度占用的CPU資源,將就緒表硬件化。在任務(wù)就緒表中,每一位與一個任務(wù)相對應(yīng),每一位的地址與任務(wù)優(yōu)先級相同,第n位為1表示任務(wù)n處于就緒狀態(tài),第n位為0表示任務(wù)n處于非就緒狀態(tài)。這樣,從處于就緒態(tài)狀態(tài)的任務(wù)中找到優(yōu)先級最高的任務(wù)只需要一個時鐘節(jié)拍。如圖2所示。
圖2 任務(wù)調(diào)度器仿真
以8個任務(wù)為例,tbl_in是當(dāng)前就緒表的狀態(tài),prio_o是當(dāng)前就緒任務(wù)中的最高優(yōu)先級,flag作為中斷請求標(biāo)志位,每個調(diào)度時鐘輸出優(yōu)先級最高的就緒任務(wù),通過該中斷請求信號向處理器提出中斷請求。
3 可編程硬件定時器的設(shè)計與實現(xiàn)
系統(tǒng)中軟件定時器實現(xiàn)函數(shù)是順序執(zhí)行的[9],降低了系統(tǒng)的實時性。要實現(xiàn)定時或延時控制,主要有三種方法:軟件定時、不可編程的硬件定時器、可編程的硬件定時器。其中,可編程定時器電路的定時值及范圍可很容易的由軟件來確定和改變,功能較強(qiáng),使用靈活。因此,本文將?C/OS-II的軟件定時器用可編程的硬件定時器替換,從而提高系統(tǒng)的實時性。如圖3所示。
我們?yōu)槊恳粋€任務(wù)設(shè)計一個定時器,用于管理任務(wù)的延時和運行周期。軟件通過向硬件模塊傳送定時命令字來指定延時任務(wù)以及延時時長。硬件模塊接收該定時命令字后,對該命令字進(jìn)行譯碼,獲得延時任務(wù)的優(yōu)先級以及延時時長,進(jìn)行定時操作。當(dāng)設(shè)定的定時時間到,進(jìn)行一次任務(wù)調(diào)度,讓出CPU的使用權(quán)。
圖3 定時器結(jié)構(gòu)
可編程硬件定時器由定時命令字、分頻器、定時器(計數(shù)器以及比較器)三部分組成,三個部分的實現(xiàn)分別如下:
(1)定時命令字
從軟件傳送來的32位定時命令字,高8位為優(yōu)先級,用來指定延時任務(wù);低24位為延時時長,用來指定定時時間。經(jīng)過譯碼器解析之后,優(yōu)先級置于優(yōu)先級寄存器中,延時時長作為定時器的輸入。命令字格式如圖4所示。
優(yōu)先級 延時時長
31……24 23 …… 0
圖4 命令字格式
(2)分頻器
通過分頻器來控制定時器精度。如果系統(tǒng)時鐘是50MHz,將50 MHz的系統(tǒng)時鐘轉(zhuǎn)換為1 MHz,時鐘周期為1 ?s,定時器精度為1 ?s,則我們可以將延時范圍控制在0~16777 216 ?s(224 ?s)之間。
(3)定時器
調(diào)用LPM(Library of Parameterized Modules 參數(shù)可設(shè)置模塊庫)的計數(shù)器和比較器來綜合實現(xiàn)定時器功能。
計數(shù)器:24位加1普通二進(jìn)制計數(shù)器,Clock Enable作為使能信號。輸入為時鐘和時鐘使能,輸出為計數(shù)值。
比較器:輸入為兩個24位的二進(jìn)制數(shù)dataa、datab,輸出為aeb(a equal b),若兩數(shù)相等,輸出為1,否則為0。
定時器:對計數(shù)器和比較器分別例化,計數(shù)器的輸出作為比較器的一個輸入dataa,比較器的另一個輸入是通過解析命令字得到的延時時長。定時器的輸入為時鐘及定時命令字,高8位作為優(yōu)先級,低24位作為比較器的輸入datab;輸出為優(yōu)先級及比較器的輸出結(jié)果。比較器的輸出可作為定時已到的標(biāo)志位。如圖5所示。
圖5 定時器RTL圖
4 結(jié) 語
采用硬件邏輯實現(xiàn)實時操作系統(tǒng)中的任務(wù)調(diào)度和定時器管理功能,可使其實時性和確定性顯著提高。因為硬件邏輯獨立于處理器運行,不占用處理器的處理時間,所節(jié)省的時間用于執(zhí)行任務(wù)程序,從而提高了任務(wù)集合的可調(diào)度性和實時性。實時操作系統(tǒng)的硬化隨著EDA(Electronic Design Automation)設(shè)計技術(shù)的發(fā)展、可編程邏輯器件及相關(guān)技術(shù)的提高,它在很多處理系統(tǒng)尤其是嵌入式系統(tǒng)與單片機(jī)系統(tǒng)中,將會有廣泛的應(yīng)用前景。
參考文獻(xiàn)
[1]林建民.嵌入式操作系統(tǒng)技術(shù)發(fā)展趨勢[J].計算機(jī)工程,2001,27(10):1-4.
[2]任哲.嵌入式實時操作系統(tǒng)mC/OS-II原理及應(yīng)用[M].第2版,北京:北京航空航天大學(xué)出版社,2009.
[3]潘松,黃繼業(yè),潘明.EDA技術(shù)實用教程-Verilog HDL版[M].第4版,北京:科學(xué)出版社,2010.
[4]尹震宇,趙海,王金英,等.一種嵌入式處理器上的HOS設(shè)計[J].計算機(jī)工程,2008,34(5):268-270.
[5]李巖,崔曉英,李賢堯,等.基于FPGA的mC/OS-II任務(wù)管理硬件設(shè)計[J].電子技術(shù)應(yīng)用,2010,36(2):25-29.
[6]張煒,李克儉,蔡啟仲,等.基于FPGA的PLC并行定時器的設(shè)計[J].計算機(jī)工程與設(shè)計,2013,34(4):1244-1249.
[7] Jean J.Labrosse,邵貝貝譯.嵌入式實時操作系統(tǒng)mC/OS-II [M].第2版,北京:北京航空航天大學(xué)出版社,2007.
[8]張濤,廖力清,王頌.mC/OS-II內(nèi)核在FPGA上的硬件化設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2009,35(4):41-44.
[9]沈國新,張德學(xué),王貴海,等. 一種實時操作系統(tǒng)硬件加速設(shè)計[J]. 微型機(jī)與應(yīng)用,2010,29(6):17-19.