• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

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

08/12 08:33
1266
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240R61A142b6.doc

共1个文件

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

软件:VIVADO

语言:Verilog

代码功能:

基于IP核的FFT设计

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

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

演示视频:

设计文档:

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;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=957

  • 2-240R61A142b6.doc
    下载

相关推荐