名称:设计一个用于篮球比赛的定时器VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
设计一个用于篮球比赛的定时器 (一个工程)
1.基础部分:
(1)定时时间为24秒,按递减方式计时,每隔1秒,定时器减1;
(2)定时器的时间用两位数码管显示。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. 仿真图
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; ENTITY?timer_i?IS ???PORT?( ??????clk_in??:?IN?STD_LOGIC;--时钟100Hz ??????reset????:?IN?STD_LOGIC;--复位 ??????HEX1?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--数码管1 ??????HEX2?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--数码管2 ???); END?timer_i; ARCHITECTURE?trans?OF?timer_i?IS ??? ???SIGNAL?count????:?integer?:=?0; ??? ???SIGNAL?time_ten?:?STD_LOGIC_VECTOR(3?DOWNTO?0); ???SIGNAL?time_one?:?STD_LOGIC_VECTOR(3?DOWNTO?0); BEGIN --分频,分频到1Hz,计数 ???PROCESS?(clk_in,?reset) ???BEGIN ??????IF?(reset?=?'1')?THEN ?????????count?<=?0; ??????ELSIF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN ?????????IF?(count?>=?99)?THEN--计数0~99,即计数100个周期 ????????????count?<=?0; ?????????ELSE ????????????count?<=?count?+?1;--累加 ?????????END?IF; ??????END?IF; ???END?PROCESS; ???--24秒计数器 ???PROCESS?(clk_in,?reset) ???BEGIN ??????IF?(reset?=?'1')?THEN--24s开始倒计时 ?????????time_ten<="0010"; ?time_one<="0100"; ??????ELSIF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN ?????????IF?(count?>=?99)?THEN--1s时间到 ????????????IF?(time_ten?=?"0000"?and?time_one="0000")?THEN--判断是否倒计时到0 time_ten<="0000"; time_one<="0000"; ????????????ELSIF(time_one="0000")THEN time_ten<=time_ten-"0001";--倒计时 time_one<="1001"; ELSE time_one<=time_one-"0001";--倒计时 ????????????END?IF; ?????????ELSE time_ten<=time_ten; time_one<=time_one; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???--?time_ten?<=?time_cnt?/?10; ???--?time_one?<=?time_cnt?%10; ???--数码管显示 ???PROCESS?(clk_in) ???BEGIN ??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN ?????????CASE?time_ten?IS--倒计时十位数字显示码 ????????????WHEN?"0000"?=> ???????????????HEX1?<=?"11000000"; ????????????WHEN?"0001"?=> ???????????????HEX1?<=?"11111001"; ????????????WHEN?"0010"?=> ???????????????HEX1?<=?"10100100"; ????????????WHEN?"0011"?=> ???????????????HEX1?<=?"10110000"; ????????????WHEN?"0100"?=> ???????????????HEX1?<=?"10011001"; ????????????WHEN?"0101"?=> ???????????????HEX1?<=?"10010010"; ????????????WHEN?"0110"?=> ???????????????HEX1?<=?"10000010"; ????????????WHEN?"0111"?=> ???????????????HEX1?<=?"11111000"; ????????????WHEN?"1000"?=> ???????????????HEX1?<=?"10000000"; ????????????WHEN?"1001"?=> ???????????????HEX1?<=?"10010000"; ????????????WHEN?OTHERS?=> ?????????END?CASE; ??????END?IF;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=914
阅读全文