一種基于FPGA的??臻g管理器的研究和設(shè)計(jì)
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的下一個(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管理器容量為10KB,寬度為16bit。在ISE8.2i開(kāi)發(fā)軟件中進(jìn)行了綜合和仿真,設(shè)計(jì)中使用了294個(gè)Slices芯片、396個(gè)觸發(fā)器芯片、274個(gè)inputLUTs、60個(gè)boundedIOBs、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)值分別為32768、57908。仿真時(shí),輸出結(jié)果為:used信號(hào)值分別為1、2,而ostcbstkptr信號(hào)值分別為128、129;同理,在pop有效情況下,置prio信號(hào)值為2,觀察仿真結(jié)果為:dout_out信號(hào)值分別為32768、57908,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的值。
評(píng)論