名称:256点FFT调用Quartus IP核实现傅里叶变换(代码在文末付费下载)
软件:Quartus
语言:VHDL
代码功能:使用VHDL实现256点FFT,调用Quartus IP核实现傅里叶变换
演示视频:
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;
设计文档:
1. 工程文件

2. 程序文件


FFT IP 核设置



3. 程序编译

4. RTL图


5. Testebcnh


6. 仿真图




阅读全文
930