• 正文
  • 相关推荐
申请入驻 产业图谱

基于VHDL的老虎机游戏机Quartus睿智开发板

10/23 15:42
307
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

简介

这是一个使用VHDL语言实现的老虎机游戏,可在FPGA开发板上运行。游戏通过三个七段数码管显示滚动的数字,玩家通过按键控制数字的停止,当三个数字相同时即为获胜。

主要功能

-**数字滚动**:按下按键后,三个数码管以不同速度循环显示0-7的数字。

-**按键控制**:松开按键后,三个数码管会依次延迟停止。

-**胜利判断**:当三个数码管显示的数字相同时,玩家获胜。

-**胜利提示**:获胜后会通过蜂鸣器发出声音提示。

-**作弊模式**:带有一个作弊开关,开启后可以保证获胜。

设计

### 软件与语言

-**软件**:Quartus II

-**语言**:VHDL

代码实现思路

项目采用自顶向下的模块化设计方法,将整个系统分为按键控制、数据显示、蜂鸣器控制和按键消抖等几个核心模块。

1.??**顶层模块 (`tiger_game.vhd`)**:作为设计的顶层,负责例化并连接各个子模块,实现模块间的信号交互。

2.??**数据控制模块 (`data_ctrl.vhd`)**:这是设计的核心,通过一个状态机来管理游戏流程。它处理按键输入,控制数字的滚动和停止,并包含一个作弊功能,在特定条件下强制让三个数字相同。

3.??**显示模块 (`display.vhd`)**:负责驱动三个七段数码管。它接收来自数据控制模块的三个数字,并通过动态扫描的方式将它们显示出来。

4.??**蜂鸣器控制模块 (`BEEP_ctrl.vhd`)**:在游戏胜利时(即三个数字相同且游戏状态为结束时),驱动蜂鸣器发出提示音。

5.??**按键消抖模块 (`key_jitter.vhd`)**:用于消除按键抖动,确保系统接收到稳定、单一的按键信号。

代码结构

-`tiger_game.vhd`: 顶层文件,连接了板级IO和各个子模块。

-`data_ctrl.vhd`: 游戏逻辑控制模块,包含状态机,负责生成和控制三个随机数。

-`display.vhd`: 数码管显示驱动模块,将三个数字动态显示在三个数码管上。

-`key_jitter.vhd`: 按键消抖模块,为系统提供稳定的按键信号。

-`BEEP_ctrl.vhd`: 蜂鸣器控制模块,在获胜时发出声音。

本代码已在以下开发板验证:

1、工程文件

2、程序文件

 

3、程序编译

4、RTL图

5、管脚分配

6、仿真图

整体仿真图

控制模块

蜂鸣器模块

数码管显示模块

部分代码展示

LIBRARY ieee;? ?USE ieee.std_logic_1164.all;--老虎机游戏--用三位数码管显示0~7之间的数码,按下按钮,三个数码管循环显示,抬起按钮,显示停--止,当显示内容相同时为赢。?--1.三个数码管循环显示的速度不同;?--2.停止时的延迟时间也要不同;?--*3.如果赢了游戏时,要有数码管或LED的花样显示或声音提示(有作弊开关)ENTITY tiger_game?IS? ?PORT (? ? ? clk_in ?:?IN?STD_LOGIC;--50MHz? ? ? rst_n ? :?IN?STD_LOGIC;--复位? ? ? key ? ? :?IN?STD_LOGIC;--输入按键--S1		SW0 ? ? :?IN?STD_LOGIC;--作弊按键--拨码		LED2 ? ?:?OUT?STD_LOGIC;--作弊指示灯? ? ? bit_select ? ? ? ? ? ? :?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--数码管位选? ? ? seg_select ? ? ? ? ? ? :?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--数码管段选	? ? ? BEEP ? ?:?OUT?STD_LOGIC--赢了提示? ?);END?tiger_game;ARCHITECTURE behave?OF?tiger_game?IS--按键控制? ?COMPONENT data_ctrl?IS? ? ? PORT (? ? ? ? ?clk_in ?:?IN?STD_LOGIC;? ? ? ? ?rst_n ? :?IN?STD_LOGIC;? ? ? ? ?key ? ? :?IN?STD_LOGIC;		 ? SW0 ? ? :?IN?STD_LOGIC;--作弊按键		 ? LED2 ? ?:?OUT?STD_LOGIC;--作弊指示灯			? ? ? ? ?current_state :?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0);? ? ? ? ?data_1 ?:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);? ? ? ? ?data_2 ?:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);? ? ? ? ?data_3 ?:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0)? ? ? );? ?END?COMPONENT;? ?----赢了提示? ?COMPONENT BEEP_ctrl?IS? ? ? PORT (? ? ? ? ?clk_in ?:?IN?STD_LOGIC;? ? ? ? ?rst_n ? :?IN?STD_LOGIC;? ? ? ? ?current_state :?IN?STD_LOGIC_VECTOR(2?DOWNTO?0);? ? ? ? ?data_1 ?:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);? ? ? ? ?data_2 ?:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);? ? ? ? ?data_3 ?:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);? ? ? ? ?BEEP ? ?:?OUT?STD_LOGIC? ? ? );? ?END?COMPONENT;--显示模块COMPONENT display?IS? ?PORT (? ? ? clk ? ? ? ? ? ? ? ? ? ?:?IN?STD_LOGIC;		 data_1 ?:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--数字1		 data_2 ? ?:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--数字2		 data_3 ?:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--数字3? ? ? bit_select ? ? ? ? ? ? :?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--数码管位选? ? ? seg_select ? ? ? ? ? ? :?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--数码管段选	? ?);END?COMPONENT;? ?SIGNAL data_1 ? ? ? ?: STD_LOGIC_VECTOR(3?DOWNTO?0);? ?SIGNAL data_2 ? ? ? ?: STD_LOGIC_VECTOR(3?DOWNTO?0);? ?SIGNAL data_3 ? ? ? ?: STD_LOGIC_VECTOR(3?DOWNTO?0);? ?SIGNAL current_state : STD_LOGIC_VECTOR(2?DOWNTO?0);BEGIN--按键控制? ?i_data_ctrl : data_ctrl? ? ? PORT MAP (? ? ? ? ?clk_in ? ? ? ??=>?clk_in,--50MHz? ? ? ? ?rst_n ? ? ? ? ?=>?rst_n,--复位? ? ? ? ?key ? ? ? ? ? ?=>?key,--输入按键		 ? SW0 ? ? ? ? ? ?=>SW0 ,--作弊按键		 ? LED2 ? ? ? ? ??=>LED2 ,--作弊指示灯			? ? ? ? ?current_state ?=>?current_state,--当前状态? ? ? ? ?data_1 ? ? ? ??=>?data_1,--数字1? ? ? ? ?data_2 ? ? ? ??=>?data_2,--数字2? ? ? ? ?data_3 ? ? ? ??=>?data_3--数字3? ? ? );--数码管显示模块? ?i_display : display? ? ? PORT MAP (? ? ? ? ?clk ? ??=>?clk_in,? ? ? ? ?data_1 ?=>?data_1,--数字1? ? ? ? ?data_2 ?=>?data_2,--数字2? ? ? ? ?data_3 ?=>?data_3,--数字3? ? ? ? ?bit_select ? ?=>?bit_select,--数码管位选? ? ? ? ?seg_select ? ?=>?seg_select?--数码管段选	? ? ? );? ?----赢了提示? ?i_BEEP_ctrl : BEEP_ctrl? ? ? PORT MAP (? ? ? ? ?clk_in ? ? ? ??=>?clk_in,--50MH? ? ? ? ?rst_n ? ? ? ? ?=>?rst_n,--复位? ? ? ? ?current_state ?=>?current_state,--当前状态? ? ? ? ?data_1 ? ? ? ??=>?data_1,--数字1? ? ? ? ?data_2 ? ? ? ??=>?data_2,--数字2? ? ? ? ?data_3 ? ? ? ??=>?data_3,--数字3? ? ? ? ?BEEP ? ? ? ? ??=>?BEEP?----赢了提示? ? ? );END?behave;

【来源:www.hdlcode.com

相关推荐