赞
踩
上一篇文章主要介绍了VGA一些基本的东西,然后想用VGA做一个贪吃蛇游戏,本来以为会开发一段时间,没想到两天就写完了,这篇文章就简单谈一谈VGA贪吃蛇的设计思路,由于代码过多,这篇就仅在结尾处贴出顶层模块代码
---------此篇文章主要内容:FPGA-VGA贪吃蛇游戏设计思路
负责在四种游戏状态(游戏开始、难度选择、游戏进行、游戏结束)的切换,根据不同游戏状态下-按键的输入,输出不同的游戏状态信号(状态机控制)
其中,在游戏进行中时:
根据按键控制模块输出的四种游戏状态,切换不同显示画面
负责显示一个170*170像素贪吃蛇图片,事先存放到片内ROM中,使用时进行输出
负责选择游戏难易程度,根据上、下按键的输入,输出不同的速度值信号
接收游戏进行模块输出的游戏分数,显示游戏结束和游戏分数
从开始构思框架、写流程、敲代码、实板测试、调试BUG等等,来来回回折腾了整整两天,眼睛都盯电脑盯花了,不过结果还不错
由于代码太多了,这里就仅贴一个顶层模块的代码
附:顶层模块源码
/* -----VGA贪吃蛇游戏----- */ module Top_VGA_Game_Snake( input sys_clk_50, // 全局时钟信号 input sys_rst_n, // 复位信号(低有效) input [ 3:0] key, // 按键输入:上-下-左-右<--->key[0]-key[1]-key[2]-key[3] output [23:0] vga_rgb, // RGB888红绿蓝三原色输出 output vga_hs, // 行同步信号 output vga_vs, // 场同步信号 output vga_clk_25, // VGA时钟 output vga_blank, // 场消隐信号 output vga_sync // 同步控制信号输入 ); // 连线型变量 wire locked_w; wire rst_n_w; wire vga_clk_25_w; wire [ 9:0] pixel_xpos_w; wire [ 9:0] pixel_ypos_w; wire [23:0] data_start_w; wire [23:0] data_speed_w; wire [23:0] data_play_w; wire [23:0] data_end_w; wire [ 3:0] state_m_w; wire speed_m_w; wire [ 3:0] move_d_w; wire game_over_w; wire [ 5:0] game_score_w; /* -----main code----- */ assign vga_clk_25 = vga_clk_25_w; // 待PLL输出稳定之后,停止复位 assign rst_n_w = locked_w & sys_rst_n; // 同步控制信号输入(这里不需要,可直接接低电平) assign vga_sync = 1'b0; // PLL_IP核例化模块,进行时钟分频,输出25MHz pll_clk u_pll_clk( .areset (~sys_rst_n ), // 由于锁相环为高电平复位,故取反 .inclk0 (sys_clk_50 ), .c0 (vga_clk_25_w), .locked (locked_w ) ); // VGA驱动模块 VGA_Driver u_VGA_Driver( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .state_m (state_m_w ), .data_start (data_start_w), // 接收当前游戏状态 .data_speed (data_speed_w), // 接收设定游戏速度 .data_play (data_play_w ), .data_end (data_end_w ), .vga_rgb (vga_rgb ), .vga_hs (vga_hs ), .vga_vs (vga_vs ), .vga_blank (vga_blank ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w) ); // 按键控制模块 Key_Ctrl u_Key_Ctrl( .clk (sys_clk_50 ), .rst_n (rst_n_w ), .key (key ), .game_over (game_over_w), // 接收游戏结束信号 .state_m (state_m_w ), // 输出当前游戏状态 .move_d (move_d_w ), // 输出贪吃蛇移动方向 .speed_m (speed_m_w ) // 输出设置的游戏速度 ); // 游戏开始界面 Game_Start u_Game_Start( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .pixel_data (data_start_w) ); // 速度选择界面 Game_Speed u_Game_Speed( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .pixel_data (data_speed_w) // 输出游戏速度设置 ); // 游戏进行界面 Game_Play u_Game_Play( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .state_m (state_m_w ), // 接收当前游戏状态 .speed_m (speed_m_w ), // 接收设置的游戏速度 .move_dirt (move_d_w ), // 接收贪吃蛇移动方向 .game_over (game_over_w ), // 输出游戏结束信号 .game_score (game_score_w), // 输出游戏得分 .pixel_data (data_play_w ) ); // 游戏结束界面 Game_End u_Game_End( .vga_clk_25 (vga_clk_25_w), .rst_n (rst_n_w ), .pixel_xpos (pixel_xpos_w), .pixel_ypos (pixel_ypos_w), .game_score (game_score_w), // 接收游戏得分 .pixel_data (data_end_w ) ); endmodule
https://download.csdn.net/download/hxt691083776/13102976?spm=1001.2014.3001.5503
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。