基于FPGA的频率计设计 毕业论文。。请高手帮忙,有重谢。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于FPGA的频率计设计 毕业论文。。请高手帮忙,有重谢。。相关的知识,希望对你有一定的参考价值。
通过FPGA运用VHDL编程设计一个数字式频率计,精度范围在1HZ~10KHz,给出实现代码和仿真波形。(运用的软件QUARTUSII)
采用单片机、FPGA等设计并制作一台数字显示的简易频率计。
1.频率计是干什么的? (这是什么东西 1。干什么的 2。参数指标)
2.用FPGA 模块化
3.软件介绍
4.总结+附录
参考资料
数字频率计是近代电子技术领域的重要测量工具之一,同时也是其他许多领域广泛应用的测量仪器。数字频率计是在规定的基准时间内把测量的脉冲数记录下来,换算成频率并以数字形式显示出来。数字频率计用于测量信号(方波,正弦波或其他周期信号)的频率,并用十进制数字显示,它具有精度高,测量速度快,读数直观,使用方便等优点。
一个用VHDL语言实现的实例如下:
-- Project Name: 恒精度频率计
-- Target Devices: FPGA or CPLD
-- Revision 0.01 - File Created
-- Comments: clk--系统工作时钟,2MHz
-------------reset--系统复位信号,高电平有效
-------------Fx--为待测信号
-------------FreqNx--为待测信号的计数值
-------------FreqNs--为标准信号的计数值
-------------Freq--为待测信号的频率
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
----------------------------------------------------------
entity Cymometer is
generic(clk_freq : integer := 2000000);--系统工作时钟频率
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;
Fx : in STD_LOGIC; ----待测信号
FreqNs : out natural;
FreqNx : out natural);
--Freq : out natural);
end Cymometer;
----------------------------------------------------------
architecture Behavioral of Cymometer is
----------------------------------------
signal start : STD_LOGIC;--此信号为高电平时计数器开始计数
signal CTRL : STD_LOGIC;--CTRL信号为待测信号和门控信号产生的计数器启动信号
signal CNTx : natural;--待测信号计数器
signal CNTs : natural;--标准信号计数器
----------------------------------------
begin
--***************************************--
--产生一个门控信号,高电平有效
GateCtrl : process(clk)
---------------------------
variable CNT0 : integer range 0 to 2_097_152;--门控信号计数器
---------------------------
begin
if rising_edge(clk) then
if reset='1' then
CNT0 := 0;
else
CNT0 := CNT0 + 1;
end if;
---------
if reset='1' then
start <= '0';
elsif CNT0 < (clk_freq*3/4) then
start <= '1';
else
start <= '0';
end if;
end if;
end process GateCtrl;
--***************************************--
--产生CTRL信号,由待测信号和门控信号产生的计数器启动信号
CtrlGen : process(Fx)
begin
if rising_edge(Fx) then
if reset='1' then
CTRL <= '0';
else
CTRL <= start;
end if;
end if;
end process CtrlGen;
--***************************************--
--用两个计数器分别对标准信号clk和待测信号signal计数
----------------------------------
--计数标准信号,CTRL高电平期间有效
CountS : process(clk)
begin
if rising_edge(clk) then
if reset='1' then
CNTs <= 0;
elsif CTRL='1' then
CNTs <= CNTs + 1;
else
CNTs <= 0;
end if;
end if;
end process CountS;
----------------------------------
--计数待测信号,CTRL高电平期间有效
CountX : process(Fx)
begin
if rising_edge(Fx) then
if reset='1' then
CNTx <= 0;
elsif CTRL='1' then
CNTx <= CNTx + 1;
else
CNTx <= 0;
end if;
end if;
end process CountX;
--***************************************--
--CTRL下降沿将技术结果和测量值输出
CountOut : process(CTRL)
begin
if falling_edge(CTRL) then
if reset='1' then
FreqNs <= 0;
FreqNx <= 0;
-- Freq <= 0;
else
FreqNs <= CNTs;
FreqNx <= CNTx;
-- Freq <= (clk_freq / CNTs * CNTx);
end if;
end if;
end process CountOut;
end Behavioral;
下面是为上面的模块编写的测试平台,在Modelsim下仿真通过,因为数据量较大,建议不要使用Altera及ISE仿真。
--------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE behavior OF tb IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT Cymometer
PORT(
clk : IN std_logic;
reset : IN std_logic;
Fx : IN std_logic;
FreqNs : OUT natural;
FreqNx : OUT natural;
Freq : OUT natural
);
END COMPONENT;
--Inputs
signal clk : std_logic := '0';
signal reset : std_logic := '1';
signal Fx : std_logic := '0';
--Outputs
signal FreqNs : natural;
signal FreqNx : natural;
-- signal Freq : natural;
-- Clock period definitions
constant clk_period : time := 500ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: Cymometer PORT MAP (
clk => clk,
reset => reset,
Fx => Fx,
FreqNs => FreqNs,
FreqNx => FreqNx,
-- Freq => Freq
);
-- Clock process definitions
clk_process :process
begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
end process;
--产生待测信号
Fx_process : process
begin
Fx <= '0';
wait for 2*clk_period;
Fx <= '1';
wait for 2*clk_period;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100ms.
wait for clk_period*10;
reset <= '0';
-- insert stimulus here
wait;
end process;
END;
参考原理M/T测频法。 参考技术A http://tabobo.cn/soft/search.asp?act=topic&keyword=fpga
1、 用FPGA实现控制基于I2C总线的EEPROM
2、 基于FPGA的简单OEM板GPS接收机设计
3、 基于FPGAD的数字频率计设计
4、 [电气工程]基于FPGA的电网基本电量数字测量系统的设计
5、 [电子信息工程]基于单片机和FPGA的位同步信号提取
6、 基于FPGA的数字通信系统
7、 基于FPGA和锁相环4046实现波形发生器
8、 UC/OSII在FPGA上的移植
9、 基于FPGA的IIR滤波器设计
10、 基于FPGA的TD-SCDMA信道编解码技术研究与实现(硕士)
11、 基于ARM和FPGA的数控系统的硬件设计(硕士)
12、 基于FPGA的JPEG压缩编码的研究与实现(硕士)
13、 OFDM通信系统基带数据处理部分的FPGA实现
14、 FPGA应用实验板设计
15、 UWB-OFDM解调器的仿真及FPGA在线仿真实现
16、 高速VITERBI译码器在ALTERA FPGA中的设计与实现
17、 基于FPGA温、湿度传感器系统设计
18、 基于FPGA的嵌入式系统开发板
19、 卫星信道延时模拟器的FPGA实现
20、 基于Altera FPGA的发动机ECU原型设计
21、 基于FPGA设计电梯控制系统
22、 FPGA在机卡分离式高清数字一体电视机里的应用
23、 PSK调制算法仿真与FPGA实现
24、 基于FPGA的数字复接系统帧同步器的设计 参考技术B 1、频率计嘛就是用来测试信号频率的啊!
2、用FPGA来做就最简单不过了!
3、我做了一个频率范围在0.5Hz__20MHz,一点都不夸张的,而且精度还很高,比你想象的要高的多!
4、软件设计就只要QUARTUS II,很好做的也很容易!
5、就连报告也都有的! 参考技术C 你问的也太多了吧。真是舍得用百度啊。
1.频率计应该是能对输出的信号的频率进行调整。比如要求输出10kHZ的某种波。指标:频率,波形,占空比,最高电压,最低电压,振幅等。
2.可以模块化,你自己参考资料去实现吧。
3.依旧百度,百科里有。
4.FPGA是基于硬件的编程,相对ASIC很灵活,能调整来实现你的功能。在视频处理,工业控制,DSP上都有很大的使用。他也作为ASIC的模型。 参考技术D 1.频率计是干什么的?
问这个问题的应该不是工科生吧!
不是工科生做什么频率计啊~~
哪凉快待哪去
基于FPGA的频率检测与LCD显示
配套FPGA开发板(含该设计的工程代码):https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-4676525296.4.6e8950ed57YPhv&id=17848039135
-
设计要求
利用FPGA设计一个信号测频器,要求:
(1)测量脉冲信号;
(2)频率测量1-10MHz以及占空比10%-99% 精确到1%;
(3)将测出频率和占空比显示在LCD1602上;
-
设计方案
FPGA设计主要分为三个大模块来设计:1.被测信号产生模块;2.被测信号检测模块;3.数字显示模块。设计框图如图 1所示。
-
被测信号产生模块
该模块主要是用来产生被测信号,可以在模块中设置被测信号的频率和占空比。采用的方法是对系统时钟进行计数分频产生被测信号。这部分也采用了一个PLL,输出一个100MHz的时钟作为检测模块的采样时钟。该部分涉及的模块:signal_gen模块和PLL模块。
-
被测信号检测模块
该模块对被测信号进行检测的方法是等精度测频法:
(1)被测信号频率检测
检测被测信号的频率,通过在外部使能信号有效时(即一段时间内),计数系统时钟脉冲数Ns与被测信号脉冲数Nd,若系统时钟频率为Fs,被测信号频率为Fd,则有Fs/Ns=Fd/Nd 最后有Fd=(Fs/Ns)·Nd。
(2)被测信号占空比检测:
检测被测信号的占空比,利用系统时钟,在外部使能信号有效时(即一段时间内),计数被测信号的正脉宽数Np和负脉宽数Nn,则占空比ducy=Np/(Np+Nn)*100%。
该部分涉及的模块:signal_detect模块。
-
数字显示模块
该模块主要分为两个部分:一个部分是把检测的频率码转换为十进制BCD码,采用这种方法虽然会提高运算时间,但却可以大大节省FPGA的资源(面积与速度的折衷);另外一个部分是驱动LCD1602进行显示。这里给出二进制码转换为十进制BCD码的几个步骤(以8bit二进制码为例): 1.将二进制码左移一位(或者乘2);2.找到左移后的码所对应的个,十,百位;3.判断在个位,十位和百位的码是否大于等于5;4.继续重复以上三步直到移位8次后停止;5.如果是则该段码加3。该部分涉及的模块:BCD2to10模块和lcd1602模块。
最终在FPGA的RTL视图如图 2所示:
图 2 基于FPGA的信号测频器的RTL视图
-
仿真测试
对设计进行Modelsim仿真测试,仿真采用一个近似于1MHz、占空比近似于50%的信号进行测试。在仿真中,我们可以发现经过检测之后的频率为980392Hz,占空比为49%。BCD转换模块分别每一位提取了出来,供LCD1602显示。如图 3所示。
图 3 Modelsim仿真测试
-
板级实验
对设计进行板级实验,采用的FPGA是大西瓜的Logic3 FPGA开发套件。实验结果如图 4所示。在误差允许范围内,LCD1602可以准确把被测信号的频率及占空比显示出来。这里注意的是,由于为了检测到1Hz的信号,故设计中延长了LCD显示的刷新周期,所以在一开始LCD显示屏会有一个短时间的闪屏,最后才会稳定下来。
图 4 板级实验结果
以上是关于基于FPGA的频率计设计 毕业论文。。请高手帮忙,有重谢。。的主要内容,如果未能解决你的问题,请参考以下文章