目录

整体架构介绍

旋转因子介绍

代码文件结构

重点难点易错点


整体架构介绍

16点并行FFT分为4级蝶形运算,每一级蝶形运算有一个基本的蝶形单元:

如下是16点DIT FFT的数据流图:

可见,第0级蝶形运算的输入的顺序是:

x(0)、x(8)、x(4)、x(12)、x(2)、x(10)、x(6)、x(14)、x(1)、x(9)、x(5)、x(13)、x(3)、x(11)、x(7)、x(15);

只有这样排列输入,才能得到最终顺序的输出:

x(0)、x(1)、x(2)、x(3)、x(4)、x(5)、x(6)、x(7)、x(8)、x(9)、x(10)、x(11)、x(12)、x(13)、x(14)、x(15);

旋转因子介绍

蝶形因子通用的表示为:,从DIT FFT的数据流图可以看出,第0级蝶形运算的旋转因子为;第1级蝶形运算的旋转因子为:;第2级蝶形运算的蝶形因子为:;第3级蝶形运算的蝶形因子为:


那么这些蝶形因子在Verilog中如何表示呢?

,这样的话:

.


如此:

第0级蝶形因子:

第1级蝶形因子:

;

第2级蝶形因子:

;

第3级蝶形因子:

;


在Verilog设计中,蝶形因子肯定要使用parameter来定义,定义成参数,如何去做呢?

FPGA擅长进行定点数的运算,所以,我们要想办法将上述蝶形因子进行扩大,例如扩大512倍,得到:

第0级蝶形因子:

第1级蝶形因子:

;

第2级蝶形因子:

;

第3级蝶形因子:

;

蝶形因子虽然扩大了,但是后面运算还需要注意了,保证同时扩大,同时缩小,得到最终正确结果。


代码文件结构

我们对这个16点并行FFT算法进行描述的时候,采用的结构是从层层例化,从该算法的最顶层fft16,到4级蝶形运算,以及每级蝶形运算包含的8个蝶形单元,在到蝶形单元里面的复数乘法,加法器,减法器等等。从顶层开始描述到最底层,到达最底层,其实只用到了一个复数乘法器,一个加法器,一个减法器。蝶形因此采用参数的方式进行传递。

我的程序结构:

蝶形单元用的是IP核:

仿真文件结构:

仿真源统一命名,test_要测试的module;

仿真结果结构:

对输入输出建立分组,分组观察每一级输入输出信号,确保输入输出连贯,不要中间某一级输入输出异常,以及前一级与后一级输出输入不对应的错误。

具体要看某一级信号:

重点难点易错点

下面总结的都是个人遇到的问题,不代表你会如此。

重点:是对于蝶形因子的处理,以及代码风格的处理,争取不在顶层多写一行代码,通过层层例化,让代码结构一目了然,易于升级与维护。

难点:在与对每一级结果的位数的处理,每一级的结果如何进行截位,输出位宽设计为多少能够满足要求等等。

另一个难点永远都在于代码的调试,debug耗时耗力,进度跟不上的压力等等。

易错点:

易错点在于仿真时候如何给第一级蝶形运算输入数据,注意第一级蝶形运算的数据并不是顺序排列,而是有一定的规律。

仿真的结果如何判断呢?

可以借助Matlab,例如:

>> a = real(fft([0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0]))

>> b = imag(fft([0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0]))

输入是16点数据,输出是怎么样的呢?

输出呈现出余弦波形的规律,可以定性的进行比较。

心里有个大概。

【 FPGA 】16点并行DIT FFT的实现相关推荐

  1. FIR数字滤波器的FPGA实现(三)-并行FIR滤波器设计

    (三)FIR数字滤波器的FPGA实现-并行FIR滤波器设计 文章目录 (三)FIR数字滤波器的FPGA实现-并行FIR滤波器设计 0 并行FIR滤波器基本原理 1 基于直接型结构的全并行 FIR 滤波 ...

  2. FPGA进行多路并行插值滤波(多相滤波)的实现原理

    多相滤波器的基本概念是把FIR滤波器分割成若干较小的单元,然后组合这些单元的结果.首先,让我们考虑一个基于常规8抽头FIR滤波器的抽取子系统的符号表示,如图11所示(为了使用这些例子,我们假设抽取因子 ...

  3. ArduinoMEGA2560驱动AD7606模块 八路同步采样AD (16位并行数据传输)

    1.AD7606模块 淘宝购买的AD7606模块,如下图所示.该模块网上找了很久都没有找到例程.干脆自己写一个. 根据该模块厂家提供的pdf使用说明,可以看到需要将R18电阻拆除,R23焊接1K电阻才 ...

  4. FPGA series # 基于SDx的fft函数加速

    最近比较丧,也不知道是担心未来还是担心这样的自己 SDx建工程,new->SDx project,展开,src右键->import(或者在文件夹内添加相应的.c文件). main.c: # ...

  5. FPGA 16位除法器

    quartusii 中"/"是可以综合的,不过特别耗费资源.这时候在运算速度要求不是很高的前提下,自行实现除法器就是很有意义的事情了. 此除法器完成一次运算需要耗费18个时钟周期. ...

  6. 16位并行加载寄存器设计

  7. 频谱仪的更改ip_【正点原子FPGA连载】第五十一章 基于FFT IP核的音频频谱仪-摘自【正点原子】开拓者 FPGA 开发指南 (amobbs.com 阿莫电子论坛)...

    本帖最后由 正点原子 于 2020-10-24 15:19 编辑 203429z6c3os33t8albi33.png (66.36 KB) 2019-7-28 15:14 上传 第五十一章 基于FF ...

  8. 读论文之《基于 FPGA 的并行全比较排序算法》

    为什么介绍这种排序算法:最近在独立编写霍夫曼编码的verilog HDL设计程序,其中用到了排序模块,对一组数据进行排序,苦寻几天,最终找到了这个全新的适合硬件实现的排序算法,分享与此,以空间换时间的 ...

  9. 基于FPGA的并行计算技术

    1  微处理器与FPGA 微处理器普遍采用冯·诺依曼结构,即存储程序型计算机结构,主要包括存储器和运算器2个子系统.其从存储器读取数据和指令到运算器,运算结果储存到存储器,然后进行下一次读取-运算- ...

最新文章

  1. 制定OKR的两种方式,你知道吗?
  2. 深入理解卷II ---ICS源代码下载
  3. 前端笔记-前端优化简要大总结
  4. Visual Studio 2017为Android APK包签名
  5. node sqlite 插入数据_使用 Sequelize 操作 Sqlite3 数据库
  6. 配置Hyper-V Server 资源计量
  7. CodeForces - 1453D Checkpoints(概率+构造)
  8. 单位载质量能量消耗量_这样运动减肥效果最好!附:运动能量消耗表
  9. HDU 3966-Aragorn's Story 树链剖分+树状数组
  10. android studio 手动安装gradle,Android Studio 如何安装Gradle?
  11. Vue笔记(六)——Vue组件通信Vuex
  12. 【C语言】在有序数组中插入一个数,保证它依然有序
  13. mkhd中的matrix
  14. Driver 初始化顺序
  15. 转【es中数据节点和主机】
  16. 给出汉字‘你’、‘我’、‘他’在Unicode表中的位置
  17. 串口服务器的作用是什么?
  18. 写空到linux文件系统,谢烟客---------Linux之文件系统及其命令
  19. 通过西联快汇收取Google Adsense收入的详细步骤
  20. 惠普微型计算机w7系统,惠普笔记本电脑一键重装系统win7

热门文章

  1. PHP-Ajax跨域解决方案
  2. SEO系列二:何为用户体验?如何做好用户体验?
  3. 网络营销之微微博营销
  4. css设置元素继承父元素宽度_CSS设置超链接A标签宽度和高度
  5. get post put delete 区别_GET 和 POST 的区别?
  6. silverlight 打开html_Silverlight与HTML集成方法
  7. java无法获取套接字_无法从套接字获取更多数据
  8. String SringBuffer StringBuilder区别
  9. 计算机自动连续工作的基础是存储程序原理,计算机的存储程序工作原理是什么...
  10. 服务器修改网卡,美国服务器CentOS 6.x修改网卡名称的方法