Intel_Parallel_FFT_IP 使用指南
本文介绍如何使用 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) 所示:
Parallel_FFT_IP 使用实例
对 IP 进行配置后,生成 HDL 文件,并在工程中实例化。需要注意的是,模块实例化后数据输入的顺序从 LSB 到 MSB 分别为第一个数据的实部、第一个数据的虚部,一直到最后一个数据的实部、最后一个数据的虚部。以 2 点并行的 FFT,16bit 位宽输入为例,数据输入顺序如下图 (图2) 所示:
使用 Modelsim 仿真时,首次编译 IP 文件会报错,如下图 (图3) 所示:
此时直接双击上图 (图3) 中蓝色圈起来的地方,打开 Quartus 自动生成的 IP 文件,如下图 (图4) 所示:
将上图 (图4) 橘色标记部分 use work.dspba_sim_library_package.all 修改为 use work.dspba_library_package.all (删除_sim),再次编译,即可通过。在与 MATLAB 对比输出数据时,我们需要注意小数点的位置。此 IP 模块输出数据的小数位数与输入数据的小数位数相等。
假设输入的 16bit 数据定点格式如下图 (图5) 所示,最高 bit 位为符号位,3bit 整数位,12bit 小数位。这里需要注意定点格式可以用户自己定义,只不过在与 MATLAB 测试数据做对比的时候需要注意小数点的位置。
以 32 点 FFT,16bit 位宽,2 点并行输入为例。由于内部乘加器的原因,16bit 的数据输出变成了 16+5+1=22bit 位宽,并且输出数据的小数位个数与输入数据的小数位个数相同, 即输出数据为 1bit 符号位,9bit 整数位,12bit 小数位,即如下图 (图6) 所示。
此时为保证最小损失精度,要求输出数据位宽与输入数据位宽保持一致 (16bit),数据裁剪的方案为裁剪掉最低的 6bit 数据,即裁剪后的定点数格式如下图 (图7) 所示。由此可见,数据经过裁剪后,小数点的位置发生了变化,在与 MATLAB 测试数据做对比时,需要注意小数点的位置。
由于 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) 所示:
Parallel FFT IP core 与 MATLAB 对应的输出测试结果对比,如下表 (表3、表4、表5) 所示:
Parallel_FFT_IP 使用要点
使用 Parallel FFT IP 的时候,注意并行输入数据的顺序,具体可查看上文 “Parallel_FFT_IP 使用实例” 章节。注意输入输出的数据顺序 (自然顺序、比特反转顺序),若输入是自然顺序,则输出是比特反转顺序,反之亦然。
输入数据的小数位数与输出数据的小数位数相等。若要对输出数据裁剪,应保留高位比特,裁剪最低位的比特,同时注意裁剪完成后数据的小数点位置也发生了变化,在与 MATLAB 数据做对比的时候要观察到这点。仿真前编译 IP 文件报错,需要打开报错的.vhd 文件,将_sim 删去。
总结
本文通过配置参数、使用实例和测试数据案例,对 Intel Parallel_FFT_IP 在使用中可能出现的一些问题进行了总结说明,并分享了 IP 使用时需要关注的要点。欲了解更多技术细节和 Intel 相关方案,您可以点击下方「联系我们」,提交您的需求,我们澳门人巴黎人1797公司愿意为您提供更详细的技术解答。