首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA在高速数字信号处理系统中的应用-xilinx

FPGA在高速数字信号处理系统中的应用-xilinx

FPGA在高速数字信号处理系统中的应用 类型:转载 作者:Chris Dick

由于成本、系统功耗和面市时间等原因,许多通讯、视频和图像系统已无法简单地用现有DSP处理器来实现,现场可编程门阵列(FPGA)尤其适合于乘法和累加(MAC)等重复性的DSP任务。本文从FPGA与专用DSP器件的运算速度和器件资源的比较入手,介绍FPGA在复数乘法、数字滤波器设计和FFT等数字信号处理中应用的优越性,值得(中国)从事信号处理的工程师关注。

Chris Dick
Xilinx公司


由于在性能、成本、灵活性和功耗等方面的优势,基于FPGA的信号处理器已广泛应用于各种信号处理领域。近50%的FPGA产品已进入各种通信和网络设备中,例如无线基站、交换机、路由器和调制解调器等。FPGA提供了极强的灵活性,可让设计者开发出满足多种标准的产品。例如,万能移动电话能够自动识别GSM、CDMA、TDMA或AMPS等不同的信号标准,并可自动重配置以适应所识别的协议。FPGA所固有的灵活性和性能也可让设计者紧跟新标准的变化,并能提供可行的方法来满足不断变化的标准要求。

复数乘法
复数运算可用于多种数字信号处理系统。例如,在通讯系统中复数乘积项常用来将信道转化为基带。在线缆调制解调器和一些无线系统中,接收器采用一种时域自适应量化器来解决信号间由于通讯信道不够理想而引入的干扰问题。量化器采用一种复数运算单元对复数进行处理。用来说明数字信号处理器优越性能的指标之一就是其处理复数运算的能力,尤其是复数乘法。

一个类似DSP-24(工作频率为100MHz)的器件在100ns内可产生24×24位复数乘积(2个操作数的实部和虚部均为24位精度)。复数乘积的一种计算方法需要4次实数乘法、1次加法和1次减法。一个满精度的24×24实数管线乘法器需占用348个逻辑片。将4个实数乘法器产生的结果组合起来所需的2个48位加法/减法器各需要24个逻辑片(logic slice)。这些器件将工作在超过100MHz的时钟频率。复数乘法器采用一条完全并行的数据通道,由4×348+2×24=1440个逻辑片构成,这相当于 Virtex XCV1000 FPGA所提供逻辑资源的12%。计算一个复数乘积所需的时间为10ns,比DSP结构的基准测试快一个数量级。为了获得更高的性能,几个完全并行的复数乘法器可在单个芯片上实现。采用5个复数乘法器,假设时钟频率为100MHz,则计算平均速率为每2ns一个复数乘积。这一设计将占用一个XCV1000器件约59%的资源。

这里应该强调的一个问题是I/O,有这样一条高速数据通道固然不错,但为了充分利用它,所有的乘法器都须始终保持100%的利用率。这意味着在每一个时钟来临时都要向这些单元输入新的操作数。

除了具有可实现算法功能的高可配置逻辑结构外,FPGA还提供了巨大的I/O带宽,包括片上和片外数据传输带宽,以及算术单元和存储器等片上部件之间的数据传输带宽。例如,XCV1000具有512个用户I/O引脚。这些I/O引脚本身是可配置的,并可支持多种信号标准。

实现复数乘法器的另一种方法是构造一个单元,该单元采用单设定或并行的24x24实数乘法器。这种情况下,每一个复数乘法需要4个时钟标识,但是FPGA的逻辑资源占用率却降到了最低。同样,采用100MHz系统时钟,每隔40ns可获得一个新的满精度复数乘积,这仍是DSP结构基准测试数据的2.5倍。这一设定方法需要大约450个逻辑片,占一个XCV1000器件所有资源的3.7%(或XCV300的15%)。

构造一条能够精确匹配所需算法和性能要求的数据通道的能力是FPGA技术独特的特性之一。而且请注意,由于FPGA采用SRAM配置存储器,只需简单下载一个新的配置位流,同样的FPGA硬件就可适用于多种应用。FPGA就像是具有极短周转时间的微型硅片加工厂。

先进的软件数字信号处理器在执行乘法相关的应用(包括复数乘法)时十分有效。一个250MHz的DSP芯片每个时钟周期可进行2次16×16的复数乘法运算,这相当于每2ns产生一个新的乘积。但是,FPGA的性能更胜一筹。一个16×16的复数乘法器(产生全精度32位复数结果)占用约700个逻辑片,并可支持160MHz的时钟频率,这相当于每6.25ns产生一个新的复数乘积。将4个这样的功能放置在一个芯片上,每1.56ns即可产生一个新的乘积。如果需要更高的性能,可采用额外并行方法将计算速率提高到前所未有的水平。

数字滤波器
FIR滤波器几乎是所有数字信号处理系统中通用的基本构建模块之一。输出采样通过将输入采样流与滤波系数卷积而得到,这一运算也称作内积(inner-product)或向量点积(vector dot-product)运算。滤波系数定义了网络的频率响应。在要求高阶滤波、高采样率或两者兼有的应用中,所需算法工作量将会十分庞大。计算一个输出值需要N次乘法和N-1次加法,能够提供这种算法性能的高性能硬件平台对大多数信号处理设计者来讲都非常诱人。

数字滤波器在数字接收器和发送器中的使用方法有很多。多速率滤波器(如十进制编码器和插值器)是数字通讯系统中许多关键功能的核心。例如,在数字主控振荡器中,多相插值器是信号处理链的一部分,该信号处理链先将信号从基带转换到数字IF,然后通过宽带DAC将信号转换为模拟信号并继而由RF后端进行处理。在数字接收机中,多速率滤波器可用于数字下行转换器、信道量化器、时序恢复和采集环路中对信号进行数字再采样。

实现实时滤波器的一个常用方法是采用软件可编程的信号处理芯片。ASIC方案是一种高性能但灵活性欠佳的替代方法。最新的设计方法是利用基于FPGA的硬件系统可提供的并行处理能力。
a) 基于MAC的方法实现数字滤波器
在FPGA中实现FIR滤波器的方法有很多。最显而易见但并非最佳的方法是模仿用于ASIC或指令集DSP(ISDSP)的技术。这种方法采用一种预置的乘法-累加器(MAC)单元。由于许多信号处理工程师都非常熟悉这些实现滤波器的半导体技术,我们将以此为起点来探讨如何用FPGA实现FIR滤波器。
内积计算可在1个或几个MAC单元上分割,这是当前信号处理器(ASIC和ISDSP)常用的一种方法。这一方法同样适用于FPGA实现数字滤波器的设计,但在FPGA环境下,设计者对硅片有完全的控制权,并可确定将多少资源分配给内积引擎。在评估某一特定滤波器实现技术时,设计者需考虑一些必要的因素,如性能(采样率)、功耗、尺寸和成本等。为了给出一个FPGA FIR滤波器实现的参考框架,我们将对基于MAC的FPGA FIR滤波器实现方法与ASIC和ISDSP方法作一比较。首先考虑由DSP结构DSP-24信号处理器提供的ASIC方案。这一器件可实现多种功能,其中包括滤波。DSP-24采用100MHz的时钟频率及24位数据和系数,可在5ns内完成一次实数滤波抽头计算,在10ns中完成一次复数抽头计算。

多数MAC引擎的核心是乘法器。为了支持24位输入采样和系数,需要一个24×24位精度的乘法器。这一乘法器采用Virtex FPGA技术,可用348个逻辑片实现,这相当于XCV300等低密度器件的11%。为实现一个完整的MAC单元,累加器必须与乘法器级联。利用FPGA,系统结构师可自由选择这一部件的精度。下面以一个56位宽累加器为例说明这一点。累加器需要28个逻辑片。除了地址生成和算法单元安排所需的少量控制逻辑外,MAC单元可用大约348+28=376个逻辑片实现。除了算法引擎外,完整的FIR滤波器还需要存储滤波器系数和输入采样的历史记录。从Virtex FPGA的模块化RAM或分布式RAM中可选择几种存储资源。

对大型滤波器来讲,模块化存储器可为输入采样和/或滤波器系数提供有效的存储。此外,输入采样和/或系数还可存储在分布式存储器内。总之,分布式存储器是由构成逻辑结构的元素实现的,如上面所提及的16×1 LUT。一个采用24位输入采样和24位系数的16组滤波器总共需要24个逻辑片来实现滤波器存储和系数存储。100MHz的时钟频率可实现每组10ns的乘法-累加速率。实际上,根据速度等级,较高的时钟速率是可以实现的。

尽管单个MAC单元可提供100Mega-MAC(MMAC)的性能,但FPGA的可配置特性可让设计者利用许多DSP算法中的高度并行处理能力来获得更高的性能。在这种情况下,可在一个滤波器中采用2MAC来提供200MMAC的性能,这相当于每5ns完成一次MAC计算。这种双MAC设计需要大约3%的XCV1000 FPGA资源。当然,额外的MAC单元也可用来进一步缩短有效MAC循环周期。

目前的许多ISDSP提供了多个执行单元来执行算法操作。几个MAC单元通常能够加速滤波器的计算。每一时钟周期执行的MAC数目决定了计算的精度。例如,目前的ISDSP在每个时钟周期可完成2个80位实数MAC(32位数据和系数)或8个40位MAC(16位数据和系数)运算。后一个数据相当于2Giga-MAC(GMAC)在250MHz时钟频率时的性能。这一有效使用并行处理能力的方法可增强许多数据计算强度要求高的系统的性能。

并行访问(accessing concurrency)是FPGA成功实现所有信号处理功能的关键。但是,与芯片设计者决定并行访问和并行访问能力的ISDSP不同,通过FPGA信号处理硬件,系统设计者可自由分配芯片资源以开发适当的并行处理能力来满足系统性能要求。假设要用16位精度的数据和系数以及40位的累加器搭配一个传统的乘法-累加式2GMAC内积引擎。一个16×16的乘法器需要168个逻辑片,并可方便地在150MHz频率下工作。一个40位的累加器大约需要20个逻辑片,因此1个MAC单元总共需要188个逻辑片。若采用150MHz时钟,则需要14MAC单元来实现2GMAC的性能。每个MAC单元的输出通过一个加法器树(adder-tree)连接起来。14个MAC单元和加法器树由大约2,892个逻辑片实现,这相当于一片XCV400 FPGA资源的61%。


将这一方法加以扩展以构造更具吸引力的FPGA DSP引擎可获得更强的并行处理能力。由此可见,采用可编程逻辑简单地模仿ISDSP设计是解决并行处理问题的最佳方法。
我不是高手
b) 采用DA算法的FIR滤波器
有很多方法可计算内积,其中一种方法称为分布式算法(DA)。DA滤波器的通用模型如图1所示。基于分布式算法的计算需要一系列的查表、加法和减法运算。所有这些功能都可用FPGA实现。DA滤波器的一个有趣特性是滤波器吞吐能力不再与滤波器长度有关,而是取决于输入采样精度。图2中的线性曲线可说明这一点。如图所示,在DA FIR滤波器结构中,对于给定的输入采样精度B,采样速率保持恒定,与滤波器抽头数无关。例如,若B=12且系统时钟为100MHz,滤波器的采样速率在滤波器长度为10、20、100、200、...时均为8.333MHz。若N=200,这一有效计算速率为每0.6us完成1个MAC或每秒1.7GMAC。

对于24位输入采样,采样速率为4.1666MHz。在许多系统中,滤波器的系数集是对称的,对称性可用来减少滤波器设计对逻辑片的需求。此时,滤波器速率略微有些减小。对24位输入采样和100MHz时钟,采样速率将为4MHz。对于一个200抽头的滤波器,仍然会获得每秒800MMAC的计算速率。

c) 用并行分布式算法提高乘法速度
基于DA的计算最显然而直接的形式是位串行(bit-serial),对基本算法的扩展可消除这一潜在的吞吐能力限制。串行处理数据(即一次1位)可得到适中的计算速率。若输入变量长度为B位,则需要B个时钟周期来完成一次内积计算。提高速度可用其他几种方法获得。一种方法是将输入字段分割成L个子字段,然后并行处理这些子字段。这一方法需要L倍的存储查找表,从而导致存储需求和成本的直线上升。通过将输入变量分解为一位子字段可获得最大速度。通过这种分解,每一时钟周期就可计算出一个新的输出采样。

d) 为什么用FPGA实现DA滤波?
DA滤波器的一些结构特性使它非常适合采用Virtex FPGA技术实现。这些FPGA中的功能发生器(FG)可用做移位寄存器,这一功能正是实现保存滤波器输入采样记录的位串延迟线或TSB所需要的。TSB的抽头点可作为DA查找表(LUT)的地址输入。功能发生器还可配置为RAM和ROM,这一能力可用来有效创建甚高速DA查找表。

在分布式存储器内实现DA LUT的另一个方法是利用新一代FPGA中的存储模块。以构建一个70抽头的线性相位FIR滤波器为例,只有35个专用的滤波器参数,一个简单的LUT方法就需要存储大量的部分乘积项。如果将35个地址线划分为4组8个地址和1组3个地址,就比较容易管理。这时只需要4个256输入和1个8输入的LUT。这5个表可存储在片上存储模块中,再利用1个简单的加法器树将它们的输出连接起来。

e) FPGA多速率滤波器
高效的单速率FPGA FIR滤波器有助于构造大量的多速率滤波器。图3和图4所示的多相插值器和多相十进制编码器就可采用上述FPGA滤波器的构建模块实现。
实现多相十进制编码器的一种方法是采用分布式算法。每一个多相分段都可作为一个独立的DA过程来实现。所有的分段并行运行,以产生一个可支持特高输入采样率的下采样滤波器。例如,考虑一个8至1的复数十进制滤波器(实数输入采样,复数系数),其输入采样率为80MHz,输出速率为10MHz。滤波器的每一分段均具有32抽头,并支持10位输入采样和12位系数。每个多相子滤波器都有320MMAC的计算速率,复数滤波器的净计算性能为5.12GMAC。

除了这一结构提供的性能外,另一个需要考虑的重要问题是逻辑片要求。32抽头滤波器中的任意一个都需要126个Virtex逻辑片,整个滤波器将占用2,200个Virtex逻辑片。一个XCV400 FPGA具有4,800个逻辑片,因此可容纳2个这样的十进制编码结构,并可提供每秒100亿个MAC的性能。该例中假定系统时钟速率为100MHz,当前的FPGA技术很容易支持这一速率,实际上还可为某些算法功能提供200MHz时钟频率的支持。最后需要注意的一点是滤波器系数的对称性尚未利用。如果可能,将可得到更为紧凑的设计。

多相插值器可采用分布式算法或并行MAC方法在FPGA中实现。不同的方法适合处理不同的问题。例如,在数字接收机中,载波和信号的同步,以及自动增益控制都需要许多控制回路。在时序恢复回路中,需要插值器来调整信号采样的相位,并驱动其自身的跟踪回路。尽管插值器需要支持许多相位,而在任一时刻通常只有很少的分段部分在运行。这时,传统的预置MAC方法就比较适用。所有滤波器的完整系数集都存储在模块化或分布式存储器内,而所需的系数集(对应于一个多相分支)则被导入1个或几个MAC中,以便进行内积计算。

除了上述结构外,实现多速率滤波器的方法还有很多。例如,由Hogenauer首先提出的级连积分梳状滤波法(CIC, cascaded-integrator-comb)就特别适合用FPGA实现,因为它依赖于加法器、寄存器和减法器来实现算法,而FPGA在实现这些功能方面极为高效。

傅立叶变换
和FIR滤波器一样,离散傅立叶变换(DFT)也是许多信号处理系统中常用的方法之一。DFT通常采用快速傅立叶变换(FFT)算法来实现。在数字通讯系统中,基于FFT的算法可用来提取传输信道的特征,以便最有效地利用可用带宽资源。在正交频分多址(OFDM)调制解调器中,FFT既可用作发送部分的调制器,又可用作接收部分的解调器。

在大约66us的时间内,一个先进的软件DSP可对16位精度复数采样执行一次1024点的复数FFT。如果有必要,通常还需要增加时间(约9us)来完成位反向置换(bit-reversal permutation)。采用基数为4的标准Cooley-Tukey算法,并且仅使用适度的并行处理能力,同样的FFT就可在41us内由Virtex FPGA实现,包括位反向置换在内。

在比较FPGA DSP和其它DSP时,一个极为重要的系统参数是输入/输出(I/O)带宽。比较不同DSP硬件方案的原始算法性能很重要,但I/O子系统也同样重要。除了一些专用引脚外,FPGA上几乎所有的引脚均可供用户使用,这使得FPGA信号处理方案具有非常高性能的I/O带宽。图5所示为上述 FPGA FFT方案。大量的I/O引脚和多块存储器可让信号处理工程师在设计中获得优越的并行处理性能。在上述FFT范例中,独立的存储块可作为输入/工作存储区和结果缓存区,这使得I/O可与FFT计算同时进行。因此,41us的执行时间包括了所有的输入、输出和计算操作。

上述1024点FFT占用大约1,900个逻辑片,这相当于XCV300等中等密度器件资源的66%。FFT算法可充分利用并行处理能力,而且目前的FPGA提供了I/O带宽、片上存储器和逻辑等多种资源,从而使得单片FFT引擎的高度并行处理成为现实。例如,利用标准的基数为4的Cooley-Tukey FFT算法的直接划分,一个计算单元可分配到每个蝶形列(column of butterfly)中。除了相邻蝶形列间的存储器缓存外,这一方法共需5个蝶形引擎(butterfly engine)。一个1024点FFT可在1024个时钟周期内完成。若采用100MHz的时钟,变换时间为10us。如果需要,还可进一步提高并行处理能力,以获得小于10us执行时间的单片FFT方案。

本文结论

尽管FPGA DSP系统代表了信号处理领域的一个重要分支,将FPGA引入DSP硬件的设计却在呈指数增长。这一爆炸性增长的原因是,所有主要的FPGA供应商和第三方IP设计商都在提供越来越多的FPGA IP内核。利用这些资源,系统设计者就能将精力集中在设计上,而无需关心滤波器和转换等底层模块的细节。
我不是高手
呵呵!这个帖子怎么像是做广告的阿
返回列表