数字日历电路的设计EDA实训.docx

上传人:b****7 文档编号:10093648 上传时间:2023-02-08 格式:DOCX 页数:16 大小:493.02KB
下载 相关 举报
数字日历电路的设计EDA实训.docx_第1页
第1页 / 共16页
数字日历电路的设计EDA实训.docx_第2页
第2页 / 共16页
数字日历电路的设计EDA实训.docx_第3页
第3页 / 共16页
数字日历电路的设计EDA实训.docx_第4页
第4页 / 共16页
数字日历电路的设计EDA实训.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数字日历电路的设计EDA实训.docx

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

数字日历电路的设计EDA实训.docx

数字日历电路的设计EDA实训

成绩

批阅教师

日期

桂林电子科技大学

实训报告

2016-2017学年第1学期

 

学院海洋信息工程学院

课程EDA综合实训

姓名钟朝林

学号1416030218

指导老师覃琴

日期2016/12/29

实训题目:

数字日历电路的设计

1概述

1.1设计要求

1.1.1设计任务

设计并制作一台数字日历。

1.1.2性能指标要求

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

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

③用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年、月、日(如20080101),然后在另一时间段内显示时、分、秒(如00123625),两个时间段能自动倒换。

④数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时,依此类推。

1.2总体设计基本原理及框图

1.2.1基本原理

日历主要由年月日模块、时分秒模块、控制模块、显示模块、校时模块组成。

采用3个公用按钮j1、j2、和j3完成时分秒或年月日的校时,用8只七段数码管分时完成时分秒或年月日的显示。

设计电路的计时器模块(jsq24)用于完成一天的24小时计时;年月日模块接收计时器模块送来的“天”脉冲进行计数,得到日月年的显示结果,控制模块产生控制信号k,控制数码显示器显示年月日,还是时分秒,或者自动轮流显示;校时选择模块在k信号的控制下,选择将j1、j2和j3这3个校时按钮产生的信号是送到计时器模块的校秒、校分和校时输入端,还是送到年月日模块的校天、校月、校年输入端;显示选择模块在k信号的控制下,选择是将计时器模块的时、分、秒状态信号,还是将年月日模块的年、月、日状态信号送到数码管显示器显示。

1.2.2总体框图

2系统软件设计分析

2.1年月日模块

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

inputclrn,clk,jn,jy,jr;

outputreg[15:

0]qn;

reg[15:

0]qn1;

outputreg[7:

0]qy,qr;

regclkn,clky;

reg[7:

0]date;

regclkn1,clkn2,clkn3;

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

initialbeginqn='h2011;qn1=2011;qy=1;qr=1;end

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

begin

if(~clrn)qr=1;

elsebegin

if(qr==date)beginqr=1;clky=1;end

elsebeginqr=qr+1;clky=0;end

if(qr[3:

0]=='ha)begin

qr[3:

0]=0;qr[7:

4]=qr[7:

4]+1;end

end

end

always@(posedge(clky^jy)ornegedgeclrn)//月计时模块

begin

if(~clrn)qy=1;

elsebegin

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

elsebeginqy=qy+1;clkn=0;end

if(qy[3:

0]=='ha)begin

qy[3:

0]=0;qy[7:

4]=qy[7:

4]+1;end

end

end

always

begin

case(qy)

'h01:

date='h31;

'h02:

begin

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

=0)|(qn1%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)beginqn[3:

0]=1;qn1=2011;end

elsebeginif(qn[3:

0]==9)qn[3:

0]=0;

elsebeginqn[3:

0]=qn[3:

0]+1;qn1=qn1+1;end

if(qn[3:

0]==9)clkn1=0;

elseclkn1=1;end

end

always@(posedgeclkn1ornegedgeclrn)

begin

if(~clrn)qn[7:

4]=1;

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[7:

4]+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.2时分秒模块

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

inputclk,clrn,j;

outputreg[7:

0]q;

outputregcout;

always@(posedgeclk^jornegedgeclrn)

begin

if(~clrn)q=0;

elsebegin

if(q=='h59)beginq=0;cout=1;end

elsebeginq=q+1;cout=0;end

if(q[3:

0]=='ha)begin

q[3:

0]=0;q[7:

4]=q[7:

4]+1;end

end

end

endmodule

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

inputclk,clrn,j;

outputreg[7:

0]q;

outputregcout;

always@(posedgeclk^jornegedgeclrn)

begin

if(~clrn)q=0;

elsebegin

if(q=='h23)beginq=0;cout=1;end

elsebeginq=q+1;cout=0;end

if(q[3:

0]=='ha)begin

q[3:

0]=0;q[7:

4]=q[7:

4]+1;end

end

end

endmodule

2.3控制模块

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.4显示模块

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

2.5校时模块

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.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分频器模块

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

3系统测试(调试)

3.1测试仪器与设备

计算机,EDA实训仪。

3.2性能指标测试

k1、k2控制分屏显示,当k1k2为00或11时是自动显示,控制数码显示用8秒时间显示年、月、日,另外8秒时间显示时、分、秒;当k1k2为01时,仅显示时、分、秒,同时j1、j2和j3校秒、校分和校时,当k1k2为10时,仅显示年、月、日,同时j1、j2和j3校年、月、日。

clkn清零功能。

3.3结果分析

各个功能的实现分开设计。

对于时分秒,则采用24进制和60进制,对于年月日的设计复杂点。

特别是日,因为每个月的日子都不一样。

闰年的更加特殊,测试的时候经常出现2月有30天,后来发现是程序出的问题,反复修改,最后总算行了。

4波形发生器的设计

4.1设计原理框图

4.2测试与仿真

5实训总结

通过这次EDA综合实训,我把课堂上学习的知识又巩固了一遍,也更加熟悉了对quartusII这款软件的使用,本次实训我们小组选择了数字日历电路设计这个题目,实验过程中出现了很多问题,比如不显示数字;小时到日期无法进位;闰年2月日期不对等等问题,这主要是我们对程序的不熟悉还有课堂的知识学得不够造成的,也明白了书本上的程序不一定是对的,错误真的一大堆,后来在同学的帮助下,明白了错误所在。

我们实验的创新点在于闹钟模块,可以实现闹钟的功能。

这次实验通过小组之间的分工合作,把大家的思路整合在一起,大家一起讨论问题所在,对程序的认识更深了。

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

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

这次实验,我收获了很多,懂得了团队合作一起做实验一起讨论问题,也发现了自己的不足,感觉自己所学的知识总算是有用处了。

感谢我的队友还有帮助我的同学和指导老师!

6参考文献

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

电子工业出版社,2013

学号

姓名

工作量(%)

1416030216

田如然

34

1416030217

甘华日

33

1416030218

钟朝林

33

附录

波形仿真图

年月日模块仿真

时分秒模块仿真

结果截图

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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