基于fpga实现65536点fft的装置和方法

文档序号:10534785阅读:731来源:国知局
基于fpga实现65536点fft的装置和方法
【专利摘要】本发明属于数字信号处理领域,公开了一种基于FPGA实现65536点FFT的装置和方法。通过在输入输出部分、存储部分及处理部分提高一个时钟周期内能够处理的数据点数,从而加快FFT的运算速度。在输入接口部分,通过采用大位宽的数据线实现并行数据输入,节省数据输入的时间;在存储部分,用无冲突方式进行存储,使得一个时钟周期能够同时读写16点的数据,并将运算结果进行原位存储节省RAM资源;在处理部分,通过采用基?16的运算核,加快处理速度,使得一个时钟周期能够处理16点的数据;在输出接口部分,同样通过采用大位宽的并行输出技术,实现处理结果的高速输出。
【专利说明】
基于FPGA实现65536点FFT的装置和方法
技术领域
[0001 ]本发明涉及数字信号处理领域,尤其涉及一种基于FPGA实现65536点FFT的装置和 方法。
【背景技术】
[0002] 傅里叶变换在理论上有着极其重要的意义。随着计算机技术的发展,离散傅里叶 变换(DFT)的出现,使傅里叶变换在工程上进入实际应用阶段。然而由于DFT算法的运算工 作量十分巨大,运算时间长,从而限制了这种数据处理方法的应用。随后,快速傅里叶变换 (FFT)的出现,将DFT的运算量从0(N2)降到了 0(Nlog2N)次,在数字信号处理技术领域实现 了突破性的进展。FFT作为时域和频域转换的基本运算,已经成为数字信号处理的必要手 段,广泛应用于雷达、通信、声纳和图像处理等领域。但随着技术的推动和需求的牵引,数字 信号处理系统需要处理的数据量变得非常巨大,并要求达到全实时的处理速度,因此对FFT 运算速度的要求也越来越高。
[0003] 现有技术中对于提高FFT的运算速度,大部分采用了基-4算法,只有个别使用基4 核拼接实现了基16算法,但是实现点数只有4096点。X现有FFT处理IP核最高支持65536点的 FFT,但是其运算最快的结构(流水数据流结构)进行这些数据处理仍然需要131448个时钟, 因此对于实时信号处理来说,现有FFT技术均难以满足实时性的要求。

【发明内容】

[0004] 针对上述问题,本发明的目的在于提供基于FPGA实现65536点FFT的装置和方法, 克服现有技术中FFT处理运算速度慢的问题。
[0005] 本发明的技术思路是:通过在输入输出部分、存储部分及处理部分提高一个时钟 周期内能够处理的数据点数,从而加快FFT的运算速度。在输入接口部分,通过采用大位宽 的数据线实现并行数据输入,节省数据输入的时间;在存储部分,使得一个时钟周期能够同 时读写16点的数据;在处理部分,通过采用基-16的运算核,加快处理速度,使得一个时钟周 期能够处理16点的数据;在输出接口部分,同样通过采用大位宽的并行输出技术,实现处理 结果的高速输出。
[0006] 为达到上述目的,本发明的实施例采用如下技术方案予以实现。
[0007] 技术方案一:
[0008] 一种基于FPGA实现65536点FFT的装置,所述装置包括:
[0009] 数据输入模块,用于在一个时钟周期内同时输入16点数据;
[0010] 数据选通模块,设置有数据输入使能端和运算结果输入使能端,所述数据输入使 能端用于将数据输入模块输入的数据选通到RAM存储模块进行存储,所述运算结果使能端 用于将基-16蝶形运算模块输出的运算结果数据选通到RAM存储模块进行存储;
[0011] RAM地址生成模块,用于生成RAM存储模块的存储地址;所述RAM地址生成模块在一 个时钟周期内同时生成16个地址;
[0012] RAM存储模块,用于存储所述数据输入模块输入的65536点数据;或者用于存储基-16蝶形运算模块输出的运算结果数据;
[0013] 第一调序模块,用于从所述RAM存储模块中并行读入16点数据,并将所述16点数据 按照基-16蝶形运算的输入要求进行调序;
[0014] 基-16蝶形运算模块,用于预先存储基-16蝶形运算的旋转因子,并根据所述旋转 因子和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据;
[0015] 第二调序模块,用于将所述运算结果数据按照原位存储的原则进行调序,并将调 序后的结果数据对应存储在所述RAM存储模块中。
[0016] 本发明技术方案一的特点和进一步的改进为:
[0017] (1)所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口,所述 数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结 果输入模块用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果 数据。
[0018] (2)所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块 存储4096点数据;
[0019]所述65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536 点数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数 据无冲突并行输出。
[0020] (3)-个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两 级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法 共进行64次复数加法运算。
[0021] (4)65536点FFT的实现需要进行四级基-16蝶形运算,每级进行4096次蝶形运算, RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至32767,所述 装置还包括溢出检测和数据截断模块,用于在第二级、第三级和第四级的基-16蝶形运算之 前计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位宽对运算结果进 行数据截断处理。
[0022] 技术方案二:
[0023] 一种基于FPGA实现65536点FFT的方法,应用于如技术方案一中任一项所述的装置 中,65536点FFT的实现需要进行四级基-16蝶形运算,所述方法包括如下步骤:
[0024]步骤1,数据输入模块输入需要处理的数据,所述数据输入模块在一个时钟周期内 同时输入16点数据;
[0025] 步骤2,数据选通模块选通数据输入使能端,使所述数据输入模块输入的65536点 数据存储于RAM存储模块;
[0026] 步骤3,RAM地址生成模块生成所述数据输入模块输入的数据在所述RAM存储模块 中的存储地址;
[0027] 步骤4,所述数据输入模块输入的数据按照所述RAM地址生成模块生成的地址存储 于所述RAM存储模块,所述RAM地址生成模块在一个时钟周期内同时生成16个地址;
[0028] 步骤5,所述第一调序模块从所述RAM存储模块中并行读入16点数据,并将所述16 点数据按照基-16蝶形运算的输入要求进行调序;
[0029] 步骤6,所述基-16蝶形运行模块中预先存储有基-16蝶形运算的旋转因子,所述 基-16蝶形运算模块根据所述旋转因子和所述第一调序模块输入的16点数据进行基-16蝶 形运算,得到运算结果数据;
[0030] 步骤7,第二调序模块将所述基-16蝶形运算模块得到的运算结果数据按照原位存 储的原则进行调序,并将调序后的结果数据对应存储在所述RAM存储模块中;
[0031 ]步骤8,RAM地址生成模块生成所述第二调序模块输入的运算结构数据在所述RAM 存储模块中的存储地址;
[0032]步骤9,所述数据选通模块选通运算结果输入使能端,使得第二调序模块将所述 基-16蝶形运算模块输出的运算结果数据按照所述RAM地址生成模块生成的地址存储到所 述RAM存储模块;
[0033] 步骤10,将步骤5至步骤9重复执行4096次,完成第一级基-16蝶形运算;
[0034] 步骤11,将步骤5至步骤10重复执行4次,完成四级基-16蝶形运算。
[0035]本发明技术方案二的特点和进一步的改进为:
[0036] (1)所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口,所 述数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算 结果输入模块用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结 果数据。
[0037] (2)所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块 存储4096点数据;
[0038]将65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点 数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据 无冲突并行输出。
[0039] (3)-个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两 级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法 共进行64次复数加法运算,基-16蝶形运算的每次计算结果采用对应的寄存器进行数据暂 存。
[0040] (4)RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至 32767,在第二级、第三级和第四级的基-16蝶形运算之前需要计算对应的上一级基-16蝶形 运算结果的溢出位宽,并根据所述溢出位宽对运算结果进行数据截断处理。
[0041] 本发明技术方案与现有技术相比,具有以下有益效果:(1)处理速度快,用基-16核 FFT算法可以在一个时钟周期内同时处理16点数据的FFT运算,在相同的处理点数下需要更 少的运算时间;(2)数据的输入输出速度快,本发明技术方案采用多路并行数据输入输出方 式,一个时钟周期可以输入输出16点数据,相较于Xilinx公司所提供的IP核一次只能输入 输出1-4点数据,消除了数据输入输出瓶颈,提高了数据的输入输出效率;(3)节省RAM资源, 本发明技术方案采用原位存储设计,数据读取运算后还是存储到原来的RAM中,仅需要使用 一个65536点的RAM存储空间,几乎是Xilinx公司提供的IP核所使用RAM资源的1/4,最大限 度地减少了RAM资源的使用。
【附图说明】
[0042]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0043]图1为本发明实施例提供的一种基于FPGA实现65536点FFT的装置结构示意图; [0044]图2为本发明实施例提供的一种基于FPGA实现65536点FFT的方法流程示意图一;
[0045]图3为本发明实施例提供的基-16蝶形运算模块的运算过程示意图;
[0046]图4为本发明实施例提供的一种基于FPGA实现65536点FFT的方法流程示意图二。
【具体实施方式】
[0047]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0048]本发明技术方案通过采用基-16蝶形运算模块作为数据处理单元,则65536点数据 的FFT需要4级运算,每一级进行4096次蝶形运算。数据串行输入后先存储到RAM存储模块 中,然后按照一定的规律每次读取一组16点数据,进行16路并行蝶形运算后原位存储,然后 处理下一组数据,一级运算完毕后进行下一级运算。每一级4096次蝶形运算后会得到一个 溢出位宽,在下一级运算时根据该位宽信息将数据进行截断处理,以防止数据溢出,如此下 去实现65536点数据的FFT运算。
[0049]本发明实施例提供一种基于FPGA实现65536点FFT的装置,如图1所示,所述装置包 括:
[0050]数据输入模块1,用于在一个时钟周期内同时输入16点数据。
[0051]示例性的,数据输入模块采用大位宽数据线高速输入所要处理的数据。本发明技 术方案中数据输入模块可以根据输入数据位宽进行选择设置,支持1、2、4、8、16个数据同时 输入。设置为16时,在一个时钟周期内可以同时输入16个数据,能够提高数据输入速度。 [0052]数据选通模块2,设置有两个使能端:数据输入使能端和运算结果输入使能端,数 据输入使能端用于将数据输入模块输入的数据选通到RAM存储模块进行存储;运算结果输 入使能端用于将基-16蝶形运算模块输出的运算结果数据选通到RAM存储模块进行存储。 [0053]具体的,当数据输入模块输入数据时,数据选通模块使数据输入使能端有效,并将 数据输入模块输入的数据选通到RAM存储模块进行存储;当数据经过基-16蝶形运算模块运 算结束后,将运算结果进行存储时,数据选通模块使运算结果输入使能端有效,并将基-16 蝶形运算模块输出的运算结果选通到RAM存储模块进行存储。
[0054] 具体的,所述RAM存储模块为双端口RAM,包含数据输入端口和运算结果输入端口, 所述数据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运 算结果输入模块用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算 结果数据。
[0055] RAM地址生成模块3,用于生成RAM存储模块的存储地址;所述RAM地址生成模块在 一个时钟周期内同时生成16个地址。
[0056] RAM存储模块4,用于存储所述数据输入模块输入的65536点数据;或者用于存储 基-16蝶形运算模块输出的运算结果数据。
[0057]所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储 4096点数据;
[0058]所述65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536 点数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数 据无冲突并行输出。
[0059] DIT-FFT要求间隔为1、16、256、4096的点不能存储在同一个1^11中。1^11地址生成模 块所设计的存储方式是:16个数据为一组依次存储到16个RAM的地址为0的区域,地址为1的 区域……AAM地址每增加1数据存储的起始RAM编号就加1,这样进行存储的数据就可以实 现无冲突16路并行读取。对于65536点的DIT-FFT,第一级抽取间隔为4096,第二级抽取间隔 为2048,第三级抽取间隔为256,第四级抽取间隔为16。因此间隔为1、16、256、4096的点不能 存储在同一个RAM中,否则读取运算时会产生冲突。分析后得到数据存储规律如表1所示。
[0060]表1 RAM数据存储规律
[0063] 需要补充的是,RAM存储模块中的数据往出读取时需要根据要求的数据间隔进行 读取数据,所以RAM地址生成模块在每一级运算时生成的地址都不相同,其中第1、2、3、4级 的地址间隔分别为4096、256、16、1,即第i级的地址间隔为65536/16 1。
[0064] 第一调序模块5,用于从所述RAM存储模块中并行读入16点数据,并将所述16点数 据按照基-16蝶形运算的输入要求进行调序。
[0065] 为了实现高速运算,采用无冲突存储方式进行存储,以同时并行读取16点数据,使 基-16蝶形运算模块能够全速运行。由于从16个RAM读出的数据的顺序和基-16蝶形运算模 块要求的数据输入顺序不一致,因此设计第一调序模块将存储在不同RAM里的数据按照蝶 形运算单元的输入要求进行调序。
[0066] 示例性的,如第一次蝶形运算输入的16个数据为0,4096,…,15*4096,要求RAM0接 入基-16蝶形运算模块的第一个输入,而第二次蝶形运算输入的16个数据为1,1+4096,1+2* 4096,…,1+15*4096,要求将RAM1调序到基-16蝶形运算模块的第一个输入。
[0067] 基-16蝶形运算模块6,用于预先存储基-16蝶形运算的旋转因子,并根据所述旋转 因子和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据。
[0068] 具体的,一个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进 行两级复数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数 加法共进行64次复数加法运算。
[0069] 第二调序模块7,用于将所述运算结果数据按照原位存储的原则进行调序,并将调 序后的结果数据对应存储在所述RAM存储模块中。
[0070] 需要说明的是,65536点FFT的实现需要进行四级基-16蝶形运算,每级进行4096次 蝶形运算,RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至 32767,因此所述装置还包括溢出检测和数据截断模块8,用于在第二级、第三级和第四级的 基-16蝶形运算之前计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位 宽对运算结果进行数据截断处理。
[0071]本发明实施例还提供一种基于FPGA实现65536点FFT的方法,应用于上述实施例所 述的装置中,65536点FFT的实现需要进行四级基-16蝶形运算,如图2所示,所述方法包括如 下步骤:
[0072]步骤1,数据输入模块输入需要处理的数据,所述数据输入模块在一个时钟周期内 同时输入16点数据。
[0073]步骤2,数据选通模块选通数据输入使能端,使所述数据输入模块输入的65536点 数据存储于RAM存储模块。
[0074] 步骤3,RAM地址生成模块生成所述数据输入模块输入的数据在所述RAM存储模块 中的存储地址。
[0075] 步骤4,所述数据输入模块输入的数据按照所述RAM地址生成模块生成的地址存储 于所述RAM存储模块,所述RAM地址生成模块在一个时钟周期内同时生成16个地址。
[0076] 所述RAM存储模块为双端口 RAM,包含数据输入端口和运算结果输入端口,所述数 据输入端口用于在数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果 输入模块用于在运算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数 据。
[0077] 所述RAM存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储 4096点数据。
[0078]将65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点 数据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据 无冲突并行输出。
[0079]步骤5,所述第一调序模块从所述RAM存储模块中并行读入16点数据,并将所述16 点数据按照基-16蝶形运算的输入要求进行调序。
[0080] 步骤6,所述基-16蝶形运行模块中预先存储有基-16蝶形运算的旋转因子,所述 基-16蝶形运算模块根据所述旋转因子和所述第一调序模块输入的16点数据进行基-16蝶 形运算,得到运算结果数据。
[0081] -个时钟周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复 数乘法和四级复数加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进 行64次复数加法运算,基-16蝶形运算的每次计算结果采用对应的寄存器进行数据暂存。 [0082]将调序后的数据输入基-16蝶形运算单元,同时读取预先存储在ROM里的旋转因 子,进行16点的FFT变换。基-16蝶形运算模块是FFT运算的基本单元,FFT的基-16分解公式 为:
[0084] 示例性的,如图3所示为基-16蝶形运算模块的具体运算过程:每一列节点可以用 一次运算得到,第一列运算是输入数据同旋转因子相乘,第二列运算是加减和乘_j的运算, 第三列运算是一部分数据不变,另一部分数据乘以固定旋转因子,最后是加减和乘-j的运 算。要注意一部分数据乘以固定旋转因子另一部分数据不变时,不变的数据要通过移位寄 存器实现另一部分数据的同步。
[0085] 需要补充的是,在基-16蝶形运算模块中设置有多个寄存器,用于对基-16蝶形运 算模块的中间结果进行暂存,目的是加快运算速度,比如四个数的加法,同时进行的话一个 时钟周期需要进行三个加法运算,比较慢,因此可以将两个数分别相加,一个时钟周期进行 了两个加,然后数据暂存,再进行一个加就可以了。
[0086]旋转因子ROM用来存储旋转因子。数据处理第一级实现了4096个16点FFT,第二级 实现了256个256点FFT,第三级实现了 16个4096点FFT,第四级实现了65536点的FFT。不同的 点数对应的旋转因子是不同的,但是小点数的旋转因子其实是包含在大点数的旋转因子中 的,因此只需要存储65536点FFT的旋转因子,其他点数的旋转因子通过地址偏移得到。
[0087] 步骤7,第二调序模块将所述基-16蝶形运算模块得到的运算结果数据按照原位存 储的原则进行调序,并将调序后的结果数据对应存储在所述RAM存储模块中。
[0088] 由于数据运算后要进行原位存储,所以采用调序2模块将基16蝶形运算单元的运 算结果按照RAM的存储规则进行调序。该过程可以看做步骤5的逆过程。
[0089] 步骤8,RAM地址生成模块生成所述第二调序模块输入的运算结构数据在所述RAM 存储模块中的存储地址。
[0090] 步骤9,所述数据选通模块选通运算结果输入使能端,使得第二调序模块将所述 基-16蝶形运算模块输出的运算结果数据按照所述RAM地址生成模块生成的地址存储到所 述RAM存储模块。
[0091] 步骤10,将步骤5至步骤9重复执行4096次,完成第一级基-16蝶形运算;
[0092] 步骤11,将步骤5至步骤10重复执行4次,完成四级基-16蝶形运算。
[0093] RAM存储模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至 32767,在第二级、第三级和第四级的基-16蝶形运算之前需要计算对应的上一级基-16蝶形 运算结果的溢出位宽,并根据所述溢出位宽对运算结果进行数据截断处理。
[0094]本设计采用块浮点的数据格式,对数据进行动态的缩放处理,以保证数据精度和 运算速度。具体地,在每一次蝶形运算后对输出的16个复数,共32个数据进行溢出检测处 理,也就是比较大小,然后记录最大值的溢出位数,并和本级的最大溢出位数进行比较保留 较大值。这样一级4096次蝶形运算后就得到了本级的溢出位宽,在下一级进行数据处理时 根据该溢出位宽将数据进行截断,并加到整体的块浮点指数上。
[0095]通过所设计的控制模块来实现整个FFT运算的流程控制。该控制模块采用一个14 位的信号step[13:0]作为地址生成等模块运行的参考。step[ll:0]的每个值代表一次蝶形 运算,step[ 13:12]代表所处的级。从开始进行数据处理,该寄存器在每个时钟周期都进行 加一计数,在每级结束就暂停计数,下一级开始运算就继续计数。直到整个运算结束。
[0096]本发明实施例提供的一种基于FPGA实现65536点FFT的方法流程示意图具体可参 照图4进行。
[0097]本发明的设计方法,与现有技术相比,具有以下有益效果:
[0098] (1)处理速度快。用基-16核FFT算法可以在一个时钟周期内同时处理16个点的FFT 运算,在相同的处理点数下需要更少的运算时间。本设计中每一级运算都采用流水线设计, 提高了处理速度。蝶形运算单元设计时,每一步都用一个寄存器进行数据暂存,这样就可以 实现流水线式数据处理,一级4096次蝶形运算只需要16个时钟的数据潜伏期,加上4096个 时钟即可实现一级处理。因此,所设计的算法能够大幅度提高运算速度,仿真结果表明进行 65536点FFT运算只需要16448个时钟周期,几乎是Xilinx公司所提供IP核处理速度的8倍。
[0099] (2)数据的输入输出速度快。所设计的多路并行数据输入输出方式,一个时钟周 期可以输入输出16个数据,相较于Xilinx公司所提供的IP核一次只能输入输出1-4个数据, 消除了数据输入输出瓶颈,提高了数据的输入输出效率。
[0100] (3)节省RAM资源。本设计采用原位存储设计,数据读取运算后还是存储到原来的 RAM中,仅需要使用一个65536点的RAM存储空间,几乎是Xilinx公司提供的IP核所使用RAM 资源的1/4,最大限度地减少了 RAM资源的使用。
[0101] 本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在 执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘 等各种可以存储程序代码的介质。
[0102] 以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何 熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵 盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
【主权项】
1. 一种基于FPGA实现65536点FFT的装置,其特征在于,所述装置包括: 数据输入模块,用于在一个时钟周期内同时输入16点数据; 数据选通模块,设置有数据输入使能端和运算结果输入使能端,所述数据输入使能端 用于将数据输入模块输入的数据选通到RAM存储模块进行存储,所述运算结果使能端用于 将基-16蝶形运算模块输出的运算结果数据选通到RAM存储模块进行存储; RAM地址生成模块,用于生成RAM存储模块的存储地址;所述RAM地址生成模块在一个时 钟周期内同时生成16个地址; RAM存储模块,用于存储所述数据输入模块输入的65536点数据;或者用于存储基-16蝶 形运算模块输出的运算结果数据; 第一调序模块,用于从所述RAM存储模块中并行读入16点数据,并将所述16点数据按照 基-16蝶形运算的输入要求进行调序; 基-16蝶形运算模块,用于预先存储基-16蝶形运算的旋转因子,并根据所述旋转因子 和所述第一调序模块输入的16点数据进行基-16蝶形运算,得到运算结果数据; 第二调序模块,用于将所述运算结果数据按照原位存储的原则进行调序,并将调序后 的结果数据对应存储在所述RAM存储模块中。2. 根据权利要求1所述的一种基于FPGA实现65536点FFT的装置,其特征在于,所述RAM 存储模块为双端口 RAM,包含数据输入端口和运算结果输入端口,所述数据输入端口用于在 数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果输入模块用于在运 算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数据。3. 根据权利要求1所述的一种基于FPGA实现65536点FFT的装置,其特征在于,所述RAM 存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储4096点数据; 所述65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点数 据中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据无 冲突并行输出。4. 根据权利要求1所述的一种基于FPGA实现65536点FFT的装置,其特征在于,一个时钟 周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复数乘法和四级复数 加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进行64次复数加法运 算。5. 根据权利要求1所述的一种基于FPGA实现65536点FFT的装置,其特征在于,65536点 FFT的实现需要进行四级基-16蝶形运算,每级进行4096次蝶形运算,RAM存储模块中的数据 存储采用块浮点的数据格式,数据存储范围为-32768至32767; 所述装置还包括溢出检测和数据截断模块,用于在第二级、第三级和第四级的基-16蝶 形运算之前计算对应的上一级基-16蝶形运算结果的溢出位宽,并根据所述溢出位宽对运 算结果进行数据截断处理。6. -种基于FPGA实现65536点FFT的方法,应用于如权利要求1-4中任一项所述的装置 中,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蝶形运算。7. 根据权利要求6所述的一种基于FPGA实现65536点FFT的方法,其特征在于,所述RAM 存储模块为双端口 RAM,包含数据输入端口和运算结果输入端口,所述数据输入端口用于在 数据输入使能端的控制下存储数据输入模块输入的数据;所述运算结果输入模块用于在运 算结果输入使能端的控制下存储基-16蝶形运算模块输出的运算结果数据。8. 根据权利要求6所述的一种基于FPGA实现65536点FFT的方法,其特征在于,所述RAM 存储模块包含16个子存储模块,分别为RAM0-RAM15,每个子存储模块存储4096点数据; 将65536点数据以16点数据为一组依次存储于16个子存储模块中,且所述65536点数据 中间隔为1、16、256、4096的数据不能存储于相同的子存储模块中,从而实现16点数据无冲 突并行输出。9. 根据权利要求6所述的一种基于FPGA实现65536点FFT的装置,其特征在于,一个时钟 周期进行一次基-16蝶形运算,所述一次基-16蝶形运算需要进行两级复数乘法和四级复数 加法,其中两级复数乘法共进行23次复数乘法运算,四级复数加法共进行64次复数加法运 算,基-16蝶形运算的每次计算结果采用对应的寄存器进行数据暂存。10. 根据权利要求6所述的一种基于FPGA实现65536点FFT的方法,其特征在于,RAM存储 模块中的数据存储采用块浮点的数据格式,数据存储范围为-32768至32767,在第二级、第 三级和第四级的基-16蝶形运算之前需要计算对应的上一级基-16蝶形运算结果的溢出位 宽,并根据所述溢出位宽对运算结果进行数据截断处理。
【文档编号】G06F17/14GK105893326SQ201610186675
【公开日】2016年8月24日
【申请日】2016年3月29日
【发明人】贾艳艳
【申请人】西安科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1