数字式频率计的设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

EDA实验报告书课题名称数字式频率计的设计实验目的1.掌握多个数码管显示的原理与方法;2.掌握EDA的层次化设计方法;3.深入了解VHDL语言设计的思想;4.进一步掌握整个数字系统的设计方法5.培养学生综合应用数字电路中所学到的理论知识去独立完成设计课题的能力;6.通过查阅手册和文献资料,培养学生独立分析和解决实际问题的能力;7.培养学生严肃认真的工作作风和严谨的科学态度。设计要求3位数字频率计是用3个十进制数字显示的数字式频率计,其频率测量范围为1MHz。为了提高测量精度,量程分别为10kHz、100kHz和1MHz三挡,即最大读数分别为9.99kHz,99.9kHz和999kHz。要求量程自动换挡。具体功能如下:1.当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增大一挡。2.当读数小雨099时,频率计处于欠量程状态,下一次测量时,量程自动减少一挡。3.当超出频率测量范围时,显示器显示溢出。4.采用记忆显示方法,即测量过程中不显示数据,待测量过程结束以后,显示测频结果,并将此结果保持到下次测量结束。显示时间不少于1秒。5.小数点位置随量程变化自动移位。6.增加测周期功能,就是当时钟频率低于0.99kHz的时候,显示的数值变成周期,以毫秒为单位。设计思路数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路、分频电路和显示电路,其原理框图如下图所示。20分频计数器锁存器驱动电路测频控制信号发生器显示1K时钟信号测试信号设计原理图及源程序原理图频率计源文件LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDFREISPORT(RESET:INSTD_LOGIC;CLK1K:INSTD_LOGIC;--1K时钟信号TESTSIGNAL:INSTD_LOGIC;--测试信号输入端DISPLAY1:OUTSTD_LOGIC_VECTOR(0TO3);DISPLAY2:OUTSTD_LOGIC_VECTOR(0TO3);DISPLAY3:OUTSTD_LOGIC_VECTOR(0TO3);--3个7段译码器输出UNIT:OUTSTD_LOGIC;--表示是周期还是频率的信号灯DOT:OUTSTD_LOGIC_VECTOR(2DOWNTO0));--小数点ENDENTITYDFRE;ARCHITECTUREONEOFDFREISTYPESTATEIS(START,JUDGE,COUNT1,COUNT2TO89,COUNT90,COUNT91TO98,COUNT99,COUNT100);SIGNALMYFRE:STATE;SIGNALFRECOU:INTEGERRANGE0TO99;--用于状态机中的计数器,计数值从0~99SIGNALENFRE:STD_LOGIC;--代表时基的脉冲信号SIGNALFLAG:STD_LOGIC_VECTOR(2DOWNTO0);--标志信号,1表示10KHZ测频挡,2表示100KHZ测频挡,3表示1MHZ测频挡,0表示测周期挡,4表示溢出SIGNALKEEPCOU1:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALKEEPCOU2:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALKEEPCOU3:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALTTCLK:STD_LOGIC;--输入计数器的时钟信号即时基SIGNALTTSIG:STD_LOGIC;--输入计数器的测试信号COMPONENTDISPLAYIS--引用7段译码器PORT(DATA_IN:INSTD_LOGIC_VECTOR(3DOWNTO0);DATA_OUT:OUTSTD_LOGIC_VECTOR(0TO6));ENDCOMPONENT;COMPONENTFREQUENCYIS--–引用计数器PORT(TRESET:INSTD_LOGIC;TCLK,TSIG:INSTD_LOGIC;TKEEP1:OUTSTD_LOGIC_VECTOR(3DOWNTO0);TKEEP2:OUTSTD_LOGIC_VECTOR(3DOWNTO0);TKEEP3:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOMPONENT;BEGINCTRDOT:PROCESS(FLAG)--控制小数点显示的进程,标志FLAG为敏感量BEGINCASEFLAGISWHEN000=DOT=000;WHEN001=DOT=100;WHEN010=DOT=010;WHEN011=DOT=001;WHENOTHERS=DOT=111;ENDCASE;ENDPROCESSCTRDOT;CTRFRE:PROCESS(RESET,CLK1K)--用于产生时基的状态机BEGINIFRESET='1'THENFRECOU=0;ENFRE='0';FLAG=001;MYFRE=START;ELSEIFCLK1K'EVENTANDCLK1K='1'THENCASEMYFREISWHENSTART=FRECOU=0;ENFRE='0';FLAG=011;MYFRE=JUDGE;WHENJUDGE=IFFLAG=000THEN--如果标志为0,即频率计处于测周期挡IFKEEPCOU3=0000ANDKEEPCOU2=0000ANDKEEPCOU1=0000THENFLAG=001;ENFRE='1';ELSEFLAG=000;ENDIF;ELSIFFLAG=100THEN--如果标志为4,即处于溢出挡IFKEEPCOU3=1010THENFLAG=100;ELSEFLAG=011;ENDIF;ELSIFFLAG=010THEN--如果标志为2,即处于100KHZ挡IFKEEPCOU30001THENFLAG=FLAG-1;ENFRE='1';ELSIFKEEPCOU3=1010THENFLAG=FLAG+1;ELSEFLAG=FLAG;ENDIF;ELSIFFLAG=001THEN--如果标志为1,即处于10KHZ挡IFKEEPCOU30001THENFLAG=FLAG-1;ELSIFKEEPCOU3=1010THENFLAG=FLAG+1;ELSEFLAG=FLAG;ENFRE='1';ENDIF;ELSE--如果标志为3,即处于1MHZ挡IFKEEPCOU30001THENFLAG=FLAG-1;ELSIFKEEPCOU3=1010THENFLAG=FLAG+1;ELSEFLAG=FLAG;ENDIF;ENDIF;MYFRE=COUNT1;--处于计数状态1的时候WHENCOUNT1=IFFLAG=001ORFLAG=000THENENFRE='1';ELSEENFRE=ENFRE;ENDIF;FRECOU=1;MYFRE=COUNT2TO89;WHENCOUNT2TO89=--处于计数状态2~89的时候IFFRECOU=88THENFRECOU=89;MYFRE=COUNT90;ELSEFRECOU=FRECOU+1;MYFRE=COUNT2TO89;ENDIF;WHENCOUNT90=--处于计数状态90的时候IFFLAG=010THENENFRE='1';ELSEENFRE=ENFRE;ENDIF;FRECOU=90;MYFRE=COUNT91TO98;WHENCOUNT91TO98=--处于计数状态91~98的时候IFFRECOU=97THENFRECOU=98;MYFRE=COUNT99;ELSEFRECOU=FRECOU+1;MYFRE=COUNT91TO98;ENDIF;WHENCOUNT99=--处于计数状态99的时候IFFLAG=011ORFLAG=100THENENFRE='1';ELSEENFRE=ENFRE;ENDIF;FRECOU=99;MYFRE=COUNT100;WHENCOUNT100=--处于计数状态100的时候FRECOU=100;ENFRE='0';MYFRE=JUDGE;--状态转移到判断状态WHENOTHERS=NULL;ENDCASE;ENDIF;ENDIF;ENDPROCESSCTRFRE;CTRTT:PROCESS(RESET,FLAG)--用于控制计数器输入的进程BEGINIFRESET='1'THENTTCLK='0';TTSIG='0';UNIT='0';--异步置位使得输入信号都为0ELSEIFFLAG=0THENTTCLK=CLK1K;TTSIG=TESTSIGNAL;UNIT='1';--如果标志为0即频率计处于测周期挡ELSETTCLK=TESTSIGNAL;TTSIG=ENFRE;UNIT='0';--如果标志不为0即频率计处于测频率挡ENDIF;ENDIF;ENDPROCESSCTRTT;C1:FREQUENCYPORTMAP(RESET,TTCLK,TTSIG,KEEPCOU1,KEEPCOU2,KEEPCOU3);--引用计数器DIS1:DISPLAYPORTMAP(KEEPCOU1,DISPLAY1);DIS2:DISPLAYPORTMAP(KEEPCOU2,DISPLAY2);DIS3:DISPLAYPORTMAP(KEEPCOU3,DISPLAY3);ENDONE20分频源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_1164.ALL;ENTITYFREDIV20KISPORT(INCLK:INSTD_LOGIC;OUTCLK:BUFFERSTD_LOGIC);END;ARCHITECTUREONE10KOFFREDIV20KISSIGNALCOU:INTEGERRANGE0TO4999;SIGNALTEMP:STD_LOGIC;BEGINPROCESS(INCLK)BEGINIFINCLK'EVENTANDINCLK='1'THENIFCOU=4999THENCOU=0;TEMP='1';ELSECOU=COU+1;TEMP='0';ENDIF;ENDIF;ENDPROCESS;PROCESS(TEMP)BEGINIFTEMP'EVENTANDTEMP='1'THENOUTCLK=NOTOUTCLK;ENDIF;ENDPROCESS;ENDONE10K;译码器模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDISPLAYISPORT(DATA_IN:INSTD_LOGIC_VECTOR(3DOWNTO0);DATA_OUT:OUTSTD_LOGIC_VECTOR(0TO3));--7段译码输出ENDENTITYDISPLAY;ARCHITECTUREONEOFDISPLAYISSIGNALINDATA:STD_LOGIC_VECTOR(3DOWNTO0);--内部数值信号BEGINPROCESS(DATA_IN)--输入信号作为进程的敏感量触发进程BEGININDATA=DATA_IN;CASEINDATAISWHEN0000=DATA_OUT=0000;WHEN0001=DATA_OUT=0001;WHEN0010=DATA_OUT=0010;WHEN0011=DATA_OUT=0011;WHEN0100=DATA_OUT=0100;WHEN0101=DATA_OUT=0101;WHEN0110=D

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功