数字日历电路的设计.docx
- 文档编号:29474938
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:20
- 大小:151.66KB
数字日历电路的设计.docx
《数字日历电路的设计.docx》由会员分享,可在线阅读,更多相关《数字日历电路的设计.docx(20页珍藏版)》请在冰豆网上搜索。
数字日历电路的设计
桂林电子科技大学信息科技学院
《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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 日历 电路 设计