投篮VGA游戏设计VHDL代码VIVADO basys3开发板
名称:投篮VGA游戏设计VHDL代码VIVADO basys3开发板
软件:VIVADO
语言:VHDL
代码功能:
投篮VGA游戏
VGA显示出长条代表小人,圆形球和梯形篮筐
设置:通过4个开关控制垂直速度,4个控制水平速度
按下十字开关中间建,投掷
VGA显示出球的运动过程,抛物线
如果投中篮筐,分数+1
最高5分,到达后重置
投完一次后,更改篮筐位置
返回设置过程,保持开关不变的话,还是原来的轨迹
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在basys3开发板验证,basys3开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1、工程文件

2、程序文件


3、程序编译

4、RTL图

5、管脚分配

部分代码展示:
LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.NUMERIC_STD.ALL; --use IEEE.std_logic_unsigned.all; --use IEEE.std_logic_arith.ALL; --游戏控制 ENTITY game_controller IS PORT ( clk_in,rst : IN STD_LOGIC;--100MHz pixel_clk:OUT STD_LOGIC;--VGA时钟 sw : IN unsigned(15 DOWNTO 8);--SW移动速度 btnL,btnR : IN STD_LOGIC;--按键 hcount : IN unsigned(10 DOWNTO 0); vcount : IN unsigned(10 DOWNTO 0); blank : IN STD_LOGIC;--空白指示 vgaRed: OUT STD_LOGIC_VECTOR(3 downto 0);--RGB vgaBlue: OUT STD_LOGIC_VECTOR(3 downto 0);--RGB vgaGreen: OUT STD_LOGIC_VECTOR(3 downto 0);--RGB receive: OUT STD_LOGIC--投中 ); end game_controller; ARCHITECTURE Behavioral OF game_controller IS signal clk_cnt: unsigned(1 DOWNTO 0) := "00"; signal clk: STD_LOGIC := '0'; signal new_frame: STD_LOGIC := '0'; signal left_of_stick : unsigned(10 DOWNTO 0); signal right_of_stick : unsigned(10 DOWNTO 0); signal left_of_ball : unsigned(10 DOWNTO 0); signal right_of_ball : unsigned(10 DOWNTO 0); signal top_of_ball : unsigned(10 DOWNTO 0); signal botton_of_ball : unsigned(10 DOWNTO 0); signal ball_h_move : unsigned(10 DOWNTO 0); signal ball_v_move : unsigned(10 DOWNTO 0); signal dir_up: STD_LOGIC; signal dir_down: STD_LOGIC; signal dir_left: STD_LOGIC; signal dir_right: STD_LOGIC; signal display_stick: STD_LOGIC; signal display_ball: STD_LOGIC; signal display_man: STD_LOGIC; signal move_x : unsigned(4 DOWNTO 0); signal move_y : unsigned(4 DOWNTO 0); signal frame_cnt : unsigned(1 DOWNTO 0); begin --计数0~3 process (clk_in) begin if (rising_edge(clk_in)) then clk_cnt <= clk_cnt + "01";--计数 end if; end process; clk"01") else '0';--25MHz pixel_clk"01") else '0';--25MHz new_frame<='1' when (vcount = 0) and (hcount = 0) else '0';--一副画面的起始时刻 --移动方向 process (clk, rst) begin if (rst = '1') then--复位 dir_left<='0'; dir_right<='0';--右移 dir_up<='0';--下移 dir_down<='0'; elsif (rising_edge(clk)) then if(btnL='1')then dir_left<='0'; dir_right<='1';--右移 dir_up<='1';--上移 dir_down<='0'; elsif (new_frame='1') then if (left_of_ball <= 1) then--移动到最左边 dir_left<='0'; dir_right= 639) then--移动到最右边 dir_left<='0';--左移 dir_right<='0'; end if;
代码文件(付费下载):
![]()
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 投篮VGA游戏设计VHDL代码VIVADO basys3开发板
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 投篮VGA游戏设计VHDL代码VIVADO basys3开发板
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm