基于FPGA的同步测周期高精度数字频率计的设计
发布时间:2007/8/29 0:00:00 访问次数:440
本文介绍了一种同步测周期计数器的设计,并基于该计数器设计了一个高精度的数字频率计。文中给出了计数器的VHDL编码,并对频率计的FPGA实现进行了仿真验证,给出了测试结果。
在现代数字电路设计中,采用FPGA结合硬件描述语言VHDL可以设计出各种复杂的时序和逻辑电路,具有设计灵活、可编程、高性能等优点。本文将介绍一种基于FPGA,采用同步测周期的方法来实现宽频段高精度数字频率计的设计。
图1 同步测周期计数器
同步测周期频率计的原理
在数字频率计中,测周期计数器是主要的电路,其功能是:使用标准时钟以被测频率信号的一个周期为时限进行脉冲计数。传统的测周期计数器采用门控计数器来实现,即采用一个同被测频率信号周期宽度相同的门控脉冲来控制计数器的计停。其缺点在于无法实现对被测信号的连续测周期计数。
本文设计的同步测周期计数器如图1所示。图中计数器的计数时钟为clk0, 频率为f0;被测信号为clkx,频率为fx。采用一个D触发器对输入的被测信号clkx进行同步,
同步输出为s0。在clk0的上升沿到来之前,如果clkx出现了上升跳变,则le信号变为高电平,计数器ct的重载信号和锁存器cout的使能信号有效。当clk0的上升沿到来时,计数器的计数值锁存,同时计数器重载为1,重新开始计数,le变为低电平。计数器在其他时间里进行加1计数,锁存器的值则保持不变。该测周期计数器能在clkx的每个上升沿之后输出计数值,实现了对被测信号进行测周期计数,并始终输出其最新一个周期的计数值,图中cint端输出一个clk0周期宽度的高脉冲,用于指示新的计数值锁存。
图2 同步测周期数字频率计
图3 频率计cint的改进电路
设该计数器的测周期计数值为M0,由于同步测周期法的分辨率为一个标准时钟周期,因此有:
该同步测周期计数器的测周期计数值最小为2,要求被测信号高低电平的宽度大于一个标准时钟周期。
基于上述同步测周期计数器,本文设计了如图2所示的高精度数字频率计。freq_div模块是一个分频器,对标准时钟clk0进行系数为C0的分频。频率计采用了两个同步测周期计数器同时工作,计数值输出端口分别为cout和mout。为了避免由于同步测周期计数器中被测信号和标准时钟不同步,le信号高电平的宽度不固定而造成的计数出错,在实际应用中,采取将被测信号先经过一个D触发器同步后再送入计数器的方法,以保证计数的可靠性,其计数值和频率的关系仍满足(1)式。设cout输出的值为C,mout输出的值为M,根据频率计的结构,对于其中以clkx为计数时钟的计数器,由(1)式得:
同理,对于以clk0为计数时钟的计数器,有:
根据两个测周期计数器的计数值M、C,被测信号的频率按下式计算得到
根据(3)式,计算结果的最大误差为:
相对误差为:
因此,只要使计数值C足够大就可以保证频率测量的精度。将(3)和(4)两式相除并忽略小项得C和C0的关系如下:
给定C0,测周期计数值C的最大可变范围为:。因此,根据实际测量精度的要求,设定适当的分频器分频系数C0,即可保证实际的测周期计数值C的大小在精度要求的范围内。对于上述的数字频率计,如果增大分频器分频系数C0,提高测周期计数器的计数范围,可实现对输入信号宽频段高精度的频率测量。
图4 输入被测信号周期为156ms时的仿真波形
数字频率计的VHDL实现
上述的同步测周期数字频率计在Altera 公司的FPGA开发平台Quartus II中实现,模块采用VHDL语言描述,具有通用性和可重用性。图1中的同步测周期计数器的VHDL描述如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity freq_count is --实体定义
port( reset: in std_logic;
clk0 : in std_logic;
clkx : in std_logic;
cint : out std_logic;
cout : out std_logic_vector(23 downto 0));
end entity freq_count;
architecture ar of freq_co
本文介绍了一种同步测周期计数器的设计,并基于该计数器设计了一个高精度的数字频率计。文中给出了计数器的VHDL编码,并对频率计的FPGA实现进行了仿真验证,给出了测试结果。
在现代数字电路设计中,采用FPGA结合硬件描述语言VHDL可以设计出各种复杂的时序和逻辑电路,具有设计灵活、可编程、高性能等优点。本文将介绍一种基于FPGA,采用同步测周期的方法来实现宽频段高精度数字频率计的设计。
图1 同步测周期计数器
同步测周期频率计的原理
在数字频率计中,测周期计数器是主要的电路,其功能是:使用标准时钟以被测频率信号的一个周期为时限进行脉冲计数。传统的测周期计数器采用门控计数器来实现,即采用一个同被测频率信号周期宽度相同的门控脉冲来控制计数器的计停。其缺点在于无法实现对被测信号的连续测周期计数。
本文设计的同步测周期计数器如图1所示。图中计数器的计数时钟为clk0, 频率为f0;被测信号为clkx,频率为fx。采用一个D触发器对输入的被测信号clkx进行同步,
同步输出为s0。在clk0的上升沿到来之前,如果clkx出现了上升跳变,则le信号变为高电平,计数器ct的重载信号和锁存器cout的使能信号有效。当clk0的上升沿到来时,计数器的计数值锁存,同时计数器重载为1,重新开始计数,le变为低电平。计数器在其他时间里进行加1计数,锁存器的值则保持不变。该测周期计数器能在clkx的每个上升沿之后输出计数值,实现了对被测信号进行测周期计数,并始终输出其最新一个周期的计数值,图中cint端输出一个clk0周期宽度的高脉冲,用于指示新的计数值锁存。
图2 同步测周期数字频率计
图3 频率计cint的改进电路
设该计数器的测周期计数值为M0,由于同步测周期法的分辨率为一个标准时钟周期,因此有:
该同步测周期计数器的测周期计数值最小为2,要求被测信号高低电平的宽度大于一个标准时钟周期。
基于上述同步测周期计数器,本文设计了如图2所示的高精度数字频率计。freq_div模块是一个分频器,对标准时钟clk0进行系数为C0的分频。频率计采用了两个同步测周期计数器同时工作,计数值输出端口分别为cout和mout。为了避免由于同步测周期计数器中被测信号和标准时钟不同步,le信号高电平的宽度不固定而造成的计数出错,在实际应用中,采取将被测信号先经过一个D触发器同步后再送入计数器的方法,以保证计数的可靠性,其计数值和频率的关系仍满足(1)式。设cout输出的值为C,mout输出的值为M,根据频率计的结构,对于其中以clkx为计数时钟的计数器,由(1)式得:
同理,对于以clk0为计数时钟的计数器,有:
根据两个测周期计数器的计数值M、C,被测信号的频率按下式计算得到
根据(3)式,计算结果的最大误差为:
相对误差为:
因此,只要使计数值C足够大就可以保证频率测量的精度。将(3)和(4)两式相除并忽略小项得C和C0的关系如下:
给定C0,测周期计数值C的最大可变范围为:。因此,根据实际测量精度的要求,设定适当的分频器分频系数C0,即可保证实际的测周期计数值C的大小在精度要求的范围内。对于上述的数字频率计,如果增大分频器分频系数C0,提高测周期计数器的计数范围,可实现对输入信号宽频段高精度的频率测量。
图4 输入被测信号周期为156ms时的仿真波形
数字频率计的VHDL实现
上述的同步测周期数字频率计在Altera 公司的FPGA开发平台Quartus II中实现,模块采用VHDL语言描述,具有通用性和可重用性。图1中的同步测周期计数器的VHDL描述如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity freq_count is --实体定义
port( reset: in std_logic;
clk0 : in std_logic;
clkx : in std_logic;
cint : out std_logic;
cout : out std_logic_vector(23 downto 0));
end entity freq_count;
architecture ar of freq_co
上一篇:汽车电子化为半导体企业带来挑战