VHDL多功能数字钟实现程序.docx

上传人:b****5 文档编号:11546644 上传时间:2023-03-19 格式:DOCX 页数:27 大小:20.46KB
下载 相关 举报
VHDL多功能数字钟实现程序.docx_第1页
第1页 / 共27页
VHDL多功能数字钟实现程序.docx_第2页
第2页 / 共27页
VHDL多功能数字钟实现程序.docx_第3页
第3页 / 共27页
VHDL多功能数字钟实现程序.docx_第4页
第4页 / 共27页
VHDL多功能数字钟实现程序.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

VHDL多功能数字钟实现程序.docx

《VHDL多功能数字钟实现程序.docx》由会员分享,可在线阅读,更多相关《VHDL多功能数字钟实现程序.docx(27页珍藏版)》请在冰豆网上搜索。

VHDL多功能数字钟实现程序.docx

VHDL多功能数字钟实现程序

1、程序包模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

PACKAGEpacIS

procedureadd_year(oldyear0,oldyear1:

instd_logic_vector;

signalnewyear0:

outstd_logic_vector;

signalnewyear1:

outstd_logic_vector);

procedureadd_month(oldmonth0,oldmonth1:

instd_logic_vector;

signalnewmonth0:

outstd_logic_vector;

signalnewmonth1:

outstd_logic_vector);

proceduresub_month(oldmonth0,oldmonth1:

instd_logic_vector;

signalnewmonth0:

outstd_logic_vector;

signalnewmonth1:

outstd_logic_vector);

proceduresub_year(oldyear0,oldyear1:

instd_logic_vector;

signalnewyear0:

outstd_logic_vector;

signalnewyear1:

outstd_logic_vector);

procedureFeb_add_day(oldday0,oldday1:

instd_logic_vector;

Ty0:

instd_logic_vector(1downto0);

Ty1:

instd_logic;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector);

procedureFeb_sub_day(oldday0,oldday1:

instd_logic_vector;

Ty0:

instd_logic_vector(1downto0);

Ty1:

instd_logic;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector);

procedureoddmonth_add_day(oldday0,oldday1:

instd_logic_vector;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector);

procedureoddmonth_sub_day(oldday0,oldday1:

instd_logic_vector;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector);

procedureevenmonth_add_day(oldday0,oldday1:

instd_logic_vector;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector);

procedureevenmonth_sub_day(oldday0,oldday1:

instd_logic_vector;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector);

procedureaddsec_addmin(oldtime0,oldtime1:

instd_logic_vector;

signalnewtime0:

outstd_logic_vector;

signalnewtime1:

outstd_logic_vector);

proceduresubsec_submin(oldtime0,oldtime1:

instd_logic_vector;

signalnewtime0:

outstd_logic_vector;

signalnewtime1:

outstd_logic_vector);

procedureaddhour(oldhour0,oldhour1:

instd_logic_vector;

signalnewhour0:

outstd_logic_vector;

signalnewhour1:

outstd_logic_vector);

proceduresubhour(oldhour0,oldhour1:

instd_logic_vector;

signalnewhour0:

outstd_logic_vector;

signalnewhour1:

outstd_logic_vector);

endpac;

packagebodypacis

procedureadd_year(oldyear0,oldyear1:

instd_logic_vector;

signalnewyear0:

outstd_logic_vector;

signalnewyear1:

outstd_logic_vector)is

begin

if(oldyear0="1001"andoldyear1/="1001")then

newyear0<="0000";newyear1<=oldyear1+'1';

elsenewyear0<=oldyear0+'1';

endif;

if(oldyear0="1001"andoldyear1="1001")then

newyear0<="0000";newyear1<="0000";

endif;

endadd_year;

procedureadd_month(oldmonth0,oldmonth1:

instd_logic_vector;

signalnewmonth0:

outstd_logic_vector;

signalnewmonth1:

outstd_logic_vector)is

begin

if(oldmonth0="0010"andoldmonth1="0001")then

newmonth0<="0001";newmonth1<="0000";

elsifoldmonth0="1001"then

newmonth0<="0000";newmonth1<=oldmonth1+'1';

elsenewmonth0<=oldmonth0+'1';

endif;

endadd_month;

proceduresub_year(oldyear0,oldyear1:

instd_logic_vector;

signalnewyear0:

outstd_logic_vector;

signalnewyear1:

outstd_logic_vector)is

begin

ifoldyear0="0000"then

ifoldyear1="0000"then

newyear1<="1001";

elsenewyear1<=oldyear1-'1';

endif;

newyear0<="1001";

elsenewyear0<=oldyear0-'1';

endif;

endsub_year;

proceduresub_month(oldmonth0,oldmonth1:

instd_logic_vector;

signalnewmonth0:

outstd_logic_vector;

signalnewmonth1:

outstd_logic_vector)is

begin

if(oldmonth0="0001"andoldmonth1="0000")then

newmonth0<="0010";newmonth1<="0001";

elsif(oldmonth0="0000"andoldmonth1="0001")then

newmonth0<="1001";newmonth1<=oldmonth1-'1';

elsenewmonth0<=oldmonth0-'1';

endif;

endsub_month;

procedureFeb_add_day(oldday0,oldday1:

instd_logic_vector;

Ty0:

instd_logic_vector(1downto0);

Ty1:

instd_logic;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector)is

begin--平年2月天数加

if(oldday0="1000"andoldday1="0010")then

if((Ty1='0'andTy0="00")or(Ty1='1'andTy0="10"))then

newday0<=oldday0+'1';

else

newday0<="0001";newday1<="0000";

endif;

elsif(oldday0="1001"andoldday1="0010")then

newday0<="0001";newday1<="0000";

elsif(oldday0="1001")then

newday0<="0000";newday1<=oldday1+'1';

elsenewday0<=oldday0+'1';

endif;

endFeb_add_day;

procedureFeb_sub_day(oldday0,oldday1:

instd_logic_vector;

Ty0:

instd_logic_vector(1downto0);

Ty1:

instd_logic;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector)is

begin--平年2月减

if(oldday0="0000"oroldday0="0001")andoldday1="0000"then

if((Ty1='0'andTy0="00")or(Ty1='1'andTy0="10"))then

newday0<="1001";newday1<="0010";

elsenewday0<="1000";newday1<="0010";

endif;

elsif(oldday0="0000"andoldday1/="0000")then

newday0<="1001";newday1<=oldday1-'1';

elsenewday0<=oldday0-'1';

endif;

endFeb_sub_day;

procedureoddmonth_add_day(oldday0,oldday1:

instd_logic_vector;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector)is

begin--大月加

if(oldday0="0001"andoldday1="0011")then

newday0<="0001";newday1<="0000";

elsifoldday0="1001"then

newday0<="0000";newday1<=oldday1+'1';

elsenewday0<=oldday0+'1';

endif;

endoddmonth_add_day;

procedureoddmonth_sub_day(oldday0,oldday1:

instd_logic_vector;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector)is

begin--大月减

if(oldday0="0001"oroldday0="0000")andoldday1="0000"then

newday0<="0001";newday1<="0011";

elsifoldday0="0000"andoldday1/="0000"then

newday0<="1001";newday1<=oldday1-'1';

elsenewday0<=oldday0-'1';

endif;

endoddmonth_sub_day;

procedureevenmonth_add_day(oldday0,oldday1:

instd_logic_vector;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector)is

begin--小月加

if(oldday0="0000"andoldday1="0011")then

newday0<="0001";newday1<="0000";

elsifoldday0="1001"then

newday0<="0000";newday1<=oldday1+'1';

elsenewday0<=oldday0+'1';

endif;

endevenmonth_add_day;

procedureevenmonth_sub_day(oldday0,oldday1:

instd_logic_vector;

signalnewday0:

outstd_logic_vector;

signalnewday1:

outstd_logic_vector)is

begin--小月减

if(oldday0="0001"oroldday0="0000")andoldday1="0000"then

newday0<="0000";newday1<="0011";

elsif(oldday0="0000"andoldday1/="0000")then

newday0<="1001";newday1<=oldday1-'1';

elsenewday0<=oldday0-'1';

endif;

endevenmonth_sub_day;

procedureaddsec_addmin(oldtime0,oldtime1:

instd_logic_vector;

signalnewtime0:

outstd_logic_vector;

signalnewtime1:

outstd_logic_vector)is

begin--秒、分加

if(oldtime0="1001")then

newtime0<="0000";

if(oldtime1="0101")then

newtime1<="0000";

elsenewtime1<=oldtime1+'1';

endif;

elsenewtime0<=oldtime0+'1';

endif;

endaddsec_addmin;

proceduresubsec_submin(oldtime0,oldtime1:

instd_logic_vector;

signalnewtime0:

outstd_logic_vector;

signalnewtime1:

outstd_logic_vector)is

begin--秒、分减

if(oldtime0="0000")then

newtime0<="1001";

if(oldtime1="0000")then

newtime1<="0101";

elsenewtime1<=oldtime1-'1';

endif;

elsenewtime0<=oldtime0-'1';

endif;

endsubsec_submin;

procedureaddhour(oldhour0,oldhour1:

instd_logic_vector;

signalnewhour0:

outstd_logic_vector;

signalnewhour1:

outstd_logic_vector)is

begin--时加

if(oldhour0="1001")then

newhour0<="0000";

newhour1<=oldhour1+'1';

elsenewhour0<=oldhour0+'1';

endif;

if(oldhour0="0011"andoldhour1="0010")then

newhour0<="0000";newhour1<="0000";

endif;

endaddhour;

proceduresubhour(oldhour0,oldhour1:

instd_logic_vector;

signalnewhour0:

outstd_logic_vector;

signalnewhour1:

outstd_logic_vector)is

begin--时减

if(oldhour0="0000")then

newhour0<="1001";

newhour1<=oldhour1-'1';

elsenewhour0<=oldhour0-'1';

endif;

if(oldhour0="0000"andoldhour1="0000")then

newhour0<="0011";newhour1<="0010";

endif;

endsubhour;

endpac;

2、顶层模块

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

--Uncommentthefollowinglinestousethedeclarationsthatare

--providedforinstantiatingXilinxprimitivecomponents.

--libraryUNISIM;

--useUNISIM.VComponents.all;

entitytimekeeperis

port(up,setpin,upclk,f1000:

instd_logic;

pass,stop,enable:

instd_logic;

a0,a1,b0,b1,c0,c1,d0:

outstd_logic_vector(3downto0);

z:

outstd_logic;

sp:

outstd_logic);

endtimekeeper;

architectureBehavioraloftimekeeperis

componentfenpinport(f1000:

instd_logic;

second_wave:

bufferstd_logic);

endcomponent;

componenth_m_sport(clk0,clk1,ce:

instd_logic;

sec0,sec1:

bufferstd_logic_vector(3downto0);

set:

instd_logic_vector(3downto0);

up:

instd_logic;

min0,min1:

bufferstd_logic_vector(3downto0);

hour0,hour1:

bufferstd_logic_vector(3downto0);

z,ov:

outstd_logic);

endcomponent;

componentdateport(clk0,clk1,ce:

instd_logic;

set:

instd_logic_vector(3downto0);

up:

instd_logic;

mon0,mon1,year0,year1:

instd_logic_vector(3downto0);

date0,date1:

bufferstd_logic_vector(3downto0);

ov:

outstd_logic);

endcomponent;

componentyear_monport(clk0,clk1,ce:

instd_logic;

set:

std_logic_vector(3downto0);

up:

instd_logic;

mon0,mon1:

bufferstd_logic_vector(3downto0);

year0,year1:

bufferstd_logic_vector(3downto0));

endcomponent;

componentledport(set:

std_logic_vector(3downto0);

sec0,sec1,min0,min1,hour0,hour1:

instd_logic_vector(3downto0);

a0,a1,b0,b1,c0,c1:

outstd_logic_vector(3downto0);

nm1,nm0,nh1,nh0:

std_logic_vector(3downto0);

date0,date1,mon0,mon1,year0,year1:

instd_logic_vector(3downto0));

endcomponent;

componentalarmport(clk1,ce:

instd_logic;

set:

instd_logic_vector(3downto0);

up:

instd_logic;

min0,min1:

bufferstd_logic_vector(3downto0):

="0000";

hour0,hour1:

bufferstd_logic_vector(3downto0):

="0000");

endcomponent;

componentwe

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1