多功能数字钟的电路设计

数字钟的VHDL设计

1,设计任务和要求:

设计任务:设计一个可以显示时、分、秒的数字钟。具体要求如下:

第二脉冲由实验箱上的时钟信号分频产生;

定时计数器的24进制定时电路;

时间可以手动修正,时间和分钟可以分别修正;

报时;

2程序代码和相应的波形

秒1(以十六进制和10表示的秒数)

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体秒1是

Port( clks,clr:in STD _ logic;

Secs,Secg:out STD _ logic _ vector(3 down to 0);

cout 1:out STD _ logic);

end second 1;

second1的架构a是

开始

进程(时钟、时钟)

变量ss,SG:STD _ logic _ vector(3 down to 0);

变量co:STD _ logic;

开始

如果clr='1 '那么ss:= " 0000 ";SG:= " 0000 ";

Elsif clks事件和clks='1 '然后

如果ss="0101 ",sg="1001 ",那么ss:= " 0000 ";SG:= " 0000 ";co:= ' 1 ';

elsif sg & lt“1001”那么SG:= SG+1;co:= ' 0 ';

elsif sg="1001 "那么SG:= " 0000 ";ss:= ss+1;co:= ' 0 ';

结束if;

结束if;

cout 1 & lt;= co

Secs & lt= ss

Secg & lt= sg

结束进程;

结束a;

Min1(十六进制的子计数器和十进制的ALM 10可以告诉小时)

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体min1是

Port(clkm,clr:in STD _ logic;

mins,Ming:buffer STD _ logic _ vector(3 down to 0);

enmin,alarm:out STD _ logic);

结束;

min1的架构a为

开始

流程(clkm,clr)

变量ms,mg:STD _ logic _ vector(3 down to 0);

变量so,ALM:STD _ logic;

开始

如果clr='1 ',那么ms:= " 0000 ";mg:= " 0000 ";

Elsif clkm '事件和clkm='1 '则

如果ms="0101 "且mg="1001 "则ms:= " 0000 ";mg:= " 0000 ";所以:= ' 1 ';ALM:= ' 1 ';

elsif mg & lt“1001”那么mg:= mg+1;所以:= ' 0 ';ALM:= ' 0 ';

elsif mg="1001 "那么mg:= " 0000 ";ms:= ms+1;所以:= ' 0 ';ALM:= ' 0 ';

结束if;

结束if;

警报& lt= alm

enmin & lt=所以;

分钟& lt= ms

明& lt= mg

结束进程;

结束a;

Hour1(四进制和二进制的小时计数器)

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体小时1是

Port(clkh,clr:in STD _ logic;

hours,hourg:out std_logic_vector(3向下到0));

结束;

hour1的架构a是

开始

进程(clkh,clr)

变量hs,hg:STD _ logic _ vector(3 down to 0);

开始

如果clr='1 ',那么hs:= " 0000 ";Hg:= " 0000 ";

elsif clkh ' event and clkh = ' 1 ' then

如果hs="0010 ",hg="0011 ",那么hs:= " 0000 ";Hg:= " 0000 ";

elsif hg & lt“1001”那么Hg:= Hg+1;

elsif hg="1001 "那么Hg:= " 0000 ";hs:= hs+1;结束if;

结束if;

小时& lt= hs

hourg & lt= hg

结束进程;

结束;

校对

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体madapt是

Port(en,clk,secin,m 1:in STD _ logic;

minset:out STD _ logic);

结束;

马达普的建筑a是

开始

过程(en,m1)

开始

如果en='1 ',则

如果m1='1 ',那么minset & lt= clk

else minset & lt= secin结束if;

else minset & lt= secin

结束if;

结束进程;

结束;

上学时间

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ unsigned . all;

实体hadapt是

Port(en,clk,minin,h 1:in STD _ logic;

hourset:out STD _ logic);

结束;

哈达普的建筑a是

开始

过程(en,h1)

开始

如果en='1 ',则

如果h1='1 ',则hourset & lt= clk

else hourset & lt= minin结束if;

else hourset & lt= minin

结束if;

结束进程;

结束;

Topclock(组件实例化顶层文件)

图书馆ieee

使用IEEE . STD _ logic _ 1164 . all;

使用IEEE . STD _ logic _ arith . all;

使用IEEE . STD _ logic _ unsigned . all;

实体topclock是

Port(clk,clr,en,m1,h 1:in STD _ logic;

alarm:out STD _ logic;

secs,secg,mins,ming,hours,hourg:buffer STD _ logic _ vector(3 down to 0));

结束;

topclock的架构之一是

组件秒1

Port( clks,clr:in STD _ logic;

secs,secg:buffer STD _ logic _ vector(3 down to 0);

cout 1:out STD _ logic);

末端组件;

组件min1

Port(clkm,clr:in STD _ logic;

mins,Ming:buffer STD _ logic _ vector(3 down to 0);

enmin,alarm:out STD _ logic);

末端组件;

组件小时1

Port(clkh,clr:in STD _ logic;

hours,hourg:buffer std_logic_vector(3下降到0));

末端组件;

组件madapt

Port(en,m1,clk,secin:in STD _ logic;

minset:out STD _ logic);

末端组件;

组件hadapt

Port(en,h1,clk,Minin:in STD _ logic;

hourset:out STD _ logic);

末端组件;

信号a、b、c、d:STD _ logic;

开始

u1:second1端口映射(clr = & gtclr,

secs = & gtsecs,secg = & gtsecg,clks = & gtclk,cout1= >a);

u2:min1端口映射(clr = & gtclr,alarm = & gt报警,

分钟= & gtmins,ming = & gt明,clkm = & gtb,enmin = & gtc);

u3:hour1端口映射(clr = & gtclr,

hours = & gthours,hourg = & gthourg,clkh = & gtd);

u4:madapt端口映射(en = & gten,m1= >m1,clk = & gtclk,secin = & gta,minset = & gtb);

u5:hadapt端口映射(en = & gten,h1= >h1,clk = & gtclk,minin = & gtc,hourset = & gtd);

结束;

3电路图

4实验经验

所有的程序都是为你写的。你只需要自己模拟一下,下载到实验盒里,就OK了。