FPGA从Xilinx 的7系列学起(16)

上图中的FIR滤波器的结构被叫做转置型I的滤波器,并且使用了流水线。这种架构使用了级联的方式,充分利用了DSP Slice的结构。

这个例子显示了一个小的4抽头滤波器。输入数据通过左侧流水线被送到的DSP Slice中,级联后把数据延时送到下一级中。每个DSP slice里面的乘法器将数据和正确的系数进行相乘,在加法器中相加后输出,经过流水线并最终级联在最右端输出最终的结果。从这个例子中,可以清晰的看到FIR滤波器的抽头即使增加了,可以很简单的增加DSP Slice单元进入这个流水线中,并在该DSP单元中增加自己的系数即可。需要说明的一点是:理想状态下,不像其他DSP/处理器单元构建算法时,FPGA的DSP单元的性能不会因为滤波器的抽头的增加而减少,因为进入级联的流水线后,流水线上使用的寄存器将帮助将DSP的资源保持运行在最优的速度上。从上图结构中,可以看到输入数据被送入寄存器,寄存器充当数据缓冲器进行了级联。每个寄存器提供一个数据到乘法器并各个系数相乘。加法器相加级联后逐步形成最终结果,并且给出最终结果。这个实现方式不要外部的额外逻辑,并且所述结构是可扩展的,以支持任何数目的系数。另外DSP Slice资源的灵活性,也可以用来实现其他非DSP功能。

下面举一个非DSP功能的例子,是将一个基本的加法树的结构适配到DSP Slice单元中,如下图一个流水线的基本加法树的例子。

第一步,从第一级加法器的输出入手,去掉第一级输出的寄存器,形成如下图的结构。

这种结构就非常简化,而且容易调整需求。紧接着第二步把第三个寄存器拉下来,修正后形成下图,形成很明显的链型的结构。但是这个功能和上图的功能完全相同,相同的四个信号只是改变了相加的顺序,被相加形成最终的结果相同。

第四步,添加寄存器形成流水线,变成了下图,最大限度地提高性能。因为加法器是在一个链而不是树,在加法器链中的每个流水线寄存器需要在该数据路径中匹配一个寄存器。还要注意的是,一个附加的加法器已经放置在链的前部,其中一个输入连接到零。现在,就很容易看到的加法器和流水线寄存器如何映射到XILINX DSP Slice中。下图图中的每个虚线框代表一个DSP Slice。

文章 来源:FPGA那点事儿微信公众号