Intel_Parallel_FFT_IP 使用指南
![](/sites/default/files/images/articles/featured/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97.jpg)
本文介绍如何使用 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 配置界面](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E5%9B%BE%201%20Parallel%20FFT%20IP%20%E9%85%8D%E7%BD%AE%E7%95%8C%E9%9D%A2.jpg)
Parallel_FFT_IP 使用实例
对 IP 进行配置后,生成 HDL 文件,并在工程中实例化。需要注意的是,模块实例化后数据输入的顺序从 LSB 到 MSB 分别为第一个数据的实部、第一个数据的虚部,一直到最后一个数据的实部、最后一个数据的虚部。以 2 点并行的 FFT,16bit 位宽输入为例,数据输入顺序如下图 (图2) 所示:
![图2 16bit 位宽2点并行FFT输入数据顺序](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E5%9B%BE%202%2016bit%20%E4%BD%8D%E5%AE%BD%202%20%E7%82%B9%E5%B9%B6%E8%A1%8C%20FFT%20%E8%BE%93%E5%85%A5%E6%95%B0%E6%8D%AE%E9%A1%BA%E5%BA%8F.jpg)
使用 Modelsim 仿真时,首次编译 IP 文件会报错,如下图 (图3) 所示:
![图3 Modelsim 仿真报错](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E5%9B%BE3%20Modelsim%20%E4%BB%BF%E7%9C%9F%E6%8A%A5%E9%94%99.jpg)
此时直接双击上图 (图3) 中蓝色圈起来的地方,打开 Quartus 自动生成的 IP 文件,如下图 (图4) 所示:
![图4 需要修改的部分](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E5%9B%BE%204%20%E9%9C%80%E8%A6%81%E4%BF%AE%E6%94%B9%E7%9A%84%E9%83%A8%E5%88%86.jpg)
将上图 (图4) 橘色标记部分 use work.dspba_sim_library_package.all 修改为 use work.dspba_library_package.all (删除_sim),再次编译,即可通过。在与 MATLAB 对比输出数据时,我们需要注意小数点的位置。此 IP 模块输出数据的小数位数与输入数据的小数位数相等。
假设输入的 16bit 数据定点格式如下图 (图5) 所示,最高 bit 位为符号位,3bit 整数位,12bit 小数位。这里需要注意定点格式可以用户自己定义,只不过在与 MATLAB 测试数据做对比的时候需要注意小数点的位置。
![图5 输入数据定点格式](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E5%9B%BE5%20%E8%BE%93%E5%85%A5%E6%95%B0%E6%8D%AE%E5%AE%9A%E7%82%B9%E6%A0%BC%E5%BC%8F.jpg)
以 32 点 FFT,16bit 位宽,2 点并行输入为例。由于内部乘加器的原因,16bit 的数据输出变成了 16+5+1=22bit 位宽,并且输出数据的小数位个数与输入数据的小数位个数相同, 即输出数据为 1bit 符号位,9bit 整数位,12bit 小数位,即如下图 (图6) 所示。
![图6 输出数据定点格式](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E5%9B%BE%206%20%E8%BE%93%E5%87%BA%E6%95%B0%E6%8D%AE%E5%AE%9A%E7%82%B9%E6%A0%BC%E5%BC%8F.jpg)
此时为保证最小损失精度,要求输出数据位宽与输入数据位宽保持一致 (16bit),数据裁剪的方案为裁剪掉最低的 6bit 数据,即裁剪后的定点数格式如下图 (图7) 所示。由此可见,数据经过裁剪后,小数点的位置发生了变化,在与 MATLAB 测试数据做对比时,需要注意小数点的位置。
![图7 裁剪后数据的定点格式](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E5%9B%BE7%20%E8%A3%81%E5%89%AA%E5%90%8E%E6%95%B0%E6%8D%AE%E5%AE%9A%E7%82%B9%E6%A0%BC%E5%BC%8F.jpg)
由于 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 输入测试数据](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E8%A1%A81%20MATLAB%20%E8%BE%93%E5%85%A5%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE.jpg)
![表2 Parallel_FFT_IP 输入测试数据](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E8%A1%A82%20Parallel_FFT_IP%20%E8%BE%93%E5%85%A5%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE.jpg)
Parallel FFT IP core 与 MATLAB 对应的输出测试结果对比,如下表 (表3、表4、表5) 所示:
![表3 MATLAB 输出测试数据](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E8%A1%A83%20MATLAB%20%E8%BE%93%E5%87%BA%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE.jpg)
![表4 Parallel_FFT_IP 输出测试数据](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E8%A1%A84%20Parallel_FFT_IP%20%E8%BE%93%E5%87%BA%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE.jpg)
![表5 Parallel_FFT_IP 输出测试数据(调整顺序,裁剪为 16bit,6bit 小数位)](/sites/default/files/images/articles/Intel_Parallel_FFT_IP%20%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/%E8%A1%A85%20Parallel_FFT_IP%20%E8%BE%93%E5%87%BA%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%EF%BC%88%E8%B0%83%E6%95%B4%E9%A1%BA%E5%BA%8F%2C%E8%A3%81%E5%89%AA%E4%B8%BA%2016bit%EF%BC%8C6bit%20%E5%B0%8F%E6%95%B0%E4%BD%8D%EF%BC%89.jpg)
Parallel_FFT_IP 使用要点
使用 Parallel FFT IP 的时候,注意并行输入数据的顺序,具体可查看上文 “Parallel_FFT_IP 使用实例” 章节。注意输入输出的数据顺序 (自然顺序、比特反转顺序),若输入是自然顺序,则输出是比特反转顺序,反之亦然。
输入数据的小数位数与输出数据的小数位数相等。若要对输出数据裁剪,应保留高位比特,裁剪最低位的比特,同时注意裁剪完成后数据的小数点位置也发生了变化,在与 MATLAB 数据做对比的时候要观察到这点。仿真前编译 IP 文件报错,需要打开报错的.vhd 文件,将_sim 删去。
总结
本文通过配置参数、使用实例和测试数据案例,对 Intel Parallel_FFT_IP 在使用中可能出现的一些问题进行了总结说明,并分享了 IP 使用时需要关注的要点。欲了解更多技术细节和 Intel 相关方案,您可以点击下方「联系我们」,提交您的需求,我们骏龙科技公司愿意为您提供更详细的技术解答。