- UID
- 123043
- 性别
- 男
|
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 |
想看更多的东西?来我的博客,精彩多多!
http://blog.eccn.com/u/bjxiong/index.htm |
|