fpga等精度频率测量原理
之前讲到的测周测频存在+1误差,因为在闸门开始的时间内,计数不一定就开始了。例如测频方法,在低频时相对误差就大了。虽然有高频测频低频测周的说法,但难以确定一个界限。因此要找一个一劳永逸的频率算法。
等精度频率测量可以满足需要。它最大的特点在于,闸门时间永远是被测信号周期的整数倍。也就是说,当闸门使能时,实际闸门并未开始,而是要等到被测信号的上升沿到来之时,两个计数器才同时开始计数。闸门关闭也是要等到信号上升沿到来才真正的关闭。下面这个时序图(摘自百度文库)很好的说明这点。

要看懂这个时序图,计数使能的实现:
always @(posedge datain)
begin
ena <= gate;
end
相当于D触发器一样,闸门受同步了,延迟了。接着
always @(posedge datain)
begin
if(ena == 1)......end
always @(posedge clkref)
begin
if(ena == 1)......end
这种计数便能消除+1误差。所谓等精度,就是说相对误差和频率本身没有关系,无所谓高低频的顾虑。误差取决于标准信号,可以用锁相环产生。要进一步减少误差,应该提高标准信号的频率,使计数值增大。
最终的公式:fo/No = f1/N1。
---------------------------------------------------------------
补充,2014-12-16:
今天又看了一遍等精度测量的原理,觉得之前很多都理解的不到位,上面的代码也修改了一番。
我认为等精度测量的突出特点:多了标准信号;使能延迟;除法运算。
有段话说的好:等精度测频能够在整个频域内保持恒定的精度。当然,这不是说等精度测频没有误差,而是由于误差恒定,不催被测信号频率变化而变化,所以方便了频率补偿,有助于提高精度。这个恒定的误差只限于标准信号频率上。