FPGA 频率计实验

如题所述

参考:正点原子开拓者 FPGA 开发指南

数字频率计是电子测量领域的基础工具,广泛应用于航天、电子、测控等多个行业。传统频率计在低频信号测量时,精度会下降,存在局限性。而等精度频率计则具有更高的测量精度,在整个频率区域内都能保持恒定的测试精度。

一、等精度频率计简介
频率测量在电子设计和测量领域中至关重要。常见的频率测量方法包括周期测量法和频率测量法。周期测量法通过测量信号周期T,计算频率f = 1/T;频率测量法在时间t内对脉冲数N进行计数,求出单位时间内的脉冲数作为频率。然而,这两种方法都存在±1个脉冲的误差,在实际应用中存在局限性。周期测量法适用于低频信号,频率测量法适用于高频信号,但都不能同时满足高低频率的测量精度要求。

等精度测量的最大特点是门控时间与被测信号相关,是信号的整数倍。在计数允许时间内,同时计数基准时钟和被测信号,通过数学公式推导得到被测信号的频率。由于门控信号是信号的整数倍,消除了±1周期误差,但会产生对基准时钟±1周期的误差。等精度测量原理图如下所示:

从以上等精度测量原理可得出首先,被测信号频率clk_fx的相对误差与被测信号频率无关;其次,增大测量时间段“软件闸门”或提高“标频”clk_fs,可减小相对误差,提高测量精度;最后,基准时钟clk_fs的石英晶振稳定性很高,相对误差很小,可忽略。假设基准时钟频率为100MHz,实际闸门时间大于或等于1s,则测量的最大相对误差小于或等于10^(-8),即精度达到1/100MHz。等精度测量的核心思想在于保证实际测量门闸内被测信号为整数个周期,设计中以被测信号的上升沿作为门闸的驱动信号,保证在“实际闸门”Tx内被测信号的个数为整数个周期,避免±1误差,但会产生高频基准时钟±1周期误差,对测量精度影响有限。

等精度测频原理图如下所示。其中,预置软件闸门信号GATE由FPGA的定时模块产生,时间宽度对测频精度影响较小,可在较大范围内选择。GATE信号经被测时钟clk_fx同步化到被测时钟域下。fs_cnt和fx_cnt是2个可控的32位高速计数器,fs_cnt_en和fx_cnt_en分别是其计数使能端,由同步化后的GATE信号控制。基准时钟clk_fs和待测信号clk_fx分别从时钟输入端输入。测量时,生成的GATE信号同步化后控制启动和关闭计数器,对被测信号和基准时钟计数。若实际闸门时间GATE_TIME内,计数器对被测信号的计数值为fx_cnt,对基准时钟的计数值为fs_cnt,则被测信号的频率为clk_fx,由公式计算得到。

二、实验任务
板载50MHz的时钟通过分频产生某一频率的时钟信号,作为被测时钟。然后用Verilog HDL编写的等精度测量模块测量被测时钟,并通过数码管显示。

三、程序设计
根据实验任务,设计测试时钟模块生成被测时钟,用等精度频率计模块测量频率,并将结果传输给数码管显示模块。系统功能框图如下所示:

由系统框图可知,FPGA部分包括四个模块:顶层模块(top_cymometer)、等精度频率计模块(cymometer)、时钟产生模块(clk_test)和数码管显示模块(seg_led)。各模块功能如下:

顶层模块(top_cymometer):完成对其他三个模块的例化,实现各模块间的数据交互。时钟产生模块产生被测时钟输出,接入等精度频率计模块进行频率测量,将测量结果传输给数码管驱动模块进行显示。

等精度频率计模块(cymometer):测量输入的被测时钟频率,并将测量结果输出。

时钟产生模块(clk_test):产生被测的时钟。

数码管显示模块(seg_led):将等精度频率计测得的时钟频率值在数码管上显示出来。

1、顶层模块的代码如下:

2、时钟产生模块的代码如下:

时钟产生模块通过分频产生被测时钟,修改代码第一行的DIV_N分频参数,可得到不同频率的时钟信号。例如,clk_in为系统时钟50MHz,分频参数为100,产生的时钟频率为50000000/100 = 500000Hz。

3、等精度频率计模块的代码如下:

等精度测量中需要一个闸门信号,且需要同步化到被测时钟域下。这里为了方便处理,用被测时钟控制闸门信号的产生,避免了同步化处理。门控时间由参数GATE_TIME设置,此处设为5000。门控时间越长,测量精度越高,但测量时间也会相应变慢。当测量频率较高的信号时,建议增大门控时间。

4、数码管显示模块的代码如下:

测量频率的相对误差与被测信号频率无关,仅与闸门时间和基准时钟频率有关。闸门时间越长,基准时钟频率越高,测频的相对误差越小。基准时钟频率可由稳定度好、精度高的高频率晶体振荡器产生,提高基准时钟频率,可使闸门时间缩短,提高测试速度。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜