数字钟的设计_第1页
数字钟的设计_第2页
数字钟的设计_第3页
数字钟的设计_第4页
数字钟的设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉理工大学EDA课程设计说明书课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位: 信息工程学院 题 目: 数字钟 设计目的:1、掌握在Quartus软件的使用方法,并能熟练的在Quartus环境中运用VHDL语言完成一些简单程序的设计;2、掌握数字钟的主要功能与在FPGA中的实现方法。 要求完成的主要任务: 1、课程设计工作量:1周。2、技术要求:(1)设计一个6位LED动态扫描显示的数字钟,根据一个控制键能选择显示时、分、秒或年、月、日;(2)通过拨码开关可以进行时、分、年、月、日的调整,可以实现翻屏;3、查阅至少5篇参考文献。按武汉理工大学课程设计工作规范要求撰写设计报告书。

2、全文用A4纸打印,图纸应符合绘图规范。时间安排:1、 2015 年 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日上交课程设计成果及报告,同时进行答辩。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目 录摘 要IAbstractII

3、1 绪论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附录121 摘 要 EDA是电子设计自动化(Electronic Desig

4、nAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。 在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法

5、、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 本设计是通过Quartus 软件、VHDL语言编程及FPGA芯片来实现常见的数字钟,该数字钟可以根据一个控制键能选择显示时、分、秒或年、月、日。本设计中用8位LED数码管显示时、分和秒,年、月、日,同时可以通过按键调整时、分、及对秒进行清零。

6、关键词:Quartus ;VHDL;数字钟;1 绪论 FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。加电时,FPGA芯片将EPROM中数据读入片

7、内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。本设计是通过对数字钟个组要组成部分的VHDL源程序编程和顶层文件的生成来实现的。在本设计中数字钟的主要组成部分有拨码开关模块、按键修改模块,计数器模块、分频计模块、七段译码器模块和数据选择器模块。通过按键可以实现选择显示时、分、秒或年、月、日,同时

8、可以显示翻屏,还可以通过按键调整时、分及对秒进行清零。2 设计内容及要求2.1设计目的及主要任务2.1.1设计目的(1)初步掌握Quartus软件的使用方法,提高运用硬件描述语言VHDL的能力,初步 了解时序电路的设计。(2)利用对生活中熟悉的电子表,用语言设计相似功能的数字钟。 2.1.2 设计任务及要求 完成以下基本要求及进行提高:(1)设计一个6位LED动态扫描显示的数字钟,根据一个控制键能选择显示时、分、秒或年、月、日;(2)通过按键可以进行时、分、年、月、日的调整,可以实现翻屏;(3)可以设置闹钟时间及整点报时,闹铃蜂鸣器频率为1000Hz,整点报时频率为2000Hz;(4)具有定时

9、翻屏功能,每隔54s,显示一次年月日;(5)运用图形设计方法完成顶层原理图的设计。2.2设计思想 该数字钟可以实现3个功能:计时功能、整点报时功能和重置时间功能,因此有3个子模块:计时、报时、重置时间。其中计时模块有4部分构成:秒计时器、分计时器和时计时器。其中包括分秒60进制计数器、时24进制计数器、日30进制计数器、月12进制计数器和年10进制计数器,然后根据要求设置一个6选1的数据选择器并且通过控制键实现选择显示时、分、秒或年、月、日,最后再设置3个按键调整数字钟,并且通过一个七段译码器和8进制计数器控制七段数码管实现显示。3 数字钟的设计3.1 设计原理与方法 数字计时器基本功能是计时

10、,因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为4KHZ,通过分频获得所需脉冲频率1Hz,1KHz,500Hz。为产生秒位,设计一个模60计数器,对1HZ的脉冲进行秒计数产生秒位,为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成为产生时位,用一个模24计数器对分位的进位脉冲进行计数。整个数字计时器的计数部分共包括六位时十位、时个位、分十位、分个位、秒十位和秒个位。显示功能是通过数选器、译码器、码转换器和7段显示管实现的。因为实验中只用一个译码显示单元,7个7段码,6个用于显示时分秒,一个显示星期,所以通过4个7选一MUX和

11、一个3-8译码器配合根据计数器的信号进行数码管的动态显示。清零功能是通过控制计数器清零端的电平高低来实现的。只需使清零开关按下时各计数器的清零端均可靠接入有效电平,本实验中是低电平,而清零开关断开时各清零端均接入无效电平即可。 校分校时功能由防抖动开关、逻辑门电路实现。其基本原理是通过逻辑门电路控制分计数器的计数脉冲。当校分校时开关断开时,计数脉冲由低位计数器提供,当按下校分校时开通时,既可以手动触发出发式开关给进位脉冲,也可以有恒定的1Hz脉冲提供恒定的进位信号,计数器在此脉冲驱动下可快速计数。为实现可靠调时,采用防抖动开关,由D触发器实现,克服开关接通或断开过程中产生的一串脉冲式振动。 保

12、持功能是通过逻辑门控制秒计数器输入端的1Hz脉冲实现的。正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。整点报时功能可以通过组合逻辑电路实现。当计数器的各位呈现特定的电平时,可以选通特定的与门和或门将指定的频率信号送入蜂鸣器中实现在规定的时刻以指定频发音报时。 3.2 单元模块设计3.2.1 按键消抖电路模块通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号并不稳定,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。4因而在闭合及断开的瞬间均有一连串的抖动,抖动的时间的长短有按键的机械

13、特性决定,一般为5ms10ms。完成程序后可以创建元件。3.2.2 分频器模块设计根据设计要求,需要将开发板的50MHZ信号分出1HZ和1KHZ共2种时钟信号,1HZ脉冲信号用来提供计数模块的时钟信号在1HZ的脉冲下,每隔一秒,秒自加一次,1KHZ脉冲信号用来提供消抖电路的时钟信号,cnt用于数码管扫描。完成程序后可以创建原理图元件,其元件符号如图3-1 所示。图3-1 分频器3.2.3 计数器模块设计计数器模块主要由秒60进制计数模块、分60进制计数模块、时24进制计数模块、日30进制计数模块、月12进制计数模块、年计数模块和8进制计数器。下图3-3 是将60进制计数模块、分60进制计数模块

14、、时24进制计数模块融合为一个模块。图3-3 时钟电路 图3-4 日30进制计数器 图3-5 月12进制计数器秒60进制计数模块的时钟信号为1HZ的脉冲信号,每计数到59便会产生一次进位作为分60进制计数模块的时钟信号,该模块加入一个清零端,当CS为1时,秒计数模块中的个位和十位同时为零,当CS为1时正常计数.分60进制计数模块的时钟信号为秒计数模块的进位信号,其通过一个增加键CM对其调整。时24进制计数模块的时钟信号为分计数模块的进位信号,其通过一个增加键CH对其调整。其中UP,CHANGE信号说明如下,当UP 信号为高时时,表示数码管翻屏了,即显示年月日的时间为6ms。UP信号为低电平时,

15、显示时分秒。在UP有效时,CHANGE为低电平,所有数码管上部分熄灭,下部分显示年月日的下半部分,CHANGE为高电平时,正常显示年月日部分,直到UP 为低。5日30进制计数模块的时钟信号为时计数模块的进位信号,其通过一个置数端load对其调整。日30进制计数器的VHDL程序如附录所示,完成程序后可以创建元件,其元件符号如图3-4所示。月12进制计数模块的时钟信号为日计数模块的进位信号,其通过一个置数端对其调整。月12进制计数器的VHDL程序如附录所示,完成程序后可以创建元件,其元件符号如图3-5所示。年进制计数模块的时钟信号由月计数模块的进位信号产生,年计数模块又由四个十进制计数器组成,分别

16、是个位、十位、百位和千位计数模块组成,中间由进位信号连接。其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所示

17、。图3-11 闹钟及蜂鸣器3.2.5 八段译码模块设计一个数码管是由8段LED显示的,0-9对应着不同的字形。数码管是共阳的,使用共阳字型码。需要将BCD码转换成数码管可以显示的码,该模块的程序如附录所示,其元件符号如图3-13所示。图3-13 八段译码3.3 数字钟设计总原理图利用至顶向下的设计方法,新建一个Block Diagram,在Quartus 环境下连接各模块组成数字钟的总原理图如图3-14所示。图3-14 数字钟总原理图4 编译报告4.1 数字钟设计编译报告将各模块正确连线后,编译无警告,生成编译报告如图。发现,总的逻辑单元使用了184,其中组合逻辑使用184,时序逻辑使用98,

18、由此看出,在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码输

19、入,LED7S6.0为七段译码输出(高电平有效)。其仿真输出波形如图5-2所示。图5-2 七段译码模块仿真波形图5.2 硬件调试经过调试,仿真结果正确后,将sof文件转换成固化到芯片的适合JTAG下载的jic文件。连接硬件系统后,通上电源,经Quartus中的PROGRAMMER菜单,调出编程器窗口,删掉sof文件,现在转换成功的jic文件。一切就绪后,按下编程器窗口中的“START”按钮,设计的内容就开始下载到FPGA芯片中。通过实验箱上的拨码开关和按键开关可以逐一对数字钟的功能进行验证。通过数码管显示可知本设计可以实现基本的时、分、秒及年、月、日的计数,通过按键和拨码开关的配合可以实现时、

20、分、秒和年、月、日的校准以及显示翻屏。故本设计完全符合设计要求。6 总结与心得体会由于一直在学习FPGA,所以拿到课程设计的题目时胸有成竹,我想对于我来说,设计出来毫无困难,所以就想在题目的要求上上一个高度。之前都是用VHDL语言生成模块直接例化,这次我选择了利用更直观的原理图设计方法。连线时也遇到过小小的麻烦,比如刚开始总线不知怎么解决,PIN_NAME不知道怎么命名。图连完后,编译通过,对原理图设计有了整题把握,以后做设计的时候,对于接口比较复杂的还是用原理图设计比较方便。后来就考虑如何玩点花样,毕竟单调的显示时分秒还是驾轻就熟的。改动如下:1.将区分时分秒,年月日的-改成动态的了,随着1

21、HZ的时钟两灭,看着形象多了。2.在利用按键手动翻屏的基础上,加了个自动翻屏,毕竟有时候并不想动手去看日期,自动翻屏的目的是想让日期从下往上浮动,可惜不是16*16的点阵,效果不佳。路漫漫其修远兮,吾将上下而求索。参考文献1 卢毅,赖杰. VHDL与数字电路设计. 科学出版社,2009.2 北京理工大学ASIC研究所.VHDL语言100例详解. 清华大学出版社,2001.3 杨丽英.电路EDA技术与应用. 清华大学出版社,2011.4 谢自美.电子线路设计(第二版).华中科技大学出版社,2000.5 赵世强.电子电路EDA技术.西安电子科技大学出版社,2006.附录 library ieee;

22、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

23、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:=x"c0"when 1=> seg7:=x"f9"when 2=> seg7:=x"a4" when 3=> seg7:=x"b0"when 4=> seg7

24、:=x"99" when 5=> seg7:=x"92" when 6=> seg7:=x"82"when 7=> seg7:=x"f8" when 8=> seg7:=x"80"when 9=>seg7:=x"90"when others=>end case;return seg7;end bcd_to_seg7;procedure sec_min_hour(signal n:in integer range 0 to 59;signal

25、 shi,ge:out integer)isbegincase n iswhen 0|1|2|3|4|5|6|7|8|9=>shi<=0;when 10|11|12|13|14|15|16|17|18|19 =>shi<=1;when 20|21|22|23|24|25|26|27|28|29=>shi<=2;when 30|31|32|33|34|35|36|37|38|39 =>shi<=3;when 40|41|42|43|44|45|46|47|48|49=>shi<=4;when 50|51|52|53|54|55|56|5

26、7|58|59=>shi<=5;when others=>null;end case;case n iswhen 0|10|20|30|40|50=>ge<=0;when 1|11|21|31|41|51=>ge<=1;when 2|12|22|32|42|52=>ge<=2; when 3|13|23|33|43|53=>ge<=3;when 4|14|24|34|44|54=>ge<=4;when 5|15|25|35|45|55=>ge<=5;when 6|16|26|36|46|56=>ge

27、<=6;when 7|17|27|37|47|57=>ge<=7;when 8|18|28|38|48|58=>ge<=8;when 9|19|29|39|49|59=>ge<=9; when others=>null;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_

28、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 di

29、gitalclock 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

30、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

31、 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(clk'event and clk='1')thenif(cnt1=5000)thencnt1:=0;clk_1000<=not clk_1000;-1000hzif(cnt2=2)thencnt2:=0;if(cnt=7)thencnt<=0;elsecnt&l

32、t;=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;hour<=0;elsif(clk_1'eve

33、nt and clk_1='1')thencase key_value iswhen 3=>sec<=0;when 2=>if(min=59)thenmin<=0;elsemin<=min+1;end if;when 1=>if(hour=23)thenhour<=0;elsehour<=hour+1;end if; when 0=>if(sec=59)thensec<=0;if(min=59)thenmin<=0;if(hour=23)thenhour<=0;elsehour<=hour+1;end

34、 if;elsemin<=min+1;end if;elsesec<=sec+1;if(sec>=54 and sec<=59)thenup<='1'if(sec=55)thenchange<='0'elsif(sec<=59)thenchange<='1'end if;elseup<='0'end if;end if; when others=>null; end case;end if;end process;process(clk_1000,ch,cm,cs)var

35、iable delay:integer range 0 to 10;variable key:std_logic_vector(2 downto 0);beginkey:=ch&cm&cs;if(clk_1000'event and clk_1000='1')thencase key iswhen "011"=>if(delay=10)thendelay:=0;key_value<=1;elsedelay:=delay+1;end if;when "101"=>if(delay=10)thende

36、lay:=0;key_value<=2;elsedelay:=delay+1;end if;when "110"=>if(delay=10)thendelay:=0;key_value<=3;elsedelay:=delay+1;end if;when others=>key_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 se

37、c=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(clk'event and clk='1')thenif(cnt=buzz_freque)thencnt:=0;buzz<=not buzz;elsec

38、nt:=cnt+1;end if;end if;elsebuzz<='1'-1 no beep 0 beepend if;end process;sec_min_hour(sec,sec_shi,sec_ge);sec_min_hour(min,min_shi,min_ge);sec_min_hour(hour,hour_shi,hour_ge);process(cnt,sec_shi,sec_ge,min_shi,min_ge,hour_shi,hour_ge,clk_1,key_sel,up,change)variable H:std_logic;beginif(ke

39、y_sel='1')thencase cnt iswhen 0=>wei_sel<="11111110"if(up='1')thenif(change='0')thendata_out<=x"a3"elsedata_out<=x"80"end if;elsedata_out<=bcd_to_seg7(sec_ge);end if;when 1=>wei_sel<="11111101"if(up='1')then

40、if(change='0')thendata_out<=x"fb"elsedata_out<=x"f9"end if;elsedata_out<=bcd_to_seg7(sec_shi);end if;when 2=>wei_sel<="11111011"if(clk_1='1')thenH:='1'elseH:='0'end if;data_out<='1'&H&"111111"wh

41、en 3=>wei_sel<="11110111"if(up='1')thenif(change='0')thendata_out<=x"a7"elsedata_out<=x"82"end if;elsedata_out<=bcd_to_seg7(min_ge);end if;when 4=>wei_sel<="11101111"if(up='1')thenif(change='0')thendata_out<=x"ab"elsedata_out<=x"c0"end if;elsedata_out<=bcd_to_seg7(min_shi);end if;when 5=>wei_sel<="11011111&qu

温馨提示

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

评论

0/150

提交评论