FPGA中FFT IP核应用(一)

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


前言

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


提示:以下是本篇文章正文内容

一、ISE14.7的FFT使用详解

版本号:Fast Fourier Transform v7.1
该版本FFT IP核是Xilinx公司配套FPGA开发工具ISE14.1推出的,其最大的系统时钟达到550MHz,最大的数据吞吐量达到550Msps,最大输入数据和相位因子位宽为34bit,支持所有的主流Xilinx FPGA芯片。
输入数据按自然顺序显示,输出数据可以按自然顺序显示,也可以按位/数字倒序输出。
FFT核接收复杂的数据样本,但可以通过将所有虚数输入设置位零来对实部数据进行转换。由于有限字长效应,在转换过程中,引入了噪声,导致输出数据不是完全的对称,故建议在执行实值FFT时,使用输出数据的后半部分(N/2+1,N)。

1、IP核配置页面介绍:

  1. Page 1
    FPGA中FFT IP核应用(一)
  • 组件名称:要实例化的核心组件的名称。名称必须以字母开头,由a ~ z、a ~ z、0 ~ 9、_组成。
  • 通道数:选择1 ~ 12的通道数。多通道操作可用于三种突发I/O架构。变换长度:选择所需的点大小。从8到65536的2的所有幂都是可用的。
  • 实现选项:选择一个实现选项,如第6页架构选项中所述。流水线,流I/O, Radix-2,突发I/O,和Radix-2 Lite,突发I/O架构支持点大小8到65536。Radix-4, Burst I/O架构支持的点大小为64到65536。自动检查选择最小的实现,满足指定的目标数据吞吐量,前提是指定的目标时钟频率是实现FFT核心在FPGA设备上实现。目标时钟频率和目标数据吞吐量只用于自动选择一个实现和计算延迟。核心不保证运行在指定的目标时钟频率或目标数据吞吐量。
  • 转换长度选项:选择是否在运行时可配置转换长度。当转换长度不能在运行时配置时,核心使用更少的逻辑资源并具有更快的最大时钟速度。
  1. Page 2
    FPGA中FFT IP核应用(一)
  • 数据格式:选择输入和输出的数据样本是定点格式,还是IEEE-754单精度(32位)浮点格式。当核心处于多通道配置时,浮点格式不可用。
  • 精度选项:输入数据和相位因数可以独立配置为8至34位的宽度,包括。当“数据格式”为“浮点型”时,输入数据宽度固定为32位,相位因数宽度可根据所需的噪声性能和可用资源设置为24位或25位。
  • 缩放选项:有三个选项,适用于所有架构:未缩放-所有的整数位增长被携带到输出。这可以使用更多的FPGA资源。缩放-一个用户定义的缩放计划决定了数据如何在FFT阶段之间缩放。块浮点——核心决定需要多大程度的缩放才能充分利用可用的动态范围,并将缩放因子报告为块指数。
  • 可选引脚:可选引脚有CE (Clock Enable)、SCLR (Synchronous Clear)、OVFLO (Overflow)。如果同时勾选“同步清除”,则会覆盖“时钟启用”。如果不选择该选项,可能会节省一些逻辑资源,并可能获得更高的时钟频率。
  • 舍入模式:在蝴蝶的输出时,需要修剪数据路径中的lbs。这些位可以使用收敛舍入截断或舍入,这是一种无偏置舍入方案。当一个数的小数部分正好等于1 / 2时,如果数是奇数,收敛四舍五入;如果数是偶数,收敛四舍五入。收敛舍入可以用来避免直流电偏置,否则将引入截断后的蝴蝶阶段。选择此选项将增加切片使用,并由于额外的延迟而导致转换时间的小幅增加。
  • 输出顺序:输出数据选择位/数字反转顺序或自然顺序。基于Radix-2的架构(流水线,流I/O, Radix-2,突发I/O和Radix-2 Lite,突发I/O)提供位反转排序,而基于Radix-4的架构(Radix-4,突发I/O)提供位反转排序。对于流水线、流I/O架构,选择自然顺序的输出顺序会增加核心使用的内存。对于突发I/O架构,选择自然阶输出会增加整体转换时间,因为需要一个单独的卸载阶段。如果输出顺序是自然顺序,可以选择循环前缀插入。循环前缀插入可用于所有体系结构,通常用于OFDM无线通信系统。
  • 输入数据时序:在以前版本的Xilinx FFT核心中,输入数据在相应的样本索引之后应用三个周期,以允许处理包含数据样本的块内存。在许多情况下,这是没有必要的,在错误的周期中应用数据会使核心功能不正常。这个计时现在可以配置为向后兼容以前的版本,或者在样本索引和应用数据之间没有延迟(默认)。
  1. Page 3
    FPGA中FFT IP核应用(一)
  • 存储选项:数据和相位因数(突发I/O架构):对于突发I/O架构,块RAM或分布式RAM都可以用于数据和相位因数存储。数据和相位因子存储可以在分布式RAM中存储所有的点大小,包括1024点。
  • 数据和相位因子(流水线,流I/O):在流水线,流I/O解决方案中,数据可以部分存储在块RAM中,部分存储在分布式RAM中。每个管道阶段,从输入端计数,使用更小的数据和相位因子存储器比前阶段。用户可以选择使用块RAM进行数据和相位因子存储的管道阶段的数量。后期阶段使用分布式RAM。GUI上显示的默认值在这两者之间提供了很好的平衡。如果输出顺序是自然顺序,用于重排序缓冲区的内存可以是块RAM或分布式RAM。对于点大小小于或等于1024的点,重排序缓冲区可以使用分布式RAM。-当为流水线,流I/O架构选择块浮点时,自然顺序和位倒序输出数据需要RAM缓冲区。在这种情况下,重排序缓冲区选项仍然可用,对于所有小于2048的点,可以选择分布式RAM。
  • 混合存储:数据,相位因子,或重新排序缓冲区记忆存储在块内存,如果内存的大小大于一块内存,内存可以由一个混合块公羊和分布式内存,在大多数的数据存储在块公羊和几位剩下存储在分布式RAM。这种混合内存是完全由多个块ram构建内存的替代方案。它减少了块RAM计数,但代价是增加了所使用的片的数量。只有当块RAM用于一个或多个内存,并且混合内存实现所需的片数低于每个内存256个lut的内部阈值时,混合内存才可用。如果满足这些条件,混合存储器就可用,可以选择。
  • 优化选项:Complex multiplier:有三个选项可用于定制复杂multiplier的实现:使用CLB逻辑:所有复杂multiplier都将使用切片逻辑构造。这适用于性能要求较低的目标应用程序,或具有少量XtremeDSP片/Mult18x18s的目标设备。-使用3-乘法器结构(资源优化):所有复杂的乘法器将使用3个真正的乘,5个加减结构,其中乘法器使用XtremeDSP片/ multi18x18s。这减少了XtremeDSP切片/Mult18x18计数,但使用了一些切片逻辑。在Spartan-3A DSP、Spartan-6和Virtex-6设备中,这种结构可以利用XtremeDSP片预加器来减少或消除额外的片逻辑,提高性能。-使用4乘法器结构(性能优化):所有复杂的乘法器将使用4个实乘,2个加减结构,利用XtremeDSP片/ multi18x18s。这种结构产生了最高的时钟性能,但牺牲了更专用的乘数。在具有XtremeDSP片的设备中,添加/减去操作是在XtremeDSP片中实现的。在带有Mult18x18s的设备中,添加/减去操作使用切片逻辑。注意:核心可能会在内部覆盖复杂的乘数实现,以确保使用最少的XtremeDSP片/ multi18x18s,而不会影响性能。由于这个原因,在3-multiplier和4-multiplier选项之间切换时,一些核心配置在XtremeDSP slice/Mult18x18的使用上可能没有差异。但是,如果选择使用CLB逻辑,则切片逻辑将始终被使用。
  • 蝴蝶算法:有两个选项可用于定制蝴蝶实现:-使用CLB逻辑:所有蝴蝶阶段将使用切片逻辑构建。-使用XtremeDSP片:对于具有XtremeDSP片的设备,该选项强制使用XtremeDSP片中的加法器/减法器实现所有蝶形阶段。

2、IP核主要端口说明

信号名称 方向 说明
XN_RE IN 输入操作数实部,2进制补码
XN_IM IN 输入操作数虚部,2进制补码
START IN FFT启动信号,高电平有效,对于突发I/O结构,该电平为高时,开始加载数据和变换计算,对于流水线数据流I/O结构,START开始加载数据,直接进行变换计算
UNLOAD IN 输出结果信号,高有效,只在突发I/O时有效
NFFT[4:0] IN 变换点数,仅应用于实时可配置时设置变换点数,具体NFFT变换点数参考数据手册
NFFT_WE IN NFFT的使能信号,高有效
FWD_INV IN 控制信号,=1实现FFT,=0实现IFFT
FWD_INV_WE IN FWD_INV写使能,高有效
SCALE_SCH IN 缩放因子,该端口仅在使用有缩放算法中可用,对于无缩放算法、块浮点或者单精度浮点不可用
SCALE_SCH_WE IN SCALE_SCH写使能,高有效
CP_LEN IN 循环前缀的长度,从变换结束开始的采样数,在整个变换结果输出之前作为循环前缀初始化输出,仅在有循环前缀插入时可用
CP_LEN_WE IN CP_LEN写使能,高有效
CE IN 时钟使能,高有效。低电平时将核暂停在当前状态,核内所有逻辑都暂停,当高电平后允许核继续工作
SCLR IN 同步清除,高电平有效,该信号为高时,所有输出引脚,内部计数器和状态变量都复位到初始状态,所有加载过程、变换计算和输出过程都停止并重新初始化
CLK IN 时钟信号,上升沿有效
XK_RE OUT 输出数据实部,有符号数
XK_IM OUT 输出数据虚部,有符号数
XN_INDEX OUT 输入数据索引
XK_INDEX OUT 输出数据索引
RFD OUT 准备好接收数据信号,输入数据有效
BUSY OUT 核忙信号,在进行FFT转换时为高电平
DV OUT 输出数据有效指示信号,高有效
DONE OUT FFT完成信号,是脉冲信号,只存在一个时钟,在DONE信号变高后,IP核开始输出计算结果
BLK_EXP[4:0] OUT 块指数,表示应用的缩放数,仅对浮点算法有效
EDON OUT 提前完成信号,在DONE前一个时钟变高

start启动信号:可以是连续为高进行连续FFT变换。当只维持一个时钟时,可以进行非连续FFT变换。

该IP核使用非连续数据流方式插入数据的时序图如图所示。由图中可以看出,第一段FFT转换结果输出滞后于其采样开始时间,而这种延迟随着采样点数的增加,FFT输出数据的延迟也会增加。
FPGA中FFT IP核应用(一)
连续数据流方式插入数据时序图:
FPGA中FFT IP核应用(一)


二、FFT IP核使用

如下为小编例化的FFT IP核代码片段:

my_fft my_fft_inst (
    .clk          (clk      ),// input clk
    .sclr         (!rst_n   ),// input sclr
    .start        (start    ),// input start
    .xn_re        (sig      ),// input [7 : 0] xn_re
    .xn_im        (8'd0     ),// input [7 : 0] xn_im
    .fwd_inv      (1'b1     ),// input fwd_inv
    .fwd_inv_we   (1'b1     ),// input fwd_inv_we
    .rfd          (rfd      ),// output rfd
    .xn_index     (xn_index ),// output [14 : 0] xn_index
    .busy         (busy     ),// output busy
    .edone        (edone    ),// output edone
    .done         (done     ),// output done
    .dv           (dv       ),// output dv
    .xk_index     (xk_index ),// output [14 : 0] xk_index
    .xk_re        (xk_re    ),// output [23 : 0] xk_re
    .xk_im        (xk_im    ) // output [23 : 0] xk_im
);

1.频谱

如上例化代码,在代码中直接操作实部:xk_re、虚部:xk_im,就可以得到一段波形的频谱了。再根据频率和索引的对应关系,就可以找到FFT积分区间内的频率值。

2.缩放因子的使用

在FPGA实际工程应用当中,使用FFT核就是为了得到频谱图,进而求出频率值。对过程当中的实际数据的准确度要求不严,如果工程中资源紧张,就更需要合理分布资源。故使用FFT缩放因子的功能可以有效降低FPGA实现FFT运算所占用的资源数量。缩放因子参数是压缩比例参数,由于多点运算FFT的计算量比较大,合理设置该参数可以有效减少资源的消耗。
当采样点数N不是4的幂次方时,最后一组只包含一个基2阶,只能用00或者01表示,例如:N = 512时,SCALE_SCH =[00 11 11 11]就是合理的,压缩2^(0+3+3+3) = 2^9=512倍。当SCALE_SCH =[11 11 11 11]就是不合理的。
当采样点数N是4的幂次方是,对最高阶的赋值没有要求。而N点采样最好压缩N倍。
在对scaled进行赋值后,IP核的输出结果可以进行移位还原,即进行如下操作:

assign xk_re_up = xk_re << 10;
assign xk_im_up = xk_im << 10;

注意:可以将IP核的ovflo信号引出,可以直观的在仿真波形中查看自己的scaled是否合理,如果设置的数值不够大,ovflo会溢出显示为高电平。
在此附上FFT核使用例程:https://download.csdn.net/download/qq_41894385/85535678,欢迎大家前来下载学习。文章来源地址https://www.toymoban.com/news/detail-461233.html

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

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

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

相关文章

  • Gowin FPGA学习记录——前言

            好久没有写博客了,想想是不是又该写点啥东西了么,准备写点国产FPGA的使用经历吧                  得益于目前国内的政策对国产化芯片扶持,越来越要求核心器件能够自主可控,因此作为核心芯片FPGA,国产FPGA的势头也发展很快。          现在FPGA的这

    2024年02月16日
    浏览(43)
  • FPGA学习实践之旅——前言及目录

    很早就有在博客中记录技术细节,分享一些自己体会的想法,拖着拖着也就到了现在。毕业至今已经半年有余,随着项目越来越深入,感觉可以慢慢进行总结工作了。趁着2024伊始,就先开个头吧,这篇博客暂时作为汇总篇,记录在这几个月以及之后从FPGA初学者到也算有一定

    2024年02月03日
    浏览(58)
  • FPGA - 7系列 FPGA内部结构之CLB -03- CLB相关原语以及应用

    本文节选UG474的第二章,进行整理翻译。CLB资源被FPGA综合工具自动有效地使用,不需要任何特殊的FPGA专用编码。一些HDL编码建议和技术可以帮助优化设计以获得最大效率。 这些指南是为有效使用7系列CLB的设计建议提供的快速核对表。7系列CLB的设计建议: 资源利用 使用通用

    2024年02月03日
    浏览(49)
  • VIVADO中FFT核的使用(FPGA计算FFT和IFFT)

             关于这方面的内容,有些文章已经写的很好很详细了。不过我在使用的过程中,还是踩了一些坑,我在这里详细的介绍了IP核每一个设置的作用,然后写了个fft计算和ifft计算的环路的测试程序。应该可以帮大家学会使用fft的同时,也对它有个较为全面的理解。

    2024年01月18日
    浏览(39)
  • FPGA实现8点FFT

    前面我们讲了FFT的原理以及其在C++上的实现,可以参考我的博客: 快速傅里叶变换学习(超详细,附代码实现)_Patarw_Li的博客-CSDN博客 C++实现FFT算法(迭代版本)_Patarw_Li的博客-CSDN博客 下面我们会在FPGA上用Verilog实现8点FFT,下面是需要注意的几点: 1. 旋转因子 在FPGA中直接

    2024年02月06日
    浏览(36)
  • FPGA在通信领域中起到的作用以及应用场景

    目录 1. 通信协议处理 2. 信号处理 3. 无线通信领域 4. 数字信号处理 5. 网络安全 6. 高速数据采集 7. 电路设计 8. 有线领域 第一时间更新,以及更多更及时的技术资讯和学习技术资料,请关注公众号: CTO Plus FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、

    2024年02月06日
    浏览(35)
  • 基于FPGA的FFT图像滤波设计

            FFT滤波就是通过傅里叶运算将图像转换到频域空间,然后在频域中对图像进行处理,最后将处理后的图像通过傅里叶逆运算将图像转会到时域空间。   在频域空间中,我们能够更好的对图像的噪声进行分析,然后找出相关规律将噪声信息去除。    本文重点讲解

    2024年04月17日
    浏览(46)
  • excel爬虫相关学习2:vba 爬虫相关xmlhttp 前言:vba 爬虫相关xmlhttp的方法

    目录 前言:vba 爬虫相关xmlhttp的方法 1 什么是xmlhttp 1.1 定义 1.2 特点 1.3 创建xmlhttp对象的过程 1.4  XMLHTTP对象创建的几种方法: 2 XMLHTTP方法: 2.1 xmlhttp.open(Method, Url, Async, User,Password) 2.1.1 xmlhttp.open()方法 2.1.2 参数  2.1.3 xmlhttp.open(get, url) 2.1.4 xmlhttp.open(post, url) 2.1.5 xmlhttp.open(p

    2024年02月11日
    浏览(49)
  • IIC通信协议详解 & PCF8591应用(Verilog实现FPGA)

    该文章结合PCF8591 8-bit AD/DA 模数/数模转换器来详细介绍IIC通信协议,尽量做到条理清晰,通俗易懂。该文图片均从PCF8591手册中截取,一定程度上引导读者学习阅读data sheet。 之后可能会更新 如何将IIC的Verilog实现变为一个IP核,并在pynq-Z2板子上使用 。 2.1 地址位 在I2C总线系统

    2024年02月04日
    浏览(65)
  • 基4FFT 1024 fpga(verilog)实现

    文章目录 概要 整体结果 模块设计 细节实现 小结 对于基4fft算法,计算原理无需多说,可以看看知网论文,或者数字信号处理的书籍,本次基4fft按照AXI4-stream总线协议方式,当握手时开始产生传送数据流 本次采用的方法是使用状态机实现:(1)S0状态:初始状态.(2)S1状态:开始

    2024年02月05日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包