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

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

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

简介

这是一个使用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

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录