基于vhdl数字电子时钟。
华侨大学 2009级电子信息工程a班。
学生:刘飞学号:0916103045
1实验目的及要求。
a:锻炼自己的实际动手能力,学习如何编写相关程序,加强实践。
b:设计一个24进制电子时钟,并实现其基本校时功能。
2.时钟的功能。
a、按键消抖,整点报时,**闹钟,秒表,时分秒校时,秒的清零,达到23时59分59秒。
3.设计方案。
a它由分频器、计数器、译码器显示器和校时扫描,使能等电路组成。
b秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照24进制规律计数。计数器的输出分别经译码器送显示器按键切换显示。计时出现误差时,可以用校时电路校时、校分。
c可设置闹钟,当达到闹钟时间,蜂鸣器就会****。当到达整点时蜂鸣器会发出5秒钟的叫声,完成其整点报时功能。
d秒表部分由其单独模块构成。其设置与时钟类似,构成相对简单,可仿照时钟完成。
e总体讲它是由各模块分块构成,(自我感觉来说首先确定其功能想象出原理图,最后一步一步地添加各个功能,这对于我们初学者来说十分重要)。
f将各个模块首先一部分一部分进行**,不断改正,连接起来,想成一个整体。如果需要相关的门及触发器,可以通过软件平台中查找,尤其是消抖需要的触发器。
g最后进行硬件测试,并反复调时,观察其计时是否准确,各个模块的功能是否正确。如果出现错误,要进行自顶向下的查找,同时更要结合其功能模块,查错,最后完成时钟。
4.原理图为。
5.模块(各个模块**结果正常)
a.时分秒模块都相对简单,其介绍就不做多说。
b.校时功能是在分秒模块内添加一个控制键,让其进行调时分时,完成其功能。
c.闹钟模块设置,利用一个切换键让闹钟与其他显示进行切换显示,其设定功能与时分共用。即设置多功能按键。
d.秒表模块是单独设置的,它也利用相关的多功能按键。
e.切换显示模块稍微简单,只需添加控制开关即可,但要开关要与相关的功能键对应。
f.译码显示模块是对前面需要译码的信息进行译码显示,此模块设置为最后连接的模块,可节约资源,减少成本。
g.扫描模块主要是应对我们硬件不能同时显示而设置的,相对难度大一点,因为它要考虑到输出的数码显示使能端,和扫描频率大小的设定这这都需要自己亲自测试,毕竟自己第一次使用这种类型的fpga开发板。
h.分频模块,由于开发板里面只有一个时钟源50m,我们若要得到相关频率就必须对其进行分频,输出。
i.消抖主要通过d触发器完成其功能,并且接上一定的时钟信号。
5.具体程序如下。
1. 秒模块。
进位信号正常,为60进制,较分信号也正常,实现60进制带有进位和清零功能的秒计数模块second,输入为1hz脉冲和高电平有效的清零信号clr,输出秒个位、十位及进位信号co,。
library ieee;
use use
entity second is
port(mode1 :in std_logic;
clk,reset,semin:in std_logic;
sec1,sec0:out std_logic_vector(3 downto 0);
enmin:out std_logic);
end second;
architecture art of second is
signal enmin_2:std_logic;
signal co:std_logic;
beginprocess(clk,semin,mode1)
variable cnt1,cnt0:std_logic_vector(3 downto 0);
beginif mode1='0'then enmin_2<=(semin and clk); end if;
if reset='1' then
cnt1:="0000";
cnt0:="0000";
elsif clk'event and clk='1' then
if cnt1="0101" and cnt0="1001"then
co<='1';
cnt1:="0000";
cnt0:="0000";
elsif cnt0<"1001"then
cnt0:=cnt0+1;
co<='0';
elsecnt0:="0000";
if cnt1<"0101" then
cnt1:=cnt1+1;
co<='0';
elsecnt1:="0000";
co<='0';
end if;
end if;
end if;
sec1<=cnt1;
sec0<=cnt0;
enmin<=(co or enmin_2);
end process;
end art;
**结果正常。
2.分模块。
进位信号正常,为60进制,较时信号也正常。
library ieee;
use use
entity minute10 is
port(en1 : in std_logic;
min1,min0 :out std_logic_vector(3 downto 0);
enhour: out std_logic);
end minute10;
architecture art of minute10 is
signal enmin_2:std_logic;
signal bco:std_logic;
beginprocess (en1)
variable cnt1,cnt0:std_logic_vector(3 downto 0);
beginif en1'event and en1='1' then
if cnt1="0101"and cnt0="1001" then
bco<='1';
cnt1:="0000";
cnt0:="0000";
elsif cnt0<"1001"then
cnt0:=cnt0+1;
bco<='0';
elsecnt0:="0000";
if cnt1<"0101"then
cnt1:=cnt1+1;
bco<='0';
elsecnt1:="0000";
bco<='0';
end if;
end if;
end if;
min1<=cnt1;
min0<=cnt0;
enhour<=bco;
end process;
end art;
**结果正常。
3.时模块。
进位信号正常,为24进制。
library ieee;
use use
entity hour is
port( mode3 :in std_logic;
en2 :in std_logic;
h1,h0 :out std_logic_vector(3 downto 0));
end hour;
architecture hour_arc of hour is
beginprocess(en2)
variable cnt1,cnt0:std_logic_vector(3 downto 0);
begin
if en2'event and en2='1' then
if cnt1="0010"and cnt0="0011" then
cnt0:="0000";
cnt1:="0000";
elsif cnt0<"1001"then
cnt0:=cnt0+1;
elsecnt0:="0000";
cnt1:=cnt1+1;
end if;
end if;
h1<=cnt1;
h0<=cnt0;
end process;
end hour_arc;
**结果正常。
4.第一个切换模块(不同于第二个)
此模块主要用于闹钟显示与时间显示的切换。
library ieee;
use entity alarm is
port(amin1,amin0,ah1,ah0,min1,min0,h1,h0 :in std_logic_vector(3 downto 0);
clk:in std_logic;
mode6in std_logic;
a1,a0,b1,b0out std_logic_vector(3 downto 0));
end alarm;
architecture art of alarm is
beginprocess (mode6,min1,min0,h1,h0,amin1,amin0,ah1,ah0)
beginif mode6='0' then
a1<=min1;
a0<=min0;
b1<=h1;
b0<=h0;
else a1<=amin1;
a0<=amin0;
b1<=ah1;
b0<=ah0
数电课程设计
两位十进制计数显示器。一 设计内容。本设计主要采用芯片有555定时器 74162计数器 7448七段字形译码器,以及七段led数码管。能过以上元器件的组合,构成一个两位十进制计数显示器,实现循环依序显示0 99的数字。要求每位同学独立设计电路原理图,制作pcb电路板并印制上自己的学号。二 电路原理。...
数电课程设计
数字电子技术基础 课程设计报告。数字万年历。班级 姓名 签字。学号 日期 目录。1.设计任务及要求3 2 设计思路与说明3 2.1电路图及原理说明3 2.1.1年部分计数器3 2.1.2月部分计数器5 2.1.3日期部分计数器6 2.1.4 星期部分计数器7 3 电路调试基本过程遇到的问题及调试结果...
数电课程设计
数字电子课程设计报告。题目 电子生日蜡烛。系班 电气0805 组员 焦雪菲08291140齐龙。杨超08291158 指导老师 王强。电路原理图。一 系统功能概述。如图1所示,这个电路产生了一套基于led的电子生日蜡烛。这种蜡烛与吹灭蜡制蜡烛一样具有相同的乐趣,并且它是可重复利用的,可改进的以及低碳...