跳转至

参考链接

简介 • 快速傅里叶变换 LogiCORE IP 产品指南 (PG109) • 阅读器 • AMD 技术信息门户 --- Introduction • Fast Fourier Transform LogiCORE IP Product Guide (PG109) • 阅读器 • AMD 技术信息门户

1. Xilinx FFT v9.0简介

版本:9.1

接口(Interfaces):AXI4-Stream

FFT IP核简介:快速傅立叶变换(FFT)是一种计算离散傅立叶变换(DFT)的高效算法。FFT 内核可在多达 12 个并行通道上计算 8 至 65536 点的正向或反向复变。输入数据是复数值矢量,用 8 至 34 位宽的二乘数或 32 位宽的单精度浮点数表示。相位系数可以是 8 至 34 位宽。所有存储器都在芯片上,使用块 RAM 或分布式 RAM。提供三种算术类型:全精度无标度、标度定点和块浮点。有几个参数可在运行时配置:点大小、正向或反向变换的选择以及缩放时间表。有四种架构可供选择,以便在大小和转换时间之间进行权衡。

2.Vivado中IP核的配置

主要配置通道数,点数,时钟,吞吐量,结构,以及是否可以运行时配置,需要注意的是结构的配置会影响调整因子。如下图所示:

第一页:

  1. number of channels :变换通道,可以选择多通道,实现多帧数据同时进行FFT运算;

  2. transform lenfgth : FFT变换长度(最大FFT点数),如果选择了最下面的‘run time configurable transdorm legth’,则该参数是FFT变化的最大长度,一般不选。

  3. Target Clock Frequency (MHz)(目标时钟频率):根据奈奎斯特采样定理,采样频率需大于信号频率的两倍;

  4. Target Data Throughput(MSPS)(目标数据吞吐量):FFT采样点数,代表对信号在频域的采样数;

  5. architecure choice : 这个标签里主要是用来实现,FFT变换所选用的架构:

  6. Automatically selected : 自动选择所需要的,FFT变化架构。

  7. pipelined streaming :并行流水线结构

  8. radix-4, burst i/o : 基4 I/O突发结构 

  9. radix-2, burst i/o :基2 I/O突发结构

  10. radix-2 life, burst i/o :基2 I/O突发结构

​ 其中流水线的结构变换处理时间最短,资源消耗最大。

run time configurable transdorm legth : 该选项可以在FFT变换中通过设置s_axis_config_tdata中NFFT字段的长度来改变FFT变化的长度。

第二页:

这里主要是配置 数据宽度,格式,控制信号,输出方式,和可选的控制信号。

  1. data format;下拉标签中,对应着FFT IP核支持两种数据类型:

  2. 定点全精度

  3. 定点缩减位宽

  4. scaling optios :缩放选项 :

  5. block floating point :不管输入的格式如何,FFT变化内部都采用浮点,会根据每一级的的数据情况自动缩放。 这个模式的输入输出位宽一致,便于调用。

  6. scaled :在m_axis_data_tuser中会有5BIT表示每一级的缩放情况,在s_axis_config_data中会有相应的字段配置配置缩放因子.每一级别包含2个stage ,2个bit 表示一级缩放,一般0-3可选,如果log(NFFT)不是2的倍数,则最高一级的缩放只能在0-1之间选取。

  7. unscaled :不用担心变化过程中会出现溢出,但是输入是32bit的话,输出是64bit。

  8. Precision Options:精度选项

  9. Input Data Width:输入数据宽度
  10. Phase Factor Width:相位因子宽度
  11. Control Signals:控制信号,主要有时钟使能信号和低电平有效的复位信号
  12. output odering options: 输出顺序选项。
  13. nature order:就是FFT变化后的输出已经调整了顺序,按照xk_index自然顺序列出变化结果,
  14. bit/digital reserved oder就是按照变化后的顺序直接输出,是倒序输出,需要自己后续处理,

  15. optional output fileds :选项输出字段

  16. xk_index:FFT 变幻的结果索引,在m_axis_data_user中有相应的字段。
  17. OVFLO是变换中溢出的指示信号,对应event_fft_overflow.

第三页

一般不需要变动

1: 数据 2: 相位因子 3: 重排序缓冲。 4: 复数乘法器 5: 蝶形运算单元。

3.接口定义

名称 方向 说明
aclk 输入 模块工作时钟,上升沿有效
aclken 输入 时钟使能信号,高电平有效,低电平时内核暂停工作,可通过此信号降低内核运行的最大时钟频率
aresetn 输入 低电平同步复位信号,优先级高于aclken,低电平至少持续两个时钟周期
配置 -
s_axis_config_tvalid 输入 配置通道的tvalid,由外部主机断言以表示它能够提供数据
s_axis_config_tready 输出 配置通道的tready,由内核断言以表示它已准备好接收数据
s_axis_config_tdata 输入 配置通道的tdata,携带配置信息,包括NFFT、FWD/INV、CP LENZ和SCALE SCH
输入数据 -
s_axis_data_tvalid 输入 输入数据通道tvalid,由外部主机断言以表示它能够提供数据
s_axis_data_tready 输出 输入数据通道tready,由内核断言以表示它能够接收数据
s_axis_data_tdata 输入 输入数据通道tdata,由外部主机提供待处理的数据
s_axis_data_tlast 输入 由外部主机断言表示最后一组数据,只在生成事件event_tlast_unexpected和event tlast_missing时,内核才使用它
输出数据 -
m_axis_data_tvalid 输出 输出数据通道tvalid,由内核断言表示它能够提供数据
m_axis_data_tready 输入 输出数据通道tready,由外部主机断言表示它能够接收数据
m_axis_data_tdata 输出 输出数据通道tdata,由内核提供FFT后的数据
m_axis_data_tuser 输出 输出数据通道tuser,由内核提供XK INDEX, OVFLO, BLK EXP信息
m_axis_data_tlast 输出 数据数据通道tlast,由内核断言表示最后一个输出数据

4. 配置说明

FFT(快速傅里叶变换)他是一种高效的算法,用于将信号从时域转换到频域中,在FPGA开发中,FFT IP核通常是由FPGA供应商提供的预设模块,理解和配置这个IP核当时很重要的一环。

4.1 FFT点数

  • 定义:FFT点数决定了FFT变换的分辨率,点数越高,频域的分辨率也就越高,但是计算复杂度和资源兄啊好也会随之增加。
  • 配置方法:
  • 我们需要根据信号的采样率和所需要的频率分辨率来选择FFT的点数,例如如果采样一个100khz的信号,我西黄频率分辨率为1hz,那么需要设置100k个点的FFT

4.2 采样率

  • 定义:采样率指的是信号在单位时间内被采样的次数,我们根据我们熟知的奈奎斯特采样定理可以知道,采样率至少是该信号最高频率的两倍
  • 配置方法:
  • 确定信号的最高频率成分,然后选择合适的采样率

4.3 数据位宽

  • 定义:数据位宽决定了输入和输出数据的精度。位宽越高,数据的精度越高,但资源也会随之增加
  • 配置方法:
  • 根据信号的动态范围和精度要求选择合适的数据位宽,例如对于一般的音频信号,16位的数据位宽就已经足够了,但是对于高精度的测量信号,可能需要32位或者更高的位宽才能满足要求