毕业论文设计EDA课设数字钟.doc_第1页
毕业论文设计EDA课设数字钟.doc_第2页
毕业论文设计EDA课设数字钟.doc_第3页
毕业论文设计EDA课设数字钟.doc_第4页
毕业论文设计EDA课设数字钟.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

课程设计任务书 学生姓名: 董勇涛 专业班级:电子科学与技术0902班 指导教师: 梁小宇 工作单位: 信息工程学院 题 目: 数字钟 设计目的:1、掌握在Quartus软件的使用方法,并能熟练的在Quartus环境中运用VHDL语言完成一些简单程序的设计;2、掌握数字钟的主要功能与在FPGA中的实现方法。 要求完成的主要任务: 1、课程设计工作量:1周。2、技术要求:(1)设计一个6位LED动态扫描显示的数字钟,根据一个控制键能选择显示时、分、秒或年、月、日;(2)通过拨码开关可以进行时、分、年、月、日的调整,可以实现翻屏;3、查阅至少5篇参考文献。按武汉理工大学课程设计工作规范要求撰写设计报告书。全文用A4纸打印,图纸应符合绘图规范。时间安排:1、 2012 年 6 月 11日集中,作课设具体实施计划与课程设计报告格式的要求说明。2、 2012 年 6 月 12日至 2012 年 6 月 15日查阅相关资料,学习电路的工作原理。3、 2012 年 6 月 17 日 至 2012 年 6 月 19 日,方案选择和电路设计。4、 2012 年 6 月 20 日 至 2012 年 6 月 21 日,电路调试和设计说明书撰写。5、 2011 年 6 月 22日上交课程设计成果及报告,同时进行答辩。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目 录摘 要IAbstractII1 绪论12 设计内容及要求12.1设计目的及主要任务12.1.1设计目的12.1.2 设计任务及要求12.2设计思想23 数字钟的设计43.1 设计原理与方法43.2 单元模块设计43.2.1 分频计模块设计43.2.2 消抖电路模块设计53.2.3 计数器模块设计53.2.4 闹钟及蜂鸣器设计73.2.5 多路复用器模块设计83.2.6 八段译码模块设计83.3 数字钟设计总原理图84 编译报告84.1 设计原理与方法85 电路仿真与硬件调试95.1 电路仿真95.2 硬件调试106 总结与心得体会10参考文献11附录12摘 要EDA技术在进入21世纪后,得到了更大的发展。在仿真和设计两方面支持标准硬件描述语言的功能越来越强大,软硬件技术也进一步得到了融合,在电子行业的产业领域、技术领域和设计应用领域得到了进一步的肯定,使得复杂电子系统的设计和验证趋于简单化。1本设计是通过Quartus 软件、VHDL语言编程及FPGA芯片来实现常见的数字钟,该数字钟可以根据一个控制键能选择显示时、分、秒或年、月、日。本设计中用8位LED数码管显示时、分和秒,年、月、日,同时可以通过按键调整时、分、及对秒进行清零。关键词:Quartus ;VHDL;数字钟;AbstractEDA technology in the 21 century has achieved great success. In the simulation and design two aspects of hardware description language support standard function more and more powerful, software and hardware technology also further got fusion, in the electronics industry industry field, technology and design application field has been further sure, making complex electronic system design and validation tend to be simple.1The design is by Quartus software, VHDL language programming and CPLD chip to achieve a common digital clock, the digital clock according to a control keys can choose to display hours, minutes and seconds or year, month, day, and can display scroll off. This design using 6 LED digital tube display hours, minutes and seconds, but with the 8-bit LED digital tube display year, month, day, at the same time can be adjusted through the DIP switches hour, minute, year, month and day, and on the seconds to Clear.Keywords:Quartus ;VHDL;Digital Clock;1 绪论FPGA(现场可编程门阵列)和CPLD(复杂可编程逻辑器件)都是可编程逻辑器件,他们是在PAL,GAL等逻辑器件的基础上发展起来的。同以往的PAL,GAL相比较,FPGA/CPLD的规模比较大,它可以替代几十甚至几千块通用IC芯片。这样的FPGA/CPLD实际上就是一个子系统部件。比较典型的就是Altera公司和Xilinx公司的CPLD器件系列和FPGA器件系列,他们开发较早,占用了较大的PLD市场。2本设计是通过对数字钟个组要组成部分的VHDL源程序编程和顶层文件的生成来实现的。在本设计中数字钟的主要组成部分有拨码开关模块、按键修改模块,计数器模块、分频计模块、七段译码器模块和数据选择器模块。通过按键可以实现选择显示时、分、秒或年、月、日,同时可以显示翻屏,还可以通过按键调整时、分及对秒进行清零。2 设计内容及要求2.1设计目的及主要任务2.1.1设计目的(1)初步掌握Quartus软件的使用方法,提高运用硬件描述语言VHDL的能力,初步 了解时序电路的设计。(2)利用对生活中熟悉的电子表,用语言设计相似功能的数字钟。 2.1.2 设计任务及要求 完成以下基本要求及进行提高:(1)设计一个6位LED动态扫描显示的数字钟,根据一个控制键能选择显示时、分、秒或年、月、日;(2)通过按键可以进行时、分、年、月、日的调整,可以实现翻屏;(3)可以设置闹钟时间及整点报时,闹铃蜂鸣器频率为1000Hz,整点报时频率为2000Hz;(4)具有定时翻屏功能,每隔54s,显示一次年月日;(5)运用图形设计方法完成顶层原理图的设计。2.2设计思想本次设计中根据数字钟的工作原理首先进行计数器的设计,其中包括分秒60进制计数器、时24进制计数器、日30进制计数器、月12进制计数器和年10进制计数器,然后根据要求设置一个6选1的数据选择器并且通过控制键实现选择显示时、分、秒或年、月、日,最后再设置3个按键调整数字钟,并且通过一个七段译码器和8进制计数器控制七段数码管实现显示。3 数字钟的设计3.1 设计原理与方法数字电子钟由振荡器、分频器 计数器、译码显示、报时等电路组成。振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计满后各计数器清零,重新计数。计数器的输出分别经译码器送数码管显示,计时出现误差时,可以用校时电路“校时”“校分”“清零”。秒脉冲可以通过分频电路得到。通过报时设计模块可以实现整点报时及定时闹铃,译码显示由七段译码器完成,显示由数码管构成,采用的是动态显示方式。数码管动态显示:动态扫描电路将计数器输出的8421BGD码转换为数码管需要的逻辑状态,并且输出数码管的片选信号和为选信号。所谓动态扫描显示方式是在显示某一位LED显示块的数据的时候,让其它位不显示,然后再显示下一位的数据。只要保证每一位显示的时间间隔不要太大,利用人眼的视觉暂留的现象,就可以造成各位数据同时显示的假象。一般每一位的显示时间为110ms。33.2 单元模块设计3.2.1 分频器模块设计根据设计要求,需要将开发板的50MHZ信号分出1HZ和1KHZ共2种时钟信号,1HZ脉冲信号用来提供计数模块的时钟信号在1HZ的脉冲下,每隔一秒,秒自加一次,1KHZ脉冲信号用来提供消抖电路的时钟信号,cnt用于数码管扫描。完成程序后可以创建原理图元件,其元件符号如图3-1 所示。图3-1 分频器3.2.2 按键消抖电路模块通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号并不稳定,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。4因而在闭合及断开的瞬间均有一连串的抖动,抖动的时间的长短有按键的机械特性决定,一般为5ms10ms。完成程序后可以创建元件,其元件符号如图3-2 所示。图3-2 消抖电路3.2.3 计数器模块设计计数器模块主要由秒60进制计数模块、分60进制计数模块、时24进制计数模块、日30进制计数模块、月12进制计数模块、年计数模块和8进制计数器。下图3-3 是将60进制计数模块、分60进制计数模块、时24进制计数模块融合为一个模块。图3-3 时钟电路秒60进制计数模块的时钟信号为1HZ的脉冲信号,每计数到59便会产生一次进位作为分60进制计数模块的时钟信号,该模块加入一个清零端,当CS为1时,秒计数模块中的个位和十位同时为零,当CS为1时正常计数.分60进制计数模块的时钟信号为秒计数模块的进位信号,其通过一个增加键CM对其调整。时24进制计数模块的时钟信号为分计数模块的进位信号,其通过一个增加键CH对其调整。其中UP,CHANGE信号说明如下,当UP 信号为高时时,表示数码管翻屏了,即显示年月日的时间为6ms。UP信号为低电平时,显示时分秒。在UP有效时,CHANGE为低电平,所有数码管上部分熄灭,下部分显示年月日的下半部分,CHANGE为高电平时,正常显示年月日部分,直到UP 为低。5日30进制计数模块的时钟信号为时计数模块的进位信号,其通过一个置数端load对其调整。日30进制计数器的VHDL程序如附录所示,完成程序后可以创建元件,其元件符号如图3-4所示。图3-4 日30进制计数器月12进制计数模块的时钟信号为日计数模块的进位信号,其通过一个置数端对其调整。月12进制计数器的VHDL程序如附录所示,完成程序后可以创建元件,其元件符号如图3-5所示。图3-5 月12进制计数器年进制计数模块的时钟信号由月计数模块的进位信号产生,年计数模块又由四个十进制计数器组成,分别是个位、十位、百位和千位计数模块组成,中间由进位信号连接。其VHDL程序如附录所示,完成程序后可以创建元件,其元件符号分别如图3-6、图3-7、图3-8和图3-9所示。 图3-6 年个位计数器 图3-7 年十位计数器 图3-8 年百位计数器元件 图3-9 年千位计数器元件符号 同时,本设计中还需要设计一个8进制计数器用来提供七段数码管的位选码和数据选择器的状态信号。其程序如附录所示,其元件符号如图3-2-10所示。图3-10 8进制计数器3.2.4 闹钟及蜂鸣器设计本设计只针对时分秒进行定时,并可任意设定定时时间。整点报时蜂鸣器的频率是2000Hz,闹钟是1000Hz。元件符号如图3-11所示。图3-11 闹钟及蜂鸣器3.2.5多路复用器模块设计将经过七段译码后的时分秒,年月日在数码管上显示出来。为了实现自动向上滚动和手动翻屏,加入了UP,CHANGE,信号来实现向上滚动。加入拨码开关KEY_SEL,来实现手动翻屏。元件符号如图3-12所示。图3-12 多路复用器3.2.6 八段译码模块设计一个数码管是由8段LED显示的,0-9对应着不同的字形。数码管是共阳的,使用共阳字型码。需要将BCD码转换成数码管可以显示的码,该模块的程序如附录所示,其元件符号如图3-13所示。图3-13 八段译码3.3 数字钟设计总原理图利用至顶向下的设计方法,新建一个Block Diagram,在Quartus 环境下连接各模块组成数字钟的总原理图如图3-14所示。图3-14 数字钟总原理图4 编译报告4.1 数字钟设计编译报告将各模块正确连线后,编译无警告,生成编译报告如图。发现,总的逻辑单元使用了184,其中组合逻辑使用184,时序逻辑使用98,由此看出,在Alter的EP2C5Q208芯片中,一个LE包括一个Combination logic和一个Timing logic。如图4-1。图4-1 数字钟编译报告5 电路仿真与硬件调试5.1 电路仿真经过尝试,发现数字钟的设计用波形仿真看到与实际相符的数据很困难,因为50M的时钟要分成1HZ的时钟,1000HZ的时钟,分在秒跳动60才跳一次,时在分跳动60才跳一次,受到simulator tool 工作界面的限制,并不能完整的观察到时分秒,年月日的信息,因此只选择的clock模块的进行了仿真。如下图。图5-1 计数模块仿真波形图七段数码显示译码器LED的仿真,其中Din3.0为BCD码输入,LED7S6.0为七段译码输出(高电平有效)。其仿真输出波形如图5-2所示。图5-2 七段译码模块仿真波形图5.2 硬件调试经过调试,仿真结果正确后,将sof文件转换成固化到芯片的适合JTAG下载的jic文件。连接硬件系统后,通上电源,经Quartus中的PROGRAMMER菜单,调出编程器窗口,删掉sof文件,现在转换成功的jic文件。一切就绪后,按下编程器窗口中的“START”按钮,设计的内容就开始下载到FPGA芯片中。通过实验箱上的拨码开关和按键开关可以逐一对数字钟的功能进行验证。通过数码管显示可知本设计可以实现基本的时、分、秒及年、月、日的计数,通过按键和拨码开关的配合可以实现时、分、秒和年、月、日的校准以及显示翻屏。故本设计完全符合设计要求。6 总结与心得体会由于一直在学习FPGA,所以拿到课程设计的题目时胸有成竹,我想对于我来说,设计出来毫无困难,所以就想在题目的要求上上一个高度。之前都是用VHDL语言生成模块直接例化,这次我选择了利用更直观的原理图设计方法。连线时也遇到过小小的麻烦,比如刚开始总线不知怎么解决,PIN_NAME不知道怎么命名。图连完后,编译通过,对原理图设计有了整题把握,以后做设计的时候,对于接口比较复杂的还是用原理图设计比较方便。后来就考虑如何玩点花样,毕竟单调的显示时分秒还是驾轻就熟的。改动如下:1.将区分时分秒,年月日的-改成动态的了,随着1HZ的时钟两灭,看着形象多了。2.在利用按键手动翻屏的基础上,加了个自动翻屏,毕竟有时候并不想动手去看日期,自动翻屏的目的是想让日期从下往上浮动,可惜不是16*16的点阵,效果不佳。路漫漫其修远兮,吾将上下而求索。参考文献1 卢毅,赖杰. VHDL与数字电路设计. 科学出版社,2009.2 北京理工大学ASIC研究所.VHDL语言100例详解. 清华大学出版社,2001.3 杨丽英.电路EDA技术与应用. 清华大学出版社,2011.4 谢自美.电子线路设计(第二版).华中科技大学出版社,2000.5 赵世强.电子电路EDA技术.西安电子科技大学出版社,2006.附录 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;package my_package isfunction bcd_to_seg7(signal bcd:integer range 0 to 9) return std_logic_vector;procedure sec_min_hour(signal n:in integer range 0 to 59;signal shi,ge:out integer);end my_package;package body my_package isfunction bcd_to_seg7(signal bcd:integer range 0 to 9)return std_logic_vector isvariable seg7:std_logic_vector(7 downto 0);begincase bcd iswhen 0= seg7:=xc0;when 1= seg7:=xf9;when 2= seg7:=xa4; when 3= seg7:=xb0;when 4= seg7:=x99; when 5= seg7:=x92; when 6= seg7:=x82;when 7= seg7:=xf8; when 8= seg7:=x80;when 9=seg7:=x90;when others=end case;return seg7;end bcd_to_seg7;procedure sec_min_hour(signal n:in integer range 0 to 59;signal shi,ge:out integer)isbegincase n iswhen 0|1|2|3|4|5|6|7|8|9=shishishishishishinull;end case;case n iswhen 0|10|20|30|40|50=gegegegegegegegegegenull;end case;end sec_min_hour;end my_package;-main.vhd -library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;use work.my_package.all;entity digitalclock isport(clk:in std_logic; rst_n:in std_logic; cs:in std_logic; cm:in std_logic; ch:in std_logic; key_sel:in std_logic; buzz:inout std_logic; wei_sel:out std_logic_vector(7 downto 0); data_out:out std_logic_vector(7 downto 0);end digitalclock;architecture behavior of digitalclock issignal sec:integer range 0 to 59:=50;signal min:integer range 0 to 59:=59;signal hour:integer range 0 to 23:=0;signal sec_ge:integer range 0 to 9;signal min_ge:integer range 0 to 9;signal hour_ge:integer range 0 to 9;signal sec_shi:integer range 0 to 9;signal min_shi:integer range 0 to 9;signal hour_shi:integer range 0 to 9;signal clk_1:std_logic;signal clk_1000:std_logic;signal buzz_freque:integer;signal key_value:integer;signal cnt:integer range 0 to 7;-the scan frequencesignal H:std_logic;signal up,change:std_logic;beginprocess(clk,rst_n)-divider the clk to different hzvariable cnt1:integer range 0 to 5000;-9999variable cnt2:integer range 0 to 2;variable cnt3:integer range 0 to 1500;-2500beginif(rst_n=0)then elsif(clkevent and clk=1)thenif(cnt1=5000)thencnt1:=0;clk_1000=not clk_1000;-1000hzif(cnt2=2)thencnt2:=0;if(cnt=7)thencnt=0;elsecnt=cnt+1;end if;if(cnt3=1500)thencnt3:=0;clk_1=not clk_1;elsecnt3:=cnt3+1;end if;elsecnt2:=cnt2+1;end if;elsecnt1:=cnt1+1;end if;end if;end process;process(clk_1,rst_n,key_value)variable delay:integer range 0 to 10;beginif(rst_n=0)then sec=0;min=0;hoursecif(min=59)thenmin=0;elseminif(hour=23)thenhour=0;elsehourif(sec=59)thensec=0;if(min=59)thenmin=0;if(hour=23)thenhour=0;elsehour=hour+1;end if;elsemin=min+1;end if;elsesec=54 and sec=59)thenup=1;if(sec=55)thenchange=0;elsif(sec=59)thenchange=1;end if;elseupnull; end case;end if;end process;process(clk_1000,ch,cm,cs)variable delay:integer range 0 to 10;variable key:std_logic_vector(2 downto 0);beginkey:=ch&cm&cs;if(clk_1000event and clk_1000=1)thencase key iswhen 011=if(delay=10)thendelay:=0;key_valueif(delay=10)thendelay:=0;key_valueif(delay=10)thendelay:=0;key_valuekey_value=0;end case;end if;end process;process(sec,min)beginif(min=0 and sec=0)thenbuzz_freque=20000;elsif(min=59)thenif (sec=50 or sec=52 or sec=54 or sec=56 or sec=58)thenbuzz_freque=10000;elsebuzz_freque=0;end if;elsebuzz_freque=0;end if;end process;process(clk,buzz_freque)variable cnt:integer:=0;beginif(buzz_freque/=0)thenif(clkevent and clk=1)thenif(cnt=buzz_freque)thencnt:=0;buzz=not buzz;elsecnt:=cnt+1;end if;end if;elsebuzzwei_sel=11111110;if(up=1)t

温馨提示

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

评论

0/150

提交评论