首页> 中国专利> 基于快速傅立叶变换的处理器

基于快速傅立叶变换的处理器

摘要

本发明公开了一种高性能的基于快速傅立叶变换的处理器,它采用基22单路径反馈架构,包括N级流水线单元和倒序单元,数据流先经N级流水线单元处理,再经过倒序单元输出变换后的数据。每一级流水线的单元中包含有两个蝶形运算单元、两个不同深度的指针型FIFO、一个ROM、一个-j模块单元和一个地址控制单元,指针型FIFO包括FIFO存储器、FIFO满信号及写指针生成单元、FIFO读指针生成单元以及内部控制器四部分组成,所述地址控制单元为两个计数器,计数器作为FIFO的读写指针,通过指针指向读写地址,以控制FIFO中的数据,计数器采用双n位格雷码计数器,产生两个相互分离的计数器,同时它通过修改最高两位的数据,也可以实现n位格雷码计数器转换为(n-1)位格雷码计数器。

著录项

  • 公开/公告号CN102129419A

    专利类型发明专利

  • 公开/公告日2011-07-20

    原文格式PDF

  • 申请/专利权人 中山大学;

    申请/专利号CN201110053014.6

  • 申请日2011-03-04

  • 分类号G06F15/78(20060101);G06F17/14(20060101);

  • 代理机构44259 广州凯东知识产权代理有限公司;

  • 代理人宋冬涛

  • 地址 510220 广东省广州市海珠区新港西路135号

  • 入库时间 2023-12-18 02:56:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-01

    未缴年费专利权终止 IPC(主分类):G06F15/78 授权公告日:20160203 终止日期:20180304 申请日:20110304

    专利权的终止

  • 2016-02-03

    授权

    授权

  • 2013-04-03

    实质审查的生效 IPC(主分类):G06F15/78 申请日:20110304

    实质审查的生效

  • 2011-07-20

    公开

    公开

说明书

技术领域

本发明涉及一种高性能的处理器,具体来说,涉及一种基于快速傅立叶变换的处理器。

背景技术

FFT作为时域和频域转换的基本运算,高性能FFT处理器在雷达处理、观测、跟踪、定时定位处理、高速图像处理、保密无线通讯及数字通信、匹配滤波和实时频谱分析仪等的应用上的要求极为迫切,而实时系统对FFT的运算速度要求更高。

对于FFT而言,许多应用领域都提出了其高速实时运算的要求,目前国际市场专用的FFT处理器可以达到的速度数量级普遍为1024点16位字长定点、块浮点、浮点运算在几十和数百us量级,其中采用TI公司的DSP62X系列达到66us量级处理速度,DSP64x达到36us量级,采用Xilinx公司的DSPCore中的FFT IP核处理同样数据在100M外频时钟下达到40.96us量级。

近些年来的FFT处理器实现方面的主流结构,包括Radix2、Radix4、Radix2/4、以及Radix22、Radix23、Radix24等算法,现有FFT处理器硬件实现占用太多逻辑资源和RAM存储器,因为硬件实现的结构基22算法最简单,故本发明对基22算法FFT处理器进行优化,解决了现有FFT处理器硬件实现占用太多逻辑资源和RAM存储器的问题。

发明内容

针对以上的不足,本发明提供了一种高性能的基于快速傅立叶变换的处理器,它采用基22单路径反馈结构,包括N级流水线单元和倒序单元,数据流先经N级流水线单元处理,再经过倒序单元输出变换后的数据。

每一级所述流水线单元包括两个蝶形运算单元、两个不同深度的指针型FIFO、一个用于存储旋转因子的ROM、一个-j模块单元和一个地址控制单元。

每一所述指针型FIFO包括FIFO存储器、FIFO满信号及写指针生成单元、FIFO读指针生成单元和内部控制器。

所述地址控制单元为两个计数器,计数器作为FIFO的读写指针,通过指针指向读写地址,以控制FIFO中的数据。

所述计数器采用格雷码计数器。

所述格雷码计数器采用双n位格雷码。

本发明的有益效果:本发明的基于快速傅立叶变换的处理器采用基22单路径反馈结构,包括N级流水线单元和倒序单元,数据流先经N级流水线单元处理,再经过倒序单元输出变换后的数据,通过采用指针型FIFO和双格雷码计数器,能够有效解决现有FFT处理器占用太多逻辑资源和RAM存储器的问题。

附图说明

图1为本发明FFT处理器的功能原理框架图;

图2为本发明每一级流水线单元的结构原理图;

图3为本发明的蝶形运算单元的功能原理图;

图4为本发明的指针型FIFO的结构原理图;

图5为本发明的双n位格雷码实现原理图。

具体实施方式

下面结合附图对本发明进行进一步阐述。

本发明的基于快速傅立叶变换的处理器采用基22单路径反馈(R22SDF)架构,包括N级流水线单元和倒序单元,数据流先经N级流水线单元处理,再经过倒序单元输出变换后的数据。每一级流水线的单元中包含有两个蝶形运算单元、两个不同深度的指针型FIFO、一个ROM(用于存储旋转因子)、一个-j模块单元和一个地址控制单元,指针型FIFO主要由四部分组成,分别是FIFO存储器(FIFO Memory)、FIFO满信号及写指针生成单元(FIFOwptr&full)、FIFO读指针生成单元(空信号内部产生)以及内部控制器(Controller)四部分组成,地址控制单元采用两个计数器作为FIFO的读写指针,通过指针指向读写地址,以控制FIFO中的数据。计数器采用格雷码计数器,本发明中优先考虑采用双n位格雷码计数器,既可以产生n位格雷码计数器,也可以产生(n-1)位格雷码计数器的计数器,双n位格雷码计数器可以很容易的产生两个相互分离的计数器,同时它通过修改最高两位的数据也可以很容易的实现n位格雷码计数器转换为(n-1)位格雷码计数器。

以1024点的FFT为例,对于1024点R22SDF架构的FFT处理器而言,数据流输送进FFT处理器共需要经过5级流水线单元处理,得到的数据由于是倒序的,故还需要经过一个倒序单元,最后再输出FFT得到的数据。

如图2所示,每一级流水线单元包含有两个蝶形运算单元、两个不同深度的指针型FIFO、一个ROM(用于存储旋转因子)、一个-j模块单元和一个地址控制单元。数据进入某级流水线单元时,先进入该级第一个蝶形运算单元BFI中,由于此时蝶形处理单元处于模式0,即不进行数据加减处理,数据直接进入FIFO中进行缓存,等到FIFO满之后,第一个蝶形运算单元模式置1,FIFO中第一个进去的数据将会与这一时钟周期进入该级的数据在第一个蝶形运算单元BFI中进行加减运算,运算得出的减法数据将会直接送入该蝶形运算单元的FIFO中,得出的加法数据将会直接送出,并通过控制器判断是否需要将这一输出的数据乘以-j,需要则将数据乘以-j之后送入第二个蝶形运算单元,不需要则直接送入第二个蝶形运算单元,这样直到FIFO中未经过加减处理的数据均处理完成后,再将先前处理完的减法数据送入下一个蝶形运算单元中。第二个蝶形运算单元与第一个处理时功能类似,数据出来之后将会与旋转因子系数相乘,地址控制单元将会根据不同的数据产生ROM地址从存储旋转因子的ROM中选择相应的旋转因子与数据进行相乘操作,得出的数据送出下一级单元。对于基22单路径反馈结构(R22SDF)而言,每一级的构架都相同,只要将其中一级构架搭建出来,其余的便可以采用循环嵌套的方法搭建。

蝶形运算器(BF模块)框图如附图3所示,数据x(n)和x(n+N/2)(输入的数据将会由实部数据和虚部数据拼接而成)进入蝶形运算器单元时将会被分成的实部xr(n)和xi(n)部分及xr(n+N/2)和xi(n+N/2)。在最初的N/2个时钟周期,在第一个BF处理器单元中的2选1多路选择器开关打到“0”位置,BF蝶形处理器不进行加减工作。输入的数据直接进入FIFO中,直到FIFO数据存满为止。在下一个N/2个时钟周期,BFI中的2选1多路选择器打到“1”位置,使能BFI中的加减运算单元,对输入的数据进行加减运算,并将加法所得数据Z(n)直接输出BF运算单元,进入-j模块;减法所得数据Z(n+N/2)输入到FIFO中存储,直到FIFO存满。再下一个N/2个时钟周期,FIFO中的Z(n+N/2)数据依次输送进-j模块。第二个蝶形运算器BFII的操作与第一个相同。其中加法减法操作如下:

Zr(n)=xr(n)+xr(n+N/2)      Zi(n)=xi(n)+xi(n+N/2)

Zr(n+N/2)=xr(n+N/2)-xr(n)  Zi(n+N/2)=xi(n+N/2)-xi(n)

指针型FIFO的框架如图4所示,它主要由四部分组成,分别是FIFO存储器(FIFO Memory)、FIFO满信号及写指针生成单元(FIFO wptr&full)、FIFO读指针生成单元(rptr,空信号内部产生)以及内部控制器(Controller)四部分组成。

下面对每一部分内容进行详细介绍。

FIFO存储器单元

FIFO存储器单元主要是由一个双端口RAM组成,用于存储或读取写入的数据,wclken判断是否写入数据(wdata),rinc判断是否读出数据(rdata)。

FIFO满信号及写指针生成单元(FIFO wptr&full)

FIFO满信号及写指针生成单元(FIFO wptr&full)包括空信号生成和满信号生成。空信号生成是指,在某一时钟周期,外部从FIFO存储器中读取当前指针指向地址的存储器数据时,指针将会自动指向下一个时钟周期将要读出的数据的地址,如果两个读写指针额外的位(格雷码指针最高位)相同,则说明指针已经循环一次,若除最高位外,其余的读指针位与写指针也相同,则说明FIFO是已经读空,此时会产生空信号,也即说明读指针“追上”写指针;满信号生成是指,在某一时钟周期,外部写入当前指针指向的存储器位置时,指针将会自动指向下一个时钟将要写入的数据的地址,满信号不像空信号一样,只需要判断两个增加额外最高位的格雷码计数器相同便可产生空信号,满信号仅仅依靠这一条件是不能够有效的决定内部FIFO是否写满的。

而要判断是否写满FIFO,需要判断2个条件是否满足:

1)记录写指针的双n位格雷码计数器的高两位取反后,与读指针的双n位格雷码计数器的高两位相同;

2)除去高两位,写指针格雷码计数器的其余位数与读指针格雷码计数器相同。

满足了上面两个条件之后,说明FIFO写满,此时将产生满信号。

地址控制单元

写地址格雷码计数器工作原理

写地址格雷码计数器是否增加,取决于写使能信号winc以及写满信号wfull。当winc及!wfull同时为1时,写地址格雷码计数器将会根据二进制地址增1产生相应格雷码。

读地址格雷码计数器工作原理

与写地址格雷码计数器工作原理类似,其增加与否取决于读使能信号rinc及读空信号rempty,与写地址格雷码计数器不同的是,其读数据的使能rinc不是从外部获取,而是通过内部的控制器获取,具体的rinc信号产生原理将会在FIFO内部控制器中详细介绍。

双n位格雷码计数器

双n位格雷码计数器既可以产生n位格雷码计数器,也可以产生(n-1)位格雷码计数器,双n位格雷码计数器可以很容易的产生两个相互分离的计数器,同时它通过修改最高两位的数据也可以很容易的实现n位格雷码计数器转换为(n-1)位格雷码计数器。如附图5所示为双n位格雷码计数器的实现框架,双n位格雷码计数器的输出ptr为格雷码,同时双n位格雷码计数器的输出经过格雷码向二进制转换逻辑反馈回二进制加法器中,用于产生下一个二进制计数器的值,inc、!full、!empty是从外部输入的信号,用于控制是否对前一个输出的二进制数值进行加1运算。下一个格雷码gnext的高两位将会在内部进行取反操作,并作为地址addr的高两位。

内部控制器

指针型FIFO内部控制器跟踪数据的流向。为简洁起见,以64点FFT的第3级流水线架构的蝶形处理器I所使用的指针型FIFO为例。在最初的32个时钟周期,第3级的蝶形处理器I并不对输入的数据进行加减法的处理,数据通过蝶形处理器I直接进入该级的指针型FIFO的内部存储器中。同时,FIFO的内部控制器会相应的跟踪输入数据的地址。当第32个数据进入指针型FIFO的存储器中时,FIFO内部控制器的延时信号(delay)会使能置“1”。在下一个32的时钟周期,FIFO内部控制器会使能读地址指针使能(rinc)信号,用于使能FIFO读地址指针信号的生成器去计数读数据的地址并将读地址指针(rptr)数值反馈回FIFO的满信号及写指针生成单元。当第二组的32的时钟周期数据和从FIFO存储器中读取的前32时钟周期的相应的数据处理完毕之后,处理的数据(减法操作所得的数据)将会首先被存储在寄存器中延时2个时钟周期,之后才存储进FIFO中的存储器。当所有经过蝶形处理器I减法操作后的数据都存储进FIFO的存储器时,延时(delay)信号将会失能置“0”并且等待再下一个32时钟周期,如此反复操作。

延时功能的目的主要是防止数据产生毛刺现象,保证数据处理结果的正确性。

定点复数乘法器:

综合浮点、块浮点、定点复数乘法器的各种优缺点,本设计采用数据位数Q为14的定点复数乘法器,既保证比较高的精度,又能减少逻辑资源及rom的消耗,而且实现起来也更简单。

对于复数乘法器单元的实现,常见的复乘方式为:

X+Yj=(A+Bj)*(C+Dj)=(AC-BD)+(AD+BC)j

式中:j为虚数单位,用这种方式,需要4次乘法运算,2次加减法运算。由于在FPGA设计中乘法单元的引入,特别是高位数的乘法器单元的引入将会消耗大量的资源,并影响运行的速度,所以我们在设计中对表达式进行如下变换:

X+Yj=(A+Bj)*(C+Dj)=((C-D)B+(A-B)C)+((C+D)A-(A-B)C)j

其中X=((C-D)B+(A-B)C),Y=((C+D)A-(A-B)C)

式中这种复乘方式只需要3个实数乘法运算和5个加减就可以完成复乘运算,减少了乘法器数量,对硬件资源的消耗有所减少,增加了资源的利用率。

-j模块

从16点Radix22算法的信号流图中可以看出,每一级的第一个蝶形组单元出来的数据将要与-j相乘,但并非每一个数据都要与之相乘,从16点Radix22算法的信号流图、64点Radix22算法的信号流图中可以看出,每一级第一个蝶形运算组的输出的后1/4的数据开始需要与-j进行相乘操作。

从每一级蝶形单元出来的数据与-j相乘时,考虑到资源与速度成本,可以不用使用乘法器进行乘法运算。由于参与乘法的数据为复数,设为A,B为数据A乘以-j之后的数据,同样也为复数。则有:

A=RA+jIA  B=RB+jIB

易知RB=IA,IB=-RA,也即在对数据处理时,只需要将输入的数据的实部虚部分开,并调换顺序,再重新合并实部虚部便可得到所需要的数据。

旋转因子:

首先通过C语言得到数据之后送入ROM中存储,通过控制器的控制,判断是

否需要将输入数据与相对应的旋转因子相乘。

由旋转因子的表达式:

WNnk=cos2πNnk-jsin2πNnk---(1)

通过C语言生成数据,将数据以16位实部、16位虚部组合成的32位二进制数保存在bin文件中,并在ROM中保存这些旋转因子。

从信号流图中可以看出规律:假设将每一级的两个蝶形组作为一个完整蝶形组,则从每一个完整蝶形组的1/4开始,数据需要与旋转因子相乘,例如对于64点FFT信号流图中的第三级,只包含2个蝶形组,即1个完整蝶形组,共有64个数据,前1/4即序号为0~15的数据都不需要与旋转因子相乘,从第16个数据开始,需要与旋转因子相乘。控制器可由2个计数器实现这一功能。其中一个计数器作为增量使用,如对于64点FFT的第3级,第一个1/4增量为0,第二个1/4增量为2,第三个1/4增量为1,第四个1/4增量为3;另外一个计数器用于实时跟踪输入的数据,对输入的数据进行序号对应,如当计数器计数到56时,表明第57个数据输入(计数器从0开始计数)。

数据溢出控制:数据进入一级蝶形运算处理单元时,需要对数据位宽进行扩展,以保证数据运行的可靠性。简洁起见,以32位16点R22FFT处理器为例,该16点FFT处理器共有2级蝶形运算处理单元(也即两级流水线),32数据进入第二级流水线,先进入该级的第一个蝶形运算处理器BFI中进行相加相减操作,由于相加相减操作涉及到溢出问题,所以需要对相加相减结果进行位扩展,实数部分和虚数部分的结果位宽分别增加一位,也即当原始32位数据经过BFI后,输出的数据为34位,与-j模块相乘的操作仅仅只是把实数部分与虚数部分的数据进行交换,并不需要进行位扩展操作。当34位数据进入第二个蝶形运算处理器BFII时,与第一个操作相同,需要对34位数据进行位扩展,扩展后的数据为36位,与旋转因子相乘后分别截取位宽为18的实数与虚数部分,也即36位的数据,此即为32位16点R22FFT处理器输出的数据。从该16点的FFT处理器中可以看出,对于32位64点R22FFT处理器,包含有3级流水线,每一级流水线数据位宽会拓宽4位,3级流水线处理后的数据的位宽将会拓宽为44(32+4*3),其中实数和虚数部分分别为22位,同理32位256点R22FFT处理器,其包含4级流水线,输出数据位宽为48(32+4*4),32位1024点R22FFT处理器输出数据位宽为52(32+4*5)。这样,每一级流水线中,对数据位宽进行拓展,有效防止了数据计算过程中的溢出,保证了最终运算结果的可靠性。

倒序单元实现过程:

本发明的FFT处理器采用的Radix22SDF算法输入数据为顺序,输出数据为倒序,因此当数据经过FFT处理器N级流水线时还需要对数据x(n)按码位颠倒的顺序重排处理。对倒序数据进行重排的方法是先将顺序数据通过C语言处理,产生倒序数据并将倒序的二进制数据存储到bin文件中,在倒序模块中生成一个ROM用于存储倒序的二进制数据,并通过读取ROM中的二进制倒序数据作为输出数据的相应的顺序地址,等所有数据处理完之后,在存储数据的RAM中所得的数据就会是顺序排放的。

以上所述仅为本发明的较佳实施方式,本发明并不局限于上述实施方式,在实施过程中可能存在局部微小的结构改动,如果对本发明的各种改动或变型不脱离本发明的精神和范围,且属于本发明的权利要求和等同技术范围之内,则本发明也意图包含这些改动和变型。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号