一种fft旋转因子产生装置及其应用方法

文档序号:6357415阅读:268来源:国知局
专利名称:一种fft旋转因子产生装置及其应用方法
技术领域
本发明属于芯片设计中的算法硬件实现,具体来讲就是设计一种能够配合矢量处理器技术实现高效快速傅里叶变换(FFT)运算的旋转因子产生装置及其应用方法。
背景技术
在数字通信领域,FFT运算是最为常见的一种运算,大部分的无线通信都需要进行FFT运算,因此针对FFT运算产生了多种电路和优化算法。这些FFT运算的方法大多是以硬件实现为主要方式,一般独立成为一套系统,单独完成FFT的相关运算。随着SDR(软件定义无线电)技术的不断发展,越来越多的通信处理计算任务,逐 渐直接交由处理器,通过指令运算的方式直接运算产生结果。各类的矢量处理器一般会将旋转因子看成是普通的处理数据,通过相关程序设计配合来完成FFT运算的任务,效率不闻。

发明内容
有鉴于此,本发明的主要目的在于提供一种FFT旋转因子产生装置及其应用方法,用于解决纯软件实现FFT运算时,FFT旋转因子产生效率低的问题。为达到上述目的,本发明的技术方案是这样实现的一种快速傅里叶FFT旋转因子产生装置,该装置包括地址产生单元AGU,用于对FFT运算指令进行译码,产生当前FFT运算状态对应的旋转因子查找表地址,并将产生的旋转因子查找表地址输出给查找表单元LUT ;查找表单元LUT,用于根据旋转因子查找表地址在旋转因子查找表中查找对应的FFT旋转因子,并将查找到的FFT旋转因子输出给输出单元OU ;输出单元0U,用于将查找表单元LUT输出的旋转因子送入算数运算单元AU。所述地址产生单元AGU包括FFT规模寄存器,用于通过对FFT运算点数规模设置指令fft_size指令的译码获取并存储当前的FFT运算规模;FFT阶数寄存器,用于通过对FFT下一阶运行指令f f t_nxt_stage指令的译码获取并存储当前FFT运算所处的阶数;FFT回合寄存器,用于通过对FFT蝶形运算指令fft_round指令的译码获取并记录当前FFT运算所执行的回合数;FFT地址译码单元,用于根据当前FFT规模寄存器、FFT阶数寄存器和FFT回合寄存器三个寄存器的状态,译码生成旋转因子查找表地址,并将产生的旋转因子查找表地址输出给所述查找表单元LUT。所述查找表单元LUT中包含旋转因子查找表,在所述旋转因子查找表中,按照旋转因子查找表地址与旋转因子的对应关系对用于FFT运算的旋转因子进行压缩存储。所述输出单元OUT内部包含缓存寄存器,所述缓存寄存器用于保证输出数据的时序特性,所述输出单元OUT输出的旋转因子送入算数运算单元的复选器。基于本发明提供的FFT旋转因子产生装置,本发明还提供一种FFT旋转因子产生装置的应用方法,该方法包括在处理器的流水线上设置FFT旋转因子产生装置,该装置预先存储多种FFT运算所需要的旋转因子,当处理器进行FFT运算时,通过专用FF指令触发所述FFT旋转因子产生装置产生与FFT运算对应的旋转因子,并在专用FFT指令的控制下将FFT运算需要的数据及旋转因子产生装置产生的旋转因子送入算数运算单元AU进行相应的FFT运算。进一步地,所述专用FFT指令包括FFT运算点数规模设置指令,即fft_size指令,该指令用于向所述FFT旋转因子产生装置指示当前的FFT运算点数规模;
FFT下一阶运行指令,即fft_nxt_stage指令,该指令用于指示所述FFT旋转因子产生装置当前FFT运算的阶数,每当完成一阶的FFT运算后,运行该指令指示所述FFT旋转因子产生装置进入下一阶的运算;FFT蝶形运算指令,即fft_round指令,用于选通算数运算单元AU的输入端口,将所述FFT旋转因子产生装置产生的旋转因子和需要运算的数据输入算数运算单元AU中,并执行FFT的蝶形运算。进一步地,所述通过专用FF指令触发所述FFT旋转因子产生装置产生与FFT运算对应的旋转因子,并在专用FFT指令的控制下进行相应的FFT运算的过程为在新的FFT运算开始时,运行fft_size指令,对所述FFT旋转因子产生装置进行初始化,所述FFT旋转因子产生装置记录fft_size指令指示的FFT运算点数规模;所述FFT旋转因子产生装置根据每个阶段的FFT运算的状态输出与当前FFT运算状态对应的旋转因子,在每个阶段的内部,执行fft_r0Und指令将FFT运算所需数据及旋转因子输入到算数运算单元,进行每个阶段内部的FFT蝶形运算;在每一阶段的FFT运算结束后,执行fft_nxt_stage指令,进入下一阶段的FFT运算,直到完成fft_size指令指示的FF运算点数规模的FFT运算。进一步地,当所述fft_size指令进入到译码阶段时,使FFT旋转因子产生装置中的FFT阶数寄存器和FFT回合寄存器清零,同时将fft_size指令指示的FFT运算点数规模存入FFT规模寄存器中;每当FFT数据运算指令fft指令执行后,通过指令流水线的指令译码,使FFT旋转因子产生装置中的FFT回合寄存器自动加I,然后根据FFT旋转因子产生装置中的FFT阶数寄存器、FFT回合寄存器和FFT规模寄存器的值判断当前FFT运算所处于的状态,并根据当前状态从FFT旋转因子产生装置中的查找表单元LUT获得当前FFT运算所需的旋转因子,送入算数运算单元AU入口 ;当fft_nxt_Stage指令执行后,FFT回合寄存器清零,FFT阶数寄存器寄存器加I。本发明基于矢量处理器技术,针对其FFT运算,提出一种FFT旋转因子产生装置,并配合该装置在该处理器内部设计实现了一套专用的FFT运算指令集,在专用FFT指令的控制下产生与FFT运算所处状态对应的旋转因子,并将FFT运算需要的数据及产生的旋转因子送入算数运算单元AU进行相应的FFT运算。本发明通过提高旋转因子产生效率来达到提升FFT运算效率的效果,从指令译码到旋转因子生成,FFT运算全部采用流水线技术,大幅提升了 FFT运算的吞吐率。本发明具有很广的适用性,能够完成LTE等通信协议中的多种FFT旋转因子的产生和计算工作。并且可以通过指令很好的控制FFT运算的流程和旋转因子的产生,非常适合用于通信用矢量处理器的内部。


图I为本发明提供的旋转因子产生装置在处理器的位置框图;图2为本发明提供的旋转因子产生装置结构及内部运行时序示意图;图3为采用本发明实施例提供的旋转因子产生装置及专用FFT运算指令执行FFT运算的流程。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。本设计主要思想如下为了保证软件定义无线电技术(Software DefinedRadio,SDR)处理器能够直接对FFT进行高效的运算,本发明在处理器的流水线上设计了专门的FFT旋转因子产生(Twiddle Factor Generate)装置,该装置预先存储了多种FFT运算所需要的旋转因子在只读存储器(ROM)空间内,当处理器进行运算时,通过调用本发明提供的指令,产生与FFT运算对应的旋转因子,并将旋转因子送入算数运算单元AU的入口,然后再通过本发明提供的一组专用的FFT运算指令将FFT运算需要的数据及旋转因子产生装置所生成的旋转因子送入处理器的AU单元进行一次与FFT运算相关的蝶形运算。本发明实施例提供的旋转因子产生装置在处理器流水线数据通路上的位置如图I所示。按照矢量处理器的一般流程,处理器首先将需要处理的数据从存储单元中取出,送入寄存器堆(Register Files),然后经由专门的数据选择单元(复选器X、复选器Y、复选器Z)读出送入算数运算单元AU进行计算,旋转因子产生装置,即图中的TWFG,将作为AU单元的Z端口将产生的旋转因子送入AU单元,该数值与寄存器堆送入的数据进行相关的FFT运算,最终的运算结果将被送回寄存器堆中。图I的右侧为旋转因子产生装置的放大示意图,该旋转因子产生装置主要分为3个部分地址产生单元(AGU)、查找表单元(LUT)、输出单元(OU)。AGU与指令流水线关联,用于对本发明专门提供的FFT运算指令进行译码,判断当前FFT运算所处的状态,获得当前FFT运算状态对应的旋转因子查找表地址,并将产生的FFT旋转因子查找表的地址输出给LUT ;LUT用于根据AGU输出的旋转因子查找表地址在旋转因子查找表中查找对应的FFT旋转因子,查找出的旋转因子通过OU送入处理器AU的输入端口上,进行相应的FFT运算。本实施例中输出单元OU输出的FFT旋转因子输入到复选器Z,复选器Z选通后,进入AU单元,作为AU单元的一路入口数据参与FFT运算。LUT单元主要是根据旋转因子产生的特点,将旋转因子进行压缩,并且按照一定规律进行存储的一个只读存储器(ROM)单元,该单元一但建立就形成为固化的逻辑,其内部就是一张查找表机制,用于根据AGU输出的地址查找对应的FFT旋转因子,并将其输出给
OU0、
输出单元OU负责将LUT产生的旋转因子送入AU的输入单元,该单元内部设计有寄存器逻辑,保证了输出数据的良好时序特性。进一步地,所述AGU单元进一步包括FFT规模(fft_size)寄存器,一端与指令流水线关联,另一端与FFT地址译码单元相连,用于通过对FFT运算点数规模设置指令fft_size的译码获取并存储当前的FFT运算规模;FFT阶数(fft_stage)寄存器,一端与指令流水线关联,另一端与FFT地址译码单元相连,用于通过对FFT下一阶运行指令fft_nxt_stage指令的译码获取并存储当前FFT运算所处的阶数;;
FFT回合(fft_round)寄存器,一端与指令流水线关联,另一端与FFT地址译码单元相连,用于存储通过指令译码获取的当前FFT运算所执行的回合数;FFT地址译码单元(twfg_addr_gen),主要用于根据当前fft_size、fft_stage和fft_round三个寄存器的状态,译码生成旋转因子查找表的入口地址,并将产生的入口地址输出给所述查找表单元LUT。基于本发明对处理器流水线的改进,本发明实施例针对矢量处理器进行FFT运算专门提供了如下一些指令(I)FFT运算点数规模设置指令,即fft_size指令,该指令用于设置FFT运算点数规模,该指令控制AUG内部的fft_size寄存器记录当前的FFT运算点数规模;(2)FFT下一阶运行指令,即fft_nxt_Stage指令,该指令用于指令进行下一阶(stage)的FFT运算,该指令控制AUG内部的fft_stage寄存器记录下一阶FFT运算的阶数,每当当前的FFT运算完成一阶的FFT运算后,需要运行该指令保证硬件进入下一阶运算,例如通知FFT旋转因子产生装置产生下一阶的阶数。(3) FFT蝶形运算指令,即f f t_round指令,该指令用于执行FFT的回合(round)运算,为专门的FFT数据运算指令,该指令选通AU单元的输入端口,将旋转因子和需要运算的数据输入AU中,并完成FFT的一次蝶形运算。图3为采用本发明实施例提供的旋转因子产生装置及专用FFT运算指令执行FFT运算的流程,具体步骤如下步骤301、调用fft_size指令对FFT旋转因子产生装置进行初始化,使FFT阶数寄存器和FFT回合寄存器清零,为FFT运算点数规模寄存器赋值;每次有新的FFT运算开始时,首先运行fft_size指令设置FF运算点数规模,矢量处理器收到fft_size指令后,当指令进入到译码阶段(DEC stage)时,fft_stage和fft_round寄存器将会清零,表明进入了新的FFT运算。同时将FFT运算点数规模写入fft_size寄存器中。每种点数规模的FFT运算根据程序需求,被划分成多个阶段(stage),每个阶段对应一个FFT运算的级别,每个阶段的内部又可能会被划分成多个回合(round),通过运行fft_round指令来进行每个阶段内部的一个回合的FFT运算。步骤302、调用fft_r0Und指令执行当前阶段和当前回合的的蝶形运算,FFT旋转因子产生装置对fft_r0Und指令进行译码,根据当前FFT运算状态产生当前FFT运算所需的旋转因子,完成当前的蝶形运算,fft_round指令完成后,FFT回合寄存器自动加I ;
每当fft_round指令执行后,通过指令流水线的指令译码,使fft_round寄存器自动加1,表明运行了一条相关的蝶形运算。AGU单元则会根据当前的fft_size、fft_round、fft.stage的信息联合判断当前FFT运算所处于的状态,并进行译码,通过一组组合逻辑电路(Combination Logic),即图2中的FFT地址译码单元,产生当前FFT运算所需要的旋转因子地址,然后将该地址送入LUT中并在流水线节拍的下一节拍,即寄存器读出阶段用寄存器读出相关的旋转因子数值。产生的旋转因子被送入OU单元后经过选通处理,在fft_r0Und指令执行阶段(EXstage)被送入到AU单元直接参与蝶形运算。步骤303、判断是否完成当前阶段的FFT运算,若未完成则继续执行步骤302,若完成则执行步骤304 ;步骤304、判断是否完成fft_size指令指示的点数规模的FFT运算,若未完成,则 执行步骤305,否则结束流程。步骤305、执行fft_nxt_stage指令,进入下一阶段的FFT运算,同时fft_round寄存器清零,fft_stage寄存器加I,然后执行步骤302。本发明提出的FFT旋转因子产生装置是一种直接配合矢量处理器技术的硬件电路实现,他将硬件电路实现和指令流水线技术相结合,将FFT运算完全融合于矢量处理器的指令集中。极大的提高了矢量处理器对于FFT运算的支持能力。本发明提出的FFT旋转因子产生装置,同时具有极强的灵活性,因为其FFT运算的点数、阶数等FFT运算中的参数,均可以通过指令进行配置,因此他可以根据配置,灵活的产生各类型的FFT旋转因子。本发明提出的旋转因子产生装置因为融合于处理器技术,因此借鉴了处理器的流水线技术,其本身的流水线与矢量处理器的流水线相融合,具有处理能力强,处理频率高,配合处理器数据通路,能够产生较高的FFT运算吞吐率。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种快速傅里叶FFT旋转因子产生装置,其特征在于,该装置包括 地址产生单元AGU,用于对FFT运算指令进行译码,产生当前FFT运算状态对应的旋转因子查找表地址,并将产生的旋转因子查找表地址输出给查找表单元LUT ; 查找表单元LUT,用于根据旋转因子查找表地址在旋转因子查找表中查找对应的FFT旋转因子,并将查找到的FFT旋转因子输出给输出单元OU ; 输出单元0U,用于将查找表单元LUT输出的旋转因子送入算数运算单元AU。
2.根据权利要求I所述的装置,其特征在于,所述地址产生单元AGU包括 FFT规模寄存器,用于通过对FFT运算点数规模设置指令fft_size指令的译码获取并存储当前的FFT运算规模; FFT阶数寄存器,用于通过对FFT下一阶运行指令fft_nxt_stage指令的译码获取并存 储当前FFT运算所处的阶数; FFT回合寄存器,用于通过对FFT蝶形运算指令fft_round指令的译码获取并记录当前FFT运算所执行的回合数; FFT地址译码单元,用于根据当前FFT规模寄存器、FFT阶数寄存器和FFT回合寄存器三个寄存器的状态,译码生成旋转因子查找表地址,并将产生的旋转因子查找表地址输出给所述查找表单元LUT。
3.根据权利要求I所述的装置,其特征在于,所述查找表单元LUT中包含旋转因子查找表,在所述旋转因子查找表中,按照旋转因子查找表地址与旋转因子的对应关系对用于FFT运算的旋转因子进行压缩存储。
4.根据权利要求I所述的装置,其特征在于, 所述输出单元OUT内部包含缓存寄存器,所述缓存寄存器用于保证输出数据的时序特性,所述输出单元OUT输出的旋转因子送入算数运算单元的复选器。
5.—种FFT旋转因子产生装置的应用方法,其特征在于,该方法包括 在处理器的流水线上设置FFT旋转因子产生装置,该装置预先存储多种FFT运算所需要的旋转因子,当处理器进行FFT运算时,通过专用FF指令触发所述FFT旋转因子产生装置产生与FFT运算对应的旋转因子,并在专用FFT指令的控制下将FFT运算需要的数据及旋转因子产生装置产生的旋转因子送入算数运算单元AU进行相应的FFT运算。
6.根据权利要求5所述的方法,其特征在于,所述专用FFT指令包括 FFT运算点数规模设置指令,即fft_size指令,该指令用于向所述FFT旋转因子产生装置指示当前的FFT运算点数规模; FFT下一阶运行指令,即fft_nxt_stage指令,该指令用于指示所述FFT旋转因子产生装置当前FFT运算的阶数,每当完成一阶的FFT运算后,运行该指令指示所述FFT旋转因子产生装置进入下一阶的运算; FFT蝶形运算指令,即fft_r0Und指令,用于选通算数运算单元AU的输入端口,将所述FFT旋转因子产生装置产生的旋转因子和需要运算的数据输入算数运算单元AU中,并执行FFT的蝶形运算。
7.根据权利要求6所述的方法,其特征在于,所述通过专用FF指令触发所述FFT旋转因子产生装置产生与FFT运算对应的旋转因子,并在专用FFT指令的控制下进行相应的FFT运算的过程为在新的FFT运算开始时,运行fft_size指令,对所述FFT旋转因子产生装置进行初始化,所述FFT旋转因子产生装置记录fft_size指令指示的FFT运算点数规模; 所述FFT旋转因子产生装置根据每个阶段的FFT运算的状态输出与当前FFT运算状态对应的旋转因子,在每个阶段的内部,执行fft_r0Und指令将FFT运算所需数据及旋转因子输入到算数运算单元,进行每个阶段内部的FFT蝶形运算; 在每一阶段的FFT运算结束后,执行fft_nxt_stage指令,进入下一阶段的FFT运算,直到完成fft_size指令指示的FF运算点数规 模的FFT运算。
8.根据权利要求7所述的方法,其特征在于, 当所述fft_size指令进入到译码阶段时,使FFT旋转因子产生装置中的FFT阶数寄存器和FFT回合寄存器清零,同时将fft_size指令指示的FFT运算点数规模存入FFT规模寄存器中; 每当FFT数据运算指令fft指令执行后,通过指令流水线的指令译码,使FFT旋转因子产生装置中的FFT回合寄存器自动加1,然后根据FFT旋转因子产生装置中的FFT阶数寄存器、FFT回合寄存器和FFT规模寄存器的值判断当前FFT运算所处于的状态,并根据当前状态从FFT旋转因子产生装置中的查找表单元LUT获得当前FFT运算所需的旋转因子,送入算数运算单元AU入口 ; 当fft_nxt_Stage指令执行后,FFT回合寄存器清零,FFT阶数寄存器寄存器加I。
全文摘要
本发明公开了一种FFT旋转因子产生装置及其应用方法,用于解决纯软件实现FFT运算时,FFT旋转因子产生效率低的问题。本发明基于矢量处理器技术,针对其FFT运算,提供了一套专用的FFT运算指令集及与该指令集配合使用的FFT旋转因子产生装置,在专用FFT指令的控制下FFT旋转因子产生装置产生与FFT运算所处状态对应的旋转因子,并将FFT运算需要的数据及产生的旋转因子送入算数运算单元AU进行相应的FFT运算。本发明通过提高旋转因子产生效率来达到提升FFT运算效率的效果,从指令译码到旋转因子生成,FFT运算全部采用流水线技术,大幅提升了FFT运算的吞吐率。
文档编号G06F17/14GK102737009SQ20111008178
公开日2012年10月17日 申请日期2011年4月1日 优先权日2011年4月1日
发明者刘凯, 肖海勇, 黎立煌 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1