数字日历电路的设计.docx

上传人:b****2 文档编号:17276486 上传时间:2023-07-23 格式:DOCX 页数:20 大小:151.66KB
下载 相关 举报
数字日历电路的设计.docx_第1页
第1页 / 共20页
数字日历电路的设计.docx_第2页
第2页 / 共20页
数字日历电路的设计.docx_第3页
第3页 / 共20页
数字日历电路的设计.docx_第4页
第4页 / 共20页
数字日历电路的设计.docx_第5页
第5页 / 共20页
数字日历电路的设计.docx_第6页
第6页 / 共20页
数字日历电路的设计.docx_第7页
第7页 / 共20页
数字日历电路的设计.docx_第8页
第8页 / 共20页
数字日历电路的设计.docx_第9页
第9页 / 共20页
数字日历电路的设计.docx_第10页
第10页 / 共20页
数字日历电路的设计.docx_第11页
第11页 / 共20页
数字日历电路的设计.docx_第12页
第12页 / 共20页
数字日历电路的设计.docx_第13页
第13页 / 共20页
数字日历电路的设计.docx_第14页
第14页 / 共20页
数字日历电路的设计.docx_第15页
第15页 / 共20页
数字日历电路的设计.docx_第16页
第16页 / 共20页
数字日历电路的设计.docx_第17页
第17页 / 共20页
数字日历电路的设计.docx_第18页
第18页 / 共20页
数字日历电路的设计.docx_第19页
第19页 / 共20页
数字日历电路的设计.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数字日历电路的设计.docx

《数字日历电路的设计.docx》由会员分享,可在线阅读,更多相关《数字日历电路的设计.docx(20页珍藏版)》请在冰点文库上搜索。

数字日历电路的设计.docx

数字日历电路的设计

桂林电子科技大学信息科技学院

《EDA技术与应用》实训报告

学号

姓名

指导教师:

2012年6月22日

 

题目:

数字日历电路的设计

1.系统设计

1.1设计要求

1.1.1设计任务

用EDA的方法设计一个数字日历

1.1.2性能指标

①用EDA实训仪的I/O设备和PLD芯片实现数字日历的设计。

②数字日历能够显示年、月、日、时、分、秒。

③数字日历有复位的功能,有校年、月、日和校时、分、秒的功能,通过一个开关来转换时校年、月、日还是校时、分、秒。

④此数字日历具有闹钟的功能,在6:

01将开启闹钟,用一个LED灯表示,可以在任意时刻关闭闹钟。

1.2设计思路及框图

1.2.1设计思路

日历主要由年月日模块和时分秒模块组成,由分频器提供脉冲,再加上一个控制模块实现控制选择校准时分秒还是校准年月日。

也可以实现时分秒和年月日的八秒自由转换。

再加上一个闹钟,在6:

01的时候闹钟开启,并由一个开关控制,在任意时间都可以关掉闹钟。

1.2.2总体设计框图

2各模块程序设计

2.1时分秒计时器模块:

modulecnt60(clrn,clk,q,j,cont);//秒和分计时

inputclrn,clk,j;

outputreg[7:

0]q;

outputregcont;

always@(posedgeclk^jornegedgeclrn)

begin

if(~clrn)q=0;

elsebegin

if(q=='h59)q=0;

elseq=q+1;

if(q[3:

0]=='ha)beginq[3:

0]=0;q[7:

4]=q[7:

4]+1;end

if(q=='h59)cont=1;

elsecont=0;end

end

endmodule

modulecnt24(clrn,clk,q,j,cont);//小时计时

inputclrn,clk,j;

outputreg[7:

0]q;

outputregcont;

always@(posedgeclk^jornegedgeclrn)

begin

if(~clrn)q=0;

elsebegin

if(q=='h23)q=0;

elseq=q+1;

if(q[3:

0]=='ha)beginq[3:

0]=0;q[7:

4]=q[7:

4]+1;end

if(q=='h23)cont=1;

elsecont=0;end

end

endmodule

2.2年月日模块

modulenyr2009(clrn,clk,jn,jy,jr,qn,qy,qr);//年月日模块

inputclrn,clk,jn,jy,jr;

output[15:

0]qn;

output[7:

0]qy,qr;

reg[15:

0]qn;

reg[7:

0]qy,qr;

regclkn,clky;

reg[7:

0]date;

regclkn1,clkn2,clkn3;

initialbeginclkn1=1;clkn2=1;clkn3=1;end

initialbeginqn='h2000;qy=1;qr=1;end

always@(posedge(clk^jr)ornegedgeclrn)//日计时模块

begin

if(~clrn)qr=1;

elsebegin

if(qr==date)qr=1;

elseqr=qr+1;

if(qr[3:

0]=='ha)begin

qr[3:

0]=0;qr[7:

4]=qr[7:

4]+1;end

if(qr==date)clky=1;

elseclky=0;end

end

always@(posedgeclky^jyornegedgeclrn)//月计时模块

begin

if(~clrn)qy=1;

elsebegin

if(qy=='h12)qy=1;

elseqy=qy+1;

if(qy[3:

0]=='ha)begin

qy[3:

0]=0;qy[7:

4]=qy[7:

4]+1;end

if(qy=='h12)clkn=1;

elseclkn=0;end

end

always

begin

case(qy)

'h01:

date='h31;

'h02:

begin

if((qn%4==0)&(qn%100!

=0)|(qn%400==0))date='h29;

elsedate='h28;end

'h03:

date='h31;

'h04:

date='h30;

'h05:

date='h31;

'h06:

date='h30;

'h07:

date='h31;

'h08:

date='h31;

'h09:

date='h30;

'h10:

date='h31;

'h11:

date='h30;

'h12:

date='h31;

default:

date='h30;

endcase

end

always@(posedge(clkn^jn)ornegedgeclrn)//年计时模块

begin

if(~clrn)qn[3:

0]=0;

elsebeginif(qn[3:

0]==9)qn[3:

0]=0;

elseqn[3:

0]=qn[3:

0]+1;

if(qn[3:

0]==9)clkn1=0;

elseclkn1=1;end

end

always@(posedgeclkn1ornegedgeclrn)

begin

if(~clrn)qn[7:

4]=0;

elsebeginif(qn[7:

4]==9)qn[7:

4]=0;

elseqn[7:

4]=qn[7:

4]+1;

if(qn[7:

4]==9)clkn2=0;

elseclkn2=1;end

end

always@(posedgeclkn2ornegedgeclrn)

begin

if(~clrn)qn[11:

8]=0;

elsebeginif(qn[11:

8]==9)qn[11:

8]=0;

elseqn[11:

8]=qn[11:

8]+1;

if(qn[11:

8]==9)clkn3=0;

elseclkn3=1;end

end

always@(posedgeclkn3ornegedgeclrn)

begin

if(~clrn)qn[15:

12]=2;

elseif(qn[15:

12]==9)qn[15:

12]=0;

elseqn[15:

12]=qn[15:

12]+1;

end

endmodule

2.3校时模块

modulemux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3);

inputk,j1,j2,j3;

outputregjm,jf,js,jr,jy,jn;

always

begin

if(k==0){jm,jf,js}={j1,j2,j3};

else{jr,jy,jn}={j1,j2,j3};

end

endmodule

2.4分频器模块

同时给时分秒和闹钟送入脉冲

moduleFENP(clk,newclk);

inputclk;

outputregnewclk;

reg[24:

0]cnter;

always@(posedgeclk)

begin

if(cnter<20000000)cnter=cnter+1;

elsecnter=0;

if(cnter<10000000)newclk=1;

else

newclk=0;

end

endmodule

2.5控制器模块

显示年月日和显示时分秒直接的转换控制

modulecontr(clk,k1,k2,k);

inputclk,k1,k2;

outputregk;

reg[3:

0]qc;

regrc;

always@(posedgeclk)

beginqc=qc+1;

if(qc<8)rc=0;

elserc=1;

case({k1,k2})

0:

k=rc;//八秒显示年月日八秒显示时分秒的自由转换

1:

k=0;//显示并且校准时分秒

2:

k=1;//显示并且校准年月日

3:

k=rc;

endcase

end

endmodule

2.6闹钟模块

modulenaozhong(qs,qf,led,zt);

inputzt;

input[7:

0]qs,qf;

outputled;

regled;

always

begin

if(qs=='h06&&qf=='h01)//6:

01闹钟开始闪烁

led=1;

else

led=0;

if(zt==1)led=0;//在任意时刻都可以关掉闹钟

end

endmodule

2.7数码管显示模块

modulemux_16(k,qm,qf,qs,qr,qy,qn,q);

inputk;

input[7:

0]qm,qf,qs,qr,qy;

input[15:

0]qn;

outputreg[31:

0]q;

always

begin

if(k==0)begin

q[31:

24]=0;

q[23:

0]={qs,qf,qm};end

elseq={qn,qy,qr};

end

endmodule

3.调试过程

在调试过程中出现很多问题,在时分秒里加入分频器可以实现计时,但是闹钟就不能实现1秒钟闪烁一次的功能,当给闹钟加上一个分频器的时候,时分秒模块也不能自动计时。

首先认识到必须只能有一个分频器,而且还能同时给两个提供脉冲。

所以就删除了时分秒里的分频器,在总的图中加入一个分频器,同时给两个提供脉冲,这样两个功能都可以同时实现。

4.功能测试

4.1测试仪器与设备

电脑,EDA实训仪。

4.2性能指标测试

S0、S1控制手动切换和自动切换,当S0、S1都往上拨或都往下拨都是自动切换,SO上拨S1下拨是显示并可以校准时分秒的,反之是显示和校准年月日的。

K8、K7、K6分别是校准年月日或时分秒的。

K0是复位功能

5实训心得体会

通过这次EDA实训,把课堂上学习的知识又巩固了一遍,也更加熟悉了对quartusII软件的使用。

这次我们小组选作数字日历这个题目,创新点在于闹钟模块,可以实现闹钟的功能。

通过小组的分工合作,把大家的思路整合在一起,在一起分析程序的使用,互相学习,更加理解了程序的用法。

EDA的功能很强大,去除了传统算法的复杂,是程序简单化,几个语句就可以实现想要的功能。

在我们所做的日历中,分别用到计数,分频,选择器这些最基本的功能,然后加以改善和创新,实现了日历的功能。

6.参考文献:

江国强.EDA技术与应用(第三版).北京:

电子工业出版社,2011

 

附录

附录1:

仿真波形图

1.分频器仿真波形图

2.时分秒仿真波形图

3.年月日仿真波形图

4.闹钟仿真波形图

附录2:

程序清单:

程序1

modulecnt60(clrn,clk,q,j,cont);//秒和分计时

inputclrn,clk,j;

outputreg[7:

0]q;

outputregcont;

always@(posedgeclk^jornegedgeclrn)

begin

if(~clrn)q=0;

elsebegin

if(q=='h59)q=0;

elseq=q+1;

if(q[3:

0]=='ha)beginq[3:

0]=0;q[7:

4]=q[7:

4]+1;end

if(q=='h59)cont=1;

elsecont=0;end

end

endmodule

程序2

modulecnt24(clrn,clk,q,j,cont);//小时计时

inputclrn,clk,j;

outputreg[7:

0]q;

outputregcont;

always@(posedgeclk^jornegedgeclrn)

begin

if(~clrn)q=0;

elsebegin

if(q=='h23)q=0;

elseq=q+1;

if(q[3:

0]=='ha)beginq[3:

0]=0;q[7:

4]=q[7:

4]+1;end

if(q=='h23)cont=1;

elsecont=0;end

end

endmodule

程序3

modulenyr2009(clrn,clk,jn,jy,jr,qn,qy,qr);//年月日模块

inputclrn,clk,jn,jy,jr;

output[15:

0]qn;

output[7:

0]qy,qr;

reg[15:

0]qn;

reg[7:

0]qy,qr;

regclkn,clky;

reg[7:

0]date;

regclkn1,clkn2,clkn3;

initialbeginclkn1=1;clkn2=1;clkn3=1;end

initialbeginqn='h2000;qy=1;qr=1;end

always@(posedge(clk^jr)ornegedgeclrn)//日计时模块

begin

if(~clrn)qr=1;

elsebegin

if(qr==date)qr=1;

elseqr=qr+1;

if(qr[3:

0]=='ha)begin

qr[3:

0]=0;qr[7:

4]=qr[7:

4]+1;end

if(qr==date)clky=1;

elseclky=0;end

end

always@(posedgeclky^jyornegedgeclrn)//月计时模块

begin

if(~clrn)qy=1;

elsebegin

if(qy=='h12)qy=1;

elseqy=qy+1;

if(qy[3:

0]=='ha)begin

qy[3:

0]=0;qy[7:

4]=qy[7:

4]+1;end

if(qy=='h12)clkn=1;

elseclkn=0;end

end

always

begin

case(qy)

'h01:

date='h31;

'h02:

begin

if((qn%4==0)&(qn%100!

=0)|(qn%400==0))date='h29;

elsedate='h28;end

'h03:

date='h31;

'h04:

date='h30;

'h05:

date='h31;

'h06:

date='h30;

'h07:

date='h31;

'h08:

date='h31;

'h09:

date='h30;

'h10:

date='h31;

'h11:

date='h30;

'h12:

date='h31;

default:

date='h30;

endcase

end

always@(posedge(clkn^jn)ornegedgeclrn)//年计时模块

begin

if(~clrn)qn[3:

0]=0;

elsebeginif(qn[3:

0]==9)qn[3:

0]=0;

elseqn[3:

0]=qn[3:

0]+1;

if(qn[3:

0]==9)clkn1=0;

elseclkn1=1;end

end

always@(posedgeclkn1ornegedgeclrn)

begin

if(~clrn)qn[7:

4]=0;

elsebeginif(qn[7:

4]==9)qn[7:

4]=0;

elseqn[7:

4]=qn[7:

4]+1;

if(qn[7:

4]==9)clkn2=0;

elseclkn2=1;end

end

always@(posedgeclkn2ornegedgeclrn)

begin

if(~clrn)qn[11:

8]=0;

elsebeginif(qn[11:

8]==9)qn[11:

8]=0;

elseqn[11:

8]=qn[11:

8]+1;

if(qn[11:

8]==9)clkn3=0;

elseclkn3=1;end

end

always@(posedgeclkn3ornegedgeclrn)

begin

if(~clrn)qn[15:

12]=2;

elseif(qn[15:

12]==9)qn[15:

12]=0;

elseqn[15:

12]=qn[15:

12]+1;

end

endmodule

程序4

modulemux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3);//校时模块

inputk,j1,j2,j3;

outputregjm,jf,js,jr,jy,jn;

always

begin

if(k==0){jm,jf,js}={j1,j2,j3};

else{jr,jy,jn}={j1,j2,j3};

end

endmodule

程序5

moduleFENP(clk,newclk);//分频器模块

inputclk;

outputregnewclk;

reg[24:

0]cnter;

always@(posedgeclk)

begin

if(cnter<20000000)cnter=cnter+1;

elsecnter=0;

if(cnter<10000000)newclk=1;

else

newclk=0;

end

endmodule

程序6

modulecontr(clk,k1,k2,k);//控制器模块

inputclk,k1,k2;

outputregk;

reg[3:

0]qc;

regrc;

always@(posedgeclk)

beginqc=qc+1;

if(qc<8)rc=0;

elserc=1;

case({k1,k2})

0:

k=rc;//八秒显示年月日八秒显示时分秒的自由转换

1:

k=0;//显示并且校准时分秒

2:

k=1;//显示并且校准年月日

3:

k=rc;

endcase

end

endmodule

程序7

modulenaozhong(qs,qf,led,zt);//闹钟模块

inputzt;

input[7:

0]qs,qf;

outputled;

regled;

always

begin

if(qs=='h06&&qf=='h01)//6:

01闹钟开始闪烁

led=1;

else

led=0;

if(zt==1)led=0;//在任意时刻都可以关掉闹钟

end

endmodule

程序8

modulemux_16(k,qm,qf,qs,qr,qy,qn,q);//数码管显示模块

inputk;

input[7:

0]qm,qf,qs,qr,qy;

input[15:

0]qn;

outputreg[31:

0]q;

always

begin

if(k==0)begin

q[31:

24]=0;

q[23:

0]={qs,qf,qm};end

elseq={qn,qy,qr};

end

endmodule

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2