数字逻辑电路课设—简易数字钟研发设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字逻辑电路课程设计报告

多功能数组钟设计

一、设计要求:

通过Maxplus II使用VHDL语言编写设计一款多功能数字钟,具体功能如下:

1、时钟时,分,秒分别显示且能正确计数。

2、整点报时,时钟在将要到达整点的最后十秒,给予蜂鸣提示。

3、校时,可以通过相应开关按钮对时钟的时分秒进行调整。

4、闹钟,用户可以预设闹铃时刻,当时间到达该时刻时,发出蜂鸣提示。

二、总体设计:

1、设计框图:

2、外部输入输出要求:

外部输入要求:输入信号有1024Hz时钟信号、低电平有效的秒清零信

号CLR、低电平有效的调分信号SETmin、低电平有效的调时信号

SEThour;

外部输出要求:整点报时信号SOUND(59分51/3/5/7秒时未500Hz

低频声,59分59秒时为1kHz高频声)、时十位显示信号h1(a,b,c,

d,e,f,g)、时个位显示信号h0(a ,b,c,d,e,f,g)、分十

位显示信号m1及分个位m0、秒十位s1及秒个位s0;数码管显示位选

信号SEL0/1/2等三个信号。

3、各模块功能:

1)FREQ分频模块:

整点报时用的1024Hz与512Hz的脉冲信号,这里的输入信号是

1024Hz信号,所以只要一个二分频即可;时间基准采用1Hz输入信

号直接提供(当然也可以分频取得,这里先用的是分频取得的信号,

后考虑到精度问题而采用硬件频率信号。

2)秒计数模块SECOND:

60进制,带有进位和清零功能的,输入为1Hz脉冲和低电平有效的

清零信号CLR,输出秒个位、时位及进位信号CO。

3)分计数模块MINUTE

60进制,带有进位和置数功能的,输入为1Hz脉冲和高电平有效的

使能信号EN,输出分个位、时位及进位信号CO。

4)时计数模块HOUR:

24进制,输入为1Hz脉冲和高电平有效的使能信号EN,输出分个

位、时位。

5)扫描模块SELTIME:

输入为秒(含个/十位)、分、时、扫描时钟CLK1K,输出为D和

显示控制信号SEL。

6)整点报时功能模块ALERT:

输入为分/秒信号,输出为高频声控Q1K和Q500。

7)译码显示功能模块DISPLAY:

输入为D,输出为Q。

4、VHDL程序设计:

1)分频模块(使用原理图输入):

2)秒模块程序:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity SECOND is

port(clk,clr:in std_logic;

sec1,sec0:out std_logic_vector(3 downto 0);

co:out std_logic);

end SECOND;

architecture SEC of SECOND is

begin

process(clk,clr)

variable cnt1,cnt0:std_logic_vector(3 downto 0);

begin

if clr='1' then

cnt1:="0000";

cnt0:="0000";

elsif clk'event and clk='1' then

if cnt1="0101" and cnt0="1000" then

co<='1';

cnt0:="1001";

elsif cnt0<"1001" then

cnt0:=cnt0+1;

else

cnt0:="0000";

if cnt1<"0101" then

cnt1:=cnt1+1;

else

cnt1:="0000";

co<='0';

end if;

end if;

end if;

sec1<=cnt1;

sec0<=cnt0;

end process;

end SEC;

3)分模块程序:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity MINUTE is

port(clk,en:in std_logic;

min1,min0:out std_logic_vector(3 downto 0);

co:out std_logic);

end MINUTE;

architecture MIN of MINUTE is

begin

process(clk,en)

variable cnt1,cnt0:std_logic_vector(3 downto 0);

begin

if clk'event and clk='1' then

if en='1' then

if cnt1="0101" and cnt0="1000" then

co<='1';

cnt0:="1001";

elsif cnt0<"1001" then

cnt0:=cnt0+1;

else

cnt0:="0000";

if cnt1<"0101" then

cnt1:=cnt1+1;

else

cnt1:="0000";

co<='0';

end if;

end if;

end if;

end if;

min1<=cnt1;

min0<=cnt0;

end process;

end MIN;

4)时模块程序:

library ieee;

相关文档
最新文档