多功能数字钟的设计与实现
学院名称: 计算机学院 专业班级: 通信工程 学生姓名: 学生学号: 指导老师: 曾 宇
2012年6月25日
一、 设计任务及要求:
(1) 拥有正常的时、分、秒计时功能。
(2) 能利用实验板上的按键实现校时、校分及秒清零功能。 (3) 能利用实验板上的扬声器做整点报时。 (4) 闹钟功能。
(5) 在QUARTUS Ⅱ中采用层次化设计方法进行设计。
(6) 完成全部电路设计后在实验板上下载,验证设计课题的正确性。
二、 多功能数字钟的总体设计方案
根据总体设计框图,可以将整个系统分成6个模块来实现,分别是计时模块、校时模块、整点报时模块,分频模块,动态显示模块,闹钟模块。
设计总图:
1. 计时模块
该模块的设计相对简单,使用一个二十四进制和两个六十进制计数器级联,构成数字钟的基本框架。二十四进制的计数器用于计时,六十进制计数器用于计分和计秒。只要给秒计数器一个1Hz的时钟脉冲,则可以进行正常计时。分计数器以秒计数器的进位作为计数脉冲,小时计数器以分计数器的进位作为计数脉冲。
1
cnt24jh[3..0]clkql[3..0]qh[3..0]tcinstVCCjh[7..4]cnt60jm[3..0]clkql[3..0]clrqh[3..0]tcjm[7..4]NOTinst15inst1
(24进制计数器构成时计数器,60进制计数器构成的秒、分计数器)
24进制的仿真图:
2
60进制的仿真图
以下是计时模块设计VHDL语言: (1)library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt24 is
port(clk:in std_logic;
ql,qh:out std_logic_vector(3 downto 0); tc:out std_logic); end cnt24;
architecture one of cnt24 is
begin
process(clk)
variable iql,iqh:std_logic_vector(3 downto 0); begin
if clk'event and clk='1' then iql:=iql+1;
if iql=\ iqh:=iqh+1; iql:=\ end if;
3
if (iqh=\ then tc<='0'; iqh:=\ end if;
end if;
ql<=iql; qh<=iqh;
end process; end one;
(2)library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt60 is
port(clk,clr:in std_logic;
ql,qh:buffer std_logic_vector(3 downto 0); tc:out std_logic ); end cnt60;
architecture behavor of cnt60 is begin
tc<='0' when(clk='1' and ql=\ process(clk,clr,ql,qh)
variable iql,iqh:std_logic_vector(3 downto 0); begin
if(clr='0'or (iql=\ iql:=\ iqh:=\
else if(clk'event and clk='1')then iql:=iql+1;
if(iql=\ iql:=\ iqh:=qh+1; end if; end if; end if;
ql<=iql;qh<=iqh; end process; END behavor;
4