篮球计时器倒计时器DE0-CV开发板篮球比赛定时器VHDL代码下载

名称:篮球计时器倒计时器DE0-CV开发板篮球比赛定时器

软件:Quartus II

语言:VHDL

代码功能:

篮球计时器倒计时器要求篮球比赛

(1)主持人宣布比赛开始前,所有模块就位 

(2)裁判宣布开始时,比赛正式开始,进入12分钟倒计时,同时进入24秒倒计时抢球,且信号灯显示抢到球的一方。 

(3)当球被另方夺取时,重新进入24秒倒计时,信号灯显示抢到球的一方 

(4)当24秒倒计时为0时(犯规时),蜂呜器(信号灯)提示。 

(5)当裁判宣布暂停吋,12分钟倒计吋暂停,24秒倒计时复位,进人60秒倒计时。60秒倒计时为0时,暂停结束,蜂鸣器(信号灯)提示,继续12分钟倒计时 

(6)一节比赛结束时,蜂鸣器(信号灯)提示,数码管显示节数

本代码已在DE0-CV开发板验证,开发板如下,其他开发板可通过修改管脚适配:

DE0_cv.png

演示视频:篮球计时器倒计时器DE0-CV开发板篮球比赛定时器

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

代码下载:

篮球计时器倒计时器DE0-CV开发板篮球比赛定时器(代码在文末下载)软件:Quartus II语言:VHDL代码功能:篮球计时器倒计时器要求篮球比赛(1)主持人宣布比赛开始前,所有模块就位 (2)裁判宣布开始时,比赛正式开始,进入12分钟倒计时,同时进入24秒倒计时抢球,且信号灯显示抢到球的一方。 (3)当球被另方夺取时,重新进入24秒倒计时,信号灯显示抢到球的一方 (4)当24秒倒计时为0名称:篮球计时器倒计时器DE0-CV开发板篮球比赛定时器(代码在文末下载)软件:Quartus II语言:VHDL代码功能:篮球计时器倒计时器要求篮球比赛(1)主持人宣布比赛开始前,所有模块就位 (2)裁判宣布开始时,比赛正式开始,进入12分钟倒计时,同时进入24秒倒计时抢球,且信号灯显示抢到球的一方。 (3)当球被另方夺取时,重新进入24秒倒计时,信号灯显示抢到球的一方 (4)当24秒倒计时为0icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=234

部分代码展示:

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

设计文档:

设计文档.doc

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 管脚分配

6. 仿真图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值