一種基于FPGA的??臻g管理器的研究和設計
3.2地址產(chǎn)生邏輯模塊設計
堆棧地址指針SP決定了堆??臻g單元的數據正確入棧和出棧,堆棧地址指針SP的獲得在于如何驅動(dòng)讀/寫(xiě)邏輯模塊和中斷棧模塊。為了確保被保護數據的有效性和實(shí)時(shí)性,防止出現不確定狀態(tài),須在時(shí)序同步的狀態(tài)下,對數據進(jìn)行操作,如圖5所示。
在地址產(chǎn)生邏輯設計時(shí),先對堆棧地址寄存器組賦初值,該模擬系統管理8個(gè)任務(wù),有9個(gè)堆棧地址寄存器,分別為8個(gè)任務(wù)堆棧地址寄存器和1個(gè)中斷嵌套棧堆棧地址寄存器。
當任務(wù)優(yōu)先級Prio信號和中斷使能int_en信號同時(shí)驅動(dòng)多路選擇器時(shí),堆棧地址指針SP從堆棧地址寄存器組中選擇存放在Pregx中的當前任務(wù)的地址,在設計的??臻g管理器中,SP指向??臻g的下一個(gè)存儲單元的地址。如果入??刂菩盘栍行?,則SP作為??臻g的尋址地址,寫(xiě)入數據,SP加1;如果出??刂菩盘栍行?,則SP減1,改變后的SP值作為??臻g的尋址地址,讀出數據。操作完成后,改變后的SP值寫(xiě)回到對應的堆棧地址寄存器組Pregx中。
4仿真結果分析
本??臻g管理器容量為10KB,寬度為16bit。在ISE8.2i開(kāi)發(fā)軟件中進(jìn)行了綜合和仿真,設計中使用了294個(gè)Slices芯片、396個(gè)觸發(fā)器芯片、274個(gè)inputLUTs、60個(gè)boundedIOBs、1個(gè)塊BRAMs。
仿真時(shí),輸入十進(jìn)制數的數據,圖6為系統時(shí)序仿真波形圖。
(1)當INT無(wú)效時(shí),即系統中不存在中斷或中斷嵌套。在push有效的情況下,置prio信號值為2,data_in信號值分別為32768、57908。仿真時(shí),輸出結果為:used信號值分別為1、2,而ostcbstkptr信號值分別為128、129;同理,在pop有效情況下,置prio信號值為2,觀(guān)察仿真結果為:dout_out信號值分別為32768、57908,used的信號值分別為1、0,ostcbstkptr信號值分別為129、128。由此可得,在無(wú)中斷處理的條件下,根據任務(wù)的優(yōu)先級prio,按LIFO原則在任務(wù)棧中寫(xiě)入和讀出數據,并且每次的有效操作同時(shí)修改當前任務(wù)的used和ostcbstkptr信號值。
(2)當INT有效時(shí),即系統中產(chǎn)生中斷或存在中斷嵌套。在push有效的情況下,置prio信號值為6及data_in信號值為8192,觀(guān)察仿真結果為:used信號值依次為1、2、3、4,ostcbstkptr信號值依次為576、577、578、579;同理,在pop有效情況下,置prio為6,此時(shí)的仿真結果:data_out信號值為8192,used信號值依次輸出4、3、2、1,ostcbstkptr信號值依次輸出579、578、577、576。由此可得,當系統中產(chǎn)生中斷或存在中斷嵌套,按LIFO原則在中斷嵌套棧中寫(xiě)入和讀出數據,并且每次有效操作同時(shí)修改中斷嵌套棧的used和ostcbstkptr的值。
評論