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

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

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

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

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

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

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