Xilinx FFT使用说明和测试

Xilinx FFT使用说明和测试

  • 1 IP接口信号
  • 2 IP基本配置
  • 3 IP功能测试

本文主要介绍Xilinx FFT IP的使用方法

1 IP接口信号

FFT用于计算N点的DFT或者IDFT,N为2m,其中m=2~16。IP的输入输出接口如下表所示,主要包括时钟、复位信号,输入的配置信号,输入的原始数据,输出的变换结果,输出的变换状态,以及事件信号。确保所有的信号输入IP时都有确定的值,不然仿真的时候会出现“Failure: ERROR:add_1 must be in range [-1,DEPTH-1]”

接口 说明
aclk 时钟
aclken 时钟使能
aresetn 复位
s_axis_config_tready 配置信号的tready信号
s_axis_config_tvalid 配置信号的tvalid信号
s_axis_config_tdata 配置信号的tdata信号
s_axis_data_tready 输入信号的tready信号
s_axis_data_tvalid 输入信号的tvalid信号
s_axis_data_tdata 输入信号的tdata信号
s_axis_data_tlast 输入信号的tlast信号
m_axis_data_tready 输出信号的tready信号
m_axis_data_tvalid 输出信号的tvalid信号
m_axis_data_tdata 输出信号的tdata信号
m_axis_data_tuser 输出信号的tuser信号
m_axis_data_tlast 输出信号的tlast信号
m_axis_status_tready 变换状态的tready信号
m_axis_status_tvalid 变换状态的tvalid信号
m_axis_status_tdata 变换状态的tdata信号
event_frame_start 表征开始计算新的数据帧
event_tlast_unexpected 表征没有在期望的地方收到tlast信号,如实际输入数据帧的点数不是期望的数量
event_tlast_missing 在预期最后一拍没有收到tlast信号
event_fft_overflow 数据输出通道存在数据溢出
event_data_in_channel_halt 收到的输入数据的数量与预期的不符
event_data_out_channel_halt IP核有数据输出,但接收端没有准备好而无法输出
event_status_channel_halt IP核有状态信号输出,但接收端没有准备好而无法输出

Xilinx FFT使用说明和测试_第1张图片

  • 配置通道
    配置通道的数据格式如下图所示,由NFFT、CP_LEN、FWD_INV、SCALE_SCH字段,以及为了凑够8bit补足的PAD字段构成,各字段的含义如下表所示。如果需要修改配置,需要对IP进行复位操作,这样s_axis_config_tready信号才会拉高。SCALE_SCH字段的配置也很重要,如果设置的不正确,IP计算的结果与Python计算的结果对不上。
名称 宽度 说明
NFFT 5bit FFT变换的点数
CP_LEN log2(最大点数) 在整个转换输出之前,从转换末尾开始作为循环前缀输出的样本数
CP_LEN可以是从0到比点大小小1的任意数
FWD_INV 每个FFT数据通道1bit 变换类型,1表示FFT,0表示IFFT
SCALE_SCH Pipelined:2×ceil(NFFT/2)
Radix-4:2×ceil(NFFT/2)
Radix-2:2×NFFT
缩放因子,每级的缩放因子由2bit构成

Xilinx FFT使用说明和测试_第2张图片

  • 输入通道
    输入数据通道的数据格式如下图所示,tdata信号可以包含多个数据通道,每个数据通道又由数据的实部和虚部组成,同样需要进行8bit边界补足。
    Xilinx FFT使用说明和测试_第3张图片
  • 输出通道
    输出数据通道的数据格式如下图所示,tdata信号可以包含多个数据通道,每个数据通道又由数据的实部和虚部组成,同样需要进行8bit边界补足。
    Xilinx FFT使用说明和测试_第4张图片
  • 输出用户通道
    输出用户通道的数据格式如下图所示,由XK_INDEX、BLK_EXP、OVFLO字段,以及为了凑够8bit补足的PAD字段构成,各字段的含义如下表所示。
名称 宽度 说明
XK_INDEX log2(最大点数) 输出数据的索引(unsigned 2’s complement)
BLK_EXP 8 每个通道一个,Block exponent (unsigned 2’s complement)
只有在block floating-point被使用时才有效
OVFLO 1 每个通道一个,表征算法是否溢出

Xilinx FFT使用说明和测试_第5张图片

  • 输出状态通道
    输出状态通道的数据格式如下图所示,由BLK_EXP、OVFLO字段,以及为了凑够8bit补足的PAD字段构成,各字段的含义如下表所示。
名称 宽度 说明
BLK_EXP 5 每个通道一个,每个通道的scale量
OVFLO 1 每个通道一个,表征算法是否溢出

Xilinx FFT使用说明和测试_第6张图片

2 IP基本配置

添加XFFT IP,使用GUI对IP的各项参数进行配置,在Implementation Details可以查看配置后各个信号的参数格式。

  • Configuration
    • Number of Channel:输入输出通道的数量
    • Transform Length:FFT点数
    • Target Clock Frequency:工作频率,决定FFT计算延时
    • Architecture Choice:架构选择
    • Run Time Configurable Transform Length:勾选之后FFT点数由配置通道决定,即配置通道的数据包含NFFT字段

Xilinx FFT使用说明和测试_第7张图片

  • Implementation
    • Data Format:数据格式
      • Fixed Point:固定点
      • Floating Point:浮点
    • Scaling Options:缩放选项
      • Block Floating Point:块浮点
      • Scaled:定点缩放
      • Unscaled:全精度,无缩放
    • Rounding Modes:截断方式
      • Convergent Rounding: 将计算结果向着最近的整数舍入
      • Truncation:直接截断
    • Input Data Width:输入数据宽度,指的是单个实部或虚部的宽度
    • Phase Factor Width:相位因子宽度
    • Control Signals:控制时钟使能和复位信号
    • Output Order:输出顺序
      • Bit/Digit Reversed Order:按bit倒序
      • Natural Order:自然顺序
    • Cyclic Prefix Insertion:是否在输出数据中自动插入循环前缀
    • Optional Output Fields:输出用户通道和输出状态通道的数据是否包含XK_INDEX、OVFLO字段
    • Throttle Scheme:在性能和数据定时需求之间进行权衡。Real Time模式通常提供更小、更快的设计,但提供和使用数据有严格的限制。Non Real Time没有这样的限制,但设计可能更大更慢。

Xilinx FFT使用说明和测试_第8张图片

  • Detailed Implementation
    • Memory Option:寄存器类型选择
    • Optimize Options:资源和性能优化选项
      Xilinx FFT使用说明和测试_第9张图片

3 IP功能测试

  • FFT变换
    本例子计算信号f(t)=63sin(2π×50t)+63sin(2π×80t),该信号有两个频率点50和80Hz,幅度的变化范围为[-126,126]。首先需要对该信号进行采样,得到离散的序列,1s内采集256个采样点,得到离散化的数据点存入.coe文件中,作为BRAM的初始化文件,在测试时从BRAM中读出数据送入XFFT IP中进行计算。该测试工程可从GitHub下载。
    • 使用Python程序对f(t)信号进行计算的结果如下图所示,计算结果符合预期。
      Xilinx FFT使用说明和测试_第10张图片
      Xilinx FFT使用说明和测试_第11张图片

    • 使用Vivado进行仿真得到的结果如下图所示,计算的结果与Python的结果一致。
      Xilinx FFT使用说明和测试_第12张图片
      在这里插入图片描述

  • FFT与IFFT变换
    本例子计算信号f(t)=1022sin(2π×5t),该信号有一个频率点5Hz,幅度的变化范围为[-1022,1022]。首先需要对该信号进行采样,得到离散的序列,1s内采集256个采样点,得到离散化的数据点存入.coe文件中,作为BRAM的初始化文件,在测试时从BRAM中读出数据送入XFFT IP中进行计算。该测试工程可从GitHub下载。
    • 使用Python程序对f(t)信号进行计算的结果如下图所示,计算结果符合预期。
      • 原始信号的变化曲线
        Xilinx FFT使用说明和测试_第13张图片
      • 傅里叶变换
        Xilinx FFT使用说明和测试_第14张图片
      • 逆傅里叶变换
        Xilinx FFT使用说明和测试_第15张图片
    • 使用Vivado进行仿真得到的结果如下图所示,计算的结果与Python的结果一致。
      • 整体波形
        Xilinx FFT使用说明和测试_第16张图片
      • 傅里叶变换
        Xilinx FFT使用说明和测试_第17张图片
      • 逆傅里叶变换
        Xilinx FFT使用说明和测试_第18张图片

你可能感兴趣的:(#,Xilinx,IP说明和测试,1024程序员节)