Intel_Parallel_FFT_IP 使用指南

【时间:2023 年 04 月 14 日, 来源:本站原创, 作者:Derek Xu】

本文介绍如何使用 Intel Parallel_FFT_IP,讲解 IP 配置界面中需要配置的参数,探讨 IP 的使用实例和测试数据案例,以及分享一些使用要点,方便开发者在并行 FFT IP 的使用过程中起到参考作用。

什么是 Parallel_FFT_IP?

Parallel_FFT_IP 是可以实现并行 FFT 操作的 IP 核。与一般的串行 FFT IP 核相比,它可以在一个时钟周期内同时处理多个输入数据,减少了 FFT 操作所需的时间。在并行数据处理应用中,也可以减少数据串并转换的操作。

IP 配置界面

在 Quartus IP Catalog 窗口搜索 Parallel FFT Intel FPGA IP,双击打开并行 FFT 配置界面。具体的配置参数及含义,如下图 (图1) 所示:

图1 Parallel FFT IP 配置界面
图 1 Parallel FFT IP 配置界面

Parallel_FFT_IP 使用实例

对 IP 进行配置后,生成 HDL 文件,并在工程中实例化。需要注意的是,模块实例化后数据输入的顺序从 LSB 到 MSB 分别为第一个数据的实部、第一个数据的虚部,一直到最后一个数据的实部、最后一个数据的虚部。以 2 点并行的 FFT,16bit 位宽输入为例,数据输入顺序如下图 (图2) 所示:

图2 16bit 位宽2点并行FFT输入数据顺序
图2 16bit 位宽 2 点并行 FFT 输入数据顺序

使用 Modelsim 仿真时,首次编译 IP 文件会报错,如下图 (图3) 所示:

图3 Modelsim 仿真报错
图3 Modelsim 仿真报错

此时直接双击上图 (图3) 中蓝色圈起来的地方,打开 Quartus 自动生成的 IP 文件,如下图 (图4) 所示: 

图4 需要修改的部分
图4 需要修改的部分

将上图 (图4) 橘色标记部分 use work.dspba_sim_library_package.all 修改为 use work.dspba_library_package.all (删除_sim),再次编译,即可通过。在与 MATLAB 对比输出数据时,我们需要注意小数点的位置。此 IP 模块输出数据的小数位数与输入数据的小数位数相等。

假设输入的 16bit 数据定点格式如下图 (图5) 所示,最高 bit 位为符号位,3bit 整数位,12bit 小数位。这里需要注意定点格式可以用户自己定义,只不过在与 MATLAB 测试数据做对比的时候需要注意小数点的位置。 

图5 输入数据定点格式
图5 输入数据定点格式

以 32 点 FFT,16bit 位宽,2 点并行输入为例。由于内部乘加器的原因,16bit 的数据输出变成了 16+5+1=22bit 位宽,并且输出数据的小数位个数与输入数据的小数位个数相同, 即输出数据为 1bit 符号位,9bit 整数位,12bit 小数位,即如下图 (图6) 所示。 

图6 输出数据定点格式
图6 输出数据定点格式

此时为保证最小损失精度,要求输出数据位宽与输入数据位宽保持一致 (16bit),数据裁剪的方案为裁剪掉最低的 6bit 数据,即裁剪后的定点数格式如下图 (图7) 所示。由此可见,数据经过裁剪后,小数点的位置发生了变化,在与 MATLAB 测试数据做对比时,需要注意小数点的位置。

图7 裁剪后数据的定点格式
图7 裁剪后数据的定点格式

由于 MATLAB 的 FFT 输入输出均为自然顺序,而 Intel 的 FFT_IP 若输入是自然顺序,输出则是比特反转的顺序。输入是比特反转的顺序,输入则是自然顺序。在与 MATLAB 测试数据做对比时,需要将其中一方的输出调整顺序。

Parallel_FFT_IP 测试案例

以 32 点 FFT,16bit IQ 数据位宽,2 点并行输入为例,将 Parallel FFT IP core 配置为 FFT 模式,自然顺序输入。假设数据输入的定点格式,如上图 (图5) 所示,Parallel FFT IP core 与 MATLAB 对应的输入测试结果对比,如下表 (表1、表2) 所示:

表1 MATLAB 输入测试数据
表1 MATLAB 输入测试数据
表2 Parallel_FFT_IP 输入测试数据
表2 Parallel_FFT_IP 输入测试数据

Parallel FFT IP core 与 MATLAB 对应的输出测试结果对比,如下表 (表3、表4、表5) 所示:

表3 MATLAB 输出测试数据
表3 MATLAB 输出测试数据
表4 Parallel_FFT_IP 输出测试数据
表4 Parallel_FFT_IP 输出测试数据
表5 Parallel_FFT_IP 输出测试数据(调整顺序,裁剪为 16bit,6bit 小数位)
表5 Parallel_FFT_IP 输出测试数据(调整顺序,裁剪为 16bit,6bit 小数位)

Parallel_FFT_IP 使用要点

使用 Parallel FFT IP 的时候,注意并行输入数据的顺序,具体可查看上文 “Parallel_FFT_IP 使用实例” 章节。注意输入输出的数据顺序 (自然顺序、比特反转顺序),若输入是自然顺序,则输出是比特反转顺序,反之亦然。

输入数据的小数位数与输出数据的小数位数相等。若要对输出数据裁剪,应保留高位比特,裁剪最低位的比特,同时注意裁剪完成后数据的小数点位置也发生了变化,在与 MATLAB 数据做对比的时候要观察到这点。仿真前编译 IP 文件报错,需要打开报错的.vhd 文件,将_sim 删去。

总结

本文通过配置参数、使用实例和测试数据案例,对 Intel Parallel_FFT_IP 在使用中可能出现的一些问题进行了总结说明,并分享了 IP 使用时需要关注的要点。欲了解更多技术细节和 Intel 相关方案,可以点击如下链接,提交您的需求,我们骏龙科技公司愿意为您提供更详细的技术解答。

联系骏龙