当前位置:文档之家› 基于VHDL语言的数字钟设计

基于VHDL语言的数字钟设计

hour2<=hour2+1;
if(hour2=11) then
hour2<=0;
end if;
else
minute<=minute+1;
end if;
else
second<=second+1;
end if;
end if;
if(change='1')then--12/24 style change
if (hour2=23 and minute=59 and second=59) then
clk2<='0';
end if;
end process;
p1:process(clk1)
begin
if(clk1'event and clk1='1') then
if(last='1') then--back to the time ......
if (second=0) then
second<=59;
alarm:in std_logic;
cat:out std_logic_vector(5 downto 0);
spk:out std_logic;
light:out std_logic_vector(6 downto 0));
end memclock;
architecture behave of memn
tmp2<=0;
else
tmp2<=tmp2+1;
end if;
end if;
end process;
p5:process(tmp1)
begin
clk1<='1';
else
clk1<='0';
end if;
if tmp2=999 then
clk2<='1';
else
if(min=59) then
min<=0;
else
min<=min+1;
end if;
end if;
if(hfix='1') then--alarm ho change
if(ho=23) then
ho<=0;
else
ho<=ho+1;
end if;
end if;
end if;
if(minute=0 and second<3) then--right time ring
when 2=>cat<="101111";temp<=m0;
when 3=>cat<="110111";temp<=m1;
when 4=>cat<="111011";temp<=s0;
when 5=>cat<="111101";temp<=s1;
when 0=>cat<="111110";temp<=h0;
基于VHDL语言的数字钟设计
信息与通信工程学院
数字电路与逻辑设计
实验题目:基于VHDL语言的数字钟设计
班级:
姓 名:
学号:
日期:
指 导 教 师:
一.摘要
数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。它的基本功能是计时,计时周期为24小时,显示满刻度23时59分59秒;或者计时周期为12小时并配有上下午指示,显示满刻度为11时59分59秒,通过六个七段数码管显示出来。
when others =>light<="0000000";
End case;
end if;
end process;
end behave;
--made by liaoning
7.时序仿真波形图
仿真的部分,之前已经说过,计数器和数码管显示是本实验核心的部分,所以将这两部分做下仿真,仿真得到预期的效果,再加入分频器下载到实验板上进行调试,之后再加入其他输入输出的功能。
24小时制可切换,12小时制下上下午有不同显示(上午发光二极管不亮,
下午发光二极管亮)。
4.可手动校对时间,能对时和分进行校正。
5.整点报时功能。
6.闹铃功能,可设置闹铃时间,当计时到预定时间时,蜂鸣器发出闹铃信号,
闹铃时间为5秒,可提前终止闹铃。
7.可认为设置时间为倒计时模式
8.可切到屏保模式,六个数码管显示为“supper”字样。
else
second<=second-1;
end if;
else
if (second=59) then--normal time rules
second<=0;
if(minute=59) then
minute<=0;
hour1<=hour1+1;
if(hour1=23) then
hour1<=0;
end if;
fix
ch
clarm
ch
逻辑流程图




是是

6.完整的源程序
6数码管显示时钟,带调时功能,能设置闹钟,闹钟响可人为停止,整点报时,12/24小时制手动切换,可人为设置时间为倒计时,并修正了一个11:59:59(或23:59:59)跳变到00:00:00的bug(即11:59:59跳变到00:00:00时会先跳到11:00:00再跳到00:00:00的错误),不足是防抖动设计缺少经验。
signal hour,hour1:integer range 0 to 23;
signal hour2:integer range 0 to 11;
signal h0,h1,m0,m1,s0,s1:integer range 0 to 15;
signal tmp2:integer range 0 to 999;
计数器仿真:观察时分秒的进制是否正确。
数码管仿真:观察数码管的显示是否正确。
8.故障和故障分析
故障1:验收时出现的bug,在11:59:59跳到00:00:00时会先显示11::00:00再显示00:00:00。
本实验主要在理论分析和具体的软硬件实现上,基于VHDL语言编写源代码,使用软件Quartus II进行处理,再配合具体电路连接,实现一个多功能的数字钟。
关键词:数字钟;VHDL语言;七段数码管
2.设计任务要求
设计实现一个数字钟。
小时制,显示刻度从0:0:0到23:59:59。
小时制,显示刻度从0:0:0到11:59:59。
spk<='1';
elsif(minute=min and hour=ho and second <5) then--alarm clock
if(alarm='1') then
spk<='0';
elsif(alarm='0')then
spk<='1';
end if;
else
spk<='0';
end if;
signal temp:integer range 0 to 15;
signal j:integer range 0 to 5;
signal clk1,clk2:std_logic;
signal minute:integer range 0 to 59;
signal second:integer range 0 to 59;
--made by supper
library ieee;
use memclock is
port(
clk:in std_logic;
mfix,hfix:in std_logic;
change:in std_logic;
last:in std_logic;
ld0:out std_logic;
name :in std_logic;
3.设计思路和总体设计框图
1.设计思路
程序设计主要分为四个模块,第一部分,做分频器,分出一秒的时钟用来计数,再分出一个中频时钟用来扫描显示数码管,我选择的频率是50kHZ;第二部分,做计数器,秒随时钟沿计数进1,分钟随着秒计数60次进一,而小时,由于有12/24小时制的切换,时的计数有两个信号来进行,一个信号hour1是分60进一在0到23循环计数,另一个信号hour2是分60进一在0到11循环计数;第三部分,做扫描显示六个七段数码管,通过选通信号6矢量cat来依次使六个数码管亮,数码管每两位对应相应的时分秒;第四部分,其他输入输出单元,比如数字钟的时间修正,闹铃等,这些都是基于前三个部分,做起来难度不大。
if(minute=0) then
minute<=59;
hour1<=hour1-1;
if(hour1=0) then
hour1<=23;
end if;
hour2<=hour2-1;
if(hour2=0) then
hour2<=11;
end if;
else
minute<=minute-1;
end if;
h0<=(hour-h1)/10;
H1<=hour rem 10;
M0<=(minute-m1)/10;
M1<=minute rem 10;
S0<=(second-s1)/10;
相关主题