设计说明:
1.系统顶层框图:
各模块电路功能如下:
1.秒计数器、分计数器、时计数器组成最基本的数字钟,其计数输出送7段译码电路由数码管显示.
2.基准频率分频器可分频出标准的1HZ频率信号,用于秒计数的时钟信号;分频出4HZ频率信号,用于校时、校分的快速递增信号;分频出64HZ频率信号,用于对按动“校时”,“校分”按键的消除抖动.
2.多功能数字钟结构框图:
一、系统功能概述
已完成功能
1.完成时/分/秒的依次显示并正确计数,利用六位数码管显示;
2.时/分/秒各段个位满10正确进位,秒/分能做到满60向前进位,有系统时间清零功能;
3.定时器:实现整点报时,通过扬声器发出高低报时声音;
4.时间设置,也就是手动调时功能:当认为时钟不准确时,可以分别对分/时钟进行调整;
5.闹钟:实现分/时闹钟设置,在时钟到达设定时间时通过扬声器响铃.有静音模式.
待改进功能:
1. 系统没有万年历功能,正在思考设计方法.
2. 应添加秒表功能.
二、系统组成以及系统各部分的设计
1.时计数模块
时计数模块就是一个2位10进制计数器,记数到23清零.
VHDL的RTL描述如下:
----cnt_h.vhd
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt_h is
port(en,clk,clr:in std_logic;
dout:out std_logic_vector(7 downto 0);
c:out std_logic);
end cnt_h;
architecture rtl of cnt_h is
signal t:std_logic_vector(7 downto 0);
begin
process(en,clk,clr)
variable t:std_logic_vector(7 downto 0);
begin
if en='1' then --异步使能
if clk 'event and clk='1' then
t:=t+1;
if t(3 downto 0)=X"A" then --个位等于10则十位加1
t(7 downto 4):=t(7 downto 4)+1;
t(3 downto 0):=X"0"; --个位清零
end if;
if t>X"23" then --大于23清零
t:=X"00";
end if;
end if;
if clr='1' then --异步清零
t:=X"00";
end if;江铃汽车集团公司
end if;
dout<=t;
end process;
end rtl;
时计数器模块仿真波形如下
从仿真波形可知,当计数到23时,下一个时钟上升沿到来时就清零了,符合设计要求.
时计数模块框图如下
2.分及秒计数模块
分及秒计数模块也是一个2位10进制计数器,记数到59清零.
VHDL的RTL描述如下:
东南三菱library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt_s is
port(en,clk,clr:in std_logic;
dout:buffer std_logic_vector(7 downto 0);
c:out std_logic);
hudend cnt_s;
architecture rtl of cnt_s is
begin
process(en,clk,clr)
begin
if en='1' then
if clr='1' then --异步清零
dout<=X"00";
elsif clk 'event and clk='1' then
if dout(3 downto 0)<9 then
dout(3 downto 0)<=dout(3 downto 0)+1;
c<='0';
elsif dout(7 downto 4)<5 then
dout(3 downto 0)<=X"0";
dout(7 downto 4)<=dout(7 downto 4)+1;
else
dout<=X"00";
c<='1';
end if;
end if;
else dout<="ZZZZZZZZ";
end if;
end process;
end rtl;
分和秒计数器模块仿真波形如下
从仿真波形可知,当计数到59时,下一个时钟上升沿到来时就清零了,并且产生进位信号,符合设计要求.
分和秒计数模块框图如下
鄂尔多斯车管所电话3.按键消抖动模块
按键消抖动有很多方案,这里选择的是计数消抖,即只当有效电平到来后开始计数,当计数值大于一定值后再输出该有效电平,否则不输出,从而达到消抖目的.
VHDL的RTL描述如下:
library ieee;
use ieee.std_logic_1164.all;
entity haoin is
port(din,clk:in std_logic;
dout:out std_logic);
end haoin;
architecture rtl of haoin is
begin
process(din)
variable t: integer range 0 to 63:=0;
begin
if din='1' then
if clk 'event and clk='1'then
t:=t+1;
if t>10 then
dout<='1';t:=t-1;
else dout<='0';
end if;
end if;
else dout<='0';t:=0;
end if;
end process;
end rtl;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity ring is
port(
clk: in std_logic;
clk500: in std_logic;
今日国内油价 clk1k:in std_logic;
beep:out std_logic);
end ring;
architecture rtl of ring is
begin
process(clk)
variable t: std_logic;
variable n: integer range 0 to 15:=0;
begin
if clk 'event and clk='1' then
t:=not t;n:=n+1;
end if;
if t='1' and n<11 then
beep<=clk500;
elsif n=11 then
beep<=clk1k;
else beep<='Z';
end if;
劳斯莱斯堵医院应急通道 end process;
end rtl;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity clock is
port(
SA: in std_logic;
SB: in std_logic;
SC: in std_logic;
SD: in std_logic;
clk1: in std_logic;
dout: buffer std_logic_vector(23 downto 0);
--seg_data:out std_logic_vector(7 downto 0);
--seg_co米:out std_logic_vector(3 downto 0);
beep: out std_logic
--led:out std_logic_vector(3 downto 0)
发布评论