EDA电子钟设计_第1页
EDA电子钟设计_第2页
EDA电子钟设计_第3页
EDA电子钟设计_第4页
EDA电子钟设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、EDA电子钟设计一、设计目的1.掌握VHDL语言的基本运用。2.掌握复杂系统的EDA设计方法。3.学习多层次、多模块系统设计。4.了解数字钟的工作原理,利用VHDL语言实现数字钟。5.掌握Quartus的简单操作并会使用EDA实验箱。6.掌握各芯片的逻辑功能及使用方法。二、系统总体设计我们设计的是多功能数字钟,共有5个系统模块组成,分别是:液晶显示屏、调时控制开关(用的是拨码开关)、LED显示状态灯及蜂鸣器报时系统和时钟频率系统。我们设计的是以24小时制显示,数码管扫描显示时、分、秒;能够正常计时和调时、调分等校时功能;经过我们设计的数字钟具有蜂鸣器整点报时的功能,还具备设置闹钟功能。EP1C

2、12Q240C8按键开关时钟信号LED显示图2.1 多功能数字钟模拟系统基本组成框图三、详细设计3.1数字钟的基本工作原理3.1.1时基T 产生电路数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。由晶振产生的频率非常稳定的脉冲,经整形、稳定电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。3.1.2调时、调分信号的产生由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。现在我们把电

3、路稍做变动:把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;当按键开关按下去时(即为1),则数据选择器将另外一个2Hz 的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。调节小时的时间也一样的实现。3.1.3计数显示电路计数部分:由两个60进制计数器和一个24 进制计数器组成,其中60 进制计数器可用6 进制计数器和10 进制计数器构成;24 进制的小时计数同样可用6

4、进制计数器和10 进制计数器得到:当计数器计数到24 时,“2”和“4”同时进行清零,则可实现24 进制计数。3.2设计思路根据系统设计要求,系统设计采用自底向上的设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。3.2.1时钟计数首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。sethour可以调整时钟的小时部分, setmin可以调整分钟,步进为1。由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=1

5、0时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT( 6 DOWNTO 0 )上的信号来点亮指定的LED七段显示数码管。3.2.2时间设置手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。

6、1)通过对md1按键高低电平的控制可以进入时钟的另一个调时模式,调试模式和计时模式是分开互不影响的。然后再通过对md21和md22对时钟进行时间设定。等到计时到达设置时间时,实现打铃功能。2)用6位数码管分别显示“时”、“分”、“秒”,通过DOUT( 6 DOWNTO 0 )上的信号来点亮指定的LED七段显示数码管。3)由于电子钟的最小计时单位是1s,因此提供给系统的内部的时钟频率应该大于1Hz,这里取100Hz。CLK端连接外部10Hz的时钟输入信号clk。对clk进行计数,当clk=10时,秒加1,当秒加到60时,分加1;当分加到60时,时加1;当时加到24时,全部清0,从新计时。4)首先

7、下载程序进行复位清零操作,电子钟从00:00:00计时开始。md21可以调整时钟的小时部分, md22可以调整分钟,步进为1。顶层设计分析:对于电子钟的设计,这里将采用自底向上的设计方法进行设计,因此首先需要进行电子钟的底层设计。本节将首先介绍电子钟的系统结构和模块划分,然后设计出顶层VHDL设计程序。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity szz is-端口定义port(clk:in std_logic; clk1:in std_logic; md1:in std_

8、logic; md2:in std_logic_vector(1 downto 0); ledout1:out std_logic; ledout2:out std_logic; speak:out std_logic; dout:out std_logic_vector(6 downto 0); selout:out std_logic_vector(2 downto 0); end szz;architecture one of szz issignal sel:std_logic_vector(2 downto 0);signal hou1:std_logic_vector(3 down

9、to 0);signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal seth1:std_logic_vector(3 downto 0);signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0);signal setm2:std_logic_vector(3 downto 0);sig

10、nal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);signal h1:std_logic_vector(3 downto 0);signal h2:std_logic_vector(3 downto 0);signal m1:std_logic_vector(3 downto 0);signal m2:std_logic_vector(3 downto 0);signal s1:std_logic_vector(3 downto 0);signal s2:std_logic_vector

11、(3 downto 0);begin-模6计数choice:process(clk1)beginif clk1'event and clk1='1' thenif sel="101" thensel<="000"elsesel<=sel+1;end if;end if;end process choice;-小时十位h110:process(clk,hou2,min1,min2,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif (hou

12、1="0010" and hou2="0011")and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") thenhou1<="0000"elsif hou1="0010"and hou2="0011"and md1='0' and md2="01" then-当时间为23点且处于校时状态时hou1

13、<="0000"elsif (hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001")or (hou2="1001"and md1='0' and md2="01") thenhou1<=hou1+1;end if;end if;end process h110;-小时个位h220:process(clk,min

14、1,min2,sec1,sec2,md1,md2,hou1)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") thenhou2<="0000"elsif hou2="1001"and(min1=

15、"0101" and min2="1001") and (sec1="0101" and sec2="1001") thenhou2<="0000"elsif (hou2="1001"and md1='0' and md2="01")or (hou1="0010"and hou2="0011") thenhou2<="0000"-md<='1'el

16、sif (min1="0101" and min2="1001") and (sec1="0101" and sec2="1001")or (md1='0' and md2="01") thenhou2<=hou2+1;-speak<=clk;end if;end if;end process h220;-分钟十位m110:process(clk,min2,sec1,sec2,md1,md2)beginif clk'event and clk='1&#

17、39; thenif (min1="0101" and min2="1001") and (sec1="0101" and sec2="1001") then min1<="0000"elsif min1="0101"and min2="1001"and (md1='0' and md2="00")thenmin1<="0000"elsif (min2="1001"an

18、d (sec1="0101" and sec2="1001") or (min2="1001"and md1='0' and md2="00")thenmin1<=min1+1;end if;end if;-end if;end process m110;-分钟个位m220:process(clk,sec1,sec2,md1,md2)beginif clk'event and clk='1' thenif min2="1001"and (sec1=&

19、quot;0101" and sec2="1001")thenmin2<="0000"elsif min2="1001"and (md1='0' and md2="00")thenmin2<="0000"else if (sec1="0101" and sec2="1001") or(md1='0' and md2="00")thenmin2<=min2+1;end if;en

20、d if;end if;end process m220;-秒十位s110:process(clk)beginif clk'event and clk='1' thenif (sec1="0101" and sec2="1001")thensec1<="0000"else if sec2="1001"thensec1<=sec1+1;end if;end if;end if;end process s110;-秒个位s220:process(clk)beginif clk'

21、;event and clk='1' thenif sec2="1001" thensec2<="0000"else sec2<=sec2+1;end if;end if;end process s220;-时间设置小时部分sethour1:process(clk,seth2)beginif clk'event and clk='1' thenif seth1="0010"and seth2="0011" thenseth1<="0000"

22、;elsif seth2="1001" thenseth1<=seth1+1;end if;end if;end process sethour1;-sethour2:process(clk,md1,md2,seth1)beginif clk'event and clk='1' thenif (seth1="0010"and seth2="0011")or seth2="1001"thenseth2<="0000"elsif md1='1' a

23、nd md2="00" thenseth2<=seth2+1;end if;end if;end process sethour2;-时间设置分钟部分setmin1:process(clk,setm2)beginif clk'event and clk='1' thenif setm1="0101"and setm2="1001"thensetm1<="0000"elsif setm2="1001"thensetm1<=setm1+1;end if;en

24、d if;end process setmin1;-setmin2:process(clk,md1,md2)beginif clk'event and clk='1'thenif setm2="1001"thensetm2<="0000"elsif md1='1' and md2="01"thensetm2<=setm2+1;end if;end if;end process setmin2;-闹铃speaker:process(clk1,hou1,hou2,min1,min2)be

25、ginif clk1'event and clk1='1'then-闹钟判断,一分钟响铃if seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 thenspeak<=clk; ledout1<=clk;else speak<='0'ledout1<='0'-整点报时,3秒钟响铃if "0000"=min1 and "0000"=min2 and sec1="0000" thenif sec2=&

26、quot;0000" or sec2="0001" or sec2="0010" thenspeak<='1'ledout2<=clk;else speak<='0'ledout2<='0'end if;end if;end if;end if;end process speaker;-译码显示部分disp:process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2)beginif sel=&q

27、uot;101" thenselout<="101"case h1 iswhen "0000"=>dout<="0111111"when "0001"=>dout<="0000110"when "0010"=>dout<="1011011"when others =>dout<="1000000"end case;elsif sel="100" then

28、selout<="100"case h2 iswhen "0000"=>dout<="0111111"when "0001"=>dout<="0000110"when "0010"=>dout<="1011011"when "0011"=>dout<="1001111"when "0100"=>dout<="1100110

29、"when "0101"=>dout<="1101101"when "0110"=>dout<="1111101"when "0111"=>dout<="0000111"when "1000"=>dout<="1111111"when "1001"=>dout<="1101111"when others=>dout<

30、="1000000"end case;elsif sel="011" thenselout<="011"case m1 iswhen "0000"=>dout<="0111111"when "0001"=>dout<="0000110"when "0010"=>dout<="1011011"when "0011"=>dout<="10

31、01111"when "0100"=>dout<="1100110"when "0101"=>dout<="1101101"when others=>dout<="1000000"end case;elsif sel="010" thenselout<="010"case m2 iswhen "0000"=>dout<="0111111"when &qu

32、ot;0001"=>dout<="0000110"when "0010"=>dout<="1011011"when "0011"=>dout<="1001111"when "0100"=>dout<="1100110"when "0101"=>dout<="1101101"when "0110"=>dout<=&qu

33、ot;1111101"when "0111"=>dout<="0000111"when "1000"=>dout<="1111111"when "1001"=>dout<="1101111"when others=>dout<="1000000"end case;elsif sel="001" thenselout<="001"case s1 iswhe

34、n "0000"=>dout<="0111111"when "0001"=>dout<="0000110"when "0010"=>dout<="1011011"when "0011"=>dout<="1001111"when "0100"=>dout<="1100110"when "0101"=>dout<

35、;="1101101"when others=>dout<="1000000"end case;elsif sel="000" thenselout<="000"case s2 iswhen "0000"=>dout<="0111111"when "0001"=>dout<="0000110"when "0010"=>dout<="1011011&quo

36、t;when "0011"=>dout<="1001111"when "0100"=>dout<="1100110"when "0101"=>dout<="1101101"when "0110"=>dout<="1111101"when "0111"=>dout<="0000111"when "1000"=>do

37、ut<="1111111"when "1001"=>dout<="1101111"when others=>dout<="1000000"end case;end if;if md1='0' then-计时时间显示和设置模式h1<=hou1;h2<=hou2;m1<=min1;m2<=min2;s1<=sec1;s2<=sec2;else -闹铃时间现实和设置模式h1<=seth1;h2<=seth2;m1<=setm1;m2<=setm2;s1<="1111"s2<="1111"end if;end process disp;end one;四、仿真分析各端口的功能为:clk,clk1端:时钟信号输入端。dout0.6:数码管选择端。Selout2.0:七段码译码器扫描接口输入端。md1,md1.0:三个输入端。ledout1,ledout2:显示灯。speak:蜂鸣器。图4.1 波形仿真图实验连线:clk接时钟信号CLK0,clk1接时钟信号CLK

温馨提示

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

评论

0/150

提交评论