名称:幸运老虎机VHDL游戏DE2-115开发板(代码在文末下载)
软件:Quartus II
语言:VHDL
代码功能:
幸运老虎机是游戏厅里最简单的游戏之一,拉下幸运老虎机的拉杆,3个轮盘就会开始旋转,如果3个轮盘的指针都指 向同一个图案时,就会得到奖励。
本题目设计一个基于FPGA 的幸运老虎机。
设计要求
- 系统主要外设:自恢复式按键2个(keyl、key2)、LED灯2个、系统时钟(50MHz);
- 系统主要功能:设计一个游戏机,用3位数码管来代替老虎机的3个轮盘,用0-7的数字来代替老虎机轮盘上的不同图案。按下key1,3个数码管的数字开始循环显示,再次按下key1,3个数码管的数字停止循环,当显示的3个数字相同时,游戏胜利。
- *备注:要求三个数码管数字循环的速度不同,停止时的 延迟时间也要不同;游戏胜利时,LED1要闪烁提示;
- 有“作弊”功能, 来指示当前是否开启作弊模式。 按下该功能按键,每次都能赢,可用LED2的状态
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在DE2-115开发板验证,开发板如下,其他开发板可以修改管脚适配:
演示视频:
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; --老虎机游戏 ENTITY tiger_game IS PORT ( clk_in : IN STD_LOGIC;--50MHz rst_n : IN STD_LOGIC;--复位 key : IN STD_LOGIC;--输入按键 SW0 : IN STD_LOGIC;--作弊按键 LED2 : OUT STD_LOGIC;--作弊指示灯 HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管段选 HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管段选 HEX2 : 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 HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX2 : 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 hex0 => HEX0,--数码管段选 hex1 => HEX1,--数码管段选 hex2 => HEX2--数码管段选 ); ----赢了提示 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;
设计文档:
1.工程文件

2.程序文件


3.程序编译

4.RTL图

5.管脚分配

6.Testbench

7.仿真图
整体仿真图



数据控制模块


显示模块


赢了提示模块

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=262
阅读全文
1377