基于fpga的fft装置的制造方法

文档序号:10803113阅读:373来源:国知局
基于fpga的fft装置的制造方法
【专利摘要】本实用新型涉及一种基于FPGA的FFT装置,该装置包括:缓存模块、控制模块和基-4蝶形运算器;所述控制模块分别与缓存模块和基-4蝶形运算器相连,用于控制数据的输入、输出,用于控制数据以乒乓缓存的方式缓存至缓存模块中,用于控制数据以循环寻址的方式在基-4蝶形运算器中完成FFT运算;所述缓存模块用于初始输入前3/4的数据,输出后3/4的运算结果,并用于保存中间数据;所述基-4蝶形运算器用于初始输入后1/4的数据,输出前1/4的运算结果。本实用新型提高了运算速度,在DSP乘法器使用数量与应用基-2蝶形运算单元的FFT装置相当的情况下减少了存储数据的RAM的总深度。
【专利说明】
基于FPGA的FFT装置
技术领域
[0001 ]本实用新型设及数字信号领域,尤其设及一种基于FPGA的FFT装置。
【背景技术】
[0002] 在无线通信系统中,经常使用快速傅里叶变换FFT对输入时域信号进行变换分析, 观察频域波形,W获取信号的频域特征。OFDM利用离散傅立叶反变换和离散傅里叶变换 (IDFT/DFT)代替多载波调制和解调的实现,即在发射端对待调制数据进行IFFT运算来实现 调制,接收端对接收到的数据进行FFT运算实现解调,从而大大降低了系统实现的复杂度。
[0003] FPGA可W很好地解决并行性和速度问题,并且有配置灵活、易于升级等特点,是常 用的实现快速傅里叶变换FFT的方法。例如,Xilinx的Virtex6系列忍片在FPGA内部,不仅提 供了多个称为DSP Slices的计算单元,还提供了可读写的LUT单元、双端口RAM单元。
[0004] 目前Xilinx的Vbtex6系列忍片内部的FFT算法IP软核分为四种模式,分别为:流 水的数据流I/O (Pipe lined, Streaming I/O)、基-4 突发1/0( Radix-4, Burst I/O)、基-2突 发I/0(Radix-2,Burst I/O)、基-2Lite突发I/0(Radix-化ite,Burst I/O)。按结构可分为 Pipel ined和Burst两种,下面简单介绍两种结构的实现方法,如下:
[0005] (1)流水的数据流I/O。
[0006] 流水的数据流I/O结构通过一组基-2蝶形单元处理引擎的流水来实现连续数据处 理。每个处理引擎都有存储器块来存储输入数据和中间数据。
[0007] (2)基-4 突发 I/O。
[000引对于基-4突发I/O结构,FFT IP核用一个基-4蝶形单元处理引擎实现。
[0009] 对于流水的数据流I/O结构,IP核在处理当前帖数据变换计算的同时,可W加载下 一帖输入数据并输出前一帖的变换结果数据,可W连续输入数据并在一定的计算延时后获 得连续的计算结果输出。输入数据是顺序的,输出数据可W是倒序的或者顺序的。下面W8 点为例说明基-2蝶形流水线式的FFT装置。
[0010] 基-2DIFW两点为单位进行蝶形运算,在进入运算前先进行数据缓存,使输入数据 的上半部分与下半部分相结合。基本结构如下:
[0011] 设一个时钟周期缓存一个数据,即第一个时钟缓存0,第二个时钟缓存1...输入数 据缓存ram空间为4,即当第五个数据"4"到来时,缓存的数据"0"与"4"直接进行蝶形运算, 而不用存储数据。最终输出的频域数据遵循倒序排列,8点的基-2蝶形流水线式的FFT的输 入输出表如表1所示:
[001 ^ 表1基-2蝶形流水线式的FFT的输入输出表 [0013]

[0014] 根据蝶形图,8点基-2FFT分为3级,运算前缓存数据需要空间为4,中间数需要的空 间分别为4、2,最后顺序输出数据时需要先进行所有点的缓存,再寻址输出,缓存空间为8。 共计使用RAM空间为18,每级使用一个蝶形运算,共计使用3个蝶形运算单元,假设1 一个蝶 形运算单元使用3个DSP乘法器,则共计使用9个DSP乘法器。
[0015] 基-2流水的数据流I/O利用每级放置蝶形单元及存储中间数据,让数据可W连续 进行固定点FFT,随着FFT运算的点数增多,占用的资源也随着增长,并且由于每级运算只使 用一个基-2蝶形单元,算数的先后是固定的,所W在最后一级要求顺序输出时,需要额外增 加 RAM,表2统计了应用基-2蝶形运算单元的FFT装置采用scale缩放模式进行处理时,存储 数据占用的RAM的总深度和进行运算占用的DSP乘法器的数量。
[0016] 表2基-2蝶形单元流水的数据流I/O结构占用的资源量
[0017]
【实用新型内容】
[001引本实用新型所要解决的技术问题是:现有的FFT装置在数据顺序输出对RAM利用率 低、需要较多的FPGA资源的问题。
[0019] 为解决上述技术问题,本实用新型提出了一种基于FPGA的流水线式FFT装置。该基 于FPGA的流水线式FFT装置包括:
[0020] 缓存模块、控制模块和基-4蝶形运算器;
[0021] 所述控制模块分别与缓存模块和基-4蝶形运算器相连,用于控制数据的输入、输 出,用于控制数据W兵鸟缓存的方式缓存至缓存模块中,用于控制数据W循环寻址的方式 在基-4蝶形运算器中完成FFT运算;
[0022] 所述缓存模块用于初始输入前3/4的数据,输出后3/4的运算结果,并用于保存中 间数据;
[0023] 所述基-4蝶形运算器用于初始输入后1/4的数据,输出前1/4的运算结果。
[0024] 可选地,所述缓存模块为多个双口 RAM或多个单口 RAM。
[002引可选地,所述双口 RAM的个数为7个或8个,由FFT运算的点数决定。
[0026] 可选地,所述多个RAM的总深度小于等于FFT运算点数的两倍。
[0027] 可选地,所述基-4蝶形运算器的个数化个或2个,由FFT运算的点数决定。
[0028] 本实用新型提出的基于FPGA的FFT装置,采用基4蝶形运算器,提高了运算速度,采 用循环寻址的方式省去了中间数据存储,在数据顺序输出时不需要额外的RAM,在DSP乘法 器使用数量与应用基-2蝶形运算单元的FFT装置相当的情况下减少了存储数据的RAM的总 深度,提高了对RAM的利用率,节省了 FPGA的资源。
【附图说明】
[0029] 通过参考附图会更加清楚的理解本实用新型的特征和优点,附图是示意性的而不 应理解为对本实用新型进行任何限制,在附图中:
[0030] 图1为应用基-2蝶形运算单元的FFT装置的结构示意图;
[0031] 图2为本实用新型一个实施例的基于FPGA的FFT装置的结构示意图;
[0032] 图3为本实用新型一个实施例的基于FPGA的FFT装置的原理图;
[0033] 图4为本实用新型一个实施例的基于FPGA的FFT方法的示意图。
【具体实施方式】
[0034] 下面将结合附图对本实用新型的实施例进行详细描述。
[0035] 图2示出了本实用新型一个实施例的基于FPGA的FFT装置的结构示意图。
[0036] 如图2所示,本实施例的基于FPGA的FFT装置包括:
[0037] 缓存模块1、控制模块2和基-4蝶形运算器3;
[0038] 控制模块2分别与缓存模块1和基-4蝶形运算器3相连,用于控制数据的输入、输 出,用于控制数据W兵鸟缓存的方式缓存至缓存模块1中,用于控制数据W循环寻址的方式 在基-4蝶形运算器3中完成FFT运算;
[0039] 缓存模块1用于初始输入前3/4的数据,输出后3/4的运算结果,并用于保存中间结 果;
[0040] 基-4蝶形运算器2用于初始输入后1/4的数据,输出前1/4的运算结果。
[0041 ]本实施例的基于FPGA的FFT装置,采用基4蝶形运算器,提高了运算速度,采用循环 寻址的方式在存储中间数据时不需要额外的RAM,在数据顺序输出时不需要额外的RAM,在 DSP乘法器使用数量与应用基-2蝶形运算单元的FFT装置相当的情况下减少了存储数据的 RAM的总深度,提高了对RAM的利用率,节省了FPGA的资源。
[0042]在一种可选的实施方式中,所述缓存模块为多个双口RAM或多个单口RAM。在基于 FPGA的FFT装置中,缓存模块为双口RAM可W达到使用RAM的个数较少的效果。
[00创所述双口 RAM的个数为7个或8个,由FFT运算的点数决定。
[0044] 所述多个RAM的总深度小于等于FFT运算点数的两倍。
[0045] 所述基-4蝶形运算器的个数为1个或2个,由FFT运算的点数决定。
[0046] 图3为本实用新型一个实施例的基于FPGA的FFT装置的原理图。如图3所示,该FFT 装置包括若干双口 RAM和蝶形运算器及选择器,其中总RAM深度最多为FFT点数的2倍,宽度 为数据宽度。蝶形运算最多设置2个基-4蝶形运算器,每8块RAM可在一周期内并行输出8个 数据,可充分利用两个基-4蝶形运算单元,提高运算速度。
[0047]图4为实用新型一个实施例的基于FPGA的FFT的方法示意图。如图4所示,采用如上 所述的基于FPGA的FFT装置的FFT方法,包括:
[004引S41:顺序输入第一帖数据,完成第一帖数据的1级蝶形运算后,采用兵鸟缓存顺序 输入第二帖数据,并完成第一帖数据的Μ级蝶形运算;
[0049] S42:完成第一帖数据的蝶形运算结果的顺序输出,同时进行第二帖数据的缓存及 蝶形运算;
[0050] S43:完成第二帖数据的Μ级蝶形运算,同时采用兵鸟缓存进行第Ξ帖数据的缓存, 并开始进行第Ξ帖数据的1级蝶形运算;
[0051] S44:不断重复数据的缓存、蝶形运算和结果输出过程,完成多帖数据的蝶形运算;
[0052] 其中,Μ为蝶形运算的级数,Ν为FFT运算的点数,Ν = 4Μ;数据读取和存储采用循环 寻址方式。
[0053] 进一步地,所述顺序输入第一帖数据,完成第一帖数据的1级蝶形运算后,采用兵 鸟缓存顺序输入第二帖数据,并完成第一帖数据的Μ级蝶形运算;完成第一帖数据的蝶形运 算结果的顺序输出,同时进行第二帖数据的缓存及蝶形运算包括:
[0054] 顺序输入前3/4的第一帖数据至缓存模块的第一部分,当后1/4的第一帖数据到达 基-4蝶形运算器时,根据蝶形运算图直接与缓存模块中的数据进行蝶形运算,并将1级蝶形 运算的结果保存至缓存模块的第一部分;
[0055] 完成第一帖数据的Μ级蝶形运算,基-4蝶形运算器顺序输出第一帖数据的蝶形运 算结果的前1/4,后3/4的运算结果保存至缓存模块的第一部分;采用兵鸟缓存顺序输入前 3/4的第二帖数据至缓存模块的第二部分,当后1/4的第二帖数据到达基-4蝶形运算器时, 根据蝶形运算图直接与缓存模块中的数据进行蝶形运算;
[0056] 缓存模块的第一部分顺序输出第一帖数据的蝶形运算结果的后3/4;
[0057] 相应地,所述缓存模块的数据读取和存储采用循环寻址方式。
[0058] 下面W-个具体的例子说明该基于FPGA的FFT方法中的兵鸟缓存过程。
[0059] 设一帖串行数据进行FFT运算的点数为4096点,采用基-4DIF运算,使用的RAM为图 3中的RAM1-14(需要说明的是,图3中的RAM1-14为单口 RAM,W下兵鸟缓存的过程也是W单 口 RAM为例进行说明的;对于FFT的点数为4096点的运算,可W使用7个双日RAM,其过程和工 作原理与使用单口 RAM类似),其过程如下:
[0060] (1)对输入串行数据帖0进行缓存,缓存空间设置为运算点数的3/4,即4096*0.75 = 3072,即缓存到RAM6。
[0061 ] (2)当第3073个数据到来时,根据蝶形运算图,直接与之前缓存RAM中第1、1025、 2049个数据进行基-4蝶形运算。并将计算结果存入缓存至RAM1~RAM8中。
[0062] (3)当第3074个数据到来时,根据蝶形运算图,直接与缓存中第2、1026、2050个数 据进行基-4蝶形运算,并将计算结果存入缓存至RAM1~RAM8中。
[0063] (4)当第3075个数据到来时,根据蝶形运算图,直接与缓存中第3、1027、2051个数 据进行基-4蝶形运算,并将计算结果存入缓存至RAM1~RAM8中。
[0064] 当第3076个数据到来时....
[00化]当第4096个数据到来时,根据蝶形运算图,直接与缓存中第1024、2048、3072个数 据进行基-4蝶形运算,并将计算结果存入缓存RAM中。此时完成了第1级的所有蝶形运算。完 成1级运算的数据存入的缓存RAM为RAM1~RAM8。
[0066] (5)对下一帖输入数据帖1进行缓存,缓存空间从RAM9开始,此1024个时钟周期内, 可W利用2个基-4蝶形运算单元对1~6缓存RAM内的数据继续进行处理,此时1个时钟周期 读出缓存器内8点数据进行蝶形运算,在1024周期内共完成1024*8 = 8192点,即8192/4096 =2级蝶形运算。此时将3级运算完的数据仍存回RAM1~RAM8,实现原址运算。
[0067] (6)继续对帖1数据进行缓存,缓存空间为RAM11和RAM12,此1024个时钟周期内,可 W利用2个基-4蝶形运算单元对1~6缓存RAM内的数据继续进行处理,此时1个时钟周期读 出缓存器内8点数据进行蝶形运算,在1024周期内共完成1024*8 = 8192点,即8192/4096 = 2 级蝶形运算。此时将5级运算完的数据仍存回RAM1~RAM8,实现原址运算。
[0068] (7)继续对帖1数据进行缓存,缓存空间为RAM13和RAM14,此1024个时钟周期内,可 W利用1个基-4蝶形运算单元对7~14缓存RAM内的数据继续进行处理,此时1个时钟周期读 出缓存器内4点数据进行蝶形运算,在1024周期内共完成1024*4 = 4096点,即4096/4096 = 1 级蝶形运算。此时将6级运算完的数据仍存回RAM1~RAM8,实现原址运算。由于已经完成了 最后一级的运算,在计算过程中,可W将6级运算后的结果直接输出,当所有计算完成时,结 果输出1/4。
[0069] (8)对帖1进行1级运算,将运算结果存入RAM1~2、RAM9~14,同时RAM3输出上一帖 帖0的运算结果。
[0070] (9)对RAM3、4进行缓存,缓存数据为下一帖帖2数据,同时RAM5输出上一帖的运算 结果,此时帖1数据利用两个蝶形运算器完成3级蝶形运算。
[0071] (10)对RAM5、6进行缓存,同时RAM7开始帖0数据输出,帖1数据完成5级运算。
[0072] (11)对RAM7、8进行缓存,帖1数据完成6级运算并输出。
[0073] 进一步地,所述循环寻址方式包括:
[0074] 进行1级蝶形运算,将1级蝶形运算结果按照循环寻址的方式保存在缓存模块中;
[0075] 进行中间级的蝶形运算,按照循环寻址方式读取缓存模块中的数据,将中间级蝶 形运算结果按照循环寻址的方式保存在缓存模块中;
[0076] 进行最后一级的蝶形运算,按照循环寻址方式将蝶形运算结果保存至缓存模块 中,依次读取缓存模块中的数据并顺序输出蝶形运算结果。
[0077] 具体地,所述进行1级蝶形运算,将1级蝶形运算结果按照循环寻址的方式保存在 缓存模块中包括:
[0078] 进行1级蝶形运算,将1级蝶形运算结果分成16组,将所述16组蝶形运算结果的第 0-3组数据依次存入第一 RAM、第二RAM、第ΞΚΑΜ和第四RAM;将所述16组蝶形运算结果的第 4-7组数据依次存入第二RAM、第ΞΚΑΜ、第四RAM和第一 RAM;将所述16组蝶形运算结果的第 8-11组数据依次存入第SRAM、第四RAM、第一 RAM和第二RAM;将所述16组蝶形运算结果的第 12-15组数据依次存入第四RAM、第一 RAM、第二RAM和第SRAM。
[0079] 具体地,所述进行中间级的蝶形运算,按照循环寻址方式读取缓存模块中的数据, 将中间级蝶形运算结果按照循环寻址的方式保存在缓存模块中包括:
[0080] 进行中间级的蝶形运算,按照循环寻址方式读取缓存模块中的数据输入到基-4蝶 形运算器的第一端口、第二端口、第Ξ端口和第四端口;按照循环寻址方式读取缓存模块中 的数据输入到基-4蝶形运算器的第二端口、第Ξ端口、第四端口和第一端口;按照循环寻址 方式读取缓存模块中的数据输入到基-4蝶形运算器的第Ξ端口、第四端口、第一端口和第 二端口;按照循环寻址方式读取缓存模块的数据输入到基-4蝶形运算器的第四端口、第一 端口、第二端口和第Ξ端口;
[0081 ]其中,每次转换输入端口的长度为1 /4? X Ν;
[0082] 将每个中间级的蝶形运算结果分为16组,按照循环寻址的方式保存在缓存模块 中。
[0083] 具体地,所述进行最后一级的蝶形运算,按照循环寻址方式将蝶形运算结果保存 至缓存模块中,依次读取缓存模块中的数据并顺序输出蝶形运算结果包括:
[0084] 进行最后一级蝶形运算,将基-4蝶形运算器中第一端口的数据保存至第一 RAM,将 基-4蝶形运算器中第二端口的数据保存至第SRAM,将基-4蝶形运算器中第Ξ端口的数据 保存至第二RAM,将基-4蝶形运算器中第四端口的数据保存至第四RAM;
[0085] 其中,所述缓存模块进行了多级数据划分,直到每组数据的个数为1;
[0086] 依次读取缓存模块中的数据并顺序输出蝶形运算结果。
[0087] 下面W-个具体的例子说明基于FPGA的FFT方法中的循环寻址的过程。(此次介绍 的是使用一个蝶形运算器的方法,与两个蝶形运算器方法一致)
[008引(1)将N点数据进行顺序输入到RAM中,直到3/4数据输入到RAM后,开始1级寻址计 算。
[00例 (2)1级寻址:RAM1~3按照地址0~(1/4*N-1)依次读出数据并作为蝶形运算器的 前3个输入,蝶形运算的第4个输入为直接过来的数据。经过计算后将蝶形运算器输出端口 1 ~4的第0~(1/16*N-1)个数据依次存入RAM1、2、3、4,序号(1/16*N)~(1/8*N-1)依次存入 RAM2、3、4、1,序号(1/8*N)~(3/16*N-l)依次存入 RAM3、4、1、2,序号(3/16*N)~(1/4*N-1) 依次存入RAM4、1、2、3。
[0090] (3)2级寻址:RAM1 读地址0~α/16*Ν-1)、α/16*Ν)~(1/8*Ν-1)、α/8*Ν)~(3/ 16*Ν-1)、(3/16*Ν)~(1/4*Ν-1)数据并分别作为蝶形运输器输入端口 1、2、3、4的数据。同时 RAM2 读地址(1/16*Ν)~(1/8*Ν-1)、(1/8*Ν)~(3/16*Ν-1)、(3/16*Ν)~(1/4*Ν-1)、0~(1/ 16*Ν-1)的数据并作为蝶形运输器输入端口 2、3、4、1的数据。RAM3读地址(1/8*Ν)~(3/16* Ν-1)、(3/16*Ν)~(1/4*Ν-1)、0~(1/16*Ν-1)、(1/16*Ν)~(1/8*Ν-1)数据并作为蝶形运算 器输入端口3、4、1、2的数据。RAM4 读地址(3/16*Ν)~(1/4*Ν-1)、0~(1/16*Ν-1)、(1/16*Ν) ~(1/8*Ν-1)、(1/8*Ν)~(3/16*Ν-1)数据并作为蝶形运输器输入端口 4、1、2、3的数据。经过 计算后将蝶形运算器输出端口 1~4的第0~(1/64*Ν-1)个数据依次存入3411、2、3、4,序号 α/64*N)~(l/32*N-l)依次存入RAM2、3、4、l,序号α/3巧N)~(3/64*N-l)依次存入RAM3、 4、1、2,序号(3/64*Ν)~(1/16*Ν-1)依次存入RAM4、1、2、3。同样对剩下的数做相同操作,即 序号(1/16*N)~巧/64*N-1)数据依次存入RAM1、2、3、4,序号(5/64*N)~(6/64*N-l)依次存 入 RAM2、3、4、1,序号(6/64*N)~(7/64*N-l)依次存入 RAM3、4、1、2,序号(7/64*N)~(8/64* N-1)依次存入RAM4、1、2、3....
[0091 ] (4)3级寻址:RAMI读地址0~(1/64*N-1)、( 1/64*N)~(2/64*N-l)、(2/64*N)~(3/ 64*N-1)、(3/64*N)~(4/64*N-l)数据并分别作为蝶形运输器输入端口 1、2、3、4的数据。同 时RAM2读地址(4/64*N)~(5/64*N-l)、(5/64*N)~(6/64*N-l)、(6/64*N)~(7/64*N-l)、 (7/64*N)~(8/64*N-l)数据并分别作为蝶形运输器输入端口 2、3、4、1的数据。RAM3读地址 (8/64*N)~(9/64*N-l)、(9/64*N)~(10/64*N-1)、(10/64*N)~(11/64*N-1)、(11/64*N)~ (12/64*N-1)数据并分别作为蝶形运输器输入端口 3、4、1、2的数据。RAM4读地址(12/64*N) ~(13/64*N-1)、(13/64*N)~(14/64*N-1)、(14/64*N)~(15/64*N-1)、(15/64*N)~(16/ 64*N-1)数据并分别作为蝶形运输器输入端口 3、4、1、2的数据。同样对剩下的地址数据做同 样操作。经过计算后将蝶形运算器输出端口 1~4的第0~(1/256*N-1)个数据依次存入 RAM1、2、3、4,序号(1/256*N)~(2/256*N-l)依次存入 RAM2、3、4、1,序号(2/256*N)~(3/ 256*N-1)依次存入 RAM3、4、1、2,序号(3/256*N)~(4/256*N-l)依次存入 RAM4、1、2、3。同样 对剩下的数做相同操作,即序号(4/256*N)~(5/256*N-l)数据依次存入RAM1、2、3、4,序号 (5/256*N)~(6/256*N-l)依次存入 RAM2、3、4、l,序号(6/256*N)~(7/256*N-l)依次存入 RAM3、4、1、2,序号(7/256*N)~(8/256*N-l)依次存入RAM4、1、2、3....
[0092] (5)4、5、6、7级寻址....
[0093] (6)最后一级寻址:首先对RAM1依次读取地址0、2/16*N、3/16*N、l/16*N,输出的数 据作为蝶形运算器的端口 1输入,同时对RAM2依次读取地址(a+al. .)、(2/16*N+a+al..)、 (3/16*N+a+al. .)、( l/16*N+a+al..),输出的数据作为蝶形运算器的端口 2输入,对RAM3依 次读取地址2*(a+al. . .)、[2/16*N+2*(a+al. . .)]、[3/16*N+2*(a+al. . .)]、[l/16*N+2*(a+ al...)],输出的数据作为蝶形运算器的端口3输入,对RAM4依次读取地址3*(a+al. . .)、[2/ 16*N+3*(a+al. . .)]、[3/16*N+3*(a+al. . .)]、[l/16*N+3*(a+al...)],输出的数据作为蝶 形运算器的端口 4输入。将端口 1的计算结果直接作为最终输出数据输出,将端口 2的数据原 址存入RAM3,将端口 3的数据原址存入RAM2,将端口 4的数据原址存入RAM4,接下来继续对 RAM1 进行读操作,读取地址为 2/64*N、(2/16*N+2/64*N)、(3/16*N+2/64*N)、(l/16*N+2/64* N),对RAM2读取地址为(2/64*N+a+al. . .)、[(2/16*N+2/64*N)+a+al. . .]、[(3/16*N+2/64* N)+a+al. . .]、[(l/16*N+2/64*N)+a+al...],对RAM3读取地址为[2/64*N+巧(a+al...)]、 [(2/16*N+2/64*N)+巧(a+al...)]、[(3/16蝴+2/64*N)+2*(a+al...)]、[(l/16*N+2/64*N)+ 2*(a+al...)],对RAM4读取地址为[2/64*N+3*(a+al. . .)]、[(2/16*N+2/64*N)+3*(a+ al. . .)]、[(3/16*N+2/64*N)+3*(a+al. . .)]、[(l/16*N+2/64*N)+3*(a+al...)],同样输出 的数据作为蝶形运算器的端口4输入。将端口 1的计算结果直接作为最终输出数据输出,将 端口 2的数据原址存入RAM3,将端口 3的数据原址存入RAM2,将端口 4的数据原址存入 RAM4...其中a,al...代表级,如最后一级为3级运算,即64点,那么a = 4,al = 1。如果最后一 级为4级运算,即256点,那么3 = 16,31=4,32 = 1。如果最后一级为1级运算,即411点,那么曰 = 4'M/16,al=4'M/64. . .aM-l = l〇
[0094] (7)当完成最后一级运算后,1/4*N的数据已经顺序输出完毕,接下来依次输出 RAM2~4的数据即可。
[00M]总结寻址不难发现:
[0096] 对第一级的数据可W从各个RAM依次读出并顺序输入到蝶形运算的4个端口进行 运算。运算的输出数据分成16组(每个蝶形运算器同时输出4组数据,每个蝶形运算器输出 端 口产生 4 组数据),依次存入 RAM1、2、3、4,RAM2、3、4、1,RAM3、4、1、2,RAM4、1、2、3中。
[0097] 对中间级的数据寻址时,RAM1始终从地址0开始读出,并且将读出的数据分别输入 到蝶形运算器的输入端口 1、2、3、4,依次循环。每次转换输入端口的数据长度依次为1级1/ 4*N,2级1/16*N. .M级1/4~M*N,其中N = 4~]\LRAM2起始读地址为al+a2...,若为1级计算,曰1 = l/4*N,a2,a3...=0,若为2级运算,al = l/4*N,a2 = l/16*N,a3...=0,若为M级计算,al = l/4*N,a2=l/16*N. . .aM=l/4~M*N,之后顺序读出地址,地址在读到最大值时返回到地 址0继续寻址,知道完成整个地址空间深度的一次循环。RAM3、4起始读地址分别为2(al + a2...)和3(al+a2...),其它同RAM2操作。当蝶形运算完毕开始写入时,与读地址位置一致, 实现原址存储,需要注意的是,每个蝶形运算器输出端口的每4组数据需要放在不同的RAM 中,每组的数据长度根据级数定义,1级运算输出为1/16*N,2级运算输出为1/64*N....端口 1的数据存储位置依次为RAM1、2、3、4循环,端口 2为RAM2、3、4、1循环,端口 3为RAM3、4、1、2循 环,端口 4为RAM4、1、2、3循环。
[0098] 对最后1级的数据寻址时,根据基4蝶形运算图最终输出顺序的特点,寻址规律如 下:第一步,将ram内的数按照地址分成4组,称为1级组。每组的深度为1/16*N,编号为组1~ 4,然后RAM1按照0、2/16*N、3/16*N、l/16*N进行寻址,即顺序为组l、组3、组2、组4的首地址, 其它RAM在此地址基础上加上al+a2...即可。第二步,对每个1级组再分4组,称为2级组,每 组的深度为1/64*N,编号为组1~4,然后RAM1按照组1、组3、组2、组4的地址寻址,其它RAM2 在此基础上加上al+a2...即可。(第一步中已经对二级组1寻址)第Ξ步,对每个2级组再分4 组....直到每组数据的个数为1停止分组。经过蝶形运算后,输出端口 1的数据直接送至总 模块的输出端口,端口 2的数据存入RAM3中,端口 3的数据存入RAM2中,端口 4的数据存入 RAM4中。当蝶形运算完毕后,1/4*N的数据输出完毕,此时再按顺序依次读取RAM2~4的数据 输出。
[0099] 根据W上过程,本实施例的基于FPGA的FFT方法采用基4蝶形运算器,提高了运算 速度,采用兵鸟缓存、循环寻址的方式实现了数据的原址计算,在存储中间数据时不需要额 外的RAM,在数据顺序输出时不需要额外的RAM,(对比表2和表3可知)基-2蝶形运算单元的 FFT装置相当的情况下减少了存储数据的RAM的总深度,提高了对RAM的利用率,节省了FPGA 的资源。表3统计了存储数据占用的RAM总深度和进行运算占用的DSP乘法器的数量,其中存 储RAM的位宽为数据位宽,如下:
[0100] 表3应用基-4蝶形运算器的FFT装置占用的资源量
[0101]
[0102]本领域内的技术人员应明白,本实用新型的实施例可W为系统、或计算机程序产 品。因此,本实用新型的装置可采用完全硬件实施例的形式。本实用新型是参照根据本实用 新型实施例的设备(系统)的流程图和/或方框图来描述的。尽管已描述了本实用新型的优 选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对运些实施例作出另 外的变更和修改。所W,所附权利要求意欲解释为包括优选实施例W及落入本实用新型范 围的所有变更和修改。
[0103] 本实用新型提出的基于FPGA的FFT装置,采用基4蝶形运算器,提高了运算速度,采 用循环寻址的方式在存储中间数据时不需要额外的RAM,在数据顺序输出时不需要额外的 RAM,在DSP乘法器使用数量与应用基-2蝶形运算单元的FFT装置相当的情况下减少了存储 数据的RAM的总深度,提高了对RAM的利用率,节省了FPGA的资源。
[0104] 虽然结合附图描述了本实用新型的实施方式,但是本领域技术人员可W在不脱离 本实用新型的精神和范围的情况下做出各种修改和变型,运样的修改和变型均落入由所附 权利要求所限定的范围之内。
【主权项】
1. 一种基于FPGA的FFT装置,其特征在于,包括: 缓存模块(1)、控制模块(2)和基-4蝶形运算器(3); 所述控制模块(2)分别与缓存模块(1)和基-4蝶形运算器(3)相连,用于控制数据的输 入、输出,用于控制数据以乒乓缓存的方式缓存至缓存模块(1)中,用于控制数据以循环寻 址的方式在基-4蝶形运算器(3)中完成FFT运算; 所述缓存模块(1)用于初始输入前3/4的数据,输出后3/4的运算结果,并用于保存中间 数据; 所述基-4蝶形运算器(3)用于初始输入后1/4的数据,输出前1/4的运算结果。2. 根据权利要求1所述的基于FPGA的FFT装置,其特征在于,所述缓存模块(1)为多个双 口 RAM或多个单口 RAM。3. 根据权利要求2所述的基于FPGA的FFT装置,其特征在于,所述双口 RAM的个数为7个 或8个,由FFT运算的点数决定。4. 根据权利要求2所述的基于FPGA的FFT装置,其特征在于, 所述多个RAM的总深度小于等于FFT运算点数的两倍。5. 根据权利要求1所述的基于FPGA的FFT装置,其特征在于,所述基-4蝶形运算器(3)的 个数为1个或2个,由FFT运算的点数决定。
【文档编号】G06F9/355GK205486097SQ201620035015
【公开日】2016年8月17日
【申请日】2016年1月14日
【发明人】王纪宁
【申请人】普天信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1