数字逻辑电路课程设计报告多功能数字钟.docx

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

数字逻辑电路课程设计报告多功能数字钟.docx

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

数字逻辑电路课程设计报告多功能数字钟.docx

数字逻辑电路课程设计报告多功能数字钟

江苏大学

数字逻辑课程设计

___________多功能数字钟

 

专业:

软件1001

学号:

3100608024

姓名:

张同学

 

2012年1月11日

一、设计目的

1、学会应用数字系统方法进行电路设计;

2、进一步提高MaxplusⅡ软件开发应用能力;

3、培养综合实验的能力;

二、设计要求

1、能进行正常的记时、记分、记秒

2、实现校时、校分以及秒清0的功能

3、实现整点报时的功能

4、实现时间的正常显示

5、闹时功能的实现

三、具体设计思路

 

1、利用按键实现“校时”、“校分”和“秒清0”功能。

(1)SA:

校时键。

按下SA键时,时计数器迅速递增,按24小时循环,并且计满23时回到00。

(2)SB:

校分键。

按下SB键时,分计数器迅速递增,按60小时循环,并且计满59时回到00,但不向时进位。

(3)SC:

秒清零。

按下SC时,秒计数器清零。

要求按键均不产生数字跳变,因此须对“SA”、“SB”进行消抖处理。

实现:

 

①:

十进制计数器的设计:

VHDL描述:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityls160isport(

data:

instd_logic_vector(3downto0);

clk,ld,p,t,clr:

instd_logic;

count:

bufferstd_logic_vector(3downto0);

tc:

outstd_logic);

endls160;

architecturebehaviorofls160is

begin

tc<='1'when(count="1001"andp='1'andt='1'andld='1'andclr='1')else'0';

cale:

process(clk,clr,p,t,ld)

begin

if(rising_edge(clk))then

if(clr='1')then

if(ld='1')then

if(p='1')then

if(t='1')then

if(count="1001")then

count<="0000";

else

count<=count+1;

endif;

else

count<=count;

endif;

else

count<=count;

endif;

else

count<=data;

endif;

else

count<="0000";

endif;

endif;

endprocesscale;

endbehavior;

 

②24进制计数器和60进制计数器的设计(以十进制计数器为基础):

24进制计数器:

 

60进制计数器:

 

仿真图:

2、能进行整点报时。

(1)在59分50、52、54、56、58秒按500Hz频率报时;

(2)在59分60秒用1KHz的频率作最后一声正点报时。

VHDL描述:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitybaoshiis

port(m1,m0,s1,s0:

instd_logic_vector(3downto0);

sig500,sig1k:

outstd_logic);

endhourring;

architectureaofbaoshiis

signalq:

std_logic_vector(15downto0);

signals500,s1k:

std_logic;

begin

q(15downto12)<=m1;

q(11downto8)<=m0;

q(7downto4)<=s1;

q(3downto0)<=s0;

hring:

block

begin

s500<='1'whenq="0101100101010000"else

'1'whenq="0101100101010010"else

'1'whenq="0101100101010100"else

'1'whenq="0101100101010110"else

'1'whenq="0101100101011000"else

'0';

s1k<='1'whenq="0000000000000000"else

'0';

endblockhring;

sig500<=s500;

sig1k<=s1k;

enda;

3.程序中由于需要输入多个不同的时钟信号,故需要设计一个分频器,使输入时钟信号简化。

VHDL描述:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityfrequencydivideris

port(cp:

instd_logic;

hz512,hz256,hz64,hz4,hz1:

outstd_logic);

endfrequencydivider;

architectureoneoffrequencydivideris

SIGNALclk:

std_logic_vector(9downto0);

begin

process(cp)

begin

ifcp'eventandcp='1'then

ifclk="1111111111"then

clk<="0000000000";

elseclk<=clk+1;

endif;

endif;

endprocess;

hz512<=clk(0);

hz256<=clk

(1);

hz64<=clk(3);

hz4<=clk(7);

hz1<=clk(9);

endone;

分频仿真图:

4、能进行正常的时、分、秒计时,用动态扫描的方式显示,需用6个数码管。

(1)用M6M5进行24进制小时的显示。

(2)用M4M3进行60进制分的显示。

(3)用M2M1进行60进制秒的显示。

动态扫描用VHDL描述:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitydtsmis

port(clk:

instd_logic;

s:

instd_logic_vector(7downto0);

f:

instd_logic_vector(7downto0);

m:

instd_logic_vector(7downto0);

selout:

outstd_logic_vector(5downto0);

segout:

outstd_logic_vector(6downto0)

);

enddtsm;

architecturert1_dtsmofdtsmis

signalnumber:

std_logic_vector(3downto0);

signalsel:

std_logic_vector(5downto0);

signalseg:

std_logic_vector(6downto0);

signalq:

std_logic_vector(2downto0);

begin

rt1_dtsm:

process(clk)

begin

if(clk'eventandclk='1')then

q<=q+1;

endif;

endprocessrt1_dtsm;

process(q)

begin

caseqis

when"000"=>sel<="000001";

when"001"=>sel<="000010";

when"010"=>sel<="000100";

when"011"=>sel<="001000";

when"100"=>sel<="010000";

when"101"=>sel<="100000";

whenothers=>sel<="000000";

endcase;

endprocess;

process

begin

ifsel="000001"then

number<=m(3downto0);

elsifsel="000010"then

number<=m(7downto4);

elsifsel="000100"then

number<=f(3downto0);

elsifsel="001000"then

number<=f(7downto4);

elsifsel="010000"then

number<=s(3downto0);

elsifsel="100000"then

number<=s(7downto4);

else

number<="1111";

endif;

endprocess;

process(number)

begin

casenumberis

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

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

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

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

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

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

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

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

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

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

whenothers=>seg<="0000000";

endcase;

endprocess;

selout<=sel;

segout<=seg;

endrt1_dtsm;

附:

顶层图

 

四、遇到的问题及解决方法

1、为了连接方便,对图经行必要的旋转时,导致了输入输出移位,以致编译错误,耗费了大量时间,可见细节很重要。

2、做七段显示器时,由于扫描频率过低,显示闪烁,当频率高于256时,可以正常显示。

3、报时时需要两个不同的频率。

通过电路中两个与门和一个或门将两个不同信号选择的送到扬声器。

 

五、设计结果

下载到实验板上后,可以在七段数码管上正确显示时间,且具有整点报时、手动校时的功能,但是没有实现闹铃功能。

六、实验总结

通过这次多功能数字钟的设计实验,让我基本上掌握了VHDL语言的编写和图形连接,使我熟悉了对MaxPlusII软件的使用并加深了对VHDL语言编程和图形编辑的认识和了解。

也同时更加熟练的掌握了运用波形图进行仿真以及下载测试。

也让我了解了关于数字钟的原理与设计理念,要设计一个电路先进行软件模拟仿真再进行实际的电路制作。

但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。

而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。

所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。

通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际,在今后的学习中,还要多去实践书本的内容,学到更多的知识。

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

当前位置:首页 > 小学教育 > 语文

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

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