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