一种基于fpga的输入分块重映射fft方法

文档序号:7904 发布日期:2021-09-17 浏览:56次 英文

一种基于FPGA的输入分块重映射FFT方法

技术领域

本发明属于FPGA平台上FFT运算速度优化领域,具体涉及一种基于FPGA的输入分块重映射FFT(fast Fourier transform,快速傅里叶变换)方法。

背景技术

超高速(Gsps)AD转换器可以广泛应用在无线通信、软件无线电、数据采集、光通讯、仪器设备等领域。FPGA逻辑的速度一般跟不上高速ADC的总线速度,因此大多数FPGA具有串行器/解串器(SERDES)模块,用以将转换器端的快速、窄带串行接口转换为FPGA端的慢速、宽带并行接口。在高速ADC与FPGA集成的系统平台中,通常伴有相关的信号处理算法,这些算法往往需要加以改进才能保证实施到具体的平台后达到效率最大化。快速傅里叶变换(FFT)算法是一种经典的信号处理算法,该算法通过将输入时域信号映射到频域完成对输入信号的认知与分析。

目前,许多高速ADC的输出是多通道并行插值的格式,受限于FPGA的时钟频率,常见的协议模式比如LVDS,将转换器端的串行接口转换为FPGA端的并行接口。与之对应的是,现有FPGA平台Xilinx等官方提供的FFT运算IP核接收的是顺序的串行输入,所以解串后的并行数据往往还要被写入FIFO或RAM进行暂存再次转化为低速串行模式。综上,高速串行-低速并行-低速串行的这样一个过程,减慢了系统进行FFT运算的速度,并没有最大化利用FPGA的内部资源。

发明内容

本发明的目的是为解决现有方法中FFT运算速度慢,并没有对FPGA内部资源进行最大化利用的问题,而提出一种基于FPGA的输入分块重映射FFT方法。

本发明为解决上述技术问题所采取的技术方案是:

一种基于FPGA的输入分块重映射FFT方法,所述方法包括数据输入重映射模块,蝶形运算网络模块,数据输出模块,其中:

所述数据输入重映射模块用于将输入数据优化为并行分块的数据流格式,即通过数据输入重映射模块输出并行的各分块数据;

所述蝶形运算网络模块包括若干个FFT蝶形网络;

数据输入重映射模块将并行的各分块数据按照设计的输出顺序映射到对应的FFT蝶形网络;

对输入FFT蝶形网络的数据进行FFT运算,分别得到每个FFT蝶形网络输出的离散傅里叶变换数据;

所述数据输出模块用于对各FFT蝶形网络输出的离散傅里叶变换数据进行并行输出;

所述数据输入重映射模块、蝶形运算网络模块和数据输出模块按顺序封装到IP核中,其中,IP核的编写通过HLS编译工具实现。

本发明的有益效果是:本发明提出了一种基于FPGA的输入分块重映射FFT方法,本发明通过使用改进输入结构的蝶形算法,从FFT的计算过程以及FPGA的硬件架构出发,采用HLS编译工具将并行输入FFT运算中的数据输入重映射模块与蝶形运算系数初始化进IP核中,实现与硬件综合。实验结果表明,本发明设计的FFT方法能够在FPGA平台上对并行输入数据进行FFT计算,最大化并行的插值输入信号在FPGA平台上进行FFT的运算效率,时间性能上优于官方提供的IP核,实现了对FPGA内部资源进行最大化利用。

本发明设计的IP核所用时钟周期成倍的小于官方IP核的时钟周期。

附图说明

图1是本发明的基于FPGA的输入分块重映射FFT方法IP核设计框架;

图2是本发明的输入数据重映射表的示意图;

图3是本发明的IP接口生成图;

图4是Xilinx官方FFT函数IP核的时序图;

图5是本发明FFT加速运算的时序图;

图6是本发明加速运算的综合资源图。

具体实施方式

具体实施方式一、结合图1说明本实施方式。本实施方式所述的一种基于FPGA的输入分块重映射FFT方法,所述方法包括数据输入重映射模块,蝶形运算网络模块,数据输出模块,其中:

所述数据输入重映射模块用于将输入数据优化为并行分块的数据流格式,即通过数据输入重映射模块输出并行的各分块数据;

所述蝶形运算网络模块包括若干个FFT蝶形网络;

数据输入重映射模块将并行的各分块数据按照设计的输出顺序映射到对应的FFT蝶形网络;

对输入FFT蝶形网络的数据进行FFT运算,分别得到每个FFT蝶形网络输出的离散傅里叶变换数据;

所述数据输出模块用于对各FFT蝶形网络输出的离散傅里叶变换数据进行并行输出;

所述数据输入重映射模块、蝶形运算网络模块和数据输出模块按顺序封装到IP核中,其中,IP核的编写通过HLS编译工具实现。

本实施方式直接匹配多通道输入的数据流格式,将并行的ADC采样后无需排列处理,直接将数据输入到IP核中,达到效率最大化;通过设计的输入重映射表将输入数据进行分块映射。数据输入重映射模块是对传统的FFT输入输出倒序关系的进一步改进,从ADC与FPGA接口解串的数字化信号,经过RAM接口使之积累一定的时间的点数,输入到IP核的顶层函数,进入蝶形运算模块。通过并行分块输入的方式降低了FPGA所消耗的时钟周期资源,达到匹配并行输出的ADC数据利用率最大化。

IP核接口生成图如图3所示。参照图3,FFT运算模块设计完成以后,经过综合可将设计好的FFT计算单元生成为IP核,输入信号数据通过RAM的接口分别输入到IP核中。xin_0_address0~7代表8路并行输入的地址线,ce0和q0分别为接口使能和输入数据通道;xout_0_imag_address0和xout_0_real_address0分别代表8路并行的FFT结果输出地址,ce0,we0,d0分别代表接口使能,写使能和输出数据通道。图中其余的接口为IP核的相关控制接口,系统默认端口类型是默认的ap协议端口类型,ap_clk同步采样时钟,ap_rst连接系统复位信号,ap_start是预留的起始信号,输出的FFT计算结果在ap_done信号从低变高开始有效,ap_idle表示模块拉低不再空闲,ap_ready拉高表示系统可以接收新的输入。

高层次综合(HLS,High-level Synthesis)是一种自动设计过程,用于解释所需行为的算法描述并创建数字硬件,从而实现该行为,将行为与时序(例如时钟级别)解耦。HLS可以提高系统设计的抽象水平,与使用寄存器传输级别RTL,HLS工具是Xilinx发布的与Vivado套件集成在一起的IP核开发工具,HLS将高级语言(C,C++等)编写的函数视为功能模块(IP核),函数相当于模块功能的RTL描述,高级语言中的函数调用等效于VHDL等电路描述语言中的模块实例化。此方法可以减少编写的代码量,从而显著简化用于系统描述的结构代码,并最终加快系统组装过程。

具体实施方式二:本实施方式与具体实施方式一不同的是,所述数据输入重映射模块对输入数据进行优化时,执行L倍的数据流吞吐量,其中,L为ADC并行输出的路数。

其它步骤及参数与具体实施方式一相同。

具体实施方式三:本实施方式与具体实施方式一或二之一不同的是,所述数据输入重映射模块和数据输出模块封装为FPGA上的RAM通信接口;

数据输出模块封装为8路RAM通信接口。

所述数据输入重映射模块的输入数据大小为1*32,其中,8个分为一组进行并行输入;

所述蝶形运算网络模块中包括log2N个FFT蝶形网络,其中,N是FFT运算的点数;

所述蝶形运算网络模块中,第i个FFT蝶形网络的输入数据输入后,数据维度不变,输出数据的计算间隔为2i,i=1,2,…,log2N。

蝶形运算网络模块包括旋转因子运算尺寸等参数的结构化,计算模块程序编写,程序按指令优化。参数结构化,将设计好的旋转因子权重参数一层一层的提取出来,分别存储在FPGA的查找表中,再将所得到的参数进行(N,0)的定点量化;计算模块的程序编写,根据参数预输入尺寸在HLS开发工具中分别编写程序,一层对应一个循环。log2N个循环用于通过蝶形运算来计算基数2FFT,最后一个阶段用于存储N点FFT的输出,将时域的N点序列转换为频域的N点复数序列。

计算模块程序编写,是在HLS中对FFT蝶形运算网络中的第一层,第二层与第三层都编写了单独的计算模块,每一个计算模块都在HLS进行了优化,包括流水线,数组分割与函数流水化等。其中,计算模块包含了旋转因子的相乘与累加模块,为了最大化效率,我们设计了输入数据重映射模块,该模块以查找表的结构进行调度,保证输入数据的并行优势达到最大程度的利用,在合理的利用尺寸的内存空间的同时,在现实资源约束的前提下最大化展开运算函数,最大限度的减少了运算时间。

其它步骤及参数与具体实施方式一或二相同。

具体实施方式四:本实施方式与具体实施方式一至三之一不同的是,所述蝶形运算网络模块的参数权值,旋转因子和偏差值以FPGA的硬件架构进行结构化,并进行(N,0)的定点量化。

其它步骤及参数与具体实施方式一至三之一相同。

具体实施方式五:本实施方式与具体实施方式一至四之一不同的是,所述旋转因子分为实数集合和虚数集合,设置为查找表的形式嵌入到FPGA中。

其它步骤及参数与具体实施方式一至四之一相同。

实施例

图1中,基于FPGA的输入分块重映射FFT方法IP核设计框架,包括以下步骤:

(1)数据输入,调整输入信号尺寸大小,提取信号的采样点,将提取的采样点进行分块重映射到蝶形网络运算单元中;

(2)蝶形网络运算,该蝶形网络运算包括log2N个计算层;

(3)并行数据输出,输出最后FT变换的复数结果。

其中,步骤(1)分为以下几个步骤:

①参数权值结构化,将FFT卷积网络的权重参数一块一块的重新映射,再将得到的参数进行FPGA架构下的定点的量化;

②输入数据重映射表计算,如图2所示,将并行的,顺序的输入数据映射为FT输出的数据。

③映射表模块程序代码编写,根据定点量化后的参数在HLS工具中进行映射模块代码编写、优化,每一个映射模块按照地址进行RAM读入;

其中,步骤(2)分为以下几个步骤:

①旋转因子余弦和正弦系数结构化,将旋转因子的系数进行计算,利用正弦函数的周期性,在复数域呈现中心对称,所占用内存空间地址由N下降到N/2。然后匹配FPGA的架构进行系数的架构化,转换为ap_fifo的格式。该格式的输入数据将输入后级的蝶形运算。

②时间抽取(DIT)基数2FFT将DFT递归划分为偶数索引和奇数索引时间样本的两个半长DFT。这些较短的FFT的输出可重新用于计算许多输出,从而大大降低了总计算成本。

③蝶形因子的计算公式为:

其中,k代表输入数字信号的时间序号。M代表蝶形运算的分解数,一般地,M=N/2。

当按照基2进行时间抽取时,计算的复杂度降低。

参考表1,可以看到输入数据进行FFT的具体框架:

(1)输入1*32数大小的信号,8个一组为并行;

(2)将数据传入图1中的数据重映射层;映射为FT所需要的输出的顺序;

(3)将输入数据输入蝶形运算层1,数据维度不变,输出数据的计算间隔为2;

(4)将输入数据输入蝶形运算层2,数据维度不变,输出数据的计算间隔为4;

(5)将输入数据输入蝶形运算层i,数据维度不变,输出数据的计算间隔为2i

(6)输出并行的数据。

表1

按照上述方式进行模型结构化后,计算的数据采用浮点型数据和定点数类型时,资源消耗区别很大,时间上也会消耗更多的时钟周期,如图6硬件资源结果为FPGA的片内资源,BRAM可以被配置为双口RAM增加读写速度。DSP48E是乘法器消耗的FPGA片内资源。数据事先写入RAM后,每输入8组并行数据就等于输入一个地址进行查表,找出地址对应的内容,然后输出。从图6中可以看出量化后的各项硬件资源消耗。

图4和图5对比了32点FFT下,本发明所用的方法与传统顺序输入的Xilinx官方FFT函数综合出的时序图,本发明设计的上述方法生成的IP核所用101个时钟周期,成倍的小于官方的3900个时钟周期。

本发明所提供的基于FPGA的输入数据重映射FFT方法IP核在Xilinx公司V7系列芯片xc7vx690t进行了综合与实现。实验数据表明,本发明的方法处理32点FFT,做到了并行化,处理时间在5ns时钟下达到了500ns的延迟。

本发明的上述算例仅为详细地说明本发明的计算模型和计算流程,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动,这里无法对所有的实施方式予以穷举,凡是属于本发明的技术方案所引伸出的显而易见的变化或变动仍处于本发明的保护范围之列。

完整详细技术资料下载
上一篇:石墨接头机器人自动装卡簧、装栓机
下一篇:一种基于平滑拟合的频谱拼接方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!