FPGA设计:制作一个频率计

这次把自己做过的一个频率计拿出来跟大家分享一下。
项目采用VHDL语言来编写。
一、功能介绍
对信号源输入信号的频率进行正确测量并显示
测量范围:0-9999Hz;
测量精度:1Hz;
测量误差:1Hz;
因为用的FPGA板只有四个数码管,所以就采用了测量范围为0-9999,后面你们可以根据情况来增加测量范围。项目框图如下:
在这里插入图片描述
实现的功能是将输入的信号频率测量出来并且通过开发板上面的四个数码管显示出来,采用计频法,测量单位时间的脉冲个数。这里的单位时间我采用一秒(方便测量信号频率),因为值比较小,所以误差范围为1Hz。这里的一秒信号由板子的自带的50Mhz信号分频得到。

二、作品原理
我的设计原理是先通过24999999分频模块得到一个高低电平各为0.5秒,周期为1秒的信号clkin,然后再设计一个标志位,当clkin信号为高电平时候使标志位为01(用来当一个闸门使用),然后当标志位为01时候,测量此期间的输入信号有几个上升沿,然后当我clkin信号出现上升沿并且clkin为0时候将测量出的上升沿数量输出给译码器并且将用来测量信号频率值的信号量置零,方便下次计数。原理是利用计频法来测量信号频率值(在一个特定信号周期内,我通过测量输入信号有多少个上升沿),这里我们采用一秒的周期,这样我们测量出一秒内有几个上升沿就可以得到输入信号的频率值。然后再通过四个数码管将四位频率值进行显示输出。

这里举例其中两个模块!!!
三、各模块设计
3.1分频模块设计
这里的分频模块是为了得到1Hz的信号,因为板子上面带的信号频率为50MHz,所以这里进行50MHz分频得到1Hz的信号,当做闸控信号。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity devide50m is
	port(clkin:in std_logic;
		  clkout:buffer std_logic);
	end;
	
architecture rtl of devide50m is
	begin 
		process(clkin)
			variable num:integer range 0 to 24999999;   --定义一个变量,范围为0-49999999
				begin
					if clkin'event and clkin='1' then
						if num<(24999999) then num:=num+1;  --得到0.5秒的高电平
							else num:=0;clkout<=not clkout;  --得到0.5秒的低电平
						end if;
					end if;
		end process;
end;

3.2译码显示模块设计
将测量出的频率值通过译码显示模块显示出来。

library ieee;
use ieee.std_logic_1164.all;

entity display is
	port(data:in std_logic_vector(3 downto 0);
		seg:out std_logic_vector(6 downto 0)); --输出七段
		end;
		
architecture rtl of display is
	begin
		process(data)
			begin 
 case data is
when "0000"=>seg<="1000000"; --根据不同的值选择不同的输出,如下同理
when "0001"=>seg<="1111001";
when "0010"=>seg<="0100100";
when "0011"=>seg<="0110000";
when "0100"=>seg<="0011001";
when "0101"=>seg<="0010010";
when "0110"=>seg<="0000010";
when "0111"=>seg<="1111000";
when "1000"=>seg<="0000000";
when "1001"=>seg<="0010000";
when others=>seg<="ZZZZZZZ";
end case;
end process;
end;

3.3顶层文件及文字说明
在这里插入图片描述
先是50MHz信号输入进来到分频器,经过分频器后输出1Hz的时钟信号,然后这个1Hz的信号连接到标志位产生模块和计数模块,作用是为了闸控作用,当我clkin出现上升沿时候产生一个标志位给后面的计算模块,然后计数模块接收到标志位开始计数输入信号的频率,然后当1Hz的信号从低电平变为高电平时候,将计数频率的值输送给译码模块显示出来。

项目资源包:https://download.csdn.net/download/OMGMac/18840555
本设计仅供借鉴学习,请勿用于商业用途!!!
本人水平有限,上述信息仅供参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OMGMac

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值