DSP对电子系统设计来说非常重要,因为它能够迅速地测量、过滤或压缩即时的模拟信号。这样有助于实现数字世界和真实(模拟)世界的通信。但随着电子系统进一步精细化,需要处理多种模拟信号源,迫使工程师不得不做出艰难的决策。是使用多个DSP并将其功能与系统的其余部分同步更具优势?还是采用一个能够处理多功能的具有精细软件的高性能DSP更具优势? 由于当今的系统非常复杂,在许多情况下,单DSP的实现方案根本没有足够的处理能力。同时,系统架构也不能满足多芯片系统带来的成本、复杂性和功耗要求。 FPGA已成为需要高性能DSP功能的系统的理想选择。事实上,与单独的数字信号处理器相比,FPGA技术常常能够为高难度的DSP挑战提供大为简化的解决方案。要明白其中的缘由,需要回顾一下DSP的起源以及发展。 图1:传统的DSP架构。 专用微处理器 在过去二十年里,传统的DSP架构一直在竭尽全力地跟上不断提高的性能需求的步伐。但随着视频系统大踏步地迈进高清和3D时代,并且通信系统为实现更高带宽已将现有技术发挥到极致,设计人员需要替代性的实现策略。常用于实现数字信号处理算法的硬件不外乎如下三种基本器件之一:微处理器、逻辑电路和存储器。部分设计还需要额外的硬件来实现模数(A/D)和数模(D/A)转换以及高速数字接口。 传统的数字信号处理器是设计用于实现专门目的的微处理器。这类处理器非常适合算法密集的任务,但是性能却受时钟速率和其内部设计顺序性的限制。这限制了它们对输入数据采样每秒最多执行的运算次数。一般来说,每执行一次算术逻辑单元(ALU)运算需要三或四个时钟周期。多核架构可以提升性能,但是提升幅度仍然有限。因此,采用传统的信号处理器设计必须将架构单元重复用于算法实现。对每次执行的加、减、乘或其它任何基本运算,不论是内部还是外部反馈,每次执行都必须循环通过ALU。 不幸的是,在处理当今众多的高性能应用时,这种传统的DSP难以满足系统的要求。在过去为此提出过多种解决方案,包括在一个器件中使用多个ALU,或在一块板上布置多个DSP器件。然而,这些方案往往会造成成本的大幅上升,并且只是把问题推向另一个领域。例如:用多个器件提高性能遵循指数曲线。要让性能提高一倍,需要两个器件。再提高一倍,则需要四个器件,依此类推。另外,编程人员往往从注重信号处理功能转为注重多个处理器与内核之间的任务调度。这样会产生大量的附加代码,而且这些代码会成为系统开销,而不是用于解决眼前的数字信号处理问题。 FPGA技术的引入为解决DSP实现方案日益增长的复杂性带来了福音。FPGA最初开发用于整合和集中分立的存储器和逻辑电路,以实现更高的集成度、更出色的性能以及更高的灵活性。FPGA技术已成为当今使用的几乎每一款高性能系统的重要组成部分。与传统的DSP相比,FPGA是由可配置逻辑块(CLB)、存储器、DSP逻辑片(Slice)及一些其它元件组成的统一阵列构成的巨大并行结构。它们既可以使用VHDL和Verilog等高级描述语言进行编程,也可以在方框图中用系统生成器(System Generator)编程。FPGA还提供众多的专用功能和IP核,用于以高度优化的方式直接完成实现方案。 在FPGA中完成数字信号处理的主要优势在于能够根据系统要求定制实现方案。这意味着对于多通道或高速系统,用户可以充分利用FPGA器件的并行性来实现性能的最佳化,而对低速系统,则可以更多地采用串行方式完成设计。这样,设计人员就能够根据算法和系统的要求来定制实现方案,而不必折衷期望的理想设计来迎合纯顺序器件的诸多局限。另外,超高速I/O通过最大限度地提高从捕捉经处理链再到最终输出的数据流,可进一步降低成本并减少瓶颈问题。 下面以一个同时使用传统DSP架构和FPGA架构的FIR滤波器实现方案为例,来说明每种解决方案的优劣。 数字FIR滤波器实例 有限脉冲响应(FIR)滤波器是一种使用最广的数字信号处理元件。设计人员使用滤波器来改变数字信号的幅度或频谱,通常用于隔离或突出样本数据频谱中的特定区域。从这个角度说,可以把滤波器视为信号的预处理方式。在典型的滤波器应用中,输入数据样本通过小心同步的数学运算与滤波器系数相结合(这取决于滤波器的类型和实现策略),随后数据样本进入下一个处理阶段。如果数据源和目的地都是模拟信号,则数据样本必须首先通过A/D转换器,而结果则必须馈送给D/A转换器。 最简单的FIR滤波器类型采用一系列的延迟元件、乘法器和加法器树或加法器链来实现。 下面的等式是单通道FIR滤波器的数学表达式: 该等式中的各项分别代表输入样本、输出样本和系数。假设S为连续的输入样本流,Y为经滤波后产生的输出样本流,那么n和k则对应特定的瞬时时间。这样,若要计算时间n时的输出样本Y(n),则需要一组在N个不同时间点的样本,即:S(n)、S(n-1)、s(n-2)、…s(n-N+1)。将这组N个输入样本乘以N个系数并求和,便可得出最终结果Y。 图2是一个简单的31抽头FIR滤波器(长度N=31)的方框图。 图2:长度为31抽头的FIR滤波器。 在选择滤波器的理想长度和系数值时,有多种设计工具可供使用。其目的是通过选择适当的参数来实现所需的滤波器性能。参数选择最常用的设计工具是MATLAB。一旦选定了滤波器参数,就可以用数学等式实现。 实现FIR滤波器的基本步骤包括:对输入数据流采样;在缓冲区组织输入样本,以便让每个捕捉到的样本与每项滤波器系数相乘;让每个数据样本与每项系数相乘,并累加结果;输出滤波结果。 使用“相乘累加法”在处理器上实现FIR滤波器的典型C语言程序,如下列代码所示: /* *捕捉输入数据样本 */ datasample=input(); /* *将新数据样本装入缓冲器 */ S[n]=datasample; /* *将每个数据样本与每项系数相乘并累加结果 */ y=0; for(i=0;i{ y+=k[i]*S[(n+i)%N]; } n=(n+1)%N; /* *输出滤波结果 */ output(y); 图3所示的实现方案被称为相乘累加或MAC型实现方案。这基本上就是用传统的DSP处理器实现滤波器的方法。采用内核时钟速率为1.2GHz的典型DSP处理器并以这种方式实现的31抽头FIR滤波器的最高性能约为9.68MHz,或最大的输入数据率为968MS/s。 图3:用传统DSP实现的MAC。 而FPGA提供了许多不同的实现和优化选择。如果需要高资源效率的实现,MAC引擎法则相当理想。还是以31抽头滤波器为例来说明滤波器规范对所需逻辑资源的影响,这种实现方案的方框图如图4所示。 图4:采用FPGA实现的MAC引擎FIR滤波器。 这种设计需要存储器存储数据和系数,可以混合采用FPGA内部的RAM和ROM。RAM用于存储数据样本,故而采用循环的RAM缓冲器实现。字的数量与滤波器抽头数相等,位宽按样本大小设置。ROM用于存储系数。在最糟糕的情况下,字的数量与滤波器抽头的数量相等,但如果存在对称,则可以减少字的数量。位宽必须足以支持最大的系数。因为数据样本和系数数据都随每个周期改变,所以需要全乘法器。累加器负责将产生的结果累加起来。因为随着滤波器采集数据,累加器的输出会随每个时钟周期改变,所以需要捕捉寄存器。当全套N个样本完成累加后,输出寄存器负责捕捉最终结果。 如果采用MAC模式,DSP48则非常适用,因为DSP48 Slice内含输入寄存器、输出寄存器和加法器单元。实现31抽头MAC引擎需要的资源包括一个DSP48、一个18kb块RAM(block RAM)和9个逻辑片。另外,还需要一些逻辑片用于采样、系数地址生成和控制。如果FPGA内置有600MHz的时钟,则在一个-3速度等级的Xilinx 7系列器件中,该滤波器能够以19.35MHz或1,935MS/s的输入采样速率运行。 如果系统规范需要更高性能的FIR滤波器,则可采用并行结构来实现。图5显示了直接I型实现方案的方框图。 图5:采用FPGA实现的直接I型FIR滤波器。 直接I型滤波器结构能够在FPGA中实现最高性能。这种结构(通常也被称作脉动FIR滤波器)采用流水线和加法器链,使DSP48 Slice发挥出最高性能。输入馈送到用作数据样本缓冲器的级联寄存器;每个寄存器向DSP48提供一个样本,然后乘以对应的系数;加法器链存储部分乘积,然后依次相加,从而得到最终结果。 这种设计无需外部逻辑电路支持滤波器,并且该结构可扩展用于支持任意数量的系数。因为没有高扇出的输入信号,所以这种结构能够实现最高性能。实现31抽头FIR滤波器仅需要31个DSP48逻辑片。如果FPGA内置有600MHz的时钟,则在一个-3速度等级的Xilinx 7系列器件中,该滤波器能够以600MHz或600MS/s的输入采样速率运行。 从这个实例可以清晰地看出,FPGA不仅在性能上显著超越了传统的数字信号处理器,而且要求的时钟速率也显著降低(因此,功耗也显著降低)。 这个实例只反映了采用PFGA实现FIR滤波器的两种技术。为了充分利用数据采样率规范,可对该器件进行进一步定制,此时,数据采样率可在连续MAC运算极值和全并行运算极值之间任取。用户还可考虑在包括对称系数、插值、抽选、多通道或多速率的资源利用和性能方面进行更多的权衡取舍。Xilinx CORE Generator或System Generator实用工具可以帮助用户充分发掘这些设计变量和技术。 在传统DSP和FPGA之间选择 传统的数字处理器已经有多年的应用历史,当然具有为特定问题提供最佳解决方案的实例。如果系统采样率低于数kHz且为单通道实现,DSP可能是不二之选。但是,当采样率增加到数MHz以上,或者如果系统要求多通道,FPGA就越来越具优势。在高数据率条件下,DSP可能只能勉为其难地在不造成任何损耗的情况下采集、处理和输出数据。这是因为在处理器中存在大量的共享资源、总线乃至内核。然而,FPGA却能够为每项功能提供专门的资源。 DSP是基于指令而非基于时钟的器件。一般来说,对单个样本上的任何数学运算需要三到四条指令。数据必须首先经输入端采集,再发送到处理内核,每完成一次运算后再循环通过内核,然后发送到输出端。相比之下,FPGA基于时钟,故每个时钟周期都有可能在输入数据流上进行一次数学运算。 由于DSP的运算以指令或代码为基础,编程机制为标准C语言,或者在需要更高性能的情况下,采用低级汇编语言。这种代码可能包含高级的决策树或者转移操作,而难以在FPGA中实现。例如:存在大量的用于执行如音频和电话编解码器之类的预定义功能或标准的遗留代码。 FPGA厂商和第三方合作伙伴已经意识到将FPGA用于高性能DSP系统的优势,并且如今已有许多IP核广泛应用于视频、图像处理、通信、汽车、医疗和军用等大部分垂直应用市场。与将高级系统方框图映射成为C语言代码的DSP设计相比,将高级系统方框图分解为FPGA模块和IP核会更加简便易行。 从DSP转向FPGA 考查一些主要标准将有利于在传统DSP和FPGA之间做出决策(表1)。 表1:选择DSP和FPGA时考虑的主要标准。 软件编程人员的数量远远超过硬件设计人员的数量,这已是不争的事实。DSP编程人员的数量与FPGA设计人员的数量之间的关系也是如此。不过,让系统架构师或者DSP设计人员转为使用FPGA的难度,并不像让软件编程人员转为从事硬件设计那么大。有大量的资源可以显著减轻对DSP算法开发和FPGA设计工作的学习过程。 主要的障碍是从基于样本和事件的方法转向基于时钟的问题描述和解决方案。如果能够在设计流程的系统架构和定义阶段就能够完成,对这种转换的理解和应用就会简单得多。由不同的工程师和数学专家来定义系统架构(DSP算法和FPGA设计在某种程度上相互孤立)是很寻常的事情。当然,如果每个成员对其他小组成员面临的难题有一定程度认识的话,这个过程会顺利得多。
|