常用频率测量法有:频率测量法,周期测量法,以及等精度测量法。这里设计一个基于等精度测量原理的简易频率计,对输入的未知时钟信号做频率测量,并将测量结果在数码管上显示。包括 4 个子模块,其中频率计算模块(freq_meter_calc)是核心模块,它将输入的待检测信号利用等精度测量法进行计算,得出被测时钟信号时钟频率并输出;数码管显示模块(seg_595_dynamic)接收频率计算模块输出的计算结果,并显示在数码管上,(已经实现);被测时钟生成模块(clk_test_gen)负责产生某一频率的待检测时钟信号(利用锁相环IP核);最后的顶层模块(freq_meter),内部将上述 3 个子功能模块实例化其中,连接各自对应信号,外部输入时钟、复位和待检测信号,输出段选、位选和待检测数据。这里使用 100 MHz 时钟作为标准时钟信号,从而提高测量精度。
频率计算模块(freq_meter_calc)代码如下:
module freq_meter_calc
(
input wire sys_clk ,
input wire sys_rst_n ,
input wire clk_test ,
output reg [33:0] freq
);
parameter CNT_GATE_S_MAX = 28'd74_999_999 ,
CNT_RISE_MAX = 28'd12_500_000 ;
parameter CLK_STAND_FREQ = 28'd100_000_000 ;
//wire define
wire clk_stand ;
wire gate_a_fall_s ;
wire gate_a_fall_t ;
//reg define
reg [27:0] cnt_gate_s ;
reg gate_s ;
reg gate_a ;
reg gate_a_stand ;
reg gate_a_test ;
reg [47:0] cnt_clk_stand