ALTERA FFT IP核使用

ALTERA FFT IP核使用

14.0以前IP核的调用都差不多,以下就只介绍13.0和15.0这两个版本的IP核调用过程
FFT的ip核仿真和综合是不需要license的,编译需要license
FFT IP核有4种模式,分别为:突发模式(Burst)、缓存突发模式(Buffered Burst)、流模式(Streaming)、可变流模式(Variable Streaming)
前3中模式运算速度依次增大,占用资源也依次增加,第4种模式(Variable Streaming)可以用于在线改变FFT的大小。速度和流模式差不多,资源占用更多。
FFT ip核参数配置界面如下图所示。
ALTERA FFT IP核使用_第1张图片
分为基本配置和高级配置两种,基本配置包括配置FFT ip核的变换长度,FFT还是IFFT,数据模式,输入、输出的顺序。数据精度等。高级配置包括FFT的结构,FFT的引擎数。
Tansform:

  • Length是FFT的变换长度,只能选择指定长度,不能自定义。
  • Direction:指定该IP核完成的是FFT变换还是用户可控制的FFT变换或IFFT变换。

I/O:

  • Data Flow:选择输入数据流的方式,共有4中方式,突发(Burst)、缓存突发(BufferedBurst)、流模式(Streaming)、可变长度流模式(Variable Streaming),其中前3种方式运算速度依次增加,消耗的资源也依次增加,第4种方式允许用户改变FFT的变换长度,速度和流模式(Streaming)差不多,但消耗更多资源。
  • Input Otder:输入数据的顺序
  • Output Order:输出数据的顺序

Data and Twiddle:

  • Representation:数据数据的结构,有三种分别是:Block Floating(块浮点)、Fixed Point(定点)、Single Floating Point(单浮点),Fixed Point和Single Floating Point这两种方式只能用于可变流模式(Variable Streaming),对于突发(Burst)、缓存突发(Buffered Burst)、流模式(Streaming)这三种方式来说只能用(块浮点)Block Floating。块浮点就是在数据的一帧数据中有一个共同的缩放因子,这同时也带来了一个问题,当一帧数据中有大有小的时候,共用一个缩放因子会造成小数(比较小的数)误差增大。
  • Data Input Width:输入数据的数据宽度
  • Twiddle Width:旋转因子的数据宽度,旋转因子的数据宽度不能大于输入数据的数据宽度
  • Data Output Width::输出数据的数据宽度,FFT的计算结果是输出的实部和虚部与缩放因子(EXP)的结合,缩放因子为负表示,输出数据需要左移(增大),为正则右移,输出的实部和虚部,缩放因子都是有符号数,这点需要注意。
    Latency Estimaters:

  • Calculation:计算的延迟

  • Throughput Latency:处理延迟
    关于延迟目前还没搞清楚,仿真输出结果的延迟时钟数跟FFT ip核给出的延迟时钟数对不上。

高级设置界面如下图所示:
ALTERA FFT IP核使用_第2张图片
高级设置一共有两个选择,一个是选择运算的结构,一个是选择FFT的引擎数。
运算结构有两种:Single Output(单输出)和Qaud Output(四输出),单输出一个时钟周期只计算一个FFT的蝶形运算,四输出一个周期计算4个基4的蝶形运算。
FFT的引擎数越多,计算速度越快,当然也消耗更多的资源。默认是四输出,一个FFT引擎,默认设置即可。

设置完参数后即可点击Generate HDL来产生HDL文件(综合文件和仿真文件)。界面如下图:
ALTERA FFT IP核使用_第3张图片
上面是残生综合文件(qip),下面是产生仿真文件(sip),如果不需要仿真可以不产生仿真文件,综合文件一定要产生。
再下面是IP核的路径,默认在当前工程目录下新建一个跟自己设定的IP核名字一样的文件夹,综合文件盒仿真文件都在里面。
点击Generate即可。

生成后的bsf文件如下如所示:
ALTERA FFT IP核使用_第4张图片
一个时钟,一个复位,一个FFT/IFFT控制线,一个sink,一个source
时钟就是FFT ip核运算的时钟,reset_n是FFT ip核复位信号,低电平有效,复位的时候sink_ready信号一直为低(无效),inverser设置FFT变换还是IFFT变换,低电平表示FFT,高电平表示IFFT。
sink信号:

  • sink_valid:输入数据有效信号,在输入数据期间要保持有效
  • sink_sop:输入数据起始信号,与第一个数据对齐,只需保持一个时钟周期即可
  • sink_eop:输入数据结束信号,与最后一个数据对齐,只需保持一个时钟周期
  • sink_ready:输入准备好信号,此信号为高表示可输入变换数据,否则不要输入变换数据
  • sink_error:输入错误信号,置0即可
  • sink_real:输入的实部信号
  • sink_imag:输入的虚部信号
    Source信号:

  • source_valid:输入有效信号,FFT变换完成后,此信号置高,开始输出数据

  • source_ready:输入数据准备好信号,置1即可
  • source_error:输出错误信号,若输入的数据格式有误,则不进行FFT变换,并给出错误值,根据错误值可查看手册,确定是输入数据怎么错了。
  • source_sop:输出数据起始信号,与输出的第一个数据对齐
  • source_eop:输出数据的终止信号,与输出的最后一个数据对齐
  • source_real:输出数据的实部
  • source_imag:输出数据的虚部
  • source_exp:数据数据的缩放因子
    注:
  • FFT IP核的输入数据和输出数据,缩放因子都是有符号数
  • 实际运算的结果是实部和虚部与缩放因子的结合,若缩放因子为负,实部和虚部要左移相应的位数,若为正则右移,例如:缩放因子宽度为6,二进制值为101011,该值为有符号数,表示-21,则实部和虚部需要左移21位才是最终结果。
  • 若是FFT逆变换,只需要把inverser置1即可

你可能感兴趣的:(FPGA)