些问题,许多频率计设计者提出了各种各样的频率计设计方案。常见的解决方案有以下几种: (1)采用对标频信号计数的修正来提高测量精度。这主要有双计数测频法和数字移相测频法。这两种方法都可以在一定程度上提高频率测量的精确度,则其精确度可以提高3~4倍。 (2)多周期同步测频法。多周期同步测频法的闸门时间不是固定的值,而是被测信号的整周期倍,即与被测信号同步。多周期同步测频法有以下特点:(1)测量误差与被测信号频率无关,即实现了被测频带内的等精度测量;(2)增大T 或提高 可以提高测量精度;(3)标准频率误差为 ,因为晶体稳定度很高, 标准频率误差可以进行校准,校准后的标准频率误差可以忽略[14]。
而在扩展测频宽度的问题上,通常采用的是量程自动转换法,这种方法通常可以达到一定精度的宽带的频率测量,但其在测频精度上也受到了很大的限制。 2.4 等精度数字频率计的工作原理
等精度测频的方法是从直接测频的基础上发展而来的。它采用频率准确的高频信号作为标准频率信号Fs,在闸门时间Tc内同时对标准信号脉冲和被测信号脉冲进行计数,并保证测量的闸门时间为被测信号的整数倍,实现整个频率测量范围内的测量精度相等,当标准信号频率够高,闸门时间足够长时,就可以实现高精度的频率测量。等精度测频原理示意图如图2-1所示:
其具体方法如下:
设定一个闸门时间为Tc,标准信号频率为fs,在Td 时间内对标准时钟信号和被测信号的脉冲计数值分别为Ns和Nx,则被测信号的频率测量值为: (2-6)
在这里对标准信号所产生的计时误差为 (2-7)
由于Δt≤Ts,可以得到 (2-8)
被测信号频率准确值 ,则测量频率的相对误差为 (2-9)
当Td 远远大于Δt 时,频率测量的最大误差为 (2-10)
可知,频率测量的最大误差由标准时钟信号的周期Ts 和频率计数的闸门时间Td决定,Ts 越小、Td 越大,测量误差越小,即测量精度越高。在整个频率测量范围内,实现了精度恒定的等精度测量。当标准信号选取准确的100MHz 信号源时, ,只要选取 ,就可使测量的最大相对误差≤10-6 ,即达到百万分之一的测量精度[15]。
从图中我们可以看出预置闸门时间为Tc,但当Tc结束时,并未停止对fx、fs的计数,而是等到被测信号的下一个高电平到来时才结束计数,这样实际的闸门时间即为Td,保证了测量的闸门时间为被测信号的整数倍,在整个频率测量范围内,精度恒定,实现了等精度测量。
等精度测频实现的原理图如下图2-2所示:
3 基于VHDL频率计功能模块的设计
经过分析可以知道,完成本频率计的设计共需一下四大模块,其设计结构图如图3-1所示。
其各部分的功能分析如下:
(1)计数器部分。此部分主要完成对fx、fs的计数,其组成的主要部分是标准计数器和被测信号计数器。
(2)运算器部分。完成运算,得出被测信号的频率fx。包含除法器和乘法器两部分。
(3)显示模块。显示是频率计必不可少的部分。在本设计中采用动态扫描显示,实现八位八段数码管的显示。
(4)控制器。此部分主要产生设计中所用到的一些内部控制信号,如复位、清零等信号。
3.1 计数器模块
计数器是数字频率计中最重要的部分,是数字频率计的核心,一个简单的数字频率计可以说就是一个计数器。计数器的准确性,两个计数器如何实现同步计数,对频率计的精度影响非常大。
此计数器为32位二进制,实现对标准频率信号和被测频率信号进行计数。它具有计数使能端(en)、异步清零端(clr)、时钟输入端(clk)等。当异步清零端(clr)为高电平时,不管计数使能端是否有效,时钟上升沿是否到来,计数器都立即清零,即Nx=0,Ns=0。只有异步清零端(clr)为低电平,并且计数使能端为高电平,有上升沿到来时,计数器才开始计数,当计数器计满时,进位输出为高电平。计数器的VHDL源程序如下: library ieee;--计数器
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity plj is
port(bclk: in std_logic;--标准时钟
xclk:in std_logic;--被测信号
clr,en: in std_logic;--清零,计数使能信号 data1:out std_logic_vector(31 downto 0);
data2:out std_logic_vector(31 downto 0));--数据输出 end plj;
architecture behav of plj is
signal Ns,Nx:std_logic_vector(31 downto 0); begin
process(xclk,clr,en) --被测信号计数,实际闸门 begin
if clr='1' then Nx<=(others=>'0'); elsif xclk'event and xclk='1' then if en='1' then Nx<=Nx+1; end if; end if; end process;
process(bclk,clr,en) --标准时钟计数 begin
if clr='1' then Ns<=(others=>'0'); elsif bclk'event and bclk='1' then if en='1' then Ns<=Ns+1; end if; end if;
end process; data1<=Nx; data2<=Ns; end behav;
计数器的仿真如图3-2所示:
3.2 运算器模块
根据等精度频率计的原理可以知道,在本设计中所用到的运算主要有乘法单元和除法单元两个模块。
3.2.1 乘法器
乘法器的运算,首先进行初始化。此处将乘积和乘数共用一个寄存器,初始化时乘积寄存器高位清零,乘数赋给乘积寄存器低位。然后检查乘积寄存器的最低有效位,此时乘积寄存器的最低有效位为1,则将被乘数寄存器与乘积寄存器左半部分相加,并将结果写回乘积寄存器左半部分,然后乘积寄存器右移1位,循环执行以上步骤32次。乘法器的硬件结构如图3-3所示。
乘法运算流程的如图3-4所示,仿真如图3-5所示,程序见附录A。
3.2.1 除法器
在Quartus Ⅱ软件集成开发环境中,虽然自带有LMP模块除法器,但它只能进行被除数为2的整数平方的运算,因此大大地限制了它的使用领域[16]。除法器可通过移位相减相除来实现,本设计中采用时序逻辑除法算法来实现除法运算,其过程如图3-6。除法器要求比较中间数据与除数的大小,如果除数大于中间数据则不进行减法,对应的结果寄存器置0,否则就置1。因为乘除法器是由时序逻辑电路构成的,计算结果需要很多个时钟周期才能得出结果,所以其结果的输出与数据的输入有一段时间间隔[17]。由于时序电路的这种特性,因此必须等到运算结果才能允许下一次输入,否则不允许输入,所以在这里要设置start信号和finished信号。除法器的流程图如图3-7所示。
除法器仿真如下图3-7所示:
相关推荐: