HEFEI UNIVERSITYEDA设计报告题目系别班级姓名指导老师完成时间目录一、设计要求 (3)1.功能介绍 (3)2.性能与功能设计 (3)二、方案设计 (3)三、程序框图 (3)四、程序原理图 (4)五、程序仿真与分析 (5)1.秒计数器 (5)2.分计数器 (5)3.小时计数器 (6)4.整点报时报警 (6)5.时钟系统波形图 (7)六、程序代码 (7)七、总结与体会 (11)一、设计要求1、功能介绍1)具有时、分、秒计数显示功能,以24小时循环计时。
2)具有调节小时、分钟及清零的功能。
3)具有整点报时功能。
2.性能及功能设计1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。
2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键7和键4进行任意的调整,同时可以通过改变频率来改变计数。
3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。
产生报警声音。
二、方案设计根据各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。
采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。
显示:小时采用24进制,而分钟和秒均60进制。
三、程序框图四、程序原理图五、程序仿真与分析1、秒计数器1)秒计数器的仿真波形图2)波形分析利用60进制计数器完成00到59的循环计数功能,当秒计数至59时,再来一个时钟脉冲则产生进位输出,即enmin=1;reset作为复位信号低电平有效,即高电平时正常循环计数,低电平清零。
因为这种60进制的VHDL语言是很好写的,它并不复杂,再说我们必须要学会这些基本的硬件语言的描写。
2、分钟计数器1)分钟计数器的仿真波形图2)波形分析小时计数模块利用24进制计数器,通过分钟的进位信号的输入可实现从00到23的循环计数。
3、小时计数器1)小时计数器的仿真波形图2)波形分析小时计数模块利用24进制计数器,通过分钟的进位信号的输入可实现从00到23的循环计数。
4、整点报时报警模块1)整点报时模块仿真波形图2)波形分析由图知对于整点报时模块,当分钟计数至59时来一个时钟脉冲则产生一个进位信号,分钟计数到00,此时产生报警信号持续一分钟。
5、数字时钟系统波形图仿真六、程序代码1、小时计数器VHDL语言源程序2、分钟计数器VHDL语言源程序(底层文件)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY minute ISPORT(clk,clk1,reset,sethour:IN STD_LOGIC;enhour:OUT STD_LOGIC;daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ENTITY minute ;ARCHITECTURE fun OF minute ISSIGNAL count :STD_LOGIC_VECTOR (6 DOWNTO 0); SIGNAL enhour_1, enhour_2: STD_LOGIC; BEGINdaout<=count;enhour_2<= (sethour and clk1);enhour<= (enhour_1 or enhour_2);PROCESS(clk,reset,sethour)BEGINIF(reset='0') THENcount<="0000000";ELSIF(clk'event and clk='1')THENIF(count (3 DOWNTO 0) ="1001")THENIF(count <16#60#) THENIF(count="1011001") THENenhour_1<='1';count<="0000000";ELSEcount<=count+7;END IF;ELSEcount<="0000000";END IF;ELSIF (count <16#60#) THENcount<=count+1;enhour_1<='0' after 100 ns;ELSEcount<="0000000";END IF;END IF;END process;END fun;3、秒钟计数器VHDL语言源程序(底层文件)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY second ISPORT( clk,reset,setmin:STD_LOGIC;enmin:OUT STD_LOGIC;daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ENTITY second;ARCHITECTURE fun OF second ISSIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL enmin_1,enmin_2:STD_LOGIC;BEGINdaout<=count;enmin_2<=(setmin and clk);enmin<=(enmin_1 or enmin_2);PROCESS(clk,reset,setmin)BEGINIF(reset='0')THEN count<="0000000"; ELSIF(clk 'event and clk='1')thenIF(count(3 downto 0)="1001")thenIF(count<16#60#)thenIF(count="1011001")thenenmin_1<='1';count<="0000000";ELSEcount<=count+7;END IF;ELSEcount<="0000000";END IF;ELSIF(count<16#60#)thencount<=count+1;enmin_1<='0'after 100 ns;ELSEEND IF;END IF;END PROCESS;END fun;4、整点报时报警模块VHDL语言源程序(底层文件)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY alert ISPORT(clk:IN STD_LOGIC;dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0);speak:OUT STD_LOGIC;lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END alert;ARCHITECTURE fun OF alert ISSIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINspeaker:PROCESS(clk)BEGINIF(clk'event and clk='1')THENIF(dain="0000000")THENspeak<=count1(1);IF(count1>="10")THENcount1<="00";ELSEcount1<=count1+1;END IF ;END IF ;END IF ;END PROCESS speaker;END fun;七、总结与体会本次实验由于我们不知道最后能实现哪些功能,所以在设计思路上我们采用了层次设计思路,每设计一步都留有很多接口以便下面的设计,并且采用的功能是逐级递加的。
但这样做的弊病是我们不能把所有的问题都考虑到,出错后在想修改就变的很麻烦,每修改一步下面的都得改变,想要完善前面的功能时也很复杂,因此,应采用当前流行的设计思想模块化设计,这样实验才能可以更完善的进行下去。
同时通过本次实验也为以后积累了经验。
在试验过程中,由于一开始在计数器级联时用的是同步信号,导致外围辅助电路很多,从而造成了冒险,电路出现计数不稳定现象,后来把外部级联时采用异步控制法,异步时钟信号经过了简单处理,都是经过一个非门才送出的,达到了与同步相同的效果。
这才使得电路变得简单明了一些。
通过这次实验,我们学会了一种快速有效的学习方法。
以往的学习都是老师讲学生记,不懂得地方就靠解答大量习题帮助记忆,学习的主要目的是通过最后的考试。
课程设计使我们发现考试真的并不是最重要,最重要的是能运用所学的知识。
在整个课程的学习过程中,我们突破了传统学习模式,把被动接受转变为主动学习。
不再是用学到的知识解题,而是在实际运用时遇到什么学什么,重在把知识应用于实际。
11。