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核心。
- Data format(数据格式)
- 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片中实现。
- Complex multipliers
- Memory option
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运算结果正确。文章来源:https://www.toymoban.com/news/detail-443595.html
文章来源地址https://www.toymoban.com/news/detail-443595.html
到了这里,关于Xilinx 的FFT IP核使用方法(配置为FFT 、IFFT两种模式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!