数字逻辑课设多功能数字钟顶层图放大了看Word下载.docx
- 文档编号:17608485
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:11
- 大小:216KB
数字逻辑课设多功能数字钟顶层图放大了看Word下载.docx
《数字逻辑课设多功能数字钟顶层图放大了看Word下载.docx》由会员分享,可在线阅读,更多相关《数字逻辑课设多功能数字钟顶层图放大了看Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
(3)能利用实验板上的扬声器做整点报时。
(4)闹钟功能。
(5)在maxplusⅡ中采用层次化设计方法进行设计。
(6)完成全部电路设计后在实验板上下载,验证设计课题的正确性。
二、多功能数字钟的总体设计框图
三、设计方案
根据总体框图,可以将整个系统分为6个模块来实现:
分别是计时模块、校时模块、整点报时模块、分频模块、动态显示模块及闹钟模块。
计时模块
此模块包括秒计数器、分计数器、时计数器以及功能按键的设计。
程序说明:
用一个二十四进制计数器和两个六十进制计数器构成了时钟模块,只要给秒计数器一个1Hz时钟脉冲,则可以正常计时。
分的时钟脉冲以秒的进位来计,时的时钟脉冲以分的进位来计。
1)、六十进制计数器,我采用的是图形输入方式,采用同步置数的方式:
生成器件后的图:
2)、二十四进制计数器:
生成器件后:
校时模块
校时模块设计实现校时、校分及秒清零功能:
1)按下校时键,小时计数器迅速递增以调至所需小时位。
2)按下校分键,分计数器迅速递增以调至所需分位。
3)按下清零键,将秒计数器清零。
校时模块VHDL语言代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityset_54is
port(clk:
instd_logic;
setc:
en:
clk_out:
outstd_logic);
endset_54;
architectureoneofset_54is
begin
process(en)
begin
caseenis
when'
1'
=>
clk_out<
=setc;
---当开关信号为1时,给设置时钟的频率脉冲
whenothers=>
=clk;
---当其他情况正常。
endcase;
endprocess;
endone;
整点报时模块+闹钟报时模块
计时到59分50秒时,每两秒一次低音报时,整点时,进行高音报时。
以不同频率的脉冲信号区分低音和高音报时。
我将闹钟报时的模块也加入了此模块中:
给一个开关,当闹钟模块的输出信号naozhong为1时,进行闹钟报时。
整点(闹钟)报时模块的VHDL语言代码:
entityring_54is
port(clk1,clk2:
naozhong:
miaog,miaos,feng,fens:
instd_logic_vector(3downto0);
ring:
endring_54;
architectureoneofring_54is
process(miaog,miaos,feng,fens)
if(feng="
1001"
andfens="
0101"
andmiaog="
0000"
andmiaos="
)then
ring<
=clk1;
elsif(feng="
0010"
0100"
0110"
ring<
1000"
=clk2;
elsif(naozhong='
)then---闹钟模块的输出信号连接这,为1时进行闹钟报时
ring<
else
='
0'
;
endif;
分频模块
在本时钟中需要很多不同频率的时钟脉冲信号,所以这里用一个分频模块来解决不同需求,我设置了1Hz来给时钟,4Hz来设置时钟,256Hz和512Hz来报时。
还有256Hz给动态显示的扫描频率。
另外一个16Hz备用。
分频模块VHDL语言代码:
entityfenpin_54is
port(clk:
hz_1:
outstd_logic;
hz_4:
hz_16:
hz_256:
outstd_logic;
hz_512:
outstd_logic
);
endfenpin_54;
architectureoneoffenpin_54is
begin
process(clk)
variablea:
std_logic_vector(10downto0);
variableb:
std_logic_vector(6downto0);
variablec:
std_logic_vector(8downto0);
variablee:
std_logic_vector(2downto0);
variabled:
std_logic_vector(1downto0);
ifclk'
eventandclk='
then
ifd<
"
01"
thend:
=d+1;
hz_512<
elsed:
=(others=>
'
);
hz_512<
ifb<
0111111"
thenb:
=b+1;
hz_16<
elseb:
hz_16<
ife<
011"
thene:
=e+1;
hz_256<
elsee:
hz_256<
ifa<
01111111111"
thena:
=a+1;
hz_1<
elsea:
;
ifc<
011111111"
thenc:
=c+1;
hz_4<
elsec:
hz_4<
endif;
endprocess;
闹钟模块
闹钟模块要求数字钟:
1)设定闹钟的时间应使用新的计数器进行存储。
与正常计数器互不干扰。
2)与正常计时状态的显示切换。
可以设定一个按键来切换。
3)应设定一个比较模块,当计时到与闹钟设定时间相等时,驱动扬声器报时。
4)闹钟响声应在一定的时间内,这里设定的是1分钟,而且在这段时间内可以通过按键来取消响声。
这里设置的闹钟设定是另外一组计数器。
闹钟模块:
闹钟模块VHDL语言代码:
entitynaozhong2_54is
port(naoshig,naoshis,naofeng,naofens,shig,shis,feng,fens:
endnaozhong2_54;
architectureoneofnaozhong2_54is
process(naoshig,naoshis,naofeng,naofens,shig,shis,feng,fens)
begin
if((naoshig=shig)and(naoshis=shis)and(naofeng=feng)and(naofens=fens))then---比较计时与闹钟设定时间
ring<
else
endif;
endprocess;
动态显示模块
时间的显示需要用到6个数码管,静态显示不够用,在动态方式下,所有数码管对应同一组七段码,每一个数码管由一个选择控制端点亮或熄灭。
这里用6进制计数器来进行选择控制,每组时间经过七段码译码后输出到6个数码管,当某一组时间的七段码到达时,只点亮对应位置上的数码管,显示相应的数字,6次一循环,形成一个扫描序列,只要扫描频率超过人眼视觉暂留频率(24Hz),就可以达到点亮单个数码管,却能享有6个同时显示的视觉效果,人眼辨别不出差别。
这里采用4-7译码器。
用的是7447模块
扫描显示:
控制信号sel用3-8译码器来控制:
四、实验结果
将调试好的程序下载到实验板上进行验证,达到了设计的各项功能。
时钟准确计数,各模块的进位也正确,当按下实验板上的key1键时进行调节时,实验板上的key2键可实现调节分,实验板上的key3键可以秒清零。
按下Key4键就可以开始调节闹钟,key6调节闹钟的小时位,key7调节闹钟的分位。
最后关闭key4打开key5等待时钟到达闹钟设定的时间就可以闹响了,响时,关闭key5就可以关掉闹响。
五、心得体会
这个实验带给我的体会很多也很深,我以前没有对数字钟进行系统的设计,这次独立的设计,我遇到了很多问题,也走了很多弯路,还好最后终于通过自己的努力看到了理想的结果。
通过实验,我对EDA技术和FPGA技术有了更进一步的理解,掌握了FPGA的层次化设计电路的方法,掌握了用VHDL语言编写各个功能模块并通过波形确定电路设计是否正确。
掌握了下载验到目标器件的过程。
实验中遇到的问题很多,有的是很基础的但我却不知道,例如数码管的扫描频率,刚开始时数码管不显示,我找了很多原因都没想到是扫描频率的问题,浪费了很多时间。
还有分频的时候,看过很多分频的电路程序,但那些并不是都可以实现准确的分频,需要通过波形进行验证。
还有计数器的设计,我用了很长时间才编写出来,现在看看,也没有那么难了。
总之,我很感谢这次实验可以给我这样的机会,这个实验给了我很对的收获,我相信这会对我以后的学习和工作都有帮助。
附录、顶层原理图
PS:
有人说我的图看不见,请按住ctrl然后鼠标往上滚放大了看!
!
或者另存到电脑里放大了看!
@!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 逻辑 多功能 顶层 放大