《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA的棧空間管理器的研究和設計
基于FPGA的棧空間管理器的研究和設計
來源:電子技術應用2010年第7期
李 巖,賈小梨
哈爾濱理工大學 計算機科學與技術學院,黑龍江 哈爾濱150080
摘要: 提出了一種將堆棧空間劃分為任務棧和中斷嵌套棧的設計結構,使堆棧空間最小化。采用VHDL硬件語言,在FPGA設備上模擬實現了具有自動檢驗功能的棧空間管理器。棧空間管理器由不同功能的邏輯模塊組成,主要闡述了狀態控制邏輯模塊和地址產生邏輯模塊的設計方法。
中圖分類號: 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

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

    任務棧主要保護被切換任務的信息。它存放的數據有:任務代碼首地址、任務參數、任務中定義的局部變量、被調用函數的參數和局部變量及任務中各個函數的返回地址。中斷嵌套棧存放被中斷任務的數據,包括發生中斷時需要保存的上下文、中斷嵌套時需要保存的上下文和中斷服務程序的局部變量。
    在硬實時操作系統中,當發生中斷或中斷嵌套時,堆棧地址指針從任務棧切換到中斷嵌套棧。當所有的中斷服務程序全部執行完成后,堆棧地址指針從中斷嵌套棧切換到任務棧,繼續執行該被中斷的任務。這種管理方式同以往操作系統采用被中斷任務的數據保存到相應任務堆棧的方法相比,更有效節約了堆棧空間開銷[3,4]。
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公司設計的XUP Virtex II Pro 系列的芯片上設計一個模擬棧空間管理器,模擬管理8個任務,任務棧的深度為64,寬度為16 bit,中斷嵌套棧的深度為128,寬度為16 bit,容量為10 KB的堆棧空間。在設計管理器中,保證管理器快速綜合,使占用FPGA的資源盡可能少,存儲單元的選擇是關鍵,該系統采用的是FPGA上一個18 KB的Block RAM資源,使用ISE 8.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 仿真結果分析
    本棧空間管理器容量為10 KB,寬度為16 bit。在ISE 8.2i開發軟件中進行了綜合和仿真,設計中使用了294個Slices芯片、396個觸發器芯片、274個input LUTs、60個bounded IOBs、1個塊BRAMs。
    仿真時,輸入十進制數的數據,圖6為系統時序仿真波形圖。

    (1)當INT無效時,即系統中不存在中斷或中斷嵌套。在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。由此可得,在無中斷處理的條件下,根據任務的優先級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核應用于硬實時操作系統,以提高操作系統的運行效率。
參考文獻
[1] LABROSSE J J.嵌入式實時操作系統?滋C/OS-II[M],第2版.北京:北京航空航天大學出版社,2003.
[2] 楊少軍,李杭生.?滋C/OS-II任務棧處理的改進設計[J].單片機與嵌入式系統應用,2004(5):73-74.
[3] 尹震宇,趙海,王金英,等.一種嵌入式處理器上的設計[J].計算機工程,2008(3):268-270.
[4] 崔建華,孫紅勝,王保進.硬件實時操作系統的設計和實現[J].電子技術應用,2008(5):34-37.
[5] 田耘,徐文波.Xilinx FPGA開發實用教程[M].北京:清華大學出版社,2008.
[6] 張光建,劉政.基于樹結構的?滋C/OS-II任務棧空間計算方法及應用[J].計算機應用,2009,29(4):1165-1167.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 国产女人乱人伦精品一区二区| 天天影视色香欲综合免费| 国产成人精品免费视频大全五级| a级毛片免费全部播放| 成人小视频在线观看| 久久久精品人妻一区二区三区| 杨幂精品国产福利在线| 亚洲欧洲日产国码一级毛片| 狠狠色欧美亚洲狠狠色www| 国产在线观看免费不卡| 2021成人国产精品| 在线免费观看中文字幕| 久久久久国产成人精品| 最近中文字幕免费版在线3| 亚洲成av人片高潮喷水| 波多野结衣bd| 交换同学会hd中字| 男女啪啪高清无遮挡免费| 国产在线视频www色| 日本aⅴ日本高清视频影片www| 国产精品成人va在线播放| 97精品人妻系列无码人妻| 无翼乌全彩我被闺蜜男口工全彩| 久久精品国产久精国产| 本子库全彩时间暂停| 亚洲黄网站wwwwww| 福利视频757| 八区精品色欲人妻综合网| 美国式禁忌在线播放| 国产aⅴ精品一区二区三区久久| 超薄肉色丝袜一区二区| 国产国产成人精品久久| 黑人巨大人精品欧美三区| 在线播放一区二区| freexx性欧美另类hd偷拍| 小明发布永久在线成人免费| 与子乱勾搭对白在线观看| 我爱我色成人网| 中文字幕亚洲综合久久综合| 搞av.com| 中文字幕在线免费|