《EDA技术与应用》实训报告.docx
- 文档编号:5941788
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:20
- 大小:296.75KB
《EDA技术与应用》实训报告.docx
《《EDA技术与应用》实训报告.docx》由会员分享,可在线阅读,更多相关《《EDA技术与应用》实训报告.docx(20页珍藏版)》请在冰豆网上搜索。
《EDA技术与应用》实训报告
桂林电子科技大学信息科技学院
《EDA技术与应用》实训报告
学号
姓名
指导教师:
2012年6月20日
数字日历电路的设计
1.系统设计
1.1设计要求
①通过编程下载至实训箱实现万年历的设计制作;
②数字日历能够显示年、月、日和时、分和秒;
③用EDA实训仪上的8只八段数码管显示年、月、日和时、分、秒,每过8秒分别现实两个时间段能自动倒换;
④数字日历具有复位和校准年、月、日、时、分、秒的按钮,有锁定时分秒的按键,同时加了一个现实闹钟的程序,即在设置的时间,LED显示一分钟,按键可以暂停。
1.1.1设计任务
设计并制作一台数字日历,添加闹钟功能。
1.1.2技术要求
基于VerilogHDL编写电路设计
2.总体思路
根据学校EDA实验设备的输入/输出接口的容限,本设计采用8只七断数码管分时完成时,分,秒,年,月,日的显示。
设计电路的计时器模块用于完成一天中24小时计时;年月日模块接受24小时计时器模块送来的“天”脉冲进行计数,得到日,月,年的显示结果;控制模块产生控制信号K,控制数码显示器显示年月日,和时分秒的显示或自动切换显示。
校时选择模块在k信号的控制下,选择将j1,j2,j3这三个校时按钮产生的信号是送到计时器模块的校秒,校时,校分的输入端,还是送到年月诶模块的校天,校月,校年输入端;显示选择模块在k信号的控制下,选择是将24小时模块信号,还是将年月日模块信号送到数码显示器显示。
闹钟模块用于在设置时间用LED代替真正的闹钟,灯光一闪一闪表示闹钟响,加一按键,用于控制闹钟的灭。
24小时计数器电路图
整个系统电路里模块有主要有年月日模块,24小时计数器模块,闹钟模块,显示模块,信号k控制模块,校时选择模块,还原选择模块;而24小时计数器模块中又分有分频模块,六十进制计数器模块,二十四进制计数器模块。
2.1设计方案
2.1.1各个模块程序的设计
1:
分频器
20万分频
2千万分频
modulegen(clk,cout);
inputclk;
reg[24:
0]q;
outputregcout;
always@(posedgeclk)
begin
if(q==20000000-1)q=0;
elseq=q+1;
if(q==20000000-1)cout=1;
elsecout=0;
end
endmodule
modulegen_mb(clk,cout);
inputclk;
reg[24:
0]q;
outputregcout;
always@(posedgeclk)
begin
if(q==200000-1)q=0;
elseq=q+1;
if(q==200000-1)cout=1;
elsecout=0;
end
endmodule
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)q=0;
elseq=q+1;
if(q[3:
0]=='ha)begin
q[3:
0]=0;q[7:
4]=q[7:
4]+1;end
if(q=='h59)cout=1;
elsecout=0;end
end
endmodule
3:
二十四进制计数器模块
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)q=0;
elseq=q+1;
if(q[3:
0]=='ha)begin
q[3:
0]=0;q[7:
4]=q[7:
4]+1;end
if(q=='h23)cout=1;
elsecout=0;end
end
endmodule
4:
100进制计数器模块
modulecnt100(clk,clrn,j,q,cout);
inputclk,clrn,j;
outputreg[7:
0]q;
outputregcout;
reg[7:
0]flay;
always@(j)
begin
if(j)flay=0;
elseflay=1;
end
always@(posedgeclkornegedgeclrn)
begin
if(~clrn)q=0;
elseif(flay==0)begin
if(q==99)q=0;
elseq=q+1;
if(q[3:
0]=='hff)begin
q[3:
0]=0;q[7:
4]=q[7:
4]+1;end
if(q==99)cout=1;
elsecout=0;end
end
endmodule
5:
年月日模块
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
6:
信号k控制模块
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:
校时选择模块
modulemux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3,);
inputj1,j2,j3;
inputk;
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
8:
24小时计数器
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
9:
.显示器选择器
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
10:
闹钟模块
naozhong(qs,qf,led,zt);
inputzt;
input[7:
0]qs,qf;
outputled;
regled;
always
begin
if(qs=='h06&&qf=='h01)
led=1;
else
led=0;
if(zt==1)led=0;
end
endmodule
3.制作与调试过程
在实验中参考上课中学的万年历,在原有的基础上添加了一个闹钟功能,用LED代替实际的闹钟,在设置的时间内闪烁1分钟,又添加姨暂停按键,实现闹钟关闭功能,由于能力有限,没能加上其他功能的创新,是此次实训设计的缺憾,在调试过程中也比较顺利,在经过一段时间的调试后,基本就能实现功能,而主要时间用在了对原来的程序理解上。
4.实训心得体会
通过这次实训,使我对EDA有了很多的了解,同时对EDA试验箱内部的工作原理有了更深一步的理解,学习了硬件引脚绑定过程,以及绑定的一些基本常识,并动手完成了绑定,这样不仅拓宽我们的知识面,增强动手能力和实践能力,同时还培养我们的分析和解决实际问题的能力。
由于刚刚学习了EDA,自己做的功能又比较简单,所以在实训过程中基本没遇到什么太大的困难,但是,同样也提高了自己的动手动脑能力,进一步加深了对EDA编程的理解,熟练了一下软件编程和硬件的结合,对以后熟练使用EDA有很大的好处,毕竟是自己动手开始做了东西,而不是一味的参照老师的上课内容,虽然比较简单。
这次实训给自己的带来的东西真的很多,提高了以后自己动手去练习EDA的兴趣。
5.参考文献
【1】江国强.EDA技术与应用(第三版).电子工业出版社,2011年7月
【2】谢自美.电子线路设计·实验·测试(第二版).武汉:
华中科技大学出版社,2000
附录:
仿真波形图(部分模块)
附录2:
程序清单
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
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
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
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
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
modulenaozhong(qs,qf,led,zt);
inputzt;
input[7:
0]qs,qf;
outputled;
regled;
always
begin
if(qs=='h06&&qf=='h01)
led=1;
else
led=0;
if(zt==1)led=0;
end
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA技术与应用 EDA 技术 应用 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)