EDA课程设计报告--基于FPGA的数字频率计的设计.docx
EDA课程设计报告题目:基于FP6A的数字频率计的设计基于FPGA数字频率计的设计任务书1 .设计任务与要求设计一个基于FPGA数字频率计,要认真并准确地理解有关要求,完成系统设计。 设计要求:(1)频率测量:频率IoHZ9999HZ方波信号;(2)周期测量:频率IoHZ9999HZ方波信号;(3)四位数码管显示频率、周期;(4)能产生频率IKHZ的方波信号,进行频率计自校;(5)对两种不同的测量用两种发光LED指示;2 .设计内容(1)设计VHDL代码源文件;(2)编译综合;(3)下载程序,片上测试;3 .编写设计报告写出设计的全过程,附上有关资料和程序,有心得体会。题目:基于FPGA数字频率计一、设计目的完成一个基于FPGA数字频率计,要完成以下任务。(1)频率测量:频率IoHZ9999Hz方波信号;(2)周期测量:频率IoHZ9999Hz方波信号;(3)四位数码管显示频率、周期;(4)能产生频率IKHZ的方波信号,进行频率计自校;(5)对两种不同的测量用两种发光LED指示;二、设计方案L总体设计方案系统功能描述:(数字频率基本功能是基于FPGA测试一 10-9999HZ的方波信号, 并在四位八段数码管上显示,包括分频模块、周期测量模块、频率测量模块、 显示模块)2 .分频模块设计将一个50MHZ的标准信号每个周期进行一次计数,计到50000再从0计数, 然后在计数器的前25000时间内将IKHz的信号置高电平,25000-50000内的 IKHZ信号置低电平,从而产生一个IKHZ的内部信号。将产生的IKHZ信号每个周期进行一次计数,计到IOOO再从0开始计数,然 后在计数器的前500时间内将IHZ信号置高电平,500-1000时间内内江IHZ信 号置低电平,从而产生一个IHZ频率的闸门信号。3 .显示模块设计定义一个integer类型信号BIS,范围为0-3,用这个信号来进行位选,在 IKHZ的信号中,每经过一次周期变换就将BIS加1,超过3则回0,用来做四 位数码管的动态扫描。检测输入按键(输入端口),当为低电平时则表示显示频率,将对应的LED 灯端口置高电平,表示周期的LED置低电平。将位选信号BlS放入CASE语句, 当其为0时表示第一位显示,将位选端口置为“ 0H1”,并将频率的千位传入 显示数据;为1时表示第二位显示,将位选端口置为“ 10H”,并将频率的百 位传入显示数据;为2时表示第三位显示,将位选端口置为“ H01”,并将频 率的十位传入显示数据;为3时表示第四位显示,将位选端口置为“ 1110” , 并将频率的个位传入显示数据。位选端口为STD_L0GIC_VECT0R(3 DOWNTO 0) 类型。如果检测到输入按键为低电平时,表示显示周期,将对应的LED灯端口置 高电平,表示频率的LED置低电平。将位选信号BlS放入CASE语句,当其为0 时表示第一位显示,将位选端口置为“ 0H1”,并将周期的千位传入显示数据; 为1时表示第二位显示,将位选端口置为“ 10H” ,并将周期的百位传入显示 数据;为2时表示第三位显示,将位选端口置为“ H01”,并将周期的十位传 入显示数据;为3时表示第四位显示,将位选端口置为“ 1H0” ,并将周期的 个位传入显示数据。另起一个进程,将上面位选时传入的数据放入CaSe语句,将其对应数据的 段码放入段选端口,我们所用的电路板数码管为共阳极点亮,故点亮的段应用 低电平。求整数(data)的个、十、百、千位的方法:个位=data mod 10;十位=data/10 mod 10;百位二 data/100 mod 10;千位=data/1000;4 .频率测量模块设计将分频模块中生成的IHZ信号作为闸门信号,当闸门信号为高电平时,测 量待测信号在高电平期间跳的数量,当闸门信号为低电平时将测量数据传入输 出模块,并将计数器清零,该传出的数据为半秒内跳沿次数,一个周期有一个 上升沿和一个下降沿,固该值即为待测信号的频率值。5 .周期测量模块设计将标准输入的50MHZ信号进行500被分频,设计一个IOOKHZ的信号,将待测信 号作为闸门,测量在其高电平期间的IOOKHZ信号跳沿次数,当待测信号为低电 平时,将该数据传出,并将计数器清零,该测量值即为输入信号的周期值,单 位为IOOKHZ信号的周期,为IOuso三、验证方案仿真结果MasterTimeBar:18.9n$ 小| Pointer496.97 m$ Interval:496.97 m$ Start: End:188,387 ms 493.63 ms498.873 ms 504.116 ms 509.359 ms 514.601 ms 519.844 ms 525.087 ms<>6-.6 A四、结论及讨论完成所有模块代码编写后我进行了整合编译,交由负责管脚分配的同学进 行分配管脚仿真后下载到开发板,连接到自己设置的IKHZ校准信号和一个3KHZ 的自定义信号上,分别拨动显示选择控制开关,显示正确、清晰,符合开始时 的要求。将开发板的输入管脚,接到波形发生器上,开发板能正确显示发生器的给 定频率及其周期,但当频率小于20HZ是开始出现数据显示不稳定情况,原因是 未分高低频测量,而是笼统的一个一秒闸门测量,低频数据不稳定。当频率超过10000HZ时会出现显示不确定的值,原因在于代码里未处理频 率超界的情况,故在代码中加上了一个蜂鸣器端口,当频率超过IOOOOHZ的测 量限度时蜂鸣器置高电平报警,提示使用者该值非正确值。HZ信号频率测量500HZ信号频率测量IOOOHZ自校信号频率测量五、课程设计的心得与体会通过对数字频率计的设计实现,我深入的学习了 QUartUSn软件的使用, VHDL语言的编写规范,语法结构等。在本次试验中我回顾了在数字电路以 及数字电路EDA设计与使用课程中学过的关于数字电路的设计的内容,加 深了对硬件与软件联系的映像,对其他的软件编程甚至单片机的原理与应用也 有很大的提升。这个课程设计也让我懂得,理论知识真的很重要,而实践能够加深对理论 知识的理解,将理论和实践结合起来,才能设计出优秀的作品。在这个课程设计过程中,我不只是完成一个设计,更重要的是在这一过程 中所体会和学到的一些非知识技能层面的东西一一细心、坚持、不断学习,我 相信这会是一次难得的经历。参考文献1聂小燕.数字电路EDA设计与应用.北京:人民邮电出版社,2010附录VHDL源代码LIBRARY IEEE;USE I EEE. STD_LOGIC_1164. ALL;USE I EEE. STD_LOGIC_UNSIGNED. ALL;ENTITY CYMOMETER ISPORT ( CLK_CA : IN STD_LOG IC50MHZ 信号CLK_CO : IN STD_LOGIC;一待测信号CLK_UT : OUT STD_LOGIC; 一自定义信号KEY : IN STD_LOGIC;一周期/频率转换CLK_CAL : OUT STD_LOGIC;一校准信号LEDH : OUT STD_LOGIC;一频率显示 LED 指示LEDT : OUT STD_LOGIC;一周期显示 LED 指示WARG : OUT STD_LOGIC;一频率超过测量范围警铃示警 RST : IN STD_LOGIC;DATAOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);一数码段选信号EN: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);一数码管位选信号END CYMOMETER;ARCHITECTURE BEHAV OF CYMOMETER ISSIGNAL DATAOUT_XHDL : STD_LOGIC_VECTOR(7 DOWNTO 0);一数码管段选内部信号SIGNAL EN_XHDL : STD_LOGIC_VECTOR(3 DOWNTO 0);一数码管位选内部信号SIGNAL CLK_KH, CLK_H : STD_LOGIC;IKHZ 和 IHZ 内部信号SIGNAL CK_SIM , WARB:STD_LOGIC;一自定义内部信号,警铃内部信号SIGNAL BIS : INTEGER RANGE 0 TO 4 := 0;一数码管位选标识SIGNAL CO_COUNT, T,COUNTf HZ_COUNT: INTEGER RANGE 0 TO 20000 :=0;一频率计数,周期计数SIGNALCO_BUF : INTEGER RANGE 0 TO 20000 :=0;一频率计数缓冲区SIGNALCA_COUNT, A: INTEGER RANGE 0 TO 50000 := 0; 50MHZ 内部计数,自定义信号产生计数器SIGNAL data : INTEGER RANGE 0 TO 9;一显示数据传输SIGNAL LED1, LED2 :STD_LOGIC;LED 标识内部信号SIGNAL C100K_C0UNT : INTEGER RANGE 0 TO 500IooKHZ 信号计数器BEGINDATAOUT <= DATAoULXHDL;一将内部LED段选信号关联到输出信号EN <= EN_XHDL; 一将内部LED位选信号关联到输出位选LEDT <= LED1 L-将内部LED指示信号关联到输出LED指示LEDH <= LED2;CLK.UT <= CK_SIM;一将内部自定义信号关联到输出CLK.CAL <= CLKJ<H;一将内部休HZ信号关联到输出校准WARG <= WARB; 一将内部警铃信号关联到外部P1 :PROCESS (CLK_CA)一进程P1,将50MHZ信号进行计数BEGINIF(CLK-CA,EVENT AND CLK_CA = ,)THENIF(CA_COUNT < 50000)THENCA_COUNT <= CA_COUNT + 1;ELSECA_COUNT <= 0;END IF;END IF;END PROCESS P1;P2 :PROCESS (CLK_CA) 一进程P2,将50MHZ信号进行计数,用于产生自定义信号BEGINIF(CLK-CA,EVENT AND CLK_CA = ,)THENIF(A < 50000)THENA <= A + 1;ELSEA <= 0;END IF;END IF;END PROCESS P2;P3 :PROCESS (CLK_CA) P3通过计数器A,产生自定义信号,此处为3KHZBEGINIF(CLK-CA,EVENT AND CLK_CA = ,)THENIF(A < 10000)THENCK_SIM <= , ;ELSIF(A > 10000) AND (A < 20000)THENCK_SIM <= ,0,;ELSIF(A > 20000) AND (A < 30000)THENCK_SIM <= ,;ELSIF(A > 30000) AND (A < 40000)THENCK_SIM <= ,0,;ELSIF(A > 40000) AND (A < 45000)THENCK_SIM <= , ;ELSECK_SIM <=