江苏大学数字逻辑电路课程设计Word下载.docx

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

江苏大学数字逻辑电路课程设计Word下载.docx

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

江苏大学数字逻辑电路课程设计Word下载.docx

(3)可使用以EP1C12F324C8为核心的硬件系统上的扬声器进行整点报时。

(4)设置闹钟,并连接扬声器实现闹铃功能。

(5)通过以EP1C12F324C8为核心的硬件系统上的动态扫描数码管显示时间。

二、顶层图

三、系统功能分析

根据总体设计框图,可以将整个系统分为6个模块来实现,分别是计时模块、校时模块、整点报时模块、分频模块、动态显示模块及闹钟模块。

1.时、分、秒的基本组成VHDL

(1)24进制计数器

源程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitycnt24is

port(clk:

instd_logic;

ql,qh:

outstd_logic_vector(3downto0);

tc:

outstd_logic);

endcnt24;

architectureoneofcnt24is

signall,h:

std_logic_vector(3downto0);

signalco:

std_logic;

begin

process(clk)

if(clk'

eventandclk='

1'

)then

if(l<

"

1001"

and(h="

0000"

orh="

0001"

))then

l<

=l+1;

h<

=h;

co<

='

0'

;

endif;

if(l="

))then

h<

=h+1;

l<

="

endif;

if(l<

0100"

andh<

0010"

)then

if(l="

0011"

andh="

h<

qh<

ql<

=l;

tc<

=co;

endprocess;

endone;

模块图:

(2)60进制计数器

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt60is

port(

clk,clr:

bufferstd_logic_vector(3downto0);

outstd_logic

);

endcnt60;

architecturebehavorofcnt60is

signalh,l:

process(clk,clr)

if(clr='

)thenh<

l<

co<

elsif(clk'

if(l="

if(h="

0101"

elseh<

else

endbehavor;

2.分配器和二路选择器

(1)分配器

entitydex2is

port(sel:

data:

instd_logic;

o1,o2:

enddex2;

architecturebehofdex2is

begin

process(sel)

if(sel='

)then

o1<

=data;

else

o2<

endbeh;

(2)二路选择器

entitymux2is

port(

A,B:

S:

Y:

);

endmux2;

architectureoneofmux2is

process(A,B,S)

if(S='

Y<

=A;

else

=B;

endif;

endone;

3.计时和校时模块

校时模块设计实现校时、校分及秒清零功能:

1) 

按下校时键,小时计数器迅速递增以调至所需小时位。

2)按下校分键,分计数器迅速递增以调至所需分位。

3) 

按下清零键,将秒计数器清零。

4.整点报时模块

当计时至59’50’’、59’52’’、59’54’’、59’56’’、59’58’’时,驱动扬声器低音报时,计时至整点时产生高音报时。

输入端mh[3..0]和ml[3..0]用于连接分位,sh[3..0]和sl[3..0]用于连接秒位;

输出端sig500用于产生低音报时,sig1k用于产生高音报时。

entityzdbsis

port(mh,ml,sh,sl:

instd_logic_vector(3downto0);

sig500,sig1k:

outstd_logic

);

endzdbs;

architecturebehaviorofzdbsis

begin

sig500<

whenmh="

andml="

andsh="

and(sl="

orsl="

orsl="

0110"

1000"

else'

sig1k<

andsl="

endbehavior;

5.分频模块

在本系统中需要用到多种不同频率的脉冲信号,上至1kHz的高音报时信号,下至1Hz的计秒脉冲。

所有这些脉冲信号均可以通过一个基准频率分频器生成。

基准频率分频器就是一个进制很大的计数器,利用计数器的分频功能,从不同的输出为得到所需要的脉冲信号。

输出HZ1、HZ4、HZ64和HZ512可分别得到1Hz、4Hz、64Hz和512Hz的脉冲信号。

将clk时钟端外接硬件系统基准时钟可直接得到频率为1kHz的时钟信号。

entityfreq_divideris

clk:

hz1,hz4,hz64,hz512:

endfreq_divider;

architecturebehavioroffreq_divideris

signalq:

std_logic_vector(9downto0);

process(clk)

begin

if(rising_edge(clk))then

q<

=q+1;

endif;

endprocess;

hz1<

=q(9);

hz4<

=q(7);

hz64<

=q(3);

hz512<

=q(0);

6.动态显示模块

时间的显示需要用到6个数码管,静态显示不够用,在动态方式下,所有数码管对应同一组七段码,每一个数码管由一个选择控制端点亮或熄灭。

这里用6进制计数器来进行选择控制,每组时间经过七段码译码后输出到6个数码管,当某一组时的七段码到达时,只点亮对应位置上的数码管,显示相应的数字,6次一循环,形成一个扫描序列,只要扫描频率超过人眼视觉暂留频率(24Hz),就可以达到点亮单个数码管,却能享有6个同时显示的视觉效果,人眼辨别不出差别。

这里采用4-7译码器。

控制信号sel用3-8译码器来控制。

(1)动态扫描显示模块

entitydtsmis

port(clk:

h:

instd_logic_vector(7downto0);

m:

s:

seg7out:

outstd_logic_vector(6downto0);

sel:

outstd_logic_vector(2downto0)

enddtsm;

architecturebehaveofdtsmis

signalout1:

signalsel1:

std_logic_vector(2downto0);

p1:

process(clk)

begin

if(rising_edge(clk))then

sel1<

=sel1+1;

sel<

=sel1;

endprocessp1;

p2:

process(sel1,h,m,s)

casesel1is

when"

000"

=>

out1<

=h(7downto4);

001"

=h(3downto0);

010"

1010"

011"

=m(7downto4);

100"

=m(3downto0);

101"

110"

=s(7downto4);

111"

=s(3downto0);

endcase;

endprocessp2;

p3:

process(out1)

caseout1is

seg7out<

0111111"

0000110"

1011011"

1001111"

1100110"

1101101"

1111101"

0111"

0000111"

1111111"

when"

1101111"

whenothers=>

0000000"

endprocessp3;

endbehave;

(2)显示选择模块

entitysel_showis

port(

jh,jm,nh,nm:

sel:

oh,om:

outstd_logic_vector(7downto0)

endsel_show;

architectureoneofsel_showis

process(sel,jh,jm,nh,nm)

if(sel='

oh<

=jh;

om<

=jm;

else

=nh;

om<

=nm;

endprocess;

7.闹钟模块

比较正常计数时间与闹钟定时时间是否相等,若相等,ring_out输出”1”,反之输出”0”.源程序:

entitycompareis

jh:

jm:

nh:

nm:

ring_out:

endcompare;

architectureoneofcompareis

process(jh,jm,nh,nm)

if(jh=nhandjm=nm)then

ring_out<

四、引脚锁定

五、心得体会

经过此次数字钟的设计,我确实从中学到很多的东西。

首先,通过VHDL硬件语言的学习,我充分认识到了功能模块如何用语言实现,让我初步了解到了一个数字电路用硬件语言设计的方式和设计思想。

其次,也让我深深地体会到实践的重要性,起初我学VHDL语言的时候,只是学得书本上的知识,经过这次课程设计,通过对模块的语言实现,对于VHDL语言我有了更深的认识。

而且在程序错误的发现和改正的过程中,我得到了更多的收获,也确实让我进步了不少。

再次,当我遇到一些问题的时候,请教老师,和同学们一起讨论,令我受益颇多!

最后,这个多功能数字电子钟是自我创造与吸取借鉴共同作用的产物,是自我努力的结果。

这让我对数字电路的设计充满了信心。

虽然课程设计已经结束,但这并不代表着我已经真正掌握了VHDL语言,仍需继续学习!

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

当前位置:首页 > 经管营销 > 经济市场

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

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