VIVADO IP核整理(二)——FFT


参考:FFT IP核 详细介绍
参考:官方文档介绍

IP 核配置

在 IP Catalog 中搜索:Fast Fourier Transform

在这里插入图片描述
在这里插入图片描述

按照上图所示进行配置,下文对配置内容进行详述。

  • Configuration
    • Number of Channels:FFT 通道数,多通道即代表多帧数据同时进行 FFT 计算
    • Transform Length:FFT 长度
    • 当 Architecture Choise 选择 Automatically Select 时,Target Clock Frequency(期望的时钟频率)和 Target Data Throughput(期望的数据吞吐量)这两个参数用于确定使用的 FFT 架构
    • 四种 FFT 架构
      • Pipelined Streaming I/O:支持连续的数据流处理,具有最高的处理速度,但资源占用也最多。适用于对实时性要求高的应用
      • Radix-4 Burst I/O:资源占用比上级少,处理速度比上级慢
      • Radix-2 Burst I/O:资源占用比上级少,处理速度比上级慢
      • Radix-2 Lite Burst I/O:资源占用最少,但处理速度最慢。适用于对性能要求不高且资源非常有限的场景。
    • Run Time Configurable Transform Length:勾选后,可通过设置 s_axis_config_tdata 中 NFFT 字段的长度来改变 FFT 长度(需小于 Transform Length)
  • Implementation
    • Data Format:可选定点或浮点
    • Scaling Options:在 Radix-4 架构下,每经过一级蝶形运算,值会出现 3bit 的增长;Radix-2 则会出现 2bit 的增长,为避免溢出或资源浪费,需设置缩放模式
      • Scaled(缩放):可通过配置缩放因子控制每一级的缩放情况
      • Unscaled(未缩放):不对数据进行缩放,输出数据位宽会在计算过程中增长
      • Block Floating Point(块浮点缩放):在每个计算阶段动态调整缩放因子,相比于 Scaled 模式,块浮点模式会增加资源使用
    • Rounding Modes:Truncation(截断)、Convergent Rounding(收敛舍入,精度高但资源消耗大)
    • ACLKEN(使能信号)
    • ARESETn(复位信号)
    • Output ordering:
      • Natural Ordering:输出按顺序排列,已处理过
      • Bit/Digit Reversed Order:对于 8 点 FFT,输出顺序为 0、4、2、6、1、5、3、7,需自行后续处理
    • XK_INDEX:频谱索引
    • OVFLO:溢出指示信号
    • Throttle Scheme(节流方案):可选择 Non Real Time(非实时)或者 Real Time(实时)

IP 核接口

s_axis_config_tdata 配置

在这里插入图片描述

字段触发条件定义
NFFT勾选 Run Time Configurable Transform Length位宽 5 bit,数值为 log2(FFT点数)
CP_LEN勾选 Cyclic Prefix Insertion循环前缀长度
FWD/INV必选1 为 FFT,0 为 IFFT,每个 bit 对应一个 FFT 通道,第一通道放在最低位
SCALE_SCHScaling Options 选择 scaled 时配置缩放因子,具体方法见下文
PAD自动触发用于 8bit 对齐,当比特数不足 8 时,用零补齐

SCALE_SCH 配置方法:

  • 基于 Radix-2 架构,蝶形运算的阶数为 log₂(N),基于 Radix-4 和 Pipelined Streaming I/O 架构,蝶形运算的阶数为 log₄(N)
  • 对于 Radix-2 和 Radix-4 架构,为每一阶配置一个缩放因子,因子可选 3/2/1/0,每个因子占 2bit
  • 因子 3 对应缩放 1/8;因子 2 对应缩放 1/4;因子 1 对应缩放 1/2,一般而言,总放缩系数为 1/N
  • 例如,对应 Radix-4 架构的 128 FFT点数,位宽为 2 * ceil( log₄(N) ) = 8,缩放因子可以设置为 [1,2,2,2],高阶放在高位

输入输出端口描述

在这里插入图片描述

端口方向定义
s_axis_config_tdataIN配置数据
s_axis_config_treadyOUT表示已准备好接收配置数据
s_axis_config_tvalidIN表示配置数据输入有效
s_axis_data_tdataIN输入数据,[31:16]为虚部,[15:0]为实部
s_axis_data_tlastIN表示输入结束,当 N 点数据输入完后置高
s_axis_data_treadyOUT为高时表示 FFT 模块可以接收数据
s_axis_data_tvalidIN表示数据输入有效
m_axis_data_tdataOUT输出频谱数据,[31:16]为虚部,[15:0]为实部
m_axis_data_tlastOUT表示输出结束,当 N 点数据输出完后置高
m_axis_data_treadyIN表示从设备已准备好数据接收
m_axis_data_tvalidOUT表示数据输出有效

仿真

  • s_axis_config_tdata = 16’b10101001_1_0000000; 高八位是缩放因子,低八位是 FWD/INV 和用于补齐的零,如果不使用缩放因子的话,将其配置为 8’b0000_0001
  • s_axis_data_tdata [31:16]为虚部,[15:0]为实部,均为有符号数

在这里插入图片描述

  • 输入信号是频点为 2MHz的单载波,采样率是 64MHz
  • s_axis_data_tvalid 要与第一个信号输入的同时拉高,在最后一个信号输出后拉低
  • s_axis_data_tlast 是在最后一个信号的所在时钟周期拉高

在这里插入图片描述

  • m_axis_data_tuser 是频谱索引,m_axis_data_tuser * fs / N 为真实的频点,即 4 * 64M / 128 = 2MHz,与输入设置的相符
### VivadoFFT IP 处理复数的使用教程 #### 配置与设置 在Vivado环境中,FFT IP支持多种数据类型,其中包括用于信号处理应用中的复数输入。为了配置该IP以接受并处理复数值,在创建新的IP实例时需特别注意参数的选择[^2]。 对于复数的支持意味着可以指定实部和虚部分别作为独立的数据流进入变换过程。当初始化一个新的FFT IP项目时,应当确保选择了适合的应用场景选项——比如通信系统或是音频分析等领域内的应用场景,并确认所选模式能够接收复数形式的数据输入[^1]。 #### 实现细节 一旦完成了基本配置,则可以通过查看左侧栏目的“Implementation Details”了解具体实现过程中涉及到了哪些硬件资源以及预期延迟情况;而右侧栏目下的各个标签页则提供了进一步定制化的机会,允许调整诸如流水线级数之类的高级特性来优化性能表现。 #### 示例代码片段 下面给出了一段简单的Verilog代码示例,展示了如何定义一个包含两个端口分别对应于复数实部(`real_in`)和虚部(`imag_in`)的模块接口: ```verilog module fft_input ( input wire clk, input wire rst_n, // active low reset // Complex number inputs (real and imaginary parts) input wire [N-1:0] real_in, input wire [N-1:0] imag_in, output reg ready_for_data = 0, // Other necessary ports... ); // Module implementation here. endmodule : fft_input ``` 此段代码仅为示意用途,实际应用中还需要考虑更多因素如同步机制、握手协议等以确保稳定可靠地向FFT心传递待处理样本序列。 #### 测试平台搭建建议 构建完整的测试环境是验证设计正确性的关键环节之一。推荐做法是从官方提供的参考设计方案入手,这些方案通常已经过充分调试并且附带详尽文档指导用户完成从仿真到综合直至最终部署至目标器件上的全部流程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值