《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于FPGA的棧空間管理器的研究和設(shè)計
基于FPGA的棧空間管理器的研究和設(shè)計
來源:電子技術(shù)應(yīng)用2010年第7期
李 巖,賈小梨
哈爾濱理工大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱150080
摘要: 提出了一種將堆棧空間劃分為任務(wù)棧和中斷嵌套棧的設(shè)計結(jié)構(gòu),使堆棧空間最小化。采用VHDL硬件語言,在FPGA設(shè)備上模擬實現(xiàn)了具有自動檢驗功能的棧空間管理器。棧空間管理器由不同功能的邏輯模塊組成,主要闡述了狀態(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ù)的堆棧空間直接進(jìn)行最大化處理,導(dǎo)致大量存儲空間浪費,另外采用通用RAM尋址方式也不能滿足對被切換任務(wù)信息的快速保護(hù)。
    基于上述問題,本文提出了一種堆棧空間結(jié)構(gòu),設(shè)計了一款具有自動檢驗功能的棧空間管理器,并在Xilinx公司的集成開發(fā)環(huán)境FPGA系統(tǒng)上實現(xiàn)。
1 堆棧空間結(jié)構(gòu)
    堆棧空間是按先進(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 棧空間管理器總體結(jié)構(gòu)
    為了節(jié)約RAM開銷,從總體結(jié)構(gòu)上構(gòu)建了一款具有LIFO及自檢功能的棧空間管理器。棧空間管理器結(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 堆棧空間的入棧/出棧地址。執(zhí)行入棧時,在同步時鐘和入棧控制信號有效的情況下,中斷判斷邏輯判斷是否存在中斷或中斷嵌套,如果沒有,則由寫地址邏輯生成入棧地址;否則由中斷棧邏輯生成寫地址。同理,執(zhí)行出棧時,在同步時鐘和出棧控制信號有效的情況下,中斷判斷邏輯判斷是否存在中斷或中斷嵌套,如果沒有,則讀地址邏輯生成出棧地址;否則中斷棧邏輯生成出棧地址。
3 棧空間管理器設(shè)計
    為了快速、有效地保護(hù)被切換任務(wù)的信息,并滿足自動檢驗功能的要求,在棧空間管理器設(shè)計中設(shè)計了2個邏輯模塊,分別為狀態(tài)控制邏輯模塊和地址產(chǎn)生邏輯模塊。狀態(tài)控制邏輯模塊主要生成入棧/出棧控制信號和Used信號,地址產(chǎn)生邏輯模塊主要生成有效的入棧/出棧地址。基于對棧空間管理器總體結(jié)構(gòu)工作過程的闡述,在Xilinx公司設(shè)計的XUP Virtex II Pro 系列的芯片上設(shè)計一個模擬棧空間管理器,模擬管理8個任務(wù),任務(wù)棧的深度為64,寬度為16 bit,中斷嵌套棧的深度為128,寬度為16 bit,容量為10 KB的堆棧空間。在設(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)志位決定棧空間入棧/出棧操作,所以如何設(shè)計空/滿狀態(tài)標(biāo)志位是關(guān)鍵。為了保護(hù)的數(shù)據(jù)能正確入棧與出棧,防止存儲器出現(xiàn)向上溢出或向下溢出,保證在滿的情況下,不能進(jìn)行push操作;在空的狀態(tài)下,不能進(jìn)行pop操作。控制信號的產(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ù)棧或中斷嵌套棧的使用情況。
    在產(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決定了堆棧空間單元的數(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指向棧空間的下一個存儲單元的地址。如果入棧控制信號有效,則SP作為棧空間的尋址地址,寫入數(shù)據(jù),SP加1;如果出棧控制信號有效,則SP減1,改變后的SP值作為棧空間的尋址地址,讀出數(shù)據(jù)。操作完成后,改變后的SP值寫回到對應(yīng)的堆棧地址寄存器組Pregx中。
4 仿真結(jié)果分析
    本棧空間管理器容量為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è)計的要求。
    本文分析了堆棧空間結(jié)構(gòu)及對被切換任務(wù)相應(yīng)數(shù)據(jù)信息的保護(hù),并對堆棧空間進(jìn)行了合理的結(jié)構(gòu)劃分。實驗數(shù)據(jù)表明了該系統(tǒng)的可行性和穩(wěn)定性。棧空間管理器能有效節(jié)約硬實時操作系統(tǒng)分配堆棧空間的時間,減少RAM存儲空間。從硬件角度上看,簡化了設(shè)計,降低了成本,具有一定的使用價值。目前只在實驗平臺上仿真,下一步擬將棧空間管理器的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].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004(5):73-74.
[3] 尹震宇,趙海,王金英,等.一種嵌入式處理器上的設(shè)計[J].計算機(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].計算機(jī)應(yīng)用,2009,29(4):1165-1167.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美影院精品一区| 亚洲影院污污.| 一区二区三区福利| 亚洲国产精品久久久久秋霞不卡 | 欧美与黑人午夜性猛交久久久| 中文亚洲视频在线| 亚洲视频视频在线| 亚洲天堂久久| 亚洲一区二区成人在线观看| 中文一区二区| 在线一区视频| 亚洲一区自拍| 香蕉久久夜色精品| 欧美呦呦网站| 亚洲黄色影院| 亚洲精品一区二区三区99| 亚洲精品中文字幕在线| 日韩亚洲在线| 亚洲午夜精品17c| 亚洲一区二区三区四区视频| 亚洲一区在线播放| 羞羞答答国产精品www一本| 香蕉成人久久| 久久精品夜夜夜夜久久| 久久只精品国产| 欧美激情一区二区在线 | 亚洲一级二级| 欧美亚洲一区二区在线| 欧美在线视频在线播放完整版免费观看| 欧美一区永久视频免费观看| 久久久精品性| 欧美国产日韩一区二区三区| 欧美日韩精品福利| 国产精品嫩草99a| 国产亚洲精品久久久久婷婷瑜伽 | 中国成人黄色视屏| 亚洲欧美日韩中文播放| 久久国产精品久久久久久| 亚洲人成精品久久久久| 一本色道久久综合亚洲二区三区| 亚洲影院高清在线| 久久精品国产综合| 欧美黑人在线观看| 欧美性片在线观看| 国产视频不卡| 亚洲国产欧美一区| 一区二区三区精密机械公司 | 久久亚洲精品一区| 欧美激情日韩| 国产精品女主播一区二区三区| 国产偷自视频区视频一区二区| 又紧又大又爽精品一区二区| 亚洲精品四区| 欧美一级视频精品观看| 亚洲日韩成人| 欧美亚洲在线观看| 欧美精品在线免费| 国产欧美日韩在线播放| 亚洲电影在线观看| 亚洲在线网站| 日韩视频免费在线| 欧美在线资源| 欧美精品尤物在线| 国产综合精品| 这里只有精品丝袜| 91久久夜色精品国产九色| 亚洲一区影音先锋| 美女脱光内衣内裤视频久久网站| 欧美视频一区二区三区…| 国产综合精品一区| 正在播放亚洲| 亚洲精品一区二区三区蜜桃久| 午夜精品久久久久久久99水蜜桃| 另类尿喷潮videofree| 国产精品久久久久91| 亚洲高清久久久| 亚洲欧美中日韩| 一区二区三区国产盗摄| 久久综合国产精品| 国产精品普通话对白| 亚洲国产精品一区二区尤物区| 亚洲欧美怡红院| 亚洲视频一二| 欧美激情在线狂野欧美精品| 国产一区免费视频| 亚洲一区高清| 一区二区三区波多野结衣在线观看| 久久先锋影音| 国产亚洲欧美另类中文| 亚洲一区二区三区精品在线 | 久久裸体艺术| 国产乱码精品1区2区3区| 日韩网站在线看片你懂的| 亚洲国产精品一区二区第一页| 欧美怡红院视频| 国产精品初高中精品久久| 亚洲国产精品小视频| 久久精品欧美日韩精品| 久久成人国产| 国产精品久久亚洲7777| 一本大道久久a久久精品综合| 亚洲精品免费一二三区| 免费成人高清在线视频| 狠狠色丁香婷婷综合| 小处雏高清一区二区三区| 午夜精品久久久| 国产精品地址| 一区二区三区免费在线观看| 一本色道久久综合狠狠躁篇怎么玩| 欧美不卡视频一区| 精品成人免费| 亚洲激情视频在线观看| 美女诱惑一区| 亚洲成人资源网| 亚洲欧洲在线一区| 欧美成人激情在线| 亚洲第一福利社区| 亚洲激情在线观看| 女人天堂亚洲aⅴ在线观看| 曰韩精品一区二区| 亚洲国产成人精品久久久国产成人一区 | 亚洲国产视频a| 日韩午夜中文字幕| 欧美日韩亚洲一区二区| 9l国产精品久久久久麻豆| 亚洲无线一线二线三线区别av| 欧美日韩在线观看一区二区三区 | 国产欧美午夜| 午夜精品一区二区三区电影天堂| 午夜精品久久久久久久99黑人| 国产精品毛片高清在线完整版| 国产精品99久久久久久久vr | 亚洲国产另类久久精品| 暖暖成人免费视频| 亚洲人成在线观看| 亚洲无人区一区| 国产精品日韩一区二区三区| 亚洲欧美激情诱惑| 久久精品视频va| 国产一区二区三区的电影| 亚洲国产另类久久精品| 欧美精品在线一区| 亚洲网站啪啪| 久久蜜桃资源一区二区老牛| 亚洲丰满在线| 亚洲视频在线一区| 国产精品自在线| 亚洲黄色在线观看| 欧美日韩视频第一区| 亚洲欧美日韩国产中文| 老司机午夜精品视频| 亚洲日本aⅴ片在线观看香蕉| 亚洲自拍16p| 国产一区二三区| 99国产麻豆精品| 国产精品一区二区久久久| 亚洲电影免费在线 | 亚洲专区在线视频| 久久人人97超碰精品888| 91久久久亚洲精品| 亚洲欧美日韩另类精品一区二区三区 | 狠狠色伊人亚洲综合成人| 亚洲精品乱码久久久久久久久| 欧美午夜视频网站| 欧美在线中文字幕| 欧美日韩成人免费| 性高湖久久久久久久久| 欧美成人精品激情在线观看| 一区二区三区高清不卡| 久久女同互慰一区二区三区| 亚洲麻豆av| 久久麻豆一区二区| 一区二区高清视频在线观看| 久久久www成人免费毛片麻豆| 亚洲欧洲精品天堂一级 | 久久精品国产精品亚洲精品| 亚洲国产精品黑人久久久| 午夜久久福利| 亚洲国产精品va在看黑人| 欧美亚洲一区| 亚洲精品一二| 久久久久国产一区二区三区四区| 亚洲美女黄色片| 久热精品视频在线免费观看 | 久久高清国产| 国产精品美女xx| 亚洲精品资源| 国产一区二区三区成人欧美日韩在线观看| 99热这里只有成人精品国产| 国模大胆一区二区三区| 亚洲自拍啪啪| 亚洲人成在线观看一区二区| 久久久久久久综合| 亚洲一区二区三区涩| 欧美交受高潮1| 亚洲二区精品| 国产欧美一区二区色老头 | 久久gogo国模裸体人体| 国产精品爽黄69| 在线亚洲自拍|