CN105893326B - 基于fpga实现65536点fft的装置和方法 - Google Patents
基于fpga实现65536点fft的装置和方法 Download PDFInfo
- Publication number
- CN105893326B CN105893326B CN201610186675.9A CN201610186675A CN105893326B CN 105893326 B CN105893326 B CN 105893326B CN 201610186675 A CN201610186675 A CN 201610186675A CN 105893326 B CN105893326 B CN 105893326B
- Authority
- CN
- China
- Prior art keywords
- data
- module
- base
- input
- butterfly
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明属于数字信号处理领域,公开了一种基于FPGA实现65536点FFT的装置和方法。通过在输入输出部分、存储部分及处理部分提高一个时钟周期内能够处理的数据点数,从而加快FFT的运算速度。在输入接口部分,通过采用大位宽的数据线实现并行数据输入,节省数据输入的时间;在存储部分,用无冲突方式进行存储,使得一个时钟周期能够同时读写16点的数据,并将运算结果进行原位存储节省RAM资源;在处理部分,通过采用基‑16的运算核,加快处理速度,使得一个时钟周期能够处理16点的数据;在输出接口部分,同样通过采用大位宽的并行输出技术,实现处理结果的高速输出。
Description
技术领域
本发明涉及数字信号处理领域,尤其涉及一种基于FPGA实现65536点FFT的装置和方法。
背景技术
傅里叶变换在理论上有着极其重要的意义。随着计算机技术的发展,离散傅里叶变换(DFT)的出现,使傅里叶变换在工程上进入实际应用阶段。然而由于DFT算法的运算工作量十分巨大,运算时间长,从而限制了这种数据处理方法的应用。随后,快速傅里叶变换(FFT)的出现,将DFT的运算量从O(N2)降到了O(Nlog2N)次,在数字信号处理技术领域实现了突破性的进展。FFT作为时域和频域转换的基本运算,已经成为数字信号处理的必要手段,广泛应用于雷达、通信、声纳和图像处理等领域。但随着技术的推动和需求的牵引,数字信号处理***需要处理的数据量变得非常巨大,并要求达到全实时的处理速度,因此对FFT运算速度的要求也越来越高。
现有技术中对于提高FFT的运算速度,大部分采用了基-4算法,只有个别使用基4核拼接实现了基16算法,但是实现点数只有4096点。X现有FFT处理IP核最高支持65536点的FFT,但是其运算最快的结构(流水数据流结构)进行这些数据处理仍然需要131448个时钟,因此对于实时信号处理来说,现有FFT技术均难以满足实时性的要求。
发明内容
针对上述问题,本发明的目的在于提供基于FPGA实现65536点FFT的装置和方法,克服现有技术中FFT处理运算速度慢的问题。
本发明的技术思路是:通过在输入输出部分、存储部分及处理部分提高一个时钟周期内能够处理的数据点数,从而加快FFT的运算速度。在输入接口部分,通过采用大位宽的数据线实现并行数据输入,节省数据输入的时间;在存储部分,使得一个时钟周期能够同时读写16点的数据;在处理部分,通过采用基-16的运算核,加快处理速度,使得一个时钟周期能够处理16点的数据;在输出接口部分,同样通过采用大位宽的并行输出技术,实现处理结果的高速输出。
为达到上述目的,本发明的实施例采用如下技术方案予以实现。
技术方案一:
一种基于FPGA实现65536点FFT的装置,所述装置包括:
数据输入模块,用于在一个时钟周期内同时输入16点数据;
数据选通模块,设置有数据输入使能端和运算结果输入使能端,所述数据输入使能端用于将数据输入模块输入的数据选通到RAM存储模块进行存储,所述运算结果使能端用于将基-16蝶形运算模块输出的运算结果数据选通到RAM存储模块进行存储;
RAM地址生成模块,用于生成RAM存储模块的存储地址;所述RAM地址生成模块在一个时钟周期内同时生成16个地址;
RAM存储模块,用于存储所述数据输入模块输入的65536点数据;或者用于存储基-16蝶形运算模块输出的运算结果数据;
第一调序模块,用于从所述RAM存储模块中并行读入16点数据,并将所述16点数据按照基-16蝶形运算的输入要求进行调序;
基-16蝶形运算模块,用于预先存储基-16蝶形运算的旋转因子,并根据所述旋转因子和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据;
第二调序模块,用于将所述运算结果数据按照原位存储的原则进行调序,并将调序后的结果数据对应存储在所述RAM存储模块中。
本发明技术方案一的特点和进一步的改进为:
(1)所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口,所述数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果输入模块用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数据。
(2)所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储4096点数据;
所述65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据无冲突并行输出。
(3)一个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进行64次复数加法运算。
(4)65536点FFT的实现需要进行四级基-16蝶形运算,每级进行4096次蝶形运算,RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至32767,所述装置还包括溢出检测和数据截断模块,用于在第二级、第三级和第四级的基-16蝶形运算之前计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位宽对运算结果进行数据截断处理。
技术方案二:
一种基于FPGA实现65536点FFT的方法,应用于如技术方案一中任一项所述的装置中,65536点FFT的实现需要进行四级基-16蝶形运算,所述方法包括如下步骤:
步骤1,数据输入模块输入需要处理的数据,所述数据输入模块在一个时钟周期内同时输入16点数据;
步骤2,数据选通模块选通数据输入使能端,使所述数据输入模块输入的65536点数据存储于RAM存储模块;
步骤3,RAM地址生成模块生成所述数据输入模块输入的数据在所述RAM存储模块中的存储地址;
步骤4,所述数据输入模块输入的数据按照所述RAM地址生成模块生成的地址存储于所述RAM存储模块,所述RAM地址生成模块在一个时钟周期内同时生成16个地址;
步骤5,所述第一调序模块从所述RAM存储模块中并行读入16点数据,并将所述16点数据按照基-16蝶形运算的输入要求进行调序;
步骤6,所述基-16蝶形运行模块中预先存储有基-16蝶形运算的旋转因子,所述基-16蝶形运算模块根据所述旋转因子和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据;
步骤7,第二调序模块将所述基-16蝶形运算模块得到的运算结果数据按照原位存储的原则进行调序,并将调序后的结果数据对应存储在所述RAM存储模块中;
步骤8,RAM地址生成模块生成所述第二调序模块输入的运算结构数据在所述RAM存储模块中的存储地址;
步骤9,所述数据选通模块选通运算结果输入使能端,使得第二调序模块将所述基-16蝶形运算模块输出的运算结果数据按照所述RAM地址生成模块生成的地址存储到所述RAM存储模块;
步骤10,将步骤5至步骤9重复执行4096次,完成第一级基-16蝶形运算;
步骤11,将步骤5至步骤10重复执行4次,完成四级基-16蝶形运算。
本发明技术方案二的特点和进一步的改进为:
(1)所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口,所述数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果输入模块用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数据。
(2)所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储4096点数据;
将65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据无冲突并行输出。
(3)一个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进行64次复数加法运算,基-16蝶形运算的每次计算结果采用对应的寄存器进行数据暂存。
(4)RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至32767,在第二级、第三级和第四级的基-16蝶形运算之前需要计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位宽对运算结果进行数据截断处理。
本发明技术方案与现有技术相比,具有以下有益效果:(1)处理速度快,用基-16核FFT算法可以在一个时钟周期内同时处理16点数据的FFT运算,在相同的处理点数下需要更少的运算时间;(2)数据的输入输出速度快,本发明技术方案采用多路并行数据输入输出方式,一个时钟周期可以输入输出16点数据,相较于Xilinx公司所提供的IP核一次只能输入输出1-4点数据,消除了数据输入输出瓶颈,提高了数据的输入输出效率;(3)节省RAM资源,本发明技术方案采用原位存储设计,数据读取运算后还是存储到原来的RAM中,仅需要使用一个65536点的RAM存储空间,几乎是Xilinx公司提供的IP核所使用RAM资源的1/4,最大限度地减少了RAM资源的使用。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于FPGA实现65536点FFT的装置结构示意图;
图2为本发明实施例提供的一种基于FPGA实现65536点FFT的方法流程示意图一;
图3为本发明实施例提供的基-16蝶形运算模块的运算过程示意图;
图4为本发明实施例提供的一种基于FPGA实现65536点FFT的方法流程示意图二。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明技术方案通过采用基-16蝶形运算模块作为数据处理单元,则65536点数据的FFT需要4级运算,每一级进行4096次蝶形运算。数据串行输入后先存储到RAM存储模块中,然后按照一定的规律每次读取一组16点数据,进行16路并行蝶形运算后原位存储,然后处理下一组数据,一级运算完毕后进行下一级运算。每一级4096次蝶形运算后会得到一个溢出位宽,在下一级运算时根据该位宽信息将数据进行截断处理,以防止数据溢出,如此下去实现65536点数据的FFT运算。
本发明实施例提供一种基于FPGA实现65536点FFT的装置,如图1所示,所述装置包括:
数据输入模块1,用于在一个时钟周期内同时输入16点数据。
示例性的,数据输入模块采用大位宽数据线高速输入所要处理的数据。本发明技术方案中数据输入模块可以根据输入数据位宽进行选择设置,支持1、2、4、8、16个数据同时输入。设置为16时,在一个时钟周期内可以同时输入16个数据,能够提高数据输入速度。
数据选通模块2,设置有两个使能端:数据输入使能端和运算结果输入使能端,数据输入使能端用于将数据输入模块输入的数据选通到RAM存储模块进行存储;运算结果输入使能端用于将基-16蝶形运算模块输出的运算结果数据选通到RAM存储模块进行存储。
具体的,当数据输入模块输入数据时,数据选通模块使数据输入使能端有效,并将数据输入模块输入的数据选通到RAM存储模块进行存储;当数据经过基-16蝶形运算模块运算结束后,将运算结果进行存储时,数据选通模块使运算结果输入使能端有效,并将基-16蝶形运算模块输出的运算结果选通到RAM存储模块进行存储。
具体的,所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口,所述数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果输入模块用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数据。
RAM地址生成模块3,用于生成RAM存储模块的存储地址;所述RAM地址生成模块在一个时钟周期内同时生成16个地址。
RAM存储模块4,用于存储所述数据输入模块输入的65536点数据;或者用于存储基-16蝶形运算模块输出的运算结果数据。
所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储4096点数据;
所述65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据无冲突并行输出。
DIT-FFT要求间隔为1、16、256、4096的点不能存储在同一个RAM中。RAM地址生成模块所设计的存储方式是:16个数据为一组依次存储到16个RAM的地址为0的区域,地址为1的区域……。RAM地址每增加1数据存储的起始RAM编号就加1,这样进行存储的数据就可以实现无冲突16路并行读取。对于65536点的DIT-FFT,第一级抽取间隔为4096,第二级抽取间隔为2048,第三级抽取间隔为256,第四级抽取间隔为16。因此间隔为1、16、256、4096的点不能存储在同一个RAM中,否则读取运算时会产生冲突。分析后得到数据存储规律如表1所示。
表1 RAM数据存储规律
需要补充的是,RAM存储模块中的数据往出读取时需要根据要求的数据间隔进行读取数据,所以RAM地址生成模块在每一级运算时生成的地址都不相同,其中第1、2、3、4级的地址间隔分别为4096、256、16、1,即第i级的地址间隔为65536/16i。
第一调序模块5,用于从所述RAM存储模块中并行读入16点数据,并将所述16点数据按照基-16蝶形运算的输入要求进行调序。
为了实现高速运算,采用无冲突存储方式进行存储,以同时并行读取16点数据,使基-16蝶形运算模块能够全速运行。由于从16个RAM读出的数据的顺序和基-16蝶形运算模块要求的数据输入顺序不一致,因此设计第一调序模块将存储在不同RAM里的数据按照蝶形运算单元的输入要求进行调序。
示例性的,如第一次蝶形运算输入的16个数据为0,4096,…,15*4096,要求RAM0接入基-16蝶形运算模块的第一个输入,而第二次蝶形运算输入的16个数据为1,1+4096,1+2*4096,…,1+15*4096,要求将RAM1调序到基-16蝶形运算模块的第一个输入。
基-16蝶形运算模块6,用于预先存储基-16蝶形运算的旋转因子,并根据所述旋转因子和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据。
具体的,一个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进行64次复数加法运算。
第二调序模块7,用于将所述运算结果数据按照原位存储的原则进行调序,并将调序后的结果数据对应存储在所述RAM存储模块中。
需要说明的是,65536点FFT的实现需要进行四级基-16蝶形运算,每级进行4096次蝶形运算,RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至32767,因此所述装置还包括溢出检测和数据截断模块8,用于在第二级、第三级和第四级的基-16蝶形运算之前计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位宽对运算结果进行数据截断处理。
本发明实施例还提供一种基于FPGA实现65536点FFT的方法,应用于上述实施例所述的装置中,65536点FFT的实现需要进行四级基-16蝶形运算,如图2所示,所述方法包括如下步骤:
步骤1,数据输入模块输入需要处理的数据,所述数据输入模块在一个时钟周期内同时输入16点数据。
步骤2,数据选通模块选通数据输入使能端,使所述数据输入模块输入的65536点数据存储于RAM存储模块。
步骤3,RAM地址生成模块生成所述数据输入模块输入的数据在所述RAM存储模块中的存储地址。
步骤4,所述数据输入模块输入的数据按照所述RAM地址生成模块生成的地址存储于所述RAM存储模块,所述RAM地址生成模块在一个时钟周期内同时生成16个地址。
所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口,所述数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果输入模块用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数据。
所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储4096点数据。
将65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据无冲突并行输出。
步骤5,所述第一调序模块从所述RAM存储模块中并行读入16点数据,并将所述16点数据按照基-16蝶形运算的输入要求进行调序。
步骤6,所述基-16蝶形运行模块中预先存储有基-16蝶形运算的旋转因子,所述基-16蝶形运算模块根据所述旋转因子和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据。
一个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进行64次复数加法运算,基-16蝶形运算的每次计算结果采用对应的寄存器进行数据暂存。
将调序后的数据输入基-16蝶形运算单元,同时读取预先存储在ROM里的旋转因子,进行16点的FFT变换。基-16蝶形运算模块是FFT运算的基本单元,FFT的基-16分解公式为:
示例性的,如图3所示为基-16蝶形运算模块的具体运算过程:每一列节点可以用一次运算得到,第一列运算是输入数据同旋转因子相乘,第二列运算是加减和乘-j的运算,第三列运算是一部分数据不变,另一部分数据乘以固定旋转因子,最后是加减和乘-j的运算。要注意一部分数据乘以固定旋转因子另一部分数据不变时,不变的数据要通过移位寄存器实现另一部分数据的同步。
需要补充的是,在基-16蝶形运算模块中设置有多个寄存器,用于对基-16蝶形运算模块的中间结果进行暂存,目的是加快运算速度,比如四个数的加法,同时进行的话一个时钟周期需要进行三个加法运算,比较慢,因此可以将两个数分别相加,一个时钟周期进行了两个加,然后数据暂存,再进行一个加就可以了。
旋转因子ROM用来存储旋转因子。数据处理第一级实现了4096个16点FFT,第二级实现了256个256点FFT,第三级实现了16个4096点FFT,第四级实现了65536点的FFT。不同的点数对应的旋转因子是不同的,但是小点数的旋转因子其实是包含在大点数的旋转因子中的,因此只需要存储65536点FFT的旋转因子,其他点数的旋转因子通过地址偏移得到。
步骤7,第二调序模块将所述基-16蝶形运算模块得到的运算结果数据按照原位存储的原则进行调序,并将调序后的结果数据对应存储在所述RAM存储模块中。
由于数据运算后要进行原位存储,所以采用调序2模块将基16蝶形运算单元的运算结果按照RAM的存储规则进行调序。该过程可以看做步骤5的逆过程。
步骤8,RAM地址生成模块生成所述第二调序模块输入的运算结构数据在所述RAM存储模块中的存储地址。
步骤9,所述数据选通模块选通运算结果输入使能端,使得第二调序模块将所述基-16蝶形运算模块输出的运算结果数据按照所述RAM地址生成模块生成的地址存储到所述RAM存储模块。
步骤10,将步骤5至步骤9重复执行4096次,完成第一级基-16蝶形运算;
步骤11,将步骤5至步骤10重复执行4次,完成四级基-16蝶形运算。
RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至32767,在第二级、第三级和第四级的基-16蝶形运算之前需要计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位宽对运算结果进行数据截断处理。
本设计采用块浮点的数据格式,对数据进行动态的缩放处理,以保证数据精度和运算速度。具体地,在每一次蝶形运算后对输出的16个复数,共32个数据进行溢出检测处理,也就是比较大小,然后记录最大值的溢出位数,并和本级的最大溢出位数进行比较保留较大值。这样一级4096次蝶形运算后就得到了本级的溢出位宽,在下一级进行数据处理时根据该溢出位宽将数据进行截断,并加到整体的块浮点指数上。
通过所设计的控制模块来实现整个FFT运算的流程控制。该控制模块采用一个14位的信号step[13:0]作为地址生成等模块运行的参考。step[11:0]的每个值代表一次蝶形运算,step[13:12]代表所处的级。从开始进行数据处理,该寄存器在每个时钟周期都进行加一计数,在每级结束就暂停计数,下一级开始运算就继续计数。直到整个运算结束。
本发明实施例提供的一种基于FPGA实现65536点FFT的方法流程示意图具体可参照图4进行。
本发明的设计方法,与现有技术相比,具有以下有益效果:
(1)处理速度快。用基-16核FFT算法可以在一个时钟周期内同时处理16个点的FFT运算,在相同的处理点数下需要更少的运算时间。本设计中每一级运算都采用流水线设计,提高了处理速度。蝶形运算单元设计时,每一步都用一个寄存器进行数据暂存,这样就可以实现流水线式数据处理,一级4096次蝶形运算只需要16个时钟的数据潜伏期,加上4096个时钟即可实现一级处理。因此,所设计的算法能够大幅度提高运算速度,仿真结果表明进行65536点FFT运算只需要16448个时钟周期,几乎是Xilinx公司所提供IP核处理速度的8倍。
(2)数据的输入输出速度快。所设计的多路并行数据输入输出方式,一个时钟周期可以输入输出16个数据,相较于Xilinx公司所提供的IP核一次只能输入输出1-4个数据,消除了数据输入输出瓶颈,提高了数据的输入输出效率。
(3)节省RAM资源。本设计采用原位存储设计,数据读取运算后还是存储到原来的RAM中,仅需要使用一个65536点的RAM存储空间,几乎是Xilinx公司提供的IP核所使用RAM资源的1/4,最大限度地减少了RAM资源的使用。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (6)
1.一种基于FPGA实现65536点FFT的装置,其特征在于,所述装置包括:
数据输入模块,用于在一个时钟周期内同时输入16点数据;
数据选通模块,设置有数据输入使能端和运算结果输入使能端,所述数据输入使能端用于将数据输入模块输入的数据选通到RAM存储模块进行存储,所述运算结果输入使能端用于将基-16蝶形运算模块输出的运算结果数据选通到RAM存储模块进行存储;
RAM地址生成模块,用于生成RAM存储模块的存储地址;所述RAM地址生成模块在一个时钟周期内同时生成16个地址;
RAM存储模块,用于存储所述数据输入模块输入的65536点数据;或者用于存储基-16蝶形运算模块输出的运算结果数据;
第一调序模块,用于从所述RAM存储模块中并行读入16点数据,并将所述16点数据按照基-16蝶形运算的输入要求进行调序;
基-16蝶形运算模块,用于预先存储基-16蝶形运算的旋转因子,并根据所述旋转因子和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据;
第二调序模块,用于将所述运算结果数据按照原位存储的原则进行调序,并将调序后的结果数据对应存储在所述RAM存储模块中;
其中,所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口,所述数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果输入端口用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数据;
所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储4096点数据;所述65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据无冲突并行输出。
2.根据权利要求1所述的一种基于FPGA实现65536点FFT的装置,其特征在于,一个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进行64次复数加法运算。
3.根据权利要求1所述的一种基于FPGA实现65536点FFT的装置,其特征在于,65536点FFT的实现需要进行四级基-16蝶形运算,每级进行4096次蝶形运算,RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至32767;
所述装置还包括溢出检测和数据截断模块,用于在第二级、第三级和第四级的基-16蝶形运算之前计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位宽对运算结果进行数据截断处理。
4.一种基于FPGA实现65536点FFT的方法,应用于如权利要求1-3中任一项所述的装置中,65536点FFT的实现需要进行四级基-16蝶形运算,其特征在于,所述方法包括如下步骤:
步骤1,数据输入模块输入需要处理的数据,所述数据输入模块在一个时钟周期内同时输入16点数据;
步骤2,数据选通模块选通数据输入使能端,使所述数据输入模块输入的65536点数据存储于RAM存储模块;
其中,所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口,所述数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果输入端口用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数据;
所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储4096点数据;
将65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据无冲突并行输出;
步骤3,RAM地址生成模块生成所述数据输入模块输入的数据在所述RAM存储模块中的存储地址;
步骤4,所述数据输入模块输入的数据按照所述RAM地址生成模块生成的地址存储于所述RAM存储模块,所述RAM地址生成模块在一个时钟周期内同时生成16个地址;
步骤5,第一调序模块从所述RAM存储模块中并行读入16点数据,并将所述16点数据按照基-16蝶形运算的输入要求进行调序;
步骤6,所述基-16蝶形运行模块中预先存储有基-16蝶形运算的旋转因子,所述基-16蝶形运算模块根据所述旋转因子和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据;
步骤7,第二调序模块将所述基-16蝶形运算模块得到的运算结果数据按照原位存储的原则进行调序,并将调序后的结果数据对应存储在所述RAM存储模块中;
步骤8,RAM地址生成模块生成所述第二调序模块输入的运算结果数据在所述RAM存储模块中的存储地址;
步骤9,所述数据选通模块选通运算结果输入使能端,使得第二调序模块将所述基-16蝶形运算模块输出的运算结果数据按照所述RAM地址生成模块生成的地址存储到所述RAM存储模块;
步骤10,将步骤5至步骤9重复执行4096次,完成第一级基-16蝶形运算;
步骤11,将步骤5至步骤10重复执行4次,完成四级基-16蝶形运算。
5.根据权利要求4所述的一种基于FPGA实现65536点FFT的方法,其特征在于,一个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进行64次复数加法运算,基-16蝶形运算的每次计算结果采用对应的寄存器进行数据暂存。
6.根据权利要求4所述的一种基于FPGA实现65536点FFT的方法,其特征在于,RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至32767,在第二级、第三级和第四级的基-16蝶形运算之前需要计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位宽对运算结果进行数据截断处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610186675.9A CN105893326B (zh) | 2016-03-29 | 2016-03-29 | 基于fpga实现65536点fft的装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610186675.9A CN105893326B (zh) | 2016-03-29 | 2016-03-29 | 基于fpga实现65536点fft的装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105893326A CN105893326A (zh) | 2016-08-24 |
CN105893326B true CN105893326B (zh) | 2019-02-01 |
Family
ID=57014912
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610186675.9A Active CN105893326B (zh) | 2016-03-29 | 2016-03-29 | 基于fpga实现65536点fft的装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105893326B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113111300B (zh) * | 2020-01-13 | 2022-06-03 | 上海大学 | 具有优化资源消耗的定点fft实现*** |
CN112328958B (zh) * | 2020-11-10 | 2024-06-21 | 河海大学 | 一种基于基-64的二维fft架构的优化数据重排方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6167416A (en) * | 1997-09-26 | 2000-12-26 | Xilinx, Inc. | System and method for RAM-partitioning to exploit parallelism of radix-2 elements in FPGAS |
CN102609396A (zh) * | 2012-01-19 | 2012-07-25 | 中国传媒大学 | 一种drm***中离散傅里叶变换处理装置和方法 |
CN102929837A (zh) * | 2012-09-18 | 2013-02-13 | 西安电子科技大学 | 基于fpga的高速定点fft处理器及其处理方法 |
CN102945224A (zh) * | 2012-09-18 | 2013-02-27 | 西安电子科技大学 | 基于fpga的高速可变点fft处理器及其处理方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100030831A1 (en) * | 2008-08-04 | 2010-02-04 | L-3 Communications Integrated Systems, L.P. | Multi-fpga tree-based fft processor |
US20110153706A1 (en) * | 2009-12-21 | 2011-06-23 | L3 Communications Integrated Systems, L.P. | Fast fourier transform architecture |
-
2016
- 2016-03-29 CN CN201610186675.9A patent/CN105893326B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6167416A (en) * | 1997-09-26 | 2000-12-26 | Xilinx, Inc. | System and method for RAM-partitioning to exploit parallelism of radix-2 elements in FPGAS |
CN102609396A (zh) * | 2012-01-19 | 2012-07-25 | 中国传媒大学 | 一种drm***中离散傅里叶变换处理装置和方法 |
CN102929837A (zh) * | 2012-09-18 | 2013-02-13 | 西安电子科技大学 | 基于fpga的高速定点fft处理器及其处理方法 |
CN102945224A (zh) * | 2012-09-18 | 2013-02-27 | 西安电子科技大学 | 基于fpga的高速可变点fft处理器及其处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105893326A (zh) | 2016-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103970720B (zh) | 基于大规模粗粒度嵌入式可重构***及其处理方法 | |
CN103970718A (zh) | 一种快速傅里叶变换实现装置及方法 | |
WO2018129930A1 (zh) | 快速傅里叶变换处理方法、装置和计算机存储介质 | |
CN103984560A (zh) | 基于大规模粗粒度嵌入式可重构***及其处理方法 | |
US9262378B2 (en) | Methods and devices for multi-granularity parallel FFT butterfly computation | |
CN101847986A (zh) | 一种实现fft/ifft变换的电路及方法 | |
CN105893326B (zh) | 基于fpga实现65536点fft的装置和方法 | |
CN104050148B (zh) | 快速傅里叶变换加速器 | |
CN102129419B (zh) | 基于快速傅立叶变换的处理器 | |
CN103493039B (zh) | 数据处理方法、数据处理装置、接入设备和用户设备 | |
US20140089370A1 (en) | Parallel bit reversal devices and methods | |
CN105975436A (zh) | 一种SoC***中通用可配置加速单元的IP电路 | |
Bergland et al. | A fast Fourier transform global, highly parallel processor | |
CN202281998U (zh) | 一种标量浮点运算加速器 | |
CN109800191B (zh) | 用于计算序列数据的协方差的方法及装置 | |
Malashri et al. | Low power and memory efficient FFT architecture using modified CORDIC algorithm | |
CN109086537B (zh) | 基于fpga的粒子群算法加速方法 | |
RU188978U1 (ru) | Унифицированная реконфигурируемая схема коммутации быстрого преобразования фурье | |
CN103605636B (zh) | 一种实现fft运算的装置及方法 | |
Li et al. | The implementation of high-speed FFT processor based on FPGA | |
Banerjee et al. | A Novel Paradigm of CORDIC-Based FFT Architecture Framed on the Optimality of High-Radix Computation | |
CN106201999B (zh) | 混合基dft/idft并行读取及计算方法和装置 | |
CN103440228B (zh) | 一种基于融合乘加指令加速fft计算的方法 | |
US6438568B1 (en) | Method and apparatus for optimizing conversion of input data to output data | |
CN104572578B (zh) | 用于显著改进微控制器中fft性能的新颖方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20221216 Address after: 710075 Room 10401-371, Unit 1, Building 1, Liren Science Park, Gaoxin 6th Road, High tech Zone, Xi'an City, Shaanxi Province Patentee after: Xi'an Zhuoming Electronic Technology Co.,Ltd. Address before: 710054 No. 58, middle of Yanta Road, Shaanxi, Xi'an Province, Xi'an University of Science And Technology Patentee before: XI'AN University OF SCIENCE AND TECHNOLOGY |
|
TR01 | Transfer of patent right |