吉林农业大学
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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务