資源描述:
《內(nèi)嵌bram設(shè)計(jì)lifo》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、大學(xué)實(shí)驗(yàn)報(bào)告課程名稱:數(shù)字系統(tǒng)現(xiàn)場(chǎng)集成技術(shù)實(shí)驗(yàn)項(xiàng)目名稱:實(shí)驗(yàn)三(內(nèi)嵌BRAM設(shè)計(jì)LIFO堆棧)學(xué)院:專業(yè):集成電路設(shè)計(jì)與集成系統(tǒng)指導(dǎo)教師:報(bào)告人學(xué)號(hào)實(shí)驗(yàn)時(shí)實(shí)驗(yàn)報(bào)告提交時(shí)間:教務(wù)部制實(shí)驗(yàn)?zāi)康呐c要求:基本要求:該實(shí)驗(yàn)為團(tuán)隊(duì)協(xié)作,2人一個(gè)小組。具有先進(jìn)后出的堆棧功能。此LIFO堆棧具有兩個(gè)按鍵(write,read),按下write鍵后,開始輸入數(shù)據(jù)data0-data3;按下read鍵后,7段數(shù)碼管開始倒序顯示data3-data0(十進(jìn)制)。實(shí)驗(yàn)最終達(dá)到效果:本實(shí)驗(yàn)效果:設(shè)計(jì)一個(gè)16位位深,8位位寬的bra
2、m,數(shù)碼管分別顯示要往bram里寫的數(shù)值,當(dāng)前讀寫bram的地址,以及從bram讀取出來的數(shù)值。數(shù)值的輸入采用八位撥碼開關(guān)進(jìn)行輸入,通過數(shù)碼管可以看出當(dāng)前撥碼開關(guān)對(duì)應(yīng)的數(shù)值,只要按下lifo的寫按鈕,就可以往bram里寫入當(dāng)前的值,寫了若干個(gè)數(shù)值后,每按下一次lifo的寫按鈕,就可以從bram里讀取一位數(shù)據(jù),顯示在數(shù)碼管上(由于VGA的顯示,需要大量編寫每個(gè)數(shù)字對(duì)應(yīng)的像素,較為繁瑣,所以本實(shí)驗(yàn)采用數(shù)碼管顯示)實(shí)驗(yàn)主要代碼(由于代碼較多,貼出主要代碼):數(shù)碼管驅(qū)動(dòng)代碼:moduleseg_drv(inputc
3、lk,inputrst,input[7:0]first_seg,input[7:0]second_seg,input[7:0]third_seg,//input[7:0]forth_seg,outputreg[3:0]an,outputreg[7:0]seg);localparam[1:0]s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;reg[1:0]state;always@(posedgeclk,posedgerst)beginif(rst)beginan<=4'b1111;s
4、eg<=8'b1111_1111;state<=s0;endelsebegincase(state)s0:beginan<=4'b1110;seg<=first_seg;if(ms_up)state<=s1;elsestate<=state;ends1:beginan<=4'b1101;seg<=second_seg;if(ms_up)state<=s2;elsestate<=state;ends2:beginan<=4'b1011;seg<=third_seg;if(ms_up)state<=s3;els
5、estate<=state;ends3:beginan<=4'b1111;seg<=1111_1111;if(ms_up)state<=s0;elsestate<=state;endendcaseendendreg[17:0]ms_cnt;regms_up;always@(posedgeclk,posedgerst)beginif(rst)beginms_cnt<=0;ms_up<=0;endelsebeginif(ms_cnt==200000)beginms_cnt<=0;ms_up<=1;endelse
6、beginms_cnt<=ms_cnt+1'b1;ms_up<=0;endendendendmoduleLifo讀按鍵代碼:modulebtn_scan_read(inputclk,inputrst,inputbtn,outputregbtn_down);localparam[1:0]s0=2'b00,s1=2'b01,s2=2'b10;reg[1:0]state;always@(posedgeclk,posedgerst)beginif(rst)beginbtn_down<=1'b0;state<=s0;
7、endelsebegincase(state)s0:beginbtn_down<=1'b0;if(btn)state<=s1;elsestate<=s0;ends1:beginif(cnt_done)beginif(btn)state<=s2;elsestate<=s0;endelsestate<=s1;ends2:beginif(btn==1'b0)beginbtn_down<=1'b1;state<=s0;endelsebeginbtn_down<=btn_down;state<=s2;endenden
8、dcaseendendreg[20:0]cnt;regcnt_done;always@(posedgeclk,posedgerst)beginif(rst)begincnt<=21'b0;cnt_done<=1'b0;endelseif(state==s1)begincnt<=cnt+1'b1;if(cnt==21'd2000000)begincnt<=21'b0;cnt_done<=1'b1;endendels