CN101930281B - 一种降低cpu功耗的方法及一种低功耗cpu - Google Patents

一种降低cpu功耗的方法及一种低功耗cpu Download PDF

Info

Publication number
CN101930281B
CN101930281B CN2010102568196A CN201010256819A CN101930281B CN 101930281 B CN101930281 B CN 101930281B CN 2010102568196 A CN2010102568196 A CN 2010102568196A CN 201010256819 A CN201010256819 A CN 201010256819A CN 101930281 B CN101930281 B CN 101930281B
Authority
CN
China
Prior art keywords
instruction
read
register
write
cpu
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2010102568196A
Other languages
English (en)
Other versions
CN101930281A (zh
Inventor
姜君
张紧
晏晓京
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Ingenic Semiconductor Co Ltd
Original Assignee
Beijing Ingenic Semiconductor Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Ingenic Semiconductor Co Ltd filed Critical Beijing Ingenic Semiconductor Co Ltd
Priority to CN2010102568196A priority Critical patent/CN101930281B/zh
Publication of CN101930281A publication Critical patent/CN101930281A/zh
Application granted granted Critical
Publication of CN101930281B publication Critical patent/CN101930281B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

本发明提供了一种降低CPU功耗的方法、装置及一种低功耗CPU,以降低CPU功耗。所述方法包括:比较当前指令的读寄存器堆操作与前n级指令的写寄存器堆操作,如果当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则省略当前指令读该寄存器地址的操作;其中,n的取值为CPU流水线上bypass路径的最大跨度值。本发明通过省略DE步骤中多余的读GRF操作来降低CPU的功耗。而且,从硬件设计角度,本发明可以充分利用现有的电路而无需增加很多硬件单元。

Description

一种降低CPU功耗的方法及一种低功耗CPU
技术领域
本发明涉及微处理器技术领域,特别是涉及一种降低CPU功耗的方法、装置及一种低功耗CPU。 
背景技术
CPU的流水线结构最初在RISC(精简指令集)CPU的硬件设计上得到广泛应用,但今天无论是RISC CPU还是CISC(复杂指令集)CPU,在硬件实现上都采用了多极流水线结构。以经典的RISC CPU五级流水线结构为例,参照图1所示,包括五个步骤:IF、DE、EX、MEM和WB,各步骤功能如下: 
1)IF步骤:包括从指令存储器(例如RAM、Cache等)中读出指令,然后将指令存入IF/DE流水线寄存器RIF等; 
2)DE步骤:包括把从RIF取出来的指令进行译码,生成当前指令的控制信息,从寄存器堆GRF读出数据,把控制信息和数据存入DE/EX流水线寄存器RDE等。其中,控制信息包括对当前步骤的控制信息(D)以及对后续步骤EX的控制信息(E)、对步骤MEM的控制信息(M)和对步骤WB的控制信息(W);D包括是否读GRF(GRFRead)、读寄存器地址(GRFRaddr);E包括运算操作控制(ALUop)、ALU数据来源选择(ALUSrc)等;M包括是否读内存(Memread)、是否写内存(Memwrite)等;W包括是否写GRF(GRFWrite)、GRF数据来源选择(MemReg)、所写GRF寄存器地址(GRFWaddr)等; 
3)EX步骤:包括从RDE获得E、M、W,从bypass或RDE获得执行数据运算用的数据,根据E执行数据运算,把运算结果写入EX/MEM流水线寄存器REX,把M、W写入REX等; 
4)MEM步骤:包括从REX获得M、W,根据M对从bypass或REX获得的内容进行相应的操作,根据M对操作结果进行访问内存的操作,根据M对操作结果或从bypass或REX获得的内容进行写入MEM/WB流水线寄存 器RMEM的操作,把W写入RMEM等; 
5)WB步骤:包括从RMEM获得W,根据W对从RMEM获得的内容进行写入GRF的操作等。如果虚线所示的bypass路径存在,则将相应内容存入MEM/WB流水线寄存器RWB。 
还需要说明的是,图1中: 
1)INSTx,INSTx+1,INSTx+2,INSTx+3,INSTx+4......:代表CPU顺序执行的连续的指令,每条指令都要流过CPU流水线上五个处理步骤; 
2)Ty,Ty+1,Ty+2,Ty+3,Ty+4,Ty+5,......:代表CPU中每个时钟周期的开始时刻,两个相邻的时间点相差一个CPU的时钟周期; 
3)指令间的连线代表CPU中的bypass路径,如REX到EX的连线,RMEM到MEM或EX的连线,RWB到MEM或EX的连线。bypass被用来把流水线上一条指令产生的数据在其写入寄存器堆GRF之前向流水线上使用该数据的后续指令直接传输。其中虚线表示的bypass路径可能存在也可能不存在,这取决于GRF设计,如果位于DE步骤的读GRF发生在下降沿,位于WB步骤的写GRF发生在上升沿,并且时钟上升沿写入的数据当拍时钟下降沿能够读到,那么此bypass路径不需要,否则就需要安排这个路径; 
4)如果上述虚线所示的bypass路径存在,则WB步骤后就存在流水线寄存器RWB,否则无需此流水线寄存器; 
5)图中只示出了指令INSTx到其后三条指令的bypass路径,实际上,每条指令都存在直接将数据传输到后续指令的bypass路径。 
上述Bypass装置优化了CPU流水线结构,如果没有Bypass装置,CPU的指令执行效率会出现非常巨大的损失,降到一半甚至更差。因为指令的执行一般需要先从寄存器堆GRF中读取原操作数,指令执行完毕后需要将结果即目标操作数写入GRF。而程序通常普遍具有紧密的“写-读”数据依赖,即一条指令产生的数据(写)被紧随其后的第1、2、3...条指令所使用(读)。由于指令的执行是流水线方式,读GRF与写GRF之间相距数个时钟周期,而相邻的指令之间为了执行效率的缘故尽可能只相隔一个周期。后面指令要使用前面指令的执行结果,如果没有bypass路径,这条指令就需要等到前面 的指令将结果写入GRF后再将它读出来,这样会阻塞流水线多个周期。Bypass是一个旁路装置,在不影响该数据写入GRF的情况下将此数据直接送给需要使用它的紧随其后的第1、2、3...条指令,数据可以直接送达使用它们的电路,而不是按节拍经过流水线各级装置。 
在CPU运行过程中每条指令的执行因该指令而定,有些进行所有五个步骤,有些可能只进行其中几个。进行哪些步骤由DE步骤中译码后的控制信息进行控制。如果某个步骤不执行,那么该步骤之前流水线寄存器中的内容要在该步骤对应的工作时间里,被传递到该步骤之后的那个流水线寄存器。 
从上述CPU设计来看,目前的CPU流水线结构由于有了Bypass装置的优化,大大提高了CPU的执行效率。但是,在保证效率的同时如何降低CPU的功耗,生产尽可能低功耗的CPU,是微处理器领域未来的一个发展趋势,也是本发明要解决的一个问题。 
发明内容
本发明所要解决的技术问题是提供一种降低CPU功耗的方法、装置及一种低功耗CPU,以降低CPU功耗。 
为了解决上述问题,本发明公开了一种降低CPU功耗的方法,包括: 
比较当前指令的读寄存器堆操作与前n级指令的写寄存器堆操作,如果当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则省略当前指令读该寄存器地址的操作;所述比较包括:获得当前指令读寄存器堆的控制信息和前n级指令写寄存器堆的控制信息;当根据所述读寄存器堆的控制信息判断当前指令为读寄存器堆时,对前n级指令每条进行如下判断:判断是否写寄存器堆,如果写,则继续判断该指令的写寄存器地址是否与当前指令的读寄存器地址相同;其中,n的取值为CPU流水线上bypass路径的最大跨度值。 
优选的,所述方法还包括:如果前n级指令中没有指令执行写操作,或者前n级指令中的至少一条指令执行写操作,但执行写操作的指令中所有的 写寄存器地址都与当前指令的读寄存器地址不同,则执行当前指令读该寄存器地址的操作。 
优选的,所述读寄存器堆的控制信息包括是否读的信息和所读寄存器地址,写寄存器堆的控制信息包括是否写的信息和所写寄存器地址。其中,如果省略当前指令读该寄存器地址的操作,则当前指令通过bypass路径获得前n级指令中的某条指令要写入该寄存器地址的结果;如果执行当前指令读该寄存器地址的操作,则当前指令从该寄存器地址中读取数据。 
其中,通过以下方式获得当前指令读寄存器堆的控制信息和前n级指令写寄存器堆的控制信息:CPU五级流水线的寄存器依次为RIF、RDE、REX、RMEM、RWB,则n的最大值为3;当前指令读寄存器堆的控制信息从指令译码结果中获得;前面第一级指令写寄存器堆的控制信息从流水线寄存器RDE获得;前面第二级指令写寄存器堆的控制信息从流水线寄存器REX获得;前面第三级指令写寄存器堆的控制信息从流水线寄存器RMEM获得。 
相应的,本发明还提供了一种低功耗CPU,包括: 
寄存器堆,用于存储指令执行所需的原操作数和指令执行后的目标操作数; 
数据源信号产生模块,用于比较当前指令的读寄存器堆操作与前n级指令的写寄存器堆操作,如果当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则输出从bypass路径读取数据的信号;其中,n的取值为CPU流水线上bypass路径的最大跨度值; 
读寄存器堆控制模块,用于当数据源信号产生模块输出的信号为从bypass路径读取数据时,向当前指令的读寄存器地址输出不允许读的控制信号,表示省略当前指令读该寄存器地址的操作; 
所述数据源信号产生模块包括: 
控制信息获取子模块,用于获得当前指令读寄存器堆的控制信息和前n级指令写寄存器堆的控制信息;
判断子模块,用于当根据所述读寄存器堆的控制信息判断当前指令为读寄存器堆时,对前n级指令每条进行如下判断:判断是否写寄存器堆,如果 写,则继续判断该指令的写寄存器地址是否与当前指令的读寄存器地址相同,如果相同,则输出从相应bypass路径读取数据的信号,并停止下一条指令的判断。 
优选的,所述读寄存器堆的控制信息包括是否读的信息和所读寄存器地址,写寄存器堆的控制信息包括是否写的信息和所写寄存器地址。 
优选的,所述数据源信号产生模块的判断子模块还用于,当前n级指令中没有指令执行写操作,或者前n级指令中的至少一条指令执行写操作,但执行写操作的指令中所有的写寄存器地址都与当前指令的读寄存器地址不同时,输出从当前指令的读寄存器地址读取数据的信号; 
则所述读寄存器堆控制模块还用于,当数据源信号产生模块输出的信号为从当前指令的读寄存器地址读取数据时,向当前指令的读寄存器地址输出允许读的控制信号,表示执行当前指令读该寄存器地址的操作。 
其中,当所述CPU为五级流水线结构时,还包括五个流水线寄存器,依次为RIF、RDE、REX、RMEM、RWB,则n的最大值为3;所述数据源信号产生模块的控制信息获取子模块从指令译码结果中获得当前指令读寄存器堆的控制信息;从流水线寄存器RDE获得前面第一级指令写寄存器堆的控制信息;从流水线寄存器REX获得前面第二级指令写寄存器堆的控制信息;从流水线寄存器RMEM获得前面第三级指令写寄存器堆的控制信息。 
优选的,所述寄存器堆包括多个端口,每个端口对应一个寄存器地址,则所述指令的读寄存器地址和写寄存器地址分别包括多个。 
与现有技术相比,本发明具有以下优点: 
首先,本发明提供了一种降低CPU功耗的方法:如果U和V是流水线上的指令,U在前,V在后,指令U要写GRF某个寄存器,该流水线上后面的指令V要读GRF的该寄存器时,在CPU流水线的DE步骤中进行逻辑判断,该逻辑判断可以在D(DE的控制信息)中已经设定要读GRF的情况下,判断读GRF的操作是否可以不执行,如果判断结果为可以不执行,则不进行读GRF的操作,而是使用bypass路径把U要写入GRF的结果传输 给流水线上后续的指令V。由上可知,本发明通过省略DE步骤中多余的读GRF操作来降低CPU的功耗。 
其次,从硬件设计角度,本发明充分利用了原有数据源信号产生模块中的逻辑判断功能,只需在原有的CPU结构上增加读寄存器堆控制模块,并将所述数据源信号产生模块的输出信号接入所述读寄存器堆控制模块,利用数据源信号产生模块的逻辑判断结果来修改直接从指令译码结果得到的读GRF控制信号,从而排除多余的GRF读操作。因此,本发明可以充分利用现有的电路而无需增加很多硬件单元。 
再次,在本发明提出之前,本领域技术人员很少会发现CPU流水线结构中存在多余的读GRF操作,在bypass路径的优化下,仍普遍认为指令译码后判断为读GRF就执行读操作是顺其自然的,即使出于降低CPU功耗的目的,也很少考虑从CPU流水线的执行步骤来寻找降低的方法,因为CPU流水线结构已经是非常成熟的CPU设计方法,现有的CPU普遍都遵循这种设计。但本发明的发明人恰恰打破这种惯性思维,发现CPU流水线结构中还存在着耗费CPU功耗的读操作,所以本发明在兼顾指令执行效率的情况下,对现有的CPU流水线中的操作步骤进行了上述改进。 
附图说明
图1是现有技术的RISC CPU五级流水线示意图; 
图2是本发明实施例所述五步CPU流水线的DE步骤中逻辑判断的处理流程图; 
图3是现有技术中CPU涉及DE处理的硬件结构示意图; 
图4是本发明实施例所述的CPU涉及DE处理的硬件结构示意图; 
图5是本发明实施例所述一种降低CPU功耗的装置结构图; 
图6是本发明实施例所述一种低功耗的CPU结构图。 
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。 
为了尽可能的降低CPU功耗,本发明从以下角度进行分析,最终提出一种降低CPU功耗的方法,具体分析如下: 
从图1对RISC指令的分析来看,绝大部分指令从GRF读一个、两个甚至更多操作数,只有极少数指令不从GRF读操作数,而且大部分指令(约70%)写GRF。由此可知,CPU运行过程中GRF的读写操作消耗相当可观的功耗。 
更进一步分析发现,CPU处理流水线上的指令经常遇到这样的情况:U和V是流水线上的指令,U在前,V在后,指令U要写GRF的某个寄存器,后面的指令V要读GRF的同一个寄存器(例如:U的指令是R2=R1+R3,V的指令是R5=R2+R4)。如果V进入指令译码步骤时U还在流水线上,并且根据流水线结构V是通过bypass路径得到U指令准备写入GRF的结果,那么V指令的读GRF操作就是多余的,会造成CPU功耗的浪费,因此可以取消V指令的读GRF操作以节省功耗。因为此时V指令从GRF中读出的数据是在U写入之前,V读到的并非正确值,当V使用时用的是从bypass路径传递的数据而不是从GRF中读出的结果。 
综上分析得知,CPU运行过程中存在着大量无需读GRF的多余操作,耗费了CPU功耗。基于该分析结果,本发明提出了一种降低CPU功耗的方法,通过省略DE步骤中多余的读GRF操作来降低CPU的功耗。 
本发明的核心思路是:假设U和V是流水线上的指令,U在前,V在后,指令U要写GRF某个寄存器,但该流水线上后面的指令V要读GRF的同一个寄存器时,在CPU流水线的DE步骤中进行逻辑判断,该逻辑判断可以在D(DE的控制信息)中已经设定要读GRF的情况下,判断读GRF的操作是否可以不执行,如果判断结果为可以不执行,则不进行读GRF的操作,而是使用bypass路径把U要写入GRF的结果传输给流水线上后续的指令V。 
需要说明的是,在本发明提出之前,本领域技术人员很少会发现CPU流水线结构中存在多余的读GRF操作,在bypass路径的优化下,仍普遍认为指令译码后判断为读GRF就执行读操作是顺其自然的,即使出于降低CPU 功耗的目的,也很少考虑从CPU流水线的执行步骤来寻找降低的方法,因为CPU流水线结构已经是非常成熟的CPU设计方法,现有的CPU普遍都遵循这种设计。但本发明的发明人恰恰打破这种惯性思维,发现CPU流水线结构中还存在着耗费CPU功耗的读操作,所以本发明在兼顾指令执行效率的情况下,对现有的CPU流水线中的操作步骤进行了上述改进。 
下面通过实施例进行详细说明。 
现在考虑两种比较常见的流水线设计: 
①如图1中无虚线bypass路径,没有寄存器RWB; 
②如图1中有虚线bypass路径,有寄存器RWB。 
如果CPU流水线设计为上述第①种情况,指令V要使用指令U写入GRF的数据,且V是U后第1、2条指令之一,那么指令V从GRF中读这个数据的操作无需发生,因为V是使用bypass路径获得U要写入GRF的结果来完成V的操作,不用读GRF来获得U要写入GRF的结果。所以,这时,如果按照V的控制信息来执行相应的读GRF操作是多余的,会造成CPU功耗的浪费。其中,V中使用U要写入GRF的结果能够从自己的EX/MEM步骤与当时CPU时钟周期的前一个CPU时钟周期里U的对应步骤后的流水线寄存器间的bypass获得。一条指令中EX和MEM的结果可能相同、也可能不同,用哪个步骤对应的bypass要看实际的情况。 
如果CPU流水线设计为上述第②种情况,指令V要使用指令U写入GRF的数据,且V是U后第1、2、3条指令之一,那么指令V从GRF中读这个数的操作无需发生,因为V是使用bypass路径获得U要写入GRF的结果来完成V的操作,不用读GRF来获得U要写入GRF的结果,所以,这时,如果按照V的控制信息来执行相应的读GRF操作是多余的,会造成CPU功耗的浪费。其中,V中使用U要写入GRF的结果能够从自己的EX/MEM步骤与当时CPU时钟周期的前一个CPU时钟周期里U的对应步骤后的流水寄存器间的bypass获得。一条指令中EX和MEM的结果可能相同、也可能不同,用哪个步骤对应的bypass要看实际的情况。 
上述两种CPU流水线设计,无论是哪一种设计,本发明都可以在DE步骤中进行逻辑判断,通过逻辑判断来省略DE步骤中多余的读GRF操作,从而降低CPU的功耗。 
在实际应用中,经典的CPU流水线分为五个步骤,但也存在大于五步的流水线结构,大于五步的CPU流水线相当于把五步流水线的一个或多个步骤分成几个子步骤。为了更清楚介绍本发明DE步骤中逻辑判断的处理流程,下面分别对五步CPU流水线和大于五步的CPU流水线进行说明。当然,大于五步骤的CPU流水线的处理流程同样适用于五步CPU流水线。 
1、五步CPU流水线 
五步CPU流水线可参照图1所示,五个步骤分别为:IF、DE、EX、MEM和WB,五步涉及的流水线寄存器分别是:RIF、RDE、REX、RMEM,如果包括虚线的bypass路径,则还包括流水线寄存器RWB。其中,实线的bypass路径所涉及的指令为INSTx,INSTx+1,INSTx+2;虚线的bypass路径所涉及的指令为INSTx,INSTx+1,INSTx+2,INSTx+3。 
所述逻辑判断在DE步骤中执行,如前所述,DE步骤的功能是:把从RIF取出来的指令进行译码,生成当前指令的控制信息,从寄存器堆GRF读出数据,把控制信息和数据存入DE/EX流水线寄存器RDE等。其中,控制信息包括对当前步骤的控制信息(D)以及对后续步骤EX的控制信息(E)、对步骤MEM的控制信息(M)和对步骤WB的控制信息(W);D包括是否读GRF(GRFRead)、读寄存器地址(GRFRaddr)等信息;W包括是否写GRF(GRFWrite)、GRF数据来源选择(MemReg)、所写GRF寄存器地址(GRFWaddr)等信息。 
具体的,判断读GRF操作是否多余的方法是:比较当前指令的读寄存器堆操作与前n级指令的写寄存器堆操作,如果当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则省略当前指令读该寄存器地址的操作;其中,n的取值为CPU流水线上bypass路径的最大跨度值。 
在实际应用中,实现上述判断的方式有多种,下面分别给出两种实现的 示例。 
示例1: 
参照图2,是本发明实施例所述五步CPU流水线的DE步骤中逻辑判断的处理流程图。 
步骤201,获得当前指令读寄存器堆GRF的控制信息D和前n级指令写寄存器堆GRF的控制信息W; 
其中,读寄存器堆的控制信息D包括是否读的信息(GRFRead)和所读寄存器地址(GRFRaddr)等,写寄存器堆的控制信息W包括是否写的信息(GRFWrite)和所写寄存器地址(GRFWaddr)等。 
假设CPU流水线的DE步骤对应的指令是INSTx,即所述的当前指令,那么当bypass路径为图1中的实线路径时,n的取值为2,则前n级指令指当前指令前面的指令INSTx-1和INSTx-2;当bypass路径包括图1中的实线和虚线路径时,n的取值为3,则前n级指令指当前指令前面的指令INSTx-1、INSTx-2和INSTx-3。 
通过图1,当CPU五级流水线的寄存器依次为RIF、RDE、REX、RMEM、RWB时,如果当前指令处于DE步骤,则当前指令读寄存器堆的控制信息从指令译码结果中获得;此时,前面第一级指令正好处于EX步骤,因此前面第一级指令写寄存器堆的控制信息可以从流水线寄存器RDE获得;此时,前面第二级指令正好处于MEM步骤,因此前面第二级指令写寄存器堆的控制信息可以从流水线寄存器REX获得;此时,前面第三级指令正好处于WB步骤,因此前面第三级指令写寄存器堆的控制信息可以从流水线寄存器RMEM获得。 
步骤202,根据当前指令的控制信息D判断当前指令是否读寄存器堆,如果当前指令读寄存器堆,则根据前n级指令的控制信息W判断前n级指令中是否存在写寄存器堆的指令,如果存在,则执行步骤203;如果不存在,则逻辑判断结束,并执行当前指令的读寄存器堆操作; 
本步骤是判断读GRF是否多余的第一个判断步骤。 
一般指令的执行都是从GRF中读取原操作数,并在指令执行完毕后将 目标操作数写入GRF。如果指令INSTx要读GRF,只要前面的指令INSTx-1和INSTx-2(虚线的bypass路径还包括INSTx-3)中有一个指令写GRF,就需要继续执行步骤203的第二个判断。但根据控制信息W,如果前n级指令中没有指令执行写操作,则表明当前指令不会使用前面指令的结果,因此当前指令就需要执行读GRF的操作。 
当然,如果根据控制信息D判断当前指令不读GRF,则显然不存在多余的读操作。 
步骤203,将当前指令的读寄存器地址分别与前n级指令中写寄存器堆的指令的所写寄存器地址进行比较,判断是否相同,如果有一组比较结果为相同,则省略当前指令读该寄存器地址的操作;如果任何一组比较结果都为不同,则执行当前指令的读寄存器堆操作。 
本步骤是判断读GRF是否多余的第二个判断步骤。 
假设指令INSTx前面的指令INSTx-1、INSTx-2、INSTx-3(包括虚线的bypass路径)都写寄存器堆,所述“组”的概念是指指令INSTx与指令INSTx-1为一组比较读寄存器地址和写寄存器地址,指令INSTx与指令INSTx-2为一组比较读寄存器地址和写寄存器地址,存在虚线的bypass路径时,还包括指令INSTx与指令INSTx-3为一组比较读寄存器地址和写寄存器地址。 
如果至少有一组比较结果为相同,则表明当前指令INSTx会使用前面至少一条指令的结果,而且可以通过bypass路径获得,此时当前指令INSTx读GRF的操作就是多余的,可以省略此操作来节省CPU的功耗。如果任何一组比较结果都为不同,则表明虽然指令INSTx前面的3条指令(包括虚线的bypass路径)都要写寄存器堆,但所写的寄存器都与当前指令INSTx要读的寄存器不是同一个,当前指令不会使用前面指令的结果,此时指令INSTx就需要执行读GRF的操作。 
上述步骤中,如果省略当前指令INSTx读该寄存器地址的操作,则当前指令可以通过bypass路径获得前n级指令中的某条指令要写入该寄存器地址的结果;如果执行当前指令INSTx读该寄存器地址的操作,则当前指令是从该寄存器地址中读取数据。 
示例2: 
本实施例采用另外一种方法进行逻辑判断,具体为:获得当前指令读寄存器堆的控制信息和前n级指令写寄存器堆的控制信息,当根据所述读寄存器堆的控制信息判断当前指令为读寄存器堆时,对前n级指令每条进行如下判断:判断是否写寄存器堆,如果写,则继续判断该指令的写寄存器地址是否与当前指令的读寄存器地址相同;如果当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则省略当前指令读该寄存器地址的操作;如果前n级指令中没有指令执行写操作,或者前n级指令中的至少一条指令执行写操作,但执行写操作的指令中所有的写寄存器地址都与当前指令的读寄存器地址不同,则执行当前指令读该寄存器地址的操作。 
本实施例与示例1的区别在于:本实施例在对前n级指令中的每一条指令进行判断时,并列判断是否同时满足“写寄存器堆”和“写寄存器地址与当前指令的读寄存器地址相同”两个条件;而示例1是对前n级指令的所有指令先判断是否满足“写寄存器堆”,然后再对前n级指令中写寄存器堆的指令判断是否满足“所写寄存器地址与当前指令的读寄存器地址相同”。两个示例在逻辑上是等价的,只是表述方式不同。在硬件实现时两种方式没有本质区别。 
在实际应用中,寄存器堆GRF包括多个端口,每个端口对应一个寄存器地址。GRF读端口的数量因指令集而异,多数是2或3个读端口,对应每个读端口都有相应的GRFRead和GRFRaddr,即D中包括GRFRead1、GRFRead2...和GRFRaddr1、GRFRaddr2...等信息。同样,根据指令集的不同,GRF的写端口也可能是多个,对应每个写端口都有相应的GRFWrite和GRFWaddr,即W中包括GRFWrite1、GRFWrite2...和GRFWaddr1、GRFWaddr2...等信息。 
下面分别以1个写端口m个读端口和n个写端口m个读端口的情况为例,说明示例2。 
A、五步CPU流水线1个写端口m个读端口的处理流程: 
逻辑判断在DE步骤中执行,而且要在DE步骤中,已经获得了控制信 息D,但还未按照D进行任何操作的时候执行,如下: 
1)设CPU流水线的DE步骤对应的指令是INSTx; 
2)设GRFRead1||GRFRaddr1=RP1,...,GRFReadm||GRFRaddrm=RPm; 
其中,GRFRead表示是否读GRF,GRFRaddr表示所读GRF寄存器地址,‘||’代表连接。RPix代表INSTx所对应的RPi,RPi对应INSTx的每个读端口i,i=1~m。 
3)设GRFWrite ||GRFWaddr=WP; 
其中,GRFWrite表示是否写GRF,GRFWaddr表示所写GRF寄存器地址,“||”代表连接。WPx代表INSTx所对应的WP;WPx-1代表INSTx-1所对应的WP;WPx-2代表INSTx-2所对应的WP;存在虚线表示的bypass路径时,WPx-3代表INSTx-3所对应的WP。 
4)针对每个读端口i进行如下操作; 
5)判断GRFReadi是否为真(即当前指令是否读GRF端口i),如果为真进入下一步;否则退出; 
即首先判断当前指令INSTx是否读GRF端口i,如果读,则继续下面的判断,即判断当前指令的读GRF端口i是否多余;如果当前指令不读GRF端口i,则不再进行下面的判断。 
6)比较RPix和WPx-1是否相等,比较RPix和WPx-2是否相等,如果存在虚线表示的bypass路径,还要比较RPix和WPx-3是否相等。如果有一组相等,则该DE步骤中的读GRF端口i操作可以省略;否则,该DE步骤中的读GRF端口i操作要被执行。 
上述每一组比较中,以RPix和WPx-1的比较为例,具体包括以下两个步骤: 
第一步,判断WPx-1中的GRFWrite是否为真(即上一级指令INSTx+1是否写GRF),如果为真进入下一步,否则退出; 
第二步,比较WPx-1中的GRFWaddr和RPix中的GRFRaddri是否相等,如果相等,则表示RPix和WPx-1相等;否则,表示RPix和WPx-1不相等。 
B、五步CPU流水线n个写端口m个读端口的处理流程: 
逻辑判断在DE步骤中执行,而且要在DE步骤中,已经获得了控制信息D,但还未按照D进行任何操作的时候执行,如下: 
1)设CPU流水线的DE步骤对应的指令是INSTx; 
2)设GRFRead1||GRFRaddr1=RP1,...,GRFReadm ||GRFRaddrm=RPm; 
其中,GRFRead表示是否读GRF,GRFRaddr表示所读GRF寄存器地址,‘||’代表连接。RPix代表INSTx所对应的RPi,RPi对应INSTx的每个读端口i,i=1~m。 
3)设GRFWrite||GRFWaddr1=WP1,...,GRFWriten||GRFWaddrn=WPn; 
其中,GRFWrite表示是否写GRF,GRFWaddr表示所写GRF寄存器地址,“||”代表连接。WPjx代表INSTx所对应的WPj,WPj对应每个写端口j,j=1~n;WPjx-1代表INSTx-1所对应的WPj;WPjx-2代表INSTx-2所对应的WPj;存在虚线表示的bypass路径时,WPjx-3代表INSTx-3所对应的WPj。 
4)针对每个读端口i进行如下操作; 
5)判断GRFReadi是否为真(即当前指令是否读GRF端口i),如果为真进入下一步;否则退出; 
6)比较RPix和WP1x-1是否相等,...,比较RPix和WPnx-1是否相等;比较RPix和WP1x-2是否相等,...,比较RPix和WPnx-2是否相等;如果存在虚线表示的bypass路径,还要比较RPix和WP1x-3是否相等,...,比较RPix和WPnx-3是否相等。如果有任何一组相等,则该DE步骤中的读GRF端口i操作可以省略;否则,该DE步骤中的读GRF端口i操作要被执行。 
除上述示例1和示例2列举的两种逻辑判断方法外,还可能存在其它的实现方式,如通过其他方式判断是否读或写GRF而不是通过控制信息中的GRFRead或GRFWrite判断,等等,但只要总思路遵循“判断当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则省略当前 指令读该寄存器地址的操作”,均属于本发明的保护范围,具体实现方式不再一一列举。 
2、大于五步的CPU流水线 
如前所述,大于五步的CPU流水线相当于把五步流水线的一个或多个步骤分成几个子步骤,因此逻辑判断的执行与五步CPU流水线相同。下面仍以n个写端口m个读端口的逻辑判断为例: 
逻辑判断在DE步骤中执行,而且要在DE步骤中,已经获得了控制信息D,但还未按照D进行任何操作的时候执行,如下: 
1)设CPU流水线的DE步骤对应的指令是INSTx; 
2)设GRFRead1||GRFRaddr1=RP1,...,GRFReadm||GRFRaddrm=RPm; 
其中,GRFRead表示是否读GRF,GRFRaddr表示所读GRF寄存器地址,‘||’代表连接。RPix代表INSTx所对应的RPi,RPi对应INSTx的每个读端口i,i=1~m。 
3)设GRFWrite||GRFWaddr1=WP1,...,GRFWriten||GRFWaddrn=WPn; 
其中,GRFWrite表示是否写GRF,GRFWaddr表示所写GRF寄存器地址,“||”代表连接。WPjx代表INSTx所对应的WPj,WPj对应每个写端口j,j=1~n;WPjx-1代表INSTx-1所对应的WPj;WPjx-2代表INSTx-2所对应的WPj;存在虚线表示的bypass路径时,WPjx-3代表INSTx-3所对应的WPj。 
4)针对每个读端口i进行如下操作; 
5)判断GRFReadi是否为真(即当前指令是否读GRF端口i),如果为真进入下一步;否则退出; 
6)比较RPix和WP1x-1是否相等,...,比较RPix和WPnx-1是否相等;比较RPix和WP1x-2是否相等,...,比较RPix和WPnx-2是否相等;...,比较RPix和WP1x-y是否相等,...,比较RPix和WPnx-y是否相等。如果有任何一组相等,则该DE步骤中的读GRF端口i操作可以省略;否则,该DE步骤 中的读GRF端口i操作要被执行。其中,“y”的大小取决于流水线上bypass路径的最大跨度。 
基于上述内容,下面结合CPU的硬件结构进行更详细的说明。
为了对比说明,首先介绍现有技术中的CPU硬件结构。 
参照图3,是现有技术中CPU涉及DE处理的硬件结构示意图,以五级CPU流水线1个写端口2个读端口的结构为例。 
如前所述,DE处理是把从RIF取出来的指令进行译码,生成当前指令的控制信息,从寄存器堆GRF读出数据,把控制信息和数据存入DE/EX流水线寄存器RDE等。DE的处理可由图3所示结构实现,具体说明如下: 
图中示出了流水线寄存器RIF和RDE,寄存器堆GRF,以及下面的模块。其中,GRF示出了2个读端口,分别为读地址RAddr1、读使能RE1和读地址RAddr2、读使能RE2,以及2个输出端口Dout1和Dout2。RIF中存储了指令INST,RDE中分别存储了数据源1和数据源2的选择信号(SRC1_select和SRC2_select)和数据(SRC1和SRC2)等信息。图中的“EX Logic”指EX级的处理逻辑,“其他Logic”指DE级的其他逻辑,包括但不仅限于为以后各级产生其他所需控制信号、立即数作为数据源的处理等等。 
L_RP1模块:用于产生GRF读端口1的寄存器地址GRFRaddr1,一般可以直接从指令码的某个位域得到; 
L_RE1模块:用于产生GRF读端口1的读使能GRFRead1,可通过指令码译码逻辑得到,如果此指令读端口1返回真,否则返回假; 
L_RP2模块:用于产生GRF读端口2的寄存器地址GRFRaddr2,一般可以直接从指令码的某个位域得到; 
L_RE2模块:用于产生GRF读端口2的读使能GRFRead2,可通过指令码译码逻辑得到,如果此指令读端口2返回真,否则返回假。 
L_SS1模块:用于产生数据源1选择信号SRC1_select,该信号用于下一个流水线级EX级,该信号指示EX级的数据源1从4个来源中的哪一个取得,4个来源分别是: 
(1)当指令处于上一级(DE)时从GRF端口1读出然后存入RDE中的数据; 
(2)经过bypass路径从REX来的数据; 
(3)经过bypass路径从RMEM来的数据; 
(4)经过bypass路径从RWB来的数据,该路径只有当流水线设计是情况②,即存在虚线表示的bypass路径时才有。 
L_SS1模块的逻辑如下: 
1)如果GRFRead1为真继续,否则退出; 
2)如果来自RDE的GRFWrite为真并且GRFWaddr与GRFRaddr1相等,置选择从REX的bypass路径来的数据,退出; 
3)如果来自REX的GRFWrite为真并且GRFWaddr与GRFRaddr1相等,置选择从RMEM的bypass路径来的数据,退出; 
4)如果来自RMEM的GRFWrite为真并且GRFWaddr与GRFRaddr1相等,置选择从RWB的bypass路径来的数据,退出; 
5)置选择从GRF端口1读出的数据。 
L_S1模块:是多路选择器,用于根据控制信号SRC1_select从4个来源中选择一个作为EX级的数据源1。 
L_SS2模块:用于产生数据源2选择信号SRC2_select,该信号用于下一个流水线级EX级,该信号指示EX级的数据源2从4个来源中的哪一个取得,4个来源分别是: 
(1)当指令处于上一级(DE)时从GRF端口2读出然后存入RID中的数据; 
(2)经过bypass路径从REX来的数据; 
(3)经过bypass路径从RMEM来的数据; 
(4)经过bypass路径从RWB来的数据,该路径只有当流水线设计是情况②,即存在虚线表示的bypass路径时才有。 
L_SS2模块的逻辑如下: 
1)如果GRFRead2为真继续,否则退出; 
2)如果来自RDE的GRFWrite为真并且GRFWaddr与GRFRaddr2相等,置选择从REX的bypass路径来的数据,退出; 
3)如果来自REX的GRFWrite为真并且GRFWaddr与GRFRaddr2相等,置选择从RMEM的bypass路径来的数据,退出; 
4)如果来自RMEM的GRFWrite为真并且GRFWaddr与GRFRaddr2相等,置选择从RWB的bypass路径来的数据,退出; 
5)置选择从GRF端口2读出的数据。 
L_S2模块:是多路选择器,用于根据控制信号SRC2_select从4个来源中选择一个作为EX级的数据源2。 
结合图3所示结构,DE级的处理如下(存在虚线表示的bypass路径): 
从RIF取出指令进行译码后,L_RE模块产生是否读GRF端口的控制信号GRFRead,L_RP模块产生读GRF端口的寄存器地址GRFRaddr,如果GRFRead为真,则执行读GRF端口的操作,并将读取的数据存入RDE。同时,L_SS模块通过将当前指令的读操作分别与前面第一级指令的写操作(来自RDE的GRFWrite和GRFWaddr)、前面第二级指令的写操作(来自REX的GRFWrite和GRFWaddr)、前面第三级指令的写操作(来自RMEM的GRFWrite和GRFWaddr)进行比较,来判断是否必须通过相应的bypass路径获取数据。L_SS模块最终输出数据源选择信号SRC_select,L_S模块根据信号SRC_select从4个来源中选择一个来源读取数据,供下一级EX使用。 
由上述过程可知,在L_RE模块输出为真的情况下,L_SS模块输出的信号即使为选择从bypass路径来的数据,读GRF的操作仍会执行,因此造成CPU功耗的浪费。 
参照图4,是本发明实施例所述的CPU涉及DE处理的硬件结构示意图。 
与图3相比,本实施例中的CPU结构增加了L_E1和L_E2两个模块,连接在L_RE模块和GRF之间,同时接入L_SS模块输出的信号。L_E1模块和L_E2模块分别用于修改直接从指令译码得到的GRFRead1和GRFRead2,从而排除不必要的GRF读操作。 
具体的修改方式是: 
L_E1模块:如果L_RE1的输出结果为假则输出假;如果L_RE1的输出结果为真,并且如果L_SS1的输出结果为选择GRF端口1读出结果,则输出真,否则输出假; 
L_E2模块:如果L_RE2的输出结果为假则输出假;如果L_RE2的输出结果为真,并且如果L_SS2的输出结果为选择GRF端口2读出结果,则输出真,否则输出假。 
由图4可知,所述CPU结构充分利用了原有L_SS模块的逻辑判断,即L_SS模块可以判断出当前指令使用的数据是否真正从GRF端口读取,如果L_SS模块的输出为选择从bypass路径来的数据,则当前指令读GRF端口的操作就是多余可以不执行的,L_E模块会将直接从指令译码得到的允许读的信号进行修改,向GRF输出不允许读的信号;但如果L_SS模块的输出为选择GRF端口读出结果,则当前指令读GRF端口的操作就不是多余的,此时L_E模块仍向GRF输出允许读的信号。 
需要说明的是,图4所示结构是本发明的一种优选结构,其对原有的CPU结构改变很小,但本发明不限定其他同样能通过省略多余的读GRF操作来降低CPU功耗的实现结构。 
基于上述内容,本发明还提供了一种降低CPU功耗的装置实施例。 
参照图5,是本发明实施例所述一种降低CPU功耗的装置结构图。 
所述装置主要包括: 
比较模块51,用于比较当前指令的读寄存器堆操作与前n级指令的写寄存器堆操作;其中,n的取值为CPU流水线上bypass路径的最大跨度值; 
操作控制模块52,用于当当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同时,控制当前指令读该寄存器地址的操作省略。 
相应的,如果前n级指令中没有指令执行写操作,或者前n级指令中的至少一条指令执行写操作,但执行写操作的指令中所有的写寄存器地址都与当前指令的读寄存器地址不同,则所述操作控制模块52控制当前指令读该 寄存器地址的操作执行。 
优选的,所述比较模块51进一步可以包括: 
控制信息获取子模块511,用于获得当前指令读寄存器堆的控制信息和前n级指令写寄存器堆的控制信息,其中读寄存器堆的控制信息包括是否读的信息和所读寄存器地址,写寄存器堆的控制信息包括是否写的信息和所写寄存器地址; 
判断子模块512,用于当根据所述读寄存器堆的控制信息判断当前指令为读寄存器堆时,对前n级指令每条进行如下判断:判断是否写寄存器堆,如果写,则继续判断该指令的写寄存器地址是否与当前指令的读寄存器地址相同。 
上述装置可用于CPU流水线的DE步骤处理,其硬件实现可以有多种结构,图4所示结构仅是一种优选的硬件结构。如果结合图4的硬件结构,所述比较模块51设置在L_SS模块中,所述操作控制模块52设置在L_E模块中。 
相应的,本发明还提供了一种低功耗的CPU实施例。 
参照图6,是本发明实施例所述一种低功耗的CPU结构图。 
所述CPU可以包括: 
寄存器堆61,用于存储指令执行所需的原操作数和指令执行后的目标操作数; 
数据源信号产生模块62,用于比较当前指令的读寄存器堆操作与前n级指令的写寄存器堆操作,如果当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则输出从bypass路径读取数据的信号;其中,n的取值为CPU流水线上bypass路径的最大跨度值; 
读寄存器堆控制模块63,用于当数据源信号产生模块输出的信号为从bypass路径读取数据时,向当前指令的读寄存器地址输出不允许读的控制信号,表示省略当前指令读该寄存器地址的操作。 
优选的,所述数据源信号产生模块62进一步包括: 
控制信息获取子模块,用于获得当前指令读寄存器堆的控制信息和前n 级指令写寄存器堆的控制信息,其中读寄存器堆的控制信息包括是否读的信息和所读寄存器地址,写寄存器堆的控制信息包括是否写的信息和所写寄存器地址; 
判断子模块,用于当根据所述读寄存器堆的控制信息判断当前指令为读寄存器堆时,对前n级指令每条进行如下判断:判断是否写寄存器堆,如果写,则继续判断该指令的写寄存器地址是否与当前指令的读寄存器地址相同,如果相同,则输出从相应bypass路径读取数据的信号,并停止下一条指令的判断。 
当所述CPU为五级流水线结构时,所述CPU还包括五个流水线寄存器,依次为RIF、RDE、REX、RMEM、RWB,则n的最大值为3。所述数据源信号产生模块62的控制信息获取子模块从指令译码结果中获得当前指令读寄存器堆的控制信息;从流水线寄存器RDE获得前面第一级指令写寄存器堆的控制信息;从流水线寄存器REX获得前面第二级指令写寄存器堆的控制信息;从流水线寄存器RMEM获得前面第三级指令写寄存器堆的控制信息。 
此外,所述数据源信号产生模块62的判断子模块还用于,当前n级指令中没有指令执行写操作,或者前n级指令中的至少一条指令执行写操作,但执行写操作的指令中所有的写寄存器地址都与当前指令的读寄存器地址不同时,输出从当前指令的读寄存器地址读取数据的信号。 
相应的,所述读寄存器堆控制模块63还用于,当数据源信号产生模块62输出的信号为从当前指令的读寄存器地址读取数据时,向当前指令的读寄存器地址输出允许读的控制信号,表示执行当前指令读该寄存器地址的操作。 
优选的,所述寄存器堆61可以包括多个端口,每个端口对应一个寄存器地址,则所述指令的读寄存器地址和写寄存器地址分别包括多个。而针对每个读端口,可以分别设置一个数据源信号产生模块62和一个读寄存器堆控制模块63,也可以针对所有读端口集成到一个写寄存器堆控制装置62和读寄存器堆控制模块63中。 
综上所述,所述CPU充分利用了原有数据源信号产生模块中的逻辑判 断功能,只需在原有的CPU结构上增加读寄存器堆控制模块,并将所述数据源信号产生模块的输出信号接入所述读寄存器堆控制模块,利用数据源信号产生模块的逻辑判断结果来修改直接从指令译码结果得到的读GRF控制信号,从而排除多余的GRF读操作,达到降低CPU功耗的目的。因此,所述CPU可以充分利用现有的电路而无需增加很多硬件单元。 
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。 
以上对本发明所提供的一种降低CPU功耗的方法、装置及一种低功耗CPU,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。 

Claims (10)

1.一种降低CPU功耗的方法,其特征在于,包括:
比较当前指令的读寄存器堆操作与前n级指令的写寄存器堆操作,如果当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则省略当前指令读该寄存器地址的操作;
所述比较包括:
获得当前指令读寄存器堆的控制信息和前n级指令写寄存器堆的控制信息;
当根据所述读寄存器堆的控制信息判断当前指令为读寄存器堆时,对前n级指令每条进行如下判断:
判断是否写寄存器堆,如果写,则继续判断该指令的写寄存器地址是否与当前指令的读寄存器地址相同;
其中,n的取值为CPU流水线上bypass路径的最大跨度值。
2.根据权利要求1所述的方法,其特征在于,还包括:
如果前n级指令中没有指令执行写操作,或者前n级指令中的至少一条指令执行写操作,但执行写操作的指令中所有的写寄存器地址都与当前指令的读寄存器地址不同,则执行当前指令读该寄存器地址的操作。
3.根据权利要求1所述的方法,其特征在于,所述读寄存器堆的控制信息包括是否读的信息和所读寄存器地址,写寄存器堆的控制信息包括是否写的信息和所写寄存器地址。
4.根据权利要求2所述的方法,其特征在于:
如果省略当前指令读该寄存器地址的操作,则当前指令通过bypass路径获得前n级指令中的某条指令要写入该寄存器地址的结果;
如果执行当前指令读该寄存器地址的操作,则当前指令从该寄存器地址中读取数据。
5.根据权利要求1所述的方法,其特征在于,通过以下方式获得当前指令读寄存器堆的控制信息和前n级指令写寄存器堆的控制信息:
CPU五级流水线的寄存器依次为RIF、RDE、REX、RMEM、RWB,则n的最大值为3;
当前指令读寄存器堆的控制信息从指令译码结果中获得;
前面第一级指令写寄存器堆的控制信息从流水线寄存器RDE获得;
前面第二级指令写寄存器堆的控制信息从流水线寄存器REX获得;
前面第三级指令写寄存器堆的控制信息从流水线寄存器RMEM获得。
6.一种低功耗CPU,其特征在于,包括:
寄存器堆,用于存储指令执行所需的原操作数和指令执行后的目标操作数;
数据源信号产生模块,用于比较当前指令的读寄存器堆操作与前n级指令的写寄存器堆操作,如果当前指令的读寄存器地址与前n级指令中至少一条指令的写寄存器地址相同,则输出从bypass路径读取数据的信号;其中,n的取值为CPU流水线上bypass路径的最大跨度值;
读寄存器堆控制模块,用于当数据源信号产生模块输出的信号为从bypass路径读取数据时,向当前指令的读寄存器地址输出不允许读的控制信号,表示省略当前指令读该寄存器地址的操作;
所述数据源信号产生模块包括:
控制信息获取子模块,用于获得当前指令读寄存器堆的控制信息和前n级指令写寄存器堆的控制信息;
判断子模块,用于当根据所述读寄存器堆的控制信息判断当前指令为读寄存器堆时,对前n级指令每条进行如下判断:判断是否写寄存器堆,如果写,则继续判断该指令的写寄存器地址是否与当前指令的读寄存器地址相同,如果相同,则输出从相应bypass路径读取数据的信号,并停止下一条指令的判断。
7.根据权利要求6所述的CPU,其特征在于,所述读寄存器堆的控制信息包括是否读的信息和所读寄存器地址,写寄存器堆的控制信息包括是否写的信息和所写寄存器地址。
8.根据权利要求6所述的CPU,其特征在于:
所述数据源信号产生模块的判断子模块还用于,当前n级指令中没有指令执行写操作,或者前n级指令中的至少一条指令执行写操作,但执行写操作的指令中所有的写寄存器地址都与当前指令的读寄存器地址不同时,输出从当前指令的读寄存器地址读取数据的信号;
则所述读寄存器堆控制模块还用于,当数据源信号产生模块输出的信号为从当前指令的读寄存器地址读取数据时,向当前指令的读寄存器地址输出允许读的控制信号,表示执行当前指令读该寄存器地址的操作。
9.根据权利要求6所述的CPU,其特征在于:
当所述CPU为五级流水线结构时,还包括五个流水线寄存器,依次为RIF、RDE、REX、RMEM、RWB,则n的最大值为3;
所述数据源信号产生模块的控制信息获取子模块从指令译码结果中获得当前指令读寄存器堆的控制信息;
从流水线寄存器RDE获得前面第一级指令写寄存器堆的控制信息;
从流水线寄存器REX获得前面第二级指令写寄存器堆的控制信息;
从流水线寄存器RMEM获得前面第三级指令写寄存器堆的控制信息。
10.根据权利要求6至9任一所述的CPU,其特征在于:
所述寄存器堆包括多个端口,每个端口对应一个寄存器地址,则所述指令的读寄存器地址和写寄存器地址分别包括多个。
CN2010102568196A 2010-08-18 2010-08-18 一种降低cpu功耗的方法及一种低功耗cpu Active CN101930281B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102568196A CN101930281B (zh) 2010-08-18 2010-08-18 一种降低cpu功耗的方法及一种低功耗cpu

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102568196A CN101930281B (zh) 2010-08-18 2010-08-18 一种降低cpu功耗的方法及一种低功耗cpu

Publications (2)

Publication Number Publication Date
CN101930281A CN101930281A (zh) 2010-12-29
CN101930281B true CN101930281B (zh) 2012-08-29

Family

ID=43369493

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102568196A Active CN101930281B (zh) 2010-08-18 2010-08-18 一种降低cpu功耗的方法及一种低功耗cpu

Country Status (1)

Country Link
CN (1) CN101930281B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9933841B2 (en) * 2014-04-17 2018-04-03 Arm Limited Reuse of results of back-to-back micro-operations

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6973561B1 (en) * 2000-12-04 2005-12-06 Lsi Logic Corporation Processor pipeline stall based on data register status
CN1766834A (zh) * 2005-01-20 2006-05-03 西安电子科技大学 双算术逻辑单元精简指令集8位微控制器
CN101122851A (zh) * 2007-09-12 2008-02-13 华为技术有限公司 一种数据处理方法及处理器

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7996660B2 (en) * 2007-08-13 2011-08-09 Texas Instruments Incorporated Software controlled CPU pipeline protection

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6973561B1 (en) * 2000-12-04 2005-12-06 Lsi Logic Corporation Processor pipeline stall based on data register status
CN1766834A (zh) * 2005-01-20 2006-05-03 西安电子科技大学 双算术逻辑单元精简指令集8位微控制器
CN101122851A (zh) * 2007-09-12 2008-02-13 华为技术有限公司 一种数据处理方法及处理器

Also Published As

Publication number Publication date
CN101930281A (zh) 2010-12-29

Similar Documents

Publication Publication Date Title
EP3343388A1 (en) Processors, methods, and systems with a configurable spatial accelerator
WO2020005448A1 (en) Apparatuses, methods, and systems for unstructured data flow in a configurable spatial accelerator
US20070022277A1 (en) Method and system for an enhanced microprocessor
EP3757814A1 (en) Apparatuses, methods, and systems for time-multiplexing in a configurable spatial accelerator
KR20120019329A (ko) 프로세서, 메모리 관리 장치 및 방법
CN1997962A (zh) 指令处理电路
US11907713B2 (en) Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US20050081021A1 (en) Automatic register backup/restore system and method
CN101727423B (zh) 可重配置fpga上可抢占硬件多任务系统及其实现方法
US20060277425A1 (en) System and method for power saving in pipelined microprocessors
CN100451951C (zh) Risc cpu中的5+3级流水线设计方法
CN103294567B (zh) 一种单发射五级流水处理器的精确异常处理方法
CN101923386B (zh) 一种降低cpu功耗的方法及一种低功耗cpu
Dewangan et al. Design and Implementation of 32 bit MIPS based RISC Processor
CN101930281B (zh) 一种降低cpu功耗的方法及一种低功耗cpu
US7111151B2 (en) Microprocessor including microcode unit that only changes the value of control signals required for the current cycle operation for reduced power consumption and method therefor
US20060112258A1 (en) Parallel data path architecture for high energy efficiency
CN101164035A (zh) 基于已知的处理器状态而选择性地启用内容可寻址存储器重命名寄存器文件中的比较器的功率节约方法和设备
US7401204B1 (en) Parallel Processor efficiently executing variable instruction word
KR20010077997A (ko) 단일 사이클 파이프라인 기능 정지를 발생하기 위한파이프라인 프로세서 시스템 및 방법
CN104951283B (zh) 一种risc处理器的浮点处理单元集成电路及方法
US10445099B2 (en) Reconfigurable microprocessor hardware architecture
US6289428B1 (en) Superscaler processor and method for efficiently recovering from misaligned data addresses
CN102436781A (zh) 基于隐式相关性和隐式旁路的微处理器指令拆分装置
CN113779755B (zh) 一种硅基多光谱集成电路芯片的设计方法和集成电路芯片

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant