您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于VHDL语言的数字定时器设计报告
数字定时器设计报告2009-2010(第二学期)指导教师:叶文霞小组成员:周喜强(20082526)交控一班陈成(20082477)自动化一班实习指导单位:信息科学技术学院2010年7月26日一、方案设计1.方案论证和方案实现根据系统的总体要求,把电路划分成若干功能块,从而得到系统框图。每个框图里边可以是一个或几个基本单元电路,并将总体指标分配给每个单元电路,然后根据各单元电路所要完成的任务来决定电路的总体结构。为完成系统的总体要求,由系统框图到单元电路的具体结构是多种多样的,经过较为详细的方案比较和论证,以技术上的可行性、使用上的安全可靠性和较高的性价比为主要依据,最后选定方案。方案实现尽量选用市场上可以提供的中、大规模集成电路芯片和各种分立元件等电子器件,并通过应用性设计来实现各功能单元的要求以及各功能单元之间的协调关系。本步骤的要点是:①熟悉目前数字或模拟集成电路等电子器件的分类、特点,从而合理选择所需要的电子器件。要求工作可靠、价格低廉。②对所选功能器件进行应用性设计时,要根据所用器件的技术参数和应完成的任务,正确估算外围电路的参数;对于数字集成电路要正确处理各功能输入端。③要保证各功能器件协调一致地工作。对于模拟系统,按照需要采用不同辊合方式把它们连接起来6对于数字系统,协调工作主要通过控制器来完成2、系统原理框图(含工作原理介绍)本定时器设计的核心元件是EPM570T100C5,该芯片通过编程可以实现选位、置位、启动、复位、倒计时等操作,显示采用了一个4位数码管,并采用供阳接法,可以动态扫描显示。该定时器可设定0到59分59秒的任何时间。其系统原理图如图1所示本设计大致分为五个模块,分别是时间预置、计数器、数码管显示、分频和蜂鸣模块。CPLD芯片提供了频率为5.56MHZ的晶振,我们用分频模块将其变为1HZ和200HZ的时钟信号,并用他们分别来控制计数模块和时间预置模块。在置数前由于键盘是由弹性材料制成,按动的时候有抖动的现象,所以在图1置数模块前要交一个消抖模块,使按键的输入达到我们预想的效果。计数模块和时间预置是本设计的核心部分,通过他们分别对时间进行设置和计时,是实现定时器功能的主要模块,设计时将秒信号输入定时模块,此时系统将输出四个四位BCD码,以分别表示分、秒位。在预置数时,计数器以秒的速度递增,从而实现逐位预置数;而在定时倒计数时,计数器以秒的速度递减,从而实现倒计时。系统中的位选择器用于对六位进行循环扫描输出,并将扫描输出送到译码器。译码器模块可对输入的四位进行译码,同时在设置数值时用6个LED灯分别指示其所设置的位。通过计数器的输出来控制数码管模块,再通过数码管模块的输出信号来控制数码管的显示当前计数时刻。在计数器模块设置了一个变量控制当计数器把设定的数值减到零时开始蜂鸣。3、主要电路设计与参数计算前面已经讨论了本设计的各个模块,起主要模块有时间预置模块、计数器模块、LED显示模块。功能控制数码管显示分频电路七段显示译码计数器按键消抖&定时时间预置CP定时结束蜂鸣器响按键1234图二上图二为时间预置模块,其程序在后面附录上。其主要功能引脚如下ZS(开始):用于控制置数模块是否启动。Clr(置数清零):用于置数时清零以便重新置数。SSL(秒低位设置):用于设置秒的个位。SSH(秒高位设置):用于设置秒的十位。SML(分低位设置):用于设置秒的个位。SMH分高位设置):用于设置分的十位。四个四位输出用于计数模块计数。图三上图三为计数器模块,其程序在后面附录上。它就是用部分功能按键来控制倒计时。功能按键包括start(开始):当开始按键有效时,将将设置好的数按秒倒计时。pause(暂停):当暂停为有效时,倒计时停留在当前时刻。输出alarm信号用于控制当计数器倒计时0时控制蜂鸣蜂鸣。四个四位输出信号用于控制数码管显示。图四上图四为计数器模块,其程序在后面附录上。该模块实现将计数器输出控制七段数码管的显示。通过位选来控制显示某个具体的数码管,通过段选控制该数码管显示所要求的数字。利用动态扫描来同时显示四个数码管。3、总体电路图(器件型号、元件参数应标出)二、调试步骤本课程设计调试分为软件调试和硬件调试。必须先通过软件调试正确后才能焊接,焊接完成后再进行硬件调试。软件调试主要用Quartus2软件来调试。硬件调试主要是看硬件电路功能是否满足要求,主要是通过电压来调试。其具体步骤如下:1、用Quartus2对各个模块进行综合、编译、仿真。仿真正确后下载到实验板上测试。修改在测试。直到满足需要为止。2、将各个模块连接起来构成系统,在对总的进行综合、编译、仿真。仿真正确后下载到实验板上测试。修改在测试。直到满足需要为止。3、用万用表测试硬件电路。主要测试三极管割断电压是否满足要求。各个管脚电压是否符合要求。如不符合要求再通过修改程序和布线。直到满足要求且功能都实现为止。三、测试数据及实验结果置数波形图此图说明分别按下a1,a2,a3,a4,就送给指数模块一个脉冲,其相应位就自动加1。由此可以对分和秒的各位设置0到59分59秒的所需要倒计时的数。计数波形图上图说明,当使能和开始计数按键有效时且当设置数置入计数器时。计数器开始以秒倒计时。直至为零时。四、结论1、本方案特点及存在的问题通过测试,完成了定时器的基本功能。具有定时时间设置功能,定时调整步长有1秒、10秒、1分钟和10分钟四种,最大定时时间是59分59秒;具有启动、取消/停止、暂停功能,启动后以倒计时方式显示剩余时间;定时结束后数码显示为零时,蜂鸣器开始蜂鸣。具有简单、实用的特点。由于我们是第一次做电子课程设计,所以问题在所难免。在编写VerilogHDL时,未考虑简单易且未加注释。所以程序出错时就要花大量时间去检查。由于未画PCB板,所以在焊接的时候需要进行复杂的布线,这是一个巨大的工作量耗费了我们大量的时间。在调试时一旦出现差错,就不太容易发现。2、功能扩展方案(仅作理论讨论)五、本作品使用说明电源开关:用于打开和关闭该仪器。EN(使能按键):用于控制本作品是否工作。只有当使能按键被按下时,仪器才能工作。Setw(置位键):用于选定定时器所需定时的对应位。Set(置数键):用于设置选定位的具体数值,当使能开关打开,当置数键也按下时,可以通过四个按钮分别对分,秒进行置数。Start(开始键):用于设定好时间后启动秒表计时。可通过软件使start按键经过锁存器后进行到计数。Clr(清零键):用于计时器的清零复位(即当该按键按下时,数码管显示数位零)。七段数码管用于显示定时数字,set模块用控制数码管的扫描频率附录:主要模块程序时间预置模块程序modulezhishu(zs,clr,SSL,SSH,SML,SMH,SetSecL,SetSecH,SetMinL,SetMinH);inputclr,zs,SSL,SSH,SML,SMH;outputreg[3:0]SetSecL,SetSecH,SetMinL,SetMinH;always@(posedgeSSLornegedgeclr)if(!clr)beginSetSecL=0;endelseif(zs)if(SSL)beginif(SetSecL9)SetSecL=SetSecL+1;elseSetSecL=0;endalways@(posedgeSSHornegedgeclr)if(!clr)beginSetSecH=0;endelseif(zs)if(SSH)beginif(SetSecH5)SetSecH=SetSecH+1;elseSetSecH=0;endalways@(posedgeSMLornegedgeclr)if(!clr)beginSetMinL=0;endelseif(zs)if(SML)beginif(SetMinL9)SetMinL=SetMinL+1;elseSetMinL=0;endalways@(posedgeSMHornegedgeclr)if(!clr)beginSetMinH=0;endelseif(zs)if(SMH)beginif(SetMinH5)SetMinH=SetMinH+1;elseSetMinH=0;endendmodule下面是计数模块程序modulejishu(CP_1HZ,SetMinH,SetMinL,SetSecH,SetSecL,start,stop,pause,MinH,MinL,SecH,SecL,alarm);inputCP_1HZ,start,stop,pause;input[3:0]SetMinH,SetMinL,SetSecH,SetSecL;output[3:0]MinH,MinL,SecH,SecL;reg[3:0]MinH,MinL,SecH,SecL;outputalarm;assignalarm=({MinH,MinL,SecH,SecL}==16'h0000)&(start==1'b1)&(stop==1'b0);always@(posedgeCP_1HZorposedgestoporposedgepauseornegedgestart)beginif(~start){MinH,MinL,SecH,SecL}={SetMinH,SetMinL,SetSecH,SetSecL};elseif(stop){MinH,MinL,SecH,SecL}=16'h0000;elseif(pause){MinH,MinL,SecH,SecL}={MinH,MinL,SecH,SecL};elseif({MinH,MinL,SecH,SecL}==16'h0000)begin{MinH,MinL,SecH,SecL}={MinH,MinL,SecH,SecL};endelseif(SecL==4'h0&SecH!=4'h0)beginSecH=SecH-1'b1;SecL=4'h9;endelseif((SecL==4'h0)&(SecH==4'h0)&(MinL!=4'h0))beginMinL=MinL-1'b1;SecH=4'h5;SecL=4'h9;endelseif((SecL==4'h0)&(SecH==4'h0)&(MinL==4'h0)&(MinH!=4'h0))beginMinH=MinH-1'b1;MinL=4'h9;SecH=4'h5;SecL=4'h9;endelsebeginMinH=MinH;MinL=MinL;SecH=SecH;SecL=SecL-1'b1;endendendmodule下面是数码管显示模块modulexianshi(clk,MinH,MinL,SecH,SecL,dp,LED4,LED3,LED2,LED1,seg);inputclk;input[3:0]MinH,MinL,SecH,SecL;outputregLED4,LED3,LED2,LED1,dp;reg[1:0]q;output[6:0]seg;reg[6:0]seg;always@(posedgeclk)q=q+1'b1;always@(q)case(q)2'b00:{LED4,LED3,LED2,LED1}=4'b0001;2'b01:{LED4,LED3,LED2,LED1}=4'b0010;2'b10:begin{LED4,LED3,LED2,LED1}=4'b0100;dp=1;end2'b11:{LED4,LED3,LED2,LED1}=4'b1000;endcasealways@(MinH,MinL,SecH,SecL)if(q==2'b00)begincase(SecL)4'd0:seg=7'b0000001;4'd1:seg=7'b1001111;4'd2:seg=7'b0010010;4'd3:seg=7'b0000110;4'd4:seg=7'b1001100;4'd5:seg=7'b0100100;4'd6:s
本文标题:基于VHDL语言的数字定时器设计报告
链接地址:https://www.777doc.com/doc-2572755 .html