My title page contents

基于IP核的FFT设计Verilog代码VIVADO仿真

名称:基于IP核的FFT设计Verilog代码VIVADO仿真

软件:VIVADO

语言:Verilog

代码功能:

基于IP核的FFT设计

调用vivado自带的FFT IP核,计算65536点FFT


FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com


演示视频:

设计文档:

设计文档.doc

1. 工程文件


2. 程序文件


FIFO IP核设置


FFT IP核设置


3. Testbench


4. 仿真图







Testbench产生的方波频率为1162790Hz,程序计算出绝对值对应的最大位置为10584,根据公式可以计算出对应的频率值,本程序计算的频率为1162789Hz,误差产生的原因有:

1. Testbench生成的7.2MHz是用69.444ns翻转得到的,不是特别准;

2. 本程序计算频率时,频率分辨率取的109863/1000,实际频率分辨率=7.2MHz/65536=109.86328125;


部分代码展示:

module FFT_ctrl(
input clk,//时钟
input rst_p,//复位
input [11:0] wr_data,//AD采样的12bit数据
output [36:0] max_data//最大值对应的频率
);
parameter point=65536;//根据实际点数修改
parameter resolve=109863;//7200000000/point=频率分辨率*1000,采样时钟除以点数,根据实际点数修改
//fifo 空满信号
wire empty;
wire almost_empty;
wire full;
reg wr_en=0;//fifo 写使能
reg rd_en=0;//fifo 读使能
wire [11:0] rd_data;//fifo 读数据
wire last;//FFT输入的最后一个数
reg valid=0;//FFT输入数据有效指示
wire [31:0] fft_dout;//FFT输出
wire fft_dout_tvalid;//FFT输出数据有效指示
wire signed [11:0] fft_dout_re;//FFT输出数据实部
wire signed [11:0] fft_dout_im;//FFT输出数据虚部
always@(posedge clk or posedge rst_p)
if(rst_p)//复位
wr_en<=0;
else
if(empty==1)//FIFO空时开始写
wr_en<=1;
else if(full==1)//FIFO满时停止写
wr_en<=0;
always@(posedge clk or posedge rst_p)
if(rst_p)//复位
rd_en<=0;
else
if(full==1 && fft_dout_tvalid==0)//FIFO存满,且FFT IP核处于空闲状态
rd_en<=1;//读使能
else if(almost_empty==1)//将空时
rd_en<=0;//关闭读使能
always@(posedge clk or posedge rst_p)
if(rst_p)//复位
valid<=0;
else
if(rd_en==1)//读使能
valid<=1;//FFT输入数据有效指示
else
valid<=0;

代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于IP核的FFT设计Verilog代码VIVADO仿真

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员