EDA课程设计题目:数字频率计的设计学院:理工学院班级:10电信学号:1034301114姓名:XX指导老师:XX提交时间:2013-12-6量程自动转换数字式频率计的设计-1-数字频率计的设计摘要:数字频率计是一种能够测量被测信号频率的数字测量仪器。它被广泛应用于航天、航空、电子、自动化测量、测控等领域。本文利用测频原理,设计一个量程自动转换数字式频率计,主要硬件电路由Altera公司生产的复杂可编程逻辑(CPLD)EPM7128构成。复杂可编程逻辑器件CPLD芯片EPM7128SLC84-15完成各种时序逻辑控制、计数功能。在QUARTUSII平台上,用VHDL语言编程完成了CPLD的软件设计、编译、调试、仿真和下载。由于本系统采用了先进的EDA技术,不但大大缩短了开发研制周期,而且使本系统具有结构紧凑、体积小,可靠性高,测频范围宽、精度高等优点。关键词:频率计;可编程逻辑器件;VHDL量程自动转换数字式频率计的设计-2-一、设计要求1.频率计的测量范围为1MHz,量程分10KHz、100KHz和1000KHz三档(最大读数分别为9.99KHz、99.9KHz、999KHz)。2.要求量程可根据被测量的大小自动转换。即当计数器溢出时,产生一个换档信号,让整个计数时间减少为原来的1/10,从而实现换档功能。3.要求实现溢出报警功能。即当频率高于999KHz时,产生一报警信号,点亮LED灯,从而实现溢出报警功能。二、设计方案1、频率计的工作原理常用的测量频率的方法有两种,一个是测周期法,一个是测频率法。测周期法需要有基准系统时钟频率sF,在待测信号一个周期xT内,记录基准时钟频率的周期数sN,则被测频率可表示为:xF=sF/sN测频率法就是在一定的时间间隔内wT内,得到这个周期信号重复变化的次数xN,则被测频率可表示为xF=xN/wT本设计采用的是直接测频率的方法。2、频率计的系统框图频率计的系统设计可以分为4位10进制计数模块、闸门控制模块、锁存器模块、译码显示模块和可自动换档基准时钟模块,其系统框图如图2.1所示。其中,可自动换档模块为闸门控制模块提供3个档也就是3个测量范围的基准时钟信号,通过计数器的最高位溢出情况来判定工作在第几档。闸门控制模块根据基准时钟信号产生基准时钟信号周期2倍的周期使能信号,随后为锁存器产生一周期性地锁存信号,再然后为计数模块产生一周期性地清零信号。4位10进制计数模块在使能信号和清零信号的控制下对被测信号的波形变化进行计数,若产生溢出则为自动换档模块输出一换档信号。译码显示模块负责不闪烁的显示被测信号的频率以及数字频率计目前工作的档位。可自动换档基准时钟模块闸门控制模块4位10进制计数模块译码显示模块锁存模块图2.1:频率计的系统框图量程自动转换数字式频率计的设计-3-三、详细设计1、4位十进制计数器模块4位十进制计数器模块包含4个级联十进制计数器,用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有计数使能、清零控制和进位扩展输出。用于计数的时间间隔(计数允许周期T)由闸门控制模块的控制信号发生器所产生的使能信号来控制,使能十进制计数器的计数允许周期T可由闸门控制模块中的量程选择输入来决定。这样允许用户选择所希望的被测频率范围,并有效地确定读出数据中十进制小数点的位置。(1)、十进制计数器元件cnt10的设计十进制计数器既可采用QuartusII的宏元件74160,也可用VHDL语言设计,本设计采用VHDL编写,其源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcnt10ISPORT(clr:INSTD_LOGIC;clk:INSTD_LOGIC;cout:OUTSTD_LOGIC;en:INSTD_LOGIC;cq:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDcnt10;ARCHITECTUREoneOFcnt10ISBEGINPROCESS(clr,clk,en)VARIABLEcqi:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFclr='1'THENcqi:=(OTHERS='0');ELSIFclk'EVENTANDclk='1'THENIFen='1'THENIFcqi9THENcqi:=cqi+1;ELSEcqi:=(OTHERS='0');ENDIF;ENDIF;ENDIF;IFcqi=9THENcout='1';ELSEcout='0';ENDIF;cq=cqi;ENDPROCESS;END;量程自动转换数字式频率计的设计-4-在源程序中cout是计数器进位输出;cq[3..0]是计数器的状态输出;clk是时钟输入端;clr是复位控制输入端,当clr=1时,cq[3..0]=0;en是使能控制输入端,当en=1时,计数器计数,当en=0时,计数器保持状态不变。其仿真输出波形如图3.1所示:图3.1:十进制计数器模块仿真输出波形在项目编译仿真成功后,将设计的十进制计数器电路设置成可调用的元件cnt10.bsf,用于以下的4位十进制计数器的顶层设计。(2)、计数器的顶层设计该顶层设计可以用原理图输入的方法完成。在QUartusII中,新建一个原理图编辑窗,从当前的工程目录中调出4片十进制计数器元件cnt10,并按图所示的4位十进制计数器的顶层原理图完成电路连接,如图3.2所示。图3.2:计数模块电路图(3)分频模块的设计根据设计要求,最小一档的周期是10ms,即100Hz。选用10MHz的晶振作为EPM7128的时针,为得到1000Hz的信号需要100分频,可知用2个cnt10级联就可以实现,图3.3是其电路图。图3.3:分频模块电路图量程自动转换数字式频率计的设计-5-2、闸门控制模的设计闸门控制模块主要根据输入的控制时钟脉冲,首先要产生一个锁存信号LOAD,用其上升沿控制锁存器将之前的计数结果存入锁存器中,并由显示模块将其显示出来,设置锁存器是为了让显示稳定,不会因为周期性清零信号使得显示的数值不断闪烁。锁存之后须有一清零信号CLR_CNT将计数器清零,为了下一秒的计数操作做准备。闸门控制模块的VHDL源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTESTCTLISPORT(clk,fin:INSTD_LOGIC;clr_cnt:OUTSTD_LOGIC;tsten:OUTSTD_LOGIC;load:OUTSTD_LOGIC);END;ARCHITECTUREoneOFTESTCTLISSIGNALa:STD_LOGIC;SIGNALcount:STD_LOGIC_VECTOR(1downto0);BEGINPROCESS(clk)BEGINIFclk'EVENTANDclk='1'THENa=nota;ENDIF;ENDPROCESS;PROCESS(fin)BEGINIFfin'EVENTANDfin='1'THENIFa='0'thenIFcount=11thenload='0';clr_cnt='1';ELSEload='1';count=count+1;clr_cnt='0';ENDIF;ELSEcount=00;load='0';clr_cnt='0';ENDIF;ENDIF;ENDPROCESS;tsten=a;END;闸门控制模块的仿真波形如图3.4所示,图中clk是输入的时针信号,tesen是clk的二分频。图中还有fin时针,它的频率要远小于clk,作用是作为一个计数器的时针,当tsten为低电平且计数器值不为3时,load等于1。而当tsten为低电平且计数值为3时,产生一个清零信号CLR_CNT。量程自动转换数字式频率计的设计-6-图3.4.闸门控制模块的波形仿真3、可自动换挡基准时钟模块的设计本设计通过控制基准时钟信号来时现量程的自动转换。如果一个周期为0.1s的信号作为时钟信号通过一个进制计数器,从十进制计数器的进位输出端将会得到一个周期为1s的信号。因此,频率计的三档位可以通过计数器相级联来实现,如图3.5所示:图3.5:可自动换挡基准计时模块图:图中3选1的选择器可以根据十进制计数器模块的溢出情况来作为选择标准。先使可自动变换档的基准计时模块工作在0挡,若被测频率高于0挡的范围。则会使4位十进制计数器模块产生溢出,用这个溢出信号来使自动换挡基准时钟模块工作在一档;同理,如果被测频率还是高出一挡的测量范围,就在自动换为二档。若被测频率任高于二档的测量范围,则输出一报警信号。ENCLK1KO4量程自动转换数字式频率计的设计-7-可自动换挡基准计时模块的VHDL源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux3ISPORT(SEL:INSTD_LOGIC_VECTOR(3DOWNTO0);SOUT:OUTSTD_LOGIC;OVER:OUTSTD_LOGIC;IN0:INSTD_LOGIC;IN1:INSTD_LOGIC;IN2:INSTD_LOGIC;FLAG:OUTSTD_LOGIC_VECTOR(2DOWNTO0));ENDmux3;ARCHITECTUREoneOFmux3ISBEGINPROCESS(IN0,IN1,IN2,SEL)BEGINCASESELISWHEN0000=SOUT=IN0;OVER='0';FLAG=001;WHEN0001=SOUT=IN1;OVER='0';FLAG=010;WHEN0010=SOUT=IN2;OVER='0';FLAG=100;WHENOTHERS=SOUT='0';OVER='1';FLAG=000;ENDCASE;ENDPROCESS;END;图中将所有计数器的清零信号接地,因为清零信号为高电平有效,接地信号一直保持低电平,这样保证计数器不会被清零,一直正常工作。所有计数器的使能端需要一个高电平信号EN使其一直保持正常工作。最后一个计数器并不属于实现基准信号换挡功能的计数器组,它直接为三选一选择器mux3服务,统计来自4位十进制计数器模块的最高位进位信号的个数。Y输出端输出已经调整了的适合于被测频率的基准时钟信号。图3.6是其的波形仿真图。图中SEL是通道选择控制端,当SEL为“0000”是选择IN0,为“0001”时选择IN1,为0010时选择IN2。图中FLAG的作用是输出指示用,用于驱动发光二极管,显示当前频率计的档位。OVER是报警信号,当测量范围溢出时,使报警电路工作。图3.6可自动换挡基准计时模块的仿真波形图量程自动转换数字式频率计的设计-8-3、锁存模块的设计锁存模块的功能是将4个十进制计数器的数据,在LOAD信号有效时(LOAD=1)锁存到寄存器中,其VHDL源程序如图所示:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYREG16ISPORT(DIN0:INSTD_LOGIC_VECTOR(3DOWNTO0);DIN1:INSTD_LOGIC_VECTOR(3DOWNTO0);DIN2:INSTD_LOGIC_VECTOR(3DOWNTO0);DIN3:INSTD_LOGIC_VECTOR(3DOWNTO0);LOAD:INSTD_LOGIC;DOUT0:OUTSTD_LOGIC_VECTOR(3DOWNTO0);DOUT1:OUTSTD_LOGIC_VECTOR(3DOWNTO0);DOUT2:OUTSTD_LOGIC_VECTOR(3DOWNTO0);DOUT3:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDREG16;ARCHITECTUREoneOFREG16ISBE