欢迎来到天天文库
浏览记录
ID:40415999
大小:629.01 KB
页数:14页
时间:2019-08-02
《VHDL语言设计数字频率计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数字频率计的设计一、频率计实现的功能要设计的频率计的测量范围为1MHz。为了提高测量的精度,量程分为三档,分别是:10kHz、100kHz、1MHz。并要求在测量频率大于或小于选择的量程时,频率计自动换档。1、当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增加一档。2、当读数小于009时,频率计处于欠量程状态,下一次测量时,量程自动减小一档。3、当超出测量范围时,显示错误。4、在计数时不显示数据,计数完成后只显示测量结果。5、小数点位置要自动移位。二、频率计各部分的分析在这个设计中,需要用计数器来进行计数,而且计数器在各个档位要被重复使用,在测量的过程中
2、,计数允许时钟信号还要进行调整,故将计数器设计成一个单独的模块,提供计数值的输出。显示结果包括数值显示,档位显示及溢出标志显示。其中数值显示要用到三个数码管,实验箱上连在一起的三个数码管中,只有两个数码管内部接有译码器,因此我们自己还要在程序中为那个没有译码器的数码管再加一段七段译码器程序来显示结果。档位标志由三个LED灯来显示,代替数码管上的小数点的功能。溢出标志由两个LED灯来显示,其中一个显示结果溢出,另一个显示输入信号在测量范围之内。该频率计的顶层逻辑电路原理图如图(1)所示:图(1)三、频率计各部分的设计和实现从上面的分析可以知道,频率计可以由三个模块来组成。下
3、面对各个模块的设计方法和实现方法进行详细说明。1、时基进程的设计和实现在实际使用时,输入的信号是随意的,没有办法预知输入的频率。因此选取频率计的时基是非常重要的。在设计要求中,将量程分为三档,在某一档进行测量时,需要提供该档的时基。在10kHz档,该档最大读数为9.99kHz,最小读数为0.01kHz,所以要提供的时基是频率为0.01kHz的脉冲。同理,在100kHz档上,要提供的时基应该是频率为0.1kHz的脉冲。在1MHz档上,要提供的时基是频率为1kHz的脉冲。这三种脉冲信号从输入信号中提取,可以采用分频的方法来产生。将输入信号先进行分频产生1kHz的脉冲信号,然后
4、将分频后的1kHz信号通过一个10倍的分频器,产生0.1kHz的脉冲信号,同时使用一个100倍分频器对1kHz的信号分频产生0.01kHz的脉冲信号。在测量频率时,采用输入信号作为时基,以输入信号为时钟,用一个计数器测量在一个时基周期里输入的信号的周期数,这样就可以得到输入信号的频率。产生一个高电平为时基信号周期的脉冲信号作为时基,使得能够在程序中以“如果时基信号为1”作为判断条件,如果满足条件则计数器开始计数。同理,在设计中还要产生高电平为时基信号周期的1/10和1/100的脉冲信号作为时基。这三种时基采用有限状态机来实现。状态机采用1kHz的脉冲信号触发,由于还要产生
5、高电平为10ms和1ms的脉冲信号,故采用100个状态的有限状态机。要产生高电平为1ms的脉冲信号,只要在状态99的时候产生高电平,状态100的时候恢复到低电平即可。要产生高电平为10ms的脉冲信号,只要在状态90的时候产生高电平,在状态100的时候恢复到低电平即可。需要产生哪一个时基就根据此时频率计所在的档位作为判断条件进行控制。在100个状态中,很多状态的功能是相同的,可以将它们合并在一起。2、计数器的设计和实现为了计数方便,将计数器定义成一个整型信号。只要使用“计数器<=计数器+1;”就可以。这个计数值要作为显示输出,就要将这个计数器用个位、十位、百位分开表示,并且
6、要遵循加法规则。这样可以直接通过七段译码器进行显示。在不同的档位,小数点的位置是不同的,可以用小数点的显示所在的档位为判断条件。由于实验箱上的数码管没有小数点的,故在实验板上用三个LED灯来代替小数点的现实。计数器的VHDL语言描述如程序1所示。其中,reset为异步置位端口,sig_clk为时钟输入端口,en为信号输入端口,q1为计数值的个位输出端口,q2为计数值的十位输出端口,q3为计数值的百位输出端口。cou1为计数值的个位,cou2为计数值的十位,cou3为计数值的百位。ctrcou为控制计数功能的进程,outctr为控制计数值输出的进程。程序1:libraryi
7、eee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitycounterisport(reset:instd_logic;sig_clk:instd_logic;--时钟输入端口en:instd_logic;--信号输入端口q1:outstd_logic_vector(3downto0);--计数值的个位输出端口q2:outstd_logic_vector(3downto0);--计数值的十位输
此文档下载收益归作者所有