1、目录摘要3一、题目分析31、设计目的32、指标与功能33、总体方框图44、设计原理4二、选择方案41、方案论证与对比4(1)方案一4(2)方案二5(3)两种方案的对比52、 设计方案5(1)顶层实体描述5(2)模块划分6(3)模块描述7(4)顶层电路图8三、 方案实现91、各模块仿真及描述92、顶层电路仿真及描述10四、 硬件测试及说明10五、 结论11六、 课程总结11七、 附录12参考文献16数字钟的设计摘要EDA(Electronic Design Automation)电子设计自动化,就是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成
2、用软件方式设计的电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。本次实习利用QuartusII为设计软件、VHDL为硬件描述语言,结合所学的数字电路的知识设计一个24时多功能数字钟,具有正常时、分、秒计时,动态显示,清零、快速校时校分、整点报时、花样显示等功能。利用硬件描述语言VHDL对设计系统的各个子模块进行逻辑描述,采用模块化的设计思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑分割、逻辑综合优化、逻辑布线、逻辑仿真,最终将设计的软件系统下载设计实验系统,对设计的系统进行硬件测试。一、题目分析1、设计目的 数字钟能够显示时、分、秒显示时间的功能,可以进行时和分的校对,还可以充当
3、计时器,而且灵活性强。2、指标与功能 该数字钟钟由延时程序和循环程序产生的秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用EDA软件(QUARTUSII)实现数字钟系统的设计与仿真,该方法仿真效果真实、准确,节省了硬件资源。3、总体方框图本系统可以由秒计数器、分钟计数器
4、、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。图1、系统方框图4、设计原理 数字钟电路设计要求所设计电路就有以下功能:时、分、秒计时显示,清零,时、分调节,整点报时及花样显示。分、秒计时原理相似,可以采用60进制BCD码计数器进计时;小时采用24进制BCD码进行计时;在设计时采用试验电路箱上的模式7电路,不需要进行译码电路的设计;所设计电路具有驱动扬声器和花样显示的LED灯信号产生。二、选择方案1、方案论证与对比(1)方案一 如图2所
5、示:通过外部设置一个常数给计数器赋值来达到设置时间的目的。然后通过计数,显示输出,从而达到数字电子时钟的设计图2、方案一结构图(2)方案二 一、如图3所示:通过脉冲来控制计数器的初始值来达到设置时间的目的。然后通过计数,显示输出,从而达到数字电子时钟的设计。图3、 方案二结构图(3)两种方案的对比 相同点:两方案均可通过给计数器赋初值来设置时间,进而计数来设计时钟。 不同点:方案一是通过直接给计数器一个初值来设置时间。方案二是通过改变计数器本身值来达到设置时间。显然,方案二设置时间是更灵活,更精确。且方案二简单易做。所以我们选择方案二做。2、 设计方案(1)顶层实体描述 该电子时钟的命名为cl
6、ock,其外部端口如图3所示。各个输入/输出端口的作 用如下: (1)clk为外部时钟信号,其频率为1Hz,reset为异步清零信号. (2) sethour和setmin分别为调时调分脉冲输入信号,当en_set为高电平时,每来一个sethour脉冲或setmin脉冲,时、分输出将分别加1; (3) second6.0为秒的个位和十位BCD码输出,min60为分钟的个位和十位BCD码输出,hour6.0为小时的个位和十位BCD码输出,它们最终中用来驱动七段数码管,lamp2.0为花样显示输出信号,speak为整点报时扬声器驱动信号。图3(2)模块划分 自顶向下分解数字钟扬声器报时LED灯显示
7、7段数码管显示0.1秒计数器秒计数器分计数器时计数器图4(3)模块描述 时钟计时模块完成时、分、秒计数,及清零、调节时和分钟的功能。时、分、秒计数的原理相同,均为BCD码输出的计数器,其中分和秒均为六十进制BCD码计数器,小时为二十四进制BCD码计数器。设计一个具有异步清零和设置输出功能的六十进制BCD码计数器,再设计一个具有异步清零和设置输出功能的二十四进制计数器,然后将它们通过一定的组合构成时钟计时模块。各个输入/输出端口的作用为: (1) clk为计时时钟信号,reset为异步清零信号;(2)sethour 为小时设置信号,setmin为分钟设置信号;(3)daout 50为小时的BCD
8、出,daout6.0为秒和分钟的BCD码输出,enmin和enhour为使能输出信号。 (a) (b)(c)图5(4) 在时钟整点的时候产生扬声器驱动信号和花样显示信号。由时钟计时模块中分钟的进行信号进行控制。当contr_en为高电平时,将输入信号clk送到输出端speak用于驱动扬声器,同时在clk的控制下,输出端lamp2.0进行循环移位,从而控制LED灯进行花样显示。输出控制模块有扬声器控制器和花样显示控制器两个子模块组成。图6(4)顶层电路图顶层文件是由四个模块组成,分别是时、分、秒计数器和报警的VHDL语言封装而成。经过锁定引脚再重新编译获得如下顶层原理电路图: 图7三、 方案实现
9、1、各模块仿真及描述(1)秒计数器模块仿真图:将标准秒信号送入”秒计数器”,秒计数器采用60进制计数器,每累计60秒发出一个分脉冲信号,该信号将作为分计数器的时钟脉冲,daout代表秒输出。 图8(2) 分计数器电路仿真图:也采用60进制计数器,每累计60分钟,发出一个时脉冲信号,该信号将被送到时计数器,daout端口代表分钟输出 图92、顶层电路仿真及描述实现了数字钟的设计,仿真结果满足设计要求。图10四、 硬件测试及说明进行硬件验证时,采用试验箱上的模式七电路图,如前面的图一所示。七段数码管1和2做为秒计时输出,4和5做为分钟计时输出,7和8做为小时计时输出,八个发光管D1、D2和D3用做
10、花样显示,键8为清零输入信号reset,键7和键4分别用做调时sethour和调分setmin,时钟信号clk由试验箱内部提供。硬件验证前进行引脚的配置,单击“Assignments”菜单下的“Assignment Editor”命令,再在弹出的引脚配置器中进行引脚配置,引脚配置结果如图11图11引脚配置完成后再进行一次全程编译,无误则可以下载到试验箱上进行硬件测试。硬件验证的方法如下:选择实验模式7;时钟脉冲clk与clock0(1024Hz)信号相连;键8和键5均为低电平,时钟正常计时,数码管1和2显示秒,数码管4和5显示分钟,数码管7和8显示小时;键8为高电平时,时钟清零;键5为高电平时
11、,按下键7和键4进行调时调分操作;当时钟为整点的时候,三个发光二极管进行循环移位操作,同时扬声器发声。五、 结论经过源程序的编辑、逻辑综合、逻辑适配、编程下载成功后,在EDA实验开发系统进行硬件验证时却发现实验结果不正确,扬声器无法发声。经检查,自己设计的管脚文件有错。将管脚锁定文件修改后,重新进行逻辑适配、编程下载成功后,实验结果仍然不正确,百思不得其解。无奈之下,决定重头开始排查每一步的细节,确定各个模块的功能完全实现并且顶层模块功能正确。修改之后,重新进行逻辑适配、编程下载验证,实验结果完全正确。六、 课程总结这次EDA课程设计历时两个星期,在整整两个星期的日子里,不仅巩固了以前所学过的
12、知识,而且学到了很多书本上学不到的知识,同时锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,对未来有了更多的信心。这次课程设计,进一步加深了我对EDA的了解,使我对QuartusII的基本操作有所了解,使我对应用软件的方法设计硬件系统有了更加浓厚的兴趣。 通过这次课程设计,我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合,从实践中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。在设计的过程中,我遇到许多问题,毕竟是第一次应用VHDL进行硬件电路系统的设计,许多EDA的知识还没有充分的掌握,遇到困难也是在所难免的,同时发现了自己的不足之
13、处:学习知识表面化,没有深入了解它们的原理。 总的来说,这次设计的数字时钟电路还是比较成功的,尽管在设计中遇到了很多问题,最后在老师的辛勤指导、同学的帮助和自己不断思考下,终于迎刃而解,有点小小的成就感,觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。最后,对给过我帮助的所有同学和指导老师再次表示忠心的感谢! 七、 附录1、十分之一秒计数器模块该模块实现十分之一秒计时功能。十分之一秒计时器(s0,cout0)是由一个十进制的计数器构成的,clk为驱动十分之一秒计时器的时钟,s0为秒计时器的输出,cout0为十分之一秒计时器的进位输出。其VHDL语言设计如下:library ie
14、ee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10s is port(clk,rst,en:in std_logic; s0: out std_logic_vector(3 downto 0); cout: out std_logic);end cnt10s;architecture behav of cnt10s isbegin process(clk,en,rst) variable a0: std_logic_vector(3 downto 0); begin if rst=1 then
15、a0:=(others=0);elsif clkevent and clk=1 then if en=1 then if(a0=9)then a0:=0000 ;cout=1;elsea0:=a0+1;cout=0;end if; end if;end if;s00);a4:=( others=0);elsif clkevent and clk=1 then if en=1 then if(a4=5)and(a3=9)then a3:=0000 ; a4:=0000;cout=1;elsif(a3=9)thena4:= a4 +1;a3:= 0000;cout=0; elsea3:=a3+1;
16、end if; end if;end if;s3=a3;s40);a6:=( others=0);elsif clkevent and clk=1 then if en=1 then if(a6=5)and(a5=9)then a5:=0000 ; a6:=0000;cout=1; elsif(a5=9)thena6 := a6 +1;a5 := 0000;cout=0;elsea5:=a5+1;end if;end if;end if;s5=a5;s60); a8:=(others=0) ; elsif clkevent and clk=1 then if en=1 then if(a8=1
17、)and(a7=1)then a7:=0000 ; a8:=00; elsif(a7=9)thena8 := a8 +1;a7:= 0000; elsea7:=a7+1; end if;end if; end if;s7=a7;s8=a8;end process ;end;5、 二选一数据选择器模块该模块实现数据选择功能。当a为高电平时输出y为a的值。其VHDL语言设计如下:entity mux21a isport(a,b,s:in bit;y:out bit);end entity mux21a;architecture one of mux21a isbeginy=a when s=0 else b;end architecture one;参考文献1 谢自美电子线路设计实验测试M武汉:华中理工大学出版社,1992.2刘湘涛江世明单片机原理与应用M. 北京:电子工业出版社,2006.3 楼然笛单片机开发M北京:人民邮电出版社,1994.4 付家才单片机控制工程实践技术M北京:化学工业出版社 2004.3.5 李光才单片机课程设计 实例指导M 北京:北京航空航天大学出版社 2004.6 朱定华单片机原理及接口技术实验M北京:北方交通大学出版社2002.11.