VIVADO FFT IP核使用之SCALE_SCH的配置

这篇具有很好参考价值的文章主要介绍了VIVADO FFT IP核使用之SCALE_SCH的配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

架构分类

分为流水线架构,基-4突发架构,基-2突发架构,基-2LITE突发架构,原文1如下:
VIVADO FFT IP核使用之SCALE_SCH的配置,fpga开发
VIVADO FFT IP核使用之SCALE_SCH的配置,fpga开发
基-2和基-4是FFT算法的不同实现形式,简而言之,基-2算法按照时间或频率对序列进行抽取,将序列一分为二,基-4是一分为四。流水线算法能实现数据的连续输出。基-2LITE突发架构基于基-2架构,能比基-2消耗更少的资源,但需要的转换时间更长。几种方法的吞吐量和资源消耗量如图:
VIVADO FFT IP核使用之SCALE_SCH的配置,fpga开发
对于使用FFT IP而言,仅需简单了解FFT算法即可,FFT算法通过蝶形运算实现,对于基-2FFT算法,会有log2(N)级蝶形运算,如对于16点的FFT,有4级蝶形运算。基-4FFT算法的级数为log4(N),如对于16点的FFT,有2级蝶形运算。

资源消耗实例:在vivado使用FFT IP,256长度的FFT,位宽为16,旋转因子精度为16,数据为fixed point,截断选项选择scaled,舍入类型为truncation,各种架构的资源消耗量:

架构类型 DSP48 Slices Block Rams
流水线架构 9 2
基-4突发架构 9 7
基-2突发架构 3 3
基-2LITE突发架构 2 2

比较意外的是基-4突发架构比流水线架构消耗了更多Block Rams的资源,评论区有了解原因的朋友欢迎讨论。

不同架构的有限字长考虑

对于基-4架构,每一级会带来的数据增长为5.242:
1 + 3 2 ≈ 5.242 1+3\sqrt{\smash[b]{2}}\approx5.242 1+32 5.242
对于基-2架构,每一级会带来的数据增长为2.414:
1 + 2 ≈ 2.414 1+\sqrt{\smash[b]{2}}\approx2.414 1+2 2.414
因此对于基-4架构,每级需要增长的位宽为3,基-2为2。
这是需要数据进行缩放的根本原因,所以后面需要配置SCALE_SCH,或者选择不进行缩放,但这样会让输出数据的位宽变得很大,也会消耗更多的资源。

s_axis_config的配置

CP_LEN

一般用于OFDM技术中,用于插入循环前缀,CP_LEN用于配置循环前缀的长度,它的位宽是log2(N),N为FFT/IFFT点数,如点数为256,位宽就是8。配置的数值为循环前缀长度的二进制表示,如循环前缀长度设置为64,则CP_LEN配置为8’b0100_0000。

FWD_INV

配置1或0来实现FFT/IFFT

数值 含义
FWD_INV = 1 FFT
FWD_INV = 0 IFFT

SCALE_SCH

这个参数配置比较复杂,和FFT使用的计算架构有关系,原文1如下:
VIVADO FFT IP核使用之SCALE_SCH的配置,fpga开发

SCALE_SCH位宽

对于基-2架构,宽度为2* NFFT,如对于128长度,宽度为2*log2(128)=14,其中,NFFT=log2(N),这是因为对于基-2FFT算法,会有log2(N)级蝶形运算,每一级都需要有缩放;

对于流水线架构或基-4架构,宽度为2* ceil(NFFT/2),如对于1024长度,2* ceil(NFFT/2)=2* ceil(log2(1024)/2)=10;这是因为基-4FFT算法的级数为log4(N),而流水线架构,原文如下:
In the scaled fixed-point mode, the data is scaled after every pair of Radix-2 stages.

即每对基-2的级进行一次缩放,所以其位宽与流水线架构一样为基-2的1/2。

SCALE_SCH配置的实例

在vivado使用FFT IP,参数还是256长度的FFT,位宽为16,旋转因子精度为16,数据为fixed point,截断选项选择scaled,舍入类型为truncation,架构选择为流水线。此时s_axis_config的宽度为16,[8:1]位为SCALE_SCH,[0:0] 位为FWD_INV,FWD_INV配置为1(FFT)。进行的是256点的FFT,matlab和FPGA的计算结果如下(给出前8个数据):
matlab结果:
VIVADO FFT IP核使用之SCALE_SCH的配置,fpga开发
SCALE_SCH配置为0000_0010时,根据前文的描述,代表第一级缩放2位,因此数据应为实际的1/4。FPGA 计算结果(第一行实部第二行虚部),大约为matlab结果的1/4:
VIVADO FFT IP核使用之SCALE_SCH的配置,fpga开发

方便对照,把matlab结果缩小到1/4:
VIVADO FFT IP核使用之SCALE_SCH的配置,fpga开发

有一定误差,但是整体上和FPGA结果是一致的。

若SCALE_SCH配置为0000_0110,这样第一级缩放2位,第二级缩放一位,应该进一步变成上面计算结果的1/2,FPGA计算结果:
VIVADO FFT IP核使用之SCALE_SCH的配置,fpga开发
关于SCALE_SCH,最核心的点是不保证数据溢出的前提下,尽可能保持数据的精度,缩放不够数据溢出会发生错误,缩放过多,则数据过小,会降低精度。

在PG1091对数据位宽的增长有详细的描述,这里给出原文:Consider an unscaled Radix-2 DIT FFT: For example, a 1024-point transform with an input of 16 bits consisting of 1 integer bit and 15 fractional bits has an output of 27 bits with 12 integer bits and 15 fractional bits. Note that the core does not have a specific location for the binary point. The output maintains the same binary point location as the input. For the preceding example, a 16-bit input with 3 integer bits and 13 fractional bits would have an unscaled output of 27 bits with 14 integer bits and 13 fractional bits.

它以基-2架构时间抽取的FFT算法为例,FFT是1024点的,会带来12的位宽增长,若输入数据是16位(1位整数位,15位小数位),则输出的数据会增长到27位(12位整数位,15小数位)。小数位是保持不变的,如果输入是16位(3位整数位,13位小数位),则输出为27位(14位整数位,13位小数位)。

而缩放的本质,是小数位的移动。

如3.25的二进制表示为11.01,假定输出数据限定为6位,将该数乘6,结果为19.5,二进制为10011.10,就造成了数据的溢出。若缩小一半,则为9.75,二进制表示为1001.11。实质就是小数位左移一位,同时舍去小数位的最后一位。这样数据就不会溢出了。

因此SCALE_SCH的设定,个人认为可以着眼于不缩放的条件下,小数位不变,和缩放造成的小数位移动上。


  1. Product specification. Fast Fourier Transform v9.0, PG109.Xilinx Corp, 2017. ↩︎ ↩︎ ↩︎文章来源地址https://www.toymoban.com/news/detail-728076.html

到了这里,关于VIVADO FFT IP核使用之SCALE_SCH的配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】 Vivado FIFO IP核使用教程

    目录 一、FIFO简介 二、FIFO的应用 三、Vivado FIFO创建 四、FIFO IP核实例化 五、对实例化顶层文件仿真        FIFO 的英文全称是 First In First Out ,即 先进先出 。 FPGA 使用的 FIFO 一般指的是对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存或者高速异步数据的交

    2024年02月06日
    浏览(95)
  • 【FPGA】Vivado软件 PLL IP核使用教程

            PLL (Phase Locked Loop),锁相环,是一种反馈控制电路。其功能主要是时钟倍频、分频、相位偏移和可编程占空比。 1、新建pll_test工程,点击Project Manager界面下的IP Catalog。  2、再在IP Catalog界面里搜索框搜索Clocking,找到下面的Clocking Wizard,双击打开配置界面。 3、进入配

    2024年02月06日
    浏览(54)
  • Xilinx 的FFT IP核使用方法(配置为FFT 、IFFT两种模式)

    Configuration 配置通道数和FFT长度 时钟频率以及数据吞吐速率 FFT的结构选择 Srteaming , 可以对数据进行流水处理 Radix-4 , 基4的迭代算法,使用资源比流水线结构多,但是转换时间长 Radix-2, Radix-2 lite 都为基2的迭代算法,Radix-2 lite的资源占用更少,但是转换时间也更长。 Run Time

    2024年02月04日
    浏览(29)
  • FPGA中FFT IP核应用(二)

    前文主要着重介绍了ise当中的FFT IP核的使用方法,本文将介绍Vivado中的FFT IP核使用方法。并且设计一段仿真代码,进行波形仿真,查看输出结果。 提示:以下是本篇文章正文内容 版本号:Fast Fourier Transform v9.1 Xilinx LogiCORE IP快速傅里叶变换(FFT)核心实现了Cooley-Tukey FFT算法,这

    2024年02月15日
    浏览(34)
  • FPGA中FFT IP核应用(一)

    小编是做通信相关的FPGA工程师,在工作当中必然要用到快速傅里叶变换,那么就有必要讲解一下关于Xilinx器件的FFT IP核用法。首先Xilinx器件经过ise到vivado的软件升级,其对应FFT IP核也相应的升级了,由之前的版本升级为现在的aAXI4总线版本。本文着重介绍AXI4总线版本,也会将

    2024年02月06日
    浏览(26)
  • xilinx FPGA 乘法器ip核(multipler)的使用(VHDL&Vivado)

    一、创建除法ip核  可以选择两个变量数相乘,也可以选择一个变量输入数据和一个常数相乘 可以选择mult(dsp资源)或者lut(fpga资源) 可以选择速度优先或者面积优先 可以自己选择输出位宽 还有时钟使能和复位功能  二、编写VHDL程序:声明和例化乘法器ip核 三、编写仿真程

    2024年02月11日
    浏览(49)
  • 【FPGA】FFT测量信号频率(Quartus IP核)

    ​​​​​​​ 一、前言 二、FFT是什么(原理)? 三、FFT IP核参数介绍 四、仿真 0、文件完整结构 1、设置IP核 2、例化FFT,并完善顶层文件 3、利用matlab生成正弦波信号 4、导出变量x生成的正弦波数据 5、编写testbench 6、RTL Simulation 五、上板 1、matlab生成正弦波信号并导出m

    2024年04月28日
    浏览(25)
  • 数字信号处理-11-FPGA FFT IP应用实例

    本文根据FFT相关原理进行设计构建工程,仿造前文的工程构建的混频功能的工程,设计工程显示该混频信号的功率谱,然后进行仿真分析。 本文不再针对FFT的原理进行过多赘述,提供一份简单的matlab仿真代码。根据仿真简述下FFT的相关使用注意事项。 代码设计,模拟生成了

    2024年02月02日
    浏览(32)
  • Xilinx FPGA SPIx4 配置速度50M约束语句(Vivado开发环境)

    qspi_50m.xdc文件: 等同于图形化配置方式:

    2024年02月22日
    浏览(42)
  • FPGA开发之Vivado安装及HLS环境配置,并实现流水灯实例

    HLS(High-Level Synthesis)高层综合,就是将 C/C++的功能用 RTL 来实现,将 FPGA 的组件在一个软件环境中来开发,这个模块的功能验证在软件环境中来实现,无缝的将硬件仿真环境集合在一起,使用软件为中心的工具、报告以及优化设计,很容易的在 FPGA 传统的设计工具中生成 IP。

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包