FPGA频率计实验报告.docx_第1页
FPGA频率计实验报告.docx_第2页
FPGA频率计实验报告.docx_第3页
FPGA频率计实验报告.docx_第4页
FPGA频率计实验报告.docx_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

现代电子技术实验现代电子技术综合实验报告基于FPGA的频率计本文介绍了使用VHDL开发FPGA的一般流程,重点介绍了频率计的基本原理和相应的使用FPGA的设计方案,以及各个模块的设计方法。 目录第一章 引言第二章 项目任务与设计思路第三章 基于FPGA方法的设计方案第四章 各个模块的设计和实现1. 分频器2. 闸门控制器3. 计数器4. 锁存器5. 多路选择器6 译码器第五章系统硬件实现与调试第六章结束语 现代电子技术综合实验报告基于FPGA的数字频率计设计中文摘要:该设计采用硬件描述语言VHDL,在软件开发平台XILLINX 9.1 上完成,经实验验证可以在较高速时钟频率(100MHz)下正常工作。该设计的频率计能准确的测量频率在1Hz到100MHz之间的信号。使用ModelSim 仿真软件对VHDL程序做了仿真,并完成了综合布局布线的I/O口的分配,最终下载到芯片Spartan-IIIA上取得良好测试效果。第一章引言本文介绍了使用VHDL开发FPGA的一般流程,重点介绍了频率计的基本原理和相应的使用FPGA的设计方案,以及各个模块的设计方法。第二章项目任务与设计思路本次任务是完成基于FPGA 利用VHDL 语言设计一个数字频率计的设计,仿真,下载实现并实际测量效果,采用至上而下的设计方法,用ModelSim仿真。第三章基于FPGA方法的设计方案数字频率计实际就是一个脉冲计数器,用来记录1s内通过闸门的脉冲个数。若在一定时间内得周期性信号变化的次数为N,则其频率可表达为f=N/T.频率计的原理图如图1.一,实验名称:数字频率计的设计二实验地点:科研楼303三实验目的; 1,熟悉数字频率计的设计流程。 2,了解数字频率计的哥模块的功能与应用。 3,掌握xlinx ISE 9.1i的使用方法,能够用modelsim进行模拟。四实验内容: 设计一个计数计,测量范围1hz到100Mhz,测量结果用8只数码管显示。相关技术指标:1. 测量频率通过LED数码管8位10进制显示。2. 测量范围:1hz到100Mhz。3. 显示方式:用bcd7端共阳极数码管显示读数,只有在读数不跳变是才是正确的结果;记忆显示方法,在一次测试结束时,显示测试结果,此显示值一直保留到下次测量显示数的到来。才将上次显示更新;实现对高位无意义零的消隐。五、电子计数器的测频原理数字频率计实际就是一个脉冲计数器,用来记录1S内通过闸门的脉冲个数。若在一定时间内得周期性信号变化的次数为N,则其频率可表达为:f=N/T。闸门时间用来控制计数的开始和停止,只有在闸门开通的时间T内,被计数的脉冲才能通过闸门,被送到十进制电子计数器进行计数。门控信号由一个石英振荡器和数字分频器组成,由它输出的标准时间脉冲去控制门控电路形成门控信号。第四章各模块的功能及实现(1)分频器分频器的功能是提供标准闸门时间控制信号以精确控制计数器的开闭。本设计石英振荡器提供的标准频率是48MHZ,分频为1HZ和1KHZ,提供闸门和LED扫描时钟频率。 源程序如下library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity fre_div isport(clk48m: in std_logic; clk_1hz: out std_logic; scaner: out std_logic);end fre_div;architecture Behavioral of fre_div issignal m: integer range 0 to 23999999:=0;-signal m: integer range 0 to 23=0;signal n: integer range 0 to 23999:=0;-signal n: integer range 0 to 2:=0;signal fop: std_logic:=0;signal fou: std_logic:=0;begintp1: process(clk48m) begin if clk48mevent and clk48m=1 then if m=23999999 then m=0; fop= not fop; else m=m+1; end if; end if; end process;tp2: process(clk48m) begin if clk48mevent and clk48m=1 then if n=23999 then n=0; fou= not fou; else n=n+1; end if; end if; end process;clk_1hz=fop;scaner=fou;end Behavioral;模块图如下:图1.分频器模块图仿真图如下所示:图 2. 分频器模块仿真图 (2)、闸门控制器测频控制器是控制整个频率计各模块进行时序工作的控制装置,它对输入的标准时钟信号进行变换。锁存信号LATCH 以及清零信号reset。如使用一个低触发器处理1Hz的时钟信号,其Q端输出,即是脉宽1S 计数器使能端的控制信号,而Q输出即为脉宽1S 的锁存器使能信号。计数清零信号也由测频控制器变换后输出,控制整个电路。源程序如下library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity controler is port(clk_1hz: in std_logic; gate_en: out std_logic; reset: out std_logic;latch:out std_logic);end controler;architecture Behavioral of controler issignal q: integer range 0 to 1:=0;signal gate: std_logic;begin process(clk_1hz) begin if clk_1hzevent and clk_1hz=1 then if q=1 then q=0; gate=0; latch=1; else q=q+1; gate=1; latch=0; end if; end if; end process; process(clk_1hz,gate) begin if clk_1hz=0 and gate=0 then reset=1; else reset=0; end if; end process;gate_en=gate; end Behavioral;模块如图图3.control模块图(3)、计数器由于要求频率计的显示为十进制八位,所示我们设计的是使能端的十进制计数器,所生成的模块如图所示:t_signal是计数信号输入端,C_in 是计数保持端,即为高电平时计数,低电平时停止计数保持计数不变。Cnt是计数结果输出,carry_out是进位信号。其源程序为:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity count10 isport(c_in,clear:in std_logic; t_signal: in std_logic; cnt: out std_logic_vector(3 downto 0); carry:out std_logic); end count10;architecture Behavioral of count10 issignal q: integer range 0 to 9:=0;beginprocess(c_in,t_signal,clear)beginif clear=1 then q=0;carry=0;else if t_signalevent and t_signal=1 then if c_in=1 then if q=9 then q=0;carry=1;else q=q+1;carry=0;end if;end if;end if;end if;end process;cntc_in ,clear = clear,t_signal =t_signal ,cnt =cnt(3 downto 0) ,carry = n1);u2: count10 PORT MAP(c_in =c_in ,clear = clear,t_signal =n1 ,cnt =cnt(7 downto 4) ,carry = n2);u3: count10 PORT MAP(c_in =c_in ,clear = clear,t_signal =n2 ,cnt =cnt(11 downto 8) ,carry = n3);u4: count10 PORT MAP(c_in =c_in ,clear = clear,t_signal =n3 ,cnt =cnt(15 downto 12) ,carry = n4);u5: count10 PORT MAP(c_in =c_in ,clear = clear,t_signal =n4 ,cnt =cnt(19 downto 16) ,carry = n5);u6: count10 PORT MAP(c_in =c_in ,clear = clear,t_signal =n5 ,cnt =cnt(23 downto 20) ,carry = n6);u7: count10 PORT MAP(c_in =c_in ,clear = clear,t_signal =n6 ,cnt =cnt(27 downto 24) ,carry = n7);u8: count10 PORT MAP(c_in =c_in ,clear = clear,t_signal =n7 ,cnt =cnt(31 downto 28) ,carry = over);end Behavioral;生成的原理模块如下:图 4-19 级联后的计数器(4)、锁存器如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变,那么显示数码管也会不断跳变,不能看到稳定的输出。这模块实现了对六位计数结果和溢出信号over 的锁存功能。程序很简单,即锁存信号的上升沿来时送数,其它时候则保持不变。源程序为:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity latcher isport(d_in: in std_logic_vector(31 downto 0); gatel: in std_logic; over_in: in std_logic; d_out: out std_logic_vector(31 downto 0); over_out: out std_logic);end latcher;architecture Behavioral of latcher isbeginprocess(d_in,gatel,over_in)begin if gatelevent and gatel=1 then d_out=d_in;over_out=over_in;end if;end process;end Behavioral;锁存器模块如图:图4.锁存器模块图(5) 多路选择器 本模块通过用一个频率3khz的信号扫描一个多路选择器,实现对八位已经锁存的计数结果的扫描输出。用一个译码器来实现对八个4位2进制数的译码。译码结果再连接到一个多路选择器的输入端。最终的输出全部通过下载前得固定引脚连接到LED显示管上。实现最终的数字显示。输入端包括扫描信号scan和锁存器输出结果cnt 生成的模块如下;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity mux1 isport(scaner: in std_logic; cnt:in std_logic_vector(31 downto 0); sel: out std_logic_vector(2 downto 0); data_out :out std_logic_vector(3 downto 0);end mux1;architecture Behavioral of mux1 issignal q: std_logic_vector(3 downto 1):=000;beginprocess(scaner)begin if scanerevent and scaner=1 then if q=111 then q=000;else q=q+1;end if;end if;end process;seldata_outdata_outdata_outdata_outdata_outdata_outdata_outdata_outdata_out=1111;end case;end process;end Behavioral;多路选择器模块图:图5.多路选择器模块图 (6)、扫描显示控制译码系统本模块通过用一个频率1KHz的信号来扫描一个多路选择器,实现对六位已经锁存的计数结果的扫描输出,由于1KHz相对了人眼的暂留效应已经很高了,所以显示结果不会让人感觉到闪烁。译码结果再连接到一个多路选择器的输入端,同样由1KHz的信号来同步扫描选通。同时本模块还实现了无意义零的消隐。最出的输出全部通过下载前的固定引脚连接到LED 显示管上。实现最终结果的数字显示。其生成模块如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity bcd isport(data_in: in std_logic_vector(3 downto 0); a,b,c,d,e,f,g: out std_logic; - dig:out std_logic_vector(2 downto 0); dot:out std_logic);end bcd;architecture Behavioral of bcd issignal seg: std_logic_vector(6 downto 0);begin-dig=000;dot=0;a=seg(6);b=seg(5);c=seg(4);d=seg(3);e=seg(2);f=seg(1);g seg seg seg seg seg seg seg seg seg seg seg=1111111;end case;end process;end Behavioral; 生成模块如下图所示: 图6.译码器模块图(7)、顶层原理图图 7 顶层原理图第五章系统硬件实现与调试一分配引脚和下载实现全部仿真通过后,就运行ISE 的设计实现,然后再打开XILINX PACE,在里面分配引脚,即实现设计的输入输出端口与实际芯片的输入输出端口的对应连接。比如七段LED管的控制信号就连接到实际电路的七个引脚。需要注意的是一些端口是固定的,不能胡乱的连接。比如时基信号即石英振荡器所提供的信号就只能由P181 输入。同时还要考虑内部的可配制逻辑块CLB 的数量是否够满足程序的综合要求。一切都准备就绪后就可以运行Configure Dev

温馨提示

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

最新文档

评论

0/150

提交评论