标量/矢量处理器的制作方法

文档序号:6409693阅读:529来源:国知局
专利名称:标量/矢量处理器的制作方法
技术领域
本发明涉及一种标量/矢量处理器。
背景技术
诸如UMTS/FDD、TDD、IS2000和TD-SCDMA这类的第三代无线电通信标准,以很高的频率工作。诸如UMTS之类的用于第三代移动通信标准的调制解调器(收发器)大约需要比GSM多100倍的数字信号处理功率。人们希望利用可编程体系结构来实现用于此种标准的收发器,以便能够处理不同的标准以及能够灵活地适应于新的标准。使用以常规频率工作的常规DSP技术可能需要多至30个DSP来提供必要的性能。显然是这类手段同常规的用于单个标准的基于硬件的收发器手段相比,既不是成本有效的也不是功率高效的。
提高处理器性能的已知手段就是使用矢量体系结构。在矢量处理器中,矢量由一个以上的数据元素构成,例如十六个16位元素。处理器的功能单元受一条指令的触发而并行地对矢量中所有单独的数据元素进行操作。使用流水线矢量处理器,能够进一步提高性能。
矢量处理器传统上主要已用于科学处理。原则上讲,矢量处理器还可以用于信号处理。然而,由于称之为″Amdahl定律″的隐含意义,常规矢量处理器结构对于非100%可矢量化的应用而言是不起作用的。这条定律陈述了将在具有P个处理元件的矢量处理器中通过矢量化获得的整体加速率作为能够被矢量化的小部分代码(f)的函数,等于(1-f+f/P)-1。这意味着当50%的代码能被矢量化时,实现了小于2的整体加速率(代替理论最大加速率32)。这是因为仍有50%的代码不能被矢量化,由此不能为这部分的代码实现加速。即使90%的代码能被矢量化,加速率也仍然小于因数8。为了在消费者电子设备应用中使用,特别是在移动通信中使用,如果能够实现显著的加速,则只得调整矢量处理器的额外成本。

发明内容
本发明的一个目的是,提供一种更好地适用于高性能任务(特别是用于移动通信系统的信号处理)的处理器体系结构。
为了满足上述目的,一种标量/矢量处理器包括多个功能单元,其中至少其中一个功能单元包括用于对至少一个矢量进行操作的矢量部分和用于对至少一个标量进行操作的标量部分,通过标量部分协同操作的功能单元的矢量部分和标量部分被设置成提供和/或耗费功能单元的矢量部分所需要和/或提供的至少一个标量。
发明人意识到为了突破Amdahl定律,必要的是必须也以有效的方式来处理数据的非可矢量化部分。非可矢量化部分涉及到标量数据。往往这些标量是通过矢量操作而产生和/或耗费的。示例就是所有矢量元素的总和或最大值选择第一个(或最后一个)矢量元素。在其它情况下,标量数据可以不依赖于矢量操作。为了最佳地处理这类标量数据,处理器的至少一个功能单元不仅包括矢量部分而且还包括标量部分。标量部分提供和/或耗费了功能单元的矢量部分所需的和/或所提供的标量。照此,处理器的标量部分能够准备或进一步处理矢量部分所需的或所产生的标量,这确保矢量部分能够更好地继续矢量的流式处理。应当注意的是,US 5,659,706描述了一种具有独立的标量处理器部分和矢量处理器部分的标量/矢量处理器。每个处理器部分都排列在功能单元中。然而,标量处理器部分的功能单元与矢量处理器部分的功能单元之间不存在紧密的协作。这两个部分都完全独立地工作。
如从属权利要求2和3中所述的,功能单元的矢量部分和标量部分分别排列在各自的流水线中。这提高了处理器的矢量部分和标量部分的性能。
如从属权利要求4中所述的,能够独立地配置流水线。这实现了用于原始数据处理的矢量流水线的最佳配置,然而可以为用于矢量处理的标量的最理想耗费/产生选择标量流水线的另外的最佳配置。可置配性提高了性能并且能够简化处理器的编程。照此也能够减少程序代码。
如从属权利要求5中所述的,至少其中一条流水线是可基于逐个指令地配置的。照此,能够更进一步地提高性能并进一步地减少代码。
如从属权利要求6中所述的,使用具有用于每个功能单元的独立分段的VLIW指令来控制所述标量/矢量处理器。优选地,VLIW指令包括用于功能单元的标量部分和矢量部分的独立指令。照此,这两个部分都能够最佳地执行它们的任务。
如从属权利要求8中所述的,还可以通过VLIW指令来配置流水线。这是基于逐个指令地配置流水线的有效方式。
如从属权利要求9中所述,流水线包括与附着于流水线的功能单元同样多的流水线路径。每个功能单元都与其中一条路径相关联。这类路径例如可以是在其上功能单元广播矢量(或对应标量流水线的标量)的路径。如从属权利要求10中所述,功能单元的指令指明所述单元应该从哪条矢量流水线路径中耗费矢量(和/或它应该从哪条标量流水线路径中耗费标量)。作为选择,功能单元的指令能够指明它应该在哪条矢量流水线路径上产生矢量输出(和/或它应该在哪条标量流水线路径上产生标量),其中与其中一个后续周期中的那个路径相关联的功能单元依据给予那个单元的指令而耗费那个产生的数据。照此,能够实现完全的流水线可置配性,同时以每条流水线只表示一个路径的合理水平来保持网络编址。将会认识到的是,由于路径与功能单元之间的固定关系,因而表示路径与表示功能单元相同。
如从属权利要求11中所述的,移位单元是最佳受益于功能单元的标量部分与矢量部分之间的协作的功能单元的一个示例。
为了满足本发明的目的,一种处理系统包括如权利要求1中所述的标量处理器和标量/矢量处理器,其中将所述标量/矢量处理器设置作为标量处理器的协同处理器,而把所述标量处理器设置成控制所述标量/矢量处理器;安排标量/矢量处理器的标量部分以执行循环内的标量处理,而安排标量处理器以执行不规则的循环外的标量处理。通过使标量/矢量处理器免除掉必须处理不规则的标量操作,能够为显著的部分克服Amdahl定律。根据本发明的标量/矢量处理器最佳地适合于处理循环内的标量操作,其中标量部分与矢量部分之间的紧密协作确保了矢量处理能够尽可能继续下去。能够选择最佳用于两种处理器的技术(比如像CMOS技术、工作频率等等),从而提供成本有效的系统。


通过参照在下文中描述的实施例,并且将参照这些实施例作出阐明,本发明的这些及其它方面将是显而易见的。
在附图中
图1示出了可以在其中使用根据本发明的标量/矢量处理器的优选配置;图2示出了根据本发明的标量/矢量处理器的主要结构;图3示出了支持的数据宽度和数据类型;图4示出了指令分配单元的框图;图5A示出了矢量存储器单元的框图;图5B举例说明了ACU寄存器组映射到一个矢量寄存器;图6示出了代码生成单元的框图;图7示出了ALU-MAC单元的框图;图8举例说明了累加器寄存器的结构;图9示出了洗牌单元的框图;图10示出了左移位单元的框图;和图11示出了右移位单元的框图。
具体实施例方式
图1示出了可以在其中使用标量/矢量处理器的优选配置。在这个配置中,三个主要组成部分都经由总线110相连。连接这三个组成部分的总线110可以是任何适合的总线,例如AMBA高速总线(AHB)。所述主要组成部分是·根据本发明的可编程标量/矢量处理器120,包括功能单元和局部数据存储器(在图1中称为矢量存储器);·包括有限芯片内程序和数据存储器的微控制器或DSP子系统130;·接口块140。
标量/矢量处理器120主要用于常规的″繁重/责任″处理,尤其是内循环的处理。标量/矢量处理器包括矢量处理功能。照此,它为要被执行的代码的可矢量化部分提供了大规模的并行性。所有信号处理中的绝大多数都将通过标量/矢量处理器的矢量部分加以执行。例如,就执行相同指令的32个相同处理元件的阵列而言,它提供了高度的并行性。同32字宽的存储器接口相结合,这以低成本和适度的功耗达成了前所未有的可编程性能水平。然而,完全地采用这种并行操作并不总是合理的,因为许多算法都没有呈现正确形式的充分数据并行性。根据Amdahl定律,在使代码的可直接矢量化的部分矢量化之后,大部分的时间都花费在剩余的代码上。剩余的代码能够分成四类;·寻址有关的指令(例如,利用求模寻址来把指针增加到环形缓冲器中)·规则的标量操作(即,对应于矢量处理器的主循环的标量操作)·循环·不规则的标量操作对应这些类别中的每一类的小部分代码都高度地依赖于执行的算法。例如,(P-SCH搜索所使用的)Golay相关器需要大量寻址有关的指令,但是对于诸如Rake之类的其它算法来说情况则不是这样的。然而,发明人已经研究出的所有算法的一个共性就在于小部分的不规则标量操作是非常有限的。这种特性允许标量/矢量处理器120与微控制器或DSP 130之间的任务分离。
根据本发明的结构通过在与矢量处理紧密集成的标量/矢量处理器120中并入标量处理功能而克服了前三个问题。第四个问题能够通过使用独立的微控制器或DSP 130加以克服,所述微控制器或DSP执行不规则的任务,并且优选地也控制标量/矢量处理器。在这个优选配置中,标量/矢量处理器120充当可编程的协同处理器(在其余部分中也称为CVP,协同矢量处理器)。标量/矢量处理器120和微控制器130之间的接口处理通信(例如,经由共享存储器)和同步化(例如,经由共享存储器和状态信号)。接口优选的是存储映象式的。
接口块140允许处理器与系统的其余部分进行交互。在优选实施例中,标量/矢量处理器被用作第二代/第三代移动网络的软件调制解调器(收发器)。对于这类软件调制解调器功能来讲,对无线电设备的控制和接口连接无法容易地由标量/矢量处理器(所述控制是不规则的,而且数据是固有地串行传输的)或微控制器130(中断率将会过高)来执行。对于这类应用来讲,优选的是把专用硬件用作为前端,其主要任务就是在微控制器130的控制之下把控制字和数据字传递给矢量存储器,例如DMA。然后,由标量/矢量处理器处理矢量存储器中的数据。对于软件调制解调器而言,由标量/矢量处理器执行的接收器功能可以包括滤波器、耙接收器、通道估计器、搜索器、解数字复用器、上行链路、turbo译码器、维特比(Viterbi)译码器和解多路复用器。由标量/矢量处理器执行的发送器功能可以包括多路复用器、通道编码器、数字复用器、发送器和滤波器。实质上,那些功能都是已知的,并且将不作进一步描述。
标量/矢量处理器120可以是到总线110的从设备。而微控制器130和接口块140(它可以包括DMA单元)可以充当主设备。所有与CVP之间的通信(作为它的程序、数据或控制)都优选的是存储映象式的。存储器可以是脱离芯片(off-chip)的DRAM,并且这种DRAM也可以被标量/矢量处理器用作为(去)交错存储器。
图2示出了根据本发明的处理器的主要结构。所述处理器包括流水线矢量处理部分210。在图2的优选实施例中,矢量部分包括将在下面更详细描述的七个功能单元。本领域的技术人员将能为具体的任务选择最佳的功能单元。为了支持矢量部分的操作,标量/矢量处理器包括被设置成并行地对矢量部分进行操作的标量处理部分220。优选地,标量处理部分也是流水线的。为了支持矢量部分的操作,矢量部分的至少其中一个功能单元也提供标量部分的对应部分的功能。例如,移位功能单元的矢量部分可以在功能上对矢量进行移位,其中由移位功能单元的标量部分来提供标量分量(或者标量分量被传送到移位功能单元的标量部分)。照此,移位功能单元既涵盖矢量部分又涵盖标量部分。因此,至少一些功能单元不仅具有矢量部分而且还具有标量部分,其中矢量部分和标量部分能够通过交换标量数据来协同操作。功能单元的矢量部分提供原始的处理能力,其中相应的标量部分(即,相同功能单元的标量部分)通过提供和/或耗费标量数据来支持矢量部分的操作。经由矢量流水线来提供矢量部分的矢量数据。
功能单元(FU)并行地工作。每个FU都能够接收和发送矢量数据。许多FU也都能接收和发送标量数据。其中一个FU是称为指令分配单元(IDU250)的特定FU。它包含程序存储器252,并且负责将指令排序,并向其自身及其它FU分配指令段。原则上讲,每个FU都具有三个部分控制部分230、标量部分220和矢量部分210。正如将在下面更详细描述的那样,一些FU的控制部分和标量部分都可以是空的。
根据本发明的标量/矢量处理器以两种主要方式应用指令级并行操作1.矢量处理,其中单条指令对数据的矢量(标量)起作用。这种手段亦称单指令流、多数据流或SIMD。
2.多功能单元的并行处理,每个多功能单元都对矢量起作用。可以把这个视作为VLIW指令级并行操作的(约束)形式,注意,这两种形式的指令级并行操作都是独立的,并且它们的影响都是渐增的(cumulative)。
功能单元(FU)概述在优选的实施例中,CVP包括下列七个专用功能单元。
·指令分配单元(IDU250)。IDU包含程序存储器252,读取连续的VLIW指令,并向7个功能单元发布每条指令的7个分段。优选地,它包含支持多达零开销循环的三个嵌套层的循环单元。在优选实施例中,它不支持分支、跳转或中断。根据下面更详细描述从限制(stint)描述符来加载初始程序计数器。
·矢量存储器单元(VMU260)。VMU包含矢量存储器(在图2中未示出)。在每条指令期间,它能够从矢量存储器中发送行或矢量或者将行接收到矢量存储器中。相同的指令另外还可以规定标量发送操作和/或接收操作。VMU是唯一连接于外界(即,连接于外部总线110)的功能单元。
·代码生成单元(CGU262)。CGU是在有限域运算中专用的。例如,CGU能够用于生成CDMA代码芯片的矢量以及相关函数,比如像通道编码和CRC。
·ALU-MAC单元(AMU264)。AMU是在规则的整数和定点运算中专用的。它支持矢量间操作,其中在元素方面(element-wise)对多个矢量执行操作。在优选的实施例中,AMU还提供一些矢量内操作,其中对单个矢量内的元素执行运算。
·洗牌单元(SFU266)。SFU能够根据指定的洗牌模式来量新安排矢量的元素。
·左移位单元(SLU268)。SLU能够按单位(比如字、双字或四倍长字)对矢量的元素进行向左移位。把产生的标量提供给它的标量部分。依据发出的SLU矢量操作的类型,所耗费的标量要么是零要么取自它的标量部分。
·右移位单元(SRU270)。SRU类似于SLU,但是向右移位。另外,它具有在AMU上合并来自矢量内操作的连续结果的能力。
下列表示出了所有具有函数矢量部分的FU,其中一些FU不具有控制部分或标量部分。

将会认识到的是,对于特定的应用而言,也可以选择其它的FU。优选地,在基本处理器中,与IDU相结合地使用AMU和VMU。如果功耗是关键的,那么就可以略去SFU,因为这个单元比能够协助执行洗牌操作的移位单元要耗费更多电力。SFU尤其对维特比译码有用。可以依据计算利用常规AMU指令难以产生的代码的技术要求来选择CGU和CGU的特定形式,例如伽罗瓦域计算和扰频代码的生成。在某些应用中,为了获得更高的FU平均负载,添加一个或多个AMU可能是有益的。同样,也可以添加其它的专用FU,例如用于执行某些位级计算的专用FU。
优选地,在FU的操作可能受FU中存储的参数的影响的意义上,可配置至少其中一个FU。优选地,可以从矢量存储器中读取这类参数(″配置数据″)。这类配置有助于简化处理器的编程并缩减代码尺寸。
FU间通信所有功能单元都并行地进行操作。一旦接收到它们的指令段,它们就输入数据、处理数据并输出数据,既包括矢量数据(当可适用时)又包括标量数据。在FU当中,严格地在标量部分当中或在矢量部分当中进行通信(FU间通信)。也就是说,除IDU之外,所有FU的矢量部分都通过流水线而相连。在优选的实施例中,这个流水线是可基于指令而配置的。为此,FU优选地通过互连网络而互连,原则上在每个周期期间允许每个矢量部分都从任何其它的矢量部分那里接收矢量。在其它特征当中,这个特征实现了FU的任意流水线的创建(除IDU之外)。在每个时钟周期期间,有助于矢量路径的六个功能单元能够输出矢量并且并行地将其发送到其它单元。它们还可以从另一个单元接收矢量。网络几乎完全都是连接的。只省略了无意义的链接。矢量路径中的连通性概括如下(!表示连接)。注意,AMU能够同时接收两个矢量。

如图2所示,网络优选地由每个作为信号源(用圆盘表示)而连接于一个网络路径的FU构成。它连接于所有其它作为信号接收器的路径(用三角形表示)。PU的VLIW指令的部分表示它应该从哪条路径耗费矢量。照此,能够基于指令来配置流水线。每条路径都能够(例如)利用256条并行导线来传送全部矢量。同样,FU的至少一些标量部分是通过独立的流水线相连的。优选地,还基于指令来配置这个流水线。在不能把标量发送给至少一个FU的标量部分或者不能从至少一个FU的标量部分那里接收标量的意义上讲,在FU的标量部分之间的互连网络可能是局部的。因此,能够指定少数的流水线排序。可以独立地配置标量和矢量流水线。例如,通过在有关的VLIW部分中指明将由功能单元读取的标量流水线和矢量流水线两者来进行配置。将会认识到的是,代替具有用于输出数据的固定关联路径的FU,作为选择它可以具有用于接收数据的固定关联路径,其中VLIW指令表示应该在哪条路径上输出数据。

作为可置配性的一个例子,第一条VLIW指令可以令AMU耗费CGU所产生的一个矢量以及VMU所产生的一个矢量。下一条指令可以令SFU耗费来自VMU的一个矢量,并且令AMU耗费来自SFU的一个矢量,第三条指令可以令AMU耗费来自VAM的一个矢量以及令SFU耗费来自AMU的一个矢量。
在不同功能单元的控制部分之间没有指定连通性。这些控制部分从IDU那里接收VLIW指令的分段,更新它们自己的状态,并控制它们各自的标量部分和矢量部分。
FU内通信在FU内,存在这些部分之间的严格交互(FU内通信)。这种交互是FU的操作的不可分割的部分。示例就是SLU和SRU,其中把产生的和/或耗费的标量提供给FU的相应标量部分或者从FU的相应标量部分中获取所述产生的和/或耗费的标量。给出更多细节以作为FU详细说明的一部分。
典型地,在单个周期内执行指令。异常是由于矢量存储器内的拥挤而引发的,并且随着停止周期数而自我表明这种情况。
数据宽度和数据类型在优选的实施例中,标量/矢量处理器支持如图3所示的多种数据宽度和数据类型。存储器编址的基本单位是字,也称为单字。优选地,数据宽度可以是单字(W)、双字(DW)、或四倍长字(QW)。字的大小是W=8位。双字(2W=16位)是一对字,并且它的地址总是为偶数值。四倍长字(4W=32位)是一对双字,并且四倍长字地址总是为四的倍数。可以将一对单字或双字用作为复数。矢量包括PQ四倍长字,它相当于2个PQ双字和4个PQ单字。优选地,对于优选的8位字大小而言,PQ=8给出了总矢量宽度为256位。
在优选的实施例中,CVP支持下列数据类型整型和复数整型1.整型(int)具有三种大小字、双字和四倍长字,即整型范围[-2N-1...2N-1-1],其中N等于W、2W或4W。
2.复数整型,也就是一对整型(实部、虚部),在图3中表示为int.real。复数整型具有两种大小双字和四倍长字。
标量是任何数据类型(整型或复数整型)中的值。因此,标量具有三种大小(单)字、双字和四倍长字。矢量具有PQ四倍长字的固定大小。能够以下列三种格式中的其中一种来构造它1.PQ大小为四倍长字的元素,2.PD=2PQ大小为双字的元素,3.PS=2PD=4PQ大小为(单)字的元素。
矢量元素下标范围为
.因此,双字具有偶数指数,而四倍长字的指数是四的倍数。图3给出了数据大小与数据类型之间的关系的概述。该体系结构完全可以PQ为单位加以伸缩,并且它是为任何矢量大小PQ≥1而定义的。然而,对于大部分的情形而言,最好选择PQ的幂为2。
在优选的实施例中,PQ是8,暗指32字的数据路径宽度和存储器宽度。
可以对涉及的数学运算进行配置或编程以处理数据类型上的变化。例如,可以将各种基本(低精度)乘法器组合成双倍精度乘法器或组合成复合乘法器。这类技术在DSP和电路设计中是众所周知的,且不再作进一步描述。
程序执行限制是CVP程序执行和同步化的单元。限制是由CVP指令的有限序列描述的有限不可中断任务。限制典型地是持续活动的DSP内核的时间片,它需要几打的指令以供其说明,并且需要几百个周期以供其执行。
CVP程序存储器可以包含许多限制程序。它由微控制器130负责以指定执行哪个限制以及按哪种顺序执行。为此目的,微控制器130可以在矢量存储器中写入所谓的限制描述符的链接表。每个限制描述符都指代相应的目标代码、后继限制描述符以及潜在信号的说明,以便限制刚一结束就能产生。限制描述符(SD)是包括3个字段的矢量存储器中的结构·程序存储器中的目标代码的起始地址;·矢量存储器中的后继限制(下一个要被执行的限制)的地址;如果没有后继限制则为空(nil);·信令描述符。
代替在矢量存储器中定位限制描述符,它们还可以位于CVP程序存储器中。
在优选的配置中,限制的执行可以按下列方式来触发1.CVP处于其空闲状态。微控制器130现在能够通过在指定的VM地址上写入其SD的地址来触发限制的执行。这个特定的VM位置将总是包含当前活动的限制的地址,并且当CVP为空闲时将包含空值。
2.据CVP程序中的显式EOS(end-of-stint,限制结束)指令告知限制刚一结束,CVP就继续后继的限制,假定后继限制是在当前的SD中指定的。如果这样的后继限制不存在的话,CVP将返回到其静止状态下。
可以由微控制器130通过检查VM中指定的″当前限制″的位置,来轮询限制的状态(活动的/完成的)。限制刚一结束,CVP就可以选择性地向其环境提供信令。对于一组信号线(至少一条输出导线)而言,可以规定它上拉、下拉或者触发它的状态。这些信号例如可以连接于微控制器130和接口块140的中断输入端。
指令CVP指令要么是控制指令要么是VLIW指令。控制指令例如可以是零开销的循环初始化或者限制终止。不存在分支、跳转或子程序。将VLIW指令分成分段,其中每个指令段都指定了将由对应的功能单元执行的操作。还能在矢量部分和标量部分(如果有的话)的部分中进一步细分所述分段。分段还包括关于把哪个网络部分用来接收数据(矢量部分的一个或多个矢量,和标量部分的一个或多个标量)的两个部分信息。
标量/矢量处理器的状态CVP的状态是其功能单元的组合状态。在优选的实施例中,它包括·矢量存储器(部分VMU);·程序存储器(部分IDU);·矢量寄存器(所有功能单元);·标量寄存器(大部分功能单元);·控制寄存器,包括程序计数器和地址偏移寄存器。
除了程序员可见的寄存器之外,CVP实现方案典型地包含用于流水线和高速缓存的附加寄存器(矢量寄存器、标量寄存器和控制寄存器)。这些都不是CVP指令设置的体系结构的一部分。
一些(矢量、标量和控制)寄存器就是所谓的配置寄存器。可以从矢量存储器那里加载配置寄存器的内容;不存在其它方式来改变它的值。配置寄存器支持功能单元的配置,并且典型地定义了功能参数。通过在配置寄存器中存储这些″不完全恒定的″功能参数,显著地减小了指令宽度和存储器通信量。
在下表中展示了CVP状态分量的概述。

可以从矢量存储器中加载所有程序员可见的寄存器。除配置寄存器之外的所有寄存器都能被保存到矢量存储器中。通过在限制的末尾保存CVP寄存器,并且通过在稍后恢复它们,CVP就能够仿佛同时没有执行别的限制那样继续特定的任务。这些保存和恢复操作都是任选的,可以是局部的,但是必须显式地对它们进行编程。
指令级执行限制的程序存储在IDU内的程序存储器中。IDU控制程序计数器,读取当前指令并向对应的6个功能单元分配6个指令分段。典型地,每个时钟周期能够发出一条指令。对于这条规律的唯一例外就是当在一个周期内无法实现多个矢量存储器访问时由VMU的停止周期所引起的。当在单个周期内出现多个高速缓存未中时,可能会发生存储器拥塞和相关联的停止周期。
由于没有数据相关控制,因此从IDU到其它功能单元的通信是单向的。这显著地简化了CVP指令的流水线执行。这种流水线对于程序员而言尽可能是隐蔽的。例如,某一条指令的源寄存器可以是先前指令的目标寄存器。只有可见的流水线影响才与″昂贵″资源相关联,比如矢量路径中的乘法。许多操作都具有多个时钟周期的等待时间。此外,那些操作中没有几个还具有多个时钟周期的启动时间间隔。(当操作具有n个周期的启动时间间隔时,必要按n-1个周期及时地将排序的两个操作分离开)。
优选的功能单元的详细说明可以将CVP的每个功能单元都分成控制部分、标量部分和矢量部分。将根据莫尔机模型来对这些部分进行建模,包括五种元素输入、输出、状态、下一个状态函数和输出函数。
由可用存储器和/或寄存器来判断莫尔机的状态。对于每个功能单元而言,假定这样的一个表,该表定义了所有许可的转换(transition),包括相应的防护(guard)。防护是对于发生转换而言需要为真的条件。所述转换定义了莫尔机的下一个状态函数和输出函数。为了能够从在转换表中的实际数据类型进行提取,使用下列约定·P表示处理元件的数目。取决于数据大小,P赋值为PS(WORD数据元素)、PD(DWORD数据元素)或PQ(QWORD数据元素);·除非指定,否则就使用C风格的语法;·使用方括号来选择矢量内的元素。例如v[p]表示矢量v的元素p;·复数值x的实部与虚部分别用Re(x)和Im(x)来表示;·使用括弧<和>来表示复数对。例如,<re,im>表示复数re+j·im;·使用运算符(″全部″)来表示必须在向量元素范围内执行的运算。操作符并不暗示任何顺序(即,范围内的所有元素都能并行地被处理)。例如po≤p<P{v[p]=0}是指矢量v的所有元素都将被设置为0。注意,使用虚变量来表示范围(在此示例中是p)没有函数意义;·使用运算符∧(″和″)来分离能够并行执行的运算。换言之,与C分离符″;″不同,∧运算符并不暗指将必须顺序执行的运算。
·如果cond为真而exp2为假的话,则区别于C″cond?exp1exp2″的″if-then-else″操作符就赋值为exp1。
指令分配单元图4示出了指令分配单元(IDU 400)的框图。IDU具有下列功能·它包含程序存储器410;·它向其它功能单元分配操作420;·它翻译限制描述符,并且控制由微控制器130发出的内核的执行。
对于后者而言,它维护程序计数器430并且支持零开销循环,包括三种嵌套级。
指令分配单元(IDU)能够发出五种指令类型中的其中一种1.正常的VLIW指令(NORMAL);2.零开销循环初始化指令(LOOP);3.限制结束指令(EOS);4.子程序调用指令(CALL);5.子程序返回指令(RETURN)。
instruction=(NORMAL,commands)|(IDU_cmd,paddr,count)commands =(VMU_cmd,CGU_cmd,AMU_cmd,SFU_cmd,SLU_cmd,SRU_cmd)IDU_cmd=LOOP|EOS|CALL|RETURNpaddr={0,...,65535}count={1,...,65536}所述输入/输出为

IDU矢量部分包含CVP程序存储器410

在每个周期(除非CVP被VMU停止),由程序计数器(PC 430)指向的程序存储器位置那里取出CVP指令。这条指令可以是五种类型的其中一种1.正常的VLIW指令将在指令的命令字段中编码的命令分配给其它功能单元;2.IDU循环初始化指令(LOOP)根据指令的PADDR和COUNT字段来设置循环控制寄存器。循环体(由跟随LOOP指令的指令组成,直到由PADDR字段指定的指令并且包含该指令)应该包含至少一条指令。注意,自动地把1条指令的循环体视为″特例″,并且类似于R.E.A.L.DSP上的重复指令来处理它。允许嵌套循环具有相同的结束地址。在实际实现的程序存储器的范围外的结束地址的动作是不定的;附加的地址位专供程序存储器将来扩展之用。自动地把循环起始地址设置成跟随LOOP指令的第一条指令的地址。给所有其它功能单元分配无操作命令;3.IDU限制指令结束(EOS)如果在当前的限制描述符中指明的话,将生成一个或多个信号以表示限制的完成。然后,赋值下一个限制指针。如果它是NILL的话,那么CVP将输入空闲模式,否则将加载下一个限制描述符,并且在初始化程序计数器(PC)之后,开始执行相应的限制。
4.IDU子程序调用指令(CALL),它支持最小形式的程序调用。子程序调用机制支持三级嵌套,并且只保存返回地址。保存可能不会被销毁的寄存器内容是程序员的职责,该程序员能够选择使用哪种调用约定(保存调用程序或保存被调用程序)。PADDR字段包含要被调用的子程序的第一条指令的地址,并由此能够将它直接加载到程序计数器中。保存到返回地址堆栈上的返回地址是跟随CALL指令的指令的地址。
5.IDU子程序返回指令(RETURN),它将程序计数器返回到跟随相应的CALL指令的指令(参见上面)。
IDU控制部分包含CVP程序计数器(PC)。它也包含启用零开销循环和子程序调用的能寄存器,所述零开销循环和子程序调用两者都支持三级嵌套

矢量存储器单元图5A示出了矢量存储器单元(VMU500)的框图。VMU包含并控制矢量存储器510,所述矢量存储器向其它的功能单元提供了非常大的数据带宽。实际的矢量存储器510最好是基于单端口的SRAM的。由于PS×W宽的嵌入式SRAM通常是不可用的,因此可以由并行排列的一排或多排宽随机访问存储器(RAM)来构成物理存储器。在优选实施例中,在存储器中,矢量不必在矢量边界上排列成行。照此,由PS字构成的矢量可以具有任意的存储器地址。存储器行具有相同的大小,但是它的起始地址是根据多个PS定义的。(对于行访问来说,忽略地址的最低有效2logPs位)。通过允许任意的矢量排列(典型地在最小的字边界上对齐),能够更好地使用带有较小空位置的存储器。正如下面将要详细描述的那样,可以采取一些措施来允许标量/矢量处理器读/写单独矢量,而可以把矢量存储在物理存储器的两个连续行中。优选地,标量数据是存储在与用来存储矢量数据的存储器相同的存储器中的。在这类系统中,能够将标量与它们对应的矢量混合起来。为了实现成本效率和到存储器的最佳访问时间,存储器优选地只允许完全的矢量行的读和写。照此,逻辑上物理存储器由行构成,每一行都具有矢量的大小。为了支持标量的读和写,利用附加硬件(行高速缓存530以及用于行内的标量选择的支持540)来以标量方式访问矢量宽的物理存储器。假定让Nr标量读端口和Nw标量写端口都可用,在高速缓存530中存在一组至少Nr+Nw矢量宽的寄存器。对于每个标量读端口而言,高速缓存中的相应寄存器连接于(矢量宽的)物理存储器510的读端口。支持硬件540包括用以从寄存器中选择相关的标量数据的解多路复用器。可以通过寄存器中按照用地址的最低有效位指定的标量数目来控制解多路复用器(例如,使用具有32个8位字的256位矢量时,用五个最低有效位来表示标量)。解多路复用器是已知的,且不再作进一步描述。对于每个标量写端口而言,高速缓存530中的相应寄存器连接于Nw输入的矢量宽的多路复用器,以便选择哪个高速缓存行将被写回到物理存储器。当一条VMU指令需要要被写回的多个高速缓存行时,这是顺序进行的,停止所有其它的功能单元直到所有写操作都已完成。访问不同的写端口,但是在相同的指令中,不允许访问物理存储器中的同一行。假定连续标量访问中的空间局部性(例如,基本上连续地在物理存储器510中存储属于一个处理循环的连续标量),对用以加载/存储这些寄存器的物理存储器510的访问频率可能会显著地低于对这些寄存器的标量访问频率。优选地,在矢量存储器周围进行的高速缓存对于程序员而言是隐蔽的。尽管利用高速缓存来模仿具有单端口SRAM的多端口矢量存储器,但是程序员继而仍能采用相干的矢量存储器。由于每个寄存器都能够在物理存储器中包含可能相同的数据的拷贝,因此接着应该自动维护相干性而不是让程序员必须防护相干性。为此,执行对地址冲突的检查,即拥有对于其中相同的行也被存储在其它寄存器的其中一个中的行地址发生的对寄存器的写操作。对于这类检查而言,足以为每个寄存器存储寄存器中所存储的行的行地址(地址的最高有效部分)。如果检测到了潜在的冲突,那么就可以采取调整措施。例如,一旦已经对具有相同行的寄存器发生写操作,就将读寄存器标记为无效。不会再进一步使用寄存器,除非(在首先已经将写寄存器写回到存储器之后)它已经再次从存储器中读取过了。作为选择,可以在已经对写寄存器发生了写操作之后,把写寄存器的内容拷贝到具有相同行的所有读寄存器。第三种可能性就是共享读和写端口当中的寄存器。这后一种方法需要附加的矢量宽的多路复用器,这增加了成本,但是提供了性能优势。在(一部分地)将矢量存储在与写端口有关寄存器中的情况下,还可以为矢量读取采取相同的相干性检查和措施。优选地,对物理存储器进行的行读取或写入是通过对物理存储器510的单次访问而在单个时钟周期内执行的。
由于只能够在行边界上访问物理存储器,因此矢量发送操作需要对准单元。对准单元由两个行高速缓存构成,包括所请求矢量横跨的两行。当访问连续的矢量时,由于在这些行高速缓存的其中一个中仍存在另一个行,因而仅仅须从物理存储器中取出一个新的行。形成所请求矢量的两个高速缓存行的一些部分与由多路复用器构成的网络结合在一起,然后将其存储在矢量宽的流水线寄存器中。在VMU广播总线上从这个流水线寄存器中发送数值。
矢量存储器单元能够在单条VMU指令中支持多达四种的并发″子操作″1.发送矢量,或发送行,或从/到VM位置上接收行;2.从VM位置上发送标量;3.接收标量到VM位置;4.修改地址计算单元的状态/输出。
<pre listing-type="program-listing">VMU_cmd=(vopc,aid_v,ainc_v,sopc,aid_s,ainc_s,size,srcv,aid_r,ainc_r, sopc,aid_a,imm_addr)vopc =NOP|SENDL|SENDV|RCVL_CGU|RCVL_AMU| RCVL_SFU|RCVL_SLU|RCVL_SRUAid_v ={0,...,7}Ainc_v =NOP|INC sopc =NOP|SEND aid_s ={0,...,7}ainc_s =NOP|INC size =WORD|DWORD|QWORD arcv =NONE|VMU|AMU|SLU|SRU aid_r ={0,...,7}ainc_r =NOP|INC aopc =NOP|IMM|LDBASE|LDOFFS|LDINCR|LDBOUND aid_a ={0,...,7} imm_addr ={0.0,...,524288.31}|{-262144.0,...,262143.31}</pre>取决于子操作的数目和地址序列的连续性,VMU指令可以采取可变数量的时钟周期。
所述VMU输入/输出为


另外,存在要被连接于外部总线的两个标量端口(一个发送、一个接收)。存储器访问与CVP指令的同步化是微控制器130的任务。
VMU矢量部分包含物理矢量存储器510

注意,矢量子操作无法访问标量存储器。因此,对于矢量子操作而言忽略最高有效地址位。VMU的矢量部分支持在指令的VOPC字段中编码的七种子操作矢量发送(SENDV)、行发送(SENDL),以及五种行接收子操作(RCVL_CGU、RCVL_AMU、RCVL_SFU、RCVL_SLU和RCVL_SRU)。在相应的行接收子操作中显式地对作为接收源的功能单元进行编码。每个子操作的读地址或写地址都是由相应的地址计算单元指定的。在所有矢量子操作之间共用AINC_V字段。它将被传递到在AID_V字段中编码的ACU上。AINC_V字段指定受影响的地址计算单元是否应该执行后增量操作。

注意,所述操作被铸型成发送(或接收)动作,而不是铸型成包含目的地(或源)的加载(或存储)动作。后者是由其它功能单元中的操作来指定的。行发送功能等效于具有相同地址的矢量发送。典型地利用行发送子操作来配置功能单元或者恢复各种寄存器中的任务状态。通过为行发送引入一种特定模式,能够通过高效的高速缓存使用率来最优化连续矢量发送(″矢量流″)的访问时间。
在指令的SOPC字段中对VMU的标量子操作进行编码。它只支持一个子操作标量发送(SEND)。读地址是由AID_S字段中指定的地址计算单元指定的。指令的AINC_S字段指定这个地址计算单元是否应该执行后增量操作。通过指令的SIZE字段来判断标量子操作的操作数大小(WORD、DWORD或QWORD)。

在指令的SRCV字段中对VMU的标量接收子操作进行编码。如果它的值为NONE,则不执行标量接收。否则,指令的SRCV字段判断将把哪个功能单元用作为标量接收的源。写地址是由AID_R字段中指定的地址计算单元指定的。指令的AINC_R字段指定这个地址计算单元是否应该执行后增量操作。通过源标量的大小来判断标量接收子操作的操作数大小(WORD、双字或QWORD)。

能够把发送和接收子操作组合成从一个VM位置到另一个位置的标量移动操作。每次访问的地址都是由对应的地址计算单元指定的。
VMU控制部分550主要是支持像常规DSP中那些寻址方式这样的寻址方式的一组地址计算单元(ACU)或地址生成单元(AGI)。这类单元在不使用处理器的主数据路径的情况下,每条指令执行一个或多个地址计算。例如,在每个标量读访问之后,能够对标量的地址进行后增量。这允许对数据进行算术运算时并行地进行地址计算,从而提高处理器的性能。取决于所支持的寻址方式组,这类ACU需要访问许多寄存器。例如,相对寻址,即与所谓的基地址相对而言的寻址,需要基址寄存器base·存储在偏移量寄存器中的相对于基地址的偏移量offs·通过存储在增量寄存器incur中的值前/后增加偏移量·相对于界限寄存器bound中存储的地址的求模寻址对于这组寻址方式而言,下列内容能够得到支持。假定偏移量寄存器offs。当每次在地址base+offs上进行存储器访问(读或写)之后,都根据offs=(offs+incr)求模bound来更新寄存器offs。因此,(在每次访问之后)offs频繁变化,而存储在base、incr和bound中的值却很少发生变化。典型地,在程序循环之前先对那三个后面的寄存器初始化。在其余部分中,假定寄存器是ACU的一部分。也将寄存器的初始化称作为″ACU的配置″。优选地,标量/矢量处理器包括多个ACU。在优选的实施例中,标量/矢量处理器包括八个ACU。单独ACU的配置可能会使每个ACU占用几个时钟周期。照这样一来,随着产生越来越多的Amdahl定律的障碍,配置ACU所需的时间可能会变成瓶颈。为了克服这种配置延迟,在优选的实施例中,能够在一种操作中配置与一个ACU有关的至少两个寄存器。这可以通过映射单个矢量上的所有那些ACU寄存器以及通过使用从矢量存储器到ACU存储器的专用加载指令和存储指令加以实现。优选地,能够在优选的一个时钟周期内的单个操作中配置ACU的整个相关寄存器组。正如将在下面更详细描述的那样,如果存储器宽度允许的话,则有利的是能够在一种操作中配置一个以上的ACU的寄存器。
假定矢量存储器包括2L行,标量或矢量地址需要L+2log4PQ位。其中例如PQ=8且L=12,这意味着是17位。为了在地址计算方面尽可能地避免过于长的指令和避免独立的指令,VMU的控制部分正如上面所述那样维护许多地址计算单元。每个地址计算单元(ACU)都是由许多地址寄存器以及相关联的增量操作构成的。在其它ACU当中,这些ACU520是用来支持环形缓冲的。优选地,VMU控制部分包含8个ACU,每个控制部分都被灵活地分配给任何VMU子操作。限制就在于每个ACU都可能仅仅供除ACU子操作外的其中一种VMU子操作使用,即AID_V≠AID_S≠AID_R。
VMU控制部分支持在VMU指令的AOPC字段中编码的一种子操作。它支持一种用以把ACU的输出设置成立即地址值(IMM)的子操作,并且支持用以把该立即地址加载到其中一个ACU寄存器(LDBASE、LDOFFS、LDINCR和LDBOUND)中的四种子操作。在IMM_ADDR字段中对相应的立即地址进行编码。AID_A字段指定哪个ACU是受AOPC子操作影响的;来自VMU指令的AOPC字段和IMM_ADDR字段将被直接传递到特定的ACU,而所有其它ACU的AOPC字段都将被设置成无操作(NOP)。
优选地,每个ACU都包含四个地址寄存器

在该表中还指明了优选的地址范围和类型(有符号/无符号)。在这个配置中,四个ACU寄存器需要4×24=96位。正如早先描述的,优选地,矢量是256位宽的。在这种情况下,最好通过将多个ACU的寄存器映射到一个矢量来更进一步地提高AC配置速度。在该示例中,能够将两组ACU寄存器映射到一个寄存器。这也在图5B中举例说明了。矢量是用数字580来表示的,并且也示出了四倍长字边界。还示出了两组ACU寄存器590和595,每组寄存器都对应于不同的ACU。在该示例中,ACU寄存器都是24位的,并且照此不对应于矢量的其中一个标准的数据大小。为了也能经由矢量存储器来容易地访问单独的ACU寄存器,用于将ACU寄存器加载/存储到存储器中的专用指令确保了单独的ACU寄存器被对准在字边界上(在该示例中,24位寄存器被对准在四倍长字边界上)。本领域的技术人员将能依据ACU寄存器大小和矢量大小来定义最佳映射。例如,使用16位ACU寄存器和256位矢量就可以将四组ACU寄存器映射到一个矢量上。在指令中需要指明将要存储/加载的ACU寄存器组的数目。独立的或组合的指令都可以用来加载单个ACU寄存器组或一群ACU寄存器组。
地址计算单元(ACU)能够在单个ACU操作期间支持两种″子操作″1.后增量子操作;2.立即地址操作子操作。
ACU_cmd = (ainc,aopc,imm_addr)ainc = NOP|INCaopc = NOP|IMM|LDBASE|LDOFFS|LDINCR|LDBOUNDimm_addr = {0.0,...,524288.31}|{-262144.0,...,262143.31}在指令的AINC字段中对后增量子操作进行编码。它只支持一种子操作后增量(INC)。利用这种子操作来避免过于显式的地址计算指令。

在指令的AOPC字段中对立即地址操作子操作进行编码。它支持一种用以输出立即地址(IMM)的子操作,并且支持四种用以把立即地址加载到其中一个ACU寄存器中的子操作(LDBASE、LDOFFS、LDINCR和LDBOUND)。在指令的IMM_ADDR字段中对立即地址进行编码。

所述ACU输入/输出为


代码生成单元图6示出了CGU(代码生成单元600)的框图。CGU的任务是生成已格式化成PD或PS长度的矢量的复数符号的代码序列。在优选的实施例中,这个代码序列适合于(W-)CDMA的需要,并且能够将其构造成两个序列(扰频代码和通道化代码)的乘积。对于这类应用来说,CGU是由扰频代码生成器(SCG 610)和通道化代码生成器(CCG 620)构成的。扰频代码是通过可配置生成器生成的。通道化代码生成器也可以用查找表来代替。该表能够驻留在矢量存储器中。CGU可以只具备有限的功能,就像只支持UMTS-FDD下行链路代码生成一样。代码生成单元(CGU)支持两种子操作1.扰频代码生成器子操作;2.通道化代码生成器子操作。
<pre listing-type="program-listing">CGU_cmd = (scram_opc,scram_reg,chan_opc,chan_reg,chan_config) scram_opc = OFF|NOP|LOAD_CONFIG|CONFIG|LOAD_STATE|SAVE_STATE|LOAD_REGS_X|LOAD_REGS_Y|SAVE_REGS_X|SAVE_REGS_Y|STEP_1|STEP_P_D|STEP_1_X|STEP_P_D_X scram_reg = {cgus0,cgus1} chan_opc = OFF|NOP|CONFIG|LOAD_STATE|SAVE_STATE|STEP_1|STEP_P_D chan_reg = {cguc0,cguc1}chan_config = 0,...,2log(SFMAX)-1</pre>所述输入/输出为


CGU矢量部分包含下列寄存器(文件)

CGU指令的SCRAM_OPC字段指定下列SCG矢量子操作的其中之·关闭扰频代码生成器(CGUS_OFF);·无操作(CGUS_NOP);·从vmu中加载配置矢量(CGUS_LOAD_CONFIG);·利用配置矢量来配置LFSR X和LFSR Y(CGUS_CONFIG);·从SCRAP_REG字段中指定的内部寄存器中加载LFSR X和LFSR Y状态(CGUS_LOAD_STATE);·将LFSR X和LFSR Y状态保存到SCRAM_REG字段中指定的内部寄存器当中(CGUS_SAVE_STATE);·从VMU中加载整个LFSR X内部寄存器文件(CGUS_LOAD_REGS_X);·从VMU中加载整个LFSR Y内部寄存器文件(CGUS_LOAD_REGS_Y);·在VMU中保存整个LFSR X内部寄存器文件(CGUS_SAVE_REGS_X);·在VMU中保存整个LFSR Y内部寄存器文件(CGUS_SAVE_REGS_Y);·按单个步骤推进LFSR X和LFSR Y(CGUS_STEP_1);·按PD步骤推进LFSR X和LFSR Y(CGUS_STEP_P_D);·按单个步骤推进LFSR X(CGUS_STEP_1_X);·按PD步骤推进LFSR X(CGUS_STEP_P_D_X)。
CGU指令的CHAN_OPC字段指定下列CCG矢量子操作的其中之一·关闭通道化代码生成器(CGUC_OFF);·无操作(CGUC_NOP);·利用CHAN_CONFIG字段中指定的代码数量来配置通道化代码生成器(CGUC_CONFIG);·从CHAN_REG字段中指定的内部寄存器中加载OVSF状态(CGUC_LOAD_STATE);·将OVSF状态保存到CHAN_REG字段中指定的内部寄存器当中(CGUC_SAVE_STATE);·按单个步骤推进OVSF计数器(CGUC_STEP_1);·按PD步骤推进OVSF计数器(CGUC_STEP_P_D)。
ALU-MAC单元图7示出了ALU-MAC单元(AMU)的框图。在AMU停泊(harbor)实际信号操作、而其它单元在那里只用于以矢量格式化方式传送操作数和结果的意义上讲,AMU是机器的心脏。它也包含比较大的寄存器堆(优选地,16个矢量寄存器)。累加器矢量需要两个(正常的)矢量寄存器,外加一个所谓的扩展矢量,它包含扩展精度位。由此,AMU寄存器文件优选地与扩展寄存器文件一起也支持8个累加器矢量寄存器。在优选的实施例中,AMU矢量部分包含五个独立的内部处理单元·ALU单元710,它处理运算类型和逻辑类型的矢量间操作加法(ADD)、减法(SUB)、逐位与(AND)、逐位或(OR)、逐位异或(XOR)和汉明间距计算(HAMM);·MAC单元720,它处理乘法和乘法累加类型的矢量间操作量级(MAGN)、乘法(MUL)和乘法累加(MAC);·(c)I-ADD单元730,它处理(使相关)内加法的矢量操作内加法(IADD)、带有双精度结果的内加法(IADDD)和继之以内加法的矢量间相关(CTA);·I-MAX/MIN单元740,它处理矢量内的最大值和最小值运算内最大值(IMAX)和内最小值(IMIN);和·定标单元,它用于利用整数运算来提供灵活的定点支持。
将会认识到的是,取决于应用,也许不需要一些子单元。同样,可以添加其它的子单元。例如,当添加用于外收发器算法的支持时,AMU优选地包含两个附加处理单元·acs单元,它处理维特比添加-比较-选择操作(acs);·abl单元,它处理turbo译码需要的αβ∧运算(abl)。
在AMU指令中不是显式地对将被使用的处理单元进行编码的,而是从vopc字段中隐式地导出它。这意味着启动时间间隔并未妨碍性能,只要向不同的处理设备发出后续的矢量指令即可。
ALU-MAC单元(AMU)在单个AMU操作期间支持多达4种的″子操作″1.执行ALU(算术和逻辑)类型的矢量操作、(MAC)(乘法累加)、(C)I-ADD((相关)内加法)或I-MAX/MIN(内最大值或内最小值);2.将矢量值接收到AMU矢量寄存器文件;3.将第二个矢量值接收到AMU矢量寄存器文件;4.将标量值接收到AMU广播寄存器(BCST);<pre listing-type="program-listing">AMU_cmd =(vopc,type,src1,src2,src34x,rcv1,dst1,rcv2,dst2,srcv) vopc =NOP|SND|ADD|SUB|ABS|NEG|MAX|MIN|CONJ| MAGN|IADD|DIADD|IMAX|IMIN|CIA|AND|OR| XOR|MUL|MAC|SGNX type =cvp_int|cvp_dint|cvp_cint|cvp_qint|cvp_cdint src1 ={amu0,...,amu15} src2 ={amu0,...,amu15}|{bcst} src34x =src3∈{amu0,...,amu15}|acc∈{acc0,...,acc7}| lseg∈{1,2,3,...,2logPS}rcv1 =NONE|VMU|CGU|AMU|SFU|SLU|SRUdst1 ={amu0,...,amu15}rcv2 =NONE|VMU|CGU|AMU|SFU|SLU|SRUdst2 ={amu0,...,amu15};dst2≠dst1srcv =NONE|VMU|SLU|SRU</pre>所述输入/输出为


AMU矢量部分包含下列寄存器文件

如在图8中举例说明的那样,每个累加器寄存器都需要两个AMU寄存器810、820,加上一个扩展寄存器830。例如,寄存器ACC3占有寄存器AMU6、AMU7和EXT3。注意,扩展寄存器文件仅仅用于存储累加器值的扩展精度部分。因此,不能被其自身访问,这样一来它对于程序员而言就是不可见的。
在AMU指令的AOPC字段中对矢量子操作进行编码。它支持四种类型的子操作1.算术和逻辑类型的矢量间操作发送寄存器值(SND)、加法(ADD)、减法(SUB)、绝对值(ABS)、否定(NEG)、最大值(MAX)、最小值(MIN)、逐位与(AND)、逐位或(OR)、逐位异或(XOR)和符号扩展(SGNX);2.乘法和乘法累加类型的矢量间操作量级(MAGN)、乘法(MUL)、和乘法累加(MAC);
3.(相关)内加法的矢量操作内加法(IADD)、带有双精度结果的内加法(DIADD)和继之以内加法的矢量间相关(CIA);4.内最大值(IMAx)操作和内最小值(IMIN)操作;将要使用的数据类型是在AMU指令的TYE字段中编码的。SRC1和SRC2字段表示应该把哪些寄存器分别用作为矢量子操作的源1和源2.注意,作为选择SRC2数据可以代替来自于规则的寄存器文件RFAMU,而来身于标量广播寄存器BCST。在这种情况下,把相同的标量值发送给每个处理元件。同样,SRC34X字段表示应该把哪个寄存器用作为需要3个矢量源的子操作的源3(用SRC3表示)。在乘法(-累加)子操作的情况下,SRC34X字段指明应该使用哪个累加器寄存器(用ACC表示)(以便既作为源又作为目的地)。在矢量内操作的情况下(IADD、DIADD、IMAX、IMIN和CIA),SRC34X字段包含段长为2log(SEG)的以2为底的对数(用LSEG表示)。最小段长为2(SRC34X=1)。上限取决于数据大小对于WORD长度操作数而言是PS(LSEG=5)、对于DWORD长度操作数而言是PD(LSEG=4),而对于QWORD长度操作数而言是PQ(LSEG=3)。

矢量内操作的结果是一个稀疏矢量,其中只计算每个分段的0位。将其它目标位置寄存器设置为0。在与右移位单元同时使用的情况下,洗牌单元能用来重排这类稀疏矢量的内容。
大部分的矢量操作都支持所有数据类型,下列是一些特例·CONJ,MAGN只支持复数数据类型;·ABS,MAX,MIN,IMAX,IMIN不支持复数数据类型;·DIADD &amp; SGNX不支持四倍长字大小的数据类型;·CLA只支持复数单精度整数类型;·AND,OR,XOR只支持非复数整型;·NOP &amp; SND忽略类型。
除矢量子操作之外,AMU矢量部分还可以从任何功能单元那里将两个矢量值接收到局部寄存器文件(RFAMU)中。接收子操作是在RCV1和RCV2字段中编码的,并且相应的RFAMU目的寄存器分别是在DST1和DST2字段中编码。


所述AMU标量部分包含下列寄存器

AMU标量部分还可以从VMU、SLU或SRU中将标量值接收到广播寄存器(BCST)中。相应的接收子操作是在SRCV字段中编码的。

可以把跨整个矢量复制的BCST寄存器的内容用作为用于矢量操作的替代的SRC2(代替正常的AMU寄存器)

AMU控制部分包含一个寄存器

洗牌单元图9示出了洗牌单元900的框图。矢量洗牌功能的基本思想是为每个(矢量)目标元件910指定一个(矢量)源元件920。源元件是在专用的配置寄存器930中指定的。能够以单字粒度来指定洗牌(注意,这也涵盖所有潜在的双字和四倍长字洗牌模式)。能够通过CMOS交叉结构(cross bar)940来实现完整洗牌。一般说来,它的成本是与目标数目和源数目的乘积成比例的。在很多情况下不需要所实现的4PQ字的洗牌带宽。固此,在优选的实施例中,只支持半洗牌。
洗牌单元(SFU)支持多达两个并发的子操作1.配置或半洗牌矢量操作;2.矢量接收。
SFU_cmd = (vopc,cfg,rcv)vopc = NOP|CONF|ODD|EVEN|DUPL0|DUPL1cfg = {sfuc0,...,sfuc1}rcv = NONE|VMU|CGU|AMU|SFU|SLU|SRU所述输入/输出为


SFU矢量部分包含下列寄存器文件

注意还存在隐式的洗牌目标寄存器,但是这并非可由程序员直接访问的。它自动被写入以作为各种类型的洗牌操作的结果。
SFU支持在SFU指令的VOPC字段中指定的两类矢量子操作1.在RFCFG(CONF)中接收洗牌模式;2.根据来自RFCFG的模式来对寄存器SFU中的矢量进行洗牌,并在(隐式的)洗牌目标寄存器的受影响部分中存储结果。这样就可以对奇数目标元素(ODD)、偶数目标元素(EVEN)进行洗牌,或者把源元素复制到奇数目标元素和偶数目标元素两者(DUPL0和DUPL1)。
由于中间结果是存储在(隐式的)洗牌目标寄存器中的,因此能够通过顺序地执行ODD和EVEN子操作来执行充分洗牌。在配置子操作(VOPC-CONF)的情况下,指令的CFG字段指定了应该加载哪个配置寄存器。否则,它就指定将把哪个配置寄存器用作为洗牌模式。

除矢量操作之外,SFU还支持在指令的RCV字段中编码的矢量接收操作(接收到局部SFU寄存器中)。注意,这样就可以通过把矢量子操作CONF与矢量接收子操作组合在一起,来同时(从VMU中)接收洗牌模式和(从任何其它的功能单元中)接收新的洗牌源。

注意在与移位操作结合的情况下,洗牌操作能用来有效地量排由矢量内ALU操作产生的稀疏矢量元素。
左移位单元图10示出了左移位单元(SLU1000)的框图。SLU维护两个矢量寄存器,可以按标量步骤(即,按三种标量大小(WORD、DWORD或QWORD)的其中一种)来把这两个矢量寄存器左移。要么由0来增补右手侧,要么由局部标量接收寄存器中的标量值来增补右手侧。矢量可以来自于任何功能单元或被发送给任何功能单元。左移位单元(SLU)支持多达三种的并发子操作1.矢量左移位操作或发送操作;2.矢量接收操作;3.标量接收操作。
SLU_cmd = (vopc,src,size,rcv,dst,srcv)vopc = NOP|SND|SHIFT0|SHIFTSsrc = {slu0,slu1}size = WORD|DWORD|QWORDrcv = NONE|VMU|CGU|AMU|SFU|SLU|SRUdst = {slu0,slu1}srcv = NONE|VMU|AMU|SLU|SRU所述输入/输出为


左移位单元(SLU)的矢量部分包含2个通用矢量寄存器1010

在指令的VOPC字段中编码的SLU所支持的矢量操作·空操作,即不移动当前矢量(NOP),·发送、广播所选的源寄存器的内容(SND),·左移、添加0(SHIFT0),·左移、添加来自标量接收寄存器(SHIFTS)的标量,指令的SRC字段判断移位哪个SLU寄存器。在SHIFT0操作的情况下,指令的SIZE字段判断标量步骤的大小。在SHIFTS操作的情况下,通过标量接收寄存器SSLU中的标量来判断的标量步长(由此,忽略SIZE字段)。

除矢量操作之外,SLU还支持在指令的RCV字段中编码的矢量接收操作(接收到其中一个局部SLU寄存器1010中)。DST字段指定接收到的矢量将被写入到哪个局部寄存器。

左移位单元(SLU)的标量部分包含标量接收寄存器1020

通过S_SND端口将移出SLU的标量发送给所有功能单元。另外,SLU还支持在指令的SRCV字段中编码的标量接收操作(接收到标量接收寄存器SSLU 1020中)。在下一个SHIFTS矢量子操作期间,可以将SSLU寄存器中的标量值从右侧移入到矢量中。

右移位单元图11示出了右移位单元(SRU 1100)的框图。除了用于在AMU上合并来自矢量内操作的结果的特定接收模式(IAMU)之外,SRU类似于SLU。右移位单元(SRU)支持多达三种的并发子操作·矢量右移位操作或发送操作;·矢量接收操作;·标量接收操作;SRU_cmd = (vopc,src,size,rcv,dst,srcv)vopc= NOP|SND|SHIFT0|SHIFTSsrc = {sru0,sru1}size= WORD|DWORD|QWORDrcv = NONE|VMU|CGU|AMU|IAMU|SFU|SLU|SRUdst = {sru0,sru1}srcv= NONE|VMU|AMU|SLU|SRU所述输入/输出为


右移位单元(SRU)的矢量部分包含2个通用矢量寄存器1110

在指令的VOPC字段中编码的SRU所支持的矢量操作是·空操作,即不移动当前矢量(NOP),·发送、广播所选择的源寄存器的内容(SND),·右移位、添加0(SHIFT0),·右移位、添加来自标量接收寄存器(SHIFTS)的标量。
指令的SRC字段判断将哪个SRU寄存器移位。在SHIFT0操作的情况下,指令的SIZE字段判断标量步骤的尺寸。在SHIFTS操作的情况下,通过标量接收寄存器SSRU中的标量来判断标量步长(由此,忽略SIZE字段)。

除矢量操作之外,SRU还支持在指令的RCV字段中编码的矢量接收操作(接收到其中一个局部SRU寄存器中)。DST字段指定接收到的矢量将被写入到哪个局部寄存器。

左移位单元(SRU)的标量部分包含标量接收寄存器1120

通过S_SND端口将移出SRU的标量发送给所有功能单元。另外,SRU还支持在指令的SRCV字段中编码的标量接收操作(接收到标量接收寄存器SSRU1120中)。在下一个SHIFTS矢量子操作期间,可以将SSRU寄存器中的标量值从左侧移入到矢量中。

应当注意的是,上述实施例举例说明了本发明而不是限制本发明,而本领域的技术人员将能在不背离所附权利要求的范围的情况下设计许多可选的实施例。在权利要求中,不应该把圆括号之间的任何参考标记视作限制权利要求。除那些列在权利要求上的元件或步骤外,单词″包括″和″包含″不排除其它元件或步骤的存在。
权利要求
1.一种标量/矢量处理器,包括多个功能单元,至少其中一个功能单元包括用于对至少一个矢量进行操作的矢量部分和用于对至少一个标量进行操作的标量部分,通过标量部分协同操作的功能单元的矢量部分和标量部分被设置成提供和/或耗费功能单元的矢量部分所需要和/或提供的至少一个标量。
2.如权利要求1所述的标量/矢量处理器,其中多个功能单元包括各自的矢量部分;在第一流水线中安排所述矢量部分。
3.如权利要求1所述的标量/矢量处理器,其中多个功能单元包括各自的标量部分;在第二流水线中安排所述标量部分。
4.如权利要求2和3所述的标量/矢量处理器,其中所述第一流水线和第二流水线是可独立配置的。
5.如权利要求2、3或4所述的标量/矢量处理器,其中至少其中一条流水线是可以基于处理器逐条指令来配置的。
6.如权利要求1所述的标量/矢量处理器,其中所述标量/矢量处理器是由包含用于每个功能单元的独立指令段的VLIW指令来控制的。
7.如权利要求6所述的标量/矢量处理器,其中既带有矢量部分又带有标量部分的功能单元的指令段包括用于功能单元的矢量部分和标量部分的各自指令。
8.如权利要求5和6所述的标量/矢量处理器,其中所述VLIW指令包括第一流水线和/或第二流水线的配置。
9.如权利要求7和8所述的标量/矢量处理器,其中第一流水线为附于第一流水线上的每个矢量部分包括各自的相关联的流水线路径以用于传送矢量,和/或第二流水线对附于第二流水线上的每个标量部分包括各自的相关联的流水线路径以用于传送标量。
10.如权利要求8和9所述的标量/矢量处理器,其中功能单元的矢量部分的指令指定与其中一个不同的功能单元相关联的流水线路径以供传送矢量,和/或功能单元的标量部分的指令指定与其中一个不同的功能单元相关联的流水线路径以供传送标量。
11.如权利要求1所述的标量/矢量处理器,其中至少其中一个功能单元是移位单元;所述移位单元的矢量部分可操作用于在至少一个标量上对矢量进行移位;所述移位单元的标量部分可操作用于向矢量部分提供和/或从矢量部分接收正在移入或移出矢量的至少一个标量。
12.一种处理系统,包括标量处理器和如权利要求1所述的标量/矢量处理器,其中所述标量/矢量处理器被设置成标量处理器的协同处理器,并且所述标量处理器被设置成控制该标量/矢量处理器;设置标量/矢量处理器的标量部分以用于执行循环内的标量处理,设置标量处理器以用于执行不规则的循环外的标量处理。
全文摘要
标量/矢量处理器包括多个功能单元(252、260、262、264、266、268、270)。至少其中一个功能单元包括用于对至少一个矢量进行操作的矢量部分(210),还包括用于对至少一个标量进行操作的标量部分(220)。将通过标量部分协同操作的功能单元的矢量部分和标量部分设置成提供和/或耗费功能单元的矢量部分所需要和/或所提供的至少一个标量。
文档编号G06F9/38GK1656495SQ03811744
公开日2005年8月17日 申请日期2003年5月22日 优先权日2002年5月24日
发明者C·H·范伯克, P·P·E·梅维斯森, N·恩金 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1