《基于VHDL语言的数字定时器设计报告.doc》由会员分享,可在线阅读,更多相关《基于VHDL语言的数字定时器设计报告.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数字定时器设计报告2009-2010(第二学期)指导教师 :叶文霞小组成员:周喜强(20082526) 交控一班 陈成(20082477) 自动化一班 实习指导单位:信息科学技术学院2010年7月26日一、方案设计1方案论证和方案实现 根据系统的总体要求,把电路划分成若干功能块,从而得到系统框图。每个框图里边可以是一个或几个基本单元电路,并将总体指标分配给每个单元电路,然后根据各单元电路所要完成的任务来决定电路的总体结构。为完成系统的总体要求,由系统框图到单元电路的具体结构是多种多样的,经过较为详细的方案比较和论证,以技术上的可行性、使用上的安全可靠性和较高的性价比为主要依据,最后选定方案。方
2、案实现 尽量选用市场上可以提供的中、大规模集成电路芯片和各种分立元件等电子器件,并通过应用性设计来实现各功能单元的要求以及各功能单元之间的协调关系。本步骤的要点是: 熟悉目前数字或模拟集成电路等电子器件的分类、特点,从而合理选择所需要的电子器件。要求工作可靠、价格低廉。 对所选功能器件进行应用性设计时,要根据所用器件的技术参数和应完成的任务,正确估算外围电路的参数;对于数字集成电路要正确处理各功能输入端。 要保证各功能器件协调一致地工作。对于模拟系统,按照需要采用不同辊合方式把它们连接起来6对于数字系统,协调工作主要通过控制器来完成2、 系统原理框图(含工作原理介绍)本定时器设计的核心元件是E
3、PM570T100C5,该芯片通过编程可以实现选位、置位、启动、复位、倒计时等操作,显示采用了一个4位数码管,并采用供阳接法,可以动态扫描显示。该定时器可设定0到59分59秒的任何时间。其系统原理图如图1所示本设计大致分为五个模块,分别是时间预置、计数器、数码管显示、分频和蜂鸣模块。CPLD芯片提供了频率为5.56MHZ的晶振,我们用分频模块将其变为1HZ和200HZ的时钟信号,并用他们分别来控制计数模块和时间预置模块。在置数前由于键盘是由弹性材料制成,按动的时候有抖动的现象,所以在 功能控制数码管显示分频 电路 七段显示译码 计数器按键消抖&定时时间预置CP定时结束蜂鸣器响按键1 2 3 4
4、 图1置数模块前要交一个消抖模块,使按键的输入达到我们预想的效果。计数模块和时间预置是本设计的核心部分,通过他们分别对时间进行设置和计时,是实现定时器功能的主要模块,设计时将秒信号输入定时模块,此时系统将输出四个四位BCD码,以分别表示分、秒位。在预置数时,计数器以秒的速度递增,从而实现逐位预置数;而在定时倒计数时,计数器以秒的速度递减,从而实现倒计时。系统中的位选择器用于对六位进行循环扫描输出,并将扫描输出送到译码器。译码器模块可对输入的四位进行译码,同时在设置数值时用6个LED灯分别指示其所设置的位。通过计数器的输出来控制数码管模块,再通过数码管模块的输出信号来控制数码管的显示当前计数时刻
5、。在计数器模块设置了一个变量控制当计数器把设定的数值减到零时开始蜂鸣。3、主要电路设计与参数计算 前面已经讨论了本设计的各个模块,起主要模块有时间预置模块、计数器模块、LED显示模块。 图二 上图二为时间预置模块,其程序在后面附录上。其主要功能引脚如下 ZS(开始):用于控制置数模块是否启动。Clr(置数清零):用于置数时清零以便重新置数。SSL(秒低位设置):用于设置秒的个位。SSH(秒高位设置):用于设置秒的十位。SML(分低位设置):用于设置秒的个位。SMH分高位设置):用于设置分的十位。四个四位输出用于计数模块计数。 图三 上图三为计数器模块,其程序在后面附录上。它就是用部分功能按键来
6、控制倒计时。功能按键包括start(开始):当开始按键有效时,将将设置好的数按秒倒计时。pause(暂停):当暂停为有效时,倒计时停留在当前时刻。输出alarm信号用于控制当计数器倒计时0时控制蜂鸣蜂鸣。四个四位输出信号用于控制数码管显示。图四 上图四为计数器模块,其程序在后面附录上。该模块实现将计数器输出控制七段数码管的显示。通过位选来控制显示某个具体的数码管,通过段选控制该数码管显示所要求的数字。利用动态扫描来同时显示四个数码管。3、总体电路图(器件型号、元件参数应标出)二、调试步骤 本课程设计调试分为软件调试和硬件调试。必须先通过软件调试正确后才能焊接,焊接完成后再进行硬件调试。软件调试
7、主要用Quartus2软件来调试。硬件调试主要是看硬件电路功能是否满足要求,主要是通过电压来调试。其具体步骤如下:1、用Quartus2对各个模块进行综合、编译、仿真。仿真正确后下载到实验板上测试。修改在测试。直到满足需要为止。2、将各个模块连接起来构成系统,在对总的进行综合、编译、仿真。仿真正确后下载到实验板上测试。修改在测试。直到满足需要为止。3、用万用表测试硬件电路。主要测试三极管割断电压是否满足要求。各个管脚电压是否符合要求。如不符合要求再通过修改程序和布线。直到满足要求且功能都实现为止。三、测试数据及实验结果 置数波形图 此图说明分别按下a1,a2,a3,a4,就送给指数模块一个脉冲
8、,其相应位就自动加1。由此可以对分和秒的各位设置0到59分59秒的所需要倒计时的数。 计数波形图 上图说明,当使能和开始计数按键有效时且当设置数置入计数器时。计数器开始以秒倒计时。直至为零时。四、结论1、本方案特点及存在的问题通过测试,完成了定时器的基本功能。具有定时时间设置功能,定时调整步长有1秒、10秒、 1分钟和10分钟四种,最大定时时间是59分59秒;具有启动、取消/停止、暂停功能,启动后以倒计时方式显示剩余时间;定时结束后数码显示为零时,蜂鸣器开始蜂鸣。具有简单、实用的特点。由于我们是第一次做电子课程设计,所以问题在所难免。在编写Verilog HDL时,未考虑简单易且未加注释。所以
9、程序出错时就要花大量时间去检查。由于未画PCB板,所以在焊接的时候需要进行复杂的布线,这是一个巨大的工作量耗费了我们大量的时间。在调试时一旦出现差错,就不太容易发现。2、功能扩展方案(仅作理论讨论)五、本作品使用说明电源开关:用于打开和关闭该仪器。EN(使能按键):用于控制本作品是否工作。只有当使能按键被按下时,仪器才能工作。Setw(置位键):用于选定定时器所需定时的对应位。Set(置数键):用于设置选定位的具体数值,当使能开关打开,当置数键也按下时,可以通过四个按钮分别对分,秒进行置数。Start(开始键):用于设定好时间后启动秒表计时。可通过软件使start按键经过锁存器后进行到计数。C
10、lr(清零键):用于计时器的清零复位(即当该按键按下时,数码管显示数位零)。七段数码管用于显示定时数字,set模块用控制数码管的扫描频率 附录:主要模块程序时间预置模块程序module zhishu(zs,clr,SSL,SSH,SML,SMH,SetSecL,SetSecH,SetMinL,SetMinH);input clr,zs,SSL,SSH,SML,SMH;output reg3:0 SetSecL,SetSecH,SetMinL,SetMinH; always (posedge SSL or negedge clr)if(!clr) begin SetSecL=0; end els
11、e if(zs) if(SSL) begin if(SetSecL9) SetSecL=SetSecL+1; else SetSecL=0; end always (posedge SSH or negedge clr) if(!clr) begin SetSecH=0; end else if(zs) if(SSH) begin if(SetSecH5) SetSecH=SetSecH+1; else SetSecH=0; endalways (posedge SML or negedge clr)if(!clr) begin SetMinL=0; end else if(zs) if(SM
12、L) begin if(SetMinL9) SetMinL=SetMinL+1; else SetMinL=0; endalways (posedge SMH or negedge clr)if(!clr) begin SetMinH=0; end else if(zs) if(SMH) begin if(SetMinH5) SetMinH=SetMinH+1; else SetMinH=0; end endmodule 下面是计数模块程序 module jishu(CP_1HZ,SetMinH,SetMinL,SetSecH,SetSecL,start,stop,pause,MinH,Min
13、L,SecH,SecL,alarm);input CP_1HZ,start,stop,pause; input3:0 SetMinH,SetMinL,SetSecH,SetSecL;output3:0 MinH,MinL,SecH,SecL;reg3:0 MinH,MinL,SecH,SecL;output alarm;assign alarm=(MinH,MinL,SecH,SecL=16h0000)&(start=1b1)&(stop=1b0);always( posedge CP_1HZ or posedge stop or posedge pause or negedge start)
14、 begin if(start) MinH,MinL,SecH,SecL=SetMinH,SetMinL,SetSecH,SetSecL; else if(stop) MinH,MinL,SecH,SecL=16h0000; else if (pause) MinH,MinL,SecH,SecL=MinH,MinL,SecH,SecL; else if (MinH,MinL,SecH,SecL=16h0000) begin MinH,MinL,SecH,SecL=MinH,MinL,SecH,SecL;end else if (SecL=4h0&SecH!=4h0) begin SecH=Se
15、cH-1b1;SecL=4h9;end else if (SecL=4h0)&(SecH=4h0)&(MinL!=4h0) begin MinL=MinL-1b1;SecH=4h5;SecL=4h9;end else if (SecL=4h0)&(SecH=4h0)&(MinL=4h0)&(MinH!=4h0) begin MinH=MinH-1b1;MinL=4h9;SecH=4h5;SecL=4h9;end else begin MinH=MinH;MinL=MinL;SecH=SecH;SecL=SecL-1b1;endendendmodule下面是数码管显示模块module xians
16、hi(clk,MinH,MinL,SecH,SecL,dp,LED4,LED3,LED2,LED1,seg);input clk;input3:0MinH,MinL,SecH,SecL;output reg LED4,LED3,LED2,LED1,dp;reg1:0q;output6:0seg;reg6:0seg;always(posedge clk)q=q+1b1;always(q)case(q) 2b00:LED4,LED3,LED2,LED1=4b0001; 2b01:LED4,LED3,LED2,LED1=4b0010; 2b10:begin LED4,LED3,LED2,LED1=4
17、b0100;dp=1;end 2b11:LED4,LED3,LED2,LED1=4b1000;endcase always(MinH,MinL,SecH,SecL)if(q=2b00) begin case(SecL) 4d0:seg=7b0000001; 4d1:seg=7b1001111; 4d2:seg=7b0010010; 4d3:seg=7b0000110; 4d4:seg=7b1001100; 4d5:seg=7b0100100; 4d6:seg=7b0100000; 4d7:seg=7b0001111; 4d8:seg=7b0000000; 4d9:seg=7b0000100;
18、default:seg=7bx; endcaseendelse if(q=2b01)begin case(SecH) 4d0:seg=7b0000001; 4d1:seg=7b1001111; 4d2:seg=7b0010010; 4d3:seg=7b0000110; 4d4:seg=7b1001100; 4d5:seg=7b0100100; 4d6:seg=7b0100000; 4d7:seg=7b0001111; 4d8:seg=7b0000000; 4d9:seg=7b0000100; default:seg=7bx; endcase endelse if(q=2b10)begin ca
19、se(MinL) 4d0:seg=7b0000001; 4d1:seg=7b1001111; 4d2:seg=7b0010010; 4d3:seg=7b0000110; 4d4:seg=7b1001100; 4d5:seg=7b0100100; 4d6:seg=7b0100000; 4d7:seg=7b0001111; 4d8:seg=7b0000000; 4d9:seg=7b0000100; default:seg=7bx; endcaseendelse begin case(MinH) 4d0:seg=7b0000001; 4d1:seg=7b1001111; 4d2:seg=7b0010010; 4d3:seg=7b0000110; 4d4:seg=7b1001100; 4d5:seg=7b0100100; 4d6:seg=7b0100000; 4d7:seg=7b0001111; 4d8:seg=7b0000000; 4d9:seg=7b0000100; default:seg=7bx; endcaseendendmodule
限制150内