Xilinx 的FFT IP核使用方法(配置为FFT 、IFFT两种模式)

IP配置

  • Configuration
    • 配置通道数和FFT长度
    • 时钟频率以及数据吞吐速率
    • FFT的结构选择
      • Srteaming , 可以对数据进行流水处理
      • Radix-4 , 基4的迭代算法,使用资源比流水线结构多,但是转换时间长
      • Radix-2, Radix-2 lite 都为基2的迭代算法,Radix-2 lite的资源占用更少,但是转换时间也更长。
    • Run Time configuration transform length

可以动态改变配置信息。

  • Implementation
    • Data format(数据格式)
      • 定点数或者浮点数
    • Scaled option(缩放选项)
      • Unscaled : 所有整数位的数据输出。这可以使用更多的FPGA资源。
      • Scaled     : 截取数据域输入数据位宽相同
      • Block Floating-Point  : 这种方式确定要充分利用可用的动态范围需要多大的缩放,并以块指数的形式报告缩放因子。
    • Rounding Modes
      • 截位方式:Truncation ,收敛截位。收敛舍入如果该数是奇数则向上舍入,如果该数是偶数则向下舍入
    • Precision(精度)
      • 数据输入位宽
      • 相位因子位宽:该位宽越大输出噪声越小,但是占用资源越多
    • Control Signals
      • 时钟使能信号
      • 复位信号
    • Output Ordering
      • 输出数据选择是位/数字反转顺序或自然顺序。基于Radix-2的体系结构(流水I/O、Radix-2 Burst I/O和Radix-2 Lite Burst I/O)提供了位反转排序,基于Radix-4的体系结构(Radix-4 Burst I/O)提供了数字反转排序。对于流水I/O架构,选择自然顺序输出顺序会增加内核使用的内存。对于Burst I/O体系结构,选择自然顺序输出会增加整体转换时间
    • Optional Output Fields
      • XK_INDEX 输出数据的通道数,也即是XK 的下标,
      • OVFLO 标识数据输出通道和状态通道。
    • Throttle Schemes
      • 实时模式通常提供更小、更快的设计,但对何时必须提供和使用数据有严格的限制。非实时模式没有这样的限制,但设计可能更大、更慢。更多细节请参见控制FFT核心。

  • Detaild implementation
    • Memory option
      • 选择数据存储的存储器类型
    • Optimize options
      • Complex multipliers
        • Use CLB logic: 所有的复乘法器都是用片逻辑构造的。这适用于性能要求较低的目标应用程序,或DSP片较少的目标设备。
        • Use 3-multiplier structure: 所有复杂乘法器都使用三实乘、五加减结构,其中乘法器使用DSP片。这减少了DSP片数,但使用了一些片逻辑。该结构可以利用DSP片预加器,减少或消除对额外片逻辑的需要,提高性能。
        •  Use 4-multiplier structure : 所有的复数乘法器都使用四个实数乘法,两个加减法结构,利用DSP片。这种结构以牺牲更多专用乘法器为代价获得了最高的时钟性能。在有DSP片的设备中,加/减操作在DSP片中实现。

s_axis_config_tdata(配置信息)

  • FWD/INV
    • 0 时做FFT, 1时做逆FFT
  • NFFT
    • FFT的点数,The value of NFFT is log2 (point size),例NFFT=3时。做8点FFT
  • CP_LEN
    • 循环前缀长度:在整个变换输出之前,从变换结束开始作为循环前缀初始输出的样本数量。CP_LEN可以是小于点大小的0到1之间的任何数字。此字段仅在循环前缀插入时出现。
  • SCALE_SCH
    • 当FFT核被配置为处理浮点数据时,不需要伸缩计划(SCALE_SCH被忽略)。浮点数据的规范化和缩放在内部处理。
    • 对于Burst I/O架构,伸缩调度为每个阶段指定两个比特,第一个阶段的伸缩由两个lsb给出。缩放可以指定为3、2、1或0,这表示要移位的比特数。N =1024,基数-4突发I/O的扩展调度示例为[1 02 3 2](从最后一级到第一级排序)。对于N =128, Radix-2突发I/O或Radix-2 Lite突发I/O,一种可能的扩展计划是[1 1 1 1 1 0 12](从最后一级到第一级排序)。
    • 对于流水I/O体系结构,伸缩调度为每一对基数-2阶段指定两个比特,从两个lsb开始。例如,N = 256的伸缩调度可以是[2 2 2 3]。当N不是4的幂时,最后阶段的最大比特增长为1位。例如,对于N = 512,[0 2 2 2]或[1 2 2 2 2]是有效的伸缩调度,但[2 2 2 2 2]是无效的。对于这个转换长度,SCALE_SCH的两个msb只能是00或01。此字段仅在缩放算术(非缩放、块浮点或单精度浮点)时可用。

仿真结果

信号输入输出:

信号

方向

定义

s_axis_config_tdata

in

 配置参数

s_axis_config_tvalid

in

s_axis_config_tready

out

s_axis_data_tdata

in

输入数据(复数)

s_axis_data_tvalid

in

数据有效信号

s_axis_data_tready

out

s_axis_data_tlast

in

标识每帧的最后一个数据

m_axis_data_tdata

out

数据输出(复数)

m_axis_data_tuser

out

输出数据的下标

m_axis_data_tvalid

out

数据有效

m_axis_data_tready

in

m_axis_data_tlast

out

标识最后一个数据

event_frame_started

out

当开始处理一个新帧时,该事件信号被断言为单个时钟周期。这个信号允许你计算帧数,并在需要时将核心的配置同步到特定的帧。

event_tlast_unexpected

out

当没有接收到一帧的最后一个数据而s_axis_data_tlast拉高时,这表明输入数据的长度与IP核预设的数据不匹配,输入数据长度小于预设的长度

event_tlast_missing

out

当接收到一帧的最后一个数据而s_axis_data_tlast没有拉高时,这表明输入数据的长度与IP核预设的数据不匹配,输入数据长度大于预设的长度

event_status_channel_halt

out

每当核心需要向data Output通道写入数据,但由于通道中的缓冲区已满而无法写入时,都会断言此事件。当发生这种情况时,核心处理将停止,所有活动将停止,直到通道缓冲区中有可用空间为止。框架没有损坏。

事件引脚仅在非实时模式下可用。

event_data_in_channel_halt

out

当IP核需要来自数据输入通道的数据但没有可用数据时,在每个周期断言此事件。

event_data_out_channel_halt

out

每当核心需要向Status通道写入数据,但由于通道上的缓冲区已满而无法写入时,都会断言此事件。当发生这种情况时,核心处理将停止,所有活动将停止,直到通道缓冲区中有可用空间为止。框架没有损坏。事件引脚仅在非实时模式下可用。

FFT仿真结果

时钟频率为160M,正弦波频率为160M/8=20M,FFT(128点)之后在第16根谱线达到最大值,频率为160M/128*16=20M。

当输入一个负频时,代表的频率为160M/128*(128-112)= -20M

IFFT仿真结果

         将参数FWD/INV置1就变成了IFFT运算,将IP核配置为IFFT模式,将前面的输出作为IFFT的输入进行仿真,

        输出的正弦信号个周期占据8个160M的时钟,说明该正弦信号的频率为:160M/8=20M,与做FFT输入的信号相同,说明IFFT运算结果正确。

  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值