您好,欢迎来到东饰资讯网。
搜索
您的当前位置:首页eda数字钟课程设计报告

eda数字钟课程设计报告

来源:东饰资讯网


吉林农业大学

EDA课程设计报告

题目:数字电子钟

学院:信息技术学院

专业:电子信息科学与技术

姓名:

指导教师:

2010年06月23日

一、 设计目的

1、掌握VHDL的编程方法,掌握数字钟设计原理。

2、通过课程设计,要掌握使用EDA工具设计方法,包括图形设计输入、编译、软件仿真、下载和硬件仿真等全过程。

3、综合运用专业及基础知识,解决实际工程技术问题的能力。 4、掌握各类计数器以及他们相连接的设计方法。 5、掌握多个数码管的现实原理及方法。 6、掌握电子设计自动化的层次化设计方法。 7、掌握VHDL语言的设计思想。

二、设计要求

设计一个能进行时、分、秒计时的十二小时制或二十四小时制的数字钟,并具有定时与报时功能,每逢整点,产生报时音报时。

三、 数字钟的设计要求和结构

该数字钟可以实现3个功能:计时功能、整点报时功能和重置时间功能,因此有3个子模块:计时、报时(alarm1)、重置时间(s1、m1、h1、d1)。其中计时模块有4部分构成:秒计时器(second1)、分计时器(minute1)和时计时器(hour1) 秒计时器(second1)是由一个60进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,秒计时器清0;set 为置数信号,当set为0时,秒计时器置数,置s1的值。clk为驱动秒计时器的时钟,sec为秒计时器的输出,ensec为秒计时器的进位信号,作为下一级的时钟输入信号。 分计时器(minute1)是由一个60进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,分计时器清0;set 为置数信号,当set为0时,分计时器置数,置m1的值。 clkm为驱动分计时器工作的时钟,与ensec相连接;min为分计时器的输出;enmin为分计时器的进位信号,作为下一级的时钟输入信号。

时计时器(hour1)是由一个24进制的计数器构成的,具有清0、置数和计数功能。其中reset为清0信号,当reset为0时,时计时器清0;set 为置数信号,当set为0时,时计时器置数,置h1的值。 clkh为驱动时计时器工作的时钟,与enmin相连接;hour为时计时器的输出;enhour为时计时器的进位信号,作为下一级的时钟输入信号 报时模块(ALARM)的功能是当整点(将min作为该模块的输入信号,min==00)时,alarm输入高电平,并且持续一分钟。

四、各功能模块 1秒计时器

Library ieee;--秒计时器

Use ieee.std_logic_11.all; Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; Entity second1 is

Port(clks,reset:in std_logic;

Sec1,sec2: buffer std_logic_vector(3 downto 0); --秒输出端

Ensec: out std_logic); --秒计时器的进位,用来驱动分计时器 End;

Architecture a of second1 is Begin

Process(clks,reset) Begin

If reset='0' then Sec1<=\"0000\"; Sec2<=\"0000\";

ensec<='0'; --对秒计时器清0 Elsif clks'event and clks='1' then

if (sec1= \"1001\" and sec2= \"0101\") then Sec1<=\"0000\"; Sec2<=\"0000\";

ensec<='1'; --重复计数并产生进位 elsif (sec1= \"1001\")then Sec1<=\"0000\";

Sec2<=sec2+1; ensec<='0'; else

sec1<=sec1+1;

ensec<='0'; --以驱动下一级 end if; end if;

End process; End;

波形仿真图:

2、分计时器

Library ieee;--分钟计时

Use ieee.std_logic_11.all; Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; Entity minute1 is

Port(clkm, reset:in std_logic;

Min1,Min2:buffer std_logic_vector(3 downto 0); --秒输出端

Enmin:out std_logic); --秒计时器的进位,用来驱动分计时器 End;

Architecture a of minute1 is Begin

Process(clkm,reset ) Begin

If reset='0' then Min1<=\"0000\"; Min2<=\"0000\";

enmin<='0'; --对计时器清0 Elsif clkm'event and clkm='1' then

if (Min1= \"1001\" and Min2= \"0101\") then Min1<=\"0000\"; Min2<=\"0000\";

enmin<='1'; --重复计数并产生进位 elsif (Min1= \"1001\")then Min1<=\"0000\";

Min2<= Min2+1; enmin<='0'; else

min1<=min1+1;

enmin<='0'; --以驱动下一级

end if; end if;

End process; End;

波形仿真图:

3、时计时器

Library ieee;

Use ieee.std_logic_11.all; Use ieee.std_logic_arith.all;

Use ieee.std_logic_unsigned.all;---小时计时 Entity hour1 is

Port(clkh,reset:in std_logic;

hou1,hou2:buffer std_logic_vector(3 downto 0)); End;

Architecture a of hour1 is Begin

Process(clkh,reset) Begin

If reset='0' then

hou1<=\"0000\";

hou2<=\"0000\"; --对时计时器清0 Elsif clkh'event and clkh='1' then

if (hou1= \"0011\" and hou2= \"0010\") then hou1<=\"0000\"; hou2<=\"0000\"; --重复计数

elsif (hou1= \"1001\")then hou1<=\"0000\";

hou2<=hou2+1; else

hou1<=hou1+1; end if; end if;

End process; End;

波形仿真图:

4、报时模块

Library ieee;---闹钟警报模块 Use ieee.std_logic_11.all; Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; Entity alarm1 is

Port(reset: in std_logic; min1,min2:in std_logic_vector(3 downto 0);

Alarm:out std_logic); --输出的报时信号 End;

Architecture a of alarm1 is Begin

Alarm<='1';

if (min1=\"0000\" and min2=\"0000\" and reset='1') Alarm<='0'; else null; end if; end;

5、元件例化顶层设计

Library ieee;

Use ieee.std_logic_11.all; Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; Entity eda_clock is

Port(clk,reset:in std_logic;

Sec1,sec2,min1,min2,hou1,hou2:buffer std_logic_vector(3 downto 0)); End;

Architecture one of eda_clock is

Component second1 --秒元件的例化 Port(clks,reset: in std_logic;

Sec1,sec2:buffer std_logic_vector(3 downto 0); Ensec:out std_logic); End Component;

Component minute1 --分元件的例化 Port(clkm,reset: in std_logic;

min1,min2:buffer std_logic_vector(3 downto 0); Enmin:out std_logic); End Component;

Component hour1 --时元件的例化 Port(clkh,reset: in std_logic;

hou1,hou2:buffer std_logic_vector(3 downto 0)); End Component;

signal enm,enh:std_logic; --秒分、分时之间的连接信号 begin

u1:second1 port map(reset=>reset,

sec1=>sec1, sec2=>sec2,clks=>clk, ensec=>enm); u2:minute1 port map(reset=>reset,

min1=>min1, min2=>min2, clkm=>enm,enmin=>enh); u3:hour1 port map(reset=>reset, hou1=>hou1, hou2=>hou2,clkh=>enh); end;

波形仿真:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuoyibo.cn 版权所有 湘ICP备2023022426号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务