名称:赛车游戏设计VHDL代码Quartus DE1-SOC开发板
软件:Quartus
语言:VHDL
代码功能:
1、设计一个简易的赛车游戏
2、提供6车道,通过按键控制小车移动
3、小车需要躲避其他车辆,避免碰撞
4、为简化设计,可以使用不同颜色方块表示小车
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在DE1-SOC开发板验证,DE1-SOC开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1、 工程文件
2、 程序文件
3、 程序编译
4、 RTL图
5、 管脚分配
部分代码展示:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.std_logic_unsigned.ALL; use IEEE.NUMERIC_STD.ALL; entity game_ctrl is Port ( reset : in STD_LOGIC; speed : in STD_LOGIC; left_key: in STD_LOGIC; right_key: in STD_LOGIC; clk_vga : in STD_LOGIC; show_en : in STD_LOGIC; h_count: in integer; v_count: in integer; score_display: out STD_LOGIC_VECTOR (7 downto 0); red: out STD_LOGIC_VECTOR (2 downto 0); green: out STD_LOGIC_VECTOR (2 downto 0); blue: out STD_LOGIC_VECTOR (1 downto 0) ); end game_ctrl; architecture Behavioral of game_ctrl is signal my_car,car1_color,car2_color,car3_color,car4_color,lines_color: STD_LOGIC_VECTOR (0 to 7):="00000000"; signal car1_pos,car2_pos,car3_pos,car4_pos: integer range 24800 to 408799; signal my_car_left: integer range 0 to 800; signal automove_time_cnt: integer range 0 to 499; signal player_time_cnt: integer range 0 to 99999; signal lines_pos: integer range 24800 to 47799; signal restart: STD_LOGIC; signal score: STD_LOGIC_VECTOR (7 downto 0); signal score_cnt: integer range 0 to 50000000; signal move_val : integer range 0 to 2; begin move_val<= 1 when speed='0' else 2; process(clk_vga,reset) begin if(reset='1' or restart='1') then lines_pos<=24800; my_car_left<=429; car1_pos<=248800; car2_pos<=24800; car3_pos<=192800; car4_pos<=136800; my_car <= "00000000"; car1_color <= "00000000"; car2_color <= "00000000"; car3_color <= "00000000"; car4_color <= "00000000"; lines_color <= "00000000"; automove_time_cnt <= 0; player_time_cnt <= 0; restart<='0'; score<="00000000"; elsif (clk_vga='1' and clk_vga'event) then lines_pos<=24800; if(automove_time_cnt=499) then automove_time_cnt<=0; if(car1_pos>328800) then car1_pos<=24800; score<=score+"00000001"; else car1_pos<=car1_pos+move_val; end if; if(car2_pos>328800) then car2_pos<=24800; score<=score+"00000001"; else car2_pos<=car2_pos+move_val; end if; if(car3_pos>328800) then car3_pos<=24800; score<=score+"00000001"; else car3_pos<=car3_pos+move_val; end if; if(car4_pos>328800) then car4_pos<=24800; score<=score+"00000001"; else car4_pos<=car4_pos+move_val; end if;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1172
阅读全文
768