高承,王正彥
(青島大學(xué),青島 266071)
?
FPGA設(shè)計中信號量管理的硬件電路設(shè)計
高承,王正彥
(青島大學(xué),青島 266071)
摘要:在對嵌入式實時操作系統(tǒng)μC/OS-II中任務(wù)之間通信進行深入研究的基礎(chǔ)上,提出了將信號量的管理用基于FPGA設(shè)計的硬件電路來完成,同時保證新的混合式實時操作系統(tǒng)對用戶來說是透明的,即保證了混合式實時操作系統(tǒng)的可移植性。經(jīng)過設(shè)計和不斷地改進,混合式實時操作系統(tǒng)成功的移植到Altera公司的DE2-70開發(fā)板上,并完成了信號量管理的測試。這是一次探索性的設(shè)計,是混合式嵌入式實時操作系統(tǒng)設(shè)計中非常重要的一部分。
關(guān)鍵詞:RTOS;FPGA;Nios II;信號量
引言
隨著信息化、智能化、網(wǎng)絡(luò)化的發(fā)展,嵌入式系統(tǒng)獲得了廣闊的發(fā)展空間。目前嵌入式技術(shù)已成為智能領(lǐng)域的核心技術(shù),特別是物聯(lián)網(wǎng)的爆發(fā)為嵌入式系統(tǒng)提供了廣闊的應(yīng)用空間。
嵌入式系統(tǒng)推動了物聯(lián)網(wǎng)的崛起,物聯(lián)網(wǎng)的崛起,也帶來嵌入式系統(tǒng)巨大的發(fā)展?jié)摿ΑN锫?lián)網(wǎng)的核心設(shè)備是智能終端,物聯(lián)的實現(xiàn)就是智能終端的網(wǎng)絡(luò)化運行。嵌入式系統(tǒng)又是智能終端的“大腦”和“中樞神經(jīng)”,因此嵌入式系統(tǒng)是物聯(lián)網(wǎng)產(chǎn)業(yè)發(fā)展的核心推動力。嵌入式系統(tǒng)是計算機硬件與軟件高度融合的智能體,已經(jīng)形成了巨大的技術(shù)空間和人才市場。實時操作系統(tǒng)(RTOS)是嵌入式系統(tǒng)的基礎(chǔ)運行平臺,其性能的好壞直接影響嵌入式系統(tǒng)性能的高低。
傳統(tǒng)的嵌入式實時操作系統(tǒng),內(nèi)核和應(yīng)用程序是放在一起的,內(nèi)核任務(wù)的優(yōu)先級一般高于應(yīng)用程序任務(wù)的優(yōu)先級,因此內(nèi)核任務(wù)優(yōu)先享有CPU使用權(quán),進而使應(yīng)用程序的執(zhí)行效率降低。目前,提高嵌入式實時操作系統(tǒng)處理能力主要是通過使用更高主頻和更多位數(shù)的處理器,或者是改進軟件編程算法來實現(xiàn)。但是處理器主頻和位數(shù)的提高受限于當(dāng)前的制造工藝,而軟件編程算法已經(jīng)不能使其實時性和穩(wěn)定性進一步提高。因此,單純依靠這兩種方式來提高嵌入式實時操作系統(tǒng)的處理能力已經(jīng)遠遠不能滿足需要。鑒于硬件電路在處理并發(fā)性任務(wù)時的優(yōu)異表現(xiàn),越來越多的研究人員開始將目光轉(zhuǎn)向硬件實時操作系統(tǒng)(HRTOS),而近年來不斷發(fā)展的FPGA也為完成一個硬件實時操作系統(tǒng)的設(shè)計提供了很大的便利。
從20世紀(jì)80年代開始,國外就提出了硬件實時操作系統(tǒng)的概念。美國的JAEHWAN LEE和INCENT JOHN MOOENY III在分析比較了RTOS調(diào)度器的軟件、硬件實現(xiàn)的基礎(chǔ)上,提出專用硬件IP核實現(xiàn)RTOS調(diào)度器,將會大大提高RTOS的工作效率。任務(wù)調(diào)度是RTOS的核心所在,任務(wù)間的通信、外部時間的處理以及中斷處理等都離不開任務(wù)調(diào)度的參與。
巴西的MELLISSA VETROMILLE和LUCIANO OST分析并對比了將RTOS系統(tǒng)任務(wù)調(diào)度器分別采用硬件和軟件實現(xiàn)的效率,結(jié)果表明硬件調(diào)度模型具有更高的性能。
美國馬里蘭大學(xué)的PAUL KOHOUT、BRINDA GANESH和BRUCE JACOB 實現(xiàn)了硬件實時任務(wù)管理,結(jié)果也同樣表明由硬件來完成最為耗時的任務(wù)管理所用時間更短且更可靠。
東北大學(xué)的尹振宇、趙海、許久強等提出了一種基于硬件操作系統(tǒng)(HOS)的設(shè)計結(jié)構(gòu),在處理器中添加微代碼處理邏輯及硬件處理模塊,將比較耗時的操作采用硬件來實現(xiàn)。
總結(jié)國內(nèi)外的發(fā)展趨勢,目標(biāo)都是設(shè)計一款獨立的硬件實時操作系統(tǒng)。但是,獨立的硬件實時操作系統(tǒng)沒有統(tǒng)一的標(biāo)準(zhǔn),可移植性也就不夠強?;诳梢浦残缘目紤],通過在已有的軟件實時操作系統(tǒng)研究的基礎(chǔ)上,采用軟硬件結(jié)合的方式來設(shè)計一款實時操作系統(tǒng),既可以提高效率,又能夠保證可移植性。
1混合式實時操作系統(tǒng)整體設(shè)計框架
1.1實時操作系統(tǒng)和平臺的選擇
μC/OS-II[1]由Micrium公司提供,是一個可移植、可固化、可裁減、占先式、多任務(wù)實時內(nèi)核。它提供了基于優(yōu)先級的任務(wù)調(diào)度與管理、任務(wù)間同步通信、時間管理和中斷服務(wù)、內(nèi)存管理等功能。整個內(nèi)核基本上都是由C語言編寫而成,只有少部分CPU 硬件相關(guān)部分是采用匯編語言編寫的(匯編語言總量只有約200行),便于移植到任何一種其他的CPU 上。正是由于這些優(yōu)勢,所以選用μC/OS-II作為混合式RTOS的參考系統(tǒng)。
硬件部分的設(shè)計采用硬件描述語言Verilog HDL[2]來進行編寫并綜合出硬件電路。選用的軟件為Quartus II9.1和NiosII-IDE,Quartus II9.1所帶的SOPC Builder(可編程片上系統(tǒng))可以很方便地根據(jù)自己的需要搭建出一個處理器,這個處理器的內(nèi)核就是Nios II處理器,而外圍可以根據(jù)自己的需要添加任何需要的外設(shè),包括定時器、PIO口、ROM、FLASH等。同時,通過NiosII-IDE可以將μC/OS-II實時操作系統(tǒng)移植到以Nios II為內(nèi)核的處理器上,為測試提供了很大便利。而處理器和所設(shè)計的硬件電路可以通過已經(jīng)設(shè)計好的AVALON總線來進行通信,而不用自己單獨去研究一套新的通信協(xié)議來進行軟硬件之間的通信。測試采用的是Altera提供的DE2-70開發(fā)板。
1.2混合式實時操作系統(tǒng)的整體架構(gòu)
通過對μC/OS-II系統(tǒng)進行深入分析、分離可以用硬件實現(xiàn)的部分,設(shè)計出對應(yīng)的硬件電路,然后通過AVALON總線實現(xiàn)軟件內(nèi)核和硬件電路之間的通信,同時保證修改后的系統(tǒng)對用戶來說是透明的。具體框圖如圖1所示。
圖1 混合式實時操作系統(tǒng)整體框圖
圖1中的CPU是通過Quartus II軟件中的SOPC Builder根據(jù)需要搭建的處理器[3],搭建好的處理器作為一個單獨的底層模塊,然后再將軟件操作系統(tǒng)中可以硬化的部分設(shè)計成硬件邏輯電路,作為另一個底層模塊,最后在頂層模塊中對搭建的處理器和硬件邏輯電路進行例化,組成一個完整的模塊,下載到DE2-70開發(fā)板上進行測試。
2信號量管理軟件部分
2.1信號量簡介
操作系統(tǒng)必須具有對任務(wù)運行進行協(xié)調(diào)的能力,從而使任務(wù)之間可以無沖突、流暢地同步運行,而不致產(chǎn)生災(zāi)難性的后果。計算機系統(tǒng)是依靠任務(wù)之間的良好通信來保證任務(wù)與任務(wù)的同步的。在μC/OS-II中,使用信號量、消息郵箱、消息隊和信號量集來實現(xiàn)任務(wù)之間的通信,而信號量就是用于任務(wù)間通信的一類事件。通過使用信號量可以給共享資源設(shè)置一個標(biāo)志,這個標(biāo)志可以控制共享資源的占用情況。
μC/OS-II的信號量由兩部分組成:①信號量的計數(shù)值,這個值是一個十六位的無符號整數(shù);②任務(wù)等待表,該任務(wù)等待表是一個長度為64位的整型數(shù)組,每一位代表一個任務(wù),若任務(wù)處于等待該信號量的狀態(tài),那么對應(yīng)位為1,否則為0。
μC/OS-II中信號量的工作原理:每當(dāng)有任務(wù)申請信號量時,如果信號量計數(shù)器OSEventCnt的值大于0,則OSEventCnt減1并使任務(wù)繼續(xù)運行;如果OSEventCnt的值為0,則將任務(wù)列入任務(wù)等待表OSEventTbl[],從而使任務(wù)處于等待狀態(tài)。如果有正在使用信號量的任務(wù)釋放了該信號量,則會在任務(wù)等待表中找出優(yōu)先級別最高的等待任務(wù),使它就緒后調(diào)用調(diào)度器引發(fā)一次調(diào)度;如果任務(wù)等待表中已經(jīng)沒有等待任務(wù),則信號量計數(shù)器加1。信號量工作原理圖如圖2和圖3所示。
圖2 任務(wù)請求信號量
圖3 任務(wù)發(fā)送信號量
2.2事件控制塊ECB
圖4 事件控制塊結(jié)構(gòu)圖
為了對任務(wù)之間用于通信的事件進行統(tǒng)一管理,μC/OS-II定義了一個叫做事件控制塊的數(shù)據(jù)結(jié)構(gòu)(ECB)[4],ECB可以用來描述信號量、消息郵箱、消息隊列等事件。ECB結(jié)構(gòu)如圖4所示。用戶應(yīng)用程序的任務(wù)通過指針pEvent來訪問事件控制塊。成員OSEventCnt為信號量的計數(shù)器;OSEventPtr主要用來存放消息郵箱或消息隊列的指針;OSEventTbl[OS_EVENT_TBL_SIZE]是任務(wù)等待表;OSEventGrp表示任務(wù)等待表中的各任務(wù)組是否存在等待任務(wù);OSEventType是事件的類型,它可以是信號量、消息郵箱或消息隊列。用戶要根據(jù)該域的具體值來調(diào)用相應(yīng)的系統(tǒng)函數(shù),以保證對其操作的正確性。
3混合式實時操作系統(tǒng)信號量管理的硬件設(shè)計
3.1軟件部分修改
通過分析,在保證對用戶透明的條件下,可以對事件控制塊中的任務(wù)等待表進行硬件化設(shè)計[5],那么成員OSEventGrp、OSEventTbl就可以去掉,因為使用軟件進行查表和寫表操作是比較費時的,尤其是進行表的遍歷更加費時。如果將表相關(guān)的操作轉(zhuǎn)移到硬件電路中,軟件只是負責(zé)發(fā)送指令或者讀取,不僅可以提高效率,還可以降低內(nèi)存占用、減輕CPU的負擔(dān)。
在硬件設(shè)計中不能動態(tài)地添加或者刪除存儲表,如果用硬件來實現(xiàn)任務(wù)等待表,就必須在初始化的時候就建立與事件控制塊對應(yīng)數(shù)目的任務(wù)等待表。通過對μC/OS-II系統(tǒng)進行分析發(fā)現(xiàn),事件控制塊的最大數(shù)目是確定的,這為實現(xiàn)任務(wù)等待表硬件化設(shè)計提供了前提。在硬件化設(shè)計時可以直接建立與事件控制塊數(shù)目相同的任務(wù)等待表——[63∶0]TaskWaitTbl[0DK]∶EVENT_COUNT_MAX]。同時,為了能夠?qū)④浖行薷暮蟮氖录刂茐K和硬件中的任務(wù)等待表之間建立一一對應(yīng)的關(guān)系,在事件控制塊數(shù)據(jù)結(jié)構(gòu)中添加一個INT8U類型的變量OSEventCode來為任務(wù)控制塊進行編號,這個編號將作為與硬件中的任務(wù)進行關(guān)聯(lián)的標(biāo)識碼。修改后的事件控制塊結(jié)構(gòu)如下所示:
typedef stmct{
INT8UOSEventType;
INT16UOSEventCnt;
void *OSEventPtr;
INT8UOSEventCode;
}OS_EVENT;
在μC/OS-II系統(tǒng)進行初始化的時候會調(diào)用事件控制塊初始化函數(shù),通過修改該函數(shù)來完成對事件控制塊的編號,然后對表的各種操作進行編碼,當(dāng)軟件需要操作任務(wù)等待表的時候,向硬件發(fā)送編好號的命令碼,最后硬件部分完成對任務(wù)等待表的各種操作。信號量管理整體結(jié)構(gòu)如圖5所示。
圖5 信號量管理硬件化設(shè)計整體框圖
3.2硬件部分設(shè)計
硬件部分主要是根據(jù)軟件發(fā)送的命令碼對任務(wù)等待表進行相應(yīng)的操作。命令碼編碼如下:
001為初始化對應(yīng)的任務(wù)控制塊;010為使對應(yīng)的任務(wù)等待表的相應(yīng)位置1;011為使對應(yīng)的任務(wù)等待表的相應(yīng)位置0;100為讀取相應(yīng)的任務(wù)等待表中最高優(yōu)先級等待任務(wù)的優(yōu)先級;101為讀取相應(yīng)的等待表中是否有等待任務(wù);110為讀取相應(yīng)的任務(wù)等待表中指定位置數(shù)據(jù)。
硬件部分整體設(shè)計圖如圖6所示。
圖6 信號量管理硬件邏輯框圖
其中,OSEvent_ctrWord為命令字,由軟件寫入到硬件,經(jīng)過指令譯碼器譯碼后對任務(wù)等待表進行相應(yīng)的操作;OSEvent_tabCode為事件控制塊的編號,此編號使得事件控制塊和相應(yīng)的任務(wù)等待表關(guān)聯(lián)起來;OSEvent_prio_in為任務(wù)的優(yōu)先級輸入,任務(wù)等待表的各個位對應(yīng)著任務(wù)的優(yōu)先級,從而可以根據(jù)優(yōu)先級來確定對任務(wù)等待表的哪一個位進行操作;OSEvent_prio_out為優(yōu)先級的輸出,主要是輸出任務(wù)等待表中最高優(yōu)先級等待任務(wù)對應(yīng)的優(yōu)先級,軟件部分可以發(fā)送命令碼并讀取該值;OSEvent_isWait主要是輸出當(dāng)前任務(wù)等待表中是否有等待任務(wù);OSEvent_Wait用于讀取任務(wù)等待表中對應(yīng)位的數(shù)據(jù)。
4系統(tǒng)測試與結(jié)果
測試平臺為Altera公司的DE2-70開發(fā)板,將硬件系統(tǒng)下載到開發(fā)板上,然后利用NiosII-IDE軟件寫出測試程序[6],選擇μC/OS-II操作系統(tǒng),完成對系統(tǒng)的測試。程序運行結(jié)果如下所示:
Hello from prio:1
Hello from prio:3
task3 running count is 1
Hello from prio:3
task3 running count is 2
Hello from prio:1
Hello from prio:3
task3 running count is 3
Hello from prio:3
task3 running count is 4
Hello from prio:1
Hello from prio:3
task3 running count is 5
Hello from prio:1
fun is running!
Hello from prio:3
task3 running count is 6
Hello from prio:3
task3 running count is 7
Hello from prio:1
Hello from prio:3
task3 running count is 8
Hello from prio:3
task3 running count is 9
測試程序:首先創(chuàng)建任務(wù)1(task1,優(yōu)先級為1),在任務(wù)1中創(chuàng)建任務(wù)2(task2,優(yōu)先級為2)和任務(wù)3(task3,優(yōu)先級為3)。task1創(chuàng)建task2和task3后是一個無限循環(huán)語句,循環(huán)體中主要輸出當(dāng)前運行任務(wù)的優(yōu)先級,即表示task1是不是運行成功;task2是一個無限循環(huán)體,每隔2 s請求一次信號量,如果請求成功就調(diào)用fun()函數(shù),fun()函數(shù)輸出“fun is running!”,如果請求不成功則任務(wù)2添加到任務(wù)等待表中,直到信號量有效再運行;task3每隔3 s 運行一次,當(dāng)task3運行5次的時候,發(fā)送信號量。從結(jié)果可以看出,當(dāng)task3運行5次之后fun()函數(shù)調(diào)用成功,說明系統(tǒng)測試通過。
結(jié)語
參考文獻
[1] 任哲.嵌入式實時操作系統(tǒng)μC/OS-II原理及應(yīng)用[M] .北京:北京航空航天大學(xué)出版社,2012:116-140.
[2] 潘松,黃繼業(yè),潘明.EDA技術(shù)實用教程——VerilogHDL版[M] .5版.北京:科學(xué)出版社,2013:58-89.
[3] 周立功.SOPC嵌入式系統(tǒng)基礎(chǔ)教程[M] .北京:北京航空航天大學(xué)出版社,2006:57-92.
[4] 譚浩強.C程序設(shè)計[M] .3版.北京:清華大學(xué)出版社,2009:281-318.
[5] 崔曉英.基于FPGA的硬件實時操作系統(tǒng)的設(shè)計[D] .哈爾濱:哈爾濱理工大學(xué),2010.
[6] 崔建華,孫紅勝,王保進.硬件實時操作系統(tǒng)的設(shè)計與實現(xiàn)[J] .電子技術(shù)應(yīng)用,2008(5).
高承(碩士研究生),主要研究方向為嵌入式與操作系統(tǒng)應(yīng)用。
(責(zé)任編輯:薛士然收修改稿日期:2015-11-25)
Hardware Circuit Design of Semaphore Management Based on FPGA
Gao Cheng,Wang Zhengyan
(Qingdao University,Qingdao 266071,China)
Abstract:Based on the communication research of the tasks in the embedded real-time operating system μC/OS-II,a scheme is proposed, that the semaphore management is completed using the hardware circuit based on FPGA.At the same time,the new hybrid real-time operating system is transparent to the users,which ensures the portability of the hybrid real-time operating system.The hybrid real-time operating system has been successfully transplanted to Altera DE2-70 development board,and the test of semaphore management is completed.This is an exploratory design,and it is an important part in overall design of the hybrid embedded real-time operating system.
Key words:RTOS;FPGA;Nios II;semaphore
中圖分類號:TP316.2
文獻標(biāo)識碼:A