• vivado 的IFFT/FFT IP核的配置及调用


            对于viavado 中IFFT IP的使用刚开始的时候,没有找到IFFT的IP,最后经过查找资料发现,在VIVADO中 FFT IP和IFFT IP是用的统一个IP,具体是IFFT还是FFT通过设s_axis_config_tdata=1/0设置fft或ifft模式,而且在同一个工程当中,尽量选择同一个IP多次例化使用。

            FFT IP的设置主要包括三个界面,虽然不是每一个标签栏都需要修改配置,但最好也要知道一下他的作用:

    第一页界面

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

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

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

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

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

                    pipelined  streaming     :    并行流水线结构

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

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

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

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

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

     第二页界面

             第二配置页主要是数据宽度,格式,控制信号,输出方式,和可选的控制信号。需要注意的是输据的输入是自然方式(Natural  Order),输出可以是自然方式也可以是倒序方式(Reversed Order),如果选用倒序方式输出,在后面处理中就要注意这一特性。

             其中在data format;下拉标签中,对应着FFT IP核支持两种数据类型: 
                                           1. 定点全精度 
                                           2. 定点缩减位宽 
             scaling optios :缩放选项 :

                                            1、 block floating point :不管输入的格式如何,FFT变化内部都采用浮点,会根据每一级的的数据情况自动缩放,是的数据不出现溢出的情况,

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

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

              Aresten : 复位信号要勾选,至少保持两个时钟的低电平。

               output odering options: 输出顺序选项。

                                            1、nature order:就是FFT变化后的输出已经调整了顺序,按照xk_index自然顺序列出变化结果,

                                            2、bit/digital reserved oder就是按照变化后的顺序直接输出,是倒序输出,需要自己后续处理,

                                            3、cyclic perfix insertion :循环前缀插入,一般添加,在进行IFFT后可以根据s_axis_config_data中的CP长度配置自动添加CP。

               optional output fileds :选项输出字段,

                                            1、xk_index:FFT 变幻的结果索引,在m_axis_data_user中有相应的字段。

                                            2、OVFLO是变换中溢出的指示信号,对应event_fft_overflow.

                                 

             

     第三页界面:

             不做任何修改。

      第四:

    关于一些端口的说明:

    s_axis_config_tdata:控制输入模式,进行fft/ifft以及衰减因子的设置,第0位为1fft,为0做ifft,高位用于scale因子的设置。

    s_axis_config_tvalid:拉高若干个时钟周期后归零,之后将s_axis_data_tvalid拉高

    s_axis_config_tready:s_axis_config_tvalid拉高两个时钟周期后,该口给1输出;

    s_axis_data_tready:s_axis_config_tvalid拉高两个时钟周期后,该口给1输出,ip核初始化完成,可进行数据输入必须进行赋值;

    s_axis_data_tvalid:拉高2048个周期,输入2048个数据进行fft;

    s_axis_data_tdata:输入32位数据,取低12位数据进行运算;

    s_axis_data_tlast:输入2048个数据后拉高,停止数据输入;

    做fft需要耗费的时钟周期计算如下s_axis_data_tlast- s_axis_data_tvalid

    ,在ip核中可看到:

    m_axis_data_tdata:高位为实部,低位为虚部,由于本程序在always内将值给fft_real端口,所以会延迟一个时钟周期,实际为41,fft_real为42;

    m_axis_data_tvalid:当fft结果输出时拉高,输出2048个点的数据后拉低;

    m_axis_data_tuser:输出fft的地址值,输出值*fs/N为对应频点;

    m_axis_data_tready:完成2048个点的fft后拉高一个时钟周期表示完成fft;

    event_frame_started:输入信号数据时拉高一个时钟周期;

  • 相关阅读:
    Qt 的插件制作遇到的问题
    Qt实现原生Flow实现不了的Item错误排列效果,类似淘宝商品展示
    通过pro文件使Qt的build目录更清爽
    No rule to make target
    Qtcreator中printf()/fprintf()不显示问题处理方法
    QtCreator集成的MSVC套件有问题
    启动程序失败,路径或者权限错误
    图数据库 Nebula Graph 的数据模型和系统架构设计
    NLP(十六)轻松上手文本分类
    NLP(十五)让模型来告诉你文本中的时间
  • 原文地址:https://www.cnblogs.com/lgy-gdeu/p/11590626.html
Copyright © 2020-2023  润新知