基于VHDL语言的数字钟设计Word文档下载推荐.docx
- 文档编号:3400990
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:14
- 大小:49.09KB
基于VHDL语言的数字钟设计Word文档下载推荐.docx
《基于VHDL语言的数字钟设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的数字钟设计Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。
闹铃时间为5秒,可提前终止闹铃。
7.可认为设置时间为倒计时模式
8.可切到屏保模式,六个数码管显示为“supper”字样。
三.设计思路和总体设计框图
1.设计思路
程序设计主要分为四个模块,第一部分,做分频器,分出一秒的时钟用来计数,再分出一个中频时钟用来扫描显示数码管,我选择的频率是50kHZ;
第二部分,做计数器,秒随时钟沿计数进1,分钟随着秒计数60次进一,而小时,由于有12/24小时制的切换,时的计数有两个信号来进行,一个信号hour1是分60进一在0到23循环计数,另一个信号hour2是分60进一在0到11循环计数;
第三部分,做扫描显示六个七段数码管,通过选通信号6矢量cat来依次使六个数码管亮,数码管每两位对应相应的时分秒;
第四部分,其他输入输出单元,比如数字钟的时间修正,闹铃等,这些都是基于前三个部分,做起来难度不大。
设计的关键是做好计数器和数码管显示,这是本实验最核心的部分。
2.总体设计框图
四.使用的硬件清单
maxII可编程器件EPM1270T144C5,6个共阴极7段数码管,一个频率为50MHZ的时钟,一个发光二极管,两个按键,4个拨码开关,一个蜂鸣器。
五.程序的状态转移图和逻辑流程图
状态转移图
fix
namename
fix
ch
clarm
逻辑流程图
是
否
是是
六.完整的源程序
6数码管显示时钟,带调时功能,能设置闹钟,闹钟响可人为停止,整点报时,12/24小时制手动切换,可人为设置时间为倒计时,并修正了一个11:
59(或23:
59)跳变到00:
00:
00的bug(即11:
59跳变到00:
00时会先跳到11:
00再跳到00:
00的错误),不足是防抖动设计缺少经验。
--madebysupper
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitymemclockis
port(
clk:
instd_logic;
mfix,hfix:
change:
last:
ld0:
outstd_logic;
name:
alarm:
cat:
outstd_logic_vector(5downto0);
spk:
light:
outstd_logic_vector(6downto0));
endmemclock;
architecturebehaveofmemclockis
signaltemp:
integerrange0to15;
signalj:
integerrange0to5;
signalclk1,clk2:
std_logic;
signalminute:
integerrange0to59;
signalsecond:
signalhour,hour1:
integerrange0to23;
signalhour2:
integerrange0to11;
signalh0,h1,m0,m1,s0,s1:
signaltmp2:
integerrange0to999;
signalho:
signalmin:
begin
p0:
process(clk)
if(clk'
eventandclk='
1'
)then
tmp1<
=0;
else
=tmp1+1;
endif;
if(tmp2=999)then
tmp2<
=tmp2+1;
endprocess;
p5:
process(tmp1)
clk1<
='
;
0'
iftmp2=999then
clk2<
p1:
process(clk1)
if(clk1'
eventandclk1='
if(last='
)then--backtothetime......
if(second=0)then
second<
=59;
if(minute=0)then
minute<
hour1<
=hour1-1;
if(hour1=0)then
=23;
hour2<
=hour2-1;
if(hour2=0)then
=11;
=minute-1;
=second-1;
if(second=59)then--normaltimerules
if(minute=59)then
=hour1+1;
if(hour1=23)then
=hour2+1;
if(hour2=11)then
=minute+1;
=second+1;
if(change='
)then--12/24stylechange
if(hour2=23andminute=59andsecond=59)then
hour<
=hour2;
if(hour1>
11)then
ld0<
Else
If(hour1=23andminute=59andsecond)then
=hour1;
if(alarm='
)then--alarmclock
if(mfix='
)then--minutechange
if(hfix='
)then--hourchange
)then--alarmminchange
if(min=59)then
min<
=min+1;
)then--alarmhochange
if(ho=23)then
ho<
=ho+1;
if(minute=0andsecond<
3)then--righttimering
spk<
elsif(minute=minandhour=hoandsecond<
5)then--alarmclock
elsif(alarm='
p2:
process(clk2)--encoder
if(clk2'
eventandclk2='
if(j=5)then
j<
=j+1;
andname='
)then--showalarmtime
h0<
=(hour-h1)/10;
H1<
=hourrem10;
M0<
=(minute-m1)/10;
M1<
=minuterem10;
S0<
=(second-s1)/10;
S1<
=secondrem10;
=(ho-h1)/10;
=horem10;
=(min-m1)/10;
=minrem10;
elsif(name<
=10;
h1<
m0<
=12;
m1<
=13;
s0<
=14;
s1<
=15;
casejis
when1=>
cat<
="
011111"
temp<
=h1;
when2=>
101111"
=m0;
when3=>
110111"
=m1;
when4=>
111011"
=s0;
when5=>
111101"
=s1;
when0=>
111110"
=h0;
endcase;
Casetempis
When0=>
light<
1111110"
--'
When1=>
0110000"
When2=>
1101101"
2
When3=>
1111001"
3'
When4=>
0110011"
4'
When5=>
1011011"
5'
When6=>
1011111"
6'
When7=>
1110000"
7'
When8=>
1111111"
8'
When9=>
1110011"
9'
when10=>
when11=>
0111110"
when12=>
1100111"
when13=>
when14=>
1001111"
when15=>
1110111"
whenothers=>
0000000"
Endcase;
endbehave;
--madebyliaoning
七.时序仿真波形图
仿真的部分,之前已经说过,计数器和数码管显示是本实验核心的部分,所以将这两部分做下仿真,仿真得到预期的效果,再加入分频器下载到实验板上进行调试,之后再加入其他输入输出的功能。
计数器仿真:
观察时分秒的进制是否正确。
数码管仿真:
观察数码管的显示是否正确。
八.故障和故障分析
故障1:
验收时出现的bug,在11:
59跳到00:
00时会先显示11:
:
00再显示00:
00。
解决办法:
由于时的跳变比分秒慢一个时钟沿,导致这样的错误。
用补丁的办法解决,即我承认计数的标准算法在这个时刻是有漏洞的,那么我在算法外附加一个条件使它能弥补这一漏洞。
在计数结束后,加一个判断条件,假如在时钟沿来临时计数值是11,59,59,那么直接将计数值都归零,这样就可以很好的解决这个bug。
故障2:
数码管显示闪烁太快,看不清显示的数值。
这是分频的问题,闪烁太快说明频率太高,应增大分频系数。
故障3:
数码管显示秒是每次跳两秒,而不是跳1秒。
计数算法没有问题,数码管显示模块有时钟沿的冲突导致,可通过修改数码管扫描的分频来解决,需要仔细的调试。
九.实验心得与总结
在这次数字系统综合实验中,我设计并实现了数字钟这一课题,在基本功能的基础上增添了一些有意思的附加功能,在出现bug后也迅速的找到了解决的办法,从这方面上说,这次实验我还是做的不错的。
同时,反思这次实验中出现的问题,还是暴露了自己各方面的问题:
1.仿真做的不是太好,对仿真的理解不深,说明自己在仿真上的经验还是不够。
2.编程语言的理解不深,在编程过程中多次因为琐碎的语法问题耽误了很多宝贵的实验时间。
3.没有充分面向硬件进行设计,占用资源过多。
4.按键的防抖设计没有做充分的评估,导致验收时的操作并不尽如人意。
以上的问题,都是我宝贵的收获,是我必须深刻总结并且在以后的学习实验中厄待解决的,只有这样,我才能有不断的进步。
十.致谢
在这次数字系统综合实验中,实验老师张咏梅老师给予了我无私而切实有效的帮助,其严谨的态度、严格的要求以及强烈的专业素养都对我有十分深刻的影响,在此,对张咏梅老师表示衷心的感谢。
同时,也希望张咏梅老师在教学方式上有更温和的理解,毕竟不是每个学生都能体会到老师您的严格要求和热切期望,谨期盼老师您能够理解。
另外,各位同学在本次实验中给予我的帮助,特别是一些萍水相逢的同学,他们的无私和热忱让我十分感激,在此,对他们一并表示由衷的感谢。
十一.参考文献
《现代数字电路与逻辑设计实验教程》袁东明史晓东陈凌霄编着
北京邮电大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 语言 数字 设计