南京理工大学EDA设计多功能数字钟的设计.docx
《南京理工大学EDA设计多功能数字钟的设计.docx》由会员分享,可在线阅读,更多相关《南京理工大学EDA设计多功能数字钟的设计.docx(19页珍藏版)》请在冰豆网上搜索。
南京理工大学EDA设计多功能数字钟的设计
EDA数字钟的设计
指导老师:
谭雪琴
姜萍
姓名:
张羊
学院:
电子工程与光电技术学院
专业:
真空电子技术
学号:
0804620127
完成时间:
2011年4月
目录:
一.设计要求………………………………………………………………
二.方案论证………………………………………………………………
三.子模块设计……………………………………………………………
1.频率源设计……………………………………………………………
①模48计数器的设计………………………………………………
②模1000计数器的设计……………………………………………
③模2计数器的设计………………………………………………
④1KHZ脉冲的设计…………………………………………………
⑤500HZ脉冲的设计………………………………………………
⑥1HZ脉冲的设计…………………………………………………
2.计数部分电路设计……………………………………………………
①模60计数器的设计………………………………………………
②模24计数器的设计………………………………………………
③计数器的设计……………………………………………………
3.清零和保持电路的设计………………………………………………
4.校分和校时电路的设计………………………………………………
5.报时电路的设计………………………………………………………
6.显示电路的设计………………………………………………………
①模6计数器的设计………………………………………………
②24选4(或六选一)数据选择器的设计…………………………
③动态显示设计……………………………………………………
7.最终总体电路…………………………………………………………
4.附加闹铃功能…………………………………………………………
①频率源的设计……………………………………………………
②闹铃的设计………………………………………………………
五.编程下载………………………………………………………………
六.实验总结和感受………………………………………………………
七.参考文献………………………………………………………………
中文摘要
本实验利用QuartusII软件,结合所学的数字电路的知识设计一个24时多功能数字钟,具有正常计数、快速校分校时、整点报时功能。
论文分析了整个电路的工作原理,还分别说明了各子模块的设计原理和调试、仿真、编译下载的过程,并对最终结果进行总结,最后提出了在实验过程中出现的问题和解决的方案,以及后续设计思想。
通过实验掌握了一些电子器件的基本功能和用法,同时体会到了利用软件设计电路的方便快捷,避免了硬件布线的繁琐,提高了效率,同时它也为以后设计更复杂的电路打下了良好的基础。
关键词数字钟QuartusII计数校分报时调试仿真编译下载
外文摘要
UsingtheQuartusIIsoftwareinthisexperiment,wedesignadigitalclockof24hourswithlearningdigitalcircuitknowledge.Thecircuitmusthavethefunctionsofnormallycounting,keepingthetime,resetting,adjustingtheminuteandhourswiftly,ringingthetimeintheroundnumbertime.
Thethesishasanalyzedtheprincipleofthewholecircuitandexplainedthedesigningprincipleofdifferentpartsseparately.Bytheprocessofdebugging,simulating,compilingandloading,wesumupthefinalresult.Atlast,weputforwardtheproblemswearesubjectedtointhewholeexperimentand
somewaystosettlethemandothersubsequentideasofdesigning.
Iknowaboutthebasicfunctionsandusingmethodofsomeelectricdevicesthroughthisexperiment.Atthesametime,Irealizetheconvenienceofmakinguseofthesoftwaretocarryontheelectriccircuit,whichcanavoidthetediouslineofthehardwareandimprovetheefficiency.Simultaneouslyitcanalsoletushaveagoodfoundationfordesigningamorecomplexsystem.
Keywordsdigitalclock,counting,adjustingtheminuteandhour,ringing,debugging,simulating,compilingandloading
一:
实验要求
1)设计一个数字计时器,可以完成00:
00:
00到23:
59:
59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、整点报时等功能。
2)对数字计时器采用层次化的方法进行设计,其中构成整个设计的子模块既可以用原理图输入实现,也可以采用VHDL语言编程实现。
3)数字钟的具体设计要求具有如下功能:
①数字计时器能够完成从00:
00:
00到23:
59:
59的计时功能;②在数字计时器正常计数的情况下,可以对其进行不断电复位,即拨动开关K1可以使时分秒位清零;③在数字计时器正常工作的情况下,拨动开关K2可以使数字计时器保持原有显示的读数,停止计时;④在数字计时器正常工作的情况下按下开关K3可以实现快速校分,按下开关K4可以实现快速校时;⑤数字计时器在每小时整点到来之前进行鸣叫,在每小时的59分53秒,55秒,57秒用500HZ的频率驱动蜂鸣器,在每小时的59秒用1KZ的频率驱动蜂鸣器。
4)对设计电路进行功能仿真。
5)将仿真通过的逻辑电路下载到EDA实验系统,对其功能进行验证。
二:
方案论证
数字计时器有时分秒,时分秒各有高低两位,其中时位为一个模24的计数器,分位和秒位为模60的计数器。
秒位每秒加一,分位每六十秒加一,时位每六十分加一,于是低位的进位信号可以用来驱动高位计数,这就是数字计时器的原理。
至于清零,保持,校分,校时电路则只需要通过简单的组合逻辑电路来用一个开关控制使能端或进位信号或它们的相关组合即可。
整点报时即当计时在某种状态下以一定的频率驱动蜂鸣器即可。
最后就是动态显示部分,动态显示利用的是人眼的视觉暂留效应,在闪烁频率大于48HZ时人眼便感觉不到闪烁。
利用这个原理可以使几个数码管在译码器的作用下以比较高的频率轮流进行工作,人眼看不到闪烁,看起来这些数码管是同时工作的,这样就可以达到动态显示。
三:
子模块设计
1.频率源的设计
在数字计时器的设计中我们需要用到的频率源有1HZ,1KHZ和500HZ,而实验中所给振荡频率源为48MHZ,显然不满足我们的需求,为此我们要将其进行48分频后可得1MHZ,再进行1000分频后可得1KHZ,将1KHZ再进行1000分频后可得1HZ来提供计时脉冲,将1KZ进行2分频后可得500HZ。
为此我们需分别设计模48,模1000和模2计数器。
①模48计数器的设计
我们采用了两片74160BCD计数器,左边的一片作为低位,右边的一片作为高位,我们采用的是置数法,将左边74160的RCO进位端连接到右边74160的使能端ENT和ENP,当左边低位74160计数超过9时便产生进位开始让右边一片高位74160开始计数,我们用QH[2],QL[0],QL[1],QL[2]通过一个与非门给置位端LDN,即计数计到23时会被置位,我们将所置的数DCBA赋以0000,这就是置数法。
当然我们需将左边74160的使能端ENT和ENP和清零端CLRN及右边74160的清零端都接VCC以保证两片74160都能正常工作,同时要在时钟CLK端给以时钟脉冲信号。
最后我们将置位端LDN通过一个非门之后输出即得48分频的信号。
编译调试通过后,我们给以波形上的仿真,结果如下:
封装后得:
②模1000计数器的设计
我们采用了三片74160BCD计数器,最左边的一片作为最低位,最右边的一片作为最高位,将最左边一片的RCO进位端接到中间一片的使能端ENT和ENP,即最左边计到9时产生进位信号给中间一片让其开始计数,将最左边的一片的RCO进位端和中间一片的RCO进位端通过一个与门输出后给最右边一片的使能端ENP和ENT,即计到99时产生进位,于是最右边的一片开始计时,计到999后即开始清零重新再计。
当然还要将三片得置位端LDN和清零端CLRN接VCC,最左边一片的使能端ENP和ENT接VCC以保证3片74160能正常工作,同时在时钟CLK端给以时钟脉冲信号,从QC[3]输出得1000分频后的信号。
编译调试通过后,我们给以波形上的仿真(由于空间有限,只截了后面一部分)得:
封装后得:
③模2计数器的设计
我们采用了一片D触发器,将D触发器的输出Q端通过一个与门后再接到输入端D即可。
当然我们需将使能端PRN和清零端CLRN接VCC以保证D触发器能正常工作。
同时我们在时钟CLK端接上时钟脉冲信号。
从Q端输出即得到2分频的信号。
编译调试通过后,我们给以波形上的仿真得:
封装后得:
④1KHZ脉冲的设计
将48MHZ脉冲从CLK48M端输入,在CLK1000输出端即得1KHZ脉冲。
⑤500HZ脉冲的设计
将48MHZ从CLK48M输入端输入,在CLK500输出端即得500HZ脉冲。
⑥1HZ脉冲的设计
将48MHZ从CLK48M输入端输入,在CLK500输出端即得1HZ脉冲。
2.计数部分电路设计
①模60计数器的设计
我们利用两片74160,左边的一片作为低位,右边的一片作为高位,我们将两片的使能端ENP接成整片的使能端EN,清零端CLRN接成整片的清零端k1qingling,将左边一片的进位端RCO接到右边一片的使能端ENT,即当左边一片计数计到9时产生进位信号,右边一片开始计数,同时将左边一片使能端ENT接VCC,时钟CLK端给以1HZ计数脉冲,我们采用置数法,考虑到使能端EN,我们用QH[2],QH[0],QL[0],QL[3]通过一个与门输出再与使能端EN通过一个与非门给置位端LDN,即在使能端EN为1的情况下,当计数计到59时开始置数,我们赋以置数DCBA为0000,即为置数法。
同时将LDN通过一个非门后输出作为整片的进位信号CO。
编译调试通过后,我们给以波形上的仿真得:
封装后得:
②模24计数器的设计
我们利用两片74160,左边的一片作为低位,右边的一片作为高位,我们将两片的使能端ENP接成整片的使能端EN,清零端CLRN接成整片的清零端k1qingling,将左边一片的进位端RCO接到右边一片的使能端ENT,即当左边一片计数计到9时产生进位信号,右边一片开始计数,同时将左边一片使能端ENT接VCC,时钟CLK端给以1HZ计数脉冲,我们采用置数法,考虑到使能端EN,我们用QH[1],QL[0],QL[1]通过一个与门输出再与使能端EN通过一个与非门给置位端LDN,即在使能端EN为1的情况下,当计数计到23时开始置数,我们赋以置数DCBA为0000,即为置数法。
同时将LDN通过一个非门后输出作为整片的进位信号CO。
编译调试通过后,我们给以波形上的仿真得:
封装后得:
③计数器的设计
其中从上到下的m24,m60,m60分别作为时分秒位,首先要保证m60和m24计数器的清零端无效,即接高电平。
将低位的m60的进位端接到高位m60计数器的使能端上,由于必须是分和秒都记到59开始进位时时才进位,所以将低位和高位m60计数器的进位端相与接到m24的使能端,然后将1HZ的时钟分别接到三个计数器的CLK端即可。
编译调试通过后,我们给以波形上的仿真(由于空间有限,只截了一部分)得:
3.清零和保持电路的设计
我们用的是计数器部分的电路,将秒位(最下面的m60)的使能EN端接到k2baochi输入端口上,当k2baochi端接成高电平时,如果k1qingling端接高电平,那么计数器正常计数;如果k2baochi接低电平,那么秒位停止计数,当然就不会进位了,故而分位和时位也不会计数,即计数器完成保持状功能;如果k1qingling端接低电平,那么时分秒位都会被清零,即计数器完成清零功能。
4.校分和校时电路的设计
这里通过拨动开关来实现校时和校分。
原理就是当开关作用时,将计数器的使能端置成高电平,这样时钟以来分位和时位便可以以1HZ的频率计数,将开关再换回原来的状态时使能端又变为低位的进位端,仅仅当低位进位时才增加,这也就实现了校时和校分的功能,考虑到开关的一致性,我们让所有的开关拨在下方时正常计数。
那么就可以将低位的进位端跟开关的非进行或运算,运算后送到高位的使能端。
考虑到校分时要保证时不变,也就是说即使校分时分位为59跳向00,时也不进位,因此将分的进位端跟控制校分的开关还有秒的进位端作与运算后再跟控制校时的开关作或运算接到时的低位的使能端即可以校时。
5.报时电路的设计
整点报时即当分位为59,秒位分别为53,55,57,59时用某个频率驱动扬声器,前三声的频率低一点,而最后一声的频率高一点。
这里较低的频率选500HZ,较高的频率选择1000HZ。
由要求可推出驱动的表达式:
H=
59分53秒500HZ+59分55秒500HZ+59分57秒500HZ+59分59秒1000HZ=
59分51秒(2秒500HZ+4秒500HZ+6秒500HZ+8秒1000HZ)=
fenH[0]fenH[2]fenL[0]fenL[3]miaoH[0]miaoH[2](miaoL[0]miaoL[1]500HZ+miaoL[0]miaoL[2]500HZ+miaoL[0]miaoL[1]miaoL[2]500HZ+miaoL[0]miaoL[3]1000HZ)=
fenH[0]fenH[2]fenL[0]fenL[3]miaoH[0]miaoH[2](miaoL[0]miaoL[1]500HZ+miaoL[0]miaoL[2]500HZ+miaoL[0]miaoL[3]1000HZ)=
fenH[0]fenH[2]fenL[0]fenL[3]miaoH[0]miaoH[2]((miaoL[1]+miaoL[2])miaoL[0]500HZ+miaoL[0]miaoL[3]1000HZ)
封装后得:
6.显示电路的设计
①模6计数器的设计
我们采用一片74160,仍然采用置数法,将使能端ENT和ENP,清零端CLRN都接VCC,a[0]和a[2]通过与非门的输出给置位端LDN,即计到5时开始清零。
这里我们CLK时钟端给以1000HZ为的是后面达到动态显示的效果。
我们给以波形上的仿真得:
②24选4(或六选一)数据选择器的设计
libraryieee;
useieee.std_logic_1164.all;
entitymux24isport
(a,b,c:
instd_logic;
i0,i1,i2,i3,i4,i5:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(3downto0));
endmux24;
architecturearchmuxofmux24is
signalsel:
std_logic_vector(2downto0);
begin
sel<=c&b&a;
q<=i0whensel="000"else
i1whensel="001"else
i2whensel="010"else
i3whensel="011"else
i4whensel="100"else
i5whensel="101"else
"XXXX";
endarchmux;
封装后得:
我们给以波形上的仿真得:
从仿真结果很容易看出当cba=010时,选择了i2,符合要求。
③动态显示设计
模6计数器上CLK端接有1KHZ的时钟脉冲,输出端a[0],a[1],a[2]作为74138译码器的地址端,选择六个数码管轮流点亮,但由于加的是1KHZ的脉冲,比人眼的临界闪烁频率48HZ要大,人眼看起来不会感觉闪烁,看起来六个数码管是同时点亮的,这就是动态显示的原理。
将a[0],a[1],a[2]接24选4数据选择器的地址端,将时分秒的高低位分别接到数据选择器的数据端,选择时分秒高低位中的一位送到7447七段显示译码器上进行译码,使其显示0到9的数字。
7.最终总体电路
4.附加闹铃功能
①频率源的设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYfenpin3IS
PORT(clk:
INSTD_LOGIC;
hz:
bufferSTD_LOGIC;
hz1:
bufferSTD_LOGIC;
hz2:
bufferSTD_LOGIC;
hz3:
bufferSTD_LOGIC;
hz4:
bufferSTD_LOGIC;
hz5:
bufferSTD_LOGIC;
hz6:
bufferSTD_LOGIC;
hz7:
bufferSTD_LOGIC;
hz0:
bufferSTD_LOGIC);
ENDfenpin3;
ARCHITECTUREbehOFfenpin3IS
SIGNALcount:
integerrange0to24000000;
SIGNALcount2:
integerrange0to240000;
SIGNALcount3:
integerrange0to240000;
SIGNALcount4:
integerrange0to240000;
SIGNALcount5:
integerrange0to240000;
SIGNALcount6:
integerrange0to240000;
SIGNALcount7:
integerrange0to240000;
SIGNALcount8:
integerrange0to240000;
SIGNALcount0:
integerrange0to240000;
BEGIN
PROCESS(clk)
BEGIN
IF(clk='1')THEN
count<=count+1;
count2<=count2+1;
count3<=count3+1;
count4<=count4+1;
count5<=count5+1;
count6<=count6+1;
count7<=count7+1;
count8<=count8+1;
count0<=count0+1;
IF(count=23999999)Then
count<=0;
hz<=NOThz;
ENDIF;
IF(count2=90908)Then
count2<=0;
hz1<=NOThz1;
ENDIF;
IF(count3=80807)Then
count3<=0;
hz2<=NOThz2;
ENDIF;
IF(count4=72726)Then
count4<=0;
hz3<=NOThz3;
ENDIF;
IF(count5=68180)Then
count5<=0;
hz4<=NOThz4;
ENDIF;
IF(count6=60605)Then
count6<=0;
hz5<=NOThz5;
ENDIF;
IF(count7=54544)Then
count7<=0;
hz6<=NOThz6;
ENDIF;
IF(count8=48483)Then
count8<=0;
hz7<=NOThz7;
ENDIF;
IF(count0=63)Then
count0<=0;
hz0<=NOThz0;
ENDIF;
ENDIF;
ENDPROCESS;
ENDbeh;
经过这个程序可得264HZ,297HZ,330HZ,352HZ,396HZ,440HZ,495HZ,375KHZ的频率源。
封装后可得:
②闹铃的设计
首先,铃声所需要的八个音阶的频率375KHZ,264HZ,297HZ,330HZ,352HZ,396HZ,440HZ,495HZ(分别代表0—7这8个音阶)已经在频率源中设计好了,这就需要一个计数器来实现,这里选用74160,将它改成模8计数器,所输出的数加到数据选择器74151(8选1)的地址端,各个不同的频率加到数据端,通过选择不同的频率来实现铃声。
这里引出一个使能端,当使能端接高电平时,74160被清零,数据选择器输出的为375KHZ的频率。
人耳能听到的频率范围为20~20000HZ,因此,此时人听不到声音,即不闹铃。
五:
编程下载
电路图上标号
FPGA管脚号
电路图上标号
FPGA管脚号
KEY1
121
SEG4
165
KEY2
122
SEG5
166
KEY3
123
SEG6
163
KEY4
124
SEG7
164
BEEP
175
DIG0
160
SYS_CLK0
28
DIG1
159
SEGO
169
DIG2
162
SEG1
170
DIG3
161
SEG2
167
DIG4
136
SEG3
168
DIG5
137
分配完再点Assignments->Settings设置其余管脚,然后再编译,点下载按钮,再点HardwareSetup将平台改为ByteBlaster[LPT1],再点START即可。
六:
实验总结和感受
本实验建立在我们大二下所学的数字逻辑电路的基础之上,让我们理论联系实际,通过quartus
软件和可编程逻辑器件FPGA的学习,不仅加深了我们对数字电路知识的巩固与复习,更重要的是让我们通过实践再次锻炼了我们分析处理问题的能力。
本次实验前,我已经对quartus
软件有了一定程度的了解,曾利用以前的空闲时间看过软件的相关操作之类的书,并自学了相关的VHDL编程语言,在有了这样