名称:篮球计时器倒计时器DE0-CV开发板篮球比赛定时器(代码在文末下载)
软件:Quartus II
语言:VHDL
代码功能:
篮球计时器倒计时器要求篮球比赛:
(1)主持人宣布比赛开始前,所有模块就位 。
(2)裁判宣布开始时,比赛正式开始,进入12分钟倒计时,同时进入24秒倒计时抢球,且信号灯显示抢到球的一方。
(3)当球被另方夺取时,重新进入24秒倒计时,信号灯显示抢到球的一方。
(4)当24秒倒计时为0时(犯规时),蜂呜器(信号灯)提示。
(5)当裁判宣布暂停吋,12分钟倒计吋暂停,24秒倒计时复位,进人60秒倒计时。60秒倒计时为0时,暂停结束,蜂鸣器(信号灯)提示,继续12分钟倒计时。
(6)一节比赛结束时,蜂鸣器(信号灯)提示,数码管显示节数。
本代码已在DE0-CV开发板验证,开发板如下,其他开发板可通过修改管脚适配:
演示视频:
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --控制模块 ENTITY?control?IS ???PORT?( ??????clk????????????:?IN?STD_LOGIC;--时钟 ??????reset??????????:?IN?STD_LOGIC;--复位 ??????clk_1??????????:?IN?STD_LOGIC;--1hz ??????start_n????????:?IN?STD_LOGIC;--开始 ??????stop_n?????????:?IN?STD_LOGIC;--暂停 ??????ball_sw1???????:?IN?STD_LOGIC;--抢球1 ??????ball_sw2???????:?IN?STD_LOGIC;--抢球2 ??????stop_led???????:?OUT?STD_LOGIC;--暂停指示灯 ??????over24sec_led??:?OUT?STD_LOGIC;--24s超时指示灯 ??????ball_led???????:?OUT?STD_LOGIC_VECTOR(1?DOWNTO?0);--抢球指示灯 ??????end_led????????:?OUT?STD_LOGIC;--结束指示灯 ??????match??????????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--比赛节数 ??????timedown_o?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--倒计时 ??????time12_min_o???:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--12分钟分 ??????time12_sec_o???:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--12分钟秒 ???); END?control; ARCHITECTURE?trans?OF?control?IS ???type?state_type?is?(s_idle,s_wait12min,s_stop,s_over24sec,s_end,s_start); ???signal?state?:?state_type; ???SIGNAL?ball_sw1_buf0?:?STD_LOGIC; ???SIGNAL?ball_sw1_buf1?:?STD_LOGIC; ???SIGNAL?ball_sw2_buf0?:?STD_LOGIC; ???SIGNAL?ball_sw2_buf1?:?STD_LOGIC; ???SIGNAL?sw1_r?????????:?STD_LOGIC; ???SIGNAL?sw2_r?????????:?STD_LOGIC; ???SIGNAL?time24????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?time60????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?time12_min????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?time12_sec????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000"; ???SIGNAL?match_num?????:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000"; ??? ??? BEGIN ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????ball_sw1_buf0?<=?ball_sw1;--抢球1 ?????????ball_sw1_buf1?<=?ball_sw1_buf0; ??????END?IF; ???END?PROCESS; ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????ball_sw2_buf0?<=?ball_sw2;--抢球2 ?????????ball_sw2_buf1?<=?ball_sw2_buf0; ??????END?IF; ???END?PROCESS; ??? ???sw1_r?<=?NOT(ball_sw1_buf0)?AND?ball_sw1_buf1;--抢球1 ???sw2_r?<=?NOT(ball_sw2_buf0)?AND?ball_sw2_buf1;--抢球2 ??? ???timedown_o?<=?time60?WHEN?(state?=?s_stop)?ELSE--根据状态切换显示60s还是24s倒计时 ?????????????????time24; ???time12_min_o?<=?time12_min;--分钟倒计时 ???time12_sec_o?<=?time12_sec;--秒钟倒计时 ??? ???PROCESS?(clk,?reset) ???BEGIN ??????IF?((NOT(reset))?=?'1')?THEN ?????????time60?<=?"00111100";--复位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_wait12min?AND?stop_n?=?'0')?THEN ????????????time60?<=?"00111100";--60s ?????????ELSIF?(state?=?s_stop?AND?clk_1?=?'1')?THEN ????????????time60?<=?time60?-?"00000001";--倒计时 ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???--24秒倒计时 ???PROCESS?(clk,?reset) ???BEGIN ??????IF?((NOT(reset))?=?'1')?THEN ?????????time24?<=?"00011000"; ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(sw1_r?=?'1'?OR?sw2_r?=?'1'?OR?start_n?=?'0')?THEN ????????????time24?<=?"00011000"; ?????????ELSIF?(state?=?s_stop)?THEN ????????????time24?<=?"00011000"; ?????????ELSIF?(state?=?s_wait12min?AND?clk_1?=?'1')?THEN ????????????time24?<=?time24?-?"00000001"; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???--12分钟倒计时 ???PROCESS?(clk,?reset) ???BEGIN ??????IF?((NOT(reset))?=?'1')?THEN ?????????time12_min?<=?"00000000"; ?????????time12_sec?<=?"00000000"; ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?(state?=?s_start)?THEN
设计文档:
1. 工程文件

2. 程序文件


3. 程序编译

4. RTL图

5. 管脚分配

6. 仿真图





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