消费性产品与通讯产品都要能支援高运算量和资料转换的功能。这些产品对体积大小和耗电量的要求很严格,而数位讯号处理器(DSP),就是这些产品最核心的部份。为了支援这些产品的需求和应用,DSP应该是可程式化的、可设定的和可扩充的。因此高速可设定式DSP因此应运而生,它非常适合应用在需要高效能、低功率且可以弹性设计的消费性产品和通讯产品上。 消费性产品与通讯产品,基本上都要能支援高运算量和资料转换(transformation)的功能。例如:视讯影像的编码与解码、声音的压缩与解压缩,或者影像资料的处理及压缩、语音的播放以及通讯频道的编解码等应用。
这些产品对体积大小和耗电量的要求很严格,而且要求能针对特定的规格提供最佳的支援。而所谓特定的规格就是指产品的应用功能。例如:手提式视讯装置需要低功率和低成本,但影像品质并不高;不过,视讯广播市场所需要的视讯产品,则必须是高画质的,且其运算处理效能一定要高。
此外,目前许多产品都必须同时支援多种应用项目,或必须支援具有多种格式(format)的单一应用。譬如:只支援MPEG2的视讯产品,将必须同时支持MPEG4、H26L、MSWM和其它视讯标准;而WLAN通讯装置除了要支援802.11的不同版本标准以外,有时还得支援其它的无线电标准。
而数位讯号处理器(digital signal processing;DSP),就是这些产品最核心的部份,负责处理那些需要大量运算的资料。为了有效地支援这些产品的需求和应用,DSP应该是可程式化的(programmable)、可设定的(configurable/reconfigurable)和可扩充的(scalable)。高速的可设定式DSP因此应运而生,它非常适合应用在需要高效能、低功率且可以弹性设计的消费性产品和通讯产品上。
高速可设定式DSP的设计目的,简单说,就是要在单一的系统级单晶片(SoC)架构下,支援许多种应用和需求,而且使用者可以利用高阶语言来开发。为了能尽早完成产品的开发工作,使产品能提早上市,这种新技术将是无法抵挡的趋势。
必须了解的定义 有几个定义必须先了解。首先,所谓「可程式化」,是指它可以处理指令,而不是指执行固定的函式(function)。对DSP而言,指令可以来自于高阶语言(C、Java、C++)的编译器(compiler),也可以经由手写程式(组合语言)产生。这有别于传统的DSP功能,因为可设定式DSP具有类似中央处理器(CPU)的功能。其实,正如DSP的原名──「数位讯号处理器」,它本来就应该是一种处理器;只不过,传统的DSP并没有将CPU核心纳入架构中,因此,「DSP只能执行固定的函式」就变成了一种刻板印象。
所谓可设定式,是指可以使用一种或数种方法,将可设定式DSP修改成客户想要的应用功能。不过,这些修改必须在它变成硅晶之前,就得完成。
而可扩充性,是指它可以增加或缩减功能,来支援不同种类的应用需求。在大多数的情况下,是专指增加功能而言,这可以使它拥有数颗传统DSP的功能。
基本特性
可设定式DSP最明显的特性,就是能动态地执行最佳化作业。它以下列三种方式来强化运算效能。
扩充或缩小
藉由增加或减少DSP处理器里的可用资源,同一种应用就可以具有不同等级的运算效能。可扩充性可以藉由增加单一DSP的资源,或者使用数个DSP核心来达成。不过,为了能完善地利用这些新增的资源,以提高运算效能,还需要一个功能强大的编译器来配合才行。如果没有这种编译器的协助,则可设定式DSP只会使应用产品的开发时程增长而已。
位置与混合
藉由改变资源的组成结构(在不增加额外的资源之情况下),可设定式DSP可以依照不同的应用需求,提供不同等级的效能。例如,暂存器的位置(必须防止它的资料爆满溢出)会直接影响到程式运算迴圈的效能。同样地,功能强大的编译器在这里也扮演着举足轻重的角色。
自订指令(custom instruction)
每一种应用都具有一些特殊的运算作业(数学的、工程的或其它),但并不是全部都适合DSP去执行。因此,实际上,单一的DSP不可能包含所有的指令或运算函式。而且,DSP厂商也无法事先就完全知道,所有客户需要的全部运算函式和指令。所以,为了提供弹性设计的方便性,可设定式DSP允许使用者可以将自己设计的指令置入此DSP中,以满足客户的需求。
除了提高运算效能以外,可设定式DSP还必须支援功率和体积(成本)的最佳化。因为效能、功率、体积三者是技术产品成败的关键,所以可设定式DSP必须在指定的效能等级中,以程式求出最合适的耗电功率和体积大小。
可设定式DSP可以用比较少的时脉週期和逻辑电路,得到与传统DSP同等级的效能,这是靠自订指令来完成的。在可程式化方面,此种DSP具有下列两个重要的功能。
指令的执行
和一般的处理器一样,可设定式DSP读取和执行指令串流或目标码(object code),以实现特定的应用功能。这些功能包含支援多重标准或多重格式,甚至包括未知的新功能,或数目更多的格式。藉由撰写和执行新的指令,它就可以支援许多种不同的应用功能,这是传统DSP望尘莫及的。
高阶语言
使用高阶语言(C与Java)来设计处理器的程式,具有右列的几个优点:程式设计者的生产力会提高(因为容易撰写和验证)、设计弹性高(因为容易变更)及维护性高(因为容易除错和修改)。这些优点是低阶语言(组合语言)所没有的。如果不使用高阶语言来开发,则徒具可程式化功能的DSP就没有价值了。不过,高阶语言所带来的便利性,其实是源自于高效率的编译器与优化程式(optimizer)。
基本单元
平行执行单元(parallel execution unit)是可以视需要做增减调整的;也可以结合数个可设定式DSP核心,形成阵列的架构一起工作。高速的可设定式DSP是「极长指令字组(Very Long Instruction Word;VLIW)」的可程式化处理器。VLIW DSP的运算速度是很惊人的,例如:TI于2004年2月推出的TMS320C64x DSP核心的时脉速率最高可达1GHz。
需要经过数位讯号处理的应用,其频宽需求是非常高的。例如:简单的16与32位元的资料转换,就需要进行数百次的乘加运算,再结合大量的资料流处理,因此,需要一个非常有效率的运算平台才行。
另一种可以使运算速度加快的方法,就是尽可能同时执行许多个运算作业。VLIW处理器的功能正可以达到这个目的。因为每一个指令字组(instruction word)包含了许多个时槽(time slot),因此编译器可以在每一个週期内,指定许多个动作,而且在每一个时槽里,执行个别的动作。其结果是,VLIW处理器就可以在一个週期内,完成数个运算作业。VLIW处理器特别适合应用于数位讯号处理工作,因为DSP的工作都是规律而重复的,几乎不需要控制码。
高速可设定式DSP具有数个类似「算数逻辑单元(ALU)」的结构,称作「计算单元(Computational Unit;CU)」,它们前后串接,并藉由「指令时槽(instruction slot)」控制每一个CU。当两个CU共用一个指令时槽时,就发生了「重叠」现象,此时不能进行「同时作业」。不过,高速可设定式DSP允许CU混合不同的指令,并利用指令时槽,决定每一个週期内的指令型态与数量。
在VLIW架构中,指令字组包含了许多个时槽,每一个时槽各控制一个运算作业。因此,藉由改变时槽或CU的数量,就可以增加或减少每週期所执行的运算数量。当增加CU后,会使可用的混合资源改变,好让编译器能对平行作业(parallel operation)做出最好的排序(schedule)。
典型的CU包含:算数运算单元、乘加单元(MAC)、位移单元、计数器和其它指令处理指元。资料路径(data path)大小一般是16或32位元,或两者兼具;採固点或浮点运算。大部份的CU还支援「单指令多资料(Single Instruction Multiple Data;SIMD)」运算功能,可以处理位元组(byte)或半字组(half word)的资料,例如将平面空间的圆转换成3D空间的圆(由多个三角形构成)。
同样的,**介面单元(Memory Interface Unit;MIU)也被指令时槽组织起来,并透过指令时槽决定读取的时机。MIU支援资料存取和位址(address)生成。高速可设定式DSP支援16或32位元的位址空间(address space)。因为MIU和CU一样,都受指令时槽的控制,因此可以藉由改变时槽的数目,来变更可用的MIU数量。
和传统处理器不同的是,可设定式DSP的暂存器(register)分散于各地,它不使用集中式的单一「暂存档案(register file)」来管理。这会使得运算结果的位置,比较靠近产生此结果的地方和应用此结果的地方。同时,这也让编译器能更灵活地将资料配置到储存的位置。这观念类似RAM的随机存取动作。
「资料通讯区块(data communication block)」可以让资料在不同的储存位址之间移动,以及输入到CU里。它包含了数个具有多工(MUX)功能的匯流排,并且受编译器的控制。(图一)是高速可设定式DSP的简易架构。
(图一) 高速可设定式DSP的简易架构 |