数字钟课程设计为什么秒钟计到59分钟就进1了

数字钟的设计与制作
我的图书馆
数字钟的设计与制作
数字钟的设计与制作
上传者:&&浏览次数:5994
  一、设计目的
  1. 熟悉集成电路的引脚安排。
  2. 掌握各芯片的逻辑功能及使用方法。
  3. 了解面包板结构及其接线方法。
  4. 了解数字钟的组成及工作原理。
  5. 熟悉数字钟的设计与制作。
  二、设计要求
  1.设计指标
  Ø 时间以24小时为一个周期;
  Ø 显示时、分、秒;
  Ø 有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;
  Ø 计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;
  Ø 为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。
  2.设计要求
  Ø 画出电路原理图(或仿真电路图);
  Ø 元器件及参数选择;
  Ø 电路仿真与调试;
  Ø PCB文件生成与打印输出。
  3.制作要求 自行装配和调试,并能发现问题和解决问题。
  4.编写设计报告 写出设计与制作的全过程,附上有关资料和图纸,有心得体会。
  三、设计原理及其框图
  1.数字钟的构成
  数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。图 3-1所示为数字钟的一般构成框图。
  ⑴晶体振荡器电路
  晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
  ⑵分频器电路
  分频器电路将32768Hz的高频方波信号经32768()次分频后得到1Hz的方波信号供秒计数器进行计数。分频器实际上也就是计数器。
  ⑶时间计数器电路
  时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为12进制计数器。
  ⑷译码驱动电路
  译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。
  ⑸数码管
  数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管。
  2.数字钟的工作原理
  1)晶体振荡器电路
  晶体振荡器是构成数字式时钟的核心,它保证了时钟的走时准确及稳定。
  图3-2所示电路通过CMOS非门构成的输出为方波的数字式晶体振荡电路,这个电路中,CMOS非门U1与晶体、电容和电阻构成晶体振荡器电路,U2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波。输出反馈电 阻R1为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一个高增益的反相放大器。电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能。由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。
  晶体XTAL的频率选为32768HZ。该元件专为数字钟电路而设计,其频率较低,有利于减少分频器级数。
  从有关手册中,可查得C1、C2均为30pF。当要求频率准确度和稳定度更高时,还可接入校正电容并采取温度补偿措施。
  由于CMOS电路的输入阻抗极高,因此反馈电阻R1可选为10MΩ。较高的反馈电阻有利于提高振荡频率的稳定性。
  非门电路可选74HC00。
  2)分频器电路
  通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频。
  通常实现分频器的电路是计数器电路,一般采用多级2进制计数器来实现。例如,将32768Hz的振荡信号分频为1HZ的分频倍数为),即实现该分频功能的计数器相当于15极2进制计数器。常用的2进制计数器有74HC393等。
  本实验中采用CD4060来构成分频电路。CD4060在数字集成电路中可实现的分频次数最高,而且CD4060还包含振荡电路所需的非门,使用更为方便。
  CD4060计数为14级2进制计数器,可以将32768HZ的信号分频为2HZ,其内部框图如图3-3所示,从图中可以看出,CD4060的时钟输入端两个串接的非门,因此可以直接实现振荡和分频的功能。
  3)时间计数单元
  时间计数单元有时计数、分计数和秒计数等几个部分。
  时计数单元一般为12进制计数器计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码。
  一般采用10进制计数器74HC390来实现时间计数单元的计数功能。为减少器件使用数量,可选74HC390,其内部逻辑框图如图 2.3所示。该器件为双2—5-10异步计数器,并且每一计数器均提供一个异步清零端(高电平有效)。
  秒个位计数单元为10进制计数器,无需进制转换,只需将QA与CPB(下降沿有效)相连即可。CPA(下降没效)与1HZ秒输入信号相连,Q3可作为向上的进位信号与十位计数单元的CPA相连。
  秒十位计数单元为6进制计数器,需要进制转换。将10进制计数器转换为6进制计数器的电路连接方法如图3-5所示,其中Q2可作为向上的进位信号与分个位的计数单元的CPA相连。
  分个位和分十位计数单元电路结构分别与秒个位和秒十位计数单元完全相同,只不过分个位计数单元的Q3作为向上的进位信号应与分十位计数单元的CPA相连,分十位计数单元的Q2作为向上的进位信号应与时个位计数单元的CPA相连。
  时个位计数单元电路结构仍与秒或个位计数单元相同,但是要求,整个时计数单元应为12进制计数器,不是10的整数倍,因此需将个位和十位计数单元合并为一个整体才能进行12进制转换。利用1片74HC390实现12进制计数功能的电路如图3-6所示。
  另外,图3-6所示电路中,尚余-2进制计数单元,正好可作为分频器2HZ输出信号转化为1HZ信号之用。
  4)译码驱动及显示单元
  计数器实现了对时间的累计以8421BCD码形式输出,选用显示译码电路将计数器的输出数码转换为数码显示器件所需要的输出逻辑和一定的电流,选用CD4511作为显示译码电路,选用LED数码管作为显示单元电路。
  5)校时电源电路
  当重新接通电源或走时出现误差时都需要对时间进行校正。通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可。
  根据要求,数字钟应具有分校正和时校正功能,因此,应截断分个位和时个位的直接计数通路,并采用正常计时信号与校正信号可以随时切换的电路接入其中。图3-7所示即为带有基本RS触发器的校时电路,
  6)整点报时电路
  一般时钟都应具备整点报时电路功能,即在时间出现整点前数秒内,数字钟会自动报时,以示提醒。其作用方式是发出连续的或有节奏的音频声波,较复杂的也可以是实时语音提示。
  根据要求,电路应在整点前10秒钟内开始整点报时,即当时间在59分50秒到59分59秒期间时,报时电路报时控制信号。报时电路选74HC30,选蜂鸣器为电声器件。
  四、元器件
  1.实验中所需的器材
  Ø 5V电源。
  Ø 面包板1块。
  Ø 示波器。
  Ø 万用表。
  Ø 镊子1把。
  Ø 剪刀1把。
  Ø 网络线2米/人。
  Ø 共阴八段数码管6个。
  Ø CD4511集成块6块。
  Ø CD4060集成块1块。
  Ø 74HC390集成块3块。
  Ø 74HC51集成块1块。
  Ø 74HC00集成块5块。
  Ø 74HC30集成块1块。
  Ø 10MΩ电阻5个。
  Ø 500Ω电阻14个。
  Ø 30p电容2个。
  Ø 32.768k时钟晶体1个。
  Ø 蜂鸣器。
  五、个功能块电路图
  1. 一个CD4511和一个LED数码管连接成一个CD4511驱动电路,数码管可从0---9显示,以次来检查数码管的好坏,见附图5-1。
  图5-1 4511驱动电路
  2. 利用一个LED数码管,一块CD4511,一块74HC390,一块74HC00连接成一个十进制计数器,电路在晶振的作用下数码管从0—9显示,见附图5-2。
  图5-2 74390十进制计数器
  3. 利用一个LED数码管,一块CD4511,一块74HC390,一块74HC00和一个晶振连接成一个六进制计数器,数码管从0—6显示,见附图5-3。
  图5-3 74390六进制计数器
  4. 利用一个六进制电路和一个十进制连接成一个六十进制电路,电路可从0—59显示,见附图5-4。
  图5-4 六十进制电路
  5. 利用两个六十进制的电路合成一个双六十进制电路,两个六十进制之间有进位,见附图5-5。
  图5-5 双六十进制电路
  6. 利用CD4060、电阻及晶振连接成一个分频——晶振电路,见附图5-6。
  图5-6 分频—晶振电路
  7. 利用74HC51D和74HC00及电阻连接成一个校时电路,见附图5-7。
  图5-7 校时电路
  8. 利用74HC30和蜂鸣器连接成整点报时电路。见附图5-8。
  图5-8 整点报时电路
  9. 利用两个六十进制和一个十二进制连接成一个时、分、秒都会进位的电路总图,见附图5-9。
  图5-9 时、分、秒的进位连接图
  六、总接线元件布局简图,见附图6-1
  七、芯片连接图见附图7-1
  八、总结
  1. 设计过程中遇到的问题及其解决方法。
  1) 在检测面包板状况的过程中,出现本该相通的地方却未通的状况,后经检验发现是由于万用表笔尖未与面包板内部垂直接触所至。
  2) 在检测CD4511驱动电路的过程中发现数码管不能正常显示的状况,经检验发现主要是由于接触不良的问题,其中包括线的接触不良和芯片的接触不良,在实验过程中,数码管有几段二极管时隐时现,有时会消失。用5V电源对数码管进行检测,一端接地,另一端接触每一段二极管,发现二极管能正常显示的,再用万用表欧姆档检测每一根线是否接触良好,在检测过程中发现有几根线有时能接通,有时不能接通,把接触不好的线重新接过后发现能正常显示了。其次是由于芯片接触不良的问题,用万用表欧姆档检测有几个引脚本该相通的地方却未通,而检测的导线状况良好,其解决方法为把CD4511的芯片拔出,根据面包板孔的的状况重新调整其引脚,使其正对于孔,再用力均匀地将芯片插入面包板中,此后发现能正常显示,本次实验中还发现一块坏的LED数码管和两块坏的CD4511,经更换后均能正常显示。
  3) 在连接晶振的过程中,晶振无法起振。在排除线与芯片的接触不良问题后重新对照电路图,发现是由于12脚未接地所至。
  4) 在连接六进制的过程中,发现电路只能4、5的跳动,后经发现是由于接到与非门的引脚接错一根所至,经纠正后能正常显示。
  5) 在连接校正电路的过程中,出现时和分都能正常校正时,但秒却受到影响,特别时一较分钟的时候秒乱跳,而不校时的时候,秒从40跳到59,然后又跳回40,分和秒之间无进位,电路在时、分、秒进位过程中能正常显示,故可排除芯片和连线的接触不良的问题。经检查,校正电路的连线没有错误,后用万用表的直流电压档带电检测秒十位的QA、QB、QC和QD脚,发现QA脚时有电压时而无电压,再检测秒到分和分到时的进位端,发现是由于秒到分的进位未拔掉所至。
  6) 在制作报时电路的过程中,发现蜂鸣器在57分59秒的时候就开始报时,后经检测电路发现是由于把74HC30芯片当16引脚的芯片来接,以至接线都错位,重新接线后能正常报时。
  7) 连接分频电路时,把时个位的QD和时十位的1脚断开,然后时十位的1脚接到晶振的3脚,时十位的3脚接到秒个位的1脚,所连接的电路图无法正常工作,时十位从0-9的跳,时个位只能显示一个0,在这个电路中3脚的分频用到两次,故无法正常显示,因此要把12进制接到74HC390的一个逻辑电路空出来用于分频即可,因此把时十位的CD脚接地,7脚改为接74HC390的5脚,74HC390的3、4脚断开,然后4脚接9脚即可,其中空出的74HC390的3脚就可用于2Hz的分频,分频后变为1Hz,整个电路也到此为正常的数字钟计数。
  2.设计体会
  在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。
  在连接六进制、十进制、六十进制的进位及十二进制的接法中,要求熟悉逻辑电路及其芯片各引脚的功能,那么在电路出错时便能准确地找出错误所在并及时纠正了。
  在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的,例如仿真的连接示意图中,往往没有接高电平的16脚或14脚以及接低电平的7脚或8脚,因此在实际的电路连接中往往容易遗漏。又例如74HC390芯片,其本身就是一个十进制计数器,在仿真电路中必须连接反馈线才能正常显示,而在实际电路中无需再连接,因此仿真图和电路连接图还是有一定区别的。
  在设计电路的连接图中出错的主要原因都是接线和芯片的接触不良以及接线的错误所引起的。
  3.对该设计的建议
  此次的数字钟设计重在于仿真和接线,虽然能把电路图接出来,并能正常显示,但对于电路本身的原理并不是十分熟悉。总的来说,通过这次的设计实验更进一步地增强了实验的动手能力。
TA的最新馆藏[转]&[转]&
喜欢该文的人也喜欢您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
数字逻辑电路课程设计__数字钟1..doc 12页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
数字逻辑电路课程设计__数字钟1.
你可能关注的文档:
··········
··········
数字逻辑课程设计
班级:计102
数字钟是由振荡器、分频器、计秒电路、计分电路、计时电路组成。计时有24h和12h两种。当接通电源或数字钟走时出现误差,都需要对数字钟作手动时分秒时间校正。
一。任务与要求
设计任务:设计一个具有整点报时功能的数字钟
1、设计一个有“时”、“分”、“秒”(11小时59分59秒)显示且有校时功能的数字钟。
2、有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间。 3、计时过程具有整点报时功能,当时间到达整点前10秒进行报时。 4、用中小规模集成电路组成数字钟,并在实验箱上进行组装、调试。
5、画出框图和逻辑电路图。
1、计时功能:
要求准确计时,以数字形式显示时、分、秒的时间。小时的计时要求为“12翻1”。
2、校时功能:
当数字钟接通电源或者计时出现误差时,需要校正时间(简称校时)。校时是数字钟应具备的基本功能,一般电子手表都具有时、分、秒等校时功能。为使电路简单,这里只进行分和小时的校时。对校时电路的要求是:在小时校正时不影响分和秒的正常计数;在分校正时不影响秒和小时的正常计数。校时方式有“快校时”和“慢校时”两种。“快校时”是通过开关控制,使计数器对1Hz的校时脉冲计数 。“慢校时”是用手动产生单脉冲作校时脉冲。
3、仿广播电台整点报时:
每当数字钟计时快要到整点时发出声响;通常按照4低音1高音的顺序发出间断声响;以最后一声高音结束的时刻为整点时刻。 二、设计方案
电路组成框图:
图1 数字钟电路组成框图
数字钟电路是一个典型的数字电路系统,其由时、分、秒计数器以及校时和显示电路组成。其主要功能为计时、校时和报时。利用60进制和12进制递增计数器子电路构成数字钟系统,由2个60进制同步递增计数器完成秒、分计数,由12进制同步递增计数器完成小时计数。秒、分、时之间采用同步级联的方式。开关S1和S2分别是控制分和时的校时。报时功能在此简化为小灯的闪烁,分别在59分51秒、53秒、55秒、57秒及59秒时闪烁,持续的时间为1秒。
三、设计和实现过程
各元件功能
74LS160:可预置BCD异步清除器,具有清零与置数功能的十进制递增计数器。
74LS00:二输入端四与非门
74LS04:六反相器
74LS08:二输入端四与门
74LS20:四输入端双与非门
各部分电路的设计过程
(1)时分秒计数器的设计
时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为12进制计数器。
秒/分钟显示电路 :由于秒钟与分钟的都是为60进制的,所以它们的电路大体上是一样的,都是由一个10进制计数器和一个6进制计数器组成;有所不同的是分钟显示电路中的10进制计数器的ENP和ENT引脚是由秒钟显示电路的进位信号控制的。
分和秒计数器都是模M=60的计数器,其计数规律为00—01—…—58—59—00… 。可选两片74LS160设计较为简单。
时计数器是一个“12翻1”的特殊进制计数器,即当数字钟运行到12时59分59秒时,秒的个位计数器再输入一个秒脉冲时,数字钟应自动显示为01时00分00秒,实现日常生活中习惯用的计时规律。可选两片74LS160设计。
60进制同步递增计数器
图3 12进制同步递增计数器
(2) 校时电路的设计
S1为校“分”用的控制开关,S2为校“时”用的控制开关。校时脉冲采用1Hz脉冲,当S1或S2分别为“0”时可进行校时 。
分校时开关S1 分计数脉冲CP1
0 校时脉冲
1 秒进位脉冲
时校时开关S2 时计数脉冲CP2
0 校时脉冲
1 分进位脉冲
图 快校时电路
图4 校时电路
当重新接通电源或走时出现误差时都需要对时间进行校正。通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常
正在加载中,请稍后...论文发表、论文指导
周一至周五
9:00&22:00
基于FPGA的多功能数字钟设计
  摘 要:利用现代电子设计方法设计了一种基于FPGA的多功能数字钟,采用硬件描述语言VHDL进行分频、计数、扫描和整点报时等模块的设计,通过在quartusII9.0软件中编译、仿真,先进行软件模拟系统各运行状态,最后下载到FPGA实验开发平台进行硬件调试,调试结果表明:系统能够完成设计目的的需求,达到了预期的效果。 中国论文网 /2/view-6819039.htm  关键词:FPGA;多功能电子钟;硬件描述语言VHDL   0 引言   时间一直是人们在日常生活中非常关心的一个物理参数,在很多场合人们对时间有越来越高的进度要求。数字钟是一种用数字逻辑电路技术来自动实现时、分、秒、计时的的一种装置,与传统机械时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。FPGA是一种可编程使用的信号处理器件,又称为现场可编程门阵列(Field Programmable Gate Arrays,FPGA),用户对它的功能定义是通过改变配置信息来实现的。与传统数字逻辑电路相比,FPGA具有可编程、高集成度、高可靠性和高速等优点。本设计是在QuartusII的环境下,应用VHDL语言结合可编程逻辑器件进行的,最后通过仿真出时序图实现预定功能,硬件调试最终的结果是在数码管上显示的。   1 系统设计原理   数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。多功能数字钟具有的基本功能是时间时、分、秒的显示和整点报时;特殊的功能有任意时间的设置、定时和任意时间设定的提醒等功能。其工作原理为:振荡器产生稳定精确的高频脉冲信号,作为数字钟的时间基准脉冲,经过分频器分频后产生标准的秒脉冲,这里采用50MHZ的高精度时钟源。秒和分的计数器军事采用60进制计数器来实现:秒计数器满60后也即是从0计数到59后向分计数器进位1,同样分计数器从0计数到59后向小时计数器进位1。小时计数器采用24进制计数,按照“24翻1”规律计数,也即是从0计数到23。所有的计数器都是计数满后清零,再重新重新计数。计数器的输出分别经译码电路送到数码管上来显示。   结合现有的FPGA实验开发系统,在设计中为了显示的方便,小时的十位用一个两位的二进制码表示,个位用一个四位二进制码表示;而分和秒的十位都用三位的二进制码表示,个位用四位的二进制码表示。设计中把时、分、秒的二进制形式译码成七位,以便在数码上显示相应的数字。另外,由于八个七段数码码管采用分时扫描的方式显示,而扫描确需要一个比较高频率的信号,直接接初始的系统时钟源。然后对输入的系统时钟进行分频来得到准确的1Hz标准计数脉冲信号,必须对。用户可以根据系统的硬件结构和自身的具体要求来设计,整点报时功能。本系统的要求是在进行整点的倒计时5秒时,让5个LED全亮,然后一次灭掉来进行整点报时的提示。   2 单元模块设计   (1)分频模块   本系统各模块所需的时钟信号与系统时钟信号不同,这就需要对已有的信号进行分频。系统时钟clk1为1MHz,通过对clk1上升沿计数进行翻转分频,得到所需的1Hz的时钟信号clk。分频模块仿真波形如图1所示。输入端clk1的一个周期为1us,分频后输出端clk的一个周期为2ms,符合设计需求。   (2)计数模块设计   因为数字钟的标准计数脉冲的频率是1Hz,这样每来一个时钟脉冲信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同样当分钟从59分跳转到00分时,小时增加1小时。秒时钟基本结构包括加法器,2选1多路选择器,比较器,触发器和各种逻辑单元构成。计数模块仿真波形如图2所示。   (3)扫描模块设计   时、分、秒数据显示采用七段数码管。七段码管采用动态扫描的方式,为了观看的方便,扫描模块直接采用系统时钟1MHz。在较高频率时钟驱动下,通过分时动态地选择不同的数码管来分别显示时、分、秒,这样观测的结果是几位数码管同时显示对应的时间。扫描模块主要由加法器,2选1多路选择器,触发器和各种逻辑单元构成。扫描模块仿真波形如图3所示。   (4)整点报时模块设计   当进行整点的倒计时5秒时,用LED闪烁来进行整点报时的提示,报时时间为5秒,即从整点前5秒钟开始进行报时提示,LED开始闪烁,过整点后,停止闪烁。整点报时模块主要由加法器,2选1多路选择器,触发器和各种逻辑单元构成。整点报时模块的仿真波形图如图4所示,仿真结果满足设计的要求。   3 硬件调试   (1)硬件调试步骤   编译仿真无误后,依照开发系统的说明进行管脚分配。分配完成后,再进行全编译一次,以使管脚分配生效。用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。将数字信号源模块的时钟选择为1MHz,数码管开始显示时间,从00-00-00 开始。在整点的前5秒的时候,发光管模块的D1-D4开始闪烁。一旦超过整点,发光管停止显示。按动按键开关的S1、S2小时和分钟开始步进,进行时间的调整。按下按键开关的S8,显示恢复到00-00-00重新开始显示时间。整个调试过程中,记录结果,和设计目的相比较,如不符合,对前面的设计进行修改,直到达到设计要求。   (2)测试结果显示   当进行5点的倒计时5秒时,D1-D4来回闪烁进行整点报时的提示。56秒时有3个LED灯亮,59秒时有4个LED灯亮。图5给出4时59分56秒时显示结果,LED显示倒计时结果。   4 小结   该系统采用VHDL和原理图相结合的设计输入方式,在QuartusII开发环境下完成设计、编译和仿真,并在FPGA实验开发系统上进行测试。测试结果表明,数码管能够正确显示计时时间,能够通过按键调整时间,整点报时等功能,测试结果符合设计要求。   参考文献:   [1]刘君.基于硬件描述语言(VHDL)的数字时钟设计[J].天津:理工大学学报,2009,第23卷第4期,40-41.   [2] 廖日坤.CPLD/FPGA嵌入式应用开发技术白金手册[M].北京:中国电力出版社,8.   [3] 杨晓慧,杨旭.FPGA系统设计与实例[M]. 北京:人民邮电出版社,2010.   [4] 周淑阁.FPGA/CPLD系统设计与应用开发[M].北京:电子工业出版社,2011.   [5] 张文爱.EDA技术与FPGA应用设计[M].北京:电子工业出版社,2012.
转载请注明来源。原文地址:
【xzbu】郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。
xzbu发布此信息目的在于传播更多信息,与本网站立场无关。xzbu不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
Second模块实现秒计数为六十进制计数模式,当计数达到59后如再来一个时钟脉冲则进位即分钟加一,秒位清零即为00。
Minute模块实现分计数也为六十进制计数模式,当计数达到59时再来一个脉冲则进位即时钟加一,分位清零即为00。
Hour模块实现时计数为二十四进制计数模式,当计数达到23时再来一个脉冲则进位即天数加一,时位清零,00。
DAY模块实现7进制计数模式,当计数达到6时再来一个脉冲则进位一星期,星期复位00.
模块仿真为:
模块进行仿真为:
模块进行仿真:
字符译码模块仿真:
四、AHDL源程序:
1: Alert.tdf&
SUBDESIGN&& alert&
&& CKSP,DAIN[7..0]&&& : INPUT;
&& SPEAK,LAMP[3..0]&&&&&& : OUTPUT;
&& s:&&&&&& DFF;
&& ss:&&&& MACHINE OF BITS (lamp[3..0])
&&&&&&& WITH STATES(
&&&&&&&&&&&&& s0=B"0000",
&&&&&&& &&&&&&s1=B"0001",
&&&&&&&&&&&&&&&&&&& & s2=B"0010",
&&&&&&&&&&&&&&&&&&& & s3=B"0100",
&&&&&& & s4=B"1000"&&&&&& );
IF dain[7..0]==B"" THEN
&& & &&SS.clk=
&&&&& s.clk=
&&&&& s.d=!s.q;
&&&&& speak=s.q;
&&&&& CASE ss IS
&&&&&&& WHEN s0 =&& ss=s1;
&&&&&&&&&&&&& WHEN s1 =&& ss=s2;&&&&& & &&&&&&&&&&&&&&&&&&&&&&&& WHEN s2 =&& ss=s3;
&&&&&&&&&&&&& WHEN s3 =&& ss=s4;
&&&&&&&&&&&&& WHEN s4 =&& ss=s1;
&&&&&&&&&&&&& WHEN OTHERS =&ss=s0;
&&&&&& & END CASE;
&&&&&& SS=S0;
&&&&&& SPEAK=GND;
2: Second.tdf 60
SUBDESIGN&& Second&
&&&&&& CLK,RESET&& &&&&&&& : INPUT;
&&&&&& A[3..0],B[3..0],CKMIN : OUTPUT;
&&&&&& count1[3..0]&&&&&&&&&&&&&&&&& : DFF;
&&& count2[3..0]&&&&&&&&&&&&&&&&& : DFF;
&&&&&& SS&& :DFF;
&&&&&& count1[].clk =
&&&&&& count1[].clrn = RESET;
&&&&&& count2[].clk =
&&&&&& count2[].clrn = RESET;
&&&&&& SS.CLK = CLK;
&&&&&& SS.CLRN = RESET;
&&&&&& SS = B"0";
&&&&&& IF & COUNT1[]==B"1001" AND
COUNT2[]==B"0101" &THEN
&&&&&&&&&&&&& SS=B"1";
&&&&&& END IF;
&&&&&& IF count1[]==B"1001" THEN&
&&&&&& count1[] =B"0000";
&&&&&& && count1[].d = count1[].q + 1;
&&& END IF;&&&
&&&&&&&&&&&&&&&&&&&&
&&& IF count1[]==B"1001" THEN
&&&&&& & IF & count2[]==B"0101" THEN
&&&&&&& &&&&&& count2[] =B"0000";
&&&&&&&&&&&&& ELSE
&&&&&&&&&&&&& &&& count2[].d = count2[].q + 1;
&&&&&&& END
&&&&&& && count2[].d = count2[].q;&&&&&&&&
a[3..0] = count1[];
&&&&&& b[3..0] = count2[];
&&&&&& CKMIN = SS;&&
3: Minute.tdf
SUBDESIGN &Minute&
&&&&&& CKMIN,RESET,SETMIN& : INPUT;
&&&&&& A[3..0],B[3..0],CKHOUR& : OUTPUT;
&&&&&& count1[3..0]&&&&&&&&&&&&&&&&& : DFF;
&&& count2[3..0]&&&&&&&&&&&&&&&&& : DFF;
&&&&&& count3&&&&&&&&&&&&&&&&&&&&&&&&& : DFF;
&&&&&& count1[].clk = CKMIN OR !SETMIN;
&&&&&& count1[].clrn = RESET;
&&&&&& count2[].clk = CKMIN OR !SETMIN;
&&&&&& count2[].clrn = RESET;
&&&&&& count3.clk = CKMIN OR !SETMIN;
&&&&&& count3.clrn = RESET;
&&&&&& count3=B"0";
&&&&&& IF & COUNT1[]==B"1001" AND
COUNT2[]==B"0101" &THEN
&&&&&&&&&&&&& COUNT3=B"1";
&&&&&& END IF;
&&& IF & count1[]==B"1001" then &
&&&&&&& count1[] =B"0000";
&&&&&&&&&&&&& count1[].d = count1[].q + 1;
&&& END IF;&&&&&&&
&&&&&& IF & count1[]==B"1001" then
&&&&&&& IF & count2[]==B"0101" THEN
&&&&&&&&&& & count2[] =B"0000";
&&&&&&&&&&&&& ELSE
&&&&&&&&&&&&& & &&& count2[].d = count2[].q + 1;
&&&&&&& END
&&&&&& &&&&& count2[].d = count2[].q;&&&&&&&&
&&& END IF;
&&&&&& a[3..0] = count1[];
&&&&&& b[3..0] = count2[];
& &&& CKHOUR = count3;
4: Hour.tdf 24
SUBDESIGN& Hour
&&&&&& CKHOUR,RESET,SETHOUR : INPUT;
&&&&&& A[3..0],B[1..0],ckday: OUTPUT;
&&&&&& count1[3..0]&&& : DFF;
&&& count2[1..0]&&& : DFF;
&&& count3&&&&&&&& : DFF;
&&&&&& count1[].clk = CKHOUR OR !SETHOUR;
&&&&&& count1[].clrn = RESET;
&&&&&& count2[].clk = CKHOUR OR !SETHOUR;
&&&&&& count2[].clrn = RESET;
&&&&&& COUNT3.CLK=CKhour OR!SET
&&& COUNT3.CLRN=RESET;
&&& COUNT3=B"0";
IF count2[]&B"10" THEN
&&&&&&&&&&&&& IF& count1[]==B"1001" THEN
&&&&&&&&&&& count1[] =B"0000";
&&&&&&&&&&&&&&&&&&&& count2[].d =count2[].q+1;
&&&&&&& ELSE
&&&&&&&&&&&&& &&& count1[].d = count1[].q + 1;
&&&&&&&&&&&&&&&&&&&& count2[].d = count2[].q;
&&&&&&&&&&
&&&&& END IF;&&
&& IF&&&&&& COUNT2[]==B"10" and
&&&&&&& &&&&&& count1[]==B"0011" THEN
&&&&&&&&&&&&&&&&&&&& count1[] =B"0000";
&&&&&&&&&&&&&&&&&&&& count2[] =B"00";
&&&&&&&&&&& Count3=B"1";
&&&&&& ELSE
&&&&&&&&&&&&& &&& count1[].d = count1[].q + 1;
&&&&&&&&&&&&& &&& count2[].d =count2[].q; &&&&&& &&&&&
&&&&&&&&&&&
&&&&&&&& END&& IF;&
&&&&&& END&& IF;
&&& a[3..0] = count1[];
&&&&&& b[1..0] = count2[];
&&& ckday=count3;
5:DAY.tdf 7:
SUBDESIGN& Hour
&&&&&& CKHOUR,RESET,SETHOUR : INPUT;
&&&&&& A[3..0],B[1..0],ckday: OUTPUT;
&&&&&& count1[3..0]&&& : DFF;
&&& count2[1..0]&&& : DFF;
&&& count3&&&&&&&& : DFF;
&&&&&& count1[].clk = CKHOUR OR !SETHOUR;
&&&&&& count1[].clrn = RESET;
&&&&&& count2[].clk = CKHOUR OR !SETHOUR;
&&&&&& count2[].clrn = RESET;
&&&&&& COUNT3.CLK=CKhour OR!SET
&&& COUNT3.CLRN=RESET;
&&& COUNT3=B"0";
IF count2[]&B"10" THEN
&&&&&&&&&&&&& IF& count1[]==B"1001" THEN
&&&&&&&&&&& count1[] =B"0000";
&&&&&&&&&&&&&&&&&&&& count2[].d =count2[].q+1;
&&&&&&& ELSE
&&&&&&&&&&&&& &&& count1[].d = count1[].q + 1;
&&&&&&&&&&&&&&&&&&&& count2[].d = count2[].q;
&&&&&&&&&&
&&&&& END IF;&&
&& IF&&&&&& COUNT2[]==B"10" and
&&&&&&& &&&&&& count1[]==B"0011" THEN
&&&&&&&&&&&&&&&&&&&& count1[] =B"0000";
&&&&&&&&&&&&&&&&&&&& count2[] =B"00";
&&&&&&&&&&& Count3=B"1";
&&&&&& ELSE
&&&&&&&&&&&&& &&& count1[].d = count1[].q + 1;
&&&&&&&&&&&&& &&& count2[].d =count2[].q; &&&&&& &&&&&
&&&&&&&&&&&
&&&&&&&& END&& IF;&
&&&&&& END&& IF;
&&& a[3..0] = count1[];
&&&&&& b[1..0] = count2[];
&&& ckday=count3;
6Sel_clock.tdf
SUBDESIGN& SEL_clock&&
&&&&&& A[3..0],B[3..0],C[3..0] : INPUT;
&&& D[3..0],E[3..0],F[1..0] : INPUT;
&&&&&& CKDSP,G[3..0],H[3..0] : INPUT;
&&&&&& OUT[3..0],SEL[2..0] :OUTPUT;
&&&&&& COUNT[2..0] : DFF;
&&&&&& count[].clk = CKDSP;
&&&&&& IF & COUNT[] == B"111" THEN
&&&&&&&&&&&&& COUNT[]= B"000";
&&&&&& ELSE
&&&&&&&&&&&&& count[].d = count[].q + 1;
&&&&&& END IF;
&& & IF COUNT[]==B"000" then
&&&&&&&&&&&&&&&&&&&& out[3..0]= A[3..0];
&& & ELSIF COUNT[]==B"001" then
&&&&&&&&&&&&&&&&&&&& out[3..0]= B[3..0];
&&&&&& ELSIF COUNT[]==B"010" then
&&&&&&&&&&&&&&&&&&&& out[3..0]= G[3..0];
&&&&&& ELSIF COUNT[]==B"011" then
&&&&&&&&&&&&&&&&&&&& out[3..0]= C[3..0];
&&&&&& ELSIF COUNT[]==B"100" then
&&&&&&&&&&&&&&&&&&&& out[3..0]= D[3..0];
&&& ELSIF COUNT[]==B"101" then
&&&&&&&&&&& out[3..0]= H[3..0];
&&& ELSIF COUNT[]==B"110" then
&&&&&&&&&&& out[3..0]= E[3..0];
&&&&&& ELSIF COUNT[]==B"111" then
&&&&&&&&&&&&&&&&&&&& out[1..0]= F[1..0];
&&&&&&&&&&&&&&&&&&&& out[3..2]= B"00";
&&&&&& SEL[2..0]=COUNT[];
7deled& %%
subdesign deled
num[3..0]:
a,b,c,d,e,f,g:
&&&&&& num[3..0]=&a,b,c,d,e,f,g;
&&&&&& h"0" =&1,1,1,1,1,1,0;
&&&&&& h"1" =&0,1,1,0,0,0,0;
&&&&&& h"2" =&1,1,0,1,1,0,1;
&&&&&& h"3" =&1,1,1,1,0,0,1;
&&&&&& h"4" =&0,1,1,0,0,1,1;
&&&&&& h"5" =&1,0,1,1,0,1,1;
&&&&&& h"6" =&1,0,1,1,1,1,1;
&&&&&& h"7" =&1,1,1,0,0,0,0;
&&&&&& h"8" =&1,1,1,1,1,1,1;
&&&&&& h"9" =&1,1,1,1,0,1,1;
&&&&&& h"a" =&1,1,1,0,1,1,1;
&&&&&& h"b" =&0,0,1,1,1,1,1;
&&&&&& h"c" =&1,0,0,1,1,1,0;
&&&&&& h"d" =&0,1,1,1,1,0,1;
&&&&&& h"e" =&1,0,0,1,1,1,1;
&&&&&& h"f" =&0,0,0,0,0,0,1;
五、&& 调试过程
1、&&&&&&&&&& 秒计时器(second1)(Endtime为1us)
在秒计时器的clk输入一个周期为5ns的时钟信号;清0端(reset)前面一小段(100ns)为低电平,后面均为高电平;置数端(set)前面一小段(200ns)为低电平,后面均为高电平;秒重置端(s1)可设置数值为50秒,保存波形图,进行仿真. 由波形可以清楚的看到:当清0信号(reset)无效时,秒计时器置数,从50秒开始计数,到59秒时回到0,并且从ensec输出一个高电平。
2、&&&&&&&&&& 分计时器(minute1)(Endtime为100us)
在分计时器的clkm输入一个周期为5ns的时钟信号;清0端(reset)前面一小段(100ns)为低电平,后面均为高电平;置数端(set)前面一小段(200ns)为低电平,后面均为高电平;分重置端(m1)可设置数值为50分,保存波形图,进行仿真,产生如下波形:
由上述波形可以清楚的看到:当清0信号(reset)无效时,分计时器置数,从50分开始计数,到59秒时回到0,并且从enmin输出一个高电平。
3、&&&&&&&&&& 时计时器(hour1)(Endtime为100us)
在时计时器的clkh输入一个周期为5ns的时钟信号;清0端(reset)前面一小段(100ns)为低电平,后面均为高电平;置数端(set)前面一小段(200ns)为低电平,后面均为高电平;时重置端(h1)可设置数值为20时,保存波形图,进行仿真,产生如下波形: 由上述波形可以清楚的看到:当清0信号(reset)无效时,时计时器置数,从20时开始计数,到23时回到0,并且从enhour输出一个高电平。
&4、&&&&&&&&&& 星期计时器(day1)(Endtime为1us)
在星期计时器的clkd输入一个周期为5ns的时钟信号;清0端(reset)前面一小段(100ns)为低电平,后面均为高电平;置数端(set)前面一小段(200ns)为低电平,后面均为高电平;星期重置端(d1)可设置数值为4(星期四),保存波形图,进行仿真,产生如下波形: 上述波形可以清楚的看到:当清0信号(reset)无效时,星期计时器置数,从星期四开始计数,到星期六时回到0。
五、一点体会:
&EDA,,:575859236Endtime100us1ns
阅读(652)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_084068',
blogTitle:'电子课程设计之数字钟(含AHDL源程序)',
blogAbstract:'\r\n
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 数字钟实验报告 的文章

 

随机推荐