航空航天、工業控制、汽車電子和核電站建設等領域的高速發展,對嵌入式操作系統實時性的要求越來越高。同時,由于FPGA的集成度和速度的不斷提高,使嵌入式操作系統硬件化實現成為發展趨勢。硬實時操作系統中的堆棧管理對系統的實時性和可靠性起著至關重要的作用,而傳統操作系統內核是將每個任務的堆棧空間直接進行最大化處理,導致大量存儲空間浪費,另外采用通用RAM尋址方式也不能滿足對被切換任務信息的快速保護。
基于上述問題,本文提出了一種堆棧空間結構,設計了一款具有自動檢驗功能的棧空間管理器,并在Xilinx公司的集成開發環境FPGA系統上實現。
1 堆棧空間結構
堆棧空間是按先進后出(LIFO)原則分配的連續存儲器空間,可以滿足保護任務切換信息和中斷響應時保護處理器狀態和任務參數數據的需要,且對每個任務分配一個單獨的任務棧和一個響應系統中斷任務的中斷嵌套棧。如圖1所示,棧空間劃分為n個任務棧和1個中斷嵌套棧。
任務棧主要保護被切換任務的信息。它存放的數據有:任務代碼首地址、任務參數、任務中定義的局部變量、被調用函數的參數和局部變量及任務中各個函數的返回地址。中斷嵌套棧存放被中斷任務的數據,包括發生中斷時需要保存的上下文、中斷嵌套時需要保存的上下文和中斷服務程序的局部變量。
在硬實時操作系統中,當發生中斷或中斷嵌套時,堆棧地址指針從任務棧切換到中斷嵌套棧。當所有的中斷服務程序全部執行完成后,堆棧地址指針從中斷嵌套棧切換到任務棧,繼續執行該被中斷的任務。這種管理方式同以往操作系統采用被中斷任務的數據保存到相應任務堆棧的方法相比,更有效節約了堆棧空間開銷。
2 棧空間管理器總體結構
為了節約RAM開銷,從總體結構上構建了一款具有LIFO及自檢功能的棧空間管理器。棧空間管理器結構包括一個雙端口存儲單元、狀態控制邏輯模塊、地址產生邏輯模塊、中斷判斷邏輯。其中狀態控制邏輯模塊由空/滿標志產生邏輯、二進制運算邏輯和標志寄存器組3部分組成;地址產生邏輯模塊由讀/寫地址邏輯、中斷棧邏輯和地址寄存器組3部分組成。
由圖2可知,狀態控制邏輯模塊的工作過程為:從標志寄存器組中讀出當前任務棧的使用量fcount信號值,fcount信號值傳送至二進制運算邏輯。在讀/寫控制信號有效的情況下,二進制運算邏輯有效,修改fcount信號值,修改后的值作為USED的輸出值,同時寫回到標志寄存器的對應fcount位中。修改后的信號值也作為空/滿標志產生邏輯的輸入信號,空/滿標志產生邏輯生成Full/Empty標志,并把該標志位寫回到標志寄存器對應位Full/Empty中。其中標志寄存器freg的結構如圖3所示,初始值為0000001000000000B。
中斷判斷邏輯由輸入信號INT與標志寄存器位IntNesting值決定是否有效。如果有中斷發生,則中斷棧邏輯有效,中斷棧邏輯生成讀/寫地址,否則讀/寫地址邏輯有效,生成相應的讀/寫地址。
在讀/寫控制信號有效的情況下,從堆棧地址寄存器組中讀出當前任務的地址,經過讀/寫地址邏輯或中斷棧邏輯產生堆棧地址指針,作為HOS堆棧空間的入棧/出棧地址。執行入棧時,在同步時鐘和入棧控制信號有效的情況下,中斷判斷邏輯判斷是否存在中斷或中斷嵌套,如果沒有,則由寫地址邏輯生成入棧地址;否則由中斷棧邏輯生成寫地址。同理,執行出棧時,在同步時鐘和出棧控制信號有效的情況下,中斷判斷邏輯判斷是否存在中斷或中斷嵌套,如果沒有,則讀地址邏輯生成出棧地址;否則中斷棧邏輯生成出棧地址。
3 棧空間管理器設計
為了快速、有效地保護被切換任務的信息,并滿足自動檢驗功能的要求,在棧空間管理器設計中設計了2個邏輯模塊,分別為狀態控制邏輯模塊和地址產生邏輯模塊。狀態控制邏輯模塊主要生成入棧/出棧控制信號和Used信號,地址產生邏輯模塊主要生成有效的入棧/出棧地址。基于對棧空間管理器總體結構工作過程的闡述,在Xilinx公司設計的XUPVirtexIIPro系列的芯片上設計一個模擬棧空間管理器,模擬管理8個任務,任務棧的深度為64,寬度為16bit,中斷嵌套棧的深度為128,寬度為16bit,容量為10KB的堆棧空間。在設計管理器中,保證管理器快速綜合,使占用FPGA的資源盡可能少,存儲單元的選擇是關鍵,該系統采用的是FPGA上一個18KB的BlockRAM資源,使用ISE8.2i提供的雙端口RAM存儲模塊的IP核。如果選擇其他方法,如用觸發器和寄存器搭建存儲單元,則綜合時間長,且占用大量FPGA的Slices資源。
在實際嵌入式系統應用中,根據系統要求,可計算出棧空間深度和寬度,具體的深度和寬度在VHDL代碼中修改即可。
3.1狀態控制邏輯模塊設計
由于狀態標志寄存器的空/滿狀態標志位決定棧空間入棧/出棧操作,所以如何設計空/滿狀態標志位是關鍵。為了保護的數據能正確入棧與出棧,防止存儲器出現向上溢出或向下溢出,保證在滿的情況下,不能進行push操作;在空的狀態下,不能進行pop操作。控制信號的產生過程如圖4所示。
在狀態控制邏輯模塊設計時,prio_int信號驅動4個多路選擇器,選擇對應狀態標志寄存器組中的各位段,分別有full信號值、empty信號值、fcount信號值和intNesting信號值。empty/full信號和push/pop信號作為組合邏輯輸入信號產生相應的push_en/pop_en有效控制信號,該控制信號決定棧空間是否執行入棧/出棧操作。
在push_en/pop_en控制信號有效的情況下,驅動二進制運算邏輯加/減1,輸出運算結果。輸出的信號值有3個用途:(1)作為空/滿標志狀態產生邏輯的輸入信號,該信號邏輯產生empty/full信號;(2)寫回到fregx對應的fcount位中;(3)作為Used輸出信號值,表示當前任務棧或中斷嵌套棧的使用情況。
在產生empty、full信號邏輯模塊設計時,采用了對輸入信號的每一位進行組合邏輯判斷的方法,使該信號分兩路,一路作為與門組合邏輯的輸入信號產生full信號。如果輸入信號的每一位都為1,則full信號置1,其他情況置0;另一路作為或門非組合邏輯的輸入信號產生empty信號。如果輸入信號的每一位都為0,則empty置1,其他情況置0。在整個邏輯模塊設計中,采用組合邏輯設計,目的是縮短工作時延,提高系統工作頻率。
3.2地址產生邏輯模塊設計
堆棧地址指針SP決定了堆棧空間單元的數據正確入棧和出棧,堆棧地址指針SP的獲得在于如何驅動讀/寫邏輯模塊和中斷棧模塊。為了確保被保護數據的有效性和實時性,防止出現不確定狀態,須在時序同步的狀態下,對數據進行操作,如圖5所示。
在地址產生邏輯設計時,先對堆棧地址寄存器組賦初值,該模擬系統管理8個任務,有9個堆棧地址寄存器,分別為8個任務堆棧地址寄存器和1個中斷嵌套棧堆棧地址寄存器。
當任務優先級Prio信號和中斷使能int_en信號同時驅動多路選擇器時,堆棧地址指針SP從堆棧地址寄存器組中選擇存放在Pregx中的當前任務的地址,在設計的棧空間管理器中,SP指向棧空間的下一個存儲單元的地址。如果入棧控制信號有效,則SP作為棧空間的尋址地址,寫入數據,SP加1;如果出棧控制信號有效,則SP減1,改變后的SP值作為棧空間的尋址地址,讀出數據。操作完成后,改變后的SP值寫回到對應的堆棧地址寄存器組Pregx中。
4 仿真結果分析
本棧空間管理器容量為10KB,寬度為16bit。在ISE8.2i開發軟件中進行了綜合和仿真,設計中使用了294個Slices芯片、396個觸發器芯片、274個inputLUTs、60個boundedIOBs、1個塊BRAMs。
仿真時,輸入十進制數的數據,圖6為系統時序仿真波形圖。
(1)當INT無效時,即系統中不存在中斷或中斷嵌套。在push有效的情況下,置prio信號值為2,data_in信號值分別為32768、57908。仿真時,輸出結果為:used信號值分別為1、2,而ostcbstkptr信號值分別為128、129;同理,在pop有效情況下,置prio信號值為2,觀察仿真結果為:dout_out信號值分別為32768、57908,used的信號值分別為1、0,ostcbstkptr信號值分別為129、128。由此可得,在無中斷處理的條件下,根據任務的優先級prio,按LIFO原則在任務棧中寫入和讀出數據,并且每次的有效操作同時修改當前任務的used和ostcbstkptr信號值。
(2)當INT有效時,即系統中產生中斷或存在中斷嵌套。在push有效的情況下,置prio信號值為6及data_in信號值為8192,觀察仿真結果為:used信號值依次為1、2、3、4,ostcbstkptr信號值依次為576、577、578、579;同理,在pop有效情況下,置prio為6,此時的仿真結果:data_out信號值為8192,used信號值依次輸出4、3、2、1,ostcbstkptr信號值依次輸出579、578、577、576。由此可得,當系統中產生中斷或存在中斷嵌套,按LIFO原則在中斷嵌套棧中寫入和讀出數據,并且每次有效操作同時修改中斷嵌套棧的used和ostcbstkptr的值。
由以上結果分析可知,該實驗驗證了棧空間管理器的正確性,符合系統設計的要求。
本文分析了堆棧空間結構及對被切換任務相應數據信息的保護,并對堆棧空間進行了合理的結構劃分。實驗數據表明了該系統的可行性和穩定性。棧空間管理器能有效節約硬實時操作系統分配堆棧空間的時間,減少RAM存儲空間。從硬件角度上看,簡化了設計,降低了成本,具有一定的使用價值。目前只在實驗平臺上仿真,下一步擬將棧空間管理器的IP核應用于硬實時操作系統,以提高操作系統的運行效率。
-
FPGA
+關注
關注
1630文章
21761瀏覽量
604448 -
嵌入式
+關注
關注
5087文章
19149瀏覽量
306230 -
操作系統
+關注
關注
37文章
6856瀏覽量
123458
發布評論請先 登錄
相關推薦
評論