量程手动切换数字频率计_第1页
量程手动切换数字频率计_第2页
量程手动切换数字频率计_第3页
量程手动切换数字频率计_第4页
量程手动切换数字频率计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 量程手动切换数字频率计 摘要 数字频率计是一种能够测量被测信号频率的数字测量仪器。它被广泛应用于航天、航空、电子、自动化测量、测控等领域。在QUARTUS II平台上,用VHDL语言编程完成了软件设计、编译、调试、仿真和下载。由于本系统采用了先进的EDA技术,不但大大缩短了开发研制周期,而且使本系统具有结构紧凑、体积小,可靠性高,测频范围宽、精度高等优点。关键词:频率计;可编程逻辑器件;VHDL1、 实验内容及要求(1)设计一个8位十进制数字式频率计,后两位为小数,其测量范围为1MHz。量程分10kHz,100kHz和1MHz三档,被测信号应是一脉冲信号。(2)当读数大于量程时,频率计处于超

2、量程状态。此时显示器发出溢出指示(最高位显示F,其余各位不显示数字),下一次测量时,量程增加一档;当读数小于00000时,频率计处于欠量程状态。下次测量时,量程减小一档。(3)完成全部流程:设计规范文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、下载验证等。二、设计内容(1)频率计的工作原理 常用的测量频率的方法有两种,一个是测周期法,一个是测频率法。 测周期法需要有基准系统时钟频率,在待测信号一个周期内,记录基准时钟频 率的周期数,则被测频率可表示为:=/ 测频率法就是在一定的时间间隔内内,得到这个周期信号重复变化的次数,则被测频率可表示为=/ 本设计采用的是直接测频率的方法。(2

3、)频率计的系统框图频率计的系统设计可以分为8位10进制计数模块、锁存器模块、控制换挡模块,其系统框图如图所示。- 1 -输入信号计数模块锁存器模块输出控制换挡模块频率计的系统框图3、 实验设计1、分频模块的设计根据设计要求,最小显示的周期是10ms,即100Hz。选用3MHz的作为输入,先输出200Hz的时钟信号。其VHDL的代码如下library ieee;use ieee.std_logic_1164.all;entity fenpin isport(clk0:in std_logic; -输入系统时钟 clk1:out std_logic); -输出200hz时钟信号 end fenpi

4、n;architecture a of fenpin isbegin p1:process(clk0)variable cnt:integer range 0 to 14999; variable ff:std_logic;beginif clk0'event and clk0='1' thenif cnt<14999 thencnt:=cnt+1;elsecnt:=0;ff:=not ff; -反向end if;end if;clk1<=ff;end process p1;end a;图3.1为分频模块的仿真图 图3.1:分频模块仿真图2、十进制计数器模块

5、8位十进制计数器模块,用来对给到的时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有计数使能、清零控制和超量程警报功能。 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jishu is port(clr,fsin,en:in std_logic; -清零,被测信号,使能信号输入 q7,q6,q5,q4,q3,q2,q1,q0:out std_logic_vector(3 downto 0); -输出end jishu;architecture a of jishu isS

6、ignal outrange:std_logic;-超过1M量程beginprocess(en,fsin,clr) -计数variable c0,c1,c2,c3,c4,c5,c6,c7:std_logic_vector(3 downto 0);beginif fsin'event and fsin='1'thenif en='1' and outrange='0' thenif c0<"1001"thenc0:=c0+1;elsec0:="0000"if c1<"1001&q

7、uot;thenc1:=c1+1;elsec1:="0000"if c2<"1001"thenc2:=c2+1;elsec2:="0000"if c3<"1001"thenc3:=c3+1;elsec3:="0000"c4:="0001"outrange<='1'end if;end if;end if;end if;elsif outrange='1' then-超量程显示F即1111c7:="1111"

8、c6:="0000"c5:="0000"c4:="0000"c3:="0000"c2:="0000"c1:="0000"c0:="0000"end if;end if;if clr='1'then -当clr为1时,清零outrange<='0' c7:="0000" c6:="0000" c5:="0000" c4:="0000" c3:

9、="0000" c2:="0000" c1:="0000" c0:="0000"end if;q7<=c7;q6<=c6;q5<=c5;q4<=c4;q3<=c3;q2<=c2;q1<=c1;q0<=c0;end process;end a;在程序中,q0,q1,q2,q3,q4,q5,q6,q7为输出,clr为清零信号,当clr=1时,q7,q6,q5,q4,q3,q2,q1,q0都输出0;en是使能控制输入端,当en=1时,计数器计数,当en=0时,计数器保持状态

10、不变。当计数周期内计数超过1M,即为10000,即outrange='1时,只最高位输出F。 图3.2为计数模块的仿真图。 图3.2:计数模块仿真图 3、锁存模块的设计锁存模块,其功能是将8个十进制计数器的数据,在lock信号发生变化为上升沿的时候,锁存到寄存器中,其VHDL源程序如图所示:library ieee;use ieee.std_logic_1164.all;entity suocun is -锁存模块 port(lock:in std_logic; d7,d6,d5,d4,d3,d2,d1,d0:in std_logic_vector(3 downto 0); -锁存输入

11、信号 q7,q6,q5,q4,q3,q2,q1,q0:out std_logic_vector(3 downto 0); -锁存输出信号end suocun;architecture a of suocun isbegin process(lock) variable t7,t6,t5,t4,t3,t2,t1,t0:std_logic_vector(3 downto 0); -锁存信号内部变量begin if lock'event and lock='1' then -在基准时钟上升沿进行锁存 t7:=d7; t6:=d6; t5:=d5; t4:=d4; t3:=d3

12、; t2:=d2; t1:=d1; t0:=d0;end if; -否则,当锁存信号lock为0时,锁存输出信号 q7<=t7; q6<=t6; q5<=t5; q4<=t4; q3<=t3; q2<=t2; q1<=t1; q0<=t0; end process;end a;d0,d1,d2,d3,d4,d5,d6,d7为锁存输入信号,q0,q1,q2,q3,q4,q5,q6,q7为输出锁存信号。当lock上升沿进行锁存,否则,当锁存信号lock为0时,锁存输出信号。图3.3为锁存模块的仿真图。 图3.3:锁存模块仿真4、控制换挡模块的设计我们

13、在实验箱上给定的系统时钟3M经过分频模块得到了200Hz,将其输入给clk1,P1进程将其二分频后将100Hz赋值给en;P2是当clk1和en都为0时clear为1,使得每次计数完成后进行计数清零;P3进程是当testen为1时,锁存信号为0,使得每次计数完成后进行数据的锁存;K1按键确认进行数据传送的开始和结束标志,是手动状态切换的信号;P4为不同量程状态下的显示输出。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity kongzhi is port(clk1,k1:in std_l

14、ogic; -输100hz时钟信号q7,q6,q5,q4,q3,q2,q1,q0:in std_logic_vector(3 downto 0); -输入七位十进制计数结果 clr,en,lock:out std_logic; -清零信号,使能信号,锁存信号输出 bcd7,bcd6,bcd5,bcd4,bcd3,bcd2,bcd1,bcd0:out std_logic_vector(3 downto 0); -高位输出,小数点输出end kongzhi;architecture a of kongzhi isSignal testen:std_logic;Signal clear:std_lo

15、gic;Signal q:std_logic_vector(1 downto 0);signal lock0:std_logic;beginP1: process(clk1,testen)BeginIf clk1'event and clk1='1' then testen<=not testen; -对值为100hz的clk1时钟200分频End if;en<=testen;End process p1;P2:process(clk1,testen,clear) BeginIf clk1='0' and testen='0'

16、 then clear<='1' -当clk1和testen都为0时clear为1else clear<='0'End if;clr<=clear;End process p2;P3:process(testen,lock0) -当testen为1时,锁存信号为0BeginIf testen='1' then lock0<='0'else lock0<='1' -当testen为0时,锁存信号为1End if;lock<=lock0;End process p3;-按键确认进行数

17、据传送的开始和结束标志process (k1)beginif k1' event and k1='1' then if q=2 then q<="00" else q<=q+1;end if;end if;end process;-P4:process(clk1)beginif rising_edge(clk1) then if testen='0' thenif q="00" thenbcd7<=q7; bcd6<="0000" bcd5<="0000&

18、quot; bcd4<=q4;bcd3<=q3; bcd2<=q2; bcd1<=q1; bcd0<=q0;elsif q="01" thenbcd7<=q7; bcd6<="0000" bcd5<="0000" bcd4<="0000"bcd3<=q4; bcd2<=q3; bcd1<=q2; bcd0<=q1;elsif q="10" then bcd7<=q7; bcd6<="0000" bcd5<="0000" bcd4<="0000"bcd3<="0000" bcd2<=q4; bcd1<=q3; bcd0<=q2;else bcd7<=q7; bcd6<=q6; bcd5<=q5; bcd4<=q4;bcd3<=q3; bcd2<=q2; bcd1<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论