处理器的地址生成单元的制作方法

文档序号:6409699阅读:349来源:国知局
专利名称:处理器的地址生成单元的制作方法
技术领域
本发明涉及一种处理器的地址生成单元。
背景技术
在信号处理中,大比例的算法都使用了通常带高迭代计数且由相对少数的指令组成和/或对相对少数的数据(比如,一行像素块)进行操作的循环。为了提高处理速度,DSP已经配备了所谓的地址生成单元(AGU)。这些单元根据当前地址来生成下一个地址。一些单元支持几种寻址方式。所述单元利用多个寄存器来计算地址,取决于寻址方式。地址生成单元众所周知是用来生成数据地址(有时也称为地址计算单元(ACU))以及生成指令地址(有时也称为循环控制单元)。
WO01/04765描述了一种用于处理信号的VLIW处理器。所述处理器包括四个相同的处理元件,其中每个处理元件都具有多个功能单元。每个处理元件都包括作为功能单元的地址生成单元(AGU)。AGU支持七种寻址方式直接寻址、基址加偏址寻址、间接/变址寻址、基址加变址寻址、环形变址寻址和处理元件相对寻址。对于每个寻址方式而言,都利用寄存器来计算地址。对于寻址方式、计算下一个地址的算法、算法所使用的寄存器和示例性硬件实现方面的细节来讲,读者都请参照WO01/04765。VLIW指令包括每个处理元件的指令槽(slot)。将寻址方式表示为指令的一部分。寄存器属于处理器上下文(context)的一部分,并且能够像作为该上下文的一部分的其它寄存器被加载、保存和恢复。与用于存储VLIW的宽存储器相结合地使用VLIW处理器。每个存储器行(line)存储一个VLIW指令。对于每条所取出的并且被直接馈送到译码逻辑以并行地控制多重执行单元的执行的指令,要访问存储器。
已知的VLIW处理器的处理元件是单指令多数据流(SIMD)处理器,亦称矢量处理器。对于信号处理而言,VLIW矢量处理器潜在地具有很高的性能。往往要求这种性能的信号处理任务,像用于3G移动通信标准的软件调制解调器,通常是由能够被矢量化的多个子任务组成的。矢量处理会导致这类子任务相对快速地加以完成。在这个上下文中完成也涵盖已经处理了一个数据块以及在不久的时刻将为新数据块重新开始处理(通常是在固定周期数内)的情形。因此,子任务之间的切换也相对频繁地发生。上下文切换要求用于当前停止的任务的一个或多个ACU的当前寄存器保存起来,并且把用于新激活的或重新激活的任务的所保存的寄存器都加载到所涉及的ACU的相关寄存器中。例如,对于每个ACU来说,可能会涉及到四个寄存器。对于一个ACU而言,上下文切换由此可能会包括保存/恢复总共8个寄存器。

发明内容
本发明的一个目的是,提供一种更好地适用于高性能任务(特别是用于移动通信系统的信号处理)的处理器体系结构。另一个目的是,为矢量处理器提供这类体系结构。
为了满足上述目的,所述处理包括一个存储器端口,用于在地址的控制之下访问物理存储器;至少一个处理单元,用于执行在存储器中存储的指令和/或对存储在存储器中的数据进行操作;一个地址生成单元(在下面称为″AGU″),用于生成一个用于对访问存储器进行控制的地址;所述AGU与至少第一组多个-N个寄存器相关联,其中所述多个寄存器组使AGU能在地址生成机构的控制之下生成所述地址;和存储器单元,可操作来保存/加载由一个操作触发的N寄存器中的k个,其中2<=k<=N,其中所述存储器单元包括用于把k个寄存器连接到要经由存储器端口写入存储器中的一个存储器字的连接器,还包括用于把经由存储器端口从存储器读取的字分到k个寄存器中的分割器。
发明人已经意识到随着处理器性能的增加,在配置AGU的寄存器上花费的时间日渐变成了瓶颈。在常规的处理器结构中,在一个存储器周期内只能保存或恢复一个寄存器,这导致在等待将利用正确数据来初始化(配置)的AGU的过程中浪费了很多时间。为了克服这个问题,要能够保存至少个两个寄存器,这是由一个用于保存或恢复一些或所有AGU寄存器的操作-比如上下文切换或显式指令来加以触发的。为此,处理器的存储器单元包括一个连接器(concatenator)和分割器(splitter),用于将多个AGU寄存器映射到一个存储器字上。根据本发明的AGU和存储器单元原则上能够用在任何处理器-比如像DSP中。优选地,AGU和存储器单元都用在矢量处理器中。迄今为止,矢量处理器没有被广泛地用于信号处理。这就是说,这一部分的原因是由如下事实所引起的,因为称之为″Amdahl定律″的暗示,常规矢量处理器结构对于不可100%矢量化的应用而言是低效的。这条定律说明了在具有P个处理元件的矢量处理器上通过矢量化所获得的总加速作为能够被矢量化(f0)的代码分数比例的函数,等于(1-f+f/P)-1。这意味着当50%的代码能被矢量化时,实现了小于2的总加速(而不是理论上的最大加速32)。这是因为仍有50%的代码不能被矢量化,由此不能为这部分代码实现加速。即使90%的代码能被矢量化,加速也仍然小于因数8。为了供消费者电子设备应用中使用,特别是供移动通信中使用,如果能够实现显著的加速,则只能证明使用矢量处理器的额外成本是合理的。根据本发明的AGU和存储器单元有助于通过为处理数据和/或指令循环提供最佳的支持以及有效地处理跳转和上下文切换来突破Amdahl定律。
正如在从属权利要求2中所述,所述存储器单元可操作来在物理存储器的一个读/写周期内执行保存/加载。照此,能够快速地进行AGU配置。优选地,正如在从属权利要求3中所述的,在一个操作中保存/加载所有AGU寄存器。
正如在从属权利要求4中所述的,所述处理器具有几组寄存器,其中每组寄存器都使AGU能生成地址。具备了提高的性能,所述处理器就能够并行地执行更多的任务,并由此能够得益于使用一组以上的寄存器。对于数据或指令循环的有效处理而言,可以每个循环都使用一组寄存器。为了加速配置多个组,能够通过将几组寄存器都连接到一个存储器字,来在一次操作中保存一组以上的寄存器。正如在从属权利要求5中所述的,所述处理器可以具有几个AGU,其中每一个AGU都具有它自己的寄存器组。不同的AGU在功能上可以是相同的(由此具有相同数量的寄存器)。如果期望这样的话,则就可以将不同的AGU分配给不同的地址计算方案,且因此不同的AGU可以具有不同数量的寄存器。优选地,能够利用一个存储器字而在一个操作中保存/加载至少两个AGU中的所有寄存器。作为选择,正如在从属权利要求6中所述的,AGU也可以与一组以上的寄存器相关联,其中每个组寄存器都能实现地址的生成。在这种情况下,能够将AGU选择性地连接于一组以执行新的地址计算。优选地,能够在一个存储器字中保存至少两组寄存器中的所有寄存器。
正如在从属权利要求8中所述的,有利的是,能够选择需要配置的寄存器组。照此,能够最佳地将AGU和/或寄存器组分配给任务,其中响应于涉及该任务的上下文切换,能够容易地选择所涉及的AGU和/或寄存器组,并且实现重新配置。为了简化这一选择,可以以可独立选择的组来分组AGU和/或寄存器组。接着,能够把所述组自由地分配给任务。每次为至少一个组进行重新配置。
正如在从属权利要求9中所限定的,所述存储器字的宽度是处理器能够对其进行操作的最小的字的倍数。将所述寄存器存储在处理器字边界上的存储器中。照此,在不需要附加指令以设置AGU寄存器的情况下能够改变寄存器值。
正如在从属权利要求8中所述,优选地,所述处理器能够并行地对多个一M个数据元素进行操作(例如,所述处理器是SIMD/矢量处理器),并且所述存储器能够宽到在一个存储器字中存储所有的M个数据元素。照此,能够在一个操作中保存/加载AGU的许多寄存器。


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

根据本发明的标量/矢量处理器按两种主要方式来应用指令级并行性矢量处理,其中单条指令对数据的矢量(标量)进行操作。这种方法亦称单指令流、多数据流或SIMD。多功能单元的并行处理,每个单元对矢量进行操作。可以把这个视为VLIW指令级并行性的一种(限制)形式。注意,这两种形式的指令级并行性都是独立的,并且它们的作用都是累积的。
FU间通信功能单元(FU)并行地进行操作。每个FU都能够接收和发送矢量数据。许多FU都还能接收和发送标量数据。

所有功能单元都并行地进行操作。当接收到它们的指令段时,它们就输入数据、处理数据并输出数据,既然包括矢量数据(当可适用时)又包括标量数据。在FU之间,严格地在标量部分之间或在矢量部分之间进行通信(FU间通信)。也就是说,除IDU之外的所有FU的矢量部分都通过流水线而相连。在优选的实施例中,这个流水线是可基于指令而配置的。为此,FU优选地通过互连网络而互连,原则上允许在每个周期期间每个矢量部分都从任何其它的矢量部分那里接收矢量。在其它特征当中,这个特征实现了FU的任意流水线的创建(除IDU之外)。在每个时钟周期期间,有助于矢量路径的六个功能单元能够输出矢量并且并行地将其发送到其它单元。它们还可以从另一个单元接收矢量。该网络几乎完全都是连接的。只省略了无意义的链接。AMU能够同时接收两个矢量。如图2所示,该网络优选地由每个作为信号源(用盘表示)而连接于一个网络路径的FU构成。它连接于所有其它作为信号信宿(用三角表示)的路径。FU的VLIW指令的部分表示它应该从哪条路径耗用矢量。照此,能够基于指令来配置流水线。每条路径都能够例如利用256条并行线来转送全部矢量。同样,FU的至少一些标量部分是通过独立的流水线相连的。优选地,还基于指令来配置这个流水线。在不能把标量发送给至少一个FU的标量部分或者不能从至少一个FU的标量部分那里接收标量的意义上讲,在FU的标量部分之间的互连网络可以是局部的。因此,能够指定更少的流水线次序。可以独立地配置标量和矢量流水线。例如,通过在有关的VLIW部分中指明将由功能单元读取的标量流水线和矢量流水线两者来独立地进行配置。
在不同功能单元的控制部分之间没有指定连通性。这些控制部分从IDU那里接收VLIW指令的分段,更新它们自己的状态,并控制它们各自的标量部分和矢量部分。
FU内通信在FU内,存在这些部分之间的紧密交互(FU内通信)。这种交互是FU的操作的不可分割的部分。示例就是SLU和SRU,其中把产生的和/或耗用的标量提供给FU的相应标量部分或者从FU的相应标量部分中获取所述产生的和/或耗费的标量。
典型地,在单个周期内执行指令。异常是由于在矢量存储器的拥挤而引发的,并且把它们自己表明为停止周期。
数据宽度在一个优选的实施例中,标量/矢量处理器支持如图3所示的多种数据宽度和数据类型。存储器编址的基本单元是字,也称为单字。优选地,数据宽度可以是单字(W)、双字(DW,或2W=16位)、或四倍长字(QW或4W=32位)。字的大小是W=8位。优选地,标量具有三种大小(单)字、双字和四倍长字。一个矢量具有PQ四倍长字的固定大小。优选的是,能够以下列三种格式中的其中一种来构造它PQ大小为四倍长字的元素,PD=2PQ大小为双字的元素,PS=2PD=4PQ大小为(单)字的元素。
矢量元素标号范围为
。因此,双字具有偶数标号,而四倍长字的标号是四的倍数。图3给出了数据大小的概述。该体系结构完全可以PQ为单位加以伸缩,并且它是为任何矢量大小PQ>≥1而定义的。然而,对于大部分的情形而言,最好为PQ选择2的幂。在优选的实施例中,PQ是8,暗指32个字的数据路径宽度和存储器宽度。
指令一个CVP指令要么是控制指令要么是VLIW指令。控制指令例如可以是零开销的循环初始化。不存在分支、跳转或子程序。将一个VLIW指令分成分段,其中每个指令段都指定了将由对应的功能单元执行的操作。还能在一部分矢量部分和标量部分(如果有的话)中进一步细分所述分段。对于这两个部分而言,分段还包括关于把哪个网络部分用来接收数据(用于矢量部分的一个或多个矢量,和用于标量部分的一个或多个标量)的信息。
标量/矢量处理器的状态CVP的状态是其功能单元的组合状态。在一个优选的实施例中,它包括矢量存储器(VMU的一部分);程序存储器(IDU的一部分);矢量寄存器(所有功能单元);标量寄存器(大部分功能单元);控制寄存器包括程序计数器和地址偏移寄存器。
除了程序员可见的寄存器之外,CVP实现方案典型地包含用于流水线和高速缓存的附加寄存器(矢量寄存器、标量寄存器和控制寄存器)。这些都不是CVP指令设置的体系结构的一部分。
一些(矢量、标量和控制)寄存器就是所谓的配置寄存器。只可以从矢量存储器那里加载配置寄存器的内容;不存在其它方式来改变它的值。一个配置寄存器支持功能单元的配置,并且典型地定义了一个功能参数。通过在配置寄存器中存储这些″半恒定的″功能参数,非常显著地减小了指令宽度和存储器通信量。
在下表中展示了CVP状态分量的概述。

可以从矢量存储器中加载所有程序员可见的寄存器。除配置寄存器之外,所有寄存器都能被保存到矢量存储器中。通过在限量的末尾保存CVP寄存器,并且通过在稍后恢复它们,CVP就能够仿佛期间没有执行别的限量那样继续特定的任务。这些保存和恢复操作都是任选的,可以是部分的,但是必须显式地对它们进行编程。
存储器单元和AGU图4示出了存储器单元(VMU 400)的框图。在如下所述的优选实施例中,在矢量处理器中,与物理存储器相结合地使用存储器单元,所述物理存储器具有能存储整个矢量的宽度。将会认识到的是,也可以将相同构思应用于标量处理器,比如常规的DSP。VMU包含并控制矢量存储器410,这给其它的功能单元提供了非常大的数据带宽。物理矢量存储器410最好是基于单端口SRAM的。由于PS×W宽的嵌入式SRAM通常是不可用的,因此可以由以并行排列的一个或多个宽的随机访问存储器(RAM)体来构成该物理存储器。
VMU 400包括至少一个支持自动地址生成的地址计算单元(ACU)420。参照图2的总体结构,假定ACU位于VMU 260的控制部分230当中。将会认识到的是,ACU实际上不必位于VMU中,而是也可以被连接到它上。优选地,ACU支持像常规DSP中的那些寻址方式(地址生成算法)。ACU在不使用处理器的主数据路径的情况下,执行每条指令一个或多个地址计算。例如,在每个标量读访问之后,能够对标量的地址进行后置增量。这允许地址计算与对数据的算术运算并行地进行,从而提高处理器的性能。取决于所支持的寻址方式组,这类ACU需要访问多个寄存器。例如,相对寻址,即与所谓的基本地址相对而言的寻址,需要基址寄存器base存储在偏移量寄存器中的相对于基址的偏移量offs按存储在增量寄存器中的值的偏移量的前置/后置增量incur相对于边界寄存器中存储的地址的求模寻址bound。
对于这组寻址方式而言,下列内容能够得到支持。假定一个偏移量寄存器offs。当在地址base+offs上的每个存储器访问(读或写)之后,都根据offs=(offs+incr)求模bound来更新寄存器offs。因此,(在每次访问之后)offs频繁变化,而存储在base、incr和bound中的值却很少发生地变化。典型地,在一个程序循环之前先对那三个后面的寄存器初始化。也将寄存器组的初始化称作为″ACU的配置″。为了在地址计算方面尽可能地避免独立的指令和避免过于长的指令,VMU的控制部分优选地包括多个地址计算单元。每个地址计算单元(ACU)能够与一组(地址)寄存器相关联,以及与地址计算(″增量″)操作相关联。如果甚至在指令级上也希望是这样的话,那么ACU与寄存器组之间的关联性就可以是固定的(″硬连线的″)或可配置的。
假定矢量存储器包括2L行,标量或矢量地址需要L+2log4PQ位。其中例如PQ=8且L=12,这意味着是17位。ACU的寄存器可以与地址具有相同的尺寸。如果希望是这样的话,那么一些寄存器就可以更小。例如,增量可以只局限在相对小的步骤上,例如8位。优选地,所有寄存器都尺寸相等。在下一个表中示出了一个优选实施例,其中一组ACU寄存器包含四个地址寄存器

在该表中还指明了优选的地址范围和类型(有符号/无符号)。在这个配置中,每个ACU寄存器都是24位的。正如将在下面更详细描述的那样,ACU寄存器能够存储至存储器410中或者从存储器410中加载。为了简化寄存器的修改,当把寄存器存储在存储器中时,选择与用于访问该存储器的基本单元对准的寄存器宽度,即在8位字的边界上对准。因此,代替17位寄存器而使用24位寄存器,对于示例性存储大小来说往往是足够的。将会认识到的是,对于某些地址计算而言,不到三个寄存器也就足以。由此,就可以把一个或多个寄存器组专用于这类计算,从而就节省了寄存器。
在一个优选的实施例中,VMU包括八组ACU寄存器。这实现了用于功能单元的矢量部分和标量部分的不同地址计算。在一个算法中,它还为多个数据流提供了高效的支持,其中每个数据流都具有它自己的指针(以及由此而用于计算和更新指针的地址计算)。通常,单个ACU寄存器组的配置每次设置要花费几个时钟周期。照这样一来,配置ACU寄存器所需的时间可能就会变成瓶颈。为了克服这种配置延迟,能够在单次操作中配置至少两个与一个ACU寄存器组有关的寄存器。这可以通过映射单个存储器字(比如矢量)上的所有那些ACU寄存器并且通过使用从矢量存储器到ACU存储器的专用加载指令和存储指令来实现。优选地,可以在最好是一个时钟周期的单次操作中配置一个ACU寄存器组的整个相关寄存器组。如果存储器宽度允许的话,那么有利的是,可以在一次操作中配置一个以上的ACU寄存器组。在该示例中,一个四个ACU寄存器的组要求4×24=96位。正如早前描述的那样,一个矢量最好是256位宽的。在这种情况下,通过将多组寄存器映射到一个存储器行(矢量),可以更进一步地增加ACU配置速度。在该示例中,可以将两组ACU寄存器映射到一个矢量。这在图5中也作了举例说明。一个矢量是用数字500来表示的,并且也示出了四倍长字边界。还示出了两组ACU寄存器510和520。在该示例中,ACU寄存器都是24位的,并且照此不对应该矢量的其中一个标准数据大小。为了也能经由矢量存储器来容易地访问单独的ACU寄存器,用于将ACU寄存器加载/存储到存储器中的特殊指令确保了单独的ACU寄存器被在字边界上对齐(在该示例中,24位寄存器被在四倍长字边界上对齐)。本领域的技术人员将能依据ACU寄存器大小和矢量大小来定义最佳映射。例如,使用16位ACU寄存器和256位矢量就可以将四组ACU寄存器映射到一个矢量上。在该指令中,需要指明将要存储/加载的ACU寄存器组的数目。独立的或组合的指令都可以用来加载单个ACU寄存器组或一个ACU寄存器组的群(group)。所述这群将要加载/存储的ACU寄存器组可以是固定的。例如,如果这些组是用数字0到7来标识的,那么就可以形成四个固定群,其中群号是该组的两个最高有效位。如果是这样的话,那么就可以(例如)通过允许在加载/存储指令中要指定的一个以上的组来动态地形成期望的群。
图6示出了固定地连接于ACU 620的四个ACU寄存器的组610。经由路径630和632将寄存器的数据提供给ACU。ACU在输出端640处提供计算出的地址,而在输出端642处提供寄存器的更新后的数据。在具有八个独立ACU寄存器的组的优选实施例中,这可能会被复制八次(在图中未示出)。图7示出了可选方案。在该方案中,示出了标号为710到717的八组ACU寄存器。使用了不同数量的ACU。在这个示例中,使用了三个ACU,标记数字分别是720、721和722。ACU可以动态地连接于其中一组寄存器。如果希望这样的话,则可以存在一个完全的互连730以使每个ACU都能连接到任何一组寄存器上。当然,互连730不必是完全的(例如,ACU可能只连接于三组或四组)。互连740确保了更新后的寄存器值能被向回提供给该期望的组。互连704是互连730的镜像。
在其余部分的详细说明中,给出了优选的VMU和ACU。对于这一说明,假定每个ACU都固定地与其中一组ACU寄存器相关联。可以把VMU划分成控制部分、标量部分和矢量部分。将根据莫尔(Moore)机模型来对这些部分建模,包括五种元素输入、输出、状态、下一个状态函数和输出函数。利用可用的存储器和/或寄存器来判断莫尔机的状态。对于每个功能单元而言,假定这样一个表,该表定义了所有准许的转变,包括相应的防护(guard)。一个防护是对于发生转变而言需要为真的条件。所述转变定义了莫尔机的下一个状态函数和输出函数。在该表中,使用方括号来选择矢量内的元素。例如,v[p]表示矢量v的元素p。
矢量存储器单元能够在单条VMU指令中支持多达到四种并发的″子操作″发送矢量,或发送行,或从/到VM位置接收行(矢量子操作);发送来自VM位置的标量(发送标量子操作);接收到VM位置的标量(接收标量子操作);修改地址计算单元(ACU)的状态/输出子操作。
用于那四条并发指令中每一条的参数全部都在下面的VMU命令(VMU_cmd)中给出了,其中矢量子操作由vopc、aid_v和ainc_v规定,发送标量子操作由sopc、aid_s和ainc_s、size规定,第三个接收标量子操作由srcv、aid_r和ainc_r规定,而ACU子操作用aopc、aid_a和imm_addr规定。第四种操作直接控制其中一个ACU,其它三种操作也都可以作为副作用控制ACU,正如下面将更详细描述的那样。
VMU_cmd=(vopc,aid_v,ainc_v,sopc,aid_s,ainc_s,size,srcv,aid_r,ainc_r,aopc,aid_a,imm_addr)vopc=NOP|SENDL|SENDV|RCVL_CGU|RCVL_AMU|RCVL_SFU|RCVL_SLU|RCVL_SRUaid_v={0,…,7}ainc_v=NOP|INCsopc=NOP|SENDaid_s={0,…,7}ainc_s=NOP|INCsize=WORD|DWORD|QWORDsrcv=NONE|VMU|AMU|SLU|SRU
aid_r={0,…,7}ainc_r=NOP|INCaopc=NOP|IMM|LDBASE|LDOFFS|LDINCR|LDBOUNDaid_a={0,…,7}imm_addr={0,0,…,524288.31}|{-262144.0,…,262143.31}VMU指令可以采取数量可变的时钟周期数,取决于子操作的数目和地址序列的连续性。
所述VMU输入/输出为


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

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

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

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

能够把发送和接收子操作组合成从VM位置到另一个位置的标量移动操作。每次访问的地址都是由对应的地址计算单元指定的。
如上所述,用这种方法就能够把每个ACU灵活地分配到矢量的任一VMU子操作,发送和标量接收。照此,能够在每个指令中操作三个ACU。为了避免冲突,一种限制就是每个ACU都只可以用于那些VMU子操作的其中一种,即AID_V≠AID_S≠AID_R。本领域的技术人员将能调整指令和下层硬件以支持三个以上的ACU(如果期望这样的话),或者支持ACU与ACU寄存器组之间的其它配置。例如,如果不固定地将一组寄存器分配给ACU,那么所述指令还可以携带将要使用的该寄存器组的标识。
ACU子操作是由VMU控制部分提供的,并且在VMU指令的AOPC字段中被编码。它支持一种用以把ACU的输出设置成立即地址值(IMM)的子操作,并且支持用以把一个立即地址加载到其中一个ACU寄存器(LDBASE、LDOFFS、LDINCR和LDBOUND)中的四种子操作。立即寻址的目的就在于绕过规则的寻址,并“快速地”直接从指令中获取地址。这对加载单字特别有用。在IMM_ADDR字段中对相应的立即地址进行编码。AIDA字段指定哪个ACU是受AOPC子操作影响的;来自VMU指令的AOPC字段和IMM_ADDR字段将被直接传递到这个特定的ACU,而所有其它ACU的AOPC字段都将被设置成无操作(NOP)。
一个地址计算单元(ACU)能够在单个ACU操作期间支持两种″子操作″后置增量子操作;立即地址操纵子操作。
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输入/输出为


在该优选实施例中,在存储器中,矢量不必在矢量边界上对齐。照此,由PS字构成的矢量可以具有随机的存储器地址。一个存储器行具有相同的大小,但是它的起始地址按照定义是PS的倍数。(对于行访问来说,忽略地址的最低有效2logPS位)。通过允许矢量的随机对齐(典型地在最小的字边界上对齐),就能够更好地以更少的空位置使用存储器。可以采取一些措施来允许标量/矢量处理器读/写单独矢量,而可以把矢量存储在物理存储器的两个连续行中。优选地,标量数据被存储在与用来存储矢量数据的存储器相同的存储器中的。在这类系统中,能够将标量和与它们对应的矢量相互混合起来。为了实现成本效率和到存储器的最佳访问时间,存储器优选地只允许完整的矢量行的读和写。照此,在逻辑上物理存储器由行构成,每一行都具有一个矢量的大小。为了支持标量的读和写,利用附加硬件(行高速缓存430以及用于行内的标量选择的支持440)来以标量方式访问矢量宽的物理存储器。
应当注意的是,上述实施例举例说明了本发明而不是限制本发明,而本领域的技术人员将能在不背离所附权利要求的范围的情况下设计许多可选的实施例。在这些权利要求中,不应该把圆括号之间的任何参考标记视作限制权利要求。除那些列在权利要求上的元件或步骤外,单词″包括(comprising)″和″包含(including)″不排除其它元件或步骤的存在。
权利要求
1.一种处理器,包括一个存储器端口,用于在一个地址的控制之下访问物理存储器;至少一个处理单元,用于执行在存储器中存储的指令和/或对在存储器中存储的数据进行操作;至少一个地址生成单元(在下面称为″AGU″),用于生成一个用于对访问存储器进行控制的地址;所述AGU与至少第一组多个-N个寄存器相关联,其中所述寄存器组使AGU能在地址生成机构的控制之下生成所述地址;和存储器单元,可操作来保存/加载由一个操作触发的N个寄存器中的k个,其中2<=k<=N,其中所述存储器单元包括一个连接器,用于把k个寄存器连接到要经由存储器端口写入存储器中的一个存储器字,还包括一个分割器,用于将经由存储器端口从存储器读取的字分到k个寄存器中。
2.如权利要求1所述的处理器,其中所述存储器单元可操作来在存储器的一个读/写周期内中执行所述保存/加载。
3.如权利要求1所述的处理器,其中k=N。
4.如权利要求1、2或3所述的处理器,其中所述处理器包括至少另外一组多个寄存器,所述另外一组多个寄存器使AGU能在地址生成机构的控制之下生成一个地址;和所述连接器可操作来还将所述至少另外一组寄存器中的至少另外一个寄存器连接到要经由存储器端口写入存储器中的一个存储器字,所述分割器可操作来将经由存储器端口从存储器中读取的一个字分到第一组寄存器中的相应的k个寄存器中和所述至少另外一组寄存器中的至少另外一个寄存器中。
5.如权利要求4所述的处理器,其中所述处理器包括至少两个AGU,每个AGU都用于生成一个用于对访问存储器进行控制的地址;每个AGU都与所述多个寄存器组中的一个相应的多个寄存器组相关联。
6.如权利要求4所述的处理器,其中所述AGU可选择性地连接于至少两组寄存器,其中每组寄存器都使AGU能在地址生成机构的控制之下生成各自的地址。
7.如权利要求3和4所述的处理器,其中所述连接器可操作来将至少两组寄存器中的所有各自相关联的寄存器连接到要经由存储器端口写入存储器中的一个存储器字,所述分割器可操作来将经由存储器端口从存储器中读取的字分到至少两组寄存器中的所有各自相关联的寄存器中。
8.如权利要求4或5所述的处理器,其中所述处理器实现了对单独寄存器组的选择,所述单独寄存器组的各个寄存器需要在一个操作中被保存或存储;所述存储器单元可操作来对所选择的寄存器组执行连接到一个存储器字的操作/从一个存储器字中分开的操作。
9.如权利要求1所述的处理器,其中所述处理器可操作来对一个具有最小尺寸的处理器字的操作数进行操作,并且所述存储器字具有是所述处理器字的倍数的宽度;所述连接器可操作来将寄存器映射到存储器中对应所述处理器字的边界,以使得所述处理器能够直接修改寄存器。
10.如权利要求1所述的处理器,其中所述处理器可操作来并行地处理多个-M个数据元素,并且所述物理存储器具有用于存储所述M个数据元素的宽度。
全文摘要
一种处理器包括用于在地址的控制之下访问物理存储器的存储器端口。一个处理单元执行在存储器中存储的指令和/或对存储器中存储的数据进行操作。地址生成单元(″AGU″)生成一个用于对访问存储器进行控制的地址;AGU与多个-N个寄存器相关联,所述多个寄存器使AGU能在地址生成机构的控制之下生成所述地址。存储器单元可操作来保存/加载由一个操作触发的N寄存器中的k个,其中2<=k<=N。为此,所述存储器单元包括用于把k个寄存器连接到要经由存储器端口写入存储器中的一个存储器字的连接器,还包括用于把经由存储器端口从存储器读取的字分到k个寄存器中。
文档编号G06F9/312GK1666174SQ03811782
公开日2005年9月7日 申请日期2003年5月7日 优先权日2002年5月24日
发明者C·H·范伯克, P·P·E·梅维斯森 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1