篮球比赛电子记分牌设计EDA

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一设计思路分析

篮球比赛计时记分系统程序多而且复杂,所以用图形设计方法来设计。先把每一模块的程序写好,然后生成图形文件,最后新建一个顶层图形文件,把各模块联结起来。包括的模块有分频模块、计时模块、记分模块、脉冲产生模块、滤波模块、选择模块、声光显示模块,显示模块及消抖模块等。

程序总体框图为:

二单元电路设计

该模块对实验箱上的50MHz时钟进行分频,分成所需要的几种

不同频率的时钟。分频的原理为:对50MHz时钟每来一个上升沿计一次数,当计数到一定值的时候,计数值清零并且让输出电平取反,根据计数值的不同可以得到不同的输出频率。在本设计中分频出0.1HZ,1HZ,100Hz,200Hz,500Hz的频率,以供不同的需要。

分频模块源程序:图3 分频模块

计时模块

12进制减法计数器

这个计数器用来表示每一节比赛的分钟位,它的时钟脉冲应由前一个60进制计数器的CO提供。具备复位功能。可以将12进制改为任意进制的减法计数器。当计数结束后,计数器不再计数。

当CO有效时进行减法计数,当计数器减到0之,SO输出一个高电平。EN等于1时计数器复位,当C05等于1时实现比赛加时操作。

60进制减法计数器

这个计数器用来表示每一节比赛的秒钟位。要求在完成12个60进制的计数后,计数器不再计数。具备清零、暂停以及复位的功能。

当CLK有效时进行减法计数,CLR等于1时整个计数器清零,EN等于1时计数器复位,PAUSE等于1时计数器暂停计数,。当计数器减到0之,CO输出一个高电平。

程序如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity JSQ is

port(

clk_main:in std_logic;

hold :in std_logic;

output_high :out integer range 0 to 15 ;

output_low :out integer range 0 to 15 ;

bell :out std_logic_vector(1 downto 0);

bell0:buffer std_logic_vector(1 downto 0)); end JSQ;

architecture main of JSQ is

signal current_value:integer range 0 to 20:=20;

signal bells:integer range 0 to 1:=1;

signal bellse:integer range 0 to 2:=2;

signal bellout0,bellout1 :std_logic;

begin

process(current_value)

begin

if current_value<10 then

output_high<=0;

output_low<=current_value;

else

output_high<=1;

output_low<=current_value-10;

end if;

end process;

process(clk_main,hold)

begin

if clk_main'event and clk_main='1' then

if hold='1' then

if current_value = 0 then

current_value<=19;

bell0(1)<='1';

else

bell0(1)<='0';

current_value<=current_value-1;

if current_value<=10 then

bell0(0)<='1';

else bell0(0)<='0';

end if;

end if;

end if;

end if;

end process;

process(bell0)

begin

if bell0(0)'event and bell0(0)='1' then

bellout0<='1';

bells<=bells-1;

if bells=0 then

bellout0<='0';

bells<=bells;

end if;

end if;

end process;

process(bell0)

begin

if bell0(1)'event and bell0(1)='1' then

bellout1<='1';

bellse<=bellse-1;

if bellse=0 then

bellout1<='0';

bellse<=bellse;

end if;

end if;

bell(0)<=bellout0;

bell(1)<=bellout1;

end process;

end main;

计分模块

99进制可逆计数器

这个用来计分,当s出现上升沿时开始计分,CLR=1时整个计数器清零。

相关文档
最新文档