VHDL課程設計之打地鼠游戲報告-含代碼_第1頁
VHDL課程設計之打地鼠游戲報告-含代碼_第2頁
VHDL課程設計之打地鼠游戲報告-含代碼_第3頁
VHDL課程設計之打地鼠游戲報告-含代碼_第4頁
VHDL課程設計之打地鼠游戲報告-含代碼_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

題目:VHDL課程設計之打地鼠游戲專業(yè):信息工程班級:電聯(lián)學生姓名:提交日期:2023年03月05日目錄一、設計任務與要求·······························3二、總體框圖··································32.1總體框圖·······························32.2設計思路及各模塊功能·······················32.2.1設計思路····························32.2.2各模塊功能···························3三、選擇器件·································4四、模塊功能實現(xiàn)·······························74.1分頻器模塊······························74.2隨機數(shù)產(chǎn)生模塊1······························84.3隨機數(shù)產(chǎn)生模塊2·····························94.4鍵盤控制模塊······························104.5計分器模塊·····························144.6LCD1602地鼠顯示模塊·····························154.7數(shù)碼管顯示模塊·······························17五、總體設計電路圖·····························18六、游戲說明書·······························186.1前言·································186.2運行說明·······························186.3評分規(guī)那么·······························18七、心得體會······················································19一、設計任務與要求設計一個挑戰(zhàn)反響速度的“打地鼠〞游戲機。要求:地鼠隨機出現(xiàn)在任何位置,以按鍵代表錘子,擊中地鼠,一旦擊中,數(shù)碼管計分器分數(shù)增加。按復位鍵重新開始游戲。二、總體框圖2.1、打地鼠游戲機的總體框圖如下列圖所示:分頻模塊分頻模塊鍵盤模塊隨機數(shù)發(fā)生模塊數(shù)碼管顯示模塊計分模塊鍵盤模塊隨機數(shù)發(fā)生模塊數(shù)碼管顯示模塊計分模塊LCD顯示模塊LCD顯示模塊電路設計總體框圖2.2、設計思路及各模塊功能:設計思路:產(chǎn)生偽隨機數(shù)使地鼠隨機出現(xiàn),外接LCD1602顯示地鼠隨機出現(xiàn)的位置,以一個特殊字符表示地鼠。游戲者按下按鍵,與地鼠出現(xiàn)的位置代表的偽隨機數(shù)進行比擬,假設一致,計分器進行加分。按下ESC鍵進行復位,利用50MHz分頻作為根本信號源。各模塊功能介紹:——分頻器模塊將50MHz的信號源分別分頻為游戲所需頻率的時鐘信號1Hz。——偽隨機數(shù)產(chǎn)生模塊產(chǎn)生偽隨機數(shù),使得地鼠出現(xiàn)位置隨機?!嫹帜K接收來自鍵盤控制模塊的信號,正確一次加一分。——LCD顯示模塊在1HZ時鐘信號下,根據(jù)產(chǎn)生的偽隨機數(shù)使得2*16的LCD屏上隨機出現(xiàn)代表地鼠的字符。——鍵盤控制模塊玩家按下地鼠出現(xiàn)的位置可能對應的按鍵,按鍵地址與地鼠出現(xiàn)的位置對應的偽隨機進行比擬,假設一致,輸出一個為‘1’的correct信號?!嫹帜K接收來自鍵盤控制模塊的信號,正確一次加一分?!獢?shù)碼管顯示模塊通過數(shù)碼管,將計分模塊的計分結果顯示出來。三、器件選擇設計開發(fā)軟件:Quartus28.1/9.0主芯片:芯片:EP2C8Q208C8:含8,256Les;165,888RAMbits;2個PLL;;139個I/O口2.配置芯片:EPCS1/EPCS4FPGA串行配置芯片含1MbitFlash/4MbitFlashEP2C5Q208C8:配置EPCS1EP2C8Q208C8:配置EPCS43.FLASH:〔2M×〕4.SRAM:IS61LV25616256K×16Bit存儲器電路:24LC16B16Kbit〔8Blocks×8Bit〕存儲器電路:93LC46B1Kbit〔64×16Bit〕7.有源晶振:8.電源芯片:LM1117-3.3V、9.調(diào)試接口:AS、JTAG調(diào)試接口10.核心板尺寸:100mm×79mm外接LCD1602顯示屏工業(yè)字符型液晶,能夠同時顯示16x02即32個字符?!?6列2行〕注:為了表示的方便,后文皆以1表示高電平,0表示低電平。1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由假設干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形〔用自定義CGRAM,顯示效果也不好〕。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊〔顯示字符和數(shù)字〕。市面上字符液晶大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780寫的控制程序可以很方便地應用于市面上大局部的字符型液晶。2管腳功能1602采用標準的16腳接口,其中:第1腳:GND為電源地第2腳:VCC接5V電源正極第3腳:V0為液晶顯示器比照度調(diào)整端,接正電源時比照度最弱,接地電源時比照度最高〔比照度過高時會產(chǎn)生“鬼影〞,使用時可以通過一個10K的電位器調(diào)整比照度〕。第4腳:RS為存放器選擇,高電平1時選擇數(shù)據(jù)存放器、低電平0時選擇指令存放器。第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,以51為例的簡單原理圖低電平(0)時進行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平〔1〕時讀取信息,負跳變時執(zhí)行指令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負極。特性3.3V或5V工作電壓,比照度可調(diào)內(nèi)含復位電路提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM內(nèi)建有192個5X7點陣的字型的字符發(fā)生器CGROM8個可由用戶自定義的5X7的字符發(fā)生器CGRAM特征應用微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧,常用在袖珍式儀表和低功耗應用系統(tǒng)中。操作控制注:關于E=H脈沖——開始時初始化E為0,然后置E為1。外接PS/2鍵盤進行控制四、功能模塊4.1分頻器模塊分頻器模塊接收晶振提供的50MHz時鐘信號,通過計數(shù)將其分頻為1s的時鐘脈沖信號并輸出。輸出秒脈沖的VHDL程序如下:LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;useieee.std_logic_unsigned.all;ENTITYdividerISPORT(clk:INSTD_LOGIC;rst_n:INSTD_LOGIC;clk_1HZ:BUFFERSTD_LOGIC);ENDdivider;ARCHITECTUREbehavOFdividerISBEGINPROCESS(clk,rst_n)VARIABLEcount:INTEGERrange0TO50000000;BEGINIFrst_n='0'THENcount:=0;ELSIFclk'eventANDclk='1'THENIFcount=25000000THENcount:=0;clk_1HZ<=NOTclk_1HZ;ELSEcount:=count+1;ENDIF;ENDIF;ENDPROCESS;ENDbehav;4.2隨機數(shù)產(chǎn)生模塊1以下程序為產(chǎn)生4位偽隨機數(shù)的代碼,取ram為一個4位數(shù),將第1位和第4位進行同或得結果feedback,將ram的前3位和feedback合并取代原來4位的ram,新的ram即是得到的一個偽隨機數(shù),不停的反復就可得到一組序列為16的偽隨機數(shù)。這個偽隨機數(shù)產(chǎn)生器的偽隨機數(shù)傳遞給LCD顯示屏。LibraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;entitybeeisport(clk:instd_logic;reset:instd_logic;data_out:outUNSIGNED(3downto0));endbee;architecturertlofbeeissignalfeedback:std_logic;signalram:UNSIGNED(3downto0);beginfeedback<=ram(3)xnorram(0);latch_it:process(clk,reset)beginif(reset='1')thenram<=(others=>'0');elsif(clk='1'andclk'event)thenram<=ram(2downto0)&feedback;endif;endprocess;data_out<=ram(3downto0);endRTL;4.3隨機數(shù)產(chǎn)生模塊2原理同隨機數(shù)產(chǎn)生模塊1,產(chǎn)生的偽隨機數(shù)傳遞給鍵盤控制模塊。LibraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;entitylai2isport(clk:instd_logic;reset:instd_logic;data_out:outUNSIGNED(3downto0));endlai2;architecturertloflai2issignalfeedback:std_logic;signalram:UNSIGNED(3downto0);beginfeedback<=ram(3)xnorram(0);latch_it:process(clk,reset)beginif(reset='1')thenram<=(others=>'0');elsif(clk='1'andclk'event)thenram<=ram(2downto0)&feedback;endif;endprocess;data_out<=ram(3downto0);endRTL;4.4鍵盤控制模塊根據(jù)得到偽隨機產(chǎn)生模塊傳遞的信號num1,將此時按下的按鍵地址與偽隨機數(shù)所代表的0地址進行比擬,假設一致,那么輸出為‘1’的correct信號給下面的計分器模塊。libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;useIEEE.std_logic_unsigned.all;entityps2scanisport(clk:inSTD_LOGIC;rst_n:inSTD_LOGIC; num1:instd_logic_vector(3downto0);ps2k_clk:inSTD_LOGIC;ps2k_data:inSTD_LOGIC;LCD_Data:instd_logic_vector(8downto0);correct:outstd_logic;signalresss:outstd_logic;led:outSTD_LOGIC_VECTOR(5downto0));endentityps2scan;architectureps2receiveofps2scanissignalps2k_clk_r:STD_LOGIC_VECTOR(2downto0);signalneg_ps2k_clk:STD_LOGIC;signaltemp_data:STD_LOGIC_VECTOR(7downto0);signalnum:STD_LOGIC_VECTOR(3downto0);signalps2_byte_r:STD_LOGIC_VECTOR(7downto0);signalcount:std_logic_vector(3downto0);begin---------------process(clk,rst_n)beginif(rst_n='0')thenps2k_clk_r<="000";elsif(clk'eventANDclk='1')thenps2k_clk_r<=ps2k_clk_r(1downto0)&ps2k_clk;endif;endprocess;----------------------neg_ps2k_clk<='1'whenps2k_clk_r(2downto1)="10"else'0';----------------------process(clk,rst_n)beginif(rst_n='0')thennum<=x"0";temp_data<=x"00";elsif(clk'eventANDclk='1')thenif(neg_ps2k_clk='1')thennum<=num+1;casenumiswhenx"1"=>temp_data(0)<=ps2k_data;whenx"2"=>temp_data(1)<=ps2k_data;whenx"3"=>temp_data(2)<=ps2k_data;whenx"4"=>temp_data(3)<=ps2k_data;whenx"5"=>temp_data(4)<=ps2k_data;whenx"6"=>temp_data(5)<=ps2k_data;whenx"7"=>temp_data(6)<=ps2k_data;whenx"8"=>temp_data(7)<=ps2k_data;whenothers=>null;endcase;endif;if(num=x"b")thennum<=x"0";endif;endif;endprocess;------------------- process(clk,rst_n) VARIABLEcount1:INTEGERrange0TO1; begin if(rst_n='0')then ps2_byte_r<=x"00"; elsif(clk'eventANDclk='1')then if(num=x"b")then ps2_byte_r<=temp_data; endif; endif; endprocess;------------------- process(ps2_byte_r) begin --correct<='0'; if(ps2_byte_r=x"29")thenresss<='0';else casenum1is when"0000"=>--0 if(ps2_byte_r=x"6b")then correct<='1'; elsecorrect<='0'; endif; when"0001"=>--1 if(ps2_byte_r=x"74")then correct<='1'; elsecorrect<='0'; endif; when"0010"=>--2 if(ps2_byte_r=x"73")then correct<='1'; elsecorrect<='0'; endif; when"0011"=>--3 if(ps2_byte_r=x"74")then correct<='1'; elsecorrect<='0'; endif; when"0100"=>--4 if(ps2_byte_r=x"69")then correct<='1'; elsecorrect<='0'; endif; when"0101"=>--5 if(ps2_byte_r=x"79")then correct<='1'; elsecorrect<='0'; endif; when"0110"=>--6 if(ps2_byte_r=x"73")then correct<='1'; elsecorrect<='0'; endif; when"0111"=>--7 if(ps2_byte_r=x"73")then correct<='1'; elsecorrect<='0'; endif; when"1000"=>--8 if(ps2_byte_r=x"79")then correct<='1'; elsecorrect<='0'; endif; when"1001"=>--9 if(ps2_byte_r=x"69")then correct<='1'; elsecorrect<='0'; endif; when"1010"=>--10 if(ps2_byte_r=x"74")then correct<='1'; elsecorrect<='0'; endif; when"1011"=>--11 if(ps2_byte_r=x"6b")then correct<='1'; elsecorrect<='0'; endif; when"1100"=>--12 if(ps2_byte_r=x"72")then correct<='1'; elsecorrect<='0'; endif; when"1101"=>--13 if(ps2_byte_r=x"73")then correct<='1'; elsecorrect<='0'; endif; when"1110"=>--14 if(ps2_byte_r=x"7a")then correct<='1'; elsecorrect<='0'; endif; whenothers=>null; endcase; resss<='1'; endif; endprocess;endarchitectureps2receive;4.5計分器模塊判斷得到來自鍵盤控制模塊的correct信號是否為1,來確定計分器是否需要加1,并實現(xiàn)在數(shù)碼管上顯示出來。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYgradeISPORT(--clk_1:INSTD_LOGIC;clk_1HZ:instd_logic;rst_n:instd_logic;correct:instd_logic;--light:bufferstd_logic_vector(2downto0);seg_en:bufferstd_logic;clr:bufferstd_logic;seg_data:bufferstd_logic_vector(15downto0));ENDgrade;architecturebehavofgradeissignalcnt:std_logic_vector(3downto0);signaltim:std_logic_vector(3downto0):="1111";beginprocess(clk_1HZ,rst_n)beginif(clk_1HZ'eventandclk_1HZ='1')then --clr<='1'; ifcorrect='1'then cnt<=cnt+1; endif;if(cnt>"1001")thenseg_data<="000000000001"&(cnt-"1010");elseseg_data<="000000000000"&cnt;endif;endif;endprocess;endbehav;4.6LCD1602地鼠顯示模塊首先分頻得到一個5Hz的時鐘信號,LCD在5Hz時鐘信號的驅動下,完成五步操作,第一步,設置8位格式,第二步,整體顯示,關光標,光標閃爍,第三步,清屏,第四步,根據(jù)得到來自偽隨機數(shù)產(chǎn)生模塊的偽隨機數(shù)信號numin,讀地址,移動光標位置,第五步,在光標位置寫特殊字符,代表地鼠出現(xiàn)。libraryieee;useIEEE.std_logic_1164.all;useieee.std_logic_unsigned.all;entitylcddis port(clk,reset:instd_logic; numin:instd_logic_vector(3downto0); LCD_Data:bufferstd_logic_vector(8downto0); en:outstd_logic; rw:outstd_logic; judge:outstd_logic_vector(8downto0); LCD_Clk:bufferstd_logic );endlcdd;architecturegongnengoflcddissignals:integerrange0to5000000;begin--50MHzto5Hzprocess(clk,reset)begin ifreset='0'then LCD_Clk<='0'; s<=0; elsifclk'eventandclk='1'then ifs=5000000then s<=0; LCD_Clk<=notLCD_Clk; else s<=s+1;endif;endif;endprocess;rw<='0';en<=LCD_Clk;process(LCD_Clk)variablecnt1:std_logic_vector(2downto0):="000";beginifReset='0'thenLCD_Data<="000000001";--Resetzanting--LCD_Data[8..0],其中LCD_Data[8]對應1602的RS,--LCD_Data[7..0]對應1602的八根數(shù)據(jù)線elsifrising_edge(LCD_Clk)thenifcnt1<"101"thencnt1:=cnt1+1;elsecnt1:="001";endif;casecnt1iswhen"001"=>LCD_Data<="000111000";when"010"=>LCD_Data<="000001100";when"011"=>LCD_Data<="000000001";when"100"=>casenuminiswhen"0000"=>LCD_Data<="010000010";---3when"0001"=>LCD_Data<="010001100";---13when"0010"=>LCD_Data<="010000111";--8when"0011"=>LCD_Data<="010001100";--13when"0100"=>LCD_Data<="011000010";--2.3when"0101"=>LCD_Data<="011001100";---2.13when"0110"=>LCD_Data<="011000111";--2.8when"0111"=>LCD_Data<="010000111";---8when"1000"=>LCD_Data<="011001100";--2.13when"1001"=>LCD_Data<="011000010";---2.3when"1010"=>LCD_Data<="010001100";--l3when"1011"=>LCD_Data<="010000010";---3when"1100"=>LCD_Data<="011000111";--2.8when"1101

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論