参考链接
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核的配置
主要配置通道数,点数,时钟,吞吐量,结构,以及是否可以运行时配置,需要注意的是结构的配置会影响调整因子。如下图所示:
第一页:
**number of channels :**变换通道,可以选择多通道,实现多帧数据同时进行FFT运算;
transform lenfgth : FFT变换长度(最大FFT点数),如果选择了最下面的‘run time configurable transdorm legth’,则该参数是FFT变化的最大长度,一般不选。
Target Clock Frequency (MHz)(目标时钟频率):根据奈奎斯特采样定理,采样频率需大于信号频率的两倍;
Target Data Throughput(MSPS)(目标数据吞吐量):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变化的长度。
第二页:
这里主要是配置 数据宽度,格式,控制信号,输出方式,和可选的控制信号。
**data format;**下拉标签中,对应着FFT IP核支持两种数据类型:
- 定点全精度
- 定点缩减位宽
**scaling optios :**缩放选项 :
block floating point :不管输入的格式如何,FFT变化内部都采用浮点,会根据每一级的的数据情况自动缩放。 这个模式的输入输出位宽一致,便于调用。
scaled :在m_axis_data_tuser中会有5BIT表示每一级的缩放情况,在s_axis_config_data中会有相应的字段配置配置缩放因子.每一级别包含2个stage ,2个bit 表示一级缩放,一般0-3可选,如果log(NFFT)不是2的倍数,则最高一级的缩放只能在0-1之间选取。
unscaled :不用担心变化过程中会出现溢出,但是输入是32bit的话,输出是64bit。
Precision Options:精度选项
- Input Data Width:输入数据宽度
- Phase Factor Width:相位因子宽度
Control Signals:控制信号,主要有时钟使能信号和低电平有效的复位信号
output odering options: 输出顺序选项。
- nature order:就是FFT变化后的输出已经调整了顺序,按照xk_index自然顺序列出变化结果,
- bit/digital reserved oder就是按照变化后的顺序直接输出,是倒序输出,需要自己后续处理,
**optional output fileds :**选项输出字段
- xk_index:FFT 变幻的结果索引,在m_axis_data_user中有相应的字段。
- OVFLO是变换中溢出的指示信号,对应event_fft_overflow.
第三页
一般不需要变动
1: 数据
2: 相位因子
3: 重排序缓冲。
4: 复数乘法器
5: 蝶形运算单元。
接口定义
名称 | 方向 | 说明 |
---|---|---|
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,由内核断言表示最后一个输出数据 |