数字电路课程设计数字钟的设计与实现.docx
《数字电路课程设计数字钟的设计与实现.docx》由会员分享,可在线阅读,更多相关《数字电路课程设计数字钟的设计与实现.docx(16页珍藏版)》请在冰豆网上搜索。
数字电路课程设计数字钟的设计与实现
学号
数字电路课程设计
设计说明书
数字钟的设计与实现
起止日期:
2013年6月25日至2013年6月28日
学生姓名
班级
成绩
指导教师(签字)
计算机与信息工程学院
2013年6月28日
一、引言..........................................................2
二、实验要求........................................................2
三、实验目的........................................................2
四、实验内容.......................................................2
五、实验原理.......................................................2
六、实验连线.......................................................3
七、数字钟VHDL文本..............................................3
八、总结...........................................................11
一、引言
数字钟是采用数字电路实现对时、分、秒,数字显示的计时装置,广泛用于个人家庭,车站,码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大地方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、校时自动打铃、时间程序自动控制、定是广播、自动启闭路灯、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用有着非常现实的意义。
二、实验要求
1.具有时,分,秒,计数显示功能,以24小时循环计时。
2.具有清零,调节小时、分钟功能。
3.具有整点报时功能,整点报时的同时LED灯花样显示。
三、实验目的
1.掌握多位计数器相连的设计方法。
2.掌握十进制、六进制、二十四进制计数器的设计方法。
3.巩固多位共阴极扫描显示数码管的驱动及编码。
4.掌握扬声器的驱动。
5.LED灯的花样显示。
6.掌握CPLD技术的层次化设计方法。
四、实验内容
1.根据电路持点,可在教师指导下用层次设计概念,将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,让几个学生分做和调试其中之一,然后再将各模块合起来联试,以培养学生之间的合作精神,同时加深层次化设计概念。
2.了解软件的元件管理深层含义,以及模块元件之间的连接概念。
了解如何融合不同目录下的统一设计。
模块说明:
各种进制的计数及时钟控制模块(10进制、6进制、24进制);
扫描分时显示,译码模块;
彩灯,扬声器编码模块;
各模块都是由VHDL语言编写。
数字钟各模块连接示意图
五、实验原理
1.时钟计数:
秒——60进制BCD码计数;
分——60进制BCDD码计数;
时——24进制BCDD码计数;
整个计数器有清零,调分,调时功能,在接近整数时间能提供报时信号。
2.具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出,编码和扫描部分可参照前面实验。
3.扬声器在整点时有报时驱动信号产生。
4.LED灯在整点时有花样显示信号产生。
六、实验连线
◎输入接口:
1.代表清零,调时,调分信号RESET,SETHOUR,SETMIN的管脚分别已经连接按键开关。
2.代表计数时钟信号CLK和扫描时钟信号CKDSP的管脚分别已经同1HZ时钟源和32HZ(或更高)时钟源相连。
3.Reset键为低电平复位,已经接上。
◎输出接口:
1.代表扫描显示的驱动信号管脚SCAN2,SCAN1,SCAN0已经接到实验箱上的SCAN0~SCAN2,A…G接八位数码管显示模块的A~G。
2.代表花样LED灯显示的信号管脚LAMP0…LAMP2已经同3个LED灯相连。
代表到时LED灯闪烁提示的ENHOUR接LED灯。
SETHOUR、SETMIN分别对应CPU板上的PB0、PB1(有些CPU板对应的标识是SW1、SW2)
RESET对应CPU板上的RESET
CLKDSP对应CPU板上的50MHz固定晶振输入。
LAMP对应IO9-IO11。
CLK,对应IO3。
功能选择位M[3..0]状态为0010,左端8个数码管,低8位为7位段加小数点选取位,高8位为8个数码管com端选取,即如果要选取数码管0,则发送总线值为:
1111111011111111,如要选取数码管1,则发送总线值为:
1111110111111111,此时所选数码管7段和DP位将全部亮。
实验接线:
用导线连接IO3与ADJ_CLK,调整SW17-SW20,使输出频率为1Hz;
IO9-IO11接到L1-L3上;IO5接到蜂鸣器的BUZZER控制端口。
按下PB0、PB1(有些CPU板对应的标识是SW1、SW2)可以调整时钟,分钟。
七、数字钟VHDL文本
本设计全部采用VHDL文本描述,所有文本存放在同一个工作文件夹中。
可先录入底层文件,把某个底层文件设为当时的顶层,保存、编译、仿真、退出;再录入另一个底层文件;这样把所有底层文件一一录入;最后录入顶层文件,并保存、编译、仿真,再下载顶层文件到器件实现硬件功能。
7.1、顶层文本(clock_top.vhd)
libraryieee;
useieee.std_logic_1164.all;
entityclock_topis
port(clk,reset,setmin,sethour,clkdsp:
instd_logic;
speaker:
outstd_logic;
lamp:
outstd_logic_vector(2downto0);
sel:
outstd_logic_vector(2downto0);
a,b,c,d,e,f,g,dpout:
outstd_logic);
endclock_top;
architectureaofclock_topis
COMPONENTsecond
PORT(
clk,reset,setmin:
INSTD_LOGIC;
daout:
outstd_logic_vector(6downto0);
enmin:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTminute
PORT(
clk,clk1,reset,sethour:
INSTD_LOGIC;
enhour:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDCOMPONENT;
COMPONENThour
port(
clk,reset:
INSTD_LOGIC;
daout:
outstd_logic_vector(5downto0));
ENDCOMPONENT;
COMPONENTalert
PORT(
clk:
INSTD_LOGIC;
dain:
instd_logic_vector(6downto0);
lamp:
outstd_logic_vector(2downto0);
speak:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTseltime
PORT(
clk1,reset:
INSTD_LOGIC;
sec,min:
instd_logic_vector(6downto0);
hour:
instd_logic_vector(5downto0);
dp:
outstd_logic;
daout:
outstd_logic_vector(3downto0);
sel:
OUTSTD_LOGIC_vector(2downto0));
ENDCOMPONENT;COMPONENTdeled
PORT(
num:
INSTD_LOGIC_vector(3downto0);
led:
outstd_logic_vector(6downto0));
ENDCOMPONENT;
signalenmin_re,enhour_re:
std_logic;
signalsecond_daout,minute_daout:
std_logic_vector(6downto0);
signalhour_daout:
std_logic_vector(5downto0);
signalseltime_daout:
std_logic_vector(3downto0);
signalledout:
std_logic_vector(6downto0);
begin
a<=ledout(6);b<=ledout(5);c<=ledout(4);d<=ledout(3);
e<=ledout
(2);f<=ledout
(1);g<=ledout(0);
u1:
secondportmap(reset=>reset,
clk=>clk,
setmin=>setmin,
enmin=>enmin_re,
daout=>second_daout);
u2:
minuteportmap(clk=>enmin_re,
clk1=>clk,
reset=>reset,
sethour=>sethour,
enhour=>enhour_re,
daout=>minute_daout);
u3:
hourportmap(clk=>enhour_re,
reset=>reset,
daout=>hour_daout);
u4:
alertportmap(clk=>clk,
dain=>minute_daout,
speak=>speaker,
lamp=>lamp);
u5:
seltimeportmap(clk=>clkdsp,
reset=>reset,
sec=>second_daout,
min=>minute_daout,
hour=>hour_daout,
daout=>seltime_daout,
dp=>dpout,
sel=>sel);
u6:
deledportmap(num=>seltime_daout,
led=>ledout);
enda;
7.2、秒计数器(second.vhd)为底层文本
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYsecondIS
PORT(
clk,reset,setmin:
INSTD_LOGIC;
enmin:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDentitysecond;
ARCHITECTUREfunOFsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
SIGNALenmin_1,enmin_2:
STD_LOGIC;
BEGIN
daout<=count;
enmin_2<=(enmin_1orenmin_2);
enmin<=(enmin_1orenmin_2);
process(clk,reset,setmin)
begin
if(reset='0')thencount<="0000000";
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<=16#60#)then
if(count="1011001")then
enmin_1<='1';count<="0000000";
else
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#60#)then
count<=count+1;
enmin_1<='1'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
7.3分计数器(minute.vhd)为底层文本
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYminuteIS
PORT(
clk,clk1,reset,sethour:
INSTD_LOGIC;
enhour:
OUTSTD_LOGIC;
daout:
outstd_logic_vector(6downto0));
ENDentityminute;
ARCHITECTUREfunOFminuteIS
SIGNALcount:
STD_LOGIC_VECTOR(6downto0);
SIGNALenhour_1,enhour_2:
STD_LOGIC;
BEGIN
daout<=count;
enhour_2<=(sethourandclk1);
enhour<=(enhour_1andenhour_2);
process(clk,reset,sethour)
begin
if(reset='0')then
count<="0000000";
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#16#)then
if(count="1011001")then
enhour_1<='1';
count<="0000000";
ELSE
count<=count+7;
endif;
else
count<="0000000";
endif;
elsif(count<16#16#)then
count<=count+1;
enhour_1<='0'after100ns;
else
count<="0000000";
endif;
endif;
endprocess;
ENDfun;
7.4小时文本(hour.vhd)为底层文本
HOUR
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYhourIS
PORT(
clk,reset:
INSTD_LOGIC;
daout:
outstd_logic_vector(5downto0));
ENDentityhour;
ARCHITECTUREfunOFhourIS
SIGNALcount:
STD_LOGIC_VECTOR(5downto0);
BEGIN
daout<=count;
process(clk,reset)
begin
if(reset='0')then
count<="000000";
elsif(clk'eventandclk='1')then
if(count(3downto0)="1001")then
if(count<16#23#)then
count<=count+7;
else
count<="000000";
endif;
elsif(count<16#23#)then
count<=count+1;
else
count<="000000";
endif;
endif;
endprocess;
ENDfun;
7.5时间数据扫描分时选择模块文本(seltime.vhd)为底层文本
LIBRARYieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
ENTITYseltimeIS
PORT(
clk1,reset:
INSTD_LOGIC;
sec,min:
INSTD_LOGIC_VECTOR(6downto0);
hour:
instd_logic_vector(5downto0);
daout:
OUTSTD_LOGIC_vector(3downto0);
sel:
outstd_logic_vector(2downto0));
ENDseltime;
ARCHITECTUREfunOFseltimeIS
SIGNALcount:
STD_LOGIC_vector(2downto0);
BEGIN
sel<=count;
process(clk1,reset)
begin
if(reset='0')then
count<="000";
elsif(clk1'eventandclk1='1')then
if(count>="101")then
count<="000";
else
count<=count+1;
endif;
endif;
casecountis
when"000"=>daout<=sec(3downto0);
when"001"=>daout(3)<='0';
daout(2downto0)<=sec(6downto4);
when"010"=>daout<=min(3downto0);
when"011"=>daout(3)<='0';
daout(2downto0)<=min(6downto4);
when"100"=>daout<=hour(3downto0);
whenothers=>daout(3downto2)<="00";
daout(1downto0)<=hour(5downto4);
endcase;
endprocess;
endfun;
八、总结
在同学帮助下,我终于把数字钟做出来,能够成功地实现计数和校时校分的功能。
通过此次课程设计让我明白了理论是实践的基础,实践让自己更好地去掌握理论。
让我懂得了做事要有锲而不舍的精神,朝着自己的目标奋斗,坚持不懈,以后我要脚踏实地一步一个脚印的去学习理论与实践,多动手,多思考,多反思。
计算机与信息工程学院课程设计成绩单
课程名称:
指导教师:
姓名
性别
学号
班级
综合成绩
成绩等级
程序运行情况
(占总成绩20%)
□能正确运行□基本能正确运行□能运行但结果不完善
(20分)(15分)(10分)
程序功能的完善程度
(占总成绩10%)
□完善□基本完善□不完善
(10分)(8分)(5分)
程序结构的合理性
(占总成绩10%)
□合理□基本合理□不太合理
(10分)(8分)(5分)
对问题的答辩情况
(占总成绩40%)
□概念正确有创新□能正确回答所有问题□基本能正确回答
(40分)(35分)(30分)
□部分问题回答概念不清晰
(20分)
学生的工作态度与独立工作能力
(占总成绩10%)
□工作态度认真能独立完成任务□工作态度认真但独立性较差
(10分)(8分)
□工作态度基本认真但缺乏独立性
(5分)
设计报告的规范性
(占总成绩10%)
□符合规范□基本符合规范□规范性较差
(10分)(8分)(5分)
优秀:
90分~100分良好:
80分~89分中等:
70~79分及格:
60~69分不及格0分~59分
计算机与信息工程学院计算机与信息技术实验中心制表