基于FPGA的数字时钟(毕业论文)

上传人:1666****666 文档编号:38922299 上传时间:2021-11-09 格式:DOC 页数:49 大小:938KB
收藏 版权申诉 举报 下载
基于FPGA的数字时钟(毕业论文)_第1页
第1页 / 共49页
基于FPGA的数字时钟(毕业论文)_第2页
第2页 / 共49页
基于FPGA的数字时钟(毕业论文)_第3页
第3页 / 共49页
资源描述:

《基于FPGA的数字时钟(毕业论文)》由会员分享,可在线阅读,更多相关《基于FPGA的数字时钟(毕业论文)(49页珍藏版)》请在装配图网上搜索。

1、毕 业 论 文(设计) 题 目: 基于FPGA的数字时钟设计 目 录摘 要IAbstractII1 绪 论11.1研究问题背景和现状11.2研究目的及意义11.3设计内容及目标21.3.1研究内容21.3.2研究目标22 系统设计方案32.1控制方案的选择32.2时钟电路的选择32.3校时控制电路的选择32.4显示电路的选择43 系统电路总体设计53.1系统设计总体框图53.2电源供电电路设计53.2.1外围电路电源设计53.2.2芯片电源电路设计63.2.3电源滤波电路63.3 FPGA芯片及其引脚73.4 JTAG下载配置电路设计83.5 时钟信号电路设计93.6 复位电路93.7 键盘电

2、路设计103.8人机显示电路103.9 整点报时电路设计114 FPGA内部程序设计124.1 分频器的程序设计124.2 秒计数器程序设计134.3 分计数器程序设计154.4 小时计数器程序设计164.5 日计数器程序设计164.6 月计数器程序设计174.7 年计数器程序设计184.8 键盘控制程序设计194.9 LCD1602程序设计204.10 顶层文件设置及编译下载215 总 结225.1 结论225.2 设计中遇到的问题22参考文献23致 谢24附录:25附录1 最小系统及配置电路图25附录2 系统外围电路图26附录3 系统设计程序27附录4 顶层原理图及引脚设置43基于FPGA

3、的数字时钟设计摘 要利用FPGA器件设计数字电路,不仅可以将时钟的硬件电路和设计流程简化,而且可以减小本设计系统的前期成本与模块体积,提高了系统的稳定性,缩短设计周期。FPGA不仅可以实现简单的74系列的电路逻辑设计,而且可以作为具有高性能的CPU,来控制总系统运行。本设计采用EP1K10TC100-1芯片作为控制CPU,整个系统采用VHDL语言,50MHZ的晶振产生时钟脉冲,用VHDL语言设计分频器获得秒信号及其他时钟信号,经过计数器分别对年、月、日、时、分、秒的控制逻辑累加形成计数模块,并通过独立键盘对计数模块进行调整以达到调时间的目的,系统通过1602液晶显示输出。系统利用Quartus

4、 II软件进行程序软件的编译、仿真、引脚设置、总线接口及配置、下载来完成整个设计。关键词:数字时钟;FPGA;VHDL语言Design of Digital Clock Based on FPGAAbstractUsing FPGA component to design digital circuit not only may simplify the clock hardware circuit and the design process, moreover may reduce this design systems cost and the volume to enhance sys

5、tems reliability. FPGA can not only achieve the 74 series circuit logic, and can be used as high-performance CPU to control the total system operation.ThisdesignusestheEP1K10TC100-1chiptocontrolCPU.TheoverallsystemusestheVHDLlanguage.The50MHZcrystaloscillatorproducestheclockpulse.TheVHDLlanguageobta

6、insasecondsignalandotherclocksignal.Designfrequencydividerpassesthroughthecounterseparatelytotheyear,themonth,Japan,divides,thesecondcontrollogicaccumulationtoformthecountingmodule,andmakestheadjustmentthroughtheindependentkeyboardtothecountingmoduletoachievethegoalofadjustingthetime,andthesystemdis

7、playoutputthrough1602liquidcrystal.Thesystemcarriesontheproceduresoftwarestranslation,thesimulation,thepinestablishment,thebusinterfaceandthedisposition,downloadingusingtheQuartusIIsoftwaretocompletetheentiredesign. Keywords:digital clock; FPGA; VHDL languageII青岛农业大学机电工程学院本科毕业设计(论文)1 绪 论1.1研究问题背景和现状

8、随着生活节奏的加快,我的生活、工作、学习都离不开时间这个概念。从开始机械式的钟表,到现在数字式时钟,时钟的发展并没有停下脚步。数字时钟的发展是伴随着数字电路的发展,传统的数字时钟主要由多个的数字集成电路(触发器和计数器)组成,开始只用作科研或者军事用途,改革开放之后,民用数字时钟才开始发展,广泛用于机场、汽车、火车站、医院等公共场合,主要是通过发光二级管作为数字时钟的显示器。由于需要的集成器件较多,当时的数字时钟的体积较大,而且逻辑性较差。后来可编程逻辑器件的出现简化了数字时钟的外围电路,降低了成本。随着LCD液晶显示器的出现,数字时钟的显示在部分场合取代了以往的数码管显示。传统的数字时钟发展

9、这么多年,在部分场合依然应用,可见其有自己独特的地方。不需要软件控制,基本固定的电路原理图,技术含量要求较低,对于很多生产厂家来说,方便投产。但是,在比较精密的场合,不考虑成本的情况下,在功耗、稳定性上要求提高。由于传统数字时钟器件较多,电路功耗就会提高,芯片容易发热,导致整个电路的寿命降低。1.2研究目的及意义随着产品设计研发成本越来越高,设计周期要求越来越快,电子工程师不得不选择更加方便、快捷、高性能、低功耗的芯片来满足市场的需求,FPGA器件以绝对的优势脱颖而出。近年来绿色、环保、低功耗越来越得到大家的认可,然而应科技而生的电子垃圾、高功耗、低效率成了环保新病。因此如何通过降低功率损耗来

10、减少电源系统的元件和电路板的面积,提高系统的可靠性,延长器件的寿命成为现在电子研发的首要考虑问题。可见,对用FPGA芯片系统的研究意义深远。FPGA进入到第三个阶段:向传统的ASIC领域大刀阔斧地进军,最新工艺铲平了FPGA和ASIC之间的鸿沟。1用FPGA设计数字时钟,利用其超大规模的集成逻辑电路,可以减少外围电路的元器件,从而减小整个系统的体积,很大的节约成本;FPGA芯片功耗低,减少了热量的产生,降低温结,提高了系统的可靠性,而且延长器件的使用寿,对系统有着非常大的促进作用。程序利用VHDL语言设计,VHDL支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现

11、,具有描述能力强、生命周期长、支持大规模的分解和已有设计的再利用的特点。2采用了“自顶向下”(Top-Down)的全新设计方法,是设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短了产品的研制周期31.3设计内容及目标1.3.1研究内容(1)硬件电路方案和总体设计(2)利用Quartus II完成系统分频、计数、按键控制、液晶显示的内部逻辑1.3.2研究目标(1)掌握并利用Protel DXP搭建所需要的硬件电路。(2)在Quartus II软件上用Vhdl语言编写相关应用程序。(3)利用FPGA芯片完成数字

12、时钟。2 系统设计方案2.1控制方案的选择方案一:整个系统采用数字集成电路控制。采用555电路产生1HZ时钟脉冲,秒信号送给计数器,经过多级计数,然后将数据送给译码电路,最后通过数码管显示时间。由于本设计需显示年、月、日、时、分、秒,因此需要的计数器、译码器、数码管会比较多,从而会增加设计难度,系统的体积也会增大,稳定性变差,功耗较大。方案二:采用FPGA芯片作为控制芯片,用VHDL语言编程实现内部逻辑;将必要电路电路、下载电路、控制电路、显示电路、晶振等集成放在一块板子上,完成时间显示。集成器件大大的减少,硬件电路得到简化,从而减少了干扰,提高了稳定性,减小了功率损耗,延长了系统的寿命。比较

13、以上方案,选择方案二。2.2时钟电路的选择方案一:采用555电路产生1HZ的秒信号作为时钟信号。但是由于FPGA芯片属于高速芯片,而且用555产生的秒信号不稳定,还会引起功耗增加的问题,所以不选此电路,但可作为备用时钟电路考虑。方案二:采用有源晶振产生高频率高质量的时钟脉冲,用VHDL语言设计分频电路,得到需要的秒信号时钟。有源晶振是无源晶振和逻辑电路的组合体,能够稳定的产生需要的时钟脉冲,而且可以通过VHDL语言进行分频,获得所需的时钟脉冲。综上所述,由于系统软件部分需要高精度的多个时钟脉冲,因此选择方案二。2.3校时控制电路的选择方案一:采用独立键盘接口方式,每个按键都过上拉电阻接到一个I

14、/O口,每个按键就会独自占用一条I/O数据线,控制方便,编程简单,但是I/O的利用率会降低,因此适用于按键较少,简化程序的系统中。方案二:采用矩阵键盘的接口方式,如4*4矩阵键盘,仅需要8个I/O口,提高了I/O口的利用率,适用于按键较多、I/O不足的系统中,但是编程比较复杂,逻辑性较强。本设计仅需要7个按键,且由于FPGA芯片I/O较多,很多处于闲置状态,因此选择方案一。2.4显示电路的选择方案一:采用LED数码管显示时间。数码管方便,编程简单,数字显示较大,显示效果好,而且价格便宜。但是显示内容少,多字符显示时会增加数码管的数量,而且外围硬件电路较为繁琐复杂,增加了系统的体积和系统的功耗。

15、方案二:采用1602液晶显示时间。显示两行32位字符,用户方便读写,内部CGRAM中已有较多字符,方便取用,外围电路简单,适用于显示内容较少,且对图像汉字没有太大要求的系统中。方案三:采用12864液晶显示时间。屏幕较大,可以显示多行,显示各种字符、汉字、图像等,用户很方便读写,外围电路也很简单,占用I/O口较少,节约系统资源。适用于显示内容较多的场合。本设计只需显示两行就可以,而且对汉字、图像没有要求,在充分考虑成本和系统资源的情况下,选择方案一。3 系统电路总体设计3.1系统设计总体框图系统硬件主要为满足FPGA芯片工作的最小系统及其外围电路组成。FPGA芯片选用EP1K10TC100-1

16、,最小系统包括晶振电路、下载电路、电源电路、复位电路组成;外围电路主要包括按键控制、液晶显示电路和电源指示电路等等基于人机界面设计的电路整个系统工作总体框图如下:FPGA电源模块分频模块时钟脉冲计数模块校时模块译码显示模块键盘模块LCD显示下载电路图3-1系统工作总体框图3.2电源供电电路设计3.2.1外围电路电源设计由于系统采用LCD1602液晶显示,通常使用5V直流电源作为工作电压,因此需要设计一个将市电转换到5V的降压整流电路。先将220V交流电经过变压器降压9V,然后整流,LM7805内部是三端稳压电源电路,可以将8V到25V的电源稳压到5V直流电源,最后经过电容多级滤波平滑输出波形。

17、主体电路图如下:图3-25V直流电源设计3.2.2芯片电源电路设计FPGA芯片所需电压主要有核心电压和I/O口电压,另外还有辅助电压作为部分外围电路的控制电压。EP1K10TC100-1的核心电压为DC1.5V,I/O口电压为DC3.3V。考虑FLSH芯片擦写电流较大,5V转3.3V采用AMS 1085-3.3稳压芯片,然后用AMS 1085-1.5将3.3V稳压到1.5V的核心电压,由于1085系列芯片输出电流在10mA到3A区间范围内,可以满足电流要求。在5V输入侧加上稳压二极管增加电源系统的稳定性,芯片电源电路图如下:图3-3EP1K10TC100-1最小系统电源及电源接口电路3.2.3

18、电源滤波电路为保证FPGA芯片能够正常工作,供电电源电压不允许有波动,尤其是核心电压。稳定的电源电压才能保证FPGA正常启动并能正常运行,因此需要在电源电路中加入滤波电路,以保证芯片有着稳定的输入电压,提高系统的稳定性,滤波电路图如下:图3-4电源滤波电路图主要针对FPGA芯片的3.3V和1.5V电源与地之间做了滤波的处理,相对于布线紧密的PCB来说,减小了线与线之间的信号干扰,提高了稳定性。3.3 FPGA芯片及其引脚图3-5EP1K10TC100-1芯片及引脚系统采用EP1K10TC100-1作为核心控制芯片,芯片为贴片式的,有100个引脚。核心电源采用1.5V直流电源,I/O口电源采用3

19、.3V电源。芯片及引脚图如图3-5。3.4 JTAG下载配置电路设计JTAG是一种标准的国际测试协议,本系统的下载线路主要用于对FLSH存储器件EPCS1的在线编程,可以用于对FPGA的内部测试。在FPGA芯片上有四个关于JTAG下载电路的功能引脚,TMS、TDI、TDO、TCK分别为测试时钟输入、测试数据输入、测试数据输出、测试模式选择接口。电路图如下:图3-6下载配置电路模块FLSH电路的设置是将FLSH的地址线、数据线和控制线与FPGA的数据线、地址线和控制线相连接,将FPGA设置在EXTEST模式下,利用电脑的并口,将程序写入FLSH,并在烧写完程序后进行校验测试。为防止其他信号的干扰

20、,电脑与JTAG下载线的尽量短,尽量少于15cm。此部分加入了下载指示灯LED1可以监控下载状态,当指示灯亮时表明正在进行信息传输,文件进行下载。还设置了RE按键,可以在不断电的情况下重新对FPGA进行配置。3.5 时钟信号电路设计由于FPGA属于高速芯片,因此对输入时钟的频率及其稳定性都有较高的要求。本系统采用50MHZ的有源晶振作为时钟的产生电路,不需要内部处理器的振荡器,信号稳定。有源晶振有4只引脚,有点的为1脚,逆时针依次为2、3、4脚,引脚接法如图3-7。1脚悬空,2脚接地,3脚输出,4脚接3.3V电压。有源晶振不能直接接电源,需要做好电源的滤波,保证产生信号的质量,接法如下图使用一

21、个电容和电感构成PI型滤波网络。在输出端用一个47的电阻来过滤信号。图3-7系统时钟信号电路555电路作为系统的备用秒信号产生脉冲电路,当有源晶振电路出现故障,手动切换之备用电路。Ttw1tw2,tw10.7(R13R14)C5,tw20.7R13C5,系统中选取R13为62K,R14为20K,获得的周期为1.008S的秒信号。3.6 复位电路系统采用简单地高电平进行复位,将电源通过电容与电阻串联后接地,RESET松开时,CLK为低电平,系统正常工作;RESET按下后电源直接通过电阻接地,CLK端为高电平,系统复位。复位电路图如下:图3-8复位电路设计3.7 键盘电路设计在人机交互界面中,键盘

22、模块作为输入模块作用重要。对于系统的时钟的复位,年、月、日、时、分、秒的校时控制就是通过键盘来实现的。由于FPGA的I/O口较多,而且控制按键又不很多,本系统采用独立键盘的作为输入控制电路,如图3-9所示。STW0到STW6分别接到芯片选好的I/O接口上。每按下一次STW0,时钟的分个位加1,满10进1,依次STW1、STW2、STW3、STW4分别为时、日、月、年的控制按键,STW5为秒信号的复位按键,每按下一次,秒复位为0,STW6为LCD1602液晶复位按键。图3-9独立键盘的设计电路3.8人机显示电路系统设计要显示年、月、日、时、分、秒,不需要其他的内容显示,因此选用LCD1602作为

23、显示模块,可以显示实时时间,还可以看到现在正在更改设定的时间,使操作人性化。LCD1602带有基本的数字、24个英文字母的大小写及其部分字符,能够满足设计要求,显示两行,每行显示16个字符,设计第一行显示内容为“ 2012y6m10d ZHAO”,第二行显示内容为“ 17:30:00 FPGA ”,共32个字符。引脚接线图如图3-10所示。LCD1602有16个引脚,1、2分别为电源地、电源,3引脚为对比度调节,电路中接入10K的电位器,来调节对比度。15、16分别为背光电源地、背光电源正极。6引脚为使能端,4引脚为数据/命令选择端,5引脚为读/写选择端。7到14为双向数据口,本设计采用并口工

24、作方式对LCD1602进行读写控制。电源采用5V直流电源,功耗较低。图3-10LCD1602外围设计电路3.9 整点报时电路设计系统采用有源蜂鸣器作为整点报时器件,整点时分,TOUT置为高电平,蜂鸣器发出“嘀-”的声音,经过延时30S后,TOUT置为低电平,蜂鸣器关闭。为减小芯片负载输出,利用5V电源通过三极管驱动蜂鸣器报时。设计电路图如下:图3-11整点报时电路设计4 FPGA内部程序设计本设计采用顶层文件设计方法,设计顺序为自下而上的,利用顶层文件将各个子模块系统联系起来,方便随时调用。首先设计各个子模块,然后根据子模块的输入输出,设计出顶层文件,利用顶层文件将连接各个子模块,是各个模块组

25、成一个整体,完成软件设计。EDA最大的优势就是能将所有设计环节纳入统一的自顶向下的设计方案中。44.1 分频器的程序设计系统时钟采用50MHZ时钟脉冲信号,经过25000000分频,然后取反,输出clk1HZ,得到秒信号;同理经过50000分频,取反,得到clk500HZ的信号。秒信号用来产生秒的时钟计数脉冲,作为计数器的初始脉冲,500HZ信号用作键盘控制模块的按键消抖和LCD显示模块的时钟信号。51HZ分频器的程序设计流程图如下:Ncount=0clk1hz=not clk1hzcount=count+1输入50MHZ脉冲count=0clk1hz=0count=24999999输出clk

26、1hz1HZ分频结束Y分频开始图4-11HZ时钟信号设计流程图500HZ分频器程序框图和1HZ原理相同,只是将判断语句换成count=49999。利用Quartus II软件进行对程序进行编译,编译成功后生成原理图,以方便在顶层文件中取用。软件成功编译显示示例图如下:图4-2程序编译成功分频器有一个输入,两个输出,原理图如下:图4-3分频器原理图原理图绘制成功后对分频器进行功能仿真,clk50MHZ输入50MHZ的时钟信号,由于需要观察秒信号,需设置end time为2s,观察2个周期的秒信号,测试仿真结果,根据程序设计观察时序结果,功能仿真如图4-4、4-5所示。根据仿真结果可以看出,高电平

27、结束为一个周期的结束,clk1HZ的周期刚好为1s,clk500HZ的周期为2ms。图4-41HZ功能仿真结果图4-5500HZ功能仿真结果4.2 秒计数器程序设计由分频器得到的秒信号送给秒时钟计数器,输出分进位信号和秒显示的BCD码信号,秒计数器原理图如下:图4-6秒计数器原理图原理图中,clk1HZ为分频器输出的1HZ的时钟脉冲;secset为键盘SWT5按下的秒复位输入信号,高电平有效;min_set为键盘SWT0按下时的分个位加一输入信号。enmin为分钟进位信号,作为下一级的分计数器的输入信号;sout6.0的高3位为秒信号的十位输出信号,低4位为秒信号个位输出信号。秒信号计数器主要

28、是将输入秒信号分别作10进制和6进制计数。程序设计框图如下:秒计数开始输入1HZ脉冲secset,min_setcount=”0000000”secset=1count3.0=”1001”count=count+1sout6.0=count6.0count6.4=”101”count=count+7enmin=1;输出sout6.0计数结束NYYNNYmin_set=1YN图4-7秒计数器程序设计流程图由设计程序流程图可知,当secset=1时,sout6.0=”0000000”,秒显示“00”;当count3.0=”1001”计数器向十位进1,否则count=count+1;当count6.

29、4=”101”时,count清零,minset=1,发出分时钟信号,否则count=count+7,即十位进1。秒计数器功能仿真波形如图4-8所示。由于需要观察60s后向分进位时序波形,设置end time为100s,输入clk1HZ为1s时钟信号,假设secset和min_set均为0的情况下,测试仿真情况。由仿真波形可知,60s时,enmin置1,维持1s后再回到低电平;当59s时,sout6.0=”1011001”,将高3位与低4位分别转换成对应的秒信号的十位与个位的十进制为刚好是59。图4-8秒计数器功能仿真波形4.3 分计数器程序设计由于分钟也是60进制,因此本设计的分钟计数器同秒计

30、数器的原理相同,只是将输入和输出稍作修改,原理图如下:图4-9分计数器原理图enmin为秒信号产生的分钟进位脉冲,周期为1min;clk1HZ为秒信号脉冲,用作信号脉冲调制;hour_set为键盘的SWT1,即小时的输入控制信号;enhour为小时进位脉冲输出;minout6.0为分钟显示的二进制数,同sout6.0相同,高3位为十位,低4位为个位;spk为整点报时信号,当计数器向时计数器进位时说明整点,给spk高电平,蜂鸣器响。程序设计流程图参考秒计数器程序设计流程图,仿真波形图如下:图4-10分计数器仿真波形由于Quartus II软件仿真最大时间为s,设定enmin周期1s时钟脉冲,来假

31、定分钟信号enmin=1min,clk1HZ依次为0.1s,设置end time为100s。60s时,enhour=1,表示产生小时信号,观察59s时的minout6.0波形,minout6.0=1011001,正好为59.4.4 小时计数器程序设计小时计数器的设计主要是利用十六进制的高二位与低四位设计的,设计原理同秒计数器。Enhour为时进位时钟信号;clk1HZ为1HZ的时钟脉冲,day_set为键盘控制日进位设置,每来一个脉冲enday加1则向日计数器输入一个进位脉冲,表示日加一;hout5.0控制时显示的BCD码。设计原理图如下:图4-20时计数器原理图4.5 日计数器程序设计日计数

32、器总体思路与秒计数器一致。但是考虑到一年中的不同月份的的天数长短不一样,而且闰年与平年的二月份的天数又不相同,因此日计数器需要由年、月来共同决定日的长短。通过sel2.0对日的长短时间控制,如表4-1所示。Sel0为年的输出控制量,0表示闰年,1表示平年;sel1为月的输出控制量,0表示1、2、3、5、7、8、10、12月份(每月有31天),1表示其他月份,包括二月和其他30的月份;sel2月的输出控制中的二月,1表示2月,0为其他月份。表4-1日长短逻辑控制表日年 sel0月 sel1二月 sel200031100010301102900128101011111日计数器模块原理图如图4-21

33、所示,生成day例化元件,方便在顶层文件中取用,用以整体原理图的设计。输入取自上一层的例化元件,输出给下一级的例化元件。图4-21日计数器原理图程序设计需要首先利用sel2.0对日长短的设置,然后设计原理同其他计数器,高2位控制日的十位,低四位控制日的个位。原理图中sel0来自年计数模块输入,sel2.1由月计数模块输入。4.6 月计数器程序设计由于阳历的月份固定,每年只有12个月,月计数器设计比较简单,即为12进制的计数器,程序设计原理图如图4-22所示。但是需要用月来设置日的长短,因此在程序中加入另一个进程,用case语句来判断月份的具体值,以此来给sel赋值,然后输出sel的值来作为日长

34、短的设置信号。图4-22月计数器程序原理图其仿真波形图如图4-23所示,mout高一位控制月的十位,即0和1,低四位控制个位,0到9;sel2和sel1为设置日输出信号。从仿真波形可以看出,输出时序逻辑正确,但是出现了竞争冒险现象,经分析sel1的尖峰脉冲不会影响程序运行,因此可以忽略不考虑。图4-23月计数器仿真波形4.7 年计数器程序设计年计数器的范围从2000到2099,前面的20都没有变化,因此只要设计出00到99的计数器就可实现年的计数器的设计。由于闰年时二月天数需要其控制,因此需要选出其中的闰年,输出信号给日计数器。闰年表见表4-2,通过表可以发现以下规律:当十位是偶数,转化成BC

35、D码为XXX0,且个位是0、4、8,转化成BCD码为XX00,或者十位是基数,转化成BCD码为XXX1,且个位是2、6,转化成BCD码为XX10时,当年是闰年,否则是平年。表4-2闰年表00040812162024283236404448525660646872768084889296设计原理图如图如图4-24所示,sel为闰年输出脉冲,用以设置日计数器的长短。图4-24年计数器原理图4.8 键盘控制程序设计本设计对I/O口的要求不是很高,而且FPGA芯片有丰富的I/O接口,因此采用独立键盘设计,简化设计程序。键盘需要随时扫描,因此用50MHZ脉冲作为键盘的扫描信号,用500HZ的脉冲做按键消

36、抖处理,key6.0为键盘按下的输入信号,keyout6.0为键盘输出信号,分别送给年、月、日、时、分、秒计数器。设计原理图如下:图4-25键盘设计原理图键盘扫描程序设计流程框图如图4-26所示,由于按下键盘和松开键盘时会出现抖动现象,为避免系统程序动作错误,出现误动作,需要进行按键消抖处理。消抖采用500hz的信号,如果经过消抖后仍然有按键信号,别表示键盘按下,将键盘信号给出赋值。根据键盘结构的不同,采用不同的编码方法,但无论有无编码以及采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。6Keyout=key输入50MHZ脉冲输入500HZ脉冲采集按键信号key按键消抖

37、有键按下输出keyout键扫结束Y键扫开始N图4-26键盘扫描程序流程图4.9 LCD1602程序设计本设计采用LCD1602作为显示部分,其引脚定义如下表:表4-31602引脚功能表引脚号引脚名电平输入/输出作用1Vss电源地2Vcc电源(+5V)3Vee对比调整电压4RS0/1输入0=输入指令1=输入数据5R/W0/1输入0=向LCD写指令或数据1=从LCD读取信息6E1,10输入使能信号,1时读取信息,10(下降沿)执行命令7DB00/1输入/输出数据总线Line0(最低位)8DB10/1输入/输出数据总线Line19DB20/1输入/输出数据总线Line210DB30/1输入/输出数据

38、总线Line311DB40/1输入/输出数据总线Line412DB50/1输入/输出数据总线Line513DB60/1输入/输出数据总线Line614DB70/1输入/输出数据总线Line715A+VccLCD背光电源正极16K接地LCD背光电源负极首先将各个计数器产生的BCD码数值转换成ASCII码,然后将显示数值放入1602中去。设计一个子程序,进行码制转换,得到需要的ASCII码。当RW=0,RS=0时,向1602输入指令,包括清屏指令、光标移位指令、进入模式设置指令、显示开关设置指令、功能设置指令、CGRAM指令、DDRAM指令等等,控制1602工作状态;当RW=0,RS=1时,向16

39、02输入数据,输出显示内容。先假定输入固定时钟,测试仿真结果,以观察时序逻辑。程序原理图如图4-27所示,程序中编译1602用用的是500hz的时钟脉冲,sin1,minin1,hin1,din1,monin1,yin1分别为要显示时间的BCD码,rs、rw、en为1602的控制信号端,lcd_data为1602的数据输入端。图4-271602程序原理图4.10 顶层文件设置及编译下载演示顶层文件采用原理图编译的方法,将所有的模块加载到顶层文件中来,生成.bsf文件。然后新建原理图top文件,生成.bdf文件,将所有模块的原理图放到top文件中来,连接后生成顶层文件,进行引脚设置。然后进行编译

40、一遍,生成.sof文件,选用JTAG的下载方式,进行在线编译调试,顶层原理图及引脚设置见附录4。采用JTAG下载方式,只能在线编译,程序下载后,时钟显示全部为0,通过键盘对时间进行调时,显示正常时间,实物显示如图4-28.图4-28 数字时钟显示5 总 结5.1 结论本文以FPGA的数字时钟为选题依据,通过VHDL语言编程,利用Qurartus II设计软件完成仿真测试。设计分别由分频模块,年、月、日、时、分、秒计数器,键盘控制模块,译码器,LCD1602液晶模块五部分组成。利用Qurartus II设计软件自顶向下依次完成各个模块的设计及其仿真,最后利用顶层文件将各个模块连接起来,逐步实现数

41、字时钟的设计、综合、仿真,最终实现数字时钟整个系统的设计,能够用1602正常显示所要内容,通过键盘正常调时、计数。5.2 设计中遇到的问题(1)在设计分频器过程中,在程序设计成功的前提下,进行功能仿真,设置输入脉冲后没有仿真结果,经过查阅资料及老师的讲解,合理设置end time的时间及其周期,完成了仿真测试。(2)月计数器设计中,由于输入的时钟脉冲存在“竞争”现象,在仿真结果的分析的时候,出现了尖峰脉冲。经过分析,月计数器的时间较长,而很短时间的尖峰脉冲不会影响设计输出。(3)在日计数器的设计中,由于不同月份及闰年中二月的天数不同,因此,需要充分分析逻辑设计,是年、月的输出控制设置日的长短。

42、(4)在设计LCD1602模块中,功能仿真波形正常出现,然而硬件电路没有响应,因此先用数码管进行程序逻辑演示,以得到准确的时钟脉冲。经过LCD1602的时序调试,在时钟脉冲准确的情况下显示内容正确。参考文献1王莹. FPGA是金融海啸的一颗救命草J.电子产品世界,20092万春迎.基于VHDL的数字时钟设计A.科技信息,2008(27):723刘竹林,李晶骅.用VHDL实现数字时钟的设计A.山西电子技术,2008(1):47-544潘松,黄继业.EDA技术实用教程M.北京:科学出版社,2006:10-115李雪梅.基于FPGA的分频器设计研究A.教育科研,2008(4)6王紫婷,吴蓉 ,张彩珍

43、.EDA技术与应用M.兰州:兰州大学出版社,20036 (英)渥伦斯基.Digital System Design with VHDL,Second Edition.M工业出版社,20047郑友泉.现场可编程门阵列第一讲现场可编程门阵列FPGA概述J.世界电子元器件,20058崔葛.基于FPGA的数字电路系统设计D.西安:西安电子科技大学出版社,20089刘韬,楼兴华.FPGA数字电子系统设计与开发实例导航M.北京:人民邮电出版社,200510 (英)Jone Wulenskl .VHDL Digtal System DesignM.电子工业出版社,2004 11乐怡.数字电路与数字电子技术M

44、.西安:西北工业大学出版社,200312黄任.VHDL入门解惑经典实例经验总结M.北京:北京航天航空大学出版社,200513樊国梁.VHDL语言设计数字电路J.国外电子测量技术,2005(2)14刘丽华.专用集成电路设计方法M.北京:北京邮电大学出版社,2000致 谢经过这一学期的学习和努力,我的毕业论文基于FPGA的数字时钟设计终于完成了。这是对我四年大学学习一个总结,是四年来对专业知识、理论实践、动手能力的的完美的结合与升级。在论文设计阶段,我的理论学习和设计经验都有很大提升,这与各位老师、同学以及通过网络给我意见的网友的关心和支持是分不开的。在这里感谢我的指导老师赵艳华老师的悉心指导,从

45、开始选题到最后的设计完成都有老师的指导身影。在设计开始初期,赵老师为我的设计指明了方向及思路,让我在很短的时间就能理清设计整体框架及思路;设计过程中,遇到的各种问题,赵老师总能提出可行性的意见和建议,较多的专业性的问题,都是在赵老师的指导下解决的,使我的专业知识得到进一步的提升;在论文格式修改过程中,赵老师不厌其烦的帮我检查论文格式,以达到论文格式的要求。在赵老师的指导和关怀下,我的专业知识有了很大进步,学会了解决问题的方法,为以后的工作和学习有很大的帮助,再次向赵老师表示我的谢意。感谢四年来所有教导我的老师,是你们让我的大学学习生活过的丰富多彩。感谢学院及学校的领导,为我提供了良好的学习环境

46、。感谢大学同学,以及在我遇到困难的时候,向我提供解决方法及思路的各位网友。是你们呢让我的学习和设计变得丰富。附录:附录1 最小系统及配置电路图附录2 系统外围电路图附录3 系统设计程序分频器设计程序:library ieee;use ieee.std_logic_1164.all;use IEEE.STD_LOGIC_ARITH.ALL;use ieee.std_logic_unsigned.all;entity fenpin isport(clk50MHZ:in std_logic;-50MHZ clk1HZ:out std_logic;-1HZ clK500HZ:out std_logic

47、);-500HZend;architecture art of fenpin issignal a1:std_logic;signal a2:std_logic;beginclk1HZ=a1;clK500HZ=a2;process(clk50MHZ)variable n1:integer range 0 to 24999999;beginif rising_edge(clk50MHZ) thenif n124999999 then n1:=n1+1;else n1:=0;a1=not a1;end if;end if;end process;process(clk50MHZ)variable

48、n2:integer range 0 to 49999;beginif rising_edge(clk50MHZ) thenif n249999 then n2:=n2+1;else n2:=0;a2=not a2;end if;end if;end process;end ;秒计数器设计程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sec isport(clk1HZ,secset,min_set:in std_logic;-clk is 1HZ,reset is the s

49、ignal of the second reset,-min_set is min+1 enmin:out std_logic;-分时钟信号脉冲,由秒计数器产生并送给分计数器; sout:out std_logic_vector(6 downto 0);秒信号十位、个位的实时BCD码;end entity;architecture behave of sec issignal count:std_logic_vector(6 downto 0);signal enmin1,enmin2:std_logic;beginsout=count;enmin2=(min_set and clk1HZ);

50、-分设置按键按下时的脉冲,用来作分时钟脉冲enmin=(enmin1 or enmin2);process(clk1HZ,secset,min_set)beginif secset=1 then count=0000000; elsif(clk1HZevent and clk1HZ=1) then if count(3 downto 0)=1001 then if count(6 downto 4)=101 thenenmin1=1;count=0000000; else count=count+7; end if;elsecount=count+1;enmin1=0;end if;end i

51、f;end process;end;分计数器设计程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity min isport(enmin,clk1HZ,hour_set:in std_logic;enhour:out std_logic;minout:out std_logic_vector(6 downto 0);end entity;architecture behave of min issignal count:std_logic_vector(6 downto 0);sign

52、al enhour1,enhour2:std_logic;beginminout=count;enhour2=(hour_set and clk1HZ);enhour=(enhour1 or enhour2);process(enmin)begin if(enminevent and enmin=1)thenif(count(3 downto 0)=1001)thenif count(6 downto 4)=101thenenhour1=1;count=0000000;elsecount=count+7;end if;else count=count+1;enhour1=0;end if;en

53、d if;end process;end;时计数器设计程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(enhour,clk1HZ,day_set:in std_logic;hout:out std_logic_vector(5 downto 0);enday:out std_logic);end entity hour;architecture behave of hour issignal enday1,enday2:std_logic;signal

54、count:std_logic_vector(5 downto 0);beginhout=count;enday2=(day_set and clk1HZ);enday=(enday1 or enday2);process(enhour)beginif(enhourevent and enhour=1)thenif(count(3 downto 0)=1001)thenif(count16#23#)then count=count+7;else count=000000;end if;elsif(count16#23#)then count=count+1;enday1=0;else coun

55、t=000000;enday1=1;end if;end if;end process;end;日计数器设计程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity day isport(enday,clk1HZ,month_set:in std_logic;enmonth:out std_logic;sel:in std_logic_vector(2 downto 0);dout:out std_logic_vector(5 downto 0);end entity;architect

56、ure behave of day issignal sr0:std_logic_vector(3 downto 0);signal sr1:std_logic_vector(1 downto 0);signal count:std_logic_vector(5 downto 0);signal enmonth1,enmonth2:std_logic;begindout=count;enmonth2=(month_set and clk1HZ);enmonth=(enmonth1 or enmonth2);process(sel)beginif sel=001then sr0=0001;sr1

57、=11;end if;if sel=011then sr0=0000;sr1=11;end if;if sel=100then sr0=1001;sr1=10;end if;if sel=101then sr0=1000;sr1=10;end if;end process;process(enday,clk1HZ)beginif endayevent and enday=1 then if count(3 downto 0)=1001 then-if a bit is 9;if(count(5 downto 4)sr1)then -count=count+7;else count=000001

58、;-only 29day is this condition;enmonth1=1;end if;elsif count(5 downto 4)sr1 or count(3 downto 0)sr0 then-if a bit or a ten of the month less than its constant.count=count+1;enmonth1=0;else count=000001; enmonth1=1;end if;end if;end process;end;月计数器设计程序:library ieee;use ieee.std_logic_1164.all;use ie

59、ee.std_logic_unsigned.all;entity month isport(enmonth,clk1HZ,year_set:in std_logic;sel:out std_logic_vector(2 downto 1);enyear:out std_logic;mout:out std_logic_vector(4 downto 0);end entity;architecture behave of month issignal count:std_logic_vector(4 downto 0);signal enyear1,enyear2:std_logic;beginmout= count;enyear2= year_set and clk1HZ;enyear= (enyear1 or enyear2);proc

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!