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