基于FPGA的数字频率计设计报告_第1页
基于FPGA的数字频率计设计报告_第2页
基于FPGA的数字频率计设计报告_第3页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、 PAGE PAGE 20电子技术综合试验实验报告班级:测控一班学号:2907101002姓名:李大帅 指导老师:李颖基于 FPGA 的数字频率计设计报告一、 系统整体设计设计要求:1、被测输入信号:方波2、测试频率范围为:10Hz100MHz3、量程分为三档:第一档:闸门时间为1S 999.999KHz0.1S 9999.99KHz0.01S 99999.9KHz。4、显示工作方式:aBCD 七段数码管显示读数。b、采用记忆显示方法c、实现对高位无意义零的消隐。系统设计原理:所谓“频率1 )T 得某周期性信号的重复变化次数为N,则该信号的频率可表达为:f = N / T .基于这一原理我们可

2、以使用单位时间内对被测信号进行计数的方法求得对该信号的频率测量,具体 实现过程简述如下: 首先,将被测信号(方波)加到闸门的输入端。由一个高稳定的石英振荡器和一系(或频率基准)信号去控制门控电路形成门控信 号,门控信号的作用时间T 是非常准确的(由石英振荡器决定)。门控信号控制闸门的开与闭,只有在闸门开通的时间内,方波脉冲才能通过闸门成为被计数的脉冲由计数器计数。T1S,加到闸门的门控信号作用时间T 1S,即闸门的开通时间“1S。在这一段时间内,若计数器计得N=100000 个数,根据公式f = N / T100000Hz。如果计数式频率计的显示器单位为“KHz”,则显示 100.000KHz

3、,即小数点定位在第三位。不难设想,若将闸门时间设为 T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间T 的改变也随之自动往右移动一位(自动定位),那么,显示的结果为 100.00Khz。在计数式数字频率计中,通过选择不同的闸门时间,可以改变频率计的测量范围和测量精度。系统单元模块划分:1HZ,10HZ,100HZ 脉冲和 1KHZ 的用于七段显示数码管扫描显示的扫描信号。闸门选择器,用于选择不同的闸门时间以及产生后续的小数点的显示位置。门控电路,产生用于计数的使能控制信号,清零信号以及锁存器锁存信号。计数器,用于对输入的待测信号进行脉冲计数,计数输出。锁存器,用于对计数

4、器输出数据的锁存,便于后续译码显示电路的对数据进行记忆显示,同时避免计数器清零信号对数据产生影响。译码显示,用于产生使七段显示数码管的扫描数字显示,小数点显示的输出信号,同时对高位的无意义零进行消隐。二、 单元电路设计1:该电路将产生四个不同频率的信号输出,因为电路板上给出了一个 48MHZ 的晶振,所以我们只需要对48MHZ 48MHZ,1HZ,10HZ100HZ,1KHZlibraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityfenpi

5、nqiisPort ( clk : in STD_LOGIC; clkout1 : out STD_LOGIC; clkout10 : out STD_LOGIC;clkout100:out STD_LOGIC;clkout1K:outSTD_LOGIC);endfenpinqi;architecture Behavioral of fenpinqi is signalcnt1:integerrange1to24000000;signalcnt10:integerrange1to2400000;signalcnt100:integerrange1to240000;signalcnt1K:int

6、egerrange1to24000;signalc1:std_logic;beginprocess(clk)isbeginifclkeventandclk=1thenifcnt124000000then-对cnt1进行计数,当cnt1未计满后对其进行加1 cnt1=cnt1+1;elsifcnt1=24000000thenc1=notc1;-由于48MHZ的的信号,前一半的时候c1为0,则后一半是为1,就完成了对信号进行分频,产生了1HZ的信号cnt1=1;endif;endif;endprocess;process(clk)isbeginifclkeventandclk=1then-方法同上

7、ifcnt102400000thencnt10=cnt10+1;thenc2=notc2;cnt10=1;endif;endif;endprocess;process(clk)isbeginifclkeventandclk=1then-方法同上ifcnt100240000thencnt100=cnt100+1;thenc3=not c3; cnt100=1;endif;endif;endprocess;process(clk)isbeginifclkeventandclk=1then-方法同上ifcnt1K24000000thencnt1K=cnt1K+1;elsifcnt1=24000the

8、nc4=not c4; cnt1K=1;endif;end process; clkout1=c1; clkout10=c2;clkout100=c3;clkout1Kclk,clkout1 = clkout1, clkout10 = clkout10, clkout100 = clkout100,clkout1K=clkout1K);BEGINclk=0;waitfor10ps;clk=1;waitfor10ps;ENDPROCESS;END;对该模块进行仿真结果如下:有上图可知分频器工作正常,产生的个信号也没有毛刺,结果十分理想。2、闸门选择器:在这个模块中我们有四个输出端和六个输入端,其

9、中四个输出端中有一个是频率输出端,是通过三个闸门 选择开关输入和三个输入频率决定的,另外三个输出端则是用来后面的小数点控制的,而六个输入端中的三个 1HZ,10HZ 和 100HZ,另外三个是电路板上的拨动开关,用来选择闸门,控制输出。其原程序和分析如下:libraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitySELEisPort(SE1:in STD_LOGIC;SE10:in STD_LOGIC;SE100:in STD_LOGIC;F

10、1HZ:INSTD_LOGIC;F10HZ:INSTD_LOGIC;F100HZ:INSTD_LOGIC;FREF:out STD_LOGIC;DP1:out STD_LOGIC;DP2:out STD_LOGIC;DP3:out STD_LOGIC);endSELE;architectureBehavioralofSELEisbeginPROCESS(SE1,SE10,SE100) ISBEGINIFSE1=1ANDSE10=0ANDSE100=0THENFREF=F1HZ;-当闸门控制在第一档的时候,令输出端输出1HZ输入端的输入,小数点控制dp1有效,dp2,dp3无效DP1=0;DP2

11、=1;DP3=1;ENDIF;IFSE1=0ANDSE10=1ANDSE100=0THENFREF=F10HZ;-第二档,输出为10HZ,dp2有效DP1=1;DP2=0;DP3=1;ENDIF;IFSE1=0ANDSE10=0ANDSE100=1THENFREF=F100HZ;-第三档,输出为100HZ,dp3有效DP1=1;DP2=1;DP3 SE1, SE10 = SE10, SE100 = SE100,F1HZ=F1HZ,F10HZ = F10HZ, F100HZ = F100HZ,FREF=FREF,DP1 = DP1, DP2 = DP2, DP3);BEGINF1HZ=0;FRE

12、F=0;waitfor100ns;F1HZ=1;FREF=1;WAITFOR100NS;ENDPROCESS;END;仿真结果如图:有仿真结果可知闸门选择器工作正常,能够准确输出我们所需的信号。3、门控信号:在此模块中有一个输入端和两个输出端,输入端为上面的闸门选择器输出的频率,两个输出端分别为计数器是能控制信号(锁存器控制信号,和计数器清零信号。具体源程序即分析如下:libraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityCONTROLS

13、isPort(FREF:in STD_LOGIC;GAT:out STD_LOGIC;CLR:out STD_LOGIC);endCONTROLS;architectureBehavioralofCONTROLSisSIGNALG1:STD_LOGIC:=0;beginBEGINIFFREFEVENTANDFREF=1THENG1=NOT G1; -该过程对时钟信号又一次进行分频,产生出半个周期时间为1的控制信号,作为计数使能,保证了时间的准确性ENDIF;ENDPROCESS;PROCESS(FREF,G1) ISBEGINIFFREF=0ANDG1=0THENCLR=1; -该过程产生清零

14、信号,即当使能信号为无效0同时时钟为0时,即在技术始终无效半个时钟时间后,对计数器清零ENDIF;ENDPROCESS;-清零信号高电平有效GATFREF,CLR=CLR);BEGINFREF=0;100NS;FREF=1;WAITFOR100NS;ENDPROCESS;END;对上面的文件进行仿真,结果如下:由上图的仿真结果可知,控制电路工作正常,输出信号稳定,很理想。同时我们也可以看出来该模块对分 频器的时钟输出的稳定性依赖十分严重,一旦分频器输出时钟有毛刺,该控制信号将会完全的无效,这也是为 什么我知道上面的分频器设计不是最优的方案,却还是采用了上述方法的原因。4、计数器:该模块实现的功

15、能是对输入信号脉冲的计数,并正确的输出结果和溢出。使用上面的门控信号产生的 gat 信号控制计数器的使能端,以实现计数器的定时计数。该模块是使用六个十进制计数器同步并联而成的,首先 我们设计用于并联的十进制计数器,原程序如下:libraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityCNT10isPort ( CLK : in STD_LOGIC;CLR : in STD_LOGIC; ENA:in STD_LOGIC;CQ : out ST

16、D_LOGIC_VECTOR (3 downto 0);CO:out STD_LOGIC);endCNT10;architectureBehavioralofCNT10isSIGNALCQI:STD_LOGIC_VECTOR(3DOWNTO0):=0000;-定义中间信号CQI,用于数据输出的循环计数beginPROCESS(CLK,CLR)ISBEGINIFCLR=1THENCQI=0000;-当CLR清零信号有效时使输出为0000,无效时进行下述操作ELSIFCLKEVENTANDCLK=1THEN-对时钟进行计数IFENA=1THEN-判断使能信号,有效则进行计数,否则不作处理IFCQI

17、=1001THENCQI=0000;ELSECQI=CQI+1;ENDIF;ENDIF;ENDIF;ENDPROCESS;CO=1whenena=1andcqi=9else0;-数据09循环,计满后重新回到0-进位信号,最高位的仅为信号作为计数的溢出信号CQ CLK, CLR = CLR, ENA=ENA,CQ = CQ,CO=CO);tb:PROCESSBEGINCLK=0;waitfor100ns;CLK=1;WAITFOR100NS;ENDPROCESS;END;仿真结果如图:如仿真结果我们可以看出,该模块运行正常,计数稳定,结果十分理想。5、锁存器: 存器和一个一位锁存器。锁存器使用下

18、降沿锁存,即当计数器的使能信号变为无效的一瞬间我们令锁存器将数 据锁存。四位锁存器的原代码如下:libraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityLATCH4isPort(CLK:in STD_LOGIC;DIN : in STD_LOGIC_VECTOR (3 downto 0); QOU:out STD_LOGIC_VECTOR(3downto0);endLATCH4;architectureBehavioralofLATCH4i

19、sbeginPROCESS(CLK,DIN) ISBEGINIFCLKEVENTANDCLK=0THEN-当时钟信号下降沿时,实现锁存QOU=DIN;ENDIF;ENDPROCESS;endBehavioral;上述文件编写完成后保存编译生成图形文件符号如图: 再编写一位锁存器,源程序代码如下:libraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityLATCH1isPort(CLK:in STD_LOGIC;DIN:in STD_LOGIC

20、_VECTOR;QOU:out STD_LOGIC_VECTOR);endLATCH1;architectureBehavioralofLATCH1isbeginPROCESS(CLK,DIN) ISBEGINIFCLKEVENTANDCLK=0THEN-当时钟信号下降沿时,实现锁存QOU=DIN;ENDIF;ENDPROCESS;endBehavioral;文件编写完成后保存编译生成图形文件符号,如图:锁存完成后有六组四位二进制数和一个一位二进制数,所以我们队总线进行了合并,即将六组四位数合并 成一个二十四位数,合并程序如下:libraryIEEE;use IEEE.STD_LOGIC_11

21、64.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityADVOCATESisPort ( S0 : in STD_LOGIC_VECTOR (3 downto 0);S1 : in STD_LOGIC_VECTOR (3 downto 0);S2 : in STD_LOGIC_VECTOR (3 downto 0);S3 : in STD_LOGIC_VECTOR (3 downto 0);S4 : in STD_LOGIC_VECTOR (3 downto 0);S5:in STD_LOGIC_VEC

22、TOR(3downto0);S6 : out STD_LOGIC_VECTOR (23 downto 0);endADVOCATES;architectureBehavioralofADVOCATESisbeginDOWNTO20)=S0;DOWNTO16)=S1;DOWNTO12)=S2;S6(11 DOWNTO 8)=S3;S6(7 DOWNTO 4)=S4; S6(3DOWNTO0)=S5;-将总线的对应位进行连接endBehavioral;文件编写完成后保存编译生成图形文件符号,如图:创建该模块的顶层图形文件LAT.sch 将上述个文件按照如图所示连接,保存编译生成图形文件符号如图:该

23、模块的输入输出简单,无需仿真。6、译码显示:该模块实现的是对锁存器锁存的数据进行处理并显示输出,以及小数点的不同闸门的输出显示,以及电路板上七段显示译码管的扫描信号输出。其中对锁存数据的处理包括溢出有效时的数据消除,和对高位 无意义零的自动消隐。首先我们编写小数点控制的源文件代码:libraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityPOINTCONisPort(SE1:in STD_LOGIC;SE10:in STD_LOGIC;SE1

24、00:in STD_LOGIC;SEL:in STD_LOGIC_VECTOR(2downto0);DP:out STD_LOGIC);endPOINTCON;architectureBehavioralofPOINTCONisbeginPROCESS(SE1,SE10,SE100,SEL) ISBEGINIFSE1=1ANDSE10=0ANDSE100=0ANDSEL=011THENDP=0;-当为第一档时,令第四位的数码管的小数点点亮,其他的不亮ELSIFSE1=0ANDSE10=1ANDSE100=0ANDSEL=010THENDP=0;-第二档时,第三位的数码管小数点点亮ELSIFSE

25、1=0ANDSE10=0ANDSE100=1ANDSEL=001THENDP=0;-第三档时,第二位的小数点点亮ENDIF;ENDPROCESS;-不符合上述三档时,小数点全部消隐endBehavioral;编写完成后保存编译生成图形文件符号如图:再编写用于数码管扫描显示的的位选信号生成文件,其代码如下:libraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityCTRLSisPort(CLK:in STD_LOGIC;SEL:out STD_

26、LOGIC_VECTOR(2downto0);endCTRLS;architectureBehavioralofCTRLSisSIGNALCNT:STD_LOGIC_VECTOR(2DOWNTO0):=000;begin BEGINIFCLKEVENTANDCLK=1THEN-接入1KHZ的时钟信号,使CNT进行循环计数,从000到101 IFCNT=”101” THENCNT=”000”;-计满则清零,不满则加一ENDIF;ENDIF;ENDPROCESS;SEL=CNT;-将CNT信号赋给SEL输出endBehavioral;文件编写完成后保存编译生成图形文件符号如图:再编写使高位无意义零

27、自动消隐功能的的文件,源程序代码如下:libraryIEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityDSELEisPort(DP1:INSTD_LOGIC;DP2:INSTD_LOGIC;DIN:in STD_LOGIC_VECTOR(23downto0);QOU:out STD_LOGIC_VECTOR(23downto0);endDSELE;architectureBehavioralofDSELEisbeginPROCESS(DP1,DP2

28、,DIN) ISBEGINIFDP1=0ANDDP2=1THENIFDIN(23DOWNTO20)=0000THENQOU(23DOWNTO20)=1111;QOU(19DOWNTO0)=DIN(19DOWNTO0);ENDIF;IFDIN(23DOWNTO20)=0000ANDDIN(19DOWNTO16)=0000THENQOU(23DOWNTO20)=1111;QOU(19DOWNTO16)=1111;QOU(15DOWNTO0)=DIN(15DOWNTO0);ENDIF;ENDIF;IFDP1=1ANDDP2=0THENIFDIN(23DOWNTO20)=0000THENQOU(23D

29、OWNTO20)=1111;QOU(19DOWNTO0)=DIN(19DOWNTO0);ENDIF;IFDIN(23DOWNTO20)=0000ANDDIN(19DOWNTO16)=0000THENQOU(23DOWNTO20)=1111;QOU(19DOWNTO16)=1111;QOU(15DOWNTO0)=DIN(15DOWNTO0);ENDIF;IFDIN(23DOWNTO20)=0000ANDDIN(19DOWNTO16)=0000ANDDIN(15DOWNTO12)=0000THENQOU(23DOWNTO20)=1111;QOU(19DOWNTO16)=1111;QOU(15DOW

30、NTO12)=1111;QOU(11DOWNTO0)=DIN(11DOWNTO0);ENDIF;ENDIF;IFDP1=1ANDDP2=1THENIFDIN(23DOWNTO20)=0000THENQOU(23DOWNTO20)=1111;QOU(19DOWNTO0)=DIN(19DOWNTO0);ENDIF;IFDIN(23DOWNTO20)=0000ANDDIN(19DOWNTO16)=0000THENQOU(23DOWNTO20)=1111;QOU(19DOWNTO16)=1111;QOU(15DOWNTO0)=DIN(15DOWNTO0);ENDIF;IFDIN(23DOWNTO20)

31、=0000ANDDIN(19DOWNTO16)=0000ANDDIN(15DOWNTO12)=0000THENQOU(23DOWNTO20)=1111;QOU(19DOWNTO16)=1111;QOU(15DOWNTO12)=1111;QOU(11DOWNTO0)=DIN(11DOWNTO0);ENDIF;IFDIN(23DOWNTO20)=0000ANDDIN(19DOWNTO16)=0000ANDDIN(15DOWNTO12)=0000ANDDIN(11DOWNTO8)=0000THENQOU(23DOWNTO20)=1111;QOU(19DOWNTO16)=1111;QOU(15DOWNTO12)=1111;QOU(11DOWNTO8)=1111;QOU(7DOWNTO0)DATADATADATADATASEGSEGSEGSEGSEGSEGSEGSEGSEGSEGSEG=1111111;ENDCASE;ifOVERIN=1THEN-判断溢出,若溢出则令输出全部不显示SEG CLK,=SEL);BEGINCLK=0;100NS;CLK=1;100NS;ENDPROCESS;END;结果如下:有仿真结果我

温馨提示

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

评论

0/150

提交评论