DE0-lite乒乓球游戏乒乓球VHDL代码下载

名称:DE0-lite乒乓球游戏乒乓球VHDL(代码在文末下载)

软件:QuartusII

语言:VHDL

代码功能:

要求:

1、 初始状态是没有灯亮

2、 如果按下SW(9)按钮,则流水灯方向从左到右,此时如果在0号灯亮的同时按下了SW(0)按钮,则流水灯反向,变为了从右到左,此时如果在9号灯亮的同时按下了SW(9)按钮,则流水灯又反向,如果在这个过程中没有在灯亮的同时按到按钮,则该过程结束,回到了初始状态:没有灯亮

3、 如果按下SW(0)按钮,则流水灯方向从右到左,此时如果在9号灯亮的同时按下了SW(9)按钮,则流水灯反向,变为了从左到右,此时如果在0号灯亮的同时按下了SW(0)按钮,则流水灯又反向,如果在这个过程中没有在灯亮的同时按到按钮,则该过程结束,回到了初始状态:没有灯亮

4、 然后可以重复2、3两条需求

本代码已在开发板验证,开发板如下,其他开发板只需要修改关键即可:

乒乓球.png

代码下载:

DE0,乒乓球DE0-lite乒乓球游戏乒乓球VHDL(代码在文末下载)软件:QuartusII语言:VHDL代码功能:要求:1、 初始状态是没有灯亮2、 如果按下SW(9)按钮,则流水灯方向从左到右,此时如果在0号灯亮的同时按下了SW(0)按钮,则流水灯反向,变为了从右到左,此时如果在9号灯亮的同时按下了SW(9)按钮,则流水灯又反向,如果在这个过程中没有在灯亮的同时按到按钮,则该过程结束,回到名称:DE0-lite乒乓球游戏乒乓球VHDL(代码在文末下载)软件:QuartusII语言:VHDL代码功能:要求:1、 初始状态是没有灯亮2、 如果按下SW(9)按钮,则流水灯方向从左到右,此时如果在0号灯亮的同时按下了SW(0)按钮,则流水灯反向,变为了从右到左,此时如果在9号灯亮的同时按下了SW(9)按钮,则流水灯又反向,如果在这个过程中没有在灯亮的同时按到按钮,则该过程结束,回到了初始状icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=229

部分代码展示

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--游戏控制模块
ENTITY game_ctrl IS
   PORT (
      clk_in            : IN STD_LOGIC;
      reset_p           : IN STD_LOGIC;--复位
      led               : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);--10个led
      button_posedge_1  : IN STD_LOGIC;--按键1
      button_posedge_2  : IN STD_LOGIC--按键2
   );
END game_ctrl;
ARCHITECTURE behave OF game_ctrl IS
   TYPE State_type IS (s_idle,s_start_1,s_start_2,s_run_L,s_run_R,s_win_1,s_win_2,s_end);--定义状态
   SIGNAL state : State_Type;-- 创建信号 
   SIGNAL led_buf     : STD_LOGIC_VECTOR(9 DOWNTO 0) := "0000000000";
   SIGNAL shift_en    : STD_LOGIC := '0';
   SIGNAL time_cnt    : STD_LOGIC_VECTOR(31 DOWNTO 0) := "00000101111101011110000100000000";
BEGIN
--状态机设计
   PROCESS (clk_in)
   BEGIN
      IF (clk_in'EVENT AND clk_in = '1') THEN
         IF (reset_p = '1') THEN
            state <= s_idle;
         ELSE
            CASE state IS--初始状态
               WHEN s_idle =>
                  led_buf <= "0000000000";
                  IF (button_posedge_1 = '1') THEN--1号发球
                     state <= s_start_1;
                  ELSIF (button_posedge_2 = '1') THEN--2号发球
                     state <= s_start_2;
                  ELSE
                     state <= s_idle;
                  END IF;
               WHEN s_start_1 =>--1号发球起始位置
                  state <= s_run_R;
                  led_buf <= "1000000000";
               WHEN s_start_2 =>--2号发球起始位置
                  state <= s_run_L;
                  led_buf <= "0000000001";
               WHEN s_run_R =>--球右移
                  IF (shift_en = '1') THEN
                     led_buf <='0' & led_buf(9 downto 1);--球右移
                  ELSE
                     led_buf <= led_buf;
                  END IF;
                  IF (button_posedge_2 = '1') THEN
                     IF (led_buf = "0000000001") THEN--判断对方是否正确位置击球     
                        state <= s_run_L;--改变方向
                     ELSE
                        state <= s_win_1;--否则得分
                     END IF;
                  ELSIF (led_buf = "0000000000") THEN--对方未在正确位置击球
                     state <= s_win_1;
                  ELSE
                     state <= s_run_R;
                  END IF;
               WHEN s_run_L =>--球左移
                  IF (shift_en = '1') THEN
                     led_buf <= led_buf(8 downto 0) & '0';--球左移
                  ELSE
                     led_buf <= led_buf;
                  END IF;
                  IF (button_posedge_1 = '1') THEN
                     IF (led_buf = "1000000000") THEN--判断对方是否正确位置击球  
                        state <= s_run_R;--改变方向
                     ELSE
                        state <= s_win_2;--否则得分
                     END IF;
                  ELSIF (led_buf = "0000000000") THEN--对方未在正确位置击球
                     state <= s_win_2;
                  ELSE
                     state <= s_run_L;
                  END IF;
               WHEN s_win_1 =>

FPGA代码Verilog/VHDL代码资源下载网:www.hdlcode.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值