具有读取移位器的处理器和使用所述处理器的控制方法

文档序号:95762 发布日期:2021-10-12 浏览:16次 >En<

阅读说明:本技术 具有读取移位器的处理器和使用所述处理器的控制方法 (Processor having read shifter and control method using the same ) 是由 陈丁明 于 2020-08-24 设计创作,主要内容包括:本发明提供一种具有读取移位器的处理器和使用所述处理器的控制方法,所述处理器包含,寄存器组、读取移位器、解码单元以及多个功能单元。寄存器组包含读取端口。读取移位器包含多个移位器条目且配置成每一时钟周期移出多个移位器条目当中的一移位器条目。多个移位器条目中的每一个与时钟周期相关联,且多个移位器条目中的每一个包括指示寄存器组的读取端口对于时钟周期中的读取操作的可用性。解码单元耦接到读取移位器且配置成基于读取移位器的多个移位器条目中包含的读取值来解码并发射指令。多个功能单元耦接到解码单元和寄存器组,且配置成执行由解码单元发射的指令并对寄存器组的读取端口执行读取操作。(The invention provides a processor with a reading shifter and a control method using the processor. The register set includes a read port. The read shifter includes a plurality of shifter entries and is configured to shift out a shifter entry among the plurality of shifter entries each clock cycle. Each of the plurality of shifter entries is associated with a clock cycle, and each of the plurality of shifter entries includes an indication of availability of a read port of the register set for a read operation in the clock cycle. The decode unit is coupled to the read shifter and configured to decode and transmit the instruction based on read values contained in a plurality of shifter entries of the read shifter. A plurality of functional units are coupled to the decode unit and the register bank and configured to execute instructions issued by the decode unit and to perform read operations on read ports of the register bank.)

具有读取移位器的处理器和使用所述处理器的控制方法

技术领域

本发明大体上涉及一种处理器架构,且更具体地说,涉及一种包含读取移位器的处理器以及用于控制处理器的指令流水线(instruction pipeline)的控制方法。

背景技术

用于改进处理器的性能的一种方式是使用指令流水线,其中可并行地执行数个指令。由于包含于处理器的寄存器组中的读取端口的数量受到限制,因此将多个并行发射的指令分配到寄存器组的读取端口是复杂的。举例来说,当待在指令流水线中执行的数个指令需要比相同时钟周期中的可用读取端口更多的读取端口(read port)时,可能出现冲突,导致停滞(stall)并互锁指令流水线中的指令。因此,劣化处理器的性能。当在指令流水线中执行包含多个微操作的矢量指令(vector instruction)时,问题更糟。

随着对改进处理器的性能的需求,对可有效防止指令的停滞和互锁的处理器和控制指令流水线的方法的需要日益增长。

发明内容

在一个实施例中,一种微处理器包含寄存器组、读取移位器、解码单元以及功能单元。寄存器组包含读取端口。读取移位器包含多个移位器条目且配置成每一时钟周期移出多个移位器条目当中的一移位器条目,其中多个移位器条目中的每一个与时钟周期相关联,且多个移位器条目中的每一个包括指示寄存器组的读取端口对于时钟周期中的读取操作的可用性的读取值。解码单元耦接到读取移位器且配置成基于读取移位器的多个移位器条目中包含的读取值来解码指令并发射指令。读取移位器将用于从寄存器组读取数据的控制提供到功能单元。功能单元耦接到解码单元和寄存器组,且配置成执行由解码单元发射的指令并使用来自寄存器组的读出数据,所述功能单元由读取移位器控制。

在一个实施例中,通过至少使用以下步骤来排程微处理器中的寄存器组的读取端口。基于待发射的指令的读取时间确定第一时钟周期。基于读取移位器的读取值确定读取端口在第一时钟周期中的可用性,其中读取值包含于读取时延的多个移位器条目当中的一移位器条目中,且每一时钟周期移出多个移位器条目。当读取移位器的读取值指示读取端口可用于第一时钟周期中时,解码并发射指令。当读取移位器的读取值指示读取端口不可用于第一时钟周期中时,停滞指令。

附图说明

结合附图阅读以下详细描述会最佳地理解本发明的各方面。应注意,根据业界中的标准惯例,各个特征未按比例绘制。实际上,为了论述清楚起见,可任意增大或减小各个特征的尺寸。

图1是示出根据一些实施例的计算机处理系统的框图;

图2是示出根据一些实施例的处理器的框图;

图3A到图3B示出根据一些实施例的读取移位器;

图3C示出根据一些实施例的旋转缓冲器的框图;

图4是示出根据一些实施例的基于读取移位器的矢量指令的发射的流程图;

图5是示出根据一些替代实施例的基于读取移位器的矢量指令的发射的流程图;

图6是示出根据一些实施例的第K时钟周期中的矢量指令的发射的流程图;

图7是示出根据一些替代实施例的矢量指令的发射的流程图;

图8是示出根据一些实施例的控制指令流水线的方法的流程图。

附图标号说明

10:计算机处理系统;

100:处理器;

110、FUNIT_A、FUNIT_B、FUNIT_C:功能单元;

111:指令;

120、320:发射/解码单元;

121:信号;

130、330a、330b_0、330b_1、330b_2、330b_3、rdx、rdy:读取移位器;

140:寄存器组;

150、A、B、C:执行队列;

151:发射指令;

160:功能单元模块;

170a、170b:操作数;

200:存储器;

300:输入/输出接口;

330c:旋转缓冲器;

400:外围装置;

500:总线;

D1:方向;

E[0]、E[k]、E[N]:移位器条目;

rdx[k]、rdx[N:0]、rd0[k]、rd1[k]、rd2[k]、rd3[k]:读取值;

RD_P0、RD_PK、RD_Px、RD_P0、RD_P1、RD_P2、RD_P3:读取端口;

REG_1、REG_M:寄存器;

Rpt:读取指针;

s:步幅值;

S410、S420、S430、S440、S450、S460、S510、S520、S530、S540、S550、S560、S610、S620、S630、S640、S650、S660、S710、S720、S730、S740、S750、S760、S810、S820、S830、S840:步骤;

V1、V2、V3、V4:矢量指令;

vrx[k]、vr0[k]、vr1[k]、vr2[k]、vr3[k]:寄存器地址值。

具体实施方式

以下公开内容提供用于实施本发明的不同特征的多个不同实施例或实例。下文描述组件和布置的具体实例以简化本发明。当然,这些只是实例且并不意欲为限制性的。举例来说,在以下描述中,第一特征在第二特征上方或第二特征上形成可包含第一特征与第二特征直接接触地形成的实施例,且还可包含可在第一特征与第二特征之间形成额外特征从而使得第一特征与第二特征可不直接接触的实施例。另外,本发明可在各种实例中重复附图标记和/或字母。此重复是出于简化和清楚的目的并且本身并不规定所论述的各种实施例和/或配置之间的关系。

此外,为了易于描述,在本文中可使用例如“在…之下”、“在…下方”、“下部”、“在…上方”、“上部”及其类似物的空间相关术语,以描述如图中所示出的一个元件或特征相对于另一元件或特征的关系。除图中所描绘的定向之外,空间相关术语意图涵盖装置在使用或操作中的不同定向。设备可以其它方式定向(旋转90度或处于其它定向),且本文中所使用的空间相关描述词因此可同样地进行解释。

图1示出根据一些实施例的计算机处理系统10,所述计算机处理系统10可包含处理器100、存储器200、输入/输出(input/output;I/O)接口300、外围装置400以及总线500。总线500可允许计算机处理系统10的组件当中的双向通信。本发明的一些实施例可使用比图1中所示出的组件更多、更少或不同的组件。作为实例,计算机处理系统10可还包含计时器、串行外围接口、数/模转换器、模/数转换器、显示驱动器、多种类型的存储器以及任何其它合适的组件。

在一些实施例中,处理器100配置成使用指令流水线(instruction pipeline)执行指令,其中指令的执行分解成数个阶段,包含指令提取(instruction fetch)阶段、指令解码(instruction decode)阶段、指令执行(instruction execution)阶段以及回写(writeback)阶段。处理器100可包含具有相对较高的存取速率的高速缓冲存储器,例如数据高速缓冲存储器和指令高速缓冲存储器。处理器100的数据高速缓冲存储器可以是多级数据高速缓冲存储器,所述多级数据高速缓冲存储器可包含L1数据高速缓冲存储器、L2数据高速缓冲存储器以及L3数据高速缓冲存储器。L1数据高速缓冲存储器、L2数据高速缓冲存储器以及L3数据高速缓冲存储器可位于处理器100内部或外部。在一些实施例中,计算机处理系统10可包含多个处理器,且任何数目的处理器可与处理器100相同或可与处理器100不同。

存储器200配置成存储执行指令所需的指令和数据的程序代码。存储器200可包含非易失性存储器或易失性存储器或其组合。举例来说,存储器200可包含随机存取存储器(random access memory;RAM)、动态随机存取存储器(dynamic random access memory;DRAM)、静态随机存取存储器(static random access memory;SRAM)、只读存储器(readonly memory;ROM)、可编程只读存储器(programmable read only memory;PROM)、电可编程只读存储器(electrically programmable read only memory;EPROM)、电可擦除可编程只读存储器(electrically erasable programmable read only memory;EEPROM)以及闪速存储器中的至少一个。

I/O接口300配置成通过总线500将输入装置和输出装置耦接到计算机系统10。计算机系统10可从输入装置接收数据且通过I/O接口300将数据发送到输出装置。I/O接口300可包含呈有线或无线连接的串联接口和并联接口中的至少一个。外围装置400可包含键盘、鼠标、传感器、信号接收器、监视器以及任何其它合适的装置。

图2示出根据一些实施例的处理器100的框图。处理器100可包含指令提取单元(instruction fetch unit)110、发射/解码单元(instruction issue/decode unit)120、读取移位器(read shifter)130、寄存器组(register file)140、执行队列(executionqueue)150以及功能单元(functional unit)模块160。指令提取单元110配置成提供由处理器100执行的指令111。在一些实施例中,指令111可以是矢量指令,其包含不具有操作数、具有一个操作数、两个操作数或任何其它数目个操作数的多个微操作。

寄存器组140可包含配置成存储寄存器组140的数据的多个寄存器REG_1到寄存器REG_M。寄存器REG_1到寄存器REG_M可存储用于执行指令的操作数或数据。寄存器REG_1到寄存器REG_M的数目可根据处理器100的架构而变化。在一些实施例中,寄存器组140更包含至少一个读取端口(read port)RD_P0到RD_PK,在读取操作中从所述读取端口RD_P0到读取端口RD_PK读取存储在寄存器REG_1到寄存器REG_M中的数据。在一些实施例中,寄存器组140可更包含用于将数据写入到寄存器组140中的至少一个写入端口(write port)(未示出)。

读取移位器130可包含每一时钟周期移位的多个移位器条目。读取移位器130的每一移位器条目与时钟周期(例如,第k时钟周期,其中k为正整数)相关联,且每一移位器条目包含指示寄存器组140的读取端口在时钟周期中的可用性的读取值(例如,读取值rdx[k])。读取值rdx[k]可以是指示逻辑值“1”和逻辑值“0”的多位值或单位值。举例来说,当读取值rdx[k]是逻辑值“1”时,其指示读取端口不可用于第k时钟周期中的读取操作。换句话说,存在将要在第k时钟周期使用读取端口执行的另一读取操作。或者,当读取值rdx[k]是逻辑值“0”时,其指示读取端口可用于第k时钟周期中的读取操作。在一些实施例中,在发射待由处理器100执行的指令后,设定读取移位器130的读取值。

发射/解码单元120耦接到指令提取单元110和读取移位器130且配置成基于存储在读取移位器130的移位器条目中的读取值来解码并发射指令111。在一些实施例中,当将指令111提供到发射/解码单元120时,发射/解码单元120可基于读取移位器130的读取值rdx[k]来确定是否停滞或发射包含第k时钟周期中的读取操作的指令111。当读取值rdx[k]是“0”时,发射/解码单元120对指令111解码并发射指令111到执行队列150。在发射指令111之后,将读取移位器130的读取值rdx[k]设定为“1”,以防止在第k时钟周期中使用读取端口的冲突。当读取移位器130的读取值rdx[k]是“1”时,发射/解码单元120停滞指令111的发射。当读取值rdx[k]是“1”时,其指示读取端口不可用于指令111在第k时钟周期中的读取操作,因此必需停滞指令111以避免读取端口中的冲突。发射/解码单元120可通过检查读取移位器130的读取值rdx[k]来检查读取端口在下一时钟周期(例如,第(k+1)个时钟周期)中的可用性。在一些实施例中,发射/解码单元120通过信号121与读取移位器130通信。

在一些实施例中,执行队列150通过总线耦接到发射/解码单元120且配置成将发射指令布置呈队列形式。执行队列150可将发射指令151提供到功能单元模块160以供执行。

功能单元模块160可包含配置成执行由执行队列150提供的发射指令的多个功能单元FUNIT_A、功能单元FUNIT_B以及功能单元FUNIT_C。在一些实施例中,功能单元模块160可包含算术逻辑单元(arithmetic logic unit;ALU)、地址生成单元(address generationunit;AGU)、浮点单元(floating-point unit;FPU)、加载存储单元(load-store unit;LSU)、分支执行单元(branch execution unit;BEU)以及其它功能单元。在一些实施例中,每一功能单元具有其自身的执行队列。在图2中,执行队列150由三个执行队列A、B以及C组成,一个执行队列分别用于每一功能单元FUNIT_A、功能单元FUNIT_B以及功能单元FUNIT_C。在一些实施例中,待由处理器100的功能单元执行的指令151具有使用寄存器组140的读取端口通过读取操作获得的至少一个操作数。在一些实施例中,指令151所需的读取端口的数目等于指令151的可能源操作数的数目。举例来说,具有两个操作数170a和170b的指令151需要寄存器组130的两个读取端口。在一些实施例中,指令151是包含多个微操作的矢量指令,且每一微操作具有分配到指令151的相同源操作数的相同读取端口。通过将相同读取端口分派到相同指令的每一微操作的相同源操作数,简化控制机构。

在一些实施例中,读取端口RD_P0到读取端口RD_PK包含多个共用读取端口和一专用读取端口,其中共用读取端口是所有功能单元或一组功能单元160共用而专用读取端口是具有未知读取时间的功能单元专用。在一些实施例中,专用读取端口可基于一些指示而改变为共用读取端口。举例来说,处理器100可更包含加载及存储单元(未示出),可通过使用专用读取端口通过将有效信号和寄存器组地址提供到寄存器组140来直接访问所述加载及存储单元。处理器100的加载及存储单元可提供何时进行寄存器读取的指示和何时执行队列150中不存在存储的指示。可基于何时进行寄存器读取的指示和何时执行队列150中不存在存储的指示将专用读取端口控制成共用读取端口。读取移位器130可包含指示申请中的存储指令的存储位(未示出)。完成处理器100的加载及存储单元中的所有存储指令清除读取移位器130中的存储位,此时专用读取端口目前可与其它功能单元160共用。由于可将未知的读取时间指令(例如存储指令)分配到专用读取端口,因此简化处理器100的控制机构。另外,由于在一些情况下专用读取端口可共用,因此提高控制机构的灵活性。

图3A示出根据一些实施例的与读取端口RD_Px(如图2的寄存器组140中所示)相关联的读取移位器330a。读取端口RD_Px可以是读取端口RD_0到读取端口RD_PK中的任一个。读取移位器330a可包含每一时钟周期在方向D1上移位的多个移位器条目E[0]到E[N]。在一些实施例中,基于流水线中的指令的最大数目确定读取移位器330a中的移位器条目N的数目。移位器条目E[0]被称作底部移位器条目,且移位器条目E[N]被称作顶部移位器条目。读取移位器330a可每一时钟周期移出底部移位器条目E[0]的值。在一些实施例中,移位器条目E[0]到移位器条目E[N]当中的移位器条目E[k]与第k时钟周期相关联,且移位器条目E[k]可包含读取值rdx[k]和寄存器地址值vrx[k]。举例来说,移位器条目E[0]包含在图3A中是“1”的读取值rdx[0]和在图3A中是“v5”的寄存器地址值vrx[0]。移位器条目E[N]包含是“0”的读取值rdx[N]和是空白寄存器地址值的寄存器地址值vrx[N]。在一些实施例中,如果不存在有效读取值(例如,当读取值rdx[N:0]全部是“0”时),则读取移位器完全不移位。在一些实施例中,直到执行期间的稍晚时间才知道存储指令的读取值。存储执行流水线中的存储指令可将请求发送到读取移位器以使用专用读取端口。读取端口中的预设值rdx[k]在使用读取端口中具有较高优先权,存储指令必须确证读取请求直到读取值rdx[k]是“0”,以从读取端口得到有效的存储数据。由于存储指令对于微处理器具有较低性能影响,因此存储数据的延迟读取不是问题。

读取移位器330a的读取值rdx[k]可指示读取端口RD_Px在第k时钟周期中的可用性;且读取移位器330a的寄存器地址值vrx[k]可指示读出数据的寄存器的地址。举例来说,当读取移位器330a的读取值rdx[k]是第一预定值(例如,“1”)时,其指示读取端口RD_Px在第k时钟周期中繁忙。当读取移位器330a的读取值rdx[k]是第二预定值(例如,“0”)时,其指示读取端口RD_Px可用于第k时钟周期中。

在一些实施例中,发射/解码单元320可基于读取移位器330a的移位器条目E[0]到移位器条目E[N]中存储的读取值来控制矢量指令的发射。举例来说,如果要求发射包含使用读取端口RD_Px的第k时钟周期中的读取操作的矢量指令,那么发射/解码单元320可基于读取移位器330a中的读取值rdx[k]来停滞或发射矢量指令。当读取移位器330a中的读取值rdx[k]是“0”时,发射/解码单元320可发射矢量指令。当读取移位器330a中的读取值rdx[k]是“1”时,发射/解码单元320可停滞矢量指令,并检查下一时钟周期(或第(k+1)个时钟周期)中的读取值rdx[k]。发射指令检查每一时钟周期的相同读取值rdx[k],直到所述周期处不再存在冲突,将发射指令发送到图2中的执行队列150。以此方式,通过简单地检查读取移位器330a中存储的读取值来防止使用读取端口RD_Px的冲突。通过使用读取移位器330a简化流水线控制机构。在一些实施例中,读取移位器中的条目数目是基于可一次性在执行队列和功能单元中的指令数目。举例来说,如果读取移位器具有32个条目,那么读取移位器可检查执行队列150中的指令对于将来周期32中的功能单元160的读取端口可用性。

在一些实施例中,读取移位器330a的移位器条目E[0]到移位器条目E[N]中的每一个可进一步存储转发信息(例如,转发位),所述转发信息配置成控制功能单元模块160中的功能单元FUNIT_A、功能单元FUNIT_B、功能单元FUNIT_C的转发操作。举例来说,当移位器条目的转发信息指示允许转发时,功能单元模块160或微处理器100的逻辑可配置成将结果数据从先前指令的功能单元转发到后续指令的功能单元。先前指令的功能单元可与后续指令的功能单元相同或不同。因而,后续指令的功能单元可直接从先前指令的功能单元获得结果数据而非从寄存器组140获得结果数据。由于后续指令的功能单元可早于数据转发而获得一个时钟周期中的结果数据,因此改进微处理器100的性能。由于发射指令的转发信息包含在读取移位器130中,因此将所有寄存器组读取端口控制集中于读取移位器130中,因此简化微处理器100的流水线控制机构。

图3B示出根据一些实施例的与读取端口RD_P0到读取端口RD_P3(如图2的寄存器组140中所示)相关联的读取移位器330b_0到读取移位器330b_3。图3B中的读取移位器330b_0到读取移位器330b_3中的每一个具有与图3A中所示的读取移位器330a类似的结构和组件。因而,读取移位器330b_0到读取移位器330b_3中的每一个可包含每一时钟周期在D1方向上偏移的多个移位器条目E[0]到E[N]。读取移位器330b_0的每一移位器条目E[k]可包含读取值rd0[k]和寄存器地址值vr0[k];读取移位器330b_1的每一移位器条目E[k]可包含读取值rd1[k]和寄存器地址值vr1[k];读取移位器330b_2的每一移位器条目E[k]可包含读取值rd2[k]和寄存器地址值vr2[k];以及读取移位器330b_3的每一移位器条目E[k]可包含读取值rd3[k]和寄存器地址值vr3[k]。读取端口RD_P0到读取端口RD_P3的可用性可分别基于读取移位器330b_0到读取移位器330b_3的移位器条目E[0]到移位器条目E[N]而确定。在一些实施例中,发射/解码单元320基于读取移位器330b_0到读取移位器330b_3中存储的值来控制矢量指令的发射。发射/解码单元320可检查读取移位器330b_0到读取移位器330b_3中存储的读取值来确定是否发射或停滞矢量指令,并确定在矢量指令的执行期间使用读取端口RD_P0到读取端口RD_P3当中的哪一读取端口。读取端口的数目是为最小化读取端口冲突的数目,以得到用于应用的最佳性能、功率以及面积。

在一些实施例中,相同读取端口用于相同矢量指令的所有微操作。在一些实施例中,两个读取端口用于需要两个操作数的矢量指令。在一些实施例中,读取端口RD_P0到读取端口RD_P3当中的至少一个读取端口是专用读取端口且其余读取端口是共用读取端口。专用读取端口专用于包含存储指令的矢量指令,其中存储指令的读取时间是未知的。在一些实施例中,与读取移位器330b_3相关联的读取端口RD_P3是专用读取端口而与读取移位器330b_0到读取移位器330b_2相关联的其它读取端口RD_P0到RD_P2是共用读取端口。

在一些实施例中,图3A和图3B中所示的读取移位器330a和读取移位器330b_0到读取移位器330b_3可由旋转缓冲器实施以节约功耗。图3C是示出根据一些实施例的旋转缓冲器330c的框图。旋转缓冲器300c可包含配置成存储读取移位器的值的多个缓冲器条目E[0]到E[N]。在一些实施例中,旋转缓冲器300c包含读取指针Rpt,其中读取点Rpt可指示读出存储值的缓冲器条目的地址,所述地址对应于图3A中的读取移位器条目E[0]。随着Rpt增加,条目E[0]变为条目E[N]且将rdx值重置为“0”以指示E[N]目前可用。在一些实施例中,每一时钟周期读出旋转缓冲器330c的一个缓冲器条目,且读取指针Rpt可移动每一时钟周期以指示移出的缓冲器条目的地址。在一些实施例中,Rpt在rdx[N:0]全部是“0”的情况下不增加,指示将不会在将来的任何时间从寄存器组中读取数据。

读取移位器上的移位操作为高耗能的,这是因为所有移位器条目必须每一时钟周期用新值更新。当旋转缓冲器330c用作读取移位器时,读取点Rpt可防止每一时钟周期中更新读取移位器的所有移位器条目的必要性。因此,减少由旋转缓冲器实施的读取移位器的功耗。

图4是示出根据一些实施例的基于读取移位器(例如,图2中的读取移位器130)的矢量指令V1的发射的流程图。矢量指令V1可包含m个微操作,其中每一微操作具有一个源操作数。对于m个周期的每一时钟周期执行1次微操作且在每一时钟周期中,从图2的寄存器组140读取源操作数。在一些实施例中,通过读取端口RD_Px从寄存器组(例如,图2中的寄存器组140)中读出操作数。在步骤410中,将矢量指令V1提供到发射/解码单元(例如,图2中的发射/解码单元120)。在步骤S420中,发射/解码单元可确定读取值rdx[m:1]中哪一个是第一预定值(例如,“1”)。当读取值rdx[m:1]中没有一个是第一预定值时,在步骤S450和步骤S460中,发射矢量指令V1并将所有读取值rdx[m:1]设定为第一预定值(例如,“1”)。当读取值rdx[m:1]中的至少一个是第一预定值(例如,“1”)时,在步骤S430和步骤S440中,发射/解码单元停滞矢量指令V1,并再次检查下一时钟周期中的读取值rdx[m:1]以确定是否在下一时钟周期中发射或停滞矢量指令V1。解码单元将在每一时钟周期检查的相同读取值rdx[m:1]直到读取端口变得可用于将指令发射到执行队列150。发射/解码单元可检查后续时钟周期中的读取值直到发射矢量指令V1。每一周期通过图2的总线151将指令从执行队列150发送到功能单元160。

图5是示出根据一些实施例的具有多个微操作的矢量指令V2的发射的流程图,其中每一微操作基于读取移位器具有多个源操作数。在一些实施例中,每一个操作數都是从寄存器组(例如,图2中的寄存器组140)的读取端口中读出的。因而,当矢量指令V2具有m个微操作和两个操作数时,与寄存器组的两个读取端口相关联的两个读取移位器(例如,读取移位器rdx和读取移位器rdy)用于控制矢量指令V2的发射。

在步骤S510中,提供矢量指令V2。在步骤S520中,发射/解码单元可确定是否读取值rdx[m:1]和读取值rdy[m:1]中的任一个是第一预定值(例如,“1”)。换句话说,发射/解码单元可检查读取移位器rdx和读取移位器rdy两个的m个连续移位器条目中的读取值。当读取值rdx[m:1]和读取值rdy[m:1]中没有一个是第一预定值时,在步骤S550和步骤S560中,发射矢量指令V2且将所有读取值rdx[m:1]和rdy[m:1]设定为第一预定值(例如,“1”)。当读取值rdx[m:1]和读取值rdy[m:1]中的至少一个是第一预定值时,在步骤S530和步骤S540中,发射/解码单元停滞矢量指令V2,并再次检查下一时钟周期中的读取值rdx[m:1]和读取值rdy[m:1]以确定是否在下一时钟周期中发射或停滞矢量指令V2。解码单元将在每一时钟周期检查的相同读取值rdx[m:1]和rdy[m:1]直到读取端口变得可用于将指令发射到执行队列150。发射/解码单元可检查读取移位器rdx和读取移位器rdy在后续时钟周期中的读取值直到发射矢量指令V2。

图6示出根据一些实施例的基于读取移位器(例如,读取移位器rdx)的在第k时钟周期中具有读取时间的矢量指令V3的发射。在步骤S610中,矢量指令V3可具有m个微操作操作,其中每一微操作具有一个源操作数。矢量指令V3可由发射/解码单元120发射到图2的执行单元150,但当读取移位器130控制寄存器组140的读取端口以将源操作数数据提供到图2的功能单元160时,在第k时钟周期中将矢量指令从执行单元150发送到图2的功能单元160。在步骤S620中,发射/解码单元可确定是否读取移位器rdx的多个连续移位器条目中的读取值rdx[(m+k):(1+k)]中的任一个是第一预定值(例如,“1”)。当读取值rdx[(m+k):(1+k)]中没有一个是第一预定值时,在步骤S650和步骤S660中,发射矢量指令V3且读取值rdx[(m+k):(1+k)]设定为第一预定值(例如,“1”)。当读取值rdx[(m+k):(1+k)]中的至少1个是第一预定值时,在步骤S630和步骤S640中,发射/解码单元停滞矢量指令V3,并再次检查下一时钟周期中的读取值rdx[(m+k):(1+k)]以确定是否在下一时钟周期中发射或停滞矢量指令V3。解码单元将在每一时钟周期检查的相同读取值rdx[(m+k):(1+k)]直到读取端口变得可用于将指令发射到执行队列150。发射/解码单元可检查读取移位器rdx在后续时钟周期中的读取值直到发射矢量指令V3。

图7示出根据一些实施例的基于读取移位器(例如,读取移位器rdx)的矢量指令V4的发射。m个微操作的读取值不是连续的周期,但具有步幅值s。在这种情况下,读取值是rdx[m*s+1,(m-1)*s+1,(m-2)*s+1,…,2s+1,s+1,1]。在步骤S710中,矢量指令V4可具有m个微操作,其中每一微操作具有一个源操作数。在步骤S720中,发射/解码单元可确定是否读取移位器rdx的多个非连续移位器条目中的读取值rdx[k1,k2,k3,…,km]中的任一个是第一预定值(例如,“1”),其中k1、k2、k3以及km是正整数。当读取值rdx[k1,k2,k3,…,km]中没有一个是第一预定值时,在步骤S750和步骤S760中,发射矢量指令V4且将读取值rdx[k1,k2,k3,…,km]设定为第一预定值(例如,“1”)。当读取值rdx[k1,k2,k3,…,km]中的至少一个是第一预定值时,在步骤S730和步骤S740中,发射/解码单元停滞矢量指令V4,并再次检查下一时钟周期中的读取值rdx[k1,k2,k3,…,km]以确定是否在下一时钟周期中发射或停滞矢量指令V4。发射/解码单元可检查读取移位器rdx在后续时钟周期中的读取值rdx[k1,k2,k3,…,km]直到发射矢量指令V4。应注意,在s=0时,此图7与图4相同。

图8示出根据一些实施例的控制指令流水线的方法。在步骤S810中,基于待发射的指令的读取时间确定第一时钟周期。在步骤S820中,基于读取移位器的读取值确定读取端口在第一时钟周期中的可用性,其中读取值包含于读取时延的多个移位器条目当中的一移位器条目中,且每一时钟周期移出多个移位器条目。在步骤S830中,当读取移位器的读取值指示读取端口可用于第一时钟周期中时,解码并发射指令。在步骤S840中,当读取移位器的读取值指示读取端口不可用于第一时钟周期中时,停滞指令。

根据本发明的一些实施例,介绍一种处理器,所述处理器包含寄存器组、读取移位器、解码单元以及多个功能单元。寄存器组包含读取端口。读取移位器包含多个移位器条目且配置成每一时钟周期移出多个移位器条目当中的一移位器条目。多个移位器条目中的每一个与时钟周期相关联,且多个移位器条目中的每一个包括指示寄存器组的读取端口对于时钟周期中的读取操作的可用性。解码单元耦接到读取移位器且配置成基于读取移位器的多个移位器条目中包含的读取值来解码并发射指令。多个功能单元耦接到解码单元和寄存器组,且配置成执行由解码单元发射的指令并对寄存器组的读取端口执行读取操作。

根据本发明的一些实施例,介绍了一种控制指令流水线的方法。方法包含以下步骤:基于待发射的指令的读取时间确定第一时钟周期;基于读取移位器的读取值,确定读取端口在第一时钟周期中的可用性,其中读取值包含于读取时延的多个移位器条目当中的一移位器条目中,且每一时钟周期移出多个移位器条目;在读取移位器的读取值指示读取端口在第一时钟周期中可用时解码并发射指令;以及在读取移位器的读取值指示读取端口不可用于第一时钟周期中时停滞指令。

前文已概述了若干实施例的特征以使得所属领域的技术人员可更好地理解以下详细描述。所属领域的技术人员应了解,其可轻易地将本发明用作设计或修改用于实现本文中所引入的实施例的相同目的和/或达成相同优势的其它工艺和结构的基础。所属领域的技术人员还应认识到,此类等效构造并不脱离本发明的精神和范围,且其可在不脱离本发明的精神和范围的情况下在本文中进行各种改变、替代以及更改。

20页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:处理数据依赖性的方法及其微处理器以及数据处理系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!