名称:基于8位LED灯的打地鼠游戏设计VHDL代码Basys2开发板(代码在文末下载)
软件:ISE
语言:VHDL
代码功能:
两种地鼠的产生方式:
①用8位LED灯对应8个地洞,用4×4矩阵键盘中的1~8键对应打的动作。
②用4位LED灯指示0001至111对应15个地洞,用4×4矩阵键盘中的15个按键对应打的动作。
功能:
①按“开始”键进入游戏状态,每轮游戏计时20秒。每隔一定时间随机出现一只地鼠,此时如果没有及时按下按键或者虽然有键按下但是与地鼠出现的位置不致,表示没有打中。
如果按键值与地鼠出现的位置一致,表示打中了,打中一只加1分。数码管显示得分。
②游戏结束后再按“开始”键,得分清零,开始新游戏。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在Basys2开发板验证,开发板如下,其他开发板可以修改管脚适配:
工程文件:
程序文件:
程序编译:
管脚分配:
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);--数码管位选 ??????seg_select??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--数码管段选 ???); 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; --随机数产生模块 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;--复位 ??????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);--分数?????? ??????bit_select?????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--数码管位选 ??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--数码管段选 ???); 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 --调用分频模块 ???i_fengping?:?fengping ??????PORT?MAP?( ?????????clk_50m??=>?clk_50M, ?????????clk_div??=>?clk_div ??????); ??? ??? ???--调用随机数模块 ???i_LFSR?:?LFSR ??????PORT?MAP?( ?????????clk?????????=>?clk_div, ?????????reset_p?????=>?reset, ?????????random_num??=>?random_num ??????); ??? ??? ???--调用控制模块 ???i_control?:?control ??????PORT?MAP?( ?????????clk_div?????=>?clk_div, ?????????start???????=>?start, ?????????LED?????????=>?LED, ?????????key_num?????=>?key_num, ?????????random_num??=>?random_num, ?????????score???????=>?score ??????); ??? ??? ???--调用按键模块 ???i_keyboard?:?keyboard ??????PORT?MAP?( ?????????clk_div?????=>?clk_div, ?????????reset???????=>?reset, ?????????l_row???????=>?L_row, ?????????h_col???????=>?H_col, ?????????key_number??=>?key_num ??????); ??? ??? ???--调用显示模块 ???i_display?:?display ??????PORT?MAP?( ?????????clk?????????=>?clk_div, ?????????score???????=>?score, ?????????bit_select??=>?bit_select, ?????????seg_select??=>?seg_select ??????); ??? END?behave;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=282
阅读全文