




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于EDA的数字频率计的设计【摘 要】在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本文阐述了用VHDL语言设计了一个简单的数字频率计的过程。【关键词】EDA;VHDL;数字频率计;波形仿真;1.1
2、设计要求借助于FPGA/CPLD的开发技术,设计一个4位十进制数字显示的数字式频率计,具体要求如下:(1)4位十进制数字显示的数字式频率计的测量范围为1k9999KHZ,测量单位为KHZ;(2)要求量程能够自动转换,即几十KHZ显示小数点后两位,而几百KHZ则显示小数点后一位;(3)当输入信号小于1KHZ时,输出全0,当输入大于9999KHZ时,输出显示全H。1.2方案论证采用FPGA/CPLD芯片作为控制核心单元,完成各功能模块。首先将被测信号与控制信号加在FPGA/CPLD芯片上,通过在芯片内部进行各逻辑操作,完成分频、计数及扫描显示等功能操作,最后通过数码管显示结果。其原理框架图如下图1
3、-2所示。FPGA/CPLD被测信号数码显示防抖电路动态扫描锁存模块计数模块各控制信号分频模块图1-2 以FPGA/CPLD为核心的数字频率计第二章 频率计的原理及测量方法数字频率计是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。所谓频率,就是周期性信号在单位时间(1s)里变化的次数。若在一定时间间隔T内测得的这个周期性信号的重复变化次数N,则其频率可表示为f=N/T;只要知道了N和T就可以求得频率。若设置闸门信号的时间为1S,则被测频率就是NHz。M法是在给定的闸门时间内测量被测信号的脉冲个数,进行换算得出被测信号的频率。当频率
4、计正常工作时,频率为0.5Hz的闸门信号作为计数器的时钟信号,而被测信号则作为计数器的时钟输入。当闸门信号为高电平是允许计数;而为低电平时,计数器停止计数,则所计的数值即为被测信号的频率。本频率计设计测量频率的方法就是利用M法,首先让被测信号与标准信号一起通过一个闸门,然后用计数器计数信号脉冲的个数,把标准时间内的计数的结果,用锁存器锁存起来,最后用显示译码器,把锁存的结果用LED数码显示管显示出来。根据数字频率计的基本原理,本文设计方案的基本思想是分为五个模块来实现其功能,即整个数字频率计系统分为分频模块、防抖模块、计数模块、译码模块和锁存模块,再加一个顶层模块,并且分别用VHDL对其进行编
5、程,实现了闸门控制信号电路、防抖电路、计数电路、锁存电路、显示电路等。脉冲形成模 块计数模块译码显示模块控制模 块量程自动切换模块分频模 块锁存信号清零使能被测信号基准信号图2-1 频率计测量频率的原理图3.1 时钟分频模块本设计为满足EDA开发板的要求,故采用32KHz的时钟作为输入时钟,对其进行分频,得到3个子时钟,即200Hz的片选信号(动态扫描时钟)、25Hz的防抖电路时钟和0.5Hz的闸门信号。其实体模块如图3-1-1。200Hz片选信号25Hz防抖时钟0.5Hz闸门信号32KHz图3-1-1END TIME设置为8s加32KHz的输入信号,其仿真波形如图3-1-2.200Hz25H
6、z32KHz0.5Hz 图3-1-23.2 防抖电路模块在实际电路中按键会产生毛刺抖动,并且输出的信号并不稳定,故为保证电路不受毛刺的影响,并产生有效的信号,可加一个防抖电路来消除其影响。其实体模块如图3-2-1所示。图3-2-1此模块只有在cp2上升沿来时,若key为高电平,则imp输出一个cp2周期的有效稳定高电平;其它imp都输出低电平。其仿真波形如图3-2-2.按键按下为高输出一个宽度为cp2周期的高电平25Hz时钟输入图3-2-23.3 计数模块此模块可在闸门信号内对被测信号进行计数,及4位BCD显示结果的输出,并自动进行量程的转换。其实体模块如图3-3-1.复位信号1有效输入999
7、9KHz时的输出4位BCD显示结果输出及小数点的输出标志闸门信号开关信号1有效被测信号图3-3-1此模块的仿真波形如图3-3-2.enable为1,reset为0125KHz输入0.5Hz4位BCD输出结果及小数点标志位输出图3-3-23.4 锁存模块此模块是将计数部分的输出结果进行缓冲锁存,保证结果的正确输出显示。即在计数部分cp3为低电平(停止计数)时,将输出的结果进入锁存部分,通过锁存器将结果给译码显示器。其实体模块如图3-4-1.锁存结果计数模块输出图3-4-1此模块的仿真波形如图3-4-2.可见,在cp3下降沿时,锁存器将输入锁存,直接给输出;reset为1时,可清零。图3-4-23
8、.5 译码显示模块此模块是对显示部分的4位7段数码管进行动态扫描与译码显示,如此可直观地反映被测信号的频率。其实体模块如图3-5-1.数码管位选数码管段码锁存器输出图3-5-1此模块的仿真波形如图3-5-2。4位BCD输出小数点标志位扫描时钟信号4为位选信号加小数点8段段码输出图3-5-2第四章 系统设计与仿真在各个子模块设计好之后,还需要一个顶层文件将它们联系起来,构成一个完整的系统,如此才能具备测频的功能。整个系统的原理图如图4-1所示。图4-1由于此设计的频率计量程为1KHz9999KHz,故需对各个范围的值都进行仿真,其仿真波形如下:32KHz500Hz图4-2 被测信号为500Hz时
9、的仿真波形注:被测信号为500Hz时,仿真结果显示为 ,即“0000”。图4-3 被测信号为1250Hz时的仿真波形注:被测信号为1250Hz时,仿真结果显示为 ,即“1.250”。图4-4 被测信号为50KHz时的仿真波形注:被测信号为50KHz时,其仿真结果显示为 ,即“50.00”。图4-4 被测信号为125KHz时的仿真波形注:被测信号为125KHz时,其仿真结果显示为 ,即“125.0”。图4-5 被测信号为1250KHz时的仿真波形注:被测信号为1250KHz时,其仿真结果显示为 ,即“1250”。图4-5 被测信号为1250KHz时的仿真波形注:被测信号为12MHz时,其仿真结果
10、显示为 ,即“HHHH”。数码管数值译码对应表:数值dpgfedcba00/1011111110/1000011020/1101101130/1100111140/1110011050/1110110160/1111110170/1000011180/1111111190/11101111H0/11110110第五章 硬件实验及结果5.1 硬件实验方案将程序烧入芯片中,在EDA实验开发板上进行实验。其引脚锁定如下:注:cp32m绑定32KHzEnable1绑定DK2Reset1绑定DK3Input1绑定CLK1的2KHzSel10绑定LI0Sel11绑定LI1Sel12绑定LI2Show10绑
11、定A8Show11绑定B8Show12绑定C8Show13绑定D8Show14绑定E8Show15绑定F8Show16绑定G8Show17绑定DP8将管脚按以上绑定好,就可以在实验板上调试了。5.2 实验结果将程序下载到实验板中,在enable未打开(即为0)时,可以看到数码管并没有数值显示(即均为0);在置enable1为1时,可以看到显示结果为“2.XXX”(数值不固定,有变化);此时置reset1为1,可看到显示结果清零;将input1接为2Hz,显示为“0000”;将input1接为Y1(即为12MHz),显示为“HHHH”。由于实验板上没有几千KHz、几百KHZ和几十KHz,但根据仿
12、真结果可知,设计是没有问题的。从仿真和实验结果可以看出本设计能够对满足设计要求量程内的信号频率进行测量。第六章 心得体会通过本次的课程设计,让我再次深入了EDA的世界,使我对这一门学科有了更高层次的了解。在开始设计前一定要将课本上的知识吃透,因为这是做实验的基础,否则,设计的难度就很大,会浪费很多时间。而且还要对设计的相关内容积极查阅资料,对设计内容要亲力亲为,务必将每个步骤,每个细节弄清楚,弄明白。在做好这些前奏工作后就要自己去设计了,将学到的理论知识运用到实际操作中去。通过这为期两周的课程设计,我受益匪浅,不但巩固了理论知识,还进一步掌握了实际操作发法。增强了自己研究问题和创新意识的能力。
13、在课设中可以用充实和繁忙来形容了,每天都奔波在寝室与实验室之间。之所以充实是在课堂上学到的东西都有了用武之地。有些更是自己在图书馆查找资料,网上搜索,同学讨论,老师讲解中学习了解到的。巩固和提升了自己的知识水平。这两周也可以用沮丧和欢喜来形容,当面临一个个难题是,绞尽脑汁也束手无策时,心里真的好难受,感觉好失败。但最终将它们解决时,那又是多么欢喜。在这期间,我还明白了,只有脚踏实地、认真严谨、实事求是才能够在每一步中得到真正的收获。这也是我在这次课设中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。读万卷书,行万里路。我要学习与实践相结合,而
14、且我本来就是学电子的,只有在实践中去巩固和理解学到的知识,才能真正地掌握它,才能在以后的工作中发挥作用。参考文献【1】EDA技术实用教程 科学出版社 潘松 黄继业【2】数字电路EDA入门-VHDL程序实例集 北京邮电大学出版社 张亦华【3】VHDL应用与开发实践 科学出版社 甘历【4】CPLD/FPGA应用开发技术与工程实践 人民邮电出版社 【5】FPGA系统设计与实践 电子工业出版社 黄智伟附录:程序代码:-顶层模块-Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity total ispo
15、rt(cp32m:in std_logic;-32KHz时钟信号 enable1:in std_logic;-开关信号 input1:in std_logic;-输入被测信号 reset1:in std_logic;-复位信号 sel1:out std_logic_vector(2 downto 0);-输入片选信号 show1:out std_logic_vector(7 downto 0);-输出七位数码管显示end total;architecture content of total issignal cp_1,cp_2,cp_3:std_logic;signal reset_1:st
16、d_logic;signal overflow_1,low_1:std_logic;signal play0_1,play1_1,play2_1,play3_1:integer range 0 to 9;signal overlatch_1,lowlatch_1:std_logic;signal p0_1,p1_1,p2_1,p3_1:integer range 0 to 9;signal decimal_1:std_logic_vector(3 downto 0);signal de1:std_logic_vector(3 downto 0);component dividefre4 isp
17、ort(cp_32m:in std_logic;cp1:out std_logic;cp2:out std_logic;cp3:out std_logic);end component;component debounce isport(key:in std_logic; cp2:in std_logic; imp:out std_logic);end component;component fretest isport(enable,cp3,input,reset:in std_logic;overflow,low:out std_logic;play0,play1,play2,play3:
18、out integer range 0 to 9;decimal:out std_logic_vector(3 downto 0);end component;component frelatch isport(reset:in std_logic; cp3:in std_logic;overflow:in std_logic;low:in std_logic;play0,play1,play2,play3:in integer range 0 to 9;decimal:in std_logic_vector(3 downto 0);overlatch:out std_logic;lowlat
19、ch:out std_logic;p0latch,p1latch,p2latch,p3latch:out integer range 0 to 9;delatch:out std_logic_vector(3 downto 0);end component;component display isport(cp1:in std_logic;low:in std_logic;overflow:in std_logic;de:in std_logic_vector(3 downto 0);p0,p1,p2,p3:in integer range 0 to 9;show:out std_logic_
20、vector(7 downto 0);sel:out std_logic_vector(2 downto 0);end component;beginu1:dividefre4 port map(cp_32m=cp32m,cp1=cp_1,cp2=cp_2,cp3=cp_3);u2:debounce port map(key=reset1,cp2=cp_2,imp=reset_1);u3:fretest port map(enable=enable1,cp3=cp_3,input=input1,reset=reset_1,overflow=overflow_1,low=low_1,play0=
21、play0_1,play1=play1_1,play2=play2_1,play3=play3_1,decimal=decimal_1);u4:frelatch port map(reset=reset_1,cp3=cp_3,overflow=overflow_1,low=low_1,play0=play0_1,play1=play1_1,play2=play2_1,play3=play3_1,decimal=decimal_1,overlatch=overlatch_1,lowlatch=lowlatch_1,p0latch=p0_1,p1latch=p1_1,p2latch=p2_1,p3
22、latch=p3_1,delatch=de1);u5:display port map(cp1=cp_1,low=lowlatch_1,overflow=overlatch_1,p0=p0_1,p1=p1_1,p2=p2_1,p3=p3_1,show=show1,sel=sel1,de=de1);end content;-分频模块-Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;Entity dividefre4 Isport(cp_32m:in std_logic; cp1:out std_logi
23、c;-200Hz片选信号 cp2:out std_logic;-25Hz防抖动电路周期信号 cp3:out std_logic);-0.5Hz闸门信号end dividefre4;architecture behavior of dividefre4 issignal tout:integer range 0 to 80;signal tout1:integer range 0 to 7;signal tout2:integer range 0 to 400;signal cp_1:std_logic;signal cp_2:std_logic;signal cp_3:std_logic;si
24、gnal cp:std_logic;beginprocess(cp_32m)-80分频,分到400Hzbeginif(cp_32mevent and cp_32m=1) thenif tout=79 thentout=0;else tout=tout+1;end if;if tout=39 thencp=0;else cp=1;end if;end if;end process;process(cp)-200Hzbeginif(cpevent and cp=1) thencp_1=not cp_1;end if;end process;process(cp_1)beginif(cp_1even
25、t and cp_1=1) thenif tout1=7 then tout1=0;else tout1=tout1+1;end if;if tout1=3 thencp_2=1;elsif tout1=7 then cp_2=0;-cp_2得到25Hzend if;if tout2=399 then tout2=0;else tout2=tout2+1;end if;if tout2=399 thencp_3=1;elsif tout2=199 then cp_3=0;-cp_3得到0.5Hzend if;end if;end process;cp1=cp_1;cp2=cp_2;cp3=cp
26、_3;end behavior;-防抖模块-Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;Entity debounce isport(key,cp2:in std_logic;imp:out std_logic);end debounce;architecture base of debounce issignal q1,q2:std_logic;beginprocess(cp2)beginif cp2event and cp2=1 t
27、henq2=q1;q1=key;end if;end process;imp=q1 and not q2;end base;-计数模块-Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;Entity fretest Isport(enable:in std_logic;-开关信号 cp3:in std_logic;-闸门信号 input:in std_logic;-被测信号 reset:in std_logic;-复位信号overflow:out std_logic;-输入大于9999KHz信号的输出l
28、ow:out std_logic;-输入小于1KHz信号的输出play0,play1,play2,play3:out integer range 0 to 9;-4位BCD显示结果输出decimal:out std_logic_vector(3 downto 0);-小数点输出end fretest;architecture behavior of fretest issignal r0_1,r1_1,r2_1,r3_1,r4_1,r5_1,r6_1:integer range 0 to 9;beginprocess(input,enable,reset)beginif enable=0 th
29、en null;elsif(inputevent and input=1) thenif reset=1 then-复位信号为1时,输出全为0overflow=0;r0_1=0;r1_1=0;r2_1=0;r3_1=0;r4_1=0;r5_1=0;r6_1=0;elsif cp3=0 then-当闸门处于低电平0时,输出为全0overflow=0;r0_1=0;r1_1=0;r2_1=0;r3_1=0;r4_1=0;r5_1=0;r6_1=0;elser0_1=r0_1+1;if(r0_1=9) then r1_1=r1_1+1;r0_1=0;if(r1_1=9) then r2_1=r2_1
30、+1;r1_1=0;if(r2_1=9) then r3_1=r3_1+1;r2_1=0;if(r3_1=9) then r4_1=r4_1+1;r3_1=0;if(r4_1=9) then r5_1=r5_1+1;r4_1=0;if(r5_1=9) then r6_1=r6_1+1;r5_1=0;if(r6_1=9) then r6_1=0;-当计到第七位仍不够时,溢出为1,即输入大于9999KHzoverflow=1;end if;end if;end if;end if;end if;end if;end if;if(r6_1=0 and r5_1=0 and r4_1=0 and r3
31、_1=0) then-当高四位都为0时,即输入信号小于1KHzlow=1;else low=0;end if;end if;end if;end process;process(r6_1,r5_1,r4_1)beginif(r6_1=0 and r5_1=0 and r4_1=0) then-输出为#.#KHzplay0=r0_1;play1=r1_1;play2=r2_1;play3=r3_1;decimal0) then-输出为#.#KHzplay0=r1_1;play1=r2_1;play2=r3_1;play3=r4_1;decimal0) then-输出为#.#KHzplay0=r2
32、_1;play1=r3_1;play2=r4_1;play3=r5_1;decimal=0010;else-输出为#KHzplay0=r3_1;play1=r4_1;play2=r5_1;play3=r6_1;decimal=0000;end if;end process;end behavior;-锁存模块-Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;Entity frelatch Isport(reset:in std_logic;-复位信号 cp3:in std_logic;-闸门信号 ov
33、erflow:in std_logic;-各项输入 low:in std_logic;play0,play1,play2,play3:in integer range 0 to 9;decimal:in std_logic_vector(3 downto 0);overlatch:out std_logic;-锁存后的各项输出lowlatch:out std_logic;p0latch,p1latch,p2latch,p3latch:out integer range 0 to 9;delatch:out std_logic_vector(3 downto 0);end frelatch;ar
34、chitecture behavior of frelatch isbeginprocess(cp3,reset)beginif reset=1 then-reset为1时置零overlatch=0;lowlatch=0;p0latch=0;p1latch=0;p2latch=0;p3latch=0;delatch=decimal;elsif cp3event and cp3=0 then-当闸门处于下降沿时,将此时计数模块的各项输出值锁存overlatch=overflow;lowlatch=low;p0latch=play0;p1latch=play1;p2latch=play2;p3latch=play3;delatch=decimal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年水路货物运输服务合作协议书
- 20以内乘法除法口算练习题目1000道可打印
- 20以内乘法除法口算题目集1000道可打印
- 20以内乘法除法口算练习题集1000道可打印
- 20以内乘法除法口算练习材料1000道可打印
- 基于缩短发酵时间的工夫红茶新工艺研究及效果评价
- 板房装修拆除合同范本
- 社区资源在提升学生实践能力中的作用研究
- 传统休闲食品项目绩效评估报告
- 2025年成分分析产品合作协议书
- 《长征胜利万岁》杨成武-【中职专用】高一语文下学期同步课堂(高教版2023·基础模块下册)
- 云母制品在阻燃材料中的应用
- 月考后正确的试卷分析方法分析研究
- 装修施工规定(十四篇)
- 集团公司审批权限表
- SCADA系统操作手册
- 渗透测试报告模版
- 老年人预防及控制养老院院内感染院内感染基本知识
- GB/T 10060-2023电梯安装验收规范
- TB编程从入门到进阶
- 教师沟通能力提升培训幼儿园家长沟通技巧教学课件
评论
0/150
提交评论