基于指令的类型和内容的处理器功率管理的制作方法

文档序号:6361819阅读:111来源:国知局
专利名称:基于指令的类型和内容的处理器功率管理的制作方法
技术领域
本发明涉及通过对给定的指令类型或者指令中的特定内容不使用处理器的各部分进行时钟门控,来管理处理器的功耗。
背景技术
在中央处理单元(CPU)中存在着在指令管道的某些级中操作的多个不同功能单元。根据指令的类型或者指令中的内容,通常不是在同一时间使用所有这些功能单元。因此,不存在同时地开启CPU中的所有功能单元的内在原因。相反,在任何给定时刻,一些单元可能不具有要进行操作的数据。当功能单元没有数据要操作时,其事实上空闲。但是,仍然馈送活动时钟的这种空闲单元将由于所接收的时钟信号,使得通过锁存器的不断切换(即,翻转)而贯穿该单元承受功耗。
x86指令包括一些字段。最基本字段中的三个字段是指令操作码字段(例如,move、shift等等)、立即操作数字段和位移字节字段。虽然指令管道中的很多功能单元具有处理这些字段的电路,但在管道中移动的一些指令并不包含任何位移字节信息或者立即操作数信息。在这些情况下,填补这些字段的数据并不被使用,其通常包括随机数据比特。随着该指令在管道中移动,虽然并不使用这些字段,但功能单元仍然观测到输入该信息时它们锁存器的切换。这种切换进一步增加了 CPU的这些功能单元中的功耗。


本发明通过示例来说明并且不受附图的限制,在附图中,相同的附图标记指示类似的元件,其中:
图1描绘了一种计算机系统的实施例,其中该计算机系统能够基于在该系统中的至少一个处理器中执行的指令的类型和内容,对处理器功耗进行管理。
图2描绘了给定的核心中的具体有关单元和功能逻辑块,其使该核心能够通过指令类型确定和指令内容确定来对核心功耗进行管理。
图3描述了用于跟踪流经指令管道的浮点微操作的状态机的实施例。
图4是用于对译码器中的一个或多个可编程逻辑阵列进行时钟门控的处理的实施例的流程图,其中该译码器配置为对进入该译码器的当前指令进行译码。
图5是用于当在管道中不对分支指令进行译码时,对分支单元进行时钟门控的处理的实施例的流程图。
图6是用于当在指令管道中不存在浮点指令时,对浮点单元进行时钟门控的处理的实施例的流程图。
图7是用于当指令不使用指令的立即和位移字节字段时,将这些字段清零的处理的实施例的流程图。
具体实施方式
公开了基于指令管道中的指令的类型和内容,对处理器功率进行管理的处理器和方法的实施例。
图1描绘了一种计算机系统的实施例,其中该计算机系统能够基于在该系统中的至少一个处理器中执行的指令的类型和内容,对处理器功耗进行管理。
示出了计算机系统100。该计算机系统可以是台式计算机、服务器、工作站、膝上型计算机、手持装置、电视机顶盒、媒体中心、游戏控制台、集成系统(例如在汽车中)或者其它类型的计算机系统。在一些实施例中,计算机系统100包括还称为“处理器”的一个或多个中央处理单元(CPU)。虽然在很多实施例中,可以存在多个CPU,但在图1所示的实施例中,为了简单起见,只示出了 CPU102。CPU102可以是Intel 公司cpu或者另一个品牌的cpu。在不同的实施例中,CPU102包括一个或多个核心。CPU102示出为包括四个核心(核心104、106,108 和 110)。
在很多实施例中,每一个核心包括一些内部功能模块/单元/逻辑组件,例如,在核心104的放大视图中所示出的那些。例如,核心104至少包括指令/数据(S卩,层1、LI)高速缓存112、预取缓冲器114、预译码高速缓存116、指令译码器118、分支地址计算单元120、指令队列122、浮点执行单元124、分配/引退单元126和时钟管理/生成逻辑128。下面参照图2来更详细地讨论这些单元和逻辑组件中的一些。通常,与核心104中所示的这些单元相比,在每一个核心中存在更多的单元、寄存器和其它电路,其包括所示出的每一个单元的潜在几个复制(例如,一个或多个整数/地址执行单元、3个浮点单元等等),但为了维持图1的重要构成元素的清楚性,没有示出其它的单元。
在单线程核心中,每一个核心可以称为一个硬件线程。当核心是多线程或者超线程时,则在每一个核心内运行的每一个线程也可以称为一个硬件线程。因此,在计算机系统100中运行的任何单个线程的执行都可以称为一个硬件线程。例如,在图1中,如果每一个核心是单线程的,则在该系统中存在四个硬件线程(四个核心)。另一方面,如果每一个核心是多线程的,具有同时维持两个线程的状态的能力,则在该系统中存在八个硬件线程(四个核心,每一个核心两个线程)。
CPU102还可以包括一个或多个非LI高速缓存,例如非LI高速缓存112。在很多实施例中,在CPU102中在任何给定的核心之外存在至少一个非LI高速缓存(例如,高速缓存130)。另外,在很多实施例中,在所示出的四个核心之间共享高速缓存130。在没有示出的其它实施例中,实现不同于高速缓存130的其它非LI高速缓存。在不同的实施例中,以不同的方式分配高速缓存130。另外,在不同的实施例中,高速缓存130可以具有多种不同大小中的一种。例如,高速缓存130可以是8兆字节(MB)高速缓存、16MB高速缓存等等。另外,在不同的实施例中,高速缓存130可以是直接映射高速缓存、全相联高速缓存、多路组相联高速缓存或者具有其它类型的映射的高速缓存。在很多实施例中,高速缓存130可以包括在所有核心之间共享的一个很大部分,或者其可以划分成一些单独地功能切片(例如,每一个核心一个切片)。高速缓存130还可以包括在所有核心之间共享的一个部分,以及作为每一个核心的单独功能切片的一些其它部分。
在很多实施例中,CPU102包括集成的系统存储器控制器132,以提供用于与系统存储器134进行通信的接口。在没有示出的其它实施例中,存储器控制器132可以位于计算机系统100中分立的不同地方。
系统存储器134可以包括动态随机存取存储器(DRAM)(如,双倍数据速率(DDR)DRAM的类型)、诸如闪存之类的非易失性存储器、相变存储器(PCM)或者另一种类型的存储器技术。系统存储器134可以是用于存储数据和指令以便由CPU102进行操作的通用存储器。另外,在计算机系统100中还可以存在其它潜在设备,其中这些设备具有从/向系统存储器进行读取/写入的能力,如具有直接存储器存取(DMA)能力的I/O (输入/输出)设备。
耦合CPU102与系统存储器134的链路(即,总线、互连等等)可以包括一个或多个光学、金属或者能够传输数据、地址、控制和时钟信息的其它线(即,线路)。
平台控制器中心(PCH) 136 (例如,I/O控制器和其它电路的复合体)包括I/O接口,所述I/O接口能实现CPU102和外部I/O设备之间的通信。该复合体可以包括一个或多个I/o适配器,例如,I/O适配器138。I/O适配器将CPU102中使用的主机通信协议转换成与特定的I/O设备(例如,I/O设备140)相兼容的协议。给定的I/O适配器可以转换的这些协议中的一些包括:快速外围组件互连(PCI)、通用串行总线(USB)、串行高级技术附件(SATA)、小型计算机系统接口(SCSI)、廉价磁盘冗余阵列(RAID)和1394 “火线”等等。另夕卜,可以存在一个或多个无线协议I/O适配器。无线协议的示例是蓝牙、基于IEEE802.11的无线协议和蜂窝协议等等。
除I/O设备之外,PCH136还可以耦合到该系统中的一个或多个嵌入式控制器(EC)(例如,EC142)中。EC142可以合并有多种功能。例如,可以在计算机系统100中存在RAID存储控制器设备。RAID控制器可以对硬盘驱动器或者固态盘(SSD)阵列进行管理。控制器设备的其它示例可以是分立的带外管理能力引擎、键盘控制器或者其它类型的控制器。
在其它实施例中,PCH136是位于CPU102之外的分立设备。在这些实施例中,诸如直接存储器接口(DMI)的接口将CPU耦合到PCH。但是,并没有示出这些实施例。
CPU间接口 144可以提供针对耦合到一个或多个另外的CPU的链路的接口,其允许发生CPU间通信。例如,CPU间高速接口可以是快速通道互连(QPI)或者其它类似的接口。虽然在图1中没有示出另外的CPU,但在很多实施例中,CPU102是计算机系统100中存在的多个CPU里的一个。在很多实施例中,CPU间接口 144在CPU102和该系统中存在的其它CPU里的每一个之间提供点到点高速通信接口。
图形接口 146可以提供针对耦合到分立图形控制器(没有示出分立的图形控制器)的链路的接口。该接口可以是高速平台组件互连(PCI) -Express接口或者其它高速接口。在其它实施例中,CPU102包括集成的图形控制器,图形接口 146可以耦合到显示设备(例如,监视器)。在很多实施例中,该接口是高速的,以允许通过该链路传输大量的图形数据业务(例如,3D图形、视频等等)。
此外,计算机系统100还包括系统管理固件148,以提供对计算机系统和组件进行初始化的引导指令。在不同的实施例中,系统管理固件可以是基本输入/输出系统(BIOS)、可扩展固件、或者计算机系统可以在该平台的引导期间使用的其它形式的固件指令。
在很多实施例中,计算机系统100中的每一个核心包括:基于在每一个核心内执行的指令的类型和内容来管理核心功耗的内部逻辑。一些单元中的多种逻辑用于通过时钟管理/生成逻辑128,在一个时钟接一个时钟基础上对某些单元进行时钟门控。
图2描绘了给定的核心中的具体有关单元和功能逻辑块,其使该核心能够通过指令类型确定和指令内容确定来对核心功耗进行管理。
在给定的核心中,宏指令从指令高速缓存112中获取,并到达预取缓冲器200。在很多实施例中,存在两个指令译码器(译码器O (202)和译码器I (204))。预取缓冲器200为用于每一个译码器的寄存器(指令I寄存器(206 )和指令2寄存器(208 ))馈送指令。在图1所示的实施例中,在指令译码器单元中描绘了两个译码器,这是由于该核心能够同时对两个指令进行译码。为了简单起见,仅在译码器O中示出了单个译码器中的细节电路。在译码器I中存在该相同电路,由于该电路镜像了译码器O中所示的电路,因此对该电路的两次解释是多余的,故没有对其进行描绘。
除预取缓冲器200之外,还存在基于预译码的逻辑210,其从预取缓冲器读取高速缓存行,将宏指令与指令高速缓存行分离,基于预译码比特来确定指令的长度。对于宏指令中的每一个,译码逻辑提供指令的字节大小类型的第一通道近似(即,将宏指令译码成I字节微操作(操作码)、2字节操作码、3字节操作码,或者译码成更复杂的可变长度的一个或多个操作码的集合)。由于存在字节大小可能变得不正确的一些指令,因此预译码处理的字节类型大小是近似的。除了图2中所示的逻辑之外,还存在执行全长度译码的另一个并行译码器(全长度译码器242),其是完全准确的。但是,该全长度译码器没有预译码长度近似一样的高效,因此其与图2中所示的逻辑执行的译码处理并行地执行。
在很多实施例中,如果全长度译码器复原的操作码字节长度与宏指令译码逻辑近似的长度不相同,则使当前指令之后的后续指令无效,这是由于错误操作码字节长度可能使得随机垃圾数据被使用,进一步使指令管道下降。使用全长度译码器所确定的正确操作码字节长度,再一次通过管道发送无效的指令。虽然偶尔的操作码无效以及随后第二次穿过指令管道,降低了管道性能效率,但宏指令译码逻辑字节长度近似的高成功率提供甚至更高的效率益处,以保证使用该并行双长度译码处理。
现在返回到指令I寄存器206,在该寄存器中锁存的宏指令进入译码器0(202),并传播到该译码器中的一些逻辑组件。不是用一个较大的编程逻辑阵列(PLA)来处理任意类型的接收的宏指令的译码处理,而是将译码器O中存在的PLA划分成执行每一字节长度的宏指令译码的PLA。生成I字节操作码的所有宏指令在I字节操作码PLA212中进行译码,生成2字节操作码的所有宏指令在2字节操作码PLA214中进行译码,生成3字节操作码的所有宏指令在3字节操作码PLA216中进行译码。另外,复杂指令PLA218对PLA212-216中的译码没有覆盖的所有其它操作码进行译码。通常,大多宏指令落入到1-3字节操作码转换,因此复杂指令PLA218可能没有像其它三个PLA那样的频繁使用。
在前一代译码器中,通常存在能够对所有指令进行译码的一个PLA。图2中的所有四个PLA里的电路合并到该单个PLA中。因此,无论该PLA接收到什么字节大小类型的宏指令,整个PLA都活动地对将该宏指令译码成相应的操作码。在图2所示的本实施例中,将该电路划分成四个单独的PLA。另外,所有PLA基于接收的振荡时钟信号,一个周期一个周期地活动执行。从时钟管理和生成逻辑(CMGL)220接收该振荡时钟信号。CMGL220包括用于按照至少一个频率生成至少一个振荡时钟信号的时钟电路。但是,可以使用处于多个频率的多个信号来向处理器的设计提供灵活性。在使用一个以上的时钟速度的一些实施例中,一些单元按照双倍频率、半频率、或者与任何其它潜在操作的时钟信号频率一起来采用时钟信号。但是,在一些实施例中,图2中所示的功能单元和逻辑都按照同一频率运行。无论如何,CMGL220可以向图2中所示的任何功能块/单元传播振荡时钟信号,其中这些功能块/单元需要振荡时钟信号来正确地运行。但是,为了使图2清晰,仅将某些块/单元示出为具有通过来自CMGL220的发出线来提供的时钟信号,下面将描述这些具体的时钟源和目的地对。
另外,CMGL220还包括时钟管理电路,以便提供对时钟信号向这些功能模块/单元中的任何一个或多个的供给进行主动管理的能力。例如,时钟管理电路可以包括时钟门控逻辑,以便将时钟信号拉升到稳定状态高电平状态或者将时钟信号压到稳定的低电平状态。
当需要时钟来运行的功能模块/单元被拒绝输入时钟信号时,该模块/单元由于强制内部电路进入稳定状态而停止起作用,而不是具有电路的切换活动(即,基于提供的时钟信号进行切换/翻转)。因此,如果CMGL220关闭了针对功能逻辑的模块/单元的时钟信号,则该逻辑将停止操作。这节省了在该模块/单元的电路中的动态切换功耗。
因此,CMGL220可以关闭,也可以不关闭向图2中的任何给定功能模块/单元提供的时钟信号。在很多实施例中,宏指令译码逻辑210向CMGL220发送其确定的与进入指令I寄存器206的给定指令相对应的字节大小类型长度近似信息。在很多实施例中,近似的字节大小类型长度通常可以是1、2或者3字节。对于下一个时钟周期,CMGL220维持向与近似的长度相对应的PLA提供的时钟信号,将提供给其它两个PLA(其中这两个PLA对其它长度进行译码)的时钟拉升到稳定状态。对于前述的下一个时钟周期,这三个特定的字节长度PLA中只有一个将是操作的。此外,其它两个特定的字节长度PLA将是不操作的,并由于在它们各自的电路之中将不存在动态的切换功耗,因此将消耗更少的动态功率。
在指令I寄存器206中的后续指令等待进行译码的下一个时钟周期,发生相同的处理。因此,在任何给定的时钟周期,1、2和3字节操作码PLA中最多仅一个将消耗显著的动态切换功率。在很多实施例中,复杂指令PLA218始终接收提供的时钟,这是由于CMGL220不具有用于该特定PLA的时钟门控能力。
在1、2或3字节译码的情况下,一旦宏指令已经通过有关的字节长度PLA,并已经被译码成相应的操作码,则通过MUX222对其进行复用。在需要PLA218的复杂指令的情况下,结果可以生成来自微码只读存储器(ROM) 224的操作码。随后,通过MUX226将MUX222的输出再次与PLA218和微码R0M224的输出进行复用。随后,在对任何位移字节和/或立即操作数进行处理的逻辑228处,接收MUX226的操作码输出(其包括从译码器获得的操作码),其中位移字节和/或立即操作数可以具有添加到预取缓冲器200中的原始宏指令的字段。一旦对位移字节和/或立即操作数进行了处理(如果存在添加到原始宏指令的任何字段),则将操作码从译码器O发送出,并发送到指令队列230,以等待执行。
在很多实施例中,宏指令逻辑210可以对给定的接收的宏指令进行部分译码。宏指令译码逻辑210还将提供一组预译码比特,该组预译码比特是在对给定的宏指令进行预译码处理期间产生的。在一些实施例中,宏指令译码逻辑210能够基于这些预译码比特,确定在译码器I中同时译码的第二指令是无效的。存在很多关于为何第二指令可能是无效的示例(例如,分支问题),但不管是何原因,一旦宏指令译码逻辑210认识到进入译码器I的第二指令将是无效的,则宏指令译码逻辑210就可以使CMGL220对提供给整个译码器2的时钟信号进行门控。例如,CMGL220可以将时钟拉升到针对指令2寄存器208的稳定状态,以便不允许在该寄存器中进行锁存,从而释放指令进入译码器I。在其它实施例中,CMGL220可以基于在单个位置处进入译码器2的时钟树(图2中没有示出),对该译码器中的所有主要功能单元/模块进行单独地提供。在这些实施例中,CMGL220可以对进入译码器的整个树进行时钟门控。因此,如果预译码器逻辑210确定指令是无效的,则其可以通过对提供给被调度将该指令译码成操作码的译码器逻辑的时钟进行门控,来本质上关闭该译码器中的所有逻辑。
返回到译码器0,分支、浮点、字段检测器逻辑(BFFDL) 232还从指令I寄存器206接收传播到译码器O的宏指令。BFFDL232包括检测逻辑的一些部分,以帮助该核心中的功率管理。
如该逻辑的名称所表明的,在BFFDL232中存在着单独的分支检测逻辑、浮点检测逻辑和字段检测逻辑。分支检测逻辑确定该指令是否将需要分支地址计算。
分支地址计算单元234将计算什么分支地址将用于分支指令。如果宏指令不涉及任何形式的分支,则将不使用该分支地址计算单元234,而提供给该单元的时钟通常仍是操作的,这再次造成不需要的动态切换功耗。为了使分支地址计算单元234功耗最小化,BFFDL232将认识到到达分支地址计算单元234的下一个指令不是分支指令。BFFDL232可以向CMGL220发送该信息,以使CMGL220对提供给分支地址计算单元234的时钟进行门控。
BFFDL232中的字段检测逻辑具有确定实际接收的特定宏指令是否在位移字节字段中具有数据和/或在立即操作数字段中具有数据。很多宏指令不使用这些字段。但是,即使不使用这些字段,对操作码进行处理的整个管道之中的逻辑也具有用于这些字段的时隙,这些时隙将在连同操作码一起传送的数据中具有随机垃圾数据。随机垃圾数据造成在即使不使用该数据时,也发生动态切换功耗。因此,在很多实施例中,BFFDL232 (—旦其确定宏指令不使用这些字段中的一个或两个)指示逻辑228将未使用的字段清零。该字段的这种清零进一步使核心之中的功能单元/模块内的管道功耗最小化。
BFFDL232中的浮点检测逻辑检测输入的宏指令是否是浮点(FP)运算。在很多实施例中,类似于上面被时钟门控的其它单元,可以对处理浮点计算的浮点单元236进行时钟门控,但浮点单元的时钟门控更加复杂,这是由于该单元要正确地工作需要前置时间(lead time),其对于每一时钟都对整个FP单元236进行时钟门控来说是不实际的。因此,在很多实施例中,仅当整个管道中不存在FP运算时,才对FP单元236进行时钟门控。关系到FP单元的管道通常包括在(用于对FP宏指令进行译码的)译码器单元开始和在(完成执行之后,使该FP指令引退的)引退单元处结束。因此,可以实现状态机来支持对于(译码和引退之间的)管道中存在的完整的一组FP运算进行跟踪。
FP微操作跟踪器单元238可以保持对于管道中存在的任何FP指令/操作码的跟踪,并当不存在FP指令/操作码时,指示CMGL220对FP单元236进行时钟门控。当FP指令进入译码级时,BFFDL232向FP微操作跟踪器238发送信息。随后,该FP指令穿过整个管道,并最终引退。在引退期间,分配/引退单元240向FP微操作跟踪器238通知该FP指令已引退。一旦引退,如果没有另外的FP指令进入译码器,则FP微操作跟踪器238可以指示CMGL220关闭进入FP单元236的时钟。
图3描述了用于跟踪流经指令管道的浮点微操作的状态机的实施例。
开始状态示出了管道处于关于浮点微操作的空闲状态(状态300)。如果没有接收到FP微操作(uOP),则状态机保持在空闲状态,这是由于管道不对FP uOP进行译码(任务A)。如果FP uOP到达,则管道对FP uOP进行译码(任务B),状态机转换到下一状态,其中在该状态,uOP已完成译码级,现处于指令队列中(状态302)。一旦FP uOP处于指令队列中,返回到空闲状态的唯一方式是该FP uOP引退,并且没有任何另外的FP uOP保持在管道中。
一旦FP uOP处于指令队列中(状态302),则可以发生两个事件。首先,如果指令队列中的该FP uOP仍处于指令队列时,新的第二 FP uOP到达译码器,则状态机停止对于第一FP uOP的跟踪,替代地转换到对刚刚到达的第二 FP uOP进行跟踪。这是由于第二 FP uOP将在第一 FP uOP之后引退。管道执行对另一个FP uOP进行译码的任务(任务C)。
另一个潜在事件是:可以向处于指令队列中的uOP分配资源以进行执行(任务D)。在该情况下,状态机转换到uOP分配状态(状态304)。
一旦处于uOP分配状态,可以发生另外的三个事件。首先,如果处于分配级(状态304)的第一 FP uOP还没有引退,而新的第二 FP uOP到达到译码器,则状态机停止跟踪第一 FP uOP,替代地转换到跟踪刚刚到达的第二 FP uOP。这是由于第二 FP uOP将在第一 FPuOP之后引退。管道执行对另一个FP uOP进行译码的任务(任务E)。这造成了状态机返回到UOP处于指令队列中的状态(状态302),状态机现在对第二 FP uOP进行跟踪。
可以在状态304中发生的第二事件是:发生了 FP uOP分配,但还没有发生FP uOP引退。在该情况下,没有事件发生,这是由于管道并不使该FP uOP引退(任务F)。这可以在FP uOP的执行期间发生。
可以在状态304中发生的第三事件是,管道可以使FP uOP引退(任务G)。当该事件发生时,状态机移回到空闲(状态300 )。在状态机处于空闲状态的任何给定时间点,FP微操作跟踪器(图2中的238)都可以指示CMGL220对FP单元236进行时钟门控。
图4是用于对译码器中的一个或多个可编程逻辑阵列进行时钟门控的处理的实施例的流程图,其中该译码器未被配置为对进入该译码器的当前指令进行译码。
该处理由可以包括不同实施例中的硬件电路和/或微代码的处理逻辑进行执行。通过处理逻辑从预取缓冲器获取宏指令来开始该处理(处理块400)。该处理继续下面操作:处理逻辑确定该宏指令的字节长度类型(处理块402)。基于该确定,处理逻辑随后对译码器中要对该宏指令进行译码的一个或多个PLA进行时钟门控(处理块404)。被进行时钟门控的具体PLA是没有分配对所确定的字节长度类型的宏指令进行译码的那些PLA。最后,处理逻辑接着使用没有被时钟门控的剩余PLA,在该译码器中对该宏指令进行译码(处理块406)。
图5是用于当不对分支指令进行译码时,对分支单元进行时钟门控的处理的实施例的流程图。
该处理由可以包括不同实施例中的硬件电路和/或微代码的处理逻辑进行执行。通过处理逻辑从预取缓冲器获取宏指令来开始该处理(处理块500 )。随后,处理逻辑确定该指令是否是分支指令(处理块502)。如果该指令是分支指令,则该处理结束。否则,如果该指令不是分支指令,则处理逻辑在从该宏指令产生的操作码处于管道中的分支计算位置的时钟周期期间,对分支单元进行时钟门控(处理块504),并且该处理结束。
图6是用于当在指令管道中不存在浮点指令时,对浮点单元进行时钟门控的处理的实施例的流程图。
该处理由可以包括不同实施例中的硬件电路和/或微代码的处理逻辑进行执行。该处理开始于:处理逻辑确定在译码单元和引退单元之间的管道中是否存在任何FP指令(处理块600)。如果在管道中的某个地方存在FP指令,则该处理返回到块600,再次进行检查。否则,如果在管道中不存在FP指令,则处理逻辑对FP单元进行时钟门控(处理块602),该处理结束。在很多实施例中,该处理使用图3中所述的状态机来跟踪管道中的FP指令的存在性。
图7是用于当指令不使用指令的立即和位移字节字段时,将这些字段清零的处理的实施例的流程图。
该处理由可以包括不同实施例中的硬件电路和/或微代码的处理逻辑进行执行。通过处理逻辑从预取缓冲器获取宏指令来开始该处理(处理块700 )。随后,处理逻辑确定该指令是否使用立即字段(处理块702)。如果该指令不使用立即字段,则处理逻辑将该指令的立即字段中的所有数据进行清零(处理块704)。无论该指令是否使用立即字段,处理块接下来都确定该指令是否使用位移字节字段(处理块706)。如果使用位移字节字段,则该处理结束。否则,如果该指令不使用位移字节字段,则处理逻辑将该指令的位移字节字段中的所有数据清零(处理块708),该处理结束。
在很多实施例中,当在给定的功能模块/单元上执行时钟门控时,对用于该单元的时钟进行门控至少一个时钟周期,但根据用于对该单元进行时钟门控的具体原因,时钟门控可以发生超过一个周期。例如,对I字节PLA进行时钟门控通常是在单个时钟周期的基础上完成的,这是由于在每一个时钟周期都有指令进行译码,因此对该PLA进行如一个时钟周期一样短的门控。在该方面,可能有数千条宏指令在管道中流转而没有单个浮点运算,在该情况下,可以对FP单元连续地时钟门控多个时钟周期。
本发明的实施例的构成要素还可以提供成用于存储机器可执行指令的机器可读介质。机器可读介质可以包括,但不限于:闪存、光学盘、光盘只读存储器(⑶-ROM)、数字多用途/视频盘(DVD)R0M、随机存取存储器(RAM)、可擦除可编程只读存储器(EPR0M)、电可擦除可编程只读存储器(EEPR0M)、磁卡或者光卡、传播介质或者适合于存储电子指令的其它类型的机器可读介质。
在上面的描述和权利要求中,可以使用术语“包括”和“包含”以及它们的派生词,旨在将它们视作为彼此的同义词。此外,在下面的描述和权利要求中,可以使用术语“耦合”和“连接”以及它们的派生词。应当理解的是,这些术语不应视作为彼此同义。相反,在具体的实施例中,“连接”可以用于指示两个或更多元件是彼此之间直接物理或者电接触。“耦合”可以意味着两个或更多元件处于直接物理或者电接触。但是,“耦合”还可以意味着两个或更多元件不是彼此之间直接接触,而是彼此之间协作、交互或者通信。
在上面的描述中,使用某些术语来描述本发明的实施例。例如,术语“逻辑”表示用于执行一个或多个功能的硬件、固件、软件(或者其任意组合)。例如,“硬件”的示例包括,但不限于:集成电路、有限状态机或者甚至组合逻辑。集成电路可以采用诸如微处理器、专用集成电路、数字信号处理器、微控制器等等之类的处理器的形式。
应当理解的是,贯穿本说明书对于“一个实施例”或者“实施例”的引用意味着:结合该实施例描述的具体特征、结构或特性包括在本发明的至少一个实施例中。因此,应当强调和理解的是,在本说明书的各个部分中对于“实施例”或“一个实施例”或“替代的实施例”的两个或更多弓I用,并不一定全部指代同一实施例。此外,可以将这些具体特征、结构或者特性组合成适合于本发明的一个或多个实施例。
类似地,应当理解的是,为了使本公开内容流畅以帮助对本发明各个方面中的一个或多个方面的理解,在本发明的实施例的前述描述中,有时将各种特征一起组合在单个实施例、图或者其描述中。但是,本公开的该方法不应被解释为反映下面意图:所要求保护的主题需要与各权利要求中明确记载的特征相比更多的特征。相反,如所附权利要求所反映的,发明性方面在于比单个的前述公开实施例中的所有特征更少的特征。因此,特此将详细说明书所附的权利要求明确地并入到本详细说明书中。
权利要求
1.一种处理器,包括: 预取缓冲器,用于存储多个宏指令; 时钟电路,用于为所述处理器中的至少多个单元提供振荡时钟信号; 宏指令译码逻辑,用于确定从所述预取缓冲器中获取的每一个宏指令的类型; 响应于对所述多个宏指令中的第一宏指令的类型的确定,时钟管理单元用于使所述振荡时钟信号在进入所述处理器中的没有用于对所述第一宏指令进行操作的多个单元中的至少一个单元的至少一个时钟周期保持在稳定状态;以及 所述多个单元中的第一指令译码器单元,用于将所述第一宏指令译码成一个或多个操作码。
2.根据权利要求1所述的处理器,还包括: 所述第一指令译码器单元,包括: 所述多个单元中的第一可编程逻辑阵列(PLA)单元,用于对从所述预取缓冲器获取的产生一个字节的操作码的宏指令进行译码; 所述多个单元中的第二 PLA单元,用于对从所述预取缓冲器获取的产生两字节的操作码的宏指令进行译码;以及 所述多个单元中的第三PLA单元,用于对从所述预取缓冲器获取的产生三字节的操作码的宏指令进行译码; 所述宏指令译码逻辑,用于确定从所述第一宏指令产生的操作码的字节长度; 所述时钟管理电路,用于使所述振荡时钟信号在进入不对所确定的字节长度的宏指令进行译码的所述第一PLA、所述第二PLA和所述第三PLA中的任何一个的至少一个时钟周期保持在稳定状态。
3.根据权利要求1所述的处理器,还包括: 所述时钟管理电路,用于响应于确定所述第一宏指令的类型不是分支指令,使所述振荡时钟信号在进入所述多个单元中的分支地址计算单元的至少一个时钟周期保持在稳定状态。
4.根据权利要求1所述的处理器,还包括: 所述宏指令译码逻辑,用于: 确定所述第一宏指令是否包括一个或多个位移字节;以及 响应于所述第一 宏指令不具有任何位移字节,将所述第一宏指令中的位移字节字段清零。
5.根据权利要求1所述的处理器,还包括: 所述宏指令译码逻辑,用于: 确定所述第一宏指令是否包括立即操作数;以及 响应于所述第一宏指令不具有立即操作数,将所述第一宏指令中的立即操作数字段清零。
6.根据权利要求1所述的处理器,还包括: 所述多个单元中的第二指令译码器单元; 所述宏指令译码逻辑,用于: 确定所述多个宏指令中的第二宏指令是否无效,其中,所述第一宏指令在第一时钟周期进入所述第一指令译码器单元,所述第二宏指令在所述第一时钟周期进入所述第二指令译码器单元;以及 所述功率管理电路,用于响应于确定所述第二宏指令无效,使所述振荡时钟信号在进入所述第二指令译码器单元的至少一个时钟周期保持在稳定状态。
7.根据权利要求1所述的处理器,还包括: 浮点微操作跟踪器,用于: 在从所述预取缓冲器获取相对应的浮点宏指令的时间到浮点微操作的引退时间,对所述浮点微操作进行跟踪,其中,所述浮点微操作与所述多个宏指令中的浮点宏指令相对应;以及 设置浮点管道清除标志,其指示:当设置时,没有浮点微操作当前正被跟踪;以及所述功率管理电路,用于响应于所述浮点管道清除标志被设置,使所述振荡时钟信号在进入所述多个单元中的浮点单元的至少一个时钟周期保持在稳定状态。
8.一种方法,包括: 在预取缓冲器中存储多个宏指令; 为处理器中的至少多个单元提供振荡时钟信号; 确定从所述预取缓冲器中获取的每一个宏指令的类型; 响应于对所述多个宏指令中的第一宏指令的类型的确定,使所述振荡时钟信号在进入所述处理器中的没有用于对所述第一宏指令进行操作的多个单元中的至少一个单元时,停留在稳定状态;以及 将所述第一宏指令译码成一个或多个操作码。
9.根据权利要求8所述的方法,还包括: 对从所述预取缓冲器获取的产生一个字节的操作码的宏指令进行译码; 对从所述预取缓冲器获取的产生两字节的操作码的宏指令进行译码; 对从所述预取缓冲器获取的产生三字节的操作码的宏指令进行译码; 确定从所述第一宏指令产生的操作码的字节长度;以及 使所述振荡时钟信号在进入不对所确定的字节长度的宏指令进行译码的第一 PLA、第二 PLA和第三PLA中的任何一个的至少一个时钟周期保持在稳定状态。
10.根据权利要求8所述的方法,还包括: 响应于确定所述第一宏指令的 类型不是分支指令,使所述振荡时钟信号在进入所述多个单元中的分支地址计算单元的至少一个时钟周期保持在稳定状态。
11.根据权利要求8所述的方法,还包括: 确定所述第一宏指令是否包括一个或多个位移字节;以及 响应于所述第一宏指令不具有任何位移字节,将所述第一宏指令中的位移字节字段清零。
12.根据权利要求8所述的方法,还包括: 确定所述第一宏指令是否包括立即操作数;以及 响应于所述第一宏指令不具有立即操作数,将所述第一宏指令中的立即操作数字段清零。
13.根据权利要求8所述的方法,还包括:确定所述多个宏指令中的第二宏指令是否无效,其中,所述第一宏指令在第一时钟周期进入第一指令译码器单元,所述第二宏指令在所述第一时钟周期进入第二指令译码器单元;以及 响应于确定所述第二宏指令无效,使所述振荡时钟信号在进入所述第二指令译码器单元的至少一个时钟周期保持在稳定状态。
14.根据权利要求8所述的方法,还包括: 在从所述预取缓冲器获取相对应的浮点宏指令的时间到浮点微操作的引退时间,对所述浮点微操作进行跟踪,其中,所述浮点微操作与所述多个宏指令中的浮点宏指令相对应;以及 设置浮点管道清除标志,其指示:当设置时,没有浮点微操作当前正被跟踪;以及响应于所述浮点管道清除标志被设置,使所述振荡时钟信号在进入所述多个单元中的浮点单元的至少一个时钟周期保持在稳定状态。
15.一种处理器,包括: 预取缓冲器,用于存储多个宏指令; 时钟电路,用于为所述处理器中的至少多个单元提供振荡时钟信号; 宏指令译码逻辑,用于确定从所述预取缓冲器中获取的每一个宏指令的近似字节长度类型; 响应于对所述多个宏指令中的第一宏指令的近似字节长度类型的确定,时钟管理单元用于使所述振荡时钟信号在进入所述处理器中的没有用于对所述第一宏指令进行操作的多个单元中的至少一个单元的至少一个时钟周期保持在稳定状态; 所述多个单元中的第一指令译码器单元,用于将所述第一宏指令译码成一个或多个操作码; 全长度译码器逻辑,用于: 确定所述第一宏指令的准确字节长度类型,其中所述全长度译码器与所述第一指令译码器并行地对所述第一宏指令进行译码; 将所述第一宏指令的准确字节长度类型与所述第一宏指令的近似字节长度类型进行比较; 响应于所述准确字节长度与所述近似字节长度是不同的长度,使所述第一指令译码器单元产生的所述一个或多个操作码无效。
16.根据权利要求15所述的处理器,还包括: 所述第一指令译码器单元,包括: 所述多个单元中的第一可编程逻辑阵列(PLA)单元,用于对从所述预取缓冲器获取的产生一个字节的操作码的宏指令进行译码; 所述多个单元中的第二 PLA单元,用于对从所述预取缓冲器获取的产生两字节的操作码的宏指令进行译码;以及 所述多个单元中的第三PLA单元,用于对从所述预取缓冲器获取的产生三字节的操作码的宏指令进行译码; 所述宏指令译码逻辑,用于确定从所述第一宏指令产生的操作码的字节长度;以及 所述时钟管理电路,用于使所述振荡时钟信号在进入不对所确定的字节长度的宏指令进行译码的所述第一PLA、所述第二PLA和所述第三PLA中的任何一个的至少一个时钟周期保持在稳定状态。
17.根据权利要求15所述的处理器,还包括: 所述时钟管理电路,用于响应于确定所述第一宏指令的类型不是分支指令,使所述振荡时钟信号在进入所述多个单元中的分支地址计算单元的至少一个时钟周期保持在稳定状态。
18.根据权利要求15所述的处理器,还包括: 所述宏指令译码逻辑,用于: 确定所述第一宏指令是否包括一个或多个位移字节;以及 响应于所述第一宏指令不具有任何位移字节,将所述第一宏指令中的位移字节字段清零。
19.根据权利要求15所述的处理器,还包括: 所述宏指令译码逻辑,用于: 确定所述第一宏指令是否包括立即操作数;以及 响应于所述第一宏指令不具有立即操作数,将所述第一宏指令中的立即操作数字段清零。
20.根据权利要求15所述的处理器,还包括: 所述多个单元中的第二指令译码器单元; 所述宏指令译码逻辑,用于: 确定所述多个宏指令中的第二宏指令是否无效,其中,所述第一宏指令在第一时钟周期进入所述第一指令译码器单元,所述第二宏指令在所述第一时钟周期进入所述第二指令译码器单元;以及 所述功率管理电路,用于响应于确定所述第二宏指令无效,使所述振荡时钟信号在进入所述第二指令译码器单元的至少一个时钟周期保持在稳定状态。
21.根据权利要求15所述的处理器,还包括: 浮点微操作跟踪器,用于: 在从所述预取缓冲器获取相对应的浮点宏指令的时间到浮点微操作的引退时间,对所述浮点微操作进行跟踪,其中,所述浮点微操作与所述多个宏指令中的浮点宏指令相对应;以及 设置浮点管道清除标志,其指示:当设置时,没有浮点微操作当前正被跟踪;以及所述功率管理电路,用于响应于所述浮点管道清除标志被设置,使所述振荡时钟信号在进入所述多个单元中的浮点单元的至少一个时钟周期保持在稳定状态。
全文摘要
公开了一种处理器和一种方法。在一个实施例中,处理器包括用于存储宏指令的预取缓冲器。此外,处理器还包括时钟电路,所述时钟电路可以为该处理器中的功能单元中的至少一些提供时钟信号。另外,处理器还包括宏指令译码逻辑,所述宏指令译码逻辑可以确定每一个宏指令的类型。此外,处理器还包括时钟管理单元,所述时钟管理单元可以使时钟信号在进入处理器中的不对正在被译码的当前宏指令进行操作的至少一个单元时,保持在稳定状态。最后,处理器还包括可以将第一宏指令译码成一个或多个操作码的至少一个指令译码器单元。
文档编号G06F1/04GK103154846SQ201180045688
公开日2013年6月12日 申请日期2011年9月23日 优先权日2010年9月24日
发明者V·R·马杜里, J·Y·童, H·张 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1