基于FPGA的FFT算法实现

项目简述

前面的一篇博客我们已经讲解了FFT算法的发展历程,至于FFT的原理感兴趣的同学可以查阅书本数字信号处理,书本上面的知识特别详细,这里我也就不多说了。接下来我们将利用FPGA实现FFT算法,我们本次实验会利用IP核来实现,但是后面的文章会讲解verilog实现FFT过程。

本次实验所用到的软硬件环境如下:
1、VIVADO2019.1软件环境
2、Modelsim10.7c仿真环境

FFT IP的定制及详解

我们找到FFT的IP核如下:
在这里插入图片描述
在这里插入图片描述
1、这里我们选择1路信号的FFT变换。
2、FFT变换的点数,我们这里是1024点与前面MATLAB中的设置保持一致。
3、模块的参考时钟频率我们选择100MHz。
4、选择实现FFT的算法,我们使用基2算法
在这里插入图片描述
1、我们这里的数据格式选择成定点数即可。
2、缩放比例我们选择成块浮点数,这里是指将FFT每层的运算进行一定缩放,使得最后的结果大小适当。
3、这里选择数据的缩放直接选择截断数据。
4、输入数据的位宽,我们这里选择成16位。
5、相位因子的位宽,这与FFT内部相频的精度有关,这里我们选择默认即可。
6、FFT输出有两种顺序,也就是自然顺序和位反转顺序,我们一般选择自然顺序方便我们之后的处理。
在这里插入图片描述
1、数据我们使用块RAM。
2、相位我们也使用块RAM
3、复数乘法我们使用4乘法器结构
4、乘法使用DSP内部的专用乘法器,效果好一点。
这里我们还要注意IP定制界面的下面信息:
在这里插入图片描述
在这里插入图片描述
从上面的信息中我们可以看到,输入输出数据的高16位代表复数的虚数位,低16位代表复数的实数位。
S_AXIS_CONFIG输入为1代表傅里叶正变换,0代表傅里叶逆变换。

Block Design设计

我们本次实验将继续上次的实验进行讲解。在上一章的block design中加入相应的FFT的IP核,如下:
在这里插入图片描述
上面的设计我们严格遵循了AXI-stream的数据协议,当然因为该项目简单AXI中的ready信号一直为高,可以简化设计。同时注意,上面有我们自定义的IP核,代码如下:
fft_last模块:

`timescale 1ns / 1ps
// *********************************************************************************
// Project Name : OSXXXX
// Author       : zhangningning
// Email        : nnzhang1996@foxmail.com
// Website      : 
// Module Name  : fft_last.v
// Create Time  : 2020-04-04 22:18:25
// Editor       : sublime text3, tab size (4)
// CopyRight(c) : All Rights Reserved
//
// *********************************************************************************
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值