多功能数字钟的电路设计
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了。