《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA的棧空間管理器的研究和設計
基于FPGA的??臻g管理器的研究和設計
來源:電子技術應用2010年第7期
李 巖,賈小梨
哈爾濱理工大學 計算機科學與技術學院,黑龍江 哈爾濱150080
摘要: 提出了一種將堆棧空間劃分為任務棧和中斷嵌套棧的設計結構,使堆棧空間最小化。采用VHDL硬件語言,在FPGA設備上模擬實現(xiàn)了具有自動檢驗功能的??臻g管理器。??臻g管理器由不同功能的邏輯模塊組成,主要闡述了狀態(tài)控制邏輯模塊和地址產(chǎn)生邏輯模塊的設計方法。
中圖分類號: TP316.2
文獻標識碼: B
文章編號: 0258-7998(2010)07-0062-04
The research and design of stack space manager on FPGA
LI Yan,JIA Xiao Li
College of Computer Science and Technology,Harbin University of Science and Technology, Harbin 150080,China
Abstract: This paper puts forward a design structure which is divided into two parts, task stack and interrupt nesting stack in order to minimize the stack space. In the FPGA device, using VHDL language, the stack space manager which consists of different functions of the logical module has been achieved with the automatic check function. The state control logical module and the address logical module both have been illustrated in detail in this paper.
Key words : hardware operating system;task stack space;interrupt nesting stack;FPGA

    航空航天、工業(yè)控制、汽車電子和核電站建設等領域的高速發(fā)展,對嵌入式操作系統(tǒng)實時性的要求越來越高。同時,由于FPGA的集成度和速度的不斷提高,使嵌入式操作系統(tǒng)硬件化實現(xiàn)成為發(fā)展趨勢。硬實時操作系統(tǒng)中的堆棧管理對系統(tǒng)的實時性和可靠性起著至關重要的作用,而傳統(tǒng)操作系統(tǒng)內(nèi)核是將每個任務的堆??臻g直接進行最大化處理,導致大量存儲空間浪費,另外采用通用RAM尋址方式也不能滿足對被切換任務信息的快速保護。
    基于上述問題,本文提出了一種堆??臻g結構,設計了一款具有自動檢驗功能的??臻g管理器,并在Xilinx公司的集成開發(fā)環(huán)境FPGA系統(tǒng)上實現(xiàn)。
1 堆??臻g結構
    堆棧空間是按先進后出(LIFO)原則分配的連續(xù)存儲器空間,可以滿足保護任務切換信息和中斷響應時保護處理器狀態(tài)和任務參數(shù)數(shù)據(jù)的需要[1],且對每個任務分配一個單獨的任務棧和一個響應系統(tǒng)中斷任務的中斷嵌套棧[2]。如圖1所示,??臻g劃分為n個任務棧和1個中斷嵌套棧。

    任務棧主要保護被切換任務的信息。它存放的數(shù)據(jù)有:任務代碼首地址、任務參數(shù)、任務中定義的局部變量、被調用函數(shù)的參數(shù)和局部變量及任務中各個函數(shù)的返回地址。中斷嵌套棧存放被中斷任務的數(shù)據(jù),包括發(fā)生中斷時需要保存的上下文、中斷嵌套時需要保存的上下文和中斷服務程序的局部變量。
    在硬實時操作系統(tǒng)中,當發(fā)生中斷或中斷嵌套時,堆棧地址指針從任務棧切換到中斷嵌套棧。當所有的中斷服務程序全部執(zhí)行完成后,堆棧地址指針從中斷嵌套棧切換到任務棧,繼續(xù)執(zhí)行該被中斷的任務。這種管理方式同以往操作系統(tǒng)采用被中斷任務的數(shù)據(jù)保存到相應任務堆棧的方法相比,更有效節(jié)約了堆??臻g開銷[3,4]。
2 棧空間管理器總體結構
    為了節(jié)約RAM開銷,從總體結構上構建了一款具有LIFO及自檢功能的棧空間管理器。棧空間管理器結構包括一個雙端口存儲單元、狀態(tài)控制邏輯模塊、地址產(chǎn)生邏輯模塊、中斷判斷邏輯。其中狀態(tài)控制邏輯模塊由空/滿標志產(chǎn)生邏輯、二進制運算邏輯和標志寄存器組3部分組成;地址產(chǎn)生邏輯模塊由讀/寫地址邏輯、中斷棧邏輯和地址寄存器組3部分組成。
    由圖2可知,狀態(tài)控制邏輯模塊的工作過程為:從標志寄存器組中讀出當前任務棧的使用量fcount信號值,fcount信號值傳送至二進制運算邏輯。在讀/寫控制信號有效的情況下,二進制運算邏輯有效,修改fcount信號值,修改后的值作為USED的輸出值,同時寫回到標志寄存器的對應fcount位中。修改后的信號值也作為空/滿標志產(chǎn)生邏輯的輸入信號,空/滿標志產(chǎn)生邏輯生成Full/Empty標志,并把該標志位寫回到標志寄存器對應位Full/Empty中。其中標志寄存器freg的結構如圖3所示,初始值為0000001000000000B。

    中斷判斷邏輯由輸入信號INT與標志寄存器位IntNesting值決定是否有效。如果有中斷發(fā)生,則中斷棧邏輯有效,中斷棧邏輯生成讀/寫地址,否則讀/寫地址邏輯有效,生成相應的讀/寫地址。
    在讀/寫控制信號有效的情況下,從堆棧地址寄存器組中讀出當前任務的地址,經(jīng)過讀/寫地址邏輯或中斷棧邏輯產(chǎn)生堆棧地址指針,作為HOS 堆??臻g的入棧/出棧地址。執(zhí)行入棧時,在同步時鐘和入棧控制信號有效的情況下,中斷判斷邏輯判斷是否存在中斷或中斷嵌套,如果沒有,則由寫地址邏輯生成入棧地址;否則由中斷棧邏輯生成寫地址。同理,執(zhí)行出棧時,在同步時鐘和出??刂菩盘栍行У那闆r下,中斷判斷邏輯判斷是否存在中斷或中斷嵌套,如果沒有,則讀地址邏輯生成出棧地址;否則中斷棧邏輯生成出棧地址。
3 ??臻g管理器設計
    為了快速、有效地保護被切換任務的信息,并滿足自動檢驗功能的要求,在棧空間管理器設計中設計了2個邏輯模塊,分別為狀態(tài)控制邏輯模塊和地址產(chǎn)生邏輯模塊。狀態(tài)控制邏輯模塊主要生成入棧/出??刂菩盘柡蚒sed信號,地址產(chǎn)生邏輯模塊主要生成有效的入棧/出棧地址。基于對??臻g管理器總體結構工作過程的闡述,在Xilinx公司設計的XUP Virtex II Pro 系列的芯片上設計一個模擬棧空間管理器,模擬管理8個任務,任務棧的深度為64,寬度為16 bit,中斷嵌套棧的深度為128,寬度為16 bit,容量為10 KB的堆??臻g。在設計管理器中,保證管理器快速綜合,使占用FPGA的資源盡可能少,存儲單元的選擇是關鍵,該系統(tǒng)采用的是FPGA上一個18 KB的Block RAM資源,使用ISE 8.2i提供的雙端口RAM存儲模塊的 IP核。如果選擇其他方法,如用觸發(fā)器和寄存器搭建存儲單元,則綜合時間長,且占用大量FPGA的 Slices資源。
      在實際嵌入式系統(tǒng)應用中,根據(jù)系統(tǒng)要求,可計算出??臻g深度和寬度,具體的深度和寬度在VHDL代碼中修改即可。
3.1 狀態(tài)控制邏輯模塊設計
      由于狀態(tài)標志寄存器的空/滿狀態(tài)標志位決定??臻g入棧/出棧操作,所以如何設計空/滿狀態(tài)標志位是關鍵。為了保護的數(shù)據(jù)能正確入棧與出棧,防止存儲器出現(xiàn)向上溢出或向下溢出,保證在滿的情況下,不能進行push操作;在空的狀態(tài)下,不能進行pop操作。控制信號的產(chǎn)生過程如圖4所示。

    在狀態(tài)控制邏輯模塊設計時, prio_int信號驅動4個多路選擇器,選擇對應狀態(tài)標志寄存器組中的各位段,分別有full信號值、empty信號值、fcount信號值和intNesting信號值。 empty/full信號和push/pop信號作為組合邏輯輸入信號產(chǎn)生相應的push_en/pop_en有效控制信號,該控制信號決定棧空間是否執(zhí)行入棧/出棧操作。
    在push_en/pop_en控制信號有效的情況下,驅動二進制運算邏輯加/減1,輸出運算結果。輸出的信號值有3個用途:(1)作為空/滿標志狀態(tài)產(chǎn)生邏輯的輸入信號,該信號邏輯產(chǎn)生empty/full信號;(2)寫回到fregx對應的fcount位中;(3)作為Used輸出信號值,表示當前任務?;蛑袛嗲短讞5氖褂们闆r。
    在產(chǎn)生empty、full信號邏輯模塊設計時,采用了對輸入信號的每一位進行組合邏輯判斷的方法,使該信號分兩路,一路作為與門組合邏輯的輸入信號產(chǎn)生full信號。如果輸入信號的每一位都為1, 則full信號置1,其他情況置0;另一路作為或門非組合邏輯的輸入信號產(chǎn)生empty信號。如果輸入信號的每一位都為0, 則empty置1,其他情況置0。在整個邏輯模塊設計中,采用組合邏輯設計,目的是縮短工作時延,提高系統(tǒng)工作頻率。
3.2 地址產(chǎn)生邏輯模塊設計
    堆棧地址指針SP決定了堆??臻g單元的數(shù)據(jù)正確入棧和出棧,堆棧地址指針SP的獲得在于如何驅動讀/寫邏輯模塊和中斷棧模塊。為了確保被保護數(shù)據(jù)的有效性和實時性,防止出現(xiàn)不確定狀態(tài),須在時序同步的狀態(tài)下,對數(shù)據(jù)進行操作,如圖5所示。

    在地址產(chǎn)生邏輯設計時,先對堆棧地址寄存器組賦初值,該模擬系統(tǒng)管理8個任務,有9個堆棧地址寄存器,分別為8個任務堆棧地址寄存器和1個中斷嵌套棧堆棧地址寄存器。
    當任務優(yōu)先級Prio信號和中斷使能int_en信號同時驅動多路選擇器時,堆棧地址指針SP從堆棧地址寄存器組中選擇存放在Pregx中的當前任務的地址,在設計的棧空間管理器中,SP指向棧空間的下一個存儲單元的地址。如果入棧控制信號有效,則SP作為??臻g的尋址地址,寫入數(shù)據(jù),SP加1;如果出??刂菩盘栍行?,則SP減1,改變后的SP值作為棧空間的尋址地址,讀出數(shù)據(jù)。操作完成后,改變后的SP值寫回到對應的堆棧地址寄存器組Pregx中。
4 仿真結果分析
    本??臻g管理器容量為10 KB,寬度為16 bit。在ISE 8.2i開發(fā)軟件中進行了綜合和仿真,設計中使用了294個Slices芯片、396個觸發(fā)器芯片、274個input LUTs、60個bounded IOBs、1個塊BRAMs。
    仿真時,輸入十進制數(shù)的數(shù)據(jù),圖6為系統(tǒng)時序仿真波形圖。

    (1)當INT無效時,即系統(tǒng)中不存在中斷或中斷嵌套。在push有效的情況下,置prio信號值為2,data_in信號值分別為32 768、57 908。仿真時,輸出結果為:used信號值分別為1、2,而ostcbstkptr信號值分別為128、129;同理,在pop有效情況下,置prio信號值為2,觀察仿真結果為:dout_out信號值分別為32 768、57 908,used的信號值分別為1、0, ostcbstkptr信號值分別為129、128。由此可得,在無中斷處理的條件下,根據(jù)任務的優(yōu)先級prio,按LIFO原則在任務棧中寫入和讀出數(shù)據(jù),并且每次的有效操作同時修改當前任務的used和ostcbstkptr信號值。
    (2)當INT 有效時,即系統(tǒng)中產(chǎn)生中斷或存在中斷嵌套。在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。由此可得,當系統(tǒng)中產(chǎn)生中斷或存在中斷嵌套,按LIFO原則在中斷嵌套棧中寫入和讀出數(shù)據(jù),并且每次有效操作同時修改中斷嵌套棧的used和ostcbstkptr的值。
    由以上結果分析可知,該實驗驗證了??臻g管理器的正確性,符合系統(tǒng)設計的要求。
    本文分析了堆??臻g結構及對被切換任務相應數(shù)據(jù)信息的保護,并對堆棧空間進行了合理的結構劃分。實驗數(shù)據(jù)表明了該系統(tǒng)的可行性和穩(wěn)定性。??臻g管理器能有效節(jié)約硬實時操作系統(tǒng)分配堆棧空間的時間,減少RAM存儲空間。從硬件角度上看,簡化了設計,降低了成本,具有一定的使用價值。目前只在實驗平臺上仿真,下一步擬將??臻g管理器的IP核應用于硬實時操作系統(tǒng),以提高操作系統(tǒng)的運行效率。
參考文獻
[1] LABROSSE J J.嵌入式實時操作系統(tǒng)?滋C/OS-II[M],第2版.北京:北京航空航天大學出版社,2003.
[2] 楊少軍,李杭生.?滋C/OS-II任務棧處理的改進設計[J].單片機與嵌入式系統(tǒng)應用,2004(5):73-74.
[3] 尹震宇,趙海,王金英,等.一種嵌入式處理器上的設計[J].計算機工程,2008(3):268-270.
[4] 崔建華,孫紅勝,王保進.硬件實時操作系統(tǒng)的設計和實現(xiàn)[J].電子技術應用,2008(5):34-37.
[5] 田耘,徐文波.Xilinx FPGA開發(fā)實用教程[M].北京:清華大學出版社,2008.
[6] 張光建,劉政.基于樹結構的?滋C/OS-II任務棧空間計算方法及應用[J].計算機應用,2009,29(4):1165-1167.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載。