您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > EDA-verilog-多功能电子时钟
一、实验目的1)掌握VHDL语言的基本运用2)掌握QuartusII的简单操作并会使用EDA实验箱3)掌握一个基本EDA课程设计的操作二、多功能电子钟功能设计1)有时、分、秒计数显示功能,小时为24进制,分钟和秒为60进制以24小时循环计时2)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间3)有整点报时功能;三、整体设计思想3.1性能指标及功能设计1)时、分、秒计时器时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从1计数到60,此时秒显示器将显示00、01、02、...、59、00;每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。即当数字钟运行到23点59分59秒时,当秒计时器在接受一个秒脉冲,数字钟将自动显示00点00分00秒。2)校正“小时”、“分”其原理:SWHSWM=01时,电路完成“校时”功能;SWHSWM=10时电路完成“校分”功能;在SWHSWM=11或00时,电路正常走时。3)整点报时其原理:在59分51秒、53秒、55秒、57秒电子钟扬声器发出500HZ低音,59秒发出1KHZ高音。3.2总体方框图3.3系统详细设计1)时、分、秒计时模块:秒计时模块modulevs60(SH,SL,CP60S,CPS);output[3:0]SH;output[3:0]SL;outputCP60S;inputCPS;reg[3:0]SH;reg[3:0]SL;always@(posedgeCPS)beginif((SH[3:0]==4'b0101)&(SL[3:0]==4'b1001))beginSH[3:0]=4'b0000;SL[3:0]=4'b0000;endelseif(SL[3:0]==4'b1001)beginSL[3:0]=4'b0000;SH[3:0]=SH[3:0]+1'b1;endelsebeginSH[3:0]=SH[3:0];SL[3:0]=SL[3:0]+1'b1;endendassignCP60S=~(~SH[3]&SH[2]&~SH[1]&SH[0]&SL[3]&~SL[2]&~SL[1]&SL[0]&~CPS);endmodule模块仿真符号生成如图:仿真波形如图:分计时模块modulevm60(MH,ML,CP60M,CPM);output[3:0]MH;output[3:0]ML;outputCP60M;inputCPM;reg[3:0]MH;reg[3:0]ML;always@(posedgeCPM)beginif((MH[3:0]==4'b0101)&(ML[3:0]==4'b1001))beginMH[3:0]=4'b0000;ML[3:0]=4'b0000;endelseif(ML[3:0]==4'b1001)beginML[3:0]=4'b0000;MH[3:0]=MH[3:0]+1'b1;endelsebeginMH[3:0]=MH[3:0];ML[3:0]=ML[3:0]+1'b1;endendassignCP60M=~(~MH[3]&MH[2]&~MH[1]&MH[0]&ML[3]&~ML[2]&~ML[1]&ML[0]&~CPM);endmodule模块仿真符号生成如图仿真波形如图时计时模块modulevh24(HH,HL,CPH);output[3:0]HH;output[3:0]HL;inputCPH;reg[3:0]HH;reg[3:0]HL;always@(posedgeCPH)beginif((HH[3:0]==4'b0010)&(HL[3:0]==4'b0011))beginHH[3:0]=4'b0000;HL[3:0]=4'b0000;endelseif(HL[3:0]==4'b1001)beginHL[3:0]=4'b0000;HH[3:0]=HH[3:0]+1'b1;endelsebeginHH[3:0]=HH[3:0];HL[3:0]=HL[3:0]+1'b1;endendendmodule模块仿真符号生成如图仿真波形如图时、分、秒整体仿真模块生成图:2)校时模块:modulevjaoshi(CPH,CPM,CP60M,CP60S,CPS,SWH,SWM);inputCP60M,CP60S,CPS,SWH,SWM;outputCPH,CPM;regCPH,CPM;always@(SWHorSWMorCP60SorCP60MorCPS)begincase({SWH,SWM})2'b11:beginCPH=CP60M;CPM=CP60S;end//电路正常走时2'b01:beginCPH=CPS;CPM=CP60S;end//电路校时2'b10:beginCPM=CPS;CPH=CP60M;end//电路校分2'b00:beginCPH=CP60M;CPM=CP60S;end//电路正常走时endcaseendendmodule时分秒及校正波形仿真:3)报时模块:modulevbaoshi(MH,ML,SH,SL,CP1k,FU);input[3:0]MH,ML,SH,SL;inputCP1k;outputFU;regFU;regCP500;wirePM;assignPM=MH[2]&MH[0]&ML[3]&ML[0]&SH[2]&SH[0]&SL[0];always@(posedgeCP1k)beginCP500=~CP500;endalways@((SH&SL)orPM)beginif(SL[3]&&PM)beginFU=CP1k;endelseif(~SL[3]&&PM)beginFU=CP500;endelseFU=0;endendmodule报时模块仿真图:4)顶层模块建立,模块仿真及波形仿真:涉及调时波形涉及到报时的波形图:5)管脚分配:经验证硬件仿真完全正确。四、设计总结及心得体会4.1设计过程中遇到的问题及解决办法在建立顶层模块式遇到一些问题,经过向同学及老师请教,在他们帮助下加总结复习课本知识,学会了在新建一个工程,建立一个block文件,然后把各个子模块加到这个工程里面,然后根据程序子模块绘制电路图。然后再这个工程下进行综合与波形仿真。在这个过程发现就建完了顶层模块。在校正模块中没有思路,在查阅一些相关知识后,完成校正模块的功能,而且十分简单易懂。同时在查阅其他资料时看到好多都用到分频,但是没有必要。在EDA6000板上有1HZ信号所以没有必要进行分频,可以简化这个工程。4.2设计体会通过此次课程设计,总体来说,收获颇丰,无论是在培养自己的实践动手能力还是培养自己的性情方面。在此次的数字钟设计过程中,更进一步地熟悉了QUARTUS2和EDA6000实验箱的使用方法。在以前的EDA设计中都是小程序,或是功能没有那么全,而这次数字钟设计算是一个比较综合的设计,需要把之前课上学习的知识整合在一起,这样还不够,有些功能的设计思路不容易想,而已思路很灵活,需要到课外再查资料才可以解决,虽然要短时间完成这样复杂而且综合性很强的设计很难,但是最后,依靠自学和在老师及同学帮助下成功完成了这个多功能电子时钟课程设计。五、参考文献:[1]潘松,《EDA实用教程》,科学出版社,2004年[2]朱如琪,《数字电子技术基础》,华中科技出版社,2005六、附录(源程序):秒计时模块modulevs60(SH,SL,CP60S,CPS);output[3:0]SH;output[3:0]SL;outputCP60S;inputCPS;reg[3:0]SH;reg[3:0]SL;always@(posedgeCPS)beginif((SH[3:0]==4'b0101)&(SL[3:0]==4'b1001))beginSH[3:0]=4'b0000;SL[3:0]=4'b0000;endelseif(SL[3:0]==4'b1001)beginSL[3:0]=4'b0000;SH[3:0]=SH[3:0]+1'b1;endelsebeginSH[3:0]=SH[3:0];SL[3:0]=SL[3:0]+1'b1;endendassignCP60S=~(~SH[3]&SH[2]&~SH[1]&SH[0]&SL[3]&~SL[2]&~SL[1]&SL[0]&~CPS);endmodule分计时模块:modulevm60(MH,ML,CP60M,CPM);output[3:0]MH;output[3:0]ML;outputCP60M;inputCPM;reg[3:0]MH;reg[3:0]ML;always@(posedgeCPM)beginif((MH[3:0]==4'b0101)&(ML[3:0]==4'b1001))beginMH[3:0]=4'b0000;ML[3:0]=4'b0000;endelseif(ML[3:0]==4'b1001)beginML[3:0]=4'b0000;MH[3:0]=MH[3:0]+1'b1;endelsebeginMH[3:0]=MH[3:0];ML[3:0]=ML[3:0]+1'b1;endendassignCP60M=~(~MH[3]&MH[2]&~MH[1]&MH[0]&ML[3]&~ML[2]&~ML[1]&ML[0]&~CPM);endmodule时计时模块:modulevh24(HH,HL,CPH);output[3:0]HH;output[3:0]HL;inputCPH;reg[3:0]HH;reg[3:0]HL;always@(posedgeCPH)beginif((HH[3:0]==4'b0010)&(HL[3:0]==4'b0011))beginHH[3:0]=4'b0000;HL[3:0]=4'b0000;endelseif(HL[3:0]==4'b1001)beginHL[3:0]=4'b0000;HH[3:0]=HH[3:0]+1'b1;endelsebeginHH[3:0]=HH[3:0];HL[3:0]=HL[3:0]+1'b1;endendendmodule报时模块modulevjaoshi(CPH,CPM,CP60M,CP60S,CPS,SWH,SWM);inputCP60M,CP60S,CPS,SWH,SWM;outputCPH,CPM;regCPH,CPM;always@(SWHorSWMorCP60SorCP60MorCPS)begincase({SWH,SWM})2'b11:beginCPH=CP60M;CPM=CP60S;end//电路正常走时2'b01:beginCPH=CPS;CPM=CP60S;end//电路校时2'b10:beginCPM=CPS;CPH=CP60M;end//电路校分2'b00:beginCPH=CP60M;CPM=CP60S;end//电路正常走时endcaseendendmodule报时模块modulevbaoshi(MH,ML,SH,SL,CP1k,FU);input[3:0]MH,ML,SH,SL;inputCP1k;outputFU;regFU;regCP500;wirePM;assignPM=MH[2]&MH[0]&ML[3]&ML[0]&SH[2]&SH[0]&SL[0];always@(posedgeCP1k)beginCP500=~CP500;endalways@((SH&SL)orPM)beginif(SL[3]&&PM)beginFU=CP1k;endelseif(~SL[3]&&PM)beginFU=CP500;e
本文标题:EDA-verilog-多功能电子时钟
链接地址:https://www.777doc.com/doc-4465006 .html