《EDA课程设计报告--基于FPGA的数字频率计的设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告--基于FPGA的数字频率计的设计.docx(15页珍藏版)》请在优知文库上搜索。
1、EDA课程设计报告题目:基于FPGA的数字频率计的设计基于FPGA数字频率计的设计任务书1 .设计任务与要求设计一个基于FPGA数字频率计,要认真并准确地理解有关要求,完成系统设计。设计要求:(1)频率测量:频率IOHZ9999Hz方波信号;(2)周期测量:频率IoHZ9999Hz方波信号;(3)四位数码管显示频率、周期;(4)能产生频率IKHZ的方波信号,进行频率计自校;(5)对两种不同的测量用两种发光LED指示;2 .设计内容(1)设计VHDL代码源文件;(2)编译综合;(3)下载程序,片上测试;3 .编写设计报告写出设计的全过程,附上有关资料和程序,有心得体会。题目:基于FPGA数字频率
2、计一、设计目的完成一个基于FPGA数字频率计,要完成以下任务。(D频率测量:频率IoHZ9999Hz方波信号;(2)周期测量:频率IoHZ9999Hz方波信号;(3)四位数码管显示频率、周期;(4)能产生频率IKHZ的方波信号,进行频率计自校;(5)对两种不同的测量用两种发光LED指示;二、设计方案1 .总体设计方案频率计数显示模块系统功能描述:(数字频率基本功能是基于FPGA测试一10-9999HZ的方波信号,并在四位八段数码管上显示,包括分频模块、周期测量模块、频率测量模块、显示模块)2 .分频模块设计将一个50MHZ的标准信号每个周期进行一次计数,计到50000再从0计数,然后在计数器的
3、前25000时间内将IKHz的信号置高电平,25000-50000内的IKHZ信号置低电平,从而产生一个IKHZ的内部信号。将产生的IKHZ信号每个周期进行一次计数,计到1()00再从0开始计数,然后在计数器的前500时间内将IHZ信号置高电平,500TOOO时间内内江IHZ信号置低电平,从而产生一个IHZ频率的闸门信号。3 .显示模块设计定义一个integer类型信号BIS,范围为0-3,用这个信号来进行位选,在IKHZ的信号中,每经过一次周期变换就将BIS加1,超过3则回0,用来做四位数码管的动态扫描。检测输入按键(输入端口),当为低电平时则表示显示频率,将对应的LED灯端口置高电平,表示
4、周期的LED置低电平。将位选信号BIS放入CASE语句,当其为0时表示第一位显示,将位选端口置为“0111”,并将频率的千位传入显示数据;为1时表示第二位显示,将位选端口置为“1011”,并将频率的百位传入显示数据;为2时表示第三位显示,将位选端口置为“1101”,并将频率的十位传入显示数据;为3时表示第四位显示,将位选端口置为“1110”,并将频率的个位传入显示数据。位选端为STD_L0GIC_VECT0R(3DOWNTO0)类型。如果检测到输入按键为低电平时,表示显示周期,将对应的LED灯端口置高电平,表示频率的LED置低电平。将位选信号BlS放入CASE语句,当其为0时表示第一位显示,将
5、位选端口置为“0111”,并将周期的千位传入显示数据;为1时表示第二位显示,将位选端口置为“1011”,并将周期的百位传入显示数据;为2时表示第三位显示,将位选端口置为“1101”,并将周期的十位传入显示数据;为3时表示第四位显示,将位选端口置为“1110”,并将周期的个位传入显示数据。另起一个进程,将上面位选时传入的数据放入CaSe语句,将其对应数据的段码放入段选端口,我们所用的电路板数码管为共阳极点亮,故点亮的段应用低电平。求整数(data)的个、十、百、千位的方法:个位-datamod10;十位=data/10mod10;百位=data/100mod10;千位=data/1000;4 .
6、频率测量模块设计将分频模块中生成的IHZ信号作为闸门信号,当闸门信号为高电平时,测量待测信号在高电平期间跳的数量,当闸门信号为低电平时将测量数据传入输出模块,并将计数器清零,该传出的数据为半秒内跳沿次数,一个周期有一个上升沿和一个下降沿,固该值即为待测信号的频率值。5 .周期测量模块设计将标准输入的50MHZ信号进行500被分频,设计一个100KHZ的信号,将待测信号作为闸门,测量在其高电平期间的100KHZ信号跳沿次数,当待测信号为低电平时,将该数据传出,并将计数器清零,该测量值即为输入信号的周期值,单位为IooKHZ信号的周期,为IoUSo三、验证方案E Flnnn_n_口 n Lrlrl
7、_n_n LLnn_ n n n ri仿真结果MditaTmeBa:18.9rePorterGEM 1-r4%97m Slat Er.:-锄中”理般墨必至黑_ .sw重:._刖型F暨匹j 18.9LTj i_i lj lj lj u lj lj U-LJLJLJLJLJLJLJLJLJLJlLJUl_iLjljljljljljljlJJLJLj i_76543210 3 2 ,JDP 85!M然!M L 日E四、结论及讨论完成所有模块代码编写后我进行了整合编译,交由负责管脚分配的同学进行分配管脚仿真后下载到开发板,连接到自己设置的IKHZ校准信号和一个3KHZ的自定义信号上,分别拨动显示选择控
8、制开关,显示正确、清晰,符合开始时的要求。将开发板的输入管脚,接到波形发生器上,开发板能正确显示发生器的给定频率及其周期,但当频率小于20HZ是开始出现数据显示不稳定情况,原因是未分高低频测量,而是笼统的一个一秒闸门测量,低频数据不稳定。当频率超过100OOHZ时会出现显示不确定的值,原因在于代码里未处理频率超界的情况,故在代码中加上了一个蜂鸣器端口,当频率超过IooooHZ的测量限度时蜂鸣器置高电平报警,提示使用者该值非正确值。IlHZ信号频率测量500HZ信号频率测量I(MM)HZ自校信号频率测量五、课程设计的心得与体会通过对数字频率计的设计实现,我深入的学习了QUartUSH软件的使用,
9、VHDL语言的编写规范,语法结构等。在本次试验中我回顾了在数字电路以及数字电路EDA设计与使用课程中学过的关于数字电路的设计的内容,加深了对硬件与软件联系的映像,对其他的软件编程甚至单片机的原理与应用也有很大的提升。这个课程设计也让我懂得,理论知识真的很重要,而实践能够加深对理论知识的理解,将理论和实践结合起来,才能设计出优秀的作品。在这个课程设计过程中,我不只是完成一个设计,更重要的是在这一过程中所体会和学到的一些非知识技能层面的东西一一细心、坚持、不断学习,我相信这会是一次难得的经历。参考文献11聂小燕.数字电路EDA设计与应用.北京:人民邮电出版社,2010附录VHDL源代码1.IBRA
10、RYIEEE;USEIEEE.STLLoGICJl64.ALL;USEIEEE.STD_L0GICONSIGNED.ALL;ENTITYCYMOMETERISPORT(CLK_CA:INSTLLoGIC;50MHZ信号CLK_CO:INSTLLOGlC;一待测信号CLK_UT:OUTSnLLoGIC;一自定义信号KEY:INSTLLOGIC;一周期/频率转换CLK.CAL:OUTSTLLOGlC;一校准信号1.EDH:OUTSTiLLoGlC频率显示LED指示1.EDT:OUTSTD_LOGIC;一周期显示LED指示WARG:OUTSTD_LOGIC;一频率超过渊范围警铃示警RST:INSTD
11、_LOGIC;DATAOUT:OUTSTiLLOGlCVECTOR(7DOffNTO0);一数码段选信号EN:OUTSTD_L0GIC_VECT0R(3DOWNTO0;一数码管位选信号ENDCYMOMETER;ARCHITECTUREBEHAVOFCYMOMETERISSIGNALDATAOT.XHDL:STD_L0GIC_VECT0R(7DOWNTO0);一数码管段选内部信号SIGNALEN_XHDL:STD_LOGIC.VECTOR(3DOWNTO0);一数码管位选内部信号SIGNALCLK_KH,CLK_H:STD_LOGIC;-1KHZ和IHZ内部信号SIGNALCK_SIM,WARB
12、:STlLLO6IC;一自定义内部信号,警铃内部信号SIGNALBIS:INTEGERRANQE0TO4:=0;一数码管位选标识SIGNALCO.COUNT,T.COUNT,HZ-COUNT:INTEGERRANGE0TO20000:=0;一频率计数,周期计数SIGNALCO_BUF:INTEGERRANGE0TO20000:=0;一频率计数缓冲区SIQHALCA,COUNT,A:INTEGERRANGE0TO50000:=0;50MHZ内部计数,自定义信号产生计数器SIGNALdataINTEGERRANGE0TO9;一显示数据传输SIGNALLED1,LED2:STLLoGlCLED标识内
13、部信号SIGNALCloOK_COUNT:INTEGERRANGE0TO500;IoOKHZ信号计数器BEGINDATAOUT=DATAOUT_XHDL;将内部LED段选侑号关联到输出信号EN=DLXHDL;一将内部LED位选信号关联到泊出位选1.EDT=LED1;一将内部LED指示信号关联到输出LED指示1.EDH=LED2;CLK-UT=CK_SI;一将内部自定义信号关联到输出CLK.CAL=CUJKH;一将内部IKHZ信号关联到输出校准WARG=,ARB;一将内部警铃信号关联到外部P1:PROCESS(CLK-CA)一进程P1,将50MHZ值号进行计数BEGINIF(CLKmEVENTA
14、NDCLK_CA=,)THENIF(CA_COUNT50000)THENCA_COUNT=CA_COUNT+1;ELSECA_COUNT=0;ENDIF;ENDIF;ENDPROCESSP1P2:PRocESS(CLK_CA)一进程P2,将50MHZ信号进行计数,用于产生自定义信号BEGINIF(CLK_CAEVENTANDCLK_CA=,)THENIF(A50000)THENA=A+1;ELSEA=0;ENDIF;ENDIF;ENDPROCESSP2;P3:PRocESS(CLK_CA)T3通过计数器A,产生自定义信号,此处为3KHZBEGINIF(CLK_CAEVENTANDCLK_CA=)THENIFCA10000)THENCK_SIM100)AND(A20000)THENCK.SIM200)AND(A300)THENCK.SIM30000)AND(A40000)THENCK_SIM40000)AND(A45000)THENCK_SIM=;ELSECK.SIII=,0,;ENDIF;ENDIF;ENDPROCESSP3;P4:PROcESS(CA_C0UNT)一进程P4,通过计数器CA_COUHT,产生IKHZ侑号CLKj(HBEGINIF(CLK_CAEVENTANDCLK_CA=,)THENIF