贪食蛇VGA游戏设计VHDL代码VIVADO basys3开发板

名称:贪食蛇VGA游戏设计VHDL代码VIVADO  basys3开发板(文末获取)

软件:VIVADO

语言:VHDL

代码功能:贪食蛇VGA游戏设计

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

basys3开发板.png

1、工程文件

2、程序文件

3、程序编译

4、RTL图

5、管脚分配

6、关键代码说明

上板演示效果

部分代码展示:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
--VGA控制模块
entity vga_ctrl is
port (
   clk_25mHz   : in std_logic;
   rst         : in std_logic;
   snake       : in std_logic_vector(1 downto 0);
   food_x      : in std_logic_vector(5 downto 0);
   food_y      : in std_logic_vector(4 downto 0);
   x_coord, y_coord        : out std_logic_vector(9 downto 0);
   hsync, vsync            : out std_logic;
   color       : out std_logic_vector(11 downto 0)
);
end vga_ctrl;
architecture behavioral of vga_ctrl is
constant   none        : integer := 0;
constant   snake_head  : integer := 1;
constant   snake_body  : integer := 2;
constant   wall        : integer := 3;
constant   head_color  : std_logic_vector(11 downto 0) := "000011110000";
constant   body_color  : std_logic_vector(11 downto 0) := "000011111111";
signal clk_cnt     : std_logic_vector(19 downto 0);
signal line_cnt    : std_logic_vector(9 downto 0);
signal lox         : std_logic_vector(3 downto 0);
signal loy         : std_logic_vector(3 downto 0);
signal location : std_logic_vector(7 downto 0);
-- declare intermediate signals for referenced outputs
signal x_coord_int : std_logic_vector(19 downto 0);
signal y_coord_int : std_logic_vector(19 downto 0);
begin
-- drive referenced outputs
x_coord <= x_coord_int(9 downto 0);
y_coord <= y_coord_int(9 downto 0);
location <= loy & lox;
process (clk_25mHz, rst)
begin
   if rst = '1' then
      clk_cnt  '0');
      hsync <= '1';
      line_cnt  '0');
      
      vsync <= '1';
   elsif rising_edge(clk_25mHz) then
   
      x_coord_int <= clk_cnt - std_logic_vector(to_unsigned(144, 20));
      y_coord_int <= line_cnt - std_logic_vector(to_unsigned(33, 20));
      
      if clk_cnt = 0 then
         hsync <= '0';
         clk_cnt <= clk_cnt + 1;
         
      elsif clk_cnt = std_logic_vector(to_unsigned(96, 20)) then
         hsync <= '1';
         clk_cnt <= clk_cnt + 1;
      elsif clk_cnt = std_logic_vector(to_unsigned(799, 20)) then
         line_cnt <= line_cnt + 1;
         clk_cnt  '0');
      else
         clk_cnt <= clk_cnt + 1;
      end if;
源代码

点击下方的公众号卡片获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值