较佳实施例的详细描述
本发明是新的改进的数据信号处理方法与电路。在整个说明书中,对信号、指令与数据采取了各种基准。这类信号、指令与数据较佳地用电压、电流表示,电流库包括带电、光学或磁性粒子,或它们的某种组合,其用法是众所周知的。用各种化学与生物化合物来表示这类信号、指令与数据,一般也符合本发明的使用,但是不作优先考虑,因为难以使用、管理和操纵这类项目。
另外,参照了本发明的各个方面、有利性、特征或优点(当不特定参照时,在此统称为方面)。本发明的有些实施例中,可以单独实现这些不同的方面而无须是提出本发明的其它方面。然而,在本发明的其它实施例中,可以将本发明的两个或多个方面一起实现,由此产生的协同和意料之外的优点,比只以本发明两个或多个组合方面中的一个方面实现的实施例更多。
I.DSP操作原理与指令存储
图2是一部分DSP电路的方框图,该电路按本发明一示例性实施例构制。数据存储器102-104经地址发生单元(AGU)105-107分别耦合到数据总线A、B和C,并耦合至数据接口100。数据总线A、B和C经多路复用器122-126分别耦合至寄存库120的输出口P01、P02与P03,并耦合至寄存库120的输入口PI1、PI2与PI3。较佳地,数据总线A、B、C对数据存储器102-104与寄存库120内寄存器之间的数据作读写。
使用三条数据总线与三只数据存储器,可让更多数据在寄存库与数据存储器之间交换而不产生总线争用。例如,使用三条数据总线A、B与C,可同时从三只存储器102-104里作三次取出操作。同样地,由于能任意组合三次取写操作,故能同时作三次写操作。
添加第四条数据总线可作更多次操作,这与本发明的某些实施例相一致。然而,只使用三条数据总线特别有利,因为三第总线有利于DSP通常执行的滤波等许多任务。因此,添加第四条数据总线并不像添加第三条数据总线那样提供同样增加的性能提高,且要求同样的额外电路面积量。因此,添加第四条数据总线的效果比不上添加第三条总线。故在本发明的许多实施例中,较佳地只用三条数据总线。
输出口P04、P05和P06或寄存库120耦合至乘积(MAC)单元128,后者的输出又耦合至寄存库120的输入口PI4。寄存库120的输出口PI4。寄存库120的输出口P007与P08耦合至ALU130,而后者的输出耦合至寄存库120的输入口PI5。
指令存储器152耦合至指令取出单元156与指令接口150。指令译码器158耦合至指令取出单元156,并耦合至即时总线Im1、Im2与Im3以及ImALU。即时总线Im1、Im2与Im3耦合至多路复用器122、124与126。即时总线ImALU耦合至ALU130。除了上述的数据耦合外,译码器158还耦合至由控制接线(为便于给画而未示出)表示的各种子系统。
寄存库120含有8只标为L0-L3和D0-D3的寄存器。寄存器L0-L3是40位宽寄存器,还能经高字寄存器L0h-L3h与低与寄存器L0I-L3I以16位段访问。寄存器D0-D3是32位宽,能经子寄存器R0-R7以16位段访问。一般而言,寄存器与子寄存器均指简单的“寄存器”,寄存器的特定特证由提供的特定寄存器号指明。
通过拥有对其耦合并由多个输入与输出口访问的某些寄存器,可实现本发明的一个方面。在一实施例中,这种多连接性用耦合至每个寄存器的输入和每个输出口的多路复用器提供。其它多连接性方法是显然的,且与应用本发明某些方面相符,如包括使用数据总线与可导址存储器。然而,在有些实施例中使用多路复用器为佳,因为它们能迅速可控地访问各个寄存器与端口。
在本发明使用即时数据总线(这里提出的示例性实施例)的实施例中,实现了本发明的其它方面。例如,可将指令数据中包含的数据读入寄存库120,无须与存储器102-105接口。这样,指令处理系统无须与数据存储器接口就能提供附加数据,进一步减少了总线争用。
图3是一框图,表示寄存库120内一组寄存器与一组输入口PI1-PI5之间的连接。寄存器定为L0h-L3h、L0I-L3I、R0-R7。寄存器L0包括寄存器L0h与L0I。在图3和4中,寄存器L0h-L3h为24位宽,L0h-L3h、L0I-L3I和R0-R7为16位宽,使寄存器L0-L3为40位宽。同样地,输入口PI3-PI5包括24位的输入口PI3h-PI5h和16位的PI3I-PI5I,总共40位。输入口PI1与PI2仅16位,用于写入寄存器L0h-L3h时,只写24位中的最低16位。
如图3所示,有些寄存器从所有输入口接收数据,而另一些寄存器只从有些或部分输入口接收数据。特别是,所有的寄存器L0-L3从多路复用器500-514接收所有输入口PI1-PI5的数据,16位输入口能对寄存器L0-L3内的高和低寄存器进行写。这样,寄存器L0-L3从任何总线A-C(对应于输入口PI0-PI3)和从MAC单元128与ALU130(对应于输入口PI4与PI5)接收输入。寄存器R0-R7经多路复用器516-530从总线A-C接收输入数据。然而,它们都不从MAC单元128(输入口PI4)接收输入数据。另外,寄存器R0-R3经多路复用器516/518/524与526从ALU单元130接收输入数据。PI3h-PI5h和16位的PI3I-PI5I,总共40位。口PI1与PI2仅16位,用于写入寄存器L0h-L3h时,只写24位中的最低16位。
如图3所示,有些寄存器从所有输入口接收数据,而另一些寄存器只从有些或部分输入口接收数据。特别是,所有的寄存器L0-L3从多路复用器500-514接收所有输入口PI1-PI5的数据,16位输入口能对寄存器L0-L3内的高和低寄存器进行写。这样,寄存器L0-L3从任何总线A-C(对应于输入口PI0-PI3)和从MAC单元128与ALU130(对应于输入口PI4-PI5)接收输入。寄存器R0-R7经多路复用器516-530从总线A-C接收输入数据。然而,它们都不从MAC单元128(输入口PI4)接收输入数据。另外,寄存器R0-R3经多路复用器516、518、524与526从ALU单元130接收输入数据。
图3实施例有诸多优点。特别是,它在输入口与寄存器之间提供了足够的连接性,有利于最常见的操作,但总的连接性保持为最小,以减少电路构成制所需的总电路面积。例如,MAC单元128的输出只接至长寄存器L0-L3,这是有利的,因为乘和累加操作的结果通常超出32位,因而将MAC单元128的输出接至D0-D3提供了最小的便利。在另一例中,ALO单元130能对寄存器L0-L3和R0-R3输出,这增强了灵活性,因为数据可从ALO单元130写到各种寄存器,这很有用,因为ALU单元13执行了更多次操作,使它能有效地将数据输出到更多个寄存器。然而,ALU单元130不接至所有寄存器,故避免了不必要和过多的连接。
图3是一框图,表示当按本发明一实施例执行时,将寄存器120的输出口接至寄存器的情况。如图所示,输出至总线A的输出口P01经多路复用器540接至寄存器L0h-L3h、L01-L31与R0-R7,当被作为小子寄存器访问时,它包括所有有效的寄存器。同样地,输出至总线13的输出口P02经多路复用器542接至寄存器L0h-L3H、L01-L31与R0-R7。输出至40位宽总线C的输出口P03由多路复用器530接至寄存器L0-L3与D0-D3,当被作为全寄存器访问时,它包括全部有效的寄存器。
接至MAC单元128的40位输入的输出口P04,经多路复用器532接至寄存器L0-L3。鉴于乘和累加操作的特征,MAC128累加的值很大,因而将输出口P04只接至40位“长”寄存器L0-L3可提供最佳耦合配置,因为附加接至寄存器D0-D3的利用率很小,给出的各种乘法操作的累加一般超过32位。
接至MAC单元128的一个16位输入的输出口P05,经多路复用器534接至寄存器L0h-L3h、R0、R4与R6。接至MAC单元时的第二16位输入口的输出口P06,接至寄存器L0h-L3h、L01-L31与R0-R7。将MAC单元128的一个16位输入接至全部有效寄存器,并将第二个17位输入口接至有效寄存器小组,可实现有用的折衷。特别在寄存器空间普得有限时,至少可将待处理的一段数据放在任一有效寄存器里。然而,限制接至其它输入端的寄存器数量,减少了连接电路的总量,有利于提供其它功能与特点,如在其它寄存器、输入口与输出口之间有更高的连接性。
接至ALU130的输入端的输出口P07,经多路复用器546接至寄存器L0-L3、L0h-L3h与R0-R3。其中Z0h-L03h与R0-R3同一组逻辑零一起输出。即,寄存器L0h=L03h与R0-R3输出至P07的位31-16(位号为0-39),位0-15置逻辑零,位39-32用位31扩展符号。接至ALU130的另一输入端的输出口P08,也经多路复用器548连同一组逻辑零接至寄存器L0-L3和R0-R7.以此方式连接ALU130的输入端,可对全部有效的长寄存器L0-L3作逻辑操作,因而可对大量寄存器作逻辑操作,这对归一化和定标等多类信号处理操作是有用的。另外,可在寄存器R0-R7与L0h-L3h以及R0-R7之间作算术运算,以可使用的寄存器组来衡量,灵活性很大,同时还限制了必需的连接数量,因而限制了要求的电路面积。应理解,有效的算术逻辑辑操作并一限于上述情况。
应用能被多数据总线与多处理单元访问的寄存器有各种好处。例如,寄存器在数据总线与处理单元间提供了接口,减少了每条数据总线通往每个处理单元的布线要求,从而节省了电路面积,降低了芯片成本。
再者,将最少量(一组)寄存器接至多个处理单元,可用多个处理单元对同一数据多次操作,一必定要通过数据总线向存储器读写数据,这样节省了总线周期,减少总线争用。采用指令处理流水线操作法也是有利的,因为第一处理单元在第一指令周期中处理的数据,然后可用第二处理单元在第二处理周期中在同一个寄存器内再作处理。
然而,并非所有数据都要求用多处理单元处理的,所以其它寄存器(另一组)只被一个处理单元或少于处理单元总数(有两个以上处理单元的场合)的处理单元访问。使用这另一组寄存器就减少了连接数,因而减少了电路面积,可在寄存器连接性与电路面积之间(因而在性能与效率之间)实现最佳平衡。
还有,在本发明一实施例中,利用寄存库128里的二相时钟寄存器可进一步增强流水线操作能力。在同一个全时钟(“处理”)周期内,二相时钟寄存器在时钟第一相上读,在第二相上写。这样在特定处理周期内,可在第一时钟相内读出已被MAC128等第一处理单元处理过的数据,并在该处理周期的剩余部分内由ALU130等第二处理单元作进一步处理。
另外,在处理周期第二相内,可刚由MAC128处理的新数据写入同一寄存器,从而在一个处理周期内,可在两个处理单元之间作整个流水线处理。而且,这些操作一必使数据通过任一条内部总线,可进一步避免总线争用。
再参照图2,操作期间,指令取出单元156从指令存储器152中检索二进制指令,若查一出,则从外部在存储器中检索。外部存储器有多种形式,如动态与静态随机存取存储器(DRAM与SRAM)及其衍生产品,磙或光硬盘存储器,或某些其它众所周知的数据存储媒体。在本发明该示例性实施例中,指令为可变长度指令,指令取出单元(下称取指令单元)确定指令长度,并确定在每次处理或时钟周期内要限出多少附加指令。另外,指令存储在内外存储器内连续的存储位置。下面详述取指令单元156的操作和内外存储器内指令数据的存储情况。
指令译码器158接收由取指令单元156检索的指令,并将指令译为控制信号供给一个或多个组成DSP的子系统,子系统包括数据存储器、寄存库、MAC与ALU。另外,指令译码器158可以将接收指令内所含的即时数据经即时总线Im1、Im2、Im3或ImALU送往有关系统。即时数据通常是存储在指令数据内的数值,而指令数据用于对存储在数据存储器102-106II中的数据作操作,或可以限定或修正某个地址。
由图2中DSP执行的操作包括将数据从数据存储器经数据总线之一载入某一寄存器位置。数据也可从寄存器写入数据存储器。而且,MAC128或ALU130可对寄存器120内一个或多个寄存器里的数据作操作,一般将结果写回到寄存库120内的寄存器。
上述DSP结构有多种优点。例如使用三条数据总线有利于不间断地对数据作流水线处理。在DSP执行的示例性滤波期间,将待滤波的数据(信号数据)存储在一只数据存储器中,而将应用于该数据存储在另一数据存储器中。由于操作结果通常要求比操作数更多的位数,因此将信号数据与系数存储在两只较窄的存储器里较佳。然后将系数与信号数据读入寄存库120,再由MAC单元128相乘累加。这些操作的结果可以存储在寄存库120内的第二寄存器里,或者导写入先前已存储了输入数据的寄存库。接着在第三总线(总线C)上将任何结果从该寄存器写入更宽的数据存储器(存储器C)。
由于输出数据经第三总线写入第三存储器,而输入数据级经第一与第二数据总线从第一与第二数据存储器中读出,所以很少或一会出现存储器访问冲突或总线争用。这样,数据可以不中断地处理,减小了以高于内部总线或其它子系统的速率对任何存储器子系统或数据总线的计时要求,从而既保持或提高了处理速度,又降低了功耗。
另外,在若干不同数据值在DSP内不同级以任何给定时间作不同处理的场合,数据不中断地通过DSP有利于数据的流水线处理。而且,在组合应用的并行指令时,结合这种高效的流水线处理,可实现明显的处理灵活性,提供高度通用、有效的有力的DSP系统。
应当理解,应用多条总线提高了以各种减少总线冲突的附加方式使数据围绕DSP运行的能力。例如,要作除法的数据可作为输入数据从存储器C经数据总线C提供,除数由另一存储器与总线提供,如存储器A与数据总线A提供,然后利用剩余总线(数据总线B)将结果存入剩余的存储器(存储器B)里。
在得益于多条数据总线与存储器的另一示例性操作中,由MAC单元130累加的数据经第一存储器与第一总线(如存储器A与数据总线A)提供。在完成一组累加后,把所得的数据经数据总线C写到存储器C。同时,在数据总线C不携带来自MAC单元128的结果数据的处理周期内,大部分时间这类结果数据仅在完成一组累加操作后可得到,准备逻辑移位的数据从存储器C经数据总线C提供给ALU单元130。逻辑移位的数据经数据总线B同时写到存储器B。这样,应用多条数据总线与存储器,一般特别是结合多个处理单元,通过在DSP内移动数据提供更多的可能性而有利于多次操作。
如上所述,应用能被多个处理单元(如MAC单元128与ALO单元130)访问的寄存器,可实现本发明的另一方法。由多个处理单元访问的寄存器,让必须由这些处理单元处理的数据不必移动通过任何内部数据总线而予以访问。例如,数据可由第一处理单元写到某个寄存器,然后再由同样可以访问该寄存器的第二处理单元处理。这样进一步减轻了总线争角与阻塞,因而保持了高的数据吞吐量。
另外,当结合使用并行操作指令和下面要详述的并行处理的能力时,可进一步增强高度流水线、多重操作地处理数据的能力。相反地,典型的流水线操作要涉及交错排列一组操作的不同阶段(即取出、译码、处理),所以缩短了各指令开始之间的处理时间。多重操作流水线法所附加好处在于,数据通过一组不同的操作,这种操作对不同的数据组是同时执行的。这种多重操作流水线法使每个处理周期执行的指令数提高到超过了普通的指令流水线法。
下述示例性处理进一步示出了上述结构的最佳协同作用。在一示例性滤波操作中(也如上所述),随着树其作累加的乘积数据的增大,MAC26产生的结果在大小上也增大(用于代表该值的绝对值与位数两者)。最后,结果必须作标定或“归一化”,通常要求用ALU单元130作逻辑位移操作。
在描述的系统中,标定操作可同滤波的乘法与累加操作同时执行。在同时处理的处理周期内,将未处理的信号数据与滤波系数从数据存储器102与103读入寄存库120内的寄存器(如L0h与L01)。同时,MAC单元128读取先前存储在这些寄存器(L0h与L01)里的值并作乘法与累加操作,其中将输出写到第二寄存器(如L1)。同时,ALU单元130读取先前存储在第二寄存器(L1)中的数据,并执行标定操作,将标定值写到第三寄存器(如L2)。而且在同一处理周期内,用总线C112将存储在第三寄存器(D0)中的先前的值写入数据存储器104。显然,特定的操作可以按执行的特定任务改变。而且很清楚,使用允许作多重操作的高度并行的指令,进一步有利于高度流水线的多指令操作。高度度行的指令允许在每个周期内对不同操作的规程作流水性操作。
应用两相读写操作,如上述例子,这种处理可在单个处理周期内全部完成,其中在第一时钟相内以每个寄存器里读出数据,并用处理单元处理,而在第二时钟相内的老的数据上将结果写入寄存器。应当理解,在单个时钟周期内,同一值不经受该处理的所有步骤,而是一组值通过DSP作流水线操作,每个值随着处理的执行移至下一步骤。
这里描述的本发明的各个方面都有利于许多其它的操作。例如,声音编码就是话音数据的编码处理,它要求执行许多不同类型的操作,有些操作可独立执行,因而可同时执行。应用多余数据总线和多个处理单元,有助于这些操作。
应用独立的指令存储器与指令译码具有进一步的优点。例如,与上述数据处理的同时,取指令156从指令存储器152读出指令,接着令指令译码器158产生控制信号,以便控制DSP内各其它子系统的操作(为便于画图和清楚,未画出接线)。同样,数据总线也不携带指令数据,因而可以不中断指令数据而移动处理信号数据。这样,通过将指令处理与数据处理分开,消除指令数据移动所耗用的数据总线周期,进一步提高了性能。
图5是一张表,说明将一组可变长度指令装在根据本发明一实施例的图2指令存储器152的一部分可寻赴存储空间内。在本发明有些实施例中,也可像图2那样把可变长度指令存储在外存系统里以实现附加的存储器效率。举例地址示于左列,指向32位数据安排每个地址示于存储器275的中间和右边诸列。中间列代表各数据字的16位高次子字,最右列代表6位低次子字。在本发明的该较佳实施例中,高低次子字都不能单独寻址,以便减少必需的地址逻辑量。
在存储器275内,可变长度指令A-L以图示的装填结构存储。指令A是48位指令,前两上双字节A(1)与A(2)存储在地址字0x0000,第三双字节A(3)存储在地址0x0001的高次子字里。指令A后面的指令B是32位指令,第一双字节B(1)存储在地址0x0001的低次字里,第二双字节B(2)存储在地址0x0002的高次子字里。指令C是16位指令,其第一和唯一的双字节(C1)存储在地址0x0002的低次子字里。
从指令A-C的存储位置可见,本发明将部分不同的指令存储在同一地址字内,减少了存储器275存储一组指令所必需的尺寸或量。例如,将指令A的第三双字节A(3)与指令B的第一双字节B(1)一起存储。
将变第指令跨过字边界或特别在存储器地址空间内的连续位置中存储起来,本发明减少了指令存储器存储给定指令数据必需的容量。减少指令存储器的容量就减少了对DSP给以规定指令贮藏容量所必需的芯模的尺寸与成本。如图3所示,将变第指令D-L置于存储器275内,进一步示明了指令的装填状况。
应该理解,在本发明有些实施例中,不必像上述那样把所有指令都装在连续位置中。例如,本发明不同的实施例仅将指令的主要部分(90%或以上)装在存储空间的连续位置中。在本发明另一实施例中,只将指令的主要部分(如25-50%)有利地装在连续的存储空间中。其它实施例可使用其它百分比的装填指令。
而且,不一定要使用连续的位置。指令必须简单地置于比指令数据总量大得不多的总存储空间内。这可以将指令置于存储空间内相邻的位置而较佳地实现,然而,指令会在整个存储空间里搞混,但是只要指令能按原定的执行次序读出就成了。本领域的技术人员将明白,这类预定的混乱作为存储空间的再映射,而且这种再映射一般不影响本发明的操作,否则要加大不希望有的复杂性。
同样地,最好具有能应用于很大一组指令的装填方案。例如,在本发明某些实施例中,最好对至少10条指令应用该装填方案。
另外,用于本发明该示例性实施例的特定装填方案,在其它实施例中不一定使用。例如,本发明的其它一些实施例可能在连续存储位置中没有指令,而指令可用某种小容量的存储空间分开,其中包括使用指令分离码。较佳地,小存储空间小于存储空间在存储字边界上保持指令边界所必需的容量。然而,上述装填法由于其简单、完整和高效,在许多场合中是较佳的方法。总之,在本发明的不同实施例中,在装填完整性与装填方案复杂性之间的折衷选择可以是不同的。
而且如上面暗示的那样,本发明的有些实施例只对部分而不是整组有效指令使用该装填方案。例如,只对用于执行某特定任务或子程序的几组指令执行指令装填。
应该指出,将高度装填的指令存储与可变长度指令组合起来使用,进一步减少了对DSP的存储器要求,因为可变长度指令只耗用请求所需操作所需的数据量,而且高度装填的指令存储将总存储量保持等于该组变称指令的耗用时,因而是最小量,减小的存储器尺寸也减少了芯片尺寸与成本。
除了减小DSP尺寸并由此减少成本等好处以外,在结合上述结构的其它特点时,应用高度装填指令与可变长度指令还具有意料不到的优点。例如,减小指令存储器的尺寸,附加的电路面积可供DSP,还能具备将可变长度指令存储在存储空间连续位置内的能力。图6是取指令单元156从本发明一实施例的指令存储器152取指令时的操作的流程图。过程在步骤200开始,在步骤202,从指令存储器152中读出第一组指令。在本发明的该示例性实施例中,在步骤202检索指令数据的两个32位字,即64位。
在步骤204,指令译码器158处理包含在这64位指令数据中的第一指令。在本发明的该示例性实施例中,该指令可以是16、32或48位长。指令长度由包含在每条指令里指明指令长度的一组首部位确定,下面再作详述。显然还有各种其它规定指令长度的方法,包括用代码区分两条指令,或用超首部指令规定几组后接指令的长度。在某些场合中最好使用首部位,因为指令长度信息通常十分接近该指令,由此降低了存储或保持有关指令处理的状态信息的要求。
在处理了包含在64位检索指令数据内的第一指令后,在步骤206,确定48位或更多未处理的指令数据是否保持在64位检索指令数据里。若保持着,则在步骤204处理包含在剩余48位未处理数据中的下一个指令。
在步骤206,若不到48位未处理指令数据保持在检索指令数据中,就从指令存储器152装载附加指令数据。各种装载附加指令的方法都可试用。在本发明一实施例中,从指令存储器装载足够多的附加指令数据,使存储在取指令单元里的未处理数据量增至48位。确保48位未处理数据存储在取指令单元内,以确保对指令译码器158至少有一条完整的指令。
在本发明一较佳实施例中,当保持的未处理数据不足48位时,根据已经处理的特定数据量,取指令单元检索可变的数据量。特别在处理的数据量等于或超过一个数据字(32位)时,就检索新指令数据的附加数据字(32位)。若先前处理的数据量等于或超过两个数据字(64位),则取指令单元就检索两个新的数据字。
根据处理的数据字数检索数据量较佳,因为它对指令译码器158保持着足够量的未处理数据,同时允许对构成指令存储器的存储库作更有效的字长访问。一旦在步骤206检索了附加的未处理指令数据,就在现有的未处理指令数据总量内处理下一个指令。
图7是按本发明一实施例构制的取指令单元156与指令存储器152的框图。指令存储器152包括偶数个存储库302(RAMO)和奇数个存储库300(RAM1),每一个都可读写32位数据字。把存储库标为奇偶,因为二者都在同一地址空间内寻址,但是偶地址偶数存储库302,奇地址针对奇数存储体300.
可读写其它字尺寸(包括8、16、24、48、64位字)的存储库可应用于本发明的其它实施例。可以使用其它不同数量的存储库,包括108个存储库。然而,最好使用两个带32位字的存储库,因为能降低整体复杂性,而且允许指令数据以写管理的块来寻址。
控制逻辑304让数据字从存储库300与302读到指令寄存器106与107。特定的存储位置读由地址线310与314规定,而读指令由使能线332、315、316和318控制。指令寄存器306与307的位输出以16位部分加到旋转器308的输入端A、B、C和D,旋转器308则输出48位指令数据324,而数据324包括四选三(3∶4)输入端A、B、C和D,每个输入组包含16位,下面再作语详述。
操作期间,控制逻辑304按参照图5描述的方法从指令存储库300与302装载指令数据。特别是,控制逻辑304通过从偶数存储库302和奇数存储库300读32位数据字,第一次将总计64位的未处理指令数据装入指令寄存器306和307。如果处理了16位的指令,不用装载新数据,因为寄存器306和307还包含着48位未处理的指令数据。若接着处理了32位的指令,则指令寄存器306要装上32位字的附加指令数据,因为保持的未处理指令数据不足48位。再次装载32位指令字,奖48位未处理指令数据置入寄存器306和307,16个未处理位置入寄存器307,其余32位置入寄存器306.如果再处理48位指令,就没有未处理指令数据可保持,所以两寄存器306和307均装有指令数据的32位字,该数据是64位的未处理指令数据,要大于必需的48位指令数据。虽然装载64位指令数据并无十分必要,但是这样做是有用的,因为这样可以使用两个32位字的指令存储器与寄存器,在行业中是常见的。使用其它方法保持足量的未处理指令数据,与应用本发明的某些方面相符。
一旦将64位新指令数据装入指令寄存器306和397,控制逻辑304就再配置旋转器308,用控制信号320根据下列条件输出在输入端A、B、C和D上接收的下一个48位的指令数据:1)指令数据在指令地址空间内的位置,2)已处理的该组指令数据,及3)已处理的前一指令的长度。特别是将旋转器308配置成输出一组准备用最高有效或最左边位置中指令数据的下一在线位作下一在线处理的48位指令指数。
例如,一旦将前两个字即64位指令数据装入寄存器306和307,如果偶数指令寄存器307中的指令数据处于下一在线,则旋转器308的输出就包括在输入端A、B和C(ABC)上依次接收的指令数据。如果奇数指令寄存器306中的指令数据处于下一在线,则旋转器308配置成输出在输入端C、D和A(CDA)上依次的指令数据。
由于指令已处理,就像上述那样将新的指令数据装入数据寄存器306和307,为旋转器308根据先前处理的指令的尺寸,配置成在输出端324上不断输出下一在线指令数据。先前处理的指令的尺寸由首部数据322(输出端324上前五位的副本)传送给控制逻辑304。上述已指出,任何对控制逻辑304规定指令长度的预定方法均符合本发明的实践,尽管使用前五位是较佳的,因为这样可直接按指令数据确定指令长度。
在本发明一示例性实施例中,前一指令的尺寸按表1编码成两位状态I1和I0。
I1I0 |
指令的尺寸 |
0 0 |
分支转移/停止/复位 |
0 1 |
16位 |
1 0 |
32位 |
1 1 |
48位 |
表1.全指令模式
另外,旋转器308的配置由两个构成控制320的选择位S1和S0控制,其编码如表2所列。
S1 S0 |
旋转器输出 |
00 | A B C |
01 |
B C D |
10 |
C D A |
11 |
D A B |
表2.旋转器选择控制位与输出
很明显,随着A1与S0状态的递增,旋转器308的输出就左转或筒状偏移。左转就是每个输入组(A、B、C和D)在输出端上向左移。在输出最左边位置的输入组被取消。先前未在输出端认定的输入组以后在最右边位置上输出。
S1与S0状态和旋转器308的配置被修正或转动的量,根据各种长度的指令而变化。具体而言,将代表正被处理指令长度的值(I1,I0)加到控制位S1和S0,去除任何执行值。即
S1(t+1),S0(t+1)=S1(t),S0(t)+I0,I1 (1)
对于转移或复位状态,S1和S0的值根据要处理转移或复位的特定指令而复位,所以不用公式(1)。在本领域中,处理转移、复位与停止指令的各种方法是众所周知的,而且由于这种处理与本发明无多大关系,下不再作描述。
在一示例性处理中,旋转器308开始时为ABC输出,选择位S1和S0为00。如果接收6位指令,将I1和I0为01的相应指令长度位加到S1和S0,得到为01的S1和S0,对应于旋转器308为BCD的输出324。在处理了前1位指令数据(输入A)后,BCD输出就是下一在线的指令数据组。
如果下一指令是个32位指令,则把指令长度I1和I0(10)加给当前的S1和S0状态01,得到11,得出的输出是DAB,对应于还未处理的下一个48位指令数据,用位于最高有效或最左边位置的输入端D上接收的下一在线指令数据配置。先前来自输入端B和C的指令数据已了处理。应该指出,在先前的32位指令处理期间,按上述的指令数据装载处理法将新数据装入指令寄存器307。
如果接下来处理48位指令,就对选择位S1和S0的状态增加指令长度I1和I0(11),得到S1和S0为10,去除执行,将旋转器308配置成输出CDA。输出CDA对应于下一个待处理的48位指令数据,其下一在线位配置在了高有效位置上。先前在输入端D、A和B上的指令数据已作过处理。再次指出,在前一指令处理期间,已将新的指令数据读入寄存器306。作为举例,已提供了上述执行相关指令数据处理的逻辑,而使用其它逻辑来执行上述的指令数据处理是显然的,与本发明的应用相符合。
这样,在该示例性实施例中,控制逻辑将旋转器308配置成输出从指令寄存器306和307接收的下一个48位指令数据,而把要处理的下一个指令位置于最左边位置。本领域的技术人员将明白,以任何预定的配置将指令提交给指令处理单元158,从而可识别下一组要处理的指令数据,这同样符合本发明的使用。
如上述指出的,除了输出下一个48位未处理的指令数据以外,旋转器308还向控制逻辑304指明下一个要处理的指令的尺寸。具体而言,旋转器308向控制逻辑304输出附加的下一个要处理的5位指令数据的副本。在本发明该较佳实施例中,由该指令的前五位规定该指令的长度。
图8是按本发明一实施例配置的MAC单元128的框图。右移900接收要累加的40位输入,并将该值移动0位或16位,输出加到多路复用器901的一个输入端。多路复用器901的另一输入端接收值0x8000。乘法器902接收两个要相乘的16位值,并一起从指令译码器158接收符号位,每个输入总计17位。
乘法器902的输出由左移904接收,左移904按指令译码器158的规定,将输出移动0、1、2或3位。加法器906接收多路复用器901和左移904的输出,并按指令译码器158的命令对两个输入值作加或减,
并将结果输出给本发明该示例性实施例中的寄存库输入口PI4。
在本发明有些实施例中,在MAC单元128里应用右移16单元900比其它类型的MAC单元具有附加的应用性。更具体地遇,应用右移16单元900便于在减少时钟周期数时作双倍精度操作。例如,为了执行将32位数(A)乘以16位数(B)的双倍精度操作,在第一时钟周期内,先将32位数的低16位(A1)乘以16位数B,得出一个存储在寄存库120里有中间值I。
在第二时钟周期内,将中间值I输入右移16单元900右移16位。另外,将16位数B与32位数A的高16位(Ah)相乘,将结果与右移16单元900里的各移的中间值I相加。这样,双倍精度乘法是用两个时钟周期而不是三个时钟周期执行的。一般而言,许多双倍精度操作要求一个或多个变量相对于其它变量而移位,这样可像乘法或累加操作之一一样在同一个时钟周期内作移位,减少了双倍精度操作必需的周期数。
通常要求三个时钟周期,因为第一次乘法操作、移位操作和第二次乘法操作通常各要求一个时钟周期。因此,使用移位电路减少了双倍精度乘法所需的时钟周期数。利用右移单元900还有利于涉及不同大小操作数据的其它双倍精度操作。
II.指令配置
A.概述
图9是一框图,表示本发明该示例性实施例使用的指令体系。方框402表示可变长度全指令,包括控制DSP操作的16、32或48位。可变长度指令又由包括一般指令段的指令段和存储器移动与程序流(MMOF)指令组成,如方框403所示。本发明该示例性实施例中使用的一般指令段包括MAC8、MAC16、ALU8、ALU16、DMOV16、DMOV24与DL40指令段。MMPF指令段包括OneMem11、TwoMem19、TwoMov19和ThreeMem24指令段。MMPF指令段由方框406所示的MMPF指令子段组成。MMPF指令子段包括LD(A)、LD(B)、ST(A)、ST(B)、LS(C)、DMOVA、DMOVB和PF8。下面详细描述各种全指令、指令段和指令子段。
B.全指令
在本发明该较佳实施例中,用长度为16、32和48位的指令段而形成。全指令被制成可在指令存储器152内连续存储并由DSP处理。下面描述全指令格式与结构,接着说明指令段的格式与结构。在操作期间,DSP每个时钟周期处理一条全指令。这样,在处理每条全指令期间,可作多次操作,特定的操作由选择的特定组的指令段决定。
用于本发明该示例性实施例的三条全指令的格式如表3所示。
表3.全指令格式
用于每条全指令的五位首部,指明该一指令的长度和某些有关全指令内容的附加信息。表4提供了用于本发明该示例性实施例的首部的格式。
5-bit首部 |
指令长度 |
0 |
0 |
0 |
0 |
X |
16-bit 指令 (2 types) |
0 |
0 |
0 |
1 |
X |
32-bit 指令 (2 types) |
0 |
0 |
1 |
X |
X |
48-bit 指令 (4 types) |
0 |
1 |
X |
X |
X |
32-bit 指令 (8 types) |
1 |
X |
X |
X |
X |
48-bit 指令 (16 types) |
表4.全指令首部格式
每条全指令(16、32和48位长)包含一个或多个指令段。表5列出本发明该示例性实施例中的现有指令段。在讨论了全指令后,再详述指令段的格式与操作。
指令段 |
描述 |
宽度 |
MAC8* |
8-bit MAC工作 |
8 |
ALU8* |
8-bit ALU工作 |
8 |
OneMem11* |
One Memory工作 |
11 |
MAC16* |
16-bit MAC工作 |
16 |
ALU16* |
16-bit ALU工作 |
16 |
DMOV16* |
Conditional Reg Move/Inport/Outport |
16 |
TwoMem19 |
两个存储工作 |
19 |
TwoMov19* |
两个存储/数据移动工作 |
19 |
DMOV24 |
装载/直接存储/装载地址/跳跃 |
24 |
ThreeMem27 |
三个存储工作 |
27 |
DL40 |
双装载 |
40 |
表5.指令段
表6-8列出指令段的各种组合,可应用于本发明该示例性实施例中的48、31和16位全指令里。虽然指令段的其它组合符合本发明的使用和操作,但是这里揭示的组合的某些特点较佳,如下面要详述的那样。另外,全部或部分全指令被示为“保留”,在描述的未规定或使用特定的指令组合,但是可以设想出将来使用这些全指令组合。
表6列出16位全指令在按本发明该示例性实施例执行时的格式化。全指令由五位首部后接11个指令位组成。
11 0
0 |
0 |
0 |
0 |
0 |
MAC8 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
ALU8 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
保留 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
保留 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
保留 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
保留 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
保留 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
保留 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
OneMem11 |
表6.16位全指令格式
首部位指明该指令的长度及有关指令类型的一些信息。对于首部00000而言,最低有效三个尾位用来进一步规定执行的操作。具体而言,尾位000指明剩余的8位包含一个MAC8指令段。尾位001指明剩余的8位包含一个ALU8指令段。对于其它尾位组合,不规定指令。
对于首部00001,剩余11位包含一个OmeMem11指令段。通过提供允许ALU、MAC或存储器移动待执行操作的16位全指令,可用最短的全指令作最常见的操作。由于最短的指令要求存储器存储的量最少,所以应用所述的16位全指令减少了执行特定一组操作所需的指令存储器容量。这样,DSP的整体尺寸减小了。也因此减少了成本和功耗。
16位指令通常在只能作一次或少数几次操作的条件下使用。一般而言,可以缩小只限定一次操作所需的指令的尺寸,于是对一次操作就使用半字即16位指令。另外,16位指令可用于MAC、ALD/存储器移动或程序流程操作,这类操作包罗了几乎所有人们想执行的操作。
在按本发明一实施例配置时,表7列出了指令段组合和相关的32位全指令格式化。
表7.32位全指令格式
如上所述,五个首部位指出了全指令长度及特定的指令段组合。例如,首部00010表示剩余27个指令位含一个ThreeMem27指令段,而首部00011表示剩余27个指令位含一ALU8指令段后接一TwoMwm19指令段。
对于首部01111,最低尾位还指出指令段的组合。例如,对于最低尾位0,下两个最低位表明剩余24位饮食4、ALU16后接MAC8还是MAC16后接ALU8指令段。其它尾位状态,如最低尾位1,限定着保留的组合。
32位指令可同时执行许多最常见的操作,既有利于流水线操作,也缩小了指令尺寸。例如,像滤波这样的应用,通常要作两次限出操作和一次乘/累加操作。32位指令能以流水线方式作这种成组操作,且不要求填满48位指令空间。
此外,32位指令可同时作MAC与ALU操作以及程序转移与调用操作,也不用最大的指令尺寸。
当按本发明一实施例执行时,表8列出了48位全指令的格式和指令段组合。
表8.48位全指令格式
五个首部位规定了该指令的长度及具体的指令段组合。例如,首部位00100表明,43个剩余指令位包括DMOV24、MAC8和OneMem11指令段。首部位10011表明,43个剩余位包括ALU16、MAC8和TwoMwm19指令段。
对于首部位11111,三个最低尾位还指出了饮包含于剩余指令位置的指令段。例如,尾位000表示剩余40个指令位包含MAC16和DMOV24指令段。尾位001表示剩余40个指令位包含MAC8、ALU8和DMOV24指令段。尾位110表示剩余400个指令位包含DL40指令段。
48位人指令提供的指令段组合可同时作重操作,故比串行操作快得多。例如,若干48位全指令允许同时作ALU操作、AMC操作和存储器操作。存储器操作包括装载、存储和数据移动操作,且常常允许一次访问多个存储位置。
48位指令允许乘法操作结合ALU操作和取数据与程序流程操作一起以流水线方式进行。这对滤波操作在结合标定操作时是有用的,因为此时通常要作MAC操作,接着作ALU(如移位)操作。应用MAC与ALU操作的其它应用场合包括组合三种或多种数据流。48位指令,尤其在组合应用三总线结构方面,有利于流水线操作。
这样可有效地将能以单条48位全指令执行的操作种数增加为五种(MAC、ALU、FETCH1、FETCH2和STORE)。通常,利用DSP的多条内部总成在DSP内耦接各种处理系统,进一步增强了在DSP中同时执行多条指令的能力。利用不同的总线,可以同时移动和访问不同的数据组。
根据能执行的操作种数来改变指令长度,进一步提高了使用指令存储器的效率。任何具体的任务都具有可同时作多重操作的周期,而其它周期只能作少数或只有一次操作。按能同时进行的操作种数调整指令长度,可减少指令存储器容量。
当结合使用紧密指令装填法时,可进一步减少上述示例性方法所需的指令存储器。使用可变长度指令或紧密装填指令,或使用这两者,通过用更多的电路面积实施特性,有助于应用多总线结构和多重访问寄存库。这样,将本发明这些方面的组合协同地组合起来,可同时提高性能和效率。
C.指令段
如上所述,全指令包括一组以预定方式集群的一个或多个指令段。在本发明该示例性实施例中,这组现有的指令段如表5所列。利用本发明该示例性实施例所提供的全指令而得出的指令段和组合,设计成让该组操作所需的指令存储器容量。下面讨论本发明该示例性实施例所应用的各种指令段的格式与操作状态。
C1.指令段术语
在下对指令段与子段的整个讨论中,表9和10列出了用来参照诸寄存器的缩写。另外,表的左边示出了本发明该示例性实施例使用的具体位码。
|
Dreg |
0000 |
R0 |
0001 |
R1 |
0010 |
R2 |
0011 |
R3 |
0100 |
R4 |
0101 |
R5 |
0110 |
R6 |
0111 |
R7 |
1000 |
L0h |
1001 |
L1h |
1010 |
L2h |
1011 |
L3h |
1100 |
L0l |
1101 |
L1l |
1110 |
L2l |
1111 |
L3l |
|
R0-R7 |
Lh/Ll |
A0-A7 |
Lreg/Dreg |
000 |
R0 |
L0h |
A0 |
L0 |
001 |
R1 |
L1h |
A1 |
L1 |
010 |
R2 |
L2h |
A2 |
L2 |
011 |
R3 |
L3h |
A3 |
L3 |
100 |
R4 |
L0l |
A4 |
D0 |
101 |
R5 |
L1l |
A5 |
D1 |
110 |
R6 |
L2l |
A6 |
D2 |
111 |
R7 |
L3l |
A7 |
D3 |
|
AS |
AL |
0 |
AS0 |
AL0 |
1 |
AS1 |
AL1 |
|
R0-R3 |
L0-L3 |
D0-D3 |
C0-C3 |
Cmod |
0 0 |
R0 |
L0 |
D0 |
C0 |
++ |
0 1 |
R1 |
L1 |
D1 |
C1 |
-- |
1 0 |
R2 |
L2 |
D2 |
C2 |
++CM0 |
1 1 |
R3 |
L3 |
D3 |
C3 |
++CM1 |
cond |
00000 |
LT | |
01000 |
L0LT | |
10000 |
L1LT | |
11000 |
L2LT |
00001 |
LE | |
01001 |
L0LE | |
10001 |
L1LE | |
11001 |
L2LE |
00010 |
EQ | |
01010 |
L0EQ | |
10010 |
L1EQ | |
11010 |
L2EQ |
00011 |
NE | |
01011 |
L0NE | |
10011 |
L1NE | |
11011 |
L2NE |
00100 |
GE | |
01100 |
L0GE | |
10100 |
L1GE | |
11100 |
L2GE |
00101 |
GT | |
01101 |
L0GT | |
10101 |
L1GT | |
11101 |
L2GT |
00110 |
OV | |
01110 |
L0OV | |
10110 |
L1OV | |
11110 |
L2OV |
00111 |
Uncond | |
01111 |
Rsvd | |
10111 |
Rsvd | |
11111 |
Rsvd |
表9.指令段术语与代码
|
RegA |
regB |
00000 |
R0 |
R0 |
00001 |
R1 |
R1 |
00010 |
R2 |
R2 |
00011 |
R3 |
R3 |
00100 |
R4 |
R4 |
00101 |
R5 |
R5 |
00110 |
R6 |
R6 |
00111 |
R7 |
R7 |
01000 |
L0h |
L0h |
01001 |
L1h |
L1h |
01010 |
L2h |
L2h |
01011 |
L3h |
L3h |
01100 |
L0l |
L0l |
01101 |
L1l |
L1l |
01110 |
L2l |
L2l |
01111 |
L3l |
L3l |
10000 |
A0 |
B0 |
10001 |
A1 |
B1 |
10010 |
A2 |
B2 |
10011 |
A3 |
B3 |
10100 |
A4 |
B4 |
10101 |
A5 |
B5 |
10110 |
A6 |
B6 |
10111 |
A7 |
B7 |
11000 |
AS0 |
BS0 |
11001 |
AS1 |
BS1 |
11010 |
AL0 |
BL0 |
11011 |
AL1 |
BL1 |
11100 |
AM0 |
BM0 |
11101 |
AM1 |
BM1 |
11110 |
保留 |
保留 |
11111 |
保留 |
保留 |
|
regC |
0000 |
L0 |
0001 |
L1 |
0010 |
L2 |
0011 |
L3 |
0100 |
D0 |
0101 |
D1 |
0110 |
D2 |
0111 |
D3 |
1000 |
C0 |
1001 |
C1 |
1010 |
C2 |
1011 |
C3 |
1100 |
CM0 |
1101 |
CM1 |
1110 |
保留 |
1111 |
保留 |
表10.指令段术语和代码
C2.指令段说明
指令段组包括两类MAC指令段:MAC8与MAC16.MAC8指令段支持带符号-不带符号和带符号-带符号的乘法类型,结果存在累加器L0或L1中。MAC8指令段允许用16位全指令作MAC操作而节省了指令RAM,而且对于许多并行指令组合,要求MAC操作编码为32位指令而不是48位指令。一般而言,MAC8指令执行的处理符合下述公式:
如公式(2)所示,MAC8指令段让寄存器L0或L1的内容与寄存器R0、R2、R4与R6的乘积相加,并将R0、R1、R3和R5直接设置到寄存器的乘积里。另外,还可规定带符号或不带符号的乘法。通过限制可用MAC8指令作MAC操作的寄存器数量,能将指令长度保持为8位,允许用更短的8位指令段作MAC操作。
MAC8指令执行的特定操作由构成表11所列指令的8位值限定。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
MAC 工作 |
mac8Op1 |
mac8Op2 |
SU/SS |
表11.MAC8指令段格式
SU/SS规定带符号或不带符号的乘法。表12列出的代码应用于规定MAC8指令段内的各种操作。
MAC 工作 |
000 |
L0= |
001 |
L1= |
010 |
L0=L0+ |
011 |
L1=L1+ |
100 |
L0=L0- |
101 |
L1=L1- |
110 |
L0=L1+ |
111 |
L0=L1- |
mac8Op1 |
0 0 |
R0 |
0 1 |
R2 |
1 0 |
R4 |
1 1 |
R6 |
mac8Op2 |
0 0 |
R0 |
0 1 |
R1 |
1 0 |
R3 |
1 1 |
R5 |
表12.MAC8指令段代码
这样,MAC8指令0×99将寄存器L0的内容与寄存器R0和R3不带符号的乘积之和放入寄存器L0。
NAC16指令段通过让附加寄存器应用于乘法-累加而提供的灵活性。公式(3)建立了能用MAC16指令段执行的操作。
例如,虽然在乘法-累加指令中不是所有组合都可离开累加器,但是每个累加器(L0-L3)都可用作目的地。CPS区段发出信号表示协同处理器应该执行并行的特定操作。该特定操作由MAC16指令执行,由构成表13中指令的16位值规定。
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
MAC工作 |
macOp1 |
macOp2 |
mtype |
mshift |
CPS |
表13.MCA16指令段格式
表14列出的代码用于规定MAC16指令段内的各种操作。
|
MAC 工作 |
macOp2 |
0000 |
L0= |
R0 |
0001 |
L1= |
R1 |
0010 |
L0=L0[>>16]+ |
R2 |
0011 |
L1=L1[>>16]+ |
R3 |
0100 |
L0=L0[>>16]- |
R4 |
0101 |
L1=L1[>>16]- |
R5 |
0110 |
L0=L1[>>16]+ |
R6 |
0111 |
L0=L1[>>16]- |
R7 |
1000 |
L2= |
L0h |
1001 |
L3= |
L1h |
1010 |
L2=L2[>>16]+ |
L2h |
1011 |
L3=L3[>>16]+ |
L3h |
1100 |
L2=L2[>>16]- |
L0l |
1101 |
L3=L3[>>16]- |
L1l |
1110 |
L2=L3[>>16]+ |
L2l |
1111 |
L2=L3[>>16]- |
L3l |
macOp1 |
0 0 0 |
R0 |
0 0 1 |
R2 |
0 1 0 |
R4 |
0 1 1 |
R6 |
1 0 0 |
L0h |
1 0 1 |
L1h |
1 1 0 |
L2h |
1 1 1 |
L3h |
mt/pe |
0 0 |
(SU) |
0 1 |
(UU) |
1 0 |
(SS) |
1 1 |
See note |
mshift |
0 0 |
<<0 |
0 1 |
<<1 |
1 0 |
<<2 |
1 1 |
<<3 |
表14.MAC16指令段代码
注:将指令L0=R0×R0(SU)<<0译成NOP。
Mtype11用作直接相乘的RND,对于
带符号-带符号乘法/累加指令,将
累加器右移16。
带mtypeSU与mac0p1=mac0p2的MAC指令均性非法。
MAC16指令段可左移达到3,在单单相乘(无累加)时能作舍入运算,舍入在移位后出现。在累加时,要加的累加器与带符号-带符号相乘同时下移16。CPS位是协同处理器选通位,表示应将MAC操作中使用的数据送给协同处理器。
应当指出,MAC8指令段执行的操作子小组呆用MAC16执行。对MAC8指令段选择的特定组指令,是可用MAC16指令段执行的该组操作以外最经常执行的指令组。通过用MAC8指令段执行大多数MAC操作,就节省了程序存储器。
8位ALU8指令段包括的ALU操作,是最经常与MAC操作(MAC8与MAC16)并行执行的操作,它不含中间数据。所有的ALU8移位操作都是算术移位,利用一只内部移位寄存器(SR)节省指令编码位。表15列出用ALU8指令段执行的操作。
NOP; |
NOP(需要平行组合) |
LD=DETNORM(LS); |
决定块归一化因数 |
LD=SET(LS); |
拷贝累加器(不饱和) |
LD=LS<<SR; |
移位累加器 |
LD=RND(LS<<SR); |
移位和巡回累加器 |
LD=LD±(LS<<SR); |
累加移位累加器 |
LD=LS±LT; |
加减累加器 |
LS±LT; |
加/减ACCS结果自由(设置标志) |
表15.ALU8指令段操作
LS是装载源(L0-L3),L0是装载目的地(L0-L3)。ALU8指令段执行的特定操作,由组成表16中指令段的8位值规定。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
ALUOp |
LS |
LD |
0 |
1 |
1 |
Sign |
LS |
LT |
1 |
LD |
Sign |
LS |
LT |
表16.ALU指令段格式
表17列出的特定代码用于限定利用ALU8指令段执行的操作。
ALUOp |
0 0 0 |
LD=DETNORM(LS) |
0 0 1 |
LD=SET(LS) |
0 1 0 |
LD=LS<<SR |
0 1 1 |
LD=RND(LS<<SR) |
1 0 0 |
LD=LD+(LS<<SR) |
1 0 1 |
LD=LD-(LS<<SR) |
1 1 0 |
LS+LT |
1 1 1 |
LS-LT |
LD/LS/LT |
0 0 |
L0 |
0 1 |
L1 |
1 0 |
L2 |
1 1 |
L3 |
|
Sign |
0 |
ILD=ILS+LT |
1 |
[LD=]LS-LT |
表17.ALU指令段代码
注:全零指令L0=DETNORM(L0)译码为NOP。
其中LD=DETNORM(LD)的指令为非法。
ALU8清除累加器指令为LD=LD=LD。
ALU16指令段可作算术与逻辑两种移位,表18列出了ALU16指令执行的具体操作。
<<表示算术移位,<<<表示逻辑移位。
表18.ALU16指令段操作
指令L0=SET(L0)译码为NOP。
表19列出ALU16指令段的格式。
表19.16位ALU指令段格式与代码
ALU16指令段执行的具体操作,由组成表20的指令段的位值规定。
Dregh |
000 |
R0 |
001 |
R1 |
010 |
R2 |
011 |
R3 |
100 |
L0h |
101 |
L1h |
110 |
L2h |
111 |
L3h |
Sop1 |
0 |
LD=LS<<R0-R3 |
1 |
LD=RND(LS<<R0-R3) |
Cop1 |
0 |
LD=LS+LT |
1 |
LD=LS-LT |
Sop2 |
0 |
LD=LS<<imm6 |
1 |
LD=RND(LS<<imm6) |
BitOp |
0 0 |
AND |
0 1 |
OR |
1 0 |
XOR |
AccOp |
0 0 |
LD=NORM(LS,SR) |
0 1 |
LD=ABS(LS) |
1 0 |
LD=-LS |
1 1 |
LD=-LS |
表20.ALU16指令段代码
注:全零指令L0=SET(L0);译码为NOP。
对BIT指令(h,i,j),通过附加带即时5的零符号位,汇编程序对即时6编码(可简化译码)。
DMOV16指令段是一种16位指令段,可执行不同的数据移动、数据入口和数据出口操作,如表21所示。
表21.DMOV16指令段操作
表22列出的格式与代码,可用DMOV16指令段执行现有的操作。
表22.DMOV16指令段格式
注:指令L0=0译码为NOP。
即时10带符号,即时9与11不带符号。
指令OUTPORTA(port-addr)读A总线上的值,并将它输出到指定端口。通过从存储器A同时读一值,该指令可将值直接从存储器A送到该端口。OUTPORTB(port-addr)的工作与此相同。
DMOV24指令段是个24位指令段,执行不同的装载/存储寄存器直接或装载寄存器即时操作,如表23所示。
表23.DMOV24指令段操作
起动寄存器位于AGU单元里。
表24列出的格式和某些代码,可用本发明该示例性实施例中的DMOV24指令段执行各种现有的操作。
表24.DMOV24指令段格式与代码
注:地址14与17不带符号,即时16带符号。
应该指出,对于DMOV24和其它指令段,有些操作可编码两次。例如,行(i)与(j)里规定的格式对同一操作编码,一个格式规定使用即时总线Iml,另一格式规定使用即时总线Im2。编码两次可让该指令段与众多其它也能要求使用即时总1或2的指令段组合起来。
40位双载指令段(DL40)是一种40位的指令段,可作即时装载地址操作。表25列出了本发明该示例性实施例中执行的具体操作。
表25.DL40指令段格式
表26列出了DL40指令段对每次操作的格式。
39 |
38 |
37 |
36 |
35 |
34 |
33 |
32 |
31 |
30 |
29-16 |
15-14 |
13-0 |
0 |
0 |
0 |
0 |
0 |
Reserved |
0 |
0 |
0 |
0 |
1 |
Lreg/Dreg |
immediate32 |
0 |
0 |
0 |
1 |
A0-A3 |
dreg |
address14 |
immediate16 |
0 |
0 |
1 |
0 |
B0-B3 |
dreg |
address14 |
immediate16 |
0 |
0 |
1 |
1 |
C0-C3 |
dreg |
address14 |
immediate16 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
C0-C3 |
Caddress14 |
A0-A3 |
Aaddress14 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
C0-C3 |
Caddress14 |
B0-B3 |
Baddress14 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
A0-A3 |
Aaddress14 |
B0-B3 |
Baddress14 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
Reserved(all zeros) |
0 |
1 |
0 |
0 |
0 |
1 |
Reserved(all zeros) |
0 |
1 |
0 |
0 |
1 |
0 |
regC |
Caddress14 |
A0-A3 |
Aaddress14 |
0 |
1 |
0 |
0 |
1 |
1 |
regC |
Caddress14 |
B0-B3 |
Baddress14 |
0 |
1 |
0 |
1 |
0 |
regA |
Aaddress14 |
B0-B3 |
Baddress14 |
0 |
1 |
0 |
1 |
1 |
regA |
Aaddress14 |
C0-C3 |
Caddress14 |
0 |
1 |
1 |
0 |
0 |
regB |
Baddress14 |
A0-A3 |
Aaddress14 |
0 |
1 |
1 |
0 |
1 |
regB |
Baddress14 |
C0-C3 |
Caddress14 |
0 |
1 |
1 |
1 |
Reserved |
1 |
0 |
0 |
regC |
re... |
Caddress14 |
..gA |
Aaddress14 |
1 |
0 |
1 |
regC |
re... |
Caddress14 |
..gB |
Baddress14 |
1 |
1 |
regA |
re... |
Aaddress14 |
..gB |
Baddress14 |
(e)(d)(d)(d)(b)(c)(a)(h)(i)(g)(i)(f)(k)(m)(n)(l)
表26.DL40指令段格式与代码
注:地址14不带符号,即时16与32带符号。
同样如表5所示,在本发明该示例性实施例中提供了四类存储器移动和程序流指令段,它们列于表27。
表27.存储器移动和程序流指令段
OneMem 11 |
TwoMen 19 |
TwoMev 19 |
ThreeMem 27 |
每个存储器移动和程序流指令(MMPF)段由表28列出的一组MMPF子段组成。
表28.组合数据移动和程序流指令子段
|
指令子段 | |
LD(A) |
装存储器A间接 |
8 |
ST(A) |
装存储器A间接 |
8 |
LD(B) |
装存储器B间接 |
8 |
ST(B) |
装存储器B间接 |
8 |
LS(C)* |
装/存储存储器C间接 |
8 |
DMOVA* |
总线A寄存器移动 |
8 |
DMOVB* |
总线B寄存器移动 |
8 |
PF8 |
8位程序流 |
8 |
首先讨论MMPF指令段的格式与操作,然后详细讨论MMPF子段的格式与操作。
OneMem11MMPF指令段用来执行单个存储器装载与存储操作、数据移动操作和程序流操作。在这里提供的示例性实施例中,用OneMem11MMPF指令段执行八种不同的操作,由11位段中前三位表示的特定操作如表29所示,该表列出了可用OneMem11数据移动指令段执行的操作。
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
LD(A) |
0 |
0 |
1 |
ST(A) |
0 |
1 |
0 |
LD(B) |
0 |
1 |
1 |
ST(B) |
1 |
0 |
0 |
LS(C) |
1 |
0 |
1 |
DMOVA |
1 |
1 |
0 |
DMOVB |
1 |
1 |
1 |
PF8 |
表29.OneMem11指令段格式
TwoMwm19MMPF指令段是一种19位指令段,可执行表30列出的存储器装载与存储操作的八种不同的组合。
18 |
17 |
16 |
15-8 |
7-0 |
0 |
0 |
0 |
LD(A) |
LD(B) |
0 |
0 |
1 |
LD(A) |
ST(B) |
0 |
1 |
0 |
LD(A) |
LS(C) |
0 |
1 |
1 |
ST(A) |
LD(B) |
1 |
0 |
0 |
ST(A) |
ST(B) |
1 |
0 |
1 |
ST(A) |
LS(C) |
1 |
1 |
0 |
LS(C) |
LD(B) |
1 |
1 |
1 |
LS(C) |
ST(B) |
表30.TwoMem19指令段格式
TwoMoV19MMPF指令段是一种19位指令段,能与数据移动操作一起作八种不同组合的存储器装载与存储操作,如表31所示。
18 |
17 |
16 |
15-8 |
7-0 |
0 |
0 |
0 |
LD(A) |
DMOVB |
0 |
0 |
1 |
ST(A) |
DMOVB |
0 |
1 |
0 |
DMOVA |
LD(B) |
0 |
1 |
1 |
DMOVA |
ST(B) |
1 |
0 |
0 |
DMOVA |
LS(C) |
1 |
0 |
1 |
LS(C) |
DMOVB |
1 |
1 |
0 |
DMOVA |
DMOVB |
1 |
1 |
1 |
保留 |
表31.TwoMov19指令段格式
ThreeMeM27MMPF指令段是一种27位指令段,能执行表32所示的八种不同组合的存储器装载、存储器存储和数据操作。
26 |
25 |
24 |
23-16 |
15-8 |
7-0 |
0 |
0 |
0 |
LS(C) |
LD(A) |
LD(B) |
0 |
0 |
1 |
LS(C) |
LD(A) |
ST(B) |
0 |
1 |
0 |
LS(C) |
ST(A) |
LD(B) |
0 |
1 |
1 |
LS(C) |
ST(A) |
ST(B) |
1 |
0 |
0 |
LS(C) |
DMOVA |
LD(B) |
1 |
0 |
1 |
LS(C) |
DMOVA |
ST(B) |
1 |
1 |
0 |
LS(C) |
LD(A) |
DMOVB |
1 |
1 |
1 |
LS(C) |
ST(A) |
DMOVB |
表32.ThreeMem27指令段格式
公式(4)给出由LD(A)指令子段执行的操作。
表33列出本发明该示例性实施例提供的LD(A)指令子段。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
dregg |
A0-A3 |
Amod |
表33.LD(A)指令子段格式
公式(5)是LD(B)指令子段执行的操作。
表34列出本发明该示例性实施例提供的LD(B)指令子段。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
dreg |
B0-B3 |
Bmod |
表34.LD(B)指令子段格式
公式(6)是ST(A)指令子段执行的操作。
表35列出本发明该示例性实施例提供的ST(A)指令子段。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
dreg |
A0-A3 |
Amod |
表35.ST(A)指令子段格式
公式(7)是ST(B)指令子段执行的操作。
表36列出本发明该示列性实施例提供的ST(B)指令子段。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
dreg |
B0-B3 |
Bmod |
表36.ST(A)指令子段格式
表37列出DMOVA指令子段执行的操作。
表37.DMOVA指令子段操作
表38是本发明该示例性实施例提供的DMOVA指令子段格式。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
R0-R7(dst) |
dreg(src) |
1 |
0 |
0 |
0 |
A0-A3(src) |
R0-R3(dst) |
1 |
0 |
0 |
1 |
A0-A3(dst) |
R0-R3(src) |
1 |
0 |
1 |
0 |
A0-A3(dst) |
A0-A3(src) |
1 |
0 |
1 |
1 |
B0-B3(dst) |
B0-B3(src) |
1 |
1 |
0 |
0 |
C0-C3(dst) |
C0-C3(src) |
1 |
1 |
0 |
1 |
A0-A3(src) |
R4-R7(dst) |
1 |
1 |
1 |
cond |
(a,b,c)(d)(e)(f)(f)(f)(d)(g)
表38.DMOVA指令子段格式
这样,提供可包含一个或多个指令子段的MMPF指令段,进一步增加了可用全指令执行的操作种数。例如,全指令可让算术与MAC操作同一组三种存储器移动与程序流操作一起执行。用单条指令执行这么许多操作的能力,进一步减少了作某种给定操作所需的指令总数,从而减少了对DSP要求的整个指令存储器。减少指令存储器可减小芯模尺寸,从而减少了DSP的成本与功耗,这对于范围广泛的包括移动无线电话的应用而言,使DSP更为合适。
这样已经描述了应用并行可变长度指令组控制DSP的系统与方法。以上描述的诸较佳实施例,能让本领域的任何技术人员使用本发明。对他们而言,完全明白这些实施例的种种改型,而且不须运用发明能力就可将这里定义的基本原理应用于其它实施例。例如,虽然描述的系统与方法同DSP相关,但其各个方面都适用于一般的计算系统与装置。
通过参照诸较佳实施例面对本发明所作的描述,可以充分理解到,有关实施例仅用作示例,对于具备相关知识与技能的人们,各种改型与变化并不背离由所附的权项及其等效的规定的发明精神与范围。