篮球比赛电子记分牌设计EDA
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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时整个计数器清零。
是
是