1、1、设计目标和要求1、设计一个4位十进制数字频率计。2、测量范围19999Hz,采取4位数码管显示,有溢出指示。3、量程有1KHz,1MHz两档,用LED灯指示。4、读数大于9999时,频率计处于超量程状态,发出溢出指示,下次量程,量程自动增大一档。5、读数小时,频率计处于前量程状态,下次测量,量程自动减小一档。6、采取记忆显示方法,在计数和显示电路中间加以锁存电路,每次计数结束,将计数结果送锁存器锁存,并保持到下一个计数结束。2、设计原理1、基础原理频率测量基础原理是计算每秒钟内待测信号脉冲个数。这就要求sysclk能产生一个1s脉宽周期信号,并对频率计每一个计数器cntp使能端进行同时控制
2、。当clK_cnt高电平时许可计数,并保持其所计数。在停止计数期间,首先需要一个锁存信号将计数器在前1s计数值锁存进锁存器reg中,并由外部7段译码器译出并稳定显示。原理图图1-1脉冲形成模块计数模块译码模块控制模块分频模块量程切换模块被测信号锁存清零使能基准信号图1-12、模块原理依据数字频率计基础原理,本文设计方案基础思想是分为五个模块来实现其功效,即整个数字频率计系统分为分频模块、控制模块、计数模块、译码模块和量程自动切换模块等多个单元,而且分别用VHDL对其进行编程,实现了闸门控制信号、计数电路、锁存电路、显示电路等。3、设计内容1、分频模块因为晶体振荡器提供为50MHz时钟,而在整个
3、频率计里将用到周期为2s,半个周期为1s闸门信号,所以我们在此模块先分频产生0.5Hz分频信号。always(posedge sysclk)beginif(cnt=26b10_1111_1010_1111_0000_1000_0000)begin clk_cnt=clk_cnt;cnt=0;endelsebegin cnt=cnt+1;endend二进制26b10_1111_1010_1111_0000_1000_0000,即为十进制50x107,由程序中clk_cnt=clk_cnt;cnt=0;得悉会产生我们想要周期为2sclk_int信号。仿真结果图1-2.图1-22、 4位十进制计数器
4、模块4位十进制计数器模块包含4位十进制计数器,用来对施加到时钟脉冲输入端待测信号产生脉冲进行计数,十进制计数器含有清零控制和进位扩展输出功效。always(posedge clkint)beginif(clk_cnt)beginif(cntp1=b1001)begin cntp1=b0000; cntp2=cntp2+1;if(cntp2=b1001)begin cntp2=b0000; cntp3=cntp3+1;if(cntp3=b1001)begin cntp3=b0000; cntp4=cntp4+1;if(cntp4=b1001)begin cntp4=b0000; led=1;本程
5、序采取是以累加方法结合巧妙地if语句进行四重循环,实现四位十进制不一样高低等级,实现计数。一位十进制原理图仿真图1-3。图1-3四位十进制原理图仿真图1-4。图1-43、锁存模块假如计数器输出直接和译码器相连接,那么在计数过程中输出端则随输入脉冲数增加而不停跳变,那么显示数码管则也会不停闪烁跳变,让人不能看到稳定输出,设锁存器后,则不再跳变,便可清楚读出计数结果。其生成功效模块图所表示:if(cntp1!=b0000|cntp2!=b0000|cntp3!=b0000|cntp4!=b0000)begincntq1=cntp1;cntq2=cntp2;cntq3=cntp3;cntq4=cnt
6、p4; cntp1=b0000;cntp2=b0000;cntp3=b0000;cntp4=b0000;4、动态扫描模块本设计采取扫描方法来实现LED数码管动态显示,控制好数码管之间延迟时间相当关键。依据人眼视觉暂留原理,LED数码管每秒导通16次以上,人眼就无法LED数码管短暂不亮,认为是一直点亮(其实LED数码管是以一定频率在闪动)。不过,延时(导通频率)也不是越小越好,因为LED数码管达成一定亮度需要一定时间。假如延时控制不好则会出现闪动,或亮度不够,依据经验,延时0.005S能够达成满意效果。另外,显示字符有改变时,可在延时抵达后送一个地电平(共阴极数码管)LED数码管先短暂熄灭,再显
7、示一个字符,可使在视觉上字符改变更清楚。begincase(cnt14:13)b00:begin scan=b00000001;dat=cntq1; endb01:begin scan=b00000010;dat=cntq2; endb10:begin scan=b00000100;dat=cntq3; endb11:begin scan=b00001000;dat=cntq4; enddefault:begin scan=bx;dat=bx; end5、译码模块译码模块是对计数出数进行译码显示出来。 endcasecase(dat3:0)4b0000:begin seg76:0=7b1111
8、110:end4b0001:seg76:0=7b0110000;4b0010:seg76:0=7b1101101;4b0011:seg76:0=7b1111001;4b0100:seg76:0=7b0110011;4b0101:seg76:0=7b1011011;4b0110:seg76:0=7b1011111;4b0111:seg76:0=7b1110000;4b1000:seg76:0=7b1111111;4b1001:seg76:0=7b1111011;default:seg76:0=bX;其中分别对应着十进制09这是个数字。6、编译仿真最终程序编译仿真结果图1-5。图1-5附录1: m
9、odule cymometer(seg7,scan,sysclk,clkin);output6:0seg7;output7:0scan;output led;reg led;input sysclk; /20MHz时钟信号input clkin;reg6:0seg7;reg7:0scan;reg25:0cnt;reg clk_cnt;reg2:0cntp1,cntp2,cntp3,cntp4;reg2:0cntq1,cntq2,cntq3,cntq4;reg3:0dat;always(posedge sysclk)beginif(cnt=26b1_0111_1101_0111_1000_010
10、0_0000)begin clk_cnt=clk_cnt;cnt=0;endelsebegin cnt=cnt+1;endendalways(posedge clkint)beginif(clk_cnt)beginif(cntp1=b1001)begin cntp1=b0000; cntp2=cntp2+1;if(cntp2=b1001)begin cntp2=b0000; cntp3=cntp3+1;if(cntp3=b1001)begin cntp3=b0000; cntp4=cntp4+1;if(cntp4=b1001)begin cntp4=b0000; led=1;endendend
11、endelse begin cntp1=cntp+1;endendelse beginif(cntp1!=b0000|cntp2!=b0000|cntp3!=b0000|cntp4!=b0000 |)begincntq1=cntp1;cntq2=cntp2;cntq3=cntp3;cntq4=cntp4; cntp1=b0000;cntp2=b0000;cntp3=b0000;cntp4=b0000; endendendalwaysbegincase(cnt14:13)b00:begin scan=b00000001;dat=cntq1; endb01:begin scan=b00000010
12、;dat=cntq2; endb10:begin scan=b00000100;dat=cntq3; endb11:begin scan=b00001000;dat=cntq4; enddefault:begin scan=bx;dat=bx; endendcasecase(dat3:0)4b0000:begin seg76:0=7b1111110:end4b0001:seg76:0=7b0110000;4b0010:seg76:0=7b1101101;4b0011:seg76:0=7b1111001;4b0100:seg76:0=7b0110011;4b0101:seg76:0=7b1011011;4b0110:seg76:0=7b1011111;4b0111:seg76:0=7b1110000;4b1000:seg76:0=7b1111111;4b1001:seg76:0=7b1111011;default:seg76:0=bX;endcaseendendmodule
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100