《FPGA在数字信号处理系统方面的应用.ppt》由会员分享,可在线阅读,更多相关《FPGA在数字信号处理系统方面的应用.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、FPGA在数字信号处理系统方面的应用 1、课题简介、课题简介2、课题总体设计思想、课题总体设计思想3、课题各模块的实现、课题各模块的实现课题简介课题简介 本课题旨在研究用FPGA实现FFT算法,重点设计实现了FFT算法中的蝶形处理单元,并采用高效乘法器算法设计实现了蝶形处理单元中的旋转因子乘法器。课题的实现方案采用基2 FFT算法以及单元结构的设计思路,用VHDL语言完成了系统设计描述,中间数据缓存单元采用双口RAM,减少了访问RAM的时钟消耗。在Quartus 这一软件环境下,经过编译、综合和下载,给出了仿真测试的结果。理论和仿真分析论证了该方案的有效性,从而证明了用FPGA实现高速数字信号
2、处理的可行性。课题总体设计思想课题总体设计思想FFT处理器的实现框图:课题总体设计思想课题总体设计思想FFT的硬件实现:对于按时间抽取的FFT,基本的蝶形运算如下:其中A、B表示输入的复数数据,C、D表示运算结果,为蝶形系数。可知,基-2 FFT蝶形处理器的实现需要一个复数加法器、一个复数减法器和一个旋转因子乘法器。课题总体设计思想课题总体设计思想蝶形运算单元的实现框图:这里蝶形运算单元采用这里蝶形运算单元采用CycloneCyclone系列器件进行系列器件进行仿真。其中,操作数仿真。其中,操作数A A、B B、C C、D D存放在存放在RAMRAM中,中,旋转因子存放在旋转因子存放在ROMR
3、OM中。中。课题各模块的实现课题各模块的实现1、旋转因子乘法器的实现 旋转因子的复数乘法通常由旋转因子的复数乘法通常由4 4次实数乘法和次实数乘法和6 6次实次实数加减法运算实现,但经过运算的简化,可以只用数加减法运算实现,但经过运算的简化,可以只用3 3次实数乘法和次实数乘法和3 3次实数加减法运算实现复数乘法器。次实数加减法运算实现复数乘法器。高效复数乘法器的具体算法如下所述:高效复数乘法器的具体算法如下所述:设复数旋转因子乘法设复数旋转因子乘法R+jI=(X+jY)(C+jS)R+jI=(X+jY)(C+jS),因为,因为C C和和S S可以预先计算的,并可以储存在一个表中。所以我可以预
4、先计算的,并可以储存在一个表中。所以我们可以储存下面的三个系数:们可以储存下面的三个系数:C C、C+SC+S、C-SC-S课题各模块的实现课题各模块的实现 有了这有了这3 3个预先计算的因子,我们可以首先计算个预先计算的因子,我们可以首先计算E=X-YE=X-Y和和Z=C*E=C*(X-Y)Z=C*E=C*(X-Y),然后用然后用 R=(C-S)*Y+Z R=(C-S)*Y+Z I=(C+S)*X-Z I=(C+S)*X-Z 计算最后的乘积。计算最后的乘积。这种算法使用了这种算法使用了3 3次乘法、次乘法、1 1次加法和次加法和2 2次减法,其次减法,其代价是多使用了一个表。由以上高效复数乘
5、法器原理,代价是多使用了一个表。由以上高效复数乘法器原理,可以设计实现旋转因子复数乘法器。可以设计实现旋转因子复数乘法器。课题各模块的实现课题各模块的实现对应的硬件的输入输出框图如下图所示:其中,旋转因子乘法器是由其中,旋转因子乘法器是由3 3个个lpm_multlpm_mult组件实组件实例和例和3 3个个lpm_add_sublpm_add_sub模块来实现的。模块来实现的。课题各模块的实现课题各模块的实现 假如有假如有8 8位二进制输入数据,系数就应该有位二进制输入数据,系数就应该有8 8位,位,再加上符号,并且乘以再加上符号,并且乘以 时时,量化成量化成8 8位,位,旋转因子就变成了旋
6、转因子就变成了 。我们给定。我们给定输入值为输入值为50+45j50+45j,从理论上所计算的结果应为:,从理论上所计算的结果应为:(50+45j)*(50+45j)*=(50+45j)(121+j39)=(50+45j)(121+j39)256256 =(4295+j7395)=(4295+j7395)256=16+j28256=16+j28 由于使用高效乘法器算法计算复数乘法,由于使用高效乘法器算法计算复数乘法,3 3个因个因子分别为:子分别为:C=12lC=12l,C+S=160C+S=160,C-S=82C-S=82课题各模块的实现课题各模块的实现 输入值为50+45j,旋转因子 时的
7、仿真波形如下图所示:课题各模块的实现课题各模块的实现 其中其中clk clk 是时钟信号,是时钟信号,x_in x_in 和和y_iny_in分别是输入数分别是输入数据的实部与虚部,这里输入为据的实部与虚部,这里输入为50+45j50+45j,所以所加输入,所以所加输入激励为激励为x_in=50 x_in=50、y_in=45y_in=45。c_inc_in、cas_incas_in、css_in css_in 就就是所计算得出的因子是所计算得出的因子C C、C+SC+S、C-SC-S,这里,这里C=121C=121、C+S=160C+S=160、C-S=82C-S=82,仿真得到的输出分别为
8、,仿真得到的输出分别为r_out=16r_out=16、i_out=28i_out=28。这和前面理论上算得的输出结果是完全相符的,这和前面理论上算得的输出结果是完全相符的,从而证明了基于高效乘法器所设计的旋转因子复数乘从而证明了基于高效乘法器所设计的旋转因子复数乘法器的正确性。法器的正确性。课题各模块的实现课题各模块的实现2、蝶形运算单元的实现对应硬件实现的输入输出框图:其中该运算单元由上面所设计的旋转因子乘法器和其中该运算单元由上面所设计的旋转因子乘法器和Quartus IIQuartus II中的中的lpm_add_sublpm_add_sub模块设计实现。模块设计实现。课题各模块的实现
9、课题各模块的实现 现在计算一下输入分别为A=20+30j、B=50+45j,旋转因子C+jS=256*=121+j39时蝶形运算理论上得到的计算结果:A+B =(20+30j)+(50+45j)(12l+j39)256 =(20+30j)+(4295+7395j)256 =(20+30j)+(16+28j)=36+58jA-B =(20+30j)-(50+45j)(121+j39)256 =(20+30j)-(4295+7395j)256 =(20+30j)-(16+28j)=4+2j课题各模块的实现课题各模块的实现 对输入值为A=20+30j、B=50+45j、旋转因子C+jS=256*=1
10、21+j39时进行仿真,可得到仿真波形如下:课题各模块的实现课题各模块的实现 其其中中clk clk 为时钟信号,为时钟信号,Are_in Are_in 和和Aim_inAim_in是输入是输入A=20+30jA=20+30j的实部与虚部,即输入激励的实部与虚部,即输入激励Are_in=20Are_in=20、Aim_in=30Aim_in=30;Bre_in Bre_in 和和Bim_inBim_in是输入是输入B=50+45jB=50+45j的实部的实部与虚部,即输入激励与虚部,即输入激励Bre_in=50Bre_in=50、Bim_in=45Bim_in=45;c_inc_in、cas_
11、incas_in、css_incss_in是计算得出的是计算得出的C C、C+SC+S、C-SC-S,这里,这里C=121C=121、C+S=160C+S=160、C-S=82C-S=82;在;在Quartus IIQuartus II中仿真得到中仿真得到的输出分别为的输出分别为Dre_out=36Dre_out=36、Dim_out=58Dim_out=58、Ere_out=4 Ere_out=4、Eim_out=2Eim_out=2。这和前面理论上计算得到的结果是完全相符的,这和前面理论上计算得到的结果是完全相符的,从而说明基于从而说明基于VHDLVHDL语言设计的蝶形处理单元的正确性。语言设计的蝶形处理单元的正确性。课题各模块的实现课题各模块的实现3、数据存储单元RAM课题各模块的实现课题各模块的实现4、旋转因子系数ROM 设计中设计中要要将旋转因子预先存储在内置将旋转因子预先存储在内置ROMROM中,容量中,容量应为应为8 8点点FFTFFT所需全部旋转因子数据所需全部旋转因子数据,通过参数化生成,通过参数化生成一个一个256*8256*8的的ROMROM,如下:,如下:谢谢!谢谢!The end