名称:贪吃蛇游戏DE1SOC开发板VGA贪食蛇游戏VHDL(代码在文末下载)
软件:Quartus II
语言:VHDL
代码功能:
经典贪食蛇游戏VGA
要求:
1、实现经典的贪食蛇游戏。
2、通过4个按键控制蛇的方向。
3、果实可以随机产生。
4、每吃到一次果实,加一分,且蛇变长。
5、使用VGA显示游戏图像。
本代码采用分模块设计,包括:
本代码已在DE1-SOC开发板验证,其他开发板可以修改管脚适配,开发板如下:
工程文件:
代码编译:
RTL图
管脚分配
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???use?ieee.std_logic_arith.all; --贪食蛇游戏 ENTITY?Snake?IS ???PORT?( ??????PUSH_BUTTONS??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--方向键 ??????CLOCK?????????:?IN?STD_LOGIC;--50M ??????RESET?????????:?IN?STD_LOGIC;--haigh?reset ??????COLOUR_OUT????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--332位--RGB颜色 VGA_CLK???????:?OUT?STD_LOGIC;--VGA时钟 VGA_BLANK_N???:?OUT?STD_LOGIC;--VGA颜色信号有效控制信号,高电平有效 ??????HS????????????:?OUT?STD_LOGIC;--行同步信号 ??????VS????????????:?OUT?STD_LOGIC--场同步信号 ???); END?Snake; ARCHITECTURE?behave?OF?Snake?IS --蛇控制模块 ???COMPONENT?SnakeControl?IS ??????PORT?( ?????????CLK???????????:?IN?STD_LOGIC; ?????????GAMECLOCK?????:?IN?STD_LOGIC; ?????????ADDRH?????????:?IN?STD_LOGIC_VECTOR(9?DOWNTO?0); ?????????ADDRV?????????:?IN?STD_LOGIC_VECTOR(8?DOWNTO?0); ?????????COLOUR????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????REACHED_TARGET?:?OUT?STD_LOGIC; ?????????MASTER_STATE??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????NAVIGATION_STATE?:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????RAND_ADDRH????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????RAND_ADDRV????:?IN?STD_LOGIC_VECTOR(6?DOWNTO?0); ?????????SCORE?????????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????SUICIDE???????:?OUT?STD_LOGIC ??????); ???END?COMPONENT; ??? --随机信号产生模块(果实) ???COMPONENT?RandomWrapper?IS ??????PORT?( ?????????CLK???????????:?IN?STD_LOGIC; ?????????RESET?????????:?IN?STD_LOGIC; ?????????NEXT_apple????:?IN?STD_LOGIC; ?????????MASTER_STATE??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????HORIZONTAL????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????VERTICAL??????:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0) ??????); ???END?COMPONENT; ??? --计分模块 ???COMPONENT?ScoreCounter?IS ??????PORT?( ?????????RESET?????????:?IN?STD_LOGIC; ?????????GAMECLOCK?????:?IN?STD_LOGIC; ?????????REACHED_TARGET?:?IN?STD_LOGIC; ?????????CURRENT_SCORE?:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0) ??????); ???END?COMPONENT; ??? --导航状态机模块 ???COMPONENT?NavigationStateMachine?IS ??????PORT?( ?????????RESET?????????:?IN?STD_LOGIC; ?????????CLOCK?????????:?IN?STD_LOGIC; ?????????PUSH_BUTTONS??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????STATE_OUT?????:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0) ??????); ???END?COMPONENT; ??? --通用计数器模块 ???COMPONENT?GenericCounter?IS ??????GENERIC?( ?????????COUNTER_WIDTH?:?INTEGER?:=?4; ?????????COUNTER_MAX???:?INTEGER?:=?9 ??????); ??????PORT?( ?????????CLK???????????:?IN?STD_LOGIC; ?????????RESET?????????:?IN?STD_LOGIC; ?????????ENABLE_IN?????:?IN?STD_LOGIC; ?????????TRIGG_OUT?????:?OUT?STD_LOGIC; ?????????COUNT?????????:?OUT?STD_LOGIC_VECTOR(COUNTER_WIDTH?-?1?DOWNTO?0) ??????); ???END?COMPONENT; ??? --VGA控制模块 ???COMPONENT?VGAWrapper?IS ??????PORT?( ?????????CLK???????????:?IN?STD_LOGIC; ?????????MASTER_STATE??:?IN?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????ADDRH?????????:?OUT?STD_LOGIC_VECTOR(9?DOWNTO?0); ?????????ADDRV?????????:?OUT?STD_LOGIC_VECTOR(8?DOWNTO?0); ?????????CIN???????????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????????COUT??????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); VGA_CLK???????:?OUT?STD_LOGIC; VGA_BLANK_N???:?OUT?STD_LOGIC; ?????????HS????????????:?OUT?STD_LOGIC; ?????????VS????????????:?OUT?STD_LOGIC ??????); ???END?COMPONENT; ??? --主状态机模块 ???COMPONENT?MasterStateMachine?IS ??????PORT?( ?????????RESET?????????:?IN?STD_LOGIC; ?????????CLOCK?????????:?IN?STD_LOGIC; ?????????PUSH_BUTTONS??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????SCORE_IN??????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0); ?????????STATE_OUT?????:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0); ?????????SUICIDE_IN????:?IN?STD_LOGIC ??????); ???END?COMPONENT; ??? ???SIGNAL?MasterState??????:?STD_LOGIC_VECTOR(1?DOWNTO?0):="00"; ???SIGNAL?NavState?????????:?STD_LOGIC_VECTOR(1?DOWNTO?0):=(others?=>'0'); ???SIGNAL?RandomAddrH??????:?STD_LOGIC_VECTOR(7?DOWNTO?0):=(others?=>'0'); ???SIGNAL?RandomAddrV??????:?STD_LOGIC_VECTOR(6?DOWNTO?0):=(others?=>'0'); ???SIGNAL?AddrH????????????:?STD_LOGIC_VECTOR(9?DOWNTO?0):=(others?=>'0'); ???SIGNAL?AddrV????????????:?STD_LOGIC_VECTOR(8?DOWNTO?0):=(others?=>'0'); ???SIGNAL?Colour???????????:?STD_LOGIC_VECTOR(7?DOWNTO?0):=(others?=>'0'); ???SIGNAL?ReachedTarget????:?STD_LOGIC:='0'; ???SIGNAL?Score????????????:?STD_LOGIC_VECTOR(3?DOWNTO?0):=(others?=>'0'); ???SIGNAL?Gameclock????????:?STD_LOGIC:='0'; ???SIGNAL?Suicide??????????:?STD_LOGIC:='0'; ??? ???SIGNAL?COLOUR_OUT_buf?:?STD_LOGIC_VECTOR(7?DOWNTO?0):=(others?=>'0'); ???SIGNAL?HS_buf?????????:?STD_LOGIC:='0'; ???SIGNAL?VS_buf?????????:?STD_LOGIC:='0'; SIGNAL?NOT_PUSH_BUTTONS???:?STD_LOGIC_VECTOR(3?DOWNTO?0):=(others?=>'0'); BEGIN ???--控制输出 ???COLOUR_OUT?<=?COLOUR_OUT_buf; ???HS?<=?HS_buf; ???VS?<=?VS_buf; ??? NOT_PUSH_BUTTONS<=?not?PUSH_BUTTONS;--按键低电平有效转换为高电平有效 ??? ???--调用主状态机模块 ???MasterSTM?:?MasterStateMachine ??????PORT?MAP?( ?????????RESET?????????=>?RESET, ?????????CLOCK?????????=>?CLOCK, ?????????PUSH_BUTTONS??=>?NOT_PUSH_BUTTONS, ?????????SCORE_IN??????=>?Score, ?????????STATE_OUT?????=>?MasterState, ?????????SUICIDE_IN????=>?Suicide ??????); ??? ??? ???--调用导航状态机模块 ???NavSTM?:?NavigationStateMachine ??????PORT?MAP?( ?????????RESET?????????=>?RESET, ?????????CLOCK?????????=>?Gameclock, ?????????PUSH_BUTTONS??=>?NOT_PUSH_BUTTONS, ?????????STATE_OUT?????=>?NavState ??????); ??? ??? ???--调用随机信号产生模块(果实) ???RNDMWrp?:?RandomWrapper ??????PORT?MAP?( ?????????CLK???????????=>?CLOCK, ?????????RESET?????????=>?RESET, ?NEXT_apple????=>?ReachedTarget, ?????????MASTER_STATE??=>?MasterState, ?????????HORIZONTAL????=>?RandomAddrH, ?????????VERTICAL??????=>?RandomAddrV ??????); ??? ??? ???--调用通用计数器模块 ???GameSpeed?:?GenericCounter ??????GENERIC?MAP?( ?????????COUNTER_WIDTH??=>?22, ?????????COUNTER_MAX????=>?4166667 ??????) ??????PORT?MAP?( ?????????CLK????????=>?CLOCK, ?????????RESET??????=>?'0', ?????????ENABLE_IN??=>?'1', ?????????TRIGG_OUT??=>?Gameclock ??????); ??? ??? ???--调用蛇控制模块 ???SnakeCtl?:?SnakeControl ??????PORT?MAP?( ?????????CLK???????????????=>?CLOCK, ?????????GAMECLOCK?????????=>?Gameclock, ?????????ADDRH?????????????=>?AddrH, ?????????ADDRV?????????????=>?AddrV, ?????????COLOUR????????????=>?Colour, ?????????REACHED_TARGET????=>?ReachedTarget, ?????????MASTER_STATE??????=>?MasterState, ?????????NAVIGATION_STATE??=>?NavState, ?????????RAND_ADDRH????????=>?RandomAddrH, ?????????RAND_ADDRV????????=>?RandomAddrV, ?????????SCORE?????????????=>?Score, ?????????SUICIDE???????????=>?Suicide ??????); ??? ??? ???--调用VGA控制模块 ???VGAWrp?:?VGAWrapper ??????PORT?MAP?( ?????????CLK???????????=>?CLOCK, ?????????MASTER_STATE??=>?MasterState, ?????????ADDRH?????????=>?AddrH, ?????????ADDRV?????????=>?AddrV, ?????????CIN???????????=>?Colour, ?????????COUT??????????=>?COLOUR_OUT_buf, VGA_BLANK_N???=>?VGA_BLANK_N, VGA_CLK???????=>?VGA_CLK, ?????????HS????????????=>?HS_buf, ?????????VS????????????=>?VS_buf ??????); ??? ??? ???--调用计分模块 ???ScoreCnt?:?ScoreCounter ??????PORT?MAP?( ?????????RESET???????????=>?RESET, ?????????GAMECLOCK???????=>?Gameclock, ?????????REACHED_TARGET??=>?ReachedTarget, ?????????CURRENT_SCORE???=>?Score ??????); ??? END?behave;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=246
阅读全文
796