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

下载本文档

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

文档简介

PAGEPAGE9EDA课程设计报告题目:基于FPGA的数字频率计的设计基于FPGA数字频率计的设计任务书1.设计任务与要求设计一个基于FPGA数字频率计,要认真并准确地理解有关要求,完成系统设计。设计要求:(1)频率测量:频率10Hz~9999Hz方波信号;(2)周期测量:频率10Hz~9999Hz方波信号;(3)四位数码管显示频率、周期;(4)能产生频率1KHz的方波信号,进行频率计自校;(5)对两种不同的测量用两种发光LED指示;2.设计内容(1)设计VHDL代码源文件;(2)编译综合;(3)下载程序,片上测试;3.编写设计报告写出设计的全过程,附上有关资料和程序,有心得体会。题目:基于FPGA数字频率计一、设计目的完成一个基于FPGA数字频率计,要完成以下任务。(1)频率测量:频率10Hz~9999Hz方波信号;(2)周期测量:频率10Hz~9999Hz方波信号;(3)四位数码管显示频率、周期;(4)能产生频率1KHz的方波信号,进行频率计自校;(5)对两种不同的测量用两种发光LED指示;二、设计方案1.总体设计方案系统功能描述:(数字频率基本功能是基于FPGA测试一10-9999HZ的方波信号,并在四位八段数码管上显示,包括分频模块、周期测量模块、频率测量模块、显示模块)2.分频模块设计将一个50MHZ的标准信号每个周期进行一次计数,计到50000再从0计数,然后在计数器的前25000时间内将1KHz的信号置高电平,25000-50000内的1KHZ信号置低电平,从而产生一个1KHZ的内部信号。将产生的1KHZ信号每个周期进行一次计数,计到1000再从0开始计数,然后在计数器的前500时间内将1HZ信号置高电平,500-1000时间内内江1HZ信号置低电平,从而产生一个1HZ频率的闸门信号。3.显示模块设计定义一个integer类型信号BIS,范围为0-3,用这个信号来进行位选,在1KHZ的信号中,每经过一次周期变换就将BIS加1,超过3则回0,用来做四位数码管的动态扫描。检测输入按键(输入端口),当为低电平时则表示显示频率,将对应的LED灯端口置高电平,表示周期的LED置低电平。将位选信号BIS放入CASE语句,当其为0时表示第一位显示,将位选端口置为”0111”,并将频率的千位传入显示数据;为1时表示第二位显示,将位选端口置为”1011”,并将频率的百位传入显示数据;为2时表示第三位显示,将位选端口置为”1101”,并将频率的十位传入显示数据;为3时表示第四位显示,将位选端口置为”1110”,并将频率的个位传入显示数据。位选端口为STD_LOGIC_VECTOR(3DOWNTO0))类型。如果检测到输入按键为低电平时,表示显示周期,将对应的LED灯端口置高电平,表示频率的LED置低电平。将位选信号BIS放入CASE语句,当其为0时表示第一位显示,将位选端口置为”0111”,并将周期的千位传入显示数据;为1时表示第二位显示,将位选端口置为”1011”,并将周期的百位传入显示数据;为2时表示第三位显示,将位选端口置为”1101”,并将周期的十位传入显示数据;为3时表示第四位显示,将位选端口置为”1110”,并将周期的个位传入显示数据。另起一个进程,将上面位选时传入的数据放入case语句,将其对应数据的段码放入段选端口,我们所用的电路板数码管为共阳极点亮,故点亮的段应用低电平。求整数(data)的个、十、百、千位的方法:个位=datamod10;十位=data/10mod10;百位=data/100mod10;千位=data/1000;4.频率测量模块设计将分频模块中生成的1HZ信号作为闸门信号,当闸门信号为高电平时,测量待测信号在高电平期间跳的数量,当闸门信号为低电平时将测量数据传入输出模块,并将计数器清零,该传出的数据为半秒内跳沿次数,一个周期有一个上升沿和一个下降沿,固该值即为待测信号的频率值。4.周期测量模块设计将标准输入的50MHZ信号进行500被分频,设计一个100KHZ的信号,将待测信号作为闸门,测量在其高电平期间的100KHZ信号跳沿次数,当待测信号为低电平时,将该数据传出,并将计数器清零,该测量值即为输入信号的周期值,单位为100KHZ信号的周期,为10us。三、验证方案仿真结果:四、结论及讨论完成所有模块代码编写后我进行了整合编译,交由负责管脚分配的同学进行分配管脚仿真后下载到开发板,连接到自己设置的1KHZ校准信号和一个3KHZ的自定义信号上,分别拨动显示选择控制开关,显示正确、清晰,符合开始时的要求。将开发板的输入管脚,接到波形发生器上,开发板能正确显示发生器的给定频率及其周期,但当频率小于20HZ是开始出现数据显示不稳定情况,原因是未分高低频测量,而是笼统的一个一秒闸门测量,低频数据不稳定。当频率超过10000HZ时会出现显示不确定的值,原因在于代码里未处理频率超界的情况,故在代码中加上了一个蜂鸣器端口,当频率超过10000HZ的测量限度时蜂鸣器置高电平报警,提示使用者该值非正确值。11HZ信号频率测量500HZ信号频率测量1000HZ自校信号频率测量

五、课程设计的心得与体会通过对数字频率计的设计实现,我深入的学习了QuartusII软件的使用,VHDL语言的编写规范,语法结构等。在本次试验中我回顾了在《数字电路》以及《数字电路EDA设计与使用》课程中学过的关于数字电路的设计的内容,加深了对硬件与软件联系的映像,对其他的软件编程甚至单片机的原理与应用也有很大的提升。这个课程设计也让我懂得,理论知识真的很重要,而实践能够加深对理论知识的理解,将理论和实践结合起来,才能设计出优秀的作品。在这个课程设计过程中,我不只是完成一个设计,更重要的是在这一过程中所体会和学到的一些非知识技能层面的东西——细心、坚持、不断学习,我相信这会是一次难得的经历。参考文献[1]聂小燕.数字电路EDA设计与应用.北京:人民邮电出版社,2010

附录VHDL源代码LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCYMOMETERIS PORT( CLK_CA :INSTD_LOGIC;--50MHZ信号 CLK_CO :INSTD_LOGIC;--待测信号 CLK_UT:OUTSTD_LOGIC;--自定义信号 KEY :INSTD_LOGIC;--周期/频率转换 CLK_CAL:OUTSTD_LOGIC;--校准信号 LEDH :OUTSTD_LOGIC;--频率显示LED指示 LEDT :OUTSTD_LOGIC;--周期显示LED指示 WARG :OUTSTD_LOGIC;--频率超过测量范围警铃示警-- RST :INSTD_LOGIC; DATAOUT :OUTSTD_LOGIC_VECTOR(7DOWNTO0);--数码段选信号 EN :OUTSTD_LOGIC_VECTOR(3DOWNTO0));--数码管位选信号ENDCYMOMETER;ARCHITECTUREBEHAVOFCYMOMETERISSIGNAL DATAOUT_XHDL:STD_LOGIC_VECTOR(7DOWNTO0);--数码管段选内部信号SIGNAL EN_XHDL:STD_LOGIC_VECTOR(3DOWNTO0);--数码管位选内部信号SIGNAL CLK_KH,CLK_H:STD_LOGIC;--1KHZ和1HZ内部信号SIGNAL CK_SIM,WARB:STD_LOGIC;--自定义内部信号,警铃内部信号SIGNAL BIS:INTEGERRANGE0TO4:=0;--数码管位选标识SIGNAL CO_COUNT,T_COUNT,HZ_COUNT:INTEGERRANGE0TO20000:=0;--频率计数,周期计数SIGNAL CO_BUF:INTEGERRANGE0TO20000:=0;--频率计数缓冲区SIGNAL CA_COUNT,A:INTEGERRANGE0TO50000:=0;--50MHZ内部计数,自定义信号产生计数器SIGNAL data:INTEGERRANGE0TO9;--显示数据传输SIGNAL LED1,LED2:STD_LOGIC;--LED标识内部信号SIGNAL C100K_COUNT:INTEGERRANGE0TO500;--100KHZ信号计数器BEGIN DATAOUT<=DATAOUT_XHDL;--将内部LED段选信号关联到输出信号 EN <=EN_XHDL;--将内部LED位选信号关联到输出位选 LEDT<=LED1;--将内部LED指示信号关联到输出LED指示 LEDH<=LED2; CLK_UT<=CK_SIM;--将内部自定义信号关联到输出 CLK_CAL<=CLK_KH;--将内部1KHZ信号关联到输出校准 WARG<=WARB;--将内部警铃信号关联到外部 P1:PROCESS(CLK_CA)--进程P1,将50MHZ信号进行计数 BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(CA_COUNT<50000)THEN CA_COUNT<=CA_COUNT+1; ELSE CA_COUNT<=0; ENDIF; ENDIF; ENDPROCESSP1; P2:PROCESS(CLK_CA)--进程P2,将50MHZ信号进行计数,用于产生自定义信号 BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(A<50000)THEN A<=A+1; ELSE A<=0; ENDIF; ENDIF; ENDPROCESSP2; P3:PROCESS(CLK_CA)--P3通过计数器A,产生自定义信号,此处为3KHZ BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(A<10000)THEN CK_SIM<='1'; ELSIF((A>10000)AND(A<20000))THEN CK_SIM<='0'; ELSIF((A>20000)AND(A<30000))THEN CK_SIM<='1'; ELSIF((A>30000)AND(A<40000))THEN CK_SIM<='0'; ELSIF((A>40000)AND(A<45000))THEN CK_SIM<='1'; ELSE CK_SIM<='0'; ENDIF; ENDIF; ENDPROCESSP3; P4:PROCESS(CA_COUNT)--进程P4,通过计数器CA_COUNT,产生1KHZ信号CLK_KH BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(CA_COUNT<24999)THEN CLK_KH<='1'; ELSE CLK_KH<='0'; ENDIF; ENDIF; ENDPROCESSP4; P5:PROCESS(CLK_KH)--进程P5,对1KHZ信号进行计数 BEGIN IF(CLK_KH'EVENTANDCLK_KH='1')THEN IF(HZ_COUNT<1000)THEN HZ_COUNT<=HZ_COUNT+1; ELSE HZ_COUNT<=0; ENDIF; ENDIF; ENDPROCESSP5; P6:PROCESS(CLK_KH)--进程P6,通过计数器HZ_COUNT,产生1HZ信号 BEGIN IF(CLK_KH'EVENTANDCLK_KH='1')THEN IF(HZ_COUNT<500)THEN CLK_H<='1'; ELSE CLK_H<='0'; ENDIF; ENDIF; ENDPROCESSP6; P7:PROCESS(CLK_H,CLK_CO)--进程P7,在1HZ信号CLK_H半个周期内统计输入信号变化次数,P6,P7可以合并 BEGIN IF(CLK_CO'EVENTANDCLK_CO='1')THEN IF(CLK_H='1')THEN CO_BUF<=CO_BUF+1; ELSE--将统计结果乘以二传到CO_COUNT,为输入信号频率 IF(CO_BUF>0)THEN CO_COUNT<=2*CO_BUF; CO_BUF<=0;--适时清零缓冲器 ENDIF; CO_BUF<=0; ENDIF; ENDIF; ENDPROCESSP7;P11:PROCESS(CLK_CA) BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(C100K_COUNT<500)THEN C100K_COUNT<=C100K_COUNT+1; ELSE C100K_COUNT<=0; ENDIF; ENDIF; ENDPROCESSP11; P12:PROCESS(CLK_CA) BEGIN IF(CLK_CA'EVENTANDCLK_CA='1')THEN IF(C100K_COUNT<250)THEN CLK_10KH<='1'; ELSE CLK_10KH<='0'; ENDIF; ENDIF; ENDPROCESSP12; P13:PROCESS(CLK_CO,CLK_10KH) BEGIN IF(CLK_10KH'EVENTANDCLK_10KH='1')THEN IF(CLK_CO='1')THEN T_BUF<=T_BUF+1; ELSE IF(HZ_COUNT<10)THEN IF(T_BUF>0)THEN T_COUNT<=T_BUF*2; T_BUF<=0; ENDIF; T_BUF<=0; ENDIF; ENDIF; ENDIF; ENDPROCESSP13; P8:PROCESS(CLK_KH)--进程P8,通过1KHZ信号变化改变数码管位选标识 BEGIN IF(CLK_KH'EVENTANDCLK_KH='1')THEN IF(BIS<3)THEN BIS<=BIS+1; ELSE BIS<=0; ENDIF; ENDIF; ENDPROCESSP8; P9:PROCESS(CLK_KH,BIS,KEY)--进程P9,数码管位选,并传入显示数据 BEGIN IF(CO_COUNT>9999)THEN WARB<='1'; ELSE WARB<='0'; ENDIF; IF(CLK_KH'EVENTANDCLK_KH='1')THEN IF(KEY='0')THEN LED1<='0'; LED2<='1'; CASEBISIS WHEN0=>EN_XHDL<="1110"; data<=(10000/CO_COUNTMOD10); WHEN1=>EN_XHDL<="1101"; data<=((10000/CO_COUNT/10)MOD10); WHEN2=>EN_XHDL<="1011"; data<=((10000/CO_COUNT/100)MOD10); WHEN3=>EN_XHDL<="0111"; data<=(10000/CO_COUNT/1000); WHENOTHERS=>EN_XHDL<="1111";data<=0; ENDCASE; ELSE LED2<='0'; LED1<='1'; CASEBISIS WHEN0=>EN_XHDL<="1110"; data<=(CO_COUNTMOD10);

温馨提示

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

评论

0/150

提交评论