基于测频原理的频率计.docx

上传人:b****6 文档编号:13495029 上传时间:2023-06-14 格式:DOCX 页数:22 大小:321.25KB
下载 相关 举报
基于测频原理的频率计.docx_第1页
第1页 / 共22页
基于测频原理的频率计.docx_第2页
第2页 / 共22页
基于测频原理的频率计.docx_第3页
第3页 / 共22页
基于测频原理的频率计.docx_第4页
第4页 / 共22页
基于测频原理的频率计.docx_第5页
第5页 / 共22页
基于测频原理的频率计.docx_第6页
第6页 / 共22页
基于测频原理的频率计.docx_第7页
第7页 / 共22页
基于测频原理的频率计.docx_第8页
第8页 / 共22页
基于测频原理的频率计.docx_第9页
第9页 / 共22页
基于测频原理的频率计.docx_第10页
第10页 / 共22页
基于测频原理的频率计.docx_第11页
第11页 / 共22页
基于测频原理的频率计.docx_第12页
第12页 / 共22页
基于测频原理的频率计.docx_第13页
第13页 / 共22页
基于测频原理的频率计.docx_第14页
第14页 / 共22页
基于测频原理的频率计.docx_第15页
第15页 / 共22页
基于测频原理的频率计.docx_第16页
第16页 / 共22页
基于测频原理的频率计.docx_第17页
第17页 / 共22页
基于测频原理的频率计.docx_第18页
第18页 / 共22页
基于测频原理的频率计.docx_第19页
第19页 / 共22页
基于测频原理的频率计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于测频原理的频率计.docx

《基于测频原理的频率计.docx》由会员分享,可在线阅读,更多相关《基于测频原理的频率计.docx(22页珍藏版)》请在冰点文库上搜索。

基于测频原理的频率计.docx

基于测频原理的频率计

课程设计任务书

学生姓名:

王耀辉专业班级:

通信1304

指导教师:

陈适工作单位:

信息工程学院

题目:

采用测频原理的数字频率计

初始条件:

VHDL硬件描述语言,ISEDesignSuite开发环境,ModelsimSE仿真环境

要求完成的主要任务:

1.采用测频法,设计一个4位十进制数字显示的数字频率计

2.其测量的范围为1~9999KHz

课程设计进度安排

阶段内容

所需时间

1

方案设计

1天

2

软件设计

2天

3

系统调试

1天

4

撰写报告

1天

合计

5天

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

 

1.FPGA、VHDL及ISE概述3

1.1FPGA简介3

1.2VHDL概述3

1.3ISE5

2频率测量原理及方案6

2.1设计要求6

2.2频率测量方法6

2.2.1时间门限测量法6

2.2.2标准频率比较测量法6

2.2.3等精度测量法7

2.3方案提出及确定7

2.4系统设计8

2.5系统组成9

2.6小结10

6参考文献22

摘要

数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。

随着现场可编程门阵列FPGA的广泛应用,运用VHDL等硬件描述语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。

采用FPGA现场可编程门阵列为控制核心,通过硬件描述语言VHDL编程,在QuartusII仿真平台上编译、仿真、调试,并下载到FPGA芯片上,通过严格的测试后,能够较准确地测量方波、正弦波、三角波、矩齿波等各种常用的信号的频率,而且还能对其他多种物理量进行测量

本文介绍了如何采用测频法,利用FPGA现场可编程门阵列为控制核心,通过VHDL语言编程,在ISE仿真平台上仿真平台上编译、仿真、调试,设计一个4位十进制数字显示的数字频率计以此来巩固课堂理论学习,并能用所学理论知识正确分析硬件设计基本问题和解释数字电路的基本现象。

关键字:

FPGA,数字电路,测频法,数字频率计

 

Abstract

Digitalfrequencymeterisadigitalcircuitinatypicalapplication,theactualhardwaredesignofdevicesusedinmorecomplicatedconnection,butwillhaverelativelylargedelay,causedbymeasurementerror,poorreliability.WiththeFPGAfieldprogrammablegatearrayawiderangeofapplicationstothedevelopmentasameansofusingtheVHDLhardwaredescriptionlanguagesuchaslanguage,willgreatlysimplifythewholesystemtoimproveoverallsystemperformanceandreliability.

Digitalfrequencymeterismadebyusingadigitalcircuitsystemcanachievethecyclicalchangesinsignalfrequencymeasuringinstruments.Frequencymeterismainlyusedformeasuringfrequencysinewave,squarewave,trianglewaveandspikesandotherperiodicsignal.Itsextendedfunctionalitycanmeasurecycleandpulsewidthofthesignal.

Thisarticledescribeshowtousethefrequencymeasurementmethod,usingoffieldprogrammablegatearrayFPGAforthecontrolofthecoreandVHDLlanguageprogramming,simulationinQuartusIIdevelopmentenvironment,thedesignofafourdecimaldigitsdisplayeddigitalfrequencymeterinordertoreinforceclassroomlearningtheoryandthetheoryofknowledgecanbeusedtocorrectlyanalyzehardwarethedesignandinterpretationofthebasicproblemsofthebasicphenomenaofdigitalcircuits.

Keywords:

FPGA,Digitalcircuits,Frequencymeasurementmethod,Digitalfrequencymeter

 

1.FPGA、VHDL及ISE概述

本章首先对设计所采用的可编程逻辑器件FPGA及VHDL以及仿真软件ISE进行简单的介绍,对设计有些基本的了解。

1.1FPGA简介

FPGA是20世纪80年代中期出现的高密度可编程逻辑器件,它一般由布线资源分隔的可编程逻辑单元构成阵列,又由可编程I/O单元围绕阵列构成整个芯片,排列阵列的饿逻辑单元由布线通道中的可编程内连线连接起来实现一定的逻辑功能。

一个FPGA包含丰富的具有快速系统速度的逻辑门、寄存器和I/O组成。

FPGA/CPLD芯片都是特殊的ASIC芯片,除了具有ASIC的特点外还有一下几个优点:

随着超大规模集成电路VLSI工艺的不断提高,单一芯片内部可以容纳上百万个晶体管;FPGA/CPLD芯片出厂前100%都做过测试,不需要设计人员承担风险和费用;用户可以反复地编程、擦除、使用或者在外围电路不动的的情况下,用不同软件就可实现不同的功能,用FPGA/CPLD试制样片,能以最快的速度占领市场。

FPGA/CPLD软件包中有各种输入工具、仿真工具、版图设计及编程器等全线产品,使电路设计人员在较短的时间内就可以完成电路的输入、编译、优化、仿真,直至最后芯片的制作。

1.2VHDL概述

VHDL语言是一种用于电路设计的高级语言。

它在80年代的后期出现。

最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言

  VHDL的英文全写是:

VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage.翻译成中文就是超高速集成电路硬件描述语言。

因此它的应用主要是应用在数字电路的设计中。

目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。

当然在一些实力较为雄厚的单位,它也被用来设计ASIC。

VHDL主要用于描述数字系统的结构,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

VHDL主要特点有:

(1)功能强大、设计灵活

(2)支持广泛、易于修改

(3)强大的系统硬件描述能力

(4)独立于器件的设计、与工艺无关

(5)很强的移植能力

(6)易于共享和复用

VHDL系统优势:

(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。

强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。

符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

1.3ISE

ISE是使用XILINX的FPGA的必备的设计工具。

目前官方提供下载的最新版本是14.4。

它可以完成FPGA开发的全部流程,包括设计输入、仿真、综合、布局布线、生成BIT文件、配置以及在线调试等,功能非常强大。

ISE除了功能完整,使用方便外,它的设计性能也非常好,拿ISE9.x来说,其设计性能比其他解决方案平均快30%,它集成的时序收敛流程整合了增强性物理综合优化,提供最佳的时钟布局、更好的封装和时序收敛映射,从而获得更高的设计性能。

先进的综合和实现算法将动态功耗降低了10%。

 

2频率测量原理及方案

本章首先介绍了数字频率计设计的要求和频率测量的工作原理,最后对系统的设计方案进行探讨,综合起来形成数字频率计的设计思路以及原理框图。

2.1设计要求

1.采用测频法,设计一个4位十进制数字显示的数字频率计

2.其测量的范围为1~9999KHz

2.2频率测量方法

数字频率计是用于测量信号频率的电路。

测量信号的频率参数是最常用的测量方法之一。

实现频率测量的方法比较多,在此我们主要介绍三种常用的方法:

时间门限测量法、标准频率比较测量法、等精度测量法。

2.2.1时间门限测量法

在一定的时间门限T内,如果测得输入信号的脉冲数为N,设待测信号的频率为fx,则该信号的频率为

改变时间T,则可改变测量频率范围。

例如,当T=1s,则fx=N(Hz);T=1ms,则fx=N(kHz)。

2.2.2标准频率比较测量法

用两组计数器在相同的时间门限内同时计数,测得待测信号的脉冲个数为N1、已知的标准频率信号的脉冲个数为N2,设待测信号的频率为fx,已知的标准频率信号的频率为f0;由于测量时间相同,则可得到如下等式:

从上式可以得出待测频率的公式为

标准频率比较测量法对测量时产生的时间门限的精度要求不高,对标准频率信号的频率准确度和频率的稳定度要求较高,标准信号的频率越高,测量的精度就比较高。

该方法的测量时间误差与时间门限测量法的相同,可能的最大误差为正负一个待测信号周期,即Δt=±1/fx。

2.2.3等精度测量法

等精度测量法的机理是在标准频率比较测量法的基础上改变计数器的计数开始和结束与闸门门限的上升沿和下降沿的严格关系。

当闸门门限的上升沿到来时,如果待测量信号的上升沿未到时两组计数器也不计数,只有在待测量信号的上升沿到来时,两组计数器才开始计数;当闸门门限的下降沿到来时,如果待测量信号的一个周期未结束时两组计数器也不停止计数,只有在待测量信号的一个周期结束时两组计数器才停止计数。

这样就克服了待测量信号的脉冲周期不完整的问题,其误差只由标准频率信号产生,与待测量信号的频率无关。

最大误差为正负一个标准频率周期,即Δt=±1/f0。

由于一般标准信号频率都在几十兆赫兹以上,因此误差小于10-6HZ。

2.3方案提出及确定

方法一:

采用小规模数字集成电路制作

被测信号经过放大整形变换为脉冲信号后加到主控门的输入端,时基信号经控制电路产生闸门信号送至主控门,只有在闸门信号采样期间内输入信号才通过主控门,若时基信号周期为T,进入计数器的输入脉冲数为N,则被信号的测频率其频率F=N/T,其原理方框图如图2-1所示

被测信号

控制部分

 

图2-1方案一测频原理图

方案二:

采用单片机进行测频控制

单片机技术比较成熟,功能也比较强大,被测信号经放大整形后送入测频电路,由单片机对测频电路的输出信号进行处理,得出相应的数据送至显示器显示。

原理方框图如图2-2所示。

待测信号

 

图2-2单片机测频电路原理图

采用这种方案优点是依赖成熟的单片机技术、运算功能较强、软件编程灵活、自由度大、设计成本也较低,缺点是显而易见的,在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,整个系统显得十分复杂,并且单片机的频率不能做得很高,使得测量精度大大降低。

方案三:

采用现场可编程门阵列(FPGA)为控制核心

采用现场可编程门阵列(FPGA)为控制核心,利用VHDL语言编程,下载烧制实现。

将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便。

综合上述分析,方案三为本设计测量部分最佳选择方案。

2.4系统设计

数字频率计的测量原理,可选择合适的时基信号即闸门时间,对输入被测信号脉冲进行计数,实行测频的目的,在进行设计之前,首先搞清楚在什么情况下是测频率,在什么情况下是测周期,其实就是一个选择合适的闸门信号的问题。

在这个设计中,在测频率的时候,以分频后的时钟信号作为闸门信号,因为输入信号的频率大于闸门信号频率,在闸门信号周期内,计算输入信号的周期数目,就可以计算出输入信号的频率值了。

原理图如下:

 

图2-3原理图

在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:

fx=Nx/Tw。

这种方法的计数值会产生±1个字误差,测试精度与计数器中记录的数值Nx有关。

2.5系统组成

系统包含输入模块,FPGA模块,显示模块。

输入模块包括基准时钟,复位信号和被测信号。

FPGA模块是系统的核心部分,其包括分频、7位十进制计数器、数据处理和动态译码。

当系统正常工作时,分频部分的作用是对基准时钟进行分频,得到一个闸门信号,作为7位十进制计数器的使能信号。

数据处理部分作用:

取7位十进制计数器的有效高4位数据,送入动态显示译码部分进行显示译码。

显示模块用数码管显示。

 

图2-4系统组成框图

2.6小结

本章对数字频率的设计要求进行阐述,由此对频率测量的工作原理进行探讨引申出几个设计的方案,采用的时间门限测量法根据此方法确定了以现场可编程门阵列为控制核心的设计方案,它最为灵活方便。

然后得出论述对方案的进行细节方面的论证,产生了设计的原理方框图。

但是在设计中有个特别需要注意的地方是:

在测频控制信号发生器的设计当中,要对其进行仔细的时序仿真,防止可能产生的毛刺。

 

3数字频率计VHDL程序与仿真

3.1模块图

3.1.1顶层模块图

 

图3-1顶层元件图

 

Clk:

系统时钟

Clk1:

被测信号

Start:

复位信号

Yy1:

八段码

W1:

数码管位选信号

 

3.1.2底层模块

 

图3-2底层元件图

3.2程序设计

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitypljis

port(start:

instd_logic;--复位信号

clk:

instd_logic;--系统时钟

clk1:

instd_logic;--被测信号

yy1:

outstd_logic_vector(7downto0);--八段码

w1:

outstd_logic_vector(3downto0));--数码管位选信号

endplj;

architecturebehavofPLjis

signalb1,b2,b3,b4,b5,b6,b7:

std_logic_vector(3downto0);--十进制计数器

signalbcd:

std_logic_vector(3downto0);--BCD码寄存器

signalq:

integerrange0to49999999;--秒分频系数

signalqq:

integerrange0to499999;--动态扫描分频系数

signalen,bclk:

std_logic;--使能信号,有效被测信号

signalsss:

std_logic_vector(3downto0);--小数点

signalbcd0,bcd1,bcd2,bcd3:

std_logic_vector(3downto0);

--寄存7位十位计数器中有效的高4位数据

begin

second:

process(clk)--此进程产生一个持续时间为一秒的的闸门信号

begin

ifstart='1'thenq<=0;

elsifclk'eventandclk='1'then

ifq<49999999thenq<=q+1;

elseq<=49999999;

endif;

endif;

ifq<49999999andstart='0'thenen<='1';

elseen<='0';

endif;

endprocess;

and2:

process(en,clk1)--此进程得到7位十进制计数器的计数脉冲

begin

bclk<=clk1anden;

endprocess;

com:

process(start,bclk)--此进程完成对被测信号计脉冲数

begin

ifstart='1'then--复位

b1<="0000";b2<="0000";b3<="0000";b4<="0000";b5<="0000";b6<="0000";b7<="0000";

elsifbclk'eventandbclk='1'then

ifb1="1001"thenb1<="0000";--此IF语句完成个位十进制计数

ifb2="1001"thenb2<="0000";--此IF语句完成百位十进制计数

ifb3="1001"thenb3<="0000";--此IF语句完成千位十进制计数

ifb4="1001"thenb4<="0000";--此IF语句完成万位十进制计数

ifb5="1001"THENb5<="0000";--此IF语句完成十万位十进制计数

ifb6="1001"thenb6<="0000";--此IF语句完成百万位十进制计数

ifb7="1001"thenb7<="0000";--此IF语句完成千万位十进制计数

elseb7<=b7+1;

endif;

elseb6<=b6+1;

endif;

elseb5<=b5+1;

endif;

elseb4<=b4+1;

endif;

elseb3<=b3+1;

endif;

elseb2<=b2+1;

endif;

elseb1<=b1+1;

endif;

endif;

endprocess;

process(clk)--把7位十进制计数器有效的高4位数据送如bcd0~3;并得到小数点信息

begin

ifrising_edge(clk)then

ifen='0'then

ifb7>"0000"thenbcd3<=b7;bcd2<=b6;bcd1<=b5;bcd0<=b4;sss<="1110";

elsifb6>"0000"thenbcd3<=b6;bcd2<=b5;bcd1<=b4;bcd0<=b3;sss<="1101";

elsifb5>"0000"thenbcd3<=b5;bcd2<=b4;bcd1<=b3;bcd0<=b2;sss<="1011";

elsebcd3<=b4;bcd2<=b3;bcd1<=b2;bcd0<=b1;sss<="1111";

endif;

endif;

endif;

endprocess;

weixuan:

process(clk)--此进程完成数据的动态显示

begin

ifclk'eventandclk='1'then

ifqq<99999thenqq<=qq+1;bcd<=bcd3;w1<="0111";

ifsss="0111"thenyy1(0)<='0';

elseyy1(0)<='1';

endif;

elsifqq<199999thenqq<=qq+1;bcd<=bcd2;w1<="1011";

ifsss="1011"thenyy1(0)<='0';

elseyy1(0)<='1';

endif;

elsifqq<299999thenqq<=qq+1;bcd<=bcd1;w1<="1101";

ifsss="1101"thenyy1(0)<='0';

elseyy1(0)<='1';

endif;

elsifqq<399999thenqq<=qq+1;bcd<=bcd0;w1<="1110";

ifsss="1110"thenyy1(0)<='0';

elseyy1(0)<='1';

endif;

elseqq<=0;

endif;

endif;

endprocess;

m0:

process(bcd)--译码

begin

casebcdis

when"0000"=>yy1(7downto1)<="0000001";

when"0001"=>yy1(7downto1)<="1001111";

when"0010"=>yy1(7downto1)<="0010010";

when"0011"=>yy1(7downto1)<="0000110";

when"0100"=>yy1(7downto1)<="1001100";

when"0101"=>yy1(7downto1)<="0100100";

when"0110"=>yy1(7downto1)<="1100000";

when"0111"=>yy1(7downto1)<="0001111";

when"1000"=>yy1(7downto1)<="000000

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2