• 方案介绍
  • 相关推荐
申请入驻 产业图谱

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

05/10 09:08
691
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称: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

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

部分代码展示

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?=>

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

相关推荐