采用测频原理地数字频率计.docx
- 文档编号:23192579
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:21
- 大小:366.28KB
采用测频原理地数字频率计.docx
《采用测频原理地数字频率计.docx》由会员分享,可在线阅读,更多相关《采用测频原理地数字频率计.docx(21页珍藏版)》请在冰豆网上搜索。
采用测频原理地数字频率计
学号:
应用设计
课程名
FPGA原理及应用
题目
采用测频原理的数字频率计
学院
信息工程学院
专业
通信工程
班级
姓名
指导教师
陈适
2017
年
6
月
20
日
课程设计任务书
学生姓名:
刘专业班级:
通信1405班
指导教师:
陈适工作单位:
信息工程学院
题目:
采用测频原理的数字频率计
初始条件:
VHDL硬件描述语言,QuartusII开发环境
要求完成的主要任务:
1.采用测频法,设计一个4位十进制数字显示的数字频率计
2.其测量的范围为1~9999KHz
课程设计进度安排
序
号
阶段内容
所需时间
1
方案设计
1天
2
软件设计
2天
3
系统调试
1天
4
撰写报告
1天
合计
5天
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
数字频率计是采用数字电路制做成的能实现对周期性变化信号频率测量的仪器。
频率计主要用于测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值,其扩展功能可以测量信号的周期和脉冲宽度。
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差。
若使用现场可编程门阵列FPGA来实现,可使整个系统大大简化,而且提高了系统的整体性能和可靠性。
本文介绍了测频原理,在此基础上描述了如何通过VHDL语言编程,在QuartusII仿真平台上编译、仿真、调试,设计出一个4位十进制数字显示的数字频率计。
关键字:
FPGA,数字电路,测频法,数字频率计
Abstract
Digitalfrequencymeterismadeofdigitalcircuitsystemcanachieveperiodicchangesignalfrequencymeasurementinstrument.Frequencymeterismainlyusedtomeasuresinewave,rectangularwave,trianglewaveandsharppulseandotherperiodicsignalfrequencyvalue.Itsexpansionfunctioncanmeasurethesignalcycleandpulsewidth.Digitalfrequencymeterisatypicalapplicationofdigitalcircuit,theactualhardwaredesignusedmoredevices,wiringismorecomplex,andwillproducerelativelylargedelay,resultinginmeasurementerror.IfthefieldprogrammablegatearrayFPGAisused,thewholesystemcanbegreatlysimplified,andthewholeperformanceandreliabilityofthesystemcanbeimproved.
Thispaperintroducestheprincipleoffrequencymeasurement,basedonthedescriptionofhowtousetheVHDLprogramminglanguage,intheQuartusIIsimulationplatformcompiler,simulationanddebugging,thedesignofadigitalfrequency4decimaldigitaldisplaymeter.
Keywords:
FPGA,digitalcircuit,frequencymeasuringmethod,digitalfrequencymeter
1FPGA、VHDL以及QuartusII简介
首先对设计所采用的可编程逻辑器件FPGA、VHDL和QuartusII进行简单的介绍。
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丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(2)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(3)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(4)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
1.3QuartusII简介
QuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
当前官方提供下载的最新版本是v13.0。
QuartusII(3.0和更高版本)设计软件是业界唯一提供FPGA和固定功能HardCopy器件统一设计流程的设计工具。
工程师使用同样的低价位工具对StratixFPGA进行功能验证和原型设计,又可以设计HardCopyStratix器件用于批量成品。
系统设计者现在能够用QuartusII软件评估HardCopyStratix器件的性能和功耗,相应地进行最大吞吐量设计。
QuartusII可编程逻辑软件属于第四代PLD开发平台。
该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容,改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
2频率测量原理及方案
2.1设计要求
1.采用测频法,设计一个4位十进制数字显示的数字频率计
2.其测量的范围为1~9999KHz
2.2测频原理
数字频率计是用于测量信号频率的电路。
本设计采用测频原理对数字频率计进行设计,下面对测频原理进行简要介绍。
测频率时,以分频后的时钟信号作为闸门信号,因为输入信号的频率大于闸门信号频率,所以在闸门信号周期内,计算输入信号的周期数目,就可以计算出输入信号的频率值了。
原理图如图1所示:
闸门信号
被测信号
图1原理图
在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:
fx=Nx/Tw。
这种方法的计数值会产生±1个字误差,测试精度与计数器中记录的数值Nx有关。
3系统设计
3.1系统实现方案提出及确定
方法一:
采用小规模数字集成电路制作
被测信号经过放大整形变换为脉冲信号后加到主控门的输入端,时基信号经控制电路产生闸门信号送至主控门,只有在闸门信号采样期间内输入信号才通过主控门,若时基信号周期为T,进入计数器的输入脉冲数为N,则被信号的测频率其频率F=N/T,其原理方框图如图2所示
显示
译码器
计数器
闸门
整形放大
被测信号
控制部分
图2方案一测频原理图
方案二:
采用单片机进行测频控制
单片机技术比较成熟,功能也比较强大,被测信号经放大整形后送入测频电路,由单片机对测频电路的输出信号进行处理,得出相应的数据送至显示器显示。
原理方框图如图3所示。
显示
单片机
测频电路
信号整形
待测信号
晶振
图3单片机测频电路原理图
采用这种方案优点是依赖成熟的单片机技术、运算功能较强、软件编程灵活、自由度大、设计成本也较低,缺点是显而易见的,在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,整个系统显得十分复杂,并且单片机的频率不能做得很高,使得测量精度大大降低。
方案三:
采用现场可编程门阵列(FPGA)为控制核心
采用现场可编程门阵列(FPGA)为控制核心,利用VHDL语言编程,下载烧制实现。
将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便。
综合上述分析,方案三为本设计测量部分最佳选择方案。
3.2系统组成
如图4所示,本系统包含输入模块,FPGA模块,显示模块。
输入模块包括基准时钟,复位信号和被测信号。
FPGA模块是系统的核心部分,其包括分频、7位十进制计数器、数据处理和动态译码。
当系统正常工作时,分频部分的作用是对基准时钟进行分频,得到一个闸门信号,作为7位十进制计数器的使能信号。
数据处理部分用于取7位十进制计数器的有效高4位数据,送入动态显示译码部分进行显示译码。
显示模块用于显示频率值。
图4系统组成框图
4数字频率计VHDL设计与仿真
本设计采用QuartusII13.1对数字频率计进行设计。
设计步骤如下:
(1)打开工程及设计输入
1)双击桌面QuertusII13.1的图标打开软件;
2)File—>OpenProject打开事先已经创建并保存的工程文件,文件及源代码初始页面如图5所示;
注意:
文件夹要用英文命名
图5初始界面示意图
3)运行程序得到设置界面,此时需要先添加中间变量再设置各个变量参数的数据类型,运行设置图如图6所示;
图6运行设置图
需要添加的管脚、寄存器等参量如图6所示,例如b1~b7,bcd0~bcd3等。
这里我们将clk的值设置为10.0ns,显示类型设置为波形;clk1的值设置为100ns,显示波形也设置为波形;start的初始值为“1”;b1~b7、bcd、bcd0~bcd3以及q和qq的数值类型都设置为十进制显示。
(2)功能仿真
1)保存设置参数后点击界面上方的“运行”按钮,耐心等待几分钟(运行时长和参数设置有关)便会出现仿真界面,如图7所示;
图7仿真图
由输入设置我们可以计算出理论值:
Nx=5000×10=50000
fx=50000/200=250
仿真后输出b3b2b1的值为253,与理论值相比较存在很小的误差,基本上可以认为是一致的,从而得出仿真结果正确的结论。
2)鼠标点击左上方“调节”图标后光标变为“+”号,点击鼠标左键放大图片(点击鼠标右键缩小图片)调节界面以直观得观察输入输出,放大后的界面如图8所示;
图8放大后的仿真图
由放大后的仿真图,我们可以清晰得看到q栏和qq栏的逐个计数,也可以很明显得观察到clk信号波形和clk1信号得波形关系。
3)点击菜单栏的“Tools”,从下拉列表里选择“NetistViewers”,再从下一级的下拉列表中选择“RTLViewers”便可得RTL图,如图9所示;
图9RTL图
4)通过调出综合图可以得到综合的实验数据,比如总的寄存器个数Totalregisters,以及RevisionName,Totalmemorybits等,FlowSummary截图如图10所示;
图10综合图
5心得体会
本设计采用FPGA技术,利用测频法的原理和VHDL语言,采用自顶向下的设计方法,实现了1Hz~10kHz测量范围的四位十进制的数字频率计,并在QuartusII软件平台下对设计项目进行的了编译和时序仿真。
实验结果表明,该系统能够满足本次设计的要求,并且具有测量误差小,可靠性高的优点。
通过本次FPGA课程设计,我发现了自己的很多不足,发现了很多知识上的漏洞。
同时也看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
这次课程设计让我学到了很多,不仅是巩固了先前学的EDA技术的理论知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。
在课程设计中一个人的力量是远远不够的,真正的完成任务需要共同的智慧与劳动,团结协作是我们成功的一项非常重要的保证。
在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经为仿真成功而热情高涨。
我在本次课程设计中学到的另一个重要的品质是细心认真。
在此次设计中,由于编程的时候没有做到足够的细心,导致一串代码弄混了。
但是密密麻麻的英文字母混在一起,我始终没有发现。
最终在调试的时候,就出现了问题。
只知道出现了问题,就是不知道到问题的根源在哪里,好长时间都没有找出问题的所在。
这也让我真正的明白了科学的严谨性,它不允许出半点差错,否则后果会是比较麻烦的。
做其他事情也一样,都需要我们付出足够的认真去对待,才能顺利的完成。
对我而言,知识上的收获重要,精神上的丰收更加可喜。
本次应用设计让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
这次课程设计不仅夯实了我的理论基础,锻炼了我的动手实践做项目的能力,对今后的职业发展也有很大的参考价值。
6参考文献
[1]刘睿强、陈鸿、邓显林.FPGA应用技术及实验.北京理工大学出版社.2011.1
[2]顾巨峰、周浩洋.基于可编程逻辑器件的多功能数字频率计.东南大学出版社.2002.5
[3]赵曙光、郭万有.可编程逻辑器件原理、开发与应用.西安电子科技大学出版社,2000.1
[4]杜建国.VerilogHDL硬件描述语言.国防工业出版社.2008.8。
[5]赵雅兴.FPGA原理、设计与应用.天津大学出版社.1999.12
[6]李景华,杜玉远.可编程逻辑器件与EDA技术.东北大学出版社.2002.5
附录
源代码:
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<399
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 采用 原理 数字频率计