第1章 概述

1.1 DSP概述

数字信号处理器(Digital Signal Processor, DSP)芯片,是一种专门用于数字信号处理的微处理器,其主要应用是实时快速地实现各种数字信号处理算法。

1.1.1 DSP的发展历程

在DSP出现以前,数字信号处理只能依靠通用的微处理器(MPU)来完成,但MPU的处理速度无法满足高速、实时的要求。随着集成电路技术的发展,20世纪70年代末出现了专门的可编程数字信号处理器,简称DSP。第一代DSP以AMD2900、NEC7720和TMS320C10为代表,其中TI公司的TMS320C10第一次使用了哈佛总线结构和硬件乘法器。

自1980年以来,DSP芯片得到了突飞猛进的发展,DSP芯片的应用越来越广泛。从运算速度来看,MAC(一次乘法和一次加法)时间已经从20世纪80年代初的400ns(如TMS32010)降低到10ns以下(如TMS320C54x、TMS320C62x/67x等),处理能力提高了几十倍。DSP芯片内部关键的乘法器部件从1980年的占模片区(die area)的40%左右下降到5%以下,片内RAM数量增加一个数量级以上。从制造工艺来看,1980年采用4μm的N沟道MOS(NMOS)工艺,而现在则普遍采用亚微米(Micron)CMOS工艺。DSP芯片的引脚数量从1980年的最多64个增加到现在的200个以上,引脚数量的增加,意味着结构灵活性的增加,如外部存储器的扩展和处理器间的通信等。此外,DSP芯片的发展使DSP系统的成本、体积、重量和功耗都有很大程度的下降。

最成功的DSP芯片当数TI公司的TMS系列产品。1982年TI成功推出了第一代DSP芯片TMS32010及其系列产品TMS32011、TMS32C10/C14/C15/C16/C17等。这一代DSP芯片采用微米工艺NMOS技术制作,虽然功耗和尺寸较大,但比MPU的运算速度快了几十倍,因而在语音合成和编/解码器中得到广泛应用。20世纪80年代中期,TI公司推出了第二代基于CMOS工艺的DSP芯片TMS32020、TMS320C25/C26/C28,其存储容量和运算速度成倍提高,为语音处理、图像硬件处理技术的发展奠定了基础。20世纪80年代后期, TI公司推出了第三代DSP芯片TMS32C3x,研发人员可对第三代DSP芯片进行高级语言编程,从而可降低研发工作的难度,提高研发效率。20世纪90年代,TI公司相继推出了第四代DSP芯片TMS32C4x,第五代DSP芯片TMS32C5x/C54x和集多个DSP核于一体的高性能DSP芯片TMS32C8x,第六代DSP芯片TMS32C62x/C67x/C64x,以及最新的DSP芯片TMS32C55x/Omap、达芬奇系列,这些DSP芯片系统集成度高,速度快,功耗小,目前在无线通信、计算机及其周边设备、数码产品上应用广泛。

1.1.2 DSP芯片的分类

DSP芯片可以按照下列三种方式进行分类。

(1)按基础特性分

这是根据DSP芯片的工作时钟和指令类型来分类的。如果在某时钟频率范围内的任何时钟频率上,DSP芯片都能正常工作,除计算速度有变化外,没有性能的下降,这类DSP芯片一般称为静态DSP芯片。例如,日本OKI电气公司的DSP芯片、TI公司的TMS320C2xx系列芯片属于这一类。

如果有两种或两种以上的DSP芯片,它们的指令集和相应的机器代码及引脚结构相互兼容,则这类DSP芯片称为一致性DSP芯片。例如,美国TI公司的TMS320C54X就属于这一类。

(2)按数据格式分

这是根据DSP芯片工作的数据格式来分类的。数据以定点格式工作的DSP芯片称为定点DSP芯片,如TI公司的TMS320C1x/C2x、TMS320C2XX/C5x、TMS320C54x/C62xx系列, ADI公司的ADSP21xx系列,AT&T公司的DSP16/16A, Motolora公司的MC56000等。以浮点格式工作的称为浮点DSP芯片,如TI公司的TMS320C3x/C4x/C8x, ADI公司的ADSP21xxx系列,AT&T公司的DSP32/32C, Motolora公司的MC96002等。

不同浮点DSP芯片所采用的浮点格式不完全一样,有的DSP芯片采用自定义的浮点格式,如TMS320C3x,而有的DSP芯片则采用IEEE的标准浮点格式,如Motorola公司的MC96002、Fujitsu公司的MB86232和Zoran公司的ZR35325等。

(3)按用途分

按照DSP的用途来分,可分为通用型DSP芯片和专用型DSP芯片。通用型DSP芯片适合普通的DSP应用,如TI公司的一系列DSP芯片属于通用型DSP芯片。专用DSP芯片是为特定的DSP运算而设计的,更适合特殊的运算,如数字滤波、卷积和FFT,如Motorola公司的DSP56200, Zoran公司的ZR34881, Inmos公司的IMSA100等就属于专用型DSP芯片。

1.1.3 DSP芯片特点

1.功能特点

数字信号处理任务通常需要完成大量的实时计算,如在DSP中常用的FIR滤波和FFT算法。数字信号处理中的数据操作具有高度重复的特点,特别是乘加和操作Y=A×B+C在滤波、卷积和FFT等常见DSP算法中用得最多。DSP在很大程度上就是针对上述运算特点设计的。与通用微处理器器比,DSP在寻址和计算能力等方面进行了扩充和增强。在相同的时钟频率和芯片集成度下,DSP完成FFT算法的速度比通用微处理器要快2~3个数量级(如对于1024点的FFT算法,时钟频率相同、集成度相仿的IBM PC/AT-386和1MS320C30,运算时间分别为0.3秒和1.5毫秒,速度相差200倍)。

2.结构特点

DSP结构特点在很大程度上体现了对DSP算法的需求。

(1)算术单元

① 硬件乘法器

由于DSP的功能特点,乘法操作是DSP的一个主要任务。而在通用微处理器内通过微程序实现的乘法操作往往需费100多个时钟周期,非常费时,因此在DSP内都设有硬件乘法器来完成乘法操作,以提高乘法速度。硬件乘法器是DSP区别于通用微处理器的一个重要标志。

② 多功能单元

为进一步提高速度,可以在CPU内设置多个并行操作的功能单元(ALU、乘法器和地址产生器等)。如C6000的CPU内部有8个功能单元,包括2个乘法器和6个ALU。这8个功能单元最多可以在1个周期内同时执行8条32位指令。由于多功能单元的并行操作使DSP在相同时间内能够完成更多的操作,因而提高了程序的执行速度。

针对乘加和运算,多数DSP的乘法器和ALU都支持在1个周期内同时完成一次乘法和1次加法操作。另外很多定点DSP还支持在不附加操作时间的前提下对操作数或操作结果的任意位移位。

另外,由于DSP的算法特点和数据流特点,还可以使现代DSP采用指令比较整齐划一的精简指令集(RISC)。这有利于DSP结构的简化和成本的降低。

(2)总线结构

通用微处理器是为计算机设计的。基于成本上的考虑,传统的微处理器通常采用冯·诺依曼总线结构:统一的程序和数据空间,共享的程序和数据总线。由于总线的限制,微处理器执行指令时,取指和存取操作数必须共享内部总线,因而程序指令只能串行执行。

对于面向数据密集型算法的DSP而言,采用冯·诺依曼总线结构将使系统性能受到很大限制,因此DSP采用了具有独立程序总线和数据总线的哈佛总线结构,这样DSP就能够同时取指和取操作数。而且很多DSP甚至有两套或两套以上的内部数据总线,这种总线结构称为修正的哈佛结构。对于乘法或加法等运算,1条指令要从存储器中取2个操作数,多套数据总线就使得两个操作数可以同时取得,提高了程序效率。

C6000系列DSP采用的就是修正的哈佛总线结构,一套256位的程序总线、两套32位数据总线和一套32位的DMA专用总线。灵活的总线结构使得数据瓶颈对系统性能的限制大大缓解。

(3)专用寻址单元

DSP面向的是数据密集型应用,伴随着频繁的数据访问,数据地址的计算时间也线性增长。如果不在地址计算上进行特殊考虑,有时计算地址的时间比实际的算术操作时间还长。例如,8086做一次加法需要3个周期,但是计算一次地址却需要5~12个周期。因此, DSP通常都有支持地址计算的算术单元——地址产生器。地址产生器与ALU并行工作,因此地址的计算不再额外占用CPU时间。由于有些算法通常需要一次从存储器中取两个操作数,DSP内的地址产生器一般也有两个。

DSP的地址产生器一般都支持间接寻址,而且有些DSP还能够支持位反寻址(用于FFT算法)和循环寻址,如C6000就支持循环寻址。

(4)片内存储器

由于DSP面向的是数据密集型应用,因此存储器访问速度对处理器的性能影响很大。现代微处理器内部一般都集成有高速缓存(cache),但是片内一般不设存储程序的ROM和存储数据的RAM。这是因为通用微处理器的程序一般都很大,片内存储器不会给处理器性能带来明显改善。而DSP算法的特点是需要大量的简单计算,相应地其程序比较短小。存放在DSP片内可以减少指令的传输时间,并有效缓解芯片外部总线接口的压力。除了片内程序存储器外,DSP内一般集成有数据RAM,用于存放参数和数据。片内数据存储器不存在外部存储器的总线竞争问题和访问速度不匹配问题,因此访问速度快,可以缓解DSP的数据瓶颈,充分利用DSP强大的处理能力。C6000系列DSP内部集成有lM~16M位的程序RAM和数据RAM。对有些片种,这些存储器还可以配置为程序cache或数据cache来使用。

(5)流水处理

除了多功能单元外,流水技术是提高DSP程序执行效率的另一个主要手段。流水技术使两个或更多不同的操作可以重叠执行。在处理器内,每条指令的执行分为取指、解码、执行等若干个阶段,每个阶段称为一级流水。流水处理使若干条指令的不同执行阶段可以并行执行,因而能够提高程序执行速度。理想情况下,一条k段流水能在k+(n-1)个周期内处理n条指令。其中前k个周期用于完成第一条指令的执行,其余n-l条指令的执行需要n-1个周期。而在非流水处理器上执行n条指令则需要nk个周期。当指令条数n较大时,流水线的填充和排空时间可以忽略不计,可以认为每个周期内执行的最大指令个数为k,即流水线在理想情况下效率为l。但是由于程序中存在数据相关、程序分支、中断以及一些其他因素,这种理想情况很难达到。

1.1.4 性能指标

DSP的综合能力指标除了与芯片的处理能力直接相关外,还与DSP片内、片外数据传输能力有关。DSP的数据处理能力通常用DSP的处理速度来衡量;数据传输能力用内部总线和外部总线的配置,以及总线或I/O口的数据吞吐率来衡量。以下是衡量DSP处理性能的一些常用指标。

MFLOPS:即每秒执行百万次浮点操作。其中浮点操作包括浮点乘法、加法、减法和存储等操作。MFLOPS是表征浮点DSP芯片处理器的重要指标。用户选择DSP芯片时要注意,厂家提供的通常是峰值指标,因此系统设计时要留一定的裕量。TMS320C67xx可以达到1000 MFLOPS的峰值性能。

MOPS:即每秒执行百万次操作。这里的操作除了包括CPU的操作外,还包括地址计算、DMA访问、数据传输和I/O操作等。MOPS可以对DSP的综合性能进行描述,200MHz时钟的TMS320C6201的峰值性能可以达到2400MOPS。

MIPS:即每秒百万条指令。MIPS按公式S=J/(Ti×10-6)计算,其中Ti为指令周期(单位为ns), J为每周期并行指令数。300MHz时钟的TMS320C6203的峰值能力可以达到2400MIPS。

MBPS:即每秒百万位。MBPS用于衡量DSP的数据传输能力,通常指某个总线或I/O口的带宽,是对总线或I/O口数据吞吐率的度量。对于TMS320C62xx系列外部总线接口,如果总线时钟选择200MHz,则总线吞吐率为800MB/s(32位数据总线),即6400MBPS。

随着DSP结构的多样化和复杂化,这些指标越来越不能反映DSP的综合性能,不同厂商的指标甚至不具可比性。对于一些常用的DSP算法,如N点FFT的处理时间和N点FIR的处理时间等,在进行系统设计时可以参考DSP厂商提供的基准,但要想得到具体参数下的精确指标,则必须通过软件仿真器和软件评估模块等开发工具在DSP上进行试验。