logo资料库

基于VHDL篮球比赛计时器.doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
计算机与信息学院 《数字逻辑》 课程设计报告 专 业 班 级 学 生 姓 名 及 学 号 课 程 教 学 班 号 任 课 教 师 实 验 指 导 教 师 实 验 地 点 20 ~20 学年第 学期
课程设计题目:篮球比赛计时器 设计要求:设计篮球比赛计时器使其具有下述功能: (1)篮球比赛上下半场各 20 分钟,要求能随时暂停,启动后继续计时, 一场比赛结束后应可清零重新开始比赛。 (2)计时器由分、秒计数器完成,秒计数器为模 60,分计数器应能计 至 40 分钟。 (3)“分”、“秒”显示用 LED 数码管,应配用相应译码器。 (4)人工拨动开关来控制计时器的启动/暂停。 (5)半场、全场到自动会有相应的提示 一、 设计目的∶ 1,掌握组合逻辑电路、时序逻辑电路及数字逻辑电路系统的设计、 安装、测试方法; 2,进一步巩固所学的理论知识,提高运用所学知识分析和解决实 际问题的能力; 3,初步掌握使用EDA(电子设计自动化)工具设计数字逻辑电路的 方法,包括设计输入、编译、软件仿真、下载和硬件仿真等全过程; 二、 设计原理∶ 篮球计时器的基本结构是由一个 60 进制计数器和一个二十进制计 数器构成,分别对秒,分进行计数,秒计数器计数达到 59 秒时,在这 时会产生一个高电平的进位信号,并且秒计数器清零,这个进位信 号会使分钟计时器开始工作进行计时,此进位信号为高电平有效, 平时当秒计数器没有达到 59 时,会让此信号为低电平,就使分计时
器不工作,而当分计时器到达 20,秒计时器到达 00 时,当时间计数 到 20 分 00 秒时,此时会产生一个高电平信号,使得电箱上的喇叭一 直响,此时计时器也停止计数,相当于篮球比赛中的半场或者全场 时间到时的提示.如果此时是半场到了的话,请按下开关 K3,这个 开关 K3 会使得计数重新清零,并且提示半场状态的变量会变成 2, 此时开始进入下半场,并且一个 LED 数码管会显示数字 2,代表此时 已经是下半场了,如果是上半场的话,这个数码管会显示为 1,接下 来就是下半场的计时,如果你想在某个时刻停止计时的话那么就可 以按下开关 K2,这个 K2 能使得该计数器不再工作,只有你重新把开 关 K2 打到高电平时,此计数器才会重新工作,当这个计数器到达下 半场的 20 分钟 00 秒时,同样会停止计时,并且一直响喇叭,此时相 当于提示你全场比赛结束,如果你还想重新清零计时的话,那么只 有按下 clear 开关重新清零计时. 由于计数器的计数时钟 CLK 为 1Hz 的标准信号,那么我们只有对电 路箱上的 100MHz 进行分频,通过计数,当计数达到 50000 时候,信号 取反,通过这样的方式可以把 100MHz 的信号分成 1Hz. 此实验用到了 5 个 LED 数码管,两个用来显示秒的状态,两个用来显 示分的状态,最后一个用来显示半场的状态(1 代表上半场,2 代表 下半场),有三个开关,一个用来在全场结束后或者比赛中清零重新 计时,一个用来暂停或继续计时,最后一个用来在上半场结束后进 行下半场的继续计时.
三、所需器件与设备: 1、TDS 系列数字电路实验系统 2、ISP 系统可编程器件以及《数字逻辑》课程实验所用部分中、 小规模集成电路等 3、PC 计算机 4、ISP1032E 可编程逻辑器件以及数据选择器、触发器、移位寄存 器、计数器及基本门电路等 5、在 Windows 平台上运行的 ispLEVER 编程软件 四、实现涉及的几个重要模块如下: (1)分频器将高速的外部时钟频率分频成每秒钟一次的时钟频率, 以便进行时钟计数,通过利用计数的原理,当计数达到49999的时候 对信号取反,以达到分频的效果. (2) 计数器实际上是一个异步复位的累加器,通常情况下进行时钟 累加计数,首先对秒进行计数,当到达59时,产生进位信号并且秒表 归零,这时候才对分钟进行计数,如果分钟没到20,那么正常计数, 到达了20,那么就响铃,停止计数。 (3)显示器根据需要显示当前时间以及此时所处在的半场状态,若 处于上半场,那么其中半场状态数码管显示为1,如果处于下半场, 数码管显示为2 (4) 暂停,清零以及半场继续计时控制开关能够分别停止计时器的 计数功能,使得计时器全部清零重置半场状态变量,和使得计数器
清零并且改变半场状态变量 (5)实现篮球计时器的功能。 五、实验代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity basketball is PORT(pause,set:IN std_logic;------控制计数暂停的开关 clear:IN std_logic;--------控制清零的开关 clk:IN std_logic;---------时钟信号 bell:OUT std_logic;---------响铃输出信号 secondl:OUT std_logic_vector(3 downto 0);--------显示秒表 的个位 secondh:OUT std_logic_vector(3 downto 0);--------显示秒表 的十位 minutel:OUT std_logic_vector(3 downto 0);--------显示分钟 的个位 minuteh:OUT std_logic_vector(3 downto 0);--------显示分钟 的十位 state:OUT std_logic_vector(3 downto 0));---------显示半场
处的状态 end basketball; -------------------------------------------------分频电路 architecture behave of basketball is SIGNAL clk1:std_logic; begin PROCESS(clk) VARIABLE cnt:integer range 0 to 49999; begin 候,信号取反 IF(clk'EVENT AND clk = '1') THEN if(cnt=49999) THEN-----当计数达到 50000 的时 cnt:=0; clk1<=not clk1; else cnt:=cnt+1; end if; end IF;--------相当于把 100MHz 的信号分成 1Hz 的 信号 END PROCESS; -------------------------开始计时的进程
PROCESS(clk1) VARIABLE secl,sech,minl,minh,sta:std_logic_vector(3 downto 0); VARIABLE en,ebell:std_logic; begin if(minh="0010"and minl="0000"and sech="0000" and secl="0000") THEN----------------------当计时达到 20 分钟 00 秒时发出响 铃,状态变为 2 ebell:='1'; sta:="0010"; else ebell:='0'; end if; IF(clear='0') THEN----------清零开关低电平有效 secl:="0000"; sech:="0000"; minl:="0000"; minh:="0000"; if(set='0')THEN -----------控制半场后继续计时开关 sta:=sta; ----------当开关为 0 时,维持原半场状态
else --------------当开关为 1 时,状态变为 1 sta:="0001"; end if; ELSIF(clk1='1'AND clk1'EVENT AND minh/="0010"AND sta='0') THEN ---------处于上升沿,不响铃并且分钟十位不为 2 时,可以计时 if(pause='1')THEN------------en 为秒表进位信号 en:=sech(2) and sech(0) and secl(3)and secl(0) and pause; if(en='1') then if(minl="1001") then----------对分钟个位计时 minl:="0000"; minh:=minh+1;------------分钟十位计时 else minl:=minl+1; end if; end if; if(secl="1001") then ---------秒表个位计时 secl:="0000"; if(sech="0101") then--------秒表十位计时 sech:="0000"; else sech:=sech+1;
分享到:
收藏