《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于FPGA的棧空間管理器的研究和設(shè)計
基于FPGA的??臻g管理器的研究和設(shè)計
來源:電子技術(shù)應(yīng)用2010年第7期
李 巖,賈小梨
哈爾濱理工大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱150080
摘要: 提出了一種將堆??臻g劃分為任務(wù)棧和中斷嵌套棧的設(shè)計結(jié)構(gòu),使堆??臻g最小化。采用VHDL硬件語言,在FPGA設(shè)備上模擬實現(xiàn)了具有自動檢驗功能的??臻g管理器。??臻g管理器由不同功能的邏輯模塊組成,主要闡述了狀態(tài)控制邏輯模塊和地址產(chǎn)生邏輯模塊的設(shè)計方法。
中圖分類號: TP316.2
文獻(xiàn)標(biāo)識碼: 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è)控制、汽車電子和核電站建設(shè)等領(lǐng)域的高速發(fā)展,對嵌入式操作系統(tǒng)實時性的要求越來越高。同時,由于FPGA的集成度和速度的不斷提高,使嵌入式操作系統(tǒng)硬件化實現(xiàn)成為發(fā)展趨勢。硬實時操作系統(tǒng)中的堆棧管理對系統(tǒng)的實時性和可靠性起著至關(guān)重要的作用,而傳統(tǒng)操作系統(tǒng)內(nèi)核是將每個任務(wù)的堆??臻g直接進(jìn)行最大化處理,導(dǎo)致大量存儲空間浪費,另外采用通用RAM尋址方式也不能滿足對被切換任務(wù)信息的快速保護(hù)。
    基于上述問題,本文提出了一種堆棧空間結(jié)構(gòu),設(shè)計了一款具有自動檢驗功能的棧空間管理器,并在Xilinx公司的集成開發(fā)環(huán)境FPGA系統(tǒng)上實現(xiàn)。
1 堆??臻g結(jié)構(gòu)
    堆??臻g是按先進(jìn)后出(LIFO)原則分配的連續(xù)存儲器空間,可以滿足保護(hù)任務(wù)切換信息和中斷響應(yīng)時保護(hù)處理器狀態(tài)和任務(wù)參數(shù)數(shù)據(jù)的需要[1],且對每個任務(wù)分配一個單獨的任務(wù)棧和一個響應(yīng)系統(tǒng)中斷任務(wù)的中斷嵌套棧[2]。如圖1所示,棧空間劃分為n個任務(wù)棧和1個中斷嵌套棧。

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

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

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

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

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

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