资源描述
XILINX FFT IP核介绍与测试2013-05-27 00:50:52| 分类:Verilog HDL | 标签:hdl fpga xilinx ip |举报|字号订阅FFT算法是计算DFT的高效算法。算法最初由J.W.Cooley和J.W.Tukey 于1965年提出,之后又有新的算法不断涌现,总的来说发展方向有两 个:一是针对N等于2的整数次幕的算法,如基2算法、基4算法和分裂 基算法等;另一个是N不等于2的整数次幕的算法,如素因子算法、 Wino grad算法等。其中基2算法是目前所常用的FFT算法,其核心思 想是将N点的序列逐次分解为(N-1)/2点,最后分解为2点DFT进行计 算,从而消除DFT中大量的重复运算。FFT算法可从时域或频域对序列进行分解: 时间抽取法(DIT),即直接将序列x(n)按奇、偶逐次分成奇数子序列 和偶数子序列,然后通过计算子序列的DFT来实现整个序列的DFT; 频率抽取法(DIF),即将频域X(k)的序号k按照奇、偶逐次分解成偶 数点子序列和奇数点子序列,然后计算子序列的DFT,得到整个频域内 的 DFTo时间抽取法和频率抽取法的计算复杂程度和所需要的计算量都是相同 的,且由两种方法不同的分解形式可知:时间抽取法需要对输入数据序 列x(n)进行重新排序,频率抽取法需要对输出数据序列Xk进行进行排 序。目前FFT算法已经广泛应用于数字信号处理、图像处理、石油勘探和地 震预测等众多领域。与此同时,为了便于FFT算法在工程实践中的应用, 各大FPGA生产商也都纷纷推出了具有相关功能的IP模块库。其中由Xilinx 公司研发的 IP 核 Fast Fourier Transform V7.1提供了 FFT 算法 多种可选的计算参数、结构、数据输入输出流的顺序方式,可以根据用 户的需求方便地实现FFT算法。2 Xilinx FFT IP核功能实现Xilinx IP核功能是基于复杂系统功能的硬件描述语言(HDL)设计文件, 这些验证的功能对于所有的Xili nx FPGA器件的结构都能够达到最优 化,且提供硬件描述语言(VHDL,Verilog)的功能仿真模型,可以在标准 EDA仿真工具中进行设计和调试。Xilinx FFT IP核V7.1是Xilinx公司配套其FPGA开发工具ISE14.1推出 的,其最大的系统时钟频率达到了 550MH z,最大的数据吞吐量达到 550MSPS,最高可进行65536点的FFT运算,最大输入数据和相位因 子位宽为34bit,支持所有的主流Xilinx FPGA芯片。同时,Xilinx FFTIP核V7.1可以实现变换长度为N点实数或复数形式的FFT变换及FFT 逆变换(IFFT), N的取值范围是(865536)。输入数据实部和虚部都要 以位宽为M bits的二进制补码形式表示,M取值范围是(834);同样, 相位因子位宽取值范围也是(834)。数据、相位因子以及输出数据重排 序的缓存数据,在FFT实现的过程中,都可以用块RAM或者分布式 RAM进行存储。对于Burst I/O结构,块RAM可以存储任意点数的数据和相位因子,而分布式RAM则只能存储点数不大于1024点的数据 和相位因子;对于Streaming I/O结构,可采用混合存储的方法,先选 择使用块RAM存储器的阶数的数量,然后对剩余的采用分布式RAM。 Xili nx FFT IP核有四种结构可供选择,用户可以在逻辑资源使用的多少 和转换时间的长短之间进行取舍,具体情况分别如下: 流水线,Streaming I/O结构:允许连续的数据处理,使用最多的 逻辑资源。 基4, Burst I/O结构:提供数据导入/导出阶段和处理阶段,导入数 据和处理数据时单独进行的。此结构拥有较小的结构,但是转换时间较 长。 基2, Burst I/O结构:使用较少的逻辑资源,同基4阶段,提供两阶 段的过程。 基2 Lite Burst I/O结构:这是一种基于基2结构的变体,采用了时 分复用的方法使用了最少的逻辑资源,但是转换时间最长。对于Burst I/O结构,使用DIT抽取法;流水线,Streaming I/O结构 则使用DIF抽取法。在实际硬件操作中,模块的执行速度是很重要的参数,因此本文进行的 是基于流水线,Streaming I/O结构的仿真验证,进行连续的数据处理。 流水线,Streaming I/O结构对一系列基2蝶形处理引擎采用流水线技 术设计,且每个蝶形处理引擎都有自己独立的存储体对输入数据和中间 数据进行存储。这种结构下,FFT IP核具有同时处理当前帧N点数据,载入下一帧N点数据,输出前一帧N点数据的能力。Xilinx FFT IP核V5.0支持三种算法型:全精度无压缩、块浮点型和定 点压缩(压缩比由用户自定义)。对于全精度无压缩结构,数据通道内 任意一位有意义的整数都将被保留,在运算过程中产生的小数部分都被 截断或者取整。此种结构,对于定点算法,经过多级乘法操作以后,数 据位宽将加倍递增,其输出位宽为(输入位宽+log2(数据转换长度)+ 1) bits。对于块浮点型,对于一帧数据里面的任何一数据点有相同的压缩 比,这个压缩比值由块指数(Block Exponent)作为输出值显示,而且只 有在FFT IP核检测到将会产生数据溢出的时候,才会进行压缩运算。本文所采用的是定点压缩结构。该结构相对于全精度无压缩结构,能够 大大减少FPGA内部资源Xtreme DSP Slices和块RAM的使用,而相 对于块浮点型,可灵活调节压缩比。定点压缩结构的压缩比例表 (Scale_SCH)完全由用户自定义得到。压缩比例是按照1、2、4或者8对 每一阶进行压缩,即对应于分别向右移位0、1、2或者3。如果压缩不 充分,则蝶形输出结果会超出其动态范围,引起数据溢出。对于Burst I/O结构,Scale_SCH的表示方法:对于每一阶的压缩比都由指定的一 个2 bit的数表示,零阶的2 bit数为最低位,具体形式为 ?N4,N3,N2,N1,N0,每一个2 bit数分别对应着相应阶数的压缩比。例:对于基4结构,数据转换长度N = 1024, Scale_SCH = 01 10 00 1110则表示对阶0右移位2,对阶1右移位3,对阶2右移位0,对阶3右移 位2,对阶4右移位1。经验总结(可以防止产生数据溢出):对于1024 点的基4, Burst I/O 结构,Scale_SCH二10 10 10 10 11;而对于 1024 点的基2结构,Scale_SCH = 01 01 01 01 01 01 01 01 01 10。对于流水线,Streaming I/O结构,把临近的一对基2阶组在一起,即 阶0和阶1为组0,阶2和阶3为组1,等等。Scale_SCH的表示方法:对 于每一组的压缩比都由指定的一个2 bit的数表示,零组的2 bit数为最 低位,具体形式为?N4,N3,N2,N1,N0,每一个2 bit数分别对应着相 应组的压缩比,表示同组内的两个基2阶有相同的压缩比。例:数据长 度 N = 1024, Scale_SCH = 10 10 00 01 11表示对组0 (阶0和阶 1) 右移位3,对组1 (阶2和阶3)右移位1,对组2 (阶4和阶5)没有移位, 对组3 (阶6和阶7)右移位2,对组4 (阶8和阶9)右移位2。若变换长 度N不是4的幕次方的时候,最后一组只包含一个基2阶,只能用00或 者01表示。经验总结(可以防止产生数据溢出):N = 512时,Scale_SCH = 01 10 10 10 11 N = 1024时,Scale_SCH = 10 10 10 1011。压缩比例Scale_SCH的位宽,对于流水线,Streaming I/O结构和基4, Burst I/O 结构,为2*ceil(0.5*log2(N);对于基2, Burst I/O 结构和 基2 Lite Burst I/O结构,为2*log2(N),其中N为转换数据长度。3 FFT IP核的仿真验证1)IP核配置:Page 1:(配置实现结构)Page 2:(数据位宽以及数据处理)Page 3:(配置数据缓存空间)接口说明:信号名称传输方向说明XN_REInput输入操作数实部,以2的补码输入。XN_IMInput输入操作数虚部,以2的补码输入。STARTInput当此信号变高时,开始输入数据,随后直接进行FFT转换操作和数据输出SCALE_SCHInput进行数据缩减运算有用,其总的效果是输出结果/NSCALE_SCH_WEInput作为SCALE_SCH的使能信号FWD _INVInput用以指示IP Core为FFT还是IFFT, 1为FFTUNLOADInput对于Burst I/O结构,此信号将开始以自然顺序输出处理的结果。对于流水线结构和比特逆序输 出的情况,此端口不是必要的。FWD_INV_WEInput作为FWD_INV端口的使能信号RESETInputFFT核复位信号CLKInput工作时钟,与输入数据流有关XK_REOutput输出数据总线实部,以2的补码输出XK_IMOutput输出数据总线虚部,以2的补码输出XN_I NDEXOutput位宽等于log2(N),输入数据的下标XK_INDEXOutput位宽等于log2(N),输出数据的下标RFDOutput输入数据有效信号,咼电平有效DVOutput输出数据有效指示信号,当输出端口存在有效数 据时变咼BUSYOutputIP Core工作状态的指示信号,在进行FFT转换时为咼电平EDONEOutput咼有效。在DONE信号变咼的前一个时钟变为咼电平DONEOutput咼有效。在FFT完成后变咼,且只存在一个时钟。 在DONE变咼后,IP Core开始输出计算结果。通过例化调用Xilinx IP核来实现一个512点、数据位宽和相位因子位宽 都为10 bit的FFT算法模块,时钟频率为50MHz (时钟频率越高,可 以获得更高的复用倍数,节省更多的资源面积),采用流水线,Streami ng I/O和定点压缩结构。为了方便验证FFT IP核功能的正确 性:以零开始计数,在每个时钟上升沿到来时,进行加1得到的数据, 分别作为其输入信号的实部和输入信号的虚部。Scale_SCH = 01 10 1010 11,在ISE 14.1中建工程,例化调用Xilinx FFT IP核,然后利用ModelSimSE 6.5进行仿真,其仿真时序如图2所示。时序验证方面:可以看出整个时序在实现中是完全正确的。从图可以看 出:busy信号高的的时候表明FFT IP核正在进行FFT运算,busy信 号拉低后表明运算已经结束,要向外输出FFT运算结果;edone信号 在done信号之前一个周期到达;此时done信号拉高一个周期,表明 FFT运算完成;而且由于进行的是512点的FFT运算,所以,每间隔512 个时钟周期,edone和done信号都会拉高一次;rfd信号一直拉高, 表明输入数据一直传送到FFT IP核的输入端口,跟采用流水线, Streaming I/O结构,可以进行连续数据处理是一致的;dv信号一直 为高,表明输出的信号一直有效。
展开阅读全文