数字定时器的设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
去分析东西,还可以从硬件方面分析东西,所以我觉得我的收获是巨大的。这次课程设计是在已学计算机组成原理基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高,能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行了一次全面的训练。
通过对数字定时器程序的编写,使我对计算机组成原理的基本知识的使用更加熟练,同时也增加了我对计算机组成原理的一些认识,培养从资料文献、科学实验中获得知识的能力,在作业完成过程中通过和同学的交流,也增加了合作的技巧,初步培养了我的工程意识和创新能力。通过查阅以下资料也学到了一些课本上没有的东西,很多知识从模糊概念到具体的了解,从毫无所知到具体的应用,拓宽了自己的知识面,增加了学好汇编语言的信心。
1.2
由于设计为数字定时器,所以一定会有脉冲发送部分,但是由于本次课设不需要实际操作,则脉冲发送部分先不考虑。其次,重点就是计时电路,顾名思义,数字定时器首先要实现定时的功能,包括时,分,秒的计时,分别类似于模24、模60、模60计数器的形式,只需要把三个计数器的信号连接起来就可以实现对时,分,秒的计时功能。在程序中通过3个8位寄存器来保存时,分,秒,已达到输入输出。定时电路也是采用寄存器的方法来保存时,分,通过改变寄存器的里的数据来定时,然后报时电路通过对比定时电路中的数据与计数器中的数据来达到准确报时的目的,清零电路,如果清零开关信号为1,清空所有计时电路寄存器中的数据,并停止计时。(如图1.2)
end
end
2.3
定时电路也是采用寄存器的方法来保存时,分,通过改变寄存器的里的数据来定时。Turn是用来调节时与分之间的转换,change则改变数值的的变化。如果Turn在时位上,则每点一下change则改变时位加1,知道23再加1则清零;如果Turn在分位上,则每点一下change则改变分位加1,知道59再加1则清零。
if(hour1==8'h23)
hour1<=0;
else begin
if(hour1[3:0]==9)
begin hour1[3:0]<=0;
hour1[7:4]<=hour1[7:4]+1;
end
else hour1[3:0]<=hour1[3:0]+1;
end
if(stop==1) begin hour1[7:0]<=0;
input change,turn,stop;
output k;
output [7:0]ahour,amin,asec;
reg [7:0]ahour,amin,asec;
output [7:0]hour1,min1,sec1;
reg [7:0]hour1,min1,sec1;
reg counta,countb,fm;
if(ahour==8'h23)
ahour<=0;
else begin
if(ahour[3:0]==9)
begin ahour[3:0]<=0;
ahour[7:4]<=ahour[7:4]+1;
end
else ahour[3:0]<=ahour[3:0]+1;
end
2.4
报时电路是通过对比定时电路中的数据与计数器中的数据来达到准确报时的目的。代码实现如下:
input clk;
reg minclk,hclk;
reg k;
2.2
由于信号不能在多个并发进程中赋值,所以将计时电路与清零电路写在了一起。
计时电路包括时,分,秒的计时,分别类似于模24、模60、模60计数器的形式。所以在代码实现的时候考虑了三种情况:
一,出现59的情况与23的情况;
二,出现9,19,23,39,49的情况;
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
else begin
k<=0; end
三,不存在以上的正常情况;
模块代码如下:
always @(posedge clk) //秒
begin
if(stop==1)
begin
sec1[7:0]<=0;
minclk<=1;
end
else if(sec1==8'h59)
begin sec1<=0;
minclk<=1;
end
else begin
if(sec1[3:0]==9)
always @(posedge turn)
begin fm<=~fm;
end
always
begin if(fm)
begin
counta<=change;
end
else
begin
countb<=change;
end
end
always
begin asec<=8'hzz; end
always @(posedge counta)
end
else min1[3:0]<=min1[3:0]+1;
hclk<=0;
end
if(stop==1) begin
min1[7:0]<=0;
hclk<=1;
end
end
always @(posedge hclk) //时
begin
if(stop==1) begin hour1[7:0]<=0;
end
begin
if(stop==1) begin
min1[7:0]<=0;
hclk<=1;
end
if(min1==8'h59)
begin min1<=0;
hclk<=1;
end
else begin
if(min1[3:0]==9)
begin min1[3:0]<=0;
min1[7:4]<=min1[7:4]+1;
图1.2
1.3
设计软件:Altera公司的综合性PLD/FPGA开发软件Quartus II。
仿真软件:Mentor公司的ModelSim。
2wenku.baidu.com
2.1
数字定时器是由计时电路、定时电路,清零电路和报时电路等几部分组成的。模块设计代码如下:
module x(turn,change,ahour,amin,asec,clk,hour1,min1,,k,sec1,stop);
begin if(amin==8'h59)
amin<=0;
else begin
if(amin[3:0]==9)
begin amin[3:0]<=0;
amin[7:4]<=amin[7:4]+1;
end
else amin[3:0]<=amin[3:0]+1;
end
end
always @(posedge countb)
当然,也存在了许多的问题,如编写程序时没有注意程序的逻辑性,导致用ModelSim仿真时出现了内存过大,软件奔溃的问题。
在以后的学习工作中,我要吸取这次教训,设计好每一个环节后再进行制作与组装。
最后,感谢老师的辛勤解答。
1
1.1
数字定时器是由计时电路、定时电路,清零电路和报时电路等几部分组成的。其中,定时电路和计时电路,将时间显示在七段数码管上,定时电路对时、分提供设置并储存;清零电路作用时,系统的分秒时同时归零。
begin sec1[3:0]<=0;
sec1[7:4]<=sec1[7:4]+1;
end
else sec1[3:0]<=sec1[3:0]+1;
minclk<=0;
end
if(stop==1)
begin
sec1[7:0]<=0;
minclk<=1;
end
end
always @(posedge minclk) //分
本人签名:日期:年月日
沈阳航空航天大学
课程设计任务书
课程设计名称
XXXX课程设计
专业
学生姓名
班级
学号
题目名称
起止日期
年
月
日起至
年
月
日止
课设内容和要求:
参考资料:
教研室审核意见:教研室主任签字:
指导教师(签名)
年
月
日
学生(签名)
年
月
日
课程设计总结:
经过本次课程设计,我学会了好多东西,不仅学会了新的语言,而且学会了计算机硬件上的一些东西,我相信这对我以后的发展和认识提供了非常大的帮助,不仅可以从软件方面
学术诚信声明
本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
通过对数字定时器程序的编写,使我对计算机组成原理的基本知识的使用更加熟练,同时也增加了我对计算机组成原理的一些认识,培养从资料文献、科学实验中获得知识的能力,在作业完成过程中通过和同学的交流,也增加了合作的技巧,初步培养了我的工程意识和创新能力。通过查阅以下资料也学到了一些课本上没有的东西,很多知识从模糊概念到具体的了解,从毫无所知到具体的应用,拓宽了自己的知识面,增加了学好汇编语言的信心。
1.2
由于设计为数字定时器,所以一定会有脉冲发送部分,但是由于本次课设不需要实际操作,则脉冲发送部分先不考虑。其次,重点就是计时电路,顾名思义,数字定时器首先要实现定时的功能,包括时,分,秒的计时,分别类似于模24、模60、模60计数器的形式,只需要把三个计数器的信号连接起来就可以实现对时,分,秒的计时功能。在程序中通过3个8位寄存器来保存时,分,秒,已达到输入输出。定时电路也是采用寄存器的方法来保存时,分,通过改变寄存器的里的数据来定时,然后报时电路通过对比定时电路中的数据与计数器中的数据来达到准确报时的目的,清零电路,如果清零开关信号为1,清空所有计时电路寄存器中的数据,并停止计时。(如图1.2)
end
end
2.3
定时电路也是采用寄存器的方法来保存时,分,通过改变寄存器的里的数据来定时。Turn是用来调节时与分之间的转换,change则改变数值的的变化。如果Turn在时位上,则每点一下change则改变时位加1,知道23再加1则清零;如果Turn在分位上,则每点一下change则改变分位加1,知道59再加1则清零。
if(hour1==8'h23)
hour1<=0;
else begin
if(hour1[3:0]==9)
begin hour1[3:0]<=0;
hour1[7:4]<=hour1[7:4]+1;
end
else hour1[3:0]<=hour1[3:0]+1;
end
if(stop==1) begin hour1[7:0]<=0;
input change,turn,stop;
output k;
output [7:0]ahour,amin,asec;
reg [7:0]ahour,amin,asec;
output [7:0]hour1,min1,sec1;
reg [7:0]hour1,min1,sec1;
reg counta,countb,fm;
if(ahour==8'h23)
ahour<=0;
else begin
if(ahour[3:0]==9)
begin ahour[3:0]<=0;
ahour[7:4]<=ahour[7:4]+1;
end
else ahour[3:0]<=ahour[3:0]+1;
end
2.4
报时电路是通过对比定时电路中的数据与计数器中的数据来达到准确报时的目的。代码实现如下:
input clk;
reg minclk,hclk;
reg k;
2.2
由于信号不能在多个并发进程中赋值,所以将计时电路与清零电路写在了一起。
计时电路包括时,分,秒的计时,分别类似于模24、模60、模60计数器的形式。所以在代码实现的时候考虑了三种情况:
一,出现59的情况与23的情况;
二,出现9,19,23,39,49的情况;
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
else begin
k<=0; end
三,不存在以上的正常情况;
模块代码如下:
always @(posedge clk) //秒
begin
if(stop==1)
begin
sec1[7:0]<=0;
minclk<=1;
end
else if(sec1==8'h59)
begin sec1<=0;
minclk<=1;
end
else begin
if(sec1[3:0]==9)
always @(posedge turn)
begin fm<=~fm;
end
always
begin if(fm)
begin
counta<=change;
end
else
begin
countb<=change;
end
end
always
begin asec<=8'hzz; end
always @(posedge counta)
end
else min1[3:0]<=min1[3:0]+1;
hclk<=0;
end
if(stop==1) begin
min1[7:0]<=0;
hclk<=1;
end
end
always @(posedge hclk) //时
begin
if(stop==1) begin hour1[7:0]<=0;
end
begin
if(stop==1) begin
min1[7:0]<=0;
hclk<=1;
end
if(min1==8'h59)
begin min1<=0;
hclk<=1;
end
else begin
if(min1[3:0]==9)
begin min1[3:0]<=0;
min1[7:4]<=min1[7:4]+1;
图1.2
1.3
设计软件:Altera公司的综合性PLD/FPGA开发软件Quartus II。
仿真软件:Mentor公司的ModelSim。
2wenku.baidu.com
2.1
数字定时器是由计时电路、定时电路,清零电路和报时电路等几部分组成的。模块设计代码如下:
module x(turn,change,ahour,amin,asec,clk,hour1,min1,,k,sec1,stop);
begin if(amin==8'h59)
amin<=0;
else begin
if(amin[3:0]==9)
begin amin[3:0]<=0;
amin[7:4]<=amin[7:4]+1;
end
else amin[3:0]<=amin[3:0]+1;
end
end
always @(posedge countb)
当然,也存在了许多的问题,如编写程序时没有注意程序的逻辑性,导致用ModelSim仿真时出现了内存过大,软件奔溃的问题。
在以后的学习工作中,我要吸取这次教训,设计好每一个环节后再进行制作与组装。
最后,感谢老师的辛勤解答。
1
1.1
数字定时器是由计时电路、定时电路,清零电路和报时电路等几部分组成的。其中,定时电路和计时电路,将时间显示在七段数码管上,定时电路对时、分提供设置并储存;清零电路作用时,系统的分秒时同时归零。
begin sec1[3:0]<=0;
sec1[7:4]<=sec1[7:4]+1;
end
else sec1[3:0]<=sec1[3:0]+1;
minclk<=0;
end
if(stop==1)
begin
sec1[7:0]<=0;
minclk<=1;
end
end
always @(posedge minclk) //分
本人签名:日期:年月日
沈阳航空航天大学
课程设计任务书
课程设计名称
XXXX课程设计
专业
学生姓名
班级
学号
题目名称
起止日期
年
月
日起至
年
月
日止
课设内容和要求:
参考资料:
教研室审核意见:教研室主任签字:
指导教师(签名)
年
月
日
学生(签名)
年
月
日
课程设计总结:
经过本次课程设计,我学会了好多东西,不仅学会了新的语言,而且学会了计算机硬件上的一些东西,我相信这对我以后的发展和认识提供了非常大的帮助,不仅可以从软件方面
学术诚信声明
本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。