![可編程邏輯電路設(shè)計(jì)大作業(yè)實(shí)驗(yàn)報(bào)告_第1頁(yè)](http://file4.renrendoc.com/view/331d3ccebfbf4ffc691918d7bded0d39/331d3ccebfbf4ffc691918d7bded0d391.gif)
![可編程邏輯電路設(shè)計(jì)大作業(yè)實(shí)驗(yàn)報(bào)告_第2頁(yè)](http://file4.renrendoc.com/view/331d3ccebfbf4ffc691918d7bded0d39/331d3ccebfbf4ffc691918d7bded0d392.gif)
![可編程邏輯電路設(shè)計(jì)大作業(yè)實(shí)驗(yàn)報(bào)告_第3頁(yè)](http://file4.renrendoc.com/view/331d3ccebfbf4ffc691918d7bded0d39/331d3ccebfbf4ffc691918d7bded0d393.gif)
![可編程邏輯電路設(shè)計(jì)大作業(yè)實(shí)驗(yàn)報(bào)告_第4頁(yè)](http://file4.renrendoc.com/view/331d3ccebfbf4ffc691918d7bded0d39/331d3ccebfbf4ffc691918d7bded0d394.gif)
![可編程邏輯電路設(shè)計(jì)大作業(yè)實(shí)驗(yàn)報(bào)告_第5頁(yè)](http://file4.renrendoc.com/view/331d3ccebfbf4ffc691918d7bded0d39/331d3ccebfbf4ffc691918d7bded0d395.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
可編程邏輯電路設(shè)計(jì)大作業(yè)實(shí)驗(yàn)報(bào)告小游戲——打地鼠的設(shè)計(jì)實(shí)現(xiàn)00748023齊璐曄:luyeolivia@1352018320300748055王禹:huanhuan_19890806@126.com1348869575400748093周天瑤:zhoutianyaoyao@163.co一部分系統(tǒng)概述【功能介紹】小游戲打地鼠:游戲共分三關(guān),第一關(guān)、第二關(guān)闖關(guān)分?jǐn)?shù)為40分,、第三關(guān)闖關(guān)分?jǐn)?shù)為20分,共100分。每關(guān)從70S開始進(jìn)行倒計(jì)時(shí),在限定時(shí)間內(nèi)達(dá)到闖關(guān)分?jǐn)?shù)即可進(jìn)入下一關(guān)游戲,每進(jìn)入下一關(guān)時(shí),會(huì)顯示相應(yīng)的闖關(guān)畫面。關(guān)數(shù)越高,地鼠出現(xiàn)速度越快,難度越大,樂趣越多。撥下PLAY鍵(S1)開始游戲,在任一關(guān)闖關(guān)失敗則游戲結(jié)并會(huì)顯示失敗畫面;若闖通三關(guān),則游戲成功并顯示祝賀畫面,同時(shí)由發(fā)光二極管構(gòu)成的跑馬燈閃亮。在任意時(shí)刻撥動(dòng)RESET鍵(S2)重新開始游戲。VGA界面顯示:游戲未開始,STAGE1,STAGE2,STAGE3,打地鼠游戲畫面,通關(guān)成功及失敗畫面音樂輸出:從始至終通過蜂鳴器播放背景音樂——《音樂之聲》鍵盤輸入:FPGA開發(fā)板的4*4鍵盤陣列,16個(gè)按鈕分別對(duì)應(yīng)屏幕顯示的16個(gè)地鼠可能出現(xiàn)的位置?!据斎胼敵觥枯斎胄盘?hào):時(shí)鐘信號(hào)clk1:20MHz,clk10HZ:10Hz;列線掃描信號(hào)column;開始信號(hào):play;復(fù)位信號(hào):RESET,輸出信號(hào):數(shù)碼管選通信號(hào):SEL蜂鳴器數(shù)據(jù)信號(hào):BUZZERLED燈控信號(hào):TEST行線掃描輸出信號(hào):row數(shù)碼管數(shù)據(jù)信號(hào):SEGVGA行掃描信號(hào):hsVGA場(chǎng)掃描信號(hào):vs視頻R通路信號(hào):red視頻G通路信號(hào):green視頻B通路信號(hào):blue【系統(tǒng)框圖】音頻處理音頻處理鍵盤掃描倒計(jì)時(shí)分?jǐn)?shù)計(jì)量時(shí)鐘信號(hào)clk10Hz時(shí)鐘信號(hào)clk1蜂鳴器輸出信號(hào)BUZZERVGA掃描輸出列線掃描信號(hào)column按鍵信號(hào)key_code隨機(jī)數(shù)產(chǎn)生冒出老鼠信號(hào)out_mos得分CBA開始信號(hào)PLAY復(fù)位信號(hào)RESET圖像控制信號(hào)RGBX,RGBY行掃描信號(hào)hs場(chǎng)掃描信號(hào)vs視頻R通路red視頻G通路green視頻B通路blue圖像控制計(jì)時(shí)信號(hào)temp數(shù)碼管控制數(shù)碼管選通信號(hào)SEL數(shù)碼管數(shù)據(jù)信號(hào)SEGLED燈控二極管控制信號(hào)test第二部分各模塊功能實(shí)現(xiàn)詳述【主程序邏輯控制模塊】1、主程序邏輯控制模塊功能描述主程序邏輯控制模塊主要分為五大部分:老鼠隨機(jī)出現(xiàn)及其頻率控制、倒計(jì)時(shí)器、計(jì)分器、LED跑馬燈顯示、數(shù)碼管顯示。2、各部分的具體實(shí)現(xiàn)老鼠隨機(jī)出現(xiàn)及其頻率控制模塊輸入:clk:通過主時(shí)鐘分頻得到的1MHZ的時(shí)鐘。play:play=1,由開機(jī)畫面進(jìn)入游戲;play=0,顯示開機(jī)畫面,系統(tǒng)初始化。flag:flag=1,顯示游戲失敗畫面;flag=0,顯示游戲進(jìn)行中或游戲成功畫面。reset:高電平有效reset=1,游戲復(fù)位。在此,play、flag、reset均作為老鼠隨機(jī)出現(xiàn)的判斷條件。模塊輸出:OUT_MOS:代表當(dāng)前哪一只老鼠冒出實(shí)現(xiàn)算法:利用QN:STD_LOGIC_VECTOR(27DOWNTO0)進(jìn)行分頻計(jì)數(shù),越高位其時(shí)鐘周期越長(zhǎng),根據(jù)得分的不同,選擇不同的四位代表老鼠出現(xiàn)的頻率,從而實(shí)現(xiàn)了隨著分?jǐn)?shù)的增高,老鼠冒出的頻率變快設(shè)計(jì)關(guān)鍵代碼:caseBis--B為得分的十位數(shù)when0|1|2|3=>REDN<=QN(23DOWNTO20);--得分小于40,老鼠2s冒出一個(gè)when4|5|6|7=>REDN<=QN(22DOWNTO19);--得分40—80,老鼠1s冒出一個(gè)when8|9=>REDN<=QN(21DOWNTO18);--得分80—100,老鼠0.5s冒出一個(gè)whenothers=>NULL;endcase;caseREDNis--REDN從0—15,依次對(duì)應(yīng)16個(gè)偽隨機(jī)數(shù)when"0000"=>OUT_MOS<=OM1;……when"1111"=>OUT_MOS<=OM16;whenothers=>NULL;endcase;倒計(jì)時(shí)器模塊輸入:CLKT:利用QN對(duì)clk1分頻得到的倒計(jì)時(shí)時(shí)鐘。play:play=1,由開機(jī)畫面進(jìn)入游戲;play=0,顯示開機(jī)畫面,系統(tǒng)初始化。flag:flag=1,顯示游戲失敗畫面;flag=0,顯示游戲進(jìn)行中或游戲成功畫面。reset:高電平有效reset=1,游戲復(fù)位。在此,play、flag、reset均作為倒計(jì)時(shí)的判斷條件。模塊輸出:AC、BC:分別表示倒計(jì)時(shí)的個(gè)位、十位。實(shí)現(xiàn)算法:設(shè)置signal:count:作為截止當(dāng)前已經(jīng)出現(xiàn)老鼠個(gè)數(shù)的標(biāo)識(shí),CLKT上升沿count加一。在stage1中count即等于老鼠出現(xiàn)是數(shù)目,在stage2中count加一表示老鼠出現(xiàn)了2只,在stage3中count加一表示老鼠出現(xiàn)了4只。temp:代表倒計(jì)時(shí)的剩余時(shí)間,每個(gè)stage都從70開始倒計(jì)時(shí)。每一個(gè)stage,利用count來限定通過這個(gè)stage所用的時(shí)限,利用得分來作為判斷進(jìn)入下一關(guān)的條件。設(shè)計(jì)關(guān)鍵代碼:IF(CLKT'EVENTANDCLKT='1')THENCOUNT<=COUNT+1;-----------stageone-------iF(COUNT=71ANDB<4andc=0)THEN--未通過stage1flag<='1';temp<=0;--倒計(jì)時(shí)清零ELSIF(COUNT<71ANDB>=4andc=0andA=0)THEN--通過stage1COUNT<=71;FLAG<='0';TEMP<=70;--count置為71(為使stage2從70開--始倒計(jì)時(shí)),倒計(jì)時(shí)置為70ELSIF(COUNT<71ANDB<4ANDC=0)THEN--處于stage1過程中FLAG<='0';TEMP<=70-COUNT;--從70開始進(jìn)行倒計(jì)時(shí)------------stagetwo-----------ELSIF(COUNT=142ANDB<8andc=0)THEN--未通過stage2FLAG<='1';TEMP<=0;--倒計(jì)時(shí)清零ELSIF(COUNT<142ANDB>=8andc=0ANDA=0)THEN--通過stage2COUNT<=142;FLAG<='0';TEMP<=70;--count設(shè)為142(為使stage3--70開始倒計(jì)時(shí),倒計(jì)時(shí)置為70ELSIF(COUNT<142ANDB<8ANDC=0)THEN--處于stage2過程中FLAG<='0';TEMP<=141-COUNT;--從70開始進(jìn)行倒計(jì)時(shí)------------stagethree-----------ELSIF(COUNT=213ANDc<1)THEN--未通過stage3FLAG<='1';TEMP<=0;--倒計(jì)時(shí)清零ELSIF(COUNT<213ANDc=1)THEN--通過stage3COUNT<=213;FLAG<='0';TEMP<=0;--倒計(jì)時(shí)置為0ELSIF(COUNT<213ANDc<1)THEN--處于stage3過程中FLAG<='0';TEMP<=212-COUNT;--從70開始進(jìn)行倒計(jì)時(shí)ELSEFLAG<='0';COUNT<=0;TEMP<=0;ENDIF;☆計(jì)分器模塊輸入:OUT_MOS:代表當(dāng)前哪一只老鼠冒出。EDS_RKN2:代表當(dāng)前哪一個(gè)按鍵被按下。play:play=1,由開機(jī)畫面進(jìn)入游戲;play=0,顯示開機(jī)畫面,系統(tǒng)初始化。flag:flag=1,顯示游戲失敗畫面;flag=0,顯示游戲進(jìn)行中或游戲成功畫面。reset:高電平有效reset=1,游戲復(fù)位。在此,play、flag、reset均為是否計(jì)分的判斷條件。模塊輸出:A、B、C:分別表示得分的個(gè)位、十位、百位。實(shí)現(xiàn)算法:設(shè)置signal:Yes_No:作為是否打中老鼠的判斷標(biāo)識(shí),Yes_No=1表示打中,Yes_No=0表示未打中。首先利用OUT_MOS和EDS_RKN2進(jìn)行是否打中老鼠的判斷,由于每次僅有一只老鼠冒出,因此只有當(dāng)OUT_MOS與EDS_RKN2完全相同的情況下,才表明打中老鼠,以此作為判斷條件。然后只有在打中老鼠的前提條件下,從加分。設(shè)計(jì)關(guān)鍵代碼:--只有當(dāng)前冒出的是第n只老鼠,而當(dāng)前按下的是第n個(gè)按鍵的條件下(n:1—16),才--表示打中老鼠,且對(duì)于冒出的一個(gè)老鼠,不管按幾次相應(yīng)的按鍵,得分只加一分。IF(((OUT_MOS(1)='1'andEDS_RKN2(1)='1')OR(OUT_MOS(4)='1'andEDS_RKN2(4)='1')OR(OUT_MOS(7)='1'andEDS_RKN2(7)='1')OR(OUT_MOS(2)='1'andEDS_RKN2(2)='1')OR(OUT_MOS(5)='1'andEDS_RKN2(5)='1')OR(OUT_MOS(8)='1'andEDS_RKN2(8)='1')OR(OUT_MOS(3)='1'andEDS_RKN2(3)='1')OR(OUT_MOS(6)='1'andEDS_RKN2(6)='1')OR(OUT_MOS(9)='1'andEDS_RKN2(9)='1')OR(OUT_MOS(10)='1'andEDS_RKN2(10)='1')OR(OUT_MOS(11)='1'andEDS_RKN2(11)='1')OR(OUT_MOS(12)='1'andEDS_RKN2(12)='1')OR(OUT_MOS(13)='1'andEDS_RKN2(13)='1')OR(OUT_MOS(14)='1'andEDS_RKN2(14)='1')OR(OUT_MOS(15)='1'andEDS_RKN2(15)='1')OR(OUT_MOS(16)='1'andEDS_RKN2(16)='1'))AND(CURRENTANDOUT_MOS)="0000000000000000")thenYes_No<='1';current<=OUT_MOS;ELSEYes_No<='0';ENDIF;☆LED跑馬燈顯示模塊輸入:QN:用于分頻計(jì)數(shù)。TEST_TIME:不同LED燈亮起的轉(zhuǎn)換頻率。C:得分的百位數(shù),用于判斷跑馬燈亮起的條件。模塊輸出:TEST:代表8盞LED燈的亮滅。實(shí)現(xiàn)算法:TEST_TIME<=QN(19DOWNTO16),TEST_TIME循環(huán)取0000—1111,每一個(gè)不同的TEST_TIME值對(duì)應(yīng)了8盞LED燈不同的亮滅情況,從而實(shí)現(xiàn)了跑馬燈。設(shè)計(jì)關(guān)鍵代碼:ifC=1ANDTEST_TIME=0then--分?jǐn)?shù)大于等于100,不同的TEST_TIME值對(duì)TEST<="00000000";--應(yīng)了8盞LED燈不同的亮滅情況elsifC=1ANDTEST_TIME=1thenTEST<="10000000";elsifC=1ANDTEST_TIME=2thenTEST<="11000000";elsifC=1ANDTEST_TIME=3thenTEST<="11100000";elsifC=1ANDTEST_TIME=4thenTEST<="11110000";……else………endif;數(shù)碼管顯示模塊輸入:QN:用于分頻計(jì)數(shù)。AC、BC:分別表示倒計(jì)時(shí)的個(gè)位、十位。C、B、A:依次代表游戲得分的百位、十位、個(gè)位。(2)模塊輸出:ABC_TEMP:代表數(shù)碼管顯示的數(shù)字。SEL:表示數(shù)碼管選通信號(hào)。(3)實(shí)現(xiàn)算法:設(shè)置signal:EDS<=QN(8DOWNTO6),實(shí)現(xiàn)選通數(shù)碼管的周期性變化。在不同的EDS的取值下,對(duì)應(yīng)不同的選通信號(hào),從而選通不同的數(shù)碼管。不同的顯示數(shù)字分別選通不同的8段譯碼管。(4)設(shè)計(jì)關(guān)鍵代碼:EDS<=QN(8DOWNTO6);--QN分頻計(jì)數(shù),EDS周期性變化CASEEDSIS--不同的EDS值,對(duì)應(yīng)不同的選通信號(hào),從選通不同的數(shù)碼WHEN"101"=>--管ABC_TEMP<=A;SEL<="11011";WHEN"100"=>ABC_TEMP<=B;SEL<="10111";WHEN"011"=>ABC_TEMP<=C;SEL<="01111";WHEN"010"=>ABC_TEMP<=BC;SEL<="11101";WHEN"001"=>ABC_TEMP<=AC;SEL<="11110";WHENOTHERS=>ABC_TEMP<=10;SEL<="11111";ENDCASE;【圖像畫面描述模塊】1、模塊輸入:play:play=1,由開機(jī)畫面進(jìn)入游戲;play=0,顯示開機(jī)畫面,系統(tǒng)初始化。flag:flag=1,顯示游戲失敗畫面;flag=0,顯示游戲進(jìn)行中或游戲成功畫面。C、B、A:依次代表游戲得分的百位、十位、個(gè)位。temp:代表當(dāng)前的倒計(jì)時(shí)剩余時(shí)間。OUT_MOS:std_logic_vector(1to16),代表16只老鼠,哪只出現(xiàn)相應(yīng)位數(shù)值為1EDS_RKN2:std_logic_vector(1to16),代表對(duì)應(yīng)16個(gè)按鍵,哪個(gè)鍵被按下相應(yīng)位數(shù)值為1vloc、hloc:分別表示不同行、列的位置。2、模塊輸出:rgbx、rgby:分別代表對(duì)應(yīng)行、列的賦值顏色。3、實(shí)現(xiàn)算法和結(jié)構(gòu)說明:(1)算法說明:畫面像素采用128*128點(diǎn)陣描述,將play、flag、C、B、A、temp、OUT_MOS、EDS_RKN2作為出現(xiàn)哪個(gè)畫面的條件,通過對(duì)每行依次對(duì)該行的不同列賦予相應(yīng)的顏色來實(shí)現(xiàn)對(duì)畫面的描述。(2)結(jié)構(gòu)說明:圖像畫面描述模塊,分為對(duì)7個(gè)畫面的描述,依次為開機(jī)畫面、顯示“stage1”畫面、顯示“stage2”畫面、顯示“stage4、設(shè)計(jì)關(guān)鍵代碼:對(duì)不同區(qū)域賦值的代碼實(shí)質(zhì)相同,利用if——elsif——else條件語句對(duì)每行的不同列賦予相應(yīng)的顏色。關(guān)鍵在于對(duì)何時(shí)顯示該畫面的條件的判斷,要做到準(zhǔn)確、完備、簡(jiǎn)單。(1)、開機(jī)畫面描述:if(play='0')then--顯示開機(jī)畫面的條件if(vloc(7downto1)范圍)then--約束行范圍if((hloc(7downto1)范圍)then--約束列范圍rgbx<="000";rgby<="000";--賦值為顏色1elsif((hloc(7downto1)范圍)then--約束列范圍rgbx<="100";rgby<="000";--賦值為顏色2else--其他列范圍rgbx<="100";rgby<="010";--賦值為顏色3endif;elsif……………else………endif;endif;(2)、顯示“stage1”畫面描述:--顯示“stage1”else--即play=1if((temp=70ANDC=0ANDB=0ANDA=0)ORRESET='1')then--倒計(jì)時(shí)為70且不同vloc(7downto1)、(hloc(7downto1)范圍--得分為0,或賦成相應(yīng)的顏色--reset有效=1(3)、顯示“stage2”--顯示“stage2”elsif(b=4ANDC=0ANDTEMP=70)then--倒計(jì)時(shí)為70且不同vloc(7downto1)、(hloc(7downto1)范圍--得分為40—50賦成相應(yīng)的顏色(4)、顯示“stage3”畫面描述:--顯示“stage3”elsif(B=8ANDC=0ANDTEMP=70)then--倒計(jì)時(shí)為70且不同vloc(7downto1)、(hloc(7downto1)范圍--得分為80—90賦成相應(yīng)的顏色(5)、打地鼠進(jìn)行畫面描述:--顯示打地鼠進(jìn)行畫面的條件IF(C=0ANDFLAG='0')THEN--分?jǐn)?shù)未超過100且游戲未失敗if((hloc(7downto2)>=19andhloc(7downto2)<=29)and--約束行、列范圍(vloc(7downto2)>=4andvloc(7downto2)<=14))thenif(OUT_MOS(2)='1'andEDS_RKN2(2)='0')then--老鼠出現(xiàn)且按下對(duì)應(yīng)按鍵rgbx<="001";rgby<="000";--賦值為顏色1elsifOUT_MOS(2)='1'then--老鼠出現(xiàn)但未按下對(duì)應(yīng)按鍵rgbx<="100";rgby<="000";--賦值為顏色2elsergbx<="000";rgby<="000";endif;--其他情況下,賦值為顏色3elsif……………(6)、游戲失敗畫面描述:--顯示游戲失敗畫面的條件IF(FLAG='1')THEN--游戲失敗不同vloc(7downto1)、(hloc(7downto1)范圍賦成相應(yīng)的顏色(7)、游戲成功畫面描述:--顯示游戲成功畫面的條件IF(C=1ANDFLAG='0')THEN--分?jǐn)?shù)大于等于1不同vloc(7downto1)、(hloc(7downto1)范圍--100且游戲未失賦成相應(yīng)的顏色--敗【屏幕顯示模塊】模塊輸入:clk1:屏幕掃描時(shí)鐘,為20MHZ。rgbx、rgby:分別代表對(duì)應(yīng)行、列的賦值顏色。模塊輸出:hloc、vloc:分別表示不同行、列的位置。hs、vs:分別表示行同步信號(hào)、場(chǎng)同步信號(hào),與VGA接口的VGA_HS、VGA_VS相接。red、green、blue:分別表示色彩紅、綠、藍(lán),與VGA接口的R、G、B通路相連。實(shí)現(xiàn)算法和結(jié)構(gòu)說明:(1)算法說明:設(shè)定常量——H_PIXELS:行顯示點(diǎn)數(shù);H_FRONT:行前消隱點(diǎn)數(shù);H_BACK:行后消隱點(diǎn)數(shù);H_SYNCTIME:行同步點(diǎn)數(shù);H_PERIOD:行周期計(jì)數(shù)值:=H_SYNCTIME+H_PIXELS+H_FRONT+H_BACK;V_LINES:場(chǎng)顯示點(diǎn)數(shù);V_FRONT::場(chǎng)前消隱點(diǎn)數(shù);V_BACK:場(chǎng)后消隱點(diǎn)數(shù);V_SYNCTIME:場(chǎng)同步點(diǎn)數(shù);V_PERIOD:場(chǎng)周期計(jì)數(shù)值:=V_SYNCTIME+V_LINES+V_FRONT+V_BACK。設(shè)定signal——hcnt:用于行計(jì)數(shù);vcnt:用于場(chǎng)計(jì)數(shù);hsyncb:行同步信號(hào);vsyncb:場(chǎng)同步信號(hào);rgbp:表示色彩信息。利用sysclk(<=clk1)進(jìn)行行計(jì)數(shù),當(dāng)行計(jì)數(shù)到達(dá)計(jì)數(shù)周期時(shí)將重置。利用行同步信號(hào)hsyncb進(jìn)行場(chǎng)計(jì)數(shù),當(dāng)場(chǎng)計(jì)數(shù)到達(dá)計(jì)數(shù)周期時(shí)將重置。利用sysclk(<=clk1)產(chǎn)生行同步信號(hào),利用hsyncb產(chǎn)生場(chǎng)同步信號(hào)。最后分別把行同步信號(hào)hsyncb與VGA_HS接口相連,vsyncb與VGA_VS接口相連,rgbp的三位分別賦予red、green、blue,與VGA接口的R、G、B通路相連。(2)結(jié)構(gòu)說明:屏幕顯示模塊主要分為三大部分:顏色賦值;產(chǎn)生行、場(chǎng)計(jì)數(shù);產(chǎn)生行、場(chǎng)同步信號(hào)。設(shè)計(jì)關(guān)鍵代碼顏色賦值:process(rgbx,rgby)beginrgbp<=rgbxxorrgby;endprocess;--圖像最終顯示出來的顏色為rgbx與rgby的異或值(2)產(chǎn)生行、場(chǎng)計(jì)數(shù):·產(chǎn)生行計(jì)數(shù)(記錄每行的點(diǎn)數(shù)):if(sysclk'eventandsysclk='1')thenifhcnt<H_PERIODthenhcnt<=hcnt+1;else--當(dāng)行計(jì)數(shù)到達(dá)計(jì)數(shù)周期時(shí)將重置hcnt<=(others=>'0');endif;endif;·產(chǎn)生場(chǎng)計(jì)數(shù)(記錄每幀中的行數(shù)):if(hsyncb'eventandhsyncb='1')thenifvcnt<V_PERIODthenvcnt<=vcnt+1;else--當(dāng)場(chǎng)計(jì)數(shù)到達(dá)計(jì)數(shù)周期時(shí)將重置vcnt<=(others=>'0');endif;endif;產(chǎn)生行、場(chǎng)同步信號(hào):·產(chǎn)生行同步信號(hào)hsyncb(高電平有效,低電平無效):--H_PIXELS為行顯示點(diǎn)數(shù),H_FRONT為前消隱點(diǎn)數(shù),H_SYNCTIME為行同步點(diǎn)--數(shù)if(sysclk'eventandsysclk='1')thenif(hcnt>=(H_PIXELS+H_FRONT)andhcnt<(H_PIXELS+H_SYNCTIME+H_FRONT))thenhsyncb<='0';elsehsyncb<='1';endif;endif;·產(chǎn)生場(chǎng)同步信號(hào)vsyncb(高電平有效,低電平無效):--V_LINES為場(chǎng)顯示點(diǎn)數(shù),V_FRONT為前消隱點(diǎn)數(shù),V_SYNCTIME為場(chǎng)同步點(diǎn)--數(shù)if(hsyncb'eventandhsyncb='1')thenif(vcnt>=(V_LINES+V_FRONT)andvcnt<(V_LINES+V_SYNCTIME+V_FRONT))thenvsyncb<='0';elsevsyncb<='1';endif;endif;【掃描鍵盤模塊】1、功能概述:在打地鼠游戲中,屏幕顯示的16個(gè)老鼠出現(xiàn)位置分別與4*4鍵盤陣列的16個(gè)按鍵對(duì)應(yīng)。本模塊中通過對(duì)鍵盤陣列的行列掃描,從而確定按鍵輸入信息。輸入:掃描時(shí)鐘信號(hào)clk,列掃描輸入的三態(tài)信號(hào)column輸出:行線掃描輸出信號(hào)row,按鍵輸出信號(hào)key_code2、電路原理圖圖1鍵盤陣列部分電路原理圖3、原理簡(jiǎn)述:fpga開發(fā)板的4*4掃描鍵盤,其連接為4個(gè)行掃描線SCAN0~SCAN3,4個(gè)列掃描線KIN0~KIN3。因此,在識(shí)別按鍵輸入時(shí),只需要知道輸入按鍵是哪一行和哪一列即可。其總體思路為,首先固定SCAN0~SCAN3輸為4行低電平,然后以一定的頻率進(jìn)行行掃描,即依次輸出信號(hào)SCAN0~SCAN3為“0001”,“0010”,“0100”,“1000”,再讀入4列KIN0~KIN34、關(guān)鍵代碼1)、端口信號(hào)的定義:----為行掃描輸出信號(hào),隨掃描時(shí)鐘由“0000”~“1000”row:OUTstd_logic_vector(3DOWNTO0);---為列掃描輸入信號(hào),若為高電平,則有該列有按鍵按下,否則,沒有按鍵輸入。column:INOUTstd_logic_vector(3DOWNTO0);----由掃描的輸出、輸入信號(hào)最終確定的鍵盤輸入信號(hào)值。key_code:OUTstd_logic_vector(1to16)2)、行掃描信號(hào)的生成:div_cnt是由輸入的時(shí)鐘信號(hào)分頻得到的,scan_key即為行掃描信號(hào)。CASEdiv_cnt(5downto4)ISWHEN"00"=>scan_key<="0001";WHEN"01"=>scan_key<="0010";WHEN"10"=>scan_key<="0100";WHEN"11"=>scan_key<="1000";ENDCASE;3)、按鍵輸入判斷部分:以第一行為例詳細(xì)說明,其他三行情況判斷類似可知。CASEscan_keyISWHEN"0001"=>----判斷輸出的行掃描信號(hào),驅(qū)動(dòng)信號(hào)為‘1’CASEcolumnIS----確定列輸入的信號(hào)----此時(shí)說明column輸入信號(hào)和scan_key輸出信號(hào)為‘1’WHEN"0001"=>key_code<="0000000000000001";---0,0WHEN"0010"=>key_code<="0000000000000010";---0,1WHEN"0100"=>key_code<="0000000000000100";---0,2WHEN"1000"=>key_code<="0000000000001000";---0,3WHENOTHERS=>NULL;ENDCASE;WHEN“0010”,”0100”,”4)、三態(tài)信號(hào)column的使用:為了避免選通按鍵上殘留電荷對(duì)之后判斷的影響,需要對(duì)每一列進(jìn)行定時(shí)的清零操作,從而去除剩余電荷。----在column作為輸入時(shí),輸出為高阻態(tài),從而避免信號(hào)的阻塞。然后在此情況下再進(jìn)行前面3的輸入信號(hào)判斷if(div_cnt(1)='0')thencolumn<="ZZZZ";……----在column作為輸出時(shí),輸出低電平信號(hào),對(duì)各列進(jìn)行清零操作elsecolumn<="0000";5、波形仿真不考慮實(shí)際操作時(shí)殘留電荷的影響,此時(shí)column為輸入信號(hào),類型為in,進(jìn)行功能仿真,其結(jié)果如下:圖2鍵盤掃描部分功能仿真波形圖6、鍵盤模塊資源消耗情況圖三4*4鍵盤輸入部分資源消耗情況7、重點(diǎn)分析fpga開發(fā)板的鍵盤陣列中,其輸入按鍵主要存在兩大問題:鍵盤消抖:硬鍵盤在按鍵按下的時(shí)刻,會(huì)出現(xiàn)觸點(diǎn)的彈跳或顫動(dòng),從而使對(duì)輸入的判斷有誤,進(jìn)而有可能影響狀態(tài)機(jī)的輸出。這時(shí)需要進(jìn)行鍵盤消抖操作。殘留電荷:鍵盤陣列中的按鍵被按下后,該按鍵處可能浮留部分剩余電荷,并常常影響同列的按鍵,從而導(dǎo)致對(duì)輸入按鍵信號(hào)的正確判斷。在本設(shè)計(jì)中,考慮到主程序中對(duì)輸入信號(hào)的判斷,對(duì)消抖的操作并不必要,因而對(duì)此部分忽略;而考慮到需要對(duì)按下的每個(gè)按鍵進(jìn)行一一對(duì)應(yīng),故而需要處理殘留電荷帶來的干擾問題。其具體解決方案為:設(shè)置輸入的列掃描信號(hào)column為三態(tài)信號(hào),按周期交替進(jìn)行輸入信號(hào)的接收和輸出信號(hào)的賦值。當(dāng)進(jìn)行信號(hào)輸出時(shí),輸出“0000”【音頻模塊】1.音頻模塊功能:通過對(duì)外部時(shí)鐘進(jìn)行分頻處理,得到相應(yīng)音階的頻率和節(jié)拍。隨著時(shí)鐘變化,樂曲《音樂之聲》自然演奏。2.音頻模塊規(guī)范音頻模塊輸入:20MHZ時(shí)鐘,10HZ時(shí)鐘音頻模塊輸出:FPGA實(shí)驗(yàn)箱的蜂鳴器3.音頻模塊框圖Songer分為4個(gè)部分:圖四音頻模塊組成4.模塊說明Divclk:輸入:clk20MHZ輸出:clk10MHZ算法思想:簡(jiǎn)單的分頻。由于speakera模塊需要10MHZ的時(shí)鐘,故將20MHZ時(shí)鐘進(jìn)行分頻為10MHZ作為speakera的輸入。Notetabs:輸入:clk10HZ輸出:toneindex算法思想:產(chǎn)生樂曲的音調(diào)及節(jié)拍。計(jì)數(shù)器的頻率為10HZ,故每一拍的時(shí)間為0.1s。對(duì)照樂曲簡(jiǎn)譜,將每拍的音階賦給toneindex,再由tonetaba對(duì)toneindex進(jìn)行處理,根據(jù)音調(diào)預(yù)置數(shù)決定音調(diào)的高低。Tonetaba輸入:toneindex輸出:tone算法思想:每個(gè)音階有其對(duì)應(yīng)的頻率,音調(diào)越高,頻率越高。對(duì)不同的音階,事先在tone里存儲(chǔ)其相應(yīng)的分頻預(yù)置數(shù),tone作為speakera的輸入,進(jìn)行處理并發(fā)聲。1,2,3,4,5,6,7,8分別為哆,來,咪,發(fā),嗦,啦,嘻和高音哆。各自的分頻預(yù)置數(shù)經(jīng)過網(wǎng)上提供的資料得到。Speakera:輸入:clk10MHZ,tone輸出:buzzer(songer模塊未加入主程序前,speakera的輸出是spkout)算法思想:tone為分頻預(yù)置數(shù)。蜂鳴器只能輸出高低電平,故利用不同音階有不同的頻率來改變音調(diào)。根據(jù)時(shí)鐘的變化,輸出響應(yīng)的頻率,人耳便可聽到高低不同的聲音。由于fullspks脈沖很窄,模塊的最后將其展寬為原來的兩倍,以有足夠的功率驅(qū)動(dòng)蜂鳴器發(fā)聲。5.音頻模塊資源消耗情況圖五音頻模塊資源消耗情況Songer模塊共使用了57個(gè)邏輯單元,3個(gè)I/O管腳。第三部分系統(tǒng)測(cè)試結(jié)果系統(tǒng)功能測(cè)試結(jié)果系統(tǒng)功能運(yùn)行結(jié)果正確,在程序燒至FPGA實(shí)驗(yàn)箱后,背景音樂響起,顯示開機(jī)畫面。撥動(dòng)play鍵,進(jìn)入游戲stage1,倒計(jì)時(shí)開始,每打中一只老鼠,得分加一。當(dāng)在規(guī)定時(shí)間內(nèi)得分超過40,進(jìn)入stage2,開始stage2的倒計(jì)時(shí),老鼠出現(xiàn)頻率加快一倍。當(dāng)在規(guī)定時(shí)間內(nèi)得分超過80,進(jìn)入stage3,開始stage3的倒計(jì)時(shí),老鼠出現(xiàn)的頻率有加快一倍。當(dāng)在規(guī)定時(shí)間內(nèi)得分超過100,整個(gè)游戲通關(guān),屏幕顯示笑臉,LED跑馬燈亮起。在任一個(gè)stage中,若在規(guī)定時(shí)間內(nèi)未達(dá)到相應(yīng)分?jǐn)?shù),則游戲失敗,屏幕顯示哭臉。撥動(dòng)reset鍵,可在游戲的任何時(shí)刻重新
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit3 Weather A let's learn(說課稿)-2023-2024學(xué)年人教PEP版英語四年級(jí)下冊(cè)001
- 2025寫場(chǎng)地租賃合同范文
- 2025工程建設(shè)招標(biāo)投標(biāo)合同履約銀行保證書
- Unit 1 Playtime Lesson 3(說課稿)-2023-2024學(xué)年人教新起點(diǎn)版英語二年級(jí)下冊(cè)
- 2023九年級(jí)歷史下冊(cè) 第一單元 殖民地人民的反抗與資本主義制度的擴(kuò)展第3課 美國(guó)內(nèi)戰(zhàn)說課稿 新人教版
- 2025泵車租賃合同
- 2024-2025學(xué)年高中歷史 專題二 近代中國(guó)資本主義的曲折發(fā)展 2.1 近代中國(guó)民族工業(yè)的興起說課稿1 人民版必修2
- 蔬菜物資發(fā)放方案
- 養(yǎng)生館前臺(tái)合同范例
- 代理經(jīng)營(yíng)店鋪合同范例
- 2025至2030年中國(guó)PVC熱縮封帽數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- (一診)畢節(jié)市2025屆高三第一次診斷性考試 生物試卷(含答案)
- 《教育強(qiáng)國(guó)建設(shè)規(guī)劃綱要(2024-2035年)》解讀與培訓(xùn)
- 2025年市場(chǎng)營(yíng)銷人員工作計(jì)劃
- 2025年枝江金潤(rùn)源建設(shè)集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 中國(guó)減肥連鎖行業(yè)市場(chǎng)調(diào)查研究及投資戰(zhàn)略研究報(bào)告
- 危險(xiǎn)化學(xué)品安全監(jiān)管培訓(xùn)
- 2024-2030年中國(guó)醫(yī)療建筑工程行業(yè)發(fā)展?jié)摿巴顿Y戰(zhàn)略規(guī)劃分析報(bào)告
- 人工智能導(dǎo)論知到智慧樹章節(jié)測(cè)試課后答案2024年秋天津大學(xué)
- 金融消保培訓(xùn)
- 南師大學(xué)校介紹課件
評(píng)論
0/150
提交評(píng)論