(1)輸入輸出寄存器。輸入寄存器接收由接口函數(shù)傳遞的功能代碼和參數(shù),輸出寄存器將執(zhí)行結果返回給接口函數(shù)。
(2)中斷控制器。接收外部事件中斷,中斷控制器使用FPGA的I/O(輸入/輸出)管腳,每個管腳對應一個外部中斷,一個或者多個外部中斷對應一個中斷處理任務[6]。當外部中斷到來時,相應的事件標志位被置位,中斷任務被置為就緒態(tài)。
(3)控制器。從事件控制塊和信號量控制塊獲知任務的狀態(tài),結合系統(tǒng)調(diào)用的功能代碼和參數(shù)信息,確定將要執(zhí)行的操作并發(fā)出控制信號。每個硬件單元都通過CPU發(fā)出的控制信號進行工作。
RTOS主要功能模塊包括:事件標志組管理、信號量管理、任務管理及時鐘管理。
(1)事件標志組管理。事件標志組是一個數(shù)據(jù)結構,采用FPGA的片內(nèi)寄存器實現(xiàn),每個事件占1 bit。任務或中斷服務可以將某一位置位或復位。當任務所需要的事件發(fā)生時,則將相應的事件位置位;當任務所等待的事件都發(fā)生時,則應向控制器提出改變?nèi)蝿諣顟B(tài)的相應申請,同時將任務的ID號送給任務管理模塊。
(2)信號量管理。信號量由2部分組成:16 bit的無符號整型的計數(shù)值(0~65535);等待該信號量的任務組成的等待任務表。采用可預置的雙向計數(shù)器(up/down)實現(xiàn)計數(shù)值部分,采用FPGA片內(nèi)的寄存器實現(xiàn)該信號量的等待任務表。寄存器的位數(shù)對應系統(tǒng)中的任務數(shù),每個任務占1 bit,且初始值為0(表示沒有任務等待該信號量)。等待該信號量的任務將寄存器的相應位置1,釋放該信號量的任務喚醒優(yōu)先級較高的等待任務,將寄存器的相應位置0。每發(fā)生一次置位或復位操作,也必須向控制器提出改變?nèi)蝿諣顟B(tài)的相應申請,同時將相應任務的ID號送給任務管理模塊。
(3)任務管理。負責各種任務狀態(tài)的切換和任務調(diào)度。任務管理模塊接收從輸入寄存器、事件標志組管理模塊或信號量管理模塊傳遞來的任務ID號,在控制器的相應控制信號作用下,執(zhí)行任務狀態(tài)的切換。調(diào)度器以任務的狀態(tài)為敏感信號,當任務的狀態(tài)發(fā)生改變時,觸發(fā)調(diào)度器執(zhí)行一次任務調(diào)度,找出當前優(yōu)先級最高的就緒態(tài)任務。若其優(yōu)先級高于當前正在運行的任務的優(yōu)先級,則向CPU發(fā)出硬件中斷處理信號。
(4)定時器管理。主要實現(xiàn)任務的延時,當設置的延時時間到且任務沒有等待別的資源時,將任務的狀態(tài)置為就緒。
由圖1可知,硬件RTOS的工作過程如下:
(1)在應用程序中調(diào)用系統(tǒng)服務。
(2)系統(tǒng)調(diào)用的接口函數(shù)將功能代碼和參數(shù)傳給硬件部分的輸入寄存器。
(3)硬件部分執(zhí)行系統(tǒng)調(diào)用。
(4)在硬件邏輯執(zhí)行系統(tǒng)調(diào)用的過程中,可以接收外部事件的異步請求,因此,硬件部分執(zhí)行系統(tǒng)調(diào)用過程中可能轉向以下不同的處理過程:
①若外部事件請求使中斷任務就緒,則向處理器發(fā)出要求任務切換的硬件中斷請求。
②若系統(tǒng)調(diào)用使高優(yōu)先級的任務就緒,則硬件部分向處理器發(fā)出要求任務切換的硬件中斷請求。
③硬件部分完成系統(tǒng)調(diào)用功能,則采用中斷形式通知處理器并回送處理結果。
(5)中斷處理函數(shù)完成任務切換。
(6)處理器執(zhí)行新任務。
2 μC/OS-II任務管理硬件設計
任務管理是RTOS的核心,本文首先對μC/OS-II任務管理模塊進行了硬件設計,其他的模塊可以依托任務管理展開。μC/OS-II任務管理主要包括建立任務、刪除任務、掛起任務、恢復任務、查詢?nèi)蝿蘸腿蝿照{(diào)度等。其中建立任務、刪除任務、掛起任務、恢復任務和查詢?nèi)蝿帐峭ㄟ^系統(tǒng)調(diào)用形式交給用戶調(diào)用的;而任務調(diào)度是交給系統(tǒng)函數(shù)調(diào)用的,用戶不能直接調(diào)用它。因此,本文將任務管理分成系統(tǒng)調(diào)用函數(shù)的硬件實現(xiàn)和任務調(diào)度器硬件實現(xiàn)2部分。
2.1 任務管理系統(tǒng)調(diào)用函數(shù)的硬件設計
μC/OS-II的任務由3部分組成:即任務程序代碼、任務堆棧、任務控制塊TCB(Task Control Block)。TCB把任務代碼和任務堆棧進行關聯(lián)而使三者成為一個整體。
任務管理系統(tǒng)調(diào)用的硬件實現(xiàn)電路如圖2所示。參數(shù)1是建立任務時,寫入TCB的任務代碼段地址、任務優(yōu)先級、任務的參數(shù)指針和分配給任務的堆棧棧頂指針等任務運行和管理的信息;參數(shù)2是分配給任務的ID號。每個任務依據(jù)任務的ID號對應一個TCB。
在圖2中,任務管理系統(tǒng)調(diào)用的硬件實現(xiàn)電路主要由分配器、選擇器和TCB寄存器組成。
(1)分配器。建立任務和刪除任務時,分配器根據(jù)任務的ID號選擇建立任務的信息送到對應的輸出通道上,分配器的輸出端與多路選擇器的一路輸入端直連,即參數(shù)1被送到了選擇器的輸入端,作為一路輸入。掛起任務和恢復任務時,分配器根據(jù)任務的ID號,將任務的狀態(tài)送到對應TCB的狀態(tài)寄存器中。
(2)選擇器。選擇器的輸入端分別是建立任務時要送給 TCB的數(shù)據(jù)(參數(shù)1)和刪除任務時要送給TCB的數(shù)據(jù)(系統(tǒng)初始值),數(shù)據(jù)輸出端與一個TCB塊直連。建立信號有效時,選擇參數(shù)1寫入TCB,建立任務完成;否則,寫入系統(tǒng)的初始值覆蓋TCB信息,即任務被刪除。掛起和恢復任務只需根據(jù)任務的ID號找到相應的TCB并修改其狀態(tài)寄存器的值。二值選擇器的輸入端是0和1,可以分別表示任務的等待和就緒狀態(tài)。
(3)TCB寄存器。在軟件實現(xiàn)的RTOS中,空閑TCB塊和已占用的TCB塊分別以空閑任務鏈表和任務鏈表的形式常駐內(nèi)存。但是基于鏈表的軟件算法并不適合直接采用硬件高效實現(xiàn),因為只有讀取鏈表的前一個表項的內(nèi)容后,才能獲得后續(xù)表項的地址,限制了硬件并行的開發(fā)。因此,本文將TCB的數(shù)據(jù)結構全部采用片內(nèi)的寄存器資源實現(xiàn),從而節(jié)省了鏈表的查找時間,提高了系統(tǒng)調(diào)用的執(zhí)行效率。
2.2 任務調(diào)度器的硬件設計
μC/OS-II進行任務調(diào)度的思想是,每時每刻總是讓優(yōu)先級最高的就緒任務處于運行狀態(tài)。為了實現(xiàn)高效的調(diào)度算法,采用組合電路實現(xiàn)硬件調(diào)度器,如圖3所示。以優(yōu)先級為選擇條件,將TCB中的狀態(tài)寄存器直接與調(diào)度器相連接。這樣,只要任務的優(yōu)先級或任務的狀態(tài)有一個發(fā)生改變,就會立刻引發(fā)一次任務的的重新調(diào)度。
圖3中,數(shù)據(jù)分配器與TCB寄存器中的狀態(tài)寄存器RDY輸出端直連,使用優(yōu)先級PRI作為選擇條件,將RDY的就緒態(tài)(RDY=‘1’)分配到不同的輸出通道上。寄存器REG_X接收數(shù)據(jù)分配器輸出通道的輸出值并按位存儲。將所有的REG_X寄存器按位進行或運算,結果送寄存器PRI_REG。如圖4所示,優(yōu)先級寄存器PRI_REG的位數(shù)對應系統(tǒng)中任務的個數(shù),寄存器PRI_REG某位為1就表示相應優(yōu)先級的任務處于就緒態(tài),且低位的優(yōu)先級依次高于高位的優(yōu)先級。譯碼器從寄存器讀取PRI_REG的值進行譯碼,送出處于就緒態(tài)且優(yōu)先級最高的任務。比較器PRI_COMP以任務的ID號為索引,任務的優(yōu)先級PRI為比較內(nèi)容。將每個任務的優(yōu)先級與譯碼找到的就緒態(tài)的最高優(yōu)先級相比較,若相同,則輸出任務的ID號,否則輸出0。最后將所有比較器PRI_COMP的輸出做或運算,即得到處于就緒態(tài)的優(yōu)先級最高任務的ID號。
假設在某一時刻,系統(tǒng)中優(yōu)先級PRI為1、2、3、6和7的任務處于就緒態(tài),對應任務的ID號分別是010、100、001、110和111,則調(diào)度器中的數(shù)據(jù)處理流程如圖5所示。
2.3 仿真及實驗結果
整個設計采用VHDL硬件語言描述。為了驗證該硬件實現(xiàn)的正確性和高效性,使用 ISE 8.2軟件進行時序仿真驗證。任務管理硬件實現(xiàn)的功能仿真如圖6所示。
(1)建立任務。依次建立3個任務,優(yōu)先級與ID號相同分別為7、1和6。若系統(tǒng)中只有優(yōu)先級為7的任務處于就緒態(tài),則Next_task_id為7;當建立了優(yōu)先級為1的任務時,高優(yōu)先級任務剝奪低優(yōu)先級任務的CPU使用權,Next_task_id為1,直到有更高優(yōu)先級的任務到來,或任務自身刪除,優(yōu)先級為1的任務將一直執(zhí)行。
(2)查詢?nèi)蝿?。處理器通過查詢?nèi)蝿者@個系統(tǒng)調(diào)用獲得任務自身或其他應用任務的信息,查詢即將TCB的內(nèi)容輸出。
(3)掛起任務。掛起優(yōu)先級為1的任務,則優(yōu)先級為6的任務開始執(zhí)行。掛起的任務處于等待狀態(tài),只有通過調(diào)用任務恢復函數(shù)才能恢復。
(4)建立任務。建立優(yōu)先級分別為5、2和4的3個任務。優(yōu)先級為5的任務剝奪優(yōu)先級為6的任務的CPU使用權,優(yōu)先級為2的任務又剝奪優(yōu)先級為5的任務的CPU使用權開始執(zhí)行,優(yōu)先級為4的任務等待。
(5)刪除任務。刪除了優(yōu)先級為2的任務,此刻系統(tǒng)中優(yōu)先級為4的任務開始執(zhí)行。
(6)恢復任務?;謴蛢?yōu)先級為1的任務,優(yōu)先級為1的任務剝奪優(yōu)先級為4的任務的CPU使用權又重新開始執(zhí)行。
從圖6可以看出,硬件實現(xiàn)可以高效完成操作系統(tǒng)任務管理的系統(tǒng)調(diào)用的功能。建立任務和刪除任務需要3個時鐘節(jié)拍,掛起任務、恢復任務和查詢?nèi)蝿盏臓顟B(tài)需要1個時鐘節(jié)拍。任務調(diào)度是實時的,只要任務的狀態(tài)或優(yōu)先級有一個發(fā)生改變,就立刻重新調(diào)度。該設計所消耗的邏輯資源較少,降低了開發(fā)成本,使其集成組件成為可能。
本文針對傳統(tǒng)實時操作系統(tǒng)內(nèi)核占用系統(tǒng)資源、影響系統(tǒng)實時性的問題,提出了用單獨的硬件電路實現(xiàn)實時操作系統(tǒng)中的系統(tǒng)調(diào)用和任務調(diào)度器的方案。重點給出了采用FPGA實現(xiàn)μC/OS-Ⅱ任務管理模塊的過程。仿真結果表明,任務管理的硬件實現(xiàn)保持了系統(tǒng)調(diào)用的正確性,同時減少了系統(tǒng)調(diào)用的執(zhí)行時間、降低了處理器系統(tǒng)開銷。因此,硬件RTOS的實現(xiàn),具有一定研究和使用價值。
北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...
關鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心要問機器人公司哪家強,波士頓動力絕對是其中的佼佼者。近來年該公司在機器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開發(fā)的機器人會后空翻,自主爬樓梯等。這不,波士頓動力又發(fā)布了其機器人組團跳男團舞的新視頻,表演的機器人包括...
關鍵字: 機器人 BSP 工業(yè)機器人 現(xiàn)代汽車