江苏大学数字逻辑课程设计数字时钟样本.docx

上传人:b****4 文档编号:5008139 上传时间:2022-12-12 格式:DOCX 页数:13 大小:112.83KB
下载 相关 举报
江苏大学数字逻辑课程设计数字时钟样本.docx_第1页
第1页 / 共13页
江苏大学数字逻辑课程设计数字时钟样本.docx_第2页
第2页 / 共13页
江苏大学数字逻辑课程设计数字时钟样本.docx_第3页
第3页 / 共13页
江苏大学数字逻辑课程设计数字时钟样本.docx_第4页
第4页 / 共13页
江苏大学数字逻辑课程设计数字时钟样本.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

江苏大学数字逻辑课程设计数字时钟样本.docx

《江苏大学数字逻辑课程设计数字时钟样本.docx》由会员分享,可在线阅读,更多相关《江苏大学数字逻辑课程设计数字时钟样本.docx(13页珍藏版)》请在冰豆网上搜索。

江苏大学数字逻辑课程设计数字时钟样本.docx

江苏大学数字逻辑课程设计数字时钟样本

JIANGSUNIVERSITY

课程设计报告

学院:

计算机科学与通信工程

班级:

网络工程

姓名:

学号:

指导老师:

报告日期 :

1月15日

 

Ⅰ.设计目的

设计一个拥有:

正常的时分秒计数功能,实现校时校分清零的功能,利用扬声器实现整点报时和闹钟功能的多功能数字钟。

Ⅱ.设计内容

整个系统分成七个模块进行:

计时模块、校时模块、整点报时模块、分频模块、动态扫描模块,动态显示模块、闹钟模块。

l、能进行正常的时、分、秒计时功能,分别由6个数码显示24小时、60分钟的计数器显示。

2、能利用实验系统上的按钮实现”校时”、”校分”功能;

3、能利用扬声器做整点报时:

4、定时闹钟功能

5、用层次化设计方法设计该电路,用硬件描述语言编写各个功能模块。

6、报时功能。

报时功能用功能仿真的仿真验证,可经过观察有关波形确认电路设计是否正确。

Ⅲ.设计原理

1计时模块:

使用一个二十四进制和两个六十进制计数器级联,构成数字钟的基本框架。

二十四进制用于计时,六十进制用于计分和计秒。

给秒计数器一个1hz的时钟脉冲,分计数器以秒计数器的进位作为计数脉冲,时计数器以分计数器的进位作为计数脉冲。

2校时模块:

分别按下校时键和校分键,计数器增至所需时分数,按下清零键,秒计数器归零。

此处注意事项:

①按键”抖动”消除。

利用触发器,如D触发器,利用D触发器边沿触发的特性,在除去时钟边沿来之前一瞬间之外的绝大部分时间都不能接受输入,从而实现”消抖”。

②校分时,分计数器计数不应对小时位产生影响,因而需要屏蔽此时分计数器的进位信号。

③需要设计二路选择器对于正常计数以及校时进行选择。

3整点报时模块:

计时到59分50秒,每两秒一次低音报时,整点进行高音报时,将报时信号接到实验板上的扬声器输出。

4分频模块:

经过不同进制的计数将1khz的时钟脉冲分频出不同频率的时钟脉冲,以实现系统对多频率时钟信号的需求。

5动态显示模块:

利用6个数码管,将时分秒按照高低位输出到数码管上。

其中扫描频率超过人眼视觉暂留频率就能够实现六个管同时显示的视觉效果。

6闹钟模块:

需要新的计数器进行定时闹钟信号的存储,与正常计时状态实现切换,设计一个比较模块使闹钟和计时相等时,开始鸣叫,同时需要一个按键能够控制闹钟的开关。

Ⅳ.具体实现

(1)顶层图

图一:

顶层图

(2)代码

1.24进制:

时计数器:

模块图如图。

24进制无进位计数器,当计数信号计到23后再检测到计数信号时会自动归零。

带清零,clk输入为分秒进位相与的结果。

qh为十位,ql为个位。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt24is

port(clk:

instd_logic;

qh,ql:

outstd_logic_vector(3downto0);

tc:

outstd_logic);

endcnt24;

architectureoneofcnt24is

begin

process(clk)

variableiql,iqh:

std_logic_vector(3downto0):

="0000";

begin

ifclk'eventandclk='1'then

iql:

=iql+1;

ifiql="1010"then

iqh:

=iqh+1;

iql:

="0000";

endif;

if(iqh="0010")and(iql="0100")then

iqh:

="0000";

iql:

="0000";

endif;

endif;

ql<=iql;

qh<=iqh;

endprocess;

endone;

2.60进制:

秒计数器模块设计:

六十进制带进位计数器,可清零,clk输入信号为1Hz脉冲,当ql计满9后qh增加1,当ql满9且qh记满5,ql、qh同时归零,co输出为高电平。

qh为十位ql为个位。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt60is

port(clk,clr:

instd_logic;

ql,qh:

bufferstd_logic_vector(3downto0);

tc:

outstd_logic

);

endcnt60;

architecturebehavorofcnt60is

begin

tc<='0'when(clk='1'andql="0000"andqh="0110")else'1';

process(clk,clr,ql,qh)

variableiql,iqh:

std_logic_vector(3downto0);

begin

if(clr='0'or(iql="0000"andiqh="0110"))then

iql:

="0000";

iqh:

="0000";

elseif(clk'eventandclk='1')then

iql:

=iql+1;

if(iql="1010")then

iql:

="0000";

iqh:

=qh+1;

endif;

endif;

endif;

ql<=iql;qh<=iqh;

endprocess;

ENDbehavor;

分计数器同上。

注:

不同之处为分的clk输入信号为秒的进位信号。

3.动态显示:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdtsmis

port(

clk:

instd_logic;

h:

instd_logic_vector(7downto0);

m:

instd_logic_vector(7downto0);

s:

instd_logic_vector(7downto0);

seg7out:

outstd_logic_vector(6downto0);

sel:

bufferstd_logic_vector(2downto0)

);

ENDdtsm;

ARCHITECTUREbehaofdtsmis

signalkey:

std_logic_vector(3downto0);

BEGIN

PROCESS(clk)

variabledount:

std_logic_vector(2downto0):

="000";

BEGIN

IF(rising_edge(clk))then

IFdount="111"then

dount:

="000";

ELSE

dount:

=dount+1;

ENDIF;

ENDIF;

sel<=dount;

endprocess;

PROCESS(sel)

BEGIN

CASEselIS

when"000"=>key<=h(7downto4);

when"001"=>key<=h(3downto0);

when"010"=>key<="1010";

when"011"=>key<=m(7downto4);

when"100"=>key<=m(3downto0);

when"101"=>key<="1010";

when"110"=>key<=s(7downto4);

when"111"=>key<=s(3downto0);

whenothers=>null;

ENDCASE;

ENDPROCESS;

PROCESS(key)

BEGIN

casekeyis

when"0000"=>seg7out<="0111111";

when"0001"=>seg7out<="0000110";

when"0010"=>seg7out<="1011011";

when"0011"=>seg7out<="1001111";

when"0100"=>seg7out<="1100110";

when"0101"=>seg7out<="1101101";

when"0110"=>seg7out<="1111101";

when"0111"=>seg7out<="0000111";

when"1000"=>seg7out<="1111111";

when"1001"=>seg7out<="1101111";

when"1010"=>seg7out<="1000000";

whenothers=>null;

ENDCASE;

ENDPROCESS;

ENDbeha;

4.分频器:

模块图如图。

由四个分频器构成,输入信号in_clk为1024Hz脉冲信号。

把输入的1024Hz信号分频为四个脉冲信号,即1Hz的秒脉冲,4Hz的校时、校分脉冲,64Hz的消抖脉冲,以及512Hz的蜂鸣器低音输入。

:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfreq_dividerIS

PORT(clk:

INSTD_LOGIC;

hz1:

OUTSTD_LOGIC;

hz4:

OUTSTD_LOGIC;

hz64:

OUTSTD_LOGIC;

hz512:

OUTSTD_LOGIC);

ENDfreq_divider;

ARCHITECTURErtlOFfreq_dividerIS

SIGNALcount:

STD_LOGIC_VECTOR(9DOWNTO0);

BEGIN

PROCESS(clk)

BEGIN

IF(clk'eventandclk='1')THEN

IF(count="")THEN

Count<=(OTHERS=>'0');

ELSE

Count<=count+1;

ENDIF;

ENDIF;

ENDPROCESS;

hz512<=count(0);

hz64<=count(3);

hz4<=count(7);

hz1<=count(9);

ENDrtl;

5.二路选择器:

模块图如图。

用以进行正常计时和校时/分的选择。

alarm为经过消抖的校时/分信号。

当按键未曾按下时,即校时/分信号没有到来时,二选一选择器会选择输出a(正常计时输入)信号,否则当alarm按键按下时输出y为校时/分输入信号——4Hz。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitysel2is

port(sel:

instd_logic;

ip:

instd_logic;

a,b:

outstd_logic);

endsel2;

architecturebehofsel2is

begin

process(sel)

begin

if(sel='0')thena<=ip;

elseb<=ip;

endif;

endprocess;

endbeh;

6.整点报时:

整点报时及闹时:

模块图如图在59分52秒、54秒、56秒、58秒给扬声器赋以低音512Hz信号,在00分00秒给扬声器赋以高音1024Hz信号,当系统时间与闹铃时间相同时给扬声器赋以高音1024Hz信号。

闹时时间为一分钟。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityzdbsis

port(mh,ml,sh,sl:

instd_logic_vector(3downto0);

sig500,sig1k:

outstd_logic

);

endzdbs;

architecturebehaviorofzdbsis

begin

sig500<='1'whenmh="0101"andml="1001"andsh="0101"

and(sl="0000"orsl="0010"orsl="0100"orsl="0110"orsl="1000")

else'0';

sig1k<='1'whenmh="0000"andml="0000"andsh="0000"andsl="0000"

else'0';

endbehavior;

7.闹钟设置:

闹钟时间的设定:

模块图如图。

由开关K1选择闹钟和时间。

由S1、S2脉冲键调节时、分。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityalarmsetis

port(sel:

instd_logic;

hclo,mclo,sclo,halr,malr,salr:

instd_logic_vector(7downto0);

h,s,m:

outstd_logic_vector(7downto0));

endalarmset;

architecturebehofalarmsetis

begin

process(sel)

begin

if(sel='0')thenh<=hclo;

m<=mclo;

s<=sclo;

elseh<=halr;

m<=malr;

s<="00000000";

endif;

endprocess;

endbeh;

8.alarmcmp:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityalarmcmpis

port(h,m,halr,malr:

instd_logic_vector(7downto0);

stop:

instd_logic;

sig:

outstd_logic);

endalarmcmp;

architecturebehofalarmcmpis

begin

process(h,m,halr,malr,stop)

begin

ifstop='0'then

sig<='0';

endif;

ifh=halrandm=malrandstop='1'then

sig<='1';

elsesig<='0';

endif;

endprocess;

endbeh;

9.消抖:

模块图如图。

分频出的用64Hz信号对s1校时信号、s2校分信号、s3秒清零信号、s4秒清分。

是由四个两级d触发器构成的,分别对输入的sa、sb、sc信号的相邻两个上升沿进行比较以确定按键的按下,从而达到消抖的目的。

Ⅴ.心得体会

经过此次课程设计,使我更加扎实的掌握了有关数字逻辑方面的知识,在设计过程中遇到了一些问题,比如在画顶层原理图时,最大的问题就是根本没有把各个模块的VHD文件以及生成的器件都全部放在顶层文件的文件夹内,还有就是程序设计的时候考虑的不够全面,没有联系着各个模式以及实验板的情况来编写程序,以至于多考虑编写了译码电路而浪费了很多时间。

暴露除了我在这方面的知识有所欠缺和经验不足,实践出真知,经过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时也给我很多新的想法,一些在课上学习不到的思路,让我感触颇深。

经过这次课程设计,我掌握了关于数字钟方面的有关知识,能够独立设计一个数字钟,而且了解了它的原理。

思路即出路,有什么不懂的地方要及时弄懂,世上无难事,只怕有心人。

只要认真专研,动手实践,就没有弄不懂的知识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1