利用FPGA实现FFT的硬件设计的研究

时间:2022-10-25 02:33:59

利用FPGA实现FFT的硬件设计的研究

摘 要: 本文介绍了一种基于FPGA的FFT的硬件设计整体结构,采用顺序处理结构的碟形运算单元完成碟形处理器的设计,使用有限状态机状态输出实现FFT运算中的控制单元的设计以及其中计数器、寄存器中数据的存储和输出,最终完成FFT的硬件设计。

关键词: 蝶形运算; 复数乘法器; 蝶形处理器; 控制器

中图分类号: TN702 文献标识码: A 文章编号: 1009-8631(2011)03-0167-02

引言

FFT的实现方法有软件实现和硬件实现,用软件在PC机或工作站上实现计算速度很慢,一般多结合具体系统用硬件实现,FFT整体结构形式按照蝶形运算单元的组织分布不同可分成四种,分别是顺序处理、级联处理、并行迭代和阵列处理,本设计采用顺序处理结构实现蝶形运算单元。

1 FFT的硬件设计整体结构

顺序处理是专用处理器的基本形式,蝶形运算单元在控制器的控制下,根据标准的信号流图,按时间顺序依次进行运算。顺序处理具有如下特点:只用一个蝶形运算单元;输入数据、中间数据和输出结果均使用同一组存储器;顺序执行次×log2N次。

FFT整个硬件设计主要包括存放数据的RAM、存放旋转因子ROM、蝶形运算单元和协调各个模块工作的控制单元四个模块。其整体设计结构如图1所示。

蝶形运算单元为基2运算,RAM是存储输入数据、中间运算结果以及最终运算结果的单元,控制单元产生所有的控制信号、RAM1和RAM2的读写地址、写使能、运算模块的启动信号以及ROM的读写地址等信号。RAM1作为当前输入标志对应输入N点数据的缓冲器,RAM2作为中间结果存储器。采用两个存储器可实现数据的流水线操作,即在向RAM2中写入数据的同时,可以从RAM1中读出下一组的输入数据。

2 蝶形处理器的设计

基2蝶形处理器是FFT的核心部分,有一个复数加法器、一个复数减法器和一个旋转因子的复数乘法器组成。旋转因子的复数乘法通常由4次实数乘法和2次加/减法运算实现。

复数旋转因子乘法R+jI=(X+jY) (C+jS)是可以化简的,因为C和S可以预先计算,并存储在一个表中。而且还可以存储下面的3个系数:C、C+S、C-S,首先计算E=X-Y和Z=C×E=C(X-Y),利用R=(C-S)×Y+Z、I=(C-S)×Y-Z来计算最后的乘积。

旋转因子乘法器是利用3个lpm_mult例化组件和3个lpm_add_sub模块来实现的。输出经过可读,也具有与输入相同的数据格式。在QuartusⅡ中lpm_mult例化元件如图2所示。端口A输入为9bits,端口B输入为8bits。

利用一个实例化为组件的旋转因子乘法器、一个加法器和一个减法器来设计蝶形处理器。蝶形处理器的输入输出模块如图3所示。 Are_in,Aim_in是输入A的实部和虚部,Bre_in,Bim_in是输入B的实部与虚部,C_in,Cms_in,Cns_in为相应旋转因子系数的运算结果输入,Dre_out,Dim_out是蝶形运算中加法部分输出的实部与虚部,Ere_out,Eim_out是减法部分输出的实部与虚部。

3 存储单元与控制单元的设计

在ALTERA公司的Cyclone系列的FPGA中,LPM(library parameterized megafunction,可调参数元件)是功能强大,性能良好的类似于IP Core的兆功能块LPM库。调用LPM部件lpm_rom和lpm_ram_dq,通过调节元件的参数,来实现所需要的存储器RAM和ROM。存储器ROM也可以通过这种方式进行调用,减小程序编写的复杂度。

控制单元是整个系统的控制核心,各个功能模块之间的地址 、数据传递均通过控制单元协调工作。控制单元记录当前蝶形运算所处的级数和个数,并产生 ctl信号传递给地址产生单元,以产生操作数和旋转因子的地址,地址产生单元将旋转因子的地址送入ROM模块的地址总线,直接读出旋转因子的值,送入蝶形运算单元;将操作数的地址送入控制单元,控制单元将两个操作数的地址连续送入 RAM的地址总线,连续读取两个操作数,将其寄存后送入蝶形运算单元。运算结果在中央控制单元控制下连续写入RAM。FFT完成后,产生done信号通知外部读取处理后的数据。通过一个有限状态机状态的输出来实现上述的功能。

控制器在时钟信号的作用下按状态的先后顺序翻转,实现对数据读取,计算,存储等操作的控制。控制器的状态转移流图如图4所示。

对于8点FFT运算的控制器,总共需要定义10个状态。在最初控制器处于空闲状态,此时整个控制器不工作。外部输入信号为低电平时,控制器一直处于空闲状态,等待启动信号的到来,当输入信号置高电平时,在输入信号的触发下,控制器开始状态转换,输出控制信号,带动整个系统完成FFT运算。

在控制器中有两个内部计数器,对控制器状态的翻转起着决定作用,定义计数器1计数到4时为第一级蝶形运算结束标志信号,计数器2计数到8为最后一级蝶形运算结束标志信号。

控制器在每次进入FFT第一级运算状态后判断计数器1的数值,以决定下一状态。当计数1的值介于0和3之间时,控制器就在运算一级运算与RAM1的读取和写入数据两个状态之间循环(RAM1的数据读取和写入是同时进行的),循环次数与FFT的点数有关。跳出此循环之后,控制器进入二级以上运算状态,此时开始判断计数器2的数值。当计数器2的值介于0和5之间时,此时系统刚好完成最后一级的第一组蝶形运算,控制器状态在二级以上运算与RAM2的读取和写入数据两个状态循环,循环5次。当计数到6时,跳出循环,控制器进入对RAM2三种操作同时进行的状态,即在写入中间结果的同时,下一组输入数据正在读取,上一组FFT结果正在输出,此状态可以保证FFT结果及时输出。

计数到6与7之间时,控制器在二级以上运算和RAM2三种操作同时进行两个状态之间循环,当计数到8时,跳出此循环,控制器进入写入8点FFT最后一组运算结果与输出倒数第二组FFT运算结果的状态。

对于计数器1,如果次态为一级运算,则计数器自动加1;如果次态为空闲,则计数器被复位,其他状态是计数器值保持不变。对于计数器2,如果次态为二级以上运算,则计数器自动加1,其他情况与计数器1类似。控制器输入输出模块如图5所示。

图5中Ready为启动信号,与RAM1相连,clk为时钟,控制器在每个时钟的上升沿到来时从现态转变为次态,rst为复位控制信号,当rst=‘1’时,将控制器复位为空闲状态。OE1为高电平有效信号,控制RAM1读取数据使能,en高电平有效信号,控制蝶形运算单元使能。We2,oe2信号,高电平有效,控制RAM2读写使能。Ok信号,高电平有效,输出FFT运算结果。

4系统分析

本设计选用QUARTUSⅡ作为软件开发平台,利用该软件宏模块的调用功能产生RAM、ROM、乘法器等模块,以节省设计时间,提高系统工作效率。在旋转因子乘法器的设计中,为了保证较短的延时,复数乘法器只有输出寄存器,没有内部流水线寄存器。

参考文献:

[1] 李彦正.一种FFT蝶形处理器中的乘法器实现.现代电子技术,2007(22).

[2] 唐江,刘桥.基于FPGA的基―4FFT算法的硬件实现.重庆工学院学报,2007.3(21).

[3] 刘桂华,傅幼麟.FFT实时谱分析系统的FPGA设计和实现.电子应用技术,2006.5.

[4] 钱文明,刘新宁.基于Cyclone系列FPGA的1024点FFT算法的实现.电子工程师,2007.2(33).

[5] 任淑艳,关从荣.应用VHDL语言的FFT算法实现.哈尔滨理工大学学报,2003.12(8).

注:“本文中所涉及到的图表、公式、注解等请以PDF格式阅读”

上一篇:联系实际有助于提高学生学习化学的兴趣 下一篇:充分利用网络媒体促进社会发展的几点思考