VGA 音乐游戏 FPGA 设计 Verilog Vivado
名称:VGA 音乐游戏 FPGA 设计 Verilog Vivado
软件:Vivado
语言:Verilog
功能介绍
本设计是一个基于 FPGA 的 VGA 音乐游戏工程,使用 Verilog 编写并在 Vivado 环境下开发。系统通过 VGA 输出游戏画面,结合键盘输入完成玩家操作,同时使用七段数码管显示分数,并预留 MP3 播放控制接口,用于实现音乐、轨道和按键响应相结合的游戏效果。 顶层模块 GAME_TOP 集成了 VGA 显示控制、PS/2 键盘输入、分数显示、MP3 控制、时钟管理和复位控制等功能。游戏逻辑通过 music_id 选择歌曲或关卡相关内容,通过 rst_track 控制轨道复位,VGA 输出包含 4 位 R/G/B 颜色信号以及 hs、vs 同步信号,适合连接常见 VGA 显示设备进行画面显示。 工程中使用 Vivado IP 生成的时钟模块和 Block Memory 相关模块,适合用于图像、轨道或音乐相关数据的存储和读取。整体功能覆盖 FPGA 游戏类课程设计常见要求:实时显示、按键交互、得分统计、数码管显示和外设控制,适合作为 VGA 游戏、音乐节奏游戏、PS/2 键盘控制和多模块系统集成的参考工程。运行环境
开发语言:Verilog 开发软件:Vivado 顶层模块:GAME_TOP 工程类型:FPGA VGA 音乐游戏设计,包含 Vivado 工程文件 VGA_hw.xpr、Verilog 源码、IP 配置、综合运行结果和管脚约束文件。设计思路
设计以 GAME_TOP 作为系统顶层,将显示、输入、计分和音频播放几个功能域组合在一起。外部 100MHz 时钟首先进入 clk_wiz_0,产生 VGA 显示使用的 65MHz 时钟和后级分频使用的 12MHz 时钟;Divider 再生成 1000Hz 扫描刷新时钟和 2MHz MP3 控制时钟,使不同外设运行在各自合适的时钟频率下。 游戏显示部分由 VGA 相关模块完成,顶层向其传入音乐编号、键盘状态和轨道复位信号,并输出 RGB、行同步 hs、场同步 vs 以及当前得分。这样的结构把画面生成、轨道状态和得分计算集中在显示游戏逻辑中,顶层只负责信号连接和系统集成,便于后续替换图像素材或调整轨道控制逻辑。 键盘模块负责采集 PS/2 键盘时钟和数据,将按键解析为内部 keys/key_state 信号供游戏逻辑使用;display_score 模块使用 1000Hz 时钟对七段数码管进行动态刷新,将 score 显示到数码管上。MP3 部分通过 mp3board 模块连接 SO、DREQ、XCS、XDCS、SCK、SI、XRESET 等信号,并根据 music_id 选择播放内容,实现画面游戏和音乐播放的联动。模块结构
顶层模块:GAME_TOP,负责连接时钟、键盘、VGA、MP3、数码管和调试 LED 等接口。 主要功能模块包括:clk_wiz_0 时钟生成模块,Divider 分频模块,vga 显示与游戏逻辑模块,keyboard 键盘解析模块,display_score 分数显示模块,mp3board 音频播放控制模块,以及 track_control 等轨道控制相关模块。 工程还包含多个 blk_mem_gen IP,用于配合游戏画面、轨道或相关数据存储;track_testbench 可用于轨道控制相关逻辑的仿真参考。开发板验证
工程已配置顶层管脚约束文件 top.xdc,可用于将 GAME_TOP 的 VGA、PS/2 键盘、数码管、MP3 模块控制信号、复位和调试 LED 等接口映射到实际 FPGA 引脚。顶层端口划分清晰,包含 clk_100、key_clk/key_data、music_id、VGA RGB/hs/vs、七段数码管 shift/oData 以及 MP3 模块 SPI/控制相关信号,便于结合开发板原理图进行硬件连接和验证。 该设计属于带外设联动的 FPGA 音乐游戏工程,板级验证重点包括 VGA 显示同步与颜色输出、键盘按键识别、分数显示刷新、音乐编号选择以及 MP3 播放控制信号时序。Vivado 综合结果已生成,适合作为课程设计、综合实验或 FPGA 游戏类项目的硬件实现参考。仿真图/仿真说明/设计文档图片
工程中包含 track_testbench,可用于在 Vivado 仿真环境中对轨道控制相关逻辑进行调试参考。设计文档以 PDF 形式随工程保留,可配合源码理解系统结构和实验设计思路。部分代码
以下展示顶层模块 GAME_TOP 的部分代码,完整源码请下载压缩包查看。
module GAME_TOP(
input clk_100, //100Mhz
//键盘
input key_clk, //键盘时钟
input key_data, //键盘输入数据
//复位控制
input rst, //复位
input rst_track, //轨道复位
//VGA
input [3:0] music_id, //第几首歌
output [3:0] color_r, //R
output [3:0] color_g, //G
output [3:0] color_b, //B
output hs, //行同??
output vs, //场同??
//七段数码管
output [7:0] shift,
output [6:0] oData,
//MP3
input SO, //传出
input DREQ, //数据请求,高电平时可传输数据
output XCS, //片???SCI 传输读???写指令
output XDCS, //片???SDI 传输数据
output SCK, //时钟
output SI, //传入mp3
output XRESET, //硬件复位,低电平有效
output [15:0] debugled
);
//时钟
wire clk_65,clk_12,clk_1000,clk_2,locked;
//键盘输入
wire [8:0] keys;
wire key_state;
//得分
wire [31:0] score;
//分频1
clk_wiz_0 uut(
.reset(~rst),
.locked(locked),
.clk_in1(clk_100),
.clk_out1(clk_65),
.clk_out2(clk_12)
);
//分频器2
Divider uut_divider(
.clk12Mhz(clk_12),
.clk1000hz(clk_1000),
.clk2Mhz(clk_2)
);
//VGA
vga uut_vga(
.clk(clk_65),
.rst(locked),
.rst_track(rst_track),
.music_id(music_id),
.keys(keys),
.key_state(key_state),
.color_r(color_r),
.color_g(color_g),
.color_b(color_b),
.hs(hs),
.vs(vs),
.score(score),
.debugled(debugled)
);
//MP3
mp3board uut_mp3(
.clk(clk_2),
.rst(rst),
.play(rst_track),
.SO(SO),
.DREQ(DREQ),
.XCS(XCS),
.XDCS(XDCS),
.SCK(SCK),
.SI(SI),
.XRESET(XRESET),
.music_id(music_id)
);
//键盘
keyboard uut_keyboard(
.clk_in(clk_100),
.rst(rst),
.key_clk(key_clk),
.key_data(key_data),
.key_state(key_state),
.key_ascii(keys)
);
//数码管显示分数
display_score uut_score(
.clk_1000hz(clk_1000),
.score(score),
.shift(shift),//第几个数码管(片选)
.oData(oData)
);
endmodule
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » VGA 音乐游戏 FPGA 设计 Verilog Vivado
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » VGA 音乐游戏 FPGA 设计 Verilog Vivado