问题描述
当针对Spartan-3A DSP器件时,为什么PAR中具有大复数乘法器的FFT会失败?
这也适用于Virtex部分,但在Spartan-3A DSP器件中更常见,因为列中的DSP48A较少。
解决/修复方法
这是由于复数乘法的大小,导致无法放置的长级联。
通常,这会发生在使用流式架构时,这可以创建大型复杂乘法器,从而产生长DSP48级联。 (即,具有18位输入数据,18位旋转因子并使用流式架构的FFT核心,实现将是频率的抽取,这意味着复数乘法器在蝶形之后。流式架构具有复杂性每隔一个蝶形后的乘法器。结果是每个蝶形中数据路径增长1位,所以到数据路径到达复数乘法器时,它是20位宽。而且,18位旋转因子在内部增加通过1位使+1可以精确表示,因此复数乘法器的第二个输入是19位宽。因此,每个复数乘法器是20 x 19位。由于DSP48输入是18位宽,复数乘法器被构造通过级联多个DSP48。在这种情况下,需要4个来构建每个实数乘法器。正如您要求使用DSP48优化复数乘法器的速度,复数乘法器使用4个实数乘法器,因此总共有16个DSP48A每个复数乘数。这些必须分为两组,每组8个DSP48,以产生单独的实数和虚数输出。)
有三种可能的解决方法:
– 使用不同的较大部件,每列使用更多DSP48。
– 取消选中“使用DSP48s优化复杂乘数以获得速度”复选框,以获得3实数乘法器复数乘法器。这可能会影响您的最大时钟频率,但数据精度没有变化。它还可以将DSP48数量减少到当前水平的75%。
– 将输入数据宽度减少到16位,或将旋转因子宽度减少到17位,或两者兼而有之。仅更改其中一个将提供复杂的乘法器,使用8个DSP48而不是16个。更改这两个将提供仅使用4个DSP48的复数乘法器。时钟频率没有影响,但数据精度略有下降。
有关LogiCORE快速傅里叶变换(FFT)版本说明和已知问题的详细列表,请参阅(Xilinx答复29209) 。
没有回复内容