CN103955447A - 基于dsp芯片的fft加速器 - Google Patents
基于dsp芯片的fft加速器 Download PDFInfo
- Publication number
- CN103955447A CN103955447A CN201410174795.8A CN201410174795A CN103955447A CN 103955447 A CN103955447 A CN 103955447A CN 201410174795 A CN201410174795 A CN 201410174795A CN 103955447 A CN103955447 A CN 103955447A
- Authority
- CN
- China
- Prior art keywords
- fft
- data
- module
- computing
- parallel
- 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.)
- Granted
Links
Abstract
本发明公开一种基于DSP芯片的FFT加速器,包括:模式配置模块,接收数据地址、运算规模及运算次数的配置数据;FFT运算控制模块,当运算规模小于能够直接支持的最大运算规模时控制FFT计算模块执行一维FFT运算,当大于能够直接支持的最大运算规模时,控制FFT计算模块执行二维FFT运算;数据访问控制模块,控制以DMA方式从存储器中读取运算数据并将运算结果写回存储器;FFT计算模块,根据FFT运算控制模块输出的控制信号并行执行FFT运算。本发明具有支持运算规模、运算次数和数据格式的多种配置方式、能够实现从小规模到大规模范围内的FFT运算、执行效果高、硬件资源利用率高的优点。
Description
技术领域
本发明涉及数据处理中的FFT计算技术领域,尤其涉及一种基于DSP芯片的FFT加速器。
背景技术
DFT(Discrete Fourier Transformation,离散傅里叶变换)是数字信号处理领域不可缺少的工具之一,它将一种信号从时域变换到频域,广泛应用于声学、图像、雷达、电信和无线信号处理等领域。FFT(Fast Fourier Transformation,快速傅立叶变换)是DFT的一种快速实现方法,FFT的出现使得DFT在实际应用中得到了更为广泛的应用。FFT算法是利用复指数常数的特性将信号序列x(n)或X(k)的排列次序进行重排并分解成短序列运算,将DFT运算复杂度由O(n2)降低到O(nlogn)。
在实时信号处理领域,需要支持实数FFT、复数FFT、实数IFFT(Inverse FFT)和复数IFFT的运算,数据格式可能是IEEE-754标准的浮点格式或定点格式,对于不同的应用FFT的运算规模变化也非常大,可能为数十点或数十万点。
现有技术中,部分DSP芯片中虽然提供了FFT加速方案,但支持的最大运算规模仅为1K,限制FFT加速器的应用范围,且通常仅能支持32位定点计算,对于更常用IEEE-754标准浮点格式不提供支持。例如TI C55X系列DSP芯片,其包含一个紧耦合FFT加速器(称为HWA),通过使用加速器指令可以实现FFT加速器与C55X DSP通讯,该FFT加速器仅支持32位定点格式的8点到1024点实数和复数FFT计算。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种结构简单、成本低廉、支持可变的运算规模且能够支持大规模的FFT运算、应用范围广、执行效率高的基于DSP芯片的FFT加速器。
为解决上述技术问题,本发明提出的技术方案为:
一种基于DSP芯片的FFT加速器,包括:
模式配置模块,用于从DSP内核接收数据地址、运算规模N=2k及运算次数M的配置数据,输出至FFT运算控制模块及数据访问控制模块;
FFT运算控制模块,用于判断运算规模N是否大于阈值N1,若为否,控制FFT计算模块进行N点一维FFT运算;若为是,控制FFT计算模块进行N1*N2的二维FFT运算,其中N=N1*N2,N1为FFT计算模块能够直接支持的最大FFT运算规模且N1大于或等于N2,输出控制信号至FFT计算模块;
数据访问控制模块,用于FFT计算模块执行运算时,根据数据地址控制以DMA方式从存储器中读取出运算数据至FFT计算模块,并将FFT计算模块输出的运算结果存储回存储器中;
FFT计算模块,用于根据FFT运算控制模块输出的控制信号并行执行FFT运算;进行一维FFT运算时,并行执行N点的一维FFT运算;进行二维FFT运算时,并行执行N2次N1点的列方向一维FFT计算,对计算结果进行旋转因子补偿,再并行执行N1次N2点的行方向一维FFT计算,完成N点的FFT运算。
作为本发明的进一步改进:还包括分别与数据访问控制模块、FFT计算模块的输出端连接的数据格式转换模块,所述数据格式转换模块用于当数据访问控制模块读取的运算数据为定点格式时将运算数据转换为浮点格式,输出至FFT计算模块,并将FFT计算模块输出的运算结果转换为对应的定点格式后输出回数据访问控制模块。
作为本发明的进一步改进:所述FFT计算模块包括两个并行的FFT执行子模块以及分别与两个FFT执行子模块连接的CORDIC补偿旋转因子计算子模块;两个所述FFT执行子模块并行执行两组数据的FFT计算,其中一组数据为规模小于或等于N1点的数据,所述CORDIC补偿旋转因子计算子模块根据数据地址及运算规模N采用CORDIC算法计算补偿旋转因子,分别输出至两个所述FFT执行子模块。
作为本发明的进一步改进:每个所述FFT执行子模块包括FFT计算控制单元、数据存储单元、并行蝶形运算单元以及旋转因子存储单元;所述FFT计算控制单元接收FFT运算控制模块输出的控制信号,控制并行蝶形运算单元和CORDIC补偿旋转因子计算子模块的启动;所述数据存储单元存储并行蝶形运算单元待输入的运算数据以及待输出的运算结果;所述并行蝶形运算单元并行执行一组数据的蝶形运算或补偿旋转因子计算,所述旋转因子存储单元存储蝶形运算时的旋转因子。
作为本发明的进一步改进:所述并行蝶形运算单元包括两个并行的蝶形运算部件。
作为本发明的进一步改进:每个所述蝶形运算部件包括多个IEEE-754标准的单精度浮点乘法器、多个单精度浮点加/减法器。
作为本发明的进一步改进:所述单精度浮点乘法器为4个,所述单精度浮点加/减法器为6个。
作为本发明的进一步改进:所述数据存储单元包括两组数据存储器,对待输入的运算数据以及待输出的运算结果进行乒乓结构的缓存;每组所述数据存储器包括4个双端口的RAM。
作为本发明的进一步改进:所述旋转因子存储单元采用两个查找表,每个所述查找表具有N1个选项;每个所述查找表对应连接一个所述蝶形运算部件。
与现有技术相比,本发明的优点在于:
(1)本发明根据运算规模及运算次数的配置数据控制执行FFT运算,对于大规模的FFT,将N点一维FFT运算转换为二维FFT运算,能够实现小规模到大规模范围内的FFT运算,应用范围广泛、灵活性强;执行FFT运算时采用IEEE-754标准的浮点运算并通过CORDIC算法计算补偿旋转因子,能够支持更为常用的浮点格式FFT运算,通过数据格式的转换还能够支持32位定点数据格式,运算规模、运算次数及数据格式支持多种配置模式。
(2)本发明执行FFT计算时采用两个FFT执行子模块并行执行两组数据的FFT计算,每个FFT执行子模块采用两个蝶形运算部件并行执行,能够有效的加速实现FFT运算、提高加速器的执行性能;同时由两个FFT执行子模块共享一个CORDIC补偿旋转因子计算子模块,每个FFT执行子模块中蝶形运算与旋转因子补偿计算复用同一硬件结构,使硬件执行效率最大化同时节省硬件资源。
(3)本发明在FFT计算时采用两组乒乓多体结构的数据存储器存储读入或写出的数据,两组数据的FFT计算的交替执行,同时每组数据存储器由4个RAM组成,保证数据存储器的初始化与FFT计算同时进行,通过FFT的计算开销隐藏从存储器访问数据的开销,从而提高FFT的计算性能。
附图说明
图1是本实施例基于DSP芯片的FFT加速器结构示意图。
图2是本实施例中基于DSP芯片的FFT加速器的外部接口结构示意图。
图3是本实施例中CORDIC补偿旋转因子计算子模块结构示意图。
图4是本实施例中角度计算单元结构示意图。
图5是本实施例中迭代单元ROT结构示意图。
图6是本实施例中第一FFT执行子模块(FFT-PE[1])结构示意图。
图7是本实施例中并行蝶形运算单元结构示意图。
图8是本实施例中蝶形运算部件结构示意图。
图9是本实施例中数据存储单元结构示意图。
图10是本实施例中旋转因子存储单元结构示意图。
图11是本实施例中两个FFT执行子模块FFT-PE计算时的时序原理示意图。
图例说明
1、模式配置模块;2、FFT运算控制模块;3、数据访问控制模块;4、FFT计算模块;41、第一FFT执行子模块(FFT-PE[1]);42、第二FFT执行子模块(FFT-PE[2]);43、CORDIC补偿旋转因子计算子模块;411、FFT计算控制单元;412、数据存储单元;413、并行蝶形运算单元;414、旋转因子存储单元;5、数据格式转换模块。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1所示,本实施例基于DSP芯片的FFT加速器结构,包括:
模式配置模块1,用于从DSP内核接收数据地址、运算规模N=2k及运算次数M的配置数据,输出至FFT运算控制模块2及数据访问控制模块3;
FFT运算控制模块2,用于判断运算规模N是否大于阈值N1,若为否,控制FFT计算模块4进行N点一维FFT运算;若为是,将初始运算数据转换为N1*N2的二维矩阵并控制FFT计算模块4进行二维FFT运算,其中N=N1*N2,N1为为FFT计算模块4能够直接支持的最大FFT运算规模且N1大于或等于N2,输出控制信号至FFT计算模块4;
数据访问控制模块3,用于FFT计算模块4执行运算时,根据数据地址控制以DMA方式从存储器中读取出运算数据至FFT计算模块4,并将FFT计算模块4输出的运算结果存储回存储器中;
FFT计算模块4,用于根据FFT运算控制模块2输出的控制信号并行执行FFT运算;进行一维FFT运算时,并行执行N点的一维FFT运算;进行二维FFT运算时,并行执行N2次N1点的列方向一维FFT计算,对计算结果进行旋转因子补偿,再并行执行N1次N2点的行方向一维FFT计算,完成N点的FFT运算。
本实施中,阈值N1由DSP芯片中实际采用的FFT计算模块4能够直接支持的最大FFT运算规模决定,如采用现有技术中的FFT加速器。运算规模N小于阈值N1时,FFT加速器可直接支持,通过执行N点的一维FFT运算完成;对于大于阈值N1的大规模FFT运算,则将N点FFT运算转换为二维FFT运算,FFT运算采用浮点格式。采用以上方法,本实施例基于DSP芯片的FFT加速器能够支持的最大规模为N1*N1的FFT运算。
本实施例中,还包括分别与数据访问控制模块3、FFT计算模块4的输出端连接的数据格式转换模块5。对于定点输入数据,数据格式转换模块5将数据转换为浮点格式并将FFT计算结果转换为相应的定点格式。输入的数据为定点格式时,在数据输入阶段,数据访问控制模块3从存储器中读取定点格式的初始数据,由数据格式转换模块5将数据转换为浮点格式输出至FFT计算模块4;在数据写回阶段时,将FFT计算模块4输出的运算结果转换为对应的定点格式后输出回数据访问控制模块3。工作时,由FFT运算控制模块2输出数据格式及计算阶段至数据访问控制模块3,数据格式转换模块5根据数据格式及计算阶段执行数据格式的转换。采用浮点格式计算FFT运算,能够实现对实际应用中更为常用的IEEE-754标准浮点格式数据的FFT计算,同时通过数据格式的转换也能够支持定点格式数据的计算,对输入数据的格式要求灵活。
本实施例中,模式配置模块1通过命令总线从DSP内核接收配置数据,其中配置数据包括初始数据起始地址、中间数据地址及结果数据地址、运算规模N、FFT运算个数M、浮点和定点选择信号以及定点格式信号。FFT运算控制模块2根据配置数据,控制FFT计算模块4执行不同运算规模、不同FFT运算个数以及浮点或定点格式的FFT运算,能够支持可变的运算规模及FFT运算个数,输入数据可以为IEEE-754标准的单精度浮点格式或32位定点数据格式,能够支持多种配置模式,满足不同嵌入式应用领域的要求,应用范围广泛且灵活性强。在其它实施例中配置数据还可包括FFT与IFFT选择信号、实数与复数选择信号、浮点和定点选择信号以及定点格式信号,FFT运算控制模块2根据配置数据控制FFT计算模块4执行FFT或IFFT运算、实数或复数类型的FFT/IFFT运算,实现多种运算模式。
对于N点FFT且N>N1,总共需要执行次蝶形运算,包括级、每级次蝶形运算。小规模FFT计算中,即运算规模N小于N1时,同一级的次蝶形运算可以并行执行。
本实施例中,由FFT运算控制模块2控制FFT计算模块4运行完成N点FFT运算。FFT运算控制模块2通过命令总线从DSP内核接收命令,命令包括启动FFT执行命令、暂停FFT执行命令、恢复FFT执行命令以及作废FFT执行命令,控制FFT计算模块4执行相应的命令。启动FFT执行命令为启动进行FFT计算,暂停FFT执行命令为暂停数据访问总线,恢复FFT执行命令为恢复本次FFT计算,作废FFT执行命令为作废本次FFT运算。当FFT计算模块4完成所有FFT计算后,FFT运算控制模块2立即向DSP内核发送FFT完成中断信号,同时置完成寄存器的值为1。
FFT运算控制模块2控制FFT计算模块4启动FFT执行命令时,发送启动命令并根据配置数据控制FFT计算模块4执行,输出相应的控制信号及运算规模N至FFT计算模块4并向数据访问控制模块3发送数据访问请求。数据访问控制模块3响应FFT运算控制模块2的数据访问请求,根据数据地址控制读取运算数据至FFT计算模块4进行运算。对于大于N1点的FFT运算,FFT运算控制模块2将N点初始运算数据视为N2*N1的二维矩阵,控制FFT计算模块4执行二维FFT运算,FFT计算模块4进行二维FFT运算时,首先并行执行N2次N1点的列方向一维FFT计算,进行旋转因子补偿后完成列方向的FFT运算,再对列方向的FFT运算结果并行执行N1次N2点的行方向一维FFT计算,完成N点的FFT运算;对于运算规模N小于N1的FFT运算,直接并行执行N点的一维FFT。
FFT运算过程中,需要将初始运算数据、中间数据及运算结果存储在片外或片上存储器中。对于片外的DDR存储器,能够提供较大的存储空间(G量级)来存储初始数据和运算结果,然而DDR存储器组织结构特点决定了需要以突发方式连续访问数据;对于片上SRAM存储器,能够以随机访问方式快速得到SRAM中任何地址中的数据,其数据组织较为灵活,然而占用了DSP芯片资源且存储容量有限(M量级),进行大规模FFT计算时原始数据和计算结果不能都存储在片上SRAM存储器中。
如图2所示,本实施例中基于DSP芯片的FFT加速器的外部接口结构,由数据访问控制模块3实现与DSP芯片内或芯片外存储器的数据交互,模式配置模块1接收DSP内核的配置数据、FFT运算控制模块2接收DSP内核的命令并将FFT完成中断信号发送至DSP内核。FFT计算模块4每次执行计算时,由FFT运算控制模块2向数据访问控制模块3发送数据访问请求,控制进行运算数据的读写。数据访问控制模块3将FFT运算控制模块2的读、写数据请求转换为DDR总线协议的访问或者SRAM总线协议的访问,其中对于读数据请求,数据访问控制模块3根据数据地址从片外DDR存储器或者片上SRAM存储器中以突发方式读出数据,并将数据写到FFT计算模块4的数据存储器中;对于写数据请求,从FFT计算模块4的数据存储器中读出数据,并写回到片外DDR存储器或者片上SRAM中。
本实施例中,结合片外DDR存储器和片上SRAM存储器对数据进行存储,利用片外DDR存储器存储数据量大的初始运算数据和计算结果,利用片上SRAM存储器随机访问的特性存储FFT计算时的中间数据,同时使用片上SRAM存储器完成二维FFT计算时的二维数据转置,避免对片外DDR存储器中数据进行按列访问。采用DMA的方式实现DSP芯片内外数据的交互,能够最大化发挥各个数据通路的带宽,结合DDR存储器和SRAM存储器的优点共同实现对大点数FFT运算数据的存储,存储带宽利用率高、有效发挥DSP芯片的流水线计算效率。
一级蝶形运算表达式可以表示为:
其中X(k)、X(k+B)为本级蝶形运算的数据输入,X(k)'、X(k+B)'为本级蝶形运算的运算结果, 为旋转因子。
假定X=X(k)=Xr+i*Xi,Y=X(k+B)=Yr+i*Yi,X'=X(k)'=Xr'+i*Xi',Y'=X(k+B)'=Yr'+i*Yi',其中X、Y、W均为复数,Xr、Xi、Yr、Yi、Xr'、Xi'、Yr'、Yi'、Wr、Wi分别表示X、Y、W的实部和虚部,则满足以下关系式:
旋转因子补偿计算就是浮点复数乘法运算,即实现C=Y*W,其中C、Y、W均为复数,Cr、Ci、Yr、Yi、Wr、Wi分别表示C、Y、W的实部和虚部,则满足:
本实施例中,FFT计算模块4包括两个并联的FFT执行子模块FFT-PE以及分别与两个FFT执行子模块FFT-PE连接的CORDIC补偿旋转因子计算子模块43,两个FFT执行子模块FFT-PE分别为第一FFT执行子模块41(FFT-PE[1])和第二FFT执行子模块42(FFT-PE[2])。由每个FFT执行子模块FFT-PE执行一组数据的蝶形运算或旋转因子补偿计算,其中一组数据为规模小于或等于N1点的数据,FFT-PE[1]、FFT-PE[2]以交替的方式并行执行,蝶形运算公式如式(2)所示,旋转因子补偿计算如式(3)所示。运算规模N小于N1时,一组数据即为N点数据;运算规模N大于N1时,需要执行二维FFT,一组数据为N1*N2二维矩阵的一行或一列数据。
本实施例采用采用任务级并行的方法,由两个FFT执行子模块FFT-PE并行完成两组数据的FFT计算,两个FFT执行子模块FFT-PE交替执行,在不受到存储带宽限制的情况下,运算性能能够获得近似线性的提升。
本实施例中,采用CORDIC算法实现补偿旋转因子动态产生,即采用CORDIC算法实现旋转因子中实部和虚部的计算,由CORDIC补偿旋转因子计算子模块43根据数据地址A及运算规模N计算出相应的补偿旋转因子,其中数据地址A即为旋转因子表达式中的参数r。如图3所示,本实施例中CORDIC补偿旋转因子计算子模块结构,与现有技术中基于CORDIC算法的三角函数实现装置相同,包括多个角度计算单元(1)~(16)、多个迭代单元ROT(1)~ROT(41)和一个规格化模块,根据地址A和k(N=2k)得到初始角度Z0,每个角度计算单元由输入角度Zi计算得出每级CORDIC迭代的旋转方向σi,每个迭代单元ROT则根据旋转方向σi、X方向和Y方向输入Xi、Yi执行一级CORDIC迭代,共执行41级迭代后由规格化模块进行规格化处理,得到三角函数值cos(Z0)、sin(Z0)。如图4所示,本实施例中角度计算单元结构,由上一级的角度Zi-1计算得到本级的角度Zi。如图5所示,本实施例中迭代单元ROT结构,由上一级X方向和Y方向的值Xi-1、Yi-1迭代得到本级X方向和Y方向的值Xi、Yi。
如图6所示,本实施例中第一FFT执行子模块(FFT-PE[1])结构,与第二FFT执行子模块42的结构相同,包括依次连接的FFT计算控制单元411、数据存储单元412、并行蝶形运算单元413以及旋转因子存储单元414。FFT计算控制单元411控制FFT运算及CORDIC补偿旋转因子计算子模块43的启动,CORDIC补偿旋转因子计算子模块43在FFT计算控制单元411的控制下根据数据地址A及运算规模N计算出补偿旋转因子,通过选择器输出给并行蝶形运算单元413;数据存储单元412根据FFT计算控制单元411提供的数据地址及写使能信号输入待运算数据至并行蝶形运算单元413并在并行蝶形运算单元413完成FFT计算后输出运算结果;并行蝶形运算单元413并行执行一组数据的蝶形运算或补偿旋转因子的计算,其中当执行蝶形计算时,通过选择器选择旋转因子存储单元414提供旋转因子,当进行旋转因子补偿计算时,由CORDIC补偿旋转因子计算子模块43提供补偿旋转因子。
本实施例中每个FFT执行子模块中并行蝶形运算单元413设置两个并行的蝶形运算部件,并行执行一个小规模FFT运算,即规模小于N1点的FFT运算,每个蝶形运算部件执行次蝶形运算。如图7所示,本实施例中并行蝶形运算单元结构,包括两个并行的蝶形运算部件:蝶形运算部件[0]和蝶形运算部件[1],共同完成一组数据的蝶形运算或旋转因子补偿计算。每个蝶形运算部件输入待变换的数据或旋转因子,经过计算后输出蝶形运算结果。
对于大于N1点FFT运算中,补偿旋转因子个数与FFT规模相同,例如1M点FFT运算,补偿旋转因子的存储量将达到8MB,所需存储空间较大。本实施例中,由两个FFT执行子模块FFT-PE并行完成N点FFT运算,FFT执行子模块FFT-PE中每个蝶形运算部件执行的计算次数为由于N点FFT的补偿旋转因子计算次数为N,因此可以设置两个FFT执行子模块FFT-PE共享一个CORDIC补偿旋转因子计算子模块43。
本实施例由两个FFT执行子模块FFT-PE共享一个CORDIC补偿旋转因子计算子模块43,使硬件效果最大化硬件。
根据公式(2)可知,蝶形运算需要4个乘法来分别实现等式:T1=Yr*Wr、T2=Yi*Wi、T3=Yr*Wi以及T4=Yi*Wr,需要6个加减法来分别实现等式:T5=T1-T2、T6=T3+T4、Xr'=Xr+T5、Xi'=Xi+T6、Yr'=Xr-T5以及Yi'=Xi-T6。
根据公式(3)可知,旋转因子补偿计算需要4个乘法来分别实现等式:T1=Yr*Wr、T2=Yi*Wi、T3=Yr*Wi、T4=Yi*Wr,2个加减法来分别实现等式:Cr=T5=T1-T2、Ci=T6=T3+T4。
由于在FFT运算过程中,蝶形运算和旋转因子补偿计算不会同时执行,本实施例中采用复用策略利用同一硬件逻辑实现蝶形运算和旋转因子补偿计算,由并行蝶形运算单元413执行蝶形运算或补偿旋转因子的计算。当FFT执行子模块FFT-PE执行蝶形计算时,通过选择器选择旋转因子存储单元414提供旋转因子进入蝶形运算部件;当进行旋转因子补偿计算时,由CORDIC补偿旋转因子计算子模块43提供补偿旋转因子进入蝶形运算部件。
如图8所示,本实施例中蝶形运算部件结构,采用全硬件流水结构实现流水线并行计算,包括4个IEEE-754标准的单精度浮点乘法器和6个IEEE-754标准的单精度浮点加/减法器,其中包括3个单精度浮点加法器及3个单精度浮点减法器,图中还示出了流水寄存器。由蝶形运算部件在每个时钟周期内完成一次蝶形运算或一个补偿旋转因子计算,即实现公式(2)、(3),计算得到Xr'、Yr'、Cr、Ci、Xi'以及Yi'。
本实施例中,数据存储单元412包括两组数据存储器并采用乒乓多体结构,保证数据存储单元412的初始化与FFT计算能够同时进行,通过FFT的计算开销隐藏从片上SRAM或者片外DDR存储器读取数据和写回结果的开销,从而提高FFT加速器的计算性能。
由于每个蝶形运算部件需要读取两个复数X(k)和X(k+B),同时将两个蝶形运算结果X(k)'和X(k+B)'写入到数据存储器中,两个蝶形运算部件需要同时提供4个读端口和4个写端口。本实施例中,数据存储单元412包括两组数据存储器,每组数据存储器由4个双端口的的RAM组成,保证两个并行的蝶形运算部件能够同时从数据存储单元412中读取出数据,并把结果写回到数据存储单元412的相应位置。数据存储单元412的存储容量为16N1B,由阈值N1确定,两个FFT执行子模块FFT-PE共提供32N1B存储容量的数据存储器。如图9所示,本实施例中数据存储单元结构,包括第一组数据存储器和第二组数据存储器,每组数据存储器包含4个双端口的RAM。
每次蝶形运算需要一个旋转因子,两个蝶形运算部件需要两个旋转因子存储体。本实施例中,旋转因子存储单元414包括两个旋转因子存储体并组织成一个多体结构,旋转因子存储单元414的存储容量需求为4N1B,由阈值N1确定,两个FFT执行子模块FFT-PE共提供8N1B存储容量的旋转因子存储体。如图10所示,本实施例中旋转因子存储单元结构,包括RAM0和RAM1两个旋转因子存储体。
如图11所示,本实施例中两个FFT执行子模块FFT-PE计算时的时序原理,其中读表示读源操作数,FFT-PE[1]计算及FFT-PE[2]计算分别表示FFT-PE[1]执行FFT计算、FFT-PE[2]执行FFT计算,写表示写计算结果,虚线箭头表示存储通路依赖关系。两个FFT执行子模块FFT-PE之间没有数据依赖关系,当初始数据存储到FFT执行子模块FFT-PE的数据寄存器后启动对应的FFT执行子模块计算。第一次读初始数据顺序为:FFT-PE[1]中的第一组数据存储器、FFT-PE[2]中的第一组数据存储器、FFT-PE[1]中的第二组数据存储器、FFT-PE[2]中的第二组数据存储器。两个FFT执行子模块的计算逻辑以交替的方式对第一组和第二组数据进行计算,对于每组数据寄存器,当计算完成后且数据通路保持空闲状态,就可以启动写结果步骤,当写完结果后立即启动该组存储器的读初始数据。
本实施例采用两个FFT执行子模块并行、交替的执行两组数据的FFT运算,两组数据存储器采用乒乓多体结构,使得FFT计算与数据读写访问能够同时执行,提高FFT执行效率。
本实施例中,采用上述基于DSP芯片的FFT加速器执行FFT计算的具体步骤为:
步骤1):DSP内核通过外置总线接口将配置数据并写入到FFT加速器的配置寄存器中;
步骤2):DSP内核通过外置总线接口向FFT加速器发送命令,启动FFT加速器的运行,FFT运算控制模块2开始产生控制信号控制FFT计算模块4的运行;
步骤3):通过数据访问控制模块3的控制,以DMA方式从片外DDR存储器或片上SRAM存储器中读取数据放入到FFT执行子模块FFT-PE中的数据寄存器中;
步骤4):启动FFT执行子模块FFT-PE,完成FFT计算;
步骤5):将计算结果写回到片外DDR存储器或片上SRAM存储器中指定的地址。
步骤6):完成FFT计算后,发送FFT完成中断信号给DSP内核。
其中步骤3)、步骤4)和步骤5)同时启动,使数据读写操作与FFT运算能够重叠起来,最大限度发挥FFT执行子模块FFT-PE、DDR总线通路和SRAM总线通路的效率。
以下以能够直接支持的最大FFT运算规模为1K点为例进一步说明本发明,即N1=1K。
本实施例中基于DSP芯片的FFT加速器结构,包括:
模式配置模块1,用于从DSP内核接收数据地址、运算规模N=2k及运算次数M的配置数据,其中2<N<1M,输出至FFT运算控制模块2及数据访问控制模块3;
FFT运算控制模块2,用于判断运算规模N是否大于1K,若为否,控制FFT计算模块4进行N点一维FFT运算;若为是,控制FFT计算模块4进行2k-10*1024的二维FFT运算,输出控制信号至FFT计算模块4;
数据访问控制模块3,用于FFT计算模块4每次计算时,根据数据地址控制以DMA方式从存储器中读取出运算数据至FFT计算模块4,并将FFT计算模块4输出的运算结果存储回存储器中;
FFT计算模块4,用于根据FFT运算控制模块2输出的控制信号并行执行FFT运算;进行一维FFT运算时,并行执行N点的一维FFT运算;进行二维FFT运算时,并行执行2k-10次1K点的列方向一维FFT计算,对计算结果进行旋转因子补偿,再并行执行1K次2k-10点的行方向一维FFT计算,完成N点的FFT运算。
工作时,模式配置模块1接收配置数据,对数据格式、运算规模N、FFT运算个数M进行配置;FFT运算控制模块2接收到启动命令后启动FFT加速器运行,根据配置数据向数据访问控制模块3发送数据访问请求并控制FFT计算模块4执行FFT运算;若运算规模N小于1K时,FFT运算控制模块2控制FFT计算模块4执行N点一维FFT运算,由数据访问控制模块3从片外存储器或片上SRAM存储器中读取出N点初始数据,FFT计算模块4执行一次计算完成N点一维FFT运算后,数据访问控制模块3将计算结果写回片外存储器或片上SRAM存储器的相应位置;若运算规模N大于1K时,FFT运算控制模块2将N点一维FFT运算转换为2k-10*1024的二维FFT运算,控制FFT计算模块4以行方向计算2k-10次1K点FFT运算,进行旋转因子补偿后以列方向计算1K次2k-10点FFT运算;FFT计算模块4每次执行运算时,由数据访问控制模块3根据数据地址从片外DDR存储器或片上SRAM存储器中读取出运算数据,并在完成运算后将运算结果写回片外DDR存储器或片上SRAM存储器中。
本实施例通过将大于1K点FFT运算转换为二维FFT运算,可支持最大规模为1M的大规模FFT运算。
本实施例中,还包括分别与数据访问控制模块3、FFT计算模块4的输出端连接的数据格式转换模块5。对于定点输入数据和FFT计算结果,数据格式转换模块5用于在数据输入阶段,即数据访问控制模块3读取的数据为定点格式,将数据转换为浮点格式输出至FFT计算模块4;在数据写回阶段时,将FFT计算模块4输出的运算结果转换为对应的定点格式后输出回数据访问控制模块3。
本实施例中,FFT计算模块4包括两个并联的FFT执行子模块FFT-PE以及分别与两个FFT执行子模块连接的CORDIC补偿旋转因子计算子模块43,两个FFT执行子模块FFT-PE分别为第一FFT执行子模块41(FFT-PE[1])和第二FFT执行子模块42(FFT-PE[2])。由每个FFT执行子模块FFT-PE执行一组数据的蝶形运算或旋转因子补偿计算,其中一组数据为规模小于1K点的数据,FFT-PE[1]、FFT-PE[2]以交替的方式并行执行,蝶形运算公式如式(2)所示,旋转因子补偿计算如式(3)所示。当运算规模N小于1K时,直接执行N点的一维FFT,此时一组数据为N点的一行数据;当运算规模N大于1K时,执行2k-10*1K的二维FFT运算,先执行2k-10次1K点列方向FFT计算时,再对列方向FFT计算结果进行旋转因子补偿操作,最后再执行1K次2k-10点行方向FFT计算,由FFT执行子模块FFT-PE并行执行两行或两列数据计算。
本实施例中FFT执行子模包括依次连接的FFT计算控制单元411、数据存储单元412、并行蝶形运算单元413以及旋转因子存储单元414。FFT计算控制单元411控制FFT运算及CORDIC补偿旋转因子计算子模块43的启动,CORDIC补偿旋转因子计算子模块43在FFT计算控制单元411的控制下根据数据地址A及运算规模N计算出补偿旋转因子,通过选择器输出给并行蝶形运算单元413;数据存储单元412根据FFT计算控制单元411提供的数据地址及写使能信号输入待运算数据至并行蝶形运算单元413并在并行蝶形运算单元413完成FFT计算后输出运算结果;并行蝶形运算单元413并行执行一组数据的蝶形运算或补偿旋转因子的计算,其中通过选择器选择进行蝶形运算时,由旋转因子存储单元414提供旋转因子,选择进行旋转因子补偿计算时,由CORDIC补偿旋转因子计算子模块43提供补偿旋转因子。
本实施例中每个FFT执行子模块中并行蝶形运算单元413设置两个并行的蝶形运算部件,并行执行规模小于1K点数据的FFT计算,每个蝶形运算部件执行次蝶形运算。
本实施例中,设置两个FFT执行子模块FFT-PE共享一个CORDIC补偿旋转因子计算子模块43。
本实施例中采用复用策略利用同一硬件逻辑实现蝶形运算和旋转因子补偿计算,由并行蝶形运算单元413执行蝶形运算或补偿旋转因子的计算。
本实施例中蝶形运算部件采用全硬件流水结构实现流水线并行计算,包括4个IEEE-754标准的单精度浮点乘法器、3个单精度浮点加法器及3个单精度浮点减法器,在每个时钟周期内完成一次蝶形运算或一个补偿旋转因子计算,实现公式(2)、(3)。
本实施例中,数据存储单元412包括两组数据存储器并采用乒乓多体结构,保证数据存储单元412的初始化与FFT计算能够同时进行,每组数据存储器由4个双端口的RAM组成,保证两个并行的蝶形运算部件能够同时从数据存储单元412中读取出数据,并把结果写回到数据存储单元412的相应位置。数据存储单元412的存储容量为256*64位,两个FFT执行子单元FFT-PE共提供2048*64位的数据存储器。
本实施例中,旋转因子存储单元414组织成一个多体结构,包括两个旋转因子存储体,每个旋转因子存储体采用1024选项的64位查找表实现。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围的情况下,都可利用上述揭示的技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (9)
1.一种基于DSP芯片的FFT加速器,其特征在于,包括:
模式配置模块(1),用于从DSP内核接收数据地址、运算规模N=2k及运算次数M的配置数据,输出至FFT运算控制模块(2)及数据访问控制模块(3);
FFT运算控制模块(2),用于判断运算规模N是否大于阈值N1,若为否,控制FFT计算模块(4)进行N点一维FFT运算;若为是,控制FFT计算模块(4)进行N1*N2的二维FFT运算,其中N=N1*N2,N1为FFT计算模块(4)能够直接支持的最大FFT运算规模且N1大于或等于N2,输出控制信号至FFT计算模块(4);
数据访问控制模块(3),用于FFT计算模块(4)执行运算时,根据数据地址控制以DMA方式从存储器中读取出运算数据至FFT计算模块(4),并将FFT计算模块(4)输出的运算结果存储回存储器中;
FFT计算模块(4),用于根据FFT运算控制模块(2)输出的控制信号并行执行FFT运算;进行一维FFT运算时,并行执行N点的一维FFT运算;进行二维FFT运算时,并行执行N2次N1点的列方向一维FFT计算,对计算结果进行旋转因子补偿,再并行执行N1次N2点的行方向一维FFT计算,完成N点的FFT运算。
2.根据权利要求1所述的基于DSP芯片的FFT加速器,其特征在于:还包括分别与数据访问控制模块(3)、FFT计算模块(4)的输出端连接的数据格式转换模块(5),所述数据格式转换模块(5)用于当数据访问控制模块(3)读取的运算数据为定点格式时将运算数据转换为浮点格式,输出至FFT计算模块(4),并将FFT计算模块(4)输出的运算结果转换为对应的定点格式后输出回数据访问控制模块(3)。
3.根据权利1或2所述的基于DSP芯片的FFT加速器,其特征在于:所述FFT计算模块(4)包括两个并行的FFT执行子模块以及分别与两个FFT执行子模块连接的CORDIC补偿旋转因子计算子模块(43);两个所述FFT执行子模块并行执行两组数据的FFT计算,其中每一组数据为规模小于或等于N1点的数据,所述CORDIC补偿旋转因子计算子模块(43)根据数据地址及运算规模N采用CORDIC算法计算补偿旋转因子,分别输出至两个所述FFT执行子模块。
4.根据权利3所述的基于DSP芯片的FFT加速器,其特征在于:每个所述FFT执行子模块包括FFT计算控制单元(411)、数据存储单元(412)、并行蝶形运算单元(413)以及旋转因子存储单元(414);所述FFT计算控制单元(411)接收FFT运算控制模块(2)输出的控制信号,控制并行蝶形运算单元(413)及CORDIC补偿旋转因子计算子模块(43)的启动;所述数据存储单元(412)存储并行蝶形运算单元(413)待输入的运算数据以及待输出的运算结果;所述并行蝶形运算单元(413)并行执行一组数据的蝶形运算或补偿旋转因子计算,由所述旋转因子存储单元(414)存储蝶形运算时的旋转因子。
5.根据权利4所述的基于DSP芯片的FFT加速器,其特征在于:所述并行蝶形运算单元(413)包括两个并行的蝶形运算部件。
6.根据权利5所述的基于DSP芯片的FFT加速器,其特征在于:每个所述蝶形运算部件包括多个IEEE-754标准的单精度浮点乘法器、多个单精度浮点加/减法器。
7.根据权利6所述的基于DSP芯片的FFT加速器,其特征在于:所述单精度浮点乘法器为4个,所述单精度浮点加/减法器为6个。
8.根据权利4~7中任意一项所述的基于DSP芯片的FFT加速器,其特征在于:所述数据存储单元(412)包括两组数据存储器,对待输入的运算数据以及待输出的运算结果进行乒乓结构的缓存;每组所述数据存储器包括4个双端口的RAM。
9.根据权利5~7中任意一项所述的基于DSP芯片的FFT加速器,其特征在于:所述旋转因子存储单元(414)采用两个查找表,每个所述查找表具有N1个选项;每个所述查找表对应连接一个所述蝶形运算部件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410174795.8A CN103955447B (zh) | 2014-04-28 | 2014-04-28 | 基于dsp芯片的fft加速器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410174795.8A CN103955447B (zh) | 2014-04-28 | 2014-04-28 | 基于dsp芯片的fft加速器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103955447A true CN103955447A (zh) | 2014-07-30 |
CN103955447B CN103955447B (zh) | 2017-04-12 |
Family
ID=51332722
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410174795.8A Active CN103955447B (zh) | 2014-04-28 | 2014-04-28 | 基于dsp芯片的fft加速器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103955447B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615582A (zh) * | 2015-02-06 | 2015-05-13 | 中国人民解放军国防科学技术大学 | 面向gpdsp的大点数一维fft向量化计算的方法 |
CN105224505A (zh) * | 2015-10-29 | 2016-01-06 | 中国人民解放军国防科学技术大学 | 基于矩阵转置操作的fft加速器装置 |
CN106557299A (zh) * | 2016-11-30 | 2017-04-05 | 上海兆芯集成电路有限公司 | 浮点操作数计算方法以及使用此方法的装置 |
CN106959936A (zh) * | 2016-01-08 | 2017-07-18 | 福州瑞芯微电子股份有限公司 | 一种fft的硬件加速实现装置及方法 |
CN109376113A (zh) * | 2016-11-03 | 2019-02-22 | 北京中科寒武纪科技有限公司 | Slam运算装置和方法 |
CN110647719A (zh) * | 2019-09-20 | 2020-01-03 | 西安电子科技大学 | 基于fpga的三维fft计算装置 |
CN111145075A (zh) * | 2019-12-16 | 2020-05-12 | 深圳云天励飞技术有限公司 | 数据处理系统 |
CN112163187A (zh) * | 2020-11-18 | 2021-01-01 | 无锡江南计算技术研究所 | 一种超长点数高性能fft计算装置 |
WO2022061931A1 (zh) * | 2020-09-28 | 2022-03-31 | 华为技术有限公司 | 一种数据格式处理方法和装置 |
CN117591784A (zh) * | 2024-01-19 | 2024-02-23 | 武汉格蓝若智能技术股份有限公司 | 一种基于fpga的旋转因子计算方法及fpga芯片 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567282A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 通用dsp处理器中fft计算实现装置和方法 |
-
2014
- 2014-04-28 CN CN201410174795.8A patent/CN103955447B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567282A (zh) * | 2010-12-27 | 2012-07-11 | 北京国睿中数科技股份有限公司 | 通用dsp处理器中fft计算实现装置和方法 |
Non-Patent Citations (2)
Title |
---|
万佑红 等: ""一种改进FFT算法在DSP上的实现"", 《计算机工程与应用》 * |
董晖 等: ""二维FFT在TMS320系列DSP中的实现"", 《雷达与对抗》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615582A (zh) * | 2015-02-06 | 2015-05-13 | 中国人民解放军国防科学技术大学 | 面向gpdsp的大点数一维fft向量化计算的方法 |
CN104615582B (zh) * | 2015-02-06 | 2018-02-02 | 中国人民解放军国防科学技术大学 | 面向gpdsp的大点数一维fft向量化计算的方法 |
CN105224505B (zh) * | 2015-10-29 | 2018-05-25 | 中国人民解放军国防科学技术大学 | 基于矩阵转置操作的fft加速器装置 |
CN105224505A (zh) * | 2015-10-29 | 2016-01-06 | 中国人民解放军国防科学技术大学 | 基于矩阵转置操作的fft加速器装置 |
CN106959936A (zh) * | 2016-01-08 | 2017-07-18 | 福州瑞芯微电子股份有限公司 | 一种fft的硬件加速实现装置及方法 |
CN109376113A (zh) * | 2016-11-03 | 2019-02-22 | 北京中科寒武纪科技有限公司 | Slam运算装置和方法 |
CN106557299A (zh) * | 2016-11-30 | 2017-04-05 | 上海兆芯集成电路有限公司 | 浮点操作数计算方法以及使用此方法的装置 |
CN106557299B (zh) * | 2016-11-30 | 2019-08-30 | 上海兆芯集成电路有限公司 | 浮点操作数计算方法以及使用此方法的装置 |
CN110647719A (zh) * | 2019-09-20 | 2020-01-03 | 西安电子科技大学 | 基于fpga的三维fft计算装置 |
CN111145075A (zh) * | 2019-12-16 | 2020-05-12 | 深圳云天励飞技术有限公司 | 数据处理系统 |
CN111145075B (zh) * | 2019-12-16 | 2023-05-12 | 深圳云天励飞技术有限公司 | 数据处理系统 |
WO2022061931A1 (zh) * | 2020-09-28 | 2022-03-31 | 华为技术有限公司 | 一种数据格式处理方法和装置 |
CN112163187A (zh) * | 2020-11-18 | 2021-01-01 | 无锡江南计算技术研究所 | 一种超长点数高性能fft计算装置 |
CN112163187B (zh) * | 2020-11-18 | 2023-07-07 | 无锡江南计算技术研究所 | 一种超长点数高性能fft计算装置 |
CN117591784A (zh) * | 2024-01-19 | 2024-02-23 | 武汉格蓝若智能技术股份有限公司 | 一种基于fpga的旋转因子计算方法及fpga芯片 |
Also Published As
Publication number | Publication date |
---|---|
CN103955447B (zh) | 2017-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103955447A (zh) | 基于dsp芯片的fft加速器 | |
KR102443546B1 (ko) | 행렬 곱셈기 | |
CN109543832B (zh) | 一种计算装置及板卡 | |
CN103970720B (zh) | 基于大规模粗粒度嵌入式可重构系统及其处理方法 | |
CN103336758B (zh) | 一种采用带有局部信息的压缩稀疏行的稀疏矩阵存储方法及基于该方法的SpMV实现方法 | |
CN108805266A (zh) | 一种可重构cnn高并发卷积加速器 | |
CN110415157B (zh) | 一种矩阵乘法的计算方法及装置 | |
CN102043761B (zh) | 一种基于可重构技术的傅立叶变换的实现方法 | |
CN103412284B (zh) | 基于dsp芯片的sar成像系统中矩阵转置方法 | |
CN103955446A (zh) | 基于dsp芯片的可变长度fft计算方法 | |
CN102541774B (zh) | 多粒度并行存储系统与存储器 | |
CN103984560A (zh) | 基于大规模粗粒度嵌入式可重构系统及其处理方法 | |
CN105224505A (zh) | 基于矩阵转置操作的fft加速器装置 | |
CN102495721A (zh) | 一种支持fft加速的simd向量处理器 | |
CN102298570A (zh) | 一种点数可变的混合基 fft/ifft实现装置及其方法 | |
CN101894096A (zh) | 一种适用于cmmb和dvb-h/t的fft运算电路结构 | |
CN104699624A (zh) | 面向fft并行计算的无冲突存储访问方法 | |
CN106933777B (zh) | 基于国产申威26010处理器的基2一维fft的高性能实现方法 | |
CN102567282B (zh) | 通用dsp处理器中fft计算实现装置和方法 | |
US7653676B2 (en) | Efficient mapping of FFT to a reconfigurable parallel and pipeline data flow machine | |
CN109446478A (zh) | 一种基于迭代和可重构方式的复协方差矩阵计算系统 | |
CN103034621B (zh) | 基2×k并行fft架构的地址映射方法及系统 | |
CN102411557B (zh) | 多粒度并行fft计算装置 | |
CN111368967B (zh) | 一种神经网络计算装置和方法 | |
CN103493039B (zh) | 数据处理方法、数据处理装置、接入设备和用户设备 |
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 |