数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于VHDL语言的数字频率计的设计
数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。

它不仅可以测量正弦波、方波、三角波、尖脉冲信号和其他具有周期特性的信号的频率,而且还可以测量它们的周期。

经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪;可以测量电容做成数字式电容测量仪;在电路中增加传感器,还可以做成数字脉搏仪、计价器等。

因此数字频率计在测量物理量方面应用广泛。

本设计用VHDL在CPLD器件上实现数字频率计测频系统,能够用十进制数码显示被测信号的频率,能够测量正弦波、方波和三角波等信号的频率,而且还能对其他多种物理量进行测量。

具有体积小、可靠性高、功耗低的特点。

数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。

采用VDHL编程设计实现的数字频率计,除被测信号的整形部分、键输入部分和数码显示部分以外,其余全部在一片FPGA芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。

在不更改硬件电路的基础上,对系统进行各种改进还可以进一步提高系统的性能。

该数字频率计具有高速、精确、可靠、抗干扰性强和现场可编程等优点。

目前,数字频率计在扩张测量范围,提高测量精度,稳定度等方面已经日趋完善,成熟。

应用现代技术可以轻松的将数字频率计的测量上限扩展到微波频段。

随着科学技术的发展用户对数字频率计也提出了新的要求,对于低档产品要求使用操作方便,量程足够宽,可靠性高,价格低,对于高档产品要求高分辨率,高精度,高稳定度,高测量速率,除通常所用频率计功能外还要有数据处理功能,统计分析功能,时域分析功能等等,或者包含电压测量等其他功能,这些功能已经实现或者部分实现,但要真正完美实现这些目标还有许多工作要做。

数字频率计测频有两种方法:一是直接测频,即在一定闸门时间内测量被测信号的脉冲个数。

二是间接测频,如周期测频。

直接测频适用于高频信号的频率测量,间接测频适用于低频信号的频率测量,在一定闸门时间内测量被测信号的脉冲个数制成的数字频率计具有精度高,测量范围宽,便于实现测量过程自动化等一系列的突出特点.
我们都知道,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。

因此,频率检测是电子测量领域最基本的测量之一。

频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。

通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1s。

闸门时间可以根据需要取值,大于或小于1S都可以。

闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。

闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。

一般取1s作为闸门时间。

在“自顶向下”的设计中,首先需要进行行为设计,确定该电子系统或VLSI芯片的功能、性能及允许的芯片面积和成本等。

接着进行结构设计,根据该电子系统或芯片的特点,将其分解为接口清晰、相互关系明确、尽可能简单的子系统,得到一个总体结构。

这个结构可能包括算术运算单元、控制单元、数据通道、各种算法状态机等。

下一步是把结构转换成逻辑图,即进行逻辑设计。

接着进行电路设计,逻辑图将进一步转化成电路图。

在很多情况下,这时需进行硬件仿真,以最终确定逻辑设计的正确性。

最后是进行版图设计,即将电路图转化成版图。

传统的硬件设计采用自底向上(bottom_up)的设计方法。

这种设计方法在系统的设计后期进行仿真和调试,一旦考虑不周,系统设计存在较大缺陷,就有可能重新设计系统,使设计周期大大增加。

“自底向上”的设计,一般是在系统划分和分解的基础上先进行单元设计,在单元的精心设计后逐步向上进行功能块没计,然后再进行子系统的设计,最后完成系统的总体设计。

数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,其原理框图如图1所示。

数字频率计实际上是一个脉冲计数器,即在单位时间内计脉冲个数就可以得到信号频率,频率是计核心由计数器和脉冲信号发生器闸门电路、锁存器、显示器等组成。

工作过程为。

单位时间内脉冲控制闸门电路被测信号在1s 内通过闸门,经计数器在单位时间内脉冲结束,同时关闭闸门电路完成计数值锁存,之后将计数器清零为下一次锁存做准备锁存数据直接送到译码显示。

可控制计数锁存,译码显示系统使计数按照一定工作程序有条理地工作。

(如计数→显示→清零→准备→下次测量)如果在系统中不接锁存器,显示器上的数字就会随计数器状态不停地变化,只有在计数器停止时数字才会稳定所以在计数后必须接锁存器 设计一个四位十进制的数字频率计,要求具有以下功能:
(1) 测量范围:1Hz ~10kHz 。

(2) 测量误差≤1%。

(3) 响应时间≤15s 。

(4) 显示时间不少于1s 。

(5) 具有记忆显示的功能,即在测量的过程中不刷新数据,等数据过程结束后才显示测量结果,给出待测信号的频率值,并保存到下一次测量结束。

3.2 模块的划分
根据系统设计要求,系统设计采用自顶向下的设计方法,系统的组成框图如图3. 1所示,包括时基产生与测频时序控制电路模块,以及待测信号脉冲计数电路模块和锁存与译码显示控制电路模块。

(1) 时基产生与测频时序控制电路模块 时基产生与测频时序控制电路
待测信号 脉冲计 数电路 锁存与译码显示电路 EN
CLR
LOCK q[0:15] z1[0:6]
z2[0:6] z3[0:6] z4[0:6] 待测信号F_IN 标准时钟 CLK
图3.1 数字频率计的组成框图
时基产生与测频时序控制电路的主要产生计数允许信号EN、清零信号CLR和锁存信号LOCK。

(2) 待测信号脉冲计数电路模块
待测信号脉冲计数电路是对待测脉冲信号的频率进行测量,它可由4个十进制加法计数器组成,其中EN为计数选通控制信号,CLR为计数器清零信号。

在计数器清零信号CLR清零后,当计数选通控制信号EN有效时,开始对待测信号进行计数。

如果计数选通控制信号EN的宽度为1s,那么计数结果就为待测信号的频率;如果计数选通信号EN的宽度为100ms,那么待测信号的频率等于计数结果 10。

(3) 锁存与译码显示控制电路模块
锁存与译码显示控制电路用于实现记忆显示,在测量过程中不刷新新的数据,直到测量过程结束后,锁存显示测量结果,并且保存到下一次测量结束。

锁存与译码显示电路的功能是对四位BCD码进行锁存,并转换为对应的4组七段码,用于驱动数码管。

3.3设计分析
采用VHDL语言设计一个复杂的电路系统,运用自顶向下的设计思想,将系统按功能逐层分割的层次化设计方法进行设计。

在顶层对内部各功能块的连接关系和对外的接口关系进行了描述,而功能块的逻辑功能和具体实现形式则由下一层模块来描述。

各功能模块采用VHDL语言来描述。

时基产生与测频时序控制电路模块的VHDL源程序
程序ctrl.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CTRL IS
PORT(CLK: IN STD_LOGIC; -系统时钟
LOCK: OUT STD_LOGIC; -锁存信号
EN: OUT STD_LOGIC; -计数允许信号
CLR: OUT STD_LOGIC); -清零信号
END;
ARCHITECTURE ART OF CTRL IS
SIGNAL Q: STD_LOGIC_VECTOR(3 DOWNTO 0); -定义变量
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN -检测时钟上升沿
IF Q="1111"THEN
Q<="0000"; -计数大于15,清零
ELSE
Q<=Q+'1'; -允许计数
END IF;
END IF;
EN<=NOT Q(3);
LOCK<=Q(3) AND NOT(Q(2)) AND Q(1);
CLR<=Q(3) AND Q(2) AND NOT(Q(1));
END PROCESS;
END ART;
程序主要讲述了由时钟信号产生计数允许信号、清零信号和锁存信号,而且限定了响应时间为不超过15s。

4.2 待测信号脉冲计数电路模块的VHDL源程序
4.2.1 十进制加法计数器的VHDL源程序
程序cb10.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CB10 IS
PORT(CLK,EN,CLR: IN STD_LOGIC;
COUNT10: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); -计数输
信号
END CB10;
ARCHITECTURE ART OF CB10 IS -结构体
BEGIN
PROCESS(CLK,CLR,EN)
BEGIN
IF CLR='1' THEN
COUNT10<="0000"; -计数器清零
ELSIF RISING_EDGE(CLK) THEN -检测时钟上升沿
IF(EN='1') THEN -检测是否允许计数
IF COUNT10="1001" THEN
COUNT10<="0000"; -计数值满9清零
ELSE
COUNT10<=COUNT10+'1'; -允许计数
END IF;
END IF;
END IF;
END PROCESS;
END ART;
程序主要讲述了十进制加法计数器的使用,在符合了一定的标准以后十进制的使用,在计数器满9后清零。

4.2.2待测信号脉冲计数器的VHDL源程序
程序count.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT IS
PORT(CLK: IN STD_LOGIC; -待测时钟信号
EN: IN STD_LOGIC; -计数选通控制信号
CLR: IN STD_LOGIC; -计数器清零信号
QA,QB,QC,QD: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); -结果输出信

END;
ARCHITECTURE ART OF COUNT IS
COMPONENT CB10 -元件CB10引用说明语句PORT(CLK,EN,CLR: IN STD_LOGIC;
COUNT10: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); -计数输出信号
END COMPONENT;
SIGNAL CLK2: STD_LOGIC;
SIGNAL CLK3: STD_LOGIC;
SIGNAL CLK4: STD_LOGIC;
BEGIN
CLK2<=NOT QA(3);
CLK3<=NOT QB(3);
CLK4<=NOT QC(3);
U1:CB10 PORT MAP(CLK,EN,CLR,QA); -元件引用例示
U2:CB10 PORT MAP(CLK2,EN,CLR,QB); -元件引用例示
U3:CB10 PORT MAP(CLK3,EN,CLR,QC); -元件引用例示
U4:CB10 PORT MAP(CLK4,EN,CLR,QD); -元件引用例示
END ART;
4.3 锁存与译码显示控制电路模块的VHDL源程序
4.3.1 译码显示电路的VHDL源程序
程序bcd7.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY BCD7 IS
PORT(BCD: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -BCD输入信号LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); -七段译码输出信号END;
ARCHITECTURE ART OF BCD7 IS
BEGIN
LED<="0111111" WHEN BCD="0000" ELSE -对照七段字形显示译码器真值表
"0000110" WHEN BCD="0001" ELSE
"1011011" WHEN BCD="0010" ELSE
"1001111" WHEN BCD="0011" ELSE
"1100110" WHEN BCD="0100" ELSE
"1101101" WHEN BCD="0101" ELSE
"1111101" WHEN BCD="0110" ELSE
"0000111" WHEN BCD="0111" ELSE
"1111111" WHEN BCD="1000" ELSE
"1101111" WHEN BCD="1001" ELSE
"0000000";
END ART;
程序主要讲述了七段译码器的显示问题,对应的给出了信号输入过程中七段译码器的各种显示。

4.3.2 锁存与译码显示控制模块的VHDL源程序
程序lock.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LOCK IS
PORT(LOCK: IN STD_LOGIC;
QA,QB,QC,QD: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDA,LEDB,LEDC,LEDD: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));-频率
计数输出
END;
ARCHITECTURE ART OF LOCK IS
SIGNAL QAL,QBL,QCL,QDL: STD_LOGIC_VECTOR(3 DOWNTO 0);
COMPONENT BCD7 -元件BCD7引用说明语句PORT(BCD: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END COMPONENT;
BEGIN
PROCESS(LOCK)
BEGIN
IF(LOCK'EVENT AND LOCK='1')THEN -检测时钟上升沿
QAL<=QA;
QBL<=QB;
QCL<=QC;
QDL<=QD;
END IF;
END PROCESS;
U0: BCD7 PORT MAP(QAL,LEDA); -元件引用例示
U1: BCD7 PORT MAP(QBL,LEDB); -元件引用例示
U2: BCD7 PORT MAP(QCL,LEDC); -元件引用例示
U3: BCD7 PORT MAP(QDL,LEDD); -元件引用例示
END ART;
程序主要讲述了调用七段译码器的显示,将输入的信号经过译码之后在七段译码器上进行显示。

4.4 顶层电路的VHDL源程序
程序pinlvji.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY PINLVJI IS
PORT(F_IN,CLK: IN STD_LOGIC;
ENT,LOCKT,CLRT: BUFFER STD_LOGIC;
Z1,Z2,Z3,Z4: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END PINLVJI;
ARCHITECTURE ART OF PINLVJI IS
SIGNAL ENS,LOCKS,CLRS: STD_LOGIC;
SIGNAL QAS,QBS,QCS,QDS: STD_LOGIC_VECTOR(3 DOWNTO 0); COMPONENT CTRL -元件CTRL引用说明语句PORT(CLK: IN STD_LOGIC;
EN,LOCK,CLR: OUT STD_LOGIC);
END COMPONENT;
COMPONENT COUNT -元件COUNT引用说明语句PORT(CLK,EN,CLR: IN STD_LOGIC;
QA,QB,QC,QD: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END COMPONENT;
COMPONENT LOCK -元件LOCK引用说明语句PORT(LOCK: IN STD_LOGIC;
QA,QB,QC,QD: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDA,LEDB,LEDC,LEDD: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END COMPONENT;
BEGIN
ENT<=ENS;
LOCKT<=LOCKS;
CLRT<=CLRS;
U1:CTRL PORT MAP(CLK,ENS,LOCKS,CLRS); -元件引用例示
U2:COUNT PORT MAP(F_IN,ENS,CLRS,QAS,QBS,QCS,QDS); -元件引用例示U3:LOCK PORT MAP(LOCKS,QAS,QBS,QCS,QDS,Z1,Z2,Z3,Z4); -元件引用例示END ART;
数字频率计波形仿真
5.1 时基产生与测频时序控制电路模块的仿真
图5.1 时基产生与测频时序控制模块的仿真图
图5. 2 时基产生与测频时序控制电路模块的仿真图的详细
图5.1显示的是时基产生与测频时序控制电路模块的仿真图,很鲜明的给出了时钟信号与计数允许信号、清零信号和锁存信号的关系,而图5. 2更加详细的给出了计数允许信号、清零信号和锁存信号与变量Q之间所存在的相对应的关系。

5.2 待测信号脉冲计数电路模块的仿真
5.2.1 十进制加法计数器的仿真
图5.3 十进制加法计数器的仿真图
图5.3显示的是十进制加法计数器的仿真图,它详细的给出了计数输出信号与计数允许信号和清零信号之间的关系,能清楚的理解当CLR为0时,输出为0;在EN为1选通有效后,则开始计数。

5.2.2待测信号脉冲计数器的仿真
图5.4 测信号脉冲计数器的仿真
图5.4显示的是测信号脉冲计数器的仿真图,以图文的形式更直接的表现了信号脉冲的计数值,简介明了。

5.3 锁存与译码显示控制电路模块的仿真
5.3.1 译码显示电路的仿真
图5.5 译码显示电路的仿真图
图5.5显示的是译码显示电路的仿真图,它直接用图形诠释了程序中语句的意思,让人一目了然,更简单的了解了模块的作用。

5.3.2 锁存与译码显示控制模块的仿真
图5.6 锁存与译码显示控制电路的仿真图
图5.6显示的是锁存与译码显示控制电路的仿真图,给人第一感觉很繁琐,但是联系程序再看图就可以很轻松的清楚程序中之前还存在的疑惑也将图从而理解透彻。

5.4 数字频率计系统的仿真
图5.7 数字频率计系统的仿真
图5.7显示的是数字频率计系统的仿真图,它系统的体现了所设计的频率计的作用。

图5.7 数字频率计系统的仿真
图5.7显示的是数字频率计系统的仿真图,它系统的体现了所设计的频率计的作用。

相关文档
最新文档