60秒倒计时器MAXII240T.docx
《60秒倒计时器MAXII240T.docx》由会员分享,可在线阅读,更多相关《60秒倒计时器MAXII240T.docx(15页珍藏版)》请在冰点文库上搜索。
60秒倒计时器MAXII240T
EDA课程设计报告
设计题目:
基于verilog的倒计时器设计
专业班级:
学号:
学号:
学号:
指导教师:
设计时间:
摘要3
关键字3
前言3
1倒计时的功能和设计结构3
1.1倒计时器的系统的功能3
1.2倒计时器的设计结构4
2主要模块程序4
2.1分频器4
2.2计时器5
2.3显示器7
2.4指示器9
3各模块原理图10
3.1顶层模块原理图10
3.2计数模块原理图11
3.3分频模块原理图11
3.4彩灯模块原理图11
3.5显示模块原理图12
4实际电路运行效果图12
5软件介绍和管脚说明13
5.1管脚说明13
5.2软件介绍13
6总结与心得体会14
7致谢14
7参考文献15
基于Verilog的60秒倒计时器设计
()
摘要本文提出一种基于VerilogHDL语言的60秒倒计时器设计方法。
该设计实现有两组输入,具有清零功能和暂停功能,能进行60秒的倒计时器。
文中介绍了倒计时器设计架构和控制程序的设计方法。
该倒计时器采用VerilogHDL语言模块化和层次化的思想,使设计十分简单,并能在MAXII开发板上实现验证,具有广泛的现实意义。
关键字倒计时器;VerilogHDL;层次化和模块化;仿真验证
前言现行的倒计时器主要有两种,基于小规模数字逻辑芯片设计,另外一种基于单片机设计。
小规模数字逻辑电路比较复杂,单片机随着倒计时器功能输入的增加,存在I/O资源不足的情况。
本文提出一种方便可行的倒计时器的设计方法,即利用VerilogHDL硬件描述语言来设计倒计时器,并且在MAXII开发板上仿真实现,VerilogHDL语言满足数字系统设计和综合的所有要求,设计中充分利用VerilogHDL层次化和模块化的思想,使得倒计时器的整个设计过程简单,灵活;同时,在设计过程中始终运用EDA工具开发板对设计进行验证,使得设计更加可靠。
由于开发板的I/O端口比较丰富,可以在本设计基础上稍加修改设计具有更多功能的倒计时。
1倒计时器的功能和设计结构
1.1倒计时器系统的功能
本文设计一个电子倒计时器:
可进行60秒倒计时,七段显示译码管显示秒数,循环彩灯显示电路正常工作。
倒计时器具体功能如下:
(1)可进行60秒倒计时,倒计时开始,开发板上7段显示译码管上从60开始进行倒数,直至0,重新返回60重新开始计时,这一过程用七段译码管显示器显示;
(2)设置了一个复位控制开关reset,可以进行复位清零功能控制,当倒计时正在进行倒数工作时,当按下清零复位开关,倒计时器重新返回60,开始倒计时。
(3)设置了一个暂停控制开关stop,可以进行暂停功能控制,当倒计时进行倒数工作,无论倒数进行到哪一步,当按下暂停控制开关stop时,七段显示译码管的数字将保持不变,循环彩灯也将保持不变,说明整个倒计时器停止工作。
当松开暂停控制开关,倒计时器重新开始工作,循环彩灯开始闪亮,说明倒计时器正在工作。
1.2倒计时器的设计结构
本文以VerilogHDL语言为基础设计的60秒的倒计时器,根据设计功能的要求,该设计主要包括分频器产生时钟信号,倒计时的计数,和清零复位、暂停按键的键入,数码管的显示,以及循坏彩灯的设置。
循环彩灯用来显示倒计时器的工作状态
2.主要模块程序
2.1分频器
modulediv_fre(clk,sec);
inputclk;
outputsec;
regsec;
reg[27:
0]count;
always(posedgeclk)
begin
count<=count+1'b1;
if(count==28'd24999999)//用于产生1HZ的脉冲
begin
count<=0;
sec=~sec;
end
end
endmodule
该模块是用以实现把50MHZ的信号转化为1HZ的信号,从而产生一个1秒的时钟信号。
2.2计时器
modulecontrol(clk,reset,disp,stop);
inputclk,reset,stop;
integercount;
output[7:
0]disp;
reg[5:
0]num;
always(negedgeclk)
begin
if(~reset)
count<=1'b0;
elseif(~stop)//用于实现计数器的暂停功能
count<=count+1'b0;
elseif(count==6'b111100)//用于计数器计数到达60,重新置0
count<=1'b0;
else
count<=count+1'b1;
end
assigndisp[7:
4]=num/10,//用于向数码管送显示数据,A方向十位
disp[3:
0]=num%10;
always(negedgeclk)
begin
if(~reset)//用于倒计时器的清零功能
begin
num<=0;
end
elseif(count<7'b1100100)
begin
num<=6'b111100-(count);//用于实现倒计时
end
end
endmodule
该模块首先用count进行计数,将倒计时器的初始时间设置为60秒,再用一个条件语句执行倒计时功能。
除此以外,该模块还可进行清零复位和暂停功能的实现。
2.3显示模块
moduleseg7(clk,dataout,en,datain);
input[7:
0]datain;
inputclk;
output[6:
0]dataout;
output[1:
0]en;//COM使能输出
reg[6:
0]dataout;//各段数据输出
reg[1:
0]en;
reg[15:
0]cnt_scan;//扫描频率计数器
reg[3:
0]dataout_buf;
always(posedgeclk)
begin
cnt_scan<=cnt_scan+1;
end
always(cnt_scan)
begin
case(cnt_scan[15])
1'b0:
en=2'b10;
1'b1:
en=2'b01;
default:
en=2'b11;
endcase
end
always(en)//对应COM信号给出各段数据
begin
case(en)
2'b10:
dataout_buf=datain[7:
4];
2'b01:
dataout_buf=datain[3:
0];
default:
dataout_buf=8;
endcase
end
always(dataout_buf)
begin
case(dataout_buf)
4'b0000:
dataout=7'b0111111;
4'b0001:
dataout=7'b0000110;
4'b0010:
dataout=7'b1011011;
4'b0011:
dataout=7'b1001111;
4'b0100:
dataout=7'b1100110;
4'b0101:
dataout=7'b1101101;
4'b0110:
dataout=7'b1111101;
4'b0111:
dataout=7'b0000111;
4'b1000:
dataout=7'b1111111;
4'b1001:
dataout=7'b1101111;
default:
dataout=7'b0001_000;
endcase
end
Endmodule
该模块是用以将倒计时器的数字通过七段译码管显示出来。
2.4指示模块
moduleled(clock,key,style,light,reset);
inputclock,key,style,reset;//端口定义
output[3:
0]light;
reg[3:
0]light=4'b1111;
regclk=1;
parametercnt=24000000;
reg[24:
0]count;
always(posedgeclk)//LED灯输出
begin
if(!
reset)
light<=4'b0000;
elseif(!
key)//key键被按下
ight=light;//暂停
else
begin
if(light==4'b0000)//LED灯全部点亮时,重新熄灭再准备下次循环
light=4'b1111;
end
end
endmodule
该模块是用循环彩灯来指示倒计时器是否处于工作状态。
3.各模块原理图
顶层模块原理图
计数模块
彩灯模块
分频模块
显示模块
4.实际电路运行效果图
5.管脚说明和软件介绍
5.1管脚说明
5.2软件介绍
设计中所使用软件为QuartusⅡ。
QuartusⅡ是Altera公司推出的第四代开发软件,提供了方便的设计输入方式、快速的编译和直接易懂的器件编程。
能够支持百万门以上逻辑门数的逻辑器件的开发,并且为第三方工具提供了无缝接口。
QuartusⅡ软件的设计流程概括为设计输入、设计编译、设计仿真和设计下载等过程。
该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。
改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
6.总结与心得体会
这次的EDA课程设计比我想象的要难很多,原本以为一两天就可以搞定的,结果一个倒计时程序写了四五天才写出来,后面下载到硬件的时候又是各种各种的问题,让我很郁闷,曾经甚至想过要放弃!
最后在郭老师的耐心指导下重新修改程序才做出来。
通过这次EDA课程设计我深深的感知到对VerilogHDL语言编程的缺乏,连一些简单的语法知识都不知道,有编译程序遇到一个错误改半天都改不对,最终通过查看相关书籍和在网上查找相关资料才得以一个个解决。
经过这次教训,在以后的学习我应该认真对待每一门学科,扎实理论基础知识,只有这样在以后遇到相关问题才能轻松解决。
在这次EDA课程设计中,学到很多东西,不仅巩固了以前所学过的基础知识,而且对EDA硬件实验有了进一步的了解。
通过这次课程设计使我弄懂了键盘的构造原理以及对它的扫描原理。
由于第一次用Verilog语言对这种比较复杂的硬件电路编程,所以有很多地方不懂,因此必须通过查阅大量的相关资料才能弄懂,所以这期间进一步锻炼了自己查阅资料和自学的能力,学习能力得到进一步加强,对以后的学习生活打下根深基础。
总的来说,这次课程设计痛苦但有收获,虽然遇到很多问题,最后在老师的指导下和资料的指引下下都一一解决,本次课程设计充分锻炼了我们的能力,提高了自己对实践操作和理论研究的兴趣,也为明年的毕业设计做了一定的准备。
7.致谢
本论文设计在郭老师的悉心指导和严格要求下业已完成,从选题到具体的实训和写作过程,无不凝聚着老师们的心血和汗水。
在我们实训期间,老师为我们提供了种种专业知识上的指导和一些富于创造性的建议,老师严谨的态度使我们深受感动,没有这样的帮助和关怀和熏陶,我们不会这么顺利的完成实训任务。
在此向老师表示深深的感谢和崇高的敬意!
这次实训还要感谢郭老师的热情帮助,是他让我在短时间熟Verilog HDL源程序的编写。
在硬件调试阶段,也有很多同学给予了帮助,在此谢谢郭老师。
我还要借此机会向给予我诸多教诲和帮助的各位老师表示由衷的谢意,感谢他们的辛勤栽培。
不积跬步何以至千里,各位任课老师认真负责,在他们的悉心帮助和支持下,我能够很好的掌握和运用专业知识,并在实训中得以体现,顺利完成实训任务。
同时,在论文写作过程中,我还参考了有关的书籍和论文,在这里一并向有关的作者表示谢意。
我还要感谢同组的各位同学以及我的各位室友,在这段时间里,你们给了我很多的启发,提出了很多宝贵的意见,对于你们帮助和支持,在此我表示深深地感谢!
参考文献
[1]常晓明.Verilog-HDL讲座第三讲Verilog-HDL的基本概念[J].今日电子.2003(10)
[2]祁晓磊,蔡学良,德玮.用VerilogHDL进行FPGA设计的原则与方法[J].电子测试.2008(03)
[3]夏宇闻.VerilogHDL与逻辑系统设计[J].电子技术应用.2007(09)
[4]彭保,吴坚,于春梅,马建国.VerilogHDL语言在FPGA/CPLD开发中的应[J].今日电子.2004(05)