1、数字定时器的设计实现分析学术诚信声明 本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致中所罗列的容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。 本人签名: 日期: 年 月 日航空航天大学课程设计任务书课程设计名称XXXX课程设计专业学生班级学号题目名称起止日期年月日起至年月日止课设容和
2、要求:参考资料: 教研室审核意见: 教研室主任签字:指导教师(签名)年月日学 生(签名)年月日课程设计总结:经过本次课程设计,我学会了好多东西,不仅学会了新的语言,而且学会了计算机硬件上的一些东西,我相信这对我以后的发展和认识提供了非常大的帮助,不仅可以从软件方面去分析东西,还可以从硬件方面分析东西,所以我觉得我的收获是巨大的。这次课程设计是在已学计算机组成原理基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高,能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行了一次全面的训练。通过对数字定时器程序的编写,使我对计算机组成原理的基本知识的使用更
3、加熟练,同时也增加了我对计算机组成原理的一些认识,培养从资料文献、科学实验中获得知识的能力,在作业完成过程过和同学的交流,也增加了合作的技巧,初步培养了我的工程意识和创新能力。通过查阅以下资料也学到了一些课本上没有的东西,很多知识从模糊概念到具体的了解,从毫无所知到具体的应用,拓宽了自己的知识面,增加了学好汇编语言的信心。当然,也存在了许多的问题,如编写程序时没有注意程序的逻辑性,导致用ModelSim仿真时出现了存过大,软件奔溃的问题。在以后的学习工作中,我要吸取这次教训,设计好每一个环节后再进行制作与组装。最后,感老师的辛勤解答。1 总体设计方案 - 3 -1.1 设计原理 - 3 -1.
4、2 设计思路 - 3 -1.3 设计环境 - 3 -2详细设计方案 - 3 -2.1 总体模块设计 - 3 -2.2 计时电路与清零电路模块设计 - 3 -2.3 定时电路模块设计 - 3 -2.4 报时电路模块设计 - 3 -3设计仿真 - 3 -3.1 清零操作仿真 - 3 -3.2 报时操作仿真 - 3 -参考文献 - 3 -附录 - 3 -程序代码 - 3 -总体电路图 - 3 -1 总体设计方案1.1 设计原理数字定时器是由计时电路、定时电路,清零电路和报时电路等几部分组成的。其中,定时电路和计时电路,将时间显示在七段数码管上,定时电路对时、分提供设置并储存;清零电路作用时,系统的分
5、秒时同时归零。1.2 设计思路由于设计为数字定时器,所以一定会有脉冲发送部分,但是由于本次课设不需要实际操作,则脉冲发送部分先不考虑。其次,重点就是计时电路,顾名思义,数字定时器首先要实现定时的功能,包括时,分,秒的计时,分别类似于模24、模60、模60计数器的形式,只需要把三个计数器的信号连接起来就可以实现对时,分,秒的计时功能。在程序过3个8位寄存器来保存时,分,秒,已达到输入输出。定时电路也是采用寄存器的方法来保存时,分,通过改变寄存器的里的数据来定时,然后报时电路通过对比定时电路中的数据与计数器中的数据来达到准确报时的目的,清零电路,如果清零开关信号为1,清空所有计时电路寄存器中的数据
6、,并停止计时。(如图1.2) 图 1.21.3 设计环境设计软件:Altera公司的综合性PLD/FPGA开发软件Quartus II。仿真软件:Mentor公司的ModelSim。2详细设计方案2.1 总体模块设计数字定时器是由计时电路、定时电路,清零电路和报时电路等几部分组成的。模块设计代码如下:module x(turn,change,ahour,amin,asec,clk,hour1,min1,k,sec1,stop);input change,turn,stop; output k;output 7:0ahour,amin,asec;reg 7:0ahour,amin,asec;ou
7、tput 7:0hour1,min1,sec1;reg 7:0hour1,min1,sec1;reg counta,countb,fm;input clk;reg minclk,hclk;reg k; 2.2 计时电路与清零电路模块设计由于信号不能在多个并发进程中赋值,所以将计时电路与清零电路写在了一起。计时电路包括时,分,秒的计时,分别类似于模24、模60、模60计数器的形式。所以在代码实现的时候考虑了三种情况:一,出现59的情况与23的情况;二,出现9,19,23,39,49的情况;三,不存在以上的正常情况;模块代码如下:always (posedge clk) /秒 begin if(s
8、top=1) begin sec17:0=0; minclk=1; end else if(sec1=8h59) begin sec1=0; minclk=1; end else begin if(sec13:0=9) begin sec13:0=0; sec17:4=sec17:4+1; end else sec13:0=sec13:0+1; minclk=0; end if(stop=1) begin sec17:0=0; minclk=1; end endalways (posedge minclk) /分 begin if(stop=1) begin min17:0=0; hclk=1
9、; end if(min1=8h59) begin min1=0; hclk=1; end else begin if(min13:0=9) begin min13:0=0; min17:4=min17:4+1; end else min13:0=min13:0+1; hclk=0; end if(stop=1) begin min17:0=0; hclk=1; end endalways (posedge hclk) /时 begin if(stop=1) begin hour17:0=0; end if(hour1=8h23) hour1=0; else begin if(hour13:0
10、=9) begin hour13:0=0; hour17:4=hour17:4+1; end else hour13:0=hour13:0+1; end if(stop=1) begin hour17:0=0; end end2.3 定时电路模块设计定时电路也是采用寄存器的方法来保存时,分,通过改变寄存器的里的数据来定时。Turn是用来调节时与分之间的转换,change则改变数值的的变化。如果Turn在时位上,则每点一下change则改变时位加1,知道23再加1则清零;如果Turn在分位上,则每点一下change则改变分位加1,知道59再加1则清零。always (posedge turn)
11、begin fm=fm; endalways begin if(fm) begin counta=change; end else begin countb=change; end end always begin asec=8hzz; endalways (posedge counta) begin if(amin=8h59) amin=0; else begin if(amin3:0=9) begin amin3:0=0; amin7:4=amin7:4+1; end else amin3:0=amin3:0+1; end endalways (posedge countb) if(aho
12、ur=8h23) ahour=0; else begin if(ahour3:0=9) begin ahour3:0=0; ahour7:4=ahour7:4+1; end else ahour3:0=ahour3:0+1; end2.4 报时电路模块设计 报时电路是通过对比定时电路中的数据与计数器中的数据来达到准确报时的目的。代码实现如下:always if(hour17:0=ahour7:0)&(min17:0=amin7:0&min1!=0)&stop!=1&sec17:0=1) begin k=1; end else begin k=0; end 3设计仿真3.1 清零操作仿真设置时钟
13、为1分钟,turn按键2次,turn按键1次,设置完成。打开开关stop开始计时,记到3秒时,关闭开关,停止计时且hour1,min1,sec1清零。 图3.13.2 报时操作仿真设置时钟为1分钟,turn按键2次,turn按键1次,设置完成。当计时达到1分钟时,K信号发出高电平,即发出响声,且停止清零。 图3.2 参考文献1 景华. 可编程程逻辑器件与EDA技术M.:东北大学,2001 2 延滨.微型计算机系统原理、接口与EDA设计技术M.:邮电大学, 20063 王爱英.计算机组成与结构(第4版)M.:清华大学,20064 王冠.Verilog HDL与数字电路设计M.:机械工业,2005
14、 5 白中英.计算机组成原理M.科学,20086 胡越明.计算机组成与设计M.:科学,2006附录程序代码module xxx(turn,change,ahour,amin,asec,clk,hour1,min1,sec1,k,stop);input change,turn,stop;output k;output 7:0ahour,amin,asec;reg 7:0ahour,amin,asec;reg counta,countb,fm;reg start1;input clk;output 7:0hour1,min1,sec1;reg 7:0hour1,min1,sec1;reg minc
15、lk,hclk,start2,clr;reg k;always (posedge turn) begin fm=fm; endalways begin if(fm) begin counta=change; end else begin countb=change; end end always begin asec=8hzz; endalways (posedge counta) begin if(amin=8h59) amin=0; else begin if(amin3:0=9) begin amin3:0=0; amin7:4=amin7:4+1; end else amin3:0=a
16、min3:0+1; end endalways (posedge countb) if(ahour=8h23) ahour=0; else begin if(ahour3:0=9) begin ahour3:0=0; ahour7:4=ahour7:4+1; end else ahour3:0=ahour3:0+1; end always (posedge clk) begin if(stop=1) begin sec17:0=0; minclk=1; end else if(sec1=8h59) begin sec1=0; minclk=1; end else begin if(sec13:
17、0=9) begin sec13:0=0; sec17:4=sec17:4+1; end else sec13:0=sec13:0+1; minclk=0; end if(stop=1) begin sec17:0=0; minclk=1; end endalways (posedge minclk) begin if(stop=1) begin min17:0=0; hclk=1; end if(min1=8h59) begin min1=0; hclk=1; end else begin if(min13:0=9) begin min13:0=0; min17:4=min17:4+1; e
18、nd else min13:0=min13:0+1; hclk=0; end if(stop=1) begin min17:0=0; hclk=1; end endalways (posedge hclk) begin if(stop=1) begin hour17:0=0; end if(hour1=8h23) hour1=0; else begin if(hour13:0=9) begin hour13:0=0; hour17:4=hour17:4+1; end else hour13:0=hour13:0+1; end if(stop=1) begin hour17:0=0; end end always if(hour17:0=ahour7:0)&(min17:0=amin7:0&min1!=0)&stop!=1&sec17:0=1) begin k=1; clr=1; end else begin k=0; clr=0; end endmodule总体电路图
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1