名称:双人弹球游戏VGA显示设计VHDL代码Quartus DE1_SoC开发板(文末获取)
软件:Quartus
语言:VHDL
代码功能:
设计一个弹球游戏,并在VGA显示器上显示
1、可以控制游戏开始,开始时数码管显示0分
2、使用按键控制球拍的运动,当控制球拍接住球时,分数加1
3、弹球触碰屏幕边缘或者球拍时可以反弹
4、可以控制小球的移动速度和球拍的大小
4、当未成功接球时,游戏结束
本代码已在DE1_SoC开发板验证,DE1_SoC开发板如下,其他开发板可以修改管脚适配:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
6. 上板验证效果
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --产生墙、球和球拍 ENTITY graphic_generator IS PORT ( clk : IN STD_LOGIC;--时钟 rst : IN STD_LOGIC;--复位 speed_sw : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--控制速度 size_sw : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--控制球拍大小 btn : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--球拍移动按键 btn2 : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--球拍移动按键 pixel_x : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--当前x坐标 pixel_y : IN STD_LOGIC_VECTOR(9 DOWNTO 0);--当前y坐标 video_on : IN STD_LOGIC;--显示使能 score : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--分数1 score2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--分数2 rgb : OUT STD_LOGIC_VECTOR(11 DOWNTO 0)--RGB颜色 ); END graphic_generator; ARCHITECTURE behave OF graphic_generator IS SIGNAL refr_tick : STD_LOGIC; SIGNAL paddle_y_t : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL paddle_y_b : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL paddle_y_reg : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL paddle_y_next : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL paddle2_y_t : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL paddle2_y_b : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL paddle2_y_reg : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL paddle2_y_next : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL ball_x_l : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL ball_x_r : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL ball_y_t : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL ball_y_b : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL ball_x_reg : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL ball_y_reg : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL ball_x_next : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL ball_y_next : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL x_delta_reg : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL x_delta_next : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL y_delta_reg : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL y_delta_next : STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL wall_on : STD_LOGIC; SIGNAL paddle_on : STD_LOGIC; SIGNAL paddle2_on : STD_LOGIC; SIGNAL ball_on : STD_LOGIC; SIGNAL wall_rgb : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL paddle_rgb : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL paddle2_rgb : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL ball_rgb : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL hit_on : STD_LOGIC:='0'; SIGNAL hit_on_buf0 : STD_LOGIC:='0'; SIGNAL hit_on_buf1 : STD_LOGIC:='0'; SIGNAL score_buf : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL hit2_on : STD_LOGIC:='0'; SIGNAL hit2_on_buf0 : STD_LOGIC:='0'; SIGNAL hit2_on_buf1 : STD_LOGIC:='0'; SIGNAL score2_buf : STD_LOGIC_VECTOR(3 DOWNTO 0);
源代码
点击下方的公众号卡片获取