名稱:基于8位LED燈的打地鼠游戲設(shè)計(jì)VHDL代碼Basys2開發(fā)板(代碼在文末下載)
軟件:ISE
語(yǔ)言:VHDL
代碼功能:
兩種地鼠的產(chǎn)生方式:
①用8位LED燈對(duì)應(yīng)8個(gè)地洞,用4×4矩陣鍵盤中的1~8鍵對(duì)應(yīng)打的動(dòng)作。
②用4位LED燈指示0001至111對(duì)應(yīng)15個(gè)地洞,用4×4矩陣鍵盤中的15個(gè)按鍵對(duì)應(yīng)打的動(dòng)作。
功能:
①按“開始”鍵進(jìn)入游戲狀態(tài),每輪游戲計(jì)時(shí)20秒。每隔一定時(shí)間隨機(jī)出現(xiàn)一只地鼠,此時(shí)如果沒(méi)有及時(shí)按下按鍵或者雖然有鍵按下但是與地鼠出現(xiàn)的位置不致,表示沒(méi)有打中。
如果按鍵值與地鼠出現(xiàn)的位置一致,表示打中了,打中一只加1分。數(shù)碼管顯示得分。
②游戲結(jié)束后再按“開始”鍵,得分清零,開始新游戲。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在Basys2開發(fā)板驗(yàn)證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
工程文件:
程序文件:
程序編譯:
管腳分配:
RTL圖:
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ENTITY?dadishu?IS ???PORT?( ??????clk_50M?????:?IN?STD_LOGIC; ??????reset???????:?IN?STD_LOGIC; ??????L_row???????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--矩陣鍵盤列 ??????H_col???????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--矩陣鍵盤行 ??????start???????:?IN?STD_LOGIC;--開始 ??????LED?????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--led ??????bit_select??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--數(shù)碼管位選 ??????seg_select??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管段選 ???); END?dadishu; ARCHITECTURE?behave?OF?dadishu?IS --分頻模塊 COMPONENT?fengping?IS ???PORT?( ??????clk_50M??:?IN?STD_LOGIC; ??????clk_div??:?OUT?STD_LOGIC--50M分頻為100KHz ???); END?COMPONENT; --控制模塊 ???COMPONENT?control?IS ??????PORT?( ?????????clk_div?????:?IN?STD_LOGIC; ?????????start???????:?IN?STD_LOGIC; ?????????LED?????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????key_num?????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????random_num??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????score???????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0) ??????); ???END?COMPONENT; --隨機(jī)數(shù)產(chǎn)生模塊 COMPONENT?LFSR?IS ???PORT?( ??????clk?????????:?IN?STD_LOGIC; ??????reset_p?????:?IN?STD_LOGIC; ??????random_num??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0) ???); END?COMPONENT;??? --按鍵模塊 COMPONENT?keyboard?IS ???PORT?( ??????clk_div??:?IN?STD_LOGIC;--100KHZ? ??????reset???????:?IN?STD_LOGIC;--復(fù)位 ??????L_row???????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--行? ??????H_col???????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--列? ??????key_number??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0)--按鍵鍵值 ???); END?COMPONENT; --顯示模塊 COMPONENT?display?IS ???PORT?( ??????clk????????????:?IN?STD_LOGIC;? ??????score??????????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0);--分?jǐn)?shù)?????? ??????bit_select?????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--數(shù)碼管位選 ??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管段選 ???); END?COMPONENT; ???SIGNAL?clk_div??????????:?STD_LOGIC; ???SIGNAL?random_num???????:?STD_LOGIC_VECTOR(3?DOWNTO?0); ???SIGNAL?key_num??????????:?STD_LOGIC_VECTOR(3?DOWNTO?0); ???SIGNAL?score????????????:?STD_LOGIC_VECTOR(7?DOWNTO?0); BEGIN --調(diào)用分頻模塊 ???i_fengping?:?fengping ??????PORT?MAP?( ?????????clk_50m??=>?clk_50M, ?????????clk_div??=>?clk_div ??????); ??? ??? ???--調(diào)用隨機(jī)數(shù)模塊 ???i_LFSR?:?LFSR ??????PORT?MAP?( ?????????clk?????????=>?clk_div, ?????????reset_p?????=>?reset, ?????????random_num??=>?random_num ??????); ??? ??? ???--調(diào)用控制模塊 ???i_control?:?control ??????PORT?MAP?( ?????????clk_div?????=>?clk_div, ?????????start???????=>?start, ?????????LED?????????=>?LED, ?????????key_num?????=>?key_num, ?????????random_num??=>?random_num, ?????????score???????=>?score ??????); ??? ??? ???--調(diào)用按鍵模塊 ???i_keyboard?:?keyboard ??????PORT?MAP?( ?????????clk_div?????=>?clk_div, ?????????reset???????=>?reset, ?????????l_row???????=>?L_row, ?????????h_col???????=>?H_col, ?????????key_number??=>?key_num ??????); ??? ??? ???--調(diào)用顯示模塊 ???i_display?:?display ??????PORT?MAP?( ?????????clk?????????=>?clk_div, ?????????score???????=>?score, ?????????bit_select??=>?bit_select, ?????????seg_select??=>?seg_select ??????); ??? END?behave;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=282