乒乓球游戏 FPGA 设计 VHDL Quartus
名称:乒乓球游戏 FPGA 设计 VHDL Quartus
软件:Quartus
语言:VHDL
功能介绍
本设计实现一个基于FPGA的两人乒乓球游戏系统,采用VHDL硬件描述语言开发,整体功能围绕发球、击球、球体移动、失分判定、计分显示和胜利判定展开。系统用8位LED模拟乒乓球在球台上的位置变化,玩家A、玩家B通过各自按键完成击球操作,提前击球或球出界未击中都会触发相应失分逻辑。 系统支持8档速度调节,球体移动步长时间覆盖0.1s到0.5s,可通过3位速度选择开关改变游戏节奏。比赛规则采用11分制,A、B双方分别设置计分显示,任意一方先达到11分后给出胜利指示,便于直观看到当前局的胜负结果。 显示部分由LED球位显示、四位七段数码管分数显示和胜利指示灯组成。HEX0、HEX1显示A方个位和十位分数,HEX2、HEX3显示B方个位和十位分数,A_win_LED与B_win_LED用于输出对应玩家胜利状态,适合FPGA课程设计、状态机实验、数字系统综合设计等场景参考。运行环境
开发语言:VHDL 开发软件:Quartus 仿真测试:包含Testbench仿真文件,可用于验证分频、游戏控制、计分显示和顶层联调功能。 目标器件参考:Cyclone III EP3C25F324C8。设计思路
系统采用模块化设计,将完整的乒乓球游戏拆分为时钟分频、游戏控制、数码管显示和顶层集成几个部分。顶层模块负责连接外部时钟、复位、按键、速度开关、LED、数码管和胜利指示信号;游戏控制模块负责核心规则;分频模块负责产生球体移动节拍;显示模块负责把分数转换为七段数码管段码。 游戏逻辑采用有限状态机实现,状态包括空闲、A方发球、B方发球、向B方移动、向A方移动、A方得分、B方得分等。球的位置使用8位寄存器表示,通过移位方式模拟球在球台上的移动方向。系统根据当前球位、移动方向和玩家按键时机判断击球是否有效,从而完成方向反转、得分或进入下一轮发球。 速度控制由分频模块完成,输入100Hz系统时钟后,根据3位speed_sw选择不同分频系数。速度档位000到111分别对应不同移动节拍,最快约0.1s移动一位,最慢约0.5s移动一位。这样的设计既能体现硬件分频逻辑,也能让游戏难度具备可调节性。 计分部分采用BCD形式组织A、B双方分数,并通过数码管显示模块输出到HEX0到HEX3。分数递增时处理个位进位与十位显示,到达11分后触发对应胜利指示并锁定当前局结果,复位后可重新开始新一局。模块结构
顶层模块:pingpang_game,负责系统外部接口和各子模块连接。 分频模块:div_clk,将100Hz系统时钟转换为游戏移动节拍,并支持8档速度选择。 游戏控制模块:game,实现状态机控制、球位移位、击球判断、出界判定、分数计算和胜利判定。 分数显示模块:score_display,负责A、B双方分数的数码管显示组织。 七段译码模块:LED7S,将BCD数字转换为七段数码管段码。 测试模块:tb_pingpang_game,用于对顶层及关键游戏流程进行仿真验证。开发板验证
工程包含Quartus管脚约束/分配文件,可用于FPGA开发板按键、拨码开关、LED、数码管和胜利指示灯等外设连接验证。设计文档中给出了Cyclone III EP3C25F324C8器件实现参考,综合资源占用约172个逻辑单元、75个寄存器、45个引脚,资源占用较低,适合在同类FPGA实验平台上进行移植和验证。演示视频
包含演示视频,可用于查看乒乓球游戏运行效果、LED球位移动、双方按键击球、数码管计分以及胜利指示等功能表现。仿真图/仿真说明/设计文档图片
设计文档包含工程文件、程序文件、程序编译、RTL图、Testbench仿真图、顶层模块仿真图、分频模块仿真图、控制模块仿真图和显示模块仿真图等内容。 仿真说明覆盖分频模块速度切换、游戏状态机转换、球位移位方向、合法击球、提前击球、出界判定、0到11分计分递增、BCD进位和数码管段码输出等关键功能。顶层仿真展示了分频模块、游戏控制模块和显示模块之间的信号传递关系,可用于理解完整系统的数据流和控制流程。





























部分代码
以下展示顶层模块 pingpang_game 的部分代码,完整源码请下载压缩包查看。
ENTITY pingpang_game IS
PORT (
clk : IN STD_LOGIC; -- 输入:100Hz系统时钟(周期10ms)
rst_n : IN STD_LOGIC; -- 输入:低有效复位信号('0'复位)
play_A : IN STD_LOGIC; -- 输入:A玩家击球按键(低有效)
play_B : IN STD_LOGIC; -- 输入:B玩家击球按键(低有效)
speed_sw : IN STD_LOGIC_VECTOR(2 DOWNTO 0); -- 输入:3位速度选择拨码开关
led : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- 输出:8位台面LED显示(低有效)
HEX0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -- 输出:A玩家分数个位数码管段码
HEX1 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -- 输出:A玩家分数十位数码管段码
HEX2 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -- 输出:B玩家分数个位数码管段码
HEX3 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -- 输出:B玩家分数十位数码管段码
A_win_LED : OUT STD_LOGIC; -- 输出:A玩家胜利指示灯(高有效)
B_win_LED : OUT STD_LOGIC -- 输出:B玩家胜利指示灯(高有效)
);
END pingpang_game;
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 乒乓球游戏 FPGA 设计 VHDL Quartus
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 乒乓球游戏 FPGA 设计 VHDL Quartus