数字逻辑课程设计报告.docx

上传人:b****5 文档编号:7263491 上传时间:2023-01-22 格式:DOCX 页数:14 大小:258.47KB
下载 相关 举报
数字逻辑课程设计报告.docx_第1页
第1页 / 共14页
数字逻辑课程设计报告.docx_第2页
第2页 / 共14页
数字逻辑课程设计报告.docx_第3页
第3页 / 共14页
数字逻辑课程设计报告.docx_第4页
第4页 / 共14页
数字逻辑课程设计报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数字逻辑课程设计报告.docx

《数字逻辑课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字逻辑课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。

数字逻辑课程设计报告.docx

数字逻辑课程设计报告

 

数字逻辑课程设计

多功能数字钟

 

班级:

学号:

课程设计人:

指导老师:

课题:

完成时间:

 

一、设计目的:

学会应用数字系统设计方法进行电路设计,熟练地运用汇编语言。

二、设计任务及要求:

1.记时、记分、记秒

2.校时、校分、秒清0

3.整点报时

4.时间正常显示

5.闹时功能

三、设计思路:

将整个闹钟分为以下几个模块,每个模块中都有详细的各部分的设计思路,源代码及仿真图像,生成的器件。

1.计时模块

计小时:

24进制计数器

计分、计秒:

60进制计数器

计时间过程:

计秒:

1HZ计数脉冲,0~59循环计数,计数至59时产生进位信号。

计分:

以秒计数器进位信号作为分计数脉冲,0~59循环计数,59时产生进位。

计时:

以分计数器进位信号作为时计数脉冲,0~23循环计数,23时清0。

二十四进制计数器代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt24is

port(clk:

instd_logic;

qh,ql:

outstd_logic_vector(3downto0));

endcnt24;

architecturebehaveofcnt24is

signalq1,q0:

std_logic_vector(3downto0);

begin

process(clk)

begin

if(clk'eventandclk='1')then

if(q1="0010"andq0="0011")then

q1<="0000";q0<="0000";

elsif(q0="1001")then

q0<="0000";q1<=q1+'1';

else

q0<=q0+'1';

endif;

endif;

qh<=q1;

ql<=q0;

endprocess;

endbehave;

仿真结果:

图一、cnt24仿真图像

六十进制计数器代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt60is

port(clk:

instd_logic;

clr:

instd_logic;

ql,qh:

outstd_logic_vector(3downto0);

c:

outstd_logic);

endcnt60;

architecturecntofcnt60is

signalq1,q0:

std_logic_vector(3downto0);

begin

process(clk,clr)

begin

if(clr='1')then

q1<="0000";q0<="0000";c<='0';

else

if(clk'eventandclk='1')then

if(q1="0101"andq0="1001")then-----到59

q1<="0000";q0<="0000";c<='1';

elsif(q1<"0101"andq0="1001")then

q0<="0000";q1<=q1+'1';c<='0';

elsif(q0<"1001")then

q0<=q0+'1';

endif;

endif;

endif;

qh<=q1;

ql<=q0;

endprocess;

endcnt;

仿真结果:

图二、cnt60仿真图像

图三、生成的计数器符号

2.校时模块:

思路:

按下校时键,时位迅速递增,满23清0

按下校分键,分位迅速递增,满59清0

注意:

此时应屏蔽分进位。

按清0键,秒清0。

脉冲按键S1~S8、拨动开关K1~K12任选三个。

两个问题:

(1)如何实现校对时间时,计数器快速递增?

按键校对时间时,将一个频率较高的计数脉冲信号作用于计数器,屏蔽正常计时的计数脉冲信号。

(2)如何消除“抖动”?

电路抖动:

一次按键的弹跳现象,电路产生多个计数脉冲,导致一次按键,多次计数的误动作。

抖动产生的原因:

物理原因。

消除的简易方法:

D触发器,同步按键脉冲。

3.整点报时模块:

从59分50秒开始,每2秒一次低音报时;当达到整点时,进行一次高音报时。

低音:

频率可定为500HZ;高音:

频率可定为1KHZ。

报时效果:

报时脉冲接扬声器输入,引脚号:

N6。

整点报时器件代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityalert_31is

port(m1,m0,s1,s0:

instd_logic_vector(3downto0);

siga,sigb:

outstd_logic);

endalert_31;

architecturealertofalert_31is

begin

siga<='1'when(m1="0101"andm0="1001"ands1="0101"and(s0="0000"ors0="0010"ors0="0100"ors0="0110"ors0="1000"))else'0';

sigb<='1'when(m1="0000"andm0="0000"ands1="0000"ands0="0000")else'0';

endalert;

仿真结果:

图四、整点报时模块,低频率报时

图五、整点报时器件符号

4、分频模块:

设计一个进制较大的计数器,分频产生各种频率的脉冲信号。

代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityfreq_divideris

port(clk:

instd_logic;

hz512,hz64,hz4,hz1:

outstd_logic);

Endfreq_divider;

architecturebehoffreq_divideris

signalcc:

std_logic_vector(9downto0);

begin

process(clk)

begin

if(clk'eventandclk='1')then

if(cc="1111111111")then

cc<="0000000000";

else

cc<=cc+1;

endif;

endif;

endprocess;

hz512<=cc(0);

hz64<=cc(3);

hz4<=cc(7);

hz1<=cc(9);

endbeh;

仿真结果:

图六、分频器仿真及生成器件符号

5.动态扫描显示模块:

动态模式下,8个数码管连接同个七段码,需要进行分时控制的动态扫描显示。

七段译码器代码:

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="101"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<=m(7downto4);

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

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

when"101"=>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<="1110111";

whenothers=>null;

ENDCASE;

ENDPROCESS;

ENDbeha;

器件生成:

图七、动态扫描器件

6.闹时模块:

多路选择器源程序:

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<=salr;

endif;

endprocess;

endbeh;

数值比较器代码:

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='1'then

sig<='0';

endif;

ifh=halrandm=malrandstop='0'then

sig<='1';

elsesig<='0';

endif;

endprocess;

endbeh;

器件生成:

图八、多路选择器和数值比较器

四、顶层图:

图九、顶层图

 

六、设计中遇到的问题及解决方法:

问题1、第一次下载仿真时,秒不动,按下清零键自动计时,松开又自动清零。

解决方法:

在秒的计数器清零端加一个非门,这样当一下载到实验板后,在一秒后就可以自动计时,且若要清零则按下Sc按键即可。

问题2、分始终保持00状态,秒的进位不能使它变化,校分也不起作用。

后来老师检查后才发现,这个问题产生的原因是,我的六十进制计数器是置“1”时清零,而顶层电路图上却是设计的“0”时清零,故错把清零端接至了“vcc”.

解决方法:

将分的清零端的“vcc”改为“gnd”,再次下载时,分位就可以动了。

问题3、不知道如何设置闹钟设定与正常计时状态的显示切换。

解决方法:

通过上网搜索以及询问同学,发现了再加一个开关用来控制不同模块的显示。

七、心得体会:

在此次的多功能数字钟设计过程中,让我看到理论与实践的差别和联系,理论固然重要,然而我们要在实践中发现错误,并解决错误,提高自己的动手能力和实际解决问题的能力。

同时,此次设计也锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。

虽然这只是一次简单的课程设计,但通过这次课程设计我了解了课程设计的一般步骤,和设计中应注意的问题。

设计本身并不是有很重要的意义,而是对待问题时的态度和处理事情的能力。

至于设计的成绩无须看得太过于重要,而是设计的过程,设计的思想和设计电路中的每一个环节,电路中各个部分的功能是如何实现的。

最后闹钟也没有自己做出来,仿照同学的设计才做出来,这说明自己平时的学习中还存在很多不足,以后应该更用功学习理论知识,同时加强动手能力。

总的来说,这次课程设计使我收获良多,特别是当它第一次整点报时的时候,心中愉悦无比,自己动手学到的东西是最多的。

 

 

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

当前位置:首页 > 人文社科 > 哲学历史

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

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