基于Xtensa LX可配置处理器构建Vectra LX引擎.docx
基于Xtensa1X可配置处理器构建Vectra1X引擎音频、视频、图像等所有媒体的数字化对信号处理提出了越来越高的要求,这些数字信号数据内容需要建立、存储、传输和重放。同时,越来越多的逋值和娱乐传输系统是便携式的,这需要极大地提高信号处理的带宽。日益增长的信号处理负载使得电气功耗成为信号处理系统的制约因素。蟠是进行数字信号处理的绝好选择,因为数字信号处理器可以编程,并且在当今数字媒体处理飞速变化的世界里可以容易地处理众多变化的标准。然而,通用DSP的“通用性”使得其并非对所有应用都能够实现很好的功耗效率(powerefficient)。硬线连接的信号处理模块通常有比较好的功耗效率,但是缺少DSP那样的灵活性和可编程特性。可配置处理器技术通过建立针对某一特定任务属性正确的、功能丰富和可编程的DSP,在DSP的固定ISA(指令集体系结构)灵活性和可编程特性与硬线连接模块的功耗有效性之间建立起桥梁。Tensi1ica的Vectra1X是这种概念很好的诠释。Vectra1X是一个定点的向量DSP引擎,该引擎是通过配置选项在Xtensa1X可配置处理器的基础上建立起来的。可配置架构Vectra1X定点DSP引擎是XtenSa1X微处理器内核的一种配置。该定点DSP引擎是一个3发射的辿D处理器,具有四个乘法器/累加(四个MAe),它可以处理128位的向量。128位向量可以分成8个16位或者4个32位的元素。整个VeCtra1XDSP引擎是用nE(Tensi1ica,SInstructionExtension)语言开发的,通过修丽以适合目标应用领域。正像图1所示,Vectra1XDSP引擎增加了16个向量寄存器(每个寄存器160位宽)、四个128位的向量队列寄存器、第二个加载/存储单元和210多条现有XtenSa1X处理器指令集体系结构中的通用DSP指令。图2,Vectra1XDSP引擎的160位向量寄存器与四个相同的S1MD部件相连,每个部件包括一个向量AIM一个独立的加法/减法部件、一个乘法器和一个选择部件.对齐寄存器支持非对齐加载和存储操作,并作为中间结果寄存器。此类髭蠡工炮"3隘1量寄存器转损成128位向量数据的加载扩展操作和将128位向量数无寄存器的存储饱和操作.基本的Xtensa1X处理器是一个单发射的微处理器,具有16位和24位指令。但是,TenSi1iCa的处理器产生器(processorgenerator)能够让开发人员增加更宽的指令字长。通过一种称为可变长度指令扩展F11X(F1exib1e-1engthInstructionExtensions)的技术为处理器指令集增添多个独立操作。F1IX指令宽度可以为32位或者64位,并且由于Xtensa1X处理器已经设计成可以处理多种指令宽度,因此多操作F1IX指令可以在处理器代码流中自由组合,并且可以和现有的单发射XtenSa1X处理器指令连接在一起。当开发人员选择VeCtra1XDSP引擎配置选项时,TenSi1iCa的处理器产生器会自动将DSP引擎的RT1代码添加到可综合的Xtensa1X处理器中。新的Vectra1X指令被添加到处理器自动产生的软件工具集(编译器、汇编器、调试器、指令集仿真器ISS和实时操作系统RToS接口)中。Vectra1X使得Xtensa1X处理器门数增加20万25万门。这些增加的门数中的大部分用于构建VeCtra1XDSP引擎中的寄存器和执行部件,因为通用处理器和DSP引擎扩展可以共享处理器中现有的取指令和指令译码部件,所以那些硬件模块不需要重新复制。然而,需要增加一些逻辑用于对新的指令进行译码。图2为VeCtra1XDSP引擎配置选项中增加的寄存器和执行部件框图。G!|比|27;|”3A1U&2w,1d/StMAC&Se1ect1oadZStore&Core困3,64位的Vectra1X指令字长度不等地分布在三,1作指令十中一个24位的指令槽和两个18位的指令槽。指令宇中最右上是:定女示该指令宽度为64位。图3表示三操作VeCtra1X指令字格式。指令字中最右边四位表示该指令宽度为64位。剩下的60位指令字长度不等地分布在三个操作指令槽中:一个24位和两个18位的指令槽。Vectra1X指令字中的24位操作指令槽(指令字中第4位到第27位)可放置Xtensa1X处理器中所有80条基本指令,包括控制第一个加载/存储单元的操作。该操作指令槽还可以处理扩展的128位加载/存储指令,此指令可将信息存到VeCtra1X宽向量寄存器中,也可以从该向量寄存器读出信息。VectorRegisterA1ignmentRegisterFromFwnmemoryAfvnot(f<*M)rosierMemoryRMeandJo&dM同即"M同"H虫竺以Rotateandtoada1ignmentregFromFcomf1ffOAWf1f1tRotateandM(roteted)吗匚q幽EI*",W,EeW.1S.U.U,U.n,1MM图4,Vectra1X的加载和存储操作单元由处理器指令字中的24位指6槽进行控制,通过采用128位对齐寄存器保存部分向量米-.戈对齐和非对齐加载和存储操作。在由第一个部分向量填满对齐寄存V.火厘泼不.会务时钟周期完成一个未对齐的加载或者存储操作。24位的操作指令槽能提供足够宽的编码位数,允许加载和存储指令在指令槽中指定对齐或者非对齐加载和存储操作,如图4所示。非对齐加载和存储操作帮助相关的向量化编译器处理存储器数据阵列,这些数据阵列可以任意方式对齐,因为编译器产生的代码有时是非对齐的数据阵列,这将降低DSP的性能。然而,这种性能损失可以通过DSP引擎以非对齐加载和存储操作方式提供的支持加以补偿。Vectra1XDSP引擎的对齐寄存器提供部分向量存储功能,这些对齐寄存器在非对齐加载或者存储字符串的开始用第一个部分向量进行初始化。后续的非对齐加载或者存储操作隐含地和新的向量数据进行合并,这些向量数据经过循环移位并和部分对齐寄存器内容相连接,在对齐寄存器中将整个向量组合在一起。这些非对齐加载和存储操作还为下一个非对齐加载或者存储操作准备好对齐寄存器,以便使得一系列连续的非对齐加载或者存储操作能和对齐数据近似相同的效率将数据送入或者送出非对齐数据阵列。Vectra1XDSP引擎采用第一个18位操作指令槽(第28位到第45位)来放置4X4Obit的SIMD单指令流多数据流乘累加MAC操作。该指令槽还执行DSP引擎的选择操作,该操作可以将两个源向量寄存器中的八个16位寄存器组合在一起,如图5所示。Vectra1X处理器选择操作可以用于实现诸如复制、循环移位、移位和数据交织等向量操作。第二个18位操作指令槽(第46位第63位)保存DSP引擎的4X40位和8X20位的SIMD单指令流多数据流A1U操作以及那些用于控制处理器中第二个加载/存储单元的操作,该加载/存储单元能执行数据对齐操作、128位向量的加载和存储操作。Xtensa1X和VeCtra1X处理器通过三个操作指令槽有效地执行DSP代码,图6表示一个256点的基4复数FFT算法中的一个紧凑循环程序。四个乘累加MAC单元全部得到了利用(如图6中的中间一列),并且另外两个指令槽也得到了充分利用。这样组织程序的结果导致VeCtra1XDSP引擎极大地减少了用Xtensa1X处理器来执行DSP任务所需要的时钟周期数。图7列出了256点的基4FFT算法的时钟周期数。256-PointRadix-4Comp1exFFTMAC&SE1ECTCore&1oadZStoro>oopneza6.400420c)dd2Ov3.v.v2.rmu1r1Bv1.v11,v12.tvs16xuv.14.a8PacMov2,v0.v10.7v.v.v5.93:tvs1.xuv4.>14.a8nop;mu1r18v7,v11.v12;t*1XMv5.14.0ad2Ovf1.w.v5.nop;Is1xuv.141a8dd2Ov2.v4.e.rmu1r18v10.v.v13,vs1.×u2.7.8sut>2Ov11.v.v2nop:Iws16iv12.a4,16Nb20v9.v4.v9;rnu1r1v4.v11.v12;v1,xu5T3,«7.a8pac40v2,v7.v1;so!v1.v9.v9.s.svs1.xuv14.07.aut>2Ov7.v.v5.IrnU1r18v.v11.*12.nop;sut>2v5.v7.v1.HOP;1vs16Jv12>4.-32sub2Ov.v7.v1;murt8v9,*6.*13;sfxuv3.a7.a8PMA40vt4v.Mo1v11.v,vS,»1;nop:Uti1ization-*92%10083%图6,一个256点的基4复数FFT算法全部利用了Ve1.XRSP引孥中的四个乘累加MAC单元(如图6中的中间一列),并且户个律飞杷受了充分利用。一个最基本的Xtensa1X处理器配置在计算一个256点的基4复数FFT算法时需要155000个时钟周期。如果为基本处理器配置增加一个32位乘法器,那么执行相同的FFT算法需要23633个时钟周期,减少接近一个数量级;如果像在VeCtra1XDSP引擎中那样增加SIMD和多操作能力,则需要944个时钟周期,减少两个以上的数量级,性能大约提高156倍。软件环境开发DSP体系结构性能要求有相关的软件工具,以便理解和有效地运用DSP的结构特征。一个称为XCC的向量化C/生编译器支持Xtensa1X和Vectra1X体系结构。该编译器能够按照和传统C数据类型相同的方式来自动处理向量数据类型,如图8所示。向量类型的转换是隐含进行的。uhona(12M).b|12X|.c(!2*1;CCOdevotd)finercw10;in<i4fex<M>卜12机卜)c(i-M1ZA(I印)163JM>JComp1ied1oopIoopgtza1I.1(pk40v6,vj.v5;mu11S.04.0.vI;1v*16.iuvOvaAJ6)(mif>40v3,v2v7;nop;1v>16Jv19J6)(mif>4Ov5,v4.r7;mu11K.Iv2v<>v,I;vhI6iuWM11(M6)Compi1ervectorizes,b,c->A9B.C.8e1ementsperve×图8,XCC编译器按照和传统C数据类型相同的方式/.理闩鲤公圮卖力。向量数据类型的转换是隐含进行的。256ptFFT(Radix-4)为了获得更高的处理器性能,XCC编译器利用VeCtra1X单指令流多数据流执行部件寻求各种机会对代码进行向量化,主要针对循环语句,如图9所示。在对DSP代码进行编译时,XCC编译器产生一串连续的VCCtra1X操作,然后调度这些操作,并将其封装成VeCtra1X宽指令字,如图10所示。调度汇编器对汇编代码也做相同的操作。Simp1eRISCTaskEngineMinima1ConfigurationXtensa1Xprocessorusingsoftwaremu1tip1y155,389cyc1esSca1arPerformanceBaseXtensa1Xpr