基于VHDL的频率计设计本科毕业设计.docx

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

基于VHDL的频率计设计本科毕业设计.docx

《基于VHDL的频率计设计本科毕业设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL的频率计设计本科毕业设计.docx(25页珍藏版)》请在冰点文库上搜索。

基于VHDL的频率计设计本科毕业设计.docx

基于VHDL的频率计设计本科毕业设计

JIUJIANGUNIVERSITY

毕业论文(设计)

 

题目基于VHDL的频率计设计

英文题目Thefrequencymeterbasedon

VHDLdesign

院系电子工程学院

专业电子信息工程

摘要

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

它不仅可以测量正弦波、方波、三角波、尖脉冲信号,而且还可以测量它们的周期。

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

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

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

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

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

关键字:

VHDL语言;频率计;FPGA

 

 

ThefrequencymeterbasedonVHDLdesign

Abstract

Digitalfrequencymeterisdirectlywithadecimalnumbertodisplaythemeasuredsignalfrequencyofameasuringdevice.Itnotonlycanmeasurethesinewave,squarewave,trianglewave,pulsesignal,butalsocanmeasuretheircycle.Modified,andcanmeasurepulsewidth,intoadigitalpulsewidthmeasuringinstrument;Addthesensorsinthecircuit,butalsocanbemadeintodigitalpulseapparatus,meter,etc.Sothedigitalfrequencymeterhasbeenwidelyappliedinmeasuringphysicalquantities.ThisdesignwithVHDLontheCPLDdevicetorealizedigitalfrequencymeterfrequencymeasurementandcontrolsystem,canusedecimaldigitaldisplaymeasuredsignalfrequency,butalsotomeasureavarietyofotherphysicalquantities.Withthecharacteristicsofsmallvolume,highreliability,lowpowerconsumption.VDHLprogrammingdesignwasadoptedtorealizedigitalfrequencymeter,inadditiontothemeasuredsignaloftheplasticpartanddigitaldisplay,keyinputparts,allonaFPGAchip,thewholesystemisverycompact,andwithflexiblefieldismodified.

KeyWords:

VHDLlanguage;Frequencymeter;FPGA

 

目录

摘要I

ThefrequencymeterbasedonVHDLdesignII

AbstractII

第一章绪论1

1.1课题的研究背景1

1.2频率计发展现状1

第2章数字频率计的要求3

2.1主要技术指标3

2.2课题的研究内容3

第3章数字频率计的方案设计4

3.1基本原理4

3.1.1频率计测量频率的设计原理4

3.1.2频率计测量频率的原理图4

3.2设计流程图5

第4章数字频率计各模块功能介绍6

4.1频率控制模块的VHDL语言源程序6

4.1.1频率控制模块的程序如下:

6

4.1.2频率控制模块CNT127

4.2十进制加法计数器CNT10的VHDL语言源程序7

4.2.1十进制计数器的程序7

4.2.2十进制计数器的顶层设计9

4.3系统模块的VHDL语言源程序9

4.3.1系统模块的设计9

4.3.2系统模块的程序9

4.4锁存器LOCK的VHDL语言源程序13

4.4.1锁存器LOCK的程序13

4.4.2锁存器LOCK顶层设计图14

4.5译码模块DECODER的VHDL语言源程序15

4.5.1译码模块DECODER的程序15

4.6四选一选择器MUX41的VHDL语言源程序16

4.6.1MUX41程序16

4.7四进制计数器CNT4的VHDL语言源程序17

4.7.1四进制计数器CNT4的程序17

4.7.2四进制计数器CNT417

4.8250分频器的VHDL语言源程序18

4.8.1250分频器的程序18

4.8.2250分频器18

 

第一章绪论

在科技高度发展的今天,集成电路和计算机应用得到了高速发展。

尤其是计算机应用的发展。

它在人们日常生活已逐渐崭露头角。

大多数电子产品多是由计算机电路组成。

而且将来的不久他们的身影将会更频繁的出现在我们身边。

各种家用电器多会实现微电脑技术。

频率信号易于传输,抗干扰性强,可以获得较好的测量精度。

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

本数字频率计的设计是根据频率计的测频原理,可以选择合适的时基信号对输入被测信号脉冲进行计数,实现测频的目的。

1.1课题的研究背景

随着电子电路技术的发展,频率计从早期的采用分立元件设计发展到后来的采用单元电路和单片机进行设计。

早期采用分立元件设计的频率计成品体积大、稳定性差、功耗高而且设计费时、设计周期长,不能很快的将最初的概念设想转为系统实现。

在数字电子技术和集成电路迅速发展的影响下,数字频率计不但稳定性得到了提高而且体积也减小了,得到了广泛的应用。

但数字频率计仍然存在很多缺点如电路复杂、设计周期较长、测量范围有限、灵活性差等等。

此外,现代电子产品更新换代非常的快,在很短的时间内可能就需对电路做出相应的改进以满足新的功能要求。

这对传统的通用集成电路来说则需要重新设计、重新布线,而可编程逻辑器件的出现克服了这个缺点。

可编程逻辑器件通过编程把通用集成电路集成在一块尺寸很小的硅片上,电路的体积成倍缩小,走线短,减少了干扰,系统的可靠性也得到了提高,而且该类器件重构硬件的结构和工作方式可以通过软件编程的方式实现,使电子设计通过开发语言和开发工具就可实现,体现了硬件电路软设计的思想,硬件设计像软件设计一样灵活、方便快捷,产品的

开发周期也得到了极大的缩短,改变了传统的数字系统设计方法、设计过程和设计观念,也改变了频率计的传统设计方法和设计观念。

大规模可编程逻辑器件的快速发展,使得SOPC(systemOilprogrammablechip,片上可编程系统)成为可能。

界面友好、易学易用的SOPC集成开发工具和高效、灵活的片上系统构建方案,既获得了强大的逻辑控制能力又具备了优良的数据处理能力,实现了真正意义上的片上可编程系统。

SOPC具有信号处理快、设计周期短、成本低、易集成等特点,被称为“半导体产业的未来",这也将成为未来仪器仪表测量系统设计的发展方向。

1.2频率计发展现状

早在1952年美国就生产出了第一台数码管显示的10MHz计数器。

目前国内外在频率测量方面的理论和系统方法都比较成熟,而且电子计数器可以实现频率、频率比、周期、时间间隔、脉宽等多种参数的测量,早就突破了早期的只能用来测量频率或进行计数的概念。

目前,频率计正向着多功能化、程控化、智能化和模块化的方向发展,测量技术和工具越来越先进,测频仪器的精度也越来越高,而且微波技术的发展需要测量越来越高的频率。

例如,泰克推出的最新频率计/分析仪不仅能够精确测量出频率、周期、时间、脉冲或相位、占空比、Vmax、Vmin、Vp-p等13种以上不同的参数,还提供数据统计、柱状图以及趋势图等被测信号进行全面分析的分析模式,而且还能进行时域的Allan方差测试;泰克的FCA3000和FCA3100系列提供了最高达20GHz的宽频率范围,而且实现了每秒12位数字频率分辨率和单次50ps(FCA3100)或100ps(FCA3000)的时间分辨率。

程控计数器是电信号的台式测量仪表和系统“器件",而智能计数器不仅是以上二者,配备不同的传感器后可以成为其他的非电量测量仪表。

如配备激光测距传感器可以得到被测距离,配备转速传感器又可以得到平均转速或瞬时转速等。

在这些情况下,它就变成了测距仪和转速分析仪,一机多用增加了仪器的灵活度,提高了仪器的利用率、降低了成本、可以减少实验室仪器的品种数型。

目前,频率测量的方法有比较测频法、响应测频法、直接测频法、内插法、游标法、多周期同步法、全同步数字测频法等等。

比较测频法和响应测频法测量范围有限而且精度低。

直接测频法方法简单,但精度不高;内插法和游标法精度有所提高,但由于采用的是模拟方法,电路设计复杂;精度较高的多周期同步测量法还可以和其他方法如内插法、游标法等结合使用,这样可以在一定的程度上提高测量精度,但没能消除基准频率信号的±1个字的计数误差,而且仍然存在着时标不稳引入的误差和一定的触发误差。

全同步数字测频法彻底消除了被测信号和基准频率信号的±1个字的计数误差,精度较高,而且电路实现也不复杂。

通过对上述几种主要测频方法的简单介绍可以了解到,每一种测频方法各有自己的优缺点和使用的场合,在不同的应用条件下具有一定的优势。

本设计的频率计决定采用在多周期同步测量法的基础上发展起来的全同步数字测频法进行设计。

 

第2章数字频率计的要求

在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更加重要。

2.1主要技术指标

1.频率范围为:

1Hz~50MHz。

2.结果用数码管十进制显示。

3.输入信号电压幅度为50mV~5V。

2.2课题的研究内容

(1)比较分析常用频率计的原理和差别,选择适合本设计的设计方法。

(2)根据选定的设计方法,依自顶而下的设计方法对频率计进行总体方案的设计和模块的划分。

(3)用VHDL语言对各个模块和顶层电路进行设计。

(4)在QuartusII环境下对设计进行测试和仿真。

(5)对频率计的附件电路进行设计,完成总体的频率计设计,使其成为一个完整系统。

(6)基于VHDL的频率计的方案研究。

 

第3章数字频率计的方案设计

6位数字频率计电路的设计,应用MAX+PLUSⅡ软件平台,来说明VHDL语言在EDA仿真中的应用。

该设计实例的基本功能描述为:

3.1基本原理

3.1.1频率计测量频率的设计原理

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

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

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

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

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

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

原理图:

原理图

3.1.2频率计测量频率的原理图

本设计采用FPGA来实现全同步数字频率计。

其系统原理框图如图3.1所示。

由图知,设计的绝大部分由FPGA完成。

3.2设计流程图

使用MAX+PLUSⅡ进行可编程逻辑器件开发主要包括4个阶段:

设计输入、编译处理、验证(包括功能仿真、时序仿真、和定时分析)和器件编程,流程如图2.1所示:

图2.1设计流程图

第4章数字频率计各模块功能介绍

在原理图中共有5个模块:

频率控制模块、十进制计数器模块、锁存模块、译码模块、系统模块,我们将利用VHDL语言分别对这5个模块进行源程序设计。

4.1频率控制模块的VHDL语言源程序

频率控制信号的输入信号是1HZ,将时钟信号clk两分频后分别取反赋给锁存使能lock和计数使能端ena,这样计数完成后就能实现数据的锁存。

当计数使能和时钟信号同时出现低电平的时候,计数复位信号clr有效,将计数器清零,从新开始计数。

4.1.1频率控制模块的程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityctlis--计数允许、锁存数据和清零三个控制信号

port(clk:

instd_logic;

ena:

outstd_logic;

clr:

outstd_logic;

lock:

outstd_logic

);

endctl;

architecturebehavofctlis

signaldiv2clk:

std_logic;

begin

process(clk)

begin

ifclk'eventandclk='1'thendiv2clk<=notdiv2clk;

endif;

endprocess;

process(clk,div2clk)

begin

ifclk='0'anddiv2clk='0'thenclr<='1';

elseclr<='0';

endif;

endprocess;

lock<=notdiv2clk;ena<=div2clk;

end;

4.1.2频率控制模块CNT12

频率控制模块如图4.1

 

4.2十进制加法计数器CNT10的VHDL语言源程序

六位十进制计数器模块包含六个级联十进制计数器,用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有集束使能、清零控制和进位扩展输出的功能。

使能信号和清零信号由闸门控制模块的控制信号发生器所产生来对六个级联十进制计数器周期性的计数进行控制。

4.2.1十进制计数器的程序如下:

Libraryieee;

Useieee.std_logic_unsigned.all;

Useieee.std_logic_1164.all;

Entitycnt10is

Port(clk,clr,CS:

instd_logic;

QQ:

outstd_logic_vector(3downto0);

cout:

outstd_logic);

endcnt10;

architecturebehavofcnt10is

begin

process(clk,clr,CS)

variablecqi:

std_logic_vector(3downto0);

begin

ifclr='1'thencqi:

=(others=>'0');

elsifclk'eventandclk='1'then

ifCS='1'then

ifcqi<9thencqi:

=cqi+1;

elsecqi:

=(others=>'0');

endif;

endif;

endif;

ifcqi=9thencout<='1';

elsecout<='0';

endif;

QQ<=cqi;

endprocess;

endbehav;

在源程序中COUT是计数器进位输出;QQ[3..0]是计数器的状态输出;CLK是始终输入端;CLR是复位控制输入端,当CLR=1时,QQ[3..0]=0;CS是使能控制输入端,当CS=1时,计数器计数,当CS=0时,计数器保持状态不变。

十进制模块如图4.2

 

4.2.2十进制计数器的顶层设计

新建一个原理图编辑窗,从当前的工程目录中凋出4个十进制计数器元件shi.sym,并按图4.3所示的4位十进制计数器的顶层原理图完成电路连接。

 

完成4位十进制计数器的原理图编辑以后,即可进行仿真测试和波形分析,,当CLR=0、CS=1是其计数值在0到9999之间循环变化,COUT为计数进位输出信号,作为后面的量程自动切换模块的输入脉冲。

4.3系统模块的VHDL语言源程序

4.3.1系统模块的设计

系统模块实现对各模块功能的整合,实现整个系统的功能。

f_in为测试信号,mclk为输入时钟,carry_out为溢出信号,test_clk_out为内部分频输出的10000HZ信号,方便自测该程序,wei为六个数码管的位选,dula为数码管的段选。

在这个模块的设计中,用到了以上介绍的各个模块,它实现的对是整个系统的控制。

4.3.2系统模块的程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitypljis

port(f_in,mclk:

instd_logic;

carry_out,test_clk_out:

outstd_logic;

wei:

outstd_logic_vector(5downto0);

dula:

outstd_logic_vector(7downto0)

);

endplj;

architecturebehavofpljis

signaldula_temp1,dula_temp2,dula_temp3,dula_temp4,dula_temp5,dula_temp6:

std_logic_vector(7downto0);

signalled1,led2,led3,led4,led5,led6:

std_logic_vector(3downto0);

signalclk,clk_div1:

std_logic;

signalwei_temp:

std_logic_vector(5downto0);

componentcnt10--例化语句

port(clk,clr,ena:

instd_logic;

cq:

outstd_logic_vector(3downto0);

cout:

outstd_logic);

endcomponent;

componentctl

port(clk:

instd_logic;

ena:

outstd_logic;

clr:

outstd_logic;

lock:

outstd_logic

);

endcomponent;

componentreg4

port(clk:

instd_logic;

cq:

instd_logic_vector(3downto0);

led:

outstd_logic_vector(3downto0)

);

endcomponent;

componentdecode

port

(qin:

instd_logic_vector(3downto0);

qout:

outstd_logic_vector(7downto0)

);

endcomponent;

signalcout1,cout2,cout3,cout4,cout5:

std_logic;

signalclr1,ena1,lock1:

std_logic;

signalcq1,cq2,cq3,cq4,cq5,cq6:

std_logic_vector(3downto0);

begin

u1:

cnt10portmap(clk=>f_in,clr=>clr1,ena=>ena1,cq=>cq1,cout=>cout1);

u2:

cnt10portmap(clk=>cout1,clr=>clr1,ena=>ena1,cq=>cq2,cout=>cout2);

u3:

cnt10portmap(clk=>cout2,clr=>clr1,ena=>ena1,cq=>cq3,cout=>cout3);

u4:

cnt10portmap(clk=>cout3,clr=>clr1,ena=>ena1,cq=>cq4,cout=>cout4);

u5:

cnt10portmap(clk=>cout4,clr=>clr1,ena=>ena1,cq=>cq5,cout=>cout5);

u6:

cnt10portmap(clk=>cout5,clr=>clr1,ena=>ena1,cq=>cq6,cout=>carry_out);

u7:

ctlportmap(clk=>clk,clr=>clr1,ena=>ena1,lock=>lock1);

u8:

reg4portmap(clk=>lock1,cq=>cq1,led=>led1);

u9:

reg4portmap(clk=>lock1,cq=>cq2,led=>led2);

u10:

reg4portmap(clk=>lock1,cq=>cq3,led=>led3);

u11:

reg4portmap(clk=>lock1,cq=>cq4,led=>led4);

u12:

reg4portmap(clk=>lock1,cq=>cq5,led=>led5);

u13:

reg4portmap(clk=>lock1,cq=>cq6,led=>led6);

u19:

decodeportmap(qin=>led1,qout=>dula_temp1);

u14:

decodeportmap(qin=>led2,qout=>dula_temp2);

u15:

decodeportmap(qin=>led3,qout=>dula_temp3);

u16:

decodeportmap(qin=>led4,qout=>dula_temp4);

u17:

decodeportmap(qin=>led5,qout=>dula_temp5);

u18:

decodeportmap(qin=>led6,qout=>dula_temp6);

test_clk_out<=clk_div1;

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

当前位置:首页 > 总结汇报 > 学习总结

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

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