• 方案介紹
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

DE0-lite乒乓球游戲乒乓球VHDL代碼

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

名稱:DE0-lite乒乓球游戲乒乓球VHDL(代碼在文末下載)

軟件:QuartusII

語言:VHDL

代碼功能:

要求:

1、?初始狀態(tài)是沒有燈亮。

2、?如果按下SW(9)按鈕,則流水燈方向從左到右,此時(shí)如果在0號燈亮的同時(shí)按下了SW(0)按鈕,則流水燈反向,變?yōu)榱藦挠业阶?,此時(shí)如果在9號燈亮的同時(shí)按下了SW(9)按鈕,則流水燈又反向,如果在這個過程中沒有在燈亮的同時(shí)按到按鈕,則該過程結(jié)束,回到了初始狀態(tài):沒有燈亮。

3、?如果按下SW(0)按鈕,則流水燈方向從右到左,此時(shí)如果在9號燈亮的同時(shí)按下了SW(9)按鈕,則流水燈反向,變?yōu)榱藦淖蟮接?,此時(shí)如果在0號燈亮的同時(shí)按下了SW(0)按鈕,則流水燈又反向,如果在這個過程中沒有在燈亮的同時(shí)按到按鈕,則該過程結(jié)束,回到了初始狀態(tài):沒有燈亮。

4、?然后可以重復(fù)2、3兩條需求。

本代碼已在開發(fā)板驗(yàn)證,開發(fā)板如下,其他開發(fā)板只需修改管腳即可:

乒乓球.png

FPGA代碼Verilog/VHDL代碼資源下載網(wǎng):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;--復(fù)位
??????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);--定義狀態(tài)
???SIGNAL?state?:?State_Type;--?創(chuàng)建信號?
???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
--狀態(tài)機(jī)設(shè)計(jì)
???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--初始狀態(tài)
???????????????WHEN?s_idle?=>
??????????????????led_buf?<=?"0000000000";
??????????????????IF?(button_posedge_1?=?'1')?THEN--1號發(fā)球
?????????????????????state?<=?s_start_1;
??????????????????ELSIF?(button_posedge_2?=?'1')?THEN--2號發(fā)球
?????????????????????state?<=?s_start_2;
??????????????????ELSE
?????????????????????state?<=?s_idle;
??????????????????END?IF;
???????????????WHEN?s_start_1?=>--1號發(fā)球起始位置
??????????????????state?<=?s_run_R;
??????????????????led_buf?<=?"1000000000";
???????????????WHEN?s_start_2?=>--2號發(fā)球起始位置
??????????????????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?=>

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=229

相關(guān)推薦