一种用于处理器的扩展浮点运算指令执行方法及装置与流程

文档序号:15215869发布日期:2018-08-21 16:51阅读:229来源:国知局

本发明涉及微处理器的体系结构技术领域,具体地说,本发明涉及一种用于处理器的扩展浮点运算指令执行方法及装置。



背景技术:

随着嵌入式系统,便携式系统,和用电池供电的系统的增加,对低功耗电子系统的需求日益增加。在这些系统中,微处理器是功耗较大的部分。而在微处理器中,寄存器文件又是主要的能耗单元之一。比如:motorola的m.core架构,寄存器文件的功耗占整个处理器功耗的16%,占总个数据路径功耗的42%。现有技术中,已经提出过一些在工艺、rtl设计这些较低层次运用的低功耗技术,然而,这些技术减少静态功耗的效果有限。另一方面,研究者们还提出了高抽象层次低功耗方法,目前,高抽象层次低功耗方案主要是通过减少寄存器文件的读写次数的方法来减少动态功耗。例如,一种方案是:将寄存器文件划分成两个子寄存器文件,一个尺寸较小,功耗较低,访问次数较多;另一个尺寸较大,功耗较大,访问次数较少(可参考文献:customizationofregisterfilebankingarchitectureforlowpower.vlsid,2007)。又例如,另一种方案中,将部分(例如45%)的操作结果作为临时值通过前推电路来使用,而不存入寄存器文件中,这样就可以减少读写寄存器文件的次数,达到减小功耗的目的(可参考文献:selectivewriteback:reducingregisterfilepressureandenergyconsumption.ieeetrans.onvlsi,2008)。

综上所述,目前已存在一些通过降低寄存器文件功耗来降低微处理器功耗的方法,但人们总是期待微处理器的性能更高、功耗更低,因此,当前迫切需要一种在保持或提高处理器性能的同时能够进一步降低处理器功耗的解决方案。



技术实现要素:

因此,本发明的任务是提供一种在保持或提高处理器性能的同时能够进一步降低处理器功耗的解决方案。

根据本发明的一个方面,提供了一种用于处理器的扩展浮点运算指令执行方法,包括下列步骤:

1)取出扩展浮点运算指令,所述扩展浮点运算指令中至少包括定点运算的操作数存放寄存器字段和定点运算结果存放位置字段;

2)对所述扩展浮点运算进行译码,将扩展浮点指令分解成对应于一系列微操作的控制信号;

3)将步骤2)所得的控制信号派发至浮点寄存器、定点运算逻辑单元以及存放运算结果的目标寄存器;

4)基于被派发的控制信号,处理器寻址到存放定点运算的操作数的浮点寄存器并将操作数取出;

5)基于被派发的控制信号,通过扩展路径将操作数从浮点寄存器传输到定点运算逻辑单元;

6)基于被派发的控制信号,定点运算逻辑单元将运算结果传输到扩展浮点运算指令中的运算结果存放位置。

其中,所述步骤2)中,所述的对应于一系列微操作的控制信号被配置为:使得当浮点运算不使能的状态下,浮点寄存器中的数据能够被作为操作数读取。

其中,所述步骤2)中,所述的对应于一系列微操作的控制信号还被配置为:使得处理器能够寻址到存放定点运算的操作数的浮点寄存器并将操作数取出;通过扩展路径将操作数从浮点寄存器传输到定点运算逻辑单元;以及使得定点运算逻辑单元将运算结果传输到扩展浮点运算指令中的运算结果存放位置。

其中,所述步骤6)中,所述运算结果的存放位置是定点寄存器或者浮点寄存器。

其中,所述步骤1)中,所述扩展浮点运算指令的格式为寄存器-寄存器类型。

其中,所述步骤1)中,浮点寄存器为64位寄存器,所述扩展浮点运算指令中,将定点运算的两个操作数分别放在同一个浮点寄存器的高低32位。

其中,所述步骤1)中,所述扩展浮点运算指令中,将原浮点运算指令中的两个指定源操作数寄存器的域中的一个作为指定扩展浮点运算指令的源操作数的域,将原浮点运算指令中的两个指定源操作数寄存器的域中的另一个作为指令扩展编码域。

其中,所述步骤1)中,所述指令扩展编码域用于指定源操作数的位宽和保存在目标浮点寄存器的位置。

根据本发明的另一个方面,还提供了一种用于处理器的扩展浮点运算指令执行装置,包括:

取指单元,用于取出扩展浮点运算指令,所述扩展浮点运算指令中至少包括定点运算的操作数存放寄存器字段和定点运算结果存放位置字段;

译码单元,用于对所述扩展浮点运算进行译码,将扩展浮点指令分解成对应于一系列微操作的控制信号;

派发单元,用于将所得的控制信号派发至浮点寄存器、定点运算逻辑单元以及存放运算结果的目标寄存器;

取操作数单元,用于基于被派发的控制信号,使处理器寻址到存放定点运算的操作数的浮点寄存器并将操作数取出;

运算单元,用于基于被派发的控制信号,通过扩展路径将操作数从浮点寄存器传输到对应的定点运算逻辑单元;以及

运算结果存放单元,用于基于被派发的控制信号,使定点运算逻辑单元将运算结果传输到扩展浮点运算指令中的运算结果存放位置。

其中,所述译码单元还用于将所述的对应于一系列微操作的控制信号配置为:使得当浮点运算不使能的状态下,浮点寄存器中的数据能够被作为操作数读取;使得处理器能够寻址到存放定点运算的操作数的浮点寄存器并将操作数取出;通过扩展路径将操作数从浮点寄存器传输到定点运算逻辑单元;以及使得定点运算逻辑单元将运算结果传输到扩展浮点运算指令中的运算结果存放位置。

与现有技术相比,本发明具有下列结束效果:

1、本发明将浮点寄存器复用为通用寄存器,相当于增加了通用寄存器数量,增加了在寄存器中保存的数据量,从而提高了运算速度,提高处理器资源利用率。

2、本发明的一个实施例中,直接将扩展浮点指令设置为短操作数指令,在指令中指定短操作数的宽度,不需要检测或预测操作数的宽度,有助于降低功耗。

3、本发明的一个实施例中,将两个源操作数放在同一个浮点寄存器中,能够减少寄存器的读写次数,达到降低功耗的目的。

4、本发明的一个实施例中,扩展浮点指令相对于原始浮点指令的修改较小,对原始处理器的改动较小,易于实现。

附图说明

以下,结合附图来详细说明本发明的实施例,其中:

图1示出了本发明一个实施例处理器指令执行的流水线结构;

图2示出了一个原始powerpc架构浮点指令的格式;

图3示出了一个powerpc架构原浮点加指令格式和扩展浮点加指令格式的对比图;其中,(a)部分示出了一个powerpc架构原浮点加指令格式,(b)部分示出了一个powerpc架构扩展浮点加指令格式;

图4示出了一种可以独立读写高32位与低32位浮点寄存器。

具体实施方式

目前常用的处理器(如:powerpc,mips)都是既有定点处理单元(通用寄存器)也有浮点处理单元(浮点寄存器)。有些应用浮点处理比定点处理占优势,如视频编解码器中的dct(离散余弦变换)是专为定点处理器运算而设计的,它只精确到位,因此用定点运算更好。而有些应用使用浮点处理更好,如军用雷达就经常使用浮点处理。而现有的处理器架构中,当不进行浮点操作时,浮点寄存器被闲置,如booke指令集中所有的浮点指令只有在机器状态寄存器msr[fp]=1时才能执行,否则会产生浮点不可用中断。对于mips架构,abs.ps,add.ps,ceil.l.d,cvt.d.l,floor.l.d,mov.ps,mul.ps,neg.ps,nmadd.ps,nmsum.ps,sub.ps,trunc.l等指令只能在sr[fr]=1模式下执行,否则这些指令的目的寄存器的值未知。

而另一方面,发明人研究发现,现有的处理器架构下通用寄存器却常不够用,需要用寄存器重命名去解决冲突问题,导致开销上升。

基于上述分析,发明人提出了一种通过将闲置的浮点寄存器复用为通用寄存器来减少资源浪费,进而提升处理器性能的解决方案。下面结合附图和实施例对本发明做进一步的描述。

根据本发明的一个实施例,提供了一种用于处理器的扩展浮点运算指令执行方法。本实施例中,为了实现浮点寄存器作为通用寄存器的使用,对原始powerpc架构浮点指令进行了扩展,得到扩展浮点指令。其中,指令是计算机规定执行操作的类型和操作数的基本命令。指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字和特征码。浮点指令又称为浮点运算指令,它是计算机规定的执行浮点运算操作的基本命令。而扩展浮点指令是在浮点运算指令的基础上进行的扩展,它基于处理器指令执行的流水线结构来执行。

图1示出了本实施例的处理器指令执行的流水线结构。本实施例中,当浮点使能位使能(即msr[fp]=1’b1)时,浮点运算指令经过取指11,译码12,从浮点寄存器16取出数据,然发送到浮点发射队列17。这与现有技术是一致的。而与现有技术不同是,当浮点使能位不使能(即msr[fp]=1’b0)时,且当前指令为扩展浮点指令时,该扩展浮点指令(通常是扩展浮点运算指令)经过取指11,译码12,仍然从浮点寄存器16取出数据,然后被发送到定点处理队列15中,并由定点处理单元(即通用alu)进行运算。为实现上述流程,本实施例的处理器中增加了浮点寄存器到定点处理单元的数据路径。

进一步地,本实施的用于处理器的扩展浮点运算指令执行方法具体包括下列步骤:

步骤1:取指。即取出需要执行的指令。指令可以是各种类型的,例如定点运算指令、浮点运算指令、扩展浮点运算指令等。本实施例中,定点运算指令和浮点运算指令的处理方式与现有技术完全一致,因此不再赘述。而扩展浮点运算指令是本发明不同于现有技术的部分,它的后续处理方式与现有技术不同。本实施例中,扩展浮点运算指令本身是在原始的浮点运算指令基础上的扩展,目的是使浮点寄存器能够被利用来进行定点运算。为实现上述目的,在扩展浮点运算指令中,原浮点运算指令中的部分字段的含义将被修改为定点运算的操作数存放寄存器字段和定点运算结果存放位置字段。

步骤2:即对所取出的指令进行译码。译码通常由译码单元完成,译码单元是cpu控制部件,主要负责对指令译码,它把指令分解成一系列的微操作,然后生成各种控制信号以便执行微操作系列从而完成一条指令的执行。本实施例中,由于扩展浮点指令的具体微操作相对于与原始的浮点运算指令发生了变化,因此译码单元也会做出相应的扩展,使得这些扩展后的微操作系列能够顺利执行。

步骤3:将译码后得到的相应微操作的控制信号派发至参与当前扩展浮点运算指令执行的各个部件,包括:存放操作数的浮点寄存器、定点alu以及存放运算结果的目标寄存器等。

步骤4:基于译码所得的控制信号,从当前扩展浮点运算指令中对应字段寻址到对应的浮点寄存器,从该浮点寄存器中取出操作数。

步骤5:基于译码所得的控制信号,将当前扩展浮点运算指令和所取出的操作数发送到定点指令队列。

步骤6:基于译码所得的控制信号,由当前扩展浮点运算指令对应的定点执行单元执行运算,获得运算结果。

步骤7:基于译码所得的控制信号,定点执行单元将运算结果存储至当前扩展浮点运算指令中相应字段对应的目标寄存器。

上述步骤1~7就构成了扩展浮点运算指令执行流水中的一个循环。基于上述指令执行方法,浮点寄存器能够被利用来进行定点运算,缓解通用寄存器数目不足的压力,从而提升处理器性能。

进一步地,在一个优选实施例中,扩展浮点运算指令执行完成后,结果既可以保存在通用寄存器中,也可以保存在浮点寄存器中,因此该优选实施例的处理器中还增加了定点处理单元到浮点寄存器的数据路径19。具体地,写入到浮点寄存器文件的值可能来源于各个alu单元(如加法,乘法,除法,移位等),实现时用多路选择器从各个alu单元的结果中选择一个写入到寄存器文件中,选择信号由各个alu单元给出。在一个例子中,增加整数alu(即定点alu)到浮点寄存器的路径的方法是:将整数alu的输出线路及相应的控制信号线路连接到浮点寄存器前级的多路选择器上。

在一个优选实施例中,所扩展的浮点指令的格式为r-r类型(即寄存器-寄存器类型)。图2示出了一种原始powerpc架构浮点指令的格式。其中fra23与frb24为浮点运算的两个源操作数的存放位置,它们通常指向两个浮点寄存器。frt22为浮点指令执行完成后结果保存的目标浮点寄存器。

根据统计,40%的操作数可以用16位来表示,45%的操作数可以用32位来表示。只有15%的操作数需要用64位来表示,而浮点寄存器通常为64位。因此,将浮点寄存器复用为通用寄存器时,可以将两个操作数分别放在同一个浮点寄存器的高低32位中。那么对图2所示的原始浮点指令进行扩展时,只需要一个浮点寄存器域(fra23或frb24)来指定源操作数的位数。另一个域可以用于扩展指令编码,下面,以用这个域指定源操作数的位宽和保存在目标浮点寄存器的位置为例介绍指令扩展编码的方法,但需要说明,指令扩展编码的方法不限于指定源操作数的位宽和保存在目标浮点寄存器的位置。

接下来,以扩展一条powerpc架构浮点加指令为例,说明本实施例中指令扩展的原理。如图3的(a)部分所示为powerpc架构浮点加指令的格式,其属于r-r类型指令,其中31为浮点加指令的操作码,32为浮点加指令目标寄存器,33和34为浮点加的两个源操作数寄存器。35为浮点加指令的扩展码。如图3的(b)部分所示为powerpc架构扩展浮点加指令的格式。扩展的指令的操作码36与原浮点加指令的操作码31相同。扩展的指令的扩展码310与原浮点加指令的扩展码35相同。扩展指令用frb39来指定源操作数的存放位置(该存放位置是一个浮点寄存器的位置)。而ext_ctrl域38用于指定源操作数的宽度。ext_ctrl[1:0]为2’b11时,操作数为32位宽,ext_ctrl[1:0]为2’b10时,操作数为16位宽,ext_ctrl[1:0]为2’b01时,操作数为8位宽。扩展指令执行的结果保存在37中,37既可以是浮点寄存器,也可以是通用寄存器,示例中保存在了浮点寄存器中,由ext_ctrl[2]来指定保存在37的高32位还是低32位。上述的扩展指令的功能可用以下的式子表示:

ext_ctrl[2]=0时,

ctrl[1:0]=11时,frt[31:0]←frb[63:32]+frb[31:0]

ctrl[1:0]=10时,frt[15:0]←frb[47:32]+frb[15:0]

ctrl[1:0]=01时,frt[7:0]←frb[39:32]+frb[7:0]

ext_ctrl[2]=1时,

ctrl[1:0]=11时,frt[63:32]←frb[63:32]+frb[31:0]

ctrl[1:0]=10时,frt[47:32]←frb[47:32]+frb[15:0]

ctrl[1:0]=01时,frt[39:32]←frb[39:32]+frb[7:0]

为了与上述扩展浮点加指令相适配,浮点寄存器具有独立读写高32位与低32位的能力。图4所示为可以独立读写高32位与低32位浮点寄存器。将浮点寄存器分为高32位部分41与低32位部分42。当保存在高32位时,高32位部分的写使能有效。当保存在低32位时,低32位部分的写使能有效。

另外,除了浮点加指令以外,其它浮点运算类指令(例如浮点减、浮点乘、浮点除等指令也可以按照类似的方法进行扩展,本文中不再赘述。

进一步地,根据本发明的一个实施例,还提供了用于处理器的扩展浮点运算指令执行装置,该装置包括:取指单元、译码单元、派发单元、取操作数单元、运算单元、运算结果存放单元和用于完成数据传输的扩展路径。

其中,取指单元用于取出扩展浮点运算指令。扩展浮点运算指令中至少包括定点运算的操作数存放寄存器字段和定点运算结果存放位置字段。

译码单元用于对所取出的扩展浮点运算指令进行译码,将扩展浮点指令分解成一系列的微操作,然后生成对应的各种控制信号。这些控制信号被配置为:使得当浮点运算不使能的状态下(例如机器状态寄存器msr[fp]=0时),浮点寄存器中的数据能够被作为操作数读取;处理器寻址到存放定点运算的操作数的浮点寄存器并将操作数取出;通过扩展路径将操作数从浮点寄存器传输到定点alu;定点alu将运算结果传输到扩展浮点运算指令中的运算结果存放位置。该存放位置可以是定点寄存器,也可以是浮点寄存器。当是浮点寄存器时,定点alu将运算结果通过扩展路径进行传输。

派发单元用于将译码单元所生成的各种控制信号派发到参与当前扩展浮点运算指令执行的各个部件,包括:存放操作数的浮点寄存器、定点alu以及存放运算结果的目标寄存器等。

取操作数单元用于基于被派发的控制信号,使处理器寻址到存放定点运算的操作数的浮点寄存器并将操作数取出。

运算单元用于基于被派发的控制信号,通过扩展路径将操作数从浮点寄存器传输到对应的定点运算逻辑单元。

运算结果存放单元用于基于被派发的控制信号,使定点运算逻辑单元将运算结果传输到扩展浮点运算指令中的运算结果存放位置。

在一个优选实施例中,扩展路径包括浮点寄存器到定点处理单元的数据路径,以及定点alu到浮点寄存器的数据路径。

最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和教导范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1