• 862.00 KB
  • 2022-04-22 11:22:44 发布

可设置数字钟的设计计划书.doc

  • 16页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'可设置数字钟的设计计划书一、设计任务要求1具有时、分、秒计数显示功能(6位LED构成),24小时循环。2具有准确调节小时和分钟以及秒清零的功能(具体有1个或者2个键位来控制,要有操作说明)。3具有整点报时功能,时钟整点报时,并且响铃一分钟(可自定义闪烁方式,要有说明)。二、设计方案1、系统功能(1)具有时、分、秒计数显示功能(2)具有准确调节小时和分钟以及秒清零的功能(3)具有整点报时功能2、操作说明(1)首先接通电源,数字钟复位,显示00:00:00,开始正常计数(2)然后对数字中进行调整时间,按下Key1,秒位清零(3)再按Key1,分位闪烁,按Key2,分位加一调整(4)再按Key1,时位闪烁,按Key2,时位加一调整3、系统方案设计说明该数字钟具有准确的计时功能,计时的时钟信号是1HZ,即秒输入,但是实验箱上的时钟信号都是高频信号,因此需要对其进行分频来产生低频信号。数字钟用两个键来进行调时,其中按键KEY1按下秒位开始闪烁同时对其进行清零操作,如果再按下KEY1,分位开始闪烁,表示分位可以进行调整,则按下KEY2,每按一下,分钟数加一,分位调整完成以后,再按KEY1,则进入时位调整,时位闪烁,按KEY2,时位加一。在调整时间过程中,用按键来完成的,因此要加去抖模块。16 显示是用6位数码管完成,6位数码管循环显示。整点报时用一个小闹铃来实现。这些功能小模块需要一个总的控制模块来协调个模块的工作过程。其总模块的硬件原理图如下:去抖电路总体硬件原理图16 4各功能模块分析说明(1)分频器模块接入的时钟是1KHZ的,因此需要进行分频,产生1HZ的秒信号。此分频过程可经过三个10分频器。每一个十分频器相当于一个5进制计数器,即每经过5个时钟信号,输出电平变换一次,这样原来10个周期就可转换为一个周期,三个10分频器串联起来(可以减小分频误差),就组合为一个1000分频器,把1KHZ的时钟信号变为1HZ的秒输入信号。另外在进行时间的调整时,用闪烁来确定调整位,此闪烁的时间间隔是400ms,即2.5HZ,因此要对经过第二个分频器出来的信号进行4分频。气分频起的工作原理和十分频器一样。其程序模块如下:十分频器程序:modulefenpinqi(fin,f10);outputf10;regf10;inputfin;//输入时钟信号//reg[7:0]j;always@(posedgefin)//上升沿触发//beginif(j==4)beginj<=0;f10<=~f10;//计数到一半取反//endelsebeginj<=j+1;endend16 endmodule10分频模块图四分频器程序:modulefenpinqi4(fin,f4);outputf4;regf4;inputfin;reg[7:0]j;always@(posedgefin)beginif(j==2)beginj<=0;f4<=~f4;endelsebeginj<=j+1;endendendmodule4分频模块图16 (2)计数模块数字钟是时、分、秒的显示,因此计数模块是由两个60进制的计数器来表示秒位和分位,一个24进制的计数器来表示时位。三个计数器级联起来,秒进位的信号接入到分的时钟信号,分的进位信号接入时的计时模块作为时位的时钟输入信号。其程序如下:modulesec(clk,mindatah,mindatal,co,rst);//秒计数//inputclk,rst;output[3:0]mindatah,mindatal;outputco;reg[3:0]mdatah,mdatal;regcog;always@(posedgeclk)beginif(rst==1)beginmdatal<=0;mdatah<=0;//清零//endelseif(mdatal==9)//计数//beginif(mdatah==5)beginmdatal<=0;mdatah<=0;cog<=1;end16 elsebeginmdatal<=0;mdatah<=mdatah+1;cog<=0;endendelsebeginmdatal<=mdatal+1;cog<=0;endendassignmindatah=mdatah;assignmindatal=mdatal;assignco=cog;endmodulemodulemin(clk,mindatah,mindatal,co);//分计数//inputclk;output[3:0]mindatah,mindatal;outputco;reg[3:0]mdatah,mdatal;regcog;always@(posedgeclk)beginif(mdatal==9)beginif(mdatah==5)beginmdatal<=0;mdatah<=0;cog<=1;end16 elsebeginmdatal<=0;mdatah<=mdatah+1;cog<=0;endendelsebeginmdatal<=mdatal+1;cog<=0;endendassignmindatah=mdatah;assignmindatal=mdatal;assignco=cog;endmodulemodulehour(clk,mindatah,mindatal);//小时计数//inputclk;output[3:0]mindatah,mindatal;reg[3:0]mdatah,mdatal;always@(posedgeclk)beginif(mdatal==3)beginif(mdatah==2)beginmdatal<=0;mdatah<=0;16 endelsemdatal<=mdatal+1;endelsebeginif(mdatal==9)beginmdatal<=0;mdatah<=mdatah+1;endelsemdatal<=mdatal+1;endendassignmindatah=mdatah;assignmindatal=mdatal;endmodule各时间位仿真结果如下:秒分:16 时:计数模块图(3)闪烁控制模块该模块中的闪烁是在调整时用来对调整位的标志,某位闪烁表示对该位进行调整,此闪烁的频率是2.5HZ(周期400ms)设计时,程序中在对其闪烁的控制是通过对数码管段的控制来控制闪烁的亮灭。程序如下:reg[1:0]mod;reg[6:0]segout;reg[2:0]bitout;always@(posedgeset)mod<=mod+1;always@(bitin&&clk_fla)begincase(mod)0:segout<=segin;//正常计数,直接显示//1:beginif(bitin==0||bitin==1)16 //秒位闪烁//beginif(clk_fla==1)segout<=segin;elsesegout<=0;endelsesegout<=segin;end2:beginif(bitin==2||bitin==3)//分位闪烁//beginif(clk_fla==1)segout<=segin;elsesegout<=0;endelsesegout<=segin;end3:beginif(bitin==4||bitin==5)//时位闪烁//beginif(clk_fla==1)segout<=segin;elsesegout<=0;endelsesegout<=segin;endendcasebitout=bitin;endendmodule闪烁模块图(4)报时模块报时器的时钟信号采用100HZ的高频信号,报时的铃声人耳听不到有间断,分高位的进位信号作为报时信号,由于在进位信号保持1分钟,因此该报是持续1分钟。16 其程序如下:modulealert(co,clck,alert);inputco,clck;outputalert;regalert;always@(posedgeclck)if(co==1)//进位为“1”,开始报时//beginalert<=~alert;endelsealert<=0;endmodule(4)显示模块modulediplay(clk,sech,secl,minh,minl,hourh,hourl,seg,bit);inputclk;input[3:0]secl,sech,minl,minh,hourl,hourh;output[6:0]seg;output[2:0]bit;reg[6:0]seg;reg[2:0]bit;reg[3:0]data;always@(posedgeclk)begincase(bit)16 3"b000:begindata<=minl;bit<=bit+1;end3"b001:begindata<=minh;bit<=bit+1;end3"b010:begindata<=hourl;bit<=bit+1;end3"b011:begindata<=hourh;bit<=bit+1;end3"b100:begindata<=secl;bit<=bit+1;end3"b101:begindata<=sech;bit<=0;enddefault:bit<=0;endcasecase(data)4"b0000:seg=7"b0111111;//04"b0001:seg=7"b0000110;//14"b0010:seg=7"b1011011;//24"b0011:seg=7"b1001111;//34"b0100:seg=7"b1100110;//44"b0101:seg=7"b1101101;//54"b0110:seg=7"b1111101;//64"b0111:seg=7"b0000111;//74"b1000:seg=7"b1111111;//84"b1001:seg=7"b1101111;//9endcaseendendmodule16 (4)控制模块此模块是整个数字钟的核心,此程序中我定义了一个变量,它表示两个按键的四种状态,状态0正常计数,状态1秒复位,状态2调整分位,同时秒位一直复位,状态3对时位进行调整,同时秒位一直复位.其程序如下:moduleclock_contrl(secclear,minin,minout,hourin,hourout,set,turn);inputminin,hourin,set,turn;outputsecclear,minout,hourout;regsecclear,minout,hourout;reg[1:0]mod;always@(posedgeset)beginmod<=mod+1;endalways@(minin&&hourin&&turn)begincase(mod)0:beginassignminout=minin;assignhourout=hourin;assignsecclear=0;end//正常计数//1:beginassignminout=minin;assignhourout=hourin;assignsecclear=turn;end16 //秒位调整//2:beginassignminout=turn;assignhourout=hourin;assignsecclear=1;end//秒位调整//3:beginassignminout=minin;assignhourout=turn;assignsecclear=1;end//时位调整//endcaseendendmodule三、调试过程分析通过设计思想对各模块进行程序设计,然后对程序编译并调试,调试通过后.连接各功能模块对管脚进行分配:管脚图连接如下连线情况:CLK_1KHZ:1,Set:16,Turn:17,Speaker:65,BIT0:19,BIT1:21,BIT2:22,SEG0:23,SEG1:24,SEG2:25,SEG3:27,SEG4:28,SEG5:29,SEG6:30。16 最后下载到芯片四、设计总结此次课设,由于对Verilog语言久而未用感到较为陌生,再加上当时学的比较草率,因此我大概用了一定时间把Verilog语言熟悉了一遍。在做整体设计时,主要存在问题:分频器:由于实验箱上都是高频信号,而实验需要的是1HZ的信号。开始想直接用一次分频来得到想要的信号,后来经同学的热心帮助,并且经过讨论,最终采取了用多次分频的方法,目的在于减小分频的误差。闪烁控制模块:闪烁控制可以有位控制和段控制。开始想用位控制来进行显示,由于时位需要有较高的频率,在下载时,闪烁效果不是很好,最终采取段控制对闪烁进行控制,效果比较明显。控制模块:需要一个总的控制模块把各种功能模块组合在一起,开始觉得无从下手。后来经过分析和同学之间的讨论发现,该时钟有几种工作模式,因此需要一个变量来控制几种模式的转换,它由模式调整键控制,但是下载时发现在进行调整时钟时,出现了一个问题,秒位始终处于走时状态。因为控制模块中的其中一个输出是接到秒计时模块的复位信号的,所以在调整时间时我把该复位信号始终设为“1”,这样就可把秒锁住实现准确调时。16 报时模块:开始在设定其报时时钟是用2HZ,还需要进行分频器的设计,为了节省资源,我采用了100HZ,即经过第一个分频器出来的时钟信号。五、参考资料1.《Verilog数字设计系统教程》北京航空航天大学出版社夏宇闻2.《VerilogHDL程序设计与应用》人民邮电出版社王伟编著编著个人总结心得:通过这次课程设计,我学会了如何设计简单的数字钟以及一些基本功能的设计。掌握了可编程逻辑器件应用设计、编程、下载、调试的基本设计方法和思路,以及较为熟练应用Verilog语言编写程序和使用MAXPLUSII软件中的各种功能,在这过程中,很多问题出现在我的面前,其中好多问题是在老师的指导和同学的热心帮助下才得以解决的。自己也通过多次实践和练习,使得学过的知识的得到了巩固。这期间,我不仅学到了解决问题的方法,更重要的是分析问题的方法。在设计过程中,小问题也是很多,比如编译下载的过程中,经常出现一些错误,有时是系统下载线的问题,有时是程序本身的问题,但有好多次是没有把修改好的程序保存或设为当前文件,使得操作无法正常运行下去。总之,在进行程序的调试和编译中必须要十分谨慎。此次课程设计,我受益匪浅,理解了制作一个简单作品的工作流程。从开始设计思想到设计的实现,从程序的编写到编译,到成功下载,其中的每个环节都十分重要。最大的收获是:一个复杂的大程序可以通过多个小模块实现,从而简化了问题的复杂性。16'