消费性产品与通讯产品都要能支援高运算量和资料转换的功能。这些产品对体积大小和耗电量的要求很严格,而数位讯号处理器(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的简易架构
编译器
就大多数的应用而言,除了要追求快速的运算能力以外,要如何才能有效地储存暂时性的资料,也是一个令人头痛的难题。可设定式DSP可以在不同位置新增、移除,甚至重组资料和位址暂存器,这可以让编译器充份地利用暂时性的储存资源(譬如RAM、暂存器)。
因为高速可设定式DSP是属于VLIW架构,它允许加入自订的CU。这种CU称作「设计者定义的计算单元(Designer Defined Computational Unit;DDCU)」,包括自订的指令,并可以加到编译器的可用字汇里去,成为程式语言的一部份。
不过,弹性、平行运算与可设定性,是以高成本构筑而成的。这除了硬体的成本以外,另一个成本就是编译器的成本。编译器负责将高阶程式码转译成指令,并传送给可设定式DSP执行,这个复杂的过程就是成本所在。
这种编译器必须是VLIW最佳化编译器,可以将连续的C程式码转换成VLIW指令;并尽可能在每一个週期内,执行最多的运算作业。它能察觉可设定式DSP的设定变更(新增或删除),甚至能将使用者自订的DDCU,转译成相对应的指令。
此编译器能针对指定的应用类别和DSP核心之不同,将C程式码映射(map)成相对应的目标码。这个映射作用是全域的(global),且包括许多最佳化和转换作业,其目的就是要使原始程式码能和DSP更加适配。
因为DSP在每一个工作週期内,能执行的工作量是已知的,所以编译器的任务就是要在每一个週期内,尽可能将最多的有用工作量赋予DSP。不过有时候,部份应用程式并无法妥善地被映射到DSP上,这时编译器会产生讯息,指出那些尚待改善的地方。这些讯息包含:
●消耗过多运算週期的程式码:有一部份的程式码会消耗掉很多的运算週期(动态地),因此必须多加注意;
●利用率偏低的程式码:有一部份的程式码会使编译器无法妥善利用DSP;
●没有善加利用资源:有些DSP资源未被充份利用;有些则是多余的;有些资源可以利用其它方式进行重整,以获得平行运算的最大效益,或节省更多的空间和时间;
●缺乏资源:如果能增加资源(如暂存器、指令等),就可以提高应用程式的效能。
利用上述的编译结果和描述,使用者可以针对程式码和组态进行修改。程式的修改可能包括:简单迴路的重写、改变资料型态、或改变语法,这些可能使编译器的作业更加简单和明确。此外,使用者也可以改变可设定式DSP的组态,藉由增加或移除资源,或以许多种不同的方式重组资源,或可以添加能提高应用程式执行效率的自订指令。
产品开发流程
使用可设定式DSP来开发产品时,如果不採用一套完整的开发流程来遵循的话,则可设定的、可扩充的目标可能就很难达到。此流程见(图二)。
在图二中,进行数位讯号处理的应用程式可以说是主角。它以C或Java等高阶语言写成,并在主机上经过验证与测试。除了要完成功能性验证以外,效能、成本、体积、耗电量也都要做取捨和折衷,以达到最完善的境界。
应用和最终产品的不同,也就是开发流程的起点,也可能会对开发的目标产生影响。例如:手提式装置需要低功率,但是它的应用程式需要500~1000 MIPS的处理速率,在这种情况下,就要以平行处理能力较差、具单一DSP核心的处理器为开发目标。但若是广播视讯应用程式要实现高解析度的画面,那就要以高阶、具两个DSP核心的处理器为开发目标。
(图二)可设定式DSP的开发流程
结语
「软硬体同时开发」是加速SoC设计的重要方法,同样也是应用高速可设定式DSP开发新产品时,必须採用的方法。OEM/ODM厂商在时间和成本的压力下,最后势必会採用这种新技术。不过,若大多数厂商都使用同一款DSP处理器来开发产品,很可能无法形成产品的市场区隔,再次陷入削价竞争的窘境。