贪吃蛇游戏DE1-SOC开发板VGA贪食蛇游戏VHDL代码下载

名称:贪吃蛇游戏DE1SOC开发板VGA贪食蛇游戏VHDL

软件:Quartus II

语言:VHDL

代码功能:

经典贪食蛇游戏VGA

要求:

1、实现经典的贪食蛇游戏

2、通过4个按键控制蛇的方向

3、果实可以随机产生

4、每吃到一次果实,加一分,且蛇变长

5、使用VGA显示游戏图像

本代码采用分模块设计,包括

蛇控制模块

随机信号产生模块(果实)

计分模块

导航状态机模块

通用计数器模块

VGA控制模块

主状态机模块

本代码已在DE1-SOC开发板验证,其他开发板可以修改管脚适配,开发板如下:

VGA_ball_DE1_SoC.png

工程文件:

a7bc9c85-b814-4646-a62b-5631545bc69e.png

代码编译:

190c9a16-eda1-4ce4-a1b9-a9cb3c0863be.png

RTL图

60e55188-1421-45b3-9681-31c8760d3758.png

管脚分配

556810cd-521f-48a5-b227-083df77d2e4f.png

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

代码下载:

贪吃蛇游戏DE1SOC开发板VGA贪食蛇游戏VHDL(代码在文末下载)软件:Quartus II语言:VHDL代码功能:经典贪食蛇游戏VGA要求:1、实现经典的贪食蛇游戏2、通过4个按键控制蛇的方向3、果实可以随机产生4、每吃到一次果实,加一分,且蛇变长5、使用VGA显示游戏图像本代码采用分模块设计,包括蛇控制模块随机信号产生模块(果实)计分模块导航状态机模块通用计数器模块VGA控制模块主状名称:贪吃蛇游戏DE1SOC开发板VGA贪食蛇游戏VHDL(代码在文末下载)软件:Quartus II语言:VHDL代码功能:经典贪食蛇游戏VGA要求:1、实现经典的贪食蛇游戏2、通过4个按键控制蛇的方向3、果实可以随机产生4、每吃到一次果实,加一分,且蛇变长5、使用VGA显示游戏图像本代码采用分模块设计,包括蛇控制模块随机信号产生模块(果实)计分模块导航状态机模块通用计数器模块VGA控制模块主状icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=246

部分代码展示:

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;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值