毕业论文 基于cpld的多功能数字钟设计_第1页
毕业论文 基于cpld的多功能数字钟设计_第2页
毕业论文 基于cpld的多功能数字钟设计_第3页
毕业论文 基于cpld的多功能数字钟设计_第4页
毕业论文 基于cpld的多功能数字钟设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1前言12总体方案设计221方案论述222设计方式33单元模块电路设计431时间显示电路模块设计432按键及指示灯电路模块的设计633蜂鸣器及有源晶振电路的设计834CPLD编程下载电路的设计935电源电路电路的设计1036EPM7128SLC84器件介绍114CPLD编程设计1241系统信号的定义及顶层模块1242时钟节拍产生模块1343模式选择功能模块1544快速时间设置功能模块1745秒、分、时计时与时间调整模块1746闹铃时间设置模块1947闹铃与整点报时模块20487段显示译码模块2149LED显示模块235系统功能及功能仿真2551系统功能2552功能仿真26521时钟节拍产生模块的仿真波形26522模式选择功能模块的仿真波形28523闹铃设置功能模块的仿真波形295247段译码功能模块的仿真波形30525LED显示功能模块的仿真波形31526系统总体功能仿真波形326设计总结337参考文献34附录基于CPLD的多功能数字钟电路图351前言我们已经进入了数字化和信息化的时代,其特点是各种数字产品的广泛应用。现代数字产品在性能提高、复杂度增大的同时,其更新换代的步伐也越来越快,实现这种进步的因素在于生产制造技术和电子设计技术的进步。生产制造技术以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数千万个晶体管。PLD器件和EDA技术的出现,改变了这种传统的设计思路,使人们可以立足于PLD芯片来实现各种不同的功能,新的设计方法能够由设计者自己定义器件内部逻辑和管脚,将原来由电路板设计完成的工作大部分放在芯片的设计中进行。这样不仅可以通过芯片设计实现各种逻辑功能,而且由于管脚定义的灵活性,减轻了原理图和印制板设计的工作量和难度,增加了设计的自由度,提高了效率。同时这种设计减少了所需芯片的种类和数量,缩小了体积,降低了功耗,提高了系统的可靠性。本设计是基于CPLD的多功能数字钟设计。硬件界面为一个6位的LED数码管,时间显示方式为6位同时显示,即显示状态为888888。显示的时间制为24小时制。三个时间设定按键,分别为MODE模式选择键,SET设定键和CHANGE数值修改键。按键功能介绍MODE按键用来选择当前数字钟的工作模式,系统正常工作在模式0下,即模式0为正常时钟模式。当在正常时钟模式下第一次按下MODE键时,系统进入模式1,即闹铃模式,在此模式下可以通过SET和CHANGE按键的配合使用来设定所需要的闹铃时间。当再一次按下MODE按键后系统进入手动校时模式,在此模式下通过SET和CHANGE按键的配合使用,可以改变当前时间。SET按键则用于在不同的模式下选择当前设定的位置,比如当前设定的位置是小时,则再一次按下SET按键后当前设定的位置变为分钟。CHANGE按键用来将当前设定位置的时间值加1,当长时间按下CHANGE按键时,当前设定值为连续快速加1,此功能用于快速设定时间。系统带四个指示灯电路,一个为电源指示灯,其他三个为工作状态指示灯,即分别为LED_ALARM、LED_HOUR和LED_MIN。LED_ALARM用于指示当前是否设有闹铃,当LED_ALARM指示灯亮时表明当前设有闹铃。LED_HOUR和LED_MIN用于指示当前设定的是时间的小时还是分钟,当LED_HOUR指示灯亮时表明此时设定的是时间的小时值,当LED_MIN指示灯亮时表明此时设定的是时间的分钟值。闹铃的功能是实现当到达预设的时间点时产生为时20S的“嘀嘀嘀嘀”急促短音。整点报时的功能是实现在每个整点的5秒钟前产生整点报时音,报时音为“嘀嘀嘀嘟”4短一长音。2总体方案设计21方案论述本设计是基于CPLD的多功能数字钟设计。硬件界面为一个6位的LED数码管,时间显示方式为6位同时显示,即显示状态为888888。显示的时间制为24小时制。三个时间设定按键,分别为MODE模式选择键,SET设定键和CHANGE数值修改键。按键功能介绍MODE按键用来选择当前数字钟的工作模式,系统正常工作在模式0下,即模式0为正常时钟模式。当在正常时钟模式下第一次按下MODE键时,系统进入模式1,即闹铃模式,在此模式下可以通过SET和CHANGE按键的配合使用来设定所需要的闹铃时间。当再一次按下MODE按键后系统进入手动校时模式,在此模式下通过SET和CHANGE按键的配合使用,可以改变当前时间。SET按键则用于在不同的模式下选择当前设定的位置,比如当前设定的位置是小时,则再一次按下SET按键后当前设定的位置变为分钟。CHANGE按键用来将当前设定位置的时间值加1,当长时间按下CHANGE按键时,当前设定值为连续快速加1,此功能用于快速设定时间。系统带四个指示灯电路,一个为电源指示灯,其他三个为工作状态指示灯,即分别为LED_ALARM、LED_HOUR和LED_MIN。LED_ALARM用于指示当前是否设有闹铃,当LED_ALARM指示灯亮时表明当前设有闹铃。LED_HOUR和LED_MIN用于指示当前设定的是时间的小时还是分钟,当LED_HOUR指示灯亮时表明此时设定的是时间的小时值,当LED_MIN指示灯亮时表明此时设定的是时间的分钟值。电源采用5V供电。整个设计的设计方式采用TOPDOWN设计方法。多功能数字钟设计分为1个顶层模块和8个功能子模块。顶层模块名称为CLOCKV。各功能子模块分别为系统分频功能模块CLK_GENERATEV、模式选择功能模块MODE_SELECTV、快速时间设置功能模块FAST_SETTIMEV、秒、分、时计时与时间调整模块TIME_MODE0V、闹铃时间设置模块ALARM_SETV、闹铃与整点报时模块ALARMV、7段显示译码模块DECODER_7SEGV以及LED显示功能模块DISPLAYV。22设计方式TOPDOWN设计,即自顶向下的设计。这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在功能级进入仿真和纠错,并用硬件描述语言对高层次的系统行为进行描述,然后用综合工具将设计转化为具体门电路网表,其对应的物理实现可以是PLD器件或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这一方面有利于早期发现结构上的错误,避免设计工作的浪费,同时也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。整个设计的设计方式采用TOPDOWN设计方法。多功能数字钟设计分为1个顶层模块和8个功能子模块。顶层模块名称为CLOCKV。各功能子模块分别为系统分频功能模块CLK_GENERATEV、模式选择功能模块MODE_SELECTV、快速时间设置功能模块FAST_SETTIMEV、秒、分、时计时与时间调整模块TIME_MODE0V、闹铃时间设置模块ALARM_SETV、闹铃与整点报时模块ALARMV、7段显示译码模块DECODER_7SEGV以及LED显示功能模块DISPLAYV。CLK_GENERATEVMODE_SELECTVCLOCKVFAST_SETTIMEVTIME_MODE0VALARM_SETVALARMVDECODER_7SEGVDISPLAYV图21整个系统的模块划分3单元模块电路设计31时间显示电路模块设计时间显示电路主要由两部分组成,如图31所示。其中一部分为六位LED数码管的驱动电路,另一部分为LED数码管电路。LED驱动电路由Q1、Q2、Q3、Q4、Q5、Q6六支三级管和R5、R6、R7、R8、R9、R10基极偏置电阻组成。驱动三级管为PNP型三极管,用于开关电路中。当三级管Q1的基极(即CPLD的LED0输出端)为低电平时,Q1的发射结正向偏置,集电结反向偏置,因此三极管处于导通状态,此时有VCE0203V。反之当Q1的基极为高电平时Q1截止。Q1、Q2、Q3Q6的基极(LED0LED5)分别接CPLD的PIN74、PIN73、PIN70、PIN69、PIN68、PIN67,分别作为LED数码管的位选端。012986AB7C4DEFG5PLQKRKV图31LED显示电路LED的显示方式有静态显示和动态方式两种工作方式。LED显示器工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或5V);每位的段码线(ADP)分别与一个8位的锁存器输出相连。之所以为静态显示,是因为各个LED的显示字符的字符一经确定,相应锁存器锁存的段码输出将维持不变,直到送入另一个字符的段码为止。正因为如此,静态显示器的亮度都较高。但是因为静态显示方式下,各位LED的段码线都是独立的,因此一个6位的LED显示器需要占用68654个I/O口,在这种情况下为了简化接线,因此在本设计中采用的是动态扫描方式来显示距离。在动态显示方式下,通常将所有位的段码线相应并联在一起,由一个8位的I/O口控制,形成段码线的多路复用,而各位的共阳极或共阴极分别由相应的I/O口线控制,形成各位的分时选通。图31所示的电路是一个六位的LED显示电路。其中段码线占用1个8位I/O口,而位选线占用六位I/O口。由于各段码线并联,8位I/O口输出的段码对各个显示位来说都是相同的。因此,在同一时刻,如果各位位选线都处于选通状态的话六位LED将显示相同的字符。若要各位LED能同时显示出与本位相应的显示字符,就必须采用动态显示方式,即在某一时刻,只让某一位的位选线处于选能状态,而其他各位的位选处于关闭状态,同时,段码线上输出相应的要显示的字符段码。这样,在同一时刻,六位LED中只有选通的那一位显示出字任,而其它四位则是熄灭的。同样在下一时刻,只让下一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示相应的字符。而其它各位是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符。图31所示三位数码显示管,常用的LED显示器为8段。每一个段对应一个发光二极管。这种显示器有共阳极和共阴极2种。共阴极LED显示器的发光二极管的阴极连接在一起,通常此公共阴极接地。当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。六位LED显示器有6位位选线和48根段码线。段码线控制显示字符的字型,而位选线为各个LED显示位中各段的公共端,它控制该LED显示位的亮或暗。LED显示器工作于静态显示方式时,各位的共阴极或共阳极连接在一起并接地或5V。在多位显示时,为简化硬件电路,通常将所有位的段码线相应段并联在一起,由一个8位I/O口控制,形成段码线的多路复用。由于各位段码线并联,8位I/O口输出的段码对各个显示字符来说都是相同的,因此,在同一时刻,如果各位位选线都外于选通状态的话,6位LED将显示相同的字符,就必需采用动态显示方式,即在某一时刻,只让某一位的位选线外于选通状态,而其他各位的位选线外于关闭状态,同时段码线上输出相应位要显示字符的段码。这样在同一时刻,6位LED中只有选通的那一位显示出字符,而其他5位是熄灭的。同样在下一时刻,只让下一位的位选线外于选通状态,而其他各位的位选线处于关闭状态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示出相应的字任,而其他各位刚是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符。虽然这些字符是在不同时刻出现的,但由于人的视觉暂留作用而感到同时显示。32按键及指示灯电路模块的设计根据电子电路常识,采用灌电流工作方式的电路的功耗要比采用拉电流方式工作的电路小。因此本设计中所有的外部键盘,指示二极管均采用灌电流的工作方式。当多功能数字钟的按键未按下时按键的输出(即CPLD的输入)为低电平,当按键按下时输出(即CPLD的输入)为高电平。在本设计中只有三个按键,分别为MODE、SET、CHANGE。MODE按键用于模式选择,按下一次MODE按键后电路进入闹铃设置模式,在该模式下可以用SET键来选择当前是设置小时还是设置分钟,而用CHANGE键可以改变当前设置闹铃的小时或分钟(向上加一)。再按一次MODE键则进入手动校时功能模式。按键电路如图32所示。图32按键电路在本设计中共有四个指示灯,一个为电源指示灯,其它三个是工作状态指示灯,D1为闹铃报警指示电路,当设置闹铃后闹铃指示电路就工作在点亮状态,指示当前设有闹铃。D2和D3用来指示当前设置状态。当在闹铃设置模式和手动校时模式下,D2或D3会有一个在点亮状态,当D2亮时表示当前设置的是小时,当D3亮时表示当前设置的是分钟。指示灯电路如图33所示。图33指示灯电路引脚的连接为,D1接CPLD的PIN61,D2接CPLD的PIN63,D3接CPLD的PIN64。当CPLD的引脚输出为高电平时相应的指示灯就点亮。33蜂鸣器及有源晶振电路的设计在本设计中由于有音调的变换,所以必需采用交流蜂鸣器。由于CPLD管脚的驱动能力有限,因此通过连接一个三极管来增强驱动能力,从而提高蜂鸣器的响度。二极管D9起到续流保护的作用,蜂鸣器电路如图34所示。图34蜂鸣器电路系统时钟采用2048MHZ的有源晶体振荡器。为了使有源晶振能输出较好的波形,必需保证供电的稳定。所以在晶振电路的前端加了两个小电容对电源进行滤波,在时钟输出端加了一个小电阻,能有效地抑制高次谐波和实现阻抗匹配。有源晶振电路如图35所示。图35有源晶振电路34CPLD编程下载电路的设计CPLD器件多采用JTAG编程方式,JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。JTAG接口可对PSD芯片内部的所有部件进行编程。在硬件结构上,JTAG接口包括两部分JTAG端口和控制器。与JTAG接口兼容的器件可以是微处理器(MPU)、微控制器(MCU)、PLD、CPL、FPGA、ASIC或其它符合IEEE11491规范的芯片。IEEE11491标准中规定对应于数字集成电路芯片的每个引脚都设有一个移位寄存单元,称为边界扫描单元BSC。它将JTAG电路与内核逻辑电路联系起来,同时隔离内核逻辑电路和芯片引脚。由集成电路的所有边界扫描单元构成边界扫描寄存器BSR。边界扫描寄存器电路仅在进行JTAG测试时有效,在集成电路正常工作时无效,不影响集成电路的功能。JTAG编程方式对CPLD和FPGA器件都支持,用于CPLD器件的下载文件是POF文件。JTAG下载电路如图36所示。VNK203KO5678下图36JTAG下载电路JTAG下载电路的10针接口引脚定义为。1引脚为TCK时钟,2引脚接地,3引脚TDO为测试数据输出(数据输出,来自器件),4引脚接电源电压,5引脚TMS为测试模式选择(编程使能),NC为NOCONNECT。9引脚TDI为测试数据输入(数据输入到器件),10引脚接地。35电源电路电路的设计本设计中的核心器件为MAX7000S系列的EPM7128SLC84,I/O口电压VCCIO和核心电压VCCINT均支持正5V,因此在本设计中统一给I/O端口和内核提供5V的电压。图37电源电路电源电路是由电源变压器T、桥堆、滤波电容C11、C13、C15、C17及集成三端稳压电路7805以及保险丝组成,其电路图如图37所示。电源的输出为5V输出。本系统采用7805稳压电路下面介绍电原各部分参数的整定方法1变压器次极电压估算(以便选取合适的变压器)由于稳压管要正常工作时输入端的电压必需要比输出端高25V时才能使稳压管稳定工作。考虑到市网交流电压的波动情况,在市网电压为200V时也能正常工作,则有220/200VAC要大于80,所以VAC必需要大于88V,即交流变压器的负边输出电压应该高于88V,在本设计中选取9V。2变压器输入功率的计算1假设负载电流为500MA,若输出电压为5V,则有效功率为5V05A25W。2正常情况下变压器输出功率约为9V1215A54W,当市网电压升到250V时,变压器的输出功率为54W250/22062W。3小型电源变压器的效率一般为75左右。因此电源变压器的输入功率为62W/075827W。3虑波电容参数的选取1假设负载电流为500MA,若输出电压为75V,则等效负载电阻为15。2电源频率为50HZ,则T0。02S,根据CRL(35)T/2,则C(35)T/2/RL20003300UF。在本设计中取2200UF。3电容耐压应大于142VAC即VC1429250/220145V其中250/220是考虑市网电源电压过高时的情况。在本设计中电容耐压值取16V。36EPM7128SLC84器件介绍本次设计的核心器件采用ALTERA公司的CPLD可编程器件。ALTERA公司的MAX7000S系列CPLD有着较高的性价比。MAX7000S系列是基于ALTERA第二代MAX架构的高密度、高性能的PLD器件。MAX7000器件包含32256个可联结成16个宏单元组的逻辑阵列块的宏单元。EPM7128SLC84是MAX7000S家族成员之一,它有如下的特点可用逻辑门个数为2500门,128个宏单元,8个逻辑陈列块,最大用户可用I/O口100个,支持5V在系统编程和符合IEEESTD1179R的JTAG下载接口,内建边界扫描测试电路,支持片上调试EPM7128SLC8415的封装图如图38所示图38EPM7128SLC的PLCC封装4CPLD编程设计41系统信号的定义及顶层模块整个系统输入、输出信号的定义SYSCLK系统的时钟信号,由外部有源晶振产生,频率为2048MHZ;MODE外接按键,模式选择信号,MODE0时为时钟模式,MODE1时为设定闹钟模式,MODE2时为手动设定时间模式;SET外接按键,用于在手动设置时间时选择是调整小时还是分钟;若长时间按住该键,还可以使秒信号清零,用于精确调整时间;CHANGE外接按键,手动调整时间,每按一次计数器加1;若长时间按住则连续快速加1,用于快速调时和定时;ALARM接蜂鸣器,输出到蜂鸣器的信号,用于产生闹铃音和报时音;闹铃音为持续20S的急促的“嘀嘀嘀”音,整点报时音为“嘀嘀嘀嘟”四短一长音;DATAOUT输出信号,输出显示时间的数码管显示的段码。INCLUDE“CLK_GENERATEV“INCLUDE“TIME_MODE0V“INCLUDE“MODE_SELECTV“INCLUDE“FAST_SETTIMEV“INCLUDE“ALARM_SETV“INCLUDE“ALARMV“INCLUDE“DECODER_7SEGV“INCLUDE“DISPLAYV“MODULECLOCKCLK_GENERATECLK_GENERATE/调用时钟节拍产生模块TIME_MODE0TIME_MODE0/秒、分、时计时与时间调整模块MODE_SELECTMODE_SELECT/调用模式选择功能模块FAST_SETTIMEFAST_SETTIME/调用快速时间设置功能模块ALARM_SETALARM_SET/调用闹铃时间设置模块ALARMALARM/调用闹铃与整点报时模块DECODER_7SEGDECODER_7SEG/调用7段译码模块DISPLAYDISPLAY/调用显示模块ENDMODULE42时钟节拍产生模块由于整个系统只有一个晶体振荡器,但是设计需要不同的时钟信号,因此需要设计一个分频进程,对系的的有源晶振产生的2048MHZ时钟进行分频,产生需要的时钟节拍。在本设计中总共用到如下几个时钟节拍1HZ的时钟CLK,4HZ的时钟CLK_4HZ,1KHZ的时钟信号CLK_1K,和50HZ的时钟DISPLAYCLK。其中CLK节拍用于产生秒计时信号,在每个CLK的上升沿到来时秒计数器加1。CLK_4HZ节拍用于快速调整时间,当长时间按下CHANG按键时,当前设置的时钟快速增加。CLK_1K节拍用于闹铃音的产生,DISPLAYCLK时钟节拍是频率为50HZ的信号,由于本设计中显示部分采用LED动态显示的方式,因此必需要有一个扫描信号对6位的LED的每个位进行轮流选通点亮。分频进程的原理是在CPLD内部设置一个分频计数器和一个触发器,当计数到分频值时触发器进行翻转,因此只要设置不同的分频计数器的计数值就可以得到不同的时钟节拍。在CPLD内部设置分频计数器的缺点是,CPLD的触发器资源有限,设置计数器对资源的占用比较大,因此尽量可能少用一些时钟节拍,或者尽量使需要使用的时钟节拍相同,还有一种方法是利用两个已有的时钟信号进行逻辑运算从面获得想要的时钟节拍。系统的分频进程如下MODULECLK_GENERATERESET,SYSCLK,CLK,CLK_4HZ,CLK_1K,DISPLAYCLKINPUTSYSCLK,RESETOUTPUTCLK,CLK_4HZ,CLK_1K,DISPLAYCLKREGCLK,CLK_4HZ,CLK_1K,DISPLAYCLKREG200DIV_COUNT1/分频时钟计数器,用于产生周期为1S的时钟信号REG190DIV_COUNT2/分频时钟计数器,用于产生频率为4HZ的时钟信号REG110DIV_COUNT3/分频时钟计数器,用于产生频率为1KHZ的时钟信号REG140DIVCLK_CNT/分频时钟计数器,用于产生50HZ的数码管扫描信号DISPLAYCLKALWAYSPOSEDGESYSCLKBEGINIFRESETDIV_COUNT121D0000000IFDIV_COUNT121D1024000/1024000/204800005SBEGINCLK8D54|MIN1|SEC1IFSEC18D54ALARM2CLK_1K/产生长音ELSEALARM2CLK_1K/产生短音ELSEALARM20ENDENDMODULE487段显示译码模块由于时钟计数模式采用的是BCD码计数方式,而显示采用的8段发光二极管,每个段代表一位二进制数,在本系统中采用的是共阳极接法,因此7段码为共阳编码。因此在数码管上正常显示时间的话,必需要对在三个模式下的时、分、秒进行译码才能得到正常的显示。MODULEDECODER_7SEGSYSCLK,CLK,CLK_4HZ,CLK_1K,M,ALARM1,ALARM2,AHOUR,AMIN,MIN1,HOUR1,SEC1,HOUR_MSB,HOUR_LSB,MIN_MSB,MIN_LSB,SEC_MSB,SEC_LSBINPUTSYSCLK,CLK,CLK_4HZ,CLK_1K,ALARM1,ALARM2INPUT70AHOUR,AMIN,MIN1,HOUR1,SEC1INPUT10MOUTPUT70HOUR_MSB,HOUR_LSB,MIN_MSB,MIN_LSB,SEC_MSB,SEC_LSBREG70HOUR,MIN,SEC,HOUR_MSB,HOUR_LSB,MIN_MSB,MIN_LSB,SEC_MSB,SEC_LSBWIRELED_ALARMALWAYSPOSEDGESYSCLKBEGINCASEM3B00/在模式0下,将正常计数值赋值给寄存器,等待译码BEGINHOURHOUR1MINMIN1SECSEC1END3B01/在模式1下,将闹铃时间设置值赋值给寄存器,等待译码BEGINHOURAHOURMINAMINSEC8HZZEND3B10/在模式2下,将手动计数值赋值给寄存器,等待译码BEGINHOURHOUR1MINMIN1SEC8HZZENDENDCASEASSIGNLED_ALARMAHOUR|AMIN10/指示是否进行了闹铃定时ASSIGNALARMALARM1CLK_1K/产生闹铃音或整点报时音ENDALWAYSSYSCLKBEGINCASEHOUR744B0000HOUR_MSB8HC0/数字0的共阳编码赋值给小时的十位4B0001HOUR_MSB8HF9/数字1的共阳编码赋值给小时的十位4B0010HOUR_MSB8HA4/数字2的共阳编码赋值给小时的十位4B0011HOUR_MSB8HB0/数字3的共阳编码赋值给小时的十位4B0100HOUR_MSB8H99/数字4的共阳编码赋值给小时的十位4B0101HOUR_MSB8H92/数字5的共阳编码赋值给小时的十位4B0110HOUR_MSB8H82/数字6的共阳编码赋值给小时的十位4B0111HOUR_MSB8HF8/数字7的共阳编码赋值给小时的十位4B1000HOUR_MSB8H80/数字8的共阳编码赋值给小时的十位4B1001HOUR_MSB8H90/数字9的共阳编码赋值给小时的十位ENDCASECASEHOUR304B0000HOUR_LSB8HC0/数字0的共阳编码赋值给小时的个位4B0001HOUR_LSB8HF9/数字1的共阳编码赋值给小时的个位4B0010HOUR_LSB8HA4/数字2的共阳编码赋值给小时的个位4B0011HOUR_LSB8HB0/数字3的共阳编码赋值给小时的个位4B0100HOUR_LSB8H99/数字4的共阳编码赋值给小时的个位4B0101HOUR_LSB8H92/数字5的共阳编码赋值给小时的个位4B0110HOUR_LSB8H82/数字6的共阳编码赋值给小时的个位4B0111HOUR_LSB8HF8/数字7的共阳编码赋值给小时的个位4B1000HOUR_LSB8H80/数字8的共阳编码赋值给小时的个位4B1001HOUR_LSB8H90/数字9的共阳编码赋值给小时的个位ENDCASE/此段分别将MIN70和SEC70进行译码,编码方式与上述方式一样ENDMODULE49LED显示模块LED显示电路与CPLD的接口电路共有两种接法,一种接法是静态显示法,即外接6个独立的一位LED数码管,在这种接法下每一位LED的段码线共有8根,因此采用这种接法时总共需要68654个I/O口,而采用这种接法时,分配I/O工作烦琐,且电路图接线复杂。而第二种接法称为动态显示法,采用共阳或共阴极接法,而所谓的共阳极接法是指将每位LED的段码线连在一起共同接电源的正极,因此采用这种接法时,一个6位的LED总共只需要8614个I/O口,即8位的段码线和6位的位选线,采用这种方式的接法时,缺点是每次显示时6位LDE同时显示相同的数字,因此在这种接法下,必需要采用扫描的方式来显示,即每一个时刻只能有一个LED处在点亮的状态,其它LED熄灭,此时送出相应位的段码。而在下一时刻则下一位LED处于点亮状态,且在此时送出相应的段码,如此循环往复就能显示完6个不同的数字。因此采用这种接法时必需要有一个扫描信号来选择当前哪一位LED处于点亮状态。MODULEDISPLAYDISPLAYCLK,RESET,LEDSELECT,DATAOUT,HOUR_MSB,HOUR_LSB,MIN_MSB,MIN_LSB,SEC_MSB,SEC_LSBINPUTDISPLAYCLK,RESETINPUT70HOUR_MSB,HOUR_LSB,MIN_MSB,MIN_LSB,SEC_MSB,SEC_LSBOUTPUT50LEDSELECTOUTPUT70DATAOUTREG70DATAOUTREG50LEDSELECTREG20STATEALWAYSPOSEDGEDISPLAYCLKBEGINIFRESET0/复位信号用于波形仿真时对分频计数器初始化BEGINSTATE203B000LEDSELECT6B000000ENDELSEBEGINCASESTATE3B000BEGINLEDSELECT6B011111/数码管的第一位(小时的十位)被点亮DATAOUTHOUR_MSB/显示当前时间的小时十位STATE3B001END3B001BEGINLEDSELECT6B101111/数码管的第二位(小时的个位)被点亮DATAOUTHOUR_LSB/显示当前时间的小时个位STATE3B010END3B010BEGINLEDSELECT6B110111/数码管的第三位(分的十位)被点亮DATAOUTMIN_MSB/显示当前时间的分的十位STATE3B011END3B011BEGINLEDSELECT6B111011/数码管的第四位(分的个位)被点亮DATAOUTMIN_LSB/显示当前时间的分的个位STATE3B100END3B100BEGINLEDSELECT6B111101/数码管的第五位(秒的十位)被点亮DATAOUTSEC_MSB/显示当前时间的秒的十位STATE3B101END3B101BEGINLEDSELECT6B111110/数码管的第六位(秒的个位)被点亮DATAOUTSEC_LSB/显示当前时间的秒的个位STATE3B000ENDENDCASEENDENDENDMODULE5系统功能及功能仿真51系统功能本设计是基于CPLD的多功能数字钟设计。硬件界面为一个6位的LED数码管,时间显示方式为6位同时显示,即显示状态为888888。显示的时间制为24小时制。三个时间设定按键,分别为MODE模式选择键,SET设定键和CHANGE数值修改键。三个按键的功能介绍MODE按键用来选择当前数字钟的工作模式,系统正常工作在模式0下,即模式0为正常时钟模式。当在正常时钟模式下第一次按下MODE键时,系统进入模式1,即闹铃模式,在此模式下可以通过SET和CHANGE按键的配合使用来设定所需要的闹铃时间。当再一次按下MODE按键后系统进入手动校时模式,在此模式下通过SET和CHANGE按键的配合使用,可以改变当前时间。SET按键则用于在不同的模式下选择当前设定的位置,比如当前设定的位置是小时,则再一次按下SET按键后当前设定的位置变为分钟。CHANGE按键用来将当前设定位置的时间值加1,当长时间按下CHANGE按键时,当前设定值为连续快速加1,此功能用于快速设定时间。闹铃的功能是实现当到达预设的时间点时产生为时20S的“嘀嘀嘀嘀”急促短音。整点报时的功能是实现在每个整点的5秒钟前产生整点报时音,报时音为“嘀嘀嘀嘟”4短一长音。系统带四个指示灯电路,一个为电源指示灯,其他三个为工作状态指示灯,即分别为LED_ALARM、LED_HOUR和LED_MIN。LED_ALARM用于指示当前是否设有闹铃,当LED_ALARM指示灯亮时表明当前设有闹铃。LED_HOUR和LED_MIN用于指示当前设定的是时间的小时还是分钟,当LED_HOUR指示灯亮时表明此时设定的是时间的小时值,当LED_MIN指示灯亮时表明此时设定的是时间的分钟值。电源采用5V供电。52功能仿真521时钟节拍产生模块的仿真波形时钟节拍产生模块CLK_GENERATV用于产生整个系统所需要的时钟节拍。在本系统中总共需要4个不同的时钟节拍,分别为CLK,CLK_4HZ,CLK_1K,DISPLAYCLK。CLK是将2048MHZ的系统时钟经过分频后产生的基准时钟,周期为1S的时钟。用于秒计时功能模块。CLK信号波形如图521所示,由图521所示波形可以看出其周期为1S。图521CLK波形图CLK_4HZ时频率为4HZ的时钟信号,用于时间的快速设置。即当长时间按下CHANGE按键后,利用4HZ的CLK_4HZ信号产生NUM1,NUM2,NUM3,NUM4信号对当前设定值连续快速加1。CLK_4HZ的仿真波形图如图522所示。由仿真波形图可以看出该时钟周期为4HZ。图522CLK_4HZ波形图CLK_1K时钟为频率1KHZ的时钟信号,用于闹铃音频信号的产生,CLK_1K信号如图523所示,由图中的波形可以看出两个波形占用的周期为2MS,即一个周期为1MS,频率为1KHZ。图523CLK_1K的仿真波形由于本设计的显示电路采用动态显示方式。因此要正常显示每一位就必需要采用扫描的方式来显示,即每一个时刻只能有一个LED处在点亮的状态,其它LED熄灭,此时送出相应位的段码。而在下一时刻则下一位LED处于点亮状态,且在此时送出相应的段码,如此循环往复就能显示完6个不同的数字。因此采用这种接法时必需要有一个扫描信号来选择当前哪一位LED处于点亮状态。DISPLAYCLK是周期为50HZ的时钟信号。它用于显示模块中,即在每个DISPLAYCLK时钟的上升沿时将进过译码后的时钟寄存器的值赋值给相应的位。DISPLAYCLK波形图如图524所示。由波形图可以看出DISPLAYCLK的周期是50HZ。图524DISPLAYCLK波形图522模式选择功能模块的仿真波形MODE按键用来选择当前数字钟的工作模式,系统正常工作在模式0下,即模式0为正常时钟模式。当在正常时钟模式下第一次按下MODE键时,系统进入模式1,即闹铃模式,在此模式下可以通过SET和CHANGE按键的配合使用来设定所需要的闹铃时间。当再一次按下MODE按键后系统进入手动校时模式,在此模式下通过SET和CHANGE按键的配合使用,可以改变当前时间。LED_MIN和LED_HOUR是指示灯,如果当前设定的是小时值时LED_HOUR指示灯亮,如果当前设定的是分钟值时LED_MIN指示灯亮。COUNT1和COUNTA是在模式0下时的按键寄存器,用于存储CHANGE按键的值。COUNT1用于存放分钟数值,COUNTA用于存放小时值。图525模式选择功能波形图图526模式选择功能波形图图527模式选择功能波形图523闹铃设置功能模块的仿真波形闹铃设置信号采用CT2和CTB信号进行相加,在每个CT2信号的上升沿对AMIN进行加1,同样在每个CTB信号的上升沿对AHOUR进行加1。AMIN,AHOUR分别是在闹铃的分钟数寄存器和小时数寄存器。由图528闹铃设置功能仿真波形图(1)可以看出在每个信号上升沿对时间寄存器加1。由图529闹铃设置功能仿真波形图(2)可以看出闹铃的小时时间计数格式是24小时制的。图528闹铃设置功能仿真波形图(1)图529闹铃设置功能仿真波形图(2)5247段译码功能模块的仿真波形由于时钟计数模式采用的是BCD码计数方式,而显示采用的8段发光二极管,每个段代表一位二进制数,在本系统中采用的是共阳极接法,因此7段码为共阳编码。因此在数码管上正常显示时间的话,必需要对在三个模式下的时、分、秒进行译码才能得到正常的显示。图5210是在模式0下7段译码输出结果。M是模式选择寄存器,HOUR1,MIN1和SEC1是在模式0下的时钟寄存器,HOUR,MIN,SEC是等待译码寄存器,也就是在每个时钟上升沿时将时间寄存器的值赋值给译码寄存器,等待进行译码。HOUR_MSB,HOUR_LSB,MIN_MSB,MIN_LSB,SEC_MSB,SEC_LSB是译码后的输出结果。图5210在模式0下7段译码输出结果图5210所示为在模式0下7段译码的输出结果,根据图可以看出在模式0下时,在每个SYSCLK时钟上升沿的到来时将时间寄存器(HOUR1,MIN1和SEC1)的值赋予译码寄存器(HOUR,MIN,SEC),而在下一个SYSCLK的上升沿的到来时将译码寄存器的值进行译码输出。根据仿真波形图可以看出设计是正确的。图5211所示为在模式1下7段译码的输出结果,AMIN和AHOUR是闹铃寄存器的数据值。根据图可以看出在模式1下时,在每个SYSCLK时钟上升沿的到来时将闹铃寄存器(AHOUR,AMIN)的值赋予译码寄存器(HOUR,MIN,SEC的值不考虑),而在下一个SYSCLK的上升沿的到来时将译码寄存器的值进行译码输出。根据仿真波形图可以看出设计是正确的。图5211在模式1下7段译码输出结果525LED显示功能模块的仿真波形本次设计的显示电路采用6位LED的共阳极接法,因此采用这种接法时必需要有一个扫描信号来选择当前哪一位LED处于点亮状态,即每一个时刻只能有一个LED处在点亮的状态,其它LED熄灭,此时送出相应位的段码。而在下一时刻则下一位LED处于点亮状态,且在此时送出相应的段码,如此循环往复就能显示完6个不同的数字。LED显示功能模块VERILOGHDL编写的思想是采用一个状态机的方式进行对扫描信号的轮流赋值,扫描信号是LEDSELECT,共六位输出,每位接LED的位选端,因此当LEDSELECT的输出为全为0是6位LED全处于点亮状态,此时送出段码后6位LED均显示相同的数字(段码是均一样)。因此要正常显示只能有一个时刻有一位输出为0。显示的思想是当LEDSELECT的最高位为0时将HOUR_MSB(小时的十位的段码)输出,当LEDSELECT的次高位为0时则输出HOUR_LSB(小时的个位的段码),当LEDSELECT的第三位为0时将MIN_MSB(分的十位的段码)输出,如此不断循环,扫描的频率为50HZ。图5212LED显示功能模块的仿真波形(1),由图可以看出,在每个DISPLAY时钟(50HZ)的上升沿的到来时,令LEDSELECT的输出第六位为0,此时LED的第六位(小时的十位)处于亮的状态,延时一段

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论