FFT user guide -QII 的使用注意要点
FFT IP core的总体架构分析:FFT分为fixed transform size architectture 和 variable streaming architecture。
variable streaming architecture下又分为radix-22 和radix-4/2两种运算结构,而内部数据运算表达方式可分为fixed point ,floating point 和block floating point三种。、
数据输入输出方向有可以分为natural order bit-reverse or digit-reverse 和DC centered方式。在运算时的核还可以分为single output engine和Quad-output engine两种。
而IO数据流有根据不同的速度要求可以分为streaming ,variable streaming ,buffered burst ,burst四种IO 流方式。下面将一一详述以上结构。
1、(Quad—output)FFT四输出fft引擎
2、Buffered Burst缓冲突发结构。在此结构中transform time(转换时间)定义为已经加载N点输入数据到第一个转换输出样点准备输出的时间
3、Burst(突发数据结构),在这里可以选择岁输出FFT引擎个数
4、Transform length(转换长度)Data precision(数据精度),Twiddle Precision(旋转因子精度):注意旋转因子精度必须小于数据精度
5、Streaming(流结构):一个4输出fft引擎可以满足streaming结构下1024点的足够性能。
6、Buffered burst 和burst数据流结构可以选择fft引擎个数,并且可以在Engine Architecture中选择single output fft引擎结构。
7、Complex Multiplier Implementaion复数乘法器实现:在这里选者复数乘法器的结构。在implementation multiplier in中选择如何实现乘法器。
8、Variable Streaming 变量流数据结构,如选择这一项其变换长度为最大的变换长度。Variable Streaming +Floating point Architecture则默认的精度为32bit,reverseI/O order(反转输出顺序)是Digit Reverse Order。
9、Input order和Output order选择提供给fft或fft输出的数据的顺序,Natural order是自然顺序(1,2,3……N-1),Bit reverse order输入的是bit-reversed order(位反转)。Digit Reverse order 输入的顺序为Digit Reverse order。
10、Data presentation(数据表示法):Fixed Point 定点数 或Floating Point浮点数。定点数显示所对应的反转顺序为bit-reverse,采用基-2结构;浮点数显示所对应的是digit-reverse,采用基-4/2混合结构。
11、Digit-reversed order:基-2的是[7 6 5 4 3 2 1]--〉digit-reverse---〉[1 2 3 4 5 6 7];若是基-4的是[7 6 5 4 3 2 1 0]--〉digit-reverse---〉[1 0 3 2 5 4 7 6];natural order---〉[0 1 2 ……N-1]。
Digit-reversal is similar to bit-reversal – actually, bit-reversal is the
single digit case of digit-reversal. Digit reversal reverses digits
instead of bits.一个BIT,叫BIT-REVERSE, 多个BIT叫DIGIT-REVERSE
12、DSP Resource Optimization只在Stratix V devices器件中使用
一、I/O order 选择
仔细选择输入输出数据的顺序可以获得硬件资源上以及输出延时上的提升,具体表述如下表格:
比如,在input order为natural,output order为bit reverse时,ifft则输入为bit reverse 输出为natural,这时可以用最少的memory并且获得最小延迟(在ft工作于单引擎状态时)。
二、Engine 选择
四输出(Quad-output engine)结构如下图
单输出引擎结构:
三、I/O数据流结构
1、Streaming(流结构)
流I/0数据流结构允许输入数据连续处理,并输出连续的复数数据流,这个过程中不需要停止FFT函数数据流的输入和输出。图1.1给出了一个这种数据流结构的仿真结果。
图1.1 Streaming IO数据流结构仿真时序图
FFT兆核函数采用Altera Atlantic接口I/0协议,输入接口为主设备汇端(Master Sink)而输出接口为主设备源端(Master Source)。
在reset信号无效后,数据源将sink_valide置为高有效,向FFT通知在输入端至少有N个复数据样点可以输入。FFT函数将sink_ready信号置高电平,表明有能力接收这些输入信号。当sink_ready(FFT核发出的)和sink_valide同时有效时,传输开始。数据源加载第一个复数据样点到FFT函数中,同时将sink_sop(start)信号置高电平,表示输入模块的开始,在下一个时钟周期,sink_sop信号被复位,并以自然顺序加载数据样点;当最后一个数据输入后,sink_eop 被置为有效 ,sink_valid仍处于有效,并完成这一帧数据的传输。然后在下一个时钟将sink_sop置为有效,并重复上一过程。
Streaming IO数据流结构控制时序如下图
Figure 3–4. FFT Streaming Data Flow Architecture Input Flow Control
注意:在每一帧数据传输时要注意sink_valide,sink_ready,inverse要同sink_sop同步。
当完成数据转换后,FFT模块将source_valid置为有效,并以自然顺序输出变换域的数据,FFT模块输出source_sop表示第一个有效数据的输出。在N个数据(一帧)都变换结束之后即 N个时钟后,FFT模块将source_eop置为有效表示输出数据的结束。输出时序图如下。
Figure 3–5. FFT Streaming Data Flow Architecture Output Flow Control
2、Variable Streaming(变量流结构)
在变量流结构中,允许数据连续输入处理,并输出连续的复数数据流,这一点同streaming IO数据流一样。
不同点:
2.1 可以按照数据处理的要求,通过改变fftpts的值随时改变FFT处理的数据帧所包含的数据个数,即改变FFT的变换大小
fftpts要与sink_sop同步.
具体fftpts二进制与变换大小对应表格如下:Table 3–2. fftpts and Transform Size
要改变每块数据变换方向inverse,一定要同 sink_sop 脉冲同步。当FFT变换结束后会置高有效source_valid,
并且输出变换域的数据块(block),输出source_sop有效来表示第一个输出数据,而输出数据的顺序与在IP Toolbench中配置时所选择的order一致,顺序一般为natural 和bit-reverse两种。数据输出时序如下图:
Figure 3–6. Output Flow Control—Bit Reversed Order
在sink_valid有效时FFT对输入的数据进行变换,当sink_valid无效时,FFT变换将停止,直到sink_valid再次有效时在开始变换。这一意味着任何先前已经进入FFt的帧也将停止变换。时序原理图如下:Figure 3–7. FFT Behavior When sink_valid is Deasserted
在两帧数据之间sink_valid变为无效,当前帧的数据将会继续被变换并输出,但是在同一帧数据传输中sink_valid变为无效则会停止,直至再次有效。另外,FFT还可通过clk_en信号被随时停止。
2.2动态改变FFT的大小
当FFt输入数据大小改变时,FFt核将通过置无效sink_valide来停止数据的输入,并将先前一帧数据变换结束输出,下图是在engine-only模式下的时序图Figure 3–8. Dynamically Changing the FFT Size
2.3对于IO数据顺序的影响
engine-only mode时:在第一个有效数据输入后的N+(大于N)的延迟后,变换数据才输出,延迟大小视N的大小来决定。
时序图如下:Figure 3–9. Data Flow—Engine-Only Mode
engine with bit-reversal mode时:在第一个有效数据输入后的2N+(大于2N)的延迟后,变换数据才输出。
时序图如下:Figure 3–10. Data Flow—Engine with Bit-Reversal or Digit-Reversal Mode
3、Buffered Burst (缓冲突发结构)
缓冲突发I/O数据流结构的FFT需要的存储器资源比流动I/O数据流和变量流结构少,但平均模块吞吐量减少。缓冲突发结构数据时序仿真如下图:Figure 3–11. FFT Buffered Burst Data Flow Architecture Simulation Waveform
在reset置为无效后,FFT将sink_valid置为有效,显示FFT可以接受数据,sink_valid和sink_ready都有效时数据开始传输。sink_sop指示第一个输入数据有效,表示传输开始,在紧邻的下一个时钟周期sink_sop被置为无效,并且连续而来的N-1个数据要以natural顺序输入,在最后一个数据输入进来时,要将sink_eop置为有效,并在紧邻的时钟周期置为低。
当完全载入输入模块时,FFT函数仍将sink_ready信号置高一段时间,此时可以将下一block的几个数据输入到FFT模块中的小FIFO中进行缓存,一旦这个小的内嵌FIFO满了,FFT将复位sink_ready信号,表示FFT不再接收其他输入数据。此时,FFT函数开始计算输入数据模块的变换结果。在sink_ready有效时,数据的传输不是强制的。
输入时序流程图如下:Figure 3–12. FFT Buffered Burst Data Flow Architecture Input Flow Control
在FFT处理器从内部输入缓冲区读取输入样点之后,FFT将sink_ready信号重新置为高电平,准备读取下一个输入模块。下一个输入模块的起点由sink_sop脉冲确定。当变换结束,FFt置高source_valid并输出数据。source_sop 与 source_eop分别指示每一块变换后数据的 start-of-packet和 end-of-packet。在数据输入和输出的时间内sink_valid必须保持有效。
其输出时序如下图所示:Figure 3–13. FFT Buffered Burst Data Flow Architecture Output Flow Control
4、Burst (突发结构)
突发I/0数据流结构的执行过程与缓冲突发结构相同,不同的是,对于给定参数设置突发结构在降低平均吞吐量的前提下需要更少的存储资源。
其对应的仿真时序图如下图:Figure 3–14. FFT Burst Data Flow Architecture Simulation Waveform
在突发I/O数据流结构中,FFT核一次只能处理一个载入一个有效输入模块以后,sink_ready信号被复位,直到FFT函数完成转换并且输出数据模块被完全读出为止,这时,sink_ready信号才被重新置位,准备下一个输入模块的载入,但是,sink_valid一直是高有效的。fft内有一个小的fifo,fifo满后sink_ready被置低,但是注意It is not mandatory to provide data to the FFT during sink_ready cycles,在sink_ready时并不要求一定得有数据输入。只有在前一帧变换的数据完全输出后,FFT核才能继续接受后续帧的剩余数据。
1Data Precision数据精度,只有在variable streaming结构时才有28,32bit的精度。
2对于burst和buffered burst可以选择1,2,4,四输出引擎的并行工作结构,或者采用单输出引擎的独立或并行工作。
3只有在variable streaming architecture才能选择input和output的order
4Data Representation内部运算时采用的数据结构,单精度浮点,定点数,块浮点数。
5FFT构成:4mul+2adder利用的DSP部件多LE较少,5mul+3adder利用的DSP部件少LE较多,实现区域可以为DSP blocks only,LE only 和 两者结合。
DSP Resource Optimization只在Stratix V devices中可用。
6实现的存储模块:Twiddle ROM Distribution,Use M-RAM or M144K blocks,Implement appropriate logic functions in RAM
三 、输入输出信号:
注:(1)Variable streaming fixed point FFT only. Growth is log2(N) + 1.