名称:256点FFT调用Quartus IP核实现傅里叶变换
软件:Quartus
语言:VHDL
代码功能:使用VHDL实现256点FFT,调用Quartus IP核实现傅里叶变换
演示视频:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=210
FPGA代码Verilog/VHDL代码资源下载网:www.hdlcode.com
部分代码展示
library ieee;
use ieee.std_logic_1164.all;
--256点FFT设计,16bit输入
entity fft256 is port(
clk : IN STD_LOGIC; --时钟
reset_n : IN STD_LOGIC; --复位
sink_real : IN STD_LOGIC_VECTOR (15 DOWNTO 0); --16bit输入数据
source_error : OUT STD_LOGIC_VECTOR (1 DOWNTO 0); --FFT IP核输出的报错指示信号
source_sop : OUT STD_LOGIC; ----FFT IP核输出的数据第一位指示信号
source_eop : OUT STD_LOGIC; ----FFT IP核输出的数据最后一位指示信号
source_valid : OUT STD_LOGIC; --FFT IP核输出的数据有效指示信号
source_exp : OUT STD_LOGIC_VECTOR (5 DOWNTO 0); --FFT IP核输出的指示信号
source_real : OUT STD_LOGIC_VECTOR (15 DOWNTO 0); --FFT变换输出的实部
source_imag : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) --FFT变换输出的虚部
);
end fft256;
architecture one of fft256 is
--例化FFT IP 核
component fft_burst
PORT (
clk : IN STD_LOGIC;
reset_n : IN STD_LOGIC;
inverse : IN STD_LOGIC;
sink_valid : IN STD_LOGIC;
sink_sop : IN STD_LOGIC;
sink_eop : IN STD_LOGIC;
sink_real : IN STD_LOGIC_VECTOR (15 DOWNTO 0);
sink_imag : IN STD_LOGIC_VECTOR (15 DOWNTO 0);
sink_error : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
source_ready : IN STD_LOGIC;
sink_ready : OUT STD_LOGIC;
source_error : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
source_sop : OUT STD_LOGIC;
source_eop : OUT STD_LOGIC;
source_valid : OUT STD_LOGIC;
source_exp : OUT STD_LOGIC_VECTOR (5 DOWNTO 0);
source_real : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);
source_imag : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
);
END component;
--例化FFT IP核控制模块
component ctrl_fft port(
reset_n : in std_logic;
clk : in std_logic;
sink_ready : in std_logic;
sink_sop : out std_logic;
sink_eop : out std_logic;
sink_valid : out std_logic);
end component;
--定义连接信号
signal sink_valid_i,sink_eop_i,sink_sop_i,sink_ready_i : std_logic;
begin
--调用FFT IP核
u1 : fft_burst port map(
clk => clk, --时钟
reset_n => reset_n, --复位
inverse => '0',
sink_valid => sink_valid_i, --每帧输入数据有效时为高电平
sink_sop => sink_sop_i, --用来指示每帧输入数据的第一个数据
sink_eop => sink_eop_i,--用来指示每帧输入数据的最后一个数据
sink_real => sink_real, --16bit输入数据
sink_imag => (others=>'0'),
sink_error => "00",
source_ready => '1',
sink_ready => sink_ready_i, --指示可以输入待变换的数据
source_error => source_error, --FFT IP核输出的报错指示信号
source_sop => source_sop, --FFT IP核输出的数据第一位指示信号
source_eop => source_eop, --FFT IP核输出的数据最后一位指示信号
source_valid => source_valid, --FFT IP核输出的数据有效指示信号
source_exp => source_exp, --FFT IP核输出的指示信号
source_real => source_real, --FFT变换输出的实部
source_imag => source_imag --FFT变换输出的虚部
);
--调用FFT IP核控制模块
u2 : ctrl_fft port map(
reset_n => reset_n,
clk => clk,
sink_ready => sink_ready_i, --指示可以输入待变换的数据
sink_sop => sink_sop_i,--用来指示每帧输入数据的第一个数据
sink_eop => sink_eop_i,--用来指示每帧输入数据的最后一个数据
sink_valid => sink_valid_i --每帧输入数据有效时为高电平
);
end one;
设计文档:
- 工程文件
- 程序文件
FFT IP 核设置
- 程序编译
- RTL图
- Testebcnh
- 仿真图