名稱:拔河游戲設(shè)計(jì)VHDL代碼Quartus仿真
軟件:Quartus
語(yǔ)言:VHDL
代碼功能:
拔河游戲通常是由兩隊(duì)人數(shù)相等的選手在河界兩側(cè)各執(zhí)繩索的一端,聞令后用力拉繩,以將對(duì)方拉出河界為勝。而在電子拔河游戲中,這一過(guò)程被轉(zhuǎn)化為電子信號(hào)的處理和顯示。使用led模擬繩子,通過(guò)按鍵按下的快慢來(lái)都發(fā)力。
設(shè)計(jì)指標(biāo):
電路使用9個(gè)發(fā)光二極管表示拔河的“電子繩”,開機(jī)后只有中間一個(gè)發(fā)亮,此即拔河的中心點(diǎn)。游戲甲乙雙方各持一個(gè)按鈕,迅速地不斷地按動(dòng)產(chǎn)生脈沖,誰(shuí)按得快,亮點(diǎn)向誰(shuí)方向移動(dòng),每按一次,亮點(diǎn)移動(dòng)一次。亮點(diǎn)移到任一方終端二極管,這一方就獲勝,此時(shí)雙方按鈕均無(wú)作用,輸出保持,只有復(fù)位后才使亮點(diǎn)恢復(fù)到中心。由裁判下達(dá)比賽開始命令后,甲乙雙方才能輸入信號(hào),否則輸入信號(hào)無(wú)效。用數(shù)碼管顯示獲勝者的盤數(shù),每次比賽結(jié)束自動(dòng)給獲勝方加分。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1.工程文件
2.程序文件
3.程序編譯
4.RTL圖
5.仿真圖
整體仿真圖
控制模塊
按鍵檢測(cè)模塊
顯示模塊
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --控制模塊 ENTITY?bahe_ctrl?IS ???PORT?( ??????clk???????:?IN?STD_LOGIC;--標(biāo)準(zhǔn)時(shí)鐘 ??????reset_n????????:?IN?STD_LOGIC;--復(fù)位信號(hào),低有效? reset_cnt????????:?IN?STD_LOGIC;--計(jì)數(shù)復(fù)位信號(hào),低有效? ??????shift1???????:?IN?STD_LOGIC;--選手1 ??????shift2???????:?IN?STD_LOGIC;--選手2 ??????led????????????:?OUT?STD_LOGIC_VECTOR(8?DOWNTO?0);--9個(gè)led ???win1_times?????:OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--1號(hào)獲勝次數(shù) ???win2_times?????:OUT?STD_LOGIC_VECTOR(15?DOWNTO?0)--2號(hào)獲勝次數(shù) ???); END?bahe_ctrl; ARCHITECTURE?behave?OF?bahe_ctrl?IS ??? ???TYPE?State_type?IS?(s_idle,?s_start,?s_left_shift,?s_right_shift,?s_win_1,?s_win_2);??--?定義狀態(tài) ???SIGNAL?state?:?State_Type;????--?創(chuàng)建信號(hào) ???SIGNAL?game_led??????:?STD_LOGIC_VECTOR(8?DOWNTO?0)?:=?"000010000"; SIGNAL?win1_num??????:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000"; SIGNAL?win2_num??????:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000"; BEGIN ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?((NOT(reset_n))?=?'1')?THEN ????????????state?--復(fù)位狀態(tài) ?????????????????????state?--游戲中 ??????????????????IF?(game_led?=?"100000000")?THEN ?????????????????????state?<=?s_win_1;--1號(hào)贏 ??????????????????ELSIF?(game_led?=?"000000001")?THEN ?????????????????????state?<=?s_win_2;--2號(hào)贏 ??????????????????ELSIF?(shift1?=?'1')?THEN ?????????????????????state?<=?s_left_shift;--led左移 ??????????????????ELSIF?(shift2?=?'1')?THEN ?????????????????????state?<=?s_right_shift;--led右移 ??????????????????ELSE ?????????????????????state?--led左移 ??????????????????state?--led右移 ??????????????????state? ??????????????????state? ??????????????????state? ????????????END?CASE; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?((NOT(reset_n))?=?'1')?THEN--復(fù)位 ????????????game_led?<=?"000010000"; ?????????ELSIF?(state?=?s_left_shift)?THEN ????????????game_led?<=?(game_led(7?DOWNTO?0)?&?'0');--led左移 ?????????ELSIF?(state?=?s_right_shift)?THEN ????????????game_led?<=?('0'?&?game_led(8?DOWNTO?1));--led右移 ?????????END?IF; ??????END?IF; ???END?PROCESS;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1516