《基于FPGA多功能频率计的设计_毕业设计论文(33页).docx》由会员分享,可在线阅读,更多相关《基于FPGA多功能频率计的设计_毕业设计论文(33页).docx(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-基于FPGA多功能频率计的设计_毕业设计论文-第 30 页基于FPGA的多功能频率计的设计目录摘要3Abstract4第一章 绪论51.1 研究背景及意义51.2 论文的研究内容及结构安排5第二章 频率测量原理概述72.1 开发平台及FPGA/CPLD简介72.1.1 Quartus II简介72.1.2 FPGA/CPLD简介72.2 数字频率计工作原理概述82.3 测频方法及误差分析102.3.1 常用测频方案102.3.2 等精度测频原理112.3.3 误差分析122.4 本章小结13第三章 等精度频率计的系统设计与功能仿真143.1 系统的总体设计143.2 信号源模块163.2.1
2、 预分频163.2.2 分频模块173.3 按键控制模块193.4 测频控制信号模块203.5 锁存器213.6 计数器模块223.7 周期模块233.8 显示模块263.8.1 数据选择器263.8.2 数码管显示驱动263.9 本章小结27第四章 总体设计验证28第五章 总结与展望30致谢31参考文献32附录 文献翻译33英文文献133英文文献237译文1 频率调制39译文2 振幅键控43摘要数字频率计是一种基本的测量仪器。本设计根据等精度的测量原理进行设计,克服了传统的频率计的测量精度随被测信号频率的变动而改变的缺点。等精度的测量方法在具有较高测量精度的同时,在整个频率区域保持有恒定的测
3、试精度。本文论述了利用FPGA/CPLD进行频率测量技术,设计了一个8位数字显示的等精度频率计。它采用Verilog/VHDL硬件描述语言编写程序,在Quartus II软件开发集成环境下进行仿真,包括设计输入、编译、软件仿真、下载和硬件仿真等全过程。软件设计模块分为被测信号、频率测量、周期测量、数码管显示共四个模块。硬件采用Altera公司的Cyclone II开发板EP2C8Q208C8N,系统时钟为50MHZ,该频率计的频率测量范围为15HZ-10MHZ。经过仿真下载验证,能够实现等精度测频率和周期的功能,证明该设计方案切实可行。关键词:数字频率计,FPGA/CPLD,Verilog/V
4、HDL语言AbstractDigital Frequency Meter is a basic measuring instrument. According to the principle of equal precision measurement, this design overcomes the shortcomings of the traditional frequency meter measurement, whose accuracy changes with the measured signal frequency. Methods such as precision
5、 measurements with its high accuracy, while the entire frequency region to maintain a constant precision.This article discusses frequency measurement technology using FPGA / CPLD, and completes the design of an 8-bit digital precision frequency meter. It based on Verilog / VHDL description of a prog
6、ramming language under Quartus simulation environment. It is divided into four modules: the measured signal, frequency measurement, period measurement, digital display. Hardware design uses the development board EP2C8Q208C8N manufactured by Alteras Cyclone II. Its system clock is 50MHZ. This frequen
7、cy meters frequency measurement ranges from 15HZ to 10MHZ. This design includes the whole process of input, compilation, software simulation, downloads, and hardware simulation. Precision frequency and period measuring is achieved through simulation download, which demonstrates that the design schem
8、e is practicable.Key words: Digital frequency meter, FPGA/CPLD,Verilog/VHDL.第一章 绪论1.1 研究背景及意义频率是电信号中重要的物理量,在电子、通信系统中,信号的频率稳定度决定了整个系统的性能的稳定度,因此系统设计的重要内容是能准确测量信号的频率。频率计是计算机、通信设备和仪器仪表等诸多领域中不可缺少的测量仪器。随着现代数字电子技术的进一步发展,频率已成为电子测量技术中最基本最常见的测量数据之一,数字频率计及其设计也越来越广泛的受到关注。FPGA是在PAL,GAL等逻辑器件基础上发展起来的新型高性能可编程逻辑器件,同
9、以往的可编程逻辑器件相比,FPGA的规模较大,集成度较高,适用于高速、高密度的高端数字逻辑电路设计领域。传统的数字频率计一般由分离的单个元件连接而成,传统数字频率计的测量范围、精度和速度受到的限制性比较大。单片机的发展与应用改良了一些不利因素,但由于单片机性能本身也受到其工作频率及内部计数器位数等因素的影响,因此数字频率计的稳定性方面没有得到突破性的进展。随着可编程逻辑器件FPGA技术的发展, 将大量的不同的逻辑功能集成于单个器件中,根据不同的需要提供的门数范围从几百门到上百万门,从根本上解决了单片机的先天性限制问题。基于FPGA的数字频率计不仅在集成度方面远远超过了传统的数字频率计,而且在基
10、准频率及精度等外部条件允许的情况下,根据不同需要对精度和频率范围,只需对硬件描述语言进行一定的改动,即可达到更改系统的精度和频率范围的目的。这种对硬件描述语言的改变很少涉及到硬件电路的大范围改动,因此降低了系统的整体造价。在现代数字电路设计中,采用FPGA结合硬件描述语言可以设计出各种复杂的时序和逻辑电路,具有设计灵活、可编程和高性能等优点。本文将介绍一种以FPGA为控制核心,根据等精度测频原理,能够实现显示被测频率信号频率和周期的数字频率计的设计。1.2 论文的研究内容及结构安排 本文主要内容如下:第一章,为本设计的绪论,交代了数字频率计的研究背景及现状;另介绍了本论文的研究内容及结构安排。
11、第二章,介绍了数字频率计的工作原理,对比了直接测频法、直接测周法实现的频率计的优缺点,并介绍等精度频率测量的理论基础和设计方案。第三章,等精度频率计FPGA的系统设计。开发板EP2C8Q208C8N介绍,频率计总体设计,信号源模块,计数器模块,周期模块,显示模块设计过程,并且给出它们的封装图形和仿真结果。第四章,总体设计验证。通过把设计下载到开发板上,并实际用于频率周期测量,从而发现设计的不足和错误之处并加以改正。第五章,本次毕业设计的总结与展望。第二章 频率测量原理概述2.1 开发平台及FPGA/CPLD简介2.1.1 Quartus II简介Quartus II是Altera提供的FPGA
12、/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。Altera的Quartus II提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具,并为Altera DSP开发包进行系统模型设计提供了集成组合环境。Quartus II设计工具完全支持VHDL、Verilog的设计流程,其内部嵌有VHDL、Verilog逻辑综合器。Quartus II也可利用第三方的综合工具。同样,Quartus II具备仿真功能,同时
13、也支持第三方的仿真工具,如ModelSim。此外,Quartus II与MATLAB和DSP Builder结合,可以进行基于FPGA的DSP系统开发和数字通信模块的开发。Quartus II编译器支持的硬件描述语言有VHDL、Verilog HDL及AHDL(Altera HDL)。Quartus II支持层次化设计,可以在一个新的编辑输入环境中对使用不同输入设计方式完成的模块(元件)进行调用,从而解决了原理图与HDL混合输入设计的问题。在设计输入之后,Quartus II的编译器将给出设计输入的错误报告。QuartusII作为目前CPLD/FPGA开发工具理想的综合、仿真软件,具有许多优良
14、的特性。2.1.2 FPGA/CPLD简介FPGA和CPLD都是高密度现场可编程逻辑芯片,都能够将大量的逻辑功能集成于一个单片集成电路中,其集成度已发展到现在的几百万门。复杂可编程逻辑器件CPLD是由PAL ( Programmable Array Logic,可编程数组逻辑)或GAL ( Generic Array Logic,通用数组逻辑)发展而来的。它采用全局金属互连导线,因而具有较大的延时可预测性,易于控制时序逻辑;但功耗比较大。现场可编程门阵列(FPGA)既有门阵列的高逻辑密度和通用性,又有可编程逻辑器件的用户可编程特性。FPGA通常由布线资源分隔的可编程逻辑单元(或宏单元)构成数组
15、,又由可编程I/O单元围绕数组构成整个芯片。其内部资源是分段互联的,因而延时不可预测,只有编程完毕后才能实际测量。FPGA/CPLD的主要优点如下:编程方式简便、先进。FPGA/CPLD产品越来越多地采用了先进的 IEEE1149.1边界扫描测试(BST)技术和 ISP(在系统配置编程方式)。在+5 V工作电平下可随时对正在工作的系统上的 FPGA/CPLD进行全部或部分地在系统编程,并可进行多芯片串行编程,对于SRAM结构的FPGA,其下载编程次数几乎没有限制。这种编程方式可轻易地实现红外编程、超声编程或无线编程,或通过电话线远程在线编程。这些功能在工控、智能仪器仪表、通讯和军事上有特殊用途
16、。高速。FPGA/CPLD的时钟延迟可达纳秒级,结合其并行工作方式,在超高速应用领域和实时测控方面有非常广阔的应用前景。高可靠性。FPGA/CPLD的高可靠性还表现在几乎可将整个系统下载于同一芯片中,从而大大缩小了体积,易于管理和屏蔽。开发工具和设计语言标准化,开发周期短。由于FPGA/CPLD的集成规模非常大,集成度可达数百万门。因此,FPGA/ CPLD的设计开发必须利用功能强大的EDA工具,通过符合国际标准的硬件描述语言(如VHDL或 Verilog-HDL)来进行电子系统设计和产品开发。由于开发工具的通用性、设计语言的标准化以及设计过程几乎与所用的FPGA/ CPLD器件的硬件结构没有
17、关系,所以设计成功的各类逻辑功能块软件有很好的兼容性和可移植性,它几乎可用于任何型号的FPGA/ CPLD中,由此还可以以知识产权的方式得到确认,并被注册成为所谓的IP芯核,从而使得片上系统的产品设计效率大幅度提高。由于相应的EDA软件功能完善而强大,仿真方式便捷而实时,开发过程形象而直观,兼之硬件因素涉及甚少,因此可以在很短时间内完成十分复杂的系统设计,这正是产品快速进入市场的最宝贵的特征。功能强大,应用广阔。目前,FPGA/ CPLD可供选择范围很大,可根据不同的应用选用不同容量的芯片。2.2 数字频率计工作原理概述 频率计又称频率计数器,是一种专门对被测信号频率进行测量的电子测量仪器。其
18、最基本的工作原理为:当被测信号在特定时间段T内的周期个数为N时,则可以得出被测信号的频率f=N/T 。 本设计中的数字频率计的设计原理实际上是测量被测信号在单位时间(1s)内的周期数。这种方法免去了实际测量前的预测,节省了划分频段所用的时间,克服了原来高频段采用测频模式而低频段采用测周期模式的测量方法中存在换挡而导致的测量速度慢的缺点。在设计中用一个标准的基准时钟,在单位时间(1s)里对被测信号的脉冲数进行计数,计数结果即为信号的频率。但由于闸门信号的起始和结束时刻对于信号来说是随机的,这就会产生一个脉冲周期的量化误差,它直接影响频率测量的精度。测量结果的准确度()分析:设待测信号周期为Tx,
19、频率为Fx,当测量时间为T=1s时,则测量准确度为=Tx/T=1/Fx。由上式可知直接测频法的准确度与待测信号频率有关:当待测信号频率较高时,测量准确度较高;反之亦然。因此直接测频法只适合测量频率较高的待测信号,测量精度随着待测信号频率的变化而变化,不能满足在整个测量频段内的测量精度保持不变的要求。为克服低频段测量的误差偏大的问题,设计中采用D触发器对门控信号和被测信号对计数器的使能信号进行调整,使得门控信号即计数器的工作时间不是固定值,其值恰好等于待测信号的完整周期数,大大提高了准确度的稳定性,也就是等精度的关键。当门控信号为1时,使能信号并不为1,只有被测信号的上升沿到来时,使能端才开始发
20、送有效信号,计数器开始计数。当门控信号变为0时,使能信号并不是立即改变,而是当被测信号的下一个上升沿到来时才变为0,计数器停止计数。因此测量误差最多为一个标准时钟周期,从而实现了等精度频率计的设计。下面介绍如何计算每秒钟内待测信号脉冲个数。首先计数使能信号TSTEN产生一个1秒脉宽的周期信号,并对频率计计数部分的8个十进制计数器cnt10的ENA使能端进行同步控制。当TSTEN为高电平时,允许计数;低电平时,停止计数,并保持其所计数值。当TSETEN为低电平时,需要一个锁存信号LOAD的上升沿将计数器在前1s计数所得的值锁存进32位锁存器REG32B中,并由数码管译码显示出计数值。锁存信号之后
21、,再由清零信号CLR_CNT对计数器进行清零,为下一秒钟的计数做准备。当系统正常工作时,首先将系统时钟进行预分频产生10MHZ的脉冲信号,在对10MHZ进行分频提供1 Hz的输入信号,经过测频控制信号发生器进行信号的变换,产生计数使能信号(频率为0.5HZ,高电平持续时间即门控信号为1S),锁存信号,清零信号。待测信号与门控信号通过D触发器产生实际的门控信号,送入计数模块使能端,控制计数模块对输入的待测信号进行计数,再将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动将二进制表示的计数结果转换成相应的能够在数码显示管上显示的十进制结果。周期部分即将锁存器中的数据送入32位除法器di
22、vision中,用109除以计数结果,得到周期结果,单位为ns;再将二进制的周期结果在B_BCD中转化为8421BCD码,通过按键控制数码管显示频率或者周期,在数码显示管上可以看到相应结果。2.3 测频方法及误差分析2.3.1 常用测频方案(1) 频率测量法:在一定的时间间隔T内,对输入的待测信号脉冲计数为N,则信号的频率为f=N/T 。这种方法适合于高频测量,信号的频率越高,则相对误差越小。其原理如图2.1所示。但在这种测量方法中由于闸门信号与被测信号不同步,会出现 1个被测信号脉冲个数的误差。当被测信号频率较低时,这种测量误差将导致测量精度大幅下降。图2.1 频率法测量原理(2)周期测量法
23、:这种方法是计量在被测信号一个周期内频率为 fo的标准信号的脉冲数 N来测量被测信号的频率,f=fo/N 。若被测信号的周期越长(频率越低),测得的标准信号的脉冲数N越大,则相对误差越小。其原理如图2.2所示。当频率增大时,由于被测信号的测量周期较短,根据周期测量法的测频原理可知其测量精度将大幅下降。图2.2 周期法测量原理这两种方法分别适合高频和低频,频率测量法适用于高频段,周期测量法适用于低频段。在整个测量域内测量精度会有所不同,因此要达到等精度的要求,需要在此基础上进行改进。2.3.2 等精度测频原理等精度频率测量法又称多周期同步测频法,它的最大特点是测量的实际门控时间不是一个固定值,而
24、是一个与被测信号有关的值,刚好等于被测信号的整数倍。由D触发器来调节被测信号与门控信号的同步关系。在测量过程中,有两个计数器分别对标准信号和被测信号同时计数。首先给出闸门开启信号(预置闸门上升沿)送入D触发器,在D触发器内部,等到被测信号的上升沿到来时,实际闸门信号变为高电平;然后预置闸门关闭信号(下降沿)到时,实际闸门信号也不立即变为低电平,而是等到被测信号的上升沿到来时才跳转为低电平。等精度测频的实现方法可以用图2.3来简化说明。其中CNT1和CNT2是两个可控计数器,标准信号频率从CNT1的时钟输入端输入,被测信号从CNT2的时钟输入端输入。图2.3 等精度测频实现方法每个计数器的ENA
25、是使能输入端,用来控制计数器计数,CLR是清零端。测量开始前,先进行初始化操作,发送一个清零信号,使两个计数器和D触发器清零,同时通过计数使能端禁止计数器工作。然后当预置门控信号GATE为高电平。这时,D触发器要一直等到被测信号的上升沿通过时Q端才能被置1,同时,计数器CNT1和CNT2的使能信号有效,计数器开始工作。当门控信号持续T时间后被置为低电平,但此时两个计数器并没有停止工作,一直要等到随后的被测信号上升沿到来时,其使能端变为低电平,停止计数。其测频原理波形如图2.4所示。可以看出,实际闸门时间t与预置闸门时间t1并不严格相等,但差值不超过被测信号的一个周期。图2.4 等精度测频原理波
26、形图设在一次预置门控信号时间t中,对被测信号的计数值为NX,对标准信号的计数值为NS,则由FX/NX=FS/NS,可得被测信号的频率为FX=NX/NS*FS。本实验中t=t1=1s,则有NS= FS,由此可以得出FX=NX。2.3.3 误差分析设在一次实际闸门时间t中计数器对被测信号的计数值为Nx,对标准信号的计数值为Ns。标准信号的频率为fs,则被测信号的频率如式(2-1): fx=(Nx/Ns)fs (2-1)由式1-1可知,若忽略标频fs的误差,则等精度测频可能产生的相对误差如式(2-2): =(|fxe-fx|/fxe)100% (2-2)其中fxe为被测信号频率的准确值。在测量中,由
27、于fx计数的起停时间都是由该信号的上升沿触发的,在闸门时间t内对fx的计数Nx无误差(t=NxTx);对fs的计数Ns最多相差一个数的误差,即|Ns|1,其测量频率如式(2-3):fxe=Nx/(Ns+Ns)fs (2-3)将式(2-1)和(2-3)代入式(2-2),并整理如式(2-4):=|Ns|/Ns1/Ns=1/(tfs) (2-4)由上式可以看出,测量频率的相对误差与被测信号频率的大小无关,仅与闸门时间和标准信号频率有关,即实现了整个测试频段的等精度测量。闸门时间越长,标准频率越高,测频的相对误差就越小。标准频率可由稳定度好、精度高的高频率晶体振荡器产生,在保证测量精度不变的前提下,提
28、高标准信号频率,可使闸门时间缩短,即提高测试速度。2.4 本章小结本章先具体说明了频率计的基本工作原理,介绍了频率测量的原理和误差的分析,通过对频率测量法与周期测量法及等精度测量法的优缺点对比,对等精度频率计的实现提供了理论依据。等精度测频法不仅避免了传统测频方法在计数过程中产生的1的误差,而且实现了在整个测量频域内的等精度。由于等精度测频方法具有以上优点,所以确定为本次设计的测频的实现方法。第三章 等精度频率计的系统设计与功能仿真3.1 系统的总体设计首先对EP2C8Q208C8N开发板提供的50MHZ的晶振进行预分频,获得10MHZ的信号,再把10MHZ的信号在分频模块产生不同频率的方波,
29、通过按键控制被测信号的频率变化。由控制模块产生的计数使能信号testen和清零信号clr对计数模块进行控制,而由其产生的锁存信号load对锁存模块进行控制,为了达到等精度的要求,testen,load,clr信号分别通过D触发器与被测信号整合再输入相应端口。一旦计数使能信号为高电平,并且时钟上升沿到来,计数器便开始正常计数,清零信号到来则将计数器计数清零,而当锁存信号为高电平时,数据便被锁存器锁存,然后将锁存的数据输出到显示模块和周期模块进行运算,数据锁存保证系统可以稳定显示数据,显示译码部分将二进制表示的计数结果通过B_BCD转换成8421BCD在数码显示管上显示十进制结果。通过按键控制在数
30、码显示管上可以看到相应的频率和周期。数字频率计的原理框图如图3.1所示。主要由6个部分组成,分别是:信号源模块、控制模块、计数模块、锁存器模块、周期模块和显示器模块。图3.1 数字频率计的原理框图根据数字频率计的系统原理,cnt为控制信号发生器。testctl的计数使能信号testen能产生一个1 s宽的周期信号,并通过D触发器后对频率计的每一计数器Cnt10的ENA使能端进行同步控制:当testen高电平时允许计数、低电平时停止计数。周期模块为一个32位除法器division,与B_BCD相连将除法器的二进制结果转化成8421BCD码。reg32b为锁存器。在信号load的上升沿时,立即对模
31、块的输入口的数据锁存到reg32b的内部,并由reg32b的输出端输出,然后七段译码器可以译码输出。使用锁存器的优点是可以稳定显示数据,不会由于周期性的清零信号而不断闪烁。Cnt10为十进制计数器。有一时钟使能输入端ENA,用于锁定计数值。当高电平时允许计数,低电平时禁止计数。将八个十进制计数器Cnt10级联起来实现8 位十进制计数功能2,7 。display为数码管显示驱动,可以将频率计数的结果和周期的计算结果在数码管上显示的相对应的阿拉伯数字,便于读取测量的结果。为了实现系统功能,测频控制信号发生器testctl、计数器Cnt10、锁存器reg32b存在一个工作时序的问题,设计时需要综合考
32、虑。8位数字频率计的顶层框图如图3.2。图3.2 等精度频率计顶层图形设计实现包括信号源模块(fep10,cnt1hz,fep)、频率计模块、周期模块(division、B_BCD)和显示模块(smg)四大模块。除此之外,在本设计中还加入了按键功能:分别用两个独立按键控制信号源模块的待测信号频率的加减,另一个独立按键控制数码管显示频率/周期。下面分别介绍四个模块的结构和实现方法。3.2 信号源模块信号源模块主要包括:分频模块fep10,cnt1hz,fep三个功能模块。fep10功能为产生10MHZ的时钟,cnt1hz为产生1hz的时钟,fep由按键控制输出频率的加减。信号源模块组成如图3.3
33、所示。图3.3 信号源模块3.2.1 预分频fep10的封装图如3.4所示,图中CLKIN为接入的50MHZ信号,图中CLKOUT为接到CNT1hz的CLK的10MHZ的信号。图3.4 预分频10MHZ将50MHZ的系统时钟产生10MHz 的门控信号和待测的定频信号,而对输入系统时钟clk(50MHz)进行分频的模块,设计源代码fep10.v对输入系统时钟clk(50MHz)进行5分频产生10MHz 信号。fep10的工作时序仿真图如图3.5所示。图3.5 fep10功能仿真从fep10的工作时序仿真图可以看出:由系统时钟提供的50MHz的输入信号,经过信号源模块,通过5分频产生10MHZ的时
34、钟信号,达到了设计所需的预期效果。3.2.2 分频模块CNT1HZ, FEP的封装图如图3.6,图中CLK为fep10输出的10MHZ信号,freq1为输出给控制信号发生器的1HZ信号, feping作为待测信号。图3.6 cnt1hz,fep封装图Fep功能为将10MHZ的输入频率分别进行21分频(产生5mHZ的输出频freq5m)、22分频(产生2500KHZ的输出频freq2500k)、23分频(产生1250KHZ的输出频率freq1250k)、24分频(产生625000HZ的输出频freq625000)、25 分频(产生312500HZ的输出频freq312500)、26分频(产生15
35、6250HZ的输出频freq156250)、27分频(产生78125HZ的输出频率freq78125)、 28分频(产生39063HZ的输出频freq39063)、29分频(产生19531HZ的输出频率freq19531)、 210分频(产生9767HZ的输出频freq9767)、211分频(产生4882HZ的输出频率freq4882)、212分频(产生2441HZ的输出频freq2441)、213分频(产生1220HZ的输出频率freq1220)、214分频(产生610HZ的输出频率freq610)、215分频(产生305HZ的输出频率freq305)、216分频(产生153HZ的输出频率f
36、req153)、217分频(产生76HZ的输出频率freq76)、218分频(产生38HZ的输出频率freq38)、219分频(产生19HZ的输出频率freq19) 、220分频(产生10HZ的输出频率freq10)。Cnt1hz将输入的10MHZ进行223分频(产生1HZ的输出频率freq1),输出1hz的信号,用于控制信号发生器的时钟输入。分频模块时序仿真如图3.7所示。图3.7 分频模块功能仿真在分频模块的仿真中,当up , down值为0时,fep的输出端feping输出的信号为输入的10MHZ。在本次实验中up,down由两个独立按键控制,中间变量num初始值为0,up为高电平时,n
37、um值加一;down为高电平时,num值减一。当num=0时, feping输出频率为10MHZ。num增加,依次输出既定频率的信号。3.3 按键控制模块本实验中通过两个独立按键控制信号源待测频率的加减,一个独立按键控制周期和频率的显示。封装图如3.8所示。图3.8 按键模块当按下按键key1时,信号源模块输出信号feping的频率递增;当按下按键key2时,信号源输出信号feping频率递减。Key3控制数据选择器mux_num,系统开始工作,数码管显示器上没有数据显示,当按下key3则显示频率,再按下key3显示周期,如此交替变换。按键开关是各种电子设备不可或缺的人机接口。在实际应用中,很
38、大一部分的按键是机械按键。在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。在系统设计中,有各种各样的消除按键抖动的设计方法,硬件电路和软件设计都很成熟。按键在按下时会产生抖动,释放时也会产生抖动,抖动时间一般为20ms左右。按键消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响。一般来说,按键消抖的方法是不断检测按键值,直到按键值稳定。实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时20ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的20ms恰好避开了抖动期。按键消
39、抖能使最终的显示结果更稳定。3.4 测频控制信号模块测频控制产生器testctl,D触发器如图3.9所示。图中CLK接CNT的FREQ1的1HZ的信号,TSTEN为计数允许信号,接计数器CNT10的ENA,CLR_CNT信号用于在每次测量开始时,对计数器进行复位,接计数器CNT10的CLR,LOAD接锁存器的LOAD。图3.9 测频控制产生器testctl,D触发器控制模块的作用是产生测频所需要的各种控制信号。控制信号的标准输入时钟为1HZ,每两个时钟周期进行一次频率测量。该模块产生的3个控制信号,分别为TSTEN,LOAD,CLR_CNT。CLR_CNT信号用于在每次测量开始时,对计数器进行
40、复位,以清除上次测量的结果,该复位信号高电平有效,持续半个时钟周期的时间。TSTEN为计数允许信号,在TSTEN信号的上升沿时刻计数模块开始对输入信号的频率进行测量,测量时间恰为一个时钟周期(正好为单位时间1s),在此时间里被测信号的脉冲数进行计数,即为信号的频率。然后将值锁存,并送到数码管显示出来。设置锁存器的好处是使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。在每一次测量开始时,都必须重新对计数器清0。由于本次设计的重点是等精度频率计的实现,在等精度原理介绍的时候有强调过等精度的关键是:门控信号不是一个固定的值,而是与被测信号相关的,恰好是被测信号的整数倍。所以在设计的过程中加入了
41、D触发器,把测频控制信号产生器testctl的输出信号clr_cnt,load,tsten分别通过D触发器再分别与计数器,锁存器相连。确保本设计的频率计是等精度频率计。测频控制信号发生器TESTCTL的工作时序图,控制模块的几个控制信号的时序关系图如图3.10所示。图3.10 TESTCTL,D触发器的时序仿真图从图中可看出,计数使能信号TSTEN在1s的高电平后,利用其反相值的上升沿产生一个锁存信号LOAD,随后产生清0信号上升沿CLR_CNT。其中,控制信号时钟clk的频率取1HZ,而信号TSTEN的脉宽恰好为1s,可以用作闸门信号。此时,根据测频的时序要求,可得出信号LOAD和CLR_C
42、NT的逻辑描述。由图可知,在计数完成后,计数使能信号TETEN在1s的高电平后,利用其反相值的上升沿产生一个锁存信号LOAD,0.5s后,CLR_CNT产生一个清零信号上升沿。3.5 锁存器锁存器REG32B的封装如图3.11,图中LOAD接控制测频产生器TESTCTL的LOAD,而DIN31.0接计数器CNT10的CQ3.0,DOUT31.0接显示器smg的in端。图3.11 锁存器REG32B锁存器模块是本设计中必不可少的,测量模块测量完成后,在load信号的上升沿时刻将测量值锁存到寄存器中,然后输出到显示模块。锁存器的作用是数据保持,它将会把数据保存到下次触发或复位,主要是主从触发器组成
43、的。用于存储数据来进行交换,使数据稳定下来保持一段时间不变化,直到新的数据将其替换。32位锁存器REG32B的工作时序图如图3.12。图3.12 锁存器REG32B仿真本程序是用来实现锁存器模块的功能,在锁存信号load的上升沿到来时,锁存器将测量值锁存到寄存器,然后输出到选择模块和周期模块。但从仿真图3.12中可以明显的看出,锁存输出并不是立即进行的,而是经历了一个短暂的延时,这是由于硬件引起的。3.6 计数器模块CNT10的封装如图3.13,其中CLR为复位接TESTCTL的通过D触发器后的CLR_CNT端,ENA接TESTCTL通过D触发器后的TSTEN端,CQ3.0接锁存器的DOUT3
44、1.0端。图3.13 CNT10封装图计数器模块是由8个带有异步清零端,进位信号输出的模为10的计数模块级连而成。此十进制计数器的特殊之处是,有一时钟使能输入端ENA,用于控制计数器的工作。高电平允许计数,低电平时停止计数。计数器模块用于对输入信号的脉冲进行计数,该模块必须有计数允许、异步清零等端口,以便于控制模块对其进行控制。有时钟使能,异步清零的十进制计数器CNT10的工作时序仿真如图3.14。图3.14 CNT10时序仿真此程序模块实现的功能是带使能端的10进制计数。程序要求只有当使能端信号为高电平时计数器才能正常工作,每个时钟的上升沿到来时计数器加1,因为这里要实现的是10进制计数,所
45、以当计数到10时计数器清零,同时产生进位信号,这里的进位信号仅为一个脉冲信号,一旦计数从9变为0,脉冲信号立即变为低电平。同时该计数器带有清零信号,一旦清零信号为高电平,计数器立即清零。3.7 周期模块在本次频率计的设计中加入了周期测量功能,周期模块主要由32位除法器division和转码器B_BCD这两个功能模块组成。32位除法器division,转码器B_BCD的封装如图3.15所示。图3.15 周期模块封装图32位除法器division中的除数设置为109,由于本次频率计的信号源频率范围是15hz10MHZ,根据周期T=1/f(单位:s)可知,当除数取1 的时候,周期很小,误差较大;所以
46、在这里除法器中除数取109时,此时周期单位:ns。除法器的部分源代码如下:always (posedge clk)begin tempa = a; tempb = b;endinteger i;always (posedge clk)begin temp_a = 32h00000000,tempa; temp_b = tempb,32h00000000; for(i = 0;i = tempb) temp_a = temp_a - temp_b + 1b1; else temp_a = temp_a; end yshang = temp_a31:0; yyushu = temp_a63:32;end如果此时把除法器的商yshang直接输入到数码管模块数据输入端,在数码管上的显示结果并不与预期的相同。是因为除法器的输出结果yshang31.0为32位二进制,但是在数码管显示中只能显示0-9,十进制9所对应的二进制为:1001,而4位的二进制能表示的数字范围为0-15。所以如果把32位的yshang直接输入到数码管显示模块所显示的数据是错误的。这就需要把32位二进制转化为8421BCD码,每4位对应的十进制的0-9。把转码后的结果输入数码管显示模块中才能显示出相应的数字