微处理器中的紧缩加减运算的制作方法

文档序号:6453832阅读:197来源:国知局
专利名称:微处理器中的紧缩加减运算的制作方法
技术领域
本发明大体涉及计算机处理硬件中的指令处理和算术运算的执行,且涉及用于改进 此类运算的执行效率的对此类处理硬件的特定修改。本发明更明确地说涉及尤其用于快 速傅里叶变换和相关变换的实施中的蝶式运算。
背景技术
如今多种应用(从音频和视频信号处理及多媒体压縮到汽车碰撞检测)在其算法中 使用信号的离散变换。此类离散变换包含(例如)离散余弦变换和离散傅里叶变换,其 通常需要以超过每秒几十兆位的数据速率实时执行,这不仅需要高时钟速率和快速处理 器,而且还需要此类处理器进行的变换计算和数据处理的高效。离散变换运算通常可通 过使用快速傅里叶变换(FFT)来有效地计算,所述FFT具有两个基本"特点",即时 间抽取(库利-图基(Cooley-Tukey))和频率抽取(桑德-图基(Sande-Tukey))。 FFT的 两个特点均包含所谓的"蝶式"计算作为基本计算元素。蝶式计算还用于其它变换(例 如,沃尔什-哈德玛(Walsh-Hadamard))中和维特比(Viterbi)编码/解码算法中。因此, 处理硬件中蝶式计算的有效执行在许多应用中具有重要价值。
基本蝶式计算涉及复式运算数的实和虚分量的加法和减法两者。举例来说,在时间 抽取FFT变体中,用于对复值a、 b、 ci、 A和B执行一个蝶式运算的代表性伪码给定如 下,其中Re()和Im()表示复值的各自实和虚分量
Re (tmp) := Re(b)Re(ci) - Im(b)Im(ci); Im (tmp) := Re(b)Im (ci) + Im(b)Re(ci); Re (A) := Re(a) + Re(tmp); Re (B) := Re(a) - Re(tmp); Im (A) := Im(a) + Im(tmp); Im (B) := Im(a) - Im(tmp);
根据此计算,我们可以看到,对同一输入运算数发生加法和减法运算两次。 如果计算中使用的定点运算数的精确度是微处理器的字长度的一半,且如果微处理 器的ALU支持用于对紧縮半字操作的单指令多数据(SIMD)指令,那么微处理器可能用于在一个运算中执行加法和减法两者。举例来说,由ARM有限公司(在英国设立) 提供的ARM11处理器具有可对紧缩数据同时执行半字加法和减法的指令。因此,指令 SADDSUBX Rd、 Rn、 Rm禾B UADDSUBX Rd、 Rn、 Rm实行以下的各自有符号和无符
号型式
Rd [31:16] :=Rn [31:16] +1^[15:0]以及 Rd [15:0] := Rn [15:0〗-Rm [31:16]。
同样,指令SSUBADDX Rd、 Rn、 Rm和USUBADDX Rd、 Rn、 Rm实行以下的各
自有符号和无符号型式
Rd [31:16] := Rn [31:16] - Rm [15:0〗以及 Rd [15:0] := Rn [15:0] + Rm [31:16]。
然而,这些指令无法执行蝶式运算的加减运算,除非两个半字运算数被紧缩在同一 寄存器中,这需要额外处理。
第2004/0078404号美国专利申请公开案(Macy等人)描述一种处理器,其(尤其) 可对第一运算数的四个紧縮数据元素(x3、 x2、 xl、 x0)和第二运算数的四个紧縮数据 元素(y3、y2、yl、yO)执行水平或内部加减运算,以产生包括四个紧縮数据元素(y2+y3、 yl匿yO、 x2+x3、 xl-xO)或者(y2-y3、 yl+yO、 x2-x3、 xl+xO)的结果,以便使得可有效 计算8点时间抽取沃尔什-哈德玛变换。还建议快速傅里叶变换的计算与SIMD乘法运算 组合。
第6,754,687号美国专利(Kumk、 Jr等人)描述一种用于对二维数据矩阵有效计算 反向离散余弦变换的处理系统。所述计算包含执行蝶式(BFLYS)指令,所述指令由对 四个半字数据(四个紧缩16位运算数)或双字数据(两个32位运算数)的独立加法和 减法运算组成。

发明内容
本发明提供一种执行紧缩半字加法和减法运算的方法,其中我们可指定使用哪些半 字作为运算数,即使当其存储在不同源寄存器中时也如此。半字运算数可位于寄存器的 顶部或底部部分或其它可寻址存储位置中。各自的和与差结果紧縮到指定目的地寄存器 的各自顶部和底部部分中。加法和减法两者并行实行。还可提供具有对所述和与差结果的等分和有符号或无符号饱和修改的半字加法与减法运算。
本发明还提供对微处理器的修改以实施此紧縮半字加法和减法运算。处理器的ALU 可分为双半字加法器,且运算数可经由根据用于此运算的经解码指令而产生的多路复用 器控制从指定源寄存器存取。半字加法器可经设定以在一个加法器中执行加法且在另一 加法器中执行减法,来自这些加法器的和与差输出供应到目的地寄存器的各自顶部和底 部部分。


图1是根据本发明用于执行紧縮加减运算的微处理器硬件的相关部分的示范性实施 的示意框图。
图2是更详细展示用于在将结果存储在目的地寄存器中之前执行对紧縮加减结果的 等分或饱和修改的图1的实施中的结果修改逻辑的示意框图。
具体实施例方式
本发明提供一种用于加速通常用于执行快速傅里叶变换或其它类似变换的蝶式计 算的若干部分的构件和方法。明确地说,对相同半字运算数的紧缩半字加法和减法运算 可在微处理器中实施。术语"微处理器"意指包含加载存储(RISC)和存储器定向(CISC) 两种结构的多种数据处理硬件,且包含通用处理器和专用处理器(例如,数字信号处理 器)两者以及嵌入式处理器。可通过处理器的指令集内的相应指令向微处理器指示紧缩 加减运算。
示范性微处理器实施可包含32位字长度,其中计算中使用的定点数具有16位(半 字)精确度和(l. 15)格式,这意味着每一半字的最高有效位表示符号,而剩余15个次有 效位是分数位。半字可紧縮到寄存器或存储器字的顶部和底部部分中,其中位[31:16]中 的顶部部分是与位[15:0]中的底部部分分离的值。虽然在一些实例中将复值的实部和虚 部放置到同一寄存器或存储器字的相应顶部和底部部分中可能看上去是便利的,但这并 非绝对必需,从效率的观点来看甚至不合乎需要,因为为了保持实部和虚部合起来为一 值在运算之后必需对数据改组。通常最好就是知道其在其可能被放置的任何字中的位 置。本发明提供的灵活性允许执行紧縮加减运算,即使当半字运算数位于不同寄存器中 时也如此。
参看图1,可见微处理器的相关部分,其已经特别修改以有效地实施本发明。算术 逻辑单元(ALU) 11具有耦合在两个半字加法器13与15之间的多路复用器17。多路 复用器17接收控制信号PROPAGATE—CARRY。当此控制信号等于1时,将来自底部半字加法器15的CARRY—OUT作为CARRY—IN供应到顶部半字加法器13,从而使组件 13、 15和17成为正常的全字加法器。然而,每当控制信号PROPAGATE—CARRY设定 为零时,来自底部半字加法器15的CARRY—OUT未传播到顶部半字加法器13中。而是, 顶部半字加法器13从多路复用器17接收零作为其CARRY—IN值。有效地,将 PROPAGATE_CARRY设定为零使字加法器成为两个独立半字加法器13和15。此零控 制设定是根据本发明执行紧縮半字加减运算时使用的设定。
顶部和底部半字加法器13和15还接收各自控制信号ADDSUB—CTL_T和 ADDSUB—CTL—B ,其确定是否执行加法或减法,即是否将对相应的半字运算数输入 OP一BJT或OP—B一B求补数。当任一或两个控制信号设定为零时,相关输入OP—B—T或 OP—B_B处提供的值保持不变且执行加法(A+B)。当任一或两个控制信号设定为一时, 相关输入OP一B一T或OP_B_B处提供的值被求补数且执行减法(A-B)。对于紧縮半字加 减运算,这些控制信号中的一者(例如,ADDSUB—CTL一T)针对加法设定,而这些控 制信号中的另一者(例如,ADDSUB—CTL—B)针对减法设定,使得顶部和底部半字加 法器13和15对半字运算数执行各自加法和减法运算。
AUL 11能够存取含有各种寄存器的寄存器堆19。在紧縮半字加减运算中,寄存器 堆19中的两个寄存器(此处表示为REGA和REGB)由相应指令指示为用于运算的源 寄存器,而寄存器堆19中的另一寄存器(此处表示为DSTREG)由指令指示为用于运 算结果的目的地寄存器。对于紧縮数据,寄存器堆中的寄存器中的每一者具有为顶部半 字(即,REGA—T、 REGB—T和DST—REG—T)和不同的底部半字(即,REGA—B、 REGB—B 和DST—REG_B)两者指定的存储位置。
为了改进灵活性,AULll已经修改使得其经由一组多路复用器21-26间接地从指令 指定的寄存器(表示为REG A和REGB)存取运算数,所述多路复用器供应来自各自 源寄存器REGA和REGB的选定半字运算数输入。
当供应到多路复用器22、 23、 25和26的控制信号HALFWORD—ADD设定为零时, 其促使来自各自寄存器A和B的各自顶部和底部半字作为运算数输入被供应到AUL 11 的各自顶部和底部半字加法器13和15。与设定为一的控制信号PROPAGATE—CARRY 组合,AUL11将作为正常全字加法器而工作。
然而,当HALFWORD一ADD设定为一时,多路复用器22和23将把由多路复用器 21从REG B选择的相同半字作为半字运算数输入供应到两个半字加法器13和15。此 半字运算数当被输入到顶部半字加法器13中时表示为OP—B_T,且当被输入到底部半字 加法器15中时表示为OP—B—B。(在相同半字被选择作为两个半字加法器13和15的运算数输入的这种情况下,运算数通常也可表示为OP—B。)同样,多路复用器25和26将 把由多路复用器24从REGA选择的相同半字作为半字运算数输入供应到两个半字加法 器13和15。此半字运算数当被输入到顶部半字加法器13中时表示为OP—A_T,且当被 输入到底部半字加法器15中时表示为OP—A—B。(同样,在相同半字被选择作为两个半 字加法器13和15的运算数输入的情况下,运算数也可表示为OP—A。)与设定为零的控 制信号PROPAGATE—CARRY组合,AUL 11将作为 一 对半字加法器而工作。
供应到各自多路复用器21和24的控制信号OP_B_TOP和OP_A_TOP确定选择来 自各自寄存器REGB和REGA的顶部还是底部半字。如果控制信号中的任一者或两者 设定为一,那么将选择相应顶部半字作为相关半字运算数。
因此,相关的一些控制信号组合包含.-
(a) HALFWORD—ADD = 0, PROPAGATE_CARRY = 1 , OP—A—TOP = X (无关),OP—B—TOP = X,ADDSUB—CTL—T =ADDSUB—CTL—B = 0; then DST := A + B 。
这是计算和的正常全字加法器。
(b) HALFWORD—ADD = 0, PROPAGATE—CARRY = 1 , OP—A_TOP = X, OP—B—TOP = X ,
ADDSUB—CTL—T = ADDSUB—CTL—B = 1; then DST : =A - B 。
这是计算差的正常全字加法器。
(c) HALFWORD—ADD = 1 , PROPAGATE—CARRY = 0, OP—A—TOP=0, OP—B—TOP = 0,
ADDSUB—CTL一T = 0, ADDSUB—CTL一B = 1 ; then DST—REG—T : = REGA—B + REGB_B, DST—REG—B: = REGAJB - REGB—B。
这将来自寄存器A和B的底部半字的各自和与差放置到目的地寄存器的各自顶部和 底部半字位置中。(d) 与(c)相同,除了
ADDS既CTLJT = 1 , ADDSUB—CTL一B = 0; then DST一REG—T : = REGA_B-REGB—B , DST—REG—B : = REGA一B + REGBJB。
此变体将来自寄存器A和B的底部半字的各自差与和放置到目的地寄存器的各自顶 部和底部半字位置中。
(e) 与(c)相同,除了
<formula>formula see original document page 9</formula>
这使用来自寄存器A和B的顶部半字作为运算数。使和与差的目的地反向的类似于 (d)的变体也是可能的。
(f) 与(c)相同,除了
OP—A_TOP = 0, OP—B—TOP = 1;
then DST—REG—T := REGA—B + REGB—T,
DST—REG—B := REGA—B - REGB—T。
这使用来自REGA的底部半字和来自REGB的顶部半字作为运算数。 同样,
(g) 与(c)相同,除了
OP—A—TOP = 1 OP—B—TOP = 0,
then DST—REG_T := REGA—T + REGB_B,
DST_REG_B := REGA—T - REGB—B。
这使用来自REGA的顶部半字和来自REGB的底部半字作为运算数。 在任一变体(f)或(g)中,如果ADDSUB—CTL—T= 1、 ADDSUB—CTL—B=0,那么与(d)中一样,我们可使和与差的目的地反向使得差进入DSTREG的顶部半字中。 使用具有图1中所见的修改的微处理器,我们可更有效地执行在执行变换函数的过 程中所使用的蝶式计算。蝶式计算解析为以下示范性汇编码
Multiply tmp—real, b—real, ci一real;
Negate ci—imag—neg, ci—imag;
Multiply—accumulate tmp—real, b—imag, ci—imag—neg;
Shift—right tmp—real, tmp—real>>15;
(!在乘法产生32位定点乘积之后右移15位恢复原始16位(1.15)格式。)
Multiply tmp—imag, b一real, ci一imag; Multiply—accumulate tmp—imag, b—imag, ci一real; Shift—right tmp—imag, tmp—real〉>15; Paddsub.h a_b—real, a—real:b, tmp—real:b; Paddsub.h a_b—imag, a一imag:b, top—imag:b; 具体地说,可执行紧縮半字加法和减法运算(paddsub.h),其中从指定源寄存器的 顶部或底部部分选择相同半字运算数,且将和与差紧縮到指定目的地寄存器的各自顶部 和底部半字中(没有饱和),例如上文的选项(c)或(e)。这允许蝶式计算的四个先前 独立的和与差运算
Re (A) : = Re (a)十Re(top); Re (B) : = Re (a) -Re(tmp); Im (A) : 二 Im (a) + Im(tmp): Im (B) : = Im (a) 一 Im(tmp);
现组合为一对紧縮半字加法-减法运算
PADDSUB.H (a—b—real, a—real:b, tmp—real:b); PADDSUB.H (a_b—imag, a—imag:b, tmp—imag:b);其中所陈述的第一参数是指定的目的地寄存器,且所陈述的最后两个参数是指定的 A和B源寄存器,此处识别为使用来自那些寄存器的底部半字。 对应于指令
PADDSUB.H dstreg, regA:<regApart>,
regB:<regBpart> (其中regApart、 regBpart e{t, b))的运算的等效功能性可以伪码
术语便利地描述为
If (regApart = = t)
Op—A = regA [wordlength-1 : wordlength/2];
Else
Op—A = regA [(wordlength/2) -1 : 0]; If (regBpart = = t)
Op—B = regB [wordlength-1 : wordlength/2];
Else
Op—B = regB[ (wordleng緒)-l : 0]; Rd[wordlehgth-l : wordlength/2] : = OpA + OpB; Rd[{wordlength/2)—l: 0] := OpA習OpB;
(然而,注意,处理器硬件在一个操作时钟周期中将此紧縮加减运算作为单个统一 动作而实行而不是类似软件的描述所建议的连续步骤序列。)此功能描述的if-else行由 选择到达ALU U的Op一A和Op_B半字运算数输入的多路复用器21-26在图1的处理 器电路中实行。功能描述的最后两行对应于由半字加法器13和15且通过将和与差结果 提供到目的地寄存器DST REG的各自顶部和底部半字位置而实行的加法和减法运算。
或者,可替代地使用相应的指令PSUBADD.H。这与上述紧縮加法-减法运算 PADDSUB.H相同,除了和与差结果的目的地反向而使得差进入顶部半字中且和进入底 部半字中以外。
Rd [wordlength-1 : wordlength/2] := OpA - OpB ; Rd [wordlength/2 -1:0]:= OpA + OpB;
这对应于变体(d),和上文描述的变体(e)、 (f)或(g)等的类似反向目的地型式。 根据本发明的紧縮加法和减法的其它变化是可能的。举例来说, 一个或一个以上其它指令可提供具有等分的紧縮加减运算(paddsubh.sh和psubaddh.sh)。等分涉及在将半 字和与差结果写入到目的地寄存器之前执行半字和与差结果的算术除以二 (经实施为右 移一个位位置)。算术右移(asr)保留最高有效位的符号,艮P:
(asr值[15:0] =({值[15],值[15:1川,
其中(a,bl指示a与b的串联。等分通常用于数字信号处理(DSP)应用中,因为其 允许限制结果的增长。
一个或一个以上其它指令可提供具有有符号或无符号饱和的紧縮加减运算 (paddsubs.sh、 paddsubs.uh、 psubadds.sh、 psubadds.uh)。饱禾口用于使由上溢或下、溢状况 引起的误差最小化。如果两个运算数的和或差在可由数字格式表示的范围之外,那么和 或差经设定为可由所述格式表示的最大或最小数值。
在无符号饱和的情况下,半字值OOOOh到FFFFh可表示从0到65535 (或者,分数 值0到65535/65536)范围内的自然数。在正数的加法期间可发生上溢,而在正数的减 法期间可发生下溢。上溢或下溢状况通过从相关半字加法器产生进位输出来检测。在由 加法引起的上溢的情况下,将饱和值FFFFH (最大无符号数)指派为结果。在由减法引 起的下溢的情况下,将饱和值0 (最小无符号数)指派为结果。
在有符号饱和的情况下,半字值在从-32768到32767 (由有符号位8000H到FFFFH 和0000h到7FFFh表示)范围内。(等效分数值也可由这些有符号位表示。)两个正值的 加法可超过范围中的最大值(上溢),从正值中减去负值也可如此,在所述情况下,最 大(最正的)有符号数(由7FFFh表示)将被指派给结果。同样,两个负值的加法或从 负值中减去正值可产生落在范围中的最小值以下的和或差结果,在所述情况下,将指派 最小(最负的)有符号数(由8000h表示)来替代结果。通过确定四个状况中的任一者 来检测存在上溢或下溢且因此需要饱和,艮P:
<formula>formula see original document page 12</formula>
此处,-意味着逻辑否(NOT), &意味着逻辑与(AND),且l意味着逻辑或(OR)。 在将每一运算数的符号位(半字位15)与和/差结果进行比较时指示上溢/下溢状况。上溢可简单地通过运算数A的符号位而与下溢区分
if (OP—a [15]) then MODOUT [15:0] = 0x8000 else MODOUT [15:0] = 0x7fff;
为了实施变化,结果-修改逻辑单元31可插入在从ALU ll和相应目的地寄存器半 字DST—REG_T和DST—REG—B输出的和/差输出SUMDIFF_T与SUMDIFF—B之间。结 果-修改逻辑31如图2中更详细展示为不同的,但通常是用于各自结果SUMDIFFJT和 SUMDIFF—B的顶部和底部半字目的地的相同的结果-修改逻辑子单元31T和31B。图2 还展示这些子单元需要的各种参数和控制输入。施加到此逻辑单元31的控制信号 HWMOD [l:0]将确定将施加变化中的哪一者(即,没有具有无符号饱和或有符号饱和的 修改)。到达ALU (符号位)的运算数输入连同各自ADDSUBJ^TL信号一起也耦合到 逻辑子单元31T和31B。对应于顶部和底部输出SUMDIFF—T和SUMDIFF—B的逻辑将 相同。来自此逻辑单元的经修改的输出[15:0]用作。
权利要求
1. 一种处理器电路,其适于对一对选定运算数执行紧缩半字加法和减法运算,所述处理器电路包括算术逻辑单元(ALU),其具有加法器电路,所述加法器电路可选择性地分为两个半字加法器,每一半字加法器可独立选择以对在所述半字加法器的各自运算数输入处接收的运算数执行加法或减法运算,所述ALU可存取具有拥有顶部和底部半字存储位置的一组可选择寄存器的寄存器堆,所述ALU的所述半字加法器的输出可选择性地耦合到所述寄存器堆中的指令指定的目的地寄存器的各自顶部和底部半字存储位置;以及一组多路复用器,其耦合在所述寄存器堆与所述ALU的所述半字加法器的所述运算数输入之间,所述组多路复用器经配置以响应于指令确定的控制信号从所述寄存器堆的所指定第一源寄存器的所指定顶部或底部半字选择第一运算数输入,且从所述寄存器堆的所指定第二源寄存器的所指定顶部或底部半字选择第二运算数输入,所述所指定第二源寄存器未必与所述所指定第一源寄存器相同。
2. 根据权利要求1所述的处理器电路,其中所述组多路复用器包含第一组多路复用 器,其响应于顶部/底部控制信号以用于在来自所述指定第一和第二源寄存器的顶 部和底部半字运算数之间进行选择。
3. 根据权利要求2所述的处理器电路,其中所述组多路复用器进一步包括第二组多路 复用器,其响应于半字/全字控制信号以用于在来自所述指定第一和第二源寄存器 的半字与全字运算数之间进行选择。
4. 根据权利要求1所述的处理器电路,其中所述ALU包含耦合在底部半字加法器的 进位输出与顶部半字加法器的进位输入之间的多路复用器,所述多路复用器响应于 传播进位控制信号以用于在传播所述进位输出以产生全字加法器与不传播所述进 位输出以产生独立的半字加法器之间进行选择。
5. 根据权利要求1所述的处理器电路,其中所述两个半字加法器响应于独立加/减控 制信号以用于指定由所述各自半字加法器进行的运算数输入的加法或减法。
6. 根据权利要求1所述的处理器电路,其进一步包括耦合在所述ALU与所述目的地 寄存器的输出之间的结果-修改逻辑,其中所述结果-修改逻辑经配置以对所述ALU 的所述各自半字输出选择性地实施指令指定的等分、无符号饱和、有符号饱和无修 改中的任何一者或一者以上。
7. —种在处理器电路的单一操作周期中执行紧縮半字加法和减法运算的方法,所述方 法包括借助一组多路复用器,从可由算术逻辑单元(ALU)存取的寄存器堆的所指定第 一源寄存器的所指定顶部或底部半字中选择第一运算数;借助一组多路复用器,从所述寄存器堆的所指定第二源寄存器的所指定顶部或底 部半字中选择第二运算数,所述指定第二源寄存器未必与所述指定第一源寄存器相 同;在所述ALU中,在所述处理器电路的单一操作周期中并行执行所述选定第一和 第二运算数的各自半字加法和半字减法;以及将从所述并行半字加法和半字减法运算中产生的和与差提供到所述寄存器堆的 所指定目的地寄存器的各自顶部和底部半字位置。
8. 根据权利要求7所述的方法,其进一步包括在将所述和与差提供到所述所指定目的 地寄存器的各自顶部和底部半字位置之前经由移位来等分所述和与差。
9. 根据权利要求7所述的方法,其进一步包括检测所述各自和与差中的上溢或下溢状 况,且如果检测到任何此类状况,那么在将所述和或差提供到所述所指定目的地寄 存器之前使其中发生此类状况的所述和或差饱和。
全文摘要
微处理器对从寄存器堆(19)的指定源寄存器(REGA、REGB)的指定顶部(_T)或底部(_B)半字位置获得的半字运算数并行执行紧缩半字加法和减法运算,且此类运算的和与差结果被紧缩到指定目的地寄存器(DST_REG)的各自顶部和底部半字位置中。所述微处理器包含具有加法器电路的算术逻辑单元(ALU 11),所述加法器电路可选择性地分为独立的半字加法器(13、15),所述半字加法器可独立选择(ADDSUB_CTL_T、ADDSUB_CTL_B)以对所述选定半字运算数(OP_B_T、OP_A_T、OP_B_B、OP_AB)执行加法运算或减法运算。所述ALU的所述半字加法器经由在所述顶部和底部半字位置中间进行选择的一组多路复用器(21-26)从源寄存器存取所述运算数。还可提供具有对所述和与差结果的等分及饱和修改的运算。
文档编号G06F7/42GK101438239SQ200780005328
公开日2009年5月20日 申请日期2007年1月17日 优先权日2006年2月13日
发明者厄于温·斯特伦, 埃里克·K·雷诺, 龙尼·彼得森 申请人:爱特梅尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1